[COMMON] lib: libdss: add aarch64 headers for libdss
authorYoungwan Kim <y103.kim@samsung.com>
Wed, 18 Jul 2018 04:24:55 +0000 (13:24 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Mon, 23 Jul 2018 08:04:56 +0000 (17:04 +0900)
Change-Id: Ic62e240ff26f2fbea7f8ba062165f84998bd00cc
Signed-off-by: Youngwan Kim <y103.kim@samsung.com>
2265 files changed:
lib/libdss-build.sh
lib/libdss-include/_G_config.h [new file with mode: 0644]
lib/libdss-include/a.out.h [new file with mode: 0644]
lib/libdss-include/aio.h [new file with mode: 0644]
lib/libdss-include/aliases.h [new file with mode: 0644]
lib/libdss-include/alloca.h [new file with mode: 0644]
lib/libdss-include/ar.h [new file with mode: 0644]
lib/libdss-include/argp.h [new file with mode: 0644]
lib/libdss-include/argz.h [new file with mode: 0644]
lib/libdss-include/arpa/ftp.h [new file with mode: 0644]
lib/libdss-include/arpa/inet.h [new file with mode: 0644]
lib/libdss-include/arpa/nameser.h [new file with mode: 0644]
lib/libdss-include/arpa/nameser_compat.h [new file with mode: 0644]
lib/libdss-include/arpa/telnet.h [new file with mode: 0644]
lib/libdss-include/arpa/tftp.h [new file with mode: 0644]
lib/libdss-include/asm-generic/auxvec.h [new file with mode: 0644]
lib/libdss-include/asm-generic/bitsperlong.h [new file with mode: 0644]
lib/libdss-include/asm-generic/errno-base.h [new file with mode: 0644]
lib/libdss-include/asm-generic/errno.h [new file with mode: 0644]
lib/libdss-include/asm-generic/fcntl.h [new file with mode: 0644]
lib/libdss-include/asm-generic/int-l64.h [new file with mode: 0644]
lib/libdss-include/asm-generic/int-ll64.h [new file with mode: 0644]
lib/libdss-include/asm-generic/ioctl.h [new file with mode: 0644]
lib/libdss-include/asm-generic/ioctls.h [new file with mode: 0644]
lib/libdss-include/asm-generic/ipcbuf.h [new file with mode: 0644]
lib/libdss-include/asm-generic/kvm_para.h [new file with mode: 0644]
lib/libdss-include/asm-generic/mman-common.h [new file with mode: 0644]
lib/libdss-include/asm-generic/mman.h [new file with mode: 0644]
lib/libdss-include/asm-generic/msgbuf.h [new file with mode: 0644]
lib/libdss-include/asm-generic/param.h [new file with mode: 0644]
lib/libdss-include/asm-generic/poll.h [new file with mode: 0644]
lib/libdss-include/asm-generic/posix_types.h [new file with mode: 0644]
lib/libdss-include/asm-generic/resource.h [new file with mode: 0644]
lib/libdss-include/asm-generic/sembuf.h [new file with mode: 0644]
lib/libdss-include/asm-generic/setup.h [new file with mode: 0644]
lib/libdss-include/asm-generic/shmbuf.h [new file with mode: 0644]
lib/libdss-include/asm-generic/shmparam.h [new file with mode: 0644]
lib/libdss-include/asm-generic/siginfo.h [new file with mode: 0644]
lib/libdss-include/asm-generic/signal-defs.h [new file with mode: 0644]
lib/libdss-include/asm-generic/signal.h [new file with mode: 0644]
lib/libdss-include/asm-generic/socket.h [new file with mode: 0644]
lib/libdss-include/asm-generic/sockios.h [new file with mode: 0644]
lib/libdss-include/asm-generic/stat.h [new file with mode: 0644]
lib/libdss-include/asm-generic/statfs.h [new file with mode: 0644]
lib/libdss-include/asm-generic/swab.h [new file with mode: 0644]
lib/libdss-include/asm-generic/termbits.h [new file with mode: 0644]
lib/libdss-include/asm-generic/termios.h [new file with mode: 0644]
lib/libdss-include/asm-generic/types.h [new file with mode: 0644]
lib/libdss-include/asm-generic/ucontext.h [new file with mode: 0644]
lib/libdss-include/asm-generic/unistd.h [new file with mode: 0644]
lib/libdss-include/asm/auxvec.h [new file with mode: 0644]
lib/libdss-include/asm/bitsperlong.h [new file with mode: 0644]
lib/libdss-include/asm/byteorder.h [new file with mode: 0644]
lib/libdss-include/asm/errno.h [new file with mode: 0644]
lib/libdss-include/asm/fcntl.h [new file with mode: 0644]
lib/libdss-include/asm/hwcap.h [new file with mode: 0644]
lib/libdss-include/asm/ioctl.h [new file with mode: 0644]
lib/libdss-include/asm/ioctls.h [new file with mode: 0644]
lib/libdss-include/asm/ipcbuf.h [new file with mode: 0644]
lib/libdss-include/asm/kvm.h [new file with mode: 0644]
lib/libdss-include/asm/kvm_para.h [new file with mode: 0644]
lib/libdss-include/asm/mman.h [new file with mode: 0644]
lib/libdss-include/asm/msgbuf.h [new file with mode: 0644]
lib/libdss-include/asm/param.h [new file with mode: 0644]
lib/libdss-include/asm/perf_regs.h [new file with mode: 0644]
lib/libdss-include/asm/poll.h [new file with mode: 0644]
lib/libdss-include/asm/posix_types.h [new file with mode: 0644]
lib/libdss-include/asm/ptrace.h [new file with mode: 0644]
lib/libdss-include/asm/resource.h [new file with mode: 0644]
lib/libdss-include/asm/sembuf.h [new file with mode: 0644]
lib/libdss-include/asm/setup.h [new file with mode: 0644]
lib/libdss-include/asm/shmbuf.h [new file with mode: 0644]
lib/libdss-include/asm/sigcontext.h [new file with mode: 0644]
lib/libdss-include/asm/siginfo.h [new file with mode: 0644]
lib/libdss-include/asm/signal.h [new file with mode: 0644]
lib/libdss-include/asm/socket.h [new file with mode: 0644]
lib/libdss-include/asm/sockios.h [new file with mode: 0644]
lib/libdss-include/asm/stat.h [new file with mode: 0644]
lib/libdss-include/asm/statfs.h [new file with mode: 0644]
lib/libdss-include/asm/swab.h [new file with mode: 0644]
lib/libdss-include/asm/termbits.h [new file with mode: 0644]
lib/libdss-include/asm/termios.h [new file with mode: 0644]
lib/libdss-include/asm/types.h [new file with mode: 0644]
lib/libdss-include/asm/ucontext.h [new file with mode: 0644]
lib/libdss-include/asm/unistd.h [new file with mode: 0644]
lib/libdss-include/assert.h [new file with mode: 0644]
lib/libdss-include/bits/a.out.h [new file with mode: 0644]
lib/libdss-include/bits/auxv.h [new file with mode: 0644]
lib/libdss-include/bits/byteswap-16.h [new file with mode: 0644]
lib/libdss-include/bits/byteswap.h [new file with mode: 0644]
lib/libdss-include/bits/cmathcalls.h [new file with mode: 0644]
lib/libdss-include/bits/confname.h [new file with mode: 0644]
lib/libdss-include/bits/dirent.h [new file with mode: 0644]
lib/libdss-include/bits/dlfcn.h [new file with mode: 0644]
lib/libdss-include/bits/elfclass.h [new file with mode: 0644]
lib/libdss-include/bits/endian.h [new file with mode: 0644]
lib/libdss-include/bits/environments.h [new file with mode: 0644]
lib/libdss-include/bits/epoll.h [new file with mode: 0644]
lib/libdss-include/bits/errno.h [new file with mode: 0644]
lib/libdss-include/bits/error.h [new file with mode: 0644]
lib/libdss-include/bits/eventfd.h [new file with mode: 0644]
lib/libdss-include/bits/fcntl-linux.h [new file with mode: 0644]
lib/libdss-include/bits/fcntl.h [new file with mode: 0644]
lib/libdss-include/bits/fcntl2.h [new file with mode: 0644]
lib/libdss-include/bits/fenv.h [new file with mode: 0644]
lib/libdss-include/bits/fenvinline.h [new file with mode: 0644]
lib/libdss-include/bits/huge_val.h [new file with mode: 0644]
lib/libdss-include/bits/huge_valf.h [new file with mode: 0644]
lib/libdss-include/bits/huge_vall.h [new file with mode: 0644]
lib/libdss-include/bits/hwcap.h [new file with mode: 0644]
lib/libdss-include/bits/in.h [new file with mode: 0644]
lib/libdss-include/bits/inf.h [new file with mode: 0644]
lib/libdss-include/bits/initspin.h [new file with mode: 0644]
lib/libdss-include/bits/inotify.h [new file with mode: 0644]
lib/libdss-include/bits/ioctl-types.h [new file with mode: 0644]
lib/libdss-include/bits/ioctls.h [new file with mode: 0644]
lib/libdss-include/bits/ipc.h [new file with mode: 0644]
lib/libdss-include/bits/ipctypes.h [new file with mode: 0644]
lib/libdss-include/bits/libio-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/libm-simd-decl-stubs.h [new file with mode: 0644]
lib/libdss-include/bits/link.h [new file with mode: 0644]
lib/libdss-include/bits/local_lim.h [new file with mode: 0644]
lib/libdss-include/bits/locale.h [new file with mode: 0644]
lib/libdss-include/bits/math-finite.h [new file with mode: 0644]
lib/libdss-include/bits/math-vector.h [new file with mode: 0644]
lib/libdss-include/bits/mathcalls.h [new file with mode: 0644]
lib/libdss-include/bits/mathdef.h [new file with mode: 0644]
lib/libdss-include/bits/mathinline.h [new file with mode: 0644]
lib/libdss-include/bits/mman-linux.h [new file with mode: 0644]
lib/libdss-include/bits/mman.h [new file with mode: 0644]
lib/libdss-include/bits/monetary-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/mqueue.h [new file with mode: 0644]
lib/libdss-include/bits/mqueue2.h [new file with mode: 0644]
lib/libdss-include/bits/msq.h [new file with mode: 0644]
lib/libdss-include/bits/nan.h [new file with mode: 0644]
lib/libdss-include/bits/netdb.h [new file with mode: 0644]
lib/libdss-include/bits/param.h [new file with mode: 0644]
lib/libdss-include/bits/poll.h [new file with mode: 0644]
lib/libdss-include/bits/poll2.h [new file with mode: 0644]
lib/libdss-include/bits/posix1_lim.h [new file with mode: 0644]
lib/libdss-include/bits/posix2_lim.h [new file with mode: 0644]
lib/libdss-include/bits/posix_opt.h [new file with mode: 0644]
lib/libdss-include/bits/printf-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/pthreadtypes.h [new file with mode: 0644]
lib/libdss-include/bits/resource.h [new file with mode: 0644]
lib/libdss-include/bits/sched.h [new file with mode: 0644]
lib/libdss-include/bits/select.h [new file with mode: 0644]
lib/libdss-include/bits/select2.h [new file with mode: 0644]
lib/libdss-include/bits/sem.h [new file with mode: 0644]
lib/libdss-include/bits/semaphore.h [new file with mode: 0644]
lib/libdss-include/bits/setjmp.h [new file with mode: 0644]
lib/libdss-include/bits/setjmp2.h [new file with mode: 0644]
lib/libdss-include/bits/shm.h [new file with mode: 0644]
lib/libdss-include/bits/sigaction.h [new file with mode: 0644]
lib/libdss-include/bits/sigcontext.h [new file with mode: 0644]
lib/libdss-include/bits/siginfo.h [new file with mode: 0644]
lib/libdss-include/bits/signalfd.h [new file with mode: 0644]
lib/libdss-include/bits/signum.h [new file with mode: 0644]
lib/libdss-include/bits/sigset.h [new file with mode: 0644]
lib/libdss-include/bits/sigstack.h [new file with mode: 0644]
lib/libdss-include/bits/sigthread.h [new file with mode: 0644]
lib/libdss-include/bits/sockaddr.h [new file with mode: 0644]
lib/libdss-include/bits/socket.h [new file with mode: 0644]
lib/libdss-include/bits/socket2.h [new file with mode: 0644]
lib/libdss-include/bits/socket_type.h [new file with mode: 0644]
lib/libdss-include/bits/stab.def [new file with mode: 0644]
lib/libdss-include/bits/stat.h [new file with mode: 0644]
lib/libdss-include/bits/statfs.h [new file with mode: 0644]
lib/libdss-include/bits/statvfs.h [new file with mode: 0644]
lib/libdss-include/bits/stdio-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/stdio.h [new file with mode: 0644]
lib/libdss-include/bits/stdio2.h [new file with mode: 0644]
lib/libdss-include/bits/stdio_lim.h [new file with mode: 0644]
lib/libdss-include/bits/stdlib-bsearch.h [new file with mode: 0644]
lib/libdss-include/bits/stdlib-float.h [new file with mode: 0644]
lib/libdss-include/bits/stdlib-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/stdlib.h [new file with mode: 0644]
lib/libdss-include/bits/string.h [new file with mode: 0644]
lib/libdss-include/bits/string2.h [new file with mode: 0644]
lib/libdss-include/bits/string3.h [new file with mode: 0644]
lib/libdss-include/bits/stropts.h [new file with mode: 0644]
lib/libdss-include/bits/sys_errlist.h [new file with mode: 0644]
lib/libdss-include/bits/syscall.h [new file with mode: 0644]
lib/libdss-include/bits/sysctl.h [new file with mode: 0644]
lib/libdss-include/bits/syslog-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/syslog-path.h [new file with mode: 0644]
lib/libdss-include/bits/syslog.h [new file with mode: 0644]
lib/libdss-include/bits/termios.h [new file with mode: 0644]
lib/libdss-include/bits/time.h [new file with mode: 0644]
lib/libdss-include/bits/timerfd.h [new file with mode: 0644]
lib/libdss-include/bits/timex.h [new file with mode: 0644]
lib/libdss-include/bits/types.h [new file with mode: 0644]
lib/libdss-include/bits/typesizes.h [new file with mode: 0644]
lib/libdss-include/bits/uio.h [new file with mode: 0644]
lib/libdss-include/bits/unistd.h [new file with mode: 0644]
lib/libdss-include/bits/ustat.h [new file with mode: 0644]
lib/libdss-include/bits/utmp.h [new file with mode: 0644]
lib/libdss-include/bits/utmpx.h [new file with mode: 0644]
lib/libdss-include/bits/utsname.h [new file with mode: 0644]
lib/libdss-include/bits/waitflags.h [new file with mode: 0644]
lib/libdss-include/bits/waitstatus.h [new file with mode: 0644]
lib/libdss-include/bits/wchar-ldbl.h [new file with mode: 0644]
lib/libdss-include/bits/wchar.h [new file with mode: 0644]
lib/libdss-include/bits/wchar2.h [new file with mode: 0644]
lib/libdss-include/bits/wordsize.h [new file with mode: 0644]
lib/libdss-include/bits/xopen_lim.h [new file with mode: 0644]
lib/libdss-include/bits/xtitypes.h [new file with mode: 0644]
lib/libdss-include/byteswap.h [new file with mode: 0644]
lib/libdss-include/complex.h [new file with mode: 0644]
lib/libdss-include/cpio.h [new file with mode: 0644]
lib/libdss-include/crypt.h [new file with mode: 0644]
lib/libdss-include/ctype.h [new file with mode: 0644]
lib/libdss-include/dirent.h [new file with mode: 0644]
lib/libdss-include/dlfcn.h [new file with mode: 0644]
lib/libdss-include/elf.h [new file with mode: 0644]
lib/libdss-include/endian.h [new file with mode: 0644]
lib/libdss-include/envz.h [new file with mode: 0644]
lib/libdss-include/err.h [new file with mode: 0644]
lib/libdss-include/errno.h [new file with mode: 0644]
lib/libdss-include/error.h [new file with mode: 0644]
lib/libdss-include/execinfo.h [new file with mode: 0644]
lib/libdss-include/fcntl.h [new file with mode: 0644]
lib/libdss-include/features.h [new file with mode: 0644]
lib/libdss-include/fenv.h [new file with mode: 0644]
lib/libdss-include/fmtmsg.h [new file with mode: 0644]
lib/libdss-include/fnmatch.h [new file with mode: 0644]
lib/libdss-include/fpu_control.h [new file with mode: 0644]
lib/libdss-include/fstab.h [new file with mode: 0644]
lib/libdss-include/fts.h [new file with mode: 0644]
lib/libdss-include/ftw.h [new file with mode: 0644]
lib/libdss-include/gconv.h [new file with mode: 0644]
lib/libdss-include/getopt.h [new file with mode: 0644]
lib/libdss-include/glob.h [new file with mode: 0644]
lib/libdss-include/gnu-versions.h [new file with mode: 0644]
lib/libdss-include/gnu/lib-names-lp64.h [new file with mode: 0644]
lib/libdss-include/gnu/lib-names.h [new file with mode: 0644]
lib/libdss-include/gnu/libc-version.h [new file with mode: 0644]
lib/libdss-include/gnu/stubs-lp64.h [new file with mode: 0644]
lib/libdss-include/gnu/stubs.h [new file with mode: 0644]
lib/libdss-include/grp.h [new file with mode: 0644]
lib/libdss-include/gshadow.h [new file with mode: 0644]
lib/libdss-include/iconv.h [new file with mode: 0644]
lib/libdss-include/ieee754.h [new file with mode: 0644]
lib/libdss-include/ifaddrs.h [new file with mode: 0644]
lib/libdss-include/include/_G_config.h [new file with mode: 0644]
lib/libdss-include/include/a.out.h [new file with mode: 0644]
lib/libdss-include/include/aio.h [new file with mode: 0644]
lib/libdss-include/include/aliases.h [new file with mode: 0644]
lib/libdss-include/include/alloca.h [new file with mode: 0644]
lib/libdss-include/include/ar.h [new file with mode: 0644]
lib/libdss-include/include/argp.h [new file with mode: 0644]
lib/libdss-include/include/argz.h [new file with mode: 0644]
lib/libdss-include/include/arpa/ftp.h [new file with mode: 0644]
lib/libdss-include/include/arpa/inet.h [new file with mode: 0644]
lib/libdss-include/include/arpa/nameser.h [new file with mode: 0644]
lib/libdss-include/include/arpa/nameser_compat.h [new file with mode: 0644]
lib/libdss-include/include/arpa/telnet.h [new file with mode: 0644]
lib/libdss-include/include/arpa/tftp.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/auxvec.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/bitsperlong.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/errno-base.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/errno.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/int-l64.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/int-ll64.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/ioctls.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/ipcbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/kvm_para.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/mman-common.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/mman.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/msgbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/param.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/poll.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/posix_types.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/resource.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/sembuf.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/setup.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/shmbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/shmparam.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/siginfo.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/signal-defs.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/signal.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/socket.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/sockios.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/stat.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/statfs.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/swab.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/termbits.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/termios.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/types.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/ucontext.h [new file with mode: 0644]
lib/libdss-include/include/asm-generic/unistd.h [new file with mode: 0644]
lib/libdss-include/include/asm/auxvec.h [new file with mode: 0644]
lib/libdss-include/include/asm/bitsperlong.h [new file with mode: 0644]
lib/libdss-include/include/asm/byteorder.h [new file with mode: 0644]
lib/libdss-include/include/asm/errno.h [new file with mode: 0644]
lib/libdss-include/include/asm/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/asm/hwcap.h [new file with mode: 0644]
lib/libdss-include/include/asm/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/asm/ioctls.h [new file with mode: 0644]
lib/libdss-include/include/asm/ipcbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm/kvm.h [new file with mode: 0644]
lib/libdss-include/include/asm/kvm_para.h [new file with mode: 0644]
lib/libdss-include/include/asm/mman.h [new file with mode: 0644]
lib/libdss-include/include/asm/msgbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm/param.h [new file with mode: 0644]
lib/libdss-include/include/asm/perf_regs.h [new file with mode: 0644]
lib/libdss-include/include/asm/poll.h [new file with mode: 0644]
lib/libdss-include/include/asm/posix_types.h [new file with mode: 0644]
lib/libdss-include/include/asm/ptrace.h [new file with mode: 0644]
lib/libdss-include/include/asm/resource.h [new file with mode: 0644]
lib/libdss-include/include/asm/sembuf.h [new file with mode: 0644]
lib/libdss-include/include/asm/setup.h [new file with mode: 0644]
lib/libdss-include/include/asm/shmbuf.h [new file with mode: 0644]
lib/libdss-include/include/asm/sigcontext.h [new file with mode: 0644]
lib/libdss-include/include/asm/siginfo.h [new file with mode: 0644]
lib/libdss-include/include/asm/signal.h [new file with mode: 0644]
lib/libdss-include/include/asm/socket.h [new file with mode: 0644]
lib/libdss-include/include/asm/sockios.h [new file with mode: 0644]
lib/libdss-include/include/asm/stat.h [new file with mode: 0644]
lib/libdss-include/include/asm/statfs.h [new file with mode: 0644]
lib/libdss-include/include/asm/swab.h [new file with mode: 0644]
lib/libdss-include/include/asm/termbits.h [new file with mode: 0644]
lib/libdss-include/include/asm/termios.h [new file with mode: 0644]
lib/libdss-include/include/asm/types.h [new file with mode: 0644]
lib/libdss-include/include/asm/ucontext.h [new file with mode: 0644]
lib/libdss-include/include/asm/unistd.h [new file with mode: 0644]
lib/libdss-include/include/assert.h [new file with mode: 0644]
lib/libdss-include/include/bits/a.out.h [new file with mode: 0644]
lib/libdss-include/include/bits/auxv.h [new file with mode: 0644]
lib/libdss-include/include/bits/byteswap-16.h [new file with mode: 0644]
lib/libdss-include/include/bits/byteswap.h [new file with mode: 0644]
lib/libdss-include/include/bits/cmathcalls.h [new file with mode: 0644]
lib/libdss-include/include/bits/confname.h [new file with mode: 0644]
lib/libdss-include/include/bits/dirent.h [new file with mode: 0644]
lib/libdss-include/include/bits/dlfcn.h [new file with mode: 0644]
lib/libdss-include/include/bits/elfclass.h [new file with mode: 0644]
lib/libdss-include/include/bits/endian.h [new file with mode: 0644]
lib/libdss-include/include/bits/environments.h [new file with mode: 0644]
lib/libdss-include/include/bits/epoll.h [new file with mode: 0644]
lib/libdss-include/include/bits/errno.h [new file with mode: 0644]
lib/libdss-include/include/bits/error.h [new file with mode: 0644]
lib/libdss-include/include/bits/eventfd.h [new file with mode: 0644]
lib/libdss-include/include/bits/fcntl-linux.h [new file with mode: 0644]
lib/libdss-include/include/bits/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/bits/fcntl2.h [new file with mode: 0644]
lib/libdss-include/include/bits/fenv.h [new file with mode: 0644]
lib/libdss-include/include/bits/fenvinline.h [new file with mode: 0644]
lib/libdss-include/include/bits/huge_val.h [new file with mode: 0644]
lib/libdss-include/include/bits/huge_valf.h [new file with mode: 0644]
lib/libdss-include/include/bits/huge_vall.h [new file with mode: 0644]
lib/libdss-include/include/bits/hwcap.h [new file with mode: 0644]
lib/libdss-include/include/bits/in.h [new file with mode: 0644]
lib/libdss-include/include/bits/inf.h [new file with mode: 0644]
lib/libdss-include/include/bits/initspin.h [new file with mode: 0644]
lib/libdss-include/include/bits/inotify.h [new file with mode: 0644]
lib/libdss-include/include/bits/ioctl-types.h [new file with mode: 0644]
lib/libdss-include/include/bits/ioctls.h [new file with mode: 0644]
lib/libdss-include/include/bits/ipc.h [new file with mode: 0644]
lib/libdss-include/include/bits/ipctypes.h [new file with mode: 0644]
lib/libdss-include/include/bits/libio-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/libm-simd-decl-stubs.h [new file with mode: 0644]
lib/libdss-include/include/bits/link.h [new file with mode: 0644]
lib/libdss-include/include/bits/local_lim.h [new file with mode: 0644]
lib/libdss-include/include/bits/locale.h [new file with mode: 0644]
lib/libdss-include/include/bits/math-finite.h [new file with mode: 0644]
lib/libdss-include/include/bits/math-vector.h [new file with mode: 0644]
lib/libdss-include/include/bits/mathcalls.h [new file with mode: 0644]
lib/libdss-include/include/bits/mathdef.h [new file with mode: 0644]
lib/libdss-include/include/bits/mathinline.h [new file with mode: 0644]
lib/libdss-include/include/bits/mman-linux.h [new file with mode: 0644]
lib/libdss-include/include/bits/mman.h [new file with mode: 0644]
lib/libdss-include/include/bits/monetary-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/mqueue.h [new file with mode: 0644]
lib/libdss-include/include/bits/mqueue2.h [new file with mode: 0644]
lib/libdss-include/include/bits/msq.h [new file with mode: 0644]
lib/libdss-include/include/bits/nan.h [new file with mode: 0644]
lib/libdss-include/include/bits/netdb.h [new file with mode: 0644]
lib/libdss-include/include/bits/param.h [new file with mode: 0644]
lib/libdss-include/include/bits/poll.h [new file with mode: 0644]
lib/libdss-include/include/bits/poll2.h [new file with mode: 0644]
lib/libdss-include/include/bits/posix1_lim.h [new file with mode: 0644]
lib/libdss-include/include/bits/posix2_lim.h [new file with mode: 0644]
lib/libdss-include/include/bits/posix_opt.h [new file with mode: 0644]
lib/libdss-include/include/bits/printf-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/pthreadtypes.h [new file with mode: 0644]
lib/libdss-include/include/bits/resource.h [new file with mode: 0644]
lib/libdss-include/include/bits/sched.h [new file with mode: 0644]
lib/libdss-include/include/bits/select.h [new file with mode: 0644]
lib/libdss-include/include/bits/select2.h [new file with mode: 0644]
lib/libdss-include/include/bits/sem.h [new file with mode: 0644]
lib/libdss-include/include/bits/semaphore.h [new file with mode: 0644]
lib/libdss-include/include/bits/setjmp.h [new file with mode: 0644]
lib/libdss-include/include/bits/setjmp2.h [new file with mode: 0644]
lib/libdss-include/include/bits/shm.h [new file with mode: 0644]
lib/libdss-include/include/bits/sigaction.h [new file with mode: 0644]
lib/libdss-include/include/bits/sigcontext.h [new file with mode: 0644]
lib/libdss-include/include/bits/siginfo.h [new file with mode: 0644]
lib/libdss-include/include/bits/signalfd.h [new file with mode: 0644]
lib/libdss-include/include/bits/signum.h [new file with mode: 0644]
lib/libdss-include/include/bits/sigset.h [new file with mode: 0644]
lib/libdss-include/include/bits/sigstack.h [new file with mode: 0644]
lib/libdss-include/include/bits/sigthread.h [new file with mode: 0644]
lib/libdss-include/include/bits/sockaddr.h [new file with mode: 0644]
lib/libdss-include/include/bits/socket.h [new file with mode: 0644]
lib/libdss-include/include/bits/socket2.h [new file with mode: 0644]
lib/libdss-include/include/bits/socket_type.h [new file with mode: 0644]
lib/libdss-include/include/bits/stab.def [new file with mode: 0644]
lib/libdss-include/include/bits/stat.h [new file with mode: 0644]
lib/libdss-include/include/bits/statfs.h [new file with mode: 0644]
lib/libdss-include/include/bits/statvfs.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdio-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdio.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdio2.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdio_lim.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdlib-bsearch.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdlib-float.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdlib-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/stdlib.h [new file with mode: 0644]
lib/libdss-include/include/bits/string.h [new file with mode: 0644]
lib/libdss-include/include/bits/string2.h [new file with mode: 0644]
lib/libdss-include/include/bits/string3.h [new file with mode: 0644]
lib/libdss-include/include/bits/stropts.h [new file with mode: 0644]
lib/libdss-include/include/bits/sys_errlist.h [new file with mode: 0644]
lib/libdss-include/include/bits/syscall.h [new file with mode: 0644]
lib/libdss-include/include/bits/sysctl.h [new file with mode: 0644]
lib/libdss-include/include/bits/syslog-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/syslog-path.h [new file with mode: 0644]
lib/libdss-include/include/bits/syslog.h [new file with mode: 0644]
lib/libdss-include/include/bits/termios.h [new file with mode: 0644]
lib/libdss-include/include/bits/time.h [new file with mode: 0644]
lib/libdss-include/include/bits/timerfd.h [new file with mode: 0644]
lib/libdss-include/include/bits/timex.h [new file with mode: 0644]
lib/libdss-include/include/bits/types.h [new file with mode: 0644]
lib/libdss-include/include/bits/typesizes.h [new file with mode: 0644]
lib/libdss-include/include/bits/uio.h [new file with mode: 0644]
lib/libdss-include/include/bits/unistd.h [new file with mode: 0644]
lib/libdss-include/include/bits/ustat.h [new file with mode: 0644]
lib/libdss-include/include/bits/utmp.h [new file with mode: 0644]
lib/libdss-include/include/bits/utmpx.h [new file with mode: 0644]
lib/libdss-include/include/bits/utsname.h [new file with mode: 0644]
lib/libdss-include/include/bits/waitflags.h [new file with mode: 0644]
lib/libdss-include/include/bits/waitstatus.h [new file with mode: 0644]
lib/libdss-include/include/bits/wchar-ldbl.h [new file with mode: 0644]
lib/libdss-include/include/bits/wchar.h [new file with mode: 0644]
lib/libdss-include/include/bits/wchar2.h [new file with mode: 0644]
lib/libdss-include/include/bits/wordsize.h [new file with mode: 0644]
lib/libdss-include/include/bits/xopen_lim.h [new file with mode: 0644]
lib/libdss-include/include/bits/xtitypes.h [new file with mode: 0644]
lib/libdss-include/include/byteswap.h [new file with mode: 0644]
lib/libdss-include/include/complex.h [new file with mode: 0644]
lib/libdss-include/include/cpio.h [new file with mode: 0644]
lib/libdss-include/include/crypt.h [new file with mode: 0644]
lib/libdss-include/include/ctype.h [new file with mode: 0644]
lib/libdss-include/include/dirent.h [new file with mode: 0644]
lib/libdss-include/include/dlfcn.h [new file with mode: 0644]
lib/libdss-include/include/elf.h [new file with mode: 0644]
lib/libdss-include/include/endian.h [new file with mode: 0644]
lib/libdss-include/include/envz.h [new file with mode: 0644]
lib/libdss-include/include/err.h [new file with mode: 0644]
lib/libdss-include/include/errno.h [new file with mode: 0644]
lib/libdss-include/include/error.h [new file with mode: 0644]
lib/libdss-include/include/execinfo.h [new file with mode: 0644]
lib/libdss-include/include/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/features.h [new file with mode: 0644]
lib/libdss-include/include/fenv.h [new file with mode: 0644]
lib/libdss-include/include/fmtmsg.h [new file with mode: 0644]
lib/libdss-include/include/fnmatch.h [new file with mode: 0644]
lib/libdss-include/include/fpu_control.h [new file with mode: 0644]
lib/libdss-include/include/fstab.h [new file with mode: 0644]
lib/libdss-include/include/fts.h [new file with mode: 0644]
lib/libdss-include/include/ftw.h [new file with mode: 0644]
lib/libdss-include/include/gconv.h [new file with mode: 0644]
lib/libdss-include/include/getopt.h [new file with mode: 0644]
lib/libdss-include/include/glob.h [new file with mode: 0644]
lib/libdss-include/include/gnu-versions.h [new file with mode: 0644]
lib/libdss-include/include/gnu/lib-names-lp64.h [new file with mode: 0644]
lib/libdss-include/include/gnu/lib-names.h [new file with mode: 0644]
lib/libdss-include/include/gnu/libc-version.h [new file with mode: 0644]
lib/libdss-include/include/gnu/stubs-lp64.h [new file with mode: 0644]
lib/libdss-include/include/gnu/stubs.h [new file with mode: 0644]
lib/libdss-include/include/grp.h [new file with mode: 0644]
lib/libdss-include/include/gshadow.h [new file with mode: 0644]
lib/libdss-include/include/iconv.h [new file with mode: 0644]
lib/libdss-include/include/ieee754.h [new file with mode: 0644]
lib/libdss-include/include/ifaddrs.h [new file with mode: 0644]
lib/libdss-include/include/inttypes.h [new file with mode: 0644]
lib/libdss-include/include/langinfo.h [new file with mode: 0644]
lib/libdss-include/include/lastlog.h [new file with mode: 0644]
lib/libdss-include/include/libgen.h [new file with mode: 0644]
lib/libdss-include/include/libintl.h [new file with mode: 0644]
lib/libdss-include/include/libio.h [new file with mode: 0644]
lib/libdss-include/include/limits.h [new file with mode: 0644]
lib/libdss-include/include/link.h [new file with mode: 0644]
lib/libdss-include/include/linux/acct.h [new file with mode: 0644]
lib/libdss-include/include/linux/adb.h [new file with mode: 0644]
lib/libdss-include/include/linux/adfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/affs_hardblocks.h [new file with mode: 0644]
lib/libdss-include/include/linux/agpgart.h [new file with mode: 0644]
lib/libdss-include/include/linux/aio_abi.h [new file with mode: 0644]
lib/libdss-include/include/linux/am437x-vpfe.h [new file with mode: 0644]
lib/libdss-include/include/linux/android/binder.h [new file with mode: 0644]
lib/libdss-include/include/linux/apm_bios.h [new file with mode: 0644]
lib/libdss-include/include/linux/arcfb.h [new file with mode: 0644]
lib/libdss-include/include/linux/atalk.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_eni.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_he.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_idt77105.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_nicstar.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_tcp.h [new file with mode: 0644]
lib/libdss-include/include/linux/atm_zatm.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmapi.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmarp.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmbr2684.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmclip.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmioc.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmlec.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmmpc.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmppp.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmsap.h [new file with mode: 0644]
lib/libdss-include/include/linux/atmsvc.h [new file with mode: 0644]
lib/libdss-include/include/linux/audit.h [new file with mode: 0644]
lib/libdss-include/include/linux/aufs_type.h [new file with mode: 0644]
lib/libdss-include/include/linux/auto_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/auto_fs4.h [new file with mode: 0644]
lib/libdss-include/include/linux/auxvec.h [new file with mode: 0644]
lib/libdss-include/include/linux/ax25.h [new file with mode: 0644]
lib/libdss-include/include/linux/b1lli.h [new file with mode: 0644]
lib/libdss-include/include/linux/baycom.h [new file with mode: 0644]
lib/libdss-include/include/linux/bcm933xx_hcs.h [new file with mode: 0644]
lib/libdss-include/include/linux/bfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/binfmts.h [new file with mode: 0644]
lib/libdss-include/include/linux/blkpg.h [new file with mode: 0644]
lib/libdss-include/include/linux/blktrace_api.h [new file with mode: 0644]
lib/libdss-include/include/linux/bpf.h [new file with mode: 0644]
lib/libdss-include/include/linux/bpf_common.h [new file with mode: 0644]
lib/libdss-include/include/linux/bpqether.h [new file with mode: 0644]
lib/libdss-include/include/linux/bsg.h [new file with mode: 0644]
lib/libdss-include/include/linux/btrfs.h [new file with mode: 0644]
lib/libdss-include/include/linux/byteorder/big_endian.h [new file with mode: 0644]
lib/libdss-include/include/linux/byteorder/little_endian.h [new file with mode: 0644]
lib/libdss-include/include/linux/caif/caif_socket.h [new file with mode: 0644]
lib/libdss-include/include/linux/caif/if_caif.h [new file with mode: 0644]
lib/libdss-include/include/linux/can.h [new file with mode: 0644]
lib/libdss-include/include/linux/can/bcm.h [new file with mode: 0644]
lib/libdss-include/include/linux/can/error.h [new file with mode: 0644]
lib/libdss-include/include/linux/can/gw.h [new file with mode: 0644]
lib/libdss-include/include/linux/can/netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/can/raw.h [new file with mode: 0644]
lib/libdss-include/include/linux/capability.h [new file with mode: 0644]
lib/libdss-include/include/linux/capi.h [new file with mode: 0644]
lib/libdss-include/include/linux/cciss_defs.h [new file with mode: 0644]
lib/libdss-include/include/linux/cciss_ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/cdrom.h [new file with mode: 0644]
lib/libdss-include/include/linux/cgroupstats.h [new file with mode: 0644]
lib/libdss-include/include/linux/chio.h [new file with mode: 0644]
lib/libdss-include/include/linux/cm4000_cs.h [new file with mode: 0644]
lib/libdss-include/include/linux/cn_proc.h [new file with mode: 0644]
lib/libdss-include/include/linux/coda.h [new file with mode: 0644]
lib/libdss-include/include/linux/coda_psdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/coff.h [new file with mode: 0644]
lib/libdss-include/include/linux/connector.h [new file with mode: 0644]
lib/libdss-include/include/linux/const.h [new file with mode: 0644]
lib/libdss-include/include/linux/cramfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/cuda.h [new file with mode: 0644]
lib/libdss-include/include/linux/cyclades.h [new file with mode: 0644]
lib/libdss-include/include/linux/cycx_cfm.h [new file with mode: 0644]
lib/libdss-include/include/linux/dcbnl.h [new file with mode: 0644]
lib/libdss-include/include/linux/dccp.h [new file with mode: 0644]
lib/libdss-include/include/linux/dlm.h [new file with mode: 0644]
lib/libdss-include/include/linux/dlm_device.h [new file with mode: 0644]
lib/libdss-include/include/linux/dlm_netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/dlm_plock.h [new file with mode: 0644]
lib/libdss-include/include/linux/dlmconstants.h [new file with mode: 0644]
lib/libdss-include/include/linux/dm-ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/dm-log-userspace.h [new file with mode: 0644]
lib/libdss-include/include/linux/dn.h [new file with mode: 0644]
lib/libdss-include/include/linux/dqblk_xfs.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/audio.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/ca.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/dmx.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/frontend.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/net.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/osd.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/version.h [new file with mode: 0644]
lib/libdss-include/include/linux/dvb/video.h [new file with mode: 0644]
lib/libdss-include/include/linux/edd.h [new file with mode: 0644]
lib/libdss-include/include/linux/efs_fs_sb.h [new file with mode: 0644]
lib/libdss-include/include/linux/elf-em.h [new file with mode: 0644]
lib/libdss-include/include/linux/elf-fdpic.h [new file with mode: 0644]
lib/libdss-include/include/linux/elf.h [new file with mode: 0644]
lib/libdss-include/include/linux/elfcore.h [new file with mode: 0644]
lib/libdss-include/include/linux/errno.h [new file with mode: 0644]
lib/libdss-include/include/linux/errqueue.h [new file with mode: 0644]
lib/libdss-include/include/linux/ethtool.h [new file with mode: 0644]
lib/libdss-include/include/linux/eventpoll.h [new file with mode: 0644]
lib/libdss-include/include/linux/fadvise.h [new file with mode: 0644]
lib/libdss-include/include/linux/falloc.h [new file with mode: 0644]
lib/libdss-include/include/linux/fanotify.h [new file with mode: 0644]
lib/libdss-include/include/linux/fb.h [new file with mode: 0644]
lib/libdss-include/include/linux/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/linux/fd.h [new file with mode: 0644]
lib/libdss-include/include/linux/fdreg.h [new file with mode: 0644]
lib/libdss-include/include/linux/fib_rules.h [new file with mode: 0644]
lib/libdss-include/include/linux/fiemap.h [new file with mode: 0644]
lib/libdss-include/include/linux/filter.h [new file with mode: 0644]
lib/libdss-include/include/linux/firewire-cdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/firewire-constants.h [new file with mode: 0644]
lib/libdss-include/include/linux/flat.h [new file with mode: 0644]
lib/libdss-include/include/linux/fou.h [new file with mode: 0644]
lib/libdss-include/include/linux/fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/fsl_hypervisor.h [new file with mode: 0644]
lib/libdss-include/include/linux/fuse.h [new file with mode: 0644]
lib/libdss-include/include/linux/futex.h [new file with mode: 0644]
lib/libdss-include/include/linux/gameport.h [new file with mode: 0644]
lib/libdss-include/include/linux/gen_stats.h [new file with mode: 0644]
lib/libdss-include/include/linux/genetlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/gfs2_ondisk.h [new file with mode: 0644]
lib/libdss-include/include/linux/gigaset_dev.h [new file with mode: 0644]
lib/libdss-include/include/linux/gsmmux.h [new file with mode: 0644]
lib/libdss-include/include/linux/hdlc.h [new file with mode: 0644]
lib/libdss-include/include/linux/hdlc/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/hdlcdrv.h [new file with mode: 0644]
lib/libdss-include/include/linux/hdreg.h [new file with mode: 0644]
lib/libdss-include/include/linux/hid.h [new file with mode: 0644]
lib/libdss-include/include/linux/hiddev.h [new file with mode: 0644]
lib/libdss-include/include/linux/hidraw.h [new file with mode: 0644]
lib/libdss-include/include/linux/hpet.h [new file with mode: 0644]
lib/libdss-include/include/linux/hsi/cs-protocol.h [new file with mode: 0644]
lib/libdss-include/include/linux/hsi/hsi_char.h [new file with mode: 0644]
lib/libdss-include/include/linux/hsr_netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/hw_breakpoint.h [new file with mode: 0644]
lib/libdss-include/include/linux/hyperv.h [new file with mode: 0644]
lib/libdss-include/include/linux/hysdn_if.h [new file with mode: 0644]
lib/libdss-include/include/linux/i2c-dev.h [new file with mode: 0644]
lib/libdss-include/include/linux/i2c.h [new file with mode: 0644]
lib/libdss-include/include/linux/i2o-dev.h [new file with mode: 0644]
lib/libdss-include/include/linux/i8k.h [new file with mode: 0644]
lib/libdss-include/include/linux/icmp.h [new file with mode: 0644]
lib/libdss-include/include/linux/icmpv6.h [new file with mode: 0644]
lib/libdss-include/include/linux/if.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_addr.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_addrlabel.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_alg.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_arcnet.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_arp.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_bonding.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_bridge.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_cablemodem.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_eql.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_ether.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_fc.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_fddi.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_frad.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_hippi.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_infiniband.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_link.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_ltalk.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_packet.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_phonet.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_plip.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_ppp.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_pppol2tp.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_pppox.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_slip.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_team.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_tun.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_tunnel.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_vlan.h [new file with mode: 0644]
lib/libdss-include/include/linux/if_x25.h [new file with mode: 0644]
lib/libdss-include/include/linux/igmp.h [new file with mode: 0644]
lib/libdss-include/include/linux/iio/events.h [new file with mode: 0644]
lib/libdss-include/include/linux/iio/types.h [new file with mode: 0644]
lib/libdss-include/include/linux/ila.h [new file with mode: 0644]
lib/libdss-include/include/linux/in.h [new file with mode: 0644]
lib/libdss-include/include/linux/in6.h [new file with mode: 0644]
lib/libdss-include/include/linux/in_route.h [new file with mode: 0644]
lib/libdss-include/include/linux/inet_diag.h [new file with mode: 0644]
lib/libdss-include/include/linux/inotify.h [new file with mode: 0644]
lib/libdss-include/include/linux/input-event-codes.h [new file with mode: 0644]
lib/libdss-include/include/linux/input.h [new file with mode: 0644]
lib/libdss-include/include/linux/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/ip.h [new file with mode: 0644]
lib/libdss-include/include/linux/ip6_tunnel.h [new file with mode: 0644]
lib/libdss-include/include/linux/ip_vs.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipc.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipmi.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipmi_msgdefs.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipsec.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipv6.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipv6_route.h [new file with mode: 0644]
lib/libdss-include/include/linux/ipx.h [new file with mode: 0644]
lib/libdss-include/include/linux/irda.h [new file with mode: 0644]
lib/libdss-include/include/linux/irqnr.h [new file with mode: 0644]
lib/libdss-include/include/linux/isdn.h [new file with mode: 0644]
lib/libdss-include/include/linux/isdn/capicmd.h [new file with mode: 0644]
lib/libdss-include/include/linux/isdn_divertif.h [new file with mode: 0644]
lib/libdss-include/include/linux/isdn_ppp.h [new file with mode: 0644]
lib/libdss-include/include/linux/isdnif.h [new file with mode: 0644]
lib/libdss-include/include/linux/iso_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/ivtv.h [new file with mode: 0644]
lib/libdss-include/include/linux/ivtvfb.h [new file with mode: 0644]
lib/libdss-include/include/linux/ixjuser.h [new file with mode: 0644]
lib/libdss-include/include/linux/jffs2.h [new file with mode: 0644]
lib/libdss-include/include/linux/joystick.h [new file with mode: 0644]
lib/libdss-include/include/linux/kcmp.h [new file with mode: 0644]
lib/libdss-include/include/linux/kd.h [new file with mode: 0644]
lib/libdss-include/include/linux/kdev_t.h [new file with mode: 0644]
lib/libdss-include/include/linux/kernel-page-flags.h [new file with mode: 0644]
lib/libdss-include/include/linux/kernel.h [new file with mode: 0644]
lib/libdss-include/include/linux/kernelcapi.h [new file with mode: 0644]
lib/libdss-include/include/linux/kexec.h [new file with mode: 0644]
lib/libdss-include/include/linux/keyboard.h [new file with mode: 0644]
lib/libdss-include/include/linux/keyctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/kvm.h [new file with mode: 0644]
lib/libdss-include/include/linux/l2tp.h [new file with mode: 0644]
lib/libdss-include/include/linux/libc-compat.h [new file with mode: 0644]
lib/libdss-include/include/linux/limits.h [new file with mode: 0644]
lib/libdss-include/include/linux/llc.h [new file with mode: 0644]
lib/libdss-include/include/linux/loop.h [new file with mode: 0644]
lib/libdss-include/include/linux/lp.h [new file with mode: 0644]
lib/libdss-include/include/linux/lwtunnel.h [new file with mode: 0644]
lib/libdss-include/include/linux/magic.h [new file with mode: 0644]
lib/libdss-include/include/linux/major.h [new file with mode: 0644]
lib/libdss-include/include/linux/map_to_7segment.h [new file with mode: 0644]
lib/libdss-include/include/linux/matroxfb.h [new file with mode: 0644]
lib/libdss-include/include/linux/mdio.h [new file with mode: 0644]
lib/libdss-include/include/linux/media-bus-format.h [new file with mode: 0644]
lib/libdss-include/include/linux/media.h [new file with mode: 0644]
lib/libdss-include/include/linux/mei.h [new file with mode: 0644]
lib/libdss-include/include/linux/membarrier.h [new file with mode: 0644]
lib/libdss-include/include/linux/memfd.h [new file with mode: 0644]
lib/libdss-include/include/linux/mempolicy.h [new file with mode: 0644]
lib/libdss-include/include/linux/meye.h [new file with mode: 0644]
lib/libdss-include/include/linux/mic_common.h [new file with mode: 0644]
lib/libdss-include/include/linux/mic_ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/mii.h [new file with mode: 0644]
lib/libdss-include/include/linux/minix_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/mman.h [new file with mode: 0644]
lib/libdss-include/include/linux/mmc/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/mmtimer.h [new file with mode: 0644]
lib/libdss-include/include/linux/mpls.h [new file with mode: 0644]
lib/libdss-include/include/linux/mpls_iptunnel.h [new file with mode: 0644]
lib/libdss-include/include/linux/mqueue.h [new file with mode: 0644]
lib/libdss-include/include/linux/mroute.h [new file with mode: 0644]
lib/libdss-include/include/linux/mroute6.h [new file with mode: 0644]
lib/libdss-include/include/linux/msdos_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/msg.h [new file with mode: 0644]
lib/libdss-include/include/linux/mtio.h [new file with mode: 0644]
lib/libdss-include/include/linux/n_r3964.h [new file with mode: 0644]
lib/libdss-include/include/linux/nbd.h [new file with mode: 0644]
lib/libdss-include/include/linux/ncp.h [new file with mode: 0644]
lib/libdss-include/include/linux/ncp_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/ncp_mount.h [new file with mode: 0644]
lib/libdss-include/include/linux/ncp_no.h [new file with mode: 0644]
lib/libdss-include/include/linux/ndctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/neighbour.h [new file with mode: 0644]
lib/libdss-include/include/linux/net.h [new file with mode: 0644]
lib/libdss-include/include/linux/net_dropmon.h [new file with mode: 0644]
lib/libdss-include/include/linux/net_namespace.h [new file with mode: 0644]
lib/libdss-include/include/linux/net_tstamp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netconf.h [new file with mode: 0644]
lib/libdss-include/include/linux/netdevice.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/ipset/ip_set.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/ipset/ip_set_bitmap.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/ipset/ip_set_hash.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/ipset/ip_set_list.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_conntrack_common.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_conntrack_ftp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_conntrack_sctp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_conntrack_tcp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_conntrack_tuple_common.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_nat.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_tables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nf_tables_compat.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_acct.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_compat.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_conntrack.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_cthelper.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_cttimeout.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_log.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/nfnetlink_queue.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/x_tables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_AUDIT.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_CHECKSUM.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_CLASSIFY.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_CONNMARK.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_CONNSECMARK.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_CT.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_DSCP.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_HMARK.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_IDLETIMER.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_LED.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_LOG.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_MARK.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_NFLOG.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_NFQUEUE.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_RATEEST.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_SECMARK.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_TCPMSS.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_TCPOPTSTRIP.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_TEE.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_TPROXY.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_addrtype.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_bpf.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_cgroup.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_cluster.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_comment.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_connbytes.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_connlabel.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_connlimit.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_connmark.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_conntrack.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_cpu.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_dccp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_devgroup.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_dscp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_ecn.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_esp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_hashlimit.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_helper.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_ipcomp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_iprange.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_ipvs.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_l2tp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_length.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_limit.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_mac.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_mark.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_multiport.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_nfacct.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_osf.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_owner.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_physdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_pkttype.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_policy.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_quota.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_rateest.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_realm.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_recent.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_rpfilter.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_sctp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_set.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_socket.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_state.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_statistic.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_string.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_tcpmss.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_tcpudp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_time.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter/xt_u32.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_arp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_arp/arp_tables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_arp/arpt_mangle.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_802_3.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_among.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_arp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_arpreply.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_ip.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_ip6.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_limit.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_log.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_m.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_t.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_nat.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_nflog.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_pkttype.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_redirect.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_stp.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebt_vlan.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_bridge/ebtables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_decnet.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ip_tables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_ECN.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_LOG.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_REJECT.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_TTL.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_ah.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_ecn.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv4/ipt_ttl.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6_tables.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_HL.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_LOG.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_NPT.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_REJECT.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ah.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_frag.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_hl.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ipv6header.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_mh.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_opts.h [new file with mode: 0644]
lib/libdss-include/include/linux/netfilter_ipv6/ip6t_rt.h [new file with mode: 0644]
lib/libdss-include/include/linux/netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/netlink_diag.h [new file with mode: 0644]
lib/libdss-include/include/linux/netrom.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfc.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs2.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs3.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs4.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs4_mount.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs_idmap.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfs_mount.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsacl.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsd/cld.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsd/debug.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsd/export.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsd/nfsfh.h [new file with mode: 0644]
lib/libdss-include/include/linux/nfsd/stats.h [new file with mode: 0644]
lib/libdss-include/include/linux/nl80211.h [new file with mode: 0644]
lib/libdss-include/include/linux/nubus.h [new file with mode: 0644]
lib/libdss-include/include/linux/nvme_ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/nvram.h [new file with mode: 0644]
lib/libdss-include/include/linux/omap3isp.h [new file with mode: 0644]
lib/libdss-include/include/linux/omapfb.h [new file with mode: 0644]
lib/libdss-include/include/linux/oom.h [new file with mode: 0644]
lib/libdss-include/include/linux/openvswitch.h [new file with mode: 0644]
lib/libdss-include/include/linux/packet_diag.h [new file with mode: 0644]
lib/libdss-include/include/linux/param.h [new file with mode: 0644]
lib/libdss-include/include/linux/parport.h [new file with mode: 0644]
lib/libdss-include/include/linux/patchkey.h [new file with mode: 0644]
lib/libdss-include/include/linux/pci.h [new file with mode: 0644]
lib/libdss-include/include/linux/pci_regs.h [new file with mode: 0644]
lib/libdss-include/include/linux/perf_event.h [new file with mode: 0644]
lib/libdss-include/include/linux/personality.h [new file with mode: 0644]
lib/libdss-include/include/linux/pfkeyv2.h [new file with mode: 0644]
lib/libdss-include/include/linux/pg.h [new file with mode: 0644]
lib/libdss-include/include/linux/phantom.h [new file with mode: 0644]
lib/libdss-include/include/linux/phonet.h [new file with mode: 0644]
lib/libdss-include/include/linux/pkt_cls.h [new file with mode: 0644]
lib/libdss-include/include/linux/pkt_sched.h [new file with mode: 0644]
lib/libdss-include/include/linux/pktcdvd.h [new file with mode: 0644]
lib/libdss-include/include/linux/pmu.h [new file with mode: 0644]
lib/libdss-include/include/linux/poll.h [new file with mode: 0644]
lib/libdss-include/include/linux/posix_types.h [new file with mode: 0644]
lib/libdss-include/include/linux/ppdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/ppp-comp.h [new file with mode: 0644]
lib/libdss-include/include/linux/ppp-ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/ppp_defs.h [new file with mode: 0644]
lib/libdss-include/include/linux/pps.h [new file with mode: 0644]
lib/libdss-include/include/linux/prctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/psci.h [new file with mode: 0644]
lib/libdss-include/include/linux/ptp_clock.h [new file with mode: 0644]
lib/libdss-include/include/linux/ptrace.h [new file with mode: 0644]
lib/libdss-include/include/linux/qnx4_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/qnxtypes.h [new file with mode: 0644]
lib/libdss-include/include/linux/quota.h [new file with mode: 0644]
lib/libdss-include/include/linux/radeonfb.h [new file with mode: 0644]
lib/libdss-include/include/linux/raid/md_p.h [new file with mode: 0644]
lib/libdss-include/include/linux/raid/md_u.h [new file with mode: 0644]
lib/libdss-include/include/linux/random.h [new file with mode: 0644]
lib/libdss-include/include/linux/raw.h [new file with mode: 0644]
lib/libdss-include/include/linux/rds.h [new file with mode: 0644]
lib/libdss-include/include/linux/reboot.h [new file with mode: 0644]
lib/libdss-include/include/linux/reiserfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/reiserfs_xattr.h [new file with mode: 0644]
lib/libdss-include/include/linux/resource.h [new file with mode: 0644]
lib/libdss-include/include/linux/rfkill.h [new file with mode: 0644]
lib/libdss-include/include/linux/romfs_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/rose.h [new file with mode: 0644]
lib/libdss-include/include/linux/route.h [new file with mode: 0644]
lib/libdss-include/include/linux/rtc.h [new file with mode: 0644]
lib/libdss-include/include/linux/rtnetlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/scc.h [new file with mode: 0644]
lib/libdss-include/include/linux/sched.h [new file with mode: 0644]
lib/libdss-include/include/linux/scif_ioctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/screen_info.h [new file with mode: 0644]
lib/libdss-include/include/linux/sctp.h [new file with mode: 0644]
lib/libdss-include/include/linux/sdla.h [new file with mode: 0644]
lib/libdss-include/include/linux/seccomp.h [new file with mode: 0644]
lib/libdss-include/include/linux/securebits.h [new file with mode: 0644]
lib/libdss-include/include/linux/selinux_netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/sem.h [new file with mode: 0644]
lib/libdss-include/include/linux/serial.h [new file with mode: 0644]
lib/libdss-include/include/linux/serial_core.h [new file with mode: 0644]
lib/libdss-include/include/linux/serial_reg.h [new file with mode: 0644]
lib/libdss-include/include/linux/serio.h [new file with mode: 0644]
lib/libdss-include/include/linux/shm.h [new file with mode: 0644]
lib/libdss-include/include/linux/signal.h [new file with mode: 0644]
lib/libdss-include/include/linux/signalfd.h [new file with mode: 0644]
lib/libdss-include/include/linux/smiapp.h [new file with mode: 0644]
lib/libdss-include/include/linux/snmp.h [new file with mode: 0644]
lib/libdss-include/include/linux/sock_diag.h [new file with mode: 0644]
lib/libdss-include/include/linux/socket.h [new file with mode: 0644]
lib/libdss-include/include/linux/sockios.h [new file with mode: 0644]
lib/libdss-include/include/linux/sonet.h [new file with mode: 0644]
lib/libdss-include/include/linux/sonypi.h [new file with mode: 0644]
lib/libdss-include/include/linux/sound.h [new file with mode: 0644]
lib/libdss-include/include/linux/soundcard.h [new file with mode: 0644]
lib/libdss-include/include/linux/spi/spidev.h [new file with mode: 0644]
lib/libdss-include/include/linux/stat.h [new file with mode: 0644]
lib/libdss-include/include/linux/stddef.h [new file with mode: 0644]
lib/libdss-include/include/linux/string.h [new file with mode: 0644]
lib/libdss-include/include/linux/sunrpc/debug.h [new file with mode: 0644]
lib/libdss-include/include/linux/suspend_ioctls.h [new file with mode: 0644]
lib/libdss-include/include/linux/swab.h [new file with mode: 0644]
lib/libdss-include/include/linux/synclink.h [new file with mode: 0644]
lib/libdss-include/include/linux/sysctl.h [new file with mode: 0644]
lib/libdss-include/include/linux/sysinfo.h [new file with mode: 0644]
lib/libdss-include/include/linux/target_core_user.h [new file with mode: 0644]
lib/libdss-include/include/linux/taskstats.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_bpf.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_connmark.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_csum.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_defact.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_gact.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_ipt.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_mirred.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_nat.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_pedit.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_skbedit.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_act/tc_vlan.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_ematch/tc_em_cmp.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_ematch/tc_em_meta.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_ematch/tc_em_nbyte.h [new file with mode: 0644]
lib/libdss-include/include/linux/tc_ematch/tc_em_text.h [new file with mode: 0644]
lib/libdss-include/include/linux/tcp.h [new file with mode: 0644]
lib/libdss-include/include/linux/tcp_metrics.h [new file with mode: 0644]
lib/libdss-include/include/linux/telephony.h [new file with mode: 0644]
lib/libdss-include/include/linux/termios.h [new file with mode: 0644]
lib/libdss-include/include/linux/thermal.h [new file with mode: 0644]
lib/libdss-include/include/linux/time.h [new file with mode: 0644]
lib/libdss-include/include/linux/times.h [new file with mode: 0644]
lib/libdss-include/include/linux/timex.h [new file with mode: 0644]
lib/libdss-include/include/linux/tiocl.h [new file with mode: 0644]
lib/libdss-include/include/linux/tipc.h [new file with mode: 0644]
lib/libdss-include/include/linux/tipc_config.h [new file with mode: 0644]
lib/libdss-include/include/linux/tipc_netlink.h [new file with mode: 0644]
lib/libdss-include/include/linux/toshiba.h [new file with mode: 0644]
lib/libdss-include/include/linux/tty.h [new file with mode: 0644]
lib/libdss-include/include/linux/tty_flags.h [new file with mode: 0644]
lib/libdss-include/include/linux/types.h [new file with mode: 0644]
lib/libdss-include/include/linux/udf_fs_i.h [new file with mode: 0644]
lib/libdss-include/include/linux/udp.h [new file with mode: 0644]
lib/libdss-include/include/linux/uhid.h [new file with mode: 0644]
lib/libdss-include/include/linux/uinput.h [new file with mode: 0644]
lib/libdss-include/include/linux/uio.h [new file with mode: 0644]
lib/libdss-include/include/linux/ultrasound.h [new file with mode: 0644]
lib/libdss-include/include/linux/un.h [new file with mode: 0644]
lib/libdss-include/include/linux/unistd.h [new file with mode: 0644]
lib/libdss-include/include/linux/unix_diag.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/audio.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/cdc-wdm.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/cdc.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/ch11.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/ch9.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/functionfs.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/g_printer.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/gadgetfs.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/midi.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/tmc.h [new file with mode: 0644]
lib/libdss-include/include/linux/usb/video.h [new file with mode: 0644]
lib/libdss-include/include/linux/usbdevice_fs.h [new file with mode: 0644]
lib/libdss-include/include/linux/usbip.h [new file with mode: 0644]
lib/libdss-include/include/linux/userfaultfd.h [new file with mode: 0644]
lib/libdss-include/include/linux/utime.h [new file with mode: 0644]
lib/libdss-include/include/linux/utsname.h [new file with mode: 0644]
lib/libdss-include/include/linux/uuid.h [new file with mode: 0644]
lib/libdss-include/include/linux/uvcvideo.h [new file with mode: 0644]
lib/libdss-include/include/linux/v4l2-common.h [new file with mode: 0644]
lib/libdss-include/include/linux/v4l2-controls.h [new file with mode: 0644]
lib/libdss-include/include/linux/v4l2-dv-timings.h [new file with mode: 0644]
lib/libdss-include/include/linux/v4l2-mediabus.h [new file with mode: 0644]
lib/libdss-include/include/linux/v4l2-subdev.h [new file with mode: 0644]
lib/libdss-include/include/linux/version.h [new file with mode: 0644]
lib/libdss-include/include/linux/veth.h [new file with mode: 0644]
lib/libdss-include/include/linux/vfio.h [new file with mode: 0644]
lib/libdss-include/include/linux/vhost.h [new file with mode: 0644]
lib/libdss-include/include/linux/videodev2.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_9p.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_balloon.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_blk.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_config.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_console.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_gpu.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_ids.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_input.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_net.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_pci.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_ring.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_rng.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_scsi.h [new file with mode: 0644]
lib/libdss-include/include/linux/virtio_types.h [new file with mode: 0644]
lib/libdss-include/include/linux/vm_sockets.h [new file with mode: 0644]
lib/libdss-include/include/linux/vt.h [new file with mode: 0644]
lib/libdss-include/include/linux/wait.h [new file with mode: 0644]
lib/libdss-include/include/linux/wanrouter.h [new file with mode: 0644]
lib/libdss-include/include/linux/watchdog.h [new file with mode: 0644]
lib/libdss-include/include/linux/wimax.h [new file with mode: 0644]
lib/libdss-include/include/linux/wimax/i2400m.h [new file with mode: 0644]
lib/libdss-include/include/linux/wireless.h [new file with mode: 0644]
lib/libdss-include/include/linux/x25.h [new file with mode: 0644]
lib/libdss-include/include/linux/xattr.h [new file with mode: 0644]
lib/libdss-include/include/linux/xfrm.h [new file with mode: 0644]
lib/libdss-include/include/linux/xilinx-v4l2-controls.h [new file with mode: 0644]
lib/libdss-include/include/linux/zorro.h [new file with mode: 0644]
lib/libdss-include/include/linux/zorro_ids.h [new file with mode: 0644]
lib/libdss-include/include/locale.h [new file with mode: 0644]
lib/libdss-include/include/malloc.h [new file with mode: 0644]
lib/libdss-include/include/math.h [new file with mode: 0644]
lib/libdss-include/include/mcheck.h [new file with mode: 0644]
lib/libdss-include/include/memory.h [new file with mode: 0644]
lib/libdss-include/include/misc/cxl.h [new file with mode: 0644]
lib/libdss-include/include/mntent.h [new file with mode: 0644]
lib/libdss-include/include/monetary.h [new file with mode: 0644]
lib/libdss-include/include/mqueue.h [new file with mode: 0644]
lib/libdss-include/include/mtd/inftl-user.h [new file with mode: 0644]
lib/libdss-include/include/mtd/mtd-abi.h [new file with mode: 0644]
lib/libdss-include/include/mtd/mtd-user.h [new file with mode: 0644]
lib/libdss-include/include/mtd/nftl-user.h [new file with mode: 0644]
lib/libdss-include/include/mtd/ubi-user.h [new file with mode: 0644]
lib/libdss-include/include/net/ethernet.h [new file with mode: 0644]
lib/libdss-include/include/net/if.h [new file with mode: 0644]
lib/libdss-include/include/net/if_arp.h [new file with mode: 0644]
lib/libdss-include/include/net/if_packet.h [new file with mode: 0644]
lib/libdss-include/include/net/if_ppp.h [new file with mode: 0644]
lib/libdss-include/include/net/if_shaper.h [new file with mode: 0644]
lib/libdss-include/include/net/if_slip.h [new file with mode: 0644]
lib/libdss-include/include/net/ppp-comp.h [new file with mode: 0644]
lib/libdss-include/include/net/ppp_defs.h [new file with mode: 0644]
lib/libdss-include/include/net/route.h [new file with mode: 0644]
lib/libdss-include/include/netash/ash.h [new file with mode: 0644]
lib/libdss-include/include/netatalk/at.h [new file with mode: 0644]
lib/libdss-include/include/netax25/ax25.h [new file with mode: 0644]
lib/libdss-include/include/netdb.h [new file with mode: 0644]
lib/libdss-include/include/neteconet/ec.h [new file with mode: 0644]
lib/libdss-include/include/netinet/ether.h [new file with mode: 0644]
lib/libdss-include/include/netinet/icmp6.h [new file with mode: 0644]
lib/libdss-include/include/netinet/if_ether.h [new file with mode: 0644]
lib/libdss-include/include/netinet/if_fddi.h [new file with mode: 0644]
lib/libdss-include/include/netinet/if_tr.h [new file with mode: 0644]
lib/libdss-include/include/netinet/igmp.h [new file with mode: 0644]
lib/libdss-include/include/netinet/in.h [new file with mode: 0644]
lib/libdss-include/include/netinet/in_systm.h [new file with mode: 0644]
lib/libdss-include/include/netinet/ip.h [new file with mode: 0644]
lib/libdss-include/include/netinet/ip6.h [new file with mode: 0644]
lib/libdss-include/include/netinet/ip_icmp.h [new file with mode: 0644]
lib/libdss-include/include/netinet/tcp.h [new file with mode: 0644]
lib/libdss-include/include/netinet/udp.h [new file with mode: 0644]
lib/libdss-include/include/netipx/ipx.h [new file with mode: 0644]
lib/libdss-include/include/netiucv/iucv.h [new file with mode: 0644]
lib/libdss-include/include/netpacket/packet.h [new file with mode: 0644]
lib/libdss-include/include/netrom/netrom.h [new file with mode: 0644]
lib/libdss-include/include/netrose/rose.h [new file with mode: 0644]
lib/libdss-include/include/nfs/nfs.h [new file with mode: 0644]
lib/libdss-include/include/nl_types.h [new file with mode: 0644]
lib/libdss-include/include/nss.h [new file with mode: 0644]
lib/libdss-include/include/obstack.h [new file with mode: 0644]
lib/libdss-include/include/paths.h [new file with mode: 0644]
lib/libdss-include/include/poll.h [new file with mode: 0644]
lib/libdss-include/include/printf.h [new file with mode: 0644]
lib/libdss-include/include/protocols/routed.h [new file with mode: 0644]
lib/libdss-include/include/protocols/rwhod.h [new file with mode: 0644]
lib/libdss-include/include/protocols/talkd.h [new file with mode: 0644]
lib/libdss-include/include/protocols/timed.h [new file with mode: 0644]
lib/libdss-include/include/pthread.h [new file with mode: 0644]
lib/libdss-include/include/pty.h [new file with mode: 0644]
lib/libdss-include/include/pwd.h [new file with mode: 0644]
lib/libdss-include/include/rdma/hfi/hfi1_user.h [new file with mode: 0644]
lib/libdss-include/include/rdma/ib_user_cm.h [new file with mode: 0644]
lib/libdss-include/include/rdma/ib_user_mad.h [new file with mode: 0644]
lib/libdss-include/include/rdma/ib_user_sa.h [new file with mode: 0644]
lib/libdss-include/include/rdma/ib_user_verbs.h [new file with mode: 0644]
lib/libdss-include/include/rdma/rdma_netlink.h [new file with mode: 0644]
lib/libdss-include/include/rdma/rdma_user_cm.h [new file with mode: 0644]
lib/libdss-include/include/re_comp.h [new file with mode: 0644]
lib/libdss-include/include/regex.h [new file with mode: 0644]
lib/libdss-include/include/regexp.h [new file with mode: 0644]
lib/libdss-include/include/resolv.h [new file with mode: 0644]
lib/libdss-include/include/rpc/auth.h [new file with mode: 0644]
lib/libdss-include/include/rpc/auth_des.h [new file with mode: 0644]
lib/libdss-include/include/rpc/auth_unix.h [new file with mode: 0644]
lib/libdss-include/include/rpc/clnt.h [new file with mode: 0644]
lib/libdss-include/include/rpc/des_crypt.h [new file with mode: 0644]
lib/libdss-include/include/rpc/key_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpc/netdb.h [new file with mode: 0644]
lib/libdss-include/include/rpc/pmap_clnt.h [new file with mode: 0644]
lib/libdss-include/include/rpc/pmap_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpc/pmap_rmt.h [new file with mode: 0644]
lib/libdss-include/include/rpc/rpc.h [new file with mode: 0644]
lib/libdss-include/include/rpc/rpc_des.h [new file with mode: 0644]
lib/libdss-include/include/rpc/rpc_msg.h [new file with mode: 0644]
lib/libdss-include/include/rpc/svc.h [new file with mode: 0644]
lib/libdss-include/include/rpc/svc_auth.h [new file with mode: 0644]
lib/libdss-include/include/rpc/types.h [new file with mode: 0644]
lib/libdss-include/include/rpc/xdr.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/bootparam.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/bootparam_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/bootparam_prot.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/key_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/key_prot.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/klm_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/klm_prot.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/mount.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/mount.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nfs_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nfs_prot.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis_callback.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis_callback.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis_object.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nis_tags.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nislib.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nlm_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/nlm_prot.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rex.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rex.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rquota.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rquota.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rstat.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rstat.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rusers.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/rusers.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/sm_inter.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/sm_inter.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/spray.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/spray.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/yp.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/yp.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/yp_prot.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/ypclnt.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/yppasswd.h [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/yppasswd.x [new file with mode: 0644]
lib/libdss-include/include/rpcsvc/ypupd.h [new file with mode: 0644]
lib/libdss-include/include/sched.h [new file with mode: 0644]
lib/libdss-include/include/scsi/scsi.h [new file with mode: 0644]
lib/libdss-include/include/scsi/scsi_ioctl.h [new file with mode: 0644]
lib/libdss-include/include/scsi/sg.h [new file with mode: 0644]
lib/libdss-include/include/search.h [new file with mode: 0644]
lib/libdss-include/include/semaphore.h [new file with mode: 0644]
lib/libdss-include/include/setjmp.h [new file with mode: 0644]
lib/libdss-include/include/sgtty.h [new file with mode: 0644]
lib/libdss-include/include/shadow.h [new file with mode: 0644]
lib/libdss-include/include/signal.h [new file with mode: 0644]
lib/libdss-include/include/sound/asequencer.h [new file with mode: 0644]
lib/libdss-include/include/sound/asound.h [new file with mode: 0644]
lib/libdss-include/include/sound/asound_fm.h [new file with mode: 0644]
lib/libdss-include/include/sound/compress_offload.h [new file with mode: 0644]
lib/libdss-include/include/sound/compress_params.h [new file with mode: 0644]
lib/libdss-include/include/sound/emu10k1.h [new file with mode: 0644]
lib/libdss-include/include/sound/firewire.h [new file with mode: 0644]
lib/libdss-include/include/sound/hdsp.h [new file with mode: 0644]
lib/libdss-include/include/sound/hdspm.h [new file with mode: 0644]
lib/libdss-include/include/sound/sb16_csp.h [new file with mode: 0644]
lib/libdss-include/include/sound/sfnt_info.h [new file with mode: 0644]
lib/libdss-include/include/spawn.h [new file with mode: 0644]
lib/libdss-include/include/stab.h [new file with mode: 0644]
lib/libdss-include/include/stdc-predef.h [new file with mode: 0644]
lib/libdss-include/include/stdint.h [new file with mode: 0644]
lib/libdss-include/include/stdio.h [new file with mode: 0644]
lib/libdss-include/include/stdio_ext.h [new file with mode: 0644]
lib/libdss-include/include/stdlib.h [new file with mode: 0644]
lib/libdss-include/include/string.h [new file with mode: 0644]
lib/libdss-include/include/strings.h [new file with mode: 0644]
lib/libdss-include/include/stropts.h [new file with mode: 0644]
lib/libdss-include/include/sys/acct.h [new file with mode: 0644]
lib/libdss-include/include/sys/auxv.h [new file with mode: 0644]
lib/libdss-include/include/sys/bitypes.h [new file with mode: 0644]
lib/libdss-include/include/sys/cdefs.h [new file with mode: 0644]
lib/libdss-include/include/sys/dir.h [new file with mode: 0644]
lib/libdss-include/include/sys/elf.h [new file with mode: 0644]
lib/libdss-include/include/sys/epoll.h [new file with mode: 0644]
lib/libdss-include/include/sys/errno.h [new file with mode: 0644]
lib/libdss-include/include/sys/eventfd.h [new file with mode: 0644]
lib/libdss-include/include/sys/fanotify.h [new file with mode: 0644]
lib/libdss-include/include/sys/fcntl.h [new file with mode: 0644]
lib/libdss-include/include/sys/file.h [new file with mode: 0644]
lib/libdss-include/include/sys/fsuid.h [new file with mode: 0644]
lib/libdss-include/include/sys/gmon.h [new file with mode: 0644]
lib/libdss-include/include/sys/gmon_out.h [new file with mode: 0644]
lib/libdss-include/include/sys/inotify.h [new file with mode: 0644]
lib/libdss-include/include/sys/ioctl.h [new file with mode: 0644]
lib/libdss-include/include/sys/ipc.h [new file with mode: 0644]
lib/libdss-include/include/sys/kd.h [new file with mode: 0644]
lib/libdss-include/include/sys/klog.h [new file with mode: 0644]
lib/libdss-include/include/sys/mman.h [new file with mode: 0644]
lib/libdss-include/include/sys/mount.h [new file with mode: 0644]
lib/libdss-include/include/sys/msg.h [new file with mode: 0644]
lib/libdss-include/include/sys/mtio.h [new file with mode: 0644]
lib/libdss-include/include/sys/param.h [new file with mode: 0644]
lib/libdss-include/include/sys/pci.h [new file with mode: 0644]
lib/libdss-include/include/sys/personality.h [new file with mode: 0644]
lib/libdss-include/include/sys/poll.h [new file with mode: 0644]
lib/libdss-include/include/sys/prctl.h [new file with mode: 0644]
lib/libdss-include/include/sys/procfs.h [new file with mode: 0644]
lib/libdss-include/include/sys/profil.h [new file with mode: 0644]
lib/libdss-include/include/sys/ptrace.h [new file with mode: 0644]
lib/libdss-include/include/sys/queue.h [new file with mode: 0644]
lib/libdss-include/include/sys/quota.h [new file with mode: 0644]
lib/libdss-include/include/sys/raw.h [new file with mode: 0644]
lib/libdss-include/include/sys/reboot.h [new file with mode: 0644]
lib/libdss-include/include/sys/resource.h [new file with mode: 0644]
lib/libdss-include/include/sys/select.h [new file with mode: 0644]
lib/libdss-include/include/sys/sem.h [new file with mode: 0644]
lib/libdss-include/include/sys/sendfile.h [new file with mode: 0644]
lib/libdss-include/include/sys/shm.h [new file with mode: 0644]
lib/libdss-include/include/sys/signal.h [new file with mode: 0644]
lib/libdss-include/include/sys/signalfd.h [new file with mode: 0644]
lib/libdss-include/include/sys/socket.h [new file with mode: 0644]
lib/libdss-include/include/sys/socketvar.h [new file with mode: 0644]
lib/libdss-include/include/sys/soundcard.h [new file with mode: 0644]
lib/libdss-include/include/sys/stat.h [new file with mode: 0644]
lib/libdss-include/include/sys/statfs.h [new file with mode: 0644]
lib/libdss-include/include/sys/statvfs.h [new file with mode: 0644]
lib/libdss-include/include/sys/stropts.h [new file with mode: 0644]
lib/libdss-include/include/sys/swap.h [new file with mode: 0644]
lib/libdss-include/include/sys/syscall.h [new file with mode: 0644]
lib/libdss-include/include/sys/sysctl.h [new file with mode: 0644]
lib/libdss-include/include/sys/sysinfo.h [new file with mode: 0644]
lib/libdss-include/include/sys/syslog.h [new file with mode: 0644]
lib/libdss-include/include/sys/sysmacros.h [new file with mode: 0644]
lib/libdss-include/include/sys/termios.h [new file with mode: 0644]
lib/libdss-include/include/sys/time.h [new file with mode: 0644]
lib/libdss-include/include/sys/timeb.h [new file with mode: 0644]
lib/libdss-include/include/sys/timerfd.h [new file with mode: 0644]
lib/libdss-include/include/sys/times.h [new file with mode: 0644]
lib/libdss-include/include/sys/timex.h [new file with mode: 0644]
lib/libdss-include/include/sys/ttychars.h [new file with mode: 0644]
lib/libdss-include/include/sys/ttydefaults.h [new file with mode: 0644]
lib/libdss-include/include/sys/types.h [new file with mode: 0644]
lib/libdss-include/include/sys/ucontext.h [new file with mode: 0644]
lib/libdss-include/include/sys/uio.h [new file with mode: 0644]
lib/libdss-include/include/sys/ultrasound.h [new file with mode: 0644]
lib/libdss-include/include/sys/un.h [new file with mode: 0644]
lib/libdss-include/include/sys/unistd.h [new file with mode: 0644]
lib/libdss-include/include/sys/user.h [new file with mode: 0644]
lib/libdss-include/include/sys/ustat.h [new file with mode: 0644]
lib/libdss-include/include/sys/utsname.h [new file with mode: 0644]
lib/libdss-include/include/sys/vfs.h [new file with mode: 0644]
lib/libdss-include/include/sys/vlimit.h [new file with mode: 0644]
lib/libdss-include/include/sys/vt.h [new file with mode: 0644]
lib/libdss-include/include/sys/vtimes.h [new file with mode: 0644]
lib/libdss-include/include/sys/wait.h [new file with mode: 0644]
lib/libdss-include/include/sys/xattr.h [new file with mode: 0644]
lib/libdss-include/include/syscall.h [new file with mode: 0644]
lib/libdss-include/include/sysexits.h [new file with mode: 0644]
lib/libdss-include/include/syslog.h [new file with mode: 0644]
lib/libdss-include/include/tar.h [new file with mode: 0644]
lib/libdss-include/include/termio.h [new file with mode: 0644]
lib/libdss-include/include/termios.h [new file with mode: 0644]
lib/libdss-include/include/tgmath.h [new file with mode: 0644]
lib/libdss-include/include/thread_db.h [new file with mode: 0644]
lib/libdss-include/include/time.h [new file with mode: 0644]
lib/libdss-include/include/ttyent.h [new file with mode: 0644]
lib/libdss-include/include/uchar.h [new file with mode: 0644]
lib/libdss-include/include/ucontext.h [new file with mode: 0644]
lib/libdss-include/include/ulimit.h [new file with mode: 0644]
lib/libdss-include/include/unistd.h [new file with mode: 0644]
lib/libdss-include/include/ustat.h [new file with mode: 0644]
lib/libdss-include/include/utime.h [new file with mode: 0644]
lib/libdss-include/include/utmp.h [new file with mode: 0644]
lib/libdss-include/include/utmpx.h [new file with mode: 0644]
lib/libdss-include/include/values.h [new file with mode: 0644]
lib/libdss-include/include/video/edid.h [new file with mode: 0644]
lib/libdss-include/include/video/sisfb.h [new file with mode: 0644]
lib/libdss-include/include/video/uvesafb.h [new file with mode: 0644]
lib/libdss-include/include/wait.h [new file with mode: 0644]
lib/libdss-include/include/wchar.h [new file with mode: 0644]
lib/libdss-include/include/wctype.h [new file with mode: 0644]
lib/libdss-include/include/wordexp.h [new file with mode: 0644]
lib/libdss-include/include/xen/evtchn.h [new file with mode: 0644]
lib/libdss-include/include/xen/gntalloc.h [new file with mode: 0644]
lib/libdss-include/include/xen/gntdev.h [new file with mode: 0644]
lib/libdss-include/include/xen/privcmd.h [new file with mode: 0644]
lib/libdss-include/include/xlocale.h [new file with mode: 0644]
lib/libdss-include/inttypes.h [new file with mode: 0644]
lib/libdss-include/langinfo.h [new file with mode: 0644]
lib/libdss-include/lastlog.h [new file with mode: 0644]
lib/libdss-include/libgen.h [new file with mode: 0644]
lib/libdss-include/libintl.h [new file with mode: 0644]
lib/libdss-include/libio.h [new file with mode: 0644]
lib/libdss-include/limits.h [new file with mode: 0644]
lib/libdss-include/link.h [new file with mode: 0644]
lib/libdss-include/linux/acct.h [new file with mode: 0644]
lib/libdss-include/linux/adb.h [new file with mode: 0644]
lib/libdss-include/linux/adfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/affs_hardblocks.h [new file with mode: 0644]
lib/libdss-include/linux/agpgart.h [new file with mode: 0644]
lib/libdss-include/linux/aio_abi.h [new file with mode: 0644]
lib/libdss-include/linux/am437x-vpfe.h [new file with mode: 0644]
lib/libdss-include/linux/android/binder.h [new file with mode: 0644]
lib/libdss-include/linux/apm_bios.h [new file with mode: 0644]
lib/libdss-include/linux/arcfb.h [new file with mode: 0644]
lib/libdss-include/linux/atalk.h [new file with mode: 0644]
lib/libdss-include/linux/atm.h [new file with mode: 0644]
lib/libdss-include/linux/atm_eni.h [new file with mode: 0644]
lib/libdss-include/linux/atm_he.h [new file with mode: 0644]
lib/libdss-include/linux/atm_idt77105.h [new file with mode: 0644]
lib/libdss-include/linux/atm_nicstar.h [new file with mode: 0644]
lib/libdss-include/linux/atm_tcp.h [new file with mode: 0644]
lib/libdss-include/linux/atm_zatm.h [new file with mode: 0644]
lib/libdss-include/linux/atmapi.h [new file with mode: 0644]
lib/libdss-include/linux/atmarp.h [new file with mode: 0644]
lib/libdss-include/linux/atmbr2684.h [new file with mode: 0644]
lib/libdss-include/linux/atmclip.h [new file with mode: 0644]
lib/libdss-include/linux/atmdev.h [new file with mode: 0644]
lib/libdss-include/linux/atmioc.h [new file with mode: 0644]
lib/libdss-include/linux/atmlec.h [new file with mode: 0644]
lib/libdss-include/linux/atmmpc.h [new file with mode: 0644]
lib/libdss-include/linux/atmppp.h [new file with mode: 0644]
lib/libdss-include/linux/atmsap.h [new file with mode: 0644]
lib/libdss-include/linux/atmsvc.h [new file with mode: 0644]
lib/libdss-include/linux/audit.h [new file with mode: 0644]
lib/libdss-include/linux/aufs_type.h [new file with mode: 0644]
lib/libdss-include/linux/auto_fs.h [new file with mode: 0644]
lib/libdss-include/linux/auto_fs4.h [new file with mode: 0644]
lib/libdss-include/linux/auxvec.h [new file with mode: 0644]
lib/libdss-include/linux/ax25.h [new file with mode: 0644]
lib/libdss-include/linux/b1lli.h [new file with mode: 0644]
lib/libdss-include/linux/baycom.h [new file with mode: 0644]
lib/libdss-include/linux/bcm933xx_hcs.h [new file with mode: 0644]
lib/libdss-include/linux/bfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/binfmts.h [new file with mode: 0644]
lib/libdss-include/linux/blkpg.h [new file with mode: 0644]
lib/libdss-include/linux/blktrace_api.h [new file with mode: 0644]
lib/libdss-include/linux/bpf.h [new file with mode: 0644]
lib/libdss-include/linux/bpf_common.h [new file with mode: 0644]
lib/libdss-include/linux/bpqether.h [new file with mode: 0644]
lib/libdss-include/linux/bsg.h [new file with mode: 0644]
lib/libdss-include/linux/btrfs.h [new file with mode: 0644]
lib/libdss-include/linux/byteorder/big_endian.h [new file with mode: 0644]
lib/libdss-include/linux/byteorder/little_endian.h [new file with mode: 0644]
lib/libdss-include/linux/caif/caif_socket.h [new file with mode: 0644]
lib/libdss-include/linux/caif/if_caif.h [new file with mode: 0644]
lib/libdss-include/linux/can.h [new file with mode: 0644]
lib/libdss-include/linux/can/bcm.h [new file with mode: 0644]
lib/libdss-include/linux/can/error.h [new file with mode: 0644]
lib/libdss-include/linux/can/gw.h [new file with mode: 0644]
lib/libdss-include/linux/can/netlink.h [new file with mode: 0644]
lib/libdss-include/linux/can/raw.h [new file with mode: 0644]
lib/libdss-include/linux/capability.h [new file with mode: 0644]
lib/libdss-include/linux/capi.h [new file with mode: 0644]
lib/libdss-include/linux/cciss_defs.h [new file with mode: 0644]
lib/libdss-include/linux/cciss_ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/cdrom.h [new file with mode: 0644]
lib/libdss-include/linux/cgroupstats.h [new file with mode: 0644]
lib/libdss-include/linux/chio.h [new file with mode: 0644]
lib/libdss-include/linux/cm4000_cs.h [new file with mode: 0644]
lib/libdss-include/linux/cn_proc.h [new file with mode: 0644]
lib/libdss-include/linux/coda.h [new file with mode: 0644]
lib/libdss-include/linux/coda_psdev.h [new file with mode: 0644]
lib/libdss-include/linux/coff.h [new file with mode: 0644]
lib/libdss-include/linux/connector.h [new file with mode: 0644]
lib/libdss-include/linux/const.h [new file with mode: 0644]
lib/libdss-include/linux/cramfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/cuda.h [new file with mode: 0644]
lib/libdss-include/linux/cyclades.h [new file with mode: 0644]
lib/libdss-include/linux/cycx_cfm.h [new file with mode: 0644]
lib/libdss-include/linux/dcbnl.h [new file with mode: 0644]
lib/libdss-include/linux/dccp.h [new file with mode: 0644]
lib/libdss-include/linux/dlm.h [new file with mode: 0644]
lib/libdss-include/linux/dlm_device.h [new file with mode: 0644]
lib/libdss-include/linux/dlm_netlink.h [new file with mode: 0644]
lib/libdss-include/linux/dlm_plock.h [new file with mode: 0644]
lib/libdss-include/linux/dlmconstants.h [new file with mode: 0644]
lib/libdss-include/linux/dm-ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/dm-log-userspace.h [new file with mode: 0644]
lib/libdss-include/linux/dn.h [new file with mode: 0644]
lib/libdss-include/linux/dqblk_xfs.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/audio.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/ca.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/dmx.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/frontend.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/net.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/osd.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/version.h [new file with mode: 0644]
lib/libdss-include/linux/dvb/video.h [new file with mode: 0644]
lib/libdss-include/linux/edd.h [new file with mode: 0644]
lib/libdss-include/linux/efs_fs_sb.h [new file with mode: 0644]
lib/libdss-include/linux/elf-em.h [new file with mode: 0644]
lib/libdss-include/linux/elf-fdpic.h [new file with mode: 0644]
lib/libdss-include/linux/elf.h [new file with mode: 0644]
lib/libdss-include/linux/elfcore.h [new file with mode: 0644]
lib/libdss-include/linux/errno.h [new file with mode: 0644]
lib/libdss-include/linux/errqueue.h [new file with mode: 0644]
lib/libdss-include/linux/ethtool.h [new file with mode: 0644]
lib/libdss-include/linux/eventpoll.h [new file with mode: 0644]
lib/libdss-include/linux/fadvise.h [new file with mode: 0644]
lib/libdss-include/linux/falloc.h [new file with mode: 0644]
lib/libdss-include/linux/fanotify.h [new file with mode: 0644]
lib/libdss-include/linux/fb.h [new file with mode: 0644]
lib/libdss-include/linux/fcntl.h [new file with mode: 0644]
lib/libdss-include/linux/fd.h [new file with mode: 0644]
lib/libdss-include/linux/fdreg.h [new file with mode: 0644]
lib/libdss-include/linux/fib_rules.h [new file with mode: 0644]
lib/libdss-include/linux/fiemap.h [new file with mode: 0644]
lib/libdss-include/linux/filter.h [new file with mode: 0644]
lib/libdss-include/linux/firewire-cdev.h [new file with mode: 0644]
lib/libdss-include/linux/firewire-constants.h [new file with mode: 0644]
lib/libdss-include/linux/flat.h [new file with mode: 0644]
lib/libdss-include/linux/fou.h [new file with mode: 0644]
lib/libdss-include/linux/fs.h [new file with mode: 0644]
lib/libdss-include/linux/fsl_hypervisor.h [new file with mode: 0644]
lib/libdss-include/linux/fuse.h [new file with mode: 0644]
lib/libdss-include/linux/futex.h [new file with mode: 0644]
lib/libdss-include/linux/gameport.h [new file with mode: 0644]
lib/libdss-include/linux/gen_stats.h [new file with mode: 0644]
lib/libdss-include/linux/genetlink.h [new file with mode: 0644]
lib/libdss-include/linux/gfs2_ondisk.h [new file with mode: 0644]
lib/libdss-include/linux/gigaset_dev.h [new file with mode: 0644]
lib/libdss-include/linux/gsmmux.h [new file with mode: 0644]
lib/libdss-include/linux/hdlc.h [new file with mode: 0644]
lib/libdss-include/linux/hdlc/ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/hdlcdrv.h [new file with mode: 0644]
lib/libdss-include/linux/hdreg.h [new file with mode: 0644]
lib/libdss-include/linux/hid.h [new file with mode: 0644]
lib/libdss-include/linux/hiddev.h [new file with mode: 0644]
lib/libdss-include/linux/hidraw.h [new file with mode: 0644]
lib/libdss-include/linux/hpet.h [new file with mode: 0644]
lib/libdss-include/linux/hsi/cs-protocol.h [new file with mode: 0644]
lib/libdss-include/linux/hsi/hsi_char.h [new file with mode: 0644]
lib/libdss-include/linux/hsr_netlink.h [new file with mode: 0644]
lib/libdss-include/linux/hw_breakpoint.h [new file with mode: 0644]
lib/libdss-include/linux/hyperv.h [new file with mode: 0644]
lib/libdss-include/linux/hysdn_if.h [new file with mode: 0644]
lib/libdss-include/linux/i2c-dev.h [new file with mode: 0644]
lib/libdss-include/linux/i2c.h [new file with mode: 0644]
lib/libdss-include/linux/i2o-dev.h [new file with mode: 0644]
lib/libdss-include/linux/i8k.h [new file with mode: 0644]
lib/libdss-include/linux/icmp.h [new file with mode: 0644]
lib/libdss-include/linux/icmpv6.h [new file with mode: 0644]
lib/libdss-include/linux/if.h [new file with mode: 0644]
lib/libdss-include/linux/if_addr.h [new file with mode: 0644]
lib/libdss-include/linux/if_addrlabel.h [new file with mode: 0644]
lib/libdss-include/linux/if_alg.h [new file with mode: 0644]
lib/libdss-include/linux/if_arcnet.h [new file with mode: 0644]
lib/libdss-include/linux/if_arp.h [new file with mode: 0644]
lib/libdss-include/linux/if_bonding.h [new file with mode: 0644]
lib/libdss-include/linux/if_bridge.h [new file with mode: 0644]
lib/libdss-include/linux/if_cablemodem.h [new file with mode: 0644]
lib/libdss-include/linux/if_eql.h [new file with mode: 0644]
lib/libdss-include/linux/if_ether.h [new file with mode: 0644]
lib/libdss-include/linux/if_fc.h [new file with mode: 0644]
lib/libdss-include/linux/if_fddi.h [new file with mode: 0644]
lib/libdss-include/linux/if_frad.h [new file with mode: 0644]
lib/libdss-include/linux/if_hippi.h [new file with mode: 0644]
lib/libdss-include/linux/if_infiniband.h [new file with mode: 0644]
lib/libdss-include/linux/if_link.h [new file with mode: 0644]
lib/libdss-include/linux/if_ltalk.h [new file with mode: 0644]
lib/libdss-include/linux/if_packet.h [new file with mode: 0644]
lib/libdss-include/linux/if_phonet.h [new file with mode: 0644]
lib/libdss-include/linux/if_plip.h [new file with mode: 0644]
lib/libdss-include/linux/if_ppp.h [new file with mode: 0644]
lib/libdss-include/linux/if_pppol2tp.h [new file with mode: 0644]
lib/libdss-include/linux/if_pppox.h [new file with mode: 0644]
lib/libdss-include/linux/if_slip.h [new file with mode: 0644]
lib/libdss-include/linux/if_team.h [new file with mode: 0644]
lib/libdss-include/linux/if_tun.h [new file with mode: 0644]
lib/libdss-include/linux/if_tunnel.h [new file with mode: 0644]
lib/libdss-include/linux/if_vlan.h [new file with mode: 0644]
lib/libdss-include/linux/if_x25.h [new file with mode: 0644]
lib/libdss-include/linux/igmp.h [new file with mode: 0644]
lib/libdss-include/linux/iio/events.h [new file with mode: 0644]
lib/libdss-include/linux/iio/types.h [new file with mode: 0644]
lib/libdss-include/linux/ila.h [new file with mode: 0644]
lib/libdss-include/linux/in.h [new file with mode: 0644]
lib/libdss-include/linux/in6.h [new file with mode: 0644]
lib/libdss-include/linux/in_route.h [new file with mode: 0644]
lib/libdss-include/linux/inet_diag.h [new file with mode: 0644]
lib/libdss-include/linux/inotify.h [new file with mode: 0644]
lib/libdss-include/linux/input-event-codes.h [new file with mode: 0644]
lib/libdss-include/linux/input.h [new file with mode: 0644]
lib/libdss-include/linux/ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/ip.h [new file with mode: 0644]
lib/libdss-include/linux/ip6_tunnel.h [new file with mode: 0644]
lib/libdss-include/linux/ip_vs.h [new file with mode: 0644]
lib/libdss-include/linux/ipc.h [new file with mode: 0644]
lib/libdss-include/linux/ipmi.h [new file with mode: 0644]
lib/libdss-include/linux/ipmi_msgdefs.h [new file with mode: 0644]
lib/libdss-include/linux/ipsec.h [new file with mode: 0644]
lib/libdss-include/linux/ipv6.h [new file with mode: 0644]
lib/libdss-include/linux/ipv6_route.h [new file with mode: 0644]
lib/libdss-include/linux/ipx.h [new file with mode: 0644]
lib/libdss-include/linux/irda.h [new file with mode: 0644]
lib/libdss-include/linux/irqnr.h [new file with mode: 0644]
lib/libdss-include/linux/isdn.h [new file with mode: 0644]
lib/libdss-include/linux/isdn/capicmd.h [new file with mode: 0644]
lib/libdss-include/linux/isdn_divertif.h [new file with mode: 0644]
lib/libdss-include/linux/isdn_ppp.h [new file with mode: 0644]
lib/libdss-include/linux/isdnif.h [new file with mode: 0644]
lib/libdss-include/linux/iso_fs.h [new file with mode: 0644]
lib/libdss-include/linux/ivtv.h [new file with mode: 0644]
lib/libdss-include/linux/ivtvfb.h [new file with mode: 0644]
lib/libdss-include/linux/ixjuser.h [new file with mode: 0644]
lib/libdss-include/linux/jffs2.h [new file with mode: 0644]
lib/libdss-include/linux/joystick.h [new file with mode: 0644]
lib/libdss-include/linux/kcmp.h [new file with mode: 0644]
lib/libdss-include/linux/kd.h [new file with mode: 0644]
lib/libdss-include/linux/kdev_t.h [new file with mode: 0644]
lib/libdss-include/linux/kernel-page-flags.h [new file with mode: 0644]
lib/libdss-include/linux/kernel.h [new file with mode: 0644]
lib/libdss-include/linux/kernelcapi.h [new file with mode: 0644]
lib/libdss-include/linux/kexec.h [new file with mode: 0644]
lib/libdss-include/linux/keyboard.h [new file with mode: 0644]
lib/libdss-include/linux/keyctl.h [new file with mode: 0644]
lib/libdss-include/linux/kvm.h [new file with mode: 0644]
lib/libdss-include/linux/l2tp.h [new file with mode: 0644]
lib/libdss-include/linux/libc-compat.h [new file with mode: 0644]
lib/libdss-include/linux/limits.h [new file with mode: 0644]
lib/libdss-include/linux/llc.h [new file with mode: 0644]
lib/libdss-include/linux/loop.h [new file with mode: 0644]
lib/libdss-include/linux/lp.h [new file with mode: 0644]
lib/libdss-include/linux/lwtunnel.h [new file with mode: 0644]
lib/libdss-include/linux/magic.h [new file with mode: 0644]
lib/libdss-include/linux/major.h [new file with mode: 0644]
lib/libdss-include/linux/map_to_7segment.h [new file with mode: 0644]
lib/libdss-include/linux/matroxfb.h [new file with mode: 0644]
lib/libdss-include/linux/mdio.h [new file with mode: 0644]
lib/libdss-include/linux/media-bus-format.h [new file with mode: 0644]
lib/libdss-include/linux/media.h [new file with mode: 0644]
lib/libdss-include/linux/mei.h [new file with mode: 0644]
lib/libdss-include/linux/membarrier.h [new file with mode: 0644]
lib/libdss-include/linux/memfd.h [new file with mode: 0644]
lib/libdss-include/linux/mempolicy.h [new file with mode: 0644]
lib/libdss-include/linux/meye.h [new file with mode: 0644]
lib/libdss-include/linux/mic_common.h [new file with mode: 0644]
lib/libdss-include/linux/mic_ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/mii.h [new file with mode: 0644]
lib/libdss-include/linux/minix_fs.h [new file with mode: 0644]
lib/libdss-include/linux/mman.h [new file with mode: 0644]
lib/libdss-include/linux/mmc/ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/mmtimer.h [new file with mode: 0644]
lib/libdss-include/linux/mpls.h [new file with mode: 0644]
lib/libdss-include/linux/mpls_iptunnel.h [new file with mode: 0644]
lib/libdss-include/linux/mqueue.h [new file with mode: 0644]
lib/libdss-include/linux/mroute.h [new file with mode: 0644]
lib/libdss-include/linux/mroute6.h [new file with mode: 0644]
lib/libdss-include/linux/msdos_fs.h [new file with mode: 0644]
lib/libdss-include/linux/msg.h [new file with mode: 0644]
lib/libdss-include/linux/mtio.h [new file with mode: 0644]
lib/libdss-include/linux/n_r3964.h [new file with mode: 0644]
lib/libdss-include/linux/nbd.h [new file with mode: 0644]
lib/libdss-include/linux/ncp.h [new file with mode: 0644]
lib/libdss-include/linux/ncp_fs.h [new file with mode: 0644]
lib/libdss-include/linux/ncp_mount.h [new file with mode: 0644]
lib/libdss-include/linux/ncp_no.h [new file with mode: 0644]
lib/libdss-include/linux/ndctl.h [new file with mode: 0644]
lib/libdss-include/linux/neighbour.h [new file with mode: 0644]
lib/libdss-include/linux/net.h [new file with mode: 0644]
lib/libdss-include/linux/net_dropmon.h [new file with mode: 0644]
lib/libdss-include/linux/net_namespace.h [new file with mode: 0644]
lib/libdss-include/linux/net_tstamp.h [new file with mode: 0644]
lib/libdss-include/linux/netconf.h [new file with mode: 0644]
lib/libdss-include/linux/netdevice.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/ipset/ip_set.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/ipset/ip_set_bitmap.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/ipset/ip_set_hash.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/ipset/ip_set_list.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_conntrack_common.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_conntrack_ftp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_conntrack_sctp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_conntrack_tcp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_conntrack_tuple_common.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_nat.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_tables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nf_tables_compat.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_acct.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_compat.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_conntrack.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_cthelper.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_cttimeout.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_log.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/nfnetlink_queue.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/x_tables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_AUDIT.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_CHECKSUM.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_CLASSIFY.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_CONNMARK.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_CONNSECMARK.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_CT.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_DSCP.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_HMARK.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_IDLETIMER.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_LED.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_LOG.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_MARK.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_NFLOG.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_NFQUEUE.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_RATEEST.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_SECMARK.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_TCPMSS.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_TCPOPTSTRIP.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_TEE.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_TPROXY.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_addrtype.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_bpf.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_cgroup.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_cluster.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_comment.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_connbytes.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_connlabel.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_connlimit.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_connmark.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_conntrack.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_cpu.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_dccp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_devgroup.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_dscp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_ecn.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_esp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_hashlimit.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_helper.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_ipcomp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_iprange.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_ipvs.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_l2tp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_length.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_limit.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_mac.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_mark.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_multiport.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_nfacct.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_osf.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_owner.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_physdev.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_pkttype.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_policy.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_quota.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_rateest.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_realm.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_recent.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_rpfilter.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_sctp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_set.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_socket.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_state.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_statistic.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_string.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_tcpmss.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_tcpudp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_time.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter/xt_u32.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_arp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_arp/arp_tables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_arp/arpt_mangle.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_802_3.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_among.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_arp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_arpreply.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_ip.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_ip6.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_limit.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_log.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_mark_m.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_mark_t.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_nat.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_nflog.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_pkttype.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_redirect.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_stp.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebt_vlan.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_bridge/ebtables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_decnet.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ip_tables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_CLUSTERIP.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_ECN.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_LOG.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_REJECT.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_TTL.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_ah.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_ecn.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv4/ipt_ttl.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6_tables.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_HL.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_LOG.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_NPT.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_REJECT.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_ah.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_frag.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_hl.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_ipv6header.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_mh.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_opts.h [new file with mode: 0644]
lib/libdss-include/linux/netfilter_ipv6/ip6t_rt.h [new file with mode: 0644]
lib/libdss-include/linux/netlink.h [new file with mode: 0644]
lib/libdss-include/linux/netlink_diag.h [new file with mode: 0644]
lib/libdss-include/linux/netrom.h [new file with mode: 0644]
lib/libdss-include/linux/nfc.h [new file with mode: 0644]
lib/libdss-include/linux/nfs.h [new file with mode: 0644]
lib/libdss-include/linux/nfs2.h [new file with mode: 0644]
lib/libdss-include/linux/nfs3.h [new file with mode: 0644]
lib/libdss-include/linux/nfs4.h [new file with mode: 0644]
lib/libdss-include/linux/nfs4_mount.h [new file with mode: 0644]
lib/libdss-include/linux/nfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/nfs_idmap.h [new file with mode: 0644]
lib/libdss-include/linux/nfs_mount.h [new file with mode: 0644]
lib/libdss-include/linux/nfsacl.h [new file with mode: 0644]
lib/libdss-include/linux/nfsd/cld.h [new file with mode: 0644]
lib/libdss-include/linux/nfsd/debug.h [new file with mode: 0644]
lib/libdss-include/linux/nfsd/export.h [new file with mode: 0644]
lib/libdss-include/linux/nfsd/nfsfh.h [new file with mode: 0644]
lib/libdss-include/linux/nfsd/stats.h [new file with mode: 0644]
lib/libdss-include/linux/nl80211.h [new file with mode: 0644]
lib/libdss-include/linux/nubus.h [new file with mode: 0644]
lib/libdss-include/linux/nvme_ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/nvram.h [new file with mode: 0644]
lib/libdss-include/linux/omap3isp.h [new file with mode: 0644]
lib/libdss-include/linux/omapfb.h [new file with mode: 0644]
lib/libdss-include/linux/oom.h [new file with mode: 0644]
lib/libdss-include/linux/openvswitch.h [new file with mode: 0644]
lib/libdss-include/linux/packet_diag.h [new file with mode: 0644]
lib/libdss-include/linux/param.h [new file with mode: 0644]
lib/libdss-include/linux/parport.h [new file with mode: 0644]
lib/libdss-include/linux/patchkey.h [new file with mode: 0644]
lib/libdss-include/linux/pci.h [new file with mode: 0644]
lib/libdss-include/linux/pci_regs.h [new file with mode: 0644]
lib/libdss-include/linux/perf_event.h [new file with mode: 0644]
lib/libdss-include/linux/personality.h [new file with mode: 0644]
lib/libdss-include/linux/pfkeyv2.h [new file with mode: 0644]
lib/libdss-include/linux/pg.h [new file with mode: 0644]
lib/libdss-include/linux/phantom.h [new file with mode: 0644]
lib/libdss-include/linux/phonet.h [new file with mode: 0644]
lib/libdss-include/linux/pkt_cls.h [new file with mode: 0644]
lib/libdss-include/linux/pkt_sched.h [new file with mode: 0644]
lib/libdss-include/linux/pktcdvd.h [new file with mode: 0644]
lib/libdss-include/linux/pmu.h [new file with mode: 0644]
lib/libdss-include/linux/poll.h [new file with mode: 0644]
lib/libdss-include/linux/posix_types.h [new file with mode: 0644]
lib/libdss-include/linux/ppdev.h [new file with mode: 0644]
lib/libdss-include/linux/ppp-comp.h [new file with mode: 0644]
lib/libdss-include/linux/ppp-ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/ppp_defs.h [new file with mode: 0644]
lib/libdss-include/linux/pps.h [new file with mode: 0644]
lib/libdss-include/linux/prctl.h [new file with mode: 0644]
lib/libdss-include/linux/psci.h [new file with mode: 0644]
lib/libdss-include/linux/ptp_clock.h [new file with mode: 0644]
lib/libdss-include/linux/ptrace.h [new file with mode: 0644]
lib/libdss-include/linux/qnx4_fs.h [new file with mode: 0644]
lib/libdss-include/linux/qnxtypes.h [new file with mode: 0644]
lib/libdss-include/linux/quota.h [new file with mode: 0644]
lib/libdss-include/linux/radeonfb.h [new file with mode: 0644]
lib/libdss-include/linux/raid/md_p.h [new file with mode: 0644]
lib/libdss-include/linux/raid/md_u.h [new file with mode: 0644]
lib/libdss-include/linux/random.h [new file with mode: 0644]
lib/libdss-include/linux/raw.h [new file with mode: 0644]
lib/libdss-include/linux/rds.h [new file with mode: 0644]
lib/libdss-include/linux/reboot.h [new file with mode: 0644]
lib/libdss-include/linux/reiserfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/reiserfs_xattr.h [new file with mode: 0644]
lib/libdss-include/linux/resource.h [new file with mode: 0644]
lib/libdss-include/linux/rfkill.h [new file with mode: 0644]
lib/libdss-include/linux/romfs_fs.h [new file with mode: 0644]
lib/libdss-include/linux/rose.h [new file with mode: 0644]
lib/libdss-include/linux/route.h [new file with mode: 0644]
lib/libdss-include/linux/rtc.h [new file with mode: 0644]
lib/libdss-include/linux/rtnetlink.h [new file with mode: 0644]
lib/libdss-include/linux/scc.h [new file with mode: 0644]
lib/libdss-include/linux/sched.h [new file with mode: 0644]
lib/libdss-include/linux/scif_ioctl.h [new file with mode: 0644]
lib/libdss-include/linux/screen_info.h [new file with mode: 0644]
lib/libdss-include/linux/sctp.h [new file with mode: 0644]
lib/libdss-include/linux/sdla.h [new file with mode: 0644]
lib/libdss-include/linux/seccomp.h [new file with mode: 0644]
lib/libdss-include/linux/securebits.h [new file with mode: 0644]
lib/libdss-include/linux/selinux_netlink.h [new file with mode: 0644]
lib/libdss-include/linux/sem.h [new file with mode: 0644]
lib/libdss-include/linux/serial.h [new file with mode: 0644]
lib/libdss-include/linux/serial_core.h [new file with mode: 0644]
lib/libdss-include/linux/serial_reg.h [new file with mode: 0644]
lib/libdss-include/linux/serio.h [new file with mode: 0644]
lib/libdss-include/linux/shm.h [new file with mode: 0644]
lib/libdss-include/linux/signal.h [new file with mode: 0644]
lib/libdss-include/linux/signalfd.h [new file with mode: 0644]
lib/libdss-include/linux/smiapp.h [new file with mode: 0644]
lib/libdss-include/linux/snmp.h [new file with mode: 0644]
lib/libdss-include/linux/sock_diag.h [new file with mode: 0644]
lib/libdss-include/linux/socket.h [new file with mode: 0644]
lib/libdss-include/linux/sockios.h [new file with mode: 0644]
lib/libdss-include/linux/sonet.h [new file with mode: 0644]
lib/libdss-include/linux/sonypi.h [new file with mode: 0644]
lib/libdss-include/linux/sound.h [new file with mode: 0644]
lib/libdss-include/linux/soundcard.h [new file with mode: 0644]
lib/libdss-include/linux/spi/spidev.h [new file with mode: 0644]
lib/libdss-include/linux/stat.h [new file with mode: 0644]
lib/libdss-include/linux/stddef.h [new file with mode: 0644]
lib/libdss-include/linux/string.h [new file with mode: 0644]
lib/libdss-include/linux/sunrpc/debug.h [new file with mode: 0644]
lib/libdss-include/linux/suspend_ioctls.h [new file with mode: 0644]
lib/libdss-include/linux/swab.h [new file with mode: 0644]
lib/libdss-include/linux/synclink.h [new file with mode: 0644]
lib/libdss-include/linux/sysctl.h [new file with mode: 0644]
lib/libdss-include/linux/sysinfo.h [new file with mode: 0644]
lib/libdss-include/linux/target_core_user.h [new file with mode: 0644]
lib/libdss-include/linux/taskstats.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_bpf.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_connmark.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_csum.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_defact.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_gact.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_ipt.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_mirred.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_nat.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_pedit.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_skbedit.h [new file with mode: 0644]
lib/libdss-include/linux/tc_act/tc_vlan.h [new file with mode: 0644]
lib/libdss-include/linux/tc_ematch/tc_em_cmp.h [new file with mode: 0644]
lib/libdss-include/linux/tc_ematch/tc_em_meta.h [new file with mode: 0644]
lib/libdss-include/linux/tc_ematch/tc_em_nbyte.h [new file with mode: 0644]
lib/libdss-include/linux/tc_ematch/tc_em_text.h [new file with mode: 0644]
lib/libdss-include/linux/tcp.h [new file with mode: 0644]
lib/libdss-include/linux/tcp_metrics.h [new file with mode: 0644]
lib/libdss-include/linux/telephony.h [new file with mode: 0644]
lib/libdss-include/linux/termios.h [new file with mode: 0644]
lib/libdss-include/linux/thermal.h [new file with mode: 0644]
lib/libdss-include/linux/time.h [new file with mode: 0644]
lib/libdss-include/linux/times.h [new file with mode: 0644]
lib/libdss-include/linux/timex.h [new file with mode: 0644]
lib/libdss-include/linux/tiocl.h [new file with mode: 0644]
lib/libdss-include/linux/tipc.h [new file with mode: 0644]
lib/libdss-include/linux/tipc_config.h [new file with mode: 0644]
lib/libdss-include/linux/tipc_netlink.h [new file with mode: 0644]
lib/libdss-include/linux/toshiba.h [new file with mode: 0644]
lib/libdss-include/linux/tty.h [new file with mode: 0644]
lib/libdss-include/linux/tty_flags.h [new file with mode: 0644]
lib/libdss-include/linux/types.h [new file with mode: 0644]
lib/libdss-include/linux/udf_fs_i.h [new file with mode: 0644]
lib/libdss-include/linux/udp.h [new file with mode: 0644]
lib/libdss-include/linux/uhid.h [new file with mode: 0644]
lib/libdss-include/linux/uinput.h [new file with mode: 0644]
lib/libdss-include/linux/uio.h [new file with mode: 0644]
lib/libdss-include/linux/ultrasound.h [new file with mode: 0644]
lib/libdss-include/linux/un.h [new file with mode: 0644]
lib/libdss-include/linux/unistd.h [new file with mode: 0644]
lib/libdss-include/linux/unix_diag.h [new file with mode: 0644]
lib/libdss-include/linux/usb/audio.h [new file with mode: 0644]
lib/libdss-include/linux/usb/cdc-wdm.h [new file with mode: 0644]
lib/libdss-include/linux/usb/cdc.h [new file with mode: 0644]
lib/libdss-include/linux/usb/ch11.h [new file with mode: 0644]
lib/libdss-include/linux/usb/ch9.h [new file with mode: 0644]
lib/libdss-include/linux/usb/functionfs.h [new file with mode: 0644]
lib/libdss-include/linux/usb/g_printer.h [new file with mode: 0644]
lib/libdss-include/linux/usb/gadgetfs.h [new file with mode: 0644]
lib/libdss-include/linux/usb/midi.h [new file with mode: 0644]
lib/libdss-include/linux/usb/tmc.h [new file with mode: 0644]
lib/libdss-include/linux/usb/video.h [new file with mode: 0644]
lib/libdss-include/linux/usbdevice_fs.h [new file with mode: 0644]
lib/libdss-include/linux/usbip.h [new file with mode: 0644]
lib/libdss-include/linux/userfaultfd.h [new file with mode: 0644]
lib/libdss-include/linux/utime.h [new file with mode: 0644]
lib/libdss-include/linux/utsname.h [new file with mode: 0644]
lib/libdss-include/linux/uuid.h [new file with mode: 0644]
lib/libdss-include/linux/uvcvideo.h [new file with mode: 0644]
lib/libdss-include/linux/v4l2-common.h [new file with mode: 0644]
lib/libdss-include/linux/v4l2-controls.h [new file with mode: 0644]
lib/libdss-include/linux/v4l2-dv-timings.h [new file with mode: 0644]
lib/libdss-include/linux/v4l2-mediabus.h [new file with mode: 0644]
lib/libdss-include/linux/v4l2-subdev.h [new file with mode: 0644]
lib/libdss-include/linux/version.h [new file with mode: 0644]
lib/libdss-include/linux/veth.h [new file with mode: 0644]
lib/libdss-include/linux/vfio.h [new file with mode: 0644]
lib/libdss-include/linux/vhost.h [new file with mode: 0644]
lib/libdss-include/linux/videodev2.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_9p.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_balloon.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_blk.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_config.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_console.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_gpu.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_ids.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_input.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_net.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_pci.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_ring.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_rng.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_scsi.h [new file with mode: 0644]
lib/libdss-include/linux/virtio_types.h [new file with mode: 0644]
lib/libdss-include/linux/vm_sockets.h [new file with mode: 0644]
lib/libdss-include/linux/vt.h [new file with mode: 0644]
lib/libdss-include/linux/wait.h [new file with mode: 0644]
lib/libdss-include/linux/wanrouter.h [new file with mode: 0644]
lib/libdss-include/linux/watchdog.h [new file with mode: 0644]
lib/libdss-include/linux/wimax.h [new file with mode: 0644]
lib/libdss-include/linux/wimax/i2400m.h [new file with mode: 0644]
lib/libdss-include/linux/wireless.h [new file with mode: 0644]
lib/libdss-include/linux/x25.h [new file with mode: 0644]
lib/libdss-include/linux/xattr.h [new file with mode: 0644]
lib/libdss-include/linux/xfrm.h [new file with mode: 0644]
lib/libdss-include/linux/xilinx-v4l2-controls.h [new file with mode: 0644]
lib/libdss-include/linux/zorro.h [new file with mode: 0644]
lib/libdss-include/linux/zorro_ids.h [new file with mode: 0644]
lib/libdss-include/locale.h [new file with mode: 0644]
lib/libdss-include/malloc.h [new file with mode: 0644]
lib/libdss-include/math.h [new file with mode: 0644]
lib/libdss-include/mcheck.h [new file with mode: 0644]
lib/libdss-include/memory.h [new file with mode: 0644]
lib/libdss-include/misc/cxl.h [new file with mode: 0644]
lib/libdss-include/mntent.h [new file with mode: 0644]
lib/libdss-include/monetary.h [new file with mode: 0644]
lib/libdss-include/mqueue.h [new file with mode: 0644]
lib/libdss-include/mtd/inftl-user.h [new file with mode: 0644]
lib/libdss-include/mtd/mtd-abi.h [new file with mode: 0644]
lib/libdss-include/mtd/mtd-user.h [new file with mode: 0644]
lib/libdss-include/mtd/nftl-user.h [new file with mode: 0644]
lib/libdss-include/mtd/ubi-user.h [new file with mode: 0644]
lib/libdss-include/net/ethernet.h [new file with mode: 0644]
lib/libdss-include/net/if.h [new file with mode: 0644]
lib/libdss-include/net/if_arp.h [new file with mode: 0644]
lib/libdss-include/net/if_packet.h [new file with mode: 0644]
lib/libdss-include/net/if_ppp.h [new file with mode: 0644]
lib/libdss-include/net/if_shaper.h [new file with mode: 0644]
lib/libdss-include/net/if_slip.h [new file with mode: 0644]
lib/libdss-include/net/ppp-comp.h [new file with mode: 0644]
lib/libdss-include/net/ppp_defs.h [new file with mode: 0644]
lib/libdss-include/net/route.h [new file with mode: 0644]
lib/libdss-include/netash/ash.h [new file with mode: 0644]
lib/libdss-include/netatalk/at.h [new file with mode: 0644]
lib/libdss-include/netax25/ax25.h [new file with mode: 0644]
lib/libdss-include/netdb.h [new file with mode: 0644]
lib/libdss-include/neteconet/ec.h [new file with mode: 0644]
lib/libdss-include/netinet/ether.h [new file with mode: 0644]
lib/libdss-include/netinet/icmp6.h [new file with mode: 0644]
lib/libdss-include/netinet/if_ether.h [new file with mode: 0644]
lib/libdss-include/netinet/if_fddi.h [new file with mode: 0644]
lib/libdss-include/netinet/if_tr.h [new file with mode: 0644]
lib/libdss-include/netinet/igmp.h [new file with mode: 0644]
lib/libdss-include/netinet/in.h [new file with mode: 0644]
lib/libdss-include/netinet/in_systm.h [new file with mode: 0644]
lib/libdss-include/netinet/ip.h [new file with mode: 0644]
lib/libdss-include/netinet/ip6.h [new file with mode: 0644]
lib/libdss-include/netinet/ip_icmp.h [new file with mode: 0644]
lib/libdss-include/netinet/tcp.h [new file with mode: 0644]
lib/libdss-include/netinet/udp.h [new file with mode: 0644]
lib/libdss-include/netipx/ipx.h [new file with mode: 0644]
lib/libdss-include/netiucv/iucv.h [new file with mode: 0644]
lib/libdss-include/netpacket/packet.h [new file with mode: 0644]
lib/libdss-include/netrom/netrom.h [new file with mode: 0644]
lib/libdss-include/netrose/rose.h [new file with mode: 0644]
lib/libdss-include/nfs/nfs.h [new file with mode: 0644]
lib/libdss-include/nl_types.h [new file with mode: 0644]
lib/libdss-include/nss.h [new file with mode: 0644]
lib/libdss-include/obstack.h [new file with mode: 0644]
lib/libdss-include/paths.h [new file with mode: 0644]
lib/libdss-include/poll.h [new file with mode: 0644]
lib/libdss-include/printf.h [new file with mode: 0644]
lib/libdss-include/protocols/routed.h [new file with mode: 0644]
lib/libdss-include/protocols/rwhod.h [new file with mode: 0644]
lib/libdss-include/protocols/talkd.h [new file with mode: 0644]
lib/libdss-include/protocols/timed.h [new file with mode: 0644]
lib/libdss-include/pthread.h [new file with mode: 0644]
lib/libdss-include/pty.h [new file with mode: 0644]
lib/libdss-include/pwd.h [new file with mode: 0644]
lib/libdss-include/rdma/hfi/hfi1_user.h [new file with mode: 0644]
lib/libdss-include/rdma/ib_user_cm.h [new file with mode: 0644]
lib/libdss-include/rdma/ib_user_mad.h [new file with mode: 0644]
lib/libdss-include/rdma/ib_user_sa.h [new file with mode: 0644]
lib/libdss-include/rdma/ib_user_verbs.h [new file with mode: 0644]
lib/libdss-include/rdma/rdma_netlink.h [new file with mode: 0644]
lib/libdss-include/rdma/rdma_user_cm.h [new file with mode: 0644]
lib/libdss-include/re_comp.h [new file with mode: 0644]
lib/libdss-include/regex.h [new file with mode: 0644]
lib/libdss-include/regexp.h [new file with mode: 0644]
lib/libdss-include/resolv.h [new file with mode: 0644]
lib/libdss-include/rpc/auth.h [new file with mode: 0644]
lib/libdss-include/rpc/auth_des.h [new file with mode: 0644]
lib/libdss-include/rpc/auth_unix.h [new file with mode: 0644]
lib/libdss-include/rpc/clnt.h [new file with mode: 0644]
lib/libdss-include/rpc/des_crypt.h [new file with mode: 0644]
lib/libdss-include/rpc/key_prot.h [new file with mode: 0644]
lib/libdss-include/rpc/netdb.h [new file with mode: 0644]
lib/libdss-include/rpc/pmap_clnt.h [new file with mode: 0644]
lib/libdss-include/rpc/pmap_prot.h [new file with mode: 0644]
lib/libdss-include/rpc/pmap_rmt.h [new file with mode: 0644]
lib/libdss-include/rpc/rpc.h [new file with mode: 0644]
lib/libdss-include/rpc/rpc_des.h [new file with mode: 0644]
lib/libdss-include/rpc/rpc_msg.h [new file with mode: 0644]
lib/libdss-include/rpc/svc.h [new file with mode: 0644]
lib/libdss-include/rpc/svc_auth.h [new file with mode: 0644]
lib/libdss-include/rpc/types.h [new file with mode: 0644]
lib/libdss-include/rpc/xdr.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/bootparam.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/bootparam_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/bootparam_prot.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/key_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/key_prot.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/klm_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/klm_prot.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/mount.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/mount.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/nfs_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nfs_prot.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis_callback.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis_callback.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis_object.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/nis_tags.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nislib.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nlm_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/nlm_prot.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/rex.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/rex.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/rquota.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/rquota.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/rstat.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/rstat.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/rusers.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/rusers.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/sm_inter.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/sm_inter.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/spray.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/spray.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/yp.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/yp.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/yp_prot.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/ypclnt.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/yppasswd.h [new file with mode: 0644]
lib/libdss-include/rpcsvc/yppasswd.x [new file with mode: 0644]
lib/libdss-include/rpcsvc/ypupd.h [new file with mode: 0644]
lib/libdss-include/sched.h [new file with mode: 0644]
lib/libdss-include/scsi/scsi.h [new file with mode: 0644]
lib/libdss-include/scsi/scsi_ioctl.h [new file with mode: 0644]
lib/libdss-include/scsi/sg.h [new file with mode: 0644]
lib/libdss-include/search.h [new file with mode: 0644]
lib/libdss-include/semaphore.h [new file with mode: 0644]
lib/libdss-include/setjmp.h [new file with mode: 0644]
lib/libdss-include/sgtty.h [new file with mode: 0644]
lib/libdss-include/shadow.h [new file with mode: 0644]
lib/libdss-include/signal.h [new file with mode: 0644]
lib/libdss-include/sound/asequencer.h [new file with mode: 0644]
lib/libdss-include/sound/asound.h [new file with mode: 0644]
lib/libdss-include/sound/asound_fm.h [new file with mode: 0644]
lib/libdss-include/sound/compress_offload.h [new file with mode: 0644]
lib/libdss-include/sound/compress_params.h [new file with mode: 0644]
lib/libdss-include/sound/emu10k1.h [new file with mode: 0644]
lib/libdss-include/sound/firewire.h [new file with mode: 0644]
lib/libdss-include/sound/hdsp.h [new file with mode: 0644]
lib/libdss-include/sound/hdspm.h [new file with mode: 0644]
lib/libdss-include/sound/sb16_csp.h [new file with mode: 0644]
lib/libdss-include/sound/sfnt_info.h [new file with mode: 0644]
lib/libdss-include/spawn.h [new file with mode: 0644]
lib/libdss-include/stab.h [new file with mode: 0644]
lib/libdss-include/stdc-predef.h [new file with mode: 0644]
lib/libdss-include/stdint.h [new file with mode: 0644]
lib/libdss-include/stdio.h [new file with mode: 0644]
lib/libdss-include/stdio_ext.h [new file with mode: 0644]
lib/libdss-include/stdlib.h [new file with mode: 0644]
lib/libdss-include/string.h [new file with mode: 0644]
lib/libdss-include/strings.h [new file with mode: 0644]
lib/libdss-include/stropts.h [new file with mode: 0644]
lib/libdss-include/sys/acct.h [new file with mode: 0644]
lib/libdss-include/sys/auxv.h [new file with mode: 0644]
lib/libdss-include/sys/bitypes.h [new file with mode: 0644]
lib/libdss-include/sys/cdefs.h [new file with mode: 0644]
lib/libdss-include/sys/dir.h [new file with mode: 0644]
lib/libdss-include/sys/elf.h [new file with mode: 0644]
lib/libdss-include/sys/epoll.h [new file with mode: 0644]
lib/libdss-include/sys/errno.h [new file with mode: 0644]
lib/libdss-include/sys/eventfd.h [new file with mode: 0644]
lib/libdss-include/sys/fanotify.h [new file with mode: 0644]
lib/libdss-include/sys/fcntl.h [new file with mode: 0644]
lib/libdss-include/sys/file.h [new file with mode: 0644]
lib/libdss-include/sys/fsuid.h [new file with mode: 0644]
lib/libdss-include/sys/gmon.h [new file with mode: 0644]
lib/libdss-include/sys/gmon_out.h [new file with mode: 0644]
lib/libdss-include/sys/inotify.h [new file with mode: 0644]
lib/libdss-include/sys/ioctl.h [new file with mode: 0644]
lib/libdss-include/sys/ipc.h [new file with mode: 0644]
lib/libdss-include/sys/kd.h [new file with mode: 0644]
lib/libdss-include/sys/klog.h [new file with mode: 0644]
lib/libdss-include/sys/mman.h [new file with mode: 0644]
lib/libdss-include/sys/mount.h [new file with mode: 0644]
lib/libdss-include/sys/msg.h [new file with mode: 0644]
lib/libdss-include/sys/mtio.h [new file with mode: 0644]
lib/libdss-include/sys/param.h [new file with mode: 0644]
lib/libdss-include/sys/pci.h [new file with mode: 0644]
lib/libdss-include/sys/personality.h [new file with mode: 0644]
lib/libdss-include/sys/poll.h [new file with mode: 0644]
lib/libdss-include/sys/prctl.h [new file with mode: 0644]
lib/libdss-include/sys/procfs.h [new file with mode: 0644]
lib/libdss-include/sys/profil.h [new file with mode: 0644]
lib/libdss-include/sys/ptrace.h [new file with mode: 0644]
lib/libdss-include/sys/queue.h [new file with mode: 0644]
lib/libdss-include/sys/quota.h [new file with mode: 0644]
lib/libdss-include/sys/raw.h [new file with mode: 0644]
lib/libdss-include/sys/reboot.h [new file with mode: 0644]
lib/libdss-include/sys/resource.h [new file with mode: 0644]
lib/libdss-include/sys/select.h [new file with mode: 0644]
lib/libdss-include/sys/sem.h [new file with mode: 0644]
lib/libdss-include/sys/sendfile.h [new file with mode: 0644]
lib/libdss-include/sys/shm.h [new file with mode: 0644]
lib/libdss-include/sys/signal.h [new file with mode: 0644]
lib/libdss-include/sys/signalfd.h [new file with mode: 0644]
lib/libdss-include/sys/socket.h [new file with mode: 0644]
lib/libdss-include/sys/socketvar.h [new file with mode: 0644]
lib/libdss-include/sys/soundcard.h [new file with mode: 0644]
lib/libdss-include/sys/stat.h [new file with mode: 0644]
lib/libdss-include/sys/statfs.h [new file with mode: 0644]
lib/libdss-include/sys/statvfs.h [new file with mode: 0644]
lib/libdss-include/sys/stropts.h [new file with mode: 0644]
lib/libdss-include/sys/swap.h [new file with mode: 0644]
lib/libdss-include/sys/syscall.h [new file with mode: 0644]
lib/libdss-include/sys/sysctl.h [new file with mode: 0644]
lib/libdss-include/sys/sysinfo.h [new file with mode: 0644]
lib/libdss-include/sys/syslog.h [new file with mode: 0644]
lib/libdss-include/sys/sysmacros.h [new file with mode: 0644]
lib/libdss-include/sys/termios.h [new file with mode: 0644]
lib/libdss-include/sys/time.h [new file with mode: 0644]
lib/libdss-include/sys/timeb.h [new file with mode: 0644]
lib/libdss-include/sys/timerfd.h [new file with mode: 0644]
lib/libdss-include/sys/times.h [new file with mode: 0644]
lib/libdss-include/sys/timex.h [new file with mode: 0644]
lib/libdss-include/sys/ttychars.h [new file with mode: 0644]
lib/libdss-include/sys/ttydefaults.h [new file with mode: 0644]
lib/libdss-include/sys/types.h [new file with mode: 0644]
lib/libdss-include/sys/ucontext.h [new file with mode: 0644]
lib/libdss-include/sys/uio.h [new file with mode: 0644]
lib/libdss-include/sys/ultrasound.h [new file with mode: 0644]
lib/libdss-include/sys/un.h [new file with mode: 0644]
lib/libdss-include/sys/unistd.h [new file with mode: 0644]
lib/libdss-include/sys/user.h [new file with mode: 0644]
lib/libdss-include/sys/ustat.h [new file with mode: 0644]
lib/libdss-include/sys/utsname.h [new file with mode: 0644]
lib/libdss-include/sys/vfs.h [new file with mode: 0644]
lib/libdss-include/sys/vlimit.h [new file with mode: 0644]
lib/libdss-include/sys/vt.h [new file with mode: 0644]
lib/libdss-include/sys/vtimes.h [new file with mode: 0644]
lib/libdss-include/sys/wait.h [new file with mode: 0644]
lib/libdss-include/sys/xattr.h [new file with mode: 0644]
lib/libdss-include/syscall.h [new file with mode: 0644]
lib/libdss-include/sysexits.h [new file with mode: 0644]
lib/libdss-include/syslog.h [new file with mode: 0644]
lib/libdss-include/tar.h [new file with mode: 0644]
lib/libdss-include/termio.h [new file with mode: 0644]
lib/libdss-include/termios.h [new file with mode: 0644]
lib/libdss-include/tgmath.h [new file with mode: 0644]
lib/libdss-include/thread_db.h [new file with mode: 0644]
lib/libdss-include/time.h [new file with mode: 0644]
lib/libdss-include/ttyent.h [new file with mode: 0644]
lib/libdss-include/uchar.h [new file with mode: 0644]
lib/libdss-include/ucontext.h [new file with mode: 0644]
lib/libdss-include/ulimit.h [new file with mode: 0644]
lib/libdss-include/unistd.h [new file with mode: 0644]
lib/libdss-include/ustat.h [new file with mode: 0644]
lib/libdss-include/utime.h [new file with mode: 0644]
lib/libdss-include/utmp.h [new file with mode: 0644]
lib/libdss-include/utmpx.h [new file with mode: 0644]
lib/libdss-include/values.h [new file with mode: 0644]
lib/libdss-include/video/edid.h [new file with mode: 0644]
lib/libdss-include/video/sisfb.h [new file with mode: 0644]
lib/libdss-include/video/uvesafb.h [new file with mode: 0644]
lib/libdss-include/wait.h [new file with mode: 0644]
lib/libdss-include/wchar.h [new file with mode: 0644]
lib/libdss-include/wctype.h [new file with mode: 0644]
lib/libdss-include/wordexp.h [new file with mode: 0644]
lib/libdss-include/xen/evtchn.h [new file with mode: 0644]
lib/libdss-include/xen/gntalloc.h [new file with mode: 0644]
lib/libdss-include/xen/gntdev.h [new file with mode: 0644]
lib/libdss-include/xen/privcmd.h [new file with mode: 0644]
lib/libdss-include/xlocale.h [new file with mode: 0644]

index d61c4ec63e13c14431f32f36d2679d697ea7aa49..8ca38384610422bb1af7b172bb3d696013e109cc 100755 (executable)
@@ -1,6 +1,6 @@
 clang \
   --target=aarch64-linux-gnu \
-  -I/usr/aarch64-linux-gnu/include \
+  -Ilib/libdss-include \
   -Iinclude \
   -mlittle-endian \
   -Qunused-arguments \
diff --git a/lib/libdss-include/_G_config.h b/lib/libdss-include/_G_config.h
new file mode 100644 (file)
index 0000000..abec245
--- /dev/null
@@ -0,0 +1,58 @@
+/* This file is needed by libio to define various configuration parameters.
+   These are always the same in the GNU C library.  */
+
+#ifndef _G_config_h
+#define _G_config_h 1
+
+/* Define types for libio in terms of the standard internal type names.  */
+
+#include <bits/types.h>
+#define __need_size_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wchar_t
+#endif
+#define __need_NULL
+#include <stddef.h>
+#define __need_mbstate_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wint_t
+#endif
+#include <wchar.h>
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# include <gconv.h>
+typedef union
+{
+  struct __gconv_info __cd;
+  struct
+  {
+    struct __gconv_info __cd;
+    struct __gconv_step_data __data;
+  } __combined;
+} _G_iconv_t;
+#endif
+
+
+/* These library features are always available in the GNU C library.  */
+#define _G_va_list __gnuc_va_list
+
+#define _G_HAVE_MMAP 1
+#define _G_HAVE_MREMAP 1
+
+#define _G_IO_IO_FILE_VERSION 0x20001
+
+/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+#define _G_BUFSIZ 8192
+
+#endif /* _G_config.h */
diff --git a/lib/libdss-include/a.out.h b/lib/libdss-include/a.out.h
new file mode 100644 (file)
index 0000000..e3f4bdd
--- /dev/null
@@ -0,0 +1,138 @@
+#ifndef __A_OUT_GNU_H__
+#define __A_OUT_GNU_H__
+
+#include <bits/a.out.h>
+
+#define __GNU_EXEC_MACROS__
+
+struct exec
+{
+  unsigned long a_info;        /* Use macros N_MAGIC, etc for access.  */
+  unsigned int a_text; /* Length of text, in bytes.  */
+  unsigned int a_data; /* Length of data, in bytes.  */
+  unsigned int a_bss;  /* Length of uninitialized data area for file, in bytes.  */
+  unsigned int a_syms; /* Length of symbol table data in file, in bytes.  */
+  unsigned int a_entry;        /* Start address.  */
+  unsigned int a_trsize;/* Length of relocation info for text, in bytes.  */
+  unsigned int a_drsize;/* Length of relocation info for data, in bytes.  */
+};
+
+enum machine_type
+{
+  M_OLDSUN2 = 0,
+  M_68010 = 1,
+  M_68020 = 2,
+  M_SPARC = 3,
+  M_386 = 100,
+  M_MIPS1 = 151,
+  M_MIPS2 = 152
+};
+
+#define N_MAGIC(exec)  ((exec).a_info & 0xffff)
+#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
+#define N_FLAGS(exec)  (((exec).a_info >> 24) & 0xff)
+#define N_SET_INFO(exec, magic, type, flags) \
+  ((exec).a_info = ((magic) & 0xffff)                                  \
+   | (((int)(type) & 0xff) << 16)                                      \
+   | (((flags) & 0xff) << 24))
+#define N_SET_MAGIC(exec, magic) \
+  ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff))
+#define N_SET_MACHTYPE(exec, machtype) \
+  ((exec).a_info =                                                     \
+   ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
+#define N_SET_FLAGS(exec, flags) \
+  ((exec).a_info =                                                     \
+   ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
+
+/* Code indicating object file or impure executable.  */
+#define OMAGIC 0407
+/* Code indicating pure executable.  */
+#define NMAGIC 0410
+/* Code indicating demand-paged executable.  */
+#define ZMAGIC 0413
+/* This indicates a demand-paged executable with the header in the text.
+   The first page is unmapped to help trap NULL pointer references.  */
+#define QMAGIC 0314
+/* Code indicating core file.  */
+#define CMAGIC 0421
+
+#define N_TRSIZE(a)    ((a).a_trsize)
+#define N_DRSIZE(a)    ((a).a_drsize)
+#define N_SYMSIZE(a)   ((a).a_syms)
+#define N_BADMAG(x) \
+  (N_MAGIC(x) != OMAGIC        && N_MAGIC(x) != NMAGIC                         \
+   && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC)
+#define _N_HDROFF(x)   (1024 - sizeof (struct exec))
+#define N_TXTOFF(x) \
+  (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) :      \
+   (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec)))
+#define N_DATOFF(x)    (N_TXTOFF(x) + (x).a_text)
+#define N_TRELOFF(x)   (N_DATOFF(x) + (x).a_data)
+#define N_DRELOFF(x)   (N_TRELOFF(x) + N_TRSIZE(x))
+#define N_SYMOFF(x)    (N_DRELOFF(x) + N_DRSIZE(x))
+#define N_STROFF(x)    (N_SYMOFF(x) + N_SYMSIZE(x))
+
+/* Address of text segment in memory after it is loaded.  */
+#define N_TXTADDR(x)   (N_MAGIC(x) == QMAGIC ? 4096 : 0)
+
+/* Address of data segment in memory after it is loaded.  */
+#define SEGMENT_SIZE   1024
+
+#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
+#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
+
+#define N_DATADDR(x) \
+  (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x))                              \
+   : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
+#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
+
+#if !defined (N_NLIST_DECLARED)
+struct nlist
+{
+  union
+    {
+      char *n_name;
+      struct nlist *n_next;
+      long n_strx;
+    } n_un;
+  unsigned char n_type;
+  char n_other;
+  short n_desc;
+  unsigned long n_value;
+};
+#endif /* no N_NLIST_DECLARED.  */
+
+#define N_UNDF 0
+#define N_ABS  2
+#define N_TEXT 4
+#define N_DATA 6
+#define N_BSS  8
+#define N_FN   15
+#define N_EXT  1
+#define N_TYPE 036
+#define N_STAB 0340
+#define N_INDR 0xa
+#define        N_SETA  0x14    /* Absolute set element symbol.  */
+#define        N_SETT  0x16    /* Text set element symbol.  */
+#define        N_SETD  0x18    /* Data set element symbol.  */
+#define        N_SETB  0x1A    /* Bss set element symbol.  */
+#define N_SETV 0x1C    /* Pointer to set vector in data area.  */
+
+#if !defined (N_RELOCATION_INFO_DECLARED)
+/* This structure describes a single relocation to be performed.
+   The text-relocation section of the file is a vector of these structures,
+   all of which apply to the text section.
+   Likewise, the data-relocation section applies to the data section.  */
+
+struct relocation_info
+{
+  int r_address;
+  unsigned int r_symbolnum:24;
+  unsigned int r_pcrel:1;
+  unsigned int r_length:2;
+  unsigned int r_extern:1;
+  unsigned int r_pad:4;
+};
+#endif /* no N_RELOCATION_INFO_DECLARED.  */
+
+#endif /* __A_OUT_GNU_H__ */
diff --git a/lib/libdss-include/aio.h b/lib/libdss-include/aio.h
new file mode 100644 (file)
index 0000000..8cb6a5e
--- /dev/null
@@ -0,0 +1,246 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
+ */
+
+#ifndef _AIO_H
+#define _AIO_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#define __need_sigevent_t
+#include <bits/siginfo.h>
+#define __need_timespec
+#include <time.h>
+
+__BEGIN_DECLS
+
+/* Asynchronous I/O control block.  */
+struct aiocb
+{
+  int aio_fildes;              /* File desriptor.  */
+  int aio_lio_opcode;          /* Operation to be performed.  */
+  int aio_reqprio;             /* Request priority offset.  */
+  volatile void *aio_buf;      /* Location of buffer.  */
+  size_t aio_nbytes;           /* Length of transfer.  */
+  struct sigevent aio_sigevent;        /* Signal number and value.  */
+
+  /* Internal members.  */
+  struct aiocb *__next_prio;
+  int __abs_prio;
+  int __policy;
+  int __error_code;
+  __ssize_t __return_value;
+
+#ifndef __USE_FILE_OFFSET64
+  __off_t aio_offset;          /* File offset.  */
+  char __pad[sizeof (__off64_t) - sizeof (__off_t)];
+#else
+  __off64_t aio_offset;                /* File offset.  */
+#endif
+  char __glibc_reserved[32];
+};
+
+/* The same for the 64bit offsets.  Please note that the members aio_fildes
+   to __return_value have to be the same in aiocb and aiocb64.  */
+#ifdef __USE_LARGEFILE64
+struct aiocb64
+{
+  int aio_fildes;              /* File desriptor.  */
+  int aio_lio_opcode;          /* Operation to be performed.  */
+  int aio_reqprio;             /* Request priority offset.  */
+  volatile void *aio_buf;      /* Location of buffer.  */
+  size_t aio_nbytes;           /* Length of transfer.  */
+  struct sigevent aio_sigevent;        /* Signal number and value.  */
+
+  /* Internal members.  */
+  struct aiocb *__next_prio;
+  int __abs_prio;
+  int __policy;
+  int __error_code;
+  __ssize_t __return_value;
+
+  __off64_t aio_offset;                /* File offset.  */
+  char __glibc_reserved[32];
+};
+#endif
+
+
+#ifdef __USE_GNU
+/* To customize the implementation one can use the following struct.
+   This implementation follows the one in Irix.  */
+struct aioinit
+  {
+    int aio_threads;           /* Maximal number of threads.  */
+    int aio_num;               /* Number of expected simultanious requests. */
+    int aio_locks;             /* Not used.  */
+    int aio_usedba;            /* Not used.  */
+    int aio_debug;             /* Not used.  */
+    int aio_numusers;          /* Not used.  */
+    int aio_idle_time;         /* Number of seconds before idle thread
+                                  terminates.  */
+    int aio_reserved;
+  };
+#endif
+
+
+/* Return values of cancelation function.  */
+enum
+{
+  AIO_CANCELED,
+#define AIO_CANCELED AIO_CANCELED
+  AIO_NOTCANCELED,
+#define AIO_NOTCANCELED AIO_NOTCANCELED
+  AIO_ALLDONE
+#define AIO_ALLDONE AIO_ALLDONE
+};
+
+
+/* Operation codes for `aio_lio_opcode'.  */
+enum
+{
+  LIO_READ,
+#define LIO_READ LIO_READ
+  LIO_WRITE,
+#define LIO_WRITE LIO_WRITE
+  LIO_NOP
+#define LIO_NOP LIO_NOP
+};
+
+
+/* Synchronization options for `lio_listio' function.  */
+enum
+{
+  LIO_WAIT,
+#define LIO_WAIT LIO_WAIT
+  LIO_NOWAIT
+#define LIO_NOWAIT LIO_NOWAIT
+};
+
+
+/* Allow user to specify optimization.  */
+#ifdef __USE_GNU
+extern void aio_init (const struct aioinit *__init) __THROW __nonnull ((1));
+#endif
+
+
+#ifndef __USE_FILE_OFFSET64
+/* Enqueue read request for given number of bytes and the given priority.  */
+extern int aio_read (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+/* Enqueue write request for given number of bytes and the given priority.  */
+extern int aio_write (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+
+/* Initiate list of I/O requests.  */
+extern int lio_listio (int __mode,
+                      struct aiocb *const __list[__restrict_arr],
+                      int __nent, struct sigevent *__restrict __sig)
+  __THROW __nonnull ((2));
+
+/* Retrieve error status associated with AIOCBP.  */
+extern int aio_error (const struct aiocb *__aiocbp) __THROW __nonnull ((1));
+/* Return status associated with AIOCBP.  */
+extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+
+/* Try to cancel asynchronous I/O requests outstanding against file
+   descriptor FILDES.  */
+extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW;
+
+/* Suspend calling thread until at least one of the asynchronous I/O
+   operations referenced by LIST has completed.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int aio_suspend (const struct aiocb *const __list[], int __nent,
+                       const struct timespec *__restrict __timeout)
+  __nonnull ((1));
+
+/* Force all operations associated with file desriptor described by
+   `aio_fildes' member of AIOCBP.  */
+extern int aio_fsync (int __operation, struct aiocb *__aiocbp)
+  __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64)
+  __nonnull ((1));
+extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64)
+  __nonnull ((1));
+
+extern int __REDIRECT_NTH (lio_listio,
+                          (int __mode,
+                           struct aiocb *const __list[__restrict_arr],
+                           int __nent, struct sigevent *__restrict __sig),
+                          lio_listio64) __nonnull ((2));
+
+extern int __REDIRECT_NTH (aio_error, (const struct aiocb *__aiocbp),
+                          aio_error64) __nonnull ((1));
+extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
+                                aio_return64) __nonnull ((1));
+
+extern int __REDIRECT_NTH (aio_cancel,
+                          (int __fildes, struct aiocb *__aiocbp),
+                          aio_cancel64);
+
+extern int __REDIRECT_NTH (aio_suspend,
+                          (const struct aiocb *const __list[], int __nent,
+                           const struct timespec *__restrict __timeout),
+                          aio_suspend64) __nonnull ((1));
+
+extern int __REDIRECT_NTH (aio_fsync,
+                          (int __operation, struct aiocb *__aiocbp),
+                          aio_fsync64) __nonnull ((2));
+
+# else
+#  define aio_read aio_read64
+#  define aio_write aio_write64
+#  define lio_listio lio_listio64
+#  define aio_error aio_error64
+#  define aio_return aio_return64
+#  define aio_cancel aio_cancel64
+#  define aio_suspend aio_suspend64
+#  define aio_fsync aio_fsync64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
+extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
+
+extern int lio_listio64 (int __mode,
+                        struct aiocb64 *const __list[__restrict_arr],
+                        int __nent, struct sigevent *__restrict __sig)
+  __THROW __nonnull ((2));
+
+extern int aio_error64 (const struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((1));
+extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((1));
+
+extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW;
+
+extern int aio_suspend64 (const struct aiocb64 *const __list[], int __nent,
+                         const struct timespec *__restrict __timeout)
+  __THROW __nonnull ((1));
+
+extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* aio.h */
diff --git a/lib/libdss-include/aliases.h b/lib/libdss-include/aliases.h
new file mode 100644 (file)
index 0000000..44760d3
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ALIASES_H
+#define _ALIASES_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* Structure to represent one entry of the alias data base.  */
+struct aliasent
+  {
+    char *alias_name;
+    size_t alias_members_len;
+    char **alias_members;
+    int alias_local;
+  };
+
+
+/* Open alias data base files.  */
+extern void setaliasent (void) __THROW;
+
+/* Close alias data base files.  */
+extern void endaliasent (void) __THROW;
+
+/* Get the next entry from the alias data base.  */
+extern struct aliasent *getaliasent (void) __THROW;
+
+/* Get the next entry from the alias data base and put it in RESULT_BUF.  */
+extern int getaliasent_r (struct aliasent *__restrict __result_buf,
+                         char *__restrict __buffer, size_t __buflen,
+                         struct aliasent **__restrict __result) __THROW;
+
+/* Get alias entry corresponding to NAME.  */
+extern struct aliasent *getaliasbyname (const char *__name) __THROW;
+
+/* Get alias entry corresponding to NAME and put it in RESULT_BUF.  */
+extern int getaliasbyname_r (const char *__restrict __name,
+                            struct aliasent *__restrict __result_buf,
+                            char *__restrict __buffer, size_t __buflen,
+                            struct aliasent **__restrict __result) __THROW;
+
+__END_DECLS
+
+#endif /* aliases.h */
diff --git a/lib/libdss-include/alloca.h b/lib/libdss-include/alloca.h
new file mode 100644 (file)
index 0000000..974d11a
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ALLOCA_H
+#define        _ALLOCA_H       1
+
+#include <features.h>
+
+#define        __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions.  */
+#undef alloca
+
+/* Allocate a block that will be freed when the calling function exits.  */
+extern void *alloca (size_t __size) __THROW;
+
+#ifdef __GNUC__
+# define alloca(size)  __builtin_alloca (size)
+#endif /* GCC.  */
+
+__END_DECLS
+
+#endif /* alloca.h */
diff --git a/lib/libdss-include/ar.h b/lib/libdss-include/ar.h
new file mode 100644 (file)
index 0000000..caa0223
--- /dev/null
@@ -0,0 +1,47 @@
+/* Header describing `ar' archive file format.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AR_H
+#define _AR_H 1
+
+#include <sys/cdefs.h>
+
+/* Archive files start with the ARMAG identifying string.  Then follows a
+   `struct ar_hdr', and as many bytes of member file data as its `ar_size'
+   member indicates, for each member file.  */
+
+#define ARMAG  "!<arch>\n"     /* String that begins an archive file.  */
+#define SARMAG 8               /* Size of that string.  */
+
+#define ARFMAG "`\n"           /* String in ar_fmag at end of each header.  */
+
+__BEGIN_DECLS
+
+struct ar_hdr
+  {
+    char ar_name[16];          /* Member file name, sometimes / terminated. */
+    char ar_date[12];          /* File date, decimal seconds since Epoch.  */
+    char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal.  */
+    char ar_mode[8];           /* File mode, in ASCII octal.  */
+    char ar_size[10];          /* File size, in ASCII decimal.  */
+    char ar_fmag[2];           /* Always contains ARFMAG.  */
+  };
+
+__END_DECLS
+
+#endif /* ar.h */
diff --git a/lib/libdss-include/argp.h b/lib/libdss-include/argp.h
new file mode 100644 (file)
index 0000000..21fd1f2
--- /dev/null
@@ -0,0 +1,594 @@
+/* Hierarchial argument parsing, layered over getopt.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARGP_H
+#define _ARGP_H
+
+#include <stdio.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <limits.h>
+
+#define __need_error_t
+#include <errno.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+#ifndef __NTH
+# define __NTH(fct) fct __THROW
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+
+#ifndef __error_t_defined
+typedef int error_t;
+# define __error_t_defined
+#endif
+\f
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* A description of a particular option.  A pointer to an array of
+   these is passed in the OPTIONS field of an argp structure.  Each option
+   entry can correspond to one long option and/or one short option; more
+   names for the same option can be added by following an entry in an option
+   array with options having the OPTION_ALIAS flag set.  */
+struct argp_option
+{
+  /* The long option name.  For more than one name for the same option, you
+     can use following options with the OPTION_ALIAS flag set.  */
+  const char *name;
+
+  /* What key is returned for this option.  If > 0 and printable, then it's
+     also accepted as a short option.  */
+  int key;
+
+  /* If non-NULL, this is the name of the argument associated with this
+     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
+  const char *arg;
+
+  /* OPTION_ flags.  */
+  int flags;
+
+  /* The doc string for this option.  If both NAME and KEY are 0, This string
+     will be printed outdented from the normal option column, making it
+     useful as a group header (it will be the first thing printed in its
+     group); in this usage, it's conventional to end the string with a `:'.  */
+  const char *doc;
+
+  /* The group this option is in.  In a long help message, options are sorted
+     alphabetically within each group, and the groups presented in the order
+     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
+     if this field 0 will inherit the group number of the previous entry, or
+     zero if it's the first one, unless its a group header (NAME and KEY both
+     0), in which case, the previous entry + 1 is the default.  Automagic
+     options such as --help are put into group -1.  */
+  int group;
+};
+
+/* The argument associated with this option is optional.  */
+#define OPTION_ARG_OPTIONAL    0x1
+
+/* This option isn't displayed in any help messages.  */
+#define OPTION_HIDDEN          0x2
+
+/* This option is an alias for the closest previous non-alias option.  This
+   means that it will be displayed in the same help entry, and will inherit
+   fields other than NAME and KEY from the aliased option.  */
+#define OPTION_ALIAS           0x4
+
+/* This option isn't actually an option (and so should be ignored by the
+   actual option parser), but rather an arbitrary piece of documentation that
+   should be displayed in much the same manner as the options.  If this flag
+   is set, then the option NAME field is displayed unmodified (e.g., no `--'
+   prefix is added) at the left-margin (where a *short* option would normally
+   be displayed), and the documentation string in the normal place.  For
+   purposes of sorting, any leading whitespace and punctuation is ignored,
+   except that if the first non-whitespace character is not `-', this entry
+   is displayed after all options (and OPTION_DOC entries with a leading `-')
+   in the same group.  */
+#define OPTION_DOC             0x8
+
+/* This option shouldn't be included in `long' usage messages (but is still
+   included in help messages).  This is mainly intended for options that are
+   completely documented in an argp's ARGS_DOC field, in which case including
+   the option in the generic usage list would be redundant.  For instance,
+   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
+   distinguish these two cases, -x should probably be marked
+   OPTION_NO_USAGE.  */
+#define OPTION_NO_USAGE                0x10
+\f
+struct argp;                   /* fwd declare this type */
+struct argp_state;             /* " */
+struct argp_child;             /* " */
+
+/* The type of a pointer to an argp parsing function.  */
+typedef error_t (*argp_parser_t) (int __key, char *__arg,
+                                 struct argp_state *__state);
+
+/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
+   returns will simply be ignored.  For user keys, this error will be turned
+   into EINVAL (if the call to argp_parse is such that errors are propagated
+   back to the user instead of exiting); returning EINVAL itself would result
+   in an immediate stop to parsing in *all* cases.  */
+#define ARGP_ERR_UNKNOWN       E2BIG /* Hurd should never need E2BIG.  XXX */
+
+/* Special values for the KEY argument to an argument parsing function.
+   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
+
+   The sequence of keys to a parsing function is either (where each
+   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
+
+       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
+   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
+   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
+
+   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
+   argument, in which case parsing stops at that argument (returning the
+   unparsed arguments to the caller of argp_parse if requested, or stopping
+   with an error message if not).
+
+   If an error occurs (either detected by argp, or because the parsing
+   function returned an error value), then the parser is called with
+   ARGP_KEY_ERROR, and no further calls are made.  */
+
+/* This is not an option at all, but rather a command line argument.  If a
+   parser receiving this key returns success, the fact is recorded, and the
+   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
+   argument, a parser function decrements the NEXT field of the state it's
+   passed, the option won't be considered processed; this is to allow you to
+   actually modify the argument (perhaps into an option), and have it
+   processed again.  */
+#define ARGP_KEY_ARG           0
+/* There are remaining arguments not parsed by any parser, which may be found
+   starting at (STATE->argv + STATE->next).  If success is returned, but
+   STATE->next left untouched, it's assumed that all arguments were consume,
+   otherwise, the parser should adjust STATE->next to reflect any arguments
+   consumed.  */
+#define ARGP_KEY_ARGS          0x1000006
+/* There are no more command line arguments at all.  */
+#define ARGP_KEY_END           0x1000001
+/* Because it's common to want to do some special processing if there aren't
+   any non-option args, user parsers are called with this key if they didn't
+   successfully process any non-option arguments.  Called just before
+   ARGP_KEY_END (where more general validity checks on previously parsed
+   arguments can take place).  */
+#define ARGP_KEY_NO_ARGS       0x1000002
+/* Passed in before any parsing is done.  Afterwards, the values of each
+   element of the CHILD_INPUT field, if any, in the state structure is
+   copied to each child's state to be the initial value of the INPUT field.  */
+#define ARGP_KEY_INIT          0x1000003
+/* Use after all other keys, including SUCCESS & END.  */
+#define ARGP_KEY_FINI          0x1000007
+/* Passed in when parsing has successfully been completed (even if there are
+   still arguments remaining).  */
+#define ARGP_KEY_SUCCESS       0x1000004
+/* Passed in if an error occurs.  */
+#define ARGP_KEY_ERROR         0x1000005
+
+/* An argp structure contains a set of options declarations, a function to
+   deal with parsing one, documentation string, a possible vector of child
+   argp's, and perhaps a function to filter help output.  When actually
+   parsing options, getopt is called with the union of all the argp
+   structures chained together through their CHILD pointers, with conflicts
+   being resolved in favor of the first occurrence in the chain.  */
+struct argp
+{
+  /* An array of argp_option structures, terminated by an entry with both
+     NAME and KEY having a value of 0.  */
+  const struct argp_option *options;
+
+  /* What to do with an option from this structure.  KEY is the key
+     associated with the option, and ARG is any associated argument (NULL if
+     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
+     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
+     parsing is stopped immediately, and that value is returned from
+     argp_parse().  For special (non-user-supplied) values of KEY, see the
+     ARGP_KEY_ definitions below.  */
+  argp_parser_t parser;
+
+  /* A string describing what other arguments are wanted by this program.  It
+     is only used by argp_usage to print the `Usage:' message.  If it
+     contains newlines, the strings separated by them are considered
+     alternative usage patterns, and printed on separate lines (lines after
+     the first are prefix by `  or: ' instead of `Usage:').  */
+  const char *args_doc;
+
+  /* If non-NULL, a string containing extra text to be printed before and
+     after the options in a long help message (separated by a vertical tab
+     `\v' character).  */
+  const char *doc;
+
+  /* A vector of argp_children structures, terminated by a member with a 0
+     argp field, pointing to child argps should be parsed with this one.  Any
+     conflicts are resolved in favor of this argp, or early argps in the
+     CHILDREN list.  This field is useful if you use libraries that supply
+     their own argp structure, which you want to use in conjunction with your
+     own.  */
+  const struct argp_child *children;
+
+  /* If non-zero, this should be a function to filter the output of help
+     messages.  KEY is either a key from an option, in which case TEXT is
+     that option's help text, or a special key from the ARGP_KEY_HELP_
+     defines, below, describing which other help text TEXT is.  The function
+     should return either TEXT, if it should be used as-is, a replacement
+     string, which should be malloced, and will be freed by argp, or NULL,
+     meaning `print nothing'.  The value for TEXT is *after* any translation
+     has been done, so if any of the replacement text also needs translation,
+     that should be done by the filter function.  INPUT is either the input
+     supplied to argp_parse, or NULL, if argp_help was called directly.  */
+  char *(*help_filter) (int __key, const char *__text, void *__input);
+
+  /* If non-zero the strings used in the argp library are translated using
+     the domain described by this string.  Otherwise the currently installed
+     default domain is used.  */
+  const char *argp_domain;
+};
+
+/* Possible KEY arguments to a help filter function.  */
+#define ARGP_KEY_HELP_PRE_DOC  0x2000001 /* Help text preceeding options. */
+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
+#define ARGP_KEY_HELP_HEADER   0x2000003 /* Option header string. */
+#define ARGP_KEY_HELP_EXTRA    0x2000004 /* After all other documentation;
+                                            TEXT is NULL for this key.  */
+/* Explanatory note emitted when duplicate option arguments have been
+   suppressed.  */
+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string.  */
+\f
+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
+   argp_child structures, each of which describes a subsidiary argp.  */
+struct argp_child
+{
+  /* The child parser.  */
+  const struct argp *argp;
+
+  /* Flags for this child.  */
+  int flags;
+
+  /* If non-zero, an optional header to be printed in help output before the
+     child options.  As a side-effect, a non-zero value forces the child
+     options to be grouped together; to achieve this effect without actually
+     printing a header string, use a value of "".  */
+  const char *header;
+
+  /* Where to group the child options relative to the other (`consolidated')
+     options in the parent argp; the values are the same as the GROUP field
+     in argp_option structs, but all child-groupings follow parent options at
+     a particular group level.  If both this field and HEADER are zero, then
+     they aren't grouped at all, but rather merged with the parent options
+     (merging the child's grouping levels with the parents).  */
+  int group;
+};
+\f
+/* Parsing state.  This is provided to parsing functions called by argp,
+   which may examine and, as noted, modify fields.  */
+struct argp_state
+{
+  /* The top level ARGP being parsed.  */
+  const struct argp *root_argp;
+
+  /* The argument vector being parsed.  May be modified.  */
+  int argc;
+  char **argv;
+
+  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
+  int next;
+
+  /* The flags supplied to argp_parse.  May be modified.  */
+  unsigned flags;
+
+  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
+     number of the current arg, starting at zero, and incremented after each
+     such call returns.  At all other times, this is the number of such
+     arguments that have been processed.  */
+  unsigned arg_num;
+
+  /* If non-zero, the index in ARGV of the first argument following a special
+     `--' argument (which prevents anything following being interpreted as an
+     option).  Only set once argument parsing has proceeded past this point. */
+  int quoted;
+
+  /* An arbitrary pointer passed in from the user.  */
+  void *input;
+  /* Values to pass to child parsers.  This vector will be the same length as
+     the number of children for the current parser.  */
+  void **child_inputs;
+
+  /* For the parser's use.  Initialized to 0.  */
+  void *hook;
+
+  /* The name used when printing messages.  This is initialized to ARGV[0],
+     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
+  char *name;
+
+  /* Streams used when argp prints something.  */
+  FILE *err_stream;            /* For errors; initialized to stderr. */
+  FILE *out_stream;            /* For information; initialized to stdout. */
+
+  void *pstate;                        /* Private, for use by argp.  */
+};
+\f
+/* Flags for argp_parse (note that the defaults are those that are
+   convenient for program command line parsing): */
+
+/* Don't ignore the first element of ARGV.  Normally (and always unless
+   ARGP_NO_ERRS is set) the first element of the argument vector is
+   skipped for option parsing purposes, as it corresponds to the program name
+   in a command line.  */
+#define ARGP_PARSE_ARGV0  0x01
+
+/* Don't print error messages for unknown options to stderr; unless this flag
+   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
+   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
+   assumption that silent exiting upon errors is bad behaviour).  */
+#define ARGP_NO_ERRS   0x02
+
+/* Don't parse any non-option args.  Normally non-option args are parsed by
+   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
+   as the value.  Since it's impossible to know which parse function wants to
+   handle it, each one is called in turn, until one returns 0 or an error
+   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
+   argp_parse returns prematurely (but with a return value of 0).  If all
+   args have been parsed without error, all parsing functions are called one
+   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
+   as the normal behavior is to stop parsing as soon as some argument can't
+   be handled.  */
+#define ARGP_NO_ARGS   0x04
+
+/* Parse options and arguments in the same order they occur on the command
+   line -- normally they're rearranged so that all options come first. */
+#define ARGP_IN_ORDER  0x08
+
+/* Don't provide the standard long option --help, which causes usage and
+      option help information to be output to stdout, and exit (0) called. */
+#define ARGP_NO_HELP   0x10
+
+/* Don't exit on errors (they may still result in error messages).  */
+#define ARGP_NO_EXIT   0x20
+
+/* Use the gnu getopt `long-only' rules for parsing arguments.  */
+#define ARGP_LONG_ONLY 0x40
+
+/* Turns off any message-printing/exiting options.  */
+#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
+
+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
+   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
+   index in ARGV of the first unparsed option is returned in it.  If an
+   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
+   routine returned a non-zero value, it is returned; otherwise 0 is
+   returned.  This function may also call exit unless the ARGP_NO_HELP flag
+   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
+extern error_t argp_parse (const struct argp *__restrict __argp,
+                          int __argc, char **__restrict __argv,
+                          unsigned __flags, int *__restrict __arg_index,
+                          void *__restrict __input);
+extern error_t __argp_parse (const struct argp *__restrict __argp,
+                            int __argc, char **__restrict __argv,
+                            unsigned __flags, int *__restrict __arg_index,
+                            void *__restrict __input);
+\f
+/* Global variables.  */
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   will print this string followed by a newline and exit (unless the
+   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
+extern const char *argp_program_version;
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   calls this function with a stream to print the version to and a pointer to
+   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
+   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
+                                         struct argp_state *__restrict
+                                         __state);
+
+/* If defined or set by the user program, it should point to string that is
+   the bug-reporting address for the program.  It will be printed by
+   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
+   standard help messages), embedded in a sentence that says something like
+   `Report bugs to ADDR.'.  */
+extern const char *argp_program_bug_address;
+
+/* The exit status that argp will use when exiting due to a parsing error.
+   If not defined or set by the user program, this defaults to EX_USAGE from
+   <sysexits.h>.  */
+extern error_t argp_err_exit_status;
+\f
+/* Flags for argp_help.  */
+#define ARGP_HELP_USAGE                0x01 /* a Usage: message. */
+#define ARGP_HELP_SHORT_USAGE  0x02 /*  " but don't actually print options. */
+#define ARGP_HELP_SEE          0x04 /* a `Try ... for more help' message. */
+#define ARGP_HELP_LONG         0x08 /* a long help message. */
+#define ARGP_HELP_PRE_DOC      0x10 /* doc string preceding long help.  */
+#define ARGP_HELP_POST_DOC     0x20 /* doc string following long help.  */
+#define ARGP_HELP_DOC          (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
+#define ARGP_HELP_BUG_ADDR     0x40 /* bug report address */
+#define ARGP_HELP_LONG_ONLY    0x80 /* modify output appropriately to
+                                       reflect ARGP_LONG_ONLY mode.  */
+
+/* These ARGP_HELP flags are only understood by argp_state_help.  */
+#define ARGP_HELP_EXIT_ERR     0x100 /* Call exit(1) instead of returning.  */
+#define ARGP_HELP_EXIT_OK      0x200 /* Call exit(0) instead of returning.  */
+
+/* The standard thing to do after a program command line parsing error, if an
+   error message has already been printed.  */
+#define ARGP_HELP_STD_ERR \
+  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do after a program command line parsing error, if no
+   more specific error message has been printed.  */
+#define ARGP_HELP_STD_USAGE \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do in response to a --help option.  */
+#define ARGP_HELP_STD_HELP \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
+   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
+
+/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
+   ARGP_HELP_*.  */
+extern void argp_help (const struct argp *__restrict __argp,
+                      FILE *__restrict __stream,
+                      unsigned __flags, char *__restrict __name);
+extern void __argp_help (const struct argp *__restrict __argp,
+                        FILE *__restrict __stream, unsigned __flags,
+                        char *__name);
+\f
+/* The following routines are intended to be called from within an argp
+   parsing routine (thus taking an argp_state structure as the first
+   argument).  They may or may not print an error message and exit, depending
+   on the flags in STATE -- in any case, the caller should be prepared for
+   them *not* to exit, and should return an appropiate error after calling
+   them.  [argp_usage & argp_error should probably be called argp_state_...,
+   but they're used often enough that they should be short]  */
+
+/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
+   from the set ARGP_HELP_*.  */
+extern void argp_state_help (const struct argp_state *__restrict __state,
+                            FILE *__restrict __stream,
+                            unsigned int __flags);
+extern void __argp_state_help (const struct argp_state *__restrict __state,
+                              FILE *__restrict __stream,
+                              unsigned int __flags);
+
+/* Possibly output the standard usage message for ARGP to stderr and exit.  */
+extern void argp_usage (const struct argp_state *__state);
+extern void __argp_usage (const struct argp_state *__state);
+
+/* If appropriate, print the printf string FMT and following args, preceded
+   by the program name and `:', to stderr, and followed by a `Try ... --help'
+   message, then exit (1).  */
+extern void argp_error (const struct argp_state *__restrict __state,
+                       const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
+extern void __argp_error (const struct argp_state *__restrict __state,
+                         const char *__restrict __fmt, ...)
+    _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
+
+/* Similar to the standard gnu error-reporting function error(), but will
+   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
+   to STATE->err_stream.  This is useful for argument parsing code that is
+   shared between program startup (when exiting is desired) and runtime
+   option parsing (when typically an error code is returned instead).  The
+   difference between this function and argp_error is that the latter is for
+   *parsing errors*, and the former is for other problems that occur during
+   parsing but don't reflect a (syntactic) problem with the input.  */
+extern void argp_failure (const struct argp_state *__restrict __state,
+                         int __status, int __errnum,
+                         const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
+extern void __argp_failure (const struct argp_state *__restrict __state,
+                           int __status, int __errnum,
+                           const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
+
+/* Returns true if the option OPT is a valid short option.  */
+extern int _option_is_short (const struct argp_option *__opt) __THROW;
+extern int __option_is_short (const struct argp_option *__opt) __THROW;
+
+/* Returns true if the option OPT is in fact the last (unused) entry in an
+   options array.  */
+extern int _option_is_end (const struct argp_option *__opt) __THROW;
+extern int __option_is_end (const struct argp_option *__opt) __THROW;
+
+/* Return the input field for ARGP in the parser corresponding to STATE; used
+   by the help routines.  */
+extern void *_argp_input (const struct argp *__restrict __argp,
+                         const struct argp_state *__restrict __state)
+     __THROW;
+extern void *__argp_input (const struct argp *__restrict __argp,
+                          const struct argp_state *__restrict __state)
+     __THROW;
+\f
+#ifdef __USE_EXTERN_INLINES
+
+# if !_LIBC
+#  define __argp_usage argp_usage
+#  define __argp_state_help argp_state_help
+#  define __option_is_short _option_is_short
+#  define __option_is_end _option_is_end
+# endif
+
+# ifndef ARGP_EI
+#  define ARGP_EI __extern_inline
+# endif
+
+ARGP_EI void
+__argp_usage (const struct argp_state *__state)
+{
+  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
+}
+
+ARGP_EI int
+__NTH (__option_is_short (const struct argp_option *__opt))
+{
+  if (__opt->flags & OPTION_DOC)
+    return 0;
+  else
+    {
+      int __key = __opt->key;
+      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
+    }
+}
+
+ARGP_EI int
+__NTH (__option_is_end (const struct argp_option *__opt))
+{
+  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
+}
+
+# if !_LIBC
+#  undef __argp_usage
+#  undef __argp_state_help
+#  undef __option_is_short
+#  undef __option_is_end
+# endif
+#endif /* Use extern inlines.  */
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* argp.h */
diff --git a/lib/libdss-include/argz.h b/lib/libdss-include/argz.h
new file mode 100644 (file)
index 0000000..c1bc5f7
--- /dev/null
@@ -0,0 +1,182 @@
+/* Routines for dealing with '\0' separated arg vectors.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARGZ_H
+#define _ARGZ_H        1
+
+#include <features.h>
+
+#define __need_error_t
+#include <errno.h>
+#include <string.h>            /* Need size_t, and strchr is called below.  */
+
+#ifndef __error_t_defined
+typedef int error_t;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in
+   ARGZ, and the total length in LEN.  If a memory allocation error occurs,
+   ENOMEM is returned, otherwise 0.  The result can be destroyed using free. */
+extern error_t __argz_create (char *const __argv[], char **__restrict __argz,
+                             size_t *__restrict __len) __THROW;
+extern error_t argz_create (char *const __argv[], char **__restrict __argz,
+                           size_t *__restrict __len) __THROW;
+
+/* Make a '\0' separated arg vector from a SEP separated list in
+   STRING, returning it in ARGZ, and the total length in LEN.  If a
+   memory allocation error occurs, ENOMEM is returned, otherwise 0.
+   The result can be destroyed using free.  */
+extern error_t __argz_create_sep (const char *__restrict __string,
+                                 int __sep, char **__restrict __argz,
+                                 size_t *__restrict __len) __THROW;
+extern error_t argz_create_sep (const char *__restrict __string,
+                               int __sep, char **__restrict __argz,
+                               size_t *__restrict __len) __THROW;
+
+/* Returns the number of strings in ARGZ.  */
+extern size_t __argz_count (const char *__argz, size_t __len)
+     __THROW __attribute_pure__;
+extern size_t argz_count (const char *__argz, size_t __len)
+     __THROW __attribute_pure__;
+
+/* Puts pointers to each string in ARGZ into ARGV, which must be large enough
+   to hold them all.  */
+extern void __argz_extract (const char *__restrict __argz, size_t __len,
+                           char **__restrict __argv) __THROW;
+extern void argz_extract (const char *__restrict __argz, size_t __len,
+                         char **__restrict __argv) __THROW;
+
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
+extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
+
+/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN.  */
+extern error_t __argz_append (char **__restrict __argz,
+                             size_t *__restrict __argz_len,
+                             const char *__restrict __buf, size_t __buf_len)
+     __THROW;
+extern error_t argz_append (char **__restrict __argz,
+                           size_t *__restrict __argz_len,
+                           const char *__restrict __buf, size_t __buf_len)
+     __THROW;
+
+/* Append STR to the argz vector in ARGZ & ARGZ_LEN.  */
+extern error_t __argz_add (char **__restrict __argz,
+                          size_t *__restrict __argz_len,
+                          const char *__restrict __str) __THROW;
+extern error_t argz_add (char **__restrict __argz,
+                        size_t *__restrict __argz_len,
+                        const char *__restrict __str) __THROW;
+
+/* Append SEP separated list in STRING to the argz vector in ARGZ &
+   ARGZ_LEN.  */
+extern error_t __argz_add_sep (char **__restrict __argz,
+                              size_t *__restrict __argz_len,
+                              const char *__restrict __string, int __delim)
+     __THROW;
+extern error_t argz_add_sep (char **__restrict __argz,
+                            size_t *__restrict __argz_len,
+                            const char *__restrict __string, int __delim)
+     __THROW;
+
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there.  */
+extern void __argz_delete (char **__restrict __argz,
+                          size_t *__restrict __argz_len,
+                          char *__restrict __entry) __THROW;
+extern void argz_delete (char **__restrict __argz,
+                        size_t *__restrict __argz_len,
+                        char *__restrict __entry) __THROW;
+
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
+   existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
+   Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
+   ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ.  If BEFORE is not
+   in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
+   ARGZ, ENOMEM is returned, else 0.  */
+extern error_t __argz_insert (char **__restrict __argz,
+                             size_t *__restrict __argz_len,
+                             char *__restrict __before,
+                             const char *__restrict __entry) __THROW;
+extern error_t argz_insert (char **__restrict __argz,
+                           size_t *__restrict __argz_len,
+                           char *__restrict __before,
+                           const char *__restrict __entry) __THROW;
+
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
+   ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+   incremented by number of replacements performed.  */
+extern error_t __argz_replace (char **__restrict __argz,
+                              size_t *__restrict __argz_len,
+                              const char *__restrict __str,
+                              const char *__restrict __with,
+                              unsigned int *__restrict __replace_count);
+extern error_t argz_replace (char **__restrict __argz,
+                            size_t *__restrict __argz_len,
+                            const char *__restrict __str,
+                            const char *__restrict __with,
+                            unsigned int *__restrict __replace_count);
+\f
+/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
+   are no more.  If entry is NULL, then the first entry is returned.  This
+   behavior allows two convenient iteration styles:
+
+    char *entry = 0;
+    while ((entry = argz_next (argz, argz_len, entry)))
+      ...;
+
+   or
+
+    char *entry;
+    for (entry = argz; entry; entry = argz_next (argz, argz_len, entry))
+      ...;
+*/
+extern char *__argz_next (const char *__restrict __argz, size_t __argz_len,
+                         const char *__restrict __entry) __THROW;
+extern char *argz_next (const char *__restrict __argz, size_t __argz_len,
+                       const char *__restrict __entry) __THROW;
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline char *
+__NTH (__argz_next (const char *__argz, size_t __argz_len,
+                   const char *__entry))
+{
+  if (__entry)
+    {
+      if (__entry < __argz + __argz_len)
+       __entry = strchr (__entry, '\0') + 1;
+
+      return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry;
+    }
+  else
+    return __argz_len > 0 ? (char *) __argz : 0;
+}
+__extern_inline char *
+__NTH (argz_next (const char *__argz, size_t __argz_len,
+                 const char *__entry))
+{
+  return __argz_next (__argz, __argz_len, __entry);
+}
+#endif /* Use extern inlines.  */
+
+__END_DECLS
+
+#endif /* argz.h */
diff --git a/lib/libdss-include/arpa/ftp.h b/lib/libdss-include/arpa/ftp.h
new file mode 100644 (file)
index 0000000..e5b340d
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ftp.h       8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _ARPA_FTP_H
+#define        _ARPA_FTP_H 1
+
+/* Definitions for FTP; see RFC-765. */
+
+/*
+ * Reply codes.
+ */
+#define PRELIM         1       /* positive preliminary */
+#define COMPLETE       2       /* positive completion */
+#define CONTINUE       3       /* positive intermediate */
+#define TRANSIENT      4       /* transient negative completion */
+#define ERROR          5       /* permanent negative completion */
+
+/*
+ * Type codes
+ */
+#define        TYPE_A          1       /* ASCII */
+#define        TYPE_E          2       /* EBCDIC */
+#define        TYPE_I          3       /* image */
+#define        TYPE_L          4       /* local byte size */
+
+#ifdef FTP_NAMES
+char *typenames[] =  {"0", "ASCII", "EBCDIC", "Image", "Local" };
+#endif
+
+/*
+ * Form codes
+ */
+#define        FORM_N          1       /* non-print */
+#define        FORM_T          2       /* telnet format effectors */
+#define        FORM_C          3       /* carriage control (ASA) */
+#ifdef FTP_NAMES
+char *formnames[] =  {"0", "Nonprint", "Telnet", "Carriage-control" };
+#endif
+
+/*
+ * Structure codes
+ */
+#define        STRU_F          1       /* file (no record structure) */
+#define        STRU_R          2       /* record structure */
+#define        STRU_P          3       /* page structure */
+#ifdef FTP_NAMES
+char *strunames[] =  {"0", "File", "Record", "Page" };
+#endif
+
+/*
+ * Mode types
+ */
+#define        MODE_S          1       /* stream */
+#define        MODE_B          2       /* block */
+#define        MODE_C          3       /* compressed */
+#ifdef FTP_NAMES
+char *modenames[] =  {"0", "Stream", "Block", "Compressed" };
+#endif
+
+/*
+ * Record Tokens
+ */
+#define        REC_ESC         '\377'  /* Record-mode Escape */
+#define        REC_EOR         '\001'  /* Record-mode End-of-Record */
+#define REC_EOF                '\002'  /* Record-mode End-of-File */
+
+/*
+ * Block Header
+ */
+#define        BLK_EOR         0x80    /* Block is End-of-Record */
+#define        BLK_EOF         0x40    /* Block is End-of-File */
+#define BLK_ERRORS     0x20    /* Block is suspected of containing errors */
+#define        BLK_RESTART     0x10    /* Block is Restart Marker */
+
+#define        BLK_BYTECOUNT   2       /* Bytes in this block */
+
+#endif /* arpa/ftp.h */
diff --git a/lib/libdss-include/arpa/inet.h b/lib/libdss-include/arpa/inet.h
new file mode 100644 (file)
index 0000000..94d3330
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARPA_INET_H
+#define        _ARPA_INET_H    1
+
+#include <features.h>
+#include <netinet/in.h>                /* To define `struct in_addr'.  */
+
+/* Type for length arguments in socket calls.  */
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* Convert Internet host address from numbers-and-dots notation in CP
+   into binary data in network byte order.  */
+extern in_addr_t inet_addr (const char *__cp) __THROW;
+
+/* Return the local host address part of the Internet address in IN.  */
+extern in_addr_t inet_lnaof (struct in_addr __in) __THROW;
+
+/* Make Internet host address in network byte order by combining the
+   network number NET with the local address HOST.  */
+extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
+     __THROW;
+
+/* Return network number part of the Internet address IN.  */
+extern in_addr_t inet_netof (struct in_addr __in) __THROW;
+
+/* Extract the network number in network byte order from the address
+   in numbers-and-dots natation starting at CP.  */
+extern in_addr_t inet_network (const char *__cp) __THROW;
+
+/* Convert Internet number in IN to ASCII representation.  The return value
+   is a pointer to an internal array containing the string.  */
+extern char *inet_ntoa (struct in_addr __in) __THROW;
+
+/* Convert from presentation format of an Internet number in buffer
+   starting at CP to the binary network format and store result for
+   interface type AF in buffer starting at BUF.  */
+extern int inet_pton (int __af, const char *__restrict __cp,
+                     void *__restrict __buf) __THROW;
+
+/* Convert a Internet address in binary network format for interface
+   type AF in buffer starting at CP to presentation form and place
+   result in buffer of length LEN astarting at BUF.  */
+extern const char *inet_ntop (int __af, const void *__restrict __cp,
+                             char *__restrict __buf, socklen_t __len)
+     __THROW;
+
+
+/* The following functions are not part of XNS 5.2.  */
+#ifdef __USE_MISC
+/* Convert Internet host address from numbers-and-dots notation in CP
+   into binary data and store the result in the structure INP.  */
+extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW;
+
+/* Format a network number NET into presentation format and place result
+   in buffer starting at BUF with length of LEN bytes.  */
+extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF in buffer starting at
+   CP to presentation format.  The result will specifiy BITS bits of
+   the number.  */
+extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
+                           char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF from presentation in
+   buffer starting at CP to network format and store result int
+   buffer starting at BUF of size LEN.  */
+extern int inet_net_pton (int __af, const char *__cp,
+                         void *__buf, size_t __len) __THROW;
+
+/* Convert ASCII representation in hexadecimal form of the Internet
+   address to binary form and place result in buffer of length LEN
+   starting at BUF.  */
+extern unsigned int inet_nsap_addr (const char *__cp,
+                                   unsigned char *__buf, int __len) __THROW;
+
+/* Convert internet address in binary form in LEN bytes starting at CP
+   a presentation form and place result in BUF.  */
+extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
+                            char *__buf) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* arpa/inet.h */
diff --git a/lib/libdss-include/arpa/nameser.h b/lib/libdss-include/arpa/nameser.h
new file mode 100644 (file)
index 0000000..fb8513b
--- /dev/null
@@ -0,0 +1,535 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     $BINDId: nameser.h,v 8.37 2000/03/30 21:16:49 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_H_
+#define _ARPA_NAMESER_H_
+
+/*! \file */
+
+#define BIND_4_COMPAT
+
+#include <sys/param.h>
+#if (!defined(BSD)) || (BSD < 199306)
+# include <sys/bitypes.h>
+#else
+# include <sys/types.h>
+#endif
+#include <sys/cdefs.h>
+
+/*%
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__NAMESER > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your libbind.a
+ * contains a new enough lib/nameser/ to support the feature you need.
+ */
+
+#define __NAMESER      19991006        /*%< New interface version stamp. */
+/*
+ * Define constants based on RFC 883, RFC 1034, RFC 1035
+ */
+#define NS_PACKETSZ    512     /*%< default UDP packet size */
+#define NS_MAXDNAME    1025    /*%< maximum domain name */
+#define NS_MAXMSG      65535   /*%< maximum message size */
+#define NS_MAXCDNAME   255     /*%< maximum compressed domain name */
+#define NS_MAXLABEL    63      /*%< maximum length of domain label */
+#define NS_HFIXEDSZ    12      /*%< #/bytes of fixed data in header */
+#define NS_QFIXEDSZ    4       /*%< #/bytes of fixed data in query */
+#define NS_RRFIXEDSZ   10      /*%< #/bytes of fixed data in r record */
+#define NS_INT32SZ     4       /*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ     2       /*%< #/bytes of data in a u_int16_t */
+#define NS_INT8SZ      1       /*%< #/bytes of data in a u_int8_t */
+#define NS_INADDRSZ    4       /*%< IPv4 T_A */
+#define NS_IN6ADDRSZ   16      /*%< IPv6 T_AAAA */
+#define NS_CMPRSFLGS   0xc0    /*%< Flag bits indicating name compression. */
+#define NS_DEFAULTPORT 53      /*%< For both TCP and UDP. */
+/*
+ * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
+ * in synch with it.
+ */
+typedef enum __ns_sect {
+       ns_s_qd = 0,            /*%< Query: Question. */
+       ns_s_zn = 0,            /*%< Update: Zone. */
+       ns_s_an = 1,            /*%< Query: Answer. */
+       ns_s_pr = 1,            /*%< Update: Prerequisites. */
+       ns_s_ns = 2,            /*%< Query: Name servers. */
+       ns_s_ud = 2,            /*%< Update: Update. */
+       ns_s_ar = 3,            /*%< Query|Update: Additional records. */
+       ns_s_max = 4
+} ns_sect;
+
+/*%
+ * This is a message handle.  It is caller allocated and has no dynamic data.
+ * This structure is intended to be opaque to all but ns_parse.c, thus the
+ * leading _'s on the member names.  Use the accessor functions, not the _'s.
+ */
+typedef struct __ns_msg {
+       const u_char    *_msg, *_eom;
+       u_int16_t       _id, _flags, _counts[ns_s_max];
+       const u_char    *_sections[ns_s_max];
+       ns_sect         _sect;
+       int             _rrnum;
+       const u_char    *_msg_ptr;
+} ns_msg;
+
+/* Private data structure - do not use from outside library. */
+struct _ns_flagdata {  int mask, shift;  };
+extern const struct _ns_flagdata _ns_flagdata[];
+
+/* Accessor macros - this is part of the public interface. */
+
+#define ns_msg_id(handle) ((handle)._id + 0)
+#define ns_msg_base(handle) ((handle)._msg + 0)
+#define ns_msg_end(handle) ((handle)._eom + 0)
+#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
+#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
+
+/*%
+ * This is a parsed record.  It is caller allocated and has no dynamic data.
+ */
+typedef        struct __ns_rr {
+       char            name[NS_MAXDNAME];
+       u_int16_t       type;
+       u_int16_t       rr_class;
+       u_int32_t       ttl;
+       u_int16_t       rdlength;
+       const u_char *  rdata;
+} ns_rr;
+
+/* Accessor macros - this is part of the public interface. */
+#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
+#define ns_rr_type(rr) ((ns_type)((rr).type + 0))
+#define ns_rr_class(rr)        ((ns_class)((rr).rr_class + 0))
+#define ns_rr_ttl(rr)  ((rr).ttl + 0)
+#define ns_rr_rdlen(rr)        ((rr).rdlength + 0)
+#define ns_rr_rdata(rr)        ((rr).rdata + 0)
+
+/*%
+ * These don't have to be in the same order as in the packet flags word,
+ * and they can even overlap in some cases, but they will need to be kept
+ * in synch with ns_parse.c:ns_flagdata[].
+ */
+typedef enum __ns_flag {
+       ns_f_qr,                /*%< Question/Response. */
+       ns_f_opcode,            /*%< Operation code. */
+       ns_f_aa,                /*%< Authoritative Answer. */
+       ns_f_tc,                /*%< Truncation occurred. */
+       ns_f_rd,                /*%< Recursion Desired. */
+       ns_f_ra,                /*%< Recursion Available. */
+       ns_f_z,                 /*%< MBZ. */
+       ns_f_ad,                /*%< Authentic Data (DNSSEC). */
+       ns_f_cd,                /*%< Checking Disabled (DNSSEC). */
+       ns_f_rcode,             /*%< Response code. */
+       ns_f_max
+} ns_flag;
+
+/*%
+ * Currently defined opcodes.
+ */
+typedef enum __ns_opcode {
+       ns_o_query = 0,         /*%< Standard query. */
+       ns_o_iquery = 1,        /*%< Inverse query (deprecated/unsupported). */
+       ns_o_status = 2,        /*%< Name server status query (unsupported). */
+                               /* Opcode 3 is undefined/reserved. */
+       ns_o_notify = 4,        /*%< Zone change notification. */
+       ns_o_update = 5,        /*%< Zone update message. */
+       ns_o_max = 6
+} ns_opcode;
+
+/*%
+ * Currently defined response codes.
+ */
+typedef        enum __ns_rcode {
+       ns_r_noerror = 0,       /*%< No error occurred. */
+       ns_r_formerr = 1,       /*%< Format error. */
+       ns_r_servfail = 2,      /*%< Server failure. */
+       ns_r_nxdomain = 3,      /*%< Name error. */
+       ns_r_notimpl = 4,       /*%< Unimplemented. */
+       ns_r_refused = 5,       /*%< Operation refused. */
+       /* these are for BIND_UPDATE */
+       ns_r_yxdomain = 6,      /*%< Name exists */
+       ns_r_yxrrset = 7,       /*%< RRset exists */
+       ns_r_nxrrset = 8,       /*%< RRset does not exist */
+       ns_r_notauth = 9,       /*%< Not authoritative for zone */
+       ns_r_notzone = 10,      /*%< Zone of record different from zone section */
+       ns_r_max = 11,
+       /* The following are EDNS extended rcodes */
+       ns_r_badvers = 16,
+       /* The following are TSIG errors */
+       ns_r_badsig = 16,
+       ns_r_badkey = 17,
+       ns_r_badtime = 18
+} ns_rcode;
+
+/* BIND_UPDATE */
+typedef enum __ns_update_operation {
+       ns_uop_delete = 0,
+       ns_uop_add = 1,
+       ns_uop_max = 2
+} ns_update_operation;
+
+/*%
+ * This structure is used for TSIG authenticated messages
+ */
+struct ns_tsig_key {
+        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
+        unsigned char *data;
+        int len;
+};
+typedef struct ns_tsig_key ns_tsig_key;
+
+/*%
+ * This structure is used for TSIG authenticated TCP messages
+ */
+struct ns_tcp_tsig_state {
+       int counter;
+       struct dst_key *key;
+       void *ctx;
+       unsigned char sig[NS_PACKETSZ];
+       int siglen;
+};
+typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
+
+#define NS_TSIG_FUDGE 300
+#define NS_TSIG_TCP_COUNT 100
+#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
+
+#define NS_TSIG_ERROR_NO_TSIG -10
+#define NS_TSIG_ERROR_NO_SPACE -11
+#define NS_TSIG_ERROR_FORMERR -12
+
+/*%
+ * Currently defined type values for resources and queries.
+ */
+typedef enum __ns_type {
+       ns_t_invalid = 0,       /*%< Cookie. */
+       ns_t_a = 1,             /*%< Host address. */
+       ns_t_ns = 2,            /*%< Authoritative server. */
+       ns_t_md = 3,            /*%< Mail destination. */
+       ns_t_mf = 4,            /*%< Mail forwarder. */
+       ns_t_cname = 5,         /*%< Canonical name. */
+       ns_t_soa = 6,           /*%< Start of authority zone. */
+       ns_t_mb = 7,            /*%< Mailbox domain name. */
+       ns_t_mg = 8,            /*%< Mail group member. */
+       ns_t_mr = 9,            /*%< Mail rename name. */
+       ns_t_null = 10,         /*%< Null resource record. */
+       ns_t_wks = 11,          /*%< Well known service. */
+       ns_t_ptr = 12,          /*%< Domain name pointer. */
+       ns_t_hinfo = 13,        /*%< Host information. */
+       ns_t_minfo = 14,        /*%< Mailbox information. */
+       ns_t_mx = 15,           /*%< Mail routing information. */
+       ns_t_txt = 16,          /*%< Text strings. */
+       ns_t_rp = 17,           /*%< Responsible person. */
+       ns_t_afsdb = 18,        /*%< AFS cell database. */
+       ns_t_x25 = 19,          /*%< X_25 calling address. */
+       ns_t_isdn = 20,         /*%< ISDN calling address. */
+       ns_t_rt = 21,           /*%< Router. */
+       ns_t_nsap = 22,         /*%< NSAP address. */
+       ns_t_nsap_ptr = 23,     /*%< Reverse NSAP lookup (deprecated). */
+       ns_t_sig = 24,          /*%< Security signature. */
+       ns_t_key = 25,          /*%< Security key. */
+       ns_t_px = 26,           /*%< X.400 mail mapping. */
+       ns_t_gpos = 27,         /*%< Geographical position (withdrawn). */
+       ns_t_aaaa = 28,         /*%< Ip6 Address. */
+       ns_t_loc = 29,          /*%< Location Information. */
+       ns_t_nxt = 30,          /*%< Next domain (security). */
+       ns_t_eid = 31,          /*%< Endpoint identifier. */
+       ns_t_nimloc = 32,       /*%< Nimrod Locator. */
+       ns_t_srv = 33,          /*%< Server Selection. */
+       ns_t_atma = 34,         /*%< ATM Address */
+       ns_t_naptr = 35,        /*%< Naming Authority PoinTeR */
+       ns_t_kx = 36,           /*%< Key Exchange */
+       ns_t_cert = 37,         /*%< Certification record */
+       ns_t_a6 = 38,           /*%< IPv6 address (deprecated, use ns_t_aaaa) */
+       ns_t_dname = 39,        /*%< Non-terminal DNAME (for IPv6) */
+       ns_t_sink = 40,         /*%< Kitchen sink (experimentatl) */
+       ns_t_opt = 41,          /*%< EDNS0 option (meta-RR) */
+       ns_t_apl = 42,          /*%< Address prefix list (RFC3123) */
+       ns_t_tkey = 249,        /*%< Transaction key */
+       ns_t_tsig = 250,        /*%< Transaction signature. */
+       ns_t_ixfr = 251,        /*%< Incremental zone transfer. */
+       ns_t_axfr = 252,        /*%< Transfer zone of authority. */
+       ns_t_mailb = 253,       /*%< Transfer mailbox records. */
+       ns_t_maila = 254,       /*%< Transfer mail agent records. */
+       ns_t_any = 255,         /*%< Wildcard match. */
+       ns_t_zxfr = 256,        /*%< BIND-specific, nonstandard. */
+       ns_t_max = 65536
+} ns_type;
+
+/* Exclusively a QTYPE? (not also an RTYPE) */
+#define        ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
+                     (t) == ns_t_mailb || (t) == ns_t_maila)
+/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
+#define        ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
+/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
+#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
+#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
+#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
+                      (t) == ns_t_zxfr)
+
+/*%
+ * Values for class field
+ */
+typedef enum __ns_class {
+       ns_c_invalid = 0,       /*%< Cookie. */
+       ns_c_in = 1,            /*%< Internet. */
+       ns_c_2 = 2,             /*%< unallocated/unsupported. */
+       ns_c_chaos = 3,         /*%< MIT Chaos-net. */
+       ns_c_hs = 4,            /*%< MIT Hesiod. */
+       /* Query class values which do not appear in resource records */
+       ns_c_none = 254,        /*%< for prereq. sections in update requests */
+       ns_c_any = 255,         /*%< Wildcard match. */
+       ns_c_max = 65536
+} ns_class;
+
+/* DNSSEC constants. */
+
+typedef enum __ns_key_types {
+       ns_kt_rsa = 1,          /*%< key type RSA/MD5 */
+       ns_kt_dh  = 2,          /*%< Diffie Hellman */
+       ns_kt_dsa = 3,          /*%< Digital Signature Standard (MANDATORY) */
+       ns_kt_private = 254     /*%< Private key type starts with OID */
+} ns_key_types;
+
+typedef enum __ns_cert_types {
+       cert_t_pkix = 1,        /*%< PKIX (X.509v3) */
+       cert_t_spki = 2,        /*%< SPKI */
+       cert_t_pgp  = 3,        /*%< PGP */
+       cert_t_url  = 253,      /*%< URL private type */
+       cert_t_oid  = 254       /*%< OID private type */
+} ns_cert_types;
+
+/* Flags field of the KEY RR rdata. */
+#define        NS_KEY_TYPEMASK         0xC000  /*%< Mask for "type" bits */
+#define        NS_KEY_TYPE_AUTH_CONF   0x0000  /*%< Key usable for both */
+#define        NS_KEY_TYPE_CONF_ONLY   0x8000  /*%< Key usable for confidentiality */
+#define        NS_KEY_TYPE_AUTH_ONLY   0x4000  /*%< Key usable for authentication */
+#define        NS_KEY_TYPE_NO_KEY      0xC000  /*%< No key usable for either; no key */
+/* The type bits can also be interpreted independently, as single bits: */
+#define        NS_KEY_NO_AUTH          0x8000  /*%< Key unusable for authentication */
+#define        NS_KEY_NO_CONF          0x4000  /*%< Key unusable for confidentiality */
+#define        NS_KEY_RESERVED2        0x2000  /* Security is *mandatory* if bit=0 */
+#define        NS_KEY_EXTENDED_FLAGS   0x1000  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED4        0x0800  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED5        0x0400  /*%< reserved - must be zero */
+#define        NS_KEY_NAME_TYPE        0x0300  /*%< these bits determine the type */
+#define        NS_KEY_NAME_USER        0x0000  /*%< key is assoc. with user */
+#define        NS_KEY_NAME_ENTITY      0x0200  /*%< key is assoc. with entity eg host */
+#define        NS_KEY_NAME_ZONE        0x0100  /*%< key is zone key */
+#define        NS_KEY_NAME_RESERVED    0x0300  /*%< reserved meaning */
+#define        NS_KEY_RESERVED8        0x0080  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED9        0x0040  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED10       0x0020  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED11       0x0010  /*%< reserved - must be zero */
+#define        NS_KEY_SIGNATORYMASK    0x000F  /*%< key can sign RR's of same name */
+#define        NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
+                                 NS_KEY_RESERVED4 | \
+                                 NS_KEY_RESERVED5 | \
+                                 NS_KEY_RESERVED8 | \
+                                 NS_KEY_RESERVED9 | \
+                                 NS_KEY_RESERVED10 | \
+                                 NS_KEY_RESERVED11 )
+#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */
+/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
+#define        NS_ALG_MD5RSA           1       /*%< MD5 with RSA */
+#define        NS_ALG_DH               2       /*%< Diffie Hellman KEY */
+#define        NS_ALG_DSA              3       /*%< DSA KEY */
+#define        NS_ALG_DSS              NS_ALG_DSA
+#define        NS_ALG_EXPIRE_ONLY      253     /*%< No alg, no security */
+#define        NS_ALG_PRIVATE_OID      254     /*%< Key begins with OID giving alg */
+/* Protocol values  */
+/* value 0 is reserved */
+#define NS_KEY_PROT_TLS         1
+#define NS_KEY_PROT_EMAIL       2
+#define NS_KEY_PROT_DNSSEC      3
+#define NS_KEY_PROT_IPSEC       4
+#define NS_KEY_PROT_ANY                255
+
+/* Signatures */
+#define        NS_MD5RSA_MIN_BITS       512    /*%< Size of a mod or exp in bits */
+#define        NS_MD5RSA_MAX_BITS      4096
+       /* Total of binary mod and exp */
+#define        NS_MD5RSA_MAX_BYTES     ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
+       /* Max length of text sig block */
+#define        NS_MD5RSA_MAX_BASE64    (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
+#define NS_MD5RSA_MIN_SIZE     ((NS_MD5RSA_MIN_BITS+7)/8)
+#define NS_MD5RSA_MAX_SIZE     ((NS_MD5RSA_MAX_BITS+7)/8)
+
+#define NS_DSA_SIG_SIZE         41
+#define NS_DSA_MIN_SIZE         213
+#define NS_DSA_MAX_BYTES        405
+
+/* Offsets into SIG record rdata to find various values */
+#define        NS_SIG_TYPE     0       /*%< Type flags */
+#define        NS_SIG_ALG      2       /*%< Algorithm */
+#define        NS_SIG_LABELS   3       /*%< How many labels in name */
+#define        NS_SIG_OTTL     4       /*%< Original TTL */
+#define        NS_SIG_EXPIR    8       /*%< Expiration time */
+#define        NS_SIG_SIGNED   12      /*%< Signature time */
+#define        NS_SIG_FOOT     16      /*%< Key footprint */
+#define        NS_SIG_SIGNER   18      /*%< Domain name of who signed it */
+/* How RR types are represented as bit-flags in NXT records */
+#define        NS_NXT_BITS 8
+#define        NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
+#define NS_NXT_MAX 127
+
+/*%
+ * EDNS0 extended flags and option codes, host order.
+ */
+#define NS_OPT_DNSSEC_OK        0x8000U
+#define NS_OPT_NSID            3
+
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_GET16(s, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (s) = ((u_int16_t)t_cp[0] << 8) \
+           | ((u_int16_t)t_cp[1]) \
+           ; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_GET32(l, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (l) = ((u_int32_t)t_cp[0] << 24) \
+           | ((u_int32_t)t_cp[1] << 16) \
+           | ((u_int32_t)t_cp[2] << 8) \
+           | ((u_int32_t)t_cp[3]) \
+           ; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+#define NS_PUT16(s, cp) do { \
+       u_int16_t t_s = (u_int16_t)(s); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_s >> 8; \
+       *t_cp   = t_s; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_PUT32(l, cp) do { \
+       u_int32_t t_l = (u_int32_t)(l); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_l >> 24; \
+       *t_cp++ = t_l >> 16; \
+       *t_cp++ = t_l >> 8; \
+       *t_cp   = t_l; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+__BEGIN_DECLS
+int            ns_msg_getflag (ns_msg, int) __THROW;
+u_int          ns_get16 (const u_char *) __THROW;
+u_long         ns_get32 (const u_char *) __THROW;
+void           ns_put16 (u_int, u_char *) __THROW;
+void           ns_put32 (u_long, u_char *) __THROW;
+int            ns_initparse (const u_char *, int, ns_msg *) __THROW;
+int            ns_skiprr (const u_char *, const u_char *, ns_sect, int)
+     __THROW;
+int            ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __THROW;
+int            ns_sprintrr (const ns_msg *, const ns_rr *,
+                            const char *, const char *, char *, size_t)
+     __THROW;
+int            ns_sprintrrf (const u_char *, size_t, const char *,
+                             ns_class, ns_type, u_long, const u_char *,
+                             size_t, const char *, const char *,
+                             char *, size_t) __THROW;
+int            ns_format_ttl (u_long, char *, size_t) __THROW;
+int            ns_parse_ttl (const char *, u_long *) __THROW;
+u_int32_t      ns_datetosecs (const char *, int *) __THROW;
+int            ns_name_ntol (const u_char *, u_char *, size_t) __THROW;
+int            ns_name_ntop (const u_char *, char *, size_t) __THROW;
+int            ns_name_pton (const char *, u_char *, size_t) __THROW;
+int            ns_name_unpack (const u_char *, const u_char *,
+                               const u_char *, u_char *, size_t) __THROW;
+int            ns_name_pack (const u_char *, u_char *, int,
+                             const u_char **, const u_char **) __THROW;
+int            ns_name_uncompress (const u_char *, const u_char *,
+                                   const u_char *, char *, size_t) __THROW;
+int            ns_name_compress (const char *, u_char *, size_t,
+                                 const u_char **, const u_char **) __THROW;
+int            ns_name_skip (const u_char **, const u_char *) __THROW;
+void           ns_name_rollback (const u_char *, const u_char **,
+                                 const u_char **) __THROW;
+int            ns_sign (u_char *, int *, int, int, void *,
+                        const u_char *, int, u_char *, int *, time_t) __THROW;
+int            ns_sign2 (u_char *, int *, int, int, void *,
+                         const u_char *, int, u_char *, int *, time_t,
+                         u_char **, u_char **) __THROW;
+int            ns_sign_tcp (u_char *, int *, int, int,
+                            ns_tcp_tsig_state *, int) __THROW;
+int            ns_sign_tcp2 (u_char *, int *, int, int,
+                             ns_tcp_tsig_state *, int,
+                             u_char **, u_char **) __THROW;
+int            ns_sign_tcp_init (void *, const u_char *, int,
+                                 ns_tcp_tsig_state *) __THROW;
+u_char         *ns_find_tsig (u_char *, u_char *) __THROW;
+int            ns_verify (u_char *, int *, void *, const u_char *, int,
+                          u_char *, int *, time_t *, int) __THROW;
+int            ns_verify_tcp (u_char *, int *, ns_tcp_tsig_state *, int)
+     __THROW;
+int            ns_verify_tcp_init (void *, const u_char *, int,
+                                   ns_tcp_tsig_state *) __THROW;
+int            ns_samedomain (const char *, const char *) __THROW;
+int            ns_subdomain (const char *, const char *) __THROW;
+int            ns_makecanon (const char *, char *, size_t) __THROW;
+int            ns_samename (const char *, const char *) __THROW;
+__END_DECLS
+
+#ifdef BIND_4_COMPAT
+#include <arpa/nameser_compat.h>
+#endif
+
+#endif /* !_ARPA_NAMESER_H_ */
+/*! \file */
diff --git a/lib/libdss-include/arpa/nameser_compat.h b/lib/libdss-include/arpa/nameser_compat.h
new file mode 100644 (file)
index 0000000..d59c9e4
--- /dev/null
@@ -0,0 +1,187 @@
+/* Copyright (c) 1983, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*%
+ *      from nameser.h 8.1 (Berkeley) 6/2/93
+ *     $BINDId: nameser_compat.h,v 8.11 1999/01/02 08:00:58 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_COMPAT_
+#define        _ARPA_NAMESER_COMPAT_
+
+#define        __BIND          19950621        /*%< (DEAD) interface version stamp. */
+
+#include <endian.h>
+
+/*%
+ * Structure for query header.  The order of the fields is machine- and
+ * compiler-dependent, depending on the byte/bit order and the layout
+ * of bit fields.  We use bit fields only in int variables, as this
+ * is all ANSI requires.  This requires a somewhat confusing rearrangement.
+ */
+
+typedef struct {
+       unsigned        id :16;         /*%< query identification number */
+#if BYTE_ORDER == BIG_ENDIAN
+                       /* fields in third byte */
+       unsigned        qr: 1;          /*%< response flag */
+       unsigned        opcode: 4;      /*%< purpose of message */
+       unsigned        aa: 1;          /*%< authoritive answer */
+       unsigned        tc: 1;          /*%< truncated message */
+       unsigned        rd: 1;          /*%< recursion desired */
+                       /* fields in fourth byte */
+       unsigned        ra: 1;          /*%< recursion available */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        rcode :4;       /*%< response code */
+#endif
+#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
+                       /* fields in third byte */
+       unsigned        rd :1;          /*%< recursion desired */
+       unsigned        tc :1;          /*%< truncated message */
+       unsigned        aa :1;          /*%< authoritive answer */
+       unsigned        opcode :4;      /*%< purpose of message */
+       unsigned        qr :1;          /*%< response flag */
+                       /* fields in fourth byte */
+       unsigned        rcode :4;       /*%< response code */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ra :1;          /*%< recursion available */
+#endif
+                       /* remaining bytes */
+       unsigned        qdcount :16;    /*%< number of question entries */
+       unsigned        ancount :16;    /*%< number of answer entries */
+       unsigned        nscount :16;    /*%< number of authority entries */
+       unsigned        arcount :16;    /*%< number of resource entries */
+} HEADER;
+
+#define PACKETSZ       NS_PACKETSZ
+#define MAXDNAME       NS_MAXDNAME
+#define MAXCDNAME      NS_MAXCDNAME
+#define MAXLABEL       NS_MAXLABEL
+#define        HFIXEDSZ        NS_HFIXEDSZ
+#define QFIXEDSZ       NS_QFIXEDSZ
+#define RRFIXEDSZ      NS_RRFIXEDSZ
+#define        INT32SZ         NS_INT32SZ
+#define        INT16SZ         NS_INT16SZ
+#define INT8SZ         NS_INT8SZ
+#define        INADDRSZ        NS_INADDRSZ
+#define        IN6ADDRSZ       NS_IN6ADDRSZ
+#define        INDIR_MASK      NS_CMPRSFLGS
+#define NAMESERVER_PORT        NS_DEFAULTPORT
+
+#define S_ZONE         ns_s_zn
+#define S_PREREQ       ns_s_pr
+#define S_UPDATE       ns_s_ud
+#define S_ADDT         ns_s_ar
+
+#define QUERY          ns_o_query
+#define IQUERY         ns_o_iquery
+#define STATUS         ns_o_status
+#define        NS_NOTIFY_OP    ns_o_notify
+#define        NS_UPDATE_OP    ns_o_update
+
+#define NOERROR                ns_r_noerror
+#define FORMERR                ns_r_formerr
+#define SERVFAIL       ns_r_servfail
+#define NXDOMAIN       ns_r_nxdomain
+#define NOTIMP         ns_r_notimpl
+#define REFUSED                ns_r_refused
+#define YXDOMAIN       ns_r_yxdomain
+#define YXRRSET                ns_r_yxrrset
+#define NXRRSET                ns_r_nxrrset
+#define NOTAUTH                ns_r_notauth
+#define NOTZONE                ns_r_notzone
+/*#define BADSIG               ns_r_badsig*/
+/*#define BADKEY               ns_r_badkey*/
+/*#define BADTIME              ns_r_badtime*/
+
+
+#define DELETE         ns_uop_delete
+#define ADD            ns_uop_add
+
+#define T_A            ns_t_a
+#define T_NS           ns_t_ns
+#define T_MD           ns_t_md
+#define T_MF           ns_t_mf
+#define T_CNAME                ns_t_cname
+#define T_SOA          ns_t_soa
+#define T_MB           ns_t_mb
+#define T_MG           ns_t_mg
+#define T_MR           ns_t_mr
+#define T_NULL         ns_t_null
+#define T_WKS          ns_t_wks
+#define T_PTR          ns_t_ptr
+#define T_HINFO                ns_t_hinfo
+#define T_MINFO                ns_t_minfo
+#define T_MX           ns_t_mx
+#define T_TXT          ns_t_txt
+#define        T_RP            ns_t_rp
+#define T_AFSDB                ns_t_afsdb
+#define T_X25          ns_t_x25
+#define T_ISDN         ns_t_isdn
+#define T_RT           ns_t_rt
+#define T_NSAP         ns_t_nsap
+#define T_NSAP_PTR     ns_t_nsap_ptr
+#define        T_SIG           ns_t_sig
+#define        T_KEY           ns_t_key
+#define        T_PX            ns_t_px
+#define        T_GPOS          ns_t_gpos
+#define        T_AAAA          ns_t_aaaa
+#define        T_LOC           ns_t_loc
+#define        T_NXT           ns_t_nxt
+#define        T_EID           ns_t_eid
+#define        T_NIMLOC        ns_t_nimloc
+#define        T_SRV           ns_t_srv
+#define T_ATMA         ns_t_atma
+#define T_NAPTR                ns_t_naptr
+#define T_A6           ns_t_a6
+#define T_DNAME                ns_t_dname
+#define        T_TSIG          ns_t_tsig
+#define        T_IXFR          ns_t_ixfr
+#define T_AXFR         ns_t_axfr
+#define T_MAILB                ns_t_mailb
+#define T_MAILA                ns_t_maila
+#define T_ANY          ns_t_any
+
+#define C_IN           ns_c_in
+#define C_CHAOS                ns_c_chaos
+#define C_HS           ns_c_hs
+/* BIND_UPDATE */
+#define C_NONE         ns_c_none
+#define C_ANY          ns_c_any
+
+#define        GETSHORT                NS_GET16
+#define        GETLONG                 NS_GET32
+#define        PUTSHORT                NS_PUT16
+#define        PUTLONG                 NS_PUT32
+
+#endif /* _ARPA_NAMESER_COMPAT_ */
+/*! \file */
diff --git a/lib/libdss-include/arpa/telnet.h b/lib/libdss-include/arpa/telnet.h
new file mode 100644 (file)
index 0000000..3774c89
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)telnet.h    8.2 (Berkeley) 12/15/93
+ */
+
+#ifndef _ARPA_TELNET_H
+#define        _ARPA_TELNET_H 1
+
+/*
+ * Definitions for the TELNET protocol.
+ */
+#define        IAC     255             /* interpret as command: */
+#define        DONT    254             /* you are not to use option */
+#define        DO      253             /* please, you use option */
+#define        WONT    252             /* I won't use option */
+#define        WILL    251             /* I will use option */
+#define        SB      250             /* interpret as subnegotiation */
+#define        GA      249             /* you may reverse the line */
+#define        EL      248             /* erase the current line */
+#define        EC      247             /* erase the current character */
+#define        AYT     246             /* are you there */
+#define        AO      245             /* abort output--but let prog finish */
+#define        IP      244             /* interrupt process--permanently */
+#define        BREAK   243             /* break */
+#define        DM      242             /* data mark--for connect. cleaning */
+#define        NOP     241             /* nop */
+#define        SE      240             /* end sub negotiation */
+#define EOR     239             /* end of record (transparent mode) */
+#define        ABORT   238             /* Abort process */
+#define        SUSP    237             /* Suspend process */
+#define        xEOF    236             /* End of file: EOF is already used... */
+
+#define SYNCH  242             /* for telfunc calls */
+
+#ifdef TELCMDS
+char *telcmds[] = {
+       "EOF", "SUSP", "ABORT", "EOR",
+       "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
+       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
+};
+#else
+extern char *telcmds[];
+#endif
+
+#define        TELCMD_FIRST    xEOF
+#define        TELCMD_LAST     IAC
+#define        TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
+                        (unsigned int)(x) >= TELCMD_FIRST)
+#define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
+
+/* telnet options */
+#define TELOPT_BINARY  0       /* 8-bit data path */
+#define TELOPT_ECHO    1       /* echo */
+#define        TELOPT_RCP      2       /* prepare to reconnect */
+#define        TELOPT_SGA      3       /* suppress go ahead */
+#define        TELOPT_NAMS     4       /* approximate message size */
+#define        TELOPT_STATUS   5       /* give status */
+#define        TELOPT_TM       6       /* timing mark */
+#define        TELOPT_RCTE     7       /* remote controlled transmission and echo */
+#define TELOPT_NAOL    8       /* negotiate about output line width */
+#define TELOPT_NAOP    9       /* negotiate about output page size */
+#define TELOPT_NAOCRD  10      /* negotiate about CR disposition */
+#define TELOPT_NAOHTS  11      /* negotiate about horizontal tabstops */
+#define TELOPT_NAOHTD  12      /* negotiate about horizontal tab disposition */
+#define TELOPT_NAOFFD  13      /* negotiate about formfeed disposition */
+#define TELOPT_NAOVTS  14      /* negotiate about vertical tab stops */
+#define TELOPT_NAOVTD  15      /* negotiate about vertical tab disposition */
+#define TELOPT_NAOLFD  16      /* negotiate about output LF disposition */
+#define TELOPT_XASCII  17      /* extended ascii character set */
+#define        TELOPT_LOGOUT   18      /* force logout */
+#define        TELOPT_BM       19      /* byte macro */
+#define        TELOPT_DET      20      /* data entry terminal */
+#define        TELOPT_SUPDUP   21      /* supdup protocol */
+#define        TELOPT_SUPDUPOUTPUT 22  /* supdup output */
+#define        TELOPT_SNDLOC   23      /* send location */
+#define        TELOPT_TTYPE    24      /* terminal type */
+#define        TELOPT_EOR      25      /* end or record */
+#define        TELOPT_TUID     26      /* TACACS user identification */
+#define        TELOPT_OUTMRK   27      /* output marking */
+#define        TELOPT_TTYLOC   28      /* terminal location number */
+#define        TELOPT_3270REGIME 29    /* 3270 regime */
+#define        TELOPT_X3PAD    30      /* X.3 PAD */
+#define        TELOPT_NAWS     31      /* window size */
+#define        TELOPT_TSPEED   32      /* terminal speed */
+#define        TELOPT_LFLOW    33      /* remote flow control */
+#define TELOPT_LINEMODE        34      /* Linemode option */
+#define TELOPT_XDISPLOC        35      /* X Display Location */
+#define TELOPT_OLD_ENVIRON 36  /* Old - Environment variables */
+#define        TELOPT_AUTHENTICATION 37/* Authenticate */
+#define        TELOPT_ENCRYPT  38      /* Encryption option */
+#define TELOPT_NEW_ENVIRON 39  /* New - Environment variables */
+#define        TELOPT_EXOPL    255     /* extended-options-list */
+
+
+#define        NTELOPTS        (1+TELOPT_NEW_ENVIRON)
+#ifdef TELOPTS
+char *telopts[NTELOPTS+1] = {
+       "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
+       "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
+       "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
+       "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
+       "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
+       "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
+       "TACACS UID", "OUTPUT MARKING", "TTYLOC",
+       "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
+       "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
+       "ENCRYPT", "NEW-ENVIRON",
+       0,
+};
+#define        TELOPT_FIRST    TELOPT_BINARY
+#define        TELOPT_LAST     TELOPT_NEW_ENVIRON
+#define        TELOPT_OK(x)    ((unsigned int)(x) <= TELOPT_LAST)
+#define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
+#endif
+
+/* sub-option qualifiers */
+#define        TELQUAL_IS      0       /* option is... */
+#define        TELQUAL_SEND    1       /* send option */
+#define        TELQUAL_INFO    2       /* ENVIRON: informational version of IS */
+#define        TELQUAL_REPLY   2       /* AUTHENTICATION: client version of IS */
+#define        TELQUAL_NAME    3       /* AUTHENTICATION: client version of IS */
+
+#define        LFLOW_OFF               0       /* Disable remote flow control */
+#define        LFLOW_ON                1       /* Enable remote flow control */
+#define        LFLOW_RESTART_ANY       2       /* Restart output on any char */
+#define        LFLOW_RESTART_XON       3       /* Restart output only on XON */
+
+/*
+ * LINEMODE suboptions
+ */
+
+#define        LM_MODE         1
+#define        LM_FORWARDMASK  2
+#define        LM_SLC          3
+
+#define        MODE_EDIT       0x01
+#define        MODE_TRAPSIG    0x02
+#define        MODE_ACK        0x04
+#define MODE_SOFT_TAB  0x08
+#define MODE_LIT_ECHO  0x10
+
+#define        MODE_MASK       0x1f
+
+/* Not part of protocol, but needed to simplify things... */
+#define MODE_FLOW              0x0100
+#define MODE_ECHO              0x0200
+#define MODE_INBIN             0x0400
+#define MODE_OUTBIN            0x0800
+#define MODE_FORCE             0x1000
+
+#define        SLC_SYNCH       1
+#define        SLC_BRK         2
+#define        SLC_IP          3
+#define        SLC_AO          4
+#define        SLC_AYT         5
+#define        SLC_EOR         6
+#define        SLC_ABORT       7
+#define        SLC_EOF         8
+#define        SLC_SUSP        9
+#define        SLC_EC          10
+#define        SLC_EL          11
+#define        SLC_EW          12
+#define        SLC_RP          13
+#define        SLC_LNEXT       14
+#define        SLC_XON         15
+#define        SLC_XOFF        16
+#define        SLC_FORW1       17
+#define        SLC_FORW2       18
+
+#define        NSLC            18
+
+/*
+ * For backwards compatibility, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define        SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+                       "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
+                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
+#ifdef SLC_NAMES
+char *slc_names[] = {
+       SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define        SLC_NAMES SLC_NAMELIST
+#endif
+
+#define        SLC_NAME_OK(x)  ((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x)    slc_names[x]
+
+#define        SLC_NOSUPPORT   0
+#define        SLC_CANTCHANGE  1
+#define        SLC_VARIABLE    2
+#define        SLC_DEFAULT     3
+#define        SLC_LEVELBITS   0x03
+
+#define        SLC_FUNC        0
+#define        SLC_FLAGS       1
+#define        SLC_VALUE       2
+
+#define        SLC_ACK         0x80
+#define        SLC_FLUSHIN     0x40
+#define        SLC_FLUSHOUT    0x20
+
+#define        OLD_ENV_VAR     1
+#define        OLD_ENV_VALUE   0
+#define        NEW_ENV_VAR     0
+#define        NEW_ENV_VALUE   1
+#define        ENV_ESC         2
+#define ENV_USERVAR    3
+
+/*
+ * AUTHENTICATION suboptions
+ */
+
+/*
+ * Who is authenticating who ...
+ */
+#define        AUTH_WHO_CLIENT         0       /* Client authenticating server */
+#define        AUTH_WHO_SERVER         1       /* Server authenticating client */
+#define        AUTH_WHO_MASK           1
+
+/*
+ * amount of authentication done
+ */
+#define        AUTH_HOW_ONE_WAY        0
+#define        AUTH_HOW_MUTUAL         2
+#define        AUTH_HOW_MASK           2
+
+#define        AUTHTYPE_NULL           0
+#define        AUTHTYPE_KERBEROS_V4    1
+#define        AUTHTYPE_KERBEROS_V5    2
+#define        AUTHTYPE_SPX            3
+#define        AUTHTYPE_MINK           4
+#define        AUTHTYPE_CNT            5
+
+#define        AUTHTYPE_TEST           99
+
+#ifdef AUTH_NAMES
+char *authtype_names[] = {
+       "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define        AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
+#define        AUTHTYPE_NAME(x)        authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define        ENCRYPT_IS              0       /* I pick encryption type ... */
+#define        ENCRYPT_SUPPORT         1       /* I support encryption types ... */
+#define        ENCRYPT_REPLY           2       /* Initial setup response */
+#define        ENCRYPT_START           3       /* Am starting to send encrypted */
+#define        ENCRYPT_END             4       /* Am ending encrypted */
+#define        ENCRYPT_REQSTART        5       /* Request you start encrypting */
+#define        ENCRYPT_REQEND          6       /* Request you send encrypting */
+#define        ENCRYPT_ENC_KEYID       7
+#define        ENCRYPT_DEC_KEYID       8
+#define        ENCRYPT_CNT             9
+
+#define        ENCTYPE_ANY             0
+#define        ENCTYPE_DES_CFB64       1
+#define        ENCTYPE_DES_OFB64       2
+#define        ENCTYPE_CNT             3
+
+#ifdef ENCRYPT_NAMES
+char *encrypt_names[] = {
+       "IS", "SUPPORT", "REPLY", "START", "END",
+       "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+       0,
+};
+char *enctype_names[] = {
+       "ANY", "DES_CFB64",  "DES_OFB64",  0,
+};
+#else
+extern char *encrypt_names[];
+extern char *enctype_names[];
+#endif
+
+
+#define        ENCRYPT_NAME_OK(x)      ((unsigned int)(x) < ENCRYPT_CNT)
+#define        ENCRYPT_NAME(x)         encrypt_names[x]
+
+#define        ENCTYPE_NAME_OK(x)      ((unsigned int)(x) < ENCTYPE_CNT)
+#define        ENCTYPE_NAME(x)         enctype_names[x]
+
+#endif /* arpa/telnet.h */
diff --git a/lib/libdss-include/arpa/tftp.h b/lib/libdss-include/arpa/tftp.h
new file mode 100644 (file)
index 0000000..86e0b6e
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)tftp.h      8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _ARPA_TFTP_H
+#define        _ARPA_TFTP_H 1
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+#define        SEGSIZE         512             /* data segment size */
+
+/*
+ * Packet types.
+ */
+#define        RRQ     01                              /* read request */
+#define        WRQ     02                              /* write request */
+#define        DATA    03                              /* data packet */
+#define        ACK     04                              /* acknowledgement */
+#define        ERROR   05                              /* error code */
+
+struct tftphdr {
+       short   th_opcode;                      /* packet type */
+       union {
+               char    tu_padding[3];          /* sizeof() compat */
+               struct {
+                       union {
+                               unsigned short  tu_block;       /* block # */
+                               short   tu_code;                /* error code */
+                       } __attribute__ ((__packed__)) th_u3;
+                       char tu_data[0];        /* data or error string */
+               } __attribute__ ((__packed__)) th_u2;
+               char    tu_stuff[0];            /* request packet stuff */
+       } __attribute__ ((__packed__)) th_u1;
+} __attribute__ ((__packed__));
+
+#define        th_block        th_u1.th_u2.th_u3.tu_block
+#define        th_code         th_u1.th_u2.th_u3.tu_code
+#define        th_stuff        th_u1.tu_stuff
+#define        th_data         th_u1.th_u2.tu_data
+#define        th_msg          th_u1.th_u2.tu_data
+
+/*
+ * Error codes.
+ */
+#define        EUNDEF          0               /* not defined */
+#define        ENOTFOUND       1               /* file not found */
+#define        EACCESS         2               /* access violation */
+#define        ENOSPACE        3               /* disk full or allocation exceeded */
+#define        EBADOP          4               /* illegal TFTP operation */
+#define        EBADID          5               /* unknown transfer ID */
+#define        EEXISTS         6               /* file already exists */
+#define        ENOUSER         7               /* no such user */
+
+#endif /* arpa/tftp.h */
diff --git a/lib/libdss-include/asm-generic/auxvec.h b/lib/libdss-include/asm-generic/auxvec.h
new file mode 100644 (file)
index 0000000..b99573b
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __ASM_GENERIC_AUXVEC_H
+#define __ASM_GENERIC_AUXVEC_H
+/*
+ * Not all architectures need their own auxvec.h, the most
+ * common definitions are already in linux/auxvec.h.
+ */
+
+#endif /* __ASM_GENERIC_AUXVEC_H */
diff --git a/lib/libdss-include/asm-generic/bitsperlong.h b/lib/libdss-include/asm-generic/bitsperlong.h
new file mode 100644 (file)
index 0000000..f832c3c
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __ASM_GENERIC_BITS_PER_LONG
+#define __ASM_GENERIC_BITS_PER_LONG
+
+/*
+ * There seems to be no way of detecting this automatically from user
+ * space, so 64 bit architectures should override this in their
+ * bitsperlong.h. In particular, an architecture that supports
+ * both 32 and 64 bit user space must not rely on CONFIG_64BIT
+ * to decide it, but rather check a compiler provided macro.
+ */
+#ifndef __BITS_PER_LONG
+#define __BITS_PER_LONG 32
+#endif
+
+#endif /* __ASM_GENERIC_BITS_PER_LONG */
diff --git a/lib/libdss-include/asm-generic/errno-base.h b/lib/libdss-include/asm-generic/errno-base.h
new file mode 100644 (file)
index 0000000..6511597
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _ASM_GENERIC_ERRNO_BASE_H
+#define _ASM_GENERIC_ERRNO_BASE_H
+
+#define        EPERM            1      /* Operation not permitted */
+#define        ENOENT           2      /* No such file or directory */
+#define        ESRCH            3      /* No such process */
+#define        EINTR            4      /* Interrupted system call */
+#define        EIO              5      /* I/O error */
+#define        ENXIO            6      /* No such device or address */
+#define        E2BIG            7      /* Argument list too long */
+#define        ENOEXEC          8      /* Exec format error */
+#define        EBADF            9      /* Bad file number */
+#define        ECHILD          10      /* No child processes */
+#define        EAGAIN          11      /* Try again */
+#define        ENOMEM          12      /* Out of memory */
+#define        EACCES          13      /* Permission denied */
+#define        EFAULT          14      /* Bad address */
+#define        ENOTBLK         15      /* Block device required */
+#define        EBUSY           16      /* Device or resource busy */
+#define        EEXIST          17      /* File exists */
+#define        EXDEV           18      /* Cross-device link */
+#define        ENODEV          19      /* No such device */
+#define        ENOTDIR         20      /* Not a directory */
+#define        EISDIR          21      /* Is a directory */
+#define        EINVAL          22      /* Invalid argument */
+#define        ENFILE          23      /* File table overflow */
+#define        EMFILE          24      /* Too many open files */
+#define        ENOTTY          25      /* Not a typewriter */
+#define        ETXTBSY         26      /* Text file busy */
+#define        EFBIG           27      /* File too large */
+#define        ENOSPC          28      /* No space left on device */
+#define        ESPIPE          29      /* Illegal seek */
+#define        EROFS           30      /* Read-only file system */
+#define        EMLINK          31      /* Too many links */
+#define        EPIPE           32      /* Broken pipe */
+#define        EDOM            33      /* Math argument out of domain of func */
+#define        ERANGE          34      /* Math result not representable */
+
+#endif
diff --git a/lib/libdss-include/asm-generic/errno.h b/lib/libdss-include/asm-generic/errno.h
new file mode 100644 (file)
index 0000000..88e0914
--- /dev/null
@@ -0,0 +1,122 @@
+#ifndef _ASM_GENERIC_ERRNO_H
+#define _ASM_GENERIC_ERRNO_H
+
+#include <asm-generic/errno-base.h>
+
+#define        EDEADLK         35      /* Resource deadlock would occur */
+#define        ENAMETOOLONG    36      /* File name too long */
+#define        ENOLCK          37      /* No record locks available */
+
+/*
+ * This error code is special: arch syscall entry code will return
+ * -ENOSYS if users try to call a syscall that doesn't exist.  To keep
+ * failures of syscalls that really do exist distinguishable from
+ * failures due to attempts to use a nonexistent syscall, syscall
+ * implementations should refrain from returning -ENOSYS.
+ */
+#define        ENOSYS          38      /* Invalid system call number */
+
+#define        ENOTEMPTY       39      /* Directory not empty */
+#define        ELOOP           40      /* Too many symbolic links encountered */
+#define        EWOULDBLOCK     EAGAIN  /* Operation would block */
+#define        ENOMSG          42      /* No message of desired type */
+#define        EIDRM           43      /* Identifier removed */
+#define        ECHRNG          44      /* Channel number out of range */
+#define        EL2NSYNC        45      /* Level 2 not synchronized */
+#define        EL3HLT          46      /* Level 3 halted */
+#define        EL3RST          47      /* Level 3 reset */
+#define        ELNRNG          48      /* Link number out of range */
+#define        EUNATCH         49      /* Protocol driver not attached */
+#define        ENOCSI          50      /* No CSI structure available */
+#define        EL2HLT          51      /* Level 2 halted */
+#define        EBADE           52      /* Invalid exchange */
+#define        EBADR           53      /* Invalid request descriptor */
+#define        EXFULL          54      /* Exchange full */
+#define        ENOANO          55      /* No anode */
+#define        EBADRQC         56      /* Invalid request code */
+#define        EBADSLT         57      /* Invalid slot */
+
+#define        EDEADLOCK       EDEADLK
+
+#define        EBFONT          59      /* Bad font file format */
+#define        ENOSTR          60      /* Device not a stream */
+#define        ENODATA         61      /* No data available */
+#define        ETIME           62      /* Timer expired */
+#define        ENOSR           63      /* Out of streams resources */
+#define        ENONET          64      /* Machine is not on the network */
+#define        ENOPKG          65      /* Package not installed */
+#define        EREMOTE         66      /* Object is remote */
+#define        ENOLINK         67      /* Link has been severed */
+#define        EADV            68      /* Advertise error */
+#define        ESRMNT          69      /* Srmount error */
+#define        ECOMM           70      /* Communication error on send */
+#define        EPROTO          71      /* Protocol error */
+#define        EMULTIHOP       72      /* Multihop attempted */
+#define        EDOTDOT         73      /* RFS specific error */
+#define        EBADMSG         74      /* Not a data message */
+#define        EOVERFLOW       75      /* Value too large for defined data type */
+#define        ENOTUNIQ        76      /* Name not unique on network */
+#define        EBADFD          77      /* File descriptor in bad state */
+#define        EREMCHG         78      /* Remote address changed */
+#define        ELIBACC         79      /* Can not access a needed shared library */
+#define        ELIBBAD         80      /* Accessing a corrupted shared library */
+#define        ELIBSCN         81      /* .lib section in a.out corrupted */
+#define        ELIBMAX         82      /* Attempting to link in too many shared libraries */
+#define        ELIBEXEC        83      /* Cannot exec a shared library directly */
+#define        EILSEQ          84      /* Illegal byte sequence */
+#define        ERESTART        85      /* Interrupted system call should be restarted */
+#define        ESTRPIPE        86      /* Streams pipe error */
+#define        EUSERS          87      /* Too many users */
+#define        ENOTSOCK        88      /* Socket operation on non-socket */
+#define        EDESTADDRREQ    89      /* Destination address required */
+#define        EMSGSIZE        90      /* Message too long */
+#define        EPROTOTYPE      91      /* Protocol wrong type for socket */
+#define        ENOPROTOOPT     92      /* Protocol not available */
+#define        EPROTONOSUPPORT 93      /* Protocol not supported */
+#define        ESOCKTNOSUPPORT 94      /* Socket type not supported */
+#define        EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
+#define        EPFNOSUPPORT    96      /* Protocol family not supported */
+#define        EAFNOSUPPORT    97      /* Address family not supported by protocol */
+#define        EADDRINUSE      98      /* Address already in use */
+#define        EADDRNOTAVAIL   99      /* Cannot assign requested address */
+#define        ENETDOWN        100     /* Network is down */
+#define        ENETUNREACH     101     /* Network is unreachable */
+#define        ENETRESET       102     /* Network dropped connection because of reset */
+#define        ECONNABORTED    103     /* Software caused connection abort */
+#define        ECONNRESET      104     /* Connection reset by peer */
+#define        ENOBUFS         105     /* No buffer space available */
+#define        EISCONN         106     /* Transport endpoint is already connected */
+#define        ENOTCONN        107     /* Transport endpoint is not connected */
+#define        ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
+#define        ETOOMANYREFS    109     /* Too many references: cannot splice */
+#define        ETIMEDOUT       110     /* Connection timed out */
+#define        ECONNREFUSED    111     /* Connection refused */
+#define        EHOSTDOWN       112     /* Host is down */
+#define        EHOSTUNREACH    113     /* No route to host */
+#define        EALREADY        114     /* Operation already in progress */
+#define        EINPROGRESS     115     /* Operation now in progress */
+#define        ESTALE          116     /* Stale file handle */
+#define        EUCLEAN         117     /* Structure needs cleaning */
+#define        ENOTNAM         118     /* Not a XENIX named type file */
+#define        ENAVAIL         119     /* No XENIX semaphores available */
+#define        EISNAM          120     /* Is a named type file */
+#define        EREMOTEIO       121     /* Remote I/O error */
+#define        EDQUOT          122     /* Quota exceeded */
+
+#define        ENOMEDIUM       123     /* No medium found */
+#define        EMEDIUMTYPE     124     /* Wrong medium type */
+#define        ECANCELED       125     /* Operation Canceled */
+#define        ENOKEY          126     /* Required key not available */
+#define        EKEYEXPIRED     127     /* Key has expired */
+#define        EKEYREVOKED     128     /* Key has been revoked */
+#define        EKEYREJECTED    129     /* Key was rejected by service */
+
+/* for robust mutexes */
+#define        EOWNERDEAD      130     /* Owner died */
+#define        ENOTRECOVERABLE 131     /* State not recoverable */
+
+#define ERFKILL                132     /* Operation not possible due to RF-kill */
+
+#define EHWPOISON      133     /* Memory page has hardware error */
+
+#endif
diff --git a/lib/libdss-include/asm-generic/fcntl.h b/lib/libdss-include/asm-generic/fcntl.h
new file mode 100644 (file)
index 0000000..e063eff
--- /dev/null
@@ -0,0 +1,220 @@
+#ifndef _ASM_GENERIC_FCNTL_H
+#define _ASM_GENERIC_FCNTL_H
+
+#include <linux/types.h>
+
+/*
+ * FMODE_EXEC is 0x20
+ * FMODE_NONOTIFY is 0x4000000
+ * These cannot be used by userspace O_* until internal and external open
+ * flags are split.
+ * -Eric Paris
+ */
+
+/*
+ * When introducing new O_* bits, please check its uniqueness in fcntl_init().
+ */
+
+#define O_ACCMODE      00000003
+#define O_RDONLY       00000000
+#define O_WRONLY       00000001
+#define O_RDWR         00000002
+#ifndef O_CREAT
+#define O_CREAT                00000100        /* not fcntl */
+#endif
+#ifndef O_EXCL
+#define O_EXCL         00000200        /* not fcntl */
+#endif
+#ifndef O_NOCTTY
+#define O_NOCTTY       00000400        /* not fcntl */
+#endif
+#ifndef O_TRUNC
+#define O_TRUNC                00001000        /* not fcntl */
+#endif
+#ifndef O_APPEND
+#define O_APPEND       00002000
+#endif
+#ifndef O_NONBLOCK
+#define O_NONBLOCK     00004000
+#endif
+#ifndef O_DSYNC
+#define O_DSYNC                00010000        /* used to be O_SYNC, see below */
+#endif
+#ifndef FASYNC
+#define FASYNC         00020000        /* fcntl, for BSD compatibility */
+#endif
+#ifndef O_DIRECT
+#define O_DIRECT       00040000        /* direct disk access hint */
+#endif
+#ifndef O_LARGEFILE
+#define O_LARGEFILE    00100000
+#endif
+#ifndef O_DIRECTORY
+#define O_DIRECTORY    00200000        /* must be a directory */
+#endif
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW     00400000        /* don't follow links */
+#endif
+#ifndef O_NOATIME
+#define O_NOATIME      01000000
+#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC      02000000        /* set close_on_exec */
+#endif
+
+/*
+ * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
+ * the O_SYNC flag.  We continue to use the existing numerical value
+ * for O_DSYNC semantics now, but using the correct symbolic name for it.
+ * This new value is used to request true Posix O_SYNC semantics.  It is
+ * defined in this strange way to make sure applications compiled against
+ * new headers get at least O_DSYNC semantics on older kernels.
+ *
+ * This has the nice side-effect that we can simply test for O_DSYNC
+ * wherever we do not care if O_DSYNC or O_SYNC is used.
+ *
+ * Note: __O_SYNC must never be used directly.
+ */
+#ifndef O_SYNC
+#define __O_SYNC       04000000
+#define O_SYNC         (__O_SYNC|O_DSYNC)
+#endif
+
+#ifndef O_PATH
+#define O_PATH         010000000
+#endif
+
+#ifndef __O_TMPFILE
+#define __O_TMPFILE    020000000
+#endif
+
+/* a horrid kludge trying to make sure that this will fail on old kernels */
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
+#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)      
+
+#ifndef O_NDELAY
+#define O_NDELAY       O_NONBLOCK
+#endif
+
+#define F_DUPFD                0       /* dup */
+#define F_GETFD                1       /* get close_on_exec */
+#define F_SETFD                2       /* set/clear close_on_exec */
+#define F_GETFL                3       /* get file->f_flags */
+#define F_SETFL                4       /* set file->f_flags */
+#ifndef F_GETLK
+#define F_GETLK                5
+#define F_SETLK                6
+#define F_SETLKW       7
+#endif
+#ifndef F_SETOWN
+#define F_SETOWN       8       /* for sockets. */
+#define F_GETOWN       9       /* for sockets. */
+#endif
+#ifndef F_SETSIG
+#define F_SETSIG       10      /* for sockets. */
+#define F_GETSIG       11      /* for sockets. */
+#endif
+
+#ifndef CONFIG_64BIT
+#ifndef F_GETLK64
+#define F_GETLK64      12      /*  using 'struct flock64' */
+#define F_SETLK64      13
+#define F_SETLKW64     14
+#endif
+#endif
+
+#ifndef F_SETOWN_EX
+#define F_SETOWN_EX    15
+#define F_GETOWN_EX    16
+#endif
+
+#ifndef F_GETOWNER_UIDS
+#define F_GETOWNER_UIDS        17
+#endif
+
+/*
+ * Open File Description Locks
+ *
+ * Usually record locks held by a process are released on *any* close and are
+ * not inherited across a fork().
+ *
+ * These cmd values will set locks that conflict with process-associated
+ * record  locks, but are "owned" by the open file description, not the
+ * process. This means that they are inherited across fork() like BSD (flock)
+ * locks, and they are only released automatically when the last reference to
+ * the the open file against which they were acquired is put.
+ */
+#define F_OFD_GETLK    36
+#define F_OFD_SETLK    37
+#define F_OFD_SETLKW   38
+
+#define F_OWNER_TID    0
+#define F_OWNER_PID    1
+#define F_OWNER_PGRP   2
+
+struct f_owner_ex {
+       int     type;
+       __kernel_pid_t  pid;
+};
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#ifndef F_RDLCK
+#define F_RDLCK                0
+#define F_WRLCK                1
+#define F_UNLCK                2
+#endif
+
+/* for old implementation of bsd flock () */
+#ifndef F_EXLCK
+#define F_EXLCK                4       /* or 3 */
+#define F_SHLCK                8       /* or 4 */
+#endif
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH                1       /* shared lock */
+#define LOCK_EX                2       /* exclusive lock */
+#define LOCK_NB                4       /* or'd with one of the above to prevent
+                                  blocking */
+#define LOCK_UN                8       /* remove lock */
+
+#define LOCK_MAND      32      /* This is a mandatory flock ... */
+#define LOCK_READ      64      /* which allows concurrent read operations */
+#define LOCK_WRITE     128     /* which allows concurrent write operations */
+#define LOCK_RW                192     /* which allows concurrent read & write ops */
+
+#define F_LINUX_SPECIFIC_BASE  1024
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK
+#ifndef __ARCH_FLOCK_PAD
+#define __ARCH_FLOCK_PAD
+#endif
+
+struct flock {
+       short   l_type;
+       short   l_whence;
+       __kernel_off_t  l_start;
+       __kernel_off_t  l_len;
+       __kernel_pid_t  l_pid;
+       __ARCH_FLOCK_PAD
+};
+#endif
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK64
+#ifndef __ARCH_FLOCK64_PAD
+#define __ARCH_FLOCK64_PAD
+#endif
+
+struct flock64 {
+       short  l_type;
+       short  l_whence;
+       __kernel_loff_t l_start;
+       __kernel_loff_t l_len;
+       __kernel_pid_t  l_pid;
+       __ARCH_FLOCK64_PAD
+};
+#endif
+
+#endif /* _ASM_GENERIC_FCNTL_H */
diff --git a/lib/libdss-include/asm-generic/int-l64.h b/lib/libdss-include/asm-generic/int-l64.h
new file mode 100644 (file)
index 0000000..e271ae2
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * asm-generic/int-l64.h
+ *
+ * Integer declarations for architectures which use "long"
+ * for 64-bit types.
+ */
+
+#ifndef _ASM_GENERIC_INT_L64_H
+#define _ASM_GENERIC_INT_L64_H
+
+#include <asm/bitsperlong.h>
+
+#ifndef __ASSEMBLY__
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+typedef __signed__ long __s64;
+typedef unsigned long __u64;
+
+#endif /* __ASSEMBLY__ */
+
+
+#endif /* _ASM_GENERIC_INT_L64_H */
diff --git a/lib/libdss-include/asm-generic/int-ll64.h b/lib/libdss-include/asm-generic/int-ll64.h
new file mode 100644 (file)
index 0000000..0ede047
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * asm-generic/int-ll64.h
+ *
+ * Integer declarations for architectures which use "long long"
+ * for 64-bit types.
+ */
+
+#ifndef _ASM_GENERIC_INT_LL64_H
+#define _ASM_GENERIC_INT_LL64_H
+
+#include <asm/bitsperlong.h>
+
+#ifndef __ASSEMBLY__
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#ifdef __GNUC__
+__extension__ typedef __signed__ long long __s64;
+__extension__ typedef unsigned long long __u64;
+#else
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+
+#endif /* _ASM_GENERIC_INT_LL64_H */
diff --git a/lib/libdss-include/asm-generic/ioctl.h b/lib/libdss-include/asm-generic/ioctl.h
new file mode 100644 (file)
index 0000000..0da2c7d
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef _ASM_GENERIC_IOCTL_H
+#define _ASM_GENERIC_IOCTL_H
+
+/* ioctl command encoding: 32 bits total, command in lower 16 bits,
+ * size of the parameter structure in the lower 14 bits of the
+ * upper 16 bits.
+ * Encoding the size of the parameter structure in the ioctl request
+ * is useful for catching programs compiled with old versions
+ * and to avoid overwriting user space outside the user buffer area.
+ * The highest 2 bits are reserved for indicating the ``access mode''.
+ * NOTE: This limits the max parameter size to 16kB -1 !
+ */
+
+/*
+ * The following is for compatibility across the various Linux
+ * platforms.  The generic ioctl numbering scheme doesn't really enforce
+ * a type field.  De facto, however, the top 8 bits of the lower 16
+ * bits are indeed used as a type field, so we might just as well make
+ * this explicit here.  Please be sure to use the decoding macros
+ * below from now on.
+ */
+#define _IOC_NRBITS    8
+#define _IOC_TYPEBITS  8
+
+/*
+ * Let any architecture override either of the following before
+ * including this file.
+ */
+
+#ifndef _IOC_SIZEBITS
+# define _IOC_SIZEBITS 14
+#endif
+
+#ifndef _IOC_DIRBITS
+# define _IOC_DIRBITS  2
+#endif
+
+#define _IOC_NRMASK    ((1 << _IOC_NRBITS)-1)
+#define _IOC_TYPEMASK  ((1 << _IOC_TYPEBITS)-1)
+#define _IOC_SIZEMASK  ((1 << _IOC_SIZEBITS)-1)
+#define _IOC_DIRMASK   ((1 << _IOC_DIRBITS)-1)
+
+#define _IOC_NRSHIFT   0
+#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
+#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
+#define _IOC_DIRSHIFT  (_IOC_SIZESHIFT+_IOC_SIZEBITS)
+
+/*
+ * Direction bits, which any architecture can choose to override
+ * before including this file.
+ */
+
+#ifndef _IOC_NONE
+# define _IOC_NONE     0U
+#endif
+
+#ifndef _IOC_WRITE
+# define _IOC_WRITE    1U
+#endif
+
+#ifndef _IOC_READ
+# define _IOC_READ     2U
+#endif
+
+#define _IOC(dir,type,nr,size) \
+       (((dir)  << _IOC_DIRSHIFT) | \
+        ((type) << _IOC_TYPESHIFT) | \
+        ((nr)   << _IOC_NRSHIFT) | \
+        ((size) << _IOC_SIZESHIFT))
+
+#define _IOC_TYPECHECK(t) (sizeof(t))
+
+/* used to create numbers */
+#define _IO(type,nr)           _IOC(_IOC_NONE,(type),(nr),0)
+#define _IOR(type,nr,size)     _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOW(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
+#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
+#define _IOWR_BAD(type,nr,size)        _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
+
+/* used to decode ioctl numbers.. */
+#define _IOC_DIR(nr)           (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
+#define _IOC_TYPE(nr)          (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
+#define _IOC_NR(nr)            (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
+#define _IOC_SIZE(nr)          (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
+
+/* ...and for the drivers/sound files... */
+
+#define IOC_IN         (_IOC_WRITE << _IOC_DIRSHIFT)
+#define IOC_OUT                (_IOC_READ << _IOC_DIRSHIFT)
+#define IOC_INOUT      ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
+#define IOCSIZE_MASK   (_IOC_SIZEMASK << _IOC_SIZESHIFT)
+#define IOCSIZE_SHIFT  (_IOC_SIZESHIFT)
+
+#endif /* _ASM_GENERIC_IOCTL_H */
diff --git a/lib/libdss-include/asm-generic/ioctls.h b/lib/libdss-include/asm-generic/ioctls.h
new file mode 100644 (file)
index 0000000..467cdba
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef __ASM_GENERIC_IOCTLS_H
+#define __ASM_GENERIC_IOCTLS_H
+
+#include <linux/ioctl.h>
+
+/*
+ * These are the most common definitions for tty ioctl numbers.
+ * Most of them do not use the recommended _IOC(), but there is
+ * probably some source code out there hardcoding the number,
+ * so we might as well use them for all new platforms.
+ *
+ * The architectures that use different values here typically
+ * try to be compatible with some Unix variants for the same
+ * architecture.
+ */
+
+/* 0x54 is just a magic number to make these relatively unique ('T') */
+
+#define TCGETS         0x5401
+#define TCSETS         0x5402
+#define TCSETSW                0x5403
+#define TCSETSF                0x5404
+#define TCGETA         0x5405
+#define TCSETA         0x5406
+#define TCSETAW                0x5407
+#define TCSETAF                0x5408
+#define TCSBRK         0x5409
+#define TCXONC         0x540A
+#define TCFLSH         0x540B
+#define TIOCEXCL       0x540C
+#define TIOCNXCL       0x540D
+#define TIOCSCTTY      0x540E
+#define TIOCGPGRP      0x540F
+#define TIOCSPGRP      0x5410
+#define TIOCOUTQ       0x5411
+#define TIOCSTI                0x5412
+#define TIOCGWINSZ     0x5413
+#define TIOCSWINSZ     0x5414
+#define TIOCMGET       0x5415
+#define TIOCMBIS       0x5416
+#define TIOCMBIC       0x5417
+#define TIOCMSET       0x5418
+#define TIOCGSOFTCAR   0x5419
+#define TIOCSSOFTCAR   0x541A
+#define FIONREAD       0x541B
+#define TIOCINQ                FIONREAD
+#define TIOCLINUX      0x541C
+#define TIOCCONS       0x541D
+#define TIOCGSERIAL    0x541E
+#define TIOCSSERIAL    0x541F
+#define TIOCPKT                0x5420
+#define FIONBIO                0x5421
+#define TIOCNOTTY      0x5422
+#define TIOCSETD       0x5423
+#define TIOCGETD       0x5424
+#define TCSBRKP                0x5425  /* Needed for POSIX tcsendbreak() */
+#define TIOCSBRK       0x5427  /* BSD compatibility */
+#define TIOCCBRK       0x5428  /* BSD compatibility */
+#define TIOCGSID       0x5429  /* Return the session ID of FD */
+#define TCGETS2                _IOR('T', 0x2A, struct termios2)
+#define TCSETS2                _IOW('T', 0x2B, struct termios2)
+#define TCSETSW2       _IOW('T', 0x2C, struct termios2)
+#define TCSETSF2       _IOW('T', 0x2D, struct termios2)
+#define TIOCGRS485     0x542E
+#ifndef TIOCSRS485
+#define TIOCSRS485     0x542F
+#endif
+#define TIOCGPTN       _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
+#define TIOCSPTLCK     _IOW('T', 0x31, int)  /* Lock/unlock Pty */
+#define TIOCGDEV       _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
+#define TCGETX         0x5432 /* SYS5 TCGETX compatibility */
+#define TCSETX         0x5433
+#define TCSETXF                0x5434
+#define TCSETXW                0x5435
+#define TIOCSIG                _IOW('T', 0x36, int)  /* pty: generate signal */
+#define TIOCVHANGUP    0x5437
+#define TIOCGPKT       _IOR('T', 0x38, int) /* Get packet mode state */
+#define TIOCGPTLCK     _IOR('T', 0x39, int) /* Get Pty lock state */
+#define TIOCGEXCL      _IOR('T', 0x40, int) /* Get exclusive mode state */
+
+#define FIONCLEX       0x5450
+#define FIOCLEX                0x5451
+#define FIOASYNC       0x5452
+#define TIOCSERCONFIG  0x5453
+#define TIOCSERGWILD   0x5454
+#define TIOCSERSWILD   0x5455
+#define TIOCGLCKTRMIOS 0x5456
+#define TIOCSLCKTRMIOS 0x5457
+#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
+#define TIOCSERGETLSR   0x5459 /* Get line status register */
+#define TIOCSERGETMULTI 0x545A /* Get multiport config  */
+#define TIOCSERSETMULTI 0x545B /* Set multiport config */
+
+#define TIOCMIWAIT     0x545C  /* wait for a change on serial input line(s) */
+#define TIOCGICOUNT    0x545D  /* read serial port __inline__ interrupt counts */
+
+/*
+ * Some arches already define FIOQSIZE due to a historical
+ * conflict with a Hayes modem-specific ioctl value.
+ */
+#ifndef FIOQSIZE
+# define FIOQSIZE      0x5460
+#endif
+
+/* Used for packet mode */
+#define TIOCPKT_DATA            0
+#define TIOCPKT_FLUSHREAD       1
+#define TIOCPKT_FLUSHWRITE      2
+#define TIOCPKT_STOP            4
+#define TIOCPKT_START           8
+#define TIOCPKT_NOSTOP         16
+#define TIOCPKT_DOSTOP         32
+#define TIOCPKT_IOCTL          64
+
+#define TIOCSER_TEMT   0x01    /* Transmitter physically empty */
+
+#endif /* __ASM_GENERIC_IOCTLS_H */
diff --git a/lib/libdss-include/asm-generic/ipcbuf.h b/lib/libdss-include/asm-generic/ipcbuf.h
new file mode 100644 (file)
index 0000000..3dbcc1e
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __ASM_GENERIC_IPCBUF_H
+#define __ASM_GENERIC_IPCBUF_H
+
+/*
+ * The generic ipc64_perm structure:
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * ipc64_perm was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * Pad space is left for:
+ * - 32-bit mode_t on architectures that only had 16 bit
+ * - 32-bit seq
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct ipc64_perm {
+       __kernel_key_t          key;
+       __kernel_uid32_t        uid;
+       __kernel_gid32_t        gid;
+       __kernel_uid32_t        cuid;
+       __kernel_gid32_t        cgid;
+       __kernel_mode_t         mode;
+                               /* pad if mode_t is u16: */
+       unsigned char           __pad1[4 - sizeof(__kernel_mode_t)];
+       unsigned short          seq;
+       unsigned short          __pad2;
+       __kernel_ulong_t        __unused1;
+       __kernel_ulong_t        __unused2;
+};
+
+#endif /* __ASM_GENERIC_IPCBUF_H */
diff --git a/lib/libdss-include/asm-generic/kvm_para.h b/lib/libdss-include/asm-generic/kvm_para.h
new file mode 100644 (file)
index 0000000..486f0af
--- /dev/null
@@ -0,0 +1,4 @@
+/*
+ * There isn't anything here, but the file must not be empty or patch
+ * will delete it.
+ */
diff --git a/lib/libdss-include/asm-generic/mman-common.h b/lib/libdss-include/asm-generic/mman-common.h
new file mode 100644 (file)
index 0000000..a74dd84
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef __ASM_GENERIC_MMAN_COMMON_H
+#define __ASM_GENERIC_MMAN_COMMON_H
+
+/*
+ Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd.
+ Based on: asm-xxx/mman.h
+*/
+
+#define PROT_READ      0x1             /* page can be read */
+#define PROT_WRITE     0x2             /* page can be written */
+#define PROT_EXEC      0x4             /* page can be executed */
+#define PROT_SEM       0x8             /* page may be used for atomic ops */
+#define PROT_NONE      0x0             /* page can not be accessed */
+#define PROT_GROWSDOWN 0x01000000      /* mprotect flag: extend change to start of growsdown vma */
+#define PROT_GROWSUP   0x02000000      /* mprotect flag: extend change to end of growsup vma */
+
+#define MAP_SHARED     0x01            /* Share changes */
+#define MAP_PRIVATE    0x02            /* Changes are private */
+#define MAP_TYPE       0x0f            /* Mask for type of mapping */
+#define MAP_FIXED      0x10            /* Interpret addr exactly */
+#define MAP_ANONYMOUS  0x20            /* don't use a file */
+#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
+# define MAP_UNINITIALIZED 0x4000000   /* For anonymous mmap, memory could be uninitialized */
+#else
+# define MAP_UNINITIALIZED 0x0         /* Don't support this flag */
+#endif
+
+/*
+ * Flags for mlock
+ */
+#define MLOCK_ONFAULT  0x01            /* Lock pages in range after they are faulted in, do not prefault */
+
+#define MS_ASYNC       1               /* sync memory asynchronously */
+#define MS_INVALIDATE  2               /* invalidate the caches */
+#define MS_SYNC                4               /* synchronous memory sync */
+
+#define MADV_NORMAL    0               /* no further special treatment */
+#define MADV_RANDOM    1               /* expect random page references */
+#define MADV_SEQUENTIAL        2               /* expect sequential page references */
+#define MADV_WILLNEED  3               /* will need these pages */
+#define MADV_DONTNEED  4               /* don't need these pages */
+
+/* common parameters: try to keep these consistent across architectures */
+#define MADV_REMOVE    9               /* remove these pages & resources */
+#define MADV_DONTFORK  10              /* don't inherit across fork */
+#define MADV_DOFORK    11              /* do inherit across fork */
+#define MADV_HWPOISON  100             /* poison a page for testing */
+#define MADV_SOFT_OFFLINE 101          /* soft offline page for testing */
+
+#define MADV_MERGEABLE   12            /* KSM may merge identical pages */
+#define MADV_UNMERGEABLE 13            /* KSM may not merge identical pages */
+
+#define MADV_HUGEPAGE  14              /* Worth backing with hugepages */
+#define MADV_NOHUGEPAGE        15              /* Not worth backing with hugepages */
+
+#define MADV_DONTDUMP   16             /* Explicity exclude from the core dump,
+                                          overrides the coredump filter bits */
+#define MADV_DODUMP    17              /* Clear the MADV_DONTDUMP flag */
+
+/* compatibility flags */
+#define MAP_FILE       0
+
+/*
+ * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
+ * This gives us 6 bits, which is enough until someone invents 128 bit address
+ * spaces.
+ *
+ * Assume these are all power of twos.
+ * When 0 use the default page size.
+ */
+#define MAP_HUGE_SHIFT 26
+#define MAP_HUGE_MASK  0x3f
+
+#endif /* __ASM_GENERIC_MMAN_COMMON_H */
diff --git a/lib/libdss-include/asm-generic/mman.h b/lib/libdss-include/asm-generic/mman.h
new file mode 100644 (file)
index 0000000..7162cd4
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __ASM_GENERIC_MMAN_H
+#define __ASM_GENERIC_MMAN_H
+
+#include <asm-generic/mman-common.h>
+
+#define MAP_GROWSDOWN  0x0100          /* stack-like segment */
+#define MAP_DENYWRITE  0x0800          /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000          /* mark it as an executable */
+#define MAP_LOCKED     0x2000          /* pages are locked */
+#define MAP_NORESERVE  0x4000          /* don't check for reservations */
+#define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
+#define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
+
+/* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
+
+#define MCL_CURRENT    1               /* lock all current mappings */
+#define MCL_FUTURE     2               /* lock all future mappings */
+#define MCL_ONFAULT    4               /* lock all pages that are faulted in */
+
+#endif /* __ASM_GENERIC_MMAN_H */
diff --git a/lib/libdss-include/asm-generic/msgbuf.h b/lib/libdss-include/asm-generic/msgbuf.h
new file mode 100644 (file)
index 0000000..f55ecc4
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef __ASM_GENERIC_MSGBUF_H
+#define __ASM_GENERIC_MSGBUF_H
+
+#include <asm/bitsperlong.h>
+/*
+ * generic msqid64_ds structure.
+ *
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * msqid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first three padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct msqid64_ds {
+       struct ipc64_perm msg_perm;
+       __kernel_time_t msg_stime;      /* last msgsnd time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused1;
+#endif
+       __kernel_time_t msg_rtime;      /* last msgrcv time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused2;
+#endif
+       __kernel_time_t msg_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused3;
+#endif
+       __kernel_ulong_t msg_cbytes;    /* current number of bytes on queue */
+       __kernel_ulong_t msg_qnum;      /* number of messages in queue */
+       __kernel_ulong_t msg_qbytes;    /* max number of bytes on queue */
+       __kernel_pid_t msg_lspid;       /* pid of last msgsnd */
+       __kernel_pid_t msg_lrpid;       /* last receive pid */
+       __kernel_ulong_t __unused4;
+       __kernel_ulong_t __unused5;
+};
+
+#endif /* __ASM_GENERIC_MSGBUF_H */
diff --git a/lib/libdss-include/asm-generic/param.h b/lib/libdss-include/asm-generic/param.h
new file mode 100644 (file)
index 0000000..bd69ff3
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __ASM_GENERIC_PARAM_H
+#define __ASM_GENERIC_PARAM_H
+
+#ifndef HZ
+#define HZ 100
+#endif
+
+#ifndef EXEC_PAGESIZE
+#define EXEC_PAGESIZE  4096
+#endif
+
+#ifndef NOGROUP
+#define NOGROUP                (-1)
+#endif
+
+#define MAXHOSTNAMELEN 64      /* max length of hostname */
+
+
+#endif /* __ASM_GENERIC_PARAM_H */
diff --git a/lib/libdss-include/asm-generic/poll.h b/lib/libdss-include/asm-generic/poll.h
new file mode 100644 (file)
index 0000000..a969498
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef __ASM_GENERIC_POLL_H
+#define __ASM_GENERIC_POLL_H
+
+/* These are specified by iBCS2 */
+#define POLLIN         0x0001
+#define POLLPRI                0x0002
+#define POLLOUT                0x0004
+#define POLLERR                0x0008
+#define POLLHUP                0x0010
+#define POLLNVAL       0x0020
+
+/* The rest seem to be more-or-less nonstandard. Check them! */
+#define POLLRDNORM     0x0040
+#define POLLRDBAND     0x0080
+#ifndef POLLWRNORM
+#define POLLWRNORM     0x0100
+#endif
+#ifndef POLLWRBAND
+#define POLLWRBAND     0x0200
+#endif
+#ifndef POLLMSG
+#define POLLMSG                0x0400
+#endif
+#ifndef POLLREMOVE
+#define POLLREMOVE     0x1000
+#endif
+#ifndef POLLRDHUP
+#define POLLRDHUP       0x2000
+#endif
+
+#define POLLFREE       0x4000  /* currently only for epoll */
+
+#define POLL_BUSY_LOOP 0x8000
+
+struct pollfd {
+       int fd;
+       short events;
+       short revents;
+};
+
+#endif /* __ASM_GENERIC_POLL_H */
diff --git a/lib/libdss-include/asm-generic/posix_types.h b/lib/libdss-include/asm-generic/posix_types.h
new file mode 100644 (file)
index 0000000..fe74fcc
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef __ASM_GENERIC_POSIX_TYPES_H
+#define __ASM_GENERIC_POSIX_TYPES_H
+
+#include <asm/bitsperlong.h>
+/*
+ * This file is generally used by user-level software, so you need to
+ * be a little careful about namespace pollution etc.
+ *
+ * First the types that are often defined in different ways across
+ * architectures, so that you can override them.
+ */
+
+#ifndef __kernel_long_t
+typedef long           __kernel_long_t;
+typedef unsigned long  __kernel_ulong_t;
+#endif
+
+#ifndef __kernel_ino_t
+typedef __kernel_ulong_t __kernel_ino_t;
+#endif
+
+#ifndef __kernel_mode_t
+typedef unsigned int   __kernel_mode_t;
+#endif
+
+#ifndef __kernel_pid_t
+typedef int            __kernel_pid_t;
+#endif
+
+#ifndef __kernel_ipc_pid_t
+typedef int            __kernel_ipc_pid_t;
+#endif
+
+#ifndef __kernel_uid_t
+typedef unsigned int   __kernel_uid_t;
+typedef unsigned int   __kernel_gid_t;
+#endif
+
+#ifndef __kernel_suseconds_t
+typedef __kernel_long_t                __kernel_suseconds_t;
+#endif
+
+#ifndef __kernel_daddr_t
+typedef int            __kernel_daddr_t;
+#endif
+
+#ifndef __kernel_uid32_t
+typedef unsigned int   __kernel_uid32_t;
+typedef unsigned int   __kernel_gid32_t;
+#endif
+
+#ifndef __kernel_old_uid_t
+typedef __kernel_uid_t __kernel_old_uid_t;
+typedef __kernel_gid_t __kernel_old_gid_t;
+#endif
+
+#ifndef __kernel_old_dev_t
+typedef unsigned int   __kernel_old_dev_t;
+#endif
+
+/*
+ * Most 32 bit architectures use "unsigned int" size_t,
+ * and all 64 bit architectures use "unsigned long" size_t.
+ */
+#ifndef __kernel_size_t
+#if __BITS_PER_LONG != 64
+typedef unsigned int   __kernel_size_t;
+typedef int            __kernel_ssize_t;
+typedef int            __kernel_ptrdiff_t;
+#else
+typedef __kernel_ulong_t __kernel_size_t;
+typedef __kernel_long_t        __kernel_ssize_t;
+typedef __kernel_long_t        __kernel_ptrdiff_t;
+#endif
+#endif
+
+#ifndef __kernel_fsid_t
+typedef struct {
+       int     val[2];
+} __kernel_fsid_t;
+#endif
+
+/*
+ * anything below here should be completely generic
+ */
+typedef __kernel_long_t        __kernel_off_t;
+typedef long long      __kernel_loff_t;
+typedef __kernel_long_t        __kernel_time_t;
+typedef __kernel_long_t        __kernel_clock_t;
+typedef int            __kernel_timer_t;
+typedef int            __kernel_clockid_t;
+typedef char *         __kernel_caddr_t;
+typedef unsigned short __kernel_uid16_t;
+typedef unsigned short __kernel_gid16_t;
+
+#endif /* __ASM_GENERIC_POSIX_TYPES_H */
diff --git a/lib/libdss-include/asm-generic/resource.h b/lib/libdss-include/asm-generic/resource.h
new file mode 100644 (file)
index 0000000..498fd28
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _ASM_GENERIC_RESOURCE_H
+#define _ASM_GENERIC_RESOURCE_H
+
+/*
+ * Resource limit IDs
+ *
+ * ( Compatibility detail: there are architectures that have
+ *   a different rlimit ID order in the 5-9 range and want
+ *   to keep that order for binary compatibility. The reasons
+ *   are historic and all new rlimits are identical across all
+ *   arches. If an arch has such special order for some rlimits
+ *   then it defines them prior including asm-generic/resource.h. )
+ */
+
+#define RLIMIT_CPU             0       /* CPU time in sec */
+#define RLIMIT_FSIZE           1       /* Maximum filesize */
+#define RLIMIT_DATA            2       /* max data size */
+#define RLIMIT_STACK           3       /* max stack size */
+#define RLIMIT_CORE            4       /* max core file size */
+
+#ifndef RLIMIT_RSS
+# define RLIMIT_RSS            5       /* max resident set size */
+#endif
+
+#ifndef RLIMIT_NPROC
+# define RLIMIT_NPROC          6       /* max number of processes */
+#endif
+
+#ifndef RLIMIT_NOFILE
+# define RLIMIT_NOFILE         7       /* max number of open files */
+#endif
+
+#ifndef RLIMIT_MEMLOCK
+# define RLIMIT_MEMLOCK                8       /* max locked-in-memory address space */
+#endif
+
+#ifndef RLIMIT_AS
+# define RLIMIT_AS             9       /* address space limit */
+#endif
+
+#define RLIMIT_LOCKS           10      /* maximum file locks held */
+#define RLIMIT_SIGPENDING      11      /* max number of pending signals */
+#define RLIMIT_MSGQUEUE                12      /* maximum bytes in POSIX mqueues */
+#define RLIMIT_NICE            13      /* max nice prio allowed to raise to
+                                          0-39 for nice level 19 .. -20 */
+#define RLIMIT_RTPRIO          14      /* maximum realtime priority */
+#define RLIMIT_RTTIME          15      /* timeout for RT tasks in us */
+#define RLIM_NLIMITS           16
+
+/*
+ * SuS says limits have to be unsigned.
+ * Which makes a ton more sense anyway.
+ *
+ * Some architectures override this (for compatibility reasons):
+ */
+#ifndef RLIM_INFINITY
+# define RLIM_INFINITY         (~0UL)
+#endif
+
+
+#endif /* _ASM_GENERIC_RESOURCE_H */
diff --git a/lib/libdss-include/asm-generic/sembuf.h b/lib/libdss-include/asm-generic/sembuf.h
new file mode 100644 (file)
index 0000000..4cb2c13
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef __ASM_GENERIC_SEMBUF_H
+#define __ASM_GENERIC_SEMBUF_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * The semid64_ds structure for x86 architecture.
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * semid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first two padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+struct semid64_ds {
+       struct ipc64_perm sem_perm;     /* permissions .. see ipc.h */
+       __kernel_time_t sem_otime;      /* last semop time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused1;
+#endif
+       __kernel_time_t sem_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused2;
+#endif
+       unsigned long   sem_nsems;      /* no. of semaphores in array */
+       unsigned long   __unused3;
+       unsigned long   __unused4;
+};
+
+#endif /* __ASM_GENERIC_SEMBUF_H */
diff --git a/lib/libdss-include/asm-generic/setup.h b/lib/libdss-include/asm-generic/setup.h
new file mode 100644 (file)
index 0000000..6fc26a5
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __ASM_GENERIC_SETUP_H
+#define __ASM_GENERIC_SETUP_H
+
+#define COMMAND_LINE_SIZE      512
+
+#endif /* __ASM_GENERIC_SETUP_H */
diff --git a/lib/libdss-include/asm-generic/shmbuf.h b/lib/libdss-include/asm-generic/shmbuf.h
new file mode 100644 (file)
index 0000000..7e9fb2f
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __ASM_GENERIC_SHMBUF_H
+#define __ASM_GENERIC_SHMBUF_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * The shmid64_ds structure for x86 architecture.
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * shmid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first two padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct shmid64_ds {
+       struct ipc64_perm       shm_perm;       /* operation perms */
+       size_t                  shm_segsz;      /* size of segment (bytes) */
+       __kernel_time_t         shm_atime;      /* last attach time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused1;
+#endif
+       __kernel_time_t         shm_dtime;      /* last detach time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused2;
+#endif
+       __kernel_time_t         shm_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused3;
+#endif
+       __kernel_pid_t          shm_cpid;       /* pid of creator */
+       __kernel_pid_t          shm_lpid;       /* pid of last operator */
+       __kernel_ulong_t        shm_nattch;     /* no. of current attaches */
+       __kernel_ulong_t        __unused4;
+       __kernel_ulong_t        __unused5;
+};
+
+struct shminfo64 {
+       __kernel_ulong_t        shmmax;
+       __kernel_ulong_t        shmmin;
+       __kernel_ulong_t        shmmni;
+       __kernel_ulong_t        shmseg;
+       __kernel_ulong_t        shmall;
+       __kernel_ulong_t        __unused1;
+       __kernel_ulong_t        __unused2;
+       __kernel_ulong_t        __unused3;
+       __kernel_ulong_t        __unused4;
+};
+
+#endif /* __ASM_GENERIC_SHMBUF_H */
diff --git a/lib/libdss-include/asm-generic/shmparam.h b/lib/libdss-include/asm-generic/shmparam.h
new file mode 100644 (file)
index 0000000..51a3852
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __ASM_GENERIC_SHMPARAM_H
+#define __ASM_GENERIC_SHMPARAM_H
+
+#define SHMLBA PAGE_SIZE        /* attach addr a multiple of this */
+
+#endif /* _ASM_GENERIC_SHMPARAM_H */
diff --git a/lib/libdss-include/asm-generic/siginfo.h b/lib/libdss-include/asm-generic/siginfo.h
new file mode 100644 (file)
index 0000000..ac972ad
--- /dev/null
@@ -0,0 +1,303 @@
+#ifndef _ASM_GENERIC_SIGINFO_H
+#define _ASM_GENERIC_SIGINFO_H
+
+
+#include <linux/types.h>
+
+typedef union sigval {
+       int sival_int;
+       void *sival_ptr;
+} sigval_t;
+
+/*
+ * This is the size (including padding) of the part of the
+ * struct siginfo that is before the union.
+ */
+#ifndef __ARCH_SI_PREAMBLE_SIZE
+#define __ARCH_SI_PREAMBLE_SIZE        (3 * sizeof(int))
+#endif
+
+#define SI_MAX_SIZE    128
+#ifndef SI_PAD_SIZE
+#define SI_PAD_SIZE    ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
+#endif
+
+#ifndef __ARCH_SI_UID_T
+#define __ARCH_SI_UID_T        __kernel_uid32_t
+#endif
+
+/*
+ * The default "si_band" type is "long", as specified by POSIX.
+ * However, some architectures want to override this to "int"
+ * for historical compatibility reasons, so we allow that.
+ */
+#ifndef __ARCH_SI_BAND_T
+#define __ARCH_SI_BAND_T long
+#endif
+
+#ifndef __ARCH_SI_CLOCK_T
+#define __ARCH_SI_CLOCK_T __kernel_clock_t
+#endif
+
+#ifndef __ARCH_SI_ATTRIBUTES
+#define __ARCH_SI_ATTRIBUTES
+#endif
+
+#ifndef HAVE_ARCH_SIGINFO_T
+
+typedef struct siginfo {
+       int si_signo;
+       int si_errno;
+       int si_code;
+
+       union {
+               int _pad[SI_PAD_SIZE];
+
+               /* kill() */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+               } _kill;
+
+               /* POSIX.1b timers */
+               struct {
+                       __kernel_timer_t _tid;  /* timer id */
+                       int _overrun;           /* overrun count */
+                       char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
+                       sigval_t _sigval;       /* same as below */
+                       int _sys_private;       /* not to be passed to user */
+               } _timer;
+
+               /* POSIX.1b signals */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+                       sigval_t _sigval;
+               } _rt;
+
+               /* SIGCHLD */
+               struct {
+                       __kernel_pid_t _pid;    /* which child */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+                       int _status;            /* exit code */
+                       __ARCH_SI_CLOCK_T _utime;
+                       __ARCH_SI_CLOCK_T _stime;
+               } _sigchld;
+
+               /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+               struct {
+                       void *_addr; /* faulting insn/memory ref. */
+#ifdef __ARCH_SI_TRAPNO
+                       int _trapno;    /* TRAP # which caused the signal */
+#endif
+                       short _addr_lsb; /* LSB of the reported address */
+                       struct {
+                               void *_lower;
+                               void *_upper;
+                       } _addr_bnd;
+               } _sigfault;
+
+               /* SIGPOLL */
+               struct {
+                       __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
+                       int _fd;
+               } _sigpoll;
+
+               /* SIGSYS */
+               struct {
+                       void *_call_addr; /* calling user insn */
+                       int _syscall;   /* triggering system call number */
+                       unsigned int _arch;     /* AUDIT_ARCH_* of syscall */
+               } _sigsys;
+       } _sifields;
+} __ARCH_SI_ATTRIBUTES siginfo_t;
+
+/* If the arch shares siginfo, then it has SIGSYS. */
+#define __ARCH_SIGSYS
+#endif
+
+/*
+ * How these fields are to be accessed.
+ */
+#define si_pid         _sifields._kill._pid
+#define si_uid         _sifields._kill._uid
+#define si_tid         _sifields._timer._tid
+#define si_overrun     _sifields._timer._overrun
+#define si_sys_private  _sifields._timer._sys_private
+#define si_status      _sifields._sigchld._status
+#define si_utime       _sifields._sigchld._utime
+#define si_stime       _sifields._sigchld._stime
+#define si_value       _sifields._rt._sigval
+#define si_int         _sifields._rt._sigval.sival_int
+#define si_ptr         _sifields._rt._sigval.sival_ptr
+#define si_addr                _sifields._sigfault._addr
+#ifdef __ARCH_SI_TRAPNO
+#define si_trapno      _sifields._sigfault._trapno
+#endif
+#define si_addr_lsb    _sifields._sigfault._addr_lsb
+#define si_lower       _sifields._sigfault._addr_bnd._lower
+#define si_upper       _sifields._sigfault._addr_bnd._upper
+#define si_band                _sifields._sigpoll._band
+#define si_fd          _sifields._sigpoll._fd
+#ifdef __ARCH_SIGSYS
+#define si_call_addr   _sifields._sigsys._call_addr
+#define si_syscall     _sifields._sigsys._syscall
+#define si_arch                _sifields._sigsys._arch
+#endif
+
+#define __SI_KILL      0
+#define __SI_TIMER     0
+#define __SI_POLL      0
+#define __SI_FAULT     0
+#define __SI_CHLD      0
+#define __SI_RT                0
+#define __SI_MESGQ     0
+#define __SI_SYS       0
+#define __SI_CODE(T,N) (N)
+
+/*
+ * si_code values
+ * Digital reserves positive values for kernel-generated signals.
+ */
+#define SI_USER                0               /* sent by kill, sigsend, raise */
+#define SI_KERNEL      0x80            /* sent by the kernel from somewhere */
+#define SI_QUEUE       -1              /* sent by sigqueue */
+#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
+#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
+#define SI_ASYNCIO     -4              /* sent by AIO completion */
+#define SI_SIGIO       -5              /* sent by queued SIGIO */
+#define SI_TKILL       -6              /* sent by tkill system call */
+#define SI_DETHREAD    -7              /* sent by execve() killing subsidiary threads */
+
+#define SI_FROMUSER(siptr)     ((siptr)->si_code <= 0)
+#define SI_FROMKERNEL(siptr)   ((siptr)->si_code > 0)
+
+/*
+ * SIGILL si_codes
+ */
+#define ILL_ILLOPC     (__SI_FAULT|1)  /* illegal opcode */
+#define ILL_ILLOPN     (__SI_FAULT|2)  /* illegal operand */
+#define ILL_ILLADR     (__SI_FAULT|3)  /* illegal addressing mode */
+#define ILL_ILLTRP     (__SI_FAULT|4)  /* illegal trap */
+#define ILL_PRVOPC     (__SI_FAULT|5)  /* privileged opcode */
+#define ILL_PRVREG     (__SI_FAULT|6)  /* privileged register */
+#define ILL_COPROC     (__SI_FAULT|7)  /* coprocessor error */
+#define ILL_BADSTK     (__SI_FAULT|8)  /* internal stack error */
+#define NSIGILL                8
+
+/*
+ * SIGFPE si_codes
+ */
+#define FPE_INTDIV     (__SI_FAULT|1)  /* integer divide by zero */
+#define FPE_INTOVF     (__SI_FAULT|2)  /* integer overflow */
+#define FPE_FLTDIV     (__SI_FAULT|3)  /* floating point divide by zero */
+#define FPE_FLTOVF     (__SI_FAULT|4)  /* floating point overflow */
+#define FPE_FLTUND     (__SI_FAULT|5)  /* floating point underflow */
+#define FPE_FLTRES     (__SI_FAULT|6)  /* floating point inexact result */
+#define FPE_FLTINV     (__SI_FAULT|7)  /* floating point invalid operation */
+#define FPE_FLTSUB     (__SI_FAULT|8)  /* subscript out of range */
+#define NSIGFPE                8
+
+/*
+ * SIGSEGV si_codes
+ */
+#define SEGV_MAPERR    (__SI_FAULT|1)  /* address not mapped to object */
+#define SEGV_ACCERR    (__SI_FAULT|2)  /* invalid permissions for mapped object */
+#define SEGV_BNDERR    (__SI_FAULT|3)  /* failed address bound checks */
+#define NSIGSEGV       3
+
+/*
+ * SIGBUS si_codes
+ */
+#define BUS_ADRALN     (__SI_FAULT|1)  /* invalid address alignment */
+#define BUS_ADRERR     (__SI_FAULT|2)  /* non-existent physical address */
+#define BUS_OBJERR     (__SI_FAULT|3)  /* object specific hardware error */
+/* hardware memory error consumed on a machine check: action required */
+#define BUS_MCEERR_AR  (__SI_FAULT|4)
+/* hardware memory error detected in process but not consumed: action optional*/
+#define BUS_MCEERR_AO  (__SI_FAULT|5)
+#define NSIGBUS                5
+
+/*
+ * SIGTRAP si_codes
+ */
+#define TRAP_BRKPT     (__SI_FAULT|1)  /* process breakpoint */
+#define TRAP_TRACE     (__SI_FAULT|2)  /* process trace trap */
+#define TRAP_BRANCH     (__SI_FAULT|3)  /* process taken branch trap */
+#define TRAP_HWBKPT     (__SI_FAULT|4)  /* hardware breakpoint/watchpoint */
+#define NSIGTRAP       4
+
+/*
+ * SIGCHLD si_codes
+ */
+#define CLD_EXITED     (__SI_CHLD|1)   /* child has exited */
+#define CLD_KILLED     (__SI_CHLD|2)   /* child was killed */
+#define CLD_DUMPED     (__SI_CHLD|3)   /* child terminated abnormally */
+#define CLD_TRAPPED    (__SI_CHLD|4)   /* traced child has trapped */
+#define CLD_STOPPED    (__SI_CHLD|5)   /* child has stopped */
+#define CLD_CONTINUED  (__SI_CHLD|6)   /* stopped child has continued */
+#define NSIGCHLD       6
+
+/*
+ * SIGPOLL si_codes
+ */
+#define POLL_IN                (__SI_POLL|1)   /* data input available */
+#define POLL_OUT       (__SI_POLL|2)   /* output buffers available */
+#define POLL_MSG       (__SI_POLL|3)   /* input message available */
+#define POLL_ERR       (__SI_POLL|4)   /* i/o error */
+#define POLL_PRI       (__SI_POLL|5)   /* high priority input available */
+#define POLL_HUP       (__SI_POLL|6)   /* device disconnected */
+#define NSIGPOLL       6
+
+/*
+ * SIGSYS si_codes
+ */
+#define SYS_SECCOMP            (__SI_SYS|1)    /* seccomp triggered */
+#define NSIGSYS        1
+
+/*
+ * sigevent definitions
+ * 
+ * It seems likely that SIGEV_THREAD will have to be handled from 
+ * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
+ * thread manager then catches and does the appropriate nonsense.
+ * However, everything is written out here so as to not get lost.
+ */
+#define SIGEV_SIGNAL   0       /* notify via signal */
+#define SIGEV_NONE     1       /* other notification: meaningless */
+#define SIGEV_THREAD   2       /* deliver via thread creation */
+#define SIGEV_THREAD_ID 4      /* deliver to thread */
+
+/*
+ * This works because the alignment is ok on all current architectures
+ * but we leave open this being overridden in the future
+ */
+#ifndef __ARCH_SIGEV_PREAMBLE_SIZE
+#define __ARCH_SIGEV_PREAMBLE_SIZE     (sizeof(int) * 2 + sizeof(sigval_t))
+#endif
+
+#define SIGEV_MAX_SIZE 64
+#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE) \
+               / sizeof(int))
+
+typedef struct sigevent {
+       sigval_t sigev_value;
+       int sigev_signo;
+       int sigev_notify;
+       union {
+               int _pad[SIGEV_PAD_SIZE];
+                int _tid;
+
+               struct {
+                       void (*_function)(sigval_t);
+                       void *_attribute;       /* really pthread_attr_t */
+               } _sigev_thread;
+       } _sigev_un;
+} sigevent_t;
+
+#define sigev_notify_function  _sigev_un._sigev_thread._function
+#define sigev_notify_attributes        _sigev_un._sigev_thread._attribute
+#define sigev_notify_thread_id  _sigev_un._tid
+
+
+#endif /* _ASM_GENERIC_SIGINFO_H */
diff --git a/lib/libdss-include/asm-generic/signal-defs.h b/lib/libdss-include/asm-generic/signal-defs.h
new file mode 100644 (file)
index 0000000..04cfb6d
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef __ASM_GENERIC_SIGNAL_DEFS_H
+#define __ASM_GENERIC_SIGNAL_DEFS_H
+
+
+
+#ifndef SIG_BLOCK
+#define SIG_BLOCK          0   /* for blocking signals */
+#endif
+#ifndef SIG_UNBLOCK
+#define SIG_UNBLOCK        1   /* for unblocking signals */
+#endif
+#ifndef SIG_SETMASK
+#define SIG_SETMASK        2   /* for setting the signal mask */
+#endif
+
+#ifndef __ASSEMBLY__
+typedef void __signalfn_t(int);
+typedef __signalfn_t *__sighandler_t;
+
+typedef void __restorefn_t(void);
+typedef __restorefn_t *__sigrestore_t;
+
+#define SIG_DFL        ((__sighandler_t)0)     /* default signal handling */
+#define SIG_IGN        ((__sighandler_t)1)     /* ignore signal */
+#define SIG_ERR        ((__sighandler_t)-1)    /* error return from signal */
+#endif
+
+#endif /* __ASM_GENERIC_SIGNAL_DEFS_H */
diff --git a/lib/libdss-include/asm-generic/signal.h b/lib/libdss-include/asm-generic/signal.h
new file mode 100644 (file)
index 0000000..08c462c
--- /dev/null
@@ -0,0 +1,119 @@
+#ifndef __ASM_GENERIC_SIGNAL_H
+#define __ASM_GENERIC_SIGNAL_H
+
+#include <linux/types.h>
+
+#define _NSIG          64
+#define _NSIG_BPW      __BITS_PER_LONG
+#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
+
+#define SIGHUP          1
+#define SIGINT          2
+#define SIGQUIT                 3
+#define SIGILL          4
+#define SIGTRAP                 5
+#define SIGABRT                 6
+#define SIGIOT          6
+#define SIGBUS          7
+#define SIGFPE          8
+#define SIGKILL                 9
+#define SIGUSR1                10
+#define SIGSEGV                11
+#define SIGUSR2                12
+#define SIGPIPE                13
+#define SIGALRM                14
+#define SIGTERM                15
+#define SIGSTKFLT      16
+#define SIGCHLD                17
+#define SIGCONT                18
+#define SIGSTOP                19
+#define SIGTSTP                20
+#define SIGTTIN                21
+#define SIGTTOU                22
+#define SIGURG         23
+#define SIGXCPU                24
+#define SIGXFSZ                25
+#define SIGVTALRM      26
+#define SIGPROF                27
+#define SIGWINCH       28
+#define SIGIO          29
+#define SIGPOLL                SIGIO
+/*
+#define SIGLOST                29
+*/
+#define SIGPWR         30
+#define SIGSYS         31
+#define        SIGUNUSED       31
+
+/* These should not be considered constants from userland.  */
+#define SIGRTMIN       32
+#ifndef SIGRTMAX
+#define SIGRTMAX       _NSIG
+#endif
+
+/*
+ * SA_FLAGS values:
+ *
+ * SA_ONSTACK indicates that a registered stack_t will be used.
+ * SA_RESTART flag to get restarting signals (which were the default long ago)
+ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
+ * SA_RESETHAND clears the handler when the signal is delivered.
+ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
+ * SA_NODEFER prevents the current signal from being masked in the handler.
+ *
+ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
+ * Unix names RESETHAND and NODEFER respectively.
+ */
+#define SA_NOCLDSTOP   0x00000001
+#define SA_NOCLDWAIT   0x00000002
+#define SA_SIGINFO     0x00000004
+#define SA_ONSTACK     0x08000000
+#define SA_RESTART     0x10000000
+#define SA_NODEFER     0x40000000
+#define SA_RESETHAND   0x80000000
+
+#define SA_NOMASK      SA_NODEFER
+#define SA_ONESHOT     SA_RESETHAND
+
+/*
+ * New architectures should not define the obsolete
+ *     SA_RESTORER     0x04000000
+ */
+
+#if !defined MINSIGSTKSZ || !defined SIGSTKSZ
+#define MINSIGSTKSZ    2048
+#define SIGSTKSZ       8192
+#endif
+
+#ifndef __ASSEMBLY__
+typedef struct {
+       unsigned long sig[_NSIG_WORDS];
+} sigset_t;
+
+/* not actually used, but required for linux/syscalls.h */
+typedef unsigned long old_sigset_t;
+
+#include <asm-generic/signal-defs.h>
+
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
+struct sigaction {
+       __sighandler_t sa_handler;
+       unsigned long sa_flags;
+#ifdef SA_RESTORER
+       __sigrestore_t sa_restorer;
+#endif
+       sigset_t sa_mask;               /* mask last for extensibility */
+};
+
+typedef struct sigaltstack {
+       void *ss_sp;
+       int ss_flags;
+       size_t ss_size;
+} stack_t;
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_GENERIC_SIGNAL_H */
diff --git a/lib/libdss-include/asm-generic/socket.h b/lib/libdss-include/asm-generic/socket.h
new file mode 100644 (file)
index 0000000..5c15c2a
--- /dev/null
@@ -0,0 +1,90 @@
+#ifndef __ASM_GENERIC_SOCKET_H
+#define __ASM_GENERIC_SOCKET_H
+
+#include <asm/sockios.h>
+
+/* For setsockopt(2) */
+#define SOL_SOCKET     1
+
+#define SO_DEBUG       1
+#define SO_REUSEADDR   2
+#define SO_TYPE                3
+#define SO_ERROR       4
+#define SO_DONTROUTE   5
+#define SO_BROADCAST   6
+#define SO_SNDBUF      7
+#define SO_RCVBUF      8
+#define SO_SNDBUFFORCE 32
+#define SO_RCVBUFFORCE 33
+#define SO_KEEPALIVE   9
+#define SO_OOBINLINE   10
+#define SO_NO_CHECK    11
+#define SO_PRIORITY    12
+#define SO_LINGER      13
+#define SO_BSDCOMPAT   14
+#define SO_REUSEPORT   15
+#ifndef SO_PASSCRED /* powerpc only differs in these */
+#define SO_PASSCRED    16
+#define SO_PEERCRED    17
+#define SO_RCVLOWAT    18
+#define SO_SNDLOWAT    19
+#define SO_RCVTIMEO    20
+#define SO_SNDTIMEO    21
+#endif
+
+/* Security levels - as per NRL IPv6 - don't actually do anything */
+#define SO_SECURITY_AUTHENTICATION             22
+#define SO_SECURITY_ENCRYPTION_TRANSPORT       23
+#define SO_SECURITY_ENCRYPTION_NETWORK         24
+
+#define SO_BINDTODEVICE        25
+
+/* Socket filtering */
+#define SO_ATTACH_FILTER       26
+#define SO_DETACH_FILTER       27
+#define SO_GET_FILTER          SO_ATTACH_FILTER
+
+#define SO_PEERNAME            28
+#define SO_TIMESTAMP           29
+#define SCM_TIMESTAMP          SO_TIMESTAMP
+
+#define SO_ACCEPTCONN          30
+
+#define SO_PEERSEC             31
+#define SO_PASSSEC             34
+#define SO_TIMESTAMPNS         35
+#define SCM_TIMESTAMPNS                SO_TIMESTAMPNS
+
+#define SO_MARK                        36
+
+#define SO_TIMESTAMPING                37
+#define SCM_TIMESTAMPING       SO_TIMESTAMPING
+
+#define SO_PROTOCOL            38
+#define SO_DOMAIN              39
+
+#define SO_RXQ_OVFL             40
+
+#define SO_WIFI_STATUS         41
+#define SCM_WIFI_STATUS        SO_WIFI_STATUS
+#define SO_PEEK_OFF            42
+
+/* Instruct lower device to use last 4-bytes of skb data as FCS */
+#define SO_NOFCS               43
+
+#define SO_LOCK_FILTER         44
+
+#define SO_SELECT_ERR_QUEUE    45
+
+#define SO_BUSY_POLL           46
+
+#define SO_MAX_PACING_RATE     47
+
+#define SO_BPF_EXTENSIONS      48
+
+#define SO_INCOMING_CPU                49
+
+#define SO_ATTACH_BPF          50
+#define SO_DETACH_BPF          SO_DETACH_FILTER
+
+#endif /* __ASM_GENERIC_SOCKET_H */
diff --git a/lib/libdss-include/asm-generic/sockios.h b/lib/libdss-include/asm-generic/sockios.h
new file mode 100644 (file)
index 0000000..9a61a36
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __ASM_GENERIC_SOCKIOS_H
+#define __ASM_GENERIC_SOCKIOS_H
+
+/* Socket-level I/O control calls. */
+#define FIOSETOWN      0x8901
+#define SIOCSPGRP      0x8902
+#define FIOGETOWN      0x8903
+#define SIOCGPGRP      0x8904
+#define SIOCATMARK     0x8905
+#define SIOCGSTAMP     0x8906          /* Get stamp (timeval) */
+#define SIOCGSTAMPNS   0x8907          /* Get stamp (timespec) */
+
+#endif /* __ASM_GENERIC_SOCKIOS_H */
diff --git a/lib/libdss-include/asm-generic/stat.h b/lib/libdss-include/asm-generic/stat.h
new file mode 100644 (file)
index 0000000..bd8cad2
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef __ASM_GENERIC_STAT_H
+#define __ASM_GENERIC_STAT_H
+
+/*
+ * Everybody gets this wrong and has to stick with it for all
+ * eternity. Hopefully, this version gets used by new architectures
+ * so they don't fall into the same traps.
+ *
+ * stat64 is copied from powerpc64, with explicit padding added.
+ * stat is the same structure layout on 64-bit, without the 'long long'
+ * types.
+ *
+ * By convention, 64 bit architectures use the stat interface, while
+ * 32 bit architectures use the stat64 interface. Note that we don't
+ * provide an __old_kernel_stat here, which new architecture should
+ * not have to start with.
+ */
+
+#include <asm/bitsperlong.h>
+
+#define STAT_HAVE_NSEC 1
+
+struct stat {
+       unsigned long   st_dev;         /* Device.  */
+       unsigned long   st_ino;         /* File serial number.  */
+       unsigned int    st_mode;        /* File mode.  */
+       unsigned int    st_nlink;       /* Link count.  */
+       unsigned int    st_uid;         /* User ID of the file's owner.  */
+       unsigned int    st_gid;         /* Group ID of the file's group. */
+       unsigned long   st_rdev;        /* Device number, if device.  */
+       unsigned long   __pad1;
+       long            st_size;        /* Size of file, in bytes.  */
+       int             st_blksize;     /* Optimal block size for I/O.  */
+       int             __pad2;
+       long            st_blocks;      /* Number 512-byte blocks allocated. */
+       long            st_atime;       /* Time of last access.  */
+       unsigned long   st_atime_nsec;
+       long            st_mtime;       /* Time of last modification.  */
+       unsigned long   st_mtime_nsec;
+       long            st_ctime;       /* Time of last status change.  */
+       unsigned long   st_ctime_nsec;
+       unsigned int    __unused4;
+       unsigned int    __unused5;
+};
+
+/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
+#if __BITS_PER_LONG != 64 || defined(__ARCH_WANT_STAT64)
+struct stat64 {
+       unsigned long long st_dev;      /* Device.  */
+       unsigned long long st_ino;      /* File serial number.  */
+       unsigned int    st_mode;        /* File mode.  */
+       unsigned int    st_nlink;       /* Link count.  */
+       unsigned int    st_uid;         /* User ID of the file's owner.  */
+       unsigned int    st_gid;         /* Group ID of the file's group. */
+       unsigned long long st_rdev;     /* Device number, if device.  */
+       unsigned long long __pad1;
+       long long       st_size;        /* Size of file, in bytes.  */
+       int             st_blksize;     /* Optimal block size for I/O.  */
+       int             __pad2;
+       long long       st_blocks;      /* Number 512-byte blocks allocated. */
+       int             st_atime;       /* Time of last access.  */
+       unsigned int    st_atime_nsec;
+       int             st_mtime;       /* Time of last modification.  */
+       unsigned int    st_mtime_nsec;
+       int             st_ctime;       /* Time of last status change.  */
+       unsigned int    st_ctime_nsec;
+       unsigned int    __unused4;
+       unsigned int    __unused5;
+};
+#endif
+
+#endif /* __ASM_GENERIC_STAT_H */
diff --git a/lib/libdss-include/asm-generic/statfs.h b/lib/libdss-include/asm-generic/statfs.h
new file mode 100644 (file)
index 0000000..6877912
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _GENERIC_STATFS_H
+#define _GENERIC_STATFS_H
+
+#include <linux/types.h>
+
+
+/*
+ * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
+ * Yes, they differ in signedness as well as size.
+ * Special cases can override it for themselves -- except for S390x, which
+ * is just a little too special for us. And MIPS, which I'm not touching
+ * with a 10' pole.
+ */
+#ifndef __statfs_word
+#if __BITS_PER_LONG == 64
+#define __statfs_word __kernel_long_t
+#else
+#define __statfs_word __u32
+#endif
+#endif
+
+struct statfs {
+       __statfs_word f_type;
+       __statfs_word f_bsize;
+       __statfs_word f_blocks;
+       __statfs_word f_bfree;
+       __statfs_word f_bavail;
+       __statfs_word f_files;
+       __statfs_word f_ffree;
+       __kernel_fsid_t f_fsid;
+       __statfs_word f_namelen;
+       __statfs_word f_frsize;
+       __statfs_word f_flags;
+       __statfs_word f_spare[4];
+};
+
+/*
+ * ARM needs to avoid the 32-bit padding at the end, for consistency
+ * between EABI and OABI 
+ */
+#ifndef ARCH_PACK_STATFS64
+#define ARCH_PACK_STATFS64
+#endif
+
+struct statfs64 {
+       __statfs_word f_type;
+       __statfs_word f_bsize;
+       __u64 f_blocks;
+       __u64 f_bfree;
+       __u64 f_bavail;
+       __u64 f_files;
+       __u64 f_ffree;
+       __kernel_fsid_t f_fsid;
+       __statfs_word f_namelen;
+       __statfs_word f_frsize;
+       __statfs_word f_flags;
+       __statfs_word f_spare[4];
+} ARCH_PACK_STATFS64;
+
+/* 
+ * IA64 and x86_64 need to avoid the 32-bit padding at the end,
+ * to be compatible with the i386 ABI
+ */
+#ifndef ARCH_PACK_COMPAT_STATFS64
+#define ARCH_PACK_COMPAT_STATFS64
+#endif
+
+struct compat_statfs64 {
+       __u32 f_type;
+       __u32 f_bsize;
+       __u64 f_blocks;
+       __u64 f_bfree;
+       __u64 f_bavail;
+       __u64 f_files;
+       __u64 f_ffree;
+       __kernel_fsid_t f_fsid;
+       __u32 f_namelen;
+       __u32 f_frsize;
+       __u32 f_flags;
+       __u32 f_spare[4];
+} ARCH_PACK_COMPAT_STATFS64;
+
+#endif /* _GENERIC_STATFS_H */
diff --git a/lib/libdss-include/asm-generic/swab.h b/lib/libdss-include/asm-generic/swab.h
new file mode 100644 (file)
index 0000000..a8e9029
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _ASM_GENERIC_SWAB_H
+#define _ASM_GENERIC_SWAB_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * 32 bit architectures typically (but not always) want to
+ * set __SWAB_64_THRU_32__. In user space, this is only
+ * valid if the compiler supports 64 bit data types.
+ */
+
+#if __BITS_PER_LONG == 32
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
+#define __SWAB_64_THRU_32__
+#endif
+#endif
+
+#endif /* _ASM_GENERIC_SWAB_H */
diff --git a/lib/libdss-include/asm-generic/termbits.h b/lib/libdss-include/asm-generic/termbits.h
new file mode 100644 (file)
index 0000000..232b478
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef __ASM_GENERIC_TERMBITS_H
+#define __ASM_GENERIC_TERMBITS_H
+
+#include <linux/posix_types.h>
+
+typedef unsigned char  cc_t;
+typedef unsigned int   speed_t;
+typedef unsigned int   tcflag_t;
+
+#define NCCS 19
+struct termios {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+};
+
+struct termios2 {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
+struct ktermios {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
+/* c_cc characters */
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+
+/* c_iflag bits */
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK  0000020
+#define ISTRIP 0000040
+#define INLCR  0000100
+#define IGNCR  0000200
+#define ICRNL  0000400
+#define IUCLC  0001000
+#define IXON   0002000
+#define IXANY  0004000
+#define IXOFF  0010000
+#define IMAXBEL        0020000
+#define IUTF8  0040000
+
+/* c_oflag bits */
+#define OPOST  0000001
+#define OLCUC  0000002
+#define ONLCR  0000004
+#define OCRNL  0000010
+#define ONOCR  0000020
+#define ONLRET 0000040
+#define OFILL  0000100
+#define OFDEL  0000200
+#define NLDLY  0000400
+#define   NL0  0000000
+#define   NL1  0000400
+#define CRDLY  0003000
+#define   CR0  0000000
+#define   CR1  0001000
+#define   CR2  0002000
+#define   CR3  0003000
+#define TABDLY 0014000
+#define   TAB0 0000000
+#define   TAB1 0004000
+#define   TAB2 0010000
+#define   TAB3 0014000
+#define   XTABS        0014000
+#define BSDLY  0020000
+#define   BS0  0000000
+#define   BS1  0020000
+#define VTDLY  0040000
+#define   VT0  0000000
+#define   VT1  0040000
+#define FFDLY  0100000
+#define   FF0  0000000
+#define   FF1  0100000
+
+/* c_cflag bit meaning */
+#define CBAUD  0010017
+#define  B0    0000000         /* hang up */
+#define  B50   0000001
+#define  B75   0000002
+#define  B110  0000003
+#define  B134  0000004
+#define  B150  0000005
+#define  B200  0000006
+#define  B300  0000007
+#define  B600  0000010
+#define  B1200 0000011
+#define  B1800 0000012
+#define  B2400 0000013
+#define  B4800 0000014
+#define  B9600 0000015
+#define  B19200        0000016
+#define  B38400        0000017
+#define EXTA B19200
+#define EXTB B38400
+#define CSIZE  0000060
+#define   CS5  0000000
+#define   CS6  0000020
+#define   CS7  0000040
+#define   CS8  0000060
+#define CSTOPB 0000100
+#define CREAD  0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL  0002000
+#define CLOCAL 0004000
+#define CBAUDEX 0010000
+#define    BOTHER 0010000
+#define    B57600 0010001
+#define   B115200 0010002
+#define   B230400 0010003
+#define   B460800 0010004
+#define   B500000 0010005
+#define   B576000 0010006
+#define   B921600 0010007
+#define  B1000000 0010010
+#define  B1152000 0010011
+#define  B1500000 0010012
+#define  B2000000 0010013
+#define  B2500000 0010014
+#define  B3000000 0010015
+#define  B3500000 0010016
+#define  B4000000 0010017
+#define CIBAUD   002003600000  /* input baud rate */
+#define CMSPAR   010000000000  /* mark or space (stick) parity */
+#define CRTSCTS          020000000000  /* flow control */
+
+#define IBSHIFT          16            /* Shift from CBAUD to CIBAUD */
+
+/* c_lflag bits */
+#define ISIG   0000001
+#define ICANON 0000002
+#define XCASE  0000004
+#define ECHO   0000010
+#define ECHOE  0000020
+#define ECHOK  0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define TOSTOP 0000400
+#define ECHOCTL        0001000
+#define ECHOPRT        0002000
+#define ECHOKE 0004000
+#define FLUSHO 0010000
+#define PENDIN 0040000
+#define IEXTEN 0100000
+#define EXTPROC        0200000
+
+/* tcflow() and TCXONC use these */
+#define        TCOOFF          0
+#define        TCOON           1
+#define        TCIOFF          2
+#define        TCION           3
+
+/* tcflush() and TCFLSH use these */
+#define        TCIFLUSH        0
+#define        TCOFLUSH        1
+#define        TCIOFLUSH       2
+
+/* tcsetattr uses these */
+#define        TCSANOW         0
+#define        TCSADRAIN       1
+#define        TCSAFLUSH       2
+
+#endif /* __ASM_GENERIC_TERMBITS_H */
diff --git a/lib/libdss-include/asm-generic/termios.h b/lib/libdss-include/asm-generic/termios.h
new file mode 100644 (file)
index 0000000..1c1166a
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef _ASM_GENERIC_TERMIOS_H
+#define _ASM_GENERIC_TERMIOS_H
+/*
+ * Most architectures have straight copies of the x86 code, with
+ * varying levels of bug fixes on top. Usually it's a good idea
+ * to use this generic version instead, but be careful to avoid
+ * ABI changes.
+ * New architectures should not provide their own version.
+ */
+
+#include <asm/termbits.h>
+#include <asm/ioctls.h>
+
+struct winsize {
+       unsigned short ws_row;
+       unsigned short ws_col;
+       unsigned short ws_xpixel;
+       unsigned short ws_ypixel;
+};
+
+#define NCC 8
+struct termio {
+       unsigned short c_iflag;         /* input mode flags */
+       unsigned short c_oflag;         /* output mode flags */
+       unsigned short c_cflag;         /* control mode flags */
+       unsigned short c_lflag;         /* local mode flags */
+       unsigned char c_line;           /* line discipline */
+       unsigned char c_cc[NCC];        /* control characters */
+};
+
+/* modem lines */
+#define TIOCM_LE       0x001
+#define TIOCM_DTR      0x002
+#define TIOCM_RTS      0x004
+#define TIOCM_ST       0x008
+#define TIOCM_SR       0x010
+#define TIOCM_CTS      0x020
+#define TIOCM_CAR      0x040
+#define TIOCM_RNG      0x080
+#define TIOCM_DSR      0x100
+#define TIOCM_CD       TIOCM_CAR
+#define TIOCM_RI       TIOCM_RNG
+#define TIOCM_OUT1     0x2000
+#define TIOCM_OUT2     0x4000
+#define TIOCM_LOOP     0x8000
+
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+
+
+#endif /* _ASM_GENERIC_TERMIOS_H */
diff --git a/lib/libdss-include/asm-generic/types.h b/lib/libdss-include/asm-generic/types.h
new file mode 100644 (file)
index 0000000..a387792
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _ASM_GENERIC_TYPES_H
+#define _ASM_GENERIC_TYPES_H
+/*
+ * int-ll64 is used everywhere now.
+ */
+#include <asm-generic/int-ll64.h>
+
+#endif /* _ASM_GENERIC_TYPES_H */
diff --git a/lib/libdss-include/asm-generic/ucontext.h b/lib/libdss-include/asm-generic/ucontext.h
new file mode 100644 (file)
index 0000000..ad77343
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __ASM_GENERIC_UCONTEXT_H
+#define __ASM_GENERIC_UCONTEXT_H
+
+struct ucontext {
+       unsigned long     uc_flags;
+       struct ucontext  *uc_link;
+       stack_t           uc_stack;
+       struct sigcontext uc_mcontext;
+       sigset_t          uc_sigmask;   /* mask last for extensibility */
+};
+
+#endif /* __ASM_GENERIC_UCONTEXT_H */
diff --git a/lib/libdss-include/asm-generic/unistd.h b/lib/libdss-include/asm-generic/unistd.h
new file mode 100644 (file)
index 0000000..1324b02
--- /dev/null
@@ -0,0 +1,927 @@
+#include <asm/bitsperlong.h>
+
+/*
+ * This file contains the system call numbers, based on the
+ * layout of the x86-64 architecture, which embeds the
+ * pointer to the syscall in the table.
+ *
+ * As a basic principle, no duplication of functionality
+ * should be added, e.g. we don't use lseek when llseek
+ * is present. New architectures should use this file
+ * and implement the less feature-full calls in user space.
+ */
+
+#ifndef __SYSCALL
+#define __SYSCALL(x, y)
+#endif
+
+#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)
+#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32)
+#else
+#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64)
+#endif
+
+#ifdef __SYSCALL_COMPAT
+#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp)
+#define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp)
+#else
+#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys)
+#define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64)
+#endif
+
+#define __NR_io_setup 0
+__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup)
+#define __NR_io_destroy 1
+__SYSCALL(__NR_io_destroy, sys_io_destroy)
+#define __NR_io_submit 2
+__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit)
+#define __NR_io_cancel 3
+__SYSCALL(__NR_io_cancel, sys_io_cancel)
+#define __NR_io_getevents 4
+__SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents)
+
+/* fs/xattr.c */
+#define __NR_setxattr 5
+__SYSCALL(__NR_setxattr, sys_setxattr)
+#define __NR_lsetxattr 6
+__SYSCALL(__NR_lsetxattr, sys_lsetxattr)
+#define __NR_fsetxattr 7
+__SYSCALL(__NR_fsetxattr, sys_fsetxattr)
+#define __NR_getxattr 8
+__SYSCALL(__NR_getxattr, sys_getxattr)
+#define __NR_lgetxattr 9
+__SYSCALL(__NR_lgetxattr, sys_lgetxattr)
+#define __NR_fgetxattr 10
+__SYSCALL(__NR_fgetxattr, sys_fgetxattr)
+#define __NR_listxattr 11
+__SYSCALL(__NR_listxattr, sys_listxattr)
+#define __NR_llistxattr 12
+__SYSCALL(__NR_llistxattr, sys_llistxattr)
+#define __NR_flistxattr 13
+__SYSCALL(__NR_flistxattr, sys_flistxattr)
+#define __NR_removexattr 14
+__SYSCALL(__NR_removexattr, sys_removexattr)
+#define __NR_lremovexattr 15
+__SYSCALL(__NR_lremovexattr, sys_lremovexattr)
+#define __NR_fremovexattr 16
+__SYSCALL(__NR_fremovexattr, sys_fremovexattr)
+
+/* fs/dcache.c */
+#define __NR_getcwd 17
+__SYSCALL(__NR_getcwd, sys_getcwd)
+
+/* fs/cookies.c */
+#define __NR_lookup_dcookie 18
+__SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie)
+
+/* fs/eventfd.c */
+#define __NR_eventfd2 19
+__SYSCALL(__NR_eventfd2, sys_eventfd2)
+
+/* fs/eventpoll.c */
+#define __NR_epoll_create1 20
+__SYSCALL(__NR_epoll_create1, sys_epoll_create1)
+#define __NR_epoll_ctl 21
+__SYSCALL(__NR_epoll_ctl, sys_epoll_ctl)
+#define __NR_epoll_pwait 22
+__SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait)
+
+/* fs/fcntl.c */
+#define __NR_dup 23
+__SYSCALL(__NR_dup, sys_dup)
+#define __NR_dup3 24
+__SYSCALL(__NR_dup3, sys_dup3)
+#define __NR3264_fcntl 25
+__SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64)
+
+/* fs/inotify_user.c */
+#define __NR_inotify_init1 26
+__SYSCALL(__NR_inotify_init1, sys_inotify_init1)
+#define __NR_inotify_add_watch 27
+__SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch)
+#define __NR_inotify_rm_watch 28
+__SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch)
+
+/* fs/ioctl.c */
+#define __NR_ioctl 29
+__SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl)
+
+/* fs/ioprio.c */
+#define __NR_ioprio_set 30
+__SYSCALL(__NR_ioprio_set, sys_ioprio_set)
+#define __NR_ioprio_get 31
+__SYSCALL(__NR_ioprio_get, sys_ioprio_get)
+
+/* fs/locks.c */
+#define __NR_flock 32
+__SYSCALL(__NR_flock, sys_flock)
+
+/* fs/namei.c */
+#define __NR_mknodat 33
+__SYSCALL(__NR_mknodat, sys_mknodat)
+#define __NR_mkdirat 34
+__SYSCALL(__NR_mkdirat, sys_mkdirat)
+#define __NR_unlinkat 35
+__SYSCALL(__NR_unlinkat, sys_unlinkat)
+#define __NR_symlinkat 36
+__SYSCALL(__NR_symlinkat, sys_symlinkat)
+#define __NR_linkat 37
+__SYSCALL(__NR_linkat, sys_linkat)
+#define __NR_renameat 38
+__SYSCALL(__NR_renameat, sys_renameat)
+
+/* fs/namespace.c */
+#define __NR_umount2 39
+__SYSCALL(__NR_umount2, sys_umount)
+#define __NR_mount 40
+__SC_COMP(__NR_mount, sys_mount, compat_sys_mount)
+#define __NR_pivot_root 41
+__SYSCALL(__NR_pivot_root, sys_pivot_root)
+
+/* fs/nfsctl.c */
+#define __NR_nfsservctl 42
+__SYSCALL(__NR_nfsservctl, sys_ni_syscall)
+
+/* fs/open.c */
+#define __NR3264_statfs 43
+__SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \
+              compat_sys_statfs64)
+#define __NR3264_fstatfs 44
+__SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \
+              compat_sys_fstatfs64)
+#define __NR3264_truncate 45
+__SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \
+              compat_sys_truncate64)
+#define __NR3264_ftruncate 46
+__SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \
+              compat_sys_ftruncate64)
+
+#define __NR_fallocate 47
+__SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate)
+#define __NR_faccessat 48
+__SYSCALL(__NR_faccessat, sys_faccessat)
+#define __NR_chdir 49
+__SYSCALL(__NR_chdir, sys_chdir)
+#define __NR_fchdir 50
+__SYSCALL(__NR_fchdir, sys_fchdir)
+#define __NR_chroot 51
+__SYSCALL(__NR_chroot, sys_chroot)
+#define __NR_fchmod 52
+__SYSCALL(__NR_fchmod, sys_fchmod)
+#define __NR_fchmodat 53
+__SYSCALL(__NR_fchmodat, sys_fchmodat)
+#define __NR_fchownat 54
+__SYSCALL(__NR_fchownat, sys_fchownat)
+#define __NR_fchown 55
+__SYSCALL(__NR_fchown, sys_fchown)
+#define __NR_openat 56
+__SC_COMP(__NR_openat, sys_openat, compat_sys_openat)
+#define __NR_close 57
+__SYSCALL(__NR_close, sys_close)
+#define __NR_vhangup 58
+__SYSCALL(__NR_vhangup, sys_vhangup)
+
+/* fs/pipe.c */
+#define __NR_pipe2 59
+__SYSCALL(__NR_pipe2, sys_pipe2)
+
+/* fs/quota.c */
+#define __NR_quotactl 60
+__SYSCALL(__NR_quotactl, sys_quotactl)
+
+/* fs/readdir.c */
+#define __NR_getdents64 61
+#define __ARCH_WANT_COMPAT_SYS_GETDENTS64
+__SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64)
+
+/* fs/read_write.c */
+#define __NR3264_lseek 62
+__SC_3264(__NR3264_lseek, sys_llseek, sys_lseek)
+#define __NR_read 63
+__SYSCALL(__NR_read, sys_read)
+#define __NR_write 64
+__SYSCALL(__NR_write, sys_write)
+#define __NR_readv 65
+__SC_COMP(__NR_readv, sys_readv, compat_sys_readv)
+#define __NR_writev 66
+__SC_COMP(__NR_writev, sys_writev, compat_sys_writev)
+#define __NR_pread64 67
+__SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64)
+#define __NR_pwrite64 68
+__SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64)
+#define __NR_preadv 69
+__SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv)
+#define __NR_pwritev 70
+__SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev)
+
+/* fs/sendfile.c */
+#define __NR3264_sendfile 71
+__SYSCALL(__NR3264_sendfile, sys_sendfile64)
+
+/* fs/select.c */
+#define __NR_pselect6 72
+__SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6)
+#define __NR_ppoll 73
+__SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll)
+
+/* fs/signalfd.c */
+#define __NR_signalfd4 74
+__SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
+
+/* fs/splice.c */
+#define __NR_vmsplice 75
+__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice)
+#define __NR_splice 76
+__SYSCALL(__NR_splice, sys_splice)
+#define __NR_tee 77
+__SYSCALL(__NR_tee, sys_tee)
+
+/* fs/stat.c */
+#define __NR_readlinkat 78
+__SYSCALL(__NR_readlinkat, sys_readlinkat)
+#define __NR3264_fstatat 79
+__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat)
+#define __NR3264_fstat 80
+__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat)
+
+/* fs/sync.c */
+#define __NR_sync 81
+__SYSCALL(__NR_sync, sys_sync)
+#define __NR_fsync 82
+__SYSCALL(__NR_fsync, sys_fsync)
+#define __NR_fdatasync 83
+__SYSCALL(__NR_fdatasync, sys_fdatasync)
+#ifdef __ARCH_WANT_SYNC_FILE_RANGE2
+#define __NR_sync_file_range2 84
+__SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \
+         compat_sys_sync_file_range2)
+#else
+#define __NR_sync_file_range 84
+__SC_COMP(__NR_sync_file_range, sys_sync_file_range, \
+         compat_sys_sync_file_range)
+#endif
+
+/* fs/timerfd.c */
+#define __NR_timerfd_create 85
+__SYSCALL(__NR_timerfd_create, sys_timerfd_create)
+#define __NR_timerfd_settime 86
+__SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \
+         compat_sys_timerfd_settime)
+#define __NR_timerfd_gettime 87
+__SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \
+         compat_sys_timerfd_gettime)
+
+/* fs/utimes.c */
+#define __NR_utimensat 88
+__SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat)
+
+/* kernel/acct.c */
+#define __NR_acct 89
+__SYSCALL(__NR_acct, sys_acct)
+
+/* kernel/capability.c */
+#define __NR_capget 90
+__SYSCALL(__NR_capget, sys_capget)
+#define __NR_capset 91
+__SYSCALL(__NR_capset, sys_capset)
+
+/* kernel/exec_domain.c */
+#define __NR_personality 92
+__SYSCALL(__NR_personality, sys_personality)
+
+/* kernel/exit.c */
+#define __NR_exit 93
+__SYSCALL(__NR_exit, sys_exit)
+#define __NR_exit_group 94
+__SYSCALL(__NR_exit_group, sys_exit_group)
+#define __NR_waitid 95
+__SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid)
+
+/* kernel/fork.c */
+#define __NR_set_tid_address 96
+__SYSCALL(__NR_set_tid_address, sys_set_tid_address)
+#define __NR_unshare 97
+__SYSCALL(__NR_unshare, sys_unshare)
+
+/* kernel/futex.c */
+#define __NR_futex 98
+__SC_COMP(__NR_futex, sys_futex, compat_sys_futex)
+#define __NR_set_robust_list 99
+__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \
+         compat_sys_set_robust_list)
+#define __NR_get_robust_list 100
+__SC_COMP(__NR_get_robust_list, sys_get_robust_list, \
+         compat_sys_get_robust_list)
+
+/* kernel/hrtimer.c */
+#define __NR_nanosleep 101
+__SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep)
+
+/* kernel/itimer.c */
+#define __NR_getitimer 102
+__SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer)
+#define __NR_setitimer 103
+__SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer)
+
+/* kernel/kexec.c */
+#define __NR_kexec_load 104
+__SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load)
+
+/* kernel/module.c */
+#define __NR_init_module 105
+__SYSCALL(__NR_init_module, sys_init_module)
+#define __NR_delete_module 106
+__SYSCALL(__NR_delete_module, sys_delete_module)
+
+/* kernel/posix-timers.c */
+#define __NR_timer_create 107
+__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create)
+#define __NR_timer_gettime 108
+__SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime)
+#define __NR_timer_getoverrun 109
+__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun)
+#define __NR_timer_settime 110
+__SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime)
+#define __NR_timer_delete 111
+__SYSCALL(__NR_timer_delete, sys_timer_delete)
+#define __NR_clock_settime 112
+__SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime)
+#define __NR_clock_gettime 113
+__SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime)
+#define __NR_clock_getres 114
+__SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres)
+#define __NR_clock_nanosleep 115
+__SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \
+         compat_sys_clock_nanosleep)
+
+/* kernel/printk.c */
+#define __NR_syslog 116
+__SYSCALL(__NR_syslog, sys_syslog)
+
+/* kernel/ptrace.c */
+#define __NR_ptrace 117
+__SYSCALL(__NR_ptrace, sys_ptrace)
+
+/* kernel/sched/core.c */
+#define __NR_sched_setparam 118
+__SYSCALL(__NR_sched_setparam, sys_sched_setparam)
+#define __NR_sched_setscheduler 119
+__SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler)
+#define __NR_sched_getscheduler 120
+__SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler)
+#define __NR_sched_getparam 121
+__SYSCALL(__NR_sched_getparam, sys_sched_getparam)
+#define __NR_sched_setaffinity 122
+__SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \
+         compat_sys_sched_setaffinity)
+#define __NR_sched_getaffinity 123
+__SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \
+         compat_sys_sched_getaffinity)
+#define __NR_sched_yield 124
+__SYSCALL(__NR_sched_yield, sys_sched_yield)
+#define __NR_sched_get_priority_max 125
+__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max)
+#define __NR_sched_get_priority_min 126
+__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min)
+#define __NR_sched_rr_get_interval 127
+__SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \
+         compat_sys_sched_rr_get_interval)
+
+/* kernel/signal.c */
+#define __NR_restart_syscall 128
+__SYSCALL(__NR_restart_syscall, sys_restart_syscall)
+#define __NR_kill 129
+__SYSCALL(__NR_kill, sys_kill)
+#define __NR_tkill 130
+__SYSCALL(__NR_tkill, sys_tkill)
+#define __NR_tgkill 131
+__SYSCALL(__NR_tgkill, sys_tgkill)
+#define __NR_sigaltstack 132
+__SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack)
+#define __NR_rt_sigsuspend 133
+__SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend)
+#define __NR_rt_sigaction 134
+__SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction)
+#define __NR_rt_sigprocmask 135
+__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask)
+#define __NR_rt_sigpending 136
+__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending)
+#define __NR_rt_sigtimedwait 137
+__SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \
+         compat_sys_rt_sigtimedwait)
+#define __NR_rt_sigqueueinfo 138
+__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \
+         compat_sys_rt_sigqueueinfo)
+#define __NR_rt_sigreturn 139
+__SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn)
+
+/* kernel/sys.c */
+#define __NR_setpriority 140
+__SYSCALL(__NR_setpriority, sys_setpriority)
+#define __NR_getpriority 141
+__SYSCALL(__NR_getpriority, sys_getpriority)
+#define __NR_reboot 142
+__SYSCALL(__NR_reboot, sys_reboot)
+#define __NR_setregid 143
+__SYSCALL(__NR_setregid, sys_setregid)
+#define __NR_setgid 144
+__SYSCALL(__NR_setgid, sys_setgid)
+#define __NR_setreuid 145
+__SYSCALL(__NR_setreuid, sys_setreuid)
+#define __NR_setuid 146
+__SYSCALL(__NR_setuid, sys_setuid)
+#define __NR_setresuid 147
+__SYSCALL(__NR_setresuid, sys_setresuid)
+#define __NR_getresuid 148
+__SYSCALL(__NR_getresuid, sys_getresuid)
+#define __NR_setresgid 149
+__SYSCALL(__NR_setresgid, sys_setresgid)
+#define __NR_getresgid 150
+__SYSCALL(__NR_getresgid, sys_getresgid)
+#define __NR_setfsuid 151
+__SYSCALL(__NR_setfsuid, sys_setfsuid)
+#define __NR_setfsgid 152
+__SYSCALL(__NR_setfsgid, sys_setfsgid)
+#define __NR_times 153
+__SC_COMP(__NR_times, sys_times, compat_sys_times)
+#define __NR_setpgid 154
+__SYSCALL(__NR_setpgid, sys_setpgid)
+#define __NR_getpgid 155
+__SYSCALL(__NR_getpgid, sys_getpgid)
+#define __NR_getsid 156
+__SYSCALL(__NR_getsid, sys_getsid)
+#define __NR_setsid 157
+__SYSCALL(__NR_setsid, sys_setsid)
+#define __NR_getgroups 158
+__SYSCALL(__NR_getgroups, sys_getgroups)
+#define __NR_setgroups 159
+__SYSCALL(__NR_setgroups, sys_setgroups)
+#define __NR_uname 160
+__SYSCALL(__NR_uname, sys_newuname)
+#define __NR_sethostname 161
+__SYSCALL(__NR_sethostname, sys_sethostname)
+#define __NR_setdomainname 162
+__SYSCALL(__NR_setdomainname, sys_setdomainname)
+#define __NR_getrlimit 163
+__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit)
+#define __NR_setrlimit 164
+__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit)
+#define __NR_getrusage 165
+__SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage)
+#define __NR_umask 166
+__SYSCALL(__NR_umask, sys_umask)
+#define __NR_prctl 167
+__SYSCALL(__NR_prctl, sys_prctl)
+#define __NR_getcpu 168
+__SYSCALL(__NR_getcpu, sys_getcpu)
+
+/* kernel/time.c */
+#define __NR_gettimeofday 169
+__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday)
+#define __NR_settimeofday 170
+__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday)
+#define __NR_adjtimex 171
+__SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex)
+
+/* kernel/timer.c */
+#define __NR_getpid 172
+__SYSCALL(__NR_getpid, sys_getpid)
+#define __NR_getppid 173
+__SYSCALL(__NR_getppid, sys_getppid)
+#define __NR_getuid 174
+__SYSCALL(__NR_getuid, sys_getuid)
+#define __NR_geteuid 175
+__SYSCALL(__NR_geteuid, sys_geteuid)
+#define __NR_getgid 176
+__SYSCALL(__NR_getgid, sys_getgid)
+#define __NR_getegid 177
+__SYSCALL(__NR_getegid, sys_getegid)
+#define __NR_gettid 178
+__SYSCALL(__NR_gettid, sys_gettid)
+#define __NR_sysinfo 179
+__SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo)
+
+/* ipc/mqueue.c */
+#define __NR_mq_open 180
+__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open)
+#define __NR_mq_unlink 181
+__SYSCALL(__NR_mq_unlink, sys_mq_unlink)
+#define __NR_mq_timedsend 182
+__SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend)
+#define __NR_mq_timedreceive 183
+__SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \
+         compat_sys_mq_timedreceive)
+#define __NR_mq_notify 184
+__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify)
+#define __NR_mq_getsetattr 185
+__SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr)
+
+/* ipc/msg.c */
+#define __NR_msgget 186
+__SYSCALL(__NR_msgget, sys_msgget)
+#define __NR_msgctl 187
+__SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl)
+#define __NR_msgrcv 188
+__SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv)
+#define __NR_msgsnd 189
+__SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd)
+
+/* ipc/sem.c */
+#define __NR_semget 190
+__SYSCALL(__NR_semget, sys_semget)
+#define __NR_semctl 191
+__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl)
+#define __NR_semtimedop 192
+__SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop)
+#define __NR_semop 193
+__SYSCALL(__NR_semop, sys_semop)
+
+/* ipc/shm.c */
+#define __NR_shmget 194
+__SYSCALL(__NR_shmget, sys_shmget)
+#define __NR_shmctl 195
+__SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl)
+#define __NR_shmat 196
+__SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat)
+#define __NR_shmdt 197
+__SYSCALL(__NR_shmdt, sys_shmdt)
+
+/* net/socket.c */
+#define __NR_socket 198
+__SYSCALL(__NR_socket, sys_socket)
+#define __NR_socketpair 199
+__SYSCALL(__NR_socketpair, sys_socketpair)
+#define __NR_bind 200
+__SYSCALL(__NR_bind, sys_bind)
+#define __NR_listen 201
+__SYSCALL(__NR_listen, sys_listen)
+#define __NR_accept 202
+__SYSCALL(__NR_accept, sys_accept)
+#define __NR_connect 203
+__SYSCALL(__NR_connect, sys_connect)
+#define __NR_getsockname 204
+__SYSCALL(__NR_getsockname, sys_getsockname)
+#define __NR_getpeername 205
+__SYSCALL(__NR_getpeername, sys_getpeername)
+#define __NR_sendto 206
+__SYSCALL(__NR_sendto, sys_sendto)
+#define __NR_recvfrom 207
+__SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom)
+#define __NR_setsockopt 208
+__SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt)
+#define __NR_getsockopt 209
+__SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt)
+#define __NR_shutdown 210
+__SYSCALL(__NR_shutdown, sys_shutdown)
+#define __NR_sendmsg 211
+__SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg)
+#define __NR_recvmsg 212
+__SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg)
+
+/* mm/filemap.c */
+#define __NR_readahead 213
+__SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead)
+
+/* mm/nommu.c, also with MMU */
+#define __NR_brk 214
+__SYSCALL(__NR_brk, sys_brk)
+#define __NR_munmap 215
+__SYSCALL(__NR_munmap, sys_munmap)
+#define __NR_mremap 216
+__SYSCALL(__NR_mremap, sys_mremap)
+
+/* security/keys/keyctl.c */
+#define __NR_add_key 217
+__SYSCALL(__NR_add_key, sys_add_key)
+#define __NR_request_key 218
+__SYSCALL(__NR_request_key, sys_request_key)
+#define __NR_keyctl 219
+__SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl)
+
+/* arch/example/kernel/sys_example.c */
+#define __NR_clone 220
+__SYSCALL(__NR_clone, sys_clone)
+#define __NR_execve 221
+__SC_COMP(__NR_execve, sys_execve, compat_sys_execve)
+
+#define __NR3264_mmap 222
+__SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap)
+/* mm/fadvise.c */
+#define __NR3264_fadvise64 223
+__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64)
+
+/* mm/, CONFIG_MMU only */
+#ifndef __ARCH_NOMMU
+#define __NR_swapon 224
+__SYSCALL(__NR_swapon, sys_swapon)
+#define __NR_swapoff 225
+__SYSCALL(__NR_swapoff, sys_swapoff)
+#define __NR_mprotect 226
+__SYSCALL(__NR_mprotect, sys_mprotect)
+#define __NR_msync 227
+__SYSCALL(__NR_msync, sys_msync)
+#define __NR_mlock 228
+__SYSCALL(__NR_mlock, sys_mlock)
+#define __NR_munlock 229
+__SYSCALL(__NR_munlock, sys_munlock)
+#define __NR_mlockall 230
+__SYSCALL(__NR_mlockall, sys_mlockall)
+#define __NR_munlockall 231
+__SYSCALL(__NR_munlockall, sys_munlockall)
+#define __NR_mincore 232
+__SYSCALL(__NR_mincore, sys_mincore)
+#define __NR_madvise 233
+__SYSCALL(__NR_madvise, sys_madvise)
+#define __NR_remap_file_pages 234
+__SYSCALL(__NR_remap_file_pages, sys_remap_file_pages)
+#define __NR_mbind 235
+__SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind)
+#define __NR_get_mempolicy 236
+__SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy)
+#define __NR_set_mempolicy 237
+__SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy)
+#define __NR_migrate_pages 238
+__SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages)
+#define __NR_move_pages 239
+__SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages)
+#endif
+
+#define __NR_rt_tgsigqueueinfo 240
+__SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \
+         compat_sys_rt_tgsigqueueinfo)
+#define __NR_perf_event_open 241
+__SYSCALL(__NR_perf_event_open, sys_perf_event_open)
+#define __NR_accept4 242
+__SYSCALL(__NR_accept4, sys_accept4)
+#define __NR_recvmmsg 243
+__SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg)
+
+/*
+ * Architectures may provide up to 16 syscalls of their own
+ * starting with this value.
+ */
+#define __NR_arch_specific_syscall 244
+
+#define __NR_wait4 260
+__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4)
+#define __NR_prlimit64 261
+__SYSCALL(__NR_prlimit64, sys_prlimit64)
+#define __NR_fanotify_init 262
+__SYSCALL(__NR_fanotify_init, sys_fanotify_init)
+#define __NR_fanotify_mark 263
+__SYSCALL(__NR_fanotify_mark, sys_fanotify_mark)
+#define __NR_name_to_handle_at         264
+__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at)
+#define __NR_open_by_handle_at         265
+__SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \
+         compat_sys_open_by_handle_at)
+#define __NR_clock_adjtime 266
+__SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime)
+#define __NR_syncfs 267
+__SYSCALL(__NR_syncfs, sys_syncfs)
+#define __NR_setns 268
+__SYSCALL(__NR_setns, sys_setns)
+#define __NR_sendmmsg 269
+__SC_COMP(__NR_sendmmsg, sys_sendmmsg, compat_sys_sendmmsg)
+#define __NR_process_vm_readv 270
+__SC_COMP(__NR_process_vm_readv, sys_process_vm_readv, \
+          compat_sys_process_vm_readv)
+#define __NR_process_vm_writev 271
+__SC_COMP(__NR_process_vm_writev, sys_process_vm_writev, \
+          compat_sys_process_vm_writev)
+#define __NR_kcmp 272
+__SYSCALL(__NR_kcmp, sys_kcmp)
+#define __NR_finit_module 273
+__SYSCALL(__NR_finit_module, sys_finit_module)
+#define __NR_sched_setattr 274
+__SYSCALL(__NR_sched_setattr, sys_sched_setattr)
+#define __NR_sched_getattr 275
+__SYSCALL(__NR_sched_getattr, sys_sched_getattr)
+#define __NR_renameat2 276
+__SYSCALL(__NR_renameat2, sys_renameat2)
+#define __NR_seccomp 277
+__SYSCALL(__NR_seccomp, sys_seccomp)
+#define __NR_getrandom 278
+__SYSCALL(__NR_getrandom, sys_getrandom)
+#define __NR_memfd_create 279
+__SYSCALL(__NR_memfd_create, sys_memfd_create)
+#define __NR_bpf 280
+__SYSCALL(__NR_bpf, sys_bpf)
+#define __NR_execveat 281
+__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat)
+#define __NR_userfaultfd 282
+__SYSCALL(__NR_userfaultfd, sys_userfaultfd)
+#define __NR_membarrier 283
+__SYSCALL(__NR_membarrier, sys_membarrier)
+#define __NR_mlock2 284
+__SYSCALL(__NR_mlock2, sys_mlock2)
+
+#undef __NR_syscalls
+#define __NR_syscalls 285
+
+/*
+ * All syscalls below here should go away really,
+ * these are provided for both review and as a porting
+ * help for the C library version.
+ *
+ * Last chance: are any of these important enough to
+ * enable by default?
+ */
+#ifdef __ARCH_WANT_SYSCALL_NO_AT
+#define __NR_open 1024
+__SYSCALL(__NR_open, sys_open)
+#define __NR_link 1025
+__SYSCALL(__NR_link, sys_link)
+#define __NR_unlink 1026
+__SYSCALL(__NR_unlink, sys_unlink)
+#define __NR_mknod 1027
+__SYSCALL(__NR_mknod, sys_mknod)
+#define __NR_chmod 1028
+__SYSCALL(__NR_chmod, sys_chmod)
+#define __NR_chown 1029
+__SYSCALL(__NR_chown, sys_chown)
+#define __NR_mkdir 1030
+__SYSCALL(__NR_mkdir, sys_mkdir)
+#define __NR_rmdir 1031
+__SYSCALL(__NR_rmdir, sys_rmdir)
+#define __NR_lchown 1032
+__SYSCALL(__NR_lchown, sys_lchown)
+#define __NR_access 1033
+__SYSCALL(__NR_access, sys_access)
+#define __NR_rename 1034
+__SYSCALL(__NR_rename, sys_rename)
+#define __NR_readlink 1035
+__SYSCALL(__NR_readlink, sys_readlink)
+#define __NR_symlink 1036
+__SYSCALL(__NR_symlink, sys_symlink)
+#define __NR_utimes 1037
+__SYSCALL(__NR_utimes, sys_utimes)
+#define __NR3264_stat 1038
+__SC_3264(__NR3264_stat, sys_stat64, sys_newstat)
+#define __NR3264_lstat 1039
+__SC_3264(__NR3264_lstat, sys_lstat64, sys_newlstat)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR3264_lstat+1)
+#endif /* __ARCH_WANT_SYSCALL_NO_AT */
+
+#ifdef __ARCH_WANT_SYSCALL_NO_FLAGS
+#define __NR_pipe 1040
+__SYSCALL(__NR_pipe, sys_pipe)
+#define __NR_dup2 1041
+__SYSCALL(__NR_dup2, sys_dup2)
+#define __NR_epoll_create 1042
+__SYSCALL(__NR_epoll_create, sys_epoll_create)
+#define __NR_inotify_init 1043
+__SYSCALL(__NR_inotify_init, sys_inotify_init)
+#define __NR_eventfd 1044
+__SYSCALL(__NR_eventfd, sys_eventfd)
+#define __NR_signalfd 1045
+__SYSCALL(__NR_signalfd, sys_signalfd)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_signalfd+1)
+#endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */
+
+#if (__BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)) && \
+     defined(__ARCH_WANT_SYSCALL_OFF_T)
+#define __NR_sendfile 1046
+__SYSCALL(__NR_sendfile, sys_sendfile)
+#define __NR_ftruncate 1047
+__SYSCALL(__NR_ftruncate, sys_ftruncate)
+#define __NR_truncate 1048
+__SYSCALL(__NR_truncate, sys_truncate)
+#define __NR_stat 1049
+__SYSCALL(__NR_stat, sys_newstat)
+#define __NR_lstat 1050
+__SYSCALL(__NR_lstat, sys_newlstat)
+#define __NR_fstat 1051
+__SYSCALL(__NR_fstat, sys_newfstat)
+#define __NR_fcntl 1052
+__SYSCALL(__NR_fcntl, sys_fcntl)
+#define __NR_fadvise64 1053
+#define __ARCH_WANT_SYS_FADVISE64
+__SYSCALL(__NR_fadvise64, sys_fadvise64)
+#define __NR_newfstatat 1054
+#define __ARCH_WANT_SYS_NEWFSTATAT
+__SYSCALL(__NR_newfstatat, sys_newfstatat)
+#define __NR_fstatfs 1055
+__SYSCALL(__NR_fstatfs, sys_fstatfs)
+#define __NR_statfs 1056
+__SYSCALL(__NR_statfs, sys_statfs)
+#define __NR_lseek 1057
+__SYSCALL(__NR_lseek, sys_lseek)
+#define __NR_mmap 1058
+__SYSCALL(__NR_mmap, sys_mmap)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_mmap+1)
+#endif /* 32 bit off_t syscalls */
+
+#ifdef __ARCH_WANT_SYSCALL_DEPRECATED
+#define __NR_alarm 1059
+#define __ARCH_WANT_SYS_ALARM
+__SYSCALL(__NR_alarm, sys_alarm)
+#define __NR_getpgrp 1060
+#define __ARCH_WANT_SYS_GETPGRP
+__SYSCALL(__NR_getpgrp, sys_getpgrp)
+#define __NR_pause 1061
+#define __ARCH_WANT_SYS_PAUSE
+__SYSCALL(__NR_pause, sys_pause)
+#define __NR_time 1062
+#define __ARCH_WANT_SYS_TIME
+#define __ARCH_WANT_COMPAT_SYS_TIME
+__SYSCALL(__NR_time, sys_time)
+#define __NR_utime 1063
+#define __ARCH_WANT_SYS_UTIME
+__SYSCALL(__NR_utime, sys_utime)
+
+#define __NR_creat 1064
+__SYSCALL(__NR_creat, sys_creat)
+#define __NR_getdents 1065
+#define __ARCH_WANT_SYS_GETDENTS
+__SYSCALL(__NR_getdents, sys_getdents)
+#define __NR_futimesat 1066
+__SYSCALL(__NR_futimesat, sys_futimesat)
+#define __NR_select 1067
+#define __ARCH_WANT_SYS_SELECT
+__SYSCALL(__NR_select, sys_select)
+#define __NR_poll 1068
+__SYSCALL(__NR_poll, sys_poll)
+#define __NR_epoll_wait 1069
+__SYSCALL(__NR_epoll_wait, sys_epoll_wait)
+#define __NR_ustat 1070
+__SYSCALL(__NR_ustat, sys_ustat)
+#define __NR_vfork 1071
+__SYSCALL(__NR_vfork, sys_vfork)
+#define __NR_oldwait4 1072
+__SYSCALL(__NR_oldwait4, sys_wait4)
+#define __NR_recv 1073
+__SYSCALL(__NR_recv, sys_recv)
+#define __NR_send 1074
+__SYSCALL(__NR_send, sys_send)
+#define __NR_bdflush 1075
+__SYSCALL(__NR_bdflush, sys_bdflush)
+#define __NR_umount 1076
+__SYSCALL(__NR_umount, sys_oldumount)
+#define __ARCH_WANT_SYS_OLDUMOUNT
+#define __NR_uselib 1077
+__SYSCALL(__NR_uselib, sys_uselib)
+#define __NR__sysctl 1078
+__SYSCALL(__NR__sysctl, sys_sysctl)
+
+#define __NR_fork 1079
+#ifdef CONFIG_MMU
+__SYSCALL(__NR_fork, sys_fork)
+#else
+__SYSCALL(__NR_fork, sys_ni_syscall)
+#endif /* CONFIG_MMU */
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_fork+1)
+
+#endif /* __ARCH_WANT_SYSCALL_DEPRECATED */
+
+/*
+ * 32 bit systems traditionally used different
+ * syscalls for off_t and loff_t arguments, while
+ * 64 bit systems only need the off_t version.
+ * For new 32 bit platforms, there is no need to
+ * implement the old 32 bit off_t syscalls, so
+ * they take different names.
+ * Here we map the numbers so that both versions
+ * use the same syscall table layout.
+ */
+#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
+#define __NR_fcntl __NR3264_fcntl
+#define __NR_statfs __NR3264_statfs
+#define __NR_fstatfs __NR3264_fstatfs
+#define __NR_truncate __NR3264_truncate
+#define __NR_ftruncate __NR3264_ftruncate
+#define __NR_lseek __NR3264_lseek
+#define __NR_sendfile __NR3264_sendfile
+#define __NR_newfstatat __NR3264_fstatat
+#define __NR_fstat __NR3264_fstat
+#define __NR_mmap __NR3264_mmap
+#define __NR_fadvise64 __NR3264_fadvise64
+#ifdef __NR3264_stat
+#define __NR_stat __NR3264_stat
+#define __NR_lstat __NR3264_lstat
+#endif
+#else
+#define __NR_fcntl64 __NR3264_fcntl
+#define __NR_statfs64 __NR3264_statfs
+#define __NR_fstatfs64 __NR3264_fstatfs
+#define __NR_truncate64 __NR3264_truncate
+#define __NR_ftruncate64 __NR3264_ftruncate
+#define __NR_llseek __NR3264_lseek
+#define __NR_sendfile64 __NR3264_sendfile
+#define __NR_fstatat64 __NR3264_fstatat
+#define __NR_fstat64 __NR3264_fstat
+#define __NR_mmap2 __NR3264_mmap
+#define __NR_fadvise64_64 __NR3264_fadvise64
+#ifdef __NR3264_stat
+#define __NR_stat64 __NR3264_stat
+#define __NR_lstat64 __NR3264_lstat
+#endif
+#endif
diff --git a/lib/libdss-include/asm/auxvec.h b/lib/libdss-include/asm/auxvec.h
new file mode 100644 (file)
index 0000000..22d6d88
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_AUXVEC_H
+#define __ASM_AUXVEC_H
+
+/* vDSO location */
+#define AT_SYSINFO_EHDR        33
+
+#endif
diff --git a/lib/libdss-include/asm/bitsperlong.h b/lib/libdss-include/asm/bitsperlong.h
new file mode 100644 (file)
index 0000000..fce9c29
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_BITSPERLONG_H
+#define __ASM_BITSPERLONG_H
+
+#define __BITS_PER_LONG 64
+
+#include <asm-generic/bitsperlong.h>
+
+#endif /* __ASM_BITSPERLONG_H */
diff --git a/lib/libdss-include/asm/byteorder.h b/lib/libdss-include/asm/byteorder.h
new file mode 100644 (file)
index 0000000..dc19e95
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_BYTEORDER_H
+#define __ASM_BYTEORDER_H
+
+#ifdef __AARCH64EB__
+#include <linux/byteorder/big_endian.h>
+#else
+#include <linux/byteorder/little_endian.h>
+#endif
+
+#endif /* __ASM_BYTEORDER_H */
diff --git a/lib/libdss-include/asm/errno.h b/lib/libdss-include/asm/errno.h
new file mode 100644 (file)
index 0000000..4c82b50
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/errno.h>
diff --git a/lib/libdss-include/asm/fcntl.h b/lib/libdss-include/asm/fcntl.h
new file mode 100644 (file)
index 0000000..cd2e630
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_FCNTL_H
+#define __ASM_FCNTL_H
+
+/*
+ * Using our own definitions for AArch32 (compat) support.
+ */
+#define O_DIRECTORY     040000 /* must be a directory */
+#define O_NOFOLLOW     0100000 /* don't follow links */
+#define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
+#define O_LARGEFILE    0400000
+
+#include <asm-generic/fcntl.h>
+
+#endif
diff --git a/lib/libdss-include/asm/hwcap.h b/lib/libdss-include/asm/hwcap.h
new file mode 100644 (file)
index 0000000..ab509e9
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_HWCAP_H
+#define __ASM_HWCAP_H
+
+/*
+ * HWCAP flags - for elf_hwcap (in kernel) and AT_HWCAP
+ */
+#define HWCAP_FP               (1 << 0)
+#define HWCAP_ASIMD            (1 << 1)
+#define HWCAP_EVTSTRM          (1 << 2)
+#define HWCAP_AES              (1 << 3)
+#define HWCAP_PMULL            (1 << 4)
+#define HWCAP_SHA1             (1 << 5)
+#define HWCAP_SHA2             (1 << 6)
+#define HWCAP_CRC32            (1 << 7)
+#define HWCAP_ATOMICS          (1 << 8)
+
+#endif /* __ASM_HWCAP_H */
diff --git a/lib/libdss-include/asm/ioctl.h b/lib/libdss-include/asm/ioctl.h
new file mode 100644 (file)
index 0000000..b279fe0
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ioctl.h>
diff --git a/lib/libdss-include/asm/ioctls.h b/lib/libdss-include/asm/ioctls.h
new file mode 100644 (file)
index 0000000..ec34c76
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ioctls.h>
diff --git a/lib/libdss-include/asm/ipcbuf.h b/lib/libdss-include/asm/ipcbuf.h
new file mode 100644 (file)
index 0000000..84c7e51
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ipcbuf.h>
diff --git a/lib/libdss-include/asm/kvm.h b/lib/libdss-include/asm/kvm.h
new file mode 100644 (file)
index 0000000..a2fd4d9
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2012,2013 - ARM Ltd
+ * Author: Marc Zyngier <marc.zyngier@arm.com>
+ *
+ * Derived from arch/arm/include/uapi/asm/kvm.h:
+ * Copyright (C) 2012 - Virtual Open Systems and Columbia University
+ * Author: Christoffer Dall <c.dall@virtualopensystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ARM_KVM_H__
+#define __ARM_KVM_H__
+
+#define KVM_SPSR_EL1   0
+#define KVM_SPSR_SVC   KVM_SPSR_EL1
+#define KVM_SPSR_ABT   1
+#define KVM_SPSR_UND   2
+#define KVM_SPSR_IRQ   3
+#define KVM_SPSR_FIQ   4
+#define KVM_NR_SPSR    5
+
+#ifndef __ASSEMBLY__
+#include <linux/psci.h>
+#include <linux/types.h>
+#include <asm/ptrace.h>
+
+#define __KVM_HAVE_GUEST_DEBUG
+#define __KVM_HAVE_IRQ_LINE
+#define __KVM_HAVE_READONLY_MEM
+
+#define KVM_REG_SIZE(id)                                               \
+       (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
+
+struct kvm_regs {
+       struct user_pt_regs regs;       /* sp = sp_el0 */
+
+       __u64   sp_el1;
+       __u64   elr_el1;
+
+       __u64   spsr[KVM_NR_SPSR];
+
+       struct user_fpsimd_state fp_regs;
+};
+
+/*
+ * Supported CPU Targets - Adding a new target type is not recommended,
+ * unless there are some special registers not supported by the
+ * genericv8 syreg table.
+ */
+#define KVM_ARM_TARGET_AEM_V8          0
+#define KVM_ARM_TARGET_FOUNDATION_V8   1
+#define KVM_ARM_TARGET_CORTEX_A57      2
+#define KVM_ARM_TARGET_XGENE_POTENZA   3
+#define KVM_ARM_TARGET_CORTEX_A53      4
+/* Generic ARM v8 target */
+#define KVM_ARM_TARGET_GENERIC_V8      5
+
+#define KVM_ARM_NUM_TARGETS            6
+
+/* KVM_ARM_SET_DEVICE_ADDR ioctl id encoding */
+#define KVM_ARM_DEVICE_TYPE_SHIFT      0
+#define KVM_ARM_DEVICE_TYPE_MASK       (0xffff << KVM_ARM_DEVICE_TYPE_SHIFT)
+#define KVM_ARM_DEVICE_ID_SHIFT                16
+#define KVM_ARM_DEVICE_ID_MASK         (0xffff << KVM_ARM_DEVICE_ID_SHIFT)
+
+/* Supported device IDs */
+#define KVM_ARM_DEVICE_VGIC_V2         0
+
+/* Supported VGIC address types  */
+#define KVM_VGIC_V2_ADDR_TYPE_DIST     0
+#define KVM_VGIC_V2_ADDR_TYPE_CPU      1
+
+#define KVM_VGIC_V2_DIST_SIZE          0x1000
+#define KVM_VGIC_V2_CPU_SIZE           0x2000
+
+/* Supported VGICv3 address types  */
+#define KVM_VGIC_V3_ADDR_TYPE_DIST     2
+#define KVM_VGIC_V3_ADDR_TYPE_REDIST   3
+
+#define KVM_VGIC_V3_DIST_SIZE          SZ_64K
+#define KVM_VGIC_V3_REDIST_SIZE                (2 * SZ_64K)
+
+#define KVM_ARM_VCPU_POWER_OFF         0 /* CPU is started in OFF state */
+#define KVM_ARM_VCPU_EL1_32BIT         1 /* CPU running a 32bit VM */
+#define KVM_ARM_VCPU_PSCI_0_2          2 /* CPU uses PSCI v0.2 */
+
+struct kvm_vcpu_init {
+       __u32 target;
+       __u32 features[7];
+};
+
+struct kvm_sregs {
+};
+
+struct kvm_fpu {
+};
+
+/*
+ * See v8 ARM ARM D7.3: Debug Registers
+ *
+ * The architectural limit is 16 debug registers of each type although
+ * in practice there are usually less (see ID_AA64DFR0_EL1).
+ *
+ * Although the control registers are architecturally defined as 32
+ * bits wide we use a 64 bit structure here to keep parity with
+ * KVM_GET/SET_ONE_REG behaviour which treats all system registers as
+ * 64 bit values. It also allows for the possibility of the
+ * architecture expanding the control registers without having to
+ * change the userspace ABI.
+ */
+#define KVM_ARM_MAX_DBG_REGS 16
+struct kvm_guest_debug_arch {
+       __u64 dbg_bcr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_bvr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_wcr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_wvr[KVM_ARM_MAX_DBG_REGS];
+};
+
+struct kvm_debug_exit_arch {
+       __u32 hsr;
+       __u64 far;      /* used for watchpoints */
+};
+
+/*
+ * Architecture specific defines for kvm_guest_debug->control
+ */
+
+#define KVM_GUESTDBG_USE_SW_BP         (1 << 16)
+#define KVM_GUESTDBG_USE_HW            (1 << 17)
+
+struct kvm_sync_regs {
+};
+
+struct kvm_arch_memory_slot {
+};
+
+/* If you need to interpret the index values, here is the key: */
+#define KVM_REG_ARM_COPROC_MASK                0x000000000FFF0000
+#define KVM_REG_ARM_COPROC_SHIFT       16
+
+/* Normal registers are mapped as coprocessor 16. */
+#define KVM_REG_ARM_CORE               (0x0010 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_CORE_REG(name)     (offsetof(struct kvm_regs, name) / sizeof(__u32))
+
+/* Some registers need more space to represent values. */
+#define KVM_REG_ARM_DEMUX              (0x0011 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_DEMUX_ID_MASK      0x000000000000FF00
+#define KVM_REG_ARM_DEMUX_ID_SHIFT     8
+#define KVM_REG_ARM_DEMUX_ID_CCSIDR    (0x00 << KVM_REG_ARM_DEMUX_ID_SHIFT)
+#define KVM_REG_ARM_DEMUX_VAL_MASK     0x00000000000000FF
+#define KVM_REG_ARM_DEMUX_VAL_SHIFT    0
+
+/* AArch64 system registers */
+#define KVM_REG_ARM64_SYSREG           (0x0013 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM64_SYSREG_OP0_MASK  0x000000000000c000
+#define KVM_REG_ARM64_SYSREG_OP0_SHIFT 14
+#define KVM_REG_ARM64_SYSREG_OP1_MASK  0x0000000000003800
+#define KVM_REG_ARM64_SYSREG_OP1_SHIFT 11
+#define KVM_REG_ARM64_SYSREG_CRN_MASK  0x0000000000000780
+#define KVM_REG_ARM64_SYSREG_CRN_SHIFT 7
+#define KVM_REG_ARM64_SYSREG_CRM_MASK  0x0000000000000078
+#define KVM_REG_ARM64_SYSREG_CRM_SHIFT 3
+#define KVM_REG_ARM64_SYSREG_OP2_MASK  0x0000000000000007
+#define KVM_REG_ARM64_SYSREG_OP2_SHIFT 0
+
+#define ARM64_SYS_REG_SHIFT_MASK(x,n) \
+       (((x) << KVM_REG_ARM64_SYSREG_ ## n ## _SHIFT) & \
+       KVM_REG_ARM64_SYSREG_ ## n ## _MASK)
+
+#define __ARM64_SYS_REG(op0,op1,crn,crm,op2) \
+       (KVM_REG_ARM64 | KVM_REG_ARM64_SYSREG | \
+       ARM64_SYS_REG_SHIFT_MASK(op0, OP0) | \
+       ARM64_SYS_REG_SHIFT_MASK(op1, OP1) | \
+       ARM64_SYS_REG_SHIFT_MASK(crn, CRN) | \
+       ARM64_SYS_REG_SHIFT_MASK(crm, CRM) | \
+       ARM64_SYS_REG_SHIFT_MASK(op2, OP2))
+
+#define ARM64_SYS_REG(...) (__ARM64_SYS_REG(__VA_ARGS__) | KVM_REG_SIZE_U64)
+
+#define KVM_REG_ARM_TIMER_CTL          ARM64_SYS_REG(3, 3, 14, 3, 1)
+#define KVM_REG_ARM_TIMER_CNT          ARM64_SYS_REG(3, 3, 14, 3, 2)
+#define KVM_REG_ARM_TIMER_CVAL         ARM64_SYS_REG(3, 3, 14, 0, 2)
+
+/* Device Control API: ARM VGIC */
+#define KVM_DEV_ARM_VGIC_GRP_ADDR      0
+#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
+#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS  2
+#define   KVM_DEV_ARM_VGIC_CPUID_SHIFT 32
+#define   KVM_DEV_ARM_VGIC_CPUID_MASK  (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT)
+#define   KVM_DEV_ARM_VGIC_OFFSET_SHIFT        0
+#define   KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
+#define KVM_DEV_ARM_VGIC_GRP_NR_IRQS   3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL      4
+#define   KVM_DEV_ARM_VGIC_CTRL_INIT   0
+
+/* KVM_IRQ_LINE irq field index values */
+#define KVM_ARM_IRQ_TYPE_SHIFT         24
+#define KVM_ARM_IRQ_TYPE_MASK          0xff
+#define KVM_ARM_IRQ_VCPU_SHIFT         16
+#define KVM_ARM_IRQ_VCPU_MASK          0xff
+#define KVM_ARM_IRQ_NUM_SHIFT          0
+#define KVM_ARM_IRQ_NUM_MASK           0xffff
+
+/* irq_type field */
+#define KVM_ARM_IRQ_TYPE_CPU           0
+#define KVM_ARM_IRQ_TYPE_SPI           1
+#define KVM_ARM_IRQ_TYPE_PPI           2
+
+/* out-of-kernel GIC cpu interrupt injection irq_number field */
+#define KVM_ARM_IRQ_CPU_IRQ            0
+#define KVM_ARM_IRQ_CPU_FIQ            1
+
+/*
+ * This used to hold the highest supported SPI, but it is now obsolete
+ * and only here to provide source code level compatibility with older
+ * userland. The highest SPI number can be set via KVM_DEV_ARM_VGIC_GRP_NR_IRQS.
+ */
+#define KVM_ARM_IRQ_GIC_MAX            127
+
+/* One single KVM irqchip, ie. the VGIC */
+#define KVM_NR_IRQCHIPS          1
+
+/* PSCI interface */
+#define KVM_PSCI_FN_BASE               0x95c1ba5e
+#define KVM_PSCI_FN(n)                 (KVM_PSCI_FN_BASE + (n))
+
+#define KVM_PSCI_FN_CPU_SUSPEND                KVM_PSCI_FN(0)
+#define KVM_PSCI_FN_CPU_OFF            KVM_PSCI_FN(1)
+#define KVM_PSCI_FN_CPU_ON             KVM_PSCI_FN(2)
+#define KVM_PSCI_FN_MIGRATE            KVM_PSCI_FN(3)
+
+#define KVM_PSCI_RET_SUCCESS           PSCI_RET_SUCCESS
+#define KVM_PSCI_RET_NI                        PSCI_RET_NOT_SUPPORTED
+#define KVM_PSCI_RET_INVAL             PSCI_RET_INVALID_PARAMS
+#define KVM_PSCI_RET_DENIED            PSCI_RET_DENIED
+
+#endif
+
+#endif /* __ARM_KVM_H__ */
diff --git a/lib/libdss-include/asm/kvm_para.h b/lib/libdss-include/asm/kvm_para.h
new file mode 100644 (file)
index 0000000..14fab8f
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/kvm_para.h>
diff --git a/lib/libdss-include/asm/mman.h b/lib/libdss-include/asm/mman.h
new file mode 100644 (file)
index 0000000..8eebf89
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/mman.h>
diff --git a/lib/libdss-include/asm/msgbuf.h b/lib/libdss-include/asm/msgbuf.h
new file mode 100644 (file)
index 0000000..809134c
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/msgbuf.h>
diff --git a/lib/libdss-include/asm/param.h b/lib/libdss-include/asm/param.h
new file mode 100644 (file)
index 0000000..8e3a281
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_PARAM_H
+#define __ASM_PARAM_H
+
+#define EXEC_PAGESIZE  65536
+
+#include <asm-generic/param.h>
+
+#endif
diff --git a/lib/libdss-include/asm/perf_regs.h b/lib/libdss-include/asm/perf_regs.h
new file mode 100644 (file)
index 0000000..172b831
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _ASM_ARM64_PERF_REGS_H
+#define _ASM_ARM64_PERF_REGS_H
+
+enum perf_event_arm_regs {
+       PERF_REG_ARM64_X0,
+       PERF_REG_ARM64_X1,
+       PERF_REG_ARM64_X2,
+       PERF_REG_ARM64_X3,
+       PERF_REG_ARM64_X4,
+       PERF_REG_ARM64_X5,
+       PERF_REG_ARM64_X6,
+       PERF_REG_ARM64_X7,
+       PERF_REG_ARM64_X8,
+       PERF_REG_ARM64_X9,
+       PERF_REG_ARM64_X10,
+       PERF_REG_ARM64_X11,
+       PERF_REG_ARM64_X12,
+       PERF_REG_ARM64_X13,
+       PERF_REG_ARM64_X14,
+       PERF_REG_ARM64_X15,
+       PERF_REG_ARM64_X16,
+       PERF_REG_ARM64_X17,
+       PERF_REG_ARM64_X18,
+       PERF_REG_ARM64_X19,
+       PERF_REG_ARM64_X20,
+       PERF_REG_ARM64_X21,
+       PERF_REG_ARM64_X22,
+       PERF_REG_ARM64_X23,
+       PERF_REG_ARM64_X24,
+       PERF_REG_ARM64_X25,
+       PERF_REG_ARM64_X26,
+       PERF_REG_ARM64_X27,
+       PERF_REG_ARM64_X28,
+       PERF_REG_ARM64_X29,
+       PERF_REG_ARM64_LR,
+       PERF_REG_ARM64_SP,
+       PERF_REG_ARM64_PC,
+       PERF_REG_ARM64_MAX,
+};
+#endif /* _ASM_ARM64_PERF_REGS_H */
diff --git a/lib/libdss-include/asm/poll.h b/lib/libdss-include/asm/poll.h
new file mode 100644 (file)
index 0000000..c98509d
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/poll.h>
diff --git a/lib/libdss-include/asm/posix_types.h b/lib/libdss-include/asm/posix_types.h
new file mode 100644 (file)
index 0000000..7985ff6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __ASM_POSIX_TYPES_H
+#define __ASM_POSIX_TYPES_H
+
+typedef unsigned short __kernel_old_uid_t;
+typedef unsigned short __kernel_old_gid_t;
+#define __kernel_old_uid_t __kernel_old_uid_t
+
+#include <asm-generic/posix_types.h>
+
+#endif /*  __ASM_POSIX_TYPES_H */
diff --git a/lib/libdss-include/asm/ptrace.h b/lib/libdss-include/asm/ptrace.h
new file mode 100644 (file)
index 0000000..a11e431
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Based on arch/arm/include/asm/ptrace.h
+ *
+ * Copyright (C) 1996-2003 Russell King
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_PTRACE_H
+#define __ASM_PTRACE_H
+
+#include <linux/types.h>
+
+#include <asm/hwcap.h>
+
+
+/*
+ * PSR bits
+ */
+#define PSR_MODE_EL0t  0x00000000
+#define PSR_MODE_EL1t  0x00000004
+#define PSR_MODE_EL1h  0x00000005
+#define PSR_MODE_EL2t  0x00000008
+#define PSR_MODE_EL2h  0x00000009
+#define PSR_MODE_EL3t  0x0000000c
+#define PSR_MODE_EL3h  0x0000000d
+#define PSR_MODE_MASK  0x0000000f
+
+/* AArch32 CPSR bits */
+#define PSR_MODE32_BIT         0x00000010
+
+/* AArch64 SPSR bits */
+#define PSR_F_BIT      0x00000040
+#define PSR_I_BIT      0x00000080
+#define PSR_A_BIT      0x00000100
+#define PSR_D_BIT      0x00000200
+#define PSR_PAN_BIT    0x00400000
+#define PSR_Q_BIT      0x08000000
+#define PSR_V_BIT      0x10000000
+#define PSR_C_BIT      0x20000000
+#define PSR_Z_BIT      0x40000000
+#define PSR_N_BIT      0x80000000
+
+/*
+ * Groups of PSR bits
+ */
+#define PSR_f          0xff000000      /* Flags                */
+#define PSR_s          0x00ff0000      /* Status               */
+#define PSR_x          0x0000ff00      /* Extension            */
+#define PSR_c          0x000000ff      /* Control              */
+
+
+#ifndef __ASSEMBLY__
+
+/*
+ * User structures for general purpose, floating point and debug registers.
+ */
+struct user_pt_regs {
+       __u64           regs[31];
+       __u64           sp;
+       __u64           pc;
+       __u64           pstate;
+};
+
+struct user_fpsimd_state {
+       __uint128_t     vregs[32];
+       __u32           fpsr;
+       __u32           fpcr;
+};
+
+struct user_hwdebug_state {
+       __u32           dbg_info;
+       __u32           pad;
+       struct {
+               __u64   addr;
+               __u32   ctrl;
+               __u32   pad;
+       }               dbg_regs[16];
+};
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_PTRACE_H */
diff --git a/lib/libdss-include/asm/resource.h b/lib/libdss-include/asm/resource.h
new file mode 100644 (file)
index 0000000..04bc4db
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/resource.h>
diff --git a/lib/libdss-include/asm/sembuf.h b/lib/libdss-include/asm/sembuf.h
new file mode 100644 (file)
index 0000000..7673b83
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/sembuf.h>
diff --git a/lib/libdss-include/asm/setup.h b/lib/libdss-include/asm/setup.h
new file mode 100644 (file)
index 0000000..9cf2e46
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Based on arch/arm/include/asm/setup.h
+ *
+ * Copyright (C) 1997-1999 Russell King
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SETUP_H
+#define __ASM_SETUP_H
+
+#include <linux/types.h>
+
+#define COMMAND_LINE_SIZE      2048
+
+#endif
diff --git a/lib/libdss-include/asm/shmbuf.h b/lib/libdss-include/asm/shmbuf.h
new file mode 100644 (file)
index 0000000..83c05fc
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/shmbuf.h>
diff --git a/lib/libdss-include/asm/sigcontext.h b/lib/libdss-include/asm/sigcontext.h
new file mode 100644 (file)
index 0000000..0afb675
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGCONTEXT_H
+#define __ASM_SIGCONTEXT_H
+
+#include <linux/types.h>
+
+/*
+ * Signal context structure - contains all info to do with the state
+ * before the signal handler was invoked.
+ */
+struct sigcontext {
+       __u64 fault_address;
+       /* AArch64 registers */
+       __u64 regs[31];
+       __u64 sp;
+       __u64 pc;
+       __u64 pstate;
+       /* 4K reserved for FP/SIMD state and future expansion */
+       __u8 __reserved[4096] __attribute__((__aligned__(16)));
+};
+
+/*
+ * Header to be used at the beginning of structures extending the user
+ * context. Such structures must be placed after the rt_sigframe on the stack
+ * and be 16-byte aligned. The last structure must be a dummy one with the
+ * magic and size set to 0.
+ */
+struct _aarch64_ctx {
+       __u32 magic;
+       __u32 size;
+};
+
+#define FPSIMD_MAGIC   0x46508001
+
+struct fpsimd_context {
+       struct _aarch64_ctx head;
+       __u32 fpsr;
+       __u32 fpcr;
+       __uint128_t vregs[32];
+};
+
+/* ESR_EL1 context */
+#define ESR_MAGIC      0x45535201
+
+struct esr_context {
+       struct _aarch64_ctx head;
+       __u64 esr;
+};
+
+#endif /* __ASM_SIGCONTEXT_H */
diff --git a/lib/libdss-include/asm/siginfo.h b/lib/libdss-include/asm/siginfo.h
new file mode 100644 (file)
index 0000000..5a74a08
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGINFO_H
+#define __ASM_SIGINFO_H
+
+#define __ARCH_SI_PREAMBLE_SIZE        (4 * sizeof(int))
+
+#include <asm-generic/siginfo.h>
+
+#endif
diff --git a/lib/libdss-include/asm/signal.h b/lib/libdss-include/asm/signal.h
new file mode 100644 (file)
index 0000000..991bf5d
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGNAL_H
+#define __ASM_SIGNAL_H
+
+/* Required for AArch32 compatibility. */
+#define SA_RESTORER    0x04000000
+
+#define MINSIGSTKSZ 5120
+#define SIGSTKSZ    16384
+
+#include <asm-generic/signal.h>
+
+#endif
diff --git a/lib/libdss-include/asm/socket.h b/lib/libdss-include/asm/socket.h
new file mode 100644 (file)
index 0000000..6b71384
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/socket.h>
diff --git a/lib/libdss-include/asm/sockios.h b/lib/libdss-include/asm/sockios.h
new file mode 100644 (file)
index 0000000..def6d47
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/sockios.h>
diff --git a/lib/libdss-include/asm/stat.h b/lib/libdss-include/asm/stat.h
new file mode 100644 (file)
index 0000000..eeb702e
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <asm-generic/stat.h>
diff --git a/lib/libdss-include/asm/statfs.h b/lib/libdss-include/asm/statfs.h
new file mode 100644 (file)
index 0000000..6f62190
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_STATFS_H
+#define __ASM_STATFS_H
+
+#define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4)))
+
+#include <asm-generic/statfs.h>
+
+#endif
diff --git a/lib/libdss-include/asm/swab.h b/lib/libdss-include/asm/swab.h
new file mode 100644 (file)
index 0000000..7847e56
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/swab.h>
diff --git a/lib/libdss-include/asm/termbits.h b/lib/libdss-include/asm/termbits.h
new file mode 100644 (file)
index 0000000..3935b10
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/termbits.h>
diff --git a/lib/libdss-include/asm/termios.h b/lib/libdss-include/asm/termios.h
new file mode 100644 (file)
index 0000000..280d78a
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/termios.h>
diff --git a/lib/libdss-include/asm/types.h b/lib/libdss-include/asm/types.h
new file mode 100644 (file)
index 0000000..b9e79bc
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/types.h>
diff --git a/lib/libdss-include/asm/ucontext.h b/lib/libdss-include/asm/ucontext.h
new file mode 100644 (file)
index 0000000..8cf8a4d
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_UCONTEXT_H
+#define __ASM_UCONTEXT_H
+
+#include <linux/types.h>
+
+struct ucontext {
+       unsigned long     uc_flags;
+       struct ucontext  *uc_link;
+       stack_t           uc_stack;
+       sigset_t          uc_sigmask;
+       /* glibc uses a 1024-bit sigset_t */
+       __u8              __unused[1024 / 8 - sizeof(sigset_t)];
+       /* last for future expansion */
+       struct sigcontext uc_mcontext;
+};
+
+#endif /* __ASM_UCONTEXT_H */
diff --git a/lib/libdss-include/asm/unistd.h b/lib/libdss-include/asm/unistd.h
new file mode 100644 (file)
index 0000000..1caadc2
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <asm-generic/unistd.h>
diff --git a/lib/libdss-include/assert.h b/lib/libdss-include/assert.h
new file mode 100644 (file)
index 0000000..aa6c503
--- /dev/null
@@ -0,0 +1,121 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.2 Diagnostics       <assert.h>
+ */
+
+#ifdef _ASSERT_H
+
+# undef        _ASSERT_H
+# undef        assert
+# undef __ASSERT_VOID_CAST
+
+# ifdef        __USE_GNU
+#  undef assert_perror
+# endif
+
+#endif /* assert.h     */
+
+#define        _ASSERT_H       1
+#include <features.h>
+
+#if defined __cplusplus && __GNUC_PREREQ (2,95)
+# define __ASSERT_VOID_CAST static_cast<void>
+#else
+# define __ASSERT_VOID_CAST (void)
+#endif
+
+/* void assert (int expression);
+
+   If NDEBUG is defined, do nothing.
+   If not, and EXPRESSION is zero, print an error message and abort.  */
+
+#ifdef NDEBUG
+
+# define assert(expr)          (__ASSERT_VOID_CAST (0))
+
+/* void assert_perror (int errnum);
+
+   If NDEBUG is defined, do nothing.  If not, and ERRNUM is not zero, print an
+   error message with the error text for ERRNUM and abort.
+   (This is a GNU extension.) */
+
+# ifdef        __USE_GNU
+#  define assert_perror(errnum)        (__ASSERT_VOID_CAST (0))
+# endif
+
+#else /* Not NDEBUG.  */
+
+#ifndef _ASSERT_H_DECLS
+#define _ASSERT_H_DECLS
+__BEGIN_DECLS
+
+/* This prints an "Assertion failed" message and aborts.  */
+extern void __assert_fail (const char *__assertion, const char *__file,
+                          unsigned int __line, const char *__function)
+     __THROW __attribute__ ((__noreturn__));
+
+/* Likewise, but prints the error text for ERRNUM.  */
+extern void __assert_perror_fail (int __errnum, const char *__file,
+                                 unsigned int __line, const char *__function)
+     __THROW __attribute__ ((__noreturn__));
+
+
+/* The following is not at all used here but needed for standard
+   compliance.  */
+extern void __assert (const char *__assertion, const char *__file, int __line)
+     __THROW __attribute__ ((__noreturn__));
+
+
+__END_DECLS
+#endif /* Not _ASSERT_H_DECLS */
+
+# define assert(expr)                                                  \
+  ((expr)                                                              \
+   ? __ASSERT_VOID_CAST (0)                                            \
+   : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+
+# ifdef        __USE_GNU
+#  define assert_perror(errnum)                                                \
+  (!(errnum)                                                           \
+   ? __ASSERT_VOID_CAST (0)                                            \
+   : __assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION))
+# endif
+
+/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
+   which contains the name of the function currently being defined.
+   This is broken in G++ before version 2.6.
+   C9x has a similar variable called __func__, but prefer the GCC one since
+   it demangles C++ function names.  */
+# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
+#   define __ASSERT_FUNCTION   __PRETTY_FUNCTION__
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __ASSERT_FUNCTION   __func__
+#  else
+#   define __ASSERT_FUNCTION   ((const char *) 0)
+#  endif
+# endif
+
+#endif /* NDEBUG.  */
+
+
+#if defined __USE_ISOC11 && !defined __cplusplus
+# undef static_assert
+# define static_assert _Static_assert
+#endif
diff --git a/lib/libdss-include/bits/a.out.h b/lib/libdss-include/bits/a.out.h
new file mode 100644 (file)
index 0000000..0e7fb03
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef __A_OUT_GNU_H__
+# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
+#endif
+
+/* Signal to users of this header that this architecture really doesn't
+   support a.out binary format.  */
+#define __NO_A_OUT_SUPPORT 1
diff --git a/lib/libdss-include/bits/auxv.h b/lib/libdss-include/bits/auxv.h
new file mode 100644 (file)
index 0000000..76701c3
--- /dev/null
@@ -0,0 +1,76 @@
+/* Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Legal values for a_type (entry type).  */
+
+#define AT_NULL                0               /* End of vector */
+#define AT_IGNORE      1               /* Entry should be ignored */
+#define AT_EXECFD      2               /* File descriptor of program */
+#define AT_PHDR                3               /* Program headers for program */
+#define AT_PHENT       4               /* Size of program header entry */
+#define AT_PHNUM       5               /* Number of program headers */
+#define AT_PAGESZ      6               /* System page size */
+#define AT_BASE                7               /* Base address of interpreter */
+#define AT_FLAGS       8               /* Flags */
+#define AT_ENTRY       9               /* Entry point of program */
+#define AT_NOTELF      10              /* Program is not ELF */
+#define AT_UID         11              /* Real uid */
+#define AT_EUID                12              /* Effective uid */
+#define AT_GID         13              /* Real gid */
+#define AT_EGID                14              /* Effective gid */
+#define AT_CLKTCK      17              /* Frequency of times() */
+
+/* Some more special a_type values describing the hardware.  */
+#define AT_PLATFORM    15              /* String identifying platform.  */
+#define AT_HWCAP       16              /* Machine-dependent hints about
+                                          processor capabilities.  */
+
+/* This entry gives some information about the FPU initialization
+   performed by the kernel.  */
+#define AT_FPUCW       18              /* Used FPU control word.  */
+
+/* Cache block sizes.  */
+#define AT_DCACHEBSIZE 19              /* Data cache block size.  */
+#define AT_ICACHEBSIZE 20              /* Instruction cache block size.  */
+#define AT_UCACHEBSIZE 21              /* Unified cache block size.  */
+
+/* A special ignored value for PPC, used by the kernel to control the
+   interpretation of the AUXV. Must be > 16.  */
+#define AT_IGNOREPPC   22              /* Entry should be ignored.  */
+
+#define        AT_SECURE       23              /* Boolean, was exec setuid-like?  */
+
+#define AT_BASE_PLATFORM 24            /* String identifying real platforms.*/
+
+#define AT_RANDOM      25              /* Address of 16 random bytes.  */
+
+#define AT_HWCAP2      26              /* More machine-dependent hints about
+                                          processor capabilities.  */
+
+#define AT_EXECFN      31              /* Filename of executable.  */
+
+/* Pointer to the global system page used for system calls and other
+   nice things.  */
+#define AT_SYSINFO     32
+#define AT_SYSINFO_EHDR        33
+
+/* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
+   log2 of line size; mask those to get cache size.  */
+#define AT_L1I_CACHESHAPE      34
+#define AT_L1D_CACHESHAPE      35
+#define AT_L2_CACHESHAPE       36
+#define AT_L3_CACHESHAPE       37
diff --git a/lib/libdss-include/bits/byteswap-16.h b/lib/libdss-include/bits/byteswap-16.h
new file mode 100644 (file)
index 0000000..8063aa8
--- /dev/null
@@ -0,0 +1,34 @@
+/* Macros to swap the order of bytes in 16-bit integer values.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_BYTESWAP_H
+# error "Never use <bits/byteswap-16.h> directly; include <byteswap.h> instead."
+#endif
+
+#ifdef __GNUC__
+# define __bswap_16(x) \
+    (__extension__                                                           \
+     ({ unsigned short int __bsx = (unsigned short int) (x);                 \
+       __bswap_constant_16 (__bsx); }))
+#else
+static __inline unsigned short int
+__bswap_16 (unsigned short int __bsx)
+{
+  return __bswap_constant_16 (__bsx);
+}
+#endif
diff --git a/lib/libdss-include/bits/byteswap.h b/lib/libdss-include/bits/byteswap.h
new file mode 100644 (file)
index 0000000..0effea6
--- /dev/null
@@ -0,0 +1,112 @@
+/* Macros to swap the order of bytes in integer values.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
+# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
+#endif
+
+#ifndef _BITS_BYTESWAP_H
+#define _BITS_BYTESWAP_H 1
+
+#include <features.h>
+#include <bits/types.h>
+
+/* Swap bytes in 16 bit value.  */
+#define __bswap_constant_16(x) \
+       ((unsigned short int)((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)))
+
+/* Get __bswap_16.  */
+#include <bits/byteswap-16.h>
+
+/* Swap bytes in 32 bit value.  */
+#define __bswap_constant_32(x) \
+     ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >>  8) |            \
+      (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
+
+#ifdef __GNUC__
+# if __GNUC_PREREQ (4, 3)
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+  return __builtin_bswap32 (__bsx);
+}
+# else
+#  define __bswap_32(x) \
+  (__extension__                                                             \
+   ({ unsigned int __bsx = (x); __bswap_constant_32 (__bsx); }))
+# endif
+#else
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+  return __bswap_constant_32 (__bsx);
+}
+#endif
+
+/* Swap bytes in 64 bit value.  */
+#if __GNUC_PREREQ (2, 0)
+# define __bswap_constant_64(x) \
+     (__extension__ ((((x) & 0xff00000000000000ull) >> 56)                   \
+                    | (((x) & 0x00ff000000000000ull) >> 40)                  \
+                    | (((x) & 0x0000ff0000000000ull) >> 24)                  \
+                    | (((x) & 0x000000ff00000000ull) >> 8)                   \
+                    | (((x) & 0x00000000ff000000ull) << 8)                   \
+                    | (((x) & 0x0000000000ff0000ull) << 24)                  \
+                    | (((x) & 0x000000000000ff00ull) << 40)                  \
+                    | (((x) & 0x00000000000000ffull) << 56)))
+
+# if __GNUC_PREREQ (4, 3)
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+  return __builtin_bswap64 (__bsx);
+}
+# else
+#  define __bswap_64(x) \
+     (__extension__                                                          \
+      ({ union { __extension__ __uint64_t __ll;                                      \
+                unsigned int __l[2]; } __w, __r;                             \
+        if (__builtin_constant_p (x))                                        \
+          __r.__ll = __bswap_constant_64 (x);                                \
+        else                                                                 \
+          {                                                                  \
+            __w.__ll = (x);                                                  \
+            __r.__l[0] = __bswap_32 (__w.__l[1]);                            \
+            __r.__l[1] = __bswap_32 (__w.__l[0]);                            \
+          }                                                                  \
+        __r.__ll; }))
+# endif
+#else
+# define __bswap_constant_64(x) \
+     ((((x) & 0xff00000000000000ull) >> 56)                                  \
+      | (((x) & 0x00ff000000000000ull) >> 40)                                \
+      | (((x) & 0x0000ff0000000000ull) >> 24)                                \
+      | (((x) & 0x000000ff00000000ull) >> 8)                                 \
+      | (((x) & 0x00000000ff000000ull) << 8)                                 \
+      | (((x) & 0x0000000000ff0000ull) << 24)                                \
+      | (((x) & 0x000000000000ff00ull) << 40)                                \
+      | (((x) & 0x00000000000000ffull) << 56))
+
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+  return __bswap_constant_64 (__bsx);
+}
+#endif
+
+#endif /* _BITS_BYTESWAP_H */
diff --git a/lib/libdss-include/bits/cmathcalls.h b/lib/libdss-include/bits/cmathcalls.h
new file mode 100644 (file)
index 0000000..e02707e
--- /dev/null
@@ -0,0 +1,158 @@
+/* Prototype declarations for complex math functions;
+   helper file for <complex.h>.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* NOTE: Because of the special way this file is used by <complex.h>, this
+   file must NOT be protected from multiple inclusion as header files
+   usually are.
+
+   This file provides prototype declarations for the math functions.
+   Most functions are declared using the macro:
+
+   __MATHCALL (NAME, (ARGS...));
+
+   This means there is a function `NAME' returning `double' and a function
+   `NAMEf' returning `float'.  Each place `_Mdouble_' appears in the
+   prototype, that is actually `double' in the prototype for `NAME' and
+   `float' in the prototype for `NAMEf'.  Reentrant variant functions are
+   called `NAME_r' and `NAMEf_r'.
+
+   Functions returning other types like `int' are declared using the macro:
+
+   __MATHDECL (TYPE, NAME, (ARGS...));
+
+   This is just like __MATHCALL but for a function returning `TYPE'
+   instead of `_Mdouble_'.  In all of these cases, there is still
+   both a `NAME' and a `NAMEf' that takes `float' arguments.  */
+
+#ifndef _COMPLEX_H
+#error "Never use <bits/cmathcalls.h> directly; include <complex.h> instead."
+#endif
+
+#define _Mdouble_complex_ _Mdouble_ _Complex
+
+
+/* Trigonometric functions.  */
+
+/* Arc cosine of Z.  */
+__MATHCALL (cacos, (_Mdouble_complex_ __z));
+/* Arc sine of Z.  */
+__MATHCALL (casin, (_Mdouble_complex_ __z));
+/* Arc tangent of Z.  */
+__MATHCALL (catan, (_Mdouble_complex_ __z));
+
+/* Cosine of Z.  */
+__MATHCALL (ccos, (_Mdouble_complex_ __z));
+/* Sine of Z.  */
+__MATHCALL (csin, (_Mdouble_complex_ __z));
+/* Tangent of Z.  */
+__MATHCALL (ctan, (_Mdouble_complex_ __z));
+
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic arc cosine of Z.  */
+__MATHCALL (cacosh, (_Mdouble_complex_ __z));
+/* Hyperbolic arc sine of Z.  */
+__MATHCALL (casinh, (_Mdouble_complex_ __z));
+/* Hyperbolic arc tangent of Z.  */
+__MATHCALL (catanh, (_Mdouble_complex_ __z));
+
+/* Hyperbolic cosine of Z.  */
+__MATHCALL (ccosh, (_Mdouble_complex_ __z));
+/* Hyperbolic sine of Z.  */
+__MATHCALL (csinh, (_Mdouble_complex_ __z));
+/* Hyperbolic tangent of Z.  */
+__MATHCALL (ctanh, (_Mdouble_complex_ __z));
+
+
+/* Exponential and logarithmic functions.  */
+
+/* Exponential function of Z.  */
+__MATHCALL (cexp, (_Mdouble_complex_ __z));
+
+/* Natural logarithm of Z.  */
+__MATHCALL (clog, (_Mdouble_complex_ __z));
+
+#ifdef __USE_GNU
+/* The base 10 logarithm is not defined by the standard but to implement
+   the standard C++ library it is handy.  */
+__MATHCALL (clog10, (_Mdouble_complex_ __z));
+#endif
+
+/* Power functions.  */
+
+/* Return X to the Y power.  */
+__MATHCALL (cpow, (_Mdouble_complex_ __x, _Mdouble_complex_ __y));
+
+/* Return the square root of Z.  */
+__MATHCALL (csqrt, (_Mdouble_complex_ __z));
+
+
+/* Absolute value, conjugates, and projection.  */
+
+/* Absolute value of Z.  */
+__MATHDECL (_Mdouble_,cabs, (_Mdouble_complex_ __z));
+
+/* Argument value of Z.  */
+__MATHDECL (_Mdouble_,carg, (_Mdouble_complex_ __z));
+
+/* Complex conjugate of Z.  */
+__MATHCALL (conj, (_Mdouble_complex_ __z));
+
+/* Projection of Z onto the Riemann sphere.  */
+__MATHCALL (cproj, (_Mdouble_complex_ __z));
+
+
+/* Decomposing complex values.  */
+
+/* Imaginary part of Z.  */
+__MATHDECL (_Mdouble_,cimag, (_Mdouble_complex_ __z));
+
+/* Real part of Z.  */
+__MATHDECL (_Mdouble_,creal, (_Mdouble_complex_ __z));
+
+
+/* Now some optimized versions.  GCC has handy notations for these
+   functions.  Recent GCC handles these as builtin functions so does
+   not need inlines.  */
+#if defined __GNUC__ && !__GNUC_PREREQ (2, 97) && defined __OPTIMIZE__ \
+    && defined __extern_inline
+
+/* Imaginary part of Z.  */
+__extern_inline _Mdouble_
+__MATH_PRECNAME(cimag) (_Mdouble_complex_ __z) __THROW
+{
+  return __imag__ __z;
+}
+
+/* Real part of Z.  */
+__extern_inline _Mdouble_
+__MATH_PRECNAME(creal) (_Mdouble_complex_ __z) __THROW
+{
+  return __real__ __z;
+}
+
+/* Complex conjugate of Z.  */
+__extern_inline _Mdouble_complex_
+__MATH_PRECNAME(conj) (_Mdouble_complex_ __z) __THROW
+{
+  return __extension__ ~__z;
+}
+
+#endif
diff --git a/lib/libdss-include/bits/confname.h b/lib/libdss-include/bits/confname.h
new file mode 100644 (file)
index 0000000..b635933
--- /dev/null
@@ -0,0 +1,675 @@
+/* `sysconf', `pathconf', and `confstr' NAME values.  Generic version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never use <bits/confname.h> directly; include <unistd.h> instead."
+#endif
+
+/* Values for the NAME argument to `pathconf' and `fpathconf'.  */
+enum
+  {
+    _PC_LINK_MAX,
+#define        _PC_LINK_MAX                    _PC_LINK_MAX
+    _PC_MAX_CANON,
+#define        _PC_MAX_CANON                   _PC_MAX_CANON
+    _PC_MAX_INPUT,
+#define        _PC_MAX_INPUT                   _PC_MAX_INPUT
+    _PC_NAME_MAX,
+#define        _PC_NAME_MAX                    _PC_NAME_MAX
+    _PC_PATH_MAX,
+#define        _PC_PATH_MAX                    _PC_PATH_MAX
+    _PC_PIPE_BUF,
+#define        _PC_PIPE_BUF                    _PC_PIPE_BUF
+    _PC_CHOWN_RESTRICTED,
+#define        _PC_CHOWN_RESTRICTED            _PC_CHOWN_RESTRICTED
+    _PC_NO_TRUNC,
+#define        _PC_NO_TRUNC                    _PC_NO_TRUNC
+    _PC_VDISABLE,
+#define _PC_VDISABLE                   _PC_VDISABLE
+    _PC_SYNC_IO,
+#define        _PC_SYNC_IO                     _PC_SYNC_IO
+    _PC_ASYNC_IO,
+#define        _PC_ASYNC_IO                    _PC_ASYNC_IO
+    _PC_PRIO_IO,
+#define        _PC_PRIO_IO                     _PC_PRIO_IO
+    _PC_SOCK_MAXBUF,
+#define        _PC_SOCK_MAXBUF                 _PC_SOCK_MAXBUF
+    _PC_FILESIZEBITS,
+#define _PC_FILESIZEBITS               _PC_FILESIZEBITS
+    _PC_REC_INCR_XFER_SIZE,
+#define _PC_REC_INCR_XFER_SIZE         _PC_REC_INCR_XFER_SIZE
+    _PC_REC_MAX_XFER_SIZE,
+#define _PC_REC_MAX_XFER_SIZE          _PC_REC_MAX_XFER_SIZE
+    _PC_REC_MIN_XFER_SIZE,
+#define _PC_REC_MIN_XFER_SIZE          _PC_REC_MIN_XFER_SIZE
+    _PC_REC_XFER_ALIGN,
+#define _PC_REC_XFER_ALIGN             _PC_REC_XFER_ALIGN
+    _PC_ALLOC_SIZE_MIN,
+#define _PC_ALLOC_SIZE_MIN             _PC_ALLOC_SIZE_MIN
+    _PC_SYMLINK_MAX,
+#define _PC_SYMLINK_MAX                        _PC_SYMLINK_MAX
+    _PC_2_SYMLINKS
+#define _PC_2_SYMLINKS                 _PC_2_SYMLINKS
+  };
+
+/* Values for the argument to `sysconf'.  */
+enum
+  {
+    _SC_ARG_MAX,
+#define        _SC_ARG_MAX                     _SC_ARG_MAX
+    _SC_CHILD_MAX,
+#define        _SC_CHILD_MAX                   _SC_CHILD_MAX
+    _SC_CLK_TCK,
+#define        _SC_CLK_TCK                     _SC_CLK_TCK
+    _SC_NGROUPS_MAX,
+#define        _SC_NGROUPS_MAX                 _SC_NGROUPS_MAX
+    _SC_OPEN_MAX,
+#define        _SC_OPEN_MAX                    _SC_OPEN_MAX
+    _SC_STREAM_MAX,
+#define        _SC_STREAM_MAX                  _SC_STREAM_MAX
+    _SC_TZNAME_MAX,
+#define        _SC_TZNAME_MAX                  _SC_TZNAME_MAX
+    _SC_JOB_CONTROL,
+#define        _SC_JOB_CONTROL                 _SC_JOB_CONTROL
+    _SC_SAVED_IDS,
+#define        _SC_SAVED_IDS                   _SC_SAVED_IDS
+    _SC_REALTIME_SIGNALS,
+#define        _SC_REALTIME_SIGNALS            _SC_REALTIME_SIGNALS
+    _SC_PRIORITY_SCHEDULING,
+#define        _SC_PRIORITY_SCHEDULING         _SC_PRIORITY_SCHEDULING
+    _SC_TIMERS,
+#define        _SC_TIMERS                      _SC_TIMERS
+    _SC_ASYNCHRONOUS_IO,
+#define        _SC_ASYNCHRONOUS_IO             _SC_ASYNCHRONOUS_IO
+    _SC_PRIORITIZED_IO,
+#define        _SC_PRIORITIZED_IO              _SC_PRIORITIZED_IO
+    _SC_SYNCHRONIZED_IO,
+#define        _SC_SYNCHRONIZED_IO             _SC_SYNCHRONIZED_IO
+    _SC_FSYNC,
+#define        _SC_FSYNC                       _SC_FSYNC
+    _SC_MAPPED_FILES,
+#define        _SC_MAPPED_FILES                _SC_MAPPED_FILES
+    _SC_MEMLOCK,
+#define        _SC_MEMLOCK                     _SC_MEMLOCK
+    _SC_MEMLOCK_RANGE,
+#define        _SC_MEMLOCK_RANGE               _SC_MEMLOCK_RANGE
+    _SC_MEMORY_PROTECTION,
+#define        _SC_MEMORY_PROTECTION           _SC_MEMORY_PROTECTION
+    _SC_MESSAGE_PASSING,
+#define        _SC_MESSAGE_PASSING             _SC_MESSAGE_PASSING
+    _SC_SEMAPHORES,
+#define        _SC_SEMAPHORES                  _SC_SEMAPHORES
+    _SC_SHARED_MEMORY_OBJECTS,
+#define        _SC_SHARED_MEMORY_OBJECTS       _SC_SHARED_MEMORY_OBJECTS
+    _SC_AIO_LISTIO_MAX,
+#define        _SC_AIO_LISTIO_MAX              _SC_AIO_LISTIO_MAX
+    _SC_AIO_MAX,
+#define        _SC_AIO_MAX                     _SC_AIO_MAX
+    _SC_AIO_PRIO_DELTA_MAX,
+#define        _SC_AIO_PRIO_DELTA_MAX          _SC_AIO_PRIO_DELTA_MAX
+    _SC_DELAYTIMER_MAX,
+#define        _SC_DELAYTIMER_MAX              _SC_DELAYTIMER_MAX
+    _SC_MQ_OPEN_MAX,
+#define        _SC_MQ_OPEN_MAX                 _SC_MQ_OPEN_MAX
+    _SC_MQ_PRIO_MAX,
+#define        _SC_MQ_PRIO_MAX                 _SC_MQ_PRIO_MAX
+    _SC_VERSION,
+#define        _SC_VERSION                     _SC_VERSION
+    _SC_PAGESIZE,
+#define        _SC_PAGESIZE                    _SC_PAGESIZE
+#define        _SC_PAGE_SIZE                   _SC_PAGESIZE
+    _SC_RTSIG_MAX,
+#define        _SC_RTSIG_MAX                   _SC_RTSIG_MAX
+    _SC_SEM_NSEMS_MAX,
+#define        _SC_SEM_NSEMS_MAX               _SC_SEM_NSEMS_MAX
+    _SC_SEM_VALUE_MAX,
+#define        _SC_SEM_VALUE_MAX               _SC_SEM_VALUE_MAX
+    _SC_SIGQUEUE_MAX,
+#define        _SC_SIGQUEUE_MAX                _SC_SIGQUEUE_MAX
+    _SC_TIMER_MAX,
+#define        _SC_TIMER_MAX                   _SC_TIMER_MAX
+
+    /* Values for the argument to `sysconf'
+       corresponding to _POSIX2_* symbols.  */
+    _SC_BC_BASE_MAX,
+#define        _SC_BC_BASE_MAX                 _SC_BC_BASE_MAX
+    _SC_BC_DIM_MAX,
+#define        _SC_BC_DIM_MAX                  _SC_BC_DIM_MAX
+    _SC_BC_SCALE_MAX,
+#define        _SC_BC_SCALE_MAX                _SC_BC_SCALE_MAX
+    _SC_BC_STRING_MAX,
+#define        _SC_BC_STRING_MAX               _SC_BC_STRING_MAX
+    _SC_COLL_WEIGHTS_MAX,
+#define        _SC_COLL_WEIGHTS_MAX            _SC_COLL_WEIGHTS_MAX
+    _SC_EQUIV_CLASS_MAX,
+#define        _SC_EQUIV_CLASS_MAX             _SC_EQUIV_CLASS_MAX
+    _SC_EXPR_NEST_MAX,
+#define        _SC_EXPR_NEST_MAX               _SC_EXPR_NEST_MAX
+    _SC_LINE_MAX,
+#define        _SC_LINE_MAX                    _SC_LINE_MAX
+    _SC_RE_DUP_MAX,
+#define        _SC_RE_DUP_MAX                  _SC_RE_DUP_MAX
+    _SC_CHARCLASS_NAME_MAX,
+#define        _SC_CHARCLASS_NAME_MAX          _SC_CHARCLASS_NAME_MAX
+
+    _SC_2_VERSION,
+#define        _SC_2_VERSION                   _SC_2_VERSION
+    _SC_2_C_BIND,
+#define        _SC_2_C_BIND                    _SC_2_C_BIND
+    _SC_2_C_DEV,
+#define        _SC_2_C_DEV                     _SC_2_C_DEV
+    _SC_2_FORT_DEV,
+#define        _SC_2_FORT_DEV                  _SC_2_FORT_DEV
+    _SC_2_FORT_RUN,
+#define        _SC_2_FORT_RUN                  _SC_2_FORT_RUN
+    _SC_2_SW_DEV,
+#define        _SC_2_SW_DEV                    _SC_2_SW_DEV
+    _SC_2_LOCALEDEF,
+#define        _SC_2_LOCALEDEF                 _SC_2_LOCALEDEF
+
+    _SC_PII,
+#define        _SC_PII                         _SC_PII
+    _SC_PII_XTI,
+#define        _SC_PII_XTI                     _SC_PII_XTI
+    _SC_PII_SOCKET,
+#define        _SC_PII_SOCKET                  _SC_PII_SOCKET
+    _SC_PII_INTERNET,
+#define        _SC_PII_INTERNET                _SC_PII_INTERNET
+    _SC_PII_OSI,
+#define        _SC_PII_OSI                     _SC_PII_OSI
+    _SC_POLL,
+#define        _SC_POLL                        _SC_POLL
+    _SC_SELECT,
+#define        _SC_SELECT                      _SC_SELECT
+    _SC_UIO_MAXIOV,
+#define        _SC_UIO_MAXIOV                  _SC_UIO_MAXIOV
+    _SC_IOV_MAX = _SC_UIO_MAXIOV,
+#define _SC_IOV_MAX                    _SC_IOV_MAX
+    _SC_PII_INTERNET_STREAM,
+#define        _SC_PII_INTERNET_STREAM         _SC_PII_INTERNET_STREAM
+    _SC_PII_INTERNET_DGRAM,
+#define        _SC_PII_INTERNET_DGRAM          _SC_PII_INTERNET_DGRAM
+    _SC_PII_OSI_COTS,
+#define        _SC_PII_OSI_COTS                _SC_PII_OSI_COTS
+    _SC_PII_OSI_CLTS,
+#define        _SC_PII_OSI_CLTS                _SC_PII_OSI_CLTS
+    _SC_PII_OSI_M,
+#define        _SC_PII_OSI_M                   _SC_PII_OSI_M
+    _SC_T_IOV_MAX,
+#define        _SC_T_IOV_MAX                   _SC_T_IOV_MAX
+
+    /* Values according to POSIX 1003.1c (POSIX threads).  */
+    _SC_THREADS,
+#define        _SC_THREADS                     _SC_THREADS
+    _SC_THREAD_SAFE_FUNCTIONS,
+#define _SC_THREAD_SAFE_FUNCTIONS      _SC_THREAD_SAFE_FUNCTIONS
+    _SC_GETGR_R_SIZE_MAX,
+#define        _SC_GETGR_R_SIZE_MAX            _SC_GETGR_R_SIZE_MAX
+    _SC_GETPW_R_SIZE_MAX,
+#define        _SC_GETPW_R_SIZE_MAX            _SC_GETPW_R_SIZE_MAX
+    _SC_LOGIN_NAME_MAX,
+#define        _SC_LOGIN_NAME_MAX              _SC_LOGIN_NAME_MAX
+    _SC_TTY_NAME_MAX,
+#define        _SC_TTY_NAME_MAX                _SC_TTY_NAME_MAX
+    _SC_THREAD_DESTRUCTOR_ITERATIONS,
+#define        _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS
+    _SC_THREAD_KEYS_MAX,
+#define        _SC_THREAD_KEYS_MAX             _SC_THREAD_KEYS_MAX
+    _SC_THREAD_STACK_MIN,
+#define        _SC_THREAD_STACK_MIN            _SC_THREAD_STACK_MIN
+    _SC_THREAD_THREADS_MAX,
+#define        _SC_THREAD_THREADS_MAX          _SC_THREAD_THREADS_MAX
+    _SC_THREAD_ATTR_STACKADDR,
+#define        _SC_THREAD_ATTR_STACKADDR       _SC_THREAD_ATTR_STACKADDR
+    _SC_THREAD_ATTR_STACKSIZE,
+#define        _SC_THREAD_ATTR_STACKSIZE       _SC_THREAD_ATTR_STACKSIZE
+    _SC_THREAD_PRIORITY_SCHEDULING,
+#define        _SC_THREAD_PRIORITY_SCHEDULING  _SC_THREAD_PRIORITY_SCHEDULING
+    _SC_THREAD_PRIO_INHERIT,
+#define        _SC_THREAD_PRIO_INHERIT         _SC_THREAD_PRIO_INHERIT
+    _SC_THREAD_PRIO_PROTECT,
+#define        _SC_THREAD_PRIO_PROTECT         _SC_THREAD_PRIO_PROTECT
+    _SC_THREAD_PROCESS_SHARED,
+#define        _SC_THREAD_PROCESS_SHARED       _SC_THREAD_PROCESS_SHARED
+
+    _SC_NPROCESSORS_CONF,
+#define _SC_NPROCESSORS_CONF           _SC_NPROCESSORS_CONF
+    _SC_NPROCESSORS_ONLN,
+#define _SC_NPROCESSORS_ONLN           _SC_NPROCESSORS_ONLN
+    _SC_PHYS_PAGES,
+#define _SC_PHYS_PAGES                 _SC_PHYS_PAGES
+    _SC_AVPHYS_PAGES,
+#define _SC_AVPHYS_PAGES               _SC_AVPHYS_PAGES
+    _SC_ATEXIT_MAX,
+#define _SC_ATEXIT_MAX                 _SC_ATEXIT_MAX
+    _SC_PASS_MAX,
+#define _SC_PASS_MAX                   _SC_PASS_MAX
+
+    _SC_XOPEN_VERSION,
+#define _SC_XOPEN_VERSION              _SC_XOPEN_VERSION
+    _SC_XOPEN_XCU_VERSION,
+#define _SC_XOPEN_XCU_VERSION          _SC_XOPEN_XCU_VERSION
+    _SC_XOPEN_UNIX,
+#define _SC_XOPEN_UNIX                 _SC_XOPEN_UNIX
+    _SC_XOPEN_CRYPT,
+#define _SC_XOPEN_CRYPT                        _SC_XOPEN_CRYPT
+    _SC_XOPEN_ENH_I18N,
+#define _SC_XOPEN_ENH_I18N             _SC_XOPEN_ENH_I18N
+    _SC_XOPEN_SHM,
+#define _SC_XOPEN_SHM                  _SC_XOPEN_SHM
+
+    _SC_2_CHAR_TERM,
+#define _SC_2_CHAR_TERM                        _SC_2_CHAR_TERM
+    _SC_2_C_VERSION,
+#define _SC_2_C_VERSION                        _SC_2_C_VERSION
+    _SC_2_UPE,
+#define _SC_2_UPE                      _SC_2_UPE
+
+    _SC_XOPEN_XPG2,
+#define _SC_XOPEN_XPG2                 _SC_XOPEN_XPG2
+    _SC_XOPEN_XPG3,
+#define _SC_XOPEN_XPG3                 _SC_XOPEN_XPG3
+    _SC_XOPEN_XPG4,
+#define _SC_XOPEN_XPG4                 _SC_XOPEN_XPG4
+
+    _SC_CHAR_BIT,
+#define        _SC_CHAR_BIT                    _SC_CHAR_BIT
+    _SC_CHAR_MAX,
+#define        _SC_CHAR_MAX                    _SC_CHAR_MAX
+    _SC_CHAR_MIN,
+#define        _SC_CHAR_MIN                    _SC_CHAR_MIN
+    _SC_INT_MAX,
+#define        _SC_INT_MAX                     _SC_INT_MAX
+    _SC_INT_MIN,
+#define        _SC_INT_MIN                     _SC_INT_MIN
+    _SC_LONG_BIT,
+#define        _SC_LONG_BIT                    _SC_LONG_BIT
+    _SC_WORD_BIT,
+#define        _SC_WORD_BIT                    _SC_WORD_BIT
+    _SC_MB_LEN_MAX,
+#define        _SC_MB_LEN_MAX                  _SC_MB_LEN_MAX
+    _SC_NZERO,
+#define        _SC_NZERO                       _SC_NZERO
+    _SC_SSIZE_MAX,
+#define        _SC_SSIZE_MAX                   _SC_SSIZE_MAX
+    _SC_SCHAR_MAX,
+#define        _SC_SCHAR_MAX                   _SC_SCHAR_MAX
+    _SC_SCHAR_MIN,
+#define        _SC_SCHAR_MIN                   _SC_SCHAR_MIN
+    _SC_SHRT_MAX,
+#define        _SC_SHRT_MAX                    _SC_SHRT_MAX
+    _SC_SHRT_MIN,
+#define        _SC_SHRT_MIN                    _SC_SHRT_MIN
+    _SC_UCHAR_MAX,
+#define        _SC_UCHAR_MAX                   _SC_UCHAR_MAX
+    _SC_UINT_MAX,
+#define        _SC_UINT_MAX                    _SC_UINT_MAX
+    _SC_ULONG_MAX,
+#define        _SC_ULONG_MAX                   _SC_ULONG_MAX
+    _SC_USHRT_MAX,
+#define        _SC_USHRT_MAX                   _SC_USHRT_MAX
+
+    _SC_NL_ARGMAX,
+#define        _SC_NL_ARGMAX                   _SC_NL_ARGMAX
+    _SC_NL_LANGMAX,
+#define        _SC_NL_LANGMAX                  _SC_NL_LANGMAX
+    _SC_NL_MSGMAX,
+#define        _SC_NL_MSGMAX                   _SC_NL_MSGMAX
+    _SC_NL_NMAX,
+#define        _SC_NL_NMAX                     _SC_NL_NMAX
+    _SC_NL_SETMAX,
+#define        _SC_NL_SETMAX                   _SC_NL_SETMAX
+    _SC_NL_TEXTMAX,
+#define        _SC_NL_TEXTMAX                  _SC_NL_TEXTMAX
+
+    _SC_XBS5_ILP32_OFF32,
+#define _SC_XBS5_ILP32_OFF32           _SC_XBS5_ILP32_OFF32
+    _SC_XBS5_ILP32_OFFBIG,
+#define _SC_XBS5_ILP32_OFFBIG          _SC_XBS5_ILP32_OFFBIG
+    _SC_XBS5_LP64_OFF64,
+#define _SC_XBS5_LP64_OFF64            _SC_XBS5_LP64_OFF64
+    _SC_XBS5_LPBIG_OFFBIG,
+#define _SC_XBS5_LPBIG_OFFBIG          _SC_XBS5_LPBIG_OFFBIG
+
+    _SC_XOPEN_LEGACY,
+#define _SC_XOPEN_LEGACY               _SC_XOPEN_LEGACY
+    _SC_XOPEN_REALTIME,
+#define _SC_XOPEN_REALTIME             _SC_XOPEN_REALTIME
+    _SC_XOPEN_REALTIME_THREADS,
+#define _SC_XOPEN_REALTIME_THREADS     _SC_XOPEN_REALTIME_THREADS
+
+    _SC_ADVISORY_INFO,
+#define _SC_ADVISORY_INFO              _SC_ADVISORY_INFO
+    _SC_BARRIERS,
+#define _SC_BARRIERS                   _SC_BARRIERS
+    _SC_BASE,
+#define _SC_BASE                       _SC_BASE
+    _SC_C_LANG_SUPPORT,
+#define _SC_C_LANG_SUPPORT             _SC_C_LANG_SUPPORT
+    _SC_C_LANG_SUPPORT_R,
+#define _SC_C_LANG_SUPPORT_R           _SC_C_LANG_SUPPORT_R
+    _SC_CLOCK_SELECTION,
+#define _SC_CLOCK_SELECTION            _SC_CLOCK_SELECTION
+    _SC_CPUTIME,
+#define _SC_CPUTIME                    _SC_CPUTIME
+    _SC_THREAD_CPUTIME,
+#define _SC_THREAD_CPUTIME             _SC_THREAD_CPUTIME
+    _SC_DEVICE_IO,
+#define _SC_DEVICE_IO                  _SC_DEVICE_IO
+    _SC_DEVICE_SPECIFIC,
+#define _SC_DEVICE_SPECIFIC            _SC_DEVICE_SPECIFIC
+    _SC_DEVICE_SPECIFIC_R,
+#define _SC_DEVICE_SPECIFIC_R          _SC_DEVICE_SPECIFIC_R
+    _SC_FD_MGMT,
+#define _SC_FD_MGMT                    _SC_FD_MGMT
+    _SC_FIFO,
+#define _SC_FIFO                       _SC_FIFO
+    _SC_PIPE,
+#define _SC_PIPE                       _SC_PIPE
+    _SC_FILE_ATTRIBUTES,
+#define _SC_FILE_ATTRIBUTES            _SC_FILE_ATTRIBUTES
+    _SC_FILE_LOCKING,
+#define _SC_FILE_LOCKING               _SC_FILE_LOCKING
+    _SC_FILE_SYSTEM,
+#define _SC_FILE_SYSTEM                        _SC_FILE_SYSTEM
+    _SC_MONOTONIC_CLOCK,
+#define _SC_MONOTONIC_CLOCK            _SC_MONOTONIC_CLOCK
+    _SC_MULTI_PROCESS,
+#define _SC_MULTI_PROCESS              _SC_MULTI_PROCESS
+    _SC_SINGLE_PROCESS,
+#define _SC_SINGLE_PROCESS             _SC_SINGLE_PROCESS
+    _SC_NETWORKING,
+#define _SC_NETWORKING                 _SC_NETWORKING
+    _SC_READER_WRITER_LOCKS,
+#define _SC_READER_WRITER_LOCKS                _SC_READER_WRITER_LOCKS
+    _SC_SPIN_LOCKS,
+#define _SC_SPIN_LOCKS                 _SC_SPIN_LOCKS
+    _SC_REGEXP,
+#define _SC_REGEXP                     _SC_REGEXP
+    _SC_REGEX_VERSION,
+#define _SC_REGEX_VERSION              _SC_REGEX_VERSION
+    _SC_SHELL,
+#define _SC_SHELL                      _SC_SHELL
+    _SC_SIGNALS,
+#define _SC_SIGNALS                    _SC_SIGNALS
+    _SC_SPAWN,
+#define _SC_SPAWN                      _SC_SPAWN
+    _SC_SPORADIC_SERVER,
+#define _SC_SPORADIC_SERVER            _SC_SPORADIC_SERVER
+    _SC_THREAD_SPORADIC_SERVER,
+#define _SC_THREAD_SPORADIC_SERVER     _SC_THREAD_SPORADIC_SERVER
+    _SC_SYSTEM_DATABASE,
+#define _SC_SYSTEM_DATABASE            _SC_SYSTEM_DATABASE
+    _SC_SYSTEM_DATABASE_R,
+#define _SC_SYSTEM_DATABASE_R          _SC_SYSTEM_DATABASE_R
+    _SC_TIMEOUTS,
+#define _SC_TIMEOUTS                   _SC_TIMEOUTS
+    _SC_TYPED_MEMORY_OBJECTS,
+#define _SC_TYPED_MEMORY_OBJECTS       _SC_TYPED_MEMORY_OBJECTS
+    _SC_USER_GROUPS,
+#define _SC_USER_GROUPS                        _SC_USER_GROUPS
+    _SC_USER_GROUPS_R,
+#define _SC_USER_GROUPS_R              _SC_USER_GROUPS_R
+    _SC_2_PBS,
+#define _SC_2_PBS                      _SC_2_PBS
+    _SC_2_PBS_ACCOUNTING,
+#define _SC_2_PBS_ACCOUNTING           _SC_2_PBS_ACCOUNTING
+    _SC_2_PBS_LOCATE,
+#define _SC_2_PBS_LOCATE               _SC_2_PBS_LOCATE
+    _SC_2_PBS_MESSAGE,
+#define _SC_2_PBS_MESSAGE              _SC_2_PBS_MESSAGE
+    _SC_2_PBS_TRACK,
+#define _SC_2_PBS_TRACK                        _SC_2_PBS_TRACK
+    _SC_SYMLOOP_MAX,
+#define _SC_SYMLOOP_MAX                        _SC_SYMLOOP_MAX
+    _SC_STREAMS,
+#define _SC_STREAMS                    _SC_STREAMS
+    _SC_2_PBS_CHECKPOINT,
+#define _SC_2_PBS_CHECKPOINT           _SC_2_PBS_CHECKPOINT
+
+    _SC_V6_ILP32_OFF32,
+#define _SC_V6_ILP32_OFF32             _SC_V6_ILP32_OFF32
+    _SC_V6_ILP32_OFFBIG,
+#define _SC_V6_ILP32_OFFBIG            _SC_V6_ILP32_OFFBIG
+    _SC_V6_LP64_OFF64,
+#define _SC_V6_LP64_OFF64              _SC_V6_LP64_OFF64
+    _SC_V6_LPBIG_OFFBIG,
+#define _SC_V6_LPBIG_OFFBIG            _SC_V6_LPBIG_OFFBIG
+
+    _SC_HOST_NAME_MAX,
+#define _SC_HOST_NAME_MAX              _SC_HOST_NAME_MAX
+    _SC_TRACE,
+#define _SC_TRACE                      _SC_TRACE
+    _SC_TRACE_EVENT_FILTER,
+#define _SC_TRACE_EVENT_FILTER         _SC_TRACE_EVENT_FILTER
+    _SC_TRACE_INHERIT,
+#define _SC_TRACE_INHERIT              _SC_TRACE_INHERIT
+    _SC_TRACE_LOG,
+#define _SC_TRACE_LOG                  _SC_TRACE_LOG
+
+    _SC_LEVEL1_ICACHE_SIZE,
+#define _SC_LEVEL1_ICACHE_SIZE         _SC_LEVEL1_ICACHE_SIZE
+    _SC_LEVEL1_ICACHE_ASSOC,
+#define _SC_LEVEL1_ICACHE_ASSOC                _SC_LEVEL1_ICACHE_ASSOC
+    _SC_LEVEL1_ICACHE_LINESIZE,
+#define _SC_LEVEL1_ICACHE_LINESIZE     _SC_LEVEL1_ICACHE_LINESIZE
+    _SC_LEVEL1_DCACHE_SIZE,
+#define _SC_LEVEL1_DCACHE_SIZE         _SC_LEVEL1_DCACHE_SIZE
+    _SC_LEVEL1_DCACHE_ASSOC,
+#define _SC_LEVEL1_DCACHE_ASSOC                _SC_LEVEL1_DCACHE_ASSOC
+    _SC_LEVEL1_DCACHE_LINESIZE,
+#define _SC_LEVEL1_DCACHE_LINESIZE     _SC_LEVEL1_DCACHE_LINESIZE
+    _SC_LEVEL2_CACHE_SIZE,
+#define _SC_LEVEL2_CACHE_SIZE          _SC_LEVEL2_CACHE_SIZE
+    _SC_LEVEL2_CACHE_ASSOC,
+#define _SC_LEVEL2_CACHE_ASSOC         _SC_LEVEL2_CACHE_ASSOC
+    _SC_LEVEL2_CACHE_LINESIZE,
+#define _SC_LEVEL2_CACHE_LINESIZE      _SC_LEVEL2_CACHE_LINESIZE
+    _SC_LEVEL3_CACHE_SIZE,
+#define _SC_LEVEL3_CACHE_SIZE          _SC_LEVEL3_CACHE_SIZE
+    _SC_LEVEL3_CACHE_ASSOC,
+#define _SC_LEVEL3_CACHE_ASSOC         _SC_LEVEL3_CACHE_ASSOC
+    _SC_LEVEL3_CACHE_LINESIZE,
+#define _SC_LEVEL3_CACHE_LINESIZE      _SC_LEVEL3_CACHE_LINESIZE
+    _SC_LEVEL4_CACHE_SIZE,
+#define _SC_LEVEL4_CACHE_SIZE          _SC_LEVEL4_CACHE_SIZE
+    _SC_LEVEL4_CACHE_ASSOC,
+#define _SC_LEVEL4_CACHE_ASSOC         _SC_LEVEL4_CACHE_ASSOC
+    _SC_LEVEL4_CACHE_LINESIZE,
+#define _SC_LEVEL4_CACHE_LINESIZE      _SC_LEVEL4_CACHE_LINESIZE
+    /* Leave room here, maybe we need a few more cache levels some day.  */
+
+    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
+#define _SC_IPV6                       _SC_IPV6
+    _SC_RAW_SOCKETS,
+#define _SC_RAW_SOCKETS                        _SC_RAW_SOCKETS
+
+    _SC_V7_ILP32_OFF32,
+#define _SC_V7_ILP32_OFF32             _SC_V7_ILP32_OFF32
+    _SC_V7_ILP32_OFFBIG,
+#define _SC_V7_ILP32_OFFBIG            _SC_V7_ILP32_OFFBIG
+    _SC_V7_LP64_OFF64,
+#define _SC_V7_LP64_OFF64              _SC_V7_LP64_OFF64
+    _SC_V7_LPBIG_OFFBIG,
+#define _SC_V7_LPBIG_OFFBIG            _SC_V7_LPBIG_OFFBIG
+
+    _SC_SS_REPL_MAX,
+#define _SC_SS_REPL_MAX                        _SC_SS_REPL_MAX
+
+    _SC_TRACE_EVENT_NAME_MAX,
+#define _SC_TRACE_EVENT_NAME_MAX       _SC_TRACE_EVENT_NAME_MAX
+    _SC_TRACE_NAME_MAX,
+#define _SC_TRACE_NAME_MAX             _SC_TRACE_NAME_MAX
+    _SC_TRACE_SYS_MAX,
+#define _SC_TRACE_SYS_MAX              _SC_TRACE_SYS_MAX
+    _SC_TRACE_USER_EVENT_MAX,
+#define _SC_TRACE_USER_EVENT_MAX       _SC_TRACE_USER_EVENT_MAX
+
+    _SC_XOPEN_STREAMS,
+#define _SC_XOPEN_STREAMS              _SC_XOPEN_STREAMS
+
+    _SC_THREAD_ROBUST_PRIO_INHERIT,
+#define _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_INHERIT
+    _SC_THREAD_ROBUST_PRIO_PROTECT
+#define _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_ROBUST_PRIO_PROTECT
+  };
+
+/* Values for the NAME argument to `confstr'.  */
+enum
+  {
+    _CS_PATH,                  /* The default search path.  */
+#define _CS_PATH               _CS_PATH
+
+    _CS_V6_WIDTH_RESTRICTED_ENVS,
+#define _CS_V6_WIDTH_RESTRICTED_ENVS   _CS_V6_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS     _CS_V6_WIDTH_RESTRICTED_ENVS
+
+    _CS_GNU_LIBC_VERSION,
+#define _CS_GNU_LIBC_VERSION   _CS_GNU_LIBC_VERSION
+    _CS_GNU_LIBPTHREAD_VERSION,
+#define _CS_GNU_LIBPTHREAD_VERSION     _CS_GNU_LIBPTHREAD_VERSION
+
+    _CS_V5_WIDTH_RESTRICTED_ENVS,
+#define _CS_V5_WIDTH_RESTRICTED_ENVS   _CS_V5_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS     _CS_V5_WIDTH_RESTRICTED_ENVS
+
+    _CS_V7_WIDTH_RESTRICTED_ENVS,
+#define _CS_V7_WIDTH_RESTRICTED_ENVS   _CS_V7_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS     _CS_V7_WIDTH_RESTRICTED_ENVS
+
+    _CS_LFS_CFLAGS = 1000,
+#define _CS_LFS_CFLAGS _CS_LFS_CFLAGS
+    _CS_LFS_LDFLAGS,
+#define _CS_LFS_LDFLAGS        _CS_LFS_LDFLAGS
+    _CS_LFS_LIBS,
+#define _CS_LFS_LIBS           _CS_LFS_LIBS
+    _CS_LFS_LINTFLAGS,
+#define _CS_LFS_LINTFLAGS      _CS_LFS_LINTFLAGS
+    _CS_LFS64_CFLAGS,
+#define _CS_LFS64_CFLAGS       _CS_LFS64_CFLAGS
+    _CS_LFS64_LDFLAGS,
+#define _CS_LFS64_LDFLAGS      _CS_LFS64_LDFLAGS
+    _CS_LFS64_LIBS,
+#define _CS_LFS64_LIBS _CS_LFS64_LIBS
+    _CS_LFS64_LINTFLAGS,
+#define _CS_LFS64_LINTFLAGS    _CS_LFS64_LINTFLAGS
+
+    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
+#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS
+    _CS_XBS5_ILP32_OFF32_LDFLAGS,
+#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS
+    _CS_XBS5_ILP32_OFF32_LIBS,
+#define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS
+    _CS_XBS5_ILP32_OFF32_LINTFLAGS,
+#define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS
+    _CS_XBS5_ILP32_OFFBIG_CFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS
+    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS
+    _CS_XBS5_ILP32_OFFBIG_LIBS,
+#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS
+    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+    _CS_XBS5_LP64_OFF64_CFLAGS,
+#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS
+    _CS_XBS5_LP64_OFF64_LDFLAGS,
+#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS
+    _CS_XBS5_LP64_OFF64_LIBS,
+#define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS
+    _CS_XBS5_LP64_OFF64_LINTFLAGS,
+#define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_LIBS,
+#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS
+    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS
+    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+    _CS_POSIX_V6_ILP32_OFF32_LIBS,
+#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS
+    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS
+    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
+    _CS_POSIX_V6_LP64_OFF64_CFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS
+    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS
+    _CS_POSIX_V6_LP64_OFF64_LIBS,
+#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS
+    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LIBS,
+#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
+    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
+    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LIBS,
+#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
+    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_V6_ENV,
+#define _CS_V6_ENV                     _CS_V6_ENV
+    _CS_V7_ENV
+#define _CS_V7_ENV                     _CS_V7_ENV
+  };
diff --git a/lib/libdss-include/bits/dirent.h b/lib/libdss-include/bits/dirent.h
new file mode 100644 (file)
index 0000000..31b1961
--- /dev/null
@@ -0,0 +1,57 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _DIRENT_H
+# error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
+#endif
+
+struct dirent
+  {
+#ifndef __USE_FILE_OFFSET64
+    __ino_t d_ino;
+    __off_t d_off;
+#else
+    __ino64_t d_ino;
+    __off64_t d_off;
+#endif
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct dirent64
+  {
+    __ino64_t d_ino;
+    __off64_t d_off;
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+#endif
+
+#define d_fileno       d_ino   /* Backwards compatibility.  */
+
+#undef  _DIRENT_HAVE_D_NAMLEN
+#define _DIRENT_HAVE_D_RECLEN
+#define _DIRENT_HAVE_D_OFF
+#define _DIRENT_HAVE_D_TYPE
+
+#if defined __OFF_T_MATCHES_OFF64_T && defined __INO_T_MATCHES_INO64_T
+/* Inform libc code that these two types are effectively identical.  */
+# define _DIRENT_MATCHES_DIRENT64      1
+#endif
diff --git a/lib/libdss-include/bits/dlfcn.h b/lib/libdss-include/bits/dlfcn.h
new file mode 100644 (file)
index 0000000..f4f98a1
--- /dev/null
@@ -0,0 +1,64 @@
+/* System dependent definitions for run-time dynamic loading.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _DLFCN_H
+# error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
+#endif
+
+/* The MODE argument to `dlopen' contains one of the following: */
+#define RTLD_LAZY      0x00001 /* Lazy function call binding.  */
+#define RTLD_NOW       0x00002 /* Immediate function call binding.  */
+#define        RTLD_BINDING_MASK   0x3 /* Mask of binding time value.  */
+#define RTLD_NOLOAD    0x00004 /* Do not load the object.  */
+#define RTLD_DEEPBIND  0x00008 /* Use deep binding.  */
+
+/* If the following bit is set in the MODE argument to `dlopen',
+   the symbols of the loaded object and its dependencies are made
+   visible as if the object were linked directly into the program.  */
+#define RTLD_GLOBAL    0x00100
+
+/* Unix98 demands the following flag which is the inverse to RTLD_GLOBAL.
+   The implementation does this by default and so we can define the
+   value to zero.  */
+#define RTLD_LOCAL     0
+
+/* Do not delete object when closed.  */
+#define RTLD_NODELETE  0x01000
+
+#ifdef __USE_GNU
+/* To support profiling of shared objects it is a good idea to call
+   the function found using `dlsym' using the following macro since
+   these calls do not use the PLT.  But this would mean the dynamic
+   loader has no chance to find out when the function is called.  The
+   macro applies the necessary magic so that profiling is possible.
+   Rewrite
+       foo = (*fctp) (arg1, arg2);
+   into
+        foo = DL_CALL_FCT (fctp, (arg1, arg2));
+*/
+# define DL_CALL_FCT(fctp, args) \
+  (_dl_mcount_wrapper_check ((void *) (fctp)), (*(fctp)) args)
+
+__BEGIN_DECLS
+
+/* This function calls the profiling functions.  */
+extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/bits/elfclass.h b/lib/libdss-include/bits/elfclass.h
new file mode 100644 (file)
index 0000000..180227d
--- /dev/null
@@ -0,0 +1,14 @@
+/* This file specifies the native word size of the machine, which indicates
+   the ELF file class used for executables and shared objects on this
+   machine.  */
+
+#ifndef _LINK_H
+# error "Never use <bits/elfclass.h> directly; include <link.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __ELF_NATIVE_CLASS __WORDSIZE
+
+/* The entries in the .hash table always have a size of 32 bits.  */
+typedef uint32_t Elf_Symndx;
diff --git a/lib/libdss-include/bits/endian.h b/lib/libdss-include/bits/endian.h
new file mode 100644 (file)
index 0000000..a32ebc0
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* AArch64 can be either big or little endian.  */
+#ifdef __AARCH64EB__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
diff --git a/lib/libdss-include/bits/environments.h b/lib/libdss-include/bits/environments.h
new file mode 100644 (file)
index 0000000..39d0702
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never include this file directly.  Use <unistd.h> instead"
+#endif
+
+#include <bits/wordsize.h>
+
+/* This header should define the following symbols under the described
+   situations.  A value `1' means that the model is always supported,
+   `-1' means it is never supported.  Undefined means it cannot be
+   statically decided.
+
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+
+   _POSIX_V7_LP64_OFF32           64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
+*/
+
+#if __WORDSIZE == 64
+
+/* We can never provide environments with 32-bit wide pointers.  */
+# define _POSIX_V7_ILP32_OFF32 -1
+# define _POSIX_V7_ILP32_OFFBIG        -1
+# define _POSIX_V6_ILP32_OFF32 -1
+# define _POSIX_V6_ILP32_OFFBIG        -1
+# define _XBS5_ILP32_OFF32     -1
+# define _XBS5_ILP32_OFFBIG    -1
+/* We also have no use (for now) for an environment with bigger pointers
+   and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG        -1
+# define _POSIX_V6_LPBIG_OFFBIG        -1
+# define _XBS5_LPBIG_OFFBIG    -1
+
+/* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64  1
+# define _POSIX_V6_LP64_OFF64  1
+# define _XBS5_LP64_OFF64      1
+
+#else /* __WORDSIZE == 32 */
+
+/* By default we have 32-bit wide `int', `long int', pointers and `off_t'
+   and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32 1
+# define _POSIX_V7_ILP32_OFFBIG        1
+# define _POSIX_V6_ILP32_OFF32 1
+# define _POSIX_V6_ILP32_OFFBIG        1
+# define _XBS5_ILP32_OFF32     1
+# define _XBS5_ILP32_OFFBIG    1
+
+/* We optionally provide an environment with the above size but an 64-bit
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
+
+/* We can never provide environments with 64-bit wide pointers.  */
+# define _POSIX_V7_LP64_OFF64  -1
+# define _POSIX_V7_LPBIG_OFFBIG        -1
+# define _POSIX_V6_LP64_OFF64  -1
+# define _POSIX_V6_LPBIG_OFFBIG        -1
+# define _XBS5_LP64_OFF64      -1
+# define _XBS5_LPBIG_OFFBIG    -1
+
+/* CFLAGS.  */
+#define __ILP32_OFFBIG_CFLAGS   "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+#endif /* __WORDSIZE == 32 */
diff --git a/lib/libdss-include/bits/epoll.h b/lib/libdss-include/bits/epoll.h
new file mode 100644 (file)
index 0000000..9e8c220
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EPOLL_H
+# error "Never use <bits/epoll.h> directly; include <sys/epoll.h> instead."
+#endif
+
+/* Flags to be passed to epoll_create1.  */
+enum
+  {
+    EPOLL_CLOEXEC = 02000000
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
+  };
diff --git a/lib/libdss-include/bits/errno.h b/lib/libdss-include/bits/errno.h
new file mode 100644 (file)
index 0000000..6b5a71e
--- /dev/null
@@ -0,0 +1,66 @@
+/* Error constants.  Linux specific version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef _ERRNO_H
+
+# undef EDOM
+# undef EILSEQ
+# undef ERANGE
+# include <linux/errno.h>
+
+/* Linux has no ENOTSUP error code.  */
+# define ENOTSUP EOPNOTSUPP
+
+/* Older Linux versions also had no ECANCELED error code.  */
+# ifndef ECANCELED
+#  define ECANCELED    125
+# endif
+
+/* Support for error codes to support robust mutexes was added later, too.  */
+# ifndef EOWNERDEAD
+#  define EOWNERDEAD           130
+#  define ENOTRECOVERABLE      131
+# endif
+
+# ifndef ERFKILL
+#  define ERFKILL              132
+# endif
+
+# ifndef EHWPOISON
+#  define EHWPOISON            133
+# endif
+
+# ifndef __ASSEMBLER__
+/* Function to get address of global `errno' variable.  */
+extern int *__errno_location (void) __THROW __attribute__ ((__const__));
+
+#  if !defined _LIBC || defined _LIBC_REENTRANT
+/* When using threads, errno is a per-thread value.  */
+#   define errno (*__errno_location ())
+#  endif
+# endif /* !__ASSEMBLER__ */
+#endif /* _ERRNO_H */
+
+#if !defined _ERRNO_H && defined __need_Emath
+/* This is ugly but the kernel header is not clean enough.  We must
+   define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
+   defined.  */
+# define EDOM  33      /* Math argument out of domain of function.  */
+# define EILSEQ        84      /* Illegal byte sequence.  */
+# define ERANGE        34      /* Math result not representable.  */
+#endif /* !_ERRNO_H && __need_Emath */
diff --git a/lib/libdss-include/bits/error.h b/lib/libdss-include/bits/error.h
new file mode 100644 (file)
index 0000000..8408289
--- /dev/null
@@ -0,0 +1,73 @@
+/* Specializations for error functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ERROR_H
+# error "Never include <bits/error.h> directly; use <error.h> instead."
+#endif
+
+
+extern void __REDIRECT (__error_alias, (int __status, int __errnum,
+                                       const char *__format, ...),
+                       error)
+  __attribute__ ((__format__ (__printf__, 3, 4)));
+extern void __REDIRECT (__error_noreturn, (int __status, int __errnum,
+                                          const char *__format, ...),
+                       error)
+  __attribute__ ((__noreturn__, __format__ (__printf__, 3, 4)));
+
+
+/* If we know the function will never return make sure the compiler
+   realizes that, too.  */
+__extern_always_inline void
+error (int __status, int __errnum, const char *__format, ...)
+{
+  if (__builtin_constant_p (__status) && __status != 0)
+    __error_noreturn (__status, __errnum, __format, __va_arg_pack ());
+  else
+    __error_alias (__status, __errnum, __format, __va_arg_pack ());
+}
+
+
+extern void __REDIRECT (__error_at_line_alias, (int __status, int __errnum,
+                                               const char *__fname,
+                                               unsigned int __line,
+                                               const char *__format, ...),
+                       error_at_line)
+  __attribute__ ((__format__ (__printf__, 5, 6)));
+extern void __REDIRECT (__error_at_line_noreturn, (int __status, int __errnum,
+                                                  const char *__fname,
+                                                  unsigned int __line,
+                                                  const char *__format,
+                                                  ...),
+                       error_at_line)
+  __attribute__ ((__noreturn__, __format__ (__printf__, 5, 6)));
+
+
+/* If we know the function will never return make sure the compiler
+   realizes that, too.  */
+__extern_always_inline void
+error_at_line (int __status, int __errnum, const char *__fname,
+              unsigned int __line, const char *__format, ...)
+{
+  if (__builtin_constant_p (__status) && __status != 0)
+    __error_at_line_noreturn (__status, __errnum, __fname, __line, __format,
+                             __va_arg_pack ());
+  else
+    __error_at_line_alias (__status, __errnum, __fname, __line,
+                          __format, __va_arg_pack ());
+}
diff --git a/lib/libdss-include/bits/eventfd.h b/lib/libdss-include/bits/eventfd.h
new file mode 100644 (file)
index 0000000..63c4944
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EVENTFD_H
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
+#endif
+
+/* Flags for eventfd.  */
+enum
+  {
+    EFD_SEMAPHORE = 00000001,
+#define EFD_SEMAPHORE EFD_SEMAPHORE
+    EFD_CLOEXEC = 02000000,
+#define EFD_CLOEXEC EFD_CLOEXEC
+    EFD_NONBLOCK = 00004000
+#define EFD_NONBLOCK EFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/bits/fcntl-linux.h b/lib/libdss-include/bits/fcntl-linux.h
new file mode 100644 (file)
index 0000000..1e1ff17
--- /dev/null
@@ -0,0 +1,437 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never use <bits/fcntl-linux.h> directly; include <fcntl.h> instead."
+#endif
+
+/* This file contains shared definitions between Linux architectures
+   and is included by <bits/fcntl.h> to declare them.  The various
+   #ifndef cases allow the architecture specific file to define those
+   values with different values.
+
+   A minimal <bits/fcntl.h> contains just:
+
+   struct flock {...}
+   #ifdef __USE_LARGEFILE64
+   struct flock64 {...}
+   #endif
+   #include <bits/fcntl-linux.h>
+*/
+
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
+/* open/fcntl.  */
+#define O_ACCMODE         0003
+#define O_RDONLY            00
+#define O_WRONLY            01
+#define O_RDWR              02
+#ifndef O_CREAT
+# define O_CREAT          0100 /* Not fcntl.  */
+#endif
+#ifndef O_EXCL
+# define O_EXCL                   0200 /* Not fcntl.  */
+#endif
+#ifndef O_NOCTTY
+# define O_NOCTTY         0400 /* Not fcntl.  */
+#endif
+#ifndef O_TRUNC
+# define O_TRUNC         01000 /* Not fcntl.  */
+#endif
+#ifndef O_APPEND
+# define O_APPEND        02000
+#endif
+#ifndef O_NONBLOCK
+# define O_NONBLOCK      04000
+#endif
+#ifndef O_NDELAY
+# define O_NDELAY      O_NONBLOCK
+#endif
+#ifndef O_SYNC
+# define O_SYNC               04010000
+#endif
+#define O_FSYNC                O_SYNC
+#ifndef O_ASYNC
+# define O_ASYNC        020000
+#endif
+#ifndef __O_LARGEFILE
+# define __O_LARGEFILE 0100000
+#endif
+
+#ifndef __O_DIRECTORY
+# define __O_DIRECTORY  0200000
+#endif
+#ifndef __O_NOFOLLOW
+# define __O_NOFOLLOW  0400000
+#endif
+#ifndef __O_CLOEXEC
+# define __O_CLOEXEC   02000000
+#endif
+#ifndef __O_DIRECT
+# define __O_DIRECT     040000
+#endif
+#ifndef __O_NOATIME
+# define __O_NOATIME   01000000
+#endif
+#ifndef __O_PATH
+# define __O_PATH     010000000
+#endif
+#ifndef __O_DSYNC
+# define __O_DSYNC      010000
+#endif
+#ifndef __O_TMPFILE
+# define __O_TMPFILE   (020000000 | __O_DIRECTORY)
+#endif
+
+#ifndef F_GETLK
+# ifndef __USE_FILE_OFFSET64
+#  define F_GETLK      5       /* Get record locking info.  */
+#  define F_SETLK      6       /* Set record locking info (non-blocking).  */
+#  define F_SETLKW     7       /* Set record locking info (blocking).  */
+# else
+#  define F_GETLK      F_GETLK64  /* Get record locking info.  */
+#  define F_SETLK      F_SETLK64  /* Set record locking info (non-blocking).*/
+#  define F_SETLKW     F_SETLKW64 /* Set record locking info (blocking).  */
+# endif
+#endif
+#ifndef F_GETLK64
+# define F_GETLK64     12      /* Get record locking info.  */
+# define F_SETLK64     13      /* Set record locking info (non-blocking).  */
+# define F_SETLKW64    14      /* Set record locking info (blocking).  */
+#endif
+
+/* open file description locks.
+
+   Usually record locks held by a process are released on *any* close and are
+   not inherited across a fork.
+
+   These cmd values will set locks that conflict with process-associated record
+   locks, but are "owned" by the opened file description, not the process.
+   This means that they are inherited across fork or clone with CLONE_FILES
+   like BSD (flock) locks, and they are only released automatically when the
+   last reference to the the file description against which they were acquired
+   is put. */
+#ifdef __USE_GNU
+# define F_OFD_GETLK   36
+# define F_OFD_SETLK   37
+# define F_OFD_SETLKW  38
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define O_LARGEFILE __O_LARGEFILE
+#endif
+
+#ifdef __USE_XOPEN2K8
+# define O_DIRECTORY   __O_DIRECTORY   /* Must be a directory.  */
+# define O_NOFOLLOW    __O_NOFOLLOW    /* Do not follow links.  */
+# define O_CLOEXEC     __O_CLOEXEC     /* Set close_on_exec.  */
+#endif
+
+#ifdef __USE_GNU
+# define O_DIRECT      __O_DIRECT      /* Direct disk access.  */
+# define O_NOATIME     __O_NOATIME     /* Do not set atime.  */
+# define O_PATH                __O_PATH        /* Resolve pathname but do not open file.  */
+# define O_TMPFILE     __O_TMPFILE     /* Atomically create nameless file.  */
+#endif
+
+/* For now, Linux has no separate synchronicitiy options for read
+   operations.  We define O_RSYNC therefore as the same as O_SYNC
+   since this is a superset.  */
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+# define O_DSYNC       __O_DSYNC       /* Synchronize data.  */
+# if defined __O_RSYNC
+#  define O_RSYNC      __O_RSYNC       /* Synchronize read operations.  */
+# else
+#  define O_RSYNC      O_SYNC          /* Synchronize read operations.  */
+# endif
+#endif
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+
+#ifndef __F_SETOWN
+# define __F_SETOWN    8
+# define __F_GETOWN    9
+#endif
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# define F_SETOWN      __F_SETOWN /* Get owner (process receiving SIGIO).  */
+# define F_GETOWN      __F_GETOWN /* Set owner (process receiving SIGIO).  */
+#endif
+
+#ifndef __F_SETSIG
+# define __F_SETSIG    10      /* Set number of signal to be sent.  */
+# define __F_GETSIG    11      /* Get number of signal to be sent.  */
+#endif
+#ifndef __F_SETOWN_EX
+# define __F_SETOWN_EX 15      /* Get owner (thread receiving SIGIO).  */
+# define __F_GETOWN_EX 16      /* Set owner (thread receiving SIGIO).  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETSIG      __F_SETSIG      /* Set number of signal to be sent.  */
+# define F_GETSIG      __F_GETSIG      /* Get number of signal to be sent.  */
+# define F_SETOWN_EX   __F_SETOWN_EX   /* Get owner (thread receiving SIGIO).  */
+# define F_GETOWN_EX   __F_GETOWN_EX   /* Set owner (thread receiving SIGIO).  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETLEASE    1024    /* Set a lease.  */
+# define F_GETLEASE    1025    /* Enquire what lease is active.  */
+# define F_NOTIFY      1026    /* Request notifications on a directory.  */
+# define F_SETPIPE_SZ  1031    /* Set pipe page size array.  */
+# define F_GETPIPE_SZ  1032    /* Set pipe page size array.  */
+#endif
+#ifdef __USE_XOPEN2K8
+# define F_DUPFD_CLOEXEC 1030  /* Duplicate file descriptor with
+                                  close-on-exit set.  */
+#endif
+
+/* For F_[GET|SET]FD.  */
+#define FD_CLOEXEC     1       /* Actually anything with low bit set goes */
+
+#ifndef F_RDLCK
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+# define F_RDLCK               0       /* Read lock.  */
+# define F_WRLCK               1       /* Write lock.  */
+# define F_UNLCK               2       /* Remove lock.  */
+#endif
+
+
+/* For old implementation of BSD flock.  */
+#ifndef F_EXLCK
+# define F_EXLCK               4       /* or 3 */
+# define F_SHLCK               8       /* or 4 */
+#endif
+
+#ifdef __USE_MISC
+/* Operations for BSD flock, also used by the kernel implementation.  */
+# define LOCK_SH       1       /* Shared lock.  */
+# define LOCK_EX       2       /* Exclusive lock.  */
+# define LOCK_NB       4       /* Or'd with one of the above to prevent
+                                  blocking.  */
+# define LOCK_UN       8       /* Remove lock.  */
+#endif
+
+#ifdef __USE_GNU
+# define LOCK_MAND     32      /* This is a mandatory flock:   */
+# define LOCK_READ     64      /* ... which allows concurrent read operations.  */
+# define LOCK_WRITE    128     /* ... which allows concurrent write operations.  */
+# define LOCK_RW       192     /* ... Which allows concurrent read & write operations.  */
+#endif
+
+#ifdef __USE_GNU
+/* Types of directory notifications that may be requested with F_NOTIFY.  */
+# define DN_ACCESS     0x00000001      /* File accessed.  */
+# define DN_MODIFY     0x00000002      /* File modified.  */
+# define DN_CREATE     0x00000004      /* File created.  */
+# define DN_DELETE     0x00000008      /* File removed.  */
+# define DN_RENAME     0x00000010      /* File renamed.  */
+# define DN_ATTRIB     0x00000020      /* File changed attributes.  */
+# define DN_MULTISHOT  0x80000000      /* Don't remove notifier.  */
+#endif
+
+
+#ifdef __USE_GNU
+/* Owner types.  */
+enum __pid_type
+  {
+    F_OWNER_TID = 0,           /* Kernel thread.  */
+    F_OWNER_PID,               /* Process.  */
+    F_OWNER_PGRP,              /* Process group.  */
+    F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name.  */
+  };
+
+/* Structure to use with F_GETOWN_EX and F_SETOWN_EX.  */
+struct f_owner_ex
+  {
+    enum __pid_type type;      /* Owner type of ID.  */
+    __pid_t pid;               /* ID of owner.  */
+  };
+#endif
+
+/* Define some more compatibility macros to be backward compatible with
+   BSD systems which did not managed to hide these kernel macros.  */
+#ifdef __USE_MISC
+# define FAPPEND       O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
+#endif /* Use misc.  */
+
+#ifndef __POSIX_FADV_DONTNEED
+#  define __POSIX_FADV_DONTNEED        4
+#  define __POSIX_FADV_NOREUSE 5
+#endif
+/* Advise to `posix_fadvise'.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_FADV_NORMAL     0 /* No further special treatment.  */
+# define POSIX_FADV_RANDOM     1 /* Expect random page references.  */
+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_FADV_WILLNEED   3 /* Will need these pages.  */
+# define POSIX_FADV_DONTNEED   __POSIX_FADV_DONTNEED /* Don't need these pages.  */
+# define POSIX_FADV_NOREUSE    __POSIX_FADV_NOREUSE /* Data will be accessed once.  */
+#endif
+
+
+#ifdef __USE_GNU
+/* Flags for SYNC_FILE_RANGE.  */
+# define SYNC_FILE_RANGE_WAIT_BEFORE   1 /* Wait upon writeout of all pages
+                                            in the range before performing the
+                                            write.  */
+# define SYNC_FILE_RANGE_WRITE         2 /* Initiate writeout of all those
+                                            dirty pages in the range which are
+                                            not presently under writeback.  */
+# define SYNC_FILE_RANGE_WAIT_AFTER    4 /* Wait upon writeout of all pages in
+                                            the range after performing the
+                                            write.  */
+
+/* Flags for SPLICE and VMSPLICE.  */
+# define SPLICE_F_MOVE         1       /* Move pages instead of copying.  */
+# define SPLICE_F_NONBLOCK     2       /* Don't block on the pipe splicing
+                                          (but we may still block on the fd
+                                          we splice from/to).  */
+# define SPLICE_F_MORE         4       /* Expect more data.  */
+# define SPLICE_F_GIFT         8       /* Pages passed in are a gift.  */
+
+
+/* Flags for fallocate.  */
+# define FALLOC_FL_KEEP_SIZE           1 /* Don't extend size of file
+                                            even if offset + len is
+                                            greater than file size.  */
+# define FALLOC_FL_PUNCH_HOLE          2 /* Create a hole in the file.  */
+# define FALLOC_FL_COLLAPSE_RANGE      8 /* Remove a range of a file
+                                            without leaving a
+                                            hole.  */
+# define FALLOC_FL_ZERO_RANGE          16 /* Convert a range of a
+                                             file to zeros.  */
+
+
+/* File handle structure.  */
+struct file_handle
+{
+  unsigned int handle_bytes;
+  int handle_type;
+  /* File identifier.  */
+  unsigned char f_handle[0];
+};
+
+/* Maximum handle size (for now).  */
+# define MAX_HANDLE_SZ 128
+#endif
+
+/* Values for `*at' functions.  */
+#ifdef __USE_ATFILE
+# define AT_FDCWD              -100    /* Special value used to indicate
+                                          the *at functions should use the
+                                          current working directory. */
+# define AT_SYMLINK_NOFOLLOW   0x100   /* Do not follow symbolic links.  */
+# define AT_REMOVEDIR          0x200   /* Remove directory instead of
+                                          unlinking file.  */
+# define AT_SYMLINK_FOLLOW     0x400   /* Follow symbolic links.  */
+# ifdef __USE_GNU
+#  define AT_NO_AUTOMOUNT      0x800   /* Suppress terminal automount
+                                          traversal.  */
+#  define AT_EMPTY_PATH                0x1000  /* Allow empty relative pathname.  */
+# endif
+# define AT_EACCESS            0x200   /* Test access permitted for
+                                          effective IDs, not real IDs.  */
+#endif
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+
+/* Provide kernel hint to read ahead.  */
+extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
+    __THROW;
+
+
+/* Selective file content synch'ing.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
+                           unsigned int __flags);
+
+
+/* Splice address range into a pipe.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
+                        size_t __count, unsigned int __flags);
+
+/* Splice two files together.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
+                      __off64_t *__offout, size_t __len,
+                      unsigned int __flags);
+
+/* In-kernel implementation of tee for pipe buffers.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t tee (int __fdin, int __fdout, size_t __len,
+                   unsigned int __flags);
+
+/* Reserve storage for the data of the file associated with FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
+                                  __off64_t __len),
+                      fallocate64);
+#  else
+#   define fallocate fallocate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
+                       __off64_t __len);
+# endif
+
+
+/* Map file name to file handle.  */
+extern int name_to_handle_at (int __dfd, const char *__name,
+                             struct file_handle *__handle, int *__mnt_id,
+                             int __flags) __THROW;
+
+/* Open file using the file handle.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
+                             int __flags);
+
+#endif /* use GNU */
+
+__END_DECLS
diff --git a/lib/libdss-include/bits/fcntl.h b/lib/libdss-include/bits/fcntl.h
new file mode 100644 (file)
index 0000000..658f696
--- /dev/null
@@ -0,0 +1,55 @@
+/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#define __O_DIRECTORY   040000
+#define __O_NOFOLLOW   0100000
+#define __O_DIRECT     0200000
+
+#define __O_LARGEFILE  0
+
+# define F_GETLK64     5
+# define F_SETLK64     6
+# define F_SETLKW64    7
+
+struct flock
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/fcntl-linux.h>
diff --git a/lib/libdss-include/bits/fcntl2.h b/lib/libdss-include/bits/fcntl2.h
new file mode 100644 (file)
index 0000000..c3f267e
--- /dev/null
@@ -0,0 +1,172 @@
+/* Checking macros for fcntl functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never include <bits/fcntl2.h> directly; use <fcntl.h> instead."
+#endif
+
+/* Check that calls to open and openat with O_CREAT or O_TMPFILE set have an
+   appropriate third/fourth parameter.  */
+#ifndef __USE_FILE_OFFSET64
+extern int __open_2 (const char *__path, int __oflag) __nonnull ((1));
+extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
+                      open) __nonnull ((1));
+#else
+extern int __REDIRECT (__open_2, (const char *__path, int __oflag),
+                      __open64_2) __nonnull ((1));
+extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
+                      open64) __nonnull ((1));
+#endif
+__errordecl (__open_too_many_args,
+            "open can be called either with 2 or 3 arguments, not more");
+__errordecl (__open_missing_mode,
+            "open with O_CREAT or O_TMPFILE in second argument needs 3 arguments");
+
+__fortify_function int
+open (const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __open_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __open_missing_mode ();
+         return __open_2 (__path, __oflag);
+       }
+      return __open_alias (__path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __open_2 (__path, __oflag);
+
+  return __open_alias (__path, __oflag, __va_arg_pack ());
+}
+
+
+#ifdef __USE_LARGEFILE64
+extern int __open64_2 (const char *__path, int __oflag) __nonnull ((1));
+extern int __REDIRECT (__open64_alias, (const char *__path, int __oflag,
+                                       ...), open64) __nonnull ((1));
+__errordecl (__open64_too_many_args,
+            "open64 can be called either with 2 or 3 arguments, not more");
+__errordecl (__open64_missing_mode,
+            "open64 with O_CREAT or O_TMPFILE in second argument needs 3 arguments");
+
+__fortify_function int
+open64 (const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __open64_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __open64_missing_mode ();
+         return __open64_2 (__path, __oflag);
+       }
+      return __open64_alias (__path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __open64_2 (__path, __oflag);
+
+  return __open64_alias (__path, __oflag, __va_arg_pack ());
+}
+#endif
+
+
+#ifdef __USE_ATFILE
+# ifndef __USE_FILE_OFFSET64
+extern int __openat_2 (int __fd, const char *__path, int __oflag)
+     __nonnull ((2));
+extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
+                                       int __oflag, ...), openat)
+     __nonnull ((2));
+# else
+extern int __REDIRECT (__openat_2, (int __fd, const char *__path,
+                                   int __oflag), __openat64_2)
+     __nonnull ((2));
+extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
+                                       int __oflag, ...), openat64)
+     __nonnull ((2));
+# endif
+__errordecl (__openat_too_many_args,
+            "openat can be called either with 3 or 4 arguments, not more");
+__errordecl (__openat_missing_mode,
+            "openat with O_CREAT or O_TMPFILE in third argument needs 4 arguments");
+
+__fortify_function int
+openat (int __fd, const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __openat_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __openat_missing_mode ();
+         return __openat_2 (__fd, __path, __oflag);
+       }
+      return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __openat_2 (__fd, __path, __oflag);
+
+  return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
+}
+
+
+# ifdef __USE_LARGEFILE64
+extern int __openat64_2 (int __fd, const char *__path, int __oflag)
+     __nonnull ((2));
+extern int __REDIRECT (__openat64_alias, (int __fd, const char *__path,
+                                         int __oflag, ...), openat64)
+     __nonnull ((2));
+__errordecl (__openat64_too_many_args,
+            "openat64 can be called either with 3 or 4 arguments, not more");
+__errordecl (__openat64_missing_mode,
+            "openat64 with O_CREAT or O_TMPFILE in third argument needs 4 arguments");
+
+__fortify_function int
+openat64 (int __fd, const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __openat64_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __openat64_missing_mode ();
+         return __openat64_2 (__fd, __path, __oflag);
+       }
+      return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __openat64_2 (__fd, __path, __oflag);
+
+  return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
+}
+# endif
+#endif
diff --git a/lib/libdss-include/bits/fenv.h b/lib/libdss-include/bits/fenv.h
new file mode 100644 (file)
index 0000000..aced0d3
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+/* Define bits representing exceptions in the FPSR status word.  */
+enum
+  {
+    FE_INVALID =
+#define FE_INVALID     1
+      FE_INVALID,
+    FE_DIVBYZERO =
+#define FE_DIVBYZERO   2
+      FE_DIVBYZERO,
+    FE_OVERFLOW =
+#define FE_OVERFLOW    4
+      FE_OVERFLOW,
+    FE_UNDERFLOW =
+#define FE_UNDERFLOW   8
+      FE_UNDERFLOW,
+    FE_INEXACT =
+#define FE_INEXACT     16
+      FE_INEXACT,
+  };
+
+/* Amount to shift by to convert an exception bit in FPSR to a an
+   exception bit mask in FPCR.  */
+#define FE_EXCEPT_SHIFT        8
+
+/* All supported exceptions.  */
+#define FE_ALL_EXCEPT  \
+       (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+/* Define bits representing rounding modes in the FPCR Rmode field.  */
+#define FE_TONEAREST  0x000000
+#define FE_UPWARD     0x400000
+#define FE_DOWNWARD   0x800000
+#define FE_TOWARDZERO 0xc00000
+
+/* Type representing exception flags. */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef struct
+  {
+    unsigned int __fpcr;
+    unsigned int __fpsr;
+  }
+fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV     ((const fenv_t *) -1l)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exceptions are masked.  */
+# define FE_NOMASK_ENV  ((const fenv_t *) -2)
+#endif
diff --git a/lib/libdss-include/bits/fenvinline.h b/lib/libdss-include/bits/fenvinline.h
new file mode 100644 (file)
index 0000000..42f77b5
--- /dev/null
@@ -0,0 +1,8 @@
+/* This file provides inline versions of floating-pint environment
+   handling functions.  If there were any.  */
+
+#ifndef __NO_MATH_INLINES
+
+/* Here is where the code would go.  */
+
+#endif
diff --git a/lib/libdss-include/bits/huge_val.h b/lib/libdss-include/bits/huge_val.h
new file mode 100644 (file)
index 0000000..42d416f
--- /dev/null
@@ -0,0 +1,53 @@
+/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VAL      (__builtin_huge_val())
+#elif __GNUC_PREREQ(2,96)
+# define HUGE_VAL      (__extension__ 0x1.0p2047)
+#elif defined __GNUC__
+
+# define HUGE_VAL \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
+    { __l: 0x7ff0000000000000ULL }).__d)
+
+#else /* not GCC */
+
+# include <endian.h>
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VAL_bytes     { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VAL_bytes     { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
+# endif
+
+static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
+# define HUGE_VAL      (__huge_val.__d)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/bits/huge_valf.h b/lib/libdss-include/bits/huge_valf.h
new file mode 100644 (file)
index 0000000..9d418ba
--- /dev/null
@@ -0,0 +1,51 @@
+/* `HUGE_VALF' constant for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_valf.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VALF     (__builtin_huge_valf())
+#elif __GNUC_PREREQ(2,96)
+# define HUGE_VALF     (__extension__ 0x1.0p255f)
+#elif defined __GNUC__
+
+#   define HUGE_VALF \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })    \
+    { __l: 0x7f800000UL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VALF_bytes    { 0x7f, 0x80, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VALF_bytes    { 0, 0, 0x80, 0x7f }
+# endif
+
+static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
+# define HUGE_VALF     (__huge_valf.__f)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/bits/huge_vall.h b/lib/libdss-include/bits/huge_vall.h
new file mode 100644 (file)
index 0000000..1886adf
--- /dev/null
@@ -0,0 +1,28 @@
+/* Default `HUGE_VALL' constant.
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
+#endif
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VALL     (__builtin_huge_vall())
+#else
+# define HUGE_VALL     ((long double) HUGE_VAL)
+#endif
diff --git a/lib/libdss-include/bits/hwcap.h b/lib/libdss-include/bits/hwcap.h
new file mode 100644 (file)
index 0000000..39839ff
--- /dev/null
@@ -0,0 +1,23 @@
+/* Defines for bits in AT_HWCAP.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_AUXV_H
+# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
+#endif
+
+/* No bits defined for this architecture.  */
diff --git a/lib/libdss-include/bits/in.h b/lib/libdss-include/bits/in.h
new file mode 100644 (file)
index 0000000..3b01f12
--- /dev/null
@@ -0,0 +1,230 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Linux version.  */
+
+#ifndef _NETINET_IN_H
+# error "Never use <bits/in.h> directly; include <netinet/in.h> instead."
+#endif
+
+/* If the application has already included linux/in6.h from a linux-based
+   kernel then we will not define the IPv6 IPPROTO_* defines, in6_addr (nor the
+   defines), sockaddr_in6, or ipv6_mreq. Same for in6_ptkinfo or ip6_mtuinfo
+   in linux/ipv6.h. The ABI used by the linux-kernel and glibc match exactly.
+   Neither the linux kernel nor glibc should break this ABI without coordination.  */
+#if defined _UAPI_LINUX_IN6_H || defined _UAPI_IPV6_H
+/* This is not quite the same API since the kernel always defines s6_addr16 and
+   s6_addr32. This is not a violation of POSIX since POSIX says "at least the
+   following member" and that holds true.  */
+# define __USE_KERNEL_IPV6_DEFS
+#endif
+
+/* Options for use with `getsockopt' and `setsockopt' at the IP level.
+   The first word in the comment at the right is the data type used;
+   "bool" means a boolean value stored in an `int'.  */
+#define        IP_OPTIONS      4       /* ip_opts; IP per-packet options.  */
+#define        IP_HDRINCL      3       /* int; Header is included with data.  */
+#define        IP_TOS          1       /* int; IP type of service and precedence.  */
+#define        IP_TTL          2       /* int; IP time to live.  */
+#define        IP_RECVOPTS     6       /* bool; Receive all IP options w/datagram.  */
+/* For BSD compatibility.  */
+#define        IP_RECVRETOPTS  IP_RETOPTS       /* bool; Receive IP options for response.  */
+#define        IP_RETOPTS      7       /* ip_opts; Set/get IP per-packet options.  */
+#define IP_MULTICAST_IF 32     /* in_addr; set/get IP multicast i/f */
+#define IP_MULTICAST_TTL 33    /* u_char; set/get IP multicast ttl */
+#define IP_MULTICAST_LOOP 34   /* i_char; set/get IP multicast loopback */
+#define IP_ADD_MEMBERSHIP 35   /* ip_mreq; add an IP group membership */
+#define IP_DROP_MEMBERSHIP 36  /* ip_mreq; drop an IP group membership */
+#define IP_UNBLOCK_SOURCE 37   /* ip_mreq_source: unblock data from source */
+#define IP_BLOCK_SOURCE 38     /* ip_mreq_source: block data from source */
+#define IP_ADD_SOURCE_MEMBERSHIP 39 /* ip_mreq_source: join source group */
+#define IP_DROP_SOURCE_MEMBERSHIP 40 /* ip_mreq_source: leave source group */
+#define IP_MSFILTER 41
+#ifdef __USE_MISC
+# define MCAST_JOIN_GROUP 42   /* group_req: join any-source group */
+# define MCAST_BLOCK_SOURCE 43 /* group_source_req: block from given group */
+# define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/
+# define MCAST_LEAVE_GROUP 45  /* group_req: leave any-source group */
+# define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
+# define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
+# define MCAST_MSFILTER 48
+# define IP_MULTICAST_ALL 49
+# define IP_UNICAST_IF 50
+
+# define MCAST_EXCLUDE   0
+# define MCAST_INCLUDE   1
+#endif
+
+#define IP_ROUTER_ALERT        5       /* bool */
+#define IP_PKTINFO     8       /* bool */
+#define IP_PKTOPTIONS  9
+#define IP_PMTUDISC    10      /* obsolete name? */
+#define IP_MTU_DISCOVER        10      /* int; see below */
+#define IP_RECVERR     11      /* bool */
+#define IP_RECVTTL     12      /* bool */
+#define IP_RECVTOS     13      /* bool */
+#define IP_MTU         14      /* int */
+#define IP_FREEBIND    15
+#define IP_IPSEC_POLICY 16
+#define IP_XFRM_POLICY 17
+#define IP_PASSSEC     18
+#define IP_TRANSPARENT 19
+#define IP_MULTICAST_ALL 49    /* bool */
+
+/* TProxy original addresses */
+#define IP_ORIGDSTADDR       20
+#define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
+
+#define IP_MINTTL       21
+#define IP_NODEFRAG     22
+#define IP_CHECKSUM     23
+#define IP_BIND_ADDRESS_NO_PORT 24
+
+/* IP_MTU_DISCOVER arguments.  */
+#define IP_PMTUDISC_DONT   0   /* Never send DF frames.  */
+#define IP_PMTUDISC_WANT   1   /* Use per route hints.  */
+#define IP_PMTUDISC_DO     2   /* Always DF.  */
+#define IP_PMTUDISC_PROBE  3   /* Ignore dst pmtu.  */
+/* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
+   Also incoming ICMP frag_needed notifications will be ignored on
+   this socket to prevent accepting spoofed ones.  */
+#define IP_PMTUDISC_INTERFACE           4
+/* Like IP_PMTUDISC_INTERFACE but allow packets to be fragmented.  */
+#define IP_PMTUDISC_OMIT               5
+
+#define IP_MULTICAST_IF                        32
+#define IP_MULTICAST_TTL               33
+#define IP_MULTICAST_LOOP              34
+#define IP_ADD_MEMBERSHIP              35
+#define IP_DROP_MEMBERSHIP             36
+#define IP_UNBLOCK_SOURCE              37
+#define IP_BLOCK_SOURCE                        38
+#define IP_ADD_SOURCE_MEMBERSHIP       39
+#define IP_DROP_SOURCE_MEMBERSHIP      40
+#define IP_MSFILTER                    41
+#define IP_MULTICAST_ALL               49
+#define IP_UNICAST_IF                  50
+
+/* To select the IP level.  */
+#define SOL_IP 0
+
+#define IP_DEFAULT_MULTICAST_TTL        1
+#define IP_DEFAULT_MULTICAST_LOOP       1
+#define IP_MAX_MEMBERSHIPS              20
+
+#ifdef __USE_MISC
+/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
+   The `ip_dst' field is used for the first-hop gateway when using a
+   source route (this gets put into the header proper).  */
+struct ip_opts
+  {
+    struct in_addr ip_dst;     /* First hop; zero without source route.  */
+    char ip_opts[40];          /* Actually variable in size.  */
+  };
+
+/* Like `struct ip_mreq' but including interface specification by index.  */
+struct ip_mreqn
+  {
+    struct in_addr imr_multiaddr;      /* IP multicast address of group */
+    struct in_addr imr_address;                /* local IP address of interface */
+    int        imr_ifindex;                    /* Interface index */
+  };
+
+/* Structure used for IP_PKTINFO.  */
+struct in_pktinfo
+  {
+    int ipi_ifindex;                   /* Interface index  */
+    struct in_addr ipi_spec_dst;       /* Routing destination address  */
+    struct in_addr ipi_addr;           /* Header destination address  */
+  };
+#endif
+
+/* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
+   The first word in the comment at the right is the data type used;
+   "bool" means a boolean value stored in an `int'.  */
+#define IPV6_ADDRFORM          1
+#define IPV6_2292PKTINFO       2
+#define IPV6_2292HOPOPTS       3
+#define IPV6_2292DSTOPTS       4
+#define IPV6_2292RTHDR         5
+#define IPV6_2292PKTOPTIONS    6
+#define IPV6_CHECKSUM          7
+#define IPV6_2292HOPLIMIT      8
+
+#define SCM_SRCRT              IPV6_RXSRCRT
+
+#define IPV6_NEXTHOP           9
+#define IPV6_AUTHHDR           10
+#define IPV6_UNICAST_HOPS      16
+#define IPV6_MULTICAST_IF      17
+#define IPV6_MULTICAST_HOPS    18
+#define IPV6_MULTICAST_LOOP    19
+#define IPV6_JOIN_GROUP                20
+#define IPV6_LEAVE_GROUP       21
+#define IPV6_ROUTER_ALERT      22
+#define IPV6_MTU_DISCOVER      23
+#define IPV6_MTU               24
+#define IPV6_RECVERR           25
+#define IPV6_V6ONLY            26
+#define IPV6_JOIN_ANYCAST      27
+#define IPV6_LEAVE_ANYCAST     28
+#define IPV6_IPSEC_POLICY      34
+#define IPV6_XFRM_POLICY       35
+
+/* Advanced API (RFC3542) (1).  */
+#define IPV6_RECVPKTINFO       49
+#define IPV6_PKTINFO           50
+#define IPV6_RECVHOPLIMIT      51
+#define IPV6_HOPLIMIT          52
+#define IPV6_RECVHOPOPTS       53
+#define IPV6_HOPOPTS           54
+#define IPV6_RTHDRDSTOPTS      55
+#define IPV6_RECVRTHDR         56
+#define IPV6_RTHDR             57
+#define IPV6_RECVDSTOPTS       58
+#define IPV6_DSTOPTS           59
+#define IPV6_RECVPATHMTU       60
+#define IPV6_PATHMTU           61
+#define IPV6_DONTFRAG          62
+
+/* Advanced API (RFC3542) (2).  */
+#define IPV6_RECVTCLASS                66
+#define IPV6_TCLASS            67
+
+/* Obsolete synonyms for the above.  */
+#define IPV6_ADD_MEMBERSHIP    IPV6_JOIN_GROUP
+#define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP
+#define IPV6_RXHOPOPTS         IPV6_HOPOPTS
+#define IPV6_RXDSTOPTS         IPV6_DSTOPTS
+
+/* IPV6_MTU_DISCOVER values.  */
+#define IPV6_PMTUDISC_DONT     0       /* Never send DF frames.  */
+#define IPV6_PMTUDISC_WANT     1       /* Use per route hints.  */
+#define IPV6_PMTUDISC_DO       2       /* Always DF.  */
+#define IPV6_PMTUDISC_PROBE    3       /* Ignore dst pmtu.  */
+#define IPV6_PMTUDISC_INTERFACE        4       /* See IP_PMTUDISC_INTERFACE.  */
+#define IPV6_PMTUDISC_OMIT     5       /* See IP_PMTUDISC_OMIT.  */
+
+/* Socket level values for IPv6.  */
+#define SOL_IPV6        41
+#define SOL_ICMPV6      58
+
+/* Routing header options for IPv6.  */
+#define IPV6_RTHDR_LOOSE       0       /* Hop doesn't need to be neighbour. */
+#define IPV6_RTHDR_STRICT      1       /* Hop must be a neighbour.  */
+
+#define IPV6_RTHDR_TYPE_0      0       /* IPv6 Routing header type 0.  */
diff --git a/lib/libdss-include/bits/inf.h b/lib/libdss-include/bits/inf.h
new file mode 100644 (file)
index 0000000..179bf48
--- /dev/null
@@ -0,0 +1,29 @@
+/* `INFINITY' constant for IEEE 754 machines.
+   Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/inf.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity.  */
+
+#if __GNUC_PREREQ(3,3)
+# define INFINITY      (__builtin_inff())
+#else
+# define INFINITY      HUGE_VALF
+#endif
diff --git a/lib/libdss-include/bits/initspin.h b/lib/libdss-include/bits/initspin.h
new file mode 100644 (file)
index 0000000..936f178
--- /dev/null
@@ -0,0 +1 @@
+/* No thread support. */
diff --git a/lib/libdss-include/bits/inotify.h b/lib/libdss-include/bits/inotify.h
new file mode 100644 (file)
index 0000000..dc9f627
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_INOTIFY_H
+# error "Never use <bits/inotify.h> directly; include <sys/inotify.h> instead."
+#endif
+
+/* Flags for the parameter of inotify_init1.  */
+enum
+  {
+    IN_CLOEXEC = 02000000,
+#define IN_CLOEXEC IN_CLOEXEC
+    IN_NONBLOCK = 00004000
+#define IN_NONBLOCK IN_NONBLOCK
+  };
diff --git a/lib/libdss-include/bits/ioctl-types.h b/lib/libdss-include/bits/ioctl-types.h
new file mode 100644 (file)
index 0000000..b3bfdb1
--- /dev/null
@@ -0,0 +1,77 @@
+/* Structure types for pre-termios terminal ioctls.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IOCTL_H
+# error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
+#endif
+
+/* Get definition of constants for use with `ioctl'.  */
+#include <asm/ioctls.h>
+
+
+struct winsize
+  {
+    unsigned short int ws_row;
+    unsigned short int ws_col;
+    unsigned short int ws_xpixel;
+    unsigned short int ws_ypixel;
+  };
+
+#define NCC 8
+struct termio
+  {
+    unsigned short int c_iflag;                /* input mode flags */
+    unsigned short int c_oflag;                /* output mode flags */
+    unsigned short int c_cflag;                /* control mode flags */
+    unsigned short int c_lflag;                /* local mode flags */
+    unsigned char c_line;              /* line discipline */
+    unsigned char c_cc[NCC];           /* control characters */
+};
+
+/* modem lines */
+#define TIOCM_LE       0x001
+#define TIOCM_DTR      0x002
+#define TIOCM_RTS      0x004
+#define TIOCM_ST       0x008
+#define TIOCM_SR       0x010
+#define TIOCM_CTS      0x020
+#define TIOCM_CAR      0x040
+#define TIOCM_RNG      0x080
+#define TIOCM_DSR      0x100
+#define TIOCM_CD       TIOCM_CAR
+#define TIOCM_RI       TIOCM_RNG
+
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+
+/* line disciplines */
+#define N_TTY          0
+#define N_SLIP         1
+#define N_MOUSE                2
+#define N_PPP          3
+#define N_STRIP                4
+#define N_AX25         5
+#define N_X25          6       /* X.25 async  */
+#define N_6PACK                7
+#define N_MASC         8       /* Mobitex module  */
+#define N_R3964                9       /* Simatic R3964 module  */
+#define N_PROFIBUS_FDL 10      /* Profibus  */
+#define N_IRDA         11      /* Linux IR  */
+#define N_SMSBLOCK     12      /* SMS block mode  */
+#define N_HDLC         13      /* synchronous HDLC  */
+#define N_SYNC_PPP     14      /* synchronous PPP  */
+#define        N_HCI           15      /* Bluetooth HCI UART  */
diff --git a/lib/libdss-include/bits/ioctls.h b/lib/libdss-include/bits/ioctls.h
new file mode 100644 (file)
index 0000000..cbfedca
--- /dev/null
@@ -0,0 +1,108 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IOCTL_H
+# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
+#endif
+
+/* Use the definitions from the kernel header files.  */
+#include <asm/ioctls.h>
+
+/* Routing table calls.  */
+#define SIOCADDRT      0x890B          /* add routing table entry      */
+#define SIOCDELRT      0x890C          /* delete routing table entry   */
+#define SIOCRTMSG      0x890D          /* call to routing system       */
+
+/* Socket configuration controls. */
+#define SIOCGIFNAME    0x8910          /* get iface name               */
+#define SIOCSIFLINK    0x8911          /* set iface channel            */
+#define SIOCGIFCONF    0x8912          /* get iface list               */
+#define SIOCGIFFLAGS   0x8913          /* get flags                    */
+#define SIOCSIFFLAGS   0x8914          /* set flags                    */
+#define SIOCGIFADDR    0x8915          /* get PA address               */
+#define SIOCSIFADDR    0x8916          /* set PA address               */
+#define SIOCGIFDSTADDR 0x8917          /* get remote PA address        */
+#define SIOCSIFDSTADDR 0x8918          /* set remote PA address        */
+#define SIOCGIFBRDADDR 0x8919          /* get broadcast PA address     */
+#define SIOCSIFBRDADDR 0x891a          /* set broadcast PA address     */
+#define SIOCGIFNETMASK 0x891b          /* get network PA mask          */
+#define SIOCSIFNETMASK 0x891c          /* set network PA mask          */
+#define SIOCGIFMETRIC  0x891d          /* get metric                   */
+#define SIOCSIFMETRIC  0x891e          /* set metric                   */
+#define SIOCGIFMEM     0x891f          /* get memory address (BSD)     */
+#define SIOCSIFMEM     0x8920          /* set memory address (BSD)     */
+#define SIOCGIFMTU     0x8921          /* get MTU size                 */
+#define SIOCSIFMTU     0x8922          /* set MTU size                 */
+#define SIOCSIFNAME    0x8923          /* set interface name           */
+#define        SIOCSIFHWADDR   0x8924          /* set hardware address         */
+#define SIOCGIFENCAP   0x8925          /* get/set encapsulations       */
+#define SIOCSIFENCAP   0x8926
+#define SIOCGIFHWADDR  0x8927          /* Get hardware address         */
+#define SIOCGIFSLAVE   0x8929          /* Driver slaving support       */
+#define SIOCSIFSLAVE   0x8930
+#define SIOCADDMULTI   0x8931          /* Multicast address lists      */
+#define SIOCDELMULTI   0x8932
+#define SIOCGIFINDEX   0x8933          /* name -> if_index mapping     */
+#define SIOGIFINDEX    SIOCGIFINDEX    /* misprint compatibility :-)   */
+#define SIOCSIFPFLAGS  0x8934          /* set/get extended flags set   */
+#define SIOCGIFPFLAGS  0x8935
+#define SIOCDIFADDR    0x8936          /* delete PA address            */
+#define        SIOCSIFHWBROADCAST      0x8937  /* set hardware broadcast addr  */
+#define SIOCGIFCOUNT   0x8938          /* get number of devices */
+
+#define SIOCGIFBR      0x8940          /* Bridging support             */
+#define SIOCSIFBR      0x8941          /* Set bridging options         */
+
+#define SIOCGIFTXQLEN  0x8942          /* Get the tx queue length      */
+#define SIOCSIFTXQLEN  0x8943          /* Set the tx queue length      */
+
+
+/* ARP cache control calls. */
+                   /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
+#define SIOCDARP       0x8953          /* delete ARP table entry       */
+#define SIOCGARP       0x8954          /* get ARP table entry          */
+#define SIOCSARP       0x8955          /* set ARP table entry          */
+
+/* RARP cache control calls. */
+#define SIOCDRARP      0x8960          /* delete RARP table entry      */
+#define SIOCGRARP      0x8961          /* get RARP table entry         */
+#define SIOCSRARP      0x8962          /* set RARP table entry         */
+
+/* Driver configuration calls */
+
+#define SIOCGIFMAP     0x8970          /* Get device parameters        */
+#define SIOCSIFMAP     0x8971          /* Set device parameters        */
+
+/* DLCI configuration calls */
+
+#define SIOCADDDLCI    0x8980          /* Create new DLCI device       */
+#define SIOCDELDLCI    0x8981          /* Delete DLCI device           */
+
+/* Device private ioctl calls.  */
+
+/* These 16 ioctls are available to devices via the do_ioctl() device
+   vector.  Each device should include this file and redefine these
+   names as their own. Because these are device dependent it is a good
+   idea _NOT_ to issue them to random objects and hope.  */
+
+#define SIOCDEVPRIVATE                 0x89F0  /* to 89FF */
+
+/*
+ *     These 16 ioctl calls are protocol private
+ */
+
+#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
diff --git a/lib/libdss-include/bits/ipc.h b/lib/libdss-include/bits/ipc.h
new file mode 100644 (file)
index 0000000..bc94471
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IPC_H
+# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT      01000           /* Create key if key does not exist. */
+#define IPC_EXCL       02000           /* Fail if key exists.  */
+#define IPC_NOWAIT     04000           /* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID       0               /* Remove identifier.  */
+#define IPC_SET                1               /* Set `ipc_perm' options.  */
+#define IPC_STAT       2               /* Get `ipc_perm' options.  */
+#ifdef __USE_GNU
+# define IPC_INFO      3               /* See ipcs.  */
+#endif
+
+/* Special key values.  */
+#define IPC_PRIVATE    ((__key_t) 0)   /* Private key.  */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;                     /* Key.  */
+    __uid_t uid;                       /* Owner's user ID.  */
+    __gid_t gid;                       /* Owner's group ID.  */
+    __uid_t cuid;                      /* Creator's user ID.  */
+    __gid_t cgid;                      /* Creator's group ID.  */
+    unsigned int mode;                 /* Read/write permission.  */
+    unsigned short int __seq;          /* Sequence number.  */
+    unsigned short int __pad1;
+    __syscall_ulong_t __glibc_reserved1;
+    __syscall_ulong_t __glibc_reserved2;
+  };
diff --git a/lib/libdss-include/bits/ipctypes.h b/lib/libdss-include/bits/ipctypes.h
new file mode 100644 (file)
index 0000000..bf791ce
--- /dev/null
@@ -0,0 +1,36 @@
+/* bits/ipctypes.h -- Define some types used by SysV IPC/MSG/SHM.  Generic.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include <bits/ipctypes.h> directly.
+ */
+
+#ifndef _BITS_IPCTYPES_H
+#define _BITS_IPCTYPES_H       1
+
+#include <bits/types.h>
+
+/* Used in `struct shmid_ds'.  */
+# if __WORDSIZE == 32
+typedef unsigned short int __ipc_pid_t;
+# else
+typedef int __ipc_pid_t;
+# endif
+
+
+#endif /* bits/ipctypes.h */
diff --git a/lib/libdss-include/bits/libio-ldbl.h b/lib/libdss-include/bits/libio-ldbl.h
new file mode 100644 (file)
index 0000000..15c5af9
--- /dev/null
@@ -0,0 +1,24 @@
+/* -mlong-double-64 compatibility mode for libio functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IO_STDIO_H
+# error "Never include <bits/libio-ldbl.h> directly; use <libio.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (_IO_vfscanf)
+__LDBL_REDIR_DECL (_IO_vfprintf)
diff --git a/lib/libdss-include/bits/libm-simd-decl-stubs.h b/lib/libdss-include/bits/libm-simd-decl-stubs.h
new file mode 100644 (file)
index 0000000..541cb3f
--- /dev/null
@@ -0,0 +1,59 @@
+/* Empty definitions required for __MATHCALL_VEC unfolding in mathcalls.h.
+   Copyright (C) 2014-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/libm-simd-decl-stubs.h> directly;\
+ include <math.h> instead."
+#endif
+
+/* Needed definitions could be generated with:
+   for func in $(grep __MATHCALL_VEC math/bits/mathcalls.h |\
+                sed -r "s|__MATHCALL_VEC.?\(||; s|,.*||"); do
+     echo "#define __DECL_SIMD_${func}";
+     echo "#define __DECL_SIMD_${func}f";
+     echo "#define __DECL_SIMD_${func}l";
+   done
+ */
+
+#ifndef _BITS_LIBM_SIMD_DECL_STUBS_H
+#define _BITS_LIBM_SIMD_DECL_STUBS_H 1
+
+#define __DECL_SIMD_cos
+#define __DECL_SIMD_cosf
+#define __DECL_SIMD_cosl
+
+#define __DECL_SIMD_sin
+#define __DECL_SIMD_sinf
+#define __DECL_SIMD_sinl
+
+#define __DECL_SIMD_sincos
+#define __DECL_SIMD_sincosf
+#define __DECL_SIMD_sincosl
+
+#define __DECL_SIMD_log
+#define __DECL_SIMD_logf
+#define __DECL_SIMD_logl
+
+#define __DECL_SIMD_exp
+#define __DECL_SIMD_expf
+#define __DECL_SIMD_expl
+
+#define __DECL_SIMD_pow
+#define __DECL_SIMD_powf
+#define __DECL_SIMD_powl
+#endif
diff --git a/lib/libdss-include/bits/link.h b/lib/libdss-include/bits/link.h
new file mode 100644 (file)
index 0000000..0bf9615
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+/* Registers for entry into PLT on AArch64.  */
+typedef struct La_aarch64_regs
+{
+  uint64_t lr_xreg[8];
+  uint64_t lr_dreg[8];
+  uint64_t lr_sp;
+  uint64_t lr_lr;
+} La_aarch64_regs;
+
+/* Return values for calls from PLT on AArch64.  */
+typedef struct La_aarch64_retval
+{
+  /* Up to two integer registers can be used for a return value.  */
+  uint64_t lrv_xreg[2];
+  /* Up to four D registers can be used for a return value.  */
+  uint64_t lrv_dreg[4];
+
+} La_aarch64_retval;
+__BEGIN_DECLS
+
+extern ElfW(Addr)
+la_aarch64_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx,
+                        uintptr_t *__refcook,
+                        uintptr_t *__defcook,
+                        La_aarch64_regs *__regs,
+                        unsigned int *__flags,
+                        const char *__symname,
+                        long int *__framesizep);
+
+extern unsigned int
+la_aarch64_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx,
+                       uintptr_t *__refcook,
+                       uintptr_t *__defcook,
+                       const La_aarch64_regs *__inregs,
+                       La_aarch64_retval *__outregs,
+                       const char *__symname);
+
+__END_DECLS
diff --git a/lib/libdss-include/bits/local_lim.h b/lib/libdss-include/bits/local_lim.h
new file mode 100644 (file)
index 0000000..8f2cc72
--- /dev/null
@@ -0,0 +1,101 @@
+/* Minimum guaranteed maximum values for system limits.  Linux version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The kernel header pollutes the namespace with the NR_OPEN symbol
+   and defines LINK_MAX although filesystems have different maxima.  A
+   similar thing is true for OPEN_MAX: the limit can be changed at
+   runtime and therefore the macro must not be defined.  Remove this
+   after including the header if necessary.  */
+#ifndef NR_OPEN
+# define __undef_NR_OPEN
+#endif
+#ifndef LINK_MAX
+# define __undef_LINK_MAX
+#endif
+#ifndef OPEN_MAX
+# define __undef_OPEN_MAX
+#endif
+#ifndef ARG_MAX
+# define __undef_ARG_MAX
+#endif
+
+/* The kernel sources contain a file with all the needed information.  */
+#include <linux/limits.h>
+
+/* Have to remove NR_OPEN?  */
+#ifdef __undef_NR_OPEN
+# undef NR_OPEN
+# undef __undef_NR_OPEN
+#endif
+/* Have to remove LINK_MAX?  */
+#ifdef __undef_LINK_MAX
+# undef LINK_MAX
+# undef __undef_LINK_MAX
+#endif
+/* Have to remove OPEN_MAX?  */
+#ifdef __undef_OPEN_MAX
+# undef OPEN_MAX
+# undef __undef_OPEN_MAX
+#endif
+/* Have to remove ARG_MAX?  */
+#ifdef __undef_ARG_MAX
+# undef ARG_MAX
+# undef __undef_ARG_MAX
+#endif
+
+/* The number of data keys per process.  */
+#define _POSIX_THREAD_KEYS_MAX 128
+/* This is the value this implementation supports.  */
+#define PTHREAD_KEYS_MAX       1024
+
+/* Controlling the iterations of destructors for thread-specific data.  */
+#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
+/* Number of iterations this implementation does.  */
+#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
+
+/* The number of threads per process.  */
+#define _POSIX_THREAD_THREADS_MAX      64
+/* We have no predefined limit on the number of threads.  */
+#undef PTHREAD_THREADS_MAX
+
+/* Maximum amount by which a process can descrease its asynchronous I/O
+   priority level.  */
+#define AIO_PRIO_DELTA_MAX     20
+
+/* Minimum size for a thread.  At least two pages for systems with 64k
+   pages.  */
+#define PTHREAD_STACK_MIN      131072
+
+/* Maximum number of timer expiration overruns.  */
+#define DELAYTIMER_MAX 2147483647
+
+/* Maximum tty name length.  */
+#define TTY_NAME_MAX           32
+
+/* Maximum login name length.  This is arbitrary.  */
+#define LOGIN_NAME_MAX         256
+
+/* Maximum host name length.  */
+#define HOST_NAME_MAX          64
+
+/* Maximum message queue priority level.  */
+#define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
diff --git a/lib/libdss-include/bits/locale.h b/lib/libdss-include/bits/locale.h
new file mode 100644 (file)
index 0000000..d5fb290
--- /dev/null
@@ -0,0 +1,40 @@
+/* Definition of locale category symbol values.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _LOCALE_H && !defined _LANGINFO_H
+# error "Never use <bits/locale.h> directly; include <locale.h> instead."
+#endif
+
+#ifndef _BITS_LOCALE_H
+#define _BITS_LOCALE_H 1
+
+#define __LC_CTYPE              0
+#define __LC_NUMERIC            1
+#define __LC_TIME               2
+#define __LC_COLLATE            3
+#define __LC_MONETARY           4
+#define __LC_MESSAGES           5
+#define __LC_ALL                6
+#define __LC_PAPER              7
+#define __LC_NAME               8
+#define __LC_ADDRESS            9
+#define __LC_TELEPHONE         10
+#define __LC_MEASUREMENT       11
+#define __LC_IDENTIFICATION    12
+
+#endif /* bits/locale.h */
diff --git a/lib/libdss-include/bits/math-finite.h b/lib/libdss-include/bits/math-finite.h
new file mode 100644 (file)
index 0000000..adaad0e
--- /dev/null
@@ -0,0 +1,506 @@
+/* Entry points to finite-math-only compiler runs.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/math-finite.h> directly; include <math.h> instead."
+#endif
+
+/* acos.  */
+extern double __REDIRECT_NTH (acos, (double), __acos_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (acosf, (float), __acosf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (acosl, (long double), __acos_finite);
+#  else
+extern long double __REDIRECT_NTH (acosl, (long double), __acosl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* acosh.  */
+extern double __REDIRECT_NTH (acosh, (double), __acosh_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (acoshf, (float), __acoshf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (acoshl, (long double), __acosh_finite);
+#  else
+extern long double __REDIRECT_NTH (acoshl, (long double), __acoshl_finite);
+#  endif
+# endif
+#endif
+
+/* asin.  */
+extern double __REDIRECT_NTH (asin, (double), __asin_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (asinf, (float), __asinf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (asinl, (long double), __asin_finite);
+#  else
+extern long double __REDIRECT_NTH (asinl, (long double), __asinl_finite);
+#  endif
+# endif
+#endif
+
+/* atan2.  */
+extern double __REDIRECT_NTH (atan2, (double, double), __atan2_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (atan2f, (float, float), __atan2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (atan2l, (long double, long double),
+                                  __atan2_finite);
+#  else
+extern long double __REDIRECT_NTH (atan2l, (long double, long double),
+                                  __atan2l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* atanh.  */
+extern double __REDIRECT_NTH (atanh, (double), __atanh_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (atanhf, (float), __atanhf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (atanhl, (long double), __atanh_finite);
+#  else
+extern long double __REDIRECT_NTH (atanhl, (long double), __atanhl_finite);
+#  endif
+# endif
+#endif
+
+/* cosh.  */
+extern double __REDIRECT_NTH (cosh, (double), __cosh_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (coshf, (float), __coshf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (coshl, (long double), __cosh_finite);
+#  else
+extern long double __REDIRECT_NTH (coshl, (long double), __coshl_finite);
+#  endif
+# endif
+#endif
+
+/* exp.  */
+extern double __REDIRECT_NTH (exp, (double), __exp_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (expf, (float), __expf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (expl, (long double), __exp_finite);
+#  else
+extern long double __REDIRECT_NTH (expl, (long double), __expl_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_GNU
+/* exp10.  */
+extern double __REDIRECT_NTH (exp10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (exp10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (exp10l, (long double), __exp10_finite);
+#  else
+extern long double __REDIRECT_NTH (exp10l, (long double), __exp10l_finite);
+#  endif
+# endif
+
+/* pow10.  */
+extern double __REDIRECT_NTH (pow10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (pow10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (pow10l, (long double), __exp10_finite);
+#  else
+extern long double __REDIRECT_NTH (pow10l, (long double), __exp10l_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_ISOC99
+/* exp2.  */
+extern double __REDIRECT_NTH (exp2, (double), __exp2_finite);
+extern float __REDIRECT_NTH (exp2f, (float), __exp2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (exp2l, (long double), __exp2_finite);
+#  else
+extern long double __REDIRECT_NTH (exp2l, (long double), __exp2l_finite);
+#  endif
+# endif
+#endif
+
+/* fmod.  */
+extern double __REDIRECT_NTH (fmod, (double, double), __fmod_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (fmodf, (float, float), __fmodf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (fmodl, (long double, long double),
+                                  __fmod_finite);
+#  else
+extern long double __REDIRECT_NTH (fmodl, (long double, long double),
+                                  __fmodl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+/* hypot.  */
+extern double __REDIRECT_NTH (hypot, (double, double), __hypot_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (hypotf, (float, float), __hypotf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (hypotl, (long double, long double),
+                                  __hypot_finite);
+#  else
+extern long double __REDIRECT_NTH (hypotl, (long double, long double),
+                                  __hypotl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* j0.  */
+extern double __REDIRECT_NTH (j0, (double), __j0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (j0f, (float), __j0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (j0l, (long double), __j0_finite);
+#  else
+extern long double __REDIRECT_NTH (j0l, (long double), __j0l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* y0.  */
+extern double __REDIRECT_NTH (y0, (double), __y0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (y0f, (float), __y0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (y0l, (long double), __y0_finite);
+#  else
+extern long double __REDIRECT_NTH (y0l, (long double), __y0l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* j1.  */
+extern double __REDIRECT_NTH (j1, (double), __j1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (j1f, (float), __j1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (j1l, (long double), __j1_finite);
+#  else
+extern long double __REDIRECT_NTH (j1l, (long double), __j1l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* y1.  */
+extern double __REDIRECT_NTH (y1, (double), __y1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (y1f, (float), __y1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (y1l, (long double), __y1_finite);
+#  else
+extern long double __REDIRECT_NTH (y1l, (long double), __y1l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* jn.  */
+extern double __REDIRECT_NTH (jn, (int, double), __jn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (jnf, (int, float), __jnf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (jnl, (int, long double), __jn_finite);
+#  else
+extern long double __REDIRECT_NTH (jnl, (int, long double), __jnl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* yn.  */
+extern double __REDIRECT_NTH (yn, (int, double), __yn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (ynf, (int, float), __ynf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (ynl, (int, long double), __yn_finite);
+#  else
+extern long double __REDIRECT_NTH (ynl, (int, long double), __ynl_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* lgamma_r.  */
+extern double __REDIRECT_NTH (lgamma_r, (double, int *), __lgamma_r_finite);
+# ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (lgammaf_r, (float, int *), __lgammaf_r_finite);
+#  ifdef __MATH_DECLARE_LDOUBLE
+#   ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+                                  __lgamma_r_finite);
+#   else
+extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+                                  __lgammal_r_finite);
+#   endif
+#  endif
+# endif
+#endif
+
+extern double __lgamma_r_finite (double, int *);
+extern float __lgammaf_r_finite (float, int *);
+#ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (__lgammal_r_finite, (long double, int *),
+                                  __lgamma_r_finite);
+#else
+extern long double __lgammal_r_finite (long double, int *);
+#endif
+
+#if ((defined __USE_XOPEN || defined __USE_ISOC99) \
+     && defined __extern_always_inline)
+/* lgamma.  */
+__extern_always_inline double __NTH (lgamma (double __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgamma_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgamma_r_finite (__d, &__local_signgam);
+# endif
+}
+#endif
+#if defined __USE_ISOC99 && defined __extern_always_inline
+__extern_always_inline float __NTH (lgammaf (float __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgammaf_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgammaf_r_finite (__d, &__local_signgam);
+# endif
+}
+# ifdef __MATH_DECLARE_LDOUBLE
+__extern_always_inline long double __NTH (lgammal (long double __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgammal_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgammal_r_finite (__d, &__local_signgam);
+# endif
+}
+# endif
+#endif
+
+#if ((defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)) \
+     && defined __extern_always_inline)
+/* gamma.  */
+__extern_always_inline double __NTH (gamma (double __d))
+{
+  return __lgamma_r_finite (__d, &signgam);
+}
+# ifdef __USE_ISOC99
+__extern_always_inline float __NTH (gammaf (float __d))
+{
+  return __lgammaf_r_finite (__d, &signgam);
+}
+#  ifdef __MATH_DECLARE_LDOUBLE
+__extern_always_inline long double __NTH (gammal (long double __d))
+{
+  return __lgammal_r_finite (__d, &signgam);
+}
+#  endif
+# endif
+#endif
+
+/* log.  */
+extern double __REDIRECT_NTH (log, (double), __log_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (logf, (float), __logf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (logl, (long double), __log_finite);
+#  else
+extern long double __REDIRECT_NTH (logl, (long double), __logl_finite);
+#  endif
+# endif
+#endif
+
+/* log10.  */
+extern double __REDIRECT_NTH (log10, (double), __log10_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (log10f, (float), __log10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (log10l, (long double), __log10_finite);
+#  else
+extern long double __REDIRECT_NTH (log10l, (long double), __log10l_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_ISOC99
+/* log2.  */
+extern double __REDIRECT_NTH (log2, (double), __log2_finite);
+extern float __REDIRECT_NTH (log2f, (float), __log2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (log2l, (long double), __log2_finite);
+#  else
+extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite);
+#  endif
+# endif
+#endif
+
+/* pow.  */
+extern double __REDIRECT_NTH (pow, (double, double), __pow_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (powf, (float, float), __powf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (powl, (long double, long double),
+                                  __pow_finite);
+#  else
+extern long double __REDIRECT_NTH (powl, (long double, long double),
+                                  __powl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* remainder.  */
+extern double __REDIRECT_NTH (remainder, (double, double), __remainder_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (remainderf, (float, float), __remainderf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (remainderl, (long double, long double),
+                                  __remainder_finite);
+#  else
+extern long double __REDIRECT_NTH (remainderl, (long double, long double),
+                                  __remainderl_finite);
+#  endif
+# endif
+#endif
+
+#if (defined __USE_MISC                                                        \
+     || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))
+/* scalb.  */
+extern double __REDIRECT_NTH (scalb, (double, double), __scalb_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (scalbf, (float, float), __scalbf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (scalbl, (long double, long double),
+                                  __scalb_finite);
+#  else
+extern long double __REDIRECT_NTH (scalbl, (long double, long double),
+                                  __scalbl_finite);
+#  endif
+# endif
+#endif
+
+/* sinh.  */
+extern double __REDIRECT_NTH (sinh, (double), __sinh_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (sinhf, (float), __sinhf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (sinhl, (long double), __sinh_finite);
+#  else
+extern long double __REDIRECT_NTH (sinhl, (long double), __sinhl_finite);
+#  endif
+# endif
+#endif
+
+/* sqrt.  */
+extern double __REDIRECT_NTH (sqrt, (double), __sqrt_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (sqrtf, (float), __sqrtf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrt_finite);
+#  else
+extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_ISOC99 && defined __extern_always_inline
+/* tgamma.  */
+extern double __gamma_r_finite (double, int *);
+__extern_always_inline double __NTH (tgamma (double __d))
+{
+  int __local_signgam = 0;
+  double __res = __gamma_r_finite (__d, &__local_signgam);
+  return __local_signgam < 0 ? -__res : __res;
+}
+extern float __gammaf_r_finite (float, int *);
+__extern_always_inline float __NTH (tgammaf (float __d))
+{
+  int __local_signgam = 0;
+  float __res = __gammaf_r_finite (__d, &__local_signgam);
+  return __local_signgam < 0 ? -__res : __res;
+}
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __gammal_r_finite (long double, int *);
+__extern_always_inline long double __NTH (tgammal (long double __d))
+{
+  int __local_signgam = 0;
+#  ifdef __NO_LONG_DOUBLE_MATH
+  long double __res = __gamma_r_finite (__d, &__local_signgam);
+#  else
+  long double __res = __gammal_r_finite (__d, &__local_signgam);
+#  endif
+  return __local_signgam < 0 ? -__res : __res;
+}
+# endif
+#endif
diff --git a/lib/libdss-include/bits/math-vector.h b/lib/libdss-include/bits/math-vector.h
new file mode 100644 (file)
index 0000000..975724a
--- /dev/null
@@ -0,0 +1,27 @@
+/* Platform-specific SIMD declarations of math functions.
+   Copyright (C) 2014-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License  published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/math-vector.h> directly;\
+ include <math.h> instead."
+#endif
+
+/* Get default empty definitions required for __MATHCALL_VEC unfolding.
+   Plaform-specific analogue of this header should redefine them with specific
+   SIMD declarations.  */
+#include <bits/libm-simd-decl-stubs.h>
diff --git a/lib/libdss-include/bits/mathcalls.h b/lib/libdss-include/bits/mathcalls.h
new file mode 100644 (file)
index 0000000..9a7b3f0
--- /dev/null
@@ -0,0 +1,384 @@
+/* Prototype declarations for math functions; helper file for <math.h>.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* NOTE: Because of the special way this file is used by <math.h>, this
+   file must NOT be protected from multiple inclusion as header files
+   usually are.
+
+   This file provides prototype declarations for the math functions.
+   Most functions are declared using the macro:
+
+   __MATHCALL (NAME,[_r], (ARGS...));
+
+   This means there is a function `NAME' returning `double' and a function
+   `NAMEf' returning `float'.  Each place `_Mdouble_' appears in the
+   prototype, that is actually `double' in the prototype for `NAME' and
+   `float' in the prototype for `NAMEf'.  Reentrant variant functions are
+   called `NAME_r' and `NAMEf_r'.
+
+   Functions returning other types like `int' are declared using the macro:
+
+   __MATHDECL (TYPE, NAME,[_r], (ARGS...));
+
+   This is just like __MATHCALL but for a function returning `TYPE'
+   instead of `_Mdouble_'.  In all of these cases, there is still
+   both a `NAME' and a `NAMEf' that takes `float' arguments.
+
+   Note that there must be no whitespace before the argument passed for
+   NAME, to make token pasting work with -traditional.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/mathcalls.h> directly; include <math.h> instead."
+#endif
+
+
+/* Trigonometric functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Arc cosine of X.  */
+__MATHCALL (acos,, (_Mdouble_ __x));
+/* Arc sine of X.  */
+__MATHCALL (asin,, (_Mdouble_ __x));
+/* Arc tangent of X.  */
+__MATHCALL (atan,, (_Mdouble_ __x));
+/* Arc tangent of Y/X.  */
+__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+
+/* Cosine of X.  */
+__MATHCALL_VEC (cos,, (_Mdouble_ __x));
+/* Sine of X.  */
+__MATHCALL_VEC (sin,, (_Mdouble_ __x));
+/* Tangent of X.  */
+__MATHCALL (tan,, (_Mdouble_ __x));
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic cosine of X.  */
+__MATHCALL (cosh,, (_Mdouble_ __x));
+/* Hyperbolic sine of X.  */
+__MATHCALL (sinh,, (_Mdouble_ __x));
+/* Hyperbolic tangent of X.  */
+__MATHCALL (tanh,, (_Mdouble_ __x));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_GNU
+/* Cosine and sine of X.  */
+__MATHDECL_VEC (void,sincos,,
+               (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Hyperbolic arc cosine of X.  */
+__MATHCALL (acosh,, (_Mdouble_ __x));
+/* Hyperbolic arc sine of X.  */
+__MATHCALL (asinh,, (_Mdouble_ __x));
+/* Hyperbolic arc tangent of X.  */
+__MATHCALL (atanh,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+/* Exponential and logarithmic functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Exponential function of X.  */
+__MATHCALL_VEC (exp,, (_Mdouble_ __x));
+
+/* Break VALUE into a normalized fraction and an integral power of 2.  */
+__MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+
+/* X times (two to the EXP power).  */
+__MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+
+/* Natural logarithm of X.  */
+__MATHCALL_VEC (log,, (_Mdouble_ __x));
+
+/* Base-ten logarithm of X.  */
+__MATHCALL (log10,, (_Mdouble_ __x));
+
+/* Break VALUE into integral and fractional parts.  */
+__MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_GNU
+/* A function missing in all standards: compute exponent to base ten.  */
+__MATHCALL (exp10,, (_Mdouble_ __x));
+/* Another name occasionally used.  */
+__MATHCALL (pow10,, (_Mdouble_ __x));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return exp(X) - 1.  */
+__MATHCALL (expm1,, (_Mdouble_ __x));
+
+/* Return log(1 + X).  */
+__MATHCALL (log1p,, (_Mdouble_ __x));
+
+/* Return the base 2 signed integral exponent of X.  */
+__MATHCALL (logb,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Compute base-2 exponential of X.  */
+__MATHCALL (exp2,, (_Mdouble_ __x));
+
+/* Compute base-2 logarithm of X.  */
+__MATHCALL (log2,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Power functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Return X to the Y power.  */
+__MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+
+/* Return the square root of X.  */
+__MATHCALL (sqrt,, (_Mdouble_ __x));
+_Mdouble_END_NAMESPACE
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return `sqrt(X*X + Y*Y)'.  */
+__MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+__END_NAMESPACE_C99
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return the cube root of X.  */
+__MATHCALL (cbrt,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Nearest integer, absolute value, and remainder functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Smallest integral value not less than X.  */
+__MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+
+/* Absolute value of X.  */
+__MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+
+/* Largest integer not greater than X.  */
+__MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+
+/* Floating-point modulo remainder of X/Y.  */
+__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+
+
+/* Return 0 if VALUE is finite or NaN, +1 if it
+   is +Infinity, -1 if it is -Infinity.  */
+__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+/* Return nonzero if VALUE is finite and not NaN.  */
+__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_MISC
+# if (!defined __cplusplus \
+      || __cplusplus < 201103L /* isinf conflicts with C++11.  */ \
+      || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't.  */
+/* Return 0 if VALUE is finite or NaN, +1 if it
+   is +Infinity, -1 if it is -Infinity.  */
+__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+# endif
+
+/* Return nonzero if VALUE is finite and not NaN.  */
+__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+/* Return the remainder of X/Y.  */
+__MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+
+
+/* Return the fractional part of X after dividing out `ilogb (X)'.  */
+__MATHCALL (significand,, (_Mdouble_ __x));
+#endif /* Use misc.  */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return X with its signed changed to Y's.  */
+__MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return representation of qNaN for double type.  */
+__MATHCALLX (nan,, (const char *__tagb), (__const__));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Return nonzero if VALUE is not a number.  */
+__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# if (!defined __cplusplus \
+      || __cplusplus < 201103L /* isnan conflicts with C++11.  */ \
+      || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't.  */
+/* Return nonzero if VALUE is not a number.  */
+__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+# endif
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN && __MATH_DECLARING_DOUBLE)
+/* Bessel functions.  */
+__MATHCALL (j0,, (_Mdouble_));
+__MATHCALL (j1,, (_Mdouble_));
+__MATHCALL (jn,, (int, _Mdouble_));
+__MATHCALL (y0,, (_Mdouble_));
+__MATHCALL (y1,, (_Mdouble_));
+__MATHCALL (yn,, (int, _Mdouble_));
+#endif
+
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Error and gamma functions.  */
+__MATHCALL (erf,, (_Mdouble_));
+__MATHCALL (erfc,, (_Mdouble_));
+__MATHCALL (lgamma,, (_Mdouble_));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* True gamma function.  */
+__MATHCALL (tgamma,, (_Mdouble_));
+__END_NAMESPACE_C99
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Obsolete alias for `lgamma'.  */
+__MATHCALL (gamma,, (_Mdouble_));
+#endif
+
+#ifdef __USE_MISC
+/* Reentrant version of lgamma.  This function uses the global variable
+   `signgam'.  The reentrant version instead takes a pointer and stores
+   the value through it.  */
+__MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return the integer nearest X in the direction of the
+   prevailing rounding mode.  */
+__MATHCALL (rint,, (_Mdouble_ __x));
+
+/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
+__MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+# if defined __USE_ISOC99 && !defined __LDBL_COMPAT
+__MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+# endif
+
+/* Return the remainder of integer divison X / Y with infinite precision.  */
+__MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+
+# ifdef __USE_ISOC99
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+# endif
+
+/* Return the binary exponent of X, which must be nonzero.  */
+__MATHDECL (int,ilogb,, (_Mdouble_ __x));
+#endif
+
+#ifdef __USE_ISOC99
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+
+/* Round X to integral value in floating-point format using current
+   rounding direction, but do not raise inexact exception.  */
+__MATHCALL (nearbyint,, (_Mdouble_ __x));
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+__MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+
+/* Round X to the integral value in floating-point format nearest but
+   not larger in magnitude.  */
+__MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+
+/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
+   and magnitude congruent `mod 2^n' to the magnitude of the integral
+   quotient x/y, with n >= 3.  */
+__MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+
+
+/* Conversion functions.  */
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+__MATHDECL (long int,lrint,, (_Mdouble_ __x));
+__extension__
+__MATHDECL (long long int,llrint,, (_Mdouble_ __x));
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+__MATHDECL (long int,lround,, (_Mdouble_ __x));
+__extension__
+__MATHDECL (long long int,llround,, (_Mdouble_ __x));
+
+
+/* Return positive difference between X and Y.  */
+__MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+
+/* Return maximum numeric value from X and Y.  */
+__MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+
+/* Return minimum numeric value from X and Y.  */
+__MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+
+
+/* Classify given number.  */
+__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+
+/* Test for negative number.  */
+__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+
+
+/* Multiply-add function computed as a ternary operation.  */
+__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+#endif /* Use ISO C99.  */
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Test for signaling NaN.  */
+__MATHDECL_1 (int, __issignaling,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \
+                          && __MATH_DECLARING_DOUBLE   \
+                          && !defined __USE_XOPEN2K8)
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+#endif
diff --git a/lib/libdss-include/bits/mathdef.h b/lib/libdss-include/bits/mathdef.h
new file mode 100644 (file)
index 0000000..db992fc
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _MATH_H && !defined _COMPLEX_H
+# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#endif
+
+#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
+# define _MATH_H_MATHDEF       1
+
+/* GCC does not promote `float' values to `double'.  */
+typedef float float_t;         /* `float' expressions are evaluated as
+                                  `float'.  */
+typedef double double_t;       /* `double' expressions are evaluated as
+                                  `double'.  */
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+# define FP_ILOGB0     (-2147483647)
+# define FP_ILOGBNAN   (2147483647)
+
+# define FP_FAST_FMA 1
+# define FP_FAST_FMAF 1
+
+#endif /* ISO C99 */
diff --git a/lib/libdss-include/bits/mathinline.h b/lib/libdss-include/bits/mathinline.h
new file mode 100644 (file)
index 0000000..02ec21b
--- /dev/null
@@ -0,0 +1,12 @@
+/* This file should provide inline versions of math functions.
+
+   Surround GCC-specific parts with #ifdef __GNUC__, and use `__extern_inline'.
+
+   This file should define __MATH_INLINES if functions are actually defined as
+   inlines.  */
+
+#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
+
+/* Here goes the real code.  */
+
+#endif
diff --git a/lib/libdss-include/bits/mman-linux.h b/lib/libdss-include/bits/mman-linux.h
new file mode 100644 (file)
index 0000000..dbb994b
--- /dev/null
@@ -0,0 +1,113 @@
+/* Definitions for POSIX memory map interface.  Linux generic version.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman-linux.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.
+
+   This file is also used by some non-Linux configurations of the
+   GNU C Library, for other systems that use these same bit values.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ      0x1             /* Page can be read.  */
+#define PROT_WRITE     0x2             /* Page can be written.  */
+#define PROT_EXEC      0x4             /* Page can be executed.  */
+#define PROT_NONE      0x0             /* Page can not be accessed.  */
+#define PROT_GROWSDOWN 0x01000000      /* Extend change to start of
+                                          growsdown vma (mprotect only).  */
+#define PROT_GROWSUP   0x02000000      /* Extend change to start of
+                                          growsup vma (mprotect only).  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED     0x01            /* Share changes.  */
+#define MAP_PRIVATE    0x02            /* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE      0x0f            /* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED      0x10            /* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE      0
+# ifdef __MAP_ANONYMOUS
+#  define MAP_ANONYMOUS        __MAP_ANONYMOUS /* Don't use a file.  */
+# else
+#  define MAP_ANONYMOUS        0x20            /* Don't use a file.  */
+# endif
+# define MAP_ANON      MAP_ANONYMOUS
+/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.  */
+# define MAP_HUGE_SHIFT        26
+# define MAP_HUGE_MASK 0x3f
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC       1               /* Sync memory asynchronously.  */
+#define MS_SYNC                4               /* Synchronous memory sync.  */
+#define MS_INVALIDATE  2               /* Invalidate the caches.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE        1
+# define MREMAP_FIXED  2
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_MISC
+# define MADV_NORMAL     0     /* No further special treatment.  */
+# define MADV_RANDOM     1     /* Expect random page references.  */
+# define MADV_SEQUENTIAL  2    /* Expect sequential page references.  */
+# define MADV_WILLNEED   3     /* Will need these pages.  */
+# define MADV_DONTNEED   4     /* Don't need these pages.  */
+# define MADV_REMOVE     9     /* Remove these pages and resources.  */
+# define MADV_DONTFORK   10    /* Do not inherit across fork.  */
+# define MADV_DOFORK     11    /* Do inherit across fork.  */
+# define MADV_MERGEABLE          12    /* KSM may merge identical pages.  */
+# define MADV_UNMERGEABLE 13   /* KSM may not merge identical pages.  */
+# define MADV_HUGEPAGE   14    /* Worth backing with hugepages.  */
+# define MADV_NOHUGEPAGE  15   /* Not worth backing with hugepages.  */
+# define MADV_DONTDUMP   16    /* Explicity exclude from the core dump,
+                                   overrides the coredump filter bits.  */
+# define MADV_DODUMP     17    /* Clear the MADV_DONTDUMP flag.  */
+# define MADV_HWPOISON   100   /* Poison a page for testing.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL     0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM     1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED   3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED   4 /* Don't need these pages.  */
+#endif
+
+/* Flags for `mlockall'.  */
+#ifndef MCL_CURRENT
+# define MCL_CURRENT   1               /* Lock all currently mapped pages.  */
+# define MCL_FUTURE    2               /* Lock all additions to address
+                                          space.  */
+# define MCL_ONFAULT   4               /* Lock all pages that are
+                                          faulted in.  */
+#endif
diff --git a/lib/libdss-include/bits/mman.h b/lib/libdss-include/bits/mman.h
new file mode 100644 (file)
index 0000000..7453e03
--- /dev/null
@@ -0,0 +1,44 @@
+/* Definitions for POSIX memory map interface.  Linux/AArch64 version.
+
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x00100         /* Stack-like segment.  */
+# define MAP_DENYWRITE 0x00800         /* ETXTBSY */
+# define MAP_EXECUTABLE        0x01000         /* Mark it as an executable.  */
+# define MAP_LOCKED    0x02000         /* Lock the mapping.  */
+# define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
+# define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
+# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
+# define MAP_HUGETLB   0x40000         /* Create huge page mapping.  */
+#endif
+
+
+
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
diff --git a/lib/libdss-include/bits/monetary-ldbl.h b/lib/libdss-include/bits/monetary-ldbl.h
new file mode 100644 (file)
index 0000000..3718d10
--- /dev/null
@@ -0,0 +1,27 @@
+/* -mlong-double-64 compatibility mode for monetary functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MONETARY_H
+# error "Never include <bits/monetary-ldbl.h> directly; use <monetary.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (strfmon)
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (strfmon_l)
+#endif
diff --git a/lib/libdss-include/bits/mqueue.h b/lib/libdss-include/bits/mqueue.h
new file mode 100644 (file)
index 0000000..abe7b64
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MQUEUE_H
+# error "Never use <bits/mqueue.h> directly; include <mqueue.h> instead."
+#endif
+
+#include <bits/types.h>
+
+typedef int mqd_t;
+
+struct mq_attr
+{
+  __syscall_slong_t mq_flags;  /* Message queue flags.  */
+  __syscall_slong_t mq_maxmsg; /* Maximum number of messages.  */
+  __syscall_slong_t mq_msgsize;        /* Maximum message size.  */
+  __syscall_slong_t mq_curmsgs;        /* Number of messages currently queued.  */
+  __syscall_slong_t __pad[4];
+};
diff --git a/lib/libdss-include/bits/mqueue2.h b/lib/libdss-include/bits/mqueue2.h
new file mode 100644 (file)
index 0000000..712c8e2
--- /dev/null
@@ -0,0 +1,57 @@
+/* Checking macros for mq functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never include <bits/mqueue2.h> directly; use <mqueue.h> instead."
+#endif
+
+/* Check that calls to mq_open with O_CREAT set have an appropriate third and fourth
+   parameter.  */
+extern mqd_t mq_open (const char *__name, int __oflag, ...)
+     __THROW __nonnull ((1));
+extern mqd_t __mq_open_2 (const char *__name, int __oflag)
+     __THROW __nonnull ((1));
+extern mqd_t __REDIRECT_NTH (__mq_open_alias, (const char *__name,
+                                              int __oflag, ...), mq_open)
+     __nonnull ((1));
+__errordecl (__mq_open_wrong_number_of_args,
+            "mq_open can be called either with 2 or 4 arguments");
+__errordecl (__mq_open_missing_mode_and_attr,
+            "mq_open with O_CREAT in second argument needs 4 arguments");
+
+__fortify_function mqd_t
+__NTH (mq_open (const char *__name, int __oflag, ...))
+{
+  if (__va_arg_pack_len () != 0 && __va_arg_pack_len () != 2)
+    __mq_open_wrong_number_of_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () == 0)
+       {
+         __mq_open_missing_mode_and_attr ();
+         return __mq_open_2 (__name, __oflag);
+       }
+      return __mq_open_alias (__name, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () == 0)
+    return __mq_open_2 (__name, __oflag);
+
+  return __mq_open_alias (__name, __oflag, __va_arg_pack ());
+}
diff --git a/lib/libdss-include/bits/msq.h b/lib/libdss-include/bits/msq.h
new file mode 100644 (file)
index 0000000..2f3b7b2
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR    010000  /* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT    020000  /* recv any msg except of specified type */
+# define MSG_COPY      040000  /* copy (not remove) all queue messages */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;    /* structure describing operation permission */
+  __time_t msg_stime;          /* time of last msgsnd command */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved1;
+#endif
+  __time_t msg_rtime;          /* time of last msgrcv command */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved2;
+#endif
+  __time_t msg_ctime;          /* time of last change */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved3;
+#endif
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;          /* number of messages currently on queue */
+  msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
+  __pid_t msg_lspid;           /* pid of last msgsnd() */
+  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+  unsigned long int __glibc_reserved4;
+  unsigned long int __glibc_reserved5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes    __msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/lib/libdss-include/bits/nan.h b/lib/libdss-include/bits/nan.h
new file mode 100644 (file)
index 0000000..b832724
--- /dev/null
@@ -0,0 +1,52 @@
+/* `NAN' constant for IEEE 754 machines.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/nan.h> directly; include <math.h> instead."
+#endif
+
+
+/* IEEE Not A Number.  */
+
+#if __GNUC_PREREQ(3,3)
+
+# define NAN   (__builtin_nanf (""))
+
+#elif defined __GNUC__
+
+# define NAN \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__ ((__mode__ (__SI__))); float __d; })  \
+    { __l: 0x7fc00000UL }).__d)
+
+#else
+
+# include <endian.h>
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __qnan_bytes         { 0x7f, 0xc0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __qnan_bytes         { 0, 0, 0xc0, 0x7f }
+# endif
+
+static union { unsigned char __c[4]; float __d; } __qnan_union
+  __attribute__ ((__unused__)) = { __qnan_bytes };
+# define NAN   (__qnan_union.__d)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/bits/netdb.h b/lib/libdss-include/bits/netdb.h
new file mode 100644 (file)
index 0000000..3cd0db3
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETDB_H
+# error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
+#endif
+
+
+/* Description of data base entry for a single network.  NOTE: here a
+   poor assumption is made.  The network number is expected to fit
+   into an unsigned long int variable.  */
+struct netent
+{
+  char *n_name;                        /* Official name of network.  */
+  char **n_aliases;            /* Alias list.  */
+  int n_addrtype;              /* Net address type.  */
+  uint32_t n_net;              /* Network number.  */
+};
diff --git a/lib/libdss-include/bits/param.h b/lib/libdss-include/bits/param.h
new file mode 100644 (file)
index 0000000..45675d1
--- /dev/null
@@ -0,0 +1,42 @@
+/* Old-style Unix parameters and limits.  Linux version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+# error "Never use <bits/param.h> directly; include <sys/param.h> instead."
+#endif
+
+#ifndef ARG_MAX
+# define __undef_ARG_MAX
+#endif
+
+#include <linux/limits.h>
+#include <linux/param.h>
+
+/* The kernel headers define ARG_MAX.  The value is wrong, though.  */
+#ifdef __undef_ARG_MAX
+# undef ARG_MAX
+# undef __undef_ARG_MAX
+#endif
+
+#define        MAXSYMLINKS     20
+
+/* The following are not really correct but it is a value we used for a
+   long time and which seems to be usable.  People should not use NOFILE
+   and NCARGS anyway.  */
+#define NOFILE         256
+#define        NCARGS          131072
diff --git a/lib/libdss-include/bits/poll.h b/lib/libdss-include/bits/poll.h
new file mode 100644 (file)
index 0000000..a582118
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_POLL_H
+# error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+#endif
+
+/* Event types that can be polled for.  These bits may be set in `events'
+   to indicate the interesting event types; they will appear in `revents'
+   to indicate the status of the file descriptor.  */
+#define POLLIN         0x001           /* There is data to read.  */
+#define POLLPRI                0x002           /* There is urgent data to read.  */
+#define POLLOUT                0x004           /* Writing now will not block.  */
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+/* These values are defined in XPG4.2.  */
+# define POLLRDNORM    0x040           /* Normal data may be read.  */
+# define POLLRDBAND    0x080           /* Priority data may be read.  */
+# define POLLWRNORM    0x100           /* Writing now will not block.  */
+# define POLLWRBAND    0x200           /* Priority data may be written.  */
+#endif
+
+#ifdef __USE_GNU
+/* These are extensions for Linux.  */
+# define POLLMSG       0x400
+# define POLLREMOVE    0x1000
+# define POLLRDHUP     0x2000
+#endif
+
+/* Event types always implicitly polled for.  These bits need not be set in
+   `events', but they will appear in `revents' to indicate the status of
+   the file descriptor.  */
+#define POLLERR                0x008           /* Error condition.  */
+#define POLLHUP                0x010           /* Hung up.  */
+#define POLLNVAL       0x020           /* Invalid polling request.  */
diff --git a/lib/libdss-include/bits/poll2.h b/lib/libdss-include/bits/poll2.h
new file mode 100644 (file)
index 0000000..137bfaf
--- /dev/null
@@ -0,0 +1,81 @@
+/* Checking macros for poll functions.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_POLL_H
+# error "Never include <bits/poll2.h> directly; use <sys/poll.h> instead."
+#endif
+
+
+__BEGIN_DECLS
+
+extern int __REDIRECT (__poll_alias, (struct pollfd *__fds, nfds_t __nfds,
+                                     int __timeout), poll);
+extern int __poll_chk (struct pollfd *__fds, nfds_t __nfds, int __timeout,
+                      __SIZE_TYPE__ __fdslen);
+extern int __REDIRECT (__poll_chk_warn, (struct pollfd *__fds, nfds_t __nfds,
+                                        int __timeout, __SIZE_TYPE__ __fdslen),
+                      __poll_chk)
+  __warnattr ("poll called with fds buffer too small file nfds entries");
+
+__fortify_function int
+poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
+{
+  if (__bos (__fds) != (__SIZE_TYPE__) -1)
+    {
+      if (! __builtin_constant_p (__nfds))
+       return __poll_chk (__fds, __nfds, __timeout, __bos (__fds));
+      else if (__bos (__fds) / sizeof (*__fds) < __nfds)
+       return __poll_chk_warn (__fds, __nfds, __timeout, __bos (__fds));
+    }
+
+  return __poll_alias (__fds, __nfds, __timeout);
+}
+
+
+#ifdef __USE_GNU
+extern int __REDIRECT (__ppoll_alias, (struct pollfd *__fds, nfds_t __nfds,
+                                      const struct timespec *__timeout,
+                                      const __sigset_t *__ss), ppoll);
+extern int __ppoll_chk (struct pollfd *__fds, nfds_t __nfds,
+                       const struct timespec *__timeout,
+                       const __sigset_t *__ss, __SIZE_TYPE__ __fdslen);
+extern int __REDIRECT (__ppoll_chk_warn, (struct pollfd *__fds, nfds_t __nfds,
+                                         const struct timespec *__timeout,
+                                         const __sigset_t *__ss,
+                                         __SIZE_TYPE__ __fdslen),
+                      __ppoll_chk)
+  __warnattr ("ppoll called with fds buffer too small file nfds entries");
+
+__fortify_function int
+ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout,
+       const __sigset_t *__ss)
+{
+  if (__bos (__fds) != (__SIZE_TYPE__) -1)
+    {
+      if (! __builtin_constant_p (__nfds))
+       return __ppoll_chk (__fds, __nfds, __timeout, __ss, __bos (__fds));
+      else if (__bos (__fds) / sizeof (*__fds) < __nfds)
+       return __ppoll_chk_warn (__fds, __nfds, __timeout, __ss,
+                                __bos (__fds));
+    }
+
+  return __ppoll_alias (__fds, __nfds, __timeout, __ss);
+}
+#endif
+
+__END_DECLS
diff --git a/lib/libdss-include/bits/posix1_lim.h b/lib/libdss-include/bits/posix1_lim.h
new file mode 100644 (file)
index 0000000..b0a37bd
--- /dev/null
@@ -0,0 +1,175 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.9.2 Minimum Values    Added to <limits.h>
+ *
+ *     Never include this file directly; use <limits.h> instead.
+ */
+
+#ifndef        _BITS_POSIX1_LIM_H
+#define        _BITS_POSIX1_LIM_H      1
+
+
+/* These are the standard-mandated minimum values.  */
+
+/* Minimum number of operations in one list I/O call.  */
+#define _POSIX_AIO_LISTIO_MAX  2
+
+/* Minimal number of outstanding asynchronous I/O operations.  */
+#define _POSIX_AIO_MAX         1
+
+/* Maximum length of arguments to `execve', including environment.  */
+#define        _POSIX_ARG_MAX          4096
+
+/* Maximum simultaneous processes per real user ID.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_CHILD_MAX      25
+#else
+# define _POSIX_CHILD_MAX      6
+#endif
+
+/* Minimal number of timer expiration overruns.  */
+#define _POSIX_DELAYTIMER_MAX  32
+
+/* Maximum length of a host name (not including the terminating null)
+   as returned from the GETHOSTNAME function.  */
+#define _POSIX_HOST_NAME_MAX   255
+
+/* Maximum link count of a file.  */
+#define        _POSIX_LINK_MAX         8
+
+/* Maximum length of login name.  */
+#define        _POSIX_LOGIN_NAME_MAX   9
+
+/* Number of bytes in a terminal canonical input queue.  */
+#define        _POSIX_MAX_CANON        255
+
+/* Number of bytes for which space will be
+   available in a terminal input queue.  */
+#define        _POSIX_MAX_INPUT        255
+
+/* Maximum number of message queues open for a process.  */
+#define _POSIX_MQ_OPEN_MAX     8
+
+/* Maximum number of supported message priorities.  */
+#define _POSIX_MQ_PRIO_MAX     32
+
+/* Number of bytes in a filename.  */
+#define        _POSIX_NAME_MAX         14
+
+/* Number of simultaneous supplementary group IDs per process.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_NGROUPS_MAX    8
+#else
+# define _POSIX_NGROUPS_MAX    0
+#endif
+
+/* Number of files one process can have open at once.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_OPEN_MAX       20
+#else
+# define _POSIX_OPEN_MAX       16
+#endif
+
+#if !defined __USE_XOPEN2K || defined __USE_GNU
+/* Number of descriptors that a process may examine with `pselect' or
+   `select'.  */
+# define _POSIX_FD_SETSIZE     _POSIX_OPEN_MAX
+#endif
+
+/* Number of bytes in a pathname.  */
+#define        _POSIX_PATH_MAX         256
+
+/* Number of bytes than can be written atomically to a pipe.  */
+#define        _POSIX_PIPE_BUF         512
+
+/* The number of repeated occurrences of a BRE permitted by the
+   REGEXEC and REGCOMP functions when using the interval notation.  */
+#define _POSIX_RE_DUP_MAX      255
+
+/* Minimal number of realtime signals reserved for the application.  */
+#define _POSIX_RTSIG_MAX       8
+
+/* Number of semaphores a process can have.  */
+#define _POSIX_SEM_NSEMS_MAX   256
+
+/* Maximal value of a semaphore.  */
+#define _POSIX_SEM_VALUE_MAX   32767
+
+/* Number of pending realtime signals.  */
+#define _POSIX_SIGQUEUE_MAX    32
+
+/* Largest value of a `ssize_t'.  */
+#define        _POSIX_SSIZE_MAX        32767
+
+/* Number of streams a process can have open at once.  */
+#define        _POSIX_STREAM_MAX       8
+
+/* The number of bytes in a symbolic link.  */
+#define _POSIX_SYMLINK_MAX     255
+
+/* The number of symbolic links that can be traversed in the
+   resolution of a pathname in the absence of a loop.  */
+#define _POSIX_SYMLOOP_MAX     8
+
+/* Number of timer for a process.  */
+#define _POSIX_TIMER_MAX       32
+
+/* Maximum number of characters in a tty name.  */
+#define        _POSIX_TTY_NAME_MAX     9
+
+/* Maximum length of a timezone name (element of `tzname').  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_TZNAME_MAX     6
+#else
+# define _POSIX_TZNAME_MAX     3
+#endif
+
+#if !defined __USE_XOPEN2K || defined __USE_GNU
+/* Maximum number of connections that can be queued on a socket.  */
+# define _POSIX_QLIMIT         1
+
+/* Maximum number of bytes that can be buffered on a socket for send
+   or receive.  */
+# define _POSIX_HIWAT          _POSIX_PIPE_BUF
+
+/* Maximum number of elements in an `iovec' array.  */
+# define _POSIX_UIO_MAXIOV     16
+#endif
+
+/* Maximum clock resolution in nanoseconds.  */
+#define _POSIX_CLOCKRES_MIN    20000000
+
+
+/* Get the implementation-specific values for the above.  */
+#include <bits/local_lim.h>
+
+
+#ifndef        SSIZE_MAX
+# define SSIZE_MAX     LONG_MAX
+#endif
+
+
+/* This value is a guaranteed minimum maximum.
+   The current maximum can be got from `sysconf'.  */
+
+#ifndef        NGROUPS_MAX
+# define NGROUPS_MAX   8
+#endif
+
+#endif /* bits/posix1_lim.h  */
diff --git a/lib/libdss-include/bits/posix2_lim.h b/lib/libdss-include/bits/posix2_lim.h
new file mode 100644 (file)
index 0000000..819af36
--- /dev/null
@@ -0,0 +1,90 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; include <limits.h> instead.
+ */
+
+#ifndef        _BITS_POSIX2_LIM_H
+#define        _BITS_POSIX2_LIM_H      1
+
+
+/* The maximum `ibase' and `obase' values allowed by the `bc' utility.  */
+#define        _POSIX2_BC_BASE_MAX             99
+
+/* The maximum number of elements allowed in an array by the `bc' utility.  */
+#define        _POSIX2_BC_DIM_MAX              2048
+
+/* The maximum `scale' value allowed by the `bc' utility.  */
+#define        _POSIX2_BC_SCALE_MAX            99
+
+/* The maximum length of a string constant accepted by the `bc' utility.  */
+#define        _POSIX2_BC_STRING_MAX           1000
+
+/* The maximum number of weights that can be assigned to an entry of
+   the LC_COLLATE `order' keyword in the locale definition file.  */
+#define        _POSIX2_COLL_WEIGHTS_MAX        2
+
+/* The maximum number of expressions that can be nested
+   within parentheses by the `expr' utility.  */
+#define        _POSIX2_EXPR_NEST_MAX           32
+
+/* The maximum length, in bytes, of an input line.  */
+#define        _POSIX2_LINE_MAX                2048
+
+/* The maximum number of repeated occurrences of a regular expression
+   permitted when using the interval notation `\{M,N\}'.  */
+#define        _POSIX2_RE_DUP_MAX              255
+
+/* The maximum number of bytes in a character class name.  We have no
+   fixed limit, 2048 is a high number.  */
+#define        _POSIX2_CHARCLASS_NAME_MAX      14
+
+
+/* These values are implementation-specific,
+   and may vary within the implementation.
+   Their precise values can be obtained from sysconf.  */
+
+#ifndef        BC_BASE_MAX
+#define        BC_BASE_MAX             _POSIX2_BC_BASE_MAX
+#endif
+#ifndef        BC_DIM_MAX
+#define        BC_DIM_MAX              _POSIX2_BC_DIM_MAX
+#endif
+#ifndef        BC_SCALE_MAX
+#define        BC_SCALE_MAX            _POSIX2_BC_SCALE_MAX
+#endif
+#ifndef        BC_STRING_MAX
+#define        BC_STRING_MAX           _POSIX2_BC_STRING_MAX
+#endif
+#ifndef        COLL_WEIGHTS_MAX
+#define        COLL_WEIGHTS_MAX        255
+#endif
+#ifndef        EXPR_NEST_MAX
+#define        EXPR_NEST_MAX           _POSIX2_EXPR_NEST_MAX
+#endif
+#ifndef        LINE_MAX
+#define        LINE_MAX                _POSIX2_LINE_MAX
+#endif
+#ifndef        CHARCLASS_NAME_MAX
+#define        CHARCLASS_NAME_MAX      2048
+#endif
+
+/* This value is defined like this in regex.h.  */
+#define        RE_DUP_MAX (0x7fff)
+
+#endif /* bits/posix2_lim.h */
diff --git a/lib/libdss-include/bits/posix_opt.h b/lib/libdss-include/bits/posix_opt.h
new file mode 100644 (file)
index 0000000..5fb31b1
--- /dev/null
@@ -0,0 +1,191 @@
+/* Define POSIX options for Linux.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _BITS_POSIX_OPT_H
+#define        _BITS_POSIX_OPT_H       1
+
+/* Job control is supported.  */
+#define        _POSIX_JOB_CONTROL      1
+
+/* Processes have a saved set-user-ID and a saved set-group-ID.  */
+#define        _POSIX_SAVED_IDS        1
+
+/* Priority scheduling is supported.  */
+#define        _POSIX_PRIORITY_SCHEDULING      200809L
+
+/* Synchronizing file data is supported.  */
+#define        _POSIX_SYNCHRONIZED_IO  200809L
+
+/* The fsync function is present.  */
+#define        _POSIX_FSYNC    200809L
+
+/* Mapping of files to memory is supported.  */
+#define        _POSIX_MAPPED_FILES     200809L
+
+/* Locking of all memory is supported.  */
+#define        _POSIX_MEMLOCK  200809L
+
+/* Locking of ranges of memory is supported.  */
+#define        _POSIX_MEMLOCK_RANGE    200809L
+
+/* Setting of memory protections is supported.  */
+#define        _POSIX_MEMORY_PROTECTION        200809L
+
+/* Some filesystems allow all users to change file ownership.  */
+#define        _POSIX_CHOWN_RESTRICTED 0
+
+/* `c_cc' member of 'struct termios' structure can be disabled by
+   using the value _POSIX_VDISABLE.  */
+#define        _POSIX_VDISABLE '\0'
+
+/* Filenames are not silently truncated.  */
+#define        _POSIX_NO_TRUNC 1
+
+/* X/Open realtime support is available.  */
+#define _XOPEN_REALTIME        1
+
+/* X/Open thread realtime support is available.  */
+#define _XOPEN_REALTIME_THREADS        1
+
+/* XPG4.2 shared memory is supported.  */
+#define        _XOPEN_SHM      1
+
+/* Tell we have POSIX threads.  */
+#define _POSIX_THREADS 200809L
+
+/* We have the reentrant functions described in POSIX.  */
+#define _POSIX_REENTRANT_FUNCTIONS      1
+#define _POSIX_THREAD_SAFE_FUNCTIONS   200809L
+
+/* We provide priority scheduling for threads.  */
+#define _POSIX_THREAD_PRIORITY_SCHEDULING      200809L
+
+/* We support user-defined stack sizes.  */
+#define _POSIX_THREAD_ATTR_STACKSIZE   200809L
+
+/* We support user-defined stacks.  */
+#define _POSIX_THREAD_ATTR_STACKADDR   200809L
+
+/* We support priority inheritence.  */
+#define _POSIX_THREAD_PRIO_INHERIT     200809L
+
+/* We support priority protection, though only for non-robust
+   mutexes.  */
+#define _POSIX_THREAD_PRIO_PROTECT     200809L
+
+#ifdef __USE_XOPEN2K8
+/* We support priority inheritence for robust mutexes.  */
+# define _POSIX_THREAD_ROBUST_PRIO_INHERIT     200809L
+
+/* We do not support priority protection for robust mutexes.  */
+# define _POSIX_THREAD_ROBUST_PRIO_PROTECT     -1
+#endif
+
+/* We support POSIX.1b semaphores.  */
+#define _POSIX_SEMAPHORES      200809L
+
+/* Real-time signals are supported.  */
+#define _POSIX_REALTIME_SIGNALS        200809L
+
+/* We support asynchronous I/O.  */
+#define _POSIX_ASYNCHRONOUS_IO 200809L
+#define _POSIX_ASYNC_IO                1
+/* Alternative name for Unix98.  */
+#define _LFS_ASYNCHRONOUS_IO   1
+/* Support for prioritization is also available.  */
+#define _POSIX_PRIORITIZED_IO  200809L
+
+/* The LFS support in asynchronous I/O is also available.  */
+#define _LFS64_ASYNCHRONOUS_IO 1
+
+/* The rest of the LFS is also available.  */
+#define _LFS_LARGEFILE         1
+#define _LFS64_LARGEFILE       1
+#define _LFS64_STDIO           1
+
+/* POSIX shared memory objects are implemented.  */
+#define _POSIX_SHARED_MEMORY_OBJECTS   200809L
+
+/* CPU-time clocks support needs to be checked at runtime.  */
+#define _POSIX_CPUTIME 0
+
+/* Clock support in threads must be also checked at runtime.  */
+#define _POSIX_THREAD_CPUTIME  0
+
+/* GNU libc provides regular expression handling.  */
+#define _POSIX_REGEXP  1
+
+/* Reader/Writer locks are available.  */
+#define _POSIX_READER_WRITER_LOCKS     200809L
+
+/* We have a POSIX shell.  */
+#define _POSIX_SHELL   1
+
+/* We support the Timeouts option.  */
+#define _POSIX_TIMEOUTS        200809L
+
+/* We support spinlocks.  */
+#define _POSIX_SPIN_LOCKS      200809L
+
+/* The `spawn' function family is supported.  */
+#define _POSIX_SPAWN   200809L
+
+/* We have POSIX timers.  */
+#define _POSIX_TIMERS  200809L
+
+/* The barrier functions are available.  */
+#define _POSIX_BARRIERS        200809L
+
+/* POSIX message queues are available.  */
+#define        _POSIX_MESSAGE_PASSING  200809L
+
+/* Thread process-shared synchronization is supported.  */
+#define _POSIX_THREAD_PROCESS_SHARED   200809L
+
+/* The monotonic clock might be available.  */
+#define _POSIX_MONOTONIC_CLOCK 0
+
+/* The clock selection interfaces are available.  */
+#define _POSIX_CLOCK_SELECTION 200809L
+
+/* Advisory information interfaces are available.  */
+#define _POSIX_ADVISORY_INFO   200809L
+
+/* IPv6 support is available.  */
+#define _POSIX_IPV6    200809L
+
+/* Raw socket support is available.  */
+#define _POSIX_RAW_SOCKETS     200809L
+
+/* We have at least one terminal.  */
+#define _POSIX2_CHAR_TERM      200809L
+
+/* Neither process nor thread sporadic server interfaces is available.  */
+#define _POSIX_SPORADIC_SERVER -1
+#define _POSIX_THREAD_SPORADIC_SERVER  -1
+
+/* trace.h is not available.  */
+#define _POSIX_TRACE   -1
+#define _POSIX_TRACE_EVENT_FILTER      -1
+#define _POSIX_TRACE_INHERIT   -1
+#define _POSIX_TRACE_LOG       -1
+
+/* Typed memory objects are not available.  */
+#define _POSIX_TYPED_MEMORY_OBJECTS    -1
+
+#endif /* bits/posix_opt.h */
diff --git a/lib/libdss-include/bits/printf-ldbl.h b/lib/libdss-include/bits/printf-ldbl.h
new file mode 100644 (file)
index 0000000..aaa0921
--- /dev/null
@@ -0,0 +1,23 @@
+/* -mlong-double-64 compatibility mode for <printf.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_H
+# error "Never include <bits/printf-ldbl.h> directly; use <printf.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (printf_size)
diff --git a/lib/libdss-include/bits/pthreadtypes.h b/lib/libdss-include/bits/pthreadtypes.h
new file mode 100644 (file)
index 0000000..13984a7
--- /dev/null
@@ -0,0 +1,174 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_PTHREADTYPES_H
+#define _BITS_PTHREADTYPES_H   1
+
+#include <endian.h>
+
+#define __SIZEOF_PTHREAD_ATTR_T        64
+#define __SIZEOF_PTHREAD_MUTEX_T       48
+#define __SIZEOF_PTHREAD_MUTEXATTR_T    8
+#define __SIZEOF_PTHREAD_COND_T        48
+#define __SIZEOF_PTHREAD_COND_COMPAT_T 48
+#define __SIZEOF_PTHREAD_CONDATTR_T     8
+#define __SIZEOF_PTHREAD_RWLOCK_T      56
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T   8
+#define __SIZEOF_PTHREAD_BARRIER_T     32
+#define __SIZEOF_PTHREAD_BARRIERATTR_T  8
+
+
+/* Thread identifiers.  The structure of the attribute type is not
+   exposed on purpose.  */
+typedef unsigned long int pthread_t;
+
+
+union pthread_attr_t
+{
+  char __size[__SIZEOF_PTHREAD_ATTR_T];
+  long int __align;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t1
+#endif
+
+typedef struct __pthread_internal_list
+{
+  struct __pthread_internal_list *__prev;
+  struct __pthread_internal_list *__next;
+} __pthread_list_t;
+
+
+/* Data structures for mutex handling.  The structure of the attribute
+   type is not exposed on purpose.  */
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    unsigned int __nusers;
+    int __kind;
+    int __spins;
+    __pthread_list_t __list;
+#define __PTHREAD_MUTEX_HAVE_PREV      1
+  } __data;
+  char __size[__SIZEOF_PTHREAD_MUTEX_T];
+  long int __align;
+} pthread_mutex_t;
+
+/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.  */
+#define __PTHREAD_SPINS 0
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
+  long int __align;
+} pthread_mutexattr_t;
+
+
+/* Data structure for conditional variable handling.  The structure of
+   the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_COND_T];
+  long int __align;
+} pthread_cond_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_CONDATTR_T];
+  int __align;
+} pthread_condattr_t;
+
+
+/* Keys for thread-specific data */
+typedef unsigned int pthread_key_t;
+
+
+/* Once-only execution */
+typedef int pthread_once_t;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Data structure for read-write lock variable handling.  The
+   structure of the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+    int __writer;
+    int __shared;
+    unsigned long int __pad1;
+    unsigned long int __pad2;
+    unsigned int __flags;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_RWLOCK_T];
+  long int __align;
+} pthread_rwlock_t;
+
+#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
+  long int __align;
+} pthread_rwlockattr_t;
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* POSIX spinlock data type.  */
+typedef volatile int pthread_spinlock_t;
+
+
+/* POSIX barriers data type.  The structure of the type is
+   deliberately not exposed.  */
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIER_T];
+  long int __align;
+} pthread_barrier_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
+  int __align;
+} pthread_barrierattr_t;
+#endif
+
+#endif /* bits/pthreadtypes.h */
diff --git a/lib/libdss-include/bits/resource.h b/lib/libdss-include/bits/resource.h
new file mode 100644 (file)
index 0000000..8af0e0e
--- /dev/null
@@ -0,0 +1,328 @@
+/* Bit values & structures for resource limits.  Linux version.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_RESOURCE_H
+# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Transmute defines to enumerations.  The macro re-definitions are
+   necessary because some programs want to test for operating system
+   features with #ifdef RUSAGE_SELF.  In ISO C the reflexive
+   definition is a no-op.  */
+
+/* Kinds of resource limit.  */
+enum __rlimit_resource
+{
+  /* Per-process CPU limit, in seconds.  */
+  RLIMIT_CPU = 0,
+#define RLIMIT_CPU RLIMIT_CPU
+
+  /* Largest file that can be created, in bytes.  */
+  RLIMIT_FSIZE = 1,
+#define        RLIMIT_FSIZE RLIMIT_FSIZE
+
+  /* Maximum size of data segment, in bytes.  */
+  RLIMIT_DATA = 2,
+#define        RLIMIT_DATA RLIMIT_DATA
+
+  /* Maximum size of stack segment, in bytes.  */
+  RLIMIT_STACK = 3,
+#define        RLIMIT_STACK RLIMIT_STACK
+
+  /* Largest core file that can be created, in bytes.  */
+  RLIMIT_CORE = 4,
+#define        RLIMIT_CORE RLIMIT_CORE
+
+  /* Largest resident set size, in bytes.
+     This affects swapping; processes that are exceeding their
+     resident set size will be more likely to have physical memory
+     taken from them.  */
+  __RLIMIT_RSS = 5,
+#define        RLIMIT_RSS __RLIMIT_RSS
+
+  /* Number of open files.  */
+  RLIMIT_NOFILE = 7,
+  __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same.  */
+#define RLIMIT_NOFILE RLIMIT_NOFILE
+#define RLIMIT_OFILE __RLIMIT_OFILE
+
+  /* Address space limit.  */
+  RLIMIT_AS = 9,
+#define RLIMIT_AS RLIMIT_AS
+
+  /* Number of processes.  */
+  __RLIMIT_NPROC = 6,
+#define RLIMIT_NPROC __RLIMIT_NPROC
+
+  /* Locked-in-memory address space.  */
+  __RLIMIT_MEMLOCK = 8,
+#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK
+
+  /* Maximum number of file locks.  */
+  __RLIMIT_LOCKS = 10,
+#define RLIMIT_LOCKS __RLIMIT_LOCKS
+
+  /* Maximum number of pending signals.  */
+  __RLIMIT_SIGPENDING = 11,
+#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING
+
+  /* Maximum bytes in POSIX message queues.  */
+  __RLIMIT_MSGQUEUE = 12,
+#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE
+
+  /* Maximum nice priority allowed to raise to.
+     Nice levels 19 .. -20 correspond to 0 .. 39
+     values of this resource limit.  */
+  __RLIMIT_NICE = 13,
+#define RLIMIT_NICE __RLIMIT_NICE
+
+  /* Maximum realtime priority allowed for non-priviledged
+     processes.  */
+  __RLIMIT_RTPRIO = 14,
+#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
+
+  /* Maximum CPU time in µs that a process scheduled under a real-time
+     scheduling policy may consume without making a blocking system
+     call before being forcibly descheduled.  */
+  __RLIMIT_RTTIME = 15,
+#define RLIMIT_RTTIME __RLIMIT_RTTIME
+
+  __RLIMIT_NLIMITS = 16,
+  __RLIM_NLIMITS = __RLIMIT_NLIMITS
+#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
+#define RLIM_NLIMITS __RLIM_NLIMITS
+};
+
+/* Value to indicate that there is no limit.  */
+#ifndef __USE_FILE_OFFSET64
+# define RLIM_INFINITY ((__rlim_t) -1)
+#else
+# define RLIM_INFINITY 0xffffffffffffffffuLL
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define RLIM64_INFINITY 0xffffffffffffffffuLL
+#endif
+
+/* We can represent all limits.  */
+#define RLIM_SAVED_MAX RLIM_INFINITY
+#define RLIM_SAVED_CUR RLIM_INFINITY
+
+
+/* Type for resource quantity measurement.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
+struct rlimit
+  {
+    /* The current (soft) limit.  */
+    rlim_t rlim_cur;
+    /* The hard limit.  */
+    rlim_t rlim_max;
+  };
+
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.  */
+    rlim64_t rlim_max;
+ };
+#endif
+
+/* Whose usage statistics do you want?  */
+enum __rusage_who
+{
+  /* The calling process.  */
+  RUSAGE_SELF = 0,
+#define RUSAGE_SELF RUSAGE_SELF
+
+  /* All of its terminated child processes.  */
+  RUSAGE_CHILDREN = -1
+#define RUSAGE_CHILDREN RUSAGE_CHILDREN
+
+#ifdef __USE_GNU
+  ,
+  /* The calling thread.  */
+  RUSAGE_THREAD = 1
+# define RUSAGE_THREAD RUSAGE_THREAD
+  /* Name for the same functionality on Solaris.  */
+# define RUSAGE_LWP RUSAGE_THREAD
+#endif
+};
+
+#define __need_timeval
+#include <bits/time.h>         /* For `struct timeval'.  */
+
+/* Structure which says how much of each resource has been used.  */
+
+/* The purpose of all the unions is to have the kernel-compatible layout
+   while keeping the API type as 'long int', and among machines where
+   __syscall_slong_t is not 'long int', this only does the right thing
+   for little-endian ones, like x32.  */
+struct rusage
+  {
+    /* Total amount of user time used.  */
+    struct timeval ru_utime;
+    /* Total amount of system time used.  */
+    struct timeval ru_stime;
+    /* Maximum resident set size (in kilobytes).  */
+    __extension__ union
+      {
+       long int ru_maxrss;
+       __syscall_slong_t __ru_maxrss_word;
+      };
+    /* Amount of sharing of text segment memory
+       with other processes (kilobyte-seconds).  */
+    /* Maximum resident set size (in kilobytes).  */
+    __extension__ union
+      {
+       long int ru_ixrss;
+       __syscall_slong_t __ru_ixrss_word;
+      };
+    /* Amount of data segment memory used (kilobyte-seconds).  */
+    __extension__ union
+      {
+       long int ru_idrss;
+       __syscall_slong_t __ru_idrss_word;
+      };
+    /* Amount of stack memory used (kilobyte-seconds).  */
+    __extension__ union
+      {
+       long int ru_isrss;
+        __syscall_slong_t __ru_isrss_word;
+      };
+    /* Number of soft page faults (i.e. those serviced by reclaiming
+       a page from the list of pages awaiting reallocation.  */
+    __extension__ union
+      {
+       long int ru_minflt;
+       __syscall_slong_t __ru_minflt_word;
+      };
+    /* Number of hard page faults (i.e. those that required I/O).  */
+    __extension__ union
+      {
+       long int ru_majflt;
+       __syscall_slong_t __ru_majflt_word;
+      };
+    /* Number of times a process was swapped out of physical memory.  */
+    __extension__ union
+      {
+       long int ru_nswap;
+       __syscall_slong_t __ru_nswap_word;
+      };
+    /* Number of input operations via the file system.  Note: This
+       and `ru_oublock' do not include operations with the cache.  */
+    __extension__ union
+      {
+       long int ru_inblock;
+       __syscall_slong_t __ru_inblock_word;
+      };
+    /* Number of output operations via the file system.  */
+    __extension__ union
+      {
+       long int ru_oublock;
+       __syscall_slong_t __ru_oublock_word;
+      };
+    /* Number of IPC messages sent.  */
+    __extension__ union
+      {
+       long int ru_msgsnd;
+       __syscall_slong_t __ru_msgsnd_word;
+      };
+    /* Number of IPC messages received.  */
+    __extension__ union
+      {
+       long int ru_msgrcv;
+       __syscall_slong_t __ru_msgrcv_word;
+      };
+    /* Number of signals delivered.  */
+    __extension__ union
+      {
+       long int ru_nsignals;
+       __syscall_slong_t __ru_nsignals_word;
+      };
+    /* Number of voluntary context switches, i.e. because the process
+       gave up the process before it had to (usually to wait for some
+       resource to be available).  */
+    __extension__ union
+      {
+       long int ru_nvcsw;
+       __syscall_slong_t __ru_nvcsw_word;
+      };
+    /* Number of involuntary context switches, i.e. a higher priority process
+       became runnable or the current process used up its time slice.  */
+    __extension__ union
+      {
+       long int ru_nivcsw;
+       __syscall_slong_t __ru_nivcsw_word;
+      };
+  };
+
+/* Priority limits.  */
+#define PRIO_MIN       -20     /* Minimum priority a process can have.  */
+#define PRIO_MAX       20      /* Maximum priority a process can have.  */
+
+/* The type of the WHICH argument to `getpriority' and `setpriority',
+   indicating what flavor of entity the WHO argument specifies.  */
+enum __priority_which
+{
+  PRIO_PROCESS = 0,            /* WHO is a process ID.  */
+#define PRIO_PROCESS PRIO_PROCESS
+  PRIO_PGRP = 1,               /* WHO is a process group ID.  */
+#define PRIO_PGRP PRIO_PGRP
+  PRIO_USER = 2                        /* WHO is a user ID.  */
+#define PRIO_USER PRIO_USER
+};
+
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Modify and return resource limits of a process atomically.  */
+# ifndef __USE_FILE_OFFSET64
+extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
+                   const struct rlimit *__new_limit,
+                   struct rlimit *__old_limit) __THROW;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (prlimit, (__pid_t __pid,
+                                    enum __rlimit_resource __resource,
+                                    const struct rlimit *__new_limit,
+                                    struct rlimit *__old_limit), prlimit64);
+#  else
+#   define prlimit prlimit64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource,
+                     const struct rlimit64 *__new_limit,
+                     struct rlimit64 *__old_limit) __THROW;
+# endif
+#endif
+
+__END_DECLS
diff --git a/lib/libdss-include/bits/sched.h b/lib/libdss-include/bits/sched.h
new file mode 100644 (file)
index 0000000..4f5305a
--- /dev/null
@@ -0,0 +1,210 @@
+/* Definitions of constants and data structure for POSIX 1003.1b-1993
+   scheduling interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __need_schedparam
+
+#ifndef _SCHED_H
+# error "Never include <bits/sched.h> directly; use <sched.h> instead."
+#endif
+
+
+/* Scheduling algorithms.  */
+#define SCHED_OTHER            0
+#define SCHED_FIFO             1
+#define SCHED_RR               2
+#ifdef __USE_GNU
+# define SCHED_BATCH           3
+# define SCHED_IDLE            5
+
+# define SCHED_RESET_ON_FORK   0x40000000
+#endif
+
+#ifdef __USE_GNU
+/* Cloning flags.  */
+# define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
+# define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
+# define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
+# define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
+# define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
+# define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
+# define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
+                                    wake it up on mm_release.  */
+# define CLONE_PARENT  0x00008000 /* Set if we want to have the same
+                                    parent as the cloner.  */
+# define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
+# define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
+# define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
+# define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
+# define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
+                                          before MM copy.  */
+# define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
+                                           location to clear.  */
+# define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
+# define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
+                                     force CLONE_PTRACE on this clone.  */
+# define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
+                                         the child.  */
+# define CLONE_NEWUTS  0x04000000      /* New utsname group.  */
+# define CLONE_NEWIPC  0x08000000      /* New ipcs.  */
+# define CLONE_NEWUSER 0x10000000      /* New user namespace.  */
+# define CLONE_NEWPID  0x20000000      /* New pid namespace.  */
+# define CLONE_NEWNET  0x40000000      /* New network namespace.  */
+# define CLONE_IO      0x80000000      /* Clone I/O context.  */
+#endif
+
+/* The official definition.  */
+struct sched_param
+  {
+    int __sched_priority;
+  };
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Clone current process.  */
+extern int clone (int (*__fn) (void *__arg), void *__child_stack,
+                 int __flags, void *__arg, ...) __THROW;
+
+/* Unshare the specified resources.  */
+extern int unshare (int __flags) __THROW;
+
+/* Get index of currently used CPU.  */
+extern int sched_getcpu (void) __THROW;
+
+/* Switch process to namespace of type NSTYPE indicated by FD.  */
+extern int setns (int __fd, int __nstype) __THROW;
+#endif
+
+
+__END_DECLS
+
+#endif /* need schedparam */
+
+#if !defined __defined_schedparam \
+    && (defined __need_schedparam || defined _SCHED_H)
+# define __defined_schedparam  1
+/* Data structure to describe a process' schedulability.  */
+struct __sched_param
+  {
+    int __sched_priority;
+  };
+# undef __need_schedparam
+#endif
+
+
+#if defined _SCHED_H && !defined __cpu_set_t_defined
+# define __cpu_set_t_defined
+/* Size definition for CPU sets.  */
+# define __CPU_SETSIZE 1024
+# define __NCPUBITS    (8 * sizeof (__cpu_mask))
+
+/* Type for array elements in 'cpu_set_t'.  */
+typedef __CPU_MASK_TYPE __cpu_mask;
+
+/* Basic access functions.  */
+# define __CPUELT(cpu) ((cpu) / __NCPUBITS)
+# define __CPUMASK(cpu)        ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
+
+/* Data structure to describe CPU mask.  */
+typedef struct
+{
+  __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
+} cpu_set_t;
+
+/* Access functions for CPU masks.  */
+# if __GNUC_PREREQ (2, 91)
+#  define __CPU_ZERO_S(setsize, cpusetp) \
+  do __builtin_memset (cpusetp, '\0', setsize); while (0)
+# else
+#  define __CPU_ZERO_S(setsize, cpusetp) \
+  do {                                                                       \
+    size_t __i;                                                                      \
+    size_t __imax = (setsize) / sizeof (__cpu_mask);                         \
+    __cpu_mask *__bits = (cpusetp)->__bits;                                  \
+    for (__i = 0; __i < __imax; ++__i)                                       \
+      __bits[__i] = 0;                                                       \
+  } while (0)
+# endif
+# define __CPU_SET_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]                      \
+        |= __CPUMASK (__cpu))                                                \
+      : 0; }))
+# define __CPU_CLR_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]                      \
+        &= ~__CPUMASK (__cpu))                                               \
+      : 0; }))
+# define __CPU_ISSET_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]       \
+         & __CPUMASK (__cpu))) != 0                                          \
+      : 0; }))
+
+# define __CPU_COUNT_S(setsize, cpusetp) \
+  __sched_cpucount (setsize, cpusetp)
+
+# if __GNUC_PREREQ (2, 91)
+#  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
+# else
+#  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  (__extension__                                                             \
+   ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits;                         \
+      const __cpu_mask *__arr2 = (cpusetp2)->__bits;                         \
+      size_t __imax = (setsize) / sizeof (__cpu_mask);                       \
+      size_t __i;                                                            \
+      for (__i = 0; __i < __imax; ++__i)                                     \
+       if (__arr1[__i] != __arr2[__i])                                       \
+         break;                                                              \
+      __i == __imax; }))
+# endif
+
+# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
+  (__extension__                                                             \
+   ({ cpu_set_t *__dest = (destset);                                         \
+      const __cpu_mask *__arr1 = (srcset1)->__bits;                          \
+      const __cpu_mask *__arr2 = (srcset2)->__bits;                          \
+      size_t __imax = (setsize) / sizeof (__cpu_mask);                       \
+      size_t __i;                                                            \
+      for (__i = 0; __i < __imax; ++__i)                                     \
+       ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i];    \
+      __dest; }))
+
+# define __CPU_ALLOC_SIZE(count) \
+  ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))
+# define __CPU_ALLOC(count) __sched_cpualloc (count)
+# define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
+
+__BEGIN_DECLS
+
+extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
+  __THROW;
+extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur;
+extern void __sched_cpufree (cpu_set_t *__set) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/bits/select.h b/lib/libdss-include/bits/select.h
new file mode 100644 (file)
index 0000000..6a93c3d
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+#endif
+
+
+/* We don't use `memset' because this would require a prototype and
+   the array isn't too big.  */
+#define __FD_ZERO(s) \
+  do {                                                                       \
+    unsigned int __i;                                                        \
+    fd_set *__arr = (s);                                                     \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)         \
+      __FDS_BITS (__arr)[__i] = 0;                                           \
+  } while (0)
+#define __FD_SET(d, s) \
+  ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))
+#define __FD_CLR(d, s) \
+  ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))
+#define __FD_ISSET(d, s) \
+  ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
diff --git a/lib/libdss-include/bits/select2.h b/lib/libdss-include/bits/select2.h
new file mode 100644 (file)
index 0000000..56f2205
--- /dev/null
@@ -0,0 +1,35 @@
+/* Checking macros for select functions.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never include <bits/select2.h> directly; use <sys/select.h> instead."
+#endif
+
+/* Helper functions to issue warnings and errors when needed.  */
+extern long int __fdelt_chk (long int __d);
+extern long int __fdelt_warn (long int __d)
+  __warnattr ("bit outside of fd_set selected");
+#undef __FD_ELT
+#define        __FD_ELT(d) \
+  __extension__                                                                    \
+  ({ long int __d = (d);                                                   \
+     (__builtin_constant_p (__d)                                           \
+      ? (0 <= __d && __d < __FD_SETSIZE                                            \
+        ? (__d / __NFDBITS)                                                \
+        : __fdelt_warn (__d))                                              \
+      : __fdelt_chk (__d)); })
diff --git a/lib/libdss-include/bits/sem.h b/lib/libdss-include/bits/sem.h
new file mode 100644 (file)
index 0000000..c8437b7
--- /dev/null
@@ -0,0 +1,92 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+#include <bits/wordsize.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO       0x1000          /* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID         11              /* get sempid */
+#define GETVAL         12              /* get semval */
+#define GETALL         13              /* get all semval's */
+#define GETNCNT                14              /* get semncnt */
+#define GETZCNT                15              /* get semzcnt */
+#define SETVAL         16              /* set semval */
+#define SETALL         17              /* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;            /* operation permission struct */
+  __time_t sem_otime;                  /* last semop() time */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved1;
+#endif
+  __time_t sem_ctime;                  /* last time changed by semctl() */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved2;
+#endif
+  unsigned long int sem_nsems;         /* number of semaphores in set */
+  unsigned long int __glibc_reserved3;
+  unsigned long int __glibc_reserved4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;                          <= value for SETVAL
+     struct semid_ds *buf;             <= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;                <= array for GETALL & SETALL
+     struct seminfo *__buf;            <= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED   1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/lib/libdss-include/bits/semaphore.h b/lib/libdss-include/bits/semaphore.h
new file mode 100644 (file)
index 0000000..3cc5b37
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+
+#define __SIZEOF_SEM_T 32
+
+
+/* Value returned if `sem_open' failed.  */
+#define SEM_FAILED      ((sem_t *) 0)
+
+
+typedef union
+{
+  char __size[__SIZEOF_SEM_T];
+  long int __align;
+} sem_t;
diff --git a/lib/libdss-include/bits/setjmp.h b/lib/libdss-include/bits/setjmp.h
new file mode 100644 (file)
index 0000000..fff8616
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H 1
+
+#if !defined _SETJMP_H && !defined _PTHREAD_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+#ifndef _ASM
+/* Jump buffer contains:
+   x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15.  Other registers are not
+   saved.  */
+__extension__ typedef unsigned long long __jmp_buf [22];
+
+#endif
+#endif
diff --git a/lib/libdss-include/bits/setjmp2.h b/lib/libdss-include/bits/setjmp2.h
new file mode 100644 (file)
index 0000000..dbf3454
--- /dev/null
@@ -0,0 +1,40 @@
+/* Checking macros for setjmp functions.
+   Copyright (C) 2009-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SETJMP_H
+# error "Never include <bits/setjmp2.h> directly; use <setjmp.h> instead."
+#endif
+
+/* Variant of the longjmp functions which perform some sanity checking.  */
+#ifdef __REDIRECT_NTH
+extern void __REDIRECT_NTHNL (longjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+extern void __REDIRECT_NTHNL (_longjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+extern void __REDIRECT_NTHNL (siglongjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+#else
+extern void __longjmp_chk (struct __jmp_buf_tag __env[1], int __val),
+     __THROWNL __attribute__ ((__noreturn__));
+# define longjmp __longjmp_chk
+# define _longjmp __longjmp_chk
+# define siglongjmp __longjmp_chk
+#endif
diff --git a/lib/libdss-include/bits/shm.h b/lib/libdss-include/bits/shm.h
new file mode 100644 (file)
index 0000000..81918c8
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
+#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY     010000          /* attach read-only else read-write */
+#define SHM_RND                020000          /* round attach address to SHMLBA */
+#define SHM_REMAP      040000          /* take-over region on attach */
+#define SHM_EXEC       0100000         /* execution access */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK       11              /* lock segment (root only) */
+#define SHM_UNLOCK     12              /* unlock segment (root only) */
+
+__BEGIN_DECLS
+
+/* Segment low boundary address multiple.  */
+#define SHMLBA         (__getpagesize ())
+extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a shared memory segment.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;          /* operation permission struct */
+    size_t shm_segsz;                  /* size of segment in bytes */
+    __time_t shm_atime;                        /* time of last shmat() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved1;
+#endif
+    __time_t shm_dtime;                        /* time of last shmdt() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved2;
+#endif
+    __time_t shm_ctime;                        /* time of last change by shmctl() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved3;
+#endif
+    __pid_t shm_cpid;                  /* pid of creator */
+    __pid_t shm_lpid;                  /* pid of last shmop */
+    shmatt_t shm_nattch;               /* number of current attaches */
+    unsigned long int __glibc_reserved4;
+    unsigned long int __glibc_reserved5;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT      13
+# define SHM_INFO      14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST      01000   /* segment will be destroyed on last detach */
+# define SHM_LOCKED    02000   /* segment will not be swapped */
+# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
+# define SHM_NORESERVE 010000  /* don't check for reservations */
+
+struct shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __glibc_reserved1;
+    unsigned long int __glibc_reserved2;
+    unsigned long int __glibc_reserved3;
+    unsigned long int __glibc_reserved4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot; /* total allocated shm */
+    unsigned long int shm_rss; /* total resident shm */
+    unsigned long int shm_swp; /* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */
+
+__END_DECLS
diff --git a/lib/libdss-include/bits/sigaction.h b/lib/libdss-include/bits/sigaction.h
new file mode 100644 (file)
index 0000000..8c995fe
--- /dev/null
@@ -0,0 +1,78 @@
+/* The proper definitions for Linux's sigaction.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SIGNAL_H
+# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+#endif
+
+/* Structure describing the action to be taken when a signal arrives.  */
+struct sigaction
+  {
+    /* Signal handler.  */
+#ifdef __USE_POSIX199309
+    union
+      {
+       /* Used if SA_SIGINFO is not set.  */
+       __sighandler_t sa_handler;
+       /* Used if SA_SIGINFO is set.  */
+       void (*sa_sigaction) (int, siginfo_t *, void *);
+      }
+    __sigaction_handler;
+# define sa_handler    __sigaction_handler.sa_handler
+# define sa_sigaction  __sigaction_handler.sa_sigaction
+#else
+    __sighandler_t sa_handler;
+#endif
+
+    /* Additional set of signals to be blocked.  */
+    __sigset_t sa_mask;
+
+    /* Special flags.  */
+    int sa_flags;
+
+    /* Restore handler.  */
+    void (*sa_restorer) (void);
+  };
+
+/* Bits in `sa_flags'.  */
+#define        SA_NOCLDSTOP  1          /* Don't send SIGCHLD when children stop.  */
+#define SA_NOCLDWAIT  2                 /* Don't create zombie on child death.  */
+#define SA_SIGINFO    4                 /* Invoke signal-catching function with
+                                   three arguments instead of one.  */
+#if defined __USE_UNIX98 || defined __USE_MISC
+# define SA_ONSTACK   0x08000000 /* Use signal stack by using `sa_restorer'. */
+#endif
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
+# define SA_NODEFER   0x40000000 /* Don't automatically block the signal when
+                                   its handler is being executed.  */
+# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
+#endif
+#ifdef __USE_MISC
+# define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
+
+/* Some aliases for the SA_ constants.  */
+# define SA_NOMASK    SA_NODEFER
+# define SA_ONESHOT   SA_RESETHAND
+# define SA_STACK     SA_ONSTACK
+#endif
+
+/* Values for the HOW argument to `sigprocmask'.  */
+#define        SIG_BLOCK     0          /* Block signals.  */
+#define        SIG_UNBLOCK   1          /* Unblock signals.  */
+#define        SIG_SETMASK   2          /* Set the set of blocked signals.  */
diff --git a/lib/libdss-include/bits/sigcontext.h b/lib/libdss-include/bits/sigcontext.h
new file mode 100644 (file)
index 0000000..46cacb7
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+#endif
+
+#ifndef sigcontext_struct
+/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
+   we need sigcontext.  */
+# define sigcontext_struct sigcontext
+
+# include <asm/sigcontext.h>
+
+/* The Linux kernel headers redefine NULL wrongly, so cleanup afterwards.  */
+# define __need_NULL
+# include <stddef.h>
+#endif
diff --git a/lib/libdss-include/bits/siginfo.h b/lib/libdss-include/bits/siginfo.h
new file mode 100644 (file)
index 0000000..b8f130b
--- /dev/null
@@ -0,0 +1,341 @@
+/* siginfo_t, sigevent and constants.  Linux version.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SIGNAL_H && !defined __need_siginfo_t \
+    && !defined __need_sigevent_t
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#include <bits/wordsize.h>
+
+#if (!defined __have_sigval_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t \
+        || defined __need_sigevent_t))
+# define __have_sigval_t       1
+
+/* Type for data associated with a signal.  */
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+#endif
+
+#if (!defined __have_siginfo_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t))
+# define __have_siginfo_t      1
+
+# define __SI_MAX_SIZE     128
+# if __WORDSIZE == 64
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+typedef struct
+  {
+    int si_signo;              /* Signal number.  */
+    int si_errno;              /* If non-zero, an errno value associated with
+                                  this signal, as defined in <errno.h>.  */
+    int si_code;               /* Signal code.  */
+
+    union
+      {
+       int _pad[__SI_PAD_SIZE];
+
+        /* kill().  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+         } _kill;
+
+       /* POSIX.1b timers.  */
+       struct
+         {
+           int si_tid;         /* Timer ID.  */
+           int si_overrun;     /* Overrun count.  */
+           sigval_t si_sigval; /* Signal value.  */
+         } _timer;
+
+       /* POSIX.1b signals.  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           sigval_t si_sigval; /* Signal value.  */
+         } _rt;
+
+       /* SIGCHLD.  */
+       struct
+         {
+           __pid_t si_pid;     /* Which child.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           int si_status;      /* Exit value or signal.  */
+           __clock_t si_utime;
+           __clock_t si_stime;
+         } _sigchld;
+
+       /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+       struct
+         {
+           void *si_addr;      /* Faulting insn/memory ref.  */
+           short int si_addr_lsb;      /* Valid LSB of the reported address.  */
+         } _sigfault;
+
+       /* SIGPOLL.  */
+       struct
+         {
+           long int si_band;   /* Band event for SIGPOLL.  */
+           int si_fd;
+         } _sigpoll;
+
+       /* SIGSYS.  */
+       struct
+         {
+           void *_call_addr;   /* Calling user insn.  */
+           int _syscall;       /* Triggering system call number.  */
+           unsigned int _arch; /* AUDIT_ARCH_* of syscall.  */
+         } _sigsys;
+      } _sifields;
+  } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names.  */
+# define si_pid                _sifields._kill.si_pid
+# define si_uid                _sifields._kill.si_uid
+# define si_timerid    _sifields._timer.si_tid
+# define si_overrun    _sifields._timer.si_overrun
+# define si_status     _sifields._sigchld.si_status
+# define si_utime      _sifields._sigchld.si_utime
+# define si_stime      _sifields._sigchld.si_stime
+# define si_value      _sifields._rt.si_sigval
+# define si_int                _sifields._rt.si_sigval.sival_int
+# define si_ptr                _sifields._rt.si_sigval.sival_ptr
+# define si_addr       _sifields._sigfault.si_addr
+# define si_addr_lsb   _sifields._sigfault.si_addr_lsb
+# define si_band       _sifields._sigpoll.si_band
+# define si_fd         _sifields._sigpoll.si_fd
+# define si_call_addr  _sifields._sigsys._call_addr
+# define si_syscall    _sifields._sigsys._syscall
+# define si_arch       _sifields._sigsys._arch
+
+
+/* Values for `si_code'.  Positive values are reserved for kernel-generated
+   signals.  */
+enum
+{
+  SI_ASYNCNL = -60,            /* Sent by asynch name lookup completion.  */
+# define SI_ASYNCNL    SI_ASYNCNL
+  SI_TKILL = -6,               /* Sent by tkill.  */
+# define SI_TKILL      SI_TKILL
+  SI_SIGIO,                    /* Sent by queued SIGIO. */
+# define SI_SIGIO      SI_SIGIO
+  SI_ASYNCIO,                  /* Sent by AIO completion.  */
+# define SI_ASYNCIO    SI_ASYNCIO
+  SI_MESGQ,                    /* Sent by real time mesq state change.  */
+# define SI_MESGQ      SI_MESGQ
+  SI_TIMER,                    /* Sent by timer expiration.  */
+# define SI_TIMER      SI_TIMER
+  SI_QUEUE,                    /* Sent by sigqueue.  */
+# define SI_QUEUE      SI_QUEUE
+  SI_USER,                     /* Sent by kill, sigsend.  */
+# define SI_USER       SI_USER
+  SI_KERNEL = 0x80             /* Send by kernel.  */
+#define SI_KERNEL      SI_KERNEL
+};
+
+
+# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* `si_code' values for SIGILL signal.  */
+enum
+{
+  ILL_ILLOPC = 1,              /* Illegal opcode.  */
+#  define ILL_ILLOPC   ILL_ILLOPC
+  ILL_ILLOPN,                  /* Illegal operand.  */
+#  define ILL_ILLOPN   ILL_ILLOPN
+  ILL_ILLADR,                  /* Illegal addressing mode.  */
+#  define ILL_ILLADR   ILL_ILLADR
+  ILL_ILLTRP,                  /* Illegal trap. */
+#  define ILL_ILLTRP   ILL_ILLTRP
+  ILL_PRVOPC,                  /* Privileged opcode.  */
+#  define ILL_PRVOPC   ILL_PRVOPC
+  ILL_PRVREG,                  /* Privileged register.  */
+#  define ILL_PRVREG   ILL_PRVREG
+  ILL_COPROC,                  /* Coprocessor error.  */
+#  define ILL_COPROC   ILL_COPROC
+  ILL_BADSTK                   /* Internal stack error.  */
+#  define ILL_BADSTK   ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal.  */
+enum
+{
+  FPE_INTDIV = 1,              /* Integer divide by zero.  */
+#  define FPE_INTDIV   FPE_INTDIV
+  FPE_INTOVF,                  /* Integer overflow.  */
+#  define FPE_INTOVF   FPE_INTOVF
+  FPE_FLTDIV,                  /* Floating point divide by zero.  */
+#  define FPE_FLTDIV   FPE_FLTDIV
+  FPE_FLTOVF,                  /* Floating point overflow.  */
+#  define FPE_FLTOVF   FPE_FLTOVF
+  FPE_FLTUND,                  /* Floating point underflow.  */
+#  define FPE_FLTUND   FPE_FLTUND
+  FPE_FLTRES,                  /* Floating point inexact result.  */
+#  define FPE_FLTRES   FPE_FLTRES
+  FPE_FLTINV,                  /* Floating point invalid operation.  */
+#  define FPE_FLTINV   FPE_FLTINV
+  FPE_FLTSUB                   /* Subscript out of range.  */
+#  define FPE_FLTSUB   FPE_FLTSUB
+};
+
+/* `si_code' values for SIGSEGV signal.  */
+enum
+{
+  SEGV_MAPERR = 1,             /* Address not mapped to object.  */
+#  define SEGV_MAPERR  SEGV_MAPERR
+  SEGV_ACCERR                  /* Invalid permissions for mapped object.  */
+#  define SEGV_ACCERR  SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal.  */
+enum
+{
+  BUS_ADRALN = 1,              /* Invalid address alignment.  */
+#  define BUS_ADRALN   BUS_ADRALN
+  BUS_ADRERR,                  /* Non-existant physical address.  */
+#  define BUS_ADRERR   BUS_ADRERR
+  BUS_OBJERR,                  /* Object specific hardware error.  */
+#  define BUS_OBJERR   BUS_OBJERR
+  BUS_MCEERR_AR,               /* Hardware memory error: action required.  */
+#  define BUS_MCEERR_AR        BUS_MCEERR_AR
+  BUS_MCEERR_AO                        /* Hardware memory error: action optional.  */
+#  define BUS_MCEERR_AO        BUS_MCEERR_AO
+};
+# endif
+
+# ifdef __USE_XOPEN_EXTENDED
+/* `si_code' values for SIGTRAP signal.  */
+enum
+{
+  TRAP_BRKPT = 1,              /* Process breakpoint.  */
+#  define TRAP_BRKPT   TRAP_BRKPT
+  TRAP_TRACE                   /* Process trace trap.  */
+#  define TRAP_TRACE   TRAP_TRACE
+};
+# endif
+
+# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* `si_code' values for SIGCHLD signal.  */
+enum
+{
+  CLD_EXITED = 1,              /* Child has exited.  */
+#  define CLD_EXITED   CLD_EXITED
+  CLD_KILLED,                  /* Child was killed.  */
+#  define CLD_KILLED   CLD_KILLED
+  CLD_DUMPED,                  /* Child terminated abnormally.  */
+#  define CLD_DUMPED   CLD_DUMPED
+  CLD_TRAPPED,                 /* Traced child has trapped.  */
+#  define CLD_TRAPPED  CLD_TRAPPED
+  CLD_STOPPED,                 /* Child has stopped.  */
+#  define CLD_STOPPED  CLD_STOPPED
+  CLD_CONTINUED                        /* Stopped child has continued.  */
+#  define CLD_CONTINUED        CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal.  */
+enum
+{
+  POLL_IN = 1,                 /* Data input available.  */
+#  define POLL_IN      POLL_IN
+  POLL_OUT,                    /* Output buffers available.  */
+#  define POLL_OUT     POLL_OUT
+  POLL_MSG,                    /* Input message available.   */
+#  define POLL_MSG     POLL_MSG
+  POLL_ERR,                    /* I/O error.  */
+#  define POLL_ERR     POLL_ERR
+  POLL_PRI,                    /* High priority input available.  */
+#  define POLL_PRI     POLL_PRI
+  POLL_HUP                     /* Device disconnected.  */
+#  define POLL_HUP     POLL_HUP
+};
+# endif
+
+# undef __need_siginfo_t
+#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
+
+
+#if (defined _SIGNAL_H || defined __need_sigevent_t) \
+    && !defined __have_sigevent_t
+# define __have_sigevent_t     1
+
+/* Structure to transport application-defined values with signals.  */
+# define __SIGEV_MAX_SIZE      64
+# if __WORDSIZE == 64
+#  define __SIGEV_PAD_SIZE     ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SIGEV_PAD_SIZE     ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+/* Forward declaration.  */
+# ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+#  define __have_pthread_attr_t        1
+# endif
+
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+
+    union
+      {
+       int _pad[__SIGEV_PAD_SIZE];
+
+       /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
+          thread to receive the signal.  */
+       __pid_t _tid;
+
+       struct
+         {
+           void (*_function) (sigval_t);       /* Function to start.  */
+           pthread_attr_t *_attribute;         /* Thread attributes.  */
+         } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+
+/* POSIX names to access some of the members.  */
+# define sigev_notify_function   _sigev_un._sigev_thread._function
+# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+
+/* `sigev_notify' values.  */
+enum
+{
+  SIGEV_SIGNAL = 0,            /* Notify via signal.  */
+# define SIGEV_SIGNAL  SIGEV_SIGNAL
+  SIGEV_NONE,                  /* Other notification: meaningless.  */
+# define SIGEV_NONE    SIGEV_NONE
+  SIGEV_THREAD,                        /* Deliver via thread creation.  */
+# define SIGEV_THREAD  SIGEV_THREAD
+
+  SIGEV_THREAD_ID = 4          /* Send signal to specific thread.  */
+#define SIGEV_THREAD_ID        SIGEV_THREAD_ID
+};
+
+#endif /* have _SIGNAL_H.  */
diff --git a/lib/libdss-include/bits/signalfd.h b/lib/libdss-include/bits/signalfd.h
new file mode 100644 (file)
index 0000000..bac90e5
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SIGNALFD_H
+# error "Never use <bits/signalfd.h> directly; include <sys/signalfd.h> instead."
+#endif
+
+/* Flags for signalfd.  */
+enum
+  {
+    SFD_CLOEXEC = 02000000,
+#define SFD_CLOEXEC SFD_CLOEXEC
+    SFD_NONBLOCK = 00004000
+#define SFD_NONBLOCK SFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/bits/signum.h b/lib/libdss-include/bits/signum.h
new file mode 100644 (file)
index 0000000..0e4eea1
--- /dev/null
@@ -0,0 +1,79 @@
+/* Signal number definitions.  Linux version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef _SIGNAL_H
+
+/* Fake signal functions.  */
+#define SIG_ERR        ((__sighandler_t) -1)           /* Error return.  */
+#define SIG_DFL        ((__sighandler_t) 0)            /* Default action.  */
+#define SIG_IGN        ((__sighandler_t) 1)            /* Ignore signal.  */
+
+#ifdef __USE_UNIX98
+# define SIG_HOLD      ((__sighandler_t) 2)    /* Add signal to hold mask.  */
+#endif
+
+
+/* Signals.  */
+#define        SIGHUP          1       /* Hangup (POSIX).  */
+#define        SIGINT          2       /* Interrupt (ANSI).  */
+#define        SIGQUIT         3       /* Quit (POSIX).  */
+#define        SIGILL          4       /* Illegal instruction (ANSI).  */
+#define        SIGTRAP         5       /* Trace trap (POSIX).  */
+#define        SIGABRT         6       /* Abort (ANSI).  */
+#define        SIGIOT          6       /* IOT trap (4.2 BSD).  */
+#define        SIGBUS          7       /* BUS error (4.2 BSD).  */
+#define        SIGFPE          8       /* Floating-point exception (ANSI).  */
+#define        SIGKILL         9       /* Kill, unblockable (POSIX).  */
+#define        SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
+#define        SIGSEGV         11      /* Segmentation violation (ANSI).  */
+#define        SIGUSR2         12      /* User-defined signal 2 (POSIX).  */
+#define        SIGPIPE         13      /* Broken pipe (POSIX).  */
+#define        SIGALRM         14      /* Alarm clock (POSIX).  */
+#define        SIGTERM         15      /* Termination (ANSI).  */
+#define        SIGSTKFLT       16      /* Stack fault.  */
+#define        SIGCLD          SIGCHLD /* Same as SIGCHLD (System V).  */
+#define        SIGCHLD         17      /* Child status has changed (POSIX).  */
+#define        SIGCONT         18      /* Continue (POSIX).  */
+#define        SIGSTOP         19      /* Stop, unblockable (POSIX).  */
+#define        SIGTSTP         20      /* Keyboard stop (POSIX).  */
+#define        SIGTTIN         21      /* Background read from tty (POSIX).  */
+#define        SIGTTOU         22      /* Background write to tty (POSIX).  */
+#define        SIGURG          23      /* Urgent condition on socket (4.2 BSD).  */
+#define        SIGXCPU         24      /* CPU limit exceeded (4.2 BSD).  */
+#define        SIGXFSZ         25      /* File size limit exceeded (4.2 BSD).  */
+#define        SIGVTALRM       26      /* Virtual alarm clock (4.2 BSD).  */
+#define        SIGPROF         27      /* Profiling alarm clock (4.2 BSD).  */
+#define        SIGWINCH        28      /* Window size change (4.3 BSD, Sun).  */
+#define        SIGPOLL         SIGIO   /* Pollable event occurred (System V).  */
+#define        SIGIO           29      /* I/O now possible (4.2 BSD).  */
+#define        SIGPWR          30      /* Power failure restart (System V).  */
+#define SIGSYS         31      /* Bad system call.  */
+#define SIGUNUSED      31
+
+#define        _NSIG           65      /* Biggest signal number + 1
+                                  (including real-time signals).  */
+
+#define SIGRTMIN        (__libc_current_sigrtmin ())
+#define SIGRTMAX        (__libc_current_sigrtmax ())
+
+/* These are the hard limits of the kernel.  These values should not be
+   used directly at user level.  */
+#define __SIGRTMIN     32
+#define __SIGRTMAX     (_NSIG - 1)
+
+#endif /* <signal.h> included.  */
diff --git a/lib/libdss-include/bits/sigset.h b/lib/libdss-include/bits/sigset.h
new file mode 100644 (file)
index 0000000..72de7b5
--- /dev/null
@@ -0,0 +1,124 @@
+/* __sig_atomic_t, __sigset_t, and related definitions.  Linux version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SIGSET_H_types
+# define _SIGSET_H_types       1
+
+typedef int __sig_atomic_t;
+
+/* A `sigset_t' has a bit for each signal.  */
+
+# define _SIGSET_NWORDS        (1024 / (8 * sizeof (unsigned long int)))
+typedef struct
+  {
+    unsigned long int __val[_SIGSET_NWORDS];
+  } __sigset_t;
+
+#endif
+
+
+/* We only want to define these functions if <signal.h> was actually
+   included; otherwise we were included just to define the types.  Since we
+   are namespace-clean, it wouldn't hurt to define extra macros.  But
+   trouble can be caused by functions being defined (e.g., any global
+   register vars declared later will cause compilation errors).  */
+
+#if !defined _SIGSET_H_fns && defined _SIGNAL_H
+# define _SIGSET_H_fns 1
+
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE __extern_inline
+# endif
+
+/* Return a mask that includes the bit for SIG only.  */
+# define __sigmask(sig) \
+  (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+
+/* Return the word index for SIG.  */
+# define __sigword(sig)        (((sig) - 1) / (8 * sizeof (unsigned long int)))
+
+# if defined __GNUC__ && __GNUC__ >= 2
+#  define __sigemptyset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__set = (set);                                  \
+                   while (--__cnt >= 0) __set->__val[__cnt] = 0;             \
+                   0; }))
+#  define __sigfillset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__set = (set);                                  \
+                   while (--__cnt >= 0) __set->__val[__cnt] = ~0UL;          \
+                   0; }))
+
+#  ifdef __USE_GNU
+/* The POSIX does not specify for handling the whole signal set in one
+   command.  This is often wanted and so we define three more functions
+   here.  */
+#   define __sigisemptyset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   const sigset_t *__set = (set);                            \
+                   int __ret = __set->__val[--__cnt];                        \
+                   while (!__ret && --__cnt >= 0)                            \
+                       __ret = __set->__val[__cnt];                          \
+                   __ret == 0; }))
+#   define __sigandset(dest, left, right) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__dest = (dest);                                \
+                   const sigset_t *__left = (left);                          \
+                   const sigset_t *__right = (right);                        \
+                   while (--__cnt >= 0)                                      \
+                     __dest->__val[__cnt] = (__left->__val[__cnt]            \
+                                             & __right->__val[__cnt]);       \
+                   0; }))
+#   define __sigorset(dest, left, right) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__dest = (dest);                                \
+                   const sigset_t *__left = (left);                          \
+                   const sigset_t *__right = (right);                        \
+                   while (--__cnt >= 0)                                      \
+                     __dest->__val[__cnt] = (__left->__val[__cnt]            \
+                                             | __right->__val[__cnt]);       \
+                   0; }))
+#  endif
+# endif
+
+/* These functions needn't check for a bogus signal number -- error
+   checking is done in the non __ versions.  */
+
+extern int __sigismember (const __sigset_t *, int);
+extern int __sigaddset (__sigset_t *, int);
+extern int __sigdelset (__sigset_t *, int);
+
+# ifdef __USE_EXTERN_INLINES
+#  define __SIGSETFN(NAME, BODY, CONST)                                              \
+  _EXTERN_INLINE int                                                         \
+  NAME (CONST __sigset_t *__set, int __sig)                                  \
+  {                                                                          \
+    unsigned long int __mask = __sigmask (__sig);                            \
+    unsigned long int __word = __sigword (__sig);                            \
+    return BODY;                                                             \
+  }
+
+__SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, const)
+__SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), )
+__SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), )
+
+#  undef __SIGSETFN
+# endif
+
+
+#endif /* ! _SIGSET_H_fns.  */
diff --git a/lib/libdss-include/bits/sigstack.h b/lib/libdss-include/bits/sigstack.h
new file mode 100644 (file)
index 0000000..5b09b7c
--- /dev/null
@@ -0,0 +1,54 @@
+/* sigstack, sigaltstack definitions.
+   Copyright (C) 2015-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SIGNAL_H
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+
+/* Structure describing a signal stack (obsolete).  */
+struct sigstack
+  {
+    void *ss_sp;               /* Signal stack pointer.  */
+    int ss_onstack;            /* Nonzero if executing on this stack.  */
+  };
+
+
+/* Possible values for `ss_flags.'.  */
+enum
+{
+  SS_ONSTACK = 1,
+#define SS_ONSTACK     SS_ONSTACK
+  SS_DISABLE
+#define SS_DISABLE     SS_DISABLE
+};
+
+/* Minimum stack size for a signal handler.  */
+#define MINSIGSTKSZ    5120
+
+/* System default stack size.  */
+#define SIGSTKSZ       16384
+
+
+/* Alternate, preferred interface.  */
+typedef struct sigaltstack
+  {
+    void *ss_sp;
+    int ss_flags;
+    size_t ss_size;
+  } stack_t;
diff --git a/lib/libdss-include/bits/sigthread.h b/lib/libdss-include/bits/sigthread.h
new file mode 100644 (file)
index 0000000..32ef1a9
--- /dev/null
@@ -0,0 +1,43 @@
+/* Signal handling function for threaded programs.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_SIGTHREAD_H
+#define _BITS_SIGTHREAD_H      1
+
+#if !defined _SIGNAL_H && !defined _PTHREAD_H
+# error "Never include this file directly.  Use <pthread.h> instead"
+#endif
+
+/* Functions for handling signals. */
+
+/* Modify the signal mask for the calling thread.  The arguments have
+   the same meaning as for sigprocmask(2). */
+extern int pthread_sigmask (int __how,
+                           const __sigset_t *__restrict __newmask,
+                           __sigset_t *__restrict __oldmask)__THROW;
+
+/* Send signal SIGNO to the given thread. */
+extern int pthread_kill (pthread_t __threadid, int __signo) __THROW;
+
+#ifdef __USE_GNU
+/* Queue signal and data to a thread.  */
+extern int pthread_sigqueue (pthread_t __threadid, int __signo,
+                            const union sigval __value) __THROW;
+#endif
+
+#endif /* bits/sigthread.h */
diff --git a/lib/libdss-include/bits/sockaddr.h b/lib/libdss-include/bits/sockaddr.h
new file mode 100644 (file)
index 0000000..e91f837
--- /dev/null
@@ -0,0 +1,39 @@
+/* Definition of `struct sockaddr_*' common members.  Generic/4.2 BSD version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <sys/socket.h> instead.
+ */
+
+#ifndef _BITS_SOCKADDR_H
+#define _BITS_SOCKADDR_H       1
+
+
+/* POSIX.1g specifies this type name for the `sa_family' member.  */
+typedef unsigned short int sa_family_t;
+
+/* This macro is used to declare the initial common members
+   of the data types used for socket addresses, `struct sockaddr',
+   `struct sockaddr_in', `struct sockaddr_un', etc.  */
+
+#define        __SOCKADDR_COMMON(sa_prefix) \
+  sa_family_t sa_prefix##family
+
+#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))
+
+#endif /* bits/sockaddr.h */
diff --git a/lib/libdss-include/bits/socket.h b/lib/libdss-include/bits/socket.h
new file mode 100644 (file)
index 0000000..0581c79
--- /dev/null
@@ -0,0 +1,389 @@
+/* System-specific socket constants and types.  Linux version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __BITS_SOCKET_H
+#define __BITS_SOCKET_H
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+#endif
+
+#define __need_size_t
+#include <stddef.h>
+
+#include <sys/types.h>
+
+/* Type for length arguments in socket calls.  */
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+/* Get the architecture-dependent definition of enum __socket_type.  */
+#include <bits/socket_type.h>
+
+/* Protocol families.  */
+#define PF_UNSPEC      0       /* Unspecified.  */
+#define PF_LOCAL       1       /* Local to host (pipes and file-domain).  */
+#define PF_UNIX                PF_LOCAL /* POSIX name for PF_LOCAL.  */
+#define PF_FILE                PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
+#define PF_INET                2       /* IP protocol family.  */
+#define PF_AX25                3       /* Amateur Radio AX.25.  */
+#define PF_IPX         4       /* Novell Internet Protocol.  */
+#define PF_APPLETALK   5       /* Appletalk DDP.  */
+#define PF_NETROM      6       /* Amateur radio NetROM.  */
+#define PF_BRIDGE      7       /* Multiprotocol bridge.  */
+#define PF_ATMPVC      8       /* ATM PVCs.  */
+#define PF_X25         9       /* Reserved for X.25 project.  */
+#define PF_INET6       10      /* IP version 6.  */
+#define PF_ROSE                11      /* Amateur Radio X.25 PLP.  */
+#define PF_DECnet      12      /* Reserved for DECnet project.  */
+#define PF_NETBEUI     13      /* Reserved for 802.2LLC project.  */
+#define PF_SECURITY    14      /* Security callback pseudo AF.  */
+#define PF_KEY         15      /* PF_KEY key management API.  */
+#define PF_NETLINK     16
+#define PF_ROUTE       PF_NETLINK /* Alias to emulate 4.4BSD.  */
+#define PF_PACKET      17      /* Packet family.  */
+#define PF_ASH         18      /* Ash.  */
+#define PF_ECONET      19      /* Acorn Econet.  */
+#define PF_ATMSVC      20      /* ATM SVCs.  */
+#define PF_RDS         21      /* RDS sockets.  */
+#define PF_SNA         22      /* Linux SNA Project */
+#define PF_IRDA                23      /* IRDA sockets.  */
+#define PF_PPPOX       24      /* PPPoX sockets.  */
+#define PF_WANPIPE     25      /* Wanpipe API sockets.  */
+#define PF_LLC         26      /* Linux LLC.  */
+#define PF_IB          27      /* Native InfiniBand address.  */
+#define PF_MPLS                28      /* MPLS.  */
+#define PF_CAN         29      /* Controller Area Network.  */
+#define PF_TIPC                30      /* TIPC sockets.  */
+#define PF_BLUETOOTH   31      /* Bluetooth sockets.  */
+#define PF_IUCV                32      /* IUCV sockets.  */
+#define PF_RXRPC       33      /* RxRPC sockets.  */
+#define PF_ISDN                34      /* mISDN sockets.  */
+#define PF_PHONET      35      /* Phonet sockets.  */
+#define PF_IEEE802154  36      /* IEEE 802.15.4 sockets.  */
+#define PF_CAIF                37      /* CAIF sockets.  */
+#define PF_ALG         38      /* Algorithm sockets.  */
+#define PF_NFC         39      /* NFC sockets.  */
+#define PF_VSOCK       40      /* vSockets.  */
+#define PF_MAX         41      /* For now..  */
+
+/* Address families.  */
+#define AF_UNSPEC      PF_UNSPEC
+#define AF_LOCAL       PF_LOCAL
+#define AF_UNIX                PF_UNIX
+#define AF_FILE                PF_FILE
+#define AF_INET                PF_INET
+#define AF_AX25                PF_AX25
+#define AF_IPX         PF_IPX
+#define AF_APPLETALK   PF_APPLETALK
+#define AF_NETROM      PF_NETROM
+#define AF_BRIDGE      PF_BRIDGE
+#define AF_ATMPVC      PF_ATMPVC
+#define AF_X25         PF_X25
+#define AF_INET6       PF_INET6
+#define AF_ROSE                PF_ROSE
+#define AF_DECnet      PF_DECnet
+#define AF_NETBEUI     PF_NETBEUI
+#define AF_SECURITY    PF_SECURITY
+#define AF_KEY         PF_KEY
+#define AF_NETLINK     PF_NETLINK
+#define AF_ROUTE       PF_ROUTE
+#define AF_PACKET      PF_PACKET
+#define AF_ASH         PF_ASH
+#define AF_ECONET      PF_ECONET
+#define AF_ATMSVC      PF_ATMSVC
+#define AF_RDS         PF_RDS
+#define AF_SNA         PF_SNA
+#define AF_IRDA                PF_IRDA
+#define AF_PPPOX       PF_PPPOX
+#define AF_WANPIPE     PF_WANPIPE
+#define AF_LLC         PF_LLC
+#define AF_IB          PF_IB
+#define AF_MPLS                PF_MPLS
+#define AF_CAN         PF_CAN
+#define AF_TIPC                PF_TIPC
+#define AF_BLUETOOTH   PF_BLUETOOTH
+#define AF_IUCV                PF_IUCV
+#define AF_RXRPC       PF_RXRPC
+#define AF_ISDN                PF_ISDN
+#define AF_PHONET      PF_PHONET
+#define AF_IEEE802154  PF_IEEE802154
+#define AF_CAIF                PF_CAIF
+#define AF_ALG         PF_ALG
+#define AF_NFC         PF_NFC
+#define AF_VSOCK       PF_VSOCK
+#define AF_MAX         PF_MAX
+
+/* Socket level values.  Others are defined in the appropriate headers.
+
+   XXX These definitions also should go into the appropriate headers as
+   far as they are available.  */
+#define SOL_RAW                255
+#define SOL_DECNET      261
+#define SOL_X25         262
+#define SOL_PACKET     263
+#define SOL_ATM                264     /* ATM layer (cell level).  */
+#define SOL_AAL                265     /* ATM Adaption Layer (packet level).  */
+#define SOL_IRDA       266
+
+/* Maximum queue length specifiable by listen.  */
+#define SOMAXCONN      128
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+/* Structure describing a generic socket address.  */
+struct sockaddr
+  {
+    __SOCKADDR_COMMON (sa_);   /* Common data: address family and length.  */
+    char sa_data[14];          /* Address data.  */
+  };
+
+
+/* Structure large enough to hold any socket address (with the historical
+   exception of AF_UNIX).  We reserve 128 bytes.  */
+#define __ss_aligntype unsigned long int
+#define _SS_SIZE       128
+#define _SS_PADSIZE    (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+
+struct sockaddr_storage
+  {
+    __SOCKADDR_COMMON (ss_);   /* Address family, etc.  */
+    __ss_aligntype __ss_align; /* Force desired alignment.  */
+    char __ss_padding[_SS_PADSIZE];
+  };
+
+
+/* Bits in the FLAGS argument to `send', `recv', et al.  */
+enum
+  {
+    MSG_OOB            = 0x01, /* Process out-of-band data.  */
+#define MSG_OOB                MSG_OOB
+    MSG_PEEK           = 0x02, /* Peek at incoming messages.  */
+#define MSG_PEEK       MSG_PEEK
+    MSG_DONTROUTE      = 0x04, /* Don't use local routing.  */
+#define MSG_DONTROUTE  MSG_DONTROUTE
+#ifdef __USE_GNU
+    /* DECnet uses a different name.  */
+    MSG_TRYHARD                = MSG_DONTROUTE,
+# define MSG_TRYHARD   MSG_DONTROUTE
+#endif
+    MSG_CTRUNC         = 0x08, /* Control data lost before delivery.  */
+#define MSG_CTRUNC     MSG_CTRUNC
+    MSG_PROXY          = 0x10, /* Supply or ask second address.  */
+#define MSG_PROXY      MSG_PROXY
+    MSG_TRUNC          = 0x20,
+#define MSG_TRUNC      MSG_TRUNC
+    MSG_DONTWAIT       = 0x40, /* Nonblocking IO.  */
+#define MSG_DONTWAIT   MSG_DONTWAIT
+    MSG_EOR            = 0x80, /* End of record.  */
+#define MSG_EOR                MSG_EOR
+    MSG_WAITALL                = 0x100, /* Wait for a full request.  */
+#define MSG_WAITALL    MSG_WAITALL
+    MSG_FIN            = 0x200,
+#define MSG_FIN                MSG_FIN
+    MSG_SYN            = 0x400,
+#define MSG_SYN                MSG_SYN
+    MSG_CONFIRM                = 0x800, /* Confirm path validity.  */
+#define MSG_CONFIRM    MSG_CONFIRM
+    MSG_RST            = 0x1000,
+#define MSG_RST                MSG_RST
+    MSG_ERRQUEUE       = 0x2000, /* Fetch message from error queue.  */
+#define MSG_ERRQUEUE   MSG_ERRQUEUE
+    MSG_NOSIGNAL       = 0x4000, /* Do not generate SIGPIPE.  */
+#define MSG_NOSIGNAL   MSG_NOSIGNAL
+    MSG_MORE           = 0x8000,  /* Sender will send more.  */
+#define MSG_MORE       MSG_MORE
+    MSG_WAITFORONE     = 0x10000, /* Wait for at least one packet to return.*/
+#define MSG_WAITFORONE MSG_WAITFORONE
+    MSG_FASTOPEN       = 0x20000000, /* Send data in TCP SYN.  */
+#define MSG_FASTOPEN   MSG_FASTOPEN
+
+    MSG_CMSG_CLOEXEC   = 0x40000000    /* Set close_on_exit for file
+                                          descriptor received through
+                                          SCM_RIGHTS.  */
+#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+  };
+
+
+/* Structure describing messages sent by
+   `sendmsg' and received by `recvmsg'.  */
+struct msghdr
+  {
+    void *msg_name;            /* Address to send to/receive from.  */
+    socklen_t msg_namelen;     /* Length of address data.  */
+
+    struct iovec *msg_iov;     /* Vector of data to send/receive into.  */
+    size_t msg_iovlen;         /* Number of elements in the vector.  */
+
+    void *msg_control;         /* Ancillary data (eg BSD filedesc passing). */
+    size_t msg_controllen;     /* Ancillary data buffer length.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+
+    int msg_flags;             /* Flags on received message.  */
+  };
+
+/* Structure used for storage of ancillary data object information.  */
+struct cmsghdr
+  {
+    size_t cmsg_len;           /* Length of data in cmsg_data plus length
+                                  of cmsghdr structure.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+    int cmsg_level;            /* Originating protocol.  */
+    int cmsg_type;             /* Protocol specific type.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
+#endif
+  };
+
+/* Ancillary data object manipulation macros.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+#else
+# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+#endif
+#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+#define CMSG_FIRSTHDR(mhdr) \
+  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)                \
+   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+                        & (size_t) ~(sizeof (size_t) - 1))
+#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+                        + CMSG_ALIGN (sizeof (struct cmsghdr)))
+#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+
+extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+                                     struct cmsghdr *__cmsg) __THROW;
+#ifdef __USE_EXTERN_INLINES
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE __extern_inline
+# endif
+_EXTERN_INLINE struct cmsghdr *
+__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+{
+  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+    /* The kernel header does this so there may be a reason.  */
+    return (struct cmsghdr *) 0;
+
+  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+                              + CMSG_ALIGN (__cmsg->cmsg_len));
+  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+                                       + __mhdr->msg_controllen)
+      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+         > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+    /* No more entries.  */
+    return (struct cmsghdr *) 0;
+  return __cmsg;
+}
+#endif /* Use `extern inline'.  */
+
+/* Socket level message types.  This must match the definitions in
+   <linux/socket.h>.  */
+enum
+  {
+    SCM_RIGHTS = 0x01          /* Transfer file descriptors.  */
+#define SCM_RIGHTS SCM_RIGHTS
+#ifdef __USE_GNU
+    , SCM_CREDENTIALS = 0x02   /* Credentials passing.  */
+# define SCM_CREDENTIALS SCM_CREDENTIALS
+#endif
+  };
+
+#ifdef __USE_GNU
+/* User visible structure for SCM_CREDENTIALS message */
+struct ucred
+{
+  pid_t pid;                   /* PID of sending process.  */
+  uid_t uid;                   /* UID of sending process.  */
+  gid_t gid;                   /* GID of sending process.  */
+};
+#endif
+
+/* Ugly workaround for unclean kernel headers.  */
+#ifndef __USE_MISC
+# ifndef FIOGETOWN
+#  define __SYS_SOCKET_H_undef_FIOGETOWN
+# endif
+# ifndef FIOSETOWN
+#  define __SYS_SOCKET_H_undef_FIOSETOWN
+# endif
+# ifndef SIOCATMARK
+#  define __SYS_SOCKET_H_undef_SIOCATMARK
+# endif
+# ifndef SIOCGPGRP
+#  define __SYS_SOCKET_H_undef_SIOCGPGRP
+# endif
+# ifndef SIOCGSTAMP
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMP
+# endif
+# ifndef SIOCGSTAMPNS
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+# endif
+# ifndef SIOCSPGRP
+#  define __SYS_SOCKET_H_undef_SIOCSPGRP
+# endif
+#endif
+
+/* Get socket manipulation related informations from kernel headers.  */
+#include <asm/socket.h>
+
+#ifndef __USE_MISC
+# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef FIOGETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef FIOSETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef SIOCATMARK
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef SIOCGPGRP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef SIOCGSTAMP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef SIOCGSTAMPNS
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef SIOCSPGRP
+# endif
+#endif
+
+/* Structure used to manipulate the SO_LINGER option.  */
+struct linger
+  {
+    int l_onoff;               /* Nonzero to linger on close.  */
+    int l_linger;              /* Time to linger.  */
+  };
+
+#endif /* bits/socket.h */
diff --git a/lib/libdss-include/bits/socket2.h b/lib/libdss-include/bits/socket2.h
new file mode 100644 (file)
index 0000000..f499518
--- /dev/null
@@ -0,0 +1,77 @@
+/* Checking macros for socket functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket2.h> directly; use <sys/socket.h> instead."
+#endif
+
+extern ssize_t __recv_chk (int __fd, void *__buf, size_t __n, size_t __buflen,
+                          int __flags);
+extern ssize_t __REDIRECT (__recv_alias, (int __fd, void *__buf, size_t __n,
+                                         int __flags), recv);
+extern ssize_t __REDIRECT (__recv_chk_warn,
+                          (int __fd, void *__buf, size_t __n, size_t __buflen,
+                           int __flags), __recv_chk)
+     __warnattr ("recv called with bigger length than size of destination "
+                "buffer");
+
+__fortify_function ssize_t
+recv (int __fd, void *__buf, size_t __n, int __flags)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __recv_chk (__fd, __buf, __n, __bos0 (__buf), __flags);
+
+      if (__n > __bos0 (__buf))
+       return __recv_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags);
+    }
+  return __recv_alias (__fd, __buf, __n, __flags);
+}
+
+extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n,
+                              size_t __buflen, int __flags,
+                              __SOCKADDR_ARG __addr,
+                              socklen_t *__restrict __addr_len);
+extern ssize_t __REDIRECT (__recvfrom_alias,
+                          (int __fd, void *__restrict __buf, size_t __n,
+                           int __flags, __SOCKADDR_ARG __addr,
+                           socklen_t *__restrict __addr_len), recvfrom);
+extern ssize_t __REDIRECT (__recvfrom_chk_warn,
+                          (int __fd, void *__restrict __buf, size_t __n,
+                           size_t __buflen, int __flags,
+                           __SOCKADDR_ARG __addr,
+                           socklen_t *__restrict __addr_len), __recvfrom_chk)
+     __warnattr ("recvfrom called with bigger length than size of "
+                "destination buffer");
+
+__fortify_function ssize_t
+recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags,
+         __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __recvfrom_chk (__fd, __buf, __n, __bos0 (__buf), __flags,
+                              __addr, __addr_len);
+      if (__n > __bos0 (__buf))
+       return __recvfrom_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags,
+                                   __addr, __addr_len);
+    }
+  return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);
+}
diff --git a/lib/libdss-include/bits/socket_type.h b/lib/libdss-include/bits/socket_type.h
new file mode 100644 (file)
index 0000000..8501efb
--- /dev/null
@@ -0,0 +1,55 @@
+/* Define enum __socket_type for generic Linux.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
+#endif
+
+/* Types of sockets.  */
+enum __socket_type
+{
+  SOCK_STREAM = 1,             /* Sequenced, reliable, connection-based
+                                  byte streams.  */
+#define SOCK_STREAM SOCK_STREAM
+  SOCK_DGRAM = 2,              /* Connectionless, unreliable datagrams
+                                  of fixed maximum length.  */
+#define SOCK_DGRAM SOCK_DGRAM
+  SOCK_RAW = 3,                        /* Raw protocol interface.  */
+#define SOCK_RAW SOCK_RAW
+  SOCK_RDM = 4,                        /* Reliably-delivered messages.  */
+#define SOCK_RDM SOCK_RDM
+  SOCK_SEQPACKET = 5,          /* Sequenced, reliable, connection-based,
+                                  datagrams of fixed maximum length.  */
+#define SOCK_SEQPACKET SOCK_SEQPACKET
+  SOCK_DCCP = 6,               /* Datagram Congestion Control Protocol.  */
+#define SOCK_DCCP SOCK_DCCP
+  SOCK_PACKET = 10,            /* Linux specific way of getting packets
+                                  at the dev level.  For writing rarp and
+                                  other similar things on the user level. */
+#define SOCK_PACKET SOCK_PACKET
+
+  /* Flags to be ORed into the type parameter of socket and socketpair and
+     used for the flags parameter of paccept.  */
+
+  SOCK_CLOEXEC = 02000000,     /* Atomically set close-on-exec flag for the
+                                  new descriptor(s).  */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+  SOCK_NONBLOCK = 00004000     /* Atomically mark descriptor(s) as
+                                  non-blocking.  */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
+};
diff --git a/lib/libdss-include/bits/stab.def b/lib/libdss-include/bits/stab.def
new file mode 100644 (file)
index 0000000..2af2ddf
--- /dev/null
@@ -0,0 +1,233 @@
+/* Table of DBX symbol codes for the GNU system.
+   Copyright (C) 1988, 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This contains contribution from Cygnus Support.  */
+\f
+/* Global variable.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_GSYM, 0x20, "GSYM")
+
+/* Function name for BSD Fortran.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_FNAME, 0x22, "FNAME")
+
+/* Function name or text-segment variable for C.  Value is its address.
+   Desc is supposedly starting line number, but GCC doesn't set it
+   and DBX seems not to miss it.  */
+__define_stab (N_FUN, 0x24, "FUN")
+
+/* Data-segment variable with internal linkage.  Value is its address.
+   "Static Sym".  */
+__define_stab (N_STSYM, 0x26, "STSYM")
+
+/* BSS-segment variable with internal linkage.  Value is its address.  */
+__define_stab (N_LCSYM, 0x28, "LCSYM")
+
+/* Name of main routine.  Only the name is significant.
+   This is not used in C.  */
+__define_stab (N_MAIN, 0x2a, "MAIN")
+
+/* Global symbol in Pascal.
+   Supposedly the value is its line number; I'm skeptical.  */
+__define_stab (N_PC, 0x30, "PC")
+
+/* Number of symbols:  0, files,,funcs,lines according to Ultrix V4.0. */
+__define_stab (N_NSYMS, 0x32, "NSYMS")
+
+/* "No DST map for sym: name, ,0,type,ignored"  according to Ultrix V4.0. */
+__define_stab (N_NOMAP, 0x34, "NOMAP")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  */
+__define_stab (N_OBJ, 0x38, "OBJ")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  Possibly related to the
+   optimization flags used in this module.  */
+__define_stab (N_OPT, 0x3c, "OPT")
+
+/* Register variable.  Value is number of register.  */
+__define_stab (N_RSYM, 0x40, "RSYM")
+
+/* Modula-2 compilation unit.  Can someone say what info it contains?  */
+__define_stab (N_M2C, 0x42, "M2C")
+
+/* Line number in text segment.  Desc is the line number;
+   value is corresponding address.  */
+__define_stab (N_SLINE, 0x44, "SLINE")
+
+/* Similar, for data segment.  */
+__define_stab (N_DSLINE, 0x46, "DSLINE")
+
+/* Similar, for bss segment.  */
+__define_stab (N_BSLINE, 0x48, "BSLINE")
+
+/* Sun's source-code browser stabs.  ?? Don't know what the fields are.
+   Supposedly the field is "path to associated .cb file".  THIS VALUE
+   OVERLAPS WITH N_BSLINE!  */
+__define_stab (N_BROWS, 0x48, "BROWS")
+
+/* GNU Modula-2 definition module dependency.  Value is the modification time
+   of the definition file.  Other is non-zero if it is imported with the
+   GNU M2 keyword %INITIALIZE.  Perhaps N_M2C can be used if there
+   are enough empty fields? */
+__define_stab(N_DEFD, 0x4a, "DEFD")
+
+/* THE FOLLOWING TWO STAB VALUES CONFLICT.  Happily, one is for Modula-2
+   and one is for C++.   Still,... */
+/* GNU C++ exception variable.  Name is variable name.  */
+__define_stab (N_EHDECL, 0x50, "EHDECL")
+/* Modula2 info "for imc":  name,,0,0,0  according to Ultrix V4.0.  */
+__define_stab (N_MOD2, 0x50, "MOD2")
+
+/* GNU C++ `catch' clause.  Value is its address.  Desc is nonzero if
+   this entry is immediately followed by a CAUGHT stab saying what exception
+   was caught.  Multiple CAUGHT stabs means that multiple exceptions
+   can be caught here.  If Desc is 0, it means all exceptions are caught
+   here.  */
+__define_stab (N_CATCH, 0x54, "CATCH")
+
+/* Structure or union element.  Value is offset in the structure.  */
+__define_stab (N_SSYM, 0x60, "SSYM")
+
+/* Name of main source file.
+   Value is starting text address of the compilation.  */
+__define_stab (N_SO, 0x64, "SO")
+
+/* Automatic variable in the stack.  Value is offset from frame pointer.
+   Also used for type descriptions.  */
+__define_stab (N_LSYM, 0x80, "LSYM")
+
+/* Beginning of an include file.  Only Sun uses this.
+   In an object file, only the name is significant.
+   The Sun linker puts data into some of the other fields.  */
+__define_stab (N_BINCL, 0x82, "BINCL")
+
+/* Name of sub-source file (#include file).
+   Value is starting text address of the compilation.  */
+__define_stab (N_SOL, 0x84, "SOL")
+
+/* Parameter variable.  Value is offset from argument pointer.
+   (On most machines the argument pointer is the same as the frame pointer.  */
+__define_stab (N_PSYM, 0xa0, "PSYM")
+
+/* End of an include file.  No name.
+   This and N_BINCL act as brackets around the file's output.
+   In an object file, there is no significant data in this entry.
+   The Sun linker puts data into some of the fields.  */
+__define_stab (N_EINCL, 0xa2, "EINCL")
+
+/* Alternate entry point.  Value is its address.  */
+__define_stab (N_ENTRY, 0xa4, "ENTRY")
+
+/* Beginning of lexical block.
+   The desc is the nesting level in lexical blocks.
+   The value is the address of the start of the text for the block.
+   The variables declared inside the block *precede* the N_LBRAC symbol.  */
+__define_stab (N_LBRAC, 0xc0, "LBRAC")
+
+/* Place holder for deleted include file.  Replaces a N_BINCL and everything
+   up to the corresponding N_EINCL.  The Sun linker generates these when
+   it finds multiple identical copies of the symbols from an include file.
+   This appears only in output from the Sun linker.  */
+__define_stab (N_EXCL, 0xc2, "EXCL")
+
+/* Modula-2 scope information.  Can someone say what info it contains?  */
+__define_stab (N_SCOPE, 0xc4, "SCOPE")
+
+/* End of a lexical block.  Desc matches the N_LBRAC's desc.
+   The value is the address of the end of the text for the block.  */
+__define_stab (N_RBRAC, 0xe0, "RBRAC")
+
+/* Begin named common block.  Only the name is significant.  */
+__define_stab (N_BCOMM, 0xe2, "BCOMM")
+
+/* End named common block.  Only the name is significant
+   (and it should match the N_BCOMM).  */
+__define_stab (N_ECOMM, 0xe4, "ECOMM")
+
+/* End common (local name): value is address.
+   I'm not sure how this is used.  */
+__define_stab (N_ECOML, 0xe8, "ECOML")
+
+/* These STAB's are used on Gould systems for Non-Base register symbols
+   or something like that.  FIXME.  I have assigned the values at random
+   since I don't have a Gould here.  Fixups from Gould folk welcome... */
+__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
+__define_stab (N_NBDATA, 0xF2, "NBDATA")
+__define_stab (N_NBBSS,  0xF4, "NBBSS")
+__define_stab (N_NBSTS,  0xF6, "NBSTS")
+__define_stab (N_NBLCS,  0xF8, "NBLCS")
+
+/* Second symbol entry containing a length-value for the preceding entry.
+   The value is the length.  */
+__define_stab (N_LENG, 0xfe, "LENG")
+\f
+/* The above information, in matrix format.
+
+                       STAB MATRIX
+       _________________________________________________
+       | 00 - 1F are not dbx stab symbols              |
+       | In most cases, the low bit is the EXTernal bit|
+
+       | 00 UNDEF  | 02 ABS    | 04 TEXT   | 06 DATA   |
+       | 01  |EXT  | 03  |EXT  | 05  |EXT  | 07  |EXT  |
+
+       | 08 BSS    | 0A INDR   | 0C FN_SEQ | 0E        |
+       | 09  |EXT  | 0B        | 0D        | 0F        |
+
+       | 10        | 12 COMM   | 14 SETA   | 16 SETT   |
+       | 11        | 13        | 15        | 17        |
+
+       | 18 SETD   | 1A SETB   | 1C SETV   | 1E WARNING|
+       | 19        | 1B        | 1D        | 1F FN     |
+
+       |_______________________________________________|
+       | Debug entries with bit 01 set are unused.     |
+       | 20 GSYM   | 22 FNAME  | 24 FUN    | 26 STSYM  |
+       | 28 LCSYM  | 2A MAIN   | 2C        | 2E        |
+       | 30 PC     | 32 NSYMS  | 34 NOMAP  | 36        |
+       | 38 OBJ    | 3A        | 3C OPT    | 3E        |
+       | 40 RSYM   | 42 M2C    | 44 SLINE  | 46 DSLINE |
+       | 48 BSLINE*| 4A DEFD   | 4C        | 4E        |
+       | 50 EHDECL*| 52        | 54 CATCH  | 56        |
+       | 58        | 5A        | 5C        | 5E        |
+       | 60 SSYM   | 62        | 64 SO     | 66        |
+       | 68        | 6A        | 6C        | 6E        |
+       | 70        | 72        | 74        | 76        |
+       | 78        | 7A        | 7C        | 7E        |
+       | 80 LSYM   | 82 BINCL  | 84 SOL    | 86        |
+       | 88        | 8A        | 8C        | 8E        |
+       | 90        | 92        | 94        | 96        |
+       | 98        | 9A        | 9C        | 9E        |
+       | A0 PSYM   | A2 EINCL  | A4 ENTRY  | A6        |
+       | A8        | AA        | AC        | AE        |
+       | B0        | B2        | B4        | B6        |
+       | B8        | BA        | BC        | BE        |
+       | C0 LBRAC  | C2 EXCL   | C4 SCOPE  | C6        |
+       | C8        | CA        | CC        | CE        |
+       | D0        | D2        | D4        | D6        |
+       | D8        | DA        | DC        | DE        |
+       | E0 RBRAC  | E2 BCOMM  | E4 ECOMM  | E6        |
+       | E8 ECOML  | EA        | EC        | EE        |
+       | F0        | F2        | F4        | F6        |
+       | F8        | FA        | FC        | FE LENG   |
+       +-----------------------------------------------+
+ * 50 EHDECL is also MOD2.
+ * 48 BSLINE is also BROWS.
+ */
diff --git a/lib/libdss-include/bits/stat.h b/lib/libdss-include/bits/stat.h
new file mode 100644 (file)
index 0000000..dd8d799
--- /dev/null
@@ -0,0 +1,171 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H   1
+
+#include <endian.h>
+#include <bits/wordsize.h>
+
+/* 64-bit libc uses the kernel's 'struct stat', accessed via the
+   stat() syscall; 32-bit libc uses the kernel's 'struct stat64'
+   and accesses it via the stat64() syscall.  All the various
+   APIs offered by libc use the kernel shape for their struct stat
+   structure; the only difference is that 32-bit programs not
+   using __USE_FILE_OFFSET64 only see the low 32 bits of some
+   of the fields (specifically st_ino, st_size, and st_blocks).  */
+#define _STAT_VER_KERNEL       0
+#define _STAT_VER_LINUX                0
+#define _STAT_VER              _STAT_VER_KERNEL
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX       0
+
+#if defined __USE_FILE_OFFSET64
+# define __field64(type, type64, name) type64 name
+#elif __WORDSIZE == 64
+# define __field64(type, type64, name) type name
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define __field64(type, type64, name) \
+  type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad
+#else
+# define __field64(type, type64, name) \
+  int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name
+#endif
+
+struct stat
+  {
+    __dev_t st_dev;            /* Device.  */
+    __field64(__ino_t, __ino64_t, st_ino);  /* File serial number. */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Link count.  */
+    __uid_t st_uid;            /* User ID of the file's owner. */
+    __gid_t st_gid;            /* Group ID of the file's group.*/
+    __dev_t st_rdev;           /* Device number, if device.  */
+    __dev_t __pad1;
+    __field64(__off_t, __off64_t, st_size);  /* Size of file, in bytes. */
+    __blksize_t st_blksize;    /* Optimal block size for I/O.  */
+    int __pad2;
+    __field64(__blkcnt_t, __blkcnt64_t, st_blocks);  /* 512-byte blocks */
+#ifdef __USE_XOPEN2K8
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
+    int __glibc_reserved[2];
+  };
+
+#undef __field64
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+  {
+    __dev_t st_dev;            /* Device.  */
+    __ino64_t st_ino;          /* File serial number.  */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Link count.  */
+    __uid_t st_uid;            /* User ID of the file's owner. */
+    __gid_t st_gid;            /* Group ID of the file's group.*/
+    __dev_t st_rdev;           /* Device number, if device.  */
+    __dev_t __pad1;
+    __off64_t st_size;         /* Size of file, in bytes.  */
+    __blksize_t st_blksize;    /* Optimal block size for I/O.  */
+    int __pad2;
+    __blkcnt64_t st_blocks;    /* Nr. 512-byte blocks allocated.  */
+#ifdef __USE_XOPEN2K8
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
+    int __glibc_reserved[2];
+  };
+#endif
+
+/* Tell code we have these members.  */
+#define        _STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
+
+/* Encoding of the file mode.  */
+
+#define        __S_IFMT        0170000 /* These bits determine file type.  */
+
+/* File types.  */
+#define        __S_IFDIR       0040000 /* Directory.  */
+#define        __S_IFCHR       0020000 /* Character device.  */
+#define        __S_IFBLK       0060000 /* Block device.  */
+#define        __S_IFREG       0100000 /* Regular file.  */
+#define        __S_IFIFO       0010000 /* FIFO.  */
+#define        __S_IFLNK       0120000 /* Symbolic link.  */
+#define        __S_IFSOCK      0140000 /* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define        __S_ISUID       04000   /* Set user ID on execution.  */
+#define        __S_ISGID       02000   /* Set group ID on execution.  */
+#define        __S_ISVTX       01000   /* Save swapped text after use (sticky).  */
+#define        __S_IREAD       0400    /* Read by owner.  */
+#define        __S_IWRITE      0200    /* Write by owner.  */
+#define        __S_IEXEC       0100    /* Execute by owner.  */
+
+#ifdef __USE_ATFILE
+# define UTIME_NOW     ((1l << 30) - 1l)
+# define UTIME_OMIT    ((1l << 30) - 2l)
+#endif
+
+#endif /* bits/stat.h */
diff --git a/lib/libdss-include/bits/statfs.h b/lib/libdss-include/bits/statfs.h
new file mode 100644 (file)
index 0000000..7d5aa2d
--- /dev/null
@@ -0,0 +1,86 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_STATFS_H
+# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+#endif
+
+#include <endian.h>
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* 64-bit libc uses the kernel's 'struct statfs', accessed via the
+   statfs() syscall; 32-bit libc uses the kernel's 'struct statfs64'
+   and accesses it via the statfs64() syscall.  All the various
+   APIs offered by libc use the kernel shape for their struct statfs
+   structure; the only difference is that 32-bit programs not
+   using __USE_FILE_OFFSET64 only see the low 32 bits of some
+   of the fields (the __fsblkcnt_t and __fsfilcnt_t fields).  */
+
+#if defined __USE_FILE_OFFSET64
+# define __field64(type, type64, name) type64 name
+#elif __WORDSIZE == 64
+# define __field64(type, type64, name) type name
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define __field64(type, type64, name) \
+  type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad
+#else
+# define __field64(type, type64, name) \
+  int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name
+#endif
+
+struct statfs
+  {
+    __SWORD_TYPE f_type;
+    __SWORD_TYPE f_bsize;
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_blocks);
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bfree);
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bavail);
+    __field64(__fsfilcnt_t, __fsfilcnt64_t, f_files);
+    __field64(__fsfilcnt_t, __fsfilcnt64_t, f_ffree);
+    __fsid_t f_fsid;
+    __SWORD_TYPE f_namelen;
+    __SWORD_TYPE f_frsize;
+    __SWORD_TYPE f_flags;
+    __SWORD_TYPE f_spare[4];
+  };
+
+#undef __field64
+
+#ifdef __USE_LARGEFILE64
+struct statfs64
+  {
+    __SWORD_TYPE f_type;
+    __SWORD_TYPE f_bsize;
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsid_t f_fsid;
+    __SWORD_TYPE f_namelen;
+    __SWORD_TYPE f_frsize;
+    __SWORD_TYPE f_flags;
+    __SWORD_TYPE f_spare[4];
+  };
+#endif
+
+/* Tell code we have these members.  */
+#define _STATFS_F_NAMELEN
+#define _STATFS_F_FRSIZE
+#define _STATFS_F_FLAGS
diff --git a/lib/libdss-include/bits/statvfs.h b/lib/libdss-include/bits/statvfs.h
new file mode 100644 (file)
index 0000000..9244401
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_STATVFS_H
+# error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
+#endif
+
+#include <bits/types.h>  /* For __fsblkcnt_t and __fsfilcnt_t.  */
+
+#if (__WORDSIZE == 32 \
+     && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32))
+#define _STATVFSBUF_F_UNUSED
+#endif
+
+struct statvfs
+  {
+    unsigned long int f_bsize;
+    unsigned long int f_frsize;
+#ifndef __USE_FILE_OFFSET64
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_bavail;
+    __fsfilcnt_t f_files;
+    __fsfilcnt_t f_ffree;
+    __fsfilcnt_t f_favail;
+#else
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsfilcnt64_t f_favail;
+#endif
+    unsigned long int f_fsid;
+#ifdef _STATVFSBUF_F_UNUSED
+    int __f_unused;
+#endif
+    unsigned long int f_flag;
+    unsigned long int f_namemax;
+    int __f_spare[6];
+  };
+
+#ifdef __USE_LARGEFILE64
+struct statvfs64
+  {
+    unsigned long int f_bsize;
+    unsigned long int f_frsize;
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsfilcnt64_t f_favail;
+    unsigned long int f_fsid;
+#ifdef _STATVFSBUF_F_UNUSED
+    int __f_unused;
+#endif
+    unsigned long int f_flag;
+    unsigned long int f_namemax;
+    int __f_spare[6];
+  };
+#endif
+
+/* Definitions for the flag in `f_flag'.  These definitions should be
+   kept in sync with the definitions in <sys/mount.h>.  */
+enum
+{
+  ST_RDONLY = 1,               /* Mount read-only.  */
+#define ST_RDONLY      ST_RDONLY
+  ST_NOSUID = 2                        /* Ignore suid and sgid bits.  */
+#define ST_NOSUID      ST_NOSUID
+#ifdef __USE_GNU
+  ,
+  ST_NODEV = 4,                        /* Disallow access to device special files.  */
+# define ST_NODEV      ST_NODEV
+  ST_NOEXEC = 8,               /* Disallow program execution.  */
+# define ST_NOEXEC     ST_NOEXEC
+  ST_SYNCHRONOUS = 16,         /* Writes are synced at once.  */
+# define ST_SYNCHRONOUS        ST_SYNCHRONOUS
+  ST_MANDLOCK = 64,            /* Allow mandatory locks on an FS.  */
+# define ST_MANDLOCK   ST_MANDLOCK
+  ST_WRITE = 128,              /* Write on file/directory/symlink.  */
+# define ST_WRITE      ST_WRITE
+  ST_APPEND = 256,             /* Append-only file.  */
+# define ST_APPEND     ST_APPEND
+  ST_IMMUTABLE = 512,          /* Immutable file.  */
+# define ST_IMMUTABLE  ST_IMMUTABLE
+  ST_NOATIME = 1024,           /* Do not update access times.  */
+# define ST_NOATIME    ST_NOATIME
+  ST_NODIRATIME = 2048,                /* Do not update directory access times.  */
+# define ST_NODIRATIME ST_NODIRATIME
+  ST_RELATIME = 4096           /* Update atime relative to mtime/ctime.  */
+# define ST_RELATIME   ST_RELATIME
+#endif /* Use GNU.  */
+};
diff --git a/lib/libdss-include/bits/stdio-ldbl.h b/lib/libdss-include/bits/stdio-ldbl.h
new file mode 100644 (file)
index 0000000..d19415f
--- /dev/null
@@ -0,0 +1,101 @@
+/* -mlong-double-64 compatibility mode for stdio functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio-ldbl.h> directly; use <stdio.h> instead."
+#endif
+
+__BEGIN_NAMESPACE_STD
+__LDBL_REDIR_DECL (fprintf)
+__LDBL_REDIR_DECL (printf)
+__LDBL_REDIR_DECL (sprintf)
+__LDBL_REDIR_DECL (vfprintf)
+__LDBL_REDIR_DECL (vprintf)
+__LDBL_REDIR_DECL (vsprintf)
+#if defined __USE_ISOC99 && !defined __USE_GNU \
+    && !defined __REDIRECT \
+    && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (fscanf, __nldbl___isoc99_fscanf)
+__LDBL_REDIR1_DECL (scanf, __nldbl___isoc99_scanf)
+__LDBL_REDIR1_DECL (sscanf, __nldbl___isoc99_sscanf)
+#else
+__LDBL_REDIR_DECL (fscanf)
+__LDBL_REDIR_DECL (scanf)
+__LDBL_REDIR_DECL (sscanf)
+#endif
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR_DECL (snprintf)
+__LDBL_REDIR_DECL (vsnprintf)
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+# if !defined __USE_GNU && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc99_vfscanf)
+__LDBL_REDIR1_DECL (vscanf, __nldbl___isoc99_vscanf)
+__LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc99_vsscanf)
+# else
+__LDBL_REDIR_DECL (vfscanf)
+__LDBL_REDIR_DECL (vsscanf)
+__LDBL_REDIR_DECL (vscanf)
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_XOPEN2K8
+__LDBL_REDIR_DECL (vdprintf)
+__LDBL_REDIR_DECL (dprintf)
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (vasprintf)
+__LDBL_REDIR_DECL (__asprintf)
+__LDBL_REDIR_DECL (asprintf)
+__LDBL_REDIR_DECL (obstack_printf)
+__LDBL_REDIR_DECL (obstack_vprintf)
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__sprintf_chk)
+__LDBL_REDIR_DECL (__vsprintf_chk)
+# if defined __USE_ISOC99 || defined __USE_UNIX98
+__LDBL_REDIR_DECL (__snprintf_chk)
+__LDBL_REDIR_DECL (__vsnprintf_chk)
+# endif
+# if __USE_FORTIFY_LEVEL > 1
+__LDBL_REDIR_DECL (__fprintf_chk)
+__LDBL_REDIR_DECL (__printf_chk)
+__LDBL_REDIR_DECL (__vfprintf_chk)
+__LDBL_REDIR_DECL (__vprintf_chk)
+#  ifdef __USE_XOPEN2K8
+__LDBL_REDIR_DECL (__dprintf_chk)
+__LDBL_REDIR_DECL (__vdprintf_chk)
+#  endif
+#  ifdef __USE_GNU
+__LDBL_REDIR_DECL (__asprintf_chk)
+__LDBL_REDIR_DECL (__vasprintf_chk)
+__LDBL_REDIR_DECL (__obstack_printf_chk)
+__LDBL_REDIR_DECL (__obstack_vprintf_chk)
+#  endif
+# endif
+#endif
diff --git a/lib/libdss-include/bits/stdio.h b/lib/libdss-include/bits/stdio.h
new file mode 100644 (file)
index 0000000..df57e7c
--- /dev/null
@@ -0,0 +1,190 @@
+/* Optimizing macros and inline functions for stdio functions.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
+#endif
+
+#ifndef __extern_inline
+# define __STDIO_INLINE inline
+#else
+# define __STDIO_INLINE __extern_inline
+#endif
+
+
+#ifdef __USE_EXTERN_INLINES
+/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
+   inline.  */
+# if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function)
+/* Write formatted output to stdout from argument list ARG.  */
+__STDIO_INLINE int
+vprintf (const char *__restrict __fmt, _G_va_list __arg)
+{
+  return vfprintf (stdout, __fmt, __arg);
+}
+# endif
+
+/* Read a character from stdin.  */
+__STDIO_INLINE int
+getchar (void)
+{
+  return _IO_getc (stdin);
+}
+
+
+# ifdef __USE_MISC
+/* Faster version when locking is not necessary.  */
+__STDIO_INLINE int
+fgetc_unlocked (FILE *__fp)
+{
+  return _IO_getc_unlocked (__fp);
+}
+# endif /* misc */
+
+
+# ifdef __USE_POSIX
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+getc_unlocked (FILE *__fp)
+{
+  return _IO_getc_unlocked (__fp);
+}
+
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+getchar_unlocked (void)
+{
+  return _IO_getc_unlocked (stdin);
+}
+# endif        /* POSIX */
+
+
+/* Write a character to stdout.  */
+__STDIO_INLINE int
+putchar (int __c)
+{
+  return _IO_putc (__c, stdout);
+}
+
+
+# ifdef __USE_MISC
+/* Faster version when locking is not necessary.  */
+__STDIO_INLINE int
+fputc_unlocked (int __c, FILE *__stream)
+{
+  return _IO_putc_unlocked (__c, __stream);
+}
+# endif /* misc */
+
+
+# ifdef __USE_POSIX
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+putc_unlocked (int __c, FILE *__stream)
+{
+  return _IO_putc_unlocked (__c, __stream);
+}
+
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+putchar_unlocked (int __c)
+{
+  return _IO_putc_unlocked (__c, stdout);
+}
+# endif        /* POSIX */
+
+
+# ifdef        __USE_GNU
+/* Like `getdelim', but reads up to a newline.  */
+__STDIO_INLINE _IO_ssize_t
+getline (char **__lineptr, size_t *__n, FILE *__stream)
+{
+  return __getdelim (__lineptr, __n, '\n', __stream);
+}
+# endif /* GNU */
+
+
+# ifdef __USE_MISC
+/* Faster versions when locking is not required.  */
+__STDIO_INLINE int
+__NTH (feof_unlocked (FILE *__stream))
+{
+  return _IO_feof_unlocked (__stream);
+}
+
+/* Faster versions when locking is not required.  */
+__STDIO_INLINE int
+__NTH (ferror_unlocked (FILE *__stream))
+{
+  return _IO_ferror_unlocked (__stream);
+}
+# endif /* misc */
+
+#endif /* Use extern inlines.  */
+
+
+#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
+    && !defined __cplusplus
+/* Perform some simple optimizations.  */
+# define fread_unlocked(ptr, size, n, stream) \
+  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
+                  && (size_t) (size) * (size_t) (n) <= 8                     \
+                  && (size_t) (size) != 0)                                   \
+                 ? ({ char *__ptr = (char *) (ptr);                          \
+                      FILE *__stream = (stream);                             \
+                      size_t __cnt;                                          \
+                      for (__cnt = (size_t) (size) * (size_t) (n);           \
+                           __cnt > 0; --__cnt)                               \
+                        {                                                    \
+                          int __c = _IO_getc_unlocked (__stream);            \
+                          if (__c == EOF)                                    \
+                            break;                                           \
+                          *__ptr++ = __c;                                    \
+                        }                                                    \
+                      ((size_t) (size) * (size_t) (n) - __cnt)               \
+                       / (size_t) (size); })                                 \
+                 : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
+                     || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
+                       /* Evaluate all parameters once.  */                  \
+                    ? ((void) (ptr), (void) (stream), (void) (size),         \
+                       (void) (n), (size_t) 0)                               \
+                    : fread_unlocked (ptr, size, n, stream))))
+
+# define fwrite_unlocked(ptr, size, n, stream) \
+  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
+                  && (size_t) (size) * (size_t) (n) <= 8                     \
+                  && (size_t) (size) != 0)                                   \
+                 ? ({ const char *__ptr = (const char *) (ptr);              \
+                      FILE *__stream = (stream);                             \
+                      size_t __cnt;                                          \
+                      for (__cnt = (size_t) (size) * (size_t) (n);           \
+                           __cnt > 0; --__cnt)                               \
+                        if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \
+                          break;                                             \
+                      ((size_t) (size) * (size_t) (n) - __cnt)               \
+                       / (size_t) (size); })                                 \
+                 : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
+                     || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
+                       /* Evaluate all parameters once.  */                  \
+                    ? ((void) (ptr), (void) (stream), (void) (size),         \
+                       (void) (n), (size_t) 0)                               \
+                    : fwrite_unlocked (ptr, size, n, stream))))
+#endif
+
+/* Define helper macro.  */
+#undef __STDIO_INLINE
diff --git a/lib/libdss-include/bits/stdio2.h b/lib/libdss-include/bits/stdio2.h
new file mode 100644 (file)
index 0000000..fa3be79
--- /dev/null
@@ -0,0 +1,382 @@
+/* Checking macros for stdio functions.
+   Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio2.h> directly; use <stdio.h> instead."
+#endif
+
+extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+                         const char *__restrict __format, ...) __THROW;
+extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+                          const char *__restrict __format,
+                          _G_va_list __ap) __THROW;
+
+#ifdef __va_arg_pack
+__fortify_function int
+__NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...))
+{
+  return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
+                                 __bos (__s), __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+# define sprintf(str, ...) \
+  __builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \
+                          __VA_ARGS__)
+#endif
+
+__fortify_function int
+__NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
+                _G_va_list __ap))
+{
+  return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
+                                  __bos (__s), __fmt, __ap);
+}
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+
+extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
+                          size_t __slen, const char *__restrict __format,
+                          ...) __THROW;
+extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
+                           size_t __slen, const char *__restrict __format,
+                           _G_va_list __ap) __THROW;
+
+# ifdef __va_arg_pack
+__fortify_function int
+__NTH (snprintf (char *__restrict __s, size_t __n,
+                const char *__restrict __fmt, ...))
+{
+  return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                                  __bos (__s), __fmt, __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define snprintf(str, len, ...) \
+  __builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
+                           __VA_ARGS__)
+# endif
+
+__fortify_function int
+__NTH (vsnprintf (char *__restrict __s, size_t __n,
+                 const char *__restrict __fmt, _G_va_list __ap))
+{
+  return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                                   __bos (__s), __fmt, __ap);
+}
+
+#endif
+
+#if __USE_FORTIFY_LEVEL > 1
+
+extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
+                         const char *__restrict __format, ...);
+extern int __printf_chk (int __flag, const char *__restrict __format, ...);
+extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
+                          const char *__restrict __format, _G_va_list __ap);
+extern int __vprintf_chk (int __flag, const char *__restrict __format,
+                         _G_va_list __ap);
+
+# ifdef __va_arg_pack
+__fortify_function int
+fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
+{
+  return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
+                       __va_arg_pack ());
+}
+
+__fortify_function int
+printf (const char *__restrict __fmt, ...)
+{
+  return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define printf(...) \
+  __printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  define fprintf(stream, ...) \
+  __fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# endif
+
+__fortify_function int
+vprintf (const char *__restrict __fmt, _G_va_list __ap)
+{
+#ifdef __USE_EXTERN_INLINES
+  return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+#else
+  return __vprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+#endif
+}
+
+__fortify_function int
+vfprintf (FILE *__restrict __stream,
+         const char *__restrict __fmt, _G_va_list __ap)
+{
+  return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+# ifdef __USE_XOPEN2K8
+extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
+                         ...) __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __vdprintf_chk (int __fd, int __flag,
+                          const char *__restrict __fmt, _G_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#  ifdef __va_arg_pack
+__fortify_function int
+dprintf (int __fd, const char *__restrict __fmt, ...)
+{
+  return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,
+                       __va_arg_pack ());
+}
+#  elif !defined __cplusplus
+#   define dprintf(fd, ...) \
+  __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  endif
+
+__fortify_function int
+vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap)
+{
+  return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+# endif
+
+# ifdef __USE_GNU
+
+extern int __asprintf_chk (char **__restrict __ptr, int __flag,
+                          const char *__restrict __fmt, ...)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
+extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
+                           const char *__restrict __fmt, _G_va_list __arg)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
+extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
+                                int __flag, const char *__restrict __format,
+                                ...)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
+                                 int __flag,
+                                 const char *__restrict __format,
+                                 _G_va_list __args)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#  ifdef __va_arg_pack
+__fortify_function int
+__NTH (asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...))
+{
+  return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+
+__fortify_function int
+__NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt,
+                  ...))
+{
+  return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+
+__fortify_function int
+__NTH (obstack_printf (struct obstack *__restrict __obstack,
+                      const char *__restrict __fmt, ...))
+{
+  return __obstack_printf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
+                              __va_arg_pack ());
+}
+#  elif !defined __cplusplus
+#   define asprintf(ptr, ...) \
+  __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#   define __asprintf(ptr, ...) \
+  __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#   define obstack_printf(obstack, ...) \
+  __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  endif
+
+__fortify_function int
+__NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt,
+                 _G_va_list __ap))
+{
+  return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+__fortify_function int
+__NTH (obstack_vprintf (struct obstack *__restrict __obstack,
+                       const char *__restrict __fmt, _G_va_list __ap))
+{
+  return __obstack_vprintf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
+                               __ap);
+}
+
+# endif
+
+#endif
+
+#if !defined __USE_ISOC11 \
+    || (defined __cplusplus && __cplusplus <= 201103L && !defined __USE_GNU)
+extern char *__gets_chk (char *__str, size_t) __wur;
+extern char *__REDIRECT (__gets_warn, (char *__str), gets)
+     __wur __warnattr ("please use fgets or getline instead, gets can't "
+                      "specify buffer size");
+
+__fortify_function __wur char *
+gets (char *__str)
+{
+  if (__bos (__str) != (size_t) -1)
+    return __gets_chk (__str, __bos (__str));
+  return __gets_warn (__str);
+}
+#endif
+
+extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream) __wur;
+extern char *__REDIRECT (__fgets_alias,
+                        (char *__restrict __s, int __n,
+                         FILE *__restrict __stream), fgets) __wur;
+extern char *__REDIRECT (__fgets_chk_warn,
+                        (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream), __fgets_chk)
+     __wur __warnattr ("fgets called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur char *
+fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgets_chk (__s, __bos (__s), __n, __stream);
+
+      if ((size_t) __n > __bos (__s))
+       return __fgets_chk_warn (__s, __bos (__s), __n, __stream);
+    }
+  return __fgets_alias (__s, __n, __stream);
+}
+
+extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream) __wur;
+extern size_t __REDIRECT (__fread_alias,
+                         (void *__restrict __ptr, size_t __size,
+                          size_t __n, FILE *__restrict __stream),
+                         fread) __wur;
+extern size_t __REDIRECT (__fread_chk_warn,
+                         (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream),
+                         __fread_chk)
+     __wur __warnattr ("fread called with bigger size * nmemb than length "
+                      "of destination buffer");
+
+__fortify_function __wur size_t
+fread (void *__restrict __ptr, size_t __size, size_t __n,
+       FILE *__restrict __stream)
+{
+  if (__bos0 (__ptr) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+         || !__builtin_constant_p (__n)
+         || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+       return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);
+
+      if (__size * __n > __bos0 (__ptr))
+       return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);
+    }
+  return __fread_alias (__ptr, __size, __n, __stream);
+}
+
+#ifdef __USE_GNU
+extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
+                                  int __n, FILE *__restrict __stream) __wur;
+extern char *__REDIRECT (__fgets_unlocked_alias,
+                        (char *__restrict __s, int __n,
+                         FILE *__restrict __stream), fgets_unlocked) __wur;
+extern char *__REDIRECT (__fgets_unlocked_chk_warn,
+                        (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream), __fgets_unlocked_chk)
+     __wur __warnattr ("fgets_unlocked called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur char *
+fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);
+
+      if ((size_t) __n > __bos (__s))
+       return __fgets_unlocked_chk_warn (__s, __bos (__s), __n, __stream);
+    }
+  return __fgets_unlocked_alias (__s, __n, __stream);
+}
+#endif
+
+#ifdef __USE_MISC
+# undef fread_unlocked
+extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
+                                   size_t __size, size_t __n,
+                                   FILE *__restrict __stream) __wur;
+extern size_t __REDIRECT (__fread_unlocked_alias,
+                         (void *__restrict __ptr, size_t __size,
+                          size_t __n, FILE *__restrict __stream),
+                         fread_unlocked) __wur;
+extern size_t __REDIRECT (__fread_unlocked_chk_warn,
+                         (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream),
+                         __fread_unlocked_chk)
+     __wur __warnattr ("fread_unlocked called with bigger size * nmemb than "
+                      "length of destination buffer");
+
+__fortify_function __wur size_t
+fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
+               FILE *__restrict __stream)
+{
+  if (__bos0 (__ptr) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+         || !__builtin_constant_p (__n)
+         || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+       return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n,
+                                    __stream);
+
+      if (__size * __n > __bos0 (__ptr))
+       return __fread_unlocked_chk_warn (__ptr, __bos0 (__ptr), __size, __n,
+                                         __stream);
+    }
+
+# ifdef __USE_EXTERN_INLINES
+  if (__builtin_constant_p (__size)
+      && __builtin_constant_p (__n)
+      && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
+      && __size * __n <= 8)
+    {
+      size_t __cnt = __size * __n;
+      char *__cptr = (char *) __ptr;
+      if (__cnt == 0)
+       return 0;
+
+      for (; __cnt > 0; --__cnt)
+       {
+         int __c = _IO_getc_unlocked (__stream);
+         if (__c == EOF)
+           break;
+         *__cptr++ = __c;
+       }
+      return (__cptr - (char *) __ptr) / __size;
+    }
+# endif
+  return __fread_unlocked_alias (__ptr, __size, __n, __stream);
+}
+#endif
diff --git a/lib/libdss-include/bits/stdio_lim.h b/lib/libdss-include/bits/stdio_lim.h
new file mode 100644 (file)
index 0000000..247d8c6
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _STDIO_H && !defined __need_FOPEN_MAX && !defined __need_IOV_MAX
+# error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead."
+#endif
+
+#ifdef _STDIO_H
+# define L_tmpnam 20
+# define TMP_MAX 238328
+# define FILENAME_MAX 4096
+
+# ifdef __USE_POSIX
+#  define L_ctermid 9
+#  if !defined __USE_XOPEN2K || defined __USE_GNU
+#   define L_cuserid 9
+#  endif
+# endif
+#endif
+
+#if defined __need_FOPEN_MAX || defined _STDIO_H
+# undef  FOPEN_MAX
+# define FOPEN_MAX 16
+#endif
+
+#if defined __need_IOV_MAX && !defined IOV_MAX
+# define IOV_MAX 1024
+#endif
diff --git a/lib/libdss-include/bits/stdlib-bsearch.h b/lib/libdss-include/bits/stdlib-bsearch.h
new file mode 100644 (file)
index 0000000..bbc8f98
--- /dev/null
@@ -0,0 +1,43 @@
+/* Perform binary search - inline version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+__extern_inline void *
+bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
+        __compar_fn_t __compar)
+{
+  size_t __l, __u, __idx;
+  const void *__p;
+  int __comparison;
+
+  __l = 0;
+  __u = __nmemb;
+  while (__l < __u)
+    {
+      __idx = (__l + __u) / 2;
+      __p = (void *) (((const char *) __base) + (__idx * __size));
+      __comparison = (*__compar) (__key, __p);
+      if (__comparison < 0)
+       __u = __idx;
+      else if (__comparison > 0)
+       __l = __idx + 1;
+      else
+       return (void *) __p;
+    }
+
+  return NULL;
+}
diff --git a/lib/libdss-include/bits/stdlib-float.h b/lib/libdss-include/bits/stdlib-float.h
new file mode 100644 (file)
index 0000000..c3bbd04
--- /dev/null
@@ -0,0 +1,31 @@
+/* Floating-point inline functions for stdlib.h.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__BEGIN_NAMESPACE_STD
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+  return strtod (__nptr, (char **) NULL);
+}
+__END_NAMESPACE_STD
+#endif /* Optimizing and Inlining.  */
diff --git a/lib/libdss-include/bits/stdlib-ldbl.h b/lib/libdss-include/bits/stdlib-ldbl.h
new file mode 100644 (file)
index 0000000..acff499
--- /dev/null
@@ -0,0 +1,39 @@
+/* -mlong-double-64 compatibility mode for <stdlib.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib-ldbl.h> directly; use <stdlib.h> instead."
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR1_DECL (strtold, strtod)
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+#endif
+
+#ifdef __USE_MISC
+__LDBL_REDIR1_DECL (qecvt, ecvt)
+__LDBL_REDIR1_DECL (qfcvt, fcvt)
+__LDBL_REDIR1_DECL (qgcvt, gcvt)
+__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
+__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+#endif
diff --git a/lib/libdss-include/bits/stdlib.h b/lib/libdss-include/bits/stdlib.h
new file mode 100644 (file)
index 0000000..20fe986
--- /dev/null
@@ -0,0 +1,155 @@
+/* Checking macros for stdlib functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (const char *__restrict __name,
+                            char *__restrict __resolved,
+                            size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+                            (const char *__restrict __name,
+                             char *__restrict __resolved), realpath) __wur;
+extern char *__REDIRECT_NTH (__realpath_chk_warn,
+                            (const char *__restrict __name,
+                             char *__restrict __resolved,
+                             size_t __resolvedlen), __realpath_chk) __wur
+     __warnattr ("second argument of realpath must be either NULL or at "
+                "least PATH_MAX bytes long buffer");
+
+__fortify_function __wur char *
+__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
+{
+  if (__bos (__resolved) != (size_t) -1)
+    {
+#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
+      if (__bos (__resolved) < PATH_MAX)
+       return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
+#endif
+      return __realpath_chk (__name, __resolved, __bos (__resolved));
+    }
+
+  return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+                                              size_t __buflen), ptsname_r)
+     __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
+                          (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal), __ptsname_r_chk)
+     __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
+                                "size of buf");
+
+__fortify_function int
+__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+      if (__buflen > __bos (__buf))
+       return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+    }
+  return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+  __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+                          wctomb) __wur;
+
+__fortify_function __wur int
+__NTH (wctomb (char *__s, wchar_t __wchar))
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __STDLIB_MB_LEN_MAX    16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+    return __wctomb_chk (__s, __wchar, __bos (__s));
+  return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+                             const char *__restrict __src,
+                             size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbstowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char *__restrict __src,
+                              size_t __len), mbstowcs);
+extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char *__restrict __src,
+                              size_t __len, size_t __dstlen), __mbstowcs_chk)
+     __warnattr ("mbstowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
+                size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbstowcs_chk (__dst, __src, __len,
+                              __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbstowcs_chk_warn (__dst, __src, __len,
+                                    __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+                             const wchar_t *__restrict __src,
+                             size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcstombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t *__restrict __src,
+                              size_t __len), wcstombs);
+extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t *__restrict __src,
+                              size_t __len, size_t __dstlen), __wcstombs_chk)
+     __warnattr ("wcstombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
+                size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
+      if (__len > __bos (__dst))
+       return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
+    }
+  return __wcstombs_alias (__dst, __src, __len);
+}
diff --git a/lib/libdss-include/bits/string.h b/lib/libdss-include/bits/string.h
new file mode 100644 (file)
index 0000000..0a508f7
--- /dev/null
@@ -0,0 +1,24 @@
+/* Optimized, inlined string functions.  AArch64 version.
+   Copyright (C) 2015-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string.h> directly; include <string.h> instead."
+#endif
+
+/* AArch64 uses the aligned string inline ABI.  */
+#define _STRING_INLINE_unaligned 0
diff --git a/lib/libdss-include/bits/string2.h b/lib/libdss-include/bits/string2.h
new file mode 100644 (file)
index 0000000..0dc51e5
--- /dev/null
@@ -0,0 +1,1329 @@
+/* Machine-independant string function optimizations.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string2.h> directly; include <string.h> instead."
+#endif
+
+#ifndef __NO_STRING_INLINES
+
+/* Unlike the definitions in the header <bits/string.h> the
+   definitions contained here are not optimized down to assembler
+   level.  Those optimizations are not always a good idea since this
+   means the code size increases a lot.  Instead the definitions here
+   optimize some functions in a way which do not dramatically
+   increase the code size and which do not use assembler.  The main
+   trick is to use GCC's `__builtin_constant_p' function.
+
+   Every function XXX which has a defined version in
+   <bits/string.h> must be accompanied by a symbol _HAVE_STRING_ARCH_XXX
+   to make sure we don't get redefinitions.
+
+   We must use here macros instead of inline functions since the
+   trick won't work with the latter.  */
+
+#ifndef __STRING_INLINE
+# ifdef __cplusplus
+#  define __STRING_INLINE inline
+# else
+#  define __STRING_INLINE __extern_inline
+# endif
+#endif
+
+#if _STRING_INLINE_unaligned
+/* If we can do unaligned memory accesses we must know the endianess.  */
+# include <endian.h>
+# include <bits/types.h>
+
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __STRING2_SMALL_GET16(src, idx) \
+     (((const unsigned char *) (const char *) (src))[idx + 1] << 8           \
+      | ((const unsigned char *) (const char *) (src))[idx])
+#  define __STRING2_SMALL_GET32(src, idx) \
+     (((((const unsigned char *) (const char *) (src))[idx + 3] << 8         \
+       | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8       \
+       | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8       \
+      | ((const unsigned char *) (const char *) (src))[idx])
+# else
+#  define __STRING2_SMALL_GET16(src, idx) \
+     (((const unsigned char *) (const char *) (src))[idx] << 8               \
+      | ((const unsigned char *) (const char *) (src))[idx + 1])
+#  define __STRING2_SMALL_GET32(src, idx) \
+     (((((const unsigned char *) (const char *) (src))[idx] << 8             \
+       | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8       \
+       | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8       \
+      | ((const unsigned char *) (const char *) (src))[idx + 3])
+# endif
+#else
+/* These are a few types we need for the optimizations if we cannot
+   use unaligned memory accesses.  */
+# define __STRING2_COPY_TYPE(N) \
+  typedef struct { unsigned char __arr[N]; }                                 \
+    __attribute__ ((__packed__)) __STRING2_COPY_ARR##N
+__STRING2_COPY_TYPE (2);
+__STRING2_COPY_TYPE (3);
+__STRING2_COPY_TYPE (4);
+__STRING2_COPY_TYPE (5);
+__STRING2_COPY_TYPE (6);
+__STRING2_COPY_TYPE (7);
+__STRING2_COPY_TYPE (8);
+# undef __STRING2_COPY_TYPE
+#endif
+
+/* Dereferencing a pointer arg to run sizeof on it fails for the void
+   pointer case, so we use this instead.
+   Note that __x is evaluated twice. */
+#define __string2_1bptr_p(__x) \
+  ((size_t)(const void *)((__x) + 1) - (size_t)(const void *)(__x) == 1)
+
+/* Set N bytes of S to C.  */
+#if !defined _HAVE_STRING_ARCH_memset
+# if !__GNUC_PREREQ (3, 0)
+#  if _STRING_INLINE_unaligned
+#   define memset(s, c, n) \
+  (__extension__ (__builtin_constant_p (n) && (n) <= 16                              \
+                 ? ((n) == 1                                                 \
+                    ? __memset_1 (s, c)                                      \
+                    : __memset_gc (s, c, n))                                 \
+                 : (__builtin_constant_p (c) && (c) == '\0'                  \
+                    ? ({ void *__s = (s); __bzero (__s, n); __s; })          \
+                    : memset (s, c, n))))
+
+#   define __memset_1(s, c) ({ void *__s = (s);                                      \
+                           *((__uint8_t *) __s) = (__uint8_t) c; __s; })
+
+#   define __memset_gc(s, c, n) \
+  ({ void *__s = (s);                                                        \
+     union {                                                                 \
+       unsigned int __ui;                                                    \
+       unsigned short int __usi;                                             \
+       unsigned char __uc;                                                   \
+     } *__u = __s;                                                           \
+     __uint8_t __c = (__uint8_t) (c);                                        \
+                                                                             \
+     /* This `switch' statement will be removed at compile-time.  */         \
+     switch ((unsigned int) (n))                                             \
+       {                                                                     \
+       case 15:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 11:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 7:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 3:                                                               \
+        __u->__usi = (unsigned short int) __c * 0x0101;                      \
+        __u = __extension__ ((void *) __u + 2);                              \
+        __u->__uc = (unsigned char) __c;                                     \
+        break;                                                               \
+                                                                             \
+       case 14:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 10:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 6:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 2:                                                               \
+        __u->__usi = (unsigned short int) __c * 0x0101;                      \
+        break;                                                               \
+                                                                             \
+       case 13:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 9:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 5:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 1:                                                               \
+        __u->__uc = (unsigned char) __c;                                     \
+        break;                                                               \
+                                                                             \
+       case 16:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 12:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 8:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 4:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+       case 0:                                                               \
+        break;                                                               \
+       }                                                                     \
+                                                                             \
+     __s; })
+#  else
+#   define memset(s, c, n) \
+  (__extension__ (__builtin_constant_p (c) && (c) == '\0'                    \
+                 ? ({ void *__s = (s); __bzero (__s, n); __s; })             \
+                 : memset (s, c, n)))
+#  endif
+# endif
+
+/* GCC < 3.0 optimizes memset(s, 0, n) but not bzero(s, n).
+   The optimization is broken before EGCS 1.1.
+   GCC 3.0+ has __builtin_bzero as well, but at least till GCC 3.4
+   if it decides to call the library function, it calls memset
+   and not bzero.  */
+# if __GNUC_PREREQ (2, 91)
+#  define __bzero(s, n) __builtin_memset (s, '\0', n)
+# endif
+
+#endif
+
+
+/* Copy N bytes from SRC to DEST, returning pointer to byte following the
+   last copied.  */
+#ifdef __USE_GNU
+# if !defined _HAVE_STRING_ARCH_mempcpy || defined _FORCE_INLINES
+#  ifndef _HAVE_STRING_ARCH_mempcpy
+#   if __GNUC_PREREQ (3, 4)
+#    define __mempcpy(dest, src, n) __builtin_mempcpy (dest, src, n)
+#   elif __GNUC_PREREQ (3, 0)
+#    define __mempcpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 && __string2_1bptr_p (src) && n <= 8                        \
+                 ? __builtin_memcpy (dest, src, n) + (n)                     \
+                 : __mempcpy (dest, src, n)))
+#   else
+#    define __mempcpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 && __string2_1bptr_p (src) && n <= 8                        \
+                 ? __mempcpy_small (dest, __mempcpy_args (src), n)           \
+                 : __mempcpy (dest, src, n)))
+#   endif
+/* In glibc we use this function frequently but for namespace reasons
+   we have to use the name `__mempcpy'.  */
+#   define mempcpy(dest, src, n) __mempcpy (dest, src, n)
+#  endif
+
+#  if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+#   if _STRING_INLINE_unaligned
+#    ifndef _FORCE_INLINES
+#     define __mempcpy_args(src) \
+     ((const char *) (src))[0], ((const char *) (src))[2],                   \
+     ((const char *) (src))[4], ((const char *) (src))[6],                   \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#    endif
+__STRING_INLINE void *__mempcpy_small (void *, char, char, char, char,
+                                      __uint16_t, __uint16_t, __uint32_t,
+                                      __uint32_t, size_t);
+__STRING_INLINE void *
+__mempcpy_small (void *__dest1,
+                char __src0_1, char __src2_1, char __src4_1, char __src6_1,
+                __uint16_t __src0_2, __uint16_t __src4_2,
+                __uint32_t __src0_4, __uint32_t __src4_4,
+                size_t __srclen)
+{
+  union {
+    __uint32_t __ui;
+    __uint16_t __usi;
+    unsigned char __uc;
+    unsigned char __c;
+  } *__u = __dest1;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = __src0_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__c = __src2_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__c = __src4_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__c = __src6_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      __u = __extension__ ((void *) __u + 4);
+      break;
+    }
+  return (void *) __u;
+}
+#   else
+#    ifndef _FORCE_INLINES
+#     define __mempcpy_args(src) \
+     ((const char *) (src))[0],                                                      \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1] } }),         \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3] } }),          \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5] } }),          \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], ((const char *) (src))[7] } })
+#    endif
+__STRING_INLINE void *__mempcpy_small (void *, char, __STRING2_COPY_ARR2,
+                                      __STRING2_COPY_ARR3,
+                                      __STRING2_COPY_ARR4,
+                                      __STRING2_COPY_ARR5,
+                                      __STRING2_COPY_ARR6,
+                                      __STRING2_COPY_ARR7,
+                                      __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE void *
+__mempcpy_small (void *__dest, char __src1,
+                __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+                __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+                __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+                __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = __src1;
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+    }
+  return __extension__ ((void *) __u + __srclen);
+}
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* Return pointer to C in S.  */
+#ifndef _HAVE_STRING_ARCH_strchr
+extern void *__rawmemchr (const void *__s, int __c);
+# if __GNUC_PREREQ (3, 2)
+#  define strchr(s, c) \
+  (__extension__ (__builtin_constant_p (c) && !__builtin_constant_p (s)              \
+                 && (c) == '\0'                                              \
+                 ? (char *) __rawmemchr (s, c)                               \
+                 : __builtin_strchr (s, c)))
+# else
+#  define strchr(s, c) \
+  (__extension__ (__builtin_constant_p (c) && (c) == '\0'                    \
+                 ? (char *) __rawmemchr (s, c)                               \
+                 : strchr (s, c)))
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if (!defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)) \
+    || defined _FORCE_INLINES
+# if !defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)
+#  define strcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __strcpy_small (dest, __strcpy_args (src),             \
+                                      strlen (src) + 1)                      \
+                    : (char *) memcpy (dest, src, strlen (src) + 1))         \
+                 : strcpy (dest, src)))
+# endif
+
+# if _STRING_INLINE_unaligned
+#  ifndef _FORCE_INLINES
+#   define __strcpy_args(src) \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#  endif
+__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t,
+                                     __uint32_t, __uint32_t, size_t);
+__STRING_INLINE char *
+__strcpy_small (char *__dest,
+               __uint16_t __src0_2, __uint16_t __src4_2,
+               __uint32_t __src0_4, __uint32_t __src4_4,
+               size_t __srclen)
+{
+  union {
+    __uint32_t __ui;
+    __uint16_t __usi;
+    unsigned char __uc;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__uc = '\0';
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__uc = '\0';
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      break;
+    }
+  return __dest;
+}
+# else
+#  ifndef _FORCE_INLINES
+#   define __strcpy_args(src) \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], '\0' } }),                                      \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], '\0' } })
+#  endif
+__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2,
+                                     __STRING2_COPY_ARR3,
+                                     __STRING2_COPY_ARR4,
+                                     __STRING2_COPY_ARR5,
+                                     __STRING2_COPY_ARR6,
+                                     __STRING2_COPY_ARR7,
+                                     __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE char *
+__strcpy_small (char *__dest,
+               __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+               __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+               __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+               __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = '\0';
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+  }
+  return __dest;
+}
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning pointer to final NUL byte.  */
+#ifdef __USE_GNU
+# if !defined _HAVE_STRING_ARCH_stpcpy || defined _FORCE_INLINES
+#  ifndef _HAVE_STRING_ARCH_stpcpy
+#   if __GNUC_PREREQ (3, 4)
+#    define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
+#   elif __GNUC_PREREQ (3, 0)
+#    define __stpcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __builtin_strcpy (dest, src) + strlen (src)            \
+                    : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \
+                       - 1))                                                 \
+                 : __stpcpy (dest, src)))
+#   else
+#    define __stpcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __stpcpy_small (dest, __stpcpy_args (src),             \
+                                      strlen (src) + 1)                      \
+                    : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \
+                       - 1))                                                 \
+                 : __stpcpy (dest, src)))
+#   endif
+/* In glibc we use this function frequently but for namespace reasons
+   we have to use the name `__stpcpy'.  */
+#   define stpcpy(dest, src) __stpcpy (dest, src)
+#  endif
+
+#  if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+#   if _STRING_INLINE_unaligned
+#    ifndef _FORCE_INLINES
+#     define __stpcpy_args(src) \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#    endif
+__STRING_INLINE char *__stpcpy_small (char *, __uint16_t, __uint16_t,
+                                     __uint32_t, __uint32_t, size_t);
+__STRING_INLINE char *
+__stpcpy_small (char *__dest,
+               __uint16_t __src0_2, __uint16_t __src4_2,
+               __uint32_t __src0_4, __uint32_t __src4_4,
+               size_t __srclen)
+{
+  union {
+    unsigned int __ui;
+    unsigned short int __usi;
+    unsigned char __uc;
+    char __c;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__uc = '\0';
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 3);
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__uc = '\0';
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      __u = __extension__ ((void *) __u + 3);
+      break;
+    }
+  return &__u->__c;
+}
+#   else
+#    ifndef _FORCE_INLINES
+#     define __stpcpy_args(src) \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], '\0' } }),                                      \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], '\0' } })
+#    endif
+__STRING_INLINE char *__stpcpy_small (char *, __STRING2_COPY_ARR2,
+                                     __STRING2_COPY_ARR3,
+                                     __STRING2_COPY_ARR4,
+                                     __STRING2_COPY_ARR5,
+                                     __STRING2_COPY_ARR6,
+                                     __STRING2_COPY_ARR7,
+                                     __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE char *
+__stpcpy_small (char *__dest,
+               __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+               __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+               __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+               __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = '\0';
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+  }
+  return __dest + __srclen - 1;
+}
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST.  */
+#ifndef _HAVE_STRING_ARCH_strncpy
+# if __GNUC_PREREQ (3, 2)
+#  define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)
+# else
+#  define strncpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 ? (strlen (src) + 1 >= ((size_t) (n))                       \
+                    ? (char *) memcpy (dest, src, n)                         \
+                    : strncpy (dest, src, n))                                \
+                 : strncpy (dest, src, n)))
+# endif
+#endif
+
+
+/* Append no more than N characters from SRC onto DEST.  */
+#ifndef _HAVE_STRING_ARCH_strncat
+# ifdef _USE_STRING_ARCH_strchr
+#  define strncat(dest, src, n) \
+  (__extension__ ({ char *__dest = (dest);                                   \
+                   __builtin_constant_p (src) && __builtin_constant_p (n)    \
+                   ? (strlen (src) < ((size_t) (n))                          \
+                      ? strcat (__dest, src)                                 \
+                      : (*((char *) __mempcpy (strchr (__dest, '\0'),        \
+                                               src, n)) = '\0', __dest))     \
+                   : strncat (dest, src, n); }))
+# elif __GNUC_PREREQ (3, 2)
+#  define strncat(dest, src, n) __builtin_strncat (dest, src, n)
+# else
+#  define strncat(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 ? (strlen (src) < ((size_t) (n))                            \
+                    ? strcat (dest, src)                                     \
+                    : strncat (dest, src, n))                                \
+                 : strncat (dest, src, n)))
+# endif
+#endif
+
+
+/* Compare characters of S1 and S2.  */
+#ifndef _HAVE_STRING_ARCH_strcmp
+# if __GNUC_PREREQ (3, 2)
+#  define strcmp(s1, s2) \
+  __extension__                                                                      \
+  ({ size_t __s1_len, __s2_len;                                                      \
+     (__builtin_constant_p (s1) && __builtin_constant_p (s2)                 \
+      && (__s1_len = __builtin_strlen (s1), __s2_len = __builtin_strlen (s2), \
+         (!__string2_1bptr_p (s1) || __s1_len >= 4)                          \
+         && (!__string2_1bptr_p (s2) || __s2_len >= 4))                      \
+      ? __builtin_strcmp (s1, s2)                                            \
+      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)                 \
+        && (__s1_len = __builtin_strlen (s1), __s1_len < 4)                  \
+        ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           ? __builtin_strcmp (s1, s2)                                       \
+           : __strcmp_cg (s1, s2, __s1_len))                                 \
+        : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           && (__s2_len = __builtin_strlen (s2), __s2_len < 4)               \
+           ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)            \
+              ? __builtin_strcmp (s1, s2)                                    \
+              : __strcmp_gc (s1, s2, __s2_len))                              \
+           : __builtin_strcmp (s1, s2)))); })
+# else
+#  define strcmp(s1, s2) \
+  __extension__                                                                      \
+  ({ size_t __s1_len, __s2_len;                                                      \
+     (__builtin_constant_p (s1) && __builtin_constant_p (s2)                 \
+      && (__s1_len = strlen (s1), __s2_len = strlen (s2),                    \
+         (!__string2_1bptr_p (s1) || __s1_len >= 4)                          \
+         && (!__string2_1bptr_p (s2) || __s2_len >= 4))                      \
+      ? memcmp ((const char *) (s1), (const char *) (s2),                    \
+               (__s1_len < __s2_len ? __s1_len : __s2_len) + 1)              \
+      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)                 \
+        && (__s1_len = strlen (s1), __s1_len < 4)                            \
+        ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           ? __strcmp_cc (s1, s2, __s1_len)                                  \
+           : __strcmp_cg (s1, s2, __s1_len))                                 \
+        : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           && (__s2_len = strlen (s2), __s2_len < 4)                         \
+           ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)            \
+              ? __strcmp_cc (s1, s2, __s2_len)                               \
+              : __strcmp_gc (s1, s2, __s2_len))                              \
+           : strcmp (s1, s2)))); })
+# endif
+
+# define __strcmp_cc(s1, s2, l) \
+  (__extension__ ({ int __result =                                           \
+                     (((const unsigned char *) (const char *) (s1))[0]       \
+                      - ((const unsigned char *) (const char *)(s2))[0]);    \
+                   if (l > 0 && __result == 0)                               \
+                     {                                                       \
+                       __result = (((const unsigned char *)                  \
+                                    (const char *) (s1))[1]                  \
+                                   - ((const unsigned char *)                \
+                                      (const char *) (s2))[1]);              \
+                       if (l > 1 && __result == 0)                           \
+                         {                                                   \
+                           __result =                                        \
+                             (((const unsigned char *)                       \
+                               (const char *) (s1))[2]                       \
+                              - ((const unsigned char *)                     \
+                                 (const char *) (s2))[2]);                   \
+                           if (l > 2 && __result == 0)                       \
+                             __result =                                      \
+                               (((const unsigned char *)                     \
+                                 (const char *) (s1))[3]                     \
+                                - ((const unsigned char *)                   \
+                                   (const char *) (s2))[3]);                 \
+                         }                                                   \
+                     }                                                       \
+                   __result; }))
+
+# define __strcmp_cg(s1, s2, l1) \
+  (__extension__ ({ const unsigned char *__s2 =                                      \
+                     (const unsigned char *) (const char *) (s2);            \
+                   int __result =                                            \
+                     (((const unsigned char *) (const char *) (s1))[0]       \
+                      - __s2[0]);                                            \
+                   if (l1 > 0 && __result == 0)                              \
+                     {                                                       \
+                       __result = (((const unsigned char *)                  \
+                                    (const char *) (s1))[1] - __s2[1]);      \
+                       if (l1 > 1 && __result == 0)                          \
+                         {                                                   \
+                           __result = (((const unsigned char *)              \
+                                        (const char *) (s1))[2] - __s2[2]);  \
+                           if (l1 > 2 && __result == 0)                      \
+                             __result = (((const unsigned char *)            \
+                                         (const char *)  (s1))[3]            \
+                                         - __s2[3]);                         \
+                         }                                                   \
+                     }                                                       \
+                   __result; }))
+
+# define __strcmp_gc(s1, s2, l2) (- __strcmp_cg (s2, s1, l2))
+#endif
+
+
+/* Compare N characters of S1 and S2.  */
+#ifndef _HAVE_STRING_ARCH_strncmp
+# define strncmp(s1, s2, n)                                                  \
+  (__extension__ (__builtin_constant_p (n)                                   \
+                 && ((__builtin_constant_p (s1)                              \
+                      && strlen (s1) < ((size_t) (n)))                       \
+                     || (__builtin_constant_p (s2)                           \
+                         && strlen (s2) < ((size_t) (n))))                   \
+                 ? strcmp (s1, s2) : strncmp (s1, s2, n)))
+#endif
+
+
+/* Return the length of the initial segment of S which
+   consists entirely of characters not in REJECT.  */
+#if !defined _HAVE_STRING_ARCH_strcspn || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strcspn
+#  if __GNUC_PREREQ (3, 2)
+#   define strcspn(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strcspn (s, reject)                                      \
+        : ((__r0 = ((const char *) (reject))[0], __r0 == '\0')               \
+           ? strlen (s)                                                      \
+           : ((__r1 = ((const char *) (reject))[1], __r1 == '\0')            \
+              ? __strcspn_c1 (s, __r0)                                       \
+              : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')         \
+                 ? __strcspn_c2 (s, __r0, __r1)                              \
+                 : (((const char *) (reject))[3] == '\0'                     \
+                    ? __strcspn_c3 (s, __r0, __r1, __r2)                     \
+                    : __builtin_strcspn (s, reject))))))                     \
+      : __builtin_strcspn (s, reject)); })
+#  else
+#   define strcspn(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      ? ((__r0 = ((const char *) (reject))[0], __r0 == '\0')                 \
+        ? strlen (s)                                                         \
+        : ((__r1 = ((const char *) (reject))[1], __r1 == '\0')               \
+           ? __strcspn_c1 (s, __r0)                                          \
+           : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')            \
+              ? __strcspn_c2 (s, __r0, __r1)                                 \
+              : (((const char *) (reject))[3] == '\0'                        \
+                 ? __strcspn_c3 (s, __r0, __r1, __r2)                        \
+                 : strcspn (s, reject)))))                                   \
+      : strcspn (s, reject)); })
+#  endif
+# endif
+
+__STRING_INLINE size_t __strcspn_c1 (const char *__s, int __reject);
+__STRING_INLINE size_t
+__strcspn_c1 (const char *__s, int __reject)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strcspn_c2 (const char *__s, int __reject1,
+                                    int __reject2);
+__STRING_INLINE size_t
+__strcspn_c2 (const char *__s, int __reject1, int __reject2)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+        && __s[__result] != __reject2)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strcspn_c3 (const char *__s, int __reject1,
+                                    int __reject2, int __reject3);
+__STRING_INLINE size_t
+__strcspn_c3 (const char *__s, int __reject1, int __reject2,
+             int __reject3)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+        && __s[__result] != __reject2 && __s[__result] != __reject3)
+    ++__result;
+  return __result;
+}
+#endif
+
+
+/* Return the length of the initial segment of S which
+   consists entirely of characters in ACCEPT.  */
+#if !defined _HAVE_STRING_ARCH_strspn || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strspn
+#  if __GNUC_PREREQ (3, 2)
+#   define strspn(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strspn (s, accept)                                       \
+        : ((__a0 = ((const char *) (accept))[0], __a0 == '\0')               \
+           ? ((void) (s), (size_t) 0)                                        \
+           : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')            \
+              ? __strspn_c1 (s, __a0)                                        \
+              : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')         \
+                 ? __strspn_c2 (s, __a0, __a1)                               \
+                 : (((const char *) (accept))[3] == '\0'                     \
+                    ? __strspn_c3 (s, __a0, __a1, __a2)                      \
+                    : __builtin_strspn (s, accept))))))                      \
+      : __builtin_strspn (s, accept)); })
+#  else
+#   define strspn(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__a0 = ((const char *) (accept))[0], __a0 == '\0')                 \
+        ? ((void) (s), (size_t) 0)                                           \
+        : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')               \
+           ? __strspn_c1 (s, __a0)                                           \
+           : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')            \
+              ? __strspn_c2 (s, __a0, __a1)                                  \
+              : (((const char *) (accept))[3] == '\0'                        \
+                 ? __strspn_c3 (s, __a0, __a1, __a2)                         \
+                 : strspn (s, accept)))))                                    \
+      : strspn (s, accept)); })
+#  endif
+# endif
+
+__STRING_INLINE size_t __strspn_c1 (const char *__s, int __accept);
+__STRING_INLINE size_t
+__strspn_c1 (const char *__s, int __accept)
+{
+  size_t __result = 0;
+  /* Please note that __accept never can be '\0'.  */
+  while (__s[__result] == __accept)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strspn_c2 (const char *__s, int __accept1,
+                                   int __accept2);
+__STRING_INLINE size_t
+__strspn_c2 (const char *__s, int __accept1, int __accept2)
+{
+  size_t __result = 0;
+  /* Please note that __accept1 and __accept2 never can be '\0'.  */
+  while (__s[__result] == __accept1 || __s[__result] == __accept2)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strspn_c3 (const char *__s, int __accept1,
+                                   int __accept2, int __accept3);
+__STRING_INLINE size_t
+__strspn_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+{
+  size_t __result = 0;
+  /* Please note that __accept1 to __accept3 never can be '\0'.  */
+  while (__s[__result] == __accept1 || __s[__result] == __accept2
+        || __s[__result] == __accept3)
+    ++__result;
+  return __result;
+}
+#endif
+
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if !defined _HAVE_STRING_ARCH_strpbrk || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strpbrk
+#  if __GNUC_PREREQ (3, 2)
+#   define strpbrk(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strpbrk (s, accept)                                      \
+        : ((__a0 = ((const char  *) (accept))[0], __a0 == '\0')              \
+           ? ((void) (s), (char *) NULL)                                     \
+           : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')            \
+              ? __builtin_strchr (s, __a0)                                   \
+              : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')         \
+                 ? __strpbrk_c2 (s, __a0, __a1)                              \
+                 : (((const char *) (accept))[3] == '\0'                     \
+                    ? __strpbrk_c3 (s, __a0, __a1, __a2)                     \
+                    : __builtin_strpbrk (s, accept))))))                     \
+      : __builtin_strpbrk (s, accept)); })
+#  else
+#   define strpbrk(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__a0 = ((const char  *) (accept))[0], __a0 == '\0')                \
+        ? ((void) (s), (char *) NULL)                                        \
+        : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')               \
+           ? strchr (s, __a0)                                                \
+           : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')            \
+              ? __strpbrk_c2 (s, __a0, __a1)                                 \
+              : (((const char *) (accept))[3] == '\0'                        \
+                 ? __strpbrk_c3 (s, __a0, __a1, __a2)                        \
+                 : strpbrk (s, accept)))))                                   \
+      : strpbrk (s, accept)); })
+#  endif
+# endif
+
+__STRING_INLINE char *__strpbrk_c2 (const char *__s, int __accept1,
+                                   int __accept2);
+__STRING_INLINE char *
+__strpbrk_c2 (const char *__s, int __accept1, int __accept2)
+{
+  /* Please note that __accept1 and __accept2 never can be '\0'.  */
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
+    ++__s;
+  return *__s == '\0' ? NULL : (char *) (size_t) __s;
+}
+
+__STRING_INLINE char *__strpbrk_c3 (const char *__s, int __accept1,
+                                   int __accept2, int __accept3);
+__STRING_INLINE char *
+__strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+{
+  /* Please note that __accept1 to __accept3 never can be '\0'.  */
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
+        && *__s != __accept3)
+    ++__s;
+  return *__s == '\0' ? NULL : (char *) (size_t) __s;
+}
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  Newer gcc versions
+   do this itself.  */
+#if !defined _HAVE_STRING_ARCH_strstr && !__GNUC_PREREQ (2, 97)
+# define strstr(haystack, needle) \
+  (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
+                 ? (((const char *) (needle))[0] == '\0'                     \
+                    ? (char *) (size_t) (haystack)                           \
+                    : (((const char *) (needle))[1] == '\0'                  \
+                       ? strchr (haystack,                                   \
+                                 ((const char *) (needle))[0])               \
+                       : strstr (haystack, needle)))                         \
+                 : strstr (haystack, needle)))
+#endif
+
+
+#if !defined _HAVE_STRING_ARCH_strtok_r || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strtok_r
+#  define __strtok_r(s, sep, nextp) \
+  (__extension__ (__builtin_constant_p (sep) && __string2_1bptr_p (sep)              \
+                 && ((const char *) (sep))[0] != '\0'                        \
+                 && ((const char *) (sep))[1] == '\0'                        \
+                 ? __strtok_r_1c (s, ((const char *) (sep))[0], nextp)       \
+                 : __strtok_r (s, sep, nextp)))
+# endif
+
+__STRING_INLINE char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
+__STRING_INLINE char *
+__strtok_r_1c (char *__s, char __sep, char **__nextp)
+{
+  char *__result;
+  if (__s == NULL)
+    __s = *__nextp;
+  while (*__s == __sep)
+    ++__s;
+  __result = NULL;
+  if (*__s != '\0')
+    {
+      __result = __s++;
+      while (*__s != '\0')
+       if (*__s++ == __sep)
+         {
+           __s[-1] = '\0';
+           break;
+         }
+    }
+  *__nextp = __s;
+  return __result;
+}
+# ifdef __USE_POSIX
+#  define strtok_r(s, sep, nextp) __strtok_r (s, sep, nextp)
+# endif
+#endif
+
+
+#if !defined _HAVE_STRING_ARCH_strsep || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strsep
+
+extern char *__strsep_g (char **__stringp, const char *__delim);
+#  define __strsep(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      && (__r0 = ((const char *) (reject))[0],                               \
+         ((const char *) (reject))[0] != '\0')                               \
+      ? ((__r1 = ((const char *) (reject))[1],                               \
+        ((const char *) (reject))[1] == '\0')                                \
+        ? __strsep_1c (s, __r0)                                              \
+        : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')               \
+           ? __strsep_2c (s, __r0, __r1)                                     \
+           : (((const char *) (reject))[3] == '\0'                           \
+              ? __strsep_3c (s, __r0, __r1, __r2)                            \
+              : __strsep_g (s, reject))))                                    \
+      : __strsep_g (s, reject)); })
+# endif
+
+__STRING_INLINE char *__strsep_1c (char **__s, char __reject);
+__STRING_INLINE char *
+__strsep_1c (char **__s, char __reject)
+{
+  char *__retval = *__s;
+  if (__retval != NULL && (*__s = strchr (__retval, __reject)) != NULL)
+    *(*__s)++ = '\0';
+  return __retval;
+}
+
+__STRING_INLINE char *__strsep_2c (char **__s, char __reject1, char __reject2);
+__STRING_INLINE char *
+__strsep_2c (char **__s, char __reject1, char __reject2)
+{
+  char *__retval = *__s;
+  if (__retval != NULL)
+    {
+      char *__cp = __retval;
+      while (1)
+       {
+         if (*__cp == '\0')
+           {
+             __cp = NULL;
+         break;
+           }
+         if (*__cp == __reject1 || *__cp == __reject2)
+           {
+             *__cp++ = '\0';
+             break;
+           }
+         ++__cp;
+       }
+      *__s = __cp;
+    }
+  return __retval;
+}
+
+__STRING_INLINE char *__strsep_3c (char **__s, char __reject1, char __reject2,
+                                  char __reject3);
+__STRING_INLINE char *
+__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
+{
+  char *__retval = *__s;
+  if (__retval != NULL)
+    {
+      char *__cp = __retval;
+      while (1)
+       {
+         if (*__cp == '\0')
+           {
+             __cp = NULL;
+         break;
+           }
+         if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
+           {
+             *__cp++ = '\0';
+             break;
+           }
+         ++__cp;
+       }
+      *__s = __cp;
+    }
+  return __retval;
+}
+# ifdef __USE_MISC
+#  define strsep(s, reject) __strsep (s, reject)
+# endif
+#endif
+
+/* We need the memory allocation functions for inline strdup().
+   Referring to stdlib.h (even minimally) is not allowed
+   in any of the tight standards compliant modes.  */
+#ifdef __USE_MISC
+
+# if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup
+#  define __need_malloc_and_calloc
+#  include <stdlib.h>
+# endif
+
+# ifndef _HAVE_STRING_ARCH_strdup
+
+extern char *__strdup (const char *__string) __THROW __attribute_malloc__;
+#  define __strdup(s) \
+  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \
+                 ? (((const char *) (s))[0] == '\0'                          \
+                    ? (char *) calloc ((size_t) 1, (size_t) 1)               \
+                    : ({ size_t __len = strlen (s) + 1;                      \
+                         char *__retval = (char *) malloc (__len);           \
+                         if (__retval != NULL)                               \
+                           __retval = (char *) memcpy (__retval, s, __len);  \
+                         __retval; }))                                       \
+                 : __strdup (s)))
+
+#  if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+#   define strdup(s) __strdup (s)
+#  endif
+# endif
+
+# ifndef _HAVE_STRING_ARCH_strndup
+
+extern char *__strndup (const char *__string, size_t __n)
+     __THROW __attribute_malloc__;
+#  define __strndup(s, n) \
+  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \
+                 ? (((const char *) (s))[0] == '\0'                          \
+                    ? (char *) calloc ((size_t) 1, (size_t) 1)               \
+                    : ({ size_t __len = strlen (s) + 1;                      \
+                         size_t __n = (n);                                   \
+                         char *__retval;                                     \
+                         if (__n < __len)                                    \
+                           __len = __n + 1;                                  \
+                         __retval = (char *) malloc (__len);                 \
+                         if (__retval != NULL)                               \
+                           {                                                 \
+                             __retval[__len - 1] = '\0';                     \
+                             __retval = (char *) memcpy (__retval, s,        \
+                                                         __len - 1);         \
+                           }                                                 \
+                         __retval; }))                                       \
+                 : __strndup (s, n)))
+
+#  ifdef __USE_XOPEN2K8
+#   define strndup(s, n) __strndup (s, n)
+#  endif
+# endif
+
+#endif /* Use misc. or use GNU.  */
+
+#ifndef _FORCE_INLINES
+# undef __STRING_INLINE
+#endif
+
+#endif /* No string inlines.  */
diff --git a/lib/libdss-include/bits/string3.h b/lib/libdss-include/bits/string3.h
new file mode 100644 (file)
index 0000000..dd8db68
--- /dev/null
@@ -0,0 +1,157 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string3.h> directly; include <string.h> instead."
+#endif
+
+#if !__GNUC_PREREQ (5,0)
+__warndecl (__warn_memset_zero_len,
+           "memset used with constant zero length parameter; this could be due to transposed parameters");
+#endif
+
+#ifndef __cplusplus
+/* XXX This is temporarily.  We should not redefine any of the symbols
+   and instead integrate the error checking into the original
+   definitions.  */
+# undef memcpy
+# undef memmove
+# undef memset
+# undef strcat
+# undef strcpy
+# undef strncat
+# undef strncpy
+# ifdef __USE_GNU
+#  undef mempcpy
+#  undef stpcpy
+# endif
+# ifdef __USE_MISC
+#  undef bcopy
+#  undef bzero
+# endif
+#endif
+
+
+__fortify_function void *
+__NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
+              size_t __len))
+{
+  return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+__fortify_function void *
+__NTH (memmove (void *__dest, const void *__src, size_t __len))
+{
+  return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+#ifdef __USE_GNU
+__fortify_function void *
+__NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
+               size_t __len))
+{
+  return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
+}
+#endif
+
+
+/* The first two tests here help to catch a somewhat common problem
+   where the second and third parameter are transposed.  This is
+   especially problematic if the intended fill value is zero.  In this
+   case no work is done at all.  We detect these problems by referring
+   non-existing functions.  */
+__fortify_function void *
+__NTH (memset (void *__dest, int __ch, size_t __len))
+{
+  /* GCC-5.0 and newer implements these checks in the compiler, so we don't
+     need them here.  */
+#if !__GNUC_PREREQ (5,0)
+  if (__builtin_constant_p (__len) && __len == 0
+      && (!__builtin_constant_p (__ch) || __ch != 0))
+    {
+      __warn_memset_zero_len ();
+      return __dest;
+    }
+#endif
+  return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
+}
+
+#ifdef __USE_MISC
+__fortify_function void
+__NTH (bcopy (const void *__src, void *__dest, size_t __len))
+{
+  (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+__fortify_function void
+__NTH (bzero (void *__dest, size_t __len))
+{
+  (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
+}
+#endif
+
+__fortify_function char *
+__NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
+}
+
+#ifdef __USE_GNU
+__fortify_function char *
+__NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
+}
+#endif
+
+
+__fortify_function char *
+__NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
+               size_t __len))
+{
+  return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
+}
+
+// XXX We have no corresponding builtin yet.
+extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
+                           size_t __destlen) __THROW;
+extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,
+                                              size_t __n), stpncpy);
+
+__fortify_function char *
+__NTH (stpncpy (char *__dest, const char *__src, size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __n > __bos (__dest)))
+    return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
+  return __stpncpy_alias (__dest, __src, __n);
+}
+
+
+__fortify_function char *
+__NTH (strcat (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___strcat_chk (__dest, __src, __bos (__dest));
+}
+
+
+__fortify_function char *
+__NTH (strncat (char *__restrict __dest, const char *__restrict __src,
+               size_t __len))
+{
+  return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
+}
diff --git a/lib/libdss-include/bits/stropts.h b/lib/libdss-include/bits/stropts.h
new file mode 100644 (file)
index 0000000..d419e52
--- /dev/null
@@ -0,0 +1,230 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+# error "Never include <bits/stropts.h> directly; use <stropts.h> instead."
+#endif
+
+#ifndef _BITS_STROPTS_H
+#define _BITS_STROPTS_H        1
+
+#include <bits/types.h>
+
+/* Macros used as `request' argument to `ioctl'.  */
+#define __SID          ('S' << 8)
+
+#define I_NREAD            (__SID | 1) /* Counts the number of data bytes in the data
+                                  block in the first message.  */
+#define I_PUSH     (__SID | 2) /* Push STREAMS module onto top of the current
+                                  STREAM, just below the STREAM head.  */
+#define I_POP      (__SID | 3) /* Remove STREAMS module from just below the
+                                  STREAM head.  */
+#define I_LOOK     (__SID | 4) /* Retrieve the name of the module just below
+                                  the STREAM head and place it in a character
+                                  string.  */
+#define I_FLUSH            (__SID | 5) /* Flush all input and/or output.  */
+#define I_SRDOPT    (__SID | 6)        /* Sets the read mode.  */
+#define I_GRDOPT    (__SID | 7)        /* Returns the current read mode setting.  */
+#define I_STR      (__SID | 8) /* Construct an internal STREAMS `ioctl'
+                                  message and send that message downstream. */
+#define I_SETSIG    (__SID | 9)        /* Inform the STREAM head that the process
+                                  wants the SIGPOLL signal issued.  */
+#define I_GETSIG    (__SID |10) /* Return the events for which the calling
+                                  process is currently registered to be sent
+                                  a SIGPOLL signal.  */
+#define I_FIND     (__SID |11) /* Compares the names of all modules currently
+                                  present in the STREAM to the name pointed to
+                                  by `arg'.  */
+#define I_LINK     (__SID |12) /* Connect two STREAMs.  */
+#define I_UNLINK    (__SID |13) /* Disconnects the two STREAMs.  */
+#define I_PEEK     (__SID |15) /* Allows a process to retrieve the information
+                                  in the first message on the STREAM head read
+                                  queue without taking the message off the
+                                  queue.  */
+#define I_FDINSERT  (__SID |16) /* Create a message from the specified
+                                  buffer(s), adds information about another
+                                  STREAM, and send the message downstream.  */
+#define I_SENDFD    (__SID |17) /* Requests the STREAM associated with `fildes'
+                                  to send a message, containing a file
+                                  pointer, to the STREAM head at the other end
+                                  of a STREAMS pipe.  */
+#define I_RECVFD    (__SID |14) /* Non-EFT definition.  */
+#define I_SWROPT    (__SID |19) /* Set the write mode.  */
+#define I_GWROPT    (__SID |20) /* Return the current write mode setting.  */
+#define I_LIST     (__SID |21) /* List all the module names on the STREAM, up
+                                  to and including the topmost driver name. */
+#define I_PLINK            (__SID |22) /* Connect two STREAMs with a persistent
+                                  link.  */
+#define I_PUNLINK   (__SID |23) /* Disconnect the two STREAMs that were
+                                  connected with a persistent link.  */
+#define I_FLUSHBAND (__SID |28) /* Flush only band specified.  */
+#define I_CKBAND    (__SID |29) /* Check if the message of a given priority
+                                  band exists on the STREAM head read
+                                  queue.  */
+#define I_GETBAND   (__SID |30) /* Return the priority band of the first
+                                  message on the STREAM head read queue.  */
+#define I_ATMARK    (__SID |31) /* See if the current message on the STREAM
+                                  head read queue is "marked" by some module
+                                  downstream.  */
+#define I_SETCLTIME (__SID |32) /* Set the time the STREAM head will delay when
+                                  a STREAM is closing and there is data on
+                                  the write queues.  */
+#define I_GETCLTIME (__SID |33) /* Get current value for closing timeout.  */
+#define I_CANPUT    (__SID |34) /* Check if a certain band is writable.  */
+
+
+/* Used in `I_LOOK' request.  */
+#define FMNAMESZ       8       /* compatibility w/UnixWare/Solaris.  */
+
+/* Flush options.  */
+#define FLUSHR         0x01    /* Flush read queues.  */
+#define FLUSHW         0x02    /* Flush write queues.  */
+#define FLUSHRW                0x03    /* Flush read and write queues.  */
+#ifdef __USE_GNU
+# define FLUSHBAND     0x04    /* Flush only specified band.  */
+#endif
+
+/* Possible arguments for `I_SETSIG'.  */
+#define S_INPUT                0x0001  /* A message, other than a high-priority
+                                  message, has arrived.  */
+#define S_HIPRI                0x0002  /* A high-priority message is present.  */
+#define S_OUTPUT       0x0004  /* The write queue for normal data is no longer
+                                  full.  */
+#define S_MSG          0x0008  /* A STREAMS signal message that contains the
+                                  SIGPOLL signal reaches the front of the
+                                  STREAM head read queue.  */
+#define S_ERROR                0x0010  /* Notification of an error condition.  */
+#define S_HANGUP       0x0020  /* Notification of a hangup.  */
+#define S_RDNORM       0x0040  /* A normal message has arrived.  */
+#define S_WRNORM       S_OUTPUT
+#define S_RDBAND       0x0080  /* A message with a non-zero priority has
+                                  arrived.  */
+#define S_WRBAND       0x0100  /* The write queue for a non-zero priority
+                                  band is no longer full.  */
+#define S_BANDURG      0x0200  /* When used in conjunction with S_RDBAND,
+                                  SIGURG is generated instead of SIGPOLL when
+                                  a priority message reaches the front of the
+                                  STREAM head read queue.  */
+
+/* Option for `I_PEEK'.  */
+#define RS_HIPRI       0x01    /* Only look for high-priority messages.  */
+
+/* Options for `I_SRDOPT'.  */
+#define RNORM          0x0000  /* Byte-STREAM mode, the default.  */
+#define RMSGD          0x0001  /* Message-discard mode.   */
+#define RMSGN          0x0002  /* Message-nondiscard mode.   */
+#define RPROTDAT       0x0004  /* Deliver the control part of a message as
+                                  data.  */
+#define RPROTDIS       0x0008  /* Discard the control part of a message,
+                                  delivering any data part.  */
+#define RPROTNORM      0x0010  /* Fail `read' with EBADMSG if a message
+                                  containing a control part is at the front
+                                  of the STREAM head read queue.  */
+#ifdef __USE_GNU
+# define RPROTMASK     0x001C  /* The RPROT bits */
+#endif
+
+/* Possible mode for `I_SWROPT'.  */
+#define SNDZERO                0x001   /* Send a zero-length message downstream when a
+                                  `write' of 0 bytes occurs.  */
+#ifdef __USE_GNU
+# define SNDPIPE       0x002   /* Send SIGPIPE on write and putmsg if
+                                  sd_werror is set.  */
+#endif
+
+/* Arguments for `I_ATMARK'.  */
+#define ANYMARK                0x01    /* Check if the message is marked.  */
+#define LASTMARK       0x02    /* Check if the message is the last one marked
+                                  on the queue.  */
+
+/* Argument for `I_UNLINK'.  */
+#ifdef __USE_GNU
+# define MUXID_ALL     (-1)    /* Unlink all STREAMs linked to the STREAM
+                                  associated with `fildes'.  */
+#endif
+
+
+/* Macros for `getmsg', `getpmsg', `putmsg' and `putpmsg'.  */
+#define MSG_HIPRI      0x01    /* Send/receive high priority message.  */
+#define MSG_ANY                0x02    /* Receive any message.  */
+#define MSG_BAND       0x04    /* Receive message from specified band.  */
+
+/* Values returned by getmsg and getpmsg */
+#define MORECTL                1       /* More control information is left in
+                                  message.  */
+#define MOREDATA       2       /* More data is left in message.  */
+
+
+/* Structure used for the I_FLUSHBAND ioctl on streams.  */
+struct bandinfo
+  {
+    unsigned char bi_pri;
+    int bi_flag;
+  };
+
+struct strbuf
+  {
+    int maxlen;                /* Maximum buffer length.  */
+    int len;           /* Length of data.  */
+    char *buf;         /* Pointer to buffer.  */
+  };
+
+struct strpeek
+  {
+    struct strbuf ctlbuf;
+    struct strbuf databuf;
+    t_uscalar_t flags;                 /* UnixWare/Solaris compatibility.  */
+  };
+
+struct strfdinsert
+  {
+    struct strbuf ctlbuf;
+    struct strbuf databuf;
+    t_uscalar_t flags;                 /* UnixWare/Solaris compatibility.  */
+    int fildes;
+    int offset;
+  };
+
+struct strioctl
+  {
+    int ic_cmd;
+    int ic_timout;
+    int ic_len;
+    char *ic_dp;
+  };
+
+struct strrecvfd
+  {
+    int fd;
+    uid_t uid;
+    gid_t gid;
+    char __fill[8];                    /* UnixWare/Solaris compatibility */
+  };
+
+
+struct str_mlist
+  {
+    char l_name[FMNAMESZ + 1];
+  };
+
+struct str_list
+  {
+    int sl_nmods;
+    struct str_mlist *sl_modlist;
+  };
+
+#endif /* bits/stropts.h */
diff --git a/lib/libdss-include/bits/sys_errlist.h b/lib/libdss-include/bits/sys_errlist.h
new file mode 100644 (file)
index 0000000..c6385f1
--- /dev/null
@@ -0,0 +1,32 @@
+/* Declare sys_errlist and sys_nerr, or don't.  Compatibility (do) version.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/sys_errlist.h> directly; use <stdio.h> instead."
+#endif
+
+/* sys_errlist and sys_nerr are deprecated.  Use strerror instead.  */
+
+#ifdef  __USE_MISC
+extern int sys_nerr;
+extern const char *const sys_errlist[];
+#endif
+#ifdef  __USE_GNU
+extern int _sys_nerr;
+extern const char *const _sys_errlist[];
+#endif
diff --git a/lib/libdss-include/bits/syscall.h b/lib/libdss-include/bits/syscall.h
new file mode 100644 (file)
index 0000000..ea3d774
--- /dev/null
@@ -0,0 +1,554 @@
+/* Generated at libc build time from kernel syscall list.  */
+
+#ifndef _SYSCALL_H
+# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+#define SYS_accept __NR_accept
+#define SYS_accept4 __NR_accept4
+#define SYS_acct __NR_acct
+#define SYS_add_key __NR_add_key
+#define SYS_adjtimex __NR_adjtimex
+#define SYS_arch_specific_syscall __NR_arch_specific_syscall
+#define SYS_bind __NR_bind
+#define SYS_bpf __NR_bpf
+#define SYS_brk __NR_brk
+#define SYS_capget __NR_capget
+#define SYS_capset __NR_capset
+#define SYS_chdir __NR_chdir
+#define SYS_chroot __NR_chroot
+#define SYS_clock_adjtime __NR_clock_adjtime
+#define SYS_clock_getres __NR_clock_getres
+#define SYS_clock_gettime __NR_clock_gettime
+#define SYS_clock_nanosleep __NR_clock_nanosleep
+#define SYS_clock_settime __NR_clock_settime
+#define SYS_clone __NR_clone
+#define SYS_close __NR_close
+#define SYS_connect __NR_connect
+#define SYS_delete_module __NR_delete_module
+#define SYS_dup __NR_dup
+#define SYS_dup3 __NR_dup3
+#define SYS_epoll_create1 __NR_epoll_create1
+#define SYS_epoll_ctl __NR_epoll_ctl
+#define SYS_epoll_pwait __NR_epoll_pwait
+#define SYS_eventfd2 __NR_eventfd2
+#define SYS_execve __NR_execve
+#define SYS_execveat __NR_execveat
+#define SYS_exit __NR_exit
+#define SYS_exit_group __NR_exit_group
+#define SYS_faccessat __NR_faccessat
+#define SYS_fadvise64 __NR_fadvise64
+#define SYS_fallocate __NR_fallocate
+#define SYS_fanotify_init __NR_fanotify_init
+#define SYS_fanotify_mark __NR_fanotify_mark
+#define SYS_fchdir __NR_fchdir
+#define SYS_fchmod __NR_fchmod
+#define SYS_fchmodat __NR_fchmodat
+#define SYS_fchown __NR_fchown
+#define SYS_fchownat __NR_fchownat
+#define SYS_fcntl __NR_fcntl
+#define SYS_fdatasync __NR_fdatasync
+#define SYS_fgetxattr __NR_fgetxattr
+#define SYS_finit_module __NR_finit_module
+#define SYS_flistxattr __NR_flistxattr
+#define SYS_flock __NR_flock
+#define SYS_fremovexattr __NR_fremovexattr
+#define SYS_fsetxattr __NR_fsetxattr
+#define SYS_fstat __NR_fstat
+#define SYS_fstatfs __NR_fstatfs
+#define SYS_fsync __NR_fsync
+#define SYS_ftruncate __NR_ftruncate
+#define SYS_futex __NR_futex
+#define SYS_get_mempolicy __NR_get_mempolicy
+#define SYS_get_robust_list __NR_get_robust_list
+#define SYS_getcpu __NR_getcpu
+#define SYS_getcwd __NR_getcwd
+#define SYS_getdents64 __NR_getdents64
+#define SYS_getegid __NR_getegid
+#define SYS_geteuid __NR_geteuid
+#define SYS_getgid __NR_getgid
+#define SYS_getgroups __NR_getgroups
+#define SYS_getitimer __NR_getitimer
+#define SYS_getpeername __NR_getpeername
+#define SYS_getpgid __NR_getpgid
+#define SYS_getpid __NR_getpid
+#define SYS_getppid __NR_getppid
+#define SYS_getpriority __NR_getpriority
+#define SYS_getrandom __NR_getrandom
+#define SYS_getresgid __NR_getresgid
+#define SYS_getresuid __NR_getresuid
+#define SYS_getrlimit __NR_getrlimit
+#define SYS_getrusage __NR_getrusage
+#define SYS_getsid __NR_getsid
+#define SYS_getsockname __NR_getsockname
+#define SYS_getsockopt __NR_getsockopt
+#define SYS_gettid __NR_gettid
+#define SYS_gettimeofday __NR_gettimeofday
+#define SYS_getuid __NR_getuid
+#define SYS_getxattr __NR_getxattr
+#define SYS_init_module __NR_init_module
+#define SYS_inotify_add_watch __NR_inotify_add_watch
+#define SYS_inotify_init1 __NR_inotify_init1
+#define SYS_inotify_rm_watch __NR_inotify_rm_watch
+#define SYS_io_cancel __NR_io_cancel
+#define SYS_io_destroy __NR_io_destroy
+#define SYS_io_getevents __NR_io_getevents
+#define SYS_io_setup __NR_io_setup
+#define SYS_io_submit __NR_io_submit
+#define SYS_ioctl __NR_ioctl
+#define SYS_ioprio_get __NR_ioprio_get
+#define SYS_ioprio_set __NR_ioprio_set
+#define SYS_kcmp __NR_kcmp
+#define SYS_kexec_load __NR_kexec_load
+#define SYS_keyctl __NR_keyctl
+#define SYS_kill __NR_kill
+#define SYS_lgetxattr __NR_lgetxattr
+#define SYS_linkat __NR_linkat
+#define SYS_listen __NR_listen
+#define SYS_listxattr __NR_listxattr
+#define SYS_llistxattr __NR_llistxattr
+#define SYS_lookup_dcookie __NR_lookup_dcookie
+#define SYS_lremovexattr __NR_lremovexattr
+#define SYS_lseek __NR_lseek
+#define SYS_lsetxattr __NR_lsetxattr
+#define SYS_madvise __NR_madvise
+#define SYS_mbind __NR_mbind
+#define SYS_membarrier __NR_membarrier
+#define SYS_memfd_create __NR_memfd_create
+#define SYS_migrate_pages __NR_migrate_pages
+#define SYS_mincore __NR_mincore
+#define SYS_mkdirat __NR_mkdirat
+#define SYS_mknodat __NR_mknodat
+#define SYS_mlock __NR_mlock
+#define SYS_mlock2 __NR_mlock2
+#define SYS_mlockall __NR_mlockall
+#define SYS_mmap __NR_mmap
+#define SYS_mount __NR_mount
+#define SYS_move_pages __NR_move_pages
+#define SYS_mprotect __NR_mprotect
+#define SYS_mq_getsetattr __NR_mq_getsetattr
+#define SYS_mq_notify __NR_mq_notify
+#define SYS_mq_open __NR_mq_open
+#define SYS_mq_timedreceive __NR_mq_timedreceive
+#define SYS_mq_timedsend __NR_mq_timedsend
+#define SYS_mq_unlink __NR_mq_unlink
+#define SYS_mremap __NR_mremap
+#define SYS_msgctl __NR_msgctl
+#define SYS_msgget __NR_msgget
+#define SYS_msgrcv __NR_msgrcv
+#define SYS_msgsnd __NR_msgsnd
+#define SYS_msync __NR_msync
+#define SYS_munlock __NR_munlock
+#define SYS_munlockall __NR_munlockall
+#define SYS_munmap __NR_munmap
+#define SYS_name_to_handle_at __NR_name_to_handle_at
+#define SYS_nanosleep __NR_nanosleep
+#define SYS_newfstatat __NR_newfstatat
+#define SYS_nfsservctl __NR_nfsservctl
+#define SYS_open_by_handle_at __NR_open_by_handle_at
+#define SYS_openat __NR_openat
+#define SYS_perf_event_open __NR_perf_event_open
+#define SYS_personality __NR_personality
+#define SYS_pipe2 __NR_pipe2
+#define SYS_pivot_root __NR_pivot_root
+#define SYS_ppoll __NR_ppoll
+#define SYS_prctl __NR_prctl
+#define SYS_pread64 __NR_pread64
+#define SYS_preadv __NR_preadv
+#define SYS_prlimit64 __NR_prlimit64
+#define SYS_process_vm_readv __NR_process_vm_readv
+#define SYS_process_vm_writev __NR_process_vm_writev
+#define SYS_pselect6 __NR_pselect6
+#define SYS_ptrace __NR_ptrace
+#define SYS_pwrite64 __NR_pwrite64
+#define SYS_pwritev __NR_pwritev
+#define SYS_quotactl __NR_quotactl
+#define SYS_read __NR_read
+#define SYS_readahead __NR_readahead
+#define SYS_readlinkat __NR_readlinkat
+#define SYS_readv __NR_readv
+#define SYS_reboot __NR_reboot
+#define SYS_recvfrom __NR_recvfrom
+#define SYS_recvmmsg __NR_recvmmsg
+#define SYS_recvmsg __NR_recvmsg
+#define SYS_remap_file_pages __NR_remap_file_pages
+#define SYS_removexattr __NR_removexattr
+#define SYS_renameat __NR_renameat
+#define SYS_renameat2 __NR_renameat2
+#define SYS_request_key __NR_request_key
+#define SYS_restart_syscall __NR_restart_syscall
+#define SYS_rt_sigaction __NR_rt_sigaction
+#define SYS_rt_sigpending __NR_rt_sigpending
+#define SYS_rt_sigprocmask __NR_rt_sigprocmask
+#define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
+#define SYS_rt_sigreturn __NR_rt_sigreturn
+#define SYS_rt_sigsuspend __NR_rt_sigsuspend
+#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
+#define SYS_rt_tgsigqueueinfo __NR_rt_tgsigqueueinfo
+#define SYS_sched_get_priority_max __NR_sched_get_priority_max
+#define SYS_sched_get_priority_min __NR_sched_get_priority_min
+#define SYS_sched_getaffinity __NR_sched_getaffinity
+#define SYS_sched_getattr __NR_sched_getattr
+#define SYS_sched_getparam __NR_sched_getparam
+#define SYS_sched_getscheduler __NR_sched_getscheduler
+#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
+#define SYS_sched_setaffinity __NR_sched_setaffinity
+#define SYS_sched_setattr __NR_sched_setattr
+#define SYS_sched_setparam __NR_sched_setparam
+#define SYS_sched_setscheduler __NR_sched_setscheduler
+#define SYS_sched_yield __NR_sched_yield
+#define SYS_seccomp __NR_seccomp
+#define SYS_semctl __NR_semctl
+#define SYS_semget __NR_semget
+#define SYS_semop __NR_semop
+#define SYS_semtimedop __NR_semtimedop
+#define SYS_sendfile __NR_sendfile
+#define SYS_sendmmsg __NR_sendmmsg
+#define SYS_sendmsg __NR_sendmsg
+#define SYS_sendto __NR_sendto
+#define SYS_set_mempolicy __NR_set_mempolicy
+#define SYS_set_robust_list __NR_set_robust_list
+#define SYS_set_tid_address __NR_set_tid_address
+#define SYS_setdomainname __NR_setdomainname
+#define SYS_setfsgid __NR_setfsgid
+#define SYS_setfsuid __NR_setfsuid
+#define SYS_setgid __NR_setgid
+#define SYS_setgroups __NR_setgroups
+#define SYS_sethostname __NR_sethostname
+#define SYS_setitimer __NR_setitimer
+#define SYS_setns __NR_setns
+#define SYS_setpgid __NR_setpgid
+#define SYS_setpriority __NR_setpriority
+#define SYS_setregid __NR_setregid
+#define SYS_setresgid __NR_setresgid
+#define SYS_setresuid __NR_setresuid
+#define SYS_setreuid __NR_setreuid
+#define SYS_setrlimit __NR_setrlimit
+#define SYS_setsid __NR_setsid
+#define SYS_setsockopt __NR_setsockopt
+#define SYS_settimeofday __NR_settimeofday
+#define SYS_setuid __NR_setuid
+#define SYS_setxattr __NR_setxattr
+#define SYS_shmat __NR_shmat
+#define SYS_shmctl __NR_shmctl
+#define SYS_shmdt __NR_shmdt
+#define SYS_shmget __NR_shmget
+#define SYS_shutdown __NR_shutdown
+#define SYS_sigaltstack __NR_sigaltstack
+#define SYS_signalfd4 __NR_signalfd4
+#define SYS_socket __NR_socket
+#define SYS_socketpair __NR_socketpair
+#define SYS_splice __NR_splice
+#define SYS_statfs __NR_statfs
+#define SYS_swapoff __NR_swapoff
+#define SYS_swapon __NR_swapon
+#define SYS_symlinkat __NR_symlinkat
+#define SYS_sync __NR_sync
+#define SYS_sync_file_range __NR_sync_file_range
+#define SYS_syncfs __NR_syncfs
+#define SYS_syscalls __NR_syscalls
+#define SYS_sysinfo __NR_sysinfo
+#define SYS_syslog __NR_syslog
+#define SYS_tee __NR_tee
+#define SYS_tgkill __NR_tgkill
+#define SYS_timer_create __NR_timer_create
+#define SYS_timer_delete __NR_timer_delete
+#define SYS_timer_getoverrun __NR_timer_getoverrun
+#define SYS_timer_gettime __NR_timer_gettime
+#define SYS_timer_settime __NR_timer_settime
+#define SYS_timerfd_create __NR_timerfd_create
+#define SYS_timerfd_gettime __NR_timerfd_gettime
+#define SYS_timerfd_settime __NR_timerfd_settime
+#define SYS_times __NR_times
+#define SYS_tkill __NR_tkill
+#define SYS_truncate __NR_truncate
+#define SYS_umask __NR_umask
+#define SYS_umount2 __NR_umount2
+#define SYS_uname __NR_uname
+#define SYS_unlinkat __NR_unlinkat
+#define SYS_unshare __NR_unshare
+#define SYS_userfaultfd __NR_userfaultfd
+#define SYS_utimensat __NR_utimensat
+#define SYS_vhangup __NR_vhangup
+#define SYS_vmsplice __NR_vmsplice
+#define SYS_wait4 __NR_wait4
+#define SYS_waitid __NR_waitid
+#define SYS_write __NR_write
+#define SYS_writev __NR_writev
+#endif
+#if defined __AARCH64EB__
+#define SYS_accept __NR_accept
+#define SYS_accept4 __NR_accept4
+#define SYS_acct __NR_acct
+#define SYS_add_key __NR_add_key
+#define SYS_adjtimex __NR_adjtimex
+#define SYS_arch_specific_syscall __NR_arch_specific_syscall
+#define SYS_bind __NR_bind
+#define SYS_bpf __NR_bpf
+#define SYS_brk __NR_brk
+#define SYS_capget __NR_capget
+#define SYS_capset __NR_capset
+#define SYS_chdir __NR_chdir
+#define SYS_chroot __NR_chroot
+#define SYS_clock_adjtime __NR_clock_adjtime
+#define SYS_clock_getres __NR_clock_getres
+#define SYS_clock_gettime __NR_clock_gettime
+#define SYS_clock_nanosleep __NR_clock_nanosleep
+#define SYS_clock_settime __NR_clock_settime
+#define SYS_clone __NR_clone
+#define SYS_close __NR_close
+#define SYS_connect __NR_connect
+#define SYS_delete_module __NR_delete_module
+#define SYS_dup __NR_dup
+#define SYS_dup3 __NR_dup3
+#define SYS_epoll_create1 __NR_epoll_create1
+#define SYS_epoll_ctl __NR_epoll_ctl
+#define SYS_epoll_pwait __NR_epoll_pwait
+#define SYS_eventfd2 __NR_eventfd2
+#define SYS_execve __NR_execve
+#define SYS_execveat __NR_execveat
+#define SYS_exit __NR_exit
+#define SYS_exit_group __NR_exit_group
+#define SYS_faccessat __NR_faccessat
+#define SYS_fadvise64 __NR_fadvise64
+#define SYS_fallocate __NR_fallocate
+#define SYS_fanotify_init __NR_fanotify_init
+#define SYS_fanotify_mark __NR_fanotify_mark
+#define SYS_fchdir __NR_fchdir
+#define SYS_fchmod __NR_fchmod
+#define SYS_fchmodat __NR_fchmodat
+#define SYS_fchown __NR_fchown
+#define SYS_fchownat __NR_fchownat
+#define SYS_fcntl __NR_fcntl
+#define SYS_fdatasync __NR_fdatasync
+#define SYS_fgetxattr __NR_fgetxattr
+#define SYS_finit_module __NR_finit_module
+#define SYS_flistxattr __NR_flistxattr
+#define SYS_flock __NR_flock
+#define SYS_fremovexattr __NR_fremovexattr
+#define SYS_fsetxattr __NR_fsetxattr
+#define SYS_fstat __NR_fstat
+#define SYS_fstatfs __NR_fstatfs
+#define SYS_fsync __NR_fsync
+#define SYS_ftruncate __NR_ftruncate
+#define SYS_futex __NR_futex
+#define SYS_get_mempolicy __NR_get_mempolicy
+#define SYS_get_robust_list __NR_get_robust_list
+#define SYS_getcpu __NR_getcpu
+#define SYS_getcwd __NR_getcwd
+#define SYS_getdents64 __NR_getdents64
+#define SYS_getegid __NR_getegid
+#define SYS_geteuid __NR_geteuid
+#define SYS_getgid __NR_getgid
+#define SYS_getgroups __NR_getgroups
+#define SYS_getitimer __NR_getitimer
+#define SYS_getpeername __NR_getpeername
+#define SYS_getpgid __NR_getpgid
+#define SYS_getpid __NR_getpid
+#define SYS_getppid __NR_getppid
+#define SYS_getpriority __NR_getpriority
+#define SYS_getrandom __NR_getrandom
+#define SYS_getresgid __NR_getresgid
+#define SYS_getresuid __NR_getresuid
+#define SYS_getrlimit __NR_getrlimit
+#define SYS_getrusage __NR_getrusage
+#define SYS_getsid __NR_getsid
+#define SYS_getsockname __NR_getsockname
+#define SYS_getsockopt __NR_getsockopt
+#define SYS_gettid __NR_gettid
+#define SYS_gettimeofday __NR_gettimeofday
+#define SYS_getuid __NR_getuid
+#define SYS_getxattr __NR_getxattr
+#define SYS_init_module __NR_init_module
+#define SYS_inotify_add_watch __NR_inotify_add_watch
+#define SYS_inotify_init1 __NR_inotify_init1
+#define SYS_inotify_rm_watch __NR_inotify_rm_watch
+#define SYS_io_cancel __NR_io_cancel
+#define SYS_io_destroy __NR_io_destroy
+#define SYS_io_getevents __NR_io_getevents
+#define SYS_io_setup __NR_io_setup
+#define SYS_io_submit __NR_io_submit
+#define SYS_ioctl __NR_ioctl
+#define SYS_ioprio_get __NR_ioprio_get
+#define SYS_ioprio_set __NR_ioprio_set
+#define SYS_kcmp __NR_kcmp
+#define SYS_kexec_load __NR_kexec_load
+#define SYS_keyctl __NR_keyctl
+#define SYS_kill __NR_kill
+#define SYS_lgetxattr __NR_lgetxattr
+#define SYS_linkat __NR_linkat
+#define SYS_listen __NR_listen
+#define SYS_listxattr __NR_listxattr
+#define SYS_llistxattr __NR_llistxattr
+#define SYS_lookup_dcookie __NR_lookup_dcookie
+#define SYS_lremovexattr __NR_lremovexattr
+#define SYS_lseek __NR_lseek
+#define SYS_lsetxattr __NR_lsetxattr
+#define SYS_madvise __NR_madvise
+#define SYS_mbind __NR_mbind
+#define SYS_membarrier __NR_membarrier
+#define SYS_memfd_create __NR_memfd_create
+#define SYS_migrate_pages __NR_migrate_pages
+#define SYS_mincore __NR_mincore
+#define SYS_mkdirat __NR_mkdirat
+#define SYS_mknodat __NR_mknodat
+#define SYS_mlock __NR_mlock
+#define SYS_mlock2 __NR_mlock2
+#define SYS_mlockall __NR_mlockall
+#define SYS_mmap __NR_mmap
+#define SYS_mount __NR_mount
+#define SYS_move_pages __NR_move_pages
+#define SYS_mprotect __NR_mprotect
+#define SYS_mq_getsetattr __NR_mq_getsetattr
+#define SYS_mq_notify __NR_mq_notify
+#define SYS_mq_open __NR_mq_open
+#define SYS_mq_timedreceive __NR_mq_timedreceive
+#define SYS_mq_timedsend __NR_mq_timedsend
+#define SYS_mq_unlink __NR_mq_unlink
+#define SYS_mremap __NR_mremap
+#define SYS_msgctl __NR_msgctl
+#define SYS_msgget __NR_msgget
+#define SYS_msgrcv __NR_msgrcv
+#define SYS_msgsnd __NR_msgsnd
+#define SYS_msync __NR_msync
+#define SYS_munlock __NR_munlock
+#define SYS_munlockall __NR_munlockall
+#define SYS_munmap __NR_munmap
+#define SYS_name_to_handle_at __NR_name_to_handle_at
+#define SYS_nanosleep __NR_nanosleep
+#define SYS_newfstatat __NR_newfstatat
+#define SYS_nfsservctl __NR_nfsservctl
+#define SYS_open_by_handle_at __NR_open_by_handle_at
+#define SYS_openat __NR_openat
+#define SYS_perf_event_open __NR_perf_event_open
+#define SYS_personality __NR_personality
+#define SYS_pipe2 __NR_pipe2
+#define SYS_pivot_root __NR_pivot_root
+#define SYS_ppoll __NR_ppoll
+#define SYS_prctl __NR_prctl
+#define SYS_pread64 __NR_pread64
+#define SYS_preadv __NR_preadv
+#define SYS_prlimit64 __NR_prlimit64
+#define SYS_process_vm_readv __NR_process_vm_readv
+#define SYS_process_vm_writev __NR_process_vm_writev
+#define SYS_pselect6 __NR_pselect6
+#define SYS_ptrace __NR_ptrace
+#define SYS_pwrite64 __NR_pwrite64
+#define SYS_pwritev __NR_pwritev
+#define SYS_quotactl __NR_quotactl
+#define SYS_read __NR_read
+#define SYS_readahead __NR_readahead
+#define SYS_readlinkat __NR_readlinkat
+#define SYS_readv __NR_readv
+#define SYS_reboot __NR_reboot
+#define SYS_recvfrom __NR_recvfrom
+#define SYS_recvmmsg __NR_recvmmsg
+#define SYS_recvmsg __NR_recvmsg
+#define SYS_remap_file_pages __NR_remap_file_pages
+#define SYS_removexattr __NR_removexattr
+#define SYS_renameat __NR_renameat
+#define SYS_renameat2 __NR_renameat2
+#define SYS_request_key __NR_request_key
+#define SYS_restart_syscall __NR_restart_syscall
+#define SYS_rt_sigaction __NR_rt_sigaction
+#define SYS_rt_sigpending __NR_rt_sigpending
+#define SYS_rt_sigprocmask __NR_rt_sigprocmask
+#define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
+#define SYS_rt_sigreturn __NR_rt_sigreturn
+#define SYS_rt_sigsuspend __NR_rt_sigsuspend
+#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
+#define SYS_rt_tgsigqueueinfo __NR_rt_tgsigqueueinfo
+#define SYS_sched_get_priority_max __NR_sched_get_priority_max
+#define SYS_sched_get_priority_min __NR_sched_get_priority_min
+#define SYS_sched_getaffinity __NR_sched_getaffinity
+#define SYS_sched_getattr __NR_sched_getattr
+#define SYS_sched_getparam __NR_sched_getparam
+#define SYS_sched_getscheduler __NR_sched_getscheduler
+#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
+#define SYS_sched_setaffinity __NR_sched_setaffinity
+#define SYS_sched_setattr __NR_sched_setattr
+#define SYS_sched_setparam __NR_sched_setparam
+#define SYS_sched_setscheduler __NR_sched_setscheduler
+#define SYS_sched_yield __NR_sched_yield
+#define SYS_seccomp __NR_seccomp
+#define SYS_semctl __NR_semctl
+#define SYS_semget __NR_semget
+#define SYS_semop __NR_semop
+#define SYS_semtimedop __NR_semtimedop
+#define SYS_sendfile __NR_sendfile
+#define SYS_sendmmsg __NR_sendmmsg
+#define SYS_sendmsg __NR_sendmsg
+#define SYS_sendto __NR_sendto
+#define SYS_set_mempolicy __NR_set_mempolicy
+#define SYS_set_robust_list __NR_set_robust_list
+#define SYS_set_tid_address __NR_set_tid_address
+#define SYS_setdomainname __NR_setdomainname
+#define SYS_setfsgid __NR_setfsgid
+#define SYS_setfsuid __NR_setfsuid
+#define SYS_setgid __NR_setgid
+#define SYS_setgroups __NR_setgroups
+#define SYS_sethostname __NR_sethostname
+#define SYS_setitimer __NR_setitimer
+#define SYS_setns __NR_setns
+#define SYS_setpgid __NR_setpgid
+#define SYS_setpriority __NR_setpriority
+#define SYS_setregid __NR_setregid
+#define SYS_setresgid __NR_setresgid
+#define SYS_setresuid __NR_setresuid
+#define SYS_setreuid __NR_setreuid
+#define SYS_setrlimit __NR_setrlimit
+#define SYS_setsid __NR_setsid
+#define SYS_setsockopt __NR_setsockopt
+#define SYS_settimeofday __NR_settimeofday
+#define SYS_setuid __NR_setuid
+#define SYS_setxattr __NR_setxattr
+#define SYS_shmat __NR_shmat
+#define SYS_shmctl __NR_shmctl
+#define SYS_shmdt __NR_shmdt
+#define SYS_shmget __NR_shmget
+#define SYS_shutdown __NR_shutdown
+#define SYS_sigaltstack __NR_sigaltstack
+#define SYS_signalfd4 __NR_signalfd4
+#define SYS_socket __NR_socket
+#define SYS_socketpair __NR_socketpair
+#define SYS_splice __NR_splice
+#define SYS_statfs __NR_statfs
+#define SYS_swapoff __NR_swapoff
+#define SYS_swapon __NR_swapon
+#define SYS_symlinkat __NR_symlinkat
+#define SYS_sync __NR_sync
+#define SYS_sync_file_range __NR_sync_file_range
+#define SYS_syncfs __NR_syncfs
+#define SYS_syscalls __NR_syscalls
+#define SYS_sysinfo __NR_sysinfo
+#define SYS_syslog __NR_syslog
+#define SYS_tee __NR_tee
+#define SYS_tgkill __NR_tgkill
+#define SYS_timer_create __NR_timer_create
+#define SYS_timer_delete __NR_timer_delete
+#define SYS_timer_getoverrun __NR_timer_getoverrun
+#define SYS_timer_gettime __NR_timer_gettime
+#define SYS_timer_settime __NR_timer_settime
+#define SYS_timerfd_create __NR_timerfd_create
+#define SYS_timerfd_gettime __NR_timerfd_gettime
+#define SYS_timerfd_settime __NR_timerfd_settime
+#define SYS_times __NR_times
+#define SYS_tkill __NR_tkill
+#define SYS_truncate __NR_truncate
+#define SYS_umask __NR_umask
+#define SYS_umount2 __NR_umount2
+#define SYS_uname __NR_uname
+#define SYS_unlinkat __NR_unlinkat
+#define SYS_unshare __NR_unshare
+#define SYS_userfaultfd __NR_userfaultfd
+#define SYS_utimensat __NR_utimensat
+#define SYS_vhangup __NR_vhangup
+#define SYS_vmsplice __NR_vmsplice
+#define SYS_wait4 __NR_wait4
+#define SYS_waitid __NR_waitid
+#define SYS_write __NR_write
+#define SYS_writev __NR_writev
+#endif
diff --git a/lib/libdss-include/bits/sysctl.h b/lib/libdss-include/bits/sysctl.h
new file mode 100644 (file)
index 0000000..81447b2
--- /dev/null
@@ -0,0 +1 @@
+/* Empty file.  */
diff --git a/lib/libdss-include/bits/syslog-ldbl.h b/lib/libdss-include/bits/syslog-ldbl.h
new file mode 100644 (file)
index 0000000..7c1c03d
--- /dev/null
@@ -0,0 +1,35 @@
+/* -mlong-double-64 compatibility mode for syslog functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include <bits/syslog-ldbl.h> directly; use <sys/syslog.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (syslog)
+
+#ifdef __USE_MISC
+__LDBL_REDIR_DECL (vsyslog)
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__syslog_chk)
+
+# ifdef __USE_MISC
+__LDBL_REDIR_DECL (__vsyslog_chk)
+# endif
+#endif
diff --git a/lib/libdss-include/bits/syslog-path.h b/lib/libdss-include/bits/syslog-path.h
new file mode 100644 (file)
index 0000000..6aab5e0
--- /dev/null
@@ -0,0 +1,28 @@
+/* <bits/syslog-path.h> -- _PATH_LOG definition
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include this file directly.  Use <sys/syslog.h> instead"
+#endif
+
+#ifndef _BITS_SYSLOG_PATH_H
+#define _BITS_SYSLOG_PATH_H 1
+
+#define        _PATH_LOG       "/dev/log"
+
+#endif /* bits/syslog-path.h */
diff --git a/lib/libdss-include/bits/syslog.h b/lib/libdss-include/bits/syslog.h
new file mode 100644 (file)
index 0000000..31dae38
--- /dev/null
@@ -0,0 +1,49 @@
+/* Checking macros for syslog functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include <bits/syslog.h> directly; use <sys/syslog.h> instead."
+#endif
+
+
+extern void __syslog_chk (int __pri, int __flag, const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+#ifdef __va_arg_pack
+__fortify_function void
+syslog (int __pri, const char *__fmt, ...)
+{
+  __syslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+# define syslog(pri, ...) \
+  __syslog_chk (pri, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#endif
+
+
+#ifdef __USE_MISC
+extern void __vsyslog_chk (int __pri, int __flag, const char *__fmt,
+                          __gnuc_va_list __ap)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+__fortify_function void
+vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap)
+{
+  __vsyslog_chk (__pri,  __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+#endif
diff --git a/lib/libdss-include/bits/termios.h b/lib/libdss-include/bits/termios.h
new file mode 100644 (file)
index 0000000..bbf093d
--- /dev/null
@@ -0,0 +1,219 @@
+/* termios type and macro definitions.  Linux version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TERMIOS_H
+# error "Never include <bits/termios.h> directly; use <termios.h> instead."
+#endif
+
+typedef unsigned char  cc_t;
+typedef unsigned int   speed_t;
+typedef unsigned int   tcflag_t;
+
+#define NCCS 32
+struct termios
+  {
+    tcflag_t c_iflag;          /* input mode flags */
+    tcflag_t c_oflag;          /* output mode flags */
+    tcflag_t c_cflag;          /* control mode flags */
+    tcflag_t c_lflag;          /* local mode flags */
+    cc_t c_line;                       /* line discipline */
+    cc_t c_cc[NCCS];           /* control characters */
+    speed_t c_ispeed;          /* input speed */
+    speed_t c_ospeed;          /* output speed */
+#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
+#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
+  };
+
+/* c_cc characters */
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+
+/* c_iflag bits */
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK  0000020
+#define ISTRIP 0000040
+#define INLCR  0000100
+#define IGNCR  0000200
+#define ICRNL  0000400
+#define IUCLC  0001000
+#define IXON   0002000
+#define IXANY  0004000
+#define IXOFF  0010000
+#define IMAXBEL        0020000
+#define IUTF8  0040000
+
+/* c_oflag bits */
+#define OPOST  0000001
+#define OLCUC  0000002
+#define ONLCR  0000004
+#define OCRNL  0000010
+#define ONOCR  0000020
+#define ONLRET 0000040
+#define OFILL  0000100
+#define OFDEL  0000200
+#if defined __USE_MISC || defined __USE_XOPEN
+# define NLDLY 0000400
+# define   NL0 0000000
+# define   NL1 0000400
+# define CRDLY 0003000
+# define   CR0 0000000
+# define   CR1 0001000
+# define   CR2 0002000
+# define   CR3 0003000
+# define TABDLY        0014000
+# define   TAB0        0000000
+# define   TAB1        0004000
+# define   TAB2        0010000
+# define   TAB3        0014000
+# define BSDLY 0020000
+# define   BS0 0000000
+# define   BS1 0020000
+# define FFDLY 0100000
+# define   FF0 0000000
+# define   FF1 0100000
+#endif
+
+#define VTDLY  0040000
+#define   VT0  0000000
+#define   VT1  0040000
+
+#ifdef __USE_MISC
+# define XTABS 0014000
+#endif
+
+/* c_cflag bit meaning */
+#ifdef __USE_MISC
+# define CBAUD 0010017
+#endif
+#define  B0    0000000         /* hang up */
+#define  B50   0000001
+#define  B75   0000002
+#define  B110  0000003
+#define  B134  0000004
+#define  B150  0000005
+#define  B200  0000006
+#define  B300  0000007
+#define  B600  0000010
+#define  B1200 0000011
+#define  B1800 0000012
+#define  B2400 0000013
+#define  B4800 0000014
+#define  B9600 0000015
+#define  B19200        0000016
+#define  B38400        0000017
+#ifdef __USE_MISC
+# define EXTA B19200
+# define EXTB B38400
+#endif
+#define CSIZE  0000060
+#define   CS5  0000000
+#define   CS6  0000020
+#define   CS7  0000040
+#define   CS8  0000060
+#define CSTOPB 0000100
+#define CREAD  0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL  0002000
+#define CLOCAL 0004000
+#ifdef __USE_MISC
+# define CBAUDEX 0010000
+#endif
+#define  B57600   0010001
+#define  B115200  0010002
+#define  B230400  0010003
+#define  B460800  0010004
+#define  B500000  0010005
+#define  B576000  0010006
+#define  B921600  0010007
+#define  B1000000 0010010
+#define  B1152000 0010011
+#define  B1500000 0010012
+#define  B2000000 0010013
+#define  B2500000 0010014
+#define  B3000000 0010015
+#define  B3500000 0010016
+#define  B4000000 0010017
+#define __MAX_BAUD B4000000
+#ifdef __USE_MISC
+# define CIBAUD          002003600000          /* input baud rate (not used) */
+# define CMSPAR   010000000000         /* mark or space (stick) parity */
+# define CRTSCTS  020000000000         /* flow control */
+#endif
+
+/* c_lflag bits */
+#define ISIG   0000001
+#define ICANON 0000002
+#if defined __USE_MISC || defined __USE_XOPEN
+# define XCASE 0000004
+#endif
+#define ECHO   0000010
+#define ECHOE  0000020
+#define ECHOK  0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define TOSTOP 0000400
+#ifdef __USE_MISC
+# define ECHOCTL 0001000
+# define ECHOPRT 0002000
+# define ECHOKE         0004000
+# define FLUSHO         0010000
+# define PENDIN         0040000
+#endif
+#define IEXTEN 0100000
+#ifdef __USE_MISC
+# define EXTPROC 0200000
+#endif
+
+/* tcflow() and TCXONC use these */
+#define        TCOOFF          0
+#define        TCOON           1
+#define        TCIOFF          2
+#define        TCION           3
+
+/* tcflush() and TCFLSH use these */
+#define        TCIFLUSH        0
+#define        TCOFLUSH        1
+#define        TCIOFLUSH       2
+
+/* tcsetattr uses these */
+#define        TCSANOW         0
+#define        TCSADRAIN       1
+#define        TCSAFLUSH       2
+
+
+#define _IOT_termios /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
diff --git a/lib/libdss-include/bits/time.h b/lib/libdss-include/bits/time.h
new file mode 100644 (file)
index 0000000..87eb51f
--- /dev/null
@@ -0,0 +1,101 @@
+/* System-dependent timing definitions.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <time.h> instead.
+ */
+
+#if defined __need_timeval || defined __USE_GNU
+# ifndef _STRUCT_TIMEVAL
+#  define _STRUCT_TIMEVAL      1
+#  include <bits/types.h>
+
+/* A time value that is accurate to the nearest
+   microsecond but also has a range of years.  */
+struct timeval
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __suseconds_t tv_usec;     /* Microseconds.  */
+  };
+# endif        /* struct timeval */
+#endif
+
+#ifndef __need_timeval
+# ifndef _BITS_TIME_H
+#  define _BITS_TIME_H 1
+
+/* ISO/IEC 9899:1999 7.23.1: Components of time
+   The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is
+   the number per second of the value returned by the `clock' function.  */
+/* CAE XSH, Issue 4, Version 2: <time.h>
+   The value of CLOCKS_PER_SEC is required to be 1 million on all
+   XSI-conformant systems. */
+#  define CLOCKS_PER_SEC  ((clock_t) 1000000)
+
+#  if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \
+   && !defined __USE_XOPEN2K
+/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
+   presents the real value for clock ticks per second for the system.  */
+#   include <bits/types.h>
+extern long int __sysconf (int);
+#   define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
+#  endif
+
+#  ifdef __USE_POSIX199309
+/* Identifier for system-wide realtime clock.  */
+#   define CLOCK_REALTIME              0
+/* Monotonic system-wide clock.  */
+#   define CLOCK_MONOTONIC             1
+/* High-resolution timer from the CPU.  */
+#   define CLOCK_PROCESS_CPUTIME_ID    2
+/* Thread-specific CPU-time clock.  */
+#   define CLOCK_THREAD_CPUTIME_ID     3
+/* Monotonic system-wide clock, not adjusted for frequency scaling.  */
+#   define CLOCK_MONOTONIC_RAW         4
+/* Identifier for system-wide realtime clock, updated only on ticks.  */
+#   define CLOCK_REALTIME_COARSE       5
+/* Monotonic system-wide clock, updated only on ticks.  */
+#   define CLOCK_MONOTONIC_COARSE      6
+/* Monotonic system-wide clock that includes time spent in suspension.  */
+#   define CLOCK_BOOTTIME              7
+/* Like CLOCK_REALTIME but also wakes suspended system.  */
+#   define CLOCK_REALTIME_ALARM                8
+/* Like CLOCK_BOOTTIME but also wakes suspended system.  */
+#   define CLOCK_BOOTTIME_ALARM                9
+/* Like CLOCK_REALTIME but in International Atomic Time.  */
+#   define CLOCK_TAI                   11
+
+/* Flag to indicate time is absolute.  */
+#   define TIMER_ABSTIME               1
+#  endif
+
+#  ifdef __USE_GNU
+#   include <bits/timex.h>
+
+__BEGIN_DECLS
+
+/* Tune a POSIX clock.  */
+extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW;
+
+__END_DECLS
+#  endif /* use GNU */
+
+# endif        /* bits/time.h */
+#endif
+
+#undef __need_timeval
diff --git a/lib/libdss-include/bits/timerfd.h b/lib/libdss-include/bits/timerfd.h
new file mode 100644 (file)
index 0000000..0ba607e
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2008-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMERFD_H
+# error "Never use <bits/timerfd.h> directly; include <sys/timerfd.h> instead."
+#endif
+
+/* Bits to be set in the FLAGS parameter of `timerfd_create'.  */
+enum
+  {
+    TFD_CLOEXEC = 02000000,
+#define TFD_CLOEXEC TFD_CLOEXEC
+    TFD_NONBLOCK = 00004000
+#define TFD_NONBLOCK TFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/bits/timex.h b/lib/libdss-include/bits/timex.h
new file mode 100644 (file)
index 0000000..5eb7ccb
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _BITS_TIMEX_H
+#define        _BITS_TIMEX_H   1
+
+#include <bits/types.h>
+
+/* These definitions from linux/timex.h as of 3.18.  */
+
+struct timex
+{
+  unsigned int modes;          /* mode selector */
+  __syscall_slong_t offset;    /* time offset (usec) */
+  __syscall_slong_t freq;      /* frequency offset (scaled ppm) */
+  __syscall_slong_t maxerror;  /* maximum error (usec) */
+  __syscall_slong_t esterror;  /* estimated error (usec) */
+  int status;                  /* clock command/status */
+  __syscall_slong_t constant;  /* pll time constant */
+  __syscall_slong_t precision; /* clock precision (usec) (ro) */
+  __syscall_slong_t tolerance; /* clock frequency tolerance (ppm) (ro) */
+  struct timeval time;         /* (read only, except for ADJ_SETOFFSET) */
+  __syscall_slong_t tick;      /* (modified) usecs between clock ticks */
+  __syscall_slong_t ppsfreq;   /* pps frequency (scaled ppm) (ro) */
+  __syscall_slong_t jitter;    /* pps jitter (us) (ro) */
+  int shift;                   /* interval duration (s) (shift) (ro) */
+  __syscall_slong_t stabil;    /* pps stability (scaled ppm) (ro) */
+  __syscall_slong_t jitcnt;    /* jitter limit exceeded (ro) */
+  __syscall_slong_t calcnt;    /* calibration intervals (ro) */
+  __syscall_slong_t errcnt;    /* calibration errors (ro) */
+  __syscall_slong_t stbcnt;    /* stability limit exceeded (ro) */
+
+  int tai;                     /* TAI offset (ro) */
+
+  /* ??? */
+  int  :32; int  :32; int  :32; int  :32;
+  int  :32; int  :32; int  :32; int  :32;
+  int  :32; int  :32; int  :32;
+};
+
+/* Mode codes (timex.mode) */
+#define ADJ_OFFSET             0x0001  /* time offset */
+#define ADJ_FREQUENCY          0x0002  /* frequency offset */
+#define ADJ_MAXERROR           0x0004  /* maximum time error */
+#define ADJ_ESTERROR           0x0008  /* estimated time error */
+#define ADJ_STATUS             0x0010  /* clock status */
+#define ADJ_TIMECONST          0x0020  /* pll time constant */
+#define ADJ_TAI                        0x0080  /* set TAI offset */
+#define ADJ_SETOFFSET          0x0100  /* add 'time' to current time */
+#define ADJ_MICRO              0x1000  /* select microsecond resolution */
+#define ADJ_NANO               0x2000  /* select nanosecond resolution */
+#define ADJ_TICK               0x4000  /* tick value */
+#define ADJ_OFFSET_SINGLESHOT  0x8001  /* old-fashioned adjtime */
+#define ADJ_OFFSET_SS_READ     0xa001  /* read-only adjtime */
+
+/* xntp 3.4 compatibility names */
+#define MOD_OFFSET     ADJ_OFFSET
+#define MOD_FREQUENCY  ADJ_FREQUENCY
+#define MOD_MAXERROR   ADJ_MAXERROR
+#define MOD_ESTERROR   ADJ_ESTERROR
+#define MOD_STATUS     ADJ_STATUS
+#define MOD_TIMECONST  ADJ_TIMECONST
+#define MOD_CLKB       ADJ_TICK
+#define MOD_CLKA       ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */
+#define MOD_TAI                ADJ_TAI
+#define MOD_MICRO      ADJ_MICRO
+#define MOD_NANO       ADJ_NANO
+
+
+/* Status codes (timex.status) */
+#define STA_PLL                0x0001  /* enable PLL updates (rw) */
+#define STA_PPSFREQ    0x0002  /* enable PPS freq discipline (rw) */
+#define STA_PPSTIME    0x0004  /* enable PPS time discipline (rw) */
+#define STA_FLL                0x0008  /* select frequency-lock mode (rw) */
+
+#define STA_INS                0x0010  /* insert leap (rw) */
+#define STA_DEL                0x0020  /* delete leap (rw) */
+#define STA_UNSYNC     0x0040  /* clock unsynchronized (rw) */
+#define STA_FREQHOLD   0x0080  /* hold frequency (rw) */
+
+#define STA_PPSSIGNAL  0x0100  /* PPS signal present (ro) */
+#define STA_PPSJITTER  0x0200  /* PPS signal jitter exceeded (ro) */
+#define STA_PPSWANDER  0x0400  /* PPS signal wander exceeded (ro) */
+#define STA_PPSERROR   0x0800  /* PPS signal calibration error (ro) */
+
+#define STA_CLOCKERR   0x1000  /* clock hardware fault (ro) */
+#define STA_NANO       0x2000  /* resolution (0 = us, 1 = ns) (ro) */
+#define STA_MODE       0x4000  /* mode (0 = PLL, 1 = FLL) (ro) */
+#define STA_CLK                0x8000  /* clock source (0 = A, 1 = B) (ro) */
+
+/* Read-only bits */
+#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
+    STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
+
+#endif /* bits/timex.h */
diff --git a/lib/libdss-include/bits/types.h b/lib/libdss-include/bits/types.h
new file mode 100644 (file)
index 0000000..01753bd
--- /dev/null
@@ -0,0 +1,194 @@
+/* bits/types.h -- definitions of __*_t types underlying *_t types.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+
+#ifndef        _BITS_TYPES_H
+#define        _BITS_TYPES_H   1
+
+#include <features.h>
+#include <bits/wordsize.h>
+
+/* Convenience types.  */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+/* Fixed-size types, underlying types depend on word size and compiler.  */
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+#if __WORDSIZE == 64
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+#else
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+#endif
+
+/* quad_t is also 64 bits.  */
+#if __WORDSIZE == 64
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+#else
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+#endif
+
+
+/* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
+   macros for each of the OS types we define below.  The definitions
+   of those macros must use the following macros for underlying types.
+   We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
+   variants of each of the following integer types on this machine.
+
+       16              -- "natural" 16-bit type (always short)
+       32              -- "natural" 32-bit type (always int)
+       64              -- "natural" 64-bit type (long or long long)
+       LONG32          -- 32-bit type, traditionally long
+       QUAD            -- 64-bit type, always long long
+       WORD            -- natural type of __WORDSIZE bits (int or long)
+       LONGWORD        -- type of __WORDSIZE bits, traditionally long
+
+   We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
+   conventional uses of `long' or `long long' type modifiers match the
+   types we define, even when a less-adorned type would be the same size.
+   This matters for (somewhat) portably writing printf/scanf formats for
+   these types, where using the appropriate l or ll format modifiers can
+   make the typedefs and the formats match up across all GNU platforms.  If
+   we used `long' when it's 64 bits where `long long' is expected, then the
+   compiler would warn about the formats not matching the argument types,
+   and the programmer changing them to shut up the compiler would break the
+   program's portability.
+
+   Here we assume what is presently the case in all the GCC configurations
+   we support: long long is always 64 bits, long is always word/address size,
+   and int is always 32 bits.  */
+
+#define        __S16_TYPE              short int
+#define __U16_TYPE             unsigned short int
+#define        __S32_TYPE              int
+#define __U32_TYPE             unsigned int
+#define __SLONGWORD_TYPE       long int
+#define __ULONGWORD_TYPE       unsigned long int
+#if __WORDSIZE == 32
+# define __SQUAD_TYPE          __quad_t
+# define __UQUAD_TYPE          __u_quad_t
+# define __SWORD_TYPE          int
+# define __UWORD_TYPE          unsigned int
+# define __SLONG32_TYPE                long int
+# define __ULONG32_TYPE                unsigned long int
+# define __S64_TYPE            __quad_t
+# define __U64_TYPE            __u_quad_t
+/* We want __extension__ before typedef's that use nonstandard base types
+   such as `long long' in C89 mode.  */
+# define __STD_TYPE            __extension__ typedef
+#elif __WORDSIZE == 64
+# define __SQUAD_TYPE          long int
+# define __UQUAD_TYPE          unsigned long int
+# define __SWORD_TYPE          long int
+# define __UWORD_TYPE          unsigned long int
+# define __SLONG32_TYPE                int
+# define __ULONG32_TYPE                unsigned int
+# define __S64_TYPE            long int
+# define __U64_TYPE            unsigned long int
+/* No need to mark the typedef with __extension__.   */
+# define __STD_TYPE            typedef
+#else
+# error
+#endif
+#include <bits/typesizes.h>    /* Defines __*_T_TYPE macros.  */
+
+
+__STD_TYPE __DEV_T_TYPE __dev_t;       /* Type of device numbers.  */
+__STD_TYPE __UID_T_TYPE __uid_t;       /* Type of user identifications.  */
+__STD_TYPE __GID_T_TYPE __gid_t;       /* Type of group identifications.  */
+__STD_TYPE __INO_T_TYPE __ino_t;       /* Type of file serial numbers.  */
+__STD_TYPE __INO64_T_TYPE __ino64_t;   /* Type of file serial numbers (LFS).*/
+__STD_TYPE __MODE_T_TYPE __mode_t;     /* Type of file attribute bitmasks.  */
+__STD_TYPE __NLINK_T_TYPE __nlink_t;   /* Type of file link counts.  */
+__STD_TYPE __OFF_T_TYPE __off_t;       /* Type of file sizes and offsets.  */
+__STD_TYPE __OFF64_T_TYPE __off64_t;   /* Type of file sizes and offsets (LFS).  */
+__STD_TYPE __PID_T_TYPE __pid_t;       /* Type of process identifications.  */
+__STD_TYPE __FSID_T_TYPE __fsid_t;     /* Type of file system IDs.  */
+__STD_TYPE __CLOCK_T_TYPE __clock_t;   /* Type of CPU usage counts.  */
+__STD_TYPE __RLIM_T_TYPE __rlim_t;     /* Type for resource measurement.  */
+__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS).  */
+__STD_TYPE __ID_T_TYPE __id_t;         /* General type for IDs.  */
+__STD_TYPE __TIME_T_TYPE __time_t;     /* Seconds since the Epoch.  */
+__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds.  */
+__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds.  */
+
+__STD_TYPE __DADDR_T_TYPE __daddr_t;   /* The type of a disk address.  */
+__STD_TYPE __KEY_T_TYPE __key_t;       /* Type of an IPC key.  */
+
+/* Clock ID used in clock and timer functions.  */
+__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+
+/* Timer ID returned by `timer_create'.  */
+__STD_TYPE __TIMER_T_TYPE __timer_t;
+
+/* Type to represent block size.  */
+__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number of disk blocks.  */
+__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
+
+/* Type to count file system nodes.  */
+__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
+
+/* Type of miscellaneous file system fields.  */
+__STD_TYPE __FSWORD_T_TYPE __fsword_t;
+
+__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */
+
+/* Signed long type used in system calls.  */
+__STD_TYPE __SYSCALL_SLONG_TYPE __syscall_slong_t;
+/* Unsigned long type used in system calls.  */
+__STD_TYPE __SYSCALL_ULONG_TYPE __syscall_ulong_t;
+
+/* These few don't really vary by system, they always correspond
+   to one of the other defined types.  */
+typedef __off64_t __loff_t;    /* Type of file sizes and offsets (LFS).  */
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+
+/* Duplicates info from stdint.h but this is used in unistd.h.  */
+__STD_TYPE __SWORD_TYPE __intptr_t;
+
+/* Duplicate info from sys/socket.h.  */
+__STD_TYPE __U32_TYPE __socklen_t;
+
+
+#undef __STD_TYPE
+
+#endif /* bits/types.h */
diff --git a/lib/libdss-include/bits/typesizes.h b/lib/libdss-include/bits/typesizes.h
new file mode 100644 (file)
index 0000000..c31bba2
--- /dev/null
@@ -0,0 +1,79 @@
+/* bits/typesizes.h -- underlying types for *_t.  For the generic Linux ABI.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef        _BITS_TYPESIZES_H
+#define        _BITS_TYPESIZES_H       1
+
+/* See <bits/types.h> for the meaning of these macros.  This file exists so
+   that <bits/types.h> need not vary across different GNU platforms.  */
+
+#define __DEV_T_TYPE           __UQUAD_TYPE
+#define __UID_T_TYPE           __U32_TYPE
+#define __GID_T_TYPE           __U32_TYPE
+#define __INO_T_TYPE           __ULONGWORD_TYPE
+#define __INO64_T_TYPE         __UQUAD_TYPE
+#define __MODE_T_TYPE          __U32_TYPE
+#define __NLINK_T_TYPE         __U32_TYPE
+#define __OFF_T_TYPE           __SLONGWORD_TYPE
+#define __OFF64_T_TYPE         __SQUAD_TYPE
+#define __PID_T_TYPE           __S32_TYPE
+#define __RLIM_T_TYPE          __ULONGWORD_TYPE
+#define __RLIM64_T_TYPE                __UQUAD_TYPE
+#define        __BLKCNT_T_TYPE         __SLONGWORD_TYPE
+#define        __BLKCNT64_T_TYPE       __SQUAD_TYPE
+#define        __FSBLKCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSBLKCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSFILCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSFILCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSWORD_T_TYPE         __SWORD_TYPE
+#define        __ID_T_TYPE             __U32_TYPE
+#define __CLOCK_T_TYPE         __SLONGWORD_TYPE
+#define __TIME_T_TYPE          __SLONGWORD_TYPE
+#define __USECONDS_T_TYPE      __U32_TYPE
+#define __SUSECONDS_T_TYPE     __SLONGWORD_TYPE
+#define __DADDR_T_TYPE         __S32_TYPE
+#define __KEY_T_TYPE           __S32_TYPE
+#define __CLOCKID_T_TYPE       __S32_TYPE
+#define __TIMER_T_TYPE         void *
+#define __BLKSIZE_T_TYPE       __S32_TYPE
+#define __FSID_T_TYPE          struct { int __val[2]; }
+#define __SSIZE_T_TYPE         __SWORD_TYPE
+#define __SYSCALL_SLONG_TYPE   __SLONGWORD_TYPE
+#define __SYSCALL_ULONG_TYPE   __ULONGWORD_TYPE
+#define __CPU_MASK_TYPE        __ULONGWORD_TYPE
+
+#ifdef __LP64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T       1
+
+/* Same for ino_t and ino64_t.  */
+# define __INO_T_MATCHES_INO64_T       1
+#endif
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define        __FD_SETSIZE            1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/lib/libdss-include/bits/uio.h b/lib/libdss-include/bits/uio.h
new file mode 100644 (file)
index 0000000..7684b3e
--- /dev/null
@@ -0,0 +1,77 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_UIO_H && !defined _FCNTL_H
+# error "Never include <bits/uio.h> directly; use <sys/uio.h> instead."
+#endif
+
+#ifndef _BITS_UIO_H
+#define _BITS_UIO_H    1
+
+#include <sys/types.h>
+
+
+/* We should normally use the Linux kernel header file to define this
+   type and macros but this calls for trouble because of the header
+   includes other kernel headers.  */
+
+/* Size of object which can be written atomically.
+
+   This macro has different values in different kernel versions.  The
+   latest versions of the kernel use 1024 and this is good choice.  Since
+   the C library implementation of readv/writev is able to emulate the
+   functionality even if the currently running kernel does not support
+   this large value the readv/writev call will not fail because of this.  */
+#define UIO_MAXIOV     1024
+
+
+/* Structure for scatter/gather I/O.  */
+struct iovec
+  {
+    void *iov_base;    /* Pointer to data.  */
+    size_t iov_len;    /* Length of data.  */
+  };
+
+#endif
+
+
+#ifdef __USE_GNU
+# if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H
+#  define _BITS_UIO_H_FOR_SYS_UIO_H 1
+
+__BEGIN_DECLS
+
+/* Read from another process' address space.  */
+extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec,
+                                unsigned long int __liovcnt,
+                                const struct iovec *__rvec,
+                                unsigned long int __riovcnt,
+                                unsigned long int __flags)
+  __THROW;
+
+/* Write to another process' address space.  */
+extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
+                                 unsigned long int __liovcnt,
+                                 const struct iovec *__rvec,
+                                 unsigned long int __riovcnt,
+                                 unsigned long int __flags)
+  __THROW;
+
+__END_DECLS
+
+# endif
+#endif
diff --git a/lib/libdss-include/bits/unistd.h b/lib/libdss-include/bits/unistd.h
new file mode 100644 (file)
index 0000000..0105f04
--- /dev/null
@@ -0,0 +1,385 @@
+/* Checking macros for unistd functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never include <bits/unistd.h> directly; use <unistd.h> instead."
+#endif
+
+extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes,
+                          size_t __buflen) __wur;
+extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,
+                                         size_t __nbytes), read) __wur;
+extern ssize_t __REDIRECT (__read_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           size_t __buflen), __read_chk)
+     __wur __warnattr ("read called with bigger length than size of "
+                      "the destination buffer");
+
+__fortify_function __wur ssize_t
+read (int __fd, void *__buf, size_t __nbytes)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __read_chk (__fd, __buf, __nbytes, __bos0 (__buf));
+
+      if (__nbytes > __bos0 (__buf))
+       return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf));
+    }
+  return __read_alias (__fd, __buf, __nbytes);
+}
+
+#ifdef __USE_UNIX98
+extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset, size_t __bufsize) __wur;
+extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes,
+                             __off64_t __offset, size_t __bufsize) __wur;
+extern ssize_t __REDIRECT (__pread_alias,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset), pread) __wur;
+extern ssize_t __REDIRECT (__pread64_alias,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off64_t __offset), pread64) __wur;
+extern ssize_t __REDIRECT (__pread_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset, size_t __bufsize), __pread_chk)
+     __wur __warnattr ("pread called with bigger length than size of "
+                      "the destination buffer");
+extern ssize_t __REDIRECT (__pread64_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off64_t __offset, size_t __bufsize),
+                           __pread64_chk)
+     __wur __warnattr ("pread64 called with bigger length than size of "
+                      "the destination buffer");
+
+# ifndef __USE_FILE_OFFSET64
+__fortify_function __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread_chk_warn (__fd, __buf, __nbytes, __offset,
+                                __bos0 (__buf));
+    }
+  return __pread_alias (__fd, __buf, __nbytes, __offset);
+}
+# else
+__fortify_function __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
+                                  __bos0 (__buf));
+    }
+
+  return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
+# endif
+
+# ifdef __USE_LARGEFILE64
+__fortify_function __wur ssize_t
+pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
+                                  __bos0 (__buf));
+    }
+
+  return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+extern ssize_t __readlink_chk (const char *__restrict __path,
+                              char *__restrict __buf, size_t __len,
+                              size_t __buflen)
+     __THROW __nonnull ((1, 2)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlink_alias,
+                              (const char *__restrict __path,
+                               char *__restrict __buf, size_t __len), readlink)
+     __nonnull ((1, 2)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlink_chk_warn,
+                              (const char *__restrict __path,
+                               char *__restrict __buf, size_t __len,
+                               size_t __buflen), __readlink_chk)
+     __nonnull ((1, 2)) __wur __warnattr ("readlink called with bigger length "
+                                         "than size of destination buffer");
+
+__fortify_function __nonnull ((1, 2)) __wur ssize_t
+__NTH (readlink (const char *__restrict __path, char *__restrict __buf,
+                size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __readlink_chk (__path, __buf, __len, __bos (__buf));
+
+      if ( __len > __bos (__buf))
+       return __readlink_chk_warn (__path, __buf, __len, __bos (__buf));
+    }
+  return __readlink_alias (__path, __buf, __len);
+}
+#endif
+
+#ifdef __USE_ATFILE
+extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path,
+                                char *__restrict __buf, size_t __len,
+                                size_t __buflen)
+     __THROW __nonnull ((2, 3)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlinkat_alias,
+                              (int __fd, const char *__restrict __path,
+                               char *__restrict __buf, size_t __len),
+                              readlinkat)
+     __nonnull ((2, 3)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlinkat_chk_warn,
+                              (int __fd, const char *__restrict __path,
+                               char *__restrict __buf, size_t __len,
+                               size_t __buflen), __readlinkat_chk)
+     __nonnull ((2, 3)) __wur __warnattr ("readlinkat called with bigger "
+                                         "length than size of destination "
+                                         "buffer");
+
+__fortify_function __nonnull ((2, 3)) __wur ssize_t
+__NTH (readlinkat (int __fd, const char *__restrict __path,
+                  char *__restrict __buf, size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __readlinkat_chk (__fd, __path, __buf, __len, __bos (__buf));
+
+      if (__len > __bos (__buf))
+       return __readlinkat_chk_warn (__fd, __path, __buf, __len,
+                                     __bos (__buf));
+    }
+  return __readlinkat_alias (__fd, __path, __buf, __len);
+}
+#endif
+
+extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)
+     __THROW __wur;
+extern char *__REDIRECT_NTH (__getcwd_alias,
+                            (char *__buf, size_t __size), getcwd) __wur;
+extern char *__REDIRECT_NTH (__getcwd_chk_warn,
+                            (char *__buf, size_t __size, size_t __buflen),
+                            __getcwd_chk)
+     __wur __warnattr ("getcwd caller with bigger length than size of "
+                      "destination buffer");
+
+__fortify_function __wur char *
+__NTH (getcwd (char *__buf, size_t __size))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size))
+       return __getcwd_chk (__buf, __size, __bos (__buf));
+
+      if (__size > __bos (__buf))
+       return __getcwd_chk_warn (__buf, __size, __bos (__buf));
+    }
+  return __getcwd_alias (__buf, __size);
+}
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+extern char *__getwd_chk (char *__buf, size_t buflen)
+     __THROW __nonnull ((1)) __wur;
+extern char *__REDIRECT_NTH (__getwd_warn, (char *__buf), getwd)
+     __nonnull ((1)) __wur __warnattr ("please use getcwd instead, as getwd "
+                                      "doesn't specify buffer size");
+
+__fortify_function __nonnull ((1)) __attribute_deprecated__ __wur char *
+__NTH (getwd (char *__buf))
+{
+  if (__bos (__buf) != (size_t) -1)
+    return __getwd_chk (__buf, __bos (__buf));
+  return __getwd_warn (__buf);
+}
+#endif
+
+extern size_t __confstr_chk (int __name, char *__buf, size_t __len,
+                            size_t __buflen) __THROW;
+extern size_t __REDIRECT_NTH (__confstr_alias, (int __name, char *__buf,
+                                               size_t __len), confstr);
+extern size_t __REDIRECT_NTH (__confstr_chk_warn,
+                             (int __name, char *__buf, size_t __len,
+                              size_t __buflen), __confstr_chk)
+     __warnattr ("confstr called with bigger length than size of destination "
+                "buffer");
+
+__fortify_function size_t
+__NTH (confstr (int __name, char *__buf, size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __confstr_chk (__name, __buf, __len, __bos (__buf));
+
+      if (__bos (__buf) < __len)
+       return __confstr_chk_warn (__name, __buf, __len, __bos (__buf));
+    }
+  return __confstr_alias (__name, __buf, __len);
+}
+
+
+extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen)
+     __THROW __wur;
+extern int __REDIRECT_NTH (__getgroups_alias, (int __size, __gid_t __list[]),
+                          getgroups) __wur;
+extern int __REDIRECT_NTH (__getgroups_chk_warn,
+                          (int __size, __gid_t __list[], size_t __listlen),
+                          __getgroups_chk)
+     __wur __warnattr ("getgroups called with bigger group count than what "
+                      "can fit into destination buffer");
+
+__fortify_function int
+__NTH (getgroups (int __size, __gid_t __list[]))
+{
+  if (__bos (__list) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size) || __size < 0)
+       return __getgroups_chk (__size, __list, __bos (__list));
+
+      if (__size * sizeof (__gid_t) > __bos (__list))
+       return __getgroups_chk_warn (__size, __list, __bos (__list));
+    }
+  return __getgroups_alias (__size, __list);
+}
+
+
+extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ttyname_r_alias, (int __fd, char *__buf,
+                                              size_t __buflen), ttyname_r)
+     __nonnull ((2));
+extern int __REDIRECT_NTH (__ttyname_r_chk_warn,
+                          (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal), __ttyname_r_chk)
+     __nonnull ((2)) __warnattr ("ttyname_r called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+__NTH (ttyname_r (int __fd, char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __ttyname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __ttyname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+    }
+  return __ttyname_r_alias (__fd, __buf, __buflen);
+}
+
+
+#if defined __USE_REENTRANT || defined __USE_POSIX199506
+extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __nonnull ((1));
+extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen),
+                      getlogin_r) __nonnull ((1));
+extern int __REDIRECT (__getlogin_r_chk_warn,
+                      (char *__buf, size_t __buflen, size_t __nreal),
+                      __getlogin_r_chk)
+     __nonnull ((1)) __warnattr ("getlogin_r called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+getlogin_r (char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __getlogin_r_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __getlogin_r_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __getlogin_r_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_MISC || defined __USE_UNIX98
+extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1));
+extern int __REDIRECT_NTH (__gethostname_alias, (char *__buf, size_t __buflen),
+                          gethostname) __nonnull ((1));
+extern int __REDIRECT_NTH (__gethostname_chk_warn,
+                          (char *__buf, size_t __buflen, size_t __nreal),
+                          __gethostname_chk)
+     __nonnull ((1)) __warnattr ("gethostname called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+__NTH (gethostname (char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __gethostname_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __gethostname_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __gethostname_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_UNIX98)
+extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1)) __wur;
+extern int __REDIRECT_NTH (__getdomainname_alias, (char *__buf,
+                                                  size_t __buflen),
+                          getdomainname) __nonnull ((1)) __wur;
+extern int __REDIRECT_NTH (__getdomainname_chk_warn,
+                          (char *__buf, size_t __buflen, size_t __nreal),
+                          __getdomainname_chk)
+     __nonnull ((1)) __wur __warnattr ("getdomainname called with bigger "
+                                      "buflen than size of destination "
+                                      "buffer");
+
+__fortify_function int
+__NTH (getdomainname (char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __getdomainname_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __getdomainname_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __getdomainname_alias (__buf, __buflen);
+}
+#endif
diff --git a/lib/libdss-include/bits/ustat.h b/lib/libdss-include/bits/ustat.h
new file mode 100644 (file)
index 0000000..0da6240
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USTAT_H
+# error "Never include <bits/ustat.h> directly; use <sys/ustat.h> instead."
+#endif
+
+#include <sys/types.h>
+
+struct ustat
+  {
+    __daddr_t f_tfree;         /* Number of free blocks.  */
+    __ino_t f_tinode;          /* Number of free inodes.  */
+    char f_fname[6];
+    char f_fpack[6];
+  };
diff --git a/lib/libdss-include/bits/utmp.h b/lib/libdss-include/bits/utmp.h
new file mode 100644 (file)
index 0000000..2a1ffcb
--- /dev/null
@@ -0,0 +1,123 @@
+/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
+#endif
+
+#include <paths.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <bits/wordsize.h>
+
+
+#define UT_LINESIZE    32
+#define UT_NAMESIZE    32
+#define UT_HOSTSIZE    256
+
+
+/* The structure describing an entry in the database of
+   previous logins.  */
+struct lastlog
+  {
+#ifdef __WORDSIZE_TIME64_COMPAT32
+    int32_t ll_time;
+#else
+    __time_t ll_time;
+#endif
+    char ll_line[UT_LINESIZE];
+    char ll_host[UT_HOSTSIZE];
+  };
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmp' below.  */
+struct exit_status
+  {
+    short int e_termination;   /* Process termination status.  */
+    short int e_exit;          /* Process exit status.  */
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp
+{
+  short int ut_type;           /* Type of login.  */
+  pid_t ut_pid;                        /* Process ID of login process.  */
+  char ut_line[UT_LINESIZE];   /* Devicename.  */
+  char ut_id[4];               /* Inittab ID.  */
+  char ut_user[UT_NAMESIZE];   /* Username.  */
+  char ut_host[UT_HOSTSIZE];   /* Hostname for remote login.  */
+  struct exit_status ut_exit;  /* Exit status of a process marked
+                                  as DEAD_PROCESS.  */
+/* The ut_session and ut_tv fields must be the same size when compiled
+   32- and 64-bit.  This allows data files and shared memory to be
+   shared between 32- and 64-bit applications.  */
+#ifdef __WORDSIZE_TIME64_COMPAT32
+  int32_t ut_session;          /* Session ID, used for windowing.  */
+  struct
+  {
+    int32_t tv_sec;            /* Seconds.  */
+    int32_t tv_usec;           /* Microseconds.  */
+  } ut_tv;                     /* Time entry was made.  */
+#else
+  long int ut_session;         /* Session ID, used for windowing.  */
+  struct timeval ut_tv;                /* Time entry was made.  */
+#endif
+
+  int32_t ut_addr_v6[4];       /* Internet address of remote host.  */
+  char __glibc_reserved[20];           /* Reserved for future use.  */
+};
+
+/* Backwards compatibility hacks.  */
+#define ut_name                ut_user
+#ifndef _NO_UT_TIME
+/* We have a problem here: `ut_time' is also used otherwise.  Define
+   _NO_UT_TIME if the compiler complains.  */
+# define ut_time       ut_tv.tv_sec
+#endif
+#define ut_xtime       ut_tv.tv_sec
+#define ut_addr                ut_addr_v6[0]
+
+
+/* Values for the `ut_type' field of a `struct utmp'.  */
+#define EMPTY          0       /* No valid user accounting information.  */
+
+#define RUN_LVL                1       /* The system's runlevel.  */
+#define BOOT_TIME      2       /* Time of system boot.  */
+#define NEW_TIME       3       /* Time after system clock changed.  */
+#define OLD_TIME       4       /* Time when system clock changed.  */
+
+#define INIT_PROCESS   5       /* Process spawned by the init process.  */
+#define LOGIN_PROCESS  6       /* Session leader of a logged in user.  */
+#define USER_PROCESS   7       /* Normal process.  */
+#define DEAD_PROCESS   8       /* Terminated process.  */
+
+#define ACCOUNTING     9
+
+/* Old Linux name for the EMPTY type.  */
+#define UT_UNKNOWN     EMPTY
+
+
+/* Tell the user that we have a modern system with UT_HOST, UT_PID,
+   UT_TYPE, UT_ID and UT_TV fields.  */
+#define _HAVE_UT_TYPE  1
+#define _HAVE_UT_PID   1
+#define _HAVE_UT_ID    1
+#define _HAVE_UT_TV    1
+#define _HAVE_UT_HOST  1
diff --git a/lib/libdss-include/bits/utmpx.h b/lib/libdss-include/bits/utmpx.h
new file mode 100644 (file)
index 0000000..b41548b
--- /dev/null
@@ -0,0 +1,102 @@
+/* Structures and definitions for the user accounting database.  GNU version.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMPX_H
+# error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <sys/time.h>
+#include <bits/wordsize.h>
+
+
+#ifdef __USE_GNU
+# include <paths.h>
+# define _PATH_UTMPX   _PATH_UTMP
+# define _PATH_WTMPX   _PATH_WTMP
+#endif
+
+
+#define __UT_LINESIZE  32
+#define __UT_NAMESIZE  32
+#define __UT_HOSTSIZE  256
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmpx' below.  */
+struct __exit_status
+  {
+#ifdef __USE_GNU
+    short int e_termination;   /* Process termination status.  */
+    short int e_exit;          /* Process exit status.  */
+#else
+    short int __e_termination; /* Process termination status.  */
+    short int __e_exit;                /* Process exit status.  */
+#endif
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx
+{
+  short int ut_type;           /* Type of login.  */
+  __pid_t ut_pid;              /* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE]; /* Devicename.  */
+  char ut_id[4];               /* Inittab ID. */
+  char ut_user[__UT_NAMESIZE]; /* Username.  */
+  char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login.  */
+  struct __exit_status ut_exit;        /* Exit status of a process marked
+                                  as DEAD_PROCESS.  */
+
+/* The fields ut_session and ut_tv must be the same size when compiled
+   32- and 64-bit.  This allows files and shared memory to be shared
+   between 32- and 64-bit applications.  */
+#ifdef __WORDSIZE_TIME64_COMPAT32
+  __int32_t ut_session;                /* Session ID, used for windowing.  */
+  struct
+  {
+    __int32_t tv_sec;          /* Seconds.  */
+    __int32_t tv_usec;         /* Microseconds.  */
+  } ut_tv;                     /* Time entry was made.  */
+#else
+  long int ut_session;         /* Session ID, used for windowing.  */
+  struct timeval ut_tv;                /* Time entry was made.  */
+#endif
+  __int32_t ut_addr_v6[4];     /* Internet address of remote host.  */
+  char __glibc_reserved[20];           /* Reserved for future use.  */
+};
+
+
+/* Values for the `ut_type' field of a `struct utmpx'.  */
+#define EMPTY          0       /* No valid user accounting information.  */
+
+#ifdef __USE_GNU
+# define RUN_LVL       1       /* The system's runlevel.  */
+#endif
+#define BOOT_TIME      2       /* Time of system boot.  */
+#define NEW_TIME       3       /* Time after system clock changed.  */
+#define OLD_TIME       4       /* Time when system clock changed.  */
+
+#define INIT_PROCESS   5       /* Process spawned by the init process.  */
+#define LOGIN_PROCESS  6       /* Session leader of a logged in user.  */
+#define USER_PROCESS   7       /* Normal process.  */
+#define DEAD_PROCESS   8       /* Terminated process.  */
+
+#ifdef __USE_GNU
+# define ACCOUNTING    9       /* System accounting.  */
+#endif
diff --git a/lib/libdss-include/bits/utsname.h b/lib/libdss-include/bits/utsname.h
new file mode 100644 (file)
index 0000000..070795e
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_UTSNAME_H
+# error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead."
+#endif
+
+/* Length of the entries in `struct utsname' is 65.  */
+#define _UTSNAME_LENGTH 65
+
+/* Linux provides as additional information in the `struct utsname'
+   the name of the current domain.  Define _UTSNAME_DOMAIN_LENGTH
+   to a value != 0 to activate this entry.  */
+#define _UTSNAME_DOMAIN_LENGTH _UTSNAME_LENGTH
diff --git a/lib/libdss-include/bits/waitflags.h b/lib/libdss-include/bits/waitflags.h
new file mode 100644 (file)
index 0000000..6f505e4
--- /dev/null
@@ -0,0 +1,57 @@
+/* Definitions of flag bits for `waitpid' et al.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_WAIT_H && !defined _STDLIB_H
+# error "Never include <bits/waitflags.h> directly; use <sys/wait.h> instead."
+#endif
+
+
+/* Bits in the third argument to `waitpid'.  */
+#define        WNOHANG         1       /* Don't block waiting.  */
+#define        WUNTRACED       2       /* Report status of stopped children.  */
+
+/* Bits in the fourth argument to `waitid'.  */
+#define WSTOPPED       2       /* Report stopped child (same as WUNTRACED). */
+#define WEXITED                4       /* Report dead child.  */
+#define WCONTINUED     8       /* Report continued child.  */
+#define WNOWAIT                0x01000000 /* Don't reap, just poll status.  */
+
+#define __WNOTHREAD     0x20000000 /* Don't wait on children of other threads
+                                     in this group */
+#define __WALL         0x40000000 /* Wait for any child.  */
+#define __WCLONE       0x80000000 /* Wait for cloned process.  */
+
+/* The following values are used by the `waitid' function.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifndef __ENUM_IDTYPE_T
+# define __ENUM_IDTYPE_T 1
+
+/* The Linux kernel defines these bare, rather than an enum,
+   which causes a conflict if the include order is reversed. */
+# undef P_ALL
+# undef P_PID
+# undef P_PGID
+
+typedef enum
+{
+  P_ALL,               /* Wait for any child.  */
+  P_PID,               /* Wait for specified process.  */
+  P_PGID               /* Wait for members of process group.  */
+} idtype_t;
+# endif
+#endif
diff --git a/lib/libdss-include/bits/waitstatus.h b/lib/libdss-include/bits/waitstatus.h
new file mode 100644 (file)
index 0000000..38c33bc
--- /dev/null
@@ -0,0 +1,105 @@
+/* Definitions of status bits for `wait' et al.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_WAIT_H && !defined _STDLIB_H
+# error "Never include <bits/waitstatus.h> directly; use <sys/wait.h> instead."
+#endif
+
+
+/* Everything extant so far uses these same bits.  */
+
+
+/* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
+#define        __WEXITSTATUS(status)   (((status) & 0xff00) >> 8)
+
+/* If WIFSIGNALED(STATUS), the terminating signal.  */
+#define        __WTERMSIG(status)      ((status) & 0x7f)
+
+/* If WIFSTOPPED(STATUS), the signal that stopped the child.  */
+#define        __WSTOPSIG(status)      __WEXITSTATUS(status)
+
+/* Nonzero if STATUS indicates normal termination.  */
+#define        __WIFEXITED(status)     (__WTERMSIG(status) == 0)
+
+/* Nonzero if STATUS indicates termination by a signal.  */
+#define __WIFSIGNALED(status) \
+  (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
+
+/* Nonzero if STATUS indicates the child is stopped.  */
+#define        __WIFSTOPPED(status)    (((status) & 0xff) == 0x7f)
+
+/* Nonzero if STATUS indicates the child continued after a stop.  We only
+   define this if <bits/waitflags.h> provides the WCONTINUED flag bit.  */
+#ifdef WCONTINUED
+# define __WIFCONTINUED(status)        ((status) == __W_CONTINUED)
+#endif
+
+/* Nonzero if STATUS indicates the child dumped core.  */
+#define        __WCOREDUMP(status)     ((status) & __WCOREFLAG)
+
+/* Macros for constructing status values.  */
+#define        __W_EXITCODE(ret, sig)  ((ret) << 8 | (sig))
+#define        __W_STOPCODE(sig)       ((sig) << 8 | 0x7f)
+#define __W_CONTINUED          0xffff
+#define        __WCOREFLAG             0x80
+
+
+#ifdef __USE_MISC
+
+# include <endian.h>
+
+union wait
+  {
+    int w_status;
+    struct
+      {
+# if   __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int __w_termsig:7; /* Terminating signal.  */
+       unsigned int __w_coredump:1; /* Set if dumped core.  */
+       unsigned int __w_retcode:8; /* Return code if exited normally.  */
+       unsigned int:16;
+# endif                                /* Little endian.  */
+# if   __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int:16;
+       unsigned int __w_retcode:8;
+       unsigned int __w_coredump:1;
+       unsigned int __w_termsig:7;
+# endif                                /* Big endian.  */
+      } __wait_terminated;
+    struct
+      {
+# if   __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
+       unsigned int __w_stopsig:8; /* Stopping signal.  */
+       unsigned int:16;
+# endif                                /* Little endian.  */
+# if   __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int:16;
+       unsigned int __w_stopsig:8; /* Stopping signal.  */
+       unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
+# endif                                /* Big endian.  */
+      } __wait_stopped;
+  };
+
+# define w_termsig     __wait_terminated.__w_termsig
+# define w_coredump    __wait_terminated.__w_coredump
+# define w_retcode     __wait_terminated.__w_retcode
+# define w_stopsig     __wait_stopped.__w_stopsig
+# define w_stopval     __wait_stopped.__w_stopval
+
+#endif /* Use misc.  */
diff --git a/lib/libdss-include/bits/wchar-ldbl.h b/lib/libdss-include/bits/wchar-ldbl.h
new file mode 100644 (file)
index 0000000..d6c28c5
--- /dev/null
@@ -0,0 +1,74 @@
+/* -mlong-double-64 compatibility mode for <wchar.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _WCHAR_H
+# error "Never include <bits/wchar-ldbl.h> directly; use <wchar.h> instead."
+#endif
+
+#if defined __USE_ISOC95 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR_DECL (fwprintf);
+__LDBL_REDIR_DECL (wprintf);
+__LDBL_REDIR_DECL (swprintf);
+__LDBL_REDIR_DECL (vfwprintf);
+__LDBL_REDIR_DECL (vwprintf);
+__LDBL_REDIR_DECL (vswprintf);
+# if defined __USE_ISOC99 && !defined __USE_GNU \
+     && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf)
+__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf)
+__LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf)
+# else
+__LDBL_REDIR_DECL (fwscanf);
+__LDBL_REDIR_DECL (wscanf);
+__LDBL_REDIR_DECL (swscanf);
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR1_DECL (wcstold, wcstod);
+# if !defined __USE_GNU && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf)
+__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf)
+__LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf)
+# else
+__LDBL_REDIR_DECL (vfwscanf);
+__LDBL_REDIR_DECL (vwscanf);
+__LDBL_REDIR_DECL (vswscanf);
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (wcstold_l, wcstod_l);
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__swprintf_chk)
+__LDBL_REDIR_DECL (__vswprintf_chk)
+# if __USE_FORTIFY_LEVEL > 1
+__LDBL_REDIR_DECL (__fwprintf_chk)
+__LDBL_REDIR_DECL (__wprintf_chk)
+__LDBL_REDIR_DECL (__vfwprintf_chk)
+__LDBL_REDIR_DECL (__vwprintf_chk)
+# endif
+#endif
diff --git a/lib/libdss-include/bits/wchar.h b/lib/libdss-include/bits/wchar.h
new file mode 100644 (file)
index 0000000..54f00d5
--- /dev/null
@@ -0,0 +1,49 @@
+/* wchar_t type related definitions.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_WCHAR_H
+#define _BITS_WCHAR_H  1
+
+/* The fallback definitions, for when __WCHAR_MAX__ or __WCHAR_MIN__
+   are not defined, give the right value and type as long as both int
+   and wchar_t are 32-bit types.  Adding L'\0' to a constant value
+   ensures that the type is correct; it is necessary to use (L'\0' +
+   0) rather than just L'\0' so that the type in C++ is the promoted
+   version of wchar_t rather than the distinct wchar_t type itself.
+   Because wchar_t in preprocessor #if expressions is treated as
+   intmax_t or uintmax_t, the expression (L'\0' - 1) would have the
+   wrong value for WCHAR_MAX in such expressions and so cannot be used
+   to define __WCHAR_MAX in the unsigned case.  */
+
+#ifdef __WCHAR_MAX__
+# define __WCHAR_MAX   __WCHAR_MAX__
+#elif L'\0' - 1 > 0
+# define __WCHAR_MAX   (0xffffffffu + L'\0')
+#else
+# define __WCHAR_MAX   (0x7fffffff + L'\0')
+#endif
+
+#ifdef __WCHAR_MIN__
+# define __WCHAR_MIN   __WCHAR_MIN__
+#elif L'\0' - 1 > 0
+# define __WCHAR_MIN   (L'\0' + 0)
+#else
+# define __WCHAR_MIN   (-__WCHAR_MAX - 1)
+#endif
+
+#endif /* bits/wchar.h */
diff --git a/lib/libdss-include/bits/wchar2.h b/lib/libdss-include/bits/wchar2.h
new file mode 100644 (file)
index 0000000..ccf8dc9
--- /dev/null
@@ -0,0 +1,593 @@
+/* Checking macros for wchar functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _WCHAR_H
+# error "Never include <bits/wchar2.h> directly; use <wchar.h> instead."
+#endif
+
+
+extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
+                              const wchar_t *__restrict __s2, size_t __n,
+                              size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n),
+                               wmemcpy);
+extern wchar_t *__REDIRECT_NTH (__wmemcpy_chk_warn,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n,
+                                size_t __ns1), __wmemcpy_chk)
+     __warnattr ("wmemcpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
+               size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemcpy_chk (__s1, __s2, __n,
+                             __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmemcpy_chk_warn (__s1, __s2, __n,
+                                  __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmemcpy_alias (__s1, __s2, __n);
+}
+
+
+extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
+                               size_t __n, size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1,
+                                                  const wchar_t *__s2,
+                                                  size_t __n), wmemmove);
+extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
+                               (wchar_t *__s1, const wchar_t *__s2,
+                                size_t __n, size_t __ns1), __wmemmove_chk)
+     __warnattr ("wmemmove called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemmove_chk (__s1, __s2, __n,
+                              __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmemmove_chk_warn (__s1, __s2, __n,
+                                   __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmemmove_alias (__s1, __s2, __n);
+}
+
+
+#ifdef __USE_GNU
+extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
+                               const wchar_t *__restrict __s2, size_t __n,
+                               size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2,
+                                size_t __n), wmempcpy);
+extern wchar_t *__REDIRECT_NTH (__wmempcpy_chk_warn,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n,
+                                size_t __ns1), __wmempcpy_chk)
+     __warnattr ("wmempcpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
+                size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmempcpy_chk (__s1, __s2, __n,
+                              __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmempcpy_chk_warn (__s1, __s2, __n,
+                                   __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmempcpy_alias (__s1, __s2, __n);
+}
+#endif
+
+
+extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
+                              size_t __ns) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c,
+                                                 size_t __n), wmemset);
+extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn,
+                               (wchar_t *__s, wchar_t __c, size_t __n,
+                                size_t __ns), __wmemset_chk)
+     __warnattr ("wmemset called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n))
+{
+  if (__bos0 (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemset_chk (__s, __c, __n, __bos0 (__s) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s) / sizeof (wchar_t))
+       return __wmemset_chk_warn (__s, __c, __n,
+                                  __bos0 (__s) / sizeof (wchar_t));
+    }
+  return __wmemset_alias (__s, __c, __n);
+}
+
+
+extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __n) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcscpy);
+
+__fortify_function wchar_t *
+__NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcpcpy);
+
+__fortify_function wchar_t *
+__NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcpcpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src, size_t __n,
+                              size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcsncpy);
+extern wchar_t *__REDIRECT_NTH (__wcsncpy_chk_warn,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n, size_t __destlen), __wcsncpy_chk)
+     __warnattr ("wcsncpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wcsncpy_chk (__dest, __src, __n,
+                             __bos (__dest) / sizeof (wchar_t));
+      if (__n > __bos (__dest) / sizeof (wchar_t))
+       return __wcsncpy_chk_warn (__dest, __src, __n,
+                                  __bos (__dest) / sizeof (wchar_t));
+    }
+  return __wcsncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src, size_t __n,
+                              size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcpncpy);
+extern wchar_t *__REDIRECT_NTH (__wcpncpy_chk_warn,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n, size_t __destlen), __wcpncpy_chk)
+     __warnattr ("wcpncpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wcpncpy_chk (__dest, __src, __n,
+                             __bos (__dest) / sizeof (wchar_t));
+      if (__n > __bos (__dest) / sizeof (wchar_t))
+       return __wcpncpy_chk_warn (__dest, __src, __n,
+                                  __bos (__dest) / sizeof (wchar_t));
+    }
+  return __wcpncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcscat);
+
+__fortify_function wchar_t *
+__NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscat_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src,
+                              size_t __n, size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncat_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcsncat);
+
+__fortify_function wchar_t *
+__NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcsncat_chk (__dest, __src, __n,
+                         __bos (__dest) / sizeof (wchar_t));
+  return __wcsncat_alias (__dest, __src, __n);
+}
+
+
+extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
+                          int __flag, size_t __s_len,
+                          const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
+
+extern int __REDIRECT_NTH_LDBL (__swprintf_alias,
+                               (wchar_t *__restrict __s, size_t __n,
+                                const wchar_t *__restrict __fmt, ...),
+                               swprintf);
+
+#ifdef __va_arg_pack
+__fortify_function int
+__NTH (swprintf (wchar_t *__restrict __s, size_t __n,
+                const wchar_t *__restrict __fmt, ...))
+{
+  if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
+    return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                          __bos (__s) / sizeof (wchar_t),
+                          __fmt, __va_arg_pack ());
+  return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+/* XXX We might want to have support in gcc for swprintf.  */
+# define swprintf(s, n, ...) \
+  (__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1                       \
+   ? __swprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1,                          \
+                    __bos (s) / sizeof (wchar_t), __VA_ARGS__)               \
+   : swprintf (s, n, __VA_ARGS__))
+#endif
+
+extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
+                           int __flag, size_t __s_len,
+                           const wchar_t *__restrict __format,
+                           __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
+
+extern int __REDIRECT_NTH_LDBL (__vswprintf_alias,
+                               (wchar_t *__restrict __s, size_t __n,
+                                const wchar_t *__restrict __fmt,
+                                __gnuc_va_list __ap), vswprintf);
+
+__fortify_function int
+__NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
+                 const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
+{
+  if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
+    return __vswprintf_chk (__s, __n,  __USE_FORTIFY_LEVEL - 1,
+                           __bos (__s) / sizeof (wchar_t), __fmt, __ap);
+  return __vswprintf_alias (__s, __n, __fmt, __ap);
+}
+
+
+#if __USE_FORTIFY_LEVEL > 1
+
+extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
+                          const wchar_t *__restrict __format, ...);
+extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
+                         ...);
+extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
+                           const wchar_t *__restrict __format,
+                           __gnuc_va_list __ap);
+extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
+                          __gnuc_va_list __ap);
+
+# ifdef __va_arg_pack
+__fortify_function int
+wprintf (const wchar_t *__restrict __fmt, ...)
+{
+  return __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+
+__fortify_function int
+fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
+{
+  return __fwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define wprintf(...) \
+  __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  define fwprintf(stream, ...) \
+  __fwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# endif
+
+__fortify_function int
+vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+__fortify_function int
+vfwprintf (__FILE *__restrict __stream,
+          const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vfwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+#endif
+
+extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
+                             __FILE *__restrict __stream) __wur;
+extern wchar_t *__REDIRECT (__fgetws_alias,
+                           (wchar_t *__restrict __s, int __n,
+                            __FILE *__restrict __stream), fgetws) __wur;
+extern wchar_t *__REDIRECT (__fgetws_chk_warn,
+                           (wchar_t *__restrict __s, size_t __size, int __n,
+                            __FILE *__restrict __stream), __fgetws_chk)
+     __wur __warnattr ("fgetws called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur wchar_t *
+fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgetws_chk (__s, __bos (__s) / sizeof (wchar_t),
+                            __n, __stream);
+
+      if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
+       return __fgetws_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
+                                 __n, __stream);
+    }
+  return __fgetws_alias (__s, __n, __stream);
+}
+
+#ifdef __USE_GNU
+extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
+                                      int __n, __FILE *__restrict __stream)
+  __wur;
+extern wchar_t *__REDIRECT (__fgetws_unlocked_alias,
+                           (wchar_t *__restrict __s, int __n,
+                            __FILE *__restrict __stream), fgetws_unlocked)
+  __wur;
+extern wchar_t *__REDIRECT (__fgetws_unlocked_chk_warn,
+                           (wchar_t *__restrict __s, size_t __size, int __n,
+                            __FILE *__restrict __stream),
+                           __fgetws_unlocked_chk)
+     __wur __warnattr ("fgetws_unlocked called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur wchar_t *
+fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgetws_unlocked_chk (__s, __bos (__s) / sizeof (wchar_t),
+                                     __n, __stream);
+
+      if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
+       return __fgetws_unlocked_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
+                                          __n, __stream);
+    }
+  return __fgetws_unlocked_alias (__s, __n, __stream);
+}
+#endif
+
+
+extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
+                            mbstate_t *__restrict __p,
+                            size_t __buflen) __THROW __wur;
+extern size_t __REDIRECT_NTH (__wcrtomb_alias,
+                             (char *__restrict __s, wchar_t __wchar,
+                              mbstate_t *__restrict __ps), wcrtomb) __wur;
+
+__fortify_function __wur size_t
+__NTH (wcrtomb (char *__restrict __s, wchar_t __wchar,
+               mbstate_t *__restrict __ps))
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __WCHAR_MB_LEN_MAX     16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __WCHAR_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __WCHAR_MB_LEN_MAX > __bos (__s))
+    return __wcrtomb_chk (__s, __wchar, __ps, __bos (__s));
+  return __wcrtomb_alias (__s, __wchar, __ps);
+}
+
+
+extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsrtowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             mbsrtowcs);
+extern size_t __REDIRECT_NTH (__mbsrtowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __mbsrtowcs_chk)
+     __warnattr ("mbsrtowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
+                 size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbsrtowcs_chk (__dst, __src, __len, __ps,
+                               __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps,
+                                    __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbsrtowcs_alias (__dst, __src, __len, __ps);
+}
+
+
+extern size_t __wcsrtombs_chk (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcsrtombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             wcsrtombs);
+extern size_t __REDIRECT_NTH (__wcsrtombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __wcsrtombs_chk)
+    __warnattr ("wcsrtombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
+                 size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcsrtombs_chk (__dst, __src, __len, __ps, __bos (__dst));
+
+      if (__len > __bos (__dst))
+       return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __bos (__dst));
+    }
+  return __wcsrtombs_alias (__dst, __src, __len, __ps);
+}
+
+
+#ifdef __USE_GNU
+extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
+                               const char **__restrict __src, size_t __nmc,
+                               size_t __len, mbstate_t *__restrict __ps,
+                               size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src, size_t __nmc,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             mbsnrtowcs);
+extern size_t __REDIRECT_NTH (__mbsnrtowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src, size_t __nmc,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __mbsnrtowcs_chk)
+     __warnattr ("mbsnrtowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
+                  size_t __nmc, size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps,
+                                __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps,
+                                     __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
+}
+
+
+extern size_t __wcsnrtombs_chk (char *__restrict __dst,
+                               const wchar_t **__restrict __src,
+                               size_t __nwc, size_t __len,
+                               mbstate_t *__restrict __ps, size_t __dstlen)
+     __THROW;
+extern size_t __REDIRECT_NTH (__wcsnrtombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __nwc, size_t __len,
+                              mbstate_t *__restrict __ps), wcsnrtombs);
+extern size_t __REDIRECT_NTH (__wcsnrtombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __nwc, size_t __len,
+                              mbstate_t *__restrict __ps,
+                              size_t __dstlen), __wcsnrtombs_chk)
+     __warnattr ("wcsnrtombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
+                  size_t __nwc, size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps,
+                                __bos (__dst));
+
+      if (__len > __bos (__dst))
+       return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps,
+                                     __bos (__dst));
+    }
+  return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
+}
+#endif
diff --git a/lib/libdss-include/bits/wordsize.h b/lib/libdss-include/bits/wordsize.h
new file mode 100644 (file)
index 0000000..0944f9e
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define __WORDSIZE     64
diff --git a/lib/libdss-include/bits/xopen_lim.h b/lib/libdss-include/bits/xopen_lim.h
new file mode 100644 (file)
index 0000000..26b4fba
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <limits.h> instead.
+ */
+
+/* Additional definitions from X/Open Portability Guide, Issue 4, Version 2
+   System Interfaces and Headers, 4.16 <limits.h>
+
+   Please note only the values which are not greater than the minimum
+   stated in the standard document are listed.  The `sysconf' functions
+   should be used to obtain the actual value.  */
+
+#ifndef _XOPEN_LIM_H
+#define _XOPEN_LIM_H   1
+
+#define __need_IOV_MAX
+#include <bits/stdio_lim.h>
+
+/* We do not provide fixed values for
+
+   ARG_MAX     Maximum length of argument to the `exec' function
+               including environment data.
+
+   ATEXIT_MAX  Maximum number of functions that may be registered
+               with `atexit'.
+
+   CHILD_MAX   Maximum number of simultaneous processes per real
+               user ID.
+
+   OPEN_MAX    Maximum number of files that one process can have open
+               at anyone time.
+
+   PAGESIZE
+   PAGE_SIZE   Size of bytes of a page.
+
+   PASS_MAX    Maximum number of significant bytes in a password.
+
+   We only provide a fixed limit for
+
+   IOV_MAX     Maximum number of `iovec' structures that one process has
+               available for use with `readv' or writev'.
+
+   if this is indeed fixed by the underlying system.
+*/
+
+
+/* Maximum number of `iovec' structures that one process has available
+   for use with `readv' or writev'.  */
+#define        _XOPEN_IOV_MAX  _POSIX_UIO_MAXIOV
+
+
+/* Maximum value of `digit' in calls to the `printf' and `scanf'
+   functions.  We have no limit, so return a reasonable value.  */
+#define NL_ARGMAX      _POSIX_ARG_MAX
+
+/* Maximum number of bytes in a `LANG' name.  We have no limit.  */
+#define NL_LANGMAX     _POSIX2_LINE_MAX
+
+/* Maximum message number.  We have no limit.  */
+#define NL_MSGMAX      INT_MAX
+
+/* Maximum number of bytes in N-to-1 collation mapping.  We have no
+   limit.  */
+#define NL_NMAX                INT_MAX
+
+/* Maximum set number.  We have no limit.  */
+#define NL_SETMAX      INT_MAX
+
+/* Maximum number of bytes in a message.  We have no limit.  */
+#define NL_TEXTMAX     INT_MAX
+
+/* Default process priority.  */
+#define NZERO          20
+
+
+/* Number of bits in a word of type `int'.  */
+#ifdef INT_MAX
+# if INT_MAX == 32767
+#  define WORD_BIT     16
+# else
+#  if INT_MAX == 2147483647
+#   define WORD_BIT    32
+#  else
+/* Safe assumption.  */
+#   define WORD_BIT    64
+#  endif
+# endif
+#elif defined __INT_MAX__
+# if __INT_MAX__ == 32767
+#  define WORD_BIT     16
+# else
+#  if __INT_MAX__ == 2147483647
+#   define WORD_BIT    32
+#  else
+/* Safe assumption.  */
+#   define WORD_BIT    64
+#  endif
+# endif
+#else
+# define WORD_BIT      32
+#endif
+
+/* Number of bits in a word of type `long int'.  */
+#ifdef LONG_MAX
+# if LONG_MAX == 2147483647
+#  define LONG_BIT     32
+# else
+/* Safe assumption.  */
+#  define LONG_BIT     64
+# endif
+#elif defined __LONG_MAX__
+# if __LONG_MAX__ == 2147483647
+#  define LONG_BIT     32
+# else
+/* Safe assumption.  */
+#  define LONG_BIT     64
+# endif
+#else
+# include <bits/wordsize.h>
+# if __WORDSIZE == 64
+#  define LONG_BIT     64
+# else
+#  define LONG_BIT     32
+# endif
+#endif
+
+#endif /* bits/xopen_lim.h */
diff --git a/lib/libdss-include/bits/xtitypes.h b/lib/libdss-include/bits/xtitypes.h
new file mode 100644 (file)
index 0000000..d794cf4
--- /dev/null
@@ -0,0 +1,33 @@
+/* bits/xtitypes.h -- Define some types used by <bits/stropts.h>.  Generic.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+# error "Never include <bits/xtitypes.h> directly; use <stropts.h> instead."
+#endif
+
+#ifndef _BITS_XTITYPES_H
+#define _BITS_XTITYPES_H       1
+
+#include <bits/types.h>
+
+/* This type is used by some structs in <bits/stropts.h>.  */
+typedef __SLONGWORD_TYPE __t_scalar_t;
+typedef __ULONGWORD_TYPE __t_uscalar_t;
+
+
+#endif /* bits/xtitypes.h */
diff --git a/lib/libdss-include/byteswap.h b/lib/libdss-include/byteswap.h
new file mode 100644 (file)
index 0000000..d98618c
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BYTESWAP_H
+#define _BYTESWAP_H    1
+
+#include <features.h>
+
+/* Get the machine specific, optimized definitions.  */
+#include <bits/byteswap.h>
+
+
+/* The following definitions must all be macros since otherwise some
+   of the possible optimizations are not possible.  */
+
+/* Return a value with all bytes in the 16 bit argument swapped.  */
+#define bswap_16(x) __bswap_16 (x)
+
+/* Return a value with all bytes in the 32 bit argument swapped.  */
+#define bswap_32(x) __bswap_32 (x)
+
+/* Return a value with all bytes in the 64 bit argument swapped.  */
+#define bswap_64(x) __bswap_64 (x)
+
+#endif /* byteswap.h */
diff --git a/lib/libdss-include/complex.h b/lib/libdss-include/complex.h
new file mode 100644 (file)
index 0000000..331975e
--- /dev/null
@@ -0,0 +1,112 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99:  7.3 Complex arithmetic        <complex.h>
+ */
+
+#ifndef _COMPLEX_H
+#define _COMPLEX_H     1
+
+#include <features.h>
+
+/* Get general and ISO C99 specific information.  */
+#include <bits/mathdef.h>
+
+__BEGIN_DECLS
+
+/* We might need to add support for more compilers here.  But since ISO
+   C99 is out hopefully all maintained compilers will soon provide the data
+   types `float complex' and `double complex'.  */
+#if __GNUC_PREREQ (2, 7) && !__GNUC_PREREQ (2, 97)
+# define _Complex __complex__
+#endif
+
+#define complex                _Complex
+
+/* Narrowest imaginary unit.  This depends on the floating-point
+   evaluation method.
+   XXX This probably has to go into a gcc related file.  */
+#define _Complex_I     (__extension__ 1.0iF)
+
+/* Another more descriptive name is `I'.
+   XXX Once we have the imaginary support switch this to _Imaginary_I.  */
+#undef I
+#define I _Complex_I
+
+#if defined __USE_ISOC11 && __GNUC_PREREQ (4, 7)
+/* Macros to expand into expression of specified complex type.  */
+# define CMPLX(x, y) __builtin_complex ((double) (x), (double) (y))
+# define CMPLXF(x, y) __builtin_complex ((float) (x), (float) (y))
+# define CMPLXL(x, y) __builtin_complex ((long double) (x), (long double) (y))
+#endif
+
+/* The file <bits/cmathcalls.h> contains the prototypes for all the
+   actual math functions.  These macros are used for those prototypes,
+   so we can easily declare each function as both `name' and `__name',
+   and can declare the float versions `namef' and `__namef'.  */
+
+#define __MATHCALL(function, args)     \
+  __MATHDECL (_Mdouble_complex_,function, args)
+#define __MATHDECL(type, function, args) \
+  __MATHDECL_1(type, function, args); \
+  __MATHDECL_1(type, __CONCAT(__,function), args)
+#define __MATHDECL_1(type, function, args) \
+  extern type __MATH_PRECNAME(function) args __THROW
+
+#define _Mdouble_              double
+#define __MATH_PRECNAME(name)  name
+#include <bits/cmathcalls.h>
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+
+/* Now the float versions.  */
+#ifndef _Mfloat_
+# define _Mfloat_              float
+#endif
+#define _Mdouble_              _Mfloat_
+#define __MATH_PRECNAME(name)  name##f
+#include <bits/cmathcalls.h>
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+
+/* And the long double versions.  It is non-critical to define them
+   here unconditionally since `long double' is required in ISO C99.  */
+#if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC)  \
+    || defined __LDBL_COMPAT
+# ifdef __LDBL_COMPAT
+#  undef __MATHDECL_1
+#  define __MATHDECL_1(type, function, args) \
+  extern type __REDIRECT_NTH(__MATH_PRECNAME(function), args, function)
+# endif
+
+# ifndef _Mlong_double_
+#  define _Mlong_double_       long double
+# endif
+# define _Mdouble_             _Mlong_double_
+# define __MATH_PRECNAME(name) name##l
+# include <bits/cmathcalls.h>
+#endif
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+#undef __MATHDECL_1
+#undef __MATHDECL
+#undef __MATHCALL
+
+__END_DECLS
+
+#endif /* complex.h */
diff --git a/lib/libdss-include/cpio.h b/lib/libdss-include/cpio.h
new file mode 100644 (file)
index 0000000..9e712fe
--- /dev/null
@@ -0,0 +1,73 @@
+/* Extended cpio format from POSIX.1.
+   This file is part of the GNU C Library.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   NOTE: The canonical source of this file is maintained with the GNU cpio.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _CPIO_H
+#define _CPIO_H 1
+
+/* A cpio archive consists of a sequence of files.
+   Each file has a 76 byte header,
+   a variable length, NUL terminated filename,
+   and variable length file data.
+   A header for a filename "TRAILER!!!" indicates the end of the archive.  */
+
+/* All the fields in the header are ISO 646 (approximately ASCII) strings
+   of octal numbers, left padded, not NUL terminated.
+
+   Field Name  Length in Bytes Notes
+   c_magic     6               must be "070707"
+   c_dev       6
+   c_ino       6
+   c_mode      6               see below for value
+   c_uid       6
+   c_gid       6
+   c_nlink     6
+   c_rdev      6               only valid for chr and blk special files
+   c_mtime     11
+   c_namesize  6               count includes terminating NUL in pathname
+   c_filesize  11              must be 0 for FIFOs and directories  */
+
+/* Value for the field `c_magic'.  */
+#define MAGIC  "070707"
+
+/* Values for c_mode, OR'd together: */
+
+#define C_IRUSR                000400
+#define C_IWUSR                000200
+#define C_IXUSR                000100
+#define C_IRGRP                000040
+#define C_IWGRP                000020
+#define C_IXGRP                000010
+#define C_IROTH                000004
+#define C_IWOTH                000002
+#define C_IXOTH                000001
+
+#define C_ISUID                004000
+#define C_ISGID                002000
+#define C_ISVTX                001000
+
+#define C_ISBLK                060000
+#define C_ISCHR                020000
+#define C_ISDIR                040000
+#define C_ISFIFO       010000
+#define C_ISSOCK       0140000
+#define C_ISLNK                0120000
+#define C_ISCTG                0110000
+#define C_ISREG                0100000
+
+#endif /* cpio.h */
diff --git a/lib/libdss-include/crypt.h b/lib/libdss-include/crypt.h
new file mode 100644 (file)
index 0000000..e29e1ef
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * UFC-crypt: ultra fast crypt(3) implementation
+ *
+ * Copyright (C) 1991-2016 Free Software Foundation, Inc.
+ *
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * The GNU C Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the GNU C Library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * @(#)crypt.h 1.5 12/20/96
+ *
+ */
+
+#ifndef _CRYPT_H
+#define _CRYPT_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
+extern char *crypt (const char *__key, const char *__salt)
+     __THROW __nonnull ((1, 2));
+
+/* Setup DES tables according KEY.  */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+
+/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
+   block in place.  */
+extern void encrypt (char *__glibc_block, int __edflag)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_GNU
+/* Reentrant versions of the functions above.  The additional argument
+   points to a structure where the results are placed in.  */
+struct crypt_data
+  {
+    char keysched[16 * 8];
+    char sb0[32768];
+    char sb1[32768];
+    char sb2[32768];
+    char sb3[32768];
+    /* end-of-aligment-critical-data */
+    char crypt_3_buf[14];
+    char current_salt[2];
+    long int current_saltbits;
+    int  direction, initialized;
+  };
+
+extern char *crypt_r (const char *__key, const char *__salt,
+                     struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 2, 3));
+
+extern void setkey_r (const char *__key,
+                     struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 2));
+
+extern void encrypt_r (char *__glibc_block, int __edflag,
+                      struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 3));
+#endif
+
+__END_DECLS
+
+#endif /* crypt.h */
diff --git a/lib/libdss-include/ctype.h b/lib/libdss-include/ctype.h
new file mode 100644 (file)
index 0000000..6e2124a
--- /dev/null
@@ -0,0 +1,349 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard 7.4: Character handling        <ctype.h>
+ */
+
+#ifndef        _CTYPE_H
+#define        _CTYPE_H        1
+
+#include <features.h>
+#include <bits/types.h>
+
+__BEGIN_DECLS
+
+#ifndef _ISbit
+/* These are all the characteristics of characters.
+   If there get to be more than 16 distinct characteristics,
+   many things must be changed that use `unsigned short int's.
+
+   The characteristics are stored always in network byte order (big
+   endian).  We define the bit value interpretations here dependent on the
+   machine's byte order.  */
+
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define _ISbit(bit)  (1 << (bit))
+# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#  define _ISbit(bit)  ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
+# endif
+
+enum
+{
+  _ISupper = _ISbit (0),       /* UPPERCASE.  */
+  _ISlower = _ISbit (1),       /* lowercase.  */
+  _ISalpha = _ISbit (2),       /* Alphabetic.  */
+  _ISdigit = _ISbit (3),       /* Numeric.  */
+  _ISxdigit = _ISbit (4),      /* Hexadecimal numeric.  */
+  _ISspace = _ISbit (5),       /* Whitespace.  */
+  _ISprint = _ISbit (6),       /* Printing.  */
+  _ISgraph = _ISbit (7),       /* Graphical.  */
+  _ISblank = _ISbit (8),       /* Blank (usually SPC and TAB).  */
+  _IScntrl = _ISbit (9),       /* Control character.  */
+  _ISpunct = _ISbit (10),      /* Punctuation.  */
+  _ISalnum = _ISbit (11)       /* Alphanumeric.  */
+};
+#endif /* ! _ISbit  */
+
+/* These are defined in ctype-info.c.
+   The declarations here must match those in localeinfo.h.
+
+   In the thread-specific locale model (see `uselocale' in <locale.h>)
+   we cannot use global variables for these as was done in the past.
+   Instead, the following accessor functions return the address of
+   each variable, which is local to the current thread if multithreaded.
+
+   These point into arrays of 384, so they can be indexed by any `unsigned
+   char' value [0,255]; by EOF (-1); or by any `signed char' value
+   [-128,-1).  ISO C requires that the ctype functions work for `unsigned
+   char' values and for EOF; we also support negative `signed char' values
+   for broken old programs.  The case conversion arrays are of `int's
+   rather than `unsigned char's because tolower (EOF) must be EOF, which
+   doesn't fit into an `unsigned char'.  But today more important is that
+   the arrays are also used for multi-byte character sets.  */
+extern const unsigned short int **__ctype_b_loc (void)
+     __THROW __attribute__ ((__const__));
+extern const __int32_t **__ctype_tolower_loc (void)
+     __THROW __attribute__ ((__const__));
+extern const __int32_t **__ctype_toupper_loc (void)
+     __THROW __attribute__ ((__const__));
+
+
+#ifndef __cplusplus
+# define __isctype(c, type) \
+  ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
+#elif defined __USE_EXTERN_INLINES
+# define __isctype_f(type) \
+  __extern_inline int                                                        \
+  is##type (int __c) __THROW                                                 \
+  {                                                                          \
+    return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS##type; \
+  }
+#endif
+
+#define        __isascii(c)    (((c) & ~0x7f) == 0)    /* If C is a 7 bit value.  */
+#define        __toascii(c)    ((c) & 0x7f)            /* Mask off high bits.  */
+
+#define        __exctype(name) extern int name (int) __THROW
+
+__BEGIN_NAMESPACE_STD
+
+/* The following names are all functions:
+     int isCHARACTERISTIC(int c);
+   which return nonzero iff C has CHARACTERISTIC.
+   For the meaning of the characteristic names, see the `enum' above.  */
+__exctype (isalnum);
+__exctype (isalpha);
+__exctype (iscntrl);
+__exctype (isdigit);
+__exctype (islower);
+__exctype (isgraph);
+__exctype (isprint);
+__exctype (ispunct);
+__exctype (isspace);
+__exctype (isupper);
+__exctype (isxdigit);
+
+
+/* Return the lowercase version of C.  */
+extern int tolower (int __c) __THROW;
+
+/* Return the uppercase version of C.  */
+extern int toupper (int __c) __THROW;
+
+__END_NAMESPACE_STD
+
+
+/* ISO C99 introduced one new function.  */
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+
+__exctype (isblank);
+
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Test C for a set of character classes according to MASK.  */
+extern int isctype (int __c, int __mask) __THROW;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+
+/* Return nonzero iff C is in the ASCII set
+   (i.e., is no more than 7 bits wide).  */
+extern int isascii (int __c) __THROW;
+
+/* Return the part of C that is in the ASCII set
+   (i.e., the low-order 7 bits of C).  */
+extern int toascii (int __c) __THROW;
+
+/* These are the same as `toupper' and `tolower' except that they do not
+   check the argument for being in the range of a `char'.  */
+__exctype (_toupper);
+__exctype (_tolower);
+#endif /* Use X/Open or use misc.  */
+
+/* This code is needed for the optimized mapping functions.  */
+#define __tobody(c, f, a, args) \
+  (__extension__                                                             \
+   ({ int __res;                                                             \
+      if (sizeof (c) > 1)                                                    \
+       {                                                                     \
+         if (__builtin_constant_p (c))                                       \
+           {                                                                 \
+             int __c = (c);                                                  \
+             __res = __c < -128 || __c > 255 ? __c : (a)[__c];               \
+           }                                                                 \
+         else                                                                \
+           __res = f args;                                                   \
+       }                                                                     \
+      else                                                                   \
+       __res = (a)[(int) (c)];                                               \
+      __res; }))
+
+#if !defined __NO_CTYPE
+# ifdef __isctype_f
+__isctype_f (alnum)
+__isctype_f (alpha)
+__isctype_f (cntrl)
+__isctype_f (digit)
+__isctype_f (lower)
+__isctype_f (graph)
+__isctype_f (print)
+__isctype_f (punct)
+__isctype_f (space)
+__isctype_f (upper)
+__isctype_f (xdigit)
+#  ifdef __USE_ISOC99
+__isctype_f (blank)
+#  endif
+# elif defined __isctype
+# define isalnum(c)    __isctype((c), _ISalnum)
+# define isalpha(c)    __isctype((c), _ISalpha)
+# define iscntrl(c)    __isctype((c), _IScntrl)
+# define isdigit(c)    __isctype((c), _ISdigit)
+# define islower(c)    __isctype((c), _ISlower)
+# define isgraph(c)    __isctype((c), _ISgraph)
+# define isprint(c)    __isctype((c), _ISprint)
+# define ispunct(c)    __isctype((c), _ISpunct)
+# define isspace(c)    __isctype((c), _ISspace)
+# define isupper(c)    __isctype((c), _ISupper)
+# define isxdigit(c)   __isctype((c), _ISxdigit)
+#  ifdef __USE_ISOC99
+#   define isblank(c)  __isctype((c), _ISblank)
+#  endif
+# endif
+
+# ifdef __USE_EXTERN_INLINES
+__extern_inline int
+__NTH (tolower (int __c))
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
+}
+
+__extern_inline int
+__NTH (toupper (int __c))
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c;
+}
+# endif
+
+# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
+#  define tolower(c)   __tobody (c, tolower, *__ctype_tolower_loc (), (c))
+#  define toupper(c)   __tobody (c, toupper, *__ctype_toupper_loc (), (c))
+# endif /* Optimizing gcc */
+
+# if defined __USE_MISC || defined __USE_XOPEN
+#  define isascii(c)   __isascii (c)
+#  define toascii(c)   __toascii (c)
+
+#  define _tolower(c)  ((int) (*__ctype_tolower_loc ())[(int) (c)])
+#  define _toupper(c)  ((int) (*__ctype_toupper_loc ())[(int) (c)])
+# endif
+
+#endif /* Not __NO_CTYPE.  */
+
+
+#ifdef __USE_XOPEN2K8
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* These definitions are similar to the ones above but all functions
+   take as an argument a handle for the locale which shall be used.  */
+#  define __isctype_l(c, type, locale) \
+  ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
+
+# define __exctype_l(name)                                                   \
+  extern int name (int, __locale_t) __THROW
+
+/* The following names are all functions:
+     int isCHARACTERISTIC(int c, locale_t *locale);
+   which return nonzero iff C has CHARACTERISTIC.
+   For the meaning of the characteristic names, see the `enum' above.  */
+__exctype_l (isalnum_l);
+__exctype_l (isalpha_l);
+__exctype_l (iscntrl_l);
+__exctype_l (isdigit_l);
+__exctype_l (islower_l);
+__exctype_l (isgraph_l);
+__exctype_l (isprint_l);
+__exctype_l (ispunct_l);
+__exctype_l (isspace_l);
+__exctype_l (isupper_l);
+__exctype_l (isxdigit_l);
+
+__exctype_l (isblank_l);
+
+
+/* Return the lowercase version of C in locale L.  */
+extern int __tolower_l (int __c, __locale_t __l) __THROW;
+extern int tolower_l (int __c, __locale_t __l) __THROW;
+
+/* Return the uppercase version of C.  */
+extern int __toupper_l (int __c, __locale_t __l) __THROW;
+extern int toupper_l (int __c, __locale_t __l) __THROW;
+
+# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
+#  define __tolower_l(c, locale) \
+  __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
+#  define __toupper_l(c, locale) \
+  __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
+#  define tolower_l(c, locale) __tolower_l ((c), (locale))
+#  define toupper_l(c, locale) __toupper_l ((c), (locale))
+# endif        /* Optimizing gcc */
+
+
+# ifndef __NO_CTYPE
+#  define __isalnum_l(c,l)     __isctype_l((c), _ISalnum, (l))
+#  define __isalpha_l(c,l)     __isctype_l((c), _ISalpha, (l))
+#  define __iscntrl_l(c,l)     __isctype_l((c), _IScntrl, (l))
+#  define __isdigit_l(c,l)     __isctype_l((c), _ISdigit, (l))
+#  define __islower_l(c,l)     __isctype_l((c), _ISlower, (l))
+#  define __isgraph_l(c,l)     __isctype_l((c), _ISgraph, (l))
+#  define __isprint_l(c,l)     __isctype_l((c), _ISprint, (l))
+#  define __ispunct_l(c,l)     __isctype_l((c), _ISpunct, (l))
+#  define __isspace_l(c,l)     __isctype_l((c), _ISspace, (l))
+#  define __isupper_l(c,l)     __isctype_l((c), _ISupper, (l))
+#  define __isxdigit_l(c,l)    __isctype_l((c), _ISxdigit, (l))
+
+#  define __isblank_l(c,l)     __isctype_l((c), _ISblank, (l))
+
+#  ifdef __USE_MISC
+#   define __isascii_l(c,l)    ((l), __isascii (c))
+#   define __toascii_l(c,l)    ((l), __toascii (c))
+#  endif
+
+#  define isalnum_l(c,l)       __isalnum_l ((c), (l))
+#  define isalpha_l(c,l)       __isalpha_l ((c), (l))
+#  define iscntrl_l(c,l)       __iscntrl_l ((c), (l))
+#  define isdigit_l(c,l)       __isdigit_l ((c), (l))
+#  define islower_l(c,l)       __islower_l ((c), (l))
+#  define isgraph_l(c,l)       __isgraph_l ((c), (l))
+#  define isprint_l(c,l)       __isprint_l ((c), (l))
+#  define ispunct_l(c,l)       __ispunct_l ((c), (l))
+#  define isspace_l(c,l)       __isspace_l ((c), (l))
+#  define isupper_l(c,l)       __isupper_l ((c), (l))
+#  define isxdigit_l(c,l)      __isxdigit_l ((c), (l))
+
+#  define isblank_l(c,l)       __isblank_l ((c), (l))
+
+#  ifdef __USE_MISC
+#   define isascii_l(c,l)      __isascii_l ((c), (l))
+#   define toascii_l(c,l)      __toascii_l ((c), (l))
+#  endif
+
+# endif /* Not __NO_CTYPE.  */
+
+#endif /* Use POSIX 2008.  */
+
+__END_DECLS
+
+#endif /* ctype.h  */
diff --git a/lib/libdss-include/dirent.h b/lib/libdss-include/dirent.h
new file mode 100644 (file)
index 0000000..9a4b6bf
--- /dev/null
@@ -0,0 +1,403 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.1.2 Directory Operations      <dirent.h>
+ */
+
+#ifndef        _DIRENT_H
+#define        _DIRENT_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#ifdef __USE_XOPEN
+# ifndef __ino_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+#  else
+typedef __ino64_t ino_t;
+#  endif
+#  define __ino_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
+typedef __ino64_t ino64_t;
+#  define __ino64_t_defined
+# endif
+#endif
+
+/* This file defines `struct dirent'.
+
+   It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
+   member that gives the length of `d_name'.
+
+   It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
+   member that gives the size of the entire directory entry.
+
+   It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
+   member that gives the file offset of the next directory entry.
+
+   It defines the macro `_DIRENT_HAVE_D_TYPE' iff there is a `d_type'
+   member that gives the type of the file.
+ */
+
+#include <bits/dirent.h>
+
+#if defined __USE_MISC && !defined d_fileno
+# define d_ino d_fileno                 /* Backward compatibility.  */
+#endif
+
+/* These macros extract size information from a `struct dirent *'.
+   They may evaluate their argument multiple times, so it must not
+   have side effects.  Each of these may involve a relatively costly
+   call to `strlen' on some systems, so these values should be cached.
+
+   _D_EXACT_NAMLEN (DP)        returns the length of DP->d_name, not including
+   its terminating null character.
+
+   _D_ALLOC_NAMLEN (DP)        returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
+   that is, the allocation size needed to hold the DP->d_name string.
+   Use this macro when you don't need the exact length, just an upper bound.
+   This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
+   */
+
+#ifdef _DIRENT_HAVE_D_NAMLEN
+# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
+# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+#else
+# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
+# ifdef _DIRENT_HAVE_D_RECLEN
+#  define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
+# else
+#  define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
+                             _D_EXACT_NAMLEN (d) + 1)
+# endif
+#endif
+
+
+#ifdef __USE_MISC
+/* File types for `d_type'.  */
+enum
+  {
+    DT_UNKNOWN = 0,
+# define DT_UNKNOWN    DT_UNKNOWN
+    DT_FIFO = 1,
+# define DT_FIFO       DT_FIFO
+    DT_CHR = 2,
+# define DT_CHR                DT_CHR
+    DT_DIR = 4,
+# define DT_DIR                DT_DIR
+    DT_BLK = 6,
+# define DT_BLK                DT_BLK
+    DT_REG = 8,
+# define DT_REG                DT_REG
+    DT_LNK = 10,
+# define DT_LNK                DT_LNK
+    DT_SOCK = 12,
+# define DT_SOCK       DT_SOCK
+    DT_WHT = 14
+# define DT_WHT                DT_WHT
+  };
+
+/* Convert between stat structure types and directory types.  */
+# define IFTODT(mode)  (((mode) & 0170000) >> 12)
+# define DTTOIF(dirtype)       ((dirtype) << 12)
+#endif
+
+
+/* This is the data type of directory stream objects.
+   The actual structure is opaque to users.  */
+typedef struct __dirstream DIR;
+
+/* Open a directory stream on NAME.
+   Return a DIR stream on the directory, or NULL if it could not be opened.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern DIR *opendir (const char *__name) __nonnull ((1));
+
+#ifdef __USE_XOPEN2K8
+/* Same as opendir, but open the stream on the file descriptor FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern DIR *fdopendir (int __fd);
+#endif
+
+/* Close the directory stream DIRP.
+   Return 0 if successful, -1 if not.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int closedir (DIR *__dirp) __nonnull ((1));
+
+/* Read a directory entry from DIRP.  Return a pointer to a `struct
+   dirent' describing the entry, or NULL for EOF or error.  The
+   storage returned may be overwritten by a later readdir call on the
+   same DIR stream.
+
+   If the Large File Support API is selected we have to use the
+   appropriate interface.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern struct dirent *readdir (DIR *__dirp) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern struct dirent *__REDIRECT (readdir, (DIR *__dirp), readdir64)
+     __nonnull ((1));
+# else
+#  define readdir readdir64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
+#endif
+
+#ifdef __USE_POSIX
+/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
+   next entry.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int readdir_r (DIR *__restrict __dirp,
+                     struct dirent *__restrict __entry,
+                     struct dirent **__restrict __result)
+     __nonnull ((1, 2, 3));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (readdir_r,
+                      (DIR *__restrict __dirp,
+                       struct dirent *__restrict __entry,
+                       struct dirent **__restrict __result),
+                      readdir64_r) __nonnull ((1, 2, 3));
+#  else
+#   define readdir_r readdir64_r
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int readdir64_r (DIR *__restrict __dirp,
+                       struct dirent64 *__restrict __entry,
+                       struct dirent64 **__restrict __result)
+     __nonnull ((1, 2, 3));
+# endif
+#endif /* POSIX or misc */
+
+/* Rewind DIRP to the beginning of the directory.  */
+extern void rewinddir (DIR *__dirp) __THROW __nonnull ((1));
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# include <bits/types.h>
+
+/* Seek to position POS on DIRP.  */
+extern void seekdir (DIR *__dirp, long int __pos) __THROW __nonnull ((1));
+
+/* Return the current position of DIRP.  */
+extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K8
+
+/* Return the file descriptor used by DIRP.  */
+extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
+
+# if defined __OPTIMIZE__ && defined _DIR_dirfd
+#  define dirfd(dirp)  _DIR_dirfd (dirp)
+# endif
+
+# ifdef __USE_MISC
+#  ifndef MAXNAMLEN
+/* Get the definitions of the POSIX.1 limits.  */
+#  include <bits/posix1_lim.h>
+
+/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
+#   ifdef NAME_MAX
+#    define MAXNAMLEN  NAME_MAX
+#   else
+#    define MAXNAMLEN  255
+#   endif
+#  endif
+# endif
+
+# define __need_size_t
+# include <stddef.h>
+
+/* Scan the directory DIR, calling SELECTOR on each directory entry.
+   Entries for which SELECT returns nonzero are individually malloc'd,
+   sorted using qsort with CMP, and collected in a malloc'd array in
+   *NAMELIST.  Returns the number of entries selected, or -1 on error.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int scandir (const char *__restrict __dir,
+                   struct dirent ***__restrict __namelist,
+                   int (*__selector) (const struct dirent *),
+                   int (*__cmp) (const struct dirent **,
+                                 const struct dirent **))
+     __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (scandir,
+                      (const char *__restrict __dir,
+                       struct dirent ***__restrict __namelist,
+                       int (*__selector) (const struct dirent *),
+                       int (*__cmp) (const struct dirent **,
+                                     const struct dirent **)),
+                      scandir64) __nonnull ((1, 2));
+#  else
+#   define scandir scandir64
+#  endif
+# endif
+
+# if defined __USE_GNU && defined __USE_LARGEFILE64
+/* This function is like `scandir' but it uses the 64bit dirent structure.
+   Please note that the CMP function must now work with struct dirent64 **.  */
+extern int scandir64 (const char *__restrict __dir,
+                     struct dirent64 ***__restrict __namelist,
+                     int (*__selector) (const struct dirent64 *),
+                     int (*__cmp) (const struct dirent64 **,
+                                   const struct dirent64 **))
+     __nonnull ((1, 2));
+# endif
+
+# ifdef __USE_GNU
+/* Similar to `scandir' but a relative DIR name is interpreted relative
+   to the directory for which DFD is a descriptor.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#  ifndef __USE_FILE_OFFSET64
+extern int scandirat (int __dfd, const char *__restrict __dir,
+                     struct dirent ***__restrict __namelist,
+                     int (*__selector) (const struct dirent *),
+                     int (*__cmp) (const struct dirent **,
+                                   const struct dirent **))
+     __nonnull ((2, 3));
+#  else
+#   ifdef __REDIRECT
+extern int __REDIRECT (scandirat,
+                      (int __dfd, const char *__restrict __dir,
+                       struct dirent ***__restrict __namelist,
+                       int (*__selector) (const struct dirent *),
+                       int (*__cmp) (const struct dirent **,
+                                     const struct dirent **)),
+                      scandirat64) __nonnull ((2, 3));
+#   else
+#    define scandirat scandirat64
+#   endif
+#  endif
+
+/* This function is like `scandir' but it uses the 64bit dirent structure.
+   Please note that the CMP function must now work with struct dirent64 **.  */
+extern int scandirat64 (int __dfd, const char *__restrict __dir,
+                       struct dirent64 ***__restrict __namelist,
+                       int (*__selector) (const struct dirent64 *),
+                       int (*__cmp) (const struct dirent64 **,
+                                     const struct dirent64 **))
+     __nonnull ((2, 3));
+# endif
+
+/* Function to compare two `struct dirent's alphabetically.  */
+# ifndef __USE_FILE_OFFSET64
+extern int alphasort (const struct dirent **__e1,
+                     const struct dirent **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT_NTH (alphasort,
+                          (const struct dirent **__e1,
+                           const struct dirent **__e2),
+                          alphasort64) __attribute_pure__ __nonnull ((1, 2));
+#  else
+#   define alphasort alphasort64
+#  endif
+# endif
+
+# if defined __USE_GNU && defined __USE_LARGEFILE64
+extern int alphasort64 (const struct dirent64 **__e1,
+                       const struct dirent64 **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif /* Use XPG7.  */
+
+
+#ifdef __USE_MISC
+/* Read directory entries from FD into BUF, reading at most NBYTES.
+   Reading starts at offset *BASEP, and *BASEP is updated with the new
+   position after reading.  Returns the number of bytes read; zero when at
+   end of directory; or -1 for errors.  */
+# ifndef __USE_FILE_OFFSET64
+extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
+                               size_t __nbytes,
+                               __off_t *__restrict __basep)
+     __THROW __nonnull ((2, 4));
+# else
+#  ifdef __REDIRECT
+extern __ssize_t __REDIRECT_NTH (getdirentries,
+                                (int __fd, char *__restrict __buf,
+                                 size_t __nbytes,
+                                 __off64_t *__restrict __basep),
+                                getdirentries64) __nonnull ((2, 4));
+#  else
+#   define getdirentries getdirentries64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
+                                 size_t __nbytes,
+                                 __off64_t *__restrict __basep)
+     __THROW __nonnull ((2, 4));
+# endif
+#endif /* Use misc.  */
+
+#ifdef __USE_GNU
+/* Function to compare two `struct dirent's by name & version.  */
+# ifndef __USE_FILE_OFFSET64
+extern int versionsort (const struct dirent **__e1,
+                       const struct dirent **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT_NTH (versionsort,
+                          (const struct dirent **__e1,
+                           const struct dirent **__e2),
+                          versionsort64)
+     __attribute_pure__ __nonnull ((1, 2));
+#  else
+#   define versionsort versionsort64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int versionsort64 (const struct dirent64 **__e1,
+                         const struct dirent64 **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif /* Use GNU.  */
+
+__END_DECLS
+
+#endif /* dirent.h  */
diff --git a/lib/libdss-include/dlfcn.h b/lib/libdss-include/dlfcn.h
new file mode 100644 (file)
index 0000000..5d16dcd
--- /dev/null
@@ -0,0 +1,190 @@
+/* User functions for run-time dynamic loading.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _DLFCN_H
+#define        _DLFCN_H 1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Collect various system dependent definitions and declarations.  */
+#include <bits/dlfcn.h>
+
+
+#ifdef __USE_GNU
+/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
+   the run-time address of the symbol called NAME in the next shared
+   object is returned.  The "next" relation is defined by the order
+   the shared objects were loaded.  */
+# define RTLD_NEXT     ((void *) -1l)
+
+/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
+   the run-time address of the symbol called NAME in the global scope
+   is returned.  */
+# define RTLD_DEFAULT  ((void *) 0)
+
+
+/* Type for namespace indeces.  */
+typedef long int Lmid_t;
+
+/* Special namespace ID values.  */
+# define LM_ID_BASE    0       /* Initial namespace.  */
+# define LM_ID_NEWLM   -1      /* For dlmopen: request new namespace.  */
+#endif
+
+
+__BEGIN_DECLS
+
+/* Open the shared object FILE and map it in; return a handle that can be
+   passed to `dlsym' to get symbol values from it.  */
+extern void *dlopen (const char *__file, int __mode) __THROWNL;
+
+/* Unmap and close a shared object opened by `dlopen'.
+   The handle cannot be used again after calling `dlclose'.  */
+extern int dlclose (void *__handle) __THROWNL __nonnull ((1));
+
+/* Find the run-time address in the shared object HANDLE refers to
+   of the symbol called NAME.  */
+extern void *dlsym (void *__restrict __handle,
+                   const char *__restrict __name) __THROW __nonnull ((2));
+
+#ifdef __USE_GNU
+/* Like `dlopen', but request object to be allocated in a new namespace.  */
+extern void *dlmopen (Lmid_t __nsid, const char *__file, int __mode) __THROWNL;
+
+/* Find the run-time address in the shared object HANDLE refers to
+   of the symbol called NAME with VERSION.  */
+extern void *dlvsym (void *__restrict __handle,
+                    const char *__restrict __name,
+                    const char *__restrict __version)
+     __THROW __nonnull ((2, 3));
+#endif
+
+/* When any of the above functions fails, call this function
+   to return a string describing the error.  Each call resets
+   the error string so that a following call returns null.  */
+extern char *dlerror (void) __THROW;
+
+
+#ifdef __USE_GNU
+/* Structure containing information about object searched using
+   `dladdr'.  */
+typedef struct
+{
+  const char *dli_fname;       /* File name of defining object.  */
+  void *dli_fbase;             /* Load address of that object.  */
+  const char *dli_sname;       /* Name of nearest symbol.  */
+  void *dli_saddr;             /* Exact value of nearest symbol.  */
+} Dl_info;
+
+/* Fill in *INFO with the following information about ADDRESS.
+   Returns 0 iff no shared object's segments contain that address.  */
+extern int dladdr (const void *__address, Dl_info *__info)
+     __THROW __nonnull ((2));
+
+/* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS.  */
+extern int dladdr1 (const void *__address, Dl_info *__info,
+                   void **__extra_info, int __flags) __THROW __nonnull ((2));
+
+/* These are the possible values for the FLAGS argument to `dladdr1'.
+   This indicates what extra information is stored at *EXTRA_INFO.
+   It may also be zero, in which case the EXTRA_INFO argument is not used.  */
+enum
+  {
+    /* Matching symbol table entry (const ElfNN_Sym *).  */
+    RTLD_DL_SYMENT = 1,
+
+    /* The object containing the address (struct link_map *).  */
+    RTLD_DL_LINKMAP = 2
+  };
+
+
+/* Get information about the shared object HANDLE refers to.
+   REQUEST is from among the values below, and determines the use of ARG.
+
+   On success, returns zero.  On failure, returns -1 and records an error
+   message to be fetched with `dlerror'.  */
+extern int dlinfo (void *__restrict __handle,
+                  int __request, void *__restrict __arg)
+     __THROW __nonnull ((1, 3));
+
+/* These are the possible values for the REQUEST argument to `dlinfo'.  */
+enum
+  {
+    /* Treat ARG as `lmid_t *'; store namespace ID for HANDLE there.  */
+    RTLD_DI_LMID = 1,
+
+    /* Treat ARG as `struct link_map **';
+       store the `struct link_map *' for HANDLE there.  */
+    RTLD_DI_LINKMAP = 2,
+
+    RTLD_DI_CONFIGADDR = 3,    /* Unsupported, defined by Solaris.  */
+
+    /* Treat ARG as `Dl_serinfo *' (see below), and fill in to describe the
+       directories that will be searched for dependencies of this object.
+       RTLD_DI_SERINFOSIZE fills in just the `dls_cnt' and `dls_size'
+       entries to indicate the size of the buffer that must be passed to
+       RTLD_DI_SERINFO to fill in the full information.  */
+    RTLD_DI_SERINFO = 4,
+    RTLD_DI_SERINFOSIZE = 5,
+
+    /* Treat ARG as `char *', and store there the directory name used to
+       expand $ORIGIN in this shared object's dependency file names.  */
+    RTLD_DI_ORIGIN = 6,
+
+    RTLD_DI_PROFILENAME = 7,   /* Unsupported, defined by Solaris.  */
+    RTLD_DI_PROFILEOUT = 8,    /* Unsupported, defined by Solaris.  */
+
+    /* Treat ARG as `size_t *', and store there the TLS module ID
+       of this object's PT_TLS segment, as used in TLS relocations;
+       store zero if this object does not define a PT_TLS segment.  */
+    RTLD_DI_TLS_MODID = 9,
+
+    /* Treat ARG as `void **', and store there a pointer to the calling
+       thread's TLS block corresponding to this object's PT_TLS segment.
+       Store a null pointer if this object does not define a PT_TLS
+       segment, or if the calling thread has not allocated a block for it.  */
+    RTLD_DI_TLS_DATA = 10,
+
+    RTLD_DI_MAX = 10
+  };
+
+
+/* This is the type of elements in `Dl_serinfo', below.
+   The `dls_name' member points to space in the buffer passed to `dlinfo'.  */
+typedef struct
+{
+  char *dls_name;              /* Name of library search path directory.  */
+  unsigned int dls_flags;      /* Indicates where this directory came from. */
+} Dl_serpath;
+
+/* This is the structure that must be passed (by reference) to `dlinfo' for
+   the RTLD_DI_SERINFO and RTLD_DI_SERINFOSIZE requests.  */
+typedef struct
+{
+  size_t dls_size;             /* Size in bytes of the whole buffer.  */
+  unsigned int dls_cnt;                /* Number of elements in `dls_serpath'.  */
+  Dl_serpath dls_serpath[1];   /* Actually longer, dls_cnt elements.  */
+} Dl_serinfo;
+#endif /* __USE_GNU */
+
+
+__END_DECLS
+
+#endif /* dlfcn.h */
diff --git a/lib/libdss-include/elf.h b/lib/libdss-include/elf.h
new file mode 100644 (file)
index 0000000..c5c9423
--- /dev/null
@@ -0,0 +1,3503 @@
+/* This file defines standard ELF types, structures, and macros.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ELF_H
+#define        _ELF_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Standard ELF types.  */
+
+#include <stdint.h>
+
+/* Type for a 16-bit quantity.  */
+typedef uint16_t Elf32_Half;
+typedef uint16_t Elf64_Half;
+
+/* Types for signed and unsigned 32-bit quantities.  */
+typedef uint32_t Elf32_Word;
+typedef        int32_t  Elf32_Sword;
+typedef uint32_t Elf64_Word;
+typedef        int32_t  Elf64_Sword;
+
+/* Types for signed and unsigned 64-bit quantities.  */
+typedef uint64_t Elf32_Xword;
+typedef        int64_t  Elf32_Sxword;
+typedef uint64_t Elf64_Xword;
+typedef        int64_t  Elf64_Sxword;
+
+/* Type of addresses.  */
+typedef uint32_t Elf32_Addr;
+typedef uint64_t Elf64_Addr;
+
+/* Type of file offsets.  */
+typedef uint32_t Elf32_Off;
+typedef uint64_t Elf64_Off;
+
+/* Type for section indices, which are 16-bit quantities.  */
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+
+/* Type for version symbol information.  */
+typedef Elf32_Half Elf32_Versym;
+typedef Elf64_Half Elf64_Versym;
+
+
+/* The ELF file header.  This appears at the start of every ELF file.  */
+
+#define EI_NIDENT (16)
+
+typedef struct
+{
+  unsigned char        e_ident[EI_NIDENT];     /* Magic number and other info */
+  Elf32_Half   e_type;                 /* Object file type */
+  Elf32_Half   e_machine;              /* Architecture */
+  Elf32_Word   e_version;              /* Object file version */
+  Elf32_Addr   e_entry;                /* Entry point virtual address */
+  Elf32_Off    e_phoff;                /* Program header table file offset */
+  Elf32_Off    e_shoff;                /* Section header table file offset */
+  Elf32_Word   e_flags;                /* Processor-specific flags */
+  Elf32_Half   e_ehsize;               /* ELF header size in bytes */
+  Elf32_Half   e_phentsize;            /* Program header table entry size */
+  Elf32_Half   e_phnum;                /* Program header table entry count */
+  Elf32_Half   e_shentsize;            /* Section header table entry size */
+  Elf32_Half   e_shnum;                /* Section header table entry count */
+  Elf32_Half   e_shstrndx;             /* Section header string table index */
+} Elf32_Ehdr;
+
+typedef struct
+{
+  unsigned char        e_ident[EI_NIDENT];     /* Magic number and other info */
+  Elf64_Half   e_type;                 /* Object file type */
+  Elf64_Half   e_machine;              /* Architecture */
+  Elf64_Word   e_version;              /* Object file version */
+  Elf64_Addr   e_entry;                /* Entry point virtual address */
+  Elf64_Off    e_phoff;                /* Program header table file offset */
+  Elf64_Off    e_shoff;                /* Section header table file offset */
+  Elf64_Word   e_flags;                /* Processor-specific flags */
+  Elf64_Half   e_ehsize;               /* ELF header size in bytes */
+  Elf64_Half   e_phentsize;            /* Program header table entry size */
+  Elf64_Half   e_phnum;                /* Program header table entry count */
+  Elf64_Half   e_shentsize;            /* Section header table entry size */
+  Elf64_Half   e_shnum;                /* Section header table entry count */
+  Elf64_Half   e_shstrndx;             /* Section header string table index */
+} Elf64_Ehdr;
+
+/* Fields in the e_ident array.  The EI_* macros are indices into the
+   array.  The macros under each EI_* macro are the values the byte
+   may have.  */
+
+#define EI_MAG0                0               /* File identification byte 0 index */
+#define ELFMAG0                0x7f            /* Magic number byte 0 */
+
+#define EI_MAG1                1               /* File identification byte 1 index */
+#define ELFMAG1                'E'             /* Magic number byte 1 */
+
+#define EI_MAG2                2               /* File identification byte 2 index */
+#define ELFMAG2                'L'             /* Magic number byte 2 */
+
+#define EI_MAG3                3               /* File identification byte 3 index */
+#define ELFMAG3                'F'             /* Magic number byte 3 */
+
+/* Conglomeration of the identification bytes, for easy testing as a word.  */
+#define        ELFMAG          "\177ELF"
+#define        SELFMAG         4
+
+#define EI_CLASS       4               /* File class byte index */
+#define ELFCLASSNONE   0               /* Invalid class */
+#define ELFCLASS32     1               /* 32-bit objects */
+#define ELFCLASS64     2               /* 64-bit objects */
+#define ELFCLASSNUM    3
+
+#define EI_DATA                5               /* Data encoding byte index */
+#define ELFDATANONE    0               /* Invalid data encoding */
+#define ELFDATA2LSB    1               /* 2's complement, little endian */
+#define ELFDATA2MSB    2               /* 2's complement, big endian */
+#define ELFDATANUM     3
+
+#define EI_VERSION     6               /* File version byte index */
+                                       /* Value must be EV_CURRENT */
+
+#define EI_OSABI       7               /* OS ABI identification */
+#define ELFOSABI_NONE          0       /* UNIX System V ABI */
+#define ELFOSABI_SYSV          0       /* Alias.  */
+#define ELFOSABI_HPUX          1       /* HP-UX */
+#define ELFOSABI_NETBSD                2       /* NetBSD.  */
+#define ELFOSABI_GNU           3       /* Object uses GNU ELF extensions.  */
+#define ELFOSABI_LINUX         ELFOSABI_GNU /* Compatibility alias.  */
+#define ELFOSABI_SOLARIS       6       /* Sun Solaris.  */
+#define ELFOSABI_AIX           7       /* IBM AIX.  */
+#define ELFOSABI_IRIX          8       /* SGI Irix.  */
+#define ELFOSABI_FREEBSD       9       /* FreeBSD.  */
+#define ELFOSABI_TRU64         10      /* Compaq TRU64 UNIX.  */
+#define ELFOSABI_MODESTO       11      /* Novell Modesto.  */
+#define ELFOSABI_OPENBSD       12      /* OpenBSD.  */
+#define ELFOSABI_ARM_AEABI     64      /* ARM EABI */
+#define ELFOSABI_ARM           97      /* ARM */
+#define ELFOSABI_STANDALONE    255     /* Standalone (embedded) application */
+
+#define EI_ABIVERSION  8               /* ABI version */
+
+#define EI_PAD         9               /* Byte index of padding bytes */
+
+/* Legal values for e_type (object file type).  */
+
+#define ET_NONE                0               /* No file type */
+#define ET_REL         1               /* Relocatable file */
+#define ET_EXEC                2               /* Executable file */
+#define ET_DYN         3               /* Shared object file */
+#define ET_CORE                4               /* Core file */
+#define        ET_NUM          5               /* Number of defined types */
+#define ET_LOOS                0xfe00          /* OS-specific range start */
+#define ET_HIOS                0xfeff          /* OS-specific range end */
+#define ET_LOPROC      0xff00          /* Processor-specific range start */
+#define ET_HIPROC      0xffff          /* Processor-specific range end */
+
+/* Legal values for e_machine (architecture).  */
+
+#define EM_NONE                 0              /* No machine */
+#define EM_M32          1              /* AT&T WE 32100 */
+#define EM_SPARC        2              /* SUN SPARC */
+#define EM_386          3              /* Intel 80386 */
+#define EM_68K          4              /* Motorola m68k family */
+#define EM_88K          5              /* Motorola m88k family */
+#define EM_860          7              /* Intel 80860 */
+#define EM_MIPS                 8              /* MIPS R3000 big-endian */
+#define EM_S370                 9              /* IBM System/370 */
+#define EM_MIPS_RS3_LE 10              /* MIPS R3000 little-endian */
+
+#define EM_PARISC      15              /* HPPA */
+#define EM_VPP500      17              /* Fujitsu VPP500 */
+#define EM_SPARC32PLUS 18              /* Sun's "v8plus" */
+#define EM_960         19              /* Intel 80960 */
+#define EM_PPC         20              /* PowerPC */
+#define EM_PPC64       21              /* PowerPC 64-bit */
+#define EM_S390                22              /* IBM S390 */
+
+#define EM_V800                36              /* NEC V800 series */
+#define EM_FR20                37              /* Fujitsu FR20 */
+#define EM_RH32                38              /* TRW RH-32 */
+#define EM_RCE         39              /* Motorola RCE */
+#define EM_ARM         40              /* ARM */
+#define EM_FAKE_ALPHA  41              /* Digital Alpha */
+#define EM_SH          42              /* Hitachi SH */
+#define EM_SPARCV9     43              /* SPARC v9 64-bit */
+#define EM_TRICORE     44              /* Siemens Tricore */
+#define EM_ARC         45              /* Argonaut RISC Core */
+#define EM_H8_300      46              /* Hitachi H8/300 */
+#define EM_H8_300H     47              /* Hitachi H8/300H */
+#define EM_H8S         48              /* Hitachi H8S */
+#define EM_H8_500      49              /* Hitachi H8/500 */
+#define EM_IA_64       50              /* Intel Merced */
+#define EM_MIPS_X      51              /* Stanford MIPS-X */
+#define EM_COLDFIRE    52              /* Motorola Coldfire */
+#define EM_68HC12      53              /* Motorola M68HC12 */
+#define EM_MMA         54              /* Fujitsu MMA Multimedia Accelerator*/
+#define EM_PCP         55              /* Siemens PCP */
+#define EM_NCPU                56              /* Sony nCPU embeeded RISC */
+#define EM_NDR1                57              /* Denso NDR1 microprocessor */
+#define EM_STARCORE    58              /* Motorola Start*Core processor */
+#define EM_ME16                59              /* Toyota ME16 processor */
+#define EM_ST100       60              /* STMicroelectronic ST100 processor */
+#define EM_TINYJ       61              /* Advanced Logic Corp. Tinyj emb.fam*/
+#define EM_X86_64      62              /* AMD x86-64 architecture */
+#define EM_PDSP                63              /* Sony DSP Processor */
+
+#define EM_FX66                66              /* Siemens FX66 microcontroller */
+#define EM_ST9PLUS     67              /* STMicroelectronics ST9+ 8/16 mc */
+#define EM_ST7         68              /* STmicroelectronics ST7 8 bit mc */
+#define EM_68HC16      69              /* Motorola MC68HC16 microcontroller */
+#define EM_68HC11      70              /* Motorola MC68HC11 microcontroller */
+#define EM_68HC08      71              /* Motorola MC68HC08 microcontroller */
+#define EM_68HC05      72              /* Motorola MC68HC05 microcontroller */
+#define EM_SVX         73              /* Silicon Graphics SVx */
+#define EM_ST19                74              /* STMicroelectronics ST19 8 bit mc */
+#define EM_VAX         75              /* Digital VAX */
+#define EM_CRIS                76              /* Axis Communications 32-bit embedded processor */
+#define EM_JAVELIN     77              /* Infineon Technologies 32-bit embedded processor */
+#define EM_FIREPATH    78              /* Element 14 64-bit DSP Processor */
+#define EM_ZSP         79              /* LSI Logic 16-bit DSP Processor */
+#define EM_MMIX                80              /* Donald Knuth's educational 64-bit processor */
+#define EM_HUANY       81              /* Harvard University machine-independent object files */
+#define EM_PRISM       82              /* SiTera Prism */
+#define EM_AVR         83              /* Atmel AVR 8-bit microcontroller */
+#define EM_FR30                84              /* Fujitsu FR30 */
+#define EM_D10V                85              /* Mitsubishi D10V */
+#define EM_D30V                86              /* Mitsubishi D30V */
+#define EM_V850                87              /* NEC v850 */
+#define EM_M32R                88              /* Mitsubishi M32R */
+#define EM_MN10300     89              /* Matsushita MN10300 */
+#define EM_MN10200     90              /* Matsushita MN10200 */
+#define EM_PJ          91              /* picoJava */
+#define EM_OPENRISC    92              /* OpenRISC 32-bit embedded processor */
+#define EM_ARC_A5      93              /* ARC Cores Tangent-A5 */
+#define EM_XTENSA      94              /* Tensilica Xtensa Architecture */
+#define EM_ALTERA_NIOS2 113            /* Altera Nios II */
+#define EM_AARCH64     183             /* ARM AARCH64 */
+#define EM_TILEPRO     188             /* Tilera TILEPro */
+#define EM_MICROBLAZE  189             /* Xilinx MicroBlaze */
+#define EM_TILEGX      191             /* Tilera TILE-Gx */
+#define EM_NUM         192
+
+/* If it is necessary to assign new unofficial EM_* values, please
+   pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
+   chances of collision with official or non-GNU unofficial values.  */
+
+#define EM_ALPHA       0x9026
+
+/* Legal values for e_version (version).  */
+
+#define EV_NONE                0               /* Invalid ELF version */
+#define EV_CURRENT     1               /* Current version */
+#define EV_NUM         2
+
+/* Section header.  */
+
+typedef struct
+{
+  Elf32_Word   sh_name;                /* Section name (string tbl index) */
+  Elf32_Word   sh_type;                /* Section type */
+  Elf32_Word   sh_flags;               /* Section flags */
+  Elf32_Addr   sh_addr;                /* Section virtual addr at execution */
+  Elf32_Off    sh_offset;              /* Section file offset */
+  Elf32_Word   sh_size;                /* Section size in bytes */
+  Elf32_Word   sh_link;                /* Link to another section */
+  Elf32_Word   sh_info;                /* Additional section information */
+  Elf32_Word   sh_addralign;           /* Section alignment */
+  Elf32_Word   sh_entsize;             /* Entry size if section holds table */
+} Elf32_Shdr;
+
+typedef struct
+{
+  Elf64_Word   sh_name;                /* Section name (string tbl index) */
+  Elf64_Word   sh_type;                /* Section type */
+  Elf64_Xword  sh_flags;               /* Section flags */
+  Elf64_Addr   sh_addr;                /* Section virtual addr at execution */
+  Elf64_Off    sh_offset;              /* Section file offset */
+  Elf64_Xword  sh_size;                /* Section size in bytes */
+  Elf64_Word   sh_link;                /* Link to another section */
+  Elf64_Word   sh_info;                /* Additional section information */
+  Elf64_Xword  sh_addralign;           /* Section alignment */
+  Elf64_Xword  sh_entsize;             /* Entry size if section holds table */
+} Elf64_Shdr;
+
+/* Special section indices.  */
+
+#define SHN_UNDEF      0               /* Undefined section */
+#define SHN_LORESERVE  0xff00          /* Start of reserved indices */
+#define SHN_LOPROC     0xff00          /* Start of processor-specific */
+#define SHN_BEFORE     0xff00          /* Order section before all others
+                                          (Solaris).  */
+#define SHN_AFTER      0xff01          /* Order section after all others
+                                          (Solaris).  */
+#define SHN_HIPROC     0xff1f          /* End of processor-specific */
+#define SHN_LOOS       0xff20          /* Start of OS-specific */
+#define SHN_HIOS       0xff3f          /* End of OS-specific */
+#define SHN_ABS                0xfff1          /* Associated symbol is absolute */
+#define SHN_COMMON     0xfff2          /* Associated symbol is common */
+#define SHN_XINDEX     0xffff          /* Index is in extra table.  */
+#define SHN_HIRESERVE  0xffff          /* End of reserved indices */
+
+/* Legal values for sh_type (section type).  */
+
+#define SHT_NULL         0             /* Section header table entry unused */
+#define SHT_PROGBITS     1             /* Program data */
+#define SHT_SYMTAB       2             /* Symbol table */
+#define SHT_STRTAB       3             /* String table */
+#define SHT_RELA         4             /* Relocation entries with addends */
+#define SHT_HASH         5             /* Symbol hash table */
+#define SHT_DYNAMIC      6             /* Dynamic linking information */
+#define SHT_NOTE         7             /* Notes */
+#define SHT_NOBITS       8             /* Program space with no data (bss) */
+#define SHT_REL                  9             /* Relocation entries, no addends */
+#define SHT_SHLIB        10            /* Reserved */
+#define SHT_DYNSYM       11            /* Dynamic linker symbol table */
+#define SHT_INIT_ARRAY   14            /* Array of constructors */
+#define SHT_FINI_ARRAY   15            /* Array of destructors */
+#define SHT_PREINIT_ARRAY 16           /* Array of pre-constructors */
+#define SHT_GROUP        17            /* Section group */
+#define SHT_SYMTAB_SHNDX  18           /* Extended section indeces */
+#define        SHT_NUM           19            /* Number of defined types.  */
+#define SHT_LOOS         0x60000000    /* Start OS-specific.  */
+#define SHT_GNU_ATTRIBUTES 0x6ffffff5  /* Object attributes.  */
+#define SHT_GNU_HASH     0x6ffffff6    /* GNU-style hash table.  */
+#define SHT_GNU_LIBLIST          0x6ffffff7    /* Prelink library list */
+#define SHT_CHECKSUM     0x6ffffff8    /* Checksum for DSO content.  */
+#define SHT_LOSUNW       0x6ffffffa    /* Sun-specific low bound.  */
+#define SHT_SUNW_move    0x6ffffffa
+#define SHT_SUNW_COMDAT   0x6ffffffb
+#define SHT_SUNW_syminfo  0x6ffffffc
+#define SHT_GNU_verdef   0x6ffffffd    /* Version definition section.  */
+#define SHT_GNU_verneed          0x6ffffffe    /* Version needs section.  */
+#define SHT_GNU_versym   0x6fffffff    /* Version symbol table.  */
+#define SHT_HISUNW       0x6fffffff    /* Sun-specific high bound.  */
+#define SHT_HIOS         0x6fffffff    /* End OS-specific type */
+#define SHT_LOPROC       0x70000000    /* Start of processor-specific */
+#define SHT_HIPROC       0x7fffffff    /* End of processor-specific */
+#define SHT_LOUSER       0x80000000    /* Start of application-specific */
+#define SHT_HIUSER       0x8fffffff    /* End of application-specific */
+
+/* Legal values for sh_flags (section flags).  */
+
+#define SHF_WRITE           (1 << 0)   /* Writable */
+#define SHF_ALLOC           (1 << 1)   /* Occupies memory during execution */
+#define SHF_EXECINSTR       (1 << 2)   /* Executable */
+#define SHF_MERGE           (1 << 4)   /* Might be merged */
+#define SHF_STRINGS         (1 << 5)   /* Contains nul-terminated strings */
+#define SHF_INFO_LINK       (1 << 6)   /* `sh_info' contains SHT index */
+#define SHF_LINK_ORDER      (1 << 7)   /* Preserve order after combining */
+#define SHF_OS_NONCONFORMING (1 << 8)  /* Non-standard OS specific handling
+                                          required */
+#define SHF_GROUP           (1 << 9)   /* Section is member of a group.  */
+#define SHF_TLS                     (1 << 10)  /* Section hold thread-local data.  */
+#define SHF_COMPRESSED      (1 << 11)  /* Section with compressed data. */
+#define SHF_MASKOS          0x0ff00000 /* OS-specific.  */
+#define SHF_MASKPROC        0xf0000000 /* Processor-specific */
+#define SHF_ORDERED         (1 << 30)  /* Special ordering requirement
+                                          (Solaris).  */
+#define SHF_EXCLUDE         (1U << 31) /* Section is excluded unless
+                                          referenced or allocated (Solaris).*/
+
+/* Section compression header.  Used when SHF_COMPRESSED is set.  */
+
+typedef struct
+{
+  Elf32_Word   ch_type;        /* Compression format.  */
+  Elf32_Word   ch_size;        /* Uncompressed data size.  */
+  Elf32_Word   ch_addralign;   /* Uncompressed data alignment.  */
+} Elf32_Chdr;
+
+typedef struct
+{
+  Elf64_Word   ch_type;        /* Compression format.  */
+  Elf64_Word   ch_reserved;
+  Elf64_Xword  ch_size;        /* Uncompressed data size.  */
+  Elf64_Xword  ch_addralign;   /* Uncompressed data alignment.  */
+} Elf64_Chdr;
+
+/* Legal values for ch_type (compression algorithm).  */
+#define ELFCOMPRESS_ZLIB       1          /* ZLIB/DEFLATE algorithm.  */
+#define ELFCOMPRESS_LOOS       0x60000000 /* Start of OS-specific.  */
+#define ELFCOMPRESS_HIOS       0x6fffffff /* End of OS-specific.  */
+#define ELFCOMPRESS_LOPROC     0x70000000 /* Start of processor-specific.  */
+#define ELFCOMPRESS_HIPROC     0x7fffffff /* End of processor-specific.  */
+
+/* Section group handling.  */
+#define GRP_COMDAT     0x1             /* Mark group as COMDAT.  */
+
+/* Symbol table entry.  */
+
+typedef struct
+{
+  Elf32_Word   st_name;                /* Symbol name (string tbl index) */
+  Elf32_Addr   st_value;               /* Symbol value */
+  Elf32_Word   st_size;                /* Symbol size */
+  unsigned char        st_info;                /* Symbol type and binding */
+  unsigned char        st_other;               /* Symbol visibility */
+  Elf32_Section        st_shndx;               /* Section index */
+} Elf32_Sym;
+
+typedef struct
+{
+  Elf64_Word   st_name;                /* Symbol name (string tbl index) */
+  unsigned char        st_info;                /* Symbol type and binding */
+  unsigned char st_other;              /* Symbol visibility */
+  Elf64_Section        st_shndx;               /* Section index */
+  Elf64_Addr   st_value;               /* Symbol value */
+  Elf64_Xword  st_size;                /* Symbol size */
+} Elf64_Sym;
+
+/* The syminfo section if available contains additional information about
+   every dynamic symbol.  */
+
+typedef struct
+{
+  Elf32_Half si_boundto;               /* Direct bindings, symbol bound to */
+  Elf32_Half si_flags;                 /* Per symbol flags */
+} Elf32_Syminfo;
+
+typedef struct
+{
+  Elf64_Half si_boundto;               /* Direct bindings, symbol bound to */
+  Elf64_Half si_flags;                 /* Per symbol flags */
+} Elf64_Syminfo;
+
+/* Possible values for si_boundto.  */
+#define SYMINFO_BT_SELF                0xffff  /* Symbol bound to self */
+#define SYMINFO_BT_PARENT      0xfffe  /* Symbol bound to parent */
+#define SYMINFO_BT_LOWRESERVE  0xff00  /* Beginning of reserved entries */
+
+/* Possible bitmasks for si_flags.  */
+#define SYMINFO_FLG_DIRECT     0x0001  /* Direct bound symbol */
+#define SYMINFO_FLG_PASSTHRU   0x0002  /* Pass-thru symbol for translator */
+#define SYMINFO_FLG_COPY       0x0004  /* Symbol is a copy-reloc */
+#define SYMINFO_FLG_LAZYLOAD   0x0008  /* Symbol bound to object to be lazy
+                                          loaded */
+/* Syminfo version values.  */
+#define SYMINFO_NONE           0
+#define SYMINFO_CURRENT                1
+#define SYMINFO_NUM            2
+
+
+/* How to extract and insert information held in the st_info field.  */
+
+#define ELF32_ST_BIND(val)             (((unsigned char) (val)) >> 4)
+#define ELF32_ST_TYPE(val)             ((val) & 0xf)
+#define ELF32_ST_INFO(bind, type)      (((bind) << 4) + ((type) & 0xf))
+
+/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
+#define ELF64_ST_BIND(val)             ELF32_ST_BIND (val)
+#define ELF64_ST_TYPE(val)             ELF32_ST_TYPE (val)
+#define ELF64_ST_INFO(bind, type)      ELF32_ST_INFO ((bind), (type))
+
+/* Legal values for ST_BIND subfield of st_info (symbol binding).  */
+
+#define STB_LOCAL      0               /* Local symbol */
+#define STB_GLOBAL     1               /* Global symbol */
+#define STB_WEAK       2               /* Weak symbol */
+#define        STB_NUM         3               /* Number of defined types.  */
+#define STB_LOOS       10              /* Start of OS-specific */
+#define STB_GNU_UNIQUE 10              /* Unique symbol.  */
+#define STB_HIOS       12              /* End of OS-specific */
+#define STB_LOPROC     13              /* Start of processor-specific */
+#define STB_HIPROC     15              /* End of processor-specific */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_NOTYPE     0               /* Symbol type is unspecified */
+#define STT_OBJECT     1               /* Symbol is a data object */
+#define STT_FUNC       2               /* Symbol is a code object */
+#define STT_SECTION    3               /* Symbol associated with a section */
+#define STT_FILE       4               /* Symbol's name is file name */
+#define STT_COMMON     5               /* Symbol is a common data object */
+#define STT_TLS                6               /* Symbol is thread-local data object*/
+#define        STT_NUM         7               /* Number of defined types.  */
+#define STT_LOOS       10              /* Start of OS-specific */
+#define STT_GNU_IFUNC  10              /* Symbol is indirect code object */
+#define STT_HIOS       12              /* End of OS-specific */
+#define STT_LOPROC     13              /* Start of processor-specific */
+#define STT_HIPROC     15              /* End of processor-specific */
+
+
+/* Symbol table indices are found in the hash buckets and chain table
+   of a symbol hash table section.  This special index value indicates
+   the end of a chain, meaning no further symbols are found in that bucket.  */
+
+#define STN_UNDEF      0               /* End of a chain.  */
+
+
+/* How to extract and insert information held in the st_other field.  */
+
+#define ELF32_ST_VISIBILITY(o) ((o) & 0x03)
+
+/* For ELF64 the definitions are the same.  */
+#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
+
+/* Symbol visibility specification encoded in the st_other field.  */
+#define STV_DEFAULT    0               /* Default symbol visibility rules */
+#define STV_INTERNAL   1               /* Processor specific hidden class */
+#define STV_HIDDEN     2               /* Sym unavailable in other modules */
+#define STV_PROTECTED  3               /* Not preemptible, not exported */
+
+
+/* Relocation table entry without addend (in section of type SHT_REL).  */
+
+typedef struct
+{
+  Elf32_Addr   r_offset;               /* Address */
+  Elf32_Word   r_info;                 /* Relocation type and symbol index */
+} Elf32_Rel;
+
+/* I have seen two different definitions of the Elf64_Rel and
+   Elf64_Rela structures, so we'll leave them out until Novell (or
+   whoever) gets their act together.  */
+/* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */
+
+typedef struct
+{
+  Elf64_Addr   r_offset;               /* Address */
+  Elf64_Xword  r_info;                 /* Relocation type and symbol index */
+} Elf64_Rel;
+
+/* Relocation table entry with addend (in section of type SHT_RELA).  */
+
+typedef struct
+{
+  Elf32_Addr   r_offset;               /* Address */
+  Elf32_Word   r_info;                 /* Relocation type and symbol index */
+  Elf32_Sword  r_addend;               /* Addend */
+} Elf32_Rela;
+
+typedef struct
+{
+  Elf64_Addr   r_offset;               /* Address */
+  Elf64_Xword  r_info;                 /* Relocation type and symbol index */
+  Elf64_Sxword r_addend;               /* Addend */
+} Elf64_Rela;
+
+/* How to extract and insert information held in the r_info field.  */
+
+#define ELF32_R_SYM(val)               ((val) >> 8)
+#define ELF32_R_TYPE(val)              ((val) & 0xff)
+#define ELF32_R_INFO(sym, type)                (((sym) << 8) + ((type) & 0xff))
+
+#define ELF64_R_SYM(i)                 ((i) >> 32)
+#define ELF64_R_TYPE(i)                        ((i) & 0xffffffff)
+#define ELF64_R_INFO(sym,type)         ((((Elf64_Xword) (sym)) << 32) + (type))
+
+/* Program segment header.  */
+
+typedef struct
+{
+  Elf32_Word   p_type;                 /* Segment type */
+  Elf32_Off    p_offset;               /* Segment file offset */
+  Elf32_Addr   p_vaddr;                /* Segment virtual address */
+  Elf32_Addr   p_paddr;                /* Segment physical address */
+  Elf32_Word   p_filesz;               /* Segment size in file */
+  Elf32_Word   p_memsz;                /* Segment size in memory */
+  Elf32_Word   p_flags;                /* Segment flags */
+  Elf32_Word   p_align;                /* Segment alignment */
+} Elf32_Phdr;
+
+typedef struct
+{
+  Elf64_Word   p_type;                 /* Segment type */
+  Elf64_Word   p_flags;                /* Segment flags */
+  Elf64_Off    p_offset;               /* Segment file offset */
+  Elf64_Addr   p_vaddr;                /* Segment virtual address */
+  Elf64_Addr   p_paddr;                /* Segment physical address */
+  Elf64_Xword  p_filesz;               /* Segment size in file */
+  Elf64_Xword  p_memsz;                /* Segment size in memory */
+  Elf64_Xword  p_align;                /* Segment alignment */
+} Elf64_Phdr;
+
+/* Special value for e_phnum.  This indicates that the real number of
+   program headers is too large to fit into e_phnum.  Instead the real
+   value is in the field sh_info of section 0.  */
+
+#define PN_XNUM                0xffff
+
+/* Legal values for p_type (segment type).  */
+
+#define        PT_NULL         0               /* Program header table entry unused */
+#define PT_LOAD                1               /* Loadable program segment */
+#define PT_DYNAMIC     2               /* Dynamic linking information */
+#define PT_INTERP      3               /* Program interpreter */
+#define PT_NOTE                4               /* Auxiliary information */
+#define PT_SHLIB       5               /* Reserved */
+#define PT_PHDR                6               /* Entry for header table itself */
+#define PT_TLS         7               /* Thread-local storage segment */
+#define        PT_NUM          8               /* Number of defined types */
+#define PT_LOOS                0x60000000      /* Start of OS-specific */
+#define PT_GNU_EH_FRAME        0x6474e550      /* GCC .eh_frame_hdr segment */
+#define PT_GNU_STACK   0x6474e551      /* Indicates stack executability */
+#define PT_GNU_RELRO   0x6474e552      /* Read-only after relocation */
+#define PT_LOSUNW      0x6ffffffa
+#define PT_SUNWBSS     0x6ffffffa      /* Sun Specific segment */
+#define PT_SUNWSTACK   0x6ffffffb      /* Stack segment */
+#define PT_HISUNW      0x6fffffff
+#define PT_HIOS                0x6fffffff      /* End of OS-specific */
+#define PT_LOPROC      0x70000000      /* Start of processor-specific */
+#define PT_HIPROC      0x7fffffff      /* End of processor-specific */
+
+/* Legal values for p_flags (segment flags).  */
+
+#define PF_X           (1 << 0)        /* Segment is executable */
+#define PF_W           (1 << 1)        /* Segment is writable */
+#define PF_R           (1 << 2)        /* Segment is readable */
+#define PF_MASKOS      0x0ff00000      /* OS-specific */
+#define PF_MASKPROC    0xf0000000      /* Processor-specific */
+
+/* Legal values for note segment descriptor types for core files. */
+
+#define NT_PRSTATUS    1               /* Contains copy of prstatus struct */
+#define NT_FPREGSET    2               /* Contains copy of fpregset struct */
+#define NT_PRPSINFO    3               /* Contains copy of prpsinfo struct */
+#define NT_PRXREG      4               /* Contains copy of prxregset struct */
+#define NT_TASKSTRUCT  4               /* Contains copy of task structure */
+#define NT_PLATFORM    5               /* String from sysinfo(SI_PLATFORM) */
+#define NT_AUXV                6               /* Contains copy of auxv array */
+#define NT_GWINDOWS    7               /* Contains copy of gwindows struct */
+#define NT_ASRS                8               /* Contains copy of asrset struct */
+#define NT_PSTATUS     10              /* Contains copy of pstatus struct */
+#define NT_PSINFO      13              /* Contains copy of psinfo struct */
+#define NT_PRCRED      14              /* Contains copy of prcred struct */
+#define NT_UTSNAME     15              /* Contains copy of utsname struct */
+#define NT_LWPSTATUS   16              /* Contains copy of lwpstatus struct */
+#define NT_LWPSINFO    17              /* Contains copy of lwpinfo struct */
+#define NT_PRFPXREG    20              /* Contains copy of fprxregset struct */
+#define NT_SIGINFO     0x53494749      /* Contains copy of siginfo_t,
+                                          size might increase */
+#define NT_FILE                0x46494c45      /* Contains information about mapped
+                                          files */
+#define NT_PRXFPREG    0x46e62b7f      /* Contains copy of user_fxsr_struct */
+#define NT_PPC_VMX     0x100           /* PowerPC Altivec/VMX registers */
+#define NT_PPC_SPE     0x101           /* PowerPC SPE/EVR registers */
+#define NT_PPC_VSX     0x102           /* PowerPC VSX registers */
+#define NT_386_TLS     0x200           /* i386 TLS slots (struct user_desc) */
+#define NT_386_IOPERM  0x201           /* x86 io permission bitmap (1=deny) */
+#define NT_X86_XSTATE  0x202           /* x86 extended state using xsave */
+#define NT_S390_HIGH_GPRS      0x300   /* s390 upper register halves */
+#define NT_S390_TIMER  0x301           /* s390 timer register */
+#define NT_S390_TODCMP 0x302           /* s390 TOD clock comparator register */
+#define NT_S390_TODPREG        0x303           /* s390 TOD programmable register */
+#define NT_S390_CTRS   0x304           /* s390 control registers */
+#define NT_S390_PREFIX 0x305           /* s390 prefix register */
+#define NT_S390_LAST_BREAK     0x306   /* s390 breaking event address */
+#define NT_S390_SYSTEM_CALL    0x307   /* s390 system call restart data */
+#define NT_S390_TDB    0x308           /* s390 transaction diagnostic block */
+#define NT_ARM_VFP     0x400           /* ARM VFP/NEON registers */
+#define NT_ARM_TLS     0x401           /* ARM TLS register */
+#define NT_ARM_HW_BREAK        0x402           /* ARM hardware breakpoint registers */
+#define NT_ARM_HW_WATCH        0x403           /* ARM hardware watchpoint registers */
+
+/* Legal values for the note segment descriptor types for object files.  */
+
+#define NT_VERSION     1               /* Contains a version string.  */
+
+
+/* Dynamic section entry.  */
+
+typedef struct
+{
+  Elf32_Sword  d_tag;                  /* Dynamic entry type */
+  union
+    {
+      Elf32_Word d_val;                        /* Integer value */
+      Elf32_Addr d_ptr;                        /* Address value */
+    } d_un;
+} Elf32_Dyn;
+
+typedef struct
+{
+  Elf64_Sxword d_tag;                  /* Dynamic entry type */
+  union
+    {
+      Elf64_Xword d_val;               /* Integer value */
+      Elf64_Addr d_ptr;                        /* Address value */
+    } d_un;
+} Elf64_Dyn;
+
+/* Legal values for d_tag (dynamic entry type).  */
+
+#define DT_NULL                0               /* Marks end of dynamic section */
+#define DT_NEEDED      1               /* Name of needed library */
+#define DT_PLTRELSZ    2               /* Size in bytes of PLT relocs */
+#define DT_PLTGOT      3               /* Processor defined value */
+#define DT_HASH                4               /* Address of symbol hash table */
+#define DT_STRTAB      5               /* Address of string table */
+#define DT_SYMTAB      6               /* Address of symbol table */
+#define DT_RELA                7               /* Address of Rela relocs */
+#define DT_RELASZ      8               /* Total size of Rela relocs */
+#define DT_RELAENT     9               /* Size of one Rela reloc */
+#define DT_STRSZ       10              /* Size of string table */
+#define DT_SYMENT      11              /* Size of one symbol table entry */
+#define DT_INIT                12              /* Address of init function */
+#define DT_FINI                13              /* Address of termination function */
+#define DT_SONAME      14              /* Name of shared object */
+#define DT_RPATH       15              /* Library search path (deprecated) */
+#define DT_SYMBOLIC    16              /* Start symbol search here */
+#define DT_REL         17              /* Address of Rel relocs */
+#define DT_RELSZ       18              /* Total size of Rel relocs */
+#define DT_RELENT      19              /* Size of one Rel reloc */
+#define DT_PLTREL      20              /* Type of reloc in PLT */
+#define DT_DEBUG       21              /* For debugging; unspecified */
+#define DT_TEXTREL     22              /* Reloc might modify .text */
+#define DT_JMPREL      23              /* Address of PLT relocs */
+#define        DT_BIND_NOW     24              /* Process relocations of object */
+#define        DT_INIT_ARRAY   25              /* Array with addresses of init fct */
+#define        DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
+#define        DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
+#define        DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
+#define DT_RUNPATH     29              /* Library search path */
+#define DT_FLAGS       30              /* Flags for the object being loaded */
+#define DT_ENCODING    32              /* Start of encoded range */
+#define DT_PREINIT_ARRAY 32            /* Array with addresses of preinit fct*/
+#define DT_PREINIT_ARRAYSZ 33          /* size in bytes of DT_PREINIT_ARRAY */
+#define        DT_NUM          34              /* Number used */
+#define DT_LOOS                0x6000000d      /* Start of OS-specific */
+#define DT_HIOS                0x6ffff000      /* End of OS-specific */
+#define DT_LOPROC      0x70000000      /* Start of processor-specific */
+#define DT_HIPROC      0x7fffffff      /* End of processor-specific */
+#define        DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
+
+/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
+   Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
+   approach.  */
+#define DT_VALRNGLO    0x6ffffd00
+#define DT_GNU_PRELINKED 0x6ffffdf5    /* Prelinking timestamp */
+#define DT_GNU_CONFLICTSZ 0x6ffffdf6   /* Size of conflict section */
+#define DT_GNU_LIBLISTSZ 0x6ffffdf7    /* Size of library list */
+#define DT_CHECKSUM    0x6ffffdf8
+#define DT_PLTPADSZ    0x6ffffdf9
+#define DT_MOVEENT     0x6ffffdfa
+#define DT_MOVESZ      0x6ffffdfb
+#define DT_FEATURE_1   0x6ffffdfc      /* Feature selection (DTF_*).  */
+#define DT_POSFLAG_1   0x6ffffdfd      /* Flags for DT_* entries, effecting
+                                          the following DT_* entry.  */
+#define DT_SYMINSZ     0x6ffffdfe      /* Size of syminfo table (in bytes) */
+#define DT_SYMINENT    0x6ffffdff      /* Entry size of syminfo */
+#define DT_VALRNGHI    0x6ffffdff
+#define DT_VALTAGIDX(tag)      (DT_VALRNGHI - (tag))   /* Reverse order! */
+#define DT_VALNUM 12
+
+/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
+   Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
+
+   If any adjustment is made to the ELF object after it has been
+   built these entries will need to be adjusted.  */
+#define DT_ADDRRNGLO   0x6ffffe00
+#define DT_GNU_HASH    0x6ffffef5      /* GNU-style hash table.  */
+#define DT_TLSDESC_PLT 0x6ffffef6
+#define DT_TLSDESC_GOT 0x6ffffef7
+#define DT_GNU_CONFLICT        0x6ffffef8      /* Start of conflict section */
+#define DT_GNU_LIBLIST 0x6ffffef9      /* Library list */
+#define DT_CONFIG      0x6ffffefa      /* Configuration information.  */
+#define DT_DEPAUDIT    0x6ffffefb      /* Dependency auditing.  */
+#define DT_AUDIT       0x6ffffefc      /* Object auditing.  */
+#define        DT_PLTPAD       0x6ffffefd      /* PLT padding.  */
+#define        DT_MOVETAB      0x6ffffefe      /* Move table.  */
+#define DT_SYMINFO     0x6ffffeff      /* Syminfo table.  */
+#define DT_ADDRRNGHI   0x6ffffeff
+#define DT_ADDRTAGIDX(tag)     (DT_ADDRRNGHI - (tag))  /* Reverse order! */
+#define DT_ADDRNUM 11
+
+/* The versioning entry types.  The next are defined as part of the
+   GNU extension.  */
+#define DT_VERSYM      0x6ffffff0
+
+#define DT_RELACOUNT   0x6ffffff9
+#define DT_RELCOUNT    0x6ffffffa
+
+/* These were chosen by Sun.  */
+#define DT_FLAGS_1     0x6ffffffb      /* State flags, see DF_1_* below.  */
+#define        DT_VERDEF       0x6ffffffc      /* Address of version definition
+                                          table */
+#define        DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
+#define        DT_VERNEED      0x6ffffffe      /* Address of table with needed
+                                          versions */
+#define        DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
+#define DT_VERSIONTAGIDX(tag)  (DT_VERNEEDNUM - (tag)) /* Reverse order! */
+#define DT_VERSIONTAGNUM 16
+
+/* Sun added these machine-independent extensions in the "processor-specific"
+   range.  Be compatible.  */
+#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
+#define DT_FILTER       0x7fffffff      /* Shared object to get values from */
+#define DT_EXTRATAGIDX(tag)    ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
+#define DT_EXTRANUM    3
+
+/* Values of `d_un.d_val' in the DT_FLAGS entry.  */
+#define DF_ORIGIN      0x00000001      /* Object may use DF_ORIGIN */
+#define DF_SYMBOLIC    0x00000002      /* Symbol resolutions starts here */
+#define DF_TEXTREL     0x00000004      /* Object contains text relocations */
+#define DF_BIND_NOW    0x00000008      /* No lazy binding for this object */
+#define DF_STATIC_TLS  0x00000010      /* Module uses the static TLS model */
+
+/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
+   entry in the dynamic section.  */
+#define DF_1_NOW       0x00000001      /* Set RTLD_NOW for this object.  */
+#define DF_1_GLOBAL    0x00000002      /* Set RTLD_GLOBAL for this object.  */
+#define DF_1_GROUP     0x00000004      /* Set RTLD_GROUP for this object.  */
+#define DF_1_NODELETE  0x00000008      /* Set RTLD_NODELETE for this object.*/
+#define DF_1_LOADFLTR  0x00000010      /* Trigger filtee loading at runtime.*/
+#define DF_1_INITFIRST 0x00000020      /* Set RTLD_INITFIRST for this object*/
+#define DF_1_NOOPEN    0x00000040      /* Set RTLD_NOOPEN for this object.  */
+#define DF_1_ORIGIN    0x00000080      /* $ORIGIN must be handled.  */
+#define DF_1_DIRECT    0x00000100      /* Direct binding enabled.  */
+#define DF_1_TRANS     0x00000200
+#define DF_1_INTERPOSE 0x00000400      /* Object is used to interpose.  */
+#define DF_1_NODEFLIB  0x00000800      /* Ignore default lib search path.  */
+#define DF_1_NODUMP    0x00001000      /* Object can't be dldump'ed.  */
+#define DF_1_CONFALT   0x00002000      /* Configuration alternative created.*/
+#define DF_1_ENDFILTEE 0x00004000      /* Filtee terminates filters search. */
+#define        DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
+#define        DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
+#define        DF_1_NODIRECT   0x00020000      /* Object has no-direct binding. */
+#define        DF_1_IGNMULDEF  0x00040000
+#define        DF_1_NOKSYMS    0x00080000
+#define        DF_1_NOHDR      0x00100000
+#define        DF_1_EDITED     0x00200000      /* Object is modified after built.  */
+#define        DF_1_NORELOC    0x00400000
+#define        DF_1_SYMINTPOSE 0x00800000      /* Object has individual interposers.  */
+#define        DF_1_GLOBAUDIT  0x01000000      /* Global auditing required.  */
+#define        DF_1_SINGLETON  0x02000000      /* Singleton symbols are used.  */
+
+/* Flags for the feature selection in DT_FEATURE_1.  */
+#define DTF_1_PARINIT  0x00000001
+#define DTF_1_CONFEXP  0x00000002
+
+/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
+#define DF_P1_LAZYLOAD 0x00000001      /* Lazyload following object.  */
+#define DF_P1_GROUPPERM        0x00000002      /* Symbols from next object are not
+                                          generally available.  */
+
+/* Version definition sections.  */
+
+typedef struct
+{
+  Elf32_Half   vd_version;             /* Version revision */
+  Elf32_Half   vd_flags;               /* Version information */
+  Elf32_Half   vd_ndx;                 /* Version Index */
+  Elf32_Half   vd_cnt;                 /* Number of associated aux entries */
+  Elf32_Word   vd_hash;                /* Version name hash value */
+  Elf32_Word   vd_aux;                 /* Offset in bytes to verdaux array */
+  Elf32_Word   vd_next;                /* Offset in bytes to next verdef
+                                          entry */
+} Elf32_Verdef;
+
+typedef struct
+{
+  Elf64_Half   vd_version;             /* Version revision */
+  Elf64_Half   vd_flags;               /* Version information */
+  Elf64_Half   vd_ndx;                 /* Version Index */
+  Elf64_Half   vd_cnt;                 /* Number of associated aux entries */
+  Elf64_Word   vd_hash;                /* Version name hash value */
+  Elf64_Word   vd_aux;                 /* Offset in bytes to verdaux array */
+  Elf64_Word   vd_next;                /* Offset in bytes to next verdef
+                                          entry */
+} Elf64_Verdef;
+
+
+/* Legal values for vd_version (version revision).  */
+#define VER_DEF_NONE   0               /* No version */
+#define VER_DEF_CURRENT        1               /* Current version */
+#define VER_DEF_NUM    2               /* Given version number */
+
+/* Legal values for vd_flags (version information flags).  */
+#define VER_FLG_BASE   0x1             /* Version definition of file itself */
+#define VER_FLG_WEAK   0x2             /* Weak version identifier */
+
+/* Versym symbol index values.  */
+#define        VER_NDX_LOCAL           0       /* Symbol is local.  */
+#define        VER_NDX_GLOBAL          1       /* Symbol is global.  */
+#define        VER_NDX_LORESERVE       0xff00  /* Beginning of reserved entries.  */
+#define        VER_NDX_ELIMINATE       0xff01  /* Symbol is to be eliminated.  */
+
+/* Auxialiary version information.  */
+
+typedef struct
+{
+  Elf32_Word   vda_name;               /* Version or dependency names */
+  Elf32_Word   vda_next;               /* Offset in bytes to next verdaux
+                                          entry */
+} Elf32_Verdaux;
+
+typedef struct
+{
+  Elf64_Word   vda_name;               /* Version or dependency names */
+  Elf64_Word   vda_next;               /* Offset in bytes to next verdaux
+                                          entry */
+} Elf64_Verdaux;
+
+
+/* Version dependency section.  */
+
+typedef struct
+{
+  Elf32_Half   vn_version;             /* Version of structure */
+  Elf32_Half   vn_cnt;                 /* Number of associated aux entries */
+  Elf32_Word   vn_file;                /* Offset of filename for this
+                                          dependency */
+  Elf32_Word   vn_aux;                 /* Offset in bytes to vernaux array */
+  Elf32_Word   vn_next;                /* Offset in bytes to next verneed
+                                          entry */
+} Elf32_Verneed;
+
+typedef struct
+{
+  Elf64_Half   vn_version;             /* Version of structure */
+  Elf64_Half   vn_cnt;                 /* Number of associated aux entries */
+  Elf64_Word   vn_file;                /* Offset of filename for this
+                                          dependency */
+  Elf64_Word   vn_aux;                 /* Offset in bytes to vernaux array */
+  Elf64_Word   vn_next;                /* Offset in bytes to next verneed
+                                          entry */
+} Elf64_Verneed;
+
+
+/* Legal values for vn_version (version revision).  */
+#define VER_NEED_NONE   0              /* No version */
+#define VER_NEED_CURRENT 1             /* Current version */
+#define VER_NEED_NUM    2              /* Given version number */
+
+/* Auxiliary needed version information.  */
+
+typedef struct
+{
+  Elf32_Word   vna_hash;               /* Hash value of dependency name */
+  Elf32_Half   vna_flags;              /* Dependency specific information */
+  Elf32_Half   vna_other;              /* Unused */
+  Elf32_Word   vna_name;               /* Dependency name string offset */
+  Elf32_Word   vna_next;               /* Offset in bytes to next vernaux
+                                          entry */
+} Elf32_Vernaux;
+
+typedef struct
+{
+  Elf64_Word   vna_hash;               /* Hash value of dependency name */
+  Elf64_Half   vna_flags;              /* Dependency specific information */
+  Elf64_Half   vna_other;              /* Unused */
+  Elf64_Word   vna_name;               /* Dependency name string offset */
+  Elf64_Word   vna_next;               /* Offset in bytes to next vernaux
+                                          entry */
+} Elf64_Vernaux;
+
+
+/* Legal values for vna_flags.  */
+#define VER_FLG_WEAK   0x2             /* Weak version identifier */
+
+
+/* Auxiliary vector.  */
+
+/* This vector is normally only used by the program interpreter.  The
+   usual definition in an ABI supplement uses the name auxv_t.  The
+   vector is not usually defined in a standard <elf.h> file, but it
+   can't hurt.  We rename it to avoid conflicts.  The sizes of these
+   types are an arrangement between the exec server and the program
+   interpreter, so we don't fully specify them here.  */
+
+typedef struct
+{
+  uint32_t a_type;             /* Entry type */
+  union
+    {
+      uint32_t a_val;          /* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+        though, since it does not work when using 32-bit definitions
+        on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf32_auxv_t;
+
+typedef struct
+{
+  uint64_t a_type;             /* Entry type */
+  union
+    {
+      uint64_t a_val;          /* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+        though, since it does not work when using 32-bit definitions
+        on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf64_auxv_t;
+
+#include <bits/auxv.h>
+/* Note section contents.  Each entry in the note section begins with
+   a header of a fixed form.  */
+
+typedef struct
+{
+  Elf32_Word n_namesz;                 /* Length of the note's name.  */
+  Elf32_Word n_descsz;                 /* Length of the note's descriptor.  */
+  Elf32_Word n_type;                   /* Type of the note.  */
+} Elf32_Nhdr;
+
+typedef struct
+{
+  Elf64_Word n_namesz;                 /* Length of the note's name.  */
+  Elf64_Word n_descsz;                 /* Length of the note's descriptor.  */
+  Elf64_Word n_type;                   /* Type of the note.  */
+} Elf64_Nhdr;
+
+/* Known names of notes.  */
+
+/* Solaris entries in the note section have this name.  */
+#define ELF_NOTE_SOLARIS       "SUNW Solaris"
+
+/* Note entries for GNU systems have this name.  */
+#define ELF_NOTE_GNU           "GNU"
+
+
+/* Defined types of notes for Solaris.  */
+
+/* Value of descriptor (one word) is desired pagesize for the binary.  */
+#define ELF_NOTE_PAGESIZE_HINT 1
+
+
+/* Defined note types for GNU systems.  */
+
+/* ABI information.  The descriptor consists of words:
+   word 0: OS descriptor
+   word 1: major version of the ABI
+   word 2: minor version of the ABI
+   word 3: subminor version of the ABI
+*/
+#define NT_GNU_ABI_TAG 1
+#define ELF_NOTE_ABI   NT_GNU_ABI_TAG /* Old name.  */
+
+/* Known OSes.  These values can appear in word 0 of an
+   NT_GNU_ABI_TAG note section entry.  */
+#define ELF_NOTE_OS_LINUX      0
+#define ELF_NOTE_OS_GNU                1
+#define ELF_NOTE_OS_SOLARIS2   2
+#define ELF_NOTE_OS_FREEBSD    3
+
+/* Synthetic hwcap information.  The descriptor begins with two words:
+   word 0: number of entries
+   word 1: bitmask of enabled entries
+   Then follow variable-length entries, one byte followed by a
+   '\0'-terminated hwcap name string.  The byte gives the bit
+   number to test if enabled, (1U << bit) & bitmask.  */
+#define NT_GNU_HWCAP   2
+
+/* Build ID bits as generated by ld --build-id.
+   The descriptor consists of any nonzero number of bytes.  */
+#define NT_GNU_BUILD_ID        3
+
+/* Version note generated by GNU gold containing a version string.  */
+#define NT_GNU_GOLD_VERSION    4
+
+
+/* Move records.  */
+typedef struct
+{
+  Elf32_Xword m_value;         /* Symbol value.  */
+  Elf32_Word m_info;           /* Size and index.  */
+  Elf32_Word m_poffset;                /* Symbol offset.  */
+  Elf32_Half m_repeat;         /* Repeat count.  */
+  Elf32_Half m_stride;         /* Stride info.  */
+} Elf32_Move;
+
+typedef struct
+{
+  Elf64_Xword m_value;         /* Symbol value.  */
+  Elf64_Xword m_info;          /* Size and index.  */
+  Elf64_Xword m_poffset;       /* Symbol offset.  */
+  Elf64_Half m_repeat;         /* Repeat count.  */
+  Elf64_Half m_stride;         /* Stride info.  */
+} Elf64_Move;
+
+/* Macro to construct move records.  */
+#define ELF32_M_SYM(info)      ((info) >> 8)
+#define ELF32_M_SIZE(info)     ((unsigned char) (info))
+#define ELF32_M_INFO(sym, size)        (((sym) << 8) + (unsigned char) (size))
+
+#define ELF64_M_SYM(info)      ELF32_M_SYM (info)
+#define ELF64_M_SIZE(info)     ELF32_M_SIZE (info)
+#define ELF64_M_INFO(sym, size)        ELF32_M_INFO (sym, size)
+
+
+/* Motorola 68k specific definitions.  */
+
+/* Values for Elf32_Ehdr.e_flags.  */
+#define EF_CPU32       0x00810000
+
+/* m68k relocs.  */
+
+#define R_68K_NONE     0               /* No reloc */
+#define R_68K_32       1               /* Direct 32 bit  */
+#define R_68K_16       2               /* Direct 16 bit  */
+#define R_68K_8                3               /* Direct 8 bit  */
+#define R_68K_PC32     4               /* PC relative 32 bit */
+#define R_68K_PC16     5               /* PC relative 16 bit */
+#define R_68K_PC8      6               /* PC relative 8 bit */
+#define R_68K_GOT32    7               /* 32 bit PC relative GOT entry */
+#define R_68K_GOT16    8               /* 16 bit PC relative GOT entry */
+#define R_68K_GOT8     9               /* 8 bit PC relative GOT entry */
+#define R_68K_GOT32O   10              /* 32 bit GOT offset */
+#define R_68K_GOT16O   11              /* 16 bit GOT offset */
+#define R_68K_GOT8O    12              /* 8 bit GOT offset */
+#define R_68K_PLT32    13              /* 32 bit PC relative PLT address */
+#define R_68K_PLT16    14              /* 16 bit PC relative PLT address */
+#define R_68K_PLT8     15              /* 8 bit PC relative PLT address */
+#define R_68K_PLT32O   16              /* 32 bit PLT offset */
+#define R_68K_PLT16O   17              /* 16 bit PLT offset */
+#define R_68K_PLT8O    18              /* 8 bit PLT offset */
+#define R_68K_COPY     19              /* Copy symbol at runtime */
+#define R_68K_GLOB_DAT 20              /* Create GOT entry */
+#define R_68K_JMP_SLOT 21              /* Create PLT entry */
+#define R_68K_RELATIVE 22              /* Adjust by program base */
+#define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
+#define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
+#define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
+#define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
+#define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
+#define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
+#define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
+#define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
+#define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
+#define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
+#define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
+#define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
+#define R_68K_TLS_LE32      37          /* 32 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_LE16      38          /* 16 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_LE8       39          /* 8 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
+#define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
+#define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
+/* Keep this the last entry.  */
+#define R_68K_NUM      43
+
+/* Intel 80386 specific definitions.  */
+
+/* i386 relocs.  */
+
+#define R_386_NONE        0            /* No reloc */
+#define R_386_32          1            /* Direct 32 bit  */
+#define R_386_PC32        2            /* PC relative 32 bit */
+#define R_386_GOT32       3            /* 32 bit GOT entry */
+#define R_386_PLT32       4            /* 32 bit PLT address */
+#define R_386_COPY        5            /* Copy symbol at runtime */
+#define R_386_GLOB_DAT    6            /* Create GOT entry */
+#define R_386_JMP_SLOT    7            /* Create PLT entry */
+#define R_386_RELATIVE    8            /* Adjust by program base */
+#define R_386_GOTOFF      9            /* 32 bit offset to GOT */
+#define R_386_GOTPC       10           /* 32 bit PC relative offset to GOT */
+#define R_386_32PLT       11
+#define R_386_TLS_TPOFF           14           /* Offset in static TLS block */
+#define R_386_TLS_IE      15           /* Address of GOT entry for static TLS
+                                          block offset */
+#define R_386_TLS_GOTIE           16           /* GOT entry for static TLS block
+                                          offset */
+#define R_386_TLS_LE      17           /* Offset relative to static TLS
+                                          block */
+#define R_386_TLS_GD      18           /* Direct 32 bit for GNU version of
+                                          general dynamic thread local data */
+#define R_386_TLS_LDM     19           /* Direct 32 bit for GNU version of
+                                          local dynamic thread local data
+                                          in LE code */
+#define R_386_16          20
+#define R_386_PC16        21
+#define R_386_8                   22
+#define R_386_PC8         23
+#define R_386_TLS_GD_32           24           /* Direct 32 bit for general dynamic
+                                          thread local data */
+#define R_386_TLS_GD_PUSH  25          /* Tag for pushl in GD TLS code */
+#define R_386_TLS_GD_CALL  26          /* Relocation for call to
+                                          __tls_get_addr() */
+#define R_386_TLS_GD_POP   27          /* Tag for popl in GD TLS code */
+#define R_386_TLS_LDM_32   28          /* Direct 32 bit for local dynamic
+                                          thread local data in LE code */
+#define R_386_TLS_LDM_PUSH 29          /* Tag for pushl in LDM TLS code */
+#define R_386_TLS_LDM_CALL 30          /* Relocation for call to
+                                          __tls_get_addr() in LDM code */
+#define R_386_TLS_LDM_POP  31          /* Tag for popl in LDM TLS code */
+#define R_386_TLS_LDO_32   32          /* Offset relative to TLS block */
+#define R_386_TLS_IE_32           33           /* GOT entry for negated static TLS
+                                          block offset */
+#define R_386_TLS_LE_32           34           /* Negated offset relative to static
+                                          TLS block */
+#define R_386_TLS_DTPMOD32 35          /* ID of module containing symbol */
+#define R_386_TLS_DTPOFF32 36          /* Offset in TLS block */
+#define R_386_TLS_TPOFF32  37          /* Negated offset in static TLS block */
+#define R_386_SIZE32      38           /* 32-bit symbol size */
+#define R_386_TLS_GOTDESC  39          /* GOT offset for TLS descriptor.  */
+#define R_386_TLS_DESC_CALL 40         /* Marker of call through TLS
+                                          descriptor for
+                                          relaxation.  */
+#define R_386_TLS_DESC     41          /* TLS descriptor containing
+                                          pointer to code and to
+                                          argument, returning the TLS
+                                          offset for the symbol.  */
+#define R_386_IRELATIVE           42           /* Adjust indirectly by program base */
+/* Keep this the last entry.  */
+#define R_386_NUM         43
+
+/* SUN SPARC specific definitions.  */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_SPARC_REGISTER     13      /* Global register reserved to app. */
+
+/* Values for Elf64_Ehdr.e_flags.  */
+
+#define EF_SPARCV9_MM          3
+#define EF_SPARCV9_TSO         0
+#define EF_SPARCV9_PSO         1
+#define EF_SPARCV9_RMO         2
+#define EF_SPARC_LEDATA                0x800000 /* little endian data */
+#define EF_SPARC_EXT_MASK      0xFFFF00
+#define EF_SPARC_32PLUS                0x000100 /* generic V8+ features */
+#define EF_SPARC_SUN_US1       0x000200 /* Sun UltraSPARC1 extensions */
+#define EF_SPARC_HAL_R1                0x000400 /* HAL R1 extensions */
+#define EF_SPARC_SUN_US3       0x000800 /* Sun UltraSPARCIII extensions */
+
+/* SPARC relocs.  */
+
+#define R_SPARC_NONE           0       /* No reloc */
+#define R_SPARC_8              1       /* Direct 8 bit */
+#define R_SPARC_16             2       /* Direct 16 bit */
+#define R_SPARC_32             3       /* Direct 32 bit */
+#define R_SPARC_DISP8          4       /* PC relative 8 bit */
+#define R_SPARC_DISP16         5       /* PC relative 16 bit */
+#define R_SPARC_DISP32         6       /* PC relative 32 bit */
+#define R_SPARC_WDISP30                7       /* PC relative 30 bit shifted */
+#define R_SPARC_WDISP22                8       /* PC relative 22 bit shifted */
+#define R_SPARC_HI22           9       /* High 22 bit */
+#define R_SPARC_22             10      /* Direct 22 bit */
+#define R_SPARC_13             11      /* Direct 13 bit */
+#define R_SPARC_LO10           12      /* Truncated 10 bit */
+#define R_SPARC_GOT10          13      /* Truncated 10 bit GOT entry */
+#define R_SPARC_GOT13          14      /* 13 bit GOT entry */
+#define R_SPARC_GOT22          15      /* 22 bit GOT entry shifted */
+#define R_SPARC_PC10           16      /* PC relative 10 bit truncated */
+#define R_SPARC_PC22           17      /* PC relative 22 bit shifted */
+#define R_SPARC_WPLT30         18      /* 30 bit PC relative PLT address */
+#define R_SPARC_COPY           19      /* Copy symbol at runtime */
+#define R_SPARC_GLOB_DAT       20      /* Create GOT entry */
+#define R_SPARC_JMP_SLOT       21      /* Create PLT entry */
+#define R_SPARC_RELATIVE       22      /* Adjust by program base */
+#define R_SPARC_UA32           23      /* Direct 32 bit unaligned */
+
+/* Additional Sparc64 relocs.  */
+
+#define R_SPARC_PLT32          24      /* Direct 32 bit ref to PLT entry */
+#define R_SPARC_HIPLT22                25      /* High 22 bit PLT entry */
+#define R_SPARC_LOPLT10                26      /* Truncated 10 bit PLT entry */
+#define R_SPARC_PCPLT32                27      /* PC rel 32 bit ref to PLT entry */
+#define R_SPARC_PCPLT22                28      /* PC rel high 22 bit PLT entry */
+#define R_SPARC_PCPLT10                29      /* PC rel trunc 10 bit PLT entry */
+#define R_SPARC_10             30      /* Direct 10 bit */
+#define R_SPARC_11             31      /* Direct 11 bit */
+#define R_SPARC_64             32      /* Direct 64 bit */
+#define R_SPARC_OLO10          33      /* 10bit with secondary 13bit addend */
+#define R_SPARC_HH22           34      /* Top 22 bits of direct 64 bit */
+#define R_SPARC_HM10           35      /* High middle 10 bits of ... */
+#define R_SPARC_LM22           36      /* Low middle 22 bits of ... */
+#define R_SPARC_PC_HH22                37      /* Top 22 bits of pc rel 64 bit */
+#define R_SPARC_PC_HM10                38      /* High middle 10 bit of ... */
+#define R_SPARC_PC_LM22                39      /* Low miggle 22 bits of ... */
+#define R_SPARC_WDISP16                40      /* PC relative 16 bit shifted */
+#define R_SPARC_WDISP19                41      /* PC relative 19 bit shifted */
+#define R_SPARC_GLOB_JMP       42      /* was part of v9 ABI but was removed */
+#define R_SPARC_7              43      /* Direct 7 bit */
+#define R_SPARC_5              44      /* Direct 5 bit */
+#define R_SPARC_6              45      /* Direct 6 bit */
+#define R_SPARC_DISP64         46      /* PC relative 64 bit */
+#define R_SPARC_PLT64          47      /* Direct 64 bit ref to PLT entry */
+#define R_SPARC_HIX22          48      /* High 22 bit complemented */
+#define R_SPARC_LOX10          49      /* Truncated 11 bit complemented */
+#define R_SPARC_H44            50      /* Direct high 12 of 44 bit */
+#define R_SPARC_M44            51      /* Direct mid 22 of 44 bit */
+#define R_SPARC_L44            52      /* Direct low 10 of 44 bit */
+#define R_SPARC_REGISTER       53      /* Global register usage */
+#define R_SPARC_UA64           54      /* Direct 64 bit unaligned */
+#define R_SPARC_UA16           55      /* Direct 16 bit unaligned */
+#define R_SPARC_TLS_GD_HI22    56
+#define R_SPARC_TLS_GD_LO10    57
+#define R_SPARC_TLS_GD_ADD     58
+#define R_SPARC_TLS_GD_CALL    59
+#define R_SPARC_TLS_LDM_HI22   60
+#define R_SPARC_TLS_LDM_LO10   61
+#define R_SPARC_TLS_LDM_ADD    62
+#define R_SPARC_TLS_LDM_CALL   63
+#define R_SPARC_TLS_LDO_HIX22  64
+#define R_SPARC_TLS_LDO_LOX10  65
+#define R_SPARC_TLS_LDO_ADD    66
+#define R_SPARC_TLS_IE_HI22    67
+#define R_SPARC_TLS_IE_LO10    68
+#define R_SPARC_TLS_IE_LD      69
+#define R_SPARC_TLS_IE_LDX     70
+#define R_SPARC_TLS_IE_ADD     71
+#define R_SPARC_TLS_LE_HIX22   72
+#define R_SPARC_TLS_LE_LOX10   73
+#define R_SPARC_TLS_DTPMOD32   74
+#define R_SPARC_TLS_DTPMOD64   75
+#define R_SPARC_TLS_DTPOFF32   76
+#define R_SPARC_TLS_DTPOFF64   77
+#define R_SPARC_TLS_TPOFF32    78
+#define R_SPARC_TLS_TPOFF64    79
+#define R_SPARC_GOTDATA_HIX22  80
+#define R_SPARC_GOTDATA_LOX10  81
+#define R_SPARC_GOTDATA_OP_HIX22       82
+#define R_SPARC_GOTDATA_OP_LOX10       83
+#define R_SPARC_GOTDATA_OP     84
+#define R_SPARC_H34            85
+#define R_SPARC_SIZE32         86
+#define R_SPARC_SIZE64         87
+#define R_SPARC_WDISP10                88
+#define R_SPARC_JMP_IREL       248
+#define R_SPARC_IRELATIVE      249
+#define R_SPARC_GNU_VTINHERIT  250
+#define R_SPARC_GNU_VTENTRY    251
+#define R_SPARC_REV32          252
+/* Keep this the last entry.  */
+#define R_SPARC_NUM            253
+
+/* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
+
+#define DT_SPARC_REGISTER      0x70000001
+#define DT_SPARC_NUM           2
+
+/* MIPS R3000 specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_MIPS_NOREORDER      1     /* A .noreorder directive was used.  */
+#define EF_MIPS_PIC            2     /* Contains PIC code.  */
+#define EF_MIPS_CPIC           4     /* Uses PIC calling sequence.  */
+#define EF_MIPS_XGOT           8
+#define EF_MIPS_64BIT_WHIRL    16
+#define EF_MIPS_ABI2           32
+#define EF_MIPS_ABI_ON32       64
+#define EF_MIPS_FP64           512  /* Uses FP64 (12 callee-saved).  */
+#define EF_MIPS_NAN2008        1024  /* Uses IEEE 754-2008 NaN encoding.  */
+#define EF_MIPS_ARCH           0xf0000000 /* MIPS architecture level.  */
+
+/* Legal values for MIPS architecture level.  */
+
+#define EF_MIPS_ARCH_1         0x00000000 /* -mips1 code.  */
+#define EF_MIPS_ARCH_2         0x10000000 /* -mips2 code.  */
+#define EF_MIPS_ARCH_3         0x20000000 /* -mips3 code.  */
+#define EF_MIPS_ARCH_4         0x30000000 /* -mips4 code.  */
+#define EF_MIPS_ARCH_5         0x40000000 /* -mips5 code.  */
+#define EF_MIPS_ARCH_32                0x50000000 /* MIPS32 code.  */
+#define EF_MIPS_ARCH_64                0x60000000 /* MIPS64 code.  */
+#define EF_MIPS_ARCH_32R2      0x70000000 /* MIPS32r2 code.  */
+#define EF_MIPS_ARCH_64R2      0x80000000 /* MIPS64r2 code.  */
+
+/* The following are unofficial names and should not be used.  */
+
+#define E_MIPS_ARCH_1          EF_MIPS_ARCH_1
+#define E_MIPS_ARCH_2          EF_MIPS_ARCH_2
+#define E_MIPS_ARCH_3          EF_MIPS_ARCH_3
+#define E_MIPS_ARCH_4          EF_MIPS_ARCH_4
+#define E_MIPS_ARCH_5          EF_MIPS_ARCH_5
+#define E_MIPS_ARCH_32         EF_MIPS_ARCH_32
+#define E_MIPS_ARCH_64         EF_MIPS_ARCH_64
+
+/* Special section indices.  */
+
+#define SHN_MIPS_ACOMMON       0xff00  /* Allocated common symbols.  */
+#define SHN_MIPS_TEXT          0xff01  /* Allocated test symbols.  */
+#define SHN_MIPS_DATA          0xff02  /* Allocated data symbols.  */
+#define SHN_MIPS_SCOMMON       0xff03  /* Small common symbols.  */
+#define SHN_MIPS_SUNDEFINED    0xff04  /* Small undefined symbols.  */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link.  */
+#define SHT_MIPS_MSYM          0x70000001
+#define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols.  */
+#define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes.  */
+#define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
+#define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging info.  */
+#define SHT_MIPS_REGINFO       0x70000006 /* Register usage information.  */
+#define SHT_MIPS_PACKAGE       0x70000007
+#define SHT_MIPS_PACKSYM       0x70000008
+#define SHT_MIPS_RELD          0x70000009
+#define SHT_MIPS_IFACE         0x7000000b
+#define SHT_MIPS_CONTENT       0x7000000c
+#define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
+#define SHT_MIPS_SHDR          0x70000010
+#define SHT_MIPS_FDESC         0x70000011
+#define SHT_MIPS_EXTSYM                0x70000012
+#define SHT_MIPS_DENSE         0x70000013
+#define SHT_MIPS_PDESC         0x70000014
+#define SHT_MIPS_LOCSYM                0x70000015
+#define SHT_MIPS_AUXSYM                0x70000016
+#define SHT_MIPS_OPTSYM                0x70000017
+#define SHT_MIPS_LOCSTR                0x70000018
+#define SHT_MIPS_LINE          0x70000019
+#define SHT_MIPS_RFDESC                0x7000001a
+#define SHT_MIPS_DELTASYM      0x7000001b
+#define SHT_MIPS_DELTAINST     0x7000001c
+#define SHT_MIPS_DELTACLASS    0x7000001d
+#define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
+#define SHT_MIPS_DELTADECL     0x7000001f
+#define SHT_MIPS_SYMBOL_LIB    0x70000020
+#define SHT_MIPS_EVENTS                0x70000021 /* Event section.  */
+#define SHT_MIPS_TRANSLATE     0x70000022
+#define SHT_MIPS_PIXIE         0x70000023
+#define SHT_MIPS_XLATE         0x70000024
+#define SHT_MIPS_XLATE_DEBUG   0x70000025
+#define SHT_MIPS_WHIRL         0x70000026
+#define SHT_MIPS_EH_REGION     0x70000027
+#define SHT_MIPS_XLATE_OLD     0x70000028
+#define SHT_MIPS_PDR_EXCEPTION 0x70000029
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_MIPS_GPREL         0x10000000 /* Must be in global data area.  */
+#define SHF_MIPS_MERGE         0x20000000
+#define SHF_MIPS_ADDR          0x40000000
+#define SHF_MIPS_STRINGS       0x80000000
+#define SHF_MIPS_NOSTRIP       0x08000000
+#define SHF_MIPS_LOCAL         0x04000000
+#define SHF_MIPS_NAMES         0x02000000
+#define SHF_MIPS_NODUPE                0x01000000
+
+
+/* Symbol tables.  */
+
+/* MIPS specific values for `st_other'.  */
+#define STO_MIPS_DEFAULT               0x0
+#define STO_MIPS_INTERNAL              0x1
+#define STO_MIPS_HIDDEN                        0x2
+#define STO_MIPS_PROTECTED             0x3
+#define STO_MIPS_PLT                   0x8
+#define STO_MIPS_SC_ALIGN_UNUSED       0xff
+
+/* MIPS specific values for `st_info'.  */
+#define STB_MIPS_SPLIT_COMMON          13
+
+/* Entries found in sections of type SHT_MIPS_GPTAB.  */
+
+typedef union
+{
+  struct
+    {
+      Elf32_Word gt_current_g_value;   /* -G value used for compilation.  */
+      Elf32_Word gt_unused;            /* Not used.  */
+    } gt_header;                       /* First entry in section.  */
+  struct
+    {
+      Elf32_Word gt_g_value;           /* If this value were used for -G.  */
+      Elf32_Word gt_bytes;             /* This many bytes would be used.  */
+    } gt_entry;                                /* Subsequent entries in section.  */
+} Elf32_gptab;
+
+/* Entry found in sections of type SHT_MIPS_REGINFO.  */
+
+typedef struct
+{
+  Elf32_Word ri_gprmask;               /* General registers used.  */
+  Elf32_Word ri_cprmask[4];            /* Coprocessor registers used.  */
+  Elf32_Sword ri_gp_value;             /* $gp register value.  */
+} Elf32_RegInfo;
+
+/* Entries found in sections of type SHT_MIPS_OPTIONS.  */
+
+typedef struct
+{
+  unsigned char kind;          /* Determines interpretation of the
+                                  variable part of descriptor.  */
+  unsigned char size;          /* Size of descriptor, including header.  */
+  Elf32_Section section;       /* Section header index of section affected,
+                                  0 for global options.  */
+  Elf32_Word info;             /* Kind-specific information.  */
+} Elf_Options;
+
+/* Values for `kind' field in Elf_Options.  */
+
+#define ODK_NULL       0       /* Undefined.  */
+#define ODK_REGINFO    1       /* Register usage information.  */
+#define ODK_EXCEPTIONS 2       /* Exception processing options.  */
+#define ODK_PAD                3       /* Section padding options.  */
+#define ODK_HWPATCH    4       /* Hardware workarounds performed */
+#define ODK_FILL       5       /* record the fill value used by the linker. */
+#define ODK_TAGS       6       /* reserve space for desktop tools to write. */
+#define ODK_HWAND      7       /* HW workarounds.  'AND' bits when merging. */
+#define ODK_HWOR       8       /* HW workarounds.  'OR' bits when merging.  */
+
+/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
+
+#define OEX_FPU_MIN    0x1f    /* FPE's which MUST be enabled.  */
+#define OEX_FPU_MAX    0x1f00  /* FPE's which MAY be enabled.  */
+#define OEX_PAGE0      0x10000 /* page zero must be mapped.  */
+#define OEX_SMM                0x20000 /* Force sequential memory mode?  */
+#define OEX_FPDBUG     0x40000 /* Force floating point debug mode?  */
+#define OEX_PRECISEFP  OEX_FPDBUG
+#define OEX_DISMISS    0x80000 /* Dismiss invalid address faults?  */
+
+#define OEX_FPU_INVAL  0x10
+#define OEX_FPU_DIV0   0x08
+#define OEX_FPU_OFLO   0x04
+#define OEX_FPU_UFLO   0x02
+#define OEX_FPU_INEX   0x01
+
+/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
+
+#define OHW_R4KEOP     0x1     /* R4000 end-of-page patch.  */
+#define OHW_R8KPFETCH  0x2     /* may need R8000 prefetch patch.  */
+#define OHW_R5KEOP     0x4     /* R5000 end-of-page patch.  */
+#define OHW_R5KCVTL    0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
+
+#define OPAD_PREFIX    0x1
+#define OPAD_POSTFIX   0x2
+#define OPAD_SYMBOL    0x4
+
+/* Entry found in `.options' section.  */
+
+typedef struct
+{
+  Elf32_Word hwp_flags1;       /* Extra flags.  */
+  Elf32_Word hwp_flags2;       /* Extra flags.  */
+} Elf_Options_Hw;
+
+/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
+
+#define OHWA0_R4KEOP_CHECKED   0x00000001
+#define OHWA1_R4KEOP_CLEAN     0x00000002
+
+/* MIPS relocs.  */
+
+#define R_MIPS_NONE            0       /* No reloc */
+#define R_MIPS_16              1       /* Direct 16 bit */
+#define R_MIPS_32              2       /* Direct 32 bit */
+#define R_MIPS_REL32           3       /* PC relative 32 bit */
+#define R_MIPS_26              4       /* Direct 26 bit shifted */
+#define R_MIPS_HI16            5       /* High 16 bit */
+#define R_MIPS_LO16            6       /* Low 16 bit */
+#define R_MIPS_GPREL16         7       /* GP relative 16 bit */
+#define R_MIPS_LITERAL         8       /* 16 bit literal entry */
+#define R_MIPS_GOT16           9       /* 16 bit GOT entry */
+#define R_MIPS_PC16            10      /* PC relative 16 bit */
+#define R_MIPS_CALL16          11      /* 16 bit GOT entry for function */
+#define R_MIPS_GPREL32         12      /* GP relative 32 bit */
+
+#define R_MIPS_SHIFT5          16
+#define R_MIPS_SHIFT6          17
+#define R_MIPS_64              18
+#define R_MIPS_GOT_DISP                19
+#define R_MIPS_GOT_PAGE                20
+#define R_MIPS_GOT_OFST                21
+#define R_MIPS_GOT_HI16                22
+#define R_MIPS_GOT_LO16                23
+#define R_MIPS_SUB             24
+#define R_MIPS_INSERT_A                25
+#define R_MIPS_INSERT_B                26
+#define R_MIPS_DELETE          27
+#define R_MIPS_HIGHER          28
+#define R_MIPS_HIGHEST         29
+#define R_MIPS_CALL_HI16       30
+#define R_MIPS_CALL_LO16       31
+#define R_MIPS_SCN_DISP                32
+#define R_MIPS_REL16           33
+#define R_MIPS_ADD_IMMEDIATE   34
+#define R_MIPS_PJUMP           35
+#define R_MIPS_RELGOT          36
+#define R_MIPS_JALR            37
+#define R_MIPS_TLS_DTPMOD32    38      /* Module number 32 bit */
+#define R_MIPS_TLS_DTPREL32    39      /* Module-relative offset 32 bit */
+#define R_MIPS_TLS_DTPMOD64    40      /* Module number 64 bit */
+#define R_MIPS_TLS_DTPREL64    41      /* Module-relative offset 64 bit */
+#define R_MIPS_TLS_GD          42      /* 16 bit GOT offset for GD */
+#define R_MIPS_TLS_LDM         43      /* 16 bit GOT offset for LDM */
+#define R_MIPS_TLS_DTPREL_HI16 44      /* Module-relative offset, high 16 bits */
+#define R_MIPS_TLS_DTPREL_LO16 45      /* Module-relative offset, low 16 bits */
+#define R_MIPS_TLS_GOTTPREL    46      /* 16 bit GOT offset for IE */
+#define R_MIPS_TLS_TPREL32     47      /* TP-relative offset, 32 bit */
+#define R_MIPS_TLS_TPREL64     48      /* TP-relative offset, 64 bit */
+#define R_MIPS_TLS_TPREL_HI16  49      /* TP-relative offset, high 16 bits */
+#define R_MIPS_TLS_TPREL_LO16  50      /* TP-relative offset, low 16 bits */
+#define R_MIPS_GLOB_DAT                51
+#define R_MIPS_COPY            126
+#define R_MIPS_JUMP_SLOT        127
+/* Keep this the last entry.  */
+#define R_MIPS_NUM             128
+
+/* Legal values for p_type field of Elf32_Phdr.  */
+
+#define PT_MIPS_REGINFO          0x70000000    /* Register usage information. */
+#define PT_MIPS_RTPROC   0x70000001    /* Runtime procedure table. */
+#define PT_MIPS_OPTIONS          0x70000002
+#define PT_MIPS_ABIFLAGS  0x70000003   /* FP mode requirement. */
+
+/* Special program header types.  */
+
+#define PF_MIPS_LOCAL  0x10000000
+
+/* Legal values for d_tag field of Elf32_Dyn.  */
+
+#define DT_MIPS_RLD_VERSION  0x70000001        /* Runtime linker interface version */
+#define DT_MIPS_TIME_STAMP   0x70000002        /* Timestamp */
+#define DT_MIPS_ICHECKSUM    0x70000003        /* Checksum */
+#define DT_MIPS_IVERSION     0x70000004        /* Version string (string tbl index) */
+#define DT_MIPS_FLAGS       0x70000005 /* Flags */
+#define DT_MIPS_BASE_ADDRESS 0x70000006        /* Base address */
+#define DT_MIPS_MSYM        0x70000007
+#define DT_MIPS_CONFLICT     0x70000008        /* Address of CONFLICT section */
+#define DT_MIPS_LIBLIST             0x70000009 /* Address of LIBLIST section */
+#define DT_MIPS_LOCAL_GOTNO  0x7000000a        /* Number of local GOT entries */
+#define DT_MIPS_CONFLICTNO   0x7000000b        /* Number of CONFLICT entries */
+#define DT_MIPS_LIBLISTNO    0x70000010        /* Number of LIBLIST entries */
+#define DT_MIPS_SYMTABNO     0x70000011        /* Number of DYNSYM entries */
+#define DT_MIPS_UNREFEXTNO   0x70000012        /* First external DYNSYM */
+#define DT_MIPS_GOTSYM      0x70000013 /* First GOT entry in DYNSYM */
+#define DT_MIPS_HIPAGENO     0x70000014        /* Number of GOT page table entries */
+#define DT_MIPS_RLD_MAP             0x70000016 /* Address of run time loader map.  */
+#define DT_MIPS_DELTA_CLASS  0x70000017        /* Delta C++ class definition.  */
+#define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
+                                               DT_MIPS_DELTA_CLASS.  */
+#define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
+#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
+                                               DT_MIPS_DELTA_INSTANCE.  */
+#define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
+#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
+                                            DT_MIPS_DELTA_RELOC.  */
+#define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
+                                          relocations refer to.  */
+#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
+                                          DT_MIPS_DELTA_SYM.  */
+#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
+                                            class declaration.  */
+#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
+                                               DT_MIPS_DELTA_CLASSSYM.  */
+#define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
+#define DT_MIPS_PIXIE_INIT   0x70000023
+#define DT_MIPS_SYMBOL_LIB   0x70000024
+#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
+#define DT_MIPS_LOCAL_GOTIDX 0x70000026
+#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
+#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
+#define DT_MIPS_OPTIONS             0x70000029 /* Address of .options.  */
+#define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
+#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
+#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
+#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
+                                                   function stored in GOT.  */
+#define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
+                                          by rld on dlopen() calls.  */
+#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
+#define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
+#define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
+/* The address of .got.plt in an executable using the new non-PIC ABI.  */
+#define DT_MIPS_PLTGOT      0x70000032
+/* The base of the PLT in an executable using the new non-PIC ABI if that
+   PLT is writable.  For a non-writable PLT, this is omitted or has a zero
+   value.  */
+#define DT_MIPS_RWPLT        0x70000034
+/* An alternative description of the classic MIPS RLD_MAP that is usable
+   in a PIE as it stores a relative offset from the address of the tag
+   rather than an absolute address.  */
+#define DT_MIPS_RLD_MAP_REL  0x70000035
+#define DT_MIPS_NUM         0x36
+
+/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
+
+#define RHF_NONE                  0            /* No flags */
+#define RHF_QUICKSTART            (1 << 0)     /* Use quickstart */
+#define RHF_NOTPOT                (1 << 1)     /* Hash size not power of 2 */
+#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)    /* Ignore LD_LIBRARY_PATH */
+#define RHF_NO_MOVE               (1 << 3)
+#define RHF_SGI_ONLY              (1 << 4)
+#define RHF_GUARANTEE_INIT        (1 << 5)
+#define RHF_DELTA_C_PLUS_PLUS     (1 << 6)
+#define RHF_GUARANTEE_START_INIT   (1 << 7)
+#define RHF_PIXIE                 (1 << 8)
+#define RHF_DEFAULT_DELAY_LOAD    (1 << 9)
+#define RHF_REQUICKSTART          (1 << 10)
+#define RHF_REQUICKSTARTED        (1 << 11)
+#define RHF_CORD                  (1 << 12)
+#define RHF_NO_UNRES_UNDEF        (1 << 13)
+#define RHF_RLD_ORDER_SAFE        (1 << 14)
+
+/* Entries found in sections of type SHT_MIPS_LIBLIST.  */
+
+typedef struct
+{
+  Elf32_Word l_name;           /* Name (string table index) */
+  Elf32_Word l_time_stamp;     /* Timestamp */
+  Elf32_Word l_checksum;       /* Checksum */
+  Elf32_Word l_version;                /* Interface version */
+  Elf32_Word l_flags;          /* Flags */
+} Elf32_Lib;
+
+typedef struct
+{
+  Elf64_Word l_name;           /* Name (string table index) */
+  Elf64_Word l_time_stamp;     /* Timestamp */
+  Elf64_Word l_checksum;       /* Checksum */
+  Elf64_Word l_version;                /* Interface version */
+  Elf64_Word l_flags;          /* Flags */
+} Elf64_Lib;
+
+
+/* Legal values for l_flags.  */
+
+#define LL_NONE                  0
+#define LL_EXACT_MATCH   (1 << 0)      /* Require exact match */
+#define LL_IGNORE_INT_VER (1 << 1)     /* Ignore interface version */
+#define LL_REQUIRE_MINOR  (1 << 2)
+#define LL_EXPORTS       (1 << 3)
+#define LL_DELAY_LOAD    (1 << 4)
+#define LL_DELTA         (1 << 5)
+
+/* Entries found in sections of type SHT_MIPS_CONFLICT.  */
+
+typedef Elf32_Addr Elf32_Conflict;
+
+typedef struct
+{
+  /* Version of flags structure.  */
+  Elf32_Half version;
+  /* The level of the ISA: 1-5, 32, 64.  */
+  unsigned char isa_level;
+  /* The revision of ISA: 0 for MIPS V and below, 1-n otherwise.  */
+  unsigned char isa_rev;
+  /* The size of general purpose registers.  */
+  unsigned char gpr_size;
+  /* The size of co-processor 1 registers.  */
+  unsigned char cpr1_size;
+  /* The size of co-processor 2 registers.  */
+  unsigned char cpr2_size;
+  /* The floating-point ABI.  */
+  unsigned char fp_abi;
+  /* Processor-specific extension.  */
+  Elf32_Word isa_ext;
+  /* Mask of ASEs used.  */
+  Elf32_Word ases;
+  /* Mask of general flags.  */
+  Elf32_Word flags1;
+  Elf32_Word flags2;
+} Elf_MIPS_ABIFlags_v0;
+
+/* Values for the register size bytes of an abi flags structure.  */
+
+#define MIPS_AFL_REG_NONE      0x00     /* No registers.  */
+#define MIPS_AFL_REG_32                0x01     /* 32-bit registers.  */
+#define MIPS_AFL_REG_64                0x02     /* 64-bit registers.  */
+#define MIPS_AFL_REG_128       0x03     /* 128-bit registers.  */
+
+/* Masks for the ases word of an ABI flags structure.  */
+
+#define MIPS_AFL_ASE_DSP       0x00000001 /* DSP ASE.  */
+#define MIPS_AFL_ASE_DSPR2     0x00000002 /* DSP R2 ASE.  */
+#define MIPS_AFL_ASE_EVA       0x00000004 /* Enhanced VA Scheme.  */
+#define MIPS_AFL_ASE_MCU       0x00000008 /* MCU (MicroController) ASE.  */
+#define MIPS_AFL_ASE_MDMX      0x00000010 /* MDMX ASE.  */
+#define MIPS_AFL_ASE_MIPS3D    0x00000020 /* MIPS-3D ASE.  */
+#define MIPS_AFL_ASE_MT                0x00000040 /* MT ASE.  */
+#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 /* SmartMIPS ASE.  */
+#define MIPS_AFL_ASE_VIRT      0x00000100 /* VZ ASE.  */
+#define MIPS_AFL_ASE_MSA       0x00000200 /* MSA ASE.  */
+#define MIPS_AFL_ASE_MIPS16    0x00000400 /* MIPS16 ASE.  */
+#define MIPS_AFL_ASE_MICROMIPS 0x00000800 /* MICROMIPS ASE.  */
+#define MIPS_AFL_ASE_XPA       0x00001000 /* XPA ASE.  */
+#define MIPS_AFL_ASE_MASK      0x00001fff /* All ASEs.  */
+
+/* Values for the isa_ext word of an ABI flags structure.  */
+
+#define MIPS_AFL_EXT_XLR         1   /* RMI Xlr instruction.  */
+#define MIPS_AFL_EXT_OCTEON2     2   /* Cavium Networks Octeon2.  */
+#define MIPS_AFL_EXT_OCTEONP     3   /* Cavium Networks OcteonP.  */
+#define MIPS_AFL_EXT_LOONGSON_3A  4   /* Loongson 3A.  */
+#define MIPS_AFL_EXT_OCTEON      5   /* Cavium Networks Octeon.  */
+#define MIPS_AFL_EXT_5900        6   /* MIPS R5900 instruction.  */
+#define MIPS_AFL_EXT_4650        7   /* MIPS R4650 instruction.  */
+#define MIPS_AFL_EXT_4010        8   /* LSI R4010 instruction.  */
+#define MIPS_AFL_EXT_4100        9   /* NEC VR4100 instruction.  */
+#define MIPS_AFL_EXT_3900        10  /* Toshiba R3900 instruction.  */
+#define MIPS_AFL_EXT_10000       11  /* MIPS R10000 instruction.  */
+#define MIPS_AFL_EXT_SB1         12  /* Broadcom SB-1 instruction.  */
+#define MIPS_AFL_EXT_4111        13  /* NEC VR4111/VR4181 instruction.  */
+#define MIPS_AFL_EXT_4120        14  /* NEC VR4120 instruction.  */
+#define MIPS_AFL_EXT_5400        15  /* NEC VR5400 instruction.  */
+#define MIPS_AFL_EXT_5500        16  /* NEC VR5500 instruction.  */
+#define MIPS_AFL_EXT_LOONGSON_2E  17  /* ST Microelectronics Loongson 2E.  */
+#define MIPS_AFL_EXT_LOONGSON_2F  18  /* ST Microelectronics Loongson 2F.  */
+
+/* Masks for the flags1 word of an ABI flags structure.  */
+#define MIPS_AFL_FLAGS1_ODDSPREG  1  /* Uses odd single-precision registers.  */
+
+/* Object attribute values.  */
+enum
+{
+  /* Not tagged or not using any ABIs affected by the differences.  */
+  Val_GNU_MIPS_ABI_FP_ANY = 0,
+  /* Using hard-float -mdouble-float.  */
+  Val_GNU_MIPS_ABI_FP_DOUBLE = 1,
+  /* Using hard-float -msingle-float.  */
+  Val_GNU_MIPS_ABI_FP_SINGLE = 2,
+  /* Using soft-float.  */
+  Val_GNU_MIPS_ABI_FP_SOFT = 3,
+  /* Using -mips32r2 -mfp64.  */
+  Val_GNU_MIPS_ABI_FP_OLD_64 = 4,
+  /* Using -mfpxx.  */
+  Val_GNU_MIPS_ABI_FP_XX = 5,
+  /* Using -mips32r2 -mfp64.  */
+  Val_GNU_MIPS_ABI_FP_64 = 6,
+  /* Using -mips32r2 -mfp64 -mno-odd-spreg.  */
+  Val_GNU_MIPS_ABI_FP_64A = 7,
+  /* Maximum allocated FP ABI value.  */
+  Val_GNU_MIPS_ABI_FP_MAX = 7
+};
+
+/* HPPA specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_PARISC_TRAPNIL      0x00010000 /* Trap nil pointer dereference.  */
+#define EF_PARISC_EXT          0x00020000 /* Program uses arch. extensions. */
+#define EF_PARISC_LSB          0x00040000 /* Program expects little endian. */
+#define EF_PARISC_WIDE         0x00080000 /* Program expects wide mode.  */
+#define EF_PARISC_NO_KABP      0x00100000 /* No kernel assisted branch
+                                             prediction.  */
+#define EF_PARISC_LAZYSWAP     0x00400000 /* Allow lazy swapping.  */
+#define EF_PARISC_ARCH         0x0000ffff /* Architecture version.  */
+
+/* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
+
+#define EFA_PARISC_1_0             0x020b /* PA-RISC 1.0 big-endian.  */
+#define EFA_PARISC_1_1             0x0210 /* PA-RISC 1.1 big-endian.  */
+#define EFA_PARISC_2_0             0x0214 /* PA-RISC 2.0 big-endian.  */
+
+/* Additional section indeces.  */
+
+#define SHN_PARISC_ANSI_COMMON 0xff00     /* Section for tenatively declared
+                                             symbols in ANSI C.  */
+#define SHN_PARISC_HUGE_COMMON 0xff01     /* Common blocks in huge model.  */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_PARISC_EXT         0x70000000 /* Contains product specific ext. */
+#define SHT_PARISC_UNWIND      0x70000001 /* Unwind information.  */
+#define SHT_PARISC_DOC         0x70000002 /* Debug info for optimized code. */
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_PARISC_SHORT       0x20000000 /* Section with short addressing. */
+#define SHF_PARISC_HUGE                0x40000000 /* Section far from gp.  */
+#define SHF_PARISC_SBP         0x80000000 /* Static branch prediction code. */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_PARISC_MILLICODE   13      /* Millicode function entry point.  */
+
+#define STT_HP_OPAQUE          (STT_LOOS + 0x1)
+#define STT_HP_STUB            (STT_LOOS + 0x2)
+
+/* HPPA relocs.  */
+
+#define R_PARISC_NONE          0       /* No reloc.  */
+#define R_PARISC_DIR32         1       /* Direct 32-bit reference.  */
+#define R_PARISC_DIR21L                2       /* Left 21 bits of eff. address.  */
+#define R_PARISC_DIR17R                3       /* Right 17 bits of eff. address.  */
+#define R_PARISC_DIR17F                4       /* 17 bits of eff. address.  */
+#define R_PARISC_DIR14R                6       /* Right 14 bits of eff. address.  */
+#define R_PARISC_PCREL32       9       /* 32-bit rel. address.  */
+#define R_PARISC_PCREL21L      10      /* Left 21 bits of rel. address.  */
+#define R_PARISC_PCREL17R      11      /* Right 17 bits of rel. address.  */
+#define R_PARISC_PCREL17F      12      /* 17 bits of rel. address.  */
+#define R_PARISC_PCREL14R      14      /* Right 14 bits of rel. address.  */
+#define R_PARISC_DPREL21L      18      /* Left 21 bits of rel. address.  */
+#define R_PARISC_DPREL14R      22      /* Right 14 bits of rel. address.  */
+#define R_PARISC_GPREL21L      26      /* GP-relative, left 21 bits.  */
+#define R_PARISC_GPREL14R      30      /* GP-relative, right 14 bits.  */
+#define R_PARISC_LTOFF21L      34      /* LT-relative, left 21 bits.  */
+#define R_PARISC_LTOFF14R      38      /* LT-relative, right 14 bits.  */
+#define R_PARISC_SECREL32      41      /* 32 bits section rel. address.  */
+#define R_PARISC_SEGBASE       48      /* No relocation, set segment base.  */
+#define R_PARISC_SEGREL32      49      /* 32 bits segment rel. address.  */
+#define R_PARISC_PLTOFF21L     50      /* PLT rel. address, left 21 bits.  */
+#define R_PARISC_PLTOFF14R     54      /* PLT rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_FPTR32  57      /* 32 bits LT-rel. function pointer. */
+#define R_PARISC_LTOFF_FPTR21L 58      /* LT-rel. fct ptr, left 21 bits. */
+#define R_PARISC_LTOFF_FPTR14R 62      /* LT-rel. fct ptr, right 14 bits. */
+#define R_PARISC_FPTR64                64      /* 64 bits function address.  */
+#define R_PARISC_PLABEL32      65      /* 32 bits function address.  */
+#define R_PARISC_PLABEL21L     66      /* Left 21 bits of fdesc address.  */
+#define R_PARISC_PLABEL14R     70      /* Right 14 bits of fdesc address.  */
+#define R_PARISC_PCREL64       72      /* 64 bits PC-rel. address.  */
+#define R_PARISC_PCREL22F      74      /* 22 bits PC-rel. address.  */
+#define R_PARISC_PCREL14WR     75      /* PC-rel. address, right 14 bits.  */
+#define R_PARISC_PCREL14DR     76      /* PC rel. address, right 14 bits.  */
+#define R_PARISC_PCREL16F      77      /* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16WF     78      /* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16DF     79      /* 16 bits PC-rel. address.  */
+#define R_PARISC_DIR64         80      /* 64 bits of eff. address.  */
+#define R_PARISC_DIR14WR       83      /* 14 bits of eff. address.  */
+#define R_PARISC_DIR14DR       84      /* 14 bits of eff. address.  */
+#define R_PARISC_DIR16F                85      /* 16 bits of eff. address.  */
+#define R_PARISC_DIR16WF       86      /* 16 bits of eff. address.  */
+#define R_PARISC_DIR16DF       87      /* 16 bits of eff. address.  */
+#define R_PARISC_GPREL64       88      /* 64 bits of GP-rel. address.  */
+#define R_PARISC_GPREL14WR     91      /* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL14DR     92      /* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL16F      93      /* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16WF     94      /* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16DF     95      /* 16 bits GP-rel. address.  */
+#define R_PARISC_LTOFF64       96      /* 64 bits LT-rel. address.  */
+#define R_PARISC_LTOFF14WR     99      /* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF14DR     100     /* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF16F      101     /* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16WF     102     /* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16DF     103     /* 16 bits LT-rel. address.  */
+#define R_PARISC_SECREL64      104     /* 64 bits section rel. address.  */
+#define R_PARISC_SEGREL64      112     /* 64 bits segment rel. address.  */
+#define R_PARISC_PLTOFF14WR    115     /* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF14DR    116     /* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF16F     117     /* 16 bits LT-rel. address.  */
+#define R_PARISC_PLTOFF16WF    118     /* 16 bits PLT-rel. address.  */
+#define R_PARISC_PLTOFF16DF    119     /* 16 bits PLT-rel. address.  */
+#define R_PARISC_LTOFF_FPTR64  120     /* 64 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR14WR        123     /* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR14DR        124     /* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR16F 125     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16WF        126     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16DF        127     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LORESERVE     128
+#define R_PARISC_COPY          128     /* Copy relocation.  */
+#define R_PARISC_IPLT          129     /* Dynamic reloc, imported PLT */
+#define R_PARISC_EPLT          130     /* Dynamic reloc, exported PLT */
+#define R_PARISC_TPREL32       153     /* 32 bits TP-rel. address.  */
+#define R_PARISC_TPREL21L      154     /* TP-rel. address, left 21 bits.  */
+#define R_PARISC_TPREL14R      158     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_TP21L   162     /* LT-TP-rel. address, left 21 bits. */
+#define R_PARISC_LTOFF_TP14R   166     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14F   167     /* 14 bits LT-TP-rel. address.  */
+#define R_PARISC_TPREL64       216     /* 64 bits TP-rel. address.  */
+#define R_PARISC_TPREL14WR     219     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL14DR     220     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL16F      221     /* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16WF     222     /* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16DF     223     /* 16 bits TP-rel. address.  */
+#define R_PARISC_LTOFF_TP64    224     /* 64 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP14WR  227     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14DR  228     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP16F   229     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16WF  230     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16DF  231     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_GNU_VTENTRY   232
+#define R_PARISC_GNU_VTINHERIT 233
+#define R_PARISC_TLS_GD21L     234     /* GD 21-bit left.  */
+#define R_PARISC_TLS_GD14R     235     /* GD 14-bit right.  */
+#define R_PARISC_TLS_GDCALL    236     /* GD call to __t_g_a.  */
+#define R_PARISC_TLS_LDM21L    237     /* LD module 21-bit left.  */
+#define R_PARISC_TLS_LDM14R    238     /* LD module 14-bit right.  */
+#define R_PARISC_TLS_LDMCALL   239     /* LD module call to __t_g_a.  */
+#define R_PARISC_TLS_LDO21L    240     /* LD offset 21-bit left.  */
+#define R_PARISC_TLS_LDO14R    241     /* LD offset 14-bit right.  */
+#define R_PARISC_TLS_DTPMOD32  242     /* DTP module 32-bit.  */
+#define R_PARISC_TLS_DTPMOD64  243     /* DTP module 64-bit.  */
+#define R_PARISC_TLS_DTPOFF32  244     /* DTP offset 32-bit.  */
+#define R_PARISC_TLS_DTPOFF64  245     /* DTP offset 32-bit.  */
+#define R_PARISC_TLS_LE21L     R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R     R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L     R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R     R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32   R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64   R_PARISC_TPREL64
+#define R_PARISC_HIRESERVE     255
+
+/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PT_HP_TLS              (PT_LOOS + 0x0)
+#define PT_HP_CORE_NONE                (PT_LOOS + 0x1)
+#define PT_HP_CORE_VERSION     (PT_LOOS + 0x2)
+#define PT_HP_CORE_KERNEL      (PT_LOOS + 0x3)
+#define PT_HP_CORE_COMM                (PT_LOOS + 0x4)
+#define PT_HP_CORE_PROC                (PT_LOOS + 0x5)
+#define PT_HP_CORE_LOADABLE    (PT_LOOS + 0x6)
+#define PT_HP_CORE_STACK       (PT_LOOS + 0x7)
+#define PT_HP_CORE_SHM         (PT_LOOS + 0x8)
+#define PT_HP_CORE_MMF         (PT_LOOS + 0x9)
+#define PT_HP_PARALLEL         (PT_LOOS + 0x10)
+#define PT_HP_FASTBIND         (PT_LOOS + 0x11)
+#define PT_HP_OPT_ANNOT                (PT_LOOS + 0x12)
+#define PT_HP_HSL_ANNOT                (PT_LOOS + 0x13)
+#define PT_HP_STACK            (PT_LOOS + 0x14)
+
+#define PT_PARISC_ARCHEXT      0x70000000
+#define PT_PARISC_UNWIND       0x70000001
+
+/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PF_PARISC_SBP          0x08000000
+
+#define PF_HP_PAGE_SIZE                0x00100000
+#define PF_HP_FAR_SHARED       0x00200000
+#define PF_HP_NEAR_SHARED      0x00400000
+#define PF_HP_CODE             0x01000000
+#define PF_HP_MODIFY           0x02000000
+#define PF_HP_LAZYSWAP         0x04000000
+#define PF_HP_SBP              0x08000000
+
+
+/* Alpha specific definitions.  */
+
+/* Legal values for e_flags field of Elf64_Ehdr.  */
+
+#define EF_ALPHA_32BIT         1       /* All addresses must be < 2GB.  */
+#define EF_ALPHA_CANRELAX      2       /* Relocations for relaxing exist.  */
+
+/* Legal values for sh_type field of Elf64_Shdr.  */
+
+/* These two are primerily concerned with ECOFF debugging info.  */
+#define SHT_ALPHA_DEBUG                0x70000001
+#define SHT_ALPHA_REGINFO      0x70000002
+
+/* Legal values for sh_flags field of Elf64_Shdr.  */
+
+#define SHF_ALPHA_GPREL                0x10000000
+
+/* Legal values for st_other field of Elf64_Sym.  */
+#define STO_ALPHA_NOPV         0x80    /* No PV required.  */
+#define STO_ALPHA_STD_GPLOAD   0x88    /* PV only used for initial ldgp.  */
+
+/* Alpha relocs.  */
+
+#define R_ALPHA_NONE           0       /* No reloc */
+#define R_ALPHA_REFLONG                1       /* Direct 32 bit */
+#define R_ALPHA_REFQUAD                2       /* Direct 64 bit */
+#define R_ALPHA_GPREL32                3       /* GP relative 32 bit */
+#define R_ALPHA_LITERAL                4       /* GP relative 16 bit w/optimization */
+#define R_ALPHA_LITUSE         5       /* Optimization hint for LITERAL */
+#define R_ALPHA_GPDISP         6       /* Add displacement to GP */
+#define R_ALPHA_BRADDR         7       /* PC+4 relative 23 bit shifted */
+#define R_ALPHA_HINT           8       /* PC+4 relative 16 bit shifted */
+#define R_ALPHA_SREL16         9       /* PC relative 16 bit */
+#define R_ALPHA_SREL32         10      /* PC relative 32 bit */
+#define R_ALPHA_SREL64         11      /* PC relative 64 bit */
+#define R_ALPHA_GPRELHIGH      17      /* GP relative 32 bit, high 16 bits */
+#define R_ALPHA_GPRELLOW       18      /* GP relative 32 bit, low 16 bits */
+#define R_ALPHA_GPREL16                19      /* GP relative 16 bit */
+#define R_ALPHA_COPY           24      /* Copy symbol at runtime */
+#define R_ALPHA_GLOB_DAT       25      /* Create GOT entry */
+#define R_ALPHA_JMP_SLOT       26      /* Create PLT entry */
+#define R_ALPHA_RELATIVE       27      /* Adjust by program base */
+#define R_ALPHA_TLS_GD_HI      28
+#define R_ALPHA_TLSGD          29
+#define R_ALPHA_TLS_LDM                30
+#define R_ALPHA_DTPMOD64       31
+#define R_ALPHA_GOTDTPREL      32
+#define R_ALPHA_DTPREL64       33
+#define R_ALPHA_DTPRELHI       34
+#define R_ALPHA_DTPRELLO       35
+#define R_ALPHA_DTPREL16       36
+#define R_ALPHA_GOTTPREL       37
+#define R_ALPHA_TPREL64                38
+#define R_ALPHA_TPRELHI                39
+#define R_ALPHA_TPRELLO                40
+#define R_ALPHA_TPREL16                41
+/* Keep this the last entry.  */
+#define R_ALPHA_NUM            46
+
+/* Magic values of the LITUSE relocation addend.  */
+#define LITUSE_ALPHA_ADDR      0
+#define LITUSE_ALPHA_BASE      1
+#define LITUSE_ALPHA_BYTOFF    2
+#define LITUSE_ALPHA_JSR       3
+#define LITUSE_ALPHA_TLS_GD    4
+#define LITUSE_ALPHA_TLS_LDM   5
+
+/* Legal values for d_tag of Elf64_Dyn.  */
+#define DT_ALPHA_PLTRO         (DT_LOPROC + 0)
+#define DT_ALPHA_NUM           1
+
+/* PowerPC specific declarations */
+
+/* Values for Elf32/64_Ehdr.e_flags.  */
+#define EF_PPC_EMB             0x80000000      /* PowerPC embedded flag */
+
+/* Cygnus local bits below */
+#define EF_PPC_RELOCATABLE     0x00010000      /* PowerPC -mrelocatable flag*/
+#define EF_PPC_RELOCATABLE_LIB 0x00008000      /* PowerPC -mrelocatable-lib
+                                                  flag */
+
+/* PowerPC relocations defined by the ABIs */
+#define R_PPC_NONE             0
+#define R_PPC_ADDR32           1       /* 32bit absolute address */
+#define R_PPC_ADDR24           2       /* 26bit address, 2 bits ignored.  */
+#define R_PPC_ADDR16           3       /* 16bit absolute address */
+#define R_PPC_ADDR16_LO                4       /* lower 16bit of absolute address */
+#define R_PPC_ADDR16_HI                5       /* high 16bit of absolute address */
+#define R_PPC_ADDR16_HA                6       /* adjusted high 16bit */
+#define R_PPC_ADDR14           7       /* 16bit address, 2 bits ignored */
+#define R_PPC_ADDR14_BRTAKEN   8
+#define R_PPC_ADDR14_BRNTAKEN  9
+#define R_PPC_REL24            10      /* PC relative 26 bit */
+#define R_PPC_REL14            11      /* PC relative 16 bit */
+#define R_PPC_REL14_BRTAKEN    12
+#define R_PPC_REL14_BRNTAKEN   13
+#define R_PPC_GOT16            14
+#define R_PPC_GOT16_LO         15
+#define R_PPC_GOT16_HI         16
+#define R_PPC_GOT16_HA         17
+#define R_PPC_PLTREL24         18
+#define R_PPC_COPY             19
+#define R_PPC_GLOB_DAT         20
+#define R_PPC_JMP_SLOT         21
+#define R_PPC_RELATIVE         22
+#define R_PPC_LOCAL24PC                23
+#define R_PPC_UADDR32          24
+#define R_PPC_UADDR16          25
+#define R_PPC_REL32            26
+#define R_PPC_PLT32            27
+#define R_PPC_PLTREL32         28
+#define R_PPC_PLT16_LO         29
+#define R_PPC_PLT16_HI         30
+#define R_PPC_PLT16_HA         31
+#define R_PPC_SDAREL16         32
+#define R_PPC_SECTOFF          33
+#define R_PPC_SECTOFF_LO       34
+#define R_PPC_SECTOFF_HI       35
+#define R_PPC_SECTOFF_HA       36
+
+/* PowerPC relocations defined for the TLS access ABI.  */
+#define R_PPC_TLS              67 /* none      (sym+add)@tls */
+#define R_PPC_DTPMOD32         68 /* word32    (sym+add)@dtpmod */
+#define R_PPC_TPREL16          69 /* half16*   (sym+add)@tprel */
+#define R_PPC_TPREL16_LO       70 /* half16    (sym+add)@tprel@l */
+#define R_PPC_TPREL16_HI       71 /* half16    (sym+add)@tprel@h */
+#define R_PPC_TPREL16_HA       72 /* half16    (sym+add)@tprel@ha */
+#define R_PPC_TPREL32          73 /* word32    (sym+add)@tprel */
+#define R_PPC_DTPREL16         74 /* half16*   (sym+add)@dtprel */
+#define R_PPC_DTPREL16_LO      75 /* half16    (sym+add)@dtprel@l */
+#define R_PPC_DTPREL16_HI      76 /* half16    (sym+add)@dtprel@h */
+#define R_PPC_DTPREL16_HA      77 /* half16    (sym+add)@dtprel@ha */
+#define R_PPC_DTPREL32         78 /* word32    (sym+add)@dtprel */
+#define R_PPC_GOT_TLSGD16      79 /* half16*   (sym+add)@got@tlsgd */
+#define R_PPC_GOT_TLSGD16_LO   80 /* half16    (sym+add)@got@tlsgd@l */
+#define R_PPC_GOT_TLSGD16_HI   81 /* half16    (sym+add)@got@tlsgd@h */
+#define R_PPC_GOT_TLSGD16_HA   82 /* half16    (sym+add)@got@tlsgd@ha */
+#define R_PPC_GOT_TLSLD16      83 /* half16*   (sym+add)@got@tlsld */
+#define R_PPC_GOT_TLSLD16_LO   84 /* half16    (sym+add)@got@tlsld@l */
+#define R_PPC_GOT_TLSLD16_HI   85 /* half16    (sym+add)@got@tlsld@h */
+#define R_PPC_GOT_TLSLD16_HA   86 /* half16    (sym+add)@got@tlsld@ha */
+#define R_PPC_GOT_TPREL16      87 /* half16*   (sym+add)@got@tprel */
+#define R_PPC_GOT_TPREL16_LO   88 /* half16    (sym+add)@got@tprel@l */
+#define R_PPC_GOT_TPREL16_HI   89 /* half16    (sym+add)@got@tprel@h */
+#define R_PPC_GOT_TPREL16_HA   90 /* half16    (sym+add)@got@tprel@ha */
+#define R_PPC_GOT_DTPREL16     91 /* half16*   (sym+add)@got@dtprel */
+#define R_PPC_GOT_DTPREL16_LO  92 /* half16*   (sym+add)@got@dtprel@l */
+#define R_PPC_GOT_DTPREL16_HI  93 /* half16*   (sym+add)@got@dtprel@h */
+#define R_PPC_GOT_DTPREL16_HA  94 /* half16*   (sym+add)@got@dtprel@ha */
+#define R_PPC_TLSGD            95 /* none      (sym+add)@tlsgd */
+#define R_PPC_TLSLD            96 /* none      (sym+add)@tlsld */
+
+/* The remaining relocs are from the Embedded ELF ABI, and are not
+   in the SVR4 ELF ABI.  */
+#define R_PPC_EMB_NADDR32      101
+#define R_PPC_EMB_NADDR16      102
+#define R_PPC_EMB_NADDR16_LO   103
+#define R_PPC_EMB_NADDR16_HI   104
+#define R_PPC_EMB_NADDR16_HA   105
+#define R_PPC_EMB_SDAI16       106
+#define R_PPC_EMB_SDA2I16      107
+#define R_PPC_EMB_SDA2REL      108
+#define R_PPC_EMB_SDA21                109     /* 16 bit offset in SDA */
+#define R_PPC_EMB_MRKREF       110
+#define R_PPC_EMB_RELSEC16     111
+#define R_PPC_EMB_RELST_LO     112
+#define R_PPC_EMB_RELST_HI     113
+#define R_PPC_EMB_RELST_HA     114
+#define R_PPC_EMB_BIT_FLD      115
+#define R_PPC_EMB_RELSDA       116     /* 16 bit relative offset in SDA */
+
+/* Diab tool relocations.  */
+#define R_PPC_DIAB_SDA21_LO    180     /* like EMB_SDA21, but lower 16 bit */
+#define R_PPC_DIAB_SDA21_HI    181     /* like EMB_SDA21, but high 16 bit */
+#define R_PPC_DIAB_SDA21_HA    182     /* like EMB_SDA21, adjusted high 16 */
+#define R_PPC_DIAB_RELSDA_LO   183     /* like EMB_RELSDA, but lower 16 bit */
+#define R_PPC_DIAB_RELSDA_HI   184     /* like EMB_RELSDA, but high 16 bit */
+#define R_PPC_DIAB_RELSDA_HA   185     /* like EMB_RELSDA, adjusted high 16 */
+
+/* GNU extension to support local ifunc.  */
+#define R_PPC_IRELATIVE                248
+
+/* GNU relocs used in PIC code sequences.  */
+#define R_PPC_REL16            249     /* half16   (sym+add-.) */
+#define R_PPC_REL16_LO         250     /* half16   (sym+add-.)@l */
+#define R_PPC_REL16_HI         251     /* half16   (sym+add-.)@h */
+#define R_PPC_REL16_HA         252     /* half16   (sym+add-.)@ha */
+
+/* This is a phony reloc to handle any old fashioned TOC16 references
+   that may still be in object files.  */
+#define R_PPC_TOC16            255
+
+/* PowerPC specific values for the Dyn d_tag field.  */
+#define DT_PPC_GOT             (DT_LOPROC + 0)
+#define DT_PPC_OPT             (DT_LOPROC + 1)
+#define DT_PPC_NUM             2
+
+/* PowerPC specific values for the DT_PPC_OPT Dyn entry.  */
+#define PPC_OPT_TLS            1
+
+/* PowerPC64 relocations defined by the ABIs */
+#define R_PPC64_NONE           R_PPC_NONE
+#define R_PPC64_ADDR32         R_PPC_ADDR32 /* 32bit absolute address */
+#define R_PPC64_ADDR24         R_PPC_ADDR24 /* 26bit address, word aligned */
+#define R_PPC64_ADDR16         R_PPC_ADDR16 /* 16bit absolute address */
+#define R_PPC64_ADDR16_LO      R_PPC_ADDR16_LO /* lower 16bits of address */
+#define R_PPC64_ADDR16_HI      R_PPC_ADDR16_HI /* high 16bits of address. */
+#define R_PPC64_ADDR16_HA      R_PPC_ADDR16_HA /* adjusted high 16bits.  */
+#define R_PPC64_ADDR14         R_PPC_ADDR14 /* 16bit address, word aligned */
+#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
+#define R_PPC64_ADDR14_BRNTAKEN        R_PPC_ADDR14_BRNTAKEN
+#define R_PPC64_REL24          R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
+#define R_PPC64_REL14          R_PPC_REL14 /* PC relative 16 bit */
+#define R_PPC64_REL14_BRTAKEN  R_PPC_REL14_BRTAKEN
+#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
+#define R_PPC64_GOT16          R_PPC_GOT16
+#define R_PPC64_GOT16_LO       R_PPC_GOT16_LO
+#define R_PPC64_GOT16_HI       R_PPC_GOT16_HI
+#define R_PPC64_GOT16_HA       R_PPC_GOT16_HA
+
+#define R_PPC64_COPY           R_PPC_COPY
+#define R_PPC64_GLOB_DAT       R_PPC_GLOB_DAT
+#define R_PPC64_JMP_SLOT       R_PPC_JMP_SLOT
+#define R_PPC64_RELATIVE       R_PPC_RELATIVE
+
+#define R_PPC64_UADDR32                R_PPC_UADDR32
+#define R_PPC64_UADDR16                R_PPC_UADDR16
+#define R_PPC64_REL32          R_PPC_REL32
+#define R_PPC64_PLT32          R_PPC_PLT32
+#define R_PPC64_PLTREL32       R_PPC_PLTREL32
+#define R_PPC64_PLT16_LO       R_PPC_PLT16_LO
+#define R_PPC64_PLT16_HI       R_PPC_PLT16_HI
+#define R_PPC64_PLT16_HA       R_PPC_PLT16_HA
+
+#define R_PPC64_SECTOFF                R_PPC_SECTOFF
+#define R_PPC64_SECTOFF_LO     R_PPC_SECTOFF_LO
+#define R_PPC64_SECTOFF_HI     R_PPC_SECTOFF_HI
+#define R_PPC64_SECTOFF_HA     R_PPC_SECTOFF_HA
+#define R_PPC64_ADDR30         37 /* word30 (S + A - P) >> 2 */
+#define R_PPC64_ADDR64         38 /* doubleword64 S + A */
+#define R_PPC64_ADDR16_HIGHER  39 /* half16 #higher(S + A) */
+#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */
+#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */
+#define R_PPC64_ADDR16_HIGHESTA        42 /* half16 #highesta(S + A) */
+#define R_PPC64_UADDR64                43 /* doubleword64 S + A */
+#define R_PPC64_REL64          44 /* doubleword64 S + A - P */
+#define R_PPC64_PLT64          45 /* doubleword64 L + A */
+#define R_PPC64_PLTREL64       46 /* doubleword64 L + A - P */
+#define R_PPC64_TOC16          47 /* half16* S + A - .TOC */
+#define R_PPC64_TOC16_LO       48 /* half16 #lo(S + A - .TOC.) */
+#define R_PPC64_TOC16_HI       49 /* half16 #hi(S + A - .TOC.) */
+#define R_PPC64_TOC16_HA       50 /* half16 #ha(S + A - .TOC.) */
+#define R_PPC64_TOC            51 /* doubleword64 .TOC */
+#define R_PPC64_PLTGOT16       52 /* half16* M + A */
+#define R_PPC64_PLTGOT16_LO    53 /* half16 #lo(M + A) */
+#define R_PPC64_PLTGOT16_HI    54 /* half16 #hi(M + A) */
+#define R_PPC64_PLTGOT16_HA    55 /* half16 #ha(M + A) */
+
+#define R_PPC64_ADDR16_DS      56 /* half16ds* (S + A) >> 2 */
+#define R_PPC64_ADDR16_LO_DS   57 /* half16ds  #lo(S + A) >> 2 */
+#define R_PPC64_GOT16_DS       58 /* half16ds* (G + A) >> 2 */
+#define R_PPC64_GOT16_LO_DS    59 /* half16ds  #lo(G + A) >> 2 */
+#define R_PPC64_PLT16_LO_DS    60 /* half16ds  #lo(L + A) >> 2 */
+#define R_PPC64_SECTOFF_DS     61 /* half16ds* (R + A) >> 2 */
+#define R_PPC64_SECTOFF_LO_DS  62 /* half16ds  #lo(R + A) >> 2 */
+#define R_PPC64_TOC16_DS       63 /* half16ds* (S + A - .TOC.) >> 2 */
+#define R_PPC64_TOC16_LO_DS    64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
+#define R_PPC64_PLTGOT16_DS    65 /* half16ds* (M + A) >> 2 */
+#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds  #lo(M + A) >> 2 */
+
+/* PowerPC64 relocations defined for the TLS access ABI.  */
+#define R_PPC64_TLS            67 /* none      (sym+add)@tls */
+#define R_PPC64_DTPMOD64       68 /* doubleword64 (sym+add)@dtpmod */
+#define R_PPC64_TPREL16                69 /* half16*   (sym+add)@tprel */
+#define R_PPC64_TPREL16_LO     70 /* half16    (sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HI     71 /* half16    (sym+add)@tprel@h */
+#define R_PPC64_TPREL16_HA     72 /* half16    (sym+add)@tprel@ha */
+#define R_PPC64_TPREL64                73 /* doubleword64 (sym+add)@tprel */
+#define R_PPC64_DTPREL16       74 /* half16*   (sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO    75 /* half16    (sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HI    76 /* half16    (sym+add)@dtprel@h */
+#define R_PPC64_DTPREL16_HA    77 /* half16    (sym+add)@dtprel@ha */
+#define R_PPC64_DTPREL64       78 /* doubleword64 (sym+add)@dtprel */
+#define R_PPC64_GOT_TLSGD16    79 /* half16*   (sym+add)@got@tlsgd */
+#define R_PPC64_GOT_TLSGD16_LO 80 /* half16    (sym+add)@got@tlsgd@l */
+#define R_PPC64_GOT_TLSGD16_HI 81 /* half16    (sym+add)@got@tlsgd@h */
+#define R_PPC64_GOT_TLSGD16_HA 82 /* half16    (sym+add)@got@tlsgd@ha */
+#define R_PPC64_GOT_TLSLD16    83 /* half16*   (sym+add)@got@tlsld */
+#define R_PPC64_GOT_TLSLD16_LO 84 /* half16    (sym+add)@got@tlsld@l */
+#define R_PPC64_GOT_TLSLD16_HI 85 /* half16    (sym+add)@got@tlsld@h */
+#define R_PPC64_GOT_TLSLD16_HA 86 /* half16    (sym+add)@got@tlsld@ha */
+#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */
+#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
+#define R_PPC64_GOT_TPREL16_HI 89 /* half16    (sym+add)@got@tprel@h */
+#define R_PPC64_GOT_TPREL16_HA 90 /* half16    (sym+add)@got@tprel@ha */
+#define R_PPC64_GOT_DTPREL16_DS        91 /* half16ds* (sym+add)@got@dtprel */
+#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
+#define R_PPC64_GOT_DTPREL16_HI        93 /* half16    (sym+add)@got@dtprel@h */
+#define R_PPC64_GOT_DTPREL16_HA        94 /* half16    (sym+add)@got@dtprel@ha */
+#define R_PPC64_TPREL16_DS     95 /* half16ds* (sym+add)@tprel */
+#define R_PPC64_TPREL16_LO_DS  96 /* half16ds  (sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HIGHER 97 /* half16    (sym+add)@tprel@higher */
+#define R_PPC64_TPREL16_HIGHERA        98 /* half16    (sym+add)@tprel@highera */
+#define R_PPC64_TPREL16_HIGHEST        99 /* half16    (sym+add)@tprel@highest */
+#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */
+#define R_PPC64_DTPREL16_DS    101 /* half16ds* (sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HIGHER        103 /* half16   (sym+add)@dtprel@higher */
+#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
+#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
+#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16        (sym+add)@dtprel@highesta */
+#define R_PPC64_TLSGD          107 /* none     (sym+add)@tlsgd */
+#define R_PPC64_TLSLD          108 /* none     (sym+add)@tlsld */
+#define R_PPC64_TOCSAVE                109 /* none */
+
+/* Added when HA and HI relocs were changed to report overflows.  */
+#define R_PPC64_ADDR16_HIGH    110
+#define R_PPC64_ADDR16_HIGHA   111
+#define R_PPC64_TPREL16_HIGH   112
+#define R_PPC64_TPREL16_HIGHA  113
+#define R_PPC64_DTPREL16_HIGH  114
+#define R_PPC64_DTPREL16_HIGHA 115
+
+/* GNU extension to support local ifunc.  */
+#define R_PPC64_JMP_IREL       247
+#define R_PPC64_IRELATIVE      248
+#define R_PPC64_REL16          249     /* half16   (sym+add-.) */
+#define R_PPC64_REL16_LO       250     /* half16   (sym+add-.)@l */
+#define R_PPC64_REL16_HI       251     /* half16   (sym+add-.)@h */
+#define R_PPC64_REL16_HA       252     /* half16   (sym+add-.)@ha */
+
+/* e_flags bits specifying ABI.
+   1 for original function descriptor using ABI,
+   2 for revised ABI without function descriptors,
+   0 for unspecified or not using any features affected by the differences.  */
+#define EF_PPC64_ABI   3
+
+/* PowerPC64 specific values for the Dyn d_tag field.  */
+#define DT_PPC64_GLINK  (DT_LOPROC + 0)
+#define DT_PPC64_OPD   (DT_LOPROC + 1)
+#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
+#define DT_PPC64_OPT   (DT_LOPROC + 3)
+#define DT_PPC64_NUM    4
+
+/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry.  */
+#define PPC64_OPT_TLS          1
+#define PPC64_OPT_MULTI_TOC    2
+
+/* PowerPC64 specific values for the Elf64_Sym st_other field.  */
+#define STO_PPC64_LOCAL_BIT    5
+#define STO_PPC64_LOCAL_MASK   (7 << STO_PPC64_LOCAL_BIT)
+#define PPC64_LOCAL_ENTRY_OFFSET(other)                                \
+ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
+
+
+/* ARM specific declarations */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_ARM_RELEXEC         0x01
+#define EF_ARM_HASENTRY                0x02
+#define EF_ARM_INTERWORK       0x04
+#define EF_ARM_APCS_26         0x08
+#define EF_ARM_APCS_FLOAT      0x10
+#define EF_ARM_PIC             0x20
+#define EF_ARM_ALIGN8          0x40 /* 8-bit structure alignment is in use */
+#define EF_ARM_NEW_ABI         0x80
+#define EF_ARM_OLD_ABI         0x100
+#define EF_ARM_SOFT_FLOAT      0x200
+#define EF_ARM_VFP_FLOAT       0x400
+#define EF_ARM_MAVERICK_FLOAT  0x800
+
+#define EF_ARM_ABI_FLOAT_SOFT  0x200   /* NB conflicts with EF_ARM_SOFT_FLOAT */
+#define EF_ARM_ABI_FLOAT_HARD  0x400   /* NB conflicts with EF_ARM_VFP_FLOAT */
+
+
+/* Other constants defined in the ARM ELF spec. version B-01.  */
+/* NB. These conflict with values defined above.  */
+#define EF_ARM_SYMSARESORTED   0x04
+#define EF_ARM_DYNSYMSUSESEGIDX        0x08
+#define EF_ARM_MAPSYMSFIRST    0x10
+#define EF_ARM_EABIMASK                0XFF000000
+
+/* Constants defined in AAELF.  */
+#define EF_ARM_BE8         0x00800000
+#define EF_ARM_LE8         0x00400000
+
+#define EF_ARM_EABI_VERSION(flags)     ((flags) & EF_ARM_EABIMASK)
+#define EF_ARM_EABI_UNKNOWN    0x00000000
+#define EF_ARM_EABI_VER1       0x01000000
+#define EF_ARM_EABI_VER2       0x02000000
+#define EF_ARM_EABI_VER3       0x03000000
+#define EF_ARM_EABI_VER4       0x04000000
+#define EF_ARM_EABI_VER5       0x05000000
+
+/* Additional symbol types for Thumb.  */
+#define STT_ARM_TFUNC          STT_LOPROC /* A Thumb function.  */
+#define STT_ARM_16BIT          STT_HIPROC /* A Thumb label.  */
+
+/* ARM-specific values for sh_flags */
+#define SHF_ARM_ENTRYSECT      0x10000000 /* Section contains an entry point */
+#define SHF_ARM_COMDEF         0x80000000 /* Section may be multiply defined
+                                             in the input to a link step.  */
+
+/* ARM-specific program header flags */
+#define PF_ARM_SB              0x10000000 /* Segment contains the location
+                                             addressed by the static base. */
+#define PF_ARM_PI              0x20000000 /* Position-independent segment.  */
+#define PF_ARM_ABS             0x40000000 /* Absolute segment.  */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_ARM_EXIDX           (PT_LOPROC + 1) /* ARM unwind segment.  */
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_ARM_EXIDX          (SHT_LOPROC + 1) /* ARM unwind section.  */
+#define SHT_ARM_PREEMPTMAP     (SHT_LOPROC + 2) /* Preemption details.  */
+#define SHT_ARM_ATTRIBUTES     (SHT_LOPROC + 3) /* ARM attributes section.  */
+
+
+/* AArch64 relocs.  */
+
+#define R_AARCH64_NONE            0    /* No relocation.  */
+
+/* ILP32 AArch64 relocs.  */
+#define R_AARCH64_P32_ABS32              1     /* Direct 32 bit.  */
+#define R_AARCH64_P32_COPY             180     /* Copy symbol at runtime.  */
+#define R_AARCH64_P32_GLOB_DAT         181     /* Create GOT entry.  */
+#define R_AARCH64_P32_JUMP_SLOT                182     /* Create PLT entry.  */
+#define R_AARCH64_P32_RELATIVE         183     /* Adjust by program base.  */
+#define R_AARCH64_P32_TLS_DTPMOD       184     /* Module number, 32 bit.  */
+#define R_AARCH64_P32_TLS_DTPREL       185     /* Module-relative offset, 32 bit.  */
+#define R_AARCH64_P32_TLS_TPREL                186     /* TP-relative offset, 32 bit.  */
+#define R_AARCH64_P32_TLSDESC          187     /* TLS Descriptor.  */
+#define R_AARCH64_P32_IRELATIVE                188     /* STT_GNU_IFUNC relocation. */
+
+/* LP64 AArch64 relocs.  */
+#define R_AARCH64_ABS64         257    /* Direct 64 bit. */
+#define R_AARCH64_ABS32         258    /* Direct 32 bit.  */
+#define R_AARCH64_ABS16                259     /* Direct 16-bit.  */
+#define R_AARCH64_PREL64       260     /* PC-relative 64-bit.  */
+#define R_AARCH64_PREL32       261     /* PC-relative 32-bit.  */
+#define R_AARCH64_PREL16       262     /* PC-relative 16-bit.  */
+#define R_AARCH64_MOVW_UABS_G0 263     /* Dir. MOVZ imm. from bits 15:0.  */
+#define R_AARCH64_MOVW_UABS_G0_NC 264  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G1 265     /* Dir. MOVZ imm. from bits 31:16.  */
+#define R_AARCH64_MOVW_UABS_G1_NC 266  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G2 267     /* Dir. MOVZ imm. from bits 47:32.  */
+#define R_AARCH64_MOVW_UABS_G2_NC 268  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G3 269     /* Dir. MOV{K,Z} imm. from 63:48.  */
+#define R_AARCH64_MOVW_SABS_G0 270     /* Dir. MOV{N,Z} imm. from 15:0.  */
+#define R_AARCH64_MOVW_SABS_G1 271     /* Dir. MOV{N,Z} imm. from 31:16.  */
+#define R_AARCH64_MOVW_SABS_G2 272     /* Dir. MOV{N,Z} imm. from 47:32.  */
+#define R_AARCH64_LD_PREL_LO19 273     /* PC-rel. LD imm. from bits 20:2.  */
+#define R_AARCH64_ADR_PREL_LO21        274     /* PC-rel. ADR imm. from bits 20:0.  */
+#define R_AARCH64_ADR_PREL_PG_HI21 275 /* Page-rel. ADRP imm. from 32:12.  */
+#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check.  */
+#define R_AARCH64_ADD_ABS_LO12_NC 277  /* Dir. ADD imm. from bits 11:0.  */
+#define R_AARCH64_LDST8_ABS_LO12_NC 278        /* Likewise for LD/ST; no check. */
+#define R_AARCH64_TSTBR14      279     /* PC-rel. TBZ/TBNZ imm. from 15:2.  */
+#define R_AARCH64_CONDBR19     280     /* PC-rel. cond. br. imm. from 20:2. */
+#define R_AARCH64_JUMP26       282     /* PC-rel. B imm. from bits 27:2.  */
+#define R_AARCH64_CALL26       283     /* Likewise for CALL.  */
+#define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1.  */
+#define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2.  */
+#define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3.  */
+#define R_AARCH64_MOVW_PREL_G0 287     /* PC-rel. MOV{N,Z} imm. from 15:0.  */
+#define R_AARCH64_MOVW_PREL_G0_NC 288  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G1 289     /* PC-rel. MOV{N,Z} imm. from 31:16. */
+#define R_AARCH64_MOVW_PREL_G1_NC 290  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G2 291     /* PC-rel. MOV{N,Z} imm. from 47:32. */
+#define R_AARCH64_MOVW_PREL_G2_NC 292  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G3 293     /* PC-rel. MOV{N,Z} imm. from 63:48. */
+#define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4.  */
+#define R_AARCH64_MOVW_GOTOFF_G0 300   /* GOT-rel. off. MOV{N,Z} imm. 15:0. */
+#define R_AARCH64_MOVW_GOTOFF_G0_NC 301        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G1 302   /* GOT-rel. o. MOV{N,Z} imm. 31:16.  */
+#define R_AARCH64_MOVW_GOTOFF_G1_NC 303        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G2 304   /* GOT-rel. o. MOV{N,Z} imm. 47:32.  */
+#define R_AARCH64_MOVW_GOTOFF_G2_NC 305        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G3 306   /* GOT-rel. o. MOV{N,Z} imm. 63:48.  */
+#define R_AARCH64_GOTREL64     307     /* GOT-relative 64-bit.  */
+#define R_AARCH64_GOTREL32     308     /* GOT-relative 32-bit.  */
+#define R_AARCH64_GOT_LD_PREL19        309     /* PC-rel. GOT off. load imm. 20:2.  */
+#define R_AARCH64_LD64_GOTOFF_LO15 310 /* GOT-rel. off. LD/ST imm. 14:3.  */
+#define R_AARCH64_ADR_GOT_PAGE 311     /* P-page-rel. GOT off. ADRP 32:12.  */
+#define R_AARCH64_LD64_GOT_LO12_NC 312 /* Dir. GOT off. LD/ST imm. 11:3.  */
+#define R_AARCH64_LD64_GOTPAGE_LO15 313        /* GOT-page-rel. GOT off. LD/ST 14:3 */
+#define R_AARCH64_TLSGD_ADR_PREL21 512 /* PC-relative ADR imm. 20:0.  */
+#define R_AARCH64_TLSGD_ADR_PAGE21 513 /* page-rel. ADRP imm. 32:12.  */
+#define R_AARCH64_TLSGD_ADD_LO12_NC 514        /* direct ADD imm. from 11:0.  */
+#define R_AARCH64_TLSGD_MOVW_G1        515     /* GOT-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSGD_MOVW_G0_NC 516 /* GOT-rel. MOVK imm. 15:0.  */
+#define R_AARCH64_TLSLD_ADR_PREL21 517 /* Like 512; local dynamic model.  */
+#define R_AARCH64_TLSLD_ADR_PAGE21 518 /* Like 513; local dynamic model.  */
+#define R_AARCH64_TLSLD_ADD_LO12_NC 519        /* Like 514; local dynamic model.  */
+#define R_AARCH64_TLSLD_MOVW_G1        520     /* Like 515; local dynamic model.  */
+#define R_AARCH64_TLSLD_MOVW_G0_NC 521 /* Like 516; local dynamic model.  */
+#define R_AARCH64_TLSLD_LD_PREL19 522  /* TLS PC-rel. load imm. 20:2.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */
+#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0.  */
+#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check.  */
+#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0.  */
+#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1.  */
+#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2.  */
+#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3.  */
+#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check.  */
+#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0.  */
+#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12.  */
+#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3.  */
+#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check.  */
+#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0.  */
+#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */
+#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1.  */
+#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check.  */
+#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2.  */
+#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check.  */
+#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3.  */
+#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check.  */
+#define R_AARCH64_TLSDESC_LD_PREL19 560        /* PC-rel. load immediate 20:2.  */
+#define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0.  */
+#define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12.  */
+#define R_AARCH64_TLSDESC_LD64_LO12 563        /* Direct LD off. from 11:3.  */
+#define R_AARCH64_TLSDESC_ADD_LO12 564 /* Direct ADD imm. from 11:0.  */
+#define R_AARCH64_TLSDESC_OFF_G1 565   /* GOT-rel. MOV{N,Z} imm. 31:16.  */
+#define R_AARCH64_TLSDESC_OFF_G0_NC 566        /* GOT-rel. MOVK imm. 15:0; no ck.  */
+#define R_AARCH64_TLSDESC_LDR  567     /* Relax LDR.  */
+#define R_AARCH64_TLSDESC_ADD  568     /* Relax ADD.  */
+#define R_AARCH64_TLSDESC_CALL 569     /* Relax BLR.  */
+#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4.  */
+#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */
+#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check.  */
+#define R_AARCH64_COPY         1024    /* Copy symbol at runtime.  */
+#define R_AARCH64_GLOB_DAT     1025    /* Create GOT entry.  */
+#define R_AARCH64_JUMP_SLOT    1026    /* Create PLT entry.  */
+#define R_AARCH64_RELATIVE     1027    /* Adjust by program base.  */
+#define R_AARCH64_TLS_DTPMOD   1028    /* Module number, 64 bit.  */
+#define R_AARCH64_TLS_DTPREL   1029    /* Module-relative offset, 64 bit.  */
+#define R_AARCH64_TLS_TPREL    1030    /* TP-relative offset, 64 bit.  */
+#define R_AARCH64_TLSDESC      1031    /* TLS Descriptor.  */
+#define R_AARCH64_IRELATIVE    1032    /* STT_GNU_IFUNC relocation.  */
+
+/* ARM relocs.  */
+
+#define R_ARM_NONE             0       /* No reloc */
+#define R_ARM_PC24             1       /* Deprecated PC relative 26
+                                          bit branch.  */
+#define R_ARM_ABS32            2       /* Direct 32 bit  */
+#define R_ARM_REL32            3       /* PC relative 32 bit */
+#define R_ARM_PC13             4
+#define R_ARM_ABS16            5       /* Direct 16 bit */
+#define R_ARM_ABS12            6       /* Direct 12 bit */
+#define R_ARM_THM_ABS5         7       /* Direct & 0x7C (LDR, STR).  */
+#define R_ARM_ABS8             8       /* Direct 8 bit */
+#define R_ARM_SBREL32          9
+#define R_ARM_THM_PC22         10      /* PC relative 24 bit (Thumb32 BL).  */
+#define R_ARM_THM_PC8          11      /* PC relative & 0x3FC
+                                          (Thumb16 LDR, ADD, ADR).  */
+#define R_ARM_AMP_VCALL9       12
+#define R_ARM_SWI24            13      /* Obsolete static relocation.  */
+#define R_ARM_TLS_DESC         13      /* Dynamic relocation.  */
+#define R_ARM_THM_SWI8         14      /* Reserved.  */
+#define R_ARM_XPC25            15      /* Reserved.  */
+#define R_ARM_THM_XPC22                16      /* Reserved.  */
+#define R_ARM_TLS_DTPMOD32     17      /* ID of module containing symbol */
+#define R_ARM_TLS_DTPOFF32     18      /* Offset in TLS block */
+#define R_ARM_TLS_TPOFF32      19      /* Offset in static TLS block */
+#define R_ARM_COPY             20      /* Copy symbol at runtime */
+#define R_ARM_GLOB_DAT         21      /* Create GOT entry */
+#define R_ARM_JUMP_SLOT                22      /* Create PLT entry */
+#define R_ARM_RELATIVE         23      /* Adjust by program base */
+#define R_ARM_GOTOFF           24      /* 32 bit offset to GOT */
+#define R_ARM_GOTPC            25      /* 32 bit PC relative offset to GOT */
+#define R_ARM_GOT32            26      /* 32 bit GOT entry */
+#define R_ARM_PLT32            27      /* Deprecated, 32 bit PLT address.  */
+#define R_ARM_CALL             28      /* PC relative 24 bit (BL, BLX).  */
+#define R_ARM_JUMP24           29      /* PC relative 24 bit
+                                          (B, BL<cond>).  */
+#define R_ARM_THM_JUMP24       30      /* PC relative 24 bit (Thumb32 B.W).  */
+#define R_ARM_BASE_ABS         31      /* Adjust by program base.  */
+#define R_ARM_ALU_PCREL_7_0    32      /* Obsolete.  */
+#define R_ARM_ALU_PCREL_15_8   33      /* Obsolete.  */
+#define R_ARM_ALU_PCREL_23_15  34      /* Obsolete.  */
+#define R_ARM_LDR_SBREL_11_0   35      /* Deprecated, prog. base relative.  */
+#define R_ARM_ALU_SBREL_19_12  36      /* Deprecated, prog. base relative.  */
+#define R_ARM_ALU_SBREL_27_20  37      /* Deprecated, prog. base relative.  */
+#define R_ARM_TARGET1          38
+#define R_ARM_SBREL31          39      /* Program base relative.  */
+#define R_ARM_V4BX             40
+#define R_ARM_TARGET2          41
+#define R_ARM_PREL31           42      /* 32 bit PC relative.  */
+#define R_ARM_MOVW_ABS_NC      43      /* Direct 16-bit (MOVW).  */
+#define R_ARM_MOVT_ABS         44      /* Direct high 16-bit (MOVT).  */
+#define R_ARM_MOVW_PREL_NC     45      /* PC relative 16-bit (MOVW).  */
+#define R_ARM_MOVT_PREL                46      /* PC relative (MOVT).  */
+#define R_ARM_THM_MOVW_ABS_NC  47      /* Direct 16 bit (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_ABS     48      /* Direct high 16 bit
+                                          (Thumb32 MOVT).  */
+#define R_ARM_THM_MOVW_PREL_NC 49      /* PC relative 16 bit
+                                          (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_PREL    50      /* PC relative high 16 bit
+                                          (Thumb32 MOVT).  */
+#define R_ARM_THM_JUMP19       51      /* PC relative 20 bit
+                                          (Thumb32 B<cond>.W).  */
+#define R_ARM_THM_JUMP6                52      /* PC relative X & 0x7E
+                                          (Thumb16 CBZ, CBNZ).  */
+#define R_ARM_THM_ALU_PREL_11_0        53      /* PC relative 12 bit
+                                          (Thumb32 ADR.W).  */
+#define R_ARM_THM_PC12         54      /* PC relative 12 bit
+                                          (Thumb32 LDR{D,SB,H,SH}).  */
+#define R_ARM_ABS32_NOI                55      /* Direct 32-bit.  */
+#define R_ARM_REL32_NOI                56      /* PC relative 32-bit.  */
+#define R_ARM_ALU_PC_G0_NC     57      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G0                58      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G1_NC     59      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G1                60      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G2                61      /* PC relative (ADD, SUB).  */
+#define R_ARM_LDR_PC_G1                62      /* PC relative (LDR,STR,LDRB,STRB).  */
+#define R_ARM_LDR_PC_G2                63      /* PC relative (LDR,STR,LDRB,STRB).  */
+#define R_ARM_LDRS_PC_G0       64      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDRS_PC_G1       65      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDRS_PC_G2       66      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDC_PC_G0                67      /* PC relative (LDC, STC).  */
+#define R_ARM_LDC_PC_G1                68      /* PC relative (LDC, STC).  */
+#define R_ARM_LDC_PC_G2                69      /* PC relative (LDC, STC).  */
+#define R_ARM_ALU_SB_G0_NC     70      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G0                71      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G1_NC     72      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G1                73      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G2                74      /* Program base relative (ADD,SUB).  */
+#define R_ARM_LDR_SB_G0                75      /* Program base relative (LDR,
+                                          STR, LDRB, STRB).  */
+#define R_ARM_LDR_SB_G1                76      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDR_SB_G2                77      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G0       78      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G1       79      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G2       80      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDC_SB_G0                81      /* Program base relative (LDC,STC).  */
+#define R_ARM_LDC_SB_G1                82      /* Program base relative (LDC,STC).  */
+#define R_ARM_LDC_SB_G2                83      /* Program base relative (LDC,STC).  */
+#define R_ARM_MOVW_BREL_NC     84      /* Program base relative 16
+                                          bit (MOVW).  */
+#define R_ARM_MOVT_BREL                85      /* Program base relative high
+                                          16 bit (MOVT).  */
+#define R_ARM_MOVW_BREL                86      /* Program base relative 16
+                                          bit (MOVW).  */
+#define R_ARM_THM_MOVW_BREL_NC 87      /* Program base relative 16
+                                          bit (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_BREL    88      /* Program base relative high
+                                          16 bit (Thumb32 MOVT).  */
+#define R_ARM_THM_MOVW_BREL    89      /* Program base relative 16
+                                          bit (Thumb32 MOVW).  */
+#define R_ARM_TLS_GOTDESC      90
+#define R_ARM_TLS_CALL         91
+#define R_ARM_TLS_DESCSEQ      92      /* TLS relaxation.  */
+#define R_ARM_THM_TLS_CALL     93
+#define R_ARM_PLT32_ABS                94
+#define R_ARM_GOT_ABS          95      /* GOT entry.  */
+#define R_ARM_GOT_PREL         96      /* PC relative GOT entry.  */
+#define R_ARM_GOT_BREL12       97      /* GOT entry relative to GOT
+                                          origin (LDR).  */
+#define R_ARM_GOTOFF12         98      /* 12 bit, GOT entry relative
+                                          to GOT origin (LDR, STR).  */
+#define R_ARM_GOTRELAX         99
+#define R_ARM_GNU_VTENTRY      100
+#define R_ARM_GNU_VTINHERIT    101
+#define R_ARM_THM_PC11         102     /* PC relative & 0xFFE (Thumb16 B).  */
+#define R_ARM_THM_PC9          103     /* PC relative & 0x1FE
+                                          (Thumb16 B/B<cond>).  */
+#define R_ARM_TLS_GD32         104     /* PC-rel 32 bit for global dynamic
+                                          thread local data */
+#define R_ARM_TLS_LDM32                105     /* PC-rel 32 bit for local dynamic
+                                          thread local data */
+#define R_ARM_TLS_LDO32                106     /* 32 bit offset relative to TLS
+                                          block */
+#define R_ARM_TLS_IE32         107     /* PC-rel 32 bit for GOT entry of
+                                          static TLS block offset */
+#define R_ARM_TLS_LE32         108     /* 32 bit offset relative to static
+                                          TLS block */
+#define R_ARM_TLS_LDO12                109     /* 12 bit relative to TLS
+                                          block (LDR, STR).  */
+#define R_ARM_TLS_LE12         110     /* 12 bit relative to static
+                                          TLS block (LDR, STR).  */
+#define R_ARM_TLS_IE12GP       111     /* 12 bit GOT entry relative
+                                          to GOT origin (LDR).  */
+#define R_ARM_ME_TOO           128     /* Obsolete.  */
+#define R_ARM_THM_TLS_DESCSEQ  129
+#define R_ARM_THM_TLS_DESCSEQ16        129
+#define R_ARM_THM_TLS_DESCSEQ32        130
+#define R_ARM_THM_GOT_BREL12   131     /* GOT entry relative to GOT
+                                          origin, 12 bit (Thumb32 LDR).  */
+#define R_ARM_IRELATIVE                160
+#define R_ARM_RXPC25           249
+#define R_ARM_RSBREL32         250
+#define R_ARM_THM_RPC22                251
+#define R_ARM_RREL32           252
+#define R_ARM_RABS22           253
+#define R_ARM_RPC24            254
+#define R_ARM_RBASE            255
+/* Keep this the last entry.  */
+#define R_ARM_NUM              256
+
+/* IA-64 specific declarations.  */
+
+/* Processor specific flags for the Ehdr e_flags field.  */
+#define EF_IA_64_MASKOS                0x0000000f      /* os-specific flags */
+#define EF_IA_64_ABI64         0x00000010      /* 64-bit ABI */
+#define EF_IA_64_ARCH          0xff000000      /* arch. version mask */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_IA_64_ARCHEXT       (PT_LOPROC + 0) /* arch extension bits */
+#define PT_IA_64_UNWIND                (PT_LOPROC + 1) /* ia64 unwind bits */
+#define PT_IA_64_HP_OPT_ANOT   (PT_LOOS + 0x12)
+#define PT_IA_64_HP_HSL_ANOT   (PT_LOOS + 0x13)
+#define PT_IA_64_HP_STACK      (PT_LOOS + 0x14)
+
+/* Processor specific flags for the Phdr p_flags field.  */
+#define PF_IA_64_NORECOV       0x80000000      /* spec insns w/o recovery */
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_IA_64_EXT          (SHT_LOPROC + 0) /* extension bits */
+#define SHT_IA_64_UNWIND       (SHT_LOPROC + 1) /* unwind bits */
+
+/* Processor specific flags for the Shdr sh_flags field.  */
+#define SHF_IA_64_SHORT                0x10000000      /* section near gp */
+#define SHF_IA_64_NORECOV      0x20000000      /* spec insns w/o recovery */
+
+/* Processor specific values for the Dyn d_tag field.  */
+#define DT_IA_64_PLT_RESERVE   (DT_LOPROC + 0)
+#define DT_IA_64_NUM           1
+
+/* IA-64 relocations.  */
+#define R_IA64_NONE            0x00    /* none */
+#define R_IA64_IMM14           0x21    /* symbol + addend, add imm14 */
+#define R_IA64_IMM22           0x22    /* symbol + addend, add imm22 */
+#define R_IA64_IMM64           0x23    /* symbol + addend, mov imm64 */
+#define R_IA64_DIR32MSB                0x24    /* symbol + addend, data4 MSB */
+#define R_IA64_DIR32LSB                0x25    /* symbol + addend, data4 LSB */
+#define R_IA64_DIR64MSB                0x26    /* symbol + addend, data8 MSB */
+#define R_IA64_DIR64LSB                0x27    /* symbol + addend, data8 LSB */
+#define R_IA64_GPREL22         0x2a    /* @gprel(sym + add), add imm22 */
+#define R_IA64_GPREL64I                0x2b    /* @gprel(sym + add), mov imm64 */
+#define R_IA64_GPREL32MSB      0x2c    /* @gprel(sym + add), data4 MSB */
+#define R_IA64_GPREL32LSB      0x2d    /* @gprel(sym + add), data4 LSB */
+#define R_IA64_GPREL64MSB      0x2e    /* @gprel(sym + add), data8 MSB */
+#define R_IA64_GPREL64LSB      0x2f    /* @gprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF22         0x32    /* @ltoff(sym + add), add imm22 */
+#define R_IA64_LTOFF64I                0x33    /* @ltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF22                0x3a    /* @pltoff(sym + add), add imm22 */
+#define R_IA64_PLTOFF64I       0x3b    /* @pltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF64MSB     0x3e    /* @pltoff(sym + add), data8 MSB */
+#define R_IA64_PLTOFF64LSB     0x3f    /* @pltoff(sym + add), data8 LSB */
+#define R_IA64_FPTR64I         0x43    /* @fptr(sym + add), mov imm64 */
+#define R_IA64_FPTR32MSB       0x44    /* @fptr(sym + add), data4 MSB */
+#define R_IA64_FPTR32LSB       0x45    /* @fptr(sym + add), data4 LSB */
+#define R_IA64_FPTR64MSB       0x46    /* @fptr(sym + add), data8 MSB */
+#define R_IA64_FPTR64LSB       0x47    /* @fptr(sym + add), data8 LSB */
+#define R_IA64_PCREL60B                0x48    /* @pcrel(sym + add), brl */
+#define R_IA64_PCREL21B                0x49    /* @pcrel(sym + add), ptb, call */
+#define R_IA64_PCREL21M                0x4a    /* @pcrel(sym + add), chk.s */
+#define R_IA64_PCREL21F                0x4b    /* @pcrel(sym + add), fchkf */
+#define R_IA64_PCREL32MSB      0x4c    /* @pcrel(sym + add), data4 MSB */
+#define R_IA64_PCREL32LSB      0x4d    /* @pcrel(sym + add), data4 LSB */
+#define R_IA64_PCREL64MSB      0x4e    /* @pcrel(sym + add), data8 MSB */
+#define R_IA64_PCREL64LSB      0x4f    /* @pcrel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_FPTR22    0x52    /* @ltoff(@fptr(s+a)), imm22 */
+#define R_IA64_LTOFF_FPTR64I   0x53    /* @ltoff(@fptr(s+a)), imm64 */
+#define R_IA64_LTOFF_FPTR32MSB 0x54    /* @ltoff(@fptr(s+a)), data4 MSB */
+#define R_IA64_LTOFF_FPTR32LSB 0x55    /* @ltoff(@fptr(s+a)), data4 LSB */
+#define R_IA64_LTOFF_FPTR64MSB 0x56    /* @ltoff(@fptr(s+a)), data8 MSB */
+#define R_IA64_LTOFF_FPTR64LSB 0x57    /* @ltoff(@fptr(s+a)), data8 LSB */
+#define R_IA64_SEGREL32MSB     0x5c    /* @segrel(sym + add), data4 MSB */
+#define R_IA64_SEGREL32LSB     0x5d    /* @segrel(sym + add), data4 LSB */
+#define R_IA64_SEGREL64MSB     0x5e    /* @segrel(sym + add), data8 MSB */
+#define R_IA64_SEGREL64LSB     0x5f    /* @segrel(sym + add), data8 LSB */
+#define R_IA64_SECREL32MSB     0x64    /* @secrel(sym + add), data4 MSB */
+#define R_IA64_SECREL32LSB     0x65    /* @secrel(sym + add), data4 LSB */
+#define R_IA64_SECREL64MSB     0x66    /* @secrel(sym + add), data8 MSB */
+#define R_IA64_SECREL64LSB     0x67    /* @secrel(sym + add), data8 LSB */
+#define R_IA64_REL32MSB                0x6c    /* data 4 + REL */
+#define R_IA64_REL32LSB                0x6d    /* data 4 + REL */
+#define R_IA64_REL64MSB                0x6e    /* data 8 + REL */
+#define R_IA64_REL64LSB                0x6f    /* data 8 + REL */
+#define R_IA64_LTV32MSB                0x74    /* symbol + addend, data4 MSB */
+#define R_IA64_LTV32LSB                0x75    /* symbol + addend, data4 LSB */
+#define R_IA64_LTV64MSB                0x76    /* symbol + addend, data8 MSB */
+#define R_IA64_LTV64LSB                0x77    /* symbol + addend, data8 LSB */
+#define R_IA64_PCREL21BI       0x79    /* @pcrel(sym + add), 21bit inst */
+#define R_IA64_PCREL22         0x7a    /* @pcrel(sym + add), 22bit inst */
+#define R_IA64_PCREL64I                0x7b    /* @pcrel(sym + add), 64bit inst */
+#define R_IA64_IPLTMSB         0x80    /* dynamic reloc, imported PLT, MSB */
+#define R_IA64_IPLTLSB         0x81    /* dynamic reloc, imported PLT, LSB */
+#define R_IA64_COPY            0x84    /* copy relocation */
+#define R_IA64_SUB             0x85    /* Addend and symbol difference */
+#define R_IA64_LTOFF22X                0x86    /* LTOFF22, relaxable.  */
+#define R_IA64_LDXMOV          0x87    /* Use of LTOFF22X.  */
+#define R_IA64_TPREL14         0x91    /* @tprel(sym + add), imm14 */
+#define R_IA64_TPREL22         0x92    /* @tprel(sym + add), imm22 */
+#define R_IA64_TPREL64I                0x93    /* @tprel(sym + add), imm64 */
+#define R_IA64_TPREL64MSB      0x96    /* @tprel(sym + add), data8 MSB */
+#define R_IA64_TPREL64LSB      0x97    /* @tprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_TPREL22   0x9a    /* @ltoff(@tprel(s+a)), imm2 */
+#define R_IA64_DTPMOD64MSB     0xa6    /* @dtpmod(sym + add), data8 MSB */
+#define R_IA64_DTPMOD64LSB     0xa7    /* @dtpmod(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPMOD22  0xaa    /* @ltoff(@dtpmod(sym + add)), imm22 */
+#define R_IA64_DTPREL14                0xb1    /* @dtprel(sym + add), imm14 */
+#define R_IA64_DTPREL22                0xb2    /* @dtprel(sym + add), imm22 */
+#define R_IA64_DTPREL64I       0xb3    /* @dtprel(sym + add), imm64 */
+#define R_IA64_DTPREL32MSB     0xb4    /* @dtprel(sym + add), data4 MSB */
+#define R_IA64_DTPREL32LSB     0xb5    /* @dtprel(sym + add), data4 LSB */
+#define R_IA64_DTPREL64MSB     0xb6    /* @dtprel(sym + add), data8 MSB */
+#define R_IA64_DTPREL64LSB     0xb7    /* @dtprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPREL22  0xba    /* @ltoff(@dtprel(s+a)), imm22 */
+
+/* SH specific declarations */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_SH_MACH_MASK                0x1f
+#define EF_SH_UNKNOWN          0x0
+#define EF_SH1                 0x1
+#define EF_SH2                 0x2
+#define EF_SH3                 0x3
+#define EF_SH_DSP              0x4
+#define EF_SH3_DSP             0x5
+#define EF_SH4AL_DSP           0x6
+#define EF_SH3E                        0x8
+#define EF_SH4                 0x9
+#define EF_SH2E                        0xb
+#define EF_SH4A                        0xc
+#define EF_SH2A                        0xd
+#define EF_SH4_NOFPU           0x10
+#define EF_SH4A_NOFPU          0x11
+#define EF_SH4_NOMMU_NOFPU     0x12
+#define EF_SH2A_NOFPU          0x13
+#define EF_SH3_NOMMU           0x14
+#define EF_SH2A_SH4_NOFPU      0x15
+#define EF_SH2A_SH3_NOFPU      0x16
+#define EF_SH2A_SH4            0x17
+#define EF_SH2A_SH3E           0x18
+
+/* SH relocs.  */
+#define        R_SH_NONE               0
+#define        R_SH_DIR32              1
+#define        R_SH_REL32              2
+#define        R_SH_DIR8WPN            3
+#define        R_SH_IND12W             4
+#define        R_SH_DIR8WPL            5
+#define        R_SH_DIR8WPZ            6
+#define        R_SH_DIR8BP             7
+#define        R_SH_DIR8W              8
+#define        R_SH_DIR8L              9
+#define        R_SH_SWITCH16           25
+#define        R_SH_SWITCH32           26
+#define        R_SH_USES               27
+#define        R_SH_COUNT              28
+#define        R_SH_ALIGN              29
+#define        R_SH_CODE               30
+#define        R_SH_DATA               31
+#define        R_SH_LABEL              32
+#define        R_SH_SWITCH8            33
+#define        R_SH_GNU_VTINHERIT      34
+#define        R_SH_GNU_VTENTRY        35
+#define        R_SH_TLS_GD_32          144
+#define        R_SH_TLS_LD_32          145
+#define        R_SH_TLS_LDO_32         146
+#define        R_SH_TLS_IE_32          147
+#define        R_SH_TLS_LE_32          148
+#define        R_SH_TLS_DTPMOD32       149
+#define        R_SH_TLS_DTPOFF32       150
+#define        R_SH_TLS_TPOFF32        151
+#define        R_SH_GOT32              160
+#define        R_SH_PLT32              161
+#define        R_SH_COPY               162
+#define        R_SH_GLOB_DAT           163
+#define        R_SH_JMP_SLOT           164
+#define        R_SH_RELATIVE           165
+#define        R_SH_GOTOFF             166
+#define        R_SH_GOTPC              167
+/* Keep this the last entry.  */
+#define        R_SH_NUM                256
+
+/* S/390 specific definitions.  */
+
+/* Valid values for the e_flags field.  */
+
+#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
+
+/* Additional s390 relocs */
+
+#define R_390_NONE             0       /* No reloc.  */
+#define R_390_8                        1       /* Direct 8 bit.  */
+#define R_390_12               2       /* Direct 12 bit.  */
+#define R_390_16               3       /* Direct 16 bit.  */
+#define R_390_32               4       /* Direct 32 bit.  */
+#define R_390_PC32             5       /* PC relative 32 bit.  */
+#define R_390_GOT12            6       /* 12 bit GOT offset.  */
+#define R_390_GOT32            7       /* 32 bit GOT offset.  */
+#define R_390_PLT32            8       /* 32 bit PC relative PLT address.  */
+#define R_390_COPY             9       /* Copy symbol at runtime.  */
+#define R_390_GLOB_DAT         10      /* Create GOT entry.  */
+#define R_390_JMP_SLOT         11      /* Create PLT entry.  */
+#define R_390_RELATIVE         12      /* Adjust by program base.  */
+#define R_390_GOTOFF32         13      /* 32 bit offset to GOT.         */
+#define R_390_GOTPC            14      /* 32 bit PC relative offset to GOT.  */
+#define R_390_GOT16            15      /* 16 bit GOT offset.  */
+#define R_390_PC16             16      /* PC relative 16 bit.  */
+#define R_390_PC16DBL          17      /* PC relative 16 bit shifted by 1.  */
+#define R_390_PLT16DBL         18      /* 16 bit PC rel. PLT shifted by 1.  */
+#define R_390_PC32DBL          19      /* PC relative 32 bit shifted by 1.  */
+#define R_390_PLT32DBL         20      /* 32 bit PC rel. PLT shifted by 1.  */
+#define R_390_GOTPCDBL         21      /* 32 bit PC rel. GOT shifted by 1.  */
+#define R_390_64               22      /* Direct 64 bit.  */
+#define R_390_PC64             23      /* PC relative 64 bit.  */
+#define R_390_GOT64            24      /* 64 bit GOT offset.  */
+#define R_390_PLT64            25      /* 64 bit PC relative PLT address.  */
+#define R_390_GOTENT           26      /* 32 bit PC rel. to GOT entry >> 1. */
+#define R_390_GOTOFF16         27      /* 16 bit offset to GOT. */
+#define R_390_GOTOFF64         28      /* 64 bit offset to GOT. */
+#define R_390_GOTPLT12         29      /* 12 bit offset to jump slot.  */
+#define R_390_GOTPLT16         30      /* 16 bit offset to jump slot.  */
+#define R_390_GOTPLT32         31      /* 32 bit offset to jump slot.  */
+#define R_390_GOTPLT64         32      /* 64 bit offset to jump slot.  */
+#define R_390_GOTPLTENT                33      /* 32 bit rel. offset to jump slot.  */
+#define R_390_PLTOFF16         34      /* 16 bit offset from GOT to PLT. */
+#define R_390_PLTOFF32         35      /* 32 bit offset from GOT to PLT. */
+#define R_390_PLTOFF64         36      /* 16 bit offset from GOT to PLT. */
+#define R_390_TLS_LOAD         37      /* Tag for load insn in TLS code.  */
+#define R_390_TLS_GDCALL       38      /* Tag for function call in general
+                                          dynamic TLS code. */
+#define R_390_TLS_LDCALL       39      /* Tag for function call in local
+                                          dynamic TLS code. */
+#define R_390_TLS_GD32         40      /* Direct 32 bit for general dynamic
+                                          thread local data.  */
+#define R_390_TLS_GD64         41      /* Direct 64 bit for general dynamic
+                                         thread local data.  */
+#define R_390_TLS_GOTIE12      42      /* 12 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_TLS_GOTIE32      43      /* 32 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_TLS_GOTIE64      44      /* 64 bit GOT offset for static TLS
+                                          block offset. */
+#define R_390_TLS_LDM32                45      /* Direct 32 bit for local dynamic
+                                          thread local data in LE code.  */
+#define R_390_TLS_LDM64                46      /* Direct 64 bit for local dynamic
+                                          thread local data in LE code.  */
+#define R_390_TLS_IE32         47      /* 32 bit address of GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_IE64         48      /* 64 bit address of GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_IEENT                49      /* 32 bit rel. offset to GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_LE32         50      /* 32 bit negated offset relative to
+                                          static TLS block.  */
+#define R_390_TLS_LE64         51      /* 64 bit negated offset relative to
+                                          static TLS block.  */
+#define R_390_TLS_LDO32                52      /* 32 bit offset relative to TLS
+                                          block.  */
+#define R_390_TLS_LDO64                53      /* 64 bit offset relative to TLS
+                                          block.  */
+#define R_390_TLS_DTPMOD       54      /* ID of module containing symbol.  */
+#define R_390_TLS_DTPOFF       55      /* Offset in TLS block.  */
+#define R_390_TLS_TPOFF                56      /* Negated offset in static TLS
+                                          block.  */
+#define R_390_20               57      /* Direct 20 bit.  */
+#define R_390_GOT20            58      /* 20 bit GOT offset.  */
+#define R_390_GOTPLT20         59      /* 20 bit offset to jump slot.  */
+#define R_390_TLS_GOTIE20      60      /* 20 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_IRELATIVE         61      /* STT_GNU_IFUNC relocation.  */
+/* Keep this the last entry.  */
+#define R_390_NUM              62
+
+
+/* CRIS relocations.  */
+#define R_CRIS_NONE            0
+#define R_CRIS_8               1
+#define R_CRIS_16              2
+#define R_CRIS_32              3
+#define R_CRIS_8_PCREL         4
+#define R_CRIS_16_PCREL                5
+#define R_CRIS_32_PCREL                6
+#define R_CRIS_GNU_VTINHERIT   7
+#define R_CRIS_GNU_VTENTRY     8
+#define R_CRIS_COPY            9
+#define R_CRIS_GLOB_DAT                10
+#define R_CRIS_JUMP_SLOT       11
+#define R_CRIS_RELATIVE                12
+#define R_CRIS_16_GOT          13
+#define R_CRIS_32_GOT          14
+#define R_CRIS_16_GOTPLT       15
+#define R_CRIS_32_GOTPLT       16
+#define R_CRIS_32_GOTREL       17
+#define R_CRIS_32_PLT_GOTREL   18
+#define R_CRIS_32_PLT_PCREL    19
+
+#define R_CRIS_NUM             20
+
+
+/* AMD x86-64 relocations.  */
+#define R_X86_64_NONE          0       /* No reloc */
+#define R_X86_64_64            1       /* Direct 64 bit  */
+#define R_X86_64_PC32          2       /* PC relative 32 bit signed */
+#define R_X86_64_GOT32         3       /* 32 bit GOT entry */
+#define R_X86_64_PLT32         4       /* 32 bit PLT address */
+#define R_X86_64_COPY          5       /* Copy symbol at runtime */
+#define R_X86_64_GLOB_DAT      6       /* Create GOT entry */
+#define R_X86_64_JUMP_SLOT     7       /* Create PLT entry */
+#define R_X86_64_RELATIVE      8       /* Adjust by program base */
+#define R_X86_64_GOTPCREL      9       /* 32 bit signed PC relative
+                                          offset to GOT */
+#define R_X86_64_32            10      /* Direct 32 bit zero extended */
+#define R_X86_64_32S           11      /* Direct 32 bit sign extended */
+#define R_X86_64_16            12      /* Direct 16 bit zero extended */
+#define R_X86_64_PC16          13      /* 16 bit sign extended pc relative */
+#define R_X86_64_8             14      /* Direct 8 bit sign extended  */
+#define R_X86_64_PC8           15      /* 8 bit sign extended pc relative */
+#define R_X86_64_DTPMOD64      16      /* ID of module containing symbol */
+#define R_X86_64_DTPOFF64      17      /* Offset in module's TLS block */
+#define R_X86_64_TPOFF64       18      /* Offset in initial TLS block */
+#define R_X86_64_TLSGD         19      /* 32 bit signed PC relative offset
+                                          to two GOT entries for GD symbol */
+#define R_X86_64_TLSLD         20      /* 32 bit signed PC relative offset
+                                          to two GOT entries for LD symbol */
+#define R_X86_64_DTPOFF32      21      /* Offset in TLS block */
+#define R_X86_64_GOTTPOFF      22      /* 32 bit signed PC relative offset
+                                          to GOT entry for IE symbol */
+#define R_X86_64_TPOFF32       23      /* Offset in initial TLS block */
+#define R_X86_64_PC64          24      /* PC relative 64 bit */
+#define R_X86_64_GOTOFF64      25      /* 64 bit offset to GOT */
+#define R_X86_64_GOTPC32       26      /* 32 bit signed pc relative
+                                          offset to GOT */
+#define R_X86_64_GOT64         27      /* 64-bit GOT entry offset */
+#define R_X86_64_GOTPCREL64    28      /* 64-bit PC relative offset
+                                          to GOT entry */
+#define R_X86_64_GOTPC64       29      /* 64-bit PC relative offset to GOT */
+#define R_X86_64_GOTPLT64      30      /* like GOT64, says PLT entry needed */
+#define R_X86_64_PLTOFF64      31      /* 64-bit GOT relative offset
+                                          to PLT entry */
+#define R_X86_64_SIZE32                32      /* Size of symbol plus 32-bit addend */
+#define R_X86_64_SIZE64                33      /* Size of symbol plus 64-bit addend */
+#define R_X86_64_GOTPC32_TLSDESC 34    /* GOT offset for TLS descriptor.  */
+#define R_X86_64_TLSDESC_CALL   35     /* Marker for call through TLS
+                                          descriptor.  */
+#define R_X86_64_TLSDESC        36     /* TLS descriptor.  */
+#define R_X86_64_IRELATIVE     37      /* Adjust indirectly by program base */
+#define R_X86_64_RELATIVE64    38      /* 64-bit adjust by program base */
+
+#define R_X86_64_NUM           39
+
+
+/* AM33 relocations.  */
+#define R_MN10300_NONE         0       /* No reloc.  */
+#define R_MN10300_32           1       /* Direct 32 bit.  */
+#define R_MN10300_16           2       /* Direct 16 bit.  */
+#define R_MN10300_8            3       /* Direct 8 bit.  */
+#define R_MN10300_PCREL32      4       /* PC-relative 32-bit.  */
+#define R_MN10300_PCREL16      5       /* PC-relative 16-bit signed.  */
+#define R_MN10300_PCREL8       6       /* PC-relative 8-bit signed.  */
+#define R_MN10300_GNU_VTINHERIT        7       /* Ancient C++ vtable garbage... */
+#define R_MN10300_GNU_VTENTRY  8       /* ... collection annotation.  */
+#define R_MN10300_24           9       /* Direct 24 bit.  */
+#define R_MN10300_GOTPC32      10      /* 32-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTPC16      11      /* 16-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTOFF32     12      /* 32-bit offset from GOT.  */
+#define R_MN10300_GOTOFF24     13      /* 24-bit offset from GOT.  */
+#define R_MN10300_GOTOFF16     14      /* 16-bit offset from GOT.  */
+#define R_MN10300_PLT32                15      /* 32-bit PCrel to PLT entry.  */
+#define R_MN10300_PLT16                16      /* 16-bit PCrel to PLT entry.  */
+#define R_MN10300_GOT32                17      /* 32-bit offset to GOT entry.  */
+#define R_MN10300_GOT24                18      /* 24-bit offset to GOT entry.  */
+#define R_MN10300_GOT16                19      /* 16-bit offset to GOT entry.  */
+#define R_MN10300_COPY         20      /* Copy symbol at runtime.  */
+#define R_MN10300_GLOB_DAT     21      /* Create GOT entry.  */
+#define R_MN10300_JMP_SLOT     22      /* Create PLT entry.  */
+#define R_MN10300_RELATIVE     23      /* Adjust by program base.  */
+#define R_MN10300_TLS_GD       24      /* 32-bit offset for global dynamic.  */
+#define R_MN10300_TLS_LD       25      /* 32-bit offset for local dynamic.  */
+#define R_MN10300_TLS_LDO      26      /* Module-relative offset.  */
+#define R_MN10300_TLS_GOTIE    27      /* GOT offset for static TLS block
+                                          offset.  */
+#define R_MN10300_TLS_IE       28      /* GOT address for static TLS block
+                                          offset.  */
+#define R_MN10300_TLS_LE       29      /* Offset relative to static TLS
+                                          block.  */
+#define R_MN10300_TLS_DTPMOD   30      /* ID of module containing symbol.  */
+#define R_MN10300_TLS_DTPOFF   31      /* Offset in module TLS block.  */
+#define R_MN10300_TLS_TPOFF    32      /* Offset in static TLS block.  */
+#define R_MN10300_SYM_DIFF     33      /* Adjustment for next reloc as needed
+                                          by linker relaxation.  */
+#define R_MN10300_ALIGN                34      /* Alignment requirement for linker
+                                          relaxation.  */
+#define R_MN10300_NUM          35
+
+
+/* M32R relocs.  */
+#define R_M32R_NONE            0       /* No reloc. */
+#define R_M32R_16              1       /* Direct 16 bit. */
+#define R_M32R_32              2       /* Direct 32 bit. */
+#define R_M32R_24              3       /* Direct 24 bit. */
+#define R_M32R_10_PCREL                4       /* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL                5       /* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL                6       /* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO                7       /* High 16 bit with unsigned low. */
+#define R_M32R_HI16_SLO                8       /* High 16 bit with signed low. */
+#define R_M32R_LO16            9       /* Low 16 bit. */
+#define R_M32R_SDA16           10      /* 16 bit offset in SDA. */
+#define R_M32R_GNU_VTINHERIT   11
+#define R_M32R_GNU_VTENTRY     12
+/* M32R relocs use SHT_RELA.  */
+#define R_M32R_16_RELA         33      /* Direct 16 bit. */
+#define R_M32R_32_RELA         34      /* Direct 32 bit. */
+#define R_M32R_24_RELA         35      /* Direct 24 bit. */
+#define R_M32R_10_PCREL_RELA   36      /* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL_RELA   37      /* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL_RELA   38      /* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO_RELA   39      /* High 16 bit with unsigned low */
+#define R_M32R_HI16_SLO_RELA   40      /* High 16 bit with signed low */
+#define R_M32R_LO16_RELA       41      /* Low 16 bit */
+#define R_M32R_SDA16_RELA      42      /* 16 bit offset in SDA */
+#define R_M32R_RELA_GNU_VTINHERIT      43
+#define R_M32R_RELA_GNU_VTENTRY        44
+#define R_M32R_REL32           45      /* PC relative 32 bit.  */
+
+#define R_M32R_GOT24           48      /* 24 bit GOT entry */
+#define R_M32R_26_PLTREL       49      /* 26 bit PC relative to PLT shifted */
+#define R_M32R_COPY            50      /* Copy symbol at runtime */
+#define R_M32R_GLOB_DAT                51      /* Create GOT entry */
+#define R_M32R_JMP_SLOT                52      /* Create PLT entry */
+#define R_M32R_RELATIVE                53      /* Adjust by program base */
+#define R_M32R_GOTOFF          54      /* 24 bit offset to GOT */
+#define R_M32R_GOTPC24         55      /* 24 bit PC relative offset to GOT */
+#define R_M32R_GOT16_HI_ULO    56      /* High 16 bit GOT entry with unsigned
+                                          low */
+#define R_M32R_GOT16_HI_SLO    57      /* High 16 bit GOT entry with signed
+                                          low */
+#define R_M32R_GOT16_LO                58      /* Low 16 bit GOT entry */
+#define R_M32R_GOTPC_HI_ULO    59      /* High 16 bit PC relative offset to
+                                          GOT with unsigned low */
+#define R_M32R_GOTPC_HI_SLO    60      /* High 16 bit PC relative offset to
+                                          GOT with signed low */
+#define R_M32R_GOTPC_LO                61      /* Low 16 bit PC relative offset to
+                                          GOT */
+#define R_M32R_GOTOFF_HI_ULO   62      /* High 16 bit offset to GOT
+                                          with unsigned low */
+#define R_M32R_GOTOFF_HI_SLO   63      /* High 16 bit offset to GOT
+                                          with signed low */
+#define R_M32R_GOTOFF_LO       64      /* Low 16 bit offset to GOT */
+#define R_M32R_NUM             256     /* Keep this the last entry. */
+
+/* MicroBlaze relocations */
+#define R_MICROBLAZE_NONE              0       /* No reloc. */
+#define R_MICROBLAZE_32                1       /* Direct 32 bit. */
+#define R_MICROBLAZE_32_PCREL          2       /* PC relative 32 bit. */
+#define R_MICROBLAZE_64_PCREL          3       /* PC relative 64 bit. */
+#define R_MICROBLAZE_32_PCREL_LO       4       /* Low 16 bits of PCREL32. */
+#define R_MICROBLAZE_64                5       /* Direct 64 bit. */
+#define R_MICROBLAZE_32_LO             6       /* Low 16 bit. */
+#define R_MICROBLAZE_SRO32             7       /* Read-only small data area. */
+#define R_MICROBLAZE_SRW32             8       /* Read-write small data area. */
+#define R_MICROBLAZE_64_NONE           9       /* No reloc. */
+#define R_MICROBLAZE_32_SYM_OP_SYM     10      /* Symbol Op Symbol relocation. */
+#define R_MICROBLAZE_GNU_VTINHERIT     11      /* GNU C++ vtable hierarchy. */
+#define R_MICROBLAZE_GNU_VTENTRY       12      /* GNU C++ vtable member usage. */
+#define R_MICROBLAZE_GOTPC_64          13      /* PC-relative GOT offset.  */
+#define R_MICROBLAZE_GOT_64            14      /* GOT entry offset.  */
+#define R_MICROBLAZE_PLT_64            15      /* PLT offset (PC-relative).  */
+#define R_MICROBLAZE_REL               16      /* Adjust by program base.  */
+#define R_MICROBLAZE_JUMP_SLOT         17      /* Create PLT entry.  */
+#define R_MICROBLAZE_GLOB_DAT          18      /* Create GOT entry.  */
+#define R_MICROBLAZE_GOTOFF_64         19      /* 64 bit offset to GOT. */
+#define R_MICROBLAZE_GOTOFF_32         20      /* 32 bit offset to GOT. */
+#define R_MICROBLAZE_COPY              21      /* Runtime copy.  */
+#define R_MICROBLAZE_TLS               22      /* TLS Reloc. */
+#define R_MICROBLAZE_TLSGD             23      /* TLS General Dynamic. */
+#define R_MICROBLAZE_TLSLD             24      /* TLS Local Dynamic. */
+#define R_MICROBLAZE_TLSDTPMOD32       25      /* TLS Module ID. */
+#define R_MICROBLAZE_TLSDTPREL32       26      /* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSDTPREL64       27      /* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSGOTTPREL32     28      /* TLS Offset From Thread Pointer. */
+#define R_MICROBLAZE_TLSTPREL32        29      /* TLS Offset From Thread Pointer. */
+
+/* Legal values for d_tag (dynamic entry type).  */
+#define DT_NIOS2_GP             0x70000002 /* Address of _gp.  */
+
+/* Nios II relocations.  */
+#define R_NIOS2_NONE           0       /* No reloc.  */
+#define R_NIOS2_S16            1       /* Direct signed 16 bit.  */
+#define R_NIOS2_U16            2       /* Direct unsigned 16 bit.  */
+#define R_NIOS2_PCREL16                3       /* PC relative 16 bit.  */
+#define R_NIOS2_CALL26         4       /* Direct call.  */
+#define R_NIOS2_IMM5           5       /* 5 bit constant expression.  */
+#define R_NIOS2_CACHE_OPX      6       /* 5 bit expression, shift 22.  */
+#define R_NIOS2_IMM6           7       /* 6 bit constant expression.  */
+#define R_NIOS2_IMM8           8       /* 8 bit constant expression.  */
+#define R_NIOS2_HI16           9       /* High 16 bit.  */
+#define R_NIOS2_LO16           10      /* Low 16 bit.  */
+#define R_NIOS2_HIADJ16                11      /* High 16 bit, adjusted.  */
+#define R_NIOS2_BFD_RELOC_32   12      /* 32 bit symbol value + addend.  */
+#define R_NIOS2_BFD_RELOC_16   13      /* 16 bit symbol value + addend.  */
+#define R_NIOS2_BFD_RELOC_8    14      /* 8 bit symbol value + addend.  */
+#define R_NIOS2_GPREL          15      /* 16 bit GP pointer offset.  */
+#define R_NIOS2_GNU_VTINHERIT  16      /* GNU C++ vtable hierarchy.  */
+#define R_NIOS2_GNU_VTENTRY    17      /* GNU C++ vtable member usage.  */
+#define R_NIOS2_UJMP           18      /* Unconditional branch.  */
+#define R_NIOS2_CJMP           19      /* Conditional branch.  */
+#define R_NIOS2_CALLR          20      /* Indirect call through register.  */
+#define R_NIOS2_ALIGN          21      /* Alignment requirement for
+                                          linker relaxation.  */
+#define R_NIOS2_GOT16          22      /* 16 bit GOT entry.  */
+#define R_NIOS2_CALL16         23      /* 16 bit GOT entry for function.  */
+#define R_NIOS2_GOTOFF_LO      24      /* %lo of offset to GOT pointer.  */
+#define R_NIOS2_GOTOFF_HA      25      /* %hiadj of offset to GOT pointer.  */
+#define R_NIOS2_PCREL_LO       26      /* %lo of PC relative offset.  */
+#define R_NIOS2_PCREL_HA       27      /* %hiadj of PC relative offset.  */
+#define R_NIOS2_TLS_GD16       28      /* 16 bit GOT offset for TLS GD.  */
+#define R_NIOS2_TLS_LDM16      29      /* 16 bit GOT offset for TLS LDM.  */
+#define R_NIOS2_TLS_LDO16      30      /* 16 bit module relative offset.  */
+#define R_NIOS2_TLS_IE16       31      /* 16 bit GOT offset for TLS IE.  */
+#define R_NIOS2_TLS_LE16       32      /* 16 bit LE TP-relative offset.  */
+#define R_NIOS2_TLS_DTPMOD     33      /* Module number.  */
+#define R_NIOS2_TLS_DTPREL     34      /* Module-relative offset.  */
+#define R_NIOS2_TLS_TPREL      35      /* TP-relative offset.  */
+#define R_NIOS2_COPY           36      /* Copy symbol at runtime.  */
+#define R_NIOS2_GLOB_DAT       37      /* Create GOT entry.  */
+#define R_NIOS2_JUMP_SLOT      38      /* Create PLT entry.  */
+#define R_NIOS2_RELATIVE       39      /* Adjust by program base.  */
+#define R_NIOS2_GOTOFF         40      /* 16 bit offset to GOT pointer.  */
+#define R_NIOS2_CALL26_NOAT    41      /* Direct call in .noat section.  */
+#define R_NIOS2_GOT_LO         42      /* %lo() of GOT entry.  */
+#define R_NIOS2_GOT_HA         43      /* %hiadj() of GOT entry.  */
+#define R_NIOS2_CALL_LO                44      /* %lo() of function GOT entry.  */
+#define R_NIOS2_CALL_HA                45      /* %hiadj() of function GOT entry.  */
+
+/* TILEPro relocations.  */
+#define R_TILEPRO_NONE         0       /* No reloc */
+#define R_TILEPRO_32           1       /* Direct 32 bit */
+#define R_TILEPRO_16           2       /* Direct 16 bit */
+#define R_TILEPRO_8            3       /* Direct 8 bit */
+#define R_TILEPRO_32_PCREL     4       /* PC relative 32 bit */
+#define R_TILEPRO_16_PCREL     5       /* PC relative 16 bit */
+#define R_TILEPRO_8_PCREL      6       /* PC relative 8 bit */
+#define R_TILEPRO_LO16         7       /* Low 16 bit */
+#define R_TILEPRO_HI16         8       /* High 16 bit */
+#define R_TILEPRO_HA16         9       /* High 16 bit, adjusted */
+#define R_TILEPRO_COPY         10      /* Copy relocation */
+#define R_TILEPRO_GLOB_DAT     11      /* Create GOT entry */
+#define R_TILEPRO_JMP_SLOT     12      /* Create PLT entry */
+#define R_TILEPRO_RELATIVE     13      /* Adjust by program base */
+#define R_TILEPRO_BROFF_X1     14      /* X1 pipe branch offset */
+#define R_TILEPRO_JOFFLONG_X1  15      /* X1 pipe jump offset */
+#define R_TILEPRO_JOFFLONG_X1_PLT 16   /* X1 pipe jump offset to PLT */
+#define R_TILEPRO_IMM8_X0      17      /* X0 pipe 8-bit */
+#define R_TILEPRO_IMM8_Y0      18      /* Y0 pipe 8-bit */
+#define R_TILEPRO_IMM8_X1      19      /* X1 pipe 8-bit */
+#define R_TILEPRO_IMM8_Y1      20      /* Y1 pipe 8-bit */
+#define R_TILEPRO_MT_IMM15_X1  21      /* X1 pipe mtspr */
+#define R_TILEPRO_MF_IMM15_X1  22      /* X1 pipe mfspr */
+#define R_TILEPRO_IMM16_X0     23      /* X0 pipe 16-bit */
+#define R_TILEPRO_IMM16_X1     24      /* X1 pipe 16-bit */
+#define R_TILEPRO_IMM16_X0_LO  25      /* X0 pipe low 16-bit */
+#define R_TILEPRO_IMM16_X1_LO  26      /* X1 pipe low 16-bit */
+#define R_TILEPRO_IMM16_X0_HI  27      /* X0 pipe high 16-bit */
+#define R_TILEPRO_IMM16_X1_HI  28      /* X1 pipe high 16-bit */
+#define R_TILEPRO_IMM16_X0_HA  29      /* X0 pipe high 16-bit, adjusted */
+#define R_TILEPRO_IMM16_X1_HA  30      /* X1 pipe high 16-bit, adjusted */
+#define R_TILEPRO_IMM16_X0_PCREL 31    /* X0 pipe PC relative 16 bit */
+#define R_TILEPRO_IMM16_X1_PCREL 32    /* X1 pipe PC relative 16 bit */
+#define R_TILEPRO_IMM16_X0_LO_PCREL 33 /* X0 pipe PC relative low 16 bit */
+#define R_TILEPRO_IMM16_X1_LO_PCREL 34 /* X1 pipe PC relative low 16 bit */
+#define R_TILEPRO_IMM16_X0_HI_PCREL 35 /* X0 pipe PC relative high 16 bit */
+#define R_TILEPRO_IMM16_X1_HI_PCREL 36 /* X1 pipe PC relative high 16 bit */
+#define R_TILEPRO_IMM16_X0_HA_PCREL 37 /* X0 pipe PC relative ha() 16 bit */
+#define R_TILEPRO_IMM16_X1_HA_PCREL 38 /* X1 pipe PC relative ha() 16 bit */
+#define R_TILEPRO_IMM16_X0_GOT 39      /* X0 pipe 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT 40      /* X1 pipe 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_LO 41   /* X0 pipe low 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_LO 42   /* X1 pipe low 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_HI 43   /* X0 pipe high 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_HI 44   /* X1 pipe high 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_HA 45   /* X0 pipe ha() 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_HA 46   /* X1 pipe ha() 16-bit GOT offset */
+#define R_TILEPRO_MMSTART_X0   47      /* X0 pipe mm "start" */
+#define R_TILEPRO_MMEND_X0     48      /* X0 pipe mm "end" */
+#define R_TILEPRO_MMSTART_X1   49      /* X1 pipe mm "start" */
+#define R_TILEPRO_MMEND_X1     50      /* X1 pipe mm "end" */
+#define R_TILEPRO_SHAMT_X0     51      /* X0 pipe shift amount */
+#define R_TILEPRO_SHAMT_X1     52      /* X1 pipe shift amount */
+#define R_TILEPRO_SHAMT_Y0     53      /* Y0 pipe shift amount */
+#define R_TILEPRO_SHAMT_Y1     54      /* Y1 pipe shift amount */
+#define R_TILEPRO_DEST_IMM8_X1 55      /* X1 pipe destination 8-bit */
+/* Relocs 56-59 are currently not defined.  */
+#define R_TILEPRO_TLS_GD_CALL  60      /* "jal" for TLS GD */
+#define R_TILEPRO_IMM8_X0_TLS_GD_ADD 61        /* X0 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_X1_TLS_GD_ADD 62        /* X1 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_Y0_TLS_GD_ADD 63        /* Y0 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_Y1_TLS_GD_ADD 64        /* Y1 pipe "addi" for TLS GD */
+#define R_TILEPRO_TLS_IE_LOAD  65      /* "lw_tls" for TLS IE */
+#define R_TILEPRO_IMM16_X0_TLS_GD 66   /* X0 pipe 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD 67   /* X1 pipe 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_LO 68        /* X0 pipe low 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_LO 69        /* X1 pipe low 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_HI 70        /* X0 pipe high 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_HI 71        /* X1 pipe high 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_HA 72        /* X0 pipe ha() 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_HA 73        /* X1 pipe ha() 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE 74   /* X0 pipe 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE 75   /* X1 pipe 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_LO 76        /* X0 pipe low 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_LO 77        /* X1 pipe low 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_HI 78        /* X0 pipe high 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_HI 79        /* X1 pipe high 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_HA 80        /* X0 pipe ha() 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_HA 81        /* X1 pipe ha() 16-bit TLS IE offset */
+#define R_TILEPRO_TLS_DTPMOD32 82      /* ID of module containing symbol */
+#define R_TILEPRO_TLS_DTPOFF32 83      /* Offset in TLS block */
+#define R_TILEPRO_TLS_TPOFF32  84      /* Offset in static TLS block */
+#define R_TILEPRO_IMM16_X0_TLS_LE 85   /* X0 pipe 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE 86   /* X1 pipe 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_LO 87        /* X0 pipe low 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_LO 88        /* X1 pipe low 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_HI 89        /* X0 pipe high 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_HI 90        /* X1 pipe high 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_HA 91        /* X0 pipe ha() 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_HA 92        /* X1 pipe ha() 16-bit TLS LE offset */
+
+#define R_TILEPRO_GNU_VTINHERIT        128     /* GNU C++ vtable hierarchy */
+#define R_TILEPRO_GNU_VTENTRY  129     /* GNU C++ vtable member usage */
+
+#define R_TILEPRO_NUM          130
+
+
+/* TILE-Gx relocations.  */
+#define R_TILEGX_NONE          0       /* No reloc */
+#define R_TILEGX_64            1       /* Direct 64 bit */
+#define R_TILEGX_32            2       /* Direct 32 bit */
+#define R_TILEGX_16            3       /* Direct 16 bit */
+#define R_TILEGX_8             4       /* Direct 8 bit */
+#define R_TILEGX_64_PCREL      5       /* PC relative 64 bit */
+#define R_TILEGX_32_PCREL      6       /* PC relative 32 bit */
+#define R_TILEGX_16_PCREL      7       /* PC relative 16 bit */
+#define R_TILEGX_8_PCREL       8       /* PC relative 8 bit */
+#define R_TILEGX_HW0           9       /* hword 0 16-bit */
+#define R_TILEGX_HW1           10      /* hword 1 16-bit */
+#define R_TILEGX_HW2           11      /* hword 2 16-bit */
+#define R_TILEGX_HW3           12      /* hword 3 16-bit */
+#define R_TILEGX_HW0_LAST      13      /* last hword 0 16-bit */
+#define R_TILEGX_HW1_LAST      14      /* last hword 1 16-bit */
+#define R_TILEGX_HW2_LAST      15      /* last hword 2 16-bit */
+#define R_TILEGX_COPY          16      /* Copy relocation */
+#define R_TILEGX_GLOB_DAT      17      /* Create GOT entry */
+#define R_TILEGX_JMP_SLOT      18      /* Create PLT entry */
+#define R_TILEGX_RELATIVE      19      /* Adjust by program base */
+#define R_TILEGX_BROFF_X1      20      /* X1 pipe branch offset */
+#define R_TILEGX_JUMPOFF_X1    21      /* X1 pipe jump offset */
+#define R_TILEGX_JUMPOFF_X1_PLT        22      /* X1 pipe jump offset to PLT */
+#define R_TILEGX_IMM8_X0       23      /* X0 pipe 8-bit */
+#define R_TILEGX_IMM8_Y0       24      /* Y0 pipe 8-bit */
+#define R_TILEGX_IMM8_X1       25      /* X1 pipe 8-bit */
+#define R_TILEGX_IMM8_Y1       26      /* Y1 pipe 8-bit */
+#define R_TILEGX_DEST_IMM8_X1  27      /* X1 pipe destination 8-bit */
+#define R_TILEGX_MT_IMM14_X1   28      /* X1 pipe mtspr */
+#define R_TILEGX_MF_IMM14_X1   29      /* X1 pipe mfspr */
+#define R_TILEGX_MMSTART_X0    30      /* X0 pipe mm "start" */
+#define R_TILEGX_MMEND_X0      31      /* X0 pipe mm "end" */
+#define R_TILEGX_SHAMT_X0      32      /* X0 pipe shift amount */
+#define R_TILEGX_SHAMT_X1      33      /* X1 pipe shift amount */
+#define R_TILEGX_SHAMT_Y0      34      /* Y0 pipe shift amount */
+#define R_TILEGX_SHAMT_Y1      35      /* Y1 pipe shift amount */
+#define R_TILEGX_IMM16_X0_HW0  36      /* X0 pipe hword 0 */
+#define R_TILEGX_IMM16_X1_HW0  37      /* X1 pipe hword 0 */
+#define R_TILEGX_IMM16_X0_HW1  38      /* X0 pipe hword 1 */
+#define R_TILEGX_IMM16_X1_HW1  39      /* X1 pipe hword 1 */
+#define R_TILEGX_IMM16_X0_HW2  40      /* X0 pipe hword 2 */
+#define R_TILEGX_IMM16_X1_HW2  41      /* X1 pipe hword 2 */
+#define R_TILEGX_IMM16_X0_HW3  42      /* X0 pipe hword 3 */
+#define R_TILEGX_IMM16_X1_HW3  43      /* X1 pipe hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_LAST 44  /* X0 pipe last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST 45  /* X1 pipe last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST 46  /* X0 pipe last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST 47  /* X1 pipe last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST 48  /* X0 pipe last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST 49  /* X1 pipe last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_PCREL 50 /* X0 pipe PC relative hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_PCREL 51 /* X1 pipe PC relative hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_PCREL 52 /* X0 pipe PC relative hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_PCREL 53 /* X1 pipe PC relative hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_PCREL 54 /* X0 pipe PC relative hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_PCREL 55 /* X1 pipe PC relative hword 2 */
+#define R_TILEGX_IMM16_X0_HW3_PCREL 56 /* X0 pipe PC relative hword 3 */
+#define R_TILEGX_IMM16_X1_HW3_PCREL 57 /* X1 pipe PC relative hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_PCREL 58 /* X0 pipe PC-rel last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST_PCREL 59 /* X1 pipe PC-rel last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST_PCREL 60 /* X0 pipe PC-rel last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST_PCREL 61 /* X1 pipe PC-rel last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST_PCREL 62 /* X0 pipe PC-rel last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_GOT 64   /* X0 pipe hword 0 GOT offset */
+#define R_TILEGX_IMM16_X1_HW0_GOT 65   /* X1 pipe hword 0 GOT offset */
+#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */
+#define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */
+#define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */
+#define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */
+#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */
+#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_TLS_GD 78        /* X0 pipe hword 0 TLS GD offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_GD 79        /* X1 pipe hword 0 TLS GD offset */
+#define R_TILEGX_IMM16_X0_HW0_TLS_LE 80        /* X0 pipe hword 0 TLS LE offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_LE 81        /* X1 pipe hword 0 TLS LE offset */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE 82 /* X0 pipe last hword 0 LE off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE 83 /* X1 pipe last hword 0 LE off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE 84 /* X0 pipe last hword 1 LE off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE 85 /* X1 pipe last hword 1 LE off */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD 86 /* X0 pipe last hword 0 GD off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD 87 /* X1 pipe last hword 0 GD off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD 88 /* X0 pipe last hword 1 GD off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD 89 /* X1 pipe last hword 1 GD off */
+/* Relocs 90-91 are currently not defined.  */
+#define R_TILEGX_IMM16_X0_HW0_TLS_IE 92        /* X0 pipe hword 0 TLS IE offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_IE 93        /* X1 pipe hword 0 TLS IE offset */
+#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE 103 /* X1 pipe last hword 1 IE off */
+/* Relocs 104-105 are currently not defined.  */
+#define R_TILEGX_TLS_DTPMOD64  106     /* 64-bit ID of symbol's module */
+#define R_TILEGX_TLS_DTPOFF64  107     /* 64-bit offset in TLS block */
+#define R_TILEGX_TLS_TPOFF64   108     /* 64-bit offset in static TLS block */
+#define R_TILEGX_TLS_DTPMOD32  109     /* 32-bit ID of symbol's module */
+#define R_TILEGX_TLS_DTPOFF32  110     /* 32-bit offset in TLS block */
+#define R_TILEGX_TLS_TPOFF32   111     /* 32-bit offset in static TLS block */
+#define R_TILEGX_TLS_GD_CALL   112     /* "jal" for TLS GD */
+#define R_TILEGX_IMM8_X0_TLS_GD_ADD 113        /* X0 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_X1_TLS_GD_ADD 114        /* X1 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_Y0_TLS_GD_ADD 115        /* Y0 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_Y1_TLS_GD_ADD 116        /* Y1 pipe "addi" for TLS GD */
+#define R_TILEGX_TLS_IE_LOAD   117     /* "ld_tls" for TLS IE */
+#define R_TILEGX_IMM8_X0_TLS_ADD 118   /* X0 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_X1_TLS_ADD 119   /* X1 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_Y0_TLS_ADD 120   /* Y0 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_Y1_TLS_ADD 121   /* Y1 pipe "addi" for TLS GD/IE */
+
+#define R_TILEGX_GNU_VTINHERIT 128     /* GNU C++ vtable hierarchy */
+#define R_TILEGX_GNU_VTENTRY   129     /* GNU C++ vtable member usage */
+
+#define R_TILEGX_NUM           130
+
+
+__END_DECLS
+
+#endif /* elf.h */
diff --git a/lib/libdss-include/endian.h b/lib/libdss-include/endian.h
new file mode 100644 (file)
index 0000000..b13ddaa
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ENDIAN_H
+#define        _ENDIAN_H       1
+
+#include <features.h>
+
+/* Definitions for byte order, according to significance of bytes,
+   from low addresses to high addresses.  The value is what you get by
+   putting '4' in the most significant byte, '3' in the second most
+   significant byte, '2' in the second least significant byte, and '1'
+   in the least significant byte, and then writing down one digit for
+   each byte, starting with the byte at the lowest address at the left,
+   and proceeding to the byte with the highest address at the right.  */
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+#define        __PDP_ENDIAN    3412
+
+/* This file defines `__BYTE_ORDER' for the particular machine.  */
+#include <bits/endian.h>
+
+/* Some machines may need to use a different endianness for floating point
+   values.  */
+#ifndef __FLOAT_WORD_ORDER
+# define __FLOAT_WORD_ORDER __BYTE_ORDER
+#endif
+
+#ifdef __USE_MISC
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# define BIG_ENDIAN    __BIG_ENDIAN
+# define PDP_ENDIAN    __PDP_ENDIAN
+# define BYTE_ORDER    __BYTE_ORDER
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define __LONG_LONG_PAIR(HI, LO) LO, HI
+#elif __BYTE_ORDER == __BIG_ENDIAN
+# define __LONG_LONG_PAIR(HI, LO) HI, LO
+#endif
+
+
+#if defined __USE_MISC && !defined __ASSEMBLER__
+/* Conversion interfaces.  */
+# include <bits/byteswap.h>
+
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define htobe16(x) __bswap_16 (x)
+#  define htole16(x) (x)
+#  define be16toh(x) __bswap_16 (x)
+#  define le16toh(x) (x)
+
+#  define htobe32(x) __bswap_32 (x)
+#  define htole32(x) (x)
+#  define be32toh(x) __bswap_32 (x)
+#  define le32toh(x) (x)
+
+#  define htobe64(x) __bswap_64 (x)
+#  define htole64(x) (x)
+#  define be64toh(x) __bswap_64 (x)
+#  define le64toh(x) (x)
+
+# else
+#  define htobe16(x) (x)
+#  define htole16(x) __bswap_16 (x)
+#  define be16toh(x) (x)
+#  define le16toh(x) __bswap_16 (x)
+
+#  define htobe32(x) (x)
+#  define htole32(x) __bswap_32 (x)
+#  define be32toh(x) (x)
+#  define le32toh(x) __bswap_32 (x)
+
+#  define htobe64(x) (x)
+#  define htole64(x) __bswap_64 (x)
+#  define be64toh(x) (x)
+#  define le64toh(x) __bswap_64 (x)
+# endif
+#endif
+
+#endif /* endian.h */
diff --git a/lib/libdss-include/envz.h b/lib/libdss-include/envz.h
new file mode 100644 (file)
index 0000000..1f75f3d
--- /dev/null
@@ -0,0 +1,73 @@
+/* Routines for dealing with '\0' separated environment vectors
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENVZ_H
+#define _ENVZ_H        1
+
+#include <features.h>
+
+#include <errno.h>
+
+/* Envz's are argz's too, and should be created etc., using the same
+   routines.  */
+#include <argz.h>
+
+__BEGIN_DECLS
+
+/* Returns a pointer to the entry in ENVZ for NAME, or 0 if there is none.  */
+extern char *envz_entry (const char *__restrict __envz, size_t __envz_len,
+                        const char *__restrict __name)
+     __THROW __attribute_pure__;
+
+/* Returns a pointer to the value portion of the entry in ENVZ for NAME, or 0
+   if there is none.  */
+extern char *envz_get (const char *__restrict __envz, size_t __envz_len,
+                      const char *__restrict __name)
+     __THROW __attribute_pure__;
+
+/* Adds an entry for NAME with value VALUE to ENVZ & ENVZ_LEN.  If an entry
+   with the same name already exists in ENVZ, it is removed.  If VALUE is
+   NULL, then the new entry will a special null one, for which envz_get will
+   return NULL, although envz_entry will still return an entry; this is handy
+   because when merging with another envz, the null entry can override an
+   entry in the other one.  Null entries can be removed with envz_strip ().  */
+extern error_t envz_add (char **__restrict __envz,
+                        size_t *__restrict __envz_len,
+                        const char *__restrict __name,
+                        const char *__restrict __value) __THROW;
+
+/* Adds each entry in ENVZ2 to ENVZ & ENVZ_LEN, as if with envz_add().  If
+   OVERRIDE is true, then values in ENVZ2 will supersede those with the same
+   name in ENV, otherwise not.  */
+extern error_t envz_merge (char **__restrict __envz,
+                          size_t *__restrict __envz_len,
+                          const char *__restrict __envz2,
+                          size_t __envz2_len, int __override) __THROW;
+
+/* Remove the entry for NAME from ENVZ & ENVZ_LEN, if any.  */
+extern void envz_remove (char **__restrict __envz,
+                        size_t *__restrict __envz_len,
+                        const char *__restrict __name) __THROW;
+
+/* Remove null entries.  */
+extern void envz_strip (char **__restrict __envz,
+                       size_t *__restrict __envz_len) __THROW;
+
+__END_DECLS
+
+#endif /* envz.h */
diff --git a/lib/libdss-include/err.h b/lib/libdss-include/err.h
new file mode 100644 (file)
index 0000000..b43fe68
--- /dev/null
@@ -0,0 +1,57 @@
+/* 4.4BSD utility functions for error messages.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ERR_H
+#define        _ERR_H  1
+
+#include <features.h>
+
+#define        __need___va_list
+#include <stdarg.h>
+#ifndef        __GNUC_VA_LIST
+# define __gnuc_va_list        __ptr_t
+#endif
+
+__BEGIN_DECLS
+
+/* Print "program: ", FORMAT, ": ", the standard error string for errno,
+   and a newline, on stderr.  */
+extern void warn (const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 1, 2)));
+extern void vwarn (const char *__format, __gnuc_va_list)
+     __attribute__ ((__format__ (__printf__, 1, 0)));
+
+/* Likewise, but without ": " and the standard error string.  */
+extern void warnx (const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 1, 2)));
+extern void vwarnx (const char *__format, __gnuc_va_list)
+     __attribute__ ((__format__ (__printf__, 1, 0)));
+
+/* Likewise, and then exit with STATUS.  */
+extern void err (int __status, const char *__format, ...)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+extern void verr (int __status, const char *__format, __gnuc_va_list)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+extern void errx (int __status, const char *__format, ...)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+extern void verrx (int __status, const char *, __gnuc_va_list)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+
+__END_DECLS
+
+#endif /* err.h */
diff --git a/lib/libdss-include/errno.h b/lib/libdss-include/errno.h
new file mode 100644 (file)
index 0000000..3357cbc
--- /dev/null
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.5 Errors    <errno.h>
+ */
+
+#ifndef        _ERRNO_H
+
+/* The includer defined __need_Emath if he wants only the definitions
+   of EDOM and ERANGE, and not everything else.  */
+#ifndef        __need_Emath
+# define _ERRNO_H      1
+# include <features.h>
+#endif
+
+__BEGIN_DECLS
+
+/* Get the error number constants from the system-specific file.
+   This file will test __need_Emath and _ERRNO_H.  */
+#include <bits/errno.h>
+#undef __need_Emath
+
+#ifdef _ERRNO_H
+
+/* Declare the `errno' variable, unless it's defined as a macro by
+   bits/errno.h.  This is the case in GNU, where it is a per-thread
+   variable.  This redeclaration using the macro still works, but it
+   will be a function declaration without a prototype and may trigger
+   a -Wstrict-prototypes warning.  */
+#ifndef        errno
+extern int errno;
+#endif
+
+#ifdef __USE_GNU
+
+/* The full and simple forms of the name with which the program was
+   invoked.  These variables are set up automatically at startup based on
+   the value of ARGV[0] (this works only if you use GNU ld).  */
+extern char *program_invocation_name, *program_invocation_short_name;
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
+
+__END_DECLS
+
+#endif /* _ERRNO_H */
+
+/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
+   that printing `error_t' values in the debugger shows the names.  We
+   might need this definition sometimes even if this file was included
+   before.  */
+#if defined __USE_GNU || defined __need_error_t
+# ifndef __error_t_defined
+typedef int error_t;
+#  define __error_t_defined    1
+# endif
+# undef __need_error_t
+#endif
diff --git a/lib/libdss-include/error.h b/lib/libdss-include/error.h
new file mode 100644 (file)
index 0000000..32d84ee
--- /dev/null
@@ -0,0 +1,57 @@
+/* Declaration for error-reporting function
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+
+extern void error (int __status, int __errnum, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int __status, int __errnum, const char *__fname,
+                          unsigned int __lineno, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+extern void (*error_print_progname) (void);
+
+/* This variable is incremented each time `error' is called.  */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+extern int error_one_per_line;
+
+
+#if defined __extern_always_inline && defined __va_arg_pack
+# include <bits/error.h>
+#endif
+
+__END_DECLS
+
+#endif /* error.h */
diff --git a/lib/libdss-include/execinfo.h b/lib/libdss-include/execinfo.h
new file mode 100644 (file)
index 0000000..d47c9e6
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _EXECINFO_H
+#define _EXECINFO_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Store up to SIZE return address of the current program state in
+   ARRAY and return the exact number of values stored.  */
+extern int backtrace (void **__array, int __size) __nonnull ((1));
+
+
+/* Return names of functions from the backtrace list in ARRAY in a newly
+   malloc()ed memory block.  */
+extern char **backtrace_symbols (void *const *__array, int __size)
+     __THROW __nonnull ((1));
+
+
+/* This function is similar to backtrace_symbols() but it writes the result
+   immediately to a file.  */
+extern void backtrace_symbols_fd (void *const *__array, int __size, int __fd)
+     __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* execinfo.h  */
diff --git a/lib/libdss-include/fcntl.h b/lib/libdss-include/fcntl.h
new file mode 100644 (file)
index 0000000..67752a1
--- /dev/null
@@ -0,0 +1,294 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 6.5 File Control Operations     <fcntl.h>
+ */
+
+#ifndef        _FCNTL_H
+#define        _FCNTL_H        1
+
+#include <features.h>
+
+/* This must be early so <bits/fcntl.h> can define types winningly.  */
+__BEGIN_DECLS
+
+/* Get __mode_t, __dev_t and __off_t  .*/
+#include <bits/types.h>
+
+/* Get the definitions of O_*, F_*, FD_*: all the
+   numbers and flag bits for `open', `fcntl', et al.  */
+#include <bits/fcntl.h>
+
+/* Detect if open needs mode as a third argument (or for openat as a fourth
+   argument).  */
+#ifdef __O_TMPFILE
+# define __OPEN_NEEDS_MODE(oflag) \
+  (((oflag) & O_CREAT) != 0 || ((oflag) & __O_TMPFILE) == __O_TMPFILE)
+#else
+# define __OPEN_NEEDS_MODE(oflag) (((oflag) & O_CREAT) != 0)
+#endif
+
+/* POSIX.1-2001 specifies that these types are defined by <fcntl.h>.
+   Earlier POSIX standards permitted any type ending in `_t' to be defined
+   by any POSIX header, so we don't conditionalize the definitions here.  */
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+
+#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+#endif
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+/* For XPG all symbols from <sys/stat.h> should also be available.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define __need_timespec
+# include <time.h>
+# include <bits/stat.h>
+
+# define S_IFMT                __S_IFMT
+# define S_IFDIR       __S_IFDIR
+# define S_IFCHR       __S_IFCHR
+# define S_IFBLK       __S_IFBLK
+# define S_IFREG       __S_IFREG
+# ifdef __S_IFIFO
+#  define S_IFIFO      __S_IFIFO
+# endif
+# ifdef __S_IFLNK
+#  define S_IFLNK      __S_IFLNK
+# endif
+# if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) && defined __S_IFSOCK
+#  define S_IFSOCK     __S_IFSOCK
+# endif
+
+/* Protection bits.  */
+
+# define S_ISUID       __S_ISUID       /* Set user ID on execution.  */
+# define S_ISGID       __S_ISGID       /* Set group ID on execution.  */
+
+# if defined __USE_MISC || defined __USE_XOPEN
+/* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
+#  define S_ISVTX      __S_ISVTX
+# endif
+
+# define S_IRUSR       __S_IREAD       /* Read by owner.  */
+# define S_IWUSR       __S_IWRITE      /* Write by owner.  */
+# define S_IXUSR       __S_IEXEC       /* Execute by owner.  */
+/* Read, write, and execute by owner.  */
+# define S_IRWXU       (__S_IREAD|__S_IWRITE|__S_IEXEC)
+
+# define S_IRGRP       (S_IRUSR >> 3)  /* Read by group.  */
+# define S_IWGRP       (S_IWUSR >> 3)  /* Write by group.  */
+# define S_IXGRP       (S_IXUSR >> 3)  /* Execute by group.  */
+/* Read, write, and execute by group.  */
+# define S_IRWXG       (S_IRWXU >> 3)
+
+# define S_IROTH       (S_IRGRP >> 3)  /* Read by others.  */
+# define S_IWOTH       (S_IWGRP >> 3)  /* Write by others.  */
+# define S_IXOTH       (S_IXGRP >> 3)  /* Execute by others.  */
+/* Read, write, and execute by others.  */
+# define S_IRWXO       (S_IRWXG >> 3)
+#endif
+
+#ifdef __USE_MISC
+# ifndef R_OK                  /* Verbatim from <unistd.h>.  Ugh.  */
+/* Values for the second argument to access.
+   These may be OR'd together.  */
+#  define R_OK 4               /* Test for read permission.  */
+#  define W_OK 2               /* Test for write permission.  */
+#  define X_OK 1               /* Test for execute permission.  */
+#  define F_OK 0               /* Test for existence.  */
+# endif
+#endif /* Use misc.  */
+
+/* XPG wants the following symbols.   <stdio.h> has the same definitions.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define SEEK_SET      0       /* Seek from beginning of file.  */
+# define SEEK_CUR      1       /* Seek from current position.  */
+# define SEEK_END      2       /* Seek from end of file.  */
+#endif /* XPG */
+
+/* Do the file control operation described by CMD on FD.
+   The remaining arguments are interpreted depending on CMD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int fcntl (int __fd, int __cmd, ...);
+
+/* Open FILE and return a new file descriptor for it, or -1 on error.
+   OFLAG determines the type of access used.  If O_CREAT or O_TMPFILE is set
+   in OFLAG, the third argument is taken as a `mode_t', the mode of the
+   created file.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int open (const char *__file, int __oflag, ...) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64)
+     __nonnull ((1));
+# else
+#  define open open64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1));
+#endif
+
+#ifdef __USE_ATFILE
+/* Similar to `open' but a relative path name is interpreted relative to
+   the directory for which FD is a descriptor.
+
+   NOTE: some other `openat' implementation support additional functionality
+   through this interface, especially using the O_XATTR flag.  This is not
+   yet supported here.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int openat (int __fd, const char *__file, int __oflag, ...)
+     __nonnull ((2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (openat, (int __fd, const char *__file, int __oflag,
+                               ...), openat64) __nonnull ((2));
+#  else
+#   define openat openat64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int openat64 (int __fd, const char *__file, int __oflag, ...)
+     __nonnull ((2));
+# endif
+#endif
+
+/* Create and open FILE, with mode MODE.  This takes an `int' MODE
+   argument because that is what `mode_t' will be widened to.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (creat, (const char *__file, mode_t __mode),
+                      creat64) __nonnull ((1));
+# else
+#  define creat creat64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int creat64 (const char *__file, mode_t __mode) __nonnull ((1));
+#endif
+
+#if !defined F_LOCK && (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \
+                                              && !defined __USE_POSIX))
+/* NOTE: These declarations also appear in <unistd.h>; be sure to keep both
+   files consistent.  Some systems have them there and some here, and some
+   software depends on the macros being defined without including both.  */
+
+/* `lockf' is a simpler interface to the locking facilities of `fcntl'.
+   LEN is always relative to the current file position.
+   The CMD argument is one of the following.  */
+
+# define F_ULOCK 0     /* Unlock a previously locked region.  */
+# define F_LOCK  1     /* Lock a region for exclusive use.  */
+# define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
+# define F_TEST  3     /* Test a region for other processes locks.  */
+
+# ifndef __USE_FILE_OFFSET64
+extern int lockf (int __fd, int __cmd, off_t __len);
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), lockf64);
+#  else
+#   define lockf lockf64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 (int __fd, int __cmd, off64_t __len);
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Advice the system about the expected behaviour of the application with
+   respect to the file associated with FD.  */
+# ifndef __USE_FILE_OFFSET64
+extern int posix_fadvise (int __fd, off_t __offset, off_t __len,
+                         int __advise) __THROW;
+# else
+ # ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (posix_fadvise, (int __fd, __off64_t __offset,
+                                          __off64_t __len, int __advise),
+                          posix_fadvise64);
+#  else
+#   define posix_fadvise posix_fadvise64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
+                           int __advise) __THROW;
+# endif
+
+
+/* Reserve storage for the data of the file associated with FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int posix_fallocate (int __fd, off_t __offset, off_t __len);
+# else
+ # ifdef __REDIRECT
+extern int __REDIRECT (posix_fallocate, (int __fd, __off64_t __offset,
+                                        __off64_t __len),
+                      posix_fallocate64);
+#  else
+#   define posix_fallocate posix_fallocate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
+# endif
+#endif
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \
+    && defined __va_arg_pack_len
+# include <bits/fcntl2.h>
+#endif
+
+__END_DECLS
+
+#endif /* fcntl.h  */
diff --git a/lib/libdss-include/features.h b/lib/libdss-include/features.h
new file mode 100644 (file)
index 0000000..1afe20c
--- /dev/null
@@ -0,0 +1,394 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FEATURES_H
+#define        _FEATURES_H     1
+
+/* These are defined by the user (or the compiler)
+   to specify the desired environment:
+
+   __STRICT_ANSI__     ISO Standard C.
+   _ISOC99_SOURCE      Extensions to ISO C89 from ISO C99.
+   _ISOC11_SOURCE      Extensions to ISO C99 from ISO C11.
+   _POSIX_SOURCE       IEEE Std 1003.1.
+   _POSIX_C_SOURCE     If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
+                       if >=199309L, add IEEE Std 1003.1b-1993;
+                       if >=199506L, add IEEE Std 1003.1c-1995;
+                       if >=200112L, all of IEEE 1003.1-2004
+                       if >=200809L, all of IEEE 1003.1-2008
+   _XOPEN_SOURCE       Includes POSIX and XPG things.  Set to 500 if
+                       Single Unix conformance is wanted, to 600 for the
+                       sixth revision, to 700 for the seventh revision.
+   _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
+   _LARGEFILE_SOURCE   Some more functions for correct standard I/O.
+   _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
+   _FILE_OFFSET_BITS=N Select default filesystem interface.
+   _ATFILE_SOURCE      Additional *at interfaces.
+   _GNU_SOURCE         All of the above, plus GNU extensions.
+   _DEFAULT_SOURCE     The default set of features (taking precedence over
+                       __STRICT_ANSI__).
+   _REENTRANT          Select additionally reentrant object.
+   _THREAD_SAFE                Same as _REENTRANT, often used by other systems.
+   _FORTIFY_SOURCE     If set to numeric value > 0 additional security
+                       measures are defined, according to level.
+
+   The `-ansi' switch to the GNU C compiler, and standards conformance
+   options such as `-std=c99', define __STRICT_ANSI__.  If none of
+   these are defined, or if _DEFAULT_SOURCE is defined, the default is
+   to have _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
+   200809L, as well as enabling miscellaneous functions from BSD and
+   SVID.  If more than one of these are defined, they accumulate.  For
+   example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE together
+   give you ISO C, 1003.1, and 1003.2, but nothing else.
+
+   These are defined by this file and are used by the
+   header files to decide what to declare or define:
+
+   __USE_ISOC11                Define ISO C11 things.
+   __USE_ISOC99                Define ISO C99 things.
+   __USE_ISOC95                Define ISO C90 AMD1 (C95) things.
+   __USE_POSIX         Define IEEE Std 1003.1 things.
+   __USE_POSIX2                Define IEEE Std 1003.2 things.
+   __USE_POSIX199309   Define IEEE Std 1003.1, and .1b things.
+   __USE_POSIX199506   Define IEEE Std 1003.1, .1b, .1c and .1i things.
+   __USE_XOPEN         Define XPG things.
+   __USE_XOPEN_EXTENDED        Define X/Open Unix things.
+   __USE_UNIX98                Define Single Unix V2 things.
+   __USE_XOPEN2K        Define XPG6 things.
+   __USE_XOPEN2KXSI     Define XPG6 XSI things.
+   __USE_XOPEN2K8       Define XPG7 things.
+   __USE_XOPEN2K8XSI    Define XPG7 XSI things.
+   __USE_LARGEFILE     Define correct standard I/O things.
+   __USE_LARGEFILE64   Define LFS things with separate names.
+   __USE_FILE_OFFSET64 Define 64bit interface as default.
+   __USE_MISC          Define things from 4.3BSD or System V Unix.
+   __USE_ATFILE                Define *at interfaces and AT_* constants for them.
+   __USE_GNU           Define GNU extensions.
+   __USE_REENTRANT     Define reentrant/thread-safe *_r functions.
+   __USE_FORTIFY_LEVEL Additional security measures used, according to level.
+
+   The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
+   defined by this file unconditionally.  `__GNU_LIBRARY__' is provided
+   only for compatibility.  All new code should use the other symbols
+   to test for features.
+
+   All macros listed above as possibly being defined by this file are
+   explicitly undefined if they are not explicitly defined.
+   Feature-test macros that are not defined by the user or compiler
+   but are implied by the other feature-test macros defined (or by the
+   lack of any definitions) are defined by the file.  */
+
+
+/* Undefine everything, so we get a clean slate.  */
+#undef __USE_ISOC11
+#undef __USE_ISOC99
+#undef __USE_ISOC95
+#undef __USE_ISOCXX11
+#undef __USE_POSIX
+#undef __USE_POSIX2
+#undef __USE_POSIX199309
+#undef __USE_POSIX199506
+#undef __USE_XOPEN
+#undef __USE_XOPEN_EXTENDED
+#undef __USE_UNIX98
+#undef __USE_XOPEN2K
+#undef __USE_XOPEN2KXSI
+#undef __USE_XOPEN2K8
+#undef __USE_XOPEN2K8XSI
+#undef __USE_LARGEFILE
+#undef __USE_LARGEFILE64
+#undef __USE_FILE_OFFSET64
+#undef __USE_MISC
+#undef __USE_ATFILE
+#undef __USE_GNU
+#undef __USE_REENTRANT
+#undef __USE_FORTIFY_LEVEL
+#undef __KERNEL_STRICT_NAMES
+
+/* Suppress kernel-name space pollution unless user expressedly asks
+   for it.  */
+#ifndef _LOOSE_KERNEL_NAMES
+# define __KERNEL_STRICT_NAMES
+#endif
+
+/* Convenience macros to test the versions of glibc and gcc.
+   Use them like this:
+   #if __GNUC_PREREQ (2,8)
+   ... code requiring gcc 2.8 or later ...
+   #endif
+   Note - they won't work for gcc1 or glibc1, since the _MINOR macros
+   were not defined then.  */
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+# define __GNUC_PREREQ(maj, min) 0
+#endif
+
+/* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for
+   _DEFAULT_SOURCE.  If _DEFAULT_SOURCE is present we do not
+   issue a warning; the expectation is that the source is being
+   transitioned to use the new macro.  */
+#if (defined _BSD_SOURCE || defined _SVID_SOURCE) \
+    && !defined _DEFAULT_SOURCE
+/* Don't #warn about _BSD_SOURCE || _SVID_SOURCE, as it breaks -Werror
+   and we don't have time to check/fix everything before vivid release
+# warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
+*/
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+#endif
+
+/* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
+#ifdef _GNU_SOURCE
+# undef  _ISOC95_SOURCE
+# define _ISOC95_SOURCE        1
+# undef  _ISOC99_SOURCE
+# define _ISOC99_SOURCE        1
+# undef  _ISOC11_SOURCE
+# define _ISOC11_SOURCE        1
+# undef  _POSIX_SOURCE
+# define _POSIX_SOURCE 1
+# undef  _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE       200809L
+# undef  _XOPEN_SOURCE
+# define _XOPEN_SOURCE 700
+# undef  _XOPEN_SOURCE_EXTENDED
+# define _XOPEN_SOURCE_EXTENDED        1
+# undef         _LARGEFILE64_SOURCE
+# define _LARGEFILE64_SOURCE   1
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+# undef  _ATFILE_SOURCE
+# define _ATFILE_SOURCE        1
+#endif
+
+/* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined,
+   define _DEFAULT_SOURCE.  */
+#if (defined _DEFAULT_SOURCE                                   \
+     || (!defined __STRICT_ANSI__                              \
+        && !defined _ISOC99_SOURCE                             \
+        && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE  \
+        && !defined _XOPEN_SOURCE))
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+#endif
+
+/* This is to enable the ISO C11 extension.  */
+#if (defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L))
+# define __USE_ISOC11  1
+#endif
+
+/* This is to enable the ISO C99 extension.  */
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+# define __USE_ISOC99  1
+#endif
+
+/* This is to enable the ISO C90 Amendment 1:1995 extension.  */
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L))
+# define __USE_ISOC95  1
+#endif
+
+/* This is to enable compatibility for ISO C++11.
+
+   So far g++ does not provide a macro.  Check the temporary macro for
+   now, too.  */
+#if ((defined __cplusplus && __cplusplus >= 201103L)                         \
+     || defined __GXX_EXPERIMENTAL_CXX0X__)
+# define __USE_ISOCXX11        1
+#endif
+
+/* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE
+   is defined, use POSIX.1-2008 (or another version depending on
+   _XOPEN_SOURCE).  */
+#ifdef _DEFAULT_SOURCE
+# if !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE
+#  define __USE_POSIX_IMPLICITLY       1
+# endif
+# undef  _POSIX_SOURCE
+# define _POSIX_SOURCE 1
+# undef  _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE       200809L
+#endif
+#if ((!defined __STRICT_ANSI__                                 \
+      || (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500))        \
+     && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE)
+# define _POSIX_SOURCE 1
+# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
+#  define _POSIX_C_SOURCE      2
+# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 600
+#  define _POSIX_C_SOURCE      199506L
+# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 700
+#  define _POSIX_C_SOURCE      200112L
+# else
+#  define _POSIX_C_SOURCE      200809L
+# endif
+# define __USE_POSIX_IMPLICITLY        1
+#endif
+
+#if (defined _POSIX_SOURCE                                     \
+     || (defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 1)      \
+     || defined _XOPEN_SOURCE)
+# define __USE_POSIX   1
+#endif
+
+#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE
+# define __USE_POSIX2  1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199309L
+# define __USE_POSIX199309     1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199506L
+# define __USE_POSIX199506     1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200112L
+# define __USE_XOPEN2K         1
+# undef __USE_ISOC95
+# define __USE_ISOC95          1
+# undef __USE_ISOC99
+# define __USE_ISOC99          1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200809L
+# define __USE_XOPEN2K8                1
+# undef  _ATFILE_SOURCE
+# define _ATFILE_SOURCE        1
+#endif
+
+#ifdef _XOPEN_SOURCE
+# define __USE_XOPEN   1
+# if (_XOPEN_SOURCE - 0) >= 500
+#  define __USE_XOPEN_EXTENDED 1
+#  define __USE_UNIX98 1
+#  undef _LARGEFILE_SOURCE
+#  define _LARGEFILE_SOURCE    1
+#  if (_XOPEN_SOURCE - 0) >= 600
+#   if (_XOPEN_SOURCE - 0) >= 700
+#    define __USE_XOPEN2K8     1
+#    define __USE_XOPEN2K8XSI  1
+#   endif
+#   define __USE_XOPEN2K       1
+#   define __USE_XOPEN2KXSI    1
+#   undef __USE_ISOC95
+#   define __USE_ISOC95                1
+#   undef __USE_ISOC99
+#   define __USE_ISOC99                1
+#  endif
+# else
+#  ifdef _XOPEN_SOURCE_EXTENDED
+#   define __USE_XOPEN_EXTENDED        1
+#  endif
+# endif
+#endif
+
+#ifdef _LARGEFILE_SOURCE
+# define __USE_LARGEFILE       1
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+# define __USE_LARGEFILE64     1
+#endif
+
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+# define __USE_FILE_OFFSET64   1
+#endif
+
+#if defined _DEFAULT_SOURCE
+# define __USE_MISC    1
+#endif
+
+#ifdef _ATFILE_SOURCE
+# define __USE_ATFILE  1
+#endif
+
+#ifdef _GNU_SOURCE
+# define __USE_GNU     1
+#endif
+
+#if defined _REENTRANT || defined _THREAD_SAFE
+# define __USE_REENTRANT       1
+#endif
+
+#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
+    && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
+# if _FORTIFY_SOURCE > 1
+#  define __USE_FORTIFY_LEVEL 2
+# else
+#  define __USE_FORTIFY_LEVEL 1
+# endif
+#else
+# define __USE_FORTIFY_LEVEL 0
+#endif
+
+/* Get definitions of __STDC_* predefined macros, if the compiler has
+   not preincluded this header automatically.  */
+#include <stdc-predef.h>
+
+/* This macro indicates that the installed library is the GNU C Library.
+   For historic reasons the value now is 6 and this will stay from now
+   on.  The use of this variable is deprecated.  Use __GLIBC__ and
+   __GLIBC_MINOR__ now (see below) when you want to test for a specific
+   GNU C library version and use the values in <gnu/lib-names.h> to get
+   the sonames of the shared libraries.  */
+#undef  __GNU_LIBRARY__
+#define __GNU_LIBRARY__ 6
+
+/* Major and minor version number of the GNU C library package.  Use
+   these macros to test for features in specific releases.  */
+#define        __GLIBC__       2
+#define        __GLIBC_MINOR__ 23
+
+#define __GLIBC_PREREQ(maj, min) \
+       ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
+
+/* This is here only because every header file already includes this one.  */
+#ifndef __ASSEMBLER__
+# ifndef _SYS_CDEFS_H
+#  include <sys/cdefs.h>
+# endif
+
+/* If we don't have __REDIRECT, prototypes will be missing if
+   __USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */
+# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT
+#  define __USE_LARGEFILE      1
+#  define __USE_LARGEFILE64    1
+# endif
+
+#endif /* !ASSEMBLER */
+
+/* Decide whether we can define 'extern inline' functions in headers.  */
+#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
+    && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \
+    && defined __extern_inline
+# define __USE_EXTERN_INLINES  1
+#endif
+
+
+/* This is here only because every header file already includes this one.
+   Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
+   <gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
+   that will always return failure (and set errno to ENOSYS).  */
+#include <gnu/stubs.h>
+
+
+#endif /* features.h  */
diff --git a/lib/libdss-include/fenv.h b/lib/libdss-include/fenv.h
new file mode 100644 (file)
index 0000000..9a1e112
--- /dev/null
@@ -0,0 +1,135 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C99 7.6: Floating-point environment     <fenv.h>
+ */
+
+#ifndef _FENV_H
+#define _FENV_H        1
+
+#include <features.h>
+
+/* Get the architecture dependend definitions.  The following definitions
+   are expected to be done:
+
+   fenv_t      type for object representing an entire floating-point
+               environment
+
+   FE_DFL_ENV  macro of type pointer to fenv_t to be used as the argument
+               to functions taking an argument of type fenv_t; in this
+               case the default environment will be used
+
+   fexcept_t   type for object representing the floating-point exception
+               flags including status associated with the flags
+
+   The following macros are defined iff the implementation supports this
+   kind of exception.
+   FE_INEXACT          inexact result
+   FE_DIVBYZERO                division by zero
+   FE_UNDERFLOW                result not representable due to underflow
+   FE_OVERFLOW         result not representable due to overflow
+   FE_INVALID          invalid operation
+
+   FE_ALL_EXCEPT       bitwise OR of all supported exceptions
+
+   The next macros are defined iff the appropriate rounding mode is
+   supported by the implementation.
+   FE_TONEAREST                round to nearest
+   FE_UPWARD           round toward +Inf
+   FE_DOWNWARD         round toward -Inf
+   FE_TOWARDZERO       round toward 0
+*/
+#include <bits/fenv.h>
+
+__BEGIN_DECLS
+
+/* Floating-point exception handling.  */
+
+/* Clear the supported exceptions represented by EXCEPTS.  */
+extern int feclearexcept (int __excepts) __THROW;
+
+/* Store implementation-defined representation of the exception flags
+   indicated by EXCEPTS in the object pointed to by FLAGP.  */
+extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
+
+/* Raise the supported exceptions represented by EXCEPTS.  */
+extern int feraiseexcept (int __excepts) __THROW;
+
+/* Set complete status for exceptions indicated by EXCEPTS according to
+   the representation in the object pointed to by FLAGP.  */
+extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
+
+/* Determine which of subset of the exceptions specified by EXCEPTS are
+   currently set.  */
+extern int fetestexcept (int __excepts) __THROW;
+
+
+/* Rounding control.  */
+
+/* Get current rounding direction.  */
+extern int fegetround (void) __THROW __attribute_pure__;
+
+/* Establish the rounding direction represented by ROUND.  */
+extern int fesetround (int __rounding_direction) __THROW;
+
+
+/* Floating-point environment.  */
+
+/* Store the current floating-point environment in the object pointed
+   to by ENVP.  */
+extern int fegetenv (fenv_t *__envp) __THROW;
+
+/* Save the current environment in the object pointed to by ENVP, clear
+   exception flags and install a non-stop mode (if available) for all
+   exceptions.  */
+extern int feholdexcept (fenv_t *__envp) __THROW;
+
+/* Establish the floating-point environment represented by the object
+   pointed to by ENVP.  */
+extern int fesetenv (const fenv_t *__envp) __THROW;
+
+/* Save current exceptions in temporary storage, install environment
+   represented by object pointed to by ENVP and raise exceptions
+   according to saved exceptions.  */
+extern int feupdateenv (const fenv_t *__envp) __THROW;
+
+
+/* Include optimization.  */
+#ifdef __OPTIMIZE__
+# include <bits/fenvinline.h>
+#endif
+
+#ifdef __USE_GNU
+
+/* Enable individual exceptions.  Will not enable more exceptions than
+   EXCEPTS specifies.  Returns the previous enabled exceptions if all
+   exceptions are successfully set, otherwise returns -1.  */
+extern int feenableexcept (int __excepts) __THROW;
+
+/* Disable individual exceptions.  Will not disable more exceptions than
+   EXCEPTS specifies.  Returns the previous enabled exceptions if all
+   exceptions are successfully disabled, otherwise returns -1.  */
+extern int fedisableexcept (int __excepts) __THROW;
+
+/* Return enabled exceptions.  */
+extern int fegetexcept (void) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fenv.h */
diff --git a/lib/libdss-include/fmtmsg.h b/lib/libdss-include/fmtmsg.h
new file mode 100644 (file)
index 0000000..8b42d10
--- /dev/null
@@ -0,0 +1,105 @@
+/* Message display handling.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __FMTMSG_H
+#define __FMTMSG_H     1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Values to control `fmtmsg' function.  */
+enum
+{
+  MM_HARD = 0x001,     /* Source of the condition is hardware.  */
+#define MM_HARD MM_HARD
+  MM_SOFT = 0x002,     /* Source of the condition is software.  */
+#define MM_SOFT MM_SOFT
+  MM_FIRM = 0x004,     /* Source of the condition is firmware.  */
+#define MM_FIRM MM_FIRM
+  MM_APPL = 0x008,     /* Condition detected by application.  */
+#define MM_APPL MM_APPL
+  MM_UTIL = 0x010,     /* Condition detected by utility.  */
+#define MM_UTIL MM_UTIL
+  MM_OPSYS = 0x020,    /* Condition detected by operating system.  */
+#define MM_OPSYS MM_OPSYS
+  MM_RECOVER = 0x040,  /* Recoverable error.  */
+#define MM_RECOVER MM_RECOVER
+  MM_NRECOV = 0x080,   /* Non-recoverable error.  */
+#define MM_NRECOV MM_NRECOV
+  MM_PRINT = 0x100,    /* Display message in standard error.  */
+#define MM_PRINT MM_PRINT
+  MM_CONSOLE = 0x200   /* Display message on system console.  */
+#define MM_CONSOLE MM_CONSOLE
+};
+
+/* Values to be for SEVERITY parameter of `fmtmsg'.  */
+enum
+{
+  MM_NOSEV = 0,                /* No severity level provided for the message.  */
+#define MM_NOSEV MM_NOSEV
+  MM_HALT,             /* Error causing application to halt.  */
+#define MM_HALT MM_HALT
+  MM_ERROR,            /* Application has encountered a non-fatal fault.  */
+#define MM_ERROR MM_ERROR
+  MM_WARNING,          /* Application has detected unusual non-error
+                          condition.  */
+#define MM_WARNING MM_WARNING
+  MM_INFO              /* Informative message.  */
+#define MM_INFO MM_INFO
+};
+
+
+/* Macros which can be used as null values for the arguments of `fmtmsg'.  */
+#define MM_NULLLBL     ((char *) 0)
+#define MM_NULLSEV     0
+#define MM_NULLMC      ((long int) 0)
+#define MM_NULLTXT     ((char *) 0)
+#define MM_NULLACT     ((char *) 0)
+#define MM_NULLTAG     ((char *) 0)
+
+
+/* Possible return values of `fmtmsg'.  */
+enum
+{
+  MM_NOTOK = -1,
+#define MM_NOTOK MM_NOTOK
+  MM_OK = 0,
+#define MM_OK MM_OK
+  MM_NOMSG = 1,
+#define MM_NOMSG MM_NOMSG
+  MM_NOCON = 4
+#define MM_NOCON MM_NOCON
+};
+
+
+/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
+   and TAG to console or standard error.  */
+extern int fmtmsg (long int __classification, const char *__label,
+                  int __severity, const char *__text,
+                  const char *__action, const char *__tag);
+
+#ifdef __USE_MISC
+/* Add or remove severity level.  */
+extern int addseverity (int __severity, const char *__string) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fmtmsg.h */
diff --git a/lib/libdss-include/fnmatch.h b/lib/libdss-include/fnmatch.h
new file mode 100644 (file)
index 0000000..fdfaf90
--- /dev/null
@@ -0,0 +1,62 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FNMATCH_H
+#define        _FNMATCH_H      1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef FNM_PATHNAME
+#undef FNM_NOESCAPE
+#undef FNM_PERIOD
+
+/* Bits set in the FLAGS argument to `fnmatch'.  */
+#define        FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
+#define        FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define        FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
+
+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
+# define FNM_FILE_NAME  FNM_PATHNAME   /* Preferred GNU name.  */
+# define FNM_LEADING_DIR (1 << 3)      /* Ignore `/...' after a match.  */
+# define FNM_CASEFOLD   (1 << 4)       /* Compare without regard to case.  */
+# define FNM_EXTMATCH   (1 << 5)       /* Use ksh-like extended matching. */
+#endif
+
+/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
+#define        FNM_NOMATCH     1
+
+/* This value is returned if the implementation does not support
+   `fnmatch'.  Since this is not the case here it will never be
+   returned but the conformance test suites still require the symbol
+   to be defined.  */
+#ifdef _XOPEN_SOURCE
+# define FNM_NOSYS     (-1)
+#endif
+
+/* Match NAME against the filename pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch (const char *__pattern, const char *__name, int __flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/lib/libdss-include/fpu_control.h b/lib/libdss-include/fpu_control.h
new file mode 100644 (file)
index 0000000..7e74445
--- /dev/null
@@ -0,0 +1,81 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AARCH64_FPU_CONTROL_H
+#define _AARCH64_FPU_CONTROL_H
+
+/* Macros for accessing the FPCR and FPSR.  */
+
+#define _FPU_GETCW(fpcr) \
+  __asm__ __volatile__ ("mrs   %0, fpcr" : "=r" (fpcr))
+
+#define _FPU_SETCW(fpcr) \
+  __asm__ __volatile__ ("msr   fpcr, %0" : : "r" (fpcr))
+
+#define _FPU_GETFPSR(fpsr) \
+  __asm__ __volatile__ ("mrs   %0, fpsr" : "=r" (fpsr))
+
+#define _FPU_SETFPSR(fpsr) \
+  __asm__ __volatile__ ("msr   fpsr, %0" : : "r" (fpsr))
+
+/* Reserved bits should be preserved when modifying register
+   contents. These two masks indicate which bits in each of FPCR and
+   FPSR should not be changed.  */
+
+#define _FPU_RESERVED          0xfe0fe0ff
+#define _FPU_FPSR_RESERVED     0x0fffffe0
+
+#define _FPU_DEFAULT           0x00000000
+#define _FPU_FPSR_DEFAULT      0x00000000
+
+/* Layout of FPCR and FPSR:
+
+   |       |       |       |       |       |       |       |
+   0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0
+   s s s s s                                       s     s s s s s
+             c c c c c c c               c c c c c
+   N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I
+           C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O
+             P     O O R R Z N N N E K K E E E E E C K K C C C C C
+                   D D I I P
+                   E E D D
+                       E E
+ */
+
+#define _FPU_FPCR_RM_MASK  0xc00000
+
+#define _FPU_FPCR_MASK_IXE 0x1000
+#define _FPU_FPCR_MASK_UFE 0x0800
+#define _FPU_FPCR_MASK_OFE 0x0400
+#define _FPU_FPCR_MASK_DZE 0x0200
+#define _FPU_FPCR_MASK_IOE 0x0100
+
+#define _FPU_FPCR_IEEE                       \
+  (_FPU_DEFAULT  | _FPU_FPCR_MASK_IXE |             \
+   _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \
+   _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE)
+
+#define _FPU_FPSR_IEEE 0
+
+typedef unsigned int fpu_control_t;
+typedef unsigned int fpu_fpsr_t;
+
+/* Default control word set at startup.  */
+extern fpu_control_t __fpu_control;
+
+#endif
diff --git a/lib/libdss-include/fstab.h b/lib/libdss-include/fstab.h
new file mode 100644 (file)
index 0000000..9f17e1b
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fstab.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _FSTAB_H
+#define _FSTAB_H       1
+
+#include <features.h>
+
+/*
+ * File system table, see fstab(5).
+ *
+ * Used by dump, mount, umount, swapon, fsck, df, ...
+ *
+ * For ufs fs_spec field is the block special name.  Programs that want to
+ * use the character special name must create that name by prepending a 'r'
+ * after the right most slash.  Quota files are always named "quotas", so
+ * if type is "rq", then use concatenation of fs_file and "quotas" to locate
+ * quota file.
+ */
+#define        _PATH_FSTAB     "/etc/fstab"
+#define        FSTAB           "/etc/fstab"    /* deprecated */
+
+#define        FSTAB_RW        "rw"            /* read/write device */
+#define        FSTAB_RQ        "rq"            /* read/write with quotas */
+#define        FSTAB_RO        "ro"            /* read-only device */
+#define        FSTAB_SW        "sw"            /* swap device */
+#define        FSTAB_XX        "xx"            /* ignore totally */
+
+struct fstab
+  {
+    char *fs_spec;                     /* block special device name */
+    char *fs_file;                     /* file system path prefix */
+    char *fs_vfstype;                  /* File system type, ufs, nfs */
+    char *fs_mntops;                   /* Mount options ala -o */
+    const char *fs_type;               /* FSTAB_* from fs_mntops */
+    int        fs_freq;                        /* dump frequency, in days */
+    int        fs_passno;                      /* pass number on parallel dump */
+  };
+
+
+__BEGIN_DECLS
+
+extern struct fstab *getfsent (void) __THROW;
+extern struct fstab *getfsspec (const char *__name) __THROW;
+extern struct fstab *getfsfile (const char *__name) __THROW;
+extern int setfsent (void) __THROW;
+extern void endfsent (void) __THROW;
+
+__END_DECLS
+
+#endif /* fstab.h */
diff --git a/lib/libdss-include/fts.h b/lib/libdss-include/fts.h
new file mode 100644 (file)
index 0000000..127a0d2
--- /dev/null
@@ -0,0 +1,215 @@
+/* File tree traversal functions declarations.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fts.h       8.3 (Berkeley) 8/14/94
+ */
+
+#ifndef        _FTS_H
+#define        _FTS_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+typedef struct {
+       struct _ftsent *fts_cur;        /* current node */
+       struct _ftsent *fts_child;      /* linked list of children */
+       struct _ftsent **fts_array;     /* sort array */
+       dev_t fts_dev;                  /* starting device # */
+       char *fts_path;                 /* path for this descent */
+       int fts_rfd;                    /* fd for root */
+       int fts_pathlen;                /* sizeof(path) */
+       int fts_nitems;                 /* elements in the sort array */
+       int (*fts_compar) (const void *, const void *); /* compare fn */
+
+#define        FTS_COMFOLLOW   0x0001          /* follow command line symlinks */
+#define        FTS_LOGICAL     0x0002          /* logical walk */
+#define        FTS_NOCHDIR     0x0004          /* don't change directories */
+#define        FTS_NOSTAT      0x0008          /* don't get stat info */
+#define        FTS_PHYSICAL    0x0010          /* physical walk */
+#define        FTS_SEEDOT      0x0020          /* return dot and dot-dot */
+#define        FTS_XDEV        0x0040          /* don't cross devices */
+#define FTS_WHITEOUT   0x0080          /* return whiteout information */
+#define        FTS_OPTIONMASK  0x00ff          /* valid user option mask */
+
+#define        FTS_NAMEONLY    0x0100          /* (private) child names only */
+#define        FTS_STOP        0x0200          /* (private) unrecoverable error */
+       int fts_options;                /* fts_open options, global flags */
+} FTS;
+
+#ifdef __USE_LARGEFILE64
+typedef struct {
+       struct _ftsent64 *fts_cur;      /* current node */
+       struct _ftsent64 *fts_child;    /* linked list of children */
+       struct _ftsent64 **fts_array;   /* sort array */
+       dev_t fts_dev;                  /* starting device # */
+       char *fts_path;                 /* path for this descent */
+       int fts_rfd;                    /* fd for root */
+       int fts_pathlen;                /* sizeof(path) */
+       int fts_nitems;                 /* elements in the sort array */
+       int (*fts_compar) (const void *, const void *); /* compare fn */
+       int fts_options;                /* fts_open options, global flags */
+} FTS64;
+#endif
+
+typedef struct _ftsent {
+       struct _ftsent *fts_cycle;      /* cycle node */
+       struct _ftsent *fts_parent;     /* parent directory */
+       struct _ftsent *fts_link;       /* next file in directory */
+       long fts_number;                /* local numeric value */
+       void *fts_pointer;              /* local address value */
+       char *fts_accpath;              /* access path */
+       char *fts_path;                 /* root path */
+       int fts_errno;                  /* errno for this node */
+       int fts_symfd;                  /* fd for symlink */
+       u_short fts_pathlen;            /* strlen(fts_path) */
+       u_short fts_namelen;            /* strlen(fts_name) */
+
+       ino_t fts_ino;                  /* inode */
+       dev_t fts_dev;                  /* device */
+       nlink_t fts_nlink;              /* link count */
+
+#define        FTS_ROOTPARENTLEVEL     -1
+#define        FTS_ROOTLEVEL            0
+       short fts_level;                /* depth (-1 to N) */
+
+#define        FTS_D            1              /* preorder directory */
+#define        FTS_DC           2              /* directory that causes cycles */
+#define        FTS_DEFAULT      3              /* none of the above */
+#define        FTS_DNR          4              /* unreadable directory */
+#define        FTS_DOT          5              /* dot or dot-dot */
+#define        FTS_DP           6              /* postorder directory */
+#define        FTS_ERR          7              /* error; errno is set */
+#define        FTS_F            8              /* regular file */
+#define        FTS_INIT         9              /* initialized only */
+#define        FTS_NS          10              /* stat(2) failed */
+#define        FTS_NSOK        11              /* no stat(2) requested */
+#define        FTS_SL          12              /* symbolic link */
+#define        FTS_SLNONE      13              /* symbolic link without target */
+#define FTS_W          14              /* whiteout object */
+       u_short fts_info;               /* user flags for FTSENT structure */
+
+#define        FTS_DONTCHDIR    0x01           /* don't chdir .. to the parent */
+#define        FTS_SYMFOLLOW    0x02           /* followed a symlink to get here */
+       u_short fts_flags;              /* private flags for FTSENT structure */
+
+#define        FTS_AGAIN        1              /* read node again */
+#define        FTS_FOLLOW       2              /* follow symbolic link */
+#define        FTS_NOINSTR      3              /* no instructions */
+#define        FTS_SKIP         4              /* discard node */
+       u_short fts_instr;              /* fts_set() instructions */
+
+       struct stat *fts_statp;         /* stat(2) information */
+       char fts_name[1];               /* file name */
+} FTSENT;
+
+#ifdef __USE_LARGEFILE64
+typedef struct _ftsent64 {
+       struct _ftsent64 *fts_cycle;    /* cycle node */
+       struct _ftsent64 *fts_parent;   /* parent directory */
+       struct _ftsent64 *fts_link;     /* next file in directory */
+       long fts_number;                /* local numeric value */
+       void *fts_pointer;              /* local address value */
+       char *fts_accpath;              /* access path */
+       char *fts_path;                 /* root path */
+       int fts_errno;                  /* errno for this node */
+       int fts_symfd;                  /* fd for symlink */
+       u_short fts_pathlen;            /* strlen(fts_path) */
+       u_short fts_namelen;            /* strlen(fts_name) */
+
+       ino64_t fts_ino;                /* inode */
+       dev_t fts_dev;                  /* device */
+       nlink_t fts_nlink;              /* link count */
+
+       short fts_level;                /* depth (-1 to N) */
+
+       u_short fts_info;               /* user flags for FTSENT structure */
+
+       u_short fts_flags;              /* private flags for FTSENT structure */
+
+       u_short fts_instr;              /* fts_set() instructions */
+
+       struct stat64 *fts_statp;       /* stat(2) information */
+       char fts_name[1];               /* file name */
+} FTSENT64;
+#endif
+
+__BEGIN_DECLS
+#ifndef __USE_FILE_OFFSET64
+FTSENT *fts_children (FTS *, int);
+int     fts_close (FTS *);
+FTS    *fts_open (char * const *, int,
+                  int (*)(const FTSENT **, const FTSENT **));
+FTSENT *fts_read (FTS *);
+int     fts_set (FTS *, FTSENT *, int) __THROW;
+#else
+# ifdef __REDIRECT
+FTSENT *__REDIRECT (fts_children, (FTS *, int), fts64_children);
+int     __REDIRECT (fts_close, (FTS *), fts64_close);
+FTS    *__REDIRECT (fts_open, (char * const *, int,
+                               int (*)(const FTSENT **, const FTSENT **)),
+                    fts64_open);
+FTSENT *__REDIRECT (fts_read, (FTS *), fts64_read);
+int     __REDIRECT (fts_set, (FTS *, FTSENT *, int), fts64_set) __THROW;
+# else
+#  define fts_children fts64_children
+#  define fts_close fts64_close
+#  define fts_open fts64_open
+#  define fts_read fts64_read
+#  define fts_set fts64_set
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+FTSENT64 *fts64_children (FTS64 *, int);
+int      fts64_close (FTS64 *);
+FTS64   *fts64_open (char * const *, int,
+                     int (*)(const FTSENT64 **, const FTSENT64 **));
+FTSENT64 *fts64_read (FTS64 *);
+int     fts64_set (FTS64 *, FTSENT64 *, int) __THROW;
+#endif
+__END_DECLS
+
+#endif /* fts.h */
diff --git a/lib/libdss-include/ftw.h b/lib/libdss-include/ftw.h
new file mode 100644 (file)
index 0000000..fd4bc36
--- /dev/null
@@ -0,0 +1,177 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     X/Open Portability Guide 4.2: ftw.h
+ */
+
+#ifndef _FTW_H
+#define        _FTW_H  1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+
+__BEGIN_DECLS
+
+/* Values for the FLAG argument to the user function passed to `ftw'
+   and 'nftw'.  */
+enum
+{
+  FTW_F,               /* Regular file.  */
+#define FTW_F   FTW_F
+  FTW_D,               /* Directory.  */
+#define FTW_D   FTW_D
+  FTW_DNR,             /* Unreadable directory.  */
+#define FTW_DNR         FTW_DNR
+  FTW_NS,              /* Unstatable file.  */
+#define FTW_NS  FTW_NS
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+
+  FTW_SL,              /* Symbolic link.  */
+# define FTW_SL         FTW_SL
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* These flags are only passed from the `nftw' function.  */
+  FTW_DP,              /* Directory, all subdirs have been visited. */
+# define FTW_DP         FTW_DP
+  FTW_SLN              /* Symbolic link naming non-existing file.  */
+# define FTW_SLN FTW_SLN
+
+#endif /* extended X/Open */
+};
+
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Flags for fourth argument of `nftw'.  */
+enum
+{
+  FTW_PHYS = 1,                /* Perform physical walk, ignore symlinks.  */
+# define FTW_PHYS      FTW_PHYS
+  FTW_MOUNT = 2,       /* Report only files on same file system as the
+                          argument.  */
+# define FTW_MOUNT     FTW_MOUNT
+  FTW_CHDIR = 4,       /* Change to current directory while processing it.  */
+# define FTW_CHDIR     FTW_CHDIR
+  FTW_DEPTH = 8                /* Report files in directory before directory itself.*/
+# define FTW_DEPTH     FTW_DEPTH
+# ifdef __USE_GNU
+  ,
+  FTW_ACTIONRETVAL = 16        /* Assume callback to return FTW_* values instead of
+                          zero to continue and non-zero to terminate.  */
+#  define FTW_ACTIONRETVAL FTW_ACTIONRETVAL
+# endif
+};
+
+#ifdef __USE_GNU
+/* Return values from callback functions.  */
+enum
+{
+  FTW_CONTINUE = 0,    /* Continue with next sibling or for FTW_D with the
+                          first child.  */
+# define FTW_CONTINUE  FTW_CONTINUE
+  FTW_STOP = 1,                /* Return from `ftw' or `nftw' with FTW_STOP as return
+                          value.  */
+# define FTW_STOP      FTW_STOP
+  FTW_SKIP_SUBTREE = 2,        /* Only meaningful for FTW_D: Don't walk through the
+                          subtree, instead just continue with its next
+                          sibling. */
+# define FTW_SKIP_SUBTREE FTW_SKIP_SUBTREE
+  FTW_SKIP_SIBLINGS = 3,/* Continue with FTW_DP callback for current directory
+                           (if FTW_DEPTH) and then its siblings.  */
+# define FTW_SKIP_SIBLINGS FTW_SKIP_SIBLINGS
+};
+#endif
+
+/* Structure used for fourth argument to callback function for `nftw'.  */
+struct FTW
+  {
+    int base;
+    int level;
+  };
+#endif /* extended X/Open */
+
+
+/* Convenient types for callback functions.  */
+typedef int (*__ftw_func_t) (const char *__filename,
+                            const struct stat *__status, int __flag);
+#ifdef __USE_LARGEFILE64
+typedef int (*__ftw64_func_t) (const char *__filename,
+                              const struct stat64 *__status, int __flag);
+#endif
+#ifdef __USE_XOPEN_EXTENDED
+typedef int (*__nftw_func_t) (const char *__filename,
+                             const struct stat *__status, int __flag,
+                             struct FTW *__info);
+# ifdef __USE_LARGEFILE64
+typedef int (*__nftw64_func_t) (const char *__filename,
+                               const struct stat64 *__status,
+                               int __flag, struct FTW *__info);
+# endif
+#endif
+
+/* Call a function on every element in a directory tree.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
+     __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
+                            int __descriptors), ftw64) __nonnull ((1, 2));
+# else
+#  define ftw ftw64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int ftw64 (const char *__dir, __ftw64_func_t __func,
+                 int __descriptors) __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Call a function on every element in a directory tree.  FLAG allows
+   to specify the behaviour more detailed.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
+                int __flag) __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
+                             int __descriptors, int __flag), nftw64)
+     __nonnull ((1, 2));
+#  else
+#   define nftw nftw64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int nftw64 (const char *__dir, __nftw64_func_t __func,
+                  int __descriptors, int __flag) __nonnull ((1, 2));
+# endif
+#endif
+
+__END_DECLS
+
+#endif /* ftw.h */
diff --git a/lib/libdss-include/gconv.h b/lib/libdss-include/gconv.h
new file mode 100644 (file)
index 0000000..8d8ce58
--- /dev/null
@@ -0,0 +1,154 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This header provides no interface for a user to the internals of
+   the gconv implementation in the libc.  Therefore there is no use
+   for these definitions beside for writing additional gconv modules.  */
+
+#ifndef _GCONV_H
+#define _GCONV_H       1
+
+#include <features.h>
+#define __need_mbstate_t
+#define __need_wint_t
+#include <wchar.h>
+#define __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+
+/* ISO 10646 value used to signal invalid value.  */
+#define __UNKNOWN_10646_CHAR   ((wchar_t) 0xfffd)
+
+/* Error codes for gconv functions.  */
+enum
+{
+  __GCONV_OK = 0,
+  __GCONV_NOCONV,
+  __GCONV_NODB,
+  __GCONV_NOMEM,
+
+  __GCONV_EMPTY_INPUT,
+  __GCONV_FULL_OUTPUT,
+  __GCONV_ILLEGAL_INPUT,
+  __GCONV_INCOMPLETE_INPUT,
+
+  __GCONV_ILLEGAL_DESCRIPTOR,
+  __GCONV_INTERNAL_ERROR
+};
+
+
+/* Flags the `__gconv_open' function can set.  */
+enum
+{
+  __GCONV_IS_LAST = 0x0001,
+  __GCONV_IGNORE_ERRORS = 0x0002,
+  __GCONV_SWAP = 0x0004,
+  __GCONV_TRANSLIT = 0x0008
+};
+
+
+/* Forward declarations.  */
+struct __gconv_step;
+struct __gconv_step_data;
+struct __gconv_loaded_object;
+
+
+/* Type of a conversion function.  */
+typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
+                           const unsigned char **, const unsigned char *,
+                           unsigned char **, size_t *, int, int);
+
+/* Type of a specialized conversion function for a single byte to INTERNAL.  */
+typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
+
+/* Constructor and destructor for local data for conversion step.  */
+typedef int (*__gconv_init_fct) (struct __gconv_step *);
+typedef void (*__gconv_end_fct) (struct __gconv_step *);
+
+
+/* Description of a conversion step.  */
+struct __gconv_step
+{
+  struct __gconv_loaded_object *__shlib_handle;
+  const char *__modname;
+
+  int __counter;
+
+  char *__from_name;
+  char *__to_name;
+
+  __gconv_fct __fct;
+  __gconv_btowc_fct __btowc_fct;
+  __gconv_init_fct __init_fct;
+  __gconv_end_fct __end_fct;
+
+  /* Information about the number of bytes needed or produced in this
+     step.  This helps optimizing the buffer sizes.  */
+  int __min_needed_from;
+  int __max_needed_from;
+  int __min_needed_to;
+  int __max_needed_to;
+
+  /* Flag whether this is a stateful encoding or not.  */
+  int __stateful;
+
+  void *__data;                /* Pointer to step-local data.  */
+};
+
+/* Additional data for steps in use of conversion descriptor.  This is
+   allocated by the `init' function.  */
+struct __gconv_step_data
+{
+  unsigned char *__outbuf;    /* Output buffer for this step.  */
+  unsigned char *__outbufend; /* Address of first byte after the output
+                                buffer.  */
+
+  /* Is this the last module in the chain.  */
+  int __flags;
+
+  /* Counter for number of invocations of the module function for this
+     descriptor.  */
+  int __invocation_counter;
+
+  /* Flag whether this is an internal use of the module (in the mb*towc*
+     and wc*tomb* functions) or regular with iconv(3).  */
+  int __internal_use;
+
+  __mbstate_t *__statep;
+  __mbstate_t __state; /* This element must not be used directly by
+                          any module; always use STATEP!  */
+};
+
+
+/* Combine conversion step description with data.  */
+typedef struct __gconv_info
+{
+  size_t __nsteps;
+  struct __gconv_step *__steps;
+  __extension__ struct __gconv_step_data __data __flexarr;
+} *__gconv_t;
+
+/* Transliteration using the locale's data.  */
+extern int __gconv_transliterate (struct __gconv_step *step,
+                                 struct __gconv_step_data *step_data,
+                                 const unsigned char *inbufstart,
+                                 const unsigned char **inbufp,
+                                 const unsigned char *inbufend,
+                                 unsigned char **outbufstart,
+                                 size_t *irreversible);
+
+#endif /* gconv.h */
diff --git a/lib/libdss-include/getopt.h b/lib/libdss-include/getopt.h
new file mode 100644 (file)
index 0000000..fab340a
--- /dev/null
@@ -0,0 +1,191 @@
+/* Declarations for getopt.
+   Copyright (C) 1989-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW      throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument         (or 0) if the option does not take an argument,
+   required_argument   (or 1) if the option requires an argument,
+   optional_argument   (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+# define no_argument           0
+# define required_argument     1
+# define optional_argument     2
+#endif /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, `optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in `optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU `getopt'.
+
+   The argument `--' causes premature termination of argument
+   scanning, explicitly telling `getopt' that there are no more
+   options.
+
+   If OPTS begins with `--', then non-option arguments are treated as
+   arguments to the option '\0'.  This behavior is specific to the GNU
+   `getopt'.  */
+
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in stdlib.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW;
+
+# if defined __need_getopt && defined __USE_POSIX2 \
+  && !defined __USE_POSIX_IMPLICITLY && !defined __USE_GNU
+/* The GNU getopt has more functionality than the standard version.  The
+   additional functionality can be disable at runtime.  This redirection
+   helps to also do this at runtime.  */
+#  ifdef __REDIRECT
+  extern int __REDIRECT_NTH (getopt, (int ___argc, char *const *___argv,
+                                     const char *__shortopts),
+                            __posix_getopt);
+#  else
+extern int __posix_getopt (int ___argc, char *const *___argv,
+                          const char *__shortopts) __THROW;
+#   define getopt __posix_getopt
+#  endif
+# endif
+#else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+#endif /* __GNU_LIBRARY__ */
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *const *___argv,
+                       const char *__shortopts,
+                       const struct option *__longopts, int *__longind)
+       __THROW;
+extern int getopt_long_only (int ___argc, char *const *___argv,
+                            const char *__shortopts,
+                            const struct option *__longopts, int *__longind)
+       __THROW;
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* getopt.h */
diff --git a/lib/libdss-include/glob.h b/lib/libdss-include/glob.h
new file mode 100644 (file)
index 0000000..e4548f6
--- /dev/null
@@ -0,0 +1,181 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _GLOB_H
+#define        _GLOB_H 1
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+/* We need `size_t' for the following definitions.  */
+#ifndef __size_t
+typedef __SIZE_TYPE__ __size_t;
+# if defined __USE_XOPEN || __USE_XOPEN2K8
+typedef __SIZE_TYPE__ size_t;
+# endif
+#else
+/* The GNU CC stddef.h version defines __size_t as empty.  We need a real
+   definition.  */
+# undef __size_t
+# define __size_t size_t
+#endif
+
+/* Bits set in the FLAGS argument to `glob'.  */
+#define        GLOB_ERR        (1 << 0)/* Return on read errors.  */
+#define        GLOB_MARK       (1 << 1)/* Append a slash to each name.  */
+#define        GLOB_NOSORT     (1 << 2)/* Don't sort the names.  */
+#define        GLOB_DOOFFS     (1 << 3)/* Insert PGLOB->gl_offs NULLs.  */
+#define        GLOB_NOCHECK    (1 << 4)/* If nothing matches, return the pattern.  */
+#define        GLOB_APPEND     (1 << 5)/* Append to results of a previous call.  */
+#define        GLOB_NOESCAPE   (1 << 6)/* Backslashes don't quote metacharacters.  */
+#define        GLOB_PERIOD     (1 << 7)/* Leading `.' can be matched by metachars.  */
+
+#if !defined __USE_POSIX2 || defined __USE_MISC
+# define GLOB_MAGCHAR   (1 << 8)/* Set in gl_flags if any metachars seen.  */
+# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */
+# define GLOB_BRACE     (1 << 10)/* Expand "{a,b}" to "a" "b".  */
+# define GLOB_NOMAGIC   (1 << 11)/* If no magic chars, return the pattern.  */
+# define GLOB_TILDE     (1 << 12)/* Expand ~user and ~ to home directories. */
+# define GLOB_ONLYDIR   (1 << 13)/* Match only directories.  */
+# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
+                                     if the user name is not available.  */
+# define __GLOB_FLAGS  (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
+                        GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
+                        GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \
+                        GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
+#else
+# define __GLOB_FLAGS  (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
+                        GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
+                        GLOB_PERIOD)
+#endif
+
+/* Error returns from `glob'.  */
+#define        GLOB_NOSPACE    1       /* Ran out of memory.  */
+#define        GLOB_ABORTED    2       /* Read error.  */
+#define        GLOB_NOMATCH    3       /* No matches found.  */
+#define GLOB_NOSYS     4       /* Not implemented.  */
+#ifdef __USE_GNU
+/* Previous versions of this file defined GLOB_ABEND instead of
+   GLOB_ABORTED.  Provide a compatibility definition here.  */
+# define GLOB_ABEND GLOB_ABORTED
+#endif
+
+/* Structure describing a globbing run.  */
+#ifdef __USE_GNU
+struct stat;
+#endif
+typedef struct
+  {
+    __size_t gl_pathc;         /* Count of paths matched by the pattern.  */
+    char **gl_pathv;           /* List of matched pathnames.  */
+    __size_t gl_offs;          /* Slots to reserve in `gl_pathv'.  */
+    int gl_flags;              /* Set to FLAGS, maybe | GLOB_MAGCHAR.  */
+
+    /* If the GLOB_ALTDIRFUNC flag is set, the following functions
+       are used instead of the normal file access functions.  */
+    void (*gl_closedir) (void *);
+#ifdef __USE_GNU
+    struct dirent *(*gl_readdir) (void *);
+#else
+    void *(*gl_readdir) (void *);
+#endif
+    void *(*gl_opendir) (const char *);
+#ifdef __USE_GNU
+    int (*gl_lstat) (const char *__restrict, struct stat *__restrict);
+    int (*gl_stat) (const char *__restrict, struct stat *__restrict);
+#else
+    int (*gl_lstat) (const char *__restrict, void *__restrict);
+    int (*gl_stat) (const char *__restrict, void *__restrict);
+#endif
+  } glob_t;
+
+#ifdef __USE_LARGEFILE64
+# ifdef __USE_GNU
+struct stat64;
+# endif
+typedef struct
+  {
+    __size_t gl_pathc;
+    char **gl_pathv;
+    __size_t gl_offs;
+    int gl_flags;
+
+    /* If the GLOB_ALTDIRFUNC flag is set, the following functions
+       are used instead of the normal file access functions.  */
+    void (*gl_closedir) (void *);
+# ifdef __USE_GNU
+    struct dirent64 *(*gl_readdir) (void *);
+# else
+    void *(*gl_readdir) (void *);
+# endif
+    void *(*gl_opendir) (const char *);
+# ifdef __USE_GNU
+    int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict);
+    int (*gl_stat) (const char *__restrict, struct stat64 *__restrict);
+# else
+    int (*gl_lstat) (const char *__restrict, void *__restrict);
+    int (*gl_stat) (const char *__restrict, void *__restrict);
+# endif
+  } glob64_t;
+#endif
+
+/* Do glob searching for PATTERN, placing results in PGLOB.
+   The bits defined above may be set in FLAGS.
+   If a directory cannot be opened or read and ERRFUNC is not nil,
+   it is called with the pathname that caused the error, and the
+   `errno' value from the failing call; if it returns non-zero
+   `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
+   If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
+   Otherwise, `glob' returns zero.  */
+#if !defined __USE_FILE_OFFSET64
+extern int glob (const char *__restrict __pattern, int __flags,
+                int (*__errfunc) (const char *, int),
+                glob_t *__restrict __pglob) __THROW;
+
+/* Free storage allocated in PGLOB by a previous `glob' call.  */
+extern void globfree (glob_t *__pglob) __THROW;
+#else
+extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern,
+                                 int __flags,
+                                 int (*__errfunc) (const char *, int),
+                                 glob_t *__restrict __pglob), glob64);
+
+extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int glob64 (const char *__restrict __pattern, int __flags,
+                  int (*__errfunc) (const char *, int),
+                  glob64_t *__restrict __pglob) __THROW;
+
+extern void globfree64 (glob64_t *__pglob) __THROW;
+#endif
+
+
+#ifdef __USE_GNU
+/* Return nonzero if PATTERN contains any metacharacters.
+   Metacharacters can be quoted with backslashes if QUOTE is nonzero.
+
+   This function is not part of the interface specified by POSIX.2
+   but several programs want to use it.  */
+extern int glob_pattern_p (const char *__pattern, int __quote) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* glob.h  */
diff --git a/lib/libdss-include/gnu-versions.h b/lib/libdss-include/gnu-versions.h
new file mode 100644 (file)
index 0000000..141a711
--- /dev/null
@@ -0,0 +1,52 @@
+/* Header with interface version macros for library pieces copied elsewhere.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GNU_VERSIONS_H
+#define        _GNU_VERSIONS_H 1
+
+/* This file exists to define these few macros.  Each specifies a version
+   number associated with the library interface of a piece of the C library
+   which is also distributed with other GNU packages.  These pieces are
+   both part of the GNU C library and also distributed with other GNU
+   packages so those packages may use their facilities on systems lacking
+   the GNU C library.  The source files for each piece surround all their
+   code with `#ifndef ELIDE_CODE' after defining it with this:
+
+   #define OBSTACK_INTERFACE_VERSION 1
+   #if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+   #include <gnu-versions.h>
+   #if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+   #define ELIDE_CODE
+   #endif
+   #endif
+
+   This allows those one to avoid compiling those files when part of a GNU
+   package not libc, on a system using a GNU C library that supports the
+   same interface.
+
+   Please preserve the format of the comments after each macro.  And
+   remember, if any of these versions change, the libc.so major version
+   number must change too (so avoid it)!  */
+
+#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
+#define _GNU_REGEX_INTERFACE_VERSION   1 /* vs posix/regex.c */
+#define _GNU_GLOB_INTERFACE_VERSION    1 /* vs posix/glob.c */
+#define _GNU_GETOPT_INTERFACE_VERSION  2 /* vs posix/getopt.c and
+                                            posix/getopt1.c */
+
+#endif /* gnu-versions.h */
diff --git a/lib/libdss-include/gnu/lib-names-lp64.h b/lib/libdss-include/gnu/lib-names-lp64.h
new file mode 100644 (file)
index 0000000..ed4c01f
--- /dev/null
@@ -0,0 +1,31 @@
+/* This file is automatically generated.  */
+#ifndef __GNU_LIB_NAMES_H
+# error "Never use <gnu/lib-names-lp64.h> directly; include <gnu/lib-names.h> instead."
+#endif
+
+#define LD_LINUX_AARCH64_SO             "ld-linux-aarch64.so.1"
+#define LD_SO                           "ld-linux-aarch64.so.1"
+#define LIBANL_SO                       "libanl.so.1"
+#define LIBBROKENLOCALE_SO              "libBrokenLocale.so.1"
+#define LIBCIDN_SO                      "libcidn.so.1"
+#define LIBCRYPT_SO                     "libcrypt.so.1"
+#define LIBC_SO                         "libc.so.6"
+#define LIBDL_SO                        "libdl.so.2"
+#define LIBGCC_S_SO                     "libgcc_s.so.1"
+#define LIBMVEC_SO                      "libmvec.so.1"
+#define LIBM_SO                         "libm.so.6"
+#define LIBNSL_SO                       "libnsl.so.1"
+#define LIBNSS_COMPAT_SO                "libnss_compat.so.2"
+#define LIBNSS_DB_SO                    "libnss_db.so.2"
+#define LIBNSS_DNS_SO                   "libnss_dns.so.2"
+#define LIBNSS_FILES_SO                 "libnss_files.so.2"
+#define LIBNSS_HESIOD_SO                "libnss_hesiod.so.2"
+#define LIBNSS_LDAP_SO                  "libnss_ldap.so.2"
+#define LIBNSS_NISPLUS_SO               "libnss_nisplus.so.2"
+#define LIBNSS_NIS_SO                   "libnss_nis.so.2"
+#define LIBNSS_TEST1_SO                 "libnss_test1.so.2"
+#define LIBPTHREAD_SO                   "libpthread.so.0"
+#define LIBRESOLV_SO                    "libresolv.so.2"
+#define LIBRT_SO                        "librt.so.1"
+#define LIBTHREAD_DB_SO                 "libthread_db.so.1"
+#define LIBUTIL_SO                      "libutil.so.1"
diff --git a/lib/libdss-include/gnu/lib-names.h b/lib/libdss-include/gnu/lib-names.h
new file mode 100644 (file)
index 0000000..67885f1
--- /dev/null
@@ -0,0 +1,16 @@
+/* This file is automatically generated.
+   It defines macros to allow user program to find the shared
+   library files which come as part of GNU libc.  */
+#ifndef __GNU_LIB_NAMES_H
+#define __GNU_LIB_NAMES_H      1
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+# include <gnu/lib-names-lp64.h>
+#endif
+#if defined __AARCH64EB__
+# include <gnu/lib-names-lp64_be.h>
+#endif
+
+#endif /* gnu/lib-names.h */
diff --git a/lib/libdss-include/gnu/libc-version.h b/lib/libdss-include/gnu/libc-version.h
new file mode 100644 (file)
index 0000000..780612e
--- /dev/null
@@ -0,0 +1,34 @@
+/* Interface to GNU libc specific functions for version information.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GNU_LIBC_VERSION_H
+#define        _GNU_LIBC_VERSION_H     1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return string describing release status of currently running GNU libc.  */
+extern const char *gnu_get_libc_release (void) __THROW;
+
+/* Return string describing version of currently running GNU libc.  */
+extern const char *gnu_get_libc_version (void) __THROW;
+
+__END_DECLS
+
+#endif /* gnu/libc-version.h */
diff --git a/lib/libdss-include/gnu/stubs-lp64.h b/lib/libdss-include/gnu/stubs-lp64.h
new file mode 100644 (file)
index 0000000..d2816d7
--- /dev/null
@@ -0,0 +1,32 @@
+/* This file is automatically generated.
+   It defines a symbol `__stub_FUNCTION' for each function
+   in the C library which is a stub, meaning it will fail
+   every time called, usually setting errno to ENOSYS.  */
+
+#ifdef _LIBC
+# error Applications may not define the macro _LIBC
+#endif
+
+#define __stub___compat_bdflush
+#define __stub___compat_create_module
+#define __stub___compat_get_kernel_syms
+#define __stub___compat_query_module
+#define __stub___compat_uselib
+#define __stub___kernel_rem_pio2l
+#define __stub_chflags
+#define __stub_fattach
+#define __stub_fchflags
+#define __stub_fdetach
+#define __stub_getmsg
+#define __stub_getpmsg
+#define __stub_gtty
+#define __stub_lchmod
+#define __stub_putmsg
+#define __stub_putpmsg
+#define __stub_revoke
+#define __stub_setlogin
+#define __stub_sigreturn
+#define __stub_sstk
+#define __stub_stty
+#define __stub_sysctl
+#define __stub_ustat
diff --git a/lib/libdss-include/gnu/stubs.h b/lib/libdss-include/gnu/stubs.h
new file mode 100644 (file)
index 0000000..02e5f41
--- /dev/null
@@ -0,0 +1,12 @@
+/* This file is automatically generated.
+   This file selects the right generated file of `__stub_FUNCTION' macros
+   based on the architecture being compiled for.  */
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+# include <gnu/stubs-lp64.h>
+#endif
+#if defined __AARCH64EB__
+# include <gnu/stubs-lp64_be.h>
+#endif
diff --git a/lib/libdss-include/grp.h b/lib/libdss-include/grp.h
new file mode 100644 (file)
index 0000000..e904ee2
--- /dev/null
@@ -0,0 +1,204 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 9.2.1 Group Database Access     <grp.h>
+ */
+
+#ifndef        _GRP_H
+#define        _GRP_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+
+/* For the Single Unix specification we must define this type here.  */
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K) && !defined __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+/* The group structure.         */
+struct group
+  {
+    char *gr_name;             /* Group name.  */
+    char *gr_passwd;           /* Password.    */
+    __gid_t gr_gid;            /* Group ID.    */
+    char **gr_mem;             /* Member list. */
+  };
+
+
+#ifdef __USE_MISC
+# define __need_FILE
+# include <stdio.h>
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Rewind the group-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setgrent (void);
+
+/* Close the group-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endgrent (void);
+
+/* Read an entry from the group-file stream, opening it if necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrent (void);
+#endif
+
+#ifdef __USE_MISC
+/* Read a group entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct group *fgetgrent (FILE *__stream);
+#endif
+
+#ifdef __USE_GNU
+/* Write the given entry onto the given stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putgrent (const struct group *__restrict __p,
+                    FILE *__restrict __f);
+#endif
+
+/* Search for an entry with a matching group ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrgid (__gid_t __gid);
+
+/* Search for an entry with a matching group name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrnam (const char *__name);
+
+#ifdef __USE_POSIX
+
+# ifdef __USE_MISC
+/* Reasonable value for the buffer sized used in the reentrant
+   functions below.  But better use `sysconf'.  */
+#  define NSS_BUFLEN_GROUP     1024
+# endif
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+
+# ifdef __USE_GNU
+extern int getgrent_r (struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+# endif
+
+/* Search for an entry with a matching group ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+
+/* Search for an entry with a matching group name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getgrnam_r (const char *__restrict __name,
+                      struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+
+# ifdef        __USE_MISC
+/* Read a group entry from STREAM.  This function is not standardized
+   an probably never will.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetgrent_r (FILE *__restrict __stream,
+                       struct group *__restrict __resultbuf,
+                       char *__restrict __buffer, size_t __buflen,
+                       struct group **__restrict __result);
+# endif
+
+#endif /* POSIX or reentrant */
+
+
+#ifdef __USE_MISC
+
+# define __need_size_t
+# include <stddef.h>
+
+/* Set the group set for the current user to GROUPS (N of them).  */
+extern int setgroups (size_t __n, const __gid_t *__groups) __THROW;
+
+/* Store at most *NGROUPS members of the group set for USER into
+   *GROUPS.  Also include GROUP.  The actual number of groups found is
+   returned in *NGROUPS.  Return -1 if the if *NGROUPS is too small.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getgrouplist (const char *__user, __gid_t __group,
+                        __gid_t *__groups, int *__ngroups);
+
+/* Initialize the group set for the current user
+   by reading the group database and using all groups
+   of which USER is a member.  Also include GROUP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int initgroups (const char *__user, __gid_t __group);
+
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* grp.h  */
diff --git a/lib/libdss-include/gshadow.h b/lib/libdss-include/gshadow.h
new file mode 100644 (file)
index 0000000..2afd8bd
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Declaration of types and functions for shadow group suite.  */
+
+#ifndef _GSHADOW_H
+#define _GSHADOW_H     1
+
+#include <features.h>
+
+#include <paths.h>
+
+#define        __need_FILE
+#include <stdio.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Path to the user database files.  */
+#define        GSHADOW _PATH_GSHADOW
+
+
+__BEGIN_DECLS
+
+/* Structure of the group file.  */
+struct sgrp
+  {
+    char *sg_namp;             /* Group name.  */
+    char *sg_passwd;           /* Encrypted password.  */
+    char **sg_adm;             /* Group administrator list.  */
+    char **sg_mem;             /* Group member list.  */
+  };
+
+
+/* Open database for reading.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void setsgent (void);
+
+/* Close database.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endsgent (void);
+
+/* Get next entry from database, perhaps after opening the file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *getsgent (void);
+
+/* Get shadow entry matching NAME.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *getsgnam (const char *__name);
+
+/* Read shadow entry from STRING.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *sgetsgent (const char *__string);
+
+/* Read next shadow entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *fgetsgent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putsgent (const struct sgrp *__g, FILE *__stream);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of some of the functions above.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getsgent_r (struct sgrp *__result_buf, char *__buffer,
+                      size_t __buflen, struct sgrp **__result);
+
+extern int getsgnam_r (const char *__name, struct sgrp *__result_buf,
+                      char *__buffer, size_t __buflen,
+                      struct sgrp **__result);
+
+extern int sgetsgent_r (const char *__string, struct sgrp *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct sgrp **__result);
+
+extern int fgetsgent_r (FILE *__stream, struct sgrp *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct sgrp **__result);
+#endif /* misc */
+
+__END_DECLS
+
+#endif /* gshadow.h */
diff --git a/lib/libdss-include/iconv.h b/lib/libdss-include/iconv.h
new file mode 100644 (file)
index 0000000..0c95c98
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ICONV_H
+#define _ICONV_H       1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+
+__BEGIN_DECLS
+
+/* Identifier for conversion method from one codeset to another.  */
+typedef void *iconv_t;
+
+
+/* Allocate descriptor for code conversion from codeset FROMCODE to
+   codeset TOCODE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);
+
+/* Convert at most *INBYTESLEFT bytes from *INBUF according to the
+   code conversion algorithm specified by CD and place up to
+   *OUTBYTESLEFT bytes in buffer at *OUTBUF.  */
+extern size_t iconv (iconv_t __cd, char **__restrict __inbuf,
+                    size_t *__restrict __inbytesleft,
+                    char **__restrict __outbuf,
+                    size_t *__restrict __outbytesleft);
+
+/* Free resources allocated for descriptor CD for code conversion.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int iconv_close (iconv_t __cd);
+
+__END_DECLS
+
+#endif /* iconv.h */
diff --git a/lib/libdss-include/ieee754.h b/lib/libdss-include/ieee754.h
new file mode 100644 (file)
index 0000000..fb42140
--- /dev/null
@@ -0,0 +1,170 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IEEE754_H
+
+#define _IEEE754_H 1
+#include <features.h>
+
+#include <endian.h>
+
+__BEGIN_DECLS
+
+union ieee754_float
+  {
+    float f;
+
+    /* This is the IEEE 754 single-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:8;
+       unsigned int mantissa:23;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int mantissa:23;
+       unsigned int exponent:8;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:8;
+       unsigned int quiet_nan:1;
+       unsigned int mantissa:22;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int mantissa:22;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:8;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee_nan;
+  };
+
+#define IEEE754_FLOAT_BIAS     0x7f /* Added to exponent.  */
+
+
+union ieee754_double
+  {
+    double d;
+
+    /* This is the IEEE 754 double-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:11;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:20;
+       unsigned int mantissa1:32;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:20;
+       unsigned int exponent:11;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:11;
+       unsigned int quiet_nan:1;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:19;
+       unsigned int mantissa1:32;
+#else
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:19;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:11;
+       unsigned int negative:1;
+#endif
+      } ieee_nan;
+  };
+
+#define IEEE754_DOUBLE_BIAS    0x3ff /* Added to exponent.  */
+
+
+union ieee854_long_double
+  {
+    long double d;
+
+    /* This is the IEEE 854 quad-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:15;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:16;
+       unsigned int mantissa1:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa3:32;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa3:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:16;
+       unsigned int exponent:15;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:15;
+       unsigned int quiet_nan:1;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:15;
+       unsigned int mantissa1:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa3:32;
+#else
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa3:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:15;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:15;
+       unsigned int negative:1;
+#endif
+      } ieee_nan;
+  };
+
+#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent.  */
+
+__END_DECLS
+
+#endif /* ieee754.h */
diff --git a/lib/libdss-include/ifaddrs.h b/lib/libdss-include/ifaddrs.h
new file mode 100644 (file)
index 0000000..cd8d209
--- /dev/null
@@ -0,0 +1,73 @@
+/* ifaddrs.h -- declarations for getting network interface addresses
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IFADDRS_H
+#define _IFADDRS_H     1
+
+#include <features.h>
+#include <sys/socket.h>
+
+__BEGIN_DECLS
+
+/* The `getifaddrs' function generates a linked list of these structures.
+   Each element of the list describes one network interface.  */
+struct ifaddrs
+{
+  struct ifaddrs *ifa_next;    /* Pointer to the next structure.  */
+
+  char *ifa_name;              /* Name of this network interface.  */
+  unsigned int ifa_flags;      /* Flags as from SIOCGIFFLAGS ioctl.  */
+
+  struct sockaddr *ifa_addr;   /* Network address of this interface.  */
+  struct sockaddr *ifa_netmask; /* Netmask of this interface.  */
+  union
+  {
+    /* At most one of the following two is valid.  If the IFF_BROADCAST
+       bit is set in `ifa_flags', then `ifa_broadaddr' is valid.  If the
+       IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid.
+       It is never the case that both these bits are set at once.  */
+    struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */
+    struct sockaddr *ifu_dstaddr; /* Point-to-point destination address.  */
+  } ifa_ifu;
+  /* These very same macros are defined by <net/if.h> for `struct ifaddr'.
+     So if they are defined already, the existing definitions will be fine.  */
+# ifndef ifa_broadaddr
+#  define ifa_broadaddr        ifa_ifu.ifu_broadaddr
+# endif
+# ifndef ifa_dstaddr
+#  define ifa_dstaddr  ifa_ifu.ifu_dstaddr
+# endif
+
+  void *ifa_data;              /* Address-specific data (may be unused).  */
+};
+
+
+/* Create a linked list of `struct ifaddrs' structures, one for each
+   network interface on the host machine.  If successful, store the
+   list in *IFAP and return 0.  On errors, return -1 and set `errno'.
+
+   The storage returned in *IFAP is allocated dynamically and can
+   only be properly freed by passing it to `freeifaddrs'.  */
+extern int getifaddrs (struct ifaddrs **__ifap) __THROW;
+
+/* Reclaim the storage allocated by a previous `getifaddrs' call.  */
+extern void freeifaddrs (struct ifaddrs *__ifa)  __THROW;
+
+__END_DECLS
+
+#endif /* ifaddrs.h */
diff --git a/lib/libdss-include/include/_G_config.h b/lib/libdss-include/include/_G_config.h
new file mode 100644 (file)
index 0000000..abec245
--- /dev/null
@@ -0,0 +1,58 @@
+/* This file is needed by libio to define various configuration parameters.
+   These are always the same in the GNU C library.  */
+
+#ifndef _G_config_h
+#define _G_config_h 1
+
+/* Define types for libio in terms of the standard internal type names.  */
+
+#include <bits/types.h>
+#define __need_size_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wchar_t
+#endif
+#define __need_NULL
+#include <stddef.h>
+#define __need_mbstate_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wint_t
+#endif
+#include <wchar.h>
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# include <gconv.h>
+typedef union
+{
+  struct __gconv_info __cd;
+  struct
+  {
+    struct __gconv_info __cd;
+    struct __gconv_step_data __data;
+  } __combined;
+} _G_iconv_t;
+#endif
+
+
+/* These library features are always available in the GNU C library.  */
+#define _G_va_list __gnuc_va_list
+
+#define _G_HAVE_MMAP 1
+#define _G_HAVE_MREMAP 1
+
+#define _G_IO_IO_FILE_VERSION 0x20001
+
+/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+#define _G_BUFSIZ 8192
+
+#endif /* _G_config.h */
diff --git a/lib/libdss-include/include/a.out.h b/lib/libdss-include/include/a.out.h
new file mode 100644 (file)
index 0000000..e3f4bdd
--- /dev/null
@@ -0,0 +1,138 @@
+#ifndef __A_OUT_GNU_H__
+#define __A_OUT_GNU_H__
+
+#include <bits/a.out.h>
+
+#define __GNU_EXEC_MACROS__
+
+struct exec
+{
+  unsigned long a_info;        /* Use macros N_MAGIC, etc for access.  */
+  unsigned int a_text; /* Length of text, in bytes.  */
+  unsigned int a_data; /* Length of data, in bytes.  */
+  unsigned int a_bss;  /* Length of uninitialized data area for file, in bytes.  */
+  unsigned int a_syms; /* Length of symbol table data in file, in bytes.  */
+  unsigned int a_entry;        /* Start address.  */
+  unsigned int a_trsize;/* Length of relocation info for text, in bytes.  */
+  unsigned int a_drsize;/* Length of relocation info for data, in bytes.  */
+};
+
+enum machine_type
+{
+  M_OLDSUN2 = 0,
+  M_68010 = 1,
+  M_68020 = 2,
+  M_SPARC = 3,
+  M_386 = 100,
+  M_MIPS1 = 151,
+  M_MIPS2 = 152
+};
+
+#define N_MAGIC(exec)  ((exec).a_info & 0xffff)
+#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
+#define N_FLAGS(exec)  (((exec).a_info >> 24) & 0xff)
+#define N_SET_INFO(exec, magic, type, flags) \
+  ((exec).a_info = ((magic) & 0xffff)                                  \
+   | (((int)(type) & 0xff) << 16)                                      \
+   | (((flags) & 0xff) << 24))
+#define N_SET_MAGIC(exec, magic) \
+  ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff))
+#define N_SET_MACHTYPE(exec, machtype) \
+  ((exec).a_info =                                                     \
+   ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
+#define N_SET_FLAGS(exec, flags) \
+  ((exec).a_info =                                                     \
+   ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
+
+/* Code indicating object file or impure executable.  */
+#define OMAGIC 0407
+/* Code indicating pure executable.  */
+#define NMAGIC 0410
+/* Code indicating demand-paged executable.  */
+#define ZMAGIC 0413
+/* This indicates a demand-paged executable with the header in the text.
+   The first page is unmapped to help trap NULL pointer references.  */
+#define QMAGIC 0314
+/* Code indicating core file.  */
+#define CMAGIC 0421
+
+#define N_TRSIZE(a)    ((a).a_trsize)
+#define N_DRSIZE(a)    ((a).a_drsize)
+#define N_SYMSIZE(a)   ((a).a_syms)
+#define N_BADMAG(x) \
+  (N_MAGIC(x) != OMAGIC        && N_MAGIC(x) != NMAGIC                         \
+   && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC)
+#define _N_HDROFF(x)   (1024 - sizeof (struct exec))
+#define N_TXTOFF(x) \
+  (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) :      \
+   (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec)))
+#define N_DATOFF(x)    (N_TXTOFF(x) + (x).a_text)
+#define N_TRELOFF(x)   (N_DATOFF(x) + (x).a_data)
+#define N_DRELOFF(x)   (N_TRELOFF(x) + N_TRSIZE(x))
+#define N_SYMOFF(x)    (N_DRELOFF(x) + N_DRSIZE(x))
+#define N_STROFF(x)    (N_SYMOFF(x) + N_SYMSIZE(x))
+
+/* Address of text segment in memory after it is loaded.  */
+#define N_TXTADDR(x)   (N_MAGIC(x) == QMAGIC ? 4096 : 0)
+
+/* Address of data segment in memory after it is loaded.  */
+#define SEGMENT_SIZE   1024
+
+#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
+#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
+
+#define N_DATADDR(x) \
+  (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x))                              \
+   : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
+#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
+
+#if !defined (N_NLIST_DECLARED)
+struct nlist
+{
+  union
+    {
+      char *n_name;
+      struct nlist *n_next;
+      long n_strx;
+    } n_un;
+  unsigned char n_type;
+  char n_other;
+  short n_desc;
+  unsigned long n_value;
+};
+#endif /* no N_NLIST_DECLARED.  */
+
+#define N_UNDF 0
+#define N_ABS  2
+#define N_TEXT 4
+#define N_DATA 6
+#define N_BSS  8
+#define N_FN   15
+#define N_EXT  1
+#define N_TYPE 036
+#define N_STAB 0340
+#define N_INDR 0xa
+#define        N_SETA  0x14    /* Absolute set element symbol.  */
+#define        N_SETT  0x16    /* Text set element symbol.  */
+#define        N_SETD  0x18    /* Data set element symbol.  */
+#define        N_SETB  0x1A    /* Bss set element symbol.  */
+#define N_SETV 0x1C    /* Pointer to set vector in data area.  */
+
+#if !defined (N_RELOCATION_INFO_DECLARED)
+/* This structure describes a single relocation to be performed.
+   The text-relocation section of the file is a vector of these structures,
+   all of which apply to the text section.
+   Likewise, the data-relocation section applies to the data section.  */
+
+struct relocation_info
+{
+  int r_address;
+  unsigned int r_symbolnum:24;
+  unsigned int r_pcrel:1;
+  unsigned int r_length:2;
+  unsigned int r_extern:1;
+  unsigned int r_pad:4;
+};
+#endif /* no N_RELOCATION_INFO_DECLARED.  */
+
+#endif /* __A_OUT_GNU_H__ */
diff --git a/lib/libdss-include/include/aio.h b/lib/libdss-include/include/aio.h
new file mode 100644 (file)
index 0000000..8cb6a5e
--- /dev/null
@@ -0,0 +1,246 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
+ */
+
+#ifndef _AIO_H
+#define _AIO_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#define __need_sigevent_t
+#include <bits/siginfo.h>
+#define __need_timespec
+#include <time.h>
+
+__BEGIN_DECLS
+
+/* Asynchronous I/O control block.  */
+struct aiocb
+{
+  int aio_fildes;              /* File desriptor.  */
+  int aio_lio_opcode;          /* Operation to be performed.  */
+  int aio_reqprio;             /* Request priority offset.  */
+  volatile void *aio_buf;      /* Location of buffer.  */
+  size_t aio_nbytes;           /* Length of transfer.  */
+  struct sigevent aio_sigevent;        /* Signal number and value.  */
+
+  /* Internal members.  */
+  struct aiocb *__next_prio;
+  int __abs_prio;
+  int __policy;
+  int __error_code;
+  __ssize_t __return_value;
+
+#ifndef __USE_FILE_OFFSET64
+  __off_t aio_offset;          /* File offset.  */
+  char __pad[sizeof (__off64_t) - sizeof (__off_t)];
+#else
+  __off64_t aio_offset;                /* File offset.  */
+#endif
+  char __glibc_reserved[32];
+};
+
+/* The same for the 64bit offsets.  Please note that the members aio_fildes
+   to __return_value have to be the same in aiocb and aiocb64.  */
+#ifdef __USE_LARGEFILE64
+struct aiocb64
+{
+  int aio_fildes;              /* File desriptor.  */
+  int aio_lio_opcode;          /* Operation to be performed.  */
+  int aio_reqprio;             /* Request priority offset.  */
+  volatile void *aio_buf;      /* Location of buffer.  */
+  size_t aio_nbytes;           /* Length of transfer.  */
+  struct sigevent aio_sigevent;        /* Signal number and value.  */
+
+  /* Internal members.  */
+  struct aiocb *__next_prio;
+  int __abs_prio;
+  int __policy;
+  int __error_code;
+  __ssize_t __return_value;
+
+  __off64_t aio_offset;                /* File offset.  */
+  char __glibc_reserved[32];
+};
+#endif
+
+
+#ifdef __USE_GNU
+/* To customize the implementation one can use the following struct.
+   This implementation follows the one in Irix.  */
+struct aioinit
+  {
+    int aio_threads;           /* Maximal number of threads.  */
+    int aio_num;               /* Number of expected simultanious requests. */
+    int aio_locks;             /* Not used.  */
+    int aio_usedba;            /* Not used.  */
+    int aio_debug;             /* Not used.  */
+    int aio_numusers;          /* Not used.  */
+    int aio_idle_time;         /* Number of seconds before idle thread
+                                  terminates.  */
+    int aio_reserved;
+  };
+#endif
+
+
+/* Return values of cancelation function.  */
+enum
+{
+  AIO_CANCELED,
+#define AIO_CANCELED AIO_CANCELED
+  AIO_NOTCANCELED,
+#define AIO_NOTCANCELED AIO_NOTCANCELED
+  AIO_ALLDONE
+#define AIO_ALLDONE AIO_ALLDONE
+};
+
+
+/* Operation codes for `aio_lio_opcode'.  */
+enum
+{
+  LIO_READ,
+#define LIO_READ LIO_READ
+  LIO_WRITE,
+#define LIO_WRITE LIO_WRITE
+  LIO_NOP
+#define LIO_NOP LIO_NOP
+};
+
+
+/* Synchronization options for `lio_listio' function.  */
+enum
+{
+  LIO_WAIT,
+#define LIO_WAIT LIO_WAIT
+  LIO_NOWAIT
+#define LIO_NOWAIT LIO_NOWAIT
+};
+
+
+/* Allow user to specify optimization.  */
+#ifdef __USE_GNU
+extern void aio_init (const struct aioinit *__init) __THROW __nonnull ((1));
+#endif
+
+
+#ifndef __USE_FILE_OFFSET64
+/* Enqueue read request for given number of bytes and the given priority.  */
+extern int aio_read (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+/* Enqueue write request for given number of bytes and the given priority.  */
+extern int aio_write (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+
+/* Initiate list of I/O requests.  */
+extern int lio_listio (int __mode,
+                      struct aiocb *const __list[__restrict_arr],
+                      int __nent, struct sigevent *__restrict __sig)
+  __THROW __nonnull ((2));
+
+/* Retrieve error status associated with AIOCBP.  */
+extern int aio_error (const struct aiocb *__aiocbp) __THROW __nonnull ((1));
+/* Return status associated with AIOCBP.  */
+extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW __nonnull ((1));
+
+/* Try to cancel asynchronous I/O requests outstanding against file
+   descriptor FILDES.  */
+extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW;
+
+/* Suspend calling thread until at least one of the asynchronous I/O
+   operations referenced by LIST has completed.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int aio_suspend (const struct aiocb *const __list[], int __nent,
+                       const struct timespec *__restrict __timeout)
+  __nonnull ((1));
+
+/* Force all operations associated with file desriptor described by
+   `aio_fildes' member of AIOCBP.  */
+extern int aio_fsync (int __operation, struct aiocb *__aiocbp)
+  __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64)
+  __nonnull ((1));
+extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64)
+  __nonnull ((1));
+
+extern int __REDIRECT_NTH (lio_listio,
+                          (int __mode,
+                           struct aiocb *const __list[__restrict_arr],
+                           int __nent, struct sigevent *__restrict __sig),
+                          lio_listio64) __nonnull ((2));
+
+extern int __REDIRECT_NTH (aio_error, (const struct aiocb *__aiocbp),
+                          aio_error64) __nonnull ((1));
+extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
+                                aio_return64) __nonnull ((1));
+
+extern int __REDIRECT_NTH (aio_cancel,
+                          (int __fildes, struct aiocb *__aiocbp),
+                          aio_cancel64);
+
+extern int __REDIRECT_NTH (aio_suspend,
+                          (const struct aiocb *const __list[], int __nent,
+                           const struct timespec *__restrict __timeout),
+                          aio_suspend64) __nonnull ((1));
+
+extern int __REDIRECT_NTH (aio_fsync,
+                          (int __operation, struct aiocb *__aiocbp),
+                          aio_fsync64) __nonnull ((2));
+
+# else
+#  define aio_read aio_read64
+#  define aio_write aio_write64
+#  define lio_listio lio_listio64
+#  define aio_error aio_error64
+#  define aio_return aio_return64
+#  define aio_cancel aio_cancel64
+#  define aio_suspend aio_suspend64
+#  define aio_fsync aio_fsync64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
+extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1));
+
+extern int lio_listio64 (int __mode,
+                        struct aiocb64 *const __list[__restrict_arr],
+                        int __nent, struct sigevent *__restrict __sig)
+  __THROW __nonnull ((2));
+
+extern int aio_error64 (const struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((1));
+extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((1));
+
+extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW;
+
+extern int aio_suspend64 (const struct aiocb64 *const __list[], int __nent,
+                         const struct timespec *__restrict __timeout)
+  __THROW __nonnull ((1));
+
+extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp)
+  __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* aio.h */
diff --git a/lib/libdss-include/include/aliases.h b/lib/libdss-include/include/aliases.h
new file mode 100644 (file)
index 0000000..44760d3
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ALIASES_H
+#define _ALIASES_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* Structure to represent one entry of the alias data base.  */
+struct aliasent
+  {
+    char *alias_name;
+    size_t alias_members_len;
+    char **alias_members;
+    int alias_local;
+  };
+
+
+/* Open alias data base files.  */
+extern void setaliasent (void) __THROW;
+
+/* Close alias data base files.  */
+extern void endaliasent (void) __THROW;
+
+/* Get the next entry from the alias data base.  */
+extern struct aliasent *getaliasent (void) __THROW;
+
+/* Get the next entry from the alias data base and put it in RESULT_BUF.  */
+extern int getaliasent_r (struct aliasent *__restrict __result_buf,
+                         char *__restrict __buffer, size_t __buflen,
+                         struct aliasent **__restrict __result) __THROW;
+
+/* Get alias entry corresponding to NAME.  */
+extern struct aliasent *getaliasbyname (const char *__name) __THROW;
+
+/* Get alias entry corresponding to NAME and put it in RESULT_BUF.  */
+extern int getaliasbyname_r (const char *__restrict __name,
+                            struct aliasent *__restrict __result_buf,
+                            char *__restrict __buffer, size_t __buflen,
+                            struct aliasent **__restrict __result) __THROW;
+
+__END_DECLS
+
+#endif /* aliases.h */
diff --git a/lib/libdss-include/include/alloca.h b/lib/libdss-include/include/alloca.h
new file mode 100644 (file)
index 0000000..974d11a
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ALLOCA_H
+#define        _ALLOCA_H       1
+
+#include <features.h>
+
+#define        __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions.  */
+#undef alloca
+
+/* Allocate a block that will be freed when the calling function exits.  */
+extern void *alloca (size_t __size) __THROW;
+
+#ifdef __GNUC__
+# define alloca(size)  __builtin_alloca (size)
+#endif /* GCC.  */
+
+__END_DECLS
+
+#endif /* alloca.h */
diff --git a/lib/libdss-include/include/ar.h b/lib/libdss-include/include/ar.h
new file mode 100644 (file)
index 0000000..caa0223
--- /dev/null
@@ -0,0 +1,47 @@
+/* Header describing `ar' archive file format.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AR_H
+#define _AR_H 1
+
+#include <sys/cdefs.h>
+
+/* Archive files start with the ARMAG identifying string.  Then follows a
+   `struct ar_hdr', and as many bytes of member file data as its `ar_size'
+   member indicates, for each member file.  */
+
+#define ARMAG  "!<arch>\n"     /* String that begins an archive file.  */
+#define SARMAG 8               /* Size of that string.  */
+
+#define ARFMAG "`\n"           /* String in ar_fmag at end of each header.  */
+
+__BEGIN_DECLS
+
+struct ar_hdr
+  {
+    char ar_name[16];          /* Member file name, sometimes / terminated. */
+    char ar_date[12];          /* File date, decimal seconds since Epoch.  */
+    char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal.  */
+    char ar_mode[8];           /* File mode, in ASCII octal.  */
+    char ar_size[10];          /* File size, in ASCII decimal.  */
+    char ar_fmag[2];           /* Always contains ARFMAG.  */
+  };
+
+__END_DECLS
+
+#endif /* ar.h */
diff --git a/lib/libdss-include/include/argp.h b/lib/libdss-include/include/argp.h
new file mode 100644 (file)
index 0000000..21fd1f2
--- /dev/null
@@ -0,0 +1,594 @@
+/* Hierarchial argument parsing, layered over getopt.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARGP_H
+#define _ARGP_H
+
+#include <stdio.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <limits.h>
+
+#define __need_error_t
+#include <errno.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+#ifndef __NTH
+# define __NTH(fct) fct __THROW
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+
+#ifndef __error_t_defined
+typedef int error_t;
+# define __error_t_defined
+#endif
+\f
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* A description of a particular option.  A pointer to an array of
+   these is passed in the OPTIONS field of an argp structure.  Each option
+   entry can correspond to one long option and/or one short option; more
+   names for the same option can be added by following an entry in an option
+   array with options having the OPTION_ALIAS flag set.  */
+struct argp_option
+{
+  /* The long option name.  For more than one name for the same option, you
+     can use following options with the OPTION_ALIAS flag set.  */
+  const char *name;
+
+  /* What key is returned for this option.  If > 0 and printable, then it's
+     also accepted as a short option.  */
+  int key;
+
+  /* If non-NULL, this is the name of the argument associated with this
+     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
+  const char *arg;
+
+  /* OPTION_ flags.  */
+  int flags;
+
+  /* The doc string for this option.  If both NAME and KEY are 0, This string
+     will be printed outdented from the normal option column, making it
+     useful as a group header (it will be the first thing printed in its
+     group); in this usage, it's conventional to end the string with a `:'.  */
+  const char *doc;
+
+  /* The group this option is in.  In a long help message, options are sorted
+     alphabetically within each group, and the groups presented in the order
+     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
+     if this field 0 will inherit the group number of the previous entry, or
+     zero if it's the first one, unless its a group header (NAME and KEY both
+     0), in which case, the previous entry + 1 is the default.  Automagic
+     options such as --help are put into group -1.  */
+  int group;
+};
+
+/* The argument associated with this option is optional.  */
+#define OPTION_ARG_OPTIONAL    0x1
+
+/* This option isn't displayed in any help messages.  */
+#define OPTION_HIDDEN          0x2
+
+/* This option is an alias for the closest previous non-alias option.  This
+   means that it will be displayed in the same help entry, and will inherit
+   fields other than NAME and KEY from the aliased option.  */
+#define OPTION_ALIAS           0x4
+
+/* This option isn't actually an option (and so should be ignored by the
+   actual option parser), but rather an arbitrary piece of documentation that
+   should be displayed in much the same manner as the options.  If this flag
+   is set, then the option NAME field is displayed unmodified (e.g., no `--'
+   prefix is added) at the left-margin (where a *short* option would normally
+   be displayed), and the documentation string in the normal place.  For
+   purposes of sorting, any leading whitespace and punctuation is ignored,
+   except that if the first non-whitespace character is not `-', this entry
+   is displayed after all options (and OPTION_DOC entries with a leading `-')
+   in the same group.  */
+#define OPTION_DOC             0x8
+
+/* This option shouldn't be included in `long' usage messages (but is still
+   included in help messages).  This is mainly intended for options that are
+   completely documented in an argp's ARGS_DOC field, in which case including
+   the option in the generic usage list would be redundant.  For instance,
+   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
+   distinguish these two cases, -x should probably be marked
+   OPTION_NO_USAGE.  */
+#define OPTION_NO_USAGE                0x10
+\f
+struct argp;                   /* fwd declare this type */
+struct argp_state;             /* " */
+struct argp_child;             /* " */
+
+/* The type of a pointer to an argp parsing function.  */
+typedef error_t (*argp_parser_t) (int __key, char *__arg,
+                                 struct argp_state *__state);
+
+/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
+   returns will simply be ignored.  For user keys, this error will be turned
+   into EINVAL (if the call to argp_parse is such that errors are propagated
+   back to the user instead of exiting); returning EINVAL itself would result
+   in an immediate stop to parsing in *all* cases.  */
+#define ARGP_ERR_UNKNOWN       E2BIG /* Hurd should never need E2BIG.  XXX */
+
+/* Special values for the KEY argument to an argument parsing function.
+   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
+
+   The sequence of keys to a parsing function is either (where each
+   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
+
+       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
+   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
+   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
+
+   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
+   argument, in which case parsing stops at that argument (returning the
+   unparsed arguments to the caller of argp_parse if requested, or stopping
+   with an error message if not).
+
+   If an error occurs (either detected by argp, or because the parsing
+   function returned an error value), then the parser is called with
+   ARGP_KEY_ERROR, and no further calls are made.  */
+
+/* This is not an option at all, but rather a command line argument.  If a
+   parser receiving this key returns success, the fact is recorded, and the
+   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
+   argument, a parser function decrements the NEXT field of the state it's
+   passed, the option won't be considered processed; this is to allow you to
+   actually modify the argument (perhaps into an option), and have it
+   processed again.  */
+#define ARGP_KEY_ARG           0
+/* There are remaining arguments not parsed by any parser, which may be found
+   starting at (STATE->argv + STATE->next).  If success is returned, but
+   STATE->next left untouched, it's assumed that all arguments were consume,
+   otherwise, the parser should adjust STATE->next to reflect any arguments
+   consumed.  */
+#define ARGP_KEY_ARGS          0x1000006
+/* There are no more command line arguments at all.  */
+#define ARGP_KEY_END           0x1000001
+/* Because it's common to want to do some special processing if there aren't
+   any non-option args, user parsers are called with this key if they didn't
+   successfully process any non-option arguments.  Called just before
+   ARGP_KEY_END (where more general validity checks on previously parsed
+   arguments can take place).  */
+#define ARGP_KEY_NO_ARGS       0x1000002
+/* Passed in before any parsing is done.  Afterwards, the values of each
+   element of the CHILD_INPUT field, if any, in the state structure is
+   copied to each child's state to be the initial value of the INPUT field.  */
+#define ARGP_KEY_INIT          0x1000003
+/* Use after all other keys, including SUCCESS & END.  */
+#define ARGP_KEY_FINI          0x1000007
+/* Passed in when parsing has successfully been completed (even if there are
+   still arguments remaining).  */
+#define ARGP_KEY_SUCCESS       0x1000004
+/* Passed in if an error occurs.  */
+#define ARGP_KEY_ERROR         0x1000005
+
+/* An argp structure contains a set of options declarations, a function to
+   deal with parsing one, documentation string, a possible vector of child
+   argp's, and perhaps a function to filter help output.  When actually
+   parsing options, getopt is called with the union of all the argp
+   structures chained together through their CHILD pointers, with conflicts
+   being resolved in favor of the first occurrence in the chain.  */
+struct argp
+{
+  /* An array of argp_option structures, terminated by an entry with both
+     NAME and KEY having a value of 0.  */
+  const struct argp_option *options;
+
+  /* What to do with an option from this structure.  KEY is the key
+     associated with the option, and ARG is any associated argument (NULL if
+     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
+     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
+     parsing is stopped immediately, and that value is returned from
+     argp_parse().  For special (non-user-supplied) values of KEY, see the
+     ARGP_KEY_ definitions below.  */
+  argp_parser_t parser;
+
+  /* A string describing what other arguments are wanted by this program.  It
+     is only used by argp_usage to print the `Usage:' message.  If it
+     contains newlines, the strings separated by them are considered
+     alternative usage patterns, and printed on separate lines (lines after
+     the first are prefix by `  or: ' instead of `Usage:').  */
+  const char *args_doc;
+
+  /* If non-NULL, a string containing extra text to be printed before and
+     after the options in a long help message (separated by a vertical tab
+     `\v' character).  */
+  const char *doc;
+
+  /* A vector of argp_children structures, terminated by a member with a 0
+     argp field, pointing to child argps should be parsed with this one.  Any
+     conflicts are resolved in favor of this argp, or early argps in the
+     CHILDREN list.  This field is useful if you use libraries that supply
+     their own argp structure, which you want to use in conjunction with your
+     own.  */
+  const struct argp_child *children;
+
+  /* If non-zero, this should be a function to filter the output of help
+     messages.  KEY is either a key from an option, in which case TEXT is
+     that option's help text, or a special key from the ARGP_KEY_HELP_
+     defines, below, describing which other help text TEXT is.  The function
+     should return either TEXT, if it should be used as-is, a replacement
+     string, which should be malloced, and will be freed by argp, or NULL,
+     meaning `print nothing'.  The value for TEXT is *after* any translation
+     has been done, so if any of the replacement text also needs translation,
+     that should be done by the filter function.  INPUT is either the input
+     supplied to argp_parse, or NULL, if argp_help was called directly.  */
+  char *(*help_filter) (int __key, const char *__text, void *__input);
+
+  /* If non-zero the strings used in the argp library are translated using
+     the domain described by this string.  Otherwise the currently installed
+     default domain is used.  */
+  const char *argp_domain;
+};
+
+/* Possible KEY arguments to a help filter function.  */
+#define ARGP_KEY_HELP_PRE_DOC  0x2000001 /* Help text preceeding options. */
+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
+#define ARGP_KEY_HELP_HEADER   0x2000003 /* Option header string. */
+#define ARGP_KEY_HELP_EXTRA    0x2000004 /* After all other documentation;
+                                            TEXT is NULL for this key.  */
+/* Explanatory note emitted when duplicate option arguments have been
+   suppressed.  */
+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string.  */
+\f
+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
+   argp_child structures, each of which describes a subsidiary argp.  */
+struct argp_child
+{
+  /* The child parser.  */
+  const struct argp *argp;
+
+  /* Flags for this child.  */
+  int flags;
+
+  /* If non-zero, an optional header to be printed in help output before the
+     child options.  As a side-effect, a non-zero value forces the child
+     options to be grouped together; to achieve this effect without actually
+     printing a header string, use a value of "".  */
+  const char *header;
+
+  /* Where to group the child options relative to the other (`consolidated')
+     options in the parent argp; the values are the same as the GROUP field
+     in argp_option structs, but all child-groupings follow parent options at
+     a particular group level.  If both this field and HEADER are zero, then
+     they aren't grouped at all, but rather merged with the parent options
+     (merging the child's grouping levels with the parents).  */
+  int group;
+};
+\f
+/* Parsing state.  This is provided to parsing functions called by argp,
+   which may examine and, as noted, modify fields.  */
+struct argp_state
+{
+  /* The top level ARGP being parsed.  */
+  const struct argp *root_argp;
+
+  /* The argument vector being parsed.  May be modified.  */
+  int argc;
+  char **argv;
+
+  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
+  int next;
+
+  /* The flags supplied to argp_parse.  May be modified.  */
+  unsigned flags;
+
+  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
+     number of the current arg, starting at zero, and incremented after each
+     such call returns.  At all other times, this is the number of such
+     arguments that have been processed.  */
+  unsigned arg_num;
+
+  /* If non-zero, the index in ARGV of the first argument following a special
+     `--' argument (which prevents anything following being interpreted as an
+     option).  Only set once argument parsing has proceeded past this point. */
+  int quoted;
+
+  /* An arbitrary pointer passed in from the user.  */
+  void *input;
+  /* Values to pass to child parsers.  This vector will be the same length as
+     the number of children for the current parser.  */
+  void **child_inputs;
+
+  /* For the parser's use.  Initialized to 0.  */
+  void *hook;
+
+  /* The name used when printing messages.  This is initialized to ARGV[0],
+     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
+  char *name;
+
+  /* Streams used when argp prints something.  */
+  FILE *err_stream;            /* For errors; initialized to stderr. */
+  FILE *out_stream;            /* For information; initialized to stdout. */
+
+  void *pstate;                        /* Private, for use by argp.  */
+};
+\f
+/* Flags for argp_parse (note that the defaults are those that are
+   convenient for program command line parsing): */
+
+/* Don't ignore the first element of ARGV.  Normally (and always unless
+   ARGP_NO_ERRS is set) the first element of the argument vector is
+   skipped for option parsing purposes, as it corresponds to the program name
+   in a command line.  */
+#define ARGP_PARSE_ARGV0  0x01
+
+/* Don't print error messages for unknown options to stderr; unless this flag
+   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
+   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
+   assumption that silent exiting upon errors is bad behaviour).  */
+#define ARGP_NO_ERRS   0x02
+
+/* Don't parse any non-option args.  Normally non-option args are parsed by
+   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
+   as the value.  Since it's impossible to know which parse function wants to
+   handle it, each one is called in turn, until one returns 0 or an error
+   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
+   argp_parse returns prematurely (but with a return value of 0).  If all
+   args have been parsed without error, all parsing functions are called one
+   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
+   as the normal behavior is to stop parsing as soon as some argument can't
+   be handled.  */
+#define ARGP_NO_ARGS   0x04
+
+/* Parse options and arguments in the same order they occur on the command
+   line -- normally they're rearranged so that all options come first. */
+#define ARGP_IN_ORDER  0x08
+
+/* Don't provide the standard long option --help, which causes usage and
+      option help information to be output to stdout, and exit (0) called. */
+#define ARGP_NO_HELP   0x10
+
+/* Don't exit on errors (they may still result in error messages).  */
+#define ARGP_NO_EXIT   0x20
+
+/* Use the gnu getopt `long-only' rules for parsing arguments.  */
+#define ARGP_LONG_ONLY 0x40
+
+/* Turns off any message-printing/exiting options.  */
+#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
+
+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
+   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
+   index in ARGV of the first unparsed option is returned in it.  If an
+   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
+   routine returned a non-zero value, it is returned; otherwise 0 is
+   returned.  This function may also call exit unless the ARGP_NO_HELP flag
+   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
+extern error_t argp_parse (const struct argp *__restrict __argp,
+                          int __argc, char **__restrict __argv,
+                          unsigned __flags, int *__restrict __arg_index,
+                          void *__restrict __input);
+extern error_t __argp_parse (const struct argp *__restrict __argp,
+                            int __argc, char **__restrict __argv,
+                            unsigned __flags, int *__restrict __arg_index,
+                            void *__restrict __input);
+\f
+/* Global variables.  */
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   will print this string followed by a newline and exit (unless the
+   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
+extern const char *argp_program_version;
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   calls this function with a stream to print the version to and a pointer to
+   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
+   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
+                                         struct argp_state *__restrict
+                                         __state);
+
+/* If defined or set by the user program, it should point to string that is
+   the bug-reporting address for the program.  It will be printed by
+   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
+   standard help messages), embedded in a sentence that says something like
+   `Report bugs to ADDR.'.  */
+extern const char *argp_program_bug_address;
+
+/* The exit status that argp will use when exiting due to a parsing error.
+   If not defined or set by the user program, this defaults to EX_USAGE from
+   <sysexits.h>.  */
+extern error_t argp_err_exit_status;
+\f
+/* Flags for argp_help.  */
+#define ARGP_HELP_USAGE                0x01 /* a Usage: message. */
+#define ARGP_HELP_SHORT_USAGE  0x02 /*  " but don't actually print options. */
+#define ARGP_HELP_SEE          0x04 /* a `Try ... for more help' message. */
+#define ARGP_HELP_LONG         0x08 /* a long help message. */
+#define ARGP_HELP_PRE_DOC      0x10 /* doc string preceding long help.  */
+#define ARGP_HELP_POST_DOC     0x20 /* doc string following long help.  */
+#define ARGP_HELP_DOC          (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
+#define ARGP_HELP_BUG_ADDR     0x40 /* bug report address */
+#define ARGP_HELP_LONG_ONLY    0x80 /* modify output appropriately to
+                                       reflect ARGP_LONG_ONLY mode.  */
+
+/* These ARGP_HELP flags are only understood by argp_state_help.  */
+#define ARGP_HELP_EXIT_ERR     0x100 /* Call exit(1) instead of returning.  */
+#define ARGP_HELP_EXIT_OK      0x200 /* Call exit(0) instead of returning.  */
+
+/* The standard thing to do after a program command line parsing error, if an
+   error message has already been printed.  */
+#define ARGP_HELP_STD_ERR \
+  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do after a program command line parsing error, if no
+   more specific error message has been printed.  */
+#define ARGP_HELP_STD_USAGE \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do in response to a --help option.  */
+#define ARGP_HELP_STD_HELP \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
+   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
+
+/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
+   ARGP_HELP_*.  */
+extern void argp_help (const struct argp *__restrict __argp,
+                      FILE *__restrict __stream,
+                      unsigned __flags, char *__restrict __name);
+extern void __argp_help (const struct argp *__restrict __argp,
+                        FILE *__restrict __stream, unsigned __flags,
+                        char *__name);
+\f
+/* The following routines are intended to be called from within an argp
+   parsing routine (thus taking an argp_state structure as the first
+   argument).  They may or may not print an error message and exit, depending
+   on the flags in STATE -- in any case, the caller should be prepared for
+   them *not* to exit, and should return an appropiate error after calling
+   them.  [argp_usage & argp_error should probably be called argp_state_...,
+   but they're used often enough that they should be short]  */
+
+/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
+   from the set ARGP_HELP_*.  */
+extern void argp_state_help (const struct argp_state *__restrict __state,
+                            FILE *__restrict __stream,
+                            unsigned int __flags);
+extern void __argp_state_help (const struct argp_state *__restrict __state,
+                              FILE *__restrict __stream,
+                              unsigned int __flags);
+
+/* Possibly output the standard usage message for ARGP to stderr and exit.  */
+extern void argp_usage (const struct argp_state *__state);
+extern void __argp_usage (const struct argp_state *__state);
+
+/* If appropriate, print the printf string FMT and following args, preceded
+   by the program name and `:', to stderr, and followed by a `Try ... --help'
+   message, then exit (1).  */
+extern void argp_error (const struct argp_state *__restrict __state,
+                       const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
+extern void __argp_error (const struct argp_state *__restrict __state,
+                         const char *__restrict __fmt, ...)
+    _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3));
+
+/* Similar to the standard gnu error-reporting function error(), but will
+   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
+   to STATE->err_stream.  This is useful for argument parsing code that is
+   shared between program startup (when exiting is desired) and runtime
+   option parsing (when typically an error code is returned instead).  The
+   difference between this function and argp_error is that the latter is for
+   *parsing errors*, and the former is for other problems that occur during
+   parsing but don't reflect a (syntactic) problem with the input.  */
+extern void argp_failure (const struct argp_state *__restrict __state,
+                         int __status, int __errnum,
+                         const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
+extern void __argp_failure (const struct argp_state *__restrict __state,
+                           int __status, int __errnum,
+                           const char *__restrict __fmt, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5));
+
+/* Returns true if the option OPT is a valid short option.  */
+extern int _option_is_short (const struct argp_option *__opt) __THROW;
+extern int __option_is_short (const struct argp_option *__opt) __THROW;
+
+/* Returns true if the option OPT is in fact the last (unused) entry in an
+   options array.  */
+extern int _option_is_end (const struct argp_option *__opt) __THROW;
+extern int __option_is_end (const struct argp_option *__opt) __THROW;
+
+/* Return the input field for ARGP in the parser corresponding to STATE; used
+   by the help routines.  */
+extern void *_argp_input (const struct argp *__restrict __argp,
+                         const struct argp_state *__restrict __state)
+     __THROW;
+extern void *__argp_input (const struct argp *__restrict __argp,
+                          const struct argp_state *__restrict __state)
+     __THROW;
+\f
+#ifdef __USE_EXTERN_INLINES
+
+# if !_LIBC
+#  define __argp_usage argp_usage
+#  define __argp_state_help argp_state_help
+#  define __option_is_short _option_is_short
+#  define __option_is_end _option_is_end
+# endif
+
+# ifndef ARGP_EI
+#  define ARGP_EI __extern_inline
+# endif
+
+ARGP_EI void
+__argp_usage (const struct argp_state *__state)
+{
+  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
+}
+
+ARGP_EI int
+__NTH (__option_is_short (const struct argp_option *__opt))
+{
+  if (__opt->flags & OPTION_DOC)
+    return 0;
+  else
+    {
+      int __key = __opt->key;
+      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
+    }
+}
+
+ARGP_EI int
+__NTH (__option_is_end (const struct argp_option *__opt))
+{
+  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
+}
+
+# if !_LIBC
+#  undef __argp_usage
+#  undef __argp_state_help
+#  undef __option_is_short
+#  undef __option_is_end
+# endif
+#endif /* Use extern inlines.  */
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* argp.h */
diff --git a/lib/libdss-include/include/argz.h b/lib/libdss-include/include/argz.h
new file mode 100644 (file)
index 0000000..c1bc5f7
--- /dev/null
@@ -0,0 +1,182 @@
+/* Routines for dealing with '\0' separated arg vectors.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARGZ_H
+#define _ARGZ_H        1
+
+#include <features.h>
+
+#define __need_error_t
+#include <errno.h>
+#include <string.h>            /* Need size_t, and strchr is called below.  */
+
+#ifndef __error_t_defined
+typedef int error_t;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in
+   ARGZ, and the total length in LEN.  If a memory allocation error occurs,
+   ENOMEM is returned, otherwise 0.  The result can be destroyed using free. */
+extern error_t __argz_create (char *const __argv[], char **__restrict __argz,
+                             size_t *__restrict __len) __THROW;
+extern error_t argz_create (char *const __argv[], char **__restrict __argz,
+                           size_t *__restrict __len) __THROW;
+
+/* Make a '\0' separated arg vector from a SEP separated list in
+   STRING, returning it in ARGZ, and the total length in LEN.  If a
+   memory allocation error occurs, ENOMEM is returned, otherwise 0.
+   The result can be destroyed using free.  */
+extern error_t __argz_create_sep (const char *__restrict __string,
+                                 int __sep, char **__restrict __argz,
+                                 size_t *__restrict __len) __THROW;
+extern error_t argz_create_sep (const char *__restrict __string,
+                               int __sep, char **__restrict __argz,
+                               size_t *__restrict __len) __THROW;
+
+/* Returns the number of strings in ARGZ.  */
+extern size_t __argz_count (const char *__argz, size_t __len)
+     __THROW __attribute_pure__;
+extern size_t argz_count (const char *__argz, size_t __len)
+     __THROW __attribute_pure__;
+
+/* Puts pointers to each string in ARGZ into ARGV, which must be large enough
+   to hold them all.  */
+extern void __argz_extract (const char *__restrict __argz, size_t __len,
+                           char **__restrict __argv) __THROW;
+extern void argz_extract (const char *__restrict __argz, size_t __len,
+                         char **__restrict __argv) __THROW;
+
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
+extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;
+
+/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN.  */
+extern error_t __argz_append (char **__restrict __argz,
+                             size_t *__restrict __argz_len,
+                             const char *__restrict __buf, size_t __buf_len)
+     __THROW;
+extern error_t argz_append (char **__restrict __argz,
+                           size_t *__restrict __argz_len,
+                           const char *__restrict __buf, size_t __buf_len)
+     __THROW;
+
+/* Append STR to the argz vector in ARGZ & ARGZ_LEN.  */
+extern error_t __argz_add (char **__restrict __argz,
+                          size_t *__restrict __argz_len,
+                          const char *__restrict __str) __THROW;
+extern error_t argz_add (char **__restrict __argz,
+                        size_t *__restrict __argz_len,
+                        const char *__restrict __str) __THROW;
+
+/* Append SEP separated list in STRING to the argz vector in ARGZ &
+   ARGZ_LEN.  */
+extern error_t __argz_add_sep (char **__restrict __argz,
+                              size_t *__restrict __argz_len,
+                              const char *__restrict __string, int __delim)
+     __THROW;
+extern error_t argz_add_sep (char **__restrict __argz,
+                            size_t *__restrict __argz_len,
+                            const char *__restrict __string, int __delim)
+     __THROW;
+
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there.  */
+extern void __argz_delete (char **__restrict __argz,
+                          size_t *__restrict __argz_len,
+                          char *__restrict __entry) __THROW;
+extern void argz_delete (char **__restrict __argz,
+                        size_t *__restrict __argz_len,
+                        char *__restrict __entry) __THROW;
+
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an
+   existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end.
+   Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN,
+   ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ.  If BEFORE is not
+   in ARGZ, EINVAL is returned, else if memory can't be allocated for the new
+   ARGZ, ENOMEM is returned, else 0.  */
+extern error_t __argz_insert (char **__restrict __argz,
+                             size_t *__restrict __argz_len,
+                             char *__restrict __before,
+                             const char *__restrict __entry) __THROW;
+extern error_t argz_insert (char **__restrict __argz,
+                           size_t *__restrict __argz_len,
+                           char *__restrict __before,
+                           const char *__restrict __entry) __THROW;
+
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating
+   ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+   incremented by number of replacements performed.  */
+extern error_t __argz_replace (char **__restrict __argz,
+                              size_t *__restrict __argz_len,
+                              const char *__restrict __str,
+                              const char *__restrict __with,
+                              unsigned int *__restrict __replace_count);
+extern error_t argz_replace (char **__restrict __argz,
+                            size_t *__restrict __argz_len,
+                            const char *__restrict __str,
+                            const char *__restrict __with,
+                            unsigned int *__restrict __replace_count);
+\f
+/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
+   are no more.  If entry is NULL, then the first entry is returned.  This
+   behavior allows two convenient iteration styles:
+
+    char *entry = 0;
+    while ((entry = argz_next (argz, argz_len, entry)))
+      ...;
+
+   or
+
+    char *entry;
+    for (entry = argz; entry; entry = argz_next (argz, argz_len, entry))
+      ...;
+*/
+extern char *__argz_next (const char *__restrict __argz, size_t __argz_len,
+                         const char *__restrict __entry) __THROW;
+extern char *argz_next (const char *__restrict __argz, size_t __argz_len,
+                       const char *__restrict __entry) __THROW;
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline char *
+__NTH (__argz_next (const char *__argz, size_t __argz_len,
+                   const char *__entry))
+{
+  if (__entry)
+    {
+      if (__entry < __argz + __argz_len)
+       __entry = strchr (__entry, '\0') + 1;
+
+      return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry;
+    }
+  else
+    return __argz_len > 0 ? (char *) __argz : 0;
+}
+__extern_inline char *
+__NTH (argz_next (const char *__argz, size_t __argz_len,
+                 const char *__entry))
+{
+  return __argz_next (__argz, __argz_len, __entry);
+}
+#endif /* Use extern inlines.  */
+
+__END_DECLS
+
+#endif /* argz.h */
diff --git a/lib/libdss-include/include/arpa/ftp.h b/lib/libdss-include/include/arpa/ftp.h
new file mode 100644 (file)
index 0000000..e5b340d
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ftp.h       8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _ARPA_FTP_H
+#define        _ARPA_FTP_H 1
+
+/* Definitions for FTP; see RFC-765. */
+
+/*
+ * Reply codes.
+ */
+#define PRELIM         1       /* positive preliminary */
+#define COMPLETE       2       /* positive completion */
+#define CONTINUE       3       /* positive intermediate */
+#define TRANSIENT      4       /* transient negative completion */
+#define ERROR          5       /* permanent negative completion */
+
+/*
+ * Type codes
+ */
+#define        TYPE_A          1       /* ASCII */
+#define        TYPE_E          2       /* EBCDIC */
+#define        TYPE_I          3       /* image */
+#define        TYPE_L          4       /* local byte size */
+
+#ifdef FTP_NAMES
+char *typenames[] =  {"0", "ASCII", "EBCDIC", "Image", "Local" };
+#endif
+
+/*
+ * Form codes
+ */
+#define        FORM_N          1       /* non-print */
+#define        FORM_T          2       /* telnet format effectors */
+#define        FORM_C          3       /* carriage control (ASA) */
+#ifdef FTP_NAMES
+char *formnames[] =  {"0", "Nonprint", "Telnet", "Carriage-control" };
+#endif
+
+/*
+ * Structure codes
+ */
+#define        STRU_F          1       /* file (no record structure) */
+#define        STRU_R          2       /* record structure */
+#define        STRU_P          3       /* page structure */
+#ifdef FTP_NAMES
+char *strunames[] =  {"0", "File", "Record", "Page" };
+#endif
+
+/*
+ * Mode types
+ */
+#define        MODE_S          1       /* stream */
+#define        MODE_B          2       /* block */
+#define        MODE_C          3       /* compressed */
+#ifdef FTP_NAMES
+char *modenames[] =  {"0", "Stream", "Block", "Compressed" };
+#endif
+
+/*
+ * Record Tokens
+ */
+#define        REC_ESC         '\377'  /* Record-mode Escape */
+#define        REC_EOR         '\001'  /* Record-mode End-of-Record */
+#define REC_EOF                '\002'  /* Record-mode End-of-File */
+
+/*
+ * Block Header
+ */
+#define        BLK_EOR         0x80    /* Block is End-of-Record */
+#define        BLK_EOF         0x40    /* Block is End-of-File */
+#define BLK_ERRORS     0x20    /* Block is suspected of containing errors */
+#define        BLK_RESTART     0x10    /* Block is Restart Marker */
+
+#define        BLK_BYTECOUNT   2       /* Bytes in this block */
+
+#endif /* arpa/ftp.h */
diff --git a/lib/libdss-include/include/arpa/inet.h b/lib/libdss-include/include/arpa/inet.h
new file mode 100644 (file)
index 0000000..94d3330
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ARPA_INET_H
+#define        _ARPA_INET_H    1
+
+#include <features.h>
+#include <netinet/in.h>                /* To define `struct in_addr'.  */
+
+/* Type for length arguments in socket calls.  */
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* Convert Internet host address from numbers-and-dots notation in CP
+   into binary data in network byte order.  */
+extern in_addr_t inet_addr (const char *__cp) __THROW;
+
+/* Return the local host address part of the Internet address in IN.  */
+extern in_addr_t inet_lnaof (struct in_addr __in) __THROW;
+
+/* Make Internet host address in network byte order by combining the
+   network number NET with the local address HOST.  */
+extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
+     __THROW;
+
+/* Return network number part of the Internet address IN.  */
+extern in_addr_t inet_netof (struct in_addr __in) __THROW;
+
+/* Extract the network number in network byte order from the address
+   in numbers-and-dots natation starting at CP.  */
+extern in_addr_t inet_network (const char *__cp) __THROW;
+
+/* Convert Internet number in IN to ASCII representation.  The return value
+   is a pointer to an internal array containing the string.  */
+extern char *inet_ntoa (struct in_addr __in) __THROW;
+
+/* Convert from presentation format of an Internet number in buffer
+   starting at CP to the binary network format and store result for
+   interface type AF in buffer starting at BUF.  */
+extern int inet_pton (int __af, const char *__restrict __cp,
+                     void *__restrict __buf) __THROW;
+
+/* Convert a Internet address in binary network format for interface
+   type AF in buffer starting at CP to presentation form and place
+   result in buffer of length LEN astarting at BUF.  */
+extern const char *inet_ntop (int __af, const void *__restrict __cp,
+                             char *__restrict __buf, socklen_t __len)
+     __THROW;
+
+
+/* The following functions are not part of XNS 5.2.  */
+#ifdef __USE_MISC
+/* Convert Internet host address from numbers-and-dots notation in CP
+   into binary data and store the result in the structure INP.  */
+extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW;
+
+/* Format a network number NET into presentation format and place result
+   in buffer starting at BUF with length of LEN bytes.  */
+extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF in buffer starting at
+   CP to presentation format.  The result will specifiy BITS bits of
+   the number.  */
+extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
+                           char *__buf, size_t __len) __THROW;
+
+/* Convert network number for interface type AF from presentation in
+   buffer starting at CP to network format and store result int
+   buffer starting at BUF of size LEN.  */
+extern int inet_net_pton (int __af, const char *__cp,
+                         void *__buf, size_t __len) __THROW;
+
+/* Convert ASCII representation in hexadecimal form of the Internet
+   address to binary form and place result in buffer of length LEN
+   starting at BUF.  */
+extern unsigned int inet_nsap_addr (const char *__cp,
+                                   unsigned char *__buf, int __len) __THROW;
+
+/* Convert internet address in binary form in LEN bytes starting at CP
+   a presentation form and place result in BUF.  */
+extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
+                            char *__buf) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* arpa/inet.h */
diff --git a/lib/libdss-include/include/arpa/nameser.h b/lib/libdss-include/include/arpa/nameser.h
new file mode 100644 (file)
index 0000000..fb8513b
--- /dev/null
@@ -0,0 +1,535 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     $BINDId: nameser.h,v 8.37 2000/03/30 21:16:49 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_H_
+#define _ARPA_NAMESER_H_
+
+/*! \file */
+
+#define BIND_4_COMPAT
+
+#include <sys/param.h>
+#if (!defined(BSD)) || (BSD < 199306)
+# include <sys/bitypes.h>
+#else
+# include <sys/types.h>
+#endif
+#include <sys/cdefs.h>
+
+/*%
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__NAMESER > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your libbind.a
+ * contains a new enough lib/nameser/ to support the feature you need.
+ */
+
+#define __NAMESER      19991006        /*%< New interface version stamp. */
+/*
+ * Define constants based on RFC 883, RFC 1034, RFC 1035
+ */
+#define NS_PACKETSZ    512     /*%< default UDP packet size */
+#define NS_MAXDNAME    1025    /*%< maximum domain name */
+#define NS_MAXMSG      65535   /*%< maximum message size */
+#define NS_MAXCDNAME   255     /*%< maximum compressed domain name */
+#define NS_MAXLABEL    63      /*%< maximum length of domain label */
+#define NS_HFIXEDSZ    12      /*%< #/bytes of fixed data in header */
+#define NS_QFIXEDSZ    4       /*%< #/bytes of fixed data in query */
+#define NS_RRFIXEDSZ   10      /*%< #/bytes of fixed data in r record */
+#define NS_INT32SZ     4       /*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ     2       /*%< #/bytes of data in a u_int16_t */
+#define NS_INT8SZ      1       /*%< #/bytes of data in a u_int8_t */
+#define NS_INADDRSZ    4       /*%< IPv4 T_A */
+#define NS_IN6ADDRSZ   16      /*%< IPv6 T_AAAA */
+#define NS_CMPRSFLGS   0xc0    /*%< Flag bits indicating name compression. */
+#define NS_DEFAULTPORT 53      /*%< For both TCP and UDP. */
+/*
+ * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
+ * in synch with it.
+ */
+typedef enum __ns_sect {
+       ns_s_qd = 0,            /*%< Query: Question. */
+       ns_s_zn = 0,            /*%< Update: Zone. */
+       ns_s_an = 1,            /*%< Query: Answer. */
+       ns_s_pr = 1,            /*%< Update: Prerequisites. */
+       ns_s_ns = 2,            /*%< Query: Name servers. */
+       ns_s_ud = 2,            /*%< Update: Update. */
+       ns_s_ar = 3,            /*%< Query|Update: Additional records. */
+       ns_s_max = 4
+} ns_sect;
+
+/*%
+ * This is a message handle.  It is caller allocated and has no dynamic data.
+ * This structure is intended to be opaque to all but ns_parse.c, thus the
+ * leading _'s on the member names.  Use the accessor functions, not the _'s.
+ */
+typedef struct __ns_msg {
+       const u_char    *_msg, *_eom;
+       u_int16_t       _id, _flags, _counts[ns_s_max];
+       const u_char    *_sections[ns_s_max];
+       ns_sect         _sect;
+       int             _rrnum;
+       const u_char    *_msg_ptr;
+} ns_msg;
+
+/* Private data structure - do not use from outside library. */
+struct _ns_flagdata {  int mask, shift;  };
+extern const struct _ns_flagdata _ns_flagdata[];
+
+/* Accessor macros - this is part of the public interface. */
+
+#define ns_msg_id(handle) ((handle)._id + 0)
+#define ns_msg_base(handle) ((handle)._msg + 0)
+#define ns_msg_end(handle) ((handle)._eom + 0)
+#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
+#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
+
+/*%
+ * This is a parsed record.  It is caller allocated and has no dynamic data.
+ */
+typedef        struct __ns_rr {
+       char            name[NS_MAXDNAME];
+       u_int16_t       type;
+       u_int16_t       rr_class;
+       u_int32_t       ttl;
+       u_int16_t       rdlength;
+       const u_char *  rdata;
+} ns_rr;
+
+/* Accessor macros - this is part of the public interface. */
+#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
+#define ns_rr_type(rr) ((ns_type)((rr).type + 0))
+#define ns_rr_class(rr)        ((ns_class)((rr).rr_class + 0))
+#define ns_rr_ttl(rr)  ((rr).ttl + 0)
+#define ns_rr_rdlen(rr)        ((rr).rdlength + 0)
+#define ns_rr_rdata(rr)        ((rr).rdata + 0)
+
+/*%
+ * These don't have to be in the same order as in the packet flags word,
+ * and they can even overlap in some cases, but they will need to be kept
+ * in synch with ns_parse.c:ns_flagdata[].
+ */
+typedef enum __ns_flag {
+       ns_f_qr,                /*%< Question/Response. */
+       ns_f_opcode,            /*%< Operation code. */
+       ns_f_aa,                /*%< Authoritative Answer. */
+       ns_f_tc,                /*%< Truncation occurred. */
+       ns_f_rd,                /*%< Recursion Desired. */
+       ns_f_ra,                /*%< Recursion Available. */
+       ns_f_z,                 /*%< MBZ. */
+       ns_f_ad,                /*%< Authentic Data (DNSSEC). */
+       ns_f_cd,                /*%< Checking Disabled (DNSSEC). */
+       ns_f_rcode,             /*%< Response code. */
+       ns_f_max
+} ns_flag;
+
+/*%
+ * Currently defined opcodes.
+ */
+typedef enum __ns_opcode {
+       ns_o_query = 0,         /*%< Standard query. */
+       ns_o_iquery = 1,        /*%< Inverse query (deprecated/unsupported). */
+       ns_o_status = 2,        /*%< Name server status query (unsupported). */
+                               /* Opcode 3 is undefined/reserved. */
+       ns_o_notify = 4,        /*%< Zone change notification. */
+       ns_o_update = 5,        /*%< Zone update message. */
+       ns_o_max = 6
+} ns_opcode;
+
+/*%
+ * Currently defined response codes.
+ */
+typedef        enum __ns_rcode {
+       ns_r_noerror = 0,       /*%< No error occurred. */
+       ns_r_formerr = 1,       /*%< Format error. */
+       ns_r_servfail = 2,      /*%< Server failure. */
+       ns_r_nxdomain = 3,      /*%< Name error. */
+       ns_r_notimpl = 4,       /*%< Unimplemented. */
+       ns_r_refused = 5,       /*%< Operation refused. */
+       /* these are for BIND_UPDATE */
+       ns_r_yxdomain = 6,      /*%< Name exists */
+       ns_r_yxrrset = 7,       /*%< RRset exists */
+       ns_r_nxrrset = 8,       /*%< RRset does not exist */
+       ns_r_notauth = 9,       /*%< Not authoritative for zone */
+       ns_r_notzone = 10,      /*%< Zone of record different from zone section */
+       ns_r_max = 11,
+       /* The following are EDNS extended rcodes */
+       ns_r_badvers = 16,
+       /* The following are TSIG errors */
+       ns_r_badsig = 16,
+       ns_r_badkey = 17,
+       ns_r_badtime = 18
+} ns_rcode;
+
+/* BIND_UPDATE */
+typedef enum __ns_update_operation {
+       ns_uop_delete = 0,
+       ns_uop_add = 1,
+       ns_uop_max = 2
+} ns_update_operation;
+
+/*%
+ * This structure is used for TSIG authenticated messages
+ */
+struct ns_tsig_key {
+        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
+        unsigned char *data;
+        int len;
+};
+typedef struct ns_tsig_key ns_tsig_key;
+
+/*%
+ * This structure is used for TSIG authenticated TCP messages
+ */
+struct ns_tcp_tsig_state {
+       int counter;
+       struct dst_key *key;
+       void *ctx;
+       unsigned char sig[NS_PACKETSZ];
+       int siglen;
+};
+typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
+
+#define NS_TSIG_FUDGE 300
+#define NS_TSIG_TCP_COUNT 100
+#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
+
+#define NS_TSIG_ERROR_NO_TSIG -10
+#define NS_TSIG_ERROR_NO_SPACE -11
+#define NS_TSIG_ERROR_FORMERR -12
+
+/*%
+ * Currently defined type values for resources and queries.
+ */
+typedef enum __ns_type {
+       ns_t_invalid = 0,       /*%< Cookie. */
+       ns_t_a = 1,             /*%< Host address. */
+       ns_t_ns = 2,            /*%< Authoritative server. */
+       ns_t_md = 3,            /*%< Mail destination. */
+       ns_t_mf = 4,            /*%< Mail forwarder. */
+       ns_t_cname = 5,         /*%< Canonical name. */
+       ns_t_soa = 6,           /*%< Start of authority zone. */
+       ns_t_mb = 7,            /*%< Mailbox domain name. */
+       ns_t_mg = 8,            /*%< Mail group member. */
+       ns_t_mr = 9,            /*%< Mail rename name. */
+       ns_t_null = 10,         /*%< Null resource record. */
+       ns_t_wks = 11,          /*%< Well known service. */
+       ns_t_ptr = 12,          /*%< Domain name pointer. */
+       ns_t_hinfo = 13,        /*%< Host information. */
+       ns_t_minfo = 14,        /*%< Mailbox information. */
+       ns_t_mx = 15,           /*%< Mail routing information. */
+       ns_t_txt = 16,          /*%< Text strings. */
+       ns_t_rp = 17,           /*%< Responsible person. */
+       ns_t_afsdb = 18,        /*%< AFS cell database. */
+       ns_t_x25 = 19,          /*%< X_25 calling address. */
+       ns_t_isdn = 20,         /*%< ISDN calling address. */
+       ns_t_rt = 21,           /*%< Router. */
+       ns_t_nsap = 22,         /*%< NSAP address. */
+       ns_t_nsap_ptr = 23,     /*%< Reverse NSAP lookup (deprecated). */
+       ns_t_sig = 24,          /*%< Security signature. */
+       ns_t_key = 25,          /*%< Security key. */
+       ns_t_px = 26,           /*%< X.400 mail mapping. */
+       ns_t_gpos = 27,         /*%< Geographical position (withdrawn). */
+       ns_t_aaaa = 28,         /*%< Ip6 Address. */
+       ns_t_loc = 29,          /*%< Location Information. */
+       ns_t_nxt = 30,          /*%< Next domain (security). */
+       ns_t_eid = 31,          /*%< Endpoint identifier. */
+       ns_t_nimloc = 32,       /*%< Nimrod Locator. */
+       ns_t_srv = 33,          /*%< Server Selection. */
+       ns_t_atma = 34,         /*%< ATM Address */
+       ns_t_naptr = 35,        /*%< Naming Authority PoinTeR */
+       ns_t_kx = 36,           /*%< Key Exchange */
+       ns_t_cert = 37,         /*%< Certification record */
+       ns_t_a6 = 38,           /*%< IPv6 address (deprecated, use ns_t_aaaa) */
+       ns_t_dname = 39,        /*%< Non-terminal DNAME (for IPv6) */
+       ns_t_sink = 40,         /*%< Kitchen sink (experimentatl) */
+       ns_t_opt = 41,          /*%< EDNS0 option (meta-RR) */
+       ns_t_apl = 42,          /*%< Address prefix list (RFC3123) */
+       ns_t_tkey = 249,        /*%< Transaction key */
+       ns_t_tsig = 250,        /*%< Transaction signature. */
+       ns_t_ixfr = 251,        /*%< Incremental zone transfer. */
+       ns_t_axfr = 252,        /*%< Transfer zone of authority. */
+       ns_t_mailb = 253,       /*%< Transfer mailbox records. */
+       ns_t_maila = 254,       /*%< Transfer mail agent records. */
+       ns_t_any = 255,         /*%< Wildcard match. */
+       ns_t_zxfr = 256,        /*%< BIND-specific, nonstandard. */
+       ns_t_max = 65536
+} ns_type;
+
+/* Exclusively a QTYPE? (not also an RTYPE) */
+#define        ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
+                     (t) == ns_t_mailb || (t) == ns_t_maila)
+/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
+#define        ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
+/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
+#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
+#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
+#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
+                      (t) == ns_t_zxfr)
+
+/*%
+ * Values for class field
+ */
+typedef enum __ns_class {
+       ns_c_invalid = 0,       /*%< Cookie. */
+       ns_c_in = 1,            /*%< Internet. */
+       ns_c_2 = 2,             /*%< unallocated/unsupported. */
+       ns_c_chaos = 3,         /*%< MIT Chaos-net. */
+       ns_c_hs = 4,            /*%< MIT Hesiod. */
+       /* Query class values which do not appear in resource records */
+       ns_c_none = 254,        /*%< for prereq. sections in update requests */
+       ns_c_any = 255,         /*%< Wildcard match. */
+       ns_c_max = 65536
+} ns_class;
+
+/* DNSSEC constants. */
+
+typedef enum __ns_key_types {
+       ns_kt_rsa = 1,          /*%< key type RSA/MD5 */
+       ns_kt_dh  = 2,          /*%< Diffie Hellman */
+       ns_kt_dsa = 3,          /*%< Digital Signature Standard (MANDATORY) */
+       ns_kt_private = 254     /*%< Private key type starts with OID */
+} ns_key_types;
+
+typedef enum __ns_cert_types {
+       cert_t_pkix = 1,        /*%< PKIX (X.509v3) */
+       cert_t_spki = 2,        /*%< SPKI */
+       cert_t_pgp  = 3,        /*%< PGP */
+       cert_t_url  = 253,      /*%< URL private type */
+       cert_t_oid  = 254       /*%< OID private type */
+} ns_cert_types;
+
+/* Flags field of the KEY RR rdata. */
+#define        NS_KEY_TYPEMASK         0xC000  /*%< Mask for "type" bits */
+#define        NS_KEY_TYPE_AUTH_CONF   0x0000  /*%< Key usable for both */
+#define        NS_KEY_TYPE_CONF_ONLY   0x8000  /*%< Key usable for confidentiality */
+#define        NS_KEY_TYPE_AUTH_ONLY   0x4000  /*%< Key usable for authentication */
+#define        NS_KEY_TYPE_NO_KEY      0xC000  /*%< No key usable for either; no key */
+/* The type bits can also be interpreted independently, as single bits: */
+#define        NS_KEY_NO_AUTH          0x8000  /*%< Key unusable for authentication */
+#define        NS_KEY_NO_CONF          0x4000  /*%< Key unusable for confidentiality */
+#define        NS_KEY_RESERVED2        0x2000  /* Security is *mandatory* if bit=0 */
+#define        NS_KEY_EXTENDED_FLAGS   0x1000  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED4        0x0800  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED5        0x0400  /*%< reserved - must be zero */
+#define        NS_KEY_NAME_TYPE        0x0300  /*%< these bits determine the type */
+#define        NS_KEY_NAME_USER        0x0000  /*%< key is assoc. with user */
+#define        NS_KEY_NAME_ENTITY      0x0200  /*%< key is assoc. with entity eg host */
+#define        NS_KEY_NAME_ZONE        0x0100  /*%< key is zone key */
+#define        NS_KEY_NAME_RESERVED    0x0300  /*%< reserved meaning */
+#define        NS_KEY_RESERVED8        0x0080  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED9        0x0040  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED10       0x0020  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED11       0x0010  /*%< reserved - must be zero */
+#define        NS_KEY_SIGNATORYMASK    0x000F  /*%< key can sign RR's of same name */
+#define        NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
+                                 NS_KEY_RESERVED4 | \
+                                 NS_KEY_RESERVED5 | \
+                                 NS_KEY_RESERVED8 | \
+                                 NS_KEY_RESERVED9 | \
+                                 NS_KEY_RESERVED10 | \
+                                 NS_KEY_RESERVED11 )
+#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */
+/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
+#define        NS_ALG_MD5RSA           1       /*%< MD5 with RSA */
+#define        NS_ALG_DH               2       /*%< Diffie Hellman KEY */
+#define        NS_ALG_DSA              3       /*%< DSA KEY */
+#define        NS_ALG_DSS              NS_ALG_DSA
+#define        NS_ALG_EXPIRE_ONLY      253     /*%< No alg, no security */
+#define        NS_ALG_PRIVATE_OID      254     /*%< Key begins with OID giving alg */
+/* Protocol values  */
+/* value 0 is reserved */
+#define NS_KEY_PROT_TLS         1
+#define NS_KEY_PROT_EMAIL       2
+#define NS_KEY_PROT_DNSSEC      3
+#define NS_KEY_PROT_IPSEC       4
+#define NS_KEY_PROT_ANY                255
+
+/* Signatures */
+#define        NS_MD5RSA_MIN_BITS       512    /*%< Size of a mod or exp in bits */
+#define        NS_MD5RSA_MAX_BITS      4096
+       /* Total of binary mod and exp */
+#define        NS_MD5RSA_MAX_BYTES     ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
+       /* Max length of text sig block */
+#define        NS_MD5RSA_MAX_BASE64    (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
+#define NS_MD5RSA_MIN_SIZE     ((NS_MD5RSA_MIN_BITS+7)/8)
+#define NS_MD5RSA_MAX_SIZE     ((NS_MD5RSA_MAX_BITS+7)/8)
+
+#define NS_DSA_SIG_SIZE         41
+#define NS_DSA_MIN_SIZE         213
+#define NS_DSA_MAX_BYTES        405
+
+/* Offsets into SIG record rdata to find various values */
+#define        NS_SIG_TYPE     0       /*%< Type flags */
+#define        NS_SIG_ALG      2       /*%< Algorithm */
+#define        NS_SIG_LABELS   3       /*%< How many labels in name */
+#define        NS_SIG_OTTL     4       /*%< Original TTL */
+#define        NS_SIG_EXPIR    8       /*%< Expiration time */
+#define        NS_SIG_SIGNED   12      /*%< Signature time */
+#define        NS_SIG_FOOT     16      /*%< Key footprint */
+#define        NS_SIG_SIGNER   18      /*%< Domain name of who signed it */
+/* How RR types are represented as bit-flags in NXT records */
+#define        NS_NXT_BITS 8
+#define        NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
+#define NS_NXT_MAX 127
+
+/*%
+ * EDNS0 extended flags and option codes, host order.
+ */
+#define NS_OPT_DNSSEC_OK        0x8000U
+#define NS_OPT_NSID            3
+
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_GET16(s, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (s) = ((u_int16_t)t_cp[0] << 8) \
+           | ((u_int16_t)t_cp[1]) \
+           ; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_GET32(l, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (l) = ((u_int32_t)t_cp[0] << 24) \
+           | ((u_int32_t)t_cp[1] << 16) \
+           | ((u_int32_t)t_cp[2] << 8) \
+           | ((u_int32_t)t_cp[3]) \
+           ; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+#define NS_PUT16(s, cp) do { \
+       u_int16_t t_s = (u_int16_t)(s); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_s >> 8; \
+       *t_cp   = t_s; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_PUT32(l, cp) do { \
+       u_int32_t t_l = (u_int32_t)(l); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_l >> 24; \
+       *t_cp++ = t_l >> 16; \
+       *t_cp++ = t_l >> 8; \
+       *t_cp   = t_l; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+__BEGIN_DECLS
+int            ns_msg_getflag (ns_msg, int) __THROW;
+u_int          ns_get16 (const u_char *) __THROW;
+u_long         ns_get32 (const u_char *) __THROW;
+void           ns_put16 (u_int, u_char *) __THROW;
+void           ns_put32 (u_long, u_char *) __THROW;
+int            ns_initparse (const u_char *, int, ns_msg *) __THROW;
+int            ns_skiprr (const u_char *, const u_char *, ns_sect, int)
+     __THROW;
+int            ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __THROW;
+int            ns_sprintrr (const ns_msg *, const ns_rr *,
+                            const char *, const char *, char *, size_t)
+     __THROW;
+int            ns_sprintrrf (const u_char *, size_t, const char *,
+                             ns_class, ns_type, u_long, const u_char *,
+                             size_t, const char *, const char *,
+                             char *, size_t) __THROW;
+int            ns_format_ttl (u_long, char *, size_t) __THROW;
+int            ns_parse_ttl (const char *, u_long *) __THROW;
+u_int32_t      ns_datetosecs (const char *, int *) __THROW;
+int            ns_name_ntol (const u_char *, u_char *, size_t) __THROW;
+int            ns_name_ntop (const u_char *, char *, size_t) __THROW;
+int            ns_name_pton (const char *, u_char *, size_t) __THROW;
+int            ns_name_unpack (const u_char *, const u_char *,
+                               const u_char *, u_char *, size_t) __THROW;
+int            ns_name_pack (const u_char *, u_char *, int,
+                             const u_char **, const u_char **) __THROW;
+int            ns_name_uncompress (const u_char *, const u_char *,
+                                   const u_char *, char *, size_t) __THROW;
+int            ns_name_compress (const char *, u_char *, size_t,
+                                 const u_char **, const u_char **) __THROW;
+int            ns_name_skip (const u_char **, const u_char *) __THROW;
+void           ns_name_rollback (const u_char *, const u_char **,
+                                 const u_char **) __THROW;
+int            ns_sign (u_char *, int *, int, int, void *,
+                        const u_char *, int, u_char *, int *, time_t) __THROW;
+int            ns_sign2 (u_char *, int *, int, int, void *,
+                         const u_char *, int, u_char *, int *, time_t,
+                         u_char **, u_char **) __THROW;
+int            ns_sign_tcp (u_char *, int *, int, int,
+                            ns_tcp_tsig_state *, int) __THROW;
+int            ns_sign_tcp2 (u_char *, int *, int, int,
+                             ns_tcp_tsig_state *, int,
+                             u_char **, u_char **) __THROW;
+int            ns_sign_tcp_init (void *, const u_char *, int,
+                                 ns_tcp_tsig_state *) __THROW;
+u_char         *ns_find_tsig (u_char *, u_char *) __THROW;
+int            ns_verify (u_char *, int *, void *, const u_char *, int,
+                          u_char *, int *, time_t *, int) __THROW;
+int            ns_verify_tcp (u_char *, int *, ns_tcp_tsig_state *, int)
+     __THROW;
+int            ns_verify_tcp_init (void *, const u_char *, int,
+                                   ns_tcp_tsig_state *) __THROW;
+int            ns_samedomain (const char *, const char *) __THROW;
+int            ns_subdomain (const char *, const char *) __THROW;
+int            ns_makecanon (const char *, char *, size_t) __THROW;
+int            ns_samename (const char *, const char *) __THROW;
+__END_DECLS
+
+#ifdef BIND_4_COMPAT
+#include <arpa/nameser_compat.h>
+#endif
+
+#endif /* !_ARPA_NAMESER_H_ */
+/*! \file */
diff --git a/lib/libdss-include/include/arpa/nameser_compat.h b/lib/libdss-include/include/arpa/nameser_compat.h
new file mode 100644 (file)
index 0000000..d59c9e4
--- /dev/null
@@ -0,0 +1,187 @@
+/* Copyright (c) 1983, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*%
+ *      from nameser.h 8.1 (Berkeley) 6/2/93
+ *     $BINDId: nameser_compat.h,v 8.11 1999/01/02 08:00:58 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_COMPAT_
+#define        _ARPA_NAMESER_COMPAT_
+
+#define        __BIND          19950621        /*%< (DEAD) interface version stamp. */
+
+#include <endian.h>
+
+/*%
+ * Structure for query header.  The order of the fields is machine- and
+ * compiler-dependent, depending on the byte/bit order and the layout
+ * of bit fields.  We use bit fields only in int variables, as this
+ * is all ANSI requires.  This requires a somewhat confusing rearrangement.
+ */
+
+typedef struct {
+       unsigned        id :16;         /*%< query identification number */
+#if BYTE_ORDER == BIG_ENDIAN
+                       /* fields in third byte */
+       unsigned        qr: 1;          /*%< response flag */
+       unsigned        opcode: 4;      /*%< purpose of message */
+       unsigned        aa: 1;          /*%< authoritive answer */
+       unsigned        tc: 1;          /*%< truncated message */
+       unsigned        rd: 1;          /*%< recursion desired */
+                       /* fields in fourth byte */
+       unsigned        ra: 1;          /*%< recursion available */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        rcode :4;       /*%< response code */
+#endif
+#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
+                       /* fields in third byte */
+       unsigned        rd :1;          /*%< recursion desired */
+       unsigned        tc :1;          /*%< truncated message */
+       unsigned        aa :1;          /*%< authoritive answer */
+       unsigned        opcode :4;      /*%< purpose of message */
+       unsigned        qr :1;          /*%< response flag */
+                       /* fields in fourth byte */
+       unsigned        rcode :4;       /*%< response code */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ra :1;          /*%< recursion available */
+#endif
+                       /* remaining bytes */
+       unsigned        qdcount :16;    /*%< number of question entries */
+       unsigned        ancount :16;    /*%< number of answer entries */
+       unsigned        nscount :16;    /*%< number of authority entries */
+       unsigned        arcount :16;    /*%< number of resource entries */
+} HEADER;
+
+#define PACKETSZ       NS_PACKETSZ
+#define MAXDNAME       NS_MAXDNAME
+#define MAXCDNAME      NS_MAXCDNAME
+#define MAXLABEL       NS_MAXLABEL
+#define        HFIXEDSZ        NS_HFIXEDSZ
+#define QFIXEDSZ       NS_QFIXEDSZ
+#define RRFIXEDSZ      NS_RRFIXEDSZ
+#define        INT32SZ         NS_INT32SZ
+#define        INT16SZ         NS_INT16SZ
+#define INT8SZ         NS_INT8SZ
+#define        INADDRSZ        NS_INADDRSZ
+#define        IN6ADDRSZ       NS_IN6ADDRSZ
+#define        INDIR_MASK      NS_CMPRSFLGS
+#define NAMESERVER_PORT        NS_DEFAULTPORT
+
+#define S_ZONE         ns_s_zn
+#define S_PREREQ       ns_s_pr
+#define S_UPDATE       ns_s_ud
+#define S_ADDT         ns_s_ar
+
+#define QUERY          ns_o_query
+#define IQUERY         ns_o_iquery
+#define STATUS         ns_o_status
+#define        NS_NOTIFY_OP    ns_o_notify
+#define        NS_UPDATE_OP    ns_o_update
+
+#define NOERROR                ns_r_noerror
+#define FORMERR                ns_r_formerr
+#define SERVFAIL       ns_r_servfail
+#define NXDOMAIN       ns_r_nxdomain
+#define NOTIMP         ns_r_notimpl
+#define REFUSED                ns_r_refused
+#define YXDOMAIN       ns_r_yxdomain
+#define YXRRSET                ns_r_yxrrset
+#define NXRRSET                ns_r_nxrrset
+#define NOTAUTH                ns_r_notauth
+#define NOTZONE                ns_r_notzone
+/*#define BADSIG               ns_r_badsig*/
+/*#define BADKEY               ns_r_badkey*/
+/*#define BADTIME              ns_r_badtime*/
+
+
+#define DELETE         ns_uop_delete
+#define ADD            ns_uop_add
+
+#define T_A            ns_t_a
+#define T_NS           ns_t_ns
+#define T_MD           ns_t_md
+#define T_MF           ns_t_mf
+#define T_CNAME                ns_t_cname
+#define T_SOA          ns_t_soa
+#define T_MB           ns_t_mb
+#define T_MG           ns_t_mg
+#define T_MR           ns_t_mr
+#define T_NULL         ns_t_null
+#define T_WKS          ns_t_wks
+#define T_PTR          ns_t_ptr
+#define T_HINFO                ns_t_hinfo
+#define T_MINFO                ns_t_minfo
+#define T_MX           ns_t_mx
+#define T_TXT          ns_t_txt
+#define        T_RP            ns_t_rp
+#define T_AFSDB                ns_t_afsdb
+#define T_X25          ns_t_x25
+#define T_ISDN         ns_t_isdn
+#define T_RT           ns_t_rt
+#define T_NSAP         ns_t_nsap
+#define T_NSAP_PTR     ns_t_nsap_ptr
+#define        T_SIG           ns_t_sig
+#define        T_KEY           ns_t_key
+#define        T_PX            ns_t_px
+#define        T_GPOS          ns_t_gpos
+#define        T_AAAA          ns_t_aaaa
+#define        T_LOC           ns_t_loc
+#define        T_NXT           ns_t_nxt
+#define        T_EID           ns_t_eid
+#define        T_NIMLOC        ns_t_nimloc
+#define        T_SRV           ns_t_srv
+#define T_ATMA         ns_t_atma
+#define T_NAPTR                ns_t_naptr
+#define T_A6           ns_t_a6
+#define T_DNAME                ns_t_dname
+#define        T_TSIG          ns_t_tsig
+#define        T_IXFR          ns_t_ixfr
+#define T_AXFR         ns_t_axfr
+#define T_MAILB                ns_t_mailb
+#define T_MAILA                ns_t_maila
+#define T_ANY          ns_t_any
+
+#define C_IN           ns_c_in
+#define C_CHAOS                ns_c_chaos
+#define C_HS           ns_c_hs
+/* BIND_UPDATE */
+#define C_NONE         ns_c_none
+#define C_ANY          ns_c_any
+
+#define        GETSHORT                NS_GET16
+#define        GETLONG                 NS_GET32
+#define        PUTSHORT                NS_PUT16
+#define        PUTLONG                 NS_PUT32
+
+#endif /* _ARPA_NAMESER_COMPAT_ */
+/*! \file */
diff --git a/lib/libdss-include/include/arpa/telnet.h b/lib/libdss-include/include/arpa/telnet.h
new file mode 100644 (file)
index 0000000..3774c89
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)telnet.h    8.2 (Berkeley) 12/15/93
+ */
+
+#ifndef _ARPA_TELNET_H
+#define        _ARPA_TELNET_H 1
+
+/*
+ * Definitions for the TELNET protocol.
+ */
+#define        IAC     255             /* interpret as command: */
+#define        DONT    254             /* you are not to use option */
+#define        DO      253             /* please, you use option */
+#define        WONT    252             /* I won't use option */
+#define        WILL    251             /* I will use option */
+#define        SB      250             /* interpret as subnegotiation */
+#define        GA      249             /* you may reverse the line */
+#define        EL      248             /* erase the current line */
+#define        EC      247             /* erase the current character */
+#define        AYT     246             /* are you there */
+#define        AO      245             /* abort output--but let prog finish */
+#define        IP      244             /* interrupt process--permanently */
+#define        BREAK   243             /* break */
+#define        DM      242             /* data mark--for connect. cleaning */
+#define        NOP     241             /* nop */
+#define        SE      240             /* end sub negotiation */
+#define EOR     239             /* end of record (transparent mode) */
+#define        ABORT   238             /* Abort process */
+#define        SUSP    237             /* Suspend process */
+#define        xEOF    236             /* End of file: EOF is already used... */
+
+#define SYNCH  242             /* for telfunc calls */
+
+#ifdef TELCMDS
+char *telcmds[] = {
+       "EOF", "SUSP", "ABORT", "EOR",
+       "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
+       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
+};
+#else
+extern char *telcmds[];
+#endif
+
+#define        TELCMD_FIRST    xEOF
+#define        TELCMD_LAST     IAC
+#define        TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
+                        (unsigned int)(x) >= TELCMD_FIRST)
+#define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
+
+/* telnet options */
+#define TELOPT_BINARY  0       /* 8-bit data path */
+#define TELOPT_ECHO    1       /* echo */
+#define        TELOPT_RCP      2       /* prepare to reconnect */
+#define        TELOPT_SGA      3       /* suppress go ahead */
+#define        TELOPT_NAMS     4       /* approximate message size */
+#define        TELOPT_STATUS   5       /* give status */
+#define        TELOPT_TM       6       /* timing mark */
+#define        TELOPT_RCTE     7       /* remote controlled transmission and echo */
+#define TELOPT_NAOL    8       /* negotiate about output line width */
+#define TELOPT_NAOP    9       /* negotiate about output page size */
+#define TELOPT_NAOCRD  10      /* negotiate about CR disposition */
+#define TELOPT_NAOHTS  11      /* negotiate about horizontal tabstops */
+#define TELOPT_NAOHTD  12      /* negotiate about horizontal tab disposition */
+#define TELOPT_NAOFFD  13      /* negotiate about formfeed disposition */
+#define TELOPT_NAOVTS  14      /* negotiate about vertical tab stops */
+#define TELOPT_NAOVTD  15      /* negotiate about vertical tab disposition */
+#define TELOPT_NAOLFD  16      /* negotiate about output LF disposition */
+#define TELOPT_XASCII  17      /* extended ascii character set */
+#define        TELOPT_LOGOUT   18      /* force logout */
+#define        TELOPT_BM       19      /* byte macro */
+#define        TELOPT_DET      20      /* data entry terminal */
+#define        TELOPT_SUPDUP   21      /* supdup protocol */
+#define        TELOPT_SUPDUPOUTPUT 22  /* supdup output */
+#define        TELOPT_SNDLOC   23      /* send location */
+#define        TELOPT_TTYPE    24      /* terminal type */
+#define        TELOPT_EOR      25      /* end or record */
+#define        TELOPT_TUID     26      /* TACACS user identification */
+#define        TELOPT_OUTMRK   27      /* output marking */
+#define        TELOPT_TTYLOC   28      /* terminal location number */
+#define        TELOPT_3270REGIME 29    /* 3270 regime */
+#define        TELOPT_X3PAD    30      /* X.3 PAD */
+#define        TELOPT_NAWS     31      /* window size */
+#define        TELOPT_TSPEED   32      /* terminal speed */
+#define        TELOPT_LFLOW    33      /* remote flow control */
+#define TELOPT_LINEMODE        34      /* Linemode option */
+#define TELOPT_XDISPLOC        35      /* X Display Location */
+#define TELOPT_OLD_ENVIRON 36  /* Old - Environment variables */
+#define        TELOPT_AUTHENTICATION 37/* Authenticate */
+#define        TELOPT_ENCRYPT  38      /* Encryption option */
+#define TELOPT_NEW_ENVIRON 39  /* New - Environment variables */
+#define        TELOPT_EXOPL    255     /* extended-options-list */
+
+
+#define        NTELOPTS        (1+TELOPT_NEW_ENVIRON)
+#ifdef TELOPTS
+char *telopts[NTELOPTS+1] = {
+       "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
+       "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
+       "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
+       "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
+       "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
+       "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
+       "TACACS UID", "OUTPUT MARKING", "TTYLOC",
+       "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
+       "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
+       "ENCRYPT", "NEW-ENVIRON",
+       0,
+};
+#define        TELOPT_FIRST    TELOPT_BINARY
+#define        TELOPT_LAST     TELOPT_NEW_ENVIRON
+#define        TELOPT_OK(x)    ((unsigned int)(x) <= TELOPT_LAST)
+#define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
+#endif
+
+/* sub-option qualifiers */
+#define        TELQUAL_IS      0       /* option is... */
+#define        TELQUAL_SEND    1       /* send option */
+#define        TELQUAL_INFO    2       /* ENVIRON: informational version of IS */
+#define        TELQUAL_REPLY   2       /* AUTHENTICATION: client version of IS */
+#define        TELQUAL_NAME    3       /* AUTHENTICATION: client version of IS */
+
+#define        LFLOW_OFF               0       /* Disable remote flow control */
+#define        LFLOW_ON                1       /* Enable remote flow control */
+#define        LFLOW_RESTART_ANY       2       /* Restart output on any char */
+#define        LFLOW_RESTART_XON       3       /* Restart output only on XON */
+
+/*
+ * LINEMODE suboptions
+ */
+
+#define        LM_MODE         1
+#define        LM_FORWARDMASK  2
+#define        LM_SLC          3
+
+#define        MODE_EDIT       0x01
+#define        MODE_TRAPSIG    0x02
+#define        MODE_ACK        0x04
+#define MODE_SOFT_TAB  0x08
+#define MODE_LIT_ECHO  0x10
+
+#define        MODE_MASK       0x1f
+
+/* Not part of protocol, but needed to simplify things... */
+#define MODE_FLOW              0x0100
+#define MODE_ECHO              0x0200
+#define MODE_INBIN             0x0400
+#define MODE_OUTBIN            0x0800
+#define MODE_FORCE             0x1000
+
+#define        SLC_SYNCH       1
+#define        SLC_BRK         2
+#define        SLC_IP          3
+#define        SLC_AO          4
+#define        SLC_AYT         5
+#define        SLC_EOR         6
+#define        SLC_ABORT       7
+#define        SLC_EOF         8
+#define        SLC_SUSP        9
+#define        SLC_EC          10
+#define        SLC_EL          11
+#define        SLC_EW          12
+#define        SLC_RP          13
+#define        SLC_LNEXT       14
+#define        SLC_XON         15
+#define        SLC_XOFF        16
+#define        SLC_FORW1       17
+#define        SLC_FORW2       18
+
+#define        NSLC            18
+
+/*
+ * For backwards compatibility, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define        SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+                       "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
+                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
+#ifdef SLC_NAMES
+char *slc_names[] = {
+       SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define        SLC_NAMES SLC_NAMELIST
+#endif
+
+#define        SLC_NAME_OK(x)  ((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x)    slc_names[x]
+
+#define        SLC_NOSUPPORT   0
+#define        SLC_CANTCHANGE  1
+#define        SLC_VARIABLE    2
+#define        SLC_DEFAULT     3
+#define        SLC_LEVELBITS   0x03
+
+#define        SLC_FUNC        0
+#define        SLC_FLAGS       1
+#define        SLC_VALUE       2
+
+#define        SLC_ACK         0x80
+#define        SLC_FLUSHIN     0x40
+#define        SLC_FLUSHOUT    0x20
+
+#define        OLD_ENV_VAR     1
+#define        OLD_ENV_VALUE   0
+#define        NEW_ENV_VAR     0
+#define        NEW_ENV_VALUE   1
+#define        ENV_ESC         2
+#define ENV_USERVAR    3
+
+/*
+ * AUTHENTICATION suboptions
+ */
+
+/*
+ * Who is authenticating who ...
+ */
+#define        AUTH_WHO_CLIENT         0       /* Client authenticating server */
+#define        AUTH_WHO_SERVER         1       /* Server authenticating client */
+#define        AUTH_WHO_MASK           1
+
+/*
+ * amount of authentication done
+ */
+#define        AUTH_HOW_ONE_WAY        0
+#define        AUTH_HOW_MUTUAL         2
+#define        AUTH_HOW_MASK           2
+
+#define        AUTHTYPE_NULL           0
+#define        AUTHTYPE_KERBEROS_V4    1
+#define        AUTHTYPE_KERBEROS_V5    2
+#define        AUTHTYPE_SPX            3
+#define        AUTHTYPE_MINK           4
+#define        AUTHTYPE_CNT            5
+
+#define        AUTHTYPE_TEST           99
+
+#ifdef AUTH_NAMES
+char *authtype_names[] = {
+       "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define        AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
+#define        AUTHTYPE_NAME(x)        authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define        ENCRYPT_IS              0       /* I pick encryption type ... */
+#define        ENCRYPT_SUPPORT         1       /* I support encryption types ... */
+#define        ENCRYPT_REPLY           2       /* Initial setup response */
+#define        ENCRYPT_START           3       /* Am starting to send encrypted */
+#define        ENCRYPT_END             4       /* Am ending encrypted */
+#define        ENCRYPT_REQSTART        5       /* Request you start encrypting */
+#define        ENCRYPT_REQEND          6       /* Request you send encrypting */
+#define        ENCRYPT_ENC_KEYID       7
+#define        ENCRYPT_DEC_KEYID       8
+#define        ENCRYPT_CNT             9
+
+#define        ENCTYPE_ANY             0
+#define        ENCTYPE_DES_CFB64       1
+#define        ENCTYPE_DES_OFB64       2
+#define        ENCTYPE_CNT             3
+
+#ifdef ENCRYPT_NAMES
+char *encrypt_names[] = {
+       "IS", "SUPPORT", "REPLY", "START", "END",
+       "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+       0,
+};
+char *enctype_names[] = {
+       "ANY", "DES_CFB64",  "DES_OFB64",  0,
+};
+#else
+extern char *encrypt_names[];
+extern char *enctype_names[];
+#endif
+
+
+#define        ENCRYPT_NAME_OK(x)      ((unsigned int)(x) < ENCRYPT_CNT)
+#define        ENCRYPT_NAME(x)         encrypt_names[x]
+
+#define        ENCTYPE_NAME_OK(x)      ((unsigned int)(x) < ENCTYPE_CNT)
+#define        ENCTYPE_NAME(x)         enctype_names[x]
+
+#endif /* arpa/telnet.h */
diff --git a/lib/libdss-include/include/arpa/tftp.h b/lib/libdss-include/include/arpa/tftp.h
new file mode 100644 (file)
index 0000000..86e0b6e
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)tftp.h      8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _ARPA_TFTP_H
+#define        _ARPA_TFTP_H 1
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+#define        SEGSIZE         512             /* data segment size */
+
+/*
+ * Packet types.
+ */
+#define        RRQ     01                              /* read request */
+#define        WRQ     02                              /* write request */
+#define        DATA    03                              /* data packet */
+#define        ACK     04                              /* acknowledgement */
+#define        ERROR   05                              /* error code */
+
+struct tftphdr {
+       short   th_opcode;                      /* packet type */
+       union {
+               char    tu_padding[3];          /* sizeof() compat */
+               struct {
+                       union {
+                               unsigned short  tu_block;       /* block # */
+                               short   tu_code;                /* error code */
+                       } __attribute__ ((__packed__)) th_u3;
+                       char tu_data[0];        /* data or error string */
+               } __attribute__ ((__packed__)) th_u2;
+               char    tu_stuff[0];            /* request packet stuff */
+       } __attribute__ ((__packed__)) th_u1;
+} __attribute__ ((__packed__));
+
+#define        th_block        th_u1.th_u2.th_u3.tu_block
+#define        th_code         th_u1.th_u2.th_u3.tu_code
+#define        th_stuff        th_u1.tu_stuff
+#define        th_data         th_u1.th_u2.tu_data
+#define        th_msg          th_u1.th_u2.tu_data
+
+/*
+ * Error codes.
+ */
+#define        EUNDEF          0               /* not defined */
+#define        ENOTFOUND       1               /* file not found */
+#define        EACCESS         2               /* access violation */
+#define        ENOSPACE        3               /* disk full or allocation exceeded */
+#define        EBADOP          4               /* illegal TFTP operation */
+#define        EBADID          5               /* unknown transfer ID */
+#define        EEXISTS         6               /* file already exists */
+#define        ENOUSER         7               /* no such user */
+
+#endif /* arpa/tftp.h */
diff --git a/lib/libdss-include/include/asm-generic/auxvec.h b/lib/libdss-include/include/asm-generic/auxvec.h
new file mode 100644 (file)
index 0000000..b99573b
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __ASM_GENERIC_AUXVEC_H
+#define __ASM_GENERIC_AUXVEC_H
+/*
+ * Not all architectures need their own auxvec.h, the most
+ * common definitions are already in linux/auxvec.h.
+ */
+
+#endif /* __ASM_GENERIC_AUXVEC_H */
diff --git a/lib/libdss-include/include/asm-generic/bitsperlong.h b/lib/libdss-include/include/asm-generic/bitsperlong.h
new file mode 100644 (file)
index 0000000..f832c3c
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __ASM_GENERIC_BITS_PER_LONG
+#define __ASM_GENERIC_BITS_PER_LONG
+
+/*
+ * There seems to be no way of detecting this automatically from user
+ * space, so 64 bit architectures should override this in their
+ * bitsperlong.h. In particular, an architecture that supports
+ * both 32 and 64 bit user space must not rely on CONFIG_64BIT
+ * to decide it, but rather check a compiler provided macro.
+ */
+#ifndef __BITS_PER_LONG
+#define __BITS_PER_LONG 32
+#endif
+
+#endif /* __ASM_GENERIC_BITS_PER_LONG */
diff --git a/lib/libdss-include/include/asm-generic/errno-base.h b/lib/libdss-include/include/asm-generic/errno-base.h
new file mode 100644 (file)
index 0000000..6511597
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _ASM_GENERIC_ERRNO_BASE_H
+#define _ASM_GENERIC_ERRNO_BASE_H
+
+#define        EPERM            1      /* Operation not permitted */
+#define        ENOENT           2      /* No such file or directory */
+#define        ESRCH            3      /* No such process */
+#define        EINTR            4      /* Interrupted system call */
+#define        EIO              5      /* I/O error */
+#define        ENXIO            6      /* No such device or address */
+#define        E2BIG            7      /* Argument list too long */
+#define        ENOEXEC          8      /* Exec format error */
+#define        EBADF            9      /* Bad file number */
+#define        ECHILD          10      /* No child processes */
+#define        EAGAIN          11      /* Try again */
+#define        ENOMEM          12      /* Out of memory */
+#define        EACCES          13      /* Permission denied */
+#define        EFAULT          14      /* Bad address */
+#define        ENOTBLK         15      /* Block device required */
+#define        EBUSY           16      /* Device or resource busy */
+#define        EEXIST          17      /* File exists */
+#define        EXDEV           18      /* Cross-device link */
+#define        ENODEV          19      /* No such device */
+#define        ENOTDIR         20      /* Not a directory */
+#define        EISDIR          21      /* Is a directory */
+#define        EINVAL          22      /* Invalid argument */
+#define        ENFILE          23      /* File table overflow */
+#define        EMFILE          24      /* Too many open files */
+#define        ENOTTY          25      /* Not a typewriter */
+#define        ETXTBSY         26      /* Text file busy */
+#define        EFBIG           27      /* File too large */
+#define        ENOSPC          28      /* No space left on device */
+#define        ESPIPE          29      /* Illegal seek */
+#define        EROFS           30      /* Read-only file system */
+#define        EMLINK          31      /* Too many links */
+#define        EPIPE           32      /* Broken pipe */
+#define        EDOM            33      /* Math argument out of domain of func */
+#define        ERANGE          34      /* Math result not representable */
+
+#endif
diff --git a/lib/libdss-include/include/asm-generic/errno.h b/lib/libdss-include/include/asm-generic/errno.h
new file mode 100644 (file)
index 0000000..88e0914
--- /dev/null
@@ -0,0 +1,122 @@
+#ifndef _ASM_GENERIC_ERRNO_H
+#define _ASM_GENERIC_ERRNO_H
+
+#include <asm-generic/errno-base.h>
+
+#define        EDEADLK         35      /* Resource deadlock would occur */
+#define        ENAMETOOLONG    36      /* File name too long */
+#define        ENOLCK          37      /* No record locks available */
+
+/*
+ * This error code is special: arch syscall entry code will return
+ * -ENOSYS if users try to call a syscall that doesn't exist.  To keep
+ * failures of syscalls that really do exist distinguishable from
+ * failures due to attempts to use a nonexistent syscall, syscall
+ * implementations should refrain from returning -ENOSYS.
+ */
+#define        ENOSYS          38      /* Invalid system call number */
+
+#define        ENOTEMPTY       39      /* Directory not empty */
+#define        ELOOP           40      /* Too many symbolic links encountered */
+#define        EWOULDBLOCK     EAGAIN  /* Operation would block */
+#define        ENOMSG          42      /* No message of desired type */
+#define        EIDRM           43      /* Identifier removed */
+#define        ECHRNG          44      /* Channel number out of range */
+#define        EL2NSYNC        45      /* Level 2 not synchronized */
+#define        EL3HLT          46      /* Level 3 halted */
+#define        EL3RST          47      /* Level 3 reset */
+#define        ELNRNG          48      /* Link number out of range */
+#define        EUNATCH         49      /* Protocol driver not attached */
+#define        ENOCSI          50      /* No CSI structure available */
+#define        EL2HLT          51      /* Level 2 halted */
+#define        EBADE           52      /* Invalid exchange */
+#define        EBADR           53      /* Invalid request descriptor */
+#define        EXFULL          54      /* Exchange full */
+#define        ENOANO          55      /* No anode */
+#define        EBADRQC         56      /* Invalid request code */
+#define        EBADSLT         57      /* Invalid slot */
+
+#define        EDEADLOCK       EDEADLK
+
+#define        EBFONT          59      /* Bad font file format */
+#define        ENOSTR          60      /* Device not a stream */
+#define        ENODATA         61      /* No data available */
+#define        ETIME           62      /* Timer expired */
+#define        ENOSR           63      /* Out of streams resources */
+#define        ENONET          64      /* Machine is not on the network */
+#define        ENOPKG          65      /* Package not installed */
+#define        EREMOTE         66      /* Object is remote */
+#define        ENOLINK         67      /* Link has been severed */
+#define        EADV            68      /* Advertise error */
+#define        ESRMNT          69      /* Srmount error */
+#define        ECOMM           70      /* Communication error on send */
+#define        EPROTO          71      /* Protocol error */
+#define        EMULTIHOP       72      /* Multihop attempted */
+#define        EDOTDOT         73      /* RFS specific error */
+#define        EBADMSG         74      /* Not a data message */
+#define        EOVERFLOW       75      /* Value too large for defined data type */
+#define        ENOTUNIQ        76      /* Name not unique on network */
+#define        EBADFD          77      /* File descriptor in bad state */
+#define        EREMCHG         78      /* Remote address changed */
+#define        ELIBACC         79      /* Can not access a needed shared library */
+#define        ELIBBAD         80      /* Accessing a corrupted shared library */
+#define        ELIBSCN         81      /* .lib section in a.out corrupted */
+#define        ELIBMAX         82      /* Attempting to link in too many shared libraries */
+#define        ELIBEXEC        83      /* Cannot exec a shared library directly */
+#define        EILSEQ          84      /* Illegal byte sequence */
+#define        ERESTART        85      /* Interrupted system call should be restarted */
+#define        ESTRPIPE        86      /* Streams pipe error */
+#define        EUSERS          87      /* Too many users */
+#define        ENOTSOCK        88      /* Socket operation on non-socket */
+#define        EDESTADDRREQ    89      /* Destination address required */
+#define        EMSGSIZE        90      /* Message too long */
+#define        EPROTOTYPE      91      /* Protocol wrong type for socket */
+#define        ENOPROTOOPT     92      /* Protocol not available */
+#define        EPROTONOSUPPORT 93      /* Protocol not supported */
+#define        ESOCKTNOSUPPORT 94      /* Socket type not supported */
+#define        EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
+#define        EPFNOSUPPORT    96      /* Protocol family not supported */
+#define        EAFNOSUPPORT    97      /* Address family not supported by protocol */
+#define        EADDRINUSE      98      /* Address already in use */
+#define        EADDRNOTAVAIL   99      /* Cannot assign requested address */
+#define        ENETDOWN        100     /* Network is down */
+#define        ENETUNREACH     101     /* Network is unreachable */
+#define        ENETRESET       102     /* Network dropped connection because of reset */
+#define        ECONNABORTED    103     /* Software caused connection abort */
+#define        ECONNRESET      104     /* Connection reset by peer */
+#define        ENOBUFS         105     /* No buffer space available */
+#define        EISCONN         106     /* Transport endpoint is already connected */
+#define        ENOTCONN        107     /* Transport endpoint is not connected */
+#define        ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
+#define        ETOOMANYREFS    109     /* Too many references: cannot splice */
+#define        ETIMEDOUT       110     /* Connection timed out */
+#define        ECONNREFUSED    111     /* Connection refused */
+#define        EHOSTDOWN       112     /* Host is down */
+#define        EHOSTUNREACH    113     /* No route to host */
+#define        EALREADY        114     /* Operation already in progress */
+#define        EINPROGRESS     115     /* Operation now in progress */
+#define        ESTALE          116     /* Stale file handle */
+#define        EUCLEAN         117     /* Structure needs cleaning */
+#define        ENOTNAM         118     /* Not a XENIX named type file */
+#define        ENAVAIL         119     /* No XENIX semaphores available */
+#define        EISNAM          120     /* Is a named type file */
+#define        EREMOTEIO       121     /* Remote I/O error */
+#define        EDQUOT          122     /* Quota exceeded */
+
+#define        ENOMEDIUM       123     /* No medium found */
+#define        EMEDIUMTYPE     124     /* Wrong medium type */
+#define        ECANCELED       125     /* Operation Canceled */
+#define        ENOKEY          126     /* Required key not available */
+#define        EKEYEXPIRED     127     /* Key has expired */
+#define        EKEYREVOKED     128     /* Key has been revoked */
+#define        EKEYREJECTED    129     /* Key was rejected by service */
+
+/* for robust mutexes */
+#define        EOWNERDEAD      130     /* Owner died */
+#define        ENOTRECOVERABLE 131     /* State not recoverable */
+
+#define ERFKILL                132     /* Operation not possible due to RF-kill */
+
+#define EHWPOISON      133     /* Memory page has hardware error */
+
+#endif
diff --git a/lib/libdss-include/include/asm-generic/fcntl.h b/lib/libdss-include/include/asm-generic/fcntl.h
new file mode 100644 (file)
index 0000000..e063eff
--- /dev/null
@@ -0,0 +1,220 @@
+#ifndef _ASM_GENERIC_FCNTL_H
+#define _ASM_GENERIC_FCNTL_H
+
+#include <linux/types.h>
+
+/*
+ * FMODE_EXEC is 0x20
+ * FMODE_NONOTIFY is 0x4000000
+ * These cannot be used by userspace O_* until internal and external open
+ * flags are split.
+ * -Eric Paris
+ */
+
+/*
+ * When introducing new O_* bits, please check its uniqueness in fcntl_init().
+ */
+
+#define O_ACCMODE      00000003
+#define O_RDONLY       00000000
+#define O_WRONLY       00000001
+#define O_RDWR         00000002
+#ifndef O_CREAT
+#define O_CREAT                00000100        /* not fcntl */
+#endif
+#ifndef O_EXCL
+#define O_EXCL         00000200        /* not fcntl */
+#endif
+#ifndef O_NOCTTY
+#define O_NOCTTY       00000400        /* not fcntl */
+#endif
+#ifndef O_TRUNC
+#define O_TRUNC                00001000        /* not fcntl */
+#endif
+#ifndef O_APPEND
+#define O_APPEND       00002000
+#endif
+#ifndef O_NONBLOCK
+#define O_NONBLOCK     00004000
+#endif
+#ifndef O_DSYNC
+#define O_DSYNC                00010000        /* used to be O_SYNC, see below */
+#endif
+#ifndef FASYNC
+#define FASYNC         00020000        /* fcntl, for BSD compatibility */
+#endif
+#ifndef O_DIRECT
+#define O_DIRECT       00040000        /* direct disk access hint */
+#endif
+#ifndef O_LARGEFILE
+#define O_LARGEFILE    00100000
+#endif
+#ifndef O_DIRECTORY
+#define O_DIRECTORY    00200000        /* must be a directory */
+#endif
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW     00400000        /* don't follow links */
+#endif
+#ifndef O_NOATIME
+#define O_NOATIME      01000000
+#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC      02000000        /* set close_on_exec */
+#endif
+
+/*
+ * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
+ * the O_SYNC flag.  We continue to use the existing numerical value
+ * for O_DSYNC semantics now, but using the correct symbolic name for it.
+ * This new value is used to request true Posix O_SYNC semantics.  It is
+ * defined in this strange way to make sure applications compiled against
+ * new headers get at least O_DSYNC semantics on older kernels.
+ *
+ * This has the nice side-effect that we can simply test for O_DSYNC
+ * wherever we do not care if O_DSYNC or O_SYNC is used.
+ *
+ * Note: __O_SYNC must never be used directly.
+ */
+#ifndef O_SYNC
+#define __O_SYNC       04000000
+#define O_SYNC         (__O_SYNC|O_DSYNC)
+#endif
+
+#ifndef O_PATH
+#define O_PATH         010000000
+#endif
+
+#ifndef __O_TMPFILE
+#define __O_TMPFILE    020000000
+#endif
+
+/* a horrid kludge trying to make sure that this will fail on old kernels */
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
+#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)      
+
+#ifndef O_NDELAY
+#define O_NDELAY       O_NONBLOCK
+#endif
+
+#define F_DUPFD                0       /* dup */
+#define F_GETFD                1       /* get close_on_exec */
+#define F_SETFD                2       /* set/clear close_on_exec */
+#define F_GETFL                3       /* get file->f_flags */
+#define F_SETFL                4       /* set file->f_flags */
+#ifndef F_GETLK
+#define F_GETLK                5
+#define F_SETLK                6
+#define F_SETLKW       7
+#endif
+#ifndef F_SETOWN
+#define F_SETOWN       8       /* for sockets. */
+#define F_GETOWN       9       /* for sockets. */
+#endif
+#ifndef F_SETSIG
+#define F_SETSIG       10      /* for sockets. */
+#define F_GETSIG       11      /* for sockets. */
+#endif
+
+#ifndef CONFIG_64BIT
+#ifndef F_GETLK64
+#define F_GETLK64      12      /*  using 'struct flock64' */
+#define F_SETLK64      13
+#define F_SETLKW64     14
+#endif
+#endif
+
+#ifndef F_SETOWN_EX
+#define F_SETOWN_EX    15
+#define F_GETOWN_EX    16
+#endif
+
+#ifndef F_GETOWNER_UIDS
+#define F_GETOWNER_UIDS        17
+#endif
+
+/*
+ * Open File Description Locks
+ *
+ * Usually record locks held by a process are released on *any* close and are
+ * not inherited across a fork().
+ *
+ * These cmd values will set locks that conflict with process-associated
+ * record  locks, but are "owned" by the open file description, not the
+ * process. This means that they are inherited across fork() like BSD (flock)
+ * locks, and they are only released automatically when the last reference to
+ * the the open file against which they were acquired is put.
+ */
+#define F_OFD_GETLK    36
+#define F_OFD_SETLK    37
+#define F_OFD_SETLKW   38
+
+#define F_OWNER_TID    0
+#define F_OWNER_PID    1
+#define F_OWNER_PGRP   2
+
+struct f_owner_ex {
+       int     type;
+       __kernel_pid_t  pid;
+};
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#ifndef F_RDLCK
+#define F_RDLCK                0
+#define F_WRLCK                1
+#define F_UNLCK                2
+#endif
+
+/* for old implementation of bsd flock () */
+#ifndef F_EXLCK
+#define F_EXLCK                4       /* or 3 */
+#define F_SHLCK                8       /* or 4 */
+#endif
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH                1       /* shared lock */
+#define LOCK_EX                2       /* exclusive lock */
+#define LOCK_NB                4       /* or'd with one of the above to prevent
+                                  blocking */
+#define LOCK_UN                8       /* remove lock */
+
+#define LOCK_MAND      32      /* This is a mandatory flock ... */
+#define LOCK_READ      64      /* which allows concurrent read operations */
+#define LOCK_WRITE     128     /* which allows concurrent write operations */
+#define LOCK_RW                192     /* which allows concurrent read & write ops */
+
+#define F_LINUX_SPECIFIC_BASE  1024
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK
+#ifndef __ARCH_FLOCK_PAD
+#define __ARCH_FLOCK_PAD
+#endif
+
+struct flock {
+       short   l_type;
+       short   l_whence;
+       __kernel_off_t  l_start;
+       __kernel_off_t  l_len;
+       __kernel_pid_t  l_pid;
+       __ARCH_FLOCK_PAD
+};
+#endif
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK64
+#ifndef __ARCH_FLOCK64_PAD
+#define __ARCH_FLOCK64_PAD
+#endif
+
+struct flock64 {
+       short  l_type;
+       short  l_whence;
+       __kernel_loff_t l_start;
+       __kernel_loff_t l_len;
+       __kernel_pid_t  l_pid;
+       __ARCH_FLOCK64_PAD
+};
+#endif
+
+#endif /* _ASM_GENERIC_FCNTL_H */
diff --git a/lib/libdss-include/include/asm-generic/int-l64.h b/lib/libdss-include/include/asm-generic/int-l64.h
new file mode 100644 (file)
index 0000000..e271ae2
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * asm-generic/int-l64.h
+ *
+ * Integer declarations for architectures which use "long"
+ * for 64-bit types.
+ */
+
+#ifndef _ASM_GENERIC_INT_L64_H
+#define _ASM_GENERIC_INT_L64_H
+
+#include <asm/bitsperlong.h>
+
+#ifndef __ASSEMBLY__
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+typedef __signed__ long __s64;
+typedef unsigned long __u64;
+
+#endif /* __ASSEMBLY__ */
+
+
+#endif /* _ASM_GENERIC_INT_L64_H */
diff --git a/lib/libdss-include/include/asm-generic/int-ll64.h b/lib/libdss-include/include/asm-generic/int-ll64.h
new file mode 100644 (file)
index 0000000..0ede047
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * asm-generic/int-ll64.h
+ *
+ * Integer declarations for architectures which use "long long"
+ * for 64-bit types.
+ */
+
+#ifndef _ASM_GENERIC_INT_LL64_H
+#define _ASM_GENERIC_INT_LL64_H
+
+#include <asm/bitsperlong.h>
+
+#ifndef __ASSEMBLY__
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#ifdef __GNUC__
+__extension__ typedef __signed__ long long __s64;
+__extension__ typedef unsigned long long __u64;
+#else
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+
+#endif /* _ASM_GENERIC_INT_LL64_H */
diff --git a/lib/libdss-include/include/asm-generic/ioctl.h b/lib/libdss-include/include/asm-generic/ioctl.h
new file mode 100644 (file)
index 0000000..0da2c7d
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef _ASM_GENERIC_IOCTL_H
+#define _ASM_GENERIC_IOCTL_H
+
+/* ioctl command encoding: 32 bits total, command in lower 16 bits,
+ * size of the parameter structure in the lower 14 bits of the
+ * upper 16 bits.
+ * Encoding the size of the parameter structure in the ioctl request
+ * is useful for catching programs compiled with old versions
+ * and to avoid overwriting user space outside the user buffer area.
+ * The highest 2 bits are reserved for indicating the ``access mode''.
+ * NOTE: This limits the max parameter size to 16kB -1 !
+ */
+
+/*
+ * The following is for compatibility across the various Linux
+ * platforms.  The generic ioctl numbering scheme doesn't really enforce
+ * a type field.  De facto, however, the top 8 bits of the lower 16
+ * bits are indeed used as a type field, so we might just as well make
+ * this explicit here.  Please be sure to use the decoding macros
+ * below from now on.
+ */
+#define _IOC_NRBITS    8
+#define _IOC_TYPEBITS  8
+
+/*
+ * Let any architecture override either of the following before
+ * including this file.
+ */
+
+#ifndef _IOC_SIZEBITS
+# define _IOC_SIZEBITS 14
+#endif
+
+#ifndef _IOC_DIRBITS
+# define _IOC_DIRBITS  2
+#endif
+
+#define _IOC_NRMASK    ((1 << _IOC_NRBITS)-1)
+#define _IOC_TYPEMASK  ((1 << _IOC_TYPEBITS)-1)
+#define _IOC_SIZEMASK  ((1 << _IOC_SIZEBITS)-1)
+#define _IOC_DIRMASK   ((1 << _IOC_DIRBITS)-1)
+
+#define _IOC_NRSHIFT   0
+#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
+#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
+#define _IOC_DIRSHIFT  (_IOC_SIZESHIFT+_IOC_SIZEBITS)
+
+/*
+ * Direction bits, which any architecture can choose to override
+ * before including this file.
+ */
+
+#ifndef _IOC_NONE
+# define _IOC_NONE     0U
+#endif
+
+#ifndef _IOC_WRITE
+# define _IOC_WRITE    1U
+#endif
+
+#ifndef _IOC_READ
+# define _IOC_READ     2U
+#endif
+
+#define _IOC(dir,type,nr,size) \
+       (((dir)  << _IOC_DIRSHIFT) | \
+        ((type) << _IOC_TYPESHIFT) | \
+        ((nr)   << _IOC_NRSHIFT) | \
+        ((size) << _IOC_SIZESHIFT))
+
+#define _IOC_TYPECHECK(t) (sizeof(t))
+
+/* used to create numbers */
+#define _IO(type,nr)           _IOC(_IOC_NONE,(type),(nr),0)
+#define _IOR(type,nr,size)     _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOW(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
+#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
+#define _IOWR_BAD(type,nr,size)        _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
+
+/* used to decode ioctl numbers.. */
+#define _IOC_DIR(nr)           (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
+#define _IOC_TYPE(nr)          (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
+#define _IOC_NR(nr)            (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
+#define _IOC_SIZE(nr)          (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
+
+/* ...and for the drivers/sound files... */
+
+#define IOC_IN         (_IOC_WRITE << _IOC_DIRSHIFT)
+#define IOC_OUT                (_IOC_READ << _IOC_DIRSHIFT)
+#define IOC_INOUT      ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
+#define IOCSIZE_MASK   (_IOC_SIZEMASK << _IOC_SIZESHIFT)
+#define IOCSIZE_SHIFT  (_IOC_SIZESHIFT)
+
+#endif /* _ASM_GENERIC_IOCTL_H */
diff --git a/lib/libdss-include/include/asm-generic/ioctls.h b/lib/libdss-include/include/asm-generic/ioctls.h
new file mode 100644 (file)
index 0000000..467cdba
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef __ASM_GENERIC_IOCTLS_H
+#define __ASM_GENERIC_IOCTLS_H
+
+#include <linux/ioctl.h>
+
+/*
+ * These are the most common definitions for tty ioctl numbers.
+ * Most of them do not use the recommended _IOC(), but there is
+ * probably some source code out there hardcoding the number,
+ * so we might as well use them for all new platforms.
+ *
+ * The architectures that use different values here typically
+ * try to be compatible with some Unix variants for the same
+ * architecture.
+ */
+
+/* 0x54 is just a magic number to make these relatively unique ('T') */
+
+#define TCGETS         0x5401
+#define TCSETS         0x5402
+#define TCSETSW                0x5403
+#define TCSETSF                0x5404
+#define TCGETA         0x5405
+#define TCSETA         0x5406
+#define TCSETAW                0x5407
+#define TCSETAF                0x5408
+#define TCSBRK         0x5409
+#define TCXONC         0x540A
+#define TCFLSH         0x540B
+#define TIOCEXCL       0x540C
+#define TIOCNXCL       0x540D
+#define TIOCSCTTY      0x540E
+#define TIOCGPGRP      0x540F
+#define TIOCSPGRP      0x5410
+#define TIOCOUTQ       0x5411
+#define TIOCSTI                0x5412
+#define TIOCGWINSZ     0x5413
+#define TIOCSWINSZ     0x5414
+#define TIOCMGET       0x5415
+#define TIOCMBIS       0x5416
+#define TIOCMBIC       0x5417
+#define TIOCMSET       0x5418
+#define TIOCGSOFTCAR   0x5419
+#define TIOCSSOFTCAR   0x541A
+#define FIONREAD       0x541B
+#define TIOCINQ                FIONREAD
+#define TIOCLINUX      0x541C
+#define TIOCCONS       0x541D
+#define TIOCGSERIAL    0x541E
+#define TIOCSSERIAL    0x541F
+#define TIOCPKT                0x5420
+#define FIONBIO                0x5421
+#define TIOCNOTTY      0x5422
+#define TIOCSETD       0x5423
+#define TIOCGETD       0x5424
+#define TCSBRKP                0x5425  /* Needed for POSIX tcsendbreak() */
+#define TIOCSBRK       0x5427  /* BSD compatibility */
+#define TIOCCBRK       0x5428  /* BSD compatibility */
+#define TIOCGSID       0x5429  /* Return the session ID of FD */
+#define TCGETS2                _IOR('T', 0x2A, struct termios2)
+#define TCSETS2                _IOW('T', 0x2B, struct termios2)
+#define TCSETSW2       _IOW('T', 0x2C, struct termios2)
+#define TCSETSF2       _IOW('T', 0x2D, struct termios2)
+#define TIOCGRS485     0x542E
+#ifndef TIOCSRS485
+#define TIOCSRS485     0x542F
+#endif
+#define TIOCGPTN       _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
+#define TIOCSPTLCK     _IOW('T', 0x31, int)  /* Lock/unlock Pty */
+#define TIOCGDEV       _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
+#define TCGETX         0x5432 /* SYS5 TCGETX compatibility */
+#define TCSETX         0x5433
+#define TCSETXF                0x5434
+#define TCSETXW                0x5435
+#define TIOCSIG                _IOW('T', 0x36, int)  /* pty: generate signal */
+#define TIOCVHANGUP    0x5437
+#define TIOCGPKT       _IOR('T', 0x38, int) /* Get packet mode state */
+#define TIOCGPTLCK     _IOR('T', 0x39, int) /* Get Pty lock state */
+#define TIOCGEXCL      _IOR('T', 0x40, int) /* Get exclusive mode state */
+
+#define FIONCLEX       0x5450
+#define FIOCLEX                0x5451
+#define FIOASYNC       0x5452
+#define TIOCSERCONFIG  0x5453
+#define TIOCSERGWILD   0x5454
+#define TIOCSERSWILD   0x5455
+#define TIOCGLCKTRMIOS 0x5456
+#define TIOCSLCKTRMIOS 0x5457
+#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
+#define TIOCSERGETLSR   0x5459 /* Get line status register */
+#define TIOCSERGETMULTI 0x545A /* Get multiport config  */
+#define TIOCSERSETMULTI 0x545B /* Set multiport config */
+
+#define TIOCMIWAIT     0x545C  /* wait for a change on serial input line(s) */
+#define TIOCGICOUNT    0x545D  /* read serial port __inline__ interrupt counts */
+
+/*
+ * Some arches already define FIOQSIZE due to a historical
+ * conflict with a Hayes modem-specific ioctl value.
+ */
+#ifndef FIOQSIZE
+# define FIOQSIZE      0x5460
+#endif
+
+/* Used for packet mode */
+#define TIOCPKT_DATA            0
+#define TIOCPKT_FLUSHREAD       1
+#define TIOCPKT_FLUSHWRITE      2
+#define TIOCPKT_STOP            4
+#define TIOCPKT_START           8
+#define TIOCPKT_NOSTOP         16
+#define TIOCPKT_DOSTOP         32
+#define TIOCPKT_IOCTL          64
+
+#define TIOCSER_TEMT   0x01    /* Transmitter physically empty */
+
+#endif /* __ASM_GENERIC_IOCTLS_H */
diff --git a/lib/libdss-include/include/asm-generic/ipcbuf.h b/lib/libdss-include/include/asm-generic/ipcbuf.h
new file mode 100644 (file)
index 0000000..3dbcc1e
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __ASM_GENERIC_IPCBUF_H
+#define __ASM_GENERIC_IPCBUF_H
+
+/*
+ * The generic ipc64_perm structure:
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * ipc64_perm was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * Pad space is left for:
+ * - 32-bit mode_t on architectures that only had 16 bit
+ * - 32-bit seq
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct ipc64_perm {
+       __kernel_key_t          key;
+       __kernel_uid32_t        uid;
+       __kernel_gid32_t        gid;
+       __kernel_uid32_t        cuid;
+       __kernel_gid32_t        cgid;
+       __kernel_mode_t         mode;
+                               /* pad if mode_t is u16: */
+       unsigned char           __pad1[4 - sizeof(__kernel_mode_t)];
+       unsigned short          seq;
+       unsigned short          __pad2;
+       __kernel_ulong_t        __unused1;
+       __kernel_ulong_t        __unused2;
+};
+
+#endif /* __ASM_GENERIC_IPCBUF_H */
diff --git a/lib/libdss-include/include/asm-generic/kvm_para.h b/lib/libdss-include/include/asm-generic/kvm_para.h
new file mode 100644 (file)
index 0000000..486f0af
--- /dev/null
@@ -0,0 +1,4 @@
+/*
+ * There isn't anything here, but the file must not be empty or patch
+ * will delete it.
+ */
diff --git a/lib/libdss-include/include/asm-generic/mman-common.h b/lib/libdss-include/include/asm-generic/mman-common.h
new file mode 100644 (file)
index 0000000..a74dd84
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef __ASM_GENERIC_MMAN_COMMON_H
+#define __ASM_GENERIC_MMAN_COMMON_H
+
+/*
+ Author: Michael S. Tsirkin <mst@mellanox.co.il>, Mellanox Technologies Ltd.
+ Based on: asm-xxx/mman.h
+*/
+
+#define PROT_READ      0x1             /* page can be read */
+#define PROT_WRITE     0x2             /* page can be written */
+#define PROT_EXEC      0x4             /* page can be executed */
+#define PROT_SEM       0x8             /* page may be used for atomic ops */
+#define PROT_NONE      0x0             /* page can not be accessed */
+#define PROT_GROWSDOWN 0x01000000      /* mprotect flag: extend change to start of growsdown vma */
+#define PROT_GROWSUP   0x02000000      /* mprotect flag: extend change to end of growsup vma */
+
+#define MAP_SHARED     0x01            /* Share changes */
+#define MAP_PRIVATE    0x02            /* Changes are private */
+#define MAP_TYPE       0x0f            /* Mask for type of mapping */
+#define MAP_FIXED      0x10            /* Interpret addr exactly */
+#define MAP_ANONYMOUS  0x20            /* don't use a file */
+#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
+# define MAP_UNINITIALIZED 0x4000000   /* For anonymous mmap, memory could be uninitialized */
+#else
+# define MAP_UNINITIALIZED 0x0         /* Don't support this flag */
+#endif
+
+/*
+ * Flags for mlock
+ */
+#define MLOCK_ONFAULT  0x01            /* Lock pages in range after they are faulted in, do not prefault */
+
+#define MS_ASYNC       1               /* sync memory asynchronously */
+#define MS_INVALIDATE  2               /* invalidate the caches */
+#define MS_SYNC                4               /* synchronous memory sync */
+
+#define MADV_NORMAL    0               /* no further special treatment */
+#define MADV_RANDOM    1               /* expect random page references */
+#define MADV_SEQUENTIAL        2               /* expect sequential page references */
+#define MADV_WILLNEED  3               /* will need these pages */
+#define MADV_DONTNEED  4               /* don't need these pages */
+
+/* common parameters: try to keep these consistent across architectures */
+#define MADV_REMOVE    9               /* remove these pages & resources */
+#define MADV_DONTFORK  10              /* don't inherit across fork */
+#define MADV_DOFORK    11              /* do inherit across fork */
+#define MADV_HWPOISON  100             /* poison a page for testing */
+#define MADV_SOFT_OFFLINE 101          /* soft offline page for testing */
+
+#define MADV_MERGEABLE   12            /* KSM may merge identical pages */
+#define MADV_UNMERGEABLE 13            /* KSM may not merge identical pages */
+
+#define MADV_HUGEPAGE  14              /* Worth backing with hugepages */
+#define MADV_NOHUGEPAGE        15              /* Not worth backing with hugepages */
+
+#define MADV_DONTDUMP   16             /* Explicity exclude from the core dump,
+                                          overrides the coredump filter bits */
+#define MADV_DODUMP    17              /* Clear the MADV_DONTDUMP flag */
+
+/* compatibility flags */
+#define MAP_FILE       0
+
+/*
+ * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.
+ * This gives us 6 bits, which is enough until someone invents 128 bit address
+ * spaces.
+ *
+ * Assume these are all power of twos.
+ * When 0 use the default page size.
+ */
+#define MAP_HUGE_SHIFT 26
+#define MAP_HUGE_MASK  0x3f
+
+#endif /* __ASM_GENERIC_MMAN_COMMON_H */
diff --git a/lib/libdss-include/include/asm-generic/mman.h b/lib/libdss-include/include/asm-generic/mman.h
new file mode 100644 (file)
index 0000000..7162cd4
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __ASM_GENERIC_MMAN_H
+#define __ASM_GENERIC_MMAN_H
+
+#include <asm-generic/mman-common.h>
+
+#define MAP_GROWSDOWN  0x0100          /* stack-like segment */
+#define MAP_DENYWRITE  0x0800          /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000          /* mark it as an executable */
+#define MAP_LOCKED     0x2000          /* pages are locked */
+#define MAP_NORESERVE  0x4000          /* don't check for reservations */
+#define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
+#define MAP_NONBLOCK   0x10000         /* do not block on IO */
+#define MAP_STACK      0x20000         /* give out an address that is best suited for process/thread stacks */
+#define MAP_HUGETLB    0x40000         /* create a huge page mapping */
+
+/* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
+
+#define MCL_CURRENT    1               /* lock all current mappings */
+#define MCL_FUTURE     2               /* lock all future mappings */
+#define MCL_ONFAULT    4               /* lock all pages that are faulted in */
+
+#endif /* __ASM_GENERIC_MMAN_H */
diff --git a/lib/libdss-include/include/asm-generic/msgbuf.h b/lib/libdss-include/include/asm-generic/msgbuf.h
new file mode 100644 (file)
index 0000000..f55ecc4
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef __ASM_GENERIC_MSGBUF_H
+#define __ASM_GENERIC_MSGBUF_H
+
+#include <asm/bitsperlong.h>
+/*
+ * generic msqid64_ds structure.
+ *
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * msqid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first three padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct msqid64_ds {
+       struct ipc64_perm msg_perm;
+       __kernel_time_t msg_stime;      /* last msgsnd time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused1;
+#endif
+       __kernel_time_t msg_rtime;      /* last msgrcv time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused2;
+#endif
+       __kernel_time_t msg_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused3;
+#endif
+       __kernel_ulong_t msg_cbytes;    /* current number of bytes on queue */
+       __kernel_ulong_t msg_qnum;      /* number of messages in queue */
+       __kernel_ulong_t msg_qbytes;    /* max number of bytes on queue */
+       __kernel_pid_t msg_lspid;       /* pid of last msgsnd */
+       __kernel_pid_t msg_lrpid;       /* last receive pid */
+       __kernel_ulong_t __unused4;
+       __kernel_ulong_t __unused5;
+};
+
+#endif /* __ASM_GENERIC_MSGBUF_H */
diff --git a/lib/libdss-include/include/asm-generic/param.h b/lib/libdss-include/include/asm-generic/param.h
new file mode 100644 (file)
index 0000000..bd69ff3
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __ASM_GENERIC_PARAM_H
+#define __ASM_GENERIC_PARAM_H
+
+#ifndef HZ
+#define HZ 100
+#endif
+
+#ifndef EXEC_PAGESIZE
+#define EXEC_PAGESIZE  4096
+#endif
+
+#ifndef NOGROUP
+#define NOGROUP                (-1)
+#endif
+
+#define MAXHOSTNAMELEN 64      /* max length of hostname */
+
+
+#endif /* __ASM_GENERIC_PARAM_H */
diff --git a/lib/libdss-include/include/asm-generic/poll.h b/lib/libdss-include/include/asm-generic/poll.h
new file mode 100644 (file)
index 0000000..a969498
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef __ASM_GENERIC_POLL_H
+#define __ASM_GENERIC_POLL_H
+
+/* These are specified by iBCS2 */
+#define POLLIN         0x0001
+#define POLLPRI                0x0002
+#define POLLOUT                0x0004
+#define POLLERR                0x0008
+#define POLLHUP                0x0010
+#define POLLNVAL       0x0020
+
+/* The rest seem to be more-or-less nonstandard. Check them! */
+#define POLLRDNORM     0x0040
+#define POLLRDBAND     0x0080
+#ifndef POLLWRNORM
+#define POLLWRNORM     0x0100
+#endif
+#ifndef POLLWRBAND
+#define POLLWRBAND     0x0200
+#endif
+#ifndef POLLMSG
+#define POLLMSG                0x0400
+#endif
+#ifndef POLLREMOVE
+#define POLLREMOVE     0x1000
+#endif
+#ifndef POLLRDHUP
+#define POLLRDHUP       0x2000
+#endif
+
+#define POLLFREE       0x4000  /* currently only for epoll */
+
+#define POLL_BUSY_LOOP 0x8000
+
+struct pollfd {
+       int fd;
+       short events;
+       short revents;
+};
+
+#endif /* __ASM_GENERIC_POLL_H */
diff --git a/lib/libdss-include/include/asm-generic/posix_types.h b/lib/libdss-include/include/asm-generic/posix_types.h
new file mode 100644 (file)
index 0000000..fe74fcc
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef __ASM_GENERIC_POSIX_TYPES_H
+#define __ASM_GENERIC_POSIX_TYPES_H
+
+#include <asm/bitsperlong.h>
+/*
+ * This file is generally used by user-level software, so you need to
+ * be a little careful about namespace pollution etc.
+ *
+ * First the types that are often defined in different ways across
+ * architectures, so that you can override them.
+ */
+
+#ifndef __kernel_long_t
+typedef long           __kernel_long_t;
+typedef unsigned long  __kernel_ulong_t;
+#endif
+
+#ifndef __kernel_ino_t
+typedef __kernel_ulong_t __kernel_ino_t;
+#endif
+
+#ifndef __kernel_mode_t
+typedef unsigned int   __kernel_mode_t;
+#endif
+
+#ifndef __kernel_pid_t
+typedef int            __kernel_pid_t;
+#endif
+
+#ifndef __kernel_ipc_pid_t
+typedef int            __kernel_ipc_pid_t;
+#endif
+
+#ifndef __kernel_uid_t
+typedef unsigned int   __kernel_uid_t;
+typedef unsigned int   __kernel_gid_t;
+#endif
+
+#ifndef __kernel_suseconds_t
+typedef __kernel_long_t                __kernel_suseconds_t;
+#endif
+
+#ifndef __kernel_daddr_t
+typedef int            __kernel_daddr_t;
+#endif
+
+#ifndef __kernel_uid32_t
+typedef unsigned int   __kernel_uid32_t;
+typedef unsigned int   __kernel_gid32_t;
+#endif
+
+#ifndef __kernel_old_uid_t
+typedef __kernel_uid_t __kernel_old_uid_t;
+typedef __kernel_gid_t __kernel_old_gid_t;
+#endif
+
+#ifndef __kernel_old_dev_t
+typedef unsigned int   __kernel_old_dev_t;
+#endif
+
+/*
+ * Most 32 bit architectures use "unsigned int" size_t,
+ * and all 64 bit architectures use "unsigned long" size_t.
+ */
+#ifndef __kernel_size_t
+#if __BITS_PER_LONG != 64
+typedef unsigned int   __kernel_size_t;
+typedef int            __kernel_ssize_t;
+typedef int            __kernel_ptrdiff_t;
+#else
+typedef __kernel_ulong_t __kernel_size_t;
+typedef __kernel_long_t        __kernel_ssize_t;
+typedef __kernel_long_t        __kernel_ptrdiff_t;
+#endif
+#endif
+
+#ifndef __kernel_fsid_t
+typedef struct {
+       int     val[2];
+} __kernel_fsid_t;
+#endif
+
+/*
+ * anything below here should be completely generic
+ */
+typedef __kernel_long_t        __kernel_off_t;
+typedef long long      __kernel_loff_t;
+typedef __kernel_long_t        __kernel_time_t;
+typedef __kernel_long_t        __kernel_clock_t;
+typedef int            __kernel_timer_t;
+typedef int            __kernel_clockid_t;
+typedef char *         __kernel_caddr_t;
+typedef unsigned short __kernel_uid16_t;
+typedef unsigned short __kernel_gid16_t;
+
+#endif /* __ASM_GENERIC_POSIX_TYPES_H */
diff --git a/lib/libdss-include/include/asm-generic/resource.h b/lib/libdss-include/include/asm-generic/resource.h
new file mode 100644 (file)
index 0000000..498fd28
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _ASM_GENERIC_RESOURCE_H
+#define _ASM_GENERIC_RESOURCE_H
+
+/*
+ * Resource limit IDs
+ *
+ * ( Compatibility detail: there are architectures that have
+ *   a different rlimit ID order in the 5-9 range and want
+ *   to keep that order for binary compatibility. The reasons
+ *   are historic and all new rlimits are identical across all
+ *   arches. If an arch has such special order for some rlimits
+ *   then it defines them prior including asm-generic/resource.h. )
+ */
+
+#define RLIMIT_CPU             0       /* CPU time in sec */
+#define RLIMIT_FSIZE           1       /* Maximum filesize */
+#define RLIMIT_DATA            2       /* max data size */
+#define RLIMIT_STACK           3       /* max stack size */
+#define RLIMIT_CORE            4       /* max core file size */
+
+#ifndef RLIMIT_RSS
+# define RLIMIT_RSS            5       /* max resident set size */
+#endif
+
+#ifndef RLIMIT_NPROC
+# define RLIMIT_NPROC          6       /* max number of processes */
+#endif
+
+#ifndef RLIMIT_NOFILE
+# define RLIMIT_NOFILE         7       /* max number of open files */
+#endif
+
+#ifndef RLIMIT_MEMLOCK
+# define RLIMIT_MEMLOCK                8       /* max locked-in-memory address space */
+#endif
+
+#ifndef RLIMIT_AS
+# define RLIMIT_AS             9       /* address space limit */
+#endif
+
+#define RLIMIT_LOCKS           10      /* maximum file locks held */
+#define RLIMIT_SIGPENDING      11      /* max number of pending signals */
+#define RLIMIT_MSGQUEUE                12      /* maximum bytes in POSIX mqueues */
+#define RLIMIT_NICE            13      /* max nice prio allowed to raise to
+                                          0-39 for nice level 19 .. -20 */
+#define RLIMIT_RTPRIO          14      /* maximum realtime priority */
+#define RLIMIT_RTTIME          15      /* timeout for RT tasks in us */
+#define RLIM_NLIMITS           16
+
+/*
+ * SuS says limits have to be unsigned.
+ * Which makes a ton more sense anyway.
+ *
+ * Some architectures override this (for compatibility reasons):
+ */
+#ifndef RLIM_INFINITY
+# define RLIM_INFINITY         (~0UL)
+#endif
+
+
+#endif /* _ASM_GENERIC_RESOURCE_H */
diff --git a/lib/libdss-include/include/asm-generic/sembuf.h b/lib/libdss-include/include/asm-generic/sembuf.h
new file mode 100644 (file)
index 0000000..4cb2c13
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef __ASM_GENERIC_SEMBUF_H
+#define __ASM_GENERIC_SEMBUF_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * The semid64_ds structure for x86 architecture.
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * semid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first two padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+struct semid64_ds {
+       struct ipc64_perm sem_perm;     /* permissions .. see ipc.h */
+       __kernel_time_t sem_otime;      /* last semop time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused1;
+#endif
+       __kernel_time_t sem_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long   __unused2;
+#endif
+       unsigned long   sem_nsems;      /* no. of semaphores in array */
+       unsigned long   __unused3;
+       unsigned long   __unused4;
+};
+
+#endif /* __ASM_GENERIC_SEMBUF_H */
diff --git a/lib/libdss-include/include/asm-generic/setup.h b/lib/libdss-include/include/asm-generic/setup.h
new file mode 100644 (file)
index 0000000..6fc26a5
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __ASM_GENERIC_SETUP_H
+#define __ASM_GENERIC_SETUP_H
+
+#define COMMAND_LINE_SIZE      512
+
+#endif /* __ASM_GENERIC_SETUP_H */
diff --git a/lib/libdss-include/include/asm-generic/shmbuf.h b/lib/libdss-include/include/asm-generic/shmbuf.h
new file mode 100644 (file)
index 0000000..7e9fb2f
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __ASM_GENERIC_SHMBUF_H
+#define __ASM_GENERIC_SHMBUF_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * The shmid64_ds structure for x86 architecture.
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * shmid64_ds was originally meant to be architecture specific, but
+ * everyone just ended up making identical copies without specific
+ * optimizations, so we may just as well all use the same one.
+ *
+ * 64 bit architectures typically define a 64 bit __kernel_time_t,
+ * so they do not need the first two padding words.
+ * On big-endian systems, the padding is in the wrong place.
+ *
+ *
+ * Pad space is left for:
+ * - 64-bit time_t to solve y2038 problem
+ * - 2 miscellaneous 32-bit values
+ */
+
+struct shmid64_ds {
+       struct ipc64_perm       shm_perm;       /* operation perms */
+       size_t                  shm_segsz;      /* size of segment (bytes) */
+       __kernel_time_t         shm_atime;      /* last attach time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused1;
+#endif
+       __kernel_time_t         shm_dtime;      /* last detach time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused2;
+#endif
+       __kernel_time_t         shm_ctime;      /* last change time */
+#if __BITS_PER_LONG != 64
+       unsigned long           __unused3;
+#endif
+       __kernel_pid_t          shm_cpid;       /* pid of creator */
+       __kernel_pid_t          shm_lpid;       /* pid of last operator */
+       __kernel_ulong_t        shm_nattch;     /* no. of current attaches */
+       __kernel_ulong_t        __unused4;
+       __kernel_ulong_t        __unused5;
+};
+
+struct shminfo64 {
+       __kernel_ulong_t        shmmax;
+       __kernel_ulong_t        shmmin;
+       __kernel_ulong_t        shmmni;
+       __kernel_ulong_t        shmseg;
+       __kernel_ulong_t        shmall;
+       __kernel_ulong_t        __unused1;
+       __kernel_ulong_t        __unused2;
+       __kernel_ulong_t        __unused3;
+       __kernel_ulong_t        __unused4;
+};
+
+#endif /* __ASM_GENERIC_SHMBUF_H */
diff --git a/lib/libdss-include/include/asm-generic/shmparam.h b/lib/libdss-include/include/asm-generic/shmparam.h
new file mode 100644 (file)
index 0000000..51a3852
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __ASM_GENERIC_SHMPARAM_H
+#define __ASM_GENERIC_SHMPARAM_H
+
+#define SHMLBA PAGE_SIZE        /* attach addr a multiple of this */
+
+#endif /* _ASM_GENERIC_SHMPARAM_H */
diff --git a/lib/libdss-include/include/asm-generic/siginfo.h b/lib/libdss-include/include/asm-generic/siginfo.h
new file mode 100644 (file)
index 0000000..ac972ad
--- /dev/null
@@ -0,0 +1,303 @@
+#ifndef _ASM_GENERIC_SIGINFO_H
+#define _ASM_GENERIC_SIGINFO_H
+
+
+#include <linux/types.h>
+
+typedef union sigval {
+       int sival_int;
+       void *sival_ptr;
+} sigval_t;
+
+/*
+ * This is the size (including padding) of the part of the
+ * struct siginfo that is before the union.
+ */
+#ifndef __ARCH_SI_PREAMBLE_SIZE
+#define __ARCH_SI_PREAMBLE_SIZE        (3 * sizeof(int))
+#endif
+
+#define SI_MAX_SIZE    128
+#ifndef SI_PAD_SIZE
+#define SI_PAD_SIZE    ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
+#endif
+
+#ifndef __ARCH_SI_UID_T
+#define __ARCH_SI_UID_T        __kernel_uid32_t
+#endif
+
+/*
+ * The default "si_band" type is "long", as specified by POSIX.
+ * However, some architectures want to override this to "int"
+ * for historical compatibility reasons, so we allow that.
+ */
+#ifndef __ARCH_SI_BAND_T
+#define __ARCH_SI_BAND_T long
+#endif
+
+#ifndef __ARCH_SI_CLOCK_T
+#define __ARCH_SI_CLOCK_T __kernel_clock_t
+#endif
+
+#ifndef __ARCH_SI_ATTRIBUTES
+#define __ARCH_SI_ATTRIBUTES
+#endif
+
+#ifndef HAVE_ARCH_SIGINFO_T
+
+typedef struct siginfo {
+       int si_signo;
+       int si_errno;
+       int si_code;
+
+       union {
+               int _pad[SI_PAD_SIZE];
+
+               /* kill() */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+               } _kill;
+
+               /* POSIX.1b timers */
+               struct {
+                       __kernel_timer_t _tid;  /* timer id */
+                       int _overrun;           /* overrun count */
+                       char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
+                       sigval_t _sigval;       /* same as below */
+                       int _sys_private;       /* not to be passed to user */
+               } _timer;
+
+               /* POSIX.1b signals */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+                       sigval_t _sigval;
+               } _rt;
+
+               /* SIGCHLD */
+               struct {
+                       __kernel_pid_t _pid;    /* which child */
+                       __ARCH_SI_UID_T _uid;   /* sender's uid */
+                       int _status;            /* exit code */
+                       __ARCH_SI_CLOCK_T _utime;
+                       __ARCH_SI_CLOCK_T _stime;
+               } _sigchld;
+
+               /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+               struct {
+                       void *_addr; /* faulting insn/memory ref. */
+#ifdef __ARCH_SI_TRAPNO
+                       int _trapno;    /* TRAP # which caused the signal */
+#endif
+                       short _addr_lsb; /* LSB of the reported address */
+                       struct {
+                               void *_lower;
+                               void *_upper;
+                       } _addr_bnd;
+               } _sigfault;
+
+               /* SIGPOLL */
+               struct {
+                       __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
+                       int _fd;
+               } _sigpoll;
+
+               /* SIGSYS */
+               struct {
+                       void *_call_addr; /* calling user insn */
+                       int _syscall;   /* triggering system call number */
+                       unsigned int _arch;     /* AUDIT_ARCH_* of syscall */
+               } _sigsys;
+       } _sifields;
+} __ARCH_SI_ATTRIBUTES siginfo_t;
+
+/* If the arch shares siginfo, then it has SIGSYS. */
+#define __ARCH_SIGSYS
+#endif
+
+/*
+ * How these fields are to be accessed.
+ */
+#define si_pid         _sifields._kill._pid
+#define si_uid         _sifields._kill._uid
+#define si_tid         _sifields._timer._tid
+#define si_overrun     _sifields._timer._overrun
+#define si_sys_private  _sifields._timer._sys_private
+#define si_status      _sifields._sigchld._status
+#define si_utime       _sifields._sigchld._utime
+#define si_stime       _sifields._sigchld._stime
+#define si_value       _sifields._rt._sigval
+#define si_int         _sifields._rt._sigval.sival_int
+#define si_ptr         _sifields._rt._sigval.sival_ptr
+#define si_addr                _sifields._sigfault._addr
+#ifdef __ARCH_SI_TRAPNO
+#define si_trapno      _sifields._sigfault._trapno
+#endif
+#define si_addr_lsb    _sifields._sigfault._addr_lsb
+#define si_lower       _sifields._sigfault._addr_bnd._lower
+#define si_upper       _sifields._sigfault._addr_bnd._upper
+#define si_band                _sifields._sigpoll._band
+#define si_fd          _sifields._sigpoll._fd
+#ifdef __ARCH_SIGSYS
+#define si_call_addr   _sifields._sigsys._call_addr
+#define si_syscall     _sifields._sigsys._syscall
+#define si_arch                _sifields._sigsys._arch
+#endif
+
+#define __SI_KILL      0
+#define __SI_TIMER     0
+#define __SI_POLL      0
+#define __SI_FAULT     0
+#define __SI_CHLD      0
+#define __SI_RT                0
+#define __SI_MESGQ     0
+#define __SI_SYS       0
+#define __SI_CODE(T,N) (N)
+
+/*
+ * si_code values
+ * Digital reserves positive values for kernel-generated signals.
+ */
+#define SI_USER                0               /* sent by kill, sigsend, raise */
+#define SI_KERNEL      0x80            /* sent by the kernel from somewhere */
+#define SI_QUEUE       -1              /* sent by sigqueue */
+#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
+#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
+#define SI_ASYNCIO     -4              /* sent by AIO completion */
+#define SI_SIGIO       -5              /* sent by queued SIGIO */
+#define SI_TKILL       -6              /* sent by tkill system call */
+#define SI_DETHREAD    -7              /* sent by execve() killing subsidiary threads */
+
+#define SI_FROMUSER(siptr)     ((siptr)->si_code <= 0)
+#define SI_FROMKERNEL(siptr)   ((siptr)->si_code > 0)
+
+/*
+ * SIGILL si_codes
+ */
+#define ILL_ILLOPC     (__SI_FAULT|1)  /* illegal opcode */
+#define ILL_ILLOPN     (__SI_FAULT|2)  /* illegal operand */
+#define ILL_ILLADR     (__SI_FAULT|3)  /* illegal addressing mode */
+#define ILL_ILLTRP     (__SI_FAULT|4)  /* illegal trap */
+#define ILL_PRVOPC     (__SI_FAULT|5)  /* privileged opcode */
+#define ILL_PRVREG     (__SI_FAULT|6)  /* privileged register */
+#define ILL_COPROC     (__SI_FAULT|7)  /* coprocessor error */
+#define ILL_BADSTK     (__SI_FAULT|8)  /* internal stack error */
+#define NSIGILL                8
+
+/*
+ * SIGFPE si_codes
+ */
+#define FPE_INTDIV     (__SI_FAULT|1)  /* integer divide by zero */
+#define FPE_INTOVF     (__SI_FAULT|2)  /* integer overflow */
+#define FPE_FLTDIV     (__SI_FAULT|3)  /* floating point divide by zero */
+#define FPE_FLTOVF     (__SI_FAULT|4)  /* floating point overflow */
+#define FPE_FLTUND     (__SI_FAULT|5)  /* floating point underflow */
+#define FPE_FLTRES     (__SI_FAULT|6)  /* floating point inexact result */
+#define FPE_FLTINV     (__SI_FAULT|7)  /* floating point invalid operation */
+#define FPE_FLTSUB     (__SI_FAULT|8)  /* subscript out of range */
+#define NSIGFPE                8
+
+/*
+ * SIGSEGV si_codes
+ */
+#define SEGV_MAPERR    (__SI_FAULT|1)  /* address not mapped to object */
+#define SEGV_ACCERR    (__SI_FAULT|2)  /* invalid permissions for mapped object */
+#define SEGV_BNDERR    (__SI_FAULT|3)  /* failed address bound checks */
+#define NSIGSEGV       3
+
+/*
+ * SIGBUS si_codes
+ */
+#define BUS_ADRALN     (__SI_FAULT|1)  /* invalid address alignment */
+#define BUS_ADRERR     (__SI_FAULT|2)  /* non-existent physical address */
+#define BUS_OBJERR     (__SI_FAULT|3)  /* object specific hardware error */
+/* hardware memory error consumed on a machine check: action required */
+#define BUS_MCEERR_AR  (__SI_FAULT|4)
+/* hardware memory error detected in process but not consumed: action optional*/
+#define BUS_MCEERR_AO  (__SI_FAULT|5)
+#define NSIGBUS                5
+
+/*
+ * SIGTRAP si_codes
+ */
+#define TRAP_BRKPT     (__SI_FAULT|1)  /* process breakpoint */
+#define TRAP_TRACE     (__SI_FAULT|2)  /* process trace trap */
+#define TRAP_BRANCH     (__SI_FAULT|3)  /* process taken branch trap */
+#define TRAP_HWBKPT     (__SI_FAULT|4)  /* hardware breakpoint/watchpoint */
+#define NSIGTRAP       4
+
+/*
+ * SIGCHLD si_codes
+ */
+#define CLD_EXITED     (__SI_CHLD|1)   /* child has exited */
+#define CLD_KILLED     (__SI_CHLD|2)   /* child was killed */
+#define CLD_DUMPED     (__SI_CHLD|3)   /* child terminated abnormally */
+#define CLD_TRAPPED    (__SI_CHLD|4)   /* traced child has trapped */
+#define CLD_STOPPED    (__SI_CHLD|5)   /* child has stopped */
+#define CLD_CONTINUED  (__SI_CHLD|6)   /* stopped child has continued */
+#define NSIGCHLD       6
+
+/*
+ * SIGPOLL si_codes
+ */
+#define POLL_IN                (__SI_POLL|1)   /* data input available */
+#define POLL_OUT       (__SI_POLL|2)   /* output buffers available */
+#define POLL_MSG       (__SI_POLL|3)   /* input message available */
+#define POLL_ERR       (__SI_POLL|4)   /* i/o error */
+#define POLL_PRI       (__SI_POLL|5)   /* high priority input available */
+#define POLL_HUP       (__SI_POLL|6)   /* device disconnected */
+#define NSIGPOLL       6
+
+/*
+ * SIGSYS si_codes
+ */
+#define SYS_SECCOMP            (__SI_SYS|1)    /* seccomp triggered */
+#define NSIGSYS        1
+
+/*
+ * sigevent definitions
+ * 
+ * It seems likely that SIGEV_THREAD will have to be handled from 
+ * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
+ * thread manager then catches and does the appropriate nonsense.
+ * However, everything is written out here so as to not get lost.
+ */
+#define SIGEV_SIGNAL   0       /* notify via signal */
+#define SIGEV_NONE     1       /* other notification: meaningless */
+#define SIGEV_THREAD   2       /* deliver via thread creation */
+#define SIGEV_THREAD_ID 4      /* deliver to thread */
+
+/*
+ * This works because the alignment is ok on all current architectures
+ * but we leave open this being overridden in the future
+ */
+#ifndef __ARCH_SIGEV_PREAMBLE_SIZE
+#define __ARCH_SIGEV_PREAMBLE_SIZE     (sizeof(int) * 2 + sizeof(sigval_t))
+#endif
+
+#define SIGEV_MAX_SIZE 64
+#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE) \
+               / sizeof(int))
+
+typedef struct sigevent {
+       sigval_t sigev_value;
+       int sigev_signo;
+       int sigev_notify;
+       union {
+               int _pad[SIGEV_PAD_SIZE];
+                int _tid;
+
+               struct {
+                       void (*_function)(sigval_t);
+                       void *_attribute;       /* really pthread_attr_t */
+               } _sigev_thread;
+       } _sigev_un;
+} sigevent_t;
+
+#define sigev_notify_function  _sigev_un._sigev_thread._function
+#define sigev_notify_attributes        _sigev_un._sigev_thread._attribute
+#define sigev_notify_thread_id  _sigev_un._tid
+
+
+#endif /* _ASM_GENERIC_SIGINFO_H */
diff --git a/lib/libdss-include/include/asm-generic/signal-defs.h b/lib/libdss-include/include/asm-generic/signal-defs.h
new file mode 100644 (file)
index 0000000..04cfb6d
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef __ASM_GENERIC_SIGNAL_DEFS_H
+#define __ASM_GENERIC_SIGNAL_DEFS_H
+
+
+
+#ifndef SIG_BLOCK
+#define SIG_BLOCK          0   /* for blocking signals */
+#endif
+#ifndef SIG_UNBLOCK
+#define SIG_UNBLOCK        1   /* for unblocking signals */
+#endif
+#ifndef SIG_SETMASK
+#define SIG_SETMASK        2   /* for setting the signal mask */
+#endif
+
+#ifndef __ASSEMBLY__
+typedef void __signalfn_t(int);
+typedef __signalfn_t *__sighandler_t;
+
+typedef void __restorefn_t(void);
+typedef __restorefn_t *__sigrestore_t;
+
+#define SIG_DFL        ((__sighandler_t)0)     /* default signal handling */
+#define SIG_IGN        ((__sighandler_t)1)     /* ignore signal */
+#define SIG_ERR        ((__sighandler_t)-1)    /* error return from signal */
+#endif
+
+#endif /* __ASM_GENERIC_SIGNAL_DEFS_H */
diff --git a/lib/libdss-include/include/asm-generic/signal.h b/lib/libdss-include/include/asm-generic/signal.h
new file mode 100644 (file)
index 0000000..08c462c
--- /dev/null
@@ -0,0 +1,119 @@
+#ifndef __ASM_GENERIC_SIGNAL_H
+#define __ASM_GENERIC_SIGNAL_H
+
+#include <linux/types.h>
+
+#define _NSIG          64
+#define _NSIG_BPW      __BITS_PER_LONG
+#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
+
+#define SIGHUP          1
+#define SIGINT          2
+#define SIGQUIT                 3
+#define SIGILL          4
+#define SIGTRAP                 5
+#define SIGABRT                 6
+#define SIGIOT          6
+#define SIGBUS          7
+#define SIGFPE          8
+#define SIGKILL                 9
+#define SIGUSR1                10
+#define SIGSEGV                11
+#define SIGUSR2                12
+#define SIGPIPE                13
+#define SIGALRM                14
+#define SIGTERM                15
+#define SIGSTKFLT      16
+#define SIGCHLD                17
+#define SIGCONT                18
+#define SIGSTOP                19
+#define SIGTSTP                20
+#define SIGTTIN                21
+#define SIGTTOU                22
+#define SIGURG         23
+#define SIGXCPU                24
+#define SIGXFSZ                25
+#define SIGVTALRM      26
+#define SIGPROF                27
+#define SIGWINCH       28
+#define SIGIO          29
+#define SIGPOLL                SIGIO
+/*
+#define SIGLOST                29
+*/
+#define SIGPWR         30
+#define SIGSYS         31
+#define        SIGUNUSED       31
+
+/* These should not be considered constants from userland.  */
+#define SIGRTMIN       32
+#ifndef SIGRTMAX
+#define SIGRTMAX       _NSIG
+#endif
+
+/*
+ * SA_FLAGS values:
+ *
+ * SA_ONSTACK indicates that a registered stack_t will be used.
+ * SA_RESTART flag to get restarting signals (which were the default long ago)
+ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
+ * SA_RESETHAND clears the handler when the signal is delivered.
+ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
+ * SA_NODEFER prevents the current signal from being masked in the handler.
+ *
+ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
+ * Unix names RESETHAND and NODEFER respectively.
+ */
+#define SA_NOCLDSTOP   0x00000001
+#define SA_NOCLDWAIT   0x00000002
+#define SA_SIGINFO     0x00000004
+#define SA_ONSTACK     0x08000000
+#define SA_RESTART     0x10000000
+#define SA_NODEFER     0x40000000
+#define SA_RESETHAND   0x80000000
+
+#define SA_NOMASK      SA_NODEFER
+#define SA_ONESHOT     SA_RESETHAND
+
+/*
+ * New architectures should not define the obsolete
+ *     SA_RESTORER     0x04000000
+ */
+
+#if !defined MINSIGSTKSZ || !defined SIGSTKSZ
+#define MINSIGSTKSZ    2048
+#define SIGSTKSZ       8192
+#endif
+
+#ifndef __ASSEMBLY__
+typedef struct {
+       unsigned long sig[_NSIG_WORDS];
+} sigset_t;
+
+/* not actually used, but required for linux/syscalls.h */
+typedef unsigned long old_sigset_t;
+
+#include <asm-generic/signal-defs.h>
+
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
+struct sigaction {
+       __sighandler_t sa_handler;
+       unsigned long sa_flags;
+#ifdef SA_RESTORER
+       __sigrestore_t sa_restorer;
+#endif
+       sigset_t sa_mask;               /* mask last for extensibility */
+};
+
+typedef struct sigaltstack {
+       void *ss_sp;
+       int ss_flags;
+       size_t ss_size;
+} stack_t;
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_GENERIC_SIGNAL_H */
diff --git a/lib/libdss-include/include/asm-generic/socket.h b/lib/libdss-include/include/asm-generic/socket.h
new file mode 100644 (file)
index 0000000..5c15c2a
--- /dev/null
@@ -0,0 +1,90 @@
+#ifndef __ASM_GENERIC_SOCKET_H
+#define __ASM_GENERIC_SOCKET_H
+
+#include <asm/sockios.h>
+
+/* For setsockopt(2) */
+#define SOL_SOCKET     1
+
+#define SO_DEBUG       1
+#define SO_REUSEADDR   2
+#define SO_TYPE                3
+#define SO_ERROR       4
+#define SO_DONTROUTE   5
+#define SO_BROADCAST   6
+#define SO_SNDBUF      7
+#define SO_RCVBUF      8
+#define SO_SNDBUFFORCE 32
+#define SO_RCVBUFFORCE 33
+#define SO_KEEPALIVE   9
+#define SO_OOBINLINE   10
+#define SO_NO_CHECK    11
+#define SO_PRIORITY    12
+#define SO_LINGER      13
+#define SO_BSDCOMPAT   14
+#define SO_REUSEPORT   15
+#ifndef SO_PASSCRED /* powerpc only differs in these */
+#define SO_PASSCRED    16
+#define SO_PEERCRED    17
+#define SO_RCVLOWAT    18
+#define SO_SNDLOWAT    19
+#define SO_RCVTIMEO    20
+#define SO_SNDTIMEO    21
+#endif
+
+/* Security levels - as per NRL IPv6 - don't actually do anything */
+#define SO_SECURITY_AUTHENTICATION             22
+#define SO_SECURITY_ENCRYPTION_TRANSPORT       23
+#define SO_SECURITY_ENCRYPTION_NETWORK         24
+
+#define SO_BINDTODEVICE        25
+
+/* Socket filtering */
+#define SO_ATTACH_FILTER       26
+#define SO_DETACH_FILTER       27
+#define SO_GET_FILTER          SO_ATTACH_FILTER
+
+#define SO_PEERNAME            28
+#define SO_TIMESTAMP           29
+#define SCM_TIMESTAMP          SO_TIMESTAMP
+
+#define SO_ACCEPTCONN          30
+
+#define SO_PEERSEC             31
+#define SO_PASSSEC             34
+#define SO_TIMESTAMPNS         35
+#define SCM_TIMESTAMPNS                SO_TIMESTAMPNS
+
+#define SO_MARK                        36
+
+#define SO_TIMESTAMPING                37
+#define SCM_TIMESTAMPING       SO_TIMESTAMPING
+
+#define SO_PROTOCOL            38
+#define SO_DOMAIN              39
+
+#define SO_RXQ_OVFL             40
+
+#define SO_WIFI_STATUS         41
+#define SCM_WIFI_STATUS        SO_WIFI_STATUS
+#define SO_PEEK_OFF            42
+
+/* Instruct lower device to use last 4-bytes of skb data as FCS */
+#define SO_NOFCS               43
+
+#define SO_LOCK_FILTER         44
+
+#define SO_SELECT_ERR_QUEUE    45
+
+#define SO_BUSY_POLL           46
+
+#define SO_MAX_PACING_RATE     47
+
+#define SO_BPF_EXTENSIONS      48
+
+#define SO_INCOMING_CPU                49
+
+#define SO_ATTACH_BPF          50
+#define SO_DETACH_BPF          SO_DETACH_FILTER
+
+#endif /* __ASM_GENERIC_SOCKET_H */
diff --git a/lib/libdss-include/include/asm-generic/sockios.h b/lib/libdss-include/include/asm-generic/sockios.h
new file mode 100644 (file)
index 0000000..9a61a36
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __ASM_GENERIC_SOCKIOS_H
+#define __ASM_GENERIC_SOCKIOS_H
+
+/* Socket-level I/O control calls. */
+#define FIOSETOWN      0x8901
+#define SIOCSPGRP      0x8902
+#define FIOGETOWN      0x8903
+#define SIOCGPGRP      0x8904
+#define SIOCATMARK     0x8905
+#define SIOCGSTAMP     0x8906          /* Get stamp (timeval) */
+#define SIOCGSTAMPNS   0x8907          /* Get stamp (timespec) */
+
+#endif /* __ASM_GENERIC_SOCKIOS_H */
diff --git a/lib/libdss-include/include/asm-generic/stat.h b/lib/libdss-include/include/asm-generic/stat.h
new file mode 100644 (file)
index 0000000..bd8cad2
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef __ASM_GENERIC_STAT_H
+#define __ASM_GENERIC_STAT_H
+
+/*
+ * Everybody gets this wrong and has to stick with it for all
+ * eternity. Hopefully, this version gets used by new architectures
+ * so they don't fall into the same traps.
+ *
+ * stat64 is copied from powerpc64, with explicit padding added.
+ * stat is the same structure layout on 64-bit, without the 'long long'
+ * types.
+ *
+ * By convention, 64 bit architectures use the stat interface, while
+ * 32 bit architectures use the stat64 interface. Note that we don't
+ * provide an __old_kernel_stat here, which new architecture should
+ * not have to start with.
+ */
+
+#include <asm/bitsperlong.h>
+
+#define STAT_HAVE_NSEC 1
+
+struct stat {
+       unsigned long   st_dev;         /* Device.  */
+       unsigned long   st_ino;         /* File serial number.  */
+       unsigned int    st_mode;        /* File mode.  */
+       unsigned int    st_nlink;       /* Link count.  */
+       unsigned int    st_uid;         /* User ID of the file's owner.  */
+       unsigned int    st_gid;         /* Group ID of the file's group. */
+       unsigned long   st_rdev;        /* Device number, if device.  */
+       unsigned long   __pad1;
+       long            st_size;        /* Size of file, in bytes.  */
+       int             st_blksize;     /* Optimal block size for I/O.  */
+       int             __pad2;
+       long            st_blocks;      /* Number 512-byte blocks allocated. */
+       long            st_atime;       /* Time of last access.  */
+       unsigned long   st_atime_nsec;
+       long            st_mtime;       /* Time of last modification.  */
+       unsigned long   st_mtime_nsec;
+       long            st_ctime;       /* Time of last status change.  */
+       unsigned long   st_ctime_nsec;
+       unsigned int    __unused4;
+       unsigned int    __unused5;
+};
+
+/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
+#if __BITS_PER_LONG != 64 || defined(__ARCH_WANT_STAT64)
+struct stat64 {
+       unsigned long long st_dev;      /* Device.  */
+       unsigned long long st_ino;      /* File serial number.  */
+       unsigned int    st_mode;        /* File mode.  */
+       unsigned int    st_nlink;       /* Link count.  */
+       unsigned int    st_uid;         /* User ID of the file's owner.  */
+       unsigned int    st_gid;         /* Group ID of the file's group. */
+       unsigned long long st_rdev;     /* Device number, if device.  */
+       unsigned long long __pad1;
+       long long       st_size;        /* Size of file, in bytes.  */
+       int             st_blksize;     /* Optimal block size for I/O.  */
+       int             __pad2;
+       long long       st_blocks;      /* Number 512-byte blocks allocated. */
+       int             st_atime;       /* Time of last access.  */
+       unsigned int    st_atime_nsec;
+       int             st_mtime;       /* Time of last modification.  */
+       unsigned int    st_mtime_nsec;
+       int             st_ctime;       /* Time of last status change.  */
+       unsigned int    st_ctime_nsec;
+       unsigned int    __unused4;
+       unsigned int    __unused5;
+};
+#endif
+
+#endif /* __ASM_GENERIC_STAT_H */
diff --git a/lib/libdss-include/include/asm-generic/statfs.h b/lib/libdss-include/include/asm-generic/statfs.h
new file mode 100644 (file)
index 0000000..6877912
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _GENERIC_STATFS_H
+#define _GENERIC_STATFS_H
+
+#include <linux/types.h>
+
+
+/*
+ * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
+ * Yes, they differ in signedness as well as size.
+ * Special cases can override it for themselves -- except for S390x, which
+ * is just a little too special for us. And MIPS, which I'm not touching
+ * with a 10' pole.
+ */
+#ifndef __statfs_word
+#if __BITS_PER_LONG == 64
+#define __statfs_word __kernel_long_t
+#else
+#define __statfs_word __u32
+#endif
+#endif
+
+struct statfs {
+       __statfs_word f_type;
+       __statfs_word f_bsize;
+       __statfs_word f_blocks;
+       __statfs_word f_bfree;
+       __statfs_word f_bavail;
+       __statfs_word f_files;
+       __statfs_word f_ffree;
+       __kernel_fsid_t f_fsid;
+       __statfs_word f_namelen;
+       __statfs_word f_frsize;
+       __statfs_word f_flags;
+       __statfs_word f_spare[4];
+};
+
+/*
+ * ARM needs to avoid the 32-bit padding at the end, for consistency
+ * between EABI and OABI 
+ */
+#ifndef ARCH_PACK_STATFS64
+#define ARCH_PACK_STATFS64
+#endif
+
+struct statfs64 {
+       __statfs_word f_type;
+       __statfs_word f_bsize;
+       __u64 f_blocks;
+       __u64 f_bfree;
+       __u64 f_bavail;
+       __u64 f_files;
+       __u64 f_ffree;
+       __kernel_fsid_t f_fsid;
+       __statfs_word f_namelen;
+       __statfs_word f_frsize;
+       __statfs_word f_flags;
+       __statfs_word f_spare[4];
+} ARCH_PACK_STATFS64;
+
+/* 
+ * IA64 and x86_64 need to avoid the 32-bit padding at the end,
+ * to be compatible with the i386 ABI
+ */
+#ifndef ARCH_PACK_COMPAT_STATFS64
+#define ARCH_PACK_COMPAT_STATFS64
+#endif
+
+struct compat_statfs64 {
+       __u32 f_type;
+       __u32 f_bsize;
+       __u64 f_blocks;
+       __u64 f_bfree;
+       __u64 f_bavail;
+       __u64 f_files;
+       __u64 f_ffree;
+       __kernel_fsid_t f_fsid;
+       __u32 f_namelen;
+       __u32 f_frsize;
+       __u32 f_flags;
+       __u32 f_spare[4];
+} ARCH_PACK_COMPAT_STATFS64;
+
+#endif /* _GENERIC_STATFS_H */
diff --git a/lib/libdss-include/include/asm-generic/swab.h b/lib/libdss-include/include/asm-generic/swab.h
new file mode 100644 (file)
index 0000000..a8e9029
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _ASM_GENERIC_SWAB_H
+#define _ASM_GENERIC_SWAB_H
+
+#include <asm/bitsperlong.h>
+
+/*
+ * 32 bit architectures typically (but not always) want to
+ * set __SWAB_64_THRU_32__. In user space, this is only
+ * valid if the compiler supports 64 bit data types.
+ */
+
+#if __BITS_PER_LONG == 32
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
+#define __SWAB_64_THRU_32__
+#endif
+#endif
+
+#endif /* _ASM_GENERIC_SWAB_H */
diff --git a/lib/libdss-include/include/asm-generic/termbits.h b/lib/libdss-include/include/asm-generic/termbits.h
new file mode 100644 (file)
index 0000000..232b478
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef __ASM_GENERIC_TERMBITS_H
+#define __ASM_GENERIC_TERMBITS_H
+
+#include <linux/posix_types.h>
+
+typedef unsigned char  cc_t;
+typedef unsigned int   speed_t;
+typedef unsigned int   tcflag_t;
+
+#define NCCS 19
+struct termios {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+};
+
+struct termios2 {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
+struct ktermios {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_line;                    /* line discipline */
+       cc_t c_cc[NCCS];                /* control characters */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
+/* c_cc characters */
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+
+/* c_iflag bits */
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK  0000020
+#define ISTRIP 0000040
+#define INLCR  0000100
+#define IGNCR  0000200
+#define ICRNL  0000400
+#define IUCLC  0001000
+#define IXON   0002000
+#define IXANY  0004000
+#define IXOFF  0010000
+#define IMAXBEL        0020000
+#define IUTF8  0040000
+
+/* c_oflag bits */
+#define OPOST  0000001
+#define OLCUC  0000002
+#define ONLCR  0000004
+#define OCRNL  0000010
+#define ONOCR  0000020
+#define ONLRET 0000040
+#define OFILL  0000100
+#define OFDEL  0000200
+#define NLDLY  0000400
+#define   NL0  0000000
+#define   NL1  0000400
+#define CRDLY  0003000
+#define   CR0  0000000
+#define   CR1  0001000
+#define   CR2  0002000
+#define   CR3  0003000
+#define TABDLY 0014000
+#define   TAB0 0000000
+#define   TAB1 0004000
+#define   TAB2 0010000
+#define   TAB3 0014000
+#define   XTABS        0014000
+#define BSDLY  0020000
+#define   BS0  0000000
+#define   BS1  0020000
+#define VTDLY  0040000
+#define   VT0  0000000
+#define   VT1  0040000
+#define FFDLY  0100000
+#define   FF0  0000000
+#define   FF1  0100000
+
+/* c_cflag bit meaning */
+#define CBAUD  0010017
+#define  B0    0000000         /* hang up */
+#define  B50   0000001
+#define  B75   0000002
+#define  B110  0000003
+#define  B134  0000004
+#define  B150  0000005
+#define  B200  0000006
+#define  B300  0000007
+#define  B600  0000010
+#define  B1200 0000011
+#define  B1800 0000012
+#define  B2400 0000013
+#define  B4800 0000014
+#define  B9600 0000015
+#define  B19200        0000016
+#define  B38400        0000017
+#define EXTA B19200
+#define EXTB B38400
+#define CSIZE  0000060
+#define   CS5  0000000
+#define   CS6  0000020
+#define   CS7  0000040
+#define   CS8  0000060
+#define CSTOPB 0000100
+#define CREAD  0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL  0002000
+#define CLOCAL 0004000
+#define CBAUDEX 0010000
+#define    BOTHER 0010000
+#define    B57600 0010001
+#define   B115200 0010002
+#define   B230400 0010003
+#define   B460800 0010004
+#define   B500000 0010005
+#define   B576000 0010006
+#define   B921600 0010007
+#define  B1000000 0010010
+#define  B1152000 0010011
+#define  B1500000 0010012
+#define  B2000000 0010013
+#define  B2500000 0010014
+#define  B3000000 0010015
+#define  B3500000 0010016
+#define  B4000000 0010017
+#define CIBAUD   002003600000  /* input baud rate */
+#define CMSPAR   010000000000  /* mark or space (stick) parity */
+#define CRTSCTS          020000000000  /* flow control */
+
+#define IBSHIFT          16            /* Shift from CBAUD to CIBAUD */
+
+/* c_lflag bits */
+#define ISIG   0000001
+#define ICANON 0000002
+#define XCASE  0000004
+#define ECHO   0000010
+#define ECHOE  0000020
+#define ECHOK  0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define TOSTOP 0000400
+#define ECHOCTL        0001000
+#define ECHOPRT        0002000
+#define ECHOKE 0004000
+#define FLUSHO 0010000
+#define PENDIN 0040000
+#define IEXTEN 0100000
+#define EXTPROC        0200000
+
+/* tcflow() and TCXONC use these */
+#define        TCOOFF          0
+#define        TCOON           1
+#define        TCIOFF          2
+#define        TCION           3
+
+/* tcflush() and TCFLSH use these */
+#define        TCIFLUSH        0
+#define        TCOFLUSH        1
+#define        TCIOFLUSH       2
+
+/* tcsetattr uses these */
+#define        TCSANOW         0
+#define        TCSADRAIN       1
+#define        TCSAFLUSH       2
+
+#endif /* __ASM_GENERIC_TERMBITS_H */
diff --git a/lib/libdss-include/include/asm-generic/termios.h b/lib/libdss-include/include/asm-generic/termios.h
new file mode 100644 (file)
index 0000000..1c1166a
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef _ASM_GENERIC_TERMIOS_H
+#define _ASM_GENERIC_TERMIOS_H
+/*
+ * Most architectures have straight copies of the x86 code, with
+ * varying levels of bug fixes on top. Usually it's a good idea
+ * to use this generic version instead, but be careful to avoid
+ * ABI changes.
+ * New architectures should not provide their own version.
+ */
+
+#include <asm/termbits.h>
+#include <asm/ioctls.h>
+
+struct winsize {
+       unsigned short ws_row;
+       unsigned short ws_col;
+       unsigned short ws_xpixel;
+       unsigned short ws_ypixel;
+};
+
+#define NCC 8
+struct termio {
+       unsigned short c_iflag;         /* input mode flags */
+       unsigned short c_oflag;         /* output mode flags */
+       unsigned short c_cflag;         /* control mode flags */
+       unsigned short c_lflag;         /* local mode flags */
+       unsigned char c_line;           /* line discipline */
+       unsigned char c_cc[NCC];        /* control characters */
+};
+
+/* modem lines */
+#define TIOCM_LE       0x001
+#define TIOCM_DTR      0x002
+#define TIOCM_RTS      0x004
+#define TIOCM_ST       0x008
+#define TIOCM_SR       0x010
+#define TIOCM_CTS      0x020
+#define TIOCM_CAR      0x040
+#define TIOCM_RNG      0x080
+#define TIOCM_DSR      0x100
+#define TIOCM_CD       TIOCM_CAR
+#define TIOCM_RI       TIOCM_RNG
+#define TIOCM_OUT1     0x2000
+#define TIOCM_OUT2     0x4000
+#define TIOCM_LOOP     0x8000
+
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+
+
+#endif /* _ASM_GENERIC_TERMIOS_H */
diff --git a/lib/libdss-include/include/asm-generic/types.h b/lib/libdss-include/include/asm-generic/types.h
new file mode 100644 (file)
index 0000000..a387792
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _ASM_GENERIC_TYPES_H
+#define _ASM_GENERIC_TYPES_H
+/*
+ * int-ll64 is used everywhere now.
+ */
+#include <asm-generic/int-ll64.h>
+
+#endif /* _ASM_GENERIC_TYPES_H */
diff --git a/lib/libdss-include/include/asm-generic/ucontext.h b/lib/libdss-include/include/asm-generic/ucontext.h
new file mode 100644 (file)
index 0000000..ad77343
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __ASM_GENERIC_UCONTEXT_H
+#define __ASM_GENERIC_UCONTEXT_H
+
+struct ucontext {
+       unsigned long     uc_flags;
+       struct ucontext  *uc_link;
+       stack_t           uc_stack;
+       struct sigcontext uc_mcontext;
+       sigset_t          uc_sigmask;   /* mask last for extensibility */
+};
+
+#endif /* __ASM_GENERIC_UCONTEXT_H */
diff --git a/lib/libdss-include/include/asm-generic/unistd.h b/lib/libdss-include/include/asm-generic/unistd.h
new file mode 100644 (file)
index 0000000..1324b02
--- /dev/null
@@ -0,0 +1,927 @@
+#include <asm/bitsperlong.h>
+
+/*
+ * This file contains the system call numbers, based on the
+ * layout of the x86-64 architecture, which embeds the
+ * pointer to the syscall in the table.
+ *
+ * As a basic principle, no duplication of functionality
+ * should be added, e.g. we don't use lseek when llseek
+ * is present. New architectures should use this file
+ * and implement the less feature-full calls in user space.
+ */
+
+#ifndef __SYSCALL
+#define __SYSCALL(x, y)
+#endif
+
+#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)
+#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32)
+#else
+#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64)
+#endif
+
+#ifdef __SYSCALL_COMPAT
+#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp)
+#define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp)
+#else
+#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys)
+#define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64)
+#endif
+
+#define __NR_io_setup 0
+__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup)
+#define __NR_io_destroy 1
+__SYSCALL(__NR_io_destroy, sys_io_destroy)
+#define __NR_io_submit 2
+__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit)
+#define __NR_io_cancel 3
+__SYSCALL(__NR_io_cancel, sys_io_cancel)
+#define __NR_io_getevents 4
+__SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents)
+
+/* fs/xattr.c */
+#define __NR_setxattr 5
+__SYSCALL(__NR_setxattr, sys_setxattr)
+#define __NR_lsetxattr 6
+__SYSCALL(__NR_lsetxattr, sys_lsetxattr)
+#define __NR_fsetxattr 7
+__SYSCALL(__NR_fsetxattr, sys_fsetxattr)
+#define __NR_getxattr 8
+__SYSCALL(__NR_getxattr, sys_getxattr)
+#define __NR_lgetxattr 9
+__SYSCALL(__NR_lgetxattr, sys_lgetxattr)
+#define __NR_fgetxattr 10
+__SYSCALL(__NR_fgetxattr, sys_fgetxattr)
+#define __NR_listxattr 11
+__SYSCALL(__NR_listxattr, sys_listxattr)
+#define __NR_llistxattr 12
+__SYSCALL(__NR_llistxattr, sys_llistxattr)
+#define __NR_flistxattr 13
+__SYSCALL(__NR_flistxattr, sys_flistxattr)
+#define __NR_removexattr 14
+__SYSCALL(__NR_removexattr, sys_removexattr)
+#define __NR_lremovexattr 15
+__SYSCALL(__NR_lremovexattr, sys_lremovexattr)
+#define __NR_fremovexattr 16
+__SYSCALL(__NR_fremovexattr, sys_fremovexattr)
+
+/* fs/dcache.c */
+#define __NR_getcwd 17
+__SYSCALL(__NR_getcwd, sys_getcwd)
+
+/* fs/cookies.c */
+#define __NR_lookup_dcookie 18
+__SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie)
+
+/* fs/eventfd.c */
+#define __NR_eventfd2 19
+__SYSCALL(__NR_eventfd2, sys_eventfd2)
+
+/* fs/eventpoll.c */
+#define __NR_epoll_create1 20
+__SYSCALL(__NR_epoll_create1, sys_epoll_create1)
+#define __NR_epoll_ctl 21
+__SYSCALL(__NR_epoll_ctl, sys_epoll_ctl)
+#define __NR_epoll_pwait 22
+__SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait)
+
+/* fs/fcntl.c */
+#define __NR_dup 23
+__SYSCALL(__NR_dup, sys_dup)
+#define __NR_dup3 24
+__SYSCALL(__NR_dup3, sys_dup3)
+#define __NR3264_fcntl 25
+__SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64)
+
+/* fs/inotify_user.c */
+#define __NR_inotify_init1 26
+__SYSCALL(__NR_inotify_init1, sys_inotify_init1)
+#define __NR_inotify_add_watch 27
+__SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch)
+#define __NR_inotify_rm_watch 28
+__SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch)
+
+/* fs/ioctl.c */
+#define __NR_ioctl 29
+__SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl)
+
+/* fs/ioprio.c */
+#define __NR_ioprio_set 30
+__SYSCALL(__NR_ioprio_set, sys_ioprio_set)
+#define __NR_ioprio_get 31
+__SYSCALL(__NR_ioprio_get, sys_ioprio_get)
+
+/* fs/locks.c */
+#define __NR_flock 32
+__SYSCALL(__NR_flock, sys_flock)
+
+/* fs/namei.c */
+#define __NR_mknodat 33
+__SYSCALL(__NR_mknodat, sys_mknodat)
+#define __NR_mkdirat 34
+__SYSCALL(__NR_mkdirat, sys_mkdirat)
+#define __NR_unlinkat 35
+__SYSCALL(__NR_unlinkat, sys_unlinkat)
+#define __NR_symlinkat 36
+__SYSCALL(__NR_symlinkat, sys_symlinkat)
+#define __NR_linkat 37
+__SYSCALL(__NR_linkat, sys_linkat)
+#define __NR_renameat 38
+__SYSCALL(__NR_renameat, sys_renameat)
+
+/* fs/namespace.c */
+#define __NR_umount2 39
+__SYSCALL(__NR_umount2, sys_umount)
+#define __NR_mount 40
+__SC_COMP(__NR_mount, sys_mount, compat_sys_mount)
+#define __NR_pivot_root 41
+__SYSCALL(__NR_pivot_root, sys_pivot_root)
+
+/* fs/nfsctl.c */
+#define __NR_nfsservctl 42
+__SYSCALL(__NR_nfsservctl, sys_ni_syscall)
+
+/* fs/open.c */
+#define __NR3264_statfs 43
+__SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \
+              compat_sys_statfs64)
+#define __NR3264_fstatfs 44
+__SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \
+              compat_sys_fstatfs64)
+#define __NR3264_truncate 45
+__SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \
+              compat_sys_truncate64)
+#define __NR3264_ftruncate 46
+__SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \
+              compat_sys_ftruncate64)
+
+#define __NR_fallocate 47
+__SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate)
+#define __NR_faccessat 48
+__SYSCALL(__NR_faccessat, sys_faccessat)
+#define __NR_chdir 49
+__SYSCALL(__NR_chdir, sys_chdir)
+#define __NR_fchdir 50
+__SYSCALL(__NR_fchdir, sys_fchdir)
+#define __NR_chroot 51
+__SYSCALL(__NR_chroot, sys_chroot)
+#define __NR_fchmod 52
+__SYSCALL(__NR_fchmod, sys_fchmod)
+#define __NR_fchmodat 53
+__SYSCALL(__NR_fchmodat, sys_fchmodat)
+#define __NR_fchownat 54
+__SYSCALL(__NR_fchownat, sys_fchownat)
+#define __NR_fchown 55
+__SYSCALL(__NR_fchown, sys_fchown)
+#define __NR_openat 56
+__SC_COMP(__NR_openat, sys_openat, compat_sys_openat)
+#define __NR_close 57
+__SYSCALL(__NR_close, sys_close)
+#define __NR_vhangup 58
+__SYSCALL(__NR_vhangup, sys_vhangup)
+
+/* fs/pipe.c */
+#define __NR_pipe2 59
+__SYSCALL(__NR_pipe2, sys_pipe2)
+
+/* fs/quota.c */
+#define __NR_quotactl 60
+__SYSCALL(__NR_quotactl, sys_quotactl)
+
+/* fs/readdir.c */
+#define __NR_getdents64 61
+#define __ARCH_WANT_COMPAT_SYS_GETDENTS64
+__SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64)
+
+/* fs/read_write.c */
+#define __NR3264_lseek 62
+__SC_3264(__NR3264_lseek, sys_llseek, sys_lseek)
+#define __NR_read 63
+__SYSCALL(__NR_read, sys_read)
+#define __NR_write 64
+__SYSCALL(__NR_write, sys_write)
+#define __NR_readv 65
+__SC_COMP(__NR_readv, sys_readv, compat_sys_readv)
+#define __NR_writev 66
+__SC_COMP(__NR_writev, sys_writev, compat_sys_writev)
+#define __NR_pread64 67
+__SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64)
+#define __NR_pwrite64 68
+__SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64)
+#define __NR_preadv 69
+__SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv)
+#define __NR_pwritev 70
+__SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev)
+
+/* fs/sendfile.c */
+#define __NR3264_sendfile 71
+__SYSCALL(__NR3264_sendfile, sys_sendfile64)
+
+/* fs/select.c */
+#define __NR_pselect6 72
+__SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6)
+#define __NR_ppoll 73
+__SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll)
+
+/* fs/signalfd.c */
+#define __NR_signalfd4 74
+__SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
+
+/* fs/splice.c */
+#define __NR_vmsplice 75
+__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice)
+#define __NR_splice 76
+__SYSCALL(__NR_splice, sys_splice)
+#define __NR_tee 77
+__SYSCALL(__NR_tee, sys_tee)
+
+/* fs/stat.c */
+#define __NR_readlinkat 78
+__SYSCALL(__NR_readlinkat, sys_readlinkat)
+#define __NR3264_fstatat 79
+__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat)
+#define __NR3264_fstat 80
+__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat)
+
+/* fs/sync.c */
+#define __NR_sync 81
+__SYSCALL(__NR_sync, sys_sync)
+#define __NR_fsync 82
+__SYSCALL(__NR_fsync, sys_fsync)
+#define __NR_fdatasync 83
+__SYSCALL(__NR_fdatasync, sys_fdatasync)
+#ifdef __ARCH_WANT_SYNC_FILE_RANGE2
+#define __NR_sync_file_range2 84
+__SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \
+         compat_sys_sync_file_range2)
+#else
+#define __NR_sync_file_range 84
+__SC_COMP(__NR_sync_file_range, sys_sync_file_range, \
+         compat_sys_sync_file_range)
+#endif
+
+/* fs/timerfd.c */
+#define __NR_timerfd_create 85
+__SYSCALL(__NR_timerfd_create, sys_timerfd_create)
+#define __NR_timerfd_settime 86
+__SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \
+         compat_sys_timerfd_settime)
+#define __NR_timerfd_gettime 87
+__SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \
+         compat_sys_timerfd_gettime)
+
+/* fs/utimes.c */
+#define __NR_utimensat 88
+__SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat)
+
+/* kernel/acct.c */
+#define __NR_acct 89
+__SYSCALL(__NR_acct, sys_acct)
+
+/* kernel/capability.c */
+#define __NR_capget 90
+__SYSCALL(__NR_capget, sys_capget)
+#define __NR_capset 91
+__SYSCALL(__NR_capset, sys_capset)
+
+/* kernel/exec_domain.c */
+#define __NR_personality 92
+__SYSCALL(__NR_personality, sys_personality)
+
+/* kernel/exit.c */
+#define __NR_exit 93
+__SYSCALL(__NR_exit, sys_exit)
+#define __NR_exit_group 94
+__SYSCALL(__NR_exit_group, sys_exit_group)
+#define __NR_waitid 95
+__SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid)
+
+/* kernel/fork.c */
+#define __NR_set_tid_address 96
+__SYSCALL(__NR_set_tid_address, sys_set_tid_address)
+#define __NR_unshare 97
+__SYSCALL(__NR_unshare, sys_unshare)
+
+/* kernel/futex.c */
+#define __NR_futex 98
+__SC_COMP(__NR_futex, sys_futex, compat_sys_futex)
+#define __NR_set_robust_list 99
+__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \
+         compat_sys_set_robust_list)
+#define __NR_get_robust_list 100
+__SC_COMP(__NR_get_robust_list, sys_get_robust_list, \
+         compat_sys_get_robust_list)
+
+/* kernel/hrtimer.c */
+#define __NR_nanosleep 101
+__SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep)
+
+/* kernel/itimer.c */
+#define __NR_getitimer 102
+__SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer)
+#define __NR_setitimer 103
+__SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer)
+
+/* kernel/kexec.c */
+#define __NR_kexec_load 104
+__SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load)
+
+/* kernel/module.c */
+#define __NR_init_module 105
+__SYSCALL(__NR_init_module, sys_init_module)
+#define __NR_delete_module 106
+__SYSCALL(__NR_delete_module, sys_delete_module)
+
+/* kernel/posix-timers.c */
+#define __NR_timer_create 107
+__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create)
+#define __NR_timer_gettime 108
+__SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime)
+#define __NR_timer_getoverrun 109
+__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun)
+#define __NR_timer_settime 110
+__SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime)
+#define __NR_timer_delete 111
+__SYSCALL(__NR_timer_delete, sys_timer_delete)
+#define __NR_clock_settime 112
+__SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime)
+#define __NR_clock_gettime 113
+__SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime)
+#define __NR_clock_getres 114
+__SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres)
+#define __NR_clock_nanosleep 115
+__SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \
+         compat_sys_clock_nanosleep)
+
+/* kernel/printk.c */
+#define __NR_syslog 116
+__SYSCALL(__NR_syslog, sys_syslog)
+
+/* kernel/ptrace.c */
+#define __NR_ptrace 117
+__SYSCALL(__NR_ptrace, sys_ptrace)
+
+/* kernel/sched/core.c */
+#define __NR_sched_setparam 118
+__SYSCALL(__NR_sched_setparam, sys_sched_setparam)
+#define __NR_sched_setscheduler 119
+__SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler)
+#define __NR_sched_getscheduler 120
+__SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler)
+#define __NR_sched_getparam 121
+__SYSCALL(__NR_sched_getparam, sys_sched_getparam)
+#define __NR_sched_setaffinity 122
+__SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \
+         compat_sys_sched_setaffinity)
+#define __NR_sched_getaffinity 123
+__SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \
+         compat_sys_sched_getaffinity)
+#define __NR_sched_yield 124
+__SYSCALL(__NR_sched_yield, sys_sched_yield)
+#define __NR_sched_get_priority_max 125
+__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max)
+#define __NR_sched_get_priority_min 126
+__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min)
+#define __NR_sched_rr_get_interval 127
+__SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \
+         compat_sys_sched_rr_get_interval)
+
+/* kernel/signal.c */
+#define __NR_restart_syscall 128
+__SYSCALL(__NR_restart_syscall, sys_restart_syscall)
+#define __NR_kill 129
+__SYSCALL(__NR_kill, sys_kill)
+#define __NR_tkill 130
+__SYSCALL(__NR_tkill, sys_tkill)
+#define __NR_tgkill 131
+__SYSCALL(__NR_tgkill, sys_tgkill)
+#define __NR_sigaltstack 132
+__SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack)
+#define __NR_rt_sigsuspend 133
+__SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend)
+#define __NR_rt_sigaction 134
+__SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction)
+#define __NR_rt_sigprocmask 135
+__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask)
+#define __NR_rt_sigpending 136
+__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending)
+#define __NR_rt_sigtimedwait 137
+__SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \
+         compat_sys_rt_sigtimedwait)
+#define __NR_rt_sigqueueinfo 138
+__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \
+         compat_sys_rt_sigqueueinfo)
+#define __NR_rt_sigreturn 139
+__SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn)
+
+/* kernel/sys.c */
+#define __NR_setpriority 140
+__SYSCALL(__NR_setpriority, sys_setpriority)
+#define __NR_getpriority 141
+__SYSCALL(__NR_getpriority, sys_getpriority)
+#define __NR_reboot 142
+__SYSCALL(__NR_reboot, sys_reboot)
+#define __NR_setregid 143
+__SYSCALL(__NR_setregid, sys_setregid)
+#define __NR_setgid 144
+__SYSCALL(__NR_setgid, sys_setgid)
+#define __NR_setreuid 145
+__SYSCALL(__NR_setreuid, sys_setreuid)
+#define __NR_setuid 146
+__SYSCALL(__NR_setuid, sys_setuid)
+#define __NR_setresuid 147
+__SYSCALL(__NR_setresuid, sys_setresuid)
+#define __NR_getresuid 148
+__SYSCALL(__NR_getresuid, sys_getresuid)
+#define __NR_setresgid 149
+__SYSCALL(__NR_setresgid, sys_setresgid)
+#define __NR_getresgid 150
+__SYSCALL(__NR_getresgid, sys_getresgid)
+#define __NR_setfsuid 151
+__SYSCALL(__NR_setfsuid, sys_setfsuid)
+#define __NR_setfsgid 152
+__SYSCALL(__NR_setfsgid, sys_setfsgid)
+#define __NR_times 153
+__SC_COMP(__NR_times, sys_times, compat_sys_times)
+#define __NR_setpgid 154
+__SYSCALL(__NR_setpgid, sys_setpgid)
+#define __NR_getpgid 155
+__SYSCALL(__NR_getpgid, sys_getpgid)
+#define __NR_getsid 156
+__SYSCALL(__NR_getsid, sys_getsid)
+#define __NR_setsid 157
+__SYSCALL(__NR_setsid, sys_setsid)
+#define __NR_getgroups 158
+__SYSCALL(__NR_getgroups, sys_getgroups)
+#define __NR_setgroups 159
+__SYSCALL(__NR_setgroups, sys_setgroups)
+#define __NR_uname 160
+__SYSCALL(__NR_uname, sys_newuname)
+#define __NR_sethostname 161
+__SYSCALL(__NR_sethostname, sys_sethostname)
+#define __NR_setdomainname 162
+__SYSCALL(__NR_setdomainname, sys_setdomainname)
+#define __NR_getrlimit 163
+__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit)
+#define __NR_setrlimit 164
+__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit)
+#define __NR_getrusage 165
+__SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage)
+#define __NR_umask 166
+__SYSCALL(__NR_umask, sys_umask)
+#define __NR_prctl 167
+__SYSCALL(__NR_prctl, sys_prctl)
+#define __NR_getcpu 168
+__SYSCALL(__NR_getcpu, sys_getcpu)
+
+/* kernel/time.c */
+#define __NR_gettimeofday 169
+__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday)
+#define __NR_settimeofday 170
+__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday)
+#define __NR_adjtimex 171
+__SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex)
+
+/* kernel/timer.c */
+#define __NR_getpid 172
+__SYSCALL(__NR_getpid, sys_getpid)
+#define __NR_getppid 173
+__SYSCALL(__NR_getppid, sys_getppid)
+#define __NR_getuid 174
+__SYSCALL(__NR_getuid, sys_getuid)
+#define __NR_geteuid 175
+__SYSCALL(__NR_geteuid, sys_geteuid)
+#define __NR_getgid 176
+__SYSCALL(__NR_getgid, sys_getgid)
+#define __NR_getegid 177
+__SYSCALL(__NR_getegid, sys_getegid)
+#define __NR_gettid 178
+__SYSCALL(__NR_gettid, sys_gettid)
+#define __NR_sysinfo 179
+__SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo)
+
+/* ipc/mqueue.c */
+#define __NR_mq_open 180
+__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open)
+#define __NR_mq_unlink 181
+__SYSCALL(__NR_mq_unlink, sys_mq_unlink)
+#define __NR_mq_timedsend 182
+__SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend)
+#define __NR_mq_timedreceive 183
+__SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \
+         compat_sys_mq_timedreceive)
+#define __NR_mq_notify 184
+__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify)
+#define __NR_mq_getsetattr 185
+__SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr)
+
+/* ipc/msg.c */
+#define __NR_msgget 186
+__SYSCALL(__NR_msgget, sys_msgget)
+#define __NR_msgctl 187
+__SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl)
+#define __NR_msgrcv 188
+__SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv)
+#define __NR_msgsnd 189
+__SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd)
+
+/* ipc/sem.c */
+#define __NR_semget 190
+__SYSCALL(__NR_semget, sys_semget)
+#define __NR_semctl 191
+__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl)
+#define __NR_semtimedop 192
+__SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop)
+#define __NR_semop 193
+__SYSCALL(__NR_semop, sys_semop)
+
+/* ipc/shm.c */
+#define __NR_shmget 194
+__SYSCALL(__NR_shmget, sys_shmget)
+#define __NR_shmctl 195
+__SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl)
+#define __NR_shmat 196
+__SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat)
+#define __NR_shmdt 197
+__SYSCALL(__NR_shmdt, sys_shmdt)
+
+/* net/socket.c */
+#define __NR_socket 198
+__SYSCALL(__NR_socket, sys_socket)
+#define __NR_socketpair 199
+__SYSCALL(__NR_socketpair, sys_socketpair)
+#define __NR_bind 200
+__SYSCALL(__NR_bind, sys_bind)
+#define __NR_listen 201
+__SYSCALL(__NR_listen, sys_listen)
+#define __NR_accept 202
+__SYSCALL(__NR_accept, sys_accept)
+#define __NR_connect 203
+__SYSCALL(__NR_connect, sys_connect)
+#define __NR_getsockname 204
+__SYSCALL(__NR_getsockname, sys_getsockname)
+#define __NR_getpeername 205
+__SYSCALL(__NR_getpeername, sys_getpeername)
+#define __NR_sendto 206
+__SYSCALL(__NR_sendto, sys_sendto)
+#define __NR_recvfrom 207
+__SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom)
+#define __NR_setsockopt 208
+__SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt)
+#define __NR_getsockopt 209
+__SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt)
+#define __NR_shutdown 210
+__SYSCALL(__NR_shutdown, sys_shutdown)
+#define __NR_sendmsg 211
+__SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg)
+#define __NR_recvmsg 212
+__SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg)
+
+/* mm/filemap.c */
+#define __NR_readahead 213
+__SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead)
+
+/* mm/nommu.c, also with MMU */
+#define __NR_brk 214
+__SYSCALL(__NR_brk, sys_brk)
+#define __NR_munmap 215
+__SYSCALL(__NR_munmap, sys_munmap)
+#define __NR_mremap 216
+__SYSCALL(__NR_mremap, sys_mremap)
+
+/* security/keys/keyctl.c */
+#define __NR_add_key 217
+__SYSCALL(__NR_add_key, sys_add_key)
+#define __NR_request_key 218
+__SYSCALL(__NR_request_key, sys_request_key)
+#define __NR_keyctl 219
+__SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl)
+
+/* arch/example/kernel/sys_example.c */
+#define __NR_clone 220
+__SYSCALL(__NR_clone, sys_clone)
+#define __NR_execve 221
+__SC_COMP(__NR_execve, sys_execve, compat_sys_execve)
+
+#define __NR3264_mmap 222
+__SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap)
+/* mm/fadvise.c */
+#define __NR3264_fadvise64 223
+__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64)
+
+/* mm/, CONFIG_MMU only */
+#ifndef __ARCH_NOMMU
+#define __NR_swapon 224
+__SYSCALL(__NR_swapon, sys_swapon)
+#define __NR_swapoff 225
+__SYSCALL(__NR_swapoff, sys_swapoff)
+#define __NR_mprotect 226
+__SYSCALL(__NR_mprotect, sys_mprotect)
+#define __NR_msync 227
+__SYSCALL(__NR_msync, sys_msync)
+#define __NR_mlock 228
+__SYSCALL(__NR_mlock, sys_mlock)
+#define __NR_munlock 229
+__SYSCALL(__NR_munlock, sys_munlock)
+#define __NR_mlockall 230
+__SYSCALL(__NR_mlockall, sys_mlockall)
+#define __NR_munlockall 231
+__SYSCALL(__NR_munlockall, sys_munlockall)
+#define __NR_mincore 232
+__SYSCALL(__NR_mincore, sys_mincore)
+#define __NR_madvise 233
+__SYSCALL(__NR_madvise, sys_madvise)
+#define __NR_remap_file_pages 234
+__SYSCALL(__NR_remap_file_pages, sys_remap_file_pages)
+#define __NR_mbind 235
+__SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind)
+#define __NR_get_mempolicy 236
+__SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy)
+#define __NR_set_mempolicy 237
+__SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy)
+#define __NR_migrate_pages 238
+__SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages)
+#define __NR_move_pages 239
+__SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages)
+#endif
+
+#define __NR_rt_tgsigqueueinfo 240
+__SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \
+         compat_sys_rt_tgsigqueueinfo)
+#define __NR_perf_event_open 241
+__SYSCALL(__NR_perf_event_open, sys_perf_event_open)
+#define __NR_accept4 242
+__SYSCALL(__NR_accept4, sys_accept4)
+#define __NR_recvmmsg 243
+__SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg)
+
+/*
+ * Architectures may provide up to 16 syscalls of their own
+ * starting with this value.
+ */
+#define __NR_arch_specific_syscall 244
+
+#define __NR_wait4 260
+__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4)
+#define __NR_prlimit64 261
+__SYSCALL(__NR_prlimit64, sys_prlimit64)
+#define __NR_fanotify_init 262
+__SYSCALL(__NR_fanotify_init, sys_fanotify_init)
+#define __NR_fanotify_mark 263
+__SYSCALL(__NR_fanotify_mark, sys_fanotify_mark)
+#define __NR_name_to_handle_at         264
+__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at)
+#define __NR_open_by_handle_at         265
+__SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \
+         compat_sys_open_by_handle_at)
+#define __NR_clock_adjtime 266
+__SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime)
+#define __NR_syncfs 267
+__SYSCALL(__NR_syncfs, sys_syncfs)
+#define __NR_setns 268
+__SYSCALL(__NR_setns, sys_setns)
+#define __NR_sendmmsg 269
+__SC_COMP(__NR_sendmmsg, sys_sendmmsg, compat_sys_sendmmsg)
+#define __NR_process_vm_readv 270
+__SC_COMP(__NR_process_vm_readv, sys_process_vm_readv, \
+          compat_sys_process_vm_readv)
+#define __NR_process_vm_writev 271
+__SC_COMP(__NR_process_vm_writev, sys_process_vm_writev, \
+          compat_sys_process_vm_writev)
+#define __NR_kcmp 272
+__SYSCALL(__NR_kcmp, sys_kcmp)
+#define __NR_finit_module 273
+__SYSCALL(__NR_finit_module, sys_finit_module)
+#define __NR_sched_setattr 274
+__SYSCALL(__NR_sched_setattr, sys_sched_setattr)
+#define __NR_sched_getattr 275
+__SYSCALL(__NR_sched_getattr, sys_sched_getattr)
+#define __NR_renameat2 276
+__SYSCALL(__NR_renameat2, sys_renameat2)
+#define __NR_seccomp 277
+__SYSCALL(__NR_seccomp, sys_seccomp)
+#define __NR_getrandom 278
+__SYSCALL(__NR_getrandom, sys_getrandom)
+#define __NR_memfd_create 279
+__SYSCALL(__NR_memfd_create, sys_memfd_create)
+#define __NR_bpf 280
+__SYSCALL(__NR_bpf, sys_bpf)
+#define __NR_execveat 281
+__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat)
+#define __NR_userfaultfd 282
+__SYSCALL(__NR_userfaultfd, sys_userfaultfd)
+#define __NR_membarrier 283
+__SYSCALL(__NR_membarrier, sys_membarrier)
+#define __NR_mlock2 284
+__SYSCALL(__NR_mlock2, sys_mlock2)
+
+#undef __NR_syscalls
+#define __NR_syscalls 285
+
+/*
+ * All syscalls below here should go away really,
+ * these are provided for both review and as a porting
+ * help for the C library version.
+ *
+ * Last chance: are any of these important enough to
+ * enable by default?
+ */
+#ifdef __ARCH_WANT_SYSCALL_NO_AT
+#define __NR_open 1024
+__SYSCALL(__NR_open, sys_open)
+#define __NR_link 1025
+__SYSCALL(__NR_link, sys_link)
+#define __NR_unlink 1026
+__SYSCALL(__NR_unlink, sys_unlink)
+#define __NR_mknod 1027
+__SYSCALL(__NR_mknod, sys_mknod)
+#define __NR_chmod 1028
+__SYSCALL(__NR_chmod, sys_chmod)
+#define __NR_chown 1029
+__SYSCALL(__NR_chown, sys_chown)
+#define __NR_mkdir 1030
+__SYSCALL(__NR_mkdir, sys_mkdir)
+#define __NR_rmdir 1031
+__SYSCALL(__NR_rmdir, sys_rmdir)
+#define __NR_lchown 1032
+__SYSCALL(__NR_lchown, sys_lchown)
+#define __NR_access 1033
+__SYSCALL(__NR_access, sys_access)
+#define __NR_rename 1034
+__SYSCALL(__NR_rename, sys_rename)
+#define __NR_readlink 1035
+__SYSCALL(__NR_readlink, sys_readlink)
+#define __NR_symlink 1036
+__SYSCALL(__NR_symlink, sys_symlink)
+#define __NR_utimes 1037
+__SYSCALL(__NR_utimes, sys_utimes)
+#define __NR3264_stat 1038
+__SC_3264(__NR3264_stat, sys_stat64, sys_newstat)
+#define __NR3264_lstat 1039
+__SC_3264(__NR3264_lstat, sys_lstat64, sys_newlstat)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR3264_lstat+1)
+#endif /* __ARCH_WANT_SYSCALL_NO_AT */
+
+#ifdef __ARCH_WANT_SYSCALL_NO_FLAGS
+#define __NR_pipe 1040
+__SYSCALL(__NR_pipe, sys_pipe)
+#define __NR_dup2 1041
+__SYSCALL(__NR_dup2, sys_dup2)
+#define __NR_epoll_create 1042
+__SYSCALL(__NR_epoll_create, sys_epoll_create)
+#define __NR_inotify_init 1043
+__SYSCALL(__NR_inotify_init, sys_inotify_init)
+#define __NR_eventfd 1044
+__SYSCALL(__NR_eventfd, sys_eventfd)
+#define __NR_signalfd 1045
+__SYSCALL(__NR_signalfd, sys_signalfd)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_signalfd+1)
+#endif /* __ARCH_WANT_SYSCALL_NO_FLAGS */
+
+#if (__BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)) && \
+     defined(__ARCH_WANT_SYSCALL_OFF_T)
+#define __NR_sendfile 1046
+__SYSCALL(__NR_sendfile, sys_sendfile)
+#define __NR_ftruncate 1047
+__SYSCALL(__NR_ftruncate, sys_ftruncate)
+#define __NR_truncate 1048
+__SYSCALL(__NR_truncate, sys_truncate)
+#define __NR_stat 1049
+__SYSCALL(__NR_stat, sys_newstat)
+#define __NR_lstat 1050
+__SYSCALL(__NR_lstat, sys_newlstat)
+#define __NR_fstat 1051
+__SYSCALL(__NR_fstat, sys_newfstat)
+#define __NR_fcntl 1052
+__SYSCALL(__NR_fcntl, sys_fcntl)
+#define __NR_fadvise64 1053
+#define __ARCH_WANT_SYS_FADVISE64
+__SYSCALL(__NR_fadvise64, sys_fadvise64)
+#define __NR_newfstatat 1054
+#define __ARCH_WANT_SYS_NEWFSTATAT
+__SYSCALL(__NR_newfstatat, sys_newfstatat)
+#define __NR_fstatfs 1055
+__SYSCALL(__NR_fstatfs, sys_fstatfs)
+#define __NR_statfs 1056
+__SYSCALL(__NR_statfs, sys_statfs)
+#define __NR_lseek 1057
+__SYSCALL(__NR_lseek, sys_lseek)
+#define __NR_mmap 1058
+__SYSCALL(__NR_mmap, sys_mmap)
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_mmap+1)
+#endif /* 32 bit off_t syscalls */
+
+#ifdef __ARCH_WANT_SYSCALL_DEPRECATED
+#define __NR_alarm 1059
+#define __ARCH_WANT_SYS_ALARM
+__SYSCALL(__NR_alarm, sys_alarm)
+#define __NR_getpgrp 1060
+#define __ARCH_WANT_SYS_GETPGRP
+__SYSCALL(__NR_getpgrp, sys_getpgrp)
+#define __NR_pause 1061
+#define __ARCH_WANT_SYS_PAUSE
+__SYSCALL(__NR_pause, sys_pause)
+#define __NR_time 1062
+#define __ARCH_WANT_SYS_TIME
+#define __ARCH_WANT_COMPAT_SYS_TIME
+__SYSCALL(__NR_time, sys_time)
+#define __NR_utime 1063
+#define __ARCH_WANT_SYS_UTIME
+__SYSCALL(__NR_utime, sys_utime)
+
+#define __NR_creat 1064
+__SYSCALL(__NR_creat, sys_creat)
+#define __NR_getdents 1065
+#define __ARCH_WANT_SYS_GETDENTS
+__SYSCALL(__NR_getdents, sys_getdents)
+#define __NR_futimesat 1066
+__SYSCALL(__NR_futimesat, sys_futimesat)
+#define __NR_select 1067
+#define __ARCH_WANT_SYS_SELECT
+__SYSCALL(__NR_select, sys_select)
+#define __NR_poll 1068
+__SYSCALL(__NR_poll, sys_poll)
+#define __NR_epoll_wait 1069
+__SYSCALL(__NR_epoll_wait, sys_epoll_wait)
+#define __NR_ustat 1070
+__SYSCALL(__NR_ustat, sys_ustat)
+#define __NR_vfork 1071
+__SYSCALL(__NR_vfork, sys_vfork)
+#define __NR_oldwait4 1072
+__SYSCALL(__NR_oldwait4, sys_wait4)
+#define __NR_recv 1073
+__SYSCALL(__NR_recv, sys_recv)
+#define __NR_send 1074
+__SYSCALL(__NR_send, sys_send)
+#define __NR_bdflush 1075
+__SYSCALL(__NR_bdflush, sys_bdflush)
+#define __NR_umount 1076
+__SYSCALL(__NR_umount, sys_oldumount)
+#define __ARCH_WANT_SYS_OLDUMOUNT
+#define __NR_uselib 1077
+__SYSCALL(__NR_uselib, sys_uselib)
+#define __NR__sysctl 1078
+__SYSCALL(__NR__sysctl, sys_sysctl)
+
+#define __NR_fork 1079
+#ifdef CONFIG_MMU
+__SYSCALL(__NR_fork, sys_fork)
+#else
+__SYSCALL(__NR_fork, sys_ni_syscall)
+#endif /* CONFIG_MMU */
+
+#undef __NR_syscalls
+#define __NR_syscalls (__NR_fork+1)
+
+#endif /* __ARCH_WANT_SYSCALL_DEPRECATED */
+
+/*
+ * 32 bit systems traditionally used different
+ * syscalls for off_t and loff_t arguments, while
+ * 64 bit systems only need the off_t version.
+ * For new 32 bit platforms, there is no need to
+ * implement the old 32 bit off_t syscalls, so
+ * they take different names.
+ * Here we map the numbers so that both versions
+ * use the same syscall table layout.
+ */
+#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
+#define __NR_fcntl __NR3264_fcntl
+#define __NR_statfs __NR3264_statfs
+#define __NR_fstatfs __NR3264_fstatfs
+#define __NR_truncate __NR3264_truncate
+#define __NR_ftruncate __NR3264_ftruncate
+#define __NR_lseek __NR3264_lseek
+#define __NR_sendfile __NR3264_sendfile
+#define __NR_newfstatat __NR3264_fstatat
+#define __NR_fstat __NR3264_fstat
+#define __NR_mmap __NR3264_mmap
+#define __NR_fadvise64 __NR3264_fadvise64
+#ifdef __NR3264_stat
+#define __NR_stat __NR3264_stat
+#define __NR_lstat __NR3264_lstat
+#endif
+#else
+#define __NR_fcntl64 __NR3264_fcntl
+#define __NR_statfs64 __NR3264_statfs
+#define __NR_fstatfs64 __NR3264_fstatfs
+#define __NR_truncate64 __NR3264_truncate
+#define __NR_ftruncate64 __NR3264_ftruncate
+#define __NR_llseek __NR3264_lseek
+#define __NR_sendfile64 __NR3264_sendfile
+#define __NR_fstatat64 __NR3264_fstatat
+#define __NR_fstat64 __NR3264_fstat
+#define __NR_mmap2 __NR3264_mmap
+#define __NR_fadvise64_64 __NR3264_fadvise64
+#ifdef __NR3264_stat
+#define __NR_stat64 __NR3264_stat
+#define __NR_lstat64 __NR3264_lstat
+#endif
+#endif
diff --git a/lib/libdss-include/include/asm/auxvec.h b/lib/libdss-include/include/asm/auxvec.h
new file mode 100644 (file)
index 0000000..22d6d88
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_AUXVEC_H
+#define __ASM_AUXVEC_H
+
+/* vDSO location */
+#define AT_SYSINFO_EHDR        33
+
+#endif
diff --git a/lib/libdss-include/include/asm/bitsperlong.h b/lib/libdss-include/include/asm/bitsperlong.h
new file mode 100644 (file)
index 0000000..fce9c29
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_BITSPERLONG_H
+#define __ASM_BITSPERLONG_H
+
+#define __BITS_PER_LONG 64
+
+#include <asm-generic/bitsperlong.h>
+
+#endif /* __ASM_BITSPERLONG_H */
diff --git a/lib/libdss-include/include/asm/byteorder.h b/lib/libdss-include/include/asm/byteorder.h
new file mode 100644 (file)
index 0000000..dc19e95
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_BYTEORDER_H
+#define __ASM_BYTEORDER_H
+
+#ifdef __AARCH64EB__
+#include <linux/byteorder/big_endian.h>
+#else
+#include <linux/byteorder/little_endian.h>
+#endif
+
+#endif /* __ASM_BYTEORDER_H */
diff --git a/lib/libdss-include/include/asm/errno.h b/lib/libdss-include/include/asm/errno.h
new file mode 100644 (file)
index 0000000..4c82b50
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/errno.h>
diff --git a/lib/libdss-include/include/asm/fcntl.h b/lib/libdss-include/include/asm/fcntl.h
new file mode 100644 (file)
index 0000000..cd2e630
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_FCNTL_H
+#define __ASM_FCNTL_H
+
+/*
+ * Using our own definitions for AArch32 (compat) support.
+ */
+#define O_DIRECTORY     040000 /* must be a directory */
+#define O_NOFOLLOW     0100000 /* don't follow links */
+#define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
+#define O_LARGEFILE    0400000
+
+#include <asm-generic/fcntl.h>
+
+#endif
diff --git a/lib/libdss-include/include/asm/hwcap.h b/lib/libdss-include/include/asm/hwcap.h
new file mode 100644 (file)
index 0000000..ab509e9
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_HWCAP_H
+#define __ASM_HWCAP_H
+
+/*
+ * HWCAP flags - for elf_hwcap (in kernel) and AT_HWCAP
+ */
+#define HWCAP_FP               (1 << 0)
+#define HWCAP_ASIMD            (1 << 1)
+#define HWCAP_EVTSTRM          (1 << 2)
+#define HWCAP_AES              (1 << 3)
+#define HWCAP_PMULL            (1 << 4)
+#define HWCAP_SHA1             (1 << 5)
+#define HWCAP_SHA2             (1 << 6)
+#define HWCAP_CRC32            (1 << 7)
+#define HWCAP_ATOMICS          (1 << 8)
+
+#endif /* __ASM_HWCAP_H */
diff --git a/lib/libdss-include/include/asm/ioctl.h b/lib/libdss-include/include/asm/ioctl.h
new file mode 100644 (file)
index 0000000..b279fe0
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ioctl.h>
diff --git a/lib/libdss-include/include/asm/ioctls.h b/lib/libdss-include/include/asm/ioctls.h
new file mode 100644 (file)
index 0000000..ec34c76
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ioctls.h>
diff --git a/lib/libdss-include/include/asm/ipcbuf.h b/lib/libdss-include/include/asm/ipcbuf.h
new file mode 100644 (file)
index 0000000..84c7e51
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/ipcbuf.h>
diff --git a/lib/libdss-include/include/asm/kvm.h b/lib/libdss-include/include/asm/kvm.h
new file mode 100644 (file)
index 0000000..a2fd4d9
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2012,2013 - ARM Ltd
+ * Author: Marc Zyngier <marc.zyngier@arm.com>
+ *
+ * Derived from arch/arm/include/uapi/asm/kvm.h:
+ * Copyright (C) 2012 - Virtual Open Systems and Columbia University
+ * Author: Christoffer Dall <c.dall@virtualopensystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ARM_KVM_H__
+#define __ARM_KVM_H__
+
+#define KVM_SPSR_EL1   0
+#define KVM_SPSR_SVC   KVM_SPSR_EL1
+#define KVM_SPSR_ABT   1
+#define KVM_SPSR_UND   2
+#define KVM_SPSR_IRQ   3
+#define KVM_SPSR_FIQ   4
+#define KVM_NR_SPSR    5
+
+#ifndef __ASSEMBLY__
+#include <linux/psci.h>
+#include <linux/types.h>
+#include <asm/ptrace.h>
+
+#define __KVM_HAVE_GUEST_DEBUG
+#define __KVM_HAVE_IRQ_LINE
+#define __KVM_HAVE_READONLY_MEM
+
+#define KVM_REG_SIZE(id)                                               \
+       (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
+
+struct kvm_regs {
+       struct user_pt_regs regs;       /* sp = sp_el0 */
+
+       __u64   sp_el1;
+       __u64   elr_el1;
+
+       __u64   spsr[KVM_NR_SPSR];
+
+       struct user_fpsimd_state fp_regs;
+};
+
+/*
+ * Supported CPU Targets - Adding a new target type is not recommended,
+ * unless there are some special registers not supported by the
+ * genericv8 syreg table.
+ */
+#define KVM_ARM_TARGET_AEM_V8          0
+#define KVM_ARM_TARGET_FOUNDATION_V8   1
+#define KVM_ARM_TARGET_CORTEX_A57      2
+#define KVM_ARM_TARGET_XGENE_POTENZA   3
+#define KVM_ARM_TARGET_CORTEX_A53      4
+/* Generic ARM v8 target */
+#define KVM_ARM_TARGET_GENERIC_V8      5
+
+#define KVM_ARM_NUM_TARGETS            6
+
+/* KVM_ARM_SET_DEVICE_ADDR ioctl id encoding */
+#define KVM_ARM_DEVICE_TYPE_SHIFT      0
+#define KVM_ARM_DEVICE_TYPE_MASK       (0xffff << KVM_ARM_DEVICE_TYPE_SHIFT)
+#define KVM_ARM_DEVICE_ID_SHIFT                16
+#define KVM_ARM_DEVICE_ID_MASK         (0xffff << KVM_ARM_DEVICE_ID_SHIFT)
+
+/* Supported device IDs */
+#define KVM_ARM_DEVICE_VGIC_V2         0
+
+/* Supported VGIC address types  */
+#define KVM_VGIC_V2_ADDR_TYPE_DIST     0
+#define KVM_VGIC_V2_ADDR_TYPE_CPU      1
+
+#define KVM_VGIC_V2_DIST_SIZE          0x1000
+#define KVM_VGIC_V2_CPU_SIZE           0x2000
+
+/* Supported VGICv3 address types  */
+#define KVM_VGIC_V3_ADDR_TYPE_DIST     2
+#define KVM_VGIC_V3_ADDR_TYPE_REDIST   3
+
+#define KVM_VGIC_V3_DIST_SIZE          SZ_64K
+#define KVM_VGIC_V3_REDIST_SIZE                (2 * SZ_64K)
+
+#define KVM_ARM_VCPU_POWER_OFF         0 /* CPU is started in OFF state */
+#define KVM_ARM_VCPU_EL1_32BIT         1 /* CPU running a 32bit VM */
+#define KVM_ARM_VCPU_PSCI_0_2          2 /* CPU uses PSCI v0.2 */
+
+struct kvm_vcpu_init {
+       __u32 target;
+       __u32 features[7];
+};
+
+struct kvm_sregs {
+};
+
+struct kvm_fpu {
+};
+
+/*
+ * See v8 ARM ARM D7.3: Debug Registers
+ *
+ * The architectural limit is 16 debug registers of each type although
+ * in practice there are usually less (see ID_AA64DFR0_EL1).
+ *
+ * Although the control registers are architecturally defined as 32
+ * bits wide we use a 64 bit structure here to keep parity with
+ * KVM_GET/SET_ONE_REG behaviour which treats all system registers as
+ * 64 bit values. It also allows for the possibility of the
+ * architecture expanding the control registers without having to
+ * change the userspace ABI.
+ */
+#define KVM_ARM_MAX_DBG_REGS 16
+struct kvm_guest_debug_arch {
+       __u64 dbg_bcr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_bvr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_wcr[KVM_ARM_MAX_DBG_REGS];
+       __u64 dbg_wvr[KVM_ARM_MAX_DBG_REGS];
+};
+
+struct kvm_debug_exit_arch {
+       __u32 hsr;
+       __u64 far;      /* used for watchpoints */
+};
+
+/*
+ * Architecture specific defines for kvm_guest_debug->control
+ */
+
+#define KVM_GUESTDBG_USE_SW_BP         (1 << 16)
+#define KVM_GUESTDBG_USE_HW            (1 << 17)
+
+struct kvm_sync_regs {
+};
+
+struct kvm_arch_memory_slot {
+};
+
+/* If you need to interpret the index values, here is the key: */
+#define KVM_REG_ARM_COPROC_MASK                0x000000000FFF0000
+#define KVM_REG_ARM_COPROC_SHIFT       16
+
+/* Normal registers are mapped as coprocessor 16. */
+#define KVM_REG_ARM_CORE               (0x0010 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_CORE_REG(name)     (offsetof(struct kvm_regs, name) / sizeof(__u32))
+
+/* Some registers need more space to represent values. */
+#define KVM_REG_ARM_DEMUX              (0x0011 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_DEMUX_ID_MASK      0x000000000000FF00
+#define KVM_REG_ARM_DEMUX_ID_SHIFT     8
+#define KVM_REG_ARM_DEMUX_ID_CCSIDR    (0x00 << KVM_REG_ARM_DEMUX_ID_SHIFT)
+#define KVM_REG_ARM_DEMUX_VAL_MASK     0x00000000000000FF
+#define KVM_REG_ARM_DEMUX_VAL_SHIFT    0
+
+/* AArch64 system registers */
+#define KVM_REG_ARM64_SYSREG           (0x0013 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM64_SYSREG_OP0_MASK  0x000000000000c000
+#define KVM_REG_ARM64_SYSREG_OP0_SHIFT 14
+#define KVM_REG_ARM64_SYSREG_OP1_MASK  0x0000000000003800
+#define KVM_REG_ARM64_SYSREG_OP1_SHIFT 11
+#define KVM_REG_ARM64_SYSREG_CRN_MASK  0x0000000000000780
+#define KVM_REG_ARM64_SYSREG_CRN_SHIFT 7
+#define KVM_REG_ARM64_SYSREG_CRM_MASK  0x0000000000000078
+#define KVM_REG_ARM64_SYSREG_CRM_SHIFT 3
+#define KVM_REG_ARM64_SYSREG_OP2_MASK  0x0000000000000007
+#define KVM_REG_ARM64_SYSREG_OP2_SHIFT 0
+
+#define ARM64_SYS_REG_SHIFT_MASK(x,n) \
+       (((x) << KVM_REG_ARM64_SYSREG_ ## n ## _SHIFT) & \
+       KVM_REG_ARM64_SYSREG_ ## n ## _MASK)
+
+#define __ARM64_SYS_REG(op0,op1,crn,crm,op2) \
+       (KVM_REG_ARM64 | KVM_REG_ARM64_SYSREG | \
+       ARM64_SYS_REG_SHIFT_MASK(op0, OP0) | \
+       ARM64_SYS_REG_SHIFT_MASK(op1, OP1) | \
+       ARM64_SYS_REG_SHIFT_MASK(crn, CRN) | \
+       ARM64_SYS_REG_SHIFT_MASK(crm, CRM) | \
+       ARM64_SYS_REG_SHIFT_MASK(op2, OP2))
+
+#define ARM64_SYS_REG(...) (__ARM64_SYS_REG(__VA_ARGS__) | KVM_REG_SIZE_U64)
+
+#define KVM_REG_ARM_TIMER_CTL          ARM64_SYS_REG(3, 3, 14, 3, 1)
+#define KVM_REG_ARM_TIMER_CNT          ARM64_SYS_REG(3, 3, 14, 3, 2)
+#define KVM_REG_ARM_TIMER_CVAL         ARM64_SYS_REG(3, 3, 14, 0, 2)
+
+/* Device Control API: ARM VGIC */
+#define KVM_DEV_ARM_VGIC_GRP_ADDR      0
+#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
+#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS  2
+#define   KVM_DEV_ARM_VGIC_CPUID_SHIFT 32
+#define   KVM_DEV_ARM_VGIC_CPUID_MASK  (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT)
+#define   KVM_DEV_ARM_VGIC_OFFSET_SHIFT        0
+#define   KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
+#define KVM_DEV_ARM_VGIC_GRP_NR_IRQS   3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL      4
+#define   KVM_DEV_ARM_VGIC_CTRL_INIT   0
+
+/* KVM_IRQ_LINE irq field index values */
+#define KVM_ARM_IRQ_TYPE_SHIFT         24
+#define KVM_ARM_IRQ_TYPE_MASK          0xff
+#define KVM_ARM_IRQ_VCPU_SHIFT         16
+#define KVM_ARM_IRQ_VCPU_MASK          0xff
+#define KVM_ARM_IRQ_NUM_SHIFT          0
+#define KVM_ARM_IRQ_NUM_MASK           0xffff
+
+/* irq_type field */
+#define KVM_ARM_IRQ_TYPE_CPU           0
+#define KVM_ARM_IRQ_TYPE_SPI           1
+#define KVM_ARM_IRQ_TYPE_PPI           2
+
+/* out-of-kernel GIC cpu interrupt injection irq_number field */
+#define KVM_ARM_IRQ_CPU_IRQ            0
+#define KVM_ARM_IRQ_CPU_FIQ            1
+
+/*
+ * This used to hold the highest supported SPI, but it is now obsolete
+ * and only here to provide source code level compatibility with older
+ * userland. The highest SPI number can be set via KVM_DEV_ARM_VGIC_GRP_NR_IRQS.
+ */
+#define KVM_ARM_IRQ_GIC_MAX            127
+
+/* One single KVM irqchip, ie. the VGIC */
+#define KVM_NR_IRQCHIPS          1
+
+/* PSCI interface */
+#define KVM_PSCI_FN_BASE               0x95c1ba5e
+#define KVM_PSCI_FN(n)                 (KVM_PSCI_FN_BASE + (n))
+
+#define KVM_PSCI_FN_CPU_SUSPEND                KVM_PSCI_FN(0)
+#define KVM_PSCI_FN_CPU_OFF            KVM_PSCI_FN(1)
+#define KVM_PSCI_FN_CPU_ON             KVM_PSCI_FN(2)
+#define KVM_PSCI_FN_MIGRATE            KVM_PSCI_FN(3)
+
+#define KVM_PSCI_RET_SUCCESS           PSCI_RET_SUCCESS
+#define KVM_PSCI_RET_NI                        PSCI_RET_NOT_SUPPORTED
+#define KVM_PSCI_RET_INVAL             PSCI_RET_INVALID_PARAMS
+#define KVM_PSCI_RET_DENIED            PSCI_RET_DENIED
+
+#endif
+
+#endif /* __ARM_KVM_H__ */
diff --git a/lib/libdss-include/include/asm/kvm_para.h b/lib/libdss-include/include/asm/kvm_para.h
new file mode 100644 (file)
index 0000000..14fab8f
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/kvm_para.h>
diff --git a/lib/libdss-include/include/asm/mman.h b/lib/libdss-include/include/asm/mman.h
new file mode 100644 (file)
index 0000000..8eebf89
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/mman.h>
diff --git a/lib/libdss-include/include/asm/msgbuf.h b/lib/libdss-include/include/asm/msgbuf.h
new file mode 100644 (file)
index 0000000..809134c
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/msgbuf.h>
diff --git a/lib/libdss-include/include/asm/param.h b/lib/libdss-include/include/asm/param.h
new file mode 100644 (file)
index 0000000..8e3a281
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_PARAM_H
+#define __ASM_PARAM_H
+
+#define EXEC_PAGESIZE  65536
+
+#include <asm-generic/param.h>
+
+#endif
diff --git a/lib/libdss-include/include/asm/perf_regs.h b/lib/libdss-include/include/asm/perf_regs.h
new file mode 100644 (file)
index 0000000..172b831
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _ASM_ARM64_PERF_REGS_H
+#define _ASM_ARM64_PERF_REGS_H
+
+enum perf_event_arm_regs {
+       PERF_REG_ARM64_X0,
+       PERF_REG_ARM64_X1,
+       PERF_REG_ARM64_X2,
+       PERF_REG_ARM64_X3,
+       PERF_REG_ARM64_X4,
+       PERF_REG_ARM64_X5,
+       PERF_REG_ARM64_X6,
+       PERF_REG_ARM64_X7,
+       PERF_REG_ARM64_X8,
+       PERF_REG_ARM64_X9,
+       PERF_REG_ARM64_X10,
+       PERF_REG_ARM64_X11,
+       PERF_REG_ARM64_X12,
+       PERF_REG_ARM64_X13,
+       PERF_REG_ARM64_X14,
+       PERF_REG_ARM64_X15,
+       PERF_REG_ARM64_X16,
+       PERF_REG_ARM64_X17,
+       PERF_REG_ARM64_X18,
+       PERF_REG_ARM64_X19,
+       PERF_REG_ARM64_X20,
+       PERF_REG_ARM64_X21,
+       PERF_REG_ARM64_X22,
+       PERF_REG_ARM64_X23,
+       PERF_REG_ARM64_X24,
+       PERF_REG_ARM64_X25,
+       PERF_REG_ARM64_X26,
+       PERF_REG_ARM64_X27,
+       PERF_REG_ARM64_X28,
+       PERF_REG_ARM64_X29,
+       PERF_REG_ARM64_LR,
+       PERF_REG_ARM64_SP,
+       PERF_REG_ARM64_PC,
+       PERF_REG_ARM64_MAX,
+};
+#endif /* _ASM_ARM64_PERF_REGS_H */
diff --git a/lib/libdss-include/include/asm/poll.h b/lib/libdss-include/include/asm/poll.h
new file mode 100644 (file)
index 0000000..c98509d
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/poll.h>
diff --git a/lib/libdss-include/include/asm/posix_types.h b/lib/libdss-include/include/asm/posix_types.h
new file mode 100644 (file)
index 0000000..7985ff6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __ASM_POSIX_TYPES_H
+#define __ASM_POSIX_TYPES_H
+
+typedef unsigned short __kernel_old_uid_t;
+typedef unsigned short __kernel_old_gid_t;
+#define __kernel_old_uid_t __kernel_old_uid_t
+
+#include <asm-generic/posix_types.h>
+
+#endif /*  __ASM_POSIX_TYPES_H */
diff --git a/lib/libdss-include/include/asm/ptrace.h b/lib/libdss-include/include/asm/ptrace.h
new file mode 100644 (file)
index 0000000..a11e431
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Based on arch/arm/include/asm/ptrace.h
+ *
+ * Copyright (C) 1996-2003 Russell King
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_PTRACE_H
+#define __ASM_PTRACE_H
+
+#include <linux/types.h>
+
+#include <asm/hwcap.h>
+
+
+/*
+ * PSR bits
+ */
+#define PSR_MODE_EL0t  0x00000000
+#define PSR_MODE_EL1t  0x00000004
+#define PSR_MODE_EL1h  0x00000005
+#define PSR_MODE_EL2t  0x00000008
+#define PSR_MODE_EL2h  0x00000009
+#define PSR_MODE_EL3t  0x0000000c
+#define PSR_MODE_EL3h  0x0000000d
+#define PSR_MODE_MASK  0x0000000f
+
+/* AArch32 CPSR bits */
+#define PSR_MODE32_BIT         0x00000010
+
+/* AArch64 SPSR bits */
+#define PSR_F_BIT      0x00000040
+#define PSR_I_BIT      0x00000080
+#define PSR_A_BIT      0x00000100
+#define PSR_D_BIT      0x00000200
+#define PSR_PAN_BIT    0x00400000
+#define PSR_Q_BIT      0x08000000
+#define PSR_V_BIT      0x10000000
+#define PSR_C_BIT      0x20000000
+#define PSR_Z_BIT      0x40000000
+#define PSR_N_BIT      0x80000000
+
+/*
+ * Groups of PSR bits
+ */
+#define PSR_f          0xff000000      /* Flags                */
+#define PSR_s          0x00ff0000      /* Status               */
+#define PSR_x          0x0000ff00      /* Extension            */
+#define PSR_c          0x000000ff      /* Control              */
+
+
+#ifndef __ASSEMBLY__
+
+/*
+ * User structures for general purpose, floating point and debug registers.
+ */
+struct user_pt_regs {
+       __u64           regs[31];
+       __u64           sp;
+       __u64           pc;
+       __u64           pstate;
+};
+
+struct user_fpsimd_state {
+       __uint128_t     vregs[32];
+       __u32           fpsr;
+       __u32           fpcr;
+};
+
+struct user_hwdebug_state {
+       __u32           dbg_info;
+       __u32           pad;
+       struct {
+               __u64   addr;
+               __u32   ctrl;
+               __u32   pad;
+       }               dbg_regs[16];
+};
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_PTRACE_H */
diff --git a/lib/libdss-include/include/asm/resource.h b/lib/libdss-include/include/asm/resource.h
new file mode 100644 (file)
index 0000000..04bc4db
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/resource.h>
diff --git a/lib/libdss-include/include/asm/sembuf.h b/lib/libdss-include/include/asm/sembuf.h
new file mode 100644 (file)
index 0000000..7673b83
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/sembuf.h>
diff --git a/lib/libdss-include/include/asm/setup.h b/lib/libdss-include/include/asm/setup.h
new file mode 100644 (file)
index 0000000..9cf2e46
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Based on arch/arm/include/asm/setup.h
+ *
+ * Copyright (C) 1997-1999 Russell King
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SETUP_H
+#define __ASM_SETUP_H
+
+#include <linux/types.h>
+
+#define COMMAND_LINE_SIZE      2048
+
+#endif
diff --git a/lib/libdss-include/include/asm/shmbuf.h b/lib/libdss-include/include/asm/shmbuf.h
new file mode 100644 (file)
index 0000000..83c05fc
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/shmbuf.h>
diff --git a/lib/libdss-include/include/asm/sigcontext.h b/lib/libdss-include/include/asm/sigcontext.h
new file mode 100644 (file)
index 0000000..0afb675
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGCONTEXT_H
+#define __ASM_SIGCONTEXT_H
+
+#include <linux/types.h>
+
+/*
+ * Signal context structure - contains all info to do with the state
+ * before the signal handler was invoked.
+ */
+struct sigcontext {
+       __u64 fault_address;
+       /* AArch64 registers */
+       __u64 regs[31];
+       __u64 sp;
+       __u64 pc;
+       __u64 pstate;
+       /* 4K reserved for FP/SIMD state and future expansion */
+       __u8 __reserved[4096] __attribute__((__aligned__(16)));
+};
+
+/*
+ * Header to be used at the beginning of structures extending the user
+ * context. Such structures must be placed after the rt_sigframe on the stack
+ * and be 16-byte aligned. The last structure must be a dummy one with the
+ * magic and size set to 0.
+ */
+struct _aarch64_ctx {
+       __u32 magic;
+       __u32 size;
+};
+
+#define FPSIMD_MAGIC   0x46508001
+
+struct fpsimd_context {
+       struct _aarch64_ctx head;
+       __u32 fpsr;
+       __u32 fpcr;
+       __uint128_t vregs[32];
+};
+
+/* ESR_EL1 context */
+#define ESR_MAGIC      0x45535201
+
+struct esr_context {
+       struct _aarch64_ctx head;
+       __u64 esr;
+};
+
+#endif /* __ASM_SIGCONTEXT_H */
diff --git a/lib/libdss-include/include/asm/siginfo.h b/lib/libdss-include/include/asm/siginfo.h
new file mode 100644 (file)
index 0000000..5a74a08
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGINFO_H
+#define __ASM_SIGINFO_H
+
+#define __ARCH_SI_PREAMBLE_SIZE        (4 * sizeof(int))
+
+#include <asm-generic/siginfo.h>
+
+#endif
diff --git a/lib/libdss-include/include/asm/signal.h b/lib/libdss-include/include/asm/signal.h
new file mode 100644 (file)
index 0000000..991bf5d
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_SIGNAL_H
+#define __ASM_SIGNAL_H
+
+/* Required for AArch32 compatibility. */
+#define SA_RESTORER    0x04000000
+
+#define MINSIGSTKSZ 5120
+#define SIGSTKSZ    16384
+
+#include <asm-generic/signal.h>
+
+#endif
diff --git a/lib/libdss-include/include/asm/socket.h b/lib/libdss-include/include/asm/socket.h
new file mode 100644 (file)
index 0000000..6b71384
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/socket.h>
diff --git a/lib/libdss-include/include/asm/sockios.h b/lib/libdss-include/include/asm/sockios.h
new file mode 100644 (file)
index 0000000..def6d47
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/sockios.h>
diff --git a/lib/libdss-include/include/asm/stat.h b/lib/libdss-include/include/asm/stat.h
new file mode 100644 (file)
index 0000000..eeb702e
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <asm-generic/stat.h>
diff --git a/lib/libdss-include/include/asm/statfs.h b/lib/libdss-include/include/asm/statfs.h
new file mode 100644 (file)
index 0000000..6f62190
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_STATFS_H
+#define __ASM_STATFS_H
+
+#define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4)))
+
+#include <asm-generic/statfs.h>
+
+#endif
diff --git a/lib/libdss-include/include/asm/swab.h b/lib/libdss-include/include/asm/swab.h
new file mode 100644 (file)
index 0000000..7847e56
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/swab.h>
diff --git a/lib/libdss-include/include/asm/termbits.h b/lib/libdss-include/include/asm/termbits.h
new file mode 100644 (file)
index 0000000..3935b10
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/termbits.h>
diff --git a/lib/libdss-include/include/asm/termios.h b/lib/libdss-include/include/asm/termios.h
new file mode 100644 (file)
index 0000000..280d78a
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/termios.h>
diff --git a/lib/libdss-include/include/asm/types.h b/lib/libdss-include/include/asm/types.h
new file mode 100644 (file)
index 0000000..b9e79bc
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/types.h>
diff --git a/lib/libdss-include/include/asm/ucontext.h b/lib/libdss-include/include/asm/ucontext.h
new file mode 100644 (file)
index 0000000..8cf8a4d
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_UCONTEXT_H
+#define __ASM_UCONTEXT_H
+
+#include <linux/types.h>
+
+struct ucontext {
+       unsigned long     uc_flags;
+       struct ucontext  *uc_link;
+       stack_t           uc_stack;
+       sigset_t          uc_sigmask;
+       /* glibc uses a 1024-bit sigset_t */
+       __u8              __unused[1024 / 8 - sizeof(sigset_t)];
+       /* last for future expansion */
+       struct sigcontext uc_mcontext;
+};
+
+#endif /* __ASM_UCONTEXT_H */
diff --git a/lib/libdss-include/include/asm/unistd.h b/lib/libdss-include/include/asm/unistd.h
new file mode 100644 (file)
index 0000000..1caadc2
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <asm-generic/unistd.h>
diff --git a/lib/libdss-include/include/assert.h b/lib/libdss-include/include/assert.h
new file mode 100644 (file)
index 0000000..aa6c503
--- /dev/null
@@ -0,0 +1,121 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.2 Diagnostics       <assert.h>
+ */
+
+#ifdef _ASSERT_H
+
+# undef        _ASSERT_H
+# undef        assert
+# undef __ASSERT_VOID_CAST
+
+# ifdef        __USE_GNU
+#  undef assert_perror
+# endif
+
+#endif /* assert.h     */
+
+#define        _ASSERT_H       1
+#include <features.h>
+
+#if defined __cplusplus && __GNUC_PREREQ (2,95)
+# define __ASSERT_VOID_CAST static_cast<void>
+#else
+# define __ASSERT_VOID_CAST (void)
+#endif
+
+/* void assert (int expression);
+
+   If NDEBUG is defined, do nothing.
+   If not, and EXPRESSION is zero, print an error message and abort.  */
+
+#ifdef NDEBUG
+
+# define assert(expr)          (__ASSERT_VOID_CAST (0))
+
+/* void assert_perror (int errnum);
+
+   If NDEBUG is defined, do nothing.  If not, and ERRNUM is not zero, print an
+   error message with the error text for ERRNUM and abort.
+   (This is a GNU extension.) */
+
+# ifdef        __USE_GNU
+#  define assert_perror(errnum)        (__ASSERT_VOID_CAST (0))
+# endif
+
+#else /* Not NDEBUG.  */
+
+#ifndef _ASSERT_H_DECLS
+#define _ASSERT_H_DECLS
+__BEGIN_DECLS
+
+/* This prints an "Assertion failed" message and aborts.  */
+extern void __assert_fail (const char *__assertion, const char *__file,
+                          unsigned int __line, const char *__function)
+     __THROW __attribute__ ((__noreturn__));
+
+/* Likewise, but prints the error text for ERRNUM.  */
+extern void __assert_perror_fail (int __errnum, const char *__file,
+                                 unsigned int __line, const char *__function)
+     __THROW __attribute__ ((__noreturn__));
+
+
+/* The following is not at all used here but needed for standard
+   compliance.  */
+extern void __assert (const char *__assertion, const char *__file, int __line)
+     __THROW __attribute__ ((__noreturn__));
+
+
+__END_DECLS
+#endif /* Not _ASSERT_H_DECLS */
+
+# define assert(expr)                                                  \
+  ((expr)                                                              \
+   ? __ASSERT_VOID_CAST (0)                                            \
+   : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+
+# ifdef        __USE_GNU
+#  define assert_perror(errnum)                                                \
+  (!(errnum)                                                           \
+   ? __ASSERT_VOID_CAST (0)                                            \
+   : __assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION))
+# endif
+
+/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
+   which contains the name of the function currently being defined.
+   This is broken in G++ before version 2.6.
+   C9x has a similar variable called __func__, but prefer the GCC one since
+   it demangles C++ function names.  */
+# if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
+#   define __ASSERT_FUNCTION   __PRETTY_FUNCTION__
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __ASSERT_FUNCTION   __func__
+#  else
+#   define __ASSERT_FUNCTION   ((const char *) 0)
+#  endif
+# endif
+
+#endif /* NDEBUG.  */
+
+
+#if defined __USE_ISOC11 && !defined __cplusplus
+# undef static_assert
+# define static_assert _Static_assert
+#endif
diff --git a/lib/libdss-include/include/bits/a.out.h b/lib/libdss-include/include/bits/a.out.h
new file mode 100644 (file)
index 0000000..0e7fb03
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef __A_OUT_GNU_H__
+# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
+#endif
+
+/* Signal to users of this header that this architecture really doesn't
+   support a.out binary format.  */
+#define __NO_A_OUT_SUPPORT 1
diff --git a/lib/libdss-include/include/bits/auxv.h b/lib/libdss-include/include/bits/auxv.h
new file mode 100644 (file)
index 0000000..76701c3
--- /dev/null
@@ -0,0 +1,76 @@
+/* Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Legal values for a_type (entry type).  */
+
+#define AT_NULL                0               /* End of vector */
+#define AT_IGNORE      1               /* Entry should be ignored */
+#define AT_EXECFD      2               /* File descriptor of program */
+#define AT_PHDR                3               /* Program headers for program */
+#define AT_PHENT       4               /* Size of program header entry */
+#define AT_PHNUM       5               /* Number of program headers */
+#define AT_PAGESZ      6               /* System page size */
+#define AT_BASE                7               /* Base address of interpreter */
+#define AT_FLAGS       8               /* Flags */
+#define AT_ENTRY       9               /* Entry point of program */
+#define AT_NOTELF      10              /* Program is not ELF */
+#define AT_UID         11              /* Real uid */
+#define AT_EUID                12              /* Effective uid */
+#define AT_GID         13              /* Real gid */
+#define AT_EGID                14              /* Effective gid */
+#define AT_CLKTCK      17              /* Frequency of times() */
+
+/* Some more special a_type values describing the hardware.  */
+#define AT_PLATFORM    15              /* String identifying platform.  */
+#define AT_HWCAP       16              /* Machine-dependent hints about
+                                          processor capabilities.  */
+
+/* This entry gives some information about the FPU initialization
+   performed by the kernel.  */
+#define AT_FPUCW       18              /* Used FPU control word.  */
+
+/* Cache block sizes.  */
+#define AT_DCACHEBSIZE 19              /* Data cache block size.  */
+#define AT_ICACHEBSIZE 20              /* Instruction cache block size.  */
+#define AT_UCACHEBSIZE 21              /* Unified cache block size.  */
+
+/* A special ignored value for PPC, used by the kernel to control the
+   interpretation of the AUXV. Must be > 16.  */
+#define AT_IGNOREPPC   22              /* Entry should be ignored.  */
+
+#define        AT_SECURE       23              /* Boolean, was exec setuid-like?  */
+
+#define AT_BASE_PLATFORM 24            /* String identifying real platforms.*/
+
+#define AT_RANDOM      25              /* Address of 16 random bytes.  */
+
+#define AT_HWCAP2      26              /* More machine-dependent hints about
+                                          processor capabilities.  */
+
+#define AT_EXECFN      31              /* Filename of executable.  */
+
+/* Pointer to the global system page used for system calls and other
+   nice things.  */
+#define AT_SYSINFO     32
+#define AT_SYSINFO_EHDR        33
+
+/* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
+   log2 of line size; mask those to get cache size.  */
+#define AT_L1I_CACHESHAPE      34
+#define AT_L1D_CACHESHAPE      35
+#define AT_L2_CACHESHAPE       36
+#define AT_L3_CACHESHAPE       37
diff --git a/lib/libdss-include/include/bits/byteswap-16.h b/lib/libdss-include/include/bits/byteswap-16.h
new file mode 100644 (file)
index 0000000..8063aa8
--- /dev/null
@@ -0,0 +1,34 @@
+/* Macros to swap the order of bytes in 16-bit integer values.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_BYTESWAP_H
+# error "Never use <bits/byteswap-16.h> directly; include <byteswap.h> instead."
+#endif
+
+#ifdef __GNUC__
+# define __bswap_16(x) \
+    (__extension__                                                           \
+     ({ unsigned short int __bsx = (unsigned short int) (x);                 \
+       __bswap_constant_16 (__bsx); }))
+#else
+static __inline unsigned short int
+__bswap_16 (unsigned short int __bsx)
+{
+  return __bswap_constant_16 (__bsx);
+}
+#endif
diff --git a/lib/libdss-include/include/bits/byteswap.h b/lib/libdss-include/include/bits/byteswap.h
new file mode 100644 (file)
index 0000000..0effea6
--- /dev/null
@@ -0,0 +1,112 @@
+/* Macros to swap the order of bytes in integer values.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
+# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
+#endif
+
+#ifndef _BITS_BYTESWAP_H
+#define _BITS_BYTESWAP_H 1
+
+#include <features.h>
+#include <bits/types.h>
+
+/* Swap bytes in 16 bit value.  */
+#define __bswap_constant_16(x) \
+       ((unsigned short int)((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)))
+
+/* Get __bswap_16.  */
+#include <bits/byteswap-16.h>
+
+/* Swap bytes in 32 bit value.  */
+#define __bswap_constant_32(x) \
+     ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >>  8) |            \
+      (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
+
+#ifdef __GNUC__
+# if __GNUC_PREREQ (4, 3)
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+  return __builtin_bswap32 (__bsx);
+}
+# else
+#  define __bswap_32(x) \
+  (__extension__                                                             \
+   ({ unsigned int __bsx = (x); __bswap_constant_32 (__bsx); }))
+# endif
+#else
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+  return __bswap_constant_32 (__bsx);
+}
+#endif
+
+/* Swap bytes in 64 bit value.  */
+#if __GNUC_PREREQ (2, 0)
+# define __bswap_constant_64(x) \
+     (__extension__ ((((x) & 0xff00000000000000ull) >> 56)                   \
+                    | (((x) & 0x00ff000000000000ull) >> 40)                  \
+                    | (((x) & 0x0000ff0000000000ull) >> 24)                  \
+                    | (((x) & 0x000000ff00000000ull) >> 8)                   \
+                    | (((x) & 0x00000000ff000000ull) << 8)                   \
+                    | (((x) & 0x0000000000ff0000ull) << 24)                  \
+                    | (((x) & 0x000000000000ff00ull) << 40)                  \
+                    | (((x) & 0x00000000000000ffull) << 56)))
+
+# if __GNUC_PREREQ (4, 3)
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+  return __builtin_bswap64 (__bsx);
+}
+# else
+#  define __bswap_64(x) \
+     (__extension__                                                          \
+      ({ union { __extension__ __uint64_t __ll;                                      \
+                unsigned int __l[2]; } __w, __r;                             \
+        if (__builtin_constant_p (x))                                        \
+          __r.__ll = __bswap_constant_64 (x);                                \
+        else                                                                 \
+          {                                                                  \
+            __w.__ll = (x);                                                  \
+            __r.__l[0] = __bswap_32 (__w.__l[1]);                            \
+            __r.__l[1] = __bswap_32 (__w.__l[0]);                            \
+          }                                                                  \
+        __r.__ll; }))
+# endif
+#else
+# define __bswap_constant_64(x) \
+     ((((x) & 0xff00000000000000ull) >> 56)                                  \
+      | (((x) & 0x00ff000000000000ull) >> 40)                                \
+      | (((x) & 0x0000ff0000000000ull) >> 24)                                \
+      | (((x) & 0x000000ff00000000ull) >> 8)                                 \
+      | (((x) & 0x00000000ff000000ull) << 8)                                 \
+      | (((x) & 0x0000000000ff0000ull) << 24)                                \
+      | (((x) & 0x000000000000ff00ull) << 40)                                \
+      | (((x) & 0x00000000000000ffull) << 56))
+
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+  return __bswap_constant_64 (__bsx);
+}
+#endif
+
+#endif /* _BITS_BYTESWAP_H */
diff --git a/lib/libdss-include/include/bits/cmathcalls.h b/lib/libdss-include/include/bits/cmathcalls.h
new file mode 100644 (file)
index 0000000..e02707e
--- /dev/null
@@ -0,0 +1,158 @@
+/* Prototype declarations for complex math functions;
+   helper file for <complex.h>.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* NOTE: Because of the special way this file is used by <complex.h>, this
+   file must NOT be protected from multiple inclusion as header files
+   usually are.
+
+   This file provides prototype declarations for the math functions.
+   Most functions are declared using the macro:
+
+   __MATHCALL (NAME, (ARGS...));
+
+   This means there is a function `NAME' returning `double' and a function
+   `NAMEf' returning `float'.  Each place `_Mdouble_' appears in the
+   prototype, that is actually `double' in the prototype for `NAME' and
+   `float' in the prototype for `NAMEf'.  Reentrant variant functions are
+   called `NAME_r' and `NAMEf_r'.
+
+   Functions returning other types like `int' are declared using the macro:
+
+   __MATHDECL (TYPE, NAME, (ARGS...));
+
+   This is just like __MATHCALL but for a function returning `TYPE'
+   instead of `_Mdouble_'.  In all of these cases, there is still
+   both a `NAME' and a `NAMEf' that takes `float' arguments.  */
+
+#ifndef _COMPLEX_H
+#error "Never use <bits/cmathcalls.h> directly; include <complex.h> instead."
+#endif
+
+#define _Mdouble_complex_ _Mdouble_ _Complex
+
+
+/* Trigonometric functions.  */
+
+/* Arc cosine of Z.  */
+__MATHCALL (cacos, (_Mdouble_complex_ __z));
+/* Arc sine of Z.  */
+__MATHCALL (casin, (_Mdouble_complex_ __z));
+/* Arc tangent of Z.  */
+__MATHCALL (catan, (_Mdouble_complex_ __z));
+
+/* Cosine of Z.  */
+__MATHCALL (ccos, (_Mdouble_complex_ __z));
+/* Sine of Z.  */
+__MATHCALL (csin, (_Mdouble_complex_ __z));
+/* Tangent of Z.  */
+__MATHCALL (ctan, (_Mdouble_complex_ __z));
+
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic arc cosine of Z.  */
+__MATHCALL (cacosh, (_Mdouble_complex_ __z));
+/* Hyperbolic arc sine of Z.  */
+__MATHCALL (casinh, (_Mdouble_complex_ __z));
+/* Hyperbolic arc tangent of Z.  */
+__MATHCALL (catanh, (_Mdouble_complex_ __z));
+
+/* Hyperbolic cosine of Z.  */
+__MATHCALL (ccosh, (_Mdouble_complex_ __z));
+/* Hyperbolic sine of Z.  */
+__MATHCALL (csinh, (_Mdouble_complex_ __z));
+/* Hyperbolic tangent of Z.  */
+__MATHCALL (ctanh, (_Mdouble_complex_ __z));
+
+
+/* Exponential and logarithmic functions.  */
+
+/* Exponential function of Z.  */
+__MATHCALL (cexp, (_Mdouble_complex_ __z));
+
+/* Natural logarithm of Z.  */
+__MATHCALL (clog, (_Mdouble_complex_ __z));
+
+#ifdef __USE_GNU
+/* The base 10 logarithm is not defined by the standard but to implement
+   the standard C++ library it is handy.  */
+__MATHCALL (clog10, (_Mdouble_complex_ __z));
+#endif
+
+/* Power functions.  */
+
+/* Return X to the Y power.  */
+__MATHCALL (cpow, (_Mdouble_complex_ __x, _Mdouble_complex_ __y));
+
+/* Return the square root of Z.  */
+__MATHCALL (csqrt, (_Mdouble_complex_ __z));
+
+
+/* Absolute value, conjugates, and projection.  */
+
+/* Absolute value of Z.  */
+__MATHDECL (_Mdouble_,cabs, (_Mdouble_complex_ __z));
+
+/* Argument value of Z.  */
+__MATHDECL (_Mdouble_,carg, (_Mdouble_complex_ __z));
+
+/* Complex conjugate of Z.  */
+__MATHCALL (conj, (_Mdouble_complex_ __z));
+
+/* Projection of Z onto the Riemann sphere.  */
+__MATHCALL (cproj, (_Mdouble_complex_ __z));
+
+
+/* Decomposing complex values.  */
+
+/* Imaginary part of Z.  */
+__MATHDECL (_Mdouble_,cimag, (_Mdouble_complex_ __z));
+
+/* Real part of Z.  */
+__MATHDECL (_Mdouble_,creal, (_Mdouble_complex_ __z));
+
+
+/* Now some optimized versions.  GCC has handy notations for these
+   functions.  Recent GCC handles these as builtin functions so does
+   not need inlines.  */
+#if defined __GNUC__ && !__GNUC_PREREQ (2, 97) && defined __OPTIMIZE__ \
+    && defined __extern_inline
+
+/* Imaginary part of Z.  */
+__extern_inline _Mdouble_
+__MATH_PRECNAME(cimag) (_Mdouble_complex_ __z) __THROW
+{
+  return __imag__ __z;
+}
+
+/* Real part of Z.  */
+__extern_inline _Mdouble_
+__MATH_PRECNAME(creal) (_Mdouble_complex_ __z) __THROW
+{
+  return __real__ __z;
+}
+
+/* Complex conjugate of Z.  */
+__extern_inline _Mdouble_complex_
+__MATH_PRECNAME(conj) (_Mdouble_complex_ __z) __THROW
+{
+  return __extension__ ~__z;
+}
+
+#endif
diff --git a/lib/libdss-include/include/bits/confname.h b/lib/libdss-include/include/bits/confname.h
new file mode 100644 (file)
index 0000000..b635933
--- /dev/null
@@ -0,0 +1,675 @@
+/* `sysconf', `pathconf', and `confstr' NAME values.  Generic version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never use <bits/confname.h> directly; include <unistd.h> instead."
+#endif
+
+/* Values for the NAME argument to `pathconf' and `fpathconf'.  */
+enum
+  {
+    _PC_LINK_MAX,
+#define        _PC_LINK_MAX                    _PC_LINK_MAX
+    _PC_MAX_CANON,
+#define        _PC_MAX_CANON                   _PC_MAX_CANON
+    _PC_MAX_INPUT,
+#define        _PC_MAX_INPUT                   _PC_MAX_INPUT
+    _PC_NAME_MAX,
+#define        _PC_NAME_MAX                    _PC_NAME_MAX
+    _PC_PATH_MAX,
+#define        _PC_PATH_MAX                    _PC_PATH_MAX
+    _PC_PIPE_BUF,
+#define        _PC_PIPE_BUF                    _PC_PIPE_BUF
+    _PC_CHOWN_RESTRICTED,
+#define        _PC_CHOWN_RESTRICTED            _PC_CHOWN_RESTRICTED
+    _PC_NO_TRUNC,
+#define        _PC_NO_TRUNC                    _PC_NO_TRUNC
+    _PC_VDISABLE,
+#define _PC_VDISABLE                   _PC_VDISABLE
+    _PC_SYNC_IO,
+#define        _PC_SYNC_IO                     _PC_SYNC_IO
+    _PC_ASYNC_IO,
+#define        _PC_ASYNC_IO                    _PC_ASYNC_IO
+    _PC_PRIO_IO,
+#define        _PC_PRIO_IO                     _PC_PRIO_IO
+    _PC_SOCK_MAXBUF,
+#define        _PC_SOCK_MAXBUF                 _PC_SOCK_MAXBUF
+    _PC_FILESIZEBITS,
+#define _PC_FILESIZEBITS               _PC_FILESIZEBITS
+    _PC_REC_INCR_XFER_SIZE,
+#define _PC_REC_INCR_XFER_SIZE         _PC_REC_INCR_XFER_SIZE
+    _PC_REC_MAX_XFER_SIZE,
+#define _PC_REC_MAX_XFER_SIZE          _PC_REC_MAX_XFER_SIZE
+    _PC_REC_MIN_XFER_SIZE,
+#define _PC_REC_MIN_XFER_SIZE          _PC_REC_MIN_XFER_SIZE
+    _PC_REC_XFER_ALIGN,
+#define _PC_REC_XFER_ALIGN             _PC_REC_XFER_ALIGN
+    _PC_ALLOC_SIZE_MIN,
+#define _PC_ALLOC_SIZE_MIN             _PC_ALLOC_SIZE_MIN
+    _PC_SYMLINK_MAX,
+#define _PC_SYMLINK_MAX                        _PC_SYMLINK_MAX
+    _PC_2_SYMLINKS
+#define _PC_2_SYMLINKS                 _PC_2_SYMLINKS
+  };
+
+/* Values for the argument to `sysconf'.  */
+enum
+  {
+    _SC_ARG_MAX,
+#define        _SC_ARG_MAX                     _SC_ARG_MAX
+    _SC_CHILD_MAX,
+#define        _SC_CHILD_MAX                   _SC_CHILD_MAX
+    _SC_CLK_TCK,
+#define        _SC_CLK_TCK                     _SC_CLK_TCK
+    _SC_NGROUPS_MAX,
+#define        _SC_NGROUPS_MAX                 _SC_NGROUPS_MAX
+    _SC_OPEN_MAX,
+#define        _SC_OPEN_MAX                    _SC_OPEN_MAX
+    _SC_STREAM_MAX,
+#define        _SC_STREAM_MAX                  _SC_STREAM_MAX
+    _SC_TZNAME_MAX,
+#define        _SC_TZNAME_MAX                  _SC_TZNAME_MAX
+    _SC_JOB_CONTROL,
+#define        _SC_JOB_CONTROL                 _SC_JOB_CONTROL
+    _SC_SAVED_IDS,
+#define        _SC_SAVED_IDS                   _SC_SAVED_IDS
+    _SC_REALTIME_SIGNALS,
+#define        _SC_REALTIME_SIGNALS            _SC_REALTIME_SIGNALS
+    _SC_PRIORITY_SCHEDULING,
+#define        _SC_PRIORITY_SCHEDULING         _SC_PRIORITY_SCHEDULING
+    _SC_TIMERS,
+#define        _SC_TIMERS                      _SC_TIMERS
+    _SC_ASYNCHRONOUS_IO,
+#define        _SC_ASYNCHRONOUS_IO             _SC_ASYNCHRONOUS_IO
+    _SC_PRIORITIZED_IO,
+#define        _SC_PRIORITIZED_IO              _SC_PRIORITIZED_IO
+    _SC_SYNCHRONIZED_IO,
+#define        _SC_SYNCHRONIZED_IO             _SC_SYNCHRONIZED_IO
+    _SC_FSYNC,
+#define        _SC_FSYNC                       _SC_FSYNC
+    _SC_MAPPED_FILES,
+#define        _SC_MAPPED_FILES                _SC_MAPPED_FILES
+    _SC_MEMLOCK,
+#define        _SC_MEMLOCK                     _SC_MEMLOCK
+    _SC_MEMLOCK_RANGE,
+#define        _SC_MEMLOCK_RANGE               _SC_MEMLOCK_RANGE
+    _SC_MEMORY_PROTECTION,
+#define        _SC_MEMORY_PROTECTION           _SC_MEMORY_PROTECTION
+    _SC_MESSAGE_PASSING,
+#define        _SC_MESSAGE_PASSING             _SC_MESSAGE_PASSING
+    _SC_SEMAPHORES,
+#define        _SC_SEMAPHORES                  _SC_SEMAPHORES
+    _SC_SHARED_MEMORY_OBJECTS,
+#define        _SC_SHARED_MEMORY_OBJECTS       _SC_SHARED_MEMORY_OBJECTS
+    _SC_AIO_LISTIO_MAX,
+#define        _SC_AIO_LISTIO_MAX              _SC_AIO_LISTIO_MAX
+    _SC_AIO_MAX,
+#define        _SC_AIO_MAX                     _SC_AIO_MAX
+    _SC_AIO_PRIO_DELTA_MAX,
+#define        _SC_AIO_PRIO_DELTA_MAX          _SC_AIO_PRIO_DELTA_MAX
+    _SC_DELAYTIMER_MAX,
+#define        _SC_DELAYTIMER_MAX              _SC_DELAYTIMER_MAX
+    _SC_MQ_OPEN_MAX,
+#define        _SC_MQ_OPEN_MAX                 _SC_MQ_OPEN_MAX
+    _SC_MQ_PRIO_MAX,
+#define        _SC_MQ_PRIO_MAX                 _SC_MQ_PRIO_MAX
+    _SC_VERSION,
+#define        _SC_VERSION                     _SC_VERSION
+    _SC_PAGESIZE,
+#define        _SC_PAGESIZE                    _SC_PAGESIZE
+#define        _SC_PAGE_SIZE                   _SC_PAGESIZE
+    _SC_RTSIG_MAX,
+#define        _SC_RTSIG_MAX                   _SC_RTSIG_MAX
+    _SC_SEM_NSEMS_MAX,
+#define        _SC_SEM_NSEMS_MAX               _SC_SEM_NSEMS_MAX
+    _SC_SEM_VALUE_MAX,
+#define        _SC_SEM_VALUE_MAX               _SC_SEM_VALUE_MAX
+    _SC_SIGQUEUE_MAX,
+#define        _SC_SIGQUEUE_MAX                _SC_SIGQUEUE_MAX
+    _SC_TIMER_MAX,
+#define        _SC_TIMER_MAX                   _SC_TIMER_MAX
+
+    /* Values for the argument to `sysconf'
+       corresponding to _POSIX2_* symbols.  */
+    _SC_BC_BASE_MAX,
+#define        _SC_BC_BASE_MAX                 _SC_BC_BASE_MAX
+    _SC_BC_DIM_MAX,
+#define        _SC_BC_DIM_MAX                  _SC_BC_DIM_MAX
+    _SC_BC_SCALE_MAX,
+#define        _SC_BC_SCALE_MAX                _SC_BC_SCALE_MAX
+    _SC_BC_STRING_MAX,
+#define        _SC_BC_STRING_MAX               _SC_BC_STRING_MAX
+    _SC_COLL_WEIGHTS_MAX,
+#define        _SC_COLL_WEIGHTS_MAX            _SC_COLL_WEIGHTS_MAX
+    _SC_EQUIV_CLASS_MAX,
+#define        _SC_EQUIV_CLASS_MAX             _SC_EQUIV_CLASS_MAX
+    _SC_EXPR_NEST_MAX,
+#define        _SC_EXPR_NEST_MAX               _SC_EXPR_NEST_MAX
+    _SC_LINE_MAX,
+#define        _SC_LINE_MAX                    _SC_LINE_MAX
+    _SC_RE_DUP_MAX,
+#define        _SC_RE_DUP_MAX                  _SC_RE_DUP_MAX
+    _SC_CHARCLASS_NAME_MAX,
+#define        _SC_CHARCLASS_NAME_MAX          _SC_CHARCLASS_NAME_MAX
+
+    _SC_2_VERSION,
+#define        _SC_2_VERSION                   _SC_2_VERSION
+    _SC_2_C_BIND,
+#define        _SC_2_C_BIND                    _SC_2_C_BIND
+    _SC_2_C_DEV,
+#define        _SC_2_C_DEV                     _SC_2_C_DEV
+    _SC_2_FORT_DEV,
+#define        _SC_2_FORT_DEV                  _SC_2_FORT_DEV
+    _SC_2_FORT_RUN,
+#define        _SC_2_FORT_RUN                  _SC_2_FORT_RUN
+    _SC_2_SW_DEV,
+#define        _SC_2_SW_DEV                    _SC_2_SW_DEV
+    _SC_2_LOCALEDEF,
+#define        _SC_2_LOCALEDEF                 _SC_2_LOCALEDEF
+
+    _SC_PII,
+#define        _SC_PII                         _SC_PII
+    _SC_PII_XTI,
+#define        _SC_PII_XTI                     _SC_PII_XTI
+    _SC_PII_SOCKET,
+#define        _SC_PII_SOCKET                  _SC_PII_SOCKET
+    _SC_PII_INTERNET,
+#define        _SC_PII_INTERNET                _SC_PII_INTERNET
+    _SC_PII_OSI,
+#define        _SC_PII_OSI                     _SC_PII_OSI
+    _SC_POLL,
+#define        _SC_POLL                        _SC_POLL
+    _SC_SELECT,
+#define        _SC_SELECT                      _SC_SELECT
+    _SC_UIO_MAXIOV,
+#define        _SC_UIO_MAXIOV                  _SC_UIO_MAXIOV
+    _SC_IOV_MAX = _SC_UIO_MAXIOV,
+#define _SC_IOV_MAX                    _SC_IOV_MAX
+    _SC_PII_INTERNET_STREAM,
+#define        _SC_PII_INTERNET_STREAM         _SC_PII_INTERNET_STREAM
+    _SC_PII_INTERNET_DGRAM,
+#define        _SC_PII_INTERNET_DGRAM          _SC_PII_INTERNET_DGRAM
+    _SC_PII_OSI_COTS,
+#define        _SC_PII_OSI_COTS                _SC_PII_OSI_COTS
+    _SC_PII_OSI_CLTS,
+#define        _SC_PII_OSI_CLTS                _SC_PII_OSI_CLTS
+    _SC_PII_OSI_M,
+#define        _SC_PII_OSI_M                   _SC_PII_OSI_M
+    _SC_T_IOV_MAX,
+#define        _SC_T_IOV_MAX                   _SC_T_IOV_MAX
+
+    /* Values according to POSIX 1003.1c (POSIX threads).  */
+    _SC_THREADS,
+#define        _SC_THREADS                     _SC_THREADS
+    _SC_THREAD_SAFE_FUNCTIONS,
+#define _SC_THREAD_SAFE_FUNCTIONS      _SC_THREAD_SAFE_FUNCTIONS
+    _SC_GETGR_R_SIZE_MAX,
+#define        _SC_GETGR_R_SIZE_MAX            _SC_GETGR_R_SIZE_MAX
+    _SC_GETPW_R_SIZE_MAX,
+#define        _SC_GETPW_R_SIZE_MAX            _SC_GETPW_R_SIZE_MAX
+    _SC_LOGIN_NAME_MAX,
+#define        _SC_LOGIN_NAME_MAX              _SC_LOGIN_NAME_MAX
+    _SC_TTY_NAME_MAX,
+#define        _SC_TTY_NAME_MAX                _SC_TTY_NAME_MAX
+    _SC_THREAD_DESTRUCTOR_ITERATIONS,
+#define        _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_DESTRUCTOR_ITERATIONS
+    _SC_THREAD_KEYS_MAX,
+#define        _SC_THREAD_KEYS_MAX             _SC_THREAD_KEYS_MAX
+    _SC_THREAD_STACK_MIN,
+#define        _SC_THREAD_STACK_MIN            _SC_THREAD_STACK_MIN
+    _SC_THREAD_THREADS_MAX,
+#define        _SC_THREAD_THREADS_MAX          _SC_THREAD_THREADS_MAX
+    _SC_THREAD_ATTR_STACKADDR,
+#define        _SC_THREAD_ATTR_STACKADDR       _SC_THREAD_ATTR_STACKADDR
+    _SC_THREAD_ATTR_STACKSIZE,
+#define        _SC_THREAD_ATTR_STACKSIZE       _SC_THREAD_ATTR_STACKSIZE
+    _SC_THREAD_PRIORITY_SCHEDULING,
+#define        _SC_THREAD_PRIORITY_SCHEDULING  _SC_THREAD_PRIORITY_SCHEDULING
+    _SC_THREAD_PRIO_INHERIT,
+#define        _SC_THREAD_PRIO_INHERIT         _SC_THREAD_PRIO_INHERIT
+    _SC_THREAD_PRIO_PROTECT,
+#define        _SC_THREAD_PRIO_PROTECT         _SC_THREAD_PRIO_PROTECT
+    _SC_THREAD_PROCESS_SHARED,
+#define        _SC_THREAD_PROCESS_SHARED       _SC_THREAD_PROCESS_SHARED
+
+    _SC_NPROCESSORS_CONF,
+#define _SC_NPROCESSORS_CONF           _SC_NPROCESSORS_CONF
+    _SC_NPROCESSORS_ONLN,
+#define _SC_NPROCESSORS_ONLN           _SC_NPROCESSORS_ONLN
+    _SC_PHYS_PAGES,
+#define _SC_PHYS_PAGES                 _SC_PHYS_PAGES
+    _SC_AVPHYS_PAGES,
+#define _SC_AVPHYS_PAGES               _SC_AVPHYS_PAGES
+    _SC_ATEXIT_MAX,
+#define _SC_ATEXIT_MAX                 _SC_ATEXIT_MAX
+    _SC_PASS_MAX,
+#define _SC_PASS_MAX                   _SC_PASS_MAX
+
+    _SC_XOPEN_VERSION,
+#define _SC_XOPEN_VERSION              _SC_XOPEN_VERSION
+    _SC_XOPEN_XCU_VERSION,
+#define _SC_XOPEN_XCU_VERSION          _SC_XOPEN_XCU_VERSION
+    _SC_XOPEN_UNIX,
+#define _SC_XOPEN_UNIX                 _SC_XOPEN_UNIX
+    _SC_XOPEN_CRYPT,
+#define _SC_XOPEN_CRYPT                        _SC_XOPEN_CRYPT
+    _SC_XOPEN_ENH_I18N,
+#define _SC_XOPEN_ENH_I18N             _SC_XOPEN_ENH_I18N
+    _SC_XOPEN_SHM,
+#define _SC_XOPEN_SHM                  _SC_XOPEN_SHM
+
+    _SC_2_CHAR_TERM,
+#define _SC_2_CHAR_TERM                        _SC_2_CHAR_TERM
+    _SC_2_C_VERSION,
+#define _SC_2_C_VERSION                        _SC_2_C_VERSION
+    _SC_2_UPE,
+#define _SC_2_UPE                      _SC_2_UPE
+
+    _SC_XOPEN_XPG2,
+#define _SC_XOPEN_XPG2                 _SC_XOPEN_XPG2
+    _SC_XOPEN_XPG3,
+#define _SC_XOPEN_XPG3                 _SC_XOPEN_XPG3
+    _SC_XOPEN_XPG4,
+#define _SC_XOPEN_XPG4                 _SC_XOPEN_XPG4
+
+    _SC_CHAR_BIT,
+#define        _SC_CHAR_BIT                    _SC_CHAR_BIT
+    _SC_CHAR_MAX,
+#define        _SC_CHAR_MAX                    _SC_CHAR_MAX
+    _SC_CHAR_MIN,
+#define        _SC_CHAR_MIN                    _SC_CHAR_MIN
+    _SC_INT_MAX,
+#define        _SC_INT_MAX                     _SC_INT_MAX
+    _SC_INT_MIN,
+#define        _SC_INT_MIN                     _SC_INT_MIN
+    _SC_LONG_BIT,
+#define        _SC_LONG_BIT                    _SC_LONG_BIT
+    _SC_WORD_BIT,
+#define        _SC_WORD_BIT                    _SC_WORD_BIT
+    _SC_MB_LEN_MAX,
+#define        _SC_MB_LEN_MAX                  _SC_MB_LEN_MAX
+    _SC_NZERO,
+#define        _SC_NZERO                       _SC_NZERO
+    _SC_SSIZE_MAX,
+#define        _SC_SSIZE_MAX                   _SC_SSIZE_MAX
+    _SC_SCHAR_MAX,
+#define        _SC_SCHAR_MAX                   _SC_SCHAR_MAX
+    _SC_SCHAR_MIN,
+#define        _SC_SCHAR_MIN                   _SC_SCHAR_MIN
+    _SC_SHRT_MAX,
+#define        _SC_SHRT_MAX                    _SC_SHRT_MAX
+    _SC_SHRT_MIN,
+#define        _SC_SHRT_MIN                    _SC_SHRT_MIN
+    _SC_UCHAR_MAX,
+#define        _SC_UCHAR_MAX                   _SC_UCHAR_MAX
+    _SC_UINT_MAX,
+#define        _SC_UINT_MAX                    _SC_UINT_MAX
+    _SC_ULONG_MAX,
+#define        _SC_ULONG_MAX                   _SC_ULONG_MAX
+    _SC_USHRT_MAX,
+#define        _SC_USHRT_MAX                   _SC_USHRT_MAX
+
+    _SC_NL_ARGMAX,
+#define        _SC_NL_ARGMAX                   _SC_NL_ARGMAX
+    _SC_NL_LANGMAX,
+#define        _SC_NL_LANGMAX                  _SC_NL_LANGMAX
+    _SC_NL_MSGMAX,
+#define        _SC_NL_MSGMAX                   _SC_NL_MSGMAX
+    _SC_NL_NMAX,
+#define        _SC_NL_NMAX                     _SC_NL_NMAX
+    _SC_NL_SETMAX,
+#define        _SC_NL_SETMAX                   _SC_NL_SETMAX
+    _SC_NL_TEXTMAX,
+#define        _SC_NL_TEXTMAX                  _SC_NL_TEXTMAX
+
+    _SC_XBS5_ILP32_OFF32,
+#define _SC_XBS5_ILP32_OFF32           _SC_XBS5_ILP32_OFF32
+    _SC_XBS5_ILP32_OFFBIG,
+#define _SC_XBS5_ILP32_OFFBIG          _SC_XBS5_ILP32_OFFBIG
+    _SC_XBS5_LP64_OFF64,
+#define _SC_XBS5_LP64_OFF64            _SC_XBS5_LP64_OFF64
+    _SC_XBS5_LPBIG_OFFBIG,
+#define _SC_XBS5_LPBIG_OFFBIG          _SC_XBS5_LPBIG_OFFBIG
+
+    _SC_XOPEN_LEGACY,
+#define _SC_XOPEN_LEGACY               _SC_XOPEN_LEGACY
+    _SC_XOPEN_REALTIME,
+#define _SC_XOPEN_REALTIME             _SC_XOPEN_REALTIME
+    _SC_XOPEN_REALTIME_THREADS,
+#define _SC_XOPEN_REALTIME_THREADS     _SC_XOPEN_REALTIME_THREADS
+
+    _SC_ADVISORY_INFO,
+#define _SC_ADVISORY_INFO              _SC_ADVISORY_INFO
+    _SC_BARRIERS,
+#define _SC_BARRIERS                   _SC_BARRIERS
+    _SC_BASE,
+#define _SC_BASE                       _SC_BASE
+    _SC_C_LANG_SUPPORT,
+#define _SC_C_LANG_SUPPORT             _SC_C_LANG_SUPPORT
+    _SC_C_LANG_SUPPORT_R,
+#define _SC_C_LANG_SUPPORT_R           _SC_C_LANG_SUPPORT_R
+    _SC_CLOCK_SELECTION,
+#define _SC_CLOCK_SELECTION            _SC_CLOCK_SELECTION
+    _SC_CPUTIME,
+#define _SC_CPUTIME                    _SC_CPUTIME
+    _SC_THREAD_CPUTIME,
+#define _SC_THREAD_CPUTIME             _SC_THREAD_CPUTIME
+    _SC_DEVICE_IO,
+#define _SC_DEVICE_IO                  _SC_DEVICE_IO
+    _SC_DEVICE_SPECIFIC,
+#define _SC_DEVICE_SPECIFIC            _SC_DEVICE_SPECIFIC
+    _SC_DEVICE_SPECIFIC_R,
+#define _SC_DEVICE_SPECIFIC_R          _SC_DEVICE_SPECIFIC_R
+    _SC_FD_MGMT,
+#define _SC_FD_MGMT                    _SC_FD_MGMT
+    _SC_FIFO,
+#define _SC_FIFO                       _SC_FIFO
+    _SC_PIPE,
+#define _SC_PIPE                       _SC_PIPE
+    _SC_FILE_ATTRIBUTES,
+#define _SC_FILE_ATTRIBUTES            _SC_FILE_ATTRIBUTES
+    _SC_FILE_LOCKING,
+#define _SC_FILE_LOCKING               _SC_FILE_LOCKING
+    _SC_FILE_SYSTEM,
+#define _SC_FILE_SYSTEM                        _SC_FILE_SYSTEM
+    _SC_MONOTONIC_CLOCK,
+#define _SC_MONOTONIC_CLOCK            _SC_MONOTONIC_CLOCK
+    _SC_MULTI_PROCESS,
+#define _SC_MULTI_PROCESS              _SC_MULTI_PROCESS
+    _SC_SINGLE_PROCESS,
+#define _SC_SINGLE_PROCESS             _SC_SINGLE_PROCESS
+    _SC_NETWORKING,
+#define _SC_NETWORKING                 _SC_NETWORKING
+    _SC_READER_WRITER_LOCKS,
+#define _SC_READER_WRITER_LOCKS                _SC_READER_WRITER_LOCKS
+    _SC_SPIN_LOCKS,
+#define _SC_SPIN_LOCKS                 _SC_SPIN_LOCKS
+    _SC_REGEXP,
+#define _SC_REGEXP                     _SC_REGEXP
+    _SC_REGEX_VERSION,
+#define _SC_REGEX_VERSION              _SC_REGEX_VERSION
+    _SC_SHELL,
+#define _SC_SHELL                      _SC_SHELL
+    _SC_SIGNALS,
+#define _SC_SIGNALS                    _SC_SIGNALS
+    _SC_SPAWN,
+#define _SC_SPAWN                      _SC_SPAWN
+    _SC_SPORADIC_SERVER,
+#define _SC_SPORADIC_SERVER            _SC_SPORADIC_SERVER
+    _SC_THREAD_SPORADIC_SERVER,
+#define _SC_THREAD_SPORADIC_SERVER     _SC_THREAD_SPORADIC_SERVER
+    _SC_SYSTEM_DATABASE,
+#define _SC_SYSTEM_DATABASE            _SC_SYSTEM_DATABASE
+    _SC_SYSTEM_DATABASE_R,
+#define _SC_SYSTEM_DATABASE_R          _SC_SYSTEM_DATABASE_R
+    _SC_TIMEOUTS,
+#define _SC_TIMEOUTS                   _SC_TIMEOUTS
+    _SC_TYPED_MEMORY_OBJECTS,
+#define _SC_TYPED_MEMORY_OBJECTS       _SC_TYPED_MEMORY_OBJECTS
+    _SC_USER_GROUPS,
+#define _SC_USER_GROUPS                        _SC_USER_GROUPS
+    _SC_USER_GROUPS_R,
+#define _SC_USER_GROUPS_R              _SC_USER_GROUPS_R
+    _SC_2_PBS,
+#define _SC_2_PBS                      _SC_2_PBS
+    _SC_2_PBS_ACCOUNTING,
+#define _SC_2_PBS_ACCOUNTING           _SC_2_PBS_ACCOUNTING
+    _SC_2_PBS_LOCATE,
+#define _SC_2_PBS_LOCATE               _SC_2_PBS_LOCATE
+    _SC_2_PBS_MESSAGE,
+#define _SC_2_PBS_MESSAGE              _SC_2_PBS_MESSAGE
+    _SC_2_PBS_TRACK,
+#define _SC_2_PBS_TRACK                        _SC_2_PBS_TRACK
+    _SC_SYMLOOP_MAX,
+#define _SC_SYMLOOP_MAX                        _SC_SYMLOOP_MAX
+    _SC_STREAMS,
+#define _SC_STREAMS                    _SC_STREAMS
+    _SC_2_PBS_CHECKPOINT,
+#define _SC_2_PBS_CHECKPOINT           _SC_2_PBS_CHECKPOINT
+
+    _SC_V6_ILP32_OFF32,
+#define _SC_V6_ILP32_OFF32             _SC_V6_ILP32_OFF32
+    _SC_V6_ILP32_OFFBIG,
+#define _SC_V6_ILP32_OFFBIG            _SC_V6_ILP32_OFFBIG
+    _SC_V6_LP64_OFF64,
+#define _SC_V6_LP64_OFF64              _SC_V6_LP64_OFF64
+    _SC_V6_LPBIG_OFFBIG,
+#define _SC_V6_LPBIG_OFFBIG            _SC_V6_LPBIG_OFFBIG
+
+    _SC_HOST_NAME_MAX,
+#define _SC_HOST_NAME_MAX              _SC_HOST_NAME_MAX
+    _SC_TRACE,
+#define _SC_TRACE                      _SC_TRACE
+    _SC_TRACE_EVENT_FILTER,
+#define _SC_TRACE_EVENT_FILTER         _SC_TRACE_EVENT_FILTER
+    _SC_TRACE_INHERIT,
+#define _SC_TRACE_INHERIT              _SC_TRACE_INHERIT
+    _SC_TRACE_LOG,
+#define _SC_TRACE_LOG                  _SC_TRACE_LOG
+
+    _SC_LEVEL1_ICACHE_SIZE,
+#define _SC_LEVEL1_ICACHE_SIZE         _SC_LEVEL1_ICACHE_SIZE
+    _SC_LEVEL1_ICACHE_ASSOC,
+#define _SC_LEVEL1_ICACHE_ASSOC                _SC_LEVEL1_ICACHE_ASSOC
+    _SC_LEVEL1_ICACHE_LINESIZE,
+#define _SC_LEVEL1_ICACHE_LINESIZE     _SC_LEVEL1_ICACHE_LINESIZE
+    _SC_LEVEL1_DCACHE_SIZE,
+#define _SC_LEVEL1_DCACHE_SIZE         _SC_LEVEL1_DCACHE_SIZE
+    _SC_LEVEL1_DCACHE_ASSOC,
+#define _SC_LEVEL1_DCACHE_ASSOC                _SC_LEVEL1_DCACHE_ASSOC
+    _SC_LEVEL1_DCACHE_LINESIZE,
+#define _SC_LEVEL1_DCACHE_LINESIZE     _SC_LEVEL1_DCACHE_LINESIZE
+    _SC_LEVEL2_CACHE_SIZE,
+#define _SC_LEVEL2_CACHE_SIZE          _SC_LEVEL2_CACHE_SIZE
+    _SC_LEVEL2_CACHE_ASSOC,
+#define _SC_LEVEL2_CACHE_ASSOC         _SC_LEVEL2_CACHE_ASSOC
+    _SC_LEVEL2_CACHE_LINESIZE,
+#define _SC_LEVEL2_CACHE_LINESIZE      _SC_LEVEL2_CACHE_LINESIZE
+    _SC_LEVEL3_CACHE_SIZE,
+#define _SC_LEVEL3_CACHE_SIZE          _SC_LEVEL3_CACHE_SIZE
+    _SC_LEVEL3_CACHE_ASSOC,
+#define _SC_LEVEL3_CACHE_ASSOC         _SC_LEVEL3_CACHE_ASSOC
+    _SC_LEVEL3_CACHE_LINESIZE,
+#define _SC_LEVEL3_CACHE_LINESIZE      _SC_LEVEL3_CACHE_LINESIZE
+    _SC_LEVEL4_CACHE_SIZE,
+#define _SC_LEVEL4_CACHE_SIZE          _SC_LEVEL4_CACHE_SIZE
+    _SC_LEVEL4_CACHE_ASSOC,
+#define _SC_LEVEL4_CACHE_ASSOC         _SC_LEVEL4_CACHE_ASSOC
+    _SC_LEVEL4_CACHE_LINESIZE,
+#define _SC_LEVEL4_CACHE_LINESIZE      _SC_LEVEL4_CACHE_LINESIZE
+    /* Leave room here, maybe we need a few more cache levels some day.  */
+
+    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
+#define _SC_IPV6                       _SC_IPV6
+    _SC_RAW_SOCKETS,
+#define _SC_RAW_SOCKETS                        _SC_RAW_SOCKETS
+
+    _SC_V7_ILP32_OFF32,
+#define _SC_V7_ILP32_OFF32             _SC_V7_ILP32_OFF32
+    _SC_V7_ILP32_OFFBIG,
+#define _SC_V7_ILP32_OFFBIG            _SC_V7_ILP32_OFFBIG
+    _SC_V7_LP64_OFF64,
+#define _SC_V7_LP64_OFF64              _SC_V7_LP64_OFF64
+    _SC_V7_LPBIG_OFFBIG,
+#define _SC_V7_LPBIG_OFFBIG            _SC_V7_LPBIG_OFFBIG
+
+    _SC_SS_REPL_MAX,
+#define _SC_SS_REPL_MAX                        _SC_SS_REPL_MAX
+
+    _SC_TRACE_EVENT_NAME_MAX,
+#define _SC_TRACE_EVENT_NAME_MAX       _SC_TRACE_EVENT_NAME_MAX
+    _SC_TRACE_NAME_MAX,
+#define _SC_TRACE_NAME_MAX             _SC_TRACE_NAME_MAX
+    _SC_TRACE_SYS_MAX,
+#define _SC_TRACE_SYS_MAX              _SC_TRACE_SYS_MAX
+    _SC_TRACE_USER_EVENT_MAX,
+#define _SC_TRACE_USER_EVENT_MAX       _SC_TRACE_USER_EVENT_MAX
+
+    _SC_XOPEN_STREAMS,
+#define _SC_XOPEN_STREAMS              _SC_XOPEN_STREAMS
+
+    _SC_THREAD_ROBUST_PRIO_INHERIT,
+#define _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_INHERIT
+    _SC_THREAD_ROBUST_PRIO_PROTECT
+#define _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_ROBUST_PRIO_PROTECT
+  };
+
+/* Values for the NAME argument to `confstr'.  */
+enum
+  {
+    _CS_PATH,                  /* The default search path.  */
+#define _CS_PATH               _CS_PATH
+
+    _CS_V6_WIDTH_RESTRICTED_ENVS,
+#define _CS_V6_WIDTH_RESTRICTED_ENVS   _CS_V6_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS     _CS_V6_WIDTH_RESTRICTED_ENVS
+
+    _CS_GNU_LIBC_VERSION,
+#define _CS_GNU_LIBC_VERSION   _CS_GNU_LIBC_VERSION
+    _CS_GNU_LIBPTHREAD_VERSION,
+#define _CS_GNU_LIBPTHREAD_VERSION     _CS_GNU_LIBPTHREAD_VERSION
+
+    _CS_V5_WIDTH_RESTRICTED_ENVS,
+#define _CS_V5_WIDTH_RESTRICTED_ENVS   _CS_V5_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS     _CS_V5_WIDTH_RESTRICTED_ENVS
+
+    _CS_V7_WIDTH_RESTRICTED_ENVS,
+#define _CS_V7_WIDTH_RESTRICTED_ENVS   _CS_V7_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS     _CS_V7_WIDTH_RESTRICTED_ENVS
+
+    _CS_LFS_CFLAGS = 1000,
+#define _CS_LFS_CFLAGS _CS_LFS_CFLAGS
+    _CS_LFS_LDFLAGS,
+#define _CS_LFS_LDFLAGS        _CS_LFS_LDFLAGS
+    _CS_LFS_LIBS,
+#define _CS_LFS_LIBS           _CS_LFS_LIBS
+    _CS_LFS_LINTFLAGS,
+#define _CS_LFS_LINTFLAGS      _CS_LFS_LINTFLAGS
+    _CS_LFS64_CFLAGS,
+#define _CS_LFS64_CFLAGS       _CS_LFS64_CFLAGS
+    _CS_LFS64_LDFLAGS,
+#define _CS_LFS64_LDFLAGS      _CS_LFS64_LDFLAGS
+    _CS_LFS64_LIBS,
+#define _CS_LFS64_LIBS _CS_LFS64_LIBS
+    _CS_LFS64_LINTFLAGS,
+#define _CS_LFS64_LINTFLAGS    _CS_LFS64_LINTFLAGS
+
+    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
+#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_CFLAGS
+    _CS_XBS5_ILP32_OFF32_LDFLAGS,
+#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS
+    _CS_XBS5_ILP32_OFF32_LIBS,
+#define _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LIBS
+    _CS_XBS5_ILP32_OFF32_LINTFLAGS,
+#define _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFF32_LINTFLAGS
+    _CS_XBS5_ILP32_OFFBIG_CFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS
+    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS
+    _CS_XBS5_ILP32_OFFBIG_LIBS,
+#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LIBS
+    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+    _CS_XBS5_LP64_OFF64_CFLAGS,
+#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_CFLAGS
+    _CS_XBS5_LP64_OFF64_LDFLAGS,
+#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS
+    _CS_XBS5_LP64_OFF64_LIBS,
+#define _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LIBS
+    _CS_XBS5_LP64_OFF64_LINTFLAGS,
+#define _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LP64_OFF64_LINTFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+    _CS_XBS5_LPBIG_OFFBIG_LIBS,
+#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LIBS
+    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_CFLAGS
+    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+    _CS_POSIX_V6_ILP32_OFF32_LIBS,
+#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LIBS
+    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
+#define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LIBS
+    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
+    _CS_POSIX_V6_LP64_OFF64_CFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS
+    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS
+    _CS_POSIX_V6_LP64_OFF64_LIBS,
+#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LIBS
+    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
+#define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LIBS,
+#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
+    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
+    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LIBS,
+#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
+    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_V6_ENV,
+#define _CS_V6_ENV                     _CS_V6_ENV
+    _CS_V7_ENV
+#define _CS_V7_ENV                     _CS_V7_ENV
+  };
diff --git a/lib/libdss-include/include/bits/dirent.h b/lib/libdss-include/include/bits/dirent.h
new file mode 100644 (file)
index 0000000..31b1961
--- /dev/null
@@ -0,0 +1,57 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _DIRENT_H
+# error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
+#endif
+
+struct dirent
+  {
+#ifndef __USE_FILE_OFFSET64
+    __ino_t d_ino;
+    __off_t d_off;
+#else
+    __ino64_t d_ino;
+    __off64_t d_off;
+#endif
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct dirent64
+  {
+    __ino64_t d_ino;
+    __off64_t d_off;
+    unsigned short int d_reclen;
+    unsigned char d_type;
+    char d_name[256];          /* We must not include limits.h! */
+  };
+#endif
+
+#define d_fileno       d_ino   /* Backwards compatibility.  */
+
+#undef  _DIRENT_HAVE_D_NAMLEN
+#define _DIRENT_HAVE_D_RECLEN
+#define _DIRENT_HAVE_D_OFF
+#define _DIRENT_HAVE_D_TYPE
+
+#if defined __OFF_T_MATCHES_OFF64_T && defined __INO_T_MATCHES_INO64_T
+/* Inform libc code that these two types are effectively identical.  */
+# define _DIRENT_MATCHES_DIRENT64      1
+#endif
diff --git a/lib/libdss-include/include/bits/dlfcn.h b/lib/libdss-include/include/bits/dlfcn.h
new file mode 100644 (file)
index 0000000..f4f98a1
--- /dev/null
@@ -0,0 +1,64 @@
+/* System dependent definitions for run-time dynamic loading.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _DLFCN_H
+# error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
+#endif
+
+/* The MODE argument to `dlopen' contains one of the following: */
+#define RTLD_LAZY      0x00001 /* Lazy function call binding.  */
+#define RTLD_NOW       0x00002 /* Immediate function call binding.  */
+#define        RTLD_BINDING_MASK   0x3 /* Mask of binding time value.  */
+#define RTLD_NOLOAD    0x00004 /* Do not load the object.  */
+#define RTLD_DEEPBIND  0x00008 /* Use deep binding.  */
+
+/* If the following bit is set in the MODE argument to `dlopen',
+   the symbols of the loaded object and its dependencies are made
+   visible as if the object were linked directly into the program.  */
+#define RTLD_GLOBAL    0x00100
+
+/* Unix98 demands the following flag which is the inverse to RTLD_GLOBAL.
+   The implementation does this by default and so we can define the
+   value to zero.  */
+#define RTLD_LOCAL     0
+
+/* Do not delete object when closed.  */
+#define RTLD_NODELETE  0x01000
+
+#ifdef __USE_GNU
+/* To support profiling of shared objects it is a good idea to call
+   the function found using `dlsym' using the following macro since
+   these calls do not use the PLT.  But this would mean the dynamic
+   loader has no chance to find out when the function is called.  The
+   macro applies the necessary magic so that profiling is possible.
+   Rewrite
+       foo = (*fctp) (arg1, arg2);
+   into
+        foo = DL_CALL_FCT (fctp, (arg1, arg2));
+*/
+# define DL_CALL_FCT(fctp, args) \
+  (_dl_mcount_wrapper_check ((void *) (fctp)), (*(fctp)) args)
+
+__BEGIN_DECLS
+
+/* This function calls the profiling functions.  */
+extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/include/bits/elfclass.h b/lib/libdss-include/include/bits/elfclass.h
new file mode 100644 (file)
index 0000000..180227d
--- /dev/null
@@ -0,0 +1,14 @@
+/* This file specifies the native word size of the machine, which indicates
+   the ELF file class used for executables and shared objects on this
+   machine.  */
+
+#ifndef _LINK_H
+# error "Never use <bits/elfclass.h> directly; include <link.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __ELF_NATIVE_CLASS __WORDSIZE
+
+/* The entries in the .hash table always have a size of 32 bits.  */
+typedef uint32_t Elf_Symndx;
diff --git a/lib/libdss-include/include/bits/endian.h b/lib/libdss-include/include/bits/endian.h
new file mode 100644 (file)
index 0000000..a32ebc0
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* AArch64 can be either big or little endian.  */
+#ifdef __AARCH64EB__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
diff --git a/lib/libdss-include/include/bits/environments.h b/lib/libdss-include/include/bits/environments.h
new file mode 100644 (file)
index 0000000..39d0702
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never include this file directly.  Use <unistd.h> instead"
+#endif
+
+#include <bits/wordsize.h>
+
+/* This header should define the following symbols under the described
+   situations.  A value `1' means that the model is always supported,
+   `-1' means it is never supported.  Undefined means it cannot be
+   statically decided.
+
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+
+   _POSIX_V7_LP64_OFF32           64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
+*/
+
+#if __WORDSIZE == 64
+
+/* We can never provide environments with 32-bit wide pointers.  */
+# define _POSIX_V7_ILP32_OFF32 -1
+# define _POSIX_V7_ILP32_OFFBIG        -1
+# define _POSIX_V6_ILP32_OFF32 -1
+# define _POSIX_V6_ILP32_OFFBIG        -1
+# define _XBS5_ILP32_OFF32     -1
+# define _XBS5_ILP32_OFFBIG    -1
+/* We also have no use (for now) for an environment with bigger pointers
+   and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG        -1
+# define _POSIX_V6_LPBIG_OFFBIG        -1
+# define _XBS5_LPBIG_OFFBIG    -1
+
+/* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64  1
+# define _POSIX_V6_LP64_OFF64  1
+# define _XBS5_LP64_OFF64      1
+
+#else /* __WORDSIZE == 32 */
+
+/* By default we have 32-bit wide `int', `long int', pointers and `off_t'
+   and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32 1
+# define _POSIX_V7_ILP32_OFFBIG        1
+# define _POSIX_V6_ILP32_OFF32 1
+# define _POSIX_V6_ILP32_OFFBIG        1
+# define _XBS5_ILP32_OFF32     1
+# define _XBS5_ILP32_OFFBIG    1
+
+/* We optionally provide an environment with the above size but an 64-bit
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
+
+/* We can never provide environments with 64-bit wide pointers.  */
+# define _POSIX_V7_LP64_OFF64  -1
+# define _POSIX_V7_LPBIG_OFFBIG        -1
+# define _POSIX_V6_LP64_OFF64  -1
+# define _POSIX_V6_LPBIG_OFFBIG        -1
+# define _XBS5_LP64_OFF64      -1
+# define _XBS5_LPBIG_OFFBIG    -1
+
+/* CFLAGS.  */
+#define __ILP32_OFFBIG_CFLAGS   "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+#endif /* __WORDSIZE == 32 */
diff --git a/lib/libdss-include/include/bits/epoll.h b/lib/libdss-include/include/bits/epoll.h
new file mode 100644 (file)
index 0000000..9e8c220
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EPOLL_H
+# error "Never use <bits/epoll.h> directly; include <sys/epoll.h> instead."
+#endif
+
+/* Flags to be passed to epoll_create1.  */
+enum
+  {
+    EPOLL_CLOEXEC = 02000000
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
+  };
diff --git a/lib/libdss-include/include/bits/errno.h b/lib/libdss-include/include/bits/errno.h
new file mode 100644 (file)
index 0000000..6b5a71e
--- /dev/null
@@ -0,0 +1,66 @@
+/* Error constants.  Linux specific version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef _ERRNO_H
+
+# undef EDOM
+# undef EILSEQ
+# undef ERANGE
+# include <linux/errno.h>
+
+/* Linux has no ENOTSUP error code.  */
+# define ENOTSUP EOPNOTSUPP
+
+/* Older Linux versions also had no ECANCELED error code.  */
+# ifndef ECANCELED
+#  define ECANCELED    125
+# endif
+
+/* Support for error codes to support robust mutexes was added later, too.  */
+# ifndef EOWNERDEAD
+#  define EOWNERDEAD           130
+#  define ENOTRECOVERABLE      131
+# endif
+
+# ifndef ERFKILL
+#  define ERFKILL              132
+# endif
+
+# ifndef EHWPOISON
+#  define EHWPOISON            133
+# endif
+
+# ifndef __ASSEMBLER__
+/* Function to get address of global `errno' variable.  */
+extern int *__errno_location (void) __THROW __attribute__ ((__const__));
+
+#  if !defined _LIBC || defined _LIBC_REENTRANT
+/* When using threads, errno is a per-thread value.  */
+#   define errno (*__errno_location ())
+#  endif
+# endif /* !__ASSEMBLER__ */
+#endif /* _ERRNO_H */
+
+#if !defined _ERRNO_H && defined __need_Emath
+/* This is ugly but the kernel header is not clean enough.  We must
+   define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
+   defined.  */
+# define EDOM  33      /* Math argument out of domain of function.  */
+# define EILSEQ        84      /* Illegal byte sequence.  */
+# define ERANGE        34      /* Math result not representable.  */
+#endif /* !_ERRNO_H && __need_Emath */
diff --git a/lib/libdss-include/include/bits/error.h b/lib/libdss-include/include/bits/error.h
new file mode 100644 (file)
index 0000000..8408289
--- /dev/null
@@ -0,0 +1,73 @@
+/* Specializations for error functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ERROR_H
+# error "Never include <bits/error.h> directly; use <error.h> instead."
+#endif
+
+
+extern void __REDIRECT (__error_alias, (int __status, int __errnum,
+                                       const char *__format, ...),
+                       error)
+  __attribute__ ((__format__ (__printf__, 3, 4)));
+extern void __REDIRECT (__error_noreturn, (int __status, int __errnum,
+                                          const char *__format, ...),
+                       error)
+  __attribute__ ((__noreturn__, __format__ (__printf__, 3, 4)));
+
+
+/* If we know the function will never return make sure the compiler
+   realizes that, too.  */
+__extern_always_inline void
+error (int __status, int __errnum, const char *__format, ...)
+{
+  if (__builtin_constant_p (__status) && __status != 0)
+    __error_noreturn (__status, __errnum, __format, __va_arg_pack ());
+  else
+    __error_alias (__status, __errnum, __format, __va_arg_pack ());
+}
+
+
+extern void __REDIRECT (__error_at_line_alias, (int __status, int __errnum,
+                                               const char *__fname,
+                                               unsigned int __line,
+                                               const char *__format, ...),
+                       error_at_line)
+  __attribute__ ((__format__ (__printf__, 5, 6)));
+extern void __REDIRECT (__error_at_line_noreturn, (int __status, int __errnum,
+                                                  const char *__fname,
+                                                  unsigned int __line,
+                                                  const char *__format,
+                                                  ...),
+                       error_at_line)
+  __attribute__ ((__noreturn__, __format__ (__printf__, 5, 6)));
+
+
+/* If we know the function will never return make sure the compiler
+   realizes that, too.  */
+__extern_always_inline void
+error_at_line (int __status, int __errnum, const char *__fname,
+              unsigned int __line, const char *__format, ...)
+{
+  if (__builtin_constant_p (__status) && __status != 0)
+    __error_at_line_noreturn (__status, __errnum, __fname, __line, __format,
+                             __va_arg_pack ());
+  else
+    __error_at_line_alias (__status, __errnum, __fname, __line,
+                          __format, __va_arg_pack ());
+}
diff --git a/lib/libdss-include/include/bits/eventfd.h b/lib/libdss-include/include/bits/eventfd.h
new file mode 100644 (file)
index 0000000..63c4944
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EVENTFD_H
+# error "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
+#endif
+
+/* Flags for eventfd.  */
+enum
+  {
+    EFD_SEMAPHORE = 00000001,
+#define EFD_SEMAPHORE EFD_SEMAPHORE
+    EFD_CLOEXEC = 02000000,
+#define EFD_CLOEXEC EFD_CLOEXEC
+    EFD_NONBLOCK = 00004000
+#define EFD_NONBLOCK EFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/include/bits/fcntl-linux.h b/lib/libdss-include/include/bits/fcntl-linux.h
new file mode 100644 (file)
index 0000000..1e1ff17
--- /dev/null
@@ -0,0 +1,437 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never use <bits/fcntl-linux.h> directly; include <fcntl.h> instead."
+#endif
+
+/* This file contains shared definitions between Linux architectures
+   and is included by <bits/fcntl.h> to declare them.  The various
+   #ifndef cases allow the architecture specific file to define those
+   values with different values.
+
+   A minimal <bits/fcntl.h> contains just:
+
+   struct flock {...}
+   #ifdef __USE_LARGEFILE64
+   struct flock64 {...}
+   #endif
+   #include <bits/fcntl-linux.h>
+*/
+
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
+/* open/fcntl.  */
+#define O_ACCMODE         0003
+#define O_RDONLY            00
+#define O_WRONLY            01
+#define O_RDWR              02
+#ifndef O_CREAT
+# define O_CREAT          0100 /* Not fcntl.  */
+#endif
+#ifndef O_EXCL
+# define O_EXCL                   0200 /* Not fcntl.  */
+#endif
+#ifndef O_NOCTTY
+# define O_NOCTTY         0400 /* Not fcntl.  */
+#endif
+#ifndef O_TRUNC
+# define O_TRUNC         01000 /* Not fcntl.  */
+#endif
+#ifndef O_APPEND
+# define O_APPEND        02000
+#endif
+#ifndef O_NONBLOCK
+# define O_NONBLOCK      04000
+#endif
+#ifndef O_NDELAY
+# define O_NDELAY      O_NONBLOCK
+#endif
+#ifndef O_SYNC
+# define O_SYNC               04010000
+#endif
+#define O_FSYNC                O_SYNC
+#ifndef O_ASYNC
+# define O_ASYNC        020000
+#endif
+#ifndef __O_LARGEFILE
+# define __O_LARGEFILE 0100000
+#endif
+
+#ifndef __O_DIRECTORY
+# define __O_DIRECTORY  0200000
+#endif
+#ifndef __O_NOFOLLOW
+# define __O_NOFOLLOW  0400000
+#endif
+#ifndef __O_CLOEXEC
+# define __O_CLOEXEC   02000000
+#endif
+#ifndef __O_DIRECT
+# define __O_DIRECT     040000
+#endif
+#ifndef __O_NOATIME
+# define __O_NOATIME   01000000
+#endif
+#ifndef __O_PATH
+# define __O_PATH     010000000
+#endif
+#ifndef __O_DSYNC
+# define __O_DSYNC      010000
+#endif
+#ifndef __O_TMPFILE
+# define __O_TMPFILE   (020000000 | __O_DIRECTORY)
+#endif
+
+#ifndef F_GETLK
+# ifndef __USE_FILE_OFFSET64
+#  define F_GETLK      5       /* Get record locking info.  */
+#  define F_SETLK      6       /* Set record locking info (non-blocking).  */
+#  define F_SETLKW     7       /* Set record locking info (blocking).  */
+# else
+#  define F_GETLK      F_GETLK64  /* Get record locking info.  */
+#  define F_SETLK      F_SETLK64  /* Set record locking info (non-blocking).*/
+#  define F_SETLKW     F_SETLKW64 /* Set record locking info (blocking).  */
+# endif
+#endif
+#ifndef F_GETLK64
+# define F_GETLK64     12      /* Get record locking info.  */
+# define F_SETLK64     13      /* Set record locking info (non-blocking).  */
+# define F_SETLKW64    14      /* Set record locking info (blocking).  */
+#endif
+
+/* open file description locks.
+
+   Usually record locks held by a process are released on *any* close and are
+   not inherited across a fork.
+
+   These cmd values will set locks that conflict with process-associated record
+   locks, but are "owned" by the opened file description, not the process.
+   This means that they are inherited across fork or clone with CLONE_FILES
+   like BSD (flock) locks, and they are only released automatically when the
+   last reference to the the file description against which they were acquired
+   is put. */
+#ifdef __USE_GNU
+# define F_OFD_GETLK   36
+# define F_OFD_SETLK   37
+# define F_OFD_SETLKW  38
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define O_LARGEFILE __O_LARGEFILE
+#endif
+
+#ifdef __USE_XOPEN2K8
+# define O_DIRECTORY   __O_DIRECTORY   /* Must be a directory.  */
+# define O_NOFOLLOW    __O_NOFOLLOW    /* Do not follow links.  */
+# define O_CLOEXEC     __O_CLOEXEC     /* Set close_on_exec.  */
+#endif
+
+#ifdef __USE_GNU
+# define O_DIRECT      __O_DIRECT      /* Direct disk access.  */
+# define O_NOATIME     __O_NOATIME     /* Do not set atime.  */
+# define O_PATH                __O_PATH        /* Resolve pathname but do not open file.  */
+# define O_TMPFILE     __O_TMPFILE     /* Atomically create nameless file.  */
+#endif
+
+/* For now, Linux has no separate synchronicitiy options for read
+   operations.  We define O_RSYNC therefore as the same as O_SYNC
+   since this is a superset.  */
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+# define O_DSYNC       __O_DSYNC       /* Synchronize data.  */
+# if defined __O_RSYNC
+#  define O_RSYNC      __O_RSYNC       /* Synchronize read operations.  */
+# else
+#  define O_RSYNC      O_SYNC          /* Synchronize read operations.  */
+# endif
+#endif
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD                0       /* Duplicate file descriptor.  */
+#define F_GETFD                1       /* Get file descriptor flags.  */
+#define F_SETFD                2       /* Set file descriptor flags.  */
+#define F_GETFL                3       /* Get file status flags.  */
+#define F_SETFL                4       /* Set file status flags.  */
+
+#ifndef __F_SETOWN
+# define __F_SETOWN    8
+# define __F_GETOWN    9
+#endif
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# define F_SETOWN      __F_SETOWN /* Get owner (process receiving SIGIO).  */
+# define F_GETOWN      __F_GETOWN /* Set owner (process receiving SIGIO).  */
+#endif
+
+#ifndef __F_SETSIG
+# define __F_SETSIG    10      /* Set number of signal to be sent.  */
+# define __F_GETSIG    11      /* Get number of signal to be sent.  */
+#endif
+#ifndef __F_SETOWN_EX
+# define __F_SETOWN_EX 15      /* Get owner (thread receiving SIGIO).  */
+# define __F_GETOWN_EX 16      /* Set owner (thread receiving SIGIO).  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETSIG      __F_SETSIG      /* Set number of signal to be sent.  */
+# define F_GETSIG      __F_GETSIG      /* Get number of signal to be sent.  */
+# define F_SETOWN_EX   __F_SETOWN_EX   /* Get owner (thread receiving SIGIO).  */
+# define F_GETOWN_EX   __F_GETOWN_EX   /* Set owner (thread receiving SIGIO).  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETLEASE    1024    /* Set a lease.  */
+# define F_GETLEASE    1025    /* Enquire what lease is active.  */
+# define F_NOTIFY      1026    /* Request notifications on a directory.  */
+# define F_SETPIPE_SZ  1031    /* Set pipe page size array.  */
+# define F_GETPIPE_SZ  1032    /* Set pipe page size array.  */
+#endif
+#ifdef __USE_XOPEN2K8
+# define F_DUPFD_CLOEXEC 1030  /* Duplicate file descriptor with
+                                  close-on-exit set.  */
+#endif
+
+/* For F_[GET|SET]FD.  */
+#define FD_CLOEXEC     1       /* Actually anything with low bit set goes */
+
+#ifndef F_RDLCK
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+# define F_RDLCK               0       /* Read lock.  */
+# define F_WRLCK               1       /* Write lock.  */
+# define F_UNLCK               2       /* Remove lock.  */
+#endif
+
+
+/* For old implementation of BSD flock.  */
+#ifndef F_EXLCK
+# define F_EXLCK               4       /* or 3 */
+# define F_SHLCK               8       /* or 4 */
+#endif
+
+#ifdef __USE_MISC
+/* Operations for BSD flock, also used by the kernel implementation.  */
+# define LOCK_SH       1       /* Shared lock.  */
+# define LOCK_EX       2       /* Exclusive lock.  */
+# define LOCK_NB       4       /* Or'd with one of the above to prevent
+                                  blocking.  */
+# define LOCK_UN       8       /* Remove lock.  */
+#endif
+
+#ifdef __USE_GNU
+# define LOCK_MAND     32      /* This is a mandatory flock:   */
+# define LOCK_READ     64      /* ... which allows concurrent read operations.  */
+# define LOCK_WRITE    128     /* ... which allows concurrent write operations.  */
+# define LOCK_RW       192     /* ... Which allows concurrent read & write operations.  */
+#endif
+
+#ifdef __USE_GNU
+/* Types of directory notifications that may be requested with F_NOTIFY.  */
+# define DN_ACCESS     0x00000001      /* File accessed.  */
+# define DN_MODIFY     0x00000002      /* File modified.  */
+# define DN_CREATE     0x00000004      /* File created.  */
+# define DN_DELETE     0x00000008      /* File removed.  */
+# define DN_RENAME     0x00000010      /* File renamed.  */
+# define DN_ATTRIB     0x00000020      /* File changed attributes.  */
+# define DN_MULTISHOT  0x80000000      /* Don't remove notifier.  */
+#endif
+
+
+#ifdef __USE_GNU
+/* Owner types.  */
+enum __pid_type
+  {
+    F_OWNER_TID = 0,           /* Kernel thread.  */
+    F_OWNER_PID,               /* Process.  */
+    F_OWNER_PGRP,              /* Process group.  */
+    F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name.  */
+  };
+
+/* Structure to use with F_GETOWN_EX and F_SETOWN_EX.  */
+struct f_owner_ex
+  {
+    enum __pid_type type;      /* Owner type of ID.  */
+    __pid_t pid;               /* ID of owner.  */
+  };
+#endif
+
+/* Define some more compatibility macros to be backward compatible with
+   BSD systems which did not managed to hide these kernel macros.  */
+#ifdef __USE_MISC
+# define FAPPEND       O_APPEND
+# define FFSYNC                O_FSYNC
+# define FASYNC                O_ASYNC
+# define FNONBLOCK     O_NONBLOCK
+# define FNDELAY       O_NDELAY
+#endif /* Use misc.  */
+
+#ifndef __POSIX_FADV_DONTNEED
+#  define __POSIX_FADV_DONTNEED        4
+#  define __POSIX_FADV_NOREUSE 5
+#endif
+/* Advise to `posix_fadvise'.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_FADV_NORMAL     0 /* No further special treatment.  */
+# define POSIX_FADV_RANDOM     1 /* Expect random page references.  */
+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_FADV_WILLNEED   3 /* Will need these pages.  */
+# define POSIX_FADV_DONTNEED   __POSIX_FADV_DONTNEED /* Don't need these pages.  */
+# define POSIX_FADV_NOREUSE    __POSIX_FADV_NOREUSE /* Data will be accessed once.  */
+#endif
+
+
+#ifdef __USE_GNU
+/* Flags for SYNC_FILE_RANGE.  */
+# define SYNC_FILE_RANGE_WAIT_BEFORE   1 /* Wait upon writeout of all pages
+                                            in the range before performing the
+                                            write.  */
+# define SYNC_FILE_RANGE_WRITE         2 /* Initiate writeout of all those
+                                            dirty pages in the range which are
+                                            not presently under writeback.  */
+# define SYNC_FILE_RANGE_WAIT_AFTER    4 /* Wait upon writeout of all pages in
+                                            the range after performing the
+                                            write.  */
+
+/* Flags for SPLICE and VMSPLICE.  */
+# define SPLICE_F_MOVE         1       /* Move pages instead of copying.  */
+# define SPLICE_F_NONBLOCK     2       /* Don't block on the pipe splicing
+                                          (but we may still block on the fd
+                                          we splice from/to).  */
+# define SPLICE_F_MORE         4       /* Expect more data.  */
+# define SPLICE_F_GIFT         8       /* Pages passed in are a gift.  */
+
+
+/* Flags for fallocate.  */
+# define FALLOC_FL_KEEP_SIZE           1 /* Don't extend size of file
+                                            even if offset + len is
+                                            greater than file size.  */
+# define FALLOC_FL_PUNCH_HOLE          2 /* Create a hole in the file.  */
+# define FALLOC_FL_COLLAPSE_RANGE      8 /* Remove a range of a file
+                                            without leaving a
+                                            hole.  */
+# define FALLOC_FL_ZERO_RANGE          16 /* Convert a range of a
+                                             file to zeros.  */
+
+
+/* File handle structure.  */
+struct file_handle
+{
+  unsigned int handle_bytes;
+  int handle_type;
+  /* File identifier.  */
+  unsigned char f_handle[0];
+};
+
+/* Maximum handle size (for now).  */
+# define MAX_HANDLE_SZ 128
+#endif
+
+/* Values for `*at' functions.  */
+#ifdef __USE_ATFILE
+# define AT_FDCWD              -100    /* Special value used to indicate
+                                          the *at functions should use the
+                                          current working directory. */
+# define AT_SYMLINK_NOFOLLOW   0x100   /* Do not follow symbolic links.  */
+# define AT_REMOVEDIR          0x200   /* Remove directory instead of
+                                          unlinking file.  */
+# define AT_SYMLINK_FOLLOW     0x400   /* Follow symbolic links.  */
+# ifdef __USE_GNU
+#  define AT_NO_AUTOMOUNT      0x800   /* Suppress terminal automount
+                                          traversal.  */
+#  define AT_EMPTY_PATH                0x1000  /* Allow empty relative pathname.  */
+# endif
+# define AT_EACCESS            0x200   /* Test access permitted for
+                                          effective IDs, not real IDs.  */
+#endif
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+
+/* Provide kernel hint to read ahead.  */
+extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
+    __THROW;
+
+
+/* Selective file content synch'ing.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
+                           unsigned int __flags);
+
+
+/* Splice address range into a pipe.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
+                        size_t __count, unsigned int __flags);
+
+/* Splice two files together.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
+                      __off64_t *__offout, size_t __len,
+                      unsigned int __flags);
+
+/* In-kernel implementation of tee for pipe buffers.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern ssize_t tee (int __fdin, int __fdout, size_t __len,
+                   unsigned int __flags);
+
+/* Reserve storage for the data of the file associated with FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset,
+                                  __off64_t __len),
+                      fallocate64);
+#  else
+#   define fallocate fallocate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
+                       __off64_t __len);
+# endif
+
+
+/* Map file name to file handle.  */
+extern int name_to_handle_at (int __dfd, const char *__name,
+                             struct file_handle *__handle, int *__mnt_id,
+                             int __flags) __THROW;
+
+/* Open file using the file handle.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
+                             int __flags);
+
+#endif /* use GNU */
+
+__END_DECLS
diff --git a/lib/libdss-include/include/bits/fcntl.h b/lib/libdss-include/include/bits/fcntl.h
new file mode 100644 (file)
index 0000000..658f696
--- /dev/null
@@ -0,0 +1,55 @@
+/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#define __O_DIRECTORY   040000
+#define __O_NOFOLLOW   0100000
+#define __O_DIRECT     0200000
+
+#define __O_LARGEFILE  0
+
+# define F_GETLK64     5
+# define F_SETLK64     6
+# define F_SETLKW64    7
+
+struct flock
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;   /* Offset where the lock begins.  */
+    __off_t l_len;     /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;  /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;        /* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start; /* Offset where the lock begins.  */
+    __off64_t l_len;   /* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;     /* Process holding the lock.  */
+  };
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/fcntl-linux.h>
diff --git a/lib/libdss-include/include/bits/fcntl2.h b/lib/libdss-include/include/bits/fcntl2.h
new file mode 100644 (file)
index 0000000..c3f267e
--- /dev/null
@@ -0,0 +1,172 @@
+/* Checking macros for fcntl functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never include <bits/fcntl2.h> directly; use <fcntl.h> instead."
+#endif
+
+/* Check that calls to open and openat with O_CREAT or O_TMPFILE set have an
+   appropriate third/fourth parameter.  */
+#ifndef __USE_FILE_OFFSET64
+extern int __open_2 (const char *__path, int __oflag) __nonnull ((1));
+extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
+                      open) __nonnull ((1));
+#else
+extern int __REDIRECT (__open_2, (const char *__path, int __oflag),
+                      __open64_2) __nonnull ((1));
+extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
+                      open64) __nonnull ((1));
+#endif
+__errordecl (__open_too_many_args,
+            "open can be called either with 2 or 3 arguments, not more");
+__errordecl (__open_missing_mode,
+            "open with O_CREAT or O_TMPFILE in second argument needs 3 arguments");
+
+__fortify_function int
+open (const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __open_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __open_missing_mode ();
+         return __open_2 (__path, __oflag);
+       }
+      return __open_alias (__path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __open_2 (__path, __oflag);
+
+  return __open_alias (__path, __oflag, __va_arg_pack ());
+}
+
+
+#ifdef __USE_LARGEFILE64
+extern int __open64_2 (const char *__path, int __oflag) __nonnull ((1));
+extern int __REDIRECT (__open64_alias, (const char *__path, int __oflag,
+                                       ...), open64) __nonnull ((1));
+__errordecl (__open64_too_many_args,
+            "open64 can be called either with 2 or 3 arguments, not more");
+__errordecl (__open64_missing_mode,
+            "open64 with O_CREAT or O_TMPFILE in second argument needs 3 arguments");
+
+__fortify_function int
+open64 (const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __open64_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __open64_missing_mode ();
+         return __open64_2 (__path, __oflag);
+       }
+      return __open64_alias (__path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __open64_2 (__path, __oflag);
+
+  return __open64_alias (__path, __oflag, __va_arg_pack ());
+}
+#endif
+
+
+#ifdef __USE_ATFILE
+# ifndef __USE_FILE_OFFSET64
+extern int __openat_2 (int __fd, const char *__path, int __oflag)
+     __nonnull ((2));
+extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
+                                       int __oflag, ...), openat)
+     __nonnull ((2));
+# else
+extern int __REDIRECT (__openat_2, (int __fd, const char *__path,
+                                   int __oflag), __openat64_2)
+     __nonnull ((2));
+extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
+                                       int __oflag, ...), openat64)
+     __nonnull ((2));
+# endif
+__errordecl (__openat_too_many_args,
+            "openat can be called either with 3 or 4 arguments, not more");
+__errordecl (__openat_missing_mode,
+            "openat with O_CREAT or O_TMPFILE in third argument needs 4 arguments");
+
+__fortify_function int
+openat (int __fd, const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __openat_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __openat_missing_mode ();
+         return __openat_2 (__fd, __path, __oflag);
+       }
+      return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __openat_2 (__fd, __path, __oflag);
+
+  return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
+}
+
+
+# ifdef __USE_LARGEFILE64
+extern int __openat64_2 (int __fd, const char *__path, int __oflag)
+     __nonnull ((2));
+extern int __REDIRECT (__openat64_alias, (int __fd, const char *__path,
+                                         int __oflag, ...), openat64)
+     __nonnull ((2));
+__errordecl (__openat64_too_many_args,
+            "openat64 can be called either with 3 or 4 arguments, not more");
+__errordecl (__openat64_missing_mode,
+            "openat64 with O_CREAT or O_TMPFILE in third argument needs 4 arguments");
+
+__fortify_function int
+openat64 (int __fd, const char *__path, int __oflag, ...)
+{
+  if (__va_arg_pack_len () > 1)
+    __openat64_too_many_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
+       {
+         __openat64_missing_mode ();
+         return __openat64_2 (__fd, __path, __oflag);
+       }
+      return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () < 1)
+    return __openat64_2 (__fd, __path, __oflag);
+
+  return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
+}
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/fenv.h b/lib/libdss-include/include/bits/fenv.h
new file mode 100644 (file)
index 0000000..aced0d3
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+/* Define bits representing exceptions in the FPSR status word.  */
+enum
+  {
+    FE_INVALID =
+#define FE_INVALID     1
+      FE_INVALID,
+    FE_DIVBYZERO =
+#define FE_DIVBYZERO   2
+      FE_DIVBYZERO,
+    FE_OVERFLOW =
+#define FE_OVERFLOW    4
+      FE_OVERFLOW,
+    FE_UNDERFLOW =
+#define FE_UNDERFLOW   8
+      FE_UNDERFLOW,
+    FE_INEXACT =
+#define FE_INEXACT     16
+      FE_INEXACT,
+  };
+
+/* Amount to shift by to convert an exception bit in FPSR to a an
+   exception bit mask in FPCR.  */
+#define FE_EXCEPT_SHIFT        8
+
+/* All supported exceptions.  */
+#define FE_ALL_EXCEPT  \
+       (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+/* Define bits representing rounding modes in the FPCR Rmode field.  */
+#define FE_TONEAREST  0x000000
+#define FE_UPWARD     0x400000
+#define FE_DOWNWARD   0x800000
+#define FE_TOWARDZERO 0xc00000
+
+/* Type representing exception flags. */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef struct
+  {
+    unsigned int __fpcr;
+    unsigned int __fpsr;
+  }
+fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV     ((const fenv_t *) -1l)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exceptions are masked.  */
+# define FE_NOMASK_ENV  ((const fenv_t *) -2)
+#endif
diff --git a/lib/libdss-include/include/bits/fenvinline.h b/lib/libdss-include/include/bits/fenvinline.h
new file mode 100644 (file)
index 0000000..42f77b5
--- /dev/null
@@ -0,0 +1,8 @@
+/* This file provides inline versions of floating-pint environment
+   handling functions.  If there were any.  */
+
+#ifndef __NO_MATH_INLINES
+
+/* Here is where the code would go.  */
+
+#endif
diff --git a/lib/libdss-include/include/bits/huge_val.h b/lib/libdss-include/include/bits/huge_val.h
new file mode 100644 (file)
index 0000000..42d416f
--- /dev/null
@@ -0,0 +1,53 @@
+/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VAL      (__builtin_huge_val())
+#elif __GNUC_PREREQ(2,96)
+# define HUGE_VAL      (__extension__ 0x1.0p2047)
+#elif defined __GNUC__
+
+# define HUGE_VAL \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; })   \
+    { __l: 0x7ff0000000000000ULL }).__d)
+
+#else /* not GCC */
+
+# include <endian.h>
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VAL_bytes     { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VAL_bytes     { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
+# endif
+
+static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
+# define HUGE_VAL      (__huge_val.__d)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/include/bits/huge_valf.h b/lib/libdss-include/include/bits/huge_valf.h
new file mode 100644 (file)
index 0000000..9d418ba
--- /dev/null
@@ -0,0 +1,51 @@
+/* `HUGE_VALF' constant for IEEE 754 machines (where it is infinity).
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_valf.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VALF     (__builtin_huge_valf())
+#elif __GNUC_PREREQ(2,96)
+# define HUGE_VALF     (__extension__ 0x1.0p255f)
+#elif defined __GNUC__
+
+#   define HUGE_VALF \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })    \
+    { __l: 0x7f800000UL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __HUGE_VALF_bytes    { 0x7f, 0x80, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __HUGE_VALF_bytes    { 0, 0, 0x80, 0x7f }
+# endif
+
+static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
+# define HUGE_VALF     (__huge_valf.__f)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/include/bits/huge_vall.h b/lib/libdss-include/include/bits/huge_vall.h
new file mode 100644 (file)
index 0000000..1886adf
--- /dev/null
@@ -0,0 +1,28 @@
+/* Default `HUGE_VALL' constant.
+   Used by <stdlib.h> and <math.h> functions for overflow.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/huge_vall.h> directly; include <math.h> instead."
+#endif
+
+#if __GNUC_PREREQ(3,3)
+# define HUGE_VALL     (__builtin_huge_vall())
+#else
+# define HUGE_VALL     ((long double) HUGE_VAL)
+#endif
diff --git a/lib/libdss-include/include/bits/hwcap.h b/lib/libdss-include/include/bits/hwcap.h
new file mode 100644 (file)
index 0000000..39839ff
--- /dev/null
@@ -0,0 +1,23 @@
+/* Defines for bits in AT_HWCAP.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_AUXV_H
+# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
+#endif
+
+/* No bits defined for this architecture.  */
diff --git a/lib/libdss-include/include/bits/in.h b/lib/libdss-include/include/bits/in.h
new file mode 100644 (file)
index 0000000..3b01f12
--- /dev/null
@@ -0,0 +1,230 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Linux version.  */
+
+#ifndef _NETINET_IN_H
+# error "Never use <bits/in.h> directly; include <netinet/in.h> instead."
+#endif
+
+/* If the application has already included linux/in6.h from a linux-based
+   kernel then we will not define the IPv6 IPPROTO_* defines, in6_addr (nor the
+   defines), sockaddr_in6, or ipv6_mreq. Same for in6_ptkinfo or ip6_mtuinfo
+   in linux/ipv6.h. The ABI used by the linux-kernel and glibc match exactly.
+   Neither the linux kernel nor glibc should break this ABI without coordination.  */
+#if defined _UAPI_LINUX_IN6_H || defined _UAPI_IPV6_H
+/* This is not quite the same API since the kernel always defines s6_addr16 and
+   s6_addr32. This is not a violation of POSIX since POSIX says "at least the
+   following member" and that holds true.  */
+# define __USE_KERNEL_IPV6_DEFS
+#endif
+
+/* Options for use with `getsockopt' and `setsockopt' at the IP level.
+   The first word in the comment at the right is the data type used;
+   "bool" means a boolean value stored in an `int'.  */
+#define        IP_OPTIONS      4       /* ip_opts; IP per-packet options.  */
+#define        IP_HDRINCL      3       /* int; Header is included with data.  */
+#define        IP_TOS          1       /* int; IP type of service and precedence.  */
+#define        IP_TTL          2       /* int; IP time to live.  */
+#define        IP_RECVOPTS     6       /* bool; Receive all IP options w/datagram.  */
+/* For BSD compatibility.  */
+#define        IP_RECVRETOPTS  IP_RETOPTS       /* bool; Receive IP options for response.  */
+#define        IP_RETOPTS      7       /* ip_opts; Set/get IP per-packet options.  */
+#define IP_MULTICAST_IF 32     /* in_addr; set/get IP multicast i/f */
+#define IP_MULTICAST_TTL 33    /* u_char; set/get IP multicast ttl */
+#define IP_MULTICAST_LOOP 34   /* i_char; set/get IP multicast loopback */
+#define IP_ADD_MEMBERSHIP 35   /* ip_mreq; add an IP group membership */
+#define IP_DROP_MEMBERSHIP 36  /* ip_mreq; drop an IP group membership */
+#define IP_UNBLOCK_SOURCE 37   /* ip_mreq_source: unblock data from source */
+#define IP_BLOCK_SOURCE 38     /* ip_mreq_source: block data from source */
+#define IP_ADD_SOURCE_MEMBERSHIP 39 /* ip_mreq_source: join source group */
+#define IP_DROP_SOURCE_MEMBERSHIP 40 /* ip_mreq_source: leave source group */
+#define IP_MSFILTER 41
+#ifdef __USE_MISC
+# define MCAST_JOIN_GROUP 42   /* group_req: join any-source group */
+# define MCAST_BLOCK_SOURCE 43 /* group_source_req: block from given group */
+# define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/
+# define MCAST_LEAVE_GROUP 45  /* group_req: leave any-source group */
+# define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */
+# define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/
+# define MCAST_MSFILTER 48
+# define IP_MULTICAST_ALL 49
+# define IP_UNICAST_IF 50
+
+# define MCAST_EXCLUDE   0
+# define MCAST_INCLUDE   1
+#endif
+
+#define IP_ROUTER_ALERT        5       /* bool */
+#define IP_PKTINFO     8       /* bool */
+#define IP_PKTOPTIONS  9
+#define IP_PMTUDISC    10      /* obsolete name? */
+#define IP_MTU_DISCOVER        10      /* int; see below */
+#define IP_RECVERR     11      /* bool */
+#define IP_RECVTTL     12      /* bool */
+#define IP_RECVTOS     13      /* bool */
+#define IP_MTU         14      /* int */
+#define IP_FREEBIND    15
+#define IP_IPSEC_POLICY 16
+#define IP_XFRM_POLICY 17
+#define IP_PASSSEC     18
+#define IP_TRANSPARENT 19
+#define IP_MULTICAST_ALL 49    /* bool */
+
+/* TProxy original addresses */
+#define IP_ORIGDSTADDR       20
+#define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
+
+#define IP_MINTTL       21
+#define IP_NODEFRAG     22
+#define IP_CHECKSUM     23
+#define IP_BIND_ADDRESS_NO_PORT 24
+
+/* IP_MTU_DISCOVER arguments.  */
+#define IP_PMTUDISC_DONT   0   /* Never send DF frames.  */
+#define IP_PMTUDISC_WANT   1   /* Use per route hints.  */
+#define IP_PMTUDISC_DO     2   /* Always DF.  */
+#define IP_PMTUDISC_PROBE  3   /* Ignore dst pmtu.  */
+/* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
+   Also incoming ICMP frag_needed notifications will be ignored on
+   this socket to prevent accepting spoofed ones.  */
+#define IP_PMTUDISC_INTERFACE           4
+/* Like IP_PMTUDISC_INTERFACE but allow packets to be fragmented.  */
+#define IP_PMTUDISC_OMIT               5
+
+#define IP_MULTICAST_IF                        32
+#define IP_MULTICAST_TTL               33
+#define IP_MULTICAST_LOOP              34
+#define IP_ADD_MEMBERSHIP              35
+#define IP_DROP_MEMBERSHIP             36
+#define IP_UNBLOCK_SOURCE              37
+#define IP_BLOCK_SOURCE                        38
+#define IP_ADD_SOURCE_MEMBERSHIP       39
+#define IP_DROP_SOURCE_MEMBERSHIP      40
+#define IP_MSFILTER                    41
+#define IP_MULTICAST_ALL               49
+#define IP_UNICAST_IF                  50
+
+/* To select the IP level.  */
+#define SOL_IP 0
+
+#define IP_DEFAULT_MULTICAST_TTL        1
+#define IP_DEFAULT_MULTICAST_LOOP       1
+#define IP_MAX_MEMBERSHIPS              20
+
+#ifdef __USE_MISC
+/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
+   The `ip_dst' field is used for the first-hop gateway when using a
+   source route (this gets put into the header proper).  */
+struct ip_opts
+  {
+    struct in_addr ip_dst;     /* First hop; zero without source route.  */
+    char ip_opts[40];          /* Actually variable in size.  */
+  };
+
+/* Like `struct ip_mreq' but including interface specification by index.  */
+struct ip_mreqn
+  {
+    struct in_addr imr_multiaddr;      /* IP multicast address of group */
+    struct in_addr imr_address;                /* local IP address of interface */
+    int        imr_ifindex;                    /* Interface index */
+  };
+
+/* Structure used for IP_PKTINFO.  */
+struct in_pktinfo
+  {
+    int ipi_ifindex;                   /* Interface index  */
+    struct in_addr ipi_spec_dst;       /* Routing destination address  */
+    struct in_addr ipi_addr;           /* Header destination address  */
+  };
+#endif
+
+/* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
+   The first word in the comment at the right is the data type used;
+   "bool" means a boolean value stored in an `int'.  */
+#define IPV6_ADDRFORM          1
+#define IPV6_2292PKTINFO       2
+#define IPV6_2292HOPOPTS       3
+#define IPV6_2292DSTOPTS       4
+#define IPV6_2292RTHDR         5
+#define IPV6_2292PKTOPTIONS    6
+#define IPV6_CHECKSUM          7
+#define IPV6_2292HOPLIMIT      8
+
+#define SCM_SRCRT              IPV6_RXSRCRT
+
+#define IPV6_NEXTHOP           9
+#define IPV6_AUTHHDR           10
+#define IPV6_UNICAST_HOPS      16
+#define IPV6_MULTICAST_IF      17
+#define IPV6_MULTICAST_HOPS    18
+#define IPV6_MULTICAST_LOOP    19
+#define IPV6_JOIN_GROUP                20
+#define IPV6_LEAVE_GROUP       21
+#define IPV6_ROUTER_ALERT      22
+#define IPV6_MTU_DISCOVER      23
+#define IPV6_MTU               24
+#define IPV6_RECVERR           25
+#define IPV6_V6ONLY            26
+#define IPV6_JOIN_ANYCAST      27
+#define IPV6_LEAVE_ANYCAST     28
+#define IPV6_IPSEC_POLICY      34
+#define IPV6_XFRM_POLICY       35
+
+/* Advanced API (RFC3542) (1).  */
+#define IPV6_RECVPKTINFO       49
+#define IPV6_PKTINFO           50
+#define IPV6_RECVHOPLIMIT      51
+#define IPV6_HOPLIMIT          52
+#define IPV6_RECVHOPOPTS       53
+#define IPV6_HOPOPTS           54
+#define IPV6_RTHDRDSTOPTS      55
+#define IPV6_RECVRTHDR         56
+#define IPV6_RTHDR             57
+#define IPV6_RECVDSTOPTS       58
+#define IPV6_DSTOPTS           59
+#define IPV6_RECVPATHMTU       60
+#define IPV6_PATHMTU           61
+#define IPV6_DONTFRAG          62
+
+/* Advanced API (RFC3542) (2).  */
+#define IPV6_RECVTCLASS                66
+#define IPV6_TCLASS            67
+
+/* Obsolete synonyms for the above.  */
+#define IPV6_ADD_MEMBERSHIP    IPV6_JOIN_GROUP
+#define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP
+#define IPV6_RXHOPOPTS         IPV6_HOPOPTS
+#define IPV6_RXDSTOPTS         IPV6_DSTOPTS
+
+/* IPV6_MTU_DISCOVER values.  */
+#define IPV6_PMTUDISC_DONT     0       /* Never send DF frames.  */
+#define IPV6_PMTUDISC_WANT     1       /* Use per route hints.  */
+#define IPV6_PMTUDISC_DO       2       /* Always DF.  */
+#define IPV6_PMTUDISC_PROBE    3       /* Ignore dst pmtu.  */
+#define IPV6_PMTUDISC_INTERFACE        4       /* See IP_PMTUDISC_INTERFACE.  */
+#define IPV6_PMTUDISC_OMIT     5       /* See IP_PMTUDISC_OMIT.  */
+
+/* Socket level values for IPv6.  */
+#define SOL_IPV6        41
+#define SOL_ICMPV6      58
+
+/* Routing header options for IPv6.  */
+#define IPV6_RTHDR_LOOSE       0       /* Hop doesn't need to be neighbour. */
+#define IPV6_RTHDR_STRICT      1       /* Hop must be a neighbour.  */
+
+#define IPV6_RTHDR_TYPE_0      0       /* IPv6 Routing header type 0.  */
diff --git a/lib/libdss-include/include/bits/inf.h b/lib/libdss-include/include/bits/inf.h
new file mode 100644 (file)
index 0000000..179bf48
--- /dev/null
@@ -0,0 +1,29 @@
+/* `INFINITY' constant for IEEE 754 machines.
+   Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/inf.h> directly; include <math.h> instead."
+#endif
+
+/* IEEE positive infinity.  */
+
+#if __GNUC_PREREQ(3,3)
+# define INFINITY      (__builtin_inff())
+#else
+# define INFINITY      HUGE_VALF
+#endif
diff --git a/lib/libdss-include/include/bits/initspin.h b/lib/libdss-include/include/bits/initspin.h
new file mode 100644 (file)
index 0000000..936f178
--- /dev/null
@@ -0,0 +1 @@
+/* No thread support. */
diff --git a/lib/libdss-include/include/bits/inotify.h b/lib/libdss-include/include/bits/inotify.h
new file mode 100644 (file)
index 0000000..dc9f627
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_INOTIFY_H
+# error "Never use <bits/inotify.h> directly; include <sys/inotify.h> instead."
+#endif
+
+/* Flags for the parameter of inotify_init1.  */
+enum
+  {
+    IN_CLOEXEC = 02000000,
+#define IN_CLOEXEC IN_CLOEXEC
+    IN_NONBLOCK = 00004000
+#define IN_NONBLOCK IN_NONBLOCK
+  };
diff --git a/lib/libdss-include/include/bits/ioctl-types.h b/lib/libdss-include/include/bits/ioctl-types.h
new file mode 100644 (file)
index 0000000..b3bfdb1
--- /dev/null
@@ -0,0 +1,77 @@
+/* Structure types for pre-termios terminal ioctls.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IOCTL_H
+# error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
+#endif
+
+/* Get definition of constants for use with `ioctl'.  */
+#include <asm/ioctls.h>
+
+
+struct winsize
+  {
+    unsigned short int ws_row;
+    unsigned short int ws_col;
+    unsigned short int ws_xpixel;
+    unsigned short int ws_ypixel;
+  };
+
+#define NCC 8
+struct termio
+  {
+    unsigned short int c_iflag;                /* input mode flags */
+    unsigned short int c_oflag;                /* output mode flags */
+    unsigned short int c_cflag;                /* control mode flags */
+    unsigned short int c_lflag;                /* local mode flags */
+    unsigned char c_line;              /* line discipline */
+    unsigned char c_cc[NCC];           /* control characters */
+};
+
+/* modem lines */
+#define TIOCM_LE       0x001
+#define TIOCM_DTR      0x002
+#define TIOCM_RTS      0x004
+#define TIOCM_ST       0x008
+#define TIOCM_SR       0x010
+#define TIOCM_CTS      0x020
+#define TIOCM_CAR      0x040
+#define TIOCM_RNG      0x080
+#define TIOCM_DSR      0x100
+#define TIOCM_CD       TIOCM_CAR
+#define TIOCM_RI       TIOCM_RNG
+
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+
+/* line disciplines */
+#define N_TTY          0
+#define N_SLIP         1
+#define N_MOUSE                2
+#define N_PPP          3
+#define N_STRIP                4
+#define N_AX25         5
+#define N_X25          6       /* X.25 async  */
+#define N_6PACK                7
+#define N_MASC         8       /* Mobitex module  */
+#define N_R3964                9       /* Simatic R3964 module  */
+#define N_PROFIBUS_FDL 10      /* Profibus  */
+#define N_IRDA         11      /* Linux IR  */
+#define N_SMSBLOCK     12      /* SMS block mode  */
+#define N_HDLC         13      /* synchronous HDLC  */
+#define N_SYNC_PPP     14      /* synchronous PPP  */
+#define        N_HCI           15      /* Bluetooth HCI UART  */
diff --git a/lib/libdss-include/include/bits/ioctls.h b/lib/libdss-include/include/bits/ioctls.h
new file mode 100644 (file)
index 0000000..cbfedca
--- /dev/null
@@ -0,0 +1,108 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IOCTL_H
+# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
+#endif
+
+/* Use the definitions from the kernel header files.  */
+#include <asm/ioctls.h>
+
+/* Routing table calls.  */
+#define SIOCADDRT      0x890B          /* add routing table entry      */
+#define SIOCDELRT      0x890C          /* delete routing table entry   */
+#define SIOCRTMSG      0x890D          /* call to routing system       */
+
+/* Socket configuration controls. */
+#define SIOCGIFNAME    0x8910          /* get iface name               */
+#define SIOCSIFLINK    0x8911          /* set iface channel            */
+#define SIOCGIFCONF    0x8912          /* get iface list               */
+#define SIOCGIFFLAGS   0x8913          /* get flags                    */
+#define SIOCSIFFLAGS   0x8914          /* set flags                    */
+#define SIOCGIFADDR    0x8915          /* get PA address               */
+#define SIOCSIFADDR    0x8916          /* set PA address               */
+#define SIOCGIFDSTADDR 0x8917          /* get remote PA address        */
+#define SIOCSIFDSTADDR 0x8918          /* set remote PA address        */
+#define SIOCGIFBRDADDR 0x8919          /* get broadcast PA address     */
+#define SIOCSIFBRDADDR 0x891a          /* set broadcast PA address     */
+#define SIOCGIFNETMASK 0x891b          /* get network PA mask          */
+#define SIOCSIFNETMASK 0x891c          /* set network PA mask          */
+#define SIOCGIFMETRIC  0x891d          /* get metric                   */
+#define SIOCSIFMETRIC  0x891e          /* set metric                   */
+#define SIOCGIFMEM     0x891f          /* get memory address (BSD)     */
+#define SIOCSIFMEM     0x8920          /* set memory address (BSD)     */
+#define SIOCGIFMTU     0x8921          /* get MTU size                 */
+#define SIOCSIFMTU     0x8922          /* set MTU size                 */
+#define SIOCSIFNAME    0x8923          /* set interface name           */
+#define        SIOCSIFHWADDR   0x8924          /* set hardware address         */
+#define SIOCGIFENCAP   0x8925          /* get/set encapsulations       */
+#define SIOCSIFENCAP   0x8926
+#define SIOCGIFHWADDR  0x8927          /* Get hardware address         */
+#define SIOCGIFSLAVE   0x8929          /* Driver slaving support       */
+#define SIOCSIFSLAVE   0x8930
+#define SIOCADDMULTI   0x8931          /* Multicast address lists      */
+#define SIOCDELMULTI   0x8932
+#define SIOCGIFINDEX   0x8933          /* name -> if_index mapping     */
+#define SIOGIFINDEX    SIOCGIFINDEX    /* misprint compatibility :-)   */
+#define SIOCSIFPFLAGS  0x8934          /* set/get extended flags set   */
+#define SIOCGIFPFLAGS  0x8935
+#define SIOCDIFADDR    0x8936          /* delete PA address            */
+#define        SIOCSIFHWBROADCAST      0x8937  /* set hardware broadcast addr  */
+#define SIOCGIFCOUNT   0x8938          /* get number of devices */
+
+#define SIOCGIFBR      0x8940          /* Bridging support             */
+#define SIOCSIFBR      0x8941          /* Set bridging options         */
+
+#define SIOCGIFTXQLEN  0x8942          /* Get the tx queue length      */
+#define SIOCSIFTXQLEN  0x8943          /* Set the tx queue length      */
+
+
+/* ARP cache control calls. */
+                   /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
+#define SIOCDARP       0x8953          /* delete ARP table entry       */
+#define SIOCGARP       0x8954          /* get ARP table entry          */
+#define SIOCSARP       0x8955          /* set ARP table entry          */
+
+/* RARP cache control calls. */
+#define SIOCDRARP      0x8960          /* delete RARP table entry      */
+#define SIOCGRARP      0x8961          /* get RARP table entry         */
+#define SIOCSRARP      0x8962          /* set RARP table entry         */
+
+/* Driver configuration calls */
+
+#define SIOCGIFMAP     0x8970          /* Get device parameters        */
+#define SIOCSIFMAP     0x8971          /* Set device parameters        */
+
+/* DLCI configuration calls */
+
+#define SIOCADDDLCI    0x8980          /* Create new DLCI device       */
+#define SIOCDELDLCI    0x8981          /* Delete DLCI device           */
+
+/* Device private ioctl calls.  */
+
+/* These 16 ioctls are available to devices via the do_ioctl() device
+   vector.  Each device should include this file and redefine these
+   names as their own. Because these are device dependent it is a good
+   idea _NOT_ to issue them to random objects and hope.  */
+
+#define SIOCDEVPRIVATE                 0x89F0  /* to 89FF */
+
+/*
+ *     These 16 ioctl calls are protocol private
+ */
+
+#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
diff --git a/lib/libdss-include/include/bits/ipc.h b/lib/libdss-include/include/bits/ipc.h
new file mode 100644 (file)
index 0000000..bc94471
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IPC_H
+# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT      01000           /* Create key if key does not exist. */
+#define IPC_EXCL       02000           /* Fail if key exists.  */
+#define IPC_NOWAIT     04000           /* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID       0               /* Remove identifier.  */
+#define IPC_SET                1               /* Set `ipc_perm' options.  */
+#define IPC_STAT       2               /* Get `ipc_perm' options.  */
+#ifdef __USE_GNU
+# define IPC_INFO      3               /* See ipcs.  */
+#endif
+
+/* Special key values.  */
+#define IPC_PRIVATE    ((__key_t) 0)   /* Private key.  */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;                     /* Key.  */
+    __uid_t uid;                       /* Owner's user ID.  */
+    __gid_t gid;                       /* Owner's group ID.  */
+    __uid_t cuid;                      /* Creator's user ID.  */
+    __gid_t cgid;                      /* Creator's group ID.  */
+    unsigned int mode;                 /* Read/write permission.  */
+    unsigned short int __seq;          /* Sequence number.  */
+    unsigned short int __pad1;
+    __syscall_ulong_t __glibc_reserved1;
+    __syscall_ulong_t __glibc_reserved2;
+  };
diff --git a/lib/libdss-include/include/bits/ipctypes.h b/lib/libdss-include/include/bits/ipctypes.h
new file mode 100644 (file)
index 0000000..bf791ce
--- /dev/null
@@ -0,0 +1,36 @@
+/* bits/ipctypes.h -- Define some types used by SysV IPC/MSG/SHM.  Generic.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include <bits/ipctypes.h> directly.
+ */
+
+#ifndef _BITS_IPCTYPES_H
+#define _BITS_IPCTYPES_H       1
+
+#include <bits/types.h>
+
+/* Used in `struct shmid_ds'.  */
+# if __WORDSIZE == 32
+typedef unsigned short int __ipc_pid_t;
+# else
+typedef int __ipc_pid_t;
+# endif
+
+
+#endif /* bits/ipctypes.h */
diff --git a/lib/libdss-include/include/bits/libio-ldbl.h b/lib/libdss-include/include/bits/libio-ldbl.h
new file mode 100644 (file)
index 0000000..15c5af9
--- /dev/null
@@ -0,0 +1,24 @@
+/* -mlong-double-64 compatibility mode for libio functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IO_STDIO_H
+# error "Never include <bits/libio-ldbl.h> directly; use <libio.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (_IO_vfscanf)
+__LDBL_REDIR_DECL (_IO_vfprintf)
diff --git a/lib/libdss-include/include/bits/libm-simd-decl-stubs.h b/lib/libdss-include/include/bits/libm-simd-decl-stubs.h
new file mode 100644 (file)
index 0000000..541cb3f
--- /dev/null
@@ -0,0 +1,59 @@
+/* Empty definitions required for __MATHCALL_VEC unfolding in mathcalls.h.
+   Copyright (C) 2014-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/libm-simd-decl-stubs.h> directly;\
+ include <math.h> instead."
+#endif
+
+/* Needed definitions could be generated with:
+   for func in $(grep __MATHCALL_VEC math/bits/mathcalls.h |\
+                sed -r "s|__MATHCALL_VEC.?\(||; s|,.*||"); do
+     echo "#define __DECL_SIMD_${func}";
+     echo "#define __DECL_SIMD_${func}f";
+     echo "#define __DECL_SIMD_${func}l";
+   done
+ */
+
+#ifndef _BITS_LIBM_SIMD_DECL_STUBS_H
+#define _BITS_LIBM_SIMD_DECL_STUBS_H 1
+
+#define __DECL_SIMD_cos
+#define __DECL_SIMD_cosf
+#define __DECL_SIMD_cosl
+
+#define __DECL_SIMD_sin
+#define __DECL_SIMD_sinf
+#define __DECL_SIMD_sinl
+
+#define __DECL_SIMD_sincos
+#define __DECL_SIMD_sincosf
+#define __DECL_SIMD_sincosl
+
+#define __DECL_SIMD_log
+#define __DECL_SIMD_logf
+#define __DECL_SIMD_logl
+
+#define __DECL_SIMD_exp
+#define __DECL_SIMD_expf
+#define __DECL_SIMD_expl
+
+#define __DECL_SIMD_pow
+#define __DECL_SIMD_powf
+#define __DECL_SIMD_powl
+#endif
diff --git a/lib/libdss-include/include/bits/link.h b/lib/libdss-include/include/bits/link.h
new file mode 100644 (file)
index 0000000..0bf9615
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+/* Registers for entry into PLT on AArch64.  */
+typedef struct La_aarch64_regs
+{
+  uint64_t lr_xreg[8];
+  uint64_t lr_dreg[8];
+  uint64_t lr_sp;
+  uint64_t lr_lr;
+} La_aarch64_regs;
+
+/* Return values for calls from PLT on AArch64.  */
+typedef struct La_aarch64_retval
+{
+  /* Up to two integer registers can be used for a return value.  */
+  uint64_t lrv_xreg[2];
+  /* Up to four D registers can be used for a return value.  */
+  uint64_t lrv_dreg[4];
+
+} La_aarch64_retval;
+__BEGIN_DECLS
+
+extern ElfW(Addr)
+la_aarch64_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx,
+                        uintptr_t *__refcook,
+                        uintptr_t *__defcook,
+                        La_aarch64_regs *__regs,
+                        unsigned int *__flags,
+                        const char *__symname,
+                        long int *__framesizep);
+
+extern unsigned int
+la_aarch64_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx,
+                       uintptr_t *__refcook,
+                       uintptr_t *__defcook,
+                       const La_aarch64_regs *__inregs,
+                       La_aarch64_retval *__outregs,
+                       const char *__symname);
+
+__END_DECLS
diff --git a/lib/libdss-include/include/bits/local_lim.h b/lib/libdss-include/include/bits/local_lim.h
new file mode 100644 (file)
index 0000000..8f2cc72
--- /dev/null
@@ -0,0 +1,101 @@
+/* Minimum guaranteed maximum values for system limits.  Linux version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The kernel header pollutes the namespace with the NR_OPEN symbol
+   and defines LINK_MAX although filesystems have different maxima.  A
+   similar thing is true for OPEN_MAX: the limit can be changed at
+   runtime and therefore the macro must not be defined.  Remove this
+   after including the header if necessary.  */
+#ifndef NR_OPEN
+# define __undef_NR_OPEN
+#endif
+#ifndef LINK_MAX
+# define __undef_LINK_MAX
+#endif
+#ifndef OPEN_MAX
+# define __undef_OPEN_MAX
+#endif
+#ifndef ARG_MAX
+# define __undef_ARG_MAX
+#endif
+
+/* The kernel sources contain a file with all the needed information.  */
+#include <linux/limits.h>
+
+/* Have to remove NR_OPEN?  */
+#ifdef __undef_NR_OPEN
+# undef NR_OPEN
+# undef __undef_NR_OPEN
+#endif
+/* Have to remove LINK_MAX?  */
+#ifdef __undef_LINK_MAX
+# undef LINK_MAX
+# undef __undef_LINK_MAX
+#endif
+/* Have to remove OPEN_MAX?  */
+#ifdef __undef_OPEN_MAX
+# undef OPEN_MAX
+# undef __undef_OPEN_MAX
+#endif
+/* Have to remove ARG_MAX?  */
+#ifdef __undef_ARG_MAX
+# undef ARG_MAX
+# undef __undef_ARG_MAX
+#endif
+
+/* The number of data keys per process.  */
+#define _POSIX_THREAD_KEYS_MAX 128
+/* This is the value this implementation supports.  */
+#define PTHREAD_KEYS_MAX       1024
+
+/* Controlling the iterations of destructors for thread-specific data.  */
+#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
+/* Number of iterations this implementation does.  */
+#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
+
+/* The number of threads per process.  */
+#define _POSIX_THREAD_THREADS_MAX      64
+/* We have no predefined limit on the number of threads.  */
+#undef PTHREAD_THREADS_MAX
+
+/* Maximum amount by which a process can descrease its asynchronous I/O
+   priority level.  */
+#define AIO_PRIO_DELTA_MAX     20
+
+/* Minimum size for a thread.  At least two pages for systems with 64k
+   pages.  */
+#define PTHREAD_STACK_MIN      131072
+
+/* Maximum number of timer expiration overruns.  */
+#define DELAYTIMER_MAX 2147483647
+
+/* Maximum tty name length.  */
+#define TTY_NAME_MAX           32
+
+/* Maximum login name length.  This is arbitrary.  */
+#define LOGIN_NAME_MAX         256
+
+/* Maximum host name length.  */
+#define HOST_NAME_MAX          64
+
+/* Maximum message queue priority level.  */
+#define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
diff --git a/lib/libdss-include/include/bits/locale.h b/lib/libdss-include/include/bits/locale.h
new file mode 100644 (file)
index 0000000..d5fb290
--- /dev/null
@@ -0,0 +1,40 @@
+/* Definition of locale category symbol values.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _LOCALE_H && !defined _LANGINFO_H
+# error "Never use <bits/locale.h> directly; include <locale.h> instead."
+#endif
+
+#ifndef _BITS_LOCALE_H
+#define _BITS_LOCALE_H 1
+
+#define __LC_CTYPE              0
+#define __LC_NUMERIC            1
+#define __LC_TIME               2
+#define __LC_COLLATE            3
+#define __LC_MONETARY           4
+#define __LC_MESSAGES           5
+#define __LC_ALL                6
+#define __LC_PAPER              7
+#define __LC_NAME               8
+#define __LC_ADDRESS            9
+#define __LC_TELEPHONE         10
+#define __LC_MEASUREMENT       11
+#define __LC_IDENTIFICATION    12
+
+#endif /* bits/locale.h */
diff --git a/lib/libdss-include/include/bits/math-finite.h b/lib/libdss-include/include/bits/math-finite.h
new file mode 100644 (file)
index 0000000..adaad0e
--- /dev/null
@@ -0,0 +1,506 @@
+/* Entry points to finite-math-only compiler runs.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/math-finite.h> directly; include <math.h> instead."
+#endif
+
+/* acos.  */
+extern double __REDIRECT_NTH (acos, (double), __acos_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (acosf, (float), __acosf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (acosl, (long double), __acos_finite);
+#  else
+extern long double __REDIRECT_NTH (acosl, (long double), __acosl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* acosh.  */
+extern double __REDIRECT_NTH (acosh, (double), __acosh_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (acoshf, (float), __acoshf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (acoshl, (long double), __acosh_finite);
+#  else
+extern long double __REDIRECT_NTH (acoshl, (long double), __acoshl_finite);
+#  endif
+# endif
+#endif
+
+/* asin.  */
+extern double __REDIRECT_NTH (asin, (double), __asin_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (asinf, (float), __asinf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (asinl, (long double), __asin_finite);
+#  else
+extern long double __REDIRECT_NTH (asinl, (long double), __asinl_finite);
+#  endif
+# endif
+#endif
+
+/* atan2.  */
+extern double __REDIRECT_NTH (atan2, (double, double), __atan2_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (atan2f, (float, float), __atan2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (atan2l, (long double, long double),
+                                  __atan2_finite);
+#  else
+extern long double __REDIRECT_NTH (atan2l, (long double, long double),
+                                  __atan2l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* atanh.  */
+extern double __REDIRECT_NTH (atanh, (double), __atanh_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (atanhf, (float), __atanhf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (atanhl, (long double), __atanh_finite);
+#  else
+extern long double __REDIRECT_NTH (atanhl, (long double), __atanhl_finite);
+#  endif
+# endif
+#endif
+
+/* cosh.  */
+extern double __REDIRECT_NTH (cosh, (double), __cosh_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (coshf, (float), __coshf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (coshl, (long double), __cosh_finite);
+#  else
+extern long double __REDIRECT_NTH (coshl, (long double), __coshl_finite);
+#  endif
+# endif
+#endif
+
+/* exp.  */
+extern double __REDIRECT_NTH (exp, (double), __exp_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (expf, (float), __expf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (expl, (long double), __exp_finite);
+#  else
+extern long double __REDIRECT_NTH (expl, (long double), __expl_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_GNU
+/* exp10.  */
+extern double __REDIRECT_NTH (exp10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (exp10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (exp10l, (long double), __exp10_finite);
+#  else
+extern long double __REDIRECT_NTH (exp10l, (long double), __exp10l_finite);
+#  endif
+# endif
+
+/* pow10.  */
+extern double __REDIRECT_NTH (pow10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (pow10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (pow10l, (long double), __exp10_finite);
+#  else
+extern long double __REDIRECT_NTH (pow10l, (long double), __exp10l_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_ISOC99
+/* exp2.  */
+extern double __REDIRECT_NTH (exp2, (double), __exp2_finite);
+extern float __REDIRECT_NTH (exp2f, (float), __exp2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (exp2l, (long double), __exp2_finite);
+#  else
+extern long double __REDIRECT_NTH (exp2l, (long double), __exp2l_finite);
+#  endif
+# endif
+#endif
+
+/* fmod.  */
+extern double __REDIRECT_NTH (fmod, (double, double), __fmod_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (fmodf, (float, float), __fmodf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (fmodl, (long double, long double),
+                                  __fmod_finite);
+#  else
+extern long double __REDIRECT_NTH (fmodl, (long double, long double),
+                                  __fmodl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+/* hypot.  */
+extern double __REDIRECT_NTH (hypot, (double, double), __hypot_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (hypotf, (float, float), __hypotf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (hypotl, (long double, long double),
+                                  __hypot_finite);
+#  else
+extern long double __REDIRECT_NTH (hypotl, (long double, long double),
+                                  __hypotl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* j0.  */
+extern double __REDIRECT_NTH (j0, (double), __j0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (j0f, (float), __j0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (j0l, (long double), __j0_finite);
+#  else
+extern long double __REDIRECT_NTH (j0l, (long double), __j0l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* y0.  */
+extern double __REDIRECT_NTH (y0, (double), __y0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (y0f, (float), __y0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (y0l, (long double), __y0_finite);
+#  else
+extern long double __REDIRECT_NTH (y0l, (long double), __y0l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* j1.  */
+extern double __REDIRECT_NTH (j1, (double), __j1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (j1f, (float), __j1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (j1l, (long double), __j1_finite);
+#  else
+extern long double __REDIRECT_NTH (j1l, (long double), __j1l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* y1.  */
+extern double __REDIRECT_NTH (y1, (double), __y1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (y1f, (float), __y1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (y1l, (long double), __y1_finite);
+#  else
+extern long double __REDIRECT_NTH (y1l, (long double), __y1l_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* jn.  */
+extern double __REDIRECT_NTH (jn, (int, double), __jn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (jnf, (int, float), __jnf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (jnl, (int, long double), __jn_finite);
+#  else
+extern long double __REDIRECT_NTH (jnl, (int, long double), __jnl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* yn.  */
+extern double __REDIRECT_NTH (yn, (int, double), __yn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (ynf, (int, float), __ynf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (ynl, (int, long double), __yn_finite);
+#  else
+extern long double __REDIRECT_NTH (ynl, (int, long double), __ynl_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* lgamma_r.  */
+extern double __REDIRECT_NTH (lgamma_r, (double, int *), __lgamma_r_finite);
+# ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (lgammaf_r, (float, int *), __lgammaf_r_finite);
+#  ifdef __MATH_DECLARE_LDOUBLE
+#   ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+                                  __lgamma_r_finite);
+#   else
+extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+                                  __lgammal_r_finite);
+#   endif
+#  endif
+# endif
+#endif
+
+extern double __lgamma_r_finite (double, int *);
+extern float __lgammaf_r_finite (float, int *);
+#ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (__lgammal_r_finite, (long double, int *),
+                                  __lgamma_r_finite);
+#else
+extern long double __lgammal_r_finite (long double, int *);
+#endif
+
+#if ((defined __USE_XOPEN || defined __USE_ISOC99) \
+     && defined __extern_always_inline)
+/* lgamma.  */
+__extern_always_inline double __NTH (lgamma (double __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgamma_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgamma_r_finite (__d, &__local_signgam);
+# endif
+}
+#endif
+#if defined __USE_ISOC99 && defined __extern_always_inline
+__extern_always_inline float __NTH (lgammaf (float __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgammaf_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgammaf_r_finite (__d, &__local_signgam);
+# endif
+}
+# ifdef __MATH_DECLARE_LDOUBLE
+__extern_always_inline long double __NTH (lgammal (long double __d))
+{
+# if defined __USE_MISC || defined __USE_XOPEN
+  return __lgammal_r_finite (__d, &signgam);
+# else
+  int __local_signgam = 0;
+  return __lgammal_r_finite (__d, &__local_signgam);
+# endif
+}
+# endif
+#endif
+
+#if ((defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)) \
+     && defined __extern_always_inline)
+/* gamma.  */
+__extern_always_inline double __NTH (gamma (double __d))
+{
+  return __lgamma_r_finite (__d, &signgam);
+}
+# ifdef __USE_ISOC99
+__extern_always_inline float __NTH (gammaf (float __d))
+{
+  return __lgammaf_r_finite (__d, &signgam);
+}
+#  ifdef __MATH_DECLARE_LDOUBLE
+__extern_always_inline long double __NTH (gammal (long double __d))
+{
+  return __lgammal_r_finite (__d, &signgam);
+}
+#  endif
+# endif
+#endif
+
+/* log.  */
+extern double __REDIRECT_NTH (log, (double), __log_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (logf, (float), __logf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (logl, (long double), __log_finite);
+#  else
+extern long double __REDIRECT_NTH (logl, (long double), __logl_finite);
+#  endif
+# endif
+#endif
+
+/* log10.  */
+extern double __REDIRECT_NTH (log10, (double), __log10_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (log10f, (float), __log10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (log10l, (long double), __log10_finite);
+#  else
+extern long double __REDIRECT_NTH (log10l, (long double), __log10l_finite);
+#  endif
+# endif
+#endif
+
+#ifdef __USE_ISOC99
+/* log2.  */
+extern double __REDIRECT_NTH (log2, (double), __log2_finite);
+extern float __REDIRECT_NTH (log2f, (float), __log2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (log2l, (long double), __log2_finite);
+#  else
+extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite);
+#  endif
+# endif
+#endif
+
+/* pow.  */
+extern double __REDIRECT_NTH (pow, (double, double), __pow_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (powf, (float, float), __powf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (powl, (long double, long double),
+                                  __pow_finite);
+#  else
+extern long double __REDIRECT_NTH (powl, (long double, long double),
+                                  __powl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+/* remainder.  */
+extern double __REDIRECT_NTH (remainder, (double, double), __remainder_finite);
+#endif
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (remainderf, (float, float), __remainderf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (remainderl, (long double, long double),
+                                  __remainder_finite);
+#  else
+extern long double __REDIRECT_NTH (remainderl, (long double, long double),
+                                  __remainderl_finite);
+#  endif
+# endif
+#endif
+
+#if (defined __USE_MISC                                                        \
+     || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))
+/* scalb.  */
+extern double __REDIRECT_NTH (scalb, (double, double), __scalb_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
+extern float __REDIRECT_NTH (scalbf, (float, float), __scalbf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (scalbl, (long double, long double),
+                                  __scalb_finite);
+#  else
+extern long double __REDIRECT_NTH (scalbl, (long double, long double),
+                                  __scalbl_finite);
+#  endif
+# endif
+#endif
+
+/* sinh.  */
+extern double __REDIRECT_NTH (sinh, (double), __sinh_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (sinhf, (float), __sinhf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (sinhl, (long double), __sinh_finite);
+#  else
+extern long double __REDIRECT_NTH (sinhl, (long double), __sinhl_finite);
+#  endif
+# endif
+#endif
+
+/* sqrt.  */
+extern double __REDIRECT_NTH (sqrt, (double), __sqrt_finite);
+#ifdef __USE_ISOC99
+extern float __REDIRECT_NTH (sqrtf, (float), __sqrtf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrt_finite);
+#  else
+extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite);
+#  endif
+# endif
+#endif
+
+#if defined __USE_ISOC99 && defined __extern_always_inline
+/* tgamma.  */
+extern double __gamma_r_finite (double, int *);
+__extern_always_inline double __NTH (tgamma (double __d))
+{
+  int __local_signgam = 0;
+  double __res = __gamma_r_finite (__d, &__local_signgam);
+  return __local_signgam < 0 ? -__res : __res;
+}
+extern float __gammaf_r_finite (float, int *);
+__extern_always_inline float __NTH (tgammaf (float __d))
+{
+  int __local_signgam = 0;
+  float __res = __gammaf_r_finite (__d, &__local_signgam);
+  return __local_signgam < 0 ? -__res : __res;
+}
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __gammal_r_finite (long double, int *);
+__extern_always_inline long double __NTH (tgammal (long double __d))
+{
+  int __local_signgam = 0;
+#  ifdef __NO_LONG_DOUBLE_MATH
+  long double __res = __gamma_r_finite (__d, &__local_signgam);
+#  else
+  long double __res = __gammal_r_finite (__d, &__local_signgam);
+#  endif
+  return __local_signgam < 0 ? -__res : __res;
+}
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/math-vector.h b/lib/libdss-include/include/bits/math-vector.h
new file mode 100644 (file)
index 0000000..975724a
--- /dev/null
@@ -0,0 +1,27 @@
+/* Platform-specific SIMD declarations of math functions.
+   Copyright (C) 2014-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License  published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/math-vector.h> directly;\
+ include <math.h> instead."
+#endif
+
+/* Get default empty definitions required for __MATHCALL_VEC unfolding.
+   Plaform-specific analogue of this header should redefine them with specific
+   SIMD declarations.  */
+#include <bits/libm-simd-decl-stubs.h>
diff --git a/lib/libdss-include/include/bits/mathcalls.h b/lib/libdss-include/include/bits/mathcalls.h
new file mode 100644 (file)
index 0000000..9a7b3f0
--- /dev/null
@@ -0,0 +1,384 @@
+/* Prototype declarations for math functions; helper file for <math.h>.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* NOTE: Because of the special way this file is used by <math.h>, this
+   file must NOT be protected from multiple inclusion as header files
+   usually are.
+
+   This file provides prototype declarations for the math functions.
+   Most functions are declared using the macro:
+
+   __MATHCALL (NAME,[_r], (ARGS...));
+
+   This means there is a function `NAME' returning `double' and a function
+   `NAMEf' returning `float'.  Each place `_Mdouble_' appears in the
+   prototype, that is actually `double' in the prototype for `NAME' and
+   `float' in the prototype for `NAMEf'.  Reentrant variant functions are
+   called `NAME_r' and `NAMEf_r'.
+
+   Functions returning other types like `int' are declared using the macro:
+
+   __MATHDECL (TYPE, NAME,[_r], (ARGS...));
+
+   This is just like __MATHCALL but for a function returning `TYPE'
+   instead of `_Mdouble_'.  In all of these cases, there is still
+   both a `NAME' and a `NAMEf' that takes `float' arguments.
+
+   Note that there must be no whitespace before the argument passed for
+   NAME, to make token pasting work with -traditional.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/mathcalls.h> directly; include <math.h> instead."
+#endif
+
+
+/* Trigonometric functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Arc cosine of X.  */
+__MATHCALL (acos,, (_Mdouble_ __x));
+/* Arc sine of X.  */
+__MATHCALL (asin,, (_Mdouble_ __x));
+/* Arc tangent of X.  */
+__MATHCALL (atan,, (_Mdouble_ __x));
+/* Arc tangent of Y/X.  */
+__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+
+/* Cosine of X.  */
+__MATHCALL_VEC (cos,, (_Mdouble_ __x));
+/* Sine of X.  */
+__MATHCALL_VEC (sin,, (_Mdouble_ __x));
+/* Tangent of X.  */
+__MATHCALL (tan,, (_Mdouble_ __x));
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic cosine of X.  */
+__MATHCALL (cosh,, (_Mdouble_ __x));
+/* Hyperbolic sine of X.  */
+__MATHCALL (sinh,, (_Mdouble_ __x));
+/* Hyperbolic tangent of X.  */
+__MATHCALL (tanh,, (_Mdouble_ __x));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_GNU
+/* Cosine and sine of X.  */
+__MATHDECL_VEC (void,sincos,,
+               (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Hyperbolic arc cosine of X.  */
+__MATHCALL (acosh,, (_Mdouble_ __x));
+/* Hyperbolic arc sine of X.  */
+__MATHCALL (asinh,, (_Mdouble_ __x));
+/* Hyperbolic arc tangent of X.  */
+__MATHCALL (atanh,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+/* Exponential and logarithmic functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Exponential function of X.  */
+__MATHCALL_VEC (exp,, (_Mdouble_ __x));
+
+/* Break VALUE into a normalized fraction and an integral power of 2.  */
+__MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+
+/* X times (two to the EXP power).  */
+__MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+
+/* Natural logarithm of X.  */
+__MATHCALL_VEC (log,, (_Mdouble_ __x));
+
+/* Base-ten logarithm of X.  */
+__MATHCALL (log10,, (_Mdouble_ __x));
+
+/* Break VALUE into integral and fractional parts.  */
+__MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_GNU
+/* A function missing in all standards: compute exponent to base ten.  */
+__MATHCALL (exp10,, (_Mdouble_ __x));
+/* Another name occasionally used.  */
+__MATHCALL (pow10,, (_Mdouble_ __x));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return exp(X) - 1.  */
+__MATHCALL (expm1,, (_Mdouble_ __x));
+
+/* Return log(1 + X).  */
+__MATHCALL (log1p,, (_Mdouble_ __x));
+
+/* Return the base 2 signed integral exponent of X.  */
+__MATHCALL (logb,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Compute base-2 exponential of X.  */
+__MATHCALL (exp2,, (_Mdouble_ __x));
+
+/* Compute base-2 logarithm of X.  */
+__MATHCALL (log2,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Power functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Return X to the Y power.  */
+__MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+
+/* Return the square root of X.  */
+__MATHCALL (sqrt,, (_Mdouble_ __x));
+_Mdouble_END_NAMESPACE
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return `sqrt(X*X + Y*Y)'.  */
+__MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+__END_NAMESPACE_C99
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return the cube root of X.  */
+__MATHCALL (cbrt,, (_Mdouble_ __x));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Nearest integer, absolute value, and remainder functions.  */
+
+_Mdouble_BEGIN_NAMESPACE
+/* Smallest integral value not less than X.  */
+__MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+
+/* Absolute value of X.  */
+__MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+
+/* Largest integer not greater than X.  */
+__MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+
+/* Floating-point modulo remainder of X/Y.  */
+__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+
+
+/* Return 0 if VALUE is finite or NaN, +1 if it
+   is +Infinity, -1 if it is -Infinity.  */
+__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+/* Return nonzero if VALUE is finite and not NaN.  */
+__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+_Mdouble_END_NAMESPACE
+
+#ifdef __USE_MISC
+# if (!defined __cplusplus \
+      || __cplusplus < 201103L /* isinf conflicts with C++11.  */ \
+      || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't.  */
+/* Return 0 if VALUE is finite or NaN, +1 if it
+   is +Infinity, -1 if it is -Infinity.  */
+__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+# endif
+
+/* Return nonzero if VALUE is finite and not NaN.  */
+__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+/* Return the remainder of X/Y.  */
+__MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+
+
+/* Return the fractional part of X after dividing out `ilogb (X)'.  */
+__MATHCALL (significand,, (_Mdouble_ __x));
+#endif /* Use misc.  */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return X with its signed changed to Y's.  */
+__MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return representation of qNaN for double type.  */
+__MATHCALLX (nan,, (const char *__tagb), (__const__));
+__END_NAMESPACE_C99
+#endif
+
+
+/* Return nonzero if VALUE is not a number.  */
+__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# if (!defined __cplusplus \
+      || __cplusplus < 201103L /* isnan conflicts with C++11.  */ \
+      || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't.  */
+/* Return nonzero if VALUE is not a number.  */
+__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+# endif
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN && __MATH_DECLARING_DOUBLE)
+/* Bessel functions.  */
+__MATHCALL (j0,, (_Mdouble_));
+__MATHCALL (j1,, (_Mdouble_));
+__MATHCALL (jn,, (int, _Mdouble_));
+__MATHCALL (y0,, (_Mdouble_));
+__MATHCALL (y1,, (_Mdouble_));
+__MATHCALL (yn,, (int, _Mdouble_));
+#endif
+
+
+#if defined __USE_XOPEN || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Error and gamma functions.  */
+__MATHCALL (erf,, (_Mdouble_));
+__MATHCALL (erfc,, (_Mdouble_));
+__MATHCALL (lgamma,, (_Mdouble_));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* True gamma function.  */
+__MATHCALL (tgamma,, (_Mdouble_));
+__END_NAMESPACE_C99
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Obsolete alias for `lgamma'.  */
+__MATHCALL (gamma,, (_Mdouble_));
+#endif
+
+#ifdef __USE_MISC
+/* Reentrant version of lgamma.  This function uses the global variable
+   `signgam'.  The reentrant version instead takes a pointer and stores
+   the value through it.  */
+__MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Return the integer nearest X in the direction of the
+   prevailing rounding mode.  */
+__MATHCALL (rint,, (_Mdouble_ __x));
+
+/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
+__MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+# if defined __USE_ISOC99 && !defined __LDBL_COMPAT
+__MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+# endif
+
+/* Return the remainder of integer divison X / Y with infinite precision.  */
+__MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+
+# ifdef __USE_ISOC99
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+# endif
+
+/* Return the binary exponent of X, which must be nonzero.  */
+__MATHDECL (int,ilogb,, (_Mdouble_ __x));
+#endif
+
+#ifdef __USE_ISOC99
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+
+/* Round X to integral value in floating-point format using current
+   rounding direction, but do not raise inexact exception.  */
+__MATHCALL (nearbyint,, (_Mdouble_ __x));
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+__MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+
+/* Round X to the integral value in floating-point format nearest but
+   not larger in magnitude.  */
+__MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+
+/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
+   and magnitude congruent `mod 2^n' to the magnitude of the integral
+   quotient x/y, with n >= 3.  */
+__MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+
+
+/* Conversion functions.  */
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+__MATHDECL (long int,lrint,, (_Mdouble_ __x));
+__extension__
+__MATHDECL (long long int,llrint,, (_Mdouble_ __x));
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+__MATHDECL (long int,lround,, (_Mdouble_ __x));
+__extension__
+__MATHDECL (long long int,llround,, (_Mdouble_ __x));
+
+
+/* Return positive difference between X and Y.  */
+__MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+
+/* Return maximum numeric value from X and Y.  */
+__MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+
+/* Return minimum numeric value from X and Y.  */
+__MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+
+
+/* Classify given number.  */
+__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+
+/* Test for negative number.  */
+__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+
+
+/* Multiply-add function computed as a ternary operation.  */
+__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+#endif /* Use ISO C99.  */
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Test for signaling NaN.  */
+__MATHDECL_1 (int, __issignaling,, (_Mdouble_ __value))
+     __attribute__ ((__const__));
+#endif
+
+#if defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \
+                          && __MATH_DECLARING_DOUBLE   \
+                          && !defined __USE_XOPEN2K8)
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+#endif
diff --git a/lib/libdss-include/include/bits/mathdef.h b/lib/libdss-include/include/bits/mathdef.h
new file mode 100644 (file)
index 0000000..db992fc
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _MATH_H && !defined _COMPLEX_H
+# error "Never use <bits/mathdef.h> directly; include <math.h> instead"
+#endif
+
+#if defined  __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
+# define _MATH_H_MATHDEF       1
+
+/* GCC does not promote `float' values to `double'.  */
+typedef float float_t;         /* `float' expressions are evaluated as
+                                  `float'.  */
+typedef double double_t;       /* `double' expressions are evaluated as
+                                  `double'.  */
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+# define FP_ILOGB0     (-2147483647)
+# define FP_ILOGBNAN   (2147483647)
+
+# define FP_FAST_FMA 1
+# define FP_FAST_FMAF 1
+
+#endif /* ISO C99 */
diff --git a/lib/libdss-include/include/bits/mathinline.h b/lib/libdss-include/include/bits/mathinline.h
new file mode 100644 (file)
index 0000000..02ec21b
--- /dev/null
@@ -0,0 +1,12 @@
+/* This file should provide inline versions of math functions.
+
+   Surround GCC-specific parts with #ifdef __GNUC__, and use `__extern_inline'.
+
+   This file should define __MATH_INLINES if functions are actually defined as
+   inlines.  */
+
+#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
+
+/* Here goes the real code.  */
+
+#endif
diff --git a/lib/libdss-include/include/bits/mman-linux.h b/lib/libdss-include/include/bits/mman-linux.h
new file mode 100644 (file)
index 0000000..dbb994b
--- /dev/null
@@ -0,0 +1,113 @@
+/* Definitions for POSIX memory map interface.  Linux generic version.
+   Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman-linux.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.
+
+   This file is also used by some non-Linux configurations of the
+   GNU C Library, for other systems that use these same bit values.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ      0x1             /* Page can be read.  */
+#define PROT_WRITE     0x2             /* Page can be written.  */
+#define PROT_EXEC      0x4             /* Page can be executed.  */
+#define PROT_NONE      0x0             /* Page can not be accessed.  */
+#define PROT_GROWSDOWN 0x01000000      /* Extend change to start of
+                                          growsdown vma (mprotect only).  */
+#define PROT_GROWSUP   0x02000000      /* Extend change to start of
+                                          growsup vma (mprotect only).  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED     0x01            /* Share changes.  */
+#define MAP_PRIVATE    0x02            /* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE      0x0f            /* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED      0x10            /* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE      0
+# ifdef __MAP_ANONYMOUS
+#  define MAP_ANONYMOUS        __MAP_ANONYMOUS /* Don't use a file.  */
+# else
+#  define MAP_ANONYMOUS        0x20            /* Don't use a file.  */
+# endif
+# define MAP_ANON      MAP_ANONYMOUS
+/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size.  */
+# define MAP_HUGE_SHIFT        26
+# define MAP_HUGE_MASK 0x3f
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC       1               /* Sync memory asynchronously.  */
+#define MS_SYNC                4               /* Synchronous memory sync.  */
+#define MS_INVALIDATE  2               /* Invalidate the caches.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE        1
+# define MREMAP_FIXED  2
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_MISC
+# define MADV_NORMAL     0     /* No further special treatment.  */
+# define MADV_RANDOM     1     /* Expect random page references.  */
+# define MADV_SEQUENTIAL  2    /* Expect sequential page references.  */
+# define MADV_WILLNEED   3     /* Will need these pages.  */
+# define MADV_DONTNEED   4     /* Don't need these pages.  */
+# define MADV_REMOVE     9     /* Remove these pages and resources.  */
+# define MADV_DONTFORK   10    /* Do not inherit across fork.  */
+# define MADV_DOFORK     11    /* Do inherit across fork.  */
+# define MADV_MERGEABLE          12    /* KSM may merge identical pages.  */
+# define MADV_UNMERGEABLE 13   /* KSM may not merge identical pages.  */
+# define MADV_HUGEPAGE   14    /* Worth backing with hugepages.  */
+# define MADV_NOHUGEPAGE  15   /* Not worth backing with hugepages.  */
+# define MADV_DONTDUMP   16    /* Explicity exclude from the core dump,
+                                   overrides the coredump filter bits.  */
+# define MADV_DODUMP     17    /* Clear the MADV_DONTDUMP flag.  */
+# define MADV_HWPOISON   100   /* Poison a page for testing.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL     0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM     1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED   3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED   4 /* Don't need these pages.  */
+#endif
+
+/* Flags for `mlockall'.  */
+#ifndef MCL_CURRENT
+# define MCL_CURRENT   1               /* Lock all currently mapped pages.  */
+# define MCL_FUTURE    2               /* Lock all additions to address
+                                          space.  */
+# define MCL_ONFAULT   4               /* Lock all pages that are
+                                          faulted in.  */
+#endif
diff --git a/lib/libdss-include/include/bits/mman.h b/lib/libdss-include/include/bits/mman.h
new file mode 100644 (file)
index 0000000..7453e03
--- /dev/null
@@ -0,0 +1,44 @@
+/* Definitions for POSIX memory map interface.  Linux/AArch64 version.
+
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x00100         /* Stack-like segment.  */
+# define MAP_DENYWRITE 0x00800         /* ETXTBSY */
+# define MAP_EXECUTABLE        0x01000         /* Mark it as an executable.  */
+# define MAP_LOCKED    0x02000         /* Lock the mapping.  */
+# define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
+# define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
+# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
+# define MAP_HUGETLB   0x40000         /* Create huge page mapping.  */
+#endif
+
+
+
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
diff --git a/lib/libdss-include/include/bits/monetary-ldbl.h b/lib/libdss-include/include/bits/monetary-ldbl.h
new file mode 100644 (file)
index 0000000..3718d10
--- /dev/null
@@ -0,0 +1,27 @@
+/* -mlong-double-64 compatibility mode for monetary functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MONETARY_H
+# error "Never include <bits/monetary-ldbl.h> directly; use <monetary.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (strfmon)
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (strfmon_l)
+#endif
diff --git a/lib/libdss-include/include/bits/mqueue.h b/lib/libdss-include/include/bits/mqueue.h
new file mode 100644 (file)
index 0000000..abe7b64
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MQUEUE_H
+# error "Never use <bits/mqueue.h> directly; include <mqueue.h> instead."
+#endif
+
+#include <bits/types.h>
+
+typedef int mqd_t;
+
+struct mq_attr
+{
+  __syscall_slong_t mq_flags;  /* Message queue flags.  */
+  __syscall_slong_t mq_maxmsg; /* Maximum number of messages.  */
+  __syscall_slong_t mq_msgsize;        /* Maximum message size.  */
+  __syscall_slong_t mq_curmsgs;        /* Number of messages currently queued.  */
+  __syscall_slong_t __pad[4];
+};
diff --git a/lib/libdss-include/include/bits/mqueue2.h b/lib/libdss-include/include/bits/mqueue2.h
new file mode 100644 (file)
index 0000000..712c8e2
--- /dev/null
@@ -0,0 +1,57 @@
+/* Checking macros for mq functions.
+   Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FCNTL_H
+# error "Never include <bits/mqueue2.h> directly; use <mqueue.h> instead."
+#endif
+
+/* Check that calls to mq_open with O_CREAT set have an appropriate third and fourth
+   parameter.  */
+extern mqd_t mq_open (const char *__name, int __oflag, ...)
+     __THROW __nonnull ((1));
+extern mqd_t __mq_open_2 (const char *__name, int __oflag)
+     __THROW __nonnull ((1));
+extern mqd_t __REDIRECT_NTH (__mq_open_alias, (const char *__name,
+                                              int __oflag, ...), mq_open)
+     __nonnull ((1));
+__errordecl (__mq_open_wrong_number_of_args,
+            "mq_open can be called either with 2 or 4 arguments");
+__errordecl (__mq_open_missing_mode_and_attr,
+            "mq_open with O_CREAT in second argument needs 4 arguments");
+
+__fortify_function mqd_t
+__NTH (mq_open (const char *__name, int __oflag, ...))
+{
+  if (__va_arg_pack_len () != 0 && __va_arg_pack_len () != 2)
+    __mq_open_wrong_number_of_args ();
+
+  if (__builtin_constant_p (__oflag))
+    {
+      if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () == 0)
+       {
+         __mq_open_missing_mode_and_attr ();
+         return __mq_open_2 (__name, __oflag);
+       }
+      return __mq_open_alias (__name, __oflag, __va_arg_pack ());
+    }
+
+  if (__va_arg_pack_len () == 0)
+    return __mq_open_2 (__name, __oflag);
+
+  return __mq_open_alias (__name, __oflag, __va_arg_pack ());
+}
diff --git a/lib/libdss-include/include/bits/msq.h b/lib/libdss-include/include/bits/msq.h
new file mode 100644 (file)
index 0000000..2f3b7b2
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR    010000  /* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT    020000  /* recv any msg except of specified type */
+# define MSG_COPY      040000  /* copy (not remove) all queue messages */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;    /* structure describing operation permission */
+  __time_t msg_stime;          /* time of last msgsnd command */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved1;
+#endif
+  __time_t msg_rtime;          /* time of last msgrcv command */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved2;
+#endif
+  __time_t msg_ctime;          /* time of last change */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved3;
+#endif
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;          /* number of messages currently on queue */
+  msglen_t msg_qbytes;         /* max number of bytes allowed on queue */
+  __pid_t msg_lspid;           /* pid of last msgsnd() */
+  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+  unsigned long int __glibc_reserved4;
+  unsigned long int __glibc_reserved5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes    __msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/lib/libdss-include/include/bits/nan.h b/lib/libdss-include/include/bits/nan.h
new file mode 100644 (file)
index 0000000..b832724
--- /dev/null
@@ -0,0 +1,52 @@
+/* `NAN' constant for IEEE 754 machines.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never use <bits/nan.h> directly; include <math.h> instead."
+#endif
+
+
+/* IEEE Not A Number.  */
+
+#if __GNUC_PREREQ(3,3)
+
+# define NAN   (__builtin_nanf (""))
+
+#elif defined __GNUC__
+
+# define NAN \
+  (__extension__                                                             \
+   ((union { unsigned __l __attribute__ ((__mode__ (__SI__))); float __d; })  \
+    { __l: 0x7fc00000UL }).__d)
+
+#else
+
+# include <endian.h>
+
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __qnan_bytes         { 0x7f, 0xc0, 0, 0 }
+# endif
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __qnan_bytes         { 0, 0, 0xc0, 0x7f }
+# endif
+
+static union { unsigned char __c[4]; float __d; } __qnan_union
+  __attribute__ ((__unused__)) = { __qnan_bytes };
+# define NAN   (__qnan_union.__d)
+
+#endif /* GCC.  */
diff --git a/lib/libdss-include/include/bits/netdb.h b/lib/libdss-include/include/bits/netdb.h
new file mode 100644 (file)
index 0000000..3cd0db3
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETDB_H
+# error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
+#endif
+
+
+/* Description of data base entry for a single network.  NOTE: here a
+   poor assumption is made.  The network number is expected to fit
+   into an unsigned long int variable.  */
+struct netent
+{
+  char *n_name;                        /* Official name of network.  */
+  char **n_aliases;            /* Alias list.  */
+  int n_addrtype;              /* Net address type.  */
+  uint32_t n_net;              /* Network number.  */
+};
diff --git a/lib/libdss-include/include/bits/param.h b/lib/libdss-include/include/bits/param.h
new file mode 100644 (file)
index 0000000..45675d1
--- /dev/null
@@ -0,0 +1,42 @@
+/* Old-style Unix parameters and limits.  Linux version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+# error "Never use <bits/param.h> directly; include <sys/param.h> instead."
+#endif
+
+#ifndef ARG_MAX
+# define __undef_ARG_MAX
+#endif
+
+#include <linux/limits.h>
+#include <linux/param.h>
+
+/* The kernel headers define ARG_MAX.  The value is wrong, though.  */
+#ifdef __undef_ARG_MAX
+# undef ARG_MAX
+# undef __undef_ARG_MAX
+#endif
+
+#define        MAXSYMLINKS     20
+
+/* The following are not really correct but it is a value we used for a
+   long time and which seems to be usable.  People should not use NOFILE
+   and NCARGS anyway.  */
+#define NOFILE         256
+#define        NCARGS          131072
diff --git a/lib/libdss-include/include/bits/poll.h b/lib/libdss-include/include/bits/poll.h
new file mode 100644 (file)
index 0000000..a582118
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_POLL_H
+# error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
+#endif
+
+/* Event types that can be polled for.  These bits may be set in `events'
+   to indicate the interesting event types; they will appear in `revents'
+   to indicate the status of the file descriptor.  */
+#define POLLIN         0x001           /* There is data to read.  */
+#define POLLPRI                0x002           /* There is urgent data to read.  */
+#define POLLOUT                0x004           /* Writing now will not block.  */
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+/* These values are defined in XPG4.2.  */
+# define POLLRDNORM    0x040           /* Normal data may be read.  */
+# define POLLRDBAND    0x080           /* Priority data may be read.  */
+# define POLLWRNORM    0x100           /* Writing now will not block.  */
+# define POLLWRBAND    0x200           /* Priority data may be written.  */
+#endif
+
+#ifdef __USE_GNU
+/* These are extensions for Linux.  */
+# define POLLMSG       0x400
+# define POLLREMOVE    0x1000
+# define POLLRDHUP     0x2000
+#endif
+
+/* Event types always implicitly polled for.  These bits need not be set in
+   `events', but they will appear in `revents' to indicate the status of
+   the file descriptor.  */
+#define POLLERR                0x008           /* Error condition.  */
+#define POLLHUP                0x010           /* Hung up.  */
+#define POLLNVAL       0x020           /* Invalid polling request.  */
diff --git a/lib/libdss-include/include/bits/poll2.h b/lib/libdss-include/include/bits/poll2.h
new file mode 100644 (file)
index 0000000..137bfaf
--- /dev/null
@@ -0,0 +1,81 @@
+/* Checking macros for poll functions.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_POLL_H
+# error "Never include <bits/poll2.h> directly; use <sys/poll.h> instead."
+#endif
+
+
+__BEGIN_DECLS
+
+extern int __REDIRECT (__poll_alias, (struct pollfd *__fds, nfds_t __nfds,
+                                     int __timeout), poll);
+extern int __poll_chk (struct pollfd *__fds, nfds_t __nfds, int __timeout,
+                      __SIZE_TYPE__ __fdslen);
+extern int __REDIRECT (__poll_chk_warn, (struct pollfd *__fds, nfds_t __nfds,
+                                        int __timeout, __SIZE_TYPE__ __fdslen),
+                      __poll_chk)
+  __warnattr ("poll called with fds buffer too small file nfds entries");
+
+__fortify_function int
+poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
+{
+  if (__bos (__fds) != (__SIZE_TYPE__) -1)
+    {
+      if (! __builtin_constant_p (__nfds))
+       return __poll_chk (__fds, __nfds, __timeout, __bos (__fds));
+      else if (__bos (__fds) / sizeof (*__fds) < __nfds)
+       return __poll_chk_warn (__fds, __nfds, __timeout, __bos (__fds));
+    }
+
+  return __poll_alias (__fds, __nfds, __timeout);
+}
+
+
+#ifdef __USE_GNU
+extern int __REDIRECT (__ppoll_alias, (struct pollfd *__fds, nfds_t __nfds,
+                                      const struct timespec *__timeout,
+                                      const __sigset_t *__ss), ppoll);
+extern int __ppoll_chk (struct pollfd *__fds, nfds_t __nfds,
+                       const struct timespec *__timeout,
+                       const __sigset_t *__ss, __SIZE_TYPE__ __fdslen);
+extern int __REDIRECT (__ppoll_chk_warn, (struct pollfd *__fds, nfds_t __nfds,
+                                         const struct timespec *__timeout,
+                                         const __sigset_t *__ss,
+                                         __SIZE_TYPE__ __fdslen),
+                      __ppoll_chk)
+  __warnattr ("ppoll called with fds buffer too small file nfds entries");
+
+__fortify_function int
+ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout,
+       const __sigset_t *__ss)
+{
+  if (__bos (__fds) != (__SIZE_TYPE__) -1)
+    {
+      if (! __builtin_constant_p (__nfds))
+       return __ppoll_chk (__fds, __nfds, __timeout, __ss, __bos (__fds));
+      else if (__bos (__fds) / sizeof (*__fds) < __nfds)
+       return __ppoll_chk_warn (__fds, __nfds, __timeout, __ss,
+                                __bos (__fds));
+    }
+
+  return __ppoll_alias (__fds, __nfds, __timeout, __ss);
+}
+#endif
+
+__END_DECLS
diff --git a/lib/libdss-include/include/bits/posix1_lim.h b/lib/libdss-include/include/bits/posix1_lim.h
new file mode 100644 (file)
index 0000000..b0a37bd
--- /dev/null
@@ -0,0 +1,175 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.9.2 Minimum Values    Added to <limits.h>
+ *
+ *     Never include this file directly; use <limits.h> instead.
+ */
+
+#ifndef        _BITS_POSIX1_LIM_H
+#define        _BITS_POSIX1_LIM_H      1
+
+
+/* These are the standard-mandated minimum values.  */
+
+/* Minimum number of operations in one list I/O call.  */
+#define _POSIX_AIO_LISTIO_MAX  2
+
+/* Minimal number of outstanding asynchronous I/O operations.  */
+#define _POSIX_AIO_MAX         1
+
+/* Maximum length of arguments to `execve', including environment.  */
+#define        _POSIX_ARG_MAX          4096
+
+/* Maximum simultaneous processes per real user ID.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_CHILD_MAX      25
+#else
+# define _POSIX_CHILD_MAX      6
+#endif
+
+/* Minimal number of timer expiration overruns.  */
+#define _POSIX_DELAYTIMER_MAX  32
+
+/* Maximum length of a host name (not including the terminating null)
+   as returned from the GETHOSTNAME function.  */
+#define _POSIX_HOST_NAME_MAX   255
+
+/* Maximum link count of a file.  */
+#define        _POSIX_LINK_MAX         8
+
+/* Maximum length of login name.  */
+#define        _POSIX_LOGIN_NAME_MAX   9
+
+/* Number of bytes in a terminal canonical input queue.  */
+#define        _POSIX_MAX_CANON        255
+
+/* Number of bytes for which space will be
+   available in a terminal input queue.  */
+#define        _POSIX_MAX_INPUT        255
+
+/* Maximum number of message queues open for a process.  */
+#define _POSIX_MQ_OPEN_MAX     8
+
+/* Maximum number of supported message priorities.  */
+#define _POSIX_MQ_PRIO_MAX     32
+
+/* Number of bytes in a filename.  */
+#define        _POSIX_NAME_MAX         14
+
+/* Number of simultaneous supplementary group IDs per process.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_NGROUPS_MAX    8
+#else
+# define _POSIX_NGROUPS_MAX    0
+#endif
+
+/* Number of files one process can have open at once.  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_OPEN_MAX       20
+#else
+# define _POSIX_OPEN_MAX       16
+#endif
+
+#if !defined __USE_XOPEN2K || defined __USE_GNU
+/* Number of descriptors that a process may examine with `pselect' or
+   `select'.  */
+# define _POSIX_FD_SETSIZE     _POSIX_OPEN_MAX
+#endif
+
+/* Number of bytes in a pathname.  */
+#define        _POSIX_PATH_MAX         256
+
+/* Number of bytes than can be written atomically to a pipe.  */
+#define        _POSIX_PIPE_BUF         512
+
+/* The number of repeated occurrences of a BRE permitted by the
+   REGEXEC and REGCOMP functions when using the interval notation.  */
+#define _POSIX_RE_DUP_MAX      255
+
+/* Minimal number of realtime signals reserved for the application.  */
+#define _POSIX_RTSIG_MAX       8
+
+/* Number of semaphores a process can have.  */
+#define _POSIX_SEM_NSEMS_MAX   256
+
+/* Maximal value of a semaphore.  */
+#define _POSIX_SEM_VALUE_MAX   32767
+
+/* Number of pending realtime signals.  */
+#define _POSIX_SIGQUEUE_MAX    32
+
+/* Largest value of a `ssize_t'.  */
+#define        _POSIX_SSIZE_MAX        32767
+
+/* Number of streams a process can have open at once.  */
+#define        _POSIX_STREAM_MAX       8
+
+/* The number of bytes in a symbolic link.  */
+#define _POSIX_SYMLINK_MAX     255
+
+/* The number of symbolic links that can be traversed in the
+   resolution of a pathname in the absence of a loop.  */
+#define _POSIX_SYMLOOP_MAX     8
+
+/* Number of timer for a process.  */
+#define _POSIX_TIMER_MAX       32
+
+/* Maximum number of characters in a tty name.  */
+#define        _POSIX_TTY_NAME_MAX     9
+
+/* Maximum length of a timezone name (element of `tzname').  */
+#ifdef __USE_XOPEN2K
+# define _POSIX_TZNAME_MAX     6
+#else
+# define _POSIX_TZNAME_MAX     3
+#endif
+
+#if !defined __USE_XOPEN2K || defined __USE_GNU
+/* Maximum number of connections that can be queued on a socket.  */
+# define _POSIX_QLIMIT         1
+
+/* Maximum number of bytes that can be buffered on a socket for send
+   or receive.  */
+# define _POSIX_HIWAT          _POSIX_PIPE_BUF
+
+/* Maximum number of elements in an `iovec' array.  */
+# define _POSIX_UIO_MAXIOV     16
+#endif
+
+/* Maximum clock resolution in nanoseconds.  */
+#define _POSIX_CLOCKRES_MIN    20000000
+
+
+/* Get the implementation-specific values for the above.  */
+#include <bits/local_lim.h>
+
+
+#ifndef        SSIZE_MAX
+# define SSIZE_MAX     LONG_MAX
+#endif
+
+
+/* This value is a guaranteed minimum maximum.
+   The current maximum can be got from `sysconf'.  */
+
+#ifndef        NGROUPS_MAX
+# define NGROUPS_MAX   8
+#endif
+
+#endif /* bits/posix1_lim.h  */
diff --git a/lib/libdss-include/include/bits/posix2_lim.h b/lib/libdss-include/include/bits/posix2_lim.h
new file mode 100644 (file)
index 0000000..819af36
--- /dev/null
@@ -0,0 +1,90 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; include <limits.h> instead.
+ */
+
+#ifndef        _BITS_POSIX2_LIM_H
+#define        _BITS_POSIX2_LIM_H      1
+
+
+/* The maximum `ibase' and `obase' values allowed by the `bc' utility.  */
+#define        _POSIX2_BC_BASE_MAX             99
+
+/* The maximum number of elements allowed in an array by the `bc' utility.  */
+#define        _POSIX2_BC_DIM_MAX              2048
+
+/* The maximum `scale' value allowed by the `bc' utility.  */
+#define        _POSIX2_BC_SCALE_MAX            99
+
+/* The maximum length of a string constant accepted by the `bc' utility.  */
+#define        _POSIX2_BC_STRING_MAX           1000
+
+/* The maximum number of weights that can be assigned to an entry of
+   the LC_COLLATE `order' keyword in the locale definition file.  */
+#define        _POSIX2_COLL_WEIGHTS_MAX        2
+
+/* The maximum number of expressions that can be nested
+   within parentheses by the `expr' utility.  */
+#define        _POSIX2_EXPR_NEST_MAX           32
+
+/* The maximum length, in bytes, of an input line.  */
+#define        _POSIX2_LINE_MAX                2048
+
+/* The maximum number of repeated occurrences of a regular expression
+   permitted when using the interval notation `\{M,N\}'.  */
+#define        _POSIX2_RE_DUP_MAX              255
+
+/* The maximum number of bytes in a character class name.  We have no
+   fixed limit, 2048 is a high number.  */
+#define        _POSIX2_CHARCLASS_NAME_MAX      14
+
+
+/* These values are implementation-specific,
+   and may vary within the implementation.
+   Their precise values can be obtained from sysconf.  */
+
+#ifndef        BC_BASE_MAX
+#define        BC_BASE_MAX             _POSIX2_BC_BASE_MAX
+#endif
+#ifndef        BC_DIM_MAX
+#define        BC_DIM_MAX              _POSIX2_BC_DIM_MAX
+#endif
+#ifndef        BC_SCALE_MAX
+#define        BC_SCALE_MAX            _POSIX2_BC_SCALE_MAX
+#endif
+#ifndef        BC_STRING_MAX
+#define        BC_STRING_MAX           _POSIX2_BC_STRING_MAX
+#endif
+#ifndef        COLL_WEIGHTS_MAX
+#define        COLL_WEIGHTS_MAX        255
+#endif
+#ifndef        EXPR_NEST_MAX
+#define        EXPR_NEST_MAX           _POSIX2_EXPR_NEST_MAX
+#endif
+#ifndef        LINE_MAX
+#define        LINE_MAX                _POSIX2_LINE_MAX
+#endif
+#ifndef        CHARCLASS_NAME_MAX
+#define        CHARCLASS_NAME_MAX      2048
+#endif
+
+/* This value is defined like this in regex.h.  */
+#define        RE_DUP_MAX (0x7fff)
+
+#endif /* bits/posix2_lim.h */
diff --git a/lib/libdss-include/include/bits/posix_opt.h b/lib/libdss-include/include/bits/posix_opt.h
new file mode 100644 (file)
index 0000000..5fb31b1
--- /dev/null
@@ -0,0 +1,191 @@
+/* Define POSIX options for Linux.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _BITS_POSIX_OPT_H
+#define        _BITS_POSIX_OPT_H       1
+
+/* Job control is supported.  */
+#define        _POSIX_JOB_CONTROL      1
+
+/* Processes have a saved set-user-ID and a saved set-group-ID.  */
+#define        _POSIX_SAVED_IDS        1
+
+/* Priority scheduling is supported.  */
+#define        _POSIX_PRIORITY_SCHEDULING      200809L
+
+/* Synchronizing file data is supported.  */
+#define        _POSIX_SYNCHRONIZED_IO  200809L
+
+/* The fsync function is present.  */
+#define        _POSIX_FSYNC    200809L
+
+/* Mapping of files to memory is supported.  */
+#define        _POSIX_MAPPED_FILES     200809L
+
+/* Locking of all memory is supported.  */
+#define        _POSIX_MEMLOCK  200809L
+
+/* Locking of ranges of memory is supported.  */
+#define        _POSIX_MEMLOCK_RANGE    200809L
+
+/* Setting of memory protections is supported.  */
+#define        _POSIX_MEMORY_PROTECTION        200809L
+
+/* Some filesystems allow all users to change file ownership.  */
+#define        _POSIX_CHOWN_RESTRICTED 0
+
+/* `c_cc' member of 'struct termios' structure can be disabled by
+   using the value _POSIX_VDISABLE.  */
+#define        _POSIX_VDISABLE '\0'
+
+/* Filenames are not silently truncated.  */
+#define        _POSIX_NO_TRUNC 1
+
+/* X/Open realtime support is available.  */
+#define _XOPEN_REALTIME        1
+
+/* X/Open thread realtime support is available.  */
+#define _XOPEN_REALTIME_THREADS        1
+
+/* XPG4.2 shared memory is supported.  */
+#define        _XOPEN_SHM      1
+
+/* Tell we have POSIX threads.  */
+#define _POSIX_THREADS 200809L
+
+/* We have the reentrant functions described in POSIX.  */
+#define _POSIX_REENTRANT_FUNCTIONS      1
+#define _POSIX_THREAD_SAFE_FUNCTIONS   200809L
+
+/* We provide priority scheduling for threads.  */
+#define _POSIX_THREAD_PRIORITY_SCHEDULING      200809L
+
+/* We support user-defined stack sizes.  */
+#define _POSIX_THREAD_ATTR_STACKSIZE   200809L
+
+/* We support user-defined stacks.  */
+#define _POSIX_THREAD_ATTR_STACKADDR   200809L
+
+/* We support priority inheritence.  */
+#define _POSIX_THREAD_PRIO_INHERIT     200809L
+
+/* We support priority protection, though only for non-robust
+   mutexes.  */
+#define _POSIX_THREAD_PRIO_PROTECT     200809L
+
+#ifdef __USE_XOPEN2K8
+/* We support priority inheritence for robust mutexes.  */
+# define _POSIX_THREAD_ROBUST_PRIO_INHERIT     200809L
+
+/* We do not support priority protection for robust mutexes.  */
+# define _POSIX_THREAD_ROBUST_PRIO_PROTECT     -1
+#endif
+
+/* We support POSIX.1b semaphores.  */
+#define _POSIX_SEMAPHORES      200809L
+
+/* Real-time signals are supported.  */
+#define _POSIX_REALTIME_SIGNALS        200809L
+
+/* We support asynchronous I/O.  */
+#define _POSIX_ASYNCHRONOUS_IO 200809L
+#define _POSIX_ASYNC_IO                1
+/* Alternative name for Unix98.  */
+#define _LFS_ASYNCHRONOUS_IO   1
+/* Support for prioritization is also available.  */
+#define _POSIX_PRIORITIZED_IO  200809L
+
+/* The LFS support in asynchronous I/O is also available.  */
+#define _LFS64_ASYNCHRONOUS_IO 1
+
+/* The rest of the LFS is also available.  */
+#define _LFS_LARGEFILE         1
+#define _LFS64_LARGEFILE       1
+#define _LFS64_STDIO           1
+
+/* POSIX shared memory objects are implemented.  */
+#define _POSIX_SHARED_MEMORY_OBJECTS   200809L
+
+/* CPU-time clocks support needs to be checked at runtime.  */
+#define _POSIX_CPUTIME 0
+
+/* Clock support in threads must be also checked at runtime.  */
+#define _POSIX_THREAD_CPUTIME  0
+
+/* GNU libc provides regular expression handling.  */
+#define _POSIX_REGEXP  1
+
+/* Reader/Writer locks are available.  */
+#define _POSIX_READER_WRITER_LOCKS     200809L
+
+/* We have a POSIX shell.  */
+#define _POSIX_SHELL   1
+
+/* We support the Timeouts option.  */
+#define _POSIX_TIMEOUTS        200809L
+
+/* We support spinlocks.  */
+#define _POSIX_SPIN_LOCKS      200809L
+
+/* The `spawn' function family is supported.  */
+#define _POSIX_SPAWN   200809L
+
+/* We have POSIX timers.  */
+#define _POSIX_TIMERS  200809L
+
+/* The barrier functions are available.  */
+#define _POSIX_BARRIERS        200809L
+
+/* POSIX message queues are available.  */
+#define        _POSIX_MESSAGE_PASSING  200809L
+
+/* Thread process-shared synchronization is supported.  */
+#define _POSIX_THREAD_PROCESS_SHARED   200809L
+
+/* The monotonic clock might be available.  */
+#define _POSIX_MONOTONIC_CLOCK 0
+
+/* The clock selection interfaces are available.  */
+#define _POSIX_CLOCK_SELECTION 200809L
+
+/* Advisory information interfaces are available.  */
+#define _POSIX_ADVISORY_INFO   200809L
+
+/* IPv6 support is available.  */
+#define _POSIX_IPV6    200809L
+
+/* Raw socket support is available.  */
+#define _POSIX_RAW_SOCKETS     200809L
+
+/* We have at least one terminal.  */
+#define _POSIX2_CHAR_TERM      200809L
+
+/* Neither process nor thread sporadic server interfaces is available.  */
+#define _POSIX_SPORADIC_SERVER -1
+#define _POSIX_THREAD_SPORADIC_SERVER  -1
+
+/* trace.h is not available.  */
+#define _POSIX_TRACE   -1
+#define _POSIX_TRACE_EVENT_FILTER      -1
+#define _POSIX_TRACE_INHERIT   -1
+#define _POSIX_TRACE_LOG       -1
+
+/* Typed memory objects are not available.  */
+#define _POSIX_TYPED_MEMORY_OBJECTS    -1
+
+#endif /* bits/posix_opt.h */
diff --git a/lib/libdss-include/include/bits/printf-ldbl.h b/lib/libdss-include/include/bits/printf-ldbl.h
new file mode 100644 (file)
index 0000000..aaa0921
--- /dev/null
@@ -0,0 +1,23 @@
+/* -mlong-double-64 compatibility mode for <printf.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_H
+# error "Never include <bits/printf-ldbl.h> directly; use <printf.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (printf_size)
diff --git a/lib/libdss-include/include/bits/pthreadtypes.h b/lib/libdss-include/include/bits/pthreadtypes.h
new file mode 100644 (file)
index 0000000..13984a7
--- /dev/null
@@ -0,0 +1,174 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_PTHREADTYPES_H
+#define _BITS_PTHREADTYPES_H   1
+
+#include <endian.h>
+
+#define __SIZEOF_PTHREAD_ATTR_T        64
+#define __SIZEOF_PTHREAD_MUTEX_T       48
+#define __SIZEOF_PTHREAD_MUTEXATTR_T    8
+#define __SIZEOF_PTHREAD_COND_T        48
+#define __SIZEOF_PTHREAD_COND_COMPAT_T 48
+#define __SIZEOF_PTHREAD_CONDATTR_T     8
+#define __SIZEOF_PTHREAD_RWLOCK_T      56
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T   8
+#define __SIZEOF_PTHREAD_BARRIER_T     32
+#define __SIZEOF_PTHREAD_BARRIERATTR_T  8
+
+
+/* Thread identifiers.  The structure of the attribute type is not
+   exposed on purpose.  */
+typedef unsigned long int pthread_t;
+
+
+union pthread_attr_t
+{
+  char __size[__SIZEOF_PTHREAD_ATTR_T];
+  long int __align;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t1
+#endif
+
+typedef struct __pthread_internal_list
+{
+  struct __pthread_internal_list *__prev;
+  struct __pthread_internal_list *__next;
+} __pthread_list_t;
+
+
+/* Data structures for mutex handling.  The structure of the attribute
+   type is not exposed on purpose.  */
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    unsigned int __nusers;
+    int __kind;
+    int __spins;
+    __pthread_list_t __list;
+#define __PTHREAD_MUTEX_HAVE_PREV      1
+  } __data;
+  char __size[__SIZEOF_PTHREAD_MUTEX_T];
+  long int __align;
+} pthread_mutex_t;
+
+/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.  */
+#define __PTHREAD_SPINS 0
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
+  long int __align;
+} pthread_mutexattr_t;
+
+
+/* Data structure for conditional variable handling.  The structure of
+   the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_COND_T];
+  long int __align;
+} pthread_cond_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_CONDATTR_T];
+  int __align;
+} pthread_condattr_t;
+
+
+/* Keys for thread-specific data */
+typedef unsigned int pthread_key_t;
+
+
+/* Once-only execution */
+typedef int pthread_once_t;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Data structure for read-write lock variable handling.  The
+   structure of the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+    int __writer;
+    int __shared;
+    unsigned long int __pad1;
+    unsigned long int __pad2;
+    unsigned int __flags;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_RWLOCK_T];
+  long int __align;
+} pthread_rwlock_t;
+
+#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
+  long int __align;
+} pthread_rwlockattr_t;
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* POSIX spinlock data type.  */
+typedef volatile int pthread_spinlock_t;
+
+
+/* POSIX barriers data type.  The structure of the type is
+   deliberately not exposed.  */
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIER_T];
+  long int __align;
+} pthread_barrier_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
+  int __align;
+} pthread_barrierattr_t;
+#endif
+
+#endif /* bits/pthreadtypes.h */
diff --git a/lib/libdss-include/include/bits/resource.h b/lib/libdss-include/include/bits/resource.h
new file mode 100644 (file)
index 0000000..8af0e0e
--- /dev/null
@@ -0,0 +1,328 @@
+/* Bit values & structures for resource limits.  Linux version.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_RESOURCE_H
+# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Transmute defines to enumerations.  The macro re-definitions are
+   necessary because some programs want to test for operating system
+   features with #ifdef RUSAGE_SELF.  In ISO C the reflexive
+   definition is a no-op.  */
+
+/* Kinds of resource limit.  */
+enum __rlimit_resource
+{
+  /* Per-process CPU limit, in seconds.  */
+  RLIMIT_CPU = 0,
+#define RLIMIT_CPU RLIMIT_CPU
+
+  /* Largest file that can be created, in bytes.  */
+  RLIMIT_FSIZE = 1,
+#define        RLIMIT_FSIZE RLIMIT_FSIZE
+
+  /* Maximum size of data segment, in bytes.  */
+  RLIMIT_DATA = 2,
+#define        RLIMIT_DATA RLIMIT_DATA
+
+  /* Maximum size of stack segment, in bytes.  */
+  RLIMIT_STACK = 3,
+#define        RLIMIT_STACK RLIMIT_STACK
+
+  /* Largest core file that can be created, in bytes.  */
+  RLIMIT_CORE = 4,
+#define        RLIMIT_CORE RLIMIT_CORE
+
+  /* Largest resident set size, in bytes.
+     This affects swapping; processes that are exceeding their
+     resident set size will be more likely to have physical memory
+     taken from them.  */
+  __RLIMIT_RSS = 5,
+#define        RLIMIT_RSS __RLIMIT_RSS
+
+  /* Number of open files.  */
+  RLIMIT_NOFILE = 7,
+  __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same.  */
+#define RLIMIT_NOFILE RLIMIT_NOFILE
+#define RLIMIT_OFILE __RLIMIT_OFILE
+
+  /* Address space limit.  */
+  RLIMIT_AS = 9,
+#define RLIMIT_AS RLIMIT_AS
+
+  /* Number of processes.  */
+  __RLIMIT_NPROC = 6,
+#define RLIMIT_NPROC __RLIMIT_NPROC
+
+  /* Locked-in-memory address space.  */
+  __RLIMIT_MEMLOCK = 8,
+#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK
+
+  /* Maximum number of file locks.  */
+  __RLIMIT_LOCKS = 10,
+#define RLIMIT_LOCKS __RLIMIT_LOCKS
+
+  /* Maximum number of pending signals.  */
+  __RLIMIT_SIGPENDING = 11,
+#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING
+
+  /* Maximum bytes in POSIX message queues.  */
+  __RLIMIT_MSGQUEUE = 12,
+#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE
+
+  /* Maximum nice priority allowed to raise to.
+     Nice levels 19 .. -20 correspond to 0 .. 39
+     values of this resource limit.  */
+  __RLIMIT_NICE = 13,
+#define RLIMIT_NICE __RLIMIT_NICE
+
+  /* Maximum realtime priority allowed for non-priviledged
+     processes.  */
+  __RLIMIT_RTPRIO = 14,
+#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
+
+  /* Maximum CPU time in µs that a process scheduled under a real-time
+     scheduling policy may consume without making a blocking system
+     call before being forcibly descheduled.  */
+  __RLIMIT_RTTIME = 15,
+#define RLIMIT_RTTIME __RLIMIT_RTTIME
+
+  __RLIMIT_NLIMITS = 16,
+  __RLIM_NLIMITS = __RLIMIT_NLIMITS
+#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
+#define RLIM_NLIMITS __RLIM_NLIMITS
+};
+
+/* Value to indicate that there is no limit.  */
+#ifndef __USE_FILE_OFFSET64
+# define RLIM_INFINITY ((__rlim_t) -1)
+#else
+# define RLIM_INFINITY 0xffffffffffffffffuLL
+#endif
+
+#ifdef __USE_LARGEFILE64
+# define RLIM64_INFINITY 0xffffffffffffffffuLL
+#endif
+
+/* We can represent all limits.  */
+#define RLIM_SAVED_MAX RLIM_INFINITY
+#define RLIM_SAVED_CUR RLIM_INFINITY
+
+
+/* Type for resource quantity measurement.  */
+#ifndef __USE_FILE_OFFSET64
+typedef __rlim_t rlim_t;
+#else
+typedef __rlim64_t rlim_t;
+#endif
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
+struct rlimit
+  {
+    /* The current (soft) limit.  */
+    rlim_t rlim_cur;
+    /* The hard limit.  */
+    rlim_t rlim_max;
+  };
+
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.  */
+    rlim64_t rlim_max;
+ };
+#endif
+
+/* Whose usage statistics do you want?  */
+enum __rusage_who
+{
+  /* The calling process.  */
+  RUSAGE_SELF = 0,
+#define RUSAGE_SELF RUSAGE_SELF
+
+  /* All of its terminated child processes.  */
+  RUSAGE_CHILDREN = -1
+#define RUSAGE_CHILDREN RUSAGE_CHILDREN
+
+#ifdef __USE_GNU
+  ,
+  /* The calling thread.  */
+  RUSAGE_THREAD = 1
+# define RUSAGE_THREAD RUSAGE_THREAD
+  /* Name for the same functionality on Solaris.  */
+# define RUSAGE_LWP RUSAGE_THREAD
+#endif
+};
+
+#define __need_timeval
+#include <bits/time.h>         /* For `struct timeval'.  */
+
+/* Structure which says how much of each resource has been used.  */
+
+/* The purpose of all the unions is to have the kernel-compatible layout
+   while keeping the API type as 'long int', and among machines where
+   __syscall_slong_t is not 'long int', this only does the right thing
+   for little-endian ones, like x32.  */
+struct rusage
+  {
+    /* Total amount of user time used.  */
+    struct timeval ru_utime;
+    /* Total amount of system time used.  */
+    struct timeval ru_stime;
+    /* Maximum resident set size (in kilobytes).  */
+    __extension__ union
+      {
+       long int ru_maxrss;
+       __syscall_slong_t __ru_maxrss_word;
+      };
+    /* Amount of sharing of text segment memory
+       with other processes (kilobyte-seconds).  */
+    /* Maximum resident set size (in kilobytes).  */
+    __extension__ union
+      {
+       long int ru_ixrss;
+       __syscall_slong_t __ru_ixrss_word;
+      };
+    /* Amount of data segment memory used (kilobyte-seconds).  */
+    __extension__ union
+      {
+       long int ru_idrss;
+       __syscall_slong_t __ru_idrss_word;
+      };
+    /* Amount of stack memory used (kilobyte-seconds).  */
+    __extension__ union
+      {
+       long int ru_isrss;
+        __syscall_slong_t __ru_isrss_word;
+      };
+    /* Number of soft page faults (i.e. those serviced by reclaiming
+       a page from the list of pages awaiting reallocation.  */
+    __extension__ union
+      {
+       long int ru_minflt;
+       __syscall_slong_t __ru_minflt_word;
+      };
+    /* Number of hard page faults (i.e. those that required I/O).  */
+    __extension__ union
+      {
+       long int ru_majflt;
+       __syscall_slong_t __ru_majflt_word;
+      };
+    /* Number of times a process was swapped out of physical memory.  */
+    __extension__ union
+      {
+       long int ru_nswap;
+       __syscall_slong_t __ru_nswap_word;
+      };
+    /* Number of input operations via the file system.  Note: This
+       and `ru_oublock' do not include operations with the cache.  */
+    __extension__ union
+      {
+       long int ru_inblock;
+       __syscall_slong_t __ru_inblock_word;
+      };
+    /* Number of output operations via the file system.  */
+    __extension__ union
+      {
+       long int ru_oublock;
+       __syscall_slong_t __ru_oublock_word;
+      };
+    /* Number of IPC messages sent.  */
+    __extension__ union
+      {
+       long int ru_msgsnd;
+       __syscall_slong_t __ru_msgsnd_word;
+      };
+    /* Number of IPC messages received.  */
+    __extension__ union
+      {
+       long int ru_msgrcv;
+       __syscall_slong_t __ru_msgrcv_word;
+      };
+    /* Number of signals delivered.  */
+    __extension__ union
+      {
+       long int ru_nsignals;
+       __syscall_slong_t __ru_nsignals_word;
+      };
+    /* Number of voluntary context switches, i.e. because the process
+       gave up the process before it had to (usually to wait for some
+       resource to be available).  */
+    __extension__ union
+      {
+       long int ru_nvcsw;
+       __syscall_slong_t __ru_nvcsw_word;
+      };
+    /* Number of involuntary context switches, i.e. a higher priority process
+       became runnable or the current process used up its time slice.  */
+    __extension__ union
+      {
+       long int ru_nivcsw;
+       __syscall_slong_t __ru_nivcsw_word;
+      };
+  };
+
+/* Priority limits.  */
+#define PRIO_MIN       -20     /* Minimum priority a process can have.  */
+#define PRIO_MAX       20      /* Maximum priority a process can have.  */
+
+/* The type of the WHICH argument to `getpriority' and `setpriority',
+   indicating what flavor of entity the WHO argument specifies.  */
+enum __priority_which
+{
+  PRIO_PROCESS = 0,            /* WHO is a process ID.  */
+#define PRIO_PROCESS PRIO_PROCESS
+  PRIO_PGRP = 1,               /* WHO is a process group ID.  */
+#define PRIO_PGRP PRIO_PGRP
+  PRIO_USER = 2                        /* WHO is a user ID.  */
+#define PRIO_USER PRIO_USER
+};
+
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Modify and return resource limits of a process atomically.  */
+# ifndef __USE_FILE_OFFSET64
+extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
+                   const struct rlimit *__new_limit,
+                   struct rlimit *__old_limit) __THROW;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (prlimit, (__pid_t __pid,
+                                    enum __rlimit_resource __resource,
+                                    const struct rlimit *__new_limit,
+                                    struct rlimit *__old_limit), prlimit64);
+#  else
+#   define prlimit prlimit64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource,
+                     const struct rlimit64 *__new_limit,
+                     struct rlimit64 *__old_limit) __THROW;
+# endif
+#endif
+
+__END_DECLS
diff --git a/lib/libdss-include/include/bits/sched.h b/lib/libdss-include/include/bits/sched.h
new file mode 100644 (file)
index 0000000..4f5305a
--- /dev/null
@@ -0,0 +1,210 @@
+/* Definitions of constants and data structure for POSIX 1003.1b-1993
+   scheduling interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __need_schedparam
+
+#ifndef _SCHED_H
+# error "Never include <bits/sched.h> directly; use <sched.h> instead."
+#endif
+
+
+/* Scheduling algorithms.  */
+#define SCHED_OTHER            0
+#define SCHED_FIFO             1
+#define SCHED_RR               2
+#ifdef __USE_GNU
+# define SCHED_BATCH           3
+# define SCHED_IDLE            5
+
+# define SCHED_RESET_ON_FORK   0x40000000
+#endif
+
+#ifdef __USE_GNU
+/* Cloning flags.  */
+# define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
+# define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
+# define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
+# define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
+# define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
+# define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
+# define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
+                                    wake it up on mm_release.  */
+# define CLONE_PARENT  0x00008000 /* Set if we want to have the same
+                                    parent as the cloner.  */
+# define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
+# define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
+# define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
+# define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
+# define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
+                                          before MM copy.  */
+# define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
+                                           location to clear.  */
+# define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
+# define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
+                                     force CLONE_PTRACE on this clone.  */
+# define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
+                                         the child.  */
+# define CLONE_NEWUTS  0x04000000      /* New utsname group.  */
+# define CLONE_NEWIPC  0x08000000      /* New ipcs.  */
+# define CLONE_NEWUSER 0x10000000      /* New user namespace.  */
+# define CLONE_NEWPID  0x20000000      /* New pid namespace.  */
+# define CLONE_NEWNET  0x40000000      /* New network namespace.  */
+# define CLONE_IO      0x80000000      /* Clone I/O context.  */
+#endif
+
+/* The official definition.  */
+struct sched_param
+  {
+    int __sched_priority;
+  };
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Clone current process.  */
+extern int clone (int (*__fn) (void *__arg), void *__child_stack,
+                 int __flags, void *__arg, ...) __THROW;
+
+/* Unshare the specified resources.  */
+extern int unshare (int __flags) __THROW;
+
+/* Get index of currently used CPU.  */
+extern int sched_getcpu (void) __THROW;
+
+/* Switch process to namespace of type NSTYPE indicated by FD.  */
+extern int setns (int __fd, int __nstype) __THROW;
+#endif
+
+
+__END_DECLS
+
+#endif /* need schedparam */
+
+#if !defined __defined_schedparam \
+    && (defined __need_schedparam || defined _SCHED_H)
+# define __defined_schedparam  1
+/* Data structure to describe a process' schedulability.  */
+struct __sched_param
+  {
+    int __sched_priority;
+  };
+# undef __need_schedparam
+#endif
+
+
+#if defined _SCHED_H && !defined __cpu_set_t_defined
+# define __cpu_set_t_defined
+/* Size definition for CPU sets.  */
+# define __CPU_SETSIZE 1024
+# define __NCPUBITS    (8 * sizeof (__cpu_mask))
+
+/* Type for array elements in 'cpu_set_t'.  */
+typedef __CPU_MASK_TYPE __cpu_mask;
+
+/* Basic access functions.  */
+# define __CPUELT(cpu) ((cpu) / __NCPUBITS)
+# define __CPUMASK(cpu)        ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
+
+/* Data structure to describe CPU mask.  */
+typedef struct
+{
+  __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
+} cpu_set_t;
+
+/* Access functions for CPU masks.  */
+# if __GNUC_PREREQ (2, 91)
+#  define __CPU_ZERO_S(setsize, cpusetp) \
+  do __builtin_memset (cpusetp, '\0', setsize); while (0)
+# else
+#  define __CPU_ZERO_S(setsize, cpusetp) \
+  do {                                                                       \
+    size_t __i;                                                                      \
+    size_t __imax = (setsize) / sizeof (__cpu_mask);                         \
+    __cpu_mask *__bits = (cpusetp)->__bits;                                  \
+    for (__i = 0; __i < __imax; ++__i)                                       \
+      __bits[__i] = 0;                                                       \
+  } while (0)
+# endif
+# define __CPU_SET_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]                      \
+        |= __CPUMASK (__cpu))                                                \
+      : 0; }))
+# define __CPU_CLR_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]                      \
+        &= ~__CPUMASK (__cpu))                                               \
+      : 0; }))
+# define __CPU_ISSET_S(cpu, setsize, cpusetp) \
+  (__extension__                                                             \
+   ({ size_t __cpu = (cpu);                                                  \
+      __cpu / 8 < (setsize)                                                  \
+      ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]       \
+         & __CPUMASK (__cpu))) != 0                                          \
+      : 0; }))
+
+# define __CPU_COUNT_S(setsize, cpusetp) \
+  __sched_cpucount (setsize, cpusetp)
+
+# if __GNUC_PREREQ (2, 91)
+#  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
+# else
+#  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  (__extension__                                                             \
+   ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits;                         \
+      const __cpu_mask *__arr2 = (cpusetp2)->__bits;                         \
+      size_t __imax = (setsize) / sizeof (__cpu_mask);                       \
+      size_t __i;                                                            \
+      for (__i = 0; __i < __imax; ++__i)                                     \
+       if (__arr1[__i] != __arr2[__i])                                       \
+         break;                                                              \
+      __i == __imax; }))
+# endif
+
+# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
+  (__extension__                                                             \
+   ({ cpu_set_t *__dest = (destset);                                         \
+      const __cpu_mask *__arr1 = (srcset1)->__bits;                          \
+      const __cpu_mask *__arr2 = (srcset2)->__bits;                          \
+      size_t __imax = (setsize) / sizeof (__cpu_mask);                       \
+      size_t __i;                                                            \
+      for (__i = 0; __i < __imax; ++__i)                                     \
+       ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i];    \
+      __dest; }))
+
+# define __CPU_ALLOC_SIZE(count) \
+  ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))
+# define __CPU_ALLOC(count) __sched_cpualloc (count)
+# define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
+
+__BEGIN_DECLS
+
+extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
+  __THROW;
+extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur;
+extern void __sched_cpufree (cpu_set_t *__set) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/include/bits/select.h b/lib/libdss-include/include/bits/select.h
new file mode 100644 (file)
index 0000000..6a93c3d
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+#endif
+
+
+/* We don't use `memset' because this would require a prototype and
+   the array isn't too big.  */
+#define __FD_ZERO(s) \
+  do {                                                                       \
+    unsigned int __i;                                                        \
+    fd_set *__arr = (s);                                                     \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)         \
+      __FDS_BITS (__arr)[__i] = 0;                                           \
+  } while (0)
+#define __FD_SET(d, s) \
+  ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))
+#define __FD_CLR(d, s) \
+  ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))
+#define __FD_ISSET(d, s) \
+  ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
diff --git a/lib/libdss-include/include/bits/select2.h b/lib/libdss-include/include/bits/select2.h
new file mode 100644 (file)
index 0000000..56f2205
--- /dev/null
@@ -0,0 +1,35 @@
+/* Checking macros for select functions.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never include <bits/select2.h> directly; use <sys/select.h> instead."
+#endif
+
+/* Helper functions to issue warnings and errors when needed.  */
+extern long int __fdelt_chk (long int __d);
+extern long int __fdelt_warn (long int __d)
+  __warnattr ("bit outside of fd_set selected");
+#undef __FD_ELT
+#define        __FD_ELT(d) \
+  __extension__                                                                    \
+  ({ long int __d = (d);                                                   \
+     (__builtin_constant_p (__d)                                           \
+      ? (0 <= __d && __d < __FD_SETSIZE                                            \
+        ? (__d / __NFDBITS)                                                \
+        : __fdelt_warn (__d))                                              \
+      : __fdelt_chk (__d)); })
diff --git a/lib/libdss-include/include/bits/sem.h b/lib/libdss-include/include/bits/sem.h
new file mode 100644 (file)
index 0000000..c8437b7
--- /dev/null
@@ -0,0 +1,92 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+#include <bits/wordsize.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO       0x1000          /* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID         11              /* get sempid */
+#define GETVAL         12              /* get semval */
+#define GETALL         13              /* get all semval's */
+#define GETNCNT                14              /* get semncnt */
+#define GETZCNT                15              /* get semzcnt */
+#define SETVAL         16              /* set semval */
+#define SETALL         17              /* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;            /* operation permission struct */
+  __time_t sem_otime;                  /* last semop() time */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved1;
+#endif
+  __time_t sem_ctime;                  /* last time changed by semctl() */
+#if __WORDSIZE == 32
+  unsigned long int __glibc_reserved2;
+#endif
+  unsigned long int sem_nsems;         /* number of semaphores in set */
+  unsigned long int __glibc_reserved3;
+  unsigned long int __glibc_reserved4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;                          <= value for SETVAL
+     struct semid_ds *buf;             <= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;                <= array for GETALL & SETALL
+     struct seminfo *__buf;            <= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED   1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/lib/libdss-include/include/bits/semaphore.h b/lib/libdss-include/include/bits/semaphore.h
new file mode 100644 (file)
index 0000000..3cc5b37
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+
+#define __SIZEOF_SEM_T 32
+
+
+/* Value returned if `sem_open' failed.  */
+#define SEM_FAILED      ((sem_t *) 0)
+
+
+typedef union
+{
+  char __size[__SIZEOF_SEM_T];
+  long int __align;
+} sem_t;
diff --git a/lib/libdss-include/include/bits/setjmp.h b/lib/libdss-include/include/bits/setjmp.h
new file mode 100644 (file)
index 0000000..fff8616
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H 1
+
+#if !defined _SETJMP_H && !defined _PTHREAD_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+#ifndef _ASM
+/* Jump buffer contains:
+   x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15.  Other registers are not
+   saved.  */
+__extension__ typedef unsigned long long __jmp_buf [22];
+
+#endif
+#endif
diff --git a/lib/libdss-include/include/bits/setjmp2.h b/lib/libdss-include/include/bits/setjmp2.h
new file mode 100644 (file)
index 0000000..dbf3454
--- /dev/null
@@ -0,0 +1,40 @@
+/* Checking macros for setjmp functions.
+   Copyright (C) 2009-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SETJMP_H
+# error "Never include <bits/setjmp2.h> directly; use <setjmp.h> instead."
+#endif
+
+/* Variant of the longjmp functions which perform some sanity checking.  */
+#ifdef __REDIRECT_NTH
+extern void __REDIRECT_NTHNL (longjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+extern void __REDIRECT_NTHNL (_longjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+extern void __REDIRECT_NTHNL (siglongjmp,
+                             (struct __jmp_buf_tag __env[1], int __val),
+                             __longjmp_chk) __attribute__ ((__noreturn__));
+#else
+extern void __longjmp_chk (struct __jmp_buf_tag __env[1], int __val),
+     __THROWNL __attribute__ ((__noreturn__));
+# define longjmp __longjmp_chk
+# define _longjmp __longjmp_chk
+# define siglongjmp __longjmp_chk
+#endif
diff --git a/lib/libdss-include/include/bits/shm.h b/lib/libdss-include/include/bits/shm.h
new file mode 100644 (file)
index 0000000..81918c8
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
+#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY     010000          /* attach read-only else read-write */
+#define SHM_RND                020000          /* round attach address to SHMLBA */
+#define SHM_REMAP      040000          /* take-over region on attach */
+#define SHM_EXEC       0100000         /* execution access */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK       11              /* lock segment (root only) */
+#define SHM_UNLOCK     12              /* unlock segment (root only) */
+
+__BEGIN_DECLS
+
+/* Segment low boundary address multiple.  */
+#define SHMLBA         (__getpagesize ())
+extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a shared memory segment.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;          /* operation permission struct */
+    size_t shm_segsz;                  /* size of segment in bytes */
+    __time_t shm_atime;                        /* time of last shmat() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved1;
+#endif
+    __time_t shm_dtime;                        /* time of last shmdt() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved2;
+#endif
+    __time_t shm_ctime;                        /* time of last change by shmctl() */
+#if __WORDSIZE == 32
+    unsigned long int __glibc_reserved3;
+#endif
+    __pid_t shm_cpid;                  /* pid of creator */
+    __pid_t shm_lpid;                  /* pid of last shmop */
+    shmatt_t shm_nattch;               /* number of current attaches */
+    unsigned long int __glibc_reserved4;
+    unsigned long int __glibc_reserved5;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT      13
+# define SHM_INFO      14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST      01000   /* segment will be destroyed on last detach */
+# define SHM_LOCKED    02000   /* segment will not be swapped */
+# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
+# define SHM_NORESERVE 010000  /* don't check for reservations */
+
+struct shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __glibc_reserved1;
+    unsigned long int __glibc_reserved2;
+    unsigned long int __glibc_reserved3;
+    unsigned long int __glibc_reserved4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot; /* total allocated shm */
+    unsigned long int shm_rss; /* total resident shm */
+    unsigned long int shm_swp; /* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */
+
+__END_DECLS
diff --git a/lib/libdss-include/include/bits/sigaction.h b/lib/libdss-include/include/bits/sigaction.h
new file mode 100644 (file)
index 0000000..8c995fe
--- /dev/null
@@ -0,0 +1,78 @@
+/* The proper definitions for Linux's sigaction.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SIGNAL_H
+# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+#endif
+
+/* Structure describing the action to be taken when a signal arrives.  */
+struct sigaction
+  {
+    /* Signal handler.  */
+#ifdef __USE_POSIX199309
+    union
+      {
+       /* Used if SA_SIGINFO is not set.  */
+       __sighandler_t sa_handler;
+       /* Used if SA_SIGINFO is set.  */
+       void (*sa_sigaction) (int, siginfo_t *, void *);
+      }
+    __sigaction_handler;
+# define sa_handler    __sigaction_handler.sa_handler
+# define sa_sigaction  __sigaction_handler.sa_sigaction
+#else
+    __sighandler_t sa_handler;
+#endif
+
+    /* Additional set of signals to be blocked.  */
+    __sigset_t sa_mask;
+
+    /* Special flags.  */
+    int sa_flags;
+
+    /* Restore handler.  */
+    void (*sa_restorer) (void);
+  };
+
+/* Bits in `sa_flags'.  */
+#define        SA_NOCLDSTOP  1          /* Don't send SIGCHLD when children stop.  */
+#define SA_NOCLDWAIT  2                 /* Don't create zombie on child death.  */
+#define SA_SIGINFO    4                 /* Invoke signal-catching function with
+                                   three arguments instead of one.  */
+#if defined __USE_UNIX98 || defined __USE_MISC
+# define SA_ONSTACK   0x08000000 /* Use signal stack by using `sa_restorer'. */
+#endif
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
+# define SA_NODEFER   0x40000000 /* Don't automatically block the signal when
+                                   its handler is being executed.  */
+# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
+#endif
+#ifdef __USE_MISC
+# define SA_INTERRUPT 0x20000000 /* Historical no-op.  */
+
+/* Some aliases for the SA_ constants.  */
+# define SA_NOMASK    SA_NODEFER
+# define SA_ONESHOT   SA_RESETHAND
+# define SA_STACK     SA_ONSTACK
+#endif
+
+/* Values for the HOW argument to `sigprocmask'.  */
+#define        SIG_BLOCK     0          /* Block signals.  */
+#define        SIG_UNBLOCK   1          /* Unblock signals.  */
+#define        SIG_SETMASK   2          /* Set the set of blocked signals.  */
diff --git a/lib/libdss-include/include/bits/sigcontext.h b/lib/libdss-include/include/bits/sigcontext.h
new file mode 100644 (file)
index 0000000..46cacb7
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+#endif
+
+#ifndef sigcontext_struct
+/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
+   we need sigcontext.  */
+# define sigcontext_struct sigcontext
+
+# include <asm/sigcontext.h>
+
+/* The Linux kernel headers redefine NULL wrongly, so cleanup afterwards.  */
+# define __need_NULL
+# include <stddef.h>
+#endif
diff --git a/lib/libdss-include/include/bits/siginfo.h b/lib/libdss-include/include/bits/siginfo.h
new file mode 100644 (file)
index 0000000..b8f130b
--- /dev/null
@@ -0,0 +1,341 @@
+/* siginfo_t, sigevent and constants.  Linux version.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SIGNAL_H && !defined __need_siginfo_t \
+    && !defined __need_sigevent_t
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#include <bits/wordsize.h>
+
+#if (!defined __have_sigval_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t \
+        || defined __need_sigevent_t))
+# define __have_sigval_t       1
+
+/* Type for data associated with a signal.  */
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+#endif
+
+#if (!defined __have_siginfo_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t))
+# define __have_siginfo_t      1
+
+# define __SI_MAX_SIZE     128
+# if __WORDSIZE == 64
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+typedef struct
+  {
+    int si_signo;              /* Signal number.  */
+    int si_errno;              /* If non-zero, an errno value associated with
+                                  this signal, as defined in <errno.h>.  */
+    int si_code;               /* Signal code.  */
+
+    union
+      {
+       int _pad[__SI_PAD_SIZE];
+
+        /* kill().  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+         } _kill;
+
+       /* POSIX.1b timers.  */
+       struct
+         {
+           int si_tid;         /* Timer ID.  */
+           int si_overrun;     /* Overrun count.  */
+           sigval_t si_sigval; /* Signal value.  */
+         } _timer;
+
+       /* POSIX.1b signals.  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           sigval_t si_sigval; /* Signal value.  */
+         } _rt;
+
+       /* SIGCHLD.  */
+       struct
+         {
+           __pid_t si_pid;     /* Which child.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           int si_status;      /* Exit value or signal.  */
+           __clock_t si_utime;
+           __clock_t si_stime;
+         } _sigchld;
+
+       /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+       struct
+         {
+           void *si_addr;      /* Faulting insn/memory ref.  */
+           short int si_addr_lsb;      /* Valid LSB of the reported address.  */
+         } _sigfault;
+
+       /* SIGPOLL.  */
+       struct
+         {
+           long int si_band;   /* Band event for SIGPOLL.  */
+           int si_fd;
+         } _sigpoll;
+
+       /* SIGSYS.  */
+       struct
+         {
+           void *_call_addr;   /* Calling user insn.  */
+           int _syscall;       /* Triggering system call number.  */
+           unsigned int _arch; /* AUDIT_ARCH_* of syscall.  */
+         } _sigsys;
+      } _sifields;
+  } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names.  */
+# define si_pid                _sifields._kill.si_pid
+# define si_uid                _sifields._kill.si_uid
+# define si_timerid    _sifields._timer.si_tid
+# define si_overrun    _sifields._timer.si_overrun
+# define si_status     _sifields._sigchld.si_status
+# define si_utime      _sifields._sigchld.si_utime
+# define si_stime      _sifields._sigchld.si_stime
+# define si_value      _sifields._rt.si_sigval
+# define si_int                _sifields._rt.si_sigval.sival_int
+# define si_ptr                _sifields._rt.si_sigval.sival_ptr
+# define si_addr       _sifields._sigfault.si_addr
+# define si_addr_lsb   _sifields._sigfault.si_addr_lsb
+# define si_band       _sifields._sigpoll.si_band
+# define si_fd         _sifields._sigpoll.si_fd
+# define si_call_addr  _sifields._sigsys._call_addr
+# define si_syscall    _sifields._sigsys._syscall
+# define si_arch       _sifields._sigsys._arch
+
+
+/* Values for `si_code'.  Positive values are reserved for kernel-generated
+   signals.  */
+enum
+{
+  SI_ASYNCNL = -60,            /* Sent by asynch name lookup completion.  */
+# define SI_ASYNCNL    SI_ASYNCNL
+  SI_TKILL = -6,               /* Sent by tkill.  */
+# define SI_TKILL      SI_TKILL
+  SI_SIGIO,                    /* Sent by queued SIGIO. */
+# define SI_SIGIO      SI_SIGIO
+  SI_ASYNCIO,                  /* Sent by AIO completion.  */
+# define SI_ASYNCIO    SI_ASYNCIO
+  SI_MESGQ,                    /* Sent by real time mesq state change.  */
+# define SI_MESGQ      SI_MESGQ
+  SI_TIMER,                    /* Sent by timer expiration.  */
+# define SI_TIMER      SI_TIMER
+  SI_QUEUE,                    /* Sent by sigqueue.  */
+# define SI_QUEUE      SI_QUEUE
+  SI_USER,                     /* Sent by kill, sigsend.  */
+# define SI_USER       SI_USER
+  SI_KERNEL = 0x80             /* Send by kernel.  */
+#define SI_KERNEL      SI_KERNEL
+};
+
+
+# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* `si_code' values for SIGILL signal.  */
+enum
+{
+  ILL_ILLOPC = 1,              /* Illegal opcode.  */
+#  define ILL_ILLOPC   ILL_ILLOPC
+  ILL_ILLOPN,                  /* Illegal operand.  */
+#  define ILL_ILLOPN   ILL_ILLOPN
+  ILL_ILLADR,                  /* Illegal addressing mode.  */
+#  define ILL_ILLADR   ILL_ILLADR
+  ILL_ILLTRP,                  /* Illegal trap. */
+#  define ILL_ILLTRP   ILL_ILLTRP
+  ILL_PRVOPC,                  /* Privileged opcode.  */
+#  define ILL_PRVOPC   ILL_PRVOPC
+  ILL_PRVREG,                  /* Privileged register.  */
+#  define ILL_PRVREG   ILL_PRVREG
+  ILL_COPROC,                  /* Coprocessor error.  */
+#  define ILL_COPROC   ILL_COPROC
+  ILL_BADSTK                   /* Internal stack error.  */
+#  define ILL_BADSTK   ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal.  */
+enum
+{
+  FPE_INTDIV = 1,              /* Integer divide by zero.  */
+#  define FPE_INTDIV   FPE_INTDIV
+  FPE_INTOVF,                  /* Integer overflow.  */
+#  define FPE_INTOVF   FPE_INTOVF
+  FPE_FLTDIV,                  /* Floating point divide by zero.  */
+#  define FPE_FLTDIV   FPE_FLTDIV
+  FPE_FLTOVF,                  /* Floating point overflow.  */
+#  define FPE_FLTOVF   FPE_FLTOVF
+  FPE_FLTUND,                  /* Floating point underflow.  */
+#  define FPE_FLTUND   FPE_FLTUND
+  FPE_FLTRES,                  /* Floating point inexact result.  */
+#  define FPE_FLTRES   FPE_FLTRES
+  FPE_FLTINV,                  /* Floating point invalid operation.  */
+#  define FPE_FLTINV   FPE_FLTINV
+  FPE_FLTSUB                   /* Subscript out of range.  */
+#  define FPE_FLTSUB   FPE_FLTSUB
+};
+
+/* `si_code' values for SIGSEGV signal.  */
+enum
+{
+  SEGV_MAPERR = 1,             /* Address not mapped to object.  */
+#  define SEGV_MAPERR  SEGV_MAPERR
+  SEGV_ACCERR                  /* Invalid permissions for mapped object.  */
+#  define SEGV_ACCERR  SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal.  */
+enum
+{
+  BUS_ADRALN = 1,              /* Invalid address alignment.  */
+#  define BUS_ADRALN   BUS_ADRALN
+  BUS_ADRERR,                  /* Non-existant physical address.  */
+#  define BUS_ADRERR   BUS_ADRERR
+  BUS_OBJERR,                  /* Object specific hardware error.  */
+#  define BUS_OBJERR   BUS_OBJERR
+  BUS_MCEERR_AR,               /* Hardware memory error: action required.  */
+#  define BUS_MCEERR_AR        BUS_MCEERR_AR
+  BUS_MCEERR_AO                        /* Hardware memory error: action optional.  */
+#  define BUS_MCEERR_AO        BUS_MCEERR_AO
+};
+# endif
+
+# ifdef __USE_XOPEN_EXTENDED
+/* `si_code' values for SIGTRAP signal.  */
+enum
+{
+  TRAP_BRKPT = 1,              /* Process breakpoint.  */
+#  define TRAP_BRKPT   TRAP_BRKPT
+  TRAP_TRACE                   /* Process trace trap.  */
+#  define TRAP_TRACE   TRAP_TRACE
+};
+# endif
+
+# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* `si_code' values for SIGCHLD signal.  */
+enum
+{
+  CLD_EXITED = 1,              /* Child has exited.  */
+#  define CLD_EXITED   CLD_EXITED
+  CLD_KILLED,                  /* Child was killed.  */
+#  define CLD_KILLED   CLD_KILLED
+  CLD_DUMPED,                  /* Child terminated abnormally.  */
+#  define CLD_DUMPED   CLD_DUMPED
+  CLD_TRAPPED,                 /* Traced child has trapped.  */
+#  define CLD_TRAPPED  CLD_TRAPPED
+  CLD_STOPPED,                 /* Child has stopped.  */
+#  define CLD_STOPPED  CLD_STOPPED
+  CLD_CONTINUED                        /* Stopped child has continued.  */
+#  define CLD_CONTINUED        CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal.  */
+enum
+{
+  POLL_IN = 1,                 /* Data input available.  */
+#  define POLL_IN      POLL_IN
+  POLL_OUT,                    /* Output buffers available.  */
+#  define POLL_OUT     POLL_OUT
+  POLL_MSG,                    /* Input message available.   */
+#  define POLL_MSG     POLL_MSG
+  POLL_ERR,                    /* I/O error.  */
+#  define POLL_ERR     POLL_ERR
+  POLL_PRI,                    /* High priority input available.  */
+#  define POLL_PRI     POLL_PRI
+  POLL_HUP                     /* Device disconnected.  */
+#  define POLL_HUP     POLL_HUP
+};
+# endif
+
+# undef __need_siginfo_t
+#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
+
+
+#if (defined _SIGNAL_H || defined __need_sigevent_t) \
+    && !defined __have_sigevent_t
+# define __have_sigevent_t     1
+
+/* Structure to transport application-defined values with signals.  */
+# define __SIGEV_MAX_SIZE      64
+# if __WORDSIZE == 64
+#  define __SIGEV_PAD_SIZE     ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SIGEV_PAD_SIZE     ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+/* Forward declaration.  */
+# ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+#  define __have_pthread_attr_t        1
+# endif
+
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+
+    union
+      {
+       int _pad[__SIGEV_PAD_SIZE];
+
+       /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
+          thread to receive the signal.  */
+       __pid_t _tid;
+
+       struct
+         {
+           void (*_function) (sigval_t);       /* Function to start.  */
+           pthread_attr_t *_attribute;         /* Thread attributes.  */
+         } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+
+/* POSIX names to access some of the members.  */
+# define sigev_notify_function   _sigev_un._sigev_thread._function
+# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+
+/* `sigev_notify' values.  */
+enum
+{
+  SIGEV_SIGNAL = 0,            /* Notify via signal.  */
+# define SIGEV_SIGNAL  SIGEV_SIGNAL
+  SIGEV_NONE,                  /* Other notification: meaningless.  */
+# define SIGEV_NONE    SIGEV_NONE
+  SIGEV_THREAD,                        /* Deliver via thread creation.  */
+# define SIGEV_THREAD  SIGEV_THREAD
+
+  SIGEV_THREAD_ID = 4          /* Send signal to specific thread.  */
+#define SIGEV_THREAD_ID        SIGEV_THREAD_ID
+};
+
+#endif /* have _SIGNAL_H.  */
diff --git a/lib/libdss-include/include/bits/signalfd.h b/lib/libdss-include/include/bits/signalfd.h
new file mode 100644 (file)
index 0000000..bac90e5
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SIGNALFD_H
+# error "Never use <bits/signalfd.h> directly; include <sys/signalfd.h> instead."
+#endif
+
+/* Flags for signalfd.  */
+enum
+  {
+    SFD_CLOEXEC = 02000000,
+#define SFD_CLOEXEC SFD_CLOEXEC
+    SFD_NONBLOCK = 00004000
+#define SFD_NONBLOCK SFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/include/bits/signum.h b/lib/libdss-include/include/bits/signum.h
new file mode 100644 (file)
index 0000000..0e4eea1
--- /dev/null
@@ -0,0 +1,79 @@
+/* Signal number definitions.  Linux version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef _SIGNAL_H
+
+/* Fake signal functions.  */
+#define SIG_ERR        ((__sighandler_t) -1)           /* Error return.  */
+#define SIG_DFL        ((__sighandler_t) 0)            /* Default action.  */
+#define SIG_IGN        ((__sighandler_t) 1)            /* Ignore signal.  */
+
+#ifdef __USE_UNIX98
+# define SIG_HOLD      ((__sighandler_t) 2)    /* Add signal to hold mask.  */
+#endif
+
+
+/* Signals.  */
+#define        SIGHUP          1       /* Hangup (POSIX).  */
+#define        SIGINT          2       /* Interrupt (ANSI).  */
+#define        SIGQUIT         3       /* Quit (POSIX).  */
+#define        SIGILL          4       /* Illegal instruction (ANSI).  */
+#define        SIGTRAP         5       /* Trace trap (POSIX).  */
+#define        SIGABRT         6       /* Abort (ANSI).  */
+#define        SIGIOT          6       /* IOT trap (4.2 BSD).  */
+#define        SIGBUS          7       /* BUS error (4.2 BSD).  */
+#define        SIGFPE          8       /* Floating-point exception (ANSI).  */
+#define        SIGKILL         9       /* Kill, unblockable (POSIX).  */
+#define        SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
+#define        SIGSEGV         11      /* Segmentation violation (ANSI).  */
+#define        SIGUSR2         12      /* User-defined signal 2 (POSIX).  */
+#define        SIGPIPE         13      /* Broken pipe (POSIX).  */
+#define        SIGALRM         14      /* Alarm clock (POSIX).  */
+#define        SIGTERM         15      /* Termination (ANSI).  */
+#define        SIGSTKFLT       16      /* Stack fault.  */
+#define        SIGCLD          SIGCHLD /* Same as SIGCHLD (System V).  */
+#define        SIGCHLD         17      /* Child status has changed (POSIX).  */
+#define        SIGCONT         18      /* Continue (POSIX).  */
+#define        SIGSTOP         19      /* Stop, unblockable (POSIX).  */
+#define        SIGTSTP         20      /* Keyboard stop (POSIX).  */
+#define        SIGTTIN         21      /* Background read from tty (POSIX).  */
+#define        SIGTTOU         22      /* Background write to tty (POSIX).  */
+#define        SIGURG          23      /* Urgent condition on socket (4.2 BSD).  */
+#define        SIGXCPU         24      /* CPU limit exceeded (4.2 BSD).  */
+#define        SIGXFSZ         25      /* File size limit exceeded (4.2 BSD).  */
+#define        SIGVTALRM       26      /* Virtual alarm clock (4.2 BSD).  */
+#define        SIGPROF         27      /* Profiling alarm clock (4.2 BSD).  */
+#define        SIGWINCH        28      /* Window size change (4.3 BSD, Sun).  */
+#define        SIGPOLL         SIGIO   /* Pollable event occurred (System V).  */
+#define        SIGIO           29      /* I/O now possible (4.2 BSD).  */
+#define        SIGPWR          30      /* Power failure restart (System V).  */
+#define SIGSYS         31      /* Bad system call.  */
+#define SIGUNUSED      31
+
+#define        _NSIG           65      /* Biggest signal number + 1
+                                  (including real-time signals).  */
+
+#define SIGRTMIN        (__libc_current_sigrtmin ())
+#define SIGRTMAX        (__libc_current_sigrtmax ())
+
+/* These are the hard limits of the kernel.  These values should not be
+   used directly at user level.  */
+#define __SIGRTMIN     32
+#define __SIGRTMAX     (_NSIG - 1)
+
+#endif /* <signal.h> included.  */
diff --git a/lib/libdss-include/include/bits/sigset.h b/lib/libdss-include/include/bits/sigset.h
new file mode 100644 (file)
index 0000000..72de7b5
--- /dev/null
@@ -0,0 +1,124 @@
+/* __sig_atomic_t, __sigset_t, and related definitions.  Linux version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SIGSET_H_types
+# define _SIGSET_H_types       1
+
+typedef int __sig_atomic_t;
+
+/* A `sigset_t' has a bit for each signal.  */
+
+# define _SIGSET_NWORDS        (1024 / (8 * sizeof (unsigned long int)))
+typedef struct
+  {
+    unsigned long int __val[_SIGSET_NWORDS];
+  } __sigset_t;
+
+#endif
+
+
+/* We only want to define these functions if <signal.h> was actually
+   included; otherwise we were included just to define the types.  Since we
+   are namespace-clean, it wouldn't hurt to define extra macros.  But
+   trouble can be caused by functions being defined (e.g., any global
+   register vars declared later will cause compilation errors).  */
+
+#if !defined _SIGSET_H_fns && defined _SIGNAL_H
+# define _SIGSET_H_fns 1
+
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE __extern_inline
+# endif
+
+/* Return a mask that includes the bit for SIG only.  */
+# define __sigmask(sig) \
+  (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+
+/* Return the word index for SIG.  */
+# define __sigword(sig)        (((sig) - 1) / (8 * sizeof (unsigned long int)))
+
+# if defined __GNUC__ && __GNUC__ >= 2
+#  define __sigemptyset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__set = (set);                                  \
+                   while (--__cnt >= 0) __set->__val[__cnt] = 0;             \
+                   0; }))
+#  define __sigfillset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__set = (set);                                  \
+                   while (--__cnt >= 0) __set->__val[__cnt] = ~0UL;          \
+                   0; }))
+
+#  ifdef __USE_GNU
+/* The POSIX does not specify for handling the whole signal set in one
+   command.  This is often wanted and so we define three more functions
+   here.  */
+#   define __sigisemptyset(set) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   const sigset_t *__set = (set);                            \
+                   int __ret = __set->__val[--__cnt];                        \
+                   while (!__ret && --__cnt >= 0)                            \
+                       __ret = __set->__val[__cnt];                          \
+                   __ret == 0; }))
+#   define __sigandset(dest, left, right) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__dest = (dest);                                \
+                   const sigset_t *__left = (left);                          \
+                   const sigset_t *__right = (right);                        \
+                   while (--__cnt >= 0)                                      \
+                     __dest->__val[__cnt] = (__left->__val[__cnt]            \
+                                             & __right->__val[__cnt]);       \
+                   0; }))
+#   define __sigorset(dest, left, right) \
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;                                      \
+                   sigset_t *__dest = (dest);                                \
+                   const sigset_t *__left = (left);                          \
+                   const sigset_t *__right = (right);                        \
+                   while (--__cnt >= 0)                                      \
+                     __dest->__val[__cnt] = (__left->__val[__cnt]            \
+                                             | __right->__val[__cnt]);       \
+                   0; }))
+#  endif
+# endif
+
+/* These functions needn't check for a bogus signal number -- error
+   checking is done in the non __ versions.  */
+
+extern int __sigismember (const __sigset_t *, int);
+extern int __sigaddset (__sigset_t *, int);
+extern int __sigdelset (__sigset_t *, int);
+
+# ifdef __USE_EXTERN_INLINES
+#  define __SIGSETFN(NAME, BODY, CONST)                                              \
+  _EXTERN_INLINE int                                                         \
+  NAME (CONST __sigset_t *__set, int __sig)                                  \
+  {                                                                          \
+    unsigned long int __mask = __sigmask (__sig);                            \
+    unsigned long int __word = __sigword (__sig);                            \
+    return BODY;                                                             \
+  }
+
+__SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, const)
+__SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), )
+__SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), )
+
+#  undef __SIGSETFN
+# endif
+
+
+#endif /* ! _SIGSET_H_fns.  */
diff --git a/lib/libdss-include/include/bits/sigstack.h b/lib/libdss-include/include/bits/sigstack.h
new file mode 100644 (file)
index 0000000..5b09b7c
--- /dev/null
@@ -0,0 +1,54 @@
+/* sigstack, sigaltstack definitions.
+   Copyright (C) 2015-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SIGNAL_H
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+
+/* Structure describing a signal stack (obsolete).  */
+struct sigstack
+  {
+    void *ss_sp;               /* Signal stack pointer.  */
+    int ss_onstack;            /* Nonzero if executing on this stack.  */
+  };
+
+
+/* Possible values for `ss_flags.'.  */
+enum
+{
+  SS_ONSTACK = 1,
+#define SS_ONSTACK     SS_ONSTACK
+  SS_DISABLE
+#define SS_DISABLE     SS_DISABLE
+};
+
+/* Minimum stack size for a signal handler.  */
+#define MINSIGSTKSZ    5120
+
+/* System default stack size.  */
+#define SIGSTKSZ       16384
+
+
+/* Alternate, preferred interface.  */
+typedef struct sigaltstack
+  {
+    void *ss_sp;
+    int ss_flags;
+    size_t ss_size;
+  } stack_t;
diff --git a/lib/libdss-include/include/bits/sigthread.h b/lib/libdss-include/include/bits/sigthread.h
new file mode 100644 (file)
index 0000000..32ef1a9
--- /dev/null
@@ -0,0 +1,43 @@
+/* Signal handling function for threaded programs.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_SIGTHREAD_H
+#define _BITS_SIGTHREAD_H      1
+
+#if !defined _SIGNAL_H && !defined _PTHREAD_H
+# error "Never include this file directly.  Use <pthread.h> instead"
+#endif
+
+/* Functions for handling signals. */
+
+/* Modify the signal mask for the calling thread.  The arguments have
+   the same meaning as for sigprocmask(2). */
+extern int pthread_sigmask (int __how,
+                           const __sigset_t *__restrict __newmask,
+                           __sigset_t *__restrict __oldmask)__THROW;
+
+/* Send signal SIGNO to the given thread. */
+extern int pthread_kill (pthread_t __threadid, int __signo) __THROW;
+
+#ifdef __USE_GNU
+/* Queue signal and data to a thread.  */
+extern int pthread_sigqueue (pthread_t __threadid, int __signo,
+                            const union sigval __value) __THROW;
+#endif
+
+#endif /* bits/sigthread.h */
diff --git a/lib/libdss-include/include/bits/sockaddr.h b/lib/libdss-include/include/bits/sockaddr.h
new file mode 100644 (file)
index 0000000..e91f837
--- /dev/null
@@ -0,0 +1,39 @@
+/* Definition of `struct sockaddr_*' common members.  Generic/4.2 BSD version.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <sys/socket.h> instead.
+ */
+
+#ifndef _BITS_SOCKADDR_H
+#define _BITS_SOCKADDR_H       1
+
+
+/* POSIX.1g specifies this type name for the `sa_family' member.  */
+typedef unsigned short int sa_family_t;
+
+/* This macro is used to declare the initial common members
+   of the data types used for socket addresses, `struct sockaddr',
+   `struct sockaddr_in', `struct sockaddr_un', etc.  */
+
+#define        __SOCKADDR_COMMON(sa_prefix) \
+  sa_family_t sa_prefix##family
+
+#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))
+
+#endif /* bits/sockaddr.h */
diff --git a/lib/libdss-include/include/bits/socket.h b/lib/libdss-include/include/bits/socket.h
new file mode 100644 (file)
index 0000000..0581c79
--- /dev/null
@@ -0,0 +1,389 @@
+/* System-specific socket constants and types.  Linux version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __BITS_SOCKET_H
+#define __BITS_SOCKET_H
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+#endif
+
+#define __need_size_t
+#include <stddef.h>
+
+#include <sys/types.h>
+
+/* Type for length arguments in socket calls.  */
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+/* Get the architecture-dependent definition of enum __socket_type.  */
+#include <bits/socket_type.h>
+
+/* Protocol families.  */
+#define PF_UNSPEC      0       /* Unspecified.  */
+#define PF_LOCAL       1       /* Local to host (pipes and file-domain).  */
+#define PF_UNIX                PF_LOCAL /* POSIX name for PF_LOCAL.  */
+#define PF_FILE                PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
+#define PF_INET                2       /* IP protocol family.  */
+#define PF_AX25                3       /* Amateur Radio AX.25.  */
+#define PF_IPX         4       /* Novell Internet Protocol.  */
+#define PF_APPLETALK   5       /* Appletalk DDP.  */
+#define PF_NETROM      6       /* Amateur radio NetROM.  */
+#define PF_BRIDGE      7       /* Multiprotocol bridge.  */
+#define PF_ATMPVC      8       /* ATM PVCs.  */
+#define PF_X25         9       /* Reserved for X.25 project.  */
+#define PF_INET6       10      /* IP version 6.  */
+#define PF_ROSE                11      /* Amateur Radio X.25 PLP.  */
+#define PF_DECnet      12      /* Reserved for DECnet project.  */
+#define PF_NETBEUI     13      /* Reserved for 802.2LLC project.  */
+#define PF_SECURITY    14      /* Security callback pseudo AF.  */
+#define PF_KEY         15      /* PF_KEY key management API.  */
+#define PF_NETLINK     16
+#define PF_ROUTE       PF_NETLINK /* Alias to emulate 4.4BSD.  */
+#define PF_PACKET      17      /* Packet family.  */
+#define PF_ASH         18      /* Ash.  */
+#define PF_ECONET      19      /* Acorn Econet.  */
+#define PF_ATMSVC      20      /* ATM SVCs.  */
+#define PF_RDS         21      /* RDS sockets.  */
+#define PF_SNA         22      /* Linux SNA Project */
+#define PF_IRDA                23      /* IRDA sockets.  */
+#define PF_PPPOX       24      /* PPPoX sockets.  */
+#define PF_WANPIPE     25      /* Wanpipe API sockets.  */
+#define PF_LLC         26      /* Linux LLC.  */
+#define PF_IB          27      /* Native InfiniBand address.  */
+#define PF_MPLS                28      /* MPLS.  */
+#define PF_CAN         29      /* Controller Area Network.  */
+#define PF_TIPC                30      /* TIPC sockets.  */
+#define PF_BLUETOOTH   31      /* Bluetooth sockets.  */
+#define PF_IUCV                32      /* IUCV sockets.  */
+#define PF_RXRPC       33      /* RxRPC sockets.  */
+#define PF_ISDN                34      /* mISDN sockets.  */
+#define PF_PHONET      35      /* Phonet sockets.  */
+#define PF_IEEE802154  36      /* IEEE 802.15.4 sockets.  */
+#define PF_CAIF                37      /* CAIF sockets.  */
+#define PF_ALG         38      /* Algorithm sockets.  */
+#define PF_NFC         39      /* NFC sockets.  */
+#define PF_VSOCK       40      /* vSockets.  */
+#define PF_MAX         41      /* For now..  */
+
+/* Address families.  */
+#define AF_UNSPEC      PF_UNSPEC
+#define AF_LOCAL       PF_LOCAL
+#define AF_UNIX                PF_UNIX
+#define AF_FILE                PF_FILE
+#define AF_INET                PF_INET
+#define AF_AX25                PF_AX25
+#define AF_IPX         PF_IPX
+#define AF_APPLETALK   PF_APPLETALK
+#define AF_NETROM      PF_NETROM
+#define AF_BRIDGE      PF_BRIDGE
+#define AF_ATMPVC      PF_ATMPVC
+#define AF_X25         PF_X25
+#define AF_INET6       PF_INET6
+#define AF_ROSE                PF_ROSE
+#define AF_DECnet      PF_DECnet
+#define AF_NETBEUI     PF_NETBEUI
+#define AF_SECURITY    PF_SECURITY
+#define AF_KEY         PF_KEY
+#define AF_NETLINK     PF_NETLINK
+#define AF_ROUTE       PF_ROUTE
+#define AF_PACKET      PF_PACKET
+#define AF_ASH         PF_ASH
+#define AF_ECONET      PF_ECONET
+#define AF_ATMSVC      PF_ATMSVC
+#define AF_RDS         PF_RDS
+#define AF_SNA         PF_SNA
+#define AF_IRDA                PF_IRDA
+#define AF_PPPOX       PF_PPPOX
+#define AF_WANPIPE     PF_WANPIPE
+#define AF_LLC         PF_LLC
+#define AF_IB          PF_IB
+#define AF_MPLS                PF_MPLS
+#define AF_CAN         PF_CAN
+#define AF_TIPC                PF_TIPC
+#define AF_BLUETOOTH   PF_BLUETOOTH
+#define AF_IUCV                PF_IUCV
+#define AF_RXRPC       PF_RXRPC
+#define AF_ISDN                PF_ISDN
+#define AF_PHONET      PF_PHONET
+#define AF_IEEE802154  PF_IEEE802154
+#define AF_CAIF                PF_CAIF
+#define AF_ALG         PF_ALG
+#define AF_NFC         PF_NFC
+#define AF_VSOCK       PF_VSOCK
+#define AF_MAX         PF_MAX
+
+/* Socket level values.  Others are defined in the appropriate headers.
+
+   XXX These definitions also should go into the appropriate headers as
+   far as they are available.  */
+#define SOL_RAW                255
+#define SOL_DECNET      261
+#define SOL_X25         262
+#define SOL_PACKET     263
+#define SOL_ATM                264     /* ATM layer (cell level).  */
+#define SOL_AAL                265     /* ATM Adaption Layer (packet level).  */
+#define SOL_IRDA       266
+
+/* Maximum queue length specifiable by listen.  */
+#define SOMAXCONN      128
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+/* Structure describing a generic socket address.  */
+struct sockaddr
+  {
+    __SOCKADDR_COMMON (sa_);   /* Common data: address family and length.  */
+    char sa_data[14];          /* Address data.  */
+  };
+
+
+/* Structure large enough to hold any socket address (with the historical
+   exception of AF_UNIX).  We reserve 128 bytes.  */
+#define __ss_aligntype unsigned long int
+#define _SS_SIZE       128
+#define _SS_PADSIZE    (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+
+struct sockaddr_storage
+  {
+    __SOCKADDR_COMMON (ss_);   /* Address family, etc.  */
+    __ss_aligntype __ss_align; /* Force desired alignment.  */
+    char __ss_padding[_SS_PADSIZE];
+  };
+
+
+/* Bits in the FLAGS argument to `send', `recv', et al.  */
+enum
+  {
+    MSG_OOB            = 0x01, /* Process out-of-band data.  */
+#define MSG_OOB                MSG_OOB
+    MSG_PEEK           = 0x02, /* Peek at incoming messages.  */
+#define MSG_PEEK       MSG_PEEK
+    MSG_DONTROUTE      = 0x04, /* Don't use local routing.  */
+#define MSG_DONTROUTE  MSG_DONTROUTE
+#ifdef __USE_GNU
+    /* DECnet uses a different name.  */
+    MSG_TRYHARD                = MSG_DONTROUTE,
+# define MSG_TRYHARD   MSG_DONTROUTE
+#endif
+    MSG_CTRUNC         = 0x08, /* Control data lost before delivery.  */
+#define MSG_CTRUNC     MSG_CTRUNC
+    MSG_PROXY          = 0x10, /* Supply or ask second address.  */
+#define MSG_PROXY      MSG_PROXY
+    MSG_TRUNC          = 0x20,
+#define MSG_TRUNC      MSG_TRUNC
+    MSG_DONTWAIT       = 0x40, /* Nonblocking IO.  */
+#define MSG_DONTWAIT   MSG_DONTWAIT
+    MSG_EOR            = 0x80, /* End of record.  */
+#define MSG_EOR                MSG_EOR
+    MSG_WAITALL                = 0x100, /* Wait for a full request.  */
+#define MSG_WAITALL    MSG_WAITALL
+    MSG_FIN            = 0x200,
+#define MSG_FIN                MSG_FIN
+    MSG_SYN            = 0x400,
+#define MSG_SYN                MSG_SYN
+    MSG_CONFIRM                = 0x800, /* Confirm path validity.  */
+#define MSG_CONFIRM    MSG_CONFIRM
+    MSG_RST            = 0x1000,
+#define MSG_RST                MSG_RST
+    MSG_ERRQUEUE       = 0x2000, /* Fetch message from error queue.  */
+#define MSG_ERRQUEUE   MSG_ERRQUEUE
+    MSG_NOSIGNAL       = 0x4000, /* Do not generate SIGPIPE.  */
+#define MSG_NOSIGNAL   MSG_NOSIGNAL
+    MSG_MORE           = 0x8000,  /* Sender will send more.  */
+#define MSG_MORE       MSG_MORE
+    MSG_WAITFORONE     = 0x10000, /* Wait for at least one packet to return.*/
+#define MSG_WAITFORONE MSG_WAITFORONE
+    MSG_FASTOPEN       = 0x20000000, /* Send data in TCP SYN.  */
+#define MSG_FASTOPEN   MSG_FASTOPEN
+
+    MSG_CMSG_CLOEXEC   = 0x40000000    /* Set close_on_exit for file
+                                          descriptor received through
+                                          SCM_RIGHTS.  */
+#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+  };
+
+
+/* Structure describing messages sent by
+   `sendmsg' and received by `recvmsg'.  */
+struct msghdr
+  {
+    void *msg_name;            /* Address to send to/receive from.  */
+    socklen_t msg_namelen;     /* Length of address data.  */
+
+    struct iovec *msg_iov;     /* Vector of data to send/receive into.  */
+    size_t msg_iovlen;         /* Number of elements in the vector.  */
+
+    void *msg_control;         /* Ancillary data (eg BSD filedesc passing). */
+    size_t msg_controllen;     /* Ancillary data buffer length.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+
+    int msg_flags;             /* Flags on received message.  */
+  };
+
+/* Structure used for storage of ancillary data object information.  */
+struct cmsghdr
+  {
+    size_t cmsg_len;           /* Length of data in cmsg_data plus length
+                                  of cmsghdr structure.
+                                  !! The type should be socklen_t but the
+                                  definition of the kernel is incompatible
+                                  with this.  */
+    int cmsg_level;            /* Originating protocol.  */
+    int cmsg_type;             /* Protocol specific type.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
+#endif
+  };
+
+/* Ancillary data object manipulation macros.  */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+#else
+# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+#endif
+#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+#define CMSG_FIRSTHDR(mhdr) \
+  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)                \
+   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+                        & (size_t) ~(sizeof (size_t) - 1))
+#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+                        + CMSG_ALIGN (sizeof (struct cmsghdr)))
+#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+
+extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+                                     struct cmsghdr *__cmsg) __THROW;
+#ifdef __USE_EXTERN_INLINES
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE __extern_inline
+# endif
+_EXTERN_INLINE struct cmsghdr *
+__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+{
+  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+    /* The kernel header does this so there may be a reason.  */
+    return (struct cmsghdr *) 0;
+
+  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+                              + CMSG_ALIGN (__cmsg->cmsg_len));
+  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+                                       + __mhdr->msg_controllen)
+      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+         > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+    /* No more entries.  */
+    return (struct cmsghdr *) 0;
+  return __cmsg;
+}
+#endif /* Use `extern inline'.  */
+
+/* Socket level message types.  This must match the definitions in
+   <linux/socket.h>.  */
+enum
+  {
+    SCM_RIGHTS = 0x01          /* Transfer file descriptors.  */
+#define SCM_RIGHTS SCM_RIGHTS
+#ifdef __USE_GNU
+    , SCM_CREDENTIALS = 0x02   /* Credentials passing.  */
+# define SCM_CREDENTIALS SCM_CREDENTIALS
+#endif
+  };
+
+#ifdef __USE_GNU
+/* User visible structure for SCM_CREDENTIALS message */
+struct ucred
+{
+  pid_t pid;                   /* PID of sending process.  */
+  uid_t uid;                   /* UID of sending process.  */
+  gid_t gid;                   /* GID of sending process.  */
+};
+#endif
+
+/* Ugly workaround for unclean kernel headers.  */
+#ifndef __USE_MISC
+# ifndef FIOGETOWN
+#  define __SYS_SOCKET_H_undef_FIOGETOWN
+# endif
+# ifndef FIOSETOWN
+#  define __SYS_SOCKET_H_undef_FIOSETOWN
+# endif
+# ifndef SIOCATMARK
+#  define __SYS_SOCKET_H_undef_SIOCATMARK
+# endif
+# ifndef SIOCGPGRP
+#  define __SYS_SOCKET_H_undef_SIOCGPGRP
+# endif
+# ifndef SIOCGSTAMP
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMP
+# endif
+# ifndef SIOCGSTAMPNS
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+# endif
+# ifndef SIOCSPGRP
+#  define __SYS_SOCKET_H_undef_SIOCSPGRP
+# endif
+#endif
+
+/* Get socket manipulation related informations from kernel headers.  */
+#include <asm/socket.h>
+
+#ifndef __USE_MISC
+# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef __SYS_SOCKET_H_undef_FIOGETOWN
+#  undef FIOGETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef __SYS_SOCKET_H_undef_FIOSETOWN
+#  undef FIOSETOWN
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef __SYS_SOCKET_H_undef_SIOCATMARK
+#  undef SIOCATMARK
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCGPGRP
+#  undef SIOCGPGRP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMP
+#  undef SIOCGSTAMP
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
+#  undef SIOCGSTAMPNS
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef __SYS_SOCKET_H_undef_SIOCSPGRP
+#  undef SIOCSPGRP
+# endif
+#endif
+
+/* Structure used to manipulate the SO_LINGER option.  */
+struct linger
+  {
+    int l_onoff;               /* Nonzero to linger on close.  */
+    int l_linger;              /* Time to linger.  */
+  };
+
+#endif /* bits/socket.h */
diff --git a/lib/libdss-include/include/bits/socket2.h b/lib/libdss-include/include/bits/socket2.h
new file mode 100644 (file)
index 0000000..f499518
--- /dev/null
@@ -0,0 +1,77 @@
+/* Checking macros for socket functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket2.h> directly; use <sys/socket.h> instead."
+#endif
+
+extern ssize_t __recv_chk (int __fd, void *__buf, size_t __n, size_t __buflen,
+                          int __flags);
+extern ssize_t __REDIRECT (__recv_alias, (int __fd, void *__buf, size_t __n,
+                                         int __flags), recv);
+extern ssize_t __REDIRECT (__recv_chk_warn,
+                          (int __fd, void *__buf, size_t __n, size_t __buflen,
+                           int __flags), __recv_chk)
+     __warnattr ("recv called with bigger length than size of destination "
+                "buffer");
+
+__fortify_function ssize_t
+recv (int __fd, void *__buf, size_t __n, int __flags)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __recv_chk (__fd, __buf, __n, __bos0 (__buf), __flags);
+
+      if (__n > __bos0 (__buf))
+       return __recv_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags);
+    }
+  return __recv_alias (__fd, __buf, __n, __flags);
+}
+
+extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n,
+                              size_t __buflen, int __flags,
+                              __SOCKADDR_ARG __addr,
+                              socklen_t *__restrict __addr_len);
+extern ssize_t __REDIRECT (__recvfrom_alias,
+                          (int __fd, void *__restrict __buf, size_t __n,
+                           int __flags, __SOCKADDR_ARG __addr,
+                           socklen_t *__restrict __addr_len), recvfrom);
+extern ssize_t __REDIRECT (__recvfrom_chk_warn,
+                          (int __fd, void *__restrict __buf, size_t __n,
+                           size_t __buflen, int __flags,
+                           __SOCKADDR_ARG __addr,
+                           socklen_t *__restrict __addr_len), __recvfrom_chk)
+     __warnattr ("recvfrom called with bigger length than size of "
+                "destination buffer");
+
+__fortify_function ssize_t
+recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags,
+         __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __recvfrom_chk (__fd, __buf, __n, __bos0 (__buf), __flags,
+                              __addr, __addr_len);
+      if (__n > __bos0 (__buf))
+       return __recvfrom_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags,
+                                   __addr, __addr_len);
+    }
+  return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);
+}
diff --git a/lib/libdss-include/include/bits/socket_type.h b/lib/libdss-include/include/bits/socket_type.h
new file mode 100644 (file)
index 0000000..8501efb
--- /dev/null
@@ -0,0 +1,55 @@
+/* Define enum __socket_type for generic Linux.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SOCKET_H
+# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
+#endif
+
+/* Types of sockets.  */
+enum __socket_type
+{
+  SOCK_STREAM = 1,             /* Sequenced, reliable, connection-based
+                                  byte streams.  */
+#define SOCK_STREAM SOCK_STREAM
+  SOCK_DGRAM = 2,              /* Connectionless, unreliable datagrams
+                                  of fixed maximum length.  */
+#define SOCK_DGRAM SOCK_DGRAM
+  SOCK_RAW = 3,                        /* Raw protocol interface.  */
+#define SOCK_RAW SOCK_RAW
+  SOCK_RDM = 4,                        /* Reliably-delivered messages.  */
+#define SOCK_RDM SOCK_RDM
+  SOCK_SEQPACKET = 5,          /* Sequenced, reliable, connection-based,
+                                  datagrams of fixed maximum length.  */
+#define SOCK_SEQPACKET SOCK_SEQPACKET
+  SOCK_DCCP = 6,               /* Datagram Congestion Control Protocol.  */
+#define SOCK_DCCP SOCK_DCCP
+  SOCK_PACKET = 10,            /* Linux specific way of getting packets
+                                  at the dev level.  For writing rarp and
+                                  other similar things on the user level. */
+#define SOCK_PACKET SOCK_PACKET
+
+  /* Flags to be ORed into the type parameter of socket and socketpair and
+     used for the flags parameter of paccept.  */
+
+  SOCK_CLOEXEC = 02000000,     /* Atomically set close-on-exec flag for the
+                                  new descriptor(s).  */
+#define SOCK_CLOEXEC SOCK_CLOEXEC
+  SOCK_NONBLOCK = 00004000     /* Atomically mark descriptor(s) as
+                                  non-blocking.  */
+#define SOCK_NONBLOCK SOCK_NONBLOCK
+};
diff --git a/lib/libdss-include/include/bits/stab.def b/lib/libdss-include/include/bits/stab.def
new file mode 100644 (file)
index 0000000..2af2ddf
--- /dev/null
@@ -0,0 +1,233 @@
+/* Table of DBX symbol codes for the GNU system.
+   Copyright (C) 1988, 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This contains contribution from Cygnus Support.  */
+\f
+/* Global variable.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_GSYM, 0x20, "GSYM")
+
+/* Function name for BSD Fortran.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_FNAME, 0x22, "FNAME")
+
+/* Function name or text-segment variable for C.  Value is its address.
+   Desc is supposedly starting line number, but GCC doesn't set it
+   and DBX seems not to miss it.  */
+__define_stab (N_FUN, 0x24, "FUN")
+
+/* Data-segment variable with internal linkage.  Value is its address.
+   "Static Sym".  */
+__define_stab (N_STSYM, 0x26, "STSYM")
+
+/* BSS-segment variable with internal linkage.  Value is its address.  */
+__define_stab (N_LCSYM, 0x28, "LCSYM")
+
+/* Name of main routine.  Only the name is significant.
+   This is not used in C.  */
+__define_stab (N_MAIN, 0x2a, "MAIN")
+
+/* Global symbol in Pascal.
+   Supposedly the value is its line number; I'm skeptical.  */
+__define_stab (N_PC, 0x30, "PC")
+
+/* Number of symbols:  0, files,,funcs,lines according to Ultrix V4.0. */
+__define_stab (N_NSYMS, 0x32, "NSYMS")
+
+/* "No DST map for sym: name, ,0,type,ignored"  according to Ultrix V4.0. */
+__define_stab (N_NOMAP, 0x34, "NOMAP")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  */
+__define_stab (N_OBJ, 0x38, "OBJ")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  Possibly related to the
+   optimization flags used in this module.  */
+__define_stab (N_OPT, 0x3c, "OPT")
+
+/* Register variable.  Value is number of register.  */
+__define_stab (N_RSYM, 0x40, "RSYM")
+
+/* Modula-2 compilation unit.  Can someone say what info it contains?  */
+__define_stab (N_M2C, 0x42, "M2C")
+
+/* Line number in text segment.  Desc is the line number;
+   value is corresponding address.  */
+__define_stab (N_SLINE, 0x44, "SLINE")
+
+/* Similar, for data segment.  */
+__define_stab (N_DSLINE, 0x46, "DSLINE")
+
+/* Similar, for bss segment.  */
+__define_stab (N_BSLINE, 0x48, "BSLINE")
+
+/* Sun's source-code browser stabs.  ?? Don't know what the fields are.
+   Supposedly the field is "path to associated .cb file".  THIS VALUE
+   OVERLAPS WITH N_BSLINE!  */
+__define_stab (N_BROWS, 0x48, "BROWS")
+
+/* GNU Modula-2 definition module dependency.  Value is the modification time
+   of the definition file.  Other is non-zero if it is imported with the
+   GNU M2 keyword %INITIALIZE.  Perhaps N_M2C can be used if there
+   are enough empty fields? */
+__define_stab(N_DEFD, 0x4a, "DEFD")
+
+/* THE FOLLOWING TWO STAB VALUES CONFLICT.  Happily, one is for Modula-2
+   and one is for C++.   Still,... */
+/* GNU C++ exception variable.  Name is variable name.  */
+__define_stab (N_EHDECL, 0x50, "EHDECL")
+/* Modula2 info "for imc":  name,,0,0,0  according to Ultrix V4.0.  */
+__define_stab (N_MOD2, 0x50, "MOD2")
+
+/* GNU C++ `catch' clause.  Value is its address.  Desc is nonzero if
+   this entry is immediately followed by a CAUGHT stab saying what exception
+   was caught.  Multiple CAUGHT stabs means that multiple exceptions
+   can be caught here.  If Desc is 0, it means all exceptions are caught
+   here.  */
+__define_stab (N_CATCH, 0x54, "CATCH")
+
+/* Structure or union element.  Value is offset in the structure.  */
+__define_stab (N_SSYM, 0x60, "SSYM")
+
+/* Name of main source file.
+   Value is starting text address of the compilation.  */
+__define_stab (N_SO, 0x64, "SO")
+
+/* Automatic variable in the stack.  Value is offset from frame pointer.
+   Also used for type descriptions.  */
+__define_stab (N_LSYM, 0x80, "LSYM")
+
+/* Beginning of an include file.  Only Sun uses this.
+   In an object file, only the name is significant.
+   The Sun linker puts data into some of the other fields.  */
+__define_stab (N_BINCL, 0x82, "BINCL")
+
+/* Name of sub-source file (#include file).
+   Value is starting text address of the compilation.  */
+__define_stab (N_SOL, 0x84, "SOL")
+
+/* Parameter variable.  Value is offset from argument pointer.
+   (On most machines the argument pointer is the same as the frame pointer.  */
+__define_stab (N_PSYM, 0xa0, "PSYM")
+
+/* End of an include file.  No name.
+   This and N_BINCL act as brackets around the file's output.
+   In an object file, there is no significant data in this entry.
+   The Sun linker puts data into some of the fields.  */
+__define_stab (N_EINCL, 0xa2, "EINCL")
+
+/* Alternate entry point.  Value is its address.  */
+__define_stab (N_ENTRY, 0xa4, "ENTRY")
+
+/* Beginning of lexical block.
+   The desc is the nesting level in lexical blocks.
+   The value is the address of the start of the text for the block.
+   The variables declared inside the block *precede* the N_LBRAC symbol.  */
+__define_stab (N_LBRAC, 0xc0, "LBRAC")
+
+/* Place holder for deleted include file.  Replaces a N_BINCL and everything
+   up to the corresponding N_EINCL.  The Sun linker generates these when
+   it finds multiple identical copies of the symbols from an include file.
+   This appears only in output from the Sun linker.  */
+__define_stab (N_EXCL, 0xc2, "EXCL")
+
+/* Modula-2 scope information.  Can someone say what info it contains?  */
+__define_stab (N_SCOPE, 0xc4, "SCOPE")
+
+/* End of a lexical block.  Desc matches the N_LBRAC's desc.
+   The value is the address of the end of the text for the block.  */
+__define_stab (N_RBRAC, 0xe0, "RBRAC")
+
+/* Begin named common block.  Only the name is significant.  */
+__define_stab (N_BCOMM, 0xe2, "BCOMM")
+
+/* End named common block.  Only the name is significant
+   (and it should match the N_BCOMM).  */
+__define_stab (N_ECOMM, 0xe4, "ECOMM")
+
+/* End common (local name): value is address.
+   I'm not sure how this is used.  */
+__define_stab (N_ECOML, 0xe8, "ECOML")
+
+/* These STAB's are used on Gould systems for Non-Base register symbols
+   or something like that.  FIXME.  I have assigned the values at random
+   since I don't have a Gould here.  Fixups from Gould folk welcome... */
+__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
+__define_stab (N_NBDATA, 0xF2, "NBDATA")
+__define_stab (N_NBBSS,  0xF4, "NBBSS")
+__define_stab (N_NBSTS,  0xF6, "NBSTS")
+__define_stab (N_NBLCS,  0xF8, "NBLCS")
+
+/* Second symbol entry containing a length-value for the preceding entry.
+   The value is the length.  */
+__define_stab (N_LENG, 0xfe, "LENG")
+\f
+/* The above information, in matrix format.
+
+                       STAB MATRIX
+       _________________________________________________
+       | 00 - 1F are not dbx stab symbols              |
+       | In most cases, the low bit is the EXTernal bit|
+
+       | 00 UNDEF  | 02 ABS    | 04 TEXT   | 06 DATA   |
+       | 01  |EXT  | 03  |EXT  | 05  |EXT  | 07  |EXT  |
+
+       | 08 BSS    | 0A INDR   | 0C FN_SEQ | 0E        |
+       | 09  |EXT  | 0B        | 0D        | 0F        |
+
+       | 10        | 12 COMM   | 14 SETA   | 16 SETT   |
+       | 11        | 13        | 15        | 17        |
+
+       | 18 SETD   | 1A SETB   | 1C SETV   | 1E WARNING|
+       | 19        | 1B        | 1D        | 1F FN     |
+
+       |_______________________________________________|
+       | Debug entries with bit 01 set are unused.     |
+       | 20 GSYM   | 22 FNAME  | 24 FUN    | 26 STSYM  |
+       | 28 LCSYM  | 2A MAIN   | 2C        | 2E        |
+       | 30 PC     | 32 NSYMS  | 34 NOMAP  | 36        |
+       | 38 OBJ    | 3A        | 3C OPT    | 3E        |
+       | 40 RSYM   | 42 M2C    | 44 SLINE  | 46 DSLINE |
+       | 48 BSLINE*| 4A DEFD   | 4C        | 4E        |
+       | 50 EHDECL*| 52        | 54 CATCH  | 56        |
+       | 58        | 5A        | 5C        | 5E        |
+       | 60 SSYM   | 62        | 64 SO     | 66        |
+       | 68        | 6A        | 6C        | 6E        |
+       | 70        | 72        | 74        | 76        |
+       | 78        | 7A        | 7C        | 7E        |
+       | 80 LSYM   | 82 BINCL  | 84 SOL    | 86        |
+       | 88        | 8A        | 8C        | 8E        |
+       | 90        | 92        | 94        | 96        |
+       | 98        | 9A        | 9C        | 9E        |
+       | A0 PSYM   | A2 EINCL  | A4 ENTRY  | A6        |
+       | A8        | AA        | AC        | AE        |
+       | B0        | B2        | B4        | B6        |
+       | B8        | BA        | BC        | BE        |
+       | C0 LBRAC  | C2 EXCL   | C4 SCOPE  | C6        |
+       | C8        | CA        | CC        | CE        |
+       | D0        | D2        | D4        | D6        |
+       | D8        | DA        | DC        | DE        |
+       | E0 RBRAC  | E2 BCOMM  | E4 ECOMM  | E6        |
+       | E8 ECOML  | EA        | EC        | EE        |
+       | F0        | F2        | F4        | F6        |
+       | F8        | FA        | FC        | FE LENG   |
+       +-----------------------------------------------+
+ * 50 EHDECL is also MOD2.
+ * 48 BSLINE is also BROWS.
+ */
diff --git a/lib/libdss-include/include/bits/stat.h b/lib/libdss-include/include/bits/stat.h
new file mode 100644 (file)
index 0000000..dd8d799
--- /dev/null
@@ -0,0 +1,171 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H   1
+
+#include <endian.h>
+#include <bits/wordsize.h>
+
+/* 64-bit libc uses the kernel's 'struct stat', accessed via the
+   stat() syscall; 32-bit libc uses the kernel's 'struct stat64'
+   and accesses it via the stat64() syscall.  All the various
+   APIs offered by libc use the kernel shape for their struct stat
+   structure; the only difference is that 32-bit programs not
+   using __USE_FILE_OFFSET64 only see the low 32 bits of some
+   of the fields (specifically st_ino, st_size, and st_blocks).  */
+#define _STAT_VER_KERNEL       0
+#define _STAT_VER_LINUX                0
+#define _STAT_VER              _STAT_VER_KERNEL
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX       0
+
+#if defined __USE_FILE_OFFSET64
+# define __field64(type, type64, name) type64 name
+#elif __WORDSIZE == 64
+# define __field64(type, type64, name) type name
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define __field64(type, type64, name) \
+  type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad
+#else
+# define __field64(type, type64, name) \
+  int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name
+#endif
+
+struct stat
+  {
+    __dev_t st_dev;            /* Device.  */
+    __field64(__ino_t, __ino64_t, st_ino);  /* File serial number. */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Link count.  */
+    __uid_t st_uid;            /* User ID of the file's owner. */
+    __gid_t st_gid;            /* Group ID of the file's group.*/
+    __dev_t st_rdev;           /* Device number, if device.  */
+    __dev_t __pad1;
+    __field64(__off_t, __off64_t, st_size);  /* Size of file, in bytes. */
+    __blksize_t st_blksize;    /* Optimal block size for I/O.  */
+    int __pad2;
+    __field64(__blkcnt_t, __blkcnt64_t, st_blocks);  /* 512-byte blocks */
+#ifdef __USE_XOPEN2K8
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+# define st_atime st_atim.tv_sec       /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
+    int __glibc_reserved[2];
+  };
+
+#undef __field64
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+  {
+    __dev_t st_dev;            /* Device.  */
+    __ino64_t st_ino;          /* File serial number.  */
+    __mode_t st_mode;          /* File mode.  */
+    __nlink_t st_nlink;                /* Link count.  */
+    __uid_t st_uid;            /* User ID of the file's owner. */
+    __gid_t st_gid;            /* Group ID of the file's group.*/
+    __dev_t st_rdev;           /* Device number, if device.  */
+    __dev_t __pad1;
+    __off64_t st_size;         /* Size of file, in bytes.  */
+    __blksize_t st_blksize;    /* Optimal block size for I/O.  */
+    int __pad2;
+    __blkcnt64_t st_blocks;    /* Nr. 512-byte blocks allocated.  */
+#ifdef __USE_XOPEN2K8
+    /* Nanosecond resolution timestamps are stored in a format
+       equivalent to 'struct timespec'.  This is the type used
+       whenever possible but the Unix namespace rules do not allow the
+       identifier 'timespec' to appear in the <sys/stat.h> header.
+       Therefore we have to handle the use of this header in strictly
+       standard-compliant sources special.  */
+    struct timespec st_atim;           /* Time of last access.  */
+    struct timespec st_mtim;           /* Time of last modification.  */
+    struct timespec st_ctim;           /* Time of last status change.  */
+#else
+    __time_t st_atime;                 /* Time of last access.  */
+    unsigned long int st_atimensec;    /* Nscecs of last access.  */
+    __time_t st_mtime;                 /* Time of last modification.  */
+    unsigned long int st_mtimensec;    /* Nsecs of last modification.  */
+    __time_t st_ctime;                 /* Time of last status change.  */
+    unsigned long int st_ctimensec;    /* Nsecs of last status change.  */
+#endif
+    int __glibc_reserved[2];
+  };
+#endif
+
+/* Tell code we have these members.  */
+#define        _STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
+
+/* Encoding of the file mode.  */
+
+#define        __S_IFMT        0170000 /* These bits determine file type.  */
+
+/* File types.  */
+#define        __S_IFDIR       0040000 /* Directory.  */
+#define        __S_IFCHR       0020000 /* Character device.  */
+#define        __S_IFBLK       0060000 /* Block device.  */
+#define        __S_IFREG       0100000 /* Regular file.  */
+#define        __S_IFIFO       0010000 /* FIFO.  */
+#define        __S_IFLNK       0120000 /* Symbolic link.  */
+#define        __S_IFSOCK      0140000 /* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define        __S_ISUID       04000   /* Set user ID on execution.  */
+#define        __S_ISGID       02000   /* Set group ID on execution.  */
+#define        __S_ISVTX       01000   /* Save swapped text after use (sticky).  */
+#define        __S_IREAD       0400    /* Read by owner.  */
+#define        __S_IWRITE      0200    /* Write by owner.  */
+#define        __S_IEXEC       0100    /* Execute by owner.  */
+
+#ifdef __USE_ATFILE
+# define UTIME_NOW     ((1l << 30) - 1l)
+# define UTIME_OMIT    ((1l << 30) - 2l)
+#endif
+
+#endif /* bits/stat.h */
diff --git a/lib/libdss-include/include/bits/statfs.h b/lib/libdss-include/include/bits/statfs.h
new file mode 100644 (file)
index 0000000..7d5aa2d
--- /dev/null
@@ -0,0 +1,86 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_STATFS_H
+# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
+#endif
+
+#include <endian.h>
+#include <bits/types.h>
+#include <bits/wordsize.h>
+
+/* 64-bit libc uses the kernel's 'struct statfs', accessed via the
+   statfs() syscall; 32-bit libc uses the kernel's 'struct statfs64'
+   and accesses it via the statfs64() syscall.  All the various
+   APIs offered by libc use the kernel shape for their struct statfs
+   structure; the only difference is that 32-bit programs not
+   using __USE_FILE_OFFSET64 only see the low 32 bits of some
+   of the fields (the __fsblkcnt_t and __fsfilcnt_t fields).  */
+
+#if defined __USE_FILE_OFFSET64
+# define __field64(type, type64, name) type64 name
+#elif __WORDSIZE == 64
+# define __field64(type, type64, name) type name
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define __field64(type, type64, name) \
+  type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad
+#else
+# define __field64(type, type64, name) \
+  int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name
+#endif
+
+struct statfs
+  {
+    __SWORD_TYPE f_type;
+    __SWORD_TYPE f_bsize;
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_blocks);
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bfree);
+    __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bavail);
+    __field64(__fsfilcnt_t, __fsfilcnt64_t, f_files);
+    __field64(__fsfilcnt_t, __fsfilcnt64_t, f_ffree);
+    __fsid_t f_fsid;
+    __SWORD_TYPE f_namelen;
+    __SWORD_TYPE f_frsize;
+    __SWORD_TYPE f_flags;
+    __SWORD_TYPE f_spare[4];
+  };
+
+#undef __field64
+
+#ifdef __USE_LARGEFILE64
+struct statfs64
+  {
+    __SWORD_TYPE f_type;
+    __SWORD_TYPE f_bsize;
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsid_t f_fsid;
+    __SWORD_TYPE f_namelen;
+    __SWORD_TYPE f_frsize;
+    __SWORD_TYPE f_flags;
+    __SWORD_TYPE f_spare[4];
+  };
+#endif
+
+/* Tell code we have these members.  */
+#define _STATFS_F_NAMELEN
+#define _STATFS_F_FRSIZE
+#define _STATFS_F_FLAGS
diff --git a/lib/libdss-include/include/bits/statvfs.h b/lib/libdss-include/include/bits/statvfs.h
new file mode 100644 (file)
index 0000000..9244401
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_STATVFS_H
+# error "Never include <bits/statvfs.h> directly; use <sys/statvfs.h> instead."
+#endif
+
+#include <bits/types.h>  /* For __fsblkcnt_t and __fsfilcnt_t.  */
+
+#if (__WORDSIZE == 32 \
+     && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32))
+#define _STATVFSBUF_F_UNUSED
+#endif
+
+struct statvfs
+  {
+    unsigned long int f_bsize;
+    unsigned long int f_frsize;
+#ifndef __USE_FILE_OFFSET64
+    __fsblkcnt_t f_blocks;
+    __fsblkcnt_t f_bfree;
+    __fsblkcnt_t f_bavail;
+    __fsfilcnt_t f_files;
+    __fsfilcnt_t f_ffree;
+    __fsfilcnt_t f_favail;
+#else
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsfilcnt64_t f_favail;
+#endif
+    unsigned long int f_fsid;
+#ifdef _STATVFSBUF_F_UNUSED
+    int __f_unused;
+#endif
+    unsigned long int f_flag;
+    unsigned long int f_namemax;
+    int __f_spare[6];
+  };
+
+#ifdef __USE_LARGEFILE64
+struct statvfs64
+  {
+    unsigned long int f_bsize;
+    unsigned long int f_frsize;
+    __fsblkcnt64_t f_blocks;
+    __fsblkcnt64_t f_bfree;
+    __fsblkcnt64_t f_bavail;
+    __fsfilcnt64_t f_files;
+    __fsfilcnt64_t f_ffree;
+    __fsfilcnt64_t f_favail;
+    unsigned long int f_fsid;
+#ifdef _STATVFSBUF_F_UNUSED
+    int __f_unused;
+#endif
+    unsigned long int f_flag;
+    unsigned long int f_namemax;
+    int __f_spare[6];
+  };
+#endif
+
+/* Definitions for the flag in `f_flag'.  These definitions should be
+   kept in sync with the definitions in <sys/mount.h>.  */
+enum
+{
+  ST_RDONLY = 1,               /* Mount read-only.  */
+#define ST_RDONLY      ST_RDONLY
+  ST_NOSUID = 2                        /* Ignore suid and sgid bits.  */
+#define ST_NOSUID      ST_NOSUID
+#ifdef __USE_GNU
+  ,
+  ST_NODEV = 4,                        /* Disallow access to device special files.  */
+# define ST_NODEV      ST_NODEV
+  ST_NOEXEC = 8,               /* Disallow program execution.  */
+# define ST_NOEXEC     ST_NOEXEC
+  ST_SYNCHRONOUS = 16,         /* Writes are synced at once.  */
+# define ST_SYNCHRONOUS        ST_SYNCHRONOUS
+  ST_MANDLOCK = 64,            /* Allow mandatory locks on an FS.  */
+# define ST_MANDLOCK   ST_MANDLOCK
+  ST_WRITE = 128,              /* Write on file/directory/symlink.  */
+# define ST_WRITE      ST_WRITE
+  ST_APPEND = 256,             /* Append-only file.  */
+# define ST_APPEND     ST_APPEND
+  ST_IMMUTABLE = 512,          /* Immutable file.  */
+# define ST_IMMUTABLE  ST_IMMUTABLE
+  ST_NOATIME = 1024,           /* Do not update access times.  */
+# define ST_NOATIME    ST_NOATIME
+  ST_NODIRATIME = 2048,                /* Do not update directory access times.  */
+# define ST_NODIRATIME ST_NODIRATIME
+  ST_RELATIME = 4096           /* Update atime relative to mtime/ctime.  */
+# define ST_RELATIME   ST_RELATIME
+#endif /* Use GNU.  */
+};
diff --git a/lib/libdss-include/include/bits/stdio-ldbl.h b/lib/libdss-include/include/bits/stdio-ldbl.h
new file mode 100644 (file)
index 0000000..d19415f
--- /dev/null
@@ -0,0 +1,101 @@
+/* -mlong-double-64 compatibility mode for stdio functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio-ldbl.h> directly; use <stdio.h> instead."
+#endif
+
+__BEGIN_NAMESPACE_STD
+__LDBL_REDIR_DECL (fprintf)
+__LDBL_REDIR_DECL (printf)
+__LDBL_REDIR_DECL (sprintf)
+__LDBL_REDIR_DECL (vfprintf)
+__LDBL_REDIR_DECL (vprintf)
+__LDBL_REDIR_DECL (vsprintf)
+#if defined __USE_ISOC99 && !defined __USE_GNU \
+    && !defined __REDIRECT \
+    && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (fscanf, __nldbl___isoc99_fscanf)
+__LDBL_REDIR1_DECL (scanf, __nldbl___isoc99_scanf)
+__LDBL_REDIR1_DECL (sscanf, __nldbl___isoc99_sscanf)
+#else
+__LDBL_REDIR_DECL (fscanf)
+__LDBL_REDIR_DECL (scanf)
+__LDBL_REDIR_DECL (sscanf)
+#endif
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR_DECL (snprintf)
+__LDBL_REDIR_DECL (vsnprintf)
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+# if !defined __USE_GNU && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (vfscanf, __nldbl___isoc99_vfscanf)
+__LDBL_REDIR1_DECL (vscanf, __nldbl___isoc99_vscanf)
+__LDBL_REDIR1_DECL (vsscanf, __nldbl___isoc99_vsscanf)
+# else
+__LDBL_REDIR_DECL (vfscanf)
+__LDBL_REDIR_DECL (vsscanf)
+__LDBL_REDIR_DECL (vscanf)
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_XOPEN2K8
+__LDBL_REDIR_DECL (vdprintf)
+__LDBL_REDIR_DECL (dprintf)
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (vasprintf)
+__LDBL_REDIR_DECL (__asprintf)
+__LDBL_REDIR_DECL (asprintf)
+__LDBL_REDIR_DECL (obstack_printf)
+__LDBL_REDIR_DECL (obstack_vprintf)
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__sprintf_chk)
+__LDBL_REDIR_DECL (__vsprintf_chk)
+# if defined __USE_ISOC99 || defined __USE_UNIX98
+__LDBL_REDIR_DECL (__snprintf_chk)
+__LDBL_REDIR_DECL (__vsnprintf_chk)
+# endif
+# if __USE_FORTIFY_LEVEL > 1
+__LDBL_REDIR_DECL (__fprintf_chk)
+__LDBL_REDIR_DECL (__printf_chk)
+__LDBL_REDIR_DECL (__vfprintf_chk)
+__LDBL_REDIR_DECL (__vprintf_chk)
+#  ifdef __USE_XOPEN2K8
+__LDBL_REDIR_DECL (__dprintf_chk)
+__LDBL_REDIR_DECL (__vdprintf_chk)
+#  endif
+#  ifdef __USE_GNU
+__LDBL_REDIR_DECL (__asprintf_chk)
+__LDBL_REDIR_DECL (__vasprintf_chk)
+__LDBL_REDIR_DECL (__obstack_printf_chk)
+__LDBL_REDIR_DECL (__obstack_vprintf_chk)
+#  endif
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/stdio.h b/lib/libdss-include/include/bits/stdio.h
new file mode 100644 (file)
index 0000000..df57e7c
--- /dev/null
@@ -0,0 +1,190 @@
+/* Optimizing macros and inline functions for stdio functions.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
+#endif
+
+#ifndef __extern_inline
+# define __STDIO_INLINE inline
+#else
+# define __STDIO_INLINE __extern_inline
+#endif
+
+
+#ifdef __USE_EXTERN_INLINES
+/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
+   inline.  */
+# if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function)
+/* Write formatted output to stdout from argument list ARG.  */
+__STDIO_INLINE int
+vprintf (const char *__restrict __fmt, _G_va_list __arg)
+{
+  return vfprintf (stdout, __fmt, __arg);
+}
+# endif
+
+/* Read a character from stdin.  */
+__STDIO_INLINE int
+getchar (void)
+{
+  return _IO_getc (stdin);
+}
+
+
+# ifdef __USE_MISC
+/* Faster version when locking is not necessary.  */
+__STDIO_INLINE int
+fgetc_unlocked (FILE *__fp)
+{
+  return _IO_getc_unlocked (__fp);
+}
+# endif /* misc */
+
+
+# ifdef __USE_POSIX
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+getc_unlocked (FILE *__fp)
+{
+  return _IO_getc_unlocked (__fp);
+}
+
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+getchar_unlocked (void)
+{
+  return _IO_getc_unlocked (stdin);
+}
+# endif        /* POSIX */
+
+
+/* Write a character to stdout.  */
+__STDIO_INLINE int
+putchar (int __c)
+{
+  return _IO_putc (__c, stdout);
+}
+
+
+# ifdef __USE_MISC
+/* Faster version when locking is not necessary.  */
+__STDIO_INLINE int
+fputc_unlocked (int __c, FILE *__stream)
+{
+  return _IO_putc_unlocked (__c, __stream);
+}
+# endif /* misc */
+
+
+# ifdef __USE_POSIX
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+putc_unlocked (int __c, FILE *__stream)
+{
+  return _IO_putc_unlocked (__c, __stream);
+}
+
+/* This is defined in POSIX.1:1996.  */
+__STDIO_INLINE int
+putchar_unlocked (int __c)
+{
+  return _IO_putc_unlocked (__c, stdout);
+}
+# endif        /* POSIX */
+
+
+# ifdef        __USE_GNU
+/* Like `getdelim', but reads up to a newline.  */
+__STDIO_INLINE _IO_ssize_t
+getline (char **__lineptr, size_t *__n, FILE *__stream)
+{
+  return __getdelim (__lineptr, __n, '\n', __stream);
+}
+# endif /* GNU */
+
+
+# ifdef __USE_MISC
+/* Faster versions when locking is not required.  */
+__STDIO_INLINE int
+__NTH (feof_unlocked (FILE *__stream))
+{
+  return _IO_feof_unlocked (__stream);
+}
+
+/* Faster versions when locking is not required.  */
+__STDIO_INLINE int
+__NTH (ferror_unlocked (FILE *__stream))
+{
+  return _IO_ferror_unlocked (__stream);
+}
+# endif /* misc */
+
+#endif /* Use extern inlines.  */
+
+
+#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
+    && !defined __cplusplus
+/* Perform some simple optimizations.  */
+# define fread_unlocked(ptr, size, n, stream) \
+  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
+                  && (size_t) (size) * (size_t) (n) <= 8                     \
+                  && (size_t) (size) != 0)                                   \
+                 ? ({ char *__ptr = (char *) (ptr);                          \
+                      FILE *__stream = (stream);                             \
+                      size_t __cnt;                                          \
+                      for (__cnt = (size_t) (size) * (size_t) (n);           \
+                           __cnt > 0; --__cnt)                               \
+                        {                                                    \
+                          int __c = _IO_getc_unlocked (__stream);            \
+                          if (__c == EOF)                                    \
+                            break;                                           \
+                          *__ptr++ = __c;                                    \
+                        }                                                    \
+                      ((size_t) (size) * (size_t) (n) - __cnt)               \
+                       / (size_t) (size); })                                 \
+                 : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
+                     || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
+                       /* Evaluate all parameters once.  */                  \
+                    ? ((void) (ptr), (void) (stream), (void) (size),         \
+                       (void) (n), (size_t) 0)                               \
+                    : fread_unlocked (ptr, size, n, stream))))
+
+# define fwrite_unlocked(ptr, size, n, stream) \
+  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
+                  && (size_t) (size) * (size_t) (n) <= 8                     \
+                  && (size_t) (size) != 0)                                   \
+                 ? ({ const char *__ptr = (const char *) (ptr);              \
+                      FILE *__stream = (stream);                             \
+                      size_t __cnt;                                          \
+                      for (__cnt = (size_t) (size) * (size_t) (n);           \
+                           __cnt > 0; --__cnt)                               \
+                        if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \
+                          break;                                             \
+                      ((size_t) (size) * (size_t) (n) - __cnt)               \
+                       / (size_t) (size); })                                 \
+                 : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
+                     || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
+                       /* Evaluate all parameters once.  */                  \
+                    ? ((void) (ptr), (void) (stream), (void) (size),         \
+                       (void) (n), (size_t) 0)                               \
+                    : fwrite_unlocked (ptr, size, n, stream))))
+#endif
+
+/* Define helper macro.  */
+#undef __STDIO_INLINE
diff --git a/lib/libdss-include/include/bits/stdio2.h b/lib/libdss-include/include/bits/stdio2.h
new file mode 100644 (file)
index 0000000..fa3be79
--- /dev/null
@@ -0,0 +1,382 @@
+/* Checking macros for stdio functions.
+   Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/stdio2.h> directly; use <stdio.h> instead."
+#endif
+
+extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+                         const char *__restrict __format, ...) __THROW;
+extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+                          const char *__restrict __format,
+                          _G_va_list __ap) __THROW;
+
+#ifdef __va_arg_pack
+__fortify_function int
+__NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...))
+{
+  return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
+                                 __bos (__s), __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+# define sprintf(str, ...) \
+  __builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \
+                          __VA_ARGS__)
+#endif
+
+__fortify_function int
+__NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
+                _G_va_list __ap))
+{
+  return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
+                                  __bos (__s), __fmt, __ap);
+}
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+
+extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
+                          size_t __slen, const char *__restrict __format,
+                          ...) __THROW;
+extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
+                           size_t __slen, const char *__restrict __format,
+                           _G_va_list __ap) __THROW;
+
+# ifdef __va_arg_pack
+__fortify_function int
+__NTH (snprintf (char *__restrict __s, size_t __n,
+                const char *__restrict __fmt, ...))
+{
+  return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                                  __bos (__s), __fmt, __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define snprintf(str, len, ...) \
+  __builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
+                           __VA_ARGS__)
+# endif
+
+__fortify_function int
+__NTH (vsnprintf (char *__restrict __s, size_t __n,
+                 const char *__restrict __fmt, _G_va_list __ap))
+{
+  return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                                   __bos (__s), __fmt, __ap);
+}
+
+#endif
+
+#if __USE_FORTIFY_LEVEL > 1
+
+extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
+                         const char *__restrict __format, ...);
+extern int __printf_chk (int __flag, const char *__restrict __format, ...);
+extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
+                          const char *__restrict __format, _G_va_list __ap);
+extern int __vprintf_chk (int __flag, const char *__restrict __format,
+                         _G_va_list __ap);
+
+# ifdef __va_arg_pack
+__fortify_function int
+fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
+{
+  return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
+                       __va_arg_pack ());
+}
+
+__fortify_function int
+printf (const char *__restrict __fmt, ...)
+{
+  return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define printf(...) \
+  __printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  define fprintf(stream, ...) \
+  __fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# endif
+
+__fortify_function int
+vprintf (const char *__restrict __fmt, _G_va_list __ap)
+{
+#ifdef __USE_EXTERN_INLINES
+  return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+#else
+  return __vprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+#endif
+}
+
+__fortify_function int
+vfprintf (FILE *__restrict __stream,
+         const char *__restrict __fmt, _G_va_list __ap)
+{
+  return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+# ifdef __USE_XOPEN2K8
+extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
+                         ...) __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __vdprintf_chk (int __fd, int __flag,
+                          const char *__restrict __fmt, _G_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#  ifdef __va_arg_pack
+__fortify_function int
+dprintf (int __fd, const char *__restrict __fmt, ...)
+{
+  return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,
+                       __va_arg_pack ());
+}
+#  elif !defined __cplusplus
+#   define dprintf(fd, ...) \
+  __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  endif
+
+__fortify_function int
+vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap)
+{
+  return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+# endif
+
+# ifdef __USE_GNU
+
+extern int __asprintf_chk (char **__restrict __ptr, int __flag,
+                          const char *__restrict __fmt, ...)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
+extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
+                           const char *__restrict __fmt, _G_va_list __arg)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
+extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
+                                int __flag, const char *__restrict __format,
+                                ...)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
+                                 int __flag,
+                                 const char *__restrict __format,
+                                 _G_va_list __args)
+     __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#  ifdef __va_arg_pack
+__fortify_function int
+__NTH (asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...))
+{
+  return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+
+__fortify_function int
+__NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt,
+                  ...))
+{
+  return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+
+__fortify_function int
+__NTH (obstack_printf (struct obstack *__restrict __obstack,
+                      const char *__restrict __fmt, ...))
+{
+  return __obstack_printf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
+                              __va_arg_pack ());
+}
+#  elif !defined __cplusplus
+#   define asprintf(ptr, ...) \
+  __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#   define __asprintf(ptr, ...) \
+  __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#   define obstack_printf(obstack, ...) \
+  __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  endif
+
+__fortify_function int
+__NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt,
+                 _G_va_list __ap))
+{
+  return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+__fortify_function int
+__NTH (obstack_vprintf (struct obstack *__restrict __obstack,
+                       const char *__restrict __fmt, _G_va_list __ap))
+{
+  return __obstack_vprintf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
+                               __ap);
+}
+
+# endif
+
+#endif
+
+#if !defined __USE_ISOC11 \
+    || (defined __cplusplus && __cplusplus <= 201103L && !defined __USE_GNU)
+extern char *__gets_chk (char *__str, size_t) __wur;
+extern char *__REDIRECT (__gets_warn, (char *__str), gets)
+     __wur __warnattr ("please use fgets or getline instead, gets can't "
+                      "specify buffer size");
+
+__fortify_function __wur char *
+gets (char *__str)
+{
+  if (__bos (__str) != (size_t) -1)
+    return __gets_chk (__str, __bos (__str));
+  return __gets_warn (__str);
+}
+#endif
+
+extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream) __wur;
+extern char *__REDIRECT (__fgets_alias,
+                        (char *__restrict __s, int __n,
+                         FILE *__restrict __stream), fgets) __wur;
+extern char *__REDIRECT (__fgets_chk_warn,
+                        (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream), __fgets_chk)
+     __wur __warnattr ("fgets called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur char *
+fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgets_chk (__s, __bos (__s), __n, __stream);
+
+      if ((size_t) __n > __bos (__s))
+       return __fgets_chk_warn (__s, __bos (__s), __n, __stream);
+    }
+  return __fgets_alias (__s, __n, __stream);
+}
+
+extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream) __wur;
+extern size_t __REDIRECT (__fread_alias,
+                         (void *__restrict __ptr, size_t __size,
+                          size_t __n, FILE *__restrict __stream),
+                         fread) __wur;
+extern size_t __REDIRECT (__fread_chk_warn,
+                         (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream),
+                         __fread_chk)
+     __wur __warnattr ("fread called with bigger size * nmemb than length "
+                      "of destination buffer");
+
+__fortify_function __wur size_t
+fread (void *__restrict __ptr, size_t __size, size_t __n,
+       FILE *__restrict __stream)
+{
+  if (__bos0 (__ptr) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+         || !__builtin_constant_p (__n)
+         || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+       return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);
+
+      if (__size * __n > __bos0 (__ptr))
+       return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);
+    }
+  return __fread_alias (__ptr, __size, __n, __stream);
+}
+
+#ifdef __USE_GNU
+extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
+                                  int __n, FILE *__restrict __stream) __wur;
+extern char *__REDIRECT (__fgets_unlocked_alias,
+                        (char *__restrict __s, int __n,
+                         FILE *__restrict __stream), fgets_unlocked) __wur;
+extern char *__REDIRECT (__fgets_unlocked_chk_warn,
+                        (char *__restrict __s, size_t __size, int __n,
+                         FILE *__restrict __stream), __fgets_unlocked_chk)
+     __wur __warnattr ("fgets_unlocked called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur char *
+fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);
+
+      if ((size_t) __n > __bos (__s))
+       return __fgets_unlocked_chk_warn (__s, __bos (__s), __n, __stream);
+    }
+  return __fgets_unlocked_alias (__s, __n, __stream);
+}
+#endif
+
+#ifdef __USE_MISC
+# undef fread_unlocked
+extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
+                                   size_t __size, size_t __n,
+                                   FILE *__restrict __stream) __wur;
+extern size_t __REDIRECT (__fread_unlocked_alias,
+                         (void *__restrict __ptr, size_t __size,
+                          size_t __n, FILE *__restrict __stream),
+                         fread_unlocked) __wur;
+extern size_t __REDIRECT (__fread_unlocked_chk_warn,
+                         (void *__restrict __ptr, size_t __ptrlen,
+                          size_t __size, size_t __n,
+                          FILE *__restrict __stream),
+                         __fread_unlocked_chk)
+     __wur __warnattr ("fread_unlocked called with bigger size * nmemb than "
+                      "length of destination buffer");
+
+__fortify_function __wur size_t
+fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
+               FILE *__restrict __stream)
+{
+  if (__bos0 (__ptr) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+         || !__builtin_constant_p (__n)
+         || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+       return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n,
+                                    __stream);
+
+      if (__size * __n > __bos0 (__ptr))
+       return __fread_unlocked_chk_warn (__ptr, __bos0 (__ptr), __size, __n,
+                                         __stream);
+    }
+
+# ifdef __USE_EXTERN_INLINES
+  if (__builtin_constant_p (__size)
+      && __builtin_constant_p (__n)
+      && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
+      && __size * __n <= 8)
+    {
+      size_t __cnt = __size * __n;
+      char *__cptr = (char *) __ptr;
+      if (__cnt == 0)
+       return 0;
+
+      for (; __cnt > 0; --__cnt)
+       {
+         int __c = _IO_getc_unlocked (__stream);
+         if (__c == EOF)
+           break;
+         *__cptr++ = __c;
+       }
+      return (__cptr - (char *) __ptr) / __size;
+    }
+# endif
+  return __fread_unlocked_alias (__ptr, __size, __n, __stream);
+}
+#endif
diff --git a/lib/libdss-include/include/bits/stdio_lim.h b/lib/libdss-include/include/bits/stdio_lim.h
new file mode 100644 (file)
index 0000000..247d8c6
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _STDIO_H && !defined __need_FOPEN_MAX && !defined __need_IOV_MAX
+# error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead."
+#endif
+
+#ifdef _STDIO_H
+# define L_tmpnam 20
+# define TMP_MAX 238328
+# define FILENAME_MAX 4096
+
+# ifdef __USE_POSIX
+#  define L_ctermid 9
+#  if !defined __USE_XOPEN2K || defined __USE_GNU
+#   define L_cuserid 9
+#  endif
+# endif
+#endif
+
+#if defined __need_FOPEN_MAX || defined _STDIO_H
+# undef  FOPEN_MAX
+# define FOPEN_MAX 16
+#endif
+
+#if defined __need_IOV_MAX && !defined IOV_MAX
+# define IOV_MAX 1024
+#endif
diff --git a/lib/libdss-include/include/bits/stdlib-bsearch.h b/lib/libdss-include/include/bits/stdlib-bsearch.h
new file mode 100644 (file)
index 0000000..bbc8f98
--- /dev/null
@@ -0,0 +1,43 @@
+/* Perform binary search - inline version.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+__extern_inline void *
+bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
+        __compar_fn_t __compar)
+{
+  size_t __l, __u, __idx;
+  const void *__p;
+  int __comparison;
+
+  __l = 0;
+  __u = __nmemb;
+  while (__l < __u)
+    {
+      __idx = (__l + __u) / 2;
+      __p = (void *) (((const char *) __base) + (__idx * __size));
+      __comparison = (*__compar) (__key, __p);
+      if (__comparison < 0)
+       __u = __idx;
+      else if (__comparison > 0)
+       __l = __idx + 1;
+      else
+       return (void *) __p;
+    }
+
+  return NULL;
+}
diff --git a/lib/libdss-include/include/bits/stdlib-float.h b/lib/libdss-include/include/bits/stdlib-float.h
new file mode 100644 (file)
index 0000000..c3bbd04
--- /dev/null
@@ -0,0 +1,31 @@
+/* Floating-point inline functions for stdlib.h.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__BEGIN_NAMESPACE_STD
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+  return strtod (__nptr, (char **) NULL);
+}
+__END_NAMESPACE_STD
+#endif /* Optimizing and Inlining.  */
diff --git a/lib/libdss-include/include/bits/stdlib-ldbl.h b/lib/libdss-include/include/bits/stdlib-ldbl.h
new file mode 100644 (file)
index 0000000..acff499
--- /dev/null
@@ -0,0 +1,39 @@
+/* -mlong-double-64 compatibility mode for <stdlib.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib-ldbl.h> directly; use <stdlib.h> instead."
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR1_DECL (strtold, strtod)
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+#endif
+
+#ifdef __USE_MISC
+__LDBL_REDIR1_DECL (qecvt, ecvt)
+__LDBL_REDIR1_DECL (qfcvt, fcvt)
+__LDBL_REDIR1_DECL (qgcvt, gcvt)
+__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
+__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+#endif
diff --git a/lib/libdss-include/include/bits/stdlib.h b/lib/libdss-include/include/bits/stdlib.h
new file mode 100644 (file)
index 0000000..20fe986
--- /dev/null
@@ -0,0 +1,155 @@
+/* Checking macros for stdlib functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (const char *__restrict __name,
+                            char *__restrict __resolved,
+                            size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+                            (const char *__restrict __name,
+                             char *__restrict __resolved), realpath) __wur;
+extern char *__REDIRECT_NTH (__realpath_chk_warn,
+                            (const char *__restrict __name,
+                             char *__restrict __resolved,
+                             size_t __resolvedlen), __realpath_chk) __wur
+     __warnattr ("second argument of realpath must be either NULL or at "
+                "least PATH_MAX bytes long buffer");
+
+__fortify_function __wur char *
+__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
+{
+  if (__bos (__resolved) != (size_t) -1)
+    {
+#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
+      if (__bos (__resolved) < PATH_MAX)
+       return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
+#endif
+      return __realpath_chk (__name, __resolved, __bos (__resolved));
+    }
+
+  return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+                                              size_t __buflen), ptsname_r)
+     __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
+                          (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal), __ptsname_r_chk)
+     __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
+                                "size of buf");
+
+__fortify_function int
+__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+      if (__buflen > __bos (__buf))
+       return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+    }
+  return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+  __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+                          wctomb) __wur;
+
+__fortify_function __wur int
+__NTH (wctomb (char *__s, wchar_t __wchar))
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __STDLIB_MB_LEN_MAX    16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+    return __wctomb_chk (__s, __wchar, __bos (__s));
+  return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+                             const char *__restrict __src,
+                             size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbstowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char *__restrict __src,
+                              size_t __len), mbstowcs);
+extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char *__restrict __src,
+                              size_t __len, size_t __dstlen), __mbstowcs_chk)
+     __warnattr ("mbstowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
+                size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbstowcs_chk (__dst, __src, __len,
+                              __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbstowcs_chk_warn (__dst, __src, __len,
+                                    __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+                             const wchar_t *__restrict __src,
+                             size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcstombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t *__restrict __src,
+                              size_t __len), wcstombs);
+extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t *__restrict __src,
+                              size_t __len, size_t __dstlen), __wcstombs_chk)
+     __warnattr ("wcstombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
+                size_t __len))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
+      if (__len > __bos (__dst))
+       return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
+    }
+  return __wcstombs_alias (__dst, __src, __len);
+}
diff --git a/lib/libdss-include/include/bits/string.h b/lib/libdss-include/include/bits/string.h
new file mode 100644 (file)
index 0000000..0a508f7
--- /dev/null
@@ -0,0 +1,24 @@
+/* Optimized, inlined string functions.  AArch64 version.
+   Copyright (C) 2015-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string.h> directly; include <string.h> instead."
+#endif
+
+/* AArch64 uses the aligned string inline ABI.  */
+#define _STRING_INLINE_unaligned 0
diff --git a/lib/libdss-include/include/bits/string2.h b/lib/libdss-include/include/bits/string2.h
new file mode 100644 (file)
index 0000000..0dc51e5
--- /dev/null
@@ -0,0 +1,1329 @@
+/* Machine-independant string function optimizations.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string2.h> directly; include <string.h> instead."
+#endif
+
+#ifndef __NO_STRING_INLINES
+
+/* Unlike the definitions in the header <bits/string.h> the
+   definitions contained here are not optimized down to assembler
+   level.  Those optimizations are not always a good idea since this
+   means the code size increases a lot.  Instead the definitions here
+   optimize some functions in a way which do not dramatically
+   increase the code size and which do not use assembler.  The main
+   trick is to use GCC's `__builtin_constant_p' function.
+
+   Every function XXX which has a defined version in
+   <bits/string.h> must be accompanied by a symbol _HAVE_STRING_ARCH_XXX
+   to make sure we don't get redefinitions.
+
+   We must use here macros instead of inline functions since the
+   trick won't work with the latter.  */
+
+#ifndef __STRING_INLINE
+# ifdef __cplusplus
+#  define __STRING_INLINE inline
+# else
+#  define __STRING_INLINE __extern_inline
+# endif
+#endif
+
+#if _STRING_INLINE_unaligned
+/* If we can do unaligned memory accesses we must know the endianess.  */
+# include <endian.h>
+# include <bits/types.h>
+
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define __STRING2_SMALL_GET16(src, idx) \
+     (((const unsigned char *) (const char *) (src))[idx + 1] << 8           \
+      | ((const unsigned char *) (const char *) (src))[idx])
+#  define __STRING2_SMALL_GET32(src, idx) \
+     (((((const unsigned char *) (const char *) (src))[idx + 3] << 8         \
+       | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8       \
+       | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8       \
+      | ((const unsigned char *) (const char *) (src))[idx])
+# else
+#  define __STRING2_SMALL_GET16(src, idx) \
+     (((const unsigned char *) (const char *) (src))[idx] << 8               \
+      | ((const unsigned char *) (const char *) (src))[idx + 1])
+#  define __STRING2_SMALL_GET32(src, idx) \
+     (((((const unsigned char *) (const char *) (src))[idx] << 8             \
+       | ((const unsigned char *) (const char *) (src))[idx + 1]) << 8       \
+       | ((const unsigned char *) (const char *) (src))[idx + 2]) << 8       \
+      | ((const unsigned char *) (const char *) (src))[idx + 3])
+# endif
+#else
+/* These are a few types we need for the optimizations if we cannot
+   use unaligned memory accesses.  */
+# define __STRING2_COPY_TYPE(N) \
+  typedef struct { unsigned char __arr[N]; }                                 \
+    __attribute__ ((__packed__)) __STRING2_COPY_ARR##N
+__STRING2_COPY_TYPE (2);
+__STRING2_COPY_TYPE (3);
+__STRING2_COPY_TYPE (4);
+__STRING2_COPY_TYPE (5);
+__STRING2_COPY_TYPE (6);
+__STRING2_COPY_TYPE (7);
+__STRING2_COPY_TYPE (8);
+# undef __STRING2_COPY_TYPE
+#endif
+
+/* Dereferencing a pointer arg to run sizeof on it fails for the void
+   pointer case, so we use this instead.
+   Note that __x is evaluated twice. */
+#define __string2_1bptr_p(__x) \
+  ((size_t)(const void *)((__x) + 1) - (size_t)(const void *)(__x) == 1)
+
+/* Set N bytes of S to C.  */
+#if !defined _HAVE_STRING_ARCH_memset
+# if !__GNUC_PREREQ (3, 0)
+#  if _STRING_INLINE_unaligned
+#   define memset(s, c, n) \
+  (__extension__ (__builtin_constant_p (n) && (n) <= 16                              \
+                 ? ((n) == 1                                                 \
+                    ? __memset_1 (s, c)                                      \
+                    : __memset_gc (s, c, n))                                 \
+                 : (__builtin_constant_p (c) && (c) == '\0'                  \
+                    ? ({ void *__s = (s); __bzero (__s, n); __s; })          \
+                    : memset (s, c, n))))
+
+#   define __memset_1(s, c) ({ void *__s = (s);                                      \
+                           *((__uint8_t *) __s) = (__uint8_t) c; __s; })
+
+#   define __memset_gc(s, c, n) \
+  ({ void *__s = (s);                                                        \
+     union {                                                                 \
+       unsigned int __ui;                                                    \
+       unsigned short int __usi;                                             \
+       unsigned char __uc;                                                   \
+     } *__u = __s;                                                           \
+     __uint8_t __c = (__uint8_t) (c);                                        \
+                                                                             \
+     /* This `switch' statement will be removed at compile-time.  */         \
+     switch ((unsigned int) (n))                                             \
+       {                                                                     \
+       case 15:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 11:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 7:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 3:                                                               \
+        __u->__usi = (unsigned short int) __c * 0x0101;                      \
+        __u = __extension__ ((void *) __u + 2);                              \
+        __u->__uc = (unsigned char) __c;                                     \
+        break;                                                               \
+                                                                             \
+       case 14:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 10:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 6:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 2:                                                               \
+        __u->__usi = (unsigned short int) __c * 0x0101;                      \
+        break;                                                               \
+                                                                             \
+       case 13:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 9:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 5:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 1:                                                               \
+        __u->__uc = (unsigned char) __c;                                     \
+        break;                                                               \
+                                                                             \
+       case 16:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 12:                                                                      \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 8:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+        __u = __extension__ ((void *) __u + 4);                              \
+       case 4:                                                               \
+        __u->__ui = __c * 0x01010101;                                        \
+       case 0:                                                               \
+        break;                                                               \
+       }                                                                     \
+                                                                             \
+     __s; })
+#  else
+#   define memset(s, c, n) \
+  (__extension__ (__builtin_constant_p (c) && (c) == '\0'                    \
+                 ? ({ void *__s = (s); __bzero (__s, n); __s; })             \
+                 : memset (s, c, n)))
+#  endif
+# endif
+
+/* GCC < 3.0 optimizes memset(s, 0, n) but not bzero(s, n).
+   The optimization is broken before EGCS 1.1.
+   GCC 3.0+ has __builtin_bzero as well, but at least till GCC 3.4
+   if it decides to call the library function, it calls memset
+   and not bzero.  */
+# if __GNUC_PREREQ (2, 91)
+#  define __bzero(s, n) __builtin_memset (s, '\0', n)
+# endif
+
+#endif
+
+
+/* Copy N bytes from SRC to DEST, returning pointer to byte following the
+   last copied.  */
+#ifdef __USE_GNU
+# if !defined _HAVE_STRING_ARCH_mempcpy || defined _FORCE_INLINES
+#  ifndef _HAVE_STRING_ARCH_mempcpy
+#   if __GNUC_PREREQ (3, 4)
+#    define __mempcpy(dest, src, n) __builtin_mempcpy (dest, src, n)
+#   elif __GNUC_PREREQ (3, 0)
+#    define __mempcpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 && __string2_1bptr_p (src) && n <= 8                        \
+                 ? __builtin_memcpy (dest, src, n) + (n)                     \
+                 : __mempcpy (dest, src, n)))
+#   else
+#    define __mempcpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 && __string2_1bptr_p (src) && n <= 8                        \
+                 ? __mempcpy_small (dest, __mempcpy_args (src), n)           \
+                 : __mempcpy (dest, src, n)))
+#   endif
+/* In glibc we use this function frequently but for namespace reasons
+   we have to use the name `__mempcpy'.  */
+#   define mempcpy(dest, src, n) __mempcpy (dest, src, n)
+#  endif
+
+#  if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+#   if _STRING_INLINE_unaligned
+#    ifndef _FORCE_INLINES
+#     define __mempcpy_args(src) \
+     ((const char *) (src))[0], ((const char *) (src))[2],                   \
+     ((const char *) (src))[4], ((const char *) (src))[6],                   \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#    endif
+__STRING_INLINE void *__mempcpy_small (void *, char, char, char, char,
+                                      __uint16_t, __uint16_t, __uint32_t,
+                                      __uint32_t, size_t);
+__STRING_INLINE void *
+__mempcpy_small (void *__dest1,
+                char __src0_1, char __src2_1, char __src4_1, char __src6_1,
+                __uint16_t __src0_2, __uint16_t __src4_2,
+                __uint32_t __src0_4, __uint32_t __src4_4,
+                size_t __srclen)
+{
+  union {
+    __uint32_t __ui;
+    __uint16_t __usi;
+    unsigned char __uc;
+    unsigned char __c;
+  } *__u = __dest1;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = __src0_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__c = __src2_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__c = __src4_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__c = __src6_1;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      __u = __extension__ ((void *) __u + 4);
+      break;
+    }
+  return (void *) __u;
+}
+#   else
+#    ifndef _FORCE_INLINES
+#     define __mempcpy_args(src) \
+     ((const char *) (src))[0],                                                      \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1] } }),         \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3] } }),          \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5] } }),          \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6] } }),                                     \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], ((const char *) (src))[7] } })
+#    endif
+__STRING_INLINE void *__mempcpy_small (void *, char, __STRING2_COPY_ARR2,
+                                      __STRING2_COPY_ARR3,
+                                      __STRING2_COPY_ARR4,
+                                      __STRING2_COPY_ARR5,
+                                      __STRING2_COPY_ARR6,
+                                      __STRING2_COPY_ARR7,
+                                      __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE void *
+__mempcpy_small (void *__dest, char __src1,
+                __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+                __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+                __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+                __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = __src1;
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+    }
+  return __extension__ ((void *) __u + __srclen);
+}
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* Return pointer to C in S.  */
+#ifndef _HAVE_STRING_ARCH_strchr
+extern void *__rawmemchr (const void *__s, int __c);
+# if __GNUC_PREREQ (3, 2)
+#  define strchr(s, c) \
+  (__extension__ (__builtin_constant_p (c) && !__builtin_constant_p (s)              \
+                 && (c) == '\0'                                              \
+                 ? (char *) __rawmemchr (s, c)                               \
+                 : __builtin_strchr (s, c)))
+# else
+#  define strchr(s, c) \
+  (__extension__ (__builtin_constant_p (c) && (c) == '\0'                    \
+                 ? (char *) __rawmemchr (s, c)                               \
+                 : strchr (s, c)))
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if (!defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)) \
+    || defined _FORCE_INLINES
+# if !defined _HAVE_STRING_ARCH_strcpy && !__GNUC_PREREQ (3, 0)
+#  define strcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __strcpy_small (dest, __strcpy_args (src),             \
+                                      strlen (src) + 1)                      \
+                    : (char *) memcpy (dest, src, strlen (src) + 1))         \
+                 : strcpy (dest, src)))
+# endif
+
+# if _STRING_INLINE_unaligned
+#  ifndef _FORCE_INLINES
+#   define __strcpy_args(src) \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#  endif
+__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t,
+                                     __uint32_t, __uint32_t, size_t);
+__STRING_INLINE char *
+__strcpy_small (char *__dest,
+               __uint16_t __src0_2, __uint16_t __src4_2,
+               __uint32_t __src0_4, __uint32_t __src4_4,
+               size_t __srclen)
+{
+  union {
+    __uint32_t __ui;
+    __uint16_t __usi;
+    unsigned char __uc;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__uc = '\0';
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__uc = '\0';
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      break;
+    }
+  return __dest;
+}
+# else
+#  ifndef _FORCE_INLINES
+#   define __strcpy_args(src) \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], '\0' } }),                                      \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], '\0' } })
+#  endif
+__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2,
+                                     __STRING2_COPY_ARR3,
+                                     __STRING2_COPY_ARR4,
+                                     __STRING2_COPY_ARR5,
+                                     __STRING2_COPY_ARR6,
+                                     __STRING2_COPY_ARR7,
+                                     __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE char *
+__strcpy_small (char *__dest,
+               __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+               __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+               __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+               __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = '\0';
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+  }
+  return __dest;
+}
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning pointer to final NUL byte.  */
+#ifdef __USE_GNU
+# if !defined _HAVE_STRING_ARCH_stpcpy || defined _FORCE_INLINES
+#  ifndef _HAVE_STRING_ARCH_stpcpy
+#   if __GNUC_PREREQ (3, 4)
+#    define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
+#   elif __GNUC_PREREQ (3, 0)
+#    define __stpcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __builtin_strcpy (dest, src) + strlen (src)            \
+                    : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \
+                       - 1))                                                 \
+                 : __stpcpy (dest, src)))
+#   else
+#    define __stpcpy(dest, src) \
+  (__extension__ (__builtin_constant_p (src)                                 \
+                 ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8         \
+                    ? __stpcpy_small (dest, __stpcpy_args (src),             \
+                                      strlen (src) + 1)                      \
+                    : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \
+                       - 1))                                                 \
+                 : __stpcpy (dest, src)))
+#   endif
+/* In glibc we use this function frequently but for namespace reasons
+   we have to use the name `__stpcpy'.  */
+#   define stpcpy(dest, src) __stpcpy (dest, src)
+#  endif
+
+#  if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
+#   if _STRING_INLINE_unaligned
+#    ifndef _FORCE_INLINES
+#     define __stpcpy_args(src) \
+     __extension__ __STRING2_SMALL_GET16 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET16 (src, 4),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 0),                           \
+     __extension__ __STRING2_SMALL_GET32 (src, 4)
+#    endif
+__STRING_INLINE char *__stpcpy_small (char *, __uint16_t, __uint16_t,
+                                     __uint32_t, __uint32_t, size_t);
+__STRING_INLINE char *
+__stpcpy_small (char *__dest,
+               __uint16_t __src0_2, __uint16_t __src4_2,
+               __uint32_t __src0_4, __uint32_t __src4_4,
+               size_t __srclen)
+{
+  union {
+    unsigned int __ui;
+    unsigned short int __usi;
+    unsigned char __uc;
+    char __c;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__uc = '\0';
+      break;
+    case 2:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 3:
+      __u->__usi = __src0_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 4:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 3);
+      break;
+    case 5:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__uc = '\0';
+      break;
+    case 6:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 1);
+      break;
+    case 7:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__usi = __src4_2;
+      __u = __extension__ ((void *) __u + 2);
+      __u->__uc = '\0';
+      break;
+    case 8:
+      __u->__ui = __src0_4;
+      __u = __extension__ ((void *) __u + 4);
+      __u->__ui = __src4_4;
+      __u = __extension__ ((void *) __u + 3);
+      break;
+    }
+  return &__u->__c;
+}
+#   else
+#    ifndef _FORCE_INLINES
+#     define __stpcpy_args(src) \
+     __extension__ ((__STRING2_COPY_ARR2)                                    \
+      { { ((const char *) (src))[0], '\0' } }),                                      \
+     __extension__ ((__STRING2_COPY_ARR3)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR4)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR5)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR6)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], '\0' } }),                               \
+     __extension__ ((__STRING2_COPY_ARR7)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         '\0' } }),                                                          \
+     __extension__ ((__STRING2_COPY_ARR8)                                    \
+      { { ((const char *) (src))[0], ((const char *) (src))[1],                      \
+         ((const char *) (src))[2], ((const char *) (src))[3],               \
+         ((const char *) (src))[4], ((const char *) (src))[5],               \
+         ((const char *) (src))[6], '\0' } })
+#    endif
+__STRING_INLINE char *__stpcpy_small (char *, __STRING2_COPY_ARR2,
+                                     __STRING2_COPY_ARR3,
+                                     __STRING2_COPY_ARR4,
+                                     __STRING2_COPY_ARR5,
+                                     __STRING2_COPY_ARR6,
+                                     __STRING2_COPY_ARR7,
+                                     __STRING2_COPY_ARR8, size_t);
+__STRING_INLINE char *
+__stpcpy_small (char *__dest,
+               __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
+               __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
+               __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
+               __STRING2_COPY_ARR8 __src8, size_t __srclen)
+{
+  union {
+    char __c;
+    __STRING2_COPY_ARR2 __sca2;
+    __STRING2_COPY_ARR3 __sca3;
+    __STRING2_COPY_ARR4 __sca4;
+    __STRING2_COPY_ARR5 __sca5;
+    __STRING2_COPY_ARR6 __sca6;
+    __STRING2_COPY_ARR7 __sca7;
+    __STRING2_COPY_ARR8 __sca8;
+  } *__u = (void *) __dest;
+  switch ((unsigned int) __srclen)
+    {
+    case 1:
+      __u->__c = '\0';
+      break;
+    case 2:
+      __extension__ __u->__sca2 = __src2;
+      break;
+    case 3:
+      __extension__ __u->__sca3 = __src3;
+      break;
+    case 4:
+      __extension__ __u->__sca4 = __src4;
+      break;
+    case 5:
+      __extension__ __u->__sca5 = __src5;
+      break;
+    case 6:
+      __extension__ __u->__sca6 = __src6;
+      break;
+    case 7:
+      __extension__ __u->__sca7 = __src7;
+      break;
+    case 8:
+      __extension__ __u->__sca8 = __src8;
+      break;
+  }
+  return __dest + __srclen - 1;
+}
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST.  */
+#ifndef _HAVE_STRING_ARCH_strncpy
+# if __GNUC_PREREQ (3, 2)
+#  define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)
+# else
+#  define strncpy(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 ? (strlen (src) + 1 >= ((size_t) (n))                       \
+                    ? (char *) memcpy (dest, src, n)                         \
+                    : strncpy (dest, src, n))                                \
+                 : strncpy (dest, src, n)))
+# endif
+#endif
+
+
+/* Append no more than N characters from SRC onto DEST.  */
+#ifndef _HAVE_STRING_ARCH_strncat
+# ifdef _USE_STRING_ARCH_strchr
+#  define strncat(dest, src, n) \
+  (__extension__ ({ char *__dest = (dest);                                   \
+                   __builtin_constant_p (src) && __builtin_constant_p (n)    \
+                   ? (strlen (src) < ((size_t) (n))                          \
+                      ? strcat (__dest, src)                                 \
+                      : (*((char *) __mempcpy (strchr (__dest, '\0'),        \
+                                               src, n)) = '\0', __dest))     \
+                   : strncat (dest, src, n); }))
+# elif __GNUC_PREREQ (3, 2)
+#  define strncat(dest, src, n) __builtin_strncat (dest, src, n)
+# else
+#  define strncat(dest, src, n) \
+  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \
+                 ? (strlen (src) < ((size_t) (n))                            \
+                    ? strcat (dest, src)                                     \
+                    : strncat (dest, src, n))                                \
+                 : strncat (dest, src, n)))
+# endif
+#endif
+
+
+/* Compare characters of S1 and S2.  */
+#ifndef _HAVE_STRING_ARCH_strcmp
+# if __GNUC_PREREQ (3, 2)
+#  define strcmp(s1, s2) \
+  __extension__                                                                      \
+  ({ size_t __s1_len, __s2_len;                                                      \
+     (__builtin_constant_p (s1) && __builtin_constant_p (s2)                 \
+      && (__s1_len = __builtin_strlen (s1), __s2_len = __builtin_strlen (s2), \
+         (!__string2_1bptr_p (s1) || __s1_len >= 4)                          \
+         && (!__string2_1bptr_p (s2) || __s2_len >= 4))                      \
+      ? __builtin_strcmp (s1, s2)                                            \
+      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)                 \
+        && (__s1_len = __builtin_strlen (s1), __s1_len < 4)                  \
+        ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           ? __builtin_strcmp (s1, s2)                                       \
+           : __strcmp_cg (s1, s2, __s1_len))                                 \
+        : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           && (__s2_len = __builtin_strlen (s2), __s2_len < 4)               \
+           ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)            \
+              ? __builtin_strcmp (s1, s2)                                    \
+              : __strcmp_gc (s1, s2, __s2_len))                              \
+           : __builtin_strcmp (s1, s2)))); })
+# else
+#  define strcmp(s1, s2) \
+  __extension__                                                                      \
+  ({ size_t __s1_len, __s2_len;                                                      \
+     (__builtin_constant_p (s1) && __builtin_constant_p (s2)                 \
+      && (__s1_len = strlen (s1), __s2_len = strlen (s2),                    \
+         (!__string2_1bptr_p (s1) || __s1_len >= 4)                          \
+         && (!__string2_1bptr_p (s2) || __s2_len >= 4))                      \
+      ? memcmp ((const char *) (s1), (const char *) (s2),                    \
+               (__s1_len < __s2_len ? __s1_len : __s2_len) + 1)              \
+      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)                 \
+        && (__s1_len = strlen (s1), __s1_len < 4)                            \
+        ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           ? __strcmp_cc (s1, s2, __s1_len)                                  \
+           : __strcmp_cg (s1, s2, __s1_len))                                 \
+        : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)               \
+           && (__s2_len = strlen (s2), __s2_len < 4)                         \
+           ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)            \
+              ? __strcmp_cc (s1, s2, __s2_len)                               \
+              : __strcmp_gc (s1, s2, __s2_len))                              \
+           : strcmp (s1, s2)))); })
+# endif
+
+# define __strcmp_cc(s1, s2, l) \
+  (__extension__ ({ int __result =                                           \
+                     (((const unsigned char *) (const char *) (s1))[0]       \
+                      - ((const unsigned char *) (const char *)(s2))[0]);    \
+                   if (l > 0 && __result == 0)                               \
+                     {                                                       \
+                       __result = (((const unsigned char *)                  \
+                                    (const char *) (s1))[1]                  \
+                                   - ((const unsigned char *)                \
+                                      (const char *) (s2))[1]);              \
+                       if (l > 1 && __result == 0)                           \
+                         {                                                   \
+                           __result =                                        \
+                             (((const unsigned char *)                       \
+                               (const char *) (s1))[2]                       \
+                              - ((const unsigned char *)                     \
+                                 (const char *) (s2))[2]);                   \
+                           if (l > 2 && __result == 0)                       \
+                             __result =                                      \
+                               (((const unsigned char *)                     \
+                                 (const char *) (s1))[3]                     \
+                                - ((const unsigned char *)                   \
+                                   (const char *) (s2))[3]);                 \
+                         }                                                   \
+                     }                                                       \
+                   __result; }))
+
+# define __strcmp_cg(s1, s2, l1) \
+  (__extension__ ({ const unsigned char *__s2 =                                      \
+                     (const unsigned char *) (const char *) (s2);            \
+                   int __result =                                            \
+                     (((const unsigned char *) (const char *) (s1))[0]       \
+                      - __s2[0]);                                            \
+                   if (l1 > 0 && __result == 0)                              \
+                     {                                                       \
+                       __result = (((const unsigned char *)                  \
+                                    (const char *) (s1))[1] - __s2[1]);      \
+                       if (l1 > 1 && __result == 0)                          \
+                         {                                                   \
+                           __result = (((const unsigned char *)              \
+                                        (const char *) (s1))[2] - __s2[2]);  \
+                           if (l1 > 2 && __result == 0)                      \
+                             __result = (((const unsigned char *)            \
+                                         (const char *)  (s1))[3]            \
+                                         - __s2[3]);                         \
+                         }                                                   \
+                     }                                                       \
+                   __result; }))
+
+# define __strcmp_gc(s1, s2, l2) (- __strcmp_cg (s2, s1, l2))
+#endif
+
+
+/* Compare N characters of S1 and S2.  */
+#ifndef _HAVE_STRING_ARCH_strncmp
+# define strncmp(s1, s2, n)                                                  \
+  (__extension__ (__builtin_constant_p (n)                                   \
+                 && ((__builtin_constant_p (s1)                              \
+                      && strlen (s1) < ((size_t) (n)))                       \
+                     || (__builtin_constant_p (s2)                           \
+                         && strlen (s2) < ((size_t) (n))))                   \
+                 ? strcmp (s1, s2) : strncmp (s1, s2, n)))
+#endif
+
+
+/* Return the length of the initial segment of S which
+   consists entirely of characters not in REJECT.  */
+#if !defined _HAVE_STRING_ARCH_strcspn || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strcspn
+#  if __GNUC_PREREQ (3, 2)
+#   define strcspn(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strcspn (s, reject)                                      \
+        : ((__r0 = ((const char *) (reject))[0], __r0 == '\0')               \
+           ? strlen (s)                                                      \
+           : ((__r1 = ((const char *) (reject))[1], __r1 == '\0')            \
+              ? __strcspn_c1 (s, __r0)                                       \
+              : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')         \
+                 ? __strcspn_c2 (s, __r0, __r1)                              \
+                 : (((const char *) (reject))[3] == '\0'                     \
+                    ? __strcspn_c3 (s, __r0, __r1, __r2)                     \
+                    : __builtin_strcspn (s, reject))))))                     \
+      : __builtin_strcspn (s, reject)); })
+#  else
+#   define strcspn(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      ? ((__r0 = ((const char *) (reject))[0], __r0 == '\0')                 \
+        ? strlen (s)                                                         \
+        : ((__r1 = ((const char *) (reject))[1], __r1 == '\0')               \
+           ? __strcspn_c1 (s, __r0)                                          \
+           : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')            \
+              ? __strcspn_c2 (s, __r0, __r1)                                 \
+              : (((const char *) (reject))[3] == '\0'                        \
+                 ? __strcspn_c3 (s, __r0, __r1, __r2)                        \
+                 : strcspn (s, reject)))))                                   \
+      : strcspn (s, reject)); })
+#  endif
+# endif
+
+__STRING_INLINE size_t __strcspn_c1 (const char *__s, int __reject);
+__STRING_INLINE size_t
+__strcspn_c1 (const char *__s, int __reject)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strcspn_c2 (const char *__s, int __reject1,
+                                    int __reject2);
+__STRING_INLINE size_t
+__strcspn_c2 (const char *__s, int __reject1, int __reject2)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+        && __s[__result] != __reject2)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strcspn_c3 (const char *__s, int __reject1,
+                                    int __reject2, int __reject3);
+__STRING_INLINE size_t
+__strcspn_c3 (const char *__s, int __reject1, int __reject2,
+             int __reject3)
+{
+  size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+        && __s[__result] != __reject2 && __s[__result] != __reject3)
+    ++__result;
+  return __result;
+}
+#endif
+
+
+/* Return the length of the initial segment of S which
+   consists entirely of characters in ACCEPT.  */
+#if !defined _HAVE_STRING_ARCH_strspn || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strspn
+#  if __GNUC_PREREQ (3, 2)
+#   define strspn(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strspn (s, accept)                                       \
+        : ((__a0 = ((const char *) (accept))[0], __a0 == '\0')               \
+           ? ((void) (s), (size_t) 0)                                        \
+           : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')            \
+              ? __strspn_c1 (s, __a0)                                        \
+              : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')         \
+                 ? __strspn_c2 (s, __a0, __a1)                               \
+                 : (((const char *) (accept))[3] == '\0'                     \
+                    ? __strspn_c3 (s, __a0, __a1, __a2)                      \
+                    : __builtin_strspn (s, accept))))))                      \
+      : __builtin_strspn (s, accept)); })
+#  else
+#   define strspn(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__a0 = ((const char *) (accept))[0], __a0 == '\0')                 \
+        ? ((void) (s), (size_t) 0)                                           \
+        : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')               \
+           ? __strspn_c1 (s, __a0)                                           \
+           : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')            \
+              ? __strspn_c2 (s, __a0, __a1)                                  \
+              : (((const char *) (accept))[3] == '\0'                        \
+                 ? __strspn_c3 (s, __a0, __a1, __a2)                         \
+                 : strspn (s, accept)))))                                    \
+      : strspn (s, accept)); })
+#  endif
+# endif
+
+__STRING_INLINE size_t __strspn_c1 (const char *__s, int __accept);
+__STRING_INLINE size_t
+__strspn_c1 (const char *__s, int __accept)
+{
+  size_t __result = 0;
+  /* Please note that __accept never can be '\0'.  */
+  while (__s[__result] == __accept)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strspn_c2 (const char *__s, int __accept1,
+                                   int __accept2);
+__STRING_INLINE size_t
+__strspn_c2 (const char *__s, int __accept1, int __accept2)
+{
+  size_t __result = 0;
+  /* Please note that __accept1 and __accept2 never can be '\0'.  */
+  while (__s[__result] == __accept1 || __s[__result] == __accept2)
+    ++__result;
+  return __result;
+}
+
+__STRING_INLINE size_t __strspn_c3 (const char *__s, int __accept1,
+                                   int __accept2, int __accept3);
+__STRING_INLINE size_t
+__strspn_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+{
+  size_t __result = 0;
+  /* Please note that __accept1 to __accept3 never can be '\0'.  */
+  while (__s[__result] == __accept1 || __s[__result] == __accept2
+        || __s[__result] == __accept3)
+    ++__result;
+  return __result;
+}
+#endif
+
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if !defined _HAVE_STRING_ARCH_strpbrk || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strpbrk
+#  if __GNUC_PREREQ (3, 2)
+#   define strpbrk(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__builtin_constant_p (s) && __string2_1bptr_p (s))                 \
+        ? __builtin_strpbrk (s, accept)                                      \
+        : ((__a0 = ((const char  *) (accept))[0], __a0 == '\0')              \
+           ? ((void) (s), (char *) NULL)                                     \
+           : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')            \
+              ? __builtin_strchr (s, __a0)                                   \
+              : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')         \
+                 ? __strpbrk_c2 (s, __a0, __a1)                              \
+                 : (((const char *) (accept))[3] == '\0'                     \
+                    ? __strpbrk_c3 (s, __a0, __a1, __a2)                     \
+                    : __builtin_strpbrk (s, accept))))))                     \
+      : __builtin_strpbrk (s, accept)); })
+#  else
+#   define strpbrk(s, accept) \
+  __extension__                                                                      \
+  ({ char __a0, __a1, __a2;                                                  \
+     (__builtin_constant_p (accept) && __string2_1bptr_p (accept)            \
+      ? ((__a0 = ((const char  *) (accept))[0], __a0 == '\0')                \
+        ? ((void) (s), (char *) NULL)                                        \
+        : ((__a1 = ((const char *) (accept))[1], __a1 == '\0')               \
+           ? strchr (s, __a0)                                                \
+           : ((__a2 = ((const char *) (accept))[2], __a2 == '\0')            \
+              ? __strpbrk_c2 (s, __a0, __a1)                                 \
+              : (((const char *) (accept))[3] == '\0'                        \
+                 ? __strpbrk_c3 (s, __a0, __a1, __a2)                        \
+                 : strpbrk (s, accept)))))                                   \
+      : strpbrk (s, accept)); })
+#  endif
+# endif
+
+__STRING_INLINE char *__strpbrk_c2 (const char *__s, int __accept1,
+                                   int __accept2);
+__STRING_INLINE char *
+__strpbrk_c2 (const char *__s, int __accept1, int __accept2)
+{
+  /* Please note that __accept1 and __accept2 never can be '\0'.  */
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
+    ++__s;
+  return *__s == '\0' ? NULL : (char *) (size_t) __s;
+}
+
+__STRING_INLINE char *__strpbrk_c3 (const char *__s, int __accept1,
+                                   int __accept2, int __accept3);
+__STRING_INLINE char *
+__strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
+{
+  /* Please note that __accept1 to __accept3 never can be '\0'.  */
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
+        && *__s != __accept3)
+    ++__s;
+  return *__s == '\0' ? NULL : (char *) (size_t) __s;
+}
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  Newer gcc versions
+   do this itself.  */
+#if !defined _HAVE_STRING_ARCH_strstr && !__GNUC_PREREQ (2, 97)
+# define strstr(haystack, needle) \
+  (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
+                 ? (((const char *) (needle))[0] == '\0'                     \
+                    ? (char *) (size_t) (haystack)                           \
+                    : (((const char *) (needle))[1] == '\0'                  \
+                       ? strchr (haystack,                                   \
+                                 ((const char *) (needle))[0])               \
+                       : strstr (haystack, needle)))                         \
+                 : strstr (haystack, needle)))
+#endif
+
+
+#if !defined _HAVE_STRING_ARCH_strtok_r || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strtok_r
+#  define __strtok_r(s, sep, nextp) \
+  (__extension__ (__builtin_constant_p (sep) && __string2_1bptr_p (sep)              \
+                 && ((const char *) (sep))[0] != '\0'                        \
+                 && ((const char *) (sep))[1] == '\0'                        \
+                 ? __strtok_r_1c (s, ((const char *) (sep))[0], nextp)       \
+                 : __strtok_r (s, sep, nextp)))
+# endif
+
+__STRING_INLINE char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
+__STRING_INLINE char *
+__strtok_r_1c (char *__s, char __sep, char **__nextp)
+{
+  char *__result;
+  if (__s == NULL)
+    __s = *__nextp;
+  while (*__s == __sep)
+    ++__s;
+  __result = NULL;
+  if (*__s != '\0')
+    {
+      __result = __s++;
+      while (*__s != '\0')
+       if (*__s++ == __sep)
+         {
+           __s[-1] = '\0';
+           break;
+         }
+    }
+  *__nextp = __s;
+  return __result;
+}
+# ifdef __USE_POSIX
+#  define strtok_r(s, sep, nextp) __strtok_r (s, sep, nextp)
+# endif
+#endif
+
+
+#if !defined _HAVE_STRING_ARCH_strsep || defined _FORCE_INLINES
+# ifndef _HAVE_STRING_ARCH_strsep
+
+extern char *__strsep_g (char **__stringp, const char *__delim);
+#  define __strsep(s, reject) \
+  __extension__                                                                      \
+  ({ char __r0, __r1, __r2;                                                  \
+     (__builtin_constant_p (reject) && __string2_1bptr_p (reject)            \
+      && (__r0 = ((const char *) (reject))[0],                               \
+         ((const char *) (reject))[0] != '\0')                               \
+      ? ((__r1 = ((const char *) (reject))[1],                               \
+        ((const char *) (reject))[1] == '\0')                                \
+        ? __strsep_1c (s, __r0)                                              \
+        : ((__r2 = ((const char *) (reject))[2], __r2 == '\0')               \
+           ? __strsep_2c (s, __r0, __r1)                                     \
+           : (((const char *) (reject))[3] == '\0'                           \
+              ? __strsep_3c (s, __r0, __r1, __r2)                            \
+              : __strsep_g (s, reject))))                                    \
+      : __strsep_g (s, reject)); })
+# endif
+
+__STRING_INLINE char *__strsep_1c (char **__s, char __reject);
+__STRING_INLINE char *
+__strsep_1c (char **__s, char __reject)
+{
+  char *__retval = *__s;
+  if (__retval != NULL && (*__s = strchr (__retval, __reject)) != NULL)
+    *(*__s)++ = '\0';
+  return __retval;
+}
+
+__STRING_INLINE char *__strsep_2c (char **__s, char __reject1, char __reject2);
+__STRING_INLINE char *
+__strsep_2c (char **__s, char __reject1, char __reject2)
+{
+  char *__retval = *__s;
+  if (__retval != NULL)
+    {
+      char *__cp = __retval;
+      while (1)
+       {
+         if (*__cp == '\0')
+           {
+             __cp = NULL;
+         break;
+           }
+         if (*__cp == __reject1 || *__cp == __reject2)
+           {
+             *__cp++ = '\0';
+             break;
+           }
+         ++__cp;
+       }
+      *__s = __cp;
+    }
+  return __retval;
+}
+
+__STRING_INLINE char *__strsep_3c (char **__s, char __reject1, char __reject2,
+                                  char __reject3);
+__STRING_INLINE char *
+__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
+{
+  char *__retval = *__s;
+  if (__retval != NULL)
+    {
+      char *__cp = __retval;
+      while (1)
+       {
+         if (*__cp == '\0')
+           {
+             __cp = NULL;
+         break;
+           }
+         if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
+           {
+             *__cp++ = '\0';
+             break;
+           }
+         ++__cp;
+       }
+      *__s = __cp;
+    }
+  return __retval;
+}
+# ifdef __USE_MISC
+#  define strsep(s, reject) __strsep (s, reject)
+# endif
+#endif
+
+/* We need the memory allocation functions for inline strdup().
+   Referring to stdlib.h (even minimally) is not allowed
+   in any of the tight standards compliant modes.  */
+#ifdef __USE_MISC
+
+# if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup
+#  define __need_malloc_and_calloc
+#  include <stdlib.h>
+# endif
+
+# ifndef _HAVE_STRING_ARCH_strdup
+
+extern char *__strdup (const char *__string) __THROW __attribute_malloc__;
+#  define __strdup(s) \
+  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \
+                 ? (((const char *) (s))[0] == '\0'                          \
+                    ? (char *) calloc ((size_t) 1, (size_t) 1)               \
+                    : ({ size_t __len = strlen (s) + 1;                      \
+                         char *__retval = (char *) malloc (__len);           \
+                         if (__retval != NULL)                               \
+                           __retval = (char *) memcpy (__retval, s, __len);  \
+                         __retval; }))                                       \
+                 : __strdup (s)))
+
+#  if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+#   define strdup(s) __strdup (s)
+#  endif
+# endif
+
+# ifndef _HAVE_STRING_ARCH_strndup
+
+extern char *__strndup (const char *__string, size_t __n)
+     __THROW __attribute_malloc__;
+#  define __strndup(s, n) \
+  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \
+                 ? (((const char *) (s))[0] == '\0'                          \
+                    ? (char *) calloc ((size_t) 1, (size_t) 1)               \
+                    : ({ size_t __len = strlen (s) + 1;                      \
+                         size_t __n = (n);                                   \
+                         char *__retval;                                     \
+                         if (__n < __len)                                    \
+                           __len = __n + 1;                                  \
+                         __retval = (char *) malloc (__len);                 \
+                         if (__retval != NULL)                               \
+                           {                                                 \
+                             __retval[__len - 1] = '\0';                     \
+                             __retval = (char *) memcpy (__retval, s,        \
+                                                         __len - 1);         \
+                           }                                                 \
+                         __retval; }))                                       \
+                 : __strndup (s, n)))
+
+#  ifdef __USE_XOPEN2K8
+#   define strndup(s, n) __strndup (s, n)
+#  endif
+# endif
+
+#endif /* Use misc. or use GNU.  */
+
+#ifndef _FORCE_INLINES
+# undef __STRING_INLINE
+#endif
+
+#endif /* No string inlines.  */
diff --git a/lib/libdss-include/include/bits/string3.h b/lib/libdss-include/include/bits/string3.h
new file mode 100644 (file)
index 0000000..dd8db68
--- /dev/null
@@ -0,0 +1,157 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRING_H
+# error "Never use <bits/string3.h> directly; include <string.h> instead."
+#endif
+
+#if !__GNUC_PREREQ (5,0)
+__warndecl (__warn_memset_zero_len,
+           "memset used with constant zero length parameter; this could be due to transposed parameters");
+#endif
+
+#ifndef __cplusplus
+/* XXX This is temporarily.  We should not redefine any of the symbols
+   and instead integrate the error checking into the original
+   definitions.  */
+# undef memcpy
+# undef memmove
+# undef memset
+# undef strcat
+# undef strcpy
+# undef strncat
+# undef strncpy
+# ifdef __USE_GNU
+#  undef mempcpy
+#  undef stpcpy
+# endif
+# ifdef __USE_MISC
+#  undef bcopy
+#  undef bzero
+# endif
+#endif
+
+
+__fortify_function void *
+__NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
+              size_t __len))
+{
+  return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+__fortify_function void *
+__NTH (memmove (void *__dest, const void *__src, size_t __len))
+{
+  return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+#ifdef __USE_GNU
+__fortify_function void *
+__NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
+               size_t __len))
+{
+  return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
+}
+#endif
+
+
+/* The first two tests here help to catch a somewhat common problem
+   where the second and third parameter are transposed.  This is
+   especially problematic if the intended fill value is zero.  In this
+   case no work is done at all.  We detect these problems by referring
+   non-existing functions.  */
+__fortify_function void *
+__NTH (memset (void *__dest, int __ch, size_t __len))
+{
+  /* GCC-5.0 and newer implements these checks in the compiler, so we don't
+     need them here.  */
+#if !__GNUC_PREREQ (5,0)
+  if (__builtin_constant_p (__len) && __len == 0
+      && (!__builtin_constant_p (__ch) || __ch != 0))
+    {
+      __warn_memset_zero_len ();
+      return __dest;
+    }
+#endif
+  return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
+}
+
+#ifdef __USE_MISC
+__fortify_function void
+__NTH (bcopy (const void *__src, void *__dest, size_t __len))
+{
+  (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+}
+
+__fortify_function void
+__NTH (bzero (void *__dest, size_t __len))
+{
+  (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
+}
+#endif
+
+__fortify_function char *
+__NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
+}
+
+#ifdef __USE_GNU
+__fortify_function char *
+__NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
+}
+#endif
+
+
+__fortify_function char *
+__NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
+               size_t __len))
+{
+  return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
+}
+
+// XXX We have no corresponding builtin yet.
+extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
+                           size_t __destlen) __THROW;
+extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,
+                                              size_t __n), stpncpy);
+
+__fortify_function char *
+__NTH (stpncpy (char *__dest, const char *__src, size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __n > __bos (__dest)))
+    return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
+  return __stpncpy_alias (__dest, __src, __n);
+}
+
+
+__fortify_function char *
+__NTH (strcat (char *__restrict __dest, const char *__restrict __src))
+{
+  return __builtin___strcat_chk (__dest, __src, __bos (__dest));
+}
+
+
+__fortify_function char *
+__NTH (strncat (char *__restrict __dest, const char *__restrict __src,
+               size_t __len))
+{
+  return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
+}
diff --git a/lib/libdss-include/include/bits/stropts.h b/lib/libdss-include/include/bits/stropts.h
new file mode 100644 (file)
index 0000000..d419e52
--- /dev/null
@@ -0,0 +1,230 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+# error "Never include <bits/stropts.h> directly; use <stropts.h> instead."
+#endif
+
+#ifndef _BITS_STROPTS_H
+#define _BITS_STROPTS_H        1
+
+#include <bits/types.h>
+
+/* Macros used as `request' argument to `ioctl'.  */
+#define __SID          ('S' << 8)
+
+#define I_NREAD            (__SID | 1) /* Counts the number of data bytes in the data
+                                  block in the first message.  */
+#define I_PUSH     (__SID | 2) /* Push STREAMS module onto top of the current
+                                  STREAM, just below the STREAM head.  */
+#define I_POP      (__SID | 3) /* Remove STREAMS module from just below the
+                                  STREAM head.  */
+#define I_LOOK     (__SID | 4) /* Retrieve the name of the module just below
+                                  the STREAM head and place it in a character
+                                  string.  */
+#define I_FLUSH            (__SID | 5) /* Flush all input and/or output.  */
+#define I_SRDOPT    (__SID | 6)        /* Sets the read mode.  */
+#define I_GRDOPT    (__SID | 7)        /* Returns the current read mode setting.  */
+#define I_STR      (__SID | 8) /* Construct an internal STREAMS `ioctl'
+                                  message and send that message downstream. */
+#define I_SETSIG    (__SID | 9)        /* Inform the STREAM head that the process
+                                  wants the SIGPOLL signal issued.  */
+#define I_GETSIG    (__SID |10) /* Return the events for which the calling
+                                  process is currently registered to be sent
+                                  a SIGPOLL signal.  */
+#define I_FIND     (__SID |11) /* Compares the names of all modules currently
+                                  present in the STREAM to the name pointed to
+                                  by `arg'.  */
+#define I_LINK     (__SID |12) /* Connect two STREAMs.  */
+#define I_UNLINK    (__SID |13) /* Disconnects the two STREAMs.  */
+#define I_PEEK     (__SID |15) /* Allows a process to retrieve the information
+                                  in the first message on the STREAM head read
+                                  queue without taking the message off the
+                                  queue.  */
+#define I_FDINSERT  (__SID |16) /* Create a message from the specified
+                                  buffer(s), adds information about another
+                                  STREAM, and send the message downstream.  */
+#define I_SENDFD    (__SID |17) /* Requests the STREAM associated with `fildes'
+                                  to send a message, containing a file
+                                  pointer, to the STREAM head at the other end
+                                  of a STREAMS pipe.  */
+#define I_RECVFD    (__SID |14) /* Non-EFT definition.  */
+#define I_SWROPT    (__SID |19) /* Set the write mode.  */
+#define I_GWROPT    (__SID |20) /* Return the current write mode setting.  */
+#define I_LIST     (__SID |21) /* List all the module names on the STREAM, up
+                                  to and including the topmost driver name. */
+#define I_PLINK            (__SID |22) /* Connect two STREAMs with a persistent
+                                  link.  */
+#define I_PUNLINK   (__SID |23) /* Disconnect the two STREAMs that were
+                                  connected with a persistent link.  */
+#define I_FLUSHBAND (__SID |28) /* Flush only band specified.  */
+#define I_CKBAND    (__SID |29) /* Check if the message of a given priority
+                                  band exists on the STREAM head read
+                                  queue.  */
+#define I_GETBAND   (__SID |30) /* Return the priority band of the first
+                                  message on the STREAM head read queue.  */
+#define I_ATMARK    (__SID |31) /* See if the current message on the STREAM
+                                  head read queue is "marked" by some module
+                                  downstream.  */
+#define I_SETCLTIME (__SID |32) /* Set the time the STREAM head will delay when
+                                  a STREAM is closing and there is data on
+                                  the write queues.  */
+#define I_GETCLTIME (__SID |33) /* Get current value for closing timeout.  */
+#define I_CANPUT    (__SID |34) /* Check if a certain band is writable.  */
+
+
+/* Used in `I_LOOK' request.  */
+#define FMNAMESZ       8       /* compatibility w/UnixWare/Solaris.  */
+
+/* Flush options.  */
+#define FLUSHR         0x01    /* Flush read queues.  */
+#define FLUSHW         0x02    /* Flush write queues.  */
+#define FLUSHRW                0x03    /* Flush read and write queues.  */
+#ifdef __USE_GNU
+# define FLUSHBAND     0x04    /* Flush only specified band.  */
+#endif
+
+/* Possible arguments for `I_SETSIG'.  */
+#define S_INPUT                0x0001  /* A message, other than a high-priority
+                                  message, has arrived.  */
+#define S_HIPRI                0x0002  /* A high-priority message is present.  */
+#define S_OUTPUT       0x0004  /* The write queue for normal data is no longer
+                                  full.  */
+#define S_MSG          0x0008  /* A STREAMS signal message that contains the
+                                  SIGPOLL signal reaches the front of the
+                                  STREAM head read queue.  */
+#define S_ERROR                0x0010  /* Notification of an error condition.  */
+#define S_HANGUP       0x0020  /* Notification of a hangup.  */
+#define S_RDNORM       0x0040  /* A normal message has arrived.  */
+#define S_WRNORM       S_OUTPUT
+#define S_RDBAND       0x0080  /* A message with a non-zero priority has
+                                  arrived.  */
+#define S_WRBAND       0x0100  /* The write queue for a non-zero priority
+                                  band is no longer full.  */
+#define S_BANDURG      0x0200  /* When used in conjunction with S_RDBAND,
+                                  SIGURG is generated instead of SIGPOLL when
+                                  a priority message reaches the front of the
+                                  STREAM head read queue.  */
+
+/* Option for `I_PEEK'.  */
+#define RS_HIPRI       0x01    /* Only look for high-priority messages.  */
+
+/* Options for `I_SRDOPT'.  */
+#define RNORM          0x0000  /* Byte-STREAM mode, the default.  */
+#define RMSGD          0x0001  /* Message-discard mode.   */
+#define RMSGN          0x0002  /* Message-nondiscard mode.   */
+#define RPROTDAT       0x0004  /* Deliver the control part of a message as
+                                  data.  */
+#define RPROTDIS       0x0008  /* Discard the control part of a message,
+                                  delivering any data part.  */
+#define RPROTNORM      0x0010  /* Fail `read' with EBADMSG if a message
+                                  containing a control part is at the front
+                                  of the STREAM head read queue.  */
+#ifdef __USE_GNU
+# define RPROTMASK     0x001C  /* The RPROT bits */
+#endif
+
+/* Possible mode for `I_SWROPT'.  */
+#define SNDZERO                0x001   /* Send a zero-length message downstream when a
+                                  `write' of 0 bytes occurs.  */
+#ifdef __USE_GNU
+# define SNDPIPE       0x002   /* Send SIGPIPE on write and putmsg if
+                                  sd_werror is set.  */
+#endif
+
+/* Arguments for `I_ATMARK'.  */
+#define ANYMARK                0x01    /* Check if the message is marked.  */
+#define LASTMARK       0x02    /* Check if the message is the last one marked
+                                  on the queue.  */
+
+/* Argument for `I_UNLINK'.  */
+#ifdef __USE_GNU
+# define MUXID_ALL     (-1)    /* Unlink all STREAMs linked to the STREAM
+                                  associated with `fildes'.  */
+#endif
+
+
+/* Macros for `getmsg', `getpmsg', `putmsg' and `putpmsg'.  */
+#define MSG_HIPRI      0x01    /* Send/receive high priority message.  */
+#define MSG_ANY                0x02    /* Receive any message.  */
+#define MSG_BAND       0x04    /* Receive message from specified band.  */
+
+/* Values returned by getmsg and getpmsg */
+#define MORECTL                1       /* More control information is left in
+                                  message.  */
+#define MOREDATA       2       /* More data is left in message.  */
+
+
+/* Structure used for the I_FLUSHBAND ioctl on streams.  */
+struct bandinfo
+  {
+    unsigned char bi_pri;
+    int bi_flag;
+  };
+
+struct strbuf
+  {
+    int maxlen;                /* Maximum buffer length.  */
+    int len;           /* Length of data.  */
+    char *buf;         /* Pointer to buffer.  */
+  };
+
+struct strpeek
+  {
+    struct strbuf ctlbuf;
+    struct strbuf databuf;
+    t_uscalar_t flags;                 /* UnixWare/Solaris compatibility.  */
+  };
+
+struct strfdinsert
+  {
+    struct strbuf ctlbuf;
+    struct strbuf databuf;
+    t_uscalar_t flags;                 /* UnixWare/Solaris compatibility.  */
+    int fildes;
+    int offset;
+  };
+
+struct strioctl
+  {
+    int ic_cmd;
+    int ic_timout;
+    int ic_len;
+    char *ic_dp;
+  };
+
+struct strrecvfd
+  {
+    int fd;
+    uid_t uid;
+    gid_t gid;
+    char __fill[8];                    /* UnixWare/Solaris compatibility */
+  };
+
+
+struct str_mlist
+  {
+    char l_name[FMNAMESZ + 1];
+  };
+
+struct str_list
+  {
+    int sl_nmods;
+    struct str_mlist *sl_modlist;
+  };
+
+#endif /* bits/stropts.h */
diff --git a/lib/libdss-include/include/bits/sys_errlist.h b/lib/libdss-include/include/bits/sys_errlist.h
new file mode 100644 (file)
index 0000000..c6385f1
--- /dev/null
@@ -0,0 +1,32 @@
+/* Declare sys_errlist and sys_nerr, or don't.  Compatibility (do) version.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STDIO_H
+# error "Never include <bits/sys_errlist.h> directly; use <stdio.h> instead."
+#endif
+
+/* sys_errlist and sys_nerr are deprecated.  Use strerror instead.  */
+
+#ifdef  __USE_MISC
+extern int sys_nerr;
+extern const char *const sys_errlist[];
+#endif
+#ifdef  __USE_GNU
+extern int _sys_nerr;
+extern const char *const _sys_errlist[];
+#endif
diff --git a/lib/libdss-include/include/bits/syscall.h b/lib/libdss-include/include/bits/syscall.h
new file mode 100644 (file)
index 0000000..ea3d774
--- /dev/null
@@ -0,0 +1,554 @@
+/* Generated at libc build time from kernel syscall list.  */
+
+#ifndef _SYSCALL_H
+# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+#define SYS_accept __NR_accept
+#define SYS_accept4 __NR_accept4
+#define SYS_acct __NR_acct
+#define SYS_add_key __NR_add_key
+#define SYS_adjtimex __NR_adjtimex
+#define SYS_arch_specific_syscall __NR_arch_specific_syscall
+#define SYS_bind __NR_bind
+#define SYS_bpf __NR_bpf
+#define SYS_brk __NR_brk
+#define SYS_capget __NR_capget
+#define SYS_capset __NR_capset
+#define SYS_chdir __NR_chdir
+#define SYS_chroot __NR_chroot
+#define SYS_clock_adjtime __NR_clock_adjtime
+#define SYS_clock_getres __NR_clock_getres
+#define SYS_clock_gettime __NR_clock_gettime
+#define SYS_clock_nanosleep __NR_clock_nanosleep
+#define SYS_clock_settime __NR_clock_settime
+#define SYS_clone __NR_clone
+#define SYS_close __NR_close
+#define SYS_connect __NR_connect
+#define SYS_delete_module __NR_delete_module
+#define SYS_dup __NR_dup
+#define SYS_dup3 __NR_dup3
+#define SYS_epoll_create1 __NR_epoll_create1
+#define SYS_epoll_ctl __NR_epoll_ctl
+#define SYS_epoll_pwait __NR_epoll_pwait
+#define SYS_eventfd2 __NR_eventfd2
+#define SYS_execve __NR_execve
+#define SYS_execveat __NR_execveat
+#define SYS_exit __NR_exit
+#define SYS_exit_group __NR_exit_group
+#define SYS_faccessat __NR_faccessat
+#define SYS_fadvise64 __NR_fadvise64
+#define SYS_fallocate __NR_fallocate
+#define SYS_fanotify_init __NR_fanotify_init
+#define SYS_fanotify_mark __NR_fanotify_mark
+#define SYS_fchdir __NR_fchdir
+#define SYS_fchmod __NR_fchmod
+#define SYS_fchmodat __NR_fchmodat
+#define SYS_fchown __NR_fchown
+#define SYS_fchownat __NR_fchownat
+#define SYS_fcntl __NR_fcntl
+#define SYS_fdatasync __NR_fdatasync
+#define SYS_fgetxattr __NR_fgetxattr
+#define SYS_finit_module __NR_finit_module
+#define SYS_flistxattr __NR_flistxattr
+#define SYS_flock __NR_flock
+#define SYS_fremovexattr __NR_fremovexattr
+#define SYS_fsetxattr __NR_fsetxattr
+#define SYS_fstat __NR_fstat
+#define SYS_fstatfs __NR_fstatfs
+#define SYS_fsync __NR_fsync
+#define SYS_ftruncate __NR_ftruncate
+#define SYS_futex __NR_futex
+#define SYS_get_mempolicy __NR_get_mempolicy
+#define SYS_get_robust_list __NR_get_robust_list
+#define SYS_getcpu __NR_getcpu
+#define SYS_getcwd __NR_getcwd
+#define SYS_getdents64 __NR_getdents64
+#define SYS_getegid __NR_getegid
+#define SYS_geteuid __NR_geteuid
+#define SYS_getgid __NR_getgid
+#define SYS_getgroups __NR_getgroups
+#define SYS_getitimer __NR_getitimer
+#define SYS_getpeername __NR_getpeername
+#define SYS_getpgid __NR_getpgid
+#define SYS_getpid __NR_getpid
+#define SYS_getppid __NR_getppid
+#define SYS_getpriority __NR_getpriority
+#define SYS_getrandom __NR_getrandom
+#define SYS_getresgid __NR_getresgid
+#define SYS_getresuid __NR_getresuid
+#define SYS_getrlimit __NR_getrlimit
+#define SYS_getrusage __NR_getrusage
+#define SYS_getsid __NR_getsid
+#define SYS_getsockname __NR_getsockname
+#define SYS_getsockopt __NR_getsockopt
+#define SYS_gettid __NR_gettid
+#define SYS_gettimeofday __NR_gettimeofday
+#define SYS_getuid __NR_getuid
+#define SYS_getxattr __NR_getxattr
+#define SYS_init_module __NR_init_module
+#define SYS_inotify_add_watch __NR_inotify_add_watch
+#define SYS_inotify_init1 __NR_inotify_init1
+#define SYS_inotify_rm_watch __NR_inotify_rm_watch
+#define SYS_io_cancel __NR_io_cancel
+#define SYS_io_destroy __NR_io_destroy
+#define SYS_io_getevents __NR_io_getevents
+#define SYS_io_setup __NR_io_setup
+#define SYS_io_submit __NR_io_submit
+#define SYS_ioctl __NR_ioctl
+#define SYS_ioprio_get __NR_ioprio_get
+#define SYS_ioprio_set __NR_ioprio_set
+#define SYS_kcmp __NR_kcmp
+#define SYS_kexec_load __NR_kexec_load
+#define SYS_keyctl __NR_keyctl
+#define SYS_kill __NR_kill
+#define SYS_lgetxattr __NR_lgetxattr
+#define SYS_linkat __NR_linkat
+#define SYS_listen __NR_listen
+#define SYS_listxattr __NR_listxattr
+#define SYS_llistxattr __NR_llistxattr
+#define SYS_lookup_dcookie __NR_lookup_dcookie
+#define SYS_lremovexattr __NR_lremovexattr
+#define SYS_lseek __NR_lseek
+#define SYS_lsetxattr __NR_lsetxattr
+#define SYS_madvise __NR_madvise
+#define SYS_mbind __NR_mbind
+#define SYS_membarrier __NR_membarrier
+#define SYS_memfd_create __NR_memfd_create
+#define SYS_migrate_pages __NR_migrate_pages
+#define SYS_mincore __NR_mincore
+#define SYS_mkdirat __NR_mkdirat
+#define SYS_mknodat __NR_mknodat
+#define SYS_mlock __NR_mlock
+#define SYS_mlock2 __NR_mlock2
+#define SYS_mlockall __NR_mlockall
+#define SYS_mmap __NR_mmap
+#define SYS_mount __NR_mount
+#define SYS_move_pages __NR_move_pages
+#define SYS_mprotect __NR_mprotect
+#define SYS_mq_getsetattr __NR_mq_getsetattr
+#define SYS_mq_notify __NR_mq_notify
+#define SYS_mq_open __NR_mq_open
+#define SYS_mq_timedreceive __NR_mq_timedreceive
+#define SYS_mq_timedsend __NR_mq_timedsend
+#define SYS_mq_unlink __NR_mq_unlink
+#define SYS_mremap __NR_mremap
+#define SYS_msgctl __NR_msgctl
+#define SYS_msgget __NR_msgget
+#define SYS_msgrcv __NR_msgrcv
+#define SYS_msgsnd __NR_msgsnd
+#define SYS_msync __NR_msync
+#define SYS_munlock __NR_munlock
+#define SYS_munlockall __NR_munlockall
+#define SYS_munmap __NR_munmap
+#define SYS_name_to_handle_at __NR_name_to_handle_at
+#define SYS_nanosleep __NR_nanosleep
+#define SYS_newfstatat __NR_newfstatat
+#define SYS_nfsservctl __NR_nfsservctl
+#define SYS_open_by_handle_at __NR_open_by_handle_at
+#define SYS_openat __NR_openat
+#define SYS_perf_event_open __NR_perf_event_open
+#define SYS_personality __NR_personality
+#define SYS_pipe2 __NR_pipe2
+#define SYS_pivot_root __NR_pivot_root
+#define SYS_ppoll __NR_ppoll
+#define SYS_prctl __NR_prctl
+#define SYS_pread64 __NR_pread64
+#define SYS_preadv __NR_preadv
+#define SYS_prlimit64 __NR_prlimit64
+#define SYS_process_vm_readv __NR_process_vm_readv
+#define SYS_process_vm_writev __NR_process_vm_writev
+#define SYS_pselect6 __NR_pselect6
+#define SYS_ptrace __NR_ptrace
+#define SYS_pwrite64 __NR_pwrite64
+#define SYS_pwritev __NR_pwritev
+#define SYS_quotactl __NR_quotactl
+#define SYS_read __NR_read
+#define SYS_readahead __NR_readahead
+#define SYS_readlinkat __NR_readlinkat
+#define SYS_readv __NR_readv
+#define SYS_reboot __NR_reboot
+#define SYS_recvfrom __NR_recvfrom
+#define SYS_recvmmsg __NR_recvmmsg
+#define SYS_recvmsg __NR_recvmsg
+#define SYS_remap_file_pages __NR_remap_file_pages
+#define SYS_removexattr __NR_removexattr
+#define SYS_renameat __NR_renameat
+#define SYS_renameat2 __NR_renameat2
+#define SYS_request_key __NR_request_key
+#define SYS_restart_syscall __NR_restart_syscall
+#define SYS_rt_sigaction __NR_rt_sigaction
+#define SYS_rt_sigpending __NR_rt_sigpending
+#define SYS_rt_sigprocmask __NR_rt_sigprocmask
+#define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
+#define SYS_rt_sigreturn __NR_rt_sigreturn
+#define SYS_rt_sigsuspend __NR_rt_sigsuspend
+#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
+#define SYS_rt_tgsigqueueinfo __NR_rt_tgsigqueueinfo
+#define SYS_sched_get_priority_max __NR_sched_get_priority_max
+#define SYS_sched_get_priority_min __NR_sched_get_priority_min
+#define SYS_sched_getaffinity __NR_sched_getaffinity
+#define SYS_sched_getattr __NR_sched_getattr
+#define SYS_sched_getparam __NR_sched_getparam
+#define SYS_sched_getscheduler __NR_sched_getscheduler
+#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
+#define SYS_sched_setaffinity __NR_sched_setaffinity
+#define SYS_sched_setattr __NR_sched_setattr
+#define SYS_sched_setparam __NR_sched_setparam
+#define SYS_sched_setscheduler __NR_sched_setscheduler
+#define SYS_sched_yield __NR_sched_yield
+#define SYS_seccomp __NR_seccomp
+#define SYS_semctl __NR_semctl
+#define SYS_semget __NR_semget
+#define SYS_semop __NR_semop
+#define SYS_semtimedop __NR_semtimedop
+#define SYS_sendfile __NR_sendfile
+#define SYS_sendmmsg __NR_sendmmsg
+#define SYS_sendmsg __NR_sendmsg
+#define SYS_sendto __NR_sendto
+#define SYS_set_mempolicy __NR_set_mempolicy
+#define SYS_set_robust_list __NR_set_robust_list
+#define SYS_set_tid_address __NR_set_tid_address
+#define SYS_setdomainname __NR_setdomainname
+#define SYS_setfsgid __NR_setfsgid
+#define SYS_setfsuid __NR_setfsuid
+#define SYS_setgid __NR_setgid
+#define SYS_setgroups __NR_setgroups
+#define SYS_sethostname __NR_sethostname
+#define SYS_setitimer __NR_setitimer
+#define SYS_setns __NR_setns
+#define SYS_setpgid __NR_setpgid
+#define SYS_setpriority __NR_setpriority
+#define SYS_setregid __NR_setregid
+#define SYS_setresgid __NR_setresgid
+#define SYS_setresuid __NR_setresuid
+#define SYS_setreuid __NR_setreuid
+#define SYS_setrlimit __NR_setrlimit
+#define SYS_setsid __NR_setsid
+#define SYS_setsockopt __NR_setsockopt
+#define SYS_settimeofday __NR_settimeofday
+#define SYS_setuid __NR_setuid
+#define SYS_setxattr __NR_setxattr
+#define SYS_shmat __NR_shmat
+#define SYS_shmctl __NR_shmctl
+#define SYS_shmdt __NR_shmdt
+#define SYS_shmget __NR_shmget
+#define SYS_shutdown __NR_shutdown
+#define SYS_sigaltstack __NR_sigaltstack
+#define SYS_signalfd4 __NR_signalfd4
+#define SYS_socket __NR_socket
+#define SYS_socketpair __NR_socketpair
+#define SYS_splice __NR_splice
+#define SYS_statfs __NR_statfs
+#define SYS_swapoff __NR_swapoff
+#define SYS_swapon __NR_swapon
+#define SYS_symlinkat __NR_symlinkat
+#define SYS_sync __NR_sync
+#define SYS_sync_file_range __NR_sync_file_range
+#define SYS_syncfs __NR_syncfs
+#define SYS_syscalls __NR_syscalls
+#define SYS_sysinfo __NR_sysinfo
+#define SYS_syslog __NR_syslog
+#define SYS_tee __NR_tee
+#define SYS_tgkill __NR_tgkill
+#define SYS_timer_create __NR_timer_create
+#define SYS_timer_delete __NR_timer_delete
+#define SYS_timer_getoverrun __NR_timer_getoverrun
+#define SYS_timer_gettime __NR_timer_gettime
+#define SYS_timer_settime __NR_timer_settime
+#define SYS_timerfd_create __NR_timerfd_create
+#define SYS_timerfd_gettime __NR_timerfd_gettime
+#define SYS_timerfd_settime __NR_timerfd_settime
+#define SYS_times __NR_times
+#define SYS_tkill __NR_tkill
+#define SYS_truncate __NR_truncate
+#define SYS_umask __NR_umask
+#define SYS_umount2 __NR_umount2
+#define SYS_uname __NR_uname
+#define SYS_unlinkat __NR_unlinkat
+#define SYS_unshare __NR_unshare
+#define SYS_userfaultfd __NR_userfaultfd
+#define SYS_utimensat __NR_utimensat
+#define SYS_vhangup __NR_vhangup
+#define SYS_vmsplice __NR_vmsplice
+#define SYS_wait4 __NR_wait4
+#define SYS_waitid __NR_waitid
+#define SYS_write __NR_write
+#define SYS_writev __NR_writev
+#endif
+#if defined __AARCH64EB__
+#define SYS_accept __NR_accept
+#define SYS_accept4 __NR_accept4
+#define SYS_acct __NR_acct
+#define SYS_add_key __NR_add_key
+#define SYS_adjtimex __NR_adjtimex
+#define SYS_arch_specific_syscall __NR_arch_specific_syscall
+#define SYS_bind __NR_bind
+#define SYS_bpf __NR_bpf
+#define SYS_brk __NR_brk
+#define SYS_capget __NR_capget
+#define SYS_capset __NR_capset
+#define SYS_chdir __NR_chdir
+#define SYS_chroot __NR_chroot
+#define SYS_clock_adjtime __NR_clock_adjtime
+#define SYS_clock_getres __NR_clock_getres
+#define SYS_clock_gettime __NR_clock_gettime
+#define SYS_clock_nanosleep __NR_clock_nanosleep
+#define SYS_clock_settime __NR_clock_settime
+#define SYS_clone __NR_clone
+#define SYS_close __NR_close
+#define SYS_connect __NR_connect
+#define SYS_delete_module __NR_delete_module
+#define SYS_dup __NR_dup
+#define SYS_dup3 __NR_dup3
+#define SYS_epoll_create1 __NR_epoll_create1
+#define SYS_epoll_ctl __NR_epoll_ctl
+#define SYS_epoll_pwait __NR_epoll_pwait
+#define SYS_eventfd2 __NR_eventfd2
+#define SYS_execve __NR_execve
+#define SYS_execveat __NR_execveat
+#define SYS_exit __NR_exit
+#define SYS_exit_group __NR_exit_group
+#define SYS_faccessat __NR_faccessat
+#define SYS_fadvise64 __NR_fadvise64
+#define SYS_fallocate __NR_fallocate
+#define SYS_fanotify_init __NR_fanotify_init
+#define SYS_fanotify_mark __NR_fanotify_mark
+#define SYS_fchdir __NR_fchdir
+#define SYS_fchmod __NR_fchmod
+#define SYS_fchmodat __NR_fchmodat
+#define SYS_fchown __NR_fchown
+#define SYS_fchownat __NR_fchownat
+#define SYS_fcntl __NR_fcntl
+#define SYS_fdatasync __NR_fdatasync
+#define SYS_fgetxattr __NR_fgetxattr
+#define SYS_finit_module __NR_finit_module
+#define SYS_flistxattr __NR_flistxattr
+#define SYS_flock __NR_flock
+#define SYS_fremovexattr __NR_fremovexattr
+#define SYS_fsetxattr __NR_fsetxattr
+#define SYS_fstat __NR_fstat
+#define SYS_fstatfs __NR_fstatfs
+#define SYS_fsync __NR_fsync
+#define SYS_ftruncate __NR_ftruncate
+#define SYS_futex __NR_futex
+#define SYS_get_mempolicy __NR_get_mempolicy
+#define SYS_get_robust_list __NR_get_robust_list
+#define SYS_getcpu __NR_getcpu
+#define SYS_getcwd __NR_getcwd
+#define SYS_getdents64 __NR_getdents64
+#define SYS_getegid __NR_getegid
+#define SYS_geteuid __NR_geteuid
+#define SYS_getgid __NR_getgid
+#define SYS_getgroups __NR_getgroups
+#define SYS_getitimer __NR_getitimer
+#define SYS_getpeername __NR_getpeername
+#define SYS_getpgid __NR_getpgid
+#define SYS_getpid __NR_getpid
+#define SYS_getppid __NR_getppid
+#define SYS_getpriority __NR_getpriority
+#define SYS_getrandom __NR_getrandom
+#define SYS_getresgid __NR_getresgid
+#define SYS_getresuid __NR_getresuid
+#define SYS_getrlimit __NR_getrlimit
+#define SYS_getrusage __NR_getrusage
+#define SYS_getsid __NR_getsid
+#define SYS_getsockname __NR_getsockname
+#define SYS_getsockopt __NR_getsockopt
+#define SYS_gettid __NR_gettid
+#define SYS_gettimeofday __NR_gettimeofday
+#define SYS_getuid __NR_getuid
+#define SYS_getxattr __NR_getxattr
+#define SYS_init_module __NR_init_module
+#define SYS_inotify_add_watch __NR_inotify_add_watch
+#define SYS_inotify_init1 __NR_inotify_init1
+#define SYS_inotify_rm_watch __NR_inotify_rm_watch
+#define SYS_io_cancel __NR_io_cancel
+#define SYS_io_destroy __NR_io_destroy
+#define SYS_io_getevents __NR_io_getevents
+#define SYS_io_setup __NR_io_setup
+#define SYS_io_submit __NR_io_submit
+#define SYS_ioctl __NR_ioctl
+#define SYS_ioprio_get __NR_ioprio_get
+#define SYS_ioprio_set __NR_ioprio_set
+#define SYS_kcmp __NR_kcmp
+#define SYS_kexec_load __NR_kexec_load
+#define SYS_keyctl __NR_keyctl
+#define SYS_kill __NR_kill
+#define SYS_lgetxattr __NR_lgetxattr
+#define SYS_linkat __NR_linkat
+#define SYS_listen __NR_listen
+#define SYS_listxattr __NR_listxattr
+#define SYS_llistxattr __NR_llistxattr
+#define SYS_lookup_dcookie __NR_lookup_dcookie
+#define SYS_lremovexattr __NR_lremovexattr
+#define SYS_lseek __NR_lseek
+#define SYS_lsetxattr __NR_lsetxattr
+#define SYS_madvise __NR_madvise
+#define SYS_mbind __NR_mbind
+#define SYS_membarrier __NR_membarrier
+#define SYS_memfd_create __NR_memfd_create
+#define SYS_migrate_pages __NR_migrate_pages
+#define SYS_mincore __NR_mincore
+#define SYS_mkdirat __NR_mkdirat
+#define SYS_mknodat __NR_mknodat
+#define SYS_mlock __NR_mlock
+#define SYS_mlock2 __NR_mlock2
+#define SYS_mlockall __NR_mlockall
+#define SYS_mmap __NR_mmap
+#define SYS_mount __NR_mount
+#define SYS_move_pages __NR_move_pages
+#define SYS_mprotect __NR_mprotect
+#define SYS_mq_getsetattr __NR_mq_getsetattr
+#define SYS_mq_notify __NR_mq_notify
+#define SYS_mq_open __NR_mq_open
+#define SYS_mq_timedreceive __NR_mq_timedreceive
+#define SYS_mq_timedsend __NR_mq_timedsend
+#define SYS_mq_unlink __NR_mq_unlink
+#define SYS_mremap __NR_mremap
+#define SYS_msgctl __NR_msgctl
+#define SYS_msgget __NR_msgget
+#define SYS_msgrcv __NR_msgrcv
+#define SYS_msgsnd __NR_msgsnd
+#define SYS_msync __NR_msync
+#define SYS_munlock __NR_munlock
+#define SYS_munlockall __NR_munlockall
+#define SYS_munmap __NR_munmap
+#define SYS_name_to_handle_at __NR_name_to_handle_at
+#define SYS_nanosleep __NR_nanosleep
+#define SYS_newfstatat __NR_newfstatat
+#define SYS_nfsservctl __NR_nfsservctl
+#define SYS_open_by_handle_at __NR_open_by_handle_at
+#define SYS_openat __NR_openat
+#define SYS_perf_event_open __NR_perf_event_open
+#define SYS_personality __NR_personality
+#define SYS_pipe2 __NR_pipe2
+#define SYS_pivot_root __NR_pivot_root
+#define SYS_ppoll __NR_ppoll
+#define SYS_prctl __NR_prctl
+#define SYS_pread64 __NR_pread64
+#define SYS_preadv __NR_preadv
+#define SYS_prlimit64 __NR_prlimit64
+#define SYS_process_vm_readv __NR_process_vm_readv
+#define SYS_process_vm_writev __NR_process_vm_writev
+#define SYS_pselect6 __NR_pselect6
+#define SYS_ptrace __NR_ptrace
+#define SYS_pwrite64 __NR_pwrite64
+#define SYS_pwritev __NR_pwritev
+#define SYS_quotactl __NR_quotactl
+#define SYS_read __NR_read
+#define SYS_readahead __NR_readahead
+#define SYS_readlinkat __NR_readlinkat
+#define SYS_readv __NR_readv
+#define SYS_reboot __NR_reboot
+#define SYS_recvfrom __NR_recvfrom
+#define SYS_recvmmsg __NR_recvmmsg
+#define SYS_recvmsg __NR_recvmsg
+#define SYS_remap_file_pages __NR_remap_file_pages
+#define SYS_removexattr __NR_removexattr
+#define SYS_renameat __NR_renameat
+#define SYS_renameat2 __NR_renameat2
+#define SYS_request_key __NR_request_key
+#define SYS_restart_syscall __NR_restart_syscall
+#define SYS_rt_sigaction __NR_rt_sigaction
+#define SYS_rt_sigpending __NR_rt_sigpending
+#define SYS_rt_sigprocmask __NR_rt_sigprocmask
+#define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
+#define SYS_rt_sigreturn __NR_rt_sigreturn
+#define SYS_rt_sigsuspend __NR_rt_sigsuspend
+#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
+#define SYS_rt_tgsigqueueinfo __NR_rt_tgsigqueueinfo
+#define SYS_sched_get_priority_max __NR_sched_get_priority_max
+#define SYS_sched_get_priority_min __NR_sched_get_priority_min
+#define SYS_sched_getaffinity __NR_sched_getaffinity
+#define SYS_sched_getattr __NR_sched_getattr
+#define SYS_sched_getparam __NR_sched_getparam
+#define SYS_sched_getscheduler __NR_sched_getscheduler
+#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
+#define SYS_sched_setaffinity __NR_sched_setaffinity
+#define SYS_sched_setattr __NR_sched_setattr
+#define SYS_sched_setparam __NR_sched_setparam
+#define SYS_sched_setscheduler __NR_sched_setscheduler
+#define SYS_sched_yield __NR_sched_yield
+#define SYS_seccomp __NR_seccomp
+#define SYS_semctl __NR_semctl
+#define SYS_semget __NR_semget
+#define SYS_semop __NR_semop
+#define SYS_semtimedop __NR_semtimedop
+#define SYS_sendfile __NR_sendfile
+#define SYS_sendmmsg __NR_sendmmsg
+#define SYS_sendmsg __NR_sendmsg
+#define SYS_sendto __NR_sendto
+#define SYS_set_mempolicy __NR_set_mempolicy
+#define SYS_set_robust_list __NR_set_robust_list
+#define SYS_set_tid_address __NR_set_tid_address
+#define SYS_setdomainname __NR_setdomainname
+#define SYS_setfsgid __NR_setfsgid
+#define SYS_setfsuid __NR_setfsuid
+#define SYS_setgid __NR_setgid
+#define SYS_setgroups __NR_setgroups
+#define SYS_sethostname __NR_sethostname
+#define SYS_setitimer __NR_setitimer
+#define SYS_setns __NR_setns
+#define SYS_setpgid __NR_setpgid
+#define SYS_setpriority __NR_setpriority
+#define SYS_setregid __NR_setregid
+#define SYS_setresgid __NR_setresgid
+#define SYS_setresuid __NR_setresuid
+#define SYS_setreuid __NR_setreuid
+#define SYS_setrlimit __NR_setrlimit
+#define SYS_setsid __NR_setsid
+#define SYS_setsockopt __NR_setsockopt
+#define SYS_settimeofday __NR_settimeofday
+#define SYS_setuid __NR_setuid
+#define SYS_setxattr __NR_setxattr
+#define SYS_shmat __NR_shmat
+#define SYS_shmctl __NR_shmctl
+#define SYS_shmdt __NR_shmdt
+#define SYS_shmget __NR_shmget
+#define SYS_shutdown __NR_shutdown
+#define SYS_sigaltstack __NR_sigaltstack
+#define SYS_signalfd4 __NR_signalfd4
+#define SYS_socket __NR_socket
+#define SYS_socketpair __NR_socketpair
+#define SYS_splice __NR_splice
+#define SYS_statfs __NR_statfs
+#define SYS_swapoff __NR_swapoff
+#define SYS_swapon __NR_swapon
+#define SYS_symlinkat __NR_symlinkat
+#define SYS_sync __NR_sync
+#define SYS_sync_file_range __NR_sync_file_range
+#define SYS_syncfs __NR_syncfs
+#define SYS_syscalls __NR_syscalls
+#define SYS_sysinfo __NR_sysinfo
+#define SYS_syslog __NR_syslog
+#define SYS_tee __NR_tee
+#define SYS_tgkill __NR_tgkill
+#define SYS_timer_create __NR_timer_create
+#define SYS_timer_delete __NR_timer_delete
+#define SYS_timer_getoverrun __NR_timer_getoverrun
+#define SYS_timer_gettime __NR_timer_gettime
+#define SYS_timer_settime __NR_timer_settime
+#define SYS_timerfd_create __NR_timerfd_create
+#define SYS_timerfd_gettime __NR_timerfd_gettime
+#define SYS_timerfd_settime __NR_timerfd_settime
+#define SYS_times __NR_times
+#define SYS_tkill __NR_tkill
+#define SYS_truncate __NR_truncate
+#define SYS_umask __NR_umask
+#define SYS_umount2 __NR_umount2
+#define SYS_uname __NR_uname
+#define SYS_unlinkat __NR_unlinkat
+#define SYS_unshare __NR_unshare
+#define SYS_userfaultfd __NR_userfaultfd
+#define SYS_utimensat __NR_utimensat
+#define SYS_vhangup __NR_vhangup
+#define SYS_vmsplice __NR_vmsplice
+#define SYS_wait4 __NR_wait4
+#define SYS_waitid __NR_waitid
+#define SYS_write __NR_write
+#define SYS_writev __NR_writev
+#endif
diff --git a/lib/libdss-include/include/bits/sysctl.h b/lib/libdss-include/include/bits/sysctl.h
new file mode 100644 (file)
index 0000000..81447b2
--- /dev/null
@@ -0,0 +1 @@
+/* Empty file.  */
diff --git a/lib/libdss-include/include/bits/syslog-ldbl.h b/lib/libdss-include/include/bits/syslog-ldbl.h
new file mode 100644 (file)
index 0000000..7c1c03d
--- /dev/null
@@ -0,0 +1,35 @@
+/* -mlong-double-64 compatibility mode for syslog functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include <bits/syslog-ldbl.h> directly; use <sys/syslog.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (syslog)
+
+#ifdef __USE_MISC
+__LDBL_REDIR_DECL (vsyslog)
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__syslog_chk)
+
+# ifdef __USE_MISC
+__LDBL_REDIR_DECL (__vsyslog_chk)
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/syslog-path.h b/lib/libdss-include/include/bits/syslog-path.h
new file mode 100644 (file)
index 0000000..6aab5e0
--- /dev/null
@@ -0,0 +1,28 @@
+/* <bits/syslog-path.h> -- _PATH_LOG definition
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include this file directly.  Use <sys/syslog.h> instead"
+#endif
+
+#ifndef _BITS_SYSLOG_PATH_H
+#define _BITS_SYSLOG_PATH_H 1
+
+#define        _PATH_LOG       "/dev/log"
+
+#endif /* bits/syslog-path.h */
diff --git a/lib/libdss-include/include/bits/syslog.h b/lib/libdss-include/include/bits/syslog.h
new file mode 100644 (file)
index 0000000..31dae38
--- /dev/null
@@ -0,0 +1,49 @@
+/* Checking macros for syslog functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSLOG_H
+# error "Never include <bits/syslog.h> directly; use <sys/syslog.h> instead."
+#endif
+
+
+extern void __syslog_chk (int __pri, int __flag, const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+#ifdef __va_arg_pack
+__fortify_function void
+syslog (int __pri, const char *__fmt, ...)
+{
+  __syslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+# define syslog(pri, ...) \
+  __syslog_chk (pri, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#endif
+
+
+#ifdef __USE_MISC
+extern void __vsyslog_chk (int __pri, int __flag, const char *__fmt,
+                          __gnuc_va_list __ap)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+__fortify_function void
+vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap)
+{
+  __vsyslog_chk (__pri,  __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+#endif
diff --git a/lib/libdss-include/include/bits/termios.h b/lib/libdss-include/include/bits/termios.h
new file mode 100644 (file)
index 0000000..bbf093d
--- /dev/null
@@ -0,0 +1,219 @@
+/* termios type and macro definitions.  Linux version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TERMIOS_H
+# error "Never include <bits/termios.h> directly; use <termios.h> instead."
+#endif
+
+typedef unsigned char  cc_t;
+typedef unsigned int   speed_t;
+typedef unsigned int   tcflag_t;
+
+#define NCCS 32
+struct termios
+  {
+    tcflag_t c_iflag;          /* input mode flags */
+    tcflag_t c_oflag;          /* output mode flags */
+    tcflag_t c_cflag;          /* control mode flags */
+    tcflag_t c_lflag;          /* local mode flags */
+    cc_t c_line;                       /* line discipline */
+    cc_t c_cc[NCCS];           /* control characters */
+    speed_t c_ispeed;          /* input speed */
+    speed_t c_ospeed;          /* output speed */
+#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
+#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
+  };
+
+/* c_cc characters */
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+
+/* c_iflag bits */
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK  0000020
+#define ISTRIP 0000040
+#define INLCR  0000100
+#define IGNCR  0000200
+#define ICRNL  0000400
+#define IUCLC  0001000
+#define IXON   0002000
+#define IXANY  0004000
+#define IXOFF  0010000
+#define IMAXBEL        0020000
+#define IUTF8  0040000
+
+/* c_oflag bits */
+#define OPOST  0000001
+#define OLCUC  0000002
+#define ONLCR  0000004
+#define OCRNL  0000010
+#define ONOCR  0000020
+#define ONLRET 0000040
+#define OFILL  0000100
+#define OFDEL  0000200
+#if defined __USE_MISC || defined __USE_XOPEN
+# define NLDLY 0000400
+# define   NL0 0000000
+# define   NL1 0000400
+# define CRDLY 0003000
+# define   CR0 0000000
+# define   CR1 0001000
+# define   CR2 0002000
+# define   CR3 0003000
+# define TABDLY        0014000
+# define   TAB0        0000000
+# define   TAB1        0004000
+# define   TAB2        0010000
+# define   TAB3        0014000
+# define BSDLY 0020000
+# define   BS0 0000000
+# define   BS1 0020000
+# define FFDLY 0100000
+# define   FF0 0000000
+# define   FF1 0100000
+#endif
+
+#define VTDLY  0040000
+#define   VT0  0000000
+#define   VT1  0040000
+
+#ifdef __USE_MISC
+# define XTABS 0014000
+#endif
+
+/* c_cflag bit meaning */
+#ifdef __USE_MISC
+# define CBAUD 0010017
+#endif
+#define  B0    0000000         /* hang up */
+#define  B50   0000001
+#define  B75   0000002
+#define  B110  0000003
+#define  B134  0000004
+#define  B150  0000005
+#define  B200  0000006
+#define  B300  0000007
+#define  B600  0000010
+#define  B1200 0000011
+#define  B1800 0000012
+#define  B2400 0000013
+#define  B4800 0000014
+#define  B9600 0000015
+#define  B19200        0000016
+#define  B38400        0000017
+#ifdef __USE_MISC
+# define EXTA B19200
+# define EXTB B38400
+#endif
+#define CSIZE  0000060
+#define   CS5  0000000
+#define   CS6  0000020
+#define   CS7  0000040
+#define   CS8  0000060
+#define CSTOPB 0000100
+#define CREAD  0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL  0002000
+#define CLOCAL 0004000
+#ifdef __USE_MISC
+# define CBAUDEX 0010000
+#endif
+#define  B57600   0010001
+#define  B115200  0010002
+#define  B230400  0010003
+#define  B460800  0010004
+#define  B500000  0010005
+#define  B576000  0010006
+#define  B921600  0010007
+#define  B1000000 0010010
+#define  B1152000 0010011
+#define  B1500000 0010012
+#define  B2000000 0010013
+#define  B2500000 0010014
+#define  B3000000 0010015
+#define  B3500000 0010016
+#define  B4000000 0010017
+#define __MAX_BAUD B4000000
+#ifdef __USE_MISC
+# define CIBAUD          002003600000          /* input baud rate (not used) */
+# define CMSPAR   010000000000         /* mark or space (stick) parity */
+# define CRTSCTS  020000000000         /* flow control */
+#endif
+
+/* c_lflag bits */
+#define ISIG   0000001
+#define ICANON 0000002
+#if defined __USE_MISC || defined __USE_XOPEN
+# define XCASE 0000004
+#endif
+#define ECHO   0000010
+#define ECHOE  0000020
+#define ECHOK  0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define TOSTOP 0000400
+#ifdef __USE_MISC
+# define ECHOCTL 0001000
+# define ECHOPRT 0002000
+# define ECHOKE         0004000
+# define FLUSHO         0010000
+# define PENDIN         0040000
+#endif
+#define IEXTEN 0100000
+#ifdef __USE_MISC
+# define EXTPROC 0200000
+#endif
+
+/* tcflow() and TCXONC use these */
+#define        TCOOFF          0
+#define        TCOON           1
+#define        TCIOFF          2
+#define        TCION           3
+
+/* tcflush() and TCFLSH use these */
+#define        TCIFLUSH        0
+#define        TCOFLUSH        1
+#define        TCIOFLUSH       2
+
+/* tcsetattr uses these */
+#define        TCSANOW         0
+#define        TCSADRAIN       1
+#define        TCSAFLUSH       2
+
+
+#define _IOT_termios /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
diff --git a/lib/libdss-include/include/bits/time.h b/lib/libdss-include/include/bits/time.h
new file mode 100644 (file)
index 0000000..87eb51f
--- /dev/null
@@ -0,0 +1,101 @@
+/* System-dependent timing definitions.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <time.h> instead.
+ */
+
+#if defined __need_timeval || defined __USE_GNU
+# ifndef _STRUCT_TIMEVAL
+#  define _STRUCT_TIMEVAL      1
+#  include <bits/types.h>
+
+/* A time value that is accurate to the nearest
+   microsecond but also has a range of years.  */
+struct timeval
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __suseconds_t tv_usec;     /* Microseconds.  */
+  };
+# endif        /* struct timeval */
+#endif
+
+#ifndef __need_timeval
+# ifndef _BITS_TIME_H
+#  define _BITS_TIME_H 1
+
+/* ISO/IEC 9899:1999 7.23.1: Components of time
+   The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is
+   the number per second of the value returned by the `clock' function.  */
+/* CAE XSH, Issue 4, Version 2: <time.h>
+   The value of CLOCKS_PER_SEC is required to be 1 million on all
+   XSI-conformant systems. */
+#  define CLOCKS_PER_SEC  ((clock_t) 1000000)
+
+#  if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \
+   && !defined __USE_XOPEN2K
+/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
+   presents the real value for clock ticks per second for the system.  */
+#   include <bits/types.h>
+extern long int __sysconf (int);
+#   define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
+#  endif
+
+#  ifdef __USE_POSIX199309
+/* Identifier for system-wide realtime clock.  */
+#   define CLOCK_REALTIME              0
+/* Monotonic system-wide clock.  */
+#   define CLOCK_MONOTONIC             1
+/* High-resolution timer from the CPU.  */
+#   define CLOCK_PROCESS_CPUTIME_ID    2
+/* Thread-specific CPU-time clock.  */
+#   define CLOCK_THREAD_CPUTIME_ID     3
+/* Monotonic system-wide clock, not adjusted for frequency scaling.  */
+#   define CLOCK_MONOTONIC_RAW         4
+/* Identifier for system-wide realtime clock, updated only on ticks.  */
+#   define CLOCK_REALTIME_COARSE       5
+/* Monotonic system-wide clock, updated only on ticks.  */
+#   define CLOCK_MONOTONIC_COARSE      6
+/* Monotonic system-wide clock that includes time spent in suspension.  */
+#   define CLOCK_BOOTTIME              7
+/* Like CLOCK_REALTIME but also wakes suspended system.  */
+#   define CLOCK_REALTIME_ALARM                8
+/* Like CLOCK_BOOTTIME but also wakes suspended system.  */
+#   define CLOCK_BOOTTIME_ALARM                9
+/* Like CLOCK_REALTIME but in International Atomic Time.  */
+#   define CLOCK_TAI                   11
+
+/* Flag to indicate time is absolute.  */
+#   define TIMER_ABSTIME               1
+#  endif
+
+#  ifdef __USE_GNU
+#   include <bits/timex.h>
+
+__BEGIN_DECLS
+
+/* Tune a POSIX clock.  */
+extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW;
+
+__END_DECLS
+#  endif /* use GNU */
+
+# endif        /* bits/time.h */
+#endif
+
+#undef __need_timeval
diff --git a/lib/libdss-include/include/bits/timerfd.h b/lib/libdss-include/include/bits/timerfd.h
new file mode 100644 (file)
index 0000000..0ba607e
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 2008-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMERFD_H
+# error "Never use <bits/timerfd.h> directly; include <sys/timerfd.h> instead."
+#endif
+
+/* Bits to be set in the FLAGS parameter of `timerfd_create'.  */
+enum
+  {
+    TFD_CLOEXEC = 02000000,
+#define TFD_CLOEXEC TFD_CLOEXEC
+    TFD_NONBLOCK = 00004000
+#define TFD_NONBLOCK TFD_NONBLOCK
+  };
diff --git a/lib/libdss-include/include/bits/timex.h b/lib/libdss-include/include/bits/timex.h
new file mode 100644 (file)
index 0000000..5eb7ccb
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _BITS_TIMEX_H
+#define        _BITS_TIMEX_H   1
+
+#include <bits/types.h>
+
+/* These definitions from linux/timex.h as of 3.18.  */
+
+struct timex
+{
+  unsigned int modes;          /* mode selector */
+  __syscall_slong_t offset;    /* time offset (usec) */
+  __syscall_slong_t freq;      /* frequency offset (scaled ppm) */
+  __syscall_slong_t maxerror;  /* maximum error (usec) */
+  __syscall_slong_t esterror;  /* estimated error (usec) */
+  int status;                  /* clock command/status */
+  __syscall_slong_t constant;  /* pll time constant */
+  __syscall_slong_t precision; /* clock precision (usec) (ro) */
+  __syscall_slong_t tolerance; /* clock frequency tolerance (ppm) (ro) */
+  struct timeval time;         /* (read only, except for ADJ_SETOFFSET) */
+  __syscall_slong_t tick;      /* (modified) usecs between clock ticks */
+  __syscall_slong_t ppsfreq;   /* pps frequency (scaled ppm) (ro) */
+  __syscall_slong_t jitter;    /* pps jitter (us) (ro) */
+  int shift;                   /* interval duration (s) (shift) (ro) */
+  __syscall_slong_t stabil;    /* pps stability (scaled ppm) (ro) */
+  __syscall_slong_t jitcnt;    /* jitter limit exceeded (ro) */
+  __syscall_slong_t calcnt;    /* calibration intervals (ro) */
+  __syscall_slong_t errcnt;    /* calibration errors (ro) */
+  __syscall_slong_t stbcnt;    /* stability limit exceeded (ro) */
+
+  int tai;                     /* TAI offset (ro) */
+
+  /* ??? */
+  int  :32; int  :32; int  :32; int  :32;
+  int  :32; int  :32; int  :32; int  :32;
+  int  :32; int  :32; int  :32;
+};
+
+/* Mode codes (timex.mode) */
+#define ADJ_OFFSET             0x0001  /* time offset */
+#define ADJ_FREQUENCY          0x0002  /* frequency offset */
+#define ADJ_MAXERROR           0x0004  /* maximum time error */
+#define ADJ_ESTERROR           0x0008  /* estimated time error */
+#define ADJ_STATUS             0x0010  /* clock status */
+#define ADJ_TIMECONST          0x0020  /* pll time constant */
+#define ADJ_TAI                        0x0080  /* set TAI offset */
+#define ADJ_SETOFFSET          0x0100  /* add 'time' to current time */
+#define ADJ_MICRO              0x1000  /* select microsecond resolution */
+#define ADJ_NANO               0x2000  /* select nanosecond resolution */
+#define ADJ_TICK               0x4000  /* tick value */
+#define ADJ_OFFSET_SINGLESHOT  0x8001  /* old-fashioned adjtime */
+#define ADJ_OFFSET_SS_READ     0xa001  /* read-only adjtime */
+
+/* xntp 3.4 compatibility names */
+#define MOD_OFFSET     ADJ_OFFSET
+#define MOD_FREQUENCY  ADJ_FREQUENCY
+#define MOD_MAXERROR   ADJ_MAXERROR
+#define MOD_ESTERROR   ADJ_ESTERROR
+#define MOD_STATUS     ADJ_STATUS
+#define MOD_TIMECONST  ADJ_TIMECONST
+#define MOD_CLKB       ADJ_TICK
+#define MOD_CLKA       ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */
+#define MOD_TAI                ADJ_TAI
+#define MOD_MICRO      ADJ_MICRO
+#define MOD_NANO       ADJ_NANO
+
+
+/* Status codes (timex.status) */
+#define STA_PLL                0x0001  /* enable PLL updates (rw) */
+#define STA_PPSFREQ    0x0002  /* enable PPS freq discipline (rw) */
+#define STA_PPSTIME    0x0004  /* enable PPS time discipline (rw) */
+#define STA_FLL                0x0008  /* select frequency-lock mode (rw) */
+
+#define STA_INS                0x0010  /* insert leap (rw) */
+#define STA_DEL                0x0020  /* delete leap (rw) */
+#define STA_UNSYNC     0x0040  /* clock unsynchronized (rw) */
+#define STA_FREQHOLD   0x0080  /* hold frequency (rw) */
+
+#define STA_PPSSIGNAL  0x0100  /* PPS signal present (ro) */
+#define STA_PPSJITTER  0x0200  /* PPS signal jitter exceeded (ro) */
+#define STA_PPSWANDER  0x0400  /* PPS signal wander exceeded (ro) */
+#define STA_PPSERROR   0x0800  /* PPS signal calibration error (ro) */
+
+#define STA_CLOCKERR   0x1000  /* clock hardware fault (ro) */
+#define STA_NANO       0x2000  /* resolution (0 = us, 1 = ns) (ro) */
+#define STA_MODE       0x4000  /* mode (0 = PLL, 1 = FLL) (ro) */
+#define STA_CLK                0x8000  /* clock source (0 = A, 1 = B) (ro) */
+
+/* Read-only bits */
+#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
+    STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
+
+#endif /* bits/timex.h */
diff --git a/lib/libdss-include/include/bits/types.h b/lib/libdss-include/include/bits/types.h
new file mode 100644 (file)
index 0000000..01753bd
--- /dev/null
@@ -0,0 +1,194 @@
+/* bits/types.h -- definitions of __*_t types underlying *_t types.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+
+#ifndef        _BITS_TYPES_H
+#define        _BITS_TYPES_H   1
+
+#include <features.h>
+#include <bits/wordsize.h>
+
+/* Convenience types.  */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+/* Fixed-size types, underlying types depend on word size and compiler.  */
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+#if __WORDSIZE == 64
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+#else
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+#endif
+
+/* quad_t is also 64 bits.  */
+#if __WORDSIZE == 64
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+#else
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+#endif
+
+
+/* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
+   macros for each of the OS types we define below.  The definitions
+   of those macros must use the following macros for underlying types.
+   We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
+   variants of each of the following integer types on this machine.
+
+       16              -- "natural" 16-bit type (always short)
+       32              -- "natural" 32-bit type (always int)
+       64              -- "natural" 64-bit type (long or long long)
+       LONG32          -- 32-bit type, traditionally long
+       QUAD            -- 64-bit type, always long long
+       WORD            -- natural type of __WORDSIZE bits (int or long)
+       LONGWORD        -- type of __WORDSIZE bits, traditionally long
+
+   We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
+   conventional uses of `long' or `long long' type modifiers match the
+   types we define, even when a less-adorned type would be the same size.
+   This matters for (somewhat) portably writing printf/scanf formats for
+   these types, where using the appropriate l or ll format modifiers can
+   make the typedefs and the formats match up across all GNU platforms.  If
+   we used `long' when it's 64 bits where `long long' is expected, then the
+   compiler would warn about the formats not matching the argument types,
+   and the programmer changing them to shut up the compiler would break the
+   program's portability.
+
+   Here we assume what is presently the case in all the GCC configurations
+   we support: long long is always 64 bits, long is always word/address size,
+   and int is always 32 bits.  */
+
+#define        __S16_TYPE              short int
+#define __U16_TYPE             unsigned short int
+#define        __S32_TYPE              int
+#define __U32_TYPE             unsigned int
+#define __SLONGWORD_TYPE       long int
+#define __ULONGWORD_TYPE       unsigned long int
+#if __WORDSIZE == 32
+# define __SQUAD_TYPE          __quad_t
+# define __UQUAD_TYPE          __u_quad_t
+# define __SWORD_TYPE          int
+# define __UWORD_TYPE          unsigned int
+# define __SLONG32_TYPE                long int
+# define __ULONG32_TYPE                unsigned long int
+# define __S64_TYPE            __quad_t
+# define __U64_TYPE            __u_quad_t
+/* We want __extension__ before typedef's that use nonstandard base types
+   such as `long long' in C89 mode.  */
+# define __STD_TYPE            __extension__ typedef
+#elif __WORDSIZE == 64
+# define __SQUAD_TYPE          long int
+# define __UQUAD_TYPE          unsigned long int
+# define __SWORD_TYPE          long int
+# define __UWORD_TYPE          unsigned long int
+# define __SLONG32_TYPE                int
+# define __ULONG32_TYPE                unsigned int
+# define __S64_TYPE            long int
+# define __U64_TYPE            unsigned long int
+/* No need to mark the typedef with __extension__.   */
+# define __STD_TYPE            typedef
+#else
+# error
+#endif
+#include <bits/typesizes.h>    /* Defines __*_T_TYPE macros.  */
+
+
+__STD_TYPE __DEV_T_TYPE __dev_t;       /* Type of device numbers.  */
+__STD_TYPE __UID_T_TYPE __uid_t;       /* Type of user identifications.  */
+__STD_TYPE __GID_T_TYPE __gid_t;       /* Type of group identifications.  */
+__STD_TYPE __INO_T_TYPE __ino_t;       /* Type of file serial numbers.  */
+__STD_TYPE __INO64_T_TYPE __ino64_t;   /* Type of file serial numbers (LFS).*/
+__STD_TYPE __MODE_T_TYPE __mode_t;     /* Type of file attribute bitmasks.  */
+__STD_TYPE __NLINK_T_TYPE __nlink_t;   /* Type of file link counts.  */
+__STD_TYPE __OFF_T_TYPE __off_t;       /* Type of file sizes and offsets.  */
+__STD_TYPE __OFF64_T_TYPE __off64_t;   /* Type of file sizes and offsets (LFS).  */
+__STD_TYPE __PID_T_TYPE __pid_t;       /* Type of process identifications.  */
+__STD_TYPE __FSID_T_TYPE __fsid_t;     /* Type of file system IDs.  */
+__STD_TYPE __CLOCK_T_TYPE __clock_t;   /* Type of CPU usage counts.  */
+__STD_TYPE __RLIM_T_TYPE __rlim_t;     /* Type for resource measurement.  */
+__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS).  */
+__STD_TYPE __ID_T_TYPE __id_t;         /* General type for IDs.  */
+__STD_TYPE __TIME_T_TYPE __time_t;     /* Seconds since the Epoch.  */
+__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds.  */
+__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds.  */
+
+__STD_TYPE __DADDR_T_TYPE __daddr_t;   /* The type of a disk address.  */
+__STD_TYPE __KEY_T_TYPE __key_t;       /* Type of an IPC key.  */
+
+/* Clock ID used in clock and timer functions.  */
+__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+
+/* Timer ID returned by `timer_create'.  */
+__STD_TYPE __TIMER_T_TYPE __timer_t;
+
+/* Type to represent block size.  */
+__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number of disk blocks.  */
+__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
+
+/* Type to count file system nodes.  */
+__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
+
+/* Type of miscellaneous file system fields.  */
+__STD_TYPE __FSWORD_T_TYPE __fsword_t;
+
+__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */
+
+/* Signed long type used in system calls.  */
+__STD_TYPE __SYSCALL_SLONG_TYPE __syscall_slong_t;
+/* Unsigned long type used in system calls.  */
+__STD_TYPE __SYSCALL_ULONG_TYPE __syscall_ulong_t;
+
+/* These few don't really vary by system, they always correspond
+   to one of the other defined types.  */
+typedef __off64_t __loff_t;    /* Type of file sizes and offsets (LFS).  */
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+
+/* Duplicates info from stdint.h but this is used in unistd.h.  */
+__STD_TYPE __SWORD_TYPE __intptr_t;
+
+/* Duplicate info from sys/socket.h.  */
+__STD_TYPE __U32_TYPE __socklen_t;
+
+
+#undef __STD_TYPE
+
+#endif /* bits/types.h */
diff --git a/lib/libdss-include/include/bits/typesizes.h b/lib/libdss-include/include/bits/typesizes.h
new file mode 100644 (file)
index 0000000..c31bba2
--- /dev/null
@@ -0,0 +1,79 @@
+/* bits/typesizes.h -- underlying types for *_t.  For the generic Linux ABI.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef        _BITS_TYPESIZES_H
+#define        _BITS_TYPESIZES_H       1
+
+/* See <bits/types.h> for the meaning of these macros.  This file exists so
+   that <bits/types.h> need not vary across different GNU platforms.  */
+
+#define __DEV_T_TYPE           __UQUAD_TYPE
+#define __UID_T_TYPE           __U32_TYPE
+#define __GID_T_TYPE           __U32_TYPE
+#define __INO_T_TYPE           __ULONGWORD_TYPE
+#define __INO64_T_TYPE         __UQUAD_TYPE
+#define __MODE_T_TYPE          __U32_TYPE
+#define __NLINK_T_TYPE         __U32_TYPE
+#define __OFF_T_TYPE           __SLONGWORD_TYPE
+#define __OFF64_T_TYPE         __SQUAD_TYPE
+#define __PID_T_TYPE           __S32_TYPE
+#define __RLIM_T_TYPE          __ULONGWORD_TYPE
+#define __RLIM64_T_TYPE                __UQUAD_TYPE
+#define        __BLKCNT_T_TYPE         __SLONGWORD_TYPE
+#define        __BLKCNT64_T_TYPE       __SQUAD_TYPE
+#define        __FSBLKCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSBLKCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSFILCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSFILCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSWORD_T_TYPE         __SWORD_TYPE
+#define        __ID_T_TYPE             __U32_TYPE
+#define __CLOCK_T_TYPE         __SLONGWORD_TYPE
+#define __TIME_T_TYPE          __SLONGWORD_TYPE
+#define __USECONDS_T_TYPE      __U32_TYPE
+#define __SUSECONDS_T_TYPE     __SLONGWORD_TYPE
+#define __DADDR_T_TYPE         __S32_TYPE
+#define __KEY_T_TYPE           __S32_TYPE
+#define __CLOCKID_T_TYPE       __S32_TYPE
+#define __TIMER_T_TYPE         void *
+#define __BLKSIZE_T_TYPE       __S32_TYPE
+#define __FSID_T_TYPE          struct { int __val[2]; }
+#define __SSIZE_T_TYPE         __SWORD_TYPE
+#define __SYSCALL_SLONG_TYPE   __SLONGWORD_TYPE
+#define __SYSCALL_ULONG_TYPE   __ULONGWORD_TYPE
+#define __CPU_MASK_TYPE        __ULONGWORD_TYPE
+
+#ifdef __LP64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T       1
+
+/* Same for ino_t and ino64_t.  */
+# define __INO_T_MATCHES_INO64_T       1
+#endif
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define        __FD_SETSIZE            1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/lib/libdss-include/include/bits/uio.h b/lib/libdss-include/include/bits/uio.h
new file mode 100644 (file)
index 0000000..7684b3e
--- /dev/null
@@ -0,0 +1,77 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_UIO_H && !defined _FCNTL_H
+# error "Never include <bits/uio.h> directly; use <sys/uio.h> instead."
+#endif
+
+#ifndef _BITS_UIO_H
+#define _BITS_UIO_H    1
+
+#include <sys/types.h>
+
+
+/* We should normally use the Linux kernel header file to define this
+   type and macros but this calls for trouble because of the header
+   includes other kernel headers.  */
+
+/* Size of object which can be written atomically.
+
+   This macro has different values in different kernel versions.  The
+   latest versions of the kernel use 1024 and this is good choice.  Since
+   the C library implementation of readv/writev is able to emulate the
+   functionality even if the currently running kernel does not support
+   this large value the readv/writev call will not fail because of this.  */
+#define UIO_MAXIOV     1024
+
+
+/* Structure for scatter/gather I/O.  */
+struct iovec
+  {
+    void *iov_base;    /* Pointer to data.  */
+    size_t iov_len;    /* Length of data.  */
+  };
+
+#endif
+
+
+#ifdef __USE_GNU
+# if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H
+#  define _BITS_UIO_H_FOR_SYS_UIO_H 1
+
+__BEGIN_DECLS
+
+/* Read from another process' address space.  */
+extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec,
+                                unsigned long int __liovcnt,
+                                const struct iovec *__rvec,
+                                unsigned long int __riovcnt,
+                                unsigned long int __flags)
+  __THROW;
+
+/* Write to another process' address space.  */
+extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
+                                 unsigned long int __liovcnt,
+                                 const struct iovec *__rvec,
+                                 unsigned long int __riovcnt,
+                                 unsigned long int __flags)
+  __THROW;
+
+__END_DECLS
+
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/unistd.h b/lib/libdss-include/include/bits/unistd.h
new file mode 100644 (file)
index 0000000..0105f04
--- /dev/null
@@ -0,0 +1,385 @@
+/* Checking macros for unistd functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTD_H
+# error "Never include <bits/unistd.h> directly; use <unistd.h> instead."
+#endif
+
+extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes,
+                          size_t __buflen) __wur;
+extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,
+                                         size_t __nbytes), read) __wur;
+extern ssize_t __REDIRECT (__read_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           size_t __buflen), __read_chk)
+     __wur __warnattr ("read called with bigger length than size of "
+                      "the destination buffer");
+
+__fortify_function __wur ssize_t
+read (int __fd, void *__buf, size_t __nbytes)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __read_chk (__fd, __buf, __nbytes, __bos0 (__buf));
+
+      if (__nbytes > __bos0 (__buf))
+       return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf));
+    }
+  return __read_alias (__fd, __buf, __nbytes);
+}
+
+#ifdef __USE_UNIX98
+extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset, size_t __bufsize) __wur;
+extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes,
+                             __off64_t __offset, size_t __bufsize) __wur;
+extern ssize_t __REDIRECT (__pread_alias,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset), pread) __wur;
+extern ssize_t __REDIRECT (__pread64_alias,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off64_t __offset), pread64) __wur;
+extern ssize_t __REDIRECT (__pread_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off_t __offset, size_t __bufsize), __pread_chk)
+     __wur __warnattr ("pread called with bigger length than size of "
+                      "the destination buffer");
+extern ssize_t __REDIRECT (__pread64_chk_warn,
+                          (int __fd, void *__buf, size_t __nbytes,
+                           __off64_t __offset, size_t __bufsize),
+                           __pread64_chk)
+     __wur __warnattr ("pread64 called with bigger length than size of "
+                      "the destination buffer");
+
+# ifndef __USE_FILE_OFFSET64
+__fortify_function __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread_chk_warn (__fd, __buf, __nbytes, __offset,
+                                __bos0 (__buf));
+    }
+  return __pread_alias (__fd, __buf, __nbytes, __offset);
+}
+# else
+__fortify_function __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
+                                  __bos0 (__buf));
+    }
+
+  return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
+# endif
+
+# ifdef __USE_LARGEFILE64
+__fortify_function __wur ssize_t
+pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
+{
+  if (__bos0 (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__nbytes))
+       return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
+
+      if ( __nbytes > __bos0 (__buf))
+       return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
+                                  __bos0 (__buf));
+    }
+
+  return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+extern ssize_t __readlink_chk (const char *__restrict __path,
+                              char *__restrict __buf, size_t __len,
+                              size_t __buflen)
+     __THROW __nonnull ((1, 2)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlink_alias,
+                              (const char *__restrict __path,
+                               char *__restrict __buf, size_t __len), readlink)
+     __nonnull ((1, 2)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlink_chk_warn,
+                              (const char *__restrict __path,
+                               char *__restrict __buf, size_t __len,
+                               size_t __buflen), __readlink_chk)
+     __nonnull ((1, 2)) __wur __warnattr ("readlink called with bigger length "
+                                         "than size of destination buffer");
+
+__fortify_function __nonnull ((1, 2)) __wur ssize_t
+__NTH (readlink (const char *__restrict __path, char *__restrict __buf,
+                size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __readlink_chk (__path, __buf, __len, __bos (__buf));
+
+      if ( __len > __bos (__buf))
+       return __readlink_chk_warn (__path, __buf, __len, __bos (__buf));
+    }
+  return __readlink_alias (__path, __buf, __len);
+}
+#endif
+
+#ifdef __USE_ATFILE
+extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path,
+                                char *__restrict __buf, size_t __len,
+                                size_t __buflen)
+     __THROW __nonnull ((2, 3)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlinkat_alias,
+                              (int __fd, const char *__restrict __path,
+                               char *__restrict __buf, size_t __len),
+                              readlinkat)
+     __nonnull ((2, 3)) __wur;
+extern ssize_t __REDIRECT_NTH (__readlinkat_chk_warn,
+                              (int __fd, const char *__restrict __path,
+                               char *__restrict __buf, size_t __len,
+                               size_t __buflen), __readlinkat_chk)
+     __nonnull ((2, 3)) __wur __warnattr ("readlinkat called with bigger "
+                                         "length than size of destination "
+                                         "buffer");
+
+__fortify_function __nonnull ((2, 3)) __wur ssize_t
+__NTH (readlinkat (int __fd, const char *__restrict __path,
+                  char *__restrict __buf, size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __readlinkat_chk (__fd, __path, __buf, __len, __bos (__buf));
+
+      if (__len > __bos (__buf))
+       return __readlinkat_chk_warn (__fd, __path, __buf, __len,
+                                     __bos (__buf));
+    }
+  return __readlinkat_alias (__fd, __path, __buf, __len);
+}
+#endif
+
+extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)
+     __THROW __wur;
+extern char *__REDIRECT_NTH (__getcwd_alias,
+                            (char *__buf, size_t __size), getcwd) __wur;
+extern char *__REDIRECT_NTH (__getcwd_chk_warn,
+                            (char *__buf, size_t __size, size_t __buflen),
+                            __getcwd_chk)
+     __wur __warnattr ("getcwd caller with bigger length than size of "
+                      "destination buffer");
+
+__fortify_function __wur char *
+__NTH (getcwd (char *__buf, size_t __size))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size))
+       return __getcwd_chk (__buf, __size, __bos (__buf));
+
+      if (__size > __bos (__buf))
+       return __getcwd_chk_warn (__buf, __size, __bos (__buf));
+    }
+  return __getcwd_alias (__buf, __size);
+}
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+extern char *__getwd_chk (char *__buf, size_t buflen)
+     __THROW __nonnull ((1)) __wur;
+extern char *__REDIRECT_NTH (__getwd_warn, (char *__buf), getwd)
+     __nonnull ((1)) __wur __warnattr ("please use getcwd instead, as getwd "
+                                      "doesn't specify buffer size");
+
+__fortify_function __nonnull ((1)) __attribute_deprecated__ __wur char *
+__NTH (getwd (char *__buf))
+{
+  if (__bos (__buf) != (size_t) -1)
+    return __getwd_chk (__buf, __bos (__buf));
+  return __getwd_warn (__buf);
+}
+#endif
+
+extern size_t __confstr_chk (int __name, char *__buf, size_t __len,
+                            size_t __buflen) __THROW;
+extern size_t __REDIRECT_NTH (__confstr_alias, (int __name, char *__buf,
+                                               size_t __len), confstr);
+extern size_t __REDIRECT_NTH (__confstr_chk_warn,
+                             (int __name, char *__buf, size_t __len,
+                              size_t __buflen), __confstr_chk)
+     __warnattr ("confstr called with bigger length than size of destination "
+                "buffer");
+
+__fortify_function size_t
+__NTH (confstr (int __name, char *__buf, size_t __len))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __confstr_chk (__name, __buf, __len, __bos (__buf));
+
+      if (__bos (__buf) < __len)
+       return __confstr_chk_warn (__name, __buf, __len, __bos (__buf));
+    }
+  return __confstr_alias (__name, __buf, __len);
+}
+
+
+extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen)
+     __THROW __wur;
+extern int __REDIRECT_NTH (__getgroups_alias, (int __size, __gid_t __list[]),
+                          getgroups) __wur;
+extern int __REDIRECT_NTH (__getgroups_chk_warn,
+                          (int __size, __gid_t __list[], size_t __listlen),
+                          __getgroups_chk)
+     __wur __warnattr ("getgroups called with bigger group count than what "
+                      "can fit into destination buffer");
+
+__fortify_function int
+__NTH (getgroups (int __size, __gid_t __list[]))
+{
+  if (__bos (__list) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size) || __size < 0)
+       return __getgroups_chk (__size, __list, __bos (__list));
+
+      if (__size * sizeof (__gid_t) > __bos (__list))
+       return __getgroups_chk_warn (__size, __list, __bos (__list));
+    }
+  return __getgroups_alias (__size, __list);
+}
+
+
+extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ttyname_r_alias, (int __fd, char *__buf,
+                                              size_t __buflen), ttyname_r)
+     __nonnull ((2));
+extern int __REDIRECT_NTH (__ttyname_r_chk_warn,
+                          (int __fd, char *__buf, size_t __buflen,
+                           size_t __nreal), __ttyname_r_chk)
+     __nonnull ((2)) __warnattr ("ttyname_r called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+__NTH (ttyname_r (int __fd, char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __ttyname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __ttyname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+    }
+  return __ttyname_r_alias (__fd, __buf, __buflen);
+}
+
+
+#if defined __USE_REENTRANT || defined __USE_POSIX199506
+extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __nonnull ((1));
+extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen),
+                      getlogin_r) __nonnull ((1));
+extern int __REDIRECT (__getlogin_r_chk_warn,
+                      (char *__buf, size_t __buflen, size_t __nreal),
+                      __getlogin_r_chk)
+     __nonnull ((1)) __warnattr ("getlogin_r called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+getlogin_r (char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __getlogin_r_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __getlogin_r_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __getlogin_r_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_MISC || defined __USE_UNIX98
+extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1));
+extern int __REDIRECT_NTH (__gethostname_alias, (char *__buf, size_t __buflen),
+                          gethostname) __nonnull ((1));
+extern int __REDIRECT_NTH (__gethostname_chk_warn,
+                          (char *__buf, size_t __buflen, size_t __nreal),
+                          __gethostname_chk)
+     __nonnull ((1)) __warnattr ("gethostname called with bigger buflen than "
+                                "size of destination buffer");
+
+__fortify_function int
+__NTH (gethostname (char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __gethostname_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __gethostname_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __gethostname_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_UNIX98)
+extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1)) __wur;
+extern int __REDIRECT_NTH (__getdomainname_alias, (char *__buf,
+                                                  size_t __buflen),
+                          getdomainname) __nonnull ((1)) __wur;
+extern int __REDIRECT_NTH (__getdomainname_chk_warn,
+                          (char *__buf, size_t __buflen, size_t __nreal),
+                          __getdomainname_chk)
+     __nonnull ((1)) __wur __warnattr ("getdomainname called with bigger "
+                                      "buflen than size of destination "
+                                      "buffer");
+
+__fortify_function int
+__NTH (getdomainname (char *__buf, size_t __buflen))
+{
+  if (__bos (__buf) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+       return __getdomainname_chk (__buf, __buflen, __bos (__buf));
+
+      if (__buflen > __bos (__buf))
+       return __getdomainname_chk_warn (__buf, __buflen, __bos (__buf));
+    }
+  return __getdomainname_alias (__buf, __buflen);
+}
+#endif
diff --git a/lib/libdss-include/include/bits/ustat.h b/lib/libdss-include/include/bits/ustat.h
new file mode 100644 (file)
index 0000000..0da6240
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USTAT_H
+# error "Never include <bits/ustat.h> directly; use <sys/ustat.h> instead."
+#endif
+
+#include <sys/types.h>
+
+struct ustat
+  {
+    __daddr_t f_tfree;         /* Number of free blocks.  */
+    __ino_t f_tinode;          /* Number of free inodes.  */
+    char f_fname[6];
+    char f_fpack[6];
+  };
diff --git a/lib/libdss-include/include/bits/utmp.h b/lib/libdss-include/include/bits/utmp.h
new file mode 100644 (file)
index 0000000..2a1ffcb
--- /dev/null
@@ -0,0 +1,123 @@
+/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
+#endif
+
+#include <paths.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <bits/wordsize.h>
+
+
+#define UT_LINESIZE    32
+#define UT_NAMESIZE    32
+#define UT_HOSTSIZE    256
+
+
+/* The structure describing an entry in the database of
+   previous logins.  */
+struct lastlog
+  {
+#ifdef __WORDSIZE_TIME64_COMPAT32
+    int32_t ll_time;
+#else
+    __time_t ll_time;
+#endif
+    char ll_line[UT_LINESIZE];
+    char ll_host[UT_HOSTSIZE];
+  };
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmp' below.  */
+struct exit_status
+  {
+    short int e_termination;   /* Process termination status.  */
+    short int e_exit;          /* Process exit status.  */
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp
+{
+  short int ut_type;           /* Type of login.  */
+  pid_t ut_pid;                        /* Process ID of login process.  */
+  char ut_line[UT_LINESIZE];   /* Devicename.  */
+  char ut_id[4];               /* Inittab ID.  */
+  char ut_user[UT_NAMESIZE];   /* Username.  */
+  char ut_host[UT_HOSTSIZE];   /* Hostname for remote login.  */
+  struct exit_status ut_exit;  /* Exit status of a process marked
+                                  as DEAD_PROCESS.  */
+/* The ut_session and ut_tv fields must be the same size when compiled
+   32- and 64-bit.  This allows data files and shared memory to be
+   shared between 32- and 64-bit applications.  */
+#ifdef __WORDSIZE_TIME64_COMPAT32
+  int32_t ut_session;          /* Session ID, used for windowing.  */
+  struct
+  {
+    int32_t tv_sec;            /* Seconds.  */
+    int32_t tv_usec;           /* Microseconds.  */
+  } ut_tv;                     /* Time entry was made.  */
+#else
+  long int ut_session;         /* Session ID, used for windowing.  */
+  struct timeval ut_tv;                /* Time entry was made.  */
+#endif
+
+  int32_t ut_addr_v6[4];       /* Internet address of remote host.  */
+  char __glibc_reserved[20];           /* Reserved for future use.  */
+};
+
+/* Backwards compatibility hacks.  */
+#define ut_name                ut_user
+#ifndef _NO_UT_TIME
+/* We have a problem here: `ut_time' is also used otherwise.  Define
+   _NO_UT_TIME if the compiler complains.  */
+# define ut_time       ut_tv.tv_sec
+#endif
+#define ut_xtime       ut_tv.tv_sec
+#define ut_addr                ut_addr_v6[0]
+
+
+/* Values for the `ut_type' field of a `struct utmp'.  */
+#define EMPTY          0       /* No valid user accounting information.  */
+
+#define RUN_LVL                1       /* The system's runlevel.  */
+#define BOOT_TIME      2       /* Time of system boot.  */
+#define NEW_TIME       3       /* Time after system clock changed.  */
+#define OLD_TIME       4       /* Time when system clock changed.  */
+
+#define INIT_PROCESS   5       /* Process spawned by the init process.  */
+#define LOGIN_PROCESS  6       /* Session leader of a logged in user.  */
+#define USER_PROCESS   7       /* Normal process.  */
+#define DEAD_PROCESS   8       /* Terminated process.  */
+
+#define ACCOUNTING     9
+
+/* Old Linux name for the EMPTY type.  */
+#define UT_UNKNOWN     EMPTY
+
+
+/* Tell the user that we have a modern system with UT_HOST, UT_PID,
+   UT_TYPE, UT_ID and UT_TV fields.  */
+#define _HAVE_UT_TYPE  1
+#define _HAVE_UT_PID   1
+#define _HAVE_UT_ID    1
+#define _HAVE_UT_TV    1
+#define _HAVE_UT_HOST  1
diff --git a/lib/libdss-include/include/bits/utmpx.h b/lib/libdss-include/include/bits/utmpx.h
new file mode 100644 (file)
index 0000000..b41548b
--- /dev/null
@@ -0,0 +1,102 @@
+/* Structures and definitions for the user accounting database.  GNU version.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMPX_H
+# error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <sys/time.h>
+#include <bits/wordsize.h>
+
+
+#ifdef __USE_GNU
+# include <paths.h>
+# define _PATH_UTMPX   _PATH_UTMP
+# define _PATH_WTMPX   _PATH_WTMP
+#endif
+
+
+#define __UT_LINESIZE  32
+#define __UT_NAMESIZE  32
+#define __UT_HOSTSIZE  256
+
+
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmpx' below.  */
+struct __exit_status
+  {
+#ifdef __USE_GNU
+    short int e_termination;   /* Process termination status.  */
+    short int e_exit;          /* Process exit status.  */
+#else
+    short int __e_termination; /* Process termination status.  */
+    short int __e_exit;                /* Process exit status.  */
+#endif
+  };
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx
+{
+  short int ut_type;           /* Type of login.  */
+  __pid_t ut_pid;              /* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE]; /* Devicename.  */
+  char ut_id[4];               /* Inittab ID. */
+  char ut_user[__UT_NAMESIZE]; /* Username.  */
+  char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login.  */
+  struct __exit_status ut_exit;        /* Exit status of a process marked
+                                  as DEAD_PROCESS.  */
+
+/* The fields ut_session and ut_tv must be the same size when compiled
+   32- and 64-bit.  This allows files and shared memory to be shared
+   between 32- and 64-bit applications.  */
+#ifdef __WORDSIZE_TIME64_COMPAT32
+  __int32_t ut_session;                /* Session ID, used for windowing.  */
+  struct
+  {
+    __int32_t tv_sec;          /* Seconds.  */
+    __int32_t tv_usec;         /* Microseconds.  */
+  } ut_tv;                     /* Time entry was made.  */
+#else
+  long int ut_session;         /* Session ID, used for windowing.  */
+  struct timeval ut_tv;                /* Time entry was made.  */
+#endif
+  __int32_t ut_addr_v6[4];     /* Internet address of remote host.  */
+  char __glibc_reserved[20];           /* Reserved for future use.  */
+};
+
+
+/* Values for the `ut_type' field of a `struct utmpx'.  */
+#define EMPTY          0       /* No valid user accounting information.  */
+
+#ifdef __USE_GNU
+# define RUN_LVL       1       /* The system's runlevel.  */
+#endif
+#define BOOT_TIME      2       /* Time of system boot.  */
+#define NEW_TIME       3       /* Time after system clock changed.  */
+#define OLD_TIME       4       /* Time when system clock changed.  */
+
+#define INIT_PROCESS   5       /* Process spawned by the init process.  */
+#define LOGIN_PROCESS  6       /* Session leader of a logged in user.  */
+#define USER_PROCESS   7       /* Normal process.  */
+#define DEAD_PROCESS   8       /* Terminated process.  */
+
+#ifdef __USE_GNU
+# define ACCOUNTING    9       /* System accounting.  */
+#endif
diff --git a/lib/libdss-include/include/bits/utsname.h b/lib/libdss-include/include/bits/utsname.h
new file mode 100644 (file)
index 0000000..070795e
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_UTSNAME_H
+# error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead."
+#endif
+
+/* Length of the entries in `struct utsname' is 65.  */
+#define _UTSNAME_LENGTH 65
+
+/* Linux provides as additional information in the `struct utsname'
+   the name of the current domain.  Define _UTSNAME_DOMAIN_LENGTH
+   to a value != 0 to activate this entry.  */
+#define _UTSNAME_DOMAIN_LENGTH _UTSNAME_LENGTH
diff --git a/lib/libdss-include/include/bits/waitflags.h b/lib/libdss-include/include/bits/waitflags.h
new file mode 100644 (file)
index 0000000..6f505e4
--- /dev/null
@@ -0,0 +1,57 @@
+/* Definitions of flag bits for `waitpid' et al.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_WAIT_H && !defined _STDLIB_H
+# error "Never include <bits/waitflags.h> directly; use <sys/wait.h> instead."
+#endif
+
+
+/* Bits in the third argument to `waitpid'.  */
+#define        WNOHANG         1       /* Don't block waiting.  */
+#define        WUNTRACED       2       /* Report status of stopped children.  */
+
+/* Bits in the fourth argument to `waitid'.  */
+#define WSTOPPED       2       /* Report stopped child (same as WUNTRACED). */
+#define WEXITED                4       /* Report dead child.  */
+#define WCONTINUED     8       /* Report continued child.  */
+#define WNOWAIT                0x01000000 /* Don't reap, just poll status.  */
+
+#define __WNOTHREAD     0x20000000 /* Don't wait on children of other threads
+                                     in this group */
+#define __WALL         0x40000000 /* Wait for any child.  */
+#define __WCLONE       0x80000000 /* Wait for cloned process.  */
+
+/* The following values are used by the `waitid' function.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifndef __ENUM_IDTYPE_T
+# define __ENUM_IDTYPE_T 1
+
+/* The Linux kernel defines these bare, rather than an enum,
+   which causes a conflict if the include order is reversed. */
+# undef P_ALL
+# undef P_PID
+# undef P_PGID
+
+typedef enum
+{
+  P_ALL,               /* Wait for any child.  */
+  P_PID,               /* Wait for specified process.  */
+  P_PGID               /* Wait for members of process group.  */
+} idtype_t;
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/waitstatus.h b/lib/libdss-include/include/bits/waitstatus.h
new file mode 100644 (file)
index 0000000..38c33bc
--- /dev/null
@@ -0,0 +1,105 @@
+/* Definitions of status bits for `wait' et al.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_WAIT_H && !defined _STDLIB_H
+# error "Never include <bits/waitstatus.h> directly; use <sys/wait.h> instead."
+#endif
+
+
+/* Everything extant so far uses these same bits.  */
+
+
+/* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
+#define        __WEXITSTATUS(status)   (((status) & 0xff00) >> 8)
+
+/* If WIFSIGNALED(STATUS), the terminating signal.  */
+#define        __WTERMSIG(status)      ((status) & 0x7f)
+
+/* If WIFSTOPPED(STATUS), the signal that stopped the child.  */
+#define        __WSTOPSIG(status)      __WEXITSTATUS(status)
+
+/* Nonzero if STATUS indicates normal termination.  */
+#define        __WIFEXITED(status)     (__WTERMSIG(status) == 0)
+
+/* Nonzero if STATUS indicates termination by a signal.  */
+#define __WIFSIGNALED(status) \
+  (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
+
+/* Nonzero if STATUS indicates the child is stopped.  */
+#define        __WIFSTOPPED(status)    (((status) & 0xff) == 0x7f)
+
+/* Nonzero if STATUS indicates the child continued after a stop.  We only
+   define this if <bits/waitflags.h> provides the WCONTINUED flag bit.  */
+#ifdef WCONTINUED
+# define __WIFCONTINUED(status)        ((status) == __W_CONTINUED)
+#endif
+
+/* Nonzero if STATUS indicates the child dumped core.  */
+#define        __WCOREDUMP(status)     ((status) & __WCOREFLAG)
+
+/* Macros for constructing status values.  */
+#define        __W_EXITCODE(ret, sig)  ((ret) << 8 | (sig))
+#define        __W_STOPCODE(sig)       ((sig) << 8 | 0x7f)
+#define __W_CONTINUED          0xffff
+#define        __WCOREFLAG             0x80
+
+
+#ifdef __USE_MISC
+
+# include <endian.h>
+
+union wait
+  {
+    int w_status;
+    struct
+      {
+# if   __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int __w_termsig:7; /* Terminating signal.  */
+       unsigned int __w_coredump:1; /* Set if dumped core.  */
+       unsigned int __w_retcode:8; /* Return code if exited normally.  */
+       unsigned int:16;
+# endif                                /* Little endian.  */
+# if   __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int:16;
+       unsigned int __w_retcode:8;
+       unsigned int __w_coredump:1;
+       unsigned int __w_termsig:7;
+# endif                                /* Big endian.  */
+      } __wait_terminated;
+    struct
+      {
+# if   __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
+       unsigned int __w_stopsig:8; /* Stopping signal.  */
+       unsigned int:16;
+# endif                                /* Little endian.  */
+# if   __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int:16;
+       unsigned int __w_stopsig:8; /* Stopping signal.  */
+       unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
+# endif                                /* Big endian.  */
+      } __wait_stopped;
+  };
+
+# define w_termsig     __wait_terminated.__w_termsig
+# define w_coredump    __wait_terminated.__w_coredump
+# define w_retcode     __wait_terminated.__w_retcode
+# define w_stopsig     __wait_stopped.__w_stopsig
+# define w_stopval     __wait_stopped.__w_stopval
+
+#endif /* Use misc.  */
diff --git a/lib/libdss-include/include/bits/wchar-ldbl.h b/lib/libdss-include/include/bits/wchar-ldbl.h
new file mode 100644 (file)
index 0000000..d6c28c5
--- /dev/null
@@ -0,0 +1,74 @@
+/* -mlong-double-64 compatibility mode for <wchar.h> functions.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _WCHAR_H
+# error "Never include <bits/wchar-ldbl.h> directly; use <wchar.h> instead."
+#endif
+
+#if defined __USE_ISOC95 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR_DECL (fwprintf);
+__LDBL_REDIR_DECL (wprintf);
+__LDBL_REDIR_DECL (swprintf);
+__LDBL_REDIR_DECL (vfwprintf);
+__LDBL_REDIR_DECL (vwprintf);
+__LDBL_REDIR_DECL (vswprintf);
+# if defined __USE_ISOC99 && !defined __USE_GNU \
+     && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf)
+__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf)
+__LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf)
+# else
+__LDBL_REDIR_DECL (fwscanf);
+__LDBL_REDIR_DECL (wscanf);
+__LDBL_REDIR_DECL (swscanf);
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__LDBL_REDIR1_DECL (wcstold, wcstod);
+# if !defined __USE_GNU && !defined __REDIRECT \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+__LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf)
+__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf)
+__LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf)
+# else
+__LDBL_REDIR_DECL (vfwscanf);
+__LDBL_REDIR_DECL (vwscanf);
+__LDBL_REDIR_DECL (vswscanf);
+# endif
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (wcstold_l, wcstod_l);
+#endif
+
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+__LDBL_REDIR_DECL (__swprintf_chk)
+__LDBL_REDIR_DECL (__vswprintf_chk)
+# if __USE_FORTIFY_LEVEL > 1
+__LDBL_REDIR_DECL (__fwprintf_chk)
+__LDBL_REDIR_DECL (__wprintf_chk)
+__LDBL_REDIR_DECL (__vfwprintf_chk)
+__LDBL_REDIR_DECL (__vwprintf_chk)
+# endif
+#endif
diff --git a/lib/libdss-include/include/bits/wchar.h b/lib/libdss-include/include/bits/wchar.h
new file mode 100644 (file)
index 0000000..54f00d5
--- /dev/null
@@ -0,0 +1,49 @@
+/* wchar_t type related definitions.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_WCHAR_H
+#define _BITS_WCHAR_H  1
+
+/* The fallback definitions, for when __WCHAR_MAX__ or __WCHAR_MIN__
+   are not defined, give the right value and type as long as both int
+   and wchar_t are 32-bit types.  Adding L'\0' to a constant value
+   ensures that the type is correct; it is necessary to use (L'\0' +
+   0) rather than just L'\0' so that the type in C++ is the promoted
+   version of wchar_t rather than the distinct wchar_t type itself.
+   Because wchar_t in preprocessor #if expressions is treated as
+   intmax_t or uintmax_t, the expression (L'\0' - 1) would have the
+   wrong value for WCHAR_MAX in such expressions and so cannot be used
+   to define __WCHAR_MAX in the unsigned case.  */
+
+#ifdef __WCHAR_MAX__
+# define __WCHAR_MAX   __WCHAR_MAX__
+#elif L'\0' - 1 > 0
+# define __WCHAR_MAX   (0xffffffffu + L'\0')
+#else
+# define __WCHAR_MAX   (0x7fffffff + L'\0')
+#endif
+
+#ifdef __WCHAR_MIN__
+# define __WCHAR_MIN   __WCHAR_MIN__
+#elif L'\0' - 1 > 0
+# define __WCHAR_MIN   (L'\0' + 0)
+#else
+# define __WCHAR_MIN   (-__WCHAR_MAX - 1)
+#endif
+
+#endif /* bits/wchar.h */
diff --git a/lib/libdss-include/include/bits/wchar2.h b/lib/libdss-include/include/bits/wchar2.h
new file mode 100644 (file)
index 0000000..ccf8dc9
--- /dev/null
@@ -0,0 +1,593 @@
+/* Checking macros for wchar functions.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _WCHAR_H
+# error "Never include <bits/wchar2.h> directly; use <wchar.h> instead."
+#endif
+
+
+extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
+                              const wchar_t *__restrict __s2, size_t __n,
+                              size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n),
+                               wmemcpy);
+extern wchar_t *__REDIRECT_NTH (__wmemcpy_chk_warn,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n,
+                                size_t __ns1), __wmemcpy_chk)
+     __warnattr ("wmemcpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
+               size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemcpy_chk (__s1, __s2, __n,
+                             __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmemcpy_chk_warn (__s1, __s2, __n,
+                                  __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmemcpy_alias (__s1, __s2, __n);
+}
+
+
+extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
+                               size_t __n, size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1,
+                                                  const wchar_t *__s2,
+                                                  size_t __n), wmemmove);
+extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
+                               (wchar_t *__s1, const wchar_t *__s2,
+                                size_t __n, size_t __ns1), __wmemmove_chk)
+     __warnattr ("wmemmove called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemmove_chk (__s1, __s2, __n,
+                              __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmemmove_chk_warn (__s1, __s2, __n,
+                                   __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmemmove_alias (__s1, __s2, __n);
+}
+
+
+#ifdef __USE_GNU
+extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
+                               const wchar_t *__restrict __s2, size_t __n,
+                               size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2,
+                                size_t __n), wmempcpy);
+extern wchar_t *__REDIRECT_NTH (__wmempcpy_chk_warn,
+                               (wchar_t *__restrict __s1,
+                                const wchar_t *__restrict __s2, size_t __n,
+                                size_t __ns1), __wmempcpy_chk)
+     __warnattr ("wmempcpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
+                size_t __n))
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmempcpy_chk (__s1, __s2, __n,
+                              __bos0 (__s1) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s1) / sizeof (wchar_t))
+       return __wmempcpy_chk_warn (__s1, __s2, __n,
+                                   __bos0 (__s1) / sizeof (wchar_t));
+    }
+  return __wmempcpy_alias (__s1, __s2, __n);
+}
+#endif
+
+
+extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
+                              size_t __ns) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c,
+                                                 size_t __n), wmemset);
+extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn,
+                               (wchar_t *__s, wchar_t __c, size_t __n,
+                                size_t __ns), __wmemset_chk)
+     __warnattr ("wmemset called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n))
+{
+  if (__bos0 (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wmemset_chk (__s, __c, __n, __bos0 (__s) / sizeof (wchar_t));
+
+      if (__n > __bos0 (__s) / sizeof (wchar_t))
+       return __wmemset_chk_warn (__s, __c, __n,
+                                  __bos0 (__s) / sizeof (wchar_t));
+    }
+  return __wmemset_alias (__s, __c, __n);
+}
+
+
+extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __n) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcscpy);
+
+__fortify_function wchar_t *
+__NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcpcpy);
+
+__fortify_function wchar_t *
+__NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcpcpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src, size_t __n,
+                              size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcsncpy);
+extern wchar_t *__REDIRECT_NTH (__wcsncpy_chk_warn,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n, size_t __destlen), __wcsncpy_chk)
+     __warnattr ("wcsncpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wcsncpy_chk (__dest, __src, __n,
+                             __bos (__dest) / sizeof (wchar_t));
+      if (__n > __bos (__dest) / sizeof (wchar_t))
+       return __wcsncpy_chk_warn (__dest, __src, __n,
+                                  __bos (__dest) / sizeof (wchar_t));
+    }
+  return __wcsncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src, size_t __n,
+                              size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcpncpy);
+extern wchar_t *__REDIRECT_NTH (__wcpncpy_chk_warn,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n, size_t __destlen), __wcpncpy_chk)
+     __warnattr ("wcpncpy called with length bigger than size of destination "
+                "buffer");
+
+__fortify_function wchar_t *
+__NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n))
+       return __wcpncpy_chk (__dest, __src, __n,
+                             __bos (__dest) / sizeof (wchar_t));
+      if (__n > __bos (__dest) / sizeof (wchar_t))
+       return __wcpncpy_chk_warn (__dest, __src, __n,
+                                  __bos (__dest) / sizeof (wchar_t));
+    }
+  return __wcpncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
+                             const wchar_t *__restrict __src,
+                             size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src), wcscat);
+
+__fortify_function wchar_t *
+__NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscat_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
+                              const wchar_t *__restrict __src,
+                              size_t __n, size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncat_alias,
+                               (wchar_t *__restrict __dest,
+                                const wchar_t *__restrict __src,
+                                size_t __n), wcsncat);
+
+__fortify_function wchar_t *
+__NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
+               size_t __n))
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcsncat_chk (__dest, __src, __n,
+                         __bos (__dest) / sizeof (wchar_t));
+  return __wcsncat_alias (__dest, __src, __n);
+}
+
+
+extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
+                          int __flag, size_t __s_len,
+                          const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
+
+extern int __REDIRECT_NTH_LDBL (__swprintf_alias,
+                               (wchar_t *__restrict __s, size_t __n,
+                                const wchar_t *__restrict __fmt, ...),
+                               swprintf);
+
+#ifdef __va_arg_pack
+__fortify_function int
+__NTH (swprintf (wchar_t *__restrict __s, size_t __n,
+                const wchar_t *__restrict __fmt, ...))
+{
+  if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
+    return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+                          __bos (__s) / sizeof (wchar_t),
+                          __fmt, __va_arg_pack ());
+  return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+/* XXX We might want to have support in gcc for swprintf.  */
+# define swprintf(s, n, ...) \
+  (__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1                       \
+   ? __swprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1,                          \
+                    __bos (s) / sizeof (wchar_t), __VA_ARGS__)               \
+   : swprintf (s, n, __VA_ARGS__))
+#endif
+
+extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
+                           int __flag, size_t __s_len,
+                           const wchar_t *__restrict __format,
+                           __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
+
+extern int __REDIRECT_NTH_LDBL (__vswprintf_alias,
+                               (wchar_t *__restrict __s, size_t __n,
+                                const wchar_t *__restrict __fmt,
+                                __gnuc_va_list __ap), vswprintf);
+
+__fortify_function int
+__NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
+                 const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
+{
+  if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
+    return __vswprintf_chk (__s, __n,  __USE_FORTIFY_LEVEL - 1,
+                           __bos (__s) / sizeof (wchar_t), __fmt, __ap);
+  return __vswprintf_alias (__s, __n, __fmt, __ap);
+}
+
+
+#if __USE_FORTIFY_LEVEL > 1
+
+extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
+                          const wchar_t *__restrict __format, ...);
+extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
+                         ...);
+extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
+                           const wchar_t *__restrict __format,
+                           __gnuc_va_list __ap);
+extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
+                          __gnuc_va_list __ap);
+
+# ifdef __va_arg_pack
+__fortify_function int
+wprintf (const wchar_t *__restrict __fmt, ...)
+{
+  return __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
+}
+
+__fortify_function int
+fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
+{
+  return __fwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
+                        __va_arg_pack ());
+}
+# elif !defined __cplusplus
+#  define wprintf(...) \
+  __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  define fwprintf(stream, ...) \
+  __fwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# endif
+
+__fortify_function int
+vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+__fortify_function int
+vfwprintf (__FILE *__restrict __stream,
+          const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vfwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+
+#endif
+
+extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
+                             __FILE *__restrict __stream) __wur;
+extern wchar_t *__REDIRECT (__fgetws_alias,
+                           (wchar_t *__restrict __s, int __n,
+                            __FILE *__restrict __stream), fgetws) __wur;
+extern wchar_t *__REDIRECT (__fgetws_chk_warn,
+                           (wchar_t *__restrict __s, size_t __size, int __n,
+                            __FILE *__restrict __stream), __fgetws_chk)
+     __wur __warnattr ("fgetws called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur wchar_t *
+fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgetws_chk (__s, __bos (__s) / sizeof (wchar_t),
+                            __n, __stream);
+
+      if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
+       return __fgetws_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
+                                 __n, __stream);
+    }
+  return __fgetws_alias (__s, __n, __stream);
+}
+
+#ifdef __USE_GNU
+extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
+                                      int __n, __FILE *__restrict __stream)
+  __wur;
+extern wchar_t *__REDIRECT (__fgetws_unlocked_alias,
+                           (wchar_t *__restrict __s, int __n,
+                            __FILE *__restrict __stream), fgetws_unlocked)
+  __wur;
+extern wchar_t *__REDIRECT (__fgetws_unlocked_chk_warn,
+                           (wchar_t *__restrict __s, size_t __size, int __n,
+                            __FILE *__restrict __stream),
+                           __fgetws_unlocked_chk)
+     __wur __warnattr ("fgetws_unlocked called with bigger size than length "
+                      "of destination buffer");
+
+__fortify_function __wur wchar_t *
+fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+       return __fgetws_unlocked_chk (__s, __bos (__s) / sizeof (wchar_t),
+                                     __n, __stream);
+
+      if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
+       return __fgetws_unlocked_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
+                                          __n, __stream);
+    }
+  return __fgetws_unlocked_alias (__s, __n, __stream);
+}
+#endif
+
+
+extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
+                            mbstate_t *__restrict __p,
+                            size_t __buflen) __THROW __wur;
+extern size_t __REDIRECT_NTH (__wcrtomb_alias,
+                             (char *__restrict __s, wchar_t __wchar,
+                              mbstate_t *__restrict __ps), wcrtomb) __wur;
+
+__fortify_function __wur size_t
+__NTH (wcrtomb (char *__restrict __s, wchar_t __wchar,
+               mbstate_t *__restrict __ps))
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __WCHAR_MB_LEN_MAX     16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __WCHAR_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __WCHAR_MB_LEN_MAX > __bos (__s))
+    return __wcrtomb_chk (__s, __wchar, __ps, __bos (__s));
+  return __wcrtomb_alias (__s, __wchar, __ps);
+}
+
+
+extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsrtowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             mbsrtowcs);
+extern size_t __REDIRECT_NTH (__mbsrtowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __mbsrtowcs_chk)
+     __warnattr ("mbsrtowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
+                 size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbsrtowcs_chk (__dst, __src, __len, __ps,
+                               __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps,
+                                    __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbsrtowcs_alias (__dst, __src, __len, __ps);
+}
+
+
+extern size_t __wcsrtombs_chk (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcsrtombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             wcsrtombs);
+extern size_t __REDIRECT_NTH (__wcsrtombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __wcsrtombs_chk)
+    __warnattr ("wcsrtombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
+                 size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcsrtombs_chk (__dst, __src, __len, __ps, __bos (__dst));
+
+      if (__len > __bos (__dst))
+       return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __bos (__dst));
+    }
+  return __wcsrtombs_alias (__dst, __src, __len, __ps);
+}
+
+
+#ifdef __USE_GNU
+extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
+                               const char **__restrict __src, size_t __nmc,
+                               size_t __len, mbstate_t *__restrict __ps,
+                               size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src, size_t __nmc,
+                              size_t __len, mbstate_t *__restrict __ps),
+                             mbsnrtowcs);
+extern size_t __REDIRECT_NTH (__mbsnrtowcs_chk_warn,
+                             (wchar_t *__restrict __dst,
+                              const char **__restrict __src, size_t __nmc,
+                              size_t __len, mbstate_t *__restrict __ps,
+                              size_t __dstlen), __mbsnrtowcs_chk)
+     __warnattr ("mbsnrtowcs called with dst buffer smaller than len "
+                "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
+                  size_t __nmc, size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps,
+                                __bos (__dst) / sizeof (wchar_t));
+
+      if (__len > __bos (__dst) / sizeof (wchar_t))
+       return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps,
+                                     __bos (__dst) / sizeof (wchar_t));
+    }
+  return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
+}
+
+
+extern size_t __wcsnrtombs_chk (char *__restrict __dst,
+                               const wchar_t **__restrict __src,
+                               size_t __nwc, size_t __len,
+                               mbstate_t *__restrict __ps, size_t __dstlen)
+     __THROW;
+extern size_t __REDIRECT_NTH (__wcsnrtombs_alias,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __nwc, size_t __len,
+                              mbstate_t *__restrict __ps), wcsnrtombs);
+extern size_t __REDIRECT_NTH (__wcsnrtombs_chk_warn,
+                             (char *__restrict __dst,
+                              const wchar_t **__restrict __src,
+                              size_t __nwc, size_t __len,
+                              mbstate_t *__restrict __ps,
+                              size_t __dstlen), __wcsnrtombs_chk)
+     __warnattr ("wcsnrtombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
+                  size_t __nwc, size_t __len, mbstate_t *__restrict __ps))
+{
+  if (__bos (__dst) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+       return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps,
+                                __bos (__dst));
+
+      if (__len > __bos (__dst))
+       return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps,
+                                     __bos (__dst));
+    }
+  return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
+}
+#endif
diff --git a/lib/libdss-include/include/bits/wordsize.h b/lib/libdss-include/include/bits/wordsize.h
new file mode 100644 (file)
index 0000000..0944f9e
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define __WORDSIZE     64
diff --git a/lib/libdss-include/include/bits/xopen_lim.h b/lib/libdss-include/include/bits/xopen_lim.h
new file mode 100644 (file)
index 0000000..26b4fba
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Never include this file directly; use <limits.h> instead.
+ */
+
+/* Additional definitions from X/Open Portability Guide, Issue 4, Version 2
+   System Interfaces and Headers, 4.16 <limits.h>
+
+   Please note only the values which are not greater than the minimum
+   stated in the standard document are listed.  The `sysconf' functions
+   should be used to obtain the actual value.  */
+
+#ifndef _XOPEN_LIM_H
+#define _XOPEN_LIM_H   1
+
+#define __need_IOV_MAX
+#include <bits/stdio_lim.h>
+
+/* We do not provide fixed values for
+
+   ARG_MAX     Maximum length of argument to the `exec' function
+               including environment data.
+
+   ATEXIT_MAX  Maximum number of functions that may be registered
+               with `atexit'.
+
+   CHILD_MAX   Maximum number of simultaneous processes per real
+               user ID.
+
+   OPEN_MAX    Maximum number of files that one process can have open
+               at anyone time.
+
+   PAGESIZE
+   PAGE_SIZE   Size of bytes of a page.
+
+   PASS_MAX    Maximum number of significant bytes in a password.
+
+   We only provide a fixed limit for
+
+   IOV_MAX     Maximum number of `iovec' structures that one process has
+               available for use with `readv' or writev'.
+
+   if this is indeed fixed by the underlying system.
+*/
+
+
+/* Maximum number of `iovec' structures that one process has available
+   for use with `readv' or writev'.  */
+#define        _XOPEN_IOV_MAX  _POSIX_UIO_MAXIOV
+
+
+/* Maximum value of `digit' in calls to the `printf' and `scanf'
+   functions.  We have no limit, so return a reasonable value.  */
+#define NL_ARGMAX      _POSIX_ARG_MAX
+
+/* Maximum number of bytes in a `LANG' name.  We have no limit.  */
+#define NL_LANGMAX     _POSIX2_LINE_MAX
+
+/* Maximum message number.  We have no limit.  */
+#define NL_MSGMAX      INT_MAX
+
+/* Maximum number of bytes in N-to-1 collation mapping.  We have no
+   limit.  */
+#define NL_NMAX                INT_MAX
+
+/* Maximum set number.  We have no limit.  */
+#define NL_SETMAX      INT_MAX
+
+/* Maximum number of bytes in a message.  We have no limit.  */
+#define NL_TEXTMAX     INT_MAX
+
+/* Default process priority.  */
+#define NZERO          20
+
+
+/* Number of bits in a word of type `int'.  */
+#ifdef INT_MAX
+# if INT_MAX == 32767
+#  define WORD_BIT     16
+# else
+#  if INT_MAX == 2147483647
+#   define WORD_BIT    32
+#  else
+/* Safe assumption.  */
+#   define WORD_BIT    64
+#  endif
+# endif
+#elif defined __INT_MAX__
+# if __INT_MAX__ == 32767
+#  define WORD_BIT     16
+# else
+#  if __INT_MAX__ == 2147483647
+#   define WORD_BIT    32
+#  else
+/* Safe assumption.  */
+#   define WORD_BIT    64
+#  endif
+# endif
+#else
+# define WORD_BIT      32
+#endif
+
+/* Number of bits in a word of type `long int'.  */
+#ifdef LONG_MAX
+# if LONG_MAX == 2147483647
+#  define LONG_BIT     32
+# else
+/* Safe assumption.  */
+#  define LONG_BIT     64
+# endif
+#elif defined __LONG_MAX__
+# if __LONG_MAX__ == 2147483647
+#  define LONG_BIT     32
+# else
+/* Safe assumption.  */
+#  define LONG_BIT     64
+# endif
+#else
+# include <bits/wordsize.h>
+# if __WORDSIZE == 64
+#  define LONG_BIT     64
+# else
+#  define LONG_BIT     32
+# endif
+#endif
+
+#endif /* bits/xopen_lim.h */
diff --git a/lib/libdss-include/include/bits/xtitypes.h b/lib/libdss-include/include/bits/xtitypes.h
new file mode 100644 (file)
index 0000000..d794cf4
--- /dev/null
@@ -0,0 +1,33 @@
+/* bits/xtitypes.h -- Define some types used by <bits/stropts.h>.  Generic.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+# error "Never include <bits/xtitypes.h> directly; use <stropts.h> instead."
+#endif
+
+#ifndef _BITS_XTITYPES_H
+#define _BITS_XTITYPES_H       1
+
+#include <bits/types.h>
+
+/* This type is used by some structs in <bits/stropts.h>.  */
+typedef __SLONGWORD_TYPE __t_scalar_t;
+typedef __ULONGWORD_TYPE __t_uscalar_t;
+
+
+#endif /* bits/xtitypes.h */
diff --git a/lib/libdss-include/include/byteswap.h b/lib/libdss-include/include/byteswap.h
new file mode 100644 (file)
index 0000000..d98618c
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BYTESWAP_H
+#define _BYTESWAP_H    1
+
+#include <features.h>
+
+/* Get the machine specific, optimized definitions.  */
+#include <bits/byteswap.h>
+
+
+/* The following definitions must all be macros since otherwise some
+   of the possible optimizations are not possible.  */
+
+/* Return a value with all bytes in the 16 bit argument swapped.  */
+#define bswap_16(x) __bswap_16 (x)
+
+/* Return a value with all bytes in the 32 bit argument swapped.  */
+#define bswap_32(x) __bswap_32 (x)
+
+/* Return a value with all bytes in the 64 bit argument swapped.  */
+#define bswap_64(x) __bswap_64 (x)
+
+#endif /* byteswap.h */
diff --git a/lib/libdss-include/include/complex.h b/lib/libdss-include/include/complex.h
new file mode 100644 (file)
index 0000000..331975e
--- /dev/null
@@ -0,0 +1,112 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99:  7.3 Complex arithmetic        <complex.h>
+ */
+
+#ifndef _COMPLEX_H
+#define _COMPLEX_H     1
+
+#include <features.h>
+
+/* Get general and ISO C99 specific information.  */
+#include <bits/mathdef.h>
+
+__BEGIN_DECLS
+
+/* We might need to add support for more compilers here.  But since ISO
+   C99 is out hopefully all maintained compilers will soon provide the data
+   types `float complex' and `double complex'.  */
+#if __GNUC_PREREQ (2, 7) && !__GNUC_PREREQ (2, 97)
+# define _Complex __complex__
+#endif
+
+#define complex                _Complex
+
+/* Narrowest imaginary unit.  This depends on the floating-point
+   evaluation method.
+   XXX This probably has to go into a gcc related file.  */
+#define _Complex_I     (__extension__ 1.0iF)
+
+/* Another more descriptive name is `I'.
+   XXX Once we have the imaginary support switch this to _Imaginary_I.  */
+#undef I
+#define I _Complex_I
+
+#if defined __USE_ISOC11 && __GNUC_PREREQ (4, 7)
+/* Macros to expand into expression of specified complex type.  */
+# define CMPLX(x, y) __builtin_complex ((double) (x), (double) (y))
+# define CMPLXF(x, y) __builtin_complex ((float) (x), (float) (y))
+# define CMPLXL(x, y) __builtin_complex ((long double) (x), (long double) (y))
+#endif
+
+/* The file <bits/cmathcalls.h> contains the prototypes for all the
+   actual math functions.  These macros are used for those prototypes,
+   so we can easily declare each function as both `name' and `__name',
+   and can declare the float versions `namef' and `__namef'.  */
+
+#define __MATHCALL(function, args)     \
+  __MATHDECL (_Mdouble_complex_,function, args)
+#define __MATHDECL(type, function, args) \
+  __MATHDECL_1(type, function, args); \
+  __MATHDECL_1(type, __CONCAT(__,function), args)
+#define __MATHDECL_1(type, function, args) \
+  extern type __MATH_PRECNAME(function) args __THROW
+
+#define _Mdouble_              double
+#define __MATH_PRECNAME(name)  name
+#include <bits/cmathcalls.h>
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+
+/* Now the float versions.  */
+#ifndef _Mfloat_
+# define _Mfloat_              float
+#endif
+#define _Mdouble_              _Mfloat_
+#define __MATH_PRECNAME(name)  name##f
+#include <bits/cmathcalls.h>
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+
+/* And the long double versions.  It is non-critical to define them
+   here unconditionally since `long double' is required in ISO C99.  */
+#if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC)  \
+    || defined __LDBL_COMPAT
+# ifdef __LDBL_COMPAT
+#  undef __MATHDECL_1
+#  define __MATHDECL_1(type, function, args) \
+  extern type __REDIRECT_NTH(__MATH_PRECNAME(function), args, function)
+# endif
+
+# ifndef _Mlong_double_
+#  define _Mlong_double_       long double
+# endif
+# define _Mdouble_             _Mlong_double_
+# define __MATH_PRECNAME(name) name##l
+# include <bits/cmathcalls.h>
+#endif
+#undef _Mdouble_
+#undef __MATH_PRECNAME
+#undef __MATHDECL_1
+#undef __MATHDECL
+#undef __MATHCALL
+
+__END_DECLS
+
+#endif /* complex.h */
diff --git a/lib/libdss-include/include/cpio.h b/lib/libdss-include/include/cpio.h
new file mode 100644 (file)
index 0000000..9e712fe
--- /dev/null
@@ -0,0 +1,73 @@
+/* Extended cpio format from POSIX.1.
+   This file is part of the GNU C Library.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   NOTE: The canonical source of this file is maintained with the GNU cpio.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _CPIO_H
+#define _CPIO_H 1
+
+/* A cpio archive consists of a sequence of files.
+   Each file has a 76 byte header,
+   a variable length, NUL terminated filename,
+   and variable length file data.
+   A header for a filename "TRAILER!!!" indicates the end of the archive.  */
+
+/* All the fields in the header are ISO 646 (approximately ASCII) strings
+   of octal numbers, left padded, not NUL terminated.
+
+   Field Name  Length in Bytes Notes
+   c_magic     6               must be "070707"
+   c_dev       6
+   c_ino       6
+   c_mode      6               see below for value
+   c_uid       6
+   c_gid       6
+   c_nlink     6
+   c_rdev      6               only valid for chr and blk special files
+   c_mtime     11
+   c_namesize  6               count includes terminating NUL in pathname
+   c_filesize  11              must be 0 for FIFOs and directories  */
+
+/* Value for the field `c_magic'.  */
+#define MAGIC  "070707"
+
+/* Values for c_mode, OR'd together: */
+
+#define C_IRUSR                000400
+#define C_IWUSR                000200
+#define C_IXUSR                000100
+#define C_IRGRP                000040
+#define C_IWGRP                000020
+#define C_IXGRP                000010
+#define C_IROTH                000004
+#define C_IWOTH                000002
+#define C_IXOTH                000001
+
+#define C_ISUID                004000
+#define C_ISGID                002000
+#define C_ISVTX                001000
+
+#define C_ISBLK                060000
+#define C_ISCHR                020000
+#define C_ISDIR                040000
+#define C_ISFIFO       010000
+#define C_ISSOCK       0140000
+#define C_ISLNK                0120000
+#define C_ISCTG                0110000
+#define C_ISREG                0100000
+
+#endif /* cpio.h */
diff --git a/lib/libdss-include/include/crypt.h b/lib/libdss-include/include/crypt.h
new file mode 100644 (file)
index 0000000..e29e1ef
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * UFC-crypt: ultra fast crypt(3) implementation
+ *
+ * Copyright (C) 1991-2016 Free Software Foundation, Inc.
+ *
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * The GNU C Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the GNU C Library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * @(#)crypt.h 1.5 12/20/96
+ *
+ */
+
+#ifndef _CRYPT_H
+#define _CRYPT_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
+extern char *crypt (const char *__key, const char *__salt)
+     __THROW __nonnull ((1, 2));
+
+/* Setup DES tables according KEY.  */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+
+/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
+   block in place.  */
+extern void encrypt (char *__glibc_block, int __edflag)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_GNU
+/* Reentrant versions of the functions above.  The additional argument
+   points to a structure where the results are placed in.  */
+struct crypt_data
+  {
+    char keysched[16 * 8];
+    char sb0[32768];
+    char sb1[32768];
+    char sb2[32768];
+    char sb3[32768];
+    /* end-of-aligment-critical-data */
+    char crypt_3_buf[14];
+    char current_salt[2];
+    long int current_saltbits;
+    int  direction, initialized;
+  };
+
+extern char *crypt_r (const char *__key, const char *__salt,
+                     struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 2, 3));
+
+extern void setkey_r (const char *__key,
+                     struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 2));
+
+extern void encrypt_r (char *__glibc_block, int __edflag,
+                      struct crypt_data * __restrict __data)
+     __THROW __nonnull ((1, 3));
+#endif
+
+__END_DECLS
+
+#endif /* crypt.h */
diff --git a/lib/libdss-include/include/ctype.h b/lib/libdss-include/include/ctype.h
new file mode 100644 (file)
index 0000000..6e2124a
--- /dev/null
@@ -0,0 +1,349 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard 7.4: Character handling        <ctype.h>
+ */
+
+#ifndef        _CTYPE_H
+#define        _CTYPE_H        1
+
+#include <features.h>
+#include <bits/types.h>
+
+__BEGIN_DECLS
+
+#ifndef _ISbit
+/* These are all the characteristics of characters.
+   If there get to be more than 16 distinct characteristics,
+   many things must be changed that use `unsigned short int's.
+
+   The characteristics are stored always in network byte order (big
+   endian).  We define the bit value interpretations here dependent on the
+   machine's byte order.  */
+
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define _ISbit(bit)  (1 << (bit))
+# else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#  define _ISbit(bit)  ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
+# endif
+
+enum
+{
+  _ISupper = _ISbit (0),       /* UPPERCASE.  */
+  _ISlower = _ISbit (1),       /* lowercase.  */
+  _ISalpha = _ISbit (2),       /* Alphabetic.  */
+  _ISdigit = _ISbit (3),       /* Numeric.  */
+  _ISxdigit = _ISbit (4),      /* Hexadecimal numeric.  */
+  _ISspace = _ISbit (5),       /* Whitespace.  */
+  _ISprint = _ISbit (6),       /* Printing.  */
+  _ISgraph = _ISbit (7),       /* Graphical.  */
+  _ISblank = _ISbit (8),       /* Blank (usually SPC and TAB).  */
+  _IScntrl = _ISbit (9),       /* Control character.  */
+  _ISpunct = _ISbit (10),      /* Punctuation.  */
+  _ISalnum = _ISbit (11)       /* Alphanumeric.  */
+};
+#endif /* ! _ISbit  */
+
+/* These are defined in ctype-info.c.
+   The declarations here must match those in localeinfo.h.
+
+   In the thread-specific locale model (see `uselocale' in <locale.h>)
+   we cannot use global variables for these as was done in the past.
+   Instead, the following accessor functions return the address of
+   each variable, which is local to the current thread if multithreaded.
+
+   These point into arrays of 384, so they can be indexed by any `unsigned
+   char' value [0,255]; by EOF (-1); or by any `signed char' value
+   [-128,-1).  ISO C requires that the ctype functions work for `unsigned
+   char' values and for EOF; we also support negative `signed char' values
+   for broken old programs.  The case conversion arrays are of `int's
+   rather than `unsigned char's because tolower (EOF) must be EOF, which
+   doesn't fit into an `unsigned char'.  But today more important is that
+   the arrays are also used for multi-byte character sets.  */
+extern const unsigned short int **__ctype_b_loc (void)
+     __THROW __attribute__ ((__const__));
+extern const __int32_t **__ctype_tolower_loc (void)
+     __THROW __attribute__ ((__const__));
+extern const __int32_t **__ctype_toupper_loc (void)
+     __THROW __attribute__ ((__const__));
+
+
+#ifndef __cplusplus
+# define __isctype(c, type) \
+  ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
+#elif defined __USE_EXTERN_INLINES
+# define __isctype_f(type) \
+  __extern_inline int                                                        \
+  is##type (int __c) __THROW                                                 \
+  {                                                                          \
+    return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS##type; \
+  }
+#endif
+
+#define        __isascii(c)    (((c) & ~0x7f) == 0)    /* If C is a 7 bit value.  */
+#define        __toascii(c)    ((c) & 0x7f)            /* Mask off high bits.  */
+
+#define        __exctype(name) extern int name (int) __THROW
+
+__BEGIN_NAMESPACE_STD
+
+/* The following names are all functions:
+     int isCHARACTERISTIC(int c);
+   which return nonzero iff C has CHARACTERISTIC.
+   For the meaning of the characteristic names, see the `enum' above.  */
+__exctype (isalnum);
+__exctype (isalpha);
+__exctype (iscntrl);
+__exctype (isdigit);
+__exctype (islower);
+__exctype (isgraph);
+__exctype (isprint);
+__exctype (ispunct);
+__exctype (isspace);
+__exctype (isupper);
+__exctype (isxdigit);
+
+
+/* Return the lowercase version of C.  */
+extern int tolower (int __c) __THROW;
+
+/* Return the uppercase version of C.  */
+extern int toupper (int __c) __THROW;
+
+__END_NAMESPACE_STD
+
+
+/* ISO C99 introduced one new function.  */
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+
+__exctype (isblank);
+
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Test C for a set of character classes according to MASK.  */
+extern int isctype (int __c, int __mask) __THROW;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+
+/* Return nonzero iff C is in the ASCII set
+   (i.e., is no more than 7 bits wide).  */
+extern int isascii (int __c) __THROW;
+
+/* Return the part of C that is in the ASCII set
+   (i.e., the low-order 7 bits of C).  */
+extern int toascii (int __c) __THROW;
+
+/* These are the same as `toupper' and `tolower' except that they do not
+   check the argument for being in the range of a `char'.  */
+__exctype (_toupper);
+__exctype (_tolower);
+#endif /* Use X/Open or use misc.  */
+
+/* This code is needed for the optimized mapping functions.  */
+#define __tobody(c, f, a, args) \
+  (__extension__                                                             \
+   ({ int __res;                                                             \
+      if (sizeof (c) > 1)                                                    \
+       {                                                                     \
+         if (__builtin_constant_p (c))                                       \
+           {                                                                 \
+             int __c = (c);                                                  \
+             __res = __c < -128 || __c > 255 ? __c : (a)[__c];               \
+           }                                                                 \
+         else                                                                \
+           __res = f args;                                                   \
+       }                                                                     \
+      else                                                                   \
+       __res = (a)[(int) (c)];                                               \
+      __res; }))
+
+#if !defined __NO_CTYPE
+# ifdef __isctype_f
+__isctype_f (alnum)
+__isctype_f (alpha)
+__isctype_f (cntrl)
+__isctype_f (digit)
+__isctype_f (lower)
+__isctype_f (graph)
+__isctype_f (print)
+__isctype_f (punct)
+__isctype_f (space)
+__isctype_f (upper)
+__isctype_f (xdigit)
+#  ifdef __USE_ISOC99
+__isctype_f (blank)
+#  endif
+# elif defined __isctype
+# define isalnum(c)    __isctype((c), _ISalnum)
+# define isalpha(c)    __isctype((c), _ISalpha)
+# define iscntrl(c)    __isctype((c), _IScntrl)
+# define isdigit(c)    __isctype((c), _ISdigit)
+# define islower(c)    __isctype((c), _ISlower)
+# define isgraph(c)    __isctype((c), _ISgraph)
+# define isprint(c)    __isctype((c), _ISprint)
+# define ispunct(c)    __isctype((c), _ISpunct)
+# define isspace(c)    __isctype((c), _ISspace)
+# define isupper(c)    __isctype((c), _ISupper)
+# define isxdigit(c)   __isctype((c), _ISxdigit)
+#  ifdef __USE_ISOC99
+#   define isblank(c)  __isctype((c), _ISblank)
+#  endif
+# endif
+
+# ifdef __USE_EXTERN_INLINES
+__extern_inline int
+__NTH (tolower (int __c))
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
+}
+
+__extern_inline int
+__NTH (toupper (int __c))
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c;
+}
+# endif
+
+# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
+#  define tolower(c)   __tobody (c, tolower, *__ctype_tolower_loc (), (c))
+#  define toupper(c)   __tobody (c, toupper, *__ctype_toupper_loc (), (c))
+# endif /* Optimizing gcc */
+
+# if defined __USE_MISC || defined __USE_XOPEN
+#  define isascii(c)   __isascii (c)
+#  define toascii(c)   __toascii (c)
+
+#  define _tolower(c)  ((int) (*__ctype_tolower_loc ())[(int) (c)])
+#  define _toupper(c)  ((int) (*__ctype_toupper_loc ())[(int) (c)])
+# endif
+
+#endif /* Not __NO_CTYPE.  */
+
+
+#ifdef __USE_XOPEN2K8
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* These definitions are similar to the ones above but all functions
+   take as an argument a handle for the locale which shall be used.  */
+#  define __isctype_l(c, type, locale) \
+  ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
+
+# define __exctype_l(name)                                                   \
+  extern int name (int, __locale_t) __THROW
+
+/* The following names are all functions:
+     int isCHARACTERISTIC(int c, locale_t *locale);
+   which return nonzero iff C has CHARACTERISTIC.
+   For the meaning of the characteristic names, see the `enum' above.  */
+__exctype_l (isalnum_l);
+__exctype_l (isalpha_l);
+__exctype_l (iscntrl_l);
+__exctype_l (isdigit_l);
+__exctype_l (islower_l);
+__exctype_l (isgraph_l);
+__exctype_l (isprint_l);
+__exctype_l (ispunct_l);
+__exctype_l (isspace_l);
+__exctype_l (isupper_l);
+__exctype_l (isxdigit_l);
+
+__exctype_l (isblank_l);
+
+
+/* Return the lowercase version of C in locale L.  */
+extern int __tolower_l (int __c, __locale_t __l) __THROW;
+extern int tolower_l (int __c, __locale_t __l) __THROW;
+
+/* Return the uppercase version of C.  */
+extern int __toupper_l (int __c, __locale_t __l) __THROW;
+extern int toupper_l (int __c, __locale_t __l) __THROW;
+
+# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
+#  define __tolower_l(c, locale) \
+  __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale))
+#  define __toupper_l(c, locale) \
+  __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale))
+#  define tolower_l(c, locale) __tolower_l ((c), (locale))
+#  define toupper_l(c, locale) __toupper_l ((c), (locale))
+# endif        /* Optimizing gcc */
+
+
+# ifndef __NO_CTYPE
+#  define __isalnum_l(c,l)     __isctype_l((c), _ISalnum, (l))
+#  define __isalpha_l(c,l)     __isctype_l((c), _ISalpha, (l))
+#  define __iscntrl_l(c,l)     __isctype_l((c), _IScntrl, (l))
+#  define __isdigit_l(c,l)     __isctype_l((c), _ISdigit, (l))
+#  define __islower_l(c,l)     __isctype_l((c), _ISlower, (l))
+#  define __isgraph_l(c,l)     __isctype_l((c), _ISgraph, (l))
+#  define __isprint_l(c,l)     __isctype_l((c), _ISprint, (l))
+#  define __ispunct_l(c,l)     __isctype_l((c), _ISpunct, (l))
+#  define __isspace_l(c,l)     __isctype_l((c), _ISspace, (l))
+#  define __isupper_l(c,l)     __isctype_l((c), _ISupper, (l))
+#  define __isxdigit_l(c,l)    __isctype_l((c), _ISxdigit, (l))
+
+#  define __isblank_l(c,l)     __isctype_l((c), _ISblank, (l))
+
+#  ifdef __USE_MISC
+#   define __isascii_l(c,l)    ((l), __isascii (c))
+#   define __toascii_l(c,l)    ((l), __toascii (c))
+#  endif
+
+#  define isalnum_l(c,l)       __isalnum_l ((c), (l))
+#  define isalpha_l(c,l)       __isalpha_l ((c), (l))
+#  define iscntrl_l(c,l)       __iscntrl_l ((c), (l))
+#  define isdigit_l(c,l)       __isdigit_l ((c), (l))
+#  define islower_l(c,l)       __islower_l ((c), (l))
+#  define isgraph_l(c,l)       __isgraph_l ((c), (l))
+#  define isprint_l(c,l)       __isprint_l ((c), (l))
+#  define ispunct_l(c,l)       __ispunct_l ((c), (l))
+#  define isspace_l(c,l)       __isspace_l ((c), (l))
+#  define isupper_l(c,l)       __isupper_l ((c), (l))
+#  define isxdigit_l(c,l)      __isxdigit_l ((c), (l))
+
+#  define isblank_l(c,l)       __isblank_l ((c), (l))
+
+#  ifdef __USE_MISC
+#   define isascii_l(c,l)      __isascii_l ((c), (l))
+#   define toascii_l(c,l)      __toascii_l ((c), (l))
+#  endif
+
+# endif /* Not __NO_CTYPE.  */
+
+#endif /* Use POSIX 2008.  */
+
+__END_DECLS
+
+#endif /* ctype.h  */
diff --git a/lib/libdss-include/include/dirent.h b/lib/libdss-include/include/dirent.h
new file mode 100644 (file)
index 0000000..9a4b6bf
--- /dev/null
@@ -0,0 +1,403 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.1.2 Directory Operations      <dirent.h>
+ */
+
+#ifndef        _DIRENT_H
+#define        _DIRENT_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#ifdef __USE_XOPEN
+# ifndef __ino_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+#  else
+typedef __ino64_t ino_t;
+#  endif
+#  define __ino_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
+typedef __ino64_t ino64_t;
+#  define __ino64_t_defined
+# endif
+#endif
+
+/* This file defines `struct dirent'.
+
+   It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
+   member that gives the length of `d_name'.
+
+   It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
+   member that gives the size of the entire directory entry.
+
+   It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
+   member that gives the file offset of the next directory entry.
+
+   It defines the macro `_DIRENT_HAVE_D_TYPE' iff there is a `d_type'
+   member that gives the type of the file.
+ */
+
+#include <bits/dirent.h>
+
+#if defined __USE_MISC && !defined d_fileno
+# define d_ino d_fileno                 /* Backward compatibility.  */
+#endif
+
+/* These macros extract size information from a `struct dirent *'.
+   They may evaluate their argument multiple times, so it must not
+   have side effects.  Each of these may involve a relatively costly
+   call to `strlen' on some systems, so these values should be cached.
+
+   _D_EXACT_NAMLEN (DP)        returns the length of DP->d_name, not including
+   its terminating null character.
+
+   _D_ALLOC_NAMLEN (DP)        returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
+   that is, the allocation size needed to hold the DP->d_name string.
+   Use this macro when you don't need the exact length, just an upper bound.
+   This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
+   */
+
+#ifdef _DIRENT_HAVE_D_NAMLEN
+# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
+# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+#else
+# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
+# ifdef _DIRENT_HAVE_D_RECLEN
+#  define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
+# else
+#  define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
+                             _D_EXACT_NAMLEN (d) + 1)
+# endif
+#endif
+
+
+#ifdef __USE_MISC
+/* File types for `d_type'.  */
+enum
+  {
+    DT_UNKNOWN = 0,
+# define DT_UNKNOWN    DT_UNKNOWN
+    DT_FIFO = 1,
+# define DT_FIFO       DT_FIFO
+    DT_CHR = 2,
+# define DT_CHR                DT_CHR
+    DT_DIR = 4,
+# define DT_DIR                DT_DIR
+    DT_BLK = 6,
+# define DT_BLK                DT_BLK
+    DT_REG = 8,
+# define DT_REG                DT_REG
+    DT_LNK = 10,
+# define DT_LNK                DT_LNK
+    DT_SOCK = 12,
+# define DT_SOCK       DT_SOCK
+    DT_WHT = 14
+# define DT_WHT                DT_WHT
+  };
+
+/* Convert between stat structure types and directory types.  */
+# define IFTODT(mode)  (((mode) & 0170000) >> 12)
+# define DTTOIF(dirtype)       ((dirtype) << 12)
+#endif
+
+
+/* This is the data type of directory stream objects.
+   The actual structure is opaque to users.  */
+typedef struct __dirstream DIR;
+
+/* Open a directory stream on NAME.
+   Return a DIR stream on the directory, or NULL if it could not be opened.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern DIR *opendir (const char *__name) __nonnull ((1));
+
+#ifdef __USE_XOPEN2K8
+/* Same as opendir, but open the stream on the file descriptor FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern DIR *fdopendir (int __fd);
+#endif
+
+/* Close the directory stream DIRP.
+   Return 0 if successful, -1 if not.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int closedir (DIR *__dirp) __nonnull ((1));
+
+/* Read a directory entry from DIRP.  Return a pointer to a `struct
+   dirent' describing the entry, or NULL for EOF or error.  The
+   storage returned may be overwritten by a later readdir call on the
+   same DIR stream.
+
+   If the Large File Support API is selected we have to use the
+   appropriate interface.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern struct dirent *readdir (DIR *__dirp) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern struct dirent *__REDIRECT (readdir, (DIR *__dirp), readdir64)
+     __nonnull ((1));
+# else
+#  define readdir readdir64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
+#endif
+
+#ifdef __USE_POSIX
+/* Reentrant version of `readdir'.  Return in RESULT a pointer to the
+   next entry.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int readdir_r (DIR *__restrict __dirp,
+                     struct dirent *__restrict __entry,
+                     struct dirent **__restrict __result)
+     __nonnull ((1, 2, 3));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (readdir_r,
+                      (DIR *__restrict __dirp,
+                       struct dirent *__restrict __entry,
+                       struct dirent **__restrict __result),
+                      readdir64_r) __nonnull ((1, 2, 3));
+#  else
+#   define readdir_r readdir64_r
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int readdir64_r (DIR *__restrict __dirp,
+                       struct dirent64 *__restrict __entry,
+                       struct dirent64 **__restrict __result)
+     __nonnull ((1, 2, 3));
+# endif
+#endif /* POSIX or misc */
+
+/* Rewind DIRP to the beginning of the directory.  */
+extern void rewinddir (DIR *__dirp) __THROW __nonnull ((1));
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# include <bits/types.h>
+
+/* Seek to position POS on DIRP.  */
+extern void seekdir (DIR *__dirp, long int __pos) __THROW __nonnull ((1));
+
+/* Return the current position of DIRP.  */
+extern long int telldir (DIR *__dirp) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K8
+
+/* Return the file descriptor used by DIRP.  */
+extern int dirfd (DIR *__dirp) __THROW __nonnull ((1));
+
+# if defined __OPTIMIZE__ && defined _DIR_dirfd
+#  define dirfd(dirp)  _DIR_dirfd (dirp)
+# endif
+
+# ifdef __USE_MISC
+#  ifndef MAXNAMLEN
+/* Get the definitions of the POSIX.1 limits.  */
+#  include <bits/posix1_lim.h>
+
+/* `MAXNAMLEN' is the BSD name for what POSIX calls `NAME_MAX'.  */
+#   ifdef NAME_MAX
+#    define MAXNAMLEN  NAME_MAX
+#   else
+#    define MAXNAMLEN  255
+#   endif
+#  endif
+# endif
+
+# define __need_size_t
+# include <stddef.h>
+
+/* Scan the directory DIR, calling SELECTOR on each directory entry.
+   Entries for which SELECT returns nonzero are individually malloc'd,
+   sorted using qsort with CMP, and collected in a malloc'd array in
+   *NAMELIST.  Returns the number of entries selected, or -1 on error.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int scandir (const char *__restrict __dir,
+                   struct dirent ***__restrict __namelist,
+                   int (*__selector) (const struct dirent *),
+                   int (*__cmp) (const struct dirent **,
+                                 const struct dirent **))
+     __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (scandir,
+                      (const char *__restrict __dir,
+                       struct dirent ***__restrict __namelist,
+                       int (*__selector) (const struct dirent *),
+                       int (*__cmp) (const struct dirent **,
+                                     const struct dirent **)),
+                      scandir64) __nonnull ((1, 2));
+#  else
+#   define scandir scandir64
+#  endif
+# endif
+
+# if defined __USE_GNU && defined __USE_LARGEFILE64
+/* This function is like `scandir' but it uses the 64bit dirent structure.
+   Please note that the CMP function must now work with struct dirent64 **.  */
+extern int scandir64 (const char *__restrict __dir,
+                     struct dirent64 ***__restrict __namelist,
+                     int (*__selector) (const struct dirent64 *),
+                     int (*__cmp) (const struct dirent64 **,
+                                   const struct dirent64 **))
+     __nonnull ((1, 2));
+# endif
+
+# ifdef __USE_GNU
+/* Similar to `scandir' but a relative DIR name is interpreted relative
+   to the directory for which DFD is a descriptor.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#  ifndef __USE_FILE_OFFSET64
+extern int scandirat (int __dfd, const char *__restrict __dir,
+                     struct dirent ***__restrict __namelist,
+                     int (*__selector) (const struct dirent *),
+                     int (*__cmp) (const struct dirent **,
+                                   const struct dirent **))
+     __nonnull ((2, 3));
+#  else
+#   ifdef __REDIRECT
+extern int __REDIRECT (scandirat,
+                      (int __dfd, const char *__restrict __dir,
+                       struct dirent ***__restrict __namelist,
+                       int (*__selector) (const struct dirent *),
+                       int (*__cmp) (const struct dirent **,
+                                     const struct dirent **)),
+                      scandirat64) __nonnull ((2, 3));
+#   else
+#    define scandirat scandirat64
+#   endif
+#  endif
+
+/* This function is like `scandir' but it uses the 64bit dirent structure.
+   Please note that the CMP function must now work with struct dirent64 **.  */
+extern int scandirat64 (int __dfd, const char *__restrict __dir,
+                       struct dirent64 ***__restrict __namelist,
+                       int (*__selector) (const struct dirent64 *),
+                       int (*__cmp) (const struct dirent64 **,
+                                     const struct dirent64 **))
+     __nonnull ((2, 3));
+# endif
+
+/* Function to compare two `struct dirent's alphabetically.  */
+# ifndef __USE_FILE_OFFSET64
+extern int alphasort (const struct dirent **__e1,
+                     const struct dirent **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT_NTH (alphasort,
+                          (const struct dirent **__e1,
+                           const struct dirent **__e2),
+                          alphasort64) __attribute_pure__ __nonnull ((1, 2));
+#  else
+#   define alphasort alphasort64
+#  endif
+# endif
+
+# if defined __USE_GNU && defined __USE_LARGEFILE64
+extern int alphasort64 (const struct dirent64 **__e1,
+                       const struct dirent64 **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif /* Use XPG7.  */
+
+
+#ifdef __USE_MISC
+/* Read directory entries from FD into BUF, reading at most NBYTES.
+   Reading starts at offset *BASEP, and *BASEP is updated with the new
+   position after reading.  Returns the number of bytes read; zero when at
+   end of directory; or -1 for errors.  */
+# ifndef __USE_FILE_OFFSET64
+extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
+                               size_t __nbytes,
+                               __off_t *__restrict __basep)
+     __THROW __nonnull ((2, 4));
+# else
+#  ifdef __REDIRECT
+extern __ssize_t __REDIRECT_NTH (getdirentries,
+                                (int __fd, char *__restrict __buf,
+                                 size_t __nbytes,
+                                 __off64_t *__restrict __basep),
+                                getdirentries64) __nonnull ((2, 4));
+#  else
+#   define getdirentries getdirentries64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
+                                 size_t __nbytes,
+                                 __off64_t *__restrict __basep)
+     __THROW __nonnull ((2, 4));
+# endif
+#endif /* Use misc.  */
+
+#ifdef __USE_GNU
+/* Function to compare two `struct dirent's by name & version.  */
+# ifndef __USE_FILE_OFFSET64
+extern int versionsort (const struct dirent **__e1,
+                       const struct dirent **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT_NTH (versionsort,
+                          (const struct dirent **__e1,
+                           const struct dirent **__e2),
+                          versionsort64)
+     __attribute_pure__ __nonnull ((1, 2));
+#  else
+#   define versionsort versionsort64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int versionsort64 (const struct dirent64 **__e1,
+                         const struct dirent64 **__e2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif /* Use GNU.  */
+
+__END_DECLS
+
+#endif /* dirent.h  */
diff --git a/lib/libdss-include/include/dlfcn.h b/lib/libdss-include/include/dlfcn.h
new file mode 100644 (file)
index 0000000..5d16dcd
--- /dev/null
@@ -0,0 +1,190 @@
+/* User functions for run-time dynamic loading.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _DLFCN_H
+#define        _DLFCN_H 1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Collect various system dependent definitions and declarations.  */
+#include <bits/dlfcn.h>
+
+
+#ifdef __USE_GNU
+/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
+   the run-time address of the symbol called NAME in the next shared
+   object is returned.  The "next" relation is defined by the order
+   the shared objects were loaded.  */
+# define RTLD_NEXT     ((void *) -1l)
+
+/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
+   the run-time address of the symbol called NAME in the global scope
+   is returned.  */
+# define RTLD_DEFAULT  ((void *) 0)
+
+
+/* Type for namespace indeces.  */
+typedef long int Lmid_t;
+
+/* Special namespace ID values.  */
+# define LM_ID_BASE    0       /* Initial namespace.  */
+# define LM_ID_NEWLM   -1      /* For dlmopen: request new namespace.  */
+#endif
+
+
+__BEGIN_DECLS
+
+/* Open the shared object FILE and map it in; return a handle that can be
+   passed to `dlsym' to get symbol values from it.  */
+extern void *dlopen (const char *__file, int __mode) __THROWNL;
+
+/* Unmap and close a shared object opened by `dlopen'.
+   The handle cannot be used again after calling `dlclose'.  */
+extern int dlclose (void *__handle) __THROWNL __nonnull ((1));
+
+/* Find the run-time address in the shared object HANDLE refers to
+   of the symbol called NAME.  */
+extern void *dlsym (void *__restrict __handle,
+                   const char *__restrict __name) __THROW __nonnull ((2));
+
+#ifdef __USE_GNU
+/* Like `dlopen', but request object to be allocated in a new namespace.  */
+extern void *dlmopen (Lmid_t __nsid, const char *__file, int __mode) __THROWNL;
+
+/* Find the run-time address in the shared object HANDLE refers to
+   of the symbol called NAME with VERSION.  */
+extern void *dlvsym (void *__restrict __handle,
+                    const char *__restrict __name,
+                    const char *__restrict __version)
+     __THROW __nonnull ((2, 3));
+#endif
+
+/* When any of the above functions fails, call this function
+   to return a string describing the error.  Each call resets
+   the error string so that a following call returns null.  */
+extern char *dlerror (void) __THROW;
+
+
+#ifdef __USE_GNU
+/* Structure containing information about object searched using
+   `dladdr'.  */
+typedef struct
+{
+  const char *dli_fname;       /* File name of defining object.  */
+  void *dli_fbase;             /* Load address of that object.  */
+  const char *dli_sname;       /* Name of nearest symbol.  */
+  void *dli_saddr;             /* Exact value of nearest symbol.  */
+} Dl_info;
+
+/* Fill in *INFO with the following information about ADDRESS.
+   Returns 0 iff no shared object's segments contain that address.  */
+extern int dladdr (const void *__address, Dl_info *__info)
+     __THROW __nonnull ((2));
+
+/* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS.  */
+extern int dladdr1 (const void *__address, Dl_info *__info,
+                   void **__extra_info, int __flags) __THROW __nonnull ((2));
+
+/* These are the possible values for the FLAGS argument to `dladdr1'.
+   This indicates what extra information is stored at *EXTRA_INFO.
+   It may also be zero, in which case the EXTRA_INFO argument is not used.  */
+enum
+  {
+    /* Matching symbol table entry (const ElfNN_Sym *).  */
+    RTLD_DL_SYMENT = 1,
+
+    /* The object containing the address (struct link_map *).  */
+    RTLD_DL_LINKMAP = 2
+  };
+
+
+/* Get information about the shared object HANDLE refers to.
+   REQUEST is from among the values below, and determines the use of ARG.
+
+   On success, returns zero.  On failure, returns -1 and records an error
+   message to be fetched with `dlerror'.  */
+extern int dlinfo (void *__restrict __handle,
+                  int __request, void *__restrict __arg)
+     __THROW __nonnull ((1, 3));
+
+/* These are the possible values for the REQUEST argument to `dlinfo'.  */
+enum
+  {
+    /* Treat ARG as `lmid_t *'; store namespace ID for HANDLE there.  */
+    RTLD_DI_LMID = 1,
+
+    /* Treat ARG as `struct link_map **';
+       store the `struct link_map *' for HANDLE there.  */
+    RTLD_DI_LINKMAP = 2,
+
+    RTLD_DI_CONFIGADDR = 3,    /* Unsupported, defined by Solaris.  */
+
+    /* Treat ARG as `Dl_serinfo *' (see below), and fill in to describe the
+       directories that will be searched for dependencies of this object.
+       RTLD_DI_SERINFOSIZE fills in just the `dls_cnt' and `dls_size'
+       entries to indicate the size of the buffer that must be passed to
+       RTLD_DI_SERINFO to fill in the full information.  */
+    RTLD_DI_SERINFO = 4,
+    RTLD_DI_SERINFOSIZE = 5,
+
+    /* Treat ARG as `char *', and store there the directory name used to
+       expand $ORIGIN in this shared object's dependency file names.  */
+    RTLD_DI_ORIGIN = 6,
+
+    RTLD_DI_PROFILENAME = 7,   /* Unsupported, defined by Solaris.  */
+    RTLD_DI_PROFILEOUT = 8,    /* Unsupported, defined by Solaris.  */
+
+    /* Treat ARG as `size_t *', and store there the TLS module ID
+       of this object's PT_TLS segment, as used in TLS relocations;
+       store zero if this object does not define a PT_TLS segment.  */
+    RTLD_DI_TLS_MODID = 9,
+
+    /* Treat ARG as `void **', and store there a pointer to the calling
+       thread's TLS block corresponding to this object's PT_TLS segment.
+       Store a null pointer if this object does not define a PT_TLS
+       segment, or if the calling thread has not allocated a block for it.  */
+    RTLD_DI_TLS_DATA = 10,
+
+    RTLD_DI_MAX = 10
+  };
+
+
+/* This is the type of elements in `Dl_serinfo', below.
+   The `dls_name' member points to space in the buffer passed to `dlinfo'.  */
+typedef struct
+{
+  char *dls_name;              /* Name of library search path directory.  */
+  unsigned int dls_flags;      /* Indicates where this directory came from. */
+} Dl_serpath;
+
+/* This is the structure that must be passed (by reference) to `dlinfo' for
+   the RTLD_DI_SERINFO and RTLD_DI_SERINFOSIZE requests.  */
+typedef struct
+{
+  size_t dls_size;             /* Size in bytes of the whole buffer.  */
+  unsigned int dls_cnt;                /* Number of elements in `dls_serpath'.  */
+  Dl_serpath dls_serpath[1];   /* Actually longer, dls_cnt elements.  */
+} Dl_serinfo;
+#endif /* __USE_GNU */
+
+
+__END_DECLS
+
+#endif /* dlfcn.h */
diff --git a/lib/libdss-include/include/elf.h b/lib/libdss-include/include/elf.h
new file mode 100644 (file)
index 0000000..c5c9423
--- /dev/null
@@ -0,0 +1,3503 @@
+/* This file defines standard ELF types, structures, and macros.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ELF_H
+#define        _ELF_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Standard ELF types.  */
+
+#include <stdint.h>
+
+/* Type for a 16-bit quantity.  */
+typedef uint16_t Elf32_Half;
+typedef uint16_t Elf64_Half;
+
+/* Types for signed and unsigned 32-bit quantities.  */
+typedef uint32_t Elf32_Word;
+typedef        int32_t  Elf32_Sword;
+typedef uint32_t Elf64_Word;
+typedef        int32_t  Elf64_Sword;
+
+/* Types for signed and unsigned 64-bit quantities.  */
+typedef uint64_t Elf32_Xword;
+typedef        int64_t  Elf32_Sxword;
+typedef uint64_t Elf64_Xword;
+typedef        int64_t  Elf64_Sxword;
+
+/* Type of addresses.  */
+typedef uint32_t Elf32_Addr;
+typedef uint64_t Elf64_Addr;
+
+/* Type of file offsets.  */
+typedef uint32_t Elf32_Off;
+typedef uint64_t Elf64_Off;
+
+/* Type for section indices, which are 16-bit quantities.  */
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+
+/* Type for version symbol information.  */
+typedef Elf32_Half Elf32_Versym;
+typedef Elf64_Half Elf64_Versym;
+
+
+/* The ELF file header.  This appears at the start of every ELF file.  */
+
+#define EI_NIDENT (16)
+
+typedef struct
+{
+  unsigned char        e_ident[EI_NIDENT];     /* Magic number and other info */
+  Elf32_Half   e_type;                 /* Object file type */
+  Elf32_Half   e_machine;              /* Architecture */
+  Elf32_Word   e_version;              /* Object file version */
+  Elf32_Addr   e_entry;                /* Entry point virtual address */
+  Elf32_Off    e_phoff;                /* Program header table file offset */
+  Elf32_Off    e_shoff;                /* Section header table file offset */
+  Elf32_Word   e_flags;                /* Processor-specific flags */
+  Elf32_Half   e_ehsize;               /* ELF header size in bytes */
+  Elf32_Half   e_phentsize;            /* Program header table entry size */
+  Elf32_Half   e_phnum;                /* Program header table entry count */
+  Elf32_Half   e_shentsize;            /* Section header table entry size */
+  Elf32_Half   e_shnum;                /* Section header table entry count */
+  Elf32_Half   e_shstrndx;             /* Section header string table index */
+} Elf32_Ehdr;
+
+typedef struct
+{
+  unsigned char        e_ident[EI_NIDENT];     /* Magic number and other info */
+  Elf64_Half   e_type;                 /* Object file type */
+  Elf64_Half   e_machine;              /* Architecture */
+  Elf64_Word   e_version;              /* Object file version */
+  Elf64_Addr   e_entry;                /* Entry point virtual address */
+  Elf64_Off    e_phoff;                /* Program header table file offset */
+  Elf64_Off    e_shoff;                /* Section header table file offset */
+  Elf64_Word   e_flags;                /* Processor-specific flags */
+  Elf64_Half   e_ehsize;               /* ELF header size in bytes */
+  Elf64_Half   e_phentsize;            /* Program header table entry size */
+  Elf64_Half   e_phnum;                /* Program header table entry count */
+  Elf64_Half   e_shentsize;            /* Section header table entry size */
+  Elf64_Half   e_shnum;                /* Section header table entry count */
+  Elf64_Half   e_shstrndx;             /* Section header string table index */
+} Elf64_Ehdr;
+
+/* Fields in the e_ident array.  The EI_* macros are indices into the
+   array.  The macros under each EI_* macro are the values the byte
+   may have.  */
+
+#define EI_MAG0                0               /* File identification byte 0 index */
+#define ELFMAG0                0x7f            /* Magic number byte 0 */
+
+#define EI_MAG1                1               /* File identification byte 1 index */
+#define ELFMAG1                'E'             /* Magic number byte 1 */
+
+#define EI_MAG2                2               /* File identification byte 2 index */
+#define ELFMAG2                'L'             /* Magic number byte 2 */
+
+#define EI_MAG3                3               /* File identification byte 3 index */
+#define ELFMAG3                'F'             /* Magic number byte 3 */
+
+/* Conglomeration of the identification bytes, for easy testing as a word.  */
+#define        ELFMAG          "\177ELF"
+#define        SELFMAG         4
+
+#define EI_CLASS       4               /* File class byte index */
+#define ELFCLASSNONE   0               /* Invalid class */
+#define ELFCLASS32     1               /* 32-bit objects */
+#define ELFCLASS64     2               /* 64-bit objects */
+#define ELFCLASSNUM    3
+
+#define EI_DATA                5               /* Data encoding byte index */
+#define ELFDATANONE    0               /* Invalid data encoding */
+#define ELFDATA2LSB    1               /* 2's complement, little endian */
+#define ELFDATA2MSB    2               /* 2's complement, big endian */
+#define ELFDATANUM     3
+
+#define EI_VERSION     6               /* File version byte index */
+                                       /* Value must be EV_CURRENT */
+
+#define EI_OSABI       7               /* OS ABI identification */
+#define ELFOSABI_NONE          0       /* UNIX System V ABI */
+#define ELFOSABI_SYSV          0       /* Alias.  */
+#define ELFOSABI_HPUX          1       /* HP-UX */
+#define ELFOSABI_NETBSD                2       /* NetBSD.  */
+#define ELFOSABI_GNU           3       /* Object uses GNU ELF extensions.  */
+#define ELFOSABI_LINUX         ELFOSABI_GNU /* Compatibility alias.  */
+#define ELFOSABI_SOLARIS       6       /* Sun Solaris.  */
+#define ELFOSABI_AIX           7       /* IBM AIX.  */
+#define ELFOSABI_IRIX          8       /* SGI Irix.  */
+#define ELFOSABI_FREEBSD       9       /* FreeBSD.  */
+#define ELFOSABI_TRU64         10      /* Compaq TRU64 UNIX.  */
+#define ELFOSABI_MODESTO       11      /* Novell Modesto.  */
+#define ELFOSABI_OPENBSD       12      /* OpenBSD.  */
+#define ELFOSABI_ARM_AEABI     64      /* ARM EABI */
+#define ELFOSABI_ARM           97      /* ARM */
+#define ELFOSABI_STANDALONE    255     /* Standalone (embedded) application */
+
+#define EI_ABIVERSION  8               /* ABI version */
+
+#define EI_PAD         9               /* Byte index of padding bytes */
+
+/* Legal values for e_type (object file type).  */
+
+#define ET_NONE                0               /* No file type */
+#define ET_REL         1               /* Relocatable file */
+#define ET_EXEC                2               /* Executable file */
+#define ET_DYN         3               /* Shared object file */
+#define ET_CORE                4               /* Core file */
+#define        ET_NUM          5               /* Number of defined types */
+#define ET_LOOS                0xfe00          /* OS-specific range start */
+#define ET_HIOS                0xfeff          /* OS-specific range end */
+#define ET_LOPROC      0xff00          /* Processor-specific range start */
+#define ET_HIPROC      0xffff          /* Processor-specific range end */
+
+/* Legal values for e_machine (architecture).  */
+
+#define EM_NONE                 0              /* No machine */
+#define EM_M32          1              /* AT&T WE 32100 */
+#define EM_SPARC        2              /* SUN SPARC */
+#define EM_386          3              /* Intel 80386 */
+#define EM_68K          4              /* Motorola m68k family */
+#define EM_88K          5              /* Motorola m88k family */
+#define EM_860          7              /* Intel 80860 */
+#define EM_MIPS                 8              /* MIPS R3000 big-endian */
+#define EM_S370                 9              /* IBM System/370 */
+#define EM_MIPS_RS3_LE 10              /* MIPS R3000 little-endian */
+
+#define EM_PARISC      15              /* HPPA */
+#define EM_VPP500      17              /* Fujitsu VPP500 */
+#define EM_SPARC32PLUS 18              /* Sun's "v8plus" */
+#define EM_960         19              /* Intel 80960 */
+#define EM_PPC         20              /* PowerPC */
+#define EM_PPC64       21              /* PowerPC 64-bit */
+#define EM_S390                22              /* IBM S390 */
+
+#define EM_V800                36              /* NEC V800 series */
+#define EM_FR20                37              /* Fujitsu FR20 */
+#define EM_RH32                38              /* TRW RH-32 */
+#define EM_RCE         39              /* Motorola RCE */
+#define EM_ARM         40              /* ARM */
+#define EM_FAKE_ALPHA  41              /* Digital Alpha */
+#define EM_SH          42              /* Hitachi SH */
+#define EM_SPARCV9     43              /* SPARC v9 64-bit */
+#define EM_TRICORE     44              /* Siemens Tricore */
+#define EM_ARC         45              /* Argonaut RISC Core */
+#define EM_H8_300      46              /* Hitachi H8/300 */
+#define EM_H8_300H     47              /* Hitachi H8/300H */
+#define EM_H8S         48              /* Hitachi H8S */
+#define EM_H8_500      49              /* Hitachi H8/500 */
+#define EM_IA_64       50              /* Intel Merced */
+#define EM_MIPS_X      51              /* Stanford MIPS-X */
+#define EM_COLDFIRE    52              /* Motorola Coldfire */
+#define EM_68HC12      53              /* Motorola M68HC12 */
+#define EM_MMA         54              /* Fujitsu MMA Multimedia Accelerator*/
+#define EM_PCP         55              /* Siemens PCP */
+#define EM_NCPU                56              /* Sony nCPU embeeded RISC */
+#define EM_NDR1                57              /* Denso NDR1 microprocessor */
+#define EM_STARCORE    58              /* Motorola Start*Core processor */
+#define EM_ME16                59              /* Toyota ME16 processor */
+#define EM_ST100       60              /* STMicroelectronic ST100 processor */
+#define EM_TINYJ       61              /* Advanced Logic Corp. Tinyj emb.fam*/
+#define EM_X86_64      62              /* AMD x86-64 architecture */
+#define EM_PDSP                63              /* Sony DSP Processor */
+
+#define EM_FX66                66              /* Siemens FX66 microcontroller */
+#define EM_ST9PLUS     67              /* STMicroelectronics ST9+ 8/16 mc */
+#define EM_ST7         68              /* STmicroelectronics ST7 8 bit mc */
+#define EM_68HC16      69              /* Motorola MC68HC16 microcontroller */
+#define EM_68HC11      70              /* Motorola MC68HC11 microcontroller */
+#define EM_68HC08      71              /* Motorola MC68HC08 microcontroller */
+#define EM_68HC05      72              /* Motorola MC68HC05 microcontroller */
+#define EM_SVX         73              /* Silicon Graphics SVx */
+#define EM_ST19                74              /* STMicroelectronics ST19 8 bit mc */
+#define EM_VAX         75              /* Digital VAX */
+#define EM_CRIS                76              /* Axis Communications 32-bit embedded processor */
+#define EM_JAVELIN     77              /* Infineon Technologies 32-bit embedded processor */
+#define EM_FIREPATH    78              /* Element 14 64-bit DSP Processor */
+#define EM_ZSP         79              /* LSI Logic 16-bit DSP Processor */
+#define EM_MMIX                80              /* Donald Knuth's educational 64-bit processor */
+#define EM_HUANY       81              /* Harvard University machine-independent object files */
+#define EM_PRISM       82              /* SiTera Prism */
+#define EM_AVR         83              /* Atmel AVR 8-bit microcontroller */
+#define EM_FR30                84              /* Fujitsu FR30 */
+#define EM_D10V                85              /* Mitsubishi D10V */
+#define EM_D30V                86              /* Mitsubishi D30V */
+#define EM_V850                87              /* NEC v850 */
+#define EM_M32R                88              /* Mitsubishi M32R */
+#define EM_MN10300     89              /* Matsushita MN10300 */
+#define EM_MN10200     90              /* Matsushita MN10200 */
+#define EM_PJ          91              /* picoJava */
+#define EM_OPENRISC    92              /* OpenRISC 32-bit embedded processor */
+#define EM_ARC_A5      93              /* ARC Cores Tangent-A5 */
+#define EM_XTENSA      94              /* Tensilica Xtensa Architecture */
+#define EM_ALTERA_NIOS2 113            /* Altera Nios II */
+#define EM_AARCH64     183             /* ARM AARCH64 */
+#define EM_TILEPRO     188             /* Tilera TILEPro */
+#define EM_MICROBLAZE  189             /* Xilinx MicroBlaze */
+#define EM_TILEGX      191             /* Tilera TILE-Gx */
+#define EM_NUM         192
+
+/* If it is necessary to assign new unofficial EM_* values, please
+   pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
+   chances of collision with official or non-GNU unofficial values.  */
+
+#define EM_ALPHA       0x9026
+
+/* Legal values for e_version (version).  */
+
+#define EV_NONE                0               /* Invalid ELF version */
+#define EV_CURRENT     1               /* Current version */
+#define EV_NUM         2
+
+/* Section header.  */
+
+typedef struct
+{
+  Elf32_Word   sh_name;                /* Section name (string tbl index) */
+  Elf32_Word   sh_type;                /* Section type */
+  Elf32_Word   sh_flags;               /* Section flags */
+  Elf32_Addr   sh_addr;                /* Section virtual addr at execution */
+  Elf32_Off    sh_offset;              /* Section file offset */
+  Elf32_Word   sh_size;                /* Section size in bytes */
+  Elf32_Word   sh_link;                /* Link to another section */
+  Elf32_Word   sh_info;                /* Additional section information */
+  Elf32_Word   sh_addralign;           /* Section alignment */
+  Elf32_Word   sh_entsize;             /* Entry size if section holds table */
+} Elf32_Shdr;
+
+typedef struct
+{
+  Elf64_Word   sh_name;                /* Section name (string tbl index) */
+  Elf64_Word   sh_type;                /* Section type */
+  Elf64_Xword  sh_flags;               /* Section flags */
+  Elf64_Addr   sh_addr;                /* Section virtual addr at execution */
+  Elf64_Off    sh_offset;              /* Section file offset */
+  Elf64_Xword  sh_size;                /* Section size in bytes */
+  Elf64_Word   sh_link;                /* Link to another section */
+  Elf64_Word   sh_info;                /* Additional section information */
+  Elf64_Xword  sh_addralign;           /* Section alignment */
+  Elf64_Xword  sh_entsize;             /* Entry size if section holds table */
+} Elf64_Shdr;
+
+/* Special section indices.  */
+
+#define SHN_UNDEF      0               /* Undefined section */
+#define SHN_LORESERVE  0xff00          /* Start of reserved indices */
+#define SHN_LOPROC     0xff00          /* Start of processor-specific */
+#define SHN_BEFORE     0xff00          /* Order section before all others
+                                          (Solaris).  */
+#define SHN_AFTER      0xff01          /* Order section after all others
+                                          (Solaris).  */
+#define SHN_HIPROC     0xff1f          /* End of processor-specific */
+#define SHN_LOOS       0xff20          /* Start of OS-specific */
+#define SHN_HIOS       0xff3f          /* End of OS-specific */
+#define SHN_ABS                0xfff1          /* Associated symbol is absolute */
+#define SHN_COMMON     0xfff2          /* Associated symbol is common */
+#define SHN_XINDEX     0xffff          /* Index is in extra table.  */
+#define SHN_HIRESERVE  0xffff          /* End of reserved indices */
+
+/* Legal values for sh_type (section type).  */
+
+#define SHT_NULL         0             /* Section header table entry unused */
+#define SHT_PROGBITS     1             /* Program data */
+#define SHT_SYMTAB       2             /* Symbol table */
+#define SHT_STRTAB       3             /* String table */
+#define SHT_RELA         4             /* Relocation entries with addends */
+#define SHT_HASH         5             /* Symbol hash table */
+#define SHT_DYNAMIC      6             /* Dynamic linking information */
+#define SHT_NOTE         7             /* Notes */
+#define SHT_NOBITS       8             /* Program space with no data (bss) */
+#define SHT_REL                  9             /* Relocation entries, no addends */
+#define SHT_SHLIB        10            /* Reserved */
+#define SHT_DYNSYM       11            /* Dynamic linker symbol table */
+#define SHT_INIT_ARRAY   14            /* Array of constructors */
+#define SHT_FINI_ARRAY   15            /* Array of destructors */
+#define SHT_PREINIT_ARRAY 16           /* Array of pre-constructors */
+#define SHT_GROUP        17            /* Section group */
+#define SHT_SYMTAB_SHNDX  18           /* Extended section indeces */
+#define        SHT_NUM           19            /* Number of defined types.  */
+#define SHT_LOOS         0x60000000    /* Start OS-specific.  */
+#define SHT_GNU_ATTRIBUTES 0x6ffffff5  /* Object attributes.  */
+#define SHT_GNU_HASH     0x6ffffff6    /* GNU-style hash table.  */
+#define SHT_GNU_LIBLIST          0x6ffffff7    /* Prelink library list */
+#define SHT_CHECKSUM     0x6ffffff8    /* Checksum for DSO content.  */
+#define SHT_LOSUNW       0x6ffffffa    /* Sun-specific low bound.  */
+#define SHT_SUNW_move    0x6ffffffa
+#define SHT_SUNW_COMDAT   0x6ffffffb
+#define SHT_SUNW_syminfo  0x6ffffffc
+#define SHT_GNU_verdef   0x6ffffffd    /* Version definition section.  */
+#define SHT_GNU_verneed          0x6ffffffe    /* Version needs section.  */
+#define SHT_GNU_versym   0x6fffffff    /* Version symbol table.  */
+#define SHT_HISUNW       0x6fffffff    /* Sun-specific high bound.  */
+#define SHT_HIOS         0x6fffffff    /* End OS-specific type */
+#define SHT_LOPROC       0x70000000    /* Start of processor-specific */
+#define SHT_HIPROC       0x7fffffff    /* End of processor-specific */
+#define SHT_LOUSER       0x80000000    /* Start of application-specific */
+#define SHT_HIUSER       0x8fffffff    /* End of application-specific */
+
+/* Legal values for sh_flags (section flags).  */
+
+#define SHF_WRITE           (1 << 0)   /* Writable */
+#define SHF_ALLOC           (1 << 1)   /* Occupies memory during execution */
+#define SHF_EXECINSTR       (1 << 2)   /* Executable */
+#define SHF_MERGE           (1 << 4)   /* Might be merged */
+#define SHF_STRINGS         (1 << 5)   /* Contains nul-terminated strings */
+#define SHF_INFO_LINK       (1 << 6)   /* `sh_info' contains SHT index */
+#define SHF_LINK_ORDER      (1 << 7)   /* Preserve order after combining */
+#define SHF_OS_NONCONFORMING (1 << 8)  /* Non-standard OS specific handling
+                                          required */
+#define SHF_GROUP           (1 << 9)   /* Section is member of a group.  */
+#define SHF_TLS                     (1 << 10)  /* Section hold thread-local data.  */
+#define SHF_COMPRESSED      (1 << 11)  /* Section with compressed data. */
+#define SHF_MASKOS          0x0ff00000 /* OS-specific.  */
+#define SHF_MASKPROC        0xf0000000 /* Processor-specific */
+#define SHF_ORDERED         (1 << 30)  /* Special ordering requirement
+                                          (Solaris).  */
+#define SHF_EXCLUDE         (1U << 31) /* Section is excluded unless
+                                          referenced or allocated (Solaris).*/
+
+/* Section compression header.  Used when SHF_COMPRESSED is set.  */
+
+typedef struct
+{
+  Elf32_Word   ch_type;        /* Compression format.  */
+  Elf32_Word   ch_size;        /* Uncompressed data size.  */
+  Elf32_Word   ch_addralign;   /* Uncompressed data alignment.  */
+} Elf32_Chdr;
+
+typedef struct
+{
+  Elf64_Word   ch_type;        /* Compression format.  */
+  Elf64_Word   ch_reserved;
+  Elf64_Xword  ch_size;        /* Uncompressed data size.  */
+  Elf64_Xword  ch_addralign;   /* Uncompressed data alignment.  */
+} Elf64_Chdr;
+
+/* Legal values for ch_type (compression algorithm).  */
+#define ELFCOMPRESS_ZLIB       1          /* ZLIB/DEFLATE algorithm.  */
+#define ELFCOMPRESS_LOOS       0x60000000 /* Start of OS-specific.  */
+#define ELFCOMPRESS_HIOS       0x6fffffff /* End of OS-specific.  */
+#define ELFCOMPRESS_LOPROC     0x70000000 /* Start of processor-specific.  */
+#define ELFCOMPRESS_HIPROC     0x7fffffff /* End of processor-specific.  */
+
+/* Section group handling.  */
+#define GRP_COMDAT     0x1             /* Mark group as COMDAT.  */
+
+/* Symbol table entry.  */
+
+typedef struct
+{
+  Elf32_Word   st_name;                /* Symbol name (string tbl index) */
+  Elf32_Addr   st_value;               /* Symbol value */
+  Elf32_Word   st_size;                /* Symbol size */
+  unsigned char        st_info;                /* Symbol type and binding */
+  unsigned char        st_other;               /* Symbol visibility */
+  Elf32_Section        st_shndx;               /* Section index */
+} Elf32_Sym;
+
+typedef struct
+{
+  Elf64_Word   st_name;                /* Symbol name (string tbl index) */
+  unsigned char        st_info;                /* Symbol type and binding */
+  unsigned char st_other;              /* Symbol visibility */
+  Elf64_Section        st_shndx;               /* Section index */
+  Elf64_Addr   st_value;               /* Symbol value */
+  Elf64_Xword  st_size;                /* Symbol size */
+} Elf64_Sym;
+
+/* The syminfo section if available contains additional information about
+   every dynamic symbol.  */
+
+typedef struct
+{
+  Elf32_Half si_boundto;               /* Direct bindings, symbol bound to */
+  Elf32_Half si_flags;                 /* Per symbol flags */
+} Elf32_Syminfo;
+
+typedef struct
+{
+  Elf64_Half si_boundto;               /* Direct bindings, symbol bound to */
+  Elf64_Half si_flags;                 /* Per symbol flags */
+} Elf64_Syminfo;
+
+/* Possible values for si_boundto.  */
+#define SYMINFO_BT_SELF                0xffff  /* Symbol bound to self */
+#define SYMINFO_BT_PARENT      0xfffe  /* Symbol bound to parent */
+#define SYMINFO_BT_LOWRESERVE  0xff00  /* Beginning of reserved entries */
+
+/* Possible bitmasks for si_flags.  */
+#define SYMINFO_FLG_DIRECT     0x0001  /* Direct bound symbol */
+#define SYMINFO_FLG_PASSTHRU   0x0002  /* Pass-thru symbol for translator */
+#define SYMINFO_FLG_COPY       0x0004  /* Symbol is a copy-reloc */
+#define SYMINFO_FLG_LAZYLOAD   0x0008  /* Symbol bound to object to be lazy
+                                          loaded */
+/* Syminfo version values.  */
+#define SYMINFO_NONE           0
+#define SYMINFO_CURRENT                1
+#define SYMINFO_NUM            2
+
+
+/* How to extract and insert information held in the st_info field.  */
+
+#define ELF32_ST_BIND(val)             (((unsigned char) (val)) >> 4)
+#define ELF32_ST_TYPE(val)             ((val) & 0xf)
+#define ELF32_ST_INFO(bind, type)      (((bind) << 4) + ((type) & 0xf))
+
+/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
+#define ELF64_ST_BIND(val)             ELF32_ST_BIND (val)
+#define ELF64_ST_TYPE(val)             ELF32_ST_TYPE (val)
+#define ELF64_ST_INFO(bind, type)      ELF32_ST_INFO ((bind), (type))
+
+/* Legal values for ST_BIND subfield of st_info (symbol binding).  */
+
+#define STB_LOCAL      0               /* Local symbol */
+#define STB_GLOBAL     1               /* Global symbol */
+#define STB_WEAK       2               /* Weak symbol */
+#define        STB_NUM         3               /* Number of defined types.  */
+#define STB_LOOS       10              /* Start of OS-specific */
+#define STB_GNU_UNIQUE 10              /* Unique symbol.  */
+#define STB_HIOS       12              /* End of OS-specific */
+#define STB_LOPROC     13              /* Start of processor-specific */
+#define STB_HIPROC     15              /* End of processor-specific */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_NOTYPE     0               /* Symbol type is unspecified */
+#define STT_OBJECT     1               /* Symbol is a data object */
+#define STT_FUNC       2               /* Symbol is a code object */
+#define STT_SECTION    3               /* Symbol associated with a section */
+#define STT_FILE       4               /* Symbol's name is file name */
+#define STT_COMMON     5               /* Symbol is a common data object */
+#define STT_TLS                6               /* Symbol is thread-local data object*/
+#define        STT_NUM         7               /* Number of defined types.  */
+#define STT_LOOS       10              /* Start of OS-specific */
+#define STT_GNU_IFUNC  10              /* Symbol is indirect code object */
+#define STT_HIOS       12              /* End of OS-specific */
+#define STT_LOPROC     13              /* Start of processor-specific */
+#define STT_HIPROC     15              /* End of processor-specific */
+
+
+/* Symbol table indices are found in the hash buckets and chain table
+   of a symbol hash table section.  This special index value indicates
+   the end of a chain, meaning no further symbols are found in that bucket.  */
+
+#define STN_UNDEF      0               /* End of a chain.  */
+
+
+/* How to extract and insert information held in the st_other field.  */
+
+#define ELF32_ST_VISIBILITY(o) ((o) & 0x03)
+
+/* For ELF64 the definitions are the same.  */
+#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
+
+/* Symbol visibility specification encoded in the st_other field.  */
+#define STV_DEFAULT    0               /* Default symbol visibility rules */
+#define STV_INTERNAL   1               /* Processor specific hidden class */
+#define STV_HIDDEN     2               /* Sym unavailable in other modules */
+#define STV_PROTECTED  3               /* Not preemptible, not exported */
+
+
+/* Relocation table entry without addend (in section of type SHT_REL).  */
+
+typedef struct
+{
+  Elf32_Addr   r_offset;               /* Address */
+  Elf32_Word   r_info;                 /* Relocation type and symbol index */
+} Elf32_Rel;
+
+/* I have seen two different definitions of the Elf64_Rel and
+   Elf64_Rela structures, so we'll leave them out until Novell (or
+   whoever) gets their act together.  */
+/* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */
+
+typedef struct
+{
+  Elf64_Addr   r_offset;               /* Address */
+  Elf64_Xword  r_info;                 /* Relocation type and symbol index */
+} Elf64_Rel;
+
+/* Relocation table entry with addend (in section of type SHT_RELA).  */
+
+typedef struct
+{
+  Elf32_Addr   r_offset;               /* Address */
+  Elf32_Word   r_info;                 /* Relocation type and symbol index */
+  Elf32_Sword  r_addend;               /* Addend */
+} Elf32_Rela;
+
+typedef struct
+{
+  Elf64_Addr   r_offset;               /* Address */
+  Elf64_Xword  r_info;                 /* Relocation type and symbol index */
+  Elf64_Sxword r_addend;               /* Addend */
+} Elf64_Rela;
+
+/* How to extract and insert information held in the r_info field.  */
+
+#define ELF32_R_SYM(val)               ((val) >> 8)
+#define ELF32_R_TYPE(val)              ((val) & 0xff)
+#define ELF32_R_INFO(sym, type)                (((sym) << 8) + ((type) & 0xff))
+
+#define ELF64_R_SYM(i)                 ((i) >> 32)
+#define ELF64_R_TYPE(i)                        ((i) & 0xffffffff)
+#define ELF64_R_INFO(sym,type)         ((((Elf64_Xword) (sym)) << 32) + (type))
+
+/* Program segment header.  */
+
+typedef struct
+{
+  Elf32_Word   p_type;                 /* Segment type */
+  Elf32_Off    p_offset;               /* Segment file offset */
+  Elf32_Addr   p_vaddr;                /* Segment virtual address */
+  Elf32_Addr   p_paddr;                /* Segment physical address */
+  Elf32_Word   p_filesz;               /* Segment size in file */
+  Elf32_Word   p_memsz;                /* Segment size in memory */
+  Elf32_Word   p_flags;                /* Segment flags */
+  Elf32_Word   p_align;                /* Segment alignment */
+} Elf32_Phdr;
+
+typedef struct
+{
+  Elf64_Word   p_type;                 /* Segment type */
+  Elf64_Word   p_flags;                /* Segment flags */
+  Elf64_Off    p_offset;               /* Segment file offset */
+  Elf64_Addr   p_vaddr;                /* Segment virtual address */
+  Elf64_Addr   p_paddr;                /* Segment physical address */
+  Elf64_Xword  p_filesz;               /* Segment size in file */
+  Elf64_Xword  p_memsz;                /* Segment size in memory */
+  Elf64_Xword  p_align;                /* Segment alignment */
+} Elf64_Phdr;
+
+/* Special value for e_phnum.  This indicates that the real number of
+   program headers is too large to fit into e_phnum.  Instead the real
+   value is in the field sh_info of section 0.  */
+
+#define PN_XNUM                0xffff
+
+/* Legal values for p_type (segment type).  */
+
+#define        PT_NULL         0               /* Program header table entry unused */
+#define PT_LOAD                1               /* Loadable program segment */
+#define PT_DYNAMIC     2               /* Dynamic linking information */
+#define PT_INTERP      3               /* Program interpreter */
+#define PT_NOTE                4               /* Auxiliary information */
+#define PT_SHLIB       5               /* Reserved */
+#define PT_PHDR                6               /* Entry for header table itself */
+#define PT_TLS         7               /* Thread-local storage segment */
+#define        PT_NUM          8               /* Number of defined types */
+#define PT_LOOS                0x60000000      /* Start of OS-specific */
+#define PT_GNU_EH_FRAME        0x6474e550      /* GCC .eh_frame_hdr segment */
+#define PT_GNU_STACK   0x6474e551      /* Indicates stack executability */
+#define PT_GNU_RELRO   0x6474e552      /* Read-only after relocation */
+#define PT_LOSUNW      0x6ffffffa
+#define PT_SUNWBSS     0x6ffffffa      /* Sun Specific segment */
+#define PT_SUNWSTACK   0x6ffffffb      /* Stack segment */
+#define PT_HISUNW      0x6fffffff
+#define PT_HIOS                0x6fffffff      /* End of OS-specific */
+#define PT_LOPROC      0x70000000      /* Start of processor-specific */
+#define PT_HIPROC      0x7fffffff      /* End of processor-specific */
+
+/* Legal values for p_flags (segment flags).  */
+
+#define PF_X           (1 << 0)        /* Segment is executable */
+#define PF_W           (1 << 1)        /* Segment is writable */
+#define PF_R           (1 << 2)        /* Segment is readable */
+#define PF_MASKOS      0x0ff00000      /* OS-specific */
+#define PF_MASKPROC    0xf0000000      /* Processor-specific */
+
+/* Legal values for note segment descriptor types for core files. */
+
+#define NT_PRSTATUS    1               /* Contains copy of prstatus struct */
+#define NT_FPREGSET    2               /* Contains copy of fpregset struct */
+#define NT_PRPSINFO    3               /* Contains copy of prpsinfo struct */
+#define NT_PRXREG      4               /* Contains copy of prxregset struct */
+#define NT_TASKSTRUCT  4               /* Contains copy of task structure */
+#define NT_PLATFORM    5               /* String from sysinfo(SI_PLATFORM) */
+#define NT_AUXV                6               /* Contains copy of auxv array */
+#define NT_GWINDOWS    7               /* Contains copy of gwindows struct */
+#define NT_ASRS                8               /* Contains copy of asrset struct */
+#define NT_PSTATUS     10              /* Contains copy of pstatus struct */
+#define NT_PSINFO      13              /* Contains copy of psinfo struct */
+#define NT_PRCRED      14              /* Contains copy of prcred struct */
+#define NT_UTSNAME     15              /* Contains copy of utsname struct */
+#define NT_LWPSTATUS   16              /* Contains copy of lwpstatus struct */
+#define NT_LWPSINFO    17              /* Contains copy of lwpinfo struct */
+#define NT_PRFPXREG    20              /* Contains copy of fprxregset struct */
+#define NT_SIGINFO     0x53494749      /* Contains copy of siginfo_t,
+                                          size might increase */
+#define NT_FILE                0x46494c45      /* Contains information about mapped
+                                          files */
+#define NT_PRXFPREG    0x46e62b7f      /* Contains copy of user_fxsr_struct */
+#define NT_PPC_VMX     0x100           /* PowerPC Altivec/VMX registers */
+#define NT_PPC_SPE     0x101           /* PowerPC SPE/EVR registers */
+#define NT_PPC_VSX     0x102           /* PowerPC VSX registers */
+#define NT_386_TLS     0x200           /* i386 TLS slots (struct user_desc) */
+#define NT_386_IOPERM  0x201           /* x86 io permission bitmap (1=deny) */
+#define NT_X86_XSTATE  0x202           /* x86 extended state using xsave */
+#define NT_S390_HIGH_GPRS      0x300   /* s390 upper register halves */
+#define NT_S390_TIMER  0x301           /* s390 timer register */
+#define NT_S390_TODCMP 0x302           /* s390 TOD clock comparator register */
+#define NT_S390_TODPREG        0x303           /* s390 TOD programmable register */
+#define NT_S390_CTRS   0x304           /* s390 control registers */
+#define NT_S390_PREFIX 0x305           /* s390 prefix register */
+#define NT_S390_LAST_BREAK     0x306   /* s390 breaking event address */
+#define NT_S390_SYSTEM_CALL    0x307   /* s390 system call restart data */
+#define NT_S390_TDB    0x308           /* s390 transaction diagnostic block */
+#define NT_ARM_VFP     0x400           /* ARM VFP/NEON registers */
+#define NT_ARM_TLS     0x401           /* ARM TLS register */
+#define NT_ARM_HW_BREAK        0x402           /* ARM hardware breakpoint registers */
+#define NT_ARM_HW_WATCH        0x403           /* ARM hardware watchpoint registers */
+
+/* Legal values for the note segment descriptor types for object files.  */
+
+#define NT_VERSION     1               /* Contains a version string.  */
+
+
+/* Dynamic section entry.  */
+
+typedef struct
+{
+  Elf32_Sword  d_tag;                  /* Dynamic entry type */
+  union
+    {
+      Elf32_Word d_val;                        /* Integer value */
+      Elf32_Addr d_ptr;                        /* Address value */
+    } d_un;
+} Elf32_Dyn;
+
+typedef struct
+{
+  Elf64_Sxword d_tag;                  /* Dynamic entry type */
+  union
+    {
+      Elf64_Xword d_val;               /* Integer value */
+      Elf64_Addr d_ptr;                        /* Address value */
+    } d_un;
+} Elf64_Dyn;
+
+/* Legal values for d_tag (dynamic entry type).  */
+
+#define DT_NULL                0               /* Marks end of dynamic section */
+#define DT_NEEDED      1               /* Name of needed library */
+#define DT_PLTRELSZ    2               /* Size in bytes of PLT relocs */
+#define DT_PLTGOT      3               /* Processor defined value */
+#define DT_HASH                4               /* Address of symbol hash table */
+#define DT_STRTAB      5               /* Address of string table */
+#define DT_SYMTAB      6               /* Address of symbol table */
+#define DT_RELA                7               /* Address of Rela relocs */
+#define DT_RELASZ      8               /* Total size of Rela relocs */
+#define DT_RELAENT     9               /* Size of one Rela reloc */
+#define DT_STRSZ       10              /* Size of string table */
+#define DT_SYMENT      11              /* Size of one symbol table entry */
+#define DT_INIT                12              /* Address of init function */
+#define DT_FINI                13              /* Address of termination function */
+#define DT_SONAME      14              /* Name of shared object */
+#define DT_RPATH       15              /* Library search path (deprecated) */
+#define DT_SYMBOLIC    16              /* Start symbol search here */
+#define DT_REL         17              /* Address of Rel relocs */
+#define DT_RELSZ       18              /* Total size of Rel relocs */
+#define DT_RELENT      19              /* Size of one Rel reloc */
+#define DT_PLTREL      20              /* Type of reloc in PLT */
+#define DT_DEBUG       21              /* For debugging; unspecified */
+#define DT_TEXTREL     22              /* Reloc might modify .text */
+#define DT_JMPREL      23              /* Address of PLT relocs */
+#define        DT_BIND_NOW     24              /* Process relocations of object */
+#define        DT_INIT_ARRAY   25              /* Array with addresses of init fct */
+#define        DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
+#define        DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
+#define        DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
+#define DT_RUNPATH     29              /* Library search path */
+#define DT_FLAGS       30              /* Flags for the object being loaded */
+#define DT_ENCODING    32              /* Start of encoded range */
+#define DT_PREINIT_ARRAY 32            /* Array with addresses of preinit fct*/
+#define DT_PREINIT_ARRAYSZ 33          /* size in bytes of DT_PREINIT_ARRAY */
+#define        DT_NUM          34              /* Number used */
+#define DT_LOOS                0x6000000d      /* Start of OS-specific */
+#define DT_HIOS                0x6ffff000      /* End of OS-specific */
+#define DT_LOPROC      0x70000000      /* Start of processor-specific */
+#define DT_HIPROC      0x7fffffff      /* End of processor-specific */
+#define        DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
+
+/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
+   Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
+   approach.  */
+#define DT_VALRNGLO    0x6ffffd00
+#define DT_GNU_PRELINKED 0x6ffffdf5    /* Prelinking timestamp */
+#define DT_GNU_CONFLICTSZ 0x6ffffdf6   /* Size of conflict section */
+#define DT_GNU_LIBLISTSZ 0x6ffffdf7    /* Size of library list */
+#define DT_CHECKSUM    0x6ffffdf8
+#define DT_PLTPADSZ    0x6ffffdf9
+#define DT_MOVEENT     0x6ffffdfa
+#define DT_MOVESZ      0x6ffffdfb
+#define DT_FEATURE_1   0x6ffffdfc      /* Feature selection (DTF_*).  */
+#define DT_POSFLAG_1   0x6ffffdfd      /* Flags for DT_* entries, effecting
+                                          the following DT_* entry.  */
+#define DT_SYMINSZ     0x6ffffdfe      /* Size of syminfo table (in bytes) */
+#define DT_SYMINENT    0x6ffffdff      /* Entry size of syminfo */
+#define DT_VALRNGHI    0x6ffffdff
+#define DT_VALTAGIDX(tag)      (DT_VALRNGHI - (tag))   /* Reverse order! */
+#define DT_VALNUM 12
+
+/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
+   Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
+
+   If any adjustment is made to the ELF object after it has been
+   built these entries will need to be adjusted.  */
+#define DT_ADDRRNGLO   0x6ffffe00
+#define DT_GNU_HASH    0x6ffffef5      /* GNU-style hash table.  */
+#define DT_TLSDESC_PLT 0x6ffffef6
+#define DT_TLSDESC_GOT 0x6ffffef7
+#define DT_GNU_CONFLICT        0x6ffffef8      /* Start of conflict section */
+#define DT_GNU_LIBLIST 0x6ffffef9      /* Library list */
+#define DT_CONFIG      0x6ffffefa      /* Configuration information.  */
+#define DT_DEPAUDIT    0x6ffffefb      /* Dependency auditing.  */
+#define DT_AUDIT       0x6ffffefc      /* Object auditing.  */
+#define        DT_PLTPAD       0x6ffffefd      /* PLT padding.  */
+#define        DT_MOVETAB      0x6ffffefe      /* Move table.  */
+#define DT_SYMINFO     0x6ffffeff      /* Syminfo table.  */
+#define DT_ADDRRNGHI   0x6ffffeff
+#define DT_ADDRTAGIDX(tag)     (DT_ADDRRNGHI - (tag))  /* Reverse order! */
+#define DT_ADDRNUM 11
+
+/* The versioning entry types.  The next are defined as part of the
+   GNU extension.  */
+#define DT_VERSYM      0x6ffffff0
+
+#define DT_RELACOUNT   0x6ffffff9
+#define DT_RELCOUNT    0x6ffffffa
+
+/* These were chosen by Sun.  */
+#define DT_FLAGS_1     0x6ffffffb      /* State flags, see DF_1_* below.  */
+#define        DT_VERDEF       0x6ffffffc      /* Address of version definition
+                                          table */
+#define        DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
+#define        DT_VERNEED      0x6ffffffe      /* Address of table with needed
+                                          versions */
+#define        DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
+#define DT_VERSIONTAGIDX(tag)  (DT_VERNEEDNUM - (tag)) /* Reverse order! */
+#define DT_VERSIONTAGNUM 16
+
+/* Sun added these machine-independent extensions in the "processor-specific"
+   range.  Be compatible.  */
+#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
+#define DT_FILTER       0x7fffffff      /* Shared object to get values from */
+#define DT_EXTRATAGIDX(tag)    ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
+#define DT_EXTRANUM    3
+
+/* Values of `d_un.d_val' in the DT_FLAGS entry.  */
+#define DF_ORIGIN      0x00000001      /* Object may use DF_ORIGIN */
+#define DF_SYMBOLIC    0x00000002      /* Symbol resolutions starts here */
+#define DF_TEXTREL     0x00000004      /* Object contains text relocations */
+#define DF_BIND_NOW    0x00000008      /* No lazy binding for this object */
+#define DF_STATIC_TLS  0x00000010      /* Module uses the static TLS model */
+
+/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
+   entry in the dynamic section.  */
+#define DF_1_NOW       0x00000001      /* Set RTLD_NOW for this object.  */
+#define DF_1_GLOBAL    0x00000002      /* Set RTLD_GLOBAL for this object.  */
+#define DF_1_GROUP     0x00000004      /* Set RTLD_GROUP for this object.  */
+#define DF_1_NODELETE  0x00000008      /* Set RTLD_NODELETE for this object.*/
+#define DF_1_LOADFLTR  0x00000010      /* Trigger filtee loading at runtime.*/
+#define DF_1_INITFIRST 0x00000020      /* Set RTLD_INITFIRST for this object*/
+#define DF_1_NOOPEN    0x00000040      /* Set RTLD_NOOPEN for this object.  */
+#define DF_1_ORIGIN    0x00000080      /* $ORIGIN must be handled.  */
+#define DF_1_DIRECT    0x00000100      /* Direct binding enabled.  */
+#define DF_1_TRANS     0x00000200
+#define DF_1_INTERPOSE 0x00000400      /* Object is used to interpose.  */
+#define DF_1_NODEFLIB  0x00000800      /* Ignore default lib search path.  */
+#define DF_1_NODUMP    0x00001000      /* Object can't be dldump'ed.  */
+#define DF_1_CONFALT   0x00002000      /* Configuration alternative created.*/
+#define DF_1_ENDFILTEE 0x00004000      /* Filtee terminates filters search. */
+#define        DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
+#define        DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
+#define        DF_1_NODIRECT   0x00020000      /* Object has no-direct binding. */
+#define        DF_1_IGNMULDEF  0x00040000
+#define        DF_1_NOKSYMS    0x00080000
+#define        DF_1_NOHDR      0x00100000
+#define        DF_1_EDITED     0x00200000      /* Object is modified after built.  */
+#define        DF_1_NORELOC    0x00400000
+#define        DF_1_SYMINTPOSE 0x00800000      /* Object has individual interposers.  */
+#define        DF_1_GLOBAUDIT  0x01000000      /* Global auditing required.  */
+#define        DF_1_SINGLETON  0x02000000      /* Singleton symbols are used.  */
+
+/* Flags for the feature selection in DT_FEATURE_1.  */
+#define DTF_1_PARINIT  0x00000001
+#define DTF_1_CONFEXP  0x00000002
+
+/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
+#define DF_P1_LAZYLOAD 0x00000001      /* Lazyload following object.  */
+#define DF_P1_GROUPPERM        0x00000002      /* Symbols from next object are not
+                                          generally available.  */
+
+/* Version definition sections.  */
+
+typedef struct
+{
+  Elf32_Half   vd_version;             /* Version revision */
+  Elf32_Half   vd_flags;               /* Version information */
+  Elf32_Half   vd_ndx;                 /* Version Index */
+  Elf32_Half   vd_cnt;                 /* Number of associated aux entries */
+  Elf32_Word   vd_hash;                /* Version name hash value */
+  Elf32_Word   vd_aux;                 /* Offset in bytes to verdaux array */
+  Elf32_Word   vd_next;                /* Offset in bytes to next verdef
+                                          entry */
+} Elf32_Verdef;
+
+typedef struct
+{
+  Elf64_Half   vd_version;             /* Version revision */
+  Elf64_Half   vd_flags;               /* Version information */
+  Elf64_Half   vd_ndx;                 /* Version Index */
+  Elf64_Half   vd_cnt;                 /* Number of associated aux entries */
+  Elf64_Word   vd_hash;                /* Version name hash value */
+  Elf64_Word   vd_aux;                 /* Offset in bytes to verdaux array */
+  Elf64_Word   vd_next;                /* Offset in bytes to next verdef
+                                          entry */
+} Elf64_Verdef;
+
+
+/* Legal values for vd_version (version revision).  */
+#define VER_DEF_NONE   0               /* No version */
+#define VER_DEF_CURRENT        1               /* Current version */
+#define VER_DEF_NUM    2               /* Given version number */
+
+/* Legal values for vd_flags (version information flags).  */
+#define VER_FLG_BASE   0x1             /* Version definition of file itself */
+#define VER_FLG_WEAK   0x2             /* Weak version identifier */
+
+/* Versym symbol index values.  */
+#define        VER_NDX_LOCAL           0       /* Symbol is local.  */
+#define        VER_NDX_GLOBAL          1       /* Symbol is global.  */
+#define        VER_NDX_LORESERVE       0xff00  /* Beginning of reserved entries.  */
+#define        VER_NDX_ELIMINATE       0xff01  /* Symbol is to be eliminated.  */
+
+/* Auxialiary version information.  */
+
+typedef struct
+{
+  Elf32_Word   vda_name;               /* Version or dependency names */
+  Elf32_Word   vda_next;               /* Offset in bytes to next verdaux
+                                          entry */
+} Elf32_Verdaux;
+
+typedef struct
+{
+  Elf64_Word   vda_name;               /* Version or dependency names */
+  Elf64_Word   vda_next;               /* Offset in bytes to next verdaux
+                                          entry */
+} Elf64_Verdaux;
+
+
+/* Version dependency section.  */
+
+typedef struct
+{
+  Elf32_Half   vn_version;             /* Version of structure */
+  Elf32_Half   vn_cnt;                 /* Number of associated aux entries */
+  Elf32_Word   vn_file;                /* Offset of filename for this
+                                          dependency */
+  Elf32_Word   vn_aux;                 /* Offset in bytes to vernaux array */
+  Elf32_Word   vn_next;                /* Offset in bytes to next verneed
+                                          entry */
+} Elf32_Verneed;
+
+typedef struct
+{
+  Elf64_Half   vn_version;             /* Version of structure */
+  Elf64_Half   vn_cnt;                 /* Number of associated aux entries */
+  Elf64_Word   vn_file;                /* Offset of filename for this
+                                          dependency */
+  Elf64_Word   vn_aux;                 /* Offset in bytes to vernaux array */
+  Elf64_Word   vn_next;                /* Offset in bytes to next verneed
+                                          entry */
+} Elf64_Verneed;
+
+
+/* Legal values for vn_version (version revision).  */
+#define VER_NEED_NONE   0              /* No version */
+#define VER_NEED_CURRENT 1             /* Current version */
+#define VER_NEED_NUM    2              /* Given version number */
+
+/* Auxiliary needed version information.  */
+
+typedef struct
+{
+  Elf32_Word   vna_hash;               /* Hash value of dependency name */
+  Elf32_Half   vna_flags;              /* Dependency specific information */
+  Elf32_Half   vna_other;              /* Unused */
+  Elf32_Word   vna_name;               /* Dependency name string offset */
+  Elf32_Word   vna_next;               /* Offset in bytes to next vernaux
+                                          entry */
+} Elf32_Vernaux;
+
+typedef struct
+{
+  Elf64_Word   vna_hash;               /* Hash value of dependency name */
+  Elf64_Half   vna_flags;              /* Dependency specific information */
+  Elf64_Half   vna_other;              /* Unused */
+  Elf64_Word   vna_name;               /* Dependency name string offset */
+  Elf64_Word   vna_next;               /* Offset in bytes to next vernaux
+                                          entry */
+} Elf64_Vernaux;
+
+
+/* Legal values for vna_flags.  */
+#define VER_FLG_WEAK   0x2             /* Weak version identifier */
+
+
+/* Auxiliary vector.  */
+
+/* This vector is normally only used by the program interpreter.  The
+   usual definition in an ABI supplement uses the name auxv_t.  The
+   vector is not usually defined in a standard <elf.h> file, but it
+   can't hurt.  We rename it to avoid conflicts.  The sizes of these
+   types are an arrangement between the exec server and the program
+   interpreter, so we don't fully specify them here.  */
+
+typedef struct
+{
+  uint32_t a_type;             /* Entry type */
+  union
+    {
+      uint32_t a_val;          /* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+        though, since it does not work when using 32-bit definitions
+        on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf32_auxv_t;
+
+typedef struct
+{
+  uint64_t a_type;             /* Entry type */
+  union
+    {
+      uint64_t a_val;          /* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+        though, since it does not work when using 32-bit definitions
+        on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf64_auxv_t;
+
+#include <bits/auxv.h>
+/* Note section contents.  Each entry in the note section begins with
+   a header of a fixed form.  */
+
+typedef struct
+{
+  Elf32_Word n_namesz;                 /* Length of the note's name.  */
+  Elf32_Word n_descsz;                 /* Length of the note's descriptor.  */
+  Elf32_Word n_type;                   /* Type of the note.  */
+} Elf32_Nhdr;
+
+typedef struct
+{
+  Elf64_Word n_namesz;                 /* Length of the note's name.  */
+  Elf64_Word n_descsz;                 /* Length of the note's descriptor.  */
+  Elf64_Word n_type;                   /* Type of the note.  */
+} Elf64_Nhdr;
+
+/* Known names of notes.  */
+
+/* Solaris entries in the note section have this name.  */
+#define ELF_NOTE_SOLARIS       "SUNW Solaris"
+
+/* Note entries for GNU systems have this name.  */
+#define ELF_NOTE_GNU           "GNU"
+
+
+/* Defined types of notes for Solaris.  */
+
+/* Value of descriptor (one word) is desired pagesize for the binary.  */
+#define ELF_NOTE_PAGESIZE_HINT 1
+
+
+/* Defined note types for GNU systems.  */
+
+/* ABI information.  The descriptor consists of words:
+   word 0: OS descriptor
+   word 1: major version of the ABI
+   word 2: minor version of the ABI
+   word 3: subminor version of the ABI
+*/
+#define NT_GNU_ABI_TAG 1
+#define ELF_NOTE_ABI   NT_GNU_ABI_TAG /* Old name.  */
+
+/* Known OSes.  These values can appear in word 0 of an
+   NT_GNU_ABI_TAG note section entry.  */
+#define ELF_NOTE_OS_LINUX      0
+#define ELF_NOTE_OS_GNU                1
+#define ELF_NOTE_OS_SOLARIS2   2
+#define ELF_NOTE_OS_FREEBSD    3
+
+/* Synthetic hwcap information.  The descriptor begins with two words:
+   word 0: number of entries
+   word 1: bitmask of enabled entries
+   Then follow variable-length entries, one byte followed by a
+   '\0'-terminated hwcap name string.  The byte gives the bit
+   number to test if enabled, (1U << bit) & bitmask.  */
+#define NT_GNU_HWCAP   2
+
+/* Build ID bits as generated by ld --build-id.
+   The descriptor consists of any nonzero number of bytes.  */
+#define NT_GNU_BUILD_ID        3
+
+/* Version note generated by GNU gold containing a version string.  */
+#define NT_GNU_GOLD_VERSION    4
+
+
+/* Move records.  */
+typedef struct
+{
+  Elf32_Xword m_value;         /* Symbol value.  */
+  Elf32_Word m_info;           /* Size and index.  */
+  Elf32_Word m_poffset;                /* Symbol offset.  */
+  Elf32_Half m_repeat;         /* Repeat count.  */
+  Elf32_Half m_stride;         /* Stride info.  */
+} Elf32_Move;
+
+typedef struct
+{
+  Elf64_Xword m_value;         /* Symbol value.  */
+  Elf64_Xword m_info;          /* Size and index.  */
+  Elf64_Xword m_poffset;       /* Symbol offset.  */
+  Elf64_Half m_repeat;         /* Repeat count.  */
+  Elf64_Half m_stride;         /* Stride info.  */
+} Elf64_Move;
+
+/* Macro to construct move records.  */
+#define ELF32_M_SYM(info)      ((info) >> 8)
+#define ELF32_M_SIZE(info)     ((unsigned char) (info))
+#define ELF32_M_INFO(sym, size)        (((sym) << 8) + (unsigned char) (size))
+
+#define ELF64_M_SYM(info)      ELF32_M_SYM (info)
+#define ELF64_M_SIZE(info)     ELF32_M_SIZE (info)
+#define ELF64_M_INFO(sym, size)        ELF32_M_INFO (sym, size)
+
+
+/* Motorola 68k specific definitions.  */
+
+/* Values for Elf32_Ehdr.e_flags.  */
+#define EF_CPU32       0x00810000
+
+/* m68k relocs.  */
+
+#define R_68K_NONE     0               /* No reloc */
+#define R_68K_32       1               /* Direct 32 bit  */
+#define R_68K_16       2               /* Direct 16 bit  */
+#define R_68K_8                3               /* Direct 8 bit  */
+#define R_68K_PC32     4               /* PC relative 32 bit */
+#define R_68K_PC16     5               /* PC relative 16 bit */
+#define R_68K_PC8      6               /* PC relative 8 bit */
+#define R_68K_GOT32    7               /* 32 bit PC relative GOT entry */
+#define R_68K_GOT16    8               /* 16 bit PC relative GOT entry */
+#define R_68K_GOT8     9               /* 8 bit PC relative GOT entry */
+#define R_68K_GOT32O   10              /* 32 bit GOT offset */
+#define R_68K_GOT16O   11              /* 16 bit GOT offset */
+#define R_68K_GOT8O    12              /* 8 bit GOT offset */
+#define R_68K_PLT32    13              /* 32 bit PC relative PLT address */
+#define R_68K_PLT16    14              /* 16 bit PC relative PLT address */
+#define R_68K_PLT8     15              /* 8 bit PC relative PLT address */
+#define R_68K_PLT32O   16              /* 32 bit PLT offset */
+#define R_68K_PLT16O   17              /* 16 bit PLT offset */
+#define R_68K_PLT8O    18              /* 8 bit PLT offset */
+#define R_68K_COPY     19              /* Copy symbol at runtime */
+#define R_68K_GLOB_DAT 20              /* Create GOT entry */
+#define R_68K_JMP_SLOT 21              /* Create PLT entry */
+#define R_68K_RELATIVE 22              /* Adjust by program base */
+#define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
+#define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
+#define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
+#define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
+#define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
+#define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
+#define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
+#define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
+#define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
+#define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
+#define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
+#define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
+#define R_68K_TLS_LE32      37          /* 32 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_LE16      38          /* 16 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_LE8       39          /* 8 bit offset relative to
+                                          static TLS block */
+#define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
+#define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
+#define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
+/* Keep this the last entry.  */
+#define R_68K_NUM      43
+
+/* Intel 80386 specific definitions.  */
+
+/* i386 relocs.  */
+
+#define R_386_NONE        0            /* No reloc */
+#define R_386_32          1            /* Direct 32 bit  */
+#define R_386_PC32        2            /* PC relative 32 bit */
+#define R_386_GOT32       3            /* 32 bit GOT entry */
+#define R_386_PLT32       4            /* 32 bit PLT address */
+#define R_386_COPY        5            /* Copy symbol at runtime */
+#define R_386_GLOB_DAT    6            /* Create GOT entry */
+#define R_386_JMP_SLOT    7            /* Create PLT entry */
+#define R_386_RELATIVE    8            /* Adjust by program base */
+#define R_386_GOTOFF      9            /* 32 bit offset to GOT */
+#define R_386_GOTPC       10           /* 32 bit PC relative offset to GOT */
+#define R_386_32PLT       11
+#define R_386_TLS_TPOFF           14           /* Offset in static TLS block */
+#define R_386_TLS_IE      15           /* Address of GOT entry for static TLS
+                                          block offset */
+#define R_386_TLS_GOTIE           16           /* GOT entry for static TLS block
+                                          offset */
+#define R_386_TLS_LE      17           /* Offset relative to static TLS
+                                          block */
+#define R_386_TLS_GD      18           /* Direct 32 bit for GNU version of
+                                          general dynamic thread local data */
+#define R_386_TLS_LDM     19           /* Direct 32 bit for GNU version of
+                                          local dynamic thread local data
+                                          in LE code */
+#define R_386_16          20
+#define R_386_PC16        21
+#define R_386_8                   22
+#define R_386_PC8         23
+#define R_386_TLS_GD_32           24           /* Direct 32 bit for general dynamic
+                                          thread local data */
+#define R_386_TLS_GD_PUSH  25          /* Tag for pushl in GD TLS code */
+#define R_386_TLS_GD_CALL  26          /* Relocation for call to
+                                          __tls_get_addr() */
+#define R_386_TLS_GD_POP   27          /* Tag for popl in GD TLS code */
+#define R_386_TLS_LDM_32   28          /* Direct 32 bit for local dynamic
+                                          thread local data in LE code */
+#define R_386_TLS_LDM_PUSH 29          /* Tag for pushl in LDM TLS code */
+#define R_386_TLS_LDM_CALL 30          /* Relocation for call to
+                                          __tls_get_addr() in LDM code */
+#define R_386_TLS_LDM_POP  31          /* Tag for popl in LDM TLS code */
+#define R_386_TLS_LDO_32   32          /* Offset relative to TLS block */
+#define R_386_TLS_IE_32           33           /* GOT entry for negated static TLS
+                                          block offset */
+#define R_386_TLS_LE_32           34           /* Negated offset relative to static
+                                          TLS block */
+#define R_386_TLS_DTPMOD32 35          /* ID of module containing symbol */
+#define R_386_TLS_DTPOFF32 36          /* Offset in TLS block */
+#define R_386_TLS_TPOFF32  37          /* Negated offset in static TLS block */
+#define R_386_SIZE32      38           /* 32-bit symbol size */
+#define R_386_TLS_GOTDESC  39          /* GOT offset for TLS descriptor.  */
+#define R_386_TLS_DESC_CALL 40         /* Marker of call through TLS
+                                          descriptor for
+                                          relaxation.  */
+#define R_386_TLS_DESC     41          /* TLS descriptor containing
+                                          pointer to code and to
+                                          argument, returning the TLS
+                                          offset for the symbol.  */
+#define R_386_IRELATIVE           42           /* Adjust indirectly by program base */
+/* Keep this the last entry.  */
+#define R_386_NUM         43
+
+/* SUN SPARC specific definitions.  */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_SPARC_REGISTER     13      /* Global register reserved to app. */
+
+/* Values for Elf64_Ehdr.e_flags.  */
+
+#define EF_SPARCV9_MM          3
+#define EF_SPARCV9_TSO         0
+#define EF_SPARCV9_PSO         1
+#define EF_SPARCV9_RMO         2
+#define EF_SPARC_LEDATA                0x800000 /* little endian data */
+#define EF_SPARC_EXT_MASK      0xFFFF00
+#define EF_SPARC_32PLUS                0x000100 /* generic V8+ features */
+#define EF_SPARC_SUN_US1       0x000200 /* Sun UltraSPARC1 extensions */
+#define EF_SPARC_HAL_R1                0x000400 /* HAL R1 extensions */
+#define EF_SPARC_SUN_US3       0x000800 /* Sun UltraSPARCIII extensions */
+
+/* SPARC relocs.  */
+
+#define R_SPARC_NONE           0       /* No reloc */
+#define R_SPARC_8              1       /* Direct 8 bit */
+#define R_SPARC_16             2       /* Direct 16 bit */
+#define R_SPARC_32             3       /* Direct 32 bit */
+#define R_SPARC_DISP8          4       /* PC relative 8 bit */
+#define R_SPARC_DISP16         5       /* PC relative 16 bit */
+#define R_SPARC_DISP32         6       /* PC relative 32 bit */
+#define R_SPARC_WDISP30                7       /* PC relative 30 bit shifted */
+#define R_SPARC_WDISP22                8       /* PC relative 22 bit shifted */
+#define R_SPARC_HI22           9       /* High 22 bit */
+#define R_SPARC_22             10      /* Direct 22 bit */
+#define R_SPARC_13             11      /* Direct 13 bit */
+#define R_SPARC_LO10           12      /* Truncated 10 bit */
+#define R_SPARC_GOT10          13      /* Truncated 10 bit GOT entry */
+#define R_SPARC_GOT13          14      /* 13 bit GOT entry */
+#define R_SPARC_GOT22          15      /* 22 bit GOT entry shifted */
+#define R_SPARC_PC10           16      /* PC relative 10 bit truncated */
+#define R_SPARC_PC22           17      /* PC relative 22 bit shifted */
+#define R_SPARC_WPLT30         18      /* 30 bit PC relative PLT address */
+#define R_SPARC_COPY           19      /* Copy symbol at runtime */
+#define R_SPARC_GLOB_DAT       20      /* Create GOT entry */
+#define R_SPARC_JMP_SLOT       21      /* Create PLT entry */
+#define R_SPARC_RELATIVE       22      /* Adjust by program base */
+#define R_SPARC_UA32           23      /* Direct 32 bit unaligned */
+
+/* Additional Sparc64 relocs.  */
+
+#define R_SPARC_PLT32          24      /* Direct 32 bit ref to PLT entry */
+#define R_SPARC_HIPLT22                25      /* High 22 bit PLT entry */
+#define R_SPARC_LOPLT10                26      /* Truncated 10 bit PLT entry */
+#define R_SPARC_PCPLT32                27      /* PC rel 32 bit ref to PLT entry */
+#define R_SPARC_PCPLT22                28      /* PC rel high 22 bit PLT entry */
+#define R_SPARC_PCPLT10                29      /* PC rel trunc 10 bit PLT entry */
+#define R_SPARC_10             30      /* Direct 10 bit */
+#define R_SPARC_11             31      /* Direct 11 bit */
+#define R_SPARC_64             32      /* Direct 64 bit */
+#define R_SPARC_OLO10          33      /* 10bit with secondary 13bit addend */
+#define R_SPARC_HH22           34      /* Top 22 bits of direct 64 bit */
+#define R_SPARC_HM10           35      /* High middle 10 bits of ... */
+#define R_SPARC_LM22           36      /* Low middle 22 bits of ... */
+#define R_SPARC_PC_HH22                37      /* Top 22 bits of pc rel 64 bit */
+#define R_SPARC_PC_HM10                38      /* High middle 10 bit of ... */
+#define R_SPARC_PC_LM22                39      /* Low miggle 22 bits of ... */
+#define R_SPARC_WDISP16                40      /* PC relative 16 bit shifted */
+#define R_SPARC_WDISP19                41      /* PC relative 19 bit shifted */
+#define R_SPARC_GLOB_JMP       42      /* was part of v9 ABI but was removed */
+#define R_SPARC_7              43      /* Direct 7 bit */
+#define R_SPARC_5              44      /* Direct 5 bit */
+#define R_SPARC_6              45      /* Direct 6 bit */
+#define R_SPARC_DISP64         46      /* PC relative 64 bit */
+#define R_SPARC_PLT64          47      /* Direct 64 bit ref to PLT entry */
+#define R_SPARC_HIX22          48      /* High 22 bit complemented */
+#define R_SPARC_LOX10          49      /* Truncated 11 bit complemented */
+#define R_SPARC_H44            50      /* Direct high 12 of 44 bit */
+#define R_SPARC_M44            51      /* Direct mid 22 of 44 bit */
+#define R_SPARC_L44            52      /* Direct low 10 of 44 bit */
+#define R_SPARC_REGISTER       53      /* Global register usage */
+#define R_SPARC_UA64           54      /* Direct 64 bit unaligned */
+#define R_SPARC_UA16           55      /* Direct 16 bit unaligned */
+#define R_SPARC_TLS_GD_HI22    56
+#define R_SPARC_TLS_GD_LO10    57
+#define R_SPARC_TLS_GD_ADD     58
+#define R_SPARC_TLS_GD_CALL    59
+#define R_SPARC_TLS_LDM_HI22   60
+#define R_SPARC_TLS_LDM_LO10   61
+#define R_SPARC_TLS_LDM_ADD    62
+#define R_SPARC_TLS_LDM_CALL   63
+#define R_SPARC_TLS_LDO_HIX22  64
+#define R_SPARC_TLS_LDO_LOX10  65
+#define R_SPARC_TLS_LDO_ADD    66
+#define R_SPARC_TLS_IE_HI22    67
+#define R_SPARC_TLS_IE_LO10    68
+#define R_SPARC_TLS_IE_LD      69
+#define R_SPARC_TLS_IE_LDX     70
+#define R_SPARC_TLS_IE_ADD     71
+#define R_SPARC_TLS_LE_HIX22   72
+#define R_SPARC_TLS_LE_LOX10   73
+#define R_SPARC_TLS_DTPMOD32   74
+#define R_SPARC_TLS_DTPMOD64   75
+#define R_SPARC_TLS_DTPOFF32   76
+#define R_SPARC_TLS_DTPOFF64   77
+#define R_SPARC_TLS_TPOFF32    78
+#define R_SPARC_TLS_TPOFF64    79
+#define R_SPARC_GOTDATA_HIX22  80
+#define R_SPARC_GOTDATA_LOX10  81
+#define R_SPARC_GOTDATA_OP_HIX22       82
+#define R_SPARC_GOTDATA_OP_LOX10       83
+#define R_SPARC_GOTDATA_OP     84
+#define R_SPARC_H34            85
+#define R_SPARC_SIZE32         86
+#define R_SPARC_SIZE64         87
+#define R_SPARC_WDISP10                88
+#define R_SPARC_JMP_IREL       248
+#define R_SPARC_IRELATIVE      249
+#define R_SPARC_GNU_VTINHERIT  250
+#define R_SPARC_GNU_VTENTRY    251
+#define R_SPARC_REV32          252
+/* Keep this the last entry.  */
+#define R_SPARC_NUM            253
+
+/* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
+
+#define DT_SPARC_REGISTER      0x70000001
+#define DT_SPARC_NUM           2
+
+/* MIPS R3000 specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_MIPS_NOREORDER      1     /* A .noreorder directive was used.  */
+#define EF_MIPS_PIC            2     /* Contains PIC code.  */
+#define EF_MIPS_CPIC           4     /* Uses PIC calling sequence.  */
+#define EF_MIPS_XGOT           8
+#define EF_MIPS_64BIT_WHIRL    16
+#define EF_MIPS_ABI2           32
+#define EF_MIPS_ABI_ON32       64
+#define EF_MIPS_FP64           512  /* Uses FP64 (12 callee-saved).  */
+#define EF_MIPS_NAN2008        1024  /* Uses IEEE 754-2008 NaN encoding.  */
+#define EF_MIPS_ARCH           0xf0000000 /* MIPS architecture level.  */
+
+/* Legal values for MIPS architecture level.  */
+
+#define EF_MIPS_ARCH_1         0x00000000 /* -mips1 code.  */
+#define EF_MIPS_ARCH_2         0x10000000 /* -mips2 code.  */
+#define EF_MIPS_ARCH_3         0x20000000 /* -mips3 code.  */
+#define EF_MIPS_ARCH_4         0x30000000 /* -mips4 code.  */
+#define EF_MIPS_ARCH_5         0x40000000 /* -mips5 code.  */
+#define EF_MIPS_ARCH_32                0x50000000 /* MIPS32 code.  */
+#define EF_MIPS_ARCH_64                0x60000000 /* MIPS64 code.  */
+#define EF_MIPS_ARCH_32R2      0x70000000 /* MIPS32r2 code.  */
+#define EF_MIPS_ARCH_64R2      0x80000000 /* MIPS64r2 code.  */
+
+/* The following are unofficial names and should not be used.  */
+
+#define E_MIPS_ARCH_1          EF_MIPS_ARCH_1
+#define E_MIPS_ARCH_2          EF_MIPS_ARCH_2
+#define E_MIPS_ARCH_3          EF_MIPS_ARCH_3
+#define E_MIPS_ARCH_4          EF_MIPS_ARCH_4
+#define E_MIPS_ARCH_5          EF_MIPS_ARCH_5
+#define E_MIPS_ARCH_32         EF_MIPS_ARCH_32
+#define E_MIPS_ARCH_64         EF_MIPS_ARCH_64
+
+/* Special section indices.  */
+
+#define SHN_MIPS_ACOMMON       0xff00  /* Allocated common symbols.  */
+#define SHN_MIPS_TEXT          0xff01  /* Allocated test symbols.  */
+#define SHN_MIPS_DATA          0xff02  /* Allocated data symbols.  */
+#define SHN_MIPS_SCOMMON       0xff03  /* Small common symbols.  */
+#define SHN_MIPS_SUNDEFINED    0xff04  /* Small undefined symbols.  */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link.  */
+#define SHT_MIPS_MSYM          0x70000001
+#define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols.  */
+#define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes.  */
+#define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
+#define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging info.  */
+#define SHT_MIPS_REGINFO       0x70000006 /* Register usage information.  */
+#define SHT_MIPS_PACKAGE       0x70000007
+#define SHT_MIPS_PACKSYM       0x70000008
+#define SHT_MIPS_RELD          0x70000009
+#define SHT_MIPS_IFACE         0x7000000b
+#define SHT_MIPS_CONTENT       0x7000000c
+#define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
+#define SHT_MIPS_SHDR          0x70000010
+#define SHT_MIPS_FDESC         0x70000011
+#define SHT_MIPS_EXTSYM                0x70000012
+#define SHT_MIPS_DENSE         0x70000013
+#define SHT_MIPS_PDESC         0x70000014
+#define SHT_MIPS_LOCSYM                0x70000015
+#define SHT_MIPS_AUXSYM                0x70000016
+#define SHT_MIPS_OPTSYM                0x70000017
+#define SHT_MIPS_LOCSTR                0x70000018
+#define SHT_MIPS_LINE          0x70000019
+#define SHT_MIPS_RFDESC                0x7000001a
+#define SHT_MIPS_DELTASYM      0x7000001b
+#define SHT_MIPS_DELTAINST     0x7000001c
+#define SHT_MIPS_DELTACLASS    0x7000001d
+#define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
+#define SHT_MIPS_DELTADECL     0x7000001f
+#define SHT_MIPS_SYMBOL_LIB    0x70000020
+#define SHT_MIPS_EVENTS                0x70000021 /* Event section.  */
+#define SHT_MIPS_TRANSLATE     0x70000022
+#define SHT_MIPS_PIXIE         0x70000023
+#define SHT_MIPS_XLATE         0x70000024
+#define SHT_MIPS_XLATE_DEBUG   0x70000025
+#define SHT_MIPS_WHIRL         0x70000026
+#define SHT_MIPS_EH_REGION     0x70000027
+#define SHT_MIPS_XLATE_OLD     0x70000028
+#define SHT_MIPS_PDR_EXCEPTION 0x70000029
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_MIPS_GPREL         0x10000000 /* Must be in global data area.  */
+#define SHF_MIPS_MERGE         0x20000000
+#define SHF_MIPS_ADDR          0x40000000
+#define SHF_MIPS_STRINGS       0x80000000
+#define SHF_MIPS_NOSTRIP       0x08000000
+#define SHF_MIPS_LOCAL         0x04000000
+#define SHF_MIPS_NAMES         0x02000000
+#define SHF_MIPS_NODUPE                0x01000000
+
+
+/* Symbol tables.  */
+
+/* MIPS specific values for `st_other'.  */
+#define STO_MIPS_DEFAULT               0x0
+#define STO_MIPS_INTERNAL              0x1
+#define STO_MIPS_HIDDEN                        0x2
+#define STO_MIPS_PROTECTED             0x3
+#define STO_MIPS_PLT                   0x8
+#define STO_MIPS_SC_ALIGN_UNUSED       0xff
+
+/* MIPS specific values for `st_info'.  */
+#define STB_MIPS_SPLIT_COMMON          13
+
+/* Entries found in sections of type SHT_MIPS_GPTAB.  */
+
+typedef union
+{
+  struct
+    {
+      Elf32_Word gt_current_g_value;   /* -G value used for compilation.  */
+      Elf32_Word gt_unused;            /* Not used.  */
+    } gt_header;                       /* First entry in section.  */
+  struct
+    {
+      Elf32_Word gt_g_value;           /* If this value were used for -G.  */
+      Elf32_Word gt_bytes;             /* This many bytes would be used.  */
+    } gt_entry;                                /* Subsequent entries in section.  */
+} Elf32_gptab;
+
+/* Entry found in sections of type SHT_MIPS_REGINFO.  */
+
+typedef struct
+{
+  Elf32_Word ri_gprmask;               /* General registers used.  */
+  Elf32_Word ri_cprmask[4];            /* Coprocessor registers used.  */
+  Elf32_Sword ri_gp_value;             /* $gp register value.  */
+} Elf32_RegInfo;
+
+/* Entries found in sections of type SHT_MIPS_OPTIONS.  */
+
+typedef struct
+{
+  unsigned char kind;          /* Determines interpretation of the
+                                  variable part of descriptor.  */
+  unsigned char size;          /* Size of descriptor, including header.  */
+  Elf32_Section section;       /* Section header index of section affected,
+                                  0 for global options.  */
+  Elf32_Word info;             /* Kind-specific information.  */
+} Elf_Options;
+
+/* Values for `kind' field in Elf_Options.  */
+
+#define ODK_NULL       0       /* Undefined.  */
+#define ODK_REGINFO    1       /* Register usage information.  */
+#define ODK_EXCEPTIONS 2       /* Exception processing options.  */
+#define ODK_PAD                3       /* Section padding options.  */
+#define ODK_HWPATCH    4       /* Hardware workarounds performed */
+#define ODK_FILL       5       /* record the fill value used by the linker. */
+#define ODK_TAGS       6       /* reserve space for desktop tools to write. */
+#define ODK_HWAND      7       /* HW workarounds.  'AND' bits when merging. */
+#define ODK_HWOR       8       /* HW workarounds.  'OR' bits when merging.  */
+
+/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
+
+#define OEX_FPU_MIN    0x1f    /* FPE's which MUST be enabled.  */
+#define OEX_FPU_MAX    0x1f00  /* FPE's which MAY be enabled.  */
+#define OEX_PAGE0      0x10000 /* page zero must be mapped.  */
+#define OEX_SMM                0x20000 /* Force sequential memory mode?  */
+#define OEX_FPDBUG     0x40000 /* Force floating point debug mode?  */
+#define OEX_PRECISEFP  OEX_FPDBUG
+#define OEX_DISMISS    0x80000 /* Dismiss invalid address faults?  */
+
+#define OEX_FPU_INVAL  0x10
+#define OEX_FPU_DIV0   0x08
+#define OEX_FPU_OFLO   0x04
+#define OEX_FPU_UFLO   0x02
+#define OEX_FPU_INEX   0x01
+
+/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
+
+#define OHW_R4KEOP     0x1     /* R4000 end-of-page patch.  */
+#define OHW_R8KPFETCH  0x2     /* may need R8000 prefetch patch.  */
+#define OHW_R5KEOP     0x4     /* R5000 end-of-page patch.  */
+#define OHW_R5KCVTL    0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
+
+#define OPAD_PREFIX    0x1
+#define OPAD_POSTFIX   0x2
+#define OPAD_SYMBOL    0x4
+
+/* Entry found in `.options' section.  */
+
+typedef struct
+{
+  Elf32_Word hwp_flags1;       /* Extra flags.  */
+  Elf32_Word hwp_flags2;       /* Extra flags.  */
+} Elf_Options_Hw;
+
+/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
+
+#define OHWA0_R4KEOP_CHECKED   0x00000001
+#define OHWA1_R4KEOP_CLEAN     0x00000002
+
+/* MIPS relocs.  */
+
+#define R_MIPS_NONE            0       /* No reloc */
+#define R_MIPS_16              1       /* Direct 16 bit */
+#define R_MIPS_32              2       /* Direct 32 bit */
+#define R_MIPS_REL32           3       /* PC relative 32 bit */
+#define R_MIPS_26              4       /* Direct 26 bit shifted */
+#define R_MIPS_HI16            5       /* High 16 bit */
+#define R_MIPS_LO16            6       /* Low 16 bit */
+#define R_MIPS_GPREL16         7       /* GP relative 16 bit */
+#define R_MIPS_LITERAL         8       /* 16 bit literal entry */
+#define R_MIPS_GOT16           9       /* 16 bit GOT entry */
+#define R_MIPS_PC16            10      /* PC relative 16 bit */
+#define R_MIPS_CALL16          11      /* 16 bit GOT entry for function */
+#define R_MIPS_GPREL32         12      /* GP relative 32 bit */
+
+#define R_MIPS_SHIFT5          16
+#define R_MIPS_SHIFT6          17
+#define R_MIPS_64              18
+#define R_MIPS_GOT_DISP                19
+#define R_MIPS_GOT_PAGE                20
+#define R_MIPS_GOT_OFST                21
+#define R_MIPS_GOT_HI16                22
+#define R_MIPS_GOT_LO16                23
+#define R_MIPS_SUB             24
+#define R_MIPS_INSERT_A                25
+#define R_MIPS_INSERT_B                26
+#define R_MIPS_DELETE          27
+#define R_MIPS_HIGHER          28
+#define R_MIPS_HIGHEST         29
+#define R_MIPS_CALL_HI16       30
+#define R_MIPS_CALL_LO16       31
+#define R_MIPS_SCN_DISP                32
+#define R_MIPS_REL16           33
+#define R_MIPS_ADD_IMMEDIATE   34
+#define R_MIPS_PJUMP           35
+#define R_MIPS_RELGOT          36
+#define R_MIPS_JALR            37
+#define R_MIPS_TLS_DTPMOD32    38      /* Module number 32 bit */
+#define R_MIPS_TLS_DTPREL32    39      /* Module-relative offset 32 bit */
+#define R_MIPS_TLS_DTPMOD64    40      /* Module number 64 bit */
+#define R_MIPS_TLS_DTPREL64    41      /* Module-relative offset 64 bit */
+#define R_MIPS_TLS_GD          42      /* 16 bit GOT offset for GD */
+#define R_MIPS_TLS_LDM         43      /* 16 bit GOT offset for LDM */
+#define R_MIPS_TLS_DTPREL_HI16 44      /* Module-relative offset, high 16 bits */
+#define R_MIPS_TLS_DTPREL_LO16 45      /* Module-relative offset, low 16 bits */
+#define R_MIPS_TLS_GOTTPREL    46      /* 16 bit GOT offset for IE */
+#define R_MIPS_TLS_TPREL32     47      /* TP-relative offset, 32 bit */
+#define R_MIPS_TLS_TPREL64     48      /* TP-relative offset, 64 bit */
+#define R_MIPS_TLS_TPREL_HI16  49      /* TP-relative offset, high 16 bits */
+#define R_MIPS_TLS_TPREL_LO16  50      /* TP-relative offset, low 16 bits */
+#define R_MIPS_GLOB_DAT                51
+#define R_MIPS_COPY            126
+#define R_MIPS_JUMP_SLOT        127
+/* Keep this the last entry.  */
+#define R_MIPS_NUM             128
+
+/* Legal values for p_type field of Elf32_Phdr.  */
+
+#define PT_MIPS_REGINFO          0x70000000    /* Register usage information. */
+#define PT_MIPS_RTPROC   0x70000001    /* Runtime procedure table. */
+#define PT_MIPS_OPTIONS          0x70000002
+#define PT_MIPS_ABIFLAGS  0x70000003   /* FP mode requirement. */
+
+/* Special program header types.  */
+
+#define PF_MIPS_LOCAL  0x10000000
+
+/* Legal values for d_tag field of Elf32_Dyn.  */
+
+#define DT_MIPS_RLD_VERSION  0x70000001        /* Runtime linker interface version */
+#define DT_MIPS_TIME_STAMP   0x70000002        /* Timestamp */
+#define DT_MIPS_ICHECKSUM    0x70000003        /* Checksum */
+#define DT_MIPS_IVERSION     0x70000004        /* Version string (string tbl index) */
+#define DT_MIPS_FLAGS       0x70000005 /* Flags */
+#define DT_MIPS_BASE_ADDRESS 0x70000006        /* Base address */
+#define DT_MIPS_MSYM        0x70000007
+#define DT_MIPS_CONFLICT     0x70000008        /* Address of CONFLICT section */
+#define DT_MIPS_LIBLIST             0x70000009 /* Address of LIBLIST section */
+#define DT_MIPS_LOCAL_GOTNO  0x7000000a        /* Number of local GOT entries */
+#define DT_MIPS_CONFLICTNO   0x7000000b        /* Number of CONFLICT entries */
+#define DT_MIPS_LIBLISTNO    0x70000010        /* Number of LIBLIST entries */
+#define DT_MIPS_SYMTABNO     0x70000011        /* Number of DYNSYM entries */
+#define DT_MIPS_UNREFEXTNO   0x70000012        /* First external DYNSYM */
+#define DT_MIPS_GOTSYM      0x70000013 /* First GOT entry in DYNSYM */
+#define DT_MIPS_HIPAGENO     0x70000014        /* Number of GOT page table entries */
+#define DT_MIPS_RLD_MAP             0x70000016 /* Address of run time loader map.  */
+#define DT_MIPS_DELTA_CLASS  0x70000017        /* Delta C++ class definition.  */
+#define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
+                                               DT_MIPS_DELTA_CLASS.  */
+#define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
+#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
+                                               DT_MIPS_DELTA_INSTANCE.  */
+#define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
+#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
+                                            DT_MIPS_DELTA_RELOC.  */
+#define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
+                                          relocations refer to.  */
+#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
+                                          DT_MIPS_DELTA_SYM.  */
+#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
+                                            class declaration.  */
+#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
+                                               DT_MIPS_DELTA_CLASSSYM.  */
+#define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
+#define DT_MIPS_PIXIE_INIT   0x70000023
+#define DT_MIPS_SYMBOL_LIB   0x70000024
+#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
+#define DT_MIPS_LOCAL_GOTIDX 0x70000026
+#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
+#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
+#define DT_MIPS_OPTIONS             0x70000029 /* Address of .options.  */
+#define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
+#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
+#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
+#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
+                                                   function stored in GOT.  */
+#define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
+                                          by rld on dlopen() calls.  */
+#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
+#define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
+#define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
+/* The address of .got.plt in an executable using the new non-PIC ABI.  */
+#define DT_MIPS_PLTGOT      0x70000032
+/* The base of the PLT in an executable using the new non-PIC ABI if that
+   PLT is writable.  For a non-writable PLT, this is omitted or has a zero
+   value.  */
+#define DT_MIPS_RWPLT        0x70000034
+/* An alternative description of the classic MIPS RLD_MAP that is usable
+   in a PIE as it stores a relative offset from the address of the tag
+   rather than an absolute address.  */
+#define DT_MIPS_RLD_MAP_REL  0x70000035
+#define DT_MIPS_NUM         0x36
+
+/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
+
+#define RHF_NONE                  0            /* No flags */
+#define RHF_QUICKSTART            (1 << 0)     /* Use quickstart */
+#define RHF_NOTPOT                (1 << 1)     /* Hash size not power of 2 */
+#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)    /* Ignore LD_LIBRARY_PATH */
+#define RHF_NO_MOVE               (1 << 3)
+#define RHF_SGI_ONLY              (1 << 4)
+#define RHF_GUARANTEE_INIT        (1 << 5)
+#define RHF_DELTA_C_PLUS_PLUS     (1 << 6)
+#define RHF_GUARANTEE_START_INIT   (1 << 7)
+#define RHF_PIXIE                 (1 << 8)
+#define RHF_DEFAULT_DELAY_LOAD    (1 << 9)
+#define RHF_REQUICKSTART          (1 << 10)
+#define RHF_REQUICKSTARTED        (1 << 11)
+#define RHF_CORD                  (1 << 12)
+#define RHF_NO_UNRES_UNDEF        (1 << 13)
+#define RHF_RLD_ORDER_SAFE        (1 << 14)
+
+/* Entries found in sections of type SHT_MIPS_LIBLIST.  */
+
+typedef struct
+{
+  Elf32_Word l_name;           /* Name (string table index) */
+  Elf32_Word l_time_stamp;     /* Timestamp */
+  Elf32_Word l_checksum;       /* Checksum */
+  Elf32_Word l_version;                /* Interface version */
+  Elf32_Word l_flags;          /* Flags */
+} Elf32_Lib;
+
+typedef struct
+{
+  Elf64_Word l_name;           /* Name (string table index) */
+  Elf64_Word l_time_stamp;     /* Timestamp */
+  Elf64_Word l_checksum;       /* Checksum */
+  Elf64_Word l_version;                /* Interface version */
+  Elf64_Word l_flags;          /* Flags */
+} Elf64_Lib;
+
+
+/* Legal values for l_flags.  */
+
+#define LL_NONE                  0
+#define LL_EXACT_MATCH   (1 << 0)      /* Require exact match */
+#define LL_IGNORE_INT_VER (1 << 1)     /* Ignore interface version */
+#define LL_REQUIRE_MINOR  (1 << 2)
+#define LL_EXPORTS       (1 << 3)
+#define LL_DELAY_LOAD    (1 << 4)
+#define LL_DELTA         (1 << 5)
+
+/* Entries found in sections of type SHT_MIPS_CONFLICT.  */
+
+typedef Elf32_Addr Elf32_Conflict;
+
+typedef struct
+{
+  /* Version of flags structure.  */
+  Elf32_Half version;
+  /* The level of the ISA: 1-5, 32, 64.  */
+  unsigned char isa_level;
+  /* The revision of ISA: 0 for MIPS V and below, 1-n otherwise.  */
+  unsigned char isa_rev;
+  /* The size of general purpose registers.  */
+  unsigned char gpr_size;
+  /* The size of co-processor 1 registers.  */
+  unsigned char cpr1_size;
+  /* The size of co-processor 2 registers.  */
+  unsigned char cpr2_size;
+  /* The floating-point ABI.  */
+  unsigned char fp_abi;
+  /* Processor-specific extension.  */
+  Elf32_Word isa_ext;
+  /* Mask of ASEs used.  */
+  Elf32_Word ases;
+  /* Mask of general flags.  */
+  Elf32_Word flags1;
+  Elf32_Word flags2;
+} Elf_MIPS_ABIFlags_v0;
+
+/* Values for the register size bytes of an abi flags structure.  */
+
+#define MIPS_AFL_REG_NONE      0x00     /* No registers.  */
+#define MIPS_AFL_REG_32                0x01     /* 32-bit registers.  */
+#define MIPS_AFL_REG_64                0x02     /* 64-bit registers.  */
+#define MIPS_AFL_REG_128       0x03     /* 128-bit registers.  */
+
+/* Masks for the ases word of an ABI flags structure.  */
+
+#define MIPS_AFL_ASE_DSP       0x00000001 /* DSP ASE.  */
+#define MIPS_AFL_ASE_DSPR2     0x00000002 /* DSP R2 ASE.  */
+#define MIPS_AFL_ASE_EVA       0x00000004 /* Enhanced VA Scheme.  */
+#define MIPS_AFL_ASE_MCU       0x00000008 /* MCU (MicroController) ASE.  */
+#define MIPS_AFL_ASE_MDMX      0x00000010 /* MDMX ASE.  */
+#define MIPS_AFL_ASE_MIPS3D    0x00000020 /* MIPS-3D ASE.  */
+#define MIPS_AFL_ASE_MT                0x00000040 /* MT ASE.  */
+#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 /* SmartMIPS ASE.  */
+#define MIPS_AFL_ASE_VIRT      0x00000100 /* VZ ASE.  */
+#define MIPS_AFL_ASE_MSA       0x00000200 /* MSA ASE.  */
+#define MIPS_AFL_ASE_MIPS16    0x00000400 /* MIPS16 ASE.  */
+#define MIPS_AFL_ASE_MICROMIPS 0x00000800 /* MICROMIPS ASE.  */
+#define MIPS_AFL_ASE_XPA       0x00001000 /* XPA ASE.  */
+#define MIPS_AFL_ASE_MASK      0x00001fff /* All ASEs.  */
+
+/* Values for the isa_ext word of an ABI flags structure.  */
+
+#define MIPS_AFL_EXT_XLR         1   /* RMI Xlr instruction.  */
+#define MIPS_AFL_EXT_OCTEON2     2   /* Cavium Networks Octeon2.  */
+#define MIPS_AFL_EXT_OCTEONP     3   /* Cavium Networks OcteonP.  */
+#define MIPS_AFL_EXT_LOONGSON_3A  4   /* Loongson 3A.  */
+#define MIPS_AFL_EXT_OCTEON      5   /* Cavium Networks Octeon.  */
+#define MIPS_AFL_EXT_5900        6   /* MIPS R5900 instruction.  */
+#define MIPS_AFL_EXT_4650        7   /* MIPS R4650 instruction.  */
+#define MIPS_AFL_EXT_4010        8   /* LSI R4010 instruction.  */
+#define MIPS_AFL_EXT_4100        9   /* NEC VR4100 instruction.  */
+#define MIPS_AFL_EXT_3900        10  /* Toshiba R3900 instruction.  */
+#define MIPS_AFL_EXT_10000       11  /* MIPS R10000 instruction.  */
+#define MIPS_AFL_EXT_SB1         12  /* Broadcom SB-1 instruction.  */
+#define MIPS_AFL_EXT_4111        13  /* NEC VR4111/VR4181 instruction.  */
+#define MIPS_AFL_EXT_4120        14  /* NEC VR4120 instruction.  */
+#define MIPS_AFL_EXT_5400        15  /* NEC VR5400 instruction.  */
+#define MIPS_AFL_EXT_5500        16  /* NEC VR5500 instruction.  */
+#define MIPS_AFL_EXT_LOONGSON_2E  17  /* ST Microelectronics Loongson 2E.  */
+#define MIPS_AFL_EXT_LOONGSON_2F  18  /* ST Microelectronics Loongson 2F.  */
+
+/* Masks for the flags1 word of an ABI flags structure.  */
+#define MIPS_AFL_FLAGS1_ODDSPREG  1  /* Uses odd single-precision registers.  */
+
+/* Object attribute values.  */
+enum
+{
+  /* Not tagged or not using any ABIs affected by the differences.  */
+  Val_GNU_MIPS_ABI_FP_ANY = 0,
+  /* Using hard-float -mdouble-float.  */
+  Val_GNU_MIPS_ABI_FP_DOUBLE = 1,
+  /* Using hard-float -msingle-float.  */
+  Val_GNU_MIPS_ABI_FP_SINGLE = 2,
+  /* Using soft-float.  */
+  Val_GNU_MIPS_ABI_FP_SOFT = 3,
+  /* Using -mips32r2 -mfp64.  */
+  Val_GNU_MIPS_ABI_FP_OLD_64 = 4,
+  /* Using -mfpxx.  */
+  Val_GNU_MIPS_ABI_FP_XX = 5,
+  /* Using -mips32r2 -mfp64.  */
+  Val_GNU_MIPS_ABI_FP_64 = 6,
+  /* Using -mips32r2 -mfp64 -mno-odd-spreg.  */
+  Val_GNU_MIPS_ABI_FP_64A = 7,
+  /* Maximum allocated FP ABI value.  */
+  Val_GNU_MIPS_ABI_FP_MAX = 7
+};
+
+/* HPPA specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_PARISC_TRAPNIL      0x00010000 /* Trap nil pointer dereference.  */
+#define EF_PARISC_EXT          0x00020000 /* Program uses arch. extensions. */
+#define EF_PARISC_LSB          0x00040000 /* Program expects little endian. */
+#define EF_PARISC_WIDE         0x00080000 /* Program expects wide mode.  */
+#define EF_PARISC_NO_KABP      0x00100000 /* No kernel assisted branch
+                                             prediction.  */
+#define EF_PARISC_LAZYSWAP     0x00400000 /* Allow lazy swapping.  */
+#define EF_PARISC_ARCH         0x0000ffff /* Architecture version.  */
+
+/* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
+
+#define EFA_PARISC_1_0             0x020b /* PA-RISC 1.0 big-endian.  */
+#define EFA_PARISC_1_1             0x0210 /* PA-RISC 1.1 big-endian.  */
+#define EFA_PARISC_2_0             0x0214 /* PA-RISC 2.0 big-endian.  */
+
+/* Additional section indeces.  */
+
+#define SHN_PARISC_ANSI_COMMON 0xff00     /* Section for tenatively declared
+                                             symbols in ANSI C.  */
+#define SHN_PARISC_HUGE_COMMON 0xff01     /* Common blocks in huge model.  */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_PARISC_EXT         0x70000000 /* Contains product specific ext. */
+#define SHT_PARISC_UNWIND      0x70000001 /* Unwind information.  */
+#define SHT_PARISC_DOC         0x70000002 /* Debug info for optimized code. */
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_PARISC_SHORT       0x20000000 /* Section with short addressing. */
+#define SHF_PARISC_HUGE                0x40000000 /* Section far from gp.  */
+#define SHF_PARISC_SBP         0x80000000 /* Static branch prediction code. */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_PARISC_MILLICODE   13      /* Millicode function entry point.  */
+
+#define STT_HP_OPAQUE          (STT_LOOS + 0x1)
+#define STT_HP_STUB            (STT_LOOS + 0x2)
+
+/* HPPA relocs.  */
+
+#define R_PARISC_NONE          0       /* No reloc.  */
+#define R_PARISC_DIR32         1       /* Direct 32-bit reference.  */
+#define R_PARISC_DIR21L                2       /* Left 21 bits of eff. address.  */
+#define R_PARISC_DIR17R                3       /* Right 17 bits of eff. address.  */
+#define R_PARISC_DIR17F                4       /* 17 bits of eff. address.  */
+#define R_PARISC_DIR14R                6       /* Right 14 bits of eff. address.  */
+#define R_PARISC_PCREL32       9       /* 32-bit rel. address.  */
+#define R_PARISC_PCREL21L      10      /* Left 21 bits of rel. address.  */
+#define R_PARISC_PCREL17R      11      /* Right 17 bits of rel. address.  */
+#define R_PARISC_PCREL17F      12      /* 17 bits of rel. address.  */
+#define R_PARISC_PCREL14R      14      /* Right 14 bits of rel. address.  */
+#define R_PARISC_DPREL21L      18      /* Left 21 bits of rel. address.  */
+#define R_PARISC_DPREL14R      22      /* Right 14 bits of rel. address.  */
+#define R_PARISC_GPREL21L      26      /* GP-relative, left 21 bits.  */
+#define R_PARISC_GPREL14R      30      /* GP-relative, right 14 bits.  */
+#define R_PARISC_LTOFF21L      34      /* LT-relative, left 21 bits.  */
+#define R_PARISC_LTOFF14R      38      /* LT-relative, right 14 bits.  */
+#define R_PARISC_SECREL32      41      /* 32 bits section rel. address.  */
+#define R_PARISC_SEGBASE       48      /* No relocation, set segment base.  */
+#define R_PARISC_SEGREL32      49      /* 32 bits segment rel. address.  */
+#define R_PARISC_PLTOFF21L     50      /* PLT rel. address, left 21 bits.  */
+#define R_PARISC_PLTOFF14R     54      /* PLT rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_FPTR32  57      /* 32 bits LT-rel. function pointer. */
+#define R_PARISC_LTOFF_FPTR21L 58      /* LT-rel. fct ptr, left 21 bits. */
+#define R_PARISC_LTOFF_FPTR14R 62      /* LT-rel. fct ptr, right 14 bits. */
+#define R_PARISC_FPTR64                64      /* 64 bits function address.  */
+#define R_PARISC_PLABEL32      65      /* 32 bits function address.  */
+#define R_PARISC_PLABEL21L     66      /* Left 21 bits of fdesc address.  */
+#define R_PARISC_PLABEL14R     70      /* Right 14 bits of fdesc address.  */
+#define R_PARISC_PCREL64       72      /* 64 bits PC-rel. address.  */
+#define R_PARISC_PCREL22F      74      /* 22 bits PC-rel. address.  */
+#define R_PARISC_PCREL14WR     75      /* PC-rel. address, right 14 bits.  */
+#define R_PARISC_PCREL14DR     76      /* PC rel. address, right 14 bits.  */
+#define R_PARISC_PCREL16F      77      /* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16WF     78      /* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16DF     79      /* 16 bits PC-rel. address.  */
+#define R_PARISC_DIR64         80      /* 64 bits of eff. address.  */
+#define R_PARISC_DIR14WR       83      /* 14 bits of eff. address.  */
+#define R_PARISC_DIR14DR       84      /* 14 bits of eff. address.  */
+#define R_PARISC_DIR16F                85      /* 16 bits of eff. address.  */
+#define R_PARISC_DIR16WF       86      /* 16 bits of eff. address.  */
+#define R_PARISC_DIR16DF       87      /* 16 bits of eff. address.  */
+#define R_PARISC_GPREL64       88      /* 64 bits of GP-rel. address.  */
+#define R_PARISC_GPREL14WR     91      /* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL14DR     92      /* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL16F      93      /* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16WF     94      /* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16DF     95      /* 16 bits GP-rel. address.  */
+#define R_PARISC_LTOFF64       96      /* 64 bits LT-rel. address.  */
+#define R_PARISC_LTOFF14WR     99      /* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF14DR     100     /* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF16F      101     /* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16WF     102     /* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16DF     103     /* 16 bits LT-rel. address.  */
+#define R_PARISC_SECREL64      104     /* 64 bits section rel. address.  */
+#define R_PARISC_SEGREL64      112     /* 64 bits segment rel. address.  */
+#define R_PARISC_PLTOFF14WR    115     /* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF14DR    116     /* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF16F     117     /* 16 bits LT-rel. address.  */
+#define R_PARISC_PLTOFF16WF    118     /* 16 bits PLT-rel. address.  */
+#define R_PARISC_PLTOFF16DF    119     /* 16 bits PLT-rel. address.  */
+#define R_PARISC_LTOFF_FPTR64  120     /* 64 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR14WR        123     /* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR14DR        124     /* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR16F 125     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16WF        126     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16DF        127     /* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LORESERVE     128
+#define R_PARISC_COPY          128     /* Copy relocation.  */
+#define R_PARISC_IPLT          129     /* Dynamic reloc, imported PLT */
+#define R_PARISC_EPLT          130     /* Dynamic reloc, exported PLT */
+#define R_PARISC_TPREL32       153     /* 32 bits TP-rel. address.  */
+#define R_PARISC_TPREL21L      154     /* TP-rel. address, left 21 bits.  */
+#define R_PARISC_TPREL14R      158     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_TP21L   162     /* LT-TP-rel. address, left 21 bits. */
+#define R_PARISC_LTOFF_TP14R   166     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14F   167     /* 14 bits LT-TP-rel. address.  */
+#define R_PARISC_TPREL64       216     /* 64 bits TP-rel. address.  */
+#define R_PARISC_TPREL14WR     219     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL14DR     220     /* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL16F      221     /* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16WF     222     /* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16DF     223     /* 16 bits TP-rel. address.  */
+#define R_PARISC_LTOFF_TP64    224     /* 64 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP14WR  227     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14DR  228     /* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP16F   229     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16WF  230     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16DF  231     /* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_GNU_VTENTRY   232
+#define R_PARISC_GNU_VTINHERIT 233
+#define R_PARISC_TLS_GD21L     234     /* GD 21-bit left.  */
+#define R_PARISC_TLS_GD14R     235     /* GD 14-bit right.  */
+#define R_PARISC_TLS_GDCALL    236     /* GD call to __t_g_a.  */
+#define R_PARISC_TLS_LDM21L    237     /* LD module 21-bit left.  */
+#define R_PARISC_TLS_LDM14R    238     /* LD module 14-bit right.  */
+#define R_PARISC_TLS_LDMCALL   239     /* LD module call to __t_g_a.  */
+#define R_PARISC_TLS_LDO21L    240     /* LD offset 21-bit left.  */
+#define R_PARISC_TLS_LDO14R    241     /* LD offset 14-bit right.  */
+#define R_PARISC_TLS_DTPMOD32  242     /* DTP module 32-bit.  */
+#define R_PARISC_TLS_DTPMOD64  243     /* DTP module 64-bit.  */
+#define R_PARISC_TLS_DTPOFF32  244     /* DTP offset 32-bit.  */
+#define R_PARISC_TLS_DTPOFF64  245     /* DTP offset 32-bit.  */
+#define R_PARISC_TLS_LE21L     R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R     R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L     R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R     R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32   R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64   R_PARISC_TPREL64
+#define R_PARISC_HIRESERVE     255
+
+/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PT_HP_TLS              (PT_LOOS + 0x0)
+#define PT_HP_CORE_NONE                (PT_LOOS + 0x1)
+#define PT_HP_CORE_VERSION     (PT_LOOS + 0x2)
+#define PT_HP_CORE_KERNEL      (PT_LOOS + 0x3)
+#define PT_HP_CORE_COMM                (PT_LOOS + 0x4)
+#define PT_HP_CORE_PROC                (PT_LOOS + 0x5)
+#define PT_HP_CORE_LOADABLE    (PT_LOOS + 0x6)
+#define PT_HP_CORE_STACK       (PT_LOOS + 0x7)
+#define PT_HP_CORE_SHM         (PT_LOOS + 0x8)
+#define PT_HP_CORE_MMF         (PT_LOOS + 0x9)
+#define PT_HP_PARALLEL         (PT_LOOS + 0x10)
+#define PT_HP_FASTBIND         (PT_LOOS + 0x11)
+#define PT_HP_OPT_ANNOT                (PT_LOOS + 0x12)
+#define PT_HP_HSL_ANNOT                (PT_LOOS + 0x13)
+#define PT_HP_STACK            (PT_LOOS + 0x14)
+
+#define PT_PARISC_ARCHEXT      0x70000000
+#define PT_PARISC_UNWIND       0x70000001
+
+/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PF_PARISC_SBP          0x08000000
+
+#define PF_HP_PAGE_SIZE                0x00100000
+#define PF_HP_FAR_SHARED       0x00200000
+#define PF_HP_NEAR_SHARED      0x00400000
+#define PF_HP_CODE             0x01000000
+#define PF_HP_MODIFY           0x02000000
+#define PF_HP_LAZYSWAP         0x04000000
+#define PF_HP_SBP              0x08000000
+
+
+/* Alpha specific definitions.  */
+
+/* Legal values for e_flags field of Elf64_Ehdr.  */
+
+#define EF_ALPHA_32BIT         1       /* All addresses must be < 2GB.  */
+#define EF_ALPHA_CANRELAX      2       /* Relocations for relaxing exist.  */
+
+/* Legal values for sh_type field of Elf64_Shdr.  */
+
+/* These two are primerily concerned with ECOFF debugging info.  */
+#define SHT_ALPHA_DEBUG                0x70000001
+#define SHT_ALPHA_REGINFO      0x70000002
+
+/* Legal values for sh_flags field of Elf64_Shdr.  */
+
+#define SHF_ALPHA_GPREL                0x10000000
+
+/* Legal values for st_other field of Elf64_Sym.  */
+#define STO_ALPHA_NOPV         0x80    /* No PV required.  */
+#define STO_ALPHA_STD_GPLOAD   0x88    /* PV only used for initial ldgp.  */
+
+/* Alpha relocs.  */
+
+#define R_ALPHA_NONE           0       /* No reloc */
+#define R_ALPHA_REFLONG                1       /* Direct 32 bit */
+#define R_ALPHA_REFQUAD                2       /* Direct 64 bit */
+#define R_ALPHA_GPREL32                3       /* GP relative 32 bit */
+#define R_ALPHA_LITERAL                4       /* GP relative 16 bit w/optimization */
+#define R_ALPHA_LITUSE         5       /* Optimization hint for LITERAL */
+#define R_ALPHA_GPDISP         6       /* Add displacement to GP */
+#define R_ALPHA_BRADDR         7       /* PC+4 relative 23 bit shifted */
+#define R_ALPHA_HINT           8       /* PC+4 relative 16 bit shifted */
+#define R_ALPHA_SREL16         9       /* PC relative 16 bit */
+#define R_ALPHA_SREL32         10      /* PC relative 32 bit */
+#define R_ALPHA_SREL64         11      /* PC relative 64 bit */
+#define R_ALPHA_GPRELHIGH      17      /* GP relative 32 bit, high 16 bits */
+#define R_ALPHA_GPRELLOW       18      /* GP relative 32 bit, low 16 bits */
+#define R_ALPHA_GPREL16                19      /* GP relative 16 bit */
+#define R_ALPHA_COPY           24      /* Copy symbol at runtime */
+#define R_ALPHA_GLOB_DAT       25      /* Create GOT entry */
+#define R_ALPHA_JMP_SLOT       26      /* Create PLT entry */
+#define R_ALPHA_RELATIVE       27      /* Adjust by program base */
+#define R_ALPHA_TLS_GD_HI      28
+#define R_ALPHA_TLSGD          29
+#define R_ALPHA_TLS_LDM                30
+#define R_ALPHA_DTPMOD64       31
+#define R_ALPHA_GOTDTPREL      32
+#define R_ALPHA_DTPREL64       33
+#define R_ALPHA_DTPRELHI       34
+#define R_ALPHA_DTPRELLO       35
+#define R_ALPHA_DTPREL16       36
+#define R_ALPHA_GOTTPREL       37
+#define R_ALPHA_TPREL64                38
+#define R_ALPHA_TPRELHI                39
+#define R_ALPHA_TPRELLO                40
+#define R_ALPHA_TPREL16                41
+/* Keep this the last entry.  */
+#define R_ALPHA_NUM            46
+
+/* Magic values of the LITUSE relocation addend.  */
+#define LITUSE_ALPHA_ADDR      0
+#define LITUSE_ALPHA_BASE      1
+#define LITUSE_ALPHA_BYTOFF    2
+#define LITUSE_ALPHA_JSR       3
+#define LITUSE_ALPHA_TLS_GD    4
+#define LITUSE_ALPHA_TLS_LDM   5
+
+/* Legal values for d_tag of Elf64_Dyn.  */
+#define DT_ALPHA_PLTRO         (DT_LOPROC + 0)
+#define DT_ALPHA_NUM           1
+
+/* PowerPC specific declarations */
+
+/* Values for Elf32/64_Ehdr.e_flags.  */
+#define EF_PPC_EMB             0x80000000      /* PowerPC embedded flag */
+
+/* Cygnus local bits below */
+#define EF_PPC_RELOCATABLE     0x00010000      /* PowerPC -mrelocatable flag*/
+#define EF_PPC_RELOCATABLE_LIB 0x00008000      /* PowerPC -mrelocatable-lib
+                                                  flag */
+
+/* PowerPC relocations defined by the ABIs */
+#define R_PPC_NONE             0
+#define R_PPC_ADDR32           1       /* 32bit absolute address */
+#define R_PPC_ADDR24           2       /* 26bit address, 2 bits ignored.  */
+#define R_PPC_ADDR16           3       /* 16bit absolute address */
+#define R_PPC_ADDR16_LO                4       /* lower 16bit of absolute address */
+#define R_PPC_ADDR16_HI                5       /* high 16bit of absolute address */
+#define R_PPC_ADDR16_HA                6       /* adjusted high 16bit */
+#define R_PPC_ADDR14           7       /* 16bit address, 2 bits ignored */
+#define R_PPC_ADDR14_BRTAKEN   8
+#define R_PPC_ADDR14_BRNTAKEN  9
+#define R_PPC_REL24            10      /* PC relative 26 bit */
+#define R_PPC_REL14            11      /* PC relative 16 bit */
+#define R_PPC_REL14_BRTAKEN    12
+#define R_PPC_REL14_BRNTAKEN   13
+#define R_PPC_GOT16            14
+#define R_PPC_GOT16_LO         15
+#define R_PPC_GOT16_HI         16
+#define R_PPC_GOT16_HA         17
+#define R_PPC_PLTREL24         18
+#define R_PPC_COPY             19
+#define R_PPC_GLOB_DAT         20
+#define R_PPC_JMP_SLOT         21
+#define R_PPC_RELATIVE         22
+#define R_PPC_LOCAL24PC                23
+#define R_PPC_UADDR32          24
+#define R_PPC_UADDR16          25
+#define R_PPC_REL32            26
+#define R_PPC_PLT32            27
+#define R_PPC_PLTREL32         28
+#define R_PPC_PLT16_LO         29
+#define R_PPC_PLT16_HI         30
+#define R_PPC_PLT16_HA         31
+#define R_PPC_SDAREL16         32
+#define R_PPC_SECTOFF          33
+#define R_PPC_SECTOFF_LO       34
+#define R_PPC_SECTOFF_HI       35
+#define R_PPC_SECTOFF_HA       36
+
+/* PowerPC relocations defined for the TLS access ABI.  */
+#define R_PPC_TLS              67 /* none      (sym+add)@tls */
+#define R_PPC_DTPMOD32         68 /* word32    (sym+add)@dtpmod */
+#define R_PPC_TPREL16          69 /* half16*   (sym+add)@tprel */
+#define R_PPC_TPREL16_LO       70 /* half16    (sym+add)@tprel@l */
+#define R_PPC_TPREL16_HI       71 /* half16    (sym+add)@tprel@h */
+#define R_PPC_TPREL16_HA       72 /* half16    (sym+add)@tprel@ha */
+#define R_PPC_TPREL32          73 /* word32    (sym+add)@tprel */
+#define R_PPC_DTPREL16         74 /* half16*   (sym+add)@dtprel */
+#define R_PPC_DTPREL16_LO      75 /* half16    (sym+add)@dtprel@l */
+#define R_PPC_DTPREL16_HI      76 /* half16    (sym+add)@dtprel@h */
+#define R_PPC_DTPREL16_HA      77 /* half16    (sym+add)@dtprel@ha */
+#define R_PPC_DTPREL32         78 /* word32    (sym+add)@dtprel */
+#define R_PPC_GOT_TLSGD16      79 /* half16*   (sym+add)@got@tlsgd */
+#define R_PPC_GOT_TLSGD16_LO   80 /* half16    (sym+add)@got@tlsgd@l */
+#define R_PPC_GOT_TLSGD16_HI   81 /* half16    (sym+add)@got@tlsgd@h */
+#define R_PPC_GOT_TLSGD16_HA   82 /* half16    (sym+add)@got@tlsgd@ha */
+#define R_PPC_GOT_TLSLD16      83 /* half16*   (sym+add)@got@tlsld */
+#define R_PPC_GOT_TLSLD16_LO   84 /* half16    (sym+add)@got@tlsld@l */
+#define R_PPC_GOT_TLSLD16_HI   85 /* half16    (sym+add)@got@tlsld@h */
+#define R_PPC_GOT_TLSLD16_HA   86 /* half16    (sym+add)@got@tlsld@ha */
+#define R_PPC_GOT_TPREL16      87 /* half16*   (sym+add)@got@tprel */
+#define R_PPC_GOT_TPREL16_LO   88 /* half16    (sym+add)@got@tprel@l */
+#define R_PPC_GOT_TPREL16_HI   89 /* half16    (sym+add)@got@tprel@h */
+#define R_PPC_GOT_TPREL16_HA   90 /* half16    (sym+add)@got@tprel@ha */
+#define R_PPC_GOT_DTPREL16     91 /* half16*   (sym+add)@got@dtprel */
+#define R_PPC_GOT_DTPREL16_LO  92 /* half16*   (sym+add)@got@dtprel@l */
+#define R_PPC_GOT_DTPREL16_HI  93 /* half16*   (sym+add)@got@dtprel@h */
+#define R_PPC_GOT_DTPREL16_HA  94 /* half16*   (sym+add)@got@dtprel@ha */
+#define R_PPC_TLSGD            95 /* none      (sym+add)@tlsgd */
+#define R_PPC_TLSLD            96 /* none      (sym+add)@tlsld */
+
+/* The remaining relocs are from the Embedded ELF ABI, and are not
+   in the SVR4 ELF ABI.  */
+#define R_PPC_EMB_NADDR32      101
+#define R_PPC_EMB_NADDR16      102
+#define R_PPC_EMB_NADDR16_LO   103
+#define R_PPC_EMB_NADDR16_HI   104
+#define R_PPC_EMB_NADDR16_HA   105
+#define R_PPC_EMB_SDAI16       106
+#define R_PPC_EMB_SDA2I16      107
+#define R_PPC_EMB_SDA2REL      108
+#define R_PPC_EMB_SDA21                109     /* 16 bit offset in SDA */
+#define R_PPC_EMB_MRKREF       110
+#define R_PPC_EMB_RELSEC16     111
+#define R_PPC_EMB_RELST_LO     112
+#define R_PPC_EMB_RELST_HI     113
+#define R_PPC_EMB_RELST_HA     114
+#define R_PPC_EMB_BIT_FLD      115
+#define R_PPC_EMB_RELSDA       116     /* 16 bit relative offset in SDA */
+
+/* Diab tool relocations.  */
+#define R_PPC_DIAB_SDA21_LO    180     /* like EMB_SDA21, but lower 16 bit */
+#define R_PPC_DIAB_SDA21_HI    181     /* like EMB_SDA21, but high 16 bit */
+#define R_PPC_DIAB_SDA21_HA    182     /* like EMB_SDA21, adjusted high 16 */
+#define R_PPC_DIAB_RELSDA_LO   183     /* like EMB_RELSDA, but lower 16 bit */
+#define R_PPC_DIAB_RELSDA_HI   184     /* like EMB_RELSDA, but high 16 bit */
+#define R_PPC_DIAB_RELSDA_HA   185     /* like EMB_RELSDA, adjusted high 16 */
+
+/* GNU extension to support local ifunc.  */
+#define R_PPC_IRELATIVE                248
+
+/* GNU relocs used in PIC code sequences.  */
+#define R_PPC_REL16            249     /* half16   (sym+add-.) */
+#define R_PPC_REL16_LO         250     /* half16   (sym+add-.)@l */
+#define R_PPC_REL16_HI         251     /* half16   (sym+add-.)@h */
+#define R_PPC_REL16_HA         252     /* half16   (sym+add-.)@ha */
+
+/* This is a phony reloc to handle any old fashioned TOC16 references
+   that may still be in object files.  */
+#define R_PPC_TOC16            255
+
+/* PowerPC specific values for the Dyn d_tag field.  */
+#define DT_PPC_GOT             (DT_LOPROC + 0)
+#define DT_PPC_OPT             (DT_LOPROC + 1)
+#define DT_PPC_NUM             2
+
+/* PowerPC specific values for the DT_PPC_OPT Dyn entry.  */
+#define PPC_OPT_TLS            1
+
+/* PowerPC64 relocations defined by the ABIs */
+#define R_PPC64_NONE           R_PPC_NONE
+#define R_PPC64_ADDR32         R_PPC_ADDR32 /* 32bit absolute address */
+#define R_PPC64_ADDR24         R_PPC_ADDR24 /* 26bit address, word aligned */
+#define R_PPC64_ADDR16         R_PPC_ADDR16 /* 16bit absolute address */
+#define R_PPC64_ADDR16_LO      R_PPC_ADDR16_LO /* lower 16bits of address */
+#define R_PPC64_ADDR16_HI      R_PPC_ADDR16_HI /* high 16bits of address. */
+#define R_PPC64_ADDR16_HA      R_PPC_ADDR16_HA /* adjusted high 16bits.  */
+#define R_PPC64_ADDR14         R_PPC_ADDR14 /* 16bit address, word aligned */
+#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
+#define R_PPC64_ADDR14_BRNTAKEN        R_PPC_ADDR14_BRNTAKEN
+#define R_PPC64_REL24          R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
+#define R_PPC64_REL14          R_PPC_REL14 /* PC relative 16 bit */
+#define R_PPC64_REL14_BRTAKEN  R_PPC_REL14_BRTAKEN
+#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
+#define R_PPC64_GOT16          R_PPC_GOT16
+#define R_PPC64_GOT16_LO       R_PPC_GOT16_LO
+#define R_PPC64_GOT16_HI       R_PPC_GOT16_HI
+#define R_PPC64_GOT16_HA       R_PPC_GOT16_HA
+
+#define R_PPC64_COPY           R_PPC_COPY
+#define R_PPC64_GLOB_DAT       R_PPC_GLOB_DAT
+#define R_PPC64_JMP_SLOT       R_PPC_JMP_SLOT
+#define R_PPC64_RELATIVE       R_PPC_RELATIVE
+
+#define R_PPC64_UADDR32                R_PPC_UADDR32
+#define R_PPC64_UADDR16                R_PPC_UADDR16
+#define R_PPC64_REL32          R_PPC_REL32
+#define R_PPC64_PLT32          R_PPC_PLT32
+#define R_PPC64_PLTREL32       R_PPC_PLTREL32
+#define R_PPC64_PLT16_LO       R_PPC_PLT16_LO
+#define R_PPC64_PLT16_HI       R_PPC_PLT16_HI
+#define R_PPC64_PLT16_HA       R_PPC_PLT16_HA
+
+#define R_PPC64_SECTOFF                R_PPC_SECTOFF
+#define R_PPC64_SECTOFF_LO     R_PPC_SECTOFF_LO
+#define R_PPC64_SECTOFF_HI     R_PPC_SECTOFF_HI
+#define R_PPC64_SECTOFF_HA     R_PPC_SECTOFF_HA
+#define R_PPC64_ADDR30         37 /* word30 (S + A - P) >> 2 */
+#define R_PPC64_ADDR64         38 /* doubleword64 S + A */
+#define R_PPC64_ADDR16_HIGHER  39 /* half16 #higher(S + A) */
+#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */
+#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */
+#define R_PPC64_ADDR16_HIGHESTA        42 /* half16 #highesta(S + A) */
+#define R_PPC64_UADDR64                43 /* doubleword64 S + A */
+#define R_PPC64_REL64          44 /* doubleword64 S + A - P */
+#define R_PPC64_PLT64          45 /* doubleword64 L + A */
+#define R_PPC64_PLTREL64       46 /* doubleword64 L + A - P */
+#define R_PPC64_TOC16          47 /* half16* S + A - .TOC */
+#define R_PPC64_TOC16_LO       48 /* half16 #lo(S + A - .TOC.) */
+#define R_PPC64_TOC16_HI       49 /* half16 #hi(S + A - .TOC.) */
+#define R_PPC64_TOC16_HA       50 /* half16 #ha(S + A - .TOC.) */
+#define R_PPC64_TOC            51 /* doubleword64 .TOC */
+#define R_PPC64_PLTGOT16       52 /* half16* M + A */
+#define R_PPC64_PLTGOT16_LO    53 /* half16 #lo(M + A) */
+#define R_PPC64_PLTGOT16_HI    54 /* half16 #hi(M + A) */
+#define R_PPC64_PLTGOT16_HA    55 /* half16 #ha(M + A) */
+
+#define R_PPC64_ADDR16_DS      56 /* half16ds* (S + A) >> 2 */
+#define R_PPC64_ADDR16_LO_DS   57 /* half16ds  #lo(S + A) >> 2 */
+#define R_PPC64_GOT16_DS       58 /* half16ds* (G + A) >> 2 */
+#define R_PPC64_GOT16_LO_DS    59 /* half16ds  #lo(G + A) >> 2 */
+#define R_PPC64_PLT16_LO_DS    60 /* half16ds  #lo(L + A) >> 2 */
+#define R_PPC64_SECTOFF_DS     61 /* half16ds* (R + A) >> 2 */
+#define R_PPC64_SECTOFF_LO_DS  62 /* half16ds  #lo(R + A) >> 2 */
+#define R_PPC64_TOC16_DS       63 /* half16ds* (S + A - .TOC.) >> 2 */
+#define R_PPC64_TOC16_LO_DS    64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
+#define R_PPC64_PLTGOT16_DS    65 /* half16ds* (M + A) >> 2 */
+#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds  #lo(M + A) >> 2 */
+
+/* PowerPC64 relocations defined for the TLS access ABI.  */
+#define R_PPC64_TLS            67 /* none      (sym+add)@tls */
+#define R_PPC64_DTPMOD64       68 /* doubleword64 (sym+add)@dtpmod */
+#define R_PPC64_TPREL16                69 /* half16*   (sym+add)@tprel */
+#define R_PPC64_TPREL16_LO     70 /* half16    (sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HI     71 /* half16    (sym+add)@tprel@h */
+#define R_PPC64_TPREL16_HA     72 /* half16    (sym+add)@tprel@ha */
+#define R_PPC64_TPREL64                73 /* doubleword64 (sym+add)@tprel */
+#define R_PPC64_DTPREL16       74 /* half16*   (sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO    75 /* half16    (sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HI    76 /* half16    (sym+add)@dtprel@h */
+#define R_PPC64_DTPREL16_HA    77 /* half16    (sym+add)@dtprel@ha */
+#define R_PPC64_DTPREL64       78 /* doubleword64 (sym+add)@dtprel */
+#define R_PPC64_GOT_TLSGD16    79 /* half16*   (sym+add)@got@tlsgd */
+#define R_PPC64_GOT_TLSGD16_LO 80 /* half16    (sym+add)@got@tlsgd@l */
+#define R_PPC64_GOT_TLSGD16_HI 81 /* half16    (sym+add)@got@tlsgd@h */
+#define R_PPC64_GOT_TLSGD16_HA 82 /* half16    (sym+add)@got@tlsgd@ha */
+#define R_PPC64_GOT_TLSLD16    83 /* half16*   (sym+add)@got@tlsld */
+#define R_PPC64_GOT_TLSLD16_LO 84 /* half16    (sym+add)@got@tlsld@l */
+#define R_PPC64_GOT_TLSLD16_HI 85 /* half16    (sym+add)@got@tlsld@h */
+#define R_PPC64_GOT_TLSLD16_HA 86 /* half16    (sym+add)@got@tlsld@ha */
+#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */
+#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
+#define R_PPC64_GOT_TPREL16_HI 89 /* half16    (sym+add)@got@tprel@h */
+#define R_PPC64_GOT_TPREL16_HA 90 /* half16    (sym+add)@got@tprel@ha */
+#define R_PPC64_GOT_DTPREL16_DS        91 /* half16ds* (sym+add)@got@dtprel */
+#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
+#define R_PPC64_GOT_DTPREL16_HI        93 /* half16    (sym+add)@got@dtprel@h */
+#define R_PPC64_GOT_DTPREL16_HA        94 /* half16    (sym+add)@got@dtprel@ha */
+#define R_PPC64_TPREL16_DS     95 /* half16ds* (sym+add)@tprel */
+#define R_PPC64_TPREL16_LO_DS  96 /* half16ds  (sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HIGHER 97 /* half16    (sym+add)@tprel@higher */
+#define R_PPC64_TPREL16_HIGHERA        98 /* half16    (sym+add)@tprel@highera */
+#define R_PPC64_TPREL16_HIGHEST        99 /* half16    (sym+add)@tprel@highest */
+#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */
+#define R_PPC64_DTPREL16_DS    101 /* half16ds* (sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HIGHER        103 /* half16   (sym+add)@dtprel@higher */
+#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
+#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
+#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16        (sym+add)@dtprel@highesta */
+#define R_PPC64_TLSGD          107 /* none     (sym+add)@tlsgd */
+#define R_PPC64_TLSLD          108 /* none     (sym+add)@tlsld */
+#define R_PPC64_TOCSAVE                109 /* none */
+
+/* Added when HA and HI relocs were changed to report overflows.  */
+#define R_PPC64_ADDR16_HIGH    110
+#define R_PPC64_ADDR16_HIGHA   111
+#define R_PPC64_TPREL16_HIGH   112
+#define R_PPC64_TPREL16_HIGHA  113
+#define R_PPC64_DTPREL16_HIGH  114
+#define R_PPC64_DTPREL16_HIGHA 115
+
+/* GNU extension to support local ifunc.  */
+#define R_PPC64_JMP_IREL       247
+#define R_PPC64_IRELATIVE      248
+#define R_PPC64_REL16          249     /* half16   (sym+add-.) */
+#define R_PPC64_REL16_LO       250     /* half16   (sym+add-.)@l */
+#define R_PPC64_REL16_HI       251     /* half16   (sym+add-.)@h */
+#define R_PPC64_REL16_HA       252     /* half16   (sym+add-.)@ha */
+
+/* e_flags bits specifying ABI.
+   1 for original function descriptor using ABI,
+   2 for revised ABI without function descriptors,
+   0 for unspecified or not using any features affected by the differences.  */
+#define EF_PPC64_ABI   3
+
+/* PowerPC64 specific values for the Dyn d_tag field.  */
+#define DT_PPC64_GLINK  (DT_LOPROC + 0)
+#define DT_PPC64_OPD   (DT_LOPROC + 1)
+#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
+#define DT_PPC64_OPT   (DT_LOPROC + 3)
+#define DT_PPC64_NUM    4
+
+/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry.  */
+#define PPC64_OPT_TLS          1
+#define PPC64_OPT_MULTI_TOC    2
+
+/* PowerPC64 specific values for the Elf64_Sym st_other field.  */
+#define STO_PPC64_LOCAL_BIT    5
+#define STO_PPC64_LOCAL_MASK   (7 << STO_PPC64_LOCAL_BIT)
+#define PPC64_LOCAL_ENTRY_OFFSET(other)                                \
+ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
+
+
+/* ARM specific declarations */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_ARM_RELEXEC         0x01
+#define EF_ARM_HASENTRY                0x02
+#define EF_ARM_INTERWORK       0x04
+#define EF_ARM_APCS_26         0x08
+#define EF_ARM_APCS_FLOAT      0x10
+#define EF_ARM_PIC             0x20
+#define EF_ARM_ALIGN8          0x40 /* 8-bit structure alignment is in use */
+#define EF_ARM_NEW_ABI         0x80
+#define EF_ARM_OLD_ABI         0x100
+#define EF_ARM_SOFT_FLOAT      0x200
+#define EF_ARM_VFP_FLOAT       0x400
+#define EF_ARM_MAVERICK_FLOAT  0x800
+
+#define EF_ARM_ABI_FLOAT_SOFT  0x200   /* NB conflicts with EF_ARM_SOFT_FLOAT */
+#define EF_ARM_ABI_FLOAT_HARD  0x400   /* NB conflicts with EF_ARM_VFP_FLOAT */
+
+
+/* Other constants defined in the ARM ELF spec. version B-01.  */
+/* NB. These conflict with values defined above.  */
+#define EF_ARM_SYMSARESORTED   0x04
+#define EF_ARM_DYNSYMSUSESEGIDX        0x08
+#define EF_ARM_MAPSYMSFIRST    0x10
+#define EF_ARM_EABIMASK                0XFF000000
+
+/* Constants defined in AAELF.  */
+#define EF_ARM_BE8         0x00800000
+#define EF_ARM_LE8         0x00400000
+
+#define EF_ARM_EABI_VERSION(flags)     ((flags) & EF_ARM_EABIMASK)
+#define EF_ARM_EABI_UNKNOWN    0x00000000
+#define EF_ARM_EABI_VER1       0x01000000
+#define EF_ARM_EABI_VER2       0x02000000
+#define EF_ARM_EABI_VER3       0x03000000
+#define EF_ARM_EABI_VER4       0x04000000
+#define EF_ARM_EABI_VER5       0x05000000
+
+/* Additional symbol types for Thumb.  */
+#define STT_ARM_TFUNC          STT_LOPROC /* A Thumb function.  */
+#define STT_ARM_16BIT          STT_HIPROC /* A Thumb label.  */
+
+/* ARM-specific values for sh_flags */
+#define SHF_ARM_ENTRYSECT      0x10000000 /* Section contains an entry point */
+#define SHF_ARM_COMDEF         0x80000000 /* Section may be multiply defined
+                                             in the input to a link step.  */
+
+/* ARM-specific program header flags */
+#define PF_ARM_SB              0x10000000 /* Segment contains the location
+                                             addressed by the static base. */
+#define PF_ARM_PI              0x20000000 /* Position-independent segment.  */
+#define PF_ARM_ABS             0x40000000 /* Absolute segment.  */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_ARM_EXIDX           (PT_LOPROC + 1) /* ARM unwind segment.  */
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_ARM_EXIDX          (SHT_LOPROC + 1) /* ARM unwind section.  */
+#define SHT_ARM_PREEMPTMAP     (SHT_LOPROC + 2) /* Preemption details.  */
+#define SHT_ARM_ATTRIBUTES     (SHT_LOPROC + 3) /* ARM attributes section.  */
+
+
+/* AArch64 relocs.  */
+
+#define R_AARCH64_NONE            0    /* No relocation.  */
+
+/* ILP32 AArch64 relocs.  */
+#define R_AARCH64_P32_ABS32              1     /* Direct 32 bit.  */
+#define R_AARCH64_P32_COPY             180     /* Copy symbol at runtime.  */
+#define R_AARCH64_P32_GLOB_DAT         181     /* Create GOT entry.  */
+#define R_AARCH64_P32_JUMP_SLOT                182     /* Create PLT entry.  */
+#define R_AARCH64_P32_RELATIVE         183     /* Adjust by program base.  */
+#define R_AARCH64_P32_TLS_DTPMOD       184     /* Module number, 32 bit.  */
+#define R_AARCH64_P32_TLS_DTPREL       185     /* Module-relative offset, 32 bit.  */
+#define R_AARCH64_P32_TLS_TPREL                186     /* TP-relative offset, 32 bit.  */
+#define R_AARCH64_P32_TLSDESC          187     /* TLS Descriptor.  */
+#define R_AARCH64_P32_IRELATIVE                188     /* STT_GNU_IFUNC relocation. */
+
+/* LP64 AArch64 relocs.  */
+#define R_AARCH64_ABS64         257    /* Direct 64 bit. */
+#define R_AARCH64_ABS32         258    /* Direct 32 bit.  */
+#define R_AARCH64_ABS16                259     /* Direct 16-bit.  */
+#define R_AARCH64_PREL64       260     /* PC-relative 64-bit.  */
+#define R_AARCH64_PREL32       261     /* PC-relative 32-bit.  */
+#define R_AARCH64_PREL16       262     /* PC-relative 16-bit.  */
+#define R_AARCH64_MOVW_UABS_G0 263     /* Dir. MOVZ imm. from bits 15:0.  */
+#define R_AARCH64_MOVW_UABS_G0_NC 264  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G1 265     /* Dir. MOVZ imm. from bits 31:16.  */
+#define R_AARCH64_MOVW_UABS_G1_NC 266  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G2 267     /* Dir. MOVZ imm. from bits 47:32.  */
+#define R_AARCH64_MOVW_UABS_G2_NC 268  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_UABS_G3 269     /* Dir. MOV{K,Z} imm. from 63:48.  */
+#define R_AARCH64_MOVW_SABS_G0 270     /* Dir. MOV{N,Z} imm. from 15:0.  */
+#define R_AARCH64_MOVW_SABS_G1 271     /* Dir. MOV{N,Z} imm. from 31:16.  */
+#define R_AARCH64_MOVW_SABS_G2 272     /* Dir. MOV{N,Z} imm. from 47:32.  */
+#define R_AARCH64_LD_PREL_LO19 273     /* PC-rel. LD imm. from bits 20:2.  */
+#define R_AARCH64_ADR_PREL_LO21        274     /* PC-rel. ADR imm. from bits 20:0.  */
+#define R_AARCH64_ADR_PREL_PG_HI21 275 /* Page-rel. ADRP imm. from 32:12.  */
+#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check.  */
+#define R_AARCH64_ADD_ABS_LO12_NC 277  /* Dir. ADD imm. from bits 11:0.  */
+#define R_AARCH64_LDST8_ABS_LO12_NC 278        /* Likewise for LD/ST; no check. */
+#define R_AARCH64_TSTBR14      279     /* PC-rel. TBZ/TBNZ imm. from 15:2.  */
+#define R_AARCH64_CONDBR19     280     /* PC-rel. cond. br. imm. from 20:2. */
+#define R_AARCH64_JUMP26       282     /* PC-rel. B imm. from bits 27:2.  */
+#define R_AARCH64_CALL26       283     /* Likewise for CALL.  */
+#define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1.  */
+#define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2.  */
+#define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3.  */
+#define R_AARCH64_MOVW_PREL_G0 287     /* PC-rel. MOV{N,Z} imm. from 15:0.  */
+#define R_AARCH64_MOVW_PREL_G0_NC 288  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G1 289     /* PC-rel. MOV{N,Z} imm. from 31:16. */
+#define R_AARCH64_MOVW_PREL_G1_NC 290  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G2 291     /* PC-rel. MOV{N,Z} imm. from 47:32. */
+#define R_AARCH64_MOVW_PREL_G2_NC 292  /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_PREL_G3 293     /* PC-rel. MOV{N,Z} imm. from 63:48. */
+#define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4.  */
+#define R_AARCH64_MOVW_GOTOFF_G0 300   /* GOT-rel. off. MOV{N,Z} imm. 15:0. */
+#define R_AARCH64_MOVW_GOTOFF_G0_NC 301        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G1 302   /* GOT-rel. o. MOV{N,Z} imm. 31:16.  */
+#define R_AARCH64_MOVW_GOTOFF_G1_NC 303        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G2 304   /* GOT-rel. o. MOV{N,Z} imm. 47:32.  */
+#define R_AARCH64_MOVW_GOTOFF_G2_NC 305        /* Likewise for MOVK; no check.  */
+#define R_AARCH64_MOVW_GOTOFF_G3 306   /* GOT-rel. o. MOV{N,Z} imm. 63:48.  */
+#define R_AARCH64_GOTREL64     307     /* GOT-relative 64-bit.  */
+#define R_AARCH64_GOTREL32     308     /* GOT-relative 32-bit.  */
+#define R_AARCH64_GOT_LD_PREL19        309     /* PC-rel. GOT off. load imm. 20:2.  */
+#define R_AARCH64_LD64_GOTOFF_LO15 310 /* GOT-rel. off. LD/ST imm. 14:3.  */
+#define R_AARCH64_ADR_GOT_PAGE 311     /* P-page-rel. GOT off. ADRP 32:12.  */
+#define R_AARCH64_LD64_GOT_LO12_NC 312 /* Dir. GOT off. LD/ST imm. 11:3.  */
+#define R_AARCH64_LD64_GOTPAGE_LO15 313        /* GOT-page-rel. GOT off. LD/ST 14:3 */
+#define R_AARCH64_TLSGD_ADR_PREL21 512 /* PC-relative ADR imm. 20:0.  */
+#define R_AARCH64_TLSGD_ADR_PAGE21 513 /* page-rel. ADRP imm. 32:12.  */
+#define R_AARCH64_TLSGD_ADD_LO12_NC 514        /* direct ADD imm. from 11:0.  */
+#define R_AARCH64_TLSGD_MOVW_G1        515     /* GOT-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSGD_MOVW_G0_NC 516 /* GOT-rel. MOVK imm. 15:0.  */
+#define R_AARCH64_TLSLD_ADR_PREL21 517 /* Like 512; local dynamic model.  */
+#define R_AARCH64_TLSLD_ADR_PAGE21 518 /* Like 513; local dynamic model.  */
+#define R_AARCH64_TLSLD_ADD_LO12_NC 519        /* Like 514; local dynamic model.  */
+#define R_AARCH64_TLSLD_MOVW_G1        520     /* Like 515; local dynamic model.  */
+#define R_AARCH64_TLSLD_MOVW_G0_NC 521 /* Like 516; local dynamic model.  */
+#define R_AARCH64_TLSLD_LD_PREL19 522  /* TLS PC-rel. load imm. 20:2.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0.  */
+#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */
+#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0.  */
+#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check.  */
+#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0.  */
+#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1.  */
+#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2.  */
+#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3.  */
+#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check.  */
+#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0.  */
+#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12.  */
+#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3.  */
+#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0.  */
+#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0.  */
+#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check.  */
+#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0.  */
+#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */
+#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1.  */
+#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check.  */
+#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2.  */
+#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check.  */
+#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3.  */
+#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check.  */
+#define R_AARCH64_TLSDESC_LD_PREL19 560        /* PC-rel. load immediate 20:2.  */
+#define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0.  */
+#define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12.  */
+#define R_AARCH64_TLSDESC_LD64_LO12 563        /* Direct LD off. from 11:3.  */
+#define R_AARCH64_TLSDESC_ADD_LO12 564 /* Direct ADD imm. from 11:0.  */
+#define R_AARCH64_TLSDESC_OFF_G1 565   /* GOT-rel. MOV{N,Z} imm. 31:16.  */
+#define R_AARCH64_TLSDESC_OFF_G0_NC 566        /* GOT-rel. MOVK imm. 15:0; no ck.  */
+#define R_AARCH64_TLSDESC_LDR  567     /* Relax LDR.  */
+#define R_AARCH64_TLSDESC_ADD  568     /* Relax ADD.  */
+#define R_AARCH64_TLSDESC_CALL 569     /* Relax BLR.  */
+#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4.  */
+#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check.  */
+#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */
+#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check.  */
+#define R_AARCH64_COPY         1024    /* Copy symbol at runtime.  */
+#define R_AARCH64_GLOB_DAT     1025    /* Create GOT entry.  */
+#define R_AARCH64_JUMP_SLOT    1026    /* Create PLT entry.  */
+#define R_AARCH64_RELATIVE     1027    /* Adjust by program base.  */
+#define R_AARCH64_TLS_DTPMOD   1028    /* Module number, 64 bit.  */
+#define R_AARCH64_TLS_DTPREL   1029    /* Module-relative offset, 64 bit.  */
+#define R_AARCH64_TLS_TPREL    1030    /* TP-relative offset, 64 bit.  */
+#define R_AARCH64_TLSDESC      1031    /* TLS Descriptor.  */
+#define R_AARCH64_IRELATIVE    1032    /* STT_GNU_IFUNC relocation.  */
+
+/* ARM relocs.  */
+
+#define R_ARM_NONE             0       /* No reloc */
+#define R_ARM_PC24             1       /* Deprecated PC relative 26
+                                          bit branch.  */
+#define R_ARM_ABS32            2       /* Direct 32 bit  */
+#define R_ARM_REL32            3       /* PC relative 32 bit */
+#define R_ARM_PC13             4
+#define R_ARM_ABS16            5       /* Direct 16 bit */
+#define R_ARM_ABS12            6       /* Direct 12 bit */
+#define R_ARM_THM_ABS5         7       /* Direct & 0x7C (LDR, STR).  */
+#define R_ARM_ABS8             8       /* Direct 8 bit */
+#define R_ARM_SBREL32          9
+#define R_ARM_THM_PC22         10      /* PC relative 24 bit (Thumb32 BL).  */
+#define R_ARM_THM_PC8          11      /* PC relative & 0x3FC
+                                          (Thumb16 LDR, ADD, ADR).  */
+#define R_ARM_AMP_VCALL9       12
+#define R_ARM_SWI24            13      /* Obsolete static relocation.  */
+#define R_ARM_TLS_DESC         13      /* Dynamic relocation.  */
+#define R_ARM_THM_SWI8         14      /* Reserved.  */
+#define R_ARM_XPC25            15      /* Reserved.  */
+#define R_ARM_THM_XPC22                16      /* Reserved.  */
+#define R_ARM_TLS_DTPMOD32     17      /* ID of module containing symbol */
+#define R_ARM_TLS_DTPOFF32     18      /* Offset in TLS block */
+#define R_ARM_TLS_TPOFF32      19      /* Offset in static TLS block */
+#define R_ARM_COPY             20      /* Copy symbol at runtime */
+#define R_ARM_GLOB_DAT         21      /* Create GOT entry */
+#define R_ARM_JUMP_SLOT                22      /* Create PLT entry */
+#define R_ARM_RELATIVE         23      /* Adjust by program base */
+#define R_ARM_GOTOFF           24      /* 32 bit offset to GOT */
+#define R_ARM_GOTPC            25      /* 32 bit PC relative offset to GOT */
+#define R_ARM_GOT32            26      /* 32 bit GOT entry */
+#define R_ARM_PLT32            27      /* Deprecated, 32 bit PLT address.  */
+#define R_ARM_CALL             28      /* PC relative 24 bit (BL, BLX).  */
+#define R_ARM_JUMP24           29      /* PC relative 24 bit
+                                          (B, BL<cond>).  */
+#define R_ARM_THM_JUMP24       30      /* PC relative 24 bit (Thumb32 B.W).  */
+#define R_ARM_BASE_ABS         31      /* Adjust by program base.  */
+#define R_ARM_ALU_PCREL_7_0    32      /* Obsolete.  */
+#define R_ARM_ALU_PCREL_15_8   33      /* Obsolete.  */
+#define R_ARM_ALU_PCREL_23_15  34      /* Obsolete.  */
+#define R_ARM_LDR_SBREL_11_0   35      /* Deprecated, prog. base relative.  */
+#define R_ARM_ALU_SBREL_19_12  36      /* Deprecated, prog. base relative.  */
+#define R_ARM_ALU_SBREL_27_20  37      /* Deprecated, prog. base relative.  */
+#define R_ARM_TARGET1          38
+#define R_ARM_SBREL31          39      /* Program base relative.  */
+#define R_ARM_V4BX             40
+#define R_ARM_TARGET2          41
+#define R_ARM_PREL31           42      /* 32 bit PC relative.  */
+#define R_ARM_MOVW_ABS_NC      43      /* Direct 16-bit (MOVW).  */
+#define R_ARM_MOVT_ABS         44      /* Direct high 16-bit (MOVT).  */
+#define R_ARM_MOVW_PREL_NC     45      /* PC relative 16-bit (MOVW).  */
+#define R_ARM_MOVT_PREL                46      /* PC relative (MOVT).  */
+#define R_ARM_THM_MOVW_ABS_NC  47      /* Direct 16 bit (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_ABS     48      /* Direct high 16 bit
+                                          (Thumb32 MOVT).  */
+#define R_ARM_THM_MOVW_PREL_NC 49      /* PC relative 16 bit
+                                          (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_PREL    50      /* PC relative high 16 bit
+                                          (Thumb32 MOVT).  */
+#define R_ARM_THM_JUMP19       51      /* PC relative 20 bit
+                                          (Thumb32 B<cond>.W).  */
+#define R_ARM_THM_JUMP6                52      /* PC relative X & 0x7E
+                                          (Thumb16 CBZ, CBNZ).  */
+#define R_ARM_THM_ALU_PREL_11_0        53      /* PC relative 12 bit
+                                          (Thumb32 ADR.W).  */
+#define R_ARM_THM_PC12         54      /* PC relative 12 bit
+                                          (Thumb32 LDR{D,SB,H,SH}).  */
+#define R_ARM_ABS32_NOI                55      /* Direct 32-bit.  */
+#define R_ARM_REL32_NOI                56      /* PC relative 32-bit.  */
+#define R_ARM_ALU_PC_G0_NC     57      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G0                58      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G1_NC     59      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G1                60      /* PC relative (ADD, SUB).  */
+#define R_ARM_ALU_PC_G2                61      /* PC relative (ADD, SUB).  */
+#define R_ARM_LDR_PC_G1                62      /* PC relative (LDR,STR,LDRB,STRB).  */
+#define R_ARM_LDR_PC_G2                63      /* PC relative (LDR,STR,LDRB,STRB).  */
+#define R_ARM_LDRS_PC_G0       64      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDRS_PC_G1       65      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDRS_PC_G2       66      /* PC relative (STR{D,H},
+                                          LDR{D,SB,H,SH}).  */
+#define R_ARM_LDC_PC_G0                67      /* PC relative (LDC, STC).  */
+#define R_ARM_LDC_PC_G1                68      /* PC relative (LDC, STC).  */
+#define R_ARM_LDC_PC_G2                69      /* PC relative (LDC, STC).  */
+#define R_ARM_ALU_SB_G0_NC     70      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G0                71      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G1_NC     72      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G1                73      /* Program base relative (ADD,SUB).  */
+#define R_ARM_ALU_SB_G2                74      /* Program base relative (ADD,SUB).  */
+#define R_ARM_LDR_SB_G0                75      /* Program base relative (LDR,
+                                          STR, LDRB, STRB).  */
+#define R_ARM_LDR_SB_G1                76      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDR_SB_G2                77      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G0       78      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G1       79      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDRS_SB_G2       80      /* Program base relative
+                                          (LDR, STR, LDRB, STRB).  */
+#define R_ARM_LDC_SB_G0                81      /* Program base relative (LDC,STC).  */
+#define R_ARM_LDC_SB_G1                82      /* Program base relative (LDC,STC).  */
+#define R_ARM_LDC_SB_G2                83      /* Program base relative (LDC,STC).  */
+#define R_ARM_MOVW_BREL_NC     84      /* Program base relative 16
+                                          bit (MOVW).  */
+#define R_ARM_MOVT_BREL                85      /* Program base relative high
+                                          16 bit (MOVT).  */
+#define R_ARM_MOVW_BREL                86      /* Program base relative 16
+                                          bit (MOVW).  */
+#define R_ARM_THM_MOVW_BREL_NC 87      /* Program base relative 16
+                                          bit (Thumb32 MOVW).  */
+#define R_ARM_THM_MOVT_BREL    88      /* Program base relative high
+                                          16 bit (Thumb32 MOVT).  */
+#define R_ARM_THM_MOVW_BREL    89      /* Program base relative 16
+                                          bit (Thumb32 MOVW).  */
+#define R_ARM_TLS_GOTDESC      90
+#define R_ARM_TLS_CALL         91
+#define R_ARM_TLS_DESCSEQ      92      /* TLS relaxation.  */
+#define R_ARM_THM_TLS_CALL     93
+#define R_ARM_PLT32_ABS                94
+#define R_ARM_GOT_ABS          95      /* GOT entry.  */
+#define R_ARM_GOT_PREL         96      /* PC relative GOT entry.  */
+#define R_ARM_GOT_BREL12       97      /* GOT entry relative to GOT
+                                          origin (LDR).  */
+#define R_ARM_GOTOFF12         98      /* 12 bit, GOT entry relative
+                                          to GOT origin (LDR, STR).  */
+#define R_ARM_GOTRELAX         99
+#define R_ARM_GNU_VTENTRY      100
+#define R_ARM_GNU_VTINHERIT    101
+#define R_ARM_THM_PC11         102     /* PC relative & 0xFFE (Thumb16 B).  */
+#define R_ARM_THM_PC9          103     /* PC relative & 0x1FE
+                                          (Thumb16 B/B<cond>).  */
+#define R_ARM_TLS_GD32         104     /* PC-rel 32 bit for global dynamic
+                                          thread local data */
+#define R_ARM_TLS_LDM32                105     /* PC-rel 32 bit for local dynamic
+                                          thread local data */
+#define R_ARM_TLS_LDO32                106     /* 32 bit offset relative to TLS
+                                          block */
+#define R_ARM_TLS_IE32         107     /* PC-rel 32 bit for GOT entry of
+                                          static TLS block offset */
+#define R_ARM_TLS_LE32         108     /* 32 bit offset relative to static
+                                          TLS block */
+#define R_ARM_TLS_LDO12                109     /* 12 bit relative to TLS
+                                          block (LDR, STR).  */
+#define R_ARM_TLS_LE12         110     /* 12 bit relative to static
+                                          TLS block (LDR, STR).  */
+#define R_ARM_TLS_IE12GP       111     /* 12 bit GOT entry relative
+                                          to GOT origin (LDR).  */
+#define R_ARM_ME_TOO           128     /* Obsolete.  */
+#define R_ARM_THM_TLS_DESCSEQ  129
+#define R_ARM_THM_TLS_DESCSEQ16        129
+#define R_ARM_THM_TLS_DESCSEQ32        130
+#define R_ARM_THM_GOT_BREL12   131     /* GOT entry relative to GOT
+                                          origin, 12 bit (Thumb32 LDR).  */
+#define R_ARM_IRELATIVE                160
+#define R_ARM_RXPC25           249
+#define R_ARM_RSBREL32         250
+#define R_ARM_THM_RPC22                251
+#define R_ARM_RREL32           252
+#define R_ARM_RABS22           253
+#define R_ARM_RPC24            254
+#define R_ARM_RBASE            255
+/* Keep this the last entry.  */
+#define R_ARM_NUM              256
+
+/* IA-64 specific declarations.  */
+
+/* Processor specific flags for the Ehdr e_flags field.  */
+#define EF_IA_64_MASKOS                0x0000000f      /* os-specific flags */
+#define EF_IA_64_ABI64         0x00000010      /* 64-bit ABI */
+#define EF_IA_64_ARCH          0xff000000      /* arch. version mask */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_IA_64_ARCHEXT       (PT_LOPROC + 0) /* arch extension bits */
+#define PT_IA_64_UNWIND                (PT_LOPROC + 1) /* ia64 unwind bits */
+#define PT_IA_64_HP_OPT_ANOT   (PT_LOOS + 0x12)
+#define PT_IA_64_HP_HSL_ANOT   (PT_LOOS + 0x13)
+#define PT_IA_64_HP_STACK      (PT_LOOS + 0x14)
+
+/* Processor specific flags for the Phdr p_flags field.  */
+#define PF_IA_64_NORECOV       0x80000000      /* spec insns w/o recovery */
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_IA_64_EXT          (SHT_LOPROC + 0) /* extension bits */
+#define SHT_IA_64_UNWIND       (SHT_LOPROC + 1) /* unwind bits */
+
+/* Processor specific flags for the Shdr sh_flags field.  */
+#define SHF_IA_64_SHORT                0x10000000      /* section near gp */
+#define SHF_IA_64_NORECOV      0x20000000      /* spec insns w/o recovery */
+
+/* Processor specific values for the Dyn d_tag field.  */
+#define DT_IA_64_PLT_RESERVE   (DT_LOPROC + 0)
+#define DT_IA_64_NUM           1
+
+/* IA-64 relocations.  */
+#define R_IA64_NONE            0x00    /* none */
+#define R_IA64_IMM14           0x21    /* symbol + addend, add imm14 */
+#define R_IA64_IMM22           0x22    /* symbol + addend, add imm22 */
+#define R_IA64_IMM64           0x23    /* symbol + addend, mov imm64 */
+#define R_IA64_DIR32MSB                0x24    /* symbol + addend, data4 MSB */
+#define R_IA64_DIR32LSB                0x25    /* symbol + addend, data4 LSB */
+#define R_IA64_DIR64MSB                0x26    /* symbol + addend, data8 MSB */
+#define R_IA64_DIR64LSB                0x27    /* symbol + addend, data8 LSB */
+#define R_IA64_GPREL22         0x2a    /* @gprel(sym + add), add imm22 */
+#define R_IA64_GPREL64I                0x2b    /* @gprel(sym + add), mov imm64 */
+#define R_IA64_GPREL32MSB      0x2c    /* @gprel(sym + add), data4 MSB */
+#define R_IA64_GPREL32LSB      0x2d    /* @gprel(sym + add), data4 LSB */
+#define R_IA64_GPREL64MSB      0x2e    /* @gprel(sym + add), data8 MSB */
+#define R_IA64_GPREL64LSB      0x2f    /* @gprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF22         0x32    /* @ltoff(sym + add), add imm22 */
+#define R_IA64_LTOFF64I                0x33    /* @ltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF22                0x3a    /* @pltoff(sym + add), add imm22 */
+#define R_IA64_PLTOFF64I       0x3b    /* @pltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF64MSB     0x3e    /* @pltoff(sym + add), data8 MSB */
+#define R_IA64_PLTOFF64LSB     0x3f    /* @pltoff(sym + add), data8 LSB */
+#define R_IA64_FPTR64I         0x43    /* @fptr(sym + add), mov imm64 */
+#define R_IA64_FPTR32MSB       0x44    /* @fptr(sym + add), data4 MSB */
+#define R_IA64_FPTR32LSB       0x45    /* @fptr(sym + add), data4 LSB */
+#define R_IA64_FPTR64MSB       0x46    /* @fptr(sym + add), data8 MSB */
+#define R_IA64_FPTR64LSB       0x47    /* @fptr(sym + add), data8 LSB */
+#define R_IA64_PCREL60B                0x48    /* @pcrel(sym + add), brl */
+#define R_IA64_PCREL21B                0x49    /* @pcrel(sym + add), ptb, call */
+#define R_IA64_PCREL21M                0x4a    /* @pcrel(sym + add), chk.s */
+#define R_IA64_PCREL21F                0x4b    /* @pcrel(sym + add), fchkf */
+#define R_IA64_PCREL32MSB      0x4c    /* @pcrel(sym + add), data4 MSB */
+#define R_IA64_PCREL32LSB      0x4d    /* @pcrel(sym + add), data4 LSB */
+#define R_IA64_PCREL64MSB      0x4e    /* @pcrel(sym + add), data8 MSB */
+#define R_IA64_PCREL64LSB      0x4f    /* @pcrel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_FPTR22    0x52    /* @ltoff(@fptr(s+a)), imm22 */
+#define R_IA64_LTOFF_FPTR64I   0x53    /* @ltoff(@fptr(s+a)), imm64 */
+#define R_IA64_LTOFF_FPTR32MSB 0x54    /* @ltoff(@fptr(s+a)), data4 MSB */
+#define R_IA64_LTOFF_FPTR32LSB 0x55    /* @ltoff(@fptr(s+a)), data4 LSB */
+#define R_IA64_LTOFF_FPTR64MSB 0x56    /* @ltoff(@fptr(s+a)), data8 MSB */
+#define R_IA64_LTOFF_FPTR64LSB 0x57    /* @ltoff(@fptr(s+a)), data8 LSB */
+#define R_IA64_SEGREL32MSB     0x5c    /* @segrel(sym + add), data4 MSB */
+#define R_IA64_SEGREL32LSB     0x5d    /* @segrel(sym + add), data4 LSB */
+#define R_IA64_SEGREL64MSB     0x5e    /* @segrel(sym + add), data8 MSB */
+#define R_IA64_SEGREL64LSB     0x5f    /* @segrel(sym + add), data8 LSB */
+#define R_IA64_SECREL32MSB     0x64    /* @secrel(sym + add), data4 MSB */
+#define R_IA64_SECREL32LSB     0x65    /* @secrel(sym + add), data4 LSB */
+#define R_IA64_SECREL64MSB     0x66    /* @secrel(sym + add), data8 MSB */
+#define R_IA64_SECREL64LSB     0x67    /* @secrel(sym + add), data8 LSB */
+#define R_IA64_REL32MSB                0x6c    /* data 4 + REL */
+#define R_IA64_REL32LSB                0x6d    /* data 4 + REL */
+#define R_IA64_REL64MSB                0x6e    /* data 8 + REL */
+#define R_IA64_REL64LSB                0x6f    /* data 8 + REL */
+#define R_IA64_LTV32MSB                0x74    /* symbol + addend, data4 MSB */
+#define R_IA64_LTV32LSB                0x75    /* symbol + addend, data4 LSB */
+#define R_IA64_LTV64MSB                0x76    /* symbol + addend, data8 MSB */
+#define R_IA64_LTV64LSB                0x77    /* symbol + addend, data8 LSB */
+#define R_IA64_PCREL21BI       0x79    /* @pcrel(sym + add), 21bit inst */
+#define R_IA64_PCREL22         0x7a    /* @pcrel(sym + add), 22bit inst */
+#define R_IA64_PCREL64I                0x7b    /* @pcrel(sym + add), 64bit inst */
+#define R_IA64_IPLTMSB         0x80    /* dynamic reloc, imported PLT, MSB */
+#define R_IA64_IPLTLSB         0x81    /* dynamic reloc, imported PLT, LSB */
+#define R_IA64_COPY            0x84    /* copy relocation */
+#define R_IA64_SUB             0x85    /* Addend and symbol difference */
+#define R_IA64_LTOFF22X                0x86    /* LTOFF22, relaxable.  */
+#define R_IA64_LDXMOV          0x87    /* Use of LTOFF22X.  */
+#define R_IA64_TPREL14         0x91    /* @tprel(sym + add), imm14 */
+#define R_IA64_TPREL22         0x92    /* @tprel(sym + add), imm22 */
+#define R_IA64_TPREL64I                0x93    /* @tprel(sym + add), imm64 */
+#define R_IA64_TPREL64MSB      0x96    /* @tprel(sym + add), data8 MSB */
+#define R_IA64_TPREL64LSB      0x97    /* @tprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_TPREL22   0x9a    /* @ltoff(@tprel(s+a)), imm2 */
+#define R_IA64_DTPMOD64MSB     0xa6    /* @dtpmod(sym + add), data8 MSB */
+#define R_IA64_DTPMOD64LSB     0xa7    /* @dtpmod(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPMOD22  0xaa    /* @ltoff(@dtpmod(sym + add)), imm22 */
+#define R_IA64_DTPREL14                0xb1    /* @dtprel(sym + add), imm14 */
+#define R_IA64_DTPREL22                0xb2    /* @dtprel(sym + add), imm22 */
+#define R_IA64_DTPREL64I       0xb3    /* @dtprel(sym + add), imm64 */
+#define R_IA64_DTPREL32MSB     0xb4    /* @dtprel(sym + add), data4 MSB */
+#define R_IA64_DTPREL32LSB     0xb5    /* @dtprel(sym + add), data4 LSB */
+#define R_IA64_DTPREL64MSB     0xb6    /* @dtprel(sym + add), data8 MSB */
+#define R_IA64_DTPREL64LSB     0xb7    /* @dtprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPREL22  0xba    /* @ltoff(@dtprel(s+a)), imm22 */
+
+/* SH specific declarations */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_SH_MACH_MASK                0x1f
+#define EF_SH_UNKNOWN          0x0
+#define EF_SH1                 0x1
+#define EF_SH2                 0x2
+#define EF_SH3                 0x3
+#define EF_SH_DSP              0x4
+#define EF_SH3_DSP             0x5
+#define EF_SH4AL_DSP           0x6
+#define EF_SH3E                        0x8
+#define EF_SH4                 0x9
+#define EF_SH2E                        0xb
+#define EF_SH4A                        0xc
+#define EF_SH2A                        0xd
+#define EF_SH4_NOFPU           0x10
+#define EF_SH4A_NOFPU          0x11
+#define EF_SH4_NOMMU_NOFPU     0x12
+#define EF_SH2A_NOFPU          0x13
+#define EF_SH3_NOMMU           0x14
+#define EF_SH2A_SH4_NOFPU      0x15
+#define EF_SH2A_SH3_NOFPU      0x16
+#define EF_SH2A_SH4            0x17
+#define EF_SH2A_SH3E           0x18
+
+/* SH relocs.  */
+#define        R_SH_NONE               0
+#define        R_SH_DIR32              1
+#define        R_SH_REL32              2
+#define        R_SH_DIR8WPN            3
+#define        R_SH_IND12W             4
+#define        R_SH_DIR8WPL            5
+#define        R_SH_DIR8WPZ            6
+#define        R_SH_DIR8BP             7
+#define        R_SH_DIR8W              8
+#define        R_SH_DIR8L              9
+#define        R_SH_SWITCH16           25
+#define        R_SH_SWITCH32           26
+#define        R_SH_USES               27
+#define        R_SH_COUNT              28
+#define        R_SH_ALIGN              29
+#define        R_SH_CODE               30
+#define        R_SH_DATA               31
+#define        R_SH_LABEL              32
+#define        R_SH_SWITCH8            33
+#define        R_SH_GNU_VTINHERIT      34
+#define        R_SH_GNU_VTENTRY        35
+#define        R_SH_TLS_GD_32          144
+#define        R_SH_TLS_LD_32          145
+#define        R_SH_TLS_LDO_32         146
+#define        R_SH_TLS_IE_32          147
+#define        R_SH_TLS_LE_32          148
+#define        R_SH_TLS_DTPMOD32       149
+#define        R_SH_TLS_DTPOFF32       150
+#define        R_SH_TLS_TPOFF32        151
+#define        R_SH_GOT32              160
+#define        R_SH_PLT32              161
+#define        R_SH_COPY               162
+#define        R_SH_GLOB_DAT           163
+#define        R_SH_JMP_SLOT           164
+#define        R_SH_RELATIVE           165
+#define        R_SH_GOTOFF             166
+#define        R_SH_GOTPC              167
+/* Keep this the last entry.  */
+#define        R_SH_NUM                256
+
+/* S/390 specific definitions.  */
+
+/* Valid values for the e_flags field.  */
+
+#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
+
+/* Additional s390 relocs */
+
+#define R_390_NONE             0       /* No reloc.  */
+#define R_390_8                        1       /* Direct 8 bit.  */
+#define R_390_12               2       /* Direct 12 bit.  */
+#define R_390_16               3       /* Direct 16 bit.  */
+#define R_390_32               4       /* Direct 32 bit.  */
+#define R_390_PC32             5       /* PC relative 32 bit.  */
+#define R_390_GOT12            6       /* 12 bit GOT offset.  */
+#define R_390_GOT32            7       /* 32 bit GOT offset.  */
+#define R_390_PLT32            8       /* 32 bit PC relative PLT address.  */
+#define R_390_COPY             9       /* Copy symbol at runtime.  */
+#define R_390_GLOB_DAT         10      /* Create GOT entry.  */
+#define R_390_JMP_SLOT         11      /* Create PLT entry.  */
+#define R_390_RELATIVE         12      /* Adjust by program base.  */
+#define R_390_GOTOFF32         13      /* 32 bit offset to GOT.         */
+#define R_390_GOTPC            14      /* 32 bit PC relative offset to GOT.  */
+#define R_390_GOT16            15      /* 16 bit GOT offset.  */
+#define R_390_PC16             16      /* PC relative 16 bit.  */
+#define R_390_PC16DBL          17      /* PC relative 16 bit shifted by 1.  */
+#define R_390_PLT16DBL         18      /* 16 bit PC rel. PLT shifted by 1.  */
+#define R_390_PC32DBL          19      /* PC relative 32 bit shifted by 1.  */
+#define R_390_PLT32DBL         20      /* 32 bit PC rel. PLT shifted by 1.  */
+#define R_390_GOTPCDBL         21      /* 32 bit PC rel. GOT shifted by 1.  */
+#define R_390_64               22      /* Direct 64 bit.  */
+#define R_390_PC64             23      /* PC relative 64 bit.  */
+#define R_390_GOT64            24      /* 64 bit GOT offset.  */
+#define R_390_PLT64            25      /* 64 bit PC relative PLT address.  */
+#define R_390_GOTENT           26      /* 32 bit PC rel. to GOT entry >> 1. */
+#define R_390_GOTOFF16         27      /* 16 bit offset to GOT. */
+#define R_390_GOTOFF64         28      /* 64 bit offset to GOT. */
+#define R_390_GOTPLT12         29      /* 12 bit offset to jump slot.  */
+#define R_390_GOTPLT16         30      /* 16 bit offset to jump slot.  */
+#define R_390_GOTPLT32         31      /* 32 bit offset to jump slot.  */
+#define R_390_GOTPLT64         32      /* 64 bit offset to jump slot.  */
+#define R_390_GOTPLTENT                33      /* 32 bit rel. offset to jump slot.  */
+#define R_390_PLTOFF16         34      /* 16 bit offset from GOT to PLT. */
+#define R_390_PLTOFF32         35      /* 32 bit offset from GOT to PLT. */
+#define R_390_PLTOFF64         36      /* 16 bit offset from GOT to PLT. */
+#define R_390_TLS_LOAD         37      /* Tag for load insn in TLS code.  */
+#define R_390_TLS_GDCALL       38      /* Tag for function call in general
+                                          dynamic TLS code. */
+#define R_390_TLS_LDCALL       39      /* Tag for function call in local
+                                          dynamic TLS code. */
+#define R_390_TLS_GD32         40      /* Direct 32 bit for general dynamic
+                                          thread local data.  */
+#define R_390_TLS_GD64         41      /* Direct 64 bit for general dynamic
+                                         thread local data.  */
+#define R_390_TLS_GOTIE12      42      /* 12 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_TLS_GOTIE32      43      /* 32 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_TLS_GOTIE64      44      /* 64 bit GOT offset for static TLS
+                                          block offset. */
+#define R_390_TLS_LDM32                45      /* Direct 32 bit for local dynamic
+                                          thread local data in LE code.  */
+#define R_390_TLS_LDM64                46      /* Direct 64 bit for local dynamic
+                                          thread local data in LE code.  */
+#define R_390_TLS_IE32         47      /* 32 bit address of GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_IE64         48      /* 64 bit address of GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_IEENT                49      /* 32 bit rel. offset to GOT entry for
+                                          negated static TLS block offset.  */
+#define R_390_TLS_LE32         50      /* 32 bit negated offset relative to
+                                          static TLS block.  */
+#define R_390_TLS_LE64         51      /* 64 bit negated offset relative to
+                                          static TLS block.  */
+#define R_390_TLS_LDO32                52      /* 32 bit offset relative to TLS
+                                          block.  */
+#define R_390_TLS_LDO64                53      /* 64 bit offset relative to TLS
+                                          block.  */
+#define R_390_TLS_DTPMOD       54      /* ID of module containing symbol.  */
+#define R_390_TLS_DTPOFF       55      /* Offset in TLS block.  */
+#define R_390_TLS_TPOFF                56      /* Negated offset in static TLS
+                                          block.  */
+#define R_390_20               57      /* Direct 20 bit.  */
+#define R_390_GOT20            58      /* 20 bit GOT offset.  */
+#define R_390_GOTPLT20         59      /* 20 bit offset to jump slot.  */
+#define R_390_TLS_GOTIE20      60      /* 20 bit GOT offset for static TLS
+                                          block offset.  */
+#define R_390_IRELATIVE         61      /* STT_GNU_IFUNC relocation.  */
+/* Keep this the last entry.  */
+#define R_390_NUM              62
+
+
+/* CRIS relocations.  */
+#define R_CRIS_NONE            0
+#define R_CRIS_8               1
+#define R_CRIS_16              2
+#define R_CRIS_32              3
+#define R_CRIS_8_PCREL         4
+#define R_CRIS_16_PCREL                5
+#define R_CRIS_32_PCREL                6
+#define R_CRIS_GNU_VTINHERIT   7
+#define R_CRIS_GNU_VTENTRY     8
+#define R_CRIS_COPY            9
+#define R_CRIS_GLOB_DAT                10
+#define R_CRIS_JUMP_SLOT       11
+#define R_CRIS_RELATIVE                12
+#define R_CRIS_16_GOT          13
+#define R_CRIS_32_GOT          14
+#define R_CRIS_16_GOTPLT       15
+#define R_CRIS_32_GOTPLT       16
+#define R_CRIS_32_GOTREL       17
+#define R_CRIS_32_PLT_GOTREL   18
+#define R_CRIS_32_PLT_PCREL    19
+
+#define R_CRIS_NUM             20
+
+
+/* AMD x86-64 relocations.  */
+#define R_X86_64_NONE          0       /* No reloc */
+#define R_X86_64_64            1       /* Direct 64 bit  */
+#define R_X86_64_PC32          2       /* PC relative 32 bit signed */
+#define R_X86_64_GOT32         3       /* 32 bit GOT entry */
+#define R_X86_64_PLT32         4       /* 32 bit PLT address */
+#define R_X86_64_COPY          5       /* Copy symbol at runtime */
+#define R_X86_64_GLOB_DAT      6       /* Create GOT entry */
+#define R_X86_64_JUMP_SLOT     7       /* Create PLT entry */
+#define R_X86_64_RELATIVE      8       /* Adjust by program base */
+#define R_X86_64_GOTPCREL      9       /* 32 bit signed PC relative
+                                          offset to GOT */
+#define R_X86_64_32            10      /* Direct 32 bit zero extended */
+#define R_X86_64_32S           11      /* Direct 32 bit sign extended */
+#define R_X86_64_16            12      /* Direct 16 bit zero extended */
+#define R_X86_64_PC16          13      /* 16 bit sign extended pc relative */
+#define R_X86_64_8             14      /* Direct 8 bit sign extended  */
+#define R_X86_64_PC8           15      /* 8 bit sign extended pc relative */
+#define R_X86_64_DTPMOD64      16      /* ID of module containing symbol */
+#define R_X86_64_DTPOFF64      17      /* Offset in module's TLS block */
+#define R_X86_64_TPOFF64       18      /* Offset in initial TLS block */
+#define R_X86_64_TLSGD         19      /* 32 bit signed PC relative offset
+                                          to two GOT entries for GD symbol */
+#define R_X86_64_TLSLD         20      /* 32 bit signed PC relative offset
+                                          to two GOT entries for LD symbol */
+#define R_X86_64_DTPOFF32      21      /* Offset in TLS block */
+#define R_X86_64_GOTTPOFF      22      /* 32 bit signed PC relative offset
+                                          to GOT entry for IE symbol */
+#define R_X86_64_TPOFF32       23      /* Offset in initial TLS block */
+#define R_X86_64_PC64          24      /* PC relative 64 bit */
+#define R_X86_64_GOTOFF64      25      /* 64 bit offset to GOT */
+#define R_X86_64_GOTPC32       26      /* 32 bit signed pc relative
+                                          offset to GOT */
+#define R_X86_64_GOT64         27      /* 64-bit GOT entry offset */
+#define R_X86_64_GOTPCREL64    28      /* 64-bit PC relative offset
+                                          to GOT entry */
+#define R_X86_64_GOTPC64       29      /* 64-bit PC relative offset to GOT */
+#define R_X86_64_GOTPLT64      30      /* like GOT64, says PLT entry needed */
+#define R_X86_64_PLTOFF64      31      /* 64-bit GOT relative offset
+                                          to PLT entry */
+#define R_X86_64_SIZE32                32      /* Size of symbol plus 32-bit addend */
+#define R_X86_64_SIZE64                33      /* Size of symbol plus 64-bit addend */
+#define R_X86_64_GOTPC32_TLSDESC 34    /* GOT offset for TLS descriptor.  */
+#define R_X86_64_TLSDESC_CALL   35     /* Marker for call through TLS
+                                          descriptor.  */
+#define R_X86_64_TLSDESC        36     /* TLS descriptor.  */
+#define R_X86_64_IRELATIVE     37      /* Adjust indirectly by program base */
+#define R_X86_64_RELATIVE64    38      /* 64-bit adjust by program base */
+
+#define R_X86_64_NUM           39
+
+
+/* AM33 relocations.  */
+#define R_MN10300_NONE         0       /* No reloc.  */
+#define R_MN10300_32           1       /* Direct 32 bit.  */
+#define R_MN10300_16           2       /* Direct 16 bit.  */
+#define R_MN10300_8            3       /* Direct 8 bit.  */
+#define R_MN10300_PCREL32      4       /* PC-relative 32-bit.  */
+#define R_MN10300_PCREL16      5       /* PC-relative 16-bit signed.  */
+#define R_MN10300_PCREL8       6       /* PC-relative 8-bit signed.  */
+#define R_MN10300_GNU_VTINHERIT        7       /* Ancient C++ vtable garbage... */
+#define R_MN10300_GNU_VTENTRY  8       /* ... collection annotation.  */
+#define R_MN10300_24           9       /* Direct 24 bit.  */
+#define R_MN10300_GOTPC32      10      /* 32-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTPC16      11      /* 16-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTOFF32     12      /* 32-bit offset from GOT.  */
+#define R_MN10300_GOTOFF24     13      /* 24-bit offset from GOT.  */
+#define R_MN10300_GOTOFF16     14      /* 16-bit offset from GOT.  */
+#define R_MN10300_PLT32                15      /* 32-bit PCrel to PLT entry.  */
+#define R_MN10300_PLT16                16      /* 16-bit PCrel to PLT entry.  */
+#define R_MN10300_GOT32                17      /* 32-bit offset to GOT entry.  */
+#define R_MN10300_GOT24                18      /* 24-bit offset to GOT entry.  */
+#define R_MN10300_GOT16                19      /* 16-bit offset to GOT entry.  */
+#define R_MN10300_COPY         20      /* Copy symbol at runtime.  */
+#define R_MN10300_GLOB_DAT     21      /* Create GOT entry.  */
+#define R_MN10300_JMP_SLOT     22      /* Create PLT entry.  */
+#define R_MN10300_RELATIVE     23      /* Adjust by program base.  */
+#define R_MN10300_TLS_GD       24      /* 32-bit offset for global dynamic.  */
+#define R_MN10300_TLS_LD       25      /* 32-bit offset for local dynamic.  */
+#define R_MN10300_TLS_LDO      26      /* Module-relative offset.  */
+#define R_MN10300_TLS_GOTIE    27      /* GOT offset for static TLS block
+                                          offset.  */
+#define R_MN10300_TLS_IE       28      /* GOT address for static TLS block
+                                          offset.  */
+#define R_MN10300_TLS_LE       29      /* Offset relative to static TLS
+                                          block.  */
+#define R_MN10300_TLS_DTPMOD   30      /* ID of module containing symbol.  */
+#define R_MN10300_TLS_DTPOFF   31      /* Offset in module TLS block.  */
+#define R_MN10300_TLS_TPOFF    32      /* Offset in static TLS block.  */
+#define R_MN10300_SYM_DIFF     33      /* Adjustment for next reloc as needed
+                                          by linker relaxation.  */
+#define R_MN10300_ALIGN                34      /* Alignment requirement for linker
+                                          relaxation.  */
+#define R_MN10300_NUM          35
+
+
+/* M32R relocs.  */
+#define R_M32R_NONE            0       /* No reloc. */
+#define R_M32R_16              1       /* Direct 16 bit. */
+#define R_M32R_32              2       /* Direct 32 bit. */
+#define R_M32R_24              3       /* Direct 24 bit. */
+#define R_M32R_10_PCREL                4       /* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL                5       /* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL                6       /* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO                7       /* High 16 bit with unsigned low. */
+#define R_M32R_HI16_SLO                8       /* High 16 bit with signed low. */
+#define R_M32R_LO16            9       /* Low 16 bit. */
+#define R_M32R_SDA16           10      /* 16 bit offset in SDA. */
+#define R_M32R_GNU_VTINHERIT   11
+#define R_M32R_GNU_VTENTRY     12
+/* M32R relocs use SHT_RELA.  */
+#define R_M32R_16_RELA         33      /* Direct 16 bit. */
+#define R_M32R_32_RELA         34      /* Direct 32 bit. */
+#define R_M32R_24_RELA         35      /* Direct 24 bit. */
+#define R_M32R_10_PCREL_RELA   36      /* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL_RELA   37      /* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL_RELA   38      /* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO_RELA   39      /* High 16 bit with unsigned low */
+#define R_M32R_HI16_SLO_RELA   40      /* High 16 bit with signed low */
+#define R_M32R_LO16_RELA       41      /* Low 16 bit */
+#define R_M32R_SDA16_RELA      42      /* 16 bit offset in SDA */
+#define R_M32R_RELA_GNU_VTINHERIT      43
+#define R_M32R_RELA_GNU_VTENTRY        44
+#define R_M32R_REL32           45      /* PC relative 32 bit.  */
+
+#define R_M32R_GOT24           48      /* 24 bit GOT entry */
+#define R_M32R_26_PLTREL       49      /* 26 bit PC relative to PLT shifted */
+#define R_M32R_COPY            50      /* Copy symbol at runtime */
+#define R_M32R_GLOB_DAT                51      /* Create GOT entry */
+#define R_M32R_JMP_SLOT                52      /* Create PLT entry */
+#define R_M32R_RELATIVE                53      /* Adjust by program base */
+#define R_M32R_GOTOFF          54      /* 24 bit offset to GOT */
+#define R_M32R_GOTPC24         55      /* 24 bit PC relative offset to GOT */
+#define R_M32R_GOT16_HI_ULO    56      /* High 16 bit GOT entry with unsigned
+                                          low */
+#define R_M32R_GOT16_HI_SLO    57      /* High 16 bit GOT entry with signed
+                                          low */
+#define R_M32R_GOT16_LO                58      /* Low 16 bit GOT entry */
+#define R_M32R_GOTPC_HI_ULO    59      /* High 16 bit PC relative offset to
+                                          GOT with unsigned low */
+#define R_M32R_GOTPC_HI_SLO    60      /* High 16 bit PC relative offset to
+                                          GOT with signed low */
+#define R_M32R_GOTPC_LO                61      /* Low 16 bit PC relative offset to
+                                          GOT */
+#define R_M32R_GOTOFF_HI_ULO   62      /* High 16 bit offset to GOT
+                                          with unsigned low */
+#define R_M32R_GOTOFF_HI_SLO   63      /* High 16 bit offset to GOT
+                                          with signed low */
+#define R_M32R_GOTOFF_LO       64      /* Low 16 bit offset to GOT */
+#define R_M32R_NUM             256     /* Keep this the last entry. */
+
+/* MicroBlaze relocations */
+#define R_MICROBLAZE_NONE              0       /* No reloc. */
+#define R_MICROBLAZE_32                1       /* Direct 32 bit. */
+#define R_MICROBLAZE_32_PCREL          2       /* PC relative 32 bit. */
+#define R_MICROBLAZE_64_PCREL          3       /* PC relative 64 bit. */
+#define R_MICROBLAZE_32_PCREL_LO       4       /* Low 16 bits of PCREL32. */
+#define R_MICROBLAZE_64                5       /* Direct 64 bit. */
+#define R_MICROBLAZE_32_LO             6       /* Low 16 bit. */
+#define R_MICROBLAZE_SRO32             7       /* Read-only small data area. */
+#define R_MICROBLAZE_SRW32             8       /* Read-write small data area. */
+#define R_MICROBLAZE_64_NONE           9       /* No reloc. */
+#define R_MICROBLAZE_32_SYM_OP_SYM     10      /* Symbol Op Symbol relocation. */
+#define R_MICROBLAZE_GNU_VTINHERIT     11      /* GNU C++ vtable hierarchy. */
+#define R_MICROBLAZE_GNU_VTENTRY       12      /* GNU C++ vtable member usage. */
+#define R_MICROBLAZE_GOTPC_64          13      /* PC-relative GOT offset.  */
+#define R_MICROBLAZE_GOT_64            14      /* GOT entry offset.  */
+#define R_MICROBLAZE_PLT_64            15      /* PLT offset (PC-relative).  */
+#define R_MICROBLAZE_REL               16      /* Adjust by program base.  */
+#define R_MICROBLAZE_JUMP_SLOT         17      /* Create PLT entry.  */
+#define R_MICROBLAZE_GLOB_DAT          18      /* Create GOT entry.  */
+#define R_MICROBLAZE_GOTOFF_64         19      /* 64 bit offset to GOT. */
+#define R_MICROBLAZE_GOTOFF_32         20      /* 32 bit offset to GOT. */
+#define R_MICROBLAZE_COPY              21      /* Runtime copy.  */
+#define R_MICROBLAZE_TLS               22      /* TLS Reloc. */
+#define R_MICROBLAZE_TLSGD             23      /* TLS General Dynamic. */
+#define R_MICROBLAZE_TLSLD             24      /* TLS Local Dynamic. */
+#define R_MICROBLAZE_TLSDTPMOD32       25      /* TLS Module ID. */
+#define R_MICROBLAZE_TLSDTPREL32       26      /* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSDTPREL64       27      /* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSGOTTPREL32     28      /* TLS Offset From Thread Pointer. */
+#define R_MICROBLAZE_TLSTPREL32        29      /* TLS Offset From Thread Pointer. */
+
+/* Legal values for d_tag (dynamic entry type).  */
+#define DT_NIOS2_GP             0x70000002 /* Address of _gp.  */
+
+/* Nios II relocations.  */
+#define R_NIOS2_NONE           0       /* No reloc.  */
+#define R_NIOS2_S16            1       /* Direct signed 16 bit.  */
+#define R_NIOS2_U16            2       /* Direct unsigned 16 bit.  */
+#define R_NIOS2_PCREL16                3       /* PC relative 16 bit.  */
+#define R_NIOS2_CALL26         4       /* Direct call.  */
+#define R_NIOS2_IMM5           5       /* 5 bit constant expression.  */
+#define R_NIOS2_CACHE_OPX      6       /* 5 bit expression, shift 22.  */
+#define R_NIOS2_IMM6           7       /* 6 bit constant expression.  */
+#define R_NIOS2_IMM8           8       /* 8 bit constant expression.  */
+#define R_NIOS2_HI16           9       /* High 16 bit.  */
+#define R_NIOS2_LO16           10      /* Low 16 bit.  */
+#define R_NIOS2_HIADJ16                11      /* High 16 bit, adjusted.  */
+#define R_NIOS2_BFD_RELOC_32   12      /* 32 bit symbol value + addend.  */
+#define R_NIOS2_BFD_RELOC_16   13      /* 16 bit symbol value + addend.  */
+#define R_NIOS2_BFD_RELOC_8    14      /* 8 bit symbol value + addend.  */
+#define R_NIOS2_GPREL          15      /* 16 bit GP pointer offset.  */
+#define R_NIOS2_GNU_VTINHERIT  16      /* GNU C++ vtable hierarchy.  */
+#define R_NIOS2_GNU_VTENTRY    17      /* GNU C++ vtable member usage.  */
+#define R_NIOS2_UJMP           18      /* Unconditional branch.  */
+#define R_NIOS2_CJMP           19      /* Conditional branch.  */
+#define R_NIOS2_CALLR          20      /* Indirect call through register.  */
+#define R_NIOS2_ALIGN          21      /* Alignment requirement for
+                                          linker relaxation.  */
+#define R_NIOS2_GOT16          22      /* 16 bit GOT entry.  */
+#define R_NIOS2_CALL16         23      /* 16 bit GOT entry for function.  */
+#define R_NIOS2_GOTOFF_LO      24      /* %lo of offset to GOT pointer.  */
+#define R_NIOS2_GOTOFF_HA      25      /* %hiadj of offset to GOT pointer.  */
+#define R_NIOS2_PCREL_LO       26      /* %lo of PC relative offset.  */
+#define R_NIOS2_PCREL_HA       27      /* %hiadj of PC relative offset.  */
+#define R_NIOS2_TLS_GD16       28      /* 16 bit GOT offset for TLS GD.  */
+#define R_NIOS2_TLS_LDM16      29      /* 16 bit GOT offset for TLS LDM.  */
+#define R_NIOS2_TLS_LDO16      30      /* 16 bit module relative offset.  */
+#define R_NIOS2_TLS_IE16       31      /* 16 bit GOT offset for TLS IE.  */
+#define R_NIOS2_TLS_LE16       32      /* 16 bit LE TP-relative offset.  */
+#define R_NIOS2_TLS_DTPMOD     33      /* Module number.  */
+#define R_NIOS2_TLS_DTPREL     34      /* Module-relative offset.  */
+#define R_NIOS2_TLS_TPREL      35      /* TP-relative offset.  */
+#define R_NIOS2_COPY           36      /* Copy symbol at runtime.  */
+#define R_NIOS2_GLOB_DAT       37      /* Create GOT entry.  */
+#define R_NIOS2_JUMP_SLOT      38      /* Create PLT entry.  */
+#define R_NIOS2_RELATIVE       39      /* Adjust by program base.  */
+#define R_NIOS2_GOTOFF         40      /* 16 bit offset to GOT pointer.  */
+#define R_NIOS2_CALL26_NOAT    41      /* Direct call in .noat section.  */
+#define R_NIOS2_GOT_LO         42      /* %lo() of GOT entry.  */
+#define R_NIOS2_GOT_HA         43      /* %hiadj() of GOT entry.  */
+#define R_NIOS2_CALL_LO                44      /* %lo() of function GOT entry.  */
+#define R_NIOS2_CALL_HA                45      /* %hiadj() of function GOT entry.  */
+
+/* TILEPro relocations.  */
+#define R_TILEPRO_NONE         0       /* No reloc */
+#define R_TILEPRO_32           1       /* Direct 32 bit */
+#define R_TILEPRO_16           2       /* Direct 16 bit */
+#define R_TILEPRO_8            3       /* Direct 8 bit */
+#define R_TILEPRO_32_PCREL     4       /* PC relative 32 bit */
+#define R_TILEPRO_16_PCREL     5       /* PC relative 16 bit */
+#define R_TILEPRO_8_PCREL      6       /* PC relative 8 bit */
+#define R_TILEPRO_LO16         7       /* Low 16 bit */
+#define R_TILEPRO_HI16         8       /* High 16 bit */
+#define R_TILEPRO_HA16         9       /* High 16 bit, adjusted */
+#define R_TILEPRO_COPY         10      /* Copy relocation */
+#define R_TILEPRO_GLOB_DAT     11      /* Create GOT entry */
+#define R_TILEPRO_JMP_SLOT     12      /* Create PLT entry */
+#define R_TILEPRO_RELATIVE     13      /* Adjust by program base */
+#define R_TILEPRO_BROFF_X1     14      /* X1 pipe branch offset */
+#define R_TILEPRO_JOFFLONG_X1  15      /* X1 pipe jump offset */
+#define R_TILEPRO_JOFFLONG_X1_PLT 16   /* X1 pipe jump offset to PLT */
+#define R_TILEPRO_IMM8_X0      17      /* X0 pipe 8-bit */
+#define R_TILEPRO_IMM8_Y0      18      /* Y0 pipe 8-bit */
+#define R_TILEPRO_IMM8_X1      19      /* X1 pipe 8-bit */
+#define R_TILEPRO_IMM8_Y1      20      /* Y1 pipe 8-bit */
+#define R_TILEPRO_MT_IMM15_X1  21      /* X1 pipe mtspr */
+#define R_TILEPRO_MF_IMM15_X1  22      /* X1 pipe mfspr */
+#define R_TILEPRO_IMM16_X0     23      /* X0 pipe 16-bit */
+#define R_TILEPRO_IMM16_X1     24      /* X1 pipe 16-bit */
+#define R_TILEPRO_IMM16_X0_LO  25      /* X0 pipe low 16-bit */
+#define R_TILEPRO_IMM16_X1_LO  26      /* X1 pipe low 16-bit */
+#define R_TILEPRO_IMM16_X0_HI  27      /* X0 pipe high 16-bit */
+#define R_TILEPRO_IMM16_X1_HI  28      /* X1 pipe high 16-bit */
+#define R_TILEPRO_IMM16_X0_HA  29      /* X0 pipe high 16-bit, adjusted */
+#define R_TILEPRO_IMM16_X1_HA  30      /* X1 pipe high 16-bit, adjusted */
+#define R_TILEPRO_IMM16_X0_PCREL 31    /* X0 pipe PC relative 16 bit */
+#define R_TILEPRO_IMM16_X1_PCREL 32    /* X1 pipe PC relative 16 bit */
+#define R_TILEPRO_IMM16_X0_LO_PCREL 33 /* X0 pipe PC relative low 16 bit */
+#define R_TILEPRO_IMM16_X1_LO_PCREL 34 /* X1 pipe PC relative low 16 bit */
+#define R_TILEPRO_IMM16_X0_HI_PCREL 35 /* X0 pipe PC relative high 16 bit */
+#define R_TILEPRO_IMM16_X1_HI_PCREL 36 /* X1 pipe PC relative high 16 bit */
+#define R_TILEPRO_IMM16_X0_HA_PCREL 37 /* X0 pipe PC relative ha() 16 bit */
+#define R_TILEPRO_IMM16_X1_HA_PCREL 38 /* X1 pipe PC relative ha() 16 bit */
+#define R_TILEPRO_IMM16_X0_GOT 39      /* X0 pipe 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT 40      /* X1 pipe 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_LO 41   /* X0 pipe low 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_LO 42   /* X1 pipe low 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_HI 43   /* X0 pipe high 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_HI 44   /* X1 pipe high 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X0_GOT_HA 45   /* X0 pipe ha() 16-bit GOT offset */
+#define R_TILEPRO_IMM16_X1_GOT_HA 46   /* X1 pipe ha() 16-bit GOT offset */
+#define R_TILEPRO_MMSTART_X0   47      /* X0 pipe mm "start" */
+#define R_TILEPRO_MMEND_X0     48      /* X0 pipe mm "end" */
+#define R_TILEPRO_MMSTART_X1   49      /* X1 pipe mm "start" */
+#define R_TILEPRO_MMEND_X1     50      /* X1 pipe mm "end" */
+#define R_TILEPRO_SHAMT_X0     51      /* X0 pipe shift amount */
+#define R_TILEPRO_SHAMT_X1     52      /* X1 pipe shift amount */
+#define R_TILEPRO_SHAMT_Y0     53      /* Y0 pipe shift amount */
+#define R_TILEPRO_SHAMT_Y1     54      /* Y1 pipe shift amount */
+#define R_TILEPRO_DEST_IMM8_X1 55      /* X1 pipe destination 8-bit */
+/* Relocs 56-59 are currently not defined.  */
+#define R_TILEPRO_TLS_GD_CALL  60      /* "jal" for TLS GD */
+#define R_TILEPRO_IMM8_X0_TLS_GD_ADD 61        /* X0 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_X1_TLS_GD_ADD 62        /* X1 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_Y0_TLS_GD_ADD 63        /* Y0 pipe "addi" for TLS GD */
+#define R_TILEPRO_IMM8_Y1_TLS_GD_ADD 64        /* Y1 pipe "addi" for TLS GD */
+#define R_TILEPRO_TLS_IE_LOAD  65      /* "lw_tls" for TLS IE */
+#define R_TILEPRO_IMM16_X0_TLS_GD 66   /* X0 pipe 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD 67   /* X1 pipe 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_LO 68        /* X0 pipe low 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_LO 69        /* X1 pipe low 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_HI 70        /* X0 pipe high 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_HI 71        /* X1 pipe high 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_GD_HA 72        /* X0 pipe ha() 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X1_TLS_GD_HA 73        /* X1 pipe ha() 16-bit TLS GD offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE 74   /* X0 pipe 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE 75   /* X1 pipe 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_LO 76        /* X0 pipe low 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_LO 77        /* X1 pipe low 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_HI 78        /* X0 pipe high 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_HI 79        /* X1 pipe high 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X0_TLS_IE_HA 80        /* X0 pipe ha() 16-bit TLS IE offset */
+#define R_TILEPRO_IMM16_X1_TLS_IE_HA 81        /* X1 pipe ha() 16-bit TLS IE offset */
+#define R_TILEPRO_TLS_DTPMOD32 82      /* ID of module containing symbol */
+#define R_TILEPRO_TLS_DTPOFF32 83      /* Offset in TLS block */
+#define R_TILEPRO_TLS_TPOFF32  84      /* Offset in static TLS block */
+#define R_TILEPRO_IMM16_X0_TLS_LE 85   /* X0 pipe 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE 86   /* X1 pipe 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_LO 87        /* X0 pipe low 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_LO 88        /* X1 pipe low 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_HI 89        /* X0 pipe high 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_HI 90        /* X1 pipe high 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X0_TLS_LE_HA 91        /* X0 pipe ha() 16-bit TLS LE offset */
+#define R_TILEPRO_IMM16_X1_TLS_LE_HA 92        /* X1 pipe ha() 16-bit TLS LE offset */
+
+#define R_TILEPRO_GNU_VTINHERIT        128     /* GNU C++ vtable hierarchy */
+#define R_TILEPRO_GNU_VTENTRY  129     /* GNU C++ vtable member usage */
+
+#define R_TILEPRO_NUM          130
+
+
+/* TILE-Gx relocations.  */
+#define R_TILEGX_NONE          0       /* No reloc */
+#define R_TILEGX_64            1       /* Direct 64 bit */
+#define R_TILEGX_32            2       /* Direct 32 bit */
+#define R_TILEGX_16            3       /* Direct 16 bit */
+#define R_TILEGX_8             4       /* Direct 8 bit */
+#define R_TILEGX_64_PCREL      5       /* PC relative 64 bit */
+#define R_TILEGX_32_PCREL      6       /* PC relative 32 bit */
+#define R_TILEGX_16_PCREL      7       /* PC relative 16 bit */
+#define R_TILEGX_8_PCREL       8       /* PC relative 8 bit */
+#define R_TILEGX_HW0           9       /* hword 0 16-bit */
+#define R_TILEGX_HW1           10      /* hword 1 16-bit */
+#define R_TILEGX_HW2           11      /* hword 2 16-bit */
+#define R_TILEGX_HW3           12      /* hword 3 16-bit */
+#define R_TILEGX_HW0_LAST      13      /* last hword 0 16-bit */
+#define R_TILEGX_HW1_LAST      14      /* last hword 1 16-bit */
+#define R_TILEGX_HW2_LAST      15      /* last hword 2 16-bit */
+#define R_TILEGX_COPY          16      /* Copy relocation */
+#define R_TILEGX_GLOB_DAT      17      /* Create GOT entry */
+#define R_TILEGX_JMP_SLOT      18      /* Create PLT entry */
+#define R_TILEGX_RELATIVE      19      /* Adjust by program base */
+#define R_TILEGX_BROFF_X1      20      /* X1 pipe branch offset */
+#define R_TILEGX_JUMPOFF_X1    21      /* X1 pipe jump offset */
+#define R_TILEGX_JUMPOFF_X1_PLT        22      /* X1 pipe jump offset to PLT */
+#define R_TILEGX_IMM8_X0       23      /* X0 pipe 8-bit */
+#define R_TILEGX_IMM8_Y0       24      /* Y0 pipe 8-bit */
+#define R_TILEGX_IMM8_X1       25      /* X1 pipe 8-bit */
+#define R_TILEGX_IMM8_Y1       26      /* Y1 pipe 8-bit */
+#define R_TILEGX_DEST_IMM8_X1  27      /* X1 pipe destination 8-bit */
+#define R_TILEGX_MT_IMM14_X1   28      /* X1 pipe mtspr */
+#define R_TILEGX_MF_IMM14_X1   29      /* X1 pipe mfspr */
+#define R_TILEGX_MMSTART_X0    30      /* X0 pipe mm "start" */
+#define R_TILEGX_MMEND_X0      31      /* X0 pipe mm "end" */
+#define R_TILEGX_SHAMT_X0      32      /* X0 pipe shift amount */
+#define R_TILEGX_SHAMT_X1      33      /* X1 pipe shift amount */
+#define R_TILEGX_SHAMT_Y0      34      /* Y0 pipe shift amount */
+#define R_TILEGX_SHAMT_Y1      35      /* Y1 pipe shift amount */
+#define R_TILEGX_IMM16_X0_HW0  36      /* X0 pipe hword 0 */
+#define R_TILEGX_IMM16_X1_HW0  37      /* X1 pipe hword 0 */
+#define R_TILEGX_IMM16_X0_HW1  38      /* X0 pipe hword 1 */
+#define R_TILEGX_IMM16_X1_HW1  39      /* X1 pipe hword 1 */
+#define R_TILEGX_IMM16_X0_HW2  40      /* X0 pipe hword 2 */
+#define R_TILEGX_IMM16_X1_HW2  41      /* X1 pipe hword 2 */
+#define R_TILEGX_IMM16_X0_HW3  42      /* X0 pipe hword 3 */
+#define R_TILEGX_IMM16_X1_HW3  43      /* X1 pipe hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_LAST 44  /* X0 pipe last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST 45  /* X1 pipe last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST 46  /* X0 pipe last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST 47  /* X1 pipe last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST 48  /* X0 pipe last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST 49  /* X1 pipe last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_PCREL 50 /* X0 pipe PC relative hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_PCREL 51 /* X1 pipe PC relative hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_PCREL 52 /* X0 pipe PC relative hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_PCREL 53 /* X1 pipe PC relative hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_PCREL 54 /* X0 pipe PC relative hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_PCREL 55 /* X1 pipe PC relative hword 2 */
+#define R_TILEGX_IMM16_X0_HW3_PCREL 56 /* X0 pipe PC relative hword 3 */
+#define R_TILEGX_IMM16_X1_HW3_PCREL 57 /* X1 pipe PC relative hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_PCREL 58 /* X0 pipe PC-rel last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST_PCREL 59 /* X1 pipe PC-rel last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST_PCREL 60 /* X0 pipe PC-rel last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST_PCREL 61 /* X1 pipe PC-rel last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST_PCREL 62 /* X0 pipe PC-rel last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_GOT 64   /* X0 pipe hword 0 GOT offset */
+#define R_TILEGX_IMM16_X1_HW0_GOT 65   /* X1 pipe hword 0 GOT offset */
+#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */
+#define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */
+#define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */
+#define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */
+#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */
+#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */
+#define R_TILEGX_IMM16_X0_HW0_TLS_GD 78        /* X0 pipe hword 0 TLS GD offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_GD 79        /* X1 pipe hword 0 TLS GD offset */
+#define R_TILEGX_IMM16_X0_HW0_TLS_LE 80        /* X0 pipe hword 0 TLS LE offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_LE 81        /* X1 pipe hword 0 TLS LE offset */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE 82 /* X0 pipe last hword 0 LE off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE 83 /* X1 pipe last hword 0 LE off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE 84 /* X0 pipe last hword 1 LE off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE 85 /* X1 pipe last hword 1 LE off */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD 86 /* X0 pipe last hword 0 GD off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD 87 /* X1 pipe last hword 0 GD off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD 88 /* X0 pipe last hword 1 GD off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD 89 /* X1 pipe last hword 1 GD off */
+/* Relocs 90-91 are currently not defined.  */
+#define R_TILEGX_IMM16_X0_HW0_TLS_IE 92        /* X0 pipe hword 0 TLS IE offset */
+#define R_TILEGX_IMM16_X1_HW0_TLS_IE 93        /* X1 pipe hword 0 TLS IE offset */
+#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */
+#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */
+#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */
+#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */
+#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */
+#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */
+#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */
+#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE 103 /* X1 pipe last hword 1 IE off */
+/* Relocs 104-105 are currently not defined.  */
+#define R_TILEGX_TLS_DTPMOD64  106     /* 64-bit ID of symbol's module */
+#define R_TILEGX_TLS_DTPOFF64  107     /* 64-bit offset in TLS block */
+#define R_TILEGX_TLS_TPOFF64   108     /* 64-bit offset in static TLS block */
+#define R_TILEGX_TLS_DTPMOD32  109     /* 32-bit ID of symbol's module */
+#define R_TILEGX_TLS_DTPOFF32  110     /* 32-bit offset in TLS block */
+#define R_TILEGX_TLS_TPOFF32   111     /* 32-bit offset in static TLS block */
+#define R_TILEGX_TLS_GD_CALL   112     /* "jal" for TLS GD */
+#define R_TILEGX_IMM8_X0_TLS_GD_ADD 113        /* X0 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_X1_TLS_GD_ADD 114        /* X1 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_Y0_TLS_GD_ADD 115        /* Y0 pipe "addi" for TLS GD */
+#define R_TILEGX_IMM8_Y1_TLS_GD_ADD 116        /* Y1 pipe "addi" for TLS GD */
+#define R_TILEGX_TLS_IE_LOAD   117     /* "ld_tls" for TLS IE */
+#define R_TILEGX_IMM8_X0_TLS_ADD 118   /* X0 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_X1_TLS_ADD 119   /* X1 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_Y0_TLS_ADD 120   /* Y0 pipe "addi" for TLS GD/IE */
+#define R_TILEGX_IMM8_Y1_TLS_ADD 121   /* Y1 pipe "addi" for TLS GD/IE */
+
+#define R_TILEGX_GNU_VTINHERIT 128     /* GNU C++ vtable hierarchy */
+#define R_TILEGX_GNU_VTENTRY   129     /* GNU C++ vtable member usage */
+
+#define R_TILEGX_NUM           130
+
+
+__END_DECLS
+
+#endif /* elf.h */
diff --git a/lib/libdss-include/include/endian.h b/lib/libdss-include/include/endian.h
new file mode 100644 (file)
index 0000000..b13ddaa
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ENDIAN_H
+#define        _ENDIAN_H       1
+
+#include <features.h>
+
+/* Definitions for byte order, according to significance of bytes,
+   from low addresses to high addresses.  The value is what you get by
+   putting '4' in the most significant byte, '3' in the second most
+   significant byte, '2' in the second least significant byte, and '1'
+   in the least significant byte, and then writing down one digit for
+   each byte, starting with the byte at the lowest address at the left,
+   and proceeding to the byte with the highest address at the right.  */
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+#define        __PDP_ENDIAN    3412
+
+/* This file defines `__BYTE_ORDER' for the particular machine.  */
+#include <bits/endian.h>
+
+/* Some machines may need to use a different endianness for floating point
+   values.  */
+#ifndef __FLOAT_WORD_ORDER
+# define __FLOAT_WORD_ORDER __BYTE_ORDER
+#endif
+
+#ifdef __USE_MISC
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# define BIG_ENDIAN    __BIG_ENDIAN
+# define PDP_ENDIAN    __PDP_ENDIAN
+# define BYTE_ORDER    __BYTE_ORDER
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define __LONG_LONG_PAIR(HI, LO) LO, HI
+#elif __BYTE_ORDER == __BIG_ENDIAN
+# define __LONG_LONG_PAIR(HI, LO) HI, LO
+#endif
+
+
+#if defined __USE_MISC && !defined __ASSEMBLER__
+/* Conversion interfaces.  */
+# include <bits/byteswap.h>
+
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+#  define htobe16(x) __bswap_16 (x)
+#  define htole16(x) (x)
+#  define be16toh(x) __bswap_16 (x)
+#  define le16toh(x) (x)
+
+#  define htobe32(x) __bswap_32 (x)
+#  define htole32(x) (x)
+#  define be32toh(x) __bswap_32 (x)
+#  define le32toh(x) (x)
+
+#  define htobe64(x) __bswap_64 (x)
+#  define htole64(x) (x)
+#  define be64toh(x) __bswap_64 (x)
+#  define le64toh(x) (x)
+
+# else
+#  define htobe16(x) (x)
+#  define htole16(x) __bswap_16 (x)
+#  define be16toh(x) (x)
+#  define le16toh(x) __bswap_16 (x)
+
+#  define htobe32(x) (x)
+#  define htole32(x) __bswap_32 (x)
+#  define be32toh(x) (x)
+#  define le32toh(x) __bswap_32 (x)
+
+#  define htobe64(x) (x)
+#  define htole64(x) __bswap_64 (x)
+#  define be64toh(x) (x)
+#  define le64toh(x) __bswap_64 (x)
+# endif
+#endif
+
+#endif /* endian.h */
diff --git a/lib/libdss-include/include/envz.h b/lib/libdss-include/include/envz.h
new file mode 100644 (file)
index 0000000..1f75f3d
--- /dev/null
@@ -0,0 +1,73 @@
+/* Routines for dealing with '\0' separated environment vectors
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENVZ_H
+#define _ENVZ_H        1
+
+#include <features.h>
+
+#include <errno.h>
+
+/* Envz's are argz's too, and should be created etc., using the same
+   routines.  */
+#include <argz.h>
+
+__BEGIN_DECLS
+
+/* Returns a pointer to the entry in ENVZ for NAME, or 0 if there is none.  */
+extern char *envz_entry (const char *__restrict __envz, size_t __envz_len,
+                        const char *__restrict __name)
+     __THROW __attribute_pure__;
+
+/* Returns a pointer to the value portion of the entry in ENVZ for NAME, or 0
+   if there is none.  */
+extern char *envz_get (const char *__restrict __envz, size_t __envz_len,
+                      const char *__restrict __name)
+     __THROW __attribute_pure__;
+
+/* Adds an entry for NAME with value VALUE to ENVZ & ENVZ_LEN.  If an entry
+   with the same name already exists in ENVZ, it is removed.  If VALUE is
+   NULL, then the new entry will a special null one, for which envz_get will
+   return NULL, although envz_entry will still return an entry; this is handy
+   because when merging with another envz, the null entry can override an
+   entry in the other one.  Null entries can be removed with envz_strip ().  */
+extern error_t envz_add (char **__restrict __envz,
+                        size_t *__restrict __envz_len,
+                        const char *__restrict __name,
+                        const char *__restrict __value) __THROW;
+
+/* Adds each entry in ENVZ2 to ENVZ & ENVZ_LEN, as if with envz_add().  If
+   OVERRIDE is true, then values in ENVZ2 will supersede those with the same
+   name in ENV, otherwise not.  */
+extern error_t envz_merge (char **__restrict __envz,
+                          size_t *__restrict __envz_len,
+                          const char *__restrict __envz2,
+                          size_t __envz2_len, int __override) __THROW;
+
+/* Remove the entry for NAME from ENVZ & ENVZ_LEN, if any.  */
+extern void envz_remove (char **__restrict __envz,
+                        size_t *__restrict __envz_len,
+                        const char *__restrict __name) __THROW;
+
+/* Remove null entries.  */
+extern void envz_strip (char **__restrict __envz,
+                       size_t *__restrict __envz_len) __THROW;
+
+__END_DECLS
+
+#endif /* envz.h */
diff --git a/lib/libdss-include/include/err.h b/lib/libdss-include/include/err.h
new file mode 100644 (file)
index 0000000..b43fe68
--- /dev/null
@@ -0,0 +1,57 @@
+/* 4.4BSD utility functions for error messages.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _ERR_H
+#define        _ERR_H  1
+
+#include <features.h>
+
+#define        __need___va_list
+#include <stdarg.h>
+#ifndef        __GNUC_VA_LIST
+# define __gnuc_va_list        __ptr_t
+#endif
+
+__BEGIN_DECLS
+
+/* Print "program: ", FORMAT, ": ", the standard error string for errno,
+   and a newline, on stderr.  */
+extern void warn (const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 1, 2)));
+extern void vwarn (const char *__format, __gnuc_va_list)
+     __attribute__ ((__format__ (__printf__, 1, 0)));
+
+/* Likewise, but without ": " and the standard error string.  */
+extern void warnx (const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 1, 2)));
+extern void vwarnx (const char *__format, __gnuc_va_list)
+     __attribute__ ((__format__ (__printf__, 1, 0)));
+
+/* Likewise, and then exit with STATUS.  */
+extern void err (int __status, const char *__format, ...)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+extern void verr (int __status, const char *__format, __gnuc_va_list)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+extern void errx (int __status, const char *__format, ...)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+extern void verrx (int __status, const char *, __gnuc_va_list)
+     __attribute__ ((__noreturn__, __format__ (__printf__, 2, 0)));
+
+__END_DECLS
+
+#endif /* err.h */
diff --git a/lib/libdss-include/include/errno.h b/lib/libdss-include/include/errno.h
new file mode 100644 (file)
index 0000000..3357cbc
--- /dev/null
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.5 Errors    <errno.h>
+ */
+
+#ifndef        _ERRNO_H
+
+/* The includer defined __need_Emath if he wants only the definitions
+   of EDOM and ERANGE, and not everything else.  */
+#ifndef        __need_Emath
+# define _ERRNO_H      1
+# include <features.h>
+#endif
+
+__BEGIN_DECLS
+
+/* Get the error number constants from the system-specific file.
+   This file will test __need_Emath and _ERRNO_H.  */
+#include <bits/errno.h>
+#undef __need_Emath
+
+#ifdef _ERRNO_H
+
+/* Declare the `errno' variable, unless it's defined as a macro by
+   bits/errno.h.  This is the case in GNU, where it is a per-thread
+   variable.  This redeclaration using the macro still works, but it
+   will be a function declaration without a prototype and may trigger
+   a -Wstrict-prototypes warning.  */
+#ifndef        errno
+extern int errno;
+#endif
+
+#ifdef __USE_GNU
+
+/* The full and simple forms of the name with which the program was
+   invoked.  These variables are set up automatically at startup based on
+   the value of ARGV[0] (this works only if you use GNU ld).  */
+extern char *program_invocation_name, *program_invocation_short_name;
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
+
+__END_DECLS
+
+#endif /* _ERRNO_H */
+
+/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
+   that printing `error_t' values in the debugger shows the names.  We
+   might need this definition sometimes even if this file was included
+   before.  */
+#if defined __USE_GNU || defined __need_error_t
+# ifndef __error_t_defined
+typedef int error_t;
+#  define __error_t_defined    1
+# endif
+# undef __need_error_t
+#endif
diff --git a/lib/libdss-include/include/error.h b/lib/libdss-include/include/error.h
new file mode 100644 (file)
index 0000000..32d84ee
--- /dev/null
@@ -0,0 +1,57 @@
+/* Declaration for error-reporting function
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+
+extern void error (int __status, int __errnum, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int __status, int __errnum, const char *__fname,
+                          unsigned int __lineno, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+extern void (*error_print_progname) (void);
+
+/* This variable is incremented each time `error' is called.  */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+extern int error_one_per_line;
+
+
+#if defined __extern_always_inline && defined __va_arg_pack
+# include <bits/error.h>
+#endif
+
+__END_DECLS
+
+#endif /* error.h */
diff --git a/lib/libdss-include/include/execinfo.h b/lib/libdss-include/include/execinfo.h
new file mode 100644 (file)
index 0000000..d47c9e6
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _EXECINFO_H
+#define _EXECINFO_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Store up to SIZE return address of the current program state in
+   ARRAY and return the exact number of values stored.  */
+extern int backtrace (void **__array, int __size) __nonnull ((1));
+
+
+/* Return names of functions from the backtrace list in ARRAY in a newly
+   malloc()ed memory block.  */
+extern char **backtrace_symbols (void *const *__array, int __size)
+     __THROW __nonnull ((1));
+
+
+/* This function is similar to backtrace_symbols() but it writes the result
+   immediately to a file.  */
+extern void backtrace_symbols_fd (void *const *__array, int __size, int __fd)
+     __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* execinfo.h  */
diff --git a/lib/libdss-include/include/fcntl.h b/lib/libdss-include/include/fcntl.h
new file mode 100644 (file)
index 0000000..67752a1
--- /dev/null
@@ -0,0 +1,294 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 6.5 File Control Operations     <fcntl.h>
+ */
+
+#ifndef        _FCNTL_H
+#define        _FCNTL_H        1
+
+#include <features.h>
+
+/* This must be early so <bits/fcntl.h> can define types winningly.  */
+__BEGIN_DECLS
+
+/* Get __mode_t, __dev_t and __off_t  .*/
+#include <bits/types.h>
+
+/* Get the definitions of O_*, F_*, FD_*: all the
+   numbers and flag bits for `open', `fcntl', et al.  */
+#include <bits/fcntl.h>
+
+/* Detect if open needs mode as a third argument (or for openat as a fourth
+   argument).  */
+#ifdef __O_TMPFILE
+# define __OPEN_NEEDS_MODE(oflag) \
+  (((oflag) & O_CREAT) != 0 || ((oflag) & __O_TMPFILE) == __O_TMPFILE)
+#else
+# define __OPEN_NEEDS_MODE(oflag) (((oflag) & O_CREAT) != 0)
+#endif
+
+/* POSIX.1-2001 specifies that these types are defined by <fcntl.h>.
+   Earlier POSIX standards permitted any type ending in `_t' to be defined
+   by any POSIX header, so we don't conditionalize the definitions here.  */
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+
+#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+#endif
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+/* For XPG all symbols from <sys/stat.h> should also be available.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define __need_timespec
+# include <time.h>
+# include <bits/stat.h>
+
+# define S_IFMT                __S_IFMT
+# define S_IFDIR       __S_IFDIR
+# define S_IFCHR       __S_IFCHR
+# define S_IFBLK       __S_IFBLK
+# define S_IFREG       __S_IFREG
+# ifdef __S_IFIFO
+#  define S_IFIFO      __S_IFIFO
+# endif
+# ifdef __S_IFLNK
+#  define S_IFLNK      __S_IFLNK
+# endif
+# if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) && defined __S_IFSOCK
+#  define S_IFSOCK     __S_IFSOCK
+# endif
+
+/* Protection bits.  */
+
+# define S_ISUID       __S_ISUID       /* Set user ID on execution.  */
+# define S_ISGID       __S_ISGID       /* Set group ID on execution.  */
+
+# if defined __USE_MISC || defined __USE_XOPEN
+/* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
+#  define S_ISVTX      __S_ISVTX
+# endif
+
+# define S_IRUSR       __S_IREAD       /* Read by owner.  */
+# define S_IWUSR       __S_IWRITE      /* Write by owner.  */
+# define S_IXUSR       __S_IEXEC       /* Execute by owner.  */
+/* Read, write, and execute by owner.  */
+# define S_IRWXU       (__S_IREAD|__S_IWRITE|__S_IEXEC)
+
+# define S_IRGRP       (S_IRUSR >> 3)  /* Read by group.  */
+# define S_IWGRP       (S_IWUSR >> 3)  /* Write by group.  */
+# define S_IXGRP       (S_IXUSR >> 3)  /* Execute by group.  */
+/* Read, write, and execute by group.  */
+# define S_IRWXG       (S_IRWXU >> 3)
+
+# define S_IROTH       (S_IRGRP >> 3)  /* Read by others.  */
+# define S_IWOTH       (S_IWGRP >> 3)  /* Write by others.  */
+# define S_IXOTH       (S_IXGRP >> 3)  /* Execute by others.  */
+/* Read, write, and execute by others.  */
+# define S_IRWXO       (S_IRWXG >> 3)
+#endif
+
+#ifdef __USE_MISC
+# ifndef R_OK                  /* Verbatim from <unistd.h>.  Ugh.  */
+/* Values for the second argument to access.
+   These may be OR'd together.  */
+#  define R_OK 4               /* Test for read permission.  */
+#  define W_OK 2               /* Test for write permission.  */
+#  define X_OK 1               /* Test for execute permission.  */
+#  define F_OK 0               /* Test for existence.  */
+# endif
+#endif /* Use misc.  */
+
+/* XPG wants the following symbols.   <stdio.h> has the same definitions.  */
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define SEEK_SET      0       /* Seek from beginning of file.  */
+# define SEEK_CUR      1       /* Seek from current position.  */
+# define SEEK_END      2       /* Seek from end of file.  */
+#endif /* XPG */
+
+/* Do the file control operation described by CMD on FD.
+   The remaining arguments are interpreted depending on CMD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int fcntl (int __fd, int __cmd, ...);
+
+/* Open FILE and return a new file descriptor for it, or -1 on error.
+   OFLAG determines the type of access used.  If O_CREAT or O_TMPFILE is set
+   in OFLAG, the third argument is taken as a `mode_t', the mode of the
+   created file.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int open (const char *__file, int __oflag, ...) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64)
+     __nonnull ((1));
+# else
+#  define open open64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1));
+#endif
+
+#ifdef __USE_ATFILE
+/* Similar to `open' but a relative path name is interpreted relative to
+   the directory for which FD is a descriptor.
+
+   NOTE: some other `openat' implementation support additional functionality
+   through this interface, especially using the O_XATTR flag.  This is not
+   yet supported here.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int openat (int __fd, const char *__file, int __oflag, ...)
+     __nonnull ((2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (openat, (int __fd, const char *__file, int __oflag,
+                               ...), openat64) __nonnull ((2));
+#  else
+#   define openat openat64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int openat64 (int __fd, const char *__file, int __oflag, ...)
+     __nonnull ((2));
+# endif
+#endif
+
+/* Create and open FILE, with mode MODE.  This takes an `int' MODE
+   argument because that is what `mode_t' will be widened to.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int creat (const char *__file, mode_t __mode) __nonnull ((1));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (creat, (const char *__file, mode_t __mode),
+                      creat64) __nonnull ((1));
+# else
+#  define creat creat64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int creat64 (const char *__file, mode_t __mode) __nonnull ((1));
+#endif
+
+#if !defined F_LOCK && (defined __USE_MISC || (defined __USE_XOPEN_EXTENDED \
+                                              && !defined __USE_POSIX))
+/* NOTE: These declarations also appear in <unistd.h>; be sure to keep both
+   files consistent.  Some systems have them there and some here, and some
+   software depends on the macros being defined without including both.  */
+
+/* `lockf' is a simpler interface to the locking facilities of `fcntl'.
+   LEN is always relative to the current file position.
+   The CMD argument is one of the following.  */
+
+# define F_ULOCK 0     /* Unlock a previously locked region.  */
+# define F_LOCK  1     /* Lock a region for exclusive use.  */
+# define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
+# define F_TEST  3     /* Test a region for other processes locks.  */
+
+# ifndef __USE_FILE_OFFSET64
+extern int lockf (int __fd, int __cmd, off_t __len);
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), lockf64);
+#  else
+#   define lockf lockf64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 (int __fd, int __cmd, off64_t __len);
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Advice the system about the expected behaviour of the application with
+   respect to the file associated with FD.  */
+# ifndef __USE_FILE_OFFSET64
+extern int posix_fadvise (int __fd, off_t __offset, off_t __len,
+                         int __advise) __THROW;
+# else
+ # ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (posix_fadvise, (int __fd, __off64_t __offset,
+                                          __off64_t __len, int __advise),
+                          posix_fadvise64);
+#  else
+#   define posix_fadvise posix_fadvise64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
+                           int __advise) __THROW;
+# endif
+
+
+/* Reserve storage for the data of the file associated with FD.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int posix_fallocate (int __fd, off_t __offset, off_t __len);
+# else
+ # ifdef __REDIRECT
+extern int __REDIRECT (posix_fallocate, (int __fd, __off64_t __offset,
+                                        __off64_t __len),
+                      posix_fallocate64);
+#  else
+#   define posix_fallocate posix_fallocate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
+# endif
+#endif
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \
+    && defined __va_arg_pack_len
+# include <bits/fcntl2.h>
+#endif
+
+__END_DECLS
+
+#endif /* fcntl.h  */
diff --git a/lib/libdss-include/include/features.h b/lib/libdss-include/include/features.h
new file mode 100644 (file)
index 0000000..1afe20c
--- /dev/null
@@ -0,0 +1,394 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FEATURES_H
+#define        _FEATURES_H     1
+
+/* These are defined by the user (or the compiler)
+   to specify the desired environment:
+
+   __STRICT_ANSI__     ISO Standard C.
+   _ISOC99_SOURCE      Extensions to ISO C89 from ISO C99.
+   _ISOC11_SOURCE      Extensions to ISO C99 from ISO C11.
+   _POSIX_SOURCE       IEEE Std 1003.1.
+   _POSIX_C_SOURCE     If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
+                       if >=199309L, add IEEE Std 1003.1b-1993;
+                       if >=199506L, add IEEE Std 1003.1c-1995;
+                       if >=200112L, all of IEEE 1003.1-2004
+                       if >=200809L, all of IEEE 1003.1-2008
+   _XOPEN_SOURCE       Includes POSIX and XPG things.  Set to 500 if
+                       Single Unix conformance is wanted, to 600 for the
+                       sixth revision, to 700 for the seventh revision.
+   _XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
+   _LARGEFILE_SOURCE   Some more functions for correct standard I/O.
+   _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
+   _FILE_OFFSET_BITS=N Select default filesystem interface.
+   _ATFILE_SOURCE      Additional *at interfaces.
+   _GNU_SOURCE         All of the above, plus GNU extensions.
+   _DEFAULT_SOURCE     The default set of features (taking precedence over
+                       __STRICT_ANSI__).
+   _REENTRANT          Select additionally reentrant object.
+   _THREAD_SAFE                Same as _REENTRANT, often used by other systems.
+   _FORTIFY_SOURCE     If set to numeric value > 0 additional security
+                       measures are defined, according to level.
+
+   The `-ansi' switch to the GNU C compiler, and standards conformance
+   options such as `-std=c99', define __STRICT_ANSI__.  If none of
+   these are defined, or if _DEFAULT_SOURCE is defined, the default is
+   to have _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
+   200809L, as well as enabling miscellaneous functions from BSD and
+   SVID.  If more than one of these are defined, they accumulate.  For
+   example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE together
+   give you ISO C, 1003.1, and 1003.2, but nothing else.
+
+   These are defined by this file and are used by the
+   header files to decide what to declare or define:
+
+   __USE_ISOC11                Define ISO C11 things.
+   __USE_ISOC99                Define ISO C99 things.
+   __USE_ISOC95                Define ISO C90 AMD1 (C95) things.
+   __USE_POSIX         Define IEEE Std 1003.1 things.
+   __USE_POSIX2                Define IEEE Std 1003.2 things.
+   __USE_POSIX199309   Define IEEE Std 1003.1, and .1b things.
+   __USE_POSIX199506   Define IEEE Std 1003.1, .1b, .1c and .1i things.
+   __USE_XOPEN         Define XPG things.
+   __USE_XOPEN_EXTENDED        Define X/Open Unix things.
+   __USE_UNIX98                Define Single Unix V2 things.
+   __USE_XOPEN2K        Define XPG6 things.
+   __USE_XOPEN2KXSI     Define XPG6 XSI things.
+   __USE_XOPEN2K8       Define XPG7 things.
+   __USE_XOPEN2K8XSI    Define XPG7 XSI things.
+   __USE_LARGEFILE     Define correct standard I/O things.
+   __USE_LARGEFILE64   Define LFS things with separate names.
+   __USE_FILE_OFFSET64 Define 64bit interface as default.
+   __USE_MISC          Define things from 4.3BSD or System V Unix.
+   __USE_ATFILE                Define *at interfaces and AT_* constants for them.
+   __USE_GNU           Define GNU extensions.
+   __USE_REENTRANT     Define reentrant/thread-safe *_r functions.
+   __USE_FORTIFY_LEVEL Additional security measures used, according to level.
+
+   The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
+   defined by this file unconditionally.  `__GNU_LIBRARY__' is provided
+   only for compatibility.  All new code should use the other symbols
+   to test for features.
+
+   All macros listed above as possibly being defined by this file are
+   explicitly undefined if they are not explicitly defined.
+   Feature-test macros that are not defined by the user or compiler
+   but are implied by the other feature-test macros defined (or by the
+   lack of any definitions) are defined by the file.  */
+
+
+/* Undefine everything, so we get a clean slate.  */
+#undef __USE_ISOC11
+#undef __USE_ISOC99
+#undef __USE_ISOC95
+#undef __USE_ISOCXX11
+#undef __USE_POSIX
+#undef __USE_POSIX2
+#undef __USE_POSIX199309
+#undef __USE_POSIX199506
+#undef __USE_XOPEN
+#undef __USE_XOPEN_EXTENDED
+#undef __USE_UNIX98
+#undef __USE_XOPEN2K
+#undef __USE_XOPEN2KXSI
+#undef __USE_XOPEN2K8
+#undef __USE_XOPEN2K8XSI
+#undef __USE_LARGEFILE
+#undef __USE_LARGEFILE64
+#undef __USE_FILE_OFFSET64
+#undef __USE_MISC
+#undef __USE_ATFILE
+#undef __USE_GNU
+#undef __USE_REENTRANT
+#undef __USE_FORTIFY_LEVEL
+#undef __KERNEL_STRICT_NAMES
+
+/* Suppress kernel-name space pollution unless user expressedly asks
+   for it.  */
+#ifndef _LOOSE_KERNEL_NAMES
+# define __KERNEL_STRICT_NAMES
+#endif
+
+/* Convenience macros to test the versions of glibc and gcc.
+   Use them like this:
+   #if __GNUC_PREREQ (2,8)
+   ... code requiring gcc 2.8 or later ...
+   #endif
+   Note - they won't work for gcc1 or glibc1, since the _MINOR macros
+   were not defined then.  */
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+# define __GNUC_PREREQ(maj, min) 0
+#endif
+
+/* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for
+   _DEFAULT_SOURCE.  If _DEFAULT_SOURCE is present we do not
+   issue a warning; the expectation is that the source is being
+   transitioned to use the new macro.  */
+#if (defined _BSD_SOURCE || defined _SVID_SOURCE) \
+    && !defined _DEFAULT_SOURCE
+/* Don't #warn about _BSD_SOURCE || _SVID_SOURCE, as it breaks -Werror
+   and we don't have time to check/fix everything before vivid release
+# warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
+*/
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+#endif
+
+/* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
+#ifdef _GNU_SOURCE
+# undef  _ISOC95_SOURCE
+# define _ISOC95_SOURCE        1
+# undef  _ISOC99_SOURCE
+# define _ISOC99_SOURCE        1
+# undef  _ISOC11_SOURCE
+# define _ISOC11_SOURCE        1
+# undef  _POSIX_SOURCE
+# define _POSIX_SOURCE 1
+# undef  _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE       200809L
+# undef  _XOPEN_SOURCE
+# define _XOPEN_SOURCE 700
+# undef  _XOPEN_SOURCE_EXTENDED
+# define _XOPEN_SOURCE_EXTENDED        1
+# undef         _LARGEFILE64_SOURCE
+# define _LARGEFILE64_SOURCE   1
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+# undef  _ATFILE_SOURCE
+# define _ATFILE_SOURCE        1
+#endif
+
+/* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined,
+   define _DEFAULT_SOURCE.  */
+#if (defined _DEFAULT_SOURCE                                   \
+     || (!defined __STRICT_ANSI__                              \
+        && !defined _ISOC99_SOURCE                             \
+        && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE  \
+        && !defined _XOPEN_SOURCE))
+# undef  _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE       1
+#endif
+
+/* This is to enable the ISO C11 extension.  */
+#if (defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L))
+# define __USE_ISOC11  1
+#endif
+
+/* This is to enable the ISO C99 extension.  */
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+# define __USE_ISOC99  1
+#endif
+
+/* This is to enable the ISO C90 Amendment 1:1995 extension.  */
+#if (defined _ISOC99_SOURCE || defined _ISOC11_SOURCE \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L))
+# define __USE_ISOC95  1
+#endif
+
+/* This is to enable compatibility for ISO C++11.
+
+   So far g++ does not provide a macro.  Check the temporary macro for
+   now, too.  */
+#if ((defined __cplusplus && __cplusplus >= 201103L)                         \
+     || defined __GXX_EXPERIMENTAL_CXX0X__)
+# define __USE_ISOCXX11        1
+#endif
+
+/* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE
+   is defined, use POSIX.1-2008 (or another version depending on
+   _XOPEN_SOURCE).  */
+#ifdef _DEFAULT_SOURCE
+# if !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE
+#  define __USE_POSIX_IMPLICITLY       1
+# endif
+# undef  _POSIX_SOURCE
+# define _POSIX_SOURCE 1
+# undef  _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE       200809L
+#endif
+#if ((!defined __STRICT_ANSI__                                 \
+      || (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500))        \
+     && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE)
+# define _POSIX_SOURCE 1
+# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
+#  define _POSIX_C_SOURCE      2
+# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 600
+#  define _POSIX_C_SOURCE      199506L
+# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 700
+#  define _POSIX_C_SOURCE      200112L
+# else
+#  define _POSIX_C_SOURCE      200809L
+# endif
+# define __USE_POSIX_IMPLICITLY        1
+#endif
+
+#if (defined _POSIX_SOURCE                                     \
+     || (defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 1)      \
+     || defined _XOPEN_SOURCE)
+# define __USE_POSIX   1
+#endif
+
+#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE
+# define __USE_POSIX2  1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199309L
+# define __USE_POSIX199309     1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 199506L
+# define __USE_POSIX199506     1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200112L
+# define __USE_XOPEN2K         1
+# undef __USE_ISOC95
+# define __USE_ISOC95          1
+# undef __USE_ISOC99
+# define __USE_ISOC99          1
+#endif
+
+#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200809L
+# define __USE_XOPEN2K8                1
+# undef  _ATFILE_SOURCE
+# define _ATFILE_SOURCE        1
+#endif
+
+#ifdef _XOPEN_SOURCE
+# define __USE_XOPEN   1
+# if (_XOPEN_SOURCE - 0) >= 500
+#  define __USE_XOPEN_EXTENDED 1
+#  define __USE_UNIX98 1
+#  undef _LARGEFILE_SOURCE
+#  define _LARGEFILE_SOURCE    1
+#  if (_XOPEN_SOURCE - 0) >= 600
+#   if (_XOPEN_SOURCE - 0) >= 700
+#    define __USE_XOPEN2K8     1
+#    define __USE_XOPEN2K8XSI  1
+#   endif
+#   define __USE_XOPEN2K       1
+#   define __USE_XOPEN2KXSI    1
+#   undef __USE_ISOC95
+#   define __USE_ISOC95                1
+#   undef __USE_ISOC99
+#   define __USE_ISOC99                1
+#  endif
+# else
+#  ifdef _XOPEN_SOURCE_EXTENDED
+#   define __USE_XOPEN_EXTENDED        1
+#  endif
+# endif
+#endif
+
+#ifdef _LARGEFILE_SOURCE
+# define __USE_LARGEFILE       1
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+# define __USE_LARGEFILE64     1
+#endif
+
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+# define __USE_FILE_OFFSET64   1
+#endif
+
+#if defined _DEFAULT_SOURCE
+# define __USE_MISC    1
+#endif
+
+#ifdef _ATFILE_SOURCE
+# define __USE_ATFILE  1
+#endif
+
+#ifdef _GNU_SOURCE
+# define __USE_GNU     1
+#endif
+
+#if defined _REENTRANT || defined _THREAD_SAFE
+# define __USE_REENTRANT       1
+#endif
+
+#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
+    && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
+# if _FORTIFY_SOURCE > 1
+#  define __USE_FORTIFY_LEVEL 2
+# else
+#  define __USE_FORTIFY_LEVEL 1
+# endif
+#else
+# define __USE_FORTIFY_LEVEL 0
+#endif
+
+/* Get definitions of __STDC_* predefined macros, if the compiler has
+   not preincluded this header automatically.  */
+#include <stdc-predef.h>
+
+/* This macro indicates that the installed library is the GNU C Library.
+   For historic reasons the value now is 6 and this will stay from now
+   on.  The use of this variable is deprecated.  Use __GLIBC__ and
+   __GLIBC_MINOR__ now (see below) when you want to test for a specific
+   GNU C library version and use the values in <gnu/lib-names.h> to get
+   the sonames of the shared libraries.  */
+#undef  __GNU_LIBRARY__
+#define __GNU_LIBRARY__ 6
+
+/* Major and minor version number of the GNU C library package.  Use
+   these macros to test for features in specific releases.  */
+#define        __GLIBC__       2
+#define        __GLIBC_MINOR__ 23
+
+#define __GLIBC_PREREQ(maj, min) \
+       ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
+
+/* This is here only because every header file already includes this one.  */
+#ifndef __ASSEMBLER__
+# ifndef _SYS_CDEFS_H
+#  include <sys/cdefs.h>
+# endif
+
+/* If we don't have __REDIRECT, prototypes will be missing if
+   __USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */
+# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT
+#  define __USE_LARGEFILE      1
+#  define __USE_LARGEFILE64    1
+# endif
+
+#endif /* !ASSEMBLER */
+
+/* Decide whether we can define 'extern inline' functions in headers.  */
+#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
+    && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \
+    && defined __extern_inline
+# define __USE_EXTERN_INLINES  1
+#endif
+
+
+/* This is here only because every header file already includes this one.
+   Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
+   <gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
+   that will always return failure (and set errno to ENOSYS).  */
+#include <gnu/stubs.h>
+
+
+#endif /* features.h  */
diff --git a/lib/libdss-include/include/fenv.h b/lib/libdss-include/include/fenv.h
new file mode 100644 (file)
index 0000000..9a1e112
--- /dev/null
@@ -0,0 +1,135 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C99 7.6: Floating-point environment     <fenv.h>
+ */
+
+#ifndef _FENV_H
+#define _FENV_H        1
+
+#include <features.h>
+
+/* Get the architecture dependend definitions.  The following definitions
+   are expected to be done:
+
+   fenv_t      type for object representing an entire floating-point
+               environment
+
+   FE_DFL_ENV  macro of type pointer to fenv_t to be used as the argument
+               to functions taking an argument of type fenv_t; in this
+               case the default environment will be used
+
+   fexcept_t   type for object representing the floating-point exception
+               flags including status associated with the flags
+
+   The following macros are defined iff the implementation supports this
+   kind of exception.
+   FE_INEXACT          inexact result
+   FE_DIVBYZERO                division by zero
+   FE_UNDERFLOW                result not representable due to underflow
+   FE_OVERFLOW         result not representable due to overflow
+   FE_INVALID          invalid operation
+
+   FE_ALL_EXCEPT       bitwise OR of all supported exceptions
+
+   The next macros are defined iff the appropriate rounding mode is
+   supported by the implementation.
+   FE_TONEAREST                round to nearest
+   FE_UPWARD           round toward +Inf
+   FE_DOWNWARD         round toward -Inf
+   FE_TOWARDZERO       round toward 0
+*/
+#include <bits/fenv.h>
+
+__BEGIN_DECLS
+
+/* Floating-point exception handling.  */
+
+/* Clear the supported exceptions represented by EXCEPTS.  */
+extern int feclearexcept (int __excepts) __THROW;
+
+/* Store implementation-defined representation of the exception flags
+   indicated by EXCEPTS in the object pointed to by FLAGP.  */
+extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
+
+/* Raise the supported exceptions represented by EXCEPTS.  */
+extern int feraiseexcept (int __excepts) __THROW;
+
+/* Set complete status for exceptions indicated by EXCEPTS according to
+   the representation in the object pointed to by FLAGP.  */
+extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
+
+/* Determine which of subset of the exceptions specified by EXCEPTS are
+   currently set.  */
+extern int fetestexcept (int __excepts) __THROW;
+
+
+/* Rounding control.  */
+
+/* Get current rounding direction.  */
+extern int fegetround (void) __THROW __attribute_pure__;
+
+/* Establish the rounding direction represented by ROUND.  */
+extern int fesetround (int __rounding_direction) __THROW;
+
+
+/* Floating-point environment.  */
+
+/* Store the current floating-point environment in the object pointed
+   to by ENVP.  */
+extern int fegetenv (fenv_t *__envp) __THROW;
+
+/* Save the current environment in the object pointed to by ENVP, clear
+   exception flags and install a non-stop mode (if available) for all
+   exceptions.  */
+extern int feholdexcept (fenv_t *__envp) __THROW;
+
+/* Establish the floating-point environment represented by the object
+   pointed to by ENVP.  */
+extern int fesetenv (const fenv_t *__envp) __THROW;
+
+/* Save current exceptions in temporary storage, install environment
+   represented by object pointed to by ENVP and raise exceptions
+   according to saved exceptions.  */
+extern int feupdateenv (const fenv_t *__envp) __THROW;
+
+
+/* Include optimization.  */
+#ifdef __OPTIMIZE__
+# include <bits/fenvinline.h>
+#endif
+
+#ifdef __USE_GNU
+
+/* Enable individual exceptions.  Will not enable more exceptions than
+   EXCEPTS specifies.  Returns the previous enabled exceptions if all
+   exceptions are successfully set, otherwise returns -1.  */
+extern int feenableexcept (int __excepts) __THROW;
+
+/* Disable individual exceptions.  Will not disable more exceptions than
+   EXCEPTS specifies.  Returns the previous enabled exceptions if all
+   exceptions are successfully disabled, otherwise returns -1.  */
+extern int fedisableexcept (int __excepts) __THROW;
+
+/* Return enabled exceptions.  */
+extern int fegetexcept (void) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fenv.h */
diff --git a/lib/libdss-include/include/fmtmsg.h b/lib/libdss-include/include/fmtmsg.h
new file mode 100644 (file)
index 0000000..8b42d10
--- /dev/null
@@ -0,0 +1,105 @@
+/* Message display handling.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __FMTMSG_H
+#define __FMTMSG_H     1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Values to control `fmtmsg' function.  */
+enum
+{
+  MM_HARD = 0x001,     /* Source of the condition is hardware.  */
+#define MM_HARD MM_HARD
+  MM_SOFT = 0x002,     /* Source of the condition is software.  */
+#define MM_SOFT MM_SOFT
+  MM_FIRM = 0x004,     /* Source of the condition is firmware.  */
+#define MM_FIRM MM_FIRM
+  MM_APPL = 0x008,     /* Condition detected by application.  */
+#define MM_APPL MM_APPL
+  MM_UTIL = 0x010,     /* Condition detected by utility.  */
+#define MM_UTIL MM_UTIL
+  MM_OPSYS = 0x020,    /* Condition detected by operating system.  */
+#define MM_OPSYS MM_OPSYS
+  MM_RECOVER = 0x040,  /* Recoverable error.  */
+#define MM_RECOVER MM_RECOVER
+  MM_NRECOV = 0x080,   /* Non-recoverable error.  */
+#define MM_NRECOV MM_NRECOV
+  MM_PRINT = 0x100,    /* Display message in standard error.  */
+#define MM_PRINT MM_PRINT
+  MM_CONSOLE = 0x200   /* Display message on system console.  */
+#define MM_CONSOLE MM_CONSOLE
+};
+
+/* Values to be for SEVERITY parameter of `fmtmsg'.  */
+enum
+{
+  MM_NOSEV = 0,                /* No severity level provided for the message.  */
+#define MM_NOSEV MM_NOSEV
+  MM_HALT,             /* Error causing application to halt.  */
+#define MM_HALT MM_HALT
+  MM_ERROR,            /* Application has encountered a non-fatal fault.  */
+#define MM_ERROR MM_ERROR
+  MM_WARNING,          /* Application has detected unusual non-error
+                          condition.  */
+#define MM_WARNING MM_WARNING
+  MM_INFO              /* Informative message.  */
+#define MM_INFO MM_INFO
+};
+
+
+/* Macros which can be used as null values for the arguments of `fmtmsg'.  */
+#define MM_NULLLBL     ((char *) 0)
+#define MM_NULLSEV     0
+#define MM_NULLMC      ((long int) 0)
+#define MM_NULLTXT     ((char *) 0)
+#define MM_NULLACT     ((char *) 0)
+#define MM_NULLTAG     ((char *) 0)
+
+
+/* Possible return values of `fmtmsg'.  */
+enum
+{
+  MM_NOTOK = -1,
+#define MM_NOTOK MM_NOTOK
+  MM_OK = 0,
+#define MM_OK MM_OK
+  MM_NOMSG = 1,
+#define MM_NOMSG MM_NOMSG
+  MM_NOCON = 4
+#define MM_NOCON MM_NOCON
+};
+
+
+/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
+   and TAG to console or standard error.  */
+extern int fmtmsg (long int __classification, const char *__label,
+                  int __severity, const char *__text,
+                  const char *__action, const char *__tag);
+
+#ifdef __USE_MISC
+/* Add or remove severity level.  */
+extern int addseverity (int __severity, const char *__string) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fmtmsg.h */
diff --git a/lib/libdss-include/include/fnmatch.h b/lib/libdss-include/include/fnmatch.h
new file mode 100644 (file)
index 0000000..fdfaf90
--- /dev/null
@@ -0,0 +1,62 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _FNMATCH_H
+#define        _FNMATCH_H      1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef FNM_PATHNAME
+#undef FNM_NOESCAPE
+#undef FNM_PERIOD
+
+/* Bits set in the FLAGS argument to `fnmatch'.  */
+#define        FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
+#define        FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define        FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
+
+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
+# define FNM_FILE_NAME  FNM_PATHNAME   /* Preferred GNU name.  */
+# define FNM_LEADING_DIR (1 << 3)      /* Ignore `/...' after a match.  */
+# define FNM_CASEFOLD   (1 << 4)       /* Compare without regard to case.  */
+# define FNM_EXTMATCH   (1 << 5)       /* Use ksh-like extended matching. */
+#endif
+
+/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
+#define        FNM_NOMATCH     1
+
+/* This value is returned if the implementation does not support
+   `fnmatch'.  Since this is not the case here it will never be
+   returned but the conformance test suites still require the symbol
+   to be defined.  */
+#ifdef _XOPEN_SOURCE
+# define FNM_NOSYS     (-1)
+#endif
+
+/* Match NAME against the filename pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch (const char *__pattern, const char *__name, int __flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/lib/libdss-include/include/fpu_control.h b/lib/libdss-include/include/fpu_control.h
new file mode 100644 (file)
index 0000000..7e74445
--- /dev/null
@@ -0,0 +1,81 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AARCH64_FPU_CONTROL_H
+#define _AARCH64_FPU_CONTROL_H
+
+/* Macros for accessing the FPCR and FPSR.  */
+
+#define _FPU_GETCW(fpcr) \
+  __asm__ __volatile__ ("mrs   %0, fpcr" : "=r" (fpcr))
+
+#define _FPU_SETCW(fpcr) \
+  __asm__ __volatile__ ("msr   fpcr, %0" : : "r" (fpcr))
+
+#define _FPU_GETFPSR(fpsr) \
+  __asm__ __volatile__ ("mrs   %0, fpsr" : "=r" (fpsr))
+
+#define _FPU_SETFPSR(fpsr) \
+  __asm__ __volatile__ ("msr   fpsr, %0" : : "r" (fpsr))
+
+/* Reserved bits should be preserved when modifying register
+   contents. These two masks indicate which bits in each of FPCR and
+   FPSR should not be changed.  */
+
+#define _FPU_RESERVED          0xfe0fe0ff
+#define _FPU_FPSR_RESERVED     0x0fffffe0
+
+#define _FPU_DEFAULT           0x00000000
+#define _FPU_FPSR_DEFAULT      0x00000000
+
+/* Layout of FPCR and FPSR:
+
+   |       |       |       |       |       |       |       |
+   0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0
+   s s s s s                                       s     s s s s s
+             c c c c c c c               c c c c c
+   N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I
+           C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O
+             P     O O R R Z N N N E K K E E E E E C K K C C C C C
+                   D D I I P
+                   E E D D
+                       E E
+ */
+
+#define _FPU_FPCR_RM_MASK  0xc00000
+
+#define _FPU_FPCR_MASK_IXE 0x1000
+#define _FPU_FPCR_MASK_UFE 0x0800
+#define _FPU_FPCR_MASK_OFE 0x0400
+#define _FPU_FPCR_MASK_DZE 0x0200
+#define _FPU_FPCR_MASK_IOE 0x0100
+
+#define _FPU_FPCR_IEEE                       \
+  (_FPU_DEFAULT  | _FPU_FPCR_MASK_IXE |             \
+   _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \
+   _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE)
+
+#define _FPU_FPSR_IEEE 0
+
+typedef unsigned int fpu_control_t;
+typedef unsigned int fpu_fpsr_t;
+
+/* Default control word set at startup.  */
+extern fpu_control_t __fpu_control;
+
+#endif
diff --git a/lib/libdss-include/include/fstab.h b/lib/libdss-include/include/fstab.h
new file mode 100644 (file)
index 0000000..9f17e1b
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fstab.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _FSTAB_H
+#define _FSTAB_H       1
+
+#include <features.h>
+
+/*
+ * File system table, see fstab(5).
+ *
+ * Used by dump, mount, umount, swapon, fsck, df, ...
+ *
+ * For ufs fs_spec field is the block special name.  Programs that want to
+ * use the character special name must create that name by prepending a 'r'
+ * after the right most slash.  Quota files are always named "quotas", so
+ * if type is "rq", then use concatenation of fs_file and "quotas" to locate
+ * quota file.
+ */
+#define        _PATH_FSTAB     "/etc/fstab"
+#define        FSTAB           "/etc/fstab"    /* deprecated */
+
+#define        FSTAB_RW        "rw"            /* read/write device */
+#define        FSTAB_RQ        "rq"            /* read/write with quotas */
+#define        FSTAB_RO        "ro"            /* read-only device */
+#define        FSTAB_SW        "sw"            /* swap device */
+#define        FSTAB_XX        "xx"            /* ignore totally */
+
+struct fstab
+  {
+    char *fs_spec;                     /* block special device name */
+    char *fs_file;                     /* file system path prefix */
+    char *fs_vfstype;                  /* File system type, ufs, nfs */
+    char *fs_mntops;                   /* Mount options ala -o */
+    const char *fs_type;               /* FSTAB_* from fs_mntops */
+    int        fs_freq;                        /* dump frequency, in days */
+    int        fs_passno;                      /* pass number on parallel dump */
+  };
+
+
+__BEGIN_DECLS
+
+extern struct fstab *getfsent (void) __THROW;
+extern struct fstab *getfsspec (const char *__name) __THROW;
+extern struct fstab *getfsfile (const char *__name) __THROW;
+extern int setfsent (void) __THROW;
+extern void endfsent (void) __THROW;
+
+__END_DECLS
+
+#endif /* fstab.h */
diff --git a/lib/libdss-include/include/fts.h b/lib/libdss-include/include/fts.h
new file mode 100644 (file)
index 0000000..127a0d2
--- /dev/null
@@ -0,0 +1,215 @@
+/* File tree traversal functions declarations.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fts.h       8.3 (Berkeley) 8/14/94
+ */
+
+#ifndef        _FTS_H
+#define        _FTS_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+typedef struct {
+       struct _ftsent *fts_cur;        /* current node */
+       struct _ftsent *fts_child;      /* linked list of children */
+       struct _ftsent **fts_array;     /* sort array */
+       dev_t fts_dev;                  /* starting device # */
+       char *fts_path;                 /* path for this descent */
+       int fts_rfd;                    /* fd for root */
+       int fts_pathlen;                /* sizeof(path) */
+       int fts_nitems;                 /* elements in the sort array */
+       int (*fts_compar) (const void *, const void *); /* compare fn */
+
+#define        FTS_COMFOLLOW   0x0001          /* follow command line symlinks */
+#define        FTS_LOGICAL     0x0002          /* logical walk */
+#define        FTS_NOCHDIR     0x0004          /* don't change directories */
+#define        FTS_NOSTAT      0x0008          /* don't get stat info */
+#define        FTS_PHYSICAL    0x0010          /* physical walk */
+#define        FTS_SEEDOT      0x0020          /* return dot and dot-dot */
+#define        FTS_XDEV        0x0040          /* don't cross devices */
+#define FTS_WHITEOUT   0x0080          /* return whiteout information */
+#define        FTS_OPTIONMASK  0x00ff          /* valid user option mask */
+
+#define        FTS_NAMEONLY    0x0100          /* (private) child names only */
+#define        FTS_STOP        0x0200          /* (private) unrecoverable error */
+       int fts_options;                /* fts_open options, global flags */
+} FTS;
+
+#ifdef __USE_LARGEFILE64
+typedef struct {
+       struct _ftsent64 *fts_cur;      /* current node */
+       struct _ftsent64 *fts_child;    /* linked list of children */
+       struct _ftsent64 **fts_array;   /* sort array */
+       dev_t fts_dev;                  /* starting device # */
+       char *fts_path;                 /* path for this descent */
+       int fts_rfd;                    /* fd for root */
+       int fts_pathlen;                /* sizeof(path) */
+       int fts_nitems;                 /* elements in the sort array */
+       int (*fts_compar) (const void *, const void *); /* compare fn */
+       int fts_options;                /* fts_open options, global flags */
+} FTS64;
+#endif
+
+typedef struct _ftsent {
+       struct _ftsent *fts_cycle;      /* cycle node */
+       struct _ftsent *fts_parent;     /* parent directory */
+       struct _ftsent *fts_link;       /* next file in directory */
+       long fts_number;                /* local numeric value */
+       void *fts_pointer;              /* local address value */
+       char *fts_accpath;              /* access path */
+       char *fts_path;                 /* root path */
+       int fts_errno;                  /* errno for this node */
+       int fts_symfd;                  /* fd for symlink */
+       u_short fts_pathlen;            /* strlen(fts_path) */
+       u_short fts_namelen;            /* strlen(fts_name) */
+
+       ino_t fts_ino;                  /* inode */
+       dev_t fts_dev;                  /* device */
+       nlink_t fts_nlink;              /* link count */
+
+#define        FTS_ROOTPARENTLEVEL     -1
+#define        FTS_ROOTLEVEL            0
+       short fts_level;                /* depth (-1 to N) */
+
+#define        FTS_D            1              /* preorder directory */
+#define        FTS_DC           2              /* directory that causes cycles */
+#define        FTS_DEFAULT      3              /* none of the above */
+#define        FTS_DNR          4              /* unreadable directory */
+#define        FTS_DOT          5              /* dot or dot-dot */
+#define        FTS_DP           6              /* postorder directory */
+#define        FTS_ERR          7              /* error; errno is set */
+#define        FTS_F            8              /* regular file */
+#define        FTS_INIT         9              /* initialized only */
+#define        FTS_NS          10              /* stat(2) failed */
+#define        FTS_NSOK        11              /* no stat(2) requested */
+#define        FTS_SL          12              /* symbolic link */
+#define        FTS_SLNONE      13              /* symbolic link without target */
+#define FTS_W          14              /* whiteout object */
+       u_short fts_info;               /* user flags for FTSENT structure */
+
+#define        FTS_DONTCHDIR    0x01           /* don't chdir .. to the parent */
+#define        FTS_SYMFOLLOW    0x02           /* followed a symlink to get here */
+       u_short fts_flags;              /* private flags for FTSENT structure */
+
+#define        FTS_AGAIN        1              /* read node again */
+#define        FTS_FOLLOW       2              /* follow symbolic link */
+#define        FTS_NOINSTR      3              /* no instructions */
+#define        FTS_SKIP         4              /* discard node */
+       u_short fts_instr;              /* fts_set() instructions */
+
+       struct stat *fts_statp;         /* stat(2) information */
+       char fts_name[1];               /* file name */
+} FTSENT;
+
+#ifdef __USE_LARGEFILE64
+typedef struct _ftsent64 {
+       struct _ftsent64 *fts_cycle;    /* cycle node */
+       struct _ftsent64 *fts_parent;   /* parent directory */
+       struct _ftsent64 *fts_link;     /* next file in directory */
+       long fts_number;                /* local numeric value */
+       void *fts_pointer;              /* local address value */
+       char *fts_accpath;              /* access path */
+       char *fts_path;                 /* root path */
+       int fts_errno;                  /* errno for this node */
+       int fts_symfd;                  /* fd for symlink */
+       u_short fts_pathlen;            /* strlen(fts_path) */
+       u_short fts_namelen;            /* strlen(fts_name) */
+
+       ino64_t fts_ino;                /* inode */
+       dev_t fts_dev;                  /* device */
+       nlink_t fts_nlink;              /* link count */
+
+       short fts_level;                /* depth (-1 to N) */
+
+       u_short fts_info;               /* user flags for FTSENT structure */
+
+       u_short fts_flags;              /* private flags for FTSENT structure */
+
+       u_short fts_instr;              /* fts_set() instructions */
+
+       struct stat64 *fts_statp;       /* stat(2) information */
+       char fts_name[1];               /* file name */
+} FTSENT64;
+#endif
+
+__BEGIN_DECLS
+#ifndef __USE_FILE_OFFSET64
+FTSENT *fts_children (FTS *, int);
+int     fts_close (FTS *);
+FTS    *fts_open (char * const *, int,
+                  int (*)(const FTSENT **, const FTSENT **));
+FTSENT *fts_read (FTS *);
+int     fts_set (FTS *, FTSENT *, int) __THROW;
+#else
+# ifdef __REDIRECT
+FTSENT *__REDIRECT (fts_children, (FTS *, int), fts64_children);
+int     __REDIRECT (fts_close, (FTS *), fts64_close);
+FTS    *__REDIRECT (fts_open, (char * const *, int,
+                               int (*)(const FTSENT **, const FTSENT **)),
+                    fts64_open);
+FTSENT *__REDIRECT (fts_read, (FTS *), fts64_read);
+int     __REDIRECT (fts_set, (FTS *, FTSENT *, int), fts64_set) __THROW;
+# else
+#  define fts_children fts64_children
+#  define fts_close fts64_close
+#  define fts_open fts64_open
+#  define fts_read fts64_read
+#  define fts_set fts64_set
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+FTSENT64 *fts64_children (FTS64 *, int);
+int      fts64_close (FTS64 *);
+FTS64   *fts64_open (char * const *, int,
+                     int (*)(const FTSENT64 **, const FTSENT64 **));
+FTSENT64 *fts64_read (FTS64 *);
+int     fts64_set (FTS64 *, FTSENT64 *, int) __THROW;
+#endif
+__END_DECLS
+
+#endif /* fts.h */
diff --git a/lib/libdss-include/include/ftw.h b/lib/libdss-include/include/ftw.h
new file mode 100644 (file)
index 0000000..fd4bc36
--- /dev/null
@@ -0,0 +1,177 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     X/Open Portability Guide 4.2: ftw.h
+ */
+
+#ifndef _FTW_H
+#define        _FTW_H  1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+
+__BEGIN_DECLS
+
+/* Values for the FLAG argument to the user function passed to `ftw'
+   and 'nftw'.  */
+enum
+{
+  FTW_F,               /* Regular file.  */
+#define FTW_F   FTW_F
+  FTW_D,               /* Directory.  */
+#define FTW_D   FTW_D
+  FTW_DNR,             /* Unreadable directory.  */
+#define FTW_DNR         FTW_DNR
+  FTW_NS,              /* Unstatable file.  */
+#define FTW_NS  FTW_NS
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+
+  FTW_SL,              /* Symbolic link.  */
+# define FTW_SL         FTW_SL
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* These flags are only passed from the `nftw' function.  */
+  FTW_DP,              /* Directory, all subdirs have been visited. */
+# define FTW_DP         FTW_DP
+  FTW_SLN              /* Symbolic link naming non-existing file.  */
+# define FTW_SLN FTW_SLN
+
+#endif /* extended X/Open */
+};
+
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Flags for fourth argument of `nftw'.  */
+enum
+{
+  FTW_PHYS = 1,                /* Perform physical walk, ignore symlinks.  */
+# define FTW_PHYS      FTW_PHYS
+  FTW_MOUNT = 2,       /* Report only files on same file system as the
+                          argument.  */
+# define FTW_MOUNT     FTW_MOUNT
+  FTW_CHDIR = 4,       /* Change to current directory while processing it.  */
+# define FTW_CHDIR     FTW_CHDIR
+  FTW_DEPTH = 8                /* Report files in directory before directory itself.*/
+# define FTW_DEPTH     FTW_DEPTH
+# ifdef __USE_GNU
+  ,
+  FTW_ACTIONRETVAL = 16        /* Assume callback to return FTW_* values instead of
+                          zero to continue and non-zero to terminate.  */
+#  define FTW_ACTIONRETVAL FTW_ACTIONRETVAL
+# endif
+};
+
+#ifdef __USE_GNU
+/* Return values from callback functions.  */
+enum
+{
+  FTW_CONTINUE = 0,    /* Continue with next sibling or for FTW_D with the
+                          first child.  */
+# define FTW_CONTINUE  FTW_CONTINUE
+  FTW_STOP = 1,                /* Return from `ftw' or `nftw' with FTW_STOP as return
+                          value.  */
+# define FTW_STOP      FTW_STOP
+  FTW_SKIP_SUBTREE = 2,        /* Only meaningful for FTW_D: Don't walk through the
+                          subtree, instead just continue with its next
+                          sibling. */
+# define FTW_SKIP_SUBTREE FTW_SKIP_SUBTREE
+  FTW_SKIP_SIBLINGS = 3,/* Continue with FTW_DP callback for current directory
+                           (if FTW_DEPTH) and then its siblings.  */
+# define FTW_SKIP_SIBLINGS FTW_SKIP_SIBLINGS
+};
+#endif
+
+/* Structure used for fourth argument to callback function for `nftw'.  */
+struct FTW
+  {
+    int base;
+    int level;
+  };
+#endif /* extended X/Open */
+
+
+/* Convenient types for callback functions.  */
+typedef int (*__ftw_func_t) (const char *__filename,
+                            const struct stat *__status, int __flag);
+#ifdef __USE_LARGEFILE64
+typedef int (*__ftw64_func_t) (const char *__filename,
+                              const struct stat64 *__status, int __flag);
+#endif
+#ifdef __USE_XOPEN_EXTENDED
+typedef int (*__nftw_func_t) (const char *__filename,
+                             const struct stat *__status, int __flag,
+                             struct FTW *__info);
+# ifdef __USE_LARGEFILE64
+typedef int (*__nftw64_func_t) (const char *__filename,
+                               const struct stat64 *__status,
+                               int __flag, struct FTW *__info);
+# endif
+#endif
+
+/* Call a function on every element in a directory tree.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
+     __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
+                            int __descriptors), ftw64) __nonnull ((1, 2));
+# else
+#  define ftw ftw64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int ftw64 (const char *__dir, __ftw64_func_t __func,
+                 int __descriptors) __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Call a function on every element in a directory tree.  FLAG allows
+   to specify the behaviour more detailed.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
+                int __flag) __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
+                             int __descriptors, int __flag), nftw64)
+     __nonnull ((1, 2));
+#  else
+#   define nftw nftw64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int nftw64 (const char *__dir, __nftw64_func_t __func,
+                  int __descriptors, int __flag) __nonnull ((1, 2));
+# endif
+#endif
+
+__END_DECLS
+
+#endif /* ftw.h */
diff --git a/lib/libdss-include/include/gconv.h b/lib/libdss-include/include/gconv.h
new file mode 100644 (file)
index 0000000..8d8ce58
--- /dev/null
@@ -0,0 +1,154 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This header provides no interface for a user to the internals of
+   the gconv implementation in the libc.  Therefore there is no use
+   for these definitions beside for writing additional gconv modules.  */
+
+#ifndef _GCONV_H
+#define _GCONV_H       1
+
+#include <features.h>
+#define __need_mbstate_t
+#define __need_wint_t
+#include <wchar.h>
+#define __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+
+/* ISO 10646 value used to signal invalid value.  */
+#define __UNKNOWN_10646_CHAR   ((wchar_t) 0xfffd)
+
+/* Error codes for gconv functions.  */
+enum
+{
+  __GCONV_OK = 0,
+  __GCONV_NOCONV,
+  __GCONV_NODB,
+  __GCONV_NOMEM,
+
+  __GCONV_EMPTY_INPUT,
+  __GCONV_FULL_OUTPUT,
+  __GCONV_ILLEGAL_INPUT,
+  __GCONV_INCOMPLETE_INPUT,
+
+  __GCONV_ILLEGAL_DESCRIPTOR,
+  __GCONV_INTERNAL_ERROR
+};
+
+
+/* Flags the `__gconv_open' function can set.  */
+enum
+{
+  __GCONV_IS_LAST = 0x0001,
+  __GCONV_IGNORE_ERRORS = 0x0002,
+  __GCONV_SWAP = 0x0004,
+  __GCONV_TRANSLIT = 0x0008
+};
+
+
+/* Forward declarations.  */
+struct __gconv_step;
+struct __gconv_step_data;
+struct __gconv_loaded_object;
+
+
+/* Type of a conversion function.  */
+typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
+                           const unsigned char **, const unsigned char *,
+                           unsigned char **, size_t *, int, int);
+
+/* Type of a specialized conversion function for a single byte to INTERNAL.  */
+typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
+
+/* Constructor and destructor for local data for conversion step.  */
+typedef int (*__gconv_init_fct) (struct __gconv_step *);
+typedef void (*__gconv_end_fct) (struct __gconv_step *);
+
+
+/* Description of a conversion step.  */
+struct __gconv_step
+{
+  struct __gconv_loaded_object *__shlib_handle;
+  const char *__modname;
+
+  int __counter;
+
+  char *__from_name;
+  char *__to_name;
+
+  __gconv_fct __fct;
+  __gconv_btowc_fct __btowc_fct;
+  __gconv_init_fct __init_fct;
+  __gconv_end_fct __end_fct;
+
+  /* Information about the number of bytes needed or produced in this
+     step.  This helps optimizing the buffer sizes.  */
+  int __min_needed_from;
+  int __max_needed_from;
+  int __min_needed_to;
+  int __max_needed_to;
+
+  /* Flag whether this is a stateful encoding or not.  */
+  int __stateful;
+
+  void *__data;                /* Pointer to step-local data.  */
+};
+
+/* Additional data for steps in use of conversion descriptor.  This is
+   allocated by the `init' function.  */
+struct __gconv_step_data
+{
+  unsigned char *__outbuf;    /* Output buffer for this step.  */
+  unsigned char *__outbufend; /* Address of first byte after the output
+                                buffer.  */
+
+  /* Is this the last module in the chain.  */
+  int __flags;
+
+  /* Counter for number of invocations of the module function for this
+     descriptor.  */
+  int __invocation_counter;
+
+  /* Flag whether this is an internal use of the module (in the mb*towc*
+     and wc*tomb* functions) or regular with iconv(3).  */
+  int __internal_use;
+
+  __mbstate_t *__statep;
+  __mbstate_t __state; /* This element must not be used directly by
+                          any module; always use STATEP!  */
+};
+
+
+/* Combine conversion step description with data.  */
+typedef struct __gconv_info
+{
+  size_t __nsteps;
+  struct __gconv_step *__steps;
+  __extension__ struct __gconv_step_data __data __flexarr;
+} *__gconv_t;
+
+/* Transliteration using the locale's data.  */
+extern int __gconv_transliterate (struct __gconv_step *step,
+                                 struct __gconv_step_data *step_data,
+                                 const unsigned char *inbufstart,
+                                 const unsigned char **inbufp,
+                                 const unsigned char *inbufend,
+                                 unsigned char **outbufstart,
+                                 size_t *irreversible);
+
+#endif /* gconv.h */
diff --git a/lib/libdss-include/include/getopt.h b/lib/libdss-include/include/getopt.h
new file mode 100644 (file)
index 0000000..fab340a
--- /dev/null
@@ -0,0 +1,191 @@
+/* Declarations for getopt.
+   Copyright (C) 1989-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW      throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument         (or 0) if the option does not take an argument,
+   required_argument   (or 1) if the option requires an argument,
+   optional_argument   (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+# define no_argument           0
+# define required_argument     1
+# define optional_argument     2
+#endif /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, `optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in `optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU `getopt'.
+
+   The argument `--' causes premature termination of argument
+   scanning, explicitly telling `getopt' that there are no more
+   options.
+
+   If OPTS begins with `--', then non-option arguments are treated as
+   arguments to the option '\0'.  This behavior is specific to the GNU
+   `getopt'.  */
+
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in stdlib.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW;
+
+# if defined __need_getopt && defined __USE_POSIX2 \
+  && !defined __USE_POSIX_IMPLICITLY && !defined __USE_GNU
+/* The GNU getopt has more functionality than the standard version.  The
+   additional functionality can be disable at runtime.  This redirection
+   helps to also do this at runtime.  */
+#  ifdef __REDIRECT
+  extern int __REDIRECT_NTH (getopt, (int ___argc, char *const *___argv,
+                                     const char *__shortopts),
+                            __posix_getopt);
+#  else
+extern int __posix_getopt (int ___argc, char *const *___argv,
+                          const char *__shortopts) __THROW;
+#   define getopt __posix_getopt
+#  endif
+# endif
+#else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+#endif /* __GNU_LIBRARY__ */
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *const *___argv,
+                       const char *__shortopts,
+                       const struct option *__longopts, int *__longind)
+       __THROW;
+extern int getopt_long_only (int ___argc, char *const *___argv,
+                            const char *__shortopts,
+                            const struct option *__longopts, int *__longind)
+       __THROW;
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* getopt.h */
diff --git a/lib/libdss-include/include/glob.h b/lib/libdss-include/include/glob.h
new file mode 100644 (file)
index 0000000..e4548f6
--- /dev/null
@@ -0,0 +1,181 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _GLOB_H
+#define        _GLOB_H 1
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+/* We need `size_t' for the following definitions.  */
+#ifndef __size_t
+typedef __SIZE_TYPE__ __size_t;
+# if defined __USE_XOPEN || __USE_XOPEN2K8
+typedef __SIZE_TYPE__ size_t;
+# endif
+#else
+/* The GNU CC stddef.h version defines __size_t as empty.  We need a real
+   definition.  */
+# undef __size_t
+# define __size_t size_t
+#endif
+
+/* Bits set in the FLAGS argument to `glob'.  */
+#define        GLOB_ERR        (1 << 0)/* Return on read errors.  */
+#define        GLOB_MARK       (1 << 1)/* Append a slash to each name.  */
+#define        GLOB_NOSORT     (1 << 2)/* Don't sort the names.  */
+#define        GLOB_DOOFFS     (1 << 3)/* Insert PGLOB->gl_offs NULLs.  */
+#define        GLOB_NOCHECK    (1 << 4)/* If nothing matches, return the pattern.  */
+#define        GLOB_APPEND     (1 << 5)/* Append to results of a previous call.  */
+#define        GLOB_NOESCAPE   (1 << 6)/* Backslashes don't quote metacharacters.  */
+#define        GLOB_PERIOD     (1 << 7)/* Leading `.' can be matched by metachars.  */
+
+#if !defined __USE_POSIX2 || defined __USE_MISC
+# define GLOB_MAGCHAR   (1 << 8)/* Set in gl_flags if any metachars seen.  */
+# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */
+# define GLOB_BRACE     (1 << 10)/* Expand "{a,b}" to "a" "b".  */
+# define GLOB_NOMAGIC   (1 << 11)/* If no magic chars, return the pattern.  */
+# define GLOB_TILDE     (1 << 12)/* Expand ~user and ~ to home directories. */
+# define GLOB_ONLYDIR   (1 << 13)/* Match only directories.  */
+# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
+                                     if the user name is not available.  */
+# define __GLOB_FLAGS  (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
+                        GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
+                        GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \
+                        GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
+#else
+# define __GLOB_FLAGS  (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
+                        GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
+                        GLOB_PERIOD)
+#endif
+
+/* Error returns from `glob'.  */
+#define        GLOB_NOSPACE    1       /* Ran out of memory.  */
+#define        GLOB_ABORTED    2       /* Read error.  */
+#define        GLOB_NOMATCH    3       /* No matches found.  */
+#define GLOB_NOSYS     4       /* Not implemented.  */
+#ifdef __USE_GNU
+/* Previous versions of this file defined GLOB_ABEND instead of
+   GLOB_ABORTED.  Provide a compatibility definition here.  */
+# define GLOB_ABEND GLOB_ABORTED
+#endif
+
+/* Structure describing a globbing run.  */
+#ifdef __USE_GNU
+struct stat;
+#endif
+typedef struct
+  {
+    __size_t gl_pathc;         /* Count of paths matched by the pattern.  */
+    char **gl_pathv;           /* List of matched pathnames.  */
+    __size_t gl_offs;          /* Slots to reserve in `gl_pathv'.  */
+    int gl_flags;              /* Set to FLAGS, maybe | GLOB_MAGCHAR.  */
+
+    /* If the GLOB_ALTDIRFUNC flag is set, the following functions
+       are used instead of the normal file access functions.  */
+    void (*gl_closedir) (void *);
+#ifdef __USE_GNU
+    struct dirent *(*gl_readdir) (void *);
+#else
+    void *(*gl_readdir) (void *);
+#endif
+    void *(*gl_opendir) (const char *);
+#ifdef __USE_GNU
+    int (*gl_lstat) (const char *__restrict, struct stat *__restrict);
+    int (*gl_stat) (const char *__restrict, struct stat *__restrict);
+#else
+    int (*gl_lstat) (const char *__restrict, void *__restrict);
+    int (*gl_stat) (const char *__restrict, void *__restrict);
+#endif
+  } glob_t;
+
+#ifdef __USE_LARGEFILE64
+# ifdef __USE_GNU
+struct stat64;
+# endif
+typedef struct
+  {
+    __size_t gl_pathc;
+    char **gl_pathv;
+    __size_t gl_offs;
+    int gl_flags;
+
+    /* If the GLOB_ALTDIRFUNC flag is set, the following functions
+       are used instead of the normal file access functions.  */
+    void (*gl_closedir) (void *);
+# ifdef __USE_GNU
+    struct dirent64 *(*gl_readdir) (void *);
+# else
+    void *(*gl_readdir) (void *);
+# endif
+    void *(*gl_opendir) (const char *);
+# ifdef __USE_GNU
+    int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict);
+    int (*gl_stat) (const char *__restrict, struct stat64 *__restrict);
+# else
+    int (*gl_lstat) (const char *__restrict, void *__restrict);
+    int (*gl_stat) (const char *__restrict, void *__restrict);
+# endif
+  } glob64_t;
+#endif
+
+/* Do glob searching for PATTERN, placing results in PGLOB.
+   The bits defined above may be set in FLAGS.
+   If a directory cannot be opened or read and ERRFUNC is not nil,
+   it is called with the pathname that caused the error, and the
+   `errno' value from the failing call; if it returns non-zero
+   `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
+   If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
+   Otherwise, `glob' returns zero.  */
+#if !defined __USE_FILE_OFFSET64
+extern int glob (const char *__restrict __pattern, int __flags,
+                int (*__errfunc) (const char *, int),
+                glob_t *__restrict __pglob) __THROW;
+
+/* Free storage allocated in PGLOB by a previous `glob' call.  */
+extern void globfree (glob_t *__pglob) __THROW;
+#else
+extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern,
+                                 int __flags,
+                                 int (*__errfunc) (const char *, int),
+                                 glob_t *__restrict __pglob), glob64);
+
+extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int glob64 (const char *__restrict __pattern, int __flags,
+                  int (*__errfunc) (const char *, int),
+                  glob64_t *__restrict __pglob) __THROW;
+
+extern void globfree64 (glob64_t *__pglob) __THROW;
+#endif
+
+
+#ifdef __USE_GNU
+/* Return nonzero if PATTERN contains any metacharacters.
+   Metacharacters can be quoted with backslashes if QUOTE is nonzero.
+
+   This function is not part of the interface specified by POSIX.2
+   but several programs want to use it.  */
+extern int glob_pattern_p (const char *__pattern, int __quote) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* glob.h  */
diff --git a/lib/libdss-include/include/gnu-versions.h b/lib/libdss-include/include/gnu-versions.h
new file mode 100644 (file)
index 0000000..141a711
--- /dev/null
@@ -0,0 +1,52 @@
+/* Header with interface version macros for library pieces copied elsewhere.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GNU_VERSIONS_H
+#define        _GNU_VERSIONS_H 1
+
+/* This file exists to define these few macros.  Each specifies a version
+   number associated with the library interface of a piece of the C library
+   which is also distributed with other GNU packages.  These pieces are
+   both part of the GNU C library and also distributed with other GNU
+   packages so those packages may use their facilities on systems lacking
+   the GNU C library.  The source files for each piece surround all their
+   code with `#ifndef ELIDE_CODE' after defining it with this:
+
+   #define OBSTACK_INTERFACE_VERSION 1
+   #if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+   #include <gnu-versions.h>
+   #if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+   #define ELIDE_CODE
+   #endif
+   #endif
+
+   This allows those one to avoid compiling those files when part of a GNU
+   package not libc, on a system using a GNU C library that supports the
+   same interface.
+
+   Please preserve the format of the comments after each macro.  And
+   remember, if any of these versions change, the libc.so major version
+   number must change too (so avoid it)!  */
+
+#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
+#define _GNU_REGEX_INTERFACE_VERSION   1 /* vs posix/regex.c */
+#define _GNU_GLOB_INTERFACE_VERSION    1 /* vs posix/glob.c */
+#define _GNU_GETOPT_INTERFACE_VERSION  2 /* vs posix/getopt.c and
+                                            posix/getopt1.c */
+
+#endif /* gnu-versions.h */
diff --git a/lib/libdss-include/include/gnu/lib-names-lp64.h b/lib/libdss-include/include/gnu/lib-names-lp64.h
new file mode 100644 (file)
index 0000000..ed4c01f
--- /dev/null
@@ -0,0 +1,31 @@
+/* This file is automatically generated.  */
+#ifndef __GNU_LIB_NAMES_H
+# error "Never use <gnu/lib-names-lp64.h> directly; include <gnu/lib-names.h> instead."
+#endif
+
+#define LD_LINUX_AARCH64_SO             "ld-linux-aarch64.so.1"
+#define LD_SO                           "ld-linux-aarch64.so.1"
+#define LIBANL_SO                       "libanl.so.1"
+#define LIBBROKENLOCALE_SO              "libBrokenLocale.so.1"
+#define LIBCIDN_SO                      "libcidn.so.1"
+#define LIBCRYPT_SO                     "libcrypt.so.1"
+#define LIBC_SO                         "libc.so.6"
+#define LIBDL_SO                        "libdl.so.2"
+#define LIBGCC_S_SO                     "libgcc_s.so.1"
+#define LIBMVEC_SO                      "libmvec.so.1"
+#define LIBM_SO                         "libm.so.6"
+#define LIBNSL_SO                       "libnsl.so.1"
+#define LIBNSS_COMPAT_SO                "libnss_compat.so.2"
+#define LIBNSS_DB_SO                    "libnss_db.so.2"
+#define LIBNSS_DNS_SO                   "libnss_dns.so.2"
+#define LIBNSS_FILES_SO                 "libnss_files.so.2"
+#define LIBNSS_HESIOD_SO                "libnss_hesiod.so.2"
+#define LIBNSS_LDAP_SO                  "libnss_ldap.so.2"
+#define LIBNSS_NISPLUS_SO               "libnss_nisplus.so.2"
+#define LIBNSS_NIS_SO                   "libnss_nis.so.2"
+#define LIBNSS_TEST1_SO                 "libnss_test1.so.2"
+#define LIBPTHREAD_SO                   "libpthread.so.0"
+#define LIBRESOLV_SO                    "libresolv.so.2"
+#define LIBRT_SO                        "librt.so.1"
+#define LIBTHREAD_DB_SO                 "libthread_db.so.1"
+#define LIBUTIL_SO                      "libutil.so.1"
diff --git a/lib/libdss-include/include/gnu/lib-names.h b/lib/libdss-include/include/gnu/lib-names.h
new file mode 100644 (file)
index 0000000..67885f1
--- /dev/null
@@ -0,0 +1,16 @@
+/* This file is automatically generated.
+   It defines macros to allow user program to find the shared
+   library files which come as part of GNU libc.  */
+#ifndef __GNU_LIB_NAMES_H
+#define __GNU_LIB_NAMES_H      1
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+# include <gnu/lib-names-lp64.h>
+#endif
+#if defined __AARCH64EB__
+# include <gnu/lib-names-lp64_be.h>
+#endif
+
+#endif /* gnu/lib-names.h */
diff --git a/lib/libdss-include/include/gnu/libc-version.h b/lib/libdss-include/include/gnu/libc-version.h
new file mode 100644 (file)
index 0000000..780612e
--- /dev/null
@@ -0,0 +1,34 @@
+/* Interface to GNU libc specific functions for version information.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GNU_LIBC_VERSION_H
+#define        _GNU_LIBC_VERSION_H     1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return string describing release status of currently running GNU libc.  */
+extern const char *gnu_get_libc_release (void) __THROW;
+
+/* Return string describing version of currently running GNU libc.  */
+extern const char *gnu_get_libc_version (void) __THROW;
+
+__END_DECLS
+
+#endif /* gnu/libc-version.h */
diff --git a/lib/libdss-include/include/gnu/stubs-lp64.h b/lib/libdss-include/include/gnu/stubs-lp64.h
new file mode 100644 (file)
index 0000000..d2816d7
--- /dev/null
@@ -0,0 +1,32 @@
+/* This file is automatically generated.
+   It defines a symbol `__stub_FUNCTION' for each function
+   in the C library which is a stub, meaning it will fail
+   every time called, usually setting errno to ENOSYS.  */
+
+#ifdef _LIBC
+# error Applications may not define the macro _LIBC
+#endif
+
+#define __stub___compat_bdflush
+#define __stub___compat_create_module
+#define __stub___compat_get_kernel_syms
+#define __stub___compat_query_module
+#define __stub___compat_uselib
+#define __stub___kernel_rem_pio2l
+#define __stub_chflags
+#define __stub_fattach
+#define __stub_fchflags
+#define __stub_fdetach
+#define __stub_getmsg
+#define __stub_getpmsg
+#define __stub_gtty
+#define __stub_lchmod
+#define __stub_putmsg
+#define __stub_putpmsg
+#define __stub_revoke
+#define __stub_setlogin
+#define __stub_sigreturn
+#define __stub_sstk
+#define __stub_stty
+#define __stub_sysctl
+#define __stub_ustat
diff --git a/lib/libdss-include/include/gnu/stubs.h b/lib/libdss-include/include/gnu/stubs.h
new file mode 100644 (file)
index 0000000..02e5f41
--- /dev/null
@@ -0,0 +1,12 @@
+/* This file is automatically generated.
+   This file selects the right generated file of `__stub_FUNCTION' macros
+   based on the architecture being compiled for.  */
+
+#include <bits/wordsize.h>
+
+#if !defined __AARCH64EB__
+# include <gnu/stubs-lp64.h>
+#endif
+#if defined __AARCH64EB__
+# include <gnu/stubs-lp64_be.h>
+#endif
diff --git a/lib/libdss-include/include/grp.h b/lib/libdss-include/include/grp.h
new file mode 100644 (file)
index 0000000..e904ee2
--- /dev/null
@@ -0,0 +1,204 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 9.2.1 Group Database Access     <grp.h>
+ */
+
+#ifndef        _GRP_H
+#define        _GRP_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+
+/* For the Single Unix specification we must define this type here.  */
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K) && !defined __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+/* The group structure.         */
+struct group
+  {
+    char *gr_name;             /* Group name.  */
+    char *gr_passwd;           /* Password.    */
+    __gid_t gr_gid;            /* Group ID.    */
+    char **gr_mem;             /* Member list. */
+  };
+
+
+#ifdef __USE_MISC
+# define __need_FILE
+# include <stdio.h>
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Rewind the group-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setgrent (void);
+
+/* Close the group-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endgrent (void);
+
+/* Read an entry from the group-file stream, opening it if necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrent (void);
+#endif
+
+#ifdef __USE_MISC
+/* Read a group entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct group *fgetgrent (FILE *__stream);
+#endif
+
+#ifdef __USE_GNU
+/* Write the given entry onto the given stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putgrent (const struct group *__restrict __p,
+                    FILE *__restrict __f);
+#endif
+
+/* Search for an entry with a matching group ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrgid (__gid_t __gid);
+
+/* Search for an entry with a matching group name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct group *getgrnam (const char *__name);
+
+#ifdef __USE_POSIX
+
+# ifdef __USE_MISC
+/* Reasonable value for the buffer sized used in the reentrant
+   functions below.  But better use `sysconf'.  */
+#  define NSS_BUFLEN_GROUP     1024
+# endif
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+
+# ifdef __USE_GNU
+extern int getgrent_r (struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+# endif
+
+/* Search for an entry with a matching group ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getgrgid_r (__gid_t __gid, struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+
+/* Search for an entry with a matching group name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getgrnam_r (const char *__restrict __name,
+                      struct group *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct group **__restrict __result);
+
+# ifdef        __USE_MISC
+/* Read a group entry from STREAM.  This function is not standardized
+   an probably never will.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetgrent_r (FILE *__restrict __stream,
+                       struct group *__restrict __resultbuf,
+                       char *__restrict __buffer, size_t __buflen,
+                       struct group **__restrict __result);
+# endif
+
+#endif /* POSIX or reentrant */
+
+
+#ifdef __USE_MISC
+
+# define __need_size_t
+# include <stddef.h>
+
+/* Set the group set for the current user to GROUPS (N of them).  */
+extern int setgroups (size_t __n, const __gid_t *__groups) __THROW;
+
+/* Store at most *NGROUPS members of the group set for USER into
+   *GROUPS.  Also include GROUP.  The actual number of groups found is
+   returned in *NGROUPS.  Return -1 if the if *NGROUPS is too small.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getgrouplist (const char *__user, __gid_t __group,
+                        __gid_t *__groups, int *__ngroups);
+
+/* Initialize the group set for the current user
+   by reading the group database and using all groups
+   of which USER is a member.  Also include GROUP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int initgroups (const char *__user, __gid_t __group);
+
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* grp.h  */
diff --git a/lib/libdss-include/include/gshadow.h b/lib/libdss-include/include/gshadow.h
new file mode 100644 (file)
index 0000000..2afd8bd
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Declaration of types and functions for shadow group suite.  */
+
+#ifndef _GSHADOW_H
+#define _GSHADOW_H     1
+
+#include <features.h>
+
+#include <paths.h>
+
+#define        __need_FILE
+#include <stdio.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Path to the user database files.  */
+#define        GSHADOW _PATH_GSHADOW
+
+
+__BEGIN_DECLS
+
+/* Structure of the group file.  */
+struct sgrp
+  {
+    char *sg_namp;             /* Group name.  */
+    char *sg_passwd;           /* Encrypted password.  */
+    char **sg_adm;             /* Group administrator list.  */
+    char **sg_mem;             /* Group member list.  */
+  };
+
+
+/* Open database for reading.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void setsgent (void);
+
+/* Close database.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endsgent (void);
+
+/* Get next entry from database, perhaps after opening the file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *getsgent (void);
+
+/* Get shadow entry matching NAME.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *getsgnam (const char *__name);
+
+/* Read shadow entry from STRING.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *sgetsgent (const char *__string);
+
+/* Read next shadow entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct sgrp *fgetsgent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putsgent (const struct sgrp *__g, FILE *__stream);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of some of the functions above.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getsgent_r (struct sgrp *__result_buf, char *__buffer,
+                      size_t __buflen, struct sgrp **__result);
+
+extern int getsgnam_r (const char *__name, struct sgrp *__result_buf,
+                      char *__buffer, size_t __buflen,
+                      struct sgrp **__result);
+
+extern int sgetsgent_r (const char *__string, struct sgrp *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct sgrp **__result);
+
+extern int fgetsgent_r (FILE *__stream, struct sgrp *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct sgrp **__result);
+#endif /* misc */
+
+__END_DECLS
+
+#endif /* gshadow.h */
diff --git a/lib/libdss-include/include/iconv.h b/lib/libdss-include/include/iconv.h
new file mode 100644 (file)
index 0000000..0c95c98
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ICONV_H
+#define _ICONV_H       1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+
+__BEGIN_DECLS
+
+/* Identifier for conversion method from one codeset to another.  */
+typedef void *iconv_t;
+
+
+/* Allocate descriptor for code conversion from codeset FROMCODE to
+   codeset TOCODE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);
+
+/* Convert at most *INBYTESLEFT bytes from *INBUF according to the
+   code conversion algorithm specified by CD and place up to
+   *OUTBYTESLEFT bytes in buffer at *OUTBUF.  */
+extern size_t iconv (iconv_t __cd, char **__restrict __inbuf,
+                    size_t *__restrict __inbytesleft,
+                    char **__restrict __outbuf,
+                    size_t *__restrict __outbytesleft);
+
+/* Free resources allocated for descriptor CD for code conversion.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int iconv_close (iconv_t __cd);
+
+__END_DECLS
+
+#endif /* iconv.h */
diff --git a/lib/libdss-include/include/ieee754.h b/lib/libdss-include/include/ieee754.h
new file mode 100644 (file)
index 0000000..fb42140
--- /dev/null
@@ -0,0 +1,170 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IEEE754_H
+
+#define _IEEE754_H 1
+#include <features.h>
+
+#include <endian.h>
+
+__BEGIN_DECLS
+
+union ieee754_float
+  {
+    float f;
+
+    /* This is the IEEE 754 single-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:8;
+       unsigned int mantissa:23;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int mantissa:23;
+       unsigned int exponent:8;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:8;
+       unsigned int quiet_nan:1;
+       unsigned int mantissa:22;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       unsigned int mantissa:22;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:8;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee_nan;
+  };
+
+#define IEEE754_FLOAT_BIAS     0x7f /* Added to exponent.  */
+
+
+union ieee754_double
+  {
+    double d;
+
+    /* This is the IEEE 754 double-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:11;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:20;
+       unsigned int mantissa1:32;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:20;
+       unsigned int exponent:11;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:11;
+       unsigned int quiet_nan:1;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:19;
+       unsigned int mantissa1:32;
+#else
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:19;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:11;
+       unsigned int negative:1;
+#endif
+      } ieee_nan;
+  };
+
+#define IEEE754_DOUBLE_BIAS    0x3ff /* Added to exponent.  */
+
+
+union ieee854_long_double
+  {
+    long double d;
+
+    /* This is the IEEE 854 quad-precision format.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:15;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:16;
+       unsigned int mantissa1:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa3:32;
+#endif                         /* Big endian.  */
+#if    __BYTE_ORDER == __LITTLE_ENDIAN
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa3:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:16;
+       unsigned int exponent:15;
+       unsigned int negative:1;
+#endif                         /* Little endian.  */
+      } ieee;
+
+    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+    struct
+      {
+#if    __BYTE_ORDER == __BIG_ENDIAN
+       unsigned int negative:1;
+       unsigned int exponent:15;
+       unsigned int quiet_nan:1;
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa0:15;
+       unsigned int mantissa1:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa3:32;
+#else
+       /* Together these comprise the mantissa.  */
+       unsigned int mantissa3:32;
+       unsigned int mantissa2:32;
+       unsigned int mantissa1:32;
+       unsigned int mantissa0:15;
+       unsigned int quiet_nan:1;
+       unsigned int exponent:15;
+       unsigned int negative:1;
+#endif
+      } ieee_nan;
+  };
+
+#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent.  */
+
+__END_DECLS
+
+#endif /* ieee754.h */
diff --git a/lib/libdss-include/include/ifaddrs.h b/lib/libdss-include/include/ifaddrs.h
new file mode 100644 (file)
index 0000000..cd8d209
--- /dev/null
@@ -0,0 +1,73 @@
+/* ifaddrs.h -- declarations for getting network interface addresses
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _IFADDRS_H
+#define _IFADDRS_H     1
+
+#include <features.h>
+#include <sys/socket.h>
+
+__BEGIN_DECLS
+
+/* The `getifaddrs' function generates a linked list of these structures.
+   Each element of the list describes one network interface.  */
+struct ifaddrs
+{
+  struct ifaddrs *ifa_next;    /* Pointer to the next structure.  */
+
+  char *ifa_name;              /* Name of this network interface.  */
+  unsigned int ifa_flags;      /* Flags as from SIOCGIFFLAGS ioctl.  */
+
+  struct sockaddr *ifa_addr;   /* Network address of this interface.  */
+  struct sockaddr *ifa_netmask; /* Netmask of this interface.  */
+  union
+  {
+    /* At most one of the following two is valid.  If the IFF_BROADCAST
+       bit is set in `ifa_flags', then `ifa_broadaddr' is valid.  If the
+       IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid.
+       It is never the case that both these bits are set at once.  */
+    struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */
+    struct sockaddr *ifu_dstaddr; /* Point-to-point destination address.  */
+  } ifa_ifu;
+  /* These very same macros are defined by <net/if.h> for `struct ifaddr'.
+     So if they are defined already, the existing definitions will be fine.  */
+# ifndef ifa_broadaddr
+#  define ifa_broadaddr        ifa_ifu.ifu_broadaddr
+# endif
+# ifndef ifa_dstaddr
+#  define ifa_dstaddr  ifa_ifu.ifu_dstaddr
+# endif
+
+  void *ifa_data;              /* Address-specific data (may be unused).  */
+};
+
+
+/* Create a linked list of `struct ifaddrs' structures, one for each
+   network interface on the host machine.  If successful, store the
+   list in *IFAP and return 0.  On errors, return -1 and set `errno'.
+
+   The storage returned in *IFAP is allocated dynamically and can
+   only be properly freed by passing it to `freeifaddrs'.  */
+extern int getifaddrs (struct ifaddrs **__ifap) __THROW;
+
+/* Reclaim the storage allocated by a previous `getifaddrs' call.  */
+extern void freeifaddrs (struct ifaddrs *__ifa)  __THROW;
+
+__END_DECLS
+
+#endif /* ifaddrs.h */
diff --git a/lib/libdss-include/include/inttypes.h b/lib/libdss-include/include/inttypes.h
new file mode 100644 (file)
index 0000000..1207bf2
--- /dev/null
@@ -0,0 +1,434 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99: 7.8 Format conversion of integer types <inttypes.h>
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H    1
+
+#include <features.h>
+/* Get the type definitions.  */
+#include <stdint.h>
+
+/* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
+#ifndef ____gwchar_t_defined
+# ifdef __cplusplus
+#  define __gwchar_t wchar_t
+# elif defined __WCHAR_TYPE__
+typedef __WCHAR_TYPE__ __gwchar_t;
+# else
+#  define __need_wchar_t
+#  include <stddef.h>
+typedef wchar_t __gwchar_t;
+# endif
+# define ____gwchar_t_defined  1
+#endif
+
+# if __WORDSIZE == 64
+#  define __PRI64_PREFIX       "l"
+#  define __PRIPTR_PREFIX      "l"
+# else
+#  define __PRI64_PREFIX       "ll"
+#  define __PRIPTR_PREFIX
+# endif
+
+/* Macros for printing format specifiers.  */
+
+/* Decimal notation.  */
+# define PRId8         "d"
+# define PRId16                "d"
+# define PRId32                "d"
+# define PRId64                __PRI64_PREFIX "d"
+
+# define PRIdLEAST8    "d"
+# define PRIdLEAST16   "d"
+# define PRIdLEAST32   "d"
+# define PRIdLEAST64   __PRI64_PREFIX "d"
+
+# define PRIdFAST8     "d"
+# define PRIdFAST16    __PRIPTR_PREFIX "d"
+# define PRIdFAST32    __PRIPTR_PREFIX "d"
+# define PRIdFAST64    __PRI64_PREFIX "d"
+
+
+# define PRIi8         "i"
+# define PRIi16                "i"
+# define PRIi32                "i"
+# define PRIi64                __PRI64_PREFIX "i"
+
+# define PRIiLEAST8    "i"
+# define PRIiLEAST16   "i"
+# define PRIiLEAST32   "i"
+# define PRIiLEAST64   __PRI64_PREFIX "i"
+
+# define PRIiFAST8     "i"
+# define PRIiFAST16    __PRIPTR_PREFIX "i"
+# define PRIiFAST32    __PRIPTR_PREFIX "i"
+# define PRIiFAST64    __PRI64_PREFIX "i"
+
+/* Octal notation.  */
+# define PRIo8         "o"
+# define PRIo16                "o"
+# define PRIo32                "o"
+# define PRIo64                __PRI64_PREFIX "o"
+
+# define PRIoLEAST8    "o"
+# define PRIoLEAST16   "o"
+# define PRIoLEAST32   "o"
+# define PRIoLEAST64   __PRI64_PREFIX "o"
+
+# define PRIoFAST8     "o"
+# define PRIoFAST16    __PRIPTR_PREFIX "o"
+# define PRIoFAST32    __PRIPTR_PREFIX "o"
+# define PRIoFAST64    __PRI64_PREFIX "o"
+
+/* Unsigned integers.  */
+# define PRIu8         "u"
+# define PRIu16                "u"
+# define PRIu32                "u"
+# define PRIu64                __PRI64_PREFIX "u"
+
+# define PRIuLEAST8    "u"
+# define PRIuLEAST16   "u"
+# define PRIuLEAST32   "u"
+# define PRIuLEAST64   __PRI64_PREFIX "u"
+
+# define PRIuFAST8     "u"
+# define PRIuFAST16    __PRIPTR_PREFIX "u"
+# define PRIuFAST32    __PRIPTR_PREFIX "u"
+# define PRIuFAST64    __PRI64_PREFIX "u"
+
+/* lowercase hexadecimal notation.  */
+# define PRIx8         "x"
+# define PRIx16                "x"
+# define PRIx32                "x"
+# define PRIx64                __PRI64_PREFIX "x"
+
+# define PRIxLEAST8    "x"
+# define PRIxLEAST16   "x"
+# define PRIxLEAST32   "x"
+# define PRIxLEAST64   __PRI64_PREFIX "x"
+
+# define PRIxFAST8     "x"
+# define PRIxFAST16    __PRIPTR_PREFIX "x"
+# define PRIxFAST32    __PRIPTR_PREFIX "x"
+# define PRIxFAST64    __PRI64_PREFIX "x"
+
+/* UPPERCASE hexadecimal notation.  */
+# define PRIX8         "X"
+# define PRIX16                "X"
+# define PRIX32                "X"
+# define PRIX64                __PRI64_PREFIX "X"
+
+# define PRIXLEAST8    "X"
+# define PRIXLEAST16   "X"
+# define PRIXLEAST32   "X"
+# define PRIXLEAST64   __PRI64_PREFIX "X"
+
+# define PRIXFAST8     "X"
+# define PRIXFAST16    __PRIPTR_PREFIX "X"
+# define PRIXFAST32    __PRIPTR_PREFIX "X"
+# define PRIXFAST64    __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intmax_t' and `uintmax_t'.  */
+# define PRIdMAX       __PRI64_PREFIX "d"
+# define PRIiMAX       __PRI64_PREFIX "i"
+# define PRIoMAX       __PRI64_PREFIX "o"
+# define PRIuMAX       __PRI64_PREFIX "u"
+# define PRIxMAX       __PRI64_PREFIX "x"
+# define PRIXMAX       __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intptr_t' and `uintptr_t'.  */
+# define PRIdPTR       __PRIPTR_PREFIX "d"
+# define PRIiPTR       __PRIPTR_PREFIX "i"
+# define PRIoPTR       __PRIPTR_PREFIX "o"
+# define PRIuPTR       __PRIPTR_PREFIX "u"
+# define PRIxPTR       __PRIPTR_PREFIX "x"
+# define PRIXPTR       __PRIPTR_PREFIX "X"
+
+
+/* Macros for scanning format specifiers.  */
+
+/* Signed decimal notation.  */
+# define SCNd8         "hhd"
+# define SCNd16                "hd"
+# define SCNd32                "d"
+# define SCNd64                __PRI64_PREFIX "d"
+
+# define SCNdLEAST8    "hhd"
+# define SCNdLEAST16   "hd"
+# define SCNdLEAST32   "d"
+# define SCNdLEAST64   __PRI64_PREFIX "d"
+
+# define SCNdFAST8     "hhd"
+# define SCNdFAST16    __PRIPTR_PREFIX "d"
+# define SCNdFAST32    __PRIPTR_PREFIX "d"
+# define SCNdFAST64    __PRI64_PREFIX "d"
+
+/* Signed decimal notation.  */
+# define SCNi8         "hhi"
+# define SCNi16                "hi"
+# define SCNi32                "i"
+# define SCNi64                __PRI64_PREFIX "i"
+
+# define SCNiLEAST8    "hhi"
+# define SCNiLEAST16   "hi"
+# define SCNiLEAST32   "i"
+# define SCNiLEAST64   __PRI64_PREFIX "i"
+
+# define SCNiFAST8     "hhi"
+# define SCNiFAST16    __PRIPTR_PREFIX "i"
+# define SCNiFAST32    __PRIPTR_PREFIX "i"
+# define SCNiFAST64    __PRI64_PREFIX "i"
+
+/* Unsigned decimal notation.  */
+# define SCNu8         "hhu"
+# define SCNu16                "hu"
+# define SCNu32                "u"
+# define SCNu64                __PRI64_PREFIX "u"
+
+# define SCNuLEAST8    "hhu"
+# define SCNuLEAST16   "hu"
+# define SCNuLEAST32   "u"
+# define SCNuLEAST64   __PRI64_PREFIX "u"
+
+# define SCNuFAST8     "hhu"
+# define SCNuFAST16    __PRIPTR_PREFIX "u"
+# define SCNuFAST32    __PRIPTR_PREFIX "u"
+# define SCNuFAST64    __PRI64_PREFIX "u"
+
+/* Octal notation.  */
+# define SCNo8         "hho"
+# define SCNo16                "ho"
+# define SCNo32                "o"
+# define SCNo64                __PRI64_PREFIX "o"
+
+# define SCNoLEAST8    "hho"
+# define SCNoLEAST16   "ho"
+# define SCNoLEAST32   "o"
+# define SCNoLEAST64   __PRI64_PREFIX "o"
+
+# define SCNoFAST8     "hho"
+# define SCNoFAST16    __PRIPTR_PREFIX "o"
+# define SCNoFAST32    __PRIPTR_PREFIX "o"
+# define SCNoFAST64    __PRI64_PREFIX "o"
+
+/* Hexadecimal notation.  */
+# define SCNx8         "hhx"
+# define SCNx16                "hx"
+# define SCNx32                "x"
+# define SCNx64                __PRI64_PREFIX "x"
+
+# define SCNxLEAST8    "hhx"
+# define SCNxLEAST16   "hx"
+# define SCNxLEAST32   "x"
+# define SCNxLEAST64   __PRI64_PREFIX "x"
+
+# define SCNxFAST8     "hhx"
+# define SCNxFAST16    __PRIPTR_PREFIX "x"
+# define SCNxFAST32    __PRIPTR_PREFIX "x"
+# define SCNxFAST64    __PRI64_PREFIX "x"
+
+
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX       __PRI64_PREFIX "d"
+# define SCNiMAX       __PRI64_PREFIX "i"
+# define SCNoMAX       __PRI64_PREFIX "o"
+# define SCNuMAX       __PRI64_PREFIX "u"
+# define SCNxMAX       __PRI64_PREFIX "x"
+
+/* Macros for scaning `intptr_t' and `uintptr_t'.  */
+# define SCNdPTR       __PRIPTR_PREFIX "d"
+# define SCNiPTR       __PRIPTR_PREFIX "i"
+# define SCNoPTR       __PRIPTR_PREFIX "o"
+# define SCNuPTR       __PRIPTR_PREFIX "u"
+# define SCNxPTR       __PRIPTR_PREFIX "x"
+
+
+__BEGIN_DECLS
+
+#if __WORDSIZE == 64
+
+/* We have to define the `uintmax_t' type using `ldiv_t'.  */
+typedef struct
+  {
+    long int quot;             /* Quotient.  */
+    long int rem;              /* Remainder.  */
+  } imaxdiv_t;
+
+#else
+
+/* We have to define the `uintmax_t' type using `lldiv_t'.  */
+typedef struct
+  {
+    __extension__ long long int quot;  /* Quotient.  */
+    __extension__ long long int rem;   /* Remainder.  */
+  } imaxdiv_t;
+
+#endif
+
+
+/* Compute absolute value of N.  */
+extern intmax_t imaxabs (intmax_t __n) __THROW __attribute__ ((__const__));
+
+/* Return the `imaxdiv_t' representation of the value of NUMER over DENOM. */
+extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
+      __THROW __attribute__ ((__const__));
+
+/* Like `strtol' but convert to `intmax_t'.  */
+extern intmax_t strtoimax (const char *__restrict __nptr,
+                          char **__restrict __endptr, int __base) __THROW;
+
+/* Like `strtoul' but convert to `uintmax_t'.  */
+extern uintmax_t strtoumax (const char *__restrict __nptr,
+                           char ** __restrict __endptr, int __base) __THROW;
+
+/* Like `wcstol' but convert to `intmax_t'.  */
+extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
+                          __gwchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
+                           __gwchar_t ** __restrict __endptr, int __base)
+     __THROW;
+
+#ifdef __USE_EXTERN_INLINES
+
+# if __WORDSIZE == 64
+
+extern long int __strtol_internal (const char *__restrict __nptr,
+                                  char **__restrict __endptr,
+                                  int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtol_internal (nptr, endptr, base, 0);
+}
+
+extern unsigned long int __strtoul_internal (const char *__restrict __nptr,
+                                            char ** __restrict __endptr,
+                                            int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoul_internal (nptr, endptr, base, 0);
+}
+
+extern long int __wcstol_internal (const __gwchar_t * __restrict __nptr,
+                                  __gwchar_t **__restrict __endptr,
+                                  int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstol_internal (nptr, endptr, base, 0);
+}
+
+extern unsigned long int __wcstoul_internal (const __gwchar_t *
+                                            __restrict __nptr,
+                                            __gwchar_t **
+                                            __restrict __endptr,
+                                            int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoul_internal (nptr, endptr, base, 0);
+}
+
+# else /* __WORDSIZE == 32 */
+
+__extension__
+extern long long int __strtoll_internal (const char *__restrict __nptr,
+                                        char **__restrict __endptr,
+                                        int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoll_internal (nptr, endptr, base, 0);
+}
+
+__extension__
+extern unsigned long long int __strtoull_internal (const char *
+                                                  __restrict __nptr,
+                                                  char **
+                                                  __restrict __endptr,
+                                                  int __base,
+                                                  int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoull_internal (nptr, endptr, base, 0);
+}
+
+__extension__
+extern long long int __wcstoll_internal (const __gwchar_t *__restrict __nptr,
+                                        __gwchar_t **__restrict __endptr,
+                                        int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoll_internal (nptr, endptr, base, 0);
+}
+
+
+__extension__
+extern unsigned long long int __wcstoull_internal (const __gwchar_t *
+                                                  __restrict __nptr,
+                                                  __gwchar_t **
+                                                  __restrict __endptr,
+                                                  int __base,
+                                                  int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoull_internal (nptr, endptr, base, 0);
+}
+
+# endif        /* __WORDSIZE == 32     */
+#endif /* Use extern inlines.  */
+
+__END_DECLS
+
+#endif /* inttypes.h */
diff --git a/lib/libdss-include/include/langinfo.h b/lib/libdss-include/include/langinfo.h
new file mode 100644 (file)
index 0000000..481e226
--- /dev/null
@@ -0,0 +1,599 @@
+/* Access to locale-dependent parameters.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LANGINFO_H
+#define        _LANGINFO_H 1
+
+/* Get the type definition.  */
+#include <nl_types.h>
+
+#include <bits/locale.h>       /* Define the __LC_* category names.  */
+
+
+__BEGIN_DECLS
+
+/* Construct an `nl_item' value for `nl_langinfo' from a locale category
+   (LC_*) and an item index within the category.  Some code may depend on
+   the item values within a category increasing monotonically with the
+   indices.  */
+#define _NL_ITEM(category, index)      (((category) << 16) | (index))
+
+/* Extract the category and item index from a constructed `nl_item' value.  */
+#define _NL_ITEM_CATEGORY(item)                ((int) (item) >> 16)
+#define _NL_ITEM_INDEX(item)           ((int) (item) & 0xffff)
+
+/* Enumeration of locale items that can be queried with `nl_langinfo'.  */
+enum
+{
+  /* LC_TIME category: date and time formatting.  */
+
+  /* Abbreviated days of the week. */
+  ABDAY_1 = _NL_ITEM (__LC_TIME, 0), /* Sun */
+#define ABDAY_1                        ABDAY_1
+  ABDAY_2,
+#define ABDAY_2                        ABDAY_2
+  ABDAY_3,
+#define ABDAY_3                        ABDAY_3
+  ABDAY_4,
+#define ABDAY_4                        ABDAY_4
+  ABDAY_5,
+#define ABDAY_5                        ABDAY_5
+  ABDAY_6,
+#define ABDAY_6                        ABDAY_6
+  ABDAY_7,
+#define ABDAY_7                        ABDAY_7
+
+  /* Long-named days of the week. */
+  DAY_1,                       /* Sunday */
+#define DAY_1                  DAY_1
+  DAY_2,                       /* Monday */
+#define DAY_2                  DAY_2
+  DAY_3,                       /* Tuesday */
+#define DAY_3                  DAY_3
+  DAY_4,                       /* Wednesday */
+#define DAY_4                  DAY_4
+  DAY_5,                       /* Thursday */
+#define DAY_5                  DAY_5
+  DAY_6,                       /* Friday */
+#define DAY_6                  DAY_6
+  DAY_7,                       /* Saturday */
+#define DAY_7                  DAY_7
+
+  /* Abbreviated month names.  */
+  ABMON_1,                     /* Jan */
+#define ABMON_1                        ABMON_1
+  ABMON_2,
+#define ABMON_2                        ABMON_2
+  ABMON_3,
+#define ABMON_3                        ABMON_3
+  ABMON_4,
+#define ABMON_4                        ABMON_4
+  ABMON_5,
+#define ABMON_5                        ABMON_5
+  ABMON_6,
+#define ABMON_6                        ABMON_6
+  ABMON_7,
+#define ABMON_7                        ABMON_7
+  ABMON_8,
+#define ABMON_8                        ABMON_8
+  ABMON_9,
+#define ABMON_9                        ABMON_9
+  ABMON_10,
+#define ABMON_10               ABMON_10
+  ABMON_11,
+#define ABMON_11               ABMON_11
+  ABMON_12,
+#define ABMON_12               ABMON_12
+
+  /* Long month names.  */
+  MON_1,                       /* January */
+#define MON_1                  MON_1
+  MON_2,
+#define MON_2                  MON_2
+  MON_3,
+#define MON_3                  MON_3
+  MON_4,
+#define MON_4                  MON_4
+  MON_5,
+#define MON_5                  MON_5
+  MON_6,
+#define MON_6                  MON_6
+  MON_7,
+#define MON_7                  MON_7
+  MON_8,
+#define MON_8                  MON_8
+  MON_9,
+#define MON_9                  MON_9
+  MON_10,
+#define MON_10                 MON_10
+  MON_11,
+#define MON_11                 MON_11
+  MON_12,
+#define MON_12                 MON_12
+
+  AM_STR,                      /* Ante meridiem string.  */
+#define AM_STR                 AM_STR
+  PM_STR,                      /* Post meridiem string.  */
+#define PM_STR                 PM_STR
+
+  D_T_FMT,                     /* Date and time format for strftime.  */
+#define D_T_FMT                        D_T_FMT
+  D_FMT,                       /* Date format for strftime.  */
+#define D_FMT                  D_FMT
+  T_FMT,                       /* Time format for strftime.  */
+#define T_FMT                  T_FMT
+  T_FMT_AMPM,                  /* 12-hour time format for strftime.  */
+#define T_FMT_AMPM             T_FMT_AMPM
+
+  ERA,                         /* Alternate era.  */
+#define ERA                    ERA
+  __ERA_YEAR,                  /* Year in alternate era format.  */
+#ifdef __USE_GNU
+# define ERA_YEAR              __ERA_YEAR
+#endif
+  ERA_D_FMT,                   /* Date in alternate era format.  */
+#define ERA_D_FMT              ERA_D_FMT
+  ALT_DIGITS,                  /* Alternate symbols for digits.  */
+#define ALT_DIGITS             ALT_DIGITS
+  ERA_D_T_FMT,                 /* Date and time in alternate era format.  */
+#define ERA_D_T_FMT            ERA_D_T_FMT
+  ERA_T_FMT,                   /* Time in alternate era format.  */
+#define ERA_T_FMT              ERA_T_FMT
+
+  _NL_TIME_ERA_NUM_ENTRIES,    /* Number entries in the era arrays.  */
+  _NL_TIME_ERA_ENTRIES,                /* Structure with era entries in usable form.*/
+
+  _NL_WABDAY_1,                /* Sun */
+  _NL_WABDAY_2,
+  _NL_WABDAY_3,
+  _NL_WABDAY_4,
+  _NL_WABDAY_5,
+  _NL_WABDAY_6,
+  _NL_WABDAY_7,
+
+  /* Long-named days of the week. */
+  _NL_WDAY_1,          /* Sunday */
+  _NL_WDAY_2,          /* Monday */
+  _NL_WDAY_3,          /* Tuesday */
+  _NL_WDAY_4,          /* Wednesday */
+  _NL_WDAY_5,          /* Thursday */
+  _NL_WDAY_6,          /* Friday */
+  _NL_WDAY_7,          /* Saturday */
+
+  /* Abbreviated month names.  */
+  _NL_WABMON_1,                /* Jan */
+  _NL_WABMON_2,
+  _NL_WABMON_3,
+  _NL_WABMON_4,
+  _NL_WABMON_5,
+  _NL_WABMON_6,
+  _NL_WABMON_7,
+  _NL_WABMON_8,
+  _NL_WABMON_9,
+  _NL_WABMON_10,
+  _NL_WABMON_11,
+  _NL_WABMON_12,
+
+  /* Long month names.  */
+  _NL_WMON_1,          /* January */
+  _NL_WMON_2,
+  _NL_WMON_3,
+  _NL_WMON_4,
+  _NL_WMON_5,
+  _NL_WMON_6,
+  _NL_WMON_7,
+  _NL_WMON_8,
+  _NL_WMON_9,
+  _NL_WMON_10,
+  _NL_WMON_11,
+  _NL_WMON_12,
+
+  _NL_WAM_STR,         /* Ante meridiem string.  */
+  _NL_WPM_STR,         /* Post meridiem string.  */
+
+  _NL_WD_T_FMT,                /* Date and time format for strftime.  */
+  _NL_WD_FMT,          /* Date format for strftime.  */
+  _NL_WT_FMT,          /* Time format for strftime.  */
+  _NL_WT_FMT_AMPM,     /* 12-hour time format for strftime.  */
+
+  _NL_WERA_YEAR,       /* Year in alternate era format.  */
+  _NL_WERA_D_FMT,      /* Date in alternate era format.  */
+  _NL_WALT_DIGITS,     /* Alternate symbols for digits.  */
+  _NL_WERA_D_T_FMT,    /* Date and time in alternate era format.  */
+  _NL_WERA_T_FMT,      /* Time in alternate era format.  */
+
+  _NL_TIME_WEEK_NDAYS,
+  _NL_TIME_WEEK_1STDAY,
+  _NL_TIME_WEEK_1STWEEK,
+  _NL_TIME_FIRST_WEEKDAY,
+  _NL_TIME_FIRST_WORKDAY,
+  _NL_TIME_CAL_DIRECTION,
+  _NL_TIME_TIMEZONE,
+
+  _DATE_FMT,           /* strftime format for date.  */
+#define _DATE_FMT      _DATE_FMT
+  _NL_W_DATE_FMT,
+
+  _NL_TIME_CODESET,
+
+  _NL_NUM_LC_TIME,     /* Number of indices in LC_TIME category.  */
+
+  /* LC_COLLATE category: text sorting.
+     This information is accessed by the strcoll and strxfrm functions.
+     These `nl_langinfo' names are used only internally.  */
+  _NL_COLLATE_NRULES = _NL_ITEM (__LC_COLLATE, 0),
+  _NL_COLLATE_RULESETS,
+  _NL_COLLATE_TABLEMB,
+  _NL_COLLATE_WEIGHTMB,
+  _NL_COLLATE_EXTRAMB,
+  _NL_COLLATE_INDIRECTMB,
+  _NL_COLLATE_GAP1,
+  _NL_COLLATE_GAP2,
+  _NL_COLLATE_GAP3,
+  _NL_COLLATE_TABLEWC,
+  _NL_COLLATE_WEIGHTWC,
+  _NL_COLLATE_EXTRAWC,
+  _NL_COLLATE_INDIRECTWC,
+  _NL_COLLATE_SYMB_HASH_SIZEMB,
+  _NL_COLLATE_SYMB_TABLEMB,
+  _NL_COLLATE_SYMB_EXTRAMB,
+  _NL_COLLATE_COLLSEQMB,
+  _NL_COLLATE_COLLSEQWC,
+  _NL_COLLATE_CODESET,
+  _NL_NUM_LC_COLLATE,
+
+  /* LC_CTYPE category: character classification.
+     This information is accessed by the functions in <ctype.h>.
+     These `nl_langinfo' names are used only internally.  */
+  _NL_CTYPE_CLASS = _NL_ITEM (__LC_CTYPE, 0),
+  _NL_CTYPE_TOUPPER,
+  _NL_CTYPE_GAP1,
+  _NL_CTYPE_TOLOWER,
+  _NL_CTYPE_GAP2,
+  _NL_CTYPE_CLASS32,
+  _NL_CTYPE_GAP3,
+  _NL_CTYPE_GAP4,
+  _NL_CTYPE_GAP5,
+  _NL_CTYPE_GAP6,
+  _NL_CTYPE_CLASS_NAMES,
+  _NL_CTYPE_MAP_NAMES,
+  _NL_CTYPE_WIDTH,
+  _NL_CTYPE_MB_CUR_MAX,
+  _NL_CTYPE_CODESET_NAME,
+  CODESET = _NL_CTYPE_CODESET_NAME,
+#define CODESET                        CODESET
+  _NL_CTYPE_TOUPPER32,
+  _NL_CTYPE_TOLOWER32,
+  _NL_CTYPE_CLASS_OFFSET,
+  _NL_CTYPE_MAP_OFFSET,
+  _NL_CTYPE_INDIGITS_MB_LEN,
+  _NL_CTYPE_INDIGITS0_MB,
+  _NL_CTYPE_INDIGITS1_MB,
+  _NL_CTYPE_INDIGITS2_MB,
+  _NL_CTYPE_INDIGITS3_MB,
+  _NL_CTYPE_INDIGITS4_MB,
+  _NL_CTYPE_INDIGITS5_MB,
+  _NL_CTYPE_INDIGITS6_MB,
+  _NL_CTYPE_INDIGITS7_MB,
+  _NL_CTYPE_INDIGITS8_MB,
+  _NL_CTYPE_INDIGITS9_MB,
+  _NL_CTYPE_INDIGITS_WC_LEN,
+  _NL_CTYPE_INDIGITS0_WC,
+  _NL_CTYPE_INDIGITS1_WC,
+  _NL_CTYPE_INDIGITS2_WC,
+  _NL_CTYPE_INDIGITS3_WC,
+  _NL_CTYPE_INDIGITS4_WC,
+  _NL_CTYPE_INDIGITS5_WC,
+  _NL_CTYPE_INDIGITS6_WC,
+  _NL_CTYPE_INDIGITS7_WC,
+  _NL_CTYPE_INDIGITS8_WC,
+  _NL_CTYPE_INDIGITS9_WC,
+  _NL_CTYPE_OUTDIGIT0_MB,
+  _NL_CTYPE_OUTDIGIT1_MB,
+  _NL_CTYPE_OUTDIGIT2_MB,
+  _NL_CTYPE_OUTDIGIT3_MB,
+  _NL_CTYPE_OUTDIGIT4_MB,
+  _NL_CTYPE_OUTDIGIT5_MB,
+  _NL_CTYPE_OUTDIGIT6_MB,
+  _NL_CTYPE_OUTDIGIT7_MB,
+  _NL_CTYPE_OUTDIGIT8_MB,
+  _NL_CTYPE_OUTDIGIT9_MB,
+  _NL_CTYPE_OUTDIGIT0_WC,
+  _NL_CTYPE_OUTDIGIT1_WC,
+  _NL_CTYPE_OUTDIGIT2_WC,
+  _NL_CTYPE_OUTDIGIT3_WC,
+  _NL_CTYPE_OUTDIGIT4_WC,
+  _NL_CTYPE_OUTDIGIT5_WC,
+  _NL_CTYPE_OUTDIGIT6_WC,
+  _NL_CTYPE_OUTDIGIT7_WC,
+  _NL_CTYPE_OUTDIGIT8_WC,
+  _NL_CTYPE_OUTDIGIT9_WC,
+  _NL_CTYPE_TRANSLIT_TAB_SIZE,
+  _NL_CTYPE_TRANSLIT_FROM_IDX,
+  _NL_CTYPE_TRANSLIT_FROM_TBL,
+  _NL_CTYPE_TRANSLIT_TO_IDX,
+  _NL_CTYPE_TRANSLIT_TO_TBL,
+  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN,
+  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING,
+  _NL_CTYPE_TRANSLIT_IGNORE_LEN,
+  _NL_CTYPE_TRANSLIT_IGNORE,
+  _NL_CTYPE_MAP_TO_NONASCII,
+  _NL_CTYPE_NONASCII_CASE,
+  _NL_CTYPE_EXTRA_MAP_1,
+  _NL_CTYPE_EXTRA_MAP_2,
+  _NL_CTYPE_EXTRA_MAP_3,
+  _NL_CTYPE_EXTRA_MAP_4,
+  _NL_CTYPE_EXTRA_MAP_5,
+  _NL_CTYPE_EXTRA_MAP_6,
+  _NL_CTYPE_EXTRA_MAP_7,
+  _NL_CTYPE_EXTRA_MAP_8,
+  _NL_CTYPE_EXTRA_MAP_9,
+  _NL_CTYPE_EXTRA_MAP_10,
+  _NL_CTYPE_EXTRA_MAP_11,
+  _NL_CTYPE_EXTRA_MAP_12,
+  _NL_CTYPE_EXTRA_MAP_13,
+  _NL_CTYPE_EXTRA_MAP_14,
+  _NL_NUM_LC_CTYPE,
+
+  /* LC_MONETARY category: formatting of monetary quantities.
+     These items each correspond to a member of `struct lconv',
+     defined in <locale.h>.  */
+  __INT_CURR_SYMBOL = _NL_ITEM (__LC_MONETARY, 0),
+#ifdef __USE_GNU
+# define INT_CURR_SYMBOL       __INT_CURR_SYMBOL
+#endif
+  __CURRENCY_SYMBOL,
+#ifdef __USE_GNU
+# define CURRENCY_SYMBOL       __CURRENCY_SYMBOL
+#endif
+  __MON_DECIMAL_POINT,
+#ifdef __USE_GNU
+# define MON_DECIMAL_POINT     __MON_DECIMAL_POINT
+#endif
+  __MON_THOUSANDS_SEP,
+#ifdef __USE_GNU
+# define MON_THOUSANDS_SEP     __MON_THOUSANDS_SEP
+#endif
+  __MON_GROUPING,
+#ifdef __USE_GNU
+# define MON_GROUPING          __MON_GROUPING
+#endif
+  __POSITIVE_SIGN,
+#ifdef __USE_GNU
+# define POSITIVE_SIGN         __POSITIVE_SIGN
+#endif
+  __NEGATIVE_SIGN,
+#ifdef __USE_GNU
+# define NEGATIVE_SIGN         __NEGATIVE_SIGN
+#endif
+  __INT_FRAC_DIGITS,
+#ifdef __USE_GNU
+# define INT_FRAC_DIGITS       __INT_FRAC_DIGITS
+#endif
+  __FRAC_DIGITS,
+#ifdef __USE_GNU
+# define FRAC_DIGITS           __FRAC_DIGITS
+#endif
+  __P_CS_PRECEDES,
+#ifdef __USE_GNU
+# define P_CS_PRECEDES         __P_CS_PRECEDES
+#endif
+  __P_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define P_SEP_BY_SPACE                __P_SEP_BY_SPACE
+#endif
+  __N_CS_PRECEDES,
+#ifdef __USE_GNU
+# define N_CS_PRECEDES         __N_CS_PRECEDES
+#endif
+  __N_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define N_SEP_BY_SPACE                __N_SEP_BY_SPACE
+#endif
+  __P_SIGN_POSN,
+#ifdef __USE_GNU
+# define P_SIGN_POSN           __P_SIGN_POSN
+#endif
+  __N_SIGN_POSN,
+#ifdef __USE_GNU
+# define N_SIGN_POSN           __N_SIGN_POSN
+#endif
+  _NL_MONETARY_CRNCYSTR,
+#define CRNCYSTR               _NL_MONETARY_CRNCYSTR
+  __INT_P_CS_PRECEDES,
+#ifdef __USE_GNU
+# define INT_P_CS_PRECEDES     __INT_P_CS_PRECEDES
+#endif
+  __INT_P_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define INT_P_SEP_BY_SPACE    __INT_P_SEP_BY_SPACE
+#endif
+  __INT_N_CS_PRECEDES,
+#ifdef __USE_GNU
+# define INT_N_CS_PRECEDES     __INT_N_CS_PRECEDES
+#endif
+  __INT_N_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define INT_N_SEP_BY_SPACE    __INT_N_SEP_BY_SPACE
+#endif
+  __INT_P_SIGN_POSN,
+#ifdef __USE_GNU
+# define INT_P_SIGN_POSN       __INT_P_SIGN_POSN
+#endif
+  __INT_N_SIGN_POSN,
+#ifdef __USE_GNU
+# define INT_N_SIGN_POSN       __INT_N_SIGN_POSN
+#endif
+  _NL_MONETARY_DUO_INT_CURR_SYMBOL,
+  _NL_MONETARY_DUO_CURRENCY_SYMBOL,
+  _NL_MONETARY_DUO_INT_FRAC_DIGITS,
+  _NL_MONETARY_DUO_FRAC_DIGITS,
+  _NL_MONETARY_DUO_P_CS_PRECEDES,
+  _NL_MONETARY_DUO_P_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_N_CS_PRECEDES,
+  _NL_MONETARY_DUO_N_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_INT_P_CS_PRECEDES,
+  _NL_MONETARY_DUO_INT_P_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_INT_N_CS_PRECEDES,
+  _NL_MONETARY_DUO_INT_N_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_P_SIGN_POSN,
+  _NL_MONETARY_DUO_N_SIGN_POSN,
+  _NL_MONETARY_DUO_INT_P_SIGN_POSN,
+  _NL_MONETARY_DUO_INT_N_SIGN_POSN,
+  _NL_MONETARY_UNO_VALID_FROM,
+  _NL_MONETARY_UNO_VALID_TO,
+  _NL_MONETARY_DUO_VALID_FROM,
+  _NL_MONETARY_DUO_VALID_TO,
+  _NL_MONETARY_CONVERSION_RATE,
+  _NL_MONETARY_DECIMAL_POINT_WC,
+  _NL_MONETARY_THOUSANDS_SEP_WC,
+  _NL_MONETARY_CODESET,
+  _NL_NUM_LC_MONETARY,
+
+  /* LC_NUMERIC category: formatting of numbers.
+     These also correspond to members of `struct lconv'; see <locale.h>.  */
+  __DECIMAL_POINT = _NL_ITEM (__LC_NUMERIC, 0),
+#ifdef __USE_GNU
+# define DECIMAL_POINT         __DECIMAL_POINT
+#endif
+  RADIXCHAR = __DECIMAL_POINT,
+#define RADIXCHAR              RADIXCHAR
+  __THOUSANDS_SEP,
+#ifdef __USE_GNU
+# define THOUSANDS_SEP         __THOUSANDS_SEP
+#endif
+  THOUSEP = __THOUSANDS_SEP,
+#define THOUSEP                        THOUSEP
+  __GROUPING,
+#ifdef __USE_GNU
+# define GROUPING              __GROUPING
+#endif
+  _NL_NUMERIC_DECIMAL_POINT_WC,
+  _NL_NUMERIC_THOUSANDS_SEP_WC,
+  _NL_NUMERIC_CODESET,
+  _NL_NUM_LC_NUMERIC,
+
+  __YESEXPR = _NL_ITEM (__LC_MESSAGES, 0), /* Regex matching ``yes'' input.  */
+#define YESEXPR                        __YESEXPR
+  __NOEXPR,                    /* Regex matching ``no'' input.  */
+#define NOEXPR                 __NOEXPR
+  __YESSTR,                    /* Output string for ``yes''.  */
+#if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# define YESSTR                        __YESSTR
+#endif
+  __NOSTR,                     /* Output string for ``no''.  */
+#if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# define NOSTR                 __NOSTR
+#endif
+  _NL_MESSAGES_CODESET,
+  _NL_NUM_LC_MESSAGES,
+
+  _NL_PAPER_HEIGHT = _NL_ITEM (__LC_PAPER, 0),
+  _NL_PAPER_WIDTH,
+  _NL_PAPER_CODESET,
+  _NL_NUM_LC_PAPER,
+
+  _NL_NAME_NAME_FMT = _NL_ITEM (__LC_NAME, 0),
+  _NL_NAME_NAME_GEN,
+  _NL_NAME_NAME_MR,
+  _NL_NAME_NAME_MRS,
+  _NL_NAME_NAME_MISS,
+  _NL_NAME_NAME_MS,
+  _NL_NAME_CODESET,
+  _NL_NUM_LC_NAME,
+
+  _NL_ADDRESS_POSTAL_FMT = _NL_ITEM (__LC_ADDRESS, 0),
+  _NL_ADDRESS_COUNTRY_NAME,
+  _NL_ADDRESS_COUNTRY_POST,
+  _NL_ADDRESS_COUNTRY_AB2,
+  _NL_ADDRESS_COUNTRY_AB3,
+  _NL_ADDRESS_COUNTRY_CAR,
+  _NL_ADDRESS_COUNTRY_NUM,
+  _NL_ADDRESS_COUNTRY_ISBN,
+  _NL_ADDRESS_LANG_NAME,
+  _NL_ADDRESS_LANG_AB,
+  _NL_ADDRESS_LANG_TERM,
+  _NL_ADDRESS_LANG_LIB,
+  _NL_ADDRESS_CODESET,
+  _NL_NUM_LC_ADDRESS,
+
+  _NL_TELEPHONE_TEL_INT_FMT = _NL_ITEM (__LC_TELEPHONE, 0),
+  _NL_TELEPHONE_TEL_DOM_FMT,
+  _NL_TELEPHONE_INT_SELECT,
+  _NL_TELEPHONE_INT_PREFIX,
+  _NL_TELEPHONE_CODESET,
+  _NL_NUM_LC_TELEPHONE,
+
+  _NL_MEASUREMENT_MEASUREMENT = _NL_ITEM (__LC_MEASUREMENT, 0),
+  _NL_MEASUREMENT_CODESET,
+  _NL_NUM_LC_MEASUREMENT,
+
+  _NL_IDENTIFICATION_TITLE = _NL_ITEM (__LC_IDENTIFICATION, 0),
+  _NL_IDENTIFICATION_SOURCE,
+  _NL_IDENTIFICATION_ADDRESS,
+  _NL_IDENTIFICATION_CONTACT,
+  _NL_IDENTIFICATION_EMAIL,
+  _NL_IDENTIFICATION_TEL,
+  _NL_IDENTIFICATION_FAX,
+  _NL_IDENTIFICATION_LANGUAGE,
+  _NL_IDENTIFICATION_TERRITORY,
+  _NL_IDENTIFICATION_AUDIENCE,
+  _NL_IDENTIFICATION_APPLICATION,
+  _NL_IDENTIFICATION_ABBREVIATION,
+  _NL_IDENTIFICATION_REVISION,
+  _NL_IDENTIFICATION_DATE,
+  _NL_IDENTIFICATION_CATEGORY,
+  _NL_IDENTIFICATION_CODESET,
+  _NL_NUM_LC_IDENTIFICATION,
+
+  /* This marks the highest value used.  */
+  _NL_NUM
+};
+
+/* This macro produces an item you can pass to `nl_langinfo' or
+   `nl_langinfo_l' to get the name of the locale in use for CATEGORY.  */
+#define _NL_LOCALE_NAME(category)      _NL_ITEM ((category),                 \
+                                                 _NL_ITEM_INDEX (-1))
+#ifdef __USE_GNU
+# define NL_LOCALE_NAME(category)      _NL_LOCALE_NAME (category)
+#endif
+
+
+/* Return the current locale's value for ITEM.
+   If ITEM is invalid, an empty string is returned.
+
+   The string returned will not change until `setlocale' is called;
+   it is usually in read-only memory and cannot be modified.  */
+
+extern char *nl_langinfo (nl_item __item) __THROW;
+
+
+#ifdef __USE_XOPEN2K
+/* This interface is for the extended locale model.  See <locale.h> for
+   more information.  */
+
+/* Get locale datatype definition.  */
+# include <xlocale.h>
+
+/* Just like nl_langinfo but get the information from the locale object L.  */
+extern char *nl_langinfo_l (nl_item __item, __locale_t __l);
+#endif
+
+__END_DECLS
+
+#endif /* langinfo.h */
diff --git a/lib/libdss-include/include/lastlog.h b/lib/libdss-include/include/lastlog.h
new file mode 100644 (file)
index 0000000..8cc4254
--- /dev/null
@@ -0,0 +1,4 @@
+/* This header file is used in 4.3BSD to define `struct lastlog',
+   which we define in <bits/utmp.h>.  */
+
+#include <utmp.h>
diff --git a/lib/libdss-include/include/libgen.h b/lib/libdss-include/include/libgen.h
new file mode 100644 (file)
index 0000000..38f4d19
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBGEN_H
+#define _LIBGEN_H      1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return directory part of PATH or "." if none is available.  */
+extern char *dirname (char *__path) __THROW;
+
+/* Return final component of PATH.
+
+   This is the weird XPG version of this function.  It sometimes will
+   modify its argument.  Therefore we normally use the GNU version (in
+   <string.h>) and only if this header is included make the XPG
+   version available under the real name.  */
+extern char *__xpg_basename (char *__path) __THROW;
+#define basename       __xpg_basename
+
+__END_DECLS
+
+#endif /* libgen.h */
diff --git a/lib/libdss-include/include/libintl.h b/lib/libdss-include/include/libintl.h
new file mode 100644 (file)
index 0000000..bdb6b38
--- /dev/null
@@ -0,0 +1,123 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   This file is derived from the file libgettext.h in the GNU gettext package.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H     1
+
+#include <features.h>
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats.  Returns the
+   maximum minor revision number supported for a given major revision.  */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+  ((major) == 0 ? 1 : -1)
+
+__BEGIN_DECLS
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext (const char *__msgid)
+     __THROW __attribute_format_arg__ (1);
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext (const char *__domainname, const char *__msgid)
+     __THROW __attribute_format_arg__ (2);
+extern char *__dgettext (const char *__domainname, const char *__msgid)
+     __THROW __attribute_format_arg__ (2);
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext (const char *__domainname,
+                       const char *__msgid, int __category)
+     __THROW __attribute_format_arg__ (2);
+extern char *__dcgettext (const char *__domainname,
+                         const char *__msgid, int __category)
+     __THROW __attribute_format_arg__ (2);
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+                      unsigned long int __n)
+     __THROW __attribute_format_arg__ (1) __attribute_format_arg__ (2);
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dngettext (const char *__domainname, const char *__msgid1,
+                       const char *__msgid2, unsigned long int __n)
+     __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dcngettext (const char *__domainname, const char *__msgid1,
+                        const char *__msgid2, unsigned long int __n,
+                        int __category)
+     __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain (const char *__domainname) __THROW;
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain (const char *__domainname,
+                            const char *__dirname) __THROW;
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+extern char *bind_textdomain_codeset (const char *__domainname,
+                                     const char *__codeset) __THROW;
+
+
+/* Optimized version of the function above.  */
+#if defined __OPTIMIZE__ && !defined __cplusplus
+
+/* We need NULL for `gettext'.  */
+# define __need_NULL
+# include <stddef.h>
+
+/* We need LC_MESSAGES for `dgettext'.  */
+# include <locale.h>
+
+/* These must be macros.  Inlined functions are useless because the
+   `__builtin_constant_p' predicate in dcgettext would always return
+   false.  */
+
+# define gettext(msgid) dgettext (NULL, msgid)
+
+# define dgettext(domainname, msgid) \
+  dcgettext (domainname, msgid, LC_MESSAGES)
+
+# define ngettext(msgid1, msgid2, n) dngettext (NULL, msgid1, msgid2, n)
+
+# define dngettext(domainname, msgid1, msgid2, n) \
+  dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
+
+#endif /* Optimizing.  */
+
+__END_DECLS
+
+#endif /* libintl.h */
diff --git a/lib/libdss-include/include/libio.h b/lib/libdss-include/include/libio.h
new file mode 100644 (file)
index 0000000..efd09f1
--- /dev/null
@@ -0,0 +1,524 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Per Bothner <bothner@cygnus.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.
+
+   As a special exception, if you link the code in this file with
+   files compiled with a GNU compiler to produce an executable,
+   that does not cause the resulting executable to be covered by
+   the GNU Lesser General Public License.  This exception does not
+   however invalidate any other reasons why the executable file
+   might be covered by the GNU Lesser General Public License.
+   This exception applies to code released by its copyright holders
+   in files containing the exception.  */
+
+#ifndef _IO_STDIO_H
+#define _IO_STDIO_H
+
+#include <_G_config.h>
+/* ALL of these should be defined in _G_config.h */
+#define _IO_fpos_t _G_fpos_t
+#define _IO_fpos64_t _G_fpos64_t
+#define _IO_size_t size_t
+#define _IO_ssize_t __ssize_t
+#define _IO_off_t __off_t
+#define _IO_off64_t __off64_t
+#define _IO_pid_t __pid_t
+#define _IO_uid_t __uid_t
+#define _IO_iconv_t _G_iconv_t
+#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
+#define _IO_BUFSIZ _G_BUFSIZ
+#define _IO_va_list _G_va_list
+#define _IO_wint_t wint_t
+
+/* This define avoids name pollution if we're using GNU stdarg.h */
+#define __need___va_list
+#include <stdarg.h>
+#ifdef __GNUC_VA_LIST
+# undef _IO_va_list
+# define _IO_va_list __gnuc_va_list
+#endif /* __GNUC_VA_LIST */
+
+#ifndef __P
+# include <sys/cdefs.h>
+#endif /*!__P*/
+
+#define _IO_UNIFIED_JUMPTABLES 1
+
+#ifndef EOF
+# define EOF (-1)
+#endif
+#ifndef NULL
+# if defined __GNUG__ && \
+    (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
+#  define NULL (__null)
+# else
+#  if !defined(__cplusplus)
+#   define NULL ((void*)0)
+#  else
+#   define NULL (0)
+#  endif
+# endif
+#endif
+
+#define _IOS_INPUT     1
+#define _IOS_OUTPUT    2
+#define _IOS_ATEND     4
+#define _IOS_APPEND    8
+#define _IOS_TRUNC     16
+#define _IOS_NOCREATE  32
+#define _IOS_NOREPLACE 64
+#define _IOS_BIN       128
+
+/* Magic numbers and bits for the _flags field.
+   The magic numbers use the high-order bits of _flags;
+   the remaining bits are available for variable flags.
+   Note: The magic numbers must all be negative if stdio
+   emulation is desired. */
+
+#define _IO_MAGIC 0xFBAD0000 /* Magic number */
+#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
+#define _IO_MAGIC_MASK 0xFFFF0000
+#define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
+#define _IO_UNBUFFERED 2
+#define _IO_NO_READS 4 /* Reading not allowed */
+#define _IO_NO_WRITES 8 /* Writing not allowd */
+#define _IO_EOF_SEEN 0x10
+#define _IO_ERR_SEEN 0x20
+#define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
+#define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
+#define _IO_IN_BACKUP 0x100
+#define _IO_LINE_BUF 0x200
+#define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
+#define _IO_CURRENTLY_PUTTING 0x800
+#define _IO_IS_APPENDING 0x1000
+#define _IO_IS_FILEBUF 0x2000
+#define _IO_BAD_SEEN 0x4000
+#define _IO_USER_LOCK 0x8000
+
+#define _IO_FLAGS2_MMAP 1
+#define _IO_FLAGS2_NOTCANCEL 2
+#ifdef _LIBC
+# define _IO_FLAGS2_FORTIFY 4
+#endif
+#define _IO_FLAGS2_USER_WBUF 8
+#ifdef _LIBC
+# define _IO_FLAGS2_SCANF_STD 16
+# define _IO_FLAGS2_NOCLOSE 32
+# define _IO_FLAGS2_CLOEXEC 64
+#endif
+
+/* These are "formatting flags" matching the iostream fmtflags enum values. */
+#define _IO_SKIPWS 01
+#define _IO_LEFT 02
+#define _IO_RIGHT 04
+#define _IO_INTERNAL 010
+#define _IO_DEC 020
+#define _IO_OCT 040
+#define _IO_HEX 0100
+#define _IO_SHOWBASE 0200
+#define _IO_SHOWPOINT 0400
+#define _IO_UPPERCASE 01000
+#define _IO_SHOWPOS 02000
+#define _IO_SCIENTIFIC 04000
+#define _IO_FIXED 010000
+#define _IO_UNITBUF 020000
+#define _IO_STDIO 040000
+#define _IO_DONT_CLOSE 0100000
+#define _IO_BOOLALPHA 0200000
+
+
+struct _IO_jump_t;  struct _IO_FILE;
+
+/* Handle lock.  */
+#ifdef _IO_MTSAFE_IO
+/* _IO_lock_t defined in internal headers during the glibc build.  */
+#else
+typedef void _IO_lock_t;
+#endif
+
+
+/* A streammarker remembers a position in a buffer. */
+
+struct _IO_marker {
+  struct _IO_marker *_next;
+  struct _IO_FILE *_sbuf;
+  /* If _pos >= 0
+ it points to _buf->Gbase()+_pos. FIXME comment */
+  /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
+  int _pos;
+#if 0
+    void set_streampos(streampos sp) { _spos = sp; }
+    void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
+  public:
+    streammarker(streambuf *sb);
+    ~streammarker();
+    int saving() { return  _spos == -2; }
+    int delta(streammarker&);
+    int delta();
+#endif
+};
+
+/* This is the structure from the libstdc++ codecvt class.  */
+enum __codecvt_result
+{
+  __codecvt_ok,
+  __codecvt_partial,
+  __codecvt_error,
+  __codecvt_noconv
+};
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+/* The order of the elements in the following struct must match the order
+   of the virtual functions in the libstdc++ codecvt class.  */
+struct _IO_codecvt
+{
+  void (*__codecvt_destr) (struct _IO_codecvt *);
+  enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
+                                            __mbstate_t *,
+                                            const wchar_t *,
+                                            const wchar_t *,
+                                            const wchar_t **, char *,
+                                            char *, char **);
+  enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
+                                                __mbstate_t *, char *,
+                                                char *, char **);
+  enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
+                                           __mbstate_t *,
+                                           const char *, const char *,
+                                           const char **, wchar_t *,
+                                           wchar_t *, wchar_t **);
+  int (*__codecvt_do_encoding) (struct _IO_codecvt *);
+  int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
+  int (*__codecvt_do_length) (struct _IO_codecvt *, __mbstate_t *,
+                             const char *, const char *, _IO_size_t);
+  int (*__codecvt_do_max_length) (struct _IO_codecvt *);
+
+  _IO_iconv_t __cd_in;
+  _IO_iconv_t __cd_out;
+};
+
+/* Extra data for wide character streams.  */
+struct _IO_wide_data
+{
+  wchar_t *_IO_read_ptr;       /* Current read pointer */
+  wchar_t *_IO_read_end;       /* End of get area. */
+  wchar_t *_IO_read_base;      /* Start of putback+get area. */
+  wchar_t *_IO_write_base;     /* Start of put area. */
+  wchar_t *_IO_write_ptr;      /* Current put pointer. */
+  wchar_t *_IO_write_end;      /* End of put area. */
+  wchar_t *_IO_buf_base;       /* Start of reserve area. */
+  wchar_t *_IO_buf_end;                /* End of reserve area. */
+  /* The following fields are used to support backing up and undo. */
+  wchar_t *_IO_save_base;      /* Pointer to start of non-current get area. */
+  wchar_t *_IO_backup_base;    /* Pointer to first valid character of
+                                  backup area */
+  wchar_t *_IO_save_end;       /* Pointer to end of non-current get area. */
+
+  __mbstate_t _IO_state;
+  __mbstate_t _IO_last_state;
+  struct _IO_codecvt _codecvt;
+
+  wchar_t _shortbuf[1];
+
+  const struct _IO_jump_t *_wide_vtable;
+};
+#endif
+
+struct _IO_FILE {
+  int _flags;          /* High-order word is _IO_MAGIC; rest is flags. */
+#define _IO_file_flags _flags
+
+  /* The following pointers correspond to the C++ streambuf protocol. */
+  /* Note:  Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
+  char* _IO_read_ptr;  /* Current read pointer */
+  char* _IO_read_end;  /* End of get area. */
+  char* _IO_read_base; /* Start of putback+get area. */
+  char* _IO_write_base;        /* Start of put area. */
+  char* _IO_write_ptr; /* Current put pointer. */
+  char* _IO_write_end; /* End of put area. */
+  char* _IO_buf_base;  /* Start of reserve area. */
+  char* _IO_buf_end;   /* End of reserve area. */
+  /* The following fields are used to support backing up and undo. */
+  char *_IO_save_base; /* Pointer to start of non-current get area. */
+  char *_IO_backup_base;  /* Pointer to first valid character of backup area */
+  char *_IO_save_end; /* Pointer to end of non-current get area. */
+
+  struct _IO_marker *_markers;
+
+  struct _IO_FILE *_chain;
+
+  int _fileno;
+#if 0
+  int _blksize;
+#else
+  int _flags2;
+#endif
+  _IO_off_t _old_offset; /* This used to be _offset but it's too small.  */
+
+#define __HAVE_COLUMN /* temporary */
+  /* 1+column number of pbase(); 0 is unknown. */
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+
+  /*  char* _save_gptr;  char* _save_egptr; */
+
+  _IO_lock_t *_lock;
+#ifdef _IO_USE_OLD_IO_FILE
+};
+
+struct _IO_FILE_complete
+{
+  struct _IO_FILE _file;
+#endif
+#if defined _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001
+  _IO_off64_t _offset;
+# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+  /* Wide character stream stuff.  */
+  struct _IO_codecvt *_codecvt;
+  struct _IO_wide_data *_wide_data;
+  struct _IO_FILE *_freeres_list;
+  void *_freeres_buf;
+# else
+  void *__pad1;
+  void *__pad2;
+  void *__pad3;
+  void *__pad4;
+# endif
+  size_t __pad5;
+  int _mode;
+  /* Make sure we don't get into trouble again.  */
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+#endif
+};
+
+#ifndef __cplusplus
+typedef struct _IO_FILE _IO_FILE;
+#endif
+
+struct _IO_FILE_plus;
+
+extern struct _IO_FILE_plus _IO_2_1_stdin_;
+extern struct _IO_FILE_plus _IO_2_1_stdout_;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+#ifndef _LIBC
+#define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
+#define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
+#define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
+#else
+extern _IO_FILE *_IO_stdin attribute_hidden;
+extern _IO_FILE *_IO_stdout attribute_hidden;
+extern _IO_FILE *_IO_stderr attribute_hidden;
+#endif
+
+
+/* Functions to do I/O and file management for a stream.  */
+
+/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
+   Return number of bytes read.  */
+typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+
+/* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
+   unless there is an error.  Return number of bytes written.  If
+   there is an error, return 0 and do not write anything.  If the file
+   has been opened for append (__mode.__append set), then set the file
+   pointer to the end of the file and then do the write; if not, just
+   write at the current file pointer.  */
+typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
+                                size_t __n);
+
+/* Move COOKIE's file position to *POS bytes from the
+   beginning of the file (if W is SEEK_SET),
+   the current position (if W is SEEK_CUR),
+   or the end of the file (if W is SEEK_END).
+   Set *POS to the new file position.
+   Returns zero if successful, nonzero if not.  */
+typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
+
+/* Close COOKIE.  */
+typedef int __io_close_fn (void *__cookie);
+
+
+#ifdef _GNU_SOURCE
+/* User-visible names for the above.  */
+typedef __io_read_fn cookie_read_function_t;
+typedef __io_write_fn cookie_write_function_t;
+typedef __io_seek_fn cookie_seek_function_t;
+typedef __io_close_fn cookie_close_function_t;
+
+/* The structure with the cookie function pointers.  */
+typedef struct
+{
+  __io_read_fn *read;          /* Read bytes.  */
+  __io_write_fn *write;                /* Write bytes.  */
+  __io_seek_fn *seek;          /* Seek/tell file position.  */
+  __io_close_fn *close;                /* Close file.  */
+} _IO_cookie_io_functions_t;
+typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+
+struct _IO_cookie_file;
+
+/* Initialize one of those.  */
+extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
+                            void *__cookie, _IO_cookie_io_functions_t __fns);
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+extern _IO_wint_t __wunderflow (_IO_FILE *);
+extern _IO_wint_t __wuflow (_IO_FILE *);
+extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
+#endif
+
+#if  __GNUC__ >= 3
+# define _IO_BE(expr, res) __builtin_expect ((expr), res)
+#else
+# define _IO_BE(expr, res) (expr)
+#endif
+
+#define _IO_getc_unlocked(_fp) \
+       (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
+       ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
+#define _IO_peekc_unlocked(_fp) \
+       (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
+         && __underflow (_fp) == EOF ? EOF \
+       : *(unsigned char *) (_fp)->_IO_read_ptr)
+#define _IO_putc_unlocked(_ch, _fp) \
+   (_IO_BE ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end, 0) \
+    ? __overflow (_fp, (unsigned char) (_ch)) \
+    : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define _IO_getwc_unlocked(_fp) \
+  (_IO_BE ((_fp)->_wide_data == NULL                                   \
+          || ((_fp)->_wide_data->_IO_read_ptr                          \
+              >= (_fp)->_wide_data->_IO_read_end), 0)                  \
+   ? __wuflow (_fp) : (_IO_wint_t) *(_fp)->_wide_data->_IO_read_ptr++)
+# define _IO_putwc_unlocked(_wch, _fp) \
+  (_IO_BE ((_fp)->_wide_data == NULL                                   \
+          || ((_fp)->_wide_data->_IO_write_ptr                         \
+              >= (_fp)->_wide_data->_IO_write_end), 0)                 \
+   ? __woverflow (_fp, _wch)                                           \
+   : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
+#endif
+
+#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
+#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
+
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_feof (_IO_FILE *__fp) __THROW;
+extern int _IO_ferror (_IO_FILE *__fp) __THROW;
+
+extern int _IO_peekc_locked (_IO_FILE *__fp);
+
+/* This one is for Emacs. */
+#define _IO_PENDING_OUTPUT_COUNT(_fp)  \
+       ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
+
+extern void _IO_flockfile (_IO_FILE *) __THROW;
+extern void _IO_funlockfile (_IO_FILE *) __THROW;
+extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
+
+#ifdef _IO_MTSAFE_IO
+# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
+# define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
+# define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
+#else
+# define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
+# define _IO_flockfile(_fp) /**/
+# define _IO_funlockfile(_fp) /**/
+# define _IO_ftrylockfile(_fp) /**/
+# define _IO_cleanup_region_start(_fct, _fp) /**/
+# define _IO_cleanup_region_end(_Doit) /**/
+#endif /* !_IO_MTSAFE_IO */
+
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+                       _IO_va_list, int *__restrict);
+extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+                        _IO_va_list);
+extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
+extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
+
+extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
+
+extern void _IO_free_backup_area (_IO_FILE *) __THROW;
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
+extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
+extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
+# if __GNUC__ >= 2
+/* While compiling glibc we have to handle compatibility with very old
+   versions.  */
+#  if defined _LIBC && defined SHARED
+#   include <shlib-compat.h>
+#   if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+#    define _IO_fwide_maybe_incompatible \
+  (__builtin_expect (&_IO_stdin_used == NULL, 0))
+extern const int _IO_stdin_used;
+weak_extern (_IO_stdin_used);
+#   endif
+#  endif
+#  ifndef _IO_fwide_maybe_incompatible
+#   define _IO_fwide_maybe_incompatible (0)
+#  endif
+/* A special optimized version of the function above.  It optimizes the
+   case of initializing an unoriented byte stream.  */
+#  define _IO_fwide(__fp, __mode) \
+  ({ int __result = (__mode);                                                \
+     if (__result < 0 && ! _IO_fwide_maybe_incompatible)                     \
+       {                                                                     \
+        if ((__fp)->_mode == 0)                                              \
+          /* We know that all we have to do is to set the flag.  */          \
+          (__fp)->_mode = -1;                                                \
+        __result = (__fp)->_mode;                                            \
+       }                                                                     \
+     else if (__builtin_constant_p (__mode) && (__mode) == 0)                \
+       __result = _IO_fwide_maybe_incompatible ? -1 : (__fp)->_mode;         \
+     else                                                                    \
+       __result = _IO_fwide (__fp, __result);                                \
+     __result; })
+# endif
+
+extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
+                        _IO_va_list, int *__restrict);
+extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
+                         _IO_va_list);
+extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
+extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/libio-ldbl.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IO_STDIO_H */
diff --git a/lib/libdss-include/include/limits.h b/lib/libdss-include/include/limits.h
new file mode 100644 (file)
index 0000000..5add8fc
--- /dev/null
@@ -0,0 +1,152 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types <limits.h>
+ */
+
+#ifndef _LIBC_LIMITS_H_
+#define _LIBC_LIMITS_H_        1
+
+#include <features.h>
+
+
+/* Maximum length of any multibyte character in any locale.
+   We define this value here since the gcc header does not define
+   the correct value.  */
+#define MB_LEN_MAX     16
+
+
+/* If we are not using GNU CC we have to define all the symbols ourself.
+   Otherwise use gcc's definitions (see below).  */
+#if !defined __GNUC__ || __GNUC__ < 2
+
+/* We only protect from multiple inclusion here, because all the other
+   #include's protect themselves, and in GCC 2 we may #include_next through
+   multiple copies of this file before we get to GCC's.  */
+# ifndef _LIMITS_H
+#  define _LIMITS_H    1
+
+#include <bits/wordsize.h>
+
+/* We don't have #include_next.
+   Define ANSI <limits.h> for standard 32-bit words.  */
+
+/* These assume 8-bit `char's, 16-bit `short int's,
+   and 32-bit `int's and `long int's.  */
+
+/* Number of bits in a `char'. */
+#  define CHAR_BIT     8
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#  define SCHAR_MIN    (-128)
+#  define SCHAR_MAX    127
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */
+#  define UCHAR_MAX    255
+
+/* Minimum and maximum values a `char' can hold.  */
+#  ifdef __CHAR_UNSIGNED__
+#   define CHAR_MIN    0
+#   define CHAR_MAX    UCHAR_MAX
+#  else
+#   define CHAR_MIN    SCHAR_MIN
+#   define CHAR_MAX    SCHAR_MAX
+#  endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#  define SHRT_MIN     (-32768)
+#  define SHRT_MAX     32767
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
+#  define USHRT_MAX    65535
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#  define INT_MIN      (-INT_MAX - 1)
+#  define INT_MAX      2147483647
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
+#  define UINT_MAX     4294967295U
+
+/* Minimum and maximum values a `signed long int' can hold.  */
+#  if __WORDSIZE == 64
+#   define LONG_MAX    9223372036854775807L
+#  else
+#   define LONG_MAX    2147483647L
+#  endif
+#  define LONG_MIN     (-LONG_MAX - 1L)
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
+#  if __WORDSIZE == 64
+#   define ULONG_MAX   18446744073709551615UL
+#  else
+#   define ULONG_MAX   4294967295UL
+#  endif
+
+#  ifdef __USE_ISOC99
+
+/* Minimum and maximum values a `signed long long int' can hold.  */
+#   define LLONG_MAX   9223372036854775807LL
+#   define LLONG_MIN   (-LLONG_MAX - 1LL)
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0.)  */
+#   define ULLONG_MAX  18446744073709551615ULL
+
+#  endif /* ISO C99 */
+
+# endif        /* limits.h  */
+#endif /* GCC 2.  */
+
+#endif /* !_LIBC_LIMITS_H_ */
+
+ /* Get the compiler's limits.h, which defines almost all the ISO constants.
+
+    We put this #include_next outside the double inclusion check because
+    it should be possible to include this file more than once and still get
+    the definitions from gcc's header.  */
+#if defined __GNUC__ && !defined _GCC_LIMITS_H_
+/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
+# include_next <limits.h>
+#endif
+
+/* The <limits.h> files in some gcc versions don't define LLONG_MIN,
+   LLONG_MAX, and ULLONG_MAX.  Instead only the values gcc defined for
+   ages are available.  */
+#if defined __USE_ISOC99 && defined __GNUC__
+# ifndef LLONG_MIN
+#  define LLONG_MIN    (-LLONG_MAX-1)
+# endif
+# ifndef LLONG_MAX
+#  define LLONG_MAX    __LONG_LONG_MAX__
+# endif
+# ifndef ULLONG_MAX
+#  define ULLONG_MAX   (LLONG_MAX * 2ULL + 1)
+# endif
+#endif
+
+#ifdef __USE_POSIX
+/* POSIX adds things to <limits.h>.  */
+# include <bits/posix1_lim.h>
+#endif
+
+#ifdef __USE_POSIX2
+# include <bits/posix2_lim.h>
+#endif
+
+#ifdef __USE_XOPEN
+# include <bits/xopen_lim.h>
+#endif
diff --git a/lib/libdss-include/include/link.h b/lib/libdss-include/include/link.h
new file mode 100644 (file)
index 0000000..f448141
--- /dev/null
@@ -0,0 +1,194 @@
+/* Data structure for communication from the run-time dynamic linker for
+   loaded ELF shared objects.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _LINK_H
+#define        _LINK_H 1
+
+#include <features.h>
+#include <elf.h>
+#include <dlfcn.h>
+#include <sys/types.h>
+
+/* We use this macro to refer to ELF types independent of the native wordsize.
+   `ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'.  */
+#define ElfW(type)     _ElfW (Elf, __ELF_NATIVE_CLASS, type)
+#define _ElfW(e,w,t)   _ElfW_1 (e, w, _##t)
+#define _ElfW_1(e,w,t) e##w##t
+
+#include <bits/elfclass.h>             /* Defines __ELF_NATIVE_CLASS.  */
+#include <bits/link.h>
+
+/* Rendezvous structure used by the run-time dynamic linker to communicate
+   details of shared object loading to the debugger.  If the executable's
+   dynamic section has a DT_DEBUG element, the run-time linker sets that
+   element's value to the address where this structure can be found.  */
+
+struct r_debug
+  {
+    int r_version;             /* Version number for this protocol.  */
+
+    struct link_map *r_map;    /* Head of the chain of loaded objects.  */
+
+    /* This is the address of a function internal to the run-time linker,
+       that will always be called when the linker begins to map in a
+       library or unmap it, and again when the mapping change is complete.
+       The debugger can set a breakpoint at this address if it wants to
+       notice shared object mapping changes.  */
+    ElfW(Addr) r_brk;
+    enum
+      {
+       /* This state value describes the mapping change taking place when
+          the `r_brk' address is called.  */
+       RT_CONSISTENT,          /* Mapping change is complete.  */
+       RT_ADD,                 /* Beginning to add a new object.  */
+       RT_DELETE               /* Beginning to remove an object mapping.  */
+      } r_state;
+
+    ElfW(Addr) r_ldbase;       /* Base address the linker is loaded at.  */
+  };
+
+/* This is the instance of that structure used by the dynamic linker.  */
+extern struct r_debug _r_debug;
+
+/* This symbol refers to the "dynamic structure" in the `.dynamic' section
+   of whatever module refers to `_DYNAMIC'.  So, to find its own
+   `struct r_debug', a program could do:
+     for (dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn)
+       if (dyn->d_tag == DT_DEBUG)
+        r_debug = (struct r_debug *) dyn->d_un.d_ptr;
+   */
+extern ElfW(Dyn) _DYNAMIC[];
+
+/* Structure describing a loaded shared object.  The `l_next' and `l_prev'
+   members form a chain of all the shared objects loaded at startup.
+
+   These data structures exist in space used by the run-time dynamic linker;
+   modifying them may have disastrous results.  */
+
+struct link_map
+  {
+    /* These first few members are part of the protocol with the debugger.
+       This is the same format used in SVR4.  */
+
+    ElfW(Addr) l_addr;         /* Difference between the address in the ELF
+                                  file and the addresses in memory.  */
+    char *l_name;              /* Absolute file name object was found in.  */
+    ElfW(Dyn) *l_ld;           /* Dynamic section of the shared object.  */
+    struct link_map *l_next, *l_prev; /* Chain of loaded objects.  */
+  };
+
+#ifdef __USE_GNU
+
+/* Version numbers for la_version handshake interface.  */
+#define LAV_CURRENT    1
+
+/* Activity types signaled through la_activity.  */
+enum
+  {
+    LA_ACT_CONSISTENT,         /* Link map consistent again.  */
+    LA_ACT_ADD,                        /* New object will be added.  */
+    LA_ACT_DELETE              /* Objects will be removed.  */
+  };
+
+/* Values representing origin of name for dynamic loading.  */
+enum
+  {
+    LA_SER_ORIG = 0x01,                /* Original name.  */
+    LA_SER_LIBPATH = 0x02,     /* Directory from LD_LIBRARY_PATH.  */
+    LA_SER_RUNPATH = 0x04,     /* Directory from RPATH/RUNPATH.  */
+    LA_SER_CONFIG = 0x08,      /* Found through ldconfig.  */
+    LA_SER_DEFAULT = 0x40,     /* Default directory.  */
+    LA_SER_SECURE = 0x80       /* Unused.  */
+  };
+
+/* Values for la_objopen return value.  */
+enum
+  {
+    LA_FLG_BINDTO = 0x01,      /* Audit symbols bound to this object.  */
+    LA_FLG_BINDFROM = 0x02     /* Audit symbols bound from this object.  */
+  };
+
+/* Values for la_symbind flags parameter.  */
+enum
+  {
+    LA_SYMB_NOPLTENTER = 0x01, /* la_pltenter will not be called.  */
+    LA_SYMB_NOPLTEXIT = 0x02,  /* la_pltexit will not be called.  */
+    LA_SYMB_STRUCTCALL = 0x04, /* Return value is a structure.  */
+    LA_SYMB_DLSYM = 0x08,      /* Binding due to dlsym call.  */
+    LA_SYMB_ALTVALUE = 0x10    /* Value has been changed by a previous
+                                  la_symbind call.  */
+  };
+
+struct dl_phdr_info
+  {
+    ElfW(Addr) dlpi_addr;
+    const char *dlpi_name;
+    const ElfW(Phdr) *dlpi_phdr;
+    ElfW(Half) dlpi_phnum;
+
+    /* Note: Following members were introduced after the first
+       version of this structure was available.  Check the SIZE
+       argument passed to the dl_iterate_phdr callback to determine
+       whether or not each later member is available.  */
+
+    /* Incremented when a new object may have been added.  */
+    __extension__ unsigned long long int dlpi_adds;
+    /* Incremented when an object may have been removed.  */
+    __extension__ unsigned long long int dlpi_subs;
+
+    /* If there is a PT_TLS segment, its module ID as used in
+       TLS relocations, else zero.  */
+    size_t dlpi_tls_modid;
+
+    /* The address of the calling thread's instance of this module's
+       PT_TLS segment, if it has one and it has been allocated
+       in the calling thread, otherwise a null pointer.  */
+    void *dlpi_tls_data;
+  };
+
+__BEGIN_DECLS
+
+extern int dl_iterate_phdr (int (*__callback) (struct dl_phdr_info *,
+                                              size_t, void *),
+                           void *__data);
+
+
+/* Prototypes for the ld.so auditing interfaces.  These are not
+   defined anywhere in ld.so but instead have to be provided by the
+   auditing DSO.  */
+extern unsigned int la_version (unsigned int __version);
+extern void la_activity (uintptr_t *__cookie, unsigned int __flag);
+extern char *la_objsearch (const char *__name, uintptr_t *__cookie,
+                          unsigned int __flag);
+extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid,
+                               uintptr_t *__cookie);
+extern void la_preinit (uintptr_t *__cookie);
+extern uintptr_t la_symbind32 (Elf32_Sym *__sym, unsigned int __ndx,
+                              uintptr_t *__refcook, uintptr_t *__defcook,
+                              unsigned int *__flags, const char *__symname);
+extern uintptr_t la_symbind64 (Elf64_Sym *__sym, unsigned int __ndx,
+                              uintptr_t *__refcook, uintptr_t *__defcook,
+                              unsigned int *__flags, const char *__symname);
+extern unsigned int la_objclose (uintptr_t *__cookie);
+
+__END_DECLS
+
+#endif
+
+#endif /* link.h */
diff --git a/lib/libdss-include/include/linux/acct.h b/lib/libdss-include/include/linux/acct.h
new file mode 100644 (file)
index 0000000..19baf8a
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ *  BSD Process Accounting for Linux - Definitions
+ *
+ *  Author: Marco van Wieringen (mvw@planets.elm.net)
+ *
+ *  This header file contains the definitions needed to implement
+ *  BSD-style process accounting. The kernel accounting code and all
+ *  user-level programs that try to do something useful with the
+ *  process accounting log must include this file.
+ *
+ *  Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V.
+ *
+ */
+
+#ifndef _LINUX_ACCT_H
+#define _LINUX_ACCT_H
+
+#include <linux/types.h>
+
+#include <asm/param.h>
+#include <asm/byteorder.h>
+
+/* 
+ *  comp_t is a 16-bit "floating" point number with a 3-bit base 8
+ *  exponent and a 13-bit fraction.
+ *  comp2_t is 24-bit with 5-bit base 2 exponent and 20 bit fraction
+ *  (leading 1 not stored).
+ *  See linux/kernel/acct.c for the specific encoding systems used.
+ */
+
+typedef __u16  comp_t;
+typedef __u32  comp2_t;
+
+/*
+ *   accounting file record
+ *
+ *   This structure contains all of the information written out to the
+ *   process accounting file whenever a process exits.
+ */
+
+#define ACCT_COMM      16
+
+struct acct
+{
+       char            ac_flag;                /* Flags */
+       char            ac_version;             /* Always set to ACCT_VERSION */
+       /* for binary compatibility back until 2.0 */
+       __u16           ac_uid16;               /* LSB of Real User ID */
+       __u16           ac_gid16;               /* LSB of Real Group ID */
+       __u16           ac_tty;                 /* Control Terminal */
+       __u32           ac_btime;               /* Process Creation Time */
+       comp_t          ac_utime;               /* User Time */
+       comp_t          ac_stime;               /* System Time */
+       comp_t          ac_etime;               /* Elapsed Time */
+       comp_t          ac_mem;                 /* Average Memory Usage */
+       comp_t          ac_io;                  /* Chars Transferred */
+       comp_t          ac_rw;                  /* Blocks Read or Written */
+       comp_t          ac_minflt;              /* Minor Pagefaults */
+       comp_t          ac_majflt;              /* Major Pagefaults */
+       comp_t          ac_swaps;               /* Number of Swaps */
+/* m68k had no padding here. */
+       __u16           ac_ahz;                 /* AHZ */
+       __u32           ac_exitcode;            /* Exitcode */
+       char            ac_comm[ACCT_COMM + 1]; /* Command Name */
+       __u8            ac_etime_hi;            /* Elapsed Time MSB */
+       __u16           ac_etime_lo;            /* Elapsed Time LSB */
+       __u32           ac_uid;                 /* Real User ID */
+       __u32           ac_gid;                 /* Real Group ID */
+};
+
+struct acct_v3
+{
+       char            ac_flag;                /* Flags */
+       char            ac_version;             /* Always set to ACCT_VERSION */
+       __u16           ac_tty;                 /* Control Terminal */
+       __u32           ac_exitcode;            /* Exitcode */
+       __u32           ac_uid;                 /* Real User ID */
+       __u32           ac_gid;                 /* Real Group ID */
+       __u32           ac_pid;                 /* Process ID */
+       __u32           ac_ppid;                /* Parent Process ID */
+       __u32           ac_btime;               /* Process Creation Time */
+       float           ac_etime;               /* Elapsed Time */
+       comp_t          ac_utime;               /* User Time */
+       comp_t          ac_stime;               /* System Time */
+       comp_t          ac_mem;                 /* Average Memory Usage */
+       comp_t          ac_io;                  /* Chars Transferred */
+       comp_t          ac_rw;                  /* Blocks Read or Written */
+       comp_t          ac_minflt;              /* Minor Pagefaults */
+       comp_t          ac_majflt;              /* Major Pagefaults */
+       comp_t          ac_swaps;               /* Number of Swaps */
+       char            ac_comm[ACCT_COMM];     /* Command Name */
+};
+
+/*
+ *  accounting flags
+ */
+                               /* bit set when the process ... */
+#define AFORK          0x01    /* ... executed fork, but did not exec */
+#define ASU            0x02    /* ... used super-user privileges */
+#define ACOMPAT                0x04    /* ... used compatibility mode (VAX only not used) */
+#define ACORE          0x08    /* ... dumped core */
+#define AXSIG          0x10    /* ... was killed by a signal */
+
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+#define ACCT_BYTEORDER 0x80    /* accounting file is big endian */
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+#define ACCT_BYTEORDER 0x00    /* accounting file is little endian */
+#else
+#error unspecified endianness
+#endif
+
+#define ACCT_VERSION   2
+#define AHZ            (HZ)
+
+
+#endif /* _LINUX_ACCT_H */
diff --git a/lib/libdss-include/include/linux/adb.h b/lib/libdss-include/include/linux/adb.h
new file mode 100644 (file)
index 0000000..0815025
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Definitions for ADB (Apple Desktop Bus) support.
+ */
+#ifndef __ADB_H
+#define __ADB_H
+
+/* ADB commands */
+#define ADB_BUSRESET           0
+#define ADB_FLUSH(id)          (0x01 | ((id) << 4))
+#define ADB_WRITEREG(id, reg)  (0x08 | (reg) | ((id) << 4))
+#define ADB_READREG(id, reg)   (0x0C | (reg) | ((id) << 4))
+
+/* ADB default device IDs (upper 4 bits of ADB command byte) */
+#define ADB_DONGLE     1       /* "software execution control" devices */
+#define ADB_KEYBOARD   2
+#define ADB_MOUSE      3
+#define ADB_TABLET     4
+#define ADB_MODEM      5
+#define ADB_MISC       7       /* maybe a monitor */
+
+#define ADB_RET_OK     0
+#define ADB_RET_TIMEOUT        3
+
+/* The kind of ADB request. The controller may emulate some
+   or all of those CUDA/PMU packet kinds */
+#define ADB_PACKET     0
+#define CUDA_PACKET    1
+#define ERROR_PACKET   2
+#define TIMER_PACKET   3
+#define POWER_PACKET   4
+#define MACIIC_PACKET  5
+#define PMU_PACKET     6
+#define ADB_QUERY      7
+
+/* ADB queries */
+
+/* ADB_QUERY_GETDEVINFO
+ * Query ADB slot for device presence
+ * data[2] = id, rep[0] = orig addr, rep[1] = handler_id
+ */
+#define ADB_QUERY_GETDEVINFO   1
+
+
+#endif /* __ADB_H */
diff --git a/lib/libdss-include/include/linux/adfs_fs.h b/lib/libdss-include/include/linux/adfs_fs.h
new file mode 100644 (file)
index 0000000..4f506dc
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _ADFS_FS_H
+#define _ADFS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * Disc Record at disc address 0xc00
+ */
+struct adfs_discrecord {
+    __u8  log2secsize;
+    __u8  secspertrack;
+    __u8  heads;
+    __u8  density;
+    __u8  idlen;
+    __u8  log2bpmb;
+    __u8  skew;
+    __u8  bootoption;
+    __u8  lowsector;
+    __u8  nzones;
+    __le16 zone_spare;
+    __le32 root;
+    __le32 disc_size;
+    __le16 disc_id;
+    __u8  disc_name[10];
+    __le32 disc_type;
+    __le32 disc_size_high;
+    __u8  log2sharesize:4;
+    __u8  unused40:4;
+    __u8  big_flag:1;
+    __u8  unused41:1;
+    __u8  nzones_high;
+    __le32 format_version;
+    __le32 root_size;
+    __u8  unused52[60 - 52];
+};
+
+#define ADFS_DISCRECORD                (0xc00)
+#define ADFS_DR_OFFSET         (0x1c0)
+#define ADFS_DR_SIZE            60
+#define ADFS_DR_SIZE_BITS      (ADFS_DR_SIZE << 3)
+
+
+#endif /* _ADFS_FS_H */
diff --git a/lib/libdss-include/include/linux/affs_hardblocks.h b/lib/libdss-include/include/linux/affs_hardblocks.h
new file mode 100644 (file)
index 0000000..f1b948c
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef        AFFS_HARDBLOCKS_H
+#define        AFFS_HARDBLOCKS_H
+
+#include <linux/types.h>
+
+/* Just the needed definitions for the RDB of an Amiga HD. */
+
+struct RigidDiskBlock {
+       __u32   rdb_ID;
+       __be32  rdb_SummedLongs;
+       __s32   rdb_ChkSum;
+       __u32   rdb_HostID;
+       __be32  rdb_BlockBytes;
+       __u32   rdb_Flags;
+       __u32   rdb_BadBlockList;
+       __be32  rdb_PartitionList;
+       __u32   rdb_FileSysHeaderList;
+       __u32   rdb_DriveInit;
+       __u32   rdb_Reserved1[6];
+       __u32   rdb_Cylinders;
+       __u32   rdb_Sectors;
+       __u32   rdb_Heads;
+       __u32   rdb_Interleave;
+       __u32   rdb_Park;
+       __u32   rdb_Reserved2[3];
+       __u32   rdb_WritePreComp;
+       __u32   rdb_ReducedWrite;
+       __u32   rdb_StepRate;
+       __u32   rdb_Reserved3[5];
+       __u32   rdb_RDBBlocksLo;
+       __u32   rdb_RDBBlocksHi;
+       __u32   rdb_LoCylinder;
+       __u32   rdb_HiCylinder;
+       __u32   rdb_CylBlocks;
+       __u32   rdb_AutoParkSeconds;
+       __u32   rdb_HighRDSKBlock;
+       __u32   rdb_Reserved4;
+       char    rdb_DiskVendor[8];
+       char    rdb_DiskProduct[16];
+       char    rdb_DiskRevision[4];
+       char    rdb_ControllerVendor[8];
+       char    rdb_ControllerProduct[16];
+       char    rdb_ControllerRevision[4];
+       __u32   rdb_Reserved5[10];
+};
+
+#define        IDNAME_RIGIDDISK        0x5244534B      /* "RDSK" */
+
+struct PartitionBlock {
+       __be32  pb_ID;
+       __be32  pb_SummedLongs;
+       __s32   pb_ChkSum;
+       __u32   pb_HostID;
+       __be32  pb_Next;
+       __u32   pb_Flags;
+       __u32   pb_Reserved1[2];
+       __u32   pb_DevFlags;
+       __u8    pb_DriveName[32];
+       __u32   pb_Reserved2[15];
+       __be32  pb_Environment[17];
+       __u32   pb_EReserved[15];
+};
+
+#define        IDNAME_PARTITION        0x50415254      /* "PART" */
+
+#define RDB_ALLOCATION_LIMIT   16
+
+#endif /* AFFS_HARDBLOCKS_H */
diff --git a/lib/libdss-include/include/linux/agpgart.h b/lib/libdss-include/include/linux/agpgart.h
new file mode 100644 (file)
index 0000000..126eb8a
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * AGPGART module version 0.99
+ * Copyright (C) 1999 Jeff Hartmann
+ * Copyright (C) 1999 Precision Insight, Inc.
+ * Copyright (C) 1999 Xi Graphics, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _AGP_H
+#define _AGP_H
+
+#define AGPIOC_BASE       'A'
+#define AGPIOC_INFO       _IOR (AGPIOC_BASE, 0, struct agp_info*)
+#define AGPIOC_ACQUIRE    _IO  (AGPIOC_BASE, 1)
+#define AGPIOC_RELEASE    _IO  (AGPIOC_BASE, 2)
+#define AGPIOC_SETUP      _IOW (AGPIOC_BASE, 3, struct agp_setup*)
+#define AGPIOC_RESERVE    _IOW (AGPIOC_BASE, 4, struct agp_region*)
+#define AGPIOC_PROTECT    _IOW (AGPIOC_BASE, 5, struct agp_region*)
+#define AGPIOC_ALLOCATE   _IOWR(AGPIOC_BASE, 6, struct agp_allocate*)
+#define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int)
+#define AGPIOC_BIND       _IOW (AGPIOC_BASE, 8, struct agp_bind*)
+#define AGPIOC_UNBIND     _IOW (AGPIOC_BASE, 9, struct agp_unbind*)
+#define AGPIOC_CHIPSET_FLUSH _IO (AGPIOC_BASE, 10)
+
+#define AGP_DEVICE      "/dev/agpgart"
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#include <linux/types.h>
+
+struct agp_version {
+       __u16 major;
+       __u16 minor;
+};
+
+typedef struct _agp_info {
+       struct agp_version version;     /* version of the driver        */
+       __u32 bridge_id;        /* bridge vendor/device         */
+       __u32 agp_mode;         /* mode info of bridge          */
+       unsigned long aper_base;/* base of aperture             */
+       size_t aper_size;       /* size of aperture             */
+       size_t pg_total;        /* max pages (swap + system)    */
+       size_t pg_system;       /* max pages (system)           */
+       size_t pg_used;         /* current pages used           */
+} agp_info;
+
+typedef struct _agp_setup {
+       __u32 agp_mode;         /* mode info of bridge          */
+} agp_setup;
+
+/*
+ * The "prot" down below needs still a "sleep" flag somehow ...
+ */
+typedef struct _agp_segment {
+       __kernel_off_t pg_start;        /* starting page to populate    */
+       __kernel_size_t pg_count;       /* number of pages              */
+       int prot;                       /* prot flags for mmap          */
+} agp_segment;
+
+typedef struct _agp_region {
+       __kernel_pid_t pid;             /* pid of process       */
+       __kernel_size_t seg_count;      /* number of segments   */
+       struct _agp_segment *seg_list;
+} agp_region;
+
+typedef struct _agp_allocate {
+       int key;                /* tag of allocation            */
+       __kernel_size_t pg_count;/* number of pages             */
+       __u32 type;             /* 0 == normal, other devspec   */
+       __u32 physical;         /* device specific (some devices  
+                                * need a phys address of the     
+                                * actual page behind the gatt    
+                                * table)                        */
+} agp_allocate;
+
+typedef struct _agp_bind {
+       int key;                /* tag of allocation            */
+       __kernel_off_t pg_start;/* starting page to populate    */
+} agp_bind;
+
+typedef struct _agp_unbind {
+       int key;                /* tag of allocation            */
+       __u32 priority;         /* priority for paging out      */
+} agp_unbind;
+
+
+#endif /* _AGP_H */
diff --git a/lib/libdss-include/include/linux/aio_abi.h b/lib/libdss-include/include/linux/aio_abi.h
new file mode 100644 (file)
index 0000000..bb2554f
--- /dev/null
@@ -0,0 +1,111 @@
+/* include/linux/aio_abi.h
+ *
+ * Copyright 2000,2001,2002 Red Hat.
+ *
+ * Written by Benjamin LaHaise <bcrl@kvack.org>
+ *
+ * Distribute under the terms of the GPLv2 (see ../../COPYING) or under 
+ * the following terms.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied.  Red Hat makes no representations about
+ * the suitability of this software for any purpose.
+ *
+ * IN NO EVENT SHALL RED HAT BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+ * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
+ * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RED HAT HAS BEEN ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * RED HAT DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
+ * RED HAT HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ * ENHANCEMENTS, OR MODIFICATIONS.
+ */
+#ifndef __LINUX__AIO_ABI_H
+#define __LINUX__AIO_ABI_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+typedef __kernel_ulong_t aio_context_t;
+
+enum {
+       IOCB_CMD_PREAD = 0,
+       IOCB_CMD_PWRITE = 1,
+       IOCB_CMD_FSYNC = 2,
+       IOCB_CMD_FDSYNC = 3,
+       /* These two are experimental.
+        * IOCB_CMD_PREADX = 4,
+        * IOCB_CMD_POLL = 5,
+        */
+       IOCB_CMD_NOOP = 6,
+       IOCB_CMD_PREADV = 7,
+       IOCB_CMD_PWRITEV = 8,
+};
+
+/*
+ * Valid flags for the "aio_flags" member of the "struct iocb".
+ *
+ * IOCB_FLAG_RESFD - Set if the "aio_resfd" member of the "struct iocb"
+ *                   is valid.
+ */
+#define IOCB_FLAG_RESFD                (1 << 0)
+
+/* read() from /dev/aio returns these structures. */
+struct io_event {
+       __u64           data;           /* the data field from the iocb */
+       __u64           obj;            /* what iocb this event came from */
+       __s64           res;            /* result code for this event */
+       __s64           res2;           /* secondary result */
+};
+
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+#define PADDED(x,y)    x, y
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+#define PADDED(x,y)    y, x
+#else
+#error edit for your odd byteorder.
+#endif
+
+/*
+ * we always use a 64bit off_t when communicating
+ * with userland.  its up to libraries to do the
+ * proper padding and aio_error abstraction
+ */
+
+struct iocb {
+       /* these are internal to the kernel/libc. */
+       __u64   aio_data;       /* data to be returned in event's data */
+       __u32   PADDED(aio_key, aio_reserved1);
+                               /* the kernel sets aio_key to the req # */
+
+       /* common fields */
+       __u16   aio_lio_opcode; /* see IOCB_CMD_ above */
+       __s16   aio_reqprio;
+       __u32   aio_fildes;
+
+       __u64   aio_buf;
+       __u64   aio_nbytes;
+       __s64   aio_offset;
+
+       /* extra parameters */
+       __u64   aio_reserved2;  /* TODO: use this for a (struct sigevent *) */
+
+       /* flags for the "struct iocb" */
+       __u32   aio_flags;
+
+       /*
+        * if the IOCB_FLAG_RESFD flag of "aio_flags" is set, this is an
+        * eventfd to signal AIO readiness to
+        */
+       __u32   aio_resfd;
+}; /* 64 bytes */
+
+#undef IFBIG
+#undef IFLITTLE
+
+#endif /* __LINUX__AIO_ABI_H */
+
diff --git a/lib/libdss-include/include/linux/am437x-vpfe.h b/lib/libdss-include/include/linux/am437x-vpfe.h
new file mode 100644 (file)
index 0000000..d757743
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2013 - 2014 Texas Instruments, Inc.
+ *
+ * Benoit Parrot <bparrot@ti.com>
+ * Lad, Prabhakar <prabhakar.csengg@gmail.com>
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef AM437X_VPFE_USER_H
+#define AM437X_VPFE_USER_H
+
+#include <linux/videodev2.h>
+
+enum vpfe_ccdc_data_size {
+       VPFE_CCDC_DATA_16BITS = 0,
+       VPFE_CCDC_DATA_15BITS,
+       VPFE_CCDC_DATA_14BITS,
+       VPFE_CCDC_DATA_13BITS,
+       VPFE_CCDC_DATA_12BITS,
+       VPFE_CCDC_DATA_11BITS,
+       VPFE_CCDC_DATA_10BITS,
+       VPFE_CCDC_DATA_8BITS,
+};
+
+/* enum for No of pixel per line to be avg. in Black Clamping*/
+enum vpfe_ccdc_sample_length {
+       VPFE_CCDC_SAMPLE_1PIXELS = 0,
+       VPFE_CCDC_SAMPLE_2PIXELS,
+       VPFE_CCDC_SAMPLE_4PIXELS,
+       VPFE_CCDC_SAMPLE_8PIXELS,
+       VPFE_CCDC_SAMPLE_16PIXELS,
+};
+
+/* enum for No of lines in Black Clamping */
+enum vpfe_ccdc_sample_line {
+       VPFE_CCDC_SAMPLE_1LINES = 0,
+       VPFE_CCDC_SAMPLE_2LINES,
+       VPFE_CCDC_SAMPLE_4LINES,
+       VPFE_CCDC_SAMPLE_8LINES,
+       VPFE_CCDC_SAMPLE_16LINES,
+};
+
+/* enum for Alaw gamma width */
+enum vpfe_ccdc_gamma_width {
+       VPFE_CCDC_GAMMA_BITS_15_6 = 0,  /* use bits 15-6 for gamma */
+       VPFE_CCDC_GAMMA_BITS_14_5,
+       VPFE_CCDC_GAMMA_BITS_13_4,
+       VPFE_CCDC_GAMMA_BITS_12_3,
+       VPFE_CCDC_GAMMA_BITS_11_2,
+       VPFE_CCDC_GAMMA_BITS_10_1,
+       VPFE_CCDC_GAMMA_BITS_09_0,      /* use bits 9-0 for gamma */
+};
+
+/* structure for ALaw */
+struct vpfe_ccdc_a_law {
+       /* Enable/disable A-Law */
+       unsigned char enable;
+       /* Gamma Width Input */
+       enum vpfe_ccdc_gamma_width gamma_wd;
+};
+
+/* structure for Black Clamping */
+struct vpfe_ccdc_black_clamp {
+       unsigned char enable;
+       /* only if bClampEnable is TRUE */
+       enum vpfe_ccdc_sample_length sample_pixel;
+       /* only if bClampEnable is TRUE */
+       enum vpfe_ccdc_sample_line sample_ln;
+       /* only if bClampEnable is TRUE */
+       unsigned short start_pixel;
+       /* only if bClampEnable is TRUE */
+       unsigned short sgain;
+       /* only if bClampEnable is FALSE */
+       unsigned short dc_sub;
+};
+
+/* structure for Black Level Compensation */
+struct vpfe_ccdc_black_compensation {
+       /* Constant value to subtract from Red component */
+       char r;
+       /* Constant value to subtract from Gr component */
+       char gr;
+       /* Constant value to subtract from Blue component */
+       char b;
+       /* Constant value to subtract from Gb component */
+       char gb;
+};
+
+/* Structure for CCDC configuration parameters for raw capture mode passed
+ * by application
+ */
+struct vpfe_ccdc_config_params_raw {
+       /* data size value from 8 to 16 bits */
+       enum vpfe_ccdc_data_size data_sz;
+       /* Structure for Optional A-Law */
+       struct vpfe_ccdc_a_law alaw;
+       /* Structure for Optical Black Clamp */
+       struct vpfe_ccdc_black_clamp blk_clamp;
+       /* Structure for Black Compensation */
+       struct vpfe_ccdc_black_compensation blk_comp;
+};
+
+/*
+ *  Private IOCTL
+ * VIDIOC_AM437X_CCDC_CFG - Set CCDC configuration for raw capture
+ * This is an experimental ioctl that will change in future kernels. So use
+ * this ioctl with care !
+ **/
+#define VIDIOC_AM437X_CCDC_CFG \
+       _IOW('V', BASE_VIDIOC_PRIVATE + 1, void *)
+
+#endif         /* AM437X_VPFE_USER_H */
diff --git a/lib/libdss-include/include/linux/android/binder.h b/lib/libdss-include/include/linux/android/binder.h
new file mode 100644 (file)
index 0000000..bef9fd6
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2008 Google, Inc.
+ *
+ * Based on, but no longer compatible with, the original
+ * OpenBinder.org binder driver interface, which is:
+ *
+ * Copyright (c) 2005 Palmsource, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_BINDER_H
+#define _LINUX_BINDER_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define B_PACK_CHARS(c1, c2, c3, c4) \
+       ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
+#define B_TYPE_LARGE 0x85
+
+enum {
+       BINDER_TYPE_BINDER      = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
+       BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
+       BINDER_TYPE_HANDLE      = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
+       BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
+       BINDER_TYPE_FD          = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
+};
+
+enum {
+       FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
+       FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
+};
+
+#ifdef BINDER_IPC_32BIT
+typedef __u32 binder_size_t;
+typedef __u32 binder_uintptr_t;
+#else
+typedef __u64 binder_size_t;
+typedef __u64 binder_uintptr_t;
+#endif
+
+/*
+ * This is the flattened representation of a Binder object for transfer
+ * between processes.  The 'offsets' supplied as part of a binder transaction
+ * contains offsets into the data where these structures occur.  The Binder
+ * driver takes care of re-writing the structure type and data as it moves
+ * between processes.
+ */
+struct flat_binder_object {
+       /* 8 bytes for large_flat_header. */
+       __u32           type;
+       __u32           flags;
+
+       /* 8 bytes of data. */
+       union {
+               binder_uintptr_t        binder; /* local object */
+               __u32                   handle; /* remote object */
+       };
+
+       /* extra data associated with local object */
+       binder_uintptr_t        cookie;
+};
+
+/*
+ * On 64-bit platforms where user code may run in 32-bits the driver must
+ * translate the buffer (and local binder) addresses appropriately.
+ */
+
+struct binder_write_read {
+       binder_size_t           write_size;     /* bytes to write */
+       binder_size_t           write_consumed; /* bytes consumed by driver */
+       binder_uintptr_t        write_buffer;
+       binder_size_t           read_size;      /* bytes to read */
+       binder_size_t           read_consumed;  /* bytes consumed by driver */
+       binder_uintptr_t        read_buffer;
+};
+
+/* Use with BINDER_VERSION, driver fills in fields. */
+struct binder_version {
+       /* driver protocol version -- increment with incompatible change */
+       __s32       protocol_version;
+};
+
+/* This is the current protocol version. */
+#ifdef BINDER_IPC_32BIT
+#define BINDER_CURRENT_PROTOCOL_VERSION 7
+#else
+#define BINDER_CURRENT_PROTOCOL_VERSION 8
+#endif
+
+#define BINDER_WRITE_READ              _IOWR('b', 1, struct binder_write_read)
+#define BINDER_SET_IDLE_TIMEOUT                _IOW('b', 3, __s64)
+#define BINDER_SET_MAX_THREADS         _IOW('b', 5, __u32)
+#define BINDER_SET_IDLE_PRIORITY       _IOW('b', 6, __s32)
+#define BINDER_SET_CONTEXT_MGR         _IOW('b', 7, __s32)
+#define BINDER_THREAD_EXIT             _IOW('b', 8, __s32)
+#define BINDER_VERSION                 _IOWR('b', 9, struct binder_version)
+
+/*
+ * NOTE: Two special error codes you should check for when calling
+ * in to the driver are:
+ *
+ * EINTR -- The operation has been interupted.  This should be
+ * handled by retrying the ioctl() until a different error code
+ * is returned.
+ *
+ * ECONNREFUSED -- The driver is no longer accepting operations
+ * from your process.  That is, the process is being destroyed.
+ * You should handle this by exiting from your process.  Note
+ * that once this error code is returned, all further calls to
+ * the driver from any thread will return this same code.
+ */
+
+enum transaction_flags {
+       TF_ONE_WAY      = 0x01, /* this is a one-way call: async, no return */
+       TF_ROOT_OBJECT  = 0x04, /* contents are the component's root object */
+       TF_STATUS_CODE  = 0x08, /* contents are a 32-bit status code */
+       TF_ACCEPT_FDS   = 0x10, /* allow replies with file descriptors */
+};
+
+struct binder_transaction_data {
+       /* The first two are only used for bcTRANSACTION and brTRANSACTION,
+        * identifying the target and contents of the transaction.
+        */
+       union {
+               /* target descriptor of command transaction */
+               __u32   handle;
+               /* target descriptor of return transaction */
+               binder_uintptr_t ptr;
+       } target;
+       binder_uintptr_t        cookie; /* target object cookie */
+       __u32           code;           /* transaction command */
+
+       /* General information about the transaction. */
+       __u32           flags;
+       pid_t           sender_pid;
+       uid_t           sender_euid;
+       binder_size_t   data_size;      /* number of bytes of data */
+       binder_size_t   offsets_size;   /* number of bytes of offsets */
+
+       /* If this transaction is inline, the data immediately
+        * follows here; otherwise, it ends with a pointer to
+        * the data buffer.
+        */
+       union {
+               struct {
+                       /* transaction data */
+                       binder_uintptr_t        buffer;
+                       /* offsets from buffer to flat_binder_object structs */
+                       binder_uintptr_t        offsets;
+               } ptr;
+               __u8    buf[8];
+       } data;
+};
+
+struct binder_ptr_cookie {
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
+};
+
+struct binder_handle_cookie {
+       __u32 handle;
+       binder_uintptr_t cookie;
+} __attribute__((packed));
+
+struct binder_pri_desc {
+       __s32 priority;
+       __u32 desc;
+};
+
+struct binder_pri_ptr_cookie {
+       __s32 priority;
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
+};
+
+enum binder_driver_return_protocol {
+       BR_ERROR = _IOR('r', 0, __s32),
+       /*
+        * int: error code
+        */
+
+       BR_OK = _IO('r', 1),
+       /* No parameters! */
+
+       BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
+       BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
+       /*
+        * binder_transaction_data: the received command.
+        */
+
+       BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
+       /*
+        * not currently supported
+        * int: 0 if the last bcATTEMPT_ACQUIRE was not successful.
+        * Else the remote object has acquired a primary reference.
+        */
+
+       BR_DEAD_REPLY = _IO('r', 5),
+       /*
+        * The target of the last transaction (either a bcTRANSACTION or
+        * a bcATTEMPT_ACQUIRE) is no longer with us.  No parameters.
+        */
+
+       BR_TRANSACTION_COMPLETE = _IO('r', 6),
+       /*
+        * No parameters... always refers to the last transaction requested
+        * (including replies).  Note that this will be sent even for
+        * asynchronous transactions.
+        */
+
+       BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
+       BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
+       BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
+       BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
+       /*
+        * void *:      ptr to binder
+        * void *: cookie for binder
+        */
+
+       BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
+       /*
+        * not currently supported
+        * int: priority
+        * void *: ptr to binder
+        * void *: cookie for binder
+        */
+
+       BR_NOOP = _IO('r', 12),
+       /*
+        * No parameters.  Do nothing and examine the next command.  It exists
+        * primarily so that we can replace it with a BR_SPAWN_LOOPER command.
+        */
+
+       BR_SPAWN_LOOPER = _IO('r', 13),
+       /*
+        * No parameters.  The driver has determined that a process has no
+        * threads waiting to service incoming transactions.  When a process
+        * receives this command, it must spawn a new service thread and
+        * register it via bcENTER_LOOPER.
+        */
+
+       BR_FINISHED = _IO('r', 14),
+       /*
+        * not currently supported
+        * stop threadpool thread
+        */
+
+       BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+       BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+
+       BR_FAILED_REPLY = _IO('r', 17),
+       /*
+        * The the last transaction (either a bcTRANSACTION or
+        * a bcATTEMPT_ACQUIRE) failed (e.g. out of memory).  No parameters.
+        */
+};
+
+enum binder_driver_command_protocol {
+       BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
+       BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
+       /*
+        * binder_transaction_data: the sent command.
+        */
+
+       BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
+       /*
+        * not currently supported
+        * int:  0 if the last BR_ATTEMPT_ACQUIRE was not successful.
+        * Else you have acquired a primary reference on the object.
+        */
+
+       BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
+       /*
+        * void *: ptr to transaction data received on a read
+        */
+
+       BC_INCREFS = _IOW('c', 4, __u32),
+       BC_ACQUIRE = _IOW('c', 5, __u32),
+       BC_RELEASE = _IOW('c', 6, __u32),
+       BC_DECREFS = _IOW('c', 7, __u32),
+       /*
+        * int: descriptor
+        */
+
+       BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
+       BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
+       /*
+        * void *: ptr to binder
+        * void *: cookie for binder
+        */
+
+       BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
+       /*
+        * not currently supported
+        * int: priority
+        * int: descriptor
+        */
+
+       BC_REGISTER_LOOPER = _IO('c', 11),
+       /*
+        * No parameters.
+        * Register a spawned looper thread with the device.
+        */
+
+       BC_ENTER_LOOPER = _IO('c', 12),
+       BC_EXIT_LOOPER = _IO('c', 13),
+       /*
+        * No parameters.
+        * These two commands are sent as an application-level thread
+        * enters and exits the binder loop, respectively.  They are
+        * used so the binder can have an accurate count of the number
+        * of looping threads it has available.
+        */
+
+       BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14,
+                                               struct binder_handle_cookie),
+       /*
+        * int: handle
+        * void *: cookie
+        */
+
+       BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15,
+                                               struct binder_handle_cookie),
+       /*
+        * int: handle
+        * void *: cookie
+        */
+
+       BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+};
+
+#endif /* _LINUX_BINDER_H */
+
diff --git a/lib/libdss-include/include/linux/apm_bios.h b/lib/libdss-include/include/linux/apm_bios.h
new file mode 100644 (file)
index 0000000..7fbcc90
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Include file for the interface to an APM BIOS
+ * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+#ifndef _LINUX_APM_H
+#define _LINUX_APM_H
+
+
+#include <linux/types.h>
+
+typedef unsigned short apm_event_t;
+typedef unsigned short apm_eventinfo_t;
+
+struct apm_bios_info {
+       __u16   version;
+       __u16   cseg;
+       __u32   offset;
+       __u16   cseg_16;
+       __u16   dseg;
+       __u16   flags;
+       __u16   cseg_len;
+       __u16   cseg_16_len;
+       __u16   dseg_len;
+};
+
+
+/*
+ * Power states
+ */
+#define APM_STATE_READY                0x0000
+#define APM_STATE_STANDBY      0x0001
+#define APM_STATE_SUSPEND      0x0002
+#define APM_STATE_OFF          0x0003
+#define APM_STATE_BUSY         0x0004
+#define APM_STATE_REJECT       0x0005
+#define APM_STATE_OEM_SYS      0x0020
+#define APM_STATE_OEM_DEV      0x0040
+
+#define APM_STATE_DISABLE      0x0000
+#define APM_STATE_ENABLE       0x0001
+
+#define APM_STATE_DISENGAGE    0x0000
+#define APM_STATE_ENGAGE       0x0001
+
+/*
+ * Events (results of Get PM Event)
+ */
+#define APM_SYS_STANDBY                0x0001
+#define APM_SYS_SUSPEND                0x0002
+#define APM_NORMAL_RESUME      0x0003
+#define APM_CRITICAL_RESUME    0x0004
+#define APM_LOW_BATTERY                0x0005
+#define APM_POWER_STATUS_CHANGE        0x0006
+#define APM_UPDATE_TIME                0x0007
+#define APM_CRITICAL_SUSPEND   0x0008
+#define APM_USER_STANDBY       0x0009
+#define APM_USER_SUSPEND       0x000a
+#define APM_STANDBY_RESUME     0x000b
+#define APM_CAPABILITY_CHANGE  0x000c
+#define APM_USER_HIBERNATION   0x000d
+#define APM_HIBERNATION_RESUME 0x000e
+
+/*
+ * Error codes
+ */
+#define APM_SUCCESS            0x00
+#define APM_DISABLED           0x01
+#define APM_CONNECTED          0x02
+#define APM_NOT_CONNECTED      0x03
+#define APM_16_CONNECTED       0x05
+#define APM_16_UNSUPPORTED     0x06
+#define APM_32_CONNECTED       0x07
+#define APM_32_UNSUPPORTED     0x08
+#define APM_BAD_DEVICE         0x09
+#define APM_BAD_PARAM          0x0a
+#define APM_NOT_ENGAGED                0x0b
+#define APM_BAD_FUNCTION       0x0c
+#define APM_RESUME_DISABLED    0x0d
+#define APM_NO_ERROR           0x53
+#define APM_BAD_STATE          0x60
+#define APM_NO_EVENTS          0x80
+#define APM_NOT_PRESENT                0x86
+
+/*
+ * APM Device IDs
+ */
+#define APM_DEVICE_BIOS                0x0000
+#define APM_DEVICE_ALL         0x0001
+#define APM_DEVICE_DISPLAY     0x0100
+#define APM_DEVICE_STORAGE     0x0200
+#define APM_DEVICE_PARALLEL    0x0300
+#define APM_DEVICE_SERIAL      0x0400
+#define APM_DEVICE_NETWORK     0x0500
+#define APM_DEVICE_PCMCIA      0x0600
+#define APM_DEVICE_BATTERY     0x8000
+#define APM_DEVICE_OEM         0xe000
+#define APM_DEVICE_OLD_ALL     0xffff
+#define APM_DEVICE_CLASS       0x00ff
+#define APM_DEVICE_MASK                0xff00
+
+
+/*
+ * Battery status
+ */
+#define APM_MAX_BATTERIES      2
+
+/*
+ * APM defined capability bit flags
+ */
+#define APM_CAP_GLOBAL_STANDBY         0x0001
+#define APM_CAP_GLOBAL_SUSPEND         0x0002
+#define APM_CAP_RESUME_STANDBY_TIMER   0x0004 /* Timer resume from standby */
+#define APM_CAP_RESUME_SUSPEND_TIMER   0x0008 /* Timer resume from suspend */
+#define APM_CAP_RESUME_STANDBY_RING    0x0010 /* Resume on Ring fr standby */
+#define APM_CAP_RESUME_SUSPEND_RING    0x0020 /* Resume on Ring fr suspend */
+#define APM_CAP_RESUME_STANDBY_PCMCIA  0x0040 /* Resume on PCMCIA Ring */
+#define APM_CAP_RESUME_SUSPEND_PCMCIA  0x0080 /* Resume on PCMCIA Ring */
+
+/*
+ * ioctl operations
+ */
+#include <linux/ioctl.h>
+
+#define APM_IOC_STANDBY                _IO('A', 1)
+#define APM_IOC_SUSPEND                _IO('A', 2)
+
+#endif /* _LINUX_APM_H */
diff --git a/lib/libdss-include/include/linux/arcfb.h b/lib/libdss-include/include/linux/arcfb.h
new file mode 100644 (file)
index 0000000..721e765
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __LINUX_ARCFB_H__
+#define __LINUX_ARCFB_H__
+
+#define FBIO_WAITEVENT         _IO('F', 0x88)
+#define FBIO_GETCONTROL2       _IOR('F', 0x89, size_t)
+
+#endif
+
diff --git a/lib/libdss-include/include/linux/atalk.h b/lib/libdss-include/include/linux/atalk.h
new file mode 100644 (file)
index 0000000..4e5eefe
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef __LINUX_ATALK_H__
+#define __LINUX_ATALK_H__
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include <linux/socket.h>
+
+/*
+ * AppleTalk networking structures
+ *
+ * The following are directly referenced from the University Of Michigan
+ * netatalk for compatibility reasons.
+ */
+#define ATPORT_FIRST   1
+#define ATPORT_RESERVED        128
+#define ATPORT_LAST    254             /* 254 is only legal on localtalk */ 
+#define ATADDR_ANYNET  (__u16)0
+#define ATADDR_ANYNODE (__u8)0
+#define ATADDR_ANYPORT  (__u8)0
+#define ATADDR_BCAST   (__u8)255
+#define DDP_MAXSZ      587
+#define DDP_MAXHOPS     15             /* 4 bits of hop counter */
+
+#define SIOCATALKDIFADDR       (SIOCPROTOPRIVATE + 0)
+
+struct atalk_addr {
+       __be16  s_net;
+       __u8    s_node;
+};
+
+struct sockaddr_at {
+       __kernel_sa_family_t sat_family;
+       __u8              sat_port;
+       struct atalk_addr sat_addr;
+       char              sat_zero[8];
+};
+
+struct atalk_netrange {
+       __u8    nr_phase;
+       __be16  nr_firstnet;
+       __be16  nr_lastnet;
+};
+
+#endif /* __LINUX_ATALK_H__ */
diff --git a/lib/libdss-include/include/linux/atm.h b/lib/libdss-include/include/linux/atm.h
new file mode 100644 (file)
index 0000000..08e27be
--- /dev/null
@@ -0,0 +1,241 @@
+/* atm.h - general ATM declarations */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+/*
+ * WARNING: User-space programs should not #include <linux/atm.h> directly.
+ *          Instead, #include <atm.h>
+ */
+
+#ifndef _LINUX_ATM_H
+#define _LINUX_ATM_H
+
+/*
+ * BEGIN_xx and END_xx markers are used for automatic generation of
+ * documentation. Do not change them.
+ */
+
+
+#include <linux/atmapi.h>
+#include <linux/atmsap.h>
+#include <linux/atmioc.h>
+#include <linux/types.h>
+
+
+/* general ATM constants */
+#define ATM_CELL_SIZE              53  /* ATM cell size incl. header */
+#define ATM_CELL_PAYLOAD           48  /* ATM payload size */
+#define ATM_AAL0_SDU               52  /* AAL0 SDU size */
+#define ATM_MAX_AAL34_PDU       65535  /* maximum AAL3/4 PDU payload */
+#define ATM_AAL5_TRAILER            8  /* AAL5 trailer size */
+#define ATM_MAX_AAL5_PDU        65535  /* maximum AAL5 PDU payload */
+#define ATM_MAX_CDV              9999  /* maximum (default) CDV */
+#define ATM_NOT_RSV_VCI                    32  /* first non-reserved VCI value */
+
+#define ATM_MAX_VPI               255  /* maximum VPI at the UNI */
+#define ATM_MAX_VPI_NNI                  4096  /* maximum VPI at the NNI */
+#define ATM_MAX_VCI             65535  /* maximum VCI */
+
+
+/* "protcol" values for the socket system call */
+#define ATM_NO_AAL     0               /* AAL not specified */
+#define ATM_AAL0       13              /* "raw" ATM cells */
+#define ATM_AAL1       1               /* AAL1 (CBR) */
+#define ATM_AAL2       2               /* AAL2 (VBR) */
+#define ATM_AAL34      3               /* AAL3/4 (data) */
+#define ATM_AAL5       5               /* AAL5 (data) */
+
+/*
+ * socket option name coding functions
+ *
+ * Note that __SO_ENCODE and __SO_LEVEL are somewhat a hack since the
+ * << 22 only reserves 9 bits for the level.  On some architectures
+ * SOL_SOCKET is 0xFFFF, so that's a bit of a problem
+ */
+
+#define __SO_ENCODE(l,n,t)     ((((l) & 0x1FF) << 22) | ((n) << 16) | \
+                               sizeof(t))
+#define __SO_LEVEL_MATCH(c,m)  (((c) >> 22) == ((m) & 0x1FF))
+#define __SO_NUMBER(c)         (((c) >> 16) & 0x3f)
+#define __SO_SIZE(c)           ((c) & 0x3fff)
+
+/*
+ * ATM layer
+ */
+
+#define SO_SETCLP      __SO_ENCODE(SOL_ATM,0,int)
+                           /* set CLP bit value - TODO */
+#define SO_CIRANGE     __SO_ENCODE(SOL_ATM,1,struct atm_cirange)
+                           /* connection identifier range; socket must be
+                              bound or connected */
+#define SO_ATMQOS      __SO_ENCODE(SOL_ATM,2,struct atm_qos)
+                           /* Quality of Service setting */
+#define SO_ATMSAP      __SO_ENCODE(SOL_ATM,3,struct atm_sap)
+                           /* Service Access Point */
+#define SO_ATMPVC      __SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc)
+                           /* "PVC" address (also for SVCs); get only */
+#define SO_MULTIPOINT  __SO_ENCODE(SOL_ATM, 5, int)
+                           /* make this vc a p2mp */
+
+
+/*
+ * Note @@@: since the socket layers don't really distinguish the control and
+ * the data plane but generally seems to be data plane-centric, any layer is
+ * about equally wrong for the SAP. If you have a better idea about this,
+ * please speak up ...
+ */
+
+
+/* ATM cell header (for AAL0) */
+
+/* BEGIN_CH */
+#define ATM_HDR_GFC_MASK       0xf0000000
+#define ATM_HDR_GFC_SHIFT      28
+#define ATM_HDR_VPI_MASK       0x0ff00000
+#define ATM_HDR_VPI_SHIFT      20
+#define ATM_HDR_VCI_MASK       0x000ffff0
+#define ATM_HDR_VCI_SHIFT      4
+#define ATM_HDR_PTI_MASK       0x0000000e
+#define ATM_HDR_PTI_SHIFT      1
+#define ATM_HDR_CLP            0x00000001
+/* END_CH */
+
+
+/* PTI codings */
+
+/* BEGIN_PTI */
+#define ATM_PTI_US0    0  /* user data cell, congestion not exp, SDU-type 0 */
+#define ATM_PTI_US1    1  /* user data cell, congestion not exp, SDU-type 1 */
+#define ATM_PTI_UCES0  2  /* user data cell, cong. experienced, SDU-type 0 */
+#define ATM_PTI_UCES1  3  /* user data cell, cong. experienced, SDU-type 1 */
+#define ATM_PTI_SEGF5  4  /* segment OAM F5 flow related cell */
+#define ATM_PTI_E2EF5  5  /* end-to-end OAM F5 flow related cell */
+#define ATM_PTI_RSV_RM 6  /* reserved for traffic control/resource mgmt */
+#define ATM_PTI_RSV    7  /* reserved */
+/* END_PTI */
+
+
+/*
+ * The following items should stay in linux/atm.h, which should be linked to
+ * netatm/atm.h
+ */
+
+/* Traffic description */
+
+#define ATM_NONE       0               /* no traffic */
+#define ATM_UBR                1
+#define ATM_CBR                2
+#define ATM_VBR                3
+#define ATM_ABR                4
+#define ATM_ANYCLASS   5               /* compatible with everything */
+
+#define ATM_MAX_PCR    -1              /* maximum available PCR */
+
+struct atm_trafprm {
+       unsigned char   traffic_class;  /* traffic class (ATM_UBR, ...) */
+       int             max_pcr;        /* maximum PCR in cells per second */
+       int             pcr;            /* desired PCR in cells per second */
+       int             min_pcr;        /* minimum PCR in cells per second */
+       int             max_cdv;        /* maximum CDV in microseconds */
+       int             max_sdu;        /* maximum SDU in bytes */
+        /* extra params for ABR */
+        unsigned int   icr;            /* Initial Cell Rate (24-bit) */
+        unsigned int   tbe;            /* Transient Buffer Exposure (24-bit) */ 
+        unsigned int   frtt : 24;      /* Fixed Round Trip Time (24-bit) */
+        unsigned int   rif  : 4;       /* Rate Increment Factor (4-bit) */
+        unsigned int   rdf  : 4;       /* Rate Decrease Factor (4-bit) */
+        unsigned int nrm_pres  :1;      /* nrm present bit */
+        unsigned int trm_pres  :1;             /* rm present bit */
+        unsigned int adtf_pres :1;             /* adtf present bit */
+        unsigned int cdf_pres  :1;     /* cdf present bit*/
+        unsigned int nrm       :3;             /* Max # of Cells for each forward RM cell (3-bit) */
+        unsigned int trm       :3;     /* Time between forward RM cells (3-bit) */    
+       unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */
+       unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */
+        unsigned int spare     :9;      /* spare bits */ 
+};
+
+struct atm_qos {
+       struct atm_trafprm txtp;        /* parameters in TX direction */
+       struct atm_trafprm rxtp __ATM_API_ALIGN;
+                                       /* parameters in RX direction */
+       unsigned char aal __ATM_API_ALIGN;
+};
+
+/* PVC addressing */
+
+#define ATM_ITF_ANY    -1              /* "magic" PVC address values */
+#define ATM_VPI_ANY    -1
+#define ATM_VCI_ANY    -1
+#define ATM_VPI_UNSPEC -2
+#define ATM_VCI_UNSPEC -2
+
+
+struct sockaddr_atmpvc {
+       unsigned short  sap_family;     /* address family, AF_ATMPVC  */
+       struct {                        /* PVC address */
+               short   itf;            /* ATM interface */
+               short   vpi;            /* VPI (only 8 bits at UNI) */
+               int     vci;            /* VCI (only 16 bits at UNI) */
+       } sap_addr __ATM_API_ALIGN;     /* PVC address */
+};
+
+/* SVC addressing */
+
+#define        ATM_ESA_LEN     20              /* ATM End System Address length */
+#define ATM_E164_LEN   12              /* maximum E.164 number length */
+
+#define ATM_AFI_DCC    0x39            /* DCC ATM Format */
+#define ATM_AFI_ICD    0x47            /* ICD ATM Format */
+#define ATM_AFI_E164   0x45            /* E.164 ATM Format */
+#define ATM_AFI_LOCAL  0x49            /* Local ATM Format */ 
+
+#define ATM_AFI_DCC_GROUP      0xBD    /* DCC ATM Group Format */
+#define ATM_AFI_ICD_GROUP      0xC5    /* ICD ATM Group Format */
+#define ATM_AFI_E164_GROUP     0xC3    /* E.164 ATM Group Format */
+#define ATM_AFI_LOCAL_GROUP    0xC7    /* Local ATM Group Format */
+
+#define ATM_LIJ_NONE   0               /* no leaf-initiated join */
+#define ATM_LIJ                1               /* request joining */
+#define ATM_LIJ_RPJ    2               /* set to root-prompted join */
+#define ATM_LIJ_NJ     3               /* set to network join */
+
+
+struct sockaddr_atmsvc {
+    unsigned short     sas_family;     /* address family, AF_ATMSVC */
+    struct {                           /* SVC address */
+        unsigned char  prv[ATM_ESA_LEN];/* private ATM address */
+        char           pub[ATM_E164_LEN+1]; /* public address (E.164) */
+                                       /* unused addresses must be bzero'ed */
+       char            lij_type;       /* role in LIJ call; one of ATM_LIJ* */
+       __u32   lij_id;         /* LIJ call identifier */
+    } sas_addr __ATM_API_ALIGN;                /* SVC address */
+};
+
+
+static __inline__ int atmsvc_addr_in_use(struct sockaddr_atmsvc addr)
+{
+       return *addr.sas_addr.prv || *addr.sas_addr.pub;
+}
+
+
+static __inline__ int atmpvc_addr_in_use(struct sockaddr_atmpvc addr)
+{
+       return addr.sap_addr.itf || addr.sap_addr.vpi || addr.sap_addr.vci;
+}
+
+
+/*
+ * Some stuff for linux/sockios.h
+ */
+
+struct atmif_sioc {
+       int number;
+       int length;
+       void *arg;
+};
+
+
+typedef unsigned short atm_backend_t;
+#endif /* _LINUX_ATM_H */
diff --git a/lib/libdss-include/include/linux/atm_eni.h b/lib/libdss-include/include/linux/atm_eni.h
new file mode 100644 (file)
index 0000000..34f3179
--- /dev/null
@@ -0,0 +1,23 @@
+/* atm_eni.h - Driver-specific declarations of the ENI driver (for use by
+              driver-specific utilities) */
+
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_ENI_H
+#define LINUX_ATM_ENI_H
+
+#include <linux/atmioc.h>
+
+
+struct eni_multipliers {
+       int tx,rx;      /* values are in percent and must be > 100 */
+};
+
+
+#define ENI_MEMDUMP     _IOW('a',ATMIOC_SARPRV,struct atmif_sioc)
+                                                /* printk memory map */
+#define ENI_SETMULT    _IOW('a',ATMIOC_SARPRV+7,struct atmif_sioc)
+                                               /* set buffer multipliers */
+
+#endif
diff --git a/lib/libdss-include/include/linux/atm_he.h b/lib/libdss-include/include/linux/atm_he.h
new file mode 100644 (file)
index 0000000..2a7713b
--- /dev/null
@@ -0,0 +1,20 @@
+/* atm_he.h */
+
+#ifndef LINUX_ATM_HE_H
+#define LINUX_ATM_HE_H
+
+#include <linux/atmioc.h>
+
+#define HE_GET_REG     _IOW('a', ATMIOC_SARPRV, struct atmif_sioc)
+
+#define HE_REGTYPE_PCI 1
+#define HE_REGTYPE_RCM 2
+#define HE_REGTYPE_TCM 3
+#define HE_REGTYPE_MBOX        4
+
+struct he_ioctl_reg {
+       unsigned addr, val;
+       char type;
+};
+
+#endif /* LINUX_ATM_HE_H */
diff --git a/lib/libdss-include/include/linux/atm_idt77105.h b/lib/libdss-include/include/linux/atm_idt77105.h
new file mode 100644 (file)
index 0000000..8b72400
--- /dev/null
@@ -0,0 +1,28 @@
+/* atm_idt77105.h - Driver-specific declarations of the IDT77105 driver (for
+ * use by driver-specific utilities) */
+
+/* Written 1999 by Greg Banks <gnb@linuxfan.com>. Copied from atm_suni.h. */
+
+
+#ifndef LINUX_ATM_IDT77105_H
+#define LINUX_ATM_IDT77105_H
+
+#include <linux/types.h>
+#include <linux/atmioc.h>
+#include <linux/atmdev.h>
+
+/*
+ * Structure for IDT77105_GETSTAT and IDT77105_GETSTATZ ioctls.
+ * Pointed to by `arg' in atmif_sioc.
+ */
+struct idt77105_stats {
+        __u32 symbol_errors;  /* wire symbol errors */
+        __u32 tx_cells;       /* cells transmitted */
+        __u32 rx_cells;       /* cells received */
+        __u32 rx_hec_errors;  /* Header Error Check errors on receive */
+};
+
+#define IDT77105_GETSTAT       _IOW('a',ATMIOC_PHYPRV+2,struct atmif_sioc)     /* get stats */
+#define IDT77105_GETSTATZ      _IOW('a',ATMIOC_PHYPRV+3,struct atmif_sioc)     /* get stats and zero */
+
+#endif
diff --git a/lib/libdss-include/include/linux/atm_nicstar.h b/lib/libdss-include/include/linux/atm_nicstar.h
new file mode 100644 (file)
index 0000000..577b79f
--- /dev/null
@@ -0,0 +1,53 @@
+/******************************************************************************
+ *
+ * atm_nicstar.h
+ *
+ * Driver-specific declarations for use by NICSTAR driver specific utils.
+ *
+ * Author: Rui Prior
+ *
+ * (C) INESC 1998
+ *
+ ******************************************************************************/
+
+
+#ifndef LINUX_ATM_NICSTAR_H
+#define LINUX_ATM_NICSTAR_H
+
+/* Note: non-kernel programs including this file must also include
+ * sys/types.h for struct timeval
+ */
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+#define NS_GETPSTAT    _IOWR('a',ATMIOC_SARPRV+1,struct atmif_sioc)
+                                               /* get pool statistics */
+#define NS_SETBUFLEV   _IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc)
+                                               /* set buffer level markers */
+#define NS_ADJBUFLEV   _IO('a',ATMIOC_SARPRV+3)
+                                               /* adjust buffer level */
+
+typedef struct buf_nr
+{
+   unsigned min;
+   unsigned init;
+   unsigned max;
+}buf_nr;
+
+
+typedef struct pool_levels
+{
+   int buftype;
+   int count;          /* (At least for now) only used in NS_GETPSTAT */
+   buf_nr level;
+} pool_levels;
+
+/* type must be one of the following: */
+#define NS_BUFTYPE_SMALL 1
+#define NS_BUFTYPE_LARGE 2
+#define NS_BUFTYPE_HUGE 3
+#define NS_BUFTYPE_IOVEC 4
+
+
+#endif /* LINUX_ATM_NICSTAR_H */
diff --git a/lib/libdss-include/include/linux/atm_tcp.h b/lib/libdss-include/include/linux/atm_tcp.h
new file mode 100644 (file)
index 0000000..f3aa76a
--- /dev/null
@@ -0,0 +1,61 @@
+/* atm_tcp.h - Driver-specific declarations of the ATMTCP driver (for use by
+              driver-specific utilities) */
+
+/* Written 1997-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_TCP_H
+#define LINUX_ATM_TCP_H
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+#include <linux/types.h>
+
+
+/*
+ * All values in struct atmtcp_hdr are in network byte order
+ */
+
+struct atmtcp_hdr {
+       __u16   vpi;
+       __u16   vci;
+       __u32   length;         /* ... of data part */
+};
+
+/*
+ * All values in struct atmtcp_command are in host byte order
+ */
+
+#define ATMTCP_HDR_MAGIC       (~0)    /* this length indicates a command */
+#define ATMTCP_CTRL_OPEN       1       /* request/reply */
+#define ATMTCP_CTRL_CLOSE      2       /* request/reply */
+
+struct atmtcp_control {
+       struct atmtcp_hdr hdr;  /* must be first */
+       int type;               /* message type; both directions */
+       atm_kptr_t vcc;         /* both directions */
+       struct sockaddr_atmpvc addr; /* suggested value from kernel */
+       struct atm_qos  qos;    /* both directions */
+       int result;             /* to kernel only */
+} __ATM_API_ALIGN;
+
+/*
+ * Field usage:
+ * Messge type dir.    hdr.v?i type    addr    qos     vcc     result
+ * -----------  ----   ------- ----    ----    ---     ---     ------
+ * OPEN                K->D    Y       Y       Y       Y       Y       0
+ * OPEN                D->K    -       Y       Y       Y       Y       Y
+ * CLOSE       K->D    -       -       Y       -       Y       0
+ * CLOSE       D->K    -       -       -       -       Y       Y
+ */
+
+#define SIOCSIFATMTCP  _IO('a',ATMIOC_ITF)     /* set ATMTCP mode */
+#define ATMTCP_CREATE  _IO('a',ATMIOC_ITF+14)  /* create persistent ATMTCP
+                                                  interface */
+#define ATMTCP_REMOVE  _IO('a',ATMIOC_ITF+15)  /* destroy persistent ATMTCP
+                                                  interface */
+
+
+
+#endif /* LINUX_ATM_TCP_H */
diff --git a/lib/libdss-include/include/linux/atm_zatm.h b/lib/libdss-include/include/linux/atm_zatm.h
new file mode 100644 (file)
index 0000000..9c9c6ad
--- /dev/null
@@ -0,0 +1,46 @@
+/* atm_zatm.h - Driver-specific declarations of the ZATM driver (for use by
+               driver-specific utilities) */
+
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_ZATM_H
+#define LINUX_ATM_ZATM_H
+
+/*
+ * Note: non-kernel programs including this file must also include
+ * sys/types.h for struct timeval
+ */
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+#define ZATM_GETPOOL   _IOW('a',ATMIOC_SARPRV+1,struct atmif_sioc)
+                                               /* get pool statistics */
+#define ZATM_GETPOOLZ  _IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc)
+                                               /* get statistics and zero */
+#define ZATM_SETPOOL   _IOW('a',ATMIOC_SARPRV+3,struct atmif_sioc)
+                                               /* set pool parameters */
+
+struct zatm_pool_info {
+       int ref_count;                  /* free buffer pool usage counters */
+       int low_water,high_water;       /* refill parameters */
+       int rqa_count,rqu_count;        /* queue condition counters */
+       int offset,next_off;            /* alignment optimizations: offset */
+       int next_cnt,next_thres;        /* repetition counter and threshold */
+};
+
+struct zatm_pool_req {
+       int pool_num;                   /* pool number */
+       struct zatm_pool_info info;     /* actual information */
+};
+
+#define ZATM_OAM_POOL          0       /* free buffer pool for OAM cells */
+#define ZATM_AAL0_POOL         1       /* free buffer pool for AAL0 cells */
+#define ZATM_AAL5_POOL_BASE    2       /* first AAL5 free buffer pool */
+#define ZATM_LAST_POOL ZATM_AAL5_POOL_BASE+10 /* max. 64 kB */
+
+#define ZATM_TIMER_HISTORY_SIZE        16      /* number of timer adjustments to
+                                          record; must be 2^n */
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmapi.h b/lib/libdss-include/include/linux/atmapi.h
new file mode 100644 (file)
index 0000000..8fe54d9
--- /dev/null
@@ -0,0 +1,29 @@
+/* atmapi.h - ATM API user space/kernel compatibility */
+/* Written 1999,2000 by Werner Almesberger, EPFL ICA */
+
+#ifndef _LINUX_ATMAPI_H
+#define _LINUX_ATMAPI_H
+
+#if defined(__sparc__) || defined(__ia64__)
+/* such alignment is not required on 32 bit sparcs, but we can't
+   figure that we are on a sparc64 while compiling user-space programs. */
+#define __ATM_API_ALIGN        __attribute__((aligned(8)))
+#else
+#define __ATM_API_ALIGN
+#endif
+
+
+/*
+ * Opaque type for kernel pointers. Note that _ is never accessed. We need
+ * the struct in order hide the array, so that we can make simple assignments
+ * instead of being forced to use memcpy. It also improves error reporting for
+ * code that still assumes that we're passing unsigned longs.
+ *
+ * Convention: NULL pointers are passed as a field of all zeroes.
+ */
+typedef struct { unsigned char _[8]; } __ATM_API_ALIGN atm_kptr_t;
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmarp.h b/lib/libdss-include/include/linux/atmarp.h
new file mode 100644 (file)
index 0000000..231f4bd
--- /dev/null
@@ -0,0 +1,41 @@
+/* atmarp.h - ATM ARP protocol and kernel-demon interface definitions */
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef _LINUX_ATMARP_H
+#define _LINUX_ATMARP_H
+
+#include <linux/types.h>
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+
+#define ATMARP_RETRY_DELAY 30          /* request next resolution or forget
+                                          NAK after 30 sec - should go into
+                                          atmclip.h */
+#define ATMARP_MAX_UNRES_PACKETS 5     /* queue that many packets while
+                                          waiting for the resolver */
+
+
+#define ATMARPD_CTRL   _IO('a',ATMIOC_CLIP+1)  /* become atmarpd ctrl sock */
+#define ATMARP_MKIP    _IO('a',ATMIOC_CLIP+2)  /* attach socket to IP */
+#define ATMARP_SETENTRY        _IO('a',ATMIOC_CLIP+3)  /* fill or hide ARP entry */
+#define ATMARP_ENCAP   _IO('a',ATMIOC_CLIP+5)  /* change encapsulation */
+
+
+enum atmarp_ctrl_type {
+       act_invalid,            /* catch uninitialized structures */
+       act_need,               /* need address resolution */
+       act_up,                 /* interface is coming up */
+       act_down,               /* interface is going down */
+       act_change              /* interface configuration has changed */
+};
+
+struct atmarp_ctrl {
+       enum atmarp_ctrl_type   type;   /* message type */
+       int                     itf_num;/* interface number (if present) */
+       __be32                  ip;     /* IP address (act_need only) */
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmbr2684.h b/lib/libdss-include/include/linux/atmbr2684.h
new file mode 100644 (file)
index 0000000..fdb2629
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef _LINUX_ATMBR2684_H
+#define _LINUX_ATMBR2684_H
+
+#include <linux/types.h>
+#include <linux/atm.h>
+#include <linux/if.h>          /* For IFNAMSIZ */
+
+/*
+ * Type of media we're bridging (ethernet, token ring, etc)  Currently only
+ * ethernet is supported
+ */
+#define BR2684_MEDIA_ETHERNET  (0)     /* 802.3 */
+#define BR2684_MEDIA_802_4     (1)     /* 802.4 */
+#define BR2684_MEDIA_TR                (2)     /* 802.5 - token ring */
+#define BR2684_MEDIA_FDDI      (3)
+#define BR2684_MEDIA_802_6     (4)     /* 802.6 */
+
+                                       /* used only at device creation:  */
+#define BR2684_FLAG_ROUTED     (1<<16) /* payload is routed, not bridged */
+
+/*
+ * Is there FCS inbound on this VC?  This currently isn't supported.
+ */
+#define BR2684_FCSIN_NO                (0)
+#define BR2684_FCSIN_IGNORE    (1)
+#define BR2684_FCSIN_VERIFY    (2)
+
+/*
+ * Is there FCS outbound on this VC?  This currently isn't supported.
+ */
+#define BR2684_FCSOUT_NO       (0)
+#define BR2684_FCSOUT_SENDZERO (1)
+#define BR2684_FCSOUT_GENERATE (2)
+
+/*
+ * Does this VC include LLC encapsulation?
+ */
+#define BR2684_ENCAPS_VC       (0)     /* VC-mux */
+#define BR2684_ENCAPS_LLC      (1)
+#define BR2684_ENCAPS_AUTODETECT (2)   /* Unsuported */
+
+/*
+ * Is this VC bridged or routed?
+ */
+
+#define BR2684_PAYLOAD_ROUTED   (0)
+#define BR2684_PAYLOAD_BRIDGED  (1)
+
+/*
+ * This is for the ATM_NEWBACKENDIF call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_newif_br2684 {
+       atm_backend_t backend_num;      /* ATM_BACKEND_BR2684 */
+       int media;              /* BR2684_MEDIA_*, flags in upper bits */
+       char ifname[IFNAMSIZ];
+       int mtu;
+};
+
+/*
+ * This structure is used to specify a br2684 interface - either by a
+ * positive integer (returned by ATM_NEWBACKENDIF) or the interfaces name
+ */
+#define BR2684_FIND_BYNOTHING  (0)
+#define BR2684_FIND_BYNUM      (1)
+#define BR2684_FIND_BYIFNAME   (2)
+struct br2684_if_spec {
+       int method;             /* BR2684_FIND_* */
+       union {
+               char ifname[IFNAMSIZ];
+               int devnum;
+       } spec;
+};
+
+/*
+ * This is for the ATM_SETBACKEND call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_backend_br2684 {
+       atm_backend_t backend_num;      /* ATM_BACKEND_BR2684 */
+       struct br2684_if_spec ifspec;
+       int fcs_in;             /* BR2684_FCSIN_* */
+       int fcs_out;            /* BR2684_FCSOUT_* */
+       int fcs_auto;           /* 1: fcs_{in,out} disabled if no FCS rx'ed */
+       int encaps;             /* BR2684_ENCAPS_* */
+       int has_vpiid;          /* 1: use vpn_id - Unsupported */
+       __u8 vpn_id[7];
+       int send_padding;       /* unsupported */
+       int min_size;           /* we will pad smaller packets than this */
+};
+
+/*
+ * The BR2684_SETFILT ioctl is an experimental mechanism for folks
+ * terminating a large number of IP-only vcc's.  When netfilter allows
+ * efficient per-if in/out filters, this support will be removed
+ */
+struct br2684_filter {
+       __be32 prefix;          /* network byte order */
+       __be32 netmask;         /* 0 = disable filter */
+};
+
+struct br2684_filter_set {
+       struct br2684_if_spec ifspec;
+       struct br2684_filter filter;
+};
+
+enum br2684_payload {
+       p_routed = BR2684_PAYLOAD_ROUTED,
+       p_bridged = BR2684_PAYLOAD_BRIDGED,
+};
+
+#define BR2684_SETFILT _IOW( 'a', ATMIOC_BACKEND + 0, \
+                               struct br2684_filter_set)
+
+#endif /* _LINUX_ATMBR2684_H */
diff --git a/lib/libdss-include/include/linux/atmclip.h b/lib/libdss-include/include/linux/atmclip.h
new file mode 100644 (file)
index 0000000..02c94c4
--- /dev/null
@@ -0,0 +1,21 @@
+/* atmclip.h - Classical IP over ATM */
+/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_ATMCLIP_H
+#define LINUX_ATMCLIP_H
+
+#include <linux/sockios.h>
+#include <linux/atmioc.h>
+
+
+#define RFC1483LLC_LEN 8               /* LLC+OUI+PID = 8 */
+#define RFC1626_MTU    9180            /* RFC1626 default MTU */
+
+#define CLIP_DEFAULT_IDLETIMER 1200    /* 20 minutes, see RFC1755 */
+#define CLIP_CHECK_INTERVAL     10     /* check every ten seconds */
+
+#define        SIOCMKCLIP      _IO('a',ATMIOC_CLIP)    /* create IP interface */
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmdev.h b/lib/libdss-include/include/linux/atmdev.h
new file mode 100644 (file)
index 0000000..8faa8b9
--- /dev/null
@@ -0,0 +1,215 @@
+/* atmdev.h - ATM device driver declarations and various related items */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_ATMDEV_H
+#define LINUX_ATMDEV_H
+
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+
+
+#define ESI_LEN                6
+
+#define ATM_OC3_PCR    (155520000/270*260/8/53)
+                       /* OC3 link rate:  155520000 bps
+                          SONET overhead: /270*260 (9 section, 1 path)
+                          bits per cell:  /8/53
+                          max cell rate:  353207.547 cells/sec */
+#define ATM_25_PCR     ((25600000/8-8000)/54)
+                       /* 25 Mbps ATM cell rate (59111) */
+#define ATM_OC12_PCR   (622080000/1080*1040/8/53)
+                       /* OC12 link rate: 622080000 bps
+                          SONET overhead: /1080*1040
+                          bits per cell:  /8/53
+                          max cell rate:  1412830.188 cells/sec */
+#define ATM_DS3_PCR    (8000*12)
+                       /* DS3: 12 cells in a 125 usec time slot */
+
+
+#define __AAL_STAT_ITEMS \
+    __HANDLE_ITEM(tx);                 /* TX okay */ \
+    __HANDLE_ITEM(tx_err);             /* TX errors */ \
+    __HANDLE_ITEM(rx);                 /* RX okay */ \
+    __HANDLE_ITEM(rx_err);             /* RX errors */ \
+    __HANDLE_ITEM(rx_drop);            /* RX out of memory */
+
+struct atm_aal_stats {
+#define __HANDLE_ITEM(i) int i
+       __AAL_STAT_ITEMS
+#undef __HANDLE_ITEM
+};
+
+
+struct atm_dev_stats {
+       struct atm_aal_stats aal0;
+       struct atm_aal_stats aal34;
+       struct atm_aal_stats aal5;
+} __ATM_API_ALIGN;
+
+
+#define ATM_GETLINKRATE        _IOW('a',ATMIOC_ITF+1,struct atmif_sioc)
+                                       /* get link rate */
+#define ATM_GETNAMES   _IOW('a',ATMIOC_ITF+3,struct atm_iobuf)
+                                       /* get interface names (numbers) */
+#define ATM_GETTYPE    _IOW('a',ATMIOC_ITF+4,struct atmif_sioc)
+                                       /* get interface type name */
+#define ATM_GETESI     _IOW('a',ATMIOC_ITF+5,struct atmif_sioc)
+                                       /* get interface ESI */
+#define ATM_GETADDR    _IOW('a',ATMIOC_ITF+6,struct atmif_sioc)
+                                       /* get itf's local ATM addr. list */
+#define ATM_RSTADDR    _IOW('a',ATMIOC_ITF+7,struct atmif_sioc)
+                                       /* reset itf's ATM address list */
+#define ATM_ADDADDR    _IOW('a',ATMIOC_ITF+8,struct atmif_sioc)
+                                       /* add a local ATM address */
+#define ATM_DELADDR    _IOW('a',ATMIOC_ITF+9,struct atmif_sioc)
+                                       /* remove a local ATM address */
+#define ATM_GETCIRANGE _IOW('a',ATMIOC_ITF+10,struct atmif_sioc)
+                                       /* get connection identifier range */
+#define ATM_SETCIRANGE _IOW('a',ATMIOC_ITF+11,struct atmif_sioc)
+                                       /* set connection identifier range */
+#define ATM_SETESI     _IOW('a',ATMIOC_ITF+12,struct atmif_sioc)
+                                       /* set interface ESI */
+#define ATM_SETESIF    _IOW('a',ATMIOC_ITF+13,struct atmif_sioc)
+                                       /* force interface ESI */
+#define ATM_ADDLECSADDR        _IOW('a', ATMIOC_ITF+14, struct atmif_sioc)
+                                       /* register a LECS address */
+#define ATM_DELLECSADDR        _IOW('a', ATMIOC_ITF+15, struct atmif_sioc)
+                                       /* unregister a LECS address */
+#define ATM_GETLECSADDR        _IOW('a', ATMIOC_ITF+16, struct atmif_sioc)
+                                       /* retrieve LECS address(es) */
+
+#define ATM_GETSTAT    _IOW('a',ATMIOC_SARCOM+0,struct atmif_sioc)
+                                       /* get AAL layer statistics */
+#define ATM_GETSTATZ   _IOW('a',ATMIOC_SARCOM+1,struct atmif_sioc)
+                                       /* get AAL layer statistics and zero */
+#define ATM_GETLOOP    _IOW('a',ATMIOC_SARCOM+2,struct atmif_sioc)
+                                       /* get loopback mode */
+#define ATM_SETLOOP    _IOW('a',ATMIOC_SARCOM+3,struct atmif_sioc)
+                                       /* set loopback mode */
+#define ATM_QUERYLOOP  _IOW('a',ATMIOC_SARCOM+4,struct atmif_sioc)
+                                       /* query supported loopback modes */
+#define ATM_SETSC      _IOW('a',ATMIOC_SPECIAL+1,int)
+                                       /* enable or disable single-copy */
+#define ATM_SETBACKEND _IOW('a',ATMIOC_SPECIAL+2,atm_backend_t)
+                                       /* set backend handler */
+#define ATM_NEWBACKENDIF _IOW('a',ATMIOC_SPECIAL+3,atm_backend_t)
+                                       /* use backend to make new if */
+#define ATM_ADDPARTY   _IOW('a', ATMIOC_SPECIAL+4,struct atm_iobuf)
+                                       /* add party to p2mp call */
+#ifdef CONFIG_COMPAT
+/* It actually takes struct sockaddr_atmsvc, not struct atm_iobuf */
+#define COMPAT_ATM_ADDPARTY    _IOW('a', ATMIOC_SPECIAL+4,struct compat_atm_iobuf)
+#endif
+#define ATM_DROPPARTY  _IOW('a', ATMIOC_SPECIAL+5,int)
+                                       /* drop party from p2mp call */
+
+/*
+ * These are backend handkers that can be set via the ATM_SETBACKEND call
+ * above.  In the future we may support dynamic loading of these - for now,
+ * they're just being used to share the ATMIOC_BACKEND ioctls
+ */
+#define ATM_BACKEND_RAW                0       
+#define ATM_BACKEND_PPP                1       /* PPPoATM - RFC2364 */
+#define ATM_BACKEND_BR2684     2       /* Bridged RFC1483/2684 */
+
+/* for ATM_GETTYPE */
+#define ATM_ITFTYP_LEN 8       /* maximum length of interface type name */
+
+/*
+ * Loopback modes for ATM_{PHY,SAR}_{GET,SET}LOOP
+ */
+
+/* Point of loopback                           CPU-->SAR-->PHY-->line--> ... */
+#define __ATM_LM_NONE  0       /* no loop back     ^     ^     ^      ^      */
+#define __ATM_LM_AAL   1       /* loop back PDUs --'     |     |      |      */
+#define __ATM_LM_ATM   2       /* loop back ATM cells ---'     |      |      */
+/* RESERVED            4       loop back on PHY side  ---'                   */
+#define __ATM_LM_PHY   8       /* loop back bits (digital) ----'      |      */
+#define __ATM_LM_ANALOG 16     /* loop back the analog signal --------'      */
+
+/* Direction of loopback */
+#define __ATM_LM_MKLOC(n)      ((n))       /* Local (i.e. loop TX to RX) */
+#define __ATM_LM_MKRMT(n)      ((n) << 8)  /* Remote (i.e. loop RX to TX) */
+
+#define __ATM_LM_XTLOC(n)      ((n) & 0xff)
+#define __ATM_LM_XTRMT(n)      (((n) >> 8) & 0xff)
+
+#define ATM_LM_NONE    0       /* no loopback */
+
+#define ATM_LM_LOC_AAL __ATM_LM_MKLOC(__ATM_LM_AAL)
+#define ATM_LM_LOC_ATM __ATM_LM_MKLOC(__ATM_LM_ATM)
+#define ATM_LM_LOC_PHY __ATM_LM_MKLOC(__ATM_LM_PHY)
+#define ATM_LM_LOC_ANALOG __ATM_LM_MKLOC(__ATM_LM_ANALOG)
+
+#define ATM_LM_RMT_AAL __ATM_LM_MKRMT(__ATM_LM_AAL)
+#define ATM_LM_RMT_ATM __ATM_LM_MKRMT(__ATM_LM_ATM)
+#define ATM_LM_RMT_PHY __ATM_LM_MKRMT(__ATM_LM_PHY)
+#define ATM_LM_RMT_ANALOG __ATM_LM_MKRMT(__ATM_LM_ANALOG)
+
+/*
+ * Note: ATM_LM_LOC_* and ATM_LM_RMT_* can be combined, provided that
+ * __ATM_LM_XTLOC(x) <= __ATM_LM_XTRMT(x)
+ */
+
+
+struct atm_iobuf {
+       int length;
+       void *buffer;
+};
+
+/* for ATM_GETCIRANGE / ATM_SETCIRANGE */
+
+#define ATM_CI_MAX      -1              /* use maximum range of VPI/VCI */
+struct atm_cirange {
+       signed char     vpi_bits;       /* 1..8, ATM_CI_MAX (-1) for maximum */
+       signed char     vci_bits;       /* 1..16, ATM_CI_MAX (-1) for maximum */
+};
+
+/* for ATM_SETSC; actually taken from the ATM_VF number space */
+
+#define ATM_SC_RX      1024            /* enable RX single-copy */
+#define ATM_SC_TX      2048            /* enable TX single-copy */
+
+#define ATM_BACKLOG_DEFAULT 32 /* if we get more, we're likely to time out
+                                 anyway */
+
+/* MF: change_qos (Modify) flags */
+
+#define ATM_MF_IMMED    1      /* Block until change is effective */
+#define ATM_MF_INC_RSV  2      /* Change reservation on increase */
+#define ATM_MF_INC_SHP  4      /* Change shaping on increase */
+#define ATM_MF_DEC_RSV  8      /* Change reservation on decrease */
+#define ATM_MF_DEC_SHP 16      /* Change shaping on decrease */
+#define ATM_MF_BWD     32      /* Set the backward direction parameters */
+
+#define ATM_MF_SET     (ATM_MF_INC_RSV | ATM_MF_INC_SHP | ATM_MF_DEC_RSV | \
+                         ATM_MF_DEC_SHP | ATM_MF_BWD)
+
+/*
+ * ATM_VS_* are used to express VC state in a human-friendly way.
+ */
+
+#define ATM_VS_IDLE    0       /* VC is not used */
+#define ATM_VS_CONNECTED 1     /* VC is connected */
+#define ATM_VS_CLOSING 2       /* VC is closing */
+#define ATM_VS_LISTEN  3       /* VC is listening for incoming setups */
+#define ATM_VS_INUSE   4       /* VC is in use (registered with atmsigd) */
+#define ATM_VS_BOUND   5       /* VC is bound */
+
+#define ATM_VS2TXT_MAP \
+    "IDLE", "CONNECTED", "CLOSING", "LISTEN", "INUSE", "BOUND"
+
+#define ATM_VF2TXT_MAP \
+    "ADDR",    "READY",        "PARTIAL",      "REGIS", \
+    "RELEASED", "HASQOS",      "LISTEN",       "META", \
+    "256",     "512",          "1024",         "2048", \
+    "SESSION", "HASSAP",       "BOUND",        "CLOSE"
+
+
+
+#endif /* LINUX_ATMDEV_H */
diff --git a/lib/libdss-include/include/linux/atmioc.h b/lib/libdss-include/include/linux/atmioc.h
new file mode 100644 (file)
index 0000000..37f67aa
--- /dev/null
@@ -0,0 +1,41 @@
+/* atmioc.h - ranges for ATM-related ioctl numbers */
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+/*
+ * See http://icawww1.epfl.ch/linux-atm/magic.html for the complete list of
+ * "magic" ioctl numbers.
+ */
+
+
+#ifndef _LINUX_ATMIOC_H
+#define _LINUX_ATMIOC_H
+
+#include <asm/ioctl.h>
+               /* everybody including atmioc.h will also need _IO{,R,W,WR} */
+
+#define ATMIOC_PHYCOM    0x00 /* PHY device common ioctls, globally unique */
+#define ATMIOC_PHYCOM_END 0x0f
+#define ATMIOC_PHYTYP    0x10 /* PHY dev type ioctls, unique per PHY type */
+#define ATMIOC_PHYTYP_END 0x2f
+#define ATMIOC_PHYPRV    0x30 /* PHY dev private ioctls, unique per driver */
+#define ATMIOC_PHYPRV_END 0x4f
+#define ATMIOC_SARCOM    0x50 /* SAR device common ioctls, globally unique */
+#define ATMIOC_SARCOM_END 0x50
+#define ATMIOC_SARPRV    0x60 /* SAR dev private ioctls, unique per driver */
+#define ATMIOC_SARPRV_END 0x7f
+#define ATMIOC_ITF       0x80 /* Interface ioctls, globally unique */
+#define ATMIOC_ITF_END   0x8f
+#define ATMIOC_BACKEND   0x90 /* ATM generic backend ioctls, u. per backend */
+#define ATMIOC_BACKEND_END 0xaf
+/* 0xb0-0xbf: Reserved for future use */
+#define ATMIOC_AREQUIPA          0xc0 /* Application requested IP over ATM, glob. u. */
+#define ATMIOC_LANE      0xd0 /* LAN Emulation, globally unique */
+#define ATMIOC_MPOA       0xd8 /* MPOA, globally unique */
+#define        ATMIOC_CLIP       0xe0 /* Classical IP over ATM control, globally u. */
+#define        ATMIOC_CLIP_END   0xef
+#define        ATMIOC_SPECIAL    0xf0 /* Special-purpose controls, globally unique */
+#define        ATMIOC_SPECIAL_END 0xff
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmlec.h b/lib/libdss-include/include/linux/atmlec.h
new file mode 100644 (file)
index 0000000..302791e
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * ATM Lan Emulation Daemon driver interface
+ *
+ * Marko Kiiskila <mkiiskila@yahoo.com>
+ */
+
+#ifndef _ATMLEC_H_
+#define _ATMLEC_H_
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+#include <linux/atm.h>
+#include <linux/if_ether.h>
+#include <linux/types.h>
+
+/* ATM lec daemon control socket */
+#define ATMLEC_CTRL    _IO('a', ATMIOC_LANE)
+#define ATMLEC_DATA    _IO('a', ATMIOC_LANE+1)
+#define ATMLEC_MCAST   _IO('a', ATMIOC_LANE+2)
+
+/* Maximum number of LEC interfaces (tweakable) */
+#define MAX_LEC_ITF 48
+
+typedef enum {
+       l_set_mac_addr,
+       l_del_mac_addr,
+       l_svc_setup,
+       l_addr_delete,
+       l_topology_change,
+       l_flush_complete,
+       l_arp_update,
+       l_narp_req,             /* LANE2 mandates the use of this */
+       l_config,
+       l_flush_tran_id,
+       l_set_lecid,
+       l_arp_xmt,
+       l_rdesc_arp_xmt,
+       l_associate_req,
+       l_should_bridge         /* should we bridge this MAC? */
+} atmlec_msg_type;
+
+#define ATMLEC_MSG_TYPE_MAX l_should_bridge
+
+struct atmlec_config_msg {
+       unsigned int maximum_unknown_frame_count;
+       unsigned int max_unknown_frame_time;
+       unsigned short max_retry_count;
+       unsigned int aging_time;
+       unsigned int forward_delay_time;
+       unsigned int arp_response_time;
+       unsigned int flush_timeout;
+       unsigned int path_switching_delay;
+       unsigned int lane_version;      /* LANE2: 1 for LANEv1, 2 for LANEv2 */
+       int mtu;
+       int is_proxy;
+};
+
+struct atmlec_msg {
+       atmlec_msg_type type;
+       int sizeoftlvs;         /* LANE2: if != 0, tlvs follow */
+       union {
+               struct {
+                       unsigned char mac_addr[ETH_ALEN];
+                       unsigned char atm_addr[ATM_ESA_LEN];
+                       unsigned int flag;      /*
+                                                * Topology_change flag,
+                                                * remoteflag, permanent flag,
+                                                * lecid, transaction id
+                                                */
+                       unsigned int targetless_le_arp; /* LANE2 */
+                       unsigned int no_source_le_narp; /* LANE2 */
+               } normal;
+               struct atmlec_config_msg config;
+               struct {
+                       __u16 lec_id;                           /* requestor lec_id  */
+                       __u32 tran_id;                          /* transaction id    */
+                       unsigned char mac_addr[ETH_ALEN];       /* dst mac addr      */
+                       unsigned char atm_addr[ATM_ESA_LEN];    /* reqestor ATM addr */
+               } proxy;        /*
+                                * For mapping LE_ARP requests to responses. Filled by
+                                * zeppelin, returned by kernel. Used only when proxying
+                                */
+       } content;
+} __ATM_API_ALIGN;
+
+struct atmlec_ioc {
+       int dev_num;
+       unsigned char atm_addr[ATM_ESA_LEN];
+       unsigned char receive;  /* 1= receive vcc, 0 = send vcc */
+};
+#endif /* _ATMLEC_H_ */
diff --git a/lib/libdss-include/include/linux/atmmpc.h b/lib/libdss-include/include/linux/atmmpc.h
new file mode 100644 (file)
index 0000000..2aba578
--- /dev/null
@@ -0,0 +1,126 @@
+#ifndef _ATMMPC_H_
+#define _ATMMPC_H_
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+#include <linux/atm.h>
+#include <linux/types.h>
+
+#define ATMMPC_CTRL _IO('a', ATMIOC_MPOA)
+#define ATMMPC_DATA _IO('a', ATMIOC_MPOA+1)
+
+#define MPC_SOCKET_INGRESS 1
+#define MPC_SOCKET_EGRESS  2
+
+struct atmmpc_ioc {
+        int dev_num;
+        __be32 ipaddr;              /* the IP address of the shortcut    */
+        int type;                     /* ingress or egress                 */
+};
+
+typedef struct in_ctrl_info {
+        __u8   Last_NHRP_CIE_code;
+        __u8   Last_Q2931_cause_value;
+        __u8   eg_MPC_ATM_addr[ATM_ESA_LEN];
+        __be32  tag;
+        __be32  in_dst_ip;      /* IP address this ingress MPC sends packets to */
+        __u16  holding_time;
+        __u32  request_id;
+} in_ctrl_info;
+
+typedef struct eg_ctrl_info {
+        __u8   DLL_header[256];
+        __u8   DH_length;
+        __be32  cache_id;
+        __be32  tag;
+        __be32  mps_ip;
+        __be32  eg_dst_ip;      /* IP address to which ingress MPC sends packets */
+        __u8   in_MPC_data_ATM_addr[ATM_ESA_LEN];
+        __u16  holding_time;
+} eg_ctrl_info;
+
+struct mpc_parameters {
+        __u16 mpc_p1;   /* Shortcut-Setup Frame Count    */
+        __u16 mpc_p2;   /* Shortcut-Setup Frame Time     */
+        __u8 mpc_p3[8]; /* Flow-detection Protocols      */
+        __u16 mpc_p4;   /* MPC Initial Retry Time        */
+        __u16 mpc_p5;   /* MPC Retry Time Maximum        */
+        __u16 mpc_p6;   /* Hold Down Time                */
+} ;
+
+struct k_message {
+        __u16 type;
+        __be32 ip_mask;
+        __u8  MPS_ctrl[ATM_ESA_LEN];
+        union {
+                in_ctrl_info in_info;
+                eg_ctrl_info eg_info;
+                struct mpc_parameters params;
+        } content;
+        struct atm_qos qos;       
+} __ATM_API_ALIGN;
+
+struct llc_snap_hdr {
+       /* RFC 1483 LLC/SNAP encapsulation for routed IP PDUs */
+        __u8  dsap;    /* Destination Service Access Point (0xAA)     */
+        __u8  ssap;    /* Source Service Access Point      (0xAA)     */
+        __u8  ui;      /* Unnumbered Information           (0x03)     */
+        __u8  org[3];  /* Organizational identification    (0x000000) */
+        __u8  type[2]; /* Ether type (for IP)              (0x0800)   */
+};
+
+/* TLVs this MPC recognizes */
+#define TLV_MPOA_DEVICE_TYPE         0x00a03e2a  
+
+/* MPOA device types in MPOA Device Type TLV */
+#define NON_MPOA    0
+#define MPS         1
+#define MPC         2
+#define MPS_AND_MPC 3
+
+
+/* MPC parameter defaults */
+
+#define MPC_P1 10  /* Shortcut-Setup Frame Count  */ 
+#define MPC_P2 1   /* Shortcut-Setup Frame Time   */
+#define MPC_P3 0   /* Flow-detection Protocols    */
+#define MPC_P4 5   /* MPC Initial Retry Time      */
+#define MPC_P5 40  /* MPC Retry Time Maximum      */
+#define MPC_P6 160 /* Hold Down Time              */
+#define HOLDING_TIME_DEFAULT 1200 /* same as MPS-p7 */
+
+/* MPC constants */
+
+#define MPC_C1 2   /* Retry Time Multiplier       */
+#define MPC_C2 60  /* Initial Keep-Alive Lifetime */
+
+/* Message types - to MPOA daemon */
+
+#define SND_MPOA_RES_RQST    201
+#define SET_MPS_CTRL_ADDR    202
+#define SND_MPOA_RES_RTRY    203 /* Different type in a retry due to req id         */
+#define STOP_KEEP_ALIVE_SM   204
+#define EGRESS_ENTRY_REMOVED 205
+#define SND_EGRESS_PURGE     206
+#define DIE                  207 /* tell the daemon to exit()                       */
+#define DATA_PLANE_PURGE     208 /* Data plane purge because of egress cache hit miss or dead MPS */
+#define OPEN_INGRESS_SVC     209
+
+/* Message types - from MPOA daemon */
+
+#define MPOA_TRIGGER_RCVD     101
+#define MPOA_RES_REPLY_RCVD   102
+#define INGRESS_PURGE_RCVD    103
+#define EGRESS_PURGE_RCVD     104
+#define MPS_DEATH             105
+#define CACHE_IMPOS_RCVD      106
+#define SET_MPC_CTRL_ADDR     107 /* Our MPC's control ATM address   */
+#define SET_MPS_MAC_ADDR      108
+#define CLEAN_UP_AND_EXIT     109
+#define SET_MPC_PARAMS        110 /* MPC configuration parameters    */
+
+/* Message types - bidirectional */       
+
+#define RELOAD                301 /* kill -HUP the daemon for reload */
+
+#endif /* _ATMMPC_H_ */
diff --git a/lib/libdss-include/include/linux/atmppp.h b/lib/libdss-include/include/linux/atmppp.h
new file mode 100644 (file)
index 0000000..300dcce
--- /dev/null
@@ -0,0 +1,24 @@
+/* atmppp.h - RFC2364 PPPoATM */
+
+/* Written 2000 by Mitchell Blank Jr */
+
+#ifndef _LINUX_ATMPPP_H
+#define _LINUX_ATMPPP_H
+
+#include <linux/atm.h>
+
+#define PPPOATM_ENCAPS_AUTODETECT      (0)
+#define PPPOATM_ENCAPS_VC              (1)
+#define PPPOATM_ENCAPS_LLC             (2)
+
+/*
+ * This is for the ATM_SETBACKEND call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_backend_ppp {
+       atm_backend_t   backend_num;    /* ATM_BACKEND_PPP */
+       int             encaps;         /* PPPOATM_ENCAPS_* */
+};
+
+#endif /* _LINUX_ATMPPP_H */
diff --git a/lib/libdss-include/include/linux/atmsap.h b/lib/libdss-include/include/linux/atmsap.h
new file mode 100644 (file)
index 0000000..799b104
--- /dev/null
@@ -0,0 +1,162 @@
+/* atmsap.h - ATM Service Access Point addressing definitions */
+
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef _LINUX_ATMSAP_H
+#define _LINUX_ATMSAP_H
+
+#include <linux/atmapi.h>
+
+/*
+ * BEGIN_xx and END_xx markers are used for automatic generation of
+ * documentation. Do not change them.
+ */
+
+
+/*
+ * Layer 2 protocol identifiers
+ */
+
+/* BEGIN_L2 */
+#define ATM_L2_NONE    0       /* L2 not specified */
+#define ATM_L2_ISO1745  0x01   /* Basic mode ISO 1745 */
+#define ATM_L2_Q291    0x02    /* ITU-T Q.291 (Rec. I.441) */
+#define ATM_L2_X25_LL  0x06    /* ITU-T X.25, link layer */
+#define ATM_L2_X25_ML  0x07    /* ITU-T X.25, multilink */
+#define ATM_L2_LAPB    0x08    /* Extended LAPB, half-duplex (Rec. T.71) */
+#define ATM_L2_HDLC_ARM        0x09    /* HDLC ARM (ISO/IEC 4335) */
+#define ATM_L2_HDLC_NRM        0x0a    /* HDLC NRM (ISO/IEC 4335) */
+#define ATM_L2_HDLC_ABM        0x0b    /* HDLC ABM (ISO/IEC 4335) */
+#define ATM_L2_ISO8802 0x0c    /* LAN LLC (ISO/IEC 8802/2) */
+#define ATM_L2_X75     0x0d    /* ITU-T X.75, SLP */
+#define ATM_L2_Q922    0x0e    /* ITU-T Q.922 */
+#define ATM_L2_USER    0x10    /* user-specified */
+#define ATM_L2_ISO7776 0x11    /* ISO 7776 DTE-DTE */
+/* END_L2 */
+
+
+/*
+ * Layer 3 protocol identifiers
+ */
+
+/* BEGIN_L3 */
+#define ATM_L3_NONE    0       /* L3 not specified */
+#define ATM_L3_X25     0x06    /* ITU-T X.25, packet layer */
+#define ATM_L3_ISO8208 0x07    /* ISO/IEC 8208 */
+#define ATM_L3_X223    0x08    /* ITU-T X.223 | ISO/IEC 8878 */
+#define ATM_L3_ISO8473 0x09    /* ITU-T X.233 | ISO/IEC 8473 */
+#define ATM_L3_T70     0x0a    /* ITU-T T.70 minimum network layer */
+#define ATM_L3_TR9577  0x0b    /* ISO/IEC TR 9577 */
+#define ATM_L3_H310    0x0c    /* ITU-T Recommendation H.310 */
+#define ATM_L3_H321    0x0d    /* ITU-T Recommendation H.321 */
+#define ATM_L3_USER    0x10    /* user-specified */
+/* END_L3 */
+
+
+/*
+ * High layer identifiers
+ */
+
+/* BEGIN_HL */
+#define ATM_HL_NONE    0       /* HL not specified */
+#define ATM_HL_ISO     0x01    /* ISO */
+#define ATM_HL_USER    0x02    /* user-specific */
+#define ATM_HL_HLP     0x03    /* high layer profile - UNI 3.0 only */
+#define ATM_HL_VENDOR  0x04    /* vendor-specific application identifier */
+/* END_HL */
+
+
+/*
+ * ITU-T coded mode of operation
+ */
+
+/* BEGIN_IMD */
+#define ATM_IMD_NONE    0      /* mode not specified */
+#define ATM_IMD_NORMAL  1      /* normal mode of operation */
+#define ATM_IMD_EXTENDED 2     /* extended mode of operation */
+/* END_IMD */
+
+/*
+ * H.310 code points
+ */
+
+#define ATM_TT_NONE    0       /* terminal type not specified */
+#define ATM_TT_RX      1       /* receive only */
+#define ATM_TT_TX      2       /* send only */
+#define ATM_TT_RXTX    3       /* receive and send */
+
+#define ATM_MC_NONE    0       /* no multiplexing */
+#define ATM_MC_TS      1       /* transport stream (TS) */
+#define ATM_MC_TS_FEC  2       /* transport stream with forward error corr. */
+#define ATM_MC_PS      3       /* program stream (PS) */
+#define ATM_MC_PS_FEC  4       /* program stream with forward error corr. */
+#define ATM_MC_H221    5       /* ITU-T Rec. H.221 */
+
+/*
+ * SAP structures
+ */
+
+#define ATM_MAX_HLI    8       /* maximum high-layer information length */
+
+
+struct atm_blli {
+    unsigned char l2_proto;    /* layer 2 protocol */
+    union {
+       struct {
+           unsigned char mode; /* mode of operation (ATM_IMD_xxx), 0 if */
+                               /* absent */
+           unsigned char window; /* window size (k), 1-127 (0 to omit) */
+       } itu;                  /* ITU-T encoding */
+       unsigned char user;     /* user-specified l2 information */
+    } l2;
+    unsigned char l3_proto;    /* layer 3 protocol */
+    union {
+       struct {
+           unsigned char mode; /* mode of operation (ATM_IMD_xxx), 0 if */
+                               /* absent */
+           unsigned char def_size; /* default packet size (log2), 4-12 (0 to */
+                                   /* omit) */
+           unsigned char window;/* packet window size, 1-127 (0 to omit) */
+       } itu;                  /* ITU-T encoding */
+       unsigned char user;     /* user specified l3 information */
+       struct {                      /* if l3_proto = ATM_L3_H310 */
+           unsigned char term_type;  /* terminal type */
+           unsigned char fw_mpx_cap; /* forward multiplexing capability */
+                                     /* only if term_type != ATM_TT_NONE */
+           unsigned char bw_mpx_cap; /* backward multiplexing capability */
+                                     /* only if term_type != ATM_TT_NONE */
+       } h310;
+       struct {                  /* if l3_proto = ATM_L3_TR9577 */
+           unsigned char ipi;    /* initial protocol id */
+           unsigned char snap[5];/* IEEE 802.1 SNAP identifier */
+                                 /* (only if ipi == NLPID_IEEE802_1_SNAP) */
+       } tr9577;
+    } l3;
+} __ATM_API_ALIGN;
+
+
+struct atm_bhli {
+    unsigned char hl_type;     /* high layer information type */
+    unsigned char hl_length;   /* length (only if hl_type == ATM_HL_USER || */
+                               /* hl_type == ATM_HL_ISO) */
+    unsigned char hl_info[ATM_MAX_HLI];/* high layer information */
+};
+
+
+#define ATM_MAX_BLLI   3               /* maximum number of BLLI elements */
+
+
+struct atm_sap {
+       struct atm_bhli bhli;           /* local SAP, high-layer information */
+       struct atm_blli blli[ATM_MAX_BLLI] __ATM_API_ALIGN;
+                                       /* local SAP, low-layer info */
+};
+
+
+static __inline__ int blli_in_use(struct atm_blli blli)
+{
+       return blli.l2_proto || blli.l3_proto;
+}
+
+#endif
diff --git a/lib/libdss-include/include/linux/atmsvc.h b/lib/libdss-include/include/linux/atmsvc.h
new file mode 100644 (file)
index 0000000..aa71583
--- /dev/null
@@ -0,0 +1,55 @@
+/* atmsvc.h - ATM signaling kernel-demon interface definitions */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef _LINUX_ATMSVC_H
+#define _LINUX_ATMSVC_H
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+
+
+#define ATMSIGD_CTRL _IO('a',ATMIOC_SPECIAL)
+                               /* become ATM signaling demon control socket */
+
+enum atmsvc_msg_type { as_catch_null, as_bind, as_connect, as_accept, as_reject,
+                      as_listen, as_okay, as_error, as_indicate, as_close,
+                      as_itf_notify, as_modify, as_identify, as_terminate,
+                      as_addparty, as_dropparty };
+
+struct atmsvc_msg {
+       enum atmsvc_msg_type type;
+       atm_kptr_t vcc;
+       atm_kptr_t listen_vcc;          /* indicate */
+       int reply;                      /* for okay and close:             */
+                                       /*   < 0: error before active      */
+                                       /*        (sigd has discarded ctx) */
+                                       /*   ==0: success                  */
+                                       /*   > 0: error when active (still */
+                                       /*        need to close)           */
+       struct sockaddr_atmpvc pvc;     /* indicate, okay (connect) */
+       struct sockaddr_atmsvc local;   /* local SVC address */
+       struct atm_qos qos;             /* QOS parameters */
+       struct atm_sap sap;             /* SAP */
+       unsigned int session;           /* for p2pm */
+       struct sockaddr_atmsvc svc;     /* SVC address */
+} __ATM_API_ALIGN;
+
+/*
+ * Message contents: see ftp://icaftp.epfl.ch/pub/linux/atm/docs/isp-*.tar.gz
+ */
+
+/*
+ * Some policy stuff for atmsigd and for net/atm/svc.c. Both have to agree on
+ * what PCR is used to request bandwidth from the device driver. net/atm/svc.c
+ * tries to do better than that, but only if there's no routing decision (i.e.
+ * if signaling only uses one ATM interface).
+ */
+
+#define SELECT_TOP_PCR(tp) ((tp).pcr ? (tp).pcr : \
+  (tp).max_pcr && (tp).max_pcr != ATM_MAX_PCR ? (tp).max_pcr : \
+  (tp).min_pcr ? (tp).min_pcr : ATM_MAX_PCR)
+
+#endif
diff --git a/lib/libdss-include/include/linux/audit.h b/lib/libdss-include/include/linux/audit.h
new file mode 100644 (file)
index 0000000..8585daa
--- /dev/null
@@ -0,0 +1,466 @@
+/* audit.h -- Auditing support
+ *
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Written by Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#ifndef _LINUX_AUDIT_H_
+#define _LINUX_AUDIT_H_
+
+#include <linux/types.h>
+#include <linux/elf-em.h>
+
+/* The netlink messages for the audit system is divided into blocks:
+ * 1000 - 1099 are for commanding the audit system
+ * 1100 - 1199 user space trusted application messages
+ * 1200 - 1299 messages internal to the audit daemon
+ * 1300 - 1399 audit event messages
+ * 1400 - 1499 SE Linux use
+ * 1500 - 1599 kernel LSPP events
+ * 1600 - 1699 kernel crypto events
+ * 1700 - 1799 kernel anomaly records
+ * 1800 - 1899 kernel integrity events
+ * 1900 - 1999 future kernel use
+ * 2000 is for otherwise unclassified kernel audit messages (legacy)
+ * 2001 - 2099 unused (kernel)
+ * 2100 - 2199 user space anomaly records
+ * 2200 - 2299 user space actions taken in response to anomalies
+ * 2300 - 2399 user space generated LSPP events
+ * 2400 - 2499 user space crypto events
+ * 2500 - 2999 future user space (maybe integrity labels and related events)
+ *
+ * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are
+ * exclusively user space. 1300-2099 is kernel --> user space 
+ * communication.
+ */
+#define AUDIT_GET              1000    /* Get status */
+#define AUDIT_SET              1001    /* Set status (enable/disable/auditd) */
+#define AUDIT_LIST             1002    /* List syscall rules -- deprecated */
+#define AUDIT_ADD              1003    /* Add syscall rule -- deprecated */
+#define AUDIT_DEL              1004    /* Delete syscall rule -- deprecated */
+#define AUDIT_USER             1005    /* Message from userspace -- deprecated */
+#define AUDIT_LOGIN            1006    /* Define the login id and information */
+#define AUDIT_WATCH_INS                1007    /* Insert file/dir watch entry */
+#define AUDIT_WATCH_REM                1008    /* Remove file/dir watch entry */
+#define AUDIT_WATCH_LIST       1009    /* List all file/dir watches */
+#define AUDIT_SIGNAL_INFO      1010    /* Get info about sender of signal to auditd */
+#define AUDIT_ADD_RULE         1011    /* Add syscall filtering rule */
+#define AUDIT_DEL_RULE         1012    /* Delete syscall filtering rule */
+#define AUDIT_LIST_RULES       1013    /* List syscall filtering rules */
+#define AUDIT_TRIM             1014    /* Trim junk from watched tree */
+#define AUDIT_MAKE_EQUIV       1015    /* Append to watched tree */
+#define AUDIT_TTY_GET          1016    /* Get TTY auditing status */
+#define AUDIT_TTY_SET          1017    /* Set TTY auditing status */
+#define AUDIT_SET_FEATURE      1018    /* Turn an audit feature on or off */
+#define AUDIT_GET_FEATURE      1019    /* Get which features are enabled */
+
+#define AUDIT_FIRST_USER_MSG   1100    /* Userspace messages mostly uninteresting to kernel */
+#define AUDIT_USER_AVC         1107    /* We filter this differently */
+#define AUDIT_USER_TTY         1124    /* Non-ICANON TTY input meaning */
+#define AUDIT_LAST_USER_MSG    1199
+#define AUDIT_FIRST_USER_MSG2  2100    /* More user space messages */
+#define AUDIT_LAST_USER_MSG2   2999
+#define AUDIT_DAEMON_START      1200    /* Daemon startup record */
+#define AUDIT_DAEMON_END        1201    /* Daemon normal stop record */
+#define AUDIT_DAEMON_ABORT      1202    /* Daemon error stop record */
+#define AUDIT_DAEMON_CONFIG     1203    /* Daemon config change */
+
+#define AUDIT_SYSCALL          1300    /* Syscall event */
+/* #define AUDIT_FS_WATCH      1301     * Deprecated */
+#define AUDIT_PATH             1302    /* Filename path information */
+#define AUDIT_IPC              1303    /* IPC record */
+#define AUDIT_SOCKETCALL       1304    /* sys_socketcall arguments */
+#define AUDIT_CONFIG_CHANGE    1305    /* Audit system configuration change */
+#define AUDIT_SOCKADDR         1306    /* sockaddr copied as syscall arg */
+#define AUDIT_CWD              1307    /* Current working directory */
+#define AUDIT_EXECVE           1309    /* execve arguments */
+#define AUDIT_IPC_SET_PERM     1311    /* IPC new permissions record type */
+#define AUDIT_MQ_OPEN          1312    /* POSIX MQ open record type */
+#define AUDIT_MQ_SENDRECV      1313    /* POSIX MQ send/receive record type */
+#define AUDIT_MQ_NOTIFY                1314    /* POSIX MQ notify record type */
+#define AUDIT_MQ_GETSETATTR    1315    /* POSIX MQ get/set attribute record type */
+#define AUDIT_KERNEL_OTHER     1316    /* For use by 3rd party modules */
+#define AUDIT_FD_PAIR          1317    /* audit record for pipe/socketpair */
+#define AUDIT_OBJ_PID          1318    /* ptrace target */
+#define AUDIT_TTY              1319    /* Input on an administrative TTY */
+#define AUDIT_EOE              1320    /* End of multi-record event */
+#define AUDIT_BPRM_FCAPS       1321    /* Information about fcaps increasing perms */
+#define AUDIT_CAPSET           1322    /* Record showing argument to sys_capset */
+#define AUDIT_MMAP             1323    /* Record showing descriptor and flags in mmap */
+#define AUDIT_NETFILTER_PKT    1324    /* Packets traversing netfilter chains */
+#define AUDIT_NETFILTER_CFG    1325    /* Netfilter chain modifications */
+#define AUDIT_SECCOMP          1326    /* Secure Computing event */
+#define AUDIT_PROCTITLE                1327    /* Proctitle emit event */
+#define AUDIT_FEATURE_CHANGE   1328    /* audit log listing feature changes */
+
+#define AUDIT_AVC              1400    /* SE Linux avc denial or grant */
+#define AUDIT_SELINUX_ERR      1401    /* Internal SE Linux Errors */
+#define AUDIT_AVC_PATH         1402    /* dentry, vfsmount pair from avc */
+#define AUDIT_MAC_POLICY_LOAD  1403    /* Policy file load */
+#define AUDIT_MAC_STATUS       1404    /* Changed enforcing,permissive,off */
+#define AUDIT_MAC_CONFIG_CHANGE        1405    /* Changes to booleans */
+#define AUDIT_MAC_UNLBL_ALLOW  1406    /* NetLabel: allow unlabeled traffic */
+#define AUDIT_MAC_CIPSOV4_ADD  1407    /* NetLabel: add CIPSOv4 DOI entry */
+#define AUDIT_MAC_CIPSOV4_DEL  1408    /* NetLabel: del CIPSOv4 DOI entry */
+#define AUDIT_MAC_MAP_ADD      1409    /* NetLabel: add LSM domain mapping */
+#define AUDIT_MAC_MAP_DEL      1410    /* NetLabel: del LSM domain mapping */
+#define AUDIT_MAC_IPSEC_ADDSA  1411    /* Not used */
+#define AUDIT_MAC_IPSEC_DELSA  1412    /* Not used  */
+#define AUDIT_MAC_IPSEC_ADDSPD 1413    /* Not used */
+#define AUDIT_MAC_IPSEC_DELSPD 1414    /* Not used */
+#define AUDIT_MAC_IPSEC_EVENT  1415    /* Audit an IPSec event */
+#define AUDIT_MAC_UNLBL_STCADD 1416    /* NetLabel: add a static label */
+#define AUDIT_MAC_UNLBL_STCDEL 1417    /* NetLabel: del a static label */
+
+#define AUDIT_FIRST_KERN_ANOM_MSG   1700
+#define AUDIT_LAST_KERN_ANOM_MSG    1799
+#define AUDIT_ANOM_PROMISCUOUS      1700 /* Device changed promiscuous mode */
+#define AUDIT_ANOM_ABEND            1701 /* Process ended abnormally */
+#define AUDIT_ANOM_LINK                    1702 /* Suspicious use of file links */
+#define AUDIT_INTEGRITY_DATA       1800 /* Data integrity verification */
+#define AUDIT_INTEGRITY_METADATA    1801 /* Metadata integrity verification */
+#define AUDIT_INTEGRITY_STATUS     1802 /* Integrity enable status */
+#define AUDIT_INTEGRITY_HASH       1803 /* Integrity HASH type */
+#define AUDIT_INTEGRITY_PCR        1804 /* PCR invalidation msgs */
+#define AUDIT_INTEGRITY_RULE       1805 /* policy rule */
+
+#define AUDIT_KERNEL           2000    /* Asynchronous audit record. NOT A REQUEST. */
+
+/* Rule flags */
+#define AUDIT_FILTER_USER      0x00    /* Apply rule to user-generated messages */
+#define AUDIT_FILTER_TASK      0x01    /* Apply rule at task creation (not syscall) */
+#define AUDIT_FILTER_ENTRY     0x02    /* Apply rule at syscall entry */
+#define AUDIT_FILTER_WATCH     0x03    /* Apply rule to file system watches */
+#define AUDIT_FILTER_EXIT      0x04    /* Apply rule at syscall exit */
+#define AUDIT_FILTER_TYPE      0x05    /* Apply rule at audit_log_start */
+
+#define AUDIT_NR_FILTERS       6
+
+#define AUDIT_FILTER_PREPEND   0x10    /* Prepend to front of list */
+
+/* Rule actions */
+#define AUDIT_NEVER    0       /* Do not build context if rule matches */
+#define AUDIT_POSSIBLE 1       /* Build context if rule matches  */
+#define AUDIT_ALWAYS   2       /* Generate audit record if rule matches */
+
+/* Rule structure sizes -- if these change, different AUDIT_ADD and
+ * AUDIT_LIST commands must be implemented. */
+#define AUDIT_MAX_FIELDS   64
+#define AUDIT_MAX_KEY_LEN  256
+#define AUDIT_BITMASK_SIZE 64
+#define AUDIT_WORD(nr) ((__u32)((nr)/32))
+#define AUDIT_BIT(nr)  (1 << ((nr) - AUDIT_WORD(nr)*32))
+
+#define AUDIT_SYSCALL_CLASSES 16
+#define AUDIT_CLASS_DIR_WRITE 0
+#define AUDIT_CLASS_DIR_WRITE_32 1
+#define AUDIT_CLASS_CHATTR 2
+#define AUDIT_CLASS_CHATTR_32 3
+#define AUDIT_CLASS_READ 4
+#define AUDIT_CLASS_READ_32 5
+#define AUDIT_CLASS_WRITE 6
+#define AUDIT_CLASS_WRITE_32 7
+#define AUDIT_CLASS_SIGNAL 8
+#define AUDIT_CLASS_SIGNAL_32 9
+
+/* This bitmask is used to validate user input.  It represents all bits that
+ * are currently used in an audit field constant understood by the kernel.
+ * If you are adding a new #define AUDIT_<whatever>, please ensure that
+ * AUDIT_UNUSED_BITS is updated if need be. */
+#define AUDIT_UNUSED_BITS      0x07FFFC00
+
+/* AUDIT_FIELD_COMPARE rule list */
+#define AUDIT_COMPARE_UID_TO_OBJ_UID   1
+#define AUDIT_COMPARE_GID_TO_OBJ_GID   2
+#define AUDIT_COMPARE_EUID_TO_OBJ_UID  3
+#define AUDIT_COMPARE_EGID_TO_OBJ_GID  4
+#define AUDIT_COMPARE_AUID_TO_OBJ_UID  5
+#define AUDIT_COMPARE_SUID_TO_OBJ_UID  6
+#define AUDIT_COMPARE_SGID_TO_OBJ_GID  7
+#define AUDIT_COMPARE_FSUID_TO_OBJ_UID 8
+#define AUDIT_COMPARE_FSGID_TO_OBJ_GID 9
+
+#define AUDIT_COMPARE_UID_TO_AUID      10
+#define AUDIT_COMPARE_UID_TO_EUID      11
+#define AUDIT_COMPARE_UID_TO_FSUID     12
+#define AUDIT_COMPARE_UID_TO_SUID      13
+
+#define AUDIT_COMPARE_AUID_TO_FSUID    14
+#define AUDIT_COMPARE_AUID_TO_SUID     15
+#define AUDIT_COMPARE_AUID_TO_EUID     16
+
+#define AUDIT_COMPARE_EUID_TO_SUID     17
+#define AUDIT_COMPARE_EUID_TO_FSUID    18
+
+#define AUDIT_COMPARE_SUID_TO_FSUID    19
+
+#define AUDIT_COMPARE_GID_TO_EGID      20
+#define AUDIT_COMPARE_GID_TO_FSGID     21
+#define AUDIT_COMPARE_GID_TO_SGID      22
+
+#define AUDIT_COMPARE_EGID_TO_FSGID    23
+#define AUDIT_COMPARE_EGID_TO_SGID     24
+#define AUDIT_COMPARE_SGID_TO_FSGID    25
+
+#define AUDIT_MAX_FIELD_COMPARE                AUDIT_COMPARE_SGID_TO_FSGID
+
+/* Rule fields */
+                               /* These are useful when checking the
+                                * task structure at task creation time
+                                * (AUDIT_PER_TASK).  */
+#define AUDIT_PID      0
+#define AUDIT_UID      1
+#define AUDIT_EUID     2
+#define AUDIT_SUID     3
+#define AUDIT_FSUID    4
+#define AUDIT_GID      5
+#define AUDIT_EGID     6
+#define AUDIT_SGID     7
+#define AUDIT_FSGID    8
+#define AUDIT_LOGINUID 9
+#define AUDIT_PERS     10
+#define AUDIT_ARCH     11
+#define AUDIT_MSGTYPE  12
+#define AUDIT_SUBJ_USER        13      /* security label user */
+#define AUDIT_SUBJ_ROLE        14      /* security label role */
+#define AUDIT_SUBJ_TYPE        15      /* security label type */
+#define AUDIT_SUBJ_SEN 16      /* security label sensitivity label */
+#define AUDIT_SUBJ_CLR 17      /* security label clearance label */
+#define AUDIT_PPID     18
+#define AUDIT_OBJ_USER 19
+#define AUDIT_OBJ_ROLE 20
+#define AUDIT_OBJ_TYPE 21
+#define AUDIT_OBJ_LEV_LOW      22
+#define AUDIT_OBJ_LEV_HIGH     23
+#define AUDIT_LOGINUID_SET     24
+
+                               /* These are ONLY useful when checking
+                                * at syscall exit time (AUDIT_AT_EXIT). */
+#define AUDIT_DEVMAJOR 100
+#define AUDIT_DEVMINOR 101
+#define AUDIT_INODE    102
+#define AUDIT_EXIT     103
+#define AUDIT_SUCCESS   104    /* exit >= 0; value ignored */
+#define AUDIT_WATCH    105
+#define AUDIT_PERM     106
+#define AUDIT_DIR      107
+#define AUDIT_FILETYPE 108
+#define AUDIT_OBJ_UID  109
+#define AUDIT_OBJ_GID  110
+#define AUDIT_FIELD_COMPARE    111
+#define AUDIT_EXE      112
+
+#define AUDIT_ARG0      200
+#define AUDIT_ARG1      (AUDIT_ARG0+1)
+#define AUDIT_ARG2      (AUDIT_ARG0+2)
+#define AUDIT_ARG3      (AUDIT_ARG0+3)
+
+#define AUDIT_FILTERKEY        210
+
+#define AUDIT_NEGATE                   0x80000000
+
+/* These are the supported operators.
+ *     4  2  1  8
+ *     =  >  <  ?
+ *     ----------
+ *     0  0  0  0      00      nonsense
+ *     0  0  0  1      08      &  bit mask
+ *     0  0  1  0      10      <
+ *     0  1  0  0      20      >
+ *     0  1  1  0      30      !=
+ *     1  0  0  0      40      =
+ *     1  0  0  1      48      &=  bit test
+ *     1  0  1  0      50      <=
+ *     1  1  0  0      60      >=
+ *     1  1  1  1      78      all operators
+ */
+#define AUDIT_BIT_MASK                 0x08000000
+#define AUDIT_LESS_THAN                        0x10000000
+#define AUDIT_GREATER_THAN             0x20000000
+#define AUDIT_NOT_EQUAL                        0x30000000
+#define AUDIT_EQUAL                    0x40000000
+#define AUDIT_BIT_TEST                 (AUDIT_BIT_MASK|AUDIT_EQUAL)
+#define AUDIT_LESS_THAN_OR_EQUAL       (AUDIT_LESS_THAN|AUDIT_EQUAL)
+#define AUDIT_GREATER_THAN_OR_EQUAL    (AUDIT_GREATER_THAN|AUDIT_EQUAL)
+#define AUDIT_OPERATORS                        (AUDIT_EQUAL|AUDIT_NOT_EQUAL|AUDIT_BIT_MASK)
+
+enum {
+       Audit_equal,
+       Audit_not_equal,
+       Audit_bitmask,
+       Audit_bittest,
+       Audit_lt,
+       Audit_gt,
+       Audit_le,
+       Audit_ge,
+       Audit_bad
+};
+
+/* Status symbols */
+                               /* Mask values */
+#define AUDIT_STATUS_ENABLED           0x0001
+#define AUDIT_STATUS_FAILURE           0x0002
+#define AUDIT_STATUS_PID               0x0004
+#define AUDIT_STATUS_RATE_LIMIT                0x0008
+#define AUDIT_STATUS_BACKLOG_LIMIT     0x0010
+#define AUDIT_STATUS_BACKLOG_WAIT_TIME 0x0020
+
+#define AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT     0x00000001
+#define AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME 0x00000002
+#define AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH   0x00000004
+#define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
+                                 AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
+                                 AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH)
+
+/* deprecated: AUDIT_VERSION_* */
+#define AUDIT_VERSION_LATEST           AUDIT_FEATURE_BITMAP_ALL
+#define AUDIT_VERSION_BACKLOG_LIMIT    AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT
+#define AUDIT_VERSION_BACKLOG_WAIT_TIME        AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME
+
+                               /* Failure-to-log actions */
+#define AUDIT_FAIL_SILENT      0
+#define AUDIT_FAIL_PRINTK      1
+#define AUDIT_FAIL_PANIC       2
+
+/*
+ * These bits disambiguate different calling conventions that share an
+ * ELF machine type, bitness, and endianness
+ */
+#define __AUDIT_ARCH_CONVENTION_MASK 0x30000000
+#define __AUDIT_ARCH_CONVENTION_MIPS64_N32 0x20000000
+
+/* distinguish syscall tables */
+#define __AUDIT_ARCH_64BIT 0x80000000
+#define __AUDIT_ARCH_LE           0x40000000
+
+#define AUDIT_ARCH_AARCH64     (EM_AARCH64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ALPHA       (EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ARM         (EM_ARM|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ARMEB       (EM_ARM)
+#define AUDIT_ARCH_CRIS                (EM_CRIS|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_FRV         (EM_FRV)
+#define AUDIT_ARCH_I386                (EM_386|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_IA64                (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_M32R                (EM_M32R)
+#define AUDIT_ARCH_M68K                (EM_68K)
+#define AUDIT_ARCH_MICROBLAZE  (EM_MICROBLAZE)
+#define AUDIT_ARCH_MIPS                (EM_MIPS)
+#define AUDIT_ARCH_MIPSEL      (EM_MIPS|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_MIPS64      (EM_MIPS|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_MIPS64N32   (EM_MIPS|__AUDIT_ARCH_64BIT|\
+                                __AUDIT_ARCH_CONVENTION_MIPS64_N32)
+#define AUDIT_ARCH_MIPSEL64    (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_MIPSEL64N32 (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE|\
+                                __AUDIT_ARCH_CONVENTION_MIPS64_N32)
+#define AUDIT_ARCH_OPENRISC    (EM_OPENRISC)
+#define AUDIT_ARCH_PARISC      (EM_PARISC)
+#define AUDIT_ARCH_PARISC64    (EM_PARISC|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_PPC         (EM_PPC)
+/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */
+#define AUDIT_ARCH_PPC64       (EM_PPC64|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_PPC64LE     (EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_S390                (EM_S390)
+#define AUDIT_ARCH_S390X       (EM_S390|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_SH          (EM_SH)
+#define AUDIT_ARCH_SHEL                (EM_SH|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_SH64                (EM_SH|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_SHEL64      (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_SPARC       (EM_SPARC)
+#define AUDIT_ARCH_SPARC64     (EM_SPARCV9|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_TILEGX      (EM_TILEGX|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_TILEGX32    (EM_TILEGX|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_TILEPRO     (EM_TILEPRO|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_X86_64      (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+
+#define AUDIT_PERM_EXEC                1
+#define AUDIT_PERM_WRITE       2
+#define AUDIT_PERM_READ                4
+#define AUDIT_PERM_ATTR                8
+
+/* MAX_AUDIT_MESSAGE_LENGTH is set in audit:lib/libaudit.h as:
+ * 8970 // PATH_MAX*2+CONTEXT_SIZE*2+11+256+1
+ * max header+body+tailer: 44 + 29 + 32 + 262 + 7 + pad
+ */
+#define AUDIT_MESSAGE_TEXT_MAX 8560
+
+/* Multicast Netlink socket groups (default up to 32) */
+enum audit_nlgrps {
+       AUDIT_NLGRP_NONE,       /* Group 0 not used */
+       AUDIT_NLGRP_READLOG,    /* "best effort" read only socket */
+       __AUDIT_NLGRP_MAX
+};
+#define AUDIT_NLGRP_MAX                (__AUDIT_NLGRP_MAX - 1)
+
+struct audit_status {
+       __u32           mask;           /* Bit mask for valid entries */
+       __u32           enabled;        /* 1 = enabled, 0 = disabled */
+       __u32           failure;        /* Failure-to-log action */
+       __u32           pid;            /* pid of auditd process */
+       __u32           rate_limit;     /* messages rate limit (per second) */
+       __u32           backlog_limit;  /* waiting messages limit */
+       __u32           lost;           /* messages lost */
+       __u32           backlog;        /* messages waiting in queue */
+       union {
+               __u32   version;        /* deprecated: audit api version num */
+               __u32   feature_bitmap; /* bitmap of kernel audit features */
+       };
+       __u32           backlog_wait_time;/* message queue wait timeout */
+};
+
+struct audit_features {
+#define AUDIT_FEATURE_VERSION  1
+       __u32   vers;
+       __u32   mask;           /* which bits we are dealing with */
+       __u32   features;       /* which feature to enable/disable */
+       __u32   lock;           /* which features to lock */
+};
+
+#define AUDIT_FEATURE_ONLY_UNSET_LOGINUID      0
+#define AUDIT_FEATURE_LOGINUID_IMMUTABLE       1
+#define AUDIT_LAST_FEATURE                     AUDIT_FEATURE_LOGINUID_IMMUTABLE
+
+#define audit_feature_valid(x)         ((x) >= 0 && (x) <= AUDIT_LAST_FEATURE)
+#define AUDIT_FEATURE_TO_MASK(x)       (1 << ((x) & 31)) /* mask for __u32 */
+
+struct audit_tty_status {
+       __u32           enabled;        /* 1 = enabled, 0 = disabled */
+       __u32           log_passwd;     /* 1 = enabled, 0 = disabled */
+};
+
+#define AUDIT_UID_UNSET (unsigned int)-1
+
+/* audit_rule_data supports filter rules with both integer and string
+ * fields.  It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and
+ * AUDIT_LIST_RULES requests.
+ */
+struct audit_rule_data {
+       __u32           flags;  /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
+       __u32           action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
+       __u32           field_count;
+       __u32           mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */
+       __u32           fields[AUDIT_MAX_FIELDS];
+       __u32           values[AUDIT_MAX_FIELDS];
+       __u32           fieldflags[AUDIT_MAX_FIELDS];
+       __u32           buflen; /* total length of string fields */
+       char            buf[0]; /* string fields buffer */
+};
+
+#endif /* _LINUX_AUDIT_H_ */
diff --git a/lib/libdss-include/include/linux/aufs_type.h b/lib/libdss-include/include/linux/aufs_type.h
new file mode 100644 (file)
index 0000000..3fdc6ba
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
+ * This program, aufs is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __AUFS_TYPE_H__
+#define __AUFS_TYPE_H__
+
+#define AUFS_NAME      "aufs"
+
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <linux/limits.h>
+
+#define AUFS_VERSION   "4.x-rcN-20160111"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC       ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
+
+/* ---------------------------------------------------------------------- */
+
+#ifdef CONFIG_AUFS_BRANCH_MAX_127
+typedef int8_t aufs_bindex_t;
+#define AUFS_BRANCH_MAX 127
+#else
+typedef int16_t aufs_bindex_t;
+#ifdef CONFIG_AUFS_BRANCH_MAX_511
+#define AUFS_BRANCH_MAX 511
+#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
+#define AUFS_BRANCH_MAX 1023
+#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
+#define AUFS_BRANCH_MAX 32767
+#endif
+#endif
+
+
+/* ---------------------------------------------------------------------- */
+
+#define AUFS_FSTYPE            AUFS_NAME
+
+#define AUFS_ROOT_INO          2
+#define AUFS_FIRST_INO         11
+
+#define AUFS_WH_PFX            ".wh."
+#define AUFS_WH_PFX_LEN                ((int)sizeof(AUFS_WH_PFX) - 1)
+#define AUFS_WH_TMP_LEN                4
+/* a limit for rmdir/rename a dir and copyup */
+#define AUFS_MAX_NAMELEN       (NAME_MAX \
+                               - AUFS_WH_PFX_LEN * 2   /* doubly whiteouted */\
+                               - 1                     /* dot */\
+                               - AUFS_WH_TMP_LEN)      /* hex */
+#define AUFS_XINO_FNAME                "." AUFS_NAME ".xino"
+#define AUFS_XINO_DEFPATH      "/tmp/" AUFS_XINO_FNAME
+#define AUFS_XINO_DEF_SEC      30 /* seconds */
+#define AUFS_XINO_DEF_TRUNC    45 /* percentage */
+#define AUFS_DIRWH_DEF         3
+#define AUFS_RDCACHE_DEF       10 /* seconds */
+#define AUFS_RDCACHE_MAX       3600 /* seconds */
+#define AUFS_RDBLK_DEF         512 /* bytes */
+#define AUFS_RDHASH_DEF                32
+#define AUFS_WKQ_NAME          AUFS_NAME "d"
+#define AUFS_MFS_DEF_SEC       30 /* seconds */
+#define AUFS_MFS_MAX_SEC       3600 /* seconds */
+#define AUFS_FHSM_CACHE_DEF_SEC        30 /* seconds */
+#define AUFS_PLINK_WARN                50 /* number of plinks in a single bucket */
+
+/* pseudo-link maintenace under /proc */
+#define AUFS_PLINK_MAINT_NAME  "plink_maint"
+#define AUFS_PLINK_MAINT_DIR   "fs/" AUFS_NAME
+#define AUFS_PLINK_MAINT_PATH  AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
+
+#define AUFS_DIROPQ_NAME       AUFS_WH_PFX ".opq" /* whiteouted doubly */
+#define AUFS_WH_DIROPQ         AUFS_WH_PFX AUFS_DIROPQ_NAME
+
+#define AUFS_BASE_NAME         AUFS_WH_PFX AUFS_NAME
+#define AUFS_PLINKDIR_NAME     AUFS_WH_PFX "plnk"
+#define AUFS_ORPHDIR_NAME      AUFS_WH_PFX "orph"
+
+/* doubly whiteouted */
+#define AUFS_WH_BASE           AUFS_WH_PFX AUFS_BASE_NAME
+#define AUFS_WH_PLINKDIR       AUFS_WH_PFX AUFS_PLINKDIR_NAME
+#define AUFS_WH_ORPHDIR                AUFS_WH_PFX AUFS_ORPHDIR_NAME
+
+/* branch permissions and attributes */
+#define AUFS_BRPERM_RW         "rw"
+#define AUFS_BRPERM_RO         "ro"
+#define AUFS_BRPERM_RR         "rr"
+#define AUFS_BRATTR_COO_REG    "coo_reg"
+#define AUFS_BRATTR_COO_ALL    "coo_all"
+#define AUFS_BRATTR_FHSM       "fhsm"
+#define AUFS_BRATTR_UNPIN      "unpin"
+#define AUFS_BRATTR_ICEX       "icex"
+#define AUFS_BRATTR_ICEX_SEC   "icexsec"
+#define AUFS_BRATTR_ICEX_SYS   "icexsys"
+#define AUFS_BRATTR_ICEX_TR    "icextr"
+#define AUFS_BRATTR_ICEX_USR   "icexusr"
+#define AUFS_BRATTR_ICEX_OTH   "icexoth"
+#define AUFS_BRRATTR_WH                "wh"
+#define AUFS_BRWATTR_NLWH      "nolwh"
+#define AUFS_BRWATTR_MOO       "moo"
+
+#define AuBrPerm_RW            1               /* writable, hardlinkable wh */
+#define AuBrPerm_RO            (1 << 1)        /* readonly */
+#define AuBrPerm_RR            (1 << 2)        /* natively readonly */
+#define AuBrPerm_Mask          (AuBrPerm_RW | AuBrPerm_RO | AuBrPerm_RR)
+
+#define AuBrAttr_COO_REG       (1 << 3)        /* copy-up on open */
+#define AuBrAttr_COO_ALL       (1 << 4)
+#define AuBrAttr_COO_Mask      (AuBrAttr_COO_REG | AuBrAttr_COO_ALL)
+
+#define AuBrAttr_FHSM          (1 << 5)        /* file-based hsm */
+#define AuBrAttr_UNPIN         (1 << 6)        /* rename-able top dir of
+                                                  branch. meaningless since
+                                                  linux-3.18-rc1 */
+
+/* ignore error in copying XATTR */
+#define AuBrAttr_ICEX_SEC      (1 << 7)
+#define AuBrAttr_ICEX_SYS      (1 << 8)
+#define AuBrAttr_ICEX_TR       (1 << 9)
+#define AuBrAttr_ICEX_USR      (1 << 10)
+#define AuBrAttr_ICEX_OTH      (1 << 11)
+#define AuBrAttr_ICEX          (AuBrAttr_ICEX_SEC      \
+                                | AuBrAttr_ICEX_SYS    \
+                                | AuBrAttr_ICEX_TR     \
+                                | AuBrAttr_ICEX_USR    \
+                                | AuBrAttr_ICEX_OTH)
+
+#define AuBrRAttr_WH           (1 << 12)       /* whiteout-able */
+#define AuBrRAttr_Mask         AuBrRAttr_WH
+
+#define AuBrWAttr_NoLinkWH     (1 << 13)       /* un-hardlinkable whiteouts */
+#define AuBrWAttr_MOO          (1 << 14)       /* move-up on open */
+#define AuBrWAttr_Mask         (AuBrWAttr_NoLinkWH | AuBrWAttr_MOO)
+
+#define AuBrAttr_CMOO_Mask     (AuBrAttr_COO_Mask | AuBrWAttr_MOO)
+
+/* #warning test userspace */
+
+/* the longest combination */
+/* AUFS_BRATTR_ICEX and AUFS_BRATTR_ICEX_TR don't affect here */
+#define AuBrPermStrSz  sizeof(AUFS_BRPERM_RW                   \
+                              "+" AUFS_BRATTR_COO_REG          \
+                              "+" AUFS_BRATTR_FHSM             \
+                              "+" AUFS_BRATTR_UNPIN            \
+                              "+" AUFS_BRATTR_ICEX_SEC         \
+                              "+" AUFS_BRATTR_ICEX_SYS         \
+                              "+" AUFS_BRATTR_ICEX_USR         \
+                              "+" AUFS_BRATTR_ICEX_OTH         \
+                              "+" AUFS_BRWATTR_NLWH)
+
+typedef struct {
+       char a[AuBrPermStrSz];
+} au_br_perm_str_t;
+
+static __inline__ int au_br_writable(int brperm)
+{
+       return brperm & AuBrPerm_RW;
+}
+
+static __inline__ int au_br_whable(int brperm)
+{
+       return brperm & (AuBrPerm_RW | AuBrRAttr_WH);
+}
+
+static __inline__ int au_br_wh_linkable(int brperm)
+{
+       return !(brperm & AuBrWAttr_NoLinkWH);
+}
+
+static __inline__ int au_br_cmoo(int brperm)
+{
+       return brperm & AuBrAttr_CMOO_Mask;
+}
+
+static __inline__ int au_br_fhsm(int brperm)
+{
+       return brperm & AuBrAttr_FHSM;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/* ioctl */
+enum {
+       /* readdir in userspace */
+       AuCtl_RDU,
+       AuCtl_RDU_INO,
+
+       AuCtl_WBR_FD,   /* pathconf wrapper */
+       AuCtl_IBUSY,    /* busy inode */
+       AuCtl_MVDOWN,   /* move-down */
+       AuCtl_BR,       /* info about branches */
+       AuCtl_FHSM_FD   /* connection for fhsm */
+};
+
+/* borrowed from linux/include/linux/kernel.h */
+#ifndef ALIGN
+#define ALIGN(x, a)            __ALIGN_MASK(x, (typeof(x))(a)-1)
+#define __ALIGN_MASK(x, mask)  (((x)+(mask))&~(mask))
+#endif
+
+/* borrowed from linux/include/linux/compiler-gcc3.h */
+#ifndef __aligned
+#define __aligned(x)                   __attribute__((aligned(x)))
+#endif
+
+
+struct au_rdu_cookie {
+       uint64_t        h_pos;
+       int16_t         bindex;
+       uint8_t         flags;
+       uint8_t         pad;
+       uint32_t        generation;
+} __aligned(8);
+
+struct au_rdu_ent {
+       uint64_t        ino;
+       int16_t         bindex;
+       uint8_t         type;
+       uint8_t         nlen;
+       uint8_t         wh;
+       char            name[0];
+} __aligned(8);
+
+static __inline__ int au_rdu_len(int nlen)
+{
+       /* include the terminating NULL */
+       return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
+                    sizeof(uint64_t));
+}
+
+union au_rdu_ent_ul {
+       struct au_rdu_ent *e;
+       uint64_t                        ul;
+};
+
+enum {
+       AufsCtlRduV_SZ,
+       AufsCtlRduV_End
+};
+
+struct aufs_rdu {
+       /* input */
+       union {
+               uint64_t        sz;     /* AuCtl_RDU */
+               uint64_t        nent;   /* AuCtl_RDU_INO */
+       };
+       union au_rdu_ent_ul     ent;
+       uint16_t                verify[AufsCtlRduV_End];
+
+       /* input/output */
+       uint32_t                blk;
+
+       /* output */
+       union au_rdu_ent_ul     tail;
+       /* number of entries which were added in a single call */
+       uint64_t                rent;
+       uint8_t                 full;
+       uint8_t                 shwh;
+
+       struct au_rdu_cookie    cookie;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_wbr_fd {
+       uint32_t        oflags;
+       int16_t         brid;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_ibusy {
+       uint64_t        ino, h_ino;
+       int16_t         bindex;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+/* error code for move-down */
+/* the actual message strings are implemented in aufs-util.git */
+enum {
+       EAU_MVDOWN_OPAQUE = 1,
+       EAU_MVDOWN_WHITEOUT,
+       EAU_MVDOWN_UPPER,
+       EAU_MVDOWN_BOTTOM,
+       EAU_MVDOWN_NOUPPER,
+       EAU_MVDOWN_NOLOWERBR,
+       EAU_Last
+};
+
+/* flags for move-down */
+#define AUFS_MVDOWN_DMSG       1
+#define AUFS_MVDOWN_OWLOWER    (1 << 1)        /* overwrite lower */
+#define AUFS_MVDOWN_KUPPER     (1 << 2)        /* keep upper */
+#define AUFS_MVDOWN_ROLOWER    (1 << 3)        /* do even if lower is RO */
+#define AUFS_MVDOWN_ROLOWER_R  (1 << 4)        /* did on lower RO */
+#define AUFS_MVDOWN_ROUPPER    (1 << 5)        /* do even if upper is RO */
+#define AUFS_MVDOWN_ROUPPER_R  (1 << 6)        /* did on upper RO */
+#define AUFS_MVDOWN_BRID_UPPER (1 << 7)        /* upper brid */
+#define AUFS_MVDOWN_BRID_LOWER (1 << 8)        /* lower brid */
+#define AUFS_MVDOWN_FHSM_LOWER (1 << 9)        /* find fhsm attr for lower */
+#define AUFS_MVDOWN_STFS       (1 << 10)       /* req. stfs */
+#define AUFS_MVDOWN_STFS_FAILED        (1 << 11)       /* output: stfs is unusable */
+#define AUFS_MVDOWN_BOTTOM     (1 << 12)       /* output: no more lowers */
+
+/* index for move-down */
+enum {
+       AUFS_MVDOWN_UPPER,
+       AUFS_MVDOWN_LOWER,
+       AUFS_MVDOWN_NARRAY
+};
+
+/*
+ * additional info of move-down
+ * number of free blocks and inodes.
+ * subset of struct kstatfs, but smaller and always 64bit.
+ */
+struct aufs_stfs {
+       uint64_t        f_blocks;
+       uint64_t        f_bavail;
+       uint64_t        f_files;
+       uint64_t        f_ffree;
+};
+
+struct aufs_stbr {
+       int16_t                 brid;   /* optional input */
+       int16_t                 bindex; /* output */
+       struct aufs_stfs        stfs;   /* output when AUFS_MVDOWN_STFS set */
+} __aligned(8);
+
+struct aufs_mvdown {
+       uint32_t                flags;                  /* input/output */
+       struct aufs_stbr        stbr[AUFS_MVDOWN_NARRAY]; /* input/output */
+       int8_t                  au_errno;               /* output */
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+union aufs_brinfo {
+       /* PATH_MAX may differ between kernel-space and user-space */
+       char    _spacer[4096];
+       struct {
+               int16_t id;
+               int     perm;
+               char    path[0];
+       };
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+#define AuCtlType              'A'
+#define AUFS_CTL_RDU           _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
+#define AUFS_CTL_RDU_INO       _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
+#define AUFS_CTL_WBR_FD                _IOW(AuCtlType, AuCtl_WBR_FD, \
+                                    struct aufs_wbr_fd)
+#define AUFS_CTL_IBUSY         _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
+#define AUFS_CTL_MVDOWN                _IOWR(AuCtlType, AuCtl_MVDOWN, \
+                                     struct aufs_mvdown)
+#define AUFS_CTL_BRINFO                _IOW(AuCtlType, AuCtl_BR, union aufs_brinfo)
+#define AUFS_CTL_FHSM_FD       _IOW(AuCtlType, AuCtl_FHSM_FD, int)
+
+#endif /* __AUFS_TYPE_H__ */
diff --git a/lib/libdss-include/include/linux/auto_fs.h b/lib/libdss-include/include/linux/auto_fs.h
new file mode 100644 (file)
index 0000000..556e409
--- /dev/null
@@ -0,0 +1,72 @@
+/* -*- linux-c -*- ------------------------------------------------------- *
+ *   
+ * linux/include/linux/auto_fs.h
+ *
+ *   Copyright 1997 Transmeta Corporation - All Rights Reserved
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+
+#ifndef _LINUX_AUTO_FS_H
+#define _LINUX_AUTO_FS_H
+
+#include <linux/types.h>
+#include <sys/ioctl.h>
+
+
+/* This file describes autofs v3 */
+#define AUTOFS_PROTO_VERSION   3
+
+/* Range of protocol versions defined */
+#define AUTOFS_MAX_PROTO_VERSION       AUTOFS_PROTO_VERSION
+#define AUTOFS_MIN_PROTO_VERSION       AUTOFS_PROTO_VERSION
+
+/*
+ * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
+ * back to the kernel via ioctl from userspace. On architectures where 32- and
+ * 64-bit userspace binaries can be executed it's important that the size of
+ * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we
+ * do not break the binary ABI interface by changing the structure size.
+ */
+#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */
+typedef unsigned long autofs_wqt_t;
+#else
+typedef unsigned int autofs_wqt_t;
+#endif
+
+/* Packet types */
+#define autofs_ptype_missing   0       /* Missing entry (mount request) */
+#define autofs_ptype_expire    1       /* Expire entry (umount request) */
+
+struct autofs_packet_hdr {
+       int proto_version;              /* Protocol version */
+       int type;                       /* Type of packet */
+};
+
+struct autofs_packet_missing {
+       struct autofs_packet_hdr hdr;
+        autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};     
+
+/* v3 expire (via ioctl) */
+struct autofs_packet_expire {
+       struct autofs_packet_hdr hdr;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+#define AUTOFS_IOC_READY      _IO(0x93,0x60)
+#define AUTOFS_IOC_FAIL       _IO(0x93,0x61)
+#define AUTOFS_IOC_CATATONIC  _IO(0x93,0x62)
+#define AUTOFS_IOC_PROTOVER   _IOR(0x93,0x63,int)
+#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,compat_ulong_t)
+#define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long)
+#define AUTOFS_IOC_EXPIRE     _IOR(0x93,0x65,struct autofs_packet_expire)
+
+#endif /* _LINUX_AUTO_FS_H */
diff --git a/lib/libdss-include/include/linux/auto_fs4.h b/lib/libdss-include/include/linux/auto_fs4.h
new file mode 100644 (file)
index 0000000..674aa75
--- /dev/null
@@ -0,0 +1,164 @@
+/* -*- c -*-
+ * linux/include/linux/auto_fs4.h
+ *
+ * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ */
+
+#ifndef _LINUX_AUTO_FS4_H
+#define _LINUX_AUTO_FS4_H
+
+/* Include common v3 definitions */
+#include <linux/types.h>
+#include <linux/auto_fs.h>
+
+/* autofs v4 definitions */
+#undef AUTOFS_PROTO_VERSION
+#undef AUTOFS_MIN_PROTO_VERSION
+#undef AUTOFS_MAX_PROTO_VERSION
+
+#define AUTOFS_PROTO_VERSION           5
+#define AUTOFS_MIN_PROTO_VERSION       3
+#define AUTOFS_MAX_PROTO_VERSION       5
+
+#define AUTOFS_PROTO_SUBVERSION                2
+
+/* Mask for expire behaviour */
+#define AUTOFS_EXP_IMMEDIATE           1
+#define AUTOFS_EXP_LEAVES              2
+
+#define AUTOFS_TYPE_ANY                        0U
+#define AUTOFS_TYPE_INDIRECT           1U
+#define AUTOFS_TYPE_DIRECT             2U
+#define AUTOFS_TYPE_OFFSET             4U
+
+static __inline__ void set_autofs_type_indirect(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_INDIRECT;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_indirect(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_INDIRECT);
+}
+
+static __inline__ void set_autofs_type_direct(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_DIRECT;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_direct(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT);
+}
+
+static __inline__ void set_autofs_type_offset(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_OFFSET;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_offset(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_OFFSET);
+}
+
+static __inline__ unsigned int autofs_type_trigger(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
+}
+
+/*
+ * This isn't really a type as we use it to say "no type set" to
+ * indicate we want to search for "any" mount in the
+ * autofs_dev_ioctl_ismountpoint() device ioctl function.
+ */
+static __inline__ void set_autofs_type_any(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_ANY;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_any(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_ANY);
+}
+
+/* Daemon notification packet types */
+enum autofs_notify {
+       NFY_NONE,
+       NFY_MOUNT,
+       NFY_EXPIRE
+};
+
+/* Kernel protocol version 4 packet types */
+
+/* Expire entry (umount request) */
+#define autofs_ptype_expire_multi      2
+
+/* Kernel protocol version 5 packet types */
+
+/* Indirect mount missing and expire requests. */
+#define autofs_ptype_missing_indirect  3
+#define autofs_ptype_expire_indirect   4
+
+/* Direct mount missing and expire requests */
+#define autofs_ptype_missing_direct    5
+#define autofs_ptype_expire_direct     6
+
+/* v4 multi expire (via pipe) */
+struct autofs_packet_expire_multi {
+       struct autofs_packet_hdr hdr;
+        autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+union autofs_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_packet_missing missing;
+       struct autofs_packet_expire expire;
+       struct autofs_packet_expire_multi expire_multi;
+};
+
+/* autofs v5 common packet struct */
+struct autofs_v5_packet {
+       struct autofs_packet_hdr hdr;
+       autofs_wqt_t wait_queue_token;
+       __u32 dev;
+       __u64 ino;
+       __u32 uid;
+       __u32 gid;
+       __u32 pid;
+       __u32 tgid;
+       __u32 len;
+       char name[NAME_MAX+1];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_v5_packet v5_packet;
+       autofs_packet_missing_indirect_t missing_indirect;
+       autofs_packet_expire_indirect_t expire_indirect;
+       autofs_packet_missing_direct_t missing_direct;
+       autofs_packet_expire_direct_t expire_direct;
+};
+
+#define AUTOFS_IOC_EXPIRE_MULTI                _IOW(0x93,0x66,int)
+#define AUTOFS_IOC_EXPIRE_INDIRECT     AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_EXPIRE_DIRECT       AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_PROTOSUBVER         _IOR(0x93,0x67,int)
+#define AUTOFS_IOC_ASKUMOUNT           _IOR(0x93,0x70,int)
+
+
+#endif /* _LINUX_AUTO_FS4_H */
diff --git a/lib/libdss-include/include/linux/auxvec.h b/lib/libdss-include/include/linux/auxvec.h
new file mode 100644 (file)
index 0000000..4bad588
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _LINUX_AUXVEC_H
+#define _LINUX_AUXVEC_H
+
+#include <asm/auxvec.h>
+
+/* Symbolic values for the entries in the auxiliary table
+   put on the initial stack */
+#define AT_NULL   0    /* end of vector */
+#define AT_IGNORE 1    /* entry should be ignored */
+#define AT_EXECFD 2    /* file descriptor of program */
+#define AT_PHDR   3    /* program headers for program */
+#define AT_PHENT  4    /* size of program header entry */
+#define AT_PHNUM  5    /* number of program headers */
+#define AT_PAGESZ 6    /* system page size */
+#define AT_BASE   7    /* base address of interpreter */
+#define AT_FLAGS  8    /* flags */
+#define AT_ENTRY  9    /* entry point of program */
+#define AT_NOTELF 10   /* program is not ELF */
+#define AT_UID    11   /* real uid */
+#define AT_EUID   12   /* effective uid */
+#define AT_GID    13   /* real gid */
+#define AT_EGID   14   /* effective gid */
+#define AT_PLATFORM 15  /* string identifying CPU for optimizations */
+#define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
+#define AT_CLKTCK 17   /* frequency at which times() increments */
+/* AT_* values 18 through 22 are reserved */
+#define AT_SECURE 23   /* secure mode boolean */
+#define AT_BASE_PLATFORM 24    /* string identifying real platform, may
+                                * differ from AT_PLATFORM. */
+#define AT_RANDOM 25   /* address of 16 random bytes */
+#define AT_HWCAP2 26   /* extension of AT_HWCAP */
+
+#define AT_EXECFN  31  /* filename of program */
+
+
+#endif /* _LINUX_AUXVEC_H */
diff --git a/lib/libdss-include/include/linux/ax25.h b/lib/libdss-include/include/linux/ax25.h
new file mode 100644 (file)
index 0000000..74c89a4
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * These are the public elements of the Linux kernel AX.25 code. A similar
+ * file netrom.h exists for the NET/ROM protocol.
+ */
+
+#ifndef        AX25_KERNEL_H
+#define        AX25_KERNEL_H
+
+#include <linux/socket.h>
+
+#define AX25_MTU       256
+#define AX25_MAX_DIGIS  8
+
+#define AX25_WINDOW    1
+#define AX25_T1                2
+#define AX25_N2                3
+#define AX25_T3                4
+#define AX25_T2                5
+#define        AX25_BACKOFF    6
+#define        AX25_EXTSEQ     7
+#define        AX25_PIDINCL    8
+#define AX25_IDLE      9
+#define AX25_PACLEN    10
+#define AX25_IAMDIGI   12
+
+#define AX25_KILL      99
+
+#define SIOCAX25GETUID         (SIOCPROTOPRIVATE+0)
+#define SIOCAX25ADDUID         (SIOCPROTOPRIVATE+1)
+#define SIOCAX25DELUID         (SIOCPROTOPRIVATE+2)
+#define SIOCAX25NOUID          (SIOCPROTOPRIVATE+3)
+#define SIOCAX25OPTRT          (SIOCPROTOPRIVATE+7)
+#define SIOCAX25CTLCON         (SIOCPROTOPRIVATE+8)
+#define SIOCAX25GETINFOOLD     (SIOCPROTOPRIVATE+9)
+#define SIOCAX25ADDFWD         (SIOCPROTOPRIVATE+10)
+#define SIOCAX25DELFWD         (SIOCPROTOPRIVATE+11)
+#define SIOCAX25DEVCTL          (SIOCPROTOPRIVATE+12)
+#define SIOCAX25GETINFO         (SIOCPROTOPRIVATE+13)
+
+#define AX25_SET_RT_IPMODE     2
+
+#define AX25_NOUID_DEFAULT     0
+#define AX25_NOUID_BLOCK       1
+
+typedef struct {
+       char            ax25_call[7];   /* 6 call + SSID (shifted ascii!) */
+} ax25_address;
+
+struct sockaddr_ax25 {
+       __kernel_sa_family_t sax25_family;
+       ax25_address    sax25_call;
+       int             sax25_ndigis;
+       /* Digipeater ax25_address sets follow */
+};
+
+#define sax25_uid      sax25_ndigis
+
+struct full_sockaddr_ax25 {
+       struct sockaddr_ax25 fsa_ax25;
+       ax25_address    fsa_digipeater[AX25_MAX_DIGIS];
+};
+
+struct ax25_routes_struct {
+       ax25_address    port_addr;
+       ax25_address    dest_addr;
+       unsigned char   digi_count;
+       ax25_address    digi_addr[AX25_MAX_DIGIS];
+};
+
+struct ax25_route_opt_struct {
+       ax25_address    port_addr;
+       ax25_address    dest_addr;
+       int             cmd;
+       int             arg;
+};
+
+struct ax25_ctl_struct {
+        ax25_address            port_addr;
+        ax25_address            source_addr;
+        ax25_address            dest_addr;
+        unsigned int            cmd;
+        unsigned long           arg;
+        unsigned char           digi_count;
+        ax25_address            digi_addr[AX25_MAX_DIGIS];
+};
+
+/* this will go away. Please do not export to user land */
+struct ax25_info_struct_deprecated {
+       unsigned int    n2, n2count;
+       unsigned int    t1, t1timer;
+       unsigned int    t2, t2timer;
+       unsigned int    t3, t3timer;
+       unsigned int    idle, idletimer;
+       unsigned int    state;
+       unsigned int    rcv_q, snd_q;
+};
+
+struct ax25_info_struct {
+       unsigned int    n2, n2count;
+       unsigned int    t1, t1timer;
+       unsigned int    t2, t2timer;
+       unsigned int    t3, t3timer;
+       unsigned int    idle, idletimer;
+       unsigned int    state;
+       unsigned int    rcv_q, snd_q;
+       unsigned int    vs, vr, va, vs_max;
+       unsigned int    paclen;
+       unsigned int    window;
+};
+
+struct ax25_fwd_struct {
+       ax25_address    port_from;
+       ax25_address    port_to;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/b1lli.h b/lib/libdss-include/include/linux/b1lli.h
new file mode 100644 (file)
index 0000000..713f712
--- /dev/null
@@ -0,0 +1,73 @@
+/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $
+ *
+ * ISDN lowlevel-module for AVM B1-card.
+ *
+ * Copyright 1996 by Carsten Paeth (calle@calle.in-berlin.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _B1LLI_H_
+#define _B1LLI_H_
+/*
+ * struct for loading t4 file 
+ */
+typedef struct avmb1_t4file {
+       int len;
+       unsigned char *data;
+} avmb1_t4file;
+
+typedef struct avmb1_loaddef {
+       int contr;
+       avmb1_t4file t4file;
+} avmb1_loaddef;
+
+typedef struct avmb1_loadandconfigdef {
+       int contr;
+       avmb1_t4file t4file;
+        avmb1_t4file t4config; 
+} avmb1_loadandconfigdef;
+
+typedef struct avmb1_resetdef {
+       int contr;
+} avmb1_resetdef;
+
+typedef struct avmb1_getdef {
+       int contr;
+       int cardtype;
+       int cardstate;
+} avmb1_getdef;
+
+/*
+ * struct for adding new cards 
+ */
+typedef struct avmb1_carddef {
+       int port;
+       int irq;
+} avmb1_carddef;
+
+#define AVM_CARDTYPE_B1                0
+#define AVM_CARDTYPE_T1                1
+#define AVM_CARDTYPE_M1                2
+#define AVM_CARDTYPE_M2                3
+
+typedef struct avmb1_extcarddef {
+       int port;
+       int irq;
+        int cardtype;
+        int cardnr;  /* for HEMA/T1 */
+} avmb1_extcarddef;
+
+#define        AVMB1_LOAD              0       /* load image to card */
+#define AVMB1_ADDCARD          1       /* add a new card - OBSOLETE */
+#define AVMB1_RESETCARD                2       /* reset a card */
+#define        AVMB1_LOAD_AND_CONFIG   3       /* load image and config to card */
+#define        AVMB1_ADDCARD_WITH_TYPE 4       /* add a new card, with cardtype */
+#define AVMB1_GET_CARDINFO     5       /* get cardtype */
+#define AVMB1_REMOVECARD       6       /* remove a card - OBSOLETE */
+
+#define        AVMB1_REGISTERCARD_IS_OBSOLETE
+
+#endif                         /* _B1LLI_H_ */
diff --git a/lib/libdss-include/include/linux/baycom.h b/lib/libdss-include/include/linux/baycom.h
new file mode 100644 (file)
index 0000000..81249e0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * The Linux BAYCOM driver for the Baycom serial 1200 baud modem
+ * and the parallel 9600 baud modem
+ * (C) 1997-1998 by Thomas Sailer, HB9JNX/AE4WA
+ */
+
+#ifndef _BAYCOM_H
+#define _BAYCOM_H
+
+/* -------------------------------------------------------------------- */
+/*
+ * structs for the IOCTL commands
+ */
+
+struct baycom_debug_data {
+       unsigned long debug1;
+       unsigned long debug2;
+       long debug3;
+};
+
+struct baycom_ioctl {
+       int cmd;
+       union {
+               struct baycom_debug_data dbg;
+       } data;
+};
+
+/* -------------------------------------------------------------------- */
+
+/*
+ * ioctl values change for baycom
+ */
+#define BAYCOMCTL_GETDEBUG       0x92
+
+/* -------------------------------------------------------------------- */
+
+#endif /* _BAYCOM_H */
+
+/* --------------------------------------------------------------------- */
diff --git a/lib/libdss-include/include/linux/bcm933xx_hcs.h b/lib/libdss-include/include/linux/bcm933xx_hcs.h
new file mode 100644 (file)
index 0000000..d228218
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Broadcom Cable Modem firmware format
+ */
+
+#ifndef __BCM933XX_HCS_H
+#define __BCM933XX_HCS_H
+
+#include <linux/types.h>
+
+struct bcm_hcs {
+       __u16 magic;
+       __u16 control;
+       __u16 rev_maj;
+       __u16 rev_min;
+       __u32 build_date;
+       __u32 filelen;
+       __u32 ldaddress;
+       char filename[64];
+       __u16 hcs;
+       __u16 her_znaet_chto;
+       __u32 crc;
+};
+
+#endif /* __BCM933XX_HCS */
diff --git a/lib/libdss-include/include/linux/bfs_fs.h b/lib/libdss-include/include/linux/bfs_fs.h
new file mode 100644 (file)
index 0000000..1c0b355
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ *     include/linux/bfs_fs.h - BFS data structures on disk.
+ *     Copyright (C) 1999 Tigran Aivazian <tigran@veritas.com>
+ */
+
+#ifndef _LINUX_BFS_FS_H
+#define _LINUX_BFS_FS_H
+
+#include <linux/types.h>
+
+#define BFS_BSIZE_BITS         9
+#define BFS_BSIZE              (1<<BFS_BSIZE_BITS)
+
+#define BFS_MAGIC              0x1BADFACE
+#define BFS_ROOT_INO           2
+#define BFS_INODES_PER_BLOCK   8
+
+/* SVR4 vnode type values (bfs_inode->i_vtype) */
+#define BFS_VDIR 2L
+#define BFS_VREG 1L
+
+/* BFS inode layout on disk */
+struct bfs_inode {
+       __le16 i_ino;
+       __u16 i_unused;
+       __le32 i_sblock;
+       __le32 i_eblock;
+       __le32 i_eoffset;
+       __le32 i_vtype;
+       __le32 i_mode;
+       __le32 i_uid;
+       __le32 i_gid;
+       __le32 i_nlink;
+       __le32 i_atime;
+       __le32 i_mtime;
+       __le32 i_ctime;
+       __u32 i_padding[4];
+};
+
+#define BFS_NAMELEN            14      
+#define BFS_DIRENT_SIZE                16
+#define BFS_DIRS_PER_BLOCK     32
+
+struct bfs_dirent {
+       __le16 ino;
+       char name[BFS_NAMELEN];
+};
+
+/* BFS superblock layout on disk */
+struct bfs_super_block {
+       __le32 s_magic;
+       __le32 s_start;
+       __le32 s_end;
+       __le32 s_from;
+       __le32 s_to;
+       __s32 s_bfrom;
+       __s32 s_bto;
+       char  s_fsname[6];
+       char  s_volume[6];
+       __u32 s_padding[118];
+};
+
+
+#define BFS_OFF2INO(offset) \
+        ((((offset) - BFS_BSIZE) / sizeof(struct bfs_inode)) + BFS_ROOT_INO)
+
+#define BFS_INO2OFF(ino) \
+       ((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE)
+#define BFS_NZFILESIZE(ip) \
+        ((le32_to_cpu((ip)->i_eoffset) + 1) -  le32_to_cpu((ip)->i_sblock) * BFS_BSIZE)
+
+#define BFS_FILESIZE(ip) \
+        ((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip))
+
+#define BFS_FILEBLOCKS(ip) \
+        ((ip)->i_sblock == 0 ? 0 : (le32_to_cpu((ip)->i_eblock) + 1) -  le32_to_cpu((ip)->i_sblock))
+#define BFS_UNCLEAN(bfs_sb, sb)        \
+       ((le32_to_cpu(bfs_sb->s_from) != -1) && (le32_to_cpu(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY))
+
+
+#endif /* _LINUX_BFS_FS_H */
diff --git a/lib/libdss-include/include/linux/binfmts.h b/lib/libdss-include/include/linux/binfmts.h
new file mode 100644 (file)
index 0000000..6416794
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_BINFMTS_H
+#define _LINUX_BINFMTS_H
+
+#include <linux/capability.h>
+
+struct pt_regs;
+
+/*
+ * These are the maximum length and maximum number of strings passed to the
+ * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to
+ * prevent the kernel from being unduly impacted by misaddressed pointers.
+ * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
+ */
+#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
+#define MAX_ARG_STRINGS 0x7FFFFFFF
+
+/* sizeof(linux_binprm->buf) */
+#define BINPRM_BUF_SIZE 128
+
+#endif /* _LINUX_BINFMTS_H */
diff --git a/lib/libdss-include/include/linux/blkpg.h b/lib/libdss-include/include/linux/blkpg.h
new file mode 100644 (file)
index 0000000..e39cc4e
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __LINUX_BLKPG_H
+#define __LINUX_BLKPG_H
+
+/*
+ * Partition table and disk geometry handling
+ *
+ * A single ioctl with lots of subfunctions:
+ *
+ * Device number stuff:
+ *    get_whole_disk()         (given the device number of a partition,
+ *                               find the device number of the encompassing disk)
+ *    get_all_partitions()     (given the device number of a disk, return the
+ *                              device numbers of all its known partitions)
+ *
+ * Partition stuff:
+ *    add_partition()
+ *    delete_partition()
+ *    test_partition_in_use()  (also for test_disk_in_use)
+ *
+ * Geometry stuff:
+ *    get_geometry()
+ *    set_geometry()
+ *    get_bios_drivedata()
+ *
+ * For today, only the partition stuff - aeb, 990515
+ */
+
+#include <linux/ioctl.h>
+
+#define BLKPG      _IO(0x12,105)
+
+/* The argument structure */
+struct blkpg_ioctl_arg {
+        int op;
+        int flags;
+        int datalen;
+        void *data;
+};
+
+/* The subfunctions (for the op field) */
+#define BLKPG_ADD_PARTITION    1
+#define BLKPG_DEL_PARTITION    2
+#define BLKPG_RESIZE_PARTITION 3
+
+/* Sizes of name fields. Unused at present. */
+#define BLKPG_DEVNAMELTH       64
+#define BLKPG_VOLNAMELTH       64
+
+/* The data structure for ADD_PARTITION and DEL_PARTITION */
+struct blkpg_partition {
+       long long start;                /* starting offset in bytes */
+       long long length;               /* length in bytes */
+       int pno;                        /* partition number */
+       char devname[BLKPG_DEVNAMELTH]; /* partition name, like sda5 or c0d1p2,
+                                          to be used in kernel messages */
+       char volname[BLKPG_VOLNAMELTH]; /* volume label */
+};
+
+#endif /* __LINUX_BLKPG_H */
diff --git a/lib/libdss-include/include/linux/blktrace_api.h b/lib/libdss-include/include/linux/blktrace_api.h
new file mode 100644 (file)
index 0000000..8d00071
--- /dev/null
@@ -0,0 +1,142 @@
+#ifndef BLKTRACE_H
+#define BLKTRACE_H
+
+#include <linux/types.h>
+
+/*
+ * Trace categories
+ */
+enum blktrace_cat {
+       BLK_TC_READ     = 1 << 0,       /* reads */
+       BLK_TC_WRITE    = 1 << 1,       /* writes */
+       BLK_TC_FLUSH    = 1 << 2,       /* flush */
+       BLK_TC_SYNC     = 1 << 3,       /* sync IO */
+       BLK_TC_SYNCIO   = BLK_TC_SYNC,
+       BLK_TC_QUEUE    = 1 << 4,       /* queueing/merging */
+       BLK_TC_REQUEUE  = 1 << 5,       /* requeueing */
+       BLK_TC_ISSUE    = 1 << 6,       /* issue */
+       BLK_TC_COMPLETE = 1 << 7,       /* completions */
+       BLK_TC_FS       = 1 << 8,       /* fs requests */
+       BLK_TC_PC       = 1 << 9,       /* pc requests */
+       BLK_TC_NOTIFY   = 1 << 10,      /* special message */
+       BLK_TC_AHEAD    = 1 << 11,      /* readahead */
+       BLK_TC_META     = 1 << 12,      /* metadata */
+       BLK_TC_DISCARD  = 1 << 13,      /* discard requests */
+       BLK_TC_DRV_DATA = 1 << 14,      /* binary per-driver data */
+       BLK_TC_FUA      = 1 << 15,      /* fua requests */
+
+       BLK_TC_END      = 1 << 15,      /* we've run out of bits! */
+};
+
+#define BLK_TC_SHIFT           (16)
+#define BLK_TC_ACT(act)                ((act) << BLK_TC_SHIFT)
+
+/*
+ * Basic trace actions
+ */
+enum blktrace_act {
+       __BLK_TA_QUEUE = 1,             /* queued */
+       __BLK_TA_BACKMERGE,             /* back merged to existing rq */
+       __BLK_TA_FRONTMERGE,            /* front merge to existing rq */
+       __BLK_TA_GETRQ,                 /* allocated new request */
+       __BLK_TA_SLEEPRQ,               /* sleeping on rq allocation */
+       __BLK_TA_REQUEUE,               /* request requeued */
+       __BLK_TA_ISSUE,                 /* sent to driver */
+       __BLK_TA_COMPLETE,              /* completed by driver */
+       __BLK_TA_PLUG,                  /* queue was plugged */
+       __BLK_TA_UNPLUG_IO,             /* queue was unplugged by io */
+       __BLK_TA_UNPLUG_TIMER,          /* queue was unplugged by timer */
+       __BLK_TA_INSERT,                /* insert request */
+       __BLK_TA_SPLIT,                 /* bio was split */
+       __BLK_TA_BOUNCE,                /* bio was bounced */
+       __BLK_TA_REMAP,                 /* bio was remapped */
+       __BLK_TA_ABORT,                 /* request aborted */
+       __BLK_TA_DRV_DATA,              /* driver-specific binary data */
+};
+
+/*
+ * Notify events.
+ */
+enum blktrace_notify {
+       __BLK_TN_PROCESS = 0,           /* establish pid/name mapping */
+       __BLK_TN_TIMESTAMP,             /* include system clock */
+       __BLK_TN_MESSAGE,               /* Character string message */
+};
+
+
+/*
+ * Trace actions in full. Additionally, read or write is masked
+ */
+#define BLK_TA_QUEUE           (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_BACKMERGE       (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_FRONTMERGE      (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_GETRQ            (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_SLEEPRQ          (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_REQUEUE          (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
+#define BLK_TA_ISSUE           (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
+#define BLK_TA_COMPLETE                (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE))
+#define BLK_TA_PLUG            (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_UNPLUG_IO       (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_UNPLUG_TIMER    (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_INSERT          (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_SPLIT           (__BLK_TA_SPLIT)
+#define BLK_TA_BOUNCE          (__BLK_TA_BOUNCE)
+#define BLK_TA_REMAP           (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_ABORT           (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_DRV_DATA        (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
+
+#define BLK_TN_PROCESS         (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
+#define BLK_TN_TIMESTAMP       (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
+#define BLK_TN_MESSAGE         (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
+
+#define BLK_IO_TRACE_MAGIC     0x65617400
+#define BLK_IO_TRACE_VERSION   0x07
+
+/*
+ * The trace itself
+ */
+struct blk_io_trace {
+       __u32 magic;            /* MAGIC << 8 | version */
+       __u32 sequence;         /* event number */
+       __u64 time;             /* in microseconds */
+       __u64 sector;           /* disk offset */
+       __u32 bytes;            /* transfer length */
+       __u32 action;           /* what happened */
+       __u32 pid;              /* who did it */
+       __u32 device;           /* device number */
+       __u32 cpu;              /* on what cpu did it happen */
+       __u16 error;            /* completion error */
+       __u16 pdu_len;          /* length of data after this trace */
+};
+
+/*
+ * The remap event
+ */
+struct blk_io_trace_remap {
+       __be32 device_from;
+       __be32 device_to;
+       __be64 sector_from;
+};
+
+enum {
+       Blktrace_setup = 1,
+       Blktrace_running,
+       Blktrace_stopped,
+};
+
+#define BLKTRACE_BDEV_SIZE     32
+
+/*
+ * User setup structure passed with BLKTRACESTART
+ */
+struct blk_user_trace_setup {
+       char name[BLKTRACE_BDEV_SIZE];  /* output */
+       __u16 act_mask;                 /* input */
+       __u32 buf_size;                 /* input */
+       __u32 buf_nr;                   /* input */
+       __u64 start_lba;
+       __u64 end_lba;
+       __u32 pid;
+};
+
+#endif /* BLKTRACE_H */
diff --git a/lib/libdss-include/include/linux/bpf.h b/lib/libdss-include/include/linux/bpf.h
new file mode 100644 (file)
index 0000000..2e2524d
--- /dev/null
@@ -0,0 +1,301 @@
+/* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ */
+#ifndef __LINUX_BPF_H__
+#define __LINUX_BPF_H__
+
+#include <linux/types.h>
+#include <linux/bpf_common.h>
+
+/* Extended instruction set based on top of classic BPF */
+
+/* instruction classes */
+#define BPF_ALU64      0x07    /* alu mode in double word width */
+
+/* ld/ldx fields */
+#define BPF_DW         0x18    /* double word */
+#define BPF_XADD       0xc0    /* exclusive add */
+
+/* alu/jmp fields */
+#define BPF_MOV                0xb0    /* mov reg to reg */
+#define BPF_ARSH       0xc0    /* sign extending arithmetic shift right */
+
+/* change endianness of a register */
+#define BPF_END                0xd0    /* flags for endianness conversion: */
+#define BPF_TO_LE      0x00    /* convert to little-endian */
+#define BPF_TO_BE      0x08    /* convert to big-endian */
+#define BPF_FROM_LE    BPF_TO_LE
+#define BPF_FROM_BE    BPF_TO_BE
+
+#define BPF_JNE                0x50    /* jump != */
+#define BPF_JSGT       0x60    /* SGT is signed '>', GT in x86 */
+#define BPF_JSGE       0x70    /* SGE is signed '>=', GE in x86 */
+#define BPF_CALL       0x80    /* function call */
+#define BPF_EXIT       0x90    /* function return */
+
+/* Register numbers */
+enum {
+       BPF_REG_0 = 0,
+       BPF_REG_1,
+       BPF_REG_2,
+       BPF_REG_3,
+       BPF_REG_4,
+       BPF_REG_5,
+       BPF_REG_6,
+       BPF_REG_7,
+       BPF_REG_8,
+       BPF_REG_9,
+       BPF_REG_10,
+       __MAX_BPF_REG,
+};
+
+/* BPF has 10 general purpose 64-bit registers and stack frame. */
+#define MAX_BPF_REG    __MAX_BPF_REG
+
+struct bpf_insn {
+       __u8    code;           /* opcode */
+       __u8    dst_reg:4;      /* dest register */
+       __u8    src_reg:4;      /* source register */
+       __s16   off;            /* signed offset */
+       __s32   imm;            /* signed immediate constant */
+};
+
+/* BPF syscall commands, see bpf(2) man-page for details. */
+enum bpf_cmd {
+       BPF_MAP_CREATE,
+       BPF_MAP_LOOKUP_ELEM,
+       BPF_MAP_UPDATE_ELEM,
+       BPF_MAP_DELETE_ELEM,
+       BPF_MAP_GET_NEXT_KEY,
+       BPF_PROG_LOAD,
+       BPF_OBJ_PIN,
+       BPF_OBJ_GET,
+};
+
+enum bpf_map_type {
+       BPF_MAP_TYPE_UNSPEC,
+       BPF_MAP_TYPE_HASH,
+       BPF_MAP_TYPE_ARRAY,
+       BPF_MAP_TYPE_PROG_ARRAY,
+       BPF_MAP_TYPE_PERF_EVENT_ARRAY,
+};
+
+enum bpf_prog_type {
+       BPF_PROG_TYPE_UNSPEC,
+       BPF_PROG_TYPE_SOCKET_FILTER,
+       BPF_PROG_TYPE_KPROBE,
+       BPF_PROG_TYPE_SCHED_CLS,
+       BPF_PROG_TYPE_SCHED_ACT,
+};
+
+#define BPF_PSEUDO_MAP_FD      1
+
+/* flags for BPF_MAP_UPDATE_ELEM command */
+#define BPF_ANY                0 /* create new element or update existing */
+#define BPF_NOEXIST    1 /* create new element if it didn't exist */
+#define BPF_EXIST      2 /* update existing element */
+
+union bpf_attr {
+       struct { /* anonymous struct used by BPF_MAP_CREATE command */
+               __u32   map_type;       /* one of enum bpf_map_type */
+               __u32   key_size;       /* size of key in bytes */
+               __u32   value_size;     /* size of value in bytes */
+               __u32   max_entries;    /* max number of entries in a map */
+       };
+
+       struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
+               __u32           map_fd;
+               __aligned_u64   key;
+               union {
+                       __aligned_u64 value;
+                       __aligned_u64 next_key;
+               };
+               __u64           flags;
+       };
+
+       struct { /* anonymous struct used by BPF_PROG_LOAD command */
+               __u32           prog_type;      /* one of enum bpf_prog_type */
+               __u32           insn_cnt;
+               __aligned_u64   insns;
+               __aligned_u64   license;
+               __u32           log_level;      /* verbosity level of verifier */
+               __u32           log_size;       /* size of user buffer */
+               __aligned_u64   log_buf;        /* user supplied buffer */
+               __u32           kern_version;   /* checked when prog_type=kprobe */
+       };
+
+       struct { /* anonymous struct used by BPF_OBJ_* commands */
+               __aligned_u64   pathname;
+               __u32           bpf_fd;
+       };
+} __attribute__((aligned(8)));
+
+/* integer value in 'imm' field of BPF_CALL instruction selects which helper
+ * function eBPF program intends to call
+ */
+enum bpf_func_id {
+       BPF_FUNC_unspec,
+       BPF_FUNC_map_lookup_elem, /* void *map_lookup_elem(&map, &key) */
+       BPF_FUNC_map_update_elem, /* int map_update_elem(&map, &key, &value, flags) */
+       BPF_FUNC_map_delete_elem, /* int map_delete_elem(&map, &key) */
+       BPF_FUNC_probe_read,      /* int bpf_probe_read(void *dst, int size, void *src) */
+       BPF_FUNC_ktime_get_ns,    /* u64 bpf_ktime_get_ns(void) */
+       BPF_FUNC_trace_printk,    /* int bpf_trace_printk(const char *fmt, int fmt_size, ...) */
+       BPF_FUNC_get_prandom_u32, /* u32 prandom_u32(void) */
+       BPF_FUNC_get_smp_processor_id, /* u32 raw_smp_processor_id(void) */
+
+       /**
+        * skb_store_bytes(skb, offset, from, len, flags) - store bytes into packet
+        * @skb: pointer to skb
+        * @offset: offset within packet from skb->mac_header
+        * @from: pointer where to copy bytes from
+        * @len: number of bytes to store into packet
+        * @flags: bit 0 - if true, recompute skb->csum
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_skb_store_bytes,
+
+       /**
+        * l3_csum_replace(skb, offset, from, to, flags) - recompute IP checksum
+        * @skb: pointer to skb
+        * @offset: offset within packet where IP checksum is located
+        * @from: old value of header field
+        * @to: new value of header field
+        * @flags: bits 0-3 - size of header field
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_l3_csum_replace,
+
+       /**
+        * l4_csum_replace(skb, offset, from, to, flags) - recompute TCP/UDP checksum
+        * @skb: pointer to skb
+        * @offset: offset within packet where TCP/UDP checksum is located
+        * @from: old value of header field
+        * @to: new value of header field
+        * @flags: bits 0-3 - size of header field
+        *         bit 4 - is pseudo header
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_l4_csum_replace,
+
+       /**
+        * bpf_tail_call(ctx, prog_array_map, index) - jump into another BPF program
+        * @ctx: context pointer passed to next program
+        * @prog_array_map: pointer to map which type is BPF_MAP_TYPE_PROG_ARRAY
+        * @index: index inside array that selects specific program to run
+        * Return: 0 on success
+        */
+       BPF_FUNC_tail_call,
+
+       /**
+        * bpf_clone_redirect(skb, ifindex, flags) - redirect to another netdev
+        * @skb: pointer to skb
+        * @ifindex: ifindex of the net device
+        * @flags: bit 0 - if set, redirect to ingress instead of egress
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_clone_redirect,
+
+       /**
+        * u64 bpf_get_current_pid_tgid(void)
+        * Return: current->tgid << 32 | current->pid
+        */
+       BPF_FUNC_get_current_pid_tgid,
+
+       /**
+        * u64 bpf_get_current_uid_gid(void)
+        * Return: current_gid << 32 | current_uid
+        */
+       BPF_FUNC_get_current_uid_gid,
+
+       /**
+        * bpf_get_current_comm(char *buf, int size_of_buf)
+        * stores current->comm into buf
+        * Return: 0 on success
+        */
+       BPF_FUNC_get_current_comm,
+
+       /**
+        * bpf_get_cgroup_classid(skb) - retrieve a proc's classid
+        * @skb: pointer to skb
+        * Return: classid if != 0
+        */
+       BPF_FUNC_get_cgroup_classid,
+       BPF_FUNC_skb_vlan_push, /* bpf_skb_vlan_push(skb, vlan_proto, vlan_tci) */
+       BPF_FUNC_skb_vlan_pop,  /* bpf_skb_vlan_pop(skb) */
+
+       /**
+        * bpf_skb_[gs]et_tunnel_key(skb, key, size, flags)
+        * retrieve or populate tunnel metadata
+        * @skb: pointer to skb
+        * @key: pointer to 'struct bpf_tunnel_key'
+        * @size: size of 'struct bpf_tunnel_key'
+        * @flags: room for future extensions
+        * Retrun: 0 on success
+        */
+       BPF_FUNC_skb_get_tunnel_key,
+       BPF_FUNC_skb_set_tunnel_key,
+       BPF_FUNC_perf_event_read,       /* u64 bpf_perf_event_read(&map, index) */
+       /**
+        * bpf_redirect(ifindex, flags) - redirect to another netdev
+        * @ifindex: ifindex of the net device
+        * @flags: bit 0 - if set, redirect to ingress instead of egress
+        *         other bits - reserved
+        * Return: TC_ACT_REDIRECT
+        */
+       BPF_FUNC_redirect,
+
+       /**
+        * bpf_get_route_realm(skb) - retrieve a dst's tclassid
+        * @skb: pointer to skb
+        * Return: realm if != 0
+        */
+       BPF_FUNC_get_route_realm,
+
+       /**
+        * bpf_perf_event_output(ctx, map, index, data, size) - output perf raw sample
+        * @ctx: struct pt_regs*
+        * @map: pointer to perf_event_array map
+        * @index: index of event in the map
+        * @data: data on stack to be output as raw data
+        * @size: size of data
+        * Return: 0 on success
+        */
+       BPF_FUNC_perf_event_output,
+       __BPF_FUNC_MAX_ID,
+};
+
+/* user accessible mirror of in-kernel sk_buff.
+ * new fields can only be added to the end of this structure
+ */
+struct __sk_buff {
+       __u32 len;
+       __u32 pkt_type;
+       __u32 mark;
+       __u32 queue_mapping;
+       __u32 protocol;
+       __u32 vlan_present;
+       __u32 vlan_tci;
+       __u32 vlan_proto;
+       __u32 priority;
+       __u32 ingress_ifindex;
+       __u32 ifindex;
+       __u32 tc_index;
+       __u32 cb[5];
+       __u32 hash;
+       __u32 tc_classid;
+};
+
+struct bpf_tunnel_key {
+       __u32 tunnel_id;
+       __u32 remote_ipv4;
+};
+
+#endif /* __LINUX_BPF_H__ */
diff --git a/lib/libdss-include/include/linux/bpf_common.h b/lib/libdss-include/include/linux/bpf_common.h
new file mode 100644 (file)
index 0000000..afe7433
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef __LINUX_BPF_COMMON_H__
+#define __LINUX_BPF_COMMON_H__
+
+/* Instruction classes */
+#define BPF_CLASS(code) ((code) & 0x07)
+#define                BPF_LD          0x00
+#define                BPF_LDX         0x01
+#define                BPF_ST          0x02
+#define                BPF_STX         0x03
+#define                BPF_ALU         0x04
+#define                BPF_JMP         0x05
+#define                BPF_RET         0x06
+#define                BPF_MISC        0x07
+
+/* ld/ldx fields */
+#define BPF_SIZE(code)  ((code) & 0x18)
+#define                BPF_W           0x00
+#define                BPF_H           0x08
+#define                BPF_B           0x10
+#define BPF_MODE(code)  ((code) & 0xe0)
+#define                BPF_IMM         0x00
+#define                BPF_ABS         0x20
+#define                BPF_IND         0x40
+#define                BPF_MEM         0x60
+#define                BPF_LEN         0x80
+#define                BPF_MSH         0xa0
+
+/* alu/jmp fields */
+#define BPF_OP(code)    ((code) & 0xf0)
+#define                BPF_ADD         0x00
+#define                BPF_SUB         0x10
+#define                BPF_MUL         0x20
+#define                BPF_DIV         0x30
+#define                BPF_OR          0x40
+#define                BPF_AND         0x50
+#define                BPF_LSH         0x60
+#define                BPF_RSH         0x70
+#define                BPF_NEG         0x80
+#define                BPF_MOD         0x90
+#define                BPF_XOR         0xa0
+
+#define                BPF_JA          0x00
+#define                BPF_JEQ         0x10
+#define                BPF_JGT         0x20
+#define                BPF_JGE         0x30
+#define                BPF_JSET        0x40
+#define BPF_SRC(code)   ((code) & 0x08)
+#define                BPF_K           0x00
+#define                BPF_X           0x08
+
+#ifndef BPF_MAXINSNS
+#define BPF_MAXINSNS 4096
+#endif
+
+#endif /* __LINUX_BPF_COMMON_H__ */
diff --git a/lib/libdss-include/include/linux/bpqether.h b/lib/libdss-include/include/linux/bpqether.h
new file mode 100644 (file)
index 0000000..a6c35e1
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef        __BPQETHER_H
+#define        __BPQETHER_H
+
+/*
+ *     Defines for the BPQETHER pseudo device driver
+ */
+
+#ifndef __LINUX_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
+
+#define SIOCSBPQETHOPT         (SIOCDEVPRIVATE+0)      /* reserved */
+#define SIOCSBPQETHADDR                (SIOCDEVPRIVATE+1)
+struct bpq_ethaddr {
+       unsigned char destination[ETH_ALEN];
+       unsigned char accept[ETH_ALEN];
+};
+
+/* 
+ * For SIOCSBPQETHOPT - this is compatible with PI2/PacketTwin card drivers,
+ * currently not implemented, though. If someone wants to hook a radio
+ * to his Ethernet card he may find this useful. ;-)
+ */
+
+#define SIOCGBPQETHPARAM       0x5000  /* get Level 1 parameters */
+#define SIOCSBPQETHPARAM       0x5001  /* set */
+
+struct bpq_req  {
+    int cmd;
+    int speed;                 /* unused */
+    int clockmode;             /* unused */
+    int txdelay;
+    unsigned char persist;     /* unused */
+    int slotime;               /* unused */
+    int squeldelay;
+    int dmachan;               /* unused */
+    int irq;                   /* unused */
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/bsg.h b/lib/libdss-include/include/linux/bsg.h
new file mode 100644 (file)
index 0000000..9d35c01
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef BSG_H
+#define BSG_H
+
+#include <linux/types.h>
+
+#define BSG_PROTOCOL_SCSI              0
+
+#define BSG_SUB_PROTOCOL_SCSI_CMD      0
+#define BSG_SUB_PROTOCOL_SCSI_TMF      1
+#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT        2
+
+/*
+ * For flag constants below:
+ * sg.h sg_io_hdr also has bits defined for it's flags member. These
+ * two flag values (0x10 and 0x20) have the same meaning in sg.h . For
+ * bsg the BSG_FLAG_Q_AT_HEAD flag is ignored since it is the deafult.
+ */
+#define BSG_FLAG_Q_AT_TAIL 0x10 /* default is Q_AT_HEAD */
+#define BSG_FLAG_Q_AT_HEAD 0x20
+
+struct sg_io_v4 {
+       __s32 guard;            /* [i] 'Q' to differentiate from v3 */
+       __u32 protocol;         /* [i] 0 -> SCSI , .... */
+       __u32 subprotocol;      /* [i] 0 -> SCSI command, 1 -> SCSI task
+                                  management function, .... */
+
+       __u32 request_len;      /* [i] in bytes */
+       __u64 request;          /* [i], [*i] {SCSI: cdb} */
+       __u64 request_tag;      /* [i] {SCSI: task tag (only if flagged)} */
+       __u32 request_attr;     /* [i] {SCSI: task attribute} */
+       __u32 request_priority; /* [i] {SCSI: task priority} */
+       __u32 request_extra;    /* [i] {spare, for padding} */
+       __u32 max_response_len; /* [i] in bytes */
+       __u64 response;         /* [i], [*o] {SCSI: (auto)sense data} */
+
+        /* "dout_": data out (to device); "din_": data in (from device) */
+       __u32 dout_iovec_count; /* [i] 0 -> "flat" dout transfer else
+                                  dout_xfer points to array of iovec */
+       __u32 dout_xfer_len;    /* [i] bytes to be transferred to device */
+       __u32 din_iovec_count;  /* [i] 0 -> "flat" din transfer */
+       __u32 din_xfer_len;     /* [i] bytes to be transferred from device */
+       __u64 dout_xferp;       /* [i], [*i] */
+       __u64 din_xferp;        /* [i], [*o] */
+
+       __u32 timeout;          /* [i] units: millisecond */
+       __u32 flags;            /* [i] bit mask */
+       __u64 usr_ptr;          /* [i->o] unused internally */
+       __u32 spare_in;         /* [i] */
+
+       __u32 driver_status;    /* [o] 0 -> ok */
+       __u32 transport_status; /* [o] 0 -> ok */
+       __u32 device_status;    /* [o] {SCSI: command completion status} */
+       __u32 retry_delay;      /* [o] {SCSI: status auxiliary information} */
+       __u32 info;             /* [o] additional information */
+       __u32 duration;         /* [o] time to complete, in milliseconds */
+       __u32 response_len;     /* [o] bytes of response actually written */
+       __s32 din_resid;        /* [o] din_xfer_len - actual_din_xfer_len */
+       __s32 dout_resid;       /* [o] dout_xfer_len - actual_dout_xfer_len */
+       __u64 generated_tag;    /* [o] {SCSI: transport generated task tag} */
+       __u32 spare_out;        /* [o] */
+
+       __u32 padding;
+};
+
+
+#endif /* BSG_H */
diff --git a/lib/libdss-include/include/linux/btrfs.h b/lib/libdss-include/include/linux/btrfs.h
new file mode 100644 (file)
index 0000000..02078f1
--- /dev/null
@@ -0,0 +1,663 @@
+/*
+ * Copyright (C) 2007 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License v2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 021110-1307, USA.
+ */
+
+#ifndef _LINUX_BTRFS_H
+#define _LINUX_BTRFS_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define BTRFS_IOCTL_MAGIC 0x94
+#define BTRFS_VOL_NAME_MAX 255
+
+/* this should be 4k */
+#define BTRFS_PATH_NAME_MAX 4087
+struct btrfs_ioctl_vol_args {
+       __s64 fd;
+       char name[BTRFS_PATH_NAME_MAX + 1];
+};
+
+#define BTRFS_DEVICE_PATH_NAME_MAX 1024
+
+#define BTRFS_SUBVOL_CREATE_ASYNC      (1ULL << 0)
+#define BTRFS_SUBVOL_RDONLY            (1ULL << 1)
+#define BTRFS_SUBVOL_QGROUP_INHERIT    (1ULL << 2)
+#define BTRFS_FSID_SIZE 16
+#define BTRFS_UUID_SIZE 16
+#define BTRFS_UUID_UNPARSED_SIZE       37
+
+#define BTRFS_QGROUP_INHERIT_SET_LIMITS        (1ULL << 0)
+
+struct btrfs_qgroup_limit {
+       __u64   flags;
+       __u64   max_rfer;
+       __u64   max_excl;
+       __u64   rsv_rfer;
+       __u64   rsv_excl;
+};
+
+struct btrfs_qgroup_inherit {
+       __u64   flags;
+       __u64   num_qgroups;
+       __u64   num_ref_copies;
+       __u64   num_excl_copies;
+       struct btrfs_qgroup_limit lim;
+       __u64   qgroups[0];
+};
+
+struct btrfs_ioctl_qgroup_limit_args {
+       __u64   qgroupid;
+       struct btrfs_qgroup_limit lim;
+};
+
+#define BTRFS_SUBVOL_NAME_MAX 4039
+struct btrfs_ioctl_vol_args_v2 {
+       __s64 fd;
+       __u64 transid;
+       __u64 flags;
+       union {
+               struct {
+                       __u64 size;
+                       struct btrfs_qgroup_inherit *qgroup_inherit;
+               };
+               __u64 unused[4];
+       };
+       char name[BTRFS_SUBVOL_NAME_MAX + 1];
+};
+
+/*
+ * structure to report errors and progress to userspace, either as a
+ * result of a finished scrub, a canceled scrub or a progress inquiry
+ */
+struct btrfs_scrub_progress {
+       __u64 data_extents_scrubbed;    /* # of data extents scrubbed */
+       __u64 tree_extents_scrubbed;    /* # of tree extents scrubbed */
+       __u64 data_bytes_scrubbed;      /* # of data bytes scrubbed */
+       __u64 tree_bytes_scrubbed;      /* # of tree bytes scrubbed */
+       __u64 read_errors;              /* # of read errors encountered (EIO) */
+       __u64 csum_errors;              /* # of failed csum checks */
+       __u64 verify_errors;            /* # of occurences, where the metadata
+                                        * of a tree block did not match the
+                                        * expected values, like generation or
+                                        * logical */
+       __u64 no_csum;                  /* # of 4k data block for which no csum
+                                        * is present, probably the result of
+                                        * data written with nodatasum */
+       __u64 csum_discards;            /* # of csum for which no data was found
+                                        * in the extent tree. */
+       __u64 super_errors;             /* # of bad super blocks encountered */
+       __u64 malloc_errors;            /* # of internal kmalloc errors. These
+                                        * will likely cause an incomplete
+                                        * scrub */
+       __u64 uncorrectable_errors;     /* # of errors where either no intact
+                                        * copy was found or the writeback
+                                        * failed */
+       __u64 corrected_errors;         /* # of errors corrected */
+       __u64 last_physical;            /* last physical address scrubbed. In
+                                        * case a scrub was aborted, this can
+                                        * be used to restart the scrub */
+       __u64 unverified_errors;        /* # of occurences where a read for a
+                                        * full (64k) bio failed, but the re-
+                                        * check succeeded for each 4k piece.
+                                        * Intermittent error. */
+};
+
+#define BTRFS_SCRUB_READONLY   1
+struct btrfs_ioctl_scrub_args {
+       __u64 devid;                            /* in */
+       __u64 start;                            /* in */
+       __u64 end;                              /* in */
+       __u64 flags;                            /* in */
+       struct btrfs_scrub_progress progress;   /* out */
+       /* pad to 1k */
+       __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS   0
+#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID    1
+struct btrfs_ioctl_dev_replace_start_params {
+       __u64 srcdevid; /* in, if 0, use srcdev_name instead */
+       __u64 cont_reading_from_srcdev_mode;    /* in, see #define
+                                                * above */
+       __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];       /* in */
+       __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];       /* in */
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED    0
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED          1
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED         2
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED         3
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED                4
+struct btrfs_ioctl_dev_replace_status_params {
+       __u64 replace_state;    /* out, see #define above */
+       __u64 progress_1000;    /* out, 0 <= x <= 1000 */
+       __u64 time_started;     /* out, seconds since 1-Jan-1970 */
+       __u64 time_stopped;     /* out, seconds since 1-Jan-1970 */
+       __u64 num_write_errors; /* out */
+       __u64 num_uncorrectable_read_errors;    /* out */
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_START                      0
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS                     1
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL                     2
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR                        0
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED             1
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED         2
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS                3
+struct btrfs_ioctl_dev_replace_args {
+       __u64 cmd;      /* in */
+       __u64 result;   /* out */
+
+       union {
+               struct btrfs_ioctl_dev_replace_start_params start;
+               struct btrfs_ioctl_dev_replace_status_params status;
+       };      /* in/out */
+
+       __u64 spare[64];
+};
+
+struct btrfs_ioctl_dev_info_args {
+       __u64 devid;                            /* in/out */
+       __u8 uuid[BTRFS_UUID_SIZE];             /* in/out */
+       __u64 bytes_used;                       /* out */
+       __u64 total_bytes;                      /* out */
+       __u64 unused[379];                      /* pad to 4k */
+       __u8 path[BTRFS_DEVICE_PATH_NAME_MAX];  /* out */
+};
+
+struct btrfs_ioctl_fs_info_args {
+       __u64 max_id;                           /* out */
+       __u64 num_devices;                      /* out */
+       __u8 fsid[BTRFS_FSID_SIZE];             /* out */
+       __u32 nodesize;                         /* out */
+       __u32 sectorsize;                       /* out */
+       __u32 clone_alignment;                  /* out */
+       __u32 reserved32;
+       __u64 reserved[122];                    /* pad to 1k */
+};
+
+struct btrfs_ioctl_feature_flags {
+       __u64 compat_flags;
+       __u64 compat_ro_flags;
+       __u64 incompat_flags;
+};
+
+/* balance control ioctl modes */
+#define BTRFS_BALANCE_CTL_PAUSE                1
+#define BTRFS_BALANCE_CTL_CANCEL       2
+
+/*
+ * this is packed, because it should be exactly the same as its disk
+ * byte order counterpart (struct btrfs_disk_balance_args)
+ */
+struct btrfs_balance_args {
+       __u64 profiles;
+       union {
+               __le64 usage;
+               struct {
+                       __le32 usage_min;
+                       __le32 usage_max;
+               };
+       };
+       __u64 devid;
+       __u64 pstart;
+       __u64 pend;
+       __u64 vstart;
+       __u64 vend;
+
+       __u64 target;
+
+       __u64 flags;
+
+       /*
+        * BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
+        * BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
+        * and maximum
+        */
+       union {
+               __u64 limit;            /* limit number of processed chunks */
+               struct {
+                       __u32 limit_min;
+                       __u32 limit_max;
+               };
+       };
+
+       /*
+        * Process chunks that cross stripes_min..stripes_max devices,
+        * BTRFS_BALANCE_ARGS_STRIPES_RANGE
+        */
+       __le32 stripes_min;
+       __le32 stripes_max;
+
+       __u64 unused[6];
+} __attribute__ ((__packed__));
+
+/* report balance progress to userspace */
+struct btrfs_balance_progress {
+       __u64 expected;         /* estimated # of chunks that will be
+                                * relocated to fulfill the request */
+       __u64 considered;       /* # of chunks we have considered so far */
+       __u64 completed;        /* # of chunks relocated so far */
+};
+
+#define BTRFS_BALANCE_STATE_RUNNING    (1ULL << 0)
+#define BTRFS_BALANCE_STATE_PAUSE_REQ  (1ULL << 1)
+#define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
+
+struct btrfs_ioctl_balance_args {
+       __u64 flags;                            /* in/out */
+       __u64 state;                            /* out */
+
+       struct btrfs_balance_args data;         /* in/out */
+       struct btrfs_balance_args meta;         /* in/out */
+       struct btrfs_balance_args sys;          /* in/out */
+
+       struct btrfs_balance_progress stat;     /* out */
+
+       __u64 unused[72];                       /* pad to 1k */
+};
+
+#define BTRFS_INO_LOOKUP_PATH_MAX 4080
+struct btrfs_ioctl_ino_lookup_args {
+       __u64 treeid;
+       __u64 objectid;
+       char name[BTRFS_INO_LOOKUP_PATH_MAX];
+};
+
+struct btrfs_ioctl_search_key {
+       /* which root are we searching.  0 is the tree of tree roots */
+       __u64 tree_id;
+
+       /* keys returned will be >= min and <= max */
+       __u64 min_objectid;
+       __u64 max_objectid;
+
+       /* keys returned will be >= min and <= max */
+       __u64 min_offset;
+       __u64 max_offset;
+
+       /* max and min transids to search for */
+       __u64 min_transid;
+       __u64 max_transid;
+
+       /* keys returned will be >= min and <= max */
+       __u32 min_type;
+       __u32 max_type;
+
+       /*
+        * how many items did userland ask for, and how many are we
+        * returning
+        */
+       __u32 nr_items;
+
+       /* align to 64 bits */
+       __u32 unused;
+
+       /* some extra for later */
+       __u64 unused1;
+       __u64 unused2;
+       __u64 unused3;
+       __u64 unused4;
+};
+
+struct btrfs_ioctl_search_header {
+       __u64 transid;
+       __u64 objectid;
+       __u64 offset;
+       __u32 type;
+       __u32 len;
+};
+
+#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
+/*
+ * the buf is an array of search headers where
+ * each header is followed by the actual item
+ * the type field is expanded to 32 bits for alignment
+ */
+struct btrfs_ioctl_search_args {
+       struct btrfs_ioctl_search_key key;
+       char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
+};
+
+struct btrfs_ioctl_search_args_v2 {
+       struct btrfs_ioctl_search_key key; /* in/out - search parameters */
+       __u64 buf_size;            /* in - size of buffer
+                                           * out - on EOVERFLOW: needed size
+                                           *       to store item */
+       __u64 buf[0];                       /* out - found items */
+};
+
+struct btrfs_ioctl_clone_range_args {
+  __s64 src_fd;
+  __u64 src_offset, src_length;
+  __u64 dest_offset;
+};
+
+/* flags for the defrag range ioctl */
+#define BTRFS_DEFRAG_RANGE_COMPRESS 1
+#define BTRFS_DEFRAG_RANGE_START_IO 2
+
+#define BTRFS_SAME_DATA_DIFFERS        1
+/* For extent-same ioctl */
+struct btrfs_ioctl_same_extent_info {
+       __s64 fd;               /* in - destination file */
+       __u64 logical_offset;   /* in - start of extent in destination */
+       __u64 bytes_deduped;    /* out - total # of bytes we were able
+                                * to dedupe from this file */
+       /* status of this dedupe operation:
+        * 0 if dedup succeeds
+        * < 0 for error
+        * == BTRFS_SAME_DATA_DIFFERS if data differs
+        */
+       __s32 status;           /* out - see above description */
+       __u32 reserved;
+};
+
+struct btrfs_ioctl_same_args {
+       __u64 logical_offset;   /* in - start of extent in source */
+       __u64 length;           /* in - length of extent */
+       __u16 dest_count;       /* in - total elements in info array */
+       __u16 reserved1;
+       __u32 reserved2;
+       struct btrfs_ioctl_same_extent_info info[0];
+};
+
+struct btrfs_ioctl_space_info {
+       __u64 flags;
+       __u64 total_bytes;
+       __u64 used_bytes;
+};
+
+struct btrfs_ioctl_space_args {
+       __u64 space_slots;
+       __u64 total_spaces;
+       struct btrfs_ioctl_space_info spaces[0];
+};
+
+struct btrfs_data_container {
+       __u32   bytes_left;     /* out -- bytes not needed to deliver output */
+       __u32   bytes_missing;  /* out -- additional bytes needed for result */
+       __u32   elem_cnt;       /* out */
+       __u32   elem_missed;    /* out */
+       __u64   val[0];         /* out */
+};
+
+struct btrfs_ioctl_ino_path_args {
+       __u64                           inum;           /* in */
+       __u64                           size;           /* in */
+       __u64                           reserved[4];
+       /* struct btrfs_data_container  *fspath;           out */
+       __u64                           fspath;         /* out */
+};
+
+struct btrfs_ioctl_logical_ino_args {
+       __u64                           logical;        /* in */
+       __u64                           size;           /* in */
+       __u64                           reserved[4];
+       /* struct btrfs_data_container  *inodes;        out   */
+       __u64                           inodes;
+};
+
+enum btrfs_dev_stat_values {
+       /* disk I/O failure stats */
+       BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
+       BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
+       BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
+
+       /* stats for indirect indications for I/O failures */
+       BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
+                                        * contents is illegal: this is an
+                                        * indication that the block was damaged
+                                        * during read or write, or written to
+                                        * wrong location or read from wrong
+                                        * location */
+       BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
+                                        * been written */
+
+       BTRFS_DEV_STAT_VALUES_MAX
+};
+
+/* Reset statistics after reading; needs SYS_ADMIN capability */
+#define        BTRFS_DEV_STATS_RESET           (1ULL << 0)
+
+struct btrfs_ioctl_get_dev_stats {
+       __u64 devid;                            /* in */
+       __u64 nr_items;                         /* in/out */
+       __u64 flags;                            /* in/out */
+
+       /* out values: */
+       __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
+
+       __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
+};
+
+#define BTRFS_QUOTA_CTL_ENABLE 1
+#define BTRFS_QUOTA_CTL_DISABLE        2
+#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED        3
+struct btrfs_ioctl_quota_ctl_args {
+       __u64 cmd;
+       __u64 status;
+};
+
+struct btrfs_ioctl_quota_rescan_args {
+       __u64   flags;
+       __u64   progress;
+       __u64   reserved[6];
+};
+
+struct btrfs_ioctl_qgroup_assign_args {
+       __u64 assign;
+       __u64 src;
+       __u64 dst;
+};
+
+struct btrfs_ioctl_qgroup_create_args {
+       __u64 create;
+       __u64 qgroupid;
+};
+struct btrfs_ioctl_timespec {
+       __u64 sec;
+       __u32 nsec;
+};
+
+struct btrfs_ioctl_received_subvol_args {
+       char    uuid[BTRFS_UUID_SIZE];  /* in */
+       __u64   stransid;               /* in */
+       __u64   rtransid;               /* out */
+       struct btrfs_ioctl_timespec stime; /* in */
+       struct btrfs_ioctl_timespec rtime; /* out */
+       __u64   flags;                  /* in */
+       __u64   reserved[16];           /* in */
+};
+
+/*
+ * Caller doesn't want file data in the send stream, even if the
+ * search of clone sources doesn't find an extent. UPDATE_EXTENT
+ * commands will be sent instead of WRITE commands.
+ */
+#define BTRFS_SEND_FLAG_NO_FILE_DATA           0x1
+
+/*
+ * Do not add the leading stream header. Used when multiple snapshots
+ * are sent back to back.
+ */
+#define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER     0x2
+
+/*
+ * Omit the command at the end of the stream that indicated the end
+ * of the stream. This option is used when multiple snapshots are
+ * sent back to back.
+ */
+#define BTRFS_SEND_FLAG_OMIT_END_CMD           0x4
+
+#define BTRFS_SEND_FLAG_MASK \
+       (BTRFS_SEND_FLAG_NO_FILE_DATA | \
+        BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
+        BTRFS_SEND_FLAG_OMIT_END_CMD)
+
+struct btrfs_ioctl_send_args {
+       __s64 send_fd;                  /* in */
+       __u64 clone_sources_count;      /* in */
+       __u64 *clone_sources;   /* in */
+       __u64 parent_root;              /* in */
+       __u64 flags;                    /* in */
+       __u64 reserved[4];              /* in */
+};
+
+/* Error codes as returned by the kernel */
+enum btrfs_err_code {
+       BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
+       BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_TGT_REPLACE,
+       BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
+       BTRFS_ERROR_DEV_ONLY_WRITABLE,
+       BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS
+};
+/* An error code to error string mapping for the kernel
+*  error codes
+*/
+static __inline__ char *btrfs_err_str(enum btrfs_err_code err_code)
+{
+       switch (err_code) {
+               case BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET:
+                       return "unable to go below two devices on raid1";
+               case BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET:
+                       return "unable to go below four devices on raid10";
+               case BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET:
+                       return "unable to go below two devices on raid5";
+               case BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET:
+                       return "unable to go below three devices on raid6";
+               case BTRFS_ERROR_DEV_TGT_REPLACE:
+                       return "unable to remove the dev_replace target dev";
+               case BTRFS_ERROR_DEV_MISSING_NOT_FOUND:
+                       return "no missing devices found to remove";
+               case BTRFS_ERROR_DEV_ONLY_WRITABLE:
+                       return "unable to remove the only writeable device";
+               case BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS:
+                       return "add/delete/balance/replace/resize operation "\
+                               "in progress";
+               default:
+                       return NULL;
+       }
+}
+
+#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
+                                  struct btrfs_ioctl_vol_args)
+/* trans start and trans end are dangerous, and only for
+ * use by applications that know how to avoid the
+ * resulting deadlocks
+ */
+#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
+#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
+#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
+
+#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
+#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
+                                  struct btrfs_ioctl_vol_args)
+
+#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
+                                 struct btrfs_ioctl_clone_range_args)
+
+#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
+                               struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
+                               struct btrfs_ioctl_defrag_range_args)
+#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
+                                  struct btrfs_ioctl_search_args)
+#define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
+                                          struct btrfs_ioctl_search_args_v2)
+#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
+                                  struct btrfs_ioctl_ino_lookup_args)
+#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
+#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
+                                   struct btrfs_ioctl_space_args)
+#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
+#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
+#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
+                                  struct btrfs_ioctl_vol_args_v2)
+#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
+                                  struct btrfs_ioctl_vol_args_v2)
+#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
+#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
+#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
+                             struct btrfs_ioctl_scrub_args)
+#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
+#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
+                                      struct btrfs_ioctl_scrub_args)
+#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
+                                struct btrfs_ioctl_dev_info_args)
+#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
+                              struct btrfs_ioctl_fs_info_args)
+#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
+                                  struct btrfs_ioctl_balance_args)
+#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
+#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
+                                       struct btrfs_ioctl_balance_args)
+#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
+                                       struct btrfs_ioctl_ino_path_args)
+#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
+                                       struct btrfs_ioctl_ino_path_args)
+#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
+                               struct btrfs_ioctl_received_subvol_args)
+#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
+#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
+                                    struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
+                              struct btrfs_ioctl_quota_ctl_args)
+#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
+                              struct btrfs_ioctl_qgroup_assign_args)
+#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
+                              struct btrfs_ioctl_qgroup_create_args)
+#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
+                              struct btrfs_ioctl_qgroup_limit_args)
+#define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
+                              struct btrfs_ioctl_quota_rescan_args)
+#define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
+                              struct btrfs_ioctl_quota_rescan_args)
+#define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
+#define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
+                                  char[BTRFS_LABEL_SIZE])
+#define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \
+                                  char[BTRFS_LABEL_SIZE])
+#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
+                                     struct btrfs_ioctl_get_dev_stats)
+#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
+                                   struct btrfs_ioctl_dev_replace_args)
+#define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
+                                        struct btrfs_ioctl_same_args)
+#define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags)
+#define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags[2])
+#define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags[3])
+
+#endif /* _LINUX_BTRFS_H */
diff --git a/lib/libdss-include/include/linux/byteorder/big_endian.h b/lib/libdss-include/include/linux/byteorder/big_endian.h
new file mode 100644 (file)
index 0000000..a4ef98d
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef _LINUX_BYTEORDER_BIG_ENDIAN_H
+#define _LINUX_BYTEORDER_BIG_ENDIAN_H
+
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN 4321
+#endif
+#ifndef __BIG_ENDIAN_BITFIELD
+#define __BIG_ENDIAN_BITFIELD
+#endif
+
+#include <linux/types.h>
+#include <linux/swab.h>
+
+#define __constant_htonl(x) ((__be32)(__u32)(x))
+#define __constant_ntohl(x) ((__u32)(__be32)(x))
+#define __constant_htons(x) ((__be16)(__u16)(x))
+#define __constant_ntohs(x) ((__u16)(__be16)(x))
+#define __constant_cpu_to_le64(x) ((__le64)___constant_swab64((x)))
+#define __constant_le64_to_cpu(x) ___constant_swab64((__u64)(__le64)(x))
+#define __constant_cpu_to_le32(x) ((__le32)___constant_swab32((x)))
+#define __constant_le32_to_cpu(x) ___constant_swab32((__u32)(__le32)(x))
+#define __constant_cpu_to_le16(x) ((__le16)___constant_swab16((x)))
+#define __constant_le16_to_cpu(x) ___constant_swab16((__u16)(__le16)(x))
+#define __constant_cpu_to_be64(x) ((__be64)(__u64)(x))
+#define __constant_be64_to_cpu(x) ((__u64)(__be64)(x))
+#define __constant_cpu_to_be32(x) ((__be32)(__u32)(x))
+#define __constant_be32_to_cpu(x) ((__u32)(__be32)(x))
+#define __constant_cpu_to_be16(x) ((__be16)(__u16)(x))
+#define __constant_be16_to_cpu(x) ((__u16)(__be16)(x))
+#define __cpu_to_le64(x) ((__le64)__swab64((x)))
+#define __le64_to_cpu(x) __swab64((__u64)(__le64)(x))
+#define __cpu_to_le32(x) ((__le32)__swab32((x)))
+#define __le32_to_cpu(x) __swab32((__u32)(__le32)(x))
+#define __cpu_to_le16(x) ((__le16)__swab16((x)))
+#define __le16_to_cpu(x) __swab16((__u16)(__le16)(x))
+#define __cpu_to_be64(x) ((__be64)(__u64)(x))
+#define __be64_to_cpu(x) ((__u64)(__be64)(x))
+#define __cpu_to_be32(x) ((__be32)(__u32)(x))
+#define __be32_to_cpu(x) ((__u32)(__be32)(x))
+#define __cpu_to_be16(x) ((__be16)(__u16)(x))
+#define __be16_to_cpu(x) ((__u16)(__be16)(x))
+
+static __inline__ __le64 __cpu_to_le64p(const __u64 *p)
+{
+       return (__le64)__swab64p(p);
+}
+static __inline__ __u64 __le64_to_cpup(const __le64 *p)
+{
+       return __swab64p((__u64 *)p);
+}
+static __inline__ __le32 __cpu_to_le32p(const __u32 *p)
+{
+       return (__le32)__swab32p(p);
+}
+static __inline__ __u32 __le32_to_cpup(const __le32 *p)
+{
+       return __swab32p((__u32 *)p);
+}
+static __inline__ __le16 __cpu_to_le16p(const __u16 *p)
+{
+       return (__le16)__swab16p(p);
+}
+static __inline__ __u16 __le16_to_cpup(const __le16 *p)
+{
+       return __swab16p((__u16 *)p);
+}
+static __inline__ __be64 __cpu_to_be64p(const __u64 *p)
+{
+       return (__be64)*p;
+}
+static __inline__ __u64 __be64_to_cpup(const __be64 *p)
+{
+       return (__u64)*p;
+}
+static __inline__ __be32 __cpu_to_be32p(const __u32 *p)
+{
+       return (__be32)*p;
+}
+static __inline__ __u32 __be32_to_cpup(const __be32 *p)
+{
+       return (__u32)*p;
+}
+static __inline__ __be16 __cpu_to_be16p(const __u16 *p)
+{
+       return (__be16)*p;
+}
+static __inline__ __u16 __be16_to_cpup(const __be16 *p)
+{
+       return (__u16)*p;
+}
+#define __cpu_to_le64s(x) __swab64s((x))
+#define __le64_to_cpus(x) __swab64s((x))
+#define __cpu_to_le32s(x) __swab32s((x))
+#define __le32_to_cpus(x) __swab32s((x))
+#define __cpu_to_le16s(x) __swab16s((x))
+#define __le16_to_cpus(x) __swab16s((x))
+#define __cpu_to_be64s(x) do { (void)(x); } while (0)
+#define __be64_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be32s(x) do { (void)(x); } while (0)
+#define __be32_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be16s(x) do { (void)(x); } while (0)
+#define __be16_to_cpus(x) do { (void)(x); } while (0)
+
+
+#endif /* _LINUX_BYTEORDER_BIG_ENDIAN_H */
diff --git a/lib/libdss-include/include/linux/byteorder/little_endian.h b/lib/libdss-include/include/linux/byteorder/little_endian.h
new file mode 100644 (file)
index 0000000..74e8a15
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef _LINUX_BYTEORDER_LITTLE_ENDIAN_H
+#define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
+
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN 1234
+#endif
+#ifndef __LITTLE_ENDIAN_BITFIELD
+#define __LITTLE_ENDIAN_BITFIELD
+#endif
+
+#include <linux/types.h>
+#include <linux/swab.h>
+
+#define __constant_htonl(x) ((__be32)___constant_swab32((x)))
+#define __constant_ntohl(x) ___constant_swab32((__be32)(x))
+#define __constant_htons(x) ((__be16)___constant_swab16((x)))
+#define __constant_ntohs(x) ___constant_swab16((__be16)(x))
+#define __constant_cpu_to_le64(x) ((__le64)(__u64)(x))
+#define __constant_le64_to_cpu(x) ((__u64)(__le64)(x))
+#define __constant_cpu_to_le32(x) ((__le32)(__u32)(x))
+#define __constant_le32_to_cpu(x) ((__u32)(__le32)(x))
+#define __constant_cpu_to_le16(x) ((__le16)(__u16)(x))
+#define __constant_le16_to_cpu(x) ((__u16)(__le16)(x))
+#define __constant_cpu_to_be64(x) ((__be64)___constant_swab64((x)))
+#define __constant_be64_to_cpu(x) ___constant_swab64((__u64)(__be64)(x))
+#define __constant_cpu_to_be32(x) ((__be32)___constant_swab32((x)))
+#define __constant_be32_to_cpu(x) ___constant_swab32((__u32)(__be32)(x))
+#define __constant_cpu_to_be16(x) ((__be16)___constant_swab16((x)))
+#define __constant_be16_to_cpu(x) ___constant_swab16((__u16)(__be16)(x))
+#define __cpu_to_le64(x) ((__le64)(__u64)(x))
+#define __le64_to_cpu(x) ((__u64)(__le64)(x))
+#define __cpu_to_le32(x) ((__le32)(__u32)(x))
+#define __le32_to_cpu(x) ((__u32)(__le32)(x))
+#define __cpu_to_le16(x) ((__le16)(__u16)(x))
+#define __le16_to_cpu(x) ((__u16)(__le16)(x))
+#define __cpu_to_be64(x) ((__be64)__swab64((x)))
+#define __be64_to_cpu(x) __swab64((__u64)(__be64)(x))
+#define __cpu_to_be32(x) ((__be32)__swab32((x)))
+#define __be32_to_cpu(x) __swab32((__u32)(__be32)(x))
+#define __cpu_to_be16(x) ((__be16)__swab16((x)))
+#define __be16_to_cpu(x) __swab16((__u16)(__be16)(x))
+
+static __inline__ __le64 __cpu_to_le64p(const __u64 *p)
+{
+       return (__le64)*p;
+}
+static __inline__ __u64 __le64_to_cpup(const __le64 *p)
+{
+       return (__u64)*p;
+}
+static __inline__ __le32 __cpu_to_le32p(const __u32 *p)
+{
+       return (__le32)*p;
+}
+static __inline__ __u32 __le32_to_cpup(const __le32 *p)
+{
+       return (__u32)*p;
+}
+static __inline__ __le16 __cpu_to_le16p(const __u16 *p)
+{
+       return (__le16)*p;
+}
+static __inline__ __u16 __le16_to_cpup(const __le16 *p)
+{
+       return (__u16)*p;
+}
+static __inline__ __be64 __cpu_to_be64p(const __u64 *p)
+{
+       return (__be64)__swab64p(p);
+}
+static __inline__ __u64 __be64_to_cpup(const __be64 *p)
+{
+       return __swab64p((__u64 *)p);
+}
+static __inline__ __be32 __cpu_to_be32p(const __u32 *p)
+{
+       return (__be32)__swab32p(p);
+}
+static __inline__ __u32 __be32_to_cpup(const __be32 *p)
+{
+       return __swab32p((__u32 *)p);
+}
+static __inline__ __be16 __cpu_to_be16p(const __u16 *p)
+{
+       return (__be16)__swab16p(p);
+}
+static __inline__ __u16 __be16_to_cpup(const __be16 *p)
+{
+       return __swab16p((__u16 *)p);
+}
+#define __cpu_to_le64s(x) do { (void)(x); } while (0)
+#define __le64_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_le32s(x) do { (void)(x); } while (0)
+#define __le32_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_le16s(x) do { (void)(x); } while (0)
+#define __le16_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be64s(x) __swab64s((x))
+#define __be64_to_cpus(x) __swab64s((x))
+#define __cpu_to_be32s(x) __swab32s((x))
+#define __be32_to_cpus(x) __swab32s((x))
+#define __cpu_to_be16s(x) __swab16s((x))
+#define __be16_to_cpus(x) __swab16s((x))
+
+
+#endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */
diff --git a/lib/libdss-include/include/linux/caif/caif_socket.h b/lib/libdss-include/include/linux/caif/caif_socket.h
new file mode 100644 (file)
index 0000000..586e9f9
--- /dev/null
@@ -0,0 +1,194 @@
+/* linux/caif_socket.h
+ * CAIF Definitions for CAIF socket and network layer
+ * Copyright (C) ST-Ericsson AB 2010
+ * Author:      Sjur Brendeland
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#ifndef _LINUX_CAIF_SOCKET_H
+#define _LINUX_CAIF_SOCKET_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/**
+ * enum caif_link_selector -    Physical Link Selection.
+ * @CAIF_LINK_HIGH_BANDW:      Physical interface for high-bandwidth
+ *                             traffic.
+ * @CAIF_LINK_LOW_LATENCY:     Physical interface for low-latency
+ *                             traffic.
+ *
+ * CAIF Link Layers can register their link properties.
+ * This enum is used for choosing between CAIF Link Layers when
+ * setting up CAIF Channels when multiple CAIF Link Layers exists.
+ */
+enum caif_link_selector {
+       CAIF_LINK_HIGH_BANDW,
+       CAIF_LINK_LOW_LATENCY
+};
+
+/**
+ * enum caif_channel_priority - CAIF channel priorities.
+ *
+ * @CAIF_PRIO_MIN:     Min priority for a channel.
+ * @CAIF_PRIO_LOW:     Low-priority channel.
+ * @CAIF_PRIO_NORMAL:  Normal/default priority level.
+ * @CAIF_PRIO_HIGH:    High priority level
+ * @CAIF_PRIO_MAX:     Max priority for channel
+ *
+ * Priority can be set on CAIF Channels in order to
+ * prioritize between traffic on different CAIF Channels.
+ * These priority levels are recommended, but the priority value
+ * is not restricted to the values defined in this enum, any value
+ * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used.
+ */
+enum caif_channel_priority {
+       CAIF_PRIO_MIN    = 0x01,
+       CAIF_PRIO_LOW    = 0x04,
+       CAIF_PRIO_NORMAL = 0x0f,
+       CAIF_PRIO_HIGH   = 0x14,
+       CAIF_PRIO_MAX    = 0x1F
+};
+
+/**
+ * enum caif_protocol_type  -  CAIF Channel type.
+ * @CAIFPROTO_AT:              Classic AT channel.
+ * @CAIFPROTO_DATAGRAM:        Datagram channel.
+ * @CAIFPROTO_DATAGRAM_LOOP:   Datagram loopback channel, used for testing.
+ * @CAIFPROTO_UTIL:            Utility (Psock) channel.
+ * @CAIFPROTO_RFM:             Remote File Manager
+ * @CAIFPROTO_DEBUG:           Debug link
+ *
+ * This enum defines the CAIF Channel type to be used. This defines
+ * the service to connect to on the modem.
+ */
+enum caif_protocol_type {
+       CAIFPROTO_AT,
+       CAIFPROTO_DATAGRAM,
+       CAIFPROTO_DATAGRAM_LOOP,
+       CAIFPROTO_UTIL,
+       CAIFPROTO_RFM,
+       CAIFPROTO_DEBUG,
+       _CAIFPROTO_MAX
+};
+#define        CAIFPROTO_MAX _CAIFPROTO_MAX
+
+/**
+ * enum caif_at_type - AT Service Endpoint
+ * @CAIF_ATTYPE_PLAIN:      Connects to a plain vanilla AT channel.
+ */
+enum caif_at_type {
+       CAIF_ATTYPE_PLAIN = 2
+};
+ /**
+ * enum caif_debug_type - Content selection for debug connection
+ * @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain
+ *                             both trace and interactive debug.
+ * @CAIF_DEBUG_TRACE:          Connection contains trace only.
+ * @CAIF_DEBUG_INTERACTIVE:    Connection to interactive debug.
+ */
+enum caif_debug_type {
+       CAIF_DEBUG_TRACE_INTERACTIVE = 0,
+       CAIF_DEBUG_TRACE,
+       CAIF_DEBUG_INTERACTIVE,
+};
+
+/**
+ * enum caif_debug_service - Debug Service Endpoint
+ * @CAIF_RADIO_DEBUG_SERVICE:  Debug service on the Radio sub-system
+ * @CAIF_APP_DEBUG_SERVICE:    Debug for the applications sub-system
+ */
+enum caif_debug_service {
+       CAIF_RADIO_DEBUG_SERVICE = 1,
+       CAIF_APP_DEBUG_SERVICE
+};
+
+/**
+ * struct sockaddr_caif - the sockaddr structure for CAIF sockets.
+ * @family:                 Address family number, must be AF_CAIF.
+ * @u:                      Union of address data 'switched' by family.
+ * :
+ * @u.at:                    Applies when family = CAIFPROTO_AT.
+ *
+ * @u.at.type:               Type of AT link to set up (enum caif_at_type).
+ *
+ * @u.util:                  Applies when family = CAIFPROTO_UTIL
+ *
+ * @u.util.service:          Utility service name.
+ *
+ * @u.dgm:                   Applies when family = CAIFPROTO_DATAGRAM
+ *
+ * @u.dgm.connection_id:     Datagram connection id.
+ *
+ * @u.dgm.nsapi:             NSAPI of the PDP-Context.
+ *
+ * @u.rfm:                   Applies when family = CAIFPROTO_RFM
+ *
+ * @u.rfm.connection_id:     Connection ID for RFM.
+ *
+ * @u.rfm.volume:            Volume to mount.
+ *
+ * @u.dbg:                   Applies when family = CAIFPROTO_DEBUG.
+ *
+ * @u.dbg.type:                             Type of debug connection to set up
+ *                           (caif_debug_type).
+ *
+ * @u.dbg.service:           Service sub-system to connect (caif_debug_service
+ * Description:
+ * This structure holds the connect parameters used for setting up a
+ * CAIF Channel. It defines the service to connect to on the modem.
+ */
+struct sockaddr_caif {
+       __kernel_sa_family_t  family;
+       union {
+               struct {
+                       __u8  type;             /* type: enum caif_at_type */
+               } at;                           /* CAIFPROTO_AT */
+               struct {
+                       char      service[16];
+               } util;                         /* CAIFPROTO_UTIL */
+               union {
+                       __u32 connection_id;
+                       __u8  nsapi;
+               } dgm;                          /* CAIFPROTO_DATAGRAM(_LOOP)*/
+               struct {
+                       __u32 connection_id;
+                       char      volume[16];
+               } rfm;                          /* CAIFPROTO_RFM */
+               struct {
+                       __u8  type;             /* type:enum caif_debug_type */
+                       __u8  service;          /* service:caif_debug_service */
+               } dbg;                          /* CAIFPROTO_DEBUG */
+       } u;
+};
+
+/**
+ * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt.
+ *
+ * @CAIFSO_LINK_SELECT:                Selector used if multiple CAIF Link layers are
+ *                             available. Either a high bandwidth
+ *                             link can be selected (CAIF_LINK_HIGH_BANDW) or
+ *                             or a low latency link (CAIF_LINK_LOW_LATENCY).
+ *                              This option is of type __u32.
+ *                             Alternatively SO_BINDTODEVICE can be used.
+ *
+ * @CAIFSO_REQ_PARAM:          Used to set the request parameters for a
+ *                             utility channel. (maximum 256 bytes). This
+ *                             option must be set before connecting.
+ *
+ * @CAIFSO_RSP_PARAM:          Gets the response parameters for a utility
+ *                             channel. (maximum 256 bytes). This option
+ *                             is valid after a successful connect.
+ *
+ *
+ * This enum defines the CAIF Socket options to be used on a socket
+ * of type PF_CAIF.
+ *
+ */
+enum caif_socket_opts {
+       CAIFSO_LINK_SELECT      = 127,
+       CAIFSO_REQ_PARAM        = 128,
+       CAIFSO_RSP_PARAM        = 129,
+};
+
+#endif /* _LINUX_CAIF_SOCKET_H */
diff --git a/lib/libdss-include/include/linux/caif/if_caif.h b/lib/libdss-include/include/linux/caif/if_caif.h
new file mode 100644 (file)
index 0000000..7618aab
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) ST-Ericsson AB 2010
+ * Author:     Sjur Brendeland
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#ifndef IF_CAIF_H_
+#define IF_CAIF_H_
+#include <linux/sockios.h>
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/**
+ * enum ifla_caif - CAIF NetlinkRT parameters.
+ * @IFLA_CAIF_IPV4_CONNID:  Connection ID for IPv4 PDP Context.
+ *                         The type of attribute is NLA_U32.
+ * @IFLA_CAIF_IPV6_CONNID:  Connection ID for IPv6 PDP Context.
+ *                         The type of attribute is NLA_U32.
+ * @IFLA_CAIF_LOOPBACK:            If different from zero, device is doing loopback
+ *                         The type of attribute is NLA_U8.
+ *
+ * When using RT Netlink to create, destroy or configure a CAIF IP interface,
+ * enum ifla_caif is used to specify the configuration attributes.
+ */
+enum ifla_caif {
+       __IFLA_CAIF_UNSPEC,
+       IFLA_CAIF_IPV4_CONNID,
+       IFLA_CAIF_IPV6_CONNID,
+       IFLA_CAIF_LOOPBACK,
+       __IFLA_CAIF_MAX
+};
+#define        IFLA_CAIF_MAX (__IFLA_CAIF_MAX-1)
+
+#endif /*IF_CAIF_H_*/
diff --git a/lib/libdss-include/include/linux/can.h b/lib/libdss-include/include/linux/can.h
new file mode 100644 (file)
index 0000000..4af39b0
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * linux/can.h
+ *
+ * Definitions for CAN network layer (socket addr / CAN frame / CAN filter)
+ *
+ * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ *          Urs Thuermann   <urs.thuermann@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_H
+#define _CAN_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* controller area network (CAN) kernel definitions */
+
+/* special address description flags for the CAN_ID */
+#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
+#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
+#define CAN_ERR_FLAG 0x20000000U /* error message frame */
+
+/* valid bits in CAN ID for frame formats */
+#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
+#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
+#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
+
+/*
+ * Controller Area Network Identifier structure
+ *
+ * bit 0-28    : CAN identifier (11/29 bit)
+ * bit 29      : error message frame flag (0 = data frame, 1 = error message)
+ * bit 30      : remote transmission request flag (1 = rtr frame)
+ * bit 31      : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
+ */
+typedef __u32 canid_t;
+
+#define CAN_SFF_ID_BITS                11
+#define CAN_EFF_ID_BITS                29
+
+/*
+ * Controller Area Network Error Message Frame Mask structure
+ *
+ * bit 0-28    : error class mask (see include/linux/can/error.h)
+ * bit 29-31   : set to zero
+ */
+typedef __u32 can_err_mask_t;
+
+/* CAN payload length and DLC definitions according to ISO 11898-1 */
+#define CAN_MAX_DLC 8
+#define CAN_MAX_DLEN 8
+
+/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
+#define CANFD_MAX_DLC 15
+#define CANFD_MAX_DLEN 64
+
+/**
+ * struct can_frame - basic CAN frame structure
+ * @can_id:  CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
+ * @can_dlc: frame payload length in byte (0 .. 8) aka data length code
+ *           N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
+ *           mapping of the 'data length code' to the real payload length
+ * @__pad:   padding
+ * @__res0:  reserved / padding
+ * @__res1:  reserved / padding
+ * @data:    CAN frame payload (up to 8 byte)
+ */
+struct can_frame {
+       canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
+       __u8    can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
+       __u8    __pad;   /* padding */
+       __u8    __res0;  /* reserved / padding */
+       __u8    __res1;  /* reserved / padding */
+       __u8    data[CAN_MAX_DLEN] __attribute__((aligned(8)));
+};
+
+/*
+ * defined bits for canfd_frame.flags
+ *
+ * The use of struct canfd_frame implies the Extended Data Length (EDL) bit to
+ * be set in the CAN frame bitstream on the wire. The EDL bit switch turns
+ * the CAN controllers bitstream processor into the CAN FD mode which creates
+ * two new options within the CAN FD frame specification:
+ *
+ * Bit Rate Switch - to indicate a second bitrate is/was used for the payload
+ * Error State Indicator - represents the error state of the transmitting node
+ *
+ * As the CANFD_ESI bit is internally generated by the transmitting CAN
+ * controller only the CANFD_BRS bit is relevant for real CAN controllers when
+ * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make
+ * sense for virtual CAN interfaces to test applications with echoed frames.
+ */
+#define CANFD_BRS 0x01 /* bit rate switch (second bitrate for payload data) */
+#define CANFD_ESI 0x02 /* error state indicator of the transmitting node */
+
+/**
+ * struct canfd_frame - CAN flexible data rate frame structure
+ * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
+ * @len:    frame payload length in byte (0 .. CANFD_MAX_DLEN)
+ * @flags:  additional flags for CAN FD
+ * @__res0: reserved / padding
+ * @__res1: reserved / padding
+ * @data:   CAN FD frame payload (up to CANFD_MAX_DLEN byte)
+ */
+struct canfd_frame {
+       canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
+       __u8    len;     /* frame payload length in byte */
+       __u8    flags;   /* additional flags for CAN FD */
+       __u8    __res0;  /* reserved / padding */
+       __u8    __res1;  /* reserved / padding */
+       __u8    data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
+};
+
+#define CAN_MTU                (sizeof(struct can_frame))
+#define CANFD_MTU      (sizeof(struct canfd_frame))
+
+/* particular protocols of the protocol family PF_CAN */
+#define CAN_RAW                1 /* RAW sockets */
+#define CAN_BCM                2 /* Broadcast Manager */
+#define CAN_TP16       3 /* VAG Transport Protocol v1.6 */
+#define CAN_TP20       4 /* VAG Transport Protocol v2.0 */
+#define CAN_MCNET      5 /* Bosch MCNet */
+#define CAN_ISOTP      6 /* ISO 15765-2 Transport Protocol */
+#define CAN_NPROTO     7
+
+#define SOL_CAN_BASE 100
+
+/**
+ * struct sockaddr_can - the sockaddr structure for CAN sockets
+ * @can_family:  address family number AF_CAN.
+ * @can_ifindex: CAN network interface index.
+ * @can_addr:    protocol specific address information
+ */
+struct sockaddr_can {
+       __kernel_sa_family_t can_family;
+       int         can_ifindex;
+       union {
+               /* transport protocol class address information (e.g. ISOTP) */
+               struct { canid_t rx_id, tx_id; } tp;
+
+               /* reserved for future CAN protocols address information */
+       } can_addr;
+};
+
+/**
+ * struct can_filter - CAN ID based filter in can_register().
+ * @can_id:   relevant bits of CAN ID which are not masked out.
+ * @can_mask: CAN mask (see description)
+ *
+ * Description:
+ * A filter matches, when
+ *
+ *          <received_can_id> & mask == can_id & mask
+ *
+ * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
+ * filter for error message frames (CAN_ERR_FLAG bit set in mask).
+ */
+struct can_filter {
+       canid_t can_id;
+       canid_t can_mask;
+};
+
+#define CAN_INV_FILTER 0x20000000U /* to be set in can_filter.can_id */
+
+#endif /* !_UAPI_CAN_H */
diff --git a/lib/libdss-include/include/linux/can/bcm.h b/lib/libdss-include/include/linux/can/bcm.h
new file mode 100644 (file)
index 0000000..9cc0d04
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * linux/can/bcm.h
+ *
+ * Definitions for CAN Broadcast Manager (BCM)
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_BCM_H
+#define _CAN_BCM_H
+
+#include <linux/types.h>
+#include <linux/can.h>
+
+struct bcm_timeval {
+       long tv_sec;
+       long tv_usec;
+};
+
+/**
+ * struct bcm_msg_head - head of messages to/from the broadcast manager
+ * @opcode:    opcode, see enum below.
+ * @flags:     special flags, see below.
+ * @count:     number of frames to send before changing interval.
+ * @ival1:     interval for the first @count frames.
+ * @ival2:     interval for the following frames.
+ * @can_id:    CAN ID of frames to be sent or received.
+ * @nframes:   number of frames appended to the message head.
+ * @frames:    array of CAN frames.
+ */
+struct bcm_msg_head {
+       __u32 opcode;
+       __u32 flags;
+       __u32 count;
+       struct bcm_timeval ival1, ival2;
+       canid_t can_id;
+       __u32 nframes;
+       struct can_frame frames[0];
+};
+
+enum {
+       TX_SETUP = 1,   /* create (cyclic) transmission task */
+       TX_DELETE,      /* remove (cyclic) transmission task */
+       TX_READ,        /* read properties of (cyclic) transmission task */
+       TX_SEND,        /* send one CAN frame */
+       RX_SETUP,       /* create RX content filter subscription */
+       RX_DELETE,      /* remove RX content filter subscription */
+       RX_READ,        /* read properties of RX content filter subscription */
+       TX_STATUS,      /* reply to TX_READ request */
+       TX_EXPIRED,     /* notification on performed transmissions (count=0) */
+       RX_STATUS,      /* reply to RX_READ request */
+       RX_TIMEOUT,     /* cyclic message is absent */
+       RX_CHANGED      /* updated CAN frame (detected content change) */
+};
+
+#define SETTIMER            0x0001
+#define STARTTIMER          0x0002
+#define TX_COUNTEVT         0x0004
+#define TX_ANNOUNCE         0x0008
+#define TX_CP_CAN_ID        0x0010
+#define RX_FILTER_ID        0x0020
+#define RX_CHECK_DLC        0x0040
+#define RX_NO_AUTOTIMER     0x0080
+#define RX_ANNOUNCE_RESUME  0x0100
+#define TX_RESET_MULTI_IDX  0x0200
+#define RX_RTR_FRAME        0x0400
+
+#endif /* !_UAPI_CAN_BCM_H */
diff --git a/lib/libdss-include/include/linux/can/error.h b/lib/libdss-include/include/linux/can/error.h
new file mode 100644 (file)
index 0000000..cfba785
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * linux/can/error.h
+ *
+ * Definitions of the CAN error messages to be filtered and passed to the user.
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_ERROR_H
+#define _CAN_ERROR_H
+
+#define CAN_ERR_DLC 8 /* dlc for error message frames */
+
+/* error class (mask) in can_id */
+#define CAN_ERR_TX_TIMEOUT   0x00000001U /* TX timeout (by netdevice driver) */
+#define CAN_ERR_LOSTARB      0x00000002U /* lost arbitration    / data[0]    */
+#define CAN_ERR_CRTL         0x00000004U /* controller problems / data[1]    */
+#define CAN_ERR_PROT         0x00000008U /* protocol violations / data[2..3] */
+#define CAN_ERR_TRX          0x00000010U /* transceiver status  / data[4]    */
+#define CAN_ERR_ACK          0x00000020U /* received no ACK on transmission */
+#define CAN_ERR_BUSOFF       0x00000040U /* bus off */
+#define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */
+#define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */
+
+/* arbitration lost in bit ... / data[0] */
+#define CAN_ERR_LOSTARB_UNSPEC   0x00 /* unspecified */
+                                     /* else bit number in bitstream */
+
+/* error status of CAN-controller / data[1] */
+#define CAN_ERR_CRTL_UNSPEC      0x00 /* unspecified */
+#define CAN_ERR_CRTL_RX_OVERFLOW 0x01 /* RX buffer overflow */
+#define CAN_ERR_CRTL_TX_OVERFLOW 0x02 /* TX buffer overflow */
+#define CAN_ERR_CRTL_RX_WARNING  0x04 /* reached warning level for RX errors */
+#define CAN_ERR_CRTL_TX_WARNING  0x08 /* reached warning level for TX errors */
+#define CAN_ERR_CRTL_RX_PASSIVE  0x10 /* reached error passive status RX */
+#define CAN_ERR_CRTL_TX_PASSIVE  0x20 /* reached error passive status TX */
+                                     /* (at least one error counter exceeds */
+                                     /* the protocol-defined level of 127)  */
+#define CAN_ERR_CRTL_ACTIVE      0x40 /* recovered to error active state */
+
+/* error in CAN protocol (type) / data[2] */
+#define CAN_ERR_PROT_UNSPEC      0x00 /* unspecified */
+#define CAN_ERR_PROT_BIT         0x01 /* single bit error */
+#define CAN_ERR_PROT_FORM        0x02 /* frame format error */
+#define CAN_ERR_PROT_STUFF       0x04 /* bit stuffing error */
+#define CAN_ERR_PROT_BIT0        0x08 /* unable to send dominant bit */
+#define CAN_ERR_PROT_BIT1        0x10 /* unable to send recessive bit */
+#define CAN_ERR_PROT_OVERLOAD    0x20 /* bus overload */
+#define CAN_ERR_PROT_ACTIVE      0x40 /* active error announcement */
+#define CAN_ERR_PROT_TX          0x80 /* error occurred on transmission */
+
+/* error in CAN protocol (location) / data[3] */
+#define CAN_ERR_PROT_LOC_UNSPEC  0x00 /* unspecified */
+#define CAN_ERR_PROT_LOC_SOF     0x03 /* start of frame */
+#define CAN_ERR_PROT_LOC_ID28_21 0x02 /* ID bits 28 - 21 (SFF: 10 - 3) */
+#define CAN_ERR_PROT_LOC_ID20_18 0x06 /* ID bits 20 - 18 (SFF: 2 - 0 )*/
+#define CAN_ERR_PROT_LOC_SRTR    0x04 /* substitute RTR (SFF: RTR) */
+#define CAN_ERR_PROT_LOC_IDE     0x05 /* identifier extension */
+#define CAN_ERR_PROT_LOC_ID17_13 0x07 /* ID bits 17-13 */
+#define CAN_ERR_PROT_LOC_ID12_05 0x0F /* ID bits 12-5 */
+#define CAN_ERR_PROT_LOC_ID04_00 0x0E /* ID bits 4-0 */
+#define CAN_ERR_PROT_LOC_RTR     0x0C /* RTR */
+#define CAN_ERR_PROT_LOC_RES1    0x0D /* reserved bit 1 */
+#define CAN_ERR_PROT_LOC_RES0    0x09 /* reserved bit 0 */
+#define CAN_ERR_PROT_LOC_DLC     0x0B /* data length code */
+#define CAN_ERR_PROT_LOC_DATA    0x0A /* data section */
+#define CAN_ERR_PROT_LOC_CRC_SEQ 0x08 /* CRC sequence */
+#define CAN_ERR_PROT_LOC_CRC_DEL 0x18 /* CRC delimiter */
+#define CAN_ERR_PROT_LOC_ACK     0x19 /* ACK slot */
+#define CAN_ERR_PROT_LOC_ACK_DEL 0x1B /* ACK delimiter */
+#define CAN_ERR_PROT_LOC_EOF     0x1A /* end of frame */
+#define CAN_ERR_PROT_LOC_INTERM  0x12 /* intermission */
+
+/* error status of CAN-transceiver / data[4] */
+/*                                             CANH CANL */
+#define CAN_ERR_TRX_UNSPEC             0x00 /* 0000 0000 */
+#define CAN_ERR_TRX_CANH_NO_WIRE       0x04 /* 0000 0100 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_BAT  0x05 /* 0000 0101 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_VCC  0x06 /* 0000 0110 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_GND  0x07 /* 0000 0111 */
+#define CAN_ERR_TRX_CANL_NO_WIRE       0x40 /* 0100 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_BAT  0x50 /* 0101 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_VCC  0x60 /* 0110 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_GND  0x70 /* 0111 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80 /* 1000 0000 */
+
+/* controller specific additional information / data[5..7] */
+
+#endif /* _CAN_ERROR_H */
diff --git a/lib/libdss-include/include/linux/can/gw.h b/lib/libdss-include/include/linux/can/gw.h
new file mode 100644 (file)
index 0000000..8b080e3
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * linux/can/gw.h
+ *
+ * Definitions for CAN frame Gateway/Router/Bridge
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2011 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_GW_H
+#define _CAN_GW_H
+
+#include <linux/types.h>
+#include <linux/can.h>
+
+struct rtcanmsg {
+       __u8  can_family;
+       __u8  gwtype;
+       __u16 flags;
+};
+
+/* CAN gateway types */
+enum {
+       CGW_TYPE_UNSPEC,
+       CGW_TYPE_CAN_CAN,       /* CAN->CAN routing */
+       __CGW_TYPE_MAX
+};
+
+#define CGW_TYPE_MAX (__CGW_TYPE_MAX - 1)
+
+/* CAN rtnetlink attribute definitions */
+enum {
+       CGW_UNSPEC,
+       CGW_MOD_AND,    /* CAN frame modification binary AND */
+       CGW_MOD_OR,     /* CAN frame modification binary OR */
+       CGW_MOD_XOR,    /* CAN frame modification binary XOR */
+       CGW_MOD_SET,    /* CAN frame modification set alternate values */
+       CGW_CS_XOR,     /* set data[] XOR checksum into data[index] */
+       CGW_CS_CRC8,    /* set data[] CRC8 checksum into data[index] */
+       CGW_HANDLED,    /* number of handled CAN frames */
+       CGW_DROPPED,    /* number of dropped CAN frames */
+       CGW_SRC_IF,     /* ifindex of source network interface */
+       CGW_DST_IF,     /* ifindex of destination network interface */
+       CGW_FILTER,     /* specify struct can_filter on source CAN device */
+       CGW_DELETED,    /* number of deleted CAN frames (see max_hops param) */
+       CGW_LIM_HOPS,   /* limit the number of hops of this specific rule */
+       CGW_MOD_UID,    /* user defined identifier for modification updates */
+       __CGW_MAX
+};
+
+#define CGW_MAX (__CGW_MAX - 1)
+
+#define CGW_FLAGS_CAN_ECHO 0x01
+#define CGW_FLAGS_CAN_SRC_TSTAMP 0x02
+#define CGW_FLAGS_CAN_IIF_TX_OK 0x04
+
+#define CGW_MOD_FUNCS 4 /* AND OR XOR SET */
+
+/* CAN frame elements that are affected by curr. 3 CAN frame modifications */
+#define CGW_MOD_ID     0x01
+#define CGW_MOD_DLC    0x02
+#define CGW_MOD_DATA   0x04
+
+#define CGW_FRAME_MODS 3 /* ID DLC DATA */
+
+#define MAX_MODFUNCTIONS (CGW_MOD_FUNCS * CGW_FRAME_MODS)
+
+struct cgw_frame_mod {
+       struct can_frame cf;
+       __u8 modtype;
+} __attribute__((packed));
+
+#define CGW_MODATTR_LEN sizeof(struct cgw_frame_mod)
+
+struct cgw_csum_xor {
+       __s8 from_idx;
+       __s8 to_idx;
+       __s8 result_idx;
+       __u8 init_xor_val;
+} __attribute__((packed));
+
+struct cgw_csum_crc8 {
+       __s8 from_idx;
+       __s8 to_idx;
+       __s8 result_idx;
+       __u8 init_crc_val;
+       __u8 final_xor_val;
+       __u8 crctab[256];
+       __u8 profile;
+       __u8 profile_data[20];
+} __attribute__((packed));
+
+/* length of checksum operation parameters. idx = index in CAN frame data[] */
+#define CGW_CS_XOR_LEN  sizeof(struct cgw_csum_xor)
+#define CGW_CS_CRC8_LEN  sizeof(struct cgw_csum_crc8)
+
+/* CRC8 profiles (compute CRC for additional data elements - see below) */
+enum {
+       CGW_CRC8PRF_UNSPEC,
+       CGW_CRC8PRF_1U8,        /* compute one additional u8 value */
+       CGW_CRC8PRF_16U8,       /* u8 value table indexed by data[1] & 0xF */
+       CGW_CRC8PRF_SFFID_XOR,  /* (can_id & 0xFF) ^ (can_id >> 8 & 0xFF) */
+       __CGW_CRC8PRF_MAX
+};
+
+#define CGW_CRC8PRF_MAX (__CGW_CRC8PRF_MAX - 1)
+
+/*
+ * CAN rtnetlink attribute contents in detail
+ *
+ * CGW_XXX_IF (length 4 bytes):
+ * Sets an interface index for source/destination network interfaces.
+ * For the CAN->CAN gwtype the indices of _two_ CAN interfaces are mandatory.
+ *
+ * CGW_FILTER (length 8 bytes):
+ * Sets a CAN receive filter for the gateway job specified by the
+ * struct can_filter described in include/linux/can.h
+ *
+ * CGW_MOD_(AND|OR|XOR|SET) (length 17 bytes):
+ * Specifies a modification that's done to a received CAN frame before it is
+ * send out to the destination interface.
+ *
+ * <struct can_frame> data used as operator
+ * <u8> affected CAN frame elements
+ *
+ * CGW_LIM_HOPS (length 1 byte):
+ * Limit the number of hops of this specific rule. Usually the received CAN
+ * frame can be processed as much as 'max_hops' times (which is given at module
+ * load time of the can-gw module). This value is used to reduce the number of
+ * possible hops for this gateway rule to a value smaller then max_hops.
+ *
+ * CGW_MOD_UID (length 4 bytes):
+ * Optional non-zero user defined routing job identifier to alter existing
+ * modification settings at runtime.
+ *
+ * CGW_CS_XOR (length 4 bytes):
+ * Set a simple XOR checksum starting with an initial value into
+ * data[result-idx] using data[start-idx] .. data[end-idx]
+ *
+ * The XOR checksum is calculated like this:
+ *
+ * xor = init_xor_val
+ *
+ * for (i = from_idx .. to_idx)
+ *      xor ^= can_frame.data[i]
+ *
+ * can_frame.data[ result_idx ] = xor
+ *
+ * CGW_CS_CRC8 (length 282 bytes):
+ * Set a CRC8 value into data[result-idx] using a given 256 byte CRC8 table,
+ * a given initial value and a defined input data[start-idx] .. data[end-idx].
+ * Finally the result value is XOR'ed with the final_xor_val.
+ *
+ * The CRC8 checksum is calculated like this:
+ *
+ * crc = init_crc_val
+ *
+ * for (i = from_idx .. to_idx)
+ *      crc = crctab[ crc ^ can_frame.data[i] ]
+ *
+ * can_frame.data[ result_idx ] = crc ^ final_xor_val
+ *
+ * The calculated CRC may contain additional source data elements that can be
+ * defined in the handling of 'checksum profiles' e.g. shown in AUTOSAR specs
+ * like http://www.autosar.org/download/R4.0/AUTOSAR_SWS_E2ELibrary.pdf
+ * E.g. the profile_data[] may contain additional u8 values (called DATA_IDs)
+ * that are used depending on counter values inside the CAN frame data[].
+ * So far only three profiles have been implemented for illustration.
+ *
+ * Remark: In general the attribute data is a linear buffer.
+ *         Beware of sending unpacked or aligned structs!
+ */
+
+#endif /* !_UAPI_CAN_GW_H */
diff --git a/lib/libdss-include/include/linux/can/netlink.h b/lib/libdss-include/include/linux/can/netlink.h
new file mode 100644 (file)
index 0000000..6d4ec2a
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * linux/can/netlink.h
+ *
+ * Definitions for the CAN netlink interface
+ *
+ * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the version 2 of the GNU General Public License
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _CAN_NETLINK_H
+#define _CAN_NETLINK_H
+
+#include <linux/types.h>
+
+/*
+ * CAN bit-timing parameters
+ *
+ * For further information, please read chapter "8 BIT TIMING
+ * REQUIREMENTS" of the "Bosch CAN Specification version 2.0"
+ * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf.
+ */
+struct can_bittiming {
+       __u32 bitrate;          /* Bit-rate in bits/second */
+       __u32 sample_point;     /* Sample point in one-tenth of a percent */
+       __u32 tq;               /* Time quanta (TQ) in nanoseconds */
+       __u32 prop_seg;         /* Propagation segment in TQs */
+       __u32 phase_seg1;       /* Phase buffer segment 1 in TQs */
+       __u32 phase_seg2;       /* Phase buffer segment 2 in TQs */
+       __u32 sjw;              /* Synchronisation jump width in TQs */
+       __u32 brp;              /* Bit-rate prescaler */
+};
+
+/*
+ * CAN harware-dependent bit-timing constant
+ *
+ * Used for calculating and checking bit-timing parameters
+ */
+struct can_bittiming_const {
+       char name[16];          /* Name of the CAN controller hardware */
+       __u32 tseg1_min;        /* Time segement 1 = prop_seg + phase_seg1 */
+       __u32 tseg1_max;
+       __u32 tseg2_min;        /* Time segement 2 = phase_seg2 */
+       __u32 tseg2_max;
+       __u32 sjw_max;          /* Synchronisation jump width */
+       __u32 brp_min;          /* Bit-rate prescaler */
+       __u32 brp_max;
+       __u32 brp_inc;
+};
+
+/*
+ * CAN clock parameters
+ */
+struct can_clock {
+       __u32 freq;             /* CAN system clock frequency in Hz */
+};
+
+/*
+ * CAN operational and error states
+ */
+enum can_state {
+       CAN_STATE_ERROR_ACTIVE = 0,     /* RX/TX error count < 96 */
+       CAN_STATE_ERROR_WARNING,        /* RX/TX error count < 128 */
+       CAN_STATE_ERROR_PASSIVE,        /* RX/TX error count < 256 */
+       CAN_STATE_BUS_OFF,              /* RX/TX error count >= 256 */
+       CAN_STATE_STOPPED,              /* Device is stopped */
+       CAN_STATE_SLEEPING,             /* Device is sleeping */
+       CAN_STATE_MAX
+};
+
+/*
+ * CAN bus error counters
+ */
+struct can_berr_counter {
+       __u16 txerr;
+       __u16 rxerr;
+};
+
+/*
+ * CAN controller mode
+ */
+struct can_ctrlmode {
+       __u32 mask;
+       __u32 flags;
+};
+
+#define CAN_CTRLMODE_LOOPBACK          0x01    /* Loopback mode */
+#define CAN_CTRLMODE_LISTENONLY                0x02    /* Listen-only mode */
+#define CAN_CTRLMODE_3_SAMPLES         0x04    /* Triple sampling mode */
+#define CAN_CTRLMODE_ONE_SHOT          0x08    /* One-Shot mode */
+#define CAN_CTRLMODE_BERR_REPORTING    0x10    /* Bus-error reporting */
+#define CAN_CTRLMODE_FD                        0x20    /* CAN FD mode */
+#define CAN_CTRLMODE_PRESUME_ACK       0x40    /* Ignore missing CAN ACKs */
+#define CAN_CTRLMODE_FD_NON_ISO                0x80    /* CAN FD in non-ISO mode */
+
+/*
+ * CAN device statistics
+ */
+struct can_device_stats {
+       __u32 bus_error;        /* Bus errors */
+       __u32 error_warning;    /* Changes to error warning state */
+       __u32 error_passive;    /* Changes to error passive state */
+       __u32 bus_off;          /* Changes to bus off state */
+       __u32 arbitration_lost; /* Arbitration lost errors */
+       __u32 restarts;         /* CAN controller re-starts */
+};
+
+/*
+ * CAN netlink interface
+ */
+enum {
+       IFLA_CAN_UNSPEC,
+       IFLA_CAN_BITTIMING,
+       IFLA_CAN_BITTIMING_CONST,
+       IFLA_CAN_CLOCK,
+       IFLA_CAN_STATE,
+       IFLA_CAN_CTRLMODE,
+       IFLA_CAN_RESTART_MS,
+       IFLA_CAN_RESTART,
+       IFLA_CAN_BERR_COUNTER,
+       IFLA_CAN_DATA_BITTIMING,
+       IFLA_CAN_DATA_BITTIMING_CONST,
+       __IFLA_CAN_MAX
+};
+
+#define IFLA_CAN_MAX   (__IFLA_CAN_MAX - 1)
+
+#endif /* !_UAPI_CAN_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/can/raw.h b/lib/libdss-include/include/linux/can/raw.h
new file mode 100644 (file)
index 0000000..0e3bf9f
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * linux/can/raw.h
+ *
+ * Definitions for raw CAN sockets
+ *
+ * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ *          Urs Thuermann   <urs.thuermann@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_RAW_H
+#define _CAN_RAW_H
+
+#include <linux/can.h>
+
+#define SOL_CAN_RAW (SOL_CAN_BASE + CAN_RAW)
+
+/* for socket options affecting the socket (not the global system) */
+
+enum {
+       CAN_RAW_FILTER = 1,     /* set 0 .. n can_filter(s)          */
+       CAN_RAW_ERR_FILTER,     /* set filter for error frames       */
+       CAN_RAW_LOOPBACK,       /* local loopback (default:on)       */
+       CAN_RAW_RECV_OWN_MSGS,  /* receive my own msgs (default:off) */
+       CAN_RAW_FD_FRAMES,      /* allow CAN FD frames (default:off) */
+       CAN_RAW_JOIN_FILTERS,   /* all filters must match to trigger */
+};
+
+#endif /* !_UAPI_CAN_RAW_H */
diff --git a/lib/libdss-include/include/linux/capability.h b/lib/libdss-include/include/linux/capability.h
new file mode 100644 (file)
index 0000000..b4020e9
--- /dev/null
@@ -0,0 +1,365 @@
+/*
+ * This is <linux/capability.h>
+ *
+ * Andrew G. Morgan <morgan@kernel.org>
+ * Alexander Kjeldaas <astor@guardian.no>
+ * with help from Aleph1, Roland Buresund and Andrew Main.
+ *
+ * See here for the libcap library ("POSIX draft" compliance):
+ *
+ * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/
+ */
+
+#ifndef _LINUX_CAPABILITY_H
+#define _LINUX_CAPABILITY_H
+
+#include <linux/types.h>
+
+struct task_struct;
+
+/* User-level do most of the mapping between kernel and user
+   capabilities based on the version tag given by the kernel. The
+   kernel might be somewhat backwards compatible, but don't bet on
+   it. */
+
+/* Note, cap_t, is defined by POSIX (draft) to be an "opaque" pointer to
+   a set of three capability sets.  The transposition of 3*the
+   following structure to such a composite is better handled in a user
+   library since the draft standard requires the use of malloc/free
+   etc.. */
+
+#define _LINUX_CAPABILITY_VERSION_1  0x19980330
+#define _LINUX_CAPABILITY_U32S_1     1
+
+#define _LINUX_CAPABILITY_VERSION_2  0x20071026  /* deprecated - use v3 */
+#define _LINUX_CAPABILITY_U32S_2     2
+
+#define _LINUX_CAPABILITY_VERSION_3  0x20080522
+#define _LINUX_CAPABILITY_U32S_3     2
+
+typedef struct __user_cap_header_struct {
+       __u32 version;
+       int pid;
+} *cap_user_header_t;
+
+typedef struct __user_cap_data_struct {
+        __u32 effective;
+        __u32 permitted;
+        __u32 inheritable;
+} *cap_user_data_t;
+
+
+#define VFS_CAP_REVISION_MASK  0xFF000000
+#define VFS_CAP_REVISION_SHIFT 24
+#define VFS_CAP_FLAGS_MASK     ~VFS_CAP_REVISION_MASK
+#define VFS_CAP_FLAGS_EFFECTIVE        0x000001
+
+#define VFS_CAP_REVISION_1     0x01000000
+#define VFS_CAP_U32_1           1
+#define XATTR_CAPS_SZ_1         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_1))
+
+#define VFS_CAP_REVISION_2     0x02000000
+#define VFS_CAP_U32_2           2
+#define XATTR_CAPS_SZ_2         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_2))
+
+#define XATTR_CAPS_SZ           XATTR_CAPS_SZ_2
+#define VFS_CAP_U32             VFS_CAP_U32_2
+#define VFS_CAP_REVISION       VFS_CAP_REVISION_2
+
+struct vfs_cap_data {
+       __le32 magic_etc;            /* Little endian */
+       struct {
+               __le32 permitted;    /* Little endian */
+               __le32 inheritable;  /* Little endian */
+       } data[VFS_CAP_U32];
+};
+
+
+/*
+ * Backwardly compatible definition for source code - trapped in a
+ * 32-bit world. If you find you need this, please consider using
+ * libcap to untrap yourself...
+ */
+#define _LINUX_CAPABILITY_VERSION  _LINUX_CAPABILITY_VERSION_1
+#define _LINUX_CAPABILITY_U32S     _LINUX_CAPABILITY_U32S_1
+
+
+
+/**
+ ** POSIX-draft defined capabilities.
+ **/
+
+/* In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
+   overrides the restriction of changing file ownership and group
+   ownership. */
+
+#define CAP_CHOWN            0
+
+/* Override all DAC access, including ACL execute access if
+   [_POSIX_ACL] is defined. Excluding DAC access covered by
+   CAP_LINUX_IMMUTABLE. */
+
+#define CAP_DAC_OVERRIDE     1
+
+/* Overrides all DAC restrictions regarding read and search on files
+   and directories, including ACL restrictions if [_POSIX_ACL] is
+   defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE. */
+
+#define CAP_DAC_READ_SEARCH  2
+
+/* Overrides all restrictions about allowed operations on files, where
+   file owner ID must be equal to the user ID, except where CAP_FSETID
+   is applicable. It doesn't override MAC and DAC restrictions. */
+
+#define CAP_FOWNER           3
+
+/* Overrides the following restrictions that the effective user ID
+   shall match the file owner ID when setting the S_ISUID and S_ISGID
+   bits on that file; that the effective group ID (or one of the
+   supplementary group IDs) shall match the file owner ID when setting
+   the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are
+   cleared on successful return from chown(2) (not implemented). */
+
+#define CAP_FSETID           4
+
+/* Overrides the restriction that the real or effective user ID of a
+   process sending a signal must match the real or effective user ID
+   of the process receiving the signal. */
+
+#define CAP_KILL             5
+
+/* Allows setgid(2) manipulation */
+/* Allows setgroups(2) */
+/* Allows forged gids on socket credentials passing. */
+
+#define CAP_SETGID           6
+
+/* Allows set*uid(2) manipulation (including fsuid). */
+/* Allows forged pids on socket credentials passing. */
+
+#define CAP_SETUID           7
+
+
+/**
+ ** Linux-specific capabilities
+ **/
+
+/* Without VFS support for capabilities:
+ *   Transfer any capability in your permitted set to any pid,
+ *   remove any capability in your permitted set from any pid
+ * With VFS support for capabilities (neither of above, but)
+ *   Add any capability from current's capability bounding set
+ *       to the current process' inheritable set
+ *   Allow taking bits out of capability bounding set
+ *   Allow modification of the securebits for a process
+ */
+
+#define CAP_SETPCAP          8
+
+/* Allow modification of S_IMMUTABLE and S_APPEND file attributes */
+
+#define CAP_LINUX_IMMUTABLE  9
+
+/* Allows binding to TCP/UDP sockets below 1024 */
+/* Allows binding to ATM VCIs below 32 */
+
+#define CAP_NET_BIND_SERVICE 10
+
+/* Allow broadcasting, listen to multicast */
+
+#define CAP_NET_BROADCAST    11
+
+/* Allow interface configuration */
+/* Allow administration of IP firewall, masquerading and accounting */
+/* Allow setting debug option on sockets */
+/* Allow modification of routing tables */
+/* Allow setting arbitrary process / process group ownership on
+   sockets */
+/* Allow binding to any address for transparent proxying (also via NET_RAW) */
+/* Allow setting TOS (type of service) */
+/* Allow setting promiscuous mode */
+/* Allow clearing driver statistics */
+/* Allow multicasting */
+/* Allow read/write of device-specific registers */
+/* Allow activation of ATM control sockets */
+
+#define CAP_NET_ADMIN        12
+
+/* Allow use of RAW sockets */
+/* Allow use of PACKET sockets */
+/* Allow binding to any address for transparent proxying (also via NET_ADMIN) */
+
+#define CAP_NET_RAW          13
+
+/* Allow locking of shared memory segments */
+/* Allow mlock and mlockall (which doesn't really have anything to do
+   with IPC) */
+
+#define CAP_IPC_LOCK         14
+
+/* Override IPC ownership checks */
+
+#define CAP_IPC_OWNER        15
+
+/* Insert and remove kernel modules - modify kernel without limit */
+#define CAP_SYS_MODULE       16
+
+/* Allow ioperm/iopl access */
+/* Allow sending USB messages to any device via /proc/bus/usb */
+
+#define CAP_SYS_RAWIO        17
+
+/* Allow use of chroot() */
+
+#define CAP_SYS_CHROOT       18
+
+/* Allow ptrace() of any process */
+
+#define CAP_SYS_PTRACE       19
+
+/* Allow configuration of process accounting */
+
+#define CAP_SYS_PACCT        20
+
+/* Allow configuration of the secure attention key */
+/* Allow administration of the random device */
+/* Allow examination and configuration of disk quotas */
+/* Allow setting the domainname */
+/* Allow setting the hostname */
+/* Allow calling bdflush() */
+/* Allow mount() and umount(), setting up new smb connection */
+/* Allow some autofs root ioctls */
+/* Allow nfsservctl */
+/* Allow VM86_REQUEST_IRQ */
+/* Allow to read/write pci config on alpha */
+/* Allow irix_prctl on mips (setstacksize) */
+/* Allow flushing all cache on m68k (sys_cacheflush) */
+/* Allow removing semaphores */
+/* Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores
+   and shared memory */
+/* Allow locking/unlocking of shared memory segment */
+/* Allow turning swap on/off */
+/* Allow forged pids on socket credentials passing */
+/* Allow setting readahead and flushing buffers on block devices */
+/* Allow setting geometry in floppy driver */
+/* Allow turning DMA on/off in xd driver */
+/* Allow administration of md devices (mostly the above, but some
+   extra ioctls) */
+/* Allow tuning the ide driver */
+/* Allow access to the nvram device */
+/* Allow administration of apm_bios, serial and bttv (TV) device */
+/* Allow manufacturer commands in isdn CAPI support driver */
+/* Allow reading non-standardized portions of pci configuration space */
+/* Allow DDI debug ioctl on sbpcd driver */
+/* Allow setting up serial ports */
+/* Allow sending raw qic-117 commands */
+/* Allow enabling/disabling tagged queuing on SCSI controllers and sending
+   arbitrary SCSI commands */
+/* Allow setting encryption key on loopback filesystem */
+/* Allow setting zone reclaim policy */
+
+#define CAP_SYS_ADMIN        21
+
+/* Allow use of reboot() */
+
+#define CAP_SYS_BOOT         22
+
+/* Allow raising priority and setting priority on other (different
+   UID) processes */
+/* Allow use of FIFO and round-robin (realtime) scheduling on own
+   processes and setting the scheduling algorithm used by another
+   process. */
+/* Allow setting cpu affinity on other processes */
+
+#define CAP_SYS_NICE         23
+
+/* Override resource limits. Set resource limits. */
+/* Override quota limits. */
+/* Override reserved space on ext2 filesystem */
+/* Modify data journaling mode on ext3 filesystem (uses journaling
+   resources) */
+/* NOTE: ext2 honors fsuid when checking for resource overrides, so
+   you can override using fsuid too */
+/* Override size restrictions on IPC message queues */
+/* Allow more than 64hz interrupts from the real-time clock */
+/* Override max number of consoles on console allocation */
+/* Override max number of keymaps */
+
+#define CAP_SYS_RESOURCE     24
+
+/* Allow manipulation of system clock */
+/* Allow irix_stime on mips */
+/* Allow setting the real-time clock */
+
+#define CAP_SYS_TIME         25
+
+/* Allow configuration of tty devices */
+/* Allow vhangup() of tty */
+
+#define CAP_SYS_TTY_CONFIG   26
+
+/* Allow the privileged aspects of mknod() */
+
+#define CAP_MKNOD            27
+
+/* Allow taking of leases on files */
+
+#define CAP_LEASE            28
+
+/* Allow writing the audit log via unicast netlink socket */
+
+#define CAP_AUDIT_WRITE      29
+
+/* Allow configuration of audit via unicast netlink socket */
+
+#define CAP_AUDIT_CONTROL    30
+
+#define CAP_SETFCAP         31
+
+/* Override MAC access.
+   The base kernel enforces no MAC policy.
+   An LSM may enforce a MAC policy, and if it does and it chooses
+   to implement capability based overrides of that policy, this is
+   the capability it should use to do so. */
+
+#define CAP_MAC_OVERRIDE     32
+
+/* Allow MAC configuration or state changes.
+   The base kernel requires no MAC configuration.
+   An LSM may enforce a MAC policy, and if it does and it chooses
+   to implement capability based checks on modifications to that
+   policy or the data required to maintain it, this is the
+   capability it should use to do so. */
+
+#define CAP_MAC_ADMIN        33
+
+/* Allow configuring the kernel's syslog (printk behaviour) */
+
+#define CAP_SYSLOG           34
+
+/* Allow triggering something that will wake the system */
+
+#define CAP_WAKE_ALARM            35
+
+/* Allow preventing system suspends */
+
+#define CAP_BLOCK_SUSPEND    36
+
+/* Allow reading the audit log via multicast netlink socket */
+
+#define CAP_AUDIT_READ         37
+
+
+#define CAP_LAST_CAP         CAP_AUDIT_READ
+
+#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
+
+/*
+ * Bit location of each capability (used by user-space library and kernel)
+ */
+
+#define CAP_TO_INDEX(x)     ((x) >> 5)        /* 1 << 5 == bits in __u32 */
+#define CAP_TO_MASK(x)      (1 << ((x) & 31)) /* mask for indexed __u32 */
+
+
+#endif /* _LINUX_CAPABILITY_H */
diff --git a/lib/libdss-include/include/linux/capi.h b/lib/libdss-include/include/linux/capi.h
new file mode 100644 (file)
index 0000000..32717a9
--- /dev/null
@@ -0,0 +1,131 @@
+/* $Id: capi.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $
+ * 
+ * CAPI 2.0 Interface for Linux
+ * 
+ * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __LINUX_CAPI_H__
+#define __LINUX_CAPI_H__
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/kernelcapi.h>
+
+/*
+ * CAPI_REGISTER
+ */
+
+typedef struct capi_register_params {  /* CAPI_REGISTER */
+       __u32 level3cnt;        /* No. of simulatneous user data connections */
+       __u32 datablkcnt;       /* No. of buffered data messages */
+       __u32 datablklen;       /* Size of buffered data messages */
+} capi_register_params;
+
+#define        CAPI_REGISTER   _IOW('C',0x01,struct capi_register_params)
+
+/*
+ * CAPI_GET_MANUFACTURER
+ */
+
+#define CAPI_MANUFACTURER_LEN          64
+
+#define        CAPI_GET_MANUFACTURER   _IOWR('C',0x06,int)     /* broken: wanted size 64 (CAPI_MANUFACTURER_LEN) */
+
+/*
+ * CAPI_GET_VERSION
+ */
+
+typedef struct capi_version {
+       __u32 majorversion;
+       __u32 minorversion;
+       __u32 majormanuversion;
+       __u32 minormanuversion;
+} capi_version;
+
+#define CAPI_GET_VERSION       _IOWR('C',0x07,struct capi_version)
+
+/*
+ * CAPI_GET_SERIAL
+ */
+
+#define CAPI_SERIAL_LEN                8
+#define CAPI_GET_SERIAL                _IOWR('C',0x08,int)     /* broken: wanted size 8 (CAPI_SERIAL_LEN) */
+
+/*
+ * CAPI_GET_PROFILE
+ */
+
+typedef struct capi_profile {
+       __u16 ncontroller;      /* number of installed controller */
+       __u16 nbchannel;        /* number of B-Channels */
+       __u32 goptions;         /* global options */
+       __u32 support1;         /* B1 protocols support */
+       __u32 support2;         /* B2 protocols support */
+       __u32 support3;         /* B3 protocols support */
+       __u32 reserved[6];      /* reserved */
+       __u32 manu[5];          /* manufacturer specific information */
+} capi_profile;
+
+#define CAPI_GET_PROFILE       _IOWR('C',0x09,struct capi_profile)
+
+typedef struct capi_manufacturer_cmd {
+       unsigned long cmd;
+       void *data;
+} capi_manufacturer_cmd;
+
+/*
+ * CAPI_MANUFACTURER_CMD
+ */
+
+#define CAPI_MANUFACTURER_CMD  _IOWR('C',0x20, struct capi_manufacturer_cmd)
+
+/*
+ * CAPI_GET_ERRCODE
+ * capi errcode is set, * if read, write, or ioctl returns EIO,
+ * ioctl returns errcode directly, and in arg, if != 0
+ */
+
+#define CAPI_GET_ERRCODE       _IOR('C',0x21, __u16)
+
+/*
+ * CAPI_INSTALLED
+ */
+#define CAPI_INSTALLED         _IOR('C',0x22, __u16)
+
+
+/*
+ * member contr is input for
+ * CAPI_GET_MANUFACTURER, CAPI_GET_VERSION, CAPI_GET_SERIAL
+ * and CAPI_GET_PROFILE
+ */
+typedef union capi_ioctl_struct {
+       __u32 contr;
+       capi_register_params rparams;
+       __u8 manufacturer[CAPI_MANUFACTURER_LEN];
+       capi_version version;
+       __u8 serial[CAPI_SERIAL_LEN];
+       capi_profile profile;
+       capi_manufacturer_cmd cmd;
+       __u16 errcode;
+} capi_ioctl_struct;
+
+/*
+ * Middleware extension
+ */
+
+#define CAPIFLAG_HIGHJACKING   0x0001
+
+#define CAPI_GET_FLAGS         _IOR('C',0x23, unsigned)
+#define CAPI_SET_FLAGS         _IOR('C',0x24, unsigned)
+#define CAPI_CLR_FLAGS         _IOR('C',0x25, unsigned)
+
+#define CAPI_NCCI_OPENCOUNT    _IOR('C',0x26, unsigned)
+
+#define CAPI_NCCI_GETUNIT      _IOR('C',0x27, unsigned)
+
+#endif                         /* __LINUX_CAPI_H__ */
diff --git a/lib/libdss-include/include/linux/cciss_defs.h b/lib/libdss-include/include/linux/cciss_defs.h
new file mode 100644 (file)
index 0000000..316b670
--- /dev/null
@@ -0,0 +1,130 @@
+#ifndef CCISS_DEFS_H
+#define CCISS_DEFS_H
+
+#include <linux/types.h>
+
+/* general boundary definitions */
+#define SENSEINFOBYTES          32 /* note that this value may vary
+                                     between host implementations */
+
+/* Command Status value */
+#define CMD_SUCCESS             0x0000
+#define CMD_TARGET_STATUS       0x0001
+#define CMD_DATA_UNDERRUN       0x0002
+#define CMD_DATA_OVERRUN        0x0003
+#define CMD_INVALID             0x0004
+#define CMD_PROTOCOL_ERR        0x0005
+#define CMD_HARDWARE_ERR        0x0006
+#define CMD_CONNECTION_LOST     0x0007
+#define CMD_ABORTED             0x0008
+#define CMD_ABORT_FAILED        0x0009
+#define CMD_UNSOLICITED_ABORT   0x000A
+#define CMD_TIMEOUT             0x000B
+#define CMD_UNABORTABLE                0x000C
+
+/* transfer direction */
+#define XFER_NONE               0x00
+#define XFER_WRITE              0x01
+#define XFER_READ               0x02
+#define XFER_RSVD               0x03
+
+/* task attribute */
+#define ATTR_UNTAGGED           0x00
+#define ATTR_SIMPLE             0x04
+#define ATTR_HEADOFQUEUE        0x05
+#define ATTR_ORDERED            0x06
+#define ATTR_ACA                0x07
+
+/* cdb type */
+#define TYPE_CMD                               0x00
+#define TYPE_MSG                               0x01
+
+/* Type defs used in the following structs */
+#define BYTE __u8
+#define WORD __u16
+#define HWORD __u16
+#define DWORD __u32
+
+#define CISS_MAX_LUN   1024
+
+#define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */
+#define LEVEL3LUN   0
+
+#pragma pack(1)
+
+/* Command List Structure */
+typedef union _SCSI3Addr_struct {
+   struct {
+    BYTE Dev;
+    BYTE Bus:6;
+    BYTE Mode:2;        /* b00 */
+  } PeripDev;
+   struct {
+    BYTE DevLSB;
+    BYTE DevMSB:6;
+    BYTE Mode:2;        /* b01 */
+  } LogDev;
+   struct {
+    BYTE Dev:5;
+    BYTE Bus:3;
+    BYTE Targ:6;
+    BYTE Mode:2;        /* b10 */
+  } LogUnit;
+} SCSI3Addr_struct;
+
+typedef struct _PhysDevAddr_struct {
+  DWORD             TargetId:24;
+  DWORD             Bus:6;
+  DWORD             Mode:2;
+  SCSI3Addr_struct  Target[2]; /* 2 level target device addr */
+} PhysDevAddr_struct;
+
+typedef struct _LogDevAddr_struct {
+  DWORD            VolId:30;
+  DWORD            Mode:2;
+  BYTE             reserved[4];
+} LogDevAddr_struct;
+
+typedef union _LUNAddr_struct {
+  BYTE               LunAddrBytes[8];
+  SCSI3Addr_struct   SCSI3Lun[4];
+  PhysDevAddr_struct PhysDev;
+  LogDevAddr_struct  LogDev;
+} LUNAddr_struct;
+
+typedef struct _RequestBlock_struct {
+  BYTE   CDBLen;
+  struct {
+    BYTE Type:3;
+    BYTE Attribute:3;
+    BYTE Direction:2;
+  } Type;
+  HWORD  Timeout;
+  BYTE   CDB[16];
+} RequestBlock_struct;
+
+typedef union _MoreErrInfo_struct{
+  struct {
+    BYTE  Reserved[3];
+    BYTE  Type;
+    DWORD ErrorInfo;
+  } Common_Info;
+  struct{
+    BYTE  Reserved[2];
+    BYTE  offense_size; /* size of offending entry */
+    BYTE  offense_num;  /* byte # of offense 0-base */
+    DWORD offense_value;
+  } Invalid_Cmd;
+} MoreErrInfo_struct;
+typedef struct _ErrorInfo_struct {
+  BYTE               ScsiStatus;
+  BYTE               SenseLen;
+  HWORD              CommandStatus;
+  DWORD              ResidualCnt;
+  MoreErrInfo_struct MoreErrInfo;
+  BYTE               SenseInfo[SENSEINFOBYTES];
+} ErrorInfo_struct;
+
+#pragma pack()
+
+#endif /* CCISS_DEFS_H */
diff --git a/lib/libdss-include/include/linux/cciss_ioctl.h b/lib/libdss-include/include/linux/cciss_ioctl.h
new file mode 100644 (file)
index 0000000..d85fd2b
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef CCISS_IOCTLH
+#define CCISS_IOCTLH
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/cciss_defs.h>
+
+#define CCISS_IOC_MAGIC 'B'
+
+
+typedef struct _cciss_pci_info_struct
+{
+       unsigned char   bus;
+       unsigned char   dev_fn;
+       unsigned short  domain;
+       __u32           board_id;
+} cciss_pci_info_struct; 
+
+typedef struct _cciss_coalint_struct
+{
+       __u32  delay;
+       __u32  count;
+} cciss_coalint_struct;
+
+typedef char NodeName_type[16];
+
+typedef __u32 Heartbeat_type;
+
+#define CISS_PARSCSIU2         0x0001
+#define CISS_PARCSCIU3         0x0002
+#define CISS_FIBRE1G   0x0100
+#define CISS_FIBRE2G   0x0200
+typedef __u32 BusTypes_type;
+
+typedef char FirmwareVer_type[4];
+typedef __u32 DriverVer_type;
+
+#define MAX_KMALLOC_SIZE 128000
+
+typedef struct _IOCTL_Command_struct {
+  LUNAddr_struct          LUN_info;
+  RequestBlock_struct      Request;
+  ErrorInfo_struct        error_info; 
+  WORD                    buf_size;  /* size in bytes of the buf */
+  BYTE                    *buf;
+} IOCTL_Command_struct;
+
+typedef struct _BIG_IOCTL_Command_struct {
+  LUNAddr_struct          LUN_info;
+  RequestBlock_struct      Request;
+  ErrorInfo_struct        error_info;
+  DWORD                           malloc_size; /* < MAX_KMALLOC_SIZE in cciss.c */
+  DWORD                           buf_size;    /* size in bytes of the buf */
+                                       /* < malloc_size * MAXSGENTRIES */
+  BYTE                    *buf;
+} BIG_IOCTL_Command_struct;
+
+typedef struct _LogvolInfo_struct{
+       __u32   LunID;
+       int     num_opens;  /* number of opens on the logical volume */
+       int     num_parts;  /* number of partitions configured on logvol */
+} LogvolInfo_struct;
+
+#define CCISS_GETPCIINFO _IOR(CCISS_IOC_MAGIC, 1, cciss_pci_info_struct)
+
+#define CCISS_GETINTINFO _IOR(CCISS_IOC_MAGIC, 2, cciss_coalint_struct)
+#define CCISS_SETINTINFO _IOW(CCISS_IOC_MAGIC, 3, cciss_coalint_struct)
+
+#define CCISS_GETNODENAME _IOR(CCISS_IOC_MAGIC, 4, NodeName_type)
+#define CCISS_SETNODENAME _IOW(CCISS_IOC_MAGIC, 5, NodeName_type)
+
+#define CCISS_GETHEARTBEAT _IOR(CCISS_IOC_MAGIC, 6, Heartbeat_type)
+#define CCISS_GETBUSTYPES  _IOR(CCISS_IOC_MAGIC, 7, BusTypes_type)
+#define CCISS_GETFIRMVER   _IOR(CCISS_IOC_MAGIC, 8, FirmwareVer_type)
+#define CCISS_GETDRIVVER   _IOR(CCISS_IOC_MAGIC, 9, DriverVer_type)
+#define CCISS_REVALIDVOLS  _IO(CCISS_IOC_MAGIC, 10)
+#define CCISS_PASSTHRU    _IOWR(CCISS_IOC_MAGIC, 11, IOCTL_Command_struct)
+#define CCISS_DEREGDISK           _IO(CCISS_IOC_MAGIC, 12)
+
+/* no longer used... use REGNEWD instead */ 
+#define CCISS_REGNEWDISK  _IOW(CCISS_IOC_MAGIC, 13, int)
+
+#define CCISS_REGNEWD     _IO(CCISS_IOC_MAGIC, 14)
+#define CCISS_RESCANDISK   _IO(CCISS_IOC_MAGIC, 16)
+#define CCISS_GETLUNINFO   _IOR(CCISS_IOC_MAGIC, 17, LogvolInfo_struct)
+#define CCISS_BIG_PASSTHRU _IOWR(CCISS_IOC_MAGIC, 18, BIG_IOCTL_Command_struct)
+
+#endif /* CCISS_IOCTLH */
diff --git a/lib/libdss-include/include/linux/cdrom.h b/lib/libdss-include/include/linux/cdrom.h
new file mode 100644 (file)
index 0000000..db59b9b
--- /dev/null
@@ -0,0 +1,946 @@
+/*
+ * -- <linux/cdrom.h>
+ * General header file for linux CD-ROM drivers 
+ * Copyright (C) 1992         David Giller, rafetmad@oxy.edu
+ *               1994, 1995   Eberhard Mönkeberg, emoenke@gwdg.de
+ *               1996         David van Leeuwen, david@tm.tno.nl
+ *               1997, 1998   Erik Andersen, andersee@debian.org
+ *               1998-2002    Jens Axboe, axboe@suse.de
+ */
+#ifndef _LINUX_CDROM_H
+#define _LINUX_CDROM_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*******************************************************
+ * As of Linux 2.1.x, all Linux CD-ROM application programs will use this 
+ * (and only this) include file.  It is my hope to provide Linux with
+ * a uniform interface between software accessing CD-ROMs and the various 
+ * device drivers that actually talk to the drives.  There may still be
+ * 23 different kinds of strange CD-ROM drives, but at least there will 
+ * now be one, and only one, Linux CD-ROM interface.
+ *
+ * Additionally, as of Linux 2.1.x, all Linux application programs 
+ * should use the O_NONBLOCK option when opening a CD-ROM device 
+ * for subsequent ioctl commands.  This allows for neat system errors 
+ * like "No medium found" or "Wrong medium type" upon attempting to 
+ * mount or play an empty slot, mount an audio disc, or play a data disc.
+ * Generally, changing an application program to support O_NONBLOCK
+ * is as easy as the following:
+ *       -    drive = open("/dev/cdrom", O_RDONLY);
+ *       +    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
+ * It is worth the small change.
+ *
+ *  Patches for many common CD programs (provided by David A. van Leeuwen)
+ *  can be found at:  ftp://ftp.gwdg.de/pub/linux/cdrom/drivers/cm206/
+ * 
+ *******************************************************/
+
+/* When a driver supports a certain function, but the cdrom drive we are 
+ * using doesn't, we will return the error EDRIVE_CANT_DO_THIS.  We will 
+ * borrow the "Operation not supported" error from the network folks to 
+ * accomplish this.  Maybe someday we will get a more targeted error code, 
+ * but this will do for now... */
+#define EDRIVE_CANT_DO_THIS  EOPNOTSUPP
+
+/*******************************************************
+ * The CD-ROM IOCTL commands  -- these should be supported by 
+ * all the various cdrom drivers.  For the CD-ROM ioctls, we 
+ * will commandeer byte 0x53, or 'S'.
+ *******************************************************/
+#define CDROMPAUSE             0x5301 /* Pause Audio Operation */ 
+#define CDROMRESUME            0x5302 /* Resume paused Audio Operation */
+#define CDROMPLAYMSF           0x5303 /* Play Audio MSF (struct cdrom_msf) */
+#define CDROMPLAYTRKIND                0x5304 /* Play Audio Track/index 
+                                           (struct cdrom_ti) */
+#define CDROMREADTOCHDR                0x5305 /* Read TOC header 
+                                           (struct cdrom_tochdr) */
+#define CDROMREADTOCENTRY      0x5306 /* Read TOC entry 
+                                           (struct cdrom_tocentry) */
+#define CDROMSTOP              0x5307 /* Stop the cdrom drive */
+#define CDROMSTART             0x5308 /* Start the cdrom drive */
+#define CDROMEJECT             0x5309 /* Ejects the cdrom media */
+#define CDROMVOLCTRL           0x530a /* Control output volume 
+                                           (struct cdrom_volctrl) */
+#define CDROMSUBCHNL           0x530b /* Read subchannel data 
+                                           (struct cdrom_subchnl) */
+#define CDROMREADMODE2         0x530c /* Read CDROM mode 2 data (2336 Bytes) 
+                                           (struct cdrom_read) */
+#define CDROMREADMODE1         0x530d /* Read CDROM mode 1 data (2048 Bytes)
+                                           (struct cdrom_read) */
+#define CDROMREADAUDIO         0x530e /* (struct cdrom_read_audio) */
+#define CDROMEJECT_SW          0x530f /* enable(1)/disable(0) auto-ejecting */
+#define CDROMMULTISESSION      0x5310 /* Obtain the start-of-last-session 
+                                           address of multi session disks 
+                                           (struct cdrom_multisession) */
+#define CDROM_GET_MCN          0x5311 /* Obtain the "Universal Product Code" 
+                                           if available (struct cdrom_mcn) */
+#define CDROM_GET_UPC          CDROM_GET_MCN  /* This one is deprecated, 
+                                          but here anyway for compatibility */
+#define CDROMRESET             0x5312 /* hard-reset the drive */
+#define CDROMVOLREAD           0x5313 /* Get the drive's volume setting 
+                                          (struct cdrom_volctrl) */
+#define CDROMREADRAW           0x5314  /* read data in raw mode (2352 Bytes)
+                                           (struct cdrom_read) */
+/* 
+ * These ioctls are used only used in aztcd.c and optcd.c
+ */
+#define CDROMREADCOOKED                0x5315  /* read data in cooked mode */
+#define CDROMSEEK              0x5316  /* seek msf address */
+  
+/*
+ * This ioctl is only used by the scsi-cd driver.  
+   It is for playing audio in logical block addressing mode.
+ */
+#define CDROMPLAYBLK           0x5317  /* (struct cdrom_blk) */
+
+/* 
+ * These ioctls are only used in optcd.c
+ */
+#define CDROMREADALL           0x5318  /* read all 2646 bytes */
+
+/* 
+ * These ioctls are (now) only in ide-cd.c for controlling 
+ * drive spindown time.  They should be implemented in the
+ * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10,
+ * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE...
+ *  -Erik
+ */
+#define CDROMGETSPINDOWN        0x531d
+#define CDROMSETSPINDOWN        0x531e
+
+/* 
+ * These ioctls are implemented through the uniform CD-ROM driver
+ * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM
+ * drivers are eventually ported to the uniform CD-ROM driver interface.
+ */
+#define CDROMCLOSETRAY         0x5319  /* pendant of CDROMEJECT */
+#define CDROM_SET_OPTIONS      0x5320  /* Set behavior options */
+#define CDROM_CLEAR_OPTIONS    0x5321  /* Clear behavior options */
+#define CDROM_SELECT_SPEED     0x5322  /* Set the CD-ROM speed */
+#define CDROM_SELECT_DISC      0x5323  /* Select disc (for juke-boxes) */
+#define CDROM_MEDIA_CHANGED    0x5325  /* Check is media changed  */
+#define CDROM_DRIVE_STATUS     0x5326  /* Get tray position, etc. */
+#define CDROM_DISC_STATUS      0x5327  /* Get disc type, etc. */
+#define CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */
+#define CDROM_LOCKDOOR         0x5329  /* lock or unlock door */
+#define CDROM_DEBUG            0x5330  /* Turn debug messages on/off */
+#define CDROM_GET_CAPABILITY   0x5331  /* get capabilities */
+
+/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386.
+ * Future CDROM ioctls should be kept below 0x537F
+ */
+
+/* This ioctl is only used by sbpcd at the moment */
+#define CDROMAUDIOBUFSIZ        0x5382 /* set the audio buffer size */
+                                       /* conflict with SCSI_IOCTL_GET_IDLUN */
+
+/* DVD-ROM Specific ioctls */
+#define DVD_READ_STRUCT                0x5390  /* Read structure */
+#define DVD_WRITE_STRUCT       0x5391  /* Write structure */
+#define DVD_AUTH               0x5392  /* Authentication */
+
+#define CDROM_SEND_PACKET      0x5393  /* send a packet to the drive */
+#define CDROM_NEXT_WRITABLE    0x5394  /* get next writable block */
+#define CDROM_LAST_WRITTEN     0x5395  /* get last block written on disc */
+
+/*******************************************************
+ * CDROM IOCTL structures
+ *******************************************************/
+
+/* Address in MSF format */
+struct cdrom_msf0              
+{
+       __u8    minute;
+       __u8    second;
+       __u8    frame;
+};
+
+/* Address in either MSF or logical format */
+union cdrom_addr               
+{
+       struct cdrom_msf0       msf;
+       int                     lba;
+};
+
+/* This struct is used by the CDROMPLAYMSF ioctl */ 
+struct cdrom_msf 
+{
+       __u8    cdmsf_min0;     /* start minute */
+       __u8    cdmsf_sec0;     /* start second */
+       __u8    cdmsf_frame0;   /* start frame */
+       __u8    cdmsf_min1;     /* end minute */
+       __u8    cdmsf_sec1;     /* end second */
+       __u8    cdmsf_frame1;   /* end frame */
+};
+
+/* This struct is used by the CDROMPLAYTRKIND ioctl */
+struct cdrom_ti 
+{
+       __u8    cdti_trk0;      /* start track */
+       __u8    cdti_ind0;      /* start index */
+       __u8    cdti_trk1;      /* end track */
+       __u8    cdti_ind1;      /* end index */
+};
+
+/* This struct is used by the CDROMREADTOCHDR ioctl */
+struct cdrom_tochdr    
+{
+       __u8    cdth_trk0;      /* start track */
+       __u8    cdth_trk1;      /* end track */
+};
+
+/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */
+struct cdrom_volctrl
+{
+       __u8    channel0;
+       __u8    channel1;
+       __u8    channel2;
+       __u8    channel3;
+};
+
+/* This struct is used by the CDROMSUBCHNL ioctl */
+struct cdrom_subchnl 
+{
+       __u8    cdsc_format;
+       __u8    cdsc_audiostatus;
+       __u8    cdsc_adr:       4;
+       __u8    cdsc_ctrl:      4;
+       __u8    cdsc_trk;
+       __u8    cdsc_ind;
+       union cdrom_addr cdsc_absaddr;
+       union cdrom_addr cdsc_reladdr;
+};
+
+
+/* This struct is used by the CDROMREADTOCENTRY ioctl */
+struct cdrom_tocentry 
+{
+       __u8    cdte_track;
+       __u8    cdte_adr        :4;
+       __u8    cdte_ctrl       :4;
+       __u8    cdte_format;
+       union cdrom_addr cdte_addr;
+       __u8    cdte_datamode;
+};
+
+/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */
+struct cdrom_read      
+{
+       int     cdread_lba;
+       char    *cdread_bufaddr;
+       int     cdread_buflen;
+};
+
+/* This struct is used by the CDROMREADAUDIO ioctl */
+struct cdrom_read_audio
+{
+       union cdrom_addr addr; /* frame address */
+       __u8 addr_format;      /* CDROM_LBA or CDROM_MSF */
+       int nframes;           /* number of 2352-byte-frames to read at once */
+       __u8 *buf;      /* frame buffer (size: nframes*2352 bytes) */
+};
+
+/* This struct is used with the CDROMMULTISESSION ioctl */
+struct cdrom_multisession
+{
+       union cdrom_addr addr; /* frame address: start-of-last-session 
+                                  (not the new "frame 16"!).  Only valid
+                                  if the "xa_flag" is true. */
+       __u8 xa_flag;        /* 1: "is XA disk" */
+       __u8 addr_format;    /* CDROM_LBA or CDROM_MSF */
+};
+
+/* This struct is used with the CDROM_GET_MCN ioctl.  
+ * Very few audio discs actually have Universal Product Code information, 
+ * which should just be the Medium Catalog Number on the box.  Also note 
+ * that the way the codeis written on CD is _not_ uniform across all discs!
+ */  
+struct cdrom_mcn 
+{
+  __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
+};
+
+/* This is used by the CDROMPLAYBLK ioctl */
+struct cdrom_blk 
+{
+       unsigned from;
+       unsigned short len;
+};
+
+#define CDROM_PACKET_SIZE      12
+
+#define CGC_DATA_UNKNOWN       0
+#define CGC_DATA_WRITE         1
+#define CGC_DATA_READ          2
+#define CGC_DATA_NONE          3
+
+/* for CDROM_PACKET_COMMAND ioctl */
+struct cdrom_generic_command
+{
+       unsigned char           cmd[CDROM_PACKET_SIZE];
+       unsigned char           *buffer;
+       unsigned int            buflen;
+       int                     stat;
+       struct request_sense    *sense;
+       unsigned char           data_direction;
+       int                     quiet;
+       int                     timeout;
+       void                    *reserved[1];   /* unused, actually */
+};
+
+/*
+ * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336, 
+ * 2340, or 2352 bytes long.  
+
+*         Sector types of the standard CD-ROM data formats:
+ *
+ * format   sector type               user data size (bytes)
+ * -----------------------------------------------------------------------------
+ *   1     (Red Book)    CD-DA          2352    (CD_FRAMESIZE_RAW)
+ *   2     (Yellow Book) Mode1 Form1    2048    (CD_FRAMESIZE)
+ *   3     (Yellow Book) Mode1 Form2    2336    (CD_FRAMESIZE_RAW0)
+ *   4     (Green Book)  Mode2 Form1    2048    (CD_FRAMESIZE)
+ *   5     (Green Book)  Mode2 Form2    2328    (2324+4 spare bytes)
+ *
+ *
+ *       The layout of the standard CD-ROM data formats:
+ * -----------------------------------------------------------------------------
+ * - audio (red):                  | audio_sample_bytes |
+ *                                 |        2352        |
+ *
+ * - data (yellow, mode1):         | sync - head - data - EDC - zero - ECC |
+ *                                 |  12  -   4  - 2048 -  4  -   8  - 276 |
+ *
+ * - data (yellow, mode2):         | sync - head - data |
+ *                                 |  12  -   4  - 2336 |
+ *
+ * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC |
+ *                                 |  12  -   4  -  8  - 2048 -  4  - 276 |
+ *
+ * - XA data (green, mode2 form2): | sync - head - sub - data - Spare |
+ *                                 |  12  -   4  -  8  - 2324 -  4    |
+ *
+ */
+
+/* Some generally useful CD-ROM information -- mostly based on the above */
+#define CD_MINS              74 /* max. minutes per CD, not really a limit */
+#define CD_SECS              60 /* seconds per minute */
+#define CD_FRAMES            75 /* frames per second */
+#define CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */
+#define CD_MSF_OFFSET       150 /* MSF numbering offset of first frame */
+#define CD_CHUNK_SIZE        24 /* lowest-level "data bytes piece" */
+#define CD_NUM_OF_CHUNKS     98 /* chunks per frame */
+#define CD_FRAMESIZE_SUB     96 /* subchannel data "frame" size */
+#define CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */
+#define CD_SUBHEAD_SIZE       8 /* subheader bytes per raw XA data frame */
+#define CD_EDC_SIZE           4 /* bytes EDC per most raw data frame types */
+#define CD_ZERO_SIZE          8 /* bytes zero per yellow book mode 1 frame */
+#define CD_ECC_SIZE         276 /* bytes ECC per most raw data frame types */
+#define CD_FRAMESIZE       2048 /* bytes per frame, "cooked" mode */
+#define CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */
+#define CD_FRAMESIZE_RAWER 2646 /* The maximum possible returned bytes */ 
+/* most drives don't deliver everything: */
+#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/
+#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/
+
+#define CD_XA_HEAD        (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */
+#define CD_XA_TAIL        (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */
+#define CD_XA_SYNC_HEAD   (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */
+
+/* CD-ROM address types (cdrom_tocentry.cdte_format) */
+#define        CDROM_LBA 0x01 /* "logical block": first frame is #0 */
+#define        CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */
+
+/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */
+#define        CDROM_DATA_TRACK        0x04
+
+/* The leadout track is always 0xAA, regardless of # of tracks on disc */
+#define        CDROM_LEADOUT           0xAA
+
+/* audio states (from SCSI-2, but seen with other drives, too) */
+#define        CDROM_AUDIO_INVALID     0x00    /* audio status not supported */
+#define        CDROM_AUDIO_PLAY        0x11    /* audio play operation in progress */
+#define        CDROM_AUDIO_PAUSED      0x12    /* audio play operation paused */
+#define        CDROM_AUDIO_COMPLETED   0x13    /* audio play successfully completed */
+#define        CDROM_AUDIO_ERROR       0x14    /* audio play stopped due to error */
+#define        CDROM_AUDIO_NO_STATUS   0x15    /* no current audio status to return */
+
+/* capability flags used with the uniform CD-ROM driver */ 
+#define CDC_CLOSE_TRAY         0x1     /* caddy systems _can't_ close */
+#define CDC_OPEN_TRAY          0x2     /* but _can_ eject.  */
+#define CDC_LOCK               0x4     /* disable manual eject */
+#define CDC_SELECT_SPEED       0x8     /* programmable speed */
+#define CDC_SELECT_DISC                0x10    /* select disc from juke-box */
+#define CDC_MULTI_SESSION      0x20    /* read sessions>1 */
+#define CDC_MCN                        0x40    /* Medium Catalog Number */
+#define CDC_MEDIA_CHANGED      0x80    /* media changed */
+#define CDC_PLAY_AUDIO         0x100   /* audio functions */
+#define CDC_RESET               0x200   /* hard reset device */
+#define CDC_DRIVE_STATUS        0x800   /* driver implements drive status */
+#define CDC_GENERIC_PACKET     0x1000  /* driver implements generic packets */
+#define CDC_CD_R               0x2000  /* drive is a CD-R */
+#define CDC_CD_RW              0x4000  /* drive is a CD-RW */
+#define CDC_DVD                        0x8000  /* drive is a DVD */
+#define CDC_DVD_R              0x10000 /* drive can write DVD-R */
+#define CDC_DVD_RAM            0x20000 /* drive can write DVD-RAM */
+#define CDC_MO_DRIVE           0x40000 /* drive is an MO device */
+#define CDC_MRW                        0x80000 /* drive can read MRW */
+#define CDC_MRW_W              0x100000 /* drive can write MRW */
+#define CDC_RAM                        0x200000 /* ok to open for WRITE */
+
+/* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */
+#define CDS_NO_INFO            0       /* if not implemented */
+#define CDS_NO_DISC            1
+#define CDS_TRAY_OPEN          2
+#define CDS_DRIVE_NOT_READY    3
+#define CDS_DISC_OK            4
+
+/* return values for the CDROM_DISC_STATUS ioctl */
+/* can also return CDS_NO_[INFO|DISC], from above */
+#define CDS_AUDIO              100
+#define CDS_DATA_1             101
+#define CDS_DATA_2             102
+#define CDS_XA_2_1             103
+#define CDS_XA_2_2             104
+#define CDS_MIXED              105
+
+/* User-configurable behavior options for the uniform CD-ROM driver */
+#define CDO_AUTO_CLOSE         0x1     /* close tray on first open() */
+#define CDO_AUTO_EJECT         0x2     /* open tray on last release() */
+#define CDO_USE_FFLAGS         0x4     /* use O_NONBLOCK information on open */
+#define CDO_LOCK               0x8     /* lock tray on open files */
+#define CDO_CHECK_TYPE         0x10    /* check type on open for data */
+
+/* Special codes used when specifying changer slots. */
+#define CDSL_NONE              (INT_MAX-1)
+#define CDSL_CURRENT           INT_MAX
+
+/* For partition based multisession access. IDE can handle 64 partitions
+ * per drive - SCSI CD-ROM's use minors to differentiate between the
+ * various drives, so we can't do multisessions the same way there.
+ * Use the -o session=x option to mount on them.
+ */
+#define CD_PART_MAX            64
+#define CD_PART_MASK           (CD_PART_MAX - 1)
+
+/*********************************************************************
+ * Generic Packet commands, MMC commands, and such
+ *********************************************************************/
+
+ /* The generic packet command opcodes for CD/DVD Logical Units,
+ * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
+#define GPCMD_BLANK                        0xa1
+#define GPCMD_CLOSE_TRACK                  0x5b
+#define GPCMD_FLUSH_CACHE                  0x35
+#define GPCMD_FORMAT_UNIT                  0x04
+#define GPCMD_GET_CONFIGURATION                    0x46
+#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
+#define GPCMD_GET_PERFORMANCE              0xac
+#define GPCMD_INQUIRY                      0x12
+#define GPCMD_LOAD_UNLOAD                  0xa6
+#define GPCMD_MECHANISM_STATUS             0xbd
+#define GPCMD_MODE_SELECT_10               0x55
+#define GPCMD_MODE_SENSE_10                0x5a
+#define GPCMD_PAUSE_RESUME                 0x4b
+#define GPCMD_PLAY_AUDIO_10                0x45
+#define GPCMD_PLAY_AUDIO_MSF               0x47
+#define GPCMD_PLAY_AUDIO_TI                0x48
+#define GPCMD_PLAY_CD                      0xbc
+#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL  0x1e
+#define GPCMD_READ_10                      0x28
+#define GPCMD_READ_12                      0xa8
+#define GPCMD_READ_BUFFER                  0x3c
+#define GPCMD_READ_BUFFER_CAPACITY         0x5c
+#define GPCMD_READ_CDVD_CAPACITY           0x25
+#define GPCMD_READ_CD                      0xbe
+#define GPCMD_READ_CD_MSF                  0xb9
+#define GPCMD_READ_DISC_INFO               0x51
+#define GPCMD_READ_DVD_STRUCTURE           0xad
+#define GPCMD_READ_FORMAT_CAPACITIES       0x23
+#define GPCMD_READ_HEADER                  0x44
+#define GPCMD_READ_TRACK_RZONE_INFO        0x52
+#define GPCMD_READ_SUBCHANNEL              0x42
+#define GPCMD_READ_TOC_PMA_ATIP                    0x43
+#define GPCMD_REPAIR_RZONE_TRACK           0x58
+#define GPCMD_REPORT_KEY                   0xa4
+#define GPCMD_REQUEST_SENSE                0x03
+#define GPCMD_RESERVE_RZONE_TRACK          0x53
+#define GPCMD_SEND_CUE_SHEET               0x5d
+#define GPCMD_SCAN                         0xba
+#define GPCMD_SEEK                         0x2b
+#define GPCMD_SEND_DVD_STRUCTURE           0xbf
+#define GPCMD_SEND_EVENT                   0xa2
+#define GPCMD_SEND_KEY                     0xa3
+#define GPCMD_SEND_OPC                     0x54
+#define GPCMD_SET_READ_AHEAD               0xa7
+#define GPCMD_SET_STREAMING                0xb6
+#define GPCMD_START_STOP_UNIT              0x1b
+#define GPCMD_STOP_PLAY_SCAN               0x4e
+#define GPCMD_TEST_UNIT_READY              0x00
+#define GPCMD_VERIFY_10                            0x2f
+#define GPCMD_WRITE_10                     0x2a
+#define GPCMD_WRITE_12                     0xaa
+#define GPCMD_WRITE_AND_VERIFY_10          0x2e
+#define GPCMD_WRITE_BUFFER                 0x3b
+/* This is listed as optional in ATAPI 2.6, but is (curiously) 
+ * missing from Mt. Fuji, Table 57.  It _is_ mentioned in Mt. Fuji
+ * Table 377 as an MMC command for SCSi devices though...  Most ATAPI
+ * drives support it. */
+#define GPCMD_SET_SPEED                            0xbb
+/* This seems to be a SCSI specific CD-ROM opcode 
+ * to play data at track/index */
+#define GPCMD_PLAYAUDIO_TI                 0x48
+/*
+ * From MS Media Status Notification Support Specification. For
+ * older drives only.
+ */
+#define GPCMD_GET_MEDIA_STATUS             0xda
+
+/* Mode page codes for mode sense/set */
+#define GPMODE_VENDOR_PAGE             0x00
+#define GPMODE_R_W_ERROR_PAGE          0x01
+#define GPMODE_WRITE_PARMS_PAGE                0x05
+#define GPMODE_WCACHING_PAGE           0x08
+#define GPMODE_AUDIO_CTL_PAGE          0x0e
+#define GPMODE_POWER_PAGE              0x1a
+#define GPMODE_FAULT_FAIL_PAGE         0x1c
+#define GPMODE_TO_PROTECT_PAGE         0x1d
+#define GPMODE_CAPABILITIES_PAGE       0x2a
+#define GPMODE_ALL_PAGES               0x3f
+/* Not in Mt. Fuji, but in ATAPI 2.6 -- deprecated now in favor
+ * of MODE_SENSE_POWER_PAGE */
+#define GPMODE_CDROM_PAGE              0x0d
+
+
+
+/* DVD struct types */
+#define DVD_STRUCT_PHYSICAL    0x00
+#define DVD_STRUCT_COPYRIGHT   0x01
+#define DVD_STRUCT_DISCKEY     0x02
+#define DVD_STRUCT_BCA         0x03
+#define DVD_STRUCT_MANUFACT    0x04
+
+struct dvd_layer {
+       __u8 book_version       : 4;
+       __u8 book_type          : 4;
+       __u8 min_rate           : 4;
+       __u8 disc_size          : 4;
+       __u8 layer_type         : 4;
+       __u8 track_path         : 1;
+       __u8 nlayers            : 2;
+       __u8 track_density      : 4;
+       __u8 linear_density     : 4;
+       __u8 bca                : 1;
+       __u32 start_sector;
+       __u32 end_sector;
+       __u32 end_sector_l0;
+};
+
+#define DVD_LAYERS     4
+
+struct dvd_physical {
+       __u8 type;
+       __u8 layer_num;
+       struct dvd_layer layer[DVD_LAYERS];
+};
+
+struct dvd_copyright {
+       __u8 type;
+
+       __u8 layer_num;
+       __u8 cpst;
+       __u8 rmi;
+};
+
+struct dvd_disckey {
+       __u8 type;
+
+       unsigned agid           : 2;
+       __u8 value[2048];
+};
+
+struct dvd_bca {
+       __u8 type;
+
+       int len;
+       __u8 value[188];
+};
+
+struct dvd_manufact {
+       __u8 type;
+
+       __u8 layer_num;
+       int len;
+       __u8 value[2048];
+};
+
+typedef union {
+       __u8 type;
+
+       struct dvd_physical     physical;
+       struct dvd_copyright    copyright;
+       struct dvd_disckey      disckey;
+       struct dvd_bca          bca;
+       struct dvd_manufact     manufact;
+} dvd_struct;
+
+/*
+ * DVD authentication ioctl
+ */
+
+/* Authentication states */
+#define DVD_LU_SEND_AGID       0
+#define DVD_HOST_SEND_CHALLENGE        1
+#define DVD_LU_SEND_KEY1       2
+#define DVD_LU_SEND_CHALLENGE  3
+#define DVD_HOST_SEND_KEY2     4
+
+/* Termination states */
+#define DVD_AUTH_ESTABLISHED   5
+#define DVD_AUTH_FAILURE       6
+
+/* Other functions */
+#define DVD_LU_SEND_TITLE_KEY  7
+#define DVD_LU_SEND_ASF                8
+#define DVD_INVALIDATE_AGID    9
+#define DVD_LU_SEND_RPC_STATE  10
+#define DVD_HOST_SEND_RPC_STATE        11
+
+/* State data */
+typedef __u8 dvd_key[5];               /* 40-bit value, MSB is first elem. */
+typedef __u8 dvd_challenge[10];        /* 80-bit value, MSB is first elem. */
+
+struct dvd_lu_send_agid {
+       __u8 type;
+       unsigned agid           : 2;
+};
+
+struct dvd_host_send_challenge {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_challenge chal;
+};
+
+struct dvd_send_key {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_challenge chal;
+};
+
+#define DVD_CPM_NO_COPYRIGHT   0
+#define DVD_CPM_COPYRIGHTED    1
+
+#define DVD_CP_SEC_NONE                0
+#define DVD_CP_SEC_EXIST       1
+
+#define DVD_CGMS_UNRESTRICTED  0
+#define DVD_CGMS_SINGLE                2
+#define DVD_CGMS_RESTRICTED    3
+
+struct dvd_lu_send_title_key {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_key title_key;
+       int lba;
+       unsigned cpm            : 1;
+       unsigned cp_sec         : 1;
+       unsigned cgms           : 2;
+};
+
+struct dvd_lu_send_asf {
+       __u8 type;
+       unsigned agid           : 2;
+
+       unsigned asf            : 1;
+};
+
+struct dvd_host_send_rpcstate {
+       __u8 type;
+       __u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+       __u8 type               : 2;
+       __u8 vra                : 3;
+       __u8 ucca               : 3;
+       __u8 region_mask;
+       __u8 rpc_scheme;
+};
+
+typedef union {
+       __u8 type;
+
+       struct dvd_lu_send_agid         lsa;
+       struct dvd_host_send_challenge  hsc;
+       struct dvd_send_key             lsk;
+       struct dvd_lu_send_challenge    lsc;
+       struct dvd_send_key             hsk;
+       struct dvd_lu_send_title_key    lstk;
+       struct dvd_lu_send_asf          lsasf;
+       struct dvd_host_send_rpcstate   hrpcs;
+       struct dvd_lu_send_rpcstate     lrpcs;
+} dvd_authinfo;
+
+struct request_sense {
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 valid              : 1;
+       __u8 error_code         : 7;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 error_code         : 7;
+       __u8 valid              : 1;
+#endif
+       __u8 segment_number;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 ili                : 1;
+       __u8 reserved2          : 1;
+       __u8 sense_key          : 4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 sense_key          : 4;
+       __u8 reserved2          : 1;
+       __u8 ili                : 1;
+       __u8 reserved1          : 2;
+#endif
+       __u8 information[4];
+       __u8 add_sense_len;
+       __u8 command_info[4];
+       __u8 asc;
+       __u8 ascq;
+       __u8 fruc;
+       __u8 sks[3];
+       __u8 asb[46];
+};
+
+/*
+ * feature profile
+ */
+#define CDF_RWRT       0x0020  /* "Random Writable" */
+#define CDF_HWDM       0x0024  /* "Hardware Defect Management" */
+#define CDF_MRW        0x0028
+
+/*
+ * media status bits
+ */
+#define CDM_MRW_NOTMRW                 0
+#define CDM_MRW_BGFORMAT_INACTIVE      1
+#define CDM_MRW_BGFORMAT_ACTIVE                2
+#define CDM_MRW_BGFORMAT_COMPLETE      3
+
+/*
+ * mrw address spaces
+ */
+#define MRW_LBA_DMA                    0
+#define MRW_LBA_GAA                    1
+
+/*
+ * mrw mode pages (first is deprecated) -- probed at init time and
+ * cdi->mrw_mode_page is set
+ */
+#define MRW_MODE_PC_PRE1               0x2c
+#define MRW_MODE_PC                    0x03
+
+struct mrw_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 feature_version    : 4;
+       __u8 persistent         : 1;
+       __u8 curr               : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr               : 1;
+       __u8 persistent         : 1;
+       __u8 feature_version    : 4;
+       __u8 reserved1          : 2;
+#endif
+       __u8 add_len;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2          : 7;
+       __u8 write              : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 write              : 1;
+       __u8 reserved2          : 7;
+#endif
+       __u8 reserved3;
+       __u8 reserved4;
+       __u8 reserved5;
+};
+
+/* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */
+struct rwrt_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 feature_version    : 4;
+       __u8 persistent         : 1;
+       __u8 curr               : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr               : 1;
+       __u8 persistent         : 1;
+       __u8 feature_version    : 4;
+       __u8 reserved1          : 2;
+#endif
+       __u8 add_len;
+       __u32 last_lba;
+       __u32 block_size;
+       __u16 blocking;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2          : 7;
+       __u8 page_present       : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 page_present       : 1;
+       __u8 reserved2          : 7;
+#endif
+       __u8 reserved3;
+};
+
+typedef struct {
+       __be16 disc_information_length;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1                  : 3;
+        __u8 erasable                  : 1;
+        __u8 border_status             : 2;
+        __u8 disc_status               : 2;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+        __u8 disc_status               : 2;
+        __u8 border_status             : 2;
+        __u8 erasable                  : 1;
+       __u8 reserved1                  : 3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 n_first_track;
+       __u8 n_sessions_lsb;
+       __u8 first_track_lsb;
+       __u8 last_track_lsb;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 did_v                      : 1;
+        __u8 dbc_v                     : 1;
+        __u8 uru                       : 1;
+        __u8 reserved2                 : 2;
+       __u8 dbit                       : 1;
+       __u8 mrw_status                 : 2;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 mrw_status                 : 2;
+       __u8 dbit                       : 1;
+        __u8 reserved2                 : 2;
+        __u8 uru                       : 1;
+        __u8 dbc_v                     : 1;
+       __u8 did_v                      : 1;
+#endif
+       __u8 disc_type;
+       __u8 n_sessions_msb;
+       __u8 first_track_msb;
+       __u8 last_track_msb;
+       __u32 disc_id;
+       __u32 lead_in;
+       __u32 lead_out;
+       __u8 disc_bar_code[8];
+       __u8 reserved3;
+       __u8 n_opc;
+} disc_information;
+
+typedef struct {
+       __be16 track_information_length;
+       __u8 track_lsb;
+       __u8 session_lsb;
+       __u8 reserved1;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2                  : 2;
+        __u8 damage                    : 1;
+        __u8 copy                      : 1;
+        __u8 track_mode                        : 4;
+       __u8 rt                         : 1;
+       __u8 blank                      : 1;
+       __u8 packet                     : 1;
+       __u8 fp                         : 1;
+       __u8 data_mode                  : 4;
+       __u8 reserved3                  : 6;
+       __u8 lra_v                      : 1;
+       __u8 nwa_v                      : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+        __u8 track_mode                        : 4;
+        __u8 copy                      : 1;
+        __u8 damage                    : 1;
+       __u8 reserved2                  : 2;
+       __u8 data_mode                  : 4;
+       __u8 fp                         : 1;
+       __u8 packet                     : 1;
+       __u8 blank                      : 1;
+       __u8 rt                         : 1;
+       __u8 nwa_v                      : 1;
+       __u8 lra_v                      : 1;
+       __u8 reserved3                  : 6;
+#endif
+       __be32 track_start;
+       __be32 next_writable;
+       __be32 free_blocks;
+       __be32 fixed_packet_size;
+       __be32 track_size;
+       __be32 last_rec_address;
+} track_information;
+
+struct feature_header {
+       __u32 data_len;
+       __u8 reserved1;
+       __u8 reserved2;
+       __u16 curr_profile;
+};
+
+struct mode_page_header {
+       __be16 mode_data_length;
+       __u8 medium_type;
+       __u8 reserved1;
+       __u8 reserved2;
+       __u8 reserved3;
+       __be16 desc_length;
+};
+
+/* removable medium feature descriptor */
+struct rm_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1:2;
+       __u8 feature_version:4;
+       __u8 persistent:1;
+       __u8 curr:1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr:1;
+       __u8 persistent:1;
+       __u8 feature_version:4;
+       __u8 reserved1:2;
+#endif
+       __u8 add_len;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 mech_type:3;
+       __u8 load:1;
+       __u8 eject:1;
+       __u8 pvnt_jmpr:1;
+       __u8 dbml:1;
+       __u8 lock:1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 lock:1;
+       __u8 dbml:1;
+       __u8 pvnt_jmpr:1;
+       __u8 eject:1;
+       __u8 load:1;
+       __u8 mech_type:3;
+#endif
+       __u8 reserved2;
+       __u8 reserved3;
+       __u8 reserved4;
+};
+
+#endif /* _LINUX_CDROM_H */
diff --git a/lib/libdss-include/include/linux/cgroupstats.h b/lib/libdss-include/include/linux/cgroupstats.h
new file mode 100644 (file)
index 0000000..3753c33
--- /dev/null
@@ -0,0 +1,71 @@
+/* cgroupstats.h - exporting per-cgroup statistics
+ *
+ * Copyright IBM Corporation, 2007
+ * Author Balbir Singh <balbir@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _LINUX_CGROUPSTATS_H
+#define _LINUX_CGROUPSTATS_H
+
+#include <linux/types.h>
+#include <linux/taskstats.h>
+
+/*
+ * Data shared between user space and kernel space on a per cgroup
+ * basis. This data is shared using taskstats.
+ *
+ * Most of these states are derived by looking at the task->state value
+ * For the nr_io_wait state, a flag in the delay accounting structure
+ * indicates that the task is waiting on IO
+ *
+ * Each member is aligned to a 8 byte boundary.
+ */
+struct cgroupstats {
+       __u64   nr_sleeping;            /* Number of tasks sleeping */
+       __u64   nr_running;             /* Number of tasks running */
+       __u64   nr_stopped;             /* Number of tasks in stopped state */
+       __u64   nr_uninterruptible;     /* Number of tasks in uninterruptible */
+                                       /* state */
+       __u64   nr_io_wait;             /* Number of tasks waiting on IO */
+};
+
+/*
+ * Commands sent from userspace
+ * Not versioned. New commands should only be inserted at the enum's end
+ * prior to __CGROUPSTATS_CMD_MAX
+ */
+
+enum {
+       CGROUPSTATS_CMD_UNSPEC = __TASKSTATS_CMD_MAX,   /* Reserved */
+       CGROUPSTATS_CMD_GET,            /* user->kernel request/get-response */
+       CGROUPSTATS_CMD_NEW,            /* kernel->user event */
+       __CGROUPSTATS_CMD_MAX,
+};
+
+#define CGROUPSTATS_CMD_MAX (__CGROUPSTATS_CMD_MAX - 1)
+
+enum {
+       CGROUPSTATS_TYPE_UNSPEC = 0,    /* Reserved */
+       CGROUPSTATS_TYPE_CGROUP_STATS,  /* contains name + stats */
+       __CGROUPSTATS_TYPE_MAX,
+};
+
+#define CGROUPSTATS_TYPE_MAX (__CGROUPSTATS_TYPE_MAX - 1)
+
+enum {
+       CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+       CGROUPSTATS_CMD_ATTR_FD,
+       __CGROUPSTATS_CMD_ATTR_MAX,
+};
+
+#define CGROUPSTATS_CMD_ATTR_MAX (__CGROUPSTATS_CMD_ATTR_MAX - 1)
+
+#endif /* _LINUX_CGROUPSTATS_H */
diff --git a/lib/libdss-include/include/linux/chio.h b/lib/libdss-include/include/linux/chio.h
new file mode 100644 (file)
index 0000000..e97cd98
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * ioctl interface for the scsi media changer driver
+ */
+
+/* changer element types */
+#define CHET_MT   0    /* media transport element (robot) */
+#define CHET_ST   1    /* storage element (media slots) */
+#define CHET_IE   2    /* import/export element */
+#define CHET_DT   3    /* data transfer element (tape/cdrom/whatever) */
+#define CHET_V1   4    /* vendor specific #1 */
+#define CHET_V2   5    /* vendor specific #2 */
+#define CHET_V3   6    /* vendor specific #3 */
+#define CHET_V4   7    /* vendor specific #4 */
+
+
+/*
+ * CHIOGPARAMS
+ *    query changer properties
+ *
+ * CHIOVGPARAMS
+ *    query vendor-specific element types
+ *
+ *    accessing elements works by specifing type and unit of the element.
+ *    for example, storage elements are addressed with type = CHET_ST and
+ *    unit = 0 .. cp_nslots-1
+ *
+ */
+struct changer_params {
+       int cp_curpicker;  /* current transport element */
+       int cp_npickers;   /* number of transport elements      (CHET_MT) */
+       int cp_nslots;     /* number of storage elements        (CHET_ST) */
+       int cp_nportals;   /* number of import/export elements  (CHET_IE) */
+       int cp_ndrives;    /* number of data transfer elements  (CHET_DT) */
+};
+struct changer_vendor_params {
+       int  cvp_n1;       /* number of vendor specific elems   (CHET_V1) */
+       char cvp_label1[16];
+       int  cvp_n2;       /* number of vendor specific elems   (CHET_V2) */
+       char cvp_label2[16];
+       int  cvp_n3;       /* number of vendor specific elems   (CHET_V3) */
+       char cvp_label3[16];
+       int  cvp_n4;       /* number of vendor specific elems   (CHET_V4) */
+       char cvp_label4[16];
+       int  reserved[8];
+};
+
+
+/*
+ * CHIOMOVE
+ *    move a medium from one element to another
+ */
+struct changer_move {
+       int cm_fromtype;        /* type/unit of source element */
+       int cm_fromunit;        
+       int cm_totype;  /* type/unit of destination element */
+       int cm_tounit;
+       int cm_flags;
+};
+#define CM_INVERT   1   /* flag: rotate media (for double-sided like MOD) */
+
+
+/*
+ * CHIOEXCHANGE
+ *    move one medium from element #1 to element #2,
+ *    and another one from element #2 to element #3.
+ *    element #1 and #3 are allowed to be identical.
+ */
+struct changer_exchange {
+       int ce_srctype;     /* type/unit of element #1 */
+       int ce_srcunit;
+       int ce_fdsttype;    /* type/unit of element #2 */
+       int ce_fdstunit;
+       int ce_sdsttype;    /* type/unit of element #3 */
+       int ce_sdstunit;
+       int ce_flags;
+};
+#define CE_INVERT1   1
+#define CE_INVERT2   2
+
+
+/*
+ * CHIOPOSITION
+ *    move the transport element (robot arm) to a specific element.
+ */
+struct changer_position {
+       int cp_type;
+       int cp_unit;
+       int cp_flags;
+};
+#define CP_INVERT   1
+
+
+/*
+ * CHIOGSTATUS
+ *    get element status for all elements of a specific type
+ */
+struct changer_element_status {
+       int             ces_type;
+       unsigned char   *ces_data;
+};
+#define CESTATUS_FULL     0x01 /* full */
+#define CESTATUS_IMPEXP   0x02 /* media was imported (inserted by sysop) */
+#define CESTATUS_EXCEPT   0x04 /* error condition */
+#define CESTATUS_ACCESS   0x08 /* access allowed */
+#define CESTATUS_EXENAB   0x10 /* element can export media */
+#define CESTATUS_INENAB   0x20 /* element can import media */
+
+
+/*
+ * CHIOGELEM
+ *    get more detailed status information for a single element
+ */
+struct changer_get_element {
+       int     cge_type;        /* type/unit */
+       int     cge_unit;
+       int     cge_status;      /* status */
+       int     cge_errno;       /* errno */
+       int     cge_srctype;     /* source element of the last move/exchange */
+       int     cge_srcunit;
+       int     cge_id;          /* scsi id  (for data transfer elements) */
+       int     cge_lun;         /* scsi lun (for data transfer elements) */
+       char    cge_pvoltag[36]; /* primary volume tag */
+       char    cge_avoltag[36]; /* alternate volume tag */
+       int     cge_flags;
+};
+/* flags */
+#define CGE_ERRNO     0x01       /* errno available       */
+#define CGE_INVERT    0x02       /* media inverted        */
+#define CGE_SRC       0x04       /* media src available   */
+#define CGE_IDLUN     0x08       /* ID+LUN available      */
+#define CGE_PVOLTAG   0x10       /* primary volume tag available */
+#define CGE_AVOLTAG   0x20       /* alternate volume tag available */
+
+
+/*
+ * CHIOSVOLTAG
+ *    set volume tag
+ */
+struct changer_set_voltag {
+       int     csv_type;        /* type/unit */
+       int     csv_unit;
+       char    csv_voltag[36];  /* volume tag */
+       int     csv_flags;
+};
+#define CSV_PVOLTAG   0x01       /* primary volume tag */
+#define CSV_AVOLTAG   0x02       /* alternate volume tag */
+#define CSV_CLEARTAG  0x04       /* clear volume tag */
+
+/* ioctls */
+#define CHIOMOVE       _IOW('c', 1,struct changer_move)
+#define CHIOEXCHANGE   _IOW('c', 2,struct changer_exchange)
+#define CHIOPOSITION   _IOW('c', 3,struct changer_position)
+#define CHIOGPICKER    _IOR('c', 4,int)                        /* not impl. */
+#define CHIOSPICKER    _IOW('c', 5,int)                        /* not impl. */
+#define CHIOGPARAMS    _IOR('c', 6,struct changer_params)
+#define CHIOGSTATUS    _IOW('c', 8,struct changer_element_status)
+#define CHIOGELEM      _IOW('c',16,struct changer_get_element)
+#define CHIOINITELEM   _IO('c',17)
+#define CHIOSVOLTAG    _IOW('c',18,struct changer_set_voltag)
+#define CHIOGVPARAMS   _IOR('c',19,struct changer_vendor_params)
+
+/* ---------------------------------------------------------------------- */
+
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/lib/libdss-include/include/linux/cm4000_cs.h b/lib/libdss-include/include/linux/cm4000_cs.h
new file mode 100644 (file)
index 0000000..f912e74
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _CM4000_H_
+#define _CM4000_H_
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define        MAX_ATR                 33
+
+#define        CM4000_MAX_DEV          4
+
+/* those two structures are passed via ioctl() from/to userspace.  They are
+ * used by existing userspace programs, so I kepth the awkward "bIFSD" naming
+ * not to break compilation of userspace apps. -HW */
+
+typedef struct atreq {
+       __s32 atr_len;
+       unsigned char atr[64];
+       __s32 power_act;
+       unsigned char bIFSD;
+       unsigned char bIFSC;
+} atreq_t;
+
+
+/* what is particularly stupid in the original driver is the arch-dependent
+ * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace
+ * will lay out the structure members differently than the 64bit kernel.
+ *
+ * I've changed "ptsreq.protocol" from "unsigned long" to "__u32".
+ * On 32bit this will make no difference.  With 64bit kernels, it will make
+ * 32bit apps work, too.
+ */
+
+typedef struct ptsreq {
+       __u32 protocol; /*T=0: 2^0, T=1:  2^1*/
+       unsigned char flags;
+       unsigned char pts1;
+       unsigned char pts2;
+       unsigned char pts3;
+} ptsreq_t;
+
+#define        CM_IOC_MAGIC            'c'
+#define        CM_IOC_MAXNR            255
+
+#define        CM_IOCGSTATUS           _IOR (CM_IOC_MAGIC, 0, unsigned char *)
+#define        CM_IOCGATR              _IOWR(CM_IOC_MAGIC, 1, atreq_t *)
+#define        CM_IOCSPTS              _IOW (CM_IOC_MAGIC, 2, ptsreq_t *)
+#define        CM_IOCSRDR              _IO  (CM_IOC_MAGIC, 3)
+#define CM_IOCARDOFF            _IO  (CM_IOC_MAGIC, 4)
+
+#define CM_IOSDBGLVL            _IOW(CM_IOC_MAGIC, 250, int*)
+
+/* card and device states */
+#define        CM_CARD_INSERTED                0x01
+#define        CM_CARD_POWERED                 0x02
+#define        CM_ATR_PRESENT                  0x04
+#define        CM_ATR_VALID                    0x08
+#define        CM_STATE_VALID                  0x0f
+/* extra info only from CM4000 */
+#define        CM_NO_READER                    0x10
+#define        CM_BAD_CARD                     0x20
+
+
+#endif /* _CM4000_H_ */
diff --git a/lib/libdss-include/include/linux/cn_proc.h b/lib/libdss-include/include/linux/cn_proc.h
new file mode 100644 (file)
index 0000000..bf22f5c
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * cn_proc.h - process events connector
+ *
+ * Copyright (C) Matt Helsley, IBM Corp. 2005
+ * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin
+ * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com>
+ * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef CN_PROC_H
+#define CN_PROC_H
+
+#include <linux/types.h>
+
+/*
+ * Userspace sends this enum to register with the kernel that it is listening
+ * for events on the connector.
+ */
+enum proc_cn_mcast_op {
+       PROC_CN_MCAST_LISTEN = 1,
+       PROC_CN_MCAST_IGNORE = 2
+};
+
+/*
+ * From the user's point of view, the process
+ * ID is the thread group ID and thread ID is the internal
+ * kernel "pid". So, fields are assigned as follow:
+ *
+ *  In user space     -  In  kernel space
+ *
+ * parent process ID  =  parent->tgid
+ * parent thread  ID  =  parent->pid
+ * child  process ID  =  child->tgid
+ * child  thread  ID  =  child->pid
+ */
+
+struct proc_event {
+       enum what {
+               /* Use successive bits so the enums can be used to record
+                * sets of events as well
+                */
+               PROC_EVENT_NONE = 0x00000000,
+               PROC_EVENT_FORK = 0x00000001,
+               PROC_EVENT_EXEC = 0x00000002,
+               PROC_EVENT_UID  = 0x00000004,
+               PROC_EVENT_GID  = 0x00000040,
+               PROC_EVENT_SID  = 0x00000080,
+               PROC_EVENT_PTRACE = 0x00000100,
+               PROC_EVENT_COMM = 0x00000200,
+               /* "next" should be 0x00000400 */
+               /* "last" is the last process event: exit,
+                * while "next to last" is coredumping event */
+               PROC_EVENT_COREDUMP = 0x40000000,
+               PROC_EVENT_EXIT = 0x80000000
+       } what;
+       __u32 cpu;
+       __u64 __attribute__((aligned(8))) timestamp_ns;
+               /* Number of nano seconds since system boot */
+       union { /* must be last field of proc_event struct */
+               struct {
+                       __u32 err;
+               } ack;
+
+               struct fork_proc_event {
+                       __kernel_pid_t parent_pid;
+                       __kernel_pid_t parent_tgid;
+                       __kernel_pid_t child_pid;
+                       __kernel_pid_t child_tgid;
+               } fork;
+
+               struct exec_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } exec;
+
+               struct id_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       union {
+                               __u32 ruid; /* task uid */
+                               __u32 rgid; /* task gid */
+                       } r;
+                       union {
+                               __u32 euid;
+                               __u32 egid;
+                       } e;
+               } id;
+
+               struct sid_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } sid;
+
+               struct ptrace_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       __kernel_pid_t tracer_pid;
+                       __kernel_pid_t tracer_tgid;
+               } ptrace;
+
+               struct comm_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       char           comm[16];
+               } comm;
+
+               struct coredump_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } coredump;
+
+               struct exit_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       __u32 exit_code, exit_signal;
+               } exit;
+
+       } event_data;
+};
+
+#endif /* CN_PROC_H */
diff --git a/lib/libdss-include/include/linux/coda.h b/lib/libdss-include/include/linux/coda.h
new file mode 100644 (file)
index 0000000..a5e4b99
--- /dev/null
@@ -0,0 +1,736 @@
+/* 
+   You may distribute this file under either of the two licenses that
+   follow at your discretion.
+*/
+
+/* BLURB lgpl
+
+                           Coda File System
+                              Release 5
+
+          Copyright (c) 1987-1999 Carnegie Mellon University
+                  Additional copyrights listed below
+
+This code is distributed "AS IS" without warranty of any kind under
+the terms of the GNU Library General Public Licence Version 2, as
+shown in the file LICENSE, or under the license shown below. The
+technical and financial contributors to Coda are listed in the file
+CREDITS.
+
+                        Additional copyrights 
+*/
+
+/*
+
+            Coda: an Experimental Distributed File System
+                             Release 4.0
+
+          Copyright (c) 1987-1999 Carnegie Mellon University
+                         All Rights Reserved
+
+Permission  to  use, copy, modify and distribute this software and its
+documentation is hereby granted,  provided  that  both  the  copyright
+notice  and  this  permission  notice  appear  in  all  copies  of the
+software, derivative works or  modified  versions,  and  any  portions
+thereof, and that both notices appear in supporting documentation, and
+that credit is given to Carnegie Mellon University  in  all  documents
+and publicity pertaining to direct or indirect use of this code or its
+derivatives.
+
+CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
+SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
+FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
+DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
+RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
+ANY DERIVATIVE WORK.
+
+Carnegie  Mellon  encourages  users  of  this  software  to return any
+improvements or extensions that  they  make,  and  to  grant  Carnegie
+Mellon the rights to redistribute these changes without encumbrance.
+*/
+
+/*
+ *
+ * Based on cfs.h from Mach, but revamped for increased simplicity.
+ * Linux modifications by 
+ * Peter Braam, Aug 1996
+ */
+
+#ifndef _CODA_HEADER_
+#define _CODA_HEADER_
+
+
+/* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */
+#if defined(__NetBSD__) || \
+  ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL))
+#include <sys/types.h>
+#endif 
+
+#ifndef CODA_MAXSYMLINKS
+#define CODA_MAXSYMLINKS 10
+#endif
+
+#if defined(DJGPP) || defined(__CYGWIN32__)
+#ifdef KERNEL
+typedef unsigned long u_long;
+typedef unsigned int u_int;
+typedef unsigned short u_short;
+typedef u_long ino_t;
+typedef u_long dev_t;
+typedef void * caddr_t;
+#ifdef DOS
+typedef unsigned __int64 u_quad_t;
+#else 
+typedef unsigned long long u_quad_t;
+#endif
+
+#define __inline__
+
+struct timespec {
+        long       ts_sec;
+        long       ts_nsec;
+};
+#else  /* DJGPP but not KERNEL */
+#include <sys/time.h>
+typedef unsigned long long u_quad_t;
+#endif /* !KERNEL */
+#endif /* !DJGPP */
+
+
+#if defined(__linux__)
+#include <linux/time.h>
+#define cdev_t u_quad_t
+#if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
+#define _UQUAD_T_ 1
+typedef unsigned long long u_quad_t;
+#endif
+#else
+#define cdev_t dev_t
+#endif
+
+#ifdef __CYGWIN32__
+struct timespec {
+        time_t  tv_sec;         /* seconds */
+        long    tv_nsec;        /* nanoseconds */
+};
+#endif
+
+#ifndef __BIT_TYPES_DEFINED__
+#define __BIT_TYPES_DEFINED__
+typedef signed char          int8_t;
+typedef unsigned char      u_int8_t;
+typedef short               int16_t;
+typedef unsigned short    u_int16_t;
+typedef int                 int32_t;
+typedef unsigned int      u_int32_t;
+#endif
+
+
+/*
+ * Cfs constants
+ */
+#define CODA_MAXNAMLEN   255
+#define CODA_MAXPATHLEN  1024
+#define CODA_MAXSYMLINK  10
+
+/* these are Coda's version of O_RDONLY etc combinations
+ * to deal with VFS open modes
+ */
+#define        C_O_READ        0x001
+#define        C_O_WRITE       0x002
+#define C_O_TRUNC       0x010
+#define C_O_EXCL       0x100
+#define C_O_CREAT      0x200
+
+/* these are to find mode bits in Venus */ 
+#define C_M_READ  00400
+#define C_M_WRITE 00200
+
+/* for access Venus will use */
+#define C_A_C_OK    8               /* Test for writing upon create.  */
+#define C_A_R_OK    4               /* Test for read permission.  */
+#define C_A_W_OK    2               /* Test for write permission.  */
+#define C_A_X_OK    1               /* Test for execute permission.  */
+#define C_A_F_OK    0               /* Test for existence.  */
+
+
+
+#ifndef _VENUS_DIRENT_T_
+#define _VENUS_DIRENT_T_ 1
+struct venus_dirent {
+        u_int32_t d_fileno;            /* file number of entry */
+        u_int16_t d_reclen;            /* length of this record */
+        u_int8_t  d_type;                      /* file type, see below */
+        u_int8_t  d_namlen;            /* length of string in d_name */
+        char     d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
+};
+#undef DIRSIZ
+#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
+                         (((dp)->d_namlen+1 + 3) &~ 3))
+
+/*
+ * File types
+ */
+#define        CDT_UNKNOWN      0
+#define        CDT_FIFO         1
+#define        CDT_CHR          2
+#define        CDT_DIR          4
+#define        CDT_BLK          6
+#define        CDT_REG          8
+#define        CDT_LNK         10
+#define        CDT_SOCK        12
+#define        CDT_WHT         14
+
+/*
+ * Convert between stat structure types and directory types.
+ */
+#define        IFTOCDT(mode)   (((mode) & 0170000) >> 12)
+#define        CDTTOIF(dirtype)        ((dirtype) << 12)
+
+#endif
+
+#ifndef _VUID_T_
+#define _VUID_T_
+typedef u_int32_t vuid_t;
+typedef u_int32_t vgid_t;
+#endif /*_VUID_T_ */
+
+struct CodaFid {
+       u_int32_t opaque[4];
+};
+
+#define coda_f2i(fid)\
+       (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0)
+
+#ifndef _VENUS_VATTR_T_
+#define _VENUS_VATTR_T_
+/*
+ * Vnode types.  VNON means no type.
+ */
+enum coda_vtype        { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
+
+struct coda_vattr {
+       long            va_type;        /* vnode type (for create) */
+       u_short         va_mode;        /* files access mode and type */
+       short           va_nlink;       /* number of references to file */
+       vuid_t          va_uid;         /* owner user id */
+       vgid_t          va_gid;         /* owner group id */
+       long            va_fileid;      /* file id */
+       u_quad_t        va_size;        /* file size in bytes */
+       long            va_blocksize;   /* blocksize preferred for i/o */
+       struct timespec va_atime;       /* time of last access */
+       struct timespec va_mtime;       /* time of last modification */
+       struct timespec va_ctime;       /* time file changed */
+       u_long          va_gen;         /* generation number of file */
+       u_long          va_flags;       /* flags defined for file */
+       cdev_t          va_rdev;        /* device special file represents */
+       u_quad_t        va_bytes;       /* bytes of disk space held by file */
+       u_quad_t        va_filerev;     /* file modification number */
+};
+
+#endif 
+
+/* structure used by CODA_STATFS for getting cache information from venus */
+struct coda_statfs {
+    int32_t f_blocks;
+    int32_t f_bfree;
+    int32_t f_bavail;
+    int32_t f_files;
+    int32_t f_ffree;
+};
+
+/*
+ * Kernel <--> Venus communications.
+ */
+
+#define CODA_ROOT      2
+#define CODA_OPEN_BY_FD        3
+#define CODA_OPEN      4
+#define CODA_CLOSE     5
+#define CODA_IOCTL     6
+#define CODA_GETATTR   7
+#define CODA_SETATTR   8
+#define CODA_ACCESS    9
+#define CODA_LOOKUP    10
+#define CODA_CREATE    11
+#define CODA_REMOVE    12
+#define CODA_LINK      13
+#define CODA_RENAME    14
+#define CODA_MKDIR     15
+#define CODA_RMDIR     16
+#define CODA_SYMLINK   18
+#define CODA_READLINK  19
+#define CODA_FSYNC     20
+#define CODA_VGET      22
+#define CODA_SIGNAL    23
+#define CODA_REPLACE    24 /* DOWNCALL */
+#define CODA_FLUSH       25 /* DOWNCALL */
+#define CODA_PURGEUSER   26 /* DOWNCALL */
+#define CODA_ZAPFILE     27 /* DOWNCALL */
+#define CODA_ZAPDIR      28 /* DOWNCALL */
+#define CODA_PURGEFID    30 /* DOWNCALL */
+#define CODA_OPEN_BY_PATH 31
+#define CODA_RESOLVE     32
+#define CODA_REINTEGRATE 33
+#define CODA_STATFS     34
+#define CODA_STORE      35
+#define CODA_RELEASE    36
+#define CODA_NCALLS 37
+
+#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
+
+#define VC_MAXDATASIZE     8192
+#define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\
+                            VC_MAXDATASIZE  
+
+#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
+
+#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */
+
+/*
+ *        Venus <-> Coda  RPC arguments
+ */
+struct coda_in_hdr {
+    u_int32_t opcode;
+    u_int32_t unique;      /* Keep multiple outstanding msgs distinct */
+    pid_t pid;
+    pid_t pgid;
+    vuid_t uid;
+};
+
+/* Really important that opcode and unique are 1st two fields! */
+struct coda_out_hdr {
+    u_int32_t opcode;
+    u_int32_t unique;  
+    u_int32_t result;
+};
+
+/* coda_root: NO_IN */
+struct coda_root_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+};
+
+struct coda_root_in {
+    struct coda_in_hdr in;
+};
+
+/* coda_open: */
+struct coda_open_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_out {
+    struct coda_out_hdr oh;
+    cdev_t     dev;
+    ino_t      inode;
+};
+
+
+/* coda_store: */
+struct coda_store_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_store_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_release: */
+struct coda_release_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_release_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_close: */
+struct coda_close_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_close_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_ioctl: */
+struct coda_ioctl_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        cmd;
+    int        len;
+    int        rwflag;
+    char *data;                        /* Place holder for data. */
+};
+
+struct coda_ioctl_out {
+    struct coda_out_hdr oh;
+    int        len;
+    caddr_t    data;           /* Place holder for data. */
+};
+
+
+/* coda_getattr: */
+struct coda_getattr_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_getattr_out {
+    struct coda_out_hdr oh;
+    struct coda_vattr attr;
+};
+
+
+/* coda_setattr: NO_OUT */
+struct coda_setattr_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+struct coda_setattr_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_access: NO_OUT */
+struct coda_access_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_access_out {
+    struct coda_out_hdr out;
+};
+
+
+/* lookup flags */
+#define CLU_CASE_SENSITIVE     0x01
+#define CLU_CASE_INSENSITIVE   0x02
+
+/* coda_lookup: */
+struct  coda_lookup_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int         name;          /* Place holder for data. */
+    int         flags; 
+};
+
+struct coda_lookup_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    int        vtype;
+};
+
+
+/* coda_create: */
+struct coda_create_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+    int excl;
+    int mode;
+    int        name;           /* Place holder for data. */
+};
+
+struct coda_create_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+
+/* coda_remove: NO_OUT */
+struct coda_remove_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int name;          /* Place holder for data. */
+};
+
+struct coda_remove_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_link: NO_OUT */
+struct coda_link_in {
+    struct coda_in_hdr ih;
+    struct CodaFid sourceFid;  /* cnode to link *to* */
+    struct CodaFid destFid;    /* Directory in which to place link */
+    int tname;         /* Place holder for data. */
+};
+
+struct coda_link_out {
+    struct coda_out_hdr out;
+};
+
+
+/* coda_rename: NO_OUT */
+struct coda_rename_in {
+    struct coda_in_hdr ih;
+    struct CodaFid sourceFid;
+    int        srcname;
+    struct CodaFid destFid;
+    int        destname;
+};
+
+struct coda_rename_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_mkdir: */
+struct coda_mkdir_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+    int           name;                /* Place holder for data. */
+};
+
+struct coda_mkdir_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+
+/* coda_rmdir: NO_OUT */
+struct coda_rmdir_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int name;          /* Place holder for data. */
+};
+
+struct coda_rmdir_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_symlink: NO_OUT */
+struct coda_symlink_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;       /* Directory to put symlink in */
+    int srcname;
+    struct coda_vattr attr;
+    int tname;
+};
+
+struct coda_symlink_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_readlink: */
+struct coda_readlink_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_readlink_out {
+    struct coda_out_hdr oh;
+    int        count;
+    caddr_t    data;           /* Place holder for data. */
+};
+
+
+/* coda_fsync: NO_OUT */
+struct coda_fsync_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_fsync_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_vget: */
+struct coda_vget_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_vget_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    int        vtype;
+};
+
+
+/* CODA_SIGNAL is out-of-band, doesn't need data. */
+/* CODA_INVALIDATE is a venus->kernel call */
+/* CODA_FLUSH is a venus->kernel call */
+
+/* coda_purgeuser: */
+/* CODA_PURGEUSER is a venus->kernel call */
+struct coda_purgeuser_out {
+    struct coda_out_hdr oh;
+    vuid_t uid;
+};
+
+/* coda_zapfile: */
+/* CODA_ZAPFILE is a venus->kernel call */
+struct coda_zapfile_out {  
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_zapdir: */
+/* CODA_ZAPDIR is a venus->kernel call */      
+struct coda_zapdir_out {         
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_purgefid: */
+/* CODA_PURGEFID is a venus->kernel call */    
+struct coda_purgefid_out { 
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_replace: */
+/* CODA_REPLACE is a venus->kernel call */     
+struct coda_replace_out { /* coda_replace is a venus->kernel call */
+    struct coda_out_hdr oh;
+    struct CodaFid NewFid;
+    struct CodaFid OldFid;
+};
+
+/* coda_open_by_fd: */
+struct coda_open_by_fd_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_by_fd_out {
+    struct coda_out_hdr oh;
+    int fd;
+
+};
+
+/* coda_open_by_path: */
+struct coda_open_by_path_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_by_path_out {
+    struct coda_out_hdr oh;
+       int path;
+};
+
+/* coda_statfs: NO_IN */
+struct coda_statfs_in {
+    struct coda_in_hdr in;
+};
+
+struct coda_statfs_out {
+    struct coda_out_hdr oh;
+    struct coda_statfs stat;
+};
+
+/* 
+ * Occasionally, we don't cache the fid returned by CODA_LOOKUP. 
+ * For instance, if the fid is inconsistent. 
+ * This case is handled by setting the top bit of the type result parameter.
+ */
+#define CODA_NOCACHE          0x80000000
+
+union inputArgs {
+    struct coda_in_hdr ih;             /* NB: every struct below begins with an ih */
+    struct coda_open_in coda_open;
+    struct coda_store_in coda_store;
+    struct coda_release_in coda_release;
+    struct coda_close_in coda_close;
+    struct coda_ioctl_in coda_ioctl;
+    struct coda_getattr_in coda_getattr;
+    struct coda_setattr_in coda_setattr;
+    struct coda_access_in coda_access;
+    struct coda_lookup_in coda_lookup;
+    struct coda_create_in coda_create;
+    struct coda_remove_in coda_remove;
+    struct coda_link_in coda_link;
+    struct coda_rename_in coda_rename;
+    struct coda_mkdir_in coda_mkdir;
+    struct coda_rmdir_in coda_rmdir;
+    struct coda_symlink_in coda_symlink;
+    struct coda_readlink_in coda_readlink;
+    struct coda_fsync_in coda_fsync;
+    struct coda_vget_in coda_vget;
+    struct coda_open_by_fd_in coda_open_by_fd;
+    struct coda_open_by_path_in coda_open_by_path;
+    struct coda_statfs_in coda_statfs;
+};
+
+union outputArgs {
+    struct coda_out_hdr oh;            /* NB: every struct below begins with an oh */
+    struct coda_root_out coda_root;
+    struct coda_open_out coda_open;
+    struct coda_ioctl_out coda_ioctl;
+    struct coda_getattr_out coda_getattr;
+    struct coda_lookup_out coda_lookup;
+    struct coda_create_out coda_create;
+    struct coda_mkdir_out coda_mkdir;
+    struct coda_readlink_out coda_readlink;
+    struct coda_vget_out coda_vget;
+    struct coda_purgeuser_out coda_purgeuser;
+    struct coda_zapfile_out coda_zapfile;
+    struct coda_zapdir_out coda_zapdir;
+    struct coda_purgefid_out coda_purgefid;
+    struct coda_replace_out coda_replace;
+    struct coda_open_by_fd_out coda_open_by_fd;
+    struct coda_open_by_path_out coda_open_by_path;
+    struct coda_statfs_out coda_statfs;
+};    
+
+union coda_downcalls {
+    /* CODA_INVALIDATE is a venus->kernel call */
+    /* CODA_FLUSH is a venus->kernel call */
+    struct coda_purgeuser_out purgeuser;
+    struct coda_zapfile_out zapfile;
+    struct coda_zapdir_out zapdir;
+    struct coda_purgefid_out purgefid;
+    struct coda_replace_out replace;
+};
+
+
+/*
+ * Used for identifying usage of "Control" and pioctls
+ */
+
+#define PIOCPARM_MASK 0x0000ffff
+struct ViceIoctl {
+        void *in;        /* Data to be transferred in */
+        void *out;       /* Data to be transferred out */
+        u_short in_size;        /* Size of input buffer <= 2K */
+        u_short out_size;       /* Maximum size of output buffer, <= 2K */
+};
+
+struct PioctlData {
+        const char *path;
+        int follow;
+        struct ViceIoctl vi;
+};
+
+#define CODA_CONTROL           ".CONTROL"
+#define CODA_CONTROLLEN                8
+#define CTL_INO                        -1
+
+/* Data passed to mount */
+
+#define CODA_MOUNT_VERSION 1
+
+struct coda_mount_data {
+       int             version;
+       int             fd;       /* Opened device */
+};
+
+#endif /* _CODA_HEADER_ */
diff --git a/lib/libdss-include/include/linux/coda_psdev.h b/lib/libdss-include/include/linux/coda_psdev.h
new file mode 100644 (file)
index 0000000..46e12d8
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __CODA_PSDEV_H
+#define __CODA_PSDEV_H
+
+#include <linux/magic.h>
+
+#define CODA_PSDEV_MAJOR 67
+#define MAX_CODADEVS  5           /* how many do we allow */
+
+
+/* messages between coda filesystem in kernel and Venus */
+struct upc_req {
+       struct list_head    uc_chain;
+       caddr_t             uc_data;
+       u_short             uc_flags;
+       u_short             uc_inSize;  /* Size is at most 5000 bytes */
+       u_short             uc_outSize;
+       u_short             uc_opcode;  /* copied from data to save lookup */
+       int                 uc_unique;
+       wait_queue_head_t   uc_sleep;   /* process' wait queue */
+};
+
+#define CODA_REQ_ASYNC  0x1
+#define CODA_REQ_READ   0x2
+#define CODA_REQ_WRITE  0x4
+#define CODA_REQ_ABORT  0x8
+
+#endif /* __CODA_PSDEV_H */
diff --git a/lib/libdss-include/include/linux/coff.h b/lib/libdss-include/include/linux/coff.h
new file mode 100644 (file)
index 0000000..6354a7f
--- /dev/null
@@ -0,0 +1,351 @@
+/* This file is derived from the GAS 2.1.4 assembler control file.
+   The GAS product is under the GNU General Public License, version 2 or later.
+   As such, this file is also under that license.
+
+   If the file format changes in the COFF object, this file should be
+   subsequently updated to reflect the changes.
+
+   The actual loader module only uses a few of these structures. The full
+   set is documented here because I received the full set. If you wish
+   more information about COFF, then O'Reilly has a very excellent book.
+*/
+
+#define  E_SYMNMLEN  8   /* Number of characters in a symbol name         */
+#define  E_FILNMLEN 14   /* Number of characters in a file name           */
+#define  E_DIMNUM    4   /* Number of array dimensions in auxiliary entry */
+
+/*
+ * These defines are byte order independent. There is no alignment of fields
+ * permitted in the structures. Therefore they are declared as characters
+ * and the values loaded from the character positions. It also makes it
+ * nice to have it "endian" independent.
+ */
+/* Load a short int from the following tables with little-endian formats */
+#define COFF_SHORT_L(ps) ((short)(((unsigned short)((unsigned char)ps[1])<<8)|\
+                                 ((unsigned short)((unsigned char)ps[0]))))
+
+/* Load a long int from the following tables with little-endian formats */
+#define COFF_LONG_L(ps) (((long)(((unsigned long)((unsigned char)ps[3])<<24) |\
+                                ((unsigned long)((unsigned char)ps[2])<<16) |\
+                                ((unsigned long)((unsigned char)ps[1])<<8)  |\
+                                ((unsigned long)((unsigned char)ps[0])))))
+/* Load a short int from the following tables with big-endian formats */
+#define COFF_SHORT_H(ps) ((short)(((unsigned short)((unsigned char)ps[0])<<8)|\
+                                 ((unsigned short)((unsigned char)ps[1]))))
+
+/* Load a long int from the following tables with big-endian formats */
+#define COFF_LONG_H(ps) (((long)(((unsigned long)((unsigned char)ps[0])<<24) |\
+                                ((unsigned long)((unsigned char)ps[1])<<16) |\
+                                ((unsigned long)((unsigned char)ps[2])<<8)  |\
+                                ((unsigned long)((unsigned char)ps[3])))))
+
+/* These may be overridden later by brain dead implementations which generate
+   a big-endian header with little-endian data. In that case, generate a
+   replacement macro which tests a flag and uses either of the two above
+   as appropriate. */
+
+#define COFF_LONG(v)   COFF_LONG_L(v)
+#define COFF_SHORT(v)  COFF_SHORT_L(v)
+
+/*** coff information for Intel 386/486.  */
+
+/********************** FILE HEADER **********************/
+
+struct COFF_filehdr {
+       char f_magic[2];        /* magic number                 */
+       char f_nscns[2];        /* number of sections           */
+       char f_timdat[4];       /* time & date stamp            */
+       char f_symptr[4];       /* file pointer to symtab       */
+       char f_nsyms[4];        /* number of symtab entries     */
+       char f_opthdr[2];       /* sizeof(optional hdr)         */
+       char f_flags[2];        /* flags                        */
+};
+
+/*
+ *   Bits for f_flags:
+ *
+ *     F_RELFLG        relocation info stripped from file
+ *     F_EXEC          file is executable  (i.e. no unresolved external
+ *                     references)
+ *     F_LNNO          line numbers stripped from file
+ *     F_LSYMS         local symbols stripped from file
+ *     F_MINMAL        this is a minimal object file (".m") output of fextract
+ *     F_UPDATE        this is a fully bound update file, output of ogen
+ *     F_SWABD         this file has had its bytes swabbed (in names)
+ *     F_AR16WR        this file has the byte ordering of an AR16WR
+ *                     (e.g. 11/70) machine
+ *     F_AR32WR        this file has the byte ordering of an AR32WR machine
+ *                     (e.g. vax and iNTEL 386)
+ *     F_AR32W         this file has the byte ordering of an AR32W machine
+ *                     (e.g. 3b,maxi)
+ *     F_PATCH         file contains "patch" list in optional header
+ *     F_NODF          (minimal file only) no decision functions for
+ *                     replaced functions
+ */
+
+#define  COFF_F_RELFLG         0000001
+#define  COFF_F_EXEC           0000002
+#define  COFF_F_LNNO           0000004
+#define  COFF_F_LSYMS          0000010
+#define  COFF_F_MINMAL         0000020
+#define  COFF_F_UPDATE         0000040
+#define  COFF_F_SWABD          0000100
+#define  COFF_F_AR16WR         0000200
+#define  COFF_F_AR32WR         0000400
+#define  COFF_F_AR32W          0001000
+#define  COFF_F_PATCH          0002000
+#define  COFF_F_NODF           0002000
+
+#define        COFF_I386MAGIC          0x14c   /* Linux's system    */
+
+#if 0   /* Perhaps, someday, these formats may be used.      */
+#define COFF_I386PTXMAGIC      0x154
+#define COFF_I386AIXMAGIC      0x175   /* IBM's AIX system  */
+#define COFF_I386BADMAG(x) ((COFF_SHORT((x).f_magic) != COFF_I386MAGIC) \
+                         && COFF_SHORT((x).f_magic) != COFF_I386PTXMAGIC \
+                         && COFF_SHORT((x).f_magic) != COFF_I386AIXMAGIC)
+#else
+#define COFF_I386BADMAG(x) (COFF_SHORT((x).f_magic) != COFF_I386MAGIC)
+#endif
+
+#define        COFF_FILHDR     struct COFF_filehdr
+#define        COFF_FILHSZ     sizeof(COFF_FILHDR)
+
+/********************** AOUT "OPTIONAL HEADER" **********************/
+
+/* Linux COFF must have this "optional" header. Standard COFF has no entry
+   location for the "entry" point. They normally would start with the first
+   location of the .text section. This is not a good idea for linux. So,
+   the use of this "optional" header is not optional. It is required.
+
+   Do not be tempted to assume that the size of the optional header is
+   a constant and simply index the next byte by the size of this structure.
+   Use the 'f_opthdr' field in the main coff header for the size of the
+   structure actually written to the file!!
+*/
+
+typedef struct 
+{
+  char         magic[2];               /* type of file                          */
+  char vstamp[2];              /* version stamp                         */
+  char tsize[4];               /* text size in bytes, padded to FW bdry */
+  char dsize[4];               /* initialized   data "   "              */
+  char bsize[4];               /* uninitialized data "   "              */
+  char entry[4];               /* entry pt.                             */
+  char         text_start[4];          /* base of text used for this file       */
+  char         data_start[4];          /* base of data used for this file       */
+}
+COFF_AOUTHDR;
+
+#define COFF_AOUTSZ (sizeof(COFF_AOUTHDR))
+
+#define COFF_STMAGIC   0401
+#define COFF_OMAGIC     0404
+#define COFF_JMAGIC     0407    /* dirty text and data image, can't share  */
+#define COFF_DMAGIC     0410    /* dirty text segment, data aligned        */
+#define COFF_ZMAGIC     0413    /* The proper magic number for executables  */
+#define COFF_SHMAGIC   0443    /* shared library header                   */
+
+/********************** SECTION HEADER **********************/
+
+struct COFF_scnhdr {
+  char         s_name[8];      /* section name                     */
+  char         s_paddr[4];     /* physical address, aliased s_nlib */
+  char         s_vaddr[4];     /* virtual address                  */
+  char         s_size[4];      /* section size                     */
+  char         s_scnptr[4];    /* file ptr to raw data for section */
+  char         s_relptr[4];    /* file ptr to relocation           */
+  char         s_lnnoptr[4];   /* file ptr to line numbers         */
+  char         s_nreloc[2];    /* number of relocation entries     */
+  char         s_nlnno[2];     /* number of line number entries    */
+  char         s_flags[4];     /* flags                            */
+};
+
+#define        COFF_SCNHDR     struct COFF_scnhdr
+#define        COFF_SCNHSZ     sizeof(COFF_SCNHDR)
+
+/*
+ * names of "special" sections
+ */
+
+#define COFF_TEXT      ".text"
+#define COFF_DATA      ".data"
+#define COFF_BSS       ".bss"
+#define COFF_COMMENT    ".comment"
+#define COFF_LIB        ".lib"
+
+#define COFF_SECT_TEXT  0      /* Section for instruction code             */
+#define COFF_SECT_DATA  1      /* Section for initialized globals          */
+#define COFF_SECT_BSS   2      /* Section for un-initialized globals       */
+#define COFF_SECT_REQD  3      /* Minimum number of sections for good file */
+
+#define COFF_STYP_REG     0x00 /* regular segment                          */
+#define COFF_STYP_DSECT   0x01 /* dummy segment                            */
+#define COFF_STYP_NOLOAD  0x02 /* no-load segment                          */
+#define COFF_STYP_GROUP   0x04 /* group segment                            */
+#define COFF_STYP_PAD     0x08 /* .pad segment                             */
+#define COFF_STYP_COPY    0x10 /* copy section                             */
+#define COFF_STYP_TEXT    0x20 /* .text segment                            */
+#define COFF_STYP_DATA    0x40 /* .data segment                            */
+#define COFF_STYP_BSS     0x80 /* .bss segment                             */
+#define COFF_STYP_INFO   0x200 /* .comment section                         */
+#define COFF_STYP_OVER   0x400 /* overlay section                          */
+#define COFF_STYP_LIB    0x800 /* library section                          */
+
+/*
+ * Shared libraries have the following section header in the data field for
+ * each library.
+ */
+
+struct COFF_slib {
+  char         sl_entsz[4];    /* Size of this entry               */
+  char         sl_pathndx[4];  /* size of the header field         */
+};
+
+#define        COFF_SLIBHD     struct COFF_slib
+#define        COFF_SLIBSZ     sizeof(COFF_SLIBHD)
+
+/********************** LINE NUMBERS **********************/
+
+/* 1 line number entry for every "breakpointable" source line in a section.
+ * Line numbers are grouped on a per function basis; first entry in a function
+ * grouping will have l_lnno = 0 and in place of physical address will be the
+ * symbol table index of the function name.
+ */
+
+struct COFF_lineno {
+  union {
+    char l_symndx[4];  /* function name symbol index, iff l_lnno == 0*/
+    char l_paddr[4];   /* (physical) address of line number    */
+  } l_addr;
+  char l_lnno[2];      /* line number          */
+};
+
+#define        COFF_LINENO     struct COFF_lineno
+#define        COFF_LINESZ     6
+
+/********************** SYMBOLS **********************/
+
+#define COFF_E_SYMNMLEN         8      /* # characters in a short symbol name  */
+#define COFF_E_FILNMLEN        14      /* # characters in a file name          */
+#define COFF_E_DIMNUM   4      /* # array dimensions in auxiliary entry */
+
+/*
+ *  All symbols and sections have the following definition
+ */
+
+struct COFF_syment 
+{
+  union {
+    char e_name[E_SYMNMLEN];    /* Symbol name (first 8 characters) */
+    struct {
+      char e_zeroes[4];         /* Leading zeros */
+      char e_offset[4];         /* Offset if this is a header section */
+    } e;
+  } e;
+
+  char e_value[4];              /* Value (address) of the segment */
+  char e_scnum[2];              /* Section number */
+  char e_type[2];               /* Type of section */
+  char e_sclass[1];             /* Loader class */
+  char e_numaux[1];             /* Number of auxiliary entries which follow */
+};
+
+#define COFF_N_BTMASK  (0xf)   /* Mask for important class bits */
+#define COFF_N_TMASK   (0x30)  /* Mask for important type bits  */
+#define COFF_N_BTSHFT  (4)     /* # bits to shift class field   */
+#define COFF_N_TSHIFT  (2)     /* # bits to shift type field    */
+
+/*
+ *  Auxiliary entries because the main table is too limiting.
+ */
+  
+union COFF_auxent {
+
+/*
+ *  Debugger information
+ */
+
+  struct {
+    char x_tagndx[4];          /* str, un, or enum tag indx */
+    union {
+      struct {
+       char  x_lnno[2];        /* declaration line number */
+       char  x_size[2];        /* str/union/array size */
+      } x_lnsz;
+      char x_fsize[4];         /* size of function */
+    } x_misc;
+
+    union {
+      struct {                 /* if ISFCN, tag, or .bb */
+       char x_lnnoptr[4];      /* ptr to fcn line # */
+       char x_endndx[4];       /* entry ndx past block end */
+      } x_fcn;
+
+      struct {                 /* if ISARY, up to 4 dimen. */
+       char x_dimen[E_DIMNUM][2];
+      } x_ary;
+    } x_fcnary;
+
+    char x_tvndx[2];   /* tv index */
+  } x_sym;
+
+/*
+ *   Source file names (debugger information)
+ */
+
+  union {
+    char x_fname[E_FILNMLEN];
+    struct {
+      char x_zeroes[4];
+      char x_offset[4];
+    } x_n;
+  } x_file;
+
+/*
+ *   Section information
+ */
+
+  struct {
+    char x_scnlen[4];  /* section length */
+    char x_nreloc[2];  /* # relocation entries */
+    char x_nlinno[2];  /* # line numbers */
+  } x_scn;
+
+/*
+ *   Transfer vector (branch table)
+ */
+  
+  struct {
+    char x_tvfill[4];  /* tv fill value */
+    char x_tvlen[2];   /* length of .tv */
+    char x_tvran[2][2];        /* tv range */
+  } x_tv;              /* info about .tv section (in auxent of symbol .tv)) */
+};
+
+#define        COFF_SYMENT     struct COFF_syment
+#define        COFF_SYMESZ     18      
+#define        COFF_AUXENT     union COFF_auxent
+#define        COFF_AUXESZ     18
+
+#define COFF_ETEXT     "etext"
+
+/********************** RELOCATION DIRECTIVES **********************/
+
+struct COFF_reloc {
+  char r_vaddr[4];        /* Virtual address of item    */
+  char r_symndx[4];       /* Symbol index in the symtab */
+  char r_type[2];         /* Relocation type            */
+};
+
+#define COFF_RELOC struct COFF_reloc
+#define COFF_RELSZ 10
+
+#define COFF_DEF_DATA_SECTION_ALIGNMENT  4
+#define COFF_DEF_BSS_SECTION_ALIGNMENT   4
+#define COFF_DEF_TEXT_SECTION_ALIGNMENT  4
+
+/* For new sections we haven't heard of before */
+#define COFF_DEF_SECTION_ALIGNMENT       4
diff --git a/lib/libdss-include/include/linux/connector.h b/lib/libdss-include/include/linux/connector.h
new file mode 100644 (file)
index 0000000..caf9468
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ *     connector.h
+ * 
+ * 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
+ * All rights reserved.
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __CONNECTOR_H
+#define __CONNECTOR_H
+
+#include <linux/types.h>
+
+/*
+ * Process Events connector unique ids -- used for message routing
+ */
+#define CN_IDX_PROC                    0x1
+#define CN_VAL_PROC                    0x1
+#define CN_IDX_CIFS                    0x2
+#define CN_VAL_CIFS                     0x1
+#define CN_W1_IDX                      0x3     /* w1 communication */
+#define CN_W1_VAL                      0x1
+#define CN_IDX_V86D                    0x4
+#define CN_VAL_V86D_UVESAFB            0x1
+#define CN_IDX_BB                      0x5     /* BlackBoard, from the TSP GPL sampling framework */
+#define CN_DST_IDX                     0x6
+#define CN_DST_VAL                     0x1
+#define CN_IDX_DM                      0x7     /* Device Mapper */
+#define CN_VAL_DM_USERSPACE_LOG                0x1
+#define CN_IDX_DRBD                    0x8
+#define CN_VAL_DRBD                    0x1
+#define CN_KVP_IDX                     0x9     /* HyperV KVP */
+#define CN_KVP_VAL                     0x1     /* queries from the kernel */
+#define CN_VSS_IDX                     0xA     /* HyperV VSS */
+#define CN_VSS_VAL                     0x1     /* queries from the kernel */
+
+
+#define CN_NETLINK_USERS               11      /* Highest index + 1 */
+
+/*
+ * Maximum connector's message size.
+ */
+#define CONNECTOR_MAX_MSG_SIZE         16384
+
+/*
+ * idx and val are unique identifiers which 
+ * are used for message routing and 
+ * must be registered in connector.h for in-kernel usage.
+ */
+
+struct cb_id {
+       __u32 idx;
+       __u32 val;
+};
+
+struct cn_msg {
+       struct cb_id id;
+
+       __u32 seq;
+       __u32 ack;
+
+       __u16 len;              /* Length of the following data */
+       __u16 flags;
+       __u8 data[0];
+};
+
+#endif /* __CONNECTOR_H */
diff --git a/lib/libdss-include/include/linux/const.h b/lib/libdss-include/include/linux/const.h
new file mode 100644 (file)
index 0000000..c872bfd
--- /dev/null
@@ -0,0 +1,27 @@
+/* const.h: Macros for dealing with constants.  */
+
+#ifndef _LINUX_CONST_H
+#define _LINUX_CONST_H
+
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
+ *
+ * Similarly, _AT() will cast an expression with a type in C, but
+ * leave it unchanged in asm.
+ */
+
+#ifdef __ASSEMBLY__
+#define _AC(X,Y)       X
+#define _AT(T,X)       X
+#else
+#define __AC(X,Y)      (X##Y)
+#define _AC(X,Y)       __AC(X,Y)
+#define _AT(T,X)       ((T)(X))
+#endif
+
+#define _BITUL(x)      (_AC(1,UL) << (x))
+#define _BITULL(x)     (_AC(1,ULL) << (x))
+
+#endif /* !(_LINUX_CONST_H) */
diff --git a/lib/libdss-include/include/linux/cramfs_fs.h b/lib/libdss-include/include/linux/cramfs_fs.h
new file mode 100644 (file)
index 0000000..9cada1a
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef __CRAMFS_H
+#define __CRAMFS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+#define CRAMFS_SIGNATURE       "Compressed ROMFS"
+
+/*
+ * Width of various bitfields in struct cramfs_inode.
+ * Primarily used to generate warnings in mkcramfs.
+ */
+#define CRAMFS_MODE_WIDTH 16
+#define CRAMFS_UID_WIDTH 16
+#define CRAMFS_SIZE_WIDTH 24
+#define CRAMFS_GID_WIDTH 8
+#define CRAMFS_NAMELEN_WIDTH 6
+#define CRAMFS_OFFSET_WIDTH 26
+
+/*
+ * Since inode.namelen is a unsigned 6-bit number, the maximum cramfs
+ * path length is 63 << 2 = 252.
+ */
+#define CRAMFS_MAXPATHLEN (((1 << CRAMFS_NAMELEN_WIDTH) - 1) << 2)
+
+/*
+ * Reasonably terse representation of the inode data.
+ */
+struct cramfs_inode {
+       __u32 mode:CRAMFS_MODE_WIDTH, uid:CRAMFS_UID_WIDTH;
+       /* SIZE for device files is i_rdev */
+       __u32 size:CRAMFS_SIZE_WIDTH, gid:CRAMFS_GID_WIDTH;
+       /* NAMELEN is the length of the file name, divided by 4 and
+           rounded up.  (cramfs doesn't support hard links.) */
+       /* OFFSET: For symlinks and non-empty regular files, this
+          contains the offset (divided by 4) of the file data in
+          compressed form (starting with an array of block pointers;
+          see README).  For non-empty directories it is the offset
+          (divided by 4) of the inode of the first file in that
+          directory.  For anything else, offset is zero. */
+       __u32 namelen:CRAMFS_NAMELEN_WIDTH, offset:CRAMFS_OFFSET_WIDTH;
+};
+
+struct cramfs_info {
+       __u32 crc;
+       __u32 edition;
+       __u32 blocks;
+       __u32 files;
+};
+
+/*
+ * Superblock information at the beginning of the FS.
+ */
+struct cramfs_super {
+       __u32 magic;                    /* 0x28cd3d45 - random number */
+       __u32 size;                     /* length in bytes */
+       __u32 flags;                    /* feature flags */
+       __u32 future;                   /* reserved for future use */
+       __u8 signature[16];             /* "Compressed ROMFS" */
+       struct cramfs_info fsid;        /* unique filesystem info */
+       __u8 name[16];                  /* user-defined name */
+       struct cramfs_inode root;       /* root inode data */
+};
+
+/*
+ * Feature flags
+ *
+ * 0x00000000 - 0x000000ff: features that work for all past kernels
+ * 0x00000100 - 0xffffffff: features that don't work for past kernels
+ */
+#define CRAMFS_FLAG_FSID_VERSION_2     0x00000001      /* fsid version #2 */
+#define CRAMFS_FLAG_SORTED_DIRS                0x00000002      /* sorted dirs */
+#define CRAMFS_FLAG_HOLES              0x00000100      /* support for holes */
+#define CRAMFS_FLAG_WRONG_SIGNATURE    0x00000200      /* reserved */
+#define CRAMFS_FLAG_SHIFTED_ROOT_OFFSET        0x00000400      /* shifted root fs */
+
+/*
+ * Valid values in super.flags.  Currently we refuse to mount
+ * if (flags & ~CRAMFS_SUPPORTED_FLAGS).  Maybe that should be
+ * changed to test super.future instead.
+ */
+#define CRAMFS_SUPPORTED_FLAGS ( 0x000000ff \
+                               | CRAMFS_FLAG_HOLES \
+                               | CRAMFS_FLAG_WRONG_SIGNATURE \
+                               | CRAMFS_FLAG_SHIFTED_ROOT_OFFSET )
+
+
+#endif /* __CRAMFS_H */
diff --git a/lib/libdss-include/include/linux/cuda.h b/lib/libdss-include/include/linux/cuda.h
new file mode 100644 (file)
index 0000000..83d9f93
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Definitions for talking to the CUDA.  The CUDA is a microcontroller
+ * which controls the ADB, system power, RTC, and various other things.
+ *
+ * Copyright (C) 1996 Paul Mackerras.
+ */
+
+#ifndef _LINUX_CUDA_H
+#define _LINUX_CUDA_H
+
+/* CUDA commands (2nd byte) */
+#define CUDA_WARM_START                0
+#define CUDA_AUTOPOLL          1
+#define CUDA_GET_6805_ADDR     2
+#define CUDA_GET_TIME          3
+#define CUDA_GET_PRAM          7
+#define CUDA_SET_6805_ADDR     8
+#define CUDA_SET_TIME          9
+#define CUDA_POWERDOWN         0xa
+#define CUDA_POWERUP_TIME      0xb
+#define CUDA_SET_PRAM          0xc
+#define CUDA_MS_RESET          0xd
+#define CUDA_SEND_DFAC         0xe
+#define CUDA_RESET_SYSTEM      0x11
+#define CUDA_SET_IPL           0x12
+#define CUDA_SET_AUTO_RATE     0x14
+#define CUDA_GET_AUTO_RATE     0x16
+#define CUDA_SET_DEVICE_LIST   0x19
+#define CUDA_GET_DEVICE_LIST   0x1a
+#define CUDA_GET_SET_IIC       0x22
+
+
+#endif /* _LINUX_CUDA_H */
diff --git a/lib/libdss-include/include/linux/cyclades.h b/lib/libdss-include/include/linux/cyclades.h
new file mode 100644 (file)
index 0000000..145e3c8
--- /dev/null
@@ -0,0 +1,493 @@
+/* $Revision: 3.0 $$Date: 1998/11/02 14:20:59 $
+ * linux/include/linux/cyclades.h
+ *
+ * This file was initially written by
+ * Randolph Bentson <bentson@grieg.seaslug.org> and is maintained by
+ * Ivan Passos <ivan@cyclades.com>.
+ *
+ * This file contains the general definitions for the cyclades.c driver
+ *$Log: cyclades.h,v $
+ *Revision 3.1  2002/01/29 11:36:16  henrique
+ *added throttle field on struct cyclades_port to indicate whether the
+ *port is throttled or not
+ *
+ *Revision 3.1  2000/04/19 18:52:52  ivan
+ *converted address fields to unsigned long and added fields for physical
+ *addresses on cyclades_card structure;
+ *
+ *Revision 3.0  1998/11/02 14:20:59  ivan
+ *added nports field on cyclades_card structure;
+ *
+ *Revision 2.5  1998/08/03 16:57:01  ivan
+ *added cyclades_idle_stats structure;
+ * 
+ *Revision 2.4  1998/06/01 12:09:53  ivan
+ *removed closing_wait2 from cyclades_port structure;
+ *
+ *Revision 2.3  1998/03/16 18:01:12  ivan
+ *changes in the cyclades_port structure to get it closer to the 
+ *standard serial port structure;
+ *added constants for new ioctls;
+ *
+ *Revision 2.2  1998/02/17 16:50:00  ivan
+ *changes in the cyclades_port structure (addition of shutdown_wait and 
+ *chip_rev variables);
+ *added constants for new ioctls and for CD1400 rev. numbers.
+ *
+ *Revision 2.1 1997/10/24 16:03:00  ivan
+ *added rflow (which allows enabling the CD1400 special flow control 
+ *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to 
+ *cyclades_port structure;
+ *added Alpha support
+ *
+ *Revision 2.0  1997/06/30 10:30:00  ivan
+ *added some new doorbell command constants related to IOCTLW and
+ *UART error signaling
+ *
+ *Revision 1.8  1997/06/03 15:30:00  ivan
+ *added constant ZFIRM_HLT
+ *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin)
+ *
+ *Revision 1.7  1997/03/26 10:30:00  daniel
+ *new entries at the end of cyclades_port struct to reallocate
+ *variables illegally allocated within card memory.
+ *
+ *Revision 1.6  1996/09/09 18:35:30  bentson
+ *fold in changes for Cyclom-Z -- including structures for
+ *communicating with board as well modest changes to original
+ *structures to support new features.
+ *
+ *Revision 1.5  1995/11/13 21:13:31  bentson
+ *changes suggested by Michael Chastain <mec@duracef.shout.net>
+ *to support use of this file in non-kernel applications
+ *
+ *
+ */
+
+#ifndef _LINUX_CYCLADES_H
+#define _LINUX_CYCLADES_H
+
+#include <linux/types.h>
+
+struct cyclades_monitor {
+        unsigned long           int_count;
+        unsigned long           char_count;
+        unsigned long           char_max;
+        unsigned long           char_last;
+};
+
+/*
+ * These stats all reflect activity since the device was last initialized.
+ * (i.e., since the port was opened with no other processes already having it
+ * open)
+ */
+struct cyclades_idle_stats {
+    __kernel_time_t in_use;    /* Time device has been in use (secs) */
+    __kernel_time_t recv_idle; /* Time since last char received (secs) */
+    __kernel_time_t xmit_idle; /* Time since last char transmitted (secs) */
+    unsigned long  recv_bytes; /* Bytes received */
+    unsigned long  xmit_bytes; /* Bytes transmitted */
+    unsigned long  overruns;   /* Input overruns */
+    unsigned long  frame_errs; /* Input framing errors */
+    unsigned long  parity_errs;        /* Input parity errors */
+};
+
+#define CYCLADES_MAGIC  0x4359
+
+#define CYGETMON                0x435901
+#define CYGETTHRESH             0x435902
+#define CYSETTHRESH             0x435903
+#define CYGETDEFTHRESH          0x435904
+#define CYSETDEFTHRESH          0x435905
+#define CYGETTIMEOUT            0x435906
+#define CYSETTIMEOUT            0x435907
+#define CYGETDEFTIMEOUT         0x435908
+#define CYSETDEFTIMEOUT         0x435909
+#define CYSETRFLOW             0x43590a
+#define CYGETRFLOW             0x43590b
+#define CYSETRTSDTR_INV                0x43590c
+#define CYGETRTSDTR_INV                0x43590d
+#define CYZSETPOLLCYCLE                0x43590e
+#define CYZGETPOLLCYCLE                0x43590f
+#define CYGETCD1400VER         0x435910
+#define        CYSETWAIT               0x435912
+#define        CYGETWAIT               0x435913
+
+/*************** CYCLOM-Z ADDITIONS ***************/
+
+#define CZIOC           ('M' << 8)
+#define CZ_NBOARDS      (CZIOC|0xfa)
+#define CZ_BOOT_START   (CZIOC|0xfb)
+#define CZ_BOOT_DATA    (CZIOC|0xfc)
+#define CZ_BOOT_END     (CZIOC|0xfd)
+#define CZ_TEST         (CZIOC|0xfe)
+
+#define CZ_DEF_POLL    (HZ/25)
+
+#define MAX_BOARD       4       /* Max number of boards */
+#define MAX_DEV         256     /* Max number of ports total */
+#define        CYZ_MAX_SPEED   921600
+
+#define        CYZ_FIFO_SIZE   16
+
+#define CYZ_BOOT_NWORDS 0x100
+struct CYZ_BOOT_CTRL {
+        unsigned short  nboard;
+        int             status[MAX_BOARD];
+        int             nchannel[MAX_BOARD];
+        int             fw_rev[MAX_BOARD];
+        unsigned long   offset;
+        unsigned long   data[CYZ_BOOT_NWORDS];
+};
+
+
+#ifndef DP_WINDOW_SIZE
+/*
+ *     Memory Window Sizes
+ */
+
+#define        DP_WINDOW_SIZE          (0x00080000)    /* window size 512 Kb */
+#define        ZE_DP_WINDOW_SIZE       (0x00100000)    /* window size 1 Mb (Ze and
+                                                 8Zo V.2 */
+#define        CTRL_WINDOW_SIZE        (0x00000080)    /* runtime regs 128 bytes */
+
+/*
+ *     CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver
+ *     normally will access only interested on the fpga_id, fpga_version,
+ *     start_cpu and stop_cpu.
+ */
+
+struct CUSTOM_REG {
+       __u32   fpga_id;                /* FPGA Identification Register */
+       __u32   fpga_version;           /* FPGA Version Number Register */
+       __u32   cpu_start;              /* CPU start Register (write) */
+       __u32   cpu_stop;               /* CPU stop Register (write) */
+       __u32   misc_reg;               /* Miscellaneous Register */
+       __u32   idt_mode;               /* IDT mode Register */
+       __u32   uart_irq_status;        /* UART IRQ status Register */
+       __u32   clear_timer0_irq;       /* Clear timer interrupt Register */
+       __u32   clear_timer1_irq;       /* Clear timer interrupt Register */
+       __u32   clear_timer2_irq;       /* Clear timer interrupt Register */
+       __u32   test_register;          /* Test Register */
+       __u32   test_count;             /* Test Count Register */
+       __u32   timer_select;           /* Timer select register */
+       __u32   pr_uart_irq_status;     /* Prioritized UART IRQ stat Reg */
+       __u32   ram_wait_state;         /* RAM wait-state Register */
+       __u32   uart_wait_state;        /* UART wait-state Register */
+       __u32   timer_wait_state;       /* timer wait-state Register */
+       __u32   ack_wait_state;         /* ACK wait State Register */
+};
+
+/*
+ *     RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime
+ *     registers. This structure can be used to access the 9060 registers
+ *     (memory mapped).
+ */
+
+struct RUNTIME_9060 {
+       __u32   loc_addr_range; /* 00h - Local Address Range */
+       __u32   loc_addr_base;  /* 04h - Local Address Base */
+       __u32   loc_arbitr;     /* 08h - Local Arbitration */
+       __u32   endian_descr;   /* 0Ch - Big/Little Endian Descriptor */
+       __u32   loc_rom_range;  /* 10h - Local ROM Range */
+       __u32   loc_rom_base;   /* 14h - Local ROM Base */
+       __u32   loc_bus_descr;  /* 18h - Local Bus descriptor */
+       __u32   loc_range_mst;  /* 1Ch - Local Range for Master to PCI */
+       __u32   loc_base_mst;   /* 20h - Local Base for Master PCI */
+       __u32   loc_range_io;   /* 24h - Local Range for Master IO */
+       __u32   pci_base_mst;   /* 28h - PCI Base for Master PCI */
+       __u32   pci_conf_io;    /* 2Ch - PCI configuration for Master IO */
+       __u32   filler1;        /* 30h */
+       __u32   filler2;        /* 34h */
+       __u32   filler3;        /* 38h */
+       __u32   filler4;        /* 3Ch */
+       __u32   mail_box_0;     /* 40h - Mail Box 0 */
+       __u32   mail_box_1;     /* 44h - Mail Box 1 */
+       __u32   mail_box_2;     /* 48h - Mail Box 2 */
+       __u32   mail_box_3;     /* 4Ch - Mail Box 3 */
+       __u32   filler5;        /* 50h */
+       __u32   filler6;        /* 54h */
+       __u32   filler7;        /* 58h */
+       __u32   filler8;        /* 5Ch */
+       __u32   pci_doorbell;   /* 60h - PCI to Local Doorbell */
+       __u32   loc_doorbell;   /* 64h - Local to PCI Doorbell */
+       __u32   intr_ctrl_stat; /* 68h - Interrupt Control/Status */
+       __u32   init_ctrl;      /* 6Ch - EEPROM control, Init Control, etc */
+};
+
+/* Values for the Local Base Address re-map register */
+
+#define        WIN_RAM         0x00000001L     /* set the sliding window to RAM */
+#define        WIN_CREG        0x14000001L     /* set the window to custom Registers */
+
+/* Values timer select registers */
+
+#define        TIMER_BY_1M     0x00            /* clock divided by 1M */
+#define        TIMER_BY_256K   0x01            /* clock divided by 256k */
+#define        TIMER_BY_128K   0x02            /* clock divided by 128k */
+#define        TIMER_BY_32K    0x03            /* clock divided by 32k */
+
+/****************** ****************** *******************/
+#endif
+
+#ifndef ZFIRM_ID
+/* #include "zfwint.h" */
+/****************** ****************** *******************/
+/*
+ *     This file contains the definitions for interfacing with the
+ *     Cyclom-Z ZFIRM Firmware.
+ */
+
+/* General Constant definitions */
+
+#define        MAX_CHAN        64              /* max number of channels per board */
+
+/* firmware id structure (set after boot) */
+
+#define ID_ADDRESS     0x00000180L     /* signature/pointer address */
+#define        ZFIRM_ID        0x5557465AL     /* ZFIRM/U signature */
+#define        ZFIRM_HLT       0x59505B5CL     /* ZFIRM needs external power supply */
+#define        ZFIRM_RST       0x56040674L     /* RST signal (due to FW reset) */
+
+#define        ZF_TINACT_DEF   1000            /* default inactivity timeout 
+                                          (1000 ms) */
+#define        ZF_TINACT       ZF_TINACT_DEF
+
+struct FIRM_ID {
+       __u32   signature;              /* ZFIRM/U signature */
+       __u32   zfwctrl_addr;           /* pointer to ZFW_CTRL structure */
+};
+
+/* Op. System id */
+
+#define        C_OS_LINUX      0x00000030      /* generic Linux system */
+
+/* channel op_mode */
+
+#define        C_CH_DISABLE    0x00000000      /* channel is disabled */
+#define        C_CH_TXENABLE   0x00000001      /* channel Tx enabled */
+#define        C_CH_RXENABLE   0x00000002      /* channel Rx enabled */
+#define        C_CH_ENABLE     0x00000003      /* channel Tx/Rx enabled */
+#define        C_CH_LOOPBACK   0x00000004      /* Loopback mode */
+
+/* comm_parity - parity */
+
+#define        C_PR_NONE       0x00000000      /* None */
+#define        C_PR_ODD        0x00000001      /* Odd */
+#define C_PR_EVEN      0x00000002      /* Even */
+#define C_PR_MARK      0x00000004      /* Mark */
+#define C_PR_SPACE     0x00000008      /* Space */
+#define C_PR_PARITY    0x000000ff
+
+#define        C_PR_DISCARD    0x00000100      /* discard char with frame/par error */
+#define C_PR_IGNORE    0x00000200      /* ignore frame/par error */
+
+/* comm_data_l - data length and stop bits */
+
+#define C_DL_CS5       0x00000001
+#define C_DL_CS6       0x00000002
+#define C_DL_CS7       0x00000004
+#define C_DL_CS8       0x00000008
+#define        C_DL_CS         0x0000000f
+#define C_DL_1STOP     0x00000010
+#define C_DL_15STOP    0x00000020
+#define C_DL_2STOP     0x00000040
+#define        C_DL_STOP       0x000000f0
+
+/* interrupt enabling/status */
+
+#define        C_IN_DISABLE    0x00000000      /* zero, disable interrupts */
+#define        C_IN_TXBEMPTY   0x00000001      /* tx buffer empty */
+#define        C_IN_TXLOWWM    0x00000002      /* tx buffer below LWM */
+#define        C_IN_RXHIWM     0x00000010      /* rx buffer above HWM */
+#define        C_IN_RXNNDT     0x00000020      /* rx no new data timeout */
+#define        C_IN_MDCD       0x00000100      /* modem DCD change */
+#define        C_IN_MDSR       0x00000200      /* modem DSR change */
+#define        C_IN_MRI        0x00000400      /* modem RI change */
+#define        C_IN_MCTS       0x00000800      /* modem CTS change */
+#define        C_IN_RXBRK      0x00001000      /* Break received */
+#define        C_IN_PR_ERROR   0x00002000      /* parity error */
+#define        C_IN_FR_ERROR   0x00004000      /* frame error */
+#define C_IN_OVR_ERROR  0x00008000      /* overrun error */
+#define C_IN_RXOFL     0x00010000      /* RX buffer overflow */
+#define C_IN_IOCTLW    0x00020000      /* I/O control w/ wait */
+#define C_IN_MRTS      0x00040000      /* modem RTS drop */
+#define C_IN_ICHAR     0x00080000
+/* flow control */
+
+#define        C_FL_OXX        0x00000001      /* output Xon/Xoff flow control */
+#define        C_FL_IXX        0x00000002      /* output Xon/Xoff flow control */
+#define C_FL_OIXANY    0x00000004      /* output Xon/Xoff (any xon) */
+#define        C_FL_SWFLOW     0x0000000f
+
+/* flow status */
+
+#define        C_FS_TXIDLE     0x00000000      /* no Tx data in the buffer or UART */
+#define        C_FS_SENDING    0x00000001      /* UART is sending data */
+#define        C_FS_SWFLOW     0x00000002      /* Tx is stopped by received Xoff */
+
+/* rs_control/rs_status RS-232 signals */
+
+#define C_RS_PARAM     0x80000000      /* Indicates presence of parameter in 
+                                          IOCTLM command */
+#define        C_RS_RTS        0x00000001      /* RTS */
+#define        C_RS_DTR        0x00000004      /* DTR */
+#define        C_RS_DCD        0x00000100      /* CD */
+#define        C_RS_DSR        0x00000200      /* DSR */
+#define        C_RS_RI         0x00000400      /* RI */
+#define        C_RS_CTS        0x00000800      /* CTS */
+
+/* commands Host <-> Board */
+
+#define        C_CM_RESET      0x01            /* reset/flush buffers */
+#define        C_CM_IOCTL      0x02            /* re-read CH_CTRL */
+#define        C_CM_IOCTLW     0x03            /* re-read CH_CTRL, intr when done */
+#define        C_CM_IOCTLM     0x04            /* RS-232 outputs change */
+#define        C_CM_SENDXOFF   0x10            /* send Xoff */
+#define        C_CM_SENDXON    0x11            /* send Xon */
+#define C_CM_CLFLOW    0x12            /* Clear flow control (resume) */
+#define        C_CM_SENDBRK    0x41            /* send break */
+#define        C_CM_INTBACK    0x42            /* Interrupt back */
+#define        C_CM_SET_BREAK  0x43            /* Tx break on */
+#define        C_CM_CLR_BREAK  0x44            /* Tx break off */
+#define        C_CM_CMD_DONE   0x45            /* Previous command done */
+#define C_CM_INTBACK2  0x46            /* Alternate Interrupt back */
+#define        C_CM_TINACT     0x51            /* set inactivity detection */
+#define        C_CM_IRQ_ENBL   0x52            /* enable generation of interrupts */
+#define        C_CM_IRQ_DSBL   0x53            /* disable generation of interrupts */
+#define        C_CM_ACK_ENBL   0x54            /* enable acknowledged interrupt mode */
+#define        C_CM_ACK_DSBL   0x55            /* disable acknowledged intr mode */
+#define        C_CM_FLUSH_RX   0x56            /* flushes Rx buffer */
+#define        C_CM_FLUSH_TX   0x57            /* flushes Tx buffer */
+#define C_CM_Q_ENABLE  0x58            /* enables queue access from the 
+                                          driver */
+#define C_CM_Q_DISABLE  0x59            /* disables queue access from the 
+                                          driver */
+
+#define        C_CM_TXBEMPTY   0x60            /* Tx buffer is empty */
+#define        C_CM_TXLOWWM    0x61            /* Tx buffer low water mark */
+#define        C_CM_RXHIWM     0x62            /* Rx buffer high water mark */
+#define        C_CM_RXNNDT     0x63            /* rx no new data timeout */
+#define        C_CM_TXFEMPTY   0x64
+#define        C_CM_ICHAR      0x65
+#define        C_CM_MDCD       0x70            /* modem DCD change */
+#define        C_CM_MDSR       0x71            /* modem DSR change */
+#define        C_CM_MRI        0x72            /* modem RI change */
+#define        C_CM_MCTS       0x73            /* modem CTS change */
+#define C_CM_MRTS      0x74            /* modem RTS drop */
+#define        C_CM_RXBRK      0x84            /* Break received */
+#define        C_CM_PR_ERROR   0x85            /* Parity error */
+#define        C_CM_FR_ERROR   0x86            /* Frame error */
+#define C_CM_OVR_ERROR  0x87            /* Overrun error */
+#define C_CM_RXOFL     0x88            /* RX buffer overflow */
+#define        C_CM_CMDERROR   0x90            /* command error */
+#define        C_CM_FATAL      0x91            /* fatal error */
+#define        C_CM_HW_RESET   0x92            /* reset board */
+
+/*
+ *     CH_CTRL - This per port structure contains all parameters
+ *     that control an specific port. It can be seen as the
+ *     configuration registers of a "super-serial-controller".
+ */
+
+struct CH_CTRL {
+       __u32   op_mode;        /* operation mode */
+       __u32   intr_enable;    /* interrupt masking */
+       __u32   sw_flow;        /* SW flow control */
+       __u32   flow_status;    /* output flow status */
+       __u32   comm_baud;      /* baud rate  - numerically specified */
+       __u32   comm_parity;    /* parity */
+       __u32   comm_data_l;    /* data length/stop */
+       __u32   comm_flags;     /* other flags */
+       __u32   hw_flow;        /* HW flow control */
+       __u32   rs_control;     /* RS-232 outputs */
+       __u32   rs_status;      /* RS-232 inputs */
+       __u32   flow_xon;       /* xon char */
+       __u32   flow_xoff;      /* xoff char */
+       __u32   hw_overflow;    /* hw overflow counter */
+       __u32   sw_overflow;    /* sw overflow counter */
+       __u32   comm_error;     /* frame/parity error counter */
+       __u32 ichar;
+       __u32 filler[7];
+};
+
+
+/*
+ *     BUF_CTRL - This per channel structure contains
+ *     all Tx and Rx buffer control for a given channel.
+ */
+
+struct BUF_CTRL        {
+       __u32   flag_dma;       /* buffers are in Host memory */
+       __u32   tx_bufaddr;     /* address of the tx buffer */
+       __u32   tx_bufsize;     /* tx buffer size */
+       __u32   tx_threshold;   /* tx low water mark */
+       __u32   tx_get;         /* tail index tx buf */
+       __u32   tx_put;         /* head index tx buf */
+       __u32   rx_bufaddr;     /* address of the rx buffer */
+       __u32   rx_bufsize;     /* rx buffer size */
+       __u32   rx_threshold;   /* rx high water mark */
+       __u32   rx_get;         /* tail index rx buf */
+       __u32   rx_put;         /* head index rx buf */
+       __u32   filler[5];      /* filler to align structures */
+};
+
+/*
+ *     BOARD_CTRL - This per board structure contains all global 
+ *     control fields related to the board.
+ */
+
+struct BOARD_CTRL {
+
+       /* static info provided by the on-board CPU */
+       __u32   n_channel;      /* number of channels */
+       __u32   fw_version;     /* firmware version */
+
+       /* static info provided by the driver */
+       __u32   op_system;      /* op_system id */
+       __u32   dr_version;     /* driver version */
+
+       /* board control area */
+       __u32   inactivity;     /* inactivity control */
+
+       /* host to FW commands */
+       __u32   hcmd_channel;   /* channel number */
+       __u32   hcmd_param;     /* pointer to parameters */
+
+       /* FW to Host commands */
+       __u32   fwcmd_channel;  /* channel number */
+       __u32   fwcmd_param;    /* pointer to parameters */
+       __u32   zf_int_queue_addr; /* offset for INT_QUEUE structure */
+
+       /* filler so the structures are aligned */
+       __u32   filler[6];
+};
+
+/* Host Interrupt Queue */
+
+#define QUEUE_SIZE     (10*MAX_CHAN)
+
+struct INT_QUEUE {
+       unsigned char   intr_code[QUEUE_SIZE];
+       unsigned long   channel[QUEUE_SIZE];
+       unsigned long   param[QUEUE_SIZE];
+       unsigned long   put;
+       unsigned long   get;
+};
+
+/*
+ *     ZFW_CTRL - This is the data structure that includes all other
+ *     data structures used by the Firmware.
+ */
+struct ZFW_CTRL {
+       struct BOARD_CTRL       board_ctrl;
+       struct CH_CTRL          ch_ctrl[MAX_CHAN];
+       struct BUF_CTRL         buf_ctrl[MAX_CHAN];
+};
+
+/****************** ****************** *******************/
+#endif
+
+#endif /* _LINUX_CYCLADES_H */
diff --git a/lib/libdss-include/include/linux/cycx_cfm.h b/lib/libdss-include/include/linux/cycx_cfm.h
new file mode 100644 (file)
index 0000000..032d26e
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+* cycx_cfm.h   Cyclom 2X WAN Link Driver.
+*              Definitions for the Cyclom 2X Firmware Module (CFM).
+*
+* Author:      Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+*
+* Copyright:   (c) 1998-2003 Arnaldo Carvalho de Melo
+*
+* Based on sdlasfm.h by Gene Kozin <74604.152@compuserve.com>
+*
+*              This program is free software; you can redistribute it and/or
+*              modify it under the terms of the GNU General Public License
+*              as published by the Free Software Foundation; either version
+*              2 of the License, or (at your option) any later version.
+* ============================================================================
+* 1998/08/08   acme            Initial version.
+*/
+#ifndef        _CYCX_CFM_H
+#define        _CYCX_CFM_H
+
+/* Defines */
+
+#define        CFM_VERSION     2
+#define        CFM_SIGNATURE   "CFM - Cyclades CYCX Firmware Module"
+
+/* min/max */
+#define        CFM_IMAGE_SIZE  0x20000 /* max size of CYCX code image file */
+#define        CFM_DESCR_LEN   256     /* max length of description string */
+#define        CFM_MAX_CYCX    1       /* max number of compatible adapters */
+#define        CFM_LOAD_BUFSZ  0x400   /* buffer size for reset code (buffer_load) */
+
+/* Firmware Commands */
+#define GEN_POWER_ON   0x1280
+
+#define GEN_SET_SEG    0x1401  /* boot segment setting. */
+#define GEN_BOOT_DAT   0x1402  /* boot data. */
+#define GEN_START      0x1403  /* board start. */
+#define GEN_DEFPAR     0x1404  /* buffer length for boot. */
+
+/* Adapter Types */
+#define CYCX_2X                2
+/* for now only the 2X is supported, no plans to support 8X or 16X */
+#define CYCX_8X                8
+#define CYCX_16X       16
+
+#define        CFID_X25_2X     5200
+
+/**
+ *     struct cycx_fw_info - firmware module information.
+ *     @codeid - firmware ID
+ *     @version - firmware version number
+ *     @adapter - compatible adapter types
+ *     @memsize - minimum memory size
+ *     @reserved - reserved
+ *     @startoffs - entry point offset
+ *     @winoffs - dual-port memory window offset
+ *     @codeoffs - code load offset
+ *     @codesize - code size
+ *     @dataoffs - configuration data load offset
+ *     @datasize - configuration data size
+ */
+struct cycx_fw_info {
+       unsigned short  codeid;
+       unsigned short  version;
+       unsigned short  adapter[CFM_MAX_CYCX];
+       unsigned long   memsize;
+       unsigned short  reserved[2];
+       unsigned short  startoffs;
+       unsigned short  winoffs;
+       unsigned short  codeoffs;
+       unsigned long   codesize;
+       unsigned short  dataoffs;
+       unsigned long   datasize;
+};
+
+/**
+ *     struct cycx_firmware - CYCX firmware file structure
+ *     @signature - CFM file signature
+ *     @version - file format version
+ *     @checksum - info + image
+ *     @reserved - reserved
+ *     @descr - description string
+ *     @info - firmware module info
+ *     @image - code image (variable size)
+ */
+struct cycx_firmware {
+       char                signature[80];
+       unsigned short      version;
+       unsigned short      checksum;
+       unsigned short      reserved[6];
+       char                descr[CFM_DESCR_LEN];
+       struct cycx_fw_info info;
+       unsigned char       image[0];
+};
+
+struct cycx_fw_header {
+       unsigned long  reset_size;
+       unsigned long  data_size;
+       unsigned long  code_size;
+};
+#endif /* _CYCX_CFM_H */
diff --git a/lib/libdss-include/include/linux/dcbnl.h b/lib/libdss-include/include/linux/dcbnl.h
new file mode 100644 (file)
index 0000000..3ea470f
--- /dev/null
@@ -0,0 +1,755 @@
+/*
+ * Copyright (c) 2008-2011, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Author: Lucy Liu <lucy.liu@intel.com>
+ */
+
+#ifndef __LINUX_DCBNL_H__
+#define __LINUX_DCBNL_H__
+
+#include <linux/types.h>
+
+/* IEEE 802.1Qaz std supported values */
+#define IEEE_8021QAZ_MAX_TCS   8
+
+#define IEEE_8021QAZ_TSA_STRICT                0
+#define IEEE_8021QAZ_TSA_CB_SHAPER     1
+#define IEEE_8021QAZ_TSA_ETS           2
+#define IEEE_8021QAZ_TSA_VENDOR                255
+
+/* This structure contains the IEEE 802.1Qaz ETS managed object
+ *
+ * @willing: willing bit in ETS configuration TLV
+ * @ets_cap: indicates supported capacity of ets feature
+ * @cbs: credit based shaper ets algorithm supported
+ * @tc_tx_bw: tc tx bandwidth indexed by traffic class
+ * @tc_rx_bw: tc rx bandwidth indexed by traffic class
+ * @tc_tsa: TSA Assignment table, indexed by traffic class
+ * @prio_tc: priority assignment table mapping 8021Qp to traffic class
+ * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV
+ * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV
+ * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV
+ *
+ * Recommended values are used to set fields in the ETS recommendation TLV
+ * with hardware offloaded LLDP.
+ *
+ * ----
+ *  TSA Assignment 8 bit identifiers
+ *     0       strict priority
+ *     1       credit-based shaper
+ *     2       enhanced transmission selection
+ *     3-254   reserved
+ *     255     vendor specific
+ */
+struct ieee_ets {
+       __u8    willing;
+       __u8    ets_cap;
+       __u8    cbs;
+       __u8    tc_tx_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_rx_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_tsa[IEEE_8021QAZ_MAX_TCS];
+       __u8    prio_tc[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_reco_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];
+       __u8    reco_prio_tc[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains rate limit extension to the IEEE 802.1Qaz ETS
+ * managed object.
+ * Values are 64 bits long and specified in Kbps to enable usage over both
+ * slow and very fast networks.
+ *
+ * @tc_maxrate: maximal tc tx bandwidth indexed by traffic class
+ */
+struct ieee_maxrate {
+       __u64   tc_maxrate[IEEE_8021QAZ_MAX_TCS];
+};
+
+enum dcbnl_cndd_states {
+       DCB_CNDD_RESET = 0,
+       DCB_CNDD_EDGE,
+       DCB_CNDD_INTERIOR,
+       DCB_CNDD_INTERIOR_READY,
+};
+
+/* This structure contains the IEEE 802.1Qau QCN managed object.
+ *
+ *@rpg_enable: enable QCN RP
+ *@rppp_max_rps: maximum number of RPs allowed for this CNPV on this port
+ *@rpg_time_reset: time between rate increases if no CNMs received.
+ *                given in u-seconds
+ *@rpg_byte_reset: transmitted data between rate increases if no CNMs received.
+ *                given in Bytes
+ *@rpg_threshold: The number of times rpByteStage or rpTimeStage can count
+ *                before RP rate control state machine advances states
+ *@rpg_max_rate: the maxinun rate, in Mbits per second,
+ *              at which an RP can transmit
+ *@rpg_ai_rate: The rate, in Mbits per second,
+ *             used to increase rpTargetRate in the RPR_ACTIVE_INCREASE
+ *@rpg_hai_rate: The rate, in Mbits per second,
+ *              used to increase rpTargetRate in the RPR_HYPER_INCREASE state
+ *@rpg_gd: Upon CNM receive, flow rate is limited to (Fb/Gd)*CurrentRate.
+ *        rpgGd is given as log2(Gd), where Gd may only be powers of 2
+ *@rpg_min_dec_fac: The minimum factor by which the current transmit rate
+ *                 can be changed by reception of a CNM.
+ *                 value is given as percentage (1-100)
+ *@rpg_min_rate: The minimum value, in bits per second, for rate to limit
+ *@cndd_state_machine: The state of the congestion notification domain
+ *                    defense state machine, as defined by IEEE 802.3Qau
+ *                    section 32.1.1. In the interior ready state,
+ *                    the QCN capable hardware may add CN-TAG TLV to the
+ *                    outgoing traffic, to specifically identify outgoing
+ *                    flows.
+ */
+
+struct ieee_qcn {
+       __u8 rpg_enable[IEEE_8021QAZ_MAX_TCS];
+       __u32 rppp_max_rps[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_time_reset[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_byte_reset[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_threshold[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_max_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_ai_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_hai_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_gd[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_min_dec_fac[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_min_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 cndd_state_machine[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains the IEEE 802.1Qau QCN statistics.
+ *
+ *@rppp_rp_centiseconds: the number of RP-centiseconds accumulated
+ *                      by RPs at this priority level on this Port
+ *@rppp_created_rps: number of active RPs(flows) that react to CNMs
+ */
+
+struct ieee_qcn_stats {
+       __u64 rppp_rp_centiseconds[IEEE_8021QAZ_MAX_TCS];
+       __u32 rppp_created_rps[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains the IEEE 802.1Qaz PFC managed object
+ *
+ * @pfc_cap: Indicates the number of traffic classes on the local device
+ *          that may simultaneously have PFC enabled.
+ * @pfc_en: bitmap indicating pfc enabled traffic classes
+ * @mbc: enable macsec bypass capability
+ * @delay: the allowance made for a round-trip propagation delay of the
+ *        link in bits.
+ * @requests: count of the sent pfc frames
+ * @indications: count of the received pfc frames
+ */
+struct ieee_pfc {
+       __u8    pfc_cap;
+       __u8    pfc_en;
+       __u8    mbc;
+       __u16   delay;
+       __u64   requests[IEEE_8021QAZ_MAX_TCS];
+       __u64   indications[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* CEE DCBX std supported values */
+#define CEE_DCBX_MAX_PGS       8
+#define CEE_DCBX_MAX_PRIO      8
+
+/**
+ * struct cee_pg - CEE Priority-Group managed object
+ *
+ * @willing: willing bit in the PG tlv
+ * @error: error bit in the PG tlv
+ * @pg_en: enable bit of the PG feature
+ * @tcs_supported: number of traffic classes supported
+ * @pg_bw: bandwidth percentage for each priority group
+ * @prio_pg: priority to PG mapping indexed by priority
+ */
+struct cee_pg {
+       __u8    willing;
+       __u8    error;
+       __u8    pg_en;
+       __u8    tcs_supported;
+       __u8    pg_bw[CEE_DCBX_MAX_PGS];
+       __u8    prio_pg[CEE_DCBX_MAX_PGS];
+};
+
+/**
+ * struct cee_pfc - CEE PFC managed object
+ *
+ * @willing: willing bit in the PFC tlv
+ * @error: error bit in the PFC tlv
+ * @pfc_en: bitmap indicating pfc enabled traffic classes
+ * @tcs_supported: number of traffic classes supported
+ */
+struct cee_pfc {
+       __u8    willing;
+       __u8    error;
+       __u8    pfc_en;
+       __u8    tcs_supported;
+};
+
+/* IEEE 802.1Qaz std supported values */
+#define IEEE_8021QAZ_APP_SEL_ETHERTYPE 1
+#define IEEE_8021QAZ_APP_SEL_STREAM    2
+#define IEEE_8021QAZ_APP_SEL_DGRAM     3
+#define IEEE_8021QAZ_APP_SEL_ANY       4
+
+/* This structure contains the IEEE 802.1Qaz APP managed object. This
+ * object is also used for the CEE std as well.
+ *
+ * @selector: protocol identifier type
+ * @protocol: protocol of type indicated
+ * @priority: 3-bit unsigned integer indicating priority for IEEE
+ *            8-bit 802.1p user priority bitmap for CEE
+ *
+ * ----
+ *  Selector field values for IEEE 802.1Qaz
+ *     0       Reserved
+ *     1       Ethertype
+ *     2       Well known port number over TCP or SCTP
+ *     3       Well known port number over UDP or DCCP
+ *     4       Well known port number over TCP, SCTP, UDP, or DCCP
+ *     5-7     Reserved
+ *
+ *  Selector field values for CEE
+ *     0       Ethertype
+ *     1       Well known port number over TCP or UDP
+ *     2-3     Reserved
+ */
+struct dcb_app {
+       __u8    selector;
+       __u8    priority;
+       __u16   protocol;
+};
+
+/**
+ * struct dcb_peer_app_info - APP feature information sent by the peer
+ *
+ * @willing: willing bit in the peer APP tlv
+ * @error: error bit in the peer APP tlv
+ *
+ * In addition to this information the full peer APP tlv also contains
+ * a table of 'app_count' APP objects defined above.
+ */
+struct dcb_peer_app_info {
+       __u8    willing;
+       __u8    error;
+};
+
+struct dcbmsg {
+       __u8               dcb_family;
+       __u8               cmd;
+       __u16              dcb_pad;
+};
+
+/**
+ * enum dcbnl_commands - supported DCB commands
+ *
+ * @DCB_CMD_UNDEFINED: unspecified command to catch errors
+ * @DCB_CMD_GSTATE: request the state of DCB in the device
+ * @DCB_CMD_SSTATE: set the state of DCB in the device
+ * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx
+ * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx
+ * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx
+ * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx
+ * @DCB_CMD_PFC_GCFG: request the priority flow control configuration
+ * @DCB_CMD_PFC_SCFG: set the priority flow control configuration
+ * @DCB_CMD_SET_ALL: apply all changes to the underlying device
+ * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying
+ *                        device.  Only useful when using bonding.
+ * @DCB_CMD_GCAP: request the DCB capabilities of the device
+ * @DCB_CMD_GNUMTCS: get the number of traffic classes currently supported
+ * @DCB_CMD_SNUMTCS: set the number of traffic classes
+ * @DCB_CMD_GBCN: set backward congestion notification configuration
+ * @DCB_CMD_SBCN: get backward congestion notification configration.
+ * @DCB_CMD_GAPP: get application protocol configuration
+ * @DCB_CMD_SAPP: set application protocol configuration
+ * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration
+ * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration
+ * @DCB_CMD_GDCBX: get DCBX engine configuration
+ * @DCB_CMD_SDCBX: set DCBX engine configuration
+ * @DCB_CMD_GFEATCFG: get DCBX features flags
+ * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
+ * @DCB_CMD_CEE_GET: get CEE aggregated configuration
+ * @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration
+ */
+enum dcbnl_commands {
+       DCB_CMD_UNDEFINED,
+
+       DCB_CMD_GSTATE,
+       DCB_CMD_SSTATE,
+
+       DCB_CMD_PGTX_GCFG,
+       DCB_CMD_PGTX_SCFG,
+       DCB_CMD_PGRX_GCFG,
+       DCB_CMD_PGRX_SCFG,
+
+       DCB_CMD_PFC_GCFG,
+       DCB_CMD_PFC_SCFG,
+
+       DCB_CMD_SET_ALL,
+
+       DCB_CMD_GPERM_HWADDR,
+
+       DCB_CMD_GCAP,
+
+       DCB_CMD_GNUMTCS,
+       DCB_CMD_SNUMTCS,
+
+       DCB_CMD_PFC_GSTATE,
+       DCB_CMD_PFC_SSTATE,
+
+       DCB_CMD_BCN_GCFG,
+       DCB_CMD_BCN_SCFG,
+
+       DCB_CMD_GAPP,
+       DCB_CMD_SAPP,
+
+       DCB_CMD_IEEE_SET,
+       DCB_CMD_IEEE_GET,
+
+       DCB_CMD_GDCBX,
+       DCB_CMD_SDCBX,
+
+       DCB_CMD_GFEATCFG,
+       DCB_CMD_SFEATCFG,
+
+       DCB_CMD_CEE_GET,
+       DCB_CMD_IEEE_DEL,
+
+       __DCB_CMD_ENUM_MAX,
+       DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_attrs - DCB top-level netlink attributes
+ *
+ * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING)
+ * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8)
+ * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8)
+ * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED)
+ * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8)
+ * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED)
+ * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8)
+ * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED)
+ * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED)
+ * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED)
+ * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED)
+ * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
+ * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
+ * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
+ * @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED)
+ */
+enum dcbnl_attrs {
+       DCB_ATTR_UNDEFINED,
+
+       DCB_ATTR_IFNAME,
+       DCB_ATTR_STATE,
+       DCB_ATTR_PFC_STATE,
+       DCB_ATTR_PFC_CFG,
+       DCB_ATTR_NUM_TC,
+       DCB_ATTR_PG_CFG,
+       DCB_ATTR_SET_ALL,
+       DCB_ATTR_PERM_HWADDR,
+       DCB_ATTR_CAP,
+       DCB_ATTR_NUMTCS,
+       DCB_ATTR_BCN,
+       DCB_ATTR_APP,
+
+       /* IEEE std attributes */
+       DCB_ATTR_IEEE,
+
+       DCB_ATTR_DCBX,
+       DCB_ATTR_FEATCFG,
+
+       /* CEE nested attributes */
+       DCB_ATTR_CEE,
+
+       __DCB_ATTR_ENUM_MAX,
+       DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum ieee_attrs - IEEE 802.1Qaz get/set attributes
+ *
+ * @DCB_ATTR_IEEE_UNSPEC: unspecified
+ * @DCB_ATTR_IEEE_ETS: negotiated ETS configuration
+ * @DCB_ATTR_IEEE_PFC: negotiated PFC configuration
+ * @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration
+ * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
+ * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
+ * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
+ */
+enum ieee_attrs {
+       DCB_ATTR_IEEE_UNSPEC,
+       DCB_ATTR_IEEE_ETS,
+       DCB_ATTR_IEEE_PFC,
+       DCB_ATTR_IEEE_APP_TABLE,
+       DCB_ATTR_IEEE_PEER_ETS,
+       DCB_ATTR_IEEE_PEER_PFC,
+       DCB_ATTR_IEEE_PEER_APP,
+       DCB_ATTR_IEEE_MAXRATE,
+       DCB_ATTR_IEEE_QCN,
+       DCB_ATTR_IEEE_QCN_STATS,
+       __DCB_ATTR_IEEE_MAX
+};
+#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
+
+enum ieee_attrs_app {
+       DCB_ATTR_IEEE_APP_UNSPEC,
+       DCB_ATTR_IEEE_APP,
+       __DCB_ATTR_IEEE_APP_MAX
+};
+#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
+
+/**
+ * enum cee_attrs - CEE DCBX get attributes.
+ *
+ * @DCB_ATTR_CEE_UNSPEC: unspecified
+ * @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only
+ * @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only
+ * @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only
+ * @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG)
+ * @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG)
+ * @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG)
+ * @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP)
+ * @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG)
+ *
+ * An aggregated collection of the cee std negotiated parameters.
+ */
+enum cee_attrs {
+       DCB_ATTR_CEE_UNSPEC,
+       DCB_ATTR_CEE_PEER_PG,
+       DCB_ATTR_CEE_PEER_PFC,
+       DCB_ATTR_CEE_PEER_APP_TABLE,
+       DCB_ATTR_CEE_TX_PG,
+       DCB_ATTR_CEE_RX_PG,
+       DCB_ATTR_CEE_PFC,
+       DCB_ATTR_CEE_APP_TABLE,
+       DCB_ATTR_CEE_FEAT,
+       __DCB_ATTR_CEE_MAX
+};
+#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1)
+
+enum peer_app_attr {
+       DCB_ATTR_CEE_PEER_APP_UNSPEC,
+       DCB_ATTR_CEE_PEER_APP_INFO,
+       DCB_ATTR_CEE_PEER_APP,
+       __DCB_ATTR_CEE_PEER_APP_MAX
+};
+#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1)
+
+enum cee_attrs_app {
+       DCB_ATTR_CEE_APP_UNSPEC,
+       DCB_ATTR_CEE_APP,
+       __DCB_ATTR_CEE_APP_MAX
+};
+#define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1)
+
+/**
+ * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
+ *
+ * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined
+ * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG)
+ *
+ */
+enum dcbnl_pfc_up_attrs {
+       DCB_PFC_UP_ATTR_UNDEFINED,
+
+       DCB_PFC_UP_ATTR_0,
+       DCB_PFC_UP_ATTR_1,
+       DCB_PFC_UP_ATTR_2,
+       DCB_PFC_UP_ATTR_3,
+       DCB_PFC_UP_ATTR_4,
+       DCB_PFC_UP_ATTR_5,
+       DCB_PFC_UP_ATTR_6,
+       DCB_PFC_UP_ATTR_7,
+       DCB_PFC_UP_ATTR_ALL,
+
+       __DCB_PFC_UP_ATTR_ENUM_MAX,
+       DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_pg_attrs - DCB Priority Group attributes
+ *
+ * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_PG_ATTR_TC_0: Priority Group Traffic Class 0 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_1: Priority Group Traffic Class 1 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_2: Priority Group Traffic Class 2 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_3: Priority Group Traffic Class 3 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_4: Priority Group Traffic Class 4 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_5: Priority Group Traffic Class 5 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_6: Priority Group Traffic Class 6 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_7: Priority Group Traffic Class 7 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_MAX: highest attribute number currently defined
+ * @DCB_PG_ATTR_TC_ALL: apply to all traffic classes (NLA_NESTED)
+ * @DCB_PG_ATTR_BW_ID_0: Percent of link bandwidth for Priority Group 0 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_1: Percent of link bandwidth for Priority Group 1 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_2: Percent of link bandwidth for Priority Group 2 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_3: Percent of link bandwidth for Priority Group 3 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_4: Percent of link bandwidth for Priority Group 4 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_5: Percent of link bandwidth for Priority Group 5 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_6: Percent of link bandwidth for Priority Group 6 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_7: Percent of link bandwidth for Priority Group 7 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_MAX: highest attribute number currently defined
+ * @DCB_PG_ATTR_BW_ID_ALL: apply to all priority groups (NLA_FLAG)
+ *
+ */
+enum dcbnl_pg_attrs {
+       DCB_PG_ATTR_UNDEFINED,
+
+       DCB_PG_ATTR_TC_0,
+       DCB_PG_ATTR_TC_1,
+       DCB_PG_ATTR_TC_2,
+       DCB_PG_ATTR_TC_3,
+       DCB_PG_ATTR_TC_4,
+       DCB_PG_ATTR_TC_5,
+       DCB_PG_ATTR_TC_6,
+       DCB_PG_ATTR_TC_7,
+       DCB_PG_ATTR_TC_MAX,
+       DCB_PG_ATTR_TC_ALL,
+
+       DCB_PG_ATTR_BW_ID_0,
+       DCB_PG_ATTR_BW_ID_1,
+       DCB_PG_ATTR_BW_ID_2,
+       DCB_PG_ATTR_BW_ID_3,
+       DCB_PG_ATTR_BW_ID_4,
+       DCB_PG_ATTR_BW_ID_5,
+       DCB_PG_ATTR_BW_ID_6,
+       DCB_PG_ATTR_BW_ID_7,
+       DCB_PG_ATTR_BW_ID_MAX,
+       DCB_PG_ATTR_BW_ID_ALL,
+
+       __DCB_PG_ATTR_ENUM_MAX,
+       DCB_PG_ATTR_MAX = __DCB_PG_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_tc_attrs - DCB Traffic Class attributes
+ *
+ * @DCB_TC_ATTR_PARAM_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_TC_ATTR_PARAM_PGID: (NLA_U8) Priority group the traffic class belongs to
+ *                          Valid values are:  0-7
+ * @DCB_TC_ATTR_PARAM_UP_MAPPING: (NLA_U8) Traffic class to user priority map
+ *                                Some devices may not support changing the
+ *                                user priority map of a TC.
+ * @DCB_TC_ATTR_PARAM_STRICT_PRIO: (NLA_U8) Strict priority setting
+ *                                 0 - none
+ *                                 1 - group strict
+ *                                 2 - link strict
+ * @DCB_TC_ATTR_PARAM_BW_PCT: optional - (NLA_U8) If supported by the device and
+ *                            not configured to use link strict priority,
+ *                            this is the percentage of bandwidth of the
+ *                            priority group this traffic class belongs to
+ * @DCB_TC_ATTR_PARAM_ALL: (NLA_FLAG) all traffic class parameters
+ *
+ */
+enum dcbnl_tc_attrs {
+       DCB_TC_ATTR_PARAM_UNDEFINED,
+
+       DCB_TC_ATTR_PARAM_PGID,
+       DCB_TC_ATTR_PARAM_UP_MAPPING,
+       DCB_TC_ATTR_PARAM_STRICT_PRIO,
+       DCB_TC_ATTR_PARAM_BW_PCT,
+       DCB_TC_ATTR_PARAM_ALL,
+
+       __DCB_TC_ATTR_PARAM_ENUM_MAX,
+       DCB_TC_ATTR_PARAM_MAX = __DCB_TC_ATTR_PARAM_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_cap_attrs - DCB Capability attributes
+ *
+ * @DCB_CAP_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_CAP_ATTR_ALL: (NLA_FLAG) all capability parameters
+ * @DCB_CAP_ATTR_PG: (NLA_U8) device supports Priority Groups
+ * @DCB_CAP_ATTR_PFC: (NLA_U8) device supports Priority Flow Control
+ * @DCB_CAP_ATTR_UP2TC: (NLA_U8) device supports user priority to
+ *                               traffic class mapping
+ * @DCB_CAP_ATTR_PG_TCS: (NLA_U8) bitmap where each bit represents a
+ *                                number of traffic classes the device
+ *                                can be configured to use for Priority Groups
+ * @DCB_CAP_ATTR_PFC_TCS: (NLA_U8) bitmap where each bit represents a
+ *                                 number of traffic classes the device can be
+ *                                 configured to use for Priority Flow Control
+ * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority
+ * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion
+ *                             Notification
+ * @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine
+ *
+ */
+enum dcbnl_cap_attrs {
+       DCB_CAP_ATTR_UNDEFINED,
+       DCB_CAP_ATTR_ALL,
+       DCB_CAP_ATTR_PG,
+       DCB_CAP_ATTR_PFC,
+       DCB_CAP_ATTR_UP2TC,
+       DCB_CAP_ATTR_PG_TCS,
+       DCB_CAP_ATTR_PFC_TCS,
+       DCB_CAP_ATTR_GSP,
+       DCB_CAP_ATTR_BCN,
+       DCB_CAP_ATTR_DCBX,
+
+       __DCB_CAP_ATTR_ENUM_MAX,
+       DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * DCBX capability flags
+ *
+ * @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent.
+ *                     'set' routines are used to configure the device with
+ *                     the negotiated parameters
+ *
+ * @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but
+ *                            by another entity
+ *                            'get' routines are used to retrieve the
+ *                            negotiated parameters
+ *                            'set' routines can be used to set the initial
+ *                            negotiation configuration
+ *
+ * @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine
+ *                        supports the CEE protocol flavor
+ *
+ * @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine
+ *                         supports the IEEE protocol flavor
+ *
+ * @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine
+ *                       supports static configuration (i.e no actual
+ *                       negotiation is performed negotiated parameters equal
+ *                       the initial configuration)
+ *
+ */
+#define DCB_CAP_DCBX_HOST              0x01
+#define DCB_CAP_DCBX_LLD_MANAGED       0x02
+#define DCB_CAP_DCBX_VER_CEE           0x04
+#define DCB_CAP_DCBX_VER_IEEE          0x08
+#define DCB_CAP_DCBX_STATIC            0x10
+
+/**
+ * enum dcbnl_numtcs_attrs - number of traffic classes
+ *
+ * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_NUMTCS_ATTR_ALL: (NLA_FLAG) all traffic class attributes
+ * @DCB_NUMTCS_ATTR_PG: (NLA_U8) number of traffic classes used for
+ *                               priority groups
+ * @DCB_NUMTCS_ATTR_PFC: (NLA_U8) number of traffic classes which can
+ *                                support priority flow control
+ */
+enum dcbnl_numtcs_attrs {
+       DCB_NUMTCS_ATTR_UNDEFINED,
+       DCB_NUMTCS_ATTR_ALL,
+       DCB_NUMTCS_ATTR_PG,
+       DCB_NUMTCS_ATTR_PFC,
+
+       __DCB_NUMTCS_ATTR_ENUM_MAX,
+       DCB_NUMTCS_ATTR_MAX = __DCB_NUMTCS_ATTR_ENUM_MAX - 1,
+};
+
+enum dcbnl_bcn_attrs{
+       DCB_BCN_ATTR_UNDEFINED = 0,
+
+       DCB_BCN_ATTR_RP_0,
+       DCB_BCN_ATTR_RP_1,
+       DCB_BCN_ATTR_RP_2,
+       DCB_BCN_ATTR_RP_3,
+       DCB_BCN_ATTR_RP_4,
+       DCB_BCN_ATTR_RP_5,
+       DCB_BCN_ATTR_RP_6,
+       DCB_BCN_ATTR_RP_7,
+       DCB_BCN_ATTR_RP_ALL,
+
+       DCB_BCN_ATTR_BCNA_0,
+       DCB_BCN_ATTR_BCNA_1,
+       DCB_BCN_ATTR_ALPHA,
+       DCB_BCN_ATTR_BETA,
+       DCB_BCN_ATTR_GD,
+       DCB_BCN_ATTR_GI,
+       DCB_BCN_ATTR_TMAX,
+       DCB_BCN_ATTR_TD,
+       DCB_BCN_ATTR_RMIN,
+       DCB_BCN_ATTR_W,
+       DCB_BCN_ATTR_RD,
+       DCB_BCN_ATTR_RU,
+       DCB_BCN_ATTR_WRTT,
+       DCB_BCN_ATTR_RI,
+       DCB_BCN_ATTR_C,
+       DCB_BCN_ATTR_ALL,
+
+       __DCB_BCN_ATTR_ENUM_MAX,
+       DCB_BCN_ATTR_MAX = __DCB_BCN_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcb_general_attr_values - general DCB attribute values
+ *
+ * @DCB_ATTR_UNDEFINED: value used to indicate an attribute is not supported
+ *
+ */
+enum dcb_general_attr_values {
+       DCB_ATTR_VALUE_UNDEFINED = 0xff
+};
+
+#define DCB_APP_IDTYPE_ETHTYPE 0x00
+#define DCB_APP_IDTYPE_PORTNUM 0x01
+enum dcbnl_app_attrs {
+       DCB_APP_ATTR_UNDEFINED,
+
+       DCB_APP_ATTR_IDTYPE,
+       DCB_APP_ATTR_ID,
+       DCB_APP_ATTR_PRIORITY,
+
+       __DCB_APP_ATTR_ENUM_MAX,
+       DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_featcfg_attrs - features conifiguration flags
+ *
+ * @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes
+ * @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups
+ * @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority
+ *                                 flow control
+ * @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV
+ *
+ */
+#define DCB_FEATCFG_ERROR      0x01    /* error in feature resolution */
+#define DCB_FEATCFG_ENABLE     0x02    /* enable feature */
+#define DCB_FEATCFG_WILLING    0x04    /* feature is willing */
+#define DCB_FEATCFG_ADVERTISE  0x08    /* advertise feature */
+enum dcbnl_featcfg_attrs {
+       DCB_FEATCFG_ATTR_UNDEFINED,
+       DCB_FEATCFG_ATTR_ALL,
+       DCB_FEATCFG_ATTR_PG,
+       DCB_FEATCFG_ATTR_PFC,
+       DCB_FEATCFG_ATTR_APP,
+
+       __DCB_FEATCFG_ATTR_ENUM_MAX,
+       DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1,
+};
+
+#endif /* __LINUX_DCBNL_H__ */
diff --git a/lib/libdss-include/include/linux/dccp.h b/lib/libdss-include/include/linux/dccp.h
new file mode 100644 (file)
index 0000000..d0e2226
--- /dev/null
@@ -0,0 +1,237 @@
+#ifndef _LINUX_DCCP_H
+#define _LINUX_DCCP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/**
+ * struct dccp_hdr - generic part of DCCP packet header
+ *
+ * @dccph_sport - Relevant port on the endpoint that sent this packet
+ * @dccph_dport - Relevant port on the other endpoint
+ * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
+ * @dccph_ccval - Used by the HC-Sender CCID
+ * @dccph_cscov - Parts of the packet that are covered by the Checksum field
+ * @dccph_checksum - Internet checksum, depends on dccph_cscov
+ * @dccph_x - 0 = 24 bit sequence number, 1 = 48
+ * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
+ * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
+ */
+struct dccp_hdr {
+       __be16  dccph_sport,
+               dccph_dport;
+       __u8    dccph_doff;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    dccph_cscov:4,
+               dccph_ccval:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8    dccph_ccval:4,
+               dccph_cscov:4;
+#else
+#error  "Adjust your <asm/byteorder.h> defines"
+#endif
+       __sum16 dccph_checksum;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    dccph_x:1,
+               dccph_type:4,
+               dccph_reserved:3;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8    dccph_reserved:3,
+               dccph_type:4,
+               dccph_x:1;
+#else
+#error  "Adjust your <asm/byteorder.h> defines"
+#endif
+       __u8    dccph_seq2;
+       __be16  dccph_seq;
+};
+
+/**
+ * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
+ *
+ * @dccph_seq_low - low 24 bits of a 48 bit seq packet
+ */
+struct dccp_hdr_ext {
+       __be32  dccph_seq_low;
+};
+
+/**
+ * struct dccp_hdr_request - Connection initiation request header
+ *
+ * @dccph_req_service - Service to which the client app wants to connect
+ */
+struct dccp_hdr_request {
+       __be32  dccph_req_service;
+};
+/**
+ * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
+ *
+ * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
+ * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
+ */
+struct dccp_hdr_ack_bits {
+       __be16  dccph_reserved1;
+       __be16  dccph_ack_nr_high;
+       __be32  dccph_ack_nr_low;
+};
+/**
+ * struct dccp_hdr_response - Connection initiation response header
+ *
+ * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
+ * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
+ */
+struct dccp_hdr_response {
+       struct dccp_hdr_ack_bits        dccph_resp_ack;
+       __be32                          dccph_resp_service;
+};
+
+/**
+ * struct dccp_hdr_reset - Unconditionally shut down a connection
+ *
+ * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
+ * @dccph_reset_code - one of %dccp_reset_codes
+ * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
+ */
+struct dccp_hdr_reset {
+       struct dccp_hdr_ack_bits        dccph_reset_ack;
+       __u8                            dccph_reset_code,
+                                       dccph_reset_data[3];
+};
+
+enum dccp_pkt_type {
+       DCCP_PKT_REQUEST = 0,
+       DCCP_PKT_RESPONSE,
+       DCCP_PKT_DATA,
+       DCCP_PKT_ACK,
+       DCCP_PKT_DATAACK,
+       DCCP_PKT_CLOSEREQ,
+       DCCP_PKT_CLOSE,
+       DCCP_PKT_RESET,
+       DCCP_PKT_SYNC,
+       DCCP_PKT_SYNCACK,
+       DCCP_PKT_INVALID,
+};
+
+#define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID
+
+static __inline__ unsigned int dccp_packet_hdr_len(const __u8 type)
+{
+       if (type == DCCP_PKT_DATA)
+               return 0;
+       if (type == DCCP_PKT_DATAACK    ||
+           type == DCCP_PKT_ACK        ||
+           type == DCCP_PKT_SYNC       ||
+           type == DCCP_PKT_SYNCACK    ||
+           type == DCCP_PKT_CLOSE      ||
+           type == DCCP_PKT_CLOSEREQ)
+               return sizeof(struct dccp_hdr_ack_bits);
+       if (type == DCCP_PKT_REQUEST)
+               return sizeof(struct dccp_hdr_request);
+       if (type == DCCP_PKT_RESPONSE)
+               return sizeof(struct dccp_hdr_response);
+       return sizeof(struct dccp_hdr_reset);
+}
+enum dccp_reset_codes {
+       DCCP_RESET_CODE_UNSPECIFIED = 0,
+       DCCP_RESET_CODE_CLOSED,
+       DCCP_RESET_CODE_ABORTED,
+       DCCP_RESET_CODE_NO_CONNECTION,
+       DCCP_RESET_CODE_PACKET_ERROR,
+       DCCP_RESET_CODE_OPTION_ERROR,
+       DCCP_RESET_CODE_MANDATORY_ERROR,
+       DCCP_RESET_CODE_CONNECTION_REFUSED,
+       DCCP_RESET_CODE_BAD_SERVICE_CODE,
+       DCCP_RESET_CODE_TOO_BUSY,
+       DCCP_RESET_CODE_BAD_INIT_COOKIE,
+       DCCP_RESET_CODE_AGGRESSION_PENALTY,
+
+       DCCP_MAX_RESET_CODES            /* Leave at the end!  */
+};
+
+/* DCCP options */
+enum {
+       DCCPO_PADDING = 0,
+       DCCPO_MANDATORY = 1,
+       DCCPO_MIN_RESERVED = 3,
+       DCCPO_MAX_RESERVED = 31,
+       DCCPO_CHANGE_L = 32,
+       DCCPO_CONFIRM_L = 33,
+       DCCPO_CHANGE_R = 34,
+       DCCPO_CONFIRM_R = 35,
+       DCCPO_NDP_COUNT = 37,
+       DCCPO_ACK_VECTOR_0 = 38,
+       DCCPO_ACK_VECTOR_1 = 39,
+       DCCPO_TIMESTAMP = 41,
+       DCCPO_TIMESTAMP_ECHO = 42,
+       DCCPO_ELAPSED_TIME = 43,
+       DCCPO_MAX = 45,
+       DCCPO_MIN_RX_CCID_SPECIFIC = 128,       /* from sender to receiver */
+       DCCPO_MAX_RX_CCID_SPECIFIC = 191,
+       DCCPO_MIN_TX_CCID_SPECIFIC = 192,       /* from receiver to sender */
+       DCCPO_MAX_TX_CCID_SPECIFIC = 255,
+};
+/* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */
+#define DCCP_SINGLE_OPT_MAXLEN 253
+
+/* DCCP CCIDS */
+enum {
+       DCCPC_CCID2 = 2,
+       DCCPC_CCID3 = 3,
+};
+
+/* DCCP features (RFC 4340 section 6.4) */
+enum dccp_feature_numbers {
+       DCCPF_RESERVED = 0,
+       DCCPF_CCID = 1,
+       DCCPF_SHORT_SEQNOS = 2,
+       DCCPF_SEQUENCE_WINDOW = 3,
+       DCCPF_ECN_INCAPABLE = 4,
+       DCCPF_ACK_RATIO = 5,
+       DCCPF_SEND_ACK_VECTOR = 6,
+       DCCPF_SEND_NDP_COUNT = 7,
+       DCCPF_MIN_CSUM_COVER = 8,
+       DCCPF_DATA_CHECKSUM = 9,
+       /* 10-127 reserved */
+       DCCPF_MIN_CCID_SPECIFIC = 128,
+       DCCPF_SEND_LEV_RATE = 192,      /* RFC 4342, sec. 8.4 */
+       DCCPF_MAX_CCID_SPECIFIC = 255,
+};
+
+/* DCCP socket control message types for cmsg */
+enum dccp_cmsg_type {
+       DCCP_SCM_PRIORITY = 1,
+       DCCP_SCM_QPOLICY_MAX = 0xFFFF,
+       /* ^-- Up to here reserved exclusively for qpolicy parameters */
+       DCCP_SCM_MAX
+};
+
+/* DCCP priorities for outgoing/queued packets */
+enum dccp_packet_dequeueing_policy {
+       DCCPQ_POLICY_SIMPLE,
+       DCCPQ_POLICY_PRIO,
+       DCCPQ_POLICY_MAX
+};
+
+/* DCCP socket options */
+#define DCCP_SOCKOPT_PACKET_SIZE       1 /* XXX deprecated, without effect */
+#define DCCP_SOCKOPT_SERVICE           2
+#define DCCP_SOCKOPT_CHANGE_L          3
+#define DCCP_SOCKOPT_CHANGE_R          4
+#define DCCP_SOCKOPT_GET_CUR_MPS       5
+#define DCCP_SOCKOPT_SERVER_TIMEWAIT   6
+#define DCCP_SOCKOPT_SEND_CSCOV                10
+#define DCCP_SOCKOPT_RECV_CSCOV                11
+#define DCCP_SOCKOPT_AVAILABLE_CCIDS   12
+#define DCCP_SOCKOPT_CCID              13
+#define DCCP_SOCKOPT_TX_CCID           14
+#define DCCP_SOCKOPT_RX_CCID           15
+#define DCCP_SOCKOPT_QPOLICY_ID                16
+#define DCCP_SOCKOPT_QPOLICY_TXQLEN    17
+#define DCCP_SOCKOPT_CCID_RX_INFO      128
+#define DCCP_SOCKOPT_CCID_TX_INFO      192
+
+/* maximum number of services provided on the same listening port */
+#define DCCP_SERVICE_LIST_MAX_LEN      32
+
+
+#endif /* _LINUX_DCCP_H */
diff --git a/lib/libdss-include/include/linux/dlm.h b/lib/libdss-include/include/linux/dlm.h
new file mode 100644 (file)
index 0000000..6120d50
--- /dev/null
@@ -0,0 +1,75 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef __DLM_DOT_H__
+#define __DLM_DOT_H__
+
+/*
+ * Interface to Distributed Lock Manager (DLM)
+ * routines and structures to use DLM lockspaces
+ */
+
+/* Lock levels and flags are here */
+#include <linux/dlmconstants.h>
+#include <linux/types.h>
+
+typedef void dlm_lockspace_t;
+
+/*
+ * Lock status block
+ *
+ * Use this structure to specify the contents of the lock value block.  For a
+ * conversion request, this structure is used to specify the lock ID of the
+ * lock.  DLM writes the status of the lock request and the lock ID assigned
+ * to the request in the lock status block.
+ *
+ * sb_lkid: the returned lock ID.  It is set on new (non-conversion) requests.
+ * It is available when dlm_lock returns.
+ *
+ * sb_lvbptr: saves or returns the contents of the lock's LVB according to rules
+ * shown for the DLM_LKF_VALBLK flag.
+ *
+ * sb_flags: DLM_SBF_DEMOTED is returned if in the process of promoting a lock,
+ * it was first demoted to NL to avoid conversion deadlock.
+ * DLM_SBF_VALNOTVALID is returned if the resource's LVB is marked invalid.
+ *
+ * sb_status: the returned status of the lock request set prior to AST
+ * execution.  Possible return values:
+ *
+ * 0 if lock request was successful
+ * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE
+ * -DLM_EUNLOCK if unlock request was successful
+ * -DLM_ECANCEL if a cancel completed successfully
+ * -EDEADLK if a deadlock was detected
+ * -ETIMEDOUT if the lock request was canceled due to a timeout
+ */
+
+#define DLM_SBF_DEMOTED                0x01
+#define DLM_SBF_VALNOTVALID    0x02
+#define DLM_SBF_ALTMODE                0x04
+
+struct dlm_lksb {
+       int      sb_status;
+       __u32    sb_lkid;
+       char     sb_flags;
+       char *   sb_lvbptr;
+};
+
+/* dlm_new_lockspace() flags */
+
+#define DLM_LSFL_TIMEWARN      0x00000002
+#define DLM_LSFL_FS            0x00000004
+#define DLM_LSFL_NEWEXCL       0x00000008
+
+
+#endif /* __DLM_DOT_H__ */
diff --git a/lib/libdss-include/include/linux/dlm_device.h b/lib/libdss-include/include/linux/dlm_device.h
new file mode 100644 (file)
index 0000000..45f8101
--- /dev/null
@@ -0,0 +1,108 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef _LINUX_DLM_DEVICE_H
+#define _LINUX_DLM_DEVICE_H
+
+/* This is the device interface for dlm, most users will use a library
+ * interface.
+ */
+
+#include <linux/dlm.h>
+#include <linux/types.h>
+
+#define DLM_USER_LVB_LEN       32
+
+/* Version of the device interface */
+#define DLM_DEVICE_VERSION_MAJOR 6
+#define DLM_DEVICE_VERSION_MINOR 0
+#define DLM_DEVICE_VERSION_PATCH 2
+
+/* struct passed to the lock write */
+struct dlm_lock_params {
+       __u8 mode;
+       __u8 namelen;
+       __u16 unused;
+       __u32 flags;
+       __u32 lkid;
+       __u32 parent;
+       __u64 xid;
+       __u64 timeout;
+       void *castparam;
+       void *castaddr;
+       void *bastparam;
+       void *bastaddr;
+       struct dlm_lksb *lksb;
+       char lvb[DLM_USER_LVB_LEN];
+       char name[0];
+};
+
+struct dlm_lspace_params {
+       __u32 flags;
+       __u32 minor;
+       char name[0];
+};
+
+struct dlm_purge_params {
+       __u32 nodeid;
+       __u32 pid;
+};
+
+struct dlm_write_request {
+       __u32 version[3];
+       __u8 cmd;
+       __u8 is64bit;
+       __u8 unused[2];
+
+       union  {
+               struct dlm_lock_params   lock;
+               struct dlm_lspace_params lspace;
+               struct dlm_purge_params  purge;
+       } i;
+};
+
+struct dlm_device_version {
+       __u32 version[3];
+};
+
+/* struct read from the "device" fd,
+   consists mainly of userspace pointers for the library to use */
+
+struct dlm_lock_result {
+       __u32 version[3];
+       __u32 length;
+       void * user_astaddr;
+       void * user_astparam;
+       struct dlm_lksb * user_lksb;
+       struct dlm_lksb lksb;
+       __u8 bast_mode;
+       __u8 unused[3];
+       /* Offsets may be zero if no data is present */
+       __u32 lvb_offset;
+};
+
+/* Commands passed to the device */
+#define DLM_USER_LOCK         1
+#define DLM_USER_UNLOCK       2
+#define DLM_USER_QUERY        3
+#define DLM_USER_CREATE_LOCKSPACE  4
+#define DLM_USER_REMOVE_LOCKSPACE  5
+#define DLM_USER_PURGE        6
+#define DLM_USER_DEADLOCK     7
+
+/* Lockspace flags */
+#define DLM_USER_LSFLG_AUTOFREE   1
+#define DLM_USER_LSFLG_FORCEFREE  2
+
+#endif
+
diff --git a/lib/libdss-include/include/linux/dlm_netlink.h b/lib/libdss-include/include/linux/dlm_netlink.h
new file mode 100644 (file)
index 0000000..647c8ef
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef _DLM_NETLINK_H
+#define _DLM_NETLINK_H
+
+#include <linux/types.h>
+
+enum {
+       DLM_STATUS_WAITING = 1,
+       DLM_STATUS_GRANTED = 2,
+       DLM_STATUS_CONVERT = 3,
+};
+
+#define DLM_LOCK_DATA_VERSION 1
+
+struct dlm_lock_data {
+       __u16 version;
+       __u32 lockspace_id;
+       int nodeid;
+       int ownpid;
+       __u32 id;
+       __u32 remid;
+       __u64 xid;
+       __s8 status;
+       __s8 grmode;
+       __s8 rqmode;
+       unsigned long timestamp;
+       int resource_namelen;
+       char resource_name[DLM_RESNAME_MAXLEN];
+};
+
+enum {
+       DLM_CMD_UNSPEC = 0,
+       DLM_CMD_HELLO,          /* user->kernel */
+       DLM_CMD_TIMEOUT,        /* kernel->user */
+       __DLM_CMD_MAX,
+};
+
+#define DLM_CMD_MAX (__DLM_CMD_MAX - 1)
+
+enum {
+       DLM_TYPE_UNSPEC = 0,
+       DLM_TYPE_LOCK,
+       __DLM_TYPE_MAX,
+};
+
+#define DLM_TYPE_MAX (__DLM_TYPE_MAX - 1)
+
+#define DLM_GENL_VERSION 0x1
+#define DLM_GENL_NAME "DLM"
+
+#endif /* _DLM_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/dlm_plock.h b/lib/libdss-include/include/linux/dlm_plock.h
new file mode 100644 (file)
index 0000000..6403ea2
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005-2008 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef __DLM_PLOCK_DOT_H__
+#define __DLM_PLOCK_DOT_H__
+
+#include <linux/types.h>
+
+#define DLM_PLOCK_MISC_NAME            "dlm_plock"
+
+#define DLM_PLOCK_VERSION_MAJOR        1
+#define DLM_PLOCK_VERSION_MINOR        2
+#define DLM_PLOCK_VERSION_PATCH        0
+
+enum {
+       DLM_PLOCK_OP_LOCK = 1,
+       DLM_PLOCK_OP_UNLOCK,
+       DLM_PLOCK_OP_GET,
+};
+
+#define DLM_PLOCK_FL_CLOSE 1
+
+struct dlm_plock_info {
+       __u32 version[3];
+       __u8 optype;
+       __u8 ex;
+       __u8 wait;
+       __u8 flags;
+       __u32 pid;
+       __s32 nodeid;
+       __s32 rv;
+       __u32 fsid;
+       __u64 number;
+       __u64 start;
+       __u64 end;
+       __u64 owner;
+};
+
+
+#endif /* __DLM_PLOCK_DOT_H__ */
diff --git a/lib/libdss-include/include/linux/dlmconstants.h b/lib/libdss-include/include/linux/dlmconstants.h
new file mode 100644 (file)
index 0000000..2857bdc
--- /dev/null
@@ -0,0 +1,163 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef __DLMCONSTANTS_DOT_H__
+#define __DLMCONSTANTS_DOT_H__
+
+/*
+ * Constants used by DLM interface.
+ */
+
+#define DLM_LOCKSPACE_LEN       64
+#define DLM_RESNAME_MAXLEN      64
+
+
+/*
+ * Lock Modes
+ */
+
+#define DLM_LOCK_IV            (-1)    /* invalid */
+#define DLM_LOCK_NL            0       /* null */
+#define DLM_LOCK_CR            1       /* concurrent read */
+#define DLM_LOCK_CW            2       /* concurrent write */
+#define DLM_LOCK_PR            3       /* protected read */
+#define DLM_LOCK_PW            4       /* protected write */
+#define DLM_LOCK_EX            5       /* exclusive */
+
+
+/*
+ * Flags to dlm_lock
+ *
+ * DLM_LKF_NOQUEUE
+ *
+ * Do not queue the lock request on the wait queue if it cannot be granted
+ * immediately.  If the lock cannot be granted because of this flag, DLM will
+ * either return -EAGAIN from the dlm_lock call or will return 0 from
+ * dlm_lock and -EAGAIN in the lock status block when the AST is executed.
+ *
+ * DLM_LKF_CANCEL
+ *
+ * Used to cancel a pending lock request or conversion.  A converting lock is
+ * returned to its previously granted mode.
+ *
+ * DLM_LKF_CONVERT
+ *
+ * Indicates a lock conversion request.  For conversions the name and namelen
+ * are ignored and the lock ID in the LKSB is used to identify the lock.
+ *
+ * DLM_LKF_VALBLK
+ *
+ * Requests DLM to return the current contents of the lock value block in the
+ * lock status block.  When this flag is set in a lock conversion from PW or EX
+ * modes, DLM assigns the value specified in the lock status block to the lock
+ * value block of the lock resource.  The LVB is a DLM_LVB_LEN size array
+ * containing application-specific information.
+ *
+ * DLM_LKF_QUECVT
+ *
+ * Force a conversion request to be queued, even if it is compatible with
+ * the granted modes of other locks on the same resource.
+ *
+ * DLM_LKF_IVVALBLK
+ *
+ * Invalidate the lock value block.
+ *
+ * DLM_LKF_CONVDEADLK
+ *
+ * Allows the dlm to resolve conversion deadlocks internally by demoting the
+ * granted mode of a converting lock to NL.  The DLM_SBF_DEMOTED flag is
+ * returned for a conversion that's been effected by this.
+ *
+ * DLM_LKF_PERSISTENT
+ *
+ * Only relevant to locks originating in userspace.  A persistent lock will not
+ * be removed if the process holding the lock exits.
+ *
+ * DLM_LKF_NODLCKWT
+ *
+ * Do not cancel the lock if it gets into conversion deadlock.
+ * Exclude this lock from being monitored due to DLM_LSFL_TIMEWARN.
+ *
+ * DLM_LKF_NODLCKBLK
+ *
+ * net yet implemented
+ *
+ * DLM_LKF_EXPEDITE
+ *
+ * Used only with new requests for NL mode locks.  Tells the lock manager
+ * to grant the lock, ignoring other locks in convert and wait queues.
+ *
+ * DLM_LKF_NOQUEUEBAST
+ *
+ * Send blocking AST's before returning -EAGAIN to the caller.  It is only
+ * used along with the NOQUEUE flag.  Blocking AST's are not sent for failed
+ * NOQUEUE requests otherwise.
+ *
+ * DLM_LKF_HEADQUE
+ *
+ * Add a lock to the head of the convert or wait queue rather than the tail.
+ *
+ * DLM_LKF_NOORDER
+ *
+ * Disregard the standard grant order rules and grant a lock as soon as it
+ * is compatible with other granted locks.
+ *
+ * DLM_LKF_ORPHAN
+ *
+ * Acquire an orphan lock.
+ *
+ * DLM_LKF_ALTPR
+ *
+ * If the requested mode cannot be granted immediately, try to grant the lock
+ * in PR mode instead.  If this alternate mode is granted instead of the
+ * requested mode, DLM_SBF_ALTMODE is returned in the lksb.
+ *
+ * DLM_LKF_ALTCW
+ *
+ * The same as ALTPR, but the alternate mode is CW.
+ *
+ * DLM_LKF_FORCEUNLOCK
+ *
+ * Unlock the lock even if it is converting or waiting or has sublocks.
+ * Only really for use by the userland device.c code.
+ *
+ */
+
+#define DLM_LKF_NOQUEUE                0x00000001
+#define DLM_LKF_CANCEL         0x00000002
+#define DLM_LKF_CONVERT                0x00000004
+#define DLM_LKF_VALBLK         0x00000008
+#define DLM_LKF_QUECVT         0x00000010
+#define DLM_LKF_IVVALBLK       0x00000020
+#define DLM_LKF_CONVDEADLK     0x00000040
+#define DLM_LKF_PERSISTENT     0x00000080
+#define DLM_LKF_NODLCKWT       0x00000100
+#define DLM_LKF_NODLCKBLK      0x00000200
+#define DLM_LKF_EXPEDITE       0x00000400
+#define DLM_LKF_NOQUEUEBAST    0x00000800
+#define DLM_LKF_HEADQUE                0x00001000
+#define DLM_LKF_NOORDER                0x00002000
+#define DLM_LKF_ORPHAN         0x00004000
+#define DLM_LKF_ALTPR          0x00008000
+#define DLM_LKF_ALTCW          0x00010000
+#define DLM_LKF_FORCEUNLOCK    0x00020000
+#define DLM_LKF_TIMEOUT                0x00040000
+
+/*
+ * Some return codes that are not in errno.h
+ */
+
+#define DLM_ECANCEL            0x10001
+#define DLM_EUNLOCK            0x10002
+
+#endif  /* __DLMCONSTANTS_DOT_H__ */
diff --git a/lib/libdss-include/include/linux/dm-ioctl.h b/lib/libdss-include/include/linux/dm-ioctl.h
new file mode 100644 (file)
index 0000000..30afd0a
--- /dev/null
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
+ * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved.
+ *
+ * This file is released under the LGPL.
+ */
+
+#ifndef _LINUX_DM_IOCTL_V4_H
+#define _LINUX_DM_IOCTL_V4_H
+
+#include <linux/types.h>
+
+#define DM_DIR "mapper"                /* Slashes not supported */
+#define DM_CONTROL_NODE "control"
+#define DM_MAX_TYPE_NAME 16
+#define DM_NAME_LEN 128
+#define DM_UUID_LEN 129
+
+/*
+ * A traditional ioctl interface for the device mapper.
+ *
+ * Each device can have two tables associated with it, an
+ * 'active' table which is the one currently used by io passing
+ * through the device, and an 'inactive' one which is a table
+ * that is being prepared as a replacement for the 'active' one.
+ *
+ * DM_VERSION:
+ * Just get the version information for the ioctl interface.
+ *
+ * DM_REMOVE_ALL:
+ * Remove all dm devices, destroy all tables.  Only really used
+ * for debug.
+ *
+ * DM_LIST_DEVICES:
+ * Get a list of all the dm device names.
+ *
+ * DM_DEV_CREATE:
+ * Create a new device, neither the 'active' or 'inactive' table
+ * slots will be filled.  The device will be in suspended state
+ * after creation, however any io to the device will get errored
+ * since it will be out-of-bounds.
+ *
+ * DM_DEV_REMOVE:
+ * Remove a device, destroy any tables.
+ *
+ * DM_DEV_RENAME:
+ * Rename a device or set its uuid if none was previously supplied.
+ *
+ * DM_SUSPEND:
+ * This performs both suspend and resume, depending which flag is
+ * passed in.
+ * Suspend: This command will not return until all pending io to
+ * the device has completed.  Further io will be deferred until
+ * the device is resumed.
+ * Resume: It is no longer an error to issue this command on an
+ * unsuspended device.  If a table is present in the 'inactive'
+ * slot, it will be moved to the active slot, then the old table
+ * from the active slot will be _destroyed_.  Finally the device
+ * is resumed.
+ *
+ * DM_DEV_STATUS:
+ * Retrieves the status for the table in the 'active' slot.
+ *
+ * DM_DEV_WAIT:
+ * Wait for a significant event to occur to the device.  This
+ * could either be caused by an event triggered by one of the
+ * targets of the table in the 'active' slot, or a table change.
+ *
+ * DM_TABLE_LOAD:
+ * Load a table into the 'inactive' slot for the device.  The
+ * device does _not_ need to be suspended prior to this command.
+ *
+ * DM_TABLE_CLEAR:
+ * Destroy any table in the 'inactive' slot (ie. abort).
+ *
+ * DM_TABLE_DEPS:
+ * Return a set of device dependencies for the 'active' table.
+ *
+ * DM_TABLE_STATUS:
+ * Return the targets status for the 'active' table.
+ *
+ * DM_TARGET_MSG:
+ * Pass a message string to the target at a specific offset of a device.
+ *
+ * DM_DEV_SET_GEOMETRY:
+ * Set the geometry of a device by passing in a string in this format:
+ *
+ * "cylinders heads sectors_per_track start_sector"
+ *
+ * Beware that CHS geometry is nearly obsolete and only provided
+ * for compatibility with dm devices that can be booted by a PC
+ * BIOS.  See struct hd_geometry for range limits.  Also note that
+ * the geometry is erased if the device size changes.
+ */
+
+/*
+ * All ioctl arguments consist of a single chunk of memory, with
+ * this structure at the start.  If a uuid is specified any
+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
+ * name.
+ */
+struct dm_ioctl {
+       /*
+        * The version number is made up of three parts:
+        * major - no backward or forward compatibility,
+        * minor - only backwards compatible,
+        * patch - both backwards and forwards compatible.
+        *
+        * All clients of the ioctl interface should fill in the
+        * version number of the interface that they were
+        * compiled with.
+        *
+        * All recognised ioctl commands (ie. those that don't
+        * return -ENOTTY) fill out this field, even if the
+        * command failed.
+        */
+       __u32 version[3];       /* in/out */
+       __u32 data_size;        /* total size of data passed in
+                                * including this struct */
+
+       __u32 data_start;       /* offset to start of data
+                                * relative to start of this struct */
+
+       __u32 target_count;     /* in/out */
+       __s32 open_count;       /* out */
+       __u32 flags;            /* in/out */
+
+       /*
+        * event_nr holds either the event number (input and output) or the
+        * udev cookie value (input only).
+        * The DM_DEV_WAIT ioctl takes an event number as input.
+        * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls
+        * use the field as a cookie to return in the DM_COOKIE
+        * variable with the uevents they issue.
+        * For output, the ioctls return the event number, not the cookie.
+        */
+       __u32 event_nr;         /* in/out */
+       __u32 padding;
+
+       __u64 dev;              /* in/out */
+
+       char name[DM_NAME_LEN]; /* device name */
+       char uuid[DM_UUID_LEN]; /* unique identifier for
+                                * the block device */
+       char data[7];           /* padding or data */
+};
+
+/*
+ * Used to specify tables.  These structures appear after the
+ * dm_ioctl.
+ */
+struct dm_target_spec {
+       __u64 sector_start;
+       __u64 length;
+       __s32 status;           /* used when reading from kernel only */
+
+       /*
+        * Location of the next dm_target_spec.
+        * - When specifying targets on a DM_TABLE_LOAD command, this value is
+        *   the number of bytes from the start of the "current" dm_target_spec
+        *   to the start of the "next" dm_target_spec.
+        * - When retrieving targets on a DM_TABLE_STATUS command, this value
+        *   is the number of bytes from the start of the first dm_target_spec
+        *   (that follows the dm_ioctl struct) to the start of the "next"
+        *   dm_target_spec.
+        */
+       __u32 next;
+
+       char target_type[DM_MAX_TYPE_NAME];
+
+       /*
+        * Parameter string starts immediately after this object.
+        * Be careful to add padding after string to ensure correct
+        * alignment of subsequent dm_target_spec.
+        */
+};
+
+/*
+ * Used to retrieve the target dependencies.
+ */
+struct dm_target_deps {
+       __u32 count;    /* Array size */
+       __u32 padding;  /* unused */
+       __u64 dev[0];   /* out */
+};
+
+/*
+ * Used to get a list of all dm devices.
+ */
+struct dm_name_list {
+       __u64 dev;
+       __u32 next;             /* offset to the next record from
+                                  the _start_ of this */
+       char name[0];
+};
+
+/*
+ * Used to retrieve the target versions
+ */
+struct dm_target_versions {
+        __u32 next;
+        __u32 version[3];
+
+        char name[0];
+};
+
+/*
+ * Used to pass message to a target
+ */
+struct dm_target_msg {
+       __u64 sector;   /* Device sector */
+
+       char message[0];
+};
+
+/*
+ * If you change this make sure you make the corresponding change
+ * to dm-ioctl.c:lookup_ioctl()
+ */
+enum {
+       /* Top level cmds */
+       DM_VERSION_CMD = 0,
+       DM_REMOVE_ALL_CMD,
+       DM_LIST_DEVICES_CMD,
+
+       /* device level cmds */
+       DM_DEV_CREATE_CMD,
+       DM_DEV_REMOVE_CMD,
+       DM_DEV_RENAME_CMD,
+       DM_DEV_SUSPEND_CMD,
+       DM_DEV_STATUS_CMD,
+       DM_DEV_WAIT_CMD,
+
+       /* Table level cmds */
+       DM_TABLE_LOAD_CMD,
+       DM_TABLE_CLEAR_CMD,
+       DM_TABLE_DEPS_CMD,
+       DM_TABLE_STATUS_CMD,
+
+       /* Added later */
+       DM_LIST_VERSIONS_CMD,
+       DM_TARGET_MSG_CMD,
+       DM_DEV_SET_GEOMETRY_CMD
+};
+
+#define DM_IOCTL 0xfd
+
+#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
+#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
+#define DM_LIST_DEVICES  _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl)
+
+#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
+#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
+#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
+#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
+#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
+#define DM_DEV_WAIT      _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl)
+
+#define DM_TABLE_LOAD    _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl)
+#define DM_TABLE_CLEAR   _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl)
+#define DM_TABLE_DEPS    _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl)
+#define DM_TABLE_STATUS  _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl)
+
+#define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl)
+
+#define DM_TARGET_MSG   _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
+#define DM_DEV_SET_GEOMETRY    _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
+
+#define DM_VERSION_MAJOR       4
+#define DM_VERSION_MINOR       34
+#define DM_VERSION_PATCHLEVEL  0
+#define DM_VERSION_EXTRA       "-ioctl (2015-10-28)"
+
+/* Status bits */
+#define DM_READONLY_FLAG       (1 << 0) /* In/Out */
+#define DM_SUSPEND_FLAG                (1 << 1) /* In/Out */
+#define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */
+
+/*
+ * Flag passed into ioctl STATUS command to get table information
+ * rather than current status.
+ */
+#define DM_STATUS_TABLE_FLAG   (1 << 4) /* In */
+
+/*
+ * Flags that indicate whether a table is present in either of
+ * the two table slots that a device has.
+ */
+#define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */
+#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
+
+/*
+ * Indicates that the buffer passed in wasn't big enough for the
+ * results.
+ */
+#define DM_BUFFER_FULL_FLAG    (1 << 8) /* Out */
+
+/*
+ * This flag is now ignored.
+ */
+#define DM_SKIP_BDGET_FLAG     (1 << 9) /* In */
+
+/*
+ * Set this to avoid attempting to freeze any filesystem when suspending.
+ */
+#define DM_SKIP_LOCKFS_FLAG    (1 << 10) /* In */
+
+/*
+ * Set this to suspend without flushing queued ios.
+ * Also disables flushing uncommitted changes in the thin target before
+ * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT.
+ */
+#define DM_NOFLUSH_FLAG                (1 << 11) /* In */
+
+/*
+ * If set, any table information returned will relate to the inactive
+ * table instead of the live one.  Always check DM_INACTIVE_PRESENT_FLAG
+ * is set before using the data returned.
+ */
+#define DM_QUERY_INACTIVE_TABLE_FLAG   (1 << 12) /* In */
+
+/*
+ * If set, a uevent was generated for which the caller may need to wait.
+ */
+#define DM_UEVENT_GENERATED_FLAG       (1 << 13) /* Out */
+
+/*
+ * If set, rename changes the uuid not the name.  Only permitted
+ * if no uuid was previously supplied: an existing uuid cannot be changed.
+ */
+#define DM_UUID_FLAG                   (1 << 14) /* In */
+
+/*
+ * If set, all buffers are wiped after use. Use when sending
+ * or requesting sensitive data such as an encryption key.
+ */
+#define DM_SECURE_DATA_FLAG            (1 << 15) /* In */
+
+/*
+ * If set, a message generated output data.
+ */
+#define DM_DATA_OUT_FLAG               (1 << 16) /* Out */
+
+/*
+ * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if
+ * the device cannot be removed immediately because it is still in use
+ * it should instead be scheduled for removal when it gets closed.
+ *
+ * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this
+ * flag indicates that the device is scheduled to be removed when it
+ * gets closed.
+ */
+#define DM_DEFERRED_REMOVE             (1 << 17) /* In/Out */
+
+/*
+ * If set, the device is suspended internally.
+ */
+#define DM_INTERNAL_SUSPEND_FLAG       (1 << 18) /* Out */
+
+#endif                         /* _LINUX_DM_IOCTL_H */
diff --git a/lib/libdss-include/include/linux/dm-log-userspace.h b/lib/libdss-include/include/linux/dm-log-userspace.h
new file mode 100644 (file)
index 0000000..0fa0d9e
--- /dev/null
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2006-2009 Red Hat, Inc.
+ *
+ * This file is released under the LGPL.
+ */
+
+#ifndef __DM_LOG_USERSPACE_H__
+#define __DM_LOG_USERSPACE_H__
+
+#include <linux/dm-ioctl.h> /* For DM_UUID_LEN */
+
+/*
+ * The device-mapper userspace log module consists of a kernel component and
+ * a user-space component.  The kernel component implements the API defined
+ * in dm-dirty-log.h.  Its purpose is simply to pass the parameters and
+ * return values of those API functions between kernel and user-space.
+ *
+ * Below are defined the 'request_types' - DM_ULOG_CTR, DM_ULOG_DTR, etc.
+ * These request types represent the different functions in the device-mapper
+ * dirty log API.  Each of these is described in more detail below.
+ *
+ * The user-space program must listen for requests from the kernel (representing
+ * the various API functions) and process them.
+ *
+ * User-space begins by setting up the communication link (error checking
+ * removed for clarity):
+ *     fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
+ *     addr.nl_family = AF_NETLINK;
+ *     addr.nl_groups = CN_IDX_DM;
+ *     addr.nl_pid = 0;
+ *     r = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
+ *     opt = addr.nl_groups;
+ *     setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt));
+ *
+ * User-space will then wait to receive requests form the kernel, which it
+ * will process as described below.  The requests are received in the form,
+ * ((struct dm_ulog_request) + (additional data)).  Depending on the request
+ * type, there may or may not be 'additional data'.  In the descriptions below,
+ * you will see 'Payload-to-userspace' and 'Payload-to-kernel'.  The
+ * 'Payload-to-userspace' is what the kernel sends in 'additional data' as
+ * necessary parameters to complete the request.  The 'Payload-to-kernel' is
+ * the 'additional data' returned to the kernel that contains the necessary
+ * results of the request.  The 'data_size' field in the dm_ulog_request
+ * structure denotes the availability and amount of payload data.
+ */
+
+/*
+ * DM_ULOG_CTR corresponds to (found in dm-dirty-log.h):
+ * int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti,
+ *           unsigned argc, char **argv);
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     A NUL-terminated string that is the name of the device that is used
+ *     as the backing store for the log data.  'dm_get_device' will be called
+ *     on this device.  ('dm_put_device' will be called on this device
+ *     automatically after calling DM_ULOG_DTR.)  If there is no device needed
+ *     for log data, 'data_size' in the dm_ulog_request struct should be 0.
+ *
+ * The UUID contained in the dm_ulog_request structure is the reference that
+ * will be used by all request types to a specific log.  The constructor must
+ * record this association with the instance created.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field, filling the
+ * data field with the log device if necessary, and setting 'data_size'
+ * appropriately.
+ */
+#define DM_ULOG_CTR                    1
+
+/*
+ * DM_ULOG_DTR corresponds to (found in dm-dirty-log.h):
+ * void (*dtr)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     None.  ('data_size' in the dm_ulog_request struct should be 0.)
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being destroyed.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_DTR                    2
+
+/*
+ * DM_ULOG_PRESUSPEND corresponds to (found in dm-dirty-log.h):
+ * int (*presuspend)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being presuspended.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_PRESUSPEND             3
+
+/*
+ * DM_ULOG_POSTSUSPEND corresponds to (found in dm-dirty-log.h):
+ * int (*postsuspend)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being postsuspended.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_POSTSUSPEND            4
+
+/*
+ * DM_ULOG_RESUME corresponds to (found in dm-dirty-log.h):
+ * int (*resume)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being resumed.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_RESUME                 5
+
+/*
+ * DM_ULOG_GET_REGION_SIZE corresponds to (found in dm-dirty-log.h):
+ * uint32_t (*get_region_size)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     uint64_t - contains the region size
+ *
+ * The region size is something that was determined at constructor time.
+ * It is returned in the payload area and 'data_size' is set to
+ * reflect this.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field appropriately.
+ */
+#define DM_ULOG_GET_REGION_SIZE        6
+
+/*
+ * DM_ULOG_IS_CLEAN corresponds to (found in dm-dirty-log.h):
+ * int (*is_clean)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - the region to get clean status on
+ * Payload-to-kernel:
+ *     int64_t  - 1 if clean, 0 otherwise
+ *
+ * Payload is sizeof(uint64_t) and contains the region for which the clean
+ * status is being made.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - filling the payload with 0 (not clean) or
+ * 1 (clean), setting 'data_size' and 'error' appropriately.
+ */
+#define DM_ULOG_IS_CLEAN               7
+
+/*
+ * DM_ULOG_IN_SYNC corresponds to (found in dm-dirty-log.h):
+ * int (*in_sync)(struct dm_dirty_log *log, region_t region,
+ *               int can_block);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - the region to get sync status on
+ * Payload-to-kernel:
+ *     int64_t - 1 if in-sync, 0 otherwise
+ *
+ * Exactly the same as 'is_clean' above, except this time asking "has the
+ * region been recovered?" vs. "is the region not being modified?"
+ */
+#define DM_ULOG_IN_SYNC                8
+
+/*
+ * DM_ULOG_FLUSH corresponds to (found in dm-dirty-log.h):
+ * int (*flush)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     If the 'integrated_flush' directive is present in the constructor
+ *     table, the payload is as same as DM_ULOG_MARK_REGION:
+ *             uint64_t [] - region(s) to mark
+ *     else
+ *             None
+ * Payload-to-kernel:
+ *     None.
+ *
+ * If the 'integrated_flush' option was used during the creation of the
+ * log, mark region requests are carried as payload in the flush request.
+ * Piggybacking the mark requests in this way allows for fewer communications
+ * between kernel and userspace.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_FLUSH                  9
+
+/*
+ * DM_ULOG_MARK_REGION corresponds to (found in dm-dirty-log.h):
+ * void (*mark_region)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t [] - region(s) to mark
+ * Payload-to-kernel:
+ *     None.
+ *
+ * Incoming payload contains the one or more regions to mark dirty.
+ * The number of regions contained in the payload can be determined from
+ * 'data_size/sizeof(uint64_t)'.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_MARK_REGION           10
+
+/*
+ * DM_ULOG_CLEAR_REGION corresponds to (found in dm-dirty-log.h):
+ * void (*clear_region)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t [] - region(s) to clear
+ * Payload-to-kernel:
+ *     None.
+ *
+ * Incoming payload contains the one or more regions to mark clean.
+ * The number of regions contained in the payload can be determined from
+ * 'data_size/sizeof(uint64_t)'.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_CLEAR_REGION          11
+
+/*
+ * DM_ULOG_GET_RESYNC_WORK corresponds to (found in dm-dirty-log.h):
+ * int (*get_resync_work)(struct dm_dirty_log *log, region_t *region);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     {
+ *             int64_t i; -- 1 if recovery necessary, 0 otherwise
+ *             uint64_t r; -- The region to recover if i=1
+ *     }
+ * 'data_size' should be set appropriately.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field appropriately.
+ */
+#define DM_ULOG_GET_RESYNC_WORK       12
+
+/*
+ * DM_ULOG_SET_REGION_SYNC corresponds to (found in dm-dirty-log.h):
+ * void (*set_region_sync)(struct dm_dirty_log *log,
+ *                        region_t region, int in_sync);
+ *
+ * Payload-to-userspace:
+ *     {
+ *             uint64_t - region to set sync state on
+ *             int64_t  - 0 if not-in-sync, 1 if in-sync
+ *     }
+ * Payload-to-kernel:
+ *     None.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_SET_REGION_SYNC       13
+
+/*
+ * DM_ULOG_GET_SYNC_COUNT corresponds to (found in dm-dirty-log.h):
+ * region_t (*get_sync_count)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     uint64_t - the number of in-sync regions
+ *
+ * No incoming payload.  Kernel-bound payload contains the number of
+ * regions that are in-sync (in a size_t).
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_GET_SYNC_COUNT        14
+
+/*
+ * DM_ULOG_STATUS_INFO corresponds to (found in dm-dirty-log.h):
+ * int (*status)(struct dm_dirty_log *log, STATUSTYPE_INFO,
+ *              char *result, unsigned maxlen);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     Character string containing STATUSTYPE_INFO
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_STATUS_INFO           15
+
+/*
+ * DM_ULOG_STATUS_TABLE corresponds to (found in dm-dirty-log.h):
+ * int (*status)(struct dm_dirty_log *log, STATUSTYPE_TABLE,
+ *              char *result, unsigned maxlen);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     Character string containing STATUSTYPE_TABLE
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_STATUS_TABLE          16
+
+/*
+ * DM_ULOG_IS_REMOTE_RECOVERING corresponds to (found in dm-dirty-log.h):
+ * int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - region to determine recovery status on
+ * Payload-to-kernel:
+ *     {
+ *             int64_t is_recovering;  -- 0 if no, 1 if yes
+ *             uint64_t in_sync_hint;  -- lowest region still needing resync
+ *     }
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_IS_REMOTE_RECOVERING  17
+
+/*
+ * (DM_ULOG_REQUEST_MASK & request_type) to get the request type
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     None.  ('data_size' in the dm_ulog_request struct should be 0.)
+ *
+ * We are reserving 8 bits of the 32-bit 'request_type' field for the
+ * various request types above.  The remaining 24-bits are currently
+ * set to zero and are reserved for future use and compatibility concerns.
+ *
+ * User-space should always use DM_ULOG_REQUEST_TYPE to acquire the
+ * request type from the 'request_type' field to maintain forward compatibility.
+ */
+#define DM_ULOG_REQUEST_MASK 0xFF
+#define DM_ULOG_REQUEST_TYPE(request_type) \
+       (DM_ULOG_REQUEST_MASK & (request_type))
+
+/*
+ * DM_ULOG_REQUEST_VERSION is incremented when there is a
+ * change to the way information is passed between kernel
+ * and userspace.  This could be a structure change of
+ * dm_ulog_request or a change in the way requests are
+ * issued/handled.  Changes are outlined here:
+ *     version 1:  Initial implementation
+ *     version 2:  DM_ULOG_CTR allowed to return a string containing a
+ *                 device name that is to be registered with DM via
+ *                 'dm_get_device'.
+ *     version 3:  DM_ULOG_FLUSH is capable of carrying payload for marking
+ *                 regions.  This "integrated flush" reduces the number of
+ *                 requests between the kernel and userspace by effectively
+ *                 merging 'mark' and 'flush' requests.  A constructor table
+ *                 argument ('integrated_flush') is required to turn this
+ *                 feature on, so it is backwards compatible with older
+ *                 userspace versions.
+ */
+#define DM_ULOG_REQUEST_VERSION 3
+
+struct dm_ulog_request {
+       /*
+        * The local unique identifier (luid) and the universally unique
+        * identifier (uuid) are used to tie a request to a specific
+        * mirror log.  A single machine log could probably make due with
+        * just the 'luid', but a cluster-aware log must use the 'uuid' and
+        * the 'luid'.  The uuid is what is required for node to node
+        * communication concerning a particular log, but the 'luid' helps
+        * differentiate between logs that are being swapped and have the
+        * same 'uuid'.  (Think "live" and "inactive" device-mapper tables.)
+        */
+       uint64_t luid;
+       char uuid[DM_UUID_LEN];
+       char padding[3];        /* Padding because DM_UUID_LEN = 129 */
+
+       uint32_t version;       /* See DM_ULOG_REQUEST_VERSION */
+       int32_t error;          /* Used to report back processing errors */
+
+       uint32_t seq;           /* Sequence number for request */
+       uint32_t request_type;  /* DM_ULOG_* defined above */
+       uint32_t data_size;     /* How much data (not including this struct) */
+
+       char data[0];
+};
+
+#endif /* __DM_LOG_USERSPACE_H__ */
diff --git a/lib/libdss-include/include/linux/dn.h b/lib/libdss-include/include/linux/dn.h
new file mode 100644 (file)
index 0000000..4295c74
--- /dev/null
@@ -0,0 +1,148 @@
+#ifndef _LINUX_DN_H
+#define _LINUX_DN_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+
+       DECnet Data Structures and Constants
+
+*/
+
+/* 
+ * DNPROTO_NSP can't be the same as SOL_SOCKET, 
+ * so increment each by one (compared to ULTRIX)
+ */
+#define DNPROTO_NSP     2                       /* NSP protocol number       */
+#define DNPROTO_ROU     3                       /* Routing protocol number   */
+#define DNPROTO_NML     4                       /* Net mgt protocol number   */
+#define DNPROTO_EVL     5                       /* Evl protocol number (usr) */
+#define DNPROTO_EVR     6                       /* Evl protocol number (evl) */
+#define DNPROTO_NSPT    7                       /* NSP trace protocol number */
+
+
+#define DN_ADDL                2
+#define DN_MAXADDL     2 /* ULTRIX headers have 20 here, but pathworks has 2 */
+#define DN_MAXOPTL     16
+#define DN_MAXOBJL     16
+#define DN_MAXACCL     40
+#define DN_MAXALIASL   128
+#define DN_MAXNODEL    256
+#define DNBUFSIZE      65023
+
+/* 
+ * SET/GET Socket options  - must match the DSO_ numbers below
+ */
+#define SO_CONDATA      1
+#define SO_CONACCESS    2
+#define SO_PROXYUSR     3
+#define SO_LINKINFO     7
+
+#define DSO_CONDATA     1        /* Set/Get connect data                */
+#define DSO_DISDATA     10       /* Set/Get disconnect data             */
+#define DSO_CONACCESS   2        /* Set/Get connect access data         */
+#define DSO_ACCEPTMODE  4        /* Set/Get accept mode                 */
+#define DSO_CONACCEPT   5        /* Accept deferred connection          */
+#define DSO_CONREJECT   6        /* Reject deferred connection          */
+#define DSO_LINKINFO    7        /* Set/Get link information            */
+#define DSO_STREAM      8        /* Set socket type to stream           */
+#define DSO_SEQPACKET   9        /* Set socket type to sequenced packet */
+#define DSO_MAXWINDOW   11       /* Maximum window size allowed         */
+#define DSO_NODELAY    12       /* Turn off nagle                      */
+#define DSO_CORK        13       /* Wait for more data!                 */
+#define DSO_SERVICES   14       /* NSP Services field                  */
+#define DSO_INFO       15       /* NSP Info field                      */
+#define DSO_MAX         15       /* Maximum option number               */
+
+
+/* LINK States */
+#define LL_INACTIVE    0
+#define LL_CONNECTING  1
+#define LL_RUNNING     2
+#define LL_DISCONNECTING 3
+
+#define ACC_IMMED 0
+#define ACC_DEFER 1
+
+#define SDF_WILD        1                  /* Wild card object          */
+#define SDF_PROXY       2                  /* Addr eligible for proxy   */
+#define SDF_UICPROXY    4                  /* Use uic-based proxy       */
+
+/* Structures */
+
+
+struct dn_naddr {
+       __le16          a_len;
+       __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */
+};
+
+struct sockaddr_dn {
+       __u16           sdn_family;
+       __u8            sdn_flags;
+       __u8            sdn_objnum;
+       __le16          sdn_objnamel;
+       __u8            sdn_objname[DN_MAXOBJL];
+       struct   dn_naddr       sdn_add;
+};
+#define sdn_nodeaddrl   sdn_add.a_len   /* Node address length  */
+#define sdn_nodeaddr    sdn_add.a_addr  /* Node address         */
+
+
+
+/*
+ * DECnet set/get DSO_CONDATA, DSO_DISDATA (optional data) structure
+ */
+struct optdata_dn {
+        __le16  opt_status;     /* Extended status return */
+#define opt_sts opt_status
+        __le16  opt_optl;       /* Length of user data    */
+        __u8   opt_data[16];   /* User data              */
+};
+
+struct accessdata_dn {
+       __u8            acc_accl;
+       __u8            acc_acc[DN_MAXACCL];
+       __u8            acc_passl;
+       __u8            acc_pass[DN_MAXACCL];
+       __u8            acc_userl;
+       __u8            acc_user[DN_MAXACCL];
+};
+
+/*
+ * DECnet logical link information structure
+ */
+struct linkinfo_dn {
+        __u16  idn_segsize;    /* Segment size for link */
+        __u8   idn_linkstate;  /* Logical link state    */
+};
+
+/*
+ * Ethernet address format (for DECnet)
+ */
+union etheraddress {
+        __u8 dne_addr[ETH_ALEN];      /* Full ethernet address */
+  struct {
+                __u8 dne_hiord[4];    /* DECnet HIORD prefix   */
+                __u8 dne_nodeaddr[2]; /* DECnet node address   */
+  } dne_remote;
+};
+
+
+/*
+ * DECnet physical socket address format
+ */
+struct dn_addr {
+        __le16 dna_family;      /* AF_DECnet               */
+        union etheraddress dna_netaddr; /* DECnet ethernet address */
+};
+
+#define DECNET_IOCTL_BASE 0x89 /* PROTOPRIVATE range */
+
+#define SIOCSNETADDR  _IOW(DECNET_IOCTL_BASE, 0xe0, struct dn_naddr)
+#define SIOCGNETADDR  _IOR(DECNET_IOCTL_BASE, 0xe1, struct dn_naddr)
+#define OSIOCSNETADDR _IOW(DECNET_IOCTL_BASE, 0xe0, int)
+#define OSIOCGNETADDR _IOR(DECNET_IOCTL_BASE, 0xe1, int)
+
+#endif /* _LINUX_DN_H */
diff --git a/lib/libdss-include/include/linux/dqblk_xfs.h b/lib/libdss-include/include/linux/dqblk_xfs.h
new file mode 100644 (file)
index 0000000..dcd75cc
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 1995-2001,2004 Silicon Graphics, Inc.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesset General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+#ifndef _LINUX_DQBLK_XFS_H
+#define _LINUX_DQBLK_XFS_H
+
+#include <linux/types.h>
+
+/*
+ * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM).
+ */
+
+#define XQM_CMD(x)     (('X'<<8)+(x))  /* note: forms first QCMD argument */
+#define XQM_COMMAND(x) (((x) & (0xff<<8)) == ('X'<<8)) /* test if for XFS */
+
+#define XQM_USRQUOTA   0       /* system call user quota type */
+#define XQM_GRPQUOTA   1       /* system call group quota type */
+#define XQM_PRJQUOTA   2       /* system call project quota type */
+#define XQM_MAXQUOTAS  3
+
+#define Q_XQUOTAON     XQM_CMD(1)      /* enable accounting/enforcement */
+#define Q_XQUOTAOFF    XQM_CMD(2)      /* disable accounting/enforcement */
+#define Q_XGETQUOTA    XQM_CMD(3)      /* get disk limits and usage */
+#define Q_XSETQLIM     XQM_CMD(4)      /* set disk limits */
+#define Q_XGETQSTAT    XQM_CMD(5)      /* get quota subsystem status */
+#define Q_XQUOTARM     XQM_CMD(6)      /* free disk space used by dquots */
+#define Q_XQUOTASYNC   XQM_CMD(7)      /* delalloc flush, updates dquots */
+#define Q_XGETQSTATV   XQM_CMD(8)      /* newer version of get quota */
+
+/*
+ * fs_disk_quota structure:
+ *
+ * This contains the current quota information regarding a user/proj/group.
+ * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of
+ * 512 bytes.
+ */
+#define FS_DQUOT_VERSION       1       /* fs_disk_quota.d_version */
+typedef struct fs_disk_quota {
+       __s8            d_version;      /* version of this structure */
+       __s8            d_flags;        /* FS_{USER,PROJ,GROUP}_QUOTA */
+       __u16           d_fieldmask;    /* field specifier */
+       __u32           d_id;           /* user, project, or group ID */
+       __u64           d_blk_hardlimit;/* absolute limit on disk blks */
+       __u64           d_blk_softlimit;/* preferred limit on disk blks */
+       __u64           d_ino_hardlimit;/* maximum # allocated inodes */
+       __u64           d_ino_softlimit;/* preferred inode limit */
+       __u64           d_bcount;       /* # disk blocks owned by the user */
+       __u64           d_icount;       /* # inodes owned by the user */
+       __s32           d_itimer;       /* zero if within inode limits */
+                                       /* if not, we refuse service */
+       __s32           d_btimer;       /* similar to above; for disk blocks */
+       __u16           d_iwarns;       /* # warnings issued wrt num inodes */
+       __u16           d_bwarns;       /* # warnings issued wrt disk blocks */
+       __s32           d_padding2;     /* padding2 - for future use */
+       __u64           d_rtb_hardlimit;/* absolute limit on realtime blks */
+       __u64           d_rtb_softlimit;/* preferred limit on RT disk blks */
+       __u64           d_rtbcount;     /* # realtime blocks owned */
+       __s32           d_rtbtimer;     /* similar to above; for RT disk blks */
+       __u16           d_rtbwarns;     /* # warnings issued wrt RT disk blks */
+       __s16           d_padding3;     /* padding3 - for future use */ 
+       char            d_padding4[8];  /* yet more padding */
+} fs_disk_quota_t;
+
+/*
+ * These fields are sent to Q_XSETQLIM to specify fields that need to change.
+ */
+#define FS_DQ_ISOFT    (1<<0)
+#define FS_DQ_IHARD    (1<<1)
+#define FS_DQ_BSOFT    (1<<2)
+#define FS_DQ_BHARD    (1<<3)
+#define FS_DQ_RTBSOFT  (1<<4)
+#define FS_DQ_RTBHARD  (1<<5)
+#define FS_DQ_LIMIT_MASK       (FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \
+                                FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD)
+/*
+ * These timers can only be set in super user's dquot. For others, timers are
+ * automatically started and stopped. Superusers timer values set the limits
+ * for the rest.  In case these values are zero, the DQ_{F,B}TIMELIMIT values
+ * defined below are used. 
+ * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
+ */
+#define FS_DQ_BTIMER   (1<<6)
+#define FS_DQ_ITIMER   (1<<7)
+#define FS_DQ_RTBTIMER         (1<<8)
+#define FS_DQ_TIMER_MASK       (FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER)
+
+/*
+ * Warning counts are set in both super user's dquot and others. For others,
+ * warnings are set/cleared by the administrators (or automatically by going
+ * below the soft limit).  Superusers warning values set the warning limits
+ * for the rest.  In case these values are zero, the DQ_{F,B}WARNLIMIT values
+ * defined below are used. 
+ * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
+ */
+#define FS_DQ_BWARNS   (1<<9)
+#define FS_DQ_IWARNS   (1<<10)
+#define FS_DQ_RTBWARNS (1<<11)
+#define FS_DQ_WARNS_MASK       (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS)
+
+/*
+ * Accounting values.  These can only be set for filesystem with
+ * non-transactional quotas that require quotacheck(8) in userspace.
+ */
+#define FS_DQ_BCOUNT           (1<<12)
+#define FS_DQ_ICOUNT           (1<<13)
+#define FS_DQ_RTBCOUNT         (1<<14)
+#define FS_DQ_ACCT_MASK                (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT)
+
+/*
+ * Various flags related to quotactl(2).
+ */
+#define FS_QUOTA_UDQ_ACCT      (1<<0)  /* user quota accounting */
+#define FS_QUOTA_UDQ_ENFD      (1<<1)  /* user quota limits enforcement */
+#define FS_QUOTA_GDQ_ACCT      (1<<2)  /* group quota accounting */
+#define FS_QUOTA_GDQ_ENFD      (1<<3)  /* group quota limits enforcement */
+#define FS_QUOTA_PDQ_ACCT      (1<<4)  /* project quota accounting */
+#define FS_QUOTA_PDQ_ENFD      (1<<5)  /* project quota limits enforcement */
+
+#define FS_USER_QUOTA          (1<<0)  /* user quota type */
+#define FS_PROJ_QUOTA          (1<<1)  /* project quota type */
+#define FS_GROUP_QUOTA         (1<<2)  /* group quota type */
+
+/*
+ * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system.
+ * Provides a centralized way to get meta information about the quota subsystem.
+ * eg. space taken up for user and group quotas, number of dquots currently
+ * incore.
+ */
+#define FS_QSTAT_VERSION       1       /* fs_quota_stat.qs_version */
+
+/*
+ * Some basic information about 'quota files'.
+ */
+typedef struct fs_qfilestat {
+       __u64           qfs_ino;        /* inode number */
+       __u64           qfs_nblks;      /* number of BBs 512-byte-blks */
+       __u32           qfs_nextents;   /* number of extents */
+} fs_qfilestat_t;
+
+typedef struct fs_quota_stat {
+       __s8            qs_version;     /* version number for future changes */
+       __u16           qs_flags;       /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
+       __s8            qs_pad;         /* unused */
+       fs_qfilestat_t  qs_uquota;      /* user quota storage information */
+       fs_qfilestat_t  qs_gquota;      /* group quota storage information */
+       __u32           qs_incoredqs;   /* number of dquots incore */
+       __s32           qs_btimelimit;  /* limit for blks timer */      
+       __s32           qs_itimelimit;  /* limit for inodes timer */    
+       __s32           qs_rtbtimelimit;/* limit for rt blks timer */   
+       __u16           qs_bwarnlimit;  /* limit for num warnings */
+       __u16           qs_iwarnlimit;  /* limit for num warnings */
+} fs_quota_stat_t;
+
+/*
+ * fs_quota_statv is used by Q_XGETQSTATV for a given file system. It provides
+ * a centralized way to get meta information about the quota subsystem. eg.
+ * space taken up for user, group, and project quotas, number of dquots
+ * currently incore.
+ *
+ * This version has proper versioning support with appropriate padding for
+ * future expansions, and ability to expand for future without creating any
+ * backward compatibility issues.
+ *
+ * Q_XGETQSTATV uses the passed in value of the requested version via
+ * fs_quota_statv.qs_version to determine the return data layout of
+ * fs_quota_statv.  The kernel will fill the data fields relevant to that
+ * version.
+ *
+ * If kernel does not support user space caller specified version, EINVAL will
+ * be returned. User space caller can then reduce the version number and retry
+ * the same command.
+ */
+#define FS_QSTATV_VERSION1     1       /* fs_quota_statv.qs_version */
+/*
+ * Some basic information about 'quota files' for Q_XGETQSTATV command
+ */
+struct fs_qfilestatv {
+       __u64           qfs_ino;        /* inode number */
+       __u64           qfs_nblks;      /* number of BBs 512-byte-blks */
+       __u32           qfs_nextents;   /* number of extents */
+       __u32           qfs_pad;        /* pad for 8-byte alignment */
+};
+
+struct fs_quota_statv {
+       __s8                    qs_version;     /* version for future changes */
+       __u8                    qs_pad1;        /* pad for 16bit alignment */
+       __u16                   qs_flags;       /* FS_QUOTA_.* flags */
+       __u32                   qs_incoredqs;   /* number of dquots incore */
+       struct fs_qfilestatv    qs_uquota;      /* user quota information */
+       struct fs_qfilestatv    qs_gquota;      /* group quota information */
+       struct fs_qfilestatv    qs_pquota;      /* project quota information */
+       __s32                   qs_btimelimit;  /* limit for blks timer */
+       __s32                   qs_itimelimit;  /* limit for inodes timer */
+       __s32                   qs_rtbtimelimit;/* limit for rt blks timer */
+       __u16                   qs_bwarnlimit;  /* limit for num warnings */
+       __u16                   qs_iwarnlimit;  /* limit for num warnings */
+       __u64                   qs_pad2[8];     /* for future proofing */
+};
+
+#endif /* _LINUX_DQBLK_XFS_H */
diff --git a/lib/libdss-include/include/linux/dvb/audio.h b/lib/libdss-include/include/linux/dvb/audio.h
new file mode 100644 (file)
index 0000000..d47bccd
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * audio.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBAUDIO_H_
+#define _DVBAUDIO_H_
+
+#include <linux/types.h>
+
+typedef enum {
+       AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */
+       AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */
+} audio_stream_source_t;
+
+
+typedef enum {
+       AUDIO_STOPPED,      /* Device is stopped */
+       AUDIO_PLAYING,      /* Device is currently playing */
+       AUDIO_PAUSED        /* Device is paused */
+} audio_play_state_t;
+
+
+typedef enum {
+       AUDIO_STEREO,
+       AUDIO_MONO_LEFT,
+       AUDIO_MONO_RIGHT,
+       AUDIO_MONO,
+       AUDIO_STEREO_SWAPPED
+} audio_channel_select_t;
+
+
+typedef struct audio_mixer {
+       unsigned int volume_left;
+       unsigned int volume_right;
+  // what else do we need? bass, pass-through, ...
+} audio_mixer_t;
+
+
+typedef struct audio_status {
+       int                    AV_sync_state;  /* sync audio and video? */
+       int                    mute_state;     /* audio is muted */
+       audio_play_state_t     play_state;     /* current playback state */
+       audio_stream_source_t  stream_source;  /* current stream source */
+       audio_channel_select_t channel_select; /* currently selected channel */
+       int                    bypass_mode;    /* pass on audio data to */
+       audio_mixer_t          mixer_state;    /* current mixer state */
+} audio_status_t;                              /* separate decoder hardware */
+
+
+typedef
+struct audio_karaoke {  /* if Vocal1 or Vocal2 are non-zero, they get mixed  */
+       int vocal1;    /* into left and right t at 70% each */
+       int vocal2;    /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/
+       int melody;    /* mixed into the left channel and */
+                      /* Vocal2 into the right channel at 100% each. */
+                      /* if Melody is non-zero, the melody channel gets mixed*/
+} audio_karaoke_t;     /* into left and right  */
+
+
+typedef __u16 audio_attributes_t;
+/*   bits: descr. */
+/*   15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */
+/*   12    multichannel extension */
+/*   11-10 audio type (0=not spec, 1=language included) */
+/*    9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */
+/*    7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit,  */
+/*    5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */
+/*    2- 0 number of audio channels (n+1 channels) */
+
+
+/* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */
+#define AUDIO_CAP_DTS    1
+#define AUDIO_CAP_LPCM   2
+#define AUDIO_CAP_MP1    4
+#define AUDIO_CAP_MP2    8
+#define AUDIO_CAP_MP3   16
+#define AUDIO_CAP_AAC   32
+#define AUDIO_CAP_OGG   64
+#define AUDIO_CAP_SDDS 128
+#define AUDIO_CAP_AC3  256
+
+#define AUDIO_STOP                 _IO('o', 1)
+#define AUDIO_PLAY                 _IO('o', 2)
+#define AUDIO_PAUSE                _IO('o', 3)
+#define AUDIO_CONTINUE             _IO('o', 4)
+#define AUDIO_SELECT_SOURCE        _IO('o', 5)
+#define AUDIO_SET_MUTE             _IO('o', 6)
+#define AUDIO_SET_AV_SYNC          _IO('o', 7)
+#define AUDIO_SET_BYPASS_MODE      _IO('o', 8)
+#define AUDIO_CHANNEL_SELECT       _IO('o', 9)
+#define AUDIO_GET_STATUS           _IOR('o', 10, audio_status_t)
+
+#define AUDIO_GET_CAPABILITIES     _IOR('o', 11, unsigned int)
+#define AUDIO_CLEAR_BUFFER         _IO('o',  12)
+#define AUDIO_SET_ID               _IO('o', 13)
+#define AUDIO_SET_MIXER            _IOW('o', 14, audio_mixer_t)
+#define AUDIO_SET_STREAMTYPE       _IO('o', 15)
+#define AUDIO_SET_EXT_ID           _IO('o', 16)
+#define AUDIO_SET_ATTRIBUTES       _IOW('o', 17, audio_attributes_t)
+#define AUDIO_SET_KARAOKE          _IOW('o', 18, audio_karaoke_t)
+
+/**
+ * AUDIO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define AUDIO_GET_PTS              _IOR('o', 19, __u64)
+#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
+
+#endif /* _DVBAUDIO_H_ */
diff --git a/lib/libdss-include/include/linux/dvb/ca.h b/lib/libdss-include/include/linux/dvb/ca.h
new file mode 100644 (file)
index 0000000..c18537f
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * ca.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBCA_H_
+#define _DVBCA_H_
+
+/* slot interface types and info */
+
+typedef struct ca_slot_info {
+       int num;               /* slot number */
+
+       int type;              /* CA interface this slot supports */
+#define CA_CI            1     /* CI high level interface */
+#define CA_CI_LINK       2     /* CI link layer level interface */
+#define CA_CI_PHYS       4     /* CI physical layer level interface */
+#define CA_DESCR         8     /* built-in descrambler */
+#define CA_SC          128     /* simple smart card interface */
+
+       unsigned int flags;
+#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
+#define CA_CI_MODULE_READY   2
+} ca_slot_info_t;
+
+
+/* descrambler types and info */
+
+typedef struct ca_descr_info {
+       unsigned int num;          /* number of available descramblers (keys) */
+       unsigned int type;         /* type of supported scrambling system */
+#define CA_ECD           1
+#define CA_NDS           2
+#define CA_DSS           4
+} ca_descr_info_t;
+
+typedef struct ca_caps {
+       unsigned int slot_num;     /* total number of CA card and module slots */
+       unsigned int slot_type;    /* OR of all supported types */
+       unsigned int descr_num;    /* total number of descrambler slots (keys) */
+       unsigned int descr_type;   /* OR of all supported types */
+} ca_caps_t;
+
+/* a message to/from a CI-CAM */
+typedef struct ca_msg {
+       unsigned int index;
+       unsigned int type;
+       unsigned int length;
+       unsigned char msg[256];
+} ca_msg_t;
+
+typedef struct ca_descr {
+       unsigned int index;
+       unsigned int parity;    /* 0 == even, 1 == odd */
+       unsigned char cw[8];
+} ca_descr_t;
+
+typedef struct ca_pid {
+       unsigned int pid;
+       int index;              /* -1 == disable*/
+} ca_pid_t;
+
+#define CA_RESET          _IO('o', 128)
+#define CA_GET_CAP        _IOR('o', 129, ca_caps_t)
+#define CA_GET_SLOT_INFO  _IOR('o', 130, ca_slot_info_t)
+#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
+#define CA_GET_MSG        _IOR('o', 132, ca_msg_t)
+#define CA_SEND_MSG       _IOW('o', 133, ca_msg_t)
+#define CA_SET_DESCR      _IOW('o', 134, ca_descr_t)
+#define CA_SET_PID        _IOW('o', 135, ca_pid_t)
+
+#endif
diff --git a/lib/libdss-include/include/linux/dvb/dmx.h b/lib/libdss-include/include/linux/dvb/dmx.h
new file mode 100644 (file)
index 0000000..425a945
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * dmx.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDMX_H_
+#define _DVBDMX_H_
+
+#include <linux/types.h>
+#include <time.h>
+
+
+#define DMX_FILTER_SIZE 16
+
+enum dmx_output
+{
+       DMX_OUT_DECODER, /* Streaming directly to decoder. */
+       DMX_OUT_TAP,     /* Output going to a memory buffer */
+                        /* (to be retrieved via the read command).*/
+       DMX_OUT_TS_TAP,  /* Output multiplexed into a new TS  */
+                        /* (to be retrieved by reading from the */
+                        /* logical DVR device).                 */
+       DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
+};
+
+typedef enum dmx_output dmx_output_t;
+
+typedef enum dmx_input
+{
+       DMX_IN_FRONTEND, /* Input from a front-end device.  */
+       DMX_IN_DVR       /* Input from the logical DVR device.  */
+} dmx_input_t;
+
+
+typedef enum dmx_ts_pes
+{
+       DMX_PES_AUDIO0,
+       DMX_PES_VIDEO0,
+       DMX_PES_TELETEXT0,
+       DMX_PES_SUBTITLE0,
+       DMX_PES_PCR0,
+
+       DMX_PES_AUDIO1,
+       DMX_PES_VIDEO1,
+       DMX_PES_TELETEXT1,
+       DMX_PES_SUBTITLE1,
+       DMX_PES_PCR1,
+
+       DMX_PES_AUDIO2,
+       DMX_PES_VIDEO2,
+       DMX_PES_TELETEXT2,
+       DMX_PES_SUBTITLE2,
+       DMX_PES_PCR2,
+
+       DMX_PES_AUDIO3,
+       DMX_PES_VIDEO3,
+       DMX_PES_TELETEXT3,
+       DMX_PES_SUBTITLE3,
+       DMX_PES_PCR3,
+
+       DMX_PES_OTHER
+} dmx_pes_type_t;
+
+#define DMX_PES_AUDIO    DMX_PES_AUDIO0
+#define DMX_PES_VIDEO    DMX_PES_VIDEO0
+#define DMX_PES_TELETEXT DMX_PES_TELETEXT0
+#define DMX_PES_SUBTITLE DMX_PES_SUBTITLE0
+#define DMX_PES_PCR      DMX_PES_PCR0
+
+
+typedef struct dmx_filter
+{
+       __u8  filter[DMX_FILTER_SIZE];
+       __u8  mask[DMX_FILTER_SIZE];
+       __u8  mode[DMX_FILTER_SIZE];
+} dmx_filter_t;
+
+
+struct dmx_sct_filter_params
+{
+       __u16          pid;
+       dmx_filter_t   filter;
+       __u32          timeout;
+       __u32          flags;
+#define DMX_CHECK_CRC       1
+#define DMX_ONESHOT         2
+#define DMX_IMMEDIATE_START 4
+#define DMX_KERNEL_CLIENT   0x8000
+};
+
+
+struct dmx_pes_filter_params
+{
+       __u16          pid;
+       dmx_input_t    input;
+       dmx_output_t   output;
+       dmx_pes_type_t pes_type;
+       __u32          flags;
+};
+
+typedef struct dmx_caps {
+       __u32 caps;
+       int num_decoders;
+} dmx_caps_t;
+
+typedef enum dmx_source {
+       DMX_SOURCE_FRONT0 = 0,
+       DMX_SOURCE_FRONT1,
+       DMX_SOURCE_FRONT2,
+       DMX_SOURCE_FRONT3,
+       DMX_SOURCE_DVR0   = 16,
+       DMX_SOURCE_DVR1,
+       DMX_SOURCE_DVR2,
+       DMX_SOURCE_DVR3
+} dmx_source_t;
+
+struct dmx_stc {
+       unsigned int num;       /* input : which STC? 0..N */
+       unsigned int base;      /* output: divisor for stc to get 90 kHz clock */
+       __u64 stc;              /* output: stc in 'base'*90 kHz units */
+};
+
+#define DMX_START                _IO('o', 41)
+#define DMX_STOP                 _IO('o', 42)
+#define DMX_SET_FILTER           _IOW('o', 43, struct dmx_sct_filter_params)
+#define DMX_SET_PES_FILTER       _IOW('o', 44, struct dmx_pes_filter_params)
+#define DMX_SET_BUFFER_SIZE      _IO('o', 45)
+#define DMX_GET_PES_PIDS         _IOR('o', 47, __u16[5])
+#define DMX_GET_CAPS             _IOR('o', 48, dmx_caps_t)
+#define DMX_SET_SOURCE           _IOW('o', 49, dmx_source_t)
+#define DMX_GET_STC              _IOWR('o', 50, struct dmx_stc)
+#define DMX_ADD_PID              _IOW('o', 51, __u16)
+#define DMX_REMOVE_PID           _IOW('o', 52, __u16)
+
+#endif /* _DVBDMX_H_ */
diff --git a/lib/libdss-include/include/linux/dvb/frontend.h b/lib/libdss-include/include/linux/dvb/frontend.h
new file mode 100644 (file)
index 0000000..0f65bd5
--- /dev/null
@@ -0,0 +1,600 @@
+/*
+ * frontend.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                 Ralph  Metzler <ralph@convergence.de>
+ *                 Holger Waechtler <holger@convergence.de>
+ *                 Andre Draszik <ad@convergence.de>
+ *                 for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBFRONTEND_H_
+#define _DVBFRONTEND_H_
+
+#include <linux/types.h>
+
+enum fe_type {
+       FE_QPSK,
+       FE_QAM,
+       FE_OFDM,
+       FE_ATSC
+};
+
+enum fe_caps {
+       FE_IS_STUPID                    = 0,
+       FE_CAN_INVERSION_AUTO           = 0x1,
+       FE_CAN_FEC_1_2                  = 0x2,
+       FE_CAN_FEC_2_3                  = 0x4,
+       FE_CAN_FEC_3_4                  = 0x8,
+       FE_CAN_FEC_4_5                  = 0x10,
+       FE_CAN_FEC_5_6                  = 0x20,
+       FE_CAN_FEC_6_7                  = 0x40,
+       FE_CAN_FEC_7_8                  = 0x80,
+       FE_CAN_FEC_8_9                  = 0x100,
+       FE_CAN_FEC_AUTO                 = 0x200,
+       FE_CAN_QPSK                     = 0x400,
+       FE_CAN_QAM_16                   = 0x800,
+       FE_CAN_QAM_32                   = 0x1000,
+       FE_CAN_QAM_64                   = 0x2000,
+       FE_CAN_QAM_128                  = 0x4000,
+       FE_CAN_QAM_256                  = 0x8000,
+       FE_CAN_QAM_AUTO                 = 0x10000,
+       FE_CAN_TRANSMISSION_MODE_AUTO   = 0x20000,
+       FE_CAN_BANDWIDTH_AUTO           = 0x40000,
+       FE_CAN_GUARD_INTERVAL_AUTO      = 0x80000,
+       FE_CAN_HIERARCHY_AUTO           = 0x100000,
+       FE_CAN_8VSB                     = 0x200000,
+       FE_CAN_16VSB                    = 0x400000,
+       FE_HAS_EXTENDED_CAPS            = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+       FE_CAN_MULTISTREAM              = 0x4000000,  /* frontend supports multistream filtering */
+       FE_CAN_TURBO_FEC                = 0x8000000,  /* frontend supports "turbo fec modulation" */
+       FE_CAN_2G_MODULATION            = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
+       FE_NEEDS_BENDING                = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
+       FE_CAN_RECOVER                  = 0x40000000, /* frontend can recover from a cable unplug automatically */
+       FE_CAN_MUTE_TS                  = 0x80000000  /* frontend can stop spurious TS data output */
+};
+
+struct dvb_frontend_info {
+       char       name[128];
+       enum fe_type type;      /* DEPRECATED. Use DTV_ENUM_DELSYS instead */
+       __u32      frequency_min;
+       __u32      frequency_max;
+       __u32      frequency_stepsize;
+       __u32      frequency_tolerance;
+       __u32      symbol_rate_min;
+       __u32      symbol_rate_max;
+       __u32      symbol_rate_tolerance;       /* ppm */
+       __u32      notifier_delay;              /* DEPRECATED */
+       enum fe_caps caps;
+};
+
+
+/**
+ *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
+ *  the meaning of this struct...
+ */
+struct dvb_diseqc_master_cmd {
+       __u8 msg [6];   /*  { framing, address, command, data [3] } */
+       __u8 msg_len;   /*  valid values are 3...6  */
+};
+
+struct dvb_diseqc_slave_reply {
+       __u8 msg [4];   /*  { framing, data [3] } */
+       __u8 msg_len;   /*  valid values are 0...4, 0 means no msg  */
+       int  timeout;   /*  return from ioctl after timeout ms with */
+};                     /*  errorcode when no message was received  */
+
+enum fe_sec_voltage {
+       SEC_VOLTAGE_13,
+       SEC_VOLTAGE_18,
+       SEC_VOLTAGE_OFF
+};
+
+enum fe_sec_tone_mode {
+       SEC_TONE_ON,
+       SEC_TONE_OFF
+};
+
+enum fe_sec_mini_cmd {
+       SEC_MINI_A,
+       SEC_MINI_B
+};
+
+/**
+ * enum fe_status - enumerates the possible frontend status
+ * @FE_HAS_SIGNAL:     found something above the noise level
+ * @FE_HAS_CARRIER:    found a DVB signal
+ * @FE_HAS_VITERBI:    FEC is stable
+ * @FE_HAS_SYNC:       found sync bytes
+ * @FE_HAS_LOCK:       everything's working
+ * @FE_TIMEDOUT:       no lock within the last ~2 seconds
+ * @FE_REINIT:         frontend was reinitialized, application is recommended
+ *                     to reset DiSEqC, tone and parameters
+ */
+enum fe_status {
+       FE_HAS_SIGNAL           = 0x01,
+       FE_HAS_CARRIER          = 0x02,
+       FE_HAS_VITERBI          = 0x04,
+       FE_HAS_SYNC             = 0x08,
+       FE_HAS_LOCK             = 0x10,
+       FE_TIMEDOUT             = 0x20,
+       FE_REINIT               = 0x40,
+};
+
+enum fe_spectral_inversion {
+       INVERSION_OFF,
+       INVERSION_ON,
+       INVERSION_AUTO
+};
+
+enum fe_code_rate {
+       FEC_NONE = 0,
+       FEC_1_2,
+       FEC_2_3,
+       FEC_3_4,
+       FEC_4_5,
+       FEC_5_6,
+       FEC_6_7,
+       FEC_7_8,
+       FEC_8_9,
+       FEC_AUTO,
+       FEC_3_5,
+       FEC_9_10,
+       FEC_2_5,
+};
+
+enum fe_modulation {
+       QPSK,
+       QAM_16,
+       QAM_32,
+       QAM_64,
+       QAM_128,
+       QAM_256,
+       QAM_AUTO,
+       VSB_8,
+       VSB_16,
+       PSK_8,
+       APSK_16,
+       APSK_32,
+       DQPSK,
+       QAM_4_NR,
+};
+
+enum fe_transmit_mode {
+       TRANSMISSION_MODE_2K,
+       TRANSMISSION_MODE_8K,
+       TRANSMISSION_MODE_AUTO,
+       TRANSMISSION_MODE_4K,
+       TRANSMISSION_MODE_1K,
+       TRANSMISSION_MODE_16K,
+       TRANSMISSION_MODE_32K,
+       TRANSMISSION_MODE_C1,
+       TRANSMISSION_MODE_C3780,
+};
+
+enum fe_guard_interval {
+       GUARD_INTERVAL_1_32,
+       GUARD_INTERVAL_1_16,
+       GUARD_INTERVAL_1_8,
+       GUARD_INTERVAL_1_4,
+       GUARD_INTERVAL_AUTO,
+       GUARD_INTERVAL_1_128,
+       GUARD_INTERVAL_19_128,
+       GUARD_INTERVAL_19_256,
+       GUARD_INTERVAL_PN420,
+       GUARD_INTERVAL_PN595,
+       GUARD_INTERVAL_PN945,
+};
+
+enum fe_hierarchy {
+       HIERARCHY_NONE,
+       HIERARCHY_1,
+       HIERARCHY_2,
+       HIERARCHY_4,
+       HIERARCHY_AUTO
+};
+
+enum fe_interleaving {
+       INTERLEAVING_NONE,
+       INTERLEAVING_AUTO,
+       INTERLEAVING_240,
+       INTERLEAVING_720,
+};
+
+/* S2API Commands */
+#define DTV_UNDEFINED          0
+#define DTV_TUNE               1
+#define DTV_CLEAR              2
+#define DTV_FREQUENCY          3
+#define DTV_MODULATION         4
+#define DTV_BANDWIDTH_HZ       5
+#define DTV_INVERSION          6
+#define DTV_DISEQC_MASTER      7
+#define DTV_SYMBOL_RATE                8
+#define DTV_INNER_FEC          9
+#define DTV_VOLTAGE            10
+#define DTV_TONE               11
+#define DTV_PILOT              12
+#define DTV_ROLLOFF            13
+#define DTV_DISEQC_SLAVE_REPLY 14
+
+/* Basic enumeration set for querying unlimited capabilities */
+#define DTV_FE_CAPABILITY_COUNT        15
+#define DTV_FE_CAPABILITY      16
+#define DTV_DELIVERY_SYSTEM    17
+
+/* ISDB-T and ISDB-Tsb */
+#define DTV_ISDBT_PARTIAL_RECEPTION    18
+#define DTV_ISDBT_SOUND_BROADCASTING   19
+
+#define DTV_ISDBT_SB_SUBCHANNEL_ID     20
+#define DTV_ISDBT_SB_SEGMENT_IDX       21
+#define DTV_ISDBT_SB_SEGMENT_COUNT     22
+
+#define DTV_ISDBT_LAYERA_FEC                   23
+#define DTV_ISDBT_LAYERA_MODULATION            24
+#define DTV_ISDBT_LAYERA_SEGMENT_COUNT         25
+#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING     26
+
+#define DTV_ISDBT_LAYERB_FEC                   27
+#define DTV_ISDBT_LAYERB_MODULATION            28
+#define DTV_ISDBT_LAYERB_SEGMENT_COUNT         29
+#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING     30
+
+#define DTV_ISDBT_LAYERC_FEC                   31
+#define DTV_ISDBT_LAYERC_MODULATION            32
+#define DTV_ISDBT_LAYERC_SEGMENT_COUNT         33
+#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING     34
+
+#define DTV_API_VERSION                35
+
+#define DTV_CODE_RATE_HP       36
+#define DTV_CODE_RATE_LP       37
+#define DTV_GUARD_INTERVAL     38
+#define DTV_TRANSMISSION_MODE  39
+#define DTV_HIERARCHY          40
+
+#define DTV_ISDBT_LAYER_ENABLED        41
+
+#define DTV_STREAM_ID          42
+#define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY        43
+
+#define DTV_ENUM_DELSYS                44
+
+/* ATSC-MH */
+#define DTV_ATSCMH_FIC_VER             45
+#define DTV_ATSCMH_PARADE_ID           46
+#define DTV_ATSCMH_NOG                 47
+#define DTV_ATSCMH_TNOG                        48
+#define DTV_ATSCMH_SGN                 49
+#define DTV_ATSCMH_PRC                 50
+#define DTV_ATSCMH_RS_FRAME_MODE       51
+#define DTV_ATSCMH_RS_FRAME_ENSEMBLE   52
+#define DTV_ATSCMH_RS_CODE_MODE_PRI    53
+#define DTV_ATSCMH_RS_CODE_MODE_SEC    54
+#define DTV_ATSCMH_SCCC_BLOCK_MODE     55
+#define DTV_ATSCMH_SCCC_CODE_MODE_A    56
+#define DTV_ATSCMH_SCCC_CODE_MODE_B    57
+#define DTV_ATSCMH_SCCC_CODE_MODE_C    58
+#define DTV_ATSCMH_SCCC_CODE_MODE_D    59
+
+#define DTV_INTERLEAVING                       60
+#define DTV_LNA                                        61
+
+/* Quality parameters */
+#define DTV_STAT_SIGNAL_STRENGTH       62
+#define DTV_STAT_CNR                   63
+#define DTV_STAT_PRE_ERROR_BIT_COUNT   64
+#define DTV_STAT_PRE_TOTAL_BIT_COUNT   65
+#define DTV_STAT_POST_ERROR_BIT_COUNT  66
+#define DTV_STAT_POST_TOTAL_BIT_COUNT  67
+#define DTV_STAT_ERROR_BLOCK_COUNT     68
+#define DTV_STAT_TOTAL_BLOCK_COUNT     69
+
+#define DTV_MAX_COMMAND                DTV_STAT_TOTAL_BLOCK_COUNT
+
+enum fe_pilot {
+       PILOT_ON,
+       PILOT_OFF,
+       PILOT_AUTO,
+};
+
+enum fe_rolloff {
+       ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
+       ROLLOFF_20,
+       ROLLOFF_25,
+       ROLLOFF_AUTO,
+};
+
+enum fe_delivery_system {
+       SYS_UNDEFINED,
+       SYS_DVBC_ANNEX_A,
+       SYS_DVBC_ANNEX_B,
+       SYS_DVBT,
+       SYS_DSS,
+       SYS_DVBS,
+       SYS_DVBS2,
+       SYS_DVBH,
+       SYS_ISDBT,
+       SYS_ISDBS,
+       SYS_ISDBC,
+       SYS_ATSC,
+       SYS_ATSCMH,
+       SYS_DTMB,
+       SYS_CMMB,
+       SYS_DAB,
+       SYS_DVBT2,
+       SYS_TURBO,
+       SYS_DVBC_ANNEX_C,
+};
+
+/* backward compatibility */
+#define SYS_DVBC_ANNEX_AC      SYS_DVBC_ANNEX_A
+#define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */
+
+/* ATSC-MH */
+
+enum atscmh_sccc_block_mode {
+       ATSCMH_SCCC_BLK_SEP      = 0,
+       ATSCMH_SCCC_BLK_COMB     = 1,
+       ATSCMH_SCCC_BLK_RES      = 2,
+};
+
+enum atscmh_sccc_code_mode {
+       ATSCMH_SCCC_CODE_HLF     = 0,
+       ATSCMH_SCCC_CODE_QTR     = 1,
+       ATSCMH_SCCC_CODE_RES     = 2,
+};
+
+enum atscmh_rs_frame_ensemble {
+       ATSCMH_RSFRAME_ENS_PRI   = 0,
+       ATSCMH_RSFRAME_ENS_SEC   = 1,
+};
+
+enum atscmh_rs_frame_mode {
+       ATSCMH_RSFRAME_PRI_ONLY  = 0,
+       ATSCMH_RSFRAME_PRI_SEC   = 1,
+       ATSCMH_RSFRAME_RES       = 2,
+};
+
+enum atscmh_rs_code_mode {
+       ATSCMH_RSCODE_211_187    = 0,
+       ATSCMH_RSCODE_223_187    = 1,
+       ATSCMH_RSCODE_235_187    = 2,
+       ATSCMH_RSCODE_RES        = 3,
+};
+
+#define NO_STREAM_ID_FILTER    (~0U)
+#define LNA_AUTO                (~0U)
+
+struct dtv_cmds_h {
+       char    *name;          /* A display name for debugging purposes */
+
+       __u32   cmd;            /* A unique ID */
+
+       /* Flags */
+       __u32   set:1;          /* Either a set or get property */
+       __u32   buffer:1;       /* Does this property use the buffer? */
+       __u32   reserved:30;    /* Align */
+};
+
+/**
+ * Scale types for the quality parameters.
+ * @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That
+ *                         could indicate a temporary or a permanent
+ *                         condition.
+ * @FE_SCALE_DECIBEL: The scale is measured in 0.001 dB steps, typically
+ *               used on signal measures.
+ * @FE_SCALE_RELATIVE: The scale is a relative percentual measure,
+ *                     ranging from 0 (0%) to 0xffff (100%).
+ * @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like
+ *                     bit error, block error, lapsed time.
+ */
+enum fecap_scale_params {
+       FE_SCALE_NOT_AVAILABLE = 0,
+       FE_SCALE_DECIBEL,
+       FE_SCALE_RELATIVE,
+       FE_SCALE_COUNTER
+};
+
+/**
+ * struct dtv_stats - Used for reading a DTV status property
+ *
+ * @value:     value of the measure. Should range from 0 to 0xffff;
+ * @scale:     Filled with enum fecap_scale_params - the scale
+ *             in usage for that parameter
+ *
+ * For most delivery systems, this will return a single value for each
+ * parameter.
+ * It should be noticed, however, that new OFDM delivery systems like
+ * ISDB can use different modulation types for each group of carriers.
+ * On such standards, up to 8 groups of statistics can be provided, one
+ * for each carrier group (called "layer" on ISDB).
+ * In order to be consistent with other delivery systems, the first
+ * value refers to the entire set of carriers ("global").
+ * dtv_status:scale should use the value FE_SCALE_NOT_AVAILABLE when
+ * the value for the entire group of carriers or from one specific layer
+ * is not provided by the hardware.
+ * st.len should be filled with the latest filled status + 1.
+ *
+ * In other words, for ISDB, those values should be filled like:
+ *     u.st.stat.svalue[0] = global statistics;
+ *     u.st.stat.scale[0] = FE_SCALE_DECIBEL;
+ *     u.st.stat.value[1] = layer A statistics;
+ *     u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available);
+ *     u.st.stat.svalue[2] = layer B statistics;
+ *     u.st.stat.scale[2] = FE_SCALE_DECIBEL;
+ *     u.st.stat.svalue[3] = layer C statistics;
+ *     u.st.stat.scale[3] = FE_SCALE_DECIBEL;
+ *     u.st.len = 4;
+ */
+struct dtv_stats {
+       __u8 scale;     /* enum fecap_scale_params type */
+       union {
+               __u64 uvalue;   /* for counters and relative scales */
+               __s64 svalue;   /* for 0.001 dB measures */
+       };
+} __attribute__ ((packed));
+
+
+#define MAX_DTV_STATS   4
+
+struct dtv_fe_stats {
+       __u8 len;
+       struct dtv_stats stat[MAX_DTV_STATS];
+} __attribute__ ((packed));
+
+struct dtv_property {
+       __u32 cmd;
+       __u32 reserved[3];
+       union {
+               __u32 data;
+               struct dtv_fe_stats st;
+               struct {
+                       __u8 data[32];
+                       __u32 len;
+                       __u32 reserved1[3];
+                       void *reserved2;
+               } buffer;
+       } u;
+       int result;
+} __attribute__ ((packed));
+
+/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
+#define DTV_IOCTL_MAX_MSGS 64
+
+struct dtv_properties {
+       __u32 num;
+       struct dtv_property *props;
+};
+
+
+/*
+ * DEPRECATED: The DVBv3 ioctls, structs and enums should not be used on
+ * newer programs, as it doesn't support the second generation of digital
+ * TV standards, nor supports newer delivery systems.
+ */
+
+enum fe_bandwidth {
+       BANDWIDTH_8_MHZ,
+       BANDWIDTH_7_MHZ,
+       BANDWIDTH_6_MHZ,
+       BANDWIDTH_AUTO,
+       BANDWIDTH_5_MHZ,
+       BANDWIDTH_10_MHZ,
+       BANDWIDTH_1_712_MHZ,
+};
+
+/* This is needed for legacy userspace support */
+typedef enum fe_sec_voltage fe_sec_voltage_t;
+typedef enum fe_caps fe_caps_t;
+typedef enum fe_type fe_type_t;
+typedef enum fe_sec_tone_mode fe_sec_tone_mode_t;
+typedef enum fe_sec_mini_cmd fe_sec_mini_cmd_t;
+typedef enum fe_status fe_status_t;
+typedef enum fe_spectral_inversion fe_spectral_inversion_t;
+typedef enum fe_code_rate fe_code_rate_t;
+typedef enum fe_modulation fe_modulation_t;
+typedef enum fe_transmit_mode fe_transmit_mode_t;
+typedef enum fe_bandwidth fe_bandwidth_t;
+typedef enum fe_guard_interval fe_guard_interval_t;
+typedef enum fe_hierarchy fe_hierarchy_t;
+typedef enum fe_pilot fe_pilot_t;
+typedef enum fe_rolloff fe_rolloff_t;
+typedef enum fe_delivery_system fe_delivery_system_t;
+
+struct dvb_qpsk_parameters {
+       __u32           symbol_rate;  /* symbol rate in Symbols per second */
+       fe_code_rate_t  fec_inner;    /* forward error correction (see above) */
+};
+
+struct dvb_qam_parameters {
+       __u32           symbol_rate; /* symbol rate in Symbols per second */
+       fe_code_rate_t  fec_inner;   /* forward error correction (see above) */
+       fe_modulation_t modulation;  /* modulation type (see above) */
+};
+
+struct dvb_vsb_parameters {
+       fe_modulation_t modulation;  /* modulation type (see above) */
+};
+
+struct dvb_ofdm_parameters {
+       fe_bandwidth_t      bandwidth;
+       fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
+       fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
+       fe_modulation_t     constellation; /* modulation type (see above) */
+       fe_transmit_mode_t  transmission_mode;
+       fe_guard_interval_t guard_interval;
+       fe_hierarchy_t      hierarchy_information;
+};
+
+struct dvb_frontend_parameters {
+       __u32 frequency;     /* (absolute) frequency in Hz for DVB-C/DVB-T/ATSC */
+                            /* intermediate frequency in kHz for DVB-S */
+       fe_spectral_inversion_t inversion;
+       union {
+               struct dvb_qpsk_parameters qpsk;        /* DVB-S */
+               struct dvb_qam_parameters  qam;         /* DVB-C */
+               struct dvb_ofdm_parameters ofdm;        /* DVB-T */
+               struct dvb_vsb_parameters vsb;          /* ATSC */
+       } u;
+};
+
+struct dvb_frontend_event {
+       fe_status_t status;
+       struct dvb_frontend_parameters parameters;
+};
+
+#define FE_SET_PROPERTY                   _IOW('o', 82, struct dtv_properties)
+#define FE_GET_PROPERTY                   _IOR('o', 83, struct dtv_properties)
+
+/**
+ * When set, this flag will disable any zigzagging or other "normal" tuning
+ * behaviour. Additionally, there will be no automatic monitoring of the lock
+ * status, and hence no frontend events will be generated. If a frontend device
+ * is closed, this flag will be automatically turned off when the device is
+ * reopened read-write.
+ */
+#define FE_TUNE_MODE_ONESHOT 0x01
+
+#define FE_GET_INFO               _IOR('o', 61, struct dvb_frontend_info)
+
+#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
+#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
+#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
+#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
+
+#define FE_SET_TONE               _IO('o', 66)  /* fe_sec_tone_mode_t */
+#define FE_SET_VOLTAGE            _IO('o', 67)  /* fe_sec_voltage_t */
+#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
+
+#define FE_READ_STATUS            _IOR('o', 69, fe_status_t)
+#define FE_READ_BER               _IOR('o', 70, __u32)
+#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
+#define FE_READ_SNR               _IOR('o', 72, __u16)
+#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
+
+#define FE_SET_FRONTEND                   _IOW('o', 76, struct dvb_frontend_parameters)
+#define FE_GET_FRONTEND                   _IOR('o', 77, struct dvb_frontend_parameters)
+#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
+#define FE_GET_EVENT              _IOR('o', 78, struct dvb_frontend_event)
+
+#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
+
+#endif /*_DVBFRONTEND_H_*/
diff --git a/lib/libdss-include/include/linux/dvb/net.h b/lib/libdss-include/include/linux/dvb/net.h
new file mode 100644 (file)
index 0000000..f451e7e
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * net.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBNET_H_
+#define _DVBNET_H_
+
+#include <linux/types.h>
+
+struct dvb_net_if {
+       __u16 pid;
+       __u16 if_num;
+       __u8  feedtype;
+#define DVB_NET_FEEDTYPE_MPE 0 /* multi protocol encapsulation */
+#define DVB_NET_FEEDTYPE_ULE 1 /* ultra lightweight encapsulation */
+};
+
+
+#define NET_ADD_IF    _IOWR('o', 52, struct dvb_net_if)
+#define NET_REMOVE_IF _IO('o', 53)
+#define NET_GET_IF    _IOWR('o', 54, struct dvb_net_if)
+
+
+/* binary compatibility cruft: */
+struct __dvb_net_if_old {
+       __u16 pid;
+       __u16 if_num;
+};
+#define __NET_ADD_IF_OLD _IOWR('o', 52, struct __dvb_net_if_old)
+#define __NET_GET_IF_OLD _IOWR('o', 54, struct __dvb_net_if_old)
+
+
+#endif /*_DVBNET_H_*/
diff --git a/lib/libdss-include/include/linux/dvb/osd.h b/lib/libdss-include/include/linux/dvb/osd.h
new file mode 100644 (file)
index 0000000..f28c7cb
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * osd.h
+ *
+ * Copyright (C) 2001 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBOSD_H_
+#define _DVBOSD_H_
+
+
+
+typedef enum {
+  // All functions return -2 on "not open"
+  OSD_Close=1,    // ()
+  // Disables OSD and releases the buffers
+  // returns 0 on success
+  OSD_Open,       // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0))
+  // Opens OSD with this size and bit depth
+  // returns 0 on success, -1 on DRAM allocation error, -2 on "already open"
+  OSD_Show,       // ()
+  // enables OSD mode
+  // returns 0 on success
+  OSD_Hide,       // ()
+  // disables OSD mode
+  // returns 0 on success
+  OSD_Clear,      // ()
+  // Sets all pixel to color 0
+  // returns 0 on success
+  OSD_Fill,       // (color)
+  // Sets all pixel to color <col>
+  // returns 0 on success
+  OSD_SetColor,   // (color,R{x0},G{y0},B{x1},opacity{y1})
+  // set palette entry <num> to <r,g,b>, <mix> and <trans> apply
+  // R,G,B: 0..255
+  // R=Red, G=Green, B=Blue
+  // opacity=0:      pixel opacity 0% (only video pixel shows)
+  // opacity=1..254: pixel opacity as specified in header
+  // opacity=255:    pixel opacity 100% (only OSD pixel shows)
+  // returns 0 on success, -1 on error
+  OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data)
+  // Set a number of entries in the palette
+  // sets the entries "firstcolor" through "lastcolor" from the array "data"
+  // data has 4 byte for each color:
+  // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel
+  OSD_SetTrans,   // (transparency{color})
+  // Sets transparency of mixed pixel (0..15)
+  // returns 0 on success
+  OSD_SetPixel,   // (x0,y0,color)
+  // sets pixel <x>,<y> to color number <col>
+  // returns 0 on success, -1 on error
+  OSD_GetPixel,   // (x0,y0)
+  // returns color number of pixel <x>,<y>,  or -1
+  OSD_SetRow,     // (x0,y0,x1,data)
+  // fills pixels x0,y through  x1,y with the content of data[]
+  // returns 0 on success, -1 on clipping all pixel (no pixel drawn)
+  OSD_SetBlock,   // (x0,y0,x1,y1,increment{color},data)
+  // fills pixels x0,y0 through  x1,y1 with the content of data[]
+  // inc contains the width of one line in the data block,
+  // inc<=0 uses blockwidth as linewidth
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillRow,    // (x0,y0,x1,color)
+  // fills pixels x0,y through  x1,y with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillBlock,  // (x0,y0,x1,y1,color)
+  // fills pixels x0,y0 through  x1,y1 with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_Line,       // (x0,y0,x1,y1,color)
+  // draw a line from x0,y0 to x1,y1 with the color <col>
+  // returns 0 on success
+  OSD_Query,      // (x0,y0,x1,y1,xasp{color}}), yasp=11
+  // fills parameters with the picture dimensions and the pixel aspect ratio
+  // returns 0 on success
+  OSD_Test,       // ()
+  // draws a test picture. for debugging purposes only
+  // returns 0 on success
+// TODO: remove "test" in final version
+  OSD_Text,       // (x0,y0,size,color,text)
+  OSD_SetWindow, //  (x0) set window with number 0<x0<8 as current
+  OSD_MoveWindow, //  move current window to (x0, y0)
+  OSD_OpenRaw, // Open other types of OSD windows
+} OSD_Command;
+
+typedef struct osd_cmd_s {
+       OSD_Command cmd;
+       int x0;
+       int y0;
+       int x1;
+       int y1;
+       int color;
+       void *data;
+} osd_cmd_t;
+
+/* OSD_OpenRaw: set 'color' to desired window type */
+typedef enum {
+       OSD_BITMAP1,           /* 1 bit bitmap */
+       OSD_BITMAP2,           /* 2 bit bitmap */
+       OSD_BITMAP4,           /* 4 bit bitmap */
+       OSD_BITMAP8,           /* 8 bit bitmap */
+       OSD_BITMAP1HR,         /* 1 Bit bitmap half resolution */
+       OSD_BITMAP2HR,         /* 2 bit bitmap half resolution */
+       OSD_BITMAP4HR,         /* 4 bit bitmap half resolution */
+       OSD_BITMAP8HR,         /* 8 bit bitmap half resolution */
+       OSD_YCRCB422,          /* 4:2:2 YCRCB Graphic Display */
+       OSD_YCRCB444,          /* 4:4:4 YCRCB Graphic Display */
+       OSD_YCRCB444HR,        /* 4:4:4 YCRCB graphic half resolution */
+       OSD_VIDEOTSIZE,        /* True Size Normal MPEG Video Display */
+       OSD_VIDEOHSIZE,        /* MPEG Video Display Half Resolution */
+       OSD_VIDEOQSIZE,        /* MPEG Video Display Quarter Resolution */
+       OSD_VIDEODSIZE,        /* MPEG Video Display Double Resolution */
+       OSD_VIDEOTHSIZE,       /* True Size MPEG Video Display Half Resolution */
+       OSD_VIDEOTQSIZE,       /* True Size MPEG Video Display Quarter Resolution*/
+       OSD_VIDEOTDSIZE,       /* True Size MPEG Video Display Double Resolution */
+       OSD_VIDEONSIZE,        /* Full Size MPEG Video Display */
+       OSD_CURSOR             /* Cursor */
+} osd_raw_window_t;
+
+typedef struct osd_cap_s {
+       int  cmd;
+#define OSD_CAP_MEMSIZE         1  /* memory size */
+       long val;
+} osd_cap_t;
+
+
+#define OSD_SEND_CMD            _IOW('o', 160, osd_cmd_t)
+#define OSD_GET_CAPABILITY      _IOR('o', 161, osd_cap_t)
+
+#endif
diff --git a/lib/libdss-include/include/linux/dvb/version.h b/lib/libdss-include/include/linux/dvb/version.h
new file mode 100644 (file)
index 0000000..e53e2ad
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * version.h
+ *
+ * Copyright (C) 2000 Holger Waechtler <holger@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVERSION_H_
+#define _DVBVERSION_H_
+
+#define DVB_API_VERSION 5
+#define DVB_API_VERSION_MINOR 10
+
+#endif /*_DVBVERSION_H_*/
diff --git a/lib/libdss-include/include/linux/dvb/video.h b/lib/libdss-include/include/linux/dvb/video.h
new file mode 100644 (file)
index 0000000..4bb276c
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * video.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVIDEO_H_
+#define _DVBVIDEO_H_
+
+#include <linux/types.h>
+#include <stdint.h>
+#include <time.h>
+
+typedef enum {
+       VIDEO_FORMAT_4_3,     /* Select 4:3 format */
+       VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
+       VIDEO_FORMAT_221_1    /* 2.21:1 */
+} video_format_t;
+
+
+typedef enum {
+        VIDEO_SYSTEM_PAL,
+        VIDEO_SYSTEM_NTSC,
+        VIDEO_SYSTEM_PALN,
+        VIDEO_SYSTEM_PALNc,
+        VIDEO_SYSTEM_PALM,
+        VIDEO_SYSTEM_NTSC60,
+        VIDEO_SYSTEM_PAL60,
+        VIDEO_SYSTEM_PALM60
+} video_system_t;
+
+
+typedef enum {
+       VIDEO_PAN_SCAN,       /* use pan and scan format */
+       VIDEO_LETTER_BOX,     /* use letterbox format */
+       VIDEO_CENTER_CUT_OUT  /* use center cut out format */
+} video_displayformat_t;
+
+typedef struct {
+       int w;
+       int h;
+       video_format_t aspect_ratio;
+} video_size_t;
+
+typedef enum {
+       VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
+       VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
+                              comes from the user through the write
+                              system call */
+} video_stream_source_t;
+
+
+typedef enum {
+       VIDEO_STOPPED, /* Video is stopped */
+       VIDEO_PLAYING, /* Video is currently playing */
+       VIDEO_FREEZED  /* Video is freezed */
+} video_play_state_t;
+
+
+/* Decoder commands */
+#define VIDEO_CMD_PLAY        (0)
+#define VIDEO_CMD_STOP        (1)
+#define VIDEO_CMD_FREEZE      (2)
+#define VIDEO_CMD_CONTINUE    (3)
+
+/* Flags for VIDEO_CMD_FREEZE */
+#define VIDEO_CMD_FREEZE_TO_BLACK      (1 << 0)
+
+/* Flags for VIDEO_CMD_STOP */
+#define VIDEO_CMD_STOP_TO_BLACK        (1 << 0)
+#define VIDEO_CMD_STOP_IMMEDIATELY             (1 << 1)
+
+/* Play input formats: */
+/* The decoder has no special format requirements */
+#define VIDEO_PLAY_FMT_NONE         (0)
+/* The decoder requires full GOPs */
+#define VIDEO_PLAY_FMT_GOP          (1)
+
+/* The structure must be zeroed before use by the application
+   This ensures it can be extended safely in the future. */
+struct video_command {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u64 pts;
+               } stop;
+
+               struct {
+                       /* 0 or 1000 specifies normal speed,
+                          1 specifies forward single stepping,
+                          -1 specifies backward single stepping,
+                          >1: playback at speed/1000 of the normal speed,
+                          <-1: reverse playback at (-speed/1000) of the normal speed. */
+                       __s32 speed;
+                       __u32 format;
+               } play;
+
+               struct {
+                       __u32 data[16];
+               } raw;
+       };
+};
+
+/* FIELD_UNKNOWN can be used if the hardware does not know whether
+   the Vsync is for an odd, even or progressive (i.e. non-interlaced)
+   field. */
+#define VIDEO_VSYNC_FIELD_UNKNOWN      (0)
+#define VIDEO_VSYNC_FIELD_ODD          (1)
+#define VIDEO_VSYNC_FIELD_EVEN         (2)
+#define VIDEO_VSYNC_FIELD_PROGRESSIVE  (3)
+
+struct video_event {
+       __s32 type;
+#define VIDEO_EVENT_SIZE_CHANGED       1
+#define VIDEO_EVENT_FRAME_RATE_CHANGED 2
+#define VIDEO_EVENT_DECODER_STOPPED    3
+#define VIDEO_EVENT_VSYNC              4
+       __kernel_time_t timestamp;
+       union {
+               video_size_t size;
+               unsigned int frame_rate;        /* in frames per 1000sec */
+               unsigned char vsync_field;      /* unknown/odd/even/progressive */
+       } u;
+};
+
+
+struct video_status {
+       int                   video_blank;   /* blank video on freeze? */
+       video_play_state_t    play_state;    /* current state of playback */
+       video_stream_source_t stream_source; /* current source (demux/memory) */
+       video_format_t        video_format;  /* current aspect ratio of stream*/
+       video_displayformat_t display_format;/* selected cropping mode */
+};
+
+
+struct video_still_picture {
+       char *iFrame;        /* pointer to a single iframe in memory */
+       __s32 size;
+};
+
+
+typedef
+struct video_highlight {
+       int     active;      /*    1=show highlight, 0=hide highlight */
+       __u8    contrast1;   /*    7- 4  Pattern pixel contrast */
+                            /*    3- 0  Background pixel contrast */
+       __u8    contrast2;   /*    7- 4  Emphasis pixel-2 contrast */
+                            /*    3- 0  Emphasis pixel-1 contrast */
+       __u8    color1;      /*    7- 4  Pattern pixel color */
+                            /*    3- 0  Background pixel color */
+       __u8    color2;      /*    7- 4  Emphasis pixel-2 color */
+                            /*    3- 0  Emphasis pixel-1 color */
+       __u32    ypos;       /*   23-22  auto action mode */
+                            /*   21-12  start y */
+                            /*    9- 0  end y */
+       __u32    xpos;       /*   23-22  button color number */
+                            /*   21-12  start x */
+                            /*    9- 0  end x */
+} video_highlight_t;
+
+
+typedef struct video_spu {
+       int active;
+       int stream_id;
+} video_spu_t;
+
+
+typedef struct video_spu_palette {      /* SPU Palette information */
+       int length;
+       __u8 *palette;
+} video_spu_palette_t;
+
+
+typedef struct video_navi_pack {
+       int length;          /* 0 ... 1024 */
+       __u8 data[1024];
+} video_navi_pack_t;
+
+
+typedef __u16 video_attributes_t;
+/*   bits: descr. */
+/*   15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
+/*   13-12 TV system (0=525/60, 1=625/50) */
+/*   11-10 Aspect ratio (0=4:3, 3=16:9) */
+/*    9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
+/*    7    line 21-1 data present in GOP (1=yes, 0=no) */
+/*    6    line 21-2 data present in GOP (1=yes, 0=no) */
+/*    5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
+/*    2    source letterboxed (1=yes, 0=no) */
+/*    0    film/camera mode (0=camera, 1=film (625/50 only)) */
+
+
+/* bit definitions for capabilities: */
+/* can the hardware decode MPEG1 and/or MPEG2? */
+#define VIDEO_CAP_MPEG1   1
+#define VIDEO_CAP_MPEG2   2
+/* can you send a system and/or program stream to video device?
+   (you still have to open the video and the audio device but only
+    send the stream to the video device) */
+#define VIDEO_CAP_SYS     4
+#define VIDEO_CAP_PROG    8
+/* can the driver also handle SPU, NAVI and CSS encoded data?
+   (CSS API is not present yet) */
+#define VIDEO_CAP_SPU    16
+#define VIDEO_CAP_NAVI   32
+#define VIDEO_CAP_CSS    64
+
+
+#define VIDEO_STOP                 _IO('o', 21)
+#define VIDEO_PLAY                 _IO('o', 22)
+#define VIDEO_FREEZE               _IO('o', 23)
+#define VIDEO_CONTINUE             _IO('o', 24)
+#define VIDEO_SELECT_SOURCE        _IO('o', 25)
+#define VIDEO_SET_BLANK            _IO('o', 26)
+#define VIDEO_GET_STATUS           _IOR('o', 27, struct video_status)
+#define VIDEO_GET_EVENT            _IOR('o', 28, struct video_event)
+#define VIDEO_SET_DISPLAY_FORMAT   _IO('o', 29)
+#define VIDEO_STILLPICTURE         _IOW('o', 30, struct video_still_picture)
+#define VIDEO_FAST_FORWARD         _IO('o', 31)
+#define VIDEO_SLOWMOTION           _IO('o', 32)
+#define VIDEO_GET_CAPABILITIES     _IOR('o', 33, unsigned int)
+#define VIDEO_CLEAR_BUFFER         _IO('o',  34)
+#define VIDEO_SET_ID               _IO('o', 35)
+#define VIDEO_SET_STREAMTYPE       _IO('o', 36)
+#define VIDEO_SET_FORMAT           _IO('o', 37)
+#define VIDEO_SET_SYSTEM           _IO('o', 38)
+#define VIDEO_SET_HIGHLIGHT        _IOW('o', 39, video_highlight_t)
+#define VIDEO_SET_SPU              _IOW('o', 50, video_spu_t)
+#define VIDEO_SET_SPU_PALETTE      _IOW('o', 51, video_spu_palette_t)
+#define VIDEO_GET_NAVI             _IOR('o', 52, video_navi_pack_t)
+#define VIDEO_SET_ATTRIBUTES       _IO('o', 53)
+#define VIDEO_GET_SIZE             _IOR('o', 55, video_size_t)
+#define VIDEO_GET_FRAME_RATE       _IOR('o', 56, unsigned int)
+
+/**
+ * VIDEO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define VIDEO_GET_PTS              _IOR('o', 57, __u64)
+
+/* Read the number of displayed frames since the decoder was started */
+#define VIDEO_GET_FRAME_COUNT             _IOR('o', 58, __u64)
+
+#define VIDEO_COMMAND             _IOWR('o', 59, struct video_command)
+#define VIDEO_TRY_COMMAND         _IOWR('o', 60, struct video_command)
+
+#endif /* _DVBVIDEO_H_ */
diff --git a/lib/libdss-include/include/linux/edd.h b/lib/libdss-include/include/linux/edd.h
new file mode 100644 (file)
index 0000000..190815d
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ * linux/include/linux/edd.h
+ *  Copyright (C) 2002, 2003, 2004 Dell Inc.
+ *  by Matt Domsch <Matt_Domsch@dell.com>
+ *
+ * structures and definitions for the int 13h, ax={41,48}h
+ * BIOS Enhanced Disk Drive Services
+ * This is based on the T13 group document D1572 Revision 0 (August 14 2002)
+ * available at http://www.t13.org/docs2002/d1572r0.pdf.  It is
+ * very similar to D1484 Revision 3 http://www.t13.org/docs2002/d1484r3.pdf
+ *
+ * In a nutshell, arch/{i386,x86_64}/boot/setup.S populates a scratch
+ * table in the boot_params that contains a list of BIOS-enumerated
+ * boot devices.
+ * In arch/{i386,x86_64}/kernel/setup.c, this information is
+ * transferred into the edd structure, and in drivers/firmware/edd.c, that
+ * information is used to identify BIOS boot disk.  The code in setup.S
+ * is very sensitive to the size of these structures.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+#ifndef _LINUX_EDD_H
+#define _LINUX_EDD_H
+
+#include <linux/types.h>
+
+#define EDDNR 0x1e9            /* addr of number of edd_info structs at EDDBUF
+                                  in boot_params - treat this as 1 byte  */
+#define EDDBUF 0xd00           /* addr of edd_info structs in boot_params */
+#define EDDMAXNR 6             /* number of edd_info structs starting at EDDBUF  */
+#define EDDEXTSIZE 8           /* change these if you muck with the structures */
+#define EDDPARMSIZE 74
+#define CHECKEXTENSIONSPRESENT 0x41
+#define GETDEVICEPARAMETERS 0x48
+#define LEGACYGETDEVICEPARAMETERS 0x08
+#define EDDMAGIC1 0x55AA
+#define EDDMAGIC2 0xAA55
+
+
+#define READ_SECTORS 0x02         /* int13 AH=0x02 is READ_SECTORS command */
+#define EDD_MBR_SIG_OFFSET 0x1B8  /* offset of signature in the MBR */
+#define EDD_MBR_SIG_BUF    0x290  /* addr in boot params */
+#define EDD_MBR_SIG_MAX 16        /* max number of signatures to store */
+#define EDD_MBR_SIG_NR_BUF 0x1ea  /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF
+                                    in boot_params - treat this as 1 byte  */
+
+#ifndef __ASSEMBLY__
+
+#define EDD_EXT_FIXED_DISK_ACCESS           (1 << 0)
+#define EDD_EXT_DEVICE_LOCKING_AND_EJECTING (1 << 1)
+#define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2)
+#define EDD_EXT_64BIT_EXTENSIONS            (1 << 3)
+
+#define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0)
+#define EDD_INFO_GEOMETRY_VALID                (1 << 1)
+#define EDD_INFO_REMOVABLE                     (1 << 2)
+#define EDD_INFO_WRITE_VERIFY                  (1 << 3)
+#define EDD_INFO_MEDIA_CHANGE_NOTIFICATION     (1 << 4)
+#define EDD_INFO_LOCKABLE                      (1 << 5)
+#define EDD_INFO_NO_MEDIA_PRESENT              (1 << 6)
+#define EDD_INFO_USE_INT13_FN50                (1 << 7)
+
+struct edd_device_params {
+       __u16 length;
+       __u16 info_flags;
+       __u32 num_default_cylinders;
+       __u32 num_default_heads;
+       __u32 sectors_per_track;
+       __u64 number_of_sectors;
+       __u16 bytes_per_sector;
+       __u32 dpte_ptr;         /* 0xFFFFFFFF for our purposes */
+       __u16 key;              /* = 0xBEDD */
+       __u8 device_path_info_length;   /* = 44 */
+       __u8 reserved2;
+       __u16 reserved3;
+       __u8 host_bus_type[4];
+       __u8 interface_type[8];
+       union {
+               struct {
+                       __u16 base_address;
+                       __u16 reserved1;
+                       __u32 reserved2;
+               } __attribute__ ((packed)) isa;
+               struct {
+                       __u8 bus;
+                       __u8 slot;
+                       __u8 function;
+                       __u8 channel;
+                       __u32 reserved;
+               } __attribute__ ((packed)) pci;
+               /* pcix is same as pci */
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) ibnd;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) xprs;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) htpt;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) unknown;
+       } interface_path;
+       union {
+               struct {
+                       __u8 device;
+                       __u8 reserved1;
+                       __u16 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) ata;
+               struct {
+                       __u8 device;
+                       __u8 lun;
+                       __u8 reserved1;
+                       __u8 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) atapi;
+               struct {
+                       __u16 id;
+                       __u64 lun;
+                       __u16 reserved1;
+                       __u32 reserved2;
+               } __attribute__ ((packed)) scsi;
+               struct {
+                       __u64 serial_number;
+                       __u64 reserved;
+               } __attribute__ ((packed)) usb;
+               struct {
+                       __u64 eui;
+                       __u64 reserved;
+               } __attribute__ ((packed)) i1394;
+               struct {
+                       __u64 wwid;
+                       __u64 lun;
+               } __attribute__ ((packed)) fibre;
+               struct {
+                       __u64 identity_tag;
+                       __u64 reserved;
+               } __attribute__ ((packed)) i2o;
+               struct {
+                       __u32 array_number;
+                       __u32 reserved1;
+                       __u64 reserved2;
+               } __attribute__ ((packed)) raid;
+               struct {
+                       __u8 device;
+                       __u8 reserved1;
+                       __u16 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) sata;
+               struct {
+                       __u64 reserved1;
+                       __u64 reserved2;
+               } __attribute__ ((packed)) unknown;
+       } device_path;
+       __u8 reserved4;
+       __u8 checksum;
+} __attribute__ ((packed));
+
+struct edd_info {
+       __u8 device;
+       __u8 version;
+       __u16 interface_support;
+       __u16 legacy_max_cylinder;
+       __u8 legacy_max_head;
+       __u8 legacy_sectors_per_track;
+       struct edd_device_params params;
+} __attribute__ ((packed));
+
+struct edd {
+       unsigned int mbr_signature[EDD_MBR_SIG_MAX];
+       struct edd_info edd_info[EDDMAXNR];
+       unsigned char mbr_signature_nr;
+       unsigned char edd_info_nr;
+};
+
+#endif                         /*!__ASSEMBLY__ */
+
+#endif /* _LINUX_EDD_H */
diff --git a/lib/libdss-include/include/linux/efs_fs_sb.h b/lib/libdss-include/include/linux/efs_fs_sb.h
new file mode 100644 (file)
index 0000000..a01be90
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * efs_fs_sb.h
+ *
+ * Copyright (c) 1999 Al Smith
+ *
+ * Portions derived from IRIX header files (c) 1988 Silicon Graphics
+ */
+
+#ifndef __EFS_FS_SB_H__
+#define __EFS_FS_SB_H__
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* EFS superblock magic numbers */
+#define EFS_MAGIC      0x072959
+#define EFS_NEWMAGIC   0x07295a
+
+#define IS_EFS_MAGIC(x)        ((x == EFS_MAGIC) || (x == EFS_NEWMAGIC))
+
+#define EFS_SUPER              1
+#define EFS_ROOTINODE          2
+
+/* efs superblock on disk */
+struct efs_super {
+       __be32          fs_size;        /* size of filesystem, in sectors */
+       __be32          fs_firstcg;     /* bb offset to first cg */
+       __be32          fs_cgfsize;     /* size of cylinder group in bb's */
+       __be16          fs_cgisize;     /* bb's of inodes per cylinder group */
+       __be16          fs_sectors;     /* sectors per track */
+       __be16          fs_heads;       /* heads per cylinder */
+       __be16          fs_ncg;         /* # of cylinder groups in filesystem */
+       __be16          fs_dirty;       /* fs needs to be fsck'd */
+       __be32          fs_time;        /* last super-block update */
+       __be32          fs_magic;       /* magic number */
+       char            fs_fname[6];    /* file system name */
+       char            fs_fpack[6];    /* file system pack name */
+       __be32          fs_bmsize;      /* size of bitmap in bytes */
+       __be32          fs_tfree;       /* total free data blocks */
+       __be32          fs_tinode;      /* total free inodes */
+       __be32          fs_bmblock;     /* bitmap location. */
+       __be32          fs_replsb;      /* Location of replicated superblock. */
+       __be32          fs_lastialloc;  /* last allocated inode */
+       char            fs_spare[20];   /* space for expansion - MUST BE ZERO */
+       __be32          fs_checksum;    /* checksum of volume portion of fs */
+};
+
+/* efs superblock information in memory */
+struct efs_sb_info {
+       __u32   fs_magic;       /* superblock magic number */
+       __u32   fs_start;       /* first block of filesystem */
+       __u32   first_block;    /* first data block in filesystem */
+       __u32   total_blocks;   /* total number of blocks in filesystem */
+       __u32   group_size;     /* # of blocks a group consists of */ 
+       __u32   data_free;      /* # of free data blocks */
+       __u32   inode_free;     /* # of free inodes */
+       __u16   inode_blocks;   /* # of blocks used for inodes in every grp */
+       __u16   total_groups;   /* # of groups */
+};
+
+#endif /* __EFS_FS_SB_H__ */
+
diff --git a/lib/libdss-include/include/linux/elf-em.h b/lib/libdss-include/include/linux/elf-em.h
new file mode 100644 (file)
index 0000000..b56dfcf
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _LINUX_ELF_EM_H
+#define _LINUX_ELF_EM_H
+
+/* These constants define the various ELF target machines */
+#define EM_NONE                0
+#define EM_M32         1
+#define EM_SPARC       2
+#define EM_386         3
+#define EM_68K         4
+#define EM_88K         5
+#define EM_486         6       /* Perhaps disused */
+#define EM_860         7
+#define EM_MIPS                8       /* MIPS R3000 (officially, big-endian only) */
+                               /* Next two are historical and binaries and
+                                  modules of these types will be rejected by
+                                  Linux.  */
+#define EM_MIPS_RS3_LE 10      /* MIPS R3000 little-endian */
+#define EM_MIPS_RS4_BE 10      /* MIPS R4000 big-endian */
+
+#define EM_PARISC      15      /* HPPA */
+#define EM_SPARC32PLUS 18      /* Sun's "v8plus" */
+#define EM_PPC         20      /* PowerPC */
+#define EM_PPC64       21       /* PowerPC64 */
+#define EM_SPU         23      /* Cell BE SPU */
+#define EM_ARM         40      /* ARM 32 bit */
+#define EM_SH          42      /* SuperH */
+#define EM_SPARCV9     43      /* SPARC v9 64-bit */
+#define EM_H8_300      46      /* Renesas H8/300 */
+#define EM_IA_64       50      /* HP/Intel IA-64 */
+#define EM_X86_64      62      /* AMD x86-64 */
+#define EM_S390                22      /* IBM S/390 */
+#define EM_CRIS                76      /* Axis Communications 32-bit embedded processor */
+#define EM_V850                87      /* NEC v850 */
+#define EM_M32R                88      /* Renesas M32R */
+#define EM_MN10300     89      /* Panasonic/MEI MN10300, AM33 */
+#define EM_OPENRISC     92     /* OpenRISC 32-bit embedded processor */
+#define EM_BLACKFIN     106     /* ADI Blackfin Processor */
+#define EM_ALTERA_NIOS2        113     /* Altera Nios II soft-core processor */
+#define EM_TI_C6000    140     /* TI C6X DSPs */
+#define EM_AARCH64     183     /* ARM 64 bit */
+#define EM_TILEPRO     188     /* Tilera TILEPro */
+#define EM_MICROBLAZE  189     /* Xilinx MicroBlaze */
+#define EM_TILEGX      191     /* Tilera TILE-Gx */
+#define EM_FRV         0x5441  /* Fujitsu FR-V */
+#define EM_AVR32       0x18ad  /* Atmel AVR32 */
+
+/*
+ * This is an interim value that we will use until the committee comes
+ * up with a final number.
+ */
+#define EM_ALPHA       0x9026
+
+/* Bogus old v850 magic number, used by old tools. */
+#define EM_CYGNUS_V850 0x9080
+/* Bogus old m32r magic number, used by old tools. */
+#define EM_CYGNUS_M32R 0x9041
+/* This is the old interim value for S/390 architecture */
+#define EM_S390_OLD    0xA390
+/* Also Panasonic/MEI MN10300, AM33 */
+#define EM_CYGNUS_MN10300 0xbeef
+
+
+#endif /* _LINUX_ELF_EM_H */
diff --git a/lib/libdss-include/include/linux/elf-fdpic.h b/lib/libdss-include/include/linux/elf-fdpic.h
new file mode 100644 (file)
index 0000000..5748a46
--- /dev/null
@@ -0,0 +1,34 @@
+/* elf-fdpic.h: FDPIC ELF load map
+ *
+ * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_ELF_FDPIC_H
+#define _LINUX_ELF_FDPIC_H
+
+#include <linux/elf.h>
+
+#define PT_GNU_STACK    (PT_LOOS + 0x474e551)
+
+/* segment mappings for ELF FDPIC libraries/executables/interpreters */
+struct elf32_fdpic_loadseg {
+       Elf32_Addr      addr;           /* core address to which mapped */
+       Elf32_Addr      p_vaddr;        /* VMA recorded in file */
+       Elf32_Word      p_memsz;        /* allocation size recorded in file */
+};
+
+struct elf32_fdpic_loadmap {
+       Elf32_Half      version;        /* version of these structures, just in case... */
+       Elf32_Half      nsegs;          /* number of segments */
+       struct elf32_fdpic_loadseg segs[];
+};
+
+#define ELF32_FDPIC_LOADMAP_VERSION    0x0000
+
+#endif /* _LINUX_ELF_FDPIC_H */
diff --git a/lib/libdss-include/include/linux/elf.h b/lib/libdss-include/include/linux/elf.h
new file mode 100644 (file)
index 0000000..988b53d
--- /dev/null
@@ -0,0 +1,420 @@
+#ifndef _LINUX_ELF_H
+#define _LINUX_ELF_H
+
+#include <linux/types.h>
+#include <linux/elf-em.h>
+
+/* 32-bit ELF base types. */
+typedef __u32  Elf32_Addr;
+typedef __u16  Elf32_Half;
+typedef __u32  Elf32_Off;
+typedef __s32  Elf32_Sword;
+typedef __u32  Elf32_Word;
+
+/* 64-bit ELF base types. */
+typedef __u64  Elf64_Addr;
+typedef __u16  Elf64_Half;
+typedef __s16  Elf64_SHalf;
+typedef __u64  Elf64_Off;
+typedef __s32  Elf64_Sword;
+typedef __u32  Elf64_Word;
+typedef __u64  Elf64_Xword;
+typedef __s64  Elf64_Sxword;
+
+/* These constants are for the segment types stored in the image headers */
+#define PT_NULL    0
+#define PT_LOAD    1
+#define PT_DYNAMIC 2
+#define PT_INTERP  3
+#define PT_NOTE    4
+#define PT_SHLIB   5
+#define PT_PHDR    6
+#define PT_TLS     7               /* Thread local storage segment */
+#define PT_LOOS    0x60000000      /* OS-specific */
+#define PT_HIOS    0x6fffffff      /* OS-specific */
+#define PT_LOPROC  0x70000000
+#define PT_HIPROC  0x7fffffff
+#define PT_GNU_EH_FRAME                0x6474e550
+
+#define PT_GNU_STACK   (PT_LOOS + 0x474e551)
+
+/*
+ * Extended Numbering
+ *
+ * If the real number of program header table entries is larger than
+ * or equal to PN_XNUM(0xffff), it is set to sh_info field of the
+ * section header at index 0, and PN_XNUM is set to e_phnum
+ * field. Otherwise, the section header at index 0 is zero
+ * initialized, if it exists.
+ *
+ * Specifications are available in:
+ *
+ * - Oracle: Linker and Libraries.
+ *   Part No: 817–1984–19, August 2011.
+ *   http://docs.oracle.com/cd/E18752_01/pdf/817-1984.pdf
+ *
+ * - System V ABI AMD64 Architecture Processor Supplement
+ *   Draft Version 0.99.4,
+ *   January 13, 2010.
+ *   http://www.cs.washington.edu/education/courses/cse351/12wi/supp-docs/abi.pdf
+ */
+#define PN_XNUM 0xffff
+
+/* These constants define the different elf file types */
+#define ET_NONE   0
+#define ET_REL    1
+#define ET_EXEC   2
+#define ET_DYN    3
+#define ET_CORE   4
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/* This is the info that is needed to parse the dynamic section of the file */
+#define DT_NULL                0
+#define DT_NEEDED      1
+#define DT_PLTRELSZ    2
+#define DT_PLTGOT      3
+#define DT_HASH                4
+#define DT_STRTAB      5
+#define DT_SYMTAB      6
+#define DT_RELA                7
+#define DT_RELASZ      8
+#define DT_RELAENT     9
+#define DT_STRSZ       10
+#define DT_SYMENT      11
+#define DT_INIT                12
+#define DT_FINI                13
+#define DT_SONAME      14
+#define DT_RPATH       15
+#define DT_SYMBOLIC    16
+#define DT_REL         17
+#define DT_RELSZ       18
+#define DT_RELENT      19
+#define DT_PLTREL      20
+#define DT_DEBUG       21
+#define DT_TEXTREL     22
+#define DT_JMPREL      23
+#define DT_ENCODING    32
+#define OLD_DT_LOOS    0x60000000
+#define DT_LOOS                0x6000000d
+#define DT_HIOS                0x6ffff000
+#define DT_VALRNGLO    0x6ffffd00
+#define DT_VALRNGHI    0x6ffffdff
+#define DT_ADDRRNGLO   0x6ffffe00
+#define DT_ADDRRNGHI   0x6ffffeff
+#define DT_VERSYM      0x6ffffff0
+#define DT_RELACOUNT   0x6ffffff9
+#define DT_RELCOUNT    0x6ffffffa
+#define DT_FLAGS_1     0x6ffffffb
+#define DT_VERDEF      0x6ffffffc
+#define        DT_VERDEFNUM    0x6ffffffd
+#define DT_VERNEED     0x6ffffffe
+#define        DT_VERNEEDNUM   0x6fffffff
+#define OLD_DT_HIOS     0x6fffffff
+#define DT_LOPROC      0x70000000
+#define DT_HIPROC      0x7fffffff
+
+/* This info is needed when parsing the symbol table */
+#define STB_LOCAL  0
+#define STB_GLOBAL 1
+#define STB_WEAK   2
+
+#define STT_NOTYPE  0
+#define STT_OBJECT  1
+#define STT_FUNC    2
+#define STT_SECTION 3
+#define STT_FILE    4
+#define STT_COMMON  5
+#define STT_TLS     6
+
+#define ELF_ST_BIND(x)         ((x) >> 4)
+#define ELF_ST_TYPE(x)         (((unsigned int) x) & 0xf)
+#define ELF32_ST_BIND(x)       ELF_ST_BIND(x)
+#define ELF32_ST_TYPE(x)       ELF_ST_TYPE(x)
+#define ELF64_ST_BIND(x)       ELF_ST_BIND(x)
+#define ELF64_ST_TYPE(x)       ELF_ST_TYPE(x)
+
+typedef struct dynamic{
+  Elf32_Sword d_tag;
+  union{
+    Elf32_Sword        d_val;
+    Elf32_Addr d_ptr;
+  } d_un;
+} Elf32_Dyn;
+
+typedef struct {
+  Elf64_Sxword d_tag;          /* entry tag value */
+  union {
+    Elf64_Xword d_val;
+    Elf64_Addr d_ptr;
+  } d_un;
+} Elf64_Dyn;
+
+/* The following are used with relocations */
+#define ELF32_R_SYM(x) ((x) >> 8)
+#define ELF32_R_TYPE(x) ((x) & 0xff)
+
+#define ELF64_R_SYM(i)                 ((i) >> 32)
+#define ELF64_R_TYPE(i)                        ((i) & 0xffffffff)
+
+typedef struct elf32_rel {
+  Elf32_Addr   r_offset;
+  Elf32_Word   r_info;
+} Elf32_Rel;
+
+typedef struct elf64_rel {
+  Elf64_Addr r_offset; /* Location at which to apply the action */
+  Elf64_Xword r_info;  /* index and type of relocation */
+} Elf64_Rel;
+
+typedef struct elf32_rela{
+  Elf32_Addr   r_offset;
+  Elf32_Word   r_info;
+  Elf32_Sword  r_addend;
+} Elf32_Rela;
+
+typedef struct elf64_rela {
+  Elf64_Addr r_offset; /* Location at which to apply the action */
+  Elf64_Xword r_info;  /* index and type of relocation */
+  Elf64_Sxword r_addend;       /* Constant addend used to compute value */
+} Elf64_Rela;
+
+typedef struct elf32_sym{
+  Elf32_Word   st_name;
+  Elf32_Addr   st_value;
+  Elf32_Word   st_size;
+  unsigned char        st_info;
+  unsigned char        st_other;
+  Elf32_Half   st_shndx;
+} Elf32_Sym;
+
+typedef struct elf64_sym {
+  Elf64_Word st_name;          /* Symbol name, index in string tbl */
+  unsigned char        st_info;        /* Type and binding attributes */
+  unsigned char        st_other;       /* No defined meaning, 0 */
+  Elf64_Half st_shndx;         /* Associated section index */
+  Elf64_Addr st_value;         /* Value of the symbol */
+  Elf64_Xword st_size;         /* Associated symbol size */
+} Elf64_Sym;
+
+
+#define EI_NIDENT      16
+
+typedef struct elf32_hdr{
+  unsigned char        e_ident[EI_NIDENT];
+  Elf32_Half   e_type;
+  Elf32_Half   e_machine;
+  Elf32_Word   e_version;
+  Elf32_Addr   e_entry;  /* Entry point */
+  Elf32_Off    e_phoff;
+  Elf32_Off    e_shoff;
+  Elf32_Word   e_flags;
+  Elf32_Half   e_ehsize;
+  Elf32_Half   e_phentsize;
+  Elf32_Half   e_phnum;
+  Elf32_Half   e_shentsize;
+  Elf32_Half   e_shnum;
+  Elf32_Half   e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct elf64_hdr {
+  unsigned char        e_ident[EI_NIDENT];     /* ELF "magic number" */
+  Elf64_Half e_type;
+  Elf64_Half e_machine;
+  Elf64_Word e_version;
+  Elf64_Addr e_entry;          /* Entry point virtual address */
+  Elf64_Off e_phoff;           /* Program header table file offset */
+  Elf64_Off e_shoff;           /* Section header table file offset */
+  Elf64_Word e_flags;
+  Elf64_Half e_ehsize;
+  Elf64_Half e_phentsize;
+  Elf64_Half e_phnum;
+  Elf64_Half e_shentsize;
+  Elf64_Half e_shnum;
+  Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+
+/* These constants define the permissions on sections in the program
+   header, p_flags. */
+#define PF_R           0x4
+#define PF_W           0x2
+#define PF_X           0x1
+
+typedef struct elf32_phdr{
+  Elf32_Word   p_type;
+  Elf32_Off    p_offset;
+  Elf32_Addr   p_vaddr;
+  Elf32_Addr   p_paddr;
+  Elf32_Word   p_filesz;
+  Elf32_Word   p_memsz;
+  Elf32_Word   p_flags;
+  Elf32_Word   p_align;
+} Elf32_Phdr;
+
+typedef struct elf64_phdr {
+  Elf64_Word p_type;
+  Elf64_Word p_flags;
+  Elf64_Off p_offset;          /* Segment file offset */
+  Elf64_Addr p_vaddr;          /* Segment virtual address */
+  Elf64_Addr p_paddr;          /* Segment physical address */
+  Elf64_Xword p_filesz;                /* Segment size in file */
+  Elf64_Xword p_memsz;         /* Segment size in memory */
+  Elf64_Xword p_align;         /* Segment alignment, file & memory */
+} Elf64_Phdr;
+
+/* sh_type */
+#define SHT_NULL       0
+#define SHT_PROGBITS   1
+#define SHT_SYMTAB     2
+#define SHT_STRTAB     3
+#define SHT_RELA       4
+#define SHT_HASH       5
+#define SHT_DYNAMIC    6
+#define SHT_NOTE       7
+#define SHT_NOBITS     8
+#define SHT_REL                9
+#define SHT_SHLIB      10
+#define SHT_DYNSYM     11
+#define SHT_NUM                12
+#define SHT_LOPROC     0x70000000
+#define SHT_HIPROC     0x7fffffff
+#define SHT_LOUSER     0x80000000
+#define SHT_HIUSER     0xffffffff
+
+/* sh_flags */
+#define SHF_WRITE      0x1
+#define SHF_ALLOC      0x2
+#define SHF_EXECINSTR  0x4
+#define SHF_MASKPROC   0xf0000000
+
+/* special section indexes */
+#define SHN_UNDEF      0
+#define SHN_LORESERVE  0xff00
+#define SHN_LOPROC     0xff00
+#define SHN_HIPROC     0xff1f
+#define SHN_ABS                0xfff1
+#define SHN_COMMON     0xfff2
+#define SHN_HIRESERVE  0xffff
+typedef struct elf32_shdr {
+  Elf32_Word   sh_name;
+  Elf32_Word   sh_type;
+  Elf32_Word   sh_flags;
+  Elf32_Addr   sh_addr;
+  Elf32_Off    sh_offset;
+  Elf32_Word   sh_size;
+  Elf32_Word   sh_link;
+  Elf32_Word   sh_info;
+  Elf32_Word   sh_addralign;
+  Elf32_Word   sh_entsize;
+} Elf32_Shdr;
+
+typedef struct elf64_shdr {
+  Elf64_Word sh_name;          /* Section name, index in string tbl */
+  Elf64_Word sh_type;          /* Type of section */
+  Elf64_Xword sh_flags;                /* Miscellaneous section attributes */
+  Elf64_Addr sh_addr;          /* Section virtual addr at execution */
+  Elf64_Off sh_offset;         /* Section file offset */
+  Elf64_Xword sh_size;         /* Size of section in bytes */
+  Elf64_Word sh_link;          /* Index of another section */
+  Elf64_Word sh_info;          /* Additional section information */
+  Elf64_Xword sh_addralign;    /* Section alignment */
+  Elf64_Xword sh_entsize;      /* Entry size if section holds table */
+} Elf64_Shdr;
+
+#define        EI_MAG0         0               /* e_ident[] indexes */
+#define        EI_MAG1         1
+#define        EI_MAG2         2
+#define        EI_MAG3         3
+#define        EI_CLASS        4
+#define        EI_DATA         5
+#define        EI_VERSION      6
+#define        EI_OSABI        7
+#define        EI_PAD          8
+
+#define        ELFMAG0         0x7f            /* EI_MAG */
+#define        ELFMAG1         'E'
+#define        ELFMAG2         'L'
+#define        ELFMAG3         'F'
+#define        ELFMAG          "\177ELF"
+#define        SELFMAG         4
+
+#define        ELFCLASSNONE    0               /* EI_CLASS */
+#define        ELFCLASS32      1
+#define        ELFCLASS64      2
+#define        ELFCLASSNUM     3
+
+#define ELFDATANONE    0               /* e_ident[EI_DATA] */
+#define ELFDATA2LSB    1
+#define ELFDATA2MSB    2
+
+#define EV_NONE                0               /* e_version, EI_VERSION */
+#define EV_CURRENT     1
+#define EV_NUM         2
+
+#define ELFOSABI_NONE  0
+#define ELFOSABI_LINUX 3
+
+#ifndef ELF_OSABI
+#define ELF_OSABI ELFOSABI_NONE
+#endif
+
+/*
+ * Notes used in ET_CORE. Architectures export some of the arch register sets
+ * using the corresponding note types via the PTRACE_GETREGSET and
+ * PTRACE_SETREGSET requests.
+ */
+#define NT_PRSTATUS    1
+#define NT_PRFPREG     2
+#define NT_PRPSINFO    3
+#define NT_TASKSTRUCT  4
+#define NT_AUXV                6
+/*
+ * Note to userspace developers: size of NT_SIGINFO note may increase
+ * in the future to accomodate more fields, don't assume it is fixed!
+ */
+#define NT_SIGINFO      0x53494749
+#define NT_FILE         0x46494c45
+#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */
+#define NT_PPC_VMX     0x100           /* PowerPC Altivec/VMX registers */
+#define NT_PPC_SPE     0x101           /* PowerPC SPE/EVR registers */
+#define NT_PPC_VSX     0x102           /* PowerPC VSX registers */
+#define NT_386_TLS     0x200           /* i386 TLS slots (struct user_desc) */
+#define NT_386_IOPERM  0x201           /* x86 io permission bitmap (1=deny) */
+#define NT_X86_XSTATE  0x202           /* x86 extended state using xsave */
+#define NT_S390_HIGH_GPRS      0x300   /* s390 upper register halves */
+#define NT_S390_TIMER  0x301           /* s390 timer register */
+#define NT_S390_TODCMP 0x302           /* s390 TOD clock comparator register */
+#define NT_S390_TODPREG        0x303           /* s390 TOD programmable register */
+#define NT_S390_CTRS   0x304           /* s390 control registers */
+#define NT_S390_PREFIX 0x305           /* s390 prefix register */
+#define NT_S390_LAST_BREAK     0x306   /* s390 breaking event address */
+#define NT_S390_SYSTEM_CALL    0x307   /* s390 system call restart data */
+#define NT_S390_TDB    0x308           /* s390 transaction diagnostic block */
+#define NT_S390_VXRS_LOW       0x309   /* s390 vector registers 0-15 upper half */
+#define NT_S390_VXRS_HIGH      0x30a   /* s390 vector registers 16-31 */
+#define NT_ARM_VFP     0x400           /* ARM VFP/NEON registers */
+#define NT_ARM_TLS     0x401           /* ARM TLS register */
+#define NT_ARM_HW_BREAK        0x402           /* ARM hardware breakpoint registers */
+#define NT_ARM_HW_WATCH        0x403           /* ARM hardware watchpoint registers */
+#define NT_ARM_SYSTEM_CALL     0x404   /* ARM system call number */
+#define NT_METAG_CBUF  0x500           /* Metag catch buffer registers */
+#define NT_METAG_RPIPE 0x501           /* Metag read pipeline state */
+#define NT_METAG_TLS   0x502           /* Metag TLS pointer */
+
+
+/* Note header in a PT_NOTE section */
+typedef struct elf32_note {
+  Elf32_Word   n_namesz;       /* Name size */
+  Elf32_Word   n_descsz;       /* Content size */
+  Elf32_Word   n_type;         /* Content type */
+} Elf32_Nhdr;
+
+/* Note header in a PT_NOTE section */
+typedef struct elf64_note {
+  Elf64_Word n_namesz; /* Name size */
+  Elf64_Word n_descsz; /* Content size */
+  Elf64_Word n_type;   /* Content type */
+} Elf64_Nhdr;
+
+#endif /* _LINUX_ELF_H */
diff --git a/lib/libdss-include/include/linux/elfcore.h b/lib/libdss-include/include/linux/elfcore.h
new file mode 100644 (file)
index 0000000..9dd784c
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef _LINUX_ELFCORE_H
+#define _LINUX_ELFCORE_H
+
+#include <linux/types.h>
+#include <linux/signal.h>
+#include <linux/time.h>
+#include <linux/ptrace.h>
+#include <linux/elf.h>
+#include <linux/fs.h>
+
+struct elf_siginfo
+{
+       int     si_signo;                       /* signal number */
+       int     si_code;                        /* extra code */
+       int     si_errno;                       /* errno */
+};
+
+
+typedef elf_greg_t greg_t;
+typedef elf_gregset_t gregset_t;
+typedef elf_fpregset_t fpregset_t;
+typedef elf_fpxregset_t fpxregset_t;
+#define NGREG ELF_NGREG
+
+/*
+ * Definitions to generate Intel SVR4-like core files.
+ * These mostly have the same names as the SVR4 types with "elf_"
+ * tacked on the front to prevent clashes with linux definitions,
+ * and the typedef forms have been avoided.  This is mostly like
+ * the SVR4 structure, but more Linuxy, with things that Linux does
+ * not support and which gdb doesn't really use excluded.
+ * Fields present but not used are marked with "XXX".
+ */
+struct elf_prstatus
+{
+#if 0
+       long    pr_flags;       /* XXX Process flags */
+       short   pr_why;         /* XXX Reason for process halt */
+       short   pr_what;        /* XXX More detailed reason */
+#endif
+       struct elf_siginfo pr_info;     /* Info associated with signal */
+       short   pr_cursig;              /* Current signal */
+       unsigned long pr_sigpend;       /* Set of pending signals */
+       unsigned long pr_sighold;       /* Set of held signals */
+#if 0
+       struct sigaltstack pr_altstack; /* Alternate stack info */
+       struct sigaction pr_action;     /* Signal action for current sig */
+#endif
+       pid_t   pr_pid;
+       pid_t   pr_ppid;
+       pid_t   pr_pgrp;
+       pid_t   pr_sid;
+       struct timeval pr_utime;        /* User time */
+       struct timeval pr_stime;        /* System time */
+       struct timeval pr_cutime;       /* Cumulative user time */
+       struct timeval pr_cstime;       /* Cumulative system time */
+#if 0
+       long    pr_instr;               /* Current instruction */
+#endif
+       elf_gregset_t pr_reg;   /* GP registers */
+#ifdef CONFIG_BINFMT_ELF_FDPIC
+       /* When using FDPIC, the loadmap addresses need to be communicated
+        * to GDB in order for GDB to do the necessary relocations.  The
+        * fields (below) used to communicate this information are placed
+        * immediately after ``pr_reg'', so that the loadmap addresses may
+        * be viewed as part of the register set if so desired.
+        */
+       unsigned long pr_exec_fdpic_loadmap;
+       unsigned long pr_interp_fdpic_loadmap;
+#endif
+       int pr_fpvalid;         /* True if math co-processor being used.  */
+};
+
+#define ELF_PRARGSZ    (80)    /* Number of chars for args */
+
+struct elf_prpsinfo
+{
+       char    pr_state;       /* numeric process state */
+       char    pr_sname;       /* char for pr_state */
+       char    pr_zomb;        /* zombie */
+       char    pr_nice;        /* nice val */
+       unsigned long pr_flag;  /* flags */
+       __kernel_uid_t  pr_uid;
+       __kernel_gid_t  pr_gid;
+       pid_t   pr_pid, pr_ppid, pr_pgrp, pr_sid;
+       /* Lots missing */
+       char    pr_fname[16];   /* filename of executable */
+       char    pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
+};
+
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+#define PRARGSZ ELF_PRARGSZ 
+
+
+#endif /* _LINUX_ELFCORE_H */
diff --git a/lib/libdss-include/include/linux/errno.h b/lib/libdss-include/include/linux/errno.h
new file mode 100644 (file)
index 0000000..70f2bd3
--- /dev/null
@@ -0,0 +1 @@
+#include <asm/errno.h>
diff --git a/lib/libdss-include/include/linux/errqueue.h b/lib/libdss-include/include/linux/errqueue.h
new file mode 100644 (file)
index 0000000..5575a6e
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _LINUX_ERRQUEUE_H
+#define _LINUX_ERRQUEUE_H
+
+#include <linux/types.h>
+
+struct sock_extended_err {
+       __u32   ee_errno;       
+       __u8    ee_origin;
+       __u8    ee_type;
+       __u8    ee_code;
+       __u8    ee_pad;
+       __u32   ee_info;
+       __u32   ee_data;
+};
+
+#define SO_EE_ORIGIN_NONE      0
+#define SO_EE_ORIGIN_LOCAL     1
+#define SO_EE_ORIGIN_ICMP      2
+#define SO_EE_ORIGIN_ICMP6     3
+#define SO_EE_ORIGIN_TXSTATUS  4
+#define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
+
+#define SO_EE_OFFENDER(ee)     ((struct sockaddr*)((ee)+1))
+
+/**
+ *     struct scm_timestamping - timestamps exposed through cmsg
+ *
+ *     The timestamping interfaces SO_TIMESTAMPING, MSG_TSTAMP_*
+ *     communicate network timestamps by passing this struct in a cmsg with
+ *     recvmsg(). See Documentation/networking/timestamping.txt for details.
+ */
+struct scm_timestamping {
+       struct timespec ts[3];
+};
+
+/* The type of scm_timestamping, passed in sock_extended_err ee_info.
+ * This defines the type of ts[0]. For SCM_TSTAMP_SND only, if ts[0]
+ * is zero, then this is a hardware timestamp and recorded in ts[2].
+ */
+enum {
+       SCM_TSTAMP_SND,         /* driver passed skb to NIC, or HW */
+       SCM_TSTAMP_SCHED,       /* data entered the packet scheduler */
+       SCM_TSTAMP_ACK,         /* data acknowledged by peer */
+};
+
+#endif /* _LINUX_ERRQUEUE_H */
diff --git a/lib/libdss-include/include/linux/ethtool.h b/lib/libdss-include/include/linux/ethtool.h
new file mode 100644 (file)
index 0000000..a19dc5c
--- /dev/null
@@ -0,0 +1,1441 @@
+/*
+ * ethtool.h: Defines for Linux ethtool.
+ *
+ * Copyright (C) 1998 David S. Miller (davem@redhat.com)
+ * Copyright 2001 Jeff Garzik <jgarzik@pobox.com>
+ * Portions Copyright 2001 Sun Microsystems (thockin@sun.com)
+ * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
+ *                                christopher.leech@intel.com,
+ *                                scott.feldman@intel.com)
+ * Portions Copyright (C) Sun Microsystems 2008
+ */
+
+#ifndef _LINUX_ETHTOOL_H
+#define _LINUX_ETHTOOL_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/* All structures exposed to userland should be defined such that they
+ * have the same layout for 32-bit and 64-bit userland.
+ */
+
+/**
+ * struct ethtool_cmd - link control and status
+ * @cmd: Command number = %ETHTOOL_GSET or %ETHTOOL_SSET
+ * @supported: Bitmask of %SUPPORTED_* flags for the link modes,
+ *     physical connectors and other link features for which the
+ *     interface supports autonegotiation or auto-detection.
+ *     Read-only.
+ * @advertising: Bitmask of %ADVERTISED_* flags for the link modes,
+ *     physical connectors and other link features that are
+ *     advertised through autonegotiation or enabled for
+ *     auto-detection.
+ * @speed: Low bits of the speed
+ * @duplex: Duplex mode; one of %DUPLEX_*
+ * @port: Physical connector type; one of %PORT_*
+ * @phy_address: MDIO address of PHY (transceiver); 0 or 255 if not
+ *     applicable.  For clause 45 PHYs this is the PRTAD.
+ * @transceiver: Historically used to distinguish different possible
+ *     PHY types, but not in a consistent way.  Deprecated.
+ * @autoneg: Enable/disable autonegotiation and auto-detection;
+ *     either %AUTONEG_DISABLE or %AUTONEG_ENABLE
+ * @mdio_support: Bitmask of %ETH_MDIO_SUPPORTS_* flags for the MDIO
+ *     protocols supported by the interface; 0 if unknown.
+ *     Read-only.
+ * @maxtxpkt: Historically used to report TX IRQ coalescing; now
+ *     obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
+ * @maxrxpkt: Historically used to report RX IRQ coalescing; now
+ *     obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
+ * @speed_hi: High bits of the speed
+ * @eth_tp_mdix: Ethernet twisted-pair MDI(-X) status; one of
+ *     %ETH_TP_MDI_*.  If the status is unknown or not applicable, the
+ *     value will be %ETH_TP_MDI_INVALID.  Read-only.
+ * @eth_tp_mdix_ctrl: Ethernet twisted pair MDI(-X) control; one of
+ *     %ETH_TP_MDI_*.  If MDI(-X) control is not implemented, reads
+ *     yield %ETH_TP_MDI_INVALID and writes may be ignored or rejected.
+ *     When written successfully, the link should be renegotiated if
+ *     necessary.
+ * @lp_advertising: Bitmask of %ADVERTISED_* flags for the link modes
+ *     and other link features that the link partner advertised
+ *     through autonegotiation; 0 if unknown or not applicable.
+ *     Read-only.
+ *
+ * The link speed in Mbps is split between @speed and @speed_hi.  Use
+ * the ethtool_cmd_speed() and ethtool_cmd_speed_set() functions to
+ * access it.
+ *
+ * If autonegotiation is disabled, the speed and @duplex represent the
+ * fixed link mode and are writable if the driver supports multiple
+ * link modes.  If it is enabled then they are read-only; if the link
+ * is up they represent the negotiated link mode; if the link is down,
+ * the speed is 0, %SPEED_UNKNOWN or the highest enabled speed and
+ * @duplex is %DUPLEX_UNKNOWN or the best enabled duplex mode.
+ *
+ * Some hardware interfaces may have multiple PHYs and/or physical
+ * connectors fitted or do not allow the driver to detect which are
+ * fitted.  For these interfaces @port and/or @phy_address may be
+ * writable, possibly dependent on @autoneg being %AUTONEG_DISABLE.
+ * Otherwise, attempts to write different values may be ignored or
+ * rejected.
+ *
+ * Users should assume that all fields not marked read-only are
+ * writable and subject to validation by the driver.  They should use
+ * %ETHTOOL_GSET to get the current values before making specific
+ * changes and then applying them with %ETHTOOL_SSET.
+ *
+ * Drivers that implement set_settings() should validate all fields
+ * other than @cmd that are not described as read-only or deprecated,
+ * and must ignore all fields described as read-only.
+ *
+ * Deprecated fields should be ignored by both users and drivers.
+ */
+struct ethtool_cmd {
+       __u32   cmd;
+       __u32   supported;
+       __u32   advertising;
+       __u16   speed;
+       __u8    duplex;
+       __u8    port;
+       __u8    phy_address;
+       __u8    transceiver;
+       __u8    autoneg;
+       __u8    mdio_support;
+       __u32   maxtxpkt;
+       __u32   maxrxpkt;
+       __u16   speed_hi;
+       __u8    eth_tp_mdix;
+       __u8    eth_tp_mdix_ctrl;
+       __u32   lp_advertising;
+       __u32   reserved[2];
+};
+
+static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+                                        __u32 speed)
+{
+
+       ep->speed = (__u16)speed;
+       ep->speed_hi = (__u16)(speed >> 16);
+}
+
+static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
+{
+       return (ep->speed_hi << 16) | ep->speed;
+}
+
+/* Device supports clause 22 register access to PHY or peripherals
+ * using the interface defined in <linux/mii.h>.  This should not be
+ * set if there are known to be no such peripherals present or if
+ * the driver only emulates clause 22 registers for compatibility.
+ */
+#define ETH_MDIO_SUPPORTS_C22  1
+
+/* Device supports clause 45 register access to PHY or peripherals
+ * using the interface defined in <linux/mii.h> and <linux/mdio.h>.
+ * This should not be set if there are known to be no such peripherals
+ * present.
+ */
+#define ETH_MDIO_SUPPORTS_C45  2
+
+#define ETHTOOL_FWVERS_LEN     32
+#define ETHTOOL_BUSINFO_LEN    32
+#define ETHTOOL_EROMVERS_LEN   32
+
+/**
+ * struct ethtool_drvinfo - general driver and device information
+ * @cmd: Command number = %ETHTOOL_GDRVINFO
+ * @driver: Driver short name.  This should normally match the name
+ *     in its bus driver structure (e.g. pci_driver::name).  Must
+ *     not be an empty string.
+ * @version: Driver version string; may be an empty string
+ * @fw_version: Firmware version string; may be an empty string
+ * @erom_version: Expansion ROM version string; may be an empty string
+ * @bus_info: Device bus address.  This should match the dev_name()
+ *     string for the underlying bus device, if there is one.  May be
+ *     an empty string.
+ * @n_priv_flags: Number of flags valid for %ETHTOOL_GPFLAGS and
+ *     %ETHTOOL_SPFLAGS commands; also the number of strings in the
+ *     %ETH_SS_PRIV_FLAGS set
+ * @n_stats: Number of u64 statistics returned by the %ETHTOOL_GSTATS
+ *     command; also the number of strings in the %ETH_SS_STATS set
+ * @testinfo_len: Number of results returned by the %ETHTOOL_TEST
+ *     command; also the number of strings in the %ETH_SS_TEST set
+ * @eedump_len: Size of EEPROM accessible through the %ETHTOOL_GEEPROM
+ *     and %ETHTOOL_SEEPROM commands, in bytes
+ * @regdump_len: Size of register dump returned by the %ETHTOOL_GREGS
+ *     command, in bytes
+ *
+ * Users can use the %ETHTOOL_GSSET_INFO command to get the number of
+ * strings in any string set (from Linux 2.6.34).
+ *
+ * Drivers should set at most @driver, @version, @fw_version and
+ * @bus_info in their get_drvinfo() implementation.  The ethtool
+ * core fills in the other fields using other driver operations.
+ */
+struct ethtool_drvinfo {
+       __u32   cmd;
+       char    driver[32];
+       char    version[32];
+       char    fw_version[ETHTOOL_FWVERS_LEN];
+       char    bus_info[ETHTOOL_BUSINFO_LEN];
+       char    erom_version[ETHTOOL_EROMVERS_LEN];
+       char    reserved2[12];
+       __u32   n_priv_flags;
+       __u32   n_stats;
+       __u32   testinfo_len;
+       __u32   eedump_len;
+       __u32   regdump_len;
+};
+
+#define SOPASS_MAX     6
+
+/**
+ * struct ethtool_wolinfo - Wake-On-Lan configuration
+ * @cmd: Command number = %ETHTOOL_GWOL or %ETHTOOL_SWOL
+ * @supported: Bitmask of %WAKE_* flags for supported Wake-On-Lan modes.
+ *     Read-only.
+ * @wolopts: Bitmask of %WAKE_* flags for enabled Wake-On-Lan modes.
+ * @sopass: SecureOn(tm) password; meaningful only if %WAKE_MAGICSECURE
+ *     is set in @wolopts.
+ */
+struct ethtool_wolinfo {
+       __u32   cmd;
+       __u32   supported;
+       __u32   wolopts;
+       __u8    sopass[SOPASS_MAX];
+};
+
+/* for passing single values */
+struct ethtool_value {
+       __u32   cmd;
+       __u32   data;
+};
+
+enum tunable_id {
+       ETHTOOL_ID_UNSPEC,
+       ETHTOOL_RX_COPYBREAK,
+       ETHTOOL_TX_COPYBREAK,
+       /*
+        * Add your fresh new tubale attribute above and remember to update
+        * tunable_strings[] in net/core/ethtool.c
+        */
+       __ETHTOOL_TUNABLE_COUNT,
+};
+
+enum tunable_type_id {
+       ETHTOOL_TUNABLE_UNSPEC,
+       ETHTOOL_TUNABLE_U8,
+       ETHTOOL_TUNABLE_U16,
+       ETHTOOL_TUNABLE_U32,
+       ETHTOOL_TUNABLE_U64,
+       ETHTOOL_TUNABLE_STRING,
+       ETHTOOL_TUNABLE_S8,
+       ETHTOOL_TUNABLE_S16,
+       ETHTOOL_TUNABLE_S32,
+       ETHTOOL_TUNABLE_S64,
+};
+
+struct ethtool_tunable {
+       __u32   cmd;
+       __u32   id;
+       __u32   type_id;
+       __u32   len;
+       void    *data[0];
+};
+
+/**
+ * struct ethtool_regs - hardware register dump
+ * @cmd: Command number = %ETHTOOL_GREGS
+ * @version: Dump format version.  This is driver-specific and may
+ *     distinguish different chips/revisions.  Drivers must use new
+ *     version numbers whenever the dump format changes in an
+ *     incompatible way.
+ * @len: On entry, the real length of @data.  On return, the number of
+ *     bytes used.
+ * @data: Buffer for the register dump
+ *
+ * Users should use %ETHTOOL_GDRVINFO to find the maximum length of
+ * a register dump for the interface.  They must allocate the buffer
+ * immediately following this structure.
+ */
+struct ethtool_regs {
+       __u32   cmd;
+       __u32   version;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_eeprom - EEPROM dump
+ * @cmd: Command number = %ETHTOOL_GEEPROM, %ETHTOOL_GMODULEEEPROM or
+ *     %ETHTOOL_SEEPROM
+ * @magic: A 'magic cookie' value to guard against accidental changes.
+ *     The value passed in to %ETHTOOL_SEEPROM must match the value
+ *     returned by %ETHTOOL_GEEPROM for the same device.  This is
+ *     unused when @cmd is %ETHTOOL_GMODULEEEPROM.
+ * @offset: Offset within the EEPROM to begin reading/writing, in bytes
+ * @len: On entry, number of bytes to read/write.  On successful
+ *     return, number of bytes actually read/written.  In case of
+ *     error, this may indicate at what point the error occurred.
+ * @data: Buffer to read/write from
+ *
+ * Users may use %ETHTOOL_GDRVINFO or %ETHTOOL_GMODULEINFO to find
+ * the length of an on-board or module EEPROM, respectively.  They
+ * must allocate the buffer immediately following this structure.
+ */
+struct ethtool_eeprom {
+       __u32   cmd;
+       __u32   magic;
+       __u32   offset;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_eee - Energy Efficient Ethernet information
+ * @cmd: ETHTOOL_{G,S}EEE
+ * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations
+ *     for which there is EEE support.
+ * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations
+ *     advertised as eee capable.
+ * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex
+ *     combinations advertised by the link partner as eee capable.
+ * @eee_active: Result of the eee auto negotiation.
+ * @eee_enabled: EEE configured mode (enabled/disabled).
+ * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given
+ *     that eee was negotiated.
+ * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
+ *     its tx lpi (after reaching 'idle' state). Effective only when eee
+ *     was negotiated and tx_lpi_enabled was set.
+ */
+struct ethtool_eee {
+       __u32   cmd;
+       __u32   supported;
+       __u32   advertised;
+       __u32   lp_advertised;
+       __u32   eee_active;
+       __u32   eee_enabled;
+       __u32   tx_lpi_enabled;
+       __u32   tx_lpi_timer;
+       __u32   reserved[2];
+};
+
+/**
+ * struct ethtool_modinfo - plugin module eeprom information
+ * @cmd: %ETHTOOL_GMODULEINFO
+ * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx
+ * @eeprom_len: Length of the eeprom
+ *
+ * This structure is used to return the information to
+ * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM.
+ * The type code indicates the eeprom data format
+ */
+struct ethtool_modinfo {
+       __u32   cmd;
+       __u32   type;
+       __u32   eeprom_len;
+       __u32   reserved[8];
+};
+
+/**
+ * struct ethtool_coalesce - coalescing parameters for IRQs and stats updates
+ * @cmd: ETHTOOL_{G,S}COALESCE
+ * @rx_coalesce_usecs: How many usecs to delay an RX interrupt after
+ *     a packet arrives.
+ * @rx_max_coalesced_frames: Maximum number of packets to receive
+ *     before an RX interrupt.
+ * @rx_coalesce_usecs_irq: Same as @rx_coalesce_usecs, except that
+ *     this value applies while an IRQ is being serviced by the host.
+ * @rx_max_coalesced_frames_irq: Same as @rx_max_coalesced_frames,
+ *     except that this value applies while an IRQ is being serviced
+ *     by the host.
+ * @tx_coalesce_usecs: How many usecs to delay a TX interrupt after
+ *     a packet is sent.
+ * @tx_max_coalesced_frames: Maximum number of packets to be sent
+ *     before a TX interrupt.
+ * @tx_coalesce_usecs_irq: Same as @tx_coalesce_usecs, except that
+ *     this value applies while an IRQ is being serviced by the host.
+ * @tx_max_coalesced_frames_irq: Same as @tx_max_coalesced_frames,
+ *     except that this value applies while an IRQ is being serviced
+ *     by the host.
+ * @stats_block_coalesce_usecs: How many usecs to delay in-memory
+ *     statistics block updates.  Some drivers do not have an
+ *     in-memory statistic block, and in such cases this value is
+ *     ignored.  This value must not be zero.
+ * @use_adaptive_rx_coalesce: Enable adaptive RX coalescing.
+ * @use_adaptive_tx_coalesce: Enable adaptive TX coalescing.
+ * @pkt_rate_low: Threshold for low packet rate (packets per second).
+ * @rx_coalesce_usecs_low: How many usecs to delay an RX interrupt after
+ *     a packet arrives, when the packet rate is below @pkt_rate_low.
+ * @rx_max_coalesced_frames_low: Maximum number of packets to be received
+ *     before an RX interrupt, when the packet rate is below @pkt_rate_low.
+ * @tx_coalesce_usecs_low: How many usecs to delay a TX interrupt after
+ *     a packet is sent, when the packet rate is below @pkt_rate_low.
+ * @tx_max_coalesced_frames_low: Maximum nuumber of packets to be sent before
+ *     a TX interrupt, when the packet rate is below @pkt_rate_low.
+ * @pkt_rate_high: Threshold for high packet rate (packets per second).
+ * @rx_coalesce_usecs_high: How many usecs to delay an RX interrupt after
+ *     a packet arrives, when the packet rate is above @pkt_rate_high.
+ * @rx_max_coalesced_frames_high: Maximum number of packets to be received
+ *     before an RX interrupt, when the packet rate is above @pkt_rate_high.
+ * @tx_coalesce_usecs_high: How many usecs to delay a TX interrupt after
+ *     a packet is sent, when the packet rate is above @pkt_rate_high.
+ * @tx_max_coalesced_frames_high: Maximum number of packets to be sent before
+ *     a TX interrupt, when the packet rate is above @pkt_rate_high.
+ * @rate_sample_interval: How often to do adaptive coalescing packet rate
+ *     sampling, measured in seconds.  Must not be zero.
+ *
+ * Each pair of (usecs, max_frames) fields specifies that interrupts
+ * should be coalesced until
+ *     (usecs > 0 && time_since_first_completion >= usecs) ||
+ *     (max_frames > 0 && completed_frames >= max_frames)
+ *
+ * It is illegal to set both usecs and max_frames to zero as this
+ * would cause interrupts to never be generated.  To disable
+ * coalescing, set usecs = 0 and max_frames = 1.
+ *
+ * Some implementations ignore the value of max_frames and use the
+ * condition time_since_first_completion >= usecs
+ *
+ * This is deprecated.  Drivers for hardware that does not support
+ * counting completions should validate that max_frames == !rx_usecs.
+ *
+ * Adaptive RX/TX coalescing is an algorithm implemented by some
+ * drivers to improve latency under low packet rates and improve
+ * throughput under high packet rates.  Some drivers only implement
+ * one of RX or TX adaptive coalescing.  Anything not implemented by
+ * the driver causes these values to be silently ignored.
+ *
+ * When the packet rate is below @pkt_rate_high but above
+ * @pkt_rate_low (both measured in packets per second) the
+ * normal {rx,tx}_* coalescing parameters are used.
+ */
+struct ethtool_coalesce {
+       __u32   cmd;
+       __u32   rx_coalesce_usecs;
+       __u32   rx_max_coalesced_frames;
+       __u32   rx_coalesce_usecs_irq;
+       __u32   rx_max_coalesced_frames_irq;
+       __u32   tx_coalesce_usecs;
+       __u32   tx_max_coalesced_frames;
+       __u32   tx_coalesce_usecs_irq;
+       __u32   tx_max_coalesced_frames_irq;
+       __u32   stats_block_coalesce_usecs;
+       __u32   use_adaptive_rx_coalesce;
+       __u32   use_adaptive_tx_coalesce;
+       __u32   pkt_rate_low;
+       __u32   rx_coalesce_usecs_low;
+       __u32   rx_max_coalesced_frames_low;
+       __u32   tx_coalesce_usecs_low;
+       __u32   tx_max_coalesced_frames_low;
+       __u32   pkt_rate_high;
+       __u32   rx_coalesce_usecs_high;
+       __u32   rx_max_coalesced_frames_high;
+       __u32   tx_coalesce_usecs_high;
+       __u32   tx_max_coalesced_frames_high;
+       __u32   rate_sample_interval;
+};
+
+/**
+ * struct ethtool_ringparam - RX/TX ring parameters
+ * @cmd: Command number = %ETHTOOL_GRINGPARAM or %ETHTOOL_SRINGPARAM
+ * @rx_max_pending: Maximum supported number of pending entries per
+ *     RX ring.  Read-only.
+ * @rx_mini_max_pending: Maximum supported number of pending entries
+ *     per RX mini ring.  Read-only.
+ * @rx_jumbo_max_pending: Maximum supported number of pending entries
+ *     per RX jumbo ring.  Read-only.
+ * @tx_max_pending: Maximum supported number of pending entries per
+ *     TX ring.  Read-only.
+ * @rx_pending: Current maximum number of pending entries per RX ring
+ * @rx_mini_pending: Current maximum number of pending entries per RX
+ *     mini ring
+ * @rx_jumbo_pending: Current maximum number of pending entries per RX
+ *     jumbo ring
+ * @tx_pending: Current maximum supported number of pending entries
+ *     per TX ring
+ *
+ * If the interface does not have separate RX mini and/or jumbo rings,
+ * @rx_mini_max_pending and/or @rx_jumbo_max_pending will be 0.
+ *
+ * There may also be driver-dependent minimum values for the number
+ * of entries per ring.
+ */
+struct ethtool_ringparam {
+       __u32   cmd;
+       __u32   rx_max_pending;
+       __u32   rx_mini_max_pending;
+       __u32   rx_jumbo_max_pending;
+       __u32   tx_max_pending;
+       __u32   rx_pending;
+       __u32   rx_mini_pending;
+       __u32   rx_jumbo_pending;
+       __u32   tx_pending;
+};
+
+/**
+ * struct ethtool_channels - configuring number of network channel
+ * @cmd: ETHTOOL_{G,S}CHANNELS
+ * @max_rx: Read only. Maximum number of receive channel the driver support.
+ * @max_tx: Read only. Maximum number of transmit channel the driver support.
+ * @max_other: Read only. Maximum number of other channel the driver support.
+ * @max_combined: Read only. Maximum number of combined channel the driver
+ *     support. Set of queues RX, TX or other.
+ * @rx_count: Valid values are in the range 1 to the max_rx.
+ * @tx_count: Valid values are in the range 1 to the max_tx.
+ * @other_count: Valid values are in the range 1 to the max_other.
+ * @combined_count: Valid values are in the range 1 to the max_combined.
+ *
+ * This can be used to configure RX, TX and other channels.
+ */
+
+struct ethtool_channels {
+       __u32   cmd;
+       __u32   max_rx;
+       __u32   max_tx;
+       __u32   max_other;
+       __u32   max_combined;
+       __u32   rx_count;
+       __u32   tx_count;
+       __u32   other_count;
+       __u32   combined_count;
+};
+
+/**
+ * struct ethtool_pauseparam - Ethernet pause (flow control) parameters
+ * @cmd: Command number = %ETHTOOL_GPAUSEPARAM or %ETHTOOL_SPAUSEPARAM
+ * @autoneg: Flag to enable autonegotiation of pause frame use
+ * @rx_pause: Flag to enable reception of pause frames
+ * @tx_pause: Flag to enable transmission of pause frames
+ *
+ * Drivers should reject a non-zero setting of @autoneg when
+ * autoneogotiation is disabled (or not supported) for the link.
+ *
+ * If the link is autonegotiated, drivers should use
+ * mii_advertise_flowctrl() or similar code to set the advertised
+ * pause frame capabilities based on the @rx_pause and @tx_pause flags,
+ * even if @autoneg is zero.  They should also allow the advertised
+ * pause frame capabilities to be controlled directly through the
+ * advertising field of &struct ethtool_cmd.
+ *
+ * If @autoneg is non-zero, the MAC is configured to send and/or
+ * receive pause frames according to the result of autonegotiation.
+ * Otherwise, it is configured directly based on the @rx_pause and
+ * @tx_pause flags.
+ */
+struct ethtool_pauseparam {
+       __u32   cmd;
+       __u32   autoneg;
+       __u32   rx_pause;
+       __u32   tx_pause;
+};
+
+#define ETH_GSTRING_LEN                32
+
+/**
+ * enum ethtool_stringset - string set ID
+ * @ETH_SS_TEST: Self-test result names, for use with %ETHTOOL_TEST
+ * @ETH_SS_STATS: Statistic names, for use with %ETHTOOL_GSTATS
+ * @ETH_SS_PRIV_FLAGS: Driver private flag names, for use with
+ *     %ETHTOOL_GPFLAGS and %ETHTOOL_SPFLAGS
+ * @ETH_SS_NTUPLE_FILTERS: Previously used with %ETHTOOL_GRXNTUPLE;
+ *     now deprecated
+ * @ETH_SS_FEATURES: Device feature names
+ * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
+ */
+enum ethtool_stringset {
+       ETH_SS_TEST             = 0,
+       ETH_SS_STATS,
+       ETH_SS_PRIV_FLAGS,
+       ETH_SS_NTUPLE_FILTERS,
+       ETH_SS_FEATURES,
+       ETH_SS_RSS_HASH_FUNCS,
+       ETH_SS_TUNABLES,
+};
+
+/**
+ * struct ethtool_gstrings - string set for data tagging
+ * @cmd: Command number = %ETHTOOL_GSTRINGS
+ * @string_set: String set ID; one of &enum ethtool_stringset
+ * @len: On return, the number of strings in the string set
+ * @data: Buffer for strings.  Each string is null-padded to a size of
+ *     %ETH_GSTRING_LEN.
+ *
+ * Users must use %ETHTOOL_GSSET_INFO to find the number of strings in
+ * the string set.  They must allocate a buffer of the appropriate
+ * size immediately following this structure.
+ */
+struct ethtool_gstrings {
+       __u32   cmd;
+       __u32   string_set;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_sset_info - string set information
+ * @cmd: Command number = %ETHTOOL_GSSET_INFO
+ * @sset_mask: On entry, a bitmask of string sets to query, with bits
+ *     numbered according to &enum ethtool_stringset.  On return, a
+ *     bitmask of those string sets queried that are supported.
+ * @data: Buffer for string set sizes.  On return, this contains the
+ *     size of each string set that was queried and supported, in
+ *     order of ID.
+ *
+ * Example: The user passes in @sset_mask = 0x7 (sets 0, 1, 2) and on
+ * return @sset_mask == 0x6 (sets 1, 2).  Then @data[0] contains the
+ * size of set 1 and @data[1] contains the size of set 2.
+ *
+ * Users must allocate a buffer of the appropriate size (4 * number of
+ * sets queried) immediately following this structure.
+ */
+struct ethtool_sset_info {
+       __u32   cmd;
+       __u32   reserved;
+       __u64   sset_mask;
+       __u32   data[0];
+};
+
+/**
+ * enum ethtool_test_flags - flags definition of ethtool_test
+ * @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise
+ *     only online tests.
+ * @ETH_TEST_FL_FAILED: Driver set this flag if test fails.
+ * @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback
+ *     test.
+ * @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test
+ */
+
+enum ethtool_test_flags {
+       ETH_TEST_FL_OFFLINE     = (1 << 0),
+       ETH_TEST_FL_FAILED      = (1 << 1),
+       ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
+       ETH_TEST_FL_EXTERNAL_LB_DONE    = (1 << 3),
+};
+
+/**
+ * struct ethtool_test - device self-test invocation
+ * @cmd: Command number = %ETHTOOL_TEST
+ * @flags: A bitmask of flags from &enum ethtool_test_flags.  Some
+ *     flags may be set by the user on entry; others may be set by
+ *     the driver on return.
+ * @len: On return, the number of test results
+ * @data: Array of test results
+ *
+ * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
+ * number of test results that will be returned.  They must allocate a
+ * buffer of the appropriate size (8 * number of results) immediately
+ * following this structure.
+ */
+struct ethtool_test {
+       __u32   cmd;
+       __u32   flags;
+       __u32   reserved;
+       __u32   len;
+       __u64   data[0];
+};
+
+/**
+ * struct ethtool_stats - device-specific statistics
+ * @cmd: Command number = %ETHTOOL_GSTATS
+ * @n_stats: On return, the number of statistics
+ * @data: Array of statistics
+ *
+ * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
+ * number of statistics that will be returned.  They must allocate a
+ * buffer of the appropriate size (8 * number of statistics)
+ * immediately following this structure.
+ */
+struct ethtool_stats {
+       __u32   cmd;
+       __u32   n_stats;
+       __u64   data[0];
+};
+
+/**
+ * struct ethtool_perm_addr - permanent hardware address
+ * @cmd: Command number = %ETHTOOL_GPERMADDR
+ * @size: On entry, the size of the buffer.  On return, the size of the
+ *     address.  The command fails if the buffer is too small.
+ * @data: Buffer for the address
+ *
+ * Users must allocate the buffer immediately following this structure.
+ * A buffer size of %MAX_ADDR_LEN should be sufficient for any address
+ * type.
+ */
+struct ethtool_perm_addr {
+       __u32   cmd;
+       __u32   size;
+       __u8    data[0];
+};
+
+/* boolean flags controlling per-interface behavior characteristics.
+ * When reading, the flag indicates whether or not a certain behavior
+ * is enabled/present.  When writing, the flag indicates whether
+ * or not the driver should turn on (set) or off (clear) a behavior.
+ *
+ * Some behaviors may read-only (unconditionally absent or present).
+ * If such is the case, return EINVAL in the set-flags operation if the
+ * flag differs from the read-only value.
+ */
+enum ethtool_flags {
+       ETH_FLAG_TXVLAN         = (1 << 7),     /* TX VLAN offload enabled */
+       ETH_FLAG_RXVLAN         = (1 << 8),     /* RX VLAN offload enabled */
+       ETH_FLAG_LRO            = (1 << 15),    /* LRO is enabled */
+       ETH_FLAG_NTUPLE         = (1 << 27),    /* N-tuple filters enabled */
+       ETH_FLAG_RXHASH         = (1 << 28),
+};
+
+/* The following structures are for supporting RX network flow
+ * classification and RX n-tuple configuration. Note, all multibyte
+ * fields, e.g., ip4src, ip4dst, psrc, pdst, spi, etc. are expected to
+ * be in network byte order.
+ */
+
+/**
+ * struct ethtool_tcpip4_spec - flow specification for TCP/IPv4 etc.
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @psrc: Source port
+ * @pdst: Destination port
+ * @tos: Type-of-service
+ *
+ * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow.
+ */
+struct ethtool_tcpip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be16  psrc;
+       __be16  pdst;
+       __u8    tos;
+};
+
+/**
+ * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @spi: Security parameters index
+ * @tos: Type-of-service
+ *
+ * This can be used to specify an IPsec transport or tunnel over IPv4.
+ */
+struct ethtool_ah_espip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be32  spi;
+       __u8    tos;
+};
+
+#define        ETH_RX_NFC_IP4  1
+
+/**
+ * struct ethtool_usrip4_spec - general flow specification for IPv4
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @l4_4_bytes: First 4 bytes of transport (layer 4) header
+ * @tos: Type-of-service
+ * @ip_ver: Value must be %ETH_RX_NFC_IP4; mask must be 0
+ * @proto: Transport protocol number; mask must be 0
+ */
+struct ethtool_usrip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be32  l4_4_bytes;
+       __u8    tos;
+       __u8    ip_ver;
+       __u8    proto;
+};
+
+union ethtool_flow_union {
+       struct ethtool_tcpip4_spec              tcp_ip4_spec;
+       struct ethtool_tcpip4_spec              udp_ip4_spec;
+       struct ethtool_tcpip4_spec              sctp_ip4_spec;
+       struct ethtool_ah_espip4_spec           ah_ip4_spec;
+       struct ethtool_ah_espip4_spec           esp_ip4_spec;
+       struct ethtool_usrip4_spec              usr_ip4_spec;
+       struct ethhdr                           ether_spec;
+       __u8                                    hdata[52];
+};
+
+/**
+ * struct ethtool_flow_ext - additional RX flow fields
+ * @h_dest: destination MAC address
+ * @vlan_etype: VLAN EtherType
+ * @vlan_tci: VLAN tag control information
+ * @data: user defined data
+ *
+ * Note, @vlan_etype, @vlan_tci, and @data are only valid if %FLOW_EXT
+ * is set in &struct ethtool_rx_flow_spec @flow_type.
+ * @h_dest is valid if %FLOW_MAC_EXT is set.
+ */
+struct ethtool_flow_ext {
+       __u8            padding[2];
+       unsigned char   h_dest[ETH_ALEN];
+       __be16          vlan_etype;
+       __be16          vlan_tci;
+       __be32          data[2];
+};
+
+/**
+ * struct ethtool_rx_flow_spec - classification rule for RX flows
+ * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
+ * @h_u: Flow fields to match (dependent on @flow_type)
+ * @h_ext: Additional fields to match
+ * @m_u: Masks for flow field bits to be matched
+ * @m_ext: Masks for additional field bits to be matched
+ *     Note, all additional fields must be ignored unless @flow_type
+ *     includes the %FLOW_EXT or %FLOW_MAC_EXT flag
+ *     (see &struct ethtool_flow_ext description).
+ * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC
+ *     if packets should be discarded
+ * @location: Location of rule in the table.  Locations must be
+ *     numbered such that a flow matching multiple rules will be
+ *     classified according to the first (lowest numbered) rule.
+ */
+struct ethtool_rx_flow_spec {
+       __u32           flow_type;
+       union ethtool_flow_union h_u;
+       struct ethtool_flow_ext h_ext;
+       union ethtool_flow_union m_u;
+       struct ethtool_flow_ext m_ext;
+       __u64           ring_cookie;
+       __u32           location;
+};
+
+/* How rings are layed out when accessing virtual functions or
+ * offloaded queues is device specific. To allow users to do flow
+ * steering and specify these queues the ring cookie is partitioned
+ * into a 32bit queue index with an 8 bit virtual function id.
+ * This also leaves the 3bytes for further specifiers. It is possible
+ * future devices may support more than 256 virtual functions if
+ * devices start supporting PCIe w/ARI. However at the moment I
+ * do not know of any devices that support this so I do not reserve
+ * space for this at this time. If a future patch consumes the next
+ * byte it should be aware of this possiblity.
+ */
+#define ETHTOOL_RX_FLOW_SPEC_RING      0x00000000FFFFFFFFLL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF   0x000000FF00000000LL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
+static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
+{
+       return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie;
+};
+
+static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
+{
+       return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >>
+                               ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
+};
+
+/**
+ * struct ethtool_rxnfc - command to get or set RX flow classification rules
+ * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH,
+ *     %ETHTOOL_GRXRINGS, %ETHTOOL_GRXCLSRLCNT, %ETHTOOL_GRXCLSRULE,
+ *     %ETHTOOL_GRXCLSRLALL, %ETHTOOL_SRXCLSRLDEL or %ETHTOOL_SRXCLSRLINS
+ * @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW
+ * @data: Command-dependent value
+ * @fs: Flow classification rule
+ * @rule_cnt: Number of rules to be affected
+ * @rule_locs: Array of used rule locations
+ *
+ * For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating
+ * the fields included in the flow hash, e.g. %RXH_IP_SRC.  The following
+ * structure fields must not be used.
+ *
+ * For %ETHTOOL_GRXRINGS, @data is set to the number of RX rings/queues
+ * on return.
+ *
+ * For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined
+ * rules on return.  If @data is non-zero on return then it is the
+ * size of the rule table, plus the flag %RX_CLS_LOC_SPECIAL if the
+ * driver supports any special location values.  If that flag is not
+ * set in @data then special location values should not be used.
+ *
+ * For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an
+ * existing rule on entry and @fs contains the rule on return.
+ *
+ * For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the
+ * user buffer for @rule_locs on entry.  On return, @data is the size
+ * of the rule table, @rule_cnt is the number of defined rules, and
+ * @rule_locs contains the locations of the defined rules.  Drivers
+ * must use the second parameter to get_rxnfc() instead of @rule_locs.
+ *
+ * For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update.
+ * @fs.@location either specifies the location to use or is a special
+ * location value with %RX_CLS_LOC_SPECIAL flag set.  On return,
+ * @fs.@location is the actual rule location.
+ *
+ * For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an
+ * existing rule on entry.
+ *
+ * A driver supporting the special location values for
+ * %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused
+ * location, and may remove a rule at a later location (lower
+ * priority) that matches exactly the same set of flows.  The special
+ * values are %RX_CLS_LOC_ANY, selecting any location;
+ * %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum
+ * priority); and %RX_CLS_LOC_LAST, selecting the last suitable
+ * location (minimum priority).  Additional special values may be
+ * defined in future and drivers must return -%EINVAL for any
+ * unrecognised value.
+ */
+struct ethtool_rxnfc {
+       __u32                           cmd;
+       __u32                           flow_type;
+       __u64                           data;
+       struct ethtool_rx_flow_spec     fs;
+       __u32                           rule_cnt;
+       __u32                           rule_locs[0];
+};
+
+
+/**
+ * struct ethtool_rxfh_indir - command to get or set RX flow hash indirection
+ * @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR
+ * @size: On entry, the array size of the user buffer, which may be zero.
+ *     On return from %ETHTOOL_GRXFHINDIR, the array size of the hardware
+ *     indirection table.
+ * @ring_index: RX ring/queue index for each hash value
+ *
+ * For %ETHTOOL_GRXFHINDIR, a @size of zero means that only the size
+ * should be returned.  For %ETHTOOL_SRXFHINDIR, a @size of zero means
+ * the table should be reset to default values.  This last feature
+ * is not supported by the original implementations.
+ */
+struct ethtool_rxfh_indir {
+       __u32   cmd;
+       __u32   size;
+       __u32   ring_index[0];
+};
+
+/**
+ * struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key.
+ * @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH
+ * @rss_context: RSS context identifier.
+ * @indir_size: On entry, the array size of the user buffer for the
+ *     indirection table, which may be zero, or (for %ETHTOOL_SRSSH),
+ *     %ETH_RXFH_INDIR_NO_CHANGE.  On return from %ETHTOOL_GRSSH,
+ *     the array size of the hardware indirection table.
+ * @key_size: On entry, the array size of the user buffer for the hash key,
+ *     which may be zero.  On return from %ETHTOOL_GRSSH, the size of the
+ *     hardware hash key.
+ * @hfunc: Defines the current RSS hash function used by HW (or to be set to).
+ *     Valid values are one of the %ETH_RSS_HASH_*.
+ * @rsvd:      Reserved for future extensions.
+ * @rss_config: RX ring/queue index for each hash value i.e., indirection table
+ *     of @indir_size __u32 elements, followed by hash key of @key_size
+ *     bytes.
+ *
+ * For %ETHTOOL_GRSSH, a @indir_size and key_size of zero means that only the
+ * size should be returned.  For %ETHTOOL_SRSSH, an @indir_size of
+ * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested
+ * and a @indir_size of zero means the indir table should be reset to default
+ * values. An hfunc of zero means that hash function setting is not requested.
+ */
+struct ethtool_rxfh {
+       __u32   cmd;
+       __u32   rss_context;
+       __u32   indir_size;
+       __u32   key_size;
+       __u8    hfunc;
+       __u8    rsvd8[3];
+       __u32   rsvd32;
+       __u32   rss_config[0];
+};
+#define ETH_RXFH_INDIR_NO_CHANGE       0xffffffff
+
+/**
+ * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter
+ * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
+ * @h_u: Flow field values to match (dependent on @flow_type)
+ * @m_u: Masks for flow field value bits to be ignored
+ * @vlan_tag: VLAN tag to match
+ * @vlan_tag_mask: Mask for VLAN tag bits to be ignored
+ * @data: Driver-dependent data to match
+ * @data_mask: Mask for driver-dependent data bits to be ignored
+ * @action: RX ring/queue index to deliver to (non-negative) or other action
+ *     (negative, e.g. %ETHTOOL_RXNTUPLE_ACTION_DROP)
+ *
+ * For flow types %TCP_V4_FLOW, %UDP_V4_FLOW and %SCTP_V4_FLOW, where
+ * a field value and mask are both zero this is treated as if all mask
+ * bits are set i.e. the field is ignored.
+ */
+struct ethtool_rx_ntuple_flow_spec {
+       __u32            flow_type;
+       union {
+               struct ethtool_tcpip4_spec              tcp_ip4_spec;
+               struct ethtool_tcpip4_spec              udp_ip4_spec;
+               struct ethtool_tcpip4_spec              sctp_ip4_spec;
+               struct ethtool_ah_espip4_spec           ah_ip4_spec;
+               struct ethtool_ah_espip4_spec           esp_ip4_spec;
+               struct ethtool_usrip4_spec              usr_ip4_spec;
+               struct ethhdr                           ether_spec;
+               __u8                                    hdata[72];
+       } h_u, m_u;
+
+       __u16           vlan_tag;
+       __u16           vlan_tag_mask;
+       __u64           data;
+       __u64           data_mask;
+
+       __s32           action;
+#define ETHTOOL_RXNTUPLE_ACTION_DROP   (-1)    /* drop packet */
+#define ETHTOOL_RXNTUPLE_ACTION_CLEAR  (-2)    /* clear filter */
+};
+
+/**
+ * struct ethtool_rx_ntuple - command to set or clear RX flow filter
+ * @cmd: Command number - %ETHTOOL_SRXNTUPLE
+ * @fs: Flow filter specification
+ */
+struct ethtool_rx_ntuple {
+       __u32                                   cmd;
+       struct ethtool_rx_ntuple_flow_spec      fs;
+};
+
+#define ETHTOOL_FLASH_MAX_FILENAME     128
+enum ethtool_flash_op_type {
+       ETHTOOL_FLASH_ALL_REGIONS       = 0,
+};
+
+/* for passing firmware flashing related parameters */
+struct ethtool_flash {
+       __u32   cmd;
+       __u32   region;
+       char    data[ETHTOOL_FLASH_MAX_FILENAME];
+};
+
+/**
+ * struct ethtool_dump - used for retrieving, setting device dump
+ * @cmd: Command number - %ETHTOOL_GET_DUMP_FLAG, %ETHTOOL_GET_DUMP_DATA, or
+ *     %ETHTOOL_SET_DUMP
+ * @version: FW version of the dump, filled in by driver
+ * @flag: driver dependent flag for dump setting, filled in by driver during
+ *        get and filled in by ethtool for set operation.
+ *        flag must be initialized by macro ETH_FW_DUMP_DISABLE value when
+ *        firmware dump is disabled.
+ * @len: length of dump data, used as the length of the user buffer on entry to
+ *      %ETHTOOL_GET_DUMP_DATA and this is returned as dump length by driver
+ *      for %ETHTOOL_GET_DUMP_FLAG command
+ * @data: data collected for get dump data operation
+ */
+struct ethtool_dump {
+       __u32   cmd;
+       __u32   version;
+       __u32   flag;
+       __u32   len;
+       __u8    data[0];
+};
+
+#define ETH_FW_DUMP_DISABLE 0
+
+/* for returning and changing feature sets */
+
+/**
+ * struct ethtool_get_features_block - block with state of 32 features
+ * @available: mask of changeable features
+ * @requested: mask of features requested to be enabled if possible
+ * @active: mask of currently enabled features
+ * @never_changed: mask of features not changeable for any device
+ */
+struct ethtool_get_features_block {
+       __u32   available;
+       __u32   requested;
+       __u32   active;
+       __u32   never_changed;
+};
+
+/**
+ * struct ethtool_gfeatures - command to get state of device's features
+ * @cmd: command number = %ETHTOOL_GFEATURES
+ * @size: On entry, the number of elements in the features[] array;
+ *     on return, the number of elements in features[] needed to hold
+ *     all features
+ * @features: state of features
+ */
+struct ethtool_gfeatures {
+       __u32   cmd;
+       __u32   size;
+       struct ethtool_get_features_block features[0];
+};
+
+/**
+ * struct ethtool_set_features_block - block with request for 32 features
+ * @valid: mask of features to be changed
+ * @requested: values of features to be changed
+ */
+struct ethtool_set_features_block {
+       __u32   valid;
+       __u32   requested;
+};
+
+/**
+ * struct ethtool_sfeatures - command to request change in device's features
+ * @cmd: command number = %ETHTOOL_SFEATURES
+ * @size: array size of the features[] array
+ * @features: feature change masks
+ */
+struct ethtool_sfeatures {
+       __u32   cmd;
+       __u32   size;
+       struct ethtool_set_features_block features[0];
+};
+
+/**
+ * struct ethtool_ts_info - holds a device's timestamping and PHC association
+ * @cmd: command number = %ETHTOOL_GET_TS_INFO
+ * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags
+ * @phc_index: device index of the associated PHC, or -1 if there is none
+ * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values
+ * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values
+ *
+ * The bits in the 'tx_types' and 'rx_filters' fields correspond to
+ * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values,
+ * respectively.  For example, if the device supports HWTSTAMP_TX_ON,
+ * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set.
+ *
+ * Drivers should only report the filters they actually support without
+ * upscaling in the SIOCSHWTSTAMP ioctl. If the SIOCSHWSTAMP request for
+ * HWTSTAMP_FILTER_V1_SYNC is supported by HWTSTAMP_FILTER_V1_EVENT, then the
+ * driver should only report HWTSTAMP_FILTER_V1_EVENT in this op.
+ */
+struct ethtool_ts_info {
+       __u32   cmd;
+       __u32   so_timestamping;
+       __s32   phc_index;
+       __u32   tx_types;
+       __u32   tx_reserved[3];
+       __u32   rx_filters;
+       __u32   rx_reserved[3];
+};
+
+/*
+ * %ETHTOOL_SFEATURES changes features present in features[].valid to the
+ * values of corresponding bits in features[].requested. Bits in .requested
+ * not set in .valid or not changeable are ignored.
+ *
+ * Returns %EINVAL when .valid contains undefined or never-changeable bits
+ * or size is not equal to required number of features words (32-bit blocks).
+ * Returns >= 0 if request was completed; bits set in the value mean:
+ *   %ETHTOOL_F_UNSUPPORTED - there were bits set in .valid that are not
+ *     changeable (not present in %ETHTOOL_GFEATURES' features[].available)
+ *     those bits were ignored.
+ *   %ETHTOOL_F_WISH - some or all changes requested were recorded but the
+ *      resulting state of bits masked by .valid is not equal to .requested.
+ *      Probably there are other device-specific constraints on some features
+ *      in the set. When %ETHTOOL_F_UNSUPPORTED is set, .valid is considered
+ *      here as though ignored bits were cleared.
+ *   %ETHTOOL_F_COMPAT - some or all changes requested were made by calling
+ *      compatibility functions. Requested offload state cannot be properly
+ *      managed by kernel.
+ *
+ * Meaning of bits in the masks are obtained by %ETHTOOL_GSSET_INFO (number of
+ * bits in the arrays - always multiple of 32) and %ETHTOOL_GSTRINGS commands
+ * for ETH_SS_FEATURES string set. First entry in the table corresponds to least
+ * significant bit in features[0] fields. Empty strings mark undefined features.
+ */
+enum ethtool_sfeatures_retval_bits {
+       ETHTOOL_F_UNSUPPORTED__BIT,
+       ETHTOOL_F_WISH__BIT,
+       ETHTOOL_F_COMPAT__BIT,
+};
+
+#define ETHTOOL_F_UNSUPPORTED   (1 << ETHTOOL_F_UNSUPPORTED__BIT)
+#define ETHTOOL_F_WISH          (1 << ETHTOOL_F_WISH__BIT)
+#define ETHTOOL_F_COMPAT        (1 << ETHTOOL_F_COMPAT__BIT)
+
+
+/* CMDs currently supported */
+#define ETHTOOL_GSET           0x00000001 /* Get settings. */
+#define ETHTOOL_SSET           0x00000002 /* Set settings. */
+#define ETHTOOL_GDRVINFO       0x00000003 /* Get driver info. */
+#define ETHTOOL_GREGS          0x00000004 /* Get NIC registers. */
+#define ETHTOOL_GWOL           0x00000005 /* Get wake-on-lan options. */
+#define ETHTOOL_SWOL           0x00000006 /* Set wake-on-lan options. */
+#define ETHTOOL_GMSGLVL                0x00000007 /* Get driver message level */
+#define ETHTOOL_SMSGLVL                0x00000008 /* Set driver msg level. */
+#define ETHTOOL_NWAY_RST       0x00000009 /* Restart autonegotiation. */
+/* Get link status for host, i.e. whether the interface *and* the
+ * physical port (if there is one) are up (ethtool_value). */
+#define ETHTOOL_GLINK          0x0000000a
+#define ETHTOOL_GEEPROM                0x0000000b /* Get EEPROM data */
+#define ETHTOOL_SEEPROM                0x0000000c /* Set EEPROM data. */
+#define ETHTOOL_GCOALESCE      0x0000000e /* Get coalesce config */
+#define ETHTOOL_SCOALESCE      0x0000000f /* Set coalesce config. */
+#define ETHTOOL_GRINGPARAM     0x00000010 /* Get ring parameters */
+#define ETHTOOL_SRINGPARAM     0x00000011 /* Set ring parameters. */
+#define ETHTOOL_GPAUSEPARAM    0x00000012 /* Get pause parameters */
+#define ETHTOOL_SPAUSEPARAM    0x00000013 /* Set pause parameters. */
+#define ETHTOOL_GRXCSUM                0x00000014 /* Get RX hw csum enable (ethtool_value) */
+#define ETHTOOL_SRXCSUM                0x00000015 /* Set RX hw csum enable (ethtool_value) */
+#define ETHTOOL_GTXCSUM                0x00000016 /* Get TX hw csum enable (ethtool_value) */
+#define ETHTOOL_STXCSUM                0x00000017 /* Set TX hw csum enable (ethtool_value) */
+#define ETHTOOL_GSG            0x00000018 /* Get scatter-gather enable
+                                           * (ethtool_value) */
+#define ETHTOOL_SSG            0x00000019 /* Set scatter-gather enable
+                                           * (ethtool_value). */
+#define ETHTOOL_TEST           0x0000001a /* execute NIC self-test. */
+#define ETHTOOL_GSTRINGS       0x0000001b /* get specified string set */
+#define ETHTOOL_PHYS_ID                0x0000001c /* identify the NIC */
+#define ETHTOOL_GSTATS         0x0000001d /* get NIC-specific statistics */
+#define ETHTOOL_GTSO           0x0000001e /* Get TSO enable (ethtool_value) */
+#define ETHTOOL_STSO           0x0000001f /* Set TSO enable (ethtool_value) */
+#define ETHTOOL_GPERMADDR      0x00000020 /* Get permanent hardware address */
+#define ETHTOOL_GUFO           0x00000021 /* Get UFO enable (ethtool_value) */
+#define ETHTOOL_SUFO           0x00000022 /* Set UFO enable (ethtool_value) */
+#define ETHTOOL_GGSO           0x00000023 /* Get GSO enable (ethtool_value) */
+#define ETHTOOL_SGSO           0x00000024 /* Set GSO enable (ethtool_value) */
+#define ETHTOOL_GFLAGS         0x00000025 /* Get flags bitmap(ethtool_value) */
+#define ETHTOOL_SFLAGS         0x00000026 /* Set flags bitmap(ethtool_value) */
+#define ETHTOOL_GPFLAGS                0x00000027 /* Get driver-private flags bitmap */
+#define ETHTOOL_SPFLAGS                0x00000028 /* Set driver-private flags bitmap */
+
+#define ETHTOOL_GRXFH          0x00000029 /* Get RX flow hash configuration */
+#define ETHTOOL_SRXFH          0x0000002a /* Set RX flow hash configuration */
+#define ETHTOOL_GGRO           0x0000002b /* Get GRO enable (ethtool_value) */
+#define ETHTOOL_SGRO           0x0000002c /* Set GRO enable (ethtool_value) */
+#define ETHTOOL_GRXRINGS       0x0000002d /* Get RX rings available for LB */
+#define ETHTOOL_GRXCLSRLCNT    0x0000002e /* Get RX class rule count */
+#define ETHTOOL_GRXCLSRULE     0x0000002f /* Get RX classification rule */
+#define ETHTOOL_GRXCLSRLALL    0x00000030 /* Get all RX classification rule */
+#define ETHTOOL_SRXCLSRLDEL    0x00000031 /* Delete RX classification rule */
+#define ETHTOOL_SRXCLSRLINS    0x00000032 /* Insert RX classification rule */
+#define ETHTOOL_FLASHDEV       0x00000033 /* Flash firmware to device */
+#define ETHTOOL_RESET          0x00000034 /* Reset hardware */
+#define ETHTOOL_SRXNTUPLE      0x00000035 /* Add an n-tuple filter to device */
+#define ETHTOOL_GRXNTUPLE      0x00000036 /* deprecated */
+#define ETHTOOL_GSSET_INFO     0x00000037 /* Get string set info */
+#define ETHTOOL_GRXFHINDIR     0x00000038 /* Get RX flow hash indir'n table */
+#define ETHTOOL_SRXFHINDIR     0x00000039 /* Set RX flow hash indir'n table */
+
+#define ETHTOOL_GFEATURES      0x0000003a /* Get device offload settings */
+#define ETHTOOL_SFEATURES      0x0000003b /* Change device offload settings */
+#define ETHTOOL_GCHANNELS      0x0000003c /* Get no of channels */
+#define ETHTOOL_SCHANNELS      0x0000003d /* Set no of channels */
+#define ETHTOOL_SET_DUMP       0x0000003e /* Set dump settings */
+#define ETHTOOL_GET_DUMP_FLAG  0x0000003f /* Get dump settings */
+#define ETHTOOL_GET_DUMP_DATA  0x00000040 /* Get dump data */
+#define ETHTOOL_GET_TS_INFO    0x00000041 /* Get time stamping and PHC info */
+#define ETHTOOL_GMODULEINFO    0x00000042 /* Get plug-in module information */
+#define ETHTOOL_GMODULEEEPROM  0x00000043 /* Get plug-in module eeprom */
+#define ETHTOOL_GEEE           0x00000044 /* Get EEE settings */
+#define ETHTOOL_SEEE           0x00000045 /* Set EEE settings */
+
+#define ETHTOOL_GRSSH          0x00000046 /* Get RX flow hash configuration */
+#define ETHTOOL_SRSSH          0x00000047 /* Set RX flow hash configuration */
+#define ETHTOOL_GTUNABLE       0x00000048 /* Get tunable configuration */
+#define ETHTOOL_STUNABLE       0x00000049 /* Set tunable configuration */
+
+/* compatibility with older code */
+#define SPARC_ETH_GSET         ETHTOOL_GSET
+#define SPARC_ETH_SSET         ETHTOOL_SSET
+
+#define SUPPORTED_10baseT_Half         (1 << 0)
+#define SUPPORTED_10baseT_Full         (1 << 1)
+#define SUPPORTED_100baseT_Half                (1 << 2)
+#define SUPPORTED_100baseT_Full                (1 << 3)
+#define SUPPORTED_1000baseT_Half       (1 << 4)
+#define SUPPORTED_1000baseT_Full       (1 << 5)
+#define SUPPORTED_Autoneg              (1 << 6)
+#define SUPPORTED_TP                   (1 << 7)
+#define SUPPORTED_AUI                  (1 << 8)
+#define SUPPORTED_MII                  (1 << 9)
+#define SUPPORTED_FIBRE                        (1 << 10)
+#define SUPPORTED_BNC                  (1 << 11)
+#define SUPPORTED_10000baseT_Full      (1 << 12)
+#define SUPPORTED_Pause                        (1 << 13)
+#define SUPPORTED_Asym_Pause           (1 << 14)
+#define SUPPORTED_2500baseX_Full       (1 << 15)
+#define SUPPORTED_Backplane            (1 << 16)
+#define SUPPORTED_1000baseKX_Full      (1 << 17)
+#define SUPPORTED_10000baseKX4_Full    (1 << 18)
+#define SUPPORTED_10000baseKR_Full     (1 << 19)
+#define SUPPORTED_10000baseR_FEC       (1 << 20)
+#define SUPPORTED_20000baseMLD2_Full   (1 << 21)
+#define SUPPORTED_20000baseKR2_Full    (1 << 22)
+#define SUPPORTED_40000baseKR4_Full    (1 << 23)
+#define SUPPORTED_40000baseCR4_Full    (1 << 24)
+#define SUPPORTED_40000baseSR4_Full    (1 << 25)
+#define SUPPORTED_40000baseLR4_Full    (1 << 26)
+#define SUPPORTED_56000baseKR4_Full    (1 << 27)
+#define SUPPORTED_56000baseCR4_Full    (1 << 28)
+#define SUPPORTED_56000baseSR4_Full    (1 << 29)
+#define SUPPORTED_56000baseLR4_Full    (1 << 30)
+
+#define ADVERTISED_10baseT_Half                (1 << 0)
+#define ADVERTISED_10baseT_Full                (1 << 1)
+#define ADVERTISED_100baseT_Half       (1 << 2)
+#define ADVERTISED_100baseT_Full       (1 << 3)
+#define ADVERTISED_1000baseT_Half      (1 << 4)
+#define ADVERTISED_1000baseT_Full      (1 << 5)
+#define ADVERTISED_Autoneg             (1 << 6)
+#define ADVERTISED_TP                  (1 << 7)
+#define ADVERTISED_AUI                 (1 << 8)
+#define ADVERTISED_MII                 (1 << 9)
+#define ADVERTISED_FIBRE               (1 << 10)
+#define ADVERTISED_BNC                 (1 << 11)
+#define ADVERTISED_10000baseT_Full     (1 << 12)
+#define ADVERTISED_Pause               (1 << 13)
+#define ADVERTISED_Asym_Pause          (1 << 14)
+#define ADVERTISED_2500baseX_Full      (1 << 15)
+#define ADVERTISED_Backplane           (1 << 16)
+#define ADVERTISED_1000baseKX_Full     (1 << 17)
+#define ADVERTISED_10000baseKX4_Full   (1 << 18)
+#define ADVERTISED_10000baseKR_Full    (1 << 19)
+#define ADVERTISED_10000baseR_FEC      (1 << 20)
+#define ADVERTISED_20000baseMLD2_Full  (1 << 21)
+#define ADVERTISED_20000baseKR2_Full   (1 << 22)
+#define ADVERTISED_40000baseKR4_Full   (1 << 23)
+#define ADVERTISED_40000baseCR4_Full   (1 << 24)
+#define ADVERTISED_40000baseSR4_Full   (1 << 25)
+#define ADVERTISED_40000baseLR4_Full   (1 << 26)
+#define ADVERTISED_56000baseKR4_Full   (1 << 27)
+#define ADVERTISED_56000baseCR4_Full   (1 << 28)
+#define ADVERTISED_56000baseSR4_Full   (1 << 29)
+#define ADVERTISED_56000baseLR4_Full   (1 << 30)
+
+/* The following are all involved in forcing a particular link
+ * mode for the device for setting things.  When getting the
+ * devices settings, these indicate the current mode and whether
+ * it was forced up into this mode or autonegotiated.
+ */
+
+/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|5|10|20|25|40|50|56|100]GbE. */
+#define SPEED_10               10
+#define SPEED_100              100
+#define SPEED_1000             1000
+#define SPEED_2500             2500
+#define SPEED_5000             5000
+#define SPEED_10000            10000
+#define SPEED_20000            20000
+#define SPEED_25000            25000
+#define SPEED_40000            40000
+#define SPEED_50000            50000
+#define SPEED_56000            56000
+#define SPEED_100000           100000
+
+#define SPEED_UNKNOWN          -1
+
+/* Duplex, half or full. */
+#define DUPLEX_HALF            0x00
+#define DUPLEX_FULL            0x01
+#define DUPLEX_UNKNOWN         0xff
+
+/* Which connector port. */
+#define PORT_TP                        0x00
+#define PORT_AUI               0x01
+#define PORT_MII               0x02
+#define PORT_FIBRE             0x03
+#define PORT_BNC               0x04
+#define PORT_DA                        0x05
+#define PORT_NONE              0xef
+#define PORT_OTHER             0xff
+
+/* Which transceiver to use. */
+#define XCVR_INTERNAL          0x00 /* PHY and MAC are in the same package */
+#define XCVR_EXTERNAL          0x01 /* PHY and MAC are in different packages */
+#define XCVR_DUMMY1            0x02
+#define XCVR_DUMMY2            0x03
+#define XCVR_DUMMY3            0x04
+
+/* Enable or disable autonegotiation. */
+#define AUTONEG_DISABLE                0x00
+#define AUTONEG_ENABLE         0x01
+
+/* MDI or MDI-X status/control - if MDI/MDI_X/AUTO is set then
+ * the driver is required to renegotiate link
+ */
+#define ETH_TP_MDI_INVALID     0x00 /* status: unknown; control: unsupported */
+#define ETH_TP_MDI             0x01 /* status: MDI;     control: force MDI */
+#define ETH_TP_MDI_X           0x02 /* status: MDI-X;   control: force MDI-X */
+#define ETH_TP_MDI_AUTO                0x03 /*                  control: auto-select */
+
+/* Wake-On-Lan options. */
+#define WAKE_PHY               (1 << 0)
+#define WAKE_UCAST             (1 << 1)
+#define WAKE_MCAST             (1 << 2)
+#define WAKE_BCAST             (1 << 3)
+#define WAKE_ARP               (1 << 4)
+#define WAKE_MAGIC             (1 << 5)
+#define WAKE_MAGICSECURE       (1 << 6) /* only meaningful if WAKE_MAGIC */
+
+/* L2-L4 network traffic flow types */
+#define        TCP_V4_FLOW     0x01    /* hash or spec (tcp_ip4_spec) */
+#define        UDP_V4_FLOW     0x02    /* hash or spec (udp_ip4_spec) */
+#define        SCTP_V4_FLOW    0x03    /* hash or spec (sctp_ip4_spec) */
+#define        AH_ESP_V4_FLOW  0x04    /* hash only */
+#define        TCP_V6_FLOW     0x05    /* hash only */
+#define        UDP_V6_FLOW     0x06    /* hash only */
+#define        SCTP_V6_FLOW    0x07    /* hash only */
+#define        AH_ESP_V6_FLOW  0x08    /* hash only */
+#define        AH_V4_FLOW      0x09    /* hash or spec (ah_ip4_spec) */
+#define        ESP_V4_FLOW     0x0a    /* hash or spec (esp_ip4_spec) */
+#define        AH_V6_FLOW      0x0b    /* hash only */
+#define        ESP_V6_FLOW     0x0c    /* hash only */
+#define        IP_USER_FLOW    0x0d    /* spec only (usr_ip4_spec) */
+#define        IPV4_FLOW       0x10    /* hash only */
+#define        IPV6_FLOW       0x11    /* hash only */
+#define        ETHER_FLOW      0x12    /* spec only (ether_spec) */
+/* Flag to enable additional fields in struct ethtool_rx_flow_spec */
+#define        FLOW_EXT        0x80000000
+#define        FLOW_MAC_EXT    0x40000000
+
+/* L3-L4 network traffic flow hash options */
+#define        RXH_L2DA        (1 << 1)
+#define        RXH_VLAN        (1 << 2)
+#define        RXH_L3_PROTO    (1 << 3)
+#define        RXH_IP_SRC      (1 << 4)
+#define        RXH_IP_DST      (1 << 5)
+#define        RXH_L4_B_0_1    (1 << 6) /* src port in case of TCP/UDP/SCTP */
+#define        RXH_L4_B_2_3    (1 << 7) /* dst port in case of TCP/UDP/SCTP */
+#define        RXH_DISCARD     (1 << 31)
+
+#define        RX_CLS_FLOW_DISC        0xffffffffffffffffULL
+
+/* Special RX classification rule insert location values */
+#define RX_CLS_LOC_SPECIAL     0x80000000      /* flag */
+#define RX_CLS_LOC_ANY         0xffffffff
+#define RX_CLS_LOC_FIRST       0xfffffffe
+#define RX_CLS_LOC_LAST                0xfffffffd
+
+/* EEPROM Standards for plug in modules */
+#define ETH_MODULE_SFF_8079            0x1
+#define ETH_MODULE_SFF_8079_LEN                256
+#define ETH_MODULE_SFF_8472            0x2
+#define ETH_MODULE_SFF_8472_LEN                512
+#define ETH_MODULE_SFF_8636            0x3
+#define ETH_MODULE_SFF_8636_LEN                256
+#define ETH_MODULE_SFF_8436            0x4
+#define ETH_MODULE_SFF_8436_LEN                256
+
+/* Reset flags */
+/* The reset() operation must clear the flags for the components which
+ * were actually reset.  On successful return, the flags indicate the
+ * components which were not reset, either because they do not exist
+ * in the hardware or because they cannot be reset independently.  The
+ * driver must never reset any components that were not requested.
+ */
+enum ethtool_reset_flags {
+       /* These flags represent components dedicated to the interface
+        * the command is addressed to.  Shift any flag left by
+        * ETH_RESET_SHARED_SHIFT to reset a shared component of the
+        * same type.
+        */
+       ETH_RESET_MGMT          = 1 << 0,       /* Management processor */
+       ETH_RESET_IRQ           = 1 << 1,       /* Interrupt requester */
+       ETH_RESET_DMA           = 1 << 2,       /* DMA engine */
+       ETH_RESET_FILTER        = 1 << 3,       /* Filtering/flow direction */
+       ETH_RESET_OFFLOAD       = 1 << 4,       /* Protocol offload */
+       ETH_RESET_MAC           = 1 << 5,       /* Media access controller */
+       ETH_RESET_PHY           = 1 << 6,       /* Transceiver/PHY */
+       ETH_RESET_RAM           = 1 << 7,       /* RAM shared between
+                                                * multiple components */
+
+       ETH_RESET_DEDICATED     = 0x0000ffff,   /* All components dedicated to
+                                                * this interface */
+       ETH_RESET_ALL           = 0xffffffff,   /* All components used by this
+                                                * interface, even if shared */
+};
+#define ETH_RESET_SHARED_SHIFT 16
+
+#endif /* _LINUX_ETHTOOL_H */
diff --git a/lib/libdss-include/include/linux/eventpoll.h b/lib/libdss-include/include/linux/eventpoll.h
new file mode 100644 (file)
index 0000000..8625342
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ *  include/linux/eventpoll.h ( Efficient event polling implementation )
+ *  Copyright (C) 2001,...,2006         Davide Libenzi
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#ifndef _LINUX_EVENTPOLL_H
+#define _LINUX_EVENTPOLL_H
+
+/* For O_CLOEXEC */
+#include <linux/fcntl.h>
+#include <linux/types.h>
+
+/* Flags for epoll_create1.  */
+#define EPOLL_CLOEXEC O_CLOEXEC
+
+/* Valid opcodes to issue to sys_epoll_ctl() */
+#define EPOLL_CTL_ADD 1
+#define EPOLL_CTL_DEL 2
+#define EPOLL_CTL_MOD 3
+
+/*
+ * Request the handling of system wakeup events so as to prevent system suspends
+ * from happening while those events are being processed.
+ *
+ * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be
+ * re-allowed until epoll_wait is called again after consuming the wakeup
+ * event(s).
+ *
+ * Requires CAP_BLOCK_SUSPEND
+ */
+#define EPOLLWAKEUP (1 << 29)
+
+/* Set the One Shot behaviour for the target file descriptor */
+#define EPOLLONESHOT (1 << 30)
+
+/* Set the Edge Triggered behaviour for the target file descriptor */
+#define EPOLLET (1 << 31)
+
+/* 
+ * On x86-64 make the 64bit structure have the same alignment as the
+ * 32bit structure. This makes 32bit emulation easier.
+ *
+ * UML/x86_64 needs the same packing as x86_64
+ */
+#ifdef __x86_64__
+#define EPOLL_PACKED __attribute__((packed))
+#else
+#define EPOLL_PACKED
+#endif
+
+struct epoll_event {
+       __u32 events;
+       __u64 data;
+} EPOLL_PACKED;
+
+#ifdef CONFIG_PM_SLEEP
+static __inline__ void ep_take_care_of_epollwakeup(struct epoll_event *epev)
+{
+       if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND))
+               epev->events &= ~EPOLLWAKEUP;
+}
+#else
+static __inline__ void ep_take_care_of_epollwakeup(struct epoll_event *epev)
+{
+       epev->events &= ~EPOLLWAKEUP;
+}
+#endif
+#endif /* _LINUX_EVENTPOLL_H */
diff --git a/lib/libdss-include/include/linux/fadvise.h b/lib/libdss-include/include/linux/fadvise.h
new file mode 100644 (file)
index 0000000..e8e7471
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef FADVISE_H_INCLUDED
+#define FADVISE_H_INCLUDED
+
+#define POSIX_FADV_NORMAL      0 /* No further special treatment.  */
+#define POSIX_FADV_RANDOM      1 /* Expect random page references.  */
+#define POSIX_FADV_SEQUENTIAL  2 /* Expect sequential page references.  */
+#define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
+
+/*
+ * The advise values for POSIX_FADV_DONTNEED and POSIX_ADV_NOREUSE
+ * for s390-64 differ from the values for the rest of the world.
+ */
+#if defined(__s390x__)
+#define POSIX_FADV_DONTNEED    6 /* Don't need these pages.  */
+#define POSIX_FADV_NOREUSE     7 /* Data will be accessed once.  */
+#else
+#define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
+#define POSIX_FADV_NOREUSE     5 /* Data will be accessed once.  */
+#endif
+
+#endif /* FADVISE_H_INCLUDED */
diff --git a/lib/libdss-include/include/linux/falloc.h b/lib/libdss-include/include/linux/falloc.h
new file mode 100644 (file)
index 0000000..dce68de
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _FALLOC_H_
+#define _FALLOC_H_
+
+#define FALLOC_FL_KEEP_SIZE    0x01 /* default is extend size */
+#define FALLOC_FL_PUNCH_HOLE   0x02 /* de-allocates range */
+#define FALLOC_FL_NO_HIDE_STALE        0x04 /* reserved codepoint */
+
+/*
+ * FALLOC_FL_COLLAPSE_RANGE is used to remove a range of a file
+ * without leaving a hole in the file. The contents of the file beyond
+ * the range being removed is appended to the start offset of the range
+ * being removed (i.e. the hole that was punched is "collapsed"),
+ * resulting in a file layout that looks like the range that was
+ * removed never existed. As such collapsing a range of a file changes
+ * the size of the file, reducing it by the same length of the range
+ * that has been removed by the operation.
+ *
+ * Different filesystems may implement different limitations on the
+ * granularity of the operation. Most will limit operations to
+ * filesystem block size boundaries, but this boundary may be larger or
+ * smaller depending on the filesystem and/or the configuration of the
+ * filesystem or file.
+ *
+ * Attempting to collapse a range that crosses the end of the file is
+ * considered an illegal operation - just use ftruncate(2) if you need
+ * to collapse a range that crosses EOF.
+ */
+#define FALLOC_FL_COLLAPSE_RANGE       0x08
+
+/*
+ * FALLOC_FL_ZERO_RANGE is used to convert a range of file to zeros preferably
+ * without issuing data IO. Blocks should be preallocated for the regions that
+ * span holes in the file, and the entire range is preferable converted to
+ * unwritten extents - even though file system may choose to zero out the
+ * extent or do whatever which will result in reading zeros from the range
+ * while the range remains allocated for the file.
+ *
+ * This can be also used to preallocate blocks past EOF in the same way as
+ * with fallocate. Flag FALLOC_FL_KEEP_SIZE should cause the inode
+ * size to remain the same.
+ */
+#define FALLOC_FL_ZERO_RANGE           0x10
+
+/*
+ * FALLOC_FL_INSERT_RANGE is use to insert space within the file size without
+ * overwriting any existing data. The contents of the file beyond offset are
+ * shifted towards right by len bytes to create a hole.  As such, this
+ * operation will increase the size of the file by len bytes.
+ *
+ * Different filesystems may implement different limitations on the granularity
+ * of the operation. Most will limit operations to filesystem block size
+ * boundaries, but this boundary may be larger or smaller depending on
+ * the filesystem and/or the configuration of the filesystem or file.
+ *
+ * Attempting to insert space using this flag at OR beyond the end of
+ * the file is considered an illegal operation - just use ftruncate(2) or
+ * fallocate(2) with mode 0 for such type of operations.
+ */
+#define FALLOC_FL_INSERT_RANGE         0x20
+
+#endif /* _FALLOC_H_ */
diff --git a/lib/libdss-include/include/linux/fanotify.h b/lib/libdss-include/include/linux/fanotify.h
new file mode 100644 (file)
index 0000000..f780e5a
--- /dev/null
@@ -0,0 +1,116 @@
+#ifndef _LINUX_FANOTIFY_H
+#define _LINUX_FANOTIFY_H
+
+#include <linux/types.h>
+
+/* the following events that user-space can register for */
+#define FAN_ACCESS             0x00000001      /* File was accessed */
+#define FAN_MODIFY             0x00000002      /* File was modified */
+#define FAN_CLOSE_WRITE                0x00000008      /* Writtable file closed */
+#define FAN_CLOSE_NOWRITE      0x00000010      /* Unwrittable file closed */
+#define FAN_OPEN               0x00000020      /* File was opened */
+
+#define FAN_Q_OVERFLOW         0x00004000      /* Event queued overflowed */
+
+#define FAN_OPEN_PERM          0x00010000      /* File open in perm check */
+#define FAN_ACCESS_PERM                0x00020000      /* File accessed in perm check */
+
+#define FAN_ONDIR              0x40000000      /* event occurred against dir */
+
+#define FAN_EVENT_ON_CHILD     0x08000000      /* interested in child events */
+
+/* helper events */
+#define FAN_CLOSE              (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */
+
+/* flags used for fanotify_init() */
+#define FAN_CLOEXEC            0x00000001
+#define FAN_NONBLOCK           0x00000002
+
+/* These are NOT bitwise flags.  Both bits are used togther.  */
+#define FAN_CLASS_NOTIF                0x00000000
+#define FAN_CLASS_CONTENT      0x00000004
+#define FAN_CLASS_PRE_CONTENT  0x00000008
+#define FAN_ALL_CLASS_BITS     (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | \
+                                FAN_CLASS_PRE_CONTENT)
+
+#define FAN_UNLIMITED_QUEUE    0x00000010
+#define FAN_UNLIMITED_MARKS    0x00000020
+
+#define FAN_ALL_INIT_FLAGS     (FAN_CLOEXEC | FAN_NONBLOCK | \
+                                FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\
+                                FAN_UNLIMITED_MARKS)
+
+/* flags used for fanotify_modify_mark() */
+#define FAN_MARK_ADD           0x00000001
+#define FAN_MARK_REMOVE                0x00000002
+#define FAN_MARK_DONT_FOLLOW   0x00000004
+#define FAN_MARK_ONLYDIR       0x00000008
+#define FAN_MARK_MOUNT         0x00000010
+#define FAN_MARK_IGNORED_MASK  0x00000020
+#define FAN_MARK_IGNORED_SURV_MODIFY   0x00000040
+#define FAN_MARK_FLUSH         0x00000080
+
+#define FAN_ALL_MARK_FLAGS     (FAN_MARK_ADD |\
+                                FAN_MARK_REMOVE |\
+                                FAN_MARK_DONT_FOLLOW |\
+                                FAN_MARK_ONLYDIR |\
+                                FAN_MARK_MOUNT |\
+                                FAN_MARK_IGNORED_MASK |\
+                                FAN_MARK_IGNORED_SURV_MODIFY |\
+                                FAN_MARK_FLUSH)
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define FAN_ALL_EVENTS (FAN_ACCESS |\
+                       FAN_MODIFY |\
+                       FAN_CLOSE |\
+                       FAN_OPEN)
+
+/*
+ * All events which require a permission response from userspace
+ */
+#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\
+                            FAN_ACCESS_PERM)
+
+#define FAN_ALL_OUTGOING_EVENTS        (FAN_ALL_EVENTS |\
+                                FAN_ALL_PERM_EVENTS |\
+                                FAN_Q_OVERFLOW)
+
+#define FANOTIFY_METADATA_VERSION      3
+
+struct fanotify_event_metadata {
+       __u32 event_len;
+       __u8 vers;
+       __u8 reserved;
+       __u16 metadata_len;
+       __aligned_u64 mask;
+       __s32 fd;
+       __s32 pid;
+};
+
+struct fanotify_response {
+       __s32 fd;
+       __u32 response;
+};
+
+/* Legit userspace responses to a _PERM event */
+#define FAN_ALLOW      0x01
+#define FAN_DENY       0x02
+/* No fd set in event */
+#define FAN_NOFD       -1
+
+/* Helper functions to deal with fanotify_event_metadata buffers */
+#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata))
+
+#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \
+                                  (struct fanotify_event_metadata*)(((char *)(meta)) + \
+                                  (meta)->event_len))
+
+#define FAN_EVENT_OK(meta, len)        ((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \
+                               (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
+                               (long)(meta)->event_len <= (long)(len))
+
+#endif /* _LINUX_FANOTIFY_H */
diff --git a/lib/libdss-include/include/linux/fb.h b/lib/libdss-include/include/linux/fb.h
new file mode 100644 (file)
index 0000000..1b3b239
--- /dev/null
@@ -0,0 +1,400 @@
+#ifndef _LINUX_FB_H
+#define _LINUX_FB_H
+
+#include <linux/types.h>
+#include <linux/i2c.h>
+
+/* Definitions of frame buffers                                                */
+
+#define FB_MAX                 32      /* sufficient for now */
+
+/* ioctls
+   0x46 is 'F'                                                         */
+#define FBIOGET_VSCREENINFO    0x4600
+#define FBIOPUT_VSCREENINFO    0x4601
+#define FBIOGET_FSCREENINFO    0x4602
+#define FBIOGETCMAP            0x4604
+#define FBIOPUTCMAP            0x4605
+#define FBIOPAN_DISPLAY                0x4606
+#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor)
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC 0x460C */
+/* #define FBIOPUT_MONITORSPEC 0x460D */
+/* #define FBIOSWITCH_MONIBIT  0x460E */
+#define FBIOGET_CON2FBMAP      0x460F
+#define FBIOPUT_CON2FBMAP      0x4610
+#define FBIOBLANK              0x4611          /* arg: 0 or vesa level + 1 */
+#define FBIOGET_VBLANK         _IOR('F', 0x12, struct fb_vblank)
+#define FBIO_ALLOC              0x4613
+#define FBIO_FREE               0x4614
+#define FBIOGET_GLYPH           0x4615
+#define FBIOGET_HWCINFO         0x4616
+#define FBIOPUT_MODEINFO        0x4617
+#define FBIOGET_DISPINFO        0x4618
+#define FBIO_WAITFORVSYNC      _IOW('F', 0x20, __u32)
+
+#define FB_TYPE_PACKED_PIXELS          0       /* Packed Pixels        */
+#define FB_TYPE_PLANES                 1       /* Non interleaved planes */
+#define FB_TYPE_INTERLEAVED_PLANES     2       /* Interleaved planes   */
+#define FB_TYPE_TEXT                   3       /* Text/attributes      */
+#define FB_TYPE_VGA_PLANES             4       /* EGA/VGA planes       */
+#define FB_TYPE_FOURCC                 5       /* Type identified by a V4L2 FOURCC */
+
+#define FB_AUX_TEXT_MDA                0       /* Monochrome text */
+#define FB_AUX_TEXT_CGA                1       /* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO    2       /* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16 3       /* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8  4       /* other MGAs:      text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_GROUP 8       /* 8-15: SVGA tileblit compatible modes */
+#define FB_AUX_TEXT_SVGA_MASK  7       /* lower three bits says step */
+#define FB_AUX_TEXT_SVGA_STEP2 8       /* SVGA text mode:  text, attr */
+#define FB_AUX_TEXT_SVGA_STEP4 9       /* SVGA text mode:  text, attr,  2 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP8 10      /* SVGA text mode:  text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP16        11      /* SVGA text mode:  text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_SVGA_LAST  15      /* reserved up to 15 */
+
+#define FB_AUX_VGA_PLANES_VGA4         0       /* 16 color planes (EGA/VGA) */
+#define FB_AUX_VGA_PLANES_CFB4         1       /* CFB4 in planes (VGA) */
+#define FB_AUX_VGA_PLANES_CFB8         2       /* CFB8 in planes (VGA) */
+
+#define FB_VISUAL_MONO01               0       /* Monochr. 1=Black 0=White */
+#define FB_VISUAL_MONO10               1       /* Monochr. 1=White 0=Black */
+#define FB_VISUAL_TRUECOLOR            2       /* True color   */
+#define FB_VISUAL_PSEUDOCOLOR          3       /* Pseudo color (like atari) */
+#define FB_VISUAL_DIRECTCOLOR          4       /* Direct color */
+#define FB_VISUAL_STATIC_PSEUDOCOLOR   5       /* Pseudo color readonly */
+#define FB_VISUAL_FOURCC               6       /* Visual identified by a V4L2 FOURCC */
+
+#define FB_ACCEL_NONE          0       /* no hardware accelerator      */
+#define FB_ACCEL_ATARIBLITT    1       /* Atari Blitter                */
+#define FB_ACCEL_AMIGABLITT    2       /* Amiga Blitter                */
+#define FB_ACCEL_S3_TRIO64     3       /* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR_77C32BLT  4       /* RetinaZ3 (NCR 77C32BLT)      */
+#define FB_ACCEL_S3_VIRGE      5       /* Cybervision64/3D (S3 ViRGE)  */
+#define FB_ACCEL_ATI_MACH64GX  6       /* ATI Mach 64GX family         */
+#define FB_ACCEL_DEC_TGA       7       /* DEC 21030 TGA                */
+#define FB_ACCEL_ATI_MACH64CT  8       /* ATI Mach 64CT family         */
+#define FB_ACCEL_ATI_MACH64VT  9       /* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT  10      /* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR   11      /* Sun Creator/Creator3D        */
+#define FB_ACCEL_SUN_CGSIX     12      /* Sun cg6                      */
+#define FB_ACCEL_SUN_LEO       13      /* Sun leo/zx                   */
+#define FB_ACCEL_IMS_TWINTURBO 14      /* IMS Twin Turbo               */
+#define FB_ACCEL_3DLABS_PERMEDIA2 15   /* 3Dlabs Permedia 2            */
+#define FB_ACCEL_MATROX_MGA2064W 16    /* Matrox MGA2064W (Millenium)  */
+#define FB_ACCEL_MATROX_MGA1064SG 17   /* Matrox MGA1064SG (Mystique)  */
+#define FB_ACCEL_MATROX_MGA2164W 18    /* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGA2164W_AGP 19        /* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGAG100        20      /* Matrox G100 (Productiva G100) */
+#define FB_ACCEL_MATROX_MGAG200        21      /* Matrox G200 (Myst, Mill, ...) */
+#define FB_ACCEL_SUN_CG14      22      /* Sun cgfourteen                */
+#define FB_ACCEL_SUN_BWTWO     23      /* Sun bwtwo                    */
+#define FB_ACCEL_SUN_CGTHREE   24      /* Sun cgthree                  */
+#define FB_ACCEL_SUN_TCX       25      /* Sun tcx                      */
+#define FB_ACCEL_MATROX_MGAG400        26      /* Matrox G400                  */
+#define FB_ACCEL_NV3           27      /* nVidia RIVA 128              */
+#define FB_ACCEL_NV4           28      /* nVidia RIVA TNT              */
+#define FB_ACCEL_NV5           29      /* nVidia RIVA TNT2             */
+#define FB_ACCEL_CT_6555x      30      /* C&T 6555x                    */
+#define FB_ACCEL_3DFX_BANSHEE  31      /* 3Dfx Banshee                 */
+#define FB_ACCEL_ATI_RAGE128   32      /* ATI Rage128 family           */
+#define FB_ACCEL_IGS_CYBER2000 33      /* CyberPro 2000                */
+#define FB_ACCEL_IGS_CYBER2010 34      /* CyberPro 2010                */
+#define FB_ACCEL_IGS_CYBER5000 35      /* CyberPro 5000                */
+#define FB_ACCEL_SIS_GLAMOUR    36     /* SiS 300/630/540              */
+#define FB_ACCEL_3DLABS_PERMEDIA3 37   /* 3Dlabs Permedia 3            */
+#define FB_ACCEL_ATI_RADEON    38      /* ATI Radeon family            */
+#define FB_ACCEL_I810           39      /* Intel 810/815                */
+#define FB_ACCEL_SIS_GLAMOUR_2  40     /* SiS 315, 650, 740            */
+#define FB_ACCEL_SIS_XABRE      41     /* SiS 330 ("Xabre")            */
+#define FB_ACCEL_I830           42      /* Intel 830M/845G/85x/865G     */
+#define FB_ACCEL_NV_10          43      /* nVidia Arch 10               */
+#define FB_ACCEL_NV_20          44      /* nVidia Arch 20               */
+#define FB_ACCEL_NV_30          45      /* nVidia Arch 30               */
+#define FB_ACCEL_NV_40          46      /* nVidia Arch 40               */
+#define FB_ACCEL_XGI_VOLARI_V  47      /* XGI Volari V3XT, V5, V8      */
+#define FB_ACCEL_XGI_VOLARI_Z  48      /* XGI Volari Z7                */
+#define FB_ACCEL_OMAP1610      49      /* TI OMAP16xx                  */
+#define FB_ACCEL_TRIDENT_TGUI  50      /* Trident TGUI                 */
+#define FB_ACCEL_TRIDENT_3DIMAGE 51    /* Trident 3DImage              */
+#define FB_ACCEL_TRIDENT_BLADE3D 52    /* Trident Blade3D              */
+#define FB_ACCEL_TRIDENT_BLADEXP 53    /* Trident BladeXP              */
+#define FB_ACCEL_CIRRUS_ALPINE   53    /* Cirrus Logic 543x/544x/5480  */
+#define FB_ACCEL_NEOMAGIC_NM2070 90    /* NeoMagic NM2070              */
+#define FB_ACCEL_NEOMAGIC_NM2090 91    /* NeoMagic NM2090              */
+#define FB_ACCEL_NEOMAGIC_NM2093 92    /* NeoMagic NM2093              */
+#define FB_ACCEL_NEOMAGIC_NM2097 93    /* NeoMagic NM2097              */
+#define FB_ACCEL_NEOMAGIC_NM2160 94    /* NeoMagic NM2160              */
+#define FB_ACCEL_NEOMAGIC_NM2200 95    /* NeoMagic NM2200              */
+#define FB_ACCEL_NEOMAGIC_NM2230 96    /* NeoMagic NM2230              */
+#define FB_ACCEL_NEOMAGIC_NM2360 97    /* NeoMagic NM2360              */
+#define FB_ACCEL_NEOMAGIC_NM2380 98    /* NeoMagic NM2380              */
+#define FB_ACCEL_PXA3XX                 99     /* PXA3xx                       */
+
+#define FB_ACCEL_SAVAGE4        0x80   /* S3 Savage4                   */
+#define FB_ACCEL_SAVAGE3D       0x81   /* S3 Savage3D                  */
+#define FB_ACCEL_SAVAGE3D_MV    0x82   /* S3 Savage3D-MV               */
+#define FB_ACCEL_SAVAGE2000     0x83   /* S3 Savage2000                */
+#define FB_ACCEL_SAVAGE_MX_MV   0x84   /* S3 Savage/MX-MV              */
+#define FB_ACCEL_SAVAGE_MX      0x85   /* S3 Savage/MX                 */
+#define FB_ACCEL_SAVAGE_IX_MV   0x86   /* S3 Savage/IX-MV              */
+#define FB_ACCEL_SAVAGE_IX      0x87   /* S3 Savage/IX                 */
+#define FB_ACCEL_PROSAVAGE_PM   0x88   /* S3 ProSavage PM133           */
+#define FB_ACCEL_PROSAVAGE_KM   0x89   /* S3 ProSavage KM133           */
+#define FB_ACCEL_S3TWISTER_P    0x8a   /* S3 Twister                   */
+#define FB_ACCEL_S3TWISTER_K    0x8b   /* S3 TwisterK                  */
+#define FB_ACCEL_SUPERSAVAGE    0x8c    /* S3 Supersavage               */
+#define FB_ACCEL_PROSAVAGE_DDR  0x8d   /* S3 ProSavage DDR             */
+#define FB_ACCEL_PROSAVAGE_DDRK 0x8e   /* S3 ProSavage DDR-K           */
+
+#define FB_ACCEL_PUV3_UNIGFX   0xa0    /* PKUnity-v3 Unigfx            */
+
+#define FB_CAP_FOURCC          1       /* Device supports FOURCC-based formats */
+
+struct fb_fix_screeninfo {
+       char id[16];                    /* identification string eg "TT Builtin" */
+       unsigned long smem_start;       /* Start of frame buffer mem */
+                                       /* (physical address) */
+       __u32 smem_len;                 /* Length of frame buffer mem */
+       __u32 type;                     /* see FB_TYPE_*                */
+       __u32 type_aux;                 /* Interleave for interleaved Planes */
+       __u32 visual;                   /* see FB_VISUAL_*              */ 
+       __u16 xpanstep;                 /* zero if no hardware panning  */
+       __u16 ypanstep;                 /* zero if no hardware panning  */
+       __u16 ywrapstep;                /* zero if no hardware ywrap    */
+       __u32 line_length;              /* length of a line in bytes    */
+       unsigned long mmio_start;       /* Start of Memory Mapped I/O   */
+                                       /* (physical address) */
+       __u32 mmio_len;                 /* Length of Memory Mapped I/O  */
+       __u32 accel;                    /* Indicate to driver which     */
+                                       /*  specific chip/card we have  */
+       __u16 capabilities;             /* see FB_CAP_*                 */
+       __u16 reserved[2];              /* Reserved for future compatibility */
+};
+
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified.
+ *
+ * For pseudocolor: offset and length should be the same for all color
+ * components. Offset specifies the position of the least significant bit
+ * of the pallette index in a pixel value. Length indicates the number
+ * of available palette entries (i.e. # of entries = 1 << length).
+ */
+struct fb_bitfield {
+       __u32 offset;                   /* beginning of bitfield        */
+       __u32 length;                   /* length of bitfield           */
+       __u32 msb_right;                /* != 0 : Most significant bit is */ 
+                                       /* right */ 
+};
+
+#define FB_NONSTD_HAM          1       /* Hold-And-Modify (HAM)        */
+#define FB_NONSTD_REV_PIX_IN_B 2       /* order of pixels in each byte is reversed */
+
+#define FB_ACTIVATE_NOW                0       /* set values immediately (or vbl)*/
+#define FB_ACTIVATE_NXTOPEN    1       /* activate on next open        */
+#define FB_ACTIVATE_TEST       2       /* don't set, round up impossible */
+#define FB_ACTIVATE_MASK       15
+                                       /* values                       */
+#define FB_ACTIVATE_VBL               16       /* activate values on next vbl  */
+#define FB_CHANGE_CMAP_VBL     32      /* change colormap on vbl       */
+#define FB_ACTIVATE_ALL               64       /* change all VCs on this fb    */
+#define FB_ACTIVATE_FORCE     128      /* force apply even when no change*/
+#define FB_ACTIVATE_INV_MODE  256       /* invalidate videomode */
+
+#define FB_ACCELF_TEXT         1       /* (OBSOLETE) see fb_info.flags and vc_mode */
+
+#define FB_SYNC_HOR_HIGH_ACT   1       /* horizontal sync high active  */
+#define FB_SYNC_VERT_HIGH_ACT  2       /* vertical sync high active    */
+#define FB_SYNC_EXT            4       /* external sync                */
+#define FB_SYNC_COMP_HIGH_ACT  8       /* composite sync high active   */
+#define FB_SYNC_BROADCAST      16      /* broadcast video timings      */
+                                       /* vtotal = 144d/288n/576i => PAL  */
+                                       /* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN       32      /* sync on green */
+
+#define FB_VMODE_NONINTERLACED  0      /* non interlaced */
+#define FB_VMODE_INTERLACED    1       /* interlaced   */
+#define FB_VMODE_DOUBLE                2       /* double scan */
+#define FB_VMODE_ODD_FLD_FIRST 4       /* interlaced: top line first */
+#define FB_VMODE_MASK          255
+
+#define FB_VMODE_YWRAP         256     /* ywrap instead of panning     */
+#define FB_VMODE_SMOOTH_XPAN   512     /* smooth xpan possible (internally used) */
+#define FB_VMODE_CONUPDATE     512     /* don't update x/yoffset       */
+
+/*
+ * Display rotation support
+ */
+#define FB_ROTATE_UR      0
+#define FB_ROTATE_CW      1
+#define FB_ROTATE_UD      2
+#define FB_ROTATE_CCW     3
+
+#define PICOS2KHZ(a) (1000000000UL/(a))
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
+struct fb_var_screeninfo {
+       __u32 xres;                     /* visible resolution           */
+       __u32 yres;
+       __u32 xres_virtual;             /* virtual resolution           */
+       __u32 yres_virtual;
+       __u32 xoffset;                  /* offset from virtual to visible */
+       __u32 yoffset;                  /* resolution                   */
+
+       __u32 bits_per_pixel;           /* guess what                   */
+       __u32 grayscale;                /* 0 = color, 1 = grayscale,    */
+                                       /* >1 = FOURCC                  */
+       struct fb_bitfield red;         /* bitfield in fb mem if true color, */
+       struct fb_bitfield green;       /* else only length is significant */
+       struct fb_bitfield blue;
+       struct fb_bitfield transp;      /* transparency                 */      
+
+       __u32 nonstd;                   /* != 0 Non standard pixel format */
+
+       __u32 activate;                 /* see FB_ACTIVATE_*            */
+
+       __u32 height;                   /* height of picture in mm    */
+       __u32 width;                    /* width of picture in mm     */
+
+       __u32 accel_flags;              /* (OBSOLETE) see fb_info.flags */
+
+       /* Timing: All values in pixclocks, except pixclock (of course) */
+       __u32 pixclock;                 /* pixel clock in ps (pico seconds) */
+       __u32 left_margin;              /* time from sync to picture    */
+       __u32 right_margin;             /* time from picture to sync    */
+       __u32 upper_margin;             /* time from sync to picture    */
+       __u32 lower_margin;
+       __u32 hsync_len;                /* length of horizontal sync    */
+       __u32 vsync_len;                /* length of vertical sync      */
+       __u32 sync;                     /* see FB_SYNC_*                */
+       __u32 vmode;                    /* see FB_VMODE_*               */
+       __u32 rotate;                   /* angle we rotate counter clockwise */
+       __u32 colorspace;               /* colorspace for FOURCC-based modes */
+       __u32 reserved[4];              /* Reserved for future compatibility */
+};
+
+struct fb_cmap {
+       __u32 start;                    /* First entry  */
+       __u32 len;                      /* Number of entries */
+       __u16 *red;                     /* Red values   */
+       __u16 *green;
+       __u16 *blue;
+       __u16 *transp;                  /* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+       __u32 console;
+       __u32 framebuffer;
+};
+
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING        0
+#define VESA_VSYNC_SUSPEND      1
+#define VESA_HSYNC_SUSPEND      2
+#define VESA_POWERDOWN          3
+
+
+enum {
+       /* screen: unblanked, hsync: on,  vsync: on */
+       FB_BLANK_UNBLANK       = VESA_NO_BLANKING,
+
+       /* screen: blanked,   hsync: on,  vsync: on */
+       FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1,
+
+       /* screen: blanked,   hsync: on,  vsync: off */
+       FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
+
+       /* screen: blanked,   hsync: off, vsync: on */
+       FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
+
+       /* screen: blanked,   hsync: off, vsync: off */
+       FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1
+};
+
+#define FB_VBLANK_VBLANKING    0x001   /* currently in a vertical blank */
+#define FB_VBLANK_HBLANKING    0x002   /* currently in a horizontal blank */
+#define FB_VBLANK_HAVE_VBLANK  0x004   /* vertical blanks can be detected */
+#define FB_VBLANK_HAVE_HBLANK  0x008   /* horizontal blanks can be detected */
+#define FB_VBLANK_HAVE_COUNT   0x010   /* global retrace counter is available */
+#define FB_VBLANK_HAVE_VCOUNT  0x020   /* the vcount field is valid */
+#define FB_VBLANK_HAVE_HCOUNT  0x040   /* the hcount field is valid */
+#define FB_VBLANK_VSYNCING     0x080   /* currently in a vsync */
+#define FB_VBLANK_HAVE_VSYNC   0x100   /* verical syncs can be detected */
+
+struct fb_vblank {
+       __u32 flags;                    /* FB_VBLANK flags */
+       __u32 count;                    /* counter of retraces since boot */
+       __u32 vcount;                   /* current scanline position */
+       __u32 hcount;                   /* current scandot position */
+       __u32 reserved[4];              /* reserved for future compatibility */
+};
+
+/* Internal HW accel */
+#define ROP_COPY 0
+#define ROP_XOR  1
+
+struct fb_copyarea {
+       __u32 dx;
+       __u32 dy;
+       __u32 width;
+       __u32 height;
+       __u32 sx;
+       __u32 sy;
+};
+
+struct fb_fillrect {
+       __u32 dx;       /* screen-relative */
+       __u32 dy;
+       __u32 width;
+       __u32 height;
+       __u32 color;
+       __u32 rop;
+};
+
+struct fb_image {
+       __u32 dx;               /* Where to place image */
+       __u32 dy;
+       __u32 width;            /* Size of image */
+       __u32 height;
+       __u32 fg_color;         /* Only used when a mono bitmap */
+       __u32 bg_color;
+       __u8  depth;            /* Depth of the image */
+       const char *data;       /* Pointer to image data */
+       struct fb_cmap cmap;    /* color map info */
+};
+
+/*
+ * hardware cursor control
+ */
+
+#define FB_CUR_SETIMAGE 0x01
+#define FB_CUR_SETPOS   0x02
+#define FB_CUR_SETHOT   0x04
+#define FB_CUR_SETCMAP  0x08
+#define FB_CUR_SETSHAPE 0x10
+#define FB_CUR_SETSIZE 0x20
+#define FB_CUR_SETALL   0xFF
+
+struct fbcurpos {
+       __u16 x, y;
+};
+
+struct fb_cursor {
+       __u16 set;              /* what to set */
+       __u16 enable;           /* cursor on/off */
+       __u16 rop;              /* bitop operation */
+       const char *mask;       /* cursor mask bits */
+       struct fbcurpos hot;    /* cursor hot spot */
+       struct fb_image image;  /* Cursor image */
+};
+
+#ifdef CONFIG_FB_BACKLIGHT
+/* Settings for the generic backlight code */
+#define FB_BACKLIGHT_LEVELS    128
+#define FB_BACKLIGHT_MAX       0xFF
+#endif
+
+
+#endif /* _LINUX_FB_H */
diff --git a/lib/libdss-include/include/linux/fcntl.h b/lib/libdss-include/include/linux/fcntl.h
new file mode 100644 (file)
index 0000000..01379c5
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef _LINUX_FCNTL_H
+#define _LINUX_FCNTL_H
+
+#include <asm/fcntl.h>
+
+#define F_SETLEASE     (F_LINUX_SPECIFIC_BASE + 0)
+#define F_GETLEASE     (F_LINUX_SPECIFIC_BASE + 1)
+
+/*
+ * Cancel a blocking posix lock; internal use only until we expose an
+ * asynchronous lock api to userspace:
+ */
+#define F_CANCELLK     (F_LINUX_SPECIFIC_BASE + 5)
+
+/* Create a file descriptor with FD_CLOEXEC set. */
+#define F_DUPFD_CLOEXEC        (F_LINUX_SPECIFIC_BASE + 6)
+
+/*
+ * Request nofications on a directory.
+ * See below for events that may be notified.
+ */
+#define F_NOTIFY       (F_LINUX_SPECIFIC_BASE+2)
+
+/*
+ * Set and get of pipe page size array
+ */
+#define F_SETPIPE_SZ   (F_LINUX_SPECIFIC_BASE + 7)
+#define F_GETPIPE_SZ   (F_LINUX_SPECIFIC_BASE + 8)
+
+/*
+ * Set/Get seals
+ */
+#define F_ADD_SEALS    (F_LINUX_SPECIFIC_BASE + 9)
+#define F_GET_SEALS    (F_LINUX_SPECIFIC_BASE + 10)
+
+/*
+ * Types of seals
+ */
+#define F_SEAL_SEAL    0x0001  /* prevent further seals from being set */
+#define F_SEAL_SHRINK  0x0002  /* prevent file from shrinking */
+#define F_SEAL_GROW    0x0004  /* prevent file from growing */
+#define F_SEAL_WRITE   0x0008  /* prevent writes */
+/* (1U << 31) is reserved for signed error codes */
+
+/*
+ * Types of directory notifications that may be requested.
+ */
+#define DN_ACCESS      0x00000001      /* File accessed */
+#define DN_MODIFY      0x00000002      /* File modified */
+#define DN_CREATE      0x00000004      /* File created */
+#define DN_DELETE      0x00000008      /* File removed */
+#define DN_RENAME      0x00000010      /* File renamed */
+#define DN_ATTRIB      0x00000020      /* File changed attibutes */
+#define DN_MULTISHOT   0x80000000      /* Don't remove notifier */
+
+#define AT_FDCWD               -100    /* Special value used to indicate
+                                           openat should use the current
+                                           working directory. */
+#define AT_SYMLINK_NOFOLLOW    0x100   /* Do not follow symbolic links.  */
+#define AT_REMOVEDIR           0x200   /* Remove directory instead of
+                                           unlinking file.  */
+#define AT_SYMLINK_FOLLOW      0x400   /* Follow symbolic links.  */
+#define AT_NO_AUTOMOUNT                0x800   /* Suppress terminal automount traversal */
+#define AT_EMPTY_PATH          0x1000  /* Allow empty relative pathname */
+
+
+#endif /* _LINUX_FCNTL_H */
diff --git a/lib/libdss-include/include/linux/fd.h b/lib/libdss-include/include/linux/fd.h
new file mode 100644 (file)
index 0000000..06975d7
--- /dev/null
@@ -0,0 +1,383 @@
+#ifndef _LINUX_FD_H
+#define _LINUX_FD_H
+
+#include <linux/ioctl.h>
+
+
+/* New file layout: Now the ioctl definitions immediately follow the
+ * definitions of the structures that they use */
+
+/*
+ * Geometry
+ */
+struct floppy_struct {
+       unsigned int    size,           /* nr of sectors total */
+                       sect,           /* sectors per track */
+                       head,           /* nr of heads */
+                       track,          /* nr of tracks */
+                       stretch;        /* bit 0 !=0 means double track steps */
+                                       /* bit 1 != 0 means swap sides */
+                                       /* bits 2..9 give the first sector */
+                                       /*  number (the LSB is flipped) */
+#define FD_STRETCH 1
+#define FD_SWAPSIDES 2
+#define FD_ZEROBASED 4
+#define FD_SECTBASEMASK 0x3FC
+#define FD_MKSECTBASE(s) (((s) ^ 1) << 2)
+#define FD_SECTBASE(floppy) ((((floppy)->stretch & FD_SECTBASEMASK) >> 2) ^ 1)
+
+       unsigned char   gap,            /* gap1 size */
+
+                       rate,           /* data rate. |= 0x40 for perpendicular */
+#define FD_2M 0x4
+#define FD_SIZECODEMASK 0x38
+#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8)
+#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \
+                            512 : 128 << FD_SIZECODE(floppy) )
+#define FD_PERP 0x40
+
+                       spec1,          /* stepping rate, head unload time */
+                       fmt_gap;        /* gap2 size */
+       const char      * name; /* used only for predefined formats */
+};
+
+
+/* commands needing write access have 0x40 set */
+/* commands needing super user access have 0x80 set */
+
+#define FDCLRPRM _IO(2, 0x41)
+/* clear user-defined parameters */
+
+#define FDSETPRM _IOW(2, 0x42, struct floppy_struct) 
+#define FDSETMEDIAPRM FDSETPRM
+/* set user-defined parameters for current media */
+
+#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct) 
+#define FDGETPRM _IOR(2, 0x04, struct floppy_struct)
+#define FDDEFMEDIAPRM FDDEFPRM
+#define FDGETMEDIAPRM FDGETPRM
+/* set/get disk parameters */
+
+
+#define        FDMSGON  _IO(2,0x45)
+#define        FDMSGOFF _IO(2,0x46)
+/* issue/don't issue kernel messages on media type change */
+
+
+/* 
+ * Formatting (obsolete)
+ */
+#define FD_FILL_BYTE 0xF6 /* format fill byte. */
+
+struct format_descr {
+       unsigned int device,head,track;
+};
+
+#define FDFMTBEG _IO(2,0x47)
+/* begin formatting a disk */
+#define        FDFMTTRK _IOW(2,0x48, struct format_descr)
+/* format the specified track */
+#define FDFMTEND _IO(2,0x49)
+/* end formatting a disk */
+
+
+/*
+ * Error thresholds
+ */
+struct floppy_max_errors {
+       unsigned int
+         abort,      /* number of errors to be reached before aborting */
+         read_track, /* maximal number of errors permitted to read an
+                      * entire track at once */
+         reset,      /* maximal number of errors before a reset is tried */
+         recal,      /* maximal number of errors before a recalibrate is
+                      * tried */
+
+         /*
+          * Threshold for reporting FDC errors to the console.
+          * Setting this to zero may flood your screen when using
+          * ultra cheap floppies ;-)
+          */
+         reporting;
+
+};
+
+#define FDSETEMSGTRESH _IO(2,0x4a)
+/* set fdc error reporting threshold */
+
+#define FDFLUSH  _IO(2,0x4b)
+/* flush buffers for media; either for verifying media, or for
+ * handling a media change without closing the file descriptor */
+
+#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors)
+#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors)
+/* set/get abortion and read_track threshold. See also floppy_drive_params
+ * structure */
+
+
+typedef char floppy_drive_name[16];
+#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name)
+/* get drive type: 5 1/4 or 3 1/2 */
+
+
+/*
+ * Drive parameters (user modifiable)
+ */
+struct floppy_drive_params {
+       signed char cmos;               /* CMOS type */
+       
+       /* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms 
+        * etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA).
+        */
+       unsigned long max_dtr;          /* Step rate, usec */
+       unsigned long hlt;              /* Head load/settle time, msec */
+       unsigned long hut;              /* Head unload time (remnant of 
+                                        * 8" drives) */
+       unsigned long srt;              /* Step rate, usec */
+
+       unsigned long spinup;           /* time needed for spinup (expressed
+                                        * in jiffies) */
+       unsigned long spindown;         /* timeout needed for spindown */
+       unsigned char spindown_offset;  /* decides in which position the disk
+                                        * will stop */
+       unsigned char select_delay;     /* delay to wait after select */
+       unsigned char rps;              /* rotations per second */
+       unsigned char tracks;           /* maximum number of tracks */
+       unsigned long timeout;          /* timeout for interrupt requests */
+       
+       unsigned char interleave_sect;  /* if there are more sectors, use 
+                                        * interleave */
+       
+       struct floppy_max_errors max_errors;
+       
+       char flags;                     /* various flags, including ftd_msg */
+/*
+ * Announce successful media type detection and media information loss after
+ * disk changes.
+ * Also used to enable/disable printing of overrun warnings.
+ */
+
+#define FTD_MSG 0x10
+#define FD_BROKEN_DCL 0x20
+#define FD_DEBUG 0x02
+#define FD_SILENT_DCL_CLEAR 0x4
+#define FD_INVERTED_DCL 0x80 /* must be 0x80, because of hardware 
+                               considerations */
+
+       char read_track;                /* use readtrack during probing? */
+
+/*
+ * Auto-detection. Each drive type has eight formats which are
+ * used in succession to try to read the disk. If the FDC cannot lock onto
+ * the disk, the next format is tried. This uses the variable 'probing'.
+ */
+       short autodetect[8];            /* autodetected formats */
+       
+       int checkfreq; /* how often should the drive be checked for disk 
+                       * changes */
+       int native_format; /* native format of this drive */
+};
+
+enum {
+       FD_NEED_TWADDLE_BIT,    /* more magic */
+       FD_VERIFY_BIT,          /* inquire for write protection */
+       FD_DISK_NEWCHANGE_BIT,  /* change detected, and no action undertaken yet
+                                * to clear media change status */
+       FD_UNUSED_BIT,
+       FD_DISK_CHANGED_BIT,    /* disk has been changed since last i/o */
+       FD_DISK_WRITABLE_BIT,   /* disk is writable */
+       FD_OPEN_SHOULD_FAIL_BIT
+};
+
+#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params)
+#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params)
+/* set/get drive parameters */
+
+
+/*
+ * Current drive state (not directly modifiable by user, readonly)
+ */
+struct floppy_drive_struct {
+       unsigned long flags;
+/* values for these flags */
+#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT)
+#define FD_VERIFY (1 << FD_VERIFY_BIT)
+#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT)
+#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT)
+#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT)
+
+       unsigned long spinup_date;
+       unsigned long select_date;
+       unsigned long first_read_date;
+       short probed_format;
+       short track; /* current track */
+       short maxblock; /* id of highest block read */
+       short maxtrack; /* id of highest half track read */
+       int generation; /* how many diskchanges? */
+
+/*
+ * (User-provided) media information is _not_ discarded after a media change
+ * if the corresponding keep_data flag is non-zero. Positive values are
+ * decremented after each probe.
+ */
+       int keep_data;
+       
+       /* Prevent "aliased" accesses. */
+       int fd_ref;
+       int fd_device;
+       unsigned long last_checked; /* when was the drive last checked for a disk 
+                          * change? */
+       
+       char *dmabuf;
+       int bufblocks;
+};
+
+#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct)
+#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct)
+/* get drive state: GET returns the cached state, POLL polls for new state */
+
+
+/*
+ * reset FDC
+ */
+enum reset_mode {
+       FD_RESET_IF_NEEDED,     /* reset only if the reset flags is set */
+       FD_RESET_IF_RAWCMD,     /* obsolete */
+       FD_RESET_ALWAYS         /* reset always */
+};
+#define FDRESET _IO(2, 0x54)
+
+
+/*
+ * FDC state
+ */
+struct floppy_fdc_state {      
+       int spec1;              /* spec1 value last used */
+       int spec2;              /* spec2 value last used */
+       int dtr;
+       unsigned char version;  /* FDC version code */
+       unsigned char dor;
+       unsigned long address;  /* io address */
+       unsigned int rawcmd:2;
+       unsigned int reset:1;
+       unsigned int need_configure:1;
+       unsigned int perp_mode:2;
+       unsigned int has_fifo:1;
+       unsigned int driver_version;    /* version code for floppy driver */
+#define FD_DRIVER_VERSION 0x100
+/* user programs using the floppy API should use floppy_fdc_state to
+ * get the version number of the floppy driver that they are running
+ * on. If this version number is bigger than the one compiled into the
+ * user program (the FD_DRIVER_VERSION define), it should be prepared
+ * to bigger structures
+ */
+
+       unsigned char track[4];
+       /* Position of the heads of the 4 units attached to this FDC,
+        * as stored on the FDC. In the future, the position as stored
+        * on the FDC might not agree with the actual physical
+        * position of these drive heads. By allowing such
+        * disagreement, it will be possible to reset the FDC without
+        * incurring the expensive cost of repositioning all heads.
+        * Right now, these positions are hard wired to 0. */
+
+};
+
+#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state)
+
+
+/*
+ * Asynchronous Write error tracking
+ */
+struct floppy_write_errors {
+       /* Write error logging.
+        *
+        * These fields can be cleared with the FDWERRORCLR ioctl.
+        * Only writes that were attempted but failed due to a physical media
+        * error are logged.  write(2) calls that fail and return an error code
+        * to the user process are not counted.
+        */
+
+       unsigned int write_errors;  /* number of physical write errors 
+                                    * encountered */
+       
+       /* position of first and last write errors */
+       unsigned long first_error_sector;
+       int           first_error_generation;
+       unsigned long last_error_sector;
+       int           last_error_generation;
+       
+       unsigned int badness; /* highest retry count for a read or write 
+                              * operation */
+};
+
+#define FDWERRORCLR  _IO(2, 0x56)
+/* clear write error and badness information */
+#define FDWERRORGET  _IOR(2, 0x17, struct floppy_write_errors)
+/* get write error and badness information */
+
+
+/*
+ * Raw commands
+ */
+/* new interface flag: now we can do them in batches */
+#define FDHAVEBATCHEDRAWCMD
+
+struct floppy_raw_cmd {
+       unsigned int flags;
+#define FD_RAW_READ 1
+#define FD_RAW_WRITE 2
+#define FD_RAW_NO_MOTOR 4
+#define FD_RAW_DISK_CHANGE 4 /* out: disk change flag was set */
+#define FD_RAW_INTR 8    /* wait for an interrupt */
+#define FD_RAW_SPIN 0x10 /* spin up the disk for this command */
+#define FD_RAW_NO_MOTOR_AFTER 0x20 /* switch the motor off after command 
+                                   * completion */
+#define FD_RAW_NEED_DISK 0x40  /* this command needs a disk to be present */
+#define FD_RAW_NEED_SEEK 0x80  /* this command uses an implied seek (soft) */
+
+/* more "in" flags */
+#define FD_RAW_MORE 0x100  /* more records follow */
+#define FD_RAW_STOP_IF_FAILURE 0x200 /* stop if we encounter a failure */
+#define FD_RAW_STOP_IF_SUCCESS 0x400 /* stop if command successful */
+#define FD_RAW_SOFTFAILURE 0x800 /* consider the return value for failure
+                                 * detection too */
+
+/* more "out" flags */
+#define FD_RAW_FAILURE 0x10000 /* command sent to fdc, fdc returned error */
+#define FD_RAW_HARDFAILURE 0x20000 /* fdc had to be reset, or timed out */
+
+       void *data;
+       char *kernel_data; /* location of data buffer in the kernel */
+       struct floppy_raw_cmd *next; /* used for chaining of raw cmd's 
+                                     * within the kernel */
+       long length; /* in: length of dma transfer. out: remaining bytes */
+       long phys_length; /* physical length, if different from dma length */
+       int buffer_length; /* length of allocated buffer */
+
+       unsigned char rate;
+       unsigned char cmd_count;
+       unsigned char cmd[16];
+       unsigned char reply_count;
+       unsigned char reply[16];
+       int track;
+       int resultcode;
+
+       int reserved1;
+       int reserved2;
+};
+
+#define FDRAWCMD _IO(2, 0x58)
+/* send a raw command to the fdc. Structure size not included, because of
+ * batches */
+
+#define FDTWADDLE _IO(2, 0x59)
+/* flicker motor-on bit before reading a sector. Experimental */
+
+
+#define FDEJECT _IO(2, 0x5a)
+/* eject the disk */
+
+
+
+#endif /* _LINUX_FD_H */
diff --git a/lib/libdss-include/include/linux/fdreg.h b/lib/libdss-include/include/linux/fdreg.h
new file mode 100644 (file)
index 0000000..61ce641
--- /dev/null
@@ -0,0 +1,137 @@
+#ifndef _LINUX_FDREG_H
+#define _LINUX_FDREG_H
+/*
+ * This file contains some defines for the floppy disk controller.
+ * Various sources. Mostly "IBM Microcomputers: A Programmers
+ * Handbook", Sanches and Canton.
+ */
+
+#ifdef FDPATCHES
+#define FD_IOPORT fdc_state[fdc].address
+#else
+/* It would be a lot saner just to force fdc_state[fdc].address to always
+   be set ! FIXME */
+#define FD_IOPORT 0x3f0
+#endif
+
+/* Fd controller regs. S&C, about page 340 */
+#define FD_STATUS      (4 + FD_IOPORT )
+#define FD_DATA                (5 + FD_IOPORT )
+
+/* Digital Output Register */
+#define FD_DOR         (2 + FD_IOPORT )
+
+/* Digital Input Register (read) */
+#define FD_DIR         (7 + FD_IOPORT )
+
+/* Diskette Control Register (write)*/
+#define FD_DCR         (7 + FD_IOPORT )
+
+/* Bits of main status register */
+#define STATUS_BUSYMASK        0x0F            /* drive busy mask */
+#define STATUS_BUSY    0x10            /* FDC busy */
+#define STATUS_DMA     0x20            /* 0- DMA mode */
+#define STATUS_DIR     0x40            /* 0- cpu->fdc */
+#define STATUS_READY   0x80            /* Data reg ready */
+
+/* Bits of FD_ST0 */
+#define ST0_DS         0x03            /* drive select mask */
+#define ST0_HA         0x04            /* Head (Address) */
+#define ST0_NR         0x08            /* Not Ready */
+#define ST0_ECE                0x10            /* Equipment check error */
+#define ST0_SE         0x20            /* Seek end */
+#define ST0_INTR       0xC0            /* Interrupt code mask */
+
+/* Bits of FD_ST1 */
+#define ST1_MAM                0x01            /* Missing Address Mark */
+#define ST1_WP         0x02            /* Write Protect */
+#define ST1_ND         0x04            /* No Data - unreadable */
+#define ST1_OR         0x10            /* OverRun */
+#define ST1_CRC                0x20            /* CRC error in data or addr */
+#define ST1_EOC                0x80            /* End Of Cylinder */
+
+/* Bits of FD_ST2 */
+#define ST2_MAM                0x01            /* Missing Address Mark (again) */
+#define ST2_BC         0x02            /* Bad Cylinder */
+#define ST2_SNS                0x04            /* Scan Not Satisfied */
+#define ST2_SEH                0x08            /* Scan Equal Hit */
+#define ST2_WC         0x10            /* Wrong Cylinder */
+#define ST2_CRC                0x20            /* CRC error in data field */
+#define ST2_CM         0x40            /* Control Mark = deleted */
+
+/* Bits of FD_ST3 */
+#define ST3_HA         0x04            /* Head (Address) */
+#define ST3_DS         0x08            /* drive is double-sided */
+#define ST3_TZ         0x10            /* Track Zero signal (1=track 0) */
+#define ST3_RY         0x20            /* drive is ready */
+#define ST3_WP         0x40            /* Write Protect */
+#define ST3_FT         0x80            /* Drive Fault */
+
+/* Values for FD_COMMAND */
+#define FD_RECALIBRATE         0x07    /* move to track 0 */
+#define FD_SEEK                        0x0F    /* seek track */
+#define FD_READ                        0xE6    /* read with MT, MFM, SKip deleted */
+#define FD_WRITE               0xC5    /* write with MT, MFM */
+#define FD_SENSEI              0x08    /* Sense Interrupt Status */
+#define FD_SPECIFY             0x03    /* specify HUT etc */
+#define FD_FORMAT              0x4D    /* format one track */
+#define FD_VERSION             0x10    /* get version code */
+#define FD_CONFIGURE           0x13    /* configure FIFO operation */
+#define FD_PERPENDICULAR       0x12    /* perpendicular r/w mode */
+#define FD_GETSTATUS           0x04    /* read ST3 */
+#define FD_DUMPREGS            0x0E    /* dump the contents of the fdc regs */
+#define FD_READID              0xEA    /* prints the header of a sector */
+#define FD_UNLOCK              0x14    /* Fifo config unlock */
+#define FD_LOCK                        0x94    /* Fifo config lock */
+#define FD_RSEEK_OUT           0x8f    /* seek out (i.e. to lower tracks) */
+#define FD_RSEEK_IN            0xcf    /* seek in (i.e. to higher tracks) */
+
+/* the following commands are new in the 82078. They are not used in the
+ * floppy driver, except the first three. These commands may be useful for apps
+ * which use the FDRAWCMD interface. For doc, get the 82078 spec sheets at
+ * http://www.intel.com/design/archives/periphrl/docs/29046803.htm */
+
+#define FD_PARTID              0x18    /* part id ("extended" version cmd) */
+#define FD_SAVE                        0x2e    /* save fdc regs for later restore */
+#define FD_DRIVESPEC           0x8e    /* drive specification: Access to the
+                                        * 2 Mbps data transfer rate for tape
+                                        * drives */
+
+#define FD_RESTORE             0x4e    /* later restore */
+#define FD_POWERDOWN           0x27    /* configure FDC's powersave features */
+#define FD_FORMAT_N_WRITE      0xef    /* format and write in one go. */
+#define FD_OPTION              0x33    /* ISO format (which is a clean way to
+                                        * pack more sectors on a track) */
+
+/* DMA commands */
+#define DMA_READ       0x46
+#define DMA_WRITE      0x4A
+
+/* FDC version return types */
+#define FDC_NONE       0x00
+#define FDC_UNKNOWN    0x10    /* DO NOT USE THIS TYPE EXCEPT IF IDENTIFICATION
+                                  FAILS EARLY */
+#define FDC_8272A      0x20    /* Intel 8272a, NEC 765 */
+#define FDC_765ED      0x30    /* Non-Intel 1MB-compatible FDC, can't detect */
+#define FDC_82072      0x40    /* Intel 82072; 8272a + FIFO + DUMPREGS */
+#define FDC_82072A     0x45    /* 82072A (on Sparcs) */
+#define FDC_82077_ORIG 0x51    /* Original version of 82077AA, sans LOCK */
+#define FDC_82077      0x52    /* 82077AA-1 */
+#define FDC_82078_UNKN 0x5f    /* Unknown 82078 variant */
+#define FDC_82078      0x60    /* 44pin 82078 or 64pin 82078SL */
+#define FDC_82078_1    0x61    /* 82078-1 (2Mbps fdc) */
+#define FDC_S82078B    0x62    /* S82078B (first seen on Adaptec AVA-2825 VLB
+                                * SCSI/EIDE/Floppy controller) */
+#define FDC_87306      0x63    /* National Semiconductor PC 87306 */
+
+/*
+ * Beware: the fdc type list is roughly sorted by increasing features.
+ * Presence of features is tested by comparing the FDC version id with the
+ * "oldest" version that has the needed feature.
+ * If during FDC detection, an obscure test fails late in the sequence, don't
+ * assign FDC_UNKNOWN. Else the FDC will be treated as a dumb 8272a, or worse.
+ * This is especially true if the tests are unneeded.
+ */
+
+#define FD_RESET_DELAY 20
+#endif
diff --git a/lib/libdss-include/include/linux/fib_rules.h b/lib/libdss-include/include/linux/fib_rules.h
new file mode 100644 (file)
index 0000000..96161b8
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef __LINUX_FIB_RULES_H
+#define __LINUX_FIB_RULES_H
+
+#include <linux/types.h>
+#include <linux/rtnetlink.h>
+
+/* rule is permanent, and cannot be deleted */
+#define FIB_RULE_PERMANENT     0x00000001
+#define FIB_RULE_INVERT                0x00000002
+#define FIB_RULE_UNRESOLVED    0x00000004
+#define FIB_RULE_IIF_DETACHED  0x00000008
+#define FIB_RULE_DEV_DETACHED  FIB_RULE_IIF_DETACHED
+#define FIB_RULE_OIF_DETACHED  0x00000010
+
+/* try to find source address in routing lookups */
+#define FIB_RULE_FIND_SADDR    0x00010000
+
+struct fib_rule_hdr {
+       __u8            family;
+       __u8            dst_len;
+       __u8            src_len;
+       __u8            tos;
+
+       __u8            table;
+       __u8            res1;   /* reserved */
+       __u8            res2;   /* reserved */
+       __u8            action;
+
+       __u32           flags;
+};
+
+enum {
+       FRA_UNSPEC,
+       FRA_DST,        /* destination address */
+       FRA_SRC,        /* source address */
+       FRA_IIFNAME,    /* interface name */
+#define FRA_IFNAME     FRA_IIFNAME
+       FRA_GOTO,       /* target to jump to (FR_ACT_GOTO) */
+       FRA_UNUSED2,
+       FRA_PRIORITY,   /* priority/preference */
+       FRA_UNUSED3,
+       FRA_UNUSED4,
+       FRA_UNUSED5,
+       FRA_FWMARK,     /* mark */
+       FRA_FLOW,       /* flow/class id */
+       FRA_TUN_ID,
+       FRA_SUPPRESS_IFGROUP,
+       FRA_SUPPRESS_PREFIXLEN,
+       FRA_TABLE,      /* Extended table id */
+       FRA_FWMASK,     /* mask for netfilter mark */
+       FRA_OIFNAME,
+       __FRA_MAX
+};
+
+#define FRA_MAX (__FRA_MAX - 1)
+
+enum {
+       FR_ACT_UNSPEC,
+       FR_ACT_TO_TBL,          /* Pass to fixed table */
+       FR_ACT_GOTO,            /* Jump to another rule */
+       FR_ACT_NOP,             /* No operation */
+       FR_ACT_RES3,
+       FR_ACT_RES4,
+       FR_ACT_BLACKHOLE,       /* Drop without notification */
+       FR_ACT_UNREACHABLE,     /* Drop with ENETUNREACH */
+       FR_ACT_PROHIBIT,        /* Drop with EACCES */
+       __FR_ACT_MAX,
+};
+
+#define FR_ACT_MAX (__FR_ACT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/fiemap.h b/lib/libdss-include/include/linux/fiemap.h
new file mode 100644 (file)
index 0000000..0c51d61
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * FS_IOC_FIEMAP ioctl infrastructure.
+ *
+ * Some portions copyright (C) 2007 Cluster File Systems, Inc
+ *
+ * Authors: Mark Fasheh <mfasheh@suse.com>
+ *          Kalpak Shah <kalpak.shah@sun.com>
+ *          Andreas Dilger <adilger@sun.com>
+ */
+
+#ifndef _LINUX_FIEMAP_H
+#define _LINUX_FIEMAP_H
+
+#include <linux/types.h>
+
+struct fiemap_extent {
+       __u64 fe_logical;  /* logical offset in bytes for the start of
+                           * the extent from the beginning of the file */
+       __u64 fe_physical; /* physical offset in bytes for the start
+                           * of the extent from the beginning of the disk */
+       __u64 fe_length;   /* length in bytes for this extent */
+       __u64 fe_reserved64[2];
+       __u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+       __u32 fe_reserved[3];
+};
+
+struct fiemap {
+       __u64 fm_start;         /* logical offset (inclusive) at
+                                * which to start mapping (in) */
+       __u64 fm_length;        /* logical length of mapping which
+                                * userspace wants (in) */
+       __u32 fm_flags;         /* FIEMAP_FLAG_* flags for request (in/out) */
+       __u32 fm_mapped_extents;/* number of extents that were mapped (out) */
+       __u32 fm_extent_count;  /* size of fm_extents array (in) */
+       __u32 fm_reserved;
+       struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+};
+
+#define FIEMAP_MAX_OFFSET      (~0ULL)
+
+#define FIEMAP_FLAG_SYNC       0x00000001 /* sync file data before map */
+#define FIEMAP_FLAG_XATTR      0x00000002 /* map extended attribute tree */
+#define FIEMAP_FLAG_CACHE      0x00000004 /* request caching of the extents */
+
+#define FIEMAP_FLAGS_COMPAT    (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
+
+#define FIEMAP_EXTENT_LAST             0x00000001 /* Last extent in file. */
+#define FIEMAP_EXTENT_UNKNOWN          0x00000002 /* Data location unknown. */
+#define FIEMAP_EXTENT_DELALLOC         0x00000004 /* Location still pending.
+                                                   * Sets EXTENT_UNKNOWN. */
+#define FIEMAP_EXTENT_ENCODED          0x00000008 /* Data can not be read
+                                                   * while fs is unmounted */
+#define FIEMAP_EXTENT_DATA_ENCRYPTED   0x00000080 /* Data is encrypted by fs.
+                                                   * Sets EXTENT_NO_BYPASS. */
+#define FIEMAP_EXTENT_NOT_ALIGNED      0x00000100 /* Extent offsets may not be
+                                                   * block aligned. */
+#define FIEMAP_EXTENT_DATA_INLINE      0x00000200 /* Data mixed with metadata.
+                                                   * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_DATA_TAIL                0x00000400 /* Multiple files in block.
+                                                   * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_UNWRITTEN                0x00000800 /* Space allocated, but
+                                                   * no data (i.e. zero). */
+#define FIEMAP_EXTENT_MERGED           0x00001000 /* File does not natively
+                                                   * support extents. Result
+                                                   * merged for efficiency. */
+#define FIEMAP_EXTENT_SHARED           0x00002000 /* Space shared with other
+                                                   * files. */
+
+#endif /* _LINUX_FIEMAP_H */
diff --git a/lib/libdss-include/include/linux/filter.h b/lib/libdss-include/include/linux/filter.h
new file mode 100644 (file)
index 0000000..e4f2f74
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Linux Socket Filter Data Structures
+ */
+
+#ifndef __LINUX_FILTER_H__
+#define __LINUX_FILTER_H__
+
+
+#include <linux/types.h>
+#include <linux/bpf_common.h>
+
+/*
+ * Current version of the filter code architecture.
+ */
+#define BPF_MAJOR_VERSION 1
+#define BPF_MINOR_VERSION 1
+
+/*
+ *     Try and keep these values and structures similar to BSD, especially
+ *     the BPF code definitions which need to match so you can share filters
+ */
+struct sock_filter {   /* Filter block */
+       __u16   code;   /* Actual filter code */
+       __u8    jt;     /* Jump true */
+       __u8    jf;     /* Jump false */
+       __u32   k;      /* Generic multiuse field */
+};
+
+struct sock_fprog {    /* Required for SO_ATTACH_FILTER. */
+       unsigned short          len;    /* Number of filter blocks */
+       struct sock_filter *filter;
+};
+
+/* ret - BPF_K and BPF_X also apply */
+#define BPF_RVAL(code)  ((code) & 0x18)
+#define         BPF_A           0x10
+
+/* misc */
+#define BPF_MISCOP(code) ((code) & 0xf8)
+#define         BPF_TAX         0x00
+#define         BPF_TXA         0x80
+
+/*
+ * Macros for filter block array initializers.
+ */
+#ifndef BPF_STMT
+#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }
+#endif
+#ifndef BPF_JUMP
+#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }
+#endif
+
+/*
+ * Number of scratch memory words for: BPF_ST and BPF_STX
+ */
+#define BPF_MEMWORDS 16
+
+/* RATIONALE. Negative offsets are invalid in BPF.
+   We use them to reference ancillary data.
+   Unlike introduction new instructions, it does not break
+   existing compilers/optimizers.
+ */
+#define SKF_AD_OFF    (-0x1000)
+#define SKF_AD_PROTOCOL 0
+#define SKF_AD_PKTTYPE         4
+#define SKF_AD_IFINDEX         8
+#define SKF_AD_NLATTR  12
+#define SKF_AD_NLATTR_NEST     16
+#define SKF_AD_MARK    20
+#define SKF_AD_QUEUE   24
+#define SKF_AD_HATYPE  28
+#define SKF_AD_RXHASH  32
+#define SKF_AD_CPU     36
+#define SKF_AD_ALU_XOR_X       40
+#define SKF_AD_VLAN_TAG        44
+#define SKF_AD_VLAN_TAG_PRESENT 48
+#define SKF_AD_PAY_OFFSET      52
+#define SKF_AD_RANDOM  56
+#define SKF_AD_VLAN_TPID       60
+#define SKF_AD_MAX     64
+
+#define SKF_NET_OFF    (-0x100000)
+#define SKF_LL_OFF     (-0x200000)
+
+#define BPF_NET_OFF    SKF_NET_OFF
+#define BPF_LL_OFF     SKF_LL_OFF
+
+#endif /* __LINUX_FILTER_H__ */
diff --git a/lib/libdss-include/include/linux/firewire-cdev.h b/lib/libdss-include/include/linux/firewire-cdev.h
new file mode 100644 (file)
index 0000000..1db453e
--- /dev/null
@@ -0,0 +1,1039 @@
+/*
+ * Char device interface.
+ *
+ * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _LINUX_FIREWIRE_CDEV_H
+#define _LINUX_FIREWIRE_CDEV_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/firewire-constants.h>
+
+/* available since kernel version 2.6.22 */
+#define FW_CDEV_EVENT_BUS_RESET                                0x00
+#define FW_CDEV_EVENT_RESPONSE                         0x01
+#define FW_CDEV_EVENT_REQUEST                          0x02
+#define FW_CDEV_EVENT_ISO_INTERRUPT                    0x03
+
+/* available since kernel version 2.6.30 */
+#define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED           0x04
+#define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED         0x05
+
+/* available since kernel version 2.6.36 */
+#define FW_CDEV_EVENT_REQUEST2                         0x06
+#define FW_CDEV_EVENT_PHY_PACKET_SENT                  0x07
+#define FW_CDEV_EVENT_PHY_PACKET_RECEIVED              0x08
+#define FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL       0x09
+
+/**
+ * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types
+ * @closure:   For arbitrary use by userspace
+ * @type:      Discriminates the fw_cdev_event_ types
+ *
+ * This struct may be used to access generic members of all fw_cdev_event_
+ * types regardless of the specific type.
+ *
+ * Data passed in the @closure field for a request will be returned in the
+ * corresponding event.  It is big enough to hold a pointer on all platforms.
+ * The ioctl used to set @closure depends on the @type of event.
+ */
+struct fw_cdev_event_common {
+       __u64 closure;
+       __u32 type;
+};
+
+/**
+ * struct fw_cdev_event_bus_reset - Sent when a bus reset occurred
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_GET_INFO ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_BUS_RESET
+ * @node_id:       New node ID of this node
+ * @local_node_id: Node ID of the local node, i.e. of the controller
+ * @bm_node_id:    Node ID of the bus manager
+ * @irm_node_id:   Node ID of the iso resource manager
+ * @root_node_id:  Node ID of the root node
+ * @generation:    New bus generation
+ *
+ * This event is sent when the bus the device belongs to goes through a bus
+ * reset.  It provides information about the new bus configuration, such as
+ * new node ID for this device, new root ID, and others.
+ *
+ * If @bm_node_id is 0xffff right after bus reset it can be reread by an
+ * %FW_CDEV_IOC_GET_INFO ioctl after bus manager selection was finished.
+ * Kernels with ABI version < 4 do not set @bm_node_id.
+ */
+struct fw_cdev_event_bus_reset {
+       __u64 closure;
+       __u32 type;
+       __u32 node_id;
+       __u32 local_node_id;
+       __u32 bm_node_id;
+       __u32 irm_node_id;
+       __u32 root_node_id;
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_event_response - Sent when a response packet was received
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_REQUEST
+ *             or %FW_CDEV_IOC_SEND_BROADCAST_REQUEST
+ *             or %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_RESPONSE
+ * @rcode:     Response code returned by the remote node
+ * @length:    Data length, i.e. the response's payload size in bytes
+ * @data:      Payload data, if any
+ *
+ * This event is sent when the stack receives a response to an outgoing request
+ * sent by %FW_CDEV_IOC_SEND_REQUEST ioctl.  The payload data for responses
+ * carrying data (read and lock responses) follows immediately and can be
+ * accessed through the @data field.
+ *
+ * The event is also generated after conclusions of transactions that do not
+ * involve response packets.  This includes unified write transactions,
+ * broadcast write transactions, and transmission of asynchronous stream
+ * packets.  @rcode indicates success or failure of such transmissions.
+ */
+struct fw_cdev_event_response {
+       __u64 closure;
+       __u32 type;
+       __u32 rcode;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_request - Old version of &fw_cdev_event_request2
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST
+ *
+ * This event is sent instead of &fw_cdev_event_request2 if the kernel or
+ * the client implements ABI version <= 3.  &fw_cdev_event_request lacks
+ * essential information; use &fw_cdev_event_request2 instead.
+ */
+struct fw_cdev_event_request {
+       __u64 closure;
+       __u32 type;
+       __u32 tcode;
+       __u64 offset;
+       __u32 handle;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_request2 - Sent on incoming request to an address region
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_ALLOCATE ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST2
+ * @tcode:     Transaction code of the incoming request
+ * @offset:    The offset into the 48-bit per-node address space
+ * @source_node_id: Sender node ID
+ * @destination_node_id: Destination node ID
+ * @card:      The index of the card from which the request came
+ * @generation:        Bus generation in which the request is valid
+ * @handle:    Reference to the kernel-side pending request
+ * @length:    Data length, i.e. the request's payload size in bytes
+ * @data:      Incoming data, if any
+ *
+ * This event is sent when the stack receives an incoming request to an address
+ * region registered using the %FW_CDEV_IOC_ALLOCATE ioctl.  The request is
+ * guaranteed to be completely contained in the specified region.  Userspace is
+ * responsible for sending the response by %FW_CDEV_IOC_SEND_RESPONSE ioctl,
+ * using the same @handle.
+ *
+ * The payload data for requests carrying data (write and lock requests)
+ * follows immediately and can be accessed through the @data field.
+ *
+ * Unlike &fw_cdev_event_request, @tcode of lock requests is one of the
+ * firewire-core specific %TCODE_LOCK_MASK_SWAP...%TCODE_LOCK_VENDOR_DEPENDENT,
+ * i.e. encodes the extended transaction code.
+ *
+ * @card may differ from &fw_cdev_get_info.card because requests are received
+ * from all cards of the Linux host.  @source_node_id, @destination_node_id, and
+ * @generation pertain to that card.  Destination node ID and bus generation may
+ * therefore differ from the corresponding fields of the last
+ * &fw_cdev_event_bus_reset.
+ *
+ * @destination_node_id may also differ from the current node ID because of a
+ * non-local bus ID part or in case of a broadcast write request.  Note, a
+ * client must call an %FW_CDEV_IOC_SEND_RESPONSE ioctl even in case of a
+ * broadcast write request; the kernel will then release the kernel-side pending
+ * request but will not actually send a response packet.
+ *
+ * In case of a write request to FCP_REQUEST or FCP_RESPONSE, the kernel already
+ * sent a write response immediately after the request was received; in this
+ * case the client must still call an %FW_CDEV_IOC_SEND_RESPONSE ioctl to
+ * release the kernel-side pending request, though another response won't be
+ * sent.
+ *
+ * If the client subsequently needs to initiate requests to the sender node of
+ * an &fw_cdev_event_request2, it needs to use a device file with matching
+ * card index, node ID, and generation for outbound requests.
+ */
+struct fw_cdev_event_request2 {
+       __u64 closure;
+       __u32 type;
+       __u32 tcode;
+       __u64 offset;
+       __u32 source_node_id;
+       __u32 destination_node_id;
+       __u32 card;
+       __u32 generation;
+       __u32 handle;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_iso_interrupt - Sent when an iso packet was completed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_ISO_INTERRUPT
+ * @cycle:     Cycle counter of the last completed packet
+ * @header_length: Total length of following headers, in bytes
+ * @header:    Stripped headers, if any
+ *
+ * This event is sent when the controller has completed an &fw_cdev_iso_packet
+ * with the %FW_CDEV_ISO_INTERRUPT bit set, when explicitly requested with
+ * %FW_CDEV_IOC_FLUSH_ISO, or when there have been so many completed packets
+ * without the interrupt bit set that the kernel's internal buffer for @header
+ * is about to overflow.  (In the last case, ABI versions < 5 drop header data
+ * up to the next interrupt packet.)
+ *
+ * Isochronous transmit events (context type %FW_CDEV_ISO_CONTEXT_TRANSMIT):
+ *
+ * In version 3 and some implementations of version 2 of the ABI, &header_length
+ * is a multiple of 4 and &header contains timestamps of all packets up until
+ * the interrupt packet.  The format of the timestamps is as described below for
+ * isochronous reception.  In version 1 of the ABI, &header_length was 0.
+ *
+ * Isochronous receive events (context type %FW_CDEV_ISO_CONTEXT_RECEIVE):
+ *
+ * The headers stripped of all packets up until and including the interrupt
+ * packet are returned in the @header field.  The amount of header data per
+ * packet is as specified at iso context creation by
+ * &fw_cdev_create_iso_context.header_size.
+ *
+ * Hence, _interrupt.header_length / _context.header_size is the number of
+ * packets received in this interrupt event.  The client can now iterate
+ * through the mmap()'ed DMA buffer according to this number of packets and
+ * to the buffer sizes as the client specified in &fw_cdev_queue_iso.
+ *
+ * Since version 2 of this ABI, the portion for each packet in _interrupt.header
+ * consists of the 1394 isochronous packet header, followed by a timestamp
+ * quadlet if &fw_cdev_create_iso_context.header_size > 4, followed by quadlets
+ * from the packet payload if &fw_cdev_create_iso_context.header_size > 8.
+ *
+ * Format of 1394 iso packet header:  16 bits data_length, 2 bits tag, 6 bits
+ * channel, 4 bits tcode, 4 bits sy, in big endian byte order.
+ * data_length is the actual received size of the packet without the four
+ * 1394 iso packet header bytes.
+ *
+ * Format of timestamp:  16 bits invalid, 3 bits cycleSeconds, 13 bits
+ * cycleCount, in big endian byte order.
+ *
+ * In version 1 of the ABI, no timestamp quadlet was inserted; instead, payload
+ * data followed directly after the 1394 is header if header_size > 4.
+ * Behaviour of ver. 1 of this ABI is no longer available since ABI ver. 2.
+ */
+struct fw_cdev_event_iso_interrupt {
+       __u64 closure;
+       __u32 type;
+       __u32 cycle;
+       __u32 header_length;
+       __u32 header[0];
+};
+
+/**
+ * struct fw_cdev_event_iso_interrupt_mc - An iso buffer chunk was completed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl
+ * @type:      %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * @completed: Offset into the receive buffer; data before this offset is valid
+ *
+ * This event is sent in multichannel contexts (context type
+ * %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL) for &fw_cdev_iso_packet buffer
+ * chunks that have been completely filled and that have the
+ * %FW_CDEV_ISO_INTERRUPT bit set, or when explicitly requested with
+ * %FW_CDEV_IOC_FLUSH_ISO.
+ *
+ * The buffer is continuously filled with the following data, per packet:
+ *  - the 1394 iso packet header as described at &fw_cdev_event_iso_interrupt,
+ *    but in little endian byte order,
+ *  - packet payload (as many bytes as specified in the data_length field of
+ *    the 1394 iso packet header) in big endian byte order,
+ *  - 0...3 padding bytes as needed to align the following trailer quadlet,
+ *  - trailer quadlet, containing the reception timestamp as described at
+ *    &fw_cdev_event_iso_interrupt, but in little endian byte order.
+ *
+ * Hence the per-packet size is data_length (rounded up to a multiple of 4) + 8.
+ * When processing the data, stop before a packet that would cross the
+ * @completed offset.
+ *
+ * A packet near the end of a buffer chunk will typically spill over into the
+ * next queued buffer chunk.  It is the responsibility of the client to check
+ * for this condition, assemble a broken-up packet from its parts, and not to
+ * re-queue any buffer chunks in which as yet unread packet parts reside.
+ */
+struct fw_cdev_event_iso_interrupt_mc {
+       __u64 closure;
+       __u32 type;
+       __u32 completed;
+};
+
+/**
+ * struct fw_cdev_event_iso_resource - Iso resources were allocated or freed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_IOC_(DE)ALLOCATE_ISO_RESOURCE(_ONCE) ioctl
+ * @type:      %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
+ *             %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
+ * @handle:    Reference by which an allocated resource can be deallocated
+ * @channel:   Isochronous channel which was (de)allocated, if any
+ * @bandwidth: Bandwidth allocation units which were (de)allocated, if any
+ *
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous
+ * resource was allocated at the IRM.  The client has to check @channel and
+ * @bandwidth for whether the allocation actually succeeded.
+ *
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous
+ * resource was deallocated at the IRM.  It is also sent when automatic
+ * reallocation after a bus reset failed.
+ *
+ * @channel is <0 if no channel was (de)allocated or if reallocation failed.
+ * @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed.
+ */
+struct fw_cdev_event_iso_resource {
+       __u64 closure;
+       __u32 type;
+       __u32 handle;
+       __s32 channel;
+       __s32 bandwidth;
+};
+
+/**
+ * struct fw_cdev_event_phy_packet - A PHY packet was transmitted or received
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_PHY_PACKET
+ *             or %FW_CDEV_IOC_RECEIVE_PHY_PACKETS ioctl
+ * @type:      %FW_CDEV_EVENT_PHY_PACKET_SENT or %..._RECEIVED
+ * @rcode:     %RCODE_..., indicates success or failure of transmission
+ * @length:    Data length in bytes
+ * @data:      Incoming data
+ *
+ * If @type is %FW_CDEV_EVENT_PHY_PACKET_SENT, @length is 0 and @data empty,
+ * except in case of a ping packet:  Then, @length is 4, and @data[0] is the
+ * ping time in 49.152MHz clocks if @rcode is %RCODE_COMPLETE.
+ *
+ * If @type is %FW_CDEV_EVENT_PHY_PACKET_RECEIVED, @length is 8 and @data
+ * consists of the two PHY packet quadlets, in host byte order.
+ */
+struct fw_cdev_event_phy_packet {
+       __u64 closure;
+       __u32 type;
+       __u32 rcode;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * union fw_cdev_event - Convenience union of fw_cdev_event_ types
+ * @common:            Valid for all types
+ * @bus_reset:         Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET
+ * @response:          Valid if @common.type == %FW_CDEV_EVENT_RESPONSE
+ * @request:           Valid if @common.type == %FW_CDEV_EVENT_REQUEST
+ * @request2:          Valid if @common.type == %FW_CDEV_EVENT_REQUEST2
+ * @iso_interrupt:     Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
+ * @iso_interrupt_mc:  Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * @iso_resource:      Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
+ *                             %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
+ * @phy_packet:                Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_PHY_PACKET_SENT or
+ *                             %FW_CDEV_EVENT_PHY_PACKET_RECEIVED
+ *
+ * Convenience union for userspace use.  Events could be read(2) into an
+ * appropriately aligned char buffer and then cast to this union for further
+ * processing.  Note that for a request, response or iso_interrupt event,
+ * the data[] or header[] may make the size of the full event larger than
+ * sizeof(union fw_cdev_event).  Also note that if you attempt to read(2)
+ * an event into a buffer that is not large enough for it, the data that does
+ * not fit will be discarded so that the next read(2) will return a new event.
+ */
+union fw_cdev_event {
+       struct fw_cdev_event_common             common;
+       struct fw_cdev_event_bus_reset          bus_reset;
+       struct fw_cdev_event_response           response;
+       struct fw_cdev_event_request            request;
+       struct fw_cdev_event_request2           request2;               /* added in 2.6.36 */
+       struct fw_cdev_event_iso_interrupt      iso_interrupt;
+       struct fw_cdev_event_iso_interrupt_mc   iso_interrupt_mc;       /* added in 2.6.36 */
+       struct fw_cdev_event_iso_resource       iso_resource;           /* added in 2.6.30 */
+       struct fw_cdev_event_phy_packet         phy_packet;             /* added in 2.6.36 */
+};
+
+/* available since kernel version 2.6.22 */
+#define FW_CDEV_IOC_GET_INFO           _IOWR('#', 0x00, struct fw_cdev_get_info)
+#define FW_CDEV_IOC_SEND_REQUEST        _IOW('#', 0x01, struct fw_cdev_send_request)
+#define FW_CDEV_IOC_ALLOCATE           _IOWR('#', 0x02, struct fw_cdev_allocate)
+#define FW_CDEV_IOC_DEALLOCATE          _IOW('#', 0x03, struct fw_cdev_deallocate)
+#define FW_CDEV_IOC_SEND_RESPONSE       _IOW('#', 0x04, struct fw_cdev_send_response)
+#define FW_CDEV_IOC_INITIATE_BUS_RESET  _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
+#define FW_CDEV_IOC_ADD_DESCRIPTOR     _IOWR('#', 0x06, struct fw_cdev_add_descriptor)
+#define FW_CDEV_IOC_REMOVE_DESCRIPTOR   _IOW('#', 0x07, struct fw_cdev_remove_descriptor)
+#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context)
+#define FW_CDEV_IOC_QUEUE_ISO          _IOWR('#', 0x09, struct fw_cdev_queue_iso)
+#define FW_CDEV_IOC_START_ISO           _IOW('#', 0x0a, struct fw_cdev_start_iso)
+#define FW_CDEV_IOC_STOP_ISO            _IOW('#', 0x0b, struct fw_cdev_stop_iso)
+
+/* available since kernel version 2.6.24 */
+#define FW_CDEV_IOC_GET_CYCLE_TIMER     _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
+
+/* available since kernel version 2.6.30 */
+#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE       _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE      _IOW('#', 0x0e, struct fw_cdev_deallocate)
+#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE   _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_GET_SPEED                     _IO('#', 0x11) /* returns speed code */
+#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST       _IOW('#', 0x12, struct fw_cdev_send_request)
+#define FW_CDEV_IOC_SEND_STREAM_PACKET           _IOW('#', 0x13, struct fw_cdev_send_stream_packet)
+
+/* available since kernel version 2.6.34 */
+#define FW_CDEV_IOC_GET_CYCLE_TIMER2   _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2)
+
+/* available since kernel version 2.6.36 */
+#define FW_CDEV_IOC_SEND_PHY_PACKET    _IOWR('#', 0x15, struct fw_cdev_send_phy_packet)
+#define FW_CDEV_IOC_RECEIVE_PHY_PACKETS _IOW('#', 0x16, struct fw_cdev_receive_phy_packets)
+#define FW_CDEV_IOC_SET_ISO_CHANNELS    _IOW('#', 0x17, struct fw_cdev_set_iso_channels)
+
+/* available since kernel version 3.4 */
+#define FW_CDEV_IOC_FLUSH_ISO           _IOW('#', 0x18, struct fw_cdev_flush_iso)
+
+/*
+ * ABI version history
+ *  1  (2.6.22)  - initial version
+ *     (2.6.24)  - added %FW_CDEV_IOC_GET_CYCLE_TIMER
+ *  2  (2.6.30)  - changed &fw_cdev_event_iso_interrupt.header if
+ *                 &fw_cdev_create_iso_context.header_size is 8 or more
+ *               - added %FW_CDEV_IOC_*_ISO_RESOURCE*,
+ *                 %FW_CDEV_IOC_GET_SPEED, %FW_CDEV_IOC_SEND_BROADCAST_REQUEST,
+ *                 %FW_CDEV_IOC_SEND_STREAM_PACKET
+ *     (2.6.32)  - added time stamp to xmit &fw_cdev_event_iso_interrupt
+ *     (2.6.33)  - IR has always packet-per-buffer semantics now, not one of
+ *                 dual-buffer or packet-per-buffer depending on hardware
+ *               - shared use and auto-response for FCP registers
+ *  3  (2.6.34)  - made &fw_cdev_get_cycle_timer reliable
+ *               - added %FW_CDEV_IOC_GET_CYCLE_TIMER2
+ *  4  (2.6.36)  - added %FW_CDEV_EVENT_REQUEST2, %FW_CDEV_EVENT_PHY_PACKET_*,
+ *                 and &fw_cdev_allocate.region_end
+ *               - implemented &fw_cdev_event_bus_reset.bm_node_id
+ *               - added %FW_CDEV_IOC_SEND_PHY_PACKET, _RECEIVE_PHY_PACKETS
+ *               - added %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL,
+ *                 %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL, and
+ *                 %FW_CDEV_IOC_SET_ISO_CHANNELS
+ *  5  (3.4)     - send %FW_CDEV_EVENT_ISO_INTERRUPT events when needed to
+ *                 avoid dropping data
+ *               - added %FW_CDEV_IOC_FLUSH_ISO
+ */
+
+/**
+ * struct fw_cdev_get_info - General purpose information ioctl
+ * @version:   The version field is just a running serial number.  Both an
+ *             input parameter (ABI version implemented by the client) and
+ *             output parameter (ABI version implemented by the kernel).
+ *             A client shall fill in the ABI @version for which the client
+ *             was implemented.  This is necessary for forward compatibility.
+ * @rom_length:        If @rom is non-zero, up to @rom_length bytes of Configuration
+ *             ROM will be copied into that user space address.  In either
+ *             case, @rom_length is updated with the actual length of the
+ *             Configuration ROM.
+ * @rom:       If non-zero, address of a buffer to be filled by a copy of the
+ *             device's Configuration ROM
+ * @bus_reset: If non-zero, address of a buffer to be filled by a
+ *             &struct fw_cdev_event_bus_reset with the current state
+ *             of the bus.  This does not cause a bus reset to happen.
+ * @bus_reset_closure: Value of &closure in this and subsequent bus reset events
+ * @card:      The index of the card this device belongs to
+ *
+ * The %FW_CDEV_IOC_GET_INFO ioctl is usually the very first one which a client
+ * performs right after it opened a /dev/fw* file.
+ *
+ * As a side effect, reception of %FW_CDEV_EVENT_BUS_RESET events to be read(2)
+ * is started by this ioctl.
+ */
+struct fw_cdev_get_info {
+       __u32 version;
+       __u32 rom_length;
+       __u64 rom;
+       __u64 bus_reset;
+       __u64 bus_reset_closure;
+       __u32 card;
+};
+
+/**
+ * struct fw_cdev_send_request - Send an asynchronous request packet
+ * @tcode:     Transaction code of the request
+ * @length:    Length of outgoing payload, in bytes
+ * @offset:    48-bit offset at destination node
+ * @closure:   Passed back to userspace in the response event
+ * @data:      Userspace pointer to payload
+ * @generation:        The bus generation where packet is valid
+ *
+ * Send a request to the device.  This ioctl implements all outgoing requests.
+ * Both quadlet and block request specify the payload as a pointer to the data
+ * in the @data field.  Once the transaction completes, the kernel writes an
+ * &fw_cdev_event_response event back.  The @closure field is passed back to
+ * user space in the response event.
+ */
+struct fw_cdev_send_request {
+       __u32 tcode;
+       __u32 length;
+       __u64 offset;
+       __u64 closure;
+       __u64 data;
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_send_response - Send an asynchronous response packet
+ * @rcode:     Response code as determined by the userspace handler
+ * @length:    Length of outgoing payload, in bytes
+ * @data:      Userspace pointer to payload
+ * @handle:    The handle from the &fw_cdev_event_request
+ *
+ * Send a response to an incoming request.  By setting up an address range using
+ * the %FW_CDEV_IOC_ALLOCATE ioctl, userspace can listen for incoming requests.  An
+ * incoming request will generate an %FW_CDEV_EVENT_REQUEST, and userspace must
+ * send a reply using this ioctl.  The event has a handle to the kernel-side
+ * pending transaction, which should be used with this ioctl.
+ */
+struct fw_cdev_send_response {
+       __u32 rcode;
+       __u32 length;
+       __u64 data;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_allocate - Allocate a CSR in an address range
+ * @offset:    Start offset of the address range
+ * @closure:   To be passed back to userspace in request events
+ * @length:    Length of the CSR, in bytes
+ * @handle:    Handle to the allocation, written by the kernel
+ * @region_end:        First address above the address range (added in ABI v4, 2.6.36)
+ *
+ * Allocate an address range in the 48-bit address space on the local node
+ * (the controller).  This allows userspace to listen for requests with an
+ * offset within that address range.  Every time when the kernel receives a
+ * request within the range, an &fw_cdev_event_request2 event will be emitted.
+ * (If the kernel or the client implements ABI version <= 3, an
+ * &fw_cdev_event_request will be generated instead.)
+ *
+ * The @closure field is passed back to userspace in these request events.
+ * The @handle field is an out parameter, returning a handle to the allocated
+ * range to be used for later deallocation of the range.
+ *
+ * The address range is allocated on all local nodes.  The address allocation
+ * is exclusive except for the FCP command and response registers.  If an
+ * exclusive address region is already in use, the ioctl fails with errno set
+ * to %EBUSY.
+ *
+ * If kernel and client implement ABI version >= 4, the kernel looks up a free
+ * spot of size @length inside [@offset..@region_end) and, if found, writes
+ * the start address of the new CSR back in @offset.  I.e. @offset is an
+ * in and out parameter.  If this automatic placement of a CSR in a bigger
+ * address range is not desired, the client simply needs to set @region_end
+ * = @offset + @length.
+ *
+ * If the kernel or the client implements ABI version <= 3, @region_end is
+ * ignored and effectively assumed to be @offset + @length.
+ *
+ * @region_end is only present in a kernel header >= 2.6.36.  If necessary,
+ * this can for example be tested by #ifdef FW_CDEV_EVENT_REQUEST2.
+ */
+struct fw_cdev_allocate {
+       __u64 offset;
+       __u64 closure;
+       __u32 length;
+       __u32 handle;
+       __u64 region_end;       /* available since kernel version 2.6.36 */
+};
+
+/**
+ * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource
+ * @handle:    Handle to the address range or iso resource, as returned by the
+ *             kernel when the range or resource was allocated
+ */
+struct fw_cdev_deallocate {
+       __u32 handle;
+};
+
+#define FW_CDEV_LONG_RESET     0
+#define FW_CDEV_SHORT_RESET    1
+
+/**
+ * struct fw_cdev_initiate_bus_reset - Initiate a bus reset
+ * @type:      %FW_CDEV_SHORT_RESET or %FW_CDEV_LONG_RESET
+ *
+ * Initiate a bus reset for the bus this device is on.  The bus reset can be
+ * either the original (long) bus reset or the arbitrated (short) bus reset
+ * introduced in 1394a-2000.
+ *
+ * The ioctl returns immediately.  A subsequent &fw_cdev_event_bus_reset
+ * indicates when the reset actually happened.  Since ABI v4, this may be
+ * considerably later than the ioctl because the kernel ensures a grace period
+ * between subsequent bus resets as per IEEE 1394 bus management specification.
+ */
+struct fw_cdev_initiate_bus_reset {
+       __u32 type;
+};
+
+/**
+ * struct fw_cdev_add_descriptor - Add contents to the local node's config ROM
+ * @immediate: If non-zero, immediate key to insert before pointer
+ * @key:       Upper 8 bits of root directory pointer
+ * @data:      Userspace pointer to contents of descriptor block
+ * @length:    Length of descriptor block data, in quadlets
+ * @handle:    Handle to the descriptor, written by the kernel
+ *
+ * Add a descriptor block and optionally a preceding immediate key to the local
+ * node's Configuration ROM.
+ *
+ * The @key field specifies the upper 8 bits of the descriptor root directory
+ * pointer and the @data and @length fields specify the contents. The @key
+ * should be of the form 0xXX000000. The offset part of the root directory entry
+ * will be filled in by the kernel.
+ *
+ * If not 0, the @immediate field specifies an immediate key which will be
+ * inserted before the root directory pointer.
+ *
+ * @immediate, @key, and @data array elements are CPU-endian quadlets.
+ *
+ * If successful, the kernel adds the descriptor and writes back a @handle to
+ * the kernel-side object to be used for later removal of the descriptor block
+ * and immediate key.  The kernel will also generate a bus reset to signal the
+ * change of the Configuration ROM to other nodes.
+ *
+ * This ioctl affects the Configuration ROMs of all local nodes.
+ * The ioctl only succeeds on device files which represent a local node.
+ */
+struct fw_cdev_add_descriptor {
+       __u32 immediate;
+       __u32 key;
+       __u64 data;
+       __u32 length;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_remove_descriptor - Remove contents from the Configuration ROM
+ * @handle:    Handle to the descriptor, as returned by the kernel when the
+ *             descriptor was added
+ *
+ * Remove a descriptor block and accompanying immediate key from the local
+ * nodes' Configuration ROMs.  The kernel will also generate a bus reset to
+ * signal the change of the Configuration ROM to other nodes.
+ */
+struct fw_cdev_remove_descriptor {
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_CONTEXT_TRANSMIT                   0
+#define FW_CDEV_ISO_CONTEXT_RECEIVE                    1
+#define FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL       2 /* added in 2.6.36 */
+
+/**
+ * struct fw_cdev_create_iso_context - Create a context for isochronous I/O
+ * @type:      %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE or
+ *             %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL
+ * @header_size: Header size to strip in single-channel reception
+ * @channel:   Channel to bind to in single-channel reception or transmission
+ * @speed:     Transmission speed
+ * @closure:   To be returned in &fw_cdev_event_iso_interrupt or
+ *             &fw_cdev_event_iso_interrupt_multichannel
+ * @handle:    Handle to context, written back by kernel
+ *
+ * Prior to sending or receiving isochronous I/O, a context must be created.
+ * The context records information about the transmit or receive configuration
+ * and typically maps to an underlying hardware resource.  A context is set up
+ * for either sending or receiving.  It is bound to a specific isochronous
+ * @channel.
+ *
+ * In case of multichannel reception, @header_size and @channel are ignored
+ * and the channels are selected by %FW_CDEV_IOC_SET_ISO_CHANNELS.
+ *
+ * For %FW_CDEV_ISO_CONTEXT_RECEIVE contexts, @header_size must be at least 4
+ * and must be a multiple of 4.  It is ignored in other context types.
+ *
+ * @speed is ignored in receive context types.
+ *
+ * If a context was successfully created, the kernel writes back a handle to the
+ * context, which must be passed in for subsequent operations on that context.
+ *
+ * Limitations:
+ * No more than one iso context can be created per fd.
+ * The total number of contexts that all userspace and kernelspace drivers can
+ * create on a card at a time is a hardware limit, typically 4 or 8 contexts per
+ * direction, and of them at most one multichannel receive context.
+ */
+struct fw_cdev_create_iso_context {
+       __u32 type;
+       __u32 header_size;
+       __u32 channel;
+       __u32 speed;
+       __u64 closure;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_set_iso_channels - Select channels in multichannel reception
+ * @channels:  Bitmask of channels to listen to
+ * @handle:    Handle of the mutichannel receive context
+ *
+ * @channels is the bitwise or of 1ULL << n for each channel n to listen to.
+ *
+ * The ioctl fails with errno %EBUSY if there is already another receive context
+ * on a channel in @channels.  In that case, the bitmask of all unoccupied
+ * channels is returned in @channels.
+ */
+struct fw_cdev_set_iso_channels {
+       __u64 channels;
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_PAYLOAD_LENGTH(v)  (v)
+#define FW_CDEV_ISO_INTERRUPT          (1 << 16)
+#define FW_CDEV_ISO_SKIP               (1 << 17)
+#define FW_CDEV_ISO_SYNC               (1 << 17)
+#define FW_CDEV_ISO_TAG(v)             ((v) << 18)
+#define FW_CDEV_ISO_SY(v)              ((v) << 20)
+#define FW_CDEV_ISO_HEADER_LENGTH(v)   ((v) << 24)
+
+/**
+ * struct fw_cdev_iso_packet - Isochronous packet
+ * @control:   Contains the header length (8 uppermost bits),
+ *             the sy field (4 bits), the tag field (2 bits), a sync flag
+ *             or a skip flag (1 bit), an interrupt flag (1 bit), and the
+ *             payload length (16 lowermost bits)
+ * @header:    Header and payload in case of a transmit context.
+ *
+ * &struct fw_cdev_iso_packet is used to describe isochronous packet queues.
+ * Use the FW_CDEV_ISO_ macros to fill in @control.
+ * The @header array is empty in case of receive contexts.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_TRANSMIT:
+ *
+ * @control.HEADER_LENGTH must be a multiple of 4.  It specifies the numbers of
+ * bytes in @header that will be prepended to the packet's payload.  These bytes
+ * are copied into the kernel and will not be accessed after the ioctl has
+ * returned.
+ *
+ * The @control.SY and TAG fields are copied to the iso packet header.  These
+ * fields are specified by IEEE 1394a and IEC 61883-1.
+ *
+ * The @control.SKIP flag specifies that no packet is to be sent in a frame.
+ * When using this, all other fields except @control.INTERRUPT must be zero.
+ *
+ * When a packet with the @control.INTERRUPT flag set has been completed, an
+ * &fw_cdev_event_iso_interrupt event will be sent.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE:
+ *
+ * @control.HEADER_LENGTH must be a multiple of the context's header_size.
+ * If the HEADER_LENGTH is larger than the context's header_size, multiple
+ * packets are queued for this entry.
+ *
+ * The @control.SY and TAG fields are ignored.
+ *
+ * If the @control.SYNC flag is set, the context drops all packets until a
+ * packet with a sy field is received which matches &fw_cdev_start_iso.sync.
+ *
+ * @control.PAYLOAD_LENGTH defines how many payload bytes can be received for
+ * one packet (in addition to payload quadlets that have been defined as headers
+ * and are stripped and returned in the &fw_cdev_event_iso_interrupt structure).
+ * If more bytes are received, the additional bytes are dropped.  If less bytes
+ * are received, the remaining bytes in this part of the payload buffer will not
+ * be written to, not even by the next packet.  I.e., packets received in
+ * consecutive frames will not necessarily be consecutive in memory.  If an
+ * entry has queued multiple packets, the PAYLOAD_LENGTH is divided equally
+ * among them.
+ *
+ * When a packet with the @control.INTERRUPT flag set has been completed, an
+ * &fw_cdev_event_iso_interrupt event will be sent.  An entry that has queued
+ * multiple receive packets is completed when its last packet is completed.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL:
+ *
+ * Here, &fw_cdev_iso_packet would be more aptly named _iso_buffer_chunk since
+ * it specifies a chunk of the mmap()'ed buffer, while the number and alignment
+ * of packets to be placed into the buffer chunk is not known beforehand.
+ *
+ * @control.PAYLOAD_LENGTH is the size of the buffer chunk and specifies room
+ * for header, payload, padding, and trailer bytes of one or more packets.
+ * It must be a multiple of 4.
+ *
+ * @control.HEADER_LENGTH, TAG and SY are ignored.  SYNC is treated as described
+ * for single-channel reception.
+ *
+ * When a buffer chunk with the @control.INTERRUPT flag set has been filled
+ * entirely, an &fw_cdev_event_iso_interrupt_mc event will be sent.
+ */
+struct fw_cdev_iso_packet {
+       __u32 control;
+       __u32 header[0];
+};
+
+/**
+ * struct fw_cdev_queue_iso - Queue isochronous packets for I/O
+ * @packets:   Userspace pointer to an array of &fw_cdev_iso_packet
+ * @data:      Pointer into mmap()'ed payload buffer
+ * @size:      Size of the @packets array, in bytes
+ * @handle:    Isochronous context handle
+ *
+ * Queue a number of isochronous packets for reception or transmission.
+ * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs,
+ * which describe how to transmit from or receive into a contiguous region
+ * of a mmap()'ed payload buffer.  As part of transmit packet descriptors,
+ * a series of headers can be supplied, which will be prepended to the
+ * payload during DMA.
+ *
+ * The kernel may or may not queue all packets, but will write back updated
+ * values of the @packets, @data and @size fields, so the ioctl can be
+ * resubmitted easily.
+ *
+ * In case of a multichannel receive context, @data must be quadlet-aligned
+ * relative to the buffer start.
+ */
+struct fw_cdev_queue_iso {
+       __u64 packets;
+       __u64 data;
+       __u32 size;
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG0          1
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG1          2
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG2          4
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG3          8
+#define FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS     15
+
+/**
+ * struct fw_cdev_start_iso - Start an isochronous transmission or reception
+ * @cycle:     Cycle in which to start I/O.  If @cycle is greater than or
+ *             equal to 0, the I/O will start on that cycle.
+ * @sync:      Determines the value to wait for for receive packets that have
+ *             the %FW_CDEV_ISO_SYNC bit set
+ * @tags:      Tag filter bit mask.  Only valid for isochronous reception.
+ *             Determines the tag values for which packets will be accepted.
+ *             Use FW_CDEV_ISO_CONTEXT_MATCH_ macros to set @tags.
+ * @handle:    Isochronous context handle within which to transmit or receive
+ */
+struct fw_cdev_start_iso {
+       __s32 cycle;
+       __u32 sync;
+       __u32 tags;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_stop_iso - Stop an isochronous transmission or reception
+ * @handle:    Handle of isochronous context to stop
+ */
+struct fw_cdev_stop_iso {
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_flush_iso - flush completed iso packets
+ * @handle:    handle of isochronous context to flush
+ *
+ * For %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE contexts,
+ * report any completed packets.
+ *
+ * For %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL contexts, report the current
+ * offset in the receive buffer, if it has changed; this is typically in the
+ * middle of some buffer chunk.
+ *
+ * Any %FW_CDEV_EVENT_ISO_INTERRUPT or %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * events generated by this ioctl are sent synchronously, i.e., are available
+ * for reading from the file descriptor when this ioctl returns.
+ */
+struct fw_cdev_flush_iso {
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_get_cycle_timer - read cycle timer register
+ * @local_time:   system time, in microseconds since the Epoch
+ * @cycle_timer:  Cycle Time register contents
+ *
+ * Same as %FW_CDEV_IOC_GET_CYCLE_TIMER2, but fixed to use %CLOCK_REALTIME
+ * and only with microseconds resolution.
+ *
+ * In version 1 and 2 of the ABI, this ioctl returned unreliable (non-
+ * monotonic) @cycle_timer values on certain controllers.
+ */
+struct fw_cdev_get_cycle_timer {
+       __u64 local_time;
+       __u32 cycle_timer;
+};
+
+/**
+ * struct fw_cdev_get_cycle_timer2 - read cycle timer register
+ * @tv_sec:       system time, seconds
+ * @tv_nsec:      system time, sub-seconds part in nanoseconds
+ * @clk_id:       input parameter, clock from which to get the system time
+ * @cycle_timer:  Cycle Time register contents
+ *
+ * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 ioctl reads the isochronous cycle timer
+ * and also the system clock.  This allows to correlate reception time of
+ * isochronous packets with system time.
+ *
+ * @clk_id lets you choose a clock like with POSIX' clock_gettime function.
+ * Supported @clk_id values are POSIX' %CLOCK_REALTIME and %CLOCK_MONOTONIC
+ * and Linux' %CLOCK_MONOTONIC_RAW.
+ *
+ * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and
+ * 12 bits cycleOffset, in host byte order.  Cf. the Cycle Time register
+ * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394.
+ */
+struct fw_cdev_get_cycle_timer2 {
+       __s64 tv_sec;
+       __s32 tv_nsec;
+       __s32 clk_id;
+       __u32 cycle_timer;
+};
+
+/**
+ * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth
+ * @closure:   Passed back to userspace in corresponding iso resource events
+ * @channels:  Isochronous channels of which one is to be (de)allocated
+ * @bandwidth: Isochronous bandwidth units to be (de)allocated
+ * @handle:    Handle to the allocation, written by the kernel (only valid in
+ *             case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls)
+ *
+ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an
+ * isochronous channel and/or of isochronous bandwidth at the isochronous
+ * resource manager (IRM).  Only one of the channels specified in @channels is
+ * allocated.  An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after
+ * communication with the IRM, indicating success or failure in the event data.
+ * The kernel will automatically reallocate the resources after bus resets.
+ * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event
+ * will be sent.  The kernel will also automatically deallocate the resources
+ * when the file descriptor is closed.
+ *
+ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate
+ * deallocation of resources which were allocated as described above.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
+ *
+ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation
+ * without automatic re- or deallocation.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation,
+ * indicating success or failure in its data.
+ *
+ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like
+ * %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed
+ * instead of allocated.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
+ *
+ * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources
+ * for the lifetime of the fd or @handle.
+ * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources
+ * for the duration of a bus generation.
+ *
+ * @channels is a host-endian bitfield with the least significant bit
+ * representing channel 0 and the most significant bit representing channel 63:
+ * 1ULL << c for each channel c that is a candidate for (de)allocation.
+ *
+ * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send
+ * one quadlet of data (payload or header data) at speed S1600.
+ */
+struct fw_cdev_allocate_iso_resource {
+       __u64 closure;
+       __u64 channels;
+       __u32 bandwidth;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_send_stream_packet - send an asynchronous stream packet
+ * @length:    Length of outgoing payload, in bytes
+ * @tag:       Data format tag
+ * @channel:   Isochronous channel to transmit to
+ * @sy:                Synchronization code
+ * @closure:   Passed back to userspace in the response event
+ * @data:      Userspace pointer to payload
+ * @generation:        The bus generation where packet is valid
+ * @speed:     Speed to transmit at
+ *
+ * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet
+ * to every device which is listening to the specified channel.  The kernel
+ * writes an &fw_cdev_event_response event which indicates success or failure of
+ * the transmission.
+ */
+struct fw_cdev_send_stream_packet {
+       __u32 length;
+       __u32 tag;
+       __u32 channel;
+       __u32 sy;
+       __u64 closure;
+       __u64 data;
+       __u32 generation;
+       __u32 speed;
+};
+
+/**
+ * struct fw_cdev_send_phy_packet - send a PHY packet
+ * @closure:   Passed back to userspace in the PHY-packet-sent event
+ * @data:      First and second quadlet of the PHY packet
+ * @generation:        The bus generation where packet is valid
+ *
+ * The %FW_CDEV_IOC_SEND_PHY_PACKET ioctl sends a PHY packet to all nodes
+ * on the same card as this device.  After transmission, an
+ * %FW_CDEV_EVENT_PHY_PACKET_SENT event is generated.
+ *
+ * The payload @data[] shall be specified in host byte order.  Usually,
+ * @data[1] needs to be the bitwise inverse of @data[0].  VersaPHY packets
+ * are an exception to this rule.
+ *
+ * The ioctl is only permitted on device files which represent a local node.
+ */
+struct fw_cdev_send_phy_packet {
+       __u64 closure;
+       __u32 data[2];
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_receive_phy_packets - start reception of PHY packets
+ * @closure: Passed back to userspace in phy packet events
+ *
+ * This ioctl activates issuing of %FW_CDEV_EVENT_PHY_PACKET_RECEIVED due to
+ * incoming PHY packets from any node on the same bus as the device.
+ *
+ * The ioctl is only permitted on device files which represent a local node.
+ */
+struct fw_cdev_receive_phy_packets {
+       __u64 closure;
+};
+
+#define FW_CDEV_VERSION 3 /* Meaningless legacy macro; don't use it. */
+
+#endif /* _LINUX_FIREWIRE_CDEV_H */
diff --git a/lib/libdss-include/include/linux/firewire-constants.h b/lib/libdss-include/include/linux/firewire-constants.h
new file mode 100644 (file)
index 0000000..9b4bb5f
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * IEEE 1394 constants.
+ *
+ * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _LINUX_FIREWIRE_CONSTANTS_H
+#define _LINUX_FIREWIRE_CONSTANTS_H
+
+#define TCODE_WRITE_QUADLET_REQUEST    0x0
+#define TCODE_WRITE_BLOCK_REQUEST      0x1
+#define TCODE_WRITE_RESPONSE           0x2
+#define TCODE_READ_QUADLET_REQUEST     0x4
+#define TCODE_READ_BLOCK_REQUEST       0x5
+#define TCODE_READ_QUADLET_RESPONSE    0x6
+#define TCODE_READ_BLOCK_RESPONSE      0x7
+#define TCODE_CYCLE_START              0x8
+#define TCODE_LOCK_REQUEST             0x9
+#define TCODE_STREAM_DATA              0xa
+#define TCODE_LOCK_RESPONSE            0xb
+
+#define EXTCODE_MASK_SWAP              0x1
+#define EXTCODE_COMPARE_SWAP           0x2
+#define EXTCODE_FETCH_ADD              0x3
+#define EXTCODE_LITTLE_ADD             0x4
+#define EXTCODE_BOUNDED_ADD            0x5
+#define EXTCODE_WRAP_ADD               0x6
+#define EXTCODE_VENDOR_DEPENDENT       0x7
+
+/* Linux firewire-core (Juju) specific tcodes */
+#define TCODE_LOCK_MASK_SWAP           (0x10 | EXTCODE_MASK_SWAP)
+#define TCODE_LOCK_COMPARE_SWAP                (0x10 | EXTCODE_COMPARE_SWAP)
+#define TCODE_LOCK_FETCH_ADD           (0x10 | EXTCODE_FETCH_ADD)
+#define TCODE_LOCK_LITTLE_ADD          (0x10 | EXTCODE_LITTLE_ADD)
+#define TCODE_LOCK_BOUNDED_ADD         (0x10 | EXTCODE_BOUNDED_ADD)
+#define TCODE_LOCK_WRAP_ADD            (0x10 | EXTCODE_WRAP_ADD)
+#define TCODE_LOCK_VENDOR_DEPENDENT    (0x10 | EXTCODE_VENDOR_DEPENDENT)
+
+#define RCODE_COMPLETE                 0x0
+#define RCODE_CONFLICT_ERROR           0x4
+#define RCODE_DATA_ERROR               0x5
+#define RCODE_TYPE_ERROR               0x6
+#define RCODE_ADDRESS_ERROR            0x7
+
+/* Linux firewire-core (Juju) specific rcodes */
+#define RCODE_SEND_ERROR               0x10
+#define RCODE_CANCELLED                        0x11
+#define RCODE_BUSY                     0x12
+#define RCODE_GENERATION               0x13
+#define RCODE_NO_ACK                   0x14
+
+#define SCODE_100                      0x0
+#define SCODE_200                      0x1
+#define SCODE_400                      0x2
+#define SCODE_800                      0x3
+#define SCODE_1600                     0x4
+#define SCODE_3200                     0x5
+#define SCODE_BETA                     0x3
+
+#define ACK_COMPLETE                   0x1
+#define ACK_PENDING                    0x2
+#define ACK_BUSY_X                     0x4
+#define ACK_BUSY_A                     0x5
+#define ACK_BUSY_B                     0x6
+#define ACK_DATA_ERROR                 0xd
+#define ACK_TYPE_ERROR                 0xe
+
+#define RETRY_1                                0x00
+#define RETRY_X                                0x01
+#define RETRY_A                                0x02
+#define RETRY_B                                0x03
+
+#endif /* _LINUX_FIREWIRE_CONSTANTS_H */
diff --git a/lib/libdss-include/include/linux/flat.h b/lib/libdss-include/include/linux/flat.h
new file mode 100644 (file)
index 0000000..8351bc7
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2002-2003  David McCullough <davidm@snapgear.com>
+ * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
+ *                          The Silver Hammer Group, Ltd.
+ *
+ * This file provides the definitions and structures needed to
+ * support uClinux flat-format executables.
+ */
+
+#ifndef _LINUX_FLAT_H
+#define _LINUX_FLAT_H
+
+
+#define        FLAT_VERSION                    0x00000004L
+
+#ifdef CONFIG_BINFMT_SHARED_FLAT
+#define        MAX_SHARED_LIBS                 (4)
+#else
+#define        MAX_SHARED_LIBS                 (1)
+#endif
+
+/*
+ * To make everything easier to port and manage cross platform
+ * development,  all fields are in network byte order.
+ */
+
+struct flat_hdr {
+       char magic[4];
+       unsigned long rev;          /* version (as above) */
+       unsigned long entry;        /* Offset of first executable instruction
+                                      with text segment from beginning of file */
+       unsigned long data_start;   /* Offset of data segment from beginning of
+                                      file */
+       unsigned long data_end;     /* Offset of end of data segment
+                                      from beginning of file */
+       unsigned long bss_end;      /* Offset of end of bss segment from beginning
+                                      of file */
+
+       /* (It is assumed that data_end through bss_end forms the bss segment.) */
+
+       unsigned long stack_size;   /* Size of stack, in bytes */
+       unsigned long reloc_start;  /* Offset of relocation records from
+                                      beginning of file */
+       unsigned long reloc_count;  /* Number of relocation records */
+       unsigned long flags;       
+       unsigned long build_date;   /* When the program/library was built */
+       unsigned long filler[5];    /* Reservered, set to zero */
+};
+
+#define FLAT_FLAG_RAM    0x0001 /* load program entirely into RAM */
+#define FLAT_FLAG_GOTPIC 0x0002 /* program is PIC with GOT */
+#define FLAT_FLAG_GZIP   0x0004 /* all but the header is compressed */
+#define FLAT_FLAG_GZDATA 0x0008 /* only data/relocs are compressed (for XIP) */
+#define FLAT_FLAG_KTRACE 0x0010 /* output useful kernel trace for debugging */
+
+
+
+#endif /* _LINUX_FLAT_H */
diff --git a/lib/libdss-include/include/linux/fou.h b/lib/libdss-include/include/linux/fou.h
new file mode 100644 (file)
index 0000000..744c323
--- /dev/null
@@ -0,0 +1,41 @@
+/* fou.h - FOU Interface */
+
+#ifndef _LINUX_FOU_H
+#define _LINUX_FOU_H
+
+/* NETLINK_GENERIC related info
+ */
+#define FOU_GENL_NAME          "fou"
+#define FOU_GENL_VERSION       0x1
+
+enum {
+       FOU_ATTR_UNSPEC,
+       FOU_ATTR_PORT,                          /* u16 */
+       FOU_ATTR_AF,                            /* u8 */
+       FOU_ATTR_IPPROTO,                       /* u8 */
+       FOU_ATTR_TYPE,                          /* u8 */
+       FOU_ATTR_REMCSUM_NOPARTIAL,             /* flag */
+
+       __FOU_ATTR_MAX,
+};
+
+#define FOU_ATTR_MAX           (__FOU_ATTR_MAX - 1)
+
+enum {
+       FOU_CMD_UNSPEC,
+       FOU_CMD_ADD,
+       FOU_CMD_DEL,
+       FOU_CMD_GET,
+
+       __FOU_CMD_MAX,
+};
+
+enum {
+       FOU_ENCAP_UNSPEC,
+       FOU_ENCAP_DIRECT,
+       FOU_ENCAP_GUE,
+};
+
+#define FOU_CMD_MAX    (__FOU_CMD_MAX - 1)
+
+#endif /* _LINUX_FOU_H */
diff --git a/lib/libdss-include/include/linux/fs.h b/lib/libdss-include/include/linux/fs.h
new file mode 100644 (file)
index 0000000..d75c7ec
--- /dev/null
@@ -0,0 +1,211 @@
+#ifndef _LINUX_FS_H
+#define _LINUX_FS_H
+
+/*
+ * This file has definitions for some important file table
+ * structures etc.
+ */
+
+#include <linux/limits.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
+ * the file limit at runtime and only root can increase the per-process
+ * nr_file rlimit, so it's safe to set up a ridiculously high absolute
+ * upper limit on files-per-process.
+ *
+ * Some programs (notably those using select()) may have to be 
+ * recompiled to take full advantage of the new limits..  
+ */
+
+/* Fixed constants first: */
+#undef NR_OPEN
+#define INR_OPEN_CUR 1024      /* Initial setting for nfile rlimits */
+#define INR_OPEN_MAX 4096      /* Hard limit for nfile rlimits */
+
+#define BLOCK_SIZE_BITS 10
+#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
+
+#define SEEK_SET       0       /* seek relative to beginning of file */
+#define SEEK_CUR       1       /* seek relative to current file position */
+#define SEEK_END       2       /* seek relative to end of file */
+#define SEEK_DATA      3       /* seek to the next data */
+#define SEEK_HOLE      4       /* seek to the next hole */
+#define SEEK_MAX       SEEK_HOLE
+
+#define RENAME_NOREPLACE       (1 << 0)        /* Don't overwrite target */
+#define RENAME_EXCHANGE                (1 << 1)        /* Exchange source and dest */
+#define RENAME_WHITEOUT                (1 << 2)        /* Whiteout source */
+
+struct fstrim_range {
+       __u64 start;
+       __u64 len;
+       __u64 minlen;
+};
+
+/* And dynamically-tunable limits and defaults: */
+struct files_stat_struct {
+       unsigned long nr_files;         /* read only */
+       unsigned long nr_free_files;    /* read only */
+       unsigned long max_files;                /* tunable */
+};
+
+struct inodes_stat_t {
+       long nr_inodes;
+       long nr_unused;
+       long dummy[5];          /* padding for sysctl ABI compatibility */
+};
+
+
+#define NR_FILE  8192  /* this can well be larger on a larger system */
+
+
+/*
+ * These are the fs-independent mount-flags: up to 32 flags are supported
+ */
+#define MS_RDONLY       1      /* Mount read-only */
+#define MS_NOSUID       2      /* Ignore suid and sgid bits */
+#define MS_NODEV        4      /* Disallow access to device special files */
+#define MS_NOEXEC       8      /* Disallow program execution */
+#define MS_SYNCHRONOUS 16      /* Writes are synced at once */
+#define MS_REMOUNT     32      /* Alter flags of a mounted FS */
+#define MS_MANDLOCK    64      /* Allow mandatory locks on an FS */
+#define MS_DIRSYNC     128     /* Directory modifications are synchronous */
+#define MS_NOATIME     1024    /* Do not update access times. */
+#define MS_NODIRATIME  2048    /* Do not update directory access times */
+#define MS_BIND                4096
+#define MS_MOVE                8192
+#define MS_REC         16384
+#define MS_VERBOSE     32768   /* War is peace. Verbosity is silence.
+                                  MS_VERBOSE is deprecated. */
+#define MS_SILENT      32768
+#define MS_POSIXACL    (1<<16) /* VFS does not apply the umask */
+#define MS_UNBINDABLE  (1<<17) /* change to unbindable */
+#define MS_PRIVATE     (1<<18) /* change to private */
+#define MS_SLAVE       (1<<19) /* change to slave */
+#define MS_SHARED      (1<<20) /* change to shared */
+#define MS_RELATIME    (1<<21) /* Update atime relative to mtime/ctime. */
+#define MS_KERNMOUNT   (1<<22) /* this is a kern_mount call */
+#define MS_I_VERSION   (1<<23) /* Update inode I_version field */
+#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
+#define MS_LAZYTIME    (1<<25) /* Update the on-disk [acm]times lazily */
+
+/* These sb flags are internal to the kernel */
+#define MS_NOSEC       (1<<28)
+#define MS_BORN                (1<<29)
+#define MS_ACTIVE      (1<<30)
+#define MS_NOUSER      (1<<31)
+
+/*
+ * Superblock flags that can be altered by MS_REMOUNT
+ */
+#define MS_RMT_MASK    (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\
+                        MS_LAZYTIME)
+
+/*
+ * Old magic mount flag and mask
+ */
+#define MS_MGC_VAL 0xC0ED0000
+#define MS_MGC_MSK 0xffff0000
+
+/* the read-only stuff doesn't really belong here, but any other place is
+   probably as bad and I don't want to create yet another include file. */
+
+#define BLKROSET   _IO(0x12,93)        /* set device read-only (0 = read-write) */
+#define BLKROGET   _IO(0x12,94)        /* get read-only status (0 = read_write) */
+#define BLKRRPART  _IO(0x12,95)        /* re-read partition table */
+#define BLKGETSIZE _IO(0x12,96)        /* return device size /512 (long *arg) */
+#define BLKFLSBUF  _IO(0x12,97)        /* flush buffer cache */
+#define BLKRASET   _IO(0x12,98)        /* set read ahead for block device */
+#define BLKRAGET   _IO(0x12,99)        /* get current read ahead setting */
+#define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
+#define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
+#define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
+#define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
+#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
+#if 0
+#define BLKPG      _IO(0x12,105)/* See blkpg.h */
+
+/* Some people are morons.  Do not use sizeof! */
+
+#define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */
+#define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */
+/* This was here just to show that the number is taken -
+   probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
+#endif
+/* A jump here: 108-111 have been used for various private purposes. */
+#define BLKBSZGET  _IOR(0x12,112,size_t)
+#define BLKBSZSET  _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)     /* return device size in bytes (u64 *arg) */
+#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
+#define BLKTRACESTART _IO(0x12,116)
+#define BLKTRACESTOP _IO(0x12,117)
+#define BLKTRACETEARDOWN _IO(0x12,118)
+#define BLKDISCARD _IO(0x12,119)
+#define BLKIOMIN _IO(0x12,120)
+#define BLKIOOPT _IO(0x12,121)
+#define BLKALIGNOFF _IO(0x12,122)
+#define BLKPBSZGET _IO(0x12,123)
+#define BLKDISCARDZEROES _IO(0x12,124)
+#define BLKSECDISCARD _IO(0x12,125)
+#define BLKROTATIONAL _IO(0x12,126)
+#define BLKZEROOUT _IO(0x12,127)
+
+#define BMAP_IOCTL 1           /* obsolete - kept for compatibility */
+#define FIBMAP    _IO(0x00,1)  /* bmap access */
+#define FIGETBSZ   _IO(0x00,2) /* get the block size used for bmap */
+#define FIFREEZE       _IOWR('X', 119, int)    /* Freeze */
+#define FITHAW         _IOWR('X', 120, int)    /* Thaw */
+#define FITRIM         _IOWR('X', 121, struct fstrim_range)    /* Trim */
+
+#define        FS_IOC_GETFLAGS                 _IOR('f', 1, long)
+#define        FS_IOC_SETFLAGS                 _IOW('f', 2, long)
+#define        FS_IOC_GETVERSION               _IOR('v', 1, long)
+#define        FS_IOC_SETVERSION               _IOW('v', 2, long)
+#define FS_IOC_FIEMAP                  _IOWR('f', 11, struct fiemap)
+#define FS_IOC32_GETFLAGS              _IOR('f', 1, int)
+#define FS_IOC32_SETFLAGS              _IOW('f', 2, int)
+#define FS_IOC32_GETVERSION            _IOR('v', 1, int)
+#define FS_IOC32_SETVERSION            _IOW('v', 2, int)
+
+/*
+ * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
+ */
+#define        FS_SECRM_FL                     0x00000001 /* Secure deletion */
+#define        FS_UNRM_FL                      0x00000002 /* Undelete */
+#define        FS_COMPR_FL                     0x00000004 /* Compress file */
+#define FS_SYNC_FL                     0x00000008 /* Synchronous updates */
+#define FS_IMMUTABLE_FL                        0x00000010 /* Immutable file */
+#define FS_APPEND_FL                   0x00000020 /* writes to file may only append */
+#define FS_NODUMP_FL                   0x00000040 /* do not dump file */
+#define FS_NOATIME_FL                  0x00000080 /* do not update atime */
+/* Reserved for compression usage... */
+#define FS_DIRTY_FL                    0x00000100
+#define FS_COMPRBLK_FL                 0x00000200 /* One or more compressed clusters */
+#define FS_NOCOMP_FL                   0x00000400 /* Don't compress */
+#define FS_ECOMPR_FL                   0x00000800 /* Compression error */
+/* End compression flags --- maybe not all used */
+#define FS_BTREE_FL                    0x00001000 /* btree format dir */
+#define FS_INDEX_FL                    0x00001000 /* hash-indexed directory */
+#define FS_IMAGIC_FL                   0x00002000 /* AFS directory */
+#define FS_JOURNAL_DATA_FL             0x00004000 /* Reserved for ext3 */
+#define FS_NOTAIL_FL                   0x00008000 /* file tail should not be merged */
+#define FS_DIRSYNC_FL                  0x00010000 /* dirsync behaviour (directories only) */
+#define FS_TOPDIR_FL                   0x00020000 /* Top of directory hierarchies*/
+#define FS_EXTENT_FL                   0x00080000 /* Extents */
+#define FS_DIRECTIO_FL                 0x00100000 /* Use direct i/o */
+#define FS_NOCOW_FL                    0x00800000 /* Do not cow file */
+#define FS_PROJINHERIT_FL              0x20000000 /* Create with parents projid */
+#define FS_RESERVED_FL                 0x80000000 /* reserved for ext2 lib */
+
+#define FS_FL_USER_VISIBLE             0x0003DFFF /* User visible flags */
+#define FS_FL_USER_MODIFIABLE          0x000380FF /* User modifiable flags */
+
+
+#define SYNC_FILE_RANGE_WAIT_BEFORE    1
+#define SYNC_FILE_RANGE_WRITE          2
+#define SYNC_FILE_RANGE_WAIT_AFTER     4
+
+#endif /* _LINUX_FS_H */
diff --git a/lib/libdss-include/include/linux/fsl_hypervisor.h b/lib/libdss-include/include/linux/fsl_hypervisor.h
new file mode 100644 (file)
index 0000000..2f908de
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Freescale hypervisor ioctl and kernel interface
+ *
+ * Copyright (C) 2008-2011 Freescale Semiconductor, Inc.
+ * Author: Timur Tabi <timur@freescale.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * This software is provided by Freescale Semiconductor "as is" and any
+ * express or implied warranties, including, but not limited to, the implied
+ * warranties of merchantability and fitness for a particular purpose are
+ * disclaimed. In no event shall Freescale Semiconductor be liable for any
+ * direct, indirect, incidental, special, exemplary, or consequential damages
+ * (including, but not limited to, procurement of substitute goods or services;
+ * loss of use, data, or profits; or business interruption) however caused and
+ * on any theory of liability, whether in contract, strict liability, or tort
+ * (including negligence or otherwise) arising in any way out of the use of this
+ * software, even if advised of the possibility of such damage.
+ *
+ * This file is used by the Freescale hypervisor management driver.  It can
+ * also be included by applications that need to communicate with the driver
+ * via the ioctl interface.
+ */
+
+#ifndef FSL_HYPERVISOR_H
+#define FSL_HYPERVISOR_H
+
+#include <linux/types.h>
+
+/**
+ * struct fsl_hv_ioctl_restart - restart a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to restart, or -1 for the
+ *             calling partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_RESTART
+ */
+struct fsl_hv_ioctl_restart {
+       __u32 ret;
+       __u32 partition;
+};
+
+/**
+ * struct fsl_hv_ioctl_status - get a partition's status
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to query, or -1 for the
+ *             calling partition
+ * @status: The returned status of the partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_GET_STATUS
+ *
+ * Values of 'status':
+ *    0 = Stopped
+ *    1 = Running
+ *    2 = Starting
+ *    3 = Stopping
+ */
+struct fsl_hv_ioctl_status {
+       __u32 ret;
+       __u32 partition;
+       __u32 status;
+};
+
+/**
+ * struct fsl_hv_ioctl_start - start a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to control
+ * @entry_point: The offset within the guest IMA to start execution
+ * @load: If non-zero, reload the partition's images before starting
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_START
+ */
+struct fsl_hv_ioctl_start {
+       __u32 ret;
+       __u32 partition;
+       __u32 entry_point;
+       __u32 load;
+};
+
+/**
+ * struct fsl_hv_ioctl_stop - stop a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to stop, or -1 for the calling
+ *             partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_STOP
+ */
+struct fsl_hv_ioctl_stop {
+       __u32 ret;
+       __u32 partition;
+};
+
+/**
+ * struct fsl_hv_ioctl_memcpy - copy memory between partitions
+ * @ret: return error code from the hypervisor
+ * @source: the partition ID of the source partition, or -1 for this
+ *          partition
+ * @target: the partition ID of the target partition, or -1 for this
+ *          partition
+ * @reserved: reserved, must be set to 0
+ * @local_addr: user-space virtual address of a buffer in the local
+ *              partition
+ * @remote_addr: guest physical address of a buffer in the
+ *           remote partition
+ * @count: the number of bytes to copy.  Both the local and remote
+ *         buffers must be at least 'count' bytes long
+ *
+ * Used by FSL_HV_IOCTL_MEMCPY
+ *
+ * The 'local' partition is the partition that calls this ioctl.  The
+ * 'remote' partition is a different partition.  The data is copied from
+ * the 'source' paritition' to the 'target' partition.
+ *
+ * The buffer in the remote partition must be guest physically
+ * contiguous.
+ *
+ * This ioctl does not support copying memory between two remote
+ * partitions or within the same partition, so either 'source' or
+ * 'target' (but not both) must be -1.  In other words, either
+ *
+ *      source == local and target == remote
+ * or
+ *      source == remote and target == local
+ */
+struct fsl_hv_ioctl_memcpy {
+       __u32 ret;
+       __u32 source;
+       __u32 target;
+       __u32 reserved; /* padding to ensure local_vaddr is aligned */
+       __u64 local_vaddr;
+       __u64 remote_paddr;
+       __u64 count;
+};
+
+/**
+ * struct fsl_hv_ioctl_doorbell - ring a doorbell
+ * @ret: return error code from the hypervisor
+ * @doorbell: the handle of the doorbell to ring doorbell
+ *
+ * Used by FSL_HV_IOCTL_DOORBELL
+ */
+struct fsl_hv_ioctl_doorbell {
+       __u32 ret;
+       __u32 doorbell;
+};
+
+/**
+ * struct fsl_hv_ioctl_prop - get/set a device tree property
+ * @ret: return error code from the hypervisor
+ * @handle: handle of partition whose tree to access
+ * @path: virtual address of path name of node to access
+ * @propname: virtual address of name of property to access
+ * @propval: virtual address of property data buffer
+ * @proplen: Size of property data buffer
+ * @reserved: reserved, must be set to 0
+ *
+ * Used by FSL_HV_IOCTL_DOORBELL
+ */
+struct fsl_hv_ioctl_prop {
+       __u32 ret;
+       __u32 handle;
+       __u64 path;
+       __u64 propname;
+       __u64 propval;
+       __u32 proplen;
+       __u32 reserved; /* padding to ensure structure is aligned */
+};
+
+/* The ioctl type, documented in ioctl-number.txt */
+#define FSL_HV_IOCTL_TYPE      0xAF
+
+/* Restart another partition */
+#define FSL_HV_IOCTL_PARTITION_RESTART \
+       _IOWR(FSL_HV_IOCTL_TYPE, 1, struct fsl_hv_ioctl_restart)
+
+/* Get a partition's status */
+#define FSL_HV_IOCTL_PARTITION_GET_STATUS \
+       _IOWR(FSL_HV_IOCTL_TYPE, 2, struct fsl_hv_ioctl_status)
+
+/* Boot another partition */
+#define FSL_HV_IOCTL_PARTITION_START \
+       _IOWR(FSL_HV_IOCTL_TYPE, 3, struct fsl_hv_ioctl_start)
+
+/* Stop this or another partition */
+#define FSL_HV_IOCTL_PARTITION_STOP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 4, struct fsl_hv_ioctl_stop)
+
+/* Copy data from one partition to another */
+#define FSL_HV_IOCTL_MEMCPY \
+       _IOWR(FSL_HV_IOCTL_TYPE, 5, struct fsl_hv_ioctl_memcpy)
+
+/* Ring a doorbell */
+#define FSL_HV_IOCTL_DOORBELL \
+       _IOWR(FSL_HV_IOCTL_TYPE, 6, struct fsl_hv_ioctl_doorbell)
+
+/* Get a property from another guest's device tree */
+#define FSL_HV_IOCTL_GETPROP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 7, struct fsl_hv_ioctl_prop)
+
+/* Set a property in another guest's device tree */
+#define FSL_HV_IOCTL_SETPROP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 8, struct fsl_hv_ioctl_prop)
+
+
+#endif /* FSL_HYPERVISOR_H */
diff --git a/lib/libdss-include/include/linux/fuse.h b/lib/libdss-include/include/linux/fuse.h
new file mode 100644 (file)
index 0000000..68c52e8
--- /dev/null
@@ -0,0 +1,757 @@
+/*
+    This file defines the kernel interface of FUSE
+    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
+
+    This program can be distributed under the terms of the GNU GPL.
+    See the file COPYING.
+
+    This -- and only this -- header file may also be distributed under
+    the terms of the BSD Licence as follows:
+
+    Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * This file defines the kernel interface of FUSE
+ *
+ * Protocol changelog:
+ *
+ * 7.9:
+ *  - new fuse_getattr_in input argument of GETATTR
+ *  - add lk_flags in fuse_lk_in
+ *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
+ *  - add blksize field to fuse_attr
+ *  - add file flags field to fuse_read_in and fuse_write_in
+ *
+ * 7.10
+ *  - add nonseekable open flag
+ *
+ * 7.11
+ *  - add IOCTL message
+ *  - add unsolicited notification support
+ *  - add POLL message and NOTIFY_POLL notification
+ *
+ * 7.12
+ *  - add umask flag to input argument of open, mknod and mkdir
+ *  - add notification messages for invalidation of inodes and
+ *    directory entries
+ *
+ * 7.13
+ *  - make max number of background requests and congestion threshold
+ *    tunables
+ *
+ * 7.14
+ *  - add splice support to fuse device
+ *
+ * 7.15
+ *  - add store notify
+ *  - add retrieve notify
+ *
+ * 7.16
+ *  - add BATCH_FORGET request
+ *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
+ *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
+ *  - add FUSE_IOCTL_32BIT flag
+ *
+ * 7.17
+ *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
+ *
+ * 7.18
+ *  - add FUSE_IOCTL_DIR flag
+ *  - add FUSE_NOTIFY_DELETE
+ *
+ * 7.19
+ *  - add FUSE_FALLOCATE
+ *
+ * 7.20
+ *  - add FUSE_AUTO_INVAL_DATA
+ *
+ * 7.21
+ *  - add FUSE_READDIRPLUS
+ *  - send the requested events in POLL request
+ *
+ * 7.22
+ *  - add FUSE_ASYNC_DIO
+ *
+ * 7.23
+ *  - add FUSE_WRITEBACK_CACHE
+ *  - add time_gran to fuse_init_out
+ *  - add reserved space to fuse_init_out
+ *  - add FATTR_CTIME
+ *  - add ctime and ctimensec to fuse_setattr_in
+ *  - add FUSE_RENAME2 request
+ *  - add FUSE_NO_OPEN_SUPPORT flag
+ */
+
+#ifndef _LINUX_FUSE_H
+#define _LINUX_FUSE_H
+
+#include <stdint.h>
+
+/*
+ * Version negotiation:
+ *
+ * Both the kernel and userspace send the version they support in the
+ * INIT request and reply respectively.
+ *
+ * If the major versions match then both shall use the smallest
+ * of the two minor versions for communication.
+ *
+ * If the kernel supports a larger major version, then userspace shall
+ * reply with the major version it supports, ignore the rest of the
+ * INIT message and expect a new INIT message from the kernel with a
+ * matching major version.
+ *
+ * If the library supports a larger major version, then it shall fall
+ * back to the major protocol version sent by the kernel for
+ * communication and reply with that major version (and an arbitrary
+ * supported minor version).
+ */
+
+/** Version number of this interface */
+#define FUSE_KERNEL_VERSION 7
+
+/** Minor version number of this interface */
+#define FUSE_KERNEL_MINOR_VERSION 23
+
+/** The node ID of the root inode */
+#define FUSE_ROOT_ID 1
+
+/* Make sure all structures are padded to 64bit boundary, so 32bit
+   userspace works under 64bit kernels */
+
+struct fuse_attr {
+       uint64_t        ino;
+       uint64_t        size;
+       uint64_t        blocks;
+       uint64_t        atime;
+       uint64_t        mtime;
+       uint64_t        ctime;
+       uint32_t        atimensec;
+       uint32_t        mtimensec;
+       uint32_t        ctimensec;
+       uint32_t        mode;
+       uint32_t        nlink;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        rdev;
+       uint32_t        blksize;
+       uint32_t        padding;
+};
+
+struct fuse_kstatfs {
+       uint64_t        blocks;
+       uint64_t        bfree;
+       uint64_t        bavail;
+       uint64_t        files;
+       uint64_t        ffree;
+       uint32_t        bsize;
+       uint32_t        namelen;
+       uint32_t        frsize;
+       uint32_t        padding;
+       uint32_t        spare[6];
+};
+
+struct fuse_file_lock {
+       uint64_t        start;
+       uint64_t        end;
+       uint32_t        type;
+       uint32_t        pid; /* tgid */
+};
+
+/**
+ * Bitmasks for fuse_setattr_in.valid
+ */
+#define FATTR_MODE     (1 << 0)
+#define FATTR_UID      (1 << 1)
+#define FATTR_GID      (1 << 2)
+#define FATTR_SIZE     (1 << 3)
+#define FATTR_ATIME    (1 << 4)
+#define FATTR_MTIME    (1 << 5)
+#define FATTR_FH       (1 << 6)
+#define FATTR_ATIME_NOW        (1 << 7)
+#define FATTR_MTIME_NOW        (1 << 8)
+#define FATTR_LOCKOWNER        (1 << 9)
+#define FATTR_CTIME    (1 << 10)
+
+/**
+ * Flags returned by the OPEN request
+ *
+ * FOPEN_DIRECT_IO: bypass page cache for this open file
+ * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
+ * FOPEN_NONSEEKABLE: the file is not seekable
+ */
+#define FOPEN_DIRECT_IO                (1 << 0)
+#define FOPEN_KEEP_CACHE       (1 << 1)
+#define FOPEN_NONSEEKABLE      (1 << 2)
+
+/**
+ * INIT request/reply flags
+ *
+ * FUSE_ASYNC_READ: asynchronous read requests
+ * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
+ * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
+ * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
+ * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
+ * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
+ * FUSE_DONT_MASK: don't apply umask to file mode on create operations
+ * FUSE_SPLICE_WRITE: kernel supports splice write on the device
+ * FUSE_SPLICE_MOVE: kernel supports splice move on the device
+ * FUSE_SPLICE_READ: kernel supports splice read on the device
+ * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
+ * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
+ * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
+ * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
+ * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
+ * FUSE_ASYNC_DIO: asynchronous direct I/O submission
+ * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
+ * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
+ */
+#define FUSE_ASYNC_READ                (1 << 0)
+#define FUSE_POSIX_LOCKS       (1 << 1)
+#define FUSE_FILE_OPS          (1 << 2)
+#define FUSE_ATOMIC_O_TRUNC    (1 << 3)
+#define FUSE_EXPORT_SUPPORT    (1 << 4)
+#define FUSE_BIG_WRITES                (1 << 5)
+#define FUSE_DONT_MASK         (1 << 6)
+#define FUSE_SPLICE_WRITE      (1 << 7)
+#define FUSE_SPLICE_MOVE       (1 << 8)
+#define FUSE_SPLICE_READ       (1 << 9)
+#define FUSE_FLOCK_LOCKS       (1 << 10)
+#define FUSE_HAS_IOCTL_DIR     (1 << 11)
+#define FUSE_AUTO_INVAL_DATA   (1 << 12)
+#define FUSE_DO_READDIRPLUS    (1 << 13)
+#define FUSE_READDIRPLUS_AUTO  (1 << 14)
+#define FUSE_ASYNC_DIO         (1 << 15)
+#define FUSE_WRITEBACK_CACHE   (1 << 16)
+#define FUSE_NO_OPEN_SUPPORT   (1 << 17)
+
+/**
+ * CUSE INIT request/reply flags
+ *
+ * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
+ */
+#define CUSE_UNRESTRICTED_IOCTL        (1 << 0)
+
+/**
+ * Release flags
+ */
+#define FUSE_RELEASE_FLUSH     (1 << 0)
+#define FUSE_RELEASE_FLOCK_UNLOCK      (1 << 1)
+
+/**
+ * Getattr flags
+ */
+#define FUSE_GETATTR_FH                (1 << 0)
+
+/**
+ * Lock flags
+ */
+#define FUSE_LK_FLOCK          (1 << 0)
+
+/**
+ * WRITE flags
+ *
+ * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
+ * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
+ */
+#define FUSE_WRITE_CACHE       (1 << 0)
+#define FUSE_WRITE_LOCKOWNER   (1 << 1)
+
+/**
+ * Read flags
+ */
+#define FUSE_READ_LOCKOWNER    (1 << 1)
+
+/**
+ * Ioctl flags
+ *
+ * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
+ * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
+ * FUSE_IOCTL_RETRY: retry with new iovecs
+ * FUSE_IOCTL_32BIT: 32bit ioctl
+ * FUSE_IOCTL_DIR: is a directory
+ *
+ * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
+ */
+#define FUSE_IOCTL_COMPAT      (1 << 0)
+#define FUSE_IOCTL_UNRESTRICTED        (1 << 1)
+#define FUSE_IOCTL_RETRY       (1 << 2)
+#define FUSE_IOCTL_32BIT       (1 << 3)
+#define FUSE_IOCTL_DIR         (1 << 4)
+
+#define FUSE_IOCTL_MAX_IOV     256
+
+/**
+ * Poll flags
+ *
+ * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
+ */
+#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
+
+enum fuse_opcode {
+       FUSE_LOOKUP        = 1,
+       FUSE_FORGET        = 2,  /* no reply */
+       FUSE_GETATTR       = 3,
+       FUSE_SETATTR       = 4,
+       FUSE_READLINK      = 5,
+       FUSE_SYMLINK       = 6,
+       FUSE_MKNOD         = 8,
+       FUSE_MKDIR         = 9,
+       FUSE_UNLINK        = 10,
+       FUSE_RMDIR         = 11,
+       FUSE_RENAME        = 12,
+       FUSE_LINK          = 13,
+       FUSE_OPEN          = 14,
+       FUSE_READ          = 15,
+       FUSE_WRITE         = 16,
+       FUSE_STATFS        = 17,
+       FUSE_RELEASE       = 18,
+       FUSE_FSYNC         = 20,
+       FUSE_SETXATTR      = 21,
+       FUSE_GETXATTR      = 22,
+       FUSE_LISTXATTR     = 23,
+       FUSE_REMOVEXATTR   = 24,
+       FUSE_FLUSH         = 25,
+       FUSE_INIT          = 26,
+       FUSE_OPENDIR       = 27,
+       FUSE_READDIR       = 28,
+       FUSE_RELEASEDIR    = 29,
+       FUSE_FSYNCDIR      = 30,
+       FUSE_GETLK         = 31,
+       FUSE_SETLK         = 32,
+       FUSE_SETLKW        = 33,
+       FUSE_ACCESS        = 34,
+       FUSE_CREATE        = 35,
+       FUSE_INTERRUPT     = 36,
+       FUSE_BMAP          = 37,
+       FUSE_DESTROY       = 38,
+       FUSE_IOCTL         = 39,
+       FUSE_POLL          = 40,
+       FUSE_NOTIFY_REPLY  = 41,
+       FUSE_BATCH_FORGET  = 42,
+       FUSE_FALLOCATE     = 43,
+       FUSE_READDIRPLUS   = 44,
+       FUSE_RENAME2       = 45,
+
+       /* CUSE specific operations */
+       CUSE_INIT          = 4096,
+};
+
+enum fuse_notify_code {
+       FUSE_NOTIFY_POLL   = 1,
+       FUSE_NOTIFY_INVAL_INODE = 2,
+       FUSE_NOTIFY_INVAL_ENTRY = 3,
+       FUSE_NOTIFY_STORE = 4,
+       FUSE_NOTIFY_RETRIEVE = 5,
+       FUSE_NOTIFY_DELETE = 6,
+       FUSE_NOTIFY_CODE_MAX,
+};
+
+/* The read buffer is required to be at least 8k, but may be much larger */
+#define FUSE_MIN_READ_BUFFER 8192
+
+#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
+
+struct fuse_entry_out {
+       uint64_t        nodeid;         /* Inode ID */
+       uint64_t        generation;     /* Inode generation: nodeid:gen must
+                                          be unique for the fs's lifetime */
+       uint64_t        entry_valid;    /* Cache timeout for the name */
+       uint64_t        attr_valid;     /* Cache timeout for the attributes */
+       uint32_t        entry_valid_nsec;
+       uint32_t        attr_valid_nsec;
+       struct fuse_attr attr;
+};
+
+struct fuse_forget_in {
+       uint64_t        nlookup;
+};
+
+struct fuse_forget_one {
+       uint64_t        nodeid;
+       uint64_t        nlookup;
+};
+
+struct fuse_batch_forget_in {
+       uint32_t        count;
+       uint32_t        dummy;
+};
+
+struct fuse_getattr_in {
+       uint32_t        getattr_flags;
+       uint32_t        dummy;
+       uint64_t        fh;
+};
+
+#define FUSE_COMPAT_ATTR_OUT_SIZE 96
+
+struct fuse_attr_out {
+       uint64_t        attr_valid;     /* Cache timeout for the attributes */
+       uint32_t        attr_valid_nsec;
+       uint32_t        dummy;
+       struct fuse_attr attr;
+};
+
+#define FUSE_COMPAT_MKNOD_IN_SIZE 8
+
+struct fuse_mknod_in {
+       uint32_t        mode;
+       uint32_t        rdev;
+       uint32_t        umask;
+       uint32_t        padding;
+};
+
+struct fuse_mkdir_in {
+       uint32_t        mode;
+       uint32_t        umask;
+};
+
+struct fuse_rename_in {
+       uint64_t        newdir;
+};
+
+struct fuse_rename2_in {
+       uint64_t        newdir;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+struct fuse_link_in {
+       uint64_t        oldnodeid;
+};
+
+struct fuse_setattr_in {
+       uint32_t        valid;
+       uint32_t        padding;
+       uint64_t        fh;
+       uint64_t        size;
+       uint64_t        lock_owner;
+       uint64_t        atime;
+       uint64_t        mtime;
+       uint64_t        ctime;
+       uint32_t        atimensec;
+       uint32_t        mtimensec;
+       uint32_t        ctimensec;
+       uint32_t        mode;
+       uint32_t        unused4;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        unused5;
+};
+
+struct fuse_open_in {
+       uint32_t        flags;
+       uint32_t        unused;
+};
+
+struct fuse_create_in {
+       uint32_t        flags;
+       uint32_t        mode;
+       uint32_t        umask;
+       uint32_t        padding;
+};
+
+struct fuse_open_out {
+       uint64_t        fh;
+       uint32_t        open_flags;
+       uint32_t        padding;
+};
+
+struct fuse_release_in {
+       uint64_t        fh;
+       uint32_t        flags;
+       uint32_t        release_flags;
+       uint64_t        lock_owner;
+};
+
+struct fuse_flush_in {
+       uint64_t        fh;
+       uint32_t        unused;
+       uint32_t        padding;
+       uint64_t        lock_owner;
+};
+
+struct fuse_read_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        read_flags;
+       uint64_t        lock_owner;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+#define FUSE_COMPAT_WRITE_IN_SIZE 24
+
+struct fuse_write_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        write_flags;
+       uint64_t        lock_owner;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+struct fuse_write_out {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+#define FUSE_COMPAT_STATFS_SIZE 48
+
+struct fuse_statfs_out {
+       struct fuse_kstatfs st;
+};
+
+struct fuse_fsync_in {
+       uint64_t        fh;
+       uint32_t        fsync_flags;
+       uint32_t        padding;
+};
+
+struct fuse_setxattr_in {
+       uint32_t        size;
+       uint32_t        flags;
+};
+
+struct fuse_getxattr_in {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_getxattr_out {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_lk_in {
+       uint64_t        fh;
+       uint64_t        owner;
+       struct fuse_file_lock lk;
+       uint32_t        lk_flags;
+       uint32_t        padding;
+};
+
+struct fuse_lk_out {
+       struct fuse_file_lock lk;
+};
+
+struct fuse_access_in {
+       uint32_t        mask;
+       uint32_t        padding;
+};
+
+struct fuse_init_in {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        max_readahead;
+       uint32_t        flags;
+};
+
+#define FUSE_COMPAT_INIT_OUT_SIZE 8
+#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
+
+struct fuse_init_out {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        max_readahead;
+       uint32_t        flags;
+       uint16_t        max_background;
+       uint16_t        congestion_threshold;
+       uint32_t        max_write;
+       uint32_t        time_gran;
+       uint32_t        unused[9];
+};
+
+#define CUSE_INIT_INFO_MAX 4096
+
+struct cuse_init_in {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        unused;
+       uint32_t        flags;
+};
+
+struct cuse_init_out {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        unused;
+       uint32_t        flags;
+       uint32_t        max_read;
+       uint32_t        max_write;
+       uint32_t        dev_major;              /* chardev major */
+       uint32_t        dev_minor;              /* chardev minor */
+       uint32_t        spare[10];
+};
+
+struct fuse_interrupt_in {
+       uint64_t        unique;
+};
+
+struct fuse_bmap_in {
+       uint64_t        block;
+       uint32_t        blocksize;
+       uint32_t        padding;
+};
+
+struct fuse_bmap_out {
+       uint64_t        block;
+};
+
+struct fuse_ioctl_in {
+       uint64_t        fh;
+       uint32_t        flags;
+       uint32_t        cmd;
+       uint64_t        arg;
+       uint32_t        in_size;
+       uint32_t        out_size;
+};
+
+struct fuse_ioctl_iovec {
+       uint64_t        base;
+       uint64_t        len;
+};
+
+struct fuse_ioctl_out {
+       int32_t         result;
+       uint32_t        flags;
+       uint32_t        in_iovs;
+       uint32_t        out_iovs;
+};
+
+struct fuse_poll_in {
+       uint64_t        fh;
+       uint64_t        kh;
+       uint32_t        flags;
+       uint32_t        events;
+};
+
+struct fuse_poll_out {
+       uint32_t        revents;
+       uint32_t        padding;
+};
+
+struct fuse_notify_poll_wakeup_out {
+       uint64_t        kh;
+};
+
+struct fuse_fallocate_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint64_t        length;
+       uint32_t        mode;
+       uint32_t        padding;
+};
+
+struct fuse_in_header {
+       uint32_t        len;
+       uint32_t        opcode;
+       uint64_t        unique;
+       uint64_t        nodeid;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        pid;
+       uint32_t        padding;
+};
+
+struct fuse_out_header {
+       uint32_t        len;
+       int32_t         error;
+       uint64_t        unique;
+};
+
+struct fuse_dirent {
+       uint64_t        ino;
+       uint64_t        off;
+       uint32_t        namelen;
+       uint32_t        type;
+       char name[];
+};
+
+#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
+#define FUSE_DIRENT_ALIGN(x) \
+       (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
+#define FUSE_DIRENT_SIZE(d) \
+       FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
+
+struct fuse_direntplus {
+       struct fuse_entry_out entry_out;
+       struct fuse_dirent dirent;
+};
+
+#define FUSE_NAME_OFFSET_DIRENTPLUS \
+       offsetof(struct fuse_direntplus, dirent.name)
+#define FUSE_DIRENTPLUS_SIZE(d) \
+       FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
+
+struct fuse_notify_inval_inode_out {
+       uint64_t        ino;
+       int64_t         off;
+       int64_t         len;
+};
+
+struct fuse_notify_inval_entry_out {
+       uint64_t        parent;
+       uint32_t        namelen;
+       uint32_t        padding;
+};
+
+struct fuse_notify_delete_out {
+       uint64_t        parent;
+       uint64_t        child;
+       uint32_t        namelen;
+       uint32_t        padding;
+};
+
+struct fuse_notify_store_out {
+       uint64_t        nodeid;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_notify_retrieve_out {
+       uint64_t        notify_unique;
+       uint64_t        nodeid;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+/* Matches the size of fuse_write_in */
+struct fuse_notify_retrieve_in {
+       uint64_t        dummy1;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        dummy2;
+       uint64_t        dummy3;
+       uint64_t        dummy4;
+};
+
+/* Device ioctls: */
+#define FUSE_DEV_IOC_CLONE     _IOR(229, 0, uint32_t)
+
+#endif /* _LINUX_FUSE_H */
diff --git a/lib/libdss-include/include/linux/futex.h b/lib/libdss-include/include/linux/futex.h
new file mode 100644 (file)
index 0000000..7a46ab9
--- /dev/null
@@ -0,0 +1,152 @@
+#ifndef _LINUX_FUTEX_H
+#define _LINUX_FUTEX_H
+
+
+#include <linux/types.h>
+
+/* Second argument to futex syscall */
+
+
+#define FUTEX_WAIT             0
+#define FUTEX_WAKE             1
+#define FUTEX_FD               2
+#define FUTEX_REQUEUE          3
+#define FUTEX_CMP_REQUEUE      4
+#define FUTEX_WAKE_OP          5
+#define FUTEX_LOCK_PI          6
+#define FUTEX_UNLOCK_PI                7
+#define FUTEX_TRYLOCK_PI       8
+#define FUTEX_WAIT_BITSET      9
+#define FUTEX_WAKE_BITSET      10
+#define FUTEX_WAIT_REQUEUE_PI  11
+#define FUTEX_CMP_REQUEUE_PI   12
+
+#define FUTEX_PRIVATE_FLAG     128
+#define FUTEX_CLOCK_REALTIME   256
+#define FUTEX_CMD_MASK         ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
+
+#define FUTEX_WAIT_PRIVATE     (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_PRIVATE     (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_REQUEUE_PRIVATE  (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_OP_PRIVATE  (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
+#define FUTEX_LOCK_PI_PRIVATE  (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_UNLOCK_PI_PRIVATE        (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAIT_BITSET_PRIVATE      (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_BITSET_PRIVATE      (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAIT_REQUEUE_PI_PRIVATE  (FUTEX_WAIT_REQUEUE_PI | \
+                                        FUTEX_PRIVATE_FLAG)
+#define FUTEX_CMP_REQUEUE_PI_PRIVATE   (FUTEX_CMP_REQUEUE_PI | \
+                                        FUTEX_PRIVATE_FLAG)
+
+/*
+ * Support for robust futexes: the kernel cleans up held futexes at
+ * thread exit time.
+ */
+
+/*
+ * Per-lock list entry - embedded in user-space locks, somewhere close
+ * to the futex field. (Note: user-space uses a double-linked list to
+ * achieve O(1) list add and remove, but the kernel only needs to know
+ * about the forward link)
+ *
+ * NOTE: this structure is part of the syscall ABI, and must not be
+ * changed.
+ */
+struct robust_list {
+       struct robust_list *next;
+};
+
+/*
+ * Per-thread list head:
+ *
+ * NOTE: this structure is part of the syscall ABI, and must only be
+ * changed if the change is first communicated with the glibc folks.
+ * (When an incompatible change is done, we'll increase the structure
+ *  size, which glibc will detect)
+ */
+struct robust_list_head {
+       /*
+        * The head of the list. Points back to itself if empty:
+        */
+       struct robust_list list;
+
+       /*
+        * This relative offset is set by user-space, it gives the kernel
+        * the relative position of the futex field to examine. This way
+        * we keep userspace flexible, to freely shape its data-structure,
+        * without hardcoding any particular offset into the kernel:
+        */
+       long futex_offset;
+
+       /*
+        * The death of the thread may race with userspace setting
+        * up a lock's links. So to handle this race, userspace first
+        * sets this field to the address of the to-be-taken lock,
+        * then does the lock acquire, and then adds itself to the
+        * list, and then clears this field. Hence the kernel will
+        * always have full knowledge of all locks that the thread
+        * _might_ have taken. We check the owner TID in any case,
+        * so only truly owned locks will be handled.
+        */
+       struct robust_list *list_op_pending;
+};
+
+/*
+ * Are there any waiters for this robust futex:
+ */
+#define FUTEX_WAITERS          0x80000000
+
+/*
+ * The kernel signals via this bit that a thread holding a futex
+ * has exited without unlocking the futex. The kernel also does
+ * a FUTEX_WAKE on such futexes, after setting the bit, to wake
+ * up any possible waiters:
+ */
+#define FUTEX_OWNER_DIED       0x40000000
+
+/*
+ * The rest of the robust-futex field is for the TID:
+ */
+#define FUTEX_TID_MASK         0x3fffffff
+
+/*
+ * This limit protects against a deliberately circular list.
+ * (Not worth introducing an rlimit for it)
+ */
+#define ROBUST_LIST_LIMIT      2048
+
+/*
+ * bitset with all bits set for the FUTEX_xxx_BITSET OPs to request a
+ * match of any bit.
+ */
+#define FUTEX_BITSET_MATCH_ANY 0xffffffff
+
+
+#define FUTEX_OP_SET           0       /* *(int *)UADDR2 = OPARG; */
+#define FUTEX_OP_ADD           1       /* *(int *)UADDR2 += OPARG; */
+#define FUTEX_OP_OR            2       /* *(int *)UADDR2 |= OPARG; */
+#define FUTEX_OP_ANDN          3       /* *(int *)UADDR2 &= ~OPARG; */
+#define FUTEX_OP_XOR           4       /* *(int *)UADDR2 ^= OPARG; */
+
+#define FUTEX_OP_OPARG_SHIFT   8       /* Use (1 << OPARG) instead of OPARG.  */
+
+#define FUTEX_OP_CMP_EQ                0       /* if (oldval == CMPARG) wake */
+#define FUTEX_OP_CMP_NE                1       /* if (oldval != CMPARG) wake */
+#define FUTEX_OP_CMP_LT                2       /* if (oldval < CMPARG) wake */
+#define FUTEX_OP_CMP_LE                3       /* if (oldval <= CMPARG) wake */
+#define FUTEX_OP_CMP_GT                4       /* if (oldval > CMPARG) wake */
+#define FUTEX_OP_CMP_GE                5       /* if (oldval >= CMPARG) wake */
+
+/* FUTEX_WAKE_OP will perform atomically
+   int oldval = *(int *)UADDR2;
+   *(int *)UADDR2 = oldval OP OPARG;
+   if (oldval CMP CMPARG)
+     wake UADDR2;  */
+
+#define FUTEX_OP(op, oparg, cmp, cmparg) \
+  (((op & 0xf) << 28) | ((cmp & 0xf) << 24)            \
+   | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
+
+#endif /* _LINUX_FUTEX_H */
diff --git a/lib/libdss-include/include/linux/gameport.h b/lib/libdss-include/include/linux/gameport.h
new file mode 100644 (file)
index 0000000..34246b7
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _GAMEPORT_H
+#define _GAMEPORT_H
+
+
+
+#define GAMEPORT_MODE_DISABLED         0
+#define GAMEPORT_MODE_RAW              1
+#define GAMEPORT_MODE_COOKED           2
+
+#define GAMEPORT_ID_VENDOR_ANALOG      0x0001
+#define GAMEPORT_ID_VENDOR_MADCATZ     0x0002
+#define GAMEPORT_ID_VENDOR_LOGITECH    0x0003
+#define GAMEPORT_ID_VENDOR_CREATIVE    0x0004
+#define GAMEPORT_ID_VENDOR_GENIUS      0x0005
+#define GAMEPORT_ID_VENDOR_INTERACT    0x0006
+#define GAMEPORT_ID_VENDOR_MICROSOFT   0x0007
+#define GAMEPORT_ID_VENDOR_THRUSTMASTER        0x0008
+#define GAMEPORT_ID_VENDOR_GRAVIS      0x0009
+#define GAMEPORT_ID_VENDOR_GUILLEMOT   0x000a
+
+#endif /* _GAMEPORT_H */
diff --git a/lib/libdss-include/include/linux/gen_stats.h b/lib/libdss-include/include/linux/gen_stats.h
new file mode 100644 (file)
index 0000000..6487317
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef __LINUX_GEN_STATS_H
+#define __LINUX_GEN_STATS_H
+
+#include <linux/types.h>
+
+enum {
+       TCA_STATS_UNSPEC,
+       TCA_STATS_BASIC,
+       TCA_STATS_RATE_EST,
+       TCA_STATS_QUEUE,
+       TCA_STATS_APP,
+       TCA_STATS_RATE_EST64,
+       __TCA_STATS_MAX,
+};
+#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
+
+/**
+ * struct gnet_stats_basic - byte/packet throughput statistics
+ * @bytes: number of seen bytes
+ * @packets: number of seen packets
+ */
+struct gnet_stats_basic {
+       __u64   bytes;
+       __u32   packets;
+};
+struct gnet_stats_basic_packed {
+       __u64   bytes;
+       __u32   packets;
+} __attribute__ ((packed));
+
+/**
+ * struct gnet_stats_rate_est - rate estimator
+ * @bps: current byte rate
+ * @pps: current packet rate
+ */
+struct gnet_stats_rate_est {
+       __u32   bps;
+       __u32   pps;
+};
+
+/**
+ * struct gnet_stats_rate_est64 - rate estimator
+ * @bps: current byte rate
+ * @pps: current packet rate
+ */
+struct gnet_stats_rate_est64 {
+       __u64   bps;
+       __u64   pps;
+};
+
+/**
+ * struct gnet_stats_queue - queuing statistics
+ * @qlen: queue length
+ * @backlog: backlog size of queue
+ * @drops: number of dropped packets
+ * @requeues: number of requeues
+ * @overlimits: number of enqueues over the limit
+ */
+struct gnet_stats_queue {
+       __u32   qlen;
+       __u32   backlog;
+       __u32   drops;
+       __u32   requeues;
+       __u32   overlimits;
+};
+
+/**
+ * struct gnet_estimator - rate estimator configuration
+ * @interval: sampling period
+ * @ewma_log: the log of measurement window weight
+ */
+struct gnet_estimator {
+       signed char     interval;
+       unsigned char   ewma_log;
+};
+
+
+#endif /* __LINUX_GEN_STATS_H */
diff --git a/lib/libdss-include/include/linux/genetlink.h b/lib/libdss-include/include/linux/genetlink.h
new file mode 100644 (file)
index 0000000..e792092
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef __LINUX_GENERIC_NETLINK_H
+#define __LINUX_GENERIC_NETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+#define GENL_NAMSIZ    16      /* length of family name */
+
+#define GENL_MIN_ID    NLMSG_MIN_TYPE
+#define GENL_MAX_ID    1023
+
+struct genlmsghdr {
+       __u8    cmd;
+       __u8    version;
+       __u16   reserved;
+};
+
+#define GENL_HDRLEN    NLMSG_ALIGN(sizeof(struct genlmsghdr))
+
+#define GENL_ADMIN_PERM                0x01
+#define GENL_CMD_CAP_DO                0x02
+#define GENL_CMD_CAP_DUMP      0x04
+#define GENL_CMD_CAP_HASPOL    0x08
+#define GENL_UNS_ADMIN_PERM    0x10
+
+/*
+ * List of reserved static generic netlink identifiers:
+ */
+#define GENL_ID_GENERATE       0
+#define GENL_ID_CTRL           NLMSG_MIN_TYPE
+#define GENL_ID_VFS_DQUOT      (NLMSG_MIN_TYPE + 1)
+#define GENL_ID_PMCRAID                (NLMSG_MIN_TYPE + 2)
+
+/**************************************************************************
+ * Controller
+ **************************************************************************/
+
+enum {
+       CTRL_CMD_UNSPEC,
+       CTRL_CMD_NEWFAMILY,
+       CTRL_CMD_DELFAMILY,
+       CTRL_CMD_GETFAMILY,
+       CTRL_CMD_NEWOPS,
+       CTRL_CMD_DELOPS,
+       CTRL_CMD_GETOPS,
+       CTRL_CMD_NEWMCAST_GRP,
+       CTRL_CMD_DELMCAST_GRP,
+       CTRL_CMD_GETMCAST_GRP, /* unused */
+       __CTRL_CMD_MAX,
+};
+
+#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
+
+enum {
+       CTRL_ATTR_UNSPEC,
+       CTRL_ATTR_FAMILY_ID,
+       CTRL_ATTR_FAMILY_NAME,
+       CTRL_ATTR_VERSION,
+       CTRL_ATTR_HDRSIZE,
+       CTRL_ATTR_MAXATTR,
+       CTRL_ATTR_OPS,
+       CTRL_ATTR_MCAST_GROUPS,
+       __CTRL_ATTR_MAX,
+};
+
+#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
+
+enum {
+       CTRL_ATTR_OP_UNSPEC,
+       CTRL_ATTR_OP_ID,
+       CTRL_ATTR_OP_FLAGS,
+       __CTRL_ATTR_OP_MAX,
+};
+
+#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
+
+enum {
+       CTRL_ATTR_MCAST_GRP_UNSPEC,
+       CTRL_ATTR_MCAST_GRP_NAME,
+       CTRL_ATTR_MCAST_GRP_ID,
+       __CTRL_ATTR_MCAST_GRP_MAX,
+};
+
+#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
+
+
+#endif /* __LINUX_GENERIC_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/gfs2_ondisk.h b/lib/libdss-include/include/linux/gfs2_ondisk.h
new file mode 100644 (file)
index 0000000..792690a
--- /dev/null
@@ -0,0 +1,479 @@
+/*
+ * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef __GFS2_ONDISK_DOT_H__
+#define __GFS2_ONDISK_DOT_H__
+
+#include <linux/types.h>
+
+#define GFS2_MAGIC             0x01161970
+#define GFS2_BASIC_BLOCK       512
+#define GFS2_BASIC_BLOCK_SHIFT 9
+
+/* Lock numbers of the LM_TYPE_NONDISK type */
+
+#define GFS2_MOUNT_LOCK                0
+#define GFS2_LIVE_LOCK         1
+#define GFS2_FREEZE_LOCK       2
+#define GFS2_RENAME_LOCK       3
+#define GFS2_CONTROL_LOCK      4
+#define GFS2_MOUNTED_LOCK      5
+
+/* Format numbers for various metadata types */
+
+#define GFS2_FORMAT_NONE       0
+#define GFS2_FORMAT_SB         100
+#define GFS2_FORMAT_RG         200
+#define GFS2_FORMAT_RB         300
+#define GFS2_FORMAT_DI         400
+#define GFS2_FORMAT_IN         500
+#define GFS2_FORMAT_LF         600
+#define GFS2_FORMAT_JD         700
+#define GFS2_FORMAT_LH         800
+#define GFS2_FORMAT_LD         900
+#define GFS2_FORMAT_LB         1000
+#define GFS2_FORMAT_EA         1600
+#define GFS2_FORMAT_ED         1700
+#define GFS2_FORMAT_QC         1400
+/* These are format numbers for entities contained in files */
+#define GFS2_FORMAT_RI         1100
+#define GFS2_FORMAT_DE         1200
+#define GFS2_FORMAT_QU         1500
+/* These are part of the superblock */
+#define GFS2_FORMAT_FS         1801
+#define GFS2_FORMAT_MULTI      1900
+
+/*
+ * An on-disk inode number
+ */
+
+struct gfs2_inum {
+       __be64 no_formal_ino;
+       __be64 no_addr;
+};
+
+/*
+ * Generic metadata head structure
+ * Every inplace buffer logged in the journal must start with this.
+ */
+
+#define GFS2_METATYPE_NONE     0
+#define GFS2_METATYPE_SB       1
+#define GFS2_METATYPE_RG       2
+#define GFS2_METATYPE_RB       3
+#define GFS2_METATYPE_DI       4
+#define GFS2_METATYPE_IN       5
+#define GFS2_METATYPE_LF       6
+#define GFS2_METATYPE_JD       7
+#define GFS2_METATYPE_LH       8
+#define GFS2_METATYPE_LD       9
+#define GFS2_METATYPE_LB       12
+#define GFS2_METATYPE_EA       10
+#define GFS2_METATYPE_ED       11
+#define GFS2_METATYPE_QC       14
+
+struct gfs2_meta_header {
+       __be32 mh_magic;
+       __be32 mh_type;
+       __be64 __pad0;          /* Was generation number in gfs1 */
+       __be32 mh_format;
+       /* This union is to keep userspace happy */
+       union {
+               __be32 mh_jid;          /* Was incarnation number in gfs1 */
+               __be32 __pad1;
+       };
+};
+
+/*
+ * super-block structure
+ *
+ * It's probably good if SIZEOF_SB <= GFS2_BASIC_BLOCK (512 bytes)
+ *
+ * Order is important, need to be able to read old superblocks to do on-disk
+ * version upgrades.
+ */
+
+/* Address of superblock in GFS2 basic blocks */
+#define GFS2_SB_ADDR           128
+
+/* The lock number for the superblock (must be zero) */
+#define GFS2_SB_LOCK           0
+
+/* Requirement:  GFS2_LOCKNAME_LEN % 8 == 0
+   Includes: the fencing zero at the end */
+#define GFS2_LOCKNAME_LEN      64
+
+struct gfs2_sb {
+       struct gfs2_meta_header sb_header;
+
+       __be32 sb_fs_format;
+       __be32 sb_multihost_format;
+       __u32  __pad0;  /* Was superblock flags in gfs1 */
+
+       __be32 sb_bsize;
+       __be32 sb_bsize_shift;
+       __u32 __pad1;   /* Was journal segment size in gfs1 */
+
+       struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
+       struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
+       struct gfs2_inum sb_root_dir;
+
+       char sb_lockproto[GFS2_LOCKNAME_LEN];
+       char sb_locktable[GFS2_LOCKNAME_LEN];
+
+       struct gfs2_inum __pad3; /* Was quota inode in gfs1 */
+       struct gfs2_inum __pad4; /* Was licence inode in gfs1 */
+#define GFS2_HAS_UUID 1
+       __u8 sb_uuid[16]; /* The UUID, maybe 0 for backwards compat */
+};
+
+/*
+ * resource index structure
+ */
+
+struct gfs2_rindex {
+       __be64 ri_addr; /* grp block disk address */
+       __be32 ri_length;       /* length of rgrp header in fs blocks */
+       __u32 __pad;
+
+       __be64 ri_data0;        /* first data location */
+       __be32 ri_data; /* num of data blocks in rgrp */
+
+       __be32 ri_bitbytes;     /* number of bytes in data bitmaps */
+
+       __u8 ri_reserved[64];
+};
+
+/*
+ * resource group header structure
+ */
+
+/* Number of blocks per byte in rgrp */
+#define GFS2_NBBY              4
+#define GFS2_BIT_SIZE          2
+#define GFS2_BIT_MASK          0x00000003
+
+#define GFS2_BLKST_FREE                0
+#define GFS2_BLKST_USED                1
+#define GFS2_BLKST_UNLINKED    2
+#define GFS2_BLKST_DINODE      3
+
+#define GFS2_RGF_JOURNAL       0x00000001
+#define GFS2_RGF_METAONLY      0x00000002
+#define GFS2_RGF_DATAONLY      0x00000004
+#define GFS2_RGF_NOALLOC       0x00000008
+#define GFS2_RGF_TRIMMED       0x00000010
+
+struct gfs2_rgrp_lvb {
+       __be32 rl_magic;
+       __be32 rl_flags;
+       __be32 rl_free;
+       __be32 rl_dinodes;
+       __be64 rl_igeneration;
+       __be32 rl_unlinked;
+       __be32 __pad;
+};
+
+struct gfs2_rgrp {
+       struct gfs2_meta_header rg_header;
+
+       __be32 rg_flags;
+       __be32 rg_free;
+       __be32 rg_dinodes;
+       __be32 __pad;
+       __be64 rg_igeneration;
+
+       __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */
+};
+
+/*
+ * quota structure
+ */
+
+struct gfs2_quota {
+       __be64 qu_limit;
+       __be64 qu_warn;
+       __be64 qu_value;
+       __u8 qu_reserved[64];
+};
+
+/*
+ * dinode structure
+ */
+
+#define GFS2_MAX_META_HEIGHT   10
+#define GFS2_DIR_MAX_DEPTH     17
+
+#define DT2IF(dt) (((dt) << 12) & S_IFMT)
+#define IF2DT(sif) (((sif) & S_IFMT) >> 12)
+
+enum {
+       gfs2fl_Jdata            = 0,
+       gfs2fl_ExHash           = 1,
+       gfs2fl_Unused           = 2,
+       gfs2fl_EaIndirect       = 3,
+       gfs2fl_Directio         = 4,
+       gfs2fl_Immutable        = 5,
+       gfs2fl_AppendOnly       = 6,
+       gfs2fl_NoAtime          = 7,
+       gfs2fl_Sync             = 8,
+       gfs2fl_System           = 9,
+       gfs2fl_TopLevel         = 10,
+       gfs2fl_TruncInProg      = 29,
+       gfs2fl_InheritDirectio  = 30,
+       gfs2fl_InheritJdata     = 31,
+};
+
+/* Dinode flags */
+#define GFS2_DIF_JDATA                 0x00000001
+#define GFS2_DIF_EXHASH                        0x00000002
+#define GFS2_DIF_UNUSED                        0x00000004  /* only in gfs1 */
+#define GFS2_DIF_EA_INDIRECT           0x00000008
+#define GFS2_DIF_DIRECTIO              0x00000010
+#define GFS2_DIF_IMMUTABLE             0x00000020
+#define GFS2_DIF_APPENDONLY            0x00000040
+#define GFS2_DIF_NOATIME               0x00000080
+#define GFS2_DIF_SYNC                  0x00000100
+#define GFS2_DIF_SYSTEM                        0x00000200 /* New in gfs2 */
+#define GFS2_DIF_TOPDIR                        0x00000400 /* New in gfs2 */
+#define GFS2_DIF_TRUNC_IN_PROG         0x20000000 /* New in gfs2 */
+#define GFS2_DIF_INHERIT_DIRECTIO      0x40000000 /* only in gfs1 */
+#define GFS2_DIF_INHERIT_JDATA         0x80000000
+
+struct gfs2_dinode {
+       struct gfs2_meta_header di_header;
+
+       struct gfs2_inum di_num;
+
+       __be32 di_mode; /* mode of file */
+       __be32 di_uid;  /* owner's user id */
+       __be32 di_gid;  /* owner's group id */
+       __be32 di_nlink;        /* number of links to this file */
+       __be64 di_size; /* number of bytes in file */
+       __be64 di_blocks;       /* number of blocks in file */
+       __be64 di_atime;        /* time last accessed */
+       __be64 di_mtime;        /* time last modified */
+       __be64 di_ctime;        /* time last changed */
+       __be32 di_major;        /* device major number */
+       __be32 di_minor;        /* device minor number */
+
+       /* This section varies from gfs1. Padding added to align with
+         * remainder of dinode
+        */
+       __be64 di_goal_meta;    /* rgrp to alloc from next */
+       __be64 di_goal_data;    /* data block goal */
+       __be64 di_generation;   /* generation number for NFS */
+
+       __be32 di_flags;        /* GFS2_DIF_... */
+       __be32 di_payload_format;  /* GFS2_FORMAT_... */
+       __u16 __pad1;   /* Was ditype in gfs1 */
+       __be16 di_height;       /* height of metadata */
+       __u32 __pad2;   /* Unused incarnation number from gfs1 */
+
+       /* These only apply to directories  */
+       __u16 __pad3;   /* Padding */
+       __be16 di_depth;        /* Number of bits in the table */
+       __be32 di_entries;      /* The number of entries in the directory */
+
+       struct gfs2_inum __pad4; /* Unused even in current gfs1 */
+
+       __be64 di_eattr;        /* extended attribute block number */
+       __be32 di_atime_nsec;   /* nsec portion of atime */
+       __be32 di_mtime_nsec;   /* nsec portion of mtime */
+       __be32 di_ctime_nsec;   /* nsec portion of ctime */
+
+       __u8 di_reserved[44];
+};
+
+/*
+ * directory structure - many of these per directory file
+ */
+
+#define GFS2_FNAMESIZE         255
+#define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7)
+
+struct gfs2_dirent {
+       struct gfs2_inum de_inum;
+       __be32 de_hash;
+       __be16 de_rec_len;
+       __be16 de_name_len;
+       __be16 de_type;
+       union {
+               __u8 __pad[14];
+               struct {
+                       __be16 de_rahead;
+                       __u8 pad2[12];
+               };
+       };
+};
+
+/*
+ * Header of leaf directory nodes
+ */
+
+struct gfs2_leaf {
+       struct gfs2_meta_header lf_header;
+
+       __be16 lf_depth;                /* Depth of leaf */
+       __be16 lf_entries;              /* Number of dirents in leaf */
+       __be32 lf_dirent_format;        /* Format of the dirents */
+       __be64 lf_next;                 /* Next leaf, if overflow */
+
+       union {
+               __u8 lf_reserved[64];
+               struct {
+                       __be64 lf_inode;        /* Dir inode number */
+                       __be32 lf_dist;         /* Dist from inode on chain */
+                       __be32 lf_nsec;         /* Last ins/del usecs */
+                       __be64 lf_sec;          /* Last ins/del in secs */
+                       __u8 lf_reserved2[40];
+               };
+       };
+};
+
+/*
+ * Extended attribute header format
+ *
+ * This works in a similar way to dirents. There is a fixed size header
+ * followed by a variable length section made up of the name and the
+ * associated data. In the case of a "stuffed" entry, the value is
+ * __inline__ directly after the name, the ea_num_ptrs entry will be
+ * zero in that case. For non-"stuffed" entries, there will be
+ * a set of pointers (aligned to 8 byte boundary) to the block(s)
+ * containing the value.
+ *
+ * The blocks containing the values and the blocks containing the
+ * extended attribute headers themselves all start with the common
+ * metadata header. Each inode, if it has extended attributes, will
+ * have either a single block containing the extended attribute headers
+ * or a single indirect block pointing to blocks containing the
+ * extended attribute headers.
+ *
+ * The maximum size of the data part of an extended attribute is 64k
+ * so the number of blocks required depends upon block size. Since the
+ * block size also determines the number of pointers in an indirect
+ * block, its a fairly complicated calculation to work out the maximum
+ * number of blocks that an inode may have relating to extended attributes.
+ *
+ */
+
+#define GFS2_EA_MAX_NAME_LEN   255
+#define GFS2_EA_MAX_DATA_LEN   65536
+
+#define GFS2_EATYPE_UNUSED     0
+#define GFS2_EATYPE_USR                1
+#define GFS2_EATYPE_SYS                2
+#define GFS2_EATYPE_SECURITY   3
+
+#define GFS2_EATYPE_LAST       3
+#define GFS2_EATYPE_VALID(x)   ((x) <= GFS2_EATYPE_LAST)
+
+#define GFS2_EAFLAG_LAST       0x01    /* last ea in block */
+
+struct gfs2_ea_header {
+       __be32 ea_rec_len;
+       __be32 ea_data_len;
+       __u8 ea_name_len;       /* no NULL pointer after the string */
+       __u8 ea_type;           /* GFS2_EATYPE_... */
+       __u8 ea_flags;          /* GFS2_EAFLAG_... */
+       __u8 ea_num_ptrs;
+       __u32 __pad;
+};
+
+/*
+ * Log header structure
+ */
+
+#define GFS2_LOG_HEAD_UNMOUNT  0x00000001      /* log is clean */
+
+struct gfs2_log_header {
+       struct gfs2_meta_header lh_header;
+
+       __be64 lh_sequence;     /* Sequence number of this transaction */
+       __be32 lh_flags;        /* GFS2_LOG_HEAD_... */
+       __be32 lh_tail;         /* Block number of log tail */
+       __be32 lh_blkno;
+       __be32 lh_hash;
+};
+
+/*
+ * Log type descriptor
+ */
+
+#define GFS2_LOG_DESC_METADATA 300
+/* ld_data1 is the number of metadata blocks in the descriptor.
+   ld_data2 is unused. */
+
+#define GFS2_LOG_DESC_REVOKE   301
+/* ld_data1 is the number of revoke blocks in the descriptor.
+   ld_data2 is unused. */
+
+#define GFS2_LOG_DESC_JDATA    302
+/* ld_data1 is the number of data blocks in the descriptor.
+   ld_data2 is unused. */
+
+struct gfs2_log_descriptor {
+       struct gfs2_meta_header ld_header;
+
+       __be32 ld_type;         /* GFS2_LOG_DESC_... */
+       __be32 ld_length;       /* Number of buffers in this chunk */
+       __be32 ld_data1;        /* descriptor-specific field */
+       __be32 ld_data2;        /* descriptor-specific field */
+
+       __u8 ld_reserved[32];
+};
+
+/*
+ * Inum Range
+ * Describe a range of formal inode numbers allocated to
+ * one machine to assign to inodes.
+ */
+
+#define GFS2_INUM_QUANTUM      1048576
+
+struct gfs2_inum_range {
+       __be64 ir_start;
+       __be64 ir_length;
+};
+
+/*
+ * Statfs change
+ * Describes an change to the pool of free and allocated
+ * blocks.
+ */
+
+struct gfs2_statfs_change {
+       __be64 sc_total;
+       __be64 sc_free;
+       __be64 sc_dinodes;
+};
+
+/*
+ * Quota change
+ * Describes an allocation change for a particular
+ * user or group.
+ */
+
+#define GFS2_QCF_USER          0x00000001
+
+struct gfs2_quota_change {
+       __be64 qc_change;
+       __be32 qc_flags;        /* GFS2_QCF_... */
+       __be32 qc_id;
+};
+
+struct gfs2_quota_lvb {
+        __be32 qb_magic;
+        __u32 __pad;
+        __be64 qb_limit;      /* Hard limit of # blocks to alloc */
+        __be64 qb_warn;       /* Warn user when alloc is above this # */
+        __be64 qb_value;       /* Current # blocks allocated */
+};
+
+#endif /* __GFS2_ONDISK_DOT_H__ */
diff --git a/lib/libdss-include/include/linux/gigaset_dev.h b/lib/libdss-include/include/linux/gigaset_dev.h
new file mode 100644 (file)
index 0000000..258ba82
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * interface to user space for the gigaset driver
+ *
+ * Copyright (c) 2004 by Hansjoerg Lipp <hjlipp@web.de>
+ *
+ * =====================================================================
+ *    This program is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU General Public License as
+ *    published by the Free Software Foundation; either version 2 of
+ *    the License, or (at your option) any later version.
+ * =====================================================================
+ */
+
+#ifndef GIGASET_INTERFACE_H
+#define GIGASET_INTERFACE_H
+
+#include <linux/ioctl.h>
+
+/* The magic IOCTL value for this interface. */
+#define GIGASET_IOCTL 0x47
+
+/* enable/disable device control via character device (lock out ISDN subsys) */
+#define GIGASET_REDIR    _IOWR(GIGASET_IOCTL, 0, int)
+
+/* enable adapter configuration mode (M10x only) */
+#define GIGASET_CONFIG   _IOWR(GIGASET_IOCTL, 1, int)
+
+/* set break characters (M105 only) */
+#define GIGASET_BRKCHARS _IOW(GIGASET_IOCTL, 2, unsigned char[6])
+
+/* get version information selected by arg[0] */
+#define GIGASET_VERSION  _IOWR(GIGASET_IOCTL, 3, unsigned[4])
+/* values for GIGASET_VERSION arg[0] */
+#define GIGVER_DRIVER 0                /* get driver version */
+#define GIGVER_COMPAT 1                /* get interface compatibility version */
+#define GIGVER_FWBASE 2                /* get base station firmware version */
+
+#endif
diff --git a/lib/libdss-include/include/linux/gsmmux.h b/lib/libdss-include/include/linux/gsmmux.h
new file mode 100644 (file)
index 0000000..ab055d8
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _LINUX_GSMMUX_H
+#define _LINUX_GSMMUX_H
+
+#include <linux/if.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+struct gsm_config
+{
+       unsigned int adaption;
+       unsigned int encapsulation;
+       unsigned int initiator;
+       unsigned int t1;
+       unsigned int t2;
+       unsigned int t3;
+       unsigned int n2;
+       unsigned int mru;
+       unsigned int mtu;
+       unsigned int k;
+       unsigned int i;
+       unsigned int unused[8];         /* Padding for expansion without
+                                          breaking stuff */
+};
+
+#define GSMIOC_GETCONF         _IOR('G', 0, struct gsm_config)
+#define GSMIOC_SETCONF         _IOW('G', 1, struct gsm_config)
+
+struct gsm_netconfig {
+       unsigned int adaption;  /* Adaption to use in network mode */
+       unsigned short protocol;/* Protocol to use - only ETH_P_IP supported */
+       unsigned short unused2;
+       char if_name[IFNAMSIZ]; /* interface name format string */
+       __u8 unused[28];        /* For future use */
+};
+
+#define GSMIOC_ENABLE_NET      _IOW('G', 2, struct gsm_netconfig)
+#define GSMIOC_DISABLE_NET     _IO('G', 3)
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/hdlc.h b/lib/libdss-include/include/linux/hdlc.h
new file mode 100644 (file)
index 0000000..89e484d
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Generic HDLC support routines for Linux
+ *
+ * Copyright (C) 1999-2005 Krzysztof Halasa <khc@pm.waw.pl>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License
+ * as published by the Free Software Foundation.
+ */
+
+#ifndef __HDLC_H
+#define __HDLC_H
+
+
+#define HDLC_MAX_MTU 1500      /* Ethernet 1500 bytes */
+#if 0
+#define HDLC_MAX_MRU (HDLC_MAX_MTU + 10 + 14 + 4) /* for ETH+VLAN over FR */
+#else
+#define HDLC_MAX_MRU 1600 /* as required for FR network */
+#endif
+
+
+#endif /* __HDLC_H */
diff --git a/lib/libdss-include/include/linux/hdlc/ioctl.h b/lib/libdss-include/include/linux/hdlc/ioctl.h
new file mode 100644 (file)
index 0000000..04bc027
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef __HDLC_IOCTL_H__
+#define __HDLC_IOCTL_H__
+
+
+#define GENERIC_HDLC_VERSION 4 /* For synchronization with sethdlc utility */
+
+#define CLOCK_DEFAULT   0      /* Default setting */
+#define CLOCK_EXT      1       /* External TX and RX clock - DTE */
+#define CLOCK_INT      2       /* Internal TX and RX clock - DCE */
+#define CLOCK_TXINT    3       /* Internal TX and external RX clock */
+#define CLOCK_TXFROMRX 4       /* TX clock derived from external RX clock */
+
+
+#define ENCODING_DEFAULT       0 /* Default setting */
+#define ENCODING_NRZ           1
+#define ENCODING_NRZI          2
+#define ENCODING_FM_MARK       3
+#define ENCODING_FM_SPACE      4
+#define ENCODING_MANCHESTER    5
+
+
+#define PARITY_DEFAULT         0 /* Default setting */
+#define PARITY_NONE            1 /* No parity */
+#define PARITY_CRC16_PR0       2 /* CRC16, initial value 0x0000 */
+#define PARITY_CRC16_PR1       3 /* CRC16, initial value 0xFFFF */
+#define PARITY_CRC16_PR0_CCITT 4 /* CRC16, initial 0x0000, ITU-T version */
+#define PARITY_CRC16_PR1_CCITT 5 /* CRC16, initial 0xFFFF, ITU-T version */
+#define PARITY_CRC32_PR0_CCITT 6 /* CRC32, initial value 0x00000000 */
+#define PARITY_CRC32_PR1_CCITT 7 /* CRC32, initial value 0xFFFFFFFF */
+
+#define LMI_DEFAULT            0 /* Default setting */
+#define LMI_NONE               1 /* No LMI, all PVCs are static */
+#define LMI_ANSI               2 /* ANSI Annex D */
+#define LMI_CCITT              3 /* ITU-T Annex A */
+#define LMI_CISCO              4 /* The "original" LMI, aka Gang of Four */
+
+#ifndef __ASSEMBLY__
+
+typedef struct {
+       unsigned int clock_rate; /* bits per second */
+       unsigned int clock_type; /* internal, external, TX-internal etc. */
+       unsigned short loopback;
+} sync_serial_settings;          /* V.35, V.24, X.21 */
+
+typedef struct {
+       unsigned int clock_rate; /* bits per second */
+       unsigned int clock_type; /* internal, external, TX-internal etc. */
+       unsigned short loopback;
+       unsigned int slot_map;
+} te1_settings;                  /* T1, E1 */
+
+typedef struct {
+       unsigned short encoding;
+       unsigned short parity;
+} raw_hdlc_proto;
+
+typedef struct {
+       unsigned int t391;
+       unsigned int t392;
+       unsigned int n391;
+       unsigned int n392;
+       unsigned int n393;
+       unsigned short lmi;
+       unsigned short dce; /* 1 for DCE (network side) operation */
+} fr_proto;
+
+typedef struct {
+       unsigned int dlci;
+} fr_proto_pvc;          /* for creating/deleting FR PVCs */
+
+typedef struct {
+       unsigned int dlci;
+       char master[IFNAMSIZ];  /* Name of master FRAD device */
+}fr_proto_pvc_info;            /* for returning PVC information only */
+
+typedef struct {
+    unsigned int interval;
+    unsigned int timeout;
+} cisco_proto;
+
+/* PPP doesn't need any info now - supply length = 0 to ioctl */
+
+#endif /* __ASSEMBLY__ */
+#endif /* __HDLC_IOCTL_H__ */
diff --git a/lib/libdss-include/include/linux/hdlcdrv.h b/lib/libdss-include/include/linux/hdlcdrv.h
new file mode 100644 (file)
index 0000000..422d965
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * hdlcdrv.h  -- HDLC packet radio network driver.
+ * The Linux soundcard driver for 1200 baud and 9600 baud packet radio
+ * (C) 1996-1998 by Thomas Sailer, HB9JNX/AE4WA
+ */
+
+#ifndef _HDLCDRV_H
+#define _HDLCDRV_H
+
+/* -------------------------------------------------------------------- */
+/*
+ * structs for the IOCTL commands
+ */
+
+struct hdlcdrv_params {
+       int iobase;
+       int irq;
+       int dma;
+       int dma2;
+       int seriobase;
+       int pariobase;
+       int midiiobase;
+};     
+
+struct hdlcdrv_channel_params {
+       int tx_delay;  /* the transmitter keyup delay in 10ms units */
+       int tx_tail;   /* the transmitter keyoff delay in 10ms units */
+       int slottime;  /* the slottime in 10ms; usually 10 = 100ms */
+       int ppersist;  /* the p-persistence 0..255 */
+       int fulldup;   /* some driver do not support full duplex, setting */
+                      /* this just makes them send even if DCD is on */
+};     
+
+struct hdlcdrv_old_channel_state {
+       int ptt;
+       int dcd;
+       int ptt_keyed;
+};
+
+struct hdlcdrv_channel_state {
+       int ptt;
+       int dcd;
+       int ptt_keyed;
+       unsigned long tx_packets;
+       unsigned long tx_errors;
+       unsigned long rx_packets;
+       unsigned long rx_errors;
+};
+
+struct hdlcdrv_ioctl {
+       int cmd;
+       union {
+               struct hdlcdrv_params mp;
+               struct hdlcdrv_channel_params cp;
+               struct hdlcdrv_channel_state cs;
+               struct hdlcdrv_old_channel_state ocs;
+               unsigned int calibrate;
+               unsigned char bits;
+               char modename[128];
+               char drivername[32];
+       } data;
+};
+
+/* -------------------------------------------------------------------- */
+
+/*
+ * ioctl values
+ */
+#define HDLCDRVCTL_GETMODEMPAR       0
+#define HDLCDRVCTL_SETMODEMPAR       1
+#define HDLCDRVCTL_MODEMPARMASK      2  /* not handled by hdlcdrv */
+#define HDLCDRVCTL_GETCHANNELPAR    10
+#define HDLCDRVCTL_SETCHANNELPAR    11
+#define HDLCDRVCTL_OLDGETSTAT       20
+#define HDLCDRVCTL_CALIBRATE        21
+#define HDLCDRVCTL_GETSTAT          22
+
+/*
+ * these are mainly for debugging purposes
+ */
+#define HDLCDRVCTL_GETSAMPLES       30
+#define HDLCDRVCTL_GETBITS          31
+
+/*
+ * not handled by hdlcdrv, but by its depending drivers
+ */
+#define HDLCDRVCTL_GETMODE          40
+#define HDLCDRVCTL_SETMODE          41
+#define HDLCDRVCTL_MODELIST         42
+#define HDLCDRVCTL_DRIVERNAME       43
+
+/*
+ * mask of needed modem parameters, returned by HDLCDRVCTL_MODEMPARMASK
+ */
+#define HDLCDRV_PARMASK_IOBASE      (1<<0)
+#define HDLCDRV_PARMASK_IRQ         (1<<1)
+#define HDLCDRV_PARMASK_DMA         (1<<2)
+#define HDLCDRV_PARMASK_DMA2        (1<<3)
+#define HDLCDRV_PARMASK_SERIOBASE   (1<<4)
+#define HDLCDRV_PARMASK_PARIOBASE   (1<<5)
+#define HDLCDRV_PARMASK_MIDIIOBASE  (1<<6)
+
+/* -------------------------------------------------------------------- */
+
+
+/* -------------------------------------------------------------------- */
+
+#endif /* _HDLCDRV_H */
+
+/* -------------------------------------------------------------------- */
diff --git a/lib/libdss-include/include/linux/hdreg.h b/lib/libdss-include/include/linux/hdreg.h
new file mode 100644 (file)
index 0000000..774173f
--- /dev/null
@@ -0,0 +1,642 @@
+#ifndef _LINUX_HDREG_H
+#define _LINUX_HDREG_H
+
+#include <linux/types.h>
+
+/*
+ * Command Header sizes for IOCTL commands
+ */
+
+#define HDIO_DRIVE_CMD_HDR_SIZE                (4 * sizeof(__u8))
+#define HDIO_DRIVE_HOB_HDR_SIZE                (8 * sizeof(__u8))
+#define HDIO_DRIVE_TASK_HDR_SIZE       (8 * sizeof(__u8))
+
+#define IDE_DRIVE_TASK_NO_DATA         0
+#define IDE_DRIVE_TASK_INVALID         -1
+#define IDE_DRIVE_TASK_SET_XFER                1
+#define IDE_DRIVE_TASK_IN              2
+#define IDE_DRIVE_TASK_OUT             3
+#define IDE_DRIVE_TASK_RAW_WRITE       4
+
+/*
+ * Define standard taskfile in/out register
+ */
+#define IDE_TASKFILE_STD_IN_FLAGS      0xFE
+#define IDE_HOB_STD_IN_FLAGS           0x3C
+#define IDE_TASKFILE_STD_OUT_FLAGS     0xFE
+#define IDE_HOB_STD_OUT_FLAGS          0x3C
+
+typedef unsigned char task_ioreg_t;
+typedef unsigned long sata_ioreg_t;
+
+typedef union ide_reg_valid_s {
+       unsigned all                            : 16;
+       struct {
+               unsigned data                   : 1;
+               unsigned error_feature          : 1;
+               unsigned sector                 : 1;
+               unsigned nsector                : 1;
+               unsigned lcyl                   : 1;
+               unsigned hcyl                   : 1;
+               unsigned select                 : 1;
+               unsigned status_command         : 1;
+
+               unsigned data_hob               : 1;
+               unsigned error_feature_hob      : 1;
+               unsigned sector_hob             : 1;
+               unsigned nsector_hob            : 1;
+               unsigned lcyl_hob               : 1;
+               unsigned hcyl_hob               : 1;
+               unsigned select_hob             : 1;
+               unsigned control_hob            : 1;
+       } b;
+} ide_reg_valid_t;
+
+typedef struct ide_task_request_s {
+       __u8            io_ports[8];
+       __u8            hob_ports[8]; /* bytes 6 and 7 are unused */
+       ide_reg_valid_t out_flags;
+       ide_reg_valid_t in_flags;
+       int             data_phase;
+       int             req_cmd;
+       unsigned long   out_size;
+       unsigned long   in_size;
+} ide_task_request_t;
+
+typedef struct ide_ioctl_request_s {
+       ide_task_request_t      *task_request;
+       unsigned char           *out_buffer;
+       unsigned char           *in_buffer;
+} ide_ioctl_request_t;
+
+struct hd_drive_cmd_hdr {
+       __u8 command;
+       __u8 sector_number;
+       __u8 feature;
+       __u8 sector_count;
+};
+
+typedef struct hd_drive_task_hdr {
+       __u8 data;
+       __u8 feature;
+       __u8 sector_count;
+       __u8 sector_number;
+       __u8 low_cylinder;
+       __u8 high_cylinder;
+       __u8 device_head;
+       __u8 command;
+} task_struct_t;
+
+typedef struct hd_drive_hob_hdr {
+       __u8 data;
+       __u8 feature;
+       __u8 sector_count;
+       __u8 sector_number;
+       __u8 low_cylinder;
+       __u8 high_cylinder;
+       __u8 device_head;
+       __u8 control;
+} hob_struct_t;
+
+#define TASKFILE_NO_DATA               0x0000
+
+#define TASKFILE_IN                    0x0001
+#define TASKFILE_MULTI_IN              0x0002
+
+#define TASKFILE_OUT                   0x0004
+#define TASKFILE_MULTI_OUT             0x0008
+#define TASKFILE_IN_OUT                        0x0010
+
+#define TASKFILE_IN_DMA                        0x0020
+#define TASKFILE_OUT_DMA               0x0040
+#define TASKFILE_IN_DMAQ               0x0080
+#define TASKFILE_OUT_DMAQ              0x0100
+
+#define TASKFILE_P_IN                  0x0200
+#define TASKFILE_P_OUT                 0x0400
+#define TASKFILE_P_IN_DMA              0x0800
+#define TASKFILE_P_OUT_DMA             0x1000
+#define TASKFILE_P_IN_DMAQ             0x2000
+#define TASKFILE_P_OUT_DMAQ            0x4000
+#define TASKFILE_48                    0x8000
+#define TASKFILE_INVALID               0x7fff
+
+/* ATA/ATAPI Commands pre T13 Spec */
+#define WIN_NOP                                0x00
+/*
+ *     0x01->0x02 Reserved
+ */
+#define CFA_REQ_EXT_ERROR_CODE         0x03 /* CFA Request Extended Error Code */
+/*
+ *     0x04->0x07 Reserved
+ */
+#define WIN_SRST                       0x08 /* ATAPI soft reset command */
+#define WIN_DEVICE_RESET               0x08
+/*
+ *     0x09->0x0F Reserved
+ */
+#define WIN_RECAL                      0x10
+#define WIN_RESTORE                    WIN_RECAL
+/*
+ *     0x10->0x1F Reserved
+ */
+#define WIN_READ                       0x20 /* 28-Bit */
+#define WIN_READ_ONCE                  0x21 /* 28-Bit without retries */
+#define WIN_READ_LONG                  0x22 /* 28-Bit */
+#define WIN_READ_LONG_ONCE             0x23 /* 28-Bit without retries */
+#define WIN_READ_EXT                   0x24 /* 48-Bit */
+#define WIN_READDMA_EXT                        0x25 /* 48-Bit */
+#define WIN_READDMA_QUEUED_EXT         0x26 /* 48-Bit */
+#define WIN_READ_NATIVE_MAX_EXT                0x27 /* 48-Bit */
+/*
+ *     0x28
+ */
+#define WIN_MULTREAD_EXT               0x29 /* 48-Bit */
+/*
+ *     0x2A->0x2F Reserved
+ */
+#define WIN_WRITE                      0x30 /* 28-Bit */
+#define WIN_WRITE_ONCE                 0x31 /* 28-Bit without retries */
+#define WIN_WRITE_LONG                 0x32 /* 28-Bit */
+#define WIN_WRITE_LONG_ONCE            0x33 /* 28-Bit without retries */
+#define WIN_WRITE_EXT                  0x34 /* 48-Bit */
+#define WIN_WRITEDMA_EXT               0x35 /* 48-Bit */
+#define WIN_WRITEDMA_QUEUED_EXT                0x36 /* 48-Bit */
+#define WIN_SET_MAX_EXT                        0x37 /* 48-Bit */
+#define CFA_WRITE_SECT_WO_ERASE                0x38 /* CFA Write Sectors without erase */
+#define WIN_MULTWRITE_EXT              0x39 /* 48-Bit */
+/*
+ *     0x3A->0x3B Reserved
+ */
+#define WIN_WRITE_VERIFY               0x3C /* 28-Bit */
+/*
+ *     0x3D->0x3F Reserved
+ */
+#define WIN_VERIFY                     0x40 /* 28-Bit - Read Verify Sectors */
+#define WIN_VERIFY_ONCE                        0x41 /* 28-Bit - without retries */
+#define WIN_VERIFY_EXT                 0x42 /* 48-Bit */
+/*
+ *     0x43->0x4F Reserved
+ */
+#define WIN_FORMAT                     0x50
+/*
+ *     0x51->0x5F Reserved
+ */
+#define WIN_INIT                       0x60
+/*
+ *     0x61->0x5F Reserved
+ */
+#define WIN_SEEK                       0x70 /* 0x70-0x7F Reserved */
+
+#define CFA_TRANSLATE_SECTOR           0x87 /* CFA Translate Sector */
+#define WIN_DIAGNOSE                   0x90
+#define WIN_SPECIFY                    0x91 /* set drive geometry translation */
+#define WIN_DOWNLOAD_MICROCODE         0x92
+#define WIN_STANDBYNOW2                        0x94
+#define WIN_STANDBY2                   0x96
+#define WIN_SETIDLE2                   0x97
+#define WIN_CHECKPOWERMODE2            0x98
+#define WIN_SLEEPNOW2                  0x99
+/*
+ *     0x9A VENDOR
+ */
+#define WIN_PACKETCMD                  0xA0 /* Send a packet command. */
+#define WIN_PIDENTIFY                  0xA1 /* identify ATAPI device   */
+#define WIN_QUEUED_SERVICE             0xA2
+#define WIN_SMART                      0xB0 /* self-monitoring and reporting */
+#define CFA_ERASE_SECTORS              0xC0
+#define WIN_MULTREAD                   0xC4 /* read sectors using multiple mode*/
+#define WIN_MULTWRITE                  0xC5 /* write sectors using multiple mode */
+#define WIN_SETMULT                    0xC6 /* enable/disable multiple mode */
+#define WIN_READDMA_QUEUED             0xC7 /* read sectors using Queued DMA transfers */
+#define WIN_READDMA                    0xC8 /* read sectors using DMA transfers */
+#define WIN_READDMA_ONCE               0xC9 /* 28-Bit - without retries */
+#define WIN_WRITEDMA                   0xCA /* write sectors using DMA transfers */
+#define WIN_WRITEDMA_ONCE              0xCB /* 28-Bit - without retries */
+#define WIN_WRITEDMA_QUEUED            0xCC /* write sectors using Queued DMA transfers */
+#define CFA_WRITE_MULTI_WO_ERASE       0xCD /* CFA Write multiple without erase */
+#define WIN_GETMEDIASTATUS             0xDA
+#define WIN_ACKMEDIACHANGE             0xDB /* ATA-1, ATA-2 vendor */
+#define WIN_POSTBOOT                   0xDC
+#define WIN_PREBOOT                    0xDD
+#define WIN_DOORLOCK                   0xDE /* lock door on removable drives */
+#define WIN_DOORUNLOCK                 0xDF /* unlock door on removable drives */
+#define WIN_STANDBYNOW1                        0xE0
+#define WIN_IDLEIMMEDIATE              0xE1 /* force drive to become "ready" */
+#define WIN_STANDBY                    0xE2 /* Set device in Standby Mode */
+#define WIN_SETIDLE1                   0xE3
+#define WIN_READ_BUFFER                        0xE4 /* force read only 1 sector */
+#define WIN_CHECKPOWERMODE1            0xE5
+#define WIN_SLEEPNOW1                  0xE6
+#define WIN_FLUSH_CACHE                        0xE7
+#define WIN_WRITE_BUFFER               0xE8 /* force write only 1 sector */
+#define WIN_WRITE_SAME                 0xE9 /* read ata-2 to use */
+       /* SET_FEATURES 0x22 or 0xDD */
+#define WIN_FLUSH_CACHE_EXT            0xEA /* 48-Bit */
+#define WIN_IDENTIFY                   0xEC /* ask drive to identify itself    */
+#define WIN_MEDIAEJECT                 0xED
+#define WIN_IDENTIFY_DMA               0xEE /* same as WIN_IDENTIFY, but DMA */
+#define WIN_SETFEATURES                        0xEF /* set special drive features */
+#define EXABYTE_ENABLE_NEST            0xF0
+#define WIN_SECURITY_SET_PASS          0xF1
+#define WIN_SECURITY_UNLOCK            0xF2
+#define WIN_SECURITY_ERASE_PREPARE     0xF3
+#define WIN_SECURITY_ERASE_UNIT                0xF4
+#define WIN_SECURITY_FREEZE_LOCK       0xF5
+#define WIN_SECURITY_DISABLE           0xF6
+#define WIN_READ_NATIVE_MAX            0xF8 /* return the native maximum address */
+#define WIN_SET_MAX                    0xF9
+#define DISABLE_SEAGATE                        0xFB
+
+/* WIN_SMART sub-commands */
+
+#define SMART_READ_VALUES              0xD0
+#define SMART_READ_THRESHOLDS          0xD1
+#define SMART_AUTOSAVE                 0xD2
+#define SMART_SAVE                     0xD3
+#define SMART_IMMEDIATE_OFFLINE                0xD4
+#define SMART_READ_LOG_SECTOR          0xD5
+#define SMART_WRITE_LOG_SECTOR         0xD6
+#define SMART_WRITE_THRESHOLDS         0xD7
+#define SMART_ENABLE                   0xD8
+#define SMART_DISABLE                  0xD9
+#define SMART_STATUS                   0xDA
+#define SMART_AUTO_OFFLINE             0xDB
+
+/* Password used in TF4 & TF5 executing SMART commands */
+
+#define SMART_LCYL_PASS                        0x4F
+#define SMART_HCYL_PASS                        0xC2
+
+/* WIN_SETFEATURES sub-commands */
+#define SETFEATURES_EN_8BIT    0x01    /* Enable 8-Bit Transfers */
+#define SETFEATURES_EN_WCACHE  0x02    /* Enable write cache */
+#define SETFEATURES_DIS_DEFECT 0x04    /* Disable Defect Management */
+#define SETFEATURES_EN_APM     0x05    /* Enable advanced power management */
+#define SETFEATURES_EN_SAME_R  0x22    /* for a region ATA-1 */
+#define SETFEATURES_DIS_MSN    0x31    /* Disable Media Status Notification */
+#define SETFEATURES_DIS_RETRY  0x33    /* Disable Retry */
+#define SETFEATURES_EN_AAM     0x42    /* Enable Automatic Acoustic Management */
+#define SETFEATURES_RW_LONG    0x44    /* Set Length of VS bytes */
+#define SETFEATURES_SET_CACHE  0x54    /* Set Cache segments to SC Reg. Val */
+#define SETFEATURES_DIS_RLA    0x55    /* Disable read look-ahead feature */
+#define SETFEATURES_EN_RI      0x5D    /* Enable release interrupt */
+#define SETFEATURES_EN_SI      0x5E    /* Enable SERVICE interrupt */
+#define SETFEATURES_DIS_RPOD   0x66    /* Disable reverting to power on defaults */
+#define SETFEATURES_DIS_ECC    0x77    /* Disable ECC byte count */
+#define SETFEATURES_DIS_8BIT   0x81    /* Disable 8-Bit Transfers */
+#define SETFEATURES_DIS_WCACHE 0x82    /* Disable write cache */
+#define SETFEATURES_EN_DEFECT  0x84    /* Enable Defect Management */
+#define SETFEATURES_DIS_APM    0x85    /* Disable advanced power management */
+#define SETFEATURES_EN_ECC     0x88    /* Enable ECC byte count */
+#define SETFEATURES_EN_MSN     0x95    /* Enable Media Status Notification */
+#define SETFEATURES_EN_RETRY   0x99    /* Enable Retry */
+#define SETFEATURES_EN_RLA     0xAA    /* Enable read look-ahead feature */
+#define SETFEATURES_PREFETCH   0xAB    /* Sets drive prefetch value */
+#define SETFEATURES_EN_REST    0xAC    /* ATA-1 */
+#define SETFEATURES_4B_RW_LONG 0xBB    /* Set Length of 4 bytes */
+#define SETFEATURES_DIS_AAM    0xC2    /* Disable Automatic Acoustic Management */
+#define SETFEATURES_EN_RPOD    0xCC    /* Enable reverting to power on defaults */
+#define SETFEATURES_DIS_RI     0xDD    /* Disable release interrupt ATAPI */
+#define SETFEATURES_EN_SAME_M  0xDD    /* for a entire device ATA-1 */
+#define SETFEATURES_DIS_SI     0xDE    /* Disable SERVICE interrupt ATAPI */
+
+/* WIN_SECURITY sub-commands */
+
+#define SECURITY_SET_PASSWORD          0xBA
+#define SECURITY_UNLOCK                        0xBB
+#define SECURITY_ERASE_PREPARE         0xBC
+#define SECURITY_ERASE_UNIT            0xBD
+#define SECURITY_FREEZE_LOCK           0xBE
+#define SECURITY_DISABLE_PASSWORD      0xBF
+
+struct hd_geometry {
+      unsigned char heads;
+      unsigned char sectors;
+      unsigned short cylinders;
+      unsigned long start;
+};
+
+/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
+#define HDIO_GETGEO            0x0301  /* get device geometry */
+#define HDIO_GET_UNMASKINTR    0x0302  /* get current unmask setting */
+#define HDIO_GET_MULTCOUNT     0x0304  /* get current IDE blockmode setting */
+#define HDIO_GET_QDMA          0x0305  /* get use-qdma flag */
+
+#define HDIO_SET_XFER          0x0306  /* set transfer rate via proc */
+
+#define HDIO_OBSOLETE_IDENTITY 0x0307  /* OBSOLETE, DO NOT USE: returns 142 bytes */
+#define HDIO_GET_KEEPSETTINGS  0x0308  /* get keep-settings-on-reset flag */
+#define HDIO_GET_32BIT         0x0309  /* get current io_32bit setting */
+#define HDIO_GET_NOWERR                0x030a  /* get ignore-write-error flag */
+#define HDIO_GET_DMA           0x030b  /* get use-dma flag */
+#define HDIO_GET_NICE          0x030c  /* get nice flags */
+#define HDIO_GET_IDENTITY      0x030d  /* get IDE identification info */
+#define HDIO_GET_WCACHE                0x030e  /* get write cache mode on|off */
+#define HDIO_GET_ACOUSTIC      0x030f  /* get acoustic value */
+#define        HDIO_GET_ADDRESS        0x0310  /* */
+
+#define HDIO_GET_BUSSTATE      0x031a  /* get the bus state of the hwif */
+#define HDIO_TRISTATE_HWIF     0x031b  /* execute a channel tristate */
+#define HDIO_DRIVE_RESET       0x031c  /* execute a device reset */
+#define HDIO_DRIVE_TASKFILE    0x031d  /* execute raw taskfile */
+#define HDIO_DRIVE_TASK                0x031e  /* execute task and special drive command */
+#define HDIO_DRIVE_CMD         0x031f  /* execute a special drive command */
+#define HDIO_DRIVE_CMD_AEB     HDIO_DRIVE_TASK
+
+/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
+#define HDIO_SET_MULTCOUNT     0x0321  /* change IDE blockmode */
+#define HDIO_SET_UNMASKINTR    0x0322  /* permit other irqs during I/O */
+#define HDIO_SET_KEEPSETTINGS  0x0323  /* keep ioctl settings on reset */
+#define HDIO_SET_32BIT         0x0324  /* change io_32bit flags */
+#define HDIO_SET_NOWERR                0x0325  /* change ignore-write-error flag */
+#define HDIO_SET_DMA           0x0326  /* change use-dma flag */
+#define HDIO_SET_PIO_MODE      0x0327  /* reconfig interface to new speed */
+#define HDIO_SCAN_HWIF         0x0328  /* register and (re)scan interface */
+#define HDIO_UNREGISTER_HWIF   0x032a  /* unregister interface */
+#define HDIO_SET_NICE          0x0329  /* set nice flags */
+#define HDIO_SET_WCACHE                0x032b  /* change write cache enable-disable */
+#define HDIO_SET_ACOUSTIC      0x032c  /* change acoustic behavior */
+#define HDIO_SET_BUSSTATE      0x032d  /* set the bus state of the hwif */
+#define HDIO_SET_QDMA          0x032e  /* change use-qdma flag */
+#define HDIO_SET_ADDRESS       0x032f  /* change lba addressing modes */
+
+/* bus states */
+enum {
+       BUSSTATE_OFF = 0,
+       BUSSTATE_ON,
+       BUSSTATE_TRISTATE
+};
+
+/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */
+/* 0x330 is reserved - used to be HDIO_GETGEO_BIG */
+/* 0x331 is reserved - used to be HDIO_GETGEO_BIG_RAW */
+/* 0x338 is reserved - used to be HDIO_SET_IDE_SCSI */
+/* 0x339 is reserved - used to be HDIO_SET_SCSI_IDE */
+
+#define __NEW_HD_DRIVE_ID
+
+/*
+ * Structure returned by HDIO_GET_IDENTITY, as per ANSI NCITS ATA6 rev.1b spec.
+ *
+ * If you change something here, please remember to update fix_driveid() in
+ * ide/probe.c.
+ */
+struct hd_driveid {
+       unsigned short  config;         /* lots of obsolete bit flags */
+       unsigned short  cyls;           /* Obsolete, "physical" cyls */
+       unsigned short  reserved2;      /* reserved (word 2) */
+       unsigned short  heads;          /* Obsolete, "physical" heads */
+       unsigned short  track_bytes;    /* unformatted bytes per track */
+       unsigned short  sector_bytes;   /* unformatted bytes per sector */
+       unsigned short  sectors;        /* Obsolete, "physical" sectors per track */
+       unsigned short  vendor0;        /* vendor unique */
+       unsigned short  vendor1;        /* vendor unique */
+       unsigned short  vendor2;        /* Retired vendor unique */
+       unsigned char   serial_no[20];  /* 0 = not_specified */
+       unsigned short  buf_type;       /* Retired */
+       unsigned short  buf_size;       /* Retired, 512 byte increments
+                                        * 0 = not_specified
+                                        */
+       unsigned short  ecc_bytes;      /* for r/w long cmds; 0 = not_specified */
+       unsigned char   fw_rev[8];      /* 0 = not_specified */
+       unsigned char   model[40];      /* 0 = not_specified */
+       unsigned char   max_multsect;   /* 0=not_implemented */
+       unsigned char   vendor3;        /* vendor unique */
+       unsigned short  dword_io;       /* 0=not_implemented; 1=implemented */
+       unsigned char   vendor4;        /* vendor unique */
+       unsigned char   capability;     /* (upper byte of word 49)
+                                        *  3:  IORDYsup
+                                        *  2:  IORDYsw
+                                        *  1:  LBA
+                                        *  0:  DMA
+                                        */
+       unsigned short  reserved50;     /* reserved (word 50) */
+       unsigned char   vendor5;        /* Obsolete, vendor unique */
+       unsigned char   tPIO;           /* Obsolete, 0=slow, 1=medium, 2=fast */
+       unsigned char   vendor6;        /* Obsolete, vendor unique */
+       unsigned char   tDMA;           /* Obsolete, 0=slow, 1=medium, 2=fast */
+       unsigned short  field_valid;    /* (word 53)
+                                        *  2:  ultra_ok        word  88
+                                        *  1:  eide_ok         words 64-70
+                                        *  0:  cur_ok          words 54-58
+                                        */
+       unsigned short  cur_cyls;       /* Obsolete, logical cylinders */
+       unsigned short  cur_heads;      /* Obsolete, l heads */
+       unsigned short  cur_sectors;    /* Obsolete, l sectors per track */
+       unsigned short  cur_capacity0;  /* Obsolete, l total sectors on drive */
+       unsigned short  cur_capacity1;  /* Obsolete, (2 words, misaligned int)     */
+       unsigned char   multsect;       /* current multiple sector count */
+       unsigned char   multsect_valid; /* when (bit0==1) multsect is ok */
+       unsigned int    lba_capacity;   /* Obsolete, total number of sectors */
+       unsigned short  dma_1word;      /* Obsolete, single-word dma info */
+       unsigned short  dma_mword;      /* multiple-word dma info */
+       unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */
+       unsigned short  eide_dma_min;   /* min mword dma cycle time (ns) */
+       unsigned short  eide_dma_time;  /* recommended mword dma cycle time (ns) */
+       unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */
+       unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */
+       unsigned short  words69_70[2];  /* reserved words 69-70
+                                        * future command overlap and queuing
+                                        */
+       unsigned short  words71_74[4];  /* reserved words 71-74
+                                        * for IDENTIFY PACKET DEVICE command
+                                        */
+       unsigned short  queue_depth;    /* (word 75)
+                                        * 15:5 reserved
+                                        *  4:0 Maximum queue depth -1
+                                        */
+       unsigned short  words76_79[4];  /* reserved words 76-79 */
+       unsigned short  major_rev_num;  /* (word 80) */
+       unsigned short  minor_rev_num;  /* (word 81) */
+       unsigned short  command_set_1;  /* (word 82) supported
+                                        * 15:  Obsolete
+                                        * 14:  NOP command
+                                        * 13:  READ_BUFFER
+                                        * 12:  WRITE_BUFFER
+                                        * 11:  Obsolete
+                                        * 10:  Host Protected Area
+                                        *  9:  DEVICE Reset
+                                        *  8:  SERVICE Interrupt
+                                        *  7:  Release Interrupt
+                                        *  6:  look-ahead
+                                        *  5:  write cache
+                                        *  4:  PACKET Command
+                                        *  3:  Power Management Feature Set
+                                        *  2:  Removable Feature Set
+                                        *  1:  Security Feature Set
+                                        *  0:  SMART Feature Set
+                                        */
+       unsigned short  command_set_2;  /* (word 83)
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:  FLUSH CACHE EXT
+                                        * 12:  FLUSH CACHE
+                                        * 11:  Device Configuration Overlay
+                                        * 10:  48-bit Address Feature Set
+                                        *  9:  Automatic Acoustic Management
+                                        *  8:  SET MAX security
+                                        *  7:  reserved 1407DT PARTIES
+                                        *  6:  SetF sub-command Power-Up
+                                        *  5:  Power-Up in Standby Feature Set
+                                        *  4:  Removable Media Notification
+                                        *  3:  APM Feature Set
+                                        *  2:  CFA Feature Set
+                                        *  1:  READ/WRITE DMA QUEUED
+                                        *  0:  Download MicroCode
+                                        */
+       unsigned short  cfsse;          /* (word 84)
+                                        * cmd set-feature supported extensions
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:6 reserved
+                                        *  5:  General Purpose Logging
+                                        *  4:  Streaming Feature Set
+                                        *  3:  Media Card Pass Through
+                                        *  2:  Media Serial Number Valid
+                                        *  1:  SMART selt-test supported
+                                        *  0:  SMART error logging
+                                        */
+       unsigned short  cfs_enable_1;   /* (word 85)
+                                        * command set-feature enabled
+                                        * 15:  Obsolete
+                                        * 14:  NOP command
+                                        * 13:  READ_BUFFER
+                                        * 12:  WRITE_BUFFER
+                                        * 11:  Obsolete
+                                        * 10:  Host Protected Area
+                                        *  9:  DEVICE Reset
+                                        *  8:  SERVICE Interrupt
+                                        *  7:  Release Interrupt
+                                        *  6:  look-ahead
+                                        *  5:  write cache
+                                        *  4:  PACKET Command
+                                        *  3:  Power Management Feature Set
+                                        *  2:  Removable Feature Set
+                                        *  1:  Security Feature Set
+                                        *  0:  SMART Feature Set
+                                        */
+       unsigned short  cfs_enable_2;   /* (word 86)
+                                        * command set-feature enabled
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:  FLUSH CACHE EXT
+                                        * 12:  FLUSH CACHE
+                                        * 11:  Device Configuration Overlay
+                                        * 10:  48-bit Address Feature Set
+                                        *  9:  Automatic Acoustic Management
+                                        *  8:  SET MAX security
+                                        *  7:  reserved 1407DT PARTIES
+                                        *  6:  SetF sub-command Power-Up
+                                        *  5:  Power-Up in Standby Feature Set
+                                        *  4:  Removable Media Notification
+                                        *  3:  APM Feature Set
+                                        *  2:  CFA Feature Set
+                                        *  1:  READ/WRITE DMA QUEUED
+                                        *  0:  Download MicroCode
+                                        */
+       unsigned short  csf_default;    /* (word 87)
+                                        * command set-feature default
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:6 reserved
+                                        *  5:  General Purpose Logging enabled
+                                        *  4:  Valid CONFIGURE STREAM executed
+                                        *  3:  Media Card Pass Through enabled
+                                        *  2:  Media Serial Number Valid
+                                        *  1:  SMART selt-test supported
+                                        *  0:  SMART error logging
+                                        */
+       unsigned short  dma_ultra;      /* (word 88) */
+       unsigned short  trseuc;         /* time required for security erase */
+       unsigned short  trsEuc;         /* time required for enhanced erase */
+       unsigned short  CurAPMvalues;   /* current APM values */
+       unsigned short  mprc;           /* master password revision code */
+       unsigned short  hw_config;      /* hardware config (word 93)
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:
+                                        * 12:
+                                        * 11:
+                                        * 10:
+                                        *  9:
+                                        *  8:
+                                        *  7:
+                                        *  6:
+                                        *  5:
+                                        *  4:
+                                        *  3:
+                                        *  2:
+                                        *  1:
+                                        *  0:  Shall be ONE
+                                        */
+       unsigned short  acoustic;       /* (word 94)
+                                        * 15:8 Vendor's recommended value
+                                        *  7:0 current value
+                                        */
+       unsigned short  msrqs;          /* min stream request size */
+       unsigned short  sxfert;         /* stream transfer time */
+       unsigned short  sal;            /* stream access latency */
+       unsigned int    spg;            /* stream performance granularity */
+       unsigned long long lba_capacity_2;/* 48-bit total number of sectors */
+       unsigned short  words104_125[22];/* reserved words 104-125 */
+       unsigned short  last_lun;       /* (word 126) */
+       unsigned short  word127;        /* (word 127) Feature Set
+                                        * Removable Media Notification
+                                        * 15:2 reserved
+                                        *  1:0 00 = not supported
+                                        *      01 = supported
+                                        *      10 = reserved
+                                        *      11 = reserved
+                                        */
+       unsigned short  dlf;            /* (word 128)
+                                        * device lock function
+                                        * 15:9 reserved
+                                        *  8   security level 1:max 0:high
+                                        *  7:6 reserved
+                                        *  5   enhanced erase
+                                        *  4   expire
+                                        *  3   frozen
+                                        *  2   locked
+                                        *  1   en/disabled
+                                        *  0   capability
+                                        */
+       unsigned short  csfo;           /*  (word 129)
+                                        * current set features options
+                                        * 15:4 reserved
+                                        *  3:  auto reassign
+                                        *  2:  reverting
+                                        *  1:  read-look-ahead
+                                        *  0:  write cache
+                                        */
+       unsigned short  words130_155[26];/* reserved vendor words 130-155 */
+       unsigned short  word156;        /* reserved vendor word 156 */
+       unsigned short  words157_159[3];/* reserved vendor words 157-159 */
+       unsigned short  cfa_power;      /* (word 160) CFA Power Mode
+                                        * 15 word 160 supported
+                                        * 14 reserved
+                                        * 13
+                                        * 12
+                                        * 11:0
+                                        */
+       unsigned short  words161_175[15];/* Reserved for CFA */
+       unsigned short  words176_205[30];/* Current Media Serial Number */
+       unsigned short  words206_254[49];/* reserved words 206-254 */
+       unsigned short  integrity_word; /* (word 255)
+                                        * 15:8 Checksum
+                                        *  7:0 Signature
+                                        */
+};
+
+/*
+ * IDE "nice" flags. These are used on a per drive basis to determine
+ * when to be nice and give more bandwidth to the other devices which
+ * share the same IDE bus.
+ */
+#define IDE_NICE_DSC_OVERLAP   (0)     /* per the DSC overlap protocol */
+#define IDE_NICE_ATAPI_OVERLAP (1)     /* not supported yet */
+#define IDE_NICE_1             (3)     /* when probably won't affect us much */
+#define IDE_NICE_0             (2)     /* when sure that it won't affect us */
+#define IDE_NICE_2             (4)     /* when we know it's on our expense */
+
+#endif /* _LINUX_HDREG_H */
diff --git a/lib/libdss-include/include/linux/hid.h b/lib/libdss-include/include/linux/hid.h
new file mode 100644 (file)
index 0000000..2c23ba6
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ *  Copyright (c) 1999 Andreas Gal
+ *  Copyright (c) 2000-2001 Vojtech Pavlik
+ *  Copyright (c) 2006-2007 Jiri Kosina
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
+ * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
+ */
+#ifndef __HID_H
+#define __HID_H
+
+
+
+/*
+ * USB HID (Human Interface Device) interface class code
+ */
+
+#define USB_INTERFACE_CLASS_HID                3
+
+/*
+ * USB HID interface subclass and protocol codes
+ */
+
+#define USB_INTERFACE_SUBCLASS_BOOT    1
+#define USB_INTERFACE_PROTOCOL_KEYBOARD        1
+#define USB_INTERFACE_PROTOCOL_MOUSE   2
+
+/*
+ * HID class requests
+ */
+
+#define HID_REQ_GET_REPORT             0x01
+#define HID_REQ_GET_IDLE               0x02
+#define HID_REQ_GET_PROTOCOL           0x03
+#define HID_REQ_SET_REPORT             0x09
+#define HID_REQ_SET_IDLE               0x0A
+#define HID_REQ_SET_PROTOCOL           0x0B
+
+/*
+ * HID class descriptor types
+ */
+
+#define HID_DT_HID                     (USB_TYPE_CLASS | 0x01)
+#define HID_DT_REPORT                  (USB_TYPE_CLASS | 0x02)
+#define HID_DT_PHYSICAL                        (USB_TYPE_CLASS | 0x03)
+
+#define HID_MAX_DESCRIPTOR_SIZE                4096
+
+
+#endif /* __HID_H */
diff --git a/lib/libdss-include/include/linux/hiddev.h b/lib/libdss-include/include/linux/hiddev.h
new file mode 100644 (file)
index 0000000..e24ca19
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ *  Copyright (c) 1999-2000 Vojtech Pavlik
+ *
+ *  Sponsored by SuSE
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or 
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
+ * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
+ */
+#ifndef _HIDDEV_H
+#define _HIDDEV_H
+
+
+
+#include <linux/types.h>
+
+/*
+ * The event structure itself
+ */
+
+struct hiddev_event {
+       unsigned hid;
+       signed int value;
+};
+
+struct hiddev_devinfo {
+       __u32 bustype;
+       __u32 busnum;
+       __u32 devnum;
+       __u32 ifnum;
+       __s16 vendor;
+       __s16 product;
+       __s16 version;
+       __u32 num_applications;
+};
+
+struct hiddev_collection_info {
+       __u32 index;
+       __u32 type;
+       __u32 usage;
+       __u32 level;
+};
+
+#define HID_STRING_SIZE 256
+struct hiddev_string_descriptor {
+       __s32 index;
+       char value[HID_STRING_SIZE];
+};
+
+struct hiddev_report_info {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 num_fields;
+};
+
+/* To do a GUSAGE/SUSAGE, fill in at least usage_code,  report_type and 
+ * report_id.  Set report_id to REPORT_ID_UNKNOWN if the rest of the fields 
+ * are unknown.  Otherwise use a usage_ref struct filled in from a previous 
+ * successful GUSAGE call to save time.  To actually send a value to the
+ * device, perform a SUSAGE first, followed by a SREPORT.  An INITREPORT or a
+ * GREPORT isn't necessary for a GUSAGE to return valid data.
+ */
+#define HID_REPORT_ID_UNKNOWN 0xffffffff
+#define HID_REPORT_ID_FIRST   0x00000100
+#define HID_REPORT_ID_NEXT    0x00000200
+#define HID_REPORT_ID_MASK    0x000000ff
+#define HID_REPORT_ID_MAX     0x000000ff
+
+#define HID_REPORT_TYPE_INPUT  1
+#define HID_REPORT_TYPE_OUTPUT 2
+#define HID_REPORT_TYPE_FEATURE        3
+#define HID_REPORT_TYPE_MIN     1
+#define HID_REPORT_TYPE_MAX     3
+
+struct hiddev_field_info {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 field_index;
+       __u32 maxusage;
+       __u32 flags;
+       __u32 physical;         /* physical usage for this field */
+       __u32 logical;          /* logical usage for this field */
+       __u32 application;              /* application usage for this field */
+       __s32 logical_minimum;
+       __s32 logical_maximum;
+       __s32 physical_minimum;
+       __s32 physical_maximum;
+       __u32 unit_exponent;
+       __u32 unit;
+};
+
+/* Fill in report_type, report_id and field_index to get the information on a
+ * field.
+ */
+#define HID_FIELD_CONSTANT             0x001
+#define HID_FIELD_VARIABLE             0x002
+#define HID_FIELD_RELATIVE             0x004
+#define HID_FIELD_WRAP                 0x008   
+#define HID_FIELD_NONLINEAR            0x010
+#define HID_FIELD_NO_PREFERRED         0x020
+#define HID_FIELD_NULL_STATE           0x040
+#define HID_FIELD_VOLATILE             0x080
+#define HID_FIELD_BUFFERED_BYTE                0x100
+
+struct hiddev_usage_ref {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 field_index;
+       __u32 usage_index;
+       __u32 usage_code;
+       __s32 value;
+};
+
+/* hiddev_usage_ref_multi is used for sending multiple bytes to a control.
+ * It really manifests itself as setting the value of consecutive usages */
+#define HID_MAX_MULTI_USAGES 1024
+struct hiddev_usage_ref_multi {
+       struct hiddev_usage_ref uref;
+       __u32 num_values;
+       __s32 values[HID_MAX_MULTI_USAGES];
+};
+
+/* FIELD_INDEX_NONE is returned in read() data from the kernel when flags
+ * is set to (HIDDEV_FLAG_UREF | HIDDEV_FLAG_REPORT) and a new report has
+ * been sent by the device 
+ */
+#define HID_FIELD_INDEX_NONE 0xffffffff
+
+/*
+ * Protocol version.
+ */
+
+#define HID_VERSION            0x010004
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+#define HIDIOCGVERSION         _IOR('H', 0x01, int)
+#define HIDIOCAPPLICATION      _IO('H', 0x02)
+#define HIDIOCGDEVINFO         _IOR('H', 0x03, struct hiddev_devinfo)
+#define HIDIOCGSTRING          _IOR('H', 0x04, struct hiddev_string_descriptor)
+#define HIDIOCINITREPORT       _IO('H', 0x05)
+#define HIDIOCGNAME(len)       _IOC(_IOC_READ, 'H', 0x06, len)
+#define HIDIOCGREPORT          _IOW('H', 0x07, struct hiddev_report_info)
+#define HIDIOCSREPORT          _IOW('H', 0x08, struct hiddev_report_info)
+#define HIDIOCGREPORTINFO      _IOWR('H', 0x09, struct hiddev_report_info)
+#define HIDIOCGFIELDINFO       _IOWR('H', 0x0A, struct hiddev_field_info)
+#define HIDIOCGUSAGE           _IOWR('H', 0x0B, struct hiddev_usage_ref)
+#define HIDIOCSUSAGE           _IOW('H', 0x0C, struct hiddev_usage_ref)
+#define HIDIOCGUCODE           _IOWR('H', 0x0D, struct hiddev_usage_ref)
+#define HIDIOCGFLAG            _IOR('H', 0x0E, int)
+#define HIDIOCSFLAG            _IOW('H', 0x0F, int)
+#define HIDIOCGCOLLECTIONINDEX _IOW('H', 0x10, struct hiddev_usage_ref)
+#define HIDIOCGCOLLECTIONINFO  _IOWR('H', 0x11, struct hiddev_collection_info)
+#define HIDIOCGPHYS(len)       _IOC(_IOC_READ, 'H', 0x12, len)
+
+/* For writing/reading to multiple/consecutive usages */
+#define HIDIOCGUSAGES          _IOWR('H', 0x13, struct hiddev_usage_ref_multi)
+#define HIDIOCSUSAGES          _IOW('H', 0x14, struct hiddev_usage_ref_multi)
+
+/* 
+ * Flags to be used in HIDIOCSFLAG
+ */
+#define HIDDEV_FLAG_UREF       0x1
+#define HIDDEV_FLAG_REPORT     0x2
+#define HIDDEV_FLAGS           0x3
+
+/* To traverse the input report descriptor info for a HID device, perform the 
+ * following:
+ *
+ * rinfo.report_type = HID_REPORT_TYPE_INPUT;
+ * rinfo.report_id = HID_REPORT_ID_FIRST;
+ * ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
+ *
+ * while (ret >= 0) {
+ *     for (i = 0; i < rinfo.num_fields; i++) {
+ *             finfo.report_type = rinfo.report_type;
+ *             finfo.report_id = rinfo.report_id;
+ *             finfo.field_index = i;
+ *             ioctl(fd, HIDIOCGFIELDINFO, &finfo);
+ *             for (j = 0; j < finfo.maxusage; j++) {
+ *                     uref.report_type = rinfo.report_type;
+ *                     uref.report_id = rinfo.report_id;
+ *                     uref.field_index = i;
+ *                     uref.usage_index = j;
+ *                     ioctl(fd, HIDIOCGUCODE, &uref);
+ *                     ioctl(fd, HIDIOCGUSAGE, &uref);
+ *             }
+ *     }
+ *     rinfo.report_id |= HID_REPORT_ID_NEXT;
+ *     ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
+ * }
+ */
+
+
+#endif /* _HIDDEV_H */
diff --git a/lib/libdss-include/include/linux/hidraw.h b/lib/libdss-include/include/linux/hidraw.h
new file mode 100644 (file)
index 0000000..e781b0e
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *  Copyright (c) 2007 Jiri Kosina
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef _HIDRAW_H
+#define _HIDRAW_H
+
+
+
+#include <linux/hid.h>
+#include <linux/types.h>
+
+struct hidraw_report_descriptor {
+       __u32 size;
+       __u8 value[HID_MAX_DESCRIPTOR_SIZE];
+};
+
+struct hidraw_devinfo {
+       __u32 bustype;
+       __s16 vendor;
+       __s16 product;
+};
+
+/* ioctl interface */
+#define HIDIOCGRDESCSIZE       _IOR('H', 0x01, int)
+#define HIDIOCGRDESC           _IOR('H', 0x02, struct hidraw_report_descriptor)
+#define HIDIOCGRAWINFO         _IOR('H', 0x03, struct hidraw_devinfo)
+#define HIDIOCGRAWNAME(len)     _IOC(_IOC_READ, 'H', 0x04, len)
+#define HIDIOCGRAWPHYS(len)     _IOC(_IOC_READ, 'H', 0x05, len)
+/* The first byte of SFEATURE and GFEATURE is the report number */
+#define HIDIOCSFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
+#define HIDIOCGFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len)
+
+#define HIDRAW_FIRST_MINOR 0
+#define HIDRAW_MAX_DEVICES 64
+/* number of reports to buffer */
+#define HIDRAW_BUFFER_SIZE 64
+
+
+/* kernel-only API declarations */
+
+#endif /* _HIDRAW_H */
diff --git a/lib/libdss-include/include/linux/hpet.h b/lib/libdss-include/include/linux/hpet.h
new file mode 100644 (file)
index 0000000..031f16f
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __HPET__
+#define __HPET__
+
+
+
+
+struct hpet_info {
+       unsigned long hi_ireqfreq;      /* Hz */
+       unsigned long hi_flags; /* information */
+       unsigned short hi_hpet;
+       unsigned short hi_timer;
+};
+
+#define HPET_INFO_PERIODIC     0x0010  /* periodic-capable comparator */
+
+#define        HPET_IE_ON      _IO('h', 0x01)  /* interrupt on */
+#define        HPET_IE_OFF     _IO('h', 0x02)  /* interrupt off */
+#define        HPET_INFO       _IOR('h', 0x03, struct hpet_info)
+#define        HPET_EPI        _IO('h', 0x04)  /* enable periodic */
+#define        HPET_DPI        _IO('h', 0x05)  /* disable periodic */
+#define        HPET_IRQFREQ    _IOW('h', 0x6, unsigned long)   /* IRQFREQ usec */
+
+#define MAX_HPET_TBS   8               /* maximum hpet timer blocks */
+
+#endif /* __HPET__ */
diff --git a/lib/libdss-include/include/linux/hsi/cs-protocol.h b/lib/libdss-include/include/linux/hsi/cs-protocol.h
new file mode 100644 (file)
index 0000000..f153d6e
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * cmt-speech interface definitions
+ *
+ * Copyright (C) 2008,2009,2010 Nokia Corporation. All rights reserved.
+ *
+ * Contact: Kai Vehmanen <kai.vehmanen@nokia.com>
+ * Original author: Peter Ujfalusi <peter.ujfalusi@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _CS_PROTOCOL_H
+#define _CS_PROTOCOL_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/* chardev parameters */
+#define CS_DEV_FILE_NAME               "/dev/cmt_speech"
+
+/* user-space API versioning */
+#define CS_IF_VERSION                  2
+
+/* APE kernel <-> user space messages */
+#define CS_CMD_SHIFT                   28
+#define CS_DOMAIN_SHIFT                        24
+
+#define CS_CMD_MASK                    0xff000000
+#define CS_PARAM_MASK                  0xffffff
+
+#define CS_CMD(id, dom) \
+       (((id) << CS_CMD_SHIFT) | ((dom) << CS_DOMAIN_SHIFT))
+
+#define CS_ERROR                       CS_CMD(1, 0)
+#define CS_RX_DATA_RECEIVED            CS_CMD(2, 0)
+#define CS_TX_DATA_READY               CS_CMD(3, 0)
+#define CS_TX_DATA_SENT                        CS_CMD(4, 0)
+
+/* params to CS_ERROR indication */
+#define CS_ERR_PEER_RESET              0
+
+/* ioctl interface */
+
+/* parameters to CS_CONFIG_BUFS ioctl */
+#define CS_FEAT_TSTAMP_RX_CTRL         (1 << 0)
+#define CS_FEAT_ROLLING_RX_COUNTER     (2 << 0)
+
+/* parameters to CS_GET_STATE ioctl */
+#define CS_STATE_CLOSED                        0
+#define CS_STATE_OPENED                        1 /* resource allocated */
+#define CS_STATE_CONFIGURED            2 /* data path active */
+
+/* maximum number of TX/RX buffers */
+#define CS_MAX_BUFFERS_SHIFT           4
+#define CS_MAX_BUFFERS                 (1 << CS_MAX_BUFFERS_SHIFT)
+
+/* Parameters for setting up the data buffers */
+struct cs_buffer_config {
+       __u32 rx_bufs;  /* number of RX buffer slots */
+       __u32 tx_bufs;  /* number of TX buffer slots */
+       __u32 buf_size; /* bytes */
+       __u32 flags;    /* see CS_FEAT_* */
+       __u32 reserved[4];
+};
+
+/*
+ * struct for monotonic timestamp taken when the
+ * last control command was received
+ */
+struct cs_timestamp {
+       __u32 tv_sec;  /* seconds */
+       __u32 tv_nsec; /* nanoseconds */
+};
+
+/*
+ * Struct describing the layout and contents of the driver mmap area.
+ * This information is meant as read-only information for the application.
+ */
+struct cs_mmap_config_block {
+       __u32 reserved1;
+       __u32 buf_size;         /* 0=disabled, otherwise the transfer size */
+       __u32 rx_bufs;          /* # of RX buffers */
+       __u32 tx_bufs;          /* # of TX buffers */
+       __u32 reserved2;
+       /* array of offsets within the mmap area for each RX and TX buffer */
+       __u32 rx_offsets[CS_MAX_BUFFERS];
+       __u32 tx_offsets[CS_MAX_BUFFERS];
+       __u32 rx_ptr;
+       __u32 rx_ptr_boundary;
+       __u32 reserved3[2];
+       /* enabled with CS_FEAT_TSTAMP_RX_CTRL */
+       struct cs_timestamp tstamp_rx_ctrl;
+};
+
+#define CS_IO_MAGIC            'C'
+
+#define CS_IOW(num, dtype)     _IOW(CS_IO_MAGIC, num, dtype)
+#define CS_IOR(num, dtype)     _IOR(CS_IO_MAGIC, num, dtype)
+#define CS_IOWR(num, dtype)    _IOWR(CS_IO_MAGIC, num, dtype)
+#define CS_IO(num)             _IO(CS_IO_MAGIC, num)
+
+#define CS_GET_STATE           CS_IOR(21, unsigned int)
+#define CS_SET_WAKELINE                CS_IOW(23, unsigned int)
+#define CS_GET_IF_VERSION      CS_IOR(30, unsigned int)
+#define CS_CONFIG_BUFS         CS_IOW(31, struct cs_buffer_config)
+
+#endif /* _CS_PROTOCOL_H */
diff --git a/lib/libdss-include/include/linux/hsi/hsi_char.h b/lib/libdss-include/include/linux/hsi/hsi_char.h
new file mode 100644 (file)
index 0000000..76160b4
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Part of the HSI character device driver.
+ *
+ * Copyright (C) 2010 Nokia Corporation. All rights reserved.
+ *
+ * Contact: Andras Domokos <andras.domokos at nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+
+#ifndef __HSI_CHAR_H
+#define __HSI_CHAR_H
+
+#define HSI_CHAR_MAGIC         'k'
+#define HSC_IOW(num, dtype)    _IOW(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IOR(num, dtype)    _IOR(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IOWR(num, dtype)   _IOWR(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IO(num)            _IO(HSI_CHAR_MAGIC, num)
+
+#define HSC_RESET              HSC_IO(16)
+#define HSC_SET_PM             HSC_IO(17)
+#define HSC_SEND_BREAK         HSC_IO(18)
+#define HSC_SET_RX             HSC_IOW(19, struct hsc_rx_config)
+#define HSC_GET_RX             HSC_IOW(20, struct hsc_rx_config)
+#define HSC_SET_TX             HSC_IOW(21, struct hsc_tx_config)
+#define HSC_GET_TX             HSC_IOW(22, struct hsc_tx_config)
+
+#define HSC_PM_DISABLE         0
+#define HSC_PM_ENABLE          1
+
+#define HSC_MODE_STREAM                1
+#define HSC_MODE_FRAME         2
+#define HSC_FLOW_SYNC          0
+#define HSC_ARB_RR             0
+#define HSC_ARB_PRIO           1
+
+struct hsc_rx_config {
+       uint32_t mode;
+       uint32_t flow;
+       uint32_t channels;
+};
+
+struct hsc_tx_config {
+       uint32_t mode;
+       uint32_t channels;
+       uint32_t speed;
+       uint32_t arb_mode;
+};
+
+#endif /* __HSI_CHAR_H */
diff --git a/lib/libdss-include/include/linux/hsr_netlink.h b/lib/libdss-include/include/linux/hsr_netlink.h
new file mode 100644 (file)
index 0000000..2475cb8
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2011-2013 Autronica Fire and Security AS
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * Author(s):
+ *     2011-2013 Arvid Brodin, arvid.brodin@xdin.com
+ */
+
+#ifndef __UAPI_HSR_NETLINK_H
+#define __UAPI_HSR_NETLINK_H
+
+/* Generic Netlink HSR family definition
+ */
+
+/* attributes */
+enum {
+       HSR_A_UNSPEC,
+       HSR_A_NODE_ADDR,
+       HSR_A_IFINDEX,
+       HSR_A_IF1_AGE,
+       HSR_A_IF2_AGE,
+       HSR_A_NODE_ADDR_B,
+       HSR_A_IF1_SEQ,
+       HSR_A_IF2_SEQ,
+       HSR_A_IF1_IFINDEX,
+       HSR_A_IF2_IFINDEX,
+       HSR_A_ADDR_B_IFINDEX,
+       __HSR_A_MAX,
+};
+#define HSR_A_MAX (__HSR_A_MAX - 1)
+
+
+/* commands */
+enum {
+       HSR_C_UNSPEC,
+       HSR_C_RING_ERROR,
+       HSR_C_NODE_DOWN,
+       HSR_C_GET_NODE_STATUS,
+       HSR_C_SET_NODE_STATUS,
+       HSR_C_GET_NODE_LIST,
+       HSR_C_SET_NODE_LIST,
+       __HSR_C_MAX,
+};
+#define HSR_C_MAX (__HSR_C_MAX - 1)
+
+#endif /* __UAPI_HSR_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/hw_breakpoint.h b/lib/libdss-include/include/linux/hw_breakpoint.h
new file mode 100644 (file)
index 0000000..32486ee
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _LINUX_HW_BREAKPOINT_H
+#define _LINUX_HW_BREAKPOINT_H
+
+enum {
+       HW_BREAKPOINT_LEN_1 = 1,
+       HW_BREAKPOINT_LEN_2 = 2,
+       HW_BREAKPOINT_LEN_4 = 4,
+       HW_BREAKPOINT_LEN_8 = 8,
+};
+
+enum {
+       HW_BREAKPOINT_EMPTY     = 0,
+       HW_BREAKPOINT_R         = 1,
+       HW_BREAKPOINT_W         = 2,
+       HW_BREAKPOINT_RW        = HW_BREAKPOINT_R | HW_BREAKPOINT_W,
+       HW_BREAKPOINT_X         = 4,
+       HW_BREAKPOINT_INVALID   = HW_BREAKPOINT_RW | HW_BREAKPOINT_X,
+};
+
+enum bp_type_idx {
+       TYPE_INST       = 0,
+#ifdef CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
+       TYPE_DATA       = 0,
+#else
+       TYPE_DATA       = 1,
+#endif
+       TYPE_MAX
+};
+
+#endif /* _LINUX_HW_BREAKPOINT_H */
diff --git a/lib/libdss-include/include/linux/hyperv.h b/lib/libdss-include/include/linux/hyperv.h
new file mode 100644 (file)
index 0000000..0e8ad84
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ *
+ * Copyright (c) 2011, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *   K. Y. Srinivasan <kys@microsoft.com>
+ *
+ */
+
+#ifndef _HYPERV_H
+#define _HYPERV_H
+
+#include <linux/uuid.h>
+
+/*
+ * Framework version for util services.
+ */
+#define UTIL_FW_MINOR  0
+
+#define UTIL_WS2K8_FW_MAJOR  1
+#define UTIL_WS2K8_FW_VERSION     (UTIL_WS2K8_FW_MAJOR << 16 | UTIL_FW_MINOR)
+
+#define UTIL_FW_MAJOR  3
+#define UTIL_FW_VERSION     (UTIL_FW_MAJOR << 16 | UTIL_FW_MINOR)
+
+
+/*
+ * Implementation of host controlled snapshot of the guest.
+ */
+
+#define VSS_OP_REGISTER 128
+
+/*
+  Daemon code with full handshake support.
+ */
+#define VSS_OP_REGISTER1 129
+
+enum hv_vss_op {
+       VSS_OP_CREATE = 0,
+       VSS_OP_DELETE,
+       VSS_OP_HOT_BACKUP,
+       VSS_OP_GET_DM_INFO,
+       VSS_OP_BU_COMPLETE,
+       /*
+        * Following operations are only supported with IC version >= 5.0
+        */
+       VSS_OP_FREEZE, /* Freeze the file systems in the VM */
+       VSS_OP_THAW, /* Unfreeze the file systems */
+       VSS_OP_AUTO_RECOVER,
+       VSS_OP_COUNT /* Number of operations, must be last */
+};
+
+
+/*
+ * Header for all VSS messages.
+ */
+struct hv_vss_hdr {
+       __u8 operation;
+       __u8 reserved[7];
+} __attribute__((packed));
+
+
+/*
+ * Flag values for the hv_vss_check_feature. Linux supports only
+ * one value.
+ */
+#define VSS_HBU_NO_AUTO_RECOVERY       0x00000005
+
+struct hv_vss_check_feature {
+       __u32 flags;
+} __attribute__((packed));
+
+struct hv_vss_check_dm_info {
+       __u32 flags;
+} __attribute__((packed));
+
+struct hv_vss_msg {
+       union {
+               struct hv_vss_hdr vss_hdr;
+               int error;
+       };
+       union {
+               struct hv_vss_check_feature vss_cf;
+               struct hv_vss_check_dm_info dm_info;
+       };
+} __attribute__((packed));
+
+/*
+ * Implementation of a host to guest copy facility.
+ */
+
+#define FCOPY_VERSION_0 0
+#define FCOPY_VERSION_1 1
+#define FCOPY_CURRENT_VERSION FCOPY_VERSION_1
+#define W_MAX_PATH 260
+
+enum hv_fcopy_op {
+       START_FILE_COPY = 0,
+       WRITE_TO_FILE,
+       COMPLETE_FCOPY,
+       CANCEL_FCOPY,
+};
+
+struct hv_fcopy_hdr {
+       __u32 operation;
+       uuid_le service_id0; /* currently unused */
+       uuid_le service_id1; /* currently unused */
+} __attribute__((packed));
+
+#define OVER_WRITE     0x1
+#define CREATE_PATH    0x2
+
+struct hv_start_fcopy {
+       struct hv_fcopy_hdr hdr;
+       __u16 file_name[W_MAX_PATH];
+       __u16 path_name[W_MAX_PATH];
+       __u32 copy_flags;
+       __u64 file_size;
+} __attribute__((packed));
+
+/*
+ * The file is chunked into fragments.
+ */
+#define DATA_FRAGMENT  (6 * 1024)
+
+struct hv_do_fcopy {
+       struct hv_fcopy_hdr hdr;
+       __u32   pad;
+       __u64   offset;
+       __u32   size;
+       __u8    data[DATA_FRAGMENT];
+} __attribute__((packed));
+
+/*
+ * An implementation of HyperV key value pair (KVP) functionality for Linux.
+ *
+ *
+ * Copyright (C) 2010, Novell, Inc.
+ * Author : K. Y. Srinivasan <ksrinivasan@novell.com>
+ *
+ */
+
+/*
+ * Maximum value size - used for both key names and value data, and includes
+ * any applicable NULL terminators.
+ *
+ * Note:  This limit is somewhat arbitrary, but falls easily within what is
+ * supported for all native guests (back to Win 2000) and what is reasonable
+ * for the IC KVP exchange functionality.  Note that Windows Me/98/95 are
+ * limited to 255 character key names.
+ *
+ * MSDN recommends not storing data values larger than 2048 bytes in the
+ * registry.
+ *
+ * Note:  This value is used in defining the KVP exchange message - this value
+ * cannot be modified without affecting the message size and compatibility.
+ */
+
+/*
+ * bytes, including any null terminators
+ */
+#define HV_KVP_EXCHANGE_MAX_VALUE_SIZE          (2048)
+
+
+/*
+ * Maximum key size - the registry limit for the length of an entry name
+ * is 256 characters, including the null terminator
+ */
+
+#define HV_KVP_EXCHANGE_MAX_KEY_SIZE            (512)
+
+/*
+ * In Linux, we implement the KVP functionality in two components:
+ * 1) The kernel component which is packaged as part of the hv_utils driver
+ * is responsible for communicating with the host and responsible for
+ * implementing the host/guest protocol. 2) A user level daemon that is
+ * responsible for data gathering.
+ *
+ * Host/Guest Protocol: The host iterates over an index and expects the guest
+ * to assign a key name to the index and also return the value corresponding to
+ * the key. The host will have atmost one KVP transaction outstanding at any
+ * given point in time. The host side iteration stops when the guest returns
+ * an error. Microsoft has specified the following mapping of key names to
+ * host specified index:
+ *
+ *     Index           Key Name
+ *     0               FullyQualifiedDomainName
+ *     1               IntegrationServicesVersion
+ *     2               NetworkAddressIPv4
+ *     3               NetworkAddressIPv6
+ *     4               OSBuildNumber
+ *     5               OSName
+ *     6               OSMajorVersion
+ *     7               OSMinorVersion
+ *     8               OSVersion
+ *     9               ProcessorArchitecture
+ *
+ * The Windows host expects the Key Name and Key Value to be encoded in utf16.
+ *
+ * Guest Kernel/KVP Daemon Protocol: As noted earlier, we implement all of the
+ * data gathering functionality in a user mode daemon. The user level daemon
+ * is also responsible for binding the key name to the index as well. The
+ * kernel and user-level daemon communicate using a connector channel.
+ *
+ * The user mode component first registers with the
+ * the kernel component. Subsequently, the kernel component requests, data
+ * for the specified keys. In response to this message the user mode component
+ * fills in the value corresponding to the specified key. We overload the
+ * sequence field in the cn_msg header to define our KVP message types.
+ *
+ *
+ * The kernel component simply acts as a conduit for communication between the
+ * Windows host and the user-level daemon. The kernel component passes up the
+ * index received from the Host to the user-level daemon. If the index is
+ * valid (supported), the corresponding key as well as its
+ * value (both are strings) is returned. If the index is invalid
+ * (not supported), a NULL key string is returned.
+ */
+
+
+/*
+ * Registry value types.
+ */
+
+#define REG_SZ 1
+#define REG_U32 4
+#define REG_U64 8
+
+/*
+ * As we look at expanding the KVP functionality to include
+ * IP injection functionality, we need to maintain binary
+ * compatibility with older daemons.
+ *
+ * The KVP opcodes are defined by the host and it was unfortunate
+ * that I chose to treat the registration operation as part of the
+ * KVP operations defined by the host.
+ * Here is the level of compatibility
+ * (between the user level daemon and the kernel KVP driver) that we
+ * will implement:
+ *
+ * An older daemon will always be supported on a newer driver.
+ * A given user level daemon will require a minimal version of the
+ * kernel driver.
+ * If we cannot handle the version differences, we will fail gracefully
+ * (this can happen when we have a user level daemon that is more
+ * advanced than the KVP driver.
+ *
+ * We will use values used in this handshake for determining if we have
+ * workable user level daemon and the kernel driver. We begin by taking the
+ * registration opcode out of the KVP opcode namespace. We will however,
+ * maintain compatibility with the existing user-level daemon code.
+ */
+
+/*
+ * Daemon code not supporting IP injection (legacy daemon).
+ */
+
+#define KVP_OP_REGISTER        4
+
+/*
+ * Daemon code supporting IP injection.
+ * The KVP opcode field is used to communicate the
+ * registration information; so define a namespace that
+ * will be distinct from the host defined KVP opcode.
+ */
+
+#define KVP_OP_REGISTER1 100
+
+enum hv_kvp_exchg_op {
+       KVP_OP_GET = 0,
+       KVP_OP_SET,
+       KVP_OP_DELETE,
+       KVP_OP_ENUMERATE,
+       KVP_OP_GET_IP_INFO,
+       KVP_OP_SET_IP_INFO,
+       KVP_OP_COUNT /* Number of operations, must be last. */
+};
+
+enum hv_kvp_exchg_pool {
+       KVP_POOL_EXTERNAL = 0,
+       KVP_POOL_GUEST,
+       KVP_POOL_AUTO,
+       KVP_POOL_AUTO_EXTERNAL,
+       KVP_POOL_AUTO_INTERNAL,
+       KVP_POOL_COUNT /* Number of pools, must be last. */
+};
+
+/*
+ * Some Hyper-V status codes.
+ */
+
+#define HV_S_OK                                0x00000000
+#define HV_E_FAIL                      0x80004005
+#define HV_S_CONT                      0x80070103
+#define HV_ERROR_NOT_SUPPORTED         0x80070032
+#define HV_ERROR_MACHINE_LOCKED                0x800704F7
+#define HV_ERROR_DEVICE_NOT_CONNECTED  0x8007048F
+#define HV_INVALIDARG                  0x80070057
+#define HV_GUID_NOTFOUND               0x80041002
+#define HV_ERROR_ALREADY_EXISTS                0x80070050
+#define HV_ERROR_DISK_FULL             0x80070070
+
+#define ADDR_FAMILY_NONE       0x00
+#define ADDR_FAMILY_IPV4       0x01
+#define ADDR_FAMILY_IPV6       0x02
+
+#define MAX_ADAPTER_ID_SIZE    128
+#define MAX_IP_ADDR_SIZE       1024
+#define MAX_GATEWAY_SIZE       512
+
+
+struct hv_kvp_ipaddr_value {
+       __u16   adapter_id[MAX_ADAPTER_ID_SIZE];
+       __u8    addr_family;
+       __u8    dhcp_enabled;
+       __u16   ip_addr[MAX_IP_ADDR_SIZE];
+       __u16   sub_net[MAX_IP_ADDR_SIZE];
+       __u16   gate_way[MAX_GATEWAY_SIZE];
+       __u16   dns_addr[MAX_IP_ADDR_SIZE];
+} __attribute__((packed));
+
+
+struct hv_kvp_hdr {
+       __u8 operation;
+       __u8 pool;
+       __u16 pad;
+} __attribute__((packed));
+
+struct hv_kvp_exchg_msg_value {
+       __u32 value_type;
+       __u32 key_size;
+       __u32 value_size;
+       __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+       union {
+               __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
+               __u32 value_u32;
+               __u64 value_u64;
+       };
+} __attribute__((packed));
+
+struct hv_kvp_msg_enumerate {
+       __u32 index;
+       struct hv_kvp_exchg_msg_value data;
+} __attribute__((packed));
+
+struct hv_kvp_msg_get {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_set {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_delete {
+       __u32 key_size;
+       __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
+struct hv_kvp_register {
+       __u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
+struct hv_kvp_msg {
+       union {
+               struct hv_kvp_hdr       kvp_hdr;
+               int error;
+       };
+       union {
+               struct hv_kvp_msg_get           kvp_get;
+               struct hv_kvp_msg_set           kvp_set;
+               struct hv_kvp_msg_delete        kvp_delete;
+               struct hv_kvp_msg_enumerate     kvp_enum_data;
+               struct hv_kvp_ipaddr_value      kvp_ip_val;
+               struct hv_kvp_register          kvp_register;
+       } body;
+} __attribute__((packed));
+
+struct hv_kvp_ip_msg {
+       __u8 operation;
+       __u8 pool;
+       struct hv_kvp_ipaddr_value      kvp_ip_val;
+} __attribute__((packed));
+
+#endif /* _HYPERV_H */
diff --git a/lib/libdss-include/include/linux/hysdn_if.h b/lib/libdss-include/include/linux/hysdn_if.h
new file mode 100644 (file)
index 0000000..00236ae
--- /dev/null
@@ -0,0 +1,33 @@
+/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $
+ *
+ * Linux driver for HYSDN cards
+ * ioctl definitions shared by hynetmgr and driver.
+ *
+ * Author    Werner Cornelius (werner@titro.de) for Hypercope GmbH
+ * Copyright 1999 by Werner Cornelius (werner@titro.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+/****************/
+/* error values */
+/****************/
+#define ERR_NONE             0 /* no error occurred */
+#define ERR_ALREADY_BOOT  1000 /* we are already booting */
+#define EPOF_BAD_MAGIC    1001 /* bad magic in POF header */
+#define ERR_BOARD_DPRAM   1002 /* board DPRAM failed */
+#define EPOF_INTERNAL     1003 /* internal POF handler error */
+#define EPOF_BAD_IMG_SIZE 1004 /* POF boot image size invalid */
+#define ERR_BOOTIMG_FAIL  1005 /* 1. stage boot image did not start */
+#define ERR_BOOTSEQ_FAIL  1006 /* 2. stage boot seq handshake timeout */
+#define ERR_POF_TIMEOUT   1007 /* timeout waiting for card pof ready */
+#define ERR_NOT_BOOTED    1008 /* operation only allowed when booted */
+#define ERR_CONF_LONG     1009 /* conf line is too long */ 
+#define ERR_INV_CHAN      1010 /* invalid channel number */ 
+#define ERR_ASYNC_TIME    1011 /* timeout sending async data */ 
+
+
+
+
diff --git a/lib/libdss-include/include/linux/i2c-dev.h b/lib/libdss-include/include/linux/i2c-dev.h
new file mode 100644 (file)
index 0000000..bbb50e8
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    i2c-dev.h - i2c-bus driver, char device interface
+
+    Copyright (C) 1995-97 Simon G. Vogl
+    Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301 USA.
+*/
+
+#ifndef _LINUX_I2C_DEV_H
+#define _LINUX_I2C_DEV_H
+
+#include <linux/types.h>
+
+
+/* /dev/i2c-X ioctl commands.  The ioctl's parameter is always an
+ * unsigned long, except for:
+ *     - I2C_FUNCS, takes pointer to an unsigned long
+ *     - I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data
+ *     - I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data
+ */
+#define I2C_RETRIES    0x0701  /* number of times a device address should
+                                  be polled when not acknowledging */
+#define I2C_TIMEOUT    0x0702  /* set timeout in units of 10 ms */
+
+/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
+ * are NOT supported! (due to code brokenness)
+ */
+#define I2C_SLAVE      0x0703  /* Use this slave address */
+#define I2C_SLAVE_FORCE        0x0706  /* Use this slave address, even if it
+                                  is already in use by a driver! */
+#define I2C_TENBIT     0x0704  /* 0 for 7 bit addrs, != 0 for 10 bit */
+
+#define I2C_FUNCS      0x0705  /* Get the adapter functionality mask */
+
+#define I2C_RDWR       0x0707  /* Combined R/W transfer (one STOP only) */
+
+#define I2C_PEC                0x0708  /* != 0 to use PEC with SMBus */
+#define I2C_SMBUS      0x0720  /* SMBus transfer */
+
+
+/* This is the structure as used in the I2C_SMBUS ioctl call */
+struct i2c_smbus_ioctl_data {
+       __u8 read_write;
+       __u8 command;
+       __u32 size;
+       union i2c_smbus_data *data;
+};
+
+/* This is the structure as used in the I2C_RDWR ioctl call */
+struct i2c_rdwr_ioctl_data {
+       struct i2c_msg *msgs;   /* pointers to i2c_msgs */
+       __u32 nmsgs;                    /* number of i2c_msgs */
+};
+
+#define  I2C_RDWR_IOCTL_MAX_MSGS       42
+/* Originally defined with a typo, keep it for compatibility */
+#define  I2C_RDRW_IOCTL_MAX_MSGS       I2C_RDWR_IOCTL_MAX_MSGS
+
+
+#endif /* _LINUX_I2C_DEV_H */
diff --git a/lib/libdss-include/include/linux/i2c.h b/lib/libdss-include/include/linux/i2c.h
new file mode 100644 (file)
index 0000000..3dec329
--- /dev/null
@@ -0,0 +1,152 @@
+/* ------------------------------------------------------------------------- */
+/*                                                                          */
+/* i2c.h - definitions for the i2c-bus interface                            */
+/*                                                                          */
+/* ------------------------------------------------------------------------- */
+/*   Copyright (C) 1995-2000 Simon G. Vogl
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301 USA.                                                      */
+/* ------------------------------------------------------------------------- */
+
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
+   Frodo Looijaard <frodol@dds.nl> */
+
+#ifndef _LINUX_I2C_H
+#define _LINUX_I2C_H
+
+#include <linux/types.h>
+
+/**
+ * struct i2c_msg - an I2C transaction segment beginning with START
+ * @addr: Slave address, either seven or ten bits.  When this is a ten
+ *     bit address, I2C_M_TEN must be set in @flags and the adapter
+ *     must support I2C_FUNC_10BIT_ADDR.
+ * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
+ *     provided unless the adapter exported the relevant I2C_FUNC_*
+ *     flags through i2c_check_functionality().
+ * @len: Number of data bytes in @buf being read from or written to the
+ *     I2C slave address.  For read transactions where I2C_M_RECV_LEN
+ *     is set, the caller guarantees that this buffer can hold up to
+ *     32 bytes in addition to the initial length byte sent by the
+ *     slave (plus, if used, the SMBus PEC); and this value will be
+ *     incremented by the number of block data bytes received.
+ * @buf: The buffer into which data is read, or from which it's written.
+ *
+ * An i2c_msg is the low level representation of one segment of an I2C
+ * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
+ * to userspace from i2c-dev, and to I2C adapter drivers through the
+ * @i2c_adapter.@master_xfer() method.
+ *
+ * Except when I2C "protocol mangling" is used, all I2C adapters implement
+ * the standard rules for I2C transactions.  Each transaction begins with a
+ * START.  That is followed by the slave address, and a bit encoding read
+ * versus write.  Then follow all the data bytes, possibly including a byte
+ * with SMBus PEC.  The transfer terminates with a NAK, or when all those
+ * bytes have been transferred and ACKed.  If this is the last message in a
+ * group, it is followed by a STOP.  Otherwise it is followed by the next
+ * @i2c_msg transaction segment, beginning with a (repeated) START.
+ *
+ * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
+ * passing certain @flags may have changed those standard protocol behaviors.
+ * Those flags are only for use with broken/nonconforming slaves, and with
+ * adapters which are known to support the specific mangling options they
+ * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
+ */
+struct i2c_msg {
+       __u16 addr;     /* slave address                        */
+       __u16 flags;
+#define I2C_M_TEN              0x0010  /* this is a ten bit chip address */
+#define I2C_M_RD               0x0001  /* read data, from slave to master */
+#define I2C_M_STOP             0x8000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NOSTART          0x4000  /* if I2C_FUNC_NOSTART */
+#define I2C_M_REV_DIR_ADDR     0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_IGNORE_NAK       0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NO_RD_ACK                0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_RECV_LEN         0x0400  /* length will be first received byte */
+       __u16 len;              /* msg length                           */
+       __u8 *buf;              /* pointer to msg data                  */
+};
+
+/* To determine what functionality is present */
+
+#define I2C_FUNC_I2C                   0x00000001
+#define I2C_FUNC_10BIT_ADDR            0x00000002
+#define I2C_FUNC_PROTOCOL_MANGLING     0x00000004 /* I2C_M_IGNORE_NAK etc. */
+#define I2C_FUNC_SMBUS_PEC             0x00000008
+#define I2C_FUNC_NOSTART               0x00000010 /* I2C_M_NOSTART */
+#define I2C_FUNC_SLAVE                 0x00000020
+#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
+#define I2C_FUNC_SMBUS_QUICK           0x00010000
+#define I2C_FUNC_SMBUS_READ_BYTE       0x00020000
+#define I2C_FUNC_SMBUS_WRITE_BYTE      0x00040000
+#define I2C_FUNC_SMBUS_READ_BYTE_DATA  0x00080000
+#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
+#define I2C_FUNC_SMBUS_READ_WORD_DATA  0x00200000
+#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
+#define I2C_FUNC_SMBUS_PROC_CALL       0x00800000
+#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
+#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
+#define I2C_FUNC_SMBUS_READ_I2C_BLOCK  0x04000000 /* I2C-like block xfer  */
+#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
+
+#define I2C_FUNC_SMBUS_BYTE            (I2C_FUNC_SMBUS_READ_BYTE | \
+                                        I2C_FUNC_SMBUS_WRITE_BYTE)
+#define I2C_FUNC_SMBUS_BYTE_DATA       (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
+#define I2C_FUNC_SMBUS_WORD_DATA       (I2C_FUNC_SMBUS_READ_WORD_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_WORD_DATA)
+#define I2C_FUNC_SMBUS_BLOCK_DATA      (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
+#define I2C_FUNC_SMBUS_I2C_BLOCK       (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
+                                        I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
+
+#define I2C_FUNC_SMBUS_EMUL            (I2C_FUNC_SMBUS_QUICK | \
+                                        I2C_FUNC_SMBUS_BYTE | \
+                                        I2C_FUNC_SMBUS_BYTE_DATA | \
+                                        I2C_FUNC_SMBUS_WORD_DATA | \
+                                        I2C_FUNC_SMBUS_PROC_CALL | \
+                                        I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
+                                        I2C_FUNC_SMBUS_I2C_BLOCK | \
+                                        I2C_FUNC_SMBUS_PEC)
+
+/*
+ * Data for SMBus Messages
+ */
+#define I2C_SMBUS_BLOCK_MAX    32      /* As specified in SMBus standard */
+union i2c_smbus_data {
+       __u8 byte;
+       __u16 word;
+       __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
+                              /* and one more for user-space compatibility */
+};
+
+/* i2c_smbus_xfer read or write markers */
+#define I2C_SMBUS_READ 1
+#define I2C_SMBUS_WRITE        0
+
+/* SMBus transaction types (size parameter in the above functions)
+   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
+#define I2C_SMBUS_QUICK                    0
+#define I2C_SMBUS_BYTE             1
+#define I2C_SMBUS_BYTE_DATA        2
+#define I2C_SMBUS_WORD_DATA        3
+#define I2C_SMBUS_PROC_CALL        4
+#define I2C_SMBUS_BLOCK_DATA       5
+#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
+#define I2C_SMBUS_BLOCK_PROC_CALL   7          /* SMBus 2.0 */
+#define I2C_SMBUS_I2C_BLOCK_DATA    8
+
+#endif /* _LINUX_I2C_H */
diff --git a/lib/libdss-include/include/linux/i2o-dev.h b/lib/libdss-include/include/linux/i2o-dev.h
new file mode 100644 (file)
index 0000000..4fb30a4
--- /dev/null
@@ -0,0 +1,421 @@
+/*
+ * I2O user space accessible structures/APIs
+ *
+ * (c) Copyright 1999, 2000 Red Hat Software
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ *************************************************************************
+ *
+ * This header file defines the I2O APIs that are available to both
+ * the kernel and user level applications.  Kernel specific structures
+ * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which
+ * automatically includes this file.
+ *
+ */
+
+#ifndef _I2O_DEV_H
+#define _I2O_DEV_H
+
+/* How many controllers are we allowing */
+#define MAX_I2O_CONTROLLERS    32
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * I2O Control IOCTLs and structures
+ */
+#define I2O_MAGIC_NUMBER       'i'
+#define I2OGETIOPS             _IOR(I2O_MAGIC_NUMBER,0,__u8[MAX_I2O_CONTROLLERS])
+#define I2OHRTGET              _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct)
+#define I2OLCTGET              _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct)
+#define I2OPARMSET             _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget)
+#define I2OPARMGET             _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget)
+#define I2OSWDL                _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer)
+#define I2OSWUL                _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer)
+#define I2OSWDEL               _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer)
+#define I2OVALIDATE            _IOR(I2O_MAGIC_NUMBER,8,__u32)
+#define I2OHTML                _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
+#define I2OEVTREG              _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id)
+#define I2OEVTGET              _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info)
+#define I2OPASSTHRU            _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru)
+#define I2OPASSTHRU32          _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru32)
+
+struct i2o_cmd_passthru32 {
+       unsigned int iop;       /* IOP unit number */
+       __u32 msg;              /* message */
+};
+
+struct i2o_cmd_passthru {
+       unsigned int iop;       /* IOP unit number */
+       void *msg;      /* message */
+};
+
+struct i2o_cmd_hrtlct {
+       unsigned int iop;       /* IOP unit number */
+       void *resbuf;   /* Buffer for result */
+       unsigned int *reslen;   /* Buffer length in bytes */
+};
+
+struct i2o_cmd_psetget {
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device TID */
+       void *opbuf;    /* Operation List buffer */
+       unsigned int oplen;     /* Operation List buffer length in bytes */
+       void *resbuf;   /* Result List buffer */
+       unsigned int *reslen;   /* Result List buffer length in bytes */
+};
+
+struct i2o_sw_xfer {
+       unsigned int iop;       /* IOP unit number */
+       unsigned char flags;    /* Flags field */
+       unsigned char sw_type;  /* Software type */
+       unsigned int sw_id;     /* Software ID */
+       void *buf;      /* Pointer to software buffer */
+       unsigned int *swlen;    /* Length of software data */
+       unsigned int *maxfrag;  /* Maximum fragment count */
+       unsigned int *curfrag;  /* Current fragment count */
+};
+
+struct i2o_html {
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device ID */
+       unsigned int page;      /* HTML page */
+       void *resbuf;   /* Buffer for reply HTML page */
+       unsigned int *reslen;   /* Length in bytes of reply buffer */
+       void *qbuf;     /* Pointer to HTTP query string */
+       unsigned int qlen;      /* Length in bytes of query string buffer */
+};
+
+#define I2O_EVT_Q_LEN 32
+
+struct i2o_evt_id {
+       unsigned int iop;
+       unsigned int tid;
+       unsigned int evt_mask;
+};
+
+/* Event data size = frame size - message header + evt indicator */
+#define I2O_EVT_DATA_SIZE 88
+
+struct i2o_evt_info {
+       struct i2o_evt_id id;
+       unsigned char evt_data[I2O_EVT_DATA_SIZE];
+       unsigned int data_size;
+};
+
+struct i2o_evt_get {
+       struct i2o_evt_info info;
+       int pending;
+       int lost;
+};
+
+typedef struct i2o_sg_io_hdr {
+       unsigned int flags;     /* see I2O_DPT_SG_IO_FLAGS */
+} i2o_sg_io_hdr_t;
+
+/**************************************************************************
+ * HRT related constants and structures
+ **************************************************************************/
+#define I2O_BUS_LOCAL  0
+#define I2O_BUS_ISA    1
+#define I2O_BUS_EISA   2
+/* was  I2O_BUS_MCA    3 */
+#define I2O_BUS_PCI    4
+#define I2O_BUS_PCMCIA 5
+#define I2O_BUS_NUBUS  6
+#define I2O_BUS_CARDBUS 7
+#define I2O_BUS_UNKNOWN 0x80
+
+typedef struct _i2o_pci_bus {
+       __u8 PciFunctionNumber;
+       __u8 PciDeviceNumber;
+       __u8 PciBusNumber;
+       __u8 reserved;
+       __u16 PciVendorID;
+       __u16 PciDeviceID;
+} i2o_pci_bus;
+
+typedef struct _i2o_local_bus {
+       __u16 LbBaseIOPort;
+       __u16 reserved;
+       __u32 LbBaseMemoryAddress;
+} i2o_local_bus;
+
+typedef struct _i2o_isa_bus {
+       __u16 IsaBaseIOPort;
+       __u8 CSN;
+       __u8 reserved;
+       __u32 IsaBaseMemoryAddress;
+} i2o_isa_bus;
+
+typedef struct _i2o_eisa_bus_info {
+       __u16 EisaBaseIOPort;
+       __u8 reserved;
+       __u8 EisaSlotNumber;
+       __u32 EisaBaseMemoryAddress;
+} i2o_eisa_bus;
+
+typedef struct _i2o_mca_bus {
+       __u16 McaBaseIOPort;
+       __u8 reserved;
+       __u8 McaSlotNumber;
+       __u32 McaBaseMemoryAddress;
+} i2o_mca_bus;
+
+typedef struct _i2o_other_bus {
+       __u16 BaseIOPort;
+       __u16 reserved;
+       __u32 BaseMemoryAddress;
+} i2o_other_bus;
+
+typedef struct _i2o_hrt_entry {
+       __u32 adapter_id;
+       __u32 parent_tid:12;
+       __u32 state:4;
+       __u32 bus_num:8;
+       __u32 bus_type:8;
+       union {
+               i2o_pci_bus pci_bus;
+               i2o_local_bus local_bus;
+               i2o_isa_bus isa_bus;
+               i2o_eisa_bus eisa_bus;
+               i2o_mca_bus mca_bus;
+               i2o_other_bus other_bus;
+       } bus;
+} i2o_hrt_entry;
+
+typedef struct _i2o_hrt {
+       __u16 num_entries;
+       __u8 entry_len;
+       __u8 hrt_version;
+       __u32 change_ind;
+       i2o_hrt_entry hrt_entry[1];
+} i2o_hrt;
+
+typedef struct _i2o_lct_entry {
+       __u32 entry_size:16;
+       __u32 tid:12;
+       __u32 reserved:4;
+       __u32 change_ind;
+       __u32 device_flags;
+       __u32 class_id:12;
+       __u32 version:4;
+       __u32 vendor_id:16;
+       __u32 sub_class;
+       __u32 user_tid:12;
+       __u32 parent_tid:12;
+       __u32 bios_info:8;
+       __u8 identity_tag[8];
+       __u32 event_capabilities;
+} i2o_lct_entry;
+
+typedef struct _i2o_lct {
+       __u32 table_size:16;
+       __u32 boot_tid:12;
+       __u32 lct_ver:4;
+       __u32 iop_flags;
+       __u32 change_ind;
+       i2o_lct_entry lct_entry[1];
+} i2o_lct;
+
+typedef struct _i2o_status_block {
+       __u16 org_id;
+       __u16 reserved;
+       __u16 iop_id:12;
+       __u16 reserved1:4;
+       __u16 host_unit_id;
+       __u16 segment_number:12;
+       __u16 i2o_version:4;
+       __u8 iop_state;
+       __u8 msg_type;
+       __u16 inbound_frame_size;
+       __u8 init_code;
+       __u8 reserved2;
+       __u32 max_inbound_frames;
+       __u32 cur_inbound_frames;
+       __u32 max_outbound_frames;
+       char product_id[24];
+       __u32 expected_lct_size;
+       __u32 iop_capabilities;
+       __u32 desired_mem_size;
+       __u32 current_mem_size;
+       __u32 current_mem_base;
+       __u32 desired_io_size;
+       __u32 current_io_size;
+       __u32 current_io_base;
+       __u32 reserved3:24;
+       __u32 cmd_status:8;
+} i2o_status_block;
+
+/* Event indicator mask flags */
+#define I2O_EVT_IND_STATE_CHANGE               0x80000000
+#define I2O_EVT_IND_GENERAL_WARNING            0x40000000
+#define I2O_EVT_IND_CONFIGURATION_FLAG         0x20000000
+#define I2O_EVT_IND_LOCK_RELEASE               0x10000000
+#define I2O_EVT_IND_CAPABILITY_CHANGE          0x08000000
+#define I2O_EVT_IND_DEVICE_RESET               0x04000000
+#define I2O_EVT_IND_EVT_MASK_MODIFIED          0x02000000
+#define I2O_EVT_IND_FIELD_MODIFIED             0x01000000
+#define I2O_EVT_IND_VENDOR_EVT                 0x00800000
+#define I2O_EVT_IND_DEVICE_STATE               0x00400000
+
+/* Executive event indicitors */
+#define I2O_EVT_IND_EXEC_RESOURCE_LIMITS       0x00000001
+#define I2O_EVT_IND_EXEC_CONNECTION_FAIL       0x00000002
+#define I2O_EVT_IND_EXEC_ADAPTER_FAULT         0x00000004
+#define I2O_EVT_IND_EXEC_POWER_FAIL            0x00000008
+#define I2O_EVT_IND_EXEC_RESET_PENDING         0x00000010
+#define I2O_EVT_IND_EXEC_RESET_IMMINENT        0x00000020
+#define I2O_EVT_IND_EXEC_HW_FAIL               0x00000040
+#define I2O_EVT_IND_EXEC_XCT_CHANGE            0x00000080
+#define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY         0x00000100
+#define I2O_EVT_IND_EXEC_MODIFIED_LCT          0x00000200
+#define I2O_EVT_IND_EXEC_DDM_AVAILABILITY      0x00000400
+
+/* Random Block Storage Event Indicators */
+#define I2O_EVT_IND_BSA_VOLUME_LOAD            0x00000001
+#define I2O_EVT_IND_BSA_VOLUME_UNLOAD          0x00000002
+#define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ      0x00000004
+#define I2O_EVT_IND_BSA_CAPACITY_CHANGE        0x00000008
+#define I2O_EVT_IND_BSA_SCSI_SMART             0x00000010
+
+/* Event data for generic events */
+#define I2O_EVT_STATE_CHANGE_NORMAL            0x00
+#define I2O_EVT_STATE_CHANGE_SUSPENDED         0x01
+#define I2O_EVT_STATE_CHANGE_RESTART           0x02
+#define I2O_EVT_STATE_CHANGE_NA_RECOVER        0x03
+#define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER     0x04
+#define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST   0x05
+#define I2O_EVT_STATE_CHANGE_FAILED            0x10
+#define I2O_EVT_STATE_CHANGE_FAULTED           0x11
+
+#define I2O_EVT_GEN_WARNING_NORMAL             0x00
+#define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD    0x01
+#define I2O_EVT_GEN_WARNING_MEDIA_FAULT        0x02
+
+#define I2O_EVT_CAPABILITY_OTHER               0x01
+#define I2O_EVT_CAPABILITY_CHANGED             0x02
+
+#define I2O_EVT_SENSOR_STATE_CHANGED           0x01
+
+/*
+ *     I2O classes / subclasses
+ */
+
+/*  Class ID and Code Assignments
+ *  (LCT.ClassID.Version field)
+ */
+#define I2O_CLASS_VERSION_10                   0x00
+#define I2O_CLASS_VERSION_11                   0x01
+
+/*  Class code names
+ *  (from v1.5 Table 6-1 Class Code Assignments.)
+ */
+
+#define I2O_CLASS_EXECUTIVE                    0x000
+#define I2O_CLASS_DDM                          0x001
+#define I2O_CLASS_RANDOM_BLOCK_STORAGE         0x010
+#define I2O_CLASS_SEQUENTIAL_STORAGE           0x011
+#define I2O_CLASS_LAN                          0x020
+#define I2O_CLASS_WAN                          0x030
+#define I2O_CLASS_FIBRE_CHANNEL_PORT           0x040
+#define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL     0x041
+#define I2O_CLASS_SCSI_PERIPHERAL              0x051
+#define I2O_CLASS_ATE_PORT                     0x060
+#define I2O_CLASS_ATE_PERIPHERAL               0x061
+#define I2O_CLASS_FLOPPY_CONTROLLER            0x070
+#define I2O_CLASS_FLOPPY_DEVICE                0x071
+#define I2O_CLASS_BUS_ADAPTER                  0x080
+#define I2O_CLASS_PEER_TRANSPORT_AGENT         0x090
+#define I2O_CLASS_PEER_TRANSPORT               0x091
+#define        I2O_CLASS_END                           0xfff
+
+/*
+ *  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
+ */
+
+#define I2O_CLASS_MATCH_ANYCLASS               0xffffffff
+
+/*
+ *  Subclasses
+ */
+
+#define I2O_SUBCLASS_i960                      0x001
+#define I2O_SUBCLASS_HDM                       0x020
+#define I2O_SUBCLASS_ISM                       0x021
+
+/* Operation functions */
+
+#define I2O_PARAMS_FIELD_GET                   0x0001
+#define I2O_PARAMS_LIST_GET                    0x0002
+#define I2O_PARAMS_MORE_GET                    0x0003
+#define I2O_PARAMS_SIZE_GET                    0x0004
+#define I2O_PARAMS_TABLE_GET                   0x0005
+#define I2O_PARAMS_FIELD_SET                   0x0006
+#define I2O_PARAMS_LIST_SET                    0x0007
+#define I2O_PARAMS_ROW_ADD                     0x0008
+#define I2O_PARAMS_ROW_DELETE                  0x0009
+#define I2O_PARAMS_TABLE_CLEAR                 0x000A
+
+/*
+ * I2O serial number conventions / formats
+ * (circa v1.5)
+ */
+
+#define I2O_SNFORMAT_UNKNOWN                   0
+#define I2O_SNFORMAT_BINARY                    1
+#define I2O_SNFORMAT_ASCII                     2
+#define I2O_SNFORMAT_UNICODE                   3
+#define I2O_SNFORMAT_LAN48_MAC                 4
+#define I2O_SNFORMAT_WAN                       5
+
+/*
+ * Plus new in v2.0 (Yellowstone pdf doc)
+ */
+
+#define I2O_SNFORMAT_LAN64_MAC                 6
+#define I2O_SNFORMAT_DDM                       7
+#define I2O_SNFORMAT_IEEE_REG64                8
+#define I2O_SNFORMAT_IEEE_REG128               9
+#define I2O_SNFORMAT_UNKNOWN2                  0xff
+
+/*
+ *     I2O Get Status State values
+ */
+
+#define ADAPTER_STATE_INITIALIZING             0x01
+#define ADAPTER_STATE_RESET                    0x02
+#define ADAPTER_STATE_HOLD                     0x04
+#define ADAPTER_STATE_READY                    0x05
+#define ADAPTER_STATE_OPERATIONAL              0x08
+#define ADAPTER_STATE_FAILED                   0x10
+#define ADAPTER_STATE_FAULTED                  0x11
+
+/*
+ *     Software module types
+ */
+#define I2O_SOFTWARE_MODULE_IRTOS              0x11
+#define I2O_SOFTWARE_MODULE_IOP_PRIVATE                0x22
+#define I2O_SOFTWARE_MODULE_IOP_CONFIG         0x23
+
+/*
+ *     Vendors
+ */
+#define I2O_VENDOR_DPT                         0x001b
+
+/*
+ * DPT / Adaptec specific values for i2o_sg_io_hdr flags.
+ */
+#define I2O_DPT_SG_FLAG_INTERPRET              0x00010000
+#define I2O_DPT_SG_FLAG_PHYSICAL               0x00020000
+
+#define I2O_DPT_FLASH_FRAG_SIZE                        0x10000
+#define I2O_DPT_FLASH_READ                     0x0101
+#define I2O_DPT_FLASH_WRITE                    0x0102
+
+#endif                         /* _I2O_DEV_H */
diff --git a/lib/libdss-include/include/linux/i8k.h b/lib/libdss-include/include/linux/i8k.h
new file mode 100644 (file)
index 0000000..133d02f
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * i8k.h -- Linux driver for accessing the SMM BIOS on Dell laptops
+ *
+ * Copyright (C) 2001  Massimo Dal Zotto <dz@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+#ifndef _LINUX_I8K_H
+#define _LINUX_I8K_H
+
+#define I8K_PROC               "/proc/i8k"
+#define I8K_PROC_FMT           "1.0"
+
+#define I8K_BIOS_VERSION       _IOR ('i', 0x80, int)   /* broken: meant 4 bytes */
+#define I8K_MACHINE_ID         _IOR ('i', 0x81, int)   /* broken: meant 16 bytes */
+#define I8K_POWER_STATUS       _IOR ('i', 0x82, size_t)
+#define I8K_FN_STATUS          _IOR ('i', 0x83, size_t)
+#define I8K_GET_TEMP           _IOR ('i', 0x84, size_t)
+#define I8K_GET_SPEED          _IOWR('i', 0x85, size_t)
+#define I8K_GET_FAN            _IOWR('i', 0x86, size_t)
+#define I8K_SET_FAN            _IOWR('i', 0x87, size_t)
+
+#define I8K_FAN_LEFT           1
+#define I8K_FAN_RIGHT          0
+#define I8K_FAN_OFF            0
+#define I8K_FAN_LOW            1
+#define I8K_FAN_HIGH           2
+#define I8K_FAN_TURBO          3
+#define I8K_FAN_MAX            I8K_FAN_TURBO
+
+#define I8K_VOL_UP             1
+#define I8K_VOL_DOWN           2
+#define I8K_VOL_MUTE           4
+
+#define I8K_AC                 1
+#define I8K_BATTERY            0
+
+#endif
diff --git a/lib/libdss-include/include/linux/icmp.h b/lib/libdss-include/include/linux/icmp.h
new file mode 100644 (file)
index 0000000..ab58cee
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the ICMP protocol.
+ *
+ * Version:    @(#)icmp.h      1.0.3   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_ICMP_H
+#define _LINUX_ICMP_H
+
+#include <linux/types.h>
+
+#define ICMP_ECHOREPLY         0       /* Echo Reply                   */
+#define ICMP_DEST_UNREACH      3       /* Destination Unreachable      */
+#define ICMP_SOURCE_QUENCH     4       /* Source Quench                */
+#define ICMP_REDIRECT          5       /* Redirect (change route)      */
+#define ICMP_ECHO              8       /* Echo Request                 */
+#define ICMP_TIME_EXCEEDED     11      /* Time Exceeded                */
+#define ICMP_PARAMETERPROB     12      /* Parameter Problem            */
+#define ICMP_TIMESTAMP         13      /* Timestamp Request            */
+#define ICMP_TIMESTAMPREPLY    14      /* Timestamp Reply              */
+#define ICMP_INFO_REQUEST      15      /* Information Request          */
+#define ICMP_INFO_REPLY                16      /* Information Reply            */
+#define ICMP_ADDRESS           17      /* Address Mask Request         */
+#define ICMP_ADDRESSREPLY      18      /* Address Mask Reply           */
+#define NR_ICMP_TYPES          18
+
+
+/* Codes for UNREACH. */
+#define ICMP_NET_UNREACH       0       /* Network Unreachable          */
+#define ICMP_HOST_UNREACH      1       /* Host Unreachable             */
+#define ICMP_PROT_UNREACH      2       /* Protocol Unreachable         */
+#define ICMP_PORT_UNREACH      3       /* Port Unreachable             */
+#define ICMP_FRAG_NEEDED       4       /* Fragmentation Needed/DF set  */
+#define ICMP_SR_FAILED         5       /* Source Route failed          */
+#define ICMP_NET_UNKNOWN       6
+#define ICMP_HOST_UNKNOWN      7
+#define ICMP_HOST_ISOLATED     8
+#define ICMP_NET_ANO           9
+#define ICMP_HOST_ANO          10
+#define ICMP_NET_UNR_TOS       11
+#define ICMP_HOST_UNR_TOS      12
+#define ICMP_PKT_FILTERED      13      /* Packet filtered */
+#define ICMP_PREC_VIOLATION    14      /* Precedence violation */
+#define ICMP_PREC_CUTOFF       15      /* Precedence cut off */
+#define NR_ICMP_UNREACH                15      /* instead of hardcoding immediate value */
+
+/* Codes for REDIRECT. */
+#define ICMP_REDIR_NET         0       /* Redirect Net                 */
+#define ICMP_REDIR_HOST                1       /* Redirect Host                */
+#define ICMP_REDIR_NETTOS      2       /* Redirect Net for TOS         */
+#define ICMP_REDIR_HOSTTOS     3       /* Redirect Host for TOS        */
+
+/* Codes for TIME_EXCEEDED. */
+#define ICMP_EXC_TTL           0       /* TTL count exceeded           */
+#define ICMP_EXC_FRAGTIME      1       /* Fragment Reass time exceeded */
+
+
+struct icmphdr {
+  __u8         type;
+  __u8         code;
+  __sum16      checksum;
+  union {
+       struct {
+               __be16  id;
+               __be16  sequence;
+       } echo;
+       __be32  gateway;
+       struct {
+               __be16  __unused;
+               __be16  mtu;
+       } frag;
+  } un;
+};
+
+
+/*
+ *     constants for (set|get)sockopt
+ */
+
+#define ICMP_FILTER                    1
+
+struct icmp_filter {
+       __u32           data;
+};
+
+
+#endif /* _LINUX_ICMP_H */
diff --git a/lib/libdss-include/include/linux/icmpv6.h b/lib/libdss-include/include/linux/icmpv6.h
new file mode 100644 (file)
index 0000000..a2e839e
--- /dev/null
@@ -0,0 +1,166 @@
+#ifndef _LINUX_ICMPV6_H
+#define _LINUX_ICMPV6_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+struct icmp6hdr {
+
+       __u8            icmp6_type;
+       __u8            icmp6_code;
+       __sum16         icmp6_cksum;
+
+
+       union {
+               __be32                  un_data32[1];
+               __be16                  un_data16[2];
+               __u8                    un_data8[4];
+
+               struct icmpv6_echo {
+                       __be16          identifier;
+                       __be16          sequence;
+               } u_echo;
+
+                struct icmpv6_nd_advt {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+                        __u32          reserved:5,
+                                       override:1,
+                                       solicited:1,
+                                       router:1,
+                                       reserved2:24;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+                        __u32          router:1,
+                                       solicited:1,
+                                       override:1,
+                                       reserved:29;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif                                         
+                } u_nd_advt;
+
+                struct icmpv6_nd_ra {
+                       __u8            hop_limit;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+                       __u8            reserved:3,
+                                       router_pref:2,
+                                       home_agent:1,
+                                       other:1,
+                                       managed:1;
+
+#elif defined(__BIG_ENDIAN_BITFIELD)
+                       __u8            managed:1,
+                                       other:1,
+                                       home_agent:1,
+                                       router_pref:2,
+                                       reserved:3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+                       __be16          rt_lifetime;
+                } u_nd_ra;
+
+       } icmp6_dataun;
+
+#define icmp6_identifier       icmp6_dataun.u_echo.identifier
+#define icmp6_sequence         icmp6_dataun.u_echo.sequence
+#define icmp6_pointer          icmp6_dataun.un_data32[0]
+#define icmp6_mtu              icmp6_dataun.un_data32[0]
+#define icmp6_unused           icmp6_dataun.un_data32[0]
+#define icmp6_maxdelay         icmp6_dataun.un_data16[0]
+#define icmp6_router           icmp6_dataun.u_nd_advt.router
+#define icmp6_solicited                icmp6_dataun.u_nd_advt.solicited
+#define icmp6_override         icmp6_dataun.u_nd_advt.override
+#define icmp6_ndiscreserved    icmp6_dataun.u_nd_advt.reserved
+#define icmp6_hop_limit                icmp6_dataun.u_nd_ra.hop_limit
+#define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed
+#define icmp6_addrconf_other   icmp6_dataun.u_nd_ra.other
+#define icmp6_rt_lifetime      icmp6_dataun.u_nd_ra.rt_lifetime
+#define icmp6_router_pref      icmp6_dataun.u_nd_ra.router_pref
+};
+
+
+#define ICMPV6_ROUTER_PREF_LOW         0x3
+#define ICMPV6_ROUTER_PREF_MEDIUM      0x0
+#define ICMPV6_ROUTER_PREF_HIGH                0x1
+#define ICMPV6_ROUTER_PREF_INVALID     0x2
+
+#define ICMPV6_DEST_UNREACH            1
+#define ICMPV6_PKT_TOOBIG              2
+#define ICMPV6_TIME_EXCEED             3
+#define ICMPV6_PARAMPROB               4
+
+#define ICMPV6_INFOMSG_MASK            0x80
+
+#define ICMPV6_ECHO_REQUEST            128
+#define ICMPV6_ECHO_REPLY              129
+#define ICMPV6_MGM_QUERY               130
+#define ICMPV6_MGM_REPORT              131
+#define ICMPV6_MGM_REDUCTION           132
+
+#define ICMPV6_NI_QUERY                        139
+#define ICMPV6_NI_REPLY                        140
+
+#define ICMPV6_MLD2_REPORT             143
+
+#define ICMPV6_DHAAD_REQUEST           144
+#define ICMPV6_DHAAD_REPLY             145
+#define ICMPV6_MOBILE_PREFIX_SOL       146
+#define ICMPV6_MOBILE_PREFIX_ADV       147
+
+/*
+ *     Codes for Destination Unreachable
+ */
+#define ICMPV6_NOROUTE                 0
+#define ICMPV6_ADM_PROHIBITED          1
+#define ICMPV6_NOT_NEIGHBOUR           2
+#define ICMPV6_ADDR_UNREACH            3
+#define ICMPV6_PORT_UNREACH            4
+#define ICMPV6_POLICY_FAIL             5
+#define ICMPV6_REJECT_ROUTE            6
+
+/*
+ *     Codes for Time Exceeded
+ */
+#define ICMPV6_EXC_HOPLIMIT            0
+#define ICMPV6_EXC_FRAGTIME            1
+
+/*
+ *     Codes for Parameter Problem
+ */
+#define ICMPV6_HDR_FIELD               0
+#define ICMPV6_UNK_NEXTHDR             1
+#define ICMPV6_UNK_OPTION              2
+
+/*
+ *     constants for (set|get)sockopt
+ */
+
+#define ICMPV6_FILTER                  1
+
+/*
+ *     ICMPV6 filter
+ */
+
+#define ICMPV6_FILTER_BLOCK            1
+#define ICMPV6_FILTER_PASS             2
+#define ICMPV6_FILTER_BLOCKOTHERS      3
+#define ICMPV6_FILTER_PASSONLY         4
+
+struct icmp6_filter {
+       __u32           data[8];
+};
+
+/*
+ *     Definitions for MLDv2
+ */
+#define MLD2_MODE_IS_INCLUDE   1
+#define MLD2_MODE_IS_EXCLUDE   2
+#define MLD2_CHANGE_TO_INCLUDE 3
+#define MLD2_CHANGE_TO_EXCLUDE 4
+#define MLD2_ALLOW_NEW_SOURCES 5
+#define MLD2_BLOCK_OLD_SOURCES 6
+
+#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
+
+
+#endif /* _LINUX_ICMPV6_H */
diff --git a/lib/libdss-include/include/linux/if.h b/lib/libdss-include/include/linux/if.h
new file mode 100644 (file)
index 0000000..a55a9e0
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the INET interface module.
+ *
+ * Version:    @(#)if.h        1.0.2   04/18/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_H
+#define _LINUX_IF_H
+
+#include <linux/types.h>               /* for "__kernel_caddr_t" et al */
+#include <linux/socket.h>              /* for "struct sockaddr" et al  */
+               /* for "__user" et al           */
+
+#define        IFNAMSIZ        16
+#define        IFALIASZ        256
+#include <linux/hdlc/ioctl.h>
+
+/**
+ * enum net_device_flags - &struct net_device flags
+ *
+ * These are the &struct net_device flags, they can be set by drivers, the
+ * kernel and some can be triggered by userspace. Userspace can query and
+ * set these flags using userspace utilities but there is also a sysfs
+ * entry available for all dev flags which can be queried and set. These flags
+ * are shared for all types of net_devices. The sysfs entries are available
+ * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs
+ * are annotated below, note that only a few flags can be toggled and some
+ * other flags are always always preserved from the original net_device flags
+ * even if you try to set them via sysfs. Flags which are always preserved
+ * are kept under the flag grouping @IFF_VOLATILE. Flags which are __volatile__
+ * are annotated below as such.
+ *
+ * You should have a pretty good reason to be extending these flags.
+ *
+ * @IFF_UP: interface is up. Can be toggled through sysfs.
+ * @IFF_BROADCAST: broadcast address valid. Volatile.
+ * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs.
+ * @IFF_LOOPBACK: is a loopback net. Volatile.
+ * @IFF_POINTOPOINT: interface is has p-p link. Volatile.
+ * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs.
+ *     Volatile.
+ * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile.
+ * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile.
+ * @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
+ * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through
+ *     sysfs.
+ * @IFF_MASTER: master of a load balancer. Volatile.
+ * @IFF_SLAVE: slave of a load balancer. Volatile.
+ * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs.
+ * @IFF_PORTSEL: can set media type. Can be toggled through sysfs.
+ * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs.
+ * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled
+ *     through sysfs.
+ * @IFF_LOWER_UP: driver signals L1 up. Volatile.
+ * @IFF_DORMANT: driver signals dormant. Volatile.
+ * @IFF_ECHO: echo sent packets. Volatile.
+ */
+enum net_device_flags {
+       IFF_UP                          = 1<<0,  /* sysfs */
+       IFF_BROADCAST                   = 1<<1,  /* __volatile__ */
+       IFF_DEBUG                       = 1<<2,  /* sysfs */
+       IFF_LOOPBACK                    = 1<<3,  /* __volatile__ */
+       IFF_POINTOPOINT                 = 1<<4,  /* __volatile__ */
+       IFF_NOTRAILERS                  = 1<<5,  /* sysfs */
+       IFF_RUNNING                     = 1<<6,  /* __volatile__ */
+       IFF_NOARP                       = 1<<7,  /* sysfs */
+       IFF_PROMISC                     = 1<<8,  /* sysfs */
+       IFF_ALLMULTI                    = 1<<9,  /* sysfs */
+       IFF_MASTER                      = 1<<10, /* __volatile__ */
+       IFF_SLAVE                       = 1<<11, /* __volatile__ */
+       IFF_MULTICAST                   = 1<<12, /* sysfs */
+       IFF_PORTSEL                     = 1<<13, /* sysfs */
+       IFF_AUTOMEDIA                   = 1<<14, /* sysfs */
+       IFF_DYNAMIC                     = 1<<15, /* sysfs */
+       IFF_LOWER_UP                    = 1<<16, /* __volatile__ */
+       IFF_DORMANT                     = 1<<17, /* __volatile__ */
+       IFF_ECHO                        = 1<<18, /* __volatile__ */
+};
+
+#define IFF_UP                         IFF_UP
+#define IFF_BROADCAST                  IFF_BROADCAST
+#define IFF_DEBUG                      IFF_DEBUG
+#define IFF_LOOPBACK                   IFF_LOOPBACK
+#define IFF_POINTOPOINT                        IFF_POINTOPOINT
+#define IFF_NOTRAILERS                 IFF_NOTRAILERS
+#define IFF_RUNNING                    IFF_RUNNING
+#define IFF_NOARP                      IFF_NOARP
+#define IFF_PROMISC                    IFF_PROMISC
+#define IFF_ALLMULTI                   IFF_ALLMULTI
+#define IFF_MASTER                     IFF_MASTER
+#define IFF_SLAVE                      IFF_SLAVE
+#define IFF_MULTICAST                  IFF_MULTICAST
+#define IFF_PORTSEL                    IFF_PORTSEL
+#define IFF_AUTOMEDIA                  IFF_AUTOMEDIA
+#define IFF_DYNAMIC                    IFF_DYNAMIC
+#define IFF_LOWER_UP                   IFF_LOWER_UP
+#define IFF_DORMANT                    IFF_DORMANT
+#define IFF_ECHO                       IFF_ECHO
+
+#define IFF_VOLATILE   (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
+               IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
+
+#define IF_GET_IFACE   0x0001          /* for querying only */
+#define IF_GET_PROTO   0x0002
+
+/* For definitions see hdlc.h */
+#define IF_IFACE_V35   0x1000          /* V.35 serial interface        */
+#define IF_IFACE_V24   0x1001          /* V.24 serial interface        */
+#define IF_IFACE_X21   0x1002          /* X.21 serial interface        */
+#define IF_IFACE_T1    0x1003          /* T1 telco serial interface    */
+#define IF_IFACE_E1    0x1004          /* E1 telco serial interface    */
+#define IF_IFACE_SYNC_SERIAL 0x1005    /* can't be set by software     */
+#define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */
+
+/* For definitions see hdlc.h */
+#define IF_PROTO_HDLC  0x2000          /* raw HDLC protocol            */
+#define IF_PROTO_PPP   0x2001          /* PPP protocol                 */
+#define IF_PROTO_CISCO 0x2002          /* Cisco HDLC protocol          */
+#define IF_PROTO_FR    0x2003          /* Frame Relay protocol         */
+#define IF_PROTO_FR_ADD_PVC 0x2004     /*    Create FR PVC             */
+#define IF_PROTO_FR_DEL_PVC 0x2005     /*    Delete FR PVC             */
+#define IF_PROTO_X25   0x2006          /* X.25                         */
+#define IF_PROTO_HDLC_ETH 0x2007       /* raw HDLC, Ethernet emulation */
+#define IF_PROTO_FR_ADD_ETH_PVC 0x2008 /*  Create FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_DEL_ETH_PVC 0x2009 /*  Delete FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_PVC        0x200A          /* for reading PVC status       */
+#define IF_PROTO_FR_ETH_PVC 0x200B
+#define IF_PROTO_RAW    0x200C          /* RAW Socket                   */
+
+/* RFC 2863 operational status */
+enum {
+       IF_OPER_UNKNOWN,
+       IF_OPER_NOTPRESENT,
+       IF_OPER_DOWN,
+       IF_OPER_LOWERLAYERDOWN,
+       IF_OPER_TESTING,
+       IF_OPER_DORMANT,
+       IF_OPER_UP,
+};
+
+/* link modes */
+enum {
+       IF_LINK_MODE_DEFAULT,
+       IF_LINK_MODE_DORMANT,   /* limit upward transition to dormant */
+};
+
+/*
+ *     Device mapping structure. I'd just gone off and designed a 
+ *     beautiful scheme using only loadable modules with arguments
+ *     for driver options and along come the PCMCIA people 8)
+ *
+ *     Ah well. The get() side of this is good for WDSETUP, and it'll
+ *     be handy for debugging things. The set side is fine for now and
+ *     being very small might be worth keeping for clean configuration.
+ */
+
+struct ifmap {
+       unsigned long mem_start;
+       unsigned long mem_end;
+       unsigned short base_addr; 
+       unsigned char irq;
+       unsigned char dma;
+       unsigned char port;
+       /* 3 bytes spare */
+};
+
+struct if_settings {
+       unsigned int type;      /* Type of physical device or protocol */
+       unsigned int size;      /* Size of the data allocated by the caller */
+       union {
+               /* {atm/eth/dsl}_settings anyone ? */
+               raw_hdlc_proto          *raw_hdlc;
+               cisco_proto             *cisco;
+               fr_proto                *fr;
+               fr_proto_pvc            *fr_pvc;
+               fr_proto_pvc_info       *fr_pvc_info;
+
+               /* interface settings */
+               sync_serial_settings    *sync;
+               te1_settings            *te1;
+       } ifs_ifsu;
+};
+
+/*
+ * Interface request structure used for socket
+ * ioctl's.  All interface ioctl's must have parameter
+ * definitions which begin with ifr_name.  The
+ * remainder may be interface specific.
+ */
+
+struct ifreq {
+#define IFHWADDRLEN    6
+       union
+       {
+               char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+       } ifr_ifrn;
+       
+       union {
+               struct  sockaddr ifru_addr;
+               struct  sockaddr ifru_dstaddr;
+               struct  sockaddr ifru_broadaddr;
+               struct  sockaddr ifru_netmask;
+               struct  sockaddr ifru_hwaddr;
+               short   ifru_flags;
+               int     ifru_ivalue;
+               int     ifru_mtu;
+               struct  ifmap ifru_map;
+               char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
+               char    ifru_newname[IFNAMSIZ];
+               void *  ifru_data;
+               struct  if_settings ifru_settings;
+       } ifr_ifru;
+};
+
+#define ifr_name       ifr_ifrn.ifrn_name      /* interface name       */
+#define ifr_hwaddr     ifr_ifru.ifru_hwaddr    /* MAC address          */
+#define        ifr_addr        ifr_ifru.ifru_addr      /* address              */
+#define        ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
+#define        ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */
+#define        ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */
+#define        ifr_flags       ifr_ifru.ifru_flags     /* flags                */
+#define        ifr_metric      ifr_ifru.ifru_ivalue    /* metric               */
+#define        ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */
+#define ifr_map                ifr_ifru.ifru_map       /* device map           */
+#define ifr_slave      ifr_ifru.ifru_slave     /* slave device         */
+#define        ifr_data        ifr_ifru.ifru_data      /* for use by interface */
+#define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index      */
+#define ifr_bandwidth  ifr_ifru.ifru_ivalue    /* link bandwidth       */
+#define ifr_qlen       ifr_ifru.ifru_ivalue    /* Queue length         */
+#define ifr_newname    ifr_ifru.ifru_newname   /* New name             */
+#define ifr_settings   ifr_ifru.ifru_settings  /* Device/proto settings*/
+
+/*
+ * Structure used in SIOCGIFCONF request.
+ * Used to retrieve interface configuration
+ * for machine (useful for programs which
+ * must know all networks accessible).
+ */
+
+struct ifconf  {
+       int     ifc_len;                        /* size of buffer       */
+       union {
+               char *ifcu_buf;
+               struct ifreq *ifcu_req;
+       } ifc_ifcu;
+};
+#define        ifc_buf ifc_ifcu.ifcu_buf               /* buffer address       */
+#define        ifc_req ifc_ifcu.ifcu_req               /* array of structures  */
+
+#endif /* _LINUX_IF_H */
diff --git a/lib/libdss-include/include/linux/if_addr.h b/lib/libdss-include/include/linux/if_addr.h
new file mode 100644 (file)
index 0000000..26f0ecf
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef __LINUX_IF_ADDR_H
+#define __LINUX_IF_ADDR_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct ifaddrmsg {
+       __u8            ifa_family;
+       __u8            ifa_prefixlen;  /* The prefix length            */
+       __u8            ifa_flags;      /* Flags                        */
+       __u8            ifa_scope;      /* Address scope                */
+       __u32           ifa_index;      /* Link index                   */
+};
+
+/*
+ * Important comment:
+ * IFA_ADDRESS is prefix address, rather than local interface address.
+ * It makes no difference for normally configured broadcast interfaces,
+ * but for point-to-point IFA_ADDRESS is DESTINATION address,
+ * local address is supplied in IFA_LOCAL attribute.
+ *
+ * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags.
+ * If present, the value from struct ifaddrmsg will be ignored.
+ */
+enum {
+       IFA_UNSPEC,
+       IFA_ADDRESS,
+       IFA_LOCAL,
+       IFA_LABEL,
+       IFA_BROADCAST,
+       IFA_ANYCAST,
+       IFA_CACHEINFO,
+       IFA_MULTICAST,
+       IFA_FLAGS,
+       __IFA_MAX,
+};
+
+#define IFA_MAX (__IFA_MAX - 1)
+
+/* ifa_flags */
+#define IFA_F_SECONDARY                0x01
+#define IFA_F_TEMPORARY                IFA_F_SECONDARY
+
+#define        IFA_F_NODAD             0x02
+#define IFA_F_OPTIMISTIC       0x04
+#define IFA_F_DADFAILED                0x08
+#define        IFA_F_HOMEADDRESS       0x10
+#define IFA_F_DEPRECATED       0x20
+#define IFA_F_TENTATIVE                0x40
+#define IFA_F_PERMANENT                0x80
+#define IFA_F_MANAGETEMPADDR   0x100
+#define IFA_F_NOPREFIXROUTE    0x200
+#define IFA_F_MCAUTOJOIN       0x400
+#define IFA_F_STABLE_PRIVACY   0x800
+
+struct ifa_cacheinfo {
+       __u32   ifa_prefered;
+       __u32   ifa_valid;
+       __u32   cstamp; /* created timestamp, hundredths of seconds */
+       __u32   tstamp; /* updated timestamp, hundredths of seconds */
+};
+
+/* backwards compatibility for userspace */
+#define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
+#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_addrlabel.h b/lib/libdss-include/include/linux/if_addrlabel.h
new file mode 100644 (file)
index 0000000..54580c2
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * if_addrlabel.h - netlink interface for address labels
+ *
+ * Copyright (C)2007 USAGI/WIDE Project,  All Rights Reserved.
+ *
+ * Authors:
+ *     YOSHIFUJI Hideaki @ USAGI/WIDE <yoshfuji@linux-ipv6.org>
+ */
+
+#ifndef __LINUX_IF_ADDRLABEL_H
+#define __LINUX_IF_ADDRLABEL_H
+
+#include <linux/types.h>
+
+struct ifaddrlblmsg {
+       __u8            ifal_family;            /* Address family */
+       __u8            __ifal_reserved;        /* Reserved */
+       __u8            ifal_prefixlen;         /* Prefix length */
+       __u8            ifal_flags;             /* Flags */
+       __u32           ifal_index;             /* Link index */
+       __u32           ifal_seq;               /* sequence number */
+};
+
+enum {
+       IFAL_ADDRESS = 1,
+       IFAL_LABEL = 2,
+       __IFAL_MAX
+};
+
+#define IFAL_MAX       (__IFAL_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_alg.h b/lib/libdss-include/include/linux/if_alg.h
new file mode 100644 (file)
index 0000000..f2acd2f
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * if_alg: User-space algorithm interface
+ *
+ * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ */
+
+#ifndef _LINUX_IF_ALG_H
+#define _LINUX_IF_ALG_H
+
+#include <linux/types.h>
+
+struct sockaddr_alg {
+       __u16   salg_family;
+       __u8    salg_type[14];
+       __u32   salg_feat;
+       __u32   salg_mask;
+       __u8    salg_name[64];
+};
+
+struct af_alg_iv {
+       __u32   ivlen;
+       __u8    iv[0];
+};
+
+/* Socket options */
+#define ALG_SET_KEY                    1
+#define ALG_SET_IV                     2
+#define ALG_SET_OP                     3
+#define ALG_SET_AEAD_ASSOCLEN          4
+#define ALG_SET_AEAD_AUTHSIZE          5
+
+/* Operations */
+#define ALG_OP_DECRYPT                 0
+#define ALG_OP_ENCRYPT                 1
+
+#endif /* _LINUX_IF_ALG_H */
diff --git a/lib/libdss-include/include/linux/if_arcnet.h b/lib/libdss-include/include/linux/if_arcnet.h
new file mode 100644 (file)
index 0000000..cfb642f
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * INET         An implementation of the TCP/IP protocol suite for the LINUX
+ *              operating system.  INET is implemented using the  BSD Socket
+ *              interface as the means of communication with the user level.
+ *
+ *              Global definitions for the ARCnet interface.
+ *
+ * Authors:     David Woodhouse and Avery Pennarun
+ *
+ *              This program is free software; you can redistribute it and/or
+ *              modify it under the terms of the GNU General Public License
+ *              as published by the Free Software Foundation; either version
+ *              2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_ARCNET_H
+#define _LINUX_IF_ARCNET_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+ *    These are the defined ARCnet Protocol ID's.
+ */
+
+/* CAP mode */
+/* No macro but uses 1-8 */
+
+/* RFC1201 Protocol ID's */
+#define ARC_P_IP               212     /* 0xD4 */
+#define ARC_P_IPV6             196     /* 0xC4: RFC2497 */
+#define ARC_P_ARP              213     /* 0xD5 */
+#define ARC_P_RARP             214     /* 0xD6 */
+#define ARC_P_IPX              250     /* 0xFA */
+#define ARC_P_NOVELL_EC                236     /* 0xEC */
+
+/* Old RFC1051 Protocol ID's */
+#define ARC_P_IP_RFC1051       240     /* 0xF0 */
+#define ARC_P_ARP_RFC1051      241     /* 0xF1 */
+
+/* MS LanMan/WfWg "NDIS" encapsulation */
+#define ARC_P_ETHER            232     /* 0xE8 */
+
+/* Unsupported/indirectly supported protocols */
+#define ARC_P_DATAPOINT_BOOT   0       /* very old Datapoint equipment */
+#define ARC_P_DATAPOINT_MOUNT  1
+#define ARC_P_POWERLAN_BEACON  8       /* Probably ATA-Netbios related */
+#define ARC_P_POWERLAN_BEACON2 243     /* 0xF3 */
+#define ARC_P_LANSOFT          251     /* 0xFB - what is this? */
+#define ARC_P_ATALK            0xDD
+
+/* Hardware address length */
+#define ARCNET_ALEN    1
+
+/*
+ * The RFC1201-specific components of an arcnet packet header.
+ */
+struct arc_rfc1201 {
+       __u8  proto;            /* protocol ID field - varies           */
+       __u8  split_flag;       /* for use with split packets           */
+       __be16   sequence;      /* sequence number                      */
+       __u8  payload[0];       /* space remaining in packet (504 bytes)*/
+};
+#define RFC1201_HDR_SIZE 4
+
+/*
+ * The RFC1051-specific components.
+ */
+struct arc_rfc1051 {
+       __u8 proto;             /* ARC_P_RFC1051_ARP/RFC1051_IP */
+       __u8 payload[0];        /* 507 bytes                    */
+};
+#define RFC1051_HDR_SIZE 1
+
+/*
+ * The ethernet-encap-specific components.  We have a real ethernet header
+ * and some data.
+ */
+struct arc_eth_encap {
+       __u8 proto;             /* Always ARC_P_ETHER                   */
+       struct ethhdr eth;      /* standard ethernet header (yuck!)     */
+       __u8 payload[0];        /* 493 bytes                            */
+};
+#define ETH_ENCAP_HDR_SIZE 14
+
+struct arc_cap {
+       __u8 proto;
+       __u8 cookie[sizeof(int)];
+                               /* Actually NOT sent over the network */
+       union {
+               __u8 ack;
+               __u8 raw[0];    /* 507 bytes */
+       } mes;
+};
+
+/*
+ * The data needed by the actual arcnet hardware.
+ *
+ * Now, in the real arcnet hardware, the third and fourth bytes are the
+ * 'offset' specification instead of the length, and the soft data is at
+ * the _end_ of the 512-byte buffer.  We hide this complexity inside the
+ * driver.
+ */
+struct arc_hardware {
+       __u8 source;            /* source ARCnet - filled in automagically */
+       __u8 dest;              /* destination ARCnet - 0 for broadcast    */
+       __u8 offset[2];         /* offset bytes (some weird semantics)     */
+};
+#define ARC_HDR_SIZE 4
+
+/*
+ * This is an ARCnet frame header, as seen by the kernel (and userspace,
+ * when you do a raw packet capture).
+ */
+struct archdr {
+       /* hardware requirements */
+       struct arc_hardware hard;
+
+       /* arcnet encapsulation-specific bits */
+       union {
+               struct arc_rfc1201   rfc1201;
+               struct arc_rfc1051   rfc1051;
+               struct arc_eth_encap eth_encap;
+               struct arc_cap       cap;
+               __u8 raw[0];    /* 508 bytes                            */
+       } soft;
+};
+
+#endif                         /* _LINUX_IF_ARCNET_H */
diff --git a/lib/libdss-include/include/linux/if_arp.h b/lib/libdss-include/include/linux/if_arp.h
new file mode 100644 (file)
index 0000000..d001bdb
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the ARP (RFC 826) protocol.
+ *
+ * Version:    @(#)if_arp.h    1.0.1   04/16/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
+ *             Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source.
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Florian La Roche,
+ *             Jonathan Layes <layes@loran.com>
+ *             Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_ARP_H
+#define _LINUX_IF_ARP_H
+
+#include <linux/netdevice.h>
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM  0               /* from KA9Q: NET/ROM pseudo    */
+#define ARPHRD_ETHER   1               /* Ethernet 10Mbps              */
+#define        ARPHRD_EETHER   2               /* Experimental Ethernet        */
+#define        ARPHRD_AX25     3               /* AX.25 Level 2                */
+#define        ARPHRD_PRONET   4               /* PROnet token ring            */
+#define        ARPHRD_CHAOS    5               /* Chaosnet                     */
+#define        ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB    */
+#define        ARPHRD_ARCNET   7               /* ARCnet                       */
+#define        ARPHRD_APPLETLK 8               /* APPLEtalk                    */
+#define ARPHRD_DLCI    15              /* Frame Relay DLCI             */
+#define ARPHRD_ATM     19              /* ATM                          */
+#define ARPHRD_METRICOM        23              /* Metricom STRIP (new IANA id) */
+#define        ARPHRD_IEEE1394 24              /* IEEE 1394 IPv4 - RFC 2734    */
+#define ARPHRD_EUI64   27              /* EUI-64                       */
+#define ARPHRD_INFINIBAND 32           /* InfiniBand                   */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP    256
+#define ARPHRD_CSLIP   257
+#define ARPHRD_SLIP6   258
+#define ARPHRD_CSLIP6  259
+#define ARPHRD_RSRVD   260             /* Notional KISS type           */
+#define ARPHRD_ADAPT   264
+#define ARPHRD_ROSE    270
+#define ARPHRD_X25     271             /* CCITT X.25                   */
+#define ARPHRD_HWX25   272             /* Boards with X.25 in firmware */
+#define ARPHRD_CAN     280             /* Controller Area Network      */
+#define ARPHRD_PPP     512
+#define ARPHRD_CISCO   513             /* Cisco HDLC                   */
+#define ARPHRD_HDLC    ARPHRD_CISCO
+#define ARPHRD_LAPB    516             /* LAPB                         */
+#define ARPHRD_DDCMP    517            /* Digital's DDCMP protocol     */
+#define ARPHRD_RAWHDLC 518             /* Raw HDLC                     */
+
+#define ARPHRD_TUNNEL  768             /* IPIP tunnel                  */
+#define ARPHRD_TUNNEL6 769             /* IP6IP6 tunnel                */
+#define ARPHRD_FRAD    770             /* Frame Relay Access Device    */
+#define ARPHRD_SKIP    771             /* SKIP vif                     */
+#define ARPHRD_LOOPBACK        772             /* Loopback device              */
+#define ARPHRD_LOCALTLK 773            /* Localtalk device             */
+#define ARPHRD_FDDI    774             /* Fiber Distributed Data Interface */
+#define ARPHRD_BIF      775             /* AP1000 BIF                   */
+#define ARPHRD_SIT     776             /* sit0 device - IPv6-in-IPv4   */
+#define ARPHRD_IPDDP   777             /* IP over DDP tunneller        */
+#define ARPHRD_IPGRE   778             /* GRE over IP                  */
+#define ARPHRD_PIMREG  779             /* PIMSM register interface     */
+#define ARPHRD_HIPPI   780             /* High Performance Parallel Interface */
+#define ARPHRD_ASH     781             /* Nexus 64Mbps Ash             */
+#define ARPHRD_ECONET  782             /* Acorn Econet                 */
+#define ARPHRD_IRDA    783             /* Linux-IrDA                   */
+/* ARP works differently on different FC media .. so  */
+#define ARPHRD_FCPP    784             /* Point to point fibrechannel  */
+#define ARPHRD_FCAL    785             /* Fibrechannel arbitrated loop */
+#define ARPHRD_FCPL    786             /* Fibrechannel public loop     */
+#define ARPHRD_FCFABRIC        787             /* Fibrechannel fabric          */
+       /* 787->799 reserved for fibrechannel media types */
+#define ARPHRD_IEEE802_TR 800          /* Magic type ident for TR      */
+#define ARPHRD_IEEE80211 801           /* IEEE 802.11                  */
+#define ARPHRD_IEEE80211_PRISM 802     /* IEEE 802.11 + Prism2 header  */
+#define ARPHRD_IEEE80211_RADIOTAP 803  /* IEEE 802.11 + radiotap header */
+#define ARPHRD_IEEE802154        804
+#define ARPHRD_IEEE802154_MONITOR 805  /* IEEE 802.15.4 network monitor */
+
+#define ARPHRD_PHONET  820             /* PhoNet media type            */
+#define ARPHRD_PHONET_PIPE 821         /* PhoNet pipe header           */
+#define ARPHRD_CAIF    822             /* CAIF media type              */
+#define ARPHRD_IP6GRE  823             /* GRE over IPv6                */
+#define ARPHRD_NETLINK 824             /* Netlink header               */
+#define ARPHRD_6LOWPAN 825             /* IPv6 over LoWPAN             */
+
+#define ARPHRD_VOID      0xFFFF        /* Void type, nothing is known */
+#define ARPHRD_NONE      0xFFFE        /* zero header length */
+
+/* ARP protocol opcodes. */
+#define        ARPOP_REQUEST   1               /* ARP request                  */
+#define        ARPOP_REPLY     2               /* ARP reply                    */
+#define        ARPOP_RREQUEST  3               /* RARP request                 */
+#define        ARPOP_RREPLY    4               /* RARP reply                   */
+#define        ARPOP_InREQUEST 8               /* InARP request                */
+#define        ARPOP_InREPLY   9               /* InARP reply                  */
+#define        ARPOP_NAK       10              /* (ATM)ARP NAK                 */
+
+
+/* ARP ioctl request. */
+struct arpreq {
+  struct sockaddr      arp_pa;         /* protocol address             */
+  struct sockaddr      arp_ha;         /* hardware address             */
+  int                  arp_flags;      /* flags                        */
+  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */
+  char                 arp_dev[16];
+};
+
+struct arpreq_old {
+  struct sockaddr      arp_pa;         /* protocol address             */
+  struct sockaddr      arp_ha;         /* hardware address             */
+  int                  arp_flags;      /* flags                        */
+  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */
+};
+
+/* ARP Flag values. */
+#define ATF_COM                0x02            /* completed entry (ha valid)   */
+#define        ATF_PERM        0x04            /* permanent entry              */
+#define        ATF_PUBL        0x08            /* publish entry                */
+#define        ATF_USETRAILERS 0x10            /* has requested trailers       */
+#define ATF_NETMASK     0x20            /* want to use a netmask (only
+                                          for proxy entries) */
+#define ATF_DONTPUB    0x40            /* don't answer this addresses  */
+
+/*
+ *     This structure defines an ethernet arp header.
+ */
+
+struct arphdr {
+       __be16          ar_hrd;         /* format of hardware address   */
+       __be16          ar_pro;         /* format of protocol address   */
+       unsigned char   ar_hln;         /* length of hardware address   */
+       unsigned char   ar_pln;         /* length of protocol address   */
+       __be16          ar_op;          /* ARP opcode (command)         */
+
+#if 0
+        /*
+         *      Ethernet looks like this : This bit is variable sized however...
+         */
+       unsigned char           ar_sha[ETH_ALEN];       /* sender hardware address      */
+       unsigned char           ar_sip[4];              /* sender IP address            */
+       unsigned char           ar_tha[ETH_ALEN];       /* target hardware address      */
+       unsigned char           ar_tip[4];              /* target IP address            */
+#endif
+
+};
+
+
+#endif /* _LINUX_IF_ARP_H */
diff --git a/lib/libdss-include/include/linux/if_bonding.h b/lib/libdss-include/include/linux/if_bonding.h
new file mode 100644 (file)
index 0000000..9635a62
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
+ *
+ *
+ * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
+ * NCM: Network and Communications Management, Inc.
+ *
+ * BUT, I'm the one who modified it for ethernet, so:
+ * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
+ *
+ *     This software may be used and distributed according to the terms
+ *     of the GNU Public License, incorporated herein by reference.
+ *
+ * 2003/03/18 - Amir Noam <amir.noam at intel dot com>
+ *     - Added support for getting slave's speed and duplex via ethtool.
+ *       Needed for 802.3ad and other future modes.
+ *
+ * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Enable support of modes that need to use the unique mac address of
+ *       each slave.
+ *
+ * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Amir Noam <amir.noam at intel dot com>
+ *     - Moved driver's private data types to bonding.h
+ *
+ * 2003/03/18 - Amir Noam <amir.noam at intel dot com>,
+ *             Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Added support for IEEE 802.3ad Dynamic link aggregation mode.
+ *
+ * 2003/05/01 - Amir Noam <amir.noam at intel dot com>
+ *     - Added ABI version control to restore compatibility between
+ *       new/old ifenslave and new/old bonding.
+ *
+ * 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Code cleanup and style changes
+ *
+ * 2005/05/05 - Jason Gabler <jygabler at lbl dot gov>
+ *      - added definitions for various XOR hashing policies
+ */
+
+#ifndef _LINUX_IF_BONDING_H
+#define _LINUX_IF_BONDING_H
+
+#include <linux/if.h>
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/* userland - kernel ABI version (2003/05/08) */
+#define BOND_ABI_VERSION 2
+
+/*
+ * We can remove these ioctl definitions in 2.5.  People should use the
+ * SIOC*** versions of them instead
+ */
+#define BOND_ENSLAVE_OLD               (SIOCDEVPRIVATE)
+#define BOND_RELEASE_OLD               (SIOCDEVPRIVATE + 1)
+#define BOND_SETHWADDR_OLD             (SIOCDEVPRIVATE + 2)
+#define BOND_SLAVE_INFO_QUERY_OLD      (SIOCDEVPRIVATE + 11)
+#define BOND_INFO_QUERY_OLD            (SIOCDEVPRIVATE + 12)
+#define BOND_CHANGE_ACTIVE_OLD         (SIOCDEVPRIVATE + 13)
+
+#define BOND_CHECK_MII_STATUS  (SIOCGMIIPHY)
+
+#define BOND_MODE_ROUNDROBIN   0
+#define BOND_MODE_ACTIVEBACKUP 1
+#define BOND_MODE_XOR          2
+#define BOND_MODE_BROADCAST    3
+#define BOND_MODE_8023AD        4
+#define BOND_MODE_TLB           5
+#define BOND_MODE_ALB          6 /* TLB + RLB (receive load balancing) */
+
+/* each slave's link has 4 states */
+#define BOND_LINK_UP    0           /* link is up and running */
+#define BOND_LINK_FAIL  1           /* link has just gone down */
+#define BOND_LINK_DOWN  2           /* link has been down for too long time */
+#define BOND_LINK_BACK  3           /* link is going back */
+
+/* each slave has several states */
+#define BOND_STATE_ACTIVE       0   /* link is active */
+#define BOND_STATE_BACKUP       1   /* link is backup */
+
+#define BOND_DEFAULT_MAX_BONDS  1   /* Default maximum number of devices to support */
+
+#define BOND_DEFAULT_TX_QUEUES 16   /* Default number of tx queues per device */
+
+#define BOND_DEFAULT_RESEND_IGMP       1 /* Default number of IGMP membership reports */
+
+/* hashing types */
+#define BOND_XMIT_POLICY_LAYER2                0 /* layer 2 (MAC only), default */
+#define BOND_XMIT_POLICY_LAYER34       1 /* layer 3+4 (IP ^ (TCP || UDP)) */
+#define BOND_XMIT_POLICY_LAYER23       2 /* layer 2+3 (IP ^ MAC) */
+#define BOND_XMIT_POLICY_ENCAP23       3 /* encapsulated layer 2+3 */
+#define BOND_XMIT_POLICY_ENCAP34       4 /* encapsulated layer 3+4 */
+
+typedef struct ifbond {
+       __s32 bond_mode;
+       __s32 num_slaves;
+       __s32 miimon;
+} ifbond;
+
+typedef struct ifslave {
+       __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
+       char slave_name[IFNAMSIZ];
+       __s8 link;
+       __s8 state;
+       __u32  link_failure_count;
+} ifslave;
+
+struct ad_info {
+       __u16 aggregator_id;
+       __u16 ports;
+       __u16 actor_key;
+       __u16 partner_key;
+       __u8 partner_system[ETH_ALEN];
+};
+
+#endif /* _LINUX_IF_BONDING_H */
+
+/*
+ * Local variables:
+ *  version-control: t
+ *  kept-new-versions: 5
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ *  tab-width: 8
+ * End:
+ */
+
diff --git a/lib/libdss-include/include/linux/if_bridge.h b/lib/libdss-include/include/linux/if_bridge.h
new file mode 100644 (file)
index 0000000..ee197a3
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ *     Linux ethernet bridge
+ *
+ *     Authors:
+ *     Lennert Buytenhek               <buytenh@gnu.org>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_BRIDGE_H
+#define _LINUX_IF_BRIDGE_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+#include <linux/in6.h>
+
+#define SYSFS_BRIDGE_ATTR      "bridge"
+#define SYSFS_BRIDGE_FDB       "brforward"
+#define SYSFS_BRIDGE_PORT_SUBDIR "brif"
+#define SYSFS_BRIDGE_PORT_ATTR "brport"
+#define SYSFS_BRIDGE_PORT_LINK "bridge"
+
+#define BRCTL_VERSION 1
+
+#define BRCTL_GET_VERSION 0
+#define BRCTL_GET_BRIDGES 1
+#define BRCTL_ADD_BRIDGE 2
+#define BRCTL_DEL_BRIDGE 3
+#define BRCTL_ADD_IF 4
+#define BRCTL_DEL_IF 5
+#define BRCTL_GET_BRIDGE_INFO 6
+#define BRCTL_GET_PORT_LIST 7
+#define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
+#define BRCTL_SET_BRIDGE_HELLO_TIME 9
+#define BRCTL_SET_BRIDGE_MAX_AGE 10
+#define BRCTL_SET_AGEING_TIME 11
+#define BRCTL_SET_GC_INTERVAL 12
+#define BRCTL_GET_PORT_INFO 13
+#define BRCTL_SET_BRIDGE_STP_STATE 14
+#define BRCTL_SET_BRIDGE_PRIORITY 15
+#define BRCTL_SET_PORT_PRIORITY 16
+#define BRCTL_SET_PATH_COST 17
+#define BRCTL_GET_FDB_ENTRIES 18
+
+#define BR_STATE_DISABLED 0
+#define BR_STATE_LISTENING 1
+#define BR_STATE_LEARNING 2
+#define BR_STATE_FORWARDING 3
+#define BR_STATE_BLOCKING 4
+
+struct __bridge_info {
+       __u64 designated_root;
+       __u64 bridge_id;
+       __u32 root_path_cost;
+       __u32 max_age;
+       __u32 hello_time;
+       __u32 forward_delay;
+       __u32 bridge_max_age;
+       __u32 bridge_hello_time;
+       __u32 bridge_forward_delay;
+       __u8 topology_change;
+       __u8 topology_change_detected;
+       __u8 root_port;
+       __u8 stp_enabled;
+       __u32 ageing_time;
+       __u32 gc_interval;
+       __u32 hello_timer_value;
+       __u32 tcn_timer_value;
+       __u32 topology_change_timer_value;
+       __u32 gc_timer_value;
+};
+
+struct __port_info {
+       __u64 designated_root;
+       __u64 designated_bridge;
+       __u16 port_id;
+       __u16 designated_port;
+       __u32 path_cost;
+       __u32 designated_cost;
+       __u8 state;
+       __u8 top_change_ack;
+       __u8 config_pending;
+       __u8 unused0;
+       __u32 message_age_timer_value;
+       __u32 forward_delay_timer_value;
+       __u32 hold_timer_value;
+};
+
+struct __fdb_entry {
+       __u8 mac_addr[ETH_ALEN];
+       __u8 port_no;
+       __u8 is_local;
+       __u32 ageing_timer_value;
+       __u8 port_hi;
+       __u8 pad0;
+       __u16 unused;
+};
+
+/* Bridge Flags */
+#define BRIDGE_FLAGS_MASTER    1       /* Bridge command to/from master */
+#define BRIDGE_FLAGS_SELF      2       /* Bridge command to/from lowerdev */
+
+#define BRIDGE_MODE_VEB                0       /* Default loopback mode */
+#define BRIDGE_MODE_VEPA       1       /* 802.1Qbg defined VEPA mode */
+#define BRIDGE_MODE_UNDEF      0xFFFF  /* mode undefined */
+
+/* Bridge management nested attributes
+ * [IFLA_AF_SPEC] = {
+ *     [IFLA_BRIDGE_FLAGS]
+ *     [IFLA_BRIDGE_MODE]
+ *     [IFLA_BRIDGE_VLAN_INFO]
+ * }
+ */
+enum {
+       IFLA_BRIDGE_FLAGS,
+       IFLA_BRIDGE_MODE,
+       IFLA_BRIDGE_VLAN_INFO,
+       __IFLA_BRIDGE_MAX,
+};
+#define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
+
+#define BRIDGE_VLAN_INFO_MASTER        (1<<0)  /* Operate on Bridge device as well */
+#define BRIDGE_VLAN_INFO_PVID  (1<<1)  /* VLAN is PVID, ingress untagged */
+#define BRIDGE_VLAN_INFO_UNTAGGED      (1<<2)  /* VLAN egresses untagged */
+#define BRIDGE_VLAN_INFO_RANGE_BEGIN   (1<<3) /* VLAN is start of vlan range */
+#define BRIDGE_VLAN_INFO_RANGE_END     (1<<4) /* VLAN is end of vlan range */
+#define BRIDGE_VLAN_INFO_BRENTRY       (1<<5) /* Global bridge VLAN entry */
+
+struct bridge_vlan_info {
+       __u16 flags;
+       __u16 vid;
+};
+
+/* Bridge multicast database attributes
+ * [MDBA_MDB] = {
+ *     [MDBA_MDB_ENTRY] = {
+ *         [MDBA_MDB_ENTRY_INFO]
+ *     }
+ * }
+ * [MDBA_ROUTER] = {
+ *    [MDBA_ROUTER_PORT]
+ * }
+ */
+enum {
+       MDBA_UNSPEC,
+       MDBA_MDB,
+       MDBA_ROUTER,
+       __MDBA_MAX,
+};
+#define MDBA_MAX (__MDBA_MAX - 1)
+
+enum {
+       MDBA_MDB_UNSPEC,
+       MDBA_MDB_ENTRY,
+       __MDBA_MDB_MAX,
+};
+#define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
+
+enum {
+       MDBA_MDB_ENTRY_UNSPEC,
+       MDBA_MDB_ENTRY_INFO,
+       __MDBA_MDB_ENTRY_MAX,
+};
+#define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
+
+enum {
+       MDBA_ROUTER_UNSPEC,
+       MDBA_ROUTER_PORT,
+       __MDBA_ROUTER_MAX,
+};
+#define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
+
+struct br_port_msg {
+       __u8  family;
+       __u32 ifindex;
+};
+
+struct br_mdb_entry {
+       __u32 ifindex;
+#define MDB_TEMPORARY 0
+#define MDB_PERMANENT 1
+       __u8 state;
+       __u16 vid;
+       struct {
+               union {
+                       __be32  ip4;
+                       struct in6_addr ip6;
+               } u;
+               __be16          proto;
+       } addr;
+};
+
+enum {
+       MDBA_SET_ENTRY_UNSPEC,
+       MDBA_SET_ENTRY,
+       __MDBA_SET_ENTRY_MAX,
+};
+#define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
+
+#endif /* _LINUX_IF_BRIDGE_H */
diff --git a/lib/libdss-include/include/linux/if_cablemodem.h b/lib/libdss-include/include/linux/if_cablemodem.h
new file mode 100644 (file)
index 0000000..ee6b3c4
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _LINUX_CABLEMODEM_H_
+#define _LINUX_CABLEMODEM_H_
+/*
+ *             Author: Franco Venturi <fventuri@mediaone.net>
+ *             Copyright 1998 Franco Venturi
+ *
+ *             This program is free software; you can redistribute it
+ *             and/or  modify it under  the terms of  the GNU General
+ *             Public  License as  published  by  the  Free  Software
+ *             Foundation;  either  version 2 of the License, or  (at
+ *             your option) any later version.
+ */
+
+/* some useful defines for sb1000.c e cmconfig.c - fv */
+#define SIOCGCMSTATS           (SIOCDEVPRIVATE+0)      /* get cable modem stats */
+#define SIOCGCMFIRMWARE                (SIOCDEVPRIVATE+1)      /* get cm firmware version */
+#define SIOCGCMFREQUENCY       (SIOCDEVPRIVATE+2)      /* get cable modem frequency */
+#define SIOCSCMFREQUENCY       (SIOCDEVPRIVATE+3)      /* set cable modem frequency */
+#define SIOCGCMPIDS                    (SIOCDEVPRIVATE+4)      /* get cable modem PIDs */
+#define SIOCSCMPIDS                    (SIOCDEVPRIVATE+5)      /* set cable modem PIDs */
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_eql.h b/lib/libdss-include/include/linux/if_eql.h
new file mode 100644 (file)
index 0000000..3b489be
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Equalizer Load-balancer for serial network interfaces.
+ *
+ * (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
+ * NCM: Network and Communications Management, Inc.
+ *
+ *
+ *     This software may be used and distributed according to the terms
+ *     of the GNU General Public License, incorporated herein by reference.
+ * 
+ * The author may be reached as simon@ncm.com, or C/O
+ *    NCM
+ *    Attn: Simon Janes
+ *    6803 Whittier Ave
+ *    McLean VA 22101
+ *    Phone: 1-703-847-0040 ext 103
+ */
+
+#ifndef _LINUX_IF_EQL_H
+#define _LINUX_IF_EQL_H
+
+#define EQL_DEFAULT_SLAVE_PRIORITY 28800
+#define EQL_DEFAULT_MAX_SLAVES     4
+#define EQL_DEFAULT_MTU            576
+#define EQL_DEFAULT_RESCHED_IVAL   HZ
+
+#define EQL_ENSLAVE     (SIOCDEVPRIVATE)
+#define EQL_EMANCIPATE  (SIOCDEVPRIVATE + 1)
+
+#define EQL_GETSLAVECFG (SIOCDEVPRIVATE + 2)
+#define EQL_SETSLAVECFG (SIOCDEVPRIVATE + 3)
+
+#define EQL_GETMASTRCFG (SIOCDEVPRIVATE + 4)
+#define EQL_SETMASTRCFG (SIOCDEVPRIVATE + 5)
+
+
+typedef struct master_config {
+       char    master_name[16];
+       int     max_slaves;
+       int     min_slaves;
+} master_config_t;
+
+typedef struct slave_config {
+       char    slave_name[16];
+       long    priority;
+} slave_config_t;
+
+typedef struct slaving_request {
+       char    slave_name[16];
+       long    priority;
+} slaving_request_t;
+
+
+#endif /* _LINUX_IF_EQL_H */
diff --git a/lib/libdss-include/include/linux/if_ether.h b/lib/libdss-include/include/linux/if_ether.h
new file mode 100644 (file)
index 0000000..bf278d6
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the Ethernet IEEE 802.3 interface.
+ *
+ * Version:    @(#)if_ether.h  1.0.1a  02/08/94
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_ETHER_H
+#define _LINUX_IF_ETHER_H
+
+#include <linux/types.h>
+
+/*
+ *     IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
+ *     and FCS/CRC (frame check sequence).
+ */
+
+#define ETH_ALEN       6               /* Octets in one ethernet addr   */
+#define ETH_HLEN       14              /* Total octets in header.       */
+#define ETH_ZLEN       60              /* Min. octets in frame sans FCS */
+#define ETH_DATA_LEN   1500            /* Max. octets in payload        */
+#define ETH_FRAME_LEN  1514            /* Max. octets in frame sans FCS */
+#define ETH_FCS_LEN    4               /* Octets in the FCS             */
+
+/*
+ *     These are the defined Ethernet Protocol ID's.
+ */
+
+#define ETH_P_LOOP     0x0060          /* Ethernet Loopback packet     */
+#define ETH_P_PUP      0x0200          /* Xerox PUP packet             */
+#define ETH_P_PUPAT    0x0201          /* Xerox PUP Addr Trans packet  */
+#define ETH_P_TSN      0x22F0          /* TSN (IEEE 1722) packet       */
+#define ETH_P_IP       0x0800          /* Internet Protocol packet     */
+#define ETH_P_X25      0x0805          /* CCITT X.25                   */
+#define ETH_P_ARP      0x0806          /* Address Resolution packet    */
+#define        ETH_P_BPQ       0x08FF          /* G8BPQ AX.25 Ethernet Packet  [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_IEEEPUP  0x0a00          /* Xerox IEEE802.3 PUP packet */
+#define ETH_P_IEEEPUPAT        0x0a01          /* Xerox IEEE802.3 PUP Addr Trans packet */
+#define ETH_P_BATMAN   0x4305          /* B.A.T.M.A.N.-Advanced packet [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_DEC       0x6000          /* DEC Assigned proto           */
+#define ETH_P_DNA_DL    0x6001          /* DEC DNA Dump/Load            */
+#define ETH_P_DNA_RC    0x6002          /* DEC DNA Remote Console       */
+#define ETH_P_DNA_RT    0x6003          /* DEC DNA Routing              */
+#define ETH_P_LAT       0x6004          /* DEC LAT                      */
+#define ETH_P_DIAG      0x6005          /* DEC Diagnostics              */
+#define ETH_P_CUST      0x6006          /* DEC Customer use             */
+#define ETH_P_SCA       0x6007          /* DEC Systems Comms Arch       */
+#define ETH_P_TEB      0x6558          /* Trans Ether Bridging         */
+#define ETH_P_RARP      0x8035         /* Reverse Addr Res packet      */
+#define ETH_P_ATALK    0x809B          /* Appletalk DDP                */
+#define ETH_P_AARP     0x80F3          /* Appletalk AARP               */
+#define ETH_P_8021Q    0x8100          /* 802.1Q VLAN Extended Header  */
+#define ETH_P_IPX      0x8137          /* IPX over DIX                 */
+#define ETH_P_IPV6     0x86DD          /* IPv6 over bluebook           */
+#define ETH_P_PAUSE    0x8808          /* IEEE Pause frames. See 802.3 31B */
+#define ETH_P_SLOW     0x8809          /* Slow Protocol. See 802.3ad 43B */
+#define ETH_P_WCCP     0x883E          /* Web-cache coordination protocol
+                                        * defined in draft-wilson-wrec-wccp-v2-00.txt */
+#define ETH_P_MPLS_UC  0x8847          /* MPLS Unicast traffic         */
+#define ETH_P_MPLS_MC  0x8848          /* MPLS Multicast traffic       */
+#define ETH_P_ATMMPOA  0x884c          /* MultiProtocol Over ATM       */
+#define ETH_P_PPP_DISC 0x8863          /* PPPoE discovery messages     */
+#define ETH_P_PPP_SES  0x8864          /* PPPoE session messages       */
+#define ETH_P_LINK_CTL 0x886c          /* HPNA, wlan link local tunnel */
+#define ETH_P_ATMFATE  0x8884          /* Frame-based ATM Transport
+                                        * over Ethernet
+                                        */
+#define ETH_P_PAE      0x888E          /* Port Access Entity (IEEE 802.1X) */
+#define ETH_P_AOE      0x88A2          /* ATA over Ethernet            */
+#define ETH_P_8021AD   0x88A8          /* 802.1ad Service VLAN         */
+#define ETH_P_802_EX1  0x88B5          /* 802.1 Local Experimental 1.  */
+#define ETH_P_TIPC     0x88CA          /* TIPC                         */
+#define ETH_P_8021AH   0x88E7          /* 802.1ah Backbone Service Tag */
+#define ETH_P_MVRP     0x88F5          /* 802.1Q MVRP                  */
+#define ETH_P_1588     0x88F7          /* IEEE 1588 Timesync */
+#define ETH_P_PRP      0x88FB          /* IEC 62439-3 PRP/HSRv0        */
+#define ETH_P_FCOE     0x8906          /* Fibre Channel over Ethernet  */
+#define ETH_P_TDLS     0x890D          /* TDLS */
+#define ETH_P_FIP      0x8914          /* FCoE Initialization Protocol */
+#define ETH_P_80221    0x8917          /* IEEE 802.21 Media Independent Handover Protocol */
+#define ETH_P_LOOPBACK 0x9000          /* Ethernet loopback packet, per IEEE 802.3 */
+#define ETH_P_QINQ1    0x9100          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_QINQ2    0x9200          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_QINQ3    0x9300          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_EDSA     0xDADA          /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_AF_IUCV   0xFBFB         /* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
+
+#define ETH_P_802_3_MIN        0x0600          /* If the value in the ethernet type is less than this value
+                                        * then the frame is Ethernet II. Else it is 802.3 */
+
+/*
+ *     Non DIX types. Won't clash for 1500 types.
+ */
+
+#define ETH_P_802_3    0x0001          /* Dummy type for 802.3 frames  */
+#define ETH_P_AX25     0x0002          /* Dummy protocol id for AX.25  */
+#define ETH_P_ALL      0x0003          /* Every packet (be careful!!!) */
+#define ETH_P_802_2    0x0004          /* 802.2 frames                 */
+#define ETH_P_SNAP     0x0005          /* Internal only                */
+#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */
+#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/
+#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */
+#define ETH_P_LOCALTALK 0x0009         /* Localtalk pseudo type        */
+#define ETH_P_CAN      0x000C          /* CAN: Controller Area Network */
+#define ETH_P_CANFD    0x000D          /* CANFD: CAN flexible data rate*/
+#define ETH_P_PPPTALK  0x0010          /* Dummy type for Atalk over PPP*/
+#define ETH_P_TR_802_2 0x0011          /* 802.2 frames                 */
+#define ETH_P_MOBITEX  0x0015          /* Mobitex (kaz@cafe.net)       */
+#define ETH_P_CONTROL  0x0016          /* Card specific control frames */
+#define ETH_P_IRDA     0x0017          /* Linux-IrDA                   */
+#define ETH_P_ECONET   0x0018          /* Acorn Econet                 */
+#define ETH_P_HDLC     0x0019          /* HDLC frames                  */
+#define ETH_P_ARCNET   0x001A          /* 1A for ArcNet :-)            */
+#define ETH_P_DSA      0x001B          /* Distributed Switch Arch.     */
+#define ETH_P_TRAILER  0x001C          /* Trailer switch tagging       */
+#define ETH_P_PHONET   0x00F5          /* Nokia Phonet frames          */
+#define ETH_P_IEEE802154 0x00F6                /* IEEE802.15.4 frame           */
+#define ETH_P_CAIF     0x00F7          /* ST-Ericsson CAIF protocol    */
+#define ETH_P_XDSA     0x00F8          /* Multiplexed DSA protocol     */
+
+/*
+ *     This is an Ethernet frame header.
+ */
+
+struct ethhdr {
+       unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
+       unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
+       __be16          h_proto;                /* packet type ID field */
+} __attribute__((packed));
+
+
+#endif /* _LINUX_IF_ETHER_H */
diff --git a/lib/libdss-include/include/linux/if_fc.h b/lib/libdss-include/include/linux/if_fc.h
new file mode 100644 (file)
index 0000000..6ed7f1b
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for Fibre Channel.
+ *
+ * Version:    @(#)if_fc.h     0.0     11/20/98
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *    Peter De Schrijver, <stud11@cc4.kuleuven.ac.be>
+ *       Vineet Abraham, <vma@iol.unh.edu>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_FC_H
+#define _LINUX_IF_FC_H
+
+#include <linux/types.h>
+
+#define FC_ALEN        6               /* Octets in one ethernet addr   */
+#define FC_HLEN   (sizeof(struct fch_hdr)+sizeof(struct fcllc))
+#define FC_ID_LEN 3            /* Octets in a Fibre Channel Address */
+
+/* LLC and SNAP constants */
+#define EXTENDED_SAP 0xAA
+#define UI_CMD       0x03
+
+/* This is NOT the Fibre Channel frame header. The FC frame header is
+ *  constructed in the driver as the Tachyon needs certain fields in
+ *  certains positions. So, it can't be generalized here.*/
+
+struct fch_hdr {
+       __u8  daddr[FC_ALEN];           /* destination address */
+       __u8  saddr[FC_ALEN];           /* source address */
+};
+
+/* This is a Fibre Channel LLC structure */
+struct fcllc {
+       __u8  dsap;                     /* destination SAP */
+       __u8  ssap;                     /* source SAP */
+       __u8  llc;                      /* LLC control field */
+       __u8  protid[3];                /* protocol id */
+       __be16 ethertype;               /* ether type field */
+};
+
+#endif /* _LINUX_IF_FC_H */
diff --git a/lib/libdss-include/include/linux/if_fddi.h b/lib/libdss-include/include/linux/if_fddi.h
new file mode 100644 (file)
index 0000000..6ec21e7
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the ANSI FDDI interface.
+ *
+ * Version:    @(#)if_fddi.h   1.0.2   Sep 29 2004
+ *
+ * Author:     Lawrence V. Stefani, <stefani@lkg.dec.com>
+ *
+ *             if_fddi.h is based on previous if_ether.h and if_tr.h work by
+ *                     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *                     Donald Becker, <becker@super.org>
+ *                     Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *                     Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *                     Peter De Schrijver, <stud11@cc4.kuleuven.ac.be>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_FDDI_H
+#define _LINUX_IF_FDDI_H
+
+#include <linux/types.h>
+
+/*
+ *  Define max and min legal sizes.  The frame sizes do not include
+ *  4 byte FCS/CRC (frame check sequence).
+ */
+#define FDDI_K_ALEN            6       /* Octets in one FDDI address */
+#define FDDI_K_8022_HLEN       16      /* Total octets in 802.2 header */
+#define FDDI_K_SNAP_HLEN       21      /* Total octets in 802.2 SNAP header */
+#define FDDI_K_8022_ZLEN       16      /* Min octets in 802.2 frame sans
+                                          FCS */
+#define FDDI_K_SNAP_ZLEN       21      /* Min octets in 802.2 SNAP frame sans
+                                          FCS */
+#define FDDI_K_8022_DLEN       4475    /* Max octets in 802.2 payload */
+#define FDDI_K_SNAP_DLEN       4470    /* Max octets in 802.2 SNAP payload */
+#define FDDI_K_LLC_ZLEN                13      /* Min octets in LLC frame sans FCS */
+#define FDDI_K_LLC_LEN         4491    /* Max octets in LLC frame sans FCS */
+#define FDDI_K_OUI_LEN         3       /* Octets in OUI in 802.2 SNAP
+                                          header */
+
+/* Define FDDI Frame Control (FC) Byte values */
+#define FDDI_FC_K_VOID                 0x00
+#define FDDI_FC_K_NON_RESTRICTED_TOKEN 0x80
+#define FDDI_FC_K_RESTRICTED_TOKEN     0xC0
+#define FDDI_FC_K_SMT_MIN              0x41
+#define FDDI_FC_K_SMT_MAX              0x4F
+#define FDDI_FC_K_MAC_MIN              0xC1
+#define FDDI_FC_K_MAC_MAX              0xCF
+#define FDDI_FC_K_ASYNC_LLC_MIN                0x50
+#define FDDI_FC_K_ASYNC_LLC_DEF                0x54
+#define FDDI_FC_K_ASYNC_LLC_MAX                0x5F
+#define FDDI_FC_K_SYNC_LLC_MIN         0xD0
+#define FDDI_FC_K_SYNC_LLC_MAX         0xD7
+#define FDDI_FC_K_IMPLEMENTOR_MIN      0x60
+#define FDDI_FC_K_IMPLEMENTOR_MAX      0x6F
+#define FDDI_FC_K_RESERVED_MIN         0x70
+#define FDDI_FC_K_RESERVED_MAX         0x7F
+
+/* Define LLC and SNAP constants */
+#define FDDI_EXTENDED_SAP              0xAA
+#define FDDI_UI_CMD                    0x03
+
+/* Define 802.2 Type 1 header */
+struct fddi_8022_1_hdr {
+       __u8    dsap;                   /* destination service access point */
+       __u8    ssap;                   /* source service access point */
+       __u8    ctrl;                   /* control byte #1 */
+} __attribute__((packed));
+
+/* Define 802.2 Type 2 header */
+struct fddi_8022_2_hdr {
+       __u8    dsap;                   /* destination service access point */
+       __u8    ssap;                   /* source service access point */
+       __u8    ctrl_1;                 /* control byte #1 */
+       __u8    ctrl_2;                 /* control byte #2 */
+} __attribute__((packed));
+
+/* Define 802.2 SNAP header */
+struct fddi_snap_hdr {
+       __u8    dsap;                   /* always 0xAA */
+       __u8    ssap;                   /* always 0xAA */
+       __u8    ctrl;                   /* always 0x03 */
+       __u8    oui[FDDI_K_OUI_LEN];    /* organizational universal id */
+       __be16  ethertype;              /* packet type ID field */
+} __attribute__((packed));
+
+/* Define FDDI LLC frame header */
+struct fddihdr {
+       __u8    fc;                     /* frame control */
+       __u8    daddr[FDDI_K_ALEN];     /* destination address */
+       __u8    saddr[FDDI_K_ALEN];     /* source address */
+       union {
+               struct fddi_8022_1_hdr  llc_8022_1;
+               struct fddi_8022_2_hdr  llc_8022_2;
+               struct fddi_snap_hdr    llc_snap;
+       } hdr;
+} __attribute__((packed));
+
+
+#endif /* _LINUX_IF_FDDI_H */
diff --git a/lib/libdss-include/include/linux/if_frad.h b/lib/libdss-include/include/linux/if_frad.h
new file mode 100644 (file)
index 0000000..30361db
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * DLCI/FRAD   Definitions for Frame Relay Access Devices.  DLCI devices are
+ *             created for each DLCI associated with a FRAD.  The FRAD driver
+ *             is not truly a network device, but the lower level device
+ *             handler.  This allows other FRAD manufacturers to use the DLCI
+ *             code, including its RFC1490 encapsulation alongside the current
+ *             implementation for the Sangoma cards.
+ *
+ * Version:    @(#)if_ifrad.h  0.15    31 Mar 96
+ *
+ * Author:     Mike McLagan <mike.mclagan@linux.org>
+ *
+ * Changes:
+ *             0.15    Mike McLagan    changed structure defs (packed)
+ *                                     re-arranged flags
+ *                                     added DLCI_RET vars
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _FRAD_H_
+#define _FRAD_H_
+
+#include <linux/if.h>
+
+/* Structures and constants associated with the DLCI device driver */
+
+struct dlci_add
+{
+   char  devname[IFNAMSIZ];
+   short dlci;
+};
+
+#define DLCI_GET_CONF  (SIOCDEVPRIVATE + 2)
+#define DLCI_SET_CONF  (SIOCDEVPRIVATE + 3)
+
+/* 
+ * These are related to the Sangoma SDLA and should remain in order. 
+ * Code within the SDLA module is based on the specifics of this 
+ * structure.  Change at your own peril.
+ */
+struct dlci_conf {
+   short flags;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd; 
+
+/* these are part of the status read */
+   short Tc_fwd;
+   short Tc_bwd;
+   short Tf_max;
+   short Tb_max;
+
+/* add any new fields here above is a mirror of sdla_dlci_conf */
+};
+
+#define DLCI_GET_SLAVE (SIOCDEVPRIVATE + 4)
+
+/* configuration flags for DLCI */
+#define DLCI_IGNORE_CIR_OUT    0x0001
+#define DLCI_ACCOUNT_CIR_IN    0x0002
+#define DLCI_BUFFER_IF         0x0008
+
+#define DLCI_VALID_FLAGS       0x000B
+
+/* defines for the actual Frame Relay hardware */
+#define FRAD_GET_CONF  (SIOCDEVPRIVATE)
+#define FRAD_SET_CONF  (SIOCDEVPRIVATE + 1)
+
+#define FRAD_LAST_IOCTL        FRAD_SET_CONF
+
+/*
+ * Based on the setup for the Sangoma SDLA.  If changes are 
+ * necessary to this structure, a routine will need to be 
+ * added to that module to copy fields.
+ */
+struct frad_conf 
+{
+   short station;
+   short flags;
+   short kbaud;
+   short clocking;
+   short mtu;
+   short T391;
+   short T392;
+   short N391;
+   short N392;
+   short N393;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd;
+
+/* Add new fields here, above is a mirror of the sdla_conf */
+
+};
+
+#define FRAD_STATION_CPE       0x0000
+#define FRAD_STATION_NODE      0x0001
+
+#define FRAD_TX_IGNORE_CIR     0x0001
+#define FRAD_RX_ACCOUNT_CIR    0x0002
+#define FRAD_DROP_ABORTED      0x0004
+#define FRAD_BUFFERIF          0x0008
+#define FRAD_STATS             0x0010
+#define FRAD_MCI               0x0100
+#define FRAD_AUTODLCI          0x8000
+#define FRAD_VALID_FLAGS       0x811F
+
+#define FRAD_CLOCK_INT         0x0001
+#define FRAD_CLOCK_EXT         0x0000
+
+
+#endif /* _FRAD_H_ */
diff --git a/lib/libdss-include/include/linux/if_hippi.h b/lib/libdss-include/include/linux/if_hippi.h
new file mode 100644 (file)
index 0000000..cdc049f
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the HIPPI interface.
+ *
+ * Version:    @(#)if_hippi.h  1.0.0   05/26/97
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *             Jes Sorensen, <Jes.Sorensen@cern.ch>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_HIPPI_H
+#define _LINUX_IF_HIPPI_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ *     HIPPI magic constants.
+ */
+
+#define HIPPI_ALEN     6               /* Bytes in one HIPPI hw-addr      */
+#define HIPPI_HLEN     sizeof(struct hippi_hdr)
+#define HIPPI_ZLEN     0               /* Min. bytes in frame without FCS */
+#define HIPPI_DATA_LEN 65280           /* Max. bytes in payload           */
+#define HIPPI_FRAME_LEN        (HIPPI_DATA_LEN + HIPPI_HLEN)
+                                       /* Max. bytes in frame without FCS */
+
+/*
+ * Define LLC and SNAP constants.
+ */
+#define HIPPI_EXTENDED_SAP     0xAA
+#define HIPPI_UI_CMD           0x03
+
+
+/*
+ *     Do we need to list some sort of ID's here?
+ */
+
+/*
+ *     HIPPI statistics collection data. 
+ */
+struct hipnet_statistics {
+       int     rx_packets;             /* total packets received       */
+       int     tx_packets;             /* total packets transmitted    */
+       int     rx_errors;              /* bad packets received         */
+       int     tx_errors;              /* packet transmit problems     */
+       int     rx_dropped;             /* no space in linux buffers    */
+       int     tx_dropped;             /* no space available in linux  */
+
+       /* detailed rx_errors: */
+       int     rx_length_errors;
+       int     rx_over_errors;         /* receiver ring buff overflow  */
+       int     rx_crc_errors;          /* recved pkt with crc error    */
+       int     rx_frame_errors;        /* recv'd frame alignment error */
+       int     rx_fifo_errors;         /* recv'r fifo overrun          */
+       int     rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       int     tx_aborted_errors;
+       int     tx_carrier_errors;
+       int     tx_fifo_errors;
+       int     tx_heartbeat_errors;
+       int     tx_window_errors;
+};
+
+
+struct hippi_fp_hdr {
+#if 0
+       __u8            ulp;                            /* must contain 4 */
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            d1_data_present:1;              /* must be 1 */
+       __u8            start_d2_burst_boundary:1;      /* must be zero */
+       __u8            reserved:6;                     /* must be zero */
+#if 0
+       __u16           reserved1:5;
+       __u16           d1_area_size:8;                 /* must be 3 */
+       __u16           d2_offset:3;                    /* must be zero */
+#endif
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            reserved:6;                     /* must be zero */
+       __u8            start_d2_burst_boundary:1;      /* must be zero */
+       __u8            d1_data_present:1;              /* must be 1 */
+#if 0
+       __u16           d2_offset:3;                    /* must be zero */
+       __u16           d1_area_size:8;                 /* must be 3 */
+       __u16           reserved1:5;                    /* must be zero */
+#endif
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+#else
+       __be32          fixed;
+#endif
+       __be32          d2_size;
+} __attribute__((packed));
+
+struct hippi_le_hdr {
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            fc:3;
+       __u8            double_wide:1;
+       __u8            message_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            message_type:4;
+       __u8            double_wide:1;
+       __u8            fc:3;
+#endif
+       __u8            dest_switch_addr[3];
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            dest_addr_type:4,
+                       src_addr_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            src_addr_type:4,
+                       dest_addr_type:4;
+#endif
+       __u8            src_switch_addr[3];
+       __u16           reserved;
+       __u8            daddr[HIPPI_ALEN];
+       __u16           locally_administered;
+       __u8            saddr[HIPPI_ALEN];
+} __attribute__((packed));
+
+#define HIPPI_OUI_LEN  3
+/*
+ * Looks like the dsap and ssap fields have been swapped by mistake in
+ * RFC 2067 "IP over HIPPI".
+ */
+struct hippi_snap_hdr {
+       __u8    dsap;                   /* always 0xAA */
+       __u8    ssap;                   /* always 0xAA */
+       __u8    ctrl;                   /* always 0x03 */
+       __u8    oui[HIPPI_OUI_LEN];     /* organizational universal id (zero)*/
+       __be16  ethertype;              /* packet type ID field */
+} __attribute__((packed));
+
+struct hippi_hdr {
+       struct hippi_fp_hdr     fp;
+       struct hippi_le_hdr     le;
+       struct hippi_snap_hdr   snap;
+} __attribute__((packed));
+
+#endif /* _LINUX_IF_HIPPI_H */
diff --git a/lib/libdss-include/include/linux/if_infiniband.h b/lib/libdss-include/include/linux/if_infiniband.h
new file mode 100644 (file)
index 0000000..7d95847
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available at
+ * <http://www.fsf.org/copyleft/gpl.html>, or the OpenIB.org BSD
+ * license, available in the LICENSE.TXT file accompanying this
+ * software.  These details are also available at
+ * <http://www.openfabrics.org/software_license.htm>.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ *
+ * $Id$
+ */
+
+#ifndef _LINUX_IF_INFINIBAND_H
+#define _LINUX_IF_INFINIBAND_H
+
+#define INFINIBAND_ALEN                20      /* Octets in IPoIB HW addr      */
+
+#endif /* _LINUX_IF_INFINIBAND_H */
diff --git a/lib/libdss-include/include/linux/if_link.h b/lib/libdss-include/include/linux/if_link.h
new file mode 100644 (file)
index 0000000..f6284ee
--- /dev/null
@@ -0,0 +1,728 @@
+#ifndef _LINUX_IF_LINK_H
+#define _LINUX_IF_LINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+/* This struct should be in sync with struct rtnl_link_stats64 */
+struct rtnl_link_stats {
+       __u32   rx_packets;             /* total packets received       */
+       __u32   tx_packets;             /* total packets transmitted    */
+       __u32   rx_bytes;               /* total bytes received         */
+       __u32   tx_bytes;               /* total bytes transmitted      */
+       __u32   rx_errors;              /* bad packets received         */
+       __u32   tx_errors;              /* packet transmit problems     */
+       __u32   rx_dropped;             /* no space in linux buffers    */
+       __u32   tx_dropped;             /* no space available in linux  */
+       __u32   multicast;              /* multicast packets received   */
+       __u32   collisions;
+
+       /* detailed rx_errors: */
+       __u32   rx_length_errors;
+       __u32   rx_over_errors;         /* receiver ring buff overflow  */
+       __u32   rx_crc_errors;          /* recved pkt with crc error    */
+       __u32   rx_frame_errors;        /* recv'd frame alignment error */
+       __u32   rx_fifo_errors;         /* recv'r fifo overrun          */
+       __u32   rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       __u32   tx_aborted_errors;
+       __u32   tx_carrier_errors;
+       __u32   tx_fifo_errors;
+       __u32   tx_heartbeat_errors;
+       __u32   tx_window_errors;
+
+       /* for cslip etc */
+       __u32   rx_compressed;
+       __u32   tx_compressed;
+};
+
+/* The main device statistics structure */
+struct rtnl_link_stats64 {
+       __u64   rx_packets;             /* total packets received       */
+       __u64   tx_packets;             /* total packets transmitted    */
+       __u64   rx_bytes;               /* total bytes received         */
+       __u64   tx_bytes;               /* total bytes transmitted      */
+       __u64   rx_errors;              /* bad packets received         */
+       __u64   tx_errors;              /* packet transmit problems     */
+       __u64   rx_dropped;             /* no space in linux buffers    */
+       __u64   tx_dropped;             /* no space available in linux  */
+       __u64   multicast;              /* multicast packets received   */
+       __u64   collisions;
+
+       /* detailed rx_errors: */
+       __u64   rx_length_errors;
+       __u64   rx_over_errors;         /* receiver ring buff overflow  */
+       __u64   rx_crc_errors;          /* recved pkt with crc error    */
+       __u64   rx_frame_errors;        /* recv'd frame alignment error */
+       __u64   rx_fifo_errors;         /* recv'r fifo overrun          */
+       __u64   rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       __u64   tx_aborted_errors;
+       __u64   tx_carrier_errors;
+       __u64   tx_fifo_errors;
+       __u64   tx_heartbeat_errors;
+       __u64   tx_window_errors;
+
+       /* for cslip etc */
+       __u64   rx_compressed;
+       __u64   tx_compressed;
+};
+
+/* The struct should be in sync with struct ifmap */
+struct rtnl_link_ifmap {
+       __u64   mem_start;
+       __u64   mem_end;
+       __u64   base_addr;
+       __u16   irq;
+       __u8    dma;
+       __u8    port;
+};
+
+/*
+ * IFLA_AF_SPEC
+ *   Contains nested attributes for address family specific attributes.
+ *   Each address family may create a attribute with the address family
+ *   number as type and create its own attribute structure in it.
+ *
+ *   Example:
+ *   [IFLA_AF_SPEC] = {
+ *       [AF_INET] = {
+ *           [IFLA_INET_CONF] = ...,
+ *       },
+ *       [AF_INET6] = {
+ *           [IFLA_INET6_FLAGS] = ...,
+ *           [IFLA_INET6_CONF] = ...,
+ *       }
+ *   }
+ */
+
+enum {
+       IFLA_UNSPEC,
+       IFLA_ADDRESS,
+       IFLA_BROADCAST,
+       IFLA_IFNAME,
+       IFLA_MTU,
+       IFLA_LINK,
+       IFLA_QDISC,
+       IFLA_STATS,
+       IFLA_COST,
+#define IFLA_COST IFLA_COST
+       IFLA_PRIORITY,
+#define IFLA_PRIORITY IFLA_PRIORITY
+       IFLA_MASTER,
+#define IFLA_MASTER IFLA_MASTER
+       IFLA_WIRELESS,          /* Wireless Extension event - see wireless.h */
+#define IFLA_WIRELESS IFLA_WIRELESS
+       IFLA_PROTINFO,          /* Protocol specific information for a link */
+#define IFLA_PROTINFO IFLA_PROTINFO
+       IFLA_TXQLEN,
+#define IFLA_TXQLEN IFLA_TXQLEN
+       IFLA_MAP,
+#define IFLA_MAP IFLA_MAP
+       IFLA_WEIGHT,
+#define IFLA_WEIGHT IFLA_WEIGHT
+       IFLA_OPERSTATE,
+       IFLA_LINKMODE,
+       IFLA_LINKINFO,
+#define IFLA_LINKINFO IFLA_LINKINFO
+       IFLA_NET_NS_PID,
+       IFLA_IFALIAS,
+       IFLA_NUM_VF,            /* Number of VFs if device is SR-IOV PF */
+       IFLA_VFINFO_LIST,
+       IFLA_STATS64,
+       IFLA_VF_PORTS,
+       IFLA_PORT_SELF,
+       IFLA_AF_SPEC,
+       IFLA_GROUP,             /* Group the device belongs to */
+       IFLA_NET_NS_FD,
+       IFLA_EXT_MASK,          /* Extended info mask, VFs, etc */
+       IFLA_PROMISCUITY,       /* Promiscuity count: > 0 means acts PROMISC */
+#define IFLA_PROMISCUITY IFLA_PROMISCUITY
+       IFLA_NUM_TX_QUEUES,
+       IFLA_NUM_RX_QUEUES,
+       IFLA_CARRIER,
+       IFLA_PHYS_PORT_ID,
+       IFLA_CARRIER_CHANGES,
+       IFLA_PHYS_SWITCH_ID,
+       IFLA_LINK_NETNSID,
+       IFLA_PHYS_PORT_NAME,
+       IFLA_PROTO_DOWN,
+       __IFLA_MAX
+};
+
+
+#define IFLA_MAX (__IFLA_MAX - 1)
+
+/* backwards compatibility for userspace */
+#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
+#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
+
+enum {
+       IFLA_INET_UNSPEC,
+       IFLA_INET_CONF,
+       __IFLA_INET_MAX,
+};
+
+#define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
+
+/* ifi_flags.
+
+   IFF_* flags.
+
+   The only change is:
+   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
+   more not changeable by user. They describe link media
+   characteristics and set by device driver.
+
+   Comments:
+   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
+   - If neither of these three flags are set;
+     the interface is NBMA.
+
+   - IFF_MULTICAST does not mean anything special:
+   multicasts can be used on all not-NBMA links.
+   IFF_MULTICAST means that this media uses special encapsulation
+   for multicast frames. Apparently, all IFF_POINTOPOINT and
+   IFF_BROADCAST devices are able to use multicasts too.
+ */
+
+/* IFLA_LINK.
+   For usual devices it is equal ifi_index.
+   If it is a "virtual interface" (f.e. tunnel), ifi_link
+   can point to real physical interface (f.e. for bandwidth calculations),
+   or maybe 0, what means, that real media is unknown (usual
+   for IPIP tunnels, when route to endpoint is allowed to change)
+ */
+
+/* Subtype attributes for IFLA_PROTINFO */
+enum {
+       IFLA_INET6_UNSPEC,
+       IFLA_INET6_FLAGS,       /* link flags                   */
+       IFLA_INET6_CONF,        /* sysctl parameters            */
+       IFLA_INET6_STATS,       /* statistics                   */
+       IFLA_INET6_MCAST,       /* MC things. What of them?     */
+       IFLA_INET6_CACHEINFO,   /* time values and max reasm size */
+       IFLA_INET6_ICMP6STATS,  /* statistics (icmpv6)          */
+       IFLA_INET6_TOKEN,       /* device token                 */
+       IFLA_INET6_ADDR_GEN_MODE, /* implicit address generator mode */
+       __IFLA_INET6_MAX
+};
+
+#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
+
+enum in6_addr_gen_mode {
+       IN6_ADDR_GEN_MODE_EUI64,
+       IN6_ADDR_GEN_MODE_NONE,
+       IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
+};
+
+/* Bridge section */
+
+enum {
+       IFLA_BR_UNSPEC,
+       IFLA_BR_FORWARD_DELAY,
+       IFLA_BR_HELLO_TIME,
+       IFLA_BR_MAX_AGE,
+       IFLA_BR_AGEING_TIME,
+       IFLA_BR_STP_STATE,
+       IFLA_BR_PRIORITY,
+       IFLA_BR_VLAN_FILTERING,
+       IFLA_BR_VLAN_PROTOCOL,
+       IFLA_BR_GROUP_FWD_MASK,
+       IFLA_BR_ROOT_ID,
+       IFLA_BR_BRIDGE_ID,
+       IFLA_BR_ROOT_PORT,
+       IFLA_BR_ROOT_PATH_COST,
+       IFLA_BR_TOPOLOGY_CHANGE,
+       IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
+       IFLA_BR_HELLO_TIMER,
+       IFLA_BR_TCN_TIMER,
+       IFLA_BR_TOPOLOGY_CHANGE_TIMER,
+       IFLA_BR_GC_TIMER,
+       IFLA_BR_GROUP_ADDR,
+       IFLA_BR_FDB_FLUSH,
+       IFLA_BR_MCAST_ROUTER,
+       IFLA_BR_MCAST_SNOOPING,
+       IFLA_BR_MCAST_QUERY_USE_IFADDR,
+       IFLA_BR_MCAST_QUERIER,
+       IFLA_BR_MCAST_HASH_ELASTICITY,
+       IFLA_BR_MCAST_HASH_MAX,
+       IFLA_BR_MCAST_LAST_MEMBER_CNT,
+       IFLA_BR_MCAST_STARTUP_QUERY_CNT,
+       IFLA_BR_MCAST_LAST_MEMBER_INTVL,
+       IFLA_BR_MCAST_MEMBERSHIP_INTVL,
+       IFLA_BR_MCAST_QUERIER_INTVL,
+       IFLA_BR_MCAST_QUERY_INTVL,
+       IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
+       IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
+       IFLA_BR_NF_CALL_IPTABLES,
+       IFLA_BR_NF_CALL_IP6TABLES,
+       IFLA_BR_NF_CALL_ARPTABLES,
+       IFLA_BR_VLAN_DEFAULT_PVID,
+       __IFLA_BR_MAX,
+};
+
+#define IFLA_BR_MAX    (__IFLA_BR_MAX - 1)
+
+struct ifla_bridge_id {
+       __u8    prio[2];
+       __u8    addr[6]; /* ETH_ALEN */
+};
+
+enum {
+       BRIDGE_MODE_UNSPEC,
+       BRIDGE_MODE_HAIRPIN,
+};
+
+enum {
+       IFLA_BRPORT_UNSPEC,
+       IFLA_BRPORT_STATE,      /* Spanning tree state     */
+       IFLA_BRPORT_PRIORITY,   /* "             priority  */
+       IFLA_BRPORT_COST,       /* "             cost      */
+       IFLA_BRPORT_MODE,       /* mode (hairpin)          */
+       IFLA_BRPORT_GUARD,      /* bpdu guard              */
+       IFLA_BRPORT_PROTECT,    /* root port protection    */
+       IFLA_BRPORT_FAST_LEAVE, /* multicast fast leave    */
+       IFLA_BRPORT_LEARNING,   /* mac learning */
+       IFLA_BRPORT_UNICAST_FLOOD, /* flood unicast traffic */
+       IFLA_BRPORT_PROXYARP,   /* proxy ARP */
+       IFLA_BRPORT_LEARNING_SYNC, /* mac learning sync from device */
+       IFLA_BRPORT_PROXYARP_WIFI, /* proxy ARP for Wi-Fi */
+       IFLA_BRPORT_ROOT_ID,    /* designated root */
+       IFLA_BRPORT_BRIDGE_ID,  /* designated bridge */
+       IFLA_BRPORT_DESIGNATED_PORT,
+       IFLA_BRPORT_DESIGNATED_COST,
+       IFLA_BRPORT_ID,
+       IFLA_BRPORT_NO,
+       IFLA_BRPORT_TOPOLOGY_CHANGE_ACK,
+       IFLA_BRPORT_CONFIG_PENDING,
+       IFLA_BRPORT_MESSAGE_AGE_TIMER,
+       IFLA_BRPORT_FORWARD_DELAY_TIMER,
+       IFLA_BRPORT_HOLD_TIMER,
+       IFLA_BRPORT_FLUSH,
+       IFLA_BRPORT_MULTICAST_ROUTER,
+       __IFLA_BRPORT_MAX
+};
+#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
+
+struct ifla_cacheinfo {
+       __u32   max_reasm_len;
+       __u32   tstamp;         /* ipv6InterfaceTable updated timestamp */
+       __u32   reachable_time;
+       __u32   retrans_time;
+};
+
+enum {
+       IFLA_INFO_UNSPEC,
+       IFLA_INFO_KIND,
+       IFLA_INFO_DATA,
+       IFLA_INFO_XSTATS,
+       IFLA_INFO_SLAVE_KIND,
+       IFLA_INFO_SLAVE_DATA,
+       __IFLA_INFO_MAX,
+};
+
+#define IFLA_INFO_MAX  (__IFLA_INFO_MAX - 1)
+
+/* VLAN section */
+
+enum {
+       IFLA_VLAN_UNSPEC,
+       IFLA_VLAN_ID,
+       IFLA_VLAN_FLAGS,
+       IFLA_VLAN_EGRESS_QOS,
+       IFLA_VLAN_INGRESS_QOS,
+       IFLA_VLAN_PROTOCOL,
+       __IFLA_VLAN_MAX,
+};
+
+#define IFLA_VLAN_MAX  (__IFLA_VLAN_MAX - 1)
+
+struct ifla_vlan_flags {
+       __u32   flags;
+       __u32   mask;
+};
+
+enum {
+       IFLA_VLAN_QOS_UNSPEC,
+       IFLA_VLAN_QOS_MAPPING,
+       __IFLA_VLAN_QOS_MAX
+};
+
+#define IFLA_VLAN_QOS_MAX      (__IFLA_VLAN_QOS_MAX - 1)
+
+struct ifla_vlan_qos_mapping {
+       __u32 from;
+       __u32 to;
+};
+
+/* MACVLAN section */
+enum {
+       IFLA_MACVLAN_UNSPEC,
+       IFLA_MACVLAN_MODE,
+       IFLA_MACVLAN_FLAGS,
+       IFLA_MACVLAN_MACADDR_MODE,
+       IFLA_MACVLAN_MACADDR,
+       IFLA_MACVLAN_MACADDR_DATA,
+       IFLA_MACVLAN_MACADDR_COUNT,
+       __IFLA_MACVLAN_MAX,
+};
+
+#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
+
+enum macvlan_mode {
+       MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
+       MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
+       MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
+       MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
+       MACVLAN_MODE_SOURCE  = 16,/* use source MAC address list to assign */
+};
+
+enum macvlan_macaddr_mode {
+       MACVLAN_MACADDR_ADD,
+       MACVLAN_MACADDR_DEL,
+       MACVLAN_MACADDR_FLUSH,
+       MACVLAN_MACADDR_SET,
+};
+
+#define MACVLAN_FLAG_NOPROMISC 1
+
+/* VRF section */
+enum {
+       IFLA_VRF_UNSPEC,
+       IFLA_VRF_TABLE,
+       __IFLA_VRF_MAX
+};
+
+#define IFLA_VRF_MAX (__IFLA_VRF_MAX - 1)
+
+/* IPVLAN section */
+enum {
+       IFLA_IPVLAN_UNSPEC,
+       IFLA_IPVLAN_MODE,
+       __IFLA_IPVLAN_MAX
+};
+
+#define IFLA_IPVLAN_MAX (__IFLA_IPVLAN_MAX - 1)
+
+enum ipvlan_mode {
+       IPVLAN_MODE_L2 = 0,
+       IPVLAN_MODE_L3,
+       IPVLAN_MODE_MAX
+};
+
+/* VXLAN section */
+enum {
+       IFLA_VXLAN_UNSPEC,
+       IFLA_VXLAN_ID,
+       IFLA_VXLAN_GROUP,       /* group or remote address */
+       IFLA_VXLAN_LINK,
+       IFLA_VXLAN_LOCAL,
+       IFLA_VXLAN_TTL,
+       IFLA_VXLAN_TOS,
+       IFLA_VXLAN_LEARNING,
+       IFLA_VXLAN_AGEING,
+       IFLA_VXLAN_LIMIT,
+       IFLA_VXLAN_PORT_RANGE,  /* source port */
+       IFLA_VXLAN_PROXY,
+       IFLA_VXLAN_RSC,
+       IFLA_VXLAN_L2MISS,
+       IFLA_VXLAN_L3MISS,
+       IFLA_VXLAN_PORT,        /* destination port */
+       IFLA_VXLAN_GROUP6,
+       IFLA_VXLAN_LOCAL6,
+       IFLA_VXLAN_UDP_CSUM,
+       IFLA_VXLAN_UDP_ZERO_CSUM6_TX,
+       IFLA_VXLAN_UDP_ZERO_CSUM6_RX,
+       IFLA_VXLAN_REMCSUM_TX,
+       IFLA_VXLAN_REMCSUM_RX,
+       IFLA_VXLAN_GBP,
+       IFLA_VXLAN_REMCSUM_NOPARTIAL,
+       IFLA_VXLAN_COLLECT_METADATA,
+       IFLA_VXLAN_FAN_MAP = 33,
+       __IFLA_VXLAN_MAX
+};
+#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
+
+struct ifla_vxlan_port_range {
+       __be16  low;
+       __be16  high;
+};
+
+/* GENEVE section */
+enum {
+       IFLA_GENEVE_UNSPEC,
+       IFLA_GENEVE_ID,
+       IFLA_GENEVE_REMOTE,
+       IFLA_GENEVE_TTL,
+       IFLA_GENEVE_TOS,
+       IFLA_GENEVE_PORT,       /* destination port */
+       IFLA_GENEVE_COLLECT_METADATA,
+       IFLA_GENEVE_REMOTE6,
+       IFLA_GENEVE_UDP_CSUM,
+       IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
+       IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
+       __IFLA_GENEVE_MAX
+};
+#define IFLA_GENEVE_MAX        (__IFLA_GENEVE_MAX - 1)
+
+/* Bonding section */
+
+enum {
+       IFLA_BOND_UNSPEC,
+       IFLA_BOND_MODE,
+       IFLA_BOND_ACTIVE_SLAVE,
+       IFLA_BOND_MIIMON,
+       IFLA_BOND_UPDELAY,
+       IFLA_BOND_DOWNDELAY,
+       IFLA_BOND_USE_CARRIER,
+       IFLA_BOND_ARP_INTERVAL,
+       IFLA_BOND_ARP_IP_TARGET,
+       IFLA_BOND_ARP_VALIDATE,
+       IFLA_BOND_ARP_ALL_TARGETS,
+       IFLA_BOND_PRIMARY,
+       IFLA_BOND_PRIMARY_RESELECT,
+       IFLA_BOND_FAIL_OVER_MAC,
+       IFLA_BOND_XMIT_HASH_POLICY,
+       IFLA_BOND_RESEND_IGMP,
+       IFLA_BOND_NUM_PEER_NOTIF,
+       IFLA_BOND_ALL_SLAVES_ACTIVE,
+       IFLA_BOND_MIN_LINKS,
+       IFLA_BOND_LP_INTERVAL,
+       IFLA_BOND_PACKETS_PER_SLAVE,
+       IFLA_BOND_AD_LACP_RATE,
+       IFLA_BOND_AD_SELECT,
+       IFLA_BOND_AD_INFO,
+       IFLA_BOND_AD_ACTOR_SYS_PRIO,
+       IFLA_BOND_AD_USER_PORT_KEY,
+       IFLA_BOND_AD_ACTOR_SYSTEM,
+       IFLA_BOND_TLB_DYNAMIC_LB,
+       __IFLA_BOND_MAX,
+};
+
+#define IFLA_BOND_MAX  (__IFLA_BOND_MAX - 1)
+
+enum {
+       IFLA_BOND_AD_INFO_UNSPEC,
+       IFLA_BOND_AD_INFO_AGGREGATOR,
+       IFLA_BOND_AD_INFO_NUM_PORTS,
+       IFLA_BOND_AD_INFO_ACTOR_KEY,
+       IFLA_BOND_AD_INFO_PARTNER_KEY,
+       IFLA_BOND_AD_INFO_PARTNER_MAC,
+       __IFLA_BOND_AD_INFO_MAX,
+};
+
+#define IFLA_BOND_AD_INFO_MAX  (__IFLA_BOND_AD_INFO_MAX - 1)
+
+enum {
+       IFLA_BOND_SLAVE_UNSPEC,
+       IFLA_BOND_SLAVE_STATE,
+       IFLA_BOND_SLAVE_MII_STATUS,
+       IFLA_BOND_SLAVE_LINK_FAILURE_COUNT,
+       IFLA_BOND_SLAVE_PERM_HWADDR,
+       IFLA_BOND_SLAVE_QUEUE_ID,
+       IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
+       IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE,
+       IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE,
+       __IFLA_BOND_SLAVE_MAX,
+};
+
+#define IFLA_BOND_SLAVE_MAX    (__IFLA_BOND_SLAVE_MAX - 1)
+
+/* SR-IOV virtual function management section */
+
+enum {
+       IFLA_VF_INFO_UNSPEC,
+       IFLA_VF_INFO,
+       __IFLA_VF_INFO_MAX,
+};
+
+#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
+
+enum {
+       IFLA_VF_UNSPEC,
+       IFLA_VF_MAC,            /* Hardware queue specific attributes */
+       IFLA_VF_VLAN,
+       IFLA_VF_TX_RATE,        /* Max TX Bandwidth Allocation */
+       IFLA_VF_SPOOFCHK,       /* Spoof Checking on/off switch */
+       IFLA_VF_LINK_STATE,     /* link state enable/disable/auto switch */
+       IFLA_VF_RATE,           /* Min and Max TX Bandwidth Allocation */
+       IFLA_VF_RSS_QUERY_EN,   /* RSS Redirection Table and Hash Key query
+                                * on/off switch
+                                */
+       IFLA_VF_STATS,          /* network device statistics */
+       IFLA_VF_TRUST,          /* Trust VF */
+       __IFLA_VF_MAX,
+};
+
+#define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
+
+struct ifla_vf_mac {
+       __u32 vf;
+       __u8 mac[32]; /* MAX_ADDR_LEN */
+};
+
+struct ifla_vf_vlan {
+       __u32 vf;
+       __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
+       __u32 qos;
+};
+
+struct ifla_vf_tx_rate {
+       __u32 vf;
+       __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
+};
+
+struct ifla_vf_rate {
+       __u32 vf;
+       __u32 min_tx_rate; /* Min Bandwidth in Mbps */
+       __u32 max_tx_rate; /* Max Bandwidth in Mbps */
+};
+
+struct ifla_vf_spoofchk {
+       __u32 vf;
+       __u32 setting;
+};
+
+enum {
+       IFLA_VF_LINK_STATE_AUTO,        /* link state of the uplink */
+       IFLA_VF_LINK_STATE_ENABLE,      /* link always up */
+       IFLA_VF_LINK_STATE_DISABLE,     /* link always down */
+       __IFLA_VF_LINK_STATE_MAX,
+};
+
+struct ifla_vf_link_state {
+       __u32 vf;
+       __u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+       __u32 vf;
+       __u32 setting;
+};
+
+enum {
+       IFLA_VF_STATS_RX_PACKETS,
+       IFLA_VF_STATS_TX_PACKETS,
+       IFLA_VF_STATS_RX_BYTES,
+       IFLA_VF_STATS_TX_BYTES,
+       IFLA_VF_STATS_BROADCAST,
+       IFLA_VF_STATS_MULTICAST,
+       __IFLA_VF_STATS_MAX,
+};
+
+#define IFLA_VF_STATS_MAX (__IFLA_VF_STATS_MAX - 1)
+
+struct ifla_vf_trust {
+       __u32 vf;
+       __u32 setting;
+};
+
+/* VF ports management section
+ *
+ *     Nested layout of set/get msg is:
+ *
+ *             [IFLA_NUM_VF]
+ *             [IFLA_VF_PORTS]
+ *                     [IFLA_VF_PORT]
+ *                             [IFLA_PORT_*], ...
+ *                     [IFLA_VF_PORT]
+ *                             [IFLA_PORT_*], ...
+ *                     ...
+ *             [IFLA_PORT_SELF]
+ *                     [IFLA_PORT_*], ...
+ */
+
+enum {
+       IFLA_VF_PORT_UNSPEC,
+       IFLA_VF_PORT,                   /* nest */
+       __IFLA_VF_PORT_MAX,
+};
+
+#define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
+
+enum {
+       IFLA_PORT_UNSPEC,
+       IFLA_PORT_VF,                   /* __u32 */
+       IFLA_PORT_PROFILE,              /* string */
+       IFLA_PORT_VSI_TYPE,             /* 802.1Qbg (pre-)standard VDP */
+       IFLA_PORT_INSTANCE_UUID,        /* binary UUID */
+       IFLA_PORT_HOST_UUID,            /* binary UUID */
+       IFLA_PORT_REQUEST,              /* __u8 */
+       IFLA_PORT_RESPONSE,             /* __u16, output only */
+       __IFLA_PORT_MAX,
+};
+
+#define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
+
+#define PORT_PROFILE_MAX       40
+#define PORT_UUID_MAX          16
+#define PORT_SELF_VF           -1
+
+enum {
+       PORT_REQUEST_PREASSOCIATE = 0,
+       PORT_REQUEST_PREASSOCIATE_RR,
+       PORT_REQUEST_ASSOCIATE,
+       PORT_REQUEST_DISASSOCIATE,
+};
+
+enum {
+       PORT_VDP_RESPONSE_SUCCESS = 0,
+       PORT_VDP_RESPONSE_INVALID_FORMAT,
+       PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
+       PORT_VDP_RESPONSE_UNUSED_VTID,
+       PORT_VDP_RESPONSE_VTID_VIOLATION,
+       PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
+       PORT_VDP_RESPONSE_OUT_OF_SYNC,
+       /* 0x08-0xFF reserved for future VDP use */
+       PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
+       PORT_PROFILE_RESPONSE_INPROGRESS,
+       PORT_PROFILE_RESPONSE_INVALID,
+       PORT_PROFILE_RESPONSE_BADSTATE,
+       PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
+       PORT_PROFILE_RESPONSE_ERROR,
+};
+
+struct ifla_port_vsi {
+       __u8 vsi_mgr_id;
+       __u8 vsi_type_id[3];
+       __u8 vsi_type_version;
+       __u8 pad[3];
+};
+
+
+/* IPoIB section */
+
+enum {
+       IFLA_IPOIB_UNSPEC,
+       IFLA_IPOIB_PKEY,
+       IFLA_IPOIB_MODE,
+       IFLA_IPOIB_UMCAST,
+       __IFLA_IPOIB_MAX
+};
+
+enum {
+       IPOIB_MODE_DATAGRAM  = 0, /* using unreliable datagram QPs */
+       IPOIB_MODE_CONNECTED = 1, /* using connected QPs */
+};
+
+#define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1)
+
+
+/* HSR section */
+
+enum {
+       IFLA_HSR_UNSPEC,
+       IFLA_HSR_SLAVE1,
+       IFLA_HSR_SLAVE2,
+       IFLA_HSR_MULTICAST_SPEC,        /* Last byte of supervision addr */
+       IFLA_HSR_SUPERVISION_ADDR,      /* Supervision frame multicast addr */
+       IFLA_HSR_SEQ_NR,
+       __IFLA_HSR_MAX,
+};
+
+#define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1)
+
+#endif /* _LINUX_IF_LINK_H */
diff --git a/lib/libdss-include/include/linux/if_ltalk.h b/lib/libdss-include/include/linux/if_ltalk.h
new file mode 100644 (file)
index 0000000..1f83ba0
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef __LINUX_LTALK_H
+#define __LINUX_LTALK_H
+
+#define LTALK_HLEN             1
+#define LTALK_MTU              600
+#define LTALK_ALEN             1
+
+
+#endif /* __LINUX_LTALK_H */
diff --git a/lib/libdss-include/include/linux/if_packet.h b/lib/libdss-include/include/linux/if_packet.h
new file mode 100644 (file)
index 0000000..9e7edfd
--- /dev/null
@@ -0,0 +1,301 @@
+#ifndef __LINUX_IF_PACKET_H
+#define __LINUX_IF_PACKET_H
+
+#include <linux/types.h>
+
+struct sockaddr_pkt {
+       unsigned short spkt_family;
+       unsigned char spkt_device[14];
+       __be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+       unsigned short  sll_family;
+       __be16          sll_protocol;
+       int             sll_ifindex;
+       unsigned short  sll_hatype;
+       unsigned char   sll_pkttype;
+       unsigned char   sll_halen;
+       unsigned char   sll_addr[8];
+};
+
+/* Packet types */
+
+#define PACKET_HOST            0               /* To us                */
+#define PACKET_BROADCAST       1               /* To all               */
+#define PACKET_MULTICAST       2               /* To group             */
+#define PACKET_OTHERHOST       3               /* To someone else      */
+#define PACKET_OUTGOING                4               /* Outgoing of any type */
+#define PACKET_LOOPBACK                5               /* MC/BRD frame looped back */
+#define PACKET_USER            6               /* To user space        */
+#define PACKET_KERNEL          7               /* To kernel space      */
+/* Unused, PACKET_FASTROUTE and PACKET_LOOPBACK are invisible to user space */
+#define PACKET_FASTROUTE       6               /* Fastrouted frame     */
+
+/* Packet socket options */
+
+#define PACKET_ADD_MEMBERSHIP          1
+#define PACKET_DROP_MEMBERSHIP         2
+#define PACKET_RECV_OUTPUT             3
+/* Value 4 is still used by obsolete turbo-packet. */
+#define PACKET_RX_RING                 5
+#define PACKET_STATISTICS              6
+#define PACKET_COPY_THRESH             7
+#define PACKET_AUXDATA                 8
+#define PACKET_ORIGDEV                 9
+#define PACKET_VERSION                 10
+#define PACKET_HDRLEN                  11
+#define PACKET_RESERVE                 12
+#define PACKET_TX_RING                 13
+#define PACKET_LOSS                    14
+#define PACKET_VNET_HDR                        15
+#define PACKET_TX_TIMESTAMP            16
+#define PACKET_TIMESTAMP               17
+#define PACKET_FANOUT                  18
+#define PACKET_TX_HAS_OFF              19
+#define PACKET_QDISC_BYPASS            20
+#define PACKET_ROLLOVER_STATS          21
+#define PACKET_FANOUT_DATA             22
+
+#define PACKET_FANOUT_HASH             0
+#define PACKET_FANOUT_LB               1
+#define PACKET_FANOUT_CPU              2
+#define PACKET_FANOUT_ROLLOVER         3
+#define PACKET_FANOUT_RND              4
+#define PACKET_FANOUT_QM               5
+#define PACKET_FANOUT_CBPF             6
+#define PACKET_FANOUT_EBPF             7
+#define PACKET_FANOUT_FLAG_ROLLOVER    0x1000
+#define PACKET_FANOUT_FLAG_DEFRAG      0x8000
+
+struct tpacket_stats {
+       unsigned int    tp_packets;
+       unsigned int    tp_drops;
+};
+
+struct tpacket_stats_v3 {
+       unsigned int    tp_packets;
+       unsigned int    tp_drops;
+       unsigned int    tp_freeze_q_cnt;
+};
+
+struct tpacket_rollover_stats {
+       __aligned_u64   tp_all;
+       __aligned_u64   tp_huge;
+       __aligned_u64   tp_failed;
+};
+
+union tpacket_stats_u {
+       struct tpacket_stats stats1;
+       struct tpacket_stats_v3 stats3;
+};
+
+struct tpacket_auxdata {
+       __u32           tp_status;
+       __u32           tp_len;
+       __u32           tp_snaplen;
+       __u16           tp_mac;
+       __u16           tp_net;
+       __u16           tp_vlan_tci;
+       __u16           tp_vlan_tpid;
+};
+
+/* Rx ring - header status */
+#define TP_STATUS_KERNEL                     0
+#define TP_STATUS_USER                 (1 << 0)
+#define TP_STATUS_COPY                 (1 << 1)
+#define TP_STATUS_LOSING               (1 << 2)
+#define TP_STATUS_CSUMNOTREADY         (1 << 3)
+#define TP_STATUS_VLAN_VALID           (1 << 4) /* auxdata has valid tp_vlan_tci */
+#define TP_STATUS_BLK_TMO              (1 << 5)
+#define TP_STATUS_VLAN_TPID_VALID      (1 << 6) /* auxdata has valid tp_vlan_tpid */
+#define TP_STATUS_CSUM_VALID           (1 << 7)
+
+/* Tx ring - header status */
+#define TP_STATUS_AVAILABLE          0
+#define TP_STATUS_SEND_REQUEST (1 << 0)
+#define TP_STATUS_SENDING      (1 << 1)
+#define TP_STATUS_WRONG_FORMAT (1 << 2)
+
+/* Rx and Tx ring - header status */
+#define TP_STATUS_TS_SOFTWARE          (1 << 29)
+#define TP_STATUS_TS_SYS_HARDWARE      (1 << 30) /* deprecated, never set */
+#define TP_STATUS_TS_RAW_HARDWARE      (1 << 31)
+
+/* Rx ring - feature request bits */
+#define TP_FT_REQ_FILL_RXHASH  0x1
+
+struct tpacket_hdr {
+       unsigned long   tp_status;
+       unsigned int    tp_len;
+       unsigned int    tp_snaplen;
+       unsigned short  tp_mac;
+       unsigned short  tp_net;
+       unsigned int    tp_sec;
+       unsigned int    tp_usec;
+};
+
+#define TPACKET_ALIGNMENT      16
+#define TPACKET_ALIGN(x)       (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
+#define TPACKET_HDRLEN         (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
+
+struct tpacket2_hdr {
+       __u32           tp_status;
+       __u32           tp_len;
+       __u32           tp_snaplen;
+       __u16           tp_mac;
+       __u16           tp_net;
+       __u32           tp_sec;
+       __u32           tp_nsec;
+       __u16           tp_vlan_tci;
+       __u16           tp_vlan_tpid;
+       __u8            tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+       __u32   tp_rxhash;
+       __u32   tp_vlan_tci;
+       __u16   tp_vlan_tpid;
+       __u16   tp_padding;
+};
+
+struct tpacket3_hdr {
+       __u32           tp_next_offset;
+       __u32           tp_sec;
+       __u32           tp_nsec;
+       __u32           tp_snaplen;
+       __u32           tp_len;
+       __u32           tp_status;
+       __u16           tp_mac;
+       __u16           tp_net;
+       /* pkt_hdr variants */
+       union {
+               struct tpacket_hdr_variant1 hv1;
+       };
+       __u8            tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+       unsigned int ts_sec;
+       union {
+               unsigned int ts_usec;
+               unsigned int ts_nsec;
+       };
+};
+
+struct tpacket_hdr_v1 {
+       __u32   block_status;
+       __u32   num_pkts;
+       __u32   offset_to_first_pkt;
+
+       /* Number of valid bytes (including padding)
+        * blk_len <= tp_block_size
+        */
+       __u32   blk_len;
+
+       /*
+        * Quite a few uses of sequence number:
+        * 1. Make sure cache flush etc worked.
+        *    Well, one can argue - why not use the increasing ts below?
+        *    But look at 2. below first.
+        * 2. When you pass around blocks to other user space decoders,
+        *    you can see which blk[s] is[are] outstanding etc.
+        * 3. Validate kernel code.
+        */
+       __aligned_u64   seq_num;
+
+       /*
+        * ts_last_pkt:
+        *
+        * Case 1.      Block has 'N'(N >=1) packets and TMO'd(timed out)
+        *              ts_last_pkt == 'time-stamp of last packet' and NOT the
+        *              time when the timer fired and the block was closed.
+        *              By providing the ts of the last packet we can absolutely
+        *              guarantee that time-stamp wise, the first packet in the
+        *              next block will never precede the last packet of the
+        *              previous block.
+        * Case 2.      Block has zero packets and TMO'd
+        *              ts_last_pkt = time when the timer fired and the block
+        *              was closed.
+        * Case 3.      Block has 'N' packets and NO TMO.
+        *              ts_last_pkt = time-stamp of the last pkt in the block.
+        *
+        * ts_first_pkt:
+        *              Is always the time-stamp when the block was opened.
+        *              Case a) ZERO packets
+        *                      No packets to deal with but atleast you know the
+        *                      time-interval of this block.
+        *              Case b) Non-zero packets
+        *                      Use the ts of the first packet in the block.
+        *
+        */
+       struct tpacket_bd_ts    ts_first_pkt, ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+       struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+       __u32 version;
+       __u32 offset_to_priv;
+       union tpacket_bd_header_u hdr;
+};
+
+#define TPACKET2_HDRLEN                (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
+#define TPACKET3_HDRLEN                (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll))
+
+enum tpacket_versions {
+       TPACKET_V1,
+       TPACKET_V2,
+       TPACKET_V3
+};
+
+/*
+   Frame structure:
+
+   - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
+   - struct tpacket_hdr
+   - pad to TPACKET_ALIGNMENT=16
+   - struct sockaddr_ll
+   - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
+   - Start+tp_mac: [ Optional MAC header ]
+   - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
+   - Pad to align to TPACKET_ALIGNMENT=16
+ */
+
+struct tpacket_req {
+       unsigned int    tp_block_size;  /* Minimal size of contiguous block */
+       unsigned int    tp_block_nr;    /* Number of blocks */
+       unsigned int    tp_frame_size;  /* Size of frame */
+       unsigned int    tp_frame_nr;    /* Total number of frames */
+};
+
+struct tpacket_req3 {
+       unsigned int    tp_block_size;  /* Minimal size of contiguous block */
+       unsigned int    tp_block_nr;    /* Number of blocks */
+       unsigned int    tp_frame_size;  /* Size of frame */
+       unsigned int    tp_frame_nr;    /* Total number of frames */
+       unsigned int    tp_retire_blk_tov; /* timeout in msecs */
+       unsigned int    tp_sizeof_priv; /* offset to private data area */
+       unsigned int    tp_feature_req_word;
+};
+
+union tpacket_req_u {
+       struct tpacket_req      req;
+       struct tpacket_req3     req3;
+};
+
+struct packet_mreq {
+       int             mr_ifindex;
+       unsigned short  mr_type;
+       unsigned short  mr_alen;
+       unsigned char   mr_address[8];
+};
+
+#define PACKET_MR_MULTICAST    0
+#define PACKET_MR_PROMISC      1
+#define PACKET_MR_ALLMULTI     2
+#define PACKET_MR_UNICAST      3
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_phonet.h b/lib/libdss-include/include/linux/if_phonet.h
new file mode 100644 (file)
index 0000000..63371bc
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * File: if_phonet.h
+ *
+ * Phonet interface kernel definitions
+ *
+ * Copyright (C) 2008 Nokia Corporation. All rights reserved.
+ */
+#ifndef LINUX_IF_PHONET_H
+#define LINUX_IF_PHONET_H
+
+#define PHONET_MIN_MTU         6       /* pn_length = 0 */
+#define PHONET_MAX_MTU         65541   /* pn_length = 0xffff */
+#define PHONET_DEV_MTU         PHONET_MAX_MTU
+
+
+#endif /* LINUX_IF_PHONET_H */
diff --git a/lib/libdss-include/include/linux/if_plip.h b/lib/libdss-include/include/linux/if_plip.h
new file mode 100644 (file)
index 0000000..6298c7e
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ *     NET3    PLIP tuning facilities for the new Niibe PLIP.
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ *
+ */
+#ifndef _LINUX_IF_PLIP_H
+#define _LINUX_IF_PLIP_H
+
+#include <linux/sockios.h>
+
+#define        SIOCDEVPLIP     SIOCDEVPRIVATE
+
+struct plipconf {
+       unsigned short pcmd;
+       unsigned long  nibble;
+       unsigned long  trigger;
+};
+
+#define PLIP_GET_TIMEOUT       0x1
+#define PLIP_SET_TIMEOUT       0x2
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_ppp.h b/lib/libdss-include/include/linux/if_ppp.h
new file mode 100644 (file)
index 0000000..9048fab
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ppp-ioctl.h>
diff --git a/lib/libdss-include/include/linux/if_pppol2tp.h b/lib/libdss-include/include/linux/if_pppol2tp.h
new file mode 100644 (file)
index 0000000..8e1221c
--- /dev/null
@@ -0,0 +1,104 @@
+/***************************************************************************
+ * Linux PPP over L2TP (PPPoL2TP) Socket Implementation (RFC 2661)
+ *
+ * This file supplies definitions required by the PPP over L2TP driver
+ * (l2tp_ppp.c).  All version information wrt this file is located in l2tp_ppp.c
+ *
+ * License:
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef __LINUX_IF_PPPOL2TP_H
+#define __LINUX_IF_PPPOL2TP_H
+
+#include <linux/types.h>
+
+
+/* Structure used to connect() the socket to a particular tunnel UDP
+ * socket over IPv4.
+ */
+struct pppol2tp_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP socket to use */
+
+       struct sockaddr_in addr;        /* IP address and port to send to */
+
+       __u16 s_tunnel, s_session;      /* For matching incoming packets */
+       __u16 d_tunnel, d_session;      /* For sending outgoing packets */
+};
+
+/* Structure used to connect() the socket to a particular tunnel UDP
+ * socket over IPv6.
+ */
+struct pppol2tpin6_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP socket to use */
+
+       __u16 s_tunnel, s_session;      /* For matching incoming packets */
+       __u16 d_tunnel, d_session;      /* For sending outgoing packets */
+
+       struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
+/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
+ * bits. So we need a different sockaddr structure.
+ */
+struct pppol2tpv3_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP or IP socket to use */
+
+       struct sockaddr_in addr;        /* IP address and port to send to */
+
+       __u32 s_tunnel, s_session;      /* For matching incoming packets */
+       __u32 d_tunnel, d_session;      /* For sending outgoing packets */
+};
+
+struct pppol2tpv3in6_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP or IP socket to use */
+
+       __u32 s_tunnel, s_session;      /* For matching incoming packets */
+       __u32 d_tunnel, d_session;      /* For sending outgoing packets */
+
+       struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
+/* Socket options:
+ * DEBUG       - bitmask of debug message categories
+ * SENDSEQ     - 0 => don't send packets with sequence numbers
+ *               1 => send packets with sequence numbers
+ * RECVSEQ     - 0 => receive packet sequence numbers are optional
+ *               1 => drop receive packets without sequence numbers
+ * LNSMODE     - 0 => act as LAC.
+ *               1 => act as LNS.
+ * REORDERTO   - reorder timeout (in millisecs). If 0, don't try to reorder.
+ */
+enum {
+       PPPOL2TP_SO_DEBUG       = 1,
+       PPPOL2TP_SO_RECVSEQ     = 2,
+       PPPOL2TP_SO_SENDSEQ     = 3,
+       PPPOL2TP_SO_LNSMODE     = 4,
+       PPPOL2TP_SO_REORDERTO   = 5,
+};
+
+/* Debug message categories for the DEBUG socket option */
+enum {
+       PPPOL2TP_MSG_DEBUG      = (1 << 0),     /* verbose debug (if
+                                                * compiled in) */
+       PPPOL2TP_MSG_CONTROL    = (1 << 1),     /* userspace - kernel
+                                                * interface */
+       PPPOL2TP_MSG_SEQ        = (1 << 2),     /* sequence numbers */
+       PPPOL2TP_MSG_DATA       = (1 << 3),     /* data packets */
+};
+
+
+
+#endif /* __LINUX_IF_PPPOL2TP_H */
diff --git a/lib/libdss-include/include/linux/if_pppox.h b/lib/libdss-include/include/linux/if_pppox.h
new file mode 100644 (file)
index 0000000..acd0a2c
--- /dev/null
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Linux PPP over X - Generic PPP transport layer sockets
+ * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516) 
+ *
+ * This file supplies definitions required by the PPP over Ethernet driver
+ * (pppox.c).  All version information wrt this file is located in pppox.c
+ *
+ * License:
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef __LINUX_IF_PPPOX_H
+#define __LINUX_IF_PPPOX_H
+
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+#include <linux/socket.h>
+#include <linux/if_ether.h>
+#include <linux/if_pppol2tp.h>
+
+/* For user-space programs to pick up these definitions
+ * which they wouldn't get otherwise without defining __KERNEL__
+ */
+#ifndef AF_PPPOX
+#define AF_PPPOX       24
+#define PF_PPPOX       AF_PPPOX
+#endif /* !(AF_PPPOX) */
+
+/************************************************************************ 
+ * PPPoE addressing definition 
+ */ 
+typedef __be16 sid_t;
+struct pppoe_addr {
+       sid_t         sid;                    /* Session identifier */
+       unsigned char remote[ETH_ALEN];       /* Remote address */
+       char          dev[IFNAMSIZ];          /* Local device to use */
+}; 
+/************************************************************************ 
+ * PPTP addressing definition
+ */
+struct pptp_addr {
+       __u16           call_id;
+       struct in_addr  sin_addr;
+};
+
+/************************************************************************
+ * Protocols supported by AF_PPPOX
+ */
+#define PX_PROTO_OE    0 /* Currently just PPPoE */
+#define PX_PROTO_OL2TP 1 /* Now L2TP also */
+#define PX_PROTO_PPTP  2
+#define PX_MAX_PROTO   3
+
+struct sockaddr_pppox {
+       __kernel_sa_family_t sa_family;       /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;          /* protocol identifier */
+       union {
+               struct pppoe_addr  pppoe;
+               struct pptp_addr   pptp;
+       } sa_addr;
+} __attribute__((packed));
+
+/* The use of the above union isn't viable because the size of this
+ * struct must stay fixed over time -- applications use sizeof(struct
+ * sockaddr_pppox) to fill it. We use a protocol specific sockaddr
+ * type instead.
+ */
+struct sockaddr_pppol2tp {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tp_addr pppol2tp;
+} __attribute__((packed));
+
+struct sockaddr_pppol2tpin6 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpin6_addr pppol2tp;
+} __attribute__((packed));
+
+/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
+ * bits. So we need a different sockaddr structure.
+ */
+struct sockaddr_pppol2tpv3 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpv3_addr pppol2tp;
+} __attribute__((packed));
+
+struct sockaddr_pppol2tpv3in6 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpv3in6_addr pppol2tp;
+} __attribute__((packed));
+
+/*********************************************************************
+ *
+ * ioctl interface for defining forwarding of connections
+ *
+ ********************************************************************/
+
+#define PPPOEIOCSFWD   _IOW(0xB1 ,0, size_t)
+#define PPPOEIOCDFWD   _IO(0xB1 ,1)
+/*#define PPPOEIOCGFWD _IOWR(0xB1,2, size_t)*/
+
+/* Codes to identify message types */
+#define PADI_CODE      0x09
+#define PADO_CODE      0x07
+#define PADR_CODE      0x19
+#define PADS_CODE      0x65
+#define PADT_CODE      0xa7
+struct pppoe_tag {
+       __be16 tag_type;
+       __be16 tag_len;
+       char tag_data[0];
+} __attribute__ ((packed));
+
+/* Tag identifiers */
+#define PTT_EOL                __cpu_to_be16(0x0000)
+#define PTT_SRV_NAME   __cpu_to_be16(0x0101)
+#define PTT_AC_NAME    __cpu_to_be16(0x0102)
+#define PTT_HOST_UNIQ  __cpu_to_be16(0x0103)
+#define PTT_AC_COOKIE  __cpu_to_be16(0x0104)
+#define PTT_VENDOR     __cpu_to_be16(0x0105)
+#define PTT_RELAY_SID  __cpu_to_be16(0x0110)
+#define PTT_SRV_ERR     __cpu_to_be16(0x0201)
+#define PTT_SYS_ERR    __cpu_to_be16(0x0202)
+#define PTT_GEN_ERR    __cpu_to_be16(0x0203)
+
+struct pppoe_hdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 type : 4;
+       __u8 ver : 4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8 ver : 4;
+       __u8 type : 4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 code;
+       __be16 sid;
+       __be16 length;
+       struct pppoe_tag tag[0];
+} __attribute__((packed));
+
+/* Length of entire PPPoE + PPP header */
+#define PPPOE_SES_HLEN 8
+
+
+#endif /* __LINUX_IF_PPPOX_H */
diff --git a/lib/libdss-include/include/linux/if_slip.h b/lib/libdss-include/include/linux/if_slip.h
new file mode 100644 (file)
index 0000000..1eb4e3a
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *     Swansea University Computer Society     NET3
+ *     
+ *     This file declares the constants of special use with the SLIP/CSLIP/
+ *     KISS TNC driver.
+ */
+#ifndef __LINUX_SLIP_H
+#define __LINUX_SLIP_H
+
+#define                SL_MODE_SLIP            0
+#define                SL_MODE_CSLIP           1
+#define        SL_MODE_KISS            4
+
+#define                SL_OPT_SIXBIT           2
+#define                SL_OPT_ADAPTIVE         8
+
+/*
+ *     VSV = ioctl for keepalive & outfill in SLIP driver 
+ */
+#define SIOCSKEEPALIVE (SIOCDEVPRIVATE)                /* Set keepalive timeout in sec */
+#define SIOCGKEEPALIVE (SIOCDEVPRIVATE+1)              /* Get keepalive timeout */
+#define SIOCSOUTFILL   (SIOCDEVPRIVATE+2)              /* Set outfill timeout */
+#define        SIOCGOUTFILL    (SIOCDEVPRIVATE+3)              /* Get outfill timeout */
+#define SIOCSLEASE     (SIOCDEVPRIVATE+4)              /* Set "leased" line type */
+#define        SIOCGLEASE      (SIOCDEVPRIVATE+5)              /* Get line type */
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/if_team.h b/lib/libdss-include/include/linux/if_team.h
new file mode 100644 (file)
index 0000000..cb92efa
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * include/linux/if_team.h - Network team device driver header
+ * Copyright (c) 2011 Jiri Pirko <jpirko@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_TEAM_H_
+#define _LINUX_IF_TEAM_H_
+
+
+#define TEAM_STRING_MAX_LEN 32
+
+/**********************************
+ * NETLINK_GENERIC netlink family.
+ **********************************/
+
+enum {
+       TEAM_CMD_NOOP,
+       TEAM_CMD_OPTIONS_SET,
+       TEAM_CMD_OPTIONS_GET,
+       TEAM_CMD_PORT_LIST_GET,
+
+       __TEAM_CMD_MAX,
+       TEAM_CMD_MAX = (__TEAM_CMD_MAX - 1),
+};
+
+enum {
+       TEAM_ATTR_UNSPEC,
+       TEAM_ATTR_TEAM_IFINDEX,         /* u32 */
+       TEAM_ATTR_LIST_OPTION,          /* nest */
+       TEAM_ATTR_LIST_PORT,            /* nest */
+
+       __TEAM_ATTR_MAX,
+       TEAM_ATTR_MAX = __TEAM_ATTR_MAX - 1,
+};
+
+/* Nested layout of get/set msg:
+ *
+ *     [TEAM_ATTR_LIST_OPTION]
+ *             [TEAM_ATTR_ITEM_OPTION]
+ *                     [TEAM_ATTR_OPTION_*], ...
+ *             [TEAM_ATTR_ITEM_OPTION]
+ *                     [TEAM_ATTR_OPTION_*], ...
+ *             ...
+ *     [TEAM_ATTR_LIST_PORT]
+ *             [TEAM_ATTR_ITEM_PORT]
+ *                     [TEAM_ATTR_PORT_*], ...
+ *             [TEAM_ATTR_ITEM_PORT]
+ *                     [TEAM_ATTR_PORT_*], ...
+ *             ...
+ */
+
+enum {
+       TEAM_ATTR_ITEM_OPTION_UNSPEC,
+       TEAM_ATTR_ITEM_OPTION,          /* nest */
+
+       __TEAM_ATTR_ITEM_OPTION_MAX,
+       TEAM_ATTR_ITEM_OPTION_MAX = __TEAM_ATTR_ITEM_OPTION_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_OPTION_UNSPEC,
+       TEAM_ATTR_OPTION_NAME,          /* string */
+       TEAM_ATTR_OPTION_CHANGED,       /* flag */
+       TEAM_ATTR_OPTION_TYPE,          /* u8 */
+       TEAM_ATTR_OPTION_DATA,          /* dynamic */
+       TEAM_ATTR_OPTION_REMOVED,       /* flag */
+       TEAM_ATTR_OPTION_PORT_IFINDEX,  /* u32 */ /* for per-port options */
+       TEAM_ATTR_OPTION_ARRAY_INDEX,   /* u32 */ /* for array options */
+
+       __TEAM_ATTR_OPTION_MAX,
+       TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_ITEM_PORT_UNSPEC,
+       TEAM_ATTR_ITEM_PORT,            /* nest */
+
+       __TEAM_ATTR_ITEM_PORT_MAX,
+       TEAM_ATTR_ITEM_PORT_MAX = __TEAM_ATTR_ITEM_PORT_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_PORT_UNSPEC,
+       TEAM_ATTR_PORT_IFINDEX,         /* u32 */
+       TEAM_ATTR_PORT_CHANGED,         /* flag */
+       TEAM_ATTR_PORT_LINKUP,          /* flag */
+       TEAM_ATTR_PORT_SPEED,           /* u32 */
+       TEAM_ATTR_PORT_DUPLEX,          /* u8 */
+       TEAM_ATTR_PORT_REMOVED,         /* flag */
+
+       __TEAM_ATTR_PORT_MAX,
+       TEAM_ATTR_PORT_MAX = __TEAM_ATTR_PORT_MAX - 1,
+};
+
+/*
+ * NETLINK_GENERIC related info
+ */
+#define TEAM_GENL_NAME "team"
+#define TEAM_GENL_VERSION 0x1
+#define TEAM_GENL_CHANGE_EVENT_MC_GRP_NAME "change_event"
+
+#endif /* _LINUX_IF_TEAM_H_ */
diff --git a/lib/libdss-include/include/linux/if_tun.h b/lib/libdss-include/include/linux/if_tun.h
new file mode 100644 (file)
index 0000000..d5ecb42
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ *  Universal TUN/TAP device driver.
+ *  Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ */
+
+#ifndef __IF_TUN_H
+#define __IF_TUN_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+#include <linux/filter.h>
+
+/* Read queue size */
+#define TUN_READQ_SIZE 500
+/* TUN device type flags: deprecated. Use IFF_TUN/IFF_TAP instead. */
+#define TUN_TUN_DEV    IFF_TUN
+#define TUN_TAP_DEV    IFF_TAP
+#define TUN_TYPE_MASK   0x000f
+
+/* Ioctl defines */
+#define TUNSETNOCSUM  _IOW('T', 200, int) 
+#define TUNSETDEBUG   _IOW('T', 201, int) 
+#define TUNSETIFF     _IOW('T', 202, int) 
+#define TUNSETPERSIST _IOW('T', 203, int) 
+#define TUNSETOWNER   _IOW('T', 204, int)
+#define TUNSETLINK    _IOW('T', 205, int)
+#define TUNSETGROUP   _IOW('T', 206, int)
+#define TUNGETFEATURES _IOR('T', 207, unsigned int)
+#define TUNSETOFFLOAD  _IOW('T', 208, unsigned int)
+#define TUNSETTXFILTER _IOW('T', 209, unsigned int)
+#define TUNGETIFF      _IOR('T', 210, unsigned int)
+#define TUNGETSNDBUF   _IOR('T', 211, int)
+#define TUNSETSNDBUF   _IOW('T', 212, int)
+#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog)
+#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
+#define TUNGETVNETHDRSZ _IOR('T', 215, int)
+#define TUNSETVNETHDRSZ _IOW('T', 216, int)
+#define TUNSETQUEUE  _IOW('T', 217, int)
+#define TUNSETIFINDEX  _IOW('T', 218, unsigned int)
+#define TUNGETFILTER _IOR('T', 219, struct sock_fprog)
+#define TUNSETVNETLE _IOW('T', 220, int)
+#define TUNGETVNETLE _IOR('T', 221, int)
+/* The TUNSETVNETBE and TUNGETVNETBE ioctls are for cross-endian support on
+ * little-endian hosts. Not all kernel configurations support them, but all
+ * configurations that support SET also support GET.
+ */
+#define TUNSETVNETBE _IOW('T', 222, int)
+#define TUNGETVNETBE _IOR('T', 223, int)
+
+/* TUNSETIFF ifr flags */
+#define IFF_TUN                0x0001
+#define IFF_TAP                0x0002
+#define IFF_NO_PI      0x1000
+/* This flag has no real effect */
+#define IFF_ONE_QUEUE  0x2000
+#define IFF_VNET_HDR   0x4000
+#define IFF_TUN_EXCL   0x8000
+#define IFF_MULTI_QUEUE 0x0100
+#define IFF_ATTACH_QUEUE 0x0200
+#define IFF_DETACH_QUEUE 0x0400
+/* read-only flag */
+#define IFF_PERSIST    0x0800
+#define IFF_NOFILTER   0x1000
+
+/* Socket options */
+#define TUN_TX_TIMESTAMP 1
+
+/* Features for GSO (TUNSETOFFLOAD). */
+#define TUN_F_CSUM     0x01    /* You can hand me unchecksummed packets. */
+#define TUN_F_TSO4     0x02    /* I can handle TSO for IPv4 packets */
+#define TUN_F_TSO6     0x04    /* I can handle TSO for IPv6 packets */
+#define TUN_F_TSO_ECN  0x08    /* I can handle TSO with ECN bits. */
+#define TUN_F_UFO      0x10    /* I can handle UFO packets */
+
+/* Protocol info prepended to the packets (when IFF_NO_PI is not set) */
+#define TUN_PKT_STRIP  0x0001
+struct tun_pi {
+       __u16  flags;
+       __be16 proto;
+};
+
+/*
+ * Filter spec (used for SETXXFILTER ioctls)
+ * This stuff is applicable only to the TAP (Ethernet) devices.
+ * If the count is zero the filter is disabled and the driver accepts
+ * all packets (promisc mode).
+ * If the filter is enabled in order to accept broadcast packets
+ * broadcast addr must be explicitly included in the addr list.
+ */
+#define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */
+struct tun_filter {
+       __u16  flags; /* TUN_FLT_ flags see above */
+       __u16  count; /* Number of addresses */
+       __u8   addr[0][ETH_ALEN];
+};
+
+#endif /* __IF_TUN_H */
diff --git a/lib/libdss-include/include/linux/if_tunnel.h b/lib/libdss-include/include/linux/if_tunnel.h
new file mode 100644 (file)
index 0000000..081c33e
--- /dev/null
@@ -0,0 +1,155 @@
+#ifndef _IF_TUNNEL_H_
+#define _IF_TUNNEL_H_
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+
+#define SIOCGETTUNNEL   (SIOCDEVPRIVATE + 0)
+#define SIOCADDTUNNEL   (SIOCDEVPRIVATE + 1)
+#define SIOCDELTUNNEL   (SIOCDEVPRIVATE + 2)
+#define SIOCCHGTUNNEL   (SIOCDEVPRIVATE + 3)
+#define SIOCGETPRL      (SIOCDEVPRIVATE + 4)
+#define SIOCADDPRL      (SIOCDEVPRIVATE + 5)
+#define SIOCDELPRL      (SIOCDEVPRIVATE + 6)
+#define SIOCCHGPRL      (SIOCDEVPRIVATE + 7)
+#define SIOCGET6RD      (SIOCDEVPRIVATE + 8)
+#define SIOCADD6RD      (SIOCDEVPRIVATE + 9)
+#define SIOCDEL6RD      (SIOCDEVPRIVATE + 10)
+#define SIOCCHG6RD      (SIOCDEVPRIVATE + 11)
+
+#define GRE_CSUM       __cpu_to_be16(0x8000)
+#define GRE_ROUTING    __cpu_to_be16(0x4000)
+#define GRE_KEY                __cpu_to_be16(0x2000)
+#define GRE_SEQ                __cpu_to_be16(0x1000)
+#define GRE_STRICT     __cpu_to_be16(0x0800)
+#define GRE_REC                __cpu_to_be16(0x0700)
+#define GRE_FLAGS      __cpu_to_be16(0x00F8)
+#define GRE_VERSION    __cpu_to_be16(0x0007)
+
+struct ip_tunnel_parm {
+       char                    name[IFNAMSIZ];
+       int                     link;
+       __be16                  i_flags;
+       __be16                  o_flags;
+       __be32                  i_key;
+       __be32                  o_key;
+       struct iphdr            iph;
+};
+
+enum {
+       IFLA_IPTUN_UNSPEC,
+       IFLA_IPTUN_LINK,
+       IFLA_IPTUN_LOCAL,
+       IFLA_IPTUN_REMOTE,
+       IFLA_IPTUN_TTL,
+       IFLA_IPTUN_TOS,
+       IFLA_IPTUN_ENCAP_LIMIT,
+       IFLA_IPTUN_FLOWINFO,
+       IFLA_IPTUN_FLAGS,
+       IFLA_IPTUN_PROTO,
+       IFLA_IPTUN_PMTUDISC,
+       IFLA_IPTUN_6RD_PREFIX,
+       IFLA_IPTUN_6RD_RELAY_PREFIX,
+       IFLA_IPTUN_6RD_PREFIXLEN,
+       IFLA_IPTUN_6RD_RELAY_PREFIXLEN,
+       IFLA_IPTUN_ENCAP_TYPE,
+       IFLA_IPTUN_ENCAP_FLAGS,
+       IFLA_IPTUN_ENCAP_SPORT,
+       IFLA_IPTUN_ENCAP_DPORT,
+
+       __IFLA_IPTUN_VENDOR_BREAK, /* Ensure new entries do not hit the below. */
+       IFLA_IPTUN_FAN_MAP = 33,
+
+       __IFLA_IPTUN_MAX,
+};
+#define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1)
+
+enum tunnel_encap_types {
+       TUNNEL_ENCAP_NONE,
+       TUNNEL_ENCAP_FOU,
+       TUNNEL_ENCAP_GUE,
+};
+
+#define TUNNEL_ENCAP_FLAG_CSUM         (1<<0)
+#define TUNNEL_ENCAP_FLAG_CSUM6                (1<<1)
+#define TUNNEL_ENCAP_FLAG_REMCSUM      (1<<2)
+
+/* SIT-mode i_flags */
+#define        SIT_ISATAP      0x0001
+
+struct ip_tunnel_prl {
+       __be32                  addr;
+       __u16                   flags;
+       __u16                   __reserved;
+       __u32                   datalen;
+       __u32                   __reserved2;
+       /* data follows */
+};
+
+/* PRL flags */
+#define        PRL_DEFAULT             0x0001
+
+struct ip_tunnel_6rd {
+       struct in6_addr         prefix;
+       __be32                  relay_prefix;
+       __u16                   prefixlen;
+       __u16                   relay_prefixlen;
+};
+
+enum {
+       IFLA_GRE_UNSPEC,
+       IFLA_GRE_LINK,
+       IFLA_GRE_IFLAGS,
+       IFLA_GRE_OFLAGS,
+       IFLA_GRE_IKEY,
+       IFLA_GRE_OKEY,
+       IFLA_GRE_LOCAL,
+       IFLA_GRE_REMOTE,
+       IFLA_GRE_TTL,
+       IFLA_GRE_TOS,
+       IFLA_GRE_PMTUDISC,
+       IFLA_GRE_ENCAP_LIMIT,
+       IFLA_GRE_FLOWINFO,
+       IFLA_GRE_FLAGS,
+       IFLA_GRE_ENCAP_TYPE,
+       IFLA_GRE_ENCAP_FLAGS,
+       IFLA_GRE_ENCAP_SPORT,
+       IFLA_GRE_ENCAP_DPORT,
+       IFLA_GRE_COLLECT_METADATA,
+       __IFLA_GRE_MAX,
+};
+
+#define IFLA_GRE_MAX   (__IFLA_GRE_MAX - 1)
+
+/* VTI-mode i_flags */
+#define VTI_ISVTI ((__be16)0x0001)
+
+enum {
+       IFLA_VTI_UNSPEC,
+       IFLA_VTI_LINK,
+       IFLA_VTI_IKEY,
+       IFLA_VTI_OKEY,
+       IFLA_VTI_LOCAL,
+       IFLA_VTI_REMOTE,
+       __IFLA_VTI_MAX,
+};
+
+#define IFLA_VTI_MAX   (__IFLA_VTI_MAX - 1)
+
+enum {
+       IFLA_FAN_UNSPEC,
+       IFLA_FAN_MAPPING,
+       __IFLA_FAN_MAX,
+};
+
+#define IFLA_FAN_MAX (__IFLA_FAN_MAX - 1)
+
+struct ifla_fan_map {
+       __be32          underlay;
+       __be32          overlay;
+       __u16           underlay_prefix;
+       __u16           overlay_prefix;
+};
+
+#endif /* _IF_TUNNEL_H_ */
diff --git a/lib/libdss-include/include/linux/if_vlan.h b/lib/libdss-include/include/linux/if_vlan.h
new file mode 100644 (file)
index 0000000..24ae007
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * VLAN                An implementation of 802.1Q VLAN tagging.
+ *
+ * Authors:    Ben Greear <greearb@candelatech.com>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef _LINUX_IF_VLAN_H_
+#define _LINUX_IF_VLAN_H_
+
+
+/* VLAN IOCTLs are found in sockios.h */
+
+/* Passed in vlan_ioctl_args structure to determine behaviour. */
+enum vlan_ioctl_cmds {
+       ADD_VLAN_CMD,
+       DEL_VLAN_CMD,
+       SET_VLAN_INGRESS_PRIORITY_CMD,
+       SET_VLAN_EGRESS_PRIORITY_CMD,
+       GET_VLAN_INGRESS_PRIORITY_CMD,
+       GET_VLAN_EGRESS_PRIORITY_CMD,
+       SET_VLAN_NAME_TYPE_CMD,
+       SET_VLAN_FLAG_CMD,
+       GET_VLAN_REALDEV_NAME_CMD, /* If this works, you know it's a VLAN device, btw */
+       GET_VLAN_VID_CMD /* Get the VID of this VLAN (specified by name) */
+};
+
+enum vlan_flags {
+       VLAN_FLAG_REORDER_HDR   = 0x1,
+       VLAN_FLAG_GVRP          = 0x2,
+       VLAN_FLAG_LOOSE_BINDING = 0x4,
+       VLAN_FLAG_MVRP          = 0x8,
+};
+
+enum vlan_name_types {
+       VLAN_NAME_TYPE_PLUS_VID, /* Name will look like:  vlan0005 */
+       VLAN_NAME_TYPE_RAW_PLUS_VID, /* name will look like:  eth1.0005 */
+       VLAN_NAME_TYPE_PLUS_VID_NO_PAD, /* Name will look like:  vlan5 */
+       VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, /* Name will look like:  eth0.5 */
+       VLAN_NAME_TYPE_HIGHEST
+};
+
+struct vlan_ioctl_args {
+       int cmd; /* Should be one of the vlan_ioctl_cmds enum above. */
+       char device1[24];
+
+        union {
+               char device2[24];
+               int VID;
+               unsigned int skb_priority;
+               unsigned int name_type;
+               unsigned int bind_type;
+               unsigned int flag; /* Matches vlan_dev_priv flags */
+        } u;
+
+       short vlan_qos;   
+};
+
+#endif /* _LINUX_IF_VLAN_H_ */
diff --git a/lib/libdss-include/include/linux/if_x25.h b/lib/libdss-include/include/linux/if_x25.h
new file mode 100644 (file)
index 0000000..897765f
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ *  Linux X.25 packet to device interface
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ */
+
+#ifndef _IF_X25_H
+#define _IF_X25_H
+
+#include <linux/types.h>
+
+/* Documentation/networking/x25-iface.txt */
+#define X25_IFACE_DATA         0x00
+#define X25_IFACE_CONNECT      0x01
+#define X25_IFACE_DISCONNECT   0x02
+#define X25_IFACE_PARAMS       0x03
+
+#endif /* _IF_X25_H */
diff --git a/lib/libdss-include/include/linux/igmp.h b/lib/libdss-include/include/linux/igmp.h
new file mode 100644 (file)
index 0000000..2ead5c5
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ *     Linux NET3:     Internet Group Management Protocol  [IGMP]
+ *
+ *     Authors:
+ *             Alan Cox <alan@lxorguk.ukuu.org.uk>
+ *
+ *     Extended to talk the BSD extended IGMP protocol of mrouted 3.6
+ *
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IGMP_H
+#define _LINUX_IGMP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ *     IGMP protocol structures
+ */
+
+/*
+ *     Header in on cable format
+ */
+
+struct igmphdr {
+       __u8 type;
+       __u8 code;              /* For newer IGMP */
+       __sum16 csum;
+       __be32 group;
+};
+
+/* V3 group record types [grec_type] */
+#define IGMPV3_MODE_IS_INCLUDE         1
+#define IGMPV3_MODE_IS_EXCLUDE         2
+#define IGMPV3_CHANGE_TO_INCLUDE       3
+#define IGMPV3_CHANGE_TO_EXCLUDE       4
+#define IGMPV3_ALLOW_NEW_SOURCES       5
+#define IGMPV3_BLOCK_OLD_SOURCES       6
+
+struct igmpv3_grec {
+       __u8    grec_type;
+       __u8    grec_auxwords;
+       __be16  grec_nsrcs;
+       __be32  grec_mca;
+       __be32  grec_src[0];
+};
+
+struct igmpv3_report {
+       __u8 type;
+       __u8 resv1;
+       __be16 csum;
+       __be16 resv2;
+       __be16 ngrec;
+       struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+       __u8 type;
+       __u8 code;
+       __be16 csum;
+       __be32 group;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 qrv:3,
+            suppress:1,
+            resv:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8 resv:4,
+            suppress:1,
+            qrv:3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 qqic;
+       __be16 nsrcs;
+       __be32 srcs[0];
+};
+
+#define IGMP_HOST_MEMBERSHIP_QUERY     0x11    /* From RFC1112 */
+#define IGMP_HOST_MEMBERSHIP_REPORT    0x12    /* Ditto */
+#define IGMP_DVMRP                     0x13    /* DVMRP routing */
+#define IGMP_PIM                       0x14    /* PIM routing */
+#define IGMP_TRACE                     0x15
+#define IGMPV2_HOST_MEMBERSHIP_REPORT  0x16    /* V2 version of 0x12 */
+#define IGMP_HOST_LEAVE_MESSAGE        0x17
+#define IGMPV3_HOST_MEMBERSHIP_REPORT  0x22    /* V3 version of 0x12 */
+
+#define IGMP_MTRACE_RESP               0x1e
+#define IGMP_MTRACE                    0x1f
+
+
+/*
+ *     Use the BSD names for these for compatibility
+ */
+
+#define IGMP_DELAYING_MEMBER           0x01
+#define IGMP_IDLE_MEMBER               0x02
+#define IGMP_LAZY_MEMBER               0x03
+#define IGMP_SLEEPING_MEMBER           0x04
+#define IGMP_AWAKENING_MEMBER          0x05
+
+#define IGMP_MINLEN                    8
+
+#define IGMP_MAX_HOST_REPORT_DELAY     10      /* max delay for response to */
+                                               /* query (in seconds)   */
+
+#define IGMP_TIMER_SCALE               10      /* denotes that the igmphdr->timer field */
+                                               /* specifies time in 10th of seconds     */
+
+#define IGMP_AGE_THRESHOLD             400     /* If this host don't hear any IGMP V1  */
+                                               /* message in this period of time,      */
+                                               /* revert to IGMP v2 router.            */
+
+#define IGMP_ALL_HOSTS         htonl(0xE0000001L)
+#define IGMP_ALL_ROUTER        htonl(0xE0000002L)
+#define IGMPV3_ALL_MCR         htonl(0xE0000016L)
+#define IGMP_LOCAL_GROUP       htonl(0xE0000000L)
+#define IGMP_LOCAL_GROUP_MASK  htonl(0xFFFFFF00L)
+
+/*
+ * struct for keeping the multicast list in
+ */
+
+#endif /* _LINUX_IGMP_H */
diff --git a/lib/libdss-include/include/linux/iio/events.h b/lib/libdss-include/include/linux/iio/events.h
new file mode 100644 (file)
index 0000000..edfcaf0
--- /dev/null
@@ -0,0 +1,42 @@
+/* The industrial I/O - event passing to userspace
+ *
+ * Copyright (c) 2008-2011 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _IIO_EVENTS_H_
+#define _IIO_EVENTS_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * struct iio_event_data - The actual event being pushed to userspace
+ * @id:                event identifier
+ * @timestamp: best estimate of time of event occurrence (often from
+ *             the interrupt handler)
+ */
+struct iio_event_data {
+       __u64   id;
+       __s64   timestamp;
+};
+
+#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
+
+#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
+
+#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F)
+
+#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
+
+/* Event code number extraction depends on which type of event we have.
+ * Perhaps review this function in the future*/
+#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
+#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
+
+#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
+#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
+
+#endif /* _IIO_EVENTS_H_ */
diff --git a/lib/libdss-include/include/linux/iio/types.h b/lib/libdss-include/include/linux/iio/types.h
new file mode 100644 (file)
index 0000000..4cf6dd2
--- /dev/null
@@ -0,0 +1,98 @@
+/* industrial I/O data types needed both in and out of kernel
+ *
+ * Copyright (c) 2008 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+
+#ifndef _IIO_TYPES_H_
+#define _IIO_TYPES_H_
+
+enum iio_chan_type {
+       IIO_VOLTAGE,
+       IIO_CURRENT,
+       IIO_POWER,
+       IIO_ACCEL,
+       IIO_ANGL_VEL,
+       IIO_MAGN,
+       IIO_LIGHT,
+       IIO_INTENSITY,
+       IIO_PROXIMITY,
+       IIO_TEMP,
+       IIO_INCLI,
+       IIO_ROT,
+       IIO_ANGL,
+       IIO_TIMESTAMP,
+       IIO_CAPACITANCE,
+       IIO_ALTVOLTAGE,
+       IIO_CCT,
+       IIO_PRESSURE,
+       IIO_HUMIDITYRELATIVE,
+       IIO_ACTIVITY,
+       IIO_STEPS,
+       IIO_ENERGY,
+       IIO_DISTANCE,
+       IIO_VELOCITY,
+       IIO_CONCENTRATION,
+       IIO_RESISTANCE,
+};
+
+enum iio_modifier {
+       IIO_NO_MOD,
+       IIO_MOD_X,
+       IIO_MOD_Y,
+       IIO_MOD_Z,
+       IIO_MOD_X_AND_Y,
+       IIO_MOD_X_AND_Z,
+       IIO_MOD_Y_AND_Z,
+       IIO_MOD_X_AND_Y_AND_Z,
+       IIO_MOD_X_OR_Y,
+       IIO_MOD_X_OR_Z,
+       IIO_MOD_Y_OR_Z,
+       IIO_MOD_X_OR_Y_OR_Z,
+       IIO_MOD_LIGHT_BOTH,
+       IIO_MOD_LIGHT_IR,
+       IIO_MOD_ROOT_SUM_SQUARED_X_Y,
+       IIO_MOD_SUM_SQUARED_X_Y_Z,
+       IIO_MOD_LIGHT_CLEAR,
+       IIO_MOD_LIGHT_RED,
+       IIO_MOD_LIGHT_GREEN,
+       IIO_MOD_LIGHT_BLUE,
+       IIO_MOD_QUATERNION,
+       IIO_MOD_TEMP_AMBIENT,
+       IIO_MOD_TEMP_OBJECT,
+       IIO_MOD_NORTH_MAGN,
+       IIO_MOD_NORTH_TRUE,
+       IIO_MOD_NORTH_MAGN_TILT_COMP,
+       IIO_MOD_NORTH_TRUE_TILT_COMP,
+       IIO_MOD_RUNNING,
+       IIO_MOD_JOGGING,
+       IIO_MOD_WALKING,
+       IIO_MOD_STILL,
+       IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
+       IIO_MOD_I,
+       IIO_MOD_Q,
+       IIO_MOD_CO2,
+       IIO_MOD_VOC,
+};
+
+enum iio_event_type {
+       IIO_EV_TYPE_THRESH,
+       IIO_EV_TYPE_MAG,
+       IIO_EV_TYPE_ROC,
+       IIO_EV_TYPE_THRESH_ADAPTIVE,
+       IIO_EV_TYPE_MAG_ADAPTIVE,
+       IIO_EV_TYPE_CHANGE,
+};
+
+enum iio_event_direction {
+       IIO_EV_DIR_EITHER,
+       IIO_EV_DIR_RISING,
+       IIO_EV_DIR_FALLING,
+       IIO_EV_DIR_NONE,
+};
+
+#endif /* _IIO_TYPES_H_ */
+
diff --git a/lib/libdss-include/include/linux/ila.h b/lib/libdss-include/include/linux/ila.h
new file mode 100644 (file)
index 0000000..f08e8d7
--- /dev/null
@@ -0,0 +1,15 @@
+/* ila.h - ILA Interface */
+
+#ifndef _LINUX_ILA_H
+#define _LINUX_ILA_H
+
+enum {
+       ILA_ATTR_UNSPEC,
+       ILA_ATTR_LOCATOR,                       /* u64 */
+
+       __ILA_ATTR_MAX,
+};
+
+#define ILA_ATTR_MAX           (__ILA_ATTR_MAX - 1)
+
+#endif /* _LINUX_ILA_H */
diff --git a/lib/libdss-include/include/linux/in.h b/lib/libdss-include/include/linux/in.h
new file mode 100644 (file)
index 0000000..194b43b
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions of the Internet Protocol.
+ *
+ * Version:    @(#)in.h        1.0.1   04/21/93
+ *
+ * Authors:    Original taken from the GNU Project <netinet/in.h> file.
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IN_H
+#define _LINUX_IN_H
+
+#include <linux/types.h>
+#include <linux/libc-compat.h>
+#include <linux/socket.h>
+
+#if __UAPI_DEF_IN_IPPROTO
+/* Standard well-defined IP protocols.  */
+enum {
+  IPPROTO_IP = 0,              /* Dummy protocol for TCP               */
+#define IPPROTO_IP             IPPROTO_IP
+  IPPROTO_ICMP = 1,            /* Internet Control Message Protocol    */
+#define IPPROTO_ICMP           IPPROTO_ICMP
+  IPPROTO_IGMP = 2,            /* Internet Group Management Protocol   */
+#define IPPROTO_IGMP           IPPROTO_IGMP
+  IPPROTO_IPIP = 4,            /* IPIP tunnels (older KA9Q tunnels use 94) */
+#define IPPROTO_IPIP           IPPROTO_IPIP
+  IPPROTO_TCP = 6,             /* Transmission Control Protocol        */
+#define IPPROTO_TCP            IPPROTO_TCP
+  IPPROTO_EGP = 8,             /* Exterior Gateway Protocol            */
+#define IPPROTO_EGP            IPPROTO_EGP
+  IPPROTO_PUP = 12,            /* PUP protocol                         */
+#define IPPROTO_PUP            IPPROTO_PUP
+  IPPROTO_UDP = 17,            /* User Datagram Protocol               */
+#define IPPROTO_UDP            IPPROTO_UDP
+  IPPROTO_IDP = 22,            /* XNS IDP protocol                     */
+#define IPPROTO_IDP            IPPROTO_IDP
+  IPPROTO_TP = 29,             /* SO Transport Protocol Class 4        */
+#define IPPROTO_TP             IPPROTO_TP
+  IPPROTO_DCCP = 33,           /* Datagram Congestion Control Protocol */
+#define IPPROTO_DCCP           IPPROTO_DCCP
+  IPPROTO_IPV6 = 41,           /* IPv6-in-IPv4 tunnelling              */
+#define IPPROTO_IPV6           IPPROTO_IPV6
+  IPPROTO_RSVP = 46,           /* RSVP Protocol                        */
+#define IPPROTO_RSVP           IPPROTO_RSVP
+  IPPROTO_GRE = 47,            /* Cisco GRE tunnels (rfc 1701,1702)    */
+#define IPPROTO_GRE            IPPROTO_GRE
+  IPPROTO_ESP = 50,            /* Encapsulation Security Payload protocol */
+#define IPPROTO_ESP            IPPROTO_ESP
+  IPPROTO_AH = 51,             /* Authentication Header protocol       */
+#define IPPROTO_AH             IPPROTO_AH
+  IPPROTO_MTP = 92,            /* Multicast Transport Protocol         */
+#define IPPROTO_MTP            IPPROTO_MTP
+  IPPROTO_BEETPH = 94,         /* IP option pseudo header for BEET     */
+#define IPPROTO_BEETPH         IPPROTO_BEETPH
+  IPPROTO_ENCAP = 98,          /* Encapsulation Header                 */
+#define IPPROTO_ENCAP          IPPROTO_ENCAP
+  IPPROTO_PIM = 103,           /* Protocol Independent Multicast       */
+#define IPPROTO_PIM            IPPROTO_PIM
+  IPPROTO_COMP = 108,          /* Compression Header Protocol          */
+#define IPPROTO_COMP           IPPROTO_COMP
+  IPPROTO_SCTP = 132,          /* Stream Control Transport Protocol    */
+#define IPPROTO_SCTP           IPPROTO_SCTP
+  IPPROTO_UDPLITE = 136,       /* UDP-Lite (RFC 3828)                  */
+#define IPPROTO_UDPLITE                IPPROTO_UDPLITE
+  IPPROTO_MPLS = 137,          /* MPLS in IP (RFC 4023)                */
+#define IPPROTO_MPLS           IPPROTO_MPLS
+  IPPROTO_RAW = 255,           /* Raw IP packets                       */
+#define IPPROTO_RAW            IPPROTO_RAW
+  IPPROTO_MAX
+};
+#endif
+
+#if __UAPI_DEF_IN_ADDR
+/* Internet address. */
+struct in_addr {
+       __be32  s_addr;
+};
+#endif
+
+#define IP_TOS         1
+#define IP_TTL         2
+#define IP_HDRINCL     3
+#define IP_OPTIONS     4
+#define IP_ROUTER_ALERT        5
+#define IP_RECVOPTS    6
+#define IP_RETOPTS     7
+#define IP_PKTINFO     8
+#define IP_PKTOPTIONS  9
+#define IP_MTU_DISCOVER        10
+#define IP_RECVERR     11
+#define IP_RECVTTL     12
+#define        IP_RECVTOS      13
+#define IP_MTU         14
+#define IP_FREEBIND    15
+#define IP_IPSEC_POLICY        16
+#define IP_XFRM_POLICY 17
+#define IP_PASSSEC     18
+#define IP_TRANSPARENT 19
+
+/* BSD compatibility */
+#define IP_RECVRETOPTS IP_RETOPTS
+
+/* TProxy original addresses */
+#define IP_ORIGDSTADDR       20
+#define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
+
+#define IP_MINTTL       21
+#define IP_NODEFRAG     22
+#define IP_CHECKSUM    23
+#define IP_BIND_ADDRESS_NO_PORT        24
+
+/* IP_MTU_DISCOVER values */
+#define IP_PMTUDISC_DONT               0       /* Never send DF frames */
+#define IP_PMTUDISC_WANT               1       /* Use per route hints  */
+#define IP_PMTUDISC_DO                 2       /* Always DF            */
+#define IP_PMTUDISC_PROBE              3       /* Ignore dst pmtu      */
+/* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
+ * Also incoming ICMP frag_needed notifications will be ignored on
+ * this socket to prevent accepting spoofed ones.
+ */
+#define IP_PMTUDISC_INTERFACE          4
+/* weaker version of IP_PMTUDISC_INTERFACE, which allos packets to get
+ * fragmented if they exeed the interface mtu
+ */
+#define IP_PMTUDISC_OMIT               5
+
+#define IP_MULTICAST_IF                        32
+#define IP_MULTICAST_TTL               33
+#define IP_MULTICAST_LOOP              34
+#define IP_ADD_MEMBERSHIP              35
+#define IP_DROP_MEMBERSHIP             36
+#define IP_UNBLOCK_SOURCE              37
+#define IP_BLOCK_SOURCE                        38
+#define IP_ADD_SOURCE_MEMBERSHIP       39
+#define IP_DROP_SOURCE_MEMBERSHIP      40
+#define IP_MSFILTER                    41
+#define MCAST_JOIN_GROUP               42
+#define MCAST_BLOCK_SOURCE             43
+#define MCAST_UNBLOCK_SOURCE           44
+#define MCAST_LEAVE_GROUP              45
+#define MCAST_JOIN_SOURCE_GROUP                46
+#define MCAST_LEAVE_SOURCE_GROUP       47
+#define MCAST_MSFILTER                 48
+#define IP_MULTICAST_ALL               49
+#define IP_UNICAST_IF                  50
+
+#define MCAST_EXCLUDE  0
+#define MCAST_INCLUDE  1
+
+/* These need to appear somewhere around here */
+#define IP_DEFAULT_MULTICAST_TTL        1
+#define IP_DEFAULT_MULTICAST_LOOP       1
+
+/* Request struct for multicast socket ops */
+
+#if __UAPI_DEF_IP_MREQ
+struct ip_mreq  {
+       struct in_addr imr_multiaddr;   /* IP multicast address of group */
+       struct in_addr imr_interface;   /* local IP address of interface */
+};
+
+struct ip_mreqn {
+       struct in_addr  imr_multiaddr;          /* IP multicast address of group */
+       struct in_addr  imr_address;            /* local IP address of interface */
+       int             imr_ifindex;            /* Interface index */
+};
+
+struct ip_mreq_source {
+       __be32          imr_multiaddr;
+       __be32          imr_interface;
+       __be32          imr_sourceaddr;
+};
+
+struct ip_msfilter {
+       __be32          imsf_multiaddr;
+       __be32          imsf_interface;
+       __u32           imsf_fmode;
+       __u32           imsf_numsrc;
+       __be32          imsf_slist[1];
+};
+
+#define IP_MSFILTER_SIZE(numsrc) \
+       (sizeof(struct ip_msfilter) - sizeof(__u32) \
+       + (numsrc) * sizeof(__u32))
+
+struct group_req {
+       __u32                            gr_interface;  /* interface index */
+       struct __kernel_sockaddr_storage gr_group;      /* group address */
+};
+
+struct group_source_req {
+       __u32                            gsr_interface; /* interface index */
+       struct __kernel_sockaddr_storage gsr_group;     /* group address */
+       struct __kernel_sockaddr_storage gsr_source;    /* source address */
+};
+
+struct group_filter {
+       __u32                            gf_interface;  /* interface index */
+       struct __kernel_sockaddr_storage gf_group;      /* multicast address */
+       __u32                            gf_fmode;      /* filter mode */
+       __u32                            gf_numsrc;     /* number of sources */
+       struct __kernel_sockaddr_storage gf_slist[1];   /* interface index */
+};
+
+#define GROUP_FILTER_SIZE(numsrc) \
+       (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \
+       + (numsrc) * sizeof(struct __kernel_sockaddr_storage))
+#endif
+
+#if __UAPI_DEF_IN_PKTINFO
+struct in_pktinfo {
+       int             ipi_ifindex;
+       struct in_addr  ipi_spec_dst;
+       struct in_addr  ipi_addr;
+};
+#endif
+
+/* Structure describing an Internet (IP) socket address. */
+#if  __UAPI_DEF_SOCKADDR_IN
+#define __SOCK_SIZE__  16              /* sizeof(struct sockaddr)      */
+struct sockaddr_in {
+  __kernel_sa_family_t sin_family;     /* Address family               */
+  __be16               sin_port;       /* Port number                  */
+  struct in_addr       sin_addr;       /* Internet address             */
+
+  /* Pad to size of `struct sockaddr'. */
+  unsigned char                __pad[__SOCK_SIZE__ - sizeof(short int) -
+                       sizeof(unsigned short int) - sizeof(struct in_addr)];
+};
+#define sin_zero       __pad           /* for BSD UNIX comp. -FvK      */
+#endif
+
+#if __UAPI_DEF_IN_CLASS
+/*
+ * Definitions of the bits in an Internet address integer.
+ * On subnets, host and network parts are found according
+ * to the subnet mask, not these masks.
+ */
+#define        IN_CLASSA(a)            ((((long int) (a)) & 0x80000000) == 0)
+#define        IN_CLASSA_NET           0xff000000
+#define        IN_CLASSA_NSHIFT        24
+#define        IN_CLASSA_HOST          (0xffffffff & ~IN_CLASSA_NET)
+#define        IN_CLASSA_MAX           128
+
+#define        IN_CLASSB(a)            ((((long int) (a)) & 0xc0000000) == 0x80000000)
+#define        IN_CLASSB_NET           0xffff0000
+#define        IN_CLASSB_NSHIFT        16
+#define        IN_CLASSB_HOST          (0xffffffff & ~IN_CLASSB_NET)
+#define        IN_CLASSB_MAX           65536
+
+#define        IN_CLASSC(a)            ((((long int) (a)) & 0xe0000000) == 0xc0000000)
+#define        IN_CLASSC_NET           0xffffff00
+#define        IN_CLASSC_NSHIFT        8
+#define        IN_CLASSC_HOST          (0xffffffff & ~IN_CLASSC_NET)
+
+#define        IN_CLASSD(a)            ((((long int) (a)) & 0xf0000000) == 0xe0000000)
+#define        IN_MULTICAST(a)         IN_CLASSD(a)
+#define IN_MULTICAST_NET       0xF0000000
+
+#define        IN_EXPERIMENTAL(a)      ((((long int) (a)) & 0xf0000000) == 0xf0000000)
+#define        IN_BADCLASS(a)          IN_EXPERIMENTAL((a))
+
+/* Address to accept any incoming messages. */
+#define        INADDR_ANY              ((unsigned long int) 0x00000000)
+
+/* Address to send to all hosts. */
+#define        INADDR_BROADCAST        ((unsigned long int) 0xffffffff)
+
+/* Address indicating an error return. */
+#define        INADDR_NONE             ((unsigned long int) 0xffffffff)
+
+/* Network number for local host loopback. */
+#define        IN_LOOPBACKNET          127
+
+/* Address to loopback in software to local host.  */
+#define        INADDR_LOOPBACK         0x7f000001      /* 127.0.0.1   */
+#define        IN_LOOPBACK(a)          ((((long int) (a)) & 0xff000000) == 0x7f000000)
+
+/* Defines for Multicast INADDR */
+#define INADDR_UNSPEC_GROUP    0xe0000000U     /* 224.0.0.0   */
+#define INADDR_ALLHOSTS_GROUP  0xe0000001U     /* 224.0.0.1   */
+#define INADDR_ALLRTRS_GROUP    0xe0000002U    /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  0xe00000ffU    /* 224.0.0.255 */
+#endif
+
+/* <asm/byteorder.h> contains the htonl type stuff.. */
+#include <asm/byteorder.h> 
+
+
+#endif /* _LINUX_IN_H */
diff --git a/lib/libdss-include/include/linux/in6.h b/lib/libdss-include/include/linux/in6.h
new file mode 100644 (file)
index 0000000..994f4c2
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ *     Types and definitions for AF_INET6 
+ *     Linux INET6 implementation 
+ *
+ *     Authors:
+ *     Pedro Roque             <roque@di.fc.ul.pt>     
+ *
+ *     Sources:
+ *     IPv6 Program Interfaces for BSD Systems
+ *      <draft-ietf-ipngwg-bsd-api-05.txt>
+ *
+ *     Advanced Sockets API for IPv6
+ *     <draft-stevens-advanced-api-00.txt>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IN6_H
+#define _LINUX_IN6_H
+
+#include <linux/types.h>
+#include <linux/libc-compat.h>
+
+/*
+ *     IPv6 address structure
+ */
+
+#if __UAPI_DEF_IN6_ADDR
+struct in6_addr {
+       union {
+               __u8            u6_addr8[16];
+#if __UAPI_DEF_IN6_ADDR_ALT
+               __be16          u6_addr16[8];
+               __be32          u6_addr32[4];
+#endif
+       } in6_u;
+#define s6_addr                        in6_u.u6_addr8
+#if __UAPI_DEF_IN6_ADDR_ALT
+#define s6_addr16              in6_u.u6_addr16
+#define s6_addr32              in6_u.u6_addr32
+#endif
+};
+#endif /* __UAPI_DEF_IN6_ADDR */
+
+#if __UAPI_DEF_SOCKADDR_IN6
+struct sockaddr_in6 {
+       unsigned short int      sin6_family;    /* AF_INET6 */
+       __be16                  sin6_port;      /* Transport layer port # */
+       __be32                  sin6_flowinfo;  /* IPv6 flow information */
+       struct in6_addr         sin6_addr;      /* IPv6 address */
+       __u32                   sin6_scope_id;  /* scope id (new in RFC2553) */
+};
+#endif /* __UAPI_DEF_SOCKADDR_IN6 */
+
+#if __UAPI_DEF_IPV6_MREQ
+struct ipv6_mreq {
+       /* IPv6 multicast address of group */
+       struct in6_addr ipv6mr_multiaddr;
+
+       /* local IPv6 address of interface */
+       int             ipv6mr_ifindex;
+};
+#endif /* __UAPI_DEF_IVP6_MREQ */
+
+#define ipv6mr_acaddr  ipv6mr_multiaddr
+
+struct in6_flowlabel_req {
+       struct in6_addr flr_dst;
+       __be32  flr_label;
+       __u8    flr_action;
+       __u8    flr_share;
+       __u16   flr_flags;
+       __u16   flr_expires;
+       __u16   flr_linger;
+       __u32   __flr_pad;
+       /* Options in format of IPV6_PKTOPTIONS */
+};
+
+#define IPV6_FL_A_GET  0
+#define IPV6_FL_A_PUT  1
+#define IPV6_FL_A_RENEW        2
+
+#define IPV6_FL_F_CREATE       1
+#define IPV6_FL_F_EXCL         2
+#define IPV6_FL_F_REFLECT      4
+#define IPV6_FL_F_REMOTE       8
+
+#define IPV6_FL_S_NONE         0
+#define IPV6_FL_S_EXCL         1
+#define IPV6_FL_S_PROCESS      2
+#define IPV6_FL_S_USER         3
+#define IPV6_FL_S_ANY          255
+
+
+/*
+ *     Bitmask constant declarations to help applications select out the 
+ *     flow label and priority fields.
+ *
+ *     Note that this are in host byte order while the flowinfo field of
+ *     sockaddr_in6 is in network byte order.
+ */
+
+#define IPV6_FLOWINFO_FLOWLABEL                0x000fffff
+#define IPV6_FLOWINFO_PRIORITY         0x0ff00000
+
+/* These definitions are obsolete */
+#define IPV6_PRIORITY_UNCHARACTERIZED  0x0000
+#define IPV6_PRIORITY_FILLER           0x0100
+#define IPV6_PRIORITY_UNATTENDED       0x0200
+#define IPV6_PRIORITY_RESERVED1                0x0300
+#define IPV6_PRIORITY_BULK             0x0400
+#define IPV6_PRIORITY_RESERVED2                0x0500
+#define IPV6_PRIORITY_INTERACTIVE      0x0600
+#define IPV6_PRIORITY_CONTROL          0x0700
+#define IPV6_PRIORITY_8                        0x0800
+#define IPV6_PRIORITY_9                        0x0900
+#define IPV6_PRIORITY_10               0x0a00
+#define IPV6_PRIORITY_11               0x0b00
+#define IPV6_PRIORITY_12               0x0c00
+#define IPV6_PRIORITY_13               0x0d00
+#define IPV6_PRIORITY_14               0x0e00
+#define IPV6_PRIORITY_15               0x0f00
+
+/*
+ *     IPV6 extension headers
+ */
+#if __UAPI_DEF_IPPROTO_V6
+#define IPPROTO_HOPOPTS                0       /* IPv6 hop-by-hop options      */
+#define IPPROTO_ROUTING                43      /* IPv6 routing header          */
+#define IPPROTO_FRAGMENT       44      /* IPv6 fragmentation header    */
+#define IPPROTO_ICMPV6         58      /* ICMPv6                       */
+#define IPPROTO_NONE           59      /* IPv6 no next header          */
+#define IPPROTO_DSTOPTS                60      /* IPv6 destination options     */
+#define IPPROTO_MH             135     /* IPv6 mobility header         */
+#endif /* __UAPI_DEF_IPPROTO_V6 */
+
+/*
+ *     IPv6 TLV options.
+ */
+#define IPV6_TLV_PAD1          0
+#define IPV6_TLV_PADN          1
+#define IPV6_TLV_ROUTERALERT   5
+#define IPV6_TLV_JUMBO         194
+#define IPV6_TLV_HAO           201     /* home address option */
+
+/*
+ *     IPV6 socket options
+ */
+#if __UAPI_DEF_IPV6_OPTIONS
+#define IPV6_ADDRFORM          1
+#define IPV6_2292PKTINFO       2
+#define IPV6_2292HOPOPTS       3
+#define IPV6_2292DSTOPTS       4
+#define IPV6_2292RTHDR         5
+#define IPV6_2292PKTOPTIONS    6
+#define IPV6_CHECKSUM          7
+#define IPV6_2292HOPLIMIT      8
+#define IPV6_NEXTHOP           9
+#define IPV6_AUTHHDR           10      /* obsolete */
+#define IPV6_FLOWINFO          11
+
+#define IPV6_UNICAST_HOPS      16
+#define IPV6_MULTICAST_IF      17
+#define IPV6_MULTICAST_HOPS    18
+#define IPV6_MULTICAST_LOOP    19
+#define IPV6_ADD_MEMBERSHIP    20
+#define IPV6_DROP_MEMBERSHIP   21
+#define IPV6_ROUTER_ALERT      22
+#define IPV6_MTU_DISCOVER      23
+#define IPV6_MTU               24
+#define IPV6_RECVERR           25
+#define IPV6_V6ONLY            26
+#define IPV6_JOIN_ANYCAST      27
+#define IPV6_LEAVE_ANYCAST     28
+
+/* IPV6_MTU_DISCOVER values */
+#define IPV6_PMTUDISC_DONT             0
+#define IPV6_PMTUDISC_WANT             1
+#define IPV6_PMTUDISC_DO               2
+#define IPV6_PMTUDISC_PROBE            3
+/* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4
+ * also see comments on IP_PMTUDISC_INTERFACE
+ */
+#define IPV6_PMTUDISC_INTERFACE                4
+/* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to
+ * get fragmented if they exceed the interface mtu
+ */
+#define IPV6_PMTUDISC_OMIT             5
+
+/* Flowlabel */
+#define IPV6_FLOWLABEL_MGR     32
+#define IPV6_FLOWINFO_SEND     33
+
+#define IPV6_IPSEC_POLICY      34
+#define IPV6_XFRM_POLICY       35
+#endif
+
+/*
+ * Multicast:
+ * Following socket options are shared between IPv4 and IPv6.
+ *
+ * MCAST_JOIN_GROUP            42
+ * MCAST_BLOCK_SOURCE          43
+ * MCAST_UNBLOCK_SOURCE                44
+ * MCAST_LEAVE_GROUP           45
+ * MCAST_JOIN_SOURCE_GROUP     46
+ * MCAST_LEAVE_SOURCE_GROUP    47
+ * MCAST_MSFILTER              48
+ */
+
+/*
+ * Advanced API (RFC3542) (1)
+ *
+ * Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c.
+ */
+
+#define IPV6_RECVPKTINFO       49
+#define IPV6_PKTINFO           50
+#define IPV6_RECVHOPLIMIT      51
+#define IPV6_HOPLIMIT          52
+#define IPV6_RECVHOPOPTS       53
+#define IPV6_HOPOPTS           54
+#define IPV6_RTHDRDSTOPTS      55
+#define IPV6_RECVRTHDR         56
+#define IPV6_RTHDR             57
+#define IPV6_RECVDSTOPTS       58
+#define IPV6_DSTOPTS           59
+#define IPV6_RECVPATHMTU       60
+#define IPV6_PATHMTU           61
+#define IPV6_DONTFRAG          62
+#if 0  /* not yet */
+#define IPV6_USE_MIN_MTU       63
+#endif
+
+/*
+ * Netfilter (1)
+ *
+ * Following socket options are used in ip6_tables;
+ * see include/linux/netfilter_ipv6/ip6_tables.h.
+ *
+ * IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO              64
+ * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES      65
+ */
+
+/*
+ * Advanced API (RFC3542) (2)
+ */
+#define IPV6_RECVTCLASS                66
+#define IPV6_TCLASS            67
+
+/*
+ * Netfilter (2)
+ *
+ * Following socket options are used in ip6_tables;
+ * see include/linux/netfilter_ipv6/ip6_tables.h.
+ *
+ * IP6T_SO_GET_REVISION_MATCH  68
+ * IP6T_SO_GET_REVISION_TARGET 69
+ * IP6T_SO_ORIGINAL_DST                80
+ */
+
+#define IPV6_AUTOFLOWLABEL     70
+/* RFC5014: Source address selection */
+#define IPV6_ADDR_PREFERENCES  72
+
+#define IPV6_PREFER_SRC_TMP            0x0001
+#define IPV6_PREFER_SRC_PUBLIC         0x0002
+#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
+#define IPV6_PREFER_SRC_COA            0x0004
+#define IPV6_PREFER_SRC_HOME           0x0400
+#define IPV6_PREFER_SRC_CGA            0x0008
+#define IPV6_PREFER_SRC_NONCGA         0x0800
+
+/* RFC5082: Generalized Ttl Security Mechanism */
+#define IPV6_MINHOPCOUNT               73
+
+#define IPV6_ORIGDSTADDR        74
+#define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR
+#define IPV6_TRANSPARENT        75
+#define IPV6_UNICAST_IF         76
+
+/*
+ * Multicast Routing:
+ * see include/uapi/linux/mroute6.h.
+ *
+ * MRT6_BASE                   200
+ * ...
+ * MRT6_MAX
+ */
+#endif /* _LINUX_IN6_H */
diff --git a/lib/libdss-include/include/linux/in_route.h b/lib/libdss-include/include/linux/in_route.h
new file mode 100644 (file)
index 0000000..b261b8c
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _LINUX_IN_ROUTE_H
+#define _LINUX_IN_ROUTE_H
+
+/* IPv4 routing cache flags */
+
+#define RTCF_DEAD      RTNH_F_DEAD
+#define RTCF_ONLINK    RTNH_F_ONLINK
+
+/* Obsolete flag. About to be deleted */
+#define RTCF_NOPMTUDISC RTM_F_NOPMTUDISC
+
+#define RTCF_NOTIFY    0x00010000
+#define RTCF_DIRECTDST 0x00020000 /* unused */
+#define RTCF_REDIRECTED        0x00040000
+#define RTCF_TPROXY    0x00080000 /* unused */
+
+#define RTCF_FAST      0x00200000 /* unused */
+#define RTCF_MASQ      0x00400000 /* unused */
+#define RTCF_SNAT      0x00800000 /* unused */
+#define RTCF_DOREDIRECT 0x01000000
+#define RTCF_DIRECTSRC 0x04000000
+#define RTCF_DNAT      0x08000000
+#define RTCF_BROADCAST 0x10000000
+#define RTCF_MULTICAST 0x20000000
+#define RTCF_REJECT    0x40000000 /* unused */
+#define RTCF_LOCAL     0x80000000
+
+#define RTCF_NAT       (RTCF_DNAT|RTCF_SNAT)
+
+#define RT_TOS(tos)    ((tos)&IPTOS_TOS_MASK)
+
+#endif /* _LINUX_IN_ROUTE_H */
diff --git a/lib/libdss-include/include/linux/inet_diag.h b/lib/libdss-include/include/linux/inet_diag.h
new file mode 100644 (file)
index 0000000..1db4116
--- /dev/null
@@ -0,0 +1,152 @@
+#ifndef _INET_DIAG_H_
+#define _INET_DIAG_H_
+
+#include <linux/types.h>
+
+/* Just some random number */
+#define TCPDIAG_GETSOCK 18
+#define DCCPDIAG_GETSOCK 19
+
+#define INET_DIAG_GETSOCK_MAX 24
+
+/* Socket identity */
+struct inet_diag_sockid {
+       __be16  idiag_sport;
+       __be16  idiag_dport;
+       __be32  idiag_src[4];
+       __be32  idiag_dst[4];
+       __u32   idiag_if;
+       __u32   idiag_cookie[2];
+#define INET_DIAG_NOCOOKIE (~0U)
+};
+
+/* Request structure */
+
+struct inet_diag_req {
+       __u8    idiag_family;           /* Family of addresses. */
+       __u8    idiag_src_len;
+       __u8    idiag_dst_len;
+       __u8    idiag_ext;              /* Query extended information */
+
+       struct inet_diag_sockid id;
+
+       __u32   idiag_states;           /* States to dump */
+       __u32   idiag_dbs;              /* Tables to dump (NI) */
+};
+
+struct inet_diag_req_v2 {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u8    idiag_ext;
+       __u8    pad;
+       __u32   idiag_states;
+       struct inet_diag_sockid id;
+};
+
+enum {
+       INET_DIAG_REQ_NONE,
+       INET_DIAG_REQ_BYTECODE,
+};
+
+#define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE
+
+/* Bytecode is sequence of 4 byte commands followed by variable arguments.
+ * All the commands identified by "code" are conditional jumps forward:
+ * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
+ * length of the command and its arguments.
+ */
+struct inet_diag_bc_op {
+       unsigned char   code;
+       unsigned char   yes;
+       unsigned short  no;
+};
+
+enum {
+       INET_DIAG_BC_NOP,
+       INET_DIAG_BC_JMP,
+       INET_DIAG_BC_S_GE,
+       INET_DIAG_BC_S_LE,
+       INET_DIAG_BC_D_GE,
+       INET_DIAG_BC_D_LE,
+       INET_DIAG_BC_AUTO,
+       INET_DIAG_BC_S_COND,
+       INET_DIAG_BC_D_COND,
+};
+
+struct inet_diag_hostcond {
+       __u8    family;
+       __u8    prefix_len;
+       int     port;
+       __be32  addr[0];
+};
+
+/* Base info structure. It contains socket identity (addrs/ports/cookie)
+ * and, alas, the information shown by netstat. */
+struct inet_diag_msg {
+       __u8    idiag_family;
+       __u8    idiag_state;
+       __u8    idiag_timer;
+       __u8    idiag_retrans;
+
+       struct inet_diag_sockid id;
+
+       __u32   idiag_expires;
+       __u32   idiag_rqueue;
+       __u32   idiag_wqueue;
+       __u32   idiag_uid;
+       __u32   idiag_inode;
+};
+
+/* Extensions */
+
+enum {
+       INET_DIAG_NONE,
+       INET_DIAG_MEMINFO,
+       INET_DIAG_INFO,
+       INET_DIAG_VEGASINFO,
+       INET_DIAG_CONG,
+       INET_DIAG_TOS,
+       INET_DIAG_TCLASS,
+       INET_DIAG_SKMEMINFO,
+       INET_DIAG_SHUTDOWN,
+       INET_DIAG_DCTCPINFO,
+       INET_DIAG_PROTOCOL,  /* response attribute only */
+       INET_DIAG_SKV6ONLY,
+};
+
+#define INET_DIAG_MAX INET_DIAG_SKV6ONLY
+
+/* INET_DIAG_MEM */
+
+struct inet_diag_meminfo {
+       __u32   idiag_rmem;
+       __u32   idiag_wmem;
+       __u32   idiag_fmem;
+       __u32   idiag_tmem;
+};
+
+/* INET_DIAG_VEGASINFO */
+
+struct tcpvegas_info {
+       __u32   tcpv_enabled;
+       __u32   tcpv_rttcnt;
+       __u32   tcpv_rtt;
+       __u32   tcpv_minrtt;
+};
+
+/* INET_DIAG_DCTCPINFO */
+
+struct tcp_dctcp_info {
+       __u16   dctcp_enabled;
+       __u16   dctcp_ce_state;
+       __u32   dctcp_alpha;
+       __u32   dctcp_ab_ecn;
+       __u32   dctcp_ab_tot;
+};
+
+union tcp_cc_info {
+       struct tcpvegas_info    vegas;
+       struct tcp_dctcp_info   dctcp;
+};
+#endif /* _INET_DIAG_H_ */
diff --git a/lib/libdss-include/include/linux/inotify.h b/lib/libdss-include/include/linux/inotify.h
new file mode 100644 (file)
index 0000000..44a1a27
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Inode based directory notification for Linux
+ *
+ * Copyright (C) 2005 John McCutchan
+ */
+
+#ifndef _LINUX_INOTIFY_H
+#define _LINUX_INOTIFY_H
+
+/* For O_CLOEXEC and O_NONBLOCK */
+#include <linux/fcntl.h>
+#include <linux/types.h>
+
+/*
+ * struct inotify_event - structure read from the inotify device for each event
+ *
+ * When you are watching a directory, you will receive the filename for events
+ * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd.
+ */
+struct inotify_event {
+       __s32           wd;             /* watch descriptor */
+       __u32           mask;           /* watch mask */
+       __u32           cookie;         /* cookie to synchronize two events */
+       __u32           len;            /* length (including nulls) of name */
+       char            name[0];        /* stub for possible name */
+};
+
+/* the following are legal, implemented events that user-space can watch for */
+#define IN_ACCESS              0x00000001      /* File was accessed */
+#define IN_MODIFY              0x00000002      /* File was modified */
+#define IN_ATTRIB              0x00000004      /* Metadata changed */
+#define IN_CLOSE_WRITE         0x00000008      /* Writtable file was closed */
+#define IN_CLOSE_NOWRITE       0x00000010      /* Unwrittable file closed */
+#define IN_OPEN                        0x00000020      /* File was opened */
+#define IN_MOVED_FROM          0x00000040      /* File was moved from X */
+#define IN_MOVED_TO            0x00000080      /* File was moved to Y */
+#define IN_CREATE              0x00000100      /* Subfile was created */
+#define IN_DELETE              0x00000200      /* Subfile was deleted */
+#define IN_DELETE_SELF         0x00000400      /* Self was deleted */
+#define IN_MOVE_SELF           0x00000800      /* Self was moved */
+
+/* the following are legal events.  they are sent as needed to any watch */
+#define IN_UNMOUNT             0x00002000      /* Backing fs was unmounted */
+#define IN_Q_OVERFLOW          0x00004000      /* Event queued overflowed */
+#define IN_IGNORED             0x00008000      /* File was ignored */
+
+/* helper events */
+#define IN_CLOSE               (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
+#define IN_MOVE                        (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
+
+/* special flags */
+#define IN_ONLYDIR             0x01000000      /* only watch the path if it is a directory */
+#define IN_DONT_FOLLOW         0x02000000      /* don't follow a sym link */
+#define IN_EXCL_UNLINK         0x04000000      /* exclude events on unlinked objects */
+#define IN_MASK_ADD            0x20000000      /* add to the mask of an already existing watch */
+#define IN_ISDIR               0x40000000      /* event occurred against dir */
+#define IN_ONESHOT             0x80000000      /* only send event once */
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define IN_ALL_EVENTS  (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
+                        IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
+                        IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \
+                        IN_MOVE_SELF)
+
+/* Flags for sys_inotify_init1.  */
+#define IN_CLOEXEC O_CLOEXEC
+#define IN_NONBLOCK O_NONBLOCK
+
+
+#endif /* _LINUX_INOTIFY_H */
diff --git a/lib/libdss-include/include/linux/input-event-codes.h b/lib/libdss-include/include/linux/input-event-codes.h
new file mode 100644 (file)
index 0000000..dcd34b4
--- /dev/null
@@ -0,0 +1,805 @@
+/*
+ * Input event codes
+ *
+ *    *** IMPORTANT ***
+ * This file is not only included from C-code but also from devicetree source
+ * files. As such this file MUST only contain comments and defines.
+ *
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_EVENT_CODES_H
+#define _INPUT_EVENT_CODES_H
+
+/*
+ * Device properties and quirks
+ */
+
+#define INPUT_PROP_POINTER             0x00    /* needs a pointer */
+#define INPUT_PROP_DIRECT              0x01    /* direct input devices */
+#define INPUT_PROP_BUTTONPAD           0x02    /* has button(s) under pad */
+#define INPUT_PROP_SEMI_MT             0x03    /* touch rectangle only */
+#define INPUT_PROP_TOPBUTTONPAD                0x04    /* softbuttons at top of pad */
+#define INPUT_PROP_POINTING_STICK      0x05    /* is a pointing stick */
+#define INPUT_PROP_ACCELEROMETER       0x06    /* has accelerometer */
+
+#define INPUT_PROP_MAX                 0x1f
+#define INPUT_PROP_CNT                 (INPUT_PROP_MAX + 1)
+
+/*
+ * Event types
+ */
+
+#define EV_SYN                 0x00
+#define EV_KEY                 0x01
+#define EV_REL                 0x02
+#define EV_ABS                 0x03
+#define EV_MSC                 0x04
+#define EV_SW                  0x05
+#define EV_LED                 0x11
+#define EV_SND                 0x12
+#define EV_REP                 0x14
+#define EV_FF                  0x15
+#define EV_PWR                 0x16
+#define EV_FF_STATUS           0x17
+#define EV_MAX                 0x1f
+#define EV_CNT                 (EV_MAX+1)
+
+/*
+ * Synchronization events.
+ */
+
+#define SYN_REPORT             0
+#define SYN_CONFIG             1
+#define SYN_MT_REPORT          2
+#define SYN_DROPPED            3
+#define SYN_MAX                        0xf
+#define SYN_CNT                        (SYN_MAX+1)
+
+/*
+ * Keys and buttons
+ *
+ * Most of the keys/buttons are modeled after USB HUT 1.12
+ * (see http://www.usb.org/developers/hidpage).
+ * Abbreviations in the comments:
+ * AC - Application Control
+ * AL - Application Launch Button
+ * SC - System Control
+ */
+
+#define KEY_RESERVED           0
+#define KEY_ESC                        1
+#define KEY_1                  2
+#define KEY_2                  3
+#define KEY_3                  4
+#define KEY_4                  5
+#define KEY_5                  6
+#define KEY_6                  7
+#define KEY_7                  8
+#define KEY_8                  9
+#define KEY_9                  10
+#define KEY_0                  11
+#define KEY_MINUS              12
+#define KEY_EQUAL              13
+#define KEY_BACKSPACE          14
+#define KEY_TAB                        15
+#define KEY_Q                  16
+#define KEY_W                  17
+#define KEY_E                  18
+#define KEY_R                  19
+#define KEY_T                  20
+#define KEY_Y                  21
+#define KEY_U                  22
+#define KEY_I                  23
+#define KEY_O                  24
+#define KEY_P                  25
+#define KEY_LEFTBRACE          26
+#define KEY_RIGHTBRACE         27
+#define KEY_ENTER              28
+#define KEY_LEFTCTRL           29
+#define KEY_A                  30
+#define KEY_S                  31
+#define KEY_D                  32
+#define KEY_F                  33
+#define KEY_G                  34
+#define KEY_H                  35
+#define KEY_J                  36
+#define KEY_K                  37
+#define KEY_L                  38
+#define KEY_SEMICOLON          39
+#define KEY_APOSTROPHE         40
+#define KEY_GRAVE              41
+#define KEY_LEFTSHIFT          42
+#define KEY_BACKSLASH          43
+#define KEY_Z                  44
+#define KEY_X                  45
+#define KEY_C                  46
+#define KEY_V                  47
+#define KEY_B                  48
+#define KEY_N                  49
+#define KEY_M                  50
+#define KEY_COMMA              51
+#define KEY_DOT                        52
+#define KEY_SLASH              53
+#define KEY_RIGHTSHIFT         54
+#define KEY_KPASTERISK         55
+#define KEY_LEFTALT            56
+#define KEY_SPACE              57
+#define KEY_CAPSLOCK           58
+#define KEY_F1                 59
+#define KEY_F2                 60
+#define KEY_F3                 61
+#define KEY_F4                 62
+#define KEY_F5                 63
+#define KEY_F6                 64
+#define KEY_F7                 65
+#define KEY_F8                 66
+#define KEY_F9                 67
+#define KEY_F10                        68
+#define KEY_NUMLOCK            69
+#define KEY_SCROLLLOCK         70
+#define KEY_KP7                        71
+#define KEY_KP8                        72
+#define KEY_KP9                        73
+#define KEY_KPMINUS            74
+#define KEY_KP4                        75
+#define KEY_KP5                        76
+#define KEY_KP6                        77
+#define KEY_KPPLUS             78
+#define KEY_KP1                        79
+#define KEY_KP2                        80
+#define KEY_KP3                        81
+#define KEY_KP0                        82
+#define KEY_KPDOT              83
+
+#define KEY_ZENKAKUHANKAKU     85
+#define KEY_102ND              86
+#define KEY_F11                        87
+#define KEY_F12                        88
+#define KEY_RO                 89
+#define KEY_KATAKANA           90
+#define KEY_HIRAGANA           91
+#define KEY_HENKAN             92
+#define KEY_KATAKANAHIRAGANA   93
+#define KEY_MUHENKAN           94
+#define KEY_KPJPCOMMA          95
+#define KEY_KPENTER            96
+#define KEY_RIGHTCTRL          97
+#define KEY_KPSLASH            98
+#define KEY_SYSRQ              99
+#define KEY_RIGHTALT           100
+#define KEY_LINEFEED           101
+#define KEY_HOME               102
+#define KEY_UP                 103
+#define KEY_PAGEUP             104
+#define KEY_LEFT               105
+#define KEY_RIGHT              106
+#define KEY_END                        107
+#define KEY_DOWN               108
+#define KEY_PAGEDOWN           109
+#define KEY_INSERT             110
+#define KEY_DELETE             111
+#define KEY_MACRO              112
+#define KEY_MUTE               113
+#define KEY_VOLUMEDOWN         114
+#define KEY_VOLUMEUP           115
+#define KEY_POWER              116     /* SC System Power Down */
+#define KEY_KPEQUAL            117
+#define KEY_KPPLUSMINUS                118
+#define KEY_PAUSE              119
+#define KEY_SCALE              120     /* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA            121
+#define KEY_HANGEUL            122
+#define KEY_HANGUEL            KEY_HANGEUL
+#define KEY_HANJA              123
+#define KEY_YEN                        124
+#define KEY_LEFTMETA           125
+#define KEY_RIGHTMETA          126
+#define KEY_COMPOSE            127
+
+#define KEY_STOP               128     /* AC Stop */
+#define KEY_AGAIN              129
+#define KEY_PROPS              130     /* AC Properties */
+#define KEY_UNDO               131     /* AC Undo */
+#define KEY_FRONT              132
+#define KEY_COPY               133     /* AC Copy */
+#define KEY_OPEN               134     /* AC Open */
+#define KEY_PASTE              135     /* AC Paste */
+#define KEY_FIND               136     /* AC Search */
+#define KEY_CUT                        137     /* AC Cut */
+#define KEY_HELP               138     /* AL Integrated Help Center */
+#define KEY_MENU               139     /* Menu (show menu) */
+#define KEY_CALC               140     /* AL Calculator */
+#define KEY_SETUP              141
+#define KEY_SLEEP              142     /* SC System Sleep */
+#define KEY_WAKEUP             143     /* System Wake Up */
+#define KEY_FILE               144     /* AL Local Machine Browser */
+#define KEY_SENDFILE           145
+#define KEY_DELETEFILE         146
+#define KEY_XFER               147
+#define KEY_PROG1              148
+#define KEY_PROG2              149
+#define KEY_WWW                        150     /* AL Internet Browser */
+#define KEY_MSDOS              151
+#define KEY_COFFEE             152     /* AL Terminal Lock/Screensaver */
+#define KEY_SCREENLOCK         KEY_COFFEE
+#define KEY_ROTATE_DISPLAY     153     /* Display orientation for e.g. tablets */
+#define KEY_DIRECTION          KEY_ROTATE_DISPLAY
+#define KEY_CYCLEWINDOWS       154
+#define KEY_MAIL               155
+#define KEY_BOOKMARKS          156     /* AC Bookmarks */
+#define KEY_COMPUTER           157
+#define KEY_BACK               158     /* AC Back */
+#define KEY_FORWARD            159     /* AC Forward */
+#define KEY_CLOSECD            160
+#define KEY_EJECTCD            161
+#define KEY_EJECTCLOSECD       162
+#define KEY_NEXTSONG           163
+#define KEY_PLAYPAUSE          164
+#define KEY_PREVIOUSSONG       165
+#define KEY_STOPCD             166
+#define KEY_RECORD             167
+#define KEY_REWIND             168
+#define KEY_PHONE              169     /* Media Select Telephone */
+#define KEY_ISO                        170
+#define KEY_CONFIG             171     /* AL Consumer Control Configuration */
+#define KEY_HOMEPAGE           172     /* AC Home */
+#define KEY_REFRESH            173     /* AC Refresh */
+#define KEY_EXIT               174     /* AC Exit */
+#define KEY_MOVE               175
+#define KEY_EDIT               176
+#define KEY_SCROLLUP           177
+#define KEY_SCROLLDOWN         178
+#define KEY_KPLEFTPAREN                179
+#define KEY_KPRIGHTPAREN       180
+#define KEY_NEW                        181     /* AC New */
+#define KEY_REDO               182     /* AC Redo/Repeat */
+
+#define KEY_F13                        183
+#define KEY_F14                        184
+#define KEY_F15                        185
+#define KEY_F16                        186
+#define KEY_F17                        187
+#define KEY_F18                        188
+#define KEY_F19                        189
+#define KEY_F20                        190
+#define KEY_F21                        191
+#define KEY_F22                        192
+#define KEY_F23                        193
+#define KEY_F24                        194
+
+#define KEY_PLAYCD             200
+#define KEY_PAUSECD            201
+#define KEY_PROG3              202
+#define KEY_PROG4              203
+#define KEY_DASHBOARD          204     /* AL Dashboard */
+#define KEY_SUSPEND            205
+#define KEY_CLOSE              206     /* AC Close */
+#define KEY_PLAY               207
+#define KEY_FASTFORWARD                208
+#define KEY_BASSBOOST          209
+#define KEY_PRINT              210     /* AC Print */
+#define KEY_HP                 211
+#define KEY_CAMERA             212
+#define KEY_SOUND              213
+#define KEY_QUESTION           214
+#define KEY_EMAIL              215
+#define KEY_CHAT               216
+#define KEY_SEARCH             217
+#define KEY_CONNECT            218
+#define KEY_FINANCE            219     /* AL Checkbook/Finance */
+#define KEY_SPORT              220
+#define KEY_SHOP               221
+#define KEY_ALTERASE           222
+#define KEY_CANCEL             223     /* AC Cancel */
+#define KEY_BRIGHTNESSDOWN     224
+#define KEY_BRIGHTNESSUP       225
+#define KEY_MEDIA              226
+
+#define KEY_SWITCHVIDEOMODE    227     /* Cycle between available video
+                                          outputs (Monitor/LCD/TV-out/etc) */
+#define KEY_KBDILLUMTOGGLE     228
+#define KEY_KBDILLUMDOWN       229
+#define KEY_KBDILLUMUP         230
+
+#define KEY_SEND               231     /* AC Send */
+#define KEY_REPLY              232     /* AC Reply */
+#define KEY_FORWARDMAIL                233     /* AC Forward Msg */
+#define KEY_SAVE               234     /* AC Save */
+#define KEY_DOCUMENTS          235
+
+#define KEY_BATTERY            236
+
+#define KEY_BLUETOOTH          237
+#define KEY_WLAN               238
+#define KEY_UWB                        239
+
+#define KEY_UNKNOWN            240
+
+#define KEY_VIDEO_NEXT         241     /* drive next video source */
+#define KEY_VIDEO_PREV         242     /* drive previous video source */
+#define KEY_BRIGHTNESS_CYCLE   243     /* brightness up, after max is min */
+#define KEY_BRIGHTNESS_AUTO    244     /* Set Auto Brightness: manual
+                                         brightness control is off,
+                                         rely on ambient */
+#define KEY_BRIGHTNESS_ZERO    KEY_BRIGHTNESS_AUTO
+#define KEY_DISPLAY_OFF                245     /* display device to off state */
+
+#define KEY_WWAN               246     /* Wireless WAN (LTE, UMTS, GSM, etc.) */
+#define KEY_WIMAX              KEY_WWAN
+#define KEY_RFKILL             247     /* Key that controls all radios */
+
+#define KEY_MICMUTE            248     /* Mute / unmute the microphone */
+
+/* Code 255 is reserved for special needs of AT keyboard driver */
+
+#define BTN_MISC               0x100
+#define BTN_0                  0x100
+#define BTN_1                  0x101
+#define BTN_2                  0x102
+#define BTN_3                  0x103
+#define BTN_4                  0x104
+#define BTN_5                  0x105
+#define BTN_6                  0x106
+#define BTN_7                  0x107
+#define BTN_8                  0x108
+#define BTN_9                  0x109
+
+#define BTN_MOUSE              0x110
+#define BTN_LEFT               0x110
+#define BTN_RIGHT              0x111
+#define BTN_MIDDLE             0x112
+#define BTN_SIDE               0x113
+#define BTN_EXTRA              0x114
+#define BTN_FORWARD            0x115
+#define BTN_BACK               0x116
+#define BTN_TASK               0x117
+
+#define BTN_JOYSTICK           0x120
+#define BTN_TRIGGER            0x120
+#define BTN_THUMB              0x121
+#define BTN_THUMB2             0x122
+#define BTN_TOP                        0x123
+#define BTN_TOP2               0x124
+#define BTN_PINKIE             0x125
+#define BTN_BASE               0x126
+#define BTN_BASE2              0x127
+#define BTN_BASE3              0x128
+#define BTN_BASE4              0x129
+#define BTN_BASE5              0x12a
+#define BTN_BASE6              0x12b
+#define BTN_DEAD               0x12f
+
+#define BTN_GAMEPAD            0x130
+#define BTN_SOUTH              0x130
+#define BTN_A                  BTN_SOUTH
+#define BTN_EAST               0x131
+#define BTN_B                  BTN_EAST
+#define BTN_C                  0x132
+#define BTN_NORTH              0x133
+#define BTN_X                  BTN_NORTH
+#define BTN_WEST               0x134
+#define BTN_Y                  BTN_WEST
+#define BTN_Z                  0x135
+#define BTN_TL                 0x136
+#define BTN_TR                 0x137
+#define BTN_TL2                        0x138
+#define BTN_TR2                        0x139
+#define BTN_SELECT             0x13a
+#define BTN_START              0x13b
+#define BTN_MODE               0x13c
+#define BTN_THUMBL             0x13d
+#define BTN_THUMBR             0x13e
+
+#define BTN_DIGI               0x140
+#define BTN_TOOL_PEN           0x140
+#define BTN_TOOL_RUBBER                0x141
+#define BTN_TOOL_BRUSH         0x142
+#define BTN_TOOL_PENCIL                0x143
+#define BTN_TOOL_AIRBRUSH      0x144
+#define BTN_TOOL_FINGER                0x145
+#define BTN_TOOL_MOUSE         0x146
+#define BTN_TOOL_LENS          0x147
+#define BTN_TOOL_QUINTTAP      0x148   /* Five fingers on trackpad */
+#define BTN_TOUCH              0x14a
+#define BTN_STYLUS             0x14b
+#define BTN_STYLUS2            0x14c
+#define BTN_TOOL_DOUBLETAP     0x14d
+#define BTN_TOOL_TRIPLETAP     0x14e
+#define BTN_TOOL_QUADTAP       0x14f   /* Four fingers on trackpad */
+
+#define BTN_WHEEL              0x150
+#define BTN_GEAR_DOWN          0x150
+#define BTN_GEAR_UP            0x151
+
+#define KEY_OK                 0x160
+#define KEY_SELECT             0x161
+#define KEY_GOTO               0x162
+#define KEY_CLEAR              0x163
+#define KEY_POWER2             0x164
+#define KEY_OPTION             0x165
+#define KEY_INFO               0x166   /* AL OEM Features/Tips/Tutorial */
+#define KEY_TIME               0x167
+#define KEY_VENDOR             0x168
+#define KEY_ARCHIVE            0x169
+#define KEY_PROGRAM            0x16a   /* Media Select Program Guide */
+#define KEY_CHANNEL            0x16b
+#define KEY_FAVORITES          0x16c
+#define KEY_EPG                        0x16d
+#define KEY_PVR                        0x16e   /* Media Select Home */
+#define KEY_MHP                        0x16f
+#define KEY_LANGUAGE           0x170
+#define KEY_TITLE              0x171
+#define KEY_SUBTITLE           0x172
+#define KEY_ANGLE              0x173
+#define KEY_ZOOM               0x174
+#define KEY_MODE               0x175
+#define KEY_KEYBOARD           0x176
+#define KEY_SCREEN             0x177
+#define KEY_PC                 0x178   /* Media Select Computer */
+#define KEY_TV                 0x179   /* Media Select TV */
+#define KEY_TV2                        0x17a   /* Media Select Cable */
+#define KEY_VCR                        0x17b   /* Media Select VCR */
+#define KEY_VCR2               0x17c   /* VCR Plus */
+#define KEY_SAT                        0x17d   /* Media Select Satellite */
+#define KEY_SAT2               0x17e
+#define KEY_CD                 0x17f   /* Media Select CD */
+#define KEY_TAPE               0x180   /* Media Select Tape */
+#define KEY_RADIO              0x181
+#define KEY_TUNER              0x182   /* Media Select Tuner */
+#define KEY_PLAYER             0x183
+#define KEY_TEXT               0x184
+#define KEY_DVD                        0x185   /* Media Select DVD */
+#define KEY_AUX                        0x186
+#define KEY_MP3                        0x187
+#define KEY_AUDIO              0x188   /* AL Audio Browser */
+#define KEY_VIDEO              0x189   /* AL Movie Browser */
+#define KEY_DIRECTORY          0x18a
+#define KEY_LIST               0x18b
+#define KEY_MEMO               0x18c   /* Media Select Messages */
+#define KEY_CALENDAR           0x18d
+#define KEY_RED                        0x18e
+#define KEY_GREEN              0x18f
+#define KEY_YELLOW             0x190
+#define KEY_BLUE               0x191
+#define KEY_CHANNELUP          0x192   /* Channel Increment */
+#define KEY_CHANNELDOWN                0x193   /* Channel Decrement */
+#define KEY_FIRST              0x194
+#define KEY_LAST               0x195   /* Recall Last */
+#define KEY_AB                 0x196
+#define KEY_NEXT               0x197
+#define KEY_RESTART            0x198
+#define KEY_SLOW               0x199
+#define KEY_SHUFFLE            0x19a
+#define KEY_BREAK              0x19b
+#define KEY_PREVIOUS           0x19c
+#define KEY_DIGITS             0x19d
+#define KEY_TEEN               0x19e
+#define KEY_TWEN               0x19f
+#define KEY_VIDEOPHONE         0x1a0   /* Media Select Video Phone */
+#define KEY_GAMES              0x1a1   /* Media Select Games */
+#define KEY_ZOOMIN             0x1a2   /* AC Zoom In */
+#define KEY_ZOOMOUT            0x1a3   /* AC Zoom Out */
+#define KEY_ZOOMRESET          0x1a4   /* AC Zoom */
+#define KEY_WORDPROCESSOR      0x1a5   /* AL Word Processor */
+#define KEY_EDITOR             0x1a6   /* AL Text Editor */
+#define KEY_SPREADSHEET                0x1a7   /* AL Spreadsheet */
+#define KEY_GRAPHICSEDITOR     0x1a8   /* AL Graphics Editor */
+#define KEY_PRESENTATION       0x1a9   /* AL Presentation App */
+#define KEY_DATABASE           0x1aa   /* AL Database App */
+#define KEY_NEWS               0x1ab   /* AL Newsreader */
+#define KEY_VOICEMAIL          0x1ac   /* AL Voicemail */
+#define KEY_ADDRESSBOOK                0x1ad   /* AL Contacts/Address Book */
+#define KEY_MESSENGER          0x1ae   /* AL Instant Messaging */
+#define KEY_DISPLAYTOGGLE      0x1af   /* Turn display (LCD) on and off */
+#define KEY_BRIGHTNESS_TOGGLE  KEY_DISPLAYTOGGLE
+#define KEY_SPELLCHECK         0x1b0   /* AL Spell Check */
+#define KEY_LOGOFF             0x1b1   /* AL Logoff */
+
+#define KEY_DOLLAR             0x1b2
+#define KEY_EURO               0x1b3
+
+#define KEY_FRAMEBACK          0x1b4   /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD       0x1b5
+#define KEY_CONTEXT_MENU       0x1b6   /* GenDesc - system context menu */
+#define KEY_MEDIA_REPEAT       0x1b7   /* Consumer - transport control */
+#define KEY_10CHANNELSUP       0x1b8   /* 10 channels up (10+) */
+#define KEY_10CHANNELSDOWN     0x1b9   /* 10 channels down (10-) */
+#define KEY_IMAGES             0x1ba   /* AL Image Browser */
+
+#define KEY_DEL_EOL            0x1c0
+#define KEY_DEL_EOS            0x1c1
+#define KEY_INS_LINE           0x1c2
+#define KEY_DEL_LINE           0x1c3
+
+#define KEY_FN                 0x1d0
+#define KEY_FN_ESC             0x1d1
+#define KEY_FN_F1              0x1d2
+#define KEY_FN_F2              0x1d3
+#define KEY_FN_F3              0x1d4
+#define KEY_FN_F4              0x1d5
+#define KEY_FN_F5              0x1d6
+#define KEY_FN_F6              0x1d7
+#define KEY_FN_F7              0x1d8
+#define KEY_FN_F8              0x1d9
+#define KEY_FN_F9              0x1da
+#define KEY_FN_F10             0x1db
+#define KEY_FN_F11             0x1dc
+#define KEY_FN_F12             0x1dd
+#define KEY_FN_1               0x1de
+#define KEY_FN_2               0x1df
+#define KEY_FN_D               0x1e0
+#define KEY_FN_E               0x1e1
+#define KEY_FN_F               0x1e2
+#define KEY_FN_S               0x1e3
+#define KEY_FN_B               0x1e4
+
+#define KEY_BRL_DOT1           0x1f1
+#define KEY_BRL_DOT2           0x1f2
+#define KEY_BRL_DOT3           0x1f3
+#define KEY_BRL_DOT4           0x1f4
+#define KEY_BRL_DOT5           0x1f5
+#define KEY_BRL_DOT6           0x1f6
+#define KEY_BRL_DOT7           0x1f7
+#define KEY_BRL_DOT8           0x1f8
+#define KEY_BRL_DOT9           0x1f9
+#define KEY_BRL_DOT10          0x1fa
+
+#define KEY_NUMERIC_0          0x200   /* used by phones, remote controls, */
+#define KEY_NUMERIC_1          0x201   /* and other keypads */
+#define KEY_NUMERIC_2          0x202
+#define KEY_NUMERIC_3          0x203
+#define KEY_NUMERIC_4          0x204
+#define KEY_NUMERIC_5          0x205
+#define KEY_NUMERIC_6          0x206
+#define KEY_NUMERIC_7          0x207
+#define KEY_NUMERIC_8          0x208
+#define KEY_NUMERIC_9          0x209
+#define KEY_NUMERIC_STAR       0x20a
+#define KEY_NUMERIC_POUND      0x20b
+#define KEY_NUMERIC_A          0x20c   /* Phone key A - HUT Telephony 0xb9 */
+#define KEY_NUMERIC_B          0x20d
+#define KEY_NUMERIC_C          0x20e
+#define KEY_NUMERIC_D          0x20f
+
+#define KEY_CAMERA_FOCUS       0x210
+#define KEY_WPS_BUTTON         0x211   /* WiFi Protected Setup key */
+
+#define KEY_TOUCHPAD_TOGGLE    0x212   /* Request switch touchpad on or off */
+#define KEY_TOUCHPAD_ON                0x213
+#define KEY_TOUCHPAD_OFF       0x214
+
+#define KEY_CAMERA_ZOOMIN      0x215
+#define KEY_CAMERA_ZOOMOUT     0x216
+#define KEY_CAMERA_UP          0x217
+#define KEY_CAMERA_DOWN                0x218
+#define KEY_CAMERA_LEFT                0x219
+#define KEY_CAMERA_RIGHT       0x21a
+
+#define KEY_ATTENDANT_ON       0x21b
+#define KEY_ATTENDANT_OFF      0x21c
+#define KEY_ATTENDANT_TOGGLE   0x21d   /* Attendant call on or off */
+#define KEY_LIGHTS_TOGGLE      0x21e   /* Reading light on or off */
+
+#define BTN_DPAD_UP            0x220
+#define BTN_DPAD_DOWN          0x221
+#define BTN_DPAD_LEFT          0x222
+#define BTN_DPAD_RIGHT         0x223
+
+#define KEY_ALS_TOGGLE         0x230   /* Ambient light sensor */
+
+#define KEY_BUTTONCONFIG               0x240   /* AL Button Configuration */
+#define KEY_TASKMANAGER                0x241   /* AL Task/Project Manager */
+#define KEY_JOURNAL            0x242   /* AL Log/Journal/Timecard */
+#define KEY_CONTROLPANEL               0x243   /* AL Control Panel */
+#define KEY_APPSELECT          0x244   /* AL Select Task/Application */
+#define KEY_SCREENSAVER                0x245   /* AL Screen Saver */
+#define KEY_VOICECOMMAND               0x246   /* Listening Voice Command */
+
+#define KEY_BRIGHTNESS_MIN             0x250   /* Set Brightness to Minimum */
+#define KEY_BRIGHTNESS_MAX             0x251   /* Set Brightness to Maximum */
+
+#define KEY_KBDINPUTASSIST_PREV                0x260
+#define KEY_KBDINPUTASSIST_NEXT                0x261
+#define KEY_KBDINPUTASSIST_PREVGROUP           0x262
+#define KEY_KBDINPUTASSIST_NEXTGROUP           0x263
+#define KEY_KBDINPUTASSIST_ACCEPT              0x264
+#define KEY_KBDINPUTASSIST_CANCEL              0x265
+
+#define BTN_TRIGGER_HAPPY              0x2c0
+#define BTN_TRIGGER_HAPPY1             0x2c0
+#define BTN_TRIGGER_HAPPY2             0x2c1
+#define BTN_TRIGGER_HAPPY3             0x2c2
+#define BTN_TRIGGER_HAPPY4             0x2c3
+#define BTN_TRIGGER_HAPPY5             0x2c4
+#define BTN_TRIGGER_HAPPY6             0x2c5
+#define BTN_TRIGGER_HAPPY7             0x2c6
+#define BTN_TRIGGER_HAPPY8             0x2c7
+#define BTN_TRIGGER_HAPPY9             0x2c8
+#define BTN_TRIGGER_HAPPY10            0x2c9
+#define BTN_TRIGGER_HAPPY11            0x2ca
+#define BTN_TRIGGER_HAPPY12            0x2cb
+#define BTN_TRIGGER_HAPPY13            0x2cc
+#define BTN_TRIGGER_HAPPY14            0x2cd
+#define BTN_TRIGGER_HAPPY15            0x2ce
+#define BTN_TRIGGER_HAPPY16            0x2cf
+#define BTN_TRIGGER_HAPPY17            0x2d0
+#define BTN_TRIGGER_HAPPY18            0x2d1
+#define BTN_TRIGGER_HAPPY19            0x2d2
+#define BTN_TRIGGER_HAPPY20            0x2d3
+#define BTN_TRIGGER_HAPPY21            0x2d4
+#define BTN_TRIGGER_HAPPY22            0x2d5
+#define BTN_TRIGGER_HAPPY23            0x2d6
+#define BTN_TRIGGER_HAPPY24            0x2d7
+#define BTN_TRIGGER_HAPPY25            0x2d8
+#define BTN_TRIGGER_HAPPY26            0x2d9
+#define BTN_TRIGGER_HAPPY27            0x2da
+#define BTN_TRIGGER_HAPPY28            0x2db
+#define BTN_TRIGGER_HAPPY29            0x2dc
+#define BTN_TRIGGER_HAPPY30            0x2dd
+#define BTN_TRIGGER_HAPPY31            0x2de
+#define BTN_TRIGGER_HAPPY32            0x2df
+#define BTN_TRIGGER_HAPPY33            0x2e0
+#define BTN_TRIGGER_HAPPY34            0x2e1
+#define BTN_TRIGGER_HAPPY35            0x2e2
+#define BTN_TRIGGER_HAPPY36            0x2e3
+#define BTN_TRIGGER_HAPPY37            0x2e4
+#define BTN_TRIGGER_HAPPY38            0x2e5
+#define BTN_TRIGGER_HAPPY39            0x2e6
+#define BTN_TRIGGER_HAPPY40            0x2e7
+
+/* We avoid low common keys in module aliases so they don't get huge. */
+#define KEY_MIN_INTERESTING    KEY_MUTE
+#define KEY_MAX                        0x2ff
+#define KEY_CNT                        (KEY_MAX+1)
+
+/*
+ * Relative axes
+ */
+
+#define REL_X                  0x00
+#define REL_Y                  0x01
+#define REL_Z                  0x02
+#define REL_RX                 0x03
+#define REL_RY                 0x04
+#define REL_RZ                 0x05
+#define REL_HWHEEL             0x06
+#define REL_DIAL               0x07
+#define REL_WHEEL              0x08
+#define REL_MISC               0x09
+#define REL_MAX                        0x0f
+#define REL_CNT                        (REL_MAX+1)
+
+/*
+ * Absolute axes
+ */
+
+#define ABS_X                  0x00
+#define ABS_Y                  0x01
+#define ABS_Z                  0x02
+#define ABS_RX                 0x03
+#define ABS_RY                 0x04
+#define ABS_RZ                 0x05
+#define ABS_THROTTLE           0x06
+#define ABS_RUDDER             0x07
+#define ABS_WHEEL              0x08
+#define ABS_GAS                        0x09
+#define ABS_BRAKE              0x0a
+#define ABS_HAT0X              0x10
+#define ABS_HAT0Y              0x11
+#define ABS_HAT1X              0x12
+#define ABS_HAT1Y              0x13
+#define ABS_HAT2X              0x14
+#define ABS_HAT2Y              0x15
+#define ABS_HAT3X              0x16
+#define ABS_HAT3Y              0x17
+#define ABS_PRESSURE           0x18
+#define ABS_DISTANCE           0x19
+#define ABS_TILT_X             0x1a
+#define ABS_TILT_Y             0x1b
+#define ABS_TOOL_WIDTH         0x1c
+
+#define ABS_VOLUME             0x20
+
+#define ABS_MISC               0x28
+
+#define ABS_MT_SLOT            0x2f    /* MT slot being modified */
+#define ABS_MT_TOUCH_MAJOR     0x30    /* Major axis of touching ellipse */
+#define ABS_MT_TOUCH_MINOR     0x31    /* Minor axis (omit if circular) */
+#define ABS_MT_WIDTH_MAJOR     0x32    /* Major axis of approaching ellipse */
+#define ABS_MT_WIDTH_MINOR     0x33    /* Minor axis (omit if circular) */
+#define ABS_MT_ORIENTATION     0x34    /* Ellipse orientation */
+#define ABS_MT_POSITION_X      0x35    /* Center X touch position */
+#define ABS_MT_POSITION_Y      0x36    /* Center Y touch position */
+#define ABS_MT_TOOL_TYPE       0x37    /* Type of touching device */
+#define ABS_MT_BLOB_ID         0x38    /* Group a set of packets as a blob */
+#define ABS_MT_TRACKING_ID     0x39    /* Unique ID of initiated contact */
+#define ABS_MT_PRESSURE                0x3a    /* Pressure on contact area */
+#define ABS_MT_DISTANCE                0x3b    /* Contact hover distance */
+#define ABS_MT_TOOL_X          0x3c    /* Center X tool position */
+#define ABS_MT_TOOL_Y          0x3d    /* Center Y tool position */
+
+
+#define ABS_MAX                        0x3f
+#define ABS_CNT                        (ABS_MAX+1)
+
+/*
+ * Switch events
+ */
+
+#define SW_LID                 0x00  /* set = lid shut */
+#define SW_TABLET_MODE         0x01  /* set = tablet mode */
+#define SW_HEADPHONE_INSERT    0x02  /* set = inserted */
+#define SW_RFKILL_ALL          0x03  /* rfkill master switch, type "any"
+                                        set = radio enabled */
+#define SW_RADIO               SW_RFKILL_ALL   /* deprecated */
+#define SW_MICROPHONE_INSERT   0x04  /* set = inserted */
+#define SW_DOCK                        0x05  /* set = plugged into dock */
+#define SW_LINEOUT_INSERT      0x06  /* set = inserted */
+#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */
+#define SW_VIDEOOUT_INSERT     0x08  /* set = inserted */
+#define SW_CAMERA_LENS_COVER   0x09  /* set = lens covered */
+#define SW_KEYPAD_SLIDE                0x0a  /* set = keypad slide out */
+#define SW_FRONT_PROXIMITY     0x0b  /* set = front proximity sensor active */
+#define SW_ROTATE_LOCK         0x0c  /* set = rotate locked/disabled */
+#define SW_LINEIN_INSERT       0x0d  /* set = inserted */
+#define SW_MUTE_DEVICE         0x0e  /* set = device disabled */
+#define SW_MAX                 0x0f
+#define SW_CNT                 (SW_MAX+1)
+
+/*
+ * Misc events
+ */
+
+#define MSC_SERIAL             0x00
+#define MSC_PULSELED           0x01
+#define MSC_GESTURE            0x02
+#define MSC_RAW                        0x03
+#define MSC_SCAN               0x04
+#define MSC_TIMESTAMP          0x05
+#define MSC_MAX                        0x07
+#define MSC_CNT                        (MSC_MAX+1)
+
+/*
+ * LEDs
+ */
+
+#define LED_NUML               0x00
+#define LED_CAPSL              0x01
+#define LED_SCROLLL            0x02
+#define LED_COMPOSE            0x03
+#define LED_KANA               0x04
+#define LED_SLEEP              0x05
+#define LED_SUSPEND            0x06
+#define LED_MUTE               0x07
+#define LED_MISC               0x08
+#define LED_MAIL               0x09
+#define LED_CHARGING           0x0a
+#define LED_MAX                        0x0f
+#define LED_CNT                        (LED_MAX+1)
+
+/*
+ * Autorepeat values
+ */
+
+#define REP_DELAY              0x00
+#define REP_PERIOD             0x01
+#define REP_MAX                        0x01
+#define REP_CNT                        (REP_MAX+1)
+
+/*
+ * Sounds
+ */
+
+#define SND_CLICK              0x00
+#define SND_BELL               0x01
+#define SND_TONE               0x02
+#define SND_MAX                        0x07
+#define SND_CNT                        (SND_MAX+1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/input.h b/lib/libdss-include/include/linux/input.h
new file mode 100644 (file)
index 0000000..577f4b6
--- /dev/null
@@ -0,0 +1,486 @@
+/*
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_H
+#define _INPUT_H
+
+
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <linux/types.h>
+
+#include "input-event-codes.h"
+
+/*
+ * The event structure itself
+ */
+
+struct input_event {
+       struct timeval time;
+       __u16 type;
+       __u16 code;
+       __s32 value;
+};
+
+/*
+ * Protocol version.
+ */
+
+#define EV_VERSION             0x010001
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+struct input_id {
+       __u16 bustype;
+       __u16 vendor;
+       __u16 product;
+       __u16 version;
+};
+
+/**
+ * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
+ * @value: latest reported value for the axis.
+ * @minimum: specifies minimum value for the axis.
+ * @maximum: specifies maximum value for the axis.
+ * @fuzz: specifies fuzz value that is used to filter noise from
+ *     the event stream.
+ * @flat: values that are within this value will be discarded by
+ *     joydev interface and reported as 0 instead.
+ * @resolution: specifies resolution for the values reported for
+ *     the axis.
+ *
+ * Note that input core does not clamp reported values to the
+ * [minimum, maximum] limits, such task is left to userspace.
+ *
+ * Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in
+ * units per millimeter (units/mm), resolution for rotational axes
+ * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
+ */
+struct input_absinfo {
+       __s32 value;
+       __s32 minimum;
+       __s32 maximum;
+       __s32 fuzz;
+       __s32 flat;
+       __s32 resolution;
+};
+
+/**
+ * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
+ * @scancode: scancode represented in machine-endian form.
+ * @len: length of the scancode that resides in @scancode buffer.
+ * @index: index in the keymap, may be used instead of scancode
+ * @flags: allows to specify how kernel should handle the request. For
+ *     example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
+ *     should perform lookup in keymap by @index instead of @scancode
+ * @keycode: key code assigned to this scancode
+ *
+ * The structure is used to retrieve and modify keymap data. Users have
+ * option of performing lookup either by @scancode itself or by @index
+ * in keymap entry. EVIOCGKEYCODE will also return scancode or index
+ * (depending on which element was used to perform lookup).
+ */
+struct input_keymap_entry {
+#define INPUT_KEYMAP_BY_INDEX  (1 << 0)
+       __u8  flags;
+       __u8  len;
+       __u16 index;
+       __u32 keycode;
+       __u8  scancode[32];
+};
+
+struct input_mask {
+       __u32 type;
+       __u32 codes_size;
+       __u64 codes_ptr;
+};
+
+#define EVIOCGVERSION          _IOR('E', 0x01, int)                    /* get driver version */
+#define EVIOCGID               _IOR('E', 0x02, struct input_id)        /* get device ID */
+#define EVIOCGREP              _IOR('E', 0x03, unsigned int[2])        /* get repeat settings */
+#define EVIOCSREP              _IOW('E', 0x03, unsigned int[2])        /* set repeat settings */
+
+#define EVIOCGKEYCODE          _IOR('E', 0x04, unsigned int[2])        /* get keycode */
+#define EVIOCGKEYCODE_V2       _IOR('E', 0x04, struct input_keymap_entry)
+#define EVIOCSKEYCODE          _IOW('E', 0x04, unsigned int[2])        /* set keycode */
+#define EVIOCSKEYCODE_V2       _IOW('E', 0x04, struct input_keymap_entry)
+
+#define EVIOCGNAME(len)                _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
+#define EVIOCGPHYS(len)                _IOC(_IOC_READ, 'E', 0x07, len)         /* get physical location */
+#define EVIOCGUNIQ(len)                _IOC(_IOC_READ, 'E', 0x08, len)         /* get unique identifier */
+#define EVIOCGPROP(len)                _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */
+
+/**
+ * EVIOCGMTSLOTS(len) - get MT slot values
+ * @len: size of the data buffer in bytes
+ *
+ * The ioctl buffer argument should be binary equivalent to
+ *
+ * struct input_mt_request_layout {
+ *     __u32 code;
+ *     __s32 values[num_slots];
+ * };
+ *
+ * where num_slots is the (arbitrary) number of MT slots to extract.
+ *
+ * The ioctl size argument (len) is the size of the buffer, which
+ * should satisfy len = (num_slots + 1) * sizeof(__s32).  If len is
+ * too small to fit all available slots, the first num_slots are
+ * returned.
+ *
+ * Before the call, code is set to the wanted ABS_MT event type. On
+ * return, values[] is filled with the slot values for the specified
+ * ABS_MT code.
+ *
+ * If the request code is not an ABS_MT value, -EINVAL is returned.
+ */
+#define EVIOCGMTSLOTS(len)     _IOC(_IOC_READ, 'E', 0x0a, len)
+
+#define EVIOCGKEY(len)         _IOC(_IOC_READ, 'E', 0x18, len)         /* get global key state */
+#define EVIOCGLED(len)         _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
+#define EVIOCGSND(len)         _IOC(_IOC_READ, 'E', 0x1a, len)         /* get all sounds status */
+#define EVIOCGSW(len)          _IOC(_IOC_READ, 'E', 0x1b, len)         /* get all switch states */
+
+#define EVIOCGBIT(ev,len)      _IOC(_IOC_READ, 'E', 0x20 + (ev), len)  /* get event bits */
+#define EVIOCGABS(abs)         _IOR('E', 0x40 + (abs), struct input_absinfo)   /* get abs value/limits */
+#define EVIOCSABS(abs)         _IOW('E', 0xc0 + (abs), struct input_absinfo)   /* set abs value/limits */
+
+#define EVIOCSFF               _IOW('E', 0x80, struct ff_effect)       /* send a force effect to a force feedback device */
+#define EVIOCRMFF              _IOW('E', 0x81, int)                    /* Erase a force effect */
+#define EVIOCGEFFECTS          _IOR('E', 0x84, int)                    /* Report number of effects playable at the same time */
+
+#define EVIOCGRAB              _IOW('E', 0x90, int)                    /* Grab/Release device */
+#define EVIOCREVOKE            _IOW('E', 0x91, int)                    /* Revoke device access */
+
+/**
+ * EVIOCGMASK - Retrieve current event mask
+ *
+ * This ioctl allows user to retrieve the current event mask for specific
+ * event type. The argument must be of type "struct input_mask" and
+ * specifies the event type to query, the address of the receive buffer and
+ * the size of the receive buffer.
+ *
+ * The event mask is a per-client mask that specifies which events are
+ * forwarded to the client. Each event code is represented by a single bit
+ * in the event mask. If the bit is set, the event is passed to the client
+ * normally. Otherwise, the event is filtered and will never be queued on
+ * the client's receive buffer.
+ *
+ * Event masks do not affect global state of the input device. They only
+ * affect the file descriptor they are applied to.
+ *
+ * The default event mask for a client has all bits set, i.e. all events
+ * are forwarded to the client. If the kernel is queried for an unknown
+ * event type or if the receive buffer is larger than the number of
+ * event codes known to the kernel, the kernel returns all zeroes for those
+ * codes.
+ *
+ * At maximum, codes_size bytes are copied.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
+ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
+ * does not implement the ioctl.
+ */
+#define EVIOCGMASK             _IOR('E', 0x92, struct input_mask)      /* Get event-masks */
+
+/**
+ * EVIOCSMASK - Set event mask
+ *
+ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
+ * current event mask, this changes the client's event mask for a specific
+ * type.  See EVIOCGMASK for a description of event-masks and the
+ * argument-type.
+ *
+ * This ioctl provides full forward compatibility. If the passed event type
+ * is unknown to the kernel, or if the number of event codes specified in
+ * the mask is bigger than what is known to the kernel, the ioctl is still
+ * accepted and applied. However, any unknown codes are left untouched and
+ * stay cleared. That means, the kernel always filters unknown codes
+ * regardless of what the client requests.  If the new mask doesn't cover
+ * all known event-codes, all remaining codes are automatically cleared and
+ * thus filtered.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
+ * returned if the receive-buffer points to invalid memory. EINVAL is returned
+ * if the kernel does not implement the ioctl.
+ */
+#define EVIOCSMASK             _IOW('E', 0x93, struct input_mask)      /* Set event-masks */
+
+#define EVIOCSCLOCKID          _IOW('E', 0xa0, int)                    /* Set clockid to be used for timestamps */
+
+/*
+ * IDs.
+ */
+
+#define ID_BUS                 0
+#define ID_VENDOR              1
+#define ID_PRODUCT             2
+#define ID_VERSION             3
+
+#define BUS_PCI                        0x01
+#define BUS_ISAPNP             0x02
+#define BUS_USB                        0x03
+#define BUS_HIL                        0x04
+#define BUS_BLUETOOTH          0x05
+#define BUS_VIRTUAL            0x06
+
+#define BUS_ISA                        0x10
+#define BUS_I8042              0x11
+#define BUS_XTKBD              0x12
+#define BUS_RS232              0x13
+#define BUS_GAMEPORT           0x14
+#define BUS_PARPORT            0x15
+#define BUS_AMIGA              0x16
+#define BUS_ADB                        0x17
+#define BUS_I2C                        0x18
+#define BUS_HOST               0x19
+#define BUS_GSC                        0x1A
+#define BUS_ATARI              0x1B
+#define BUS_SPI                        0x1C
+
+/*
+ * MT_TOOL types
+ */
+#define MT_TOOL_FINGER         0
+#define MT_TOOL_PEN            1
+#define MT_TOOL_PALM           2
+#define MT_TOOL_MAX            2
+
+/*
+ * Values describing the status of a force-feedback effect
+ */
+#define FF_STATUS_STOPPED      0x00
+#define FF_STATUS_PLAYING      0x01
+#define FF_STATUS_MAX          0x01
+
+/*
+ * Structures used in ioctls to upload effects to a device
+ * They are pieces of a bigger structure (called ff_effect)
+ */
+
+/*
+ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
+ * should not be used and have unspecified results.
+ */
+
+/**
+ * struct ff_replay - defines scheduling of the force-feedback effect
+ * @length: duration of the effect
+ * @delay: delay before effect should start playing
+ */
+struct ff_replay {
+       __u16 length;
+       __u16 delay;
+};
+
+/**
+ * struct ff_trigger - defines what triggers the force-feedback effect
+ * @button: number of the button triggering the effect
+ * @interval: controls how soon the effect can be re-triggered
+ */
+struct ff_trigger {
+       __u16 button;
+       __u16 interval;
+};
+
+/**
+ * struct ff_envelope - generic force-feedback effect envelope
+ * @attack_length: duration of the attack (ms)
+ * @attack_level: level at the beginning of the attack
+ * @fade_length: duration of fade (ms)
+ * @fade_level: level at the end of fade
+ *
+ * The @attack_level and @fade_level are absolute values; when applying
+ * envelope force-feedback core will convert to positive/negative
+ * value based on polarity of the default level of the effect.
+ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
+ */
+struct ff_envelope {
+       __u16 attack_length;
+       __u16 attack_level;
+       __u16 fade_length;
+       __u16 fade_level;
+};
+
+/**
+ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
+ * @level: strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_constant_effect {
+       __s16 level;
+       struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
+ * @start_level: beginning strength of the effect; may be negative
+ * @end_level: final strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_ramp_effect {
+       __s16 start_level;
+       __s16 end_level;
+       struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_condition_effect - defines a spring or friction force-feedback effect
+ * @right_saturation: maximum level when joystick moved all way to the right
+ * @left_saturation: same for the left side
+ * @right_coeff: controls how fast the force grows when the joystick moves
+ *     to the right
+ * @left_coeff: same for the left side
+ * @deadband: size of the dead zone, where no force is produced
+ * @center: position of the dead zone
+ */
+struct ff_condition_effect {
+       __u16 right_saturation;
+       __u16 left_saturation;
+
+       __s16 right_coeff;
+       __s16 left_coeff;
+
+       __u16 deadband;
+       __s16 center;
+};
+
+/**
+ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
+ * @waveform: kind of the effect (wave)
+ * @period: period of the wave (ms)
+ * @magnitude: peak value
+ * @offset: mean value of the wave (roughly)
+ * @phase: 'horizontal' shift
+ * @envelope: envelope data
+ * @custom_len: number of samples (FF_CUSTOM only)
+ * @custom_data: buffer of samples (FF_CUSTOM only)
+ *
+ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
+ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
+ * for the time being as no driver supports it yet.
+ *
+ * Note: the data pointed by custom_data is copied by the driver.
+ * You can therefore dispose of the memory after the upload/update.
+ */
+struct ff_periodic_effect {
+       __u16 waveform;
+       __u16 period;
+       __s16 magnitude;
+       __s16 offset;
+       __u16 phase;
+
+       struct ff_envelope envelope;
+
+       __u32 custom_len;
+       __s16 *custom_data;
+};
+
+/**
+ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
+ * @strong_magnitude: magnitude of the heavy motor
+ * @weak_magnitude: magnitude of the light one
+ *
+ * Some rumble pads have two motors of different weight. Strong_magnitude
+ * represents the magnitude of the vibration generated by the heavy one.
+ */
+struct ff_rumble_effect {
+       __u16 strong_magnitude;
+       __u16 weak_magnitude;
+};
+
+/**
+ * struct ff_effect - defines force feedback effect
+ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
+ *     FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+ * @id: an unique id assigned to an effect
+ * @direction: direction of the effect
+ * @trigger: trigger conditions (struct ff_trigger)
+ * @replay: scheduling of the effect (struct ff_replay)
+ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
+ *     ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
+ *     defining effect parameters
+ *
+ * This structure is sent through ioctl from the application to the driver.
+ * To create a new effect application should set its @id to -1; the kernel
+ * will return assigned @id which can later be used to update or delete
+ * this effect.
+ *
+ * Direction of the effect is encoded as follows:
+ *     0 deg -> 0x0000 (down)
+ *     90 deg -> 0x4000 (left)
+ *     180 deg -> 0x8000 (up)
+ *     270 deg -> 0xC000 (right)
+ */
+struct ff_effect {
+       __u16 type;
+       __s16 id;
+       __u16 direction;
+       struct ff_trigger trigger;
+       struct ff_replay replay;
+
+       union {
+               struct ff_constant_effect constant;
+               struct ff_ramp_effect ramp;
+               struct ff_periodic_effect periodic;
+               struct ff_condition_effect condition[2]; /* One for each axis */
+               struct ff_rumble_effect rumble;
+       } u;
+};
+
+/*
+ * Force feedback effect types
+ */
+
+#define FF_RUMBLE      0x50
+#define FF_PERIODIC    0x51
+#define FF_CONSTANT    0x52
+#define FF_SPRING      0x53
+#define FF_FRICTION    0x54
+#define FF_DAMPER      0x55
+#define FF_INERTIA     0x56
+#define FF_RAMP                0x57
+
+#define FF_EFFECT_MIN  FF_RUMBLE
+#define FF_EFFECT_MAX  FF_RAMP
+
+/*
+ * Force feedback periodic effect types
+ */
+
+#define FF_SQUARE      0x58
+#define FF_TRIANGLE    0x59
+#define FF_SINE                0x5a
+#define FF_SAW_UP      0x5b
+#define FF_SAW_DOWN    0x5c
+#define FF_CUSTOM      0x5d
+
+#define FF_WAVEFORM_MIN        FF_SQUARE
+#define FF_WAVEFORM_MAX        FF_CUSTOM
+
+/*
+ * Set ff device properties
+ */
+
+#define FF_GAIN                0x60
+#define FF_AUTOCENTER  0x61
+
+/*
+ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
+ * cause a collision with another ff method, in this case ff->set_gain().
+ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
+ * and thus the total number of effects should never exceed FF_GAIN.
+ */
+#define FF_MAX_EFFECTS FF_GAIN
+
+#define FF_MAX         0x7f
+#define FF_CNT         (FF_MAX+1)
+
+#endif /* _INPUT_H */
diff --git a/lib/libdss-include/include/linux/ioctl.h b/lib/libdss-include/include/linux/ioctl.h
new file mode 100644 (file)
index 0000000..aa91eb3
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef _LINUX_IOCTL_H
+#define _LINUX_IOCTL_H
+
+#include <asm/ioctl.h>
+
+#endif /* _LINUX_IOCTL_H */
+
diff --git a/lib/libdss-include/include/linux/ip.h b/lib/libdss-include/include/linux/ip.h
new file mode 100644 (file)
index 0000000..adf7c12
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the IP protocol.
+ *
+ * Version:    @(#)ip.h        1.0.2   04/28/93
+ *
+ * Authors:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IP_H
+#define _LINUX_IP_H
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+#define IPTOS_TOS_MASK         0x1E
+#define IPTOS_TOS(tos)         ((tos)&IPTOS_TOS_MASK)
+#define        IPTOS_LOWDELAY          0x10
+#define        IPTOS_THROUGHPUT        0x08
+#define        IPTOS_RELIABILITY       0x04
+#define        IPTOS_MINCOST           0x02
+
+#define IPTOS_PREC_MASK                0xE0
+#define IPTOS_PREC(tos)                ((tos)&IPTOS_PREC_MASK)
+#define IPTOS_PREC_NETCONTROL           0xe0
+#define IPTOS_PREC_INTERNETCONTROL      0xc0
+#define IPTOS_PREC_CRITIC_ECP           0xa0
+#define IPTOS_PREC_FLASHOVERRIDE        0x80
+#define IPTOS_PREC_FLASH                0x60
+#define IPTOS_PREC_IMMEDIATE            0x40
+#define IPTOS_PREC_PRIORITY             0x20
+#define IPTOS_PREC_ROUTINE              0x00
+
+
+/* IP options */
+#define IPOPT_COPY             0x80
+#define IPOPT_CLASS_MASK       0x60
+#define IPOPT_NUMBER_MASK      0x1f
+
+#define        IPOPT_COPIED(o)         ((o)&IPOPT_COPY)
+#define        IPOPT_CLASS(o)          ((o)&IPOPT_CLASS_MASK)
+#define        IPOPT_NUMBER(o)         ((o)&IPOPT_NUMBER_MASK)
+
+#define        IPOPT_CONTROL           0x00
+#define        IPOPT_RESERVED1         0x20
+#define        IPOPT_MEASUREMENT       0x40
+#define        IPOPT_RESERVED2         0x60
+
+#define IPOPT_END      (0 |IPOPT_CONTROL)
+#define IPOPT_NOOP     (1 |IPOPT_CONTROL)
+#define IPOPT_SEC      (2 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_LSRR     (3 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_TIMESTAMP        (4 |IPOPT_MEASUREMENT)
+#define IPOPT_CIPSO    (6 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_RR       (7 |IPOPT_CONTROL)
+#define IPOPT_SID      (8 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_SSRR     (9 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_RA       (20|IPOPT_CONTROL|IPOPT_COPY)
+
+#define IPVERSION      4
+#define MAXTTL         255
+#define IPDEFTTL       64
+
+#define IPOPT_OPTVAL 0
+#define IPOPT_OLEN   1
+#define IPOPT_OFFSET 2
+#define IPOPT_MINOFF 4
+#define MAX_IPOPTLEN 40
+#define IPOPT_NOP IPOPT_NOOP
+#define IPOPT_EOL IPOPT_END
+#define IPOPT_TS  IPOPT_TIMESTAMP
+
+#define        IPOPT_TS_TSONLY         0               /* timestamps only */
+#define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define        IPOPT_TS_PRESPEC        3               /* specified modules only */
+
+#define IPV4_BEET_PHMAXLEN 8
+
+struct iphdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    ihl:4,
+               version:4;
+#elif defined (__BIG_ENDIAN_BITFIELD)
+       __u8    version:4,
+               ihl:4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8    tos;
+       __be16  tot_len;
+       __be16  id;
+       __be16  frag_off;
+       __u8    ttl;
+       __u8    protocol;
+       __sum16 check;
+       __be32  saddr;
+       __be32  daddr;
+       /*The options start here. */
+};
+
+
+struct ip_auth_hdr {
+       __u8  nexthdr;
+       __u8  hdrlen;           /* This one is measured in 32 bit units! */
+       __be16 reserved;
+       __be32 spi;
+       __be32 seq_no;          /* Sequence number */
+       __u8  auth_data[0];     /* Variable len but >=4. Mind the 64 bit alignment! */
+};
+
+struct ip_esp_hdr {
+       __be32 spi;
+       __be32 seq_no;          /* Sequence number */
+       __u8  enc_data[0];      /* Variable len but >=8. Mind the 64 bit alignment! */
+};
+
+struct ip_comp_hdr {
+       __u8 nexthdr;
+       __u8 flags;
+       __be16 cpi;
+};
+
+struct ip_beet_phdr {
+       __u8 nexthdr;
+       __u8 hdrlen;
+       __u8 padlen;
+       __u8 reserved;
+};
+
+/* index values for the variables in ipv4_devconf */
+enum
+{
+       IPV4_DEVCONF_FORWARDING=1,
+       IPV4_DEVCONF_MC_FORWARDING,
+       IPV4_DEVCONF_PROXY_ARP,
+       IPV4_DEVCONF_ACCEPT_REDIRECTS,
+       IPV4_DEVCONF_SECURE_REDIRECTS,
+       IPV4_DEVCONF_SEND_REDIRECTS,
+       IPV4_DEVCONF_SHARED_MEDIA,
+       IPV4_DEVCONF_RP_FILTER,
+       IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
+       IPV4_DEVCONF_BOOTP_RELAY,
+       IPV4_DEVCONF_LOG_MARTIANS,
+       IPV4_DEVCONF_TAG,
+       IPV4_DEVCONF_ARPFILTER,
+       IPV4_DEVCONF_MEDIUM_ID,
+       IPV4_DEVCONF_NOXFRM,
+       IPV4_DEVCONF_NOPOLICY,
+       IPV4_DEVCONF_FORCE_IGMP_VERSION,
+       IPV4_DEVCONF_ARP_ANNOUNCE,
+       IPV4_DEVCONF_ARP_IGNORE,
+       IPV4_DEVCONF_PROMOTE_SECONDARIES,
+       IPV4_DEVCONF_ARP_ACCEPT,
+       IPV4_DEVCONF_ARP_NOTIFY,
+       IPV4_DEVCONF_ACCEPT_LOCAL,
+       IPV4_DEVCONF_SRC_VMARK,
+       IPV4_DEVCONF_PROXY_ARP_PVLAN,
+       IPV4_DEVCONF_ROUTE_LOCALNET,
+       IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
+       IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
+       IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       __IPV4_DEVCONF_MAX
+};
+
+#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
+
+#endif /* _LINUX_IP_H */
diff --git a/lib/libdss-include/include/linux/ip6_tunnel.h b/lib/libdss-include/include/linux/ip6_tunnel.h
new file mode 100644 (file)
index 0000000..48af63c
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _IP6_TUNNEL_H
+#define _IP6_TUNNEL_H
+
+#include <linux/types.h>
+
+#define IPV6_TLV_TNL_ENCAP_LIMIT 4
+#define IPV6_DEFAULT_TNL_ENCAP_LIMIT 4
+
+/* don't add encapsulation limit if one isn't present in inner packet */
+#define IP6_TNL_F_IGN_ENCAP_LIMIT 0x1
+/* copy the traffic class field from the inner packet */
+#define IP6_TNL_F_USE_ORIG_TCLASS 0x2
+/* copy the flowlabel from the inner packet */
+#define IP6_TNL_F_USE_ORIG_FLOWLABEL 0x4
+/* being used for Mobile IPv6 */
+#define IP6_TNL_F_MIP6_DEV 0x8
+/* copy DSCP from the outer packet */
+#define IP6_TNL_F_RCV_DSCP_COPY 0x10
+/* copy fwmark from inner packet */
+#define IP6_TNL_F_USE_ORIG_FWMARK 0x20
+
+struct ip6_tnl_parm {
+       char name[IFNAMSIZ];    /* name of tunnel device */
+       int link;               /* ifindex of underlying L2 interface */
+       __u8 proto;             /* tunnel protocol */
+       __u8 encap_limit;       /* encapsulation limit for tunnel */
+       __u8 hop_limit;         /* hop limit for tunnel */
+       __be32 flowinfo;        /* traffic class and flowlabel for tunnel */
+       __u32 flags;            /* tunnel flags */
+       struct in6_addr laddr;  /* local tunnel end-point address */
+       struct in6_addr raddr;  /* remote tunnel end-point address */
+};
+
+struct ip6_tnl_parm2 {
+       char name[IFNAMSIZ];    /* name of tunnel device */
+       int link;               /* ifindex of underlying L2 interface */
+       __u8 proto;             /* tunnel protocol */
+       __u8 encap_limit;       /* encapsulation limit for tunnel */
+       __u8 hop_limit;         /* hop limit for tunnel */
+       __be32 flowinfo;        /* traffic class and flowlabel for tunnel */
+       __u32 flags;            /* tunnel flags */
+       struct in6_addr laddr;  /* local tunnel end-point address */
+       struct in6_addr raddr;  /* remote tunnel end-point address */
+
+       __be16                  i_flags;
+       __be16                  o_flags;
+       __be32                  i_key;
+       __be32                  o_key;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/ip_vs.h b/lib/libdss-include/include/linux/ip_vs.h
new file mode 100644 (file)
index 0000000..391395c
--- /dev/null
@@ -0,0 +1,453 @@
+/*
+ *      IP Virtual Server
+ *      data structure and functionality definitions
+ */
+
+#ifndef _IP_VS_H
+#define _IP_VS_H
+
+#include <linux/types.h>       /* For __beXX types in userland */
+
+#define IP_VS_VERSION_CODE     0x010201
+#define NVERSION(version)                      \
+       (version >> 16) & 0xFF,                 \
+       (version >> 8) & 0xFF,                  \
+       version & 0xFF
+
+/*
+ *      Virtual Service Flags
+ */
+#define IP_VS_SVC_F_PERSISTENT 0x0001          /* persistent port */
+#define IP_VS_SVC_F_HASHED     0x0002          /* hashed entry */
+#define IP_VS_SVC_F_ONEPACKET  0x0004          /* one-packet scheduling */
+#define IP_VS_SVC_F_SCHED1     0x0008          /* scheduler flag 1 */
+#define IP_VS_SVC_F_SCHED2     0x0010          /* scheduler flag 2 */
+#define IP_VS_SVC_F_SCHED3     0x0020          /* scheduler flag 3 */
+
+#define IP_VS_SVC_F_SCHED_SH_FALLBACK  IP_VS_SVC_F_SCHED1 /* SH fallback */
+#define IP_VS_SVC_F_SCHED_SH_PORT      IP_VS_SVC_F_SCHED2 /* SH use port */
+
+/*
+ *      Destination Server Flags
+ */
+#define IP_VS_DEST_F_AVAILABLE 0x0001          /* server is available */
+#define IP_VS_DEST_F_OVERLOAD  0x0002          /* server is overloaded */
+
+/*
+ *      IPVS sync daemon states
+ */
+#define IP_VS_STATE_NONE       0x0000          /* daemon is stopped */
+#define IP_VS_STATE_MASTER     0x0001          /* started as master */
+#define IP_VS_STATE_BACKUP     0x0002          /* started as backup */
+
+/*
+ *      IPVS socket options
+ */
+#define IP_VS_BASE_CTL         (64+1024+64)            /* base */
+
+#define IP_VS_SO_SET_NONE      IP_VS_BASE_CTL          /* just peek */
+#define IP_VS_SO_SET_INSERT    (IP_VS_BASE_CTL+1)
+#define IP_VS_SO_SET_ADD       (IP_VS_BASE_CTL+2)
+#define IP_VS_SO_SET_EDIT      (IP_VS_BASE_CTL+3)
+#define IP_VS_SO_SET_DEL       (IP_VS_BASE_CTL+4)
+#define IP_VS_SO_SET_FLUSH     (IP_VS_BASE_CTL+5)
+#define IP_VS_SO_SET_LIST      (IP_VS_BASE_CTL+6)
+#define IP_VS_SO_SET_ADDDEST   (IP_VS_BASE_CTL+7)
+#define IP_VS_SO_SET_DELDEST   (IP_VS_BASE_CTL+8)
+#define IP_VS_SO_SET_EDITDEST  (IP_VS_BASE_CTL+9)
+#define IP_VS_SO_SET_TIMEOUT   (IP_VS_BASE_CTL+10)
+#define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
+#define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
+#define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
+#define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
+#define IP_VS_SO_SET_ZERO      (IP_VS_BASE_CTL+15)
+#define IP_VS_SO_SET_MAX       IP_VS_SO_SET_ZERO
+
+#define IP_VS_SO_GET_VERSION   IP_VS_BASE_CTL
+#define IP_VS_SO_GET_INFO      (IP_VS_BASE_CTL+1)
+#define IP_VS_SO_GET_SERVICES  (IP_VS_BASE_CTL+2)
+#define IP_VS_SO_GET_SERVICE   (IP_VS_BASE_CTL+3)
+#define IP_VS_SO_GET_DESTS     (IP_VS_BASE_CTL+4)
+#define IP_VS_SO_GET_DEST      (IP_VS_BASE_CTL+5)      /* not used now */
+#define IP_VS_SO_GET_TIMEOUT   (IP_VS_BASE_CTL+6)
+#define IP_VS_SO_GET_DAEMON    (IP_VS_BASE_CTL+7)
+#define IP_VS_SO_GET_MAX       IP_VS_SO_GET_DAEMON
+
+
+/*
+ *      IPVS Connection Flags
+ *      Only flags 0..15 are sent to backup server
+ */
+#define IP_VS_CONN_F_FWD_MASK  0x0007          /* mask for the fwd methods */
+#define IP_VS_CONN_F_MASQ      0x0000          /* masquerading/NAT */
+#define IP_VS_CONN_F_LOCALNODE 0x0001          /* local node */
+#define IP_VS_CONN_F_TUNNEL    0x0002          /* tunneling */
+#define IP_VS_CONN_F_DROUTE    0x0003          /* direct routing */
+#define IP_VS_CONN_F_BYPASS    0x0004          /* cache bypass */
+#define IP_VS_CONN_F_SYNC      0x0020          /* entry created by sync */
+#define IP_VS_CONN_F_HASHED    0x0040          /* hashed entry */
+#define IP_VS_CONN_F_NOOUTPUT  0x0080          /* no output packets */
+#define IP_VS_CONN_F_INACTIVE  0x0100          /* not established */
+#define IP_VS_CONN_F_OUT_SEQ   0x0200          /* must do output seq adjust */
+#define IP_VS_CONN_F_IN_SEQ    0x0400          /* must do input seq adjust */
+#define IP_VS_CONN_F_SEQ_MASK  0x0600          /* in/out sequence mask */
+#define IP_VS_CONN_F_NO_CPORT  0x0800          /* no client port set yet */
+#define IP_VS_CONN_F_TEMPLATE  0x1000          /* template, not connection */
+#define IP_VS_CONN_F_ONE_PACKET        0x2000          /* forward only one packet */
+
+/* Initial bits allowed in backup server */
+#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
+                                 IP_VS_CONN_F_NOOUTPUT | \
+                                 IP_VS_CONN_F_INACTIVE | \
+                                 IP_VS_CONN_F_SEQ_MASK | \
+                                 IP_VS_CONN_F_NO_CPORT | \
+                                 IP_VS_CONN_F_TEMPLATE \
+                                )
+
+/* Bits allowed to update in backup server */
+#define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
+                                     IP_VS_CONN_F_SEQ_MASK)
+
+/* Flags that are not sent to backup server start from bit 16 */
+#define IP_VS_CONN_F_NFCT      (1 << 16)       /* use netfilter conntrack */
+
+/* Connection flags from destination that can be changed by user space */
+#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
+                               IP_VS_CONN_F_ONE_PACKET | \
+                               IP_VS_CONN_F_NFCT | \
+                               0)
+
+#define IP_VS_SCHEDNAME_MAXLEN 16
+#define IP_VS_PENAME_MAXLEN    16
+#define IP_VS_IFNAME_MAXLEN    16
+
+#define IP_VS_PEDATA_MAXLEN     255
+
+/*
+ *     The struct ip_vs_service_user and struct ip_vs_dest_user are
+ *     used to set IPVS rules through setsockopt.
+ */
+struct ip_vs_service_user {
+       /* virtual service addresses */
+       __u16           protocol;
+       __be32                  addr;           /* virtual ip address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* virtual service options */
+       char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
+       unsigned int            flags;          /* virtual service flags */
+       unsigned int            timeout;        /* persistent timeout in sec */
+       __be32                  netmask;        /* persistent netmask */
+};
+
+
+struct ip_vs_dest_user {
+       /* destination server address */
+       __be32                  addr;
+       __be16                  port;
+
+       /* real server options */
+       unsigned int            conn_flags;     /* connection flags */
+       int                     weight;         /* destination weight */
+
+       /* thresholds for active connections */
+       __u32           u_threshold;    /* upper threshold */
+       __u32           l_threshold;    /* lower threshold */
+};
+
+
+/*
+ *     IPVS statistics object (for user space)
+ */
+struct ip_vs_stats_user {
+       __u32                   conns;          /* connections scheduled */
+       __u32                   inpkts;         /* incoming packets */
+       __u32                   outpkts;        /* outgoing packets */
+       __u64                   inbytes;        /* incoming bytes */
+       __u64                   outbytes;       /* outgoing bytes */
+
+       __u32                   cps;            /* current connection rate */
+       __u32                   inpps;          /* current in packet rate */
+       __u32                   outpps;         /* current out packet rate */
+       __u32                   inbps;          /* current in byte rate */
+       __u32                   outbps;         /* current out byte rate */
+};
+
+
+/* The argument to IP_VS_SO_GET_INFO */
+struct ip_vs_getinfo {
+       /* version number */
+       unsigned int            version;
+
+       /* size of connection hash table */
+       unsigned int            size;
+
+       /* number of virtual services */
+       unsigned int            num_services;
+};
+
+
+/* The argument to IP_VS_SO_GET_SERVICE */
+struct ip_vs_service_entry {
+       /* which service: user fills in these */
+       __u16           protocol;
+       __be32                  addr;           /* virtual address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* service options */
+       char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
+       unsigned int            flags;          /* virtual service flags */
+       unsigned int            timeout;        /* persistent timeout */
+       __be32                  netmask;        /* persistent netmask */
+
+       /* number of real servers */
+       unsigned int            num_dests;
+
+       /* statistics */
+       struct ip_vs_stats_user stats;
+};
+
+
+struct ip_vs_dest_entry {
+       __be32                  addr;           /* destination address */
+       __be16                  port;
+       unsigned int            conn_flags;     /* connection flags */
+       int                     weight;         /* destination weight */
+
+       __u32           u_threshold;    /* upper threshold */
+       __u32           l_threshold;    /* lower threshold */
+
+       __u32           activeconns;    /* active connections */
+       __u32           inactconns;     /* inactive connections */
+       __u32           persistconns;   /* persistent connections */
+
+       /* statistics */
+       struct ip_vs_stats_user stats;
+};
+
+
+/* The argument to IP_VS_SO_GET_DESTS */
+struct ip_vs_get_dests {
+       /* which service: user fills in these */
+       __u16           protocol;
+       __be32                  addr;           /* virtual address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* number of real servers */
+       unsigned int            num_dests;
+
+       /* the real servers */
+       struct ip_vs_dest_entry entrytable[0];
+};
+
+
+/* The argument to IP_VS_SO_GET_SERVICES */
+struct ip_vs_get_services {
+       /* number of virtual services */
+       unsigned int            num_services;
+
+       /* service table */
+       struct ip_vs_service_entry entrytable[0];
+};
+
+
+/* The argument to IP_VS_SO_GET_TIMEOUT */
+struct ip_vs_timeout_user {
+       int                     tcp_timeout;
+       int                     tcp_fin_timeout;
+       int                     udp_timeout;
+};
+
+
+/* The argument to IP_VS_SO_GET_DAEMON */
+struct ip_vs_daemon_user {
+       /* sync daemon state (master/backup) */
+       int                     state;
+
+       /* multicast interface name */
+       char                    mcast_ifn[IP_VS_IFNAME_MAXLEN];
+
+       /* SyncID we belong to */
+       int                     syncid;
+};
+
+/*
+ *
+ * IPVS Generic Netlink interface definitions
+ *
+ */
+
+/* Generic Netlink family info */
+
+#define IPVS_GENL_NAME         "IPVS"
+#define IPVS_GENL_VERSION      0x1
+
+struct ip_vs_flags {
+       __u32 flags;
+       __u32 mask;
+};
+
+/* Generic Netlink command attributes */
+enum {
+       IPVS_CMD_UNSPEC = 0,
+
+       IPVS_CMD_NEW_SERVICE,           /* add service */
+       IPVS_CMD_SET_SERVICE,           /* modify service */
+       IPVS_CMD_DEL_SERVICE,           /* delete service */
+       IPVS_CMD_GET_SERVICE,           /* get service info */
+
+       IPVS_CMD_NEW_DEST,              /* add destination */
+       IPVS_CMD_SET_DEST,              /* modify destination */
+       IPVS_CMD_DEL_DEST,              /* delete destination */
+       IPVS_CMD_GET_DEST,              /* get destination info */
+
+       IPVS_CMD_NEW_DAEMON,            /* start sync daemon */
+       IPVS_CMD_DEL_DAEMON,            /* stop sync daemon */
+       IPVS_CMD_GET_DAEMON,            /* get sync daemon status */
+
+       IPVS_CMD_SET_CONFIG,            /* set config settings */
+       IPVS_CMD_GET_CONFIG,            /* get config settings */
+
+       IPVS_CMD_SET_INFO,              /* only used in GET_INFO reply */
+       IPVS_CMD_GET_INFO,              /* get general IPVS info */
+
+       IPVS_CMD_ZERO,                  /* zero all counters and stats */
+       IPVS_CMD_FLUSH,                 /* flush services and dests */
+
+       __IPVS_CMD_MAX,
+};
+
+#define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
+
+/* Attributes used in the first level of commands */
+enum {
+       IPVS_CMD_ATTR_UNSPEC = 0,
+       IPVS_CMD_ATTR_SERVICE,          /* nested service attribute */
+       IPVS_CMD_ATTR_DEST,             /* nested destination attribute */
+       IPVS_CMD_ATTR_DAEMON,           /* nested sync daemon attribute */
+       IPVS_CMD_ATTR_TIMEOUT_TCP,      /* TCP connection timeout */
+       IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,  /* TCP FIN wait timeout */
+       IPVS_CMD_ATTR_TIMEOUT_UDP,      /* UDP timeout */
+       __IPVS_CMD_ATTR_MAX,
+};
+
+#define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe a service
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
+ */
+enum {
+       IPVS_SVC_ATTR_UNSPEC = 0,
+       IPVS_SVC_ATTR_AF,               /* address family */
+       IPVS_SVC_ATTR_PROTOCOL,         /* virtual service protocol */
+       IPVS_SVC_ATTR_ADDR,             /* virtual service address */
+       IPVS_SVC_ATTR_PORT,             /* virtual service port */
+       IPVS_SVC_ATTR_FWMARK,           /* firewall mark of service */
+
+       IPVS_SVC_ATTR_SCHED_NAME,       /* name of scheduler */
+       IPVS_SVC_ATTR_FLAGS,            /* virtual service flags */
+       IPVS_SVC_ATTR_TIMEOUT,          /* persistent timeout */
+       IPVS_SVC_ATTR_NETMASK,          /* persistent netmask */
+
+       IPVS_SVC_ATTR_STATS,            /* nested attribute for service stats */
+
+       IPVS_SVC_ATTR_PE_NAME,          /* name of ct retriever */
+
+       IPVS_SVC_ATTR_STATS64,          /* nested attribute for service stats */
+
+       __IPVS_SVC_ATTR_MAX,
+};
+
+#define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe a destination (real server)
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_DEST
+ */
+enum {
+       IPVS_DEST_ATTR_UNSPEC = 0,
+       IPVS_DEST_ATTR_ADDR,            /* real server address */
+       IPVS_DEST_ATTR_PORT,            /* real server port */
+
+       IPVS_DEST_ATTR_FWD_METHOD,      /* forwarding method */
+       IPVS_DEST_ATTR_WEIGHT,          /* destination weight */
+
+       IPVS_DEST_ATTR_U_THRESH,        /* upper threshold */
+       IPVS_DEST_ATTR_L_THRESH,        /* lower threshold */
+
+       IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
+       IPVS_DEST_ATTR_INACT_CONNS,     /* inactive connections */
+       IPVS_DEST_ATTR_PERSIST_CONNS,   /* persistent connections */
+
+       IPVS_DEST_ATTR_STATS,           /* nested attribute for dest stats */
+
+       IPVS_DEST_ATTR_ADDR_FAMILY,     /* Address family of address */
+
+       IPVS_DEST_ATTR_STATS64,         /* nested attribute for dest stats */
+
+       __IPVS_DEST_ATTR_MAX,
+};
+
+#define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
+
+/*
+ * Attributes describing a sync daemon
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
+ */
+enum {
+       IPVS_DAEMON_ATTR_UNSPEC = 0,
+       IPVS_DAEMON_ATTR_STATE,         /* sync daemon state (master/backup) */
+       IPVS_DAEMON_ATTR_MCAST_IFN,     /* multicast interface name */
+       IPVS_DAEMON_ATTR_SYNC_ID,       /* SyncID we belong to */
+       IPVS_DAEMON_ATTR_SYNC_MAXLEN,   /* UDP Payload Size */
+       IPVS_DAEMON_ATTR_MCAST_GROUP,   /* IPv4 Multicast Address */
+       IPVS_DAEMON_ATTR_MCAST_GROUP6,  /* IPv6 Multicast Address */
+       IPVS_DAEMON_ATTR_MCAST_PORT,    /* Multicast Port (base) */
+       IPVS_DAEMON_ATTR_MCAST_TTL,     /* Multicast TTL */
+       __IPVS_DAEMON_ATTR_MAX,
+};
+
+#define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe service or destination entry statistics
+ *
+ * Used inside nested attributes IPVS_SVC_ATTR_STATS, IPVS_DEST_ATTR_STATS,
+ * IPVS_SVC_ATTR_STATS64 and IPVS_DEST_ATTR_STATS64.
+ */
+enum {
+       IPVS_STATS_ATTR_UNSPEC = 0,
+       IPVS_STATS_ATTR_CONNS,          /* connections scheduled */
+       IPVS_STATS_ATTR_INPKTS,         /* incoming packets */
+       IPVS_STATS_ATTR_OUTPKTS,        /* outgoing packets */
+       IPVS_STATS_ATTR_INBYTES,        /* incoming bytes */
+       IPVS_STATS_ATTR_OUTBYTES,       /* outgoing bytes */
+
+       IPVS_STATS_ATTR_CPS,            /* current connection rate */
+       IPVS_STATS_ATTR_INPPS,          /* current in packet rate */
+       IPVS_STATS_ATTR_OUTPPS,         /* current out packet rate */
+       IPVS_STATS_ATTR_INBPS,          /* current in byte rate */
+       IPVS_STATS_ATTR_OUTBPS,         /* current out byte rate */
+       __IPVS_STATS_ATTR_MAX,
+};
+
+#define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
+
+/* Attributes used in response to IPVS_CMD_GET_INFO command */
+enum {
+       IPVS_INFO_ATTR_UNSPEC = 0,
+       IPVS_INFO_ATTR_VERSION,         /* IPVS version number */
+       IPVS_INFO_ATTR_CONN_TAB_SIZE,   /* size of connection hash table */
+       __IPVS_INFO_ATTR_MAX,
+};
+
+#define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
+
+#endif /* _IP_VS_H */
diff --git a/lib/libdss-include/include/linux/ipc.h b/lib/libdss-include/include/linux/ipc.h
new file mode 100644 (file)
index 0000000..98a53a1
--- /dev/null
@@ -0,0 +1,81 @@
+#ifndef _LINUX_IPC_H
+#define _LINUX_IPC_H
+
+#include <linux/types.h>
+
+#define IPC_PRIVATE ((__kernel_key_t) 0)  
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct ipc_perm
+{
+       __kernel_key_t  key;
+       __kernel_uid_t  uid;
+       __kernel_gid_t  gid;
+       __kernel_uid_t  cuid;
+       __kernel_gid_t  cgid;
+       __kernel_mode_t mode; 
+       unsigned short  seq;
+};
+
+/* Include the definition of ipc64_perm */
+#include <asm/ipcbuf.h>
+
+/* resource get request flags */
+#define IPC_CREAT  00001000   /* create if key is nonexistent */
+#define IPC_EXCL   00002000   /* fail if key exists */
+#define IPC_NOWAIT 00004000   /* return error on wait */
+
+/* these fields are used by the DIPC package so the kernel as standard
+   should avoid using them if possible */
+   
+#define IPC_DIPC 00010000  /* make it distributed */
+#define IPC_OWN  00020000  /* this machine is the DIPC owner */
+
+/* 
+ * Control commands used with semctl, msgctl and shmctl 
+ * see also specific commands in sem.h, msg.h and shm.h
+ */
+#define IPC_RMID 0     /* remove resource */
+#define IPC_SET  1     /* set ipc_perm options */
+#define IPC_STAT 2     /* get ipc_perm options */
+#define IPC_INFO 3     /* see ipcs */
+
+/*
+ * Version flags for semctl, msgctl, and shmctl commands
+ * These are passed as bitflags or-ed with the actual command
+ */
+#define IPC_OLD 0      /* Old version (no 32-bit UID support on many
+                          architectures) */
+#define IPC_64  0x0100  /* New version (support 32-bit UIDs, bigger
+                          message sizes, etc. */
+
+/*
+ * These are used to wrap system calls.
+ *
+ * See architecture code for ugly details..
+ */
+struct ipc_kludge {
+       struct msgbuf *msgp;
+       long msgtyp;
+};
+
+#define SEMOP           1
+#define SEMGET          2
+#define SEMCTL          3
+#define SEMTIMEDOP      4
+#define MSGSND         11
+#define MSGRCV         12
+#define MSGGET         13
+#define MSGCTL         14
+#define SHMAT          21
+#define SHMDT          22
+#define SHMGET         23
+#define SHMCTL         24
+
+/* Used by the DIPC package, try and avoid reusing it */
+#define DIPC            25
+
+#define IPCCALL(version,op)    ((version)<<16 | (op))
+
+
+#endif /* _LINUX_IPC_H */
diff --git a/lib/libdss-include/include/linux/ipmi.h b/lib/libdss-include/include/linux/ipmi.h
new file mode 100644 (file)
index 0000000..9077549
--- /dev/null
@@ -0,0 +1,448 @@
+/*
+ * ipmi.h
+ *
+ * MontaVista IPMI interface
+ *
+ * Author: MontaVista Software, Inc.
+ *         Corey Minyard <minyard@mvista.com>
+ *         source@mvista.com
+ *
+ * Copyright 2002 MontaVista Software Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __LINUX_IPMI_H
+#define __LINUX_IPMI_H
+
+#include <linux/ipmi_msgdefs.h>
+
+
+/*
+ * This file describes an interface to an IPMI driver.  You have to
+ * have a fairly good understanding of IPMI to use this, so go read
+ * the specs first before actually trying to do anything.
+ *
+ * With that said, this driver provides a multi-user interface to the
+ * IPMI driver, and it allows multiple IPMI physical interfaces below
+ * the driver.  The physical interfaces bind as a lower layer on the
+ * driver.  They appear as interfaces to the application using this
+ * interface.
+ *
+ * Multi-user means that multiple applications may use the driver,
+ * send commands, receive responses, etc.  The driver keeps track of
+ * commands the user sends and tracks the responses.  The responses
+ * will go back to the application that send the command.  If the
+ * response doesn't come back in time, the driver will return a
+ * timeout error response to the application.  Asynchronous events
+ * from the BMC event queue will go to all users bound to the driver.
+ * The incoming event queue in the BMC will automatically be flushed
+ * if it becomes full and it is queried once a second to see if
+ * anything is in it.  Incoming commands to the driver will get
+ * delivered as commands.
+ */
+
+/*
+ * This is an overlay for all the address types, so it's easy to
+ * determine the actual address type.  This is kind of like addresses
+ * work for sockets.
+ */
+#define IPMI_MAX_ADDR_SIZE 32
+struct ipmi_addr {
+        /* Try to take these from the "Channel Medium Type" table
+           in section 6.5 of the IPMI 1.5 manual. */
+       int   addr_type;
+       short channel;
+       char  data[IPMI_MAX_ADDR_SIZE];
+};
+
+/*
+ * When the address is not used, the type will be set to this value.
+ * The channel is the BMC's channel number for the channel (usually
+ * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC.
+ */
+#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE        0x0c
+struct ipmi_system_interface_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char lun;
+};
+
+/* An IPMB Address. */
+#define IPMI_IPMB_ADDR_TYPE            0x01
+/* Used for broadcast get device id as described in section 17.9 of the
+   IPMI 1.5 manual. */
+#define IPMI_IPMB_BROADCAST_ADDR_TYPE  0x41
+struct ipmi_ipmb_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char slave_addr;
+       unsigned char lun;
+};
+
+/*
+ * A LAN Address.  This is an address to/from a LAN interface bridged
+ * by the BMC, not an address actually out on the LAN.
+ *
+ * A conscious decision was made here to deviate slightly from the IPMI
+ * spec.  We do not use rqSWID and rsSWID like it shows in the
+ * message.  Instead, we use remote_SWID and local_SWID.  This means
+ * that any message (a request or response) from another device will
+ * always have exactly the same address.  If you didn't do this,
+ * requests and responses from the same device would have different
+ * addresses, and that's not too cool.
+ *
+ * In this address, the remote_SWID is always the SWID the remote
+ * message came from, or the SWID we are sending the message to.
+ * local_SWID is always our SWID.  Note that having our SWID in the
+ * message is a little weird, but this is required.
+ */
+#define IPMI_LAN_ADDR_TYPE             0x04
+struct ipmi_lan_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char privilege;
+       unsigned char session_handle;
+       unsigned char remote_SWID;
+       unsigned char local_SWID;
+       unsigned char lun;
+};
+
+
+/*
+ * Channel for talking directly with the BMC.  When using this
+ * channel, This is for the system interface address type only.  FIXME
+ * - is this right, or should we use -1?
+ */
+#define IPMI_BMC_CHANNEL  0xf
+#define IPMI_NUM_CHANNELS 0x10
+
+/*
+ * Used to signify an "all channel" bitmask.  This is more than the
+ * actual number of channels because this is used in userland and
+ * will cover us if the number of channels is extended.
+ */
+#define IPMI_CHAN_ALL     (~0)
+
+
+/*
+ * A raw IPMI message without any addressing.  This covers both
+ * commands and responses.  The completion code is always the first
+ * byte of data in the response (as the spec shows the messages laid
+ * out).
+ */
+struct ipmi_msg {
+       unsigned char  netfn;
+       unsigned char  cmd;
+       unsigned short data_len;
+       unsigned char  *data;
+};
+
+struct kernel_ipmi_msg {
+       unsigned char  netfn;
+       unsigned char  cmd;
+       unsigned short data_len;
+       unsigned char  *data;
+};
+
+/*
+ * Various defines that are useful for IPMI applications.
+ */
+#define IPMI_INVALID_CMD_COMPLETION_CODE       0xC1
+#define IPMI_TIMEOUT_COMPLETION_CODE           0xC3
+#define IPMI_UNKNOWN_ERR_COMPLETION_CODE       0xff
+
+
+/*
+ * Receive types for messages coming from the receive interface.  This
+ * is used for the receive in-kernel interface and in the receive
+ * IOCTL.
+ *
+ * The "IPMI_RESPONSE_RESPNOSE_TYPE" is a little strange sounding, but
+ * it allows you to get the message results when you send a response
+ * message.
+ */
+#define IPMI_RESPONSE_RECV_TYPE                1 /* A response to a command */
+#define IPMI_ASYNC_EVENT_RECV_TYPE     2 /* Something from the event queue */
+#define IPMI_CMD_RECV_TYPE             3 /* A command from somewhere else */
+#define IPMI_RESPONSE_RESPONSE_TYPE    4 /* The response for
+                                             a sent response, giving any
+                                             error status for sending the
+                                             response.  When you send a
+                                             response message, this will
+                                             be returned. */
+#define IPMI_OEM_RECV_TYPE             5 /* The response for OEM Channels */
+
+/* Note that async events and received commands do not have a completion
+   code as the first byte of the incoming data, unlike a response. */
+
+
+/*
+ * Modes for ipmi_set_maint_mode() and the userland IOCTL.  The AUTO
+ * setting is the default and means it will be set on certain
+ * commands.  Hard setting it on and off will override automatic
+ * operation.
+ */
+#define IPMI_MAINTENANCE_MODE_AUTO     0
+#define IPMI_MAINTENANCE_MODE_OFF      1
+#define IPMI_MAINTENANCE_MODE_ON       2
+
+
+
+/*
+ * The userland interface
+ */
+
+/*
+ * The userland interface for the IPMI driver is a standard character
+ * device, with each instance of an interface registered as a minor
+ * number under the major character device.
+ *
+ * The read and write calls do not work, to get messages in and out
+ * requires ioctl calls because of the complexity of the data.  select
+ * and poll do work, so you can wait for input using the file
+ * descriptor, you just can use read to get it.
+ *
+ * In general, you send a command down to the interface and receive
+ * responses back.  You can use the msgid value to correlate commands
+ * and responses, the driver will take care of figuring out which
+ * incoming messages are for which command and find the proper msgid
+ * value to report.  You will only receive reponses for commands you
+ * send.  Asynchronous events, however, go to all open users, so you
+ * must be ready to handle these (or ignore them if you don't care).
+ *
+ * The address type depends upon the channel type.  When talking
+ * directly to the BMC (IPMC_BMC_CHANNEL), the address is ignored
+ * (IPMI_UNUSED_ADDR_TYPE).  When talking to an IPMB channel, you must
+ * supply a valid IPMB address with the addr_type set properly.
+ *
+ * When talking to normal channels, the driver takes care of the
+ * details of formatting and sending messages on that channel.  You do
+ * not, for instance, have to format a send command, you just send
+ * whatever command you want to the channel, the driver will create
+ * the send command, automatically issue receive command and get even
+ * commands, and pass those up to the proper user.
+ */
+
+
+/* The magic IOCTL value for this interface. */
+#define IPMI_IOC_MAGIC 'i'
+
+
+/* Messages sent to the interface are this format. */
+struct ipmi_req {
+       unsigned char *addr; /* Address to send the message to. */
+       unsigned int  addr_len;
+
+       long    msgid; /* The sequence number for the message.  This
+                         exact value will be reported back in the
+                         response to this request if it is a command.
+                         If it is a response, this will be used as
+                         the sequence value for the response.  */
+
+       struct ipmi_msg msg;
+};
+/*
+ * Send a message to the interfaces.  error values are:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EINVAL - The address supplied was not valid, or the command
+ *              was not allowed.
+ *   - EMSGSIZE - The message to was too large.
+ *   - ENOMEM - Buffers could not be allocated for the command.
+ */
+#define IPMICTL_SEND_COMMAND           _IOR(IPMI_IOC_MAGIC, 13,        \
+                                            struct ipmi_req)
+
+/* Messages sent to the interface with timing parameters are this
+   format. */
+struct ipmi_req_settime {
+       struct ipmi_req req;
+
+       /* See ipmi_request_settime() above for details on these
+          values. */
+       int          retries;
+       unsigned int retry_time_ms;
+};
+/*
+ * Send a message to the interfaces with timing parameters.  error values
+ * are:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EINVAL - The address supplied was not valid, or the command
+ *              was not allowed.
+ *   - EMSGSIZE - The message to was too large.
+ *   - ENOMEM - Buffers could not be allocated for the command.
+ */
+#define IPMICTL_SEND_COMMAND_SETTIME   _IOR(IPMI_IOC_MAGIC, 21,        \
+                                            struct ipmi_req_settime)
+
+/* Messages received from the interface are this format. */
+struct ipmi_recv {
+       int     recv_type; /* Is this a command, response or an
+                             asyncronous event. */
+
+       unsigned char *addr;    /* Address the message was from is put
+                                  here.  The caller must supply the
+                                  memory. */
+       unsigned int  addr_len; /* The size of the address buffer.
+                                  The caller supplies the full buffer
+                                  length, this value is updated to
+                                  the actual message length when the
+                                  message is received. */
+
+       long    msgid; /* The sequence number specified in the request
+                         if this is a response.  If this is a command,
+                         this will be the sequence number from the
+                         command. */
+
+       struct ipmi_msg msg; /* The data field must point to a buffer.
+                               The data_size field must be set to the
+                               size of the message buffer.  The
+                               caller supplies the full buffer
+                               length, this value is updated to the
+                               actual message length when the message
+                               is received. */
+};
+
+/*
+ * Receive a message.  error values:
+ *  - EAGAIN - no messages in the queue.
+ *  - EFAULT - an address supplied was invalid.
+ *  - EINVAL - The address supplied was not valid.
+ *  - EMSGSIZE - The message to was too large to fit into the message buffer,
+ *               the message will be left in the buffer. */
+#define IPMICTL_RECEIVE_MSG            _IOWR(IPMI_IOC_MAGIC, 12,       \
+                                             struct ipmi_recv)
+
+/*
+ * Like RECEIVE_MSG, but if the message won't fit in the buffer, it
+ * will truncate the contents instead of leaving the data in the
+ * buffer.
+ */
+#define IPMICTL_RECEIVE_MSG_TRUNC      _IOWR(IPMI_IOC_MAGIC, 11,       \
+                                             struct ipmi_recv)
+
+/* Register to get commands from other entities on this interface. */
+struct ipmi_cmdspec {
+       unsigned char netfn;
+       unsigned char cmd;
+};
+
+/*
+ * Register to receive a specific command.  error values:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EBUSY - The netfn/cmd supplied was already in use.
+ *   - ENOMEM - could not allocate memory for the entry.
+ */
+#define IPMICTL_REGISTER_FOR_CMD       _IOR(IPMI_IOC_MAGIC, 14,        \
+                                            struct ipmi_cmdspec)
+/*
+ * Unregister a regsitered command.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ *  - ENOENT - The netfn/cmd was not found registered for this user.
+ */
+#define IPMICTL_UNREGISTER_FOR_CMD     _IOR(IPMI_IOC_MAGIC, 15,        \
+                                            struct ipmi_cmdspec)
+
+/*
+ * Register to get commands from other entities on specific channels.
+ * This way, you can only listen on specific channels, or have messages
+ * from some channels go to one place and other channels to someplace
+ * else.  The chans field is a bitmask, (1 << channel) for each channel.
+ * It may be IPMI_CHAN_ALL for all channels.
+ */
+struct ipmi_cmdspec_chans {
+       unsigned int netfn;
+       unsigned int cmd;
+       unsigned int chans;
+};
+
+/*
+ * Register to receive a specific command on specific channels.  error values:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EBUSY - One of the netfn/cmd/chans supplied was already in use.
+ *   - ENOMEM - could not allocate memory for the entry.
+ */
+#define IPMICTL_REGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 28,        \
+                                            struct ipmi_cmdspec_chans)
+/*
+ * Unregister some netfn/cmd/chans.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ *  - ENOENT - None of the netfn/cmd/chans were found registered for this user.
+ */
+#define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29,      \
+                                            struct ipmi_cmdspec_chans)
+
+/*
+ * Set whether this interface receives events.  Note that the first
+ * user registered for events will get all pending events for the
+ * interface.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ */
+#define IPMICTL_SET_GETS_EVENTS_CMD    _IOR(IPMI_IOC_MAGIC, 16, int)
+
+/*
+ * Set and get the slave address and LUN that we will use for our
+ * source messages.  Note that this affects the interface, not just
+ * this user, so it will affect all users of this interface.  This is
+ * so some initialization code can come in and do the OEM-specific
+ * things it takes to determine your address (if not the BMC) and set
+ * it for everyone else.  You should probably leave the LUN alone.
+ */
+struct ipmi_channel_lun_address_set {
+       unsigned short channel;
+       unsigned char  value;
+};
+#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD \
+       _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD \
+       _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set)
+#define IPMICTL_SET_MY_CHANNEL_LUN_CMD \
+       _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_LUN_CMD \
+       _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set)
+/* Legacy interfaces, these only set IPMB 0. */
+#define IPMICTL_SET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 17, unsigned int)
+#define IPMICTL_GET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 18, unsigned int)
+#define IPMICTL_SET_MY_LUN_CMD         _IOR(IPMI_IOC_MAGIC, 19, unsigned int)
+#define IPMICTL_GET_MY_LUN_CMD         _IOR(IPMI_IOC_MAGIC, 20, unsigned int)
+
+/*
+ * Get/set the default timing values for an interface.  You shouldn't
+ * generally mess with these.
+ */
+struct ipmi_timing_parms {
+       int          retries;
+       unsigned int retry_time_ms;
+};
+#define IPMICTL_SET_TIMING_PARMS_CMD   _IOR(IPMI_IOC_MAGIC, 22, \
+                                            struct ipmi_timing_parms)
+#define IPMICTL_GET_TIMING_PARMS_CMD   _IOR(IPMI_IOC_MAGIC, 23, \
+                                            struct ipmi_timing_parms)
+
+/*
+ * Set the maintenance mode.  See ipmi_set_maintenance_mode() above
+ * for a description of what this does.
+ */
+#define IPMICTL_GET_MAINTENANCE_MODE_CMD       _IOR(IPMI_IOC_MAGIC, 30, int)
+#define IPMICTL_SET_MAINTENANCE_MODE_CMD       _IOW(IPMI_IOC_MAGIC, 31, int)
+
+#endif /* __LINUX_IPMI_H */
diff --git a/lib/libdss-include/include/linux/ipmi_msgdefs.h b/lib/libdss-include/include/linux/ipmi_msgdefs.h
new file mode 100644 (file)
index 0000000..df97e6e
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * ipmi_smi.h
+ *
+ * MontaVista IPMI system management interface
+ *
+ * Author: MontaVista Software, Inc.
+ *         Corey Minyard <minyard@mvista.com>
+ *         source@mvista.com
+ *
+ * Copyright 2002 MontaVista Software Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __LINUX_IPMI_MSGDEFS_H
+#define __LINUX_IPMI_MSGDEFS_H
+
+/* Various definitions for IPMI messages used by almost everything in
+   the IPMI stack. */
+
+/* NetFNs and commands used inside the IPMI stack. */
+
+#define IPMI_NETFN_SENSOR_EVENT_REQUEST                0x04
+#define IPMI_NETFN_SENSOR_EVENT_RESPONSE       0x05
+#define IPMI_GET_EVENT_RECEIVER_CMD    0x01
+
+#define IPMI_NETFN_APP_REQUEST                 0x06
+#define IPMI_NETFN_APP_RESPONSE                        0x07
+#define IPMI_GET_DEVICE_ID_CMD         0x01
+#define IPMI_COLD_RESET_CMD            0x02
+#define IPMI_WARM_RESET_CMD            0x03
+#define IPMI_CLEAR_MSG_FLAGS_CMD       0x30
+#define IPMI_GET_DEVICE_GUID_CMD       0x08
+#define IPMI_GET_MSG_FLAGS_CMD         0x31
+#define IPMI_SEND_MSG_CMD              0x34
+#define IPMI_GET_MSG_CMD               0x33
+#define IPMI_SET_BMC_GLOBAL_ENABLES_CMD        0x2e
+#define IPMI_GET_BMC_GLOBAL_ENABLES_CMD        0x2f
+#define IPMI_READ_EVENT_MSG_BUFFER_CMD 0x35
+#define IPMI_GET_CHANNEL_INFO_CMD      0x42
+
+/* Bit for BMC global enables. */
+#define IPMI_BMC_RCV_MSG_INTR     0x01
+#define IPMI_BMC_EVT_MSG_INTR     0x02
+#define IPMI_BMC_EVT_MSG_BUFF     0x04
+#define IPMI_BMC_SYS_LOG          0x08
+
+#define IPMI_NETFN_STORAGE_REQUEST             0x0a
+#define IPMI_NETFN_STORAGE_RESPONSE            0x0b
+#define IPMI_ADD_SEL_ENTRY_CMD         0x44
+
+#define IPMI_NETFN_FIRMWARE_REQUEST            0x08
+#define IPMI_NETFN_FIRMWARE_RESPONSE           0x09
+
+/* The default slave address */
+#define IPMI_BMC_SLAVE_ADDR    0x20
+
+/* The BT interface on high-end HP systems supports up to 255 bytes in
+ * one transfer.  Its "virtual" BMC supports some commands that are longer
+ * than 128 bytes.  Use the full 256, plus NetFn/LUN, Cmd, cCode, plus
+ * some overhead; it's not worth the effort to dynamically size this based
+ * on the results of the "Get BT Capabilities" command. */
+#define IPMI_MAX_MSG_LENGTH    272     /* multiple of 16 */
+
+#define IPMI_CC_NO_ERROR               0x00
+#define IPMI_NODE_BUSY_ERR             0xc0
+#define IPMI_INVALID_COMMAND_ERR       0xc1
+#define IPMI_TIMEOUT_ERR               0xc3
+#define IPMI_ERR_MSG_TRUNCATED         0xc6
+#define IPMI_REQ_LEN_INVALID_ERR       0xc7
+#define IPMI_REQ_LEN_EXCEEDED_ERR      0xc8
+#define IPMI_NOT_IN_MY_STATE_ERR       0xd5    /* IPMI 2.0 */
+#define IPMI_LOST_ARBITRATION_ERR      0x81
+#define IPMI_BUS_ERR                   0x82
+#define IPMI_NAK_ON_WRITE_ERR          0x83
+#define IPMI_ERR_UNSPECIFIED           0xff
+
+#define IPMI_CHANNEL_PROTOCOL_IPMB     1
+#define IPMI_CHANNEL_PROTOCOL_ICMB     2
+#define IPMI_CHANNEL_PROTOCOL_SMBUS    4
+#define IPMI_CHANNEL_PROTOCOL_KCS      5
+#define IPMI_CHANNEL_PROTOCOL_SMIC     6
+#define IPMI_CHANNEL_PROTOCOL_BT10     7
+#define IPMI_CHANNEL_PROTOCOL_BT15     8
+#define IPMI_CHANNEL_PROTOCOL_TMODE    9
+
+#define IPMI_CHANNEL_MEDIUM_IPMB       1
+#define IPMI_CHANNEL_MEDIUM_ICMB10     2
+#define IPMI_CHANNEL_MEDIUM_ICMB09     3
+#define IPMI_CHANNEL_MEDIUM_8023LAN    4
+#define IPMI_CHANNEL_MEDIUM_ASYNC      5
+#define IPMI_CHANNEL_MEDIUM_OTHER_LAN  6
+#define IPMI_CHANNEL_MEDIUM_PCI_SMBUS  7
+#define IPMI_CHANNEL_MEDIUM_SMBUS1     8
+#define IPMI_CHANNEL_MEDIUM_SMBUS2     9
+#define IPMI_CHANNEL_MEDIUM_USB1       10
+#define IPMI_CHANNEL_MEDIUM_USB2       11
+#define IPMI_CHANNEL_MEDIUM_SYSINTF    12
+#define IPMI_CHANNEL_MEDIUM_OEM_MIN    0x60
+#define IPMI_CHANNEL_MEDIUM_OEM_MAX    0x7f
+
+#endif /* __LINUX_IPMI_MSGDEFS_H */
diff --git a/lib/libdss-include/include/linux/ipsec.h b/lib/libdss-include/include/linux/ipsec.h
new file mode 100644 (file)
index 0000000..d17a630
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef _LINUX_IPSEC_H
+#define _LINUX_IPSEC_H
+
+/* The definitions, required to talk to KAME racoon IKE. */
+
+#include <linux/pfkeyv2.h>
+
+#define IPSEC_PORT_ANY         0
+#define IPSEC_ULPROTO_ANY      255
+#define IPSEC_PROTO_ANY                255
+
+enum {
+       IPSEC_MODE_ANY          = 0,    /* We do not support this for SA */
+       IPSEC_MODE_TRANSPORT    = 1,
+       IPSEC_MODE_TUNNEL       = 2,
+       IPSEC_MODE_BEET         = 3
+};
+
+enum {
+       IPSEC_DIR_ANY           = 0,
+       IPSEC_DIR_INBOUND       = 1,
+       IPSEC_DIR_OUTBOUND      = 2,
+       IPSEC_DIR_FWD           = 3,    /* It is our own */
+       IPSEC_DIR_MAX           = 4,
+       IPSEC_DIR_INVALID       = 5
+};
+
+enum {
+       IPSEC_POLICY_DISCARD    = 0,
+       IPSEC_POLICY_NONE       = 1,
+       IPSEC_POLICY_IPSEC      = 2,
+       IPSEC_POLICY_ENTRUST    = 3,
+       IPSEC_POLICY_BYPASS     = 4
+};
+
+enum {
+       IPSEC_LEVEL_DEFAULT     = 0,
+       IPSEC_LEVEL_USE         = 1,
+       IPSEC_LEVEL_REQUIRE     = 2,
+       IPSEC_LEVEL_UNIQUE      = 3
+};
+
+#define IPSEC_MANUAL_REQID_MAX 0x3fff
+
+#define IPSEC_REPLAYWSIZE  32
+
+#endif /* _LINUX_IPSEC_H */
diff --git a/lib/libdss-include/include/linux/ipv6.h b/lib/libdss-include/include/linux/ipv6.h
new file mode 100644 (file)
index 0000000..561e954
--- /dev/null
@@ -0,0 +1,181 @@
+#ifndef _IPV6_H
+#define _IPV6_H
+
+#include <linux/libc-compat.h>
+#include <linux/types.h>
+#include <linux/in6.h>
+#include <asm/byteorder.h>
+
+/* The latest drafts declared increase in minimal mtu up to 1280. */
+
+#define IPV6_MIN_MTU   1280
+
+/*
+ *     Advanced API
+ *     source interface/address selection, source routing, etc...
+ *     *under construction*
+ */
+
+#if __UAPI_DEF_IN6_PKTINFO
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;
+       int             ipi6_ifindex;
+};
+#endif
+
+#if __UAPI_DEF_IP6_MTUINFO
+struct ip6_mtuinfo {
+       struct sockaddr_in6     ip6m_addr;
+       __u32                   ip6m_mtu;
+};
+#endif
+
+struct in6_ifreq {
+       struct in6_addr ifr6_addr;
+       __u32           ifr6_prefixlen;
+       int             ifr6_ifindex; 
+};
+
+#define IPV6_SRCRT_STRICT      0x01    /* Deprecated; will be removed */
+#define IPV6_SRCRT_TYPE_0      0       /* Deprecated; will be removed */
+#define IPV6_SRCRT_TYPE_2      2       /* IPv6 type 2 Routing Header   */
+
+/*
+ *     routing header
+ */
+struct ipv6_rt_hdr {
+       __u8            nexthdr;
+       __u8            hdrlen;
+       __u8            type;
+       __u8            segments_left;
+
+       /*
+        *      type specific data
+        *      variable length field
+        */
+};
+
+
+struct ipv6_opt_hdr {
+       __u8            nexthdr;
+       __u8            hdrlen;
+       /* 
+        * TLV encoded option data follows.
+        */
+} __attribute__((packed));     /* required for some archs */
+
+#define ipv6_destopt_hdr ipv6_opt_hdr
+#define ipv6_hopopt_hdr  ipv6_opt_hdr
+
+/* Router Alert option values (RFC2711) */
+#define IPV6_OPT_ROUTERALERT_MLD       0x0000  /* MLD(RFC2710) */
+
+/*
+ *     routing header type 0 (used in cmsghdr struct)
+ */
+
+struct rt0_hdr {
+       struct ipv6_rt_hdr      rt_hdr;
+       __u32                   reserved;
+       struct in6_addr         addr[0];
+
+#define rt0_type               rt_hdr.type
+};
+
+/*
+ *     routing header type 2
+ */
+
+struct rt2_hdr {
+       struct ipv6_rt_hdr      rt_hdr;
+       __u32                   reserved;
+       struct in6_addr         addr;
+
+#define rt2_type               rt_hdr.type
+};
+
+/*
+ *     home address option in destination options header
+ */
+
+struct ipv6_destopt_hao {
+       __u8                    type;
+       __u8                    length;
+       struct in6_addr         addr;
+} __attribute__((packed));
+
+/*
+ *     IPv6 fixed header
+ *
+ *     BEWARE, it is incorrect. The first 4 bits of flow_lbl
+ *     are glued to priority now, forming "class".
+ */
+
+struct ipv6hdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8                    priority:4,
+                               version:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8                    version:4,
+                               priority:4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8                    flow_lbl[3];
+
+       __be16                  payload_len;
+       __u8                    nexthdr;
+       __u8                    hop_limit;
+
+       struct  in6_addr        saddr;
+       struct  in6_addr        daddr;
+};
+
+
+/* index values for the variables in ipv6_devconf */
+enum {
+       DEVCONF_FORWARDING = 0,
+       DEVCONF_HOPLIMIT,
+       DEVCONF_MTU6,
+       DEVCONF_ACCEPT_RA,
+       DEVCONF_ACCEPT_REDIRECTS,
+       DEVCONF_AUTOCONF,
+       DEVCONF_DAD_TRANSMITS,
+       DEVCONF_RTR_SOLICITS,
+       DEVCONF_RTR_SOLICIT_INTERVAL,
+       DEVCONF_RTR_SOLICIT_DELAY,
+       DEVCONF_USE_TEMPADDR,
+       DEVCONF_TEMP_VALID_LFT,
+       DEVCONF_TEMP_PREFERED_LFT,
+       DEVCONF_REGEN_MAX_RETRY,
+       DEVCONF_MAX_DESYNC_FACTOR,
+       DEVCONF_MAX_ADDRESSES,
+       DEVCONF_FORCE_MLD_VERSION,
+       DEVCONF_ACCEPT_RA_DEFRTR,
+       DEVCONF_ACCEPT_RA_PINFO,
+       DEVCONF_ACCEPT_RA_RTR_PREF,
+       DEVCONF_RTR_PROBE_INTERVAL,
+       DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
+       DEVCONF_PROXY_NDP,
+       DEVCONF_OPTIMISTIC_DAD,
+       DEVCONF_ACCEPT_SOURCE_ROUTE,
+       DEVCONF_MC_FORWARDING,
+       DEVCONF_DISABLE_IPV6,
+       DEVCONF_ACCEPT_DAD,
+       DEVCONF_FORCE_TLLAO,
+       DEVCONF_NDISC_NOTIFY,
+       DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
+       DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
+       DEVCONF_SUPPRESS_FRAG_NDISC,
+       DEVCONF_ACCEPT_RA_FROM_LOCAL,
+       DEVCONF_USE_OPTIMISTIC,
+       DEVCONF_ACCEPT_RA_MTU,
+       DEVCONF_STABLE_SECRET,
+       DEVCONF_USE_OIF_ADDRS_ONLY,
+       DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
+       DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       DEVCONF_MAX
+};
+
+
+#endif /* _IPV6_H */
diff --git a/lib/libdss-include/include/linux/ipv6_route.h b/lib/libdss-include/include/linux/ipv6_route.h
new file mode 100644 (file)
index 0000000..091a466
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ *     Linux INET6 implementation 
+ *
+ *     Authors:
+ *     Pedro Roque             <roque@di.fc.ul.pt>     
+ *
+ *     This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IPV6_ROUTE_H
+#define _LINUX_IPV6_ROUTE_H
+
+#include <linux/types.h>
+
+#define RTF_DEFAULT    0x00010000      /* default - learned via ND     */
+#define RTF_ALLONLINK  0x00020000      /* (deprecated and will be removed)
+                                          fallback, no routers on link */
+#define RTF_ADDRCONF   0x00040000      /* addrconf route - RA          */
+#define RTF_PREFIX_RT  0x00080000      /* A prefix only route - RA     */
+#define RTF_ANYCAST    0x00100000      /* Anycast                      */
+
+#define RTF_NONEXTHOP  0x00200000      /* route with no nexthop        */
+#define RTF_EXPIRES    0x00400000
+
+#define RTF_ROUTEINFO  0x00800000      /* route information - RA       */
+
+#define RTF_CACHE      0x01000000      /* cache entry                  */
+#define RTF_FLOW       0x02000000      /* flow significant route       */
+#define RTF_POLICY     0x04000000      /* policy route                 */
+
+#define RTF_PREF(pref) ((pref) << 27)
+#define RTF_PREF_MASK  0x18000000
+
+#define RTF_PCPU       0x40000000
+#define RTF_LOCAL      0x80000000
+
+
+struct in6_rtmsg {
+       struct in6_addr         rtmsg_dst;
+       struct in6_addr         rtmsg_src;
+       struct in6_addr         rtmsg_gateway;
+       __u32                   rtmsg_type;
+       __u16                   rtmsg_dst_len;
+       __u16                   rtmsg_src_len;
+       __u32                   rtmsg_metric;
+       unsigned long           rtmsg_info;
+        __u32                  rtmsg_flags;
+       int                     rtmsg_ifindex;
+};
+
+#define RTMSG_NEWDEVICE                0x11
+#define RTMSG_DELDEVICE                0x12
+#define RTMSG_NEWROUTE         0x21
+#define RTMSG_DELROUTE         0x22
+
+#define IP6_RT_PRIO_USER       1024
+#define IP6_RT_PRIO_ADDRCONF   256
+
+#endif /* _LINUX_IPV6_ROUTE_H */
diff --git a/lib/libdss-include/include/linux/ipx.h b/lib/libdss-include/include/linux/ipx.h
new file mode 100644 (file)
index 0000000..3d48014
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _IPX_H_
+#define _IPX_H_
+#include <linux/types.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#define IPX_NODE_LEN   6
+#define IPX_MTU                576
+
+struct sockaddr_ipx {
+       __kernel_sa_family_t sipx_family;
+       __be16          sipx_port;
+       __be32          sipx_network;
+       unsigned char   sipx_node[IPX_NODE_LEN];
+       __u8            sipx_type;
+       unsigned char   sipx_zero;      /* 16 byte fill */
+};
+
+/*
+ * So we can fit the extra info for SIOCSIFADDR into the address nicely
+ */
+#define sipx_special   sipx_port
+#define sipx_action    sipx_zero
+#define IPX_DLTITF     0
+#define IPX_CRTITF     1
+
+struct ipx_route_definition {
+       __be32        ipx_network;
+       __be32        ipx_router_network;
+       unsigned char ipx_router_node[IPX_NODE_LEN];
+};
+
+struct ipx_interface_definition {
+       __be32        ipx_network;
+       unsigned char ipx_device[16];
+       unsigned char ipx_dlink_type;
+#define IPX_FRAME_NONE         0
+#define IPX_FRAME_SNAP         1
+#define IPX_FRAME_8022         2
+#define IPX_FRAME_ETHERII      3
+#define IPX_FRAME_8023         4
+#define IPX_FRAME_TR_8022       5 /* obsolete */
+       unsigned char ipx_special;
+#define IPX_SPECIAL_NONE       0
+#define IPX_PRIMARY            1
+#define IPX_INTERNAL           2
+       unsigned char ipx_node[IPX_NODE_LEN];
+};
+       
+struct ipx_config_data {
+       unsigned char   ipxcfg_auto_select_primary;
+       unsigned char   ipxcfg_auto_create_interfaces;
+};
+
+/*
+ * OLD Route Definition for backward compatibility.
+ */
+
+struct ipx_route_def {
+       __be32          ipx_network;
+       __be32          ipx_router_network;
+#define IPX_ROUTE_NO_ROUTER    0
+       unsigned char   ipx_router_node[IPX_NODE_LEN];
+       unsigned char   ipx_device[16];
+       unsigned short  ipx_flags;
+#define IPX_RT_SNAP            8
+#define IPX_RT_8022            4
+#define IPX_RT_BLUEBOOK                2
+#define IPX_RT_ROUTED          1
+};
+
+#define SIOCAIPXITFCRT         (SIOCPROTOPRIVATE)
+#define SIOCAIPXPRISLT         (SIOCPROTOPRIVATE + 1)
+#define SIOCIPXCFGDATA         (SIOCPROTOPRIVATE + 2)
+#define SIOCIPXNCPCONN         (SIOCPROTOPRIVATE + 3)
+#endif /* _IPX_H_ */
diff --git a/lib/libdss-include/include/linux/irda.h b/lib/libdss-include/include/linux/irda.h
new file mode 100644 (file)
index 0000000..a014c32
--- /dev/null
@@ -0,0 +1,251 @@
+/*********************************************************************
+ *                
+ * Filename:      irda.h
+ * Version:       
+ * Description:   
+ * Status:        Experimental.
+ * Author:        Dag Brattli <dagb@cs.uit.no>
+ * Created at:    Mon Mar  8 14:06:12 1999
+ * Modified at:   Sat Dec 25 16:06:42 1999
+ * Modified by:   Dag Brattli <dagb@cs.uit.no>
+ * 
+ *     Copyright (c) 1999 Dag Brattli, All Rights Reserved.
+ *      
+ *     This program is free software; you can redistribute it and/or 
+ *     modify it under the terms of the GNU General Public License as 
+ *     published by the Free Software Foundation; either version 2 of 
+ *     the License, or (at your option) any later version.
+ *  
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     provide warranty for any of this software. This material is 
+ *     provided "AS-IS" and at no charge.
+ *
+ ********************************************************************/
+
+#ifndef KERNEL_IRDA_H
+#define KERNEL_IRDA_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* Note that this file is shared with user space. */
+
+/* Hint bit positions for first hint byte */
+#define HINT_PNP         0x01
+#define HINT_PDA         0x02
+#define HINT_COMPUTER    0x04
+#define HINT_PRINTER     0x08
+#define HINT_MODEM       0x10
+#define HINT_FAX         0x20
+#define HINT_LAN         0x40
+#define HINT_EXTENSION   0x80
+
+/* Hint bit positions for second hint byte (first extension byte) */
+#define HINT_TELEPHONY   0x01
+#define HINT_FILE_SERVER 0x02
+#define HINT_COMM        0x04
+#define HINT_MESSAGE     0x08
+#define HINT_HTTP        0x10
+#define HINT_OBEX        0x20
+
+/* IrLMP character code values */
+#define CS_ASCII         0x00
+#define        CS_ISO_8859_1    0x01
+#define        CS_ISO_8859_2    0x02
+#define        CS_ISO_8859_3    0x03
+#define        CS_ISO_8859_4    0x04
+#define        CS_ISO_8859_5    0x05
+#define        CS_ISO_8859_6    0x06
+#define        CS_ISO_8859_7    0x07
+#define        CS_ISO_8859_8    0x08
+#define        CS_ISO_8859_9    0x09
+#define CS_UNICODE       0xff
+
+/* These are the currently known dongles */
+typedef enum {
+       IRDA_TEKRAM_DONGLE       = 0,
+       IRDA_ESI_DONGLE          = 1,
+       IRDA_ACTISYS_DONGLE      = 2,
+       IRDA_ACTISYS_PLUS_DONGLE = 3,
+       IRDA_GIRBIL_DONGLE       = 4,
+       IRDA_LITELINK_DONGLE     = 5,
+       IRDA_AIRPORT_DONGLE      = 6,
+       IRDA_OLD_BELKIN_DONGLE   = 7,
+       IRDA_EP7211_IR           = 8,
+       IRDA_MCP2120_DONGLE      = 9,
+       IRDA_ACT200L_DONGLE      = 10,
+       IRDA_MA600_DONGLE        = 11,
+       IRDA_TOIM3232_DONGLE     = 12,
+       IRDA_EP7211_DONGLE       = 13,
+} IRDA_DONGLE;
+
+/* Protocol types to be used for SOCK_DGRAM */
+enum {
+       IRDAPROTO_UNITDATA = 0,
+       IRDAPROTO_ULTRA    = 1,
+       IRDAPROTO_MAX
+};
+
+#define SOL_IRLMP      266 /* Same as SOL_IRDA for now */
+#define SOL_IRTTP      266 /* Same as SOL_IRDA for now */
+
+#define IRLMP_ENUMDEVICES        1     /* Return discovery log */
+#define IRLMP_IAS_SET            2     /* Set an attribute in local IAS */
+#define IRLMP_IAS_QUERY          3     /* Query remote IAS for attribute */
+#define IRLMP_HINTS_SET          4     /* Set hint bits advertised */
+#define IRLMP_QOS_SET            5
+#define IRLMP_QOS_GET            6
+#define IRLMP_MAX_SDU_SIZE       7
+#define IRLMP_IAS_GET            8     /* Get an attribute from local IAS */
+#define IRLMP_IAS_DEL           9      /* Remove attribute from local IAS */
+#define IRLMP_HINT_MASK_SET    10      /* Set discovery filter */
+#define IRLMP_WAITDEVICE       11      /* Wait for a new discovery */
+
+#define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE /* Compatibility */
+
+#define IAS_MAX_STRING         256     /* See IrLMP 1.1, 4.3.3.2 */
+#define IAS_MAX_OCTET_STRING  1024     /* See IrLMP 1.1, 4.3.3.2 */
+#define IAS_MAX_CLASSNAME       60     /* See IrLMP 1.1, 4.3.1 */
+#define IAS_MAX_ATTRIBNAME      60     /* See IrLMP 1.1, 4.3.3.1 */
+#define IAS_MAX_ATTRIBNUMBER   256     /* See IrLMP 1.1, 4.3.3.1 */
+/* For user space backward compatibility - may be fixed in kernel 2.5.X
+ * Note : need 60+1 ('\0'), make it 64 for alignement - Jean II */
+#define IAS_EXPORT_CLASSNAME       64
+#define IAS_EXPORT_ATTRIBNAME     256
+
+/* Attribute type needed for struct irda_ias_set */
+#define IAS_MISSING 0
+#define IAS_INTEGER 1
+#define IAS_OCT_SEQ 2
+#define IAS_STRING  3
+
+#define LSAP_ANY              0xff
+
+struct sockaddr_irda {
+       __kernel_sa_family_t sir_family; /* AF_IRDA */
+       __u8        sir_lsap_sel; /* LSAP selector */
+       __u32       sir_addr;     /* Device address */
+       char        sir_name[25]; /* Usually <service>:IrDA:TinyTP */
+};
+
+struct irda_device_info {
+       __u32       saddr;    /* Address of local interface */
+       __u32       daddr;    /* Address of remote device */
+       char        info[22]; /* Description */
+       __u8        charset;  /* Charset used for description */
+       __u8        hints[2]; /* Hint bits */
+};
+
+struct irda_device_list {
+       __u32 len;
+       struct irda_device_info dev[1];
+};
+
+struct irda_ias_set {
+       char irda_class_name[IAS_EXPORT_CLASSNAME];
+       char irda_attrib_name[IAS_EXPORT_ATTRIBNAME];
+       unsigned int irda_attrib_type;
+       union {
+               unsigned int irda_attrib_int;
+               struct {
+                       unsigned short len;
+                       __u8 octet_seq[IAS_MAX_OCTET_STRING];
+               } irda_attrib_octet_seq;
+               struct {
+                       __u8 len;
+                       __u8 charset;
+                       __u8 string[IAS_MAX_STRING];
+               } irda_attrib_string;
+       } attribute;
+       __u32       daddr;    /* Address of device (for some queries only) */
+};
+
+/* Some private IOCTL's (max 16) */
+#define SIOCSDONGLE    (SIOCDEVPRIVATE + 0)
+#define SIOCGDONGLE    (SIOCDEVPRIVATE + 1)
+#define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2)
+#define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3)
+#define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4)
+#define SIOCGRECEIVING (SIOCDEVPRIVATE + 5)
+#define SIOCSMODE      (SIOCDEVPRIVATE + 6)
+#define SIOCGMODE      (SIOCDEVPRIVATE + 7)
+#define SIOCSDTRRTS    (SIOCDEVPRIVATE + 8)
+#define SIOCGQOS       (SIOCDEVPRIVATE + 9)
+
+/* No reason to include <linux/if.h> just because of this one ;-) */
+#define IRNAMSIZ 16 
+
+/* IrDA quality of service information (must not exceed 16 bytes) */
+struct if_irda_qos {
+       unsigned long  baudrate;
+       unsigned short data_size;
+       unsigned short window_size;
+       unsigned short min_turn_time;
+       unsigned short max_turn_time;
+       unsigned char  add_bofs;
+       unsigned char  link_disc;
+};
+
+/* For setting RTS and DTR lines of a dongle */
+struct if_irda_line {
+       __u8 dtr;
+       __u8 rts;
+};
+
+/* IrDA interface configuration (data part must not exceed 16 bytes) */
+struct if_irda_req {
+       union {
+               char ifrn_name[IRNAMSIZ];  /* if name, e.g. "irda0" */
+       } ifr_ifrn;
+       
+       /* Data part */
+       union {
+               struct if_irda_line ifru_line;
+               struct if_irda_qos  ifru_qos;
+               unsigned short      ifru_flags;
+               unsigned int        ifru_receiving;
+               unsigned int        ifru_mode;
+               unsigned int        ifru_dongle;
+       } ifr_ifru;
+};
+
+#define ifr_baudrate  ifr_ifru.ifru_qos.baudrate
+#define ifr_receiving ifr_ifru.ifru_receiving 
+#define ifr_dongle    ifr_ifru.ifru_dongle
+#define ifr_mode      ifr_ifru.ifru_mode
+#define ifr_dtr       ifr_ifru.ifru_line.dtr
+#define ifr_rts       ifr_ifru.ifru_line.rts
+
+
+/* IrDA netlink definitions */
+#define IRDA_NL_NAME "irda"
+#define IRDA_NL_VERSION 1
+
+enum irda_nl_commands {
+       IRDA_NL_CMD_UNSPEC,
+       IRDA_NL_CMD_SET_MODE,
+       IRDA_NL_CMD_GET_MODE,
+
+       __IRDA_NL_CMD_AFTER_LAST
+};
+#define IRDA_NL_CMD_MAX (__IRDA_NL_CMD_AFTER_LAST - 1)
+
+enum nl80211_attrs {
+       IRDA_NL_ATTR_UNSPEC,
+       IRDA_NL_ATTR_IFNAME,
+       IRDA_NL_ATTR_MODE,
+
+       __IRDA_NL_ATTR_AFTER_LAST
+};
+#define IRDA_NL_ATTR_MAX (__IRDA_NL_ATTR_AFTER_LAST - 1)
+
+/* IrDA modes */
+#define IRDA_MODE_PRIMARY   0x1
+#define IRDA_MODE_SECONDARY 0x2
+#define IRDA_MODE_MONITOR   0x4
+
+#endif /* KERNEL_IRDA_H */
+
+
+
+
diff --git a/lib/libdss-include/include/linux/irqnr.h b/lib/libdss-include/include/linux/irqnr.h
new file mode 100644 (file)
index 0000000..ae5704f
--- /dev/null
@@ -0,0 +1,4 @@
+/*
+ * There isn't anything here anymore, but the file must not be empty or patch
+ * will delete it.
+ */
diff --git a/lib/libdss-include/include/linux/isdn.h b/lib/libdss-include/include/linux/isdn.h
new file mode 100644 (file)
index 0000000..55c0a1e
--- /dev/null
@@ -0,0 +1,143 @@
+/* $Id: isdn.h,v 1.125.2.3 2004/02/10 01:07:14 keil Exp $
+ *
+ * Main header for the Linux ISDN subsystem (linklevel).
+ *
+ * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    by Thinking Objects Software GmbH Wuerzburg
+ * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __ISDN_H__
+#define __ISDN_H__
+
+#include <linux/ioctl.h>
+#include <linux/tty.h>
+
+#define ISDN_MAX_DRIVERS    32
+#define ISDN_MAX_CHANNELS   64
+
+/* New ioctl-codes */
+#define IIOCNETAIF  _IO('I',1)
+#define IIOCNETDIF  _IO('I',2)
+#define IIOCNETSCF  _IO('I',3)
+#define IIOCNETGCF  _IO('I',4)
+#define IIOCNETANM  _IO('I',5)
+#define IIOCNETDNM  _IO('I',6)
+#define IIOCNETGNM  _IO('I',7)
+#define IIOCGETSET  _IO('I',8) /* no longer supported */
+#define IIOCSETSET  _IO('I',9) /* no longer supported */
+#define IIOCSETVER  _IO('I',10)
+#define IIOCNETHUP  _IO('I',11)
+#define IIOCSETGST  _IO('I',12)
+#define IIOCSETBRJ  _IO('I',13)
+#define IIOCSIGPRF  _IO('I',14)
+#define IIOCGETPRF  _IO('I',15)
+#define IIOCSETPRF  _IO('I',16)
+#define IIOCGETMAP  _IO('I',17)
+#define IIOCSETMAP  _IO('I',18)
+#define IIOCNETASL  _IO('I',19)
+#define IIOCNETDIL  _IO('I',20)
+#define IIOCGETCPS  _IO('I',21)
+#define IIOCGETDVR  _IO('I',22)
+#define IIOCNETLCR  _IO('I',23) /* dwabc ioctl for LCR from isdnlog */
+#define IIOCNETDWRSET  _IO('I',24) /* dwabc ioctl to reset abc-values to default on a net-interface */
+
+#define IIOCNETALN  _IO('I',32)
+#define IIOCNETDLN  _IO('I',33)
+
+#define IIOCNETGPN  _IO('I',34)
+
+#define IIOCDBGVAR  _IO('I',127)
+
+#define IIOCDRVCTL  _IO('I',128)
+
+/* cisco hdlck device private ioctls */
+#define SIOCGKEEPPERIOD        (SIOCDEVPRIVATE + 0)
+#define SIOCSKEEPPERIOD        (SIOCDEVPRIVATE + 1)
+#define SIOCGDEBSERINT (SIOCDEVPRIVATE + 2)
+#define SIOCSDEBSERINT (SIOCDEVPRIVATE + 3)
+
+/* Packet encapsulations for net-interfaces */
+#define ISDN_NET_ENCAP_ETHER      0
+#define ISDN_NET_ENCAP_RAWIP      1
+#define ISDN_NET_ENCAP_IPTYP      2
+#define ISDN_NET_ENCAP_CISCOHDLC  3 /* Without SLARP and keepalive */
+#define ISDN_NET_ENCAP_SYNCPPP    4
+#define ISDN_NET_ENCAP_UIHDLC     5
+#define ISDN_NET_ENCAP_CISCOHDLCK 6 /* With SLARP and keepalive    */
+#define ISDN_NET_ENCAP_X25IFACE   7 /* Documentation/networking/x25-iface.txt */
+#define ISDN_NET_ENCAP_MAX_ENCAP  ISDN_NET_ENCAP_X25IFACE
+
+/* Facility which currently uses an ISDN-channel */
+#define ISDN_USAGE_NONE       0
+#define ISDN_USAGE_RAW        1
+#define ISDN_USAGE_MODEM      2
+#define ISDN_USAGE_NET        3
+#define ISDN_USAGE_VOICE      4
+#define ISDN_USAGE_FAX        5
+#define ISDN_USAGE_MASK       7 /* Mask to get plain usage */
+#define ISDN_USAGE_DISABLED  32 /* This bit is set, if channel is disabled */
+#define ISDN_USAGE_EXCLUSIVE 64 /* This bit is set, if channel is exclusive */
+#define ISDN_USAGE_OUTGOING 128 /* This bit is set, if channel is outgoing  */
+
+#define ISDN_MODEM_NUMREG    24        /* Number of Modem-Registers        */
+#define ISDN_LMSNLEN         255 /* Length of tty's Listen-MSN string */
+#define ISDN_CMSGLEN        50  /* Length of CONNECT-Message to add for Modem */
+
+#define ISDN_MSNLEN          32
+#define NET_DV 0x06  /* Data version for isdn_net_ioctl_cfg   */
+#define TTY_DV 0x06  /* Data version for iprofd etc.          */
+
+#define INF_DV 0x01  /* Data version for /dev/isdninfo        */
+
+typedef struct {
+  char drvid[25];
+  unsigned long arg;
+} isdn_ioctl_struct;
+
+typedef struct {
+  char name[10];
+  char phone[ISDN_MSNLEN];
+  int  outgoing;
+} isdn_net_ioctl_phone;
+
+typedef struct {
+  char name[10];     /* Name of interface                     */
+  char master[10];   /* Name of Master for Bundling           */
+  char slave[10];    /* Name of Slave for Bundling            */
+  char eaz[256];     /* EAZ/MSN                               */
+  char drvid[25];    /* DriverId for Bindings                 */
+  int  onhtime;      /* Hangup-Timeout                        */
+  int  charge;       /* Charge-Units                          */
+  int  l2_proto;     /* Layer-2 protocol                      */
+  int  l3_proto;     /* Layer-3 protocol                      */
+  int  p_encap;      /* Encapsulation                         */
+  int  exclusive;    /* Channel, if bound exclusive           */
+  int  dialmax;      /* Dial Retry-Counter                    */
+  int  slavedelay;   /* Delay until slave starts up           */
+  int  cbdelay;      /* Delay before Callback                 */
+  int  chargehup;    /* Flag: Charge-Hangup                   */
+  int  ihup;         /* Flag: Hangup-Timeout on incoming line */
+  int  secure;       /* Flag: Secure                          */
+  int  callback;     /* Flag: Callback                        */
+  int  cbhup;        /* Flag: Reject Call before Callback     */
+  int  pppbind;      /* ippp device for bindings              */
+  int  chargeint;    /* Use fixed charge interval length      */
+  int  triggercps;   /* BogoCPS needed for triggering slave   */
+  int  dialtimeout;  /* Dial-Timeout                          */
+  int  dialwait;     /* Time to wait after failed dial        */
+  int  dialmode;     /* Flag: off / on / auto                 */
+} isdn_net_ioctl_cfg;
+
+#define ISDN_NET_DIALMODE_MASK  0xC0    /* bits for status                */
+#define ISDN_NET_DM_OFF                0x00    /* this interface is stopped      */
+#define ISDN_NET_DM_MANUAL     0x40    /* this interface is on (manual)  */
+#define ISDN_NET_DM_AUTO       0x80    /* this interface is autodial     */
+#define ISDN_NET_DIALMODE(x) ((&(x))->flags & ISDN_NET_DIALMODE_MASK)
+
+
+#endif /* __ISDN_H__ */
diff --git a/lib/libdss-include/include/linux/isdn/capicmd.h b/lib/libdss-include/include/linux/isdn/capicmd.h
new file mode 100644 (file)
index 0000000..b58635f
--- /dev/null
@@ -0,0 +1,115 @@
+/* $Id: capicmd.h,v 1.2.6.2 2001/09/23 22:24:33 kai Exp $
+ * 
+ * CAPI 2.0 Interface for Linux
+ * 
+ * Copyright 1997 by Carsten Paeth <calle@calle.de>
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __CAPICMD_H__
+#define __CAPICMD_H__
+
+#define CAPI_MSG_BASELEN               8
+#define CAPI_DATA_B3_REQ_LEN           (CAPI_MSG_BASELEN+4+4+2+2+2)
+#define CAPI_DATA_B3_RESP_LEN          (CAPI_MSG_BASELEN+4+2)
+
+/*----- CAPI commands -----*/
+#define CAPI_ALERT                 0x01
+#define CAPI_CONNECT               0x02
+#define CAPI_CONNECT_ACTIVE        0x03
+#define CAPI_CONNECT_B3_ACTIVE     0x83
+#define CAPI_CONNECT_B3            0x82
+#define CAPI_CONNECT_B3_T90_ACTIVE  0x88
+#define CAPI_DATA_B3               0x86
+#define CAPI_DISCONNECT_B3         0x84
+#define CAPI_DISCONNECT            0x04
+#define CAPI_FACILITY              0x80
+#define CAPI_INFO                  0x08
+#define CAPI_LISTEN                0x05
+#define CAPI_MANUFACTURER          0xff
+#define CAPI_RESET_B3              0x87
+#define CAPI_SELECT_B_PROTOCOL     0x41
+
+/*----- CAPI subcommands -----*/
+
+#define CAPI_REQ    0x80
+#define CAPI_CONF   0x81
+#define CAPI_IND    0x82
+#define CAPI_RESP   0x83
+
+/*----- CAPI combined commands -----*/
+
+#define CAPICMD(cmd,subcmd)    (((cmd)<<8)|(subcmd))
+
+#define CAPI_DISCONNECT_REQ            CAPICMD(CAPI_DISCONNECT,CAPI_REQ)
+#define CAPI_DISCONNECT_CONF           CAPICMD(CAPI_DISCONNECT,CAPI_CONF)
+#define CAPI_DISCONNECT_IND            CAPICMD(CAPI_DISCONNECT,CAPI_IND)
+#define CAPI_DISCONNECT_RESP           CAPICMD(CAPI_DISCONNECT,CAPI_RESP)
+
+#define CAPI_ALERT_REQ                 CAPICMD(CAPI_ALERT,CAPI_REQ)
+#define CAPI_ALERT_CONF                        CAPICMD(CAPI_ALERT,CAPI_CONF)
+
+#define CAPI_CONNECT_REQ               CAPICMD(CAPI_CONNECT,CAPI_REQ)
+#define CAPI_CONNECT_CONF              CAPICMD(CAPI_CONNECT,CAPI_CONF)
+#define CAPI_CONNECT_IND               CAPICMD(CAPI_CONNECT,CAPI_IND)
+#define CAPI_CONNECT_RESP              CAPICMD(CAPI_CONNECT,CAPI_RESP)
+
+#define CAPI_CONNECT_ACTIVE_REQ                CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_REQ)
+#define CAPI_CONNECT_ACTIVE_CONF       CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_CONF)
+#define CAPI_CONNECT_ACTIVE_IND                CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_ACTIVE_RESP       CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_RESP)
+
+#define CAPI_SELECT_B_PROTOCOL_REQ     CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_REQ)
+#define CAPI_SELECT_B_PROTOCOL_CONF    CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_CONF)
+
+#define CAPI_CONNECT_B3_ACTIVE_REQ     CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_REQ)
+#define CAPI_CONNECT_B3_ACTIVE_CONF    CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_CONF)
+#define CAPI_CONNECT_B3_ACTIVE_IND     CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_B3_ACTIVE_RESP    CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_RESP)
+
+#define CAPI_CONNECT_B3_REQ            CAPICMD(CAPI_CONNECT_B3,CAPI_REQ)
+#define CAPI_CONNECT_B3_CONF           CAPICMD(CAPI_CONNECT_B3,CAPI_CONF)
+#define CAPI_CONNECT_B3_IND            CAPICMD(CAPI_CONNECT_B3,CAPI_IND)
+#define CAPI_CONNECT_B3_RESP           CAPICMD(CAPI_CONNECT_B3,CAPI_RESP)
+
+
+#define CAPI_CONNECT_B3_T90_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_B3_T90_ACTIVE_RESP        CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_RESP)
+
+#define CAPI_DATA_B3_REQ               CAPICMD(CAPI_DATA_B3,CAPI_REQ)
+#define CAPI_DATA_B3_CONF              CAPICMD(CAPI_DATA_B3,CAPI_CONF)
+#define CAPI_DATA_B3_IND               CAPICMD(CAPI_DATA_B3,CAPI_IND)
+#define CAPI_DATA_B3_RESP              CAPICMD(CAPI_DATA_B3,CAPI_RESP)
+
+#define CAPI_DISCONNECT_B3_REQ         CAPICMD(CAPI_DISCONNECT_B3,CAPI_REQ)
+#define CAPI_DISCONNECT_B3_CONF                CAPICMD(CAPI_DISCONNECT_B3,CAPI_CONF)
+#define CAPI_DISCONNECT_B3_IND         CAPICMD(CAPI_DISCONNECT_B3,CAPI_IND)
+#define CAPI_DISCONNECT_B3_RESP                CAPICMD(CAPI_DISCONNECT_B3,CAPI_RESP)
+
+#define CAPI_RESET_B3_REQ              CAPICMD(CAPI_RESET_B3,CAPI_REQ)
+#define CAPI_RESET_B3_CONF             CAPICMD(CAPI_RESET_B3,CAPI_CONF)
+#define CAPI_RESET_B3_IND              CAPICMD(CAPI_RESET_B3,CAPI_IND)
+#define CAPI_RESET_B3_RESP             CAPICMD(CAPI_RESET_B3,CAPI_RESP)
+
+#define CAPI_LISTEN_REQ                        CAPICMD(CAPI_LISTEN,CAPI_REQ)
+#define CAPI_LISTEN_CONF               CAPICMD(CAPI_LISTEN,CAPI_CONF)
+
+#define CAPI_MANUFACTURER_REQ          CAPICMD(CAPI_MANUFACTURER,CAPI_REQ)
+#define CAPI_MANUFACTURER_CONF         CAPICMD(CAPI_MANUFACTURER,CAPI_CONF)
+#define CAPI_MANUFACTURER_IND          CAPICMD(CAPI_MANUFACTURER,CAPI_IND)
+#define CAPI_MANUFACTURER_RESP         CAPICMD(CAPI_MANUFACTURER,CAPI_RESP)
+
+#define CAPI_FACILITY_REQ              CAPICMD(CAPI_FACILITY,CAPI_REQ)
+#define CAPI_FACILITY_CONF             CAPICMD(CAPI_FACILITY,CAPI_CONF)
+#define CAPI_FACILITY_IND              CAPICMD(CAPI_FACILITY,CAPI_IND)
+#define CAPI_FACILITY_RESP             CAPICMD(CAPI_FACILITY,CAPI_RESP)
+
+#define CAPI_INFO_REQ                  CAPICMD(CAPI_INFO,CAPI_REQ)
+#define CAPI_INFO_CONF                 CAPICMD(CAPI_INFO,CAPI_CONF)
+#define CAPI_INFO_IND                  CAPICMD(CAPI_INFO,CAPI_IND)
+#define CAPI_INFO_RESP                 CAPICMD(CAPI_INFO,CAPI_RESP)
+
+#endif                         /* __CAPICMD_H__ */
diff --git a/lib/libdss-include/include/linux/isdn_divertif.h b/lib/libdss-include/include/linux/isdn_divertif.h
new file mode 100644 (file)
index 0000000..67575ba
--- /dev/null
@@ -0,0 +1,30 @@
+/* $Id: isdn_divertif.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $
+ *
+ * Header for the diversion supplementary interface for i4l.
+ *
+ * Author    Werner Cornelius (werner@titro.de)
+ * Copyright by Werner Cornelius (werner@titro.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _LINUX_ISDN_DIVERTIF_H
+#define _LINUX_ISDN_DIVERTIF_H
+
+/***********************************************************/
+/* magic value is also used to control version information */
+/***********************************************************/
+#define DIVERT_IF_MAGIC 0x25873401
+#define DIVERT_CMD_REG  0x00  /* register command */
+#define DIVERT_CMD_REL  0x01  /* release command */
+#define DIVERT_NO_ERR   0x00  /* return value no error */
+#define DIVERT_CMD_ERR  0x01  /* invalid cmd */
+#define DIVERT_VER_ERR  0x02  /* magic/version invalid */
+#define DIVERT_REG_ERR  0x03  /* module already registered */
+#define DIVERT_REL_ERR  0x04  /* module not registered */
+#define DIVERT_REG_NAME isdn_register_divert
+
+
+#endif /* _LINUX_ISDN_DIVERTIF_H */
diff --git a/lib/libdss-include/include/linux/isdn_ppp.h b/lib/libdss-include/include/linux/isdn_ppp.h
new file mode 100644 (file)
index 0000000..aabb015
--- /dev/null
@@ -0,0 +1,67 @@
+/* Linux ISDN subsystem, sync PPP, interface to ipppd
+ *
+ * Copyright 1994-1999  by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg
+ * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
+ * Copyright 2000-2002  by Kai Germaschewski (kai@germaschewski.name)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _LINUX_ISDN_PPP_H
+#define _LINUX_ISDN_PPP_H
+
+#define CALLTYPE_INCOMING 0x1
+#define CALLTYPE_OUTGOING 0x2
+#define CALLTYPE_CALLBACK 0x4
+
+#define IPPP_VERSION    "2.2.0"
+
+struct pppcallinfo
+{
+  int calltype;
+  unsigned char local_num[64];
+  unsigned char remote_num[64];
+  int charge_units;
+};
+
+#define PPPIOCGCALLINFO _IOWR('t',128,struct pppcallinfo)
+#define PPPIOCBUNDLE   _IOW('t',129,int)
+#define PPPIOCGMPFLAGS _IOR('t',130,int)
+#define PPPIOCSMPFLAGS _IOW('t',131,int)
+#define PPPIOCSMPMTU   _IOW('t',132,int)
+#define PPPIOCSMPMRU   _IOW('t',133,int)
+#define PPPIOCGCOMPRESSORS _IOR('t',134,unsigned long [8])
+#define PPPIOCSCOMPRESSOR _IOW('t',135,int)
+#define PPPIOCGIFNAME      _IOR('t',136, char [IFNAMSIZ] )
+
+
+#define SC_MP_PROT       0x00000200
+#define SC_REJ_MP_PROT   0x00000400
+#define SC_OUT_SHORT_SEQ 0x00000800
+#define SC_IN_SHORT_SEQ  0x00004000
+
+#define SC_DECOMP_ON           0x01
+#define SC_COMP_ON             0x02
+#define SC_DECOMP_DISCARD      0x04
+#define SC_COMP_DISCARD                0x08
+#define SC_LINK_DECOMP_ON      0x10
+#define SC_LINK_COMP_ON                0x20
+#define SC_LINK_DECOMP_DISCARD 0x40
+#define SC_LINK_COMP_DISCARD   0x80
+
+#define ISDN_PPP_COMP_MAX_OPTIONS 16
+
+#define IPPP_COMP_FLAG_XMIT 0x1
+#define IPPP_COMP_FLAG_LINK 0x2
+
+struct isdn_ppp_comp_data {
+  int num;
+  unsigned char options[ISDN_PPP_COMP_MAX_OPTIONS];
+  int optlen;
+  int flags;
+};
+
+#endif /* _LINUX_ISDN_PPP_H */
diff --git a/lib/libdss-include/include/linux/isdnif.h b/lib/libdss-include/include/linux/isdnif.h
new file mode 100644 (file)
index 0000000..1db1b0b
--- /dev/null
@@ -0,0 +1,56 @@
+/* $Id: isdnif.h,v 1.43.2.2 2004/01/12 23:08:35 keil Exp $
+ *
+ * Linux ISDN subsystem
+ * Definition of the interface between the subsystem and its low-level drivers.
+ *
+ * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __ISDNIF_H__
+#define __ISDNIF_H__
+
+
+/*
+ * Values for general protocol-selection
+ */
+#define ISDN_PTYPE_UNKNOWN   0   /* Protocol undefined   */
+#define ISDN_PTYPE_1TR6      1   /* german 1TR6-protocol */
+#define ISDN_PTYPE_EURO      2   /* EDSS1-protocol       */
+#define ISDN_PTYPE_LEASED    3   /* for leased lines     */
+#define ISDN_PTYPE_NI1       4   /* US NI-1 protocol     */
+#define ISDN_PTYPE_MAX       7   /* Max. 8 Protocols     */
+
+/*
+ * Values for Layer-2-protocol-selection
+ */
+#define ISDN_PROTO_L2_X75I   0   /* X75/LAPB with I-Frames            */
+#define ISDN_PROTO_L2_X75UI  1   /* X75/LAPB with UI-Frames           */
+#define ISDN_PROTO_L2_X75BUI 2   /* X75/LAPB with UI-Frames           */
+#define ISDN_PROTO_L2_HDLC   3   /* HDLC                              */
+#define ISDN_PROTO_L2_TRANS  4   /* Transparent (Voice)               */
+#define ISDN_PROTO_L2_X25DTE 5   /* X25/LAPB DTE mode                 */
+#define ISDN_PROTO_L2_X25DCE 6   /* X25/LAPB DCE mode                 */
+#define ISDN_PROTO_L2_V11096 7   /* V.110 bitrate adaption 9600 Baud  */
+#define ISDN_PROTO_L2_V11019 8   /* V.110 bitrate adaption 19200 Baud */
+#define ISDN_PROTO_L2_V11038 9   /* V.110 bitrate adaption 38400 Baud */
+#define ISDN_PROTO_L2_MODEM  10  /* Analog Modem on Board */
+#define ISDN_PROTO_L2_FAX    11  /* Fax Group 2/3         */
+#define ISDN_PROTO_L2_HDLC_56K 12   /* HDLC 56k                          */
+#define ISDN_PROTO_L2_MAX    15  /* Max. 16 Protocols                 */
+
+/*
+ * Values for Layer-3-protocol-selection
+ */
+#define ISDN_PROTO_L3_TRANS    0       /* Transparent */
+#define ISDN_PROTO_L3_TRANSDSP 1       /* Transparent with DSP */
+#define ISDN_PROTO_L3_FCLASS2  2       /* Fax Group 2/3 CLASS 2 */
+#define ISDN_PROTO_L3_FCLASS1  3       /* Fax Group 2/3 CLASS 1 */
+#define ISDN_PROTO_L3_MAX      7       /* Max. 8 Protocols */
+
+
+#endif /* __ISDNIF_H__ */
diff --git a/lib/libdss-include/include/linux/iso_fs.h b/lib/libdss-include/include/linux/iso_fs.h
new file mode 100644 (file)
index 0000000..4688ac4
--- /dev/null
@@ -0,0 +1,165 @@
+#ifndef _ISOFS_FS_H
+#define _ISOFS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * The isofs filesystem constants/structures
+ */
+
+/* This part borrowed from the bsd386 isofs */
+#define ISODCL(from, to) (to - from + 1)
+
+struct iso_volume_descriptor {
+       char type[ISODCL(1,1)]; /* 711 */
+       char id[ISODCL(2,6)];
+       char version[ISODCL(7,7)];
+       char data[ISODCL(8,2048)];
+};
+
+/* volume descriptor types */
+#define ISO_VD_PRIMARY 1
+#define ISO_VD_SUPPLEMENTARY 2
+#define ISO_VD_END 255
+
+#define ISO_STANDARD_ID "CD001"
+
+struct iso_primary_descriptor {
+       char type                       [ISODCL (  1,   1)]; /* 711 */
+       char id                         [ISODCL (  2,   6)];
+       char version                    [ISODCL (  7,   7)]; /* 711 */
+       char unused1                    [ISODCL (  8,   8)];
+       char system_id                  [ISODCL (  9,  40)]; /* achars */
+       char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
+       char unused2                    [ISODCL ( 73,  80)];
+       char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
+       char unused3                    [ISODCL ( 89, 120)];
+       char volume_set_size            [ISODCL (121, 124)]; /* 723 */
+       char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
+       char logical_block_size         [ISODCL (129, 132)]; /* 723 */
+       char path_table_size            [ISODCL (133, 140)]; /* 733 */
+       char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
+       char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
+       char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
+       char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
+       char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
+       char volume_set_id              [ISODCL (191, 318)]; /* dchars */
+       char publisher_id               [ISODCL (319, 446)]; /* achars */
+       char preparer_id                [ISODCL (447, 574)]; /* achars */
+       char application_id             [ISODCL (575, 702)]; /* achars */
+       char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
+       char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
+       char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
+       char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
+       char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
+       char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
+       char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
+       char file_structure_version     [ISODCL (882, 882)]; /* 711 */
+       char unused4                    [ISODCL (883, 883)];
+       char application_data           [ISODCL (884, 1395)];
+       char unused5                    [ISODCL (1396, 2048)];
+};
+
+/* Almost the same as the primary descriptor but two fields are specified */
+struct iso_supplementary_descriptor {
+       char type                       [ISODCL (  1,   1)]; /* 711 */
+       char id                         [ISODCL (  2,   6)];
+       char version                    [ISODCL (  7,   7)]; /* 711 */
+       char flags                      [ISODCL (  8,   8)]; /* 853 */
+       char system_id                  [ISODCL (  9,  40)]; /* achars */
+       char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
+       char unused2                    [ISODCL ( 73,  80)];
+       char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
+       char escape                     [ISODCL ( 89, 120)]; /* 856 */
+       char volume_set_size            [ISODCL (121, 124)]; /* 723 */
+       char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
+       char logical_block_size         [ISODCL (129, 132)]; /* 723 */
+       char path_table_size            [ISODCL (133, 140)]; /* 733 */
+       char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
+       char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
+       char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
+       char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
+       char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
+       char volume_set_id              [ISODCL (191, 318)]; /* dchars */
+       char publisher_id               [ISODCL (319, 446)]; /* achars */
+       char preparer_id                [ISODCL (447, 574)]; /* achars */
+       char application_id             [ISODCL (575, 702)]; /* achars */
+       char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
+       char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
+       char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
+       char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
+       char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
+       char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
+       char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
+       char file_structure_version     [ISODCL (882, 882)]; /* 711 */
+       char unused4                    [ISODCL (883, 883)];
+       char application_data           [ISODCL (884, 1395)];
+       char unused5                    [ISODCL (1396, 2048)];
+};
+
+
+#define HS_STANDARD_ID "CDROM"
+
+struct  hs_volume_descriptor {
+       char foo                        [ISODCL (  1,   8)]; /* 733 */
+       char type                       [ISODCL (  9,   9)]; /* 711 */
+       char id                         [ISODCL ( 10,  14)];
+       char version                    [ISODCL ( 15,  15)]; /* 711 */
+       char data[ISODCL(16,2048)];
+};
+
+
+struct hs_primary_descriptor {
+       char foo                        [ISODCL (  1,   8)]; /* 733 */
+       char type                       [ISODCL (  9,   9)]; /* 711 */
+       char id                         [ISODCL ( 10,  14)];
+       char version                    [ISODCL ( 15,  15)]; /* 711 */
+       char unused1                    [ISODCL ( 16,  16)]; /* 711 */
+       char system_id                  [ISODCL ( 17,  48)]; /* achars */
+       char volume_id                  [ISODCL ( 49,  80)]; /* dchars */
+       char unused2                    [ISODCL ( 81,  88)]; /* 733 */
+       char volume_space_size          [ISODCL ( 89,  96)]; /* 733 */
+       char unused3                    [ISODCL ( 97, 128)]; /* 733 */
+       char volume_set_size            [ISODCL (129, 132)]; /* 723 */
+       char volume_sequence_number     [ISODCL (133, 136)]; /* 723 */
+       char logical_block_size         [ISODCL (137, 140)]; /* 723 */
+       char path_table_size            [ISODCL (141, 148)]; /* 733 */
+       char type_l_path_table          [ISODCL (149, 152)]; /* 731 */
+       char unused4                    [ISODCL (153, 180)]; /* 733 */
+       char root_directory_record      [ISODCL (181, 214)]; /* 9.1 */
+};
+
+/* We use this to help us look up the parent inode numbers. */
+
+struct iso_path_table{
+       unsigned char  name_len[2];     /* 721 */
+       char extent[4];         /* 731 */
+       char  parent[2];        /* 721 */
+       char name[0];
+} __attribute__((packed));
+
+/* high sierra is identical to iso, except that the date is only 6 bytes, and
+   there is an extra reserved byte after the flags */
+
+struct iso_directory_record {
+       char length                     [ISODCL (1, 1)]; /* 711 */
+       char ext_attr_length            [ISODCL (2, 2)]; /* 711 */
+       char extent                     [ISODCL (3, 10)]; /* 733 */
+       char size                       [ISODCL (11, 18)]; /* 733 */
+       char date                       [ISODCL (19, 25)]; /* 7 by 711 */
+       char flags                      [ISODCL (26, 26)];
+       char file_unit_size             [ISODCL (27, 27)]; /* 711 */
+       char interleave                 [ISODCL (28, 28)]; /* 711 */
+       char volume_sequence_number     [ISODCL (29, 32)]; /* 723 */
+       unsigned char name_len          [ISODCL (33, 33)]; /* 711 */
+       char name                       [0];
+} __attribute__((packed));
+
+#define ISOFS_BLOCK_BITS 11
+#define ISOFS_BLOCK_SIZE 2048
+
+#define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize)
+#define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits)
+
+#endif /* _ISOFS_FS_H */
diff --git a/lib/libdss-include/include/linux/ivtv.h b/lib/libdss-include/include/linux/ivtv.h
new file mode 100644 (file)
index 0000000..120e82c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    Public ivtv API header
+    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
+    Copyright (C) 2004-2007  Hans Verkuil <hverkuil@xs4all.nl>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_IVTV_H__
+#define __LINUX_IVTV_H__
+
+
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/* ivtv knows several distinct output modes: MPEG streaming,
+   YUV streaming, YUV updates through user DMA and the passthrough
+   mode.
+
+   In order to clearly tell the driver that we are in user DMA
+   YUV mode you need to call IVTV_IOC_DMA_FRAME with y_source == NULL
+   first (althrough if you don't then the first time
+   DMA_FRAME is called the mode switch is done automatically).
+
+   When you close the file handle the user DMA mode is exited again.
+
+   While in one mode, you cannot use another mode (EBUSY is returned).
+
+   All this means that if you want to change the YUV interlacing
+   for the user DMA YUV mode you first need to do call IVTV_IOC_DMA_FRAME
+   with y_source == NULL before you can set the correct format using
+   VIDIOC_S_FMT.
+
+   Eventually all this should be replaced with a proper V4L2 API,
+   but for now we have to do it this way. */
+
+struct ivtv_dma_frame {
+       enum v4l2_buf_type type; /* V4L2_BUF_TYPE_VIDEO_OUTPUT */
+       __u32 pixelformat;       /* 0 == same as destination */
+       void *y_source;   /* if NULL and type == V4L2_BUF_TYPE_VIDEO_OUTPUT,
+                                   then just switch to user DMA YUV output mode */
+       void *uv_source;  /* Unused for RGB pixelformats */
+       struct v4l2_rect src;
+       struct v4l2_rect dst;
+       __u32 src_width;
+       __u32 src_height;
+};
+
+#define IVTV_IOC_DMA_FRAME             _IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame)
+
+/* Select the passthrough mode (if the argument is non-zero). In the passthrough
+   mode the output of the encoder is passed immediately into the decoder. */
+#define IVTV_IOC_PASSTHROUGH_MODE      _IOW ('V', BASE_VIDIOC_PRIVATE+1, int)
+
+/* Deprecated defines: applications should use the defines from videodev2.h */
+#define IVTV_SLICED_TYPE_TELETEXT_B     V4L2_MPEG_VBI_IVTV_TELETEXT_B
+#define IVTV_SLICED_TYPE_CAPTION_525    V4L2_MPEG_VBI_IVTV_CAPTION_525
+#define IVTV_SLICED_TYPE_WSS_625        V4L2_MPEG_VBI_IVTV_WSS_625
+#define IVTV_SLICED_TYPE_VPS            V4L2_MPEG_VBI_IVTV_VPS
+
+#endif /* _LINUX_IVTV_H */
diff --git a/lib/libdss-include/include/linux/ivtvfb.h b/lib/libdss-include/include/linux/ivtvfb.h
new file mode 100644 (file)
index 0000000..97eaf4e
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    On Screen Display cx23415 Framebuffer driver
+
+    Copyright (C) 2006, 2007  Ian Armstrong <ian@iarmst.demon.co.uk>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_IVTVFB_H__
+#define __LINUX_IVTVFB_H__
+
+
+#include <linux/types.h>
+
+/* Framebuffer external API */
+
+struct ivtvfb_dma_frame {
+       void *source;
+       unsigned long dest_offset;
+       int count;
+};
+
+#define IVTVFB_IOC_DMA_FRAME   _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame)
+
+#endif
diff --git a/lib/libdss-include/include/linux/ixjuser.h b/lib/libdss-include/include/linux/ixjuser.h
new file mode 100644 (file)
index 0000000..0b829f9
--- /dev/null
@@ -0,0 +1,720 @@
+#ifndef __LINUX_IXJUSER_H
+#define __LINUX_IXJUSER_H
+
+/******************************************************************************
+ *
+ *    ixjuser.h
+ *
+ * Device Driver for Quicknet Technologies, Inc.'s Telephony cards
+ * including the Internet PhoneJACK, Internet PhoneJACK Lite,
+ * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and
+ * SmartCABLE
+ *
+ *    (c) Copyright 1999-2001  Quicknet Technologies, Inc.
+ *
+ *    This program is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU General Public License
+ *    as published by the Free Software Foundation; either version
+ *    2 of the License, or (at your option) any later version.
+ *
+ * Author:          Ed Okerson, <eokerson@quicknet.net>
+ *    
+ * Contributors:    Greg Herlein, <gherlein@quicknet.net>
+ *                  David W. Erhart, <derhart@quicknet.net>
+ *                  John Sellers, <jsellers@quicknet.net>
+ *                  Mike Preston, <mpreston@quicknet.net>
+ *
+ * More information about the hardware related to this driver can be found
+ * at our website:    http://www.quicknet.net
+ *
+ * Fixes:
+ *
+ * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
+ * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION 
+ * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ *****************************************************************************/
+
+#include <linux/telephony.h>
+
+
+/******************************************************************************
+*
+* IOCTL's used for the Quicknet Telephony Cards
+*
+* If you use the IXJCTL_TESTRAM command, the card must be power cycled to
+* reset the SRAM values before further use.
+*
+******************************************************************************/
+
+#define IXJCTL_DSP_RESET               _IO  ('q', 0xC0)
+
+#define IXJCTL_RING                     PHONE_RING
+#define IXJCTL_HOOKSTATE                PHONE_HOOKSTATE
+#define IXJCTL_MAXRINGS                        PHONE_MAXRINGS
+#define IXJCTL_RING_CADENCE            PHONE_RING_CADENCE
+#define IXJCTL_RING_START              PHONE_RING_START
+#define IXJCTL_RING_STOP               PHONE_RING_STOP
+
+#define IXJCTL_CARDTYPE                        _IOR ('q', 0xC1, int)
+#define IXJCTL_SERIAL                  _IOR ('q', 0xC2, int)
+#define IXJCTL_DSP_TYPE                 _IOR ('q', 0xC3, int)
+#define IXJCTL_DSP_VERSION              _IOR ('q', 0xC4, int)
+#define IXJCTL_VERSION                 _IOR ('q', 0xDA, char *)
+#define IXJCTL_DSP_IDLE                        _IO  ('q', 0xC5)
+#define IXJCTL_TESTRAM                 _IO  ('q', 0xC6)
+
+/******************************************************************************
+*
+* This group of IOCTLs deal with the record settings of the DSP
+*
+* The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP.
+* Setting a lower depth reduces latency, but increases the demand of the
+* application to service the driver without frame loss.  The DSP has 480
+* bytes of physical buffer memory for the record channel so the true
+* maximum limit is determined by how many frames will fit in the buffer.
+*
+* 1 uncompressed (480 byte) 16-bit linear frame.
+* 2 uncompressed (240 byte) 8-bit A-law/mu-law frames.
+* 15 TrueSpeech 8.5 frames.
+* 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames.
+*
+* The default in the driver is currently set to 2 frames.
+*
+* The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8
+* number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the
+* signal by 2.0, 0x80 scales the signal by 0.5.  No protection is given
+* against over-scaling, if the multiplication factor times the input
+* signal exceeds 16 bits, overflow distortion will occur.  The default
+* setting is 0x100 (1.0).
+*
+* The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on
+* the most recently recorded frame as a 16 bit value.
+******************************************************************************/
+
+#define IXJCTL_REC_CODEC                PHONE_REC_CODEC
+#define IXJCTL_REC_START                PHONE_REC_START
+#define IXJCTL_REC_STOP                 PHONE_REC_STOP
+#define IXJCTL_REC_DEPTH               PHONE_REC_DEPTH
+#define IXJCTL_FRAME                   PHONE_FRAME
+#define IXJCTL_REC_VOLUME              PHONE_REC_VOLUME
+#define IXJCTL_REC_LEVEL               PHONE_REC_LEVEL
+
+typedef enum {
+       f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50,
+       f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400,
+       f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450,
+       f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450,
+       f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587,
+       f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850,
+       f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400,
+       f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336,
+       lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860
+} IXJ_FILTER_FREQ;
+
+typedef struct {
+       unsigned int filter;
+       IXJ_FILTER_FREQ freq;
+       char enable;
+} IXJ_FILTER;
+
+typedef struct {
+       char enable;
+       char en_filter;
+       unsigned int filter;
+       unsigned int on1;
+       unsigned int off1;
+       unsigned int on2;
+       unsigned int off2;
+       unsigned int on3;
+       unsigned int off3;
+} IXJ_FILTER_CADENCE;
+
+#define IXJCTL_SET_FILTER              _IOW ('q', 0xC7, IXJ_FILTER *)
+#define IXJCTL_SET_FILTER_RAW          _IOW ('q', 0xDD, IXJ_FILTER_RAW *)
+#define IXJCTL_GET_FILTER_HIST         _IOW ('q', 0xC8, int)
+#define IXJCTL_FILTER_CADENCE          _IOW ('q', 0xD6, IXJ_FILTER_CADENCE *)
+#define IXJCTL_PLAY_CID                        _IO  ('q', 0xD7)
+/******************************************************************************
+*
+* This IOCTL allows you to reassign values in the tone index table.  The
+* tone table has 32 entries (0 - 31), but the driver only allows entries
+* 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are
+* the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D.
+* The positions used internally for Call Progress Tones are as follows:
+*    Dial Tone   - 25
+*    Ring Back   - 26
+*    Busy Signal - 27
+*
+* The freq values are calculated as:
+* freq = cos(2 * PI * frequency / 8000)
+*
+* The most commonly needed values are already calculated and listed in the
+* enum IXJ_TONE_FREQ.  Each tone index can have two frequencies with
+* different gains, if you are only using a single frequency set the unused
+* one to 0.
+*
+* The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB
+* increments.
+*
+******************************************************************************/
+
+typedef enum {
+       hz20 = 0x7ffa,
+       hz50 = 0x7fe5,
+       hz133 = 0x7f4c,
+       hz200 = 0x7e6b,
+       hz261 = 0x7d50,         /* .63 C1  */
+       hz277 = 0x7cfa,         /* .18 CS1 */
+       hz293 = 0x7c9f,         /* .66 D1  */
+       hz300 = 0x7c75,
+       hz311 = 0x7c32,         /* .13 DS1 */
+       hz329 = 0x7bbf,         /* .63 E1  */
+       hz330 = 0x7bb8,
+       hz340 = 0x7b75,
+       hz349 = 0x7b37,         /* .23 F1  */
+       hz350 = 0x7b30,
+       hz360 = 0x7ae9,
+       hz369 = 0x7aa8,         /* .99 FS1 */
+       hz380 = 0x7a56,
+       hz392 = 0x79fa,         /* .00 G1  */
+       hz400 = 0x79bb,
+       hz415 = 0x7941,         /* .30 GS1 */
+       hz420 = 0x7918,
+       hz425 = 0x78ee,
+       hz435 = 0x7899,
+       hz440 = 0x786d,         /* .00 A1  */
+       hz445 = 0x7842,
+       hz450 = 0x7815,
+       hz452 = 0x7803,
+       hz466 = 0x7784,         /* .16 AS1 */
+       hz475 = 0x7731,
+       hz480 = 0x7701,
+       hz493 = 0x7685,         /* .88 B1  */
+       hz494 = 0x767b,
+       hz500 = 0x7640,
+       hz520 = 0x7578,
+       hz523 = 0x7559,         /* .25 C2  */
+       hz525 = 0x7544,
+       hz540 = 0x74a7,
+       hz554 = 0x7411,         /* .37 CS2 */
+       hz587 = 0x72a1,         /* .33 D2  */
+       hz590 = 0x727f,
+       hz600 = 0x720b,
+       hz620 = 0x711e,
+       hz622 = 0x7106,         /* .25 DS2 */
+       hz659 = 0x6f3b,         /* .26 E2  */
+       hz660 = 0x6f2e,
+       hz698 = 0x6d3d,         /* .46 F2  */
+       hz700 = 0x6d22,
+       hz739 = 0x6b09,         /* .99 FS2 */
+       hz740 = 0x6afa,
+       hz750 = 0x6a6c,
+       hz770 = 0x694b,
+       hz783 = 0x688b,         /* .99 G2  */
+       hz800 = 0x678d,
+       hz816 = 0x6698,
+       hz830 = 0x65bf,         /* .61 GS2 */
+       hz850 = 0x6484,
+       hz857 = 0x6414,
+       hz880 = 0x629f,         /* .00 A2  */
+       hz900 = 0x6154,
+       hz932 = 0x5f35,         /* .33 AS2 */
+       hz935 = 0x5f01,
+       hz941 = 0x5e9a,
+       hz942 = 0x5e88,
+       hz950 = 0x5dfd,
+       hz975 = 0x5c44,
+       hz1000 = 0x5a81,
+       hz1020 = 0x5912,
+       hz1050 = 0x56e2,
+       hz1100 = 0x5320,
+       hz1140 = 0x5007,
+       hz1200 = 0x4b3b,
+       hz1209 = 0x4a80,
+       hz1215 = 0x4a02,
+       hz1250 = 0x471c,
+       hz1300 = 0x42e0,
+       hz1330 = 0x4049,
+       hz1336 = 0x3fc4,
+       hz1366 = 0x3d22,
+       hz1380 = 0x3be4,
+       hz1400 = 0x3a1b,
+       hz1450 = 0x3596,
+       hz1477 = 0x331c,
+       hz1500 = 0x30fb,
+       hz1600 = 0x278d,
+       hz1633 = 0x2462,
+       hz1638 = 0x23e7,
+       hz1645 = 0x233a,
+       hz1750 = 0x18f8,
+       hz1800 = 0x1405,
+       hz1860 = 0xe0b,
+       hz2100 = 0xf5f6,
+       hz2130 = 0xf2f5,
+       hz2450 = 0xd3b3,
+       hz2750 = 0xb8e4
+} IXJ_FREQ;
+
+typedef enum {
+       C1 = hz261,
+       CS1 = hz277,
+       D1 = hz293,
+       DS1 = hz311,
+       E1 = hz329,
+       F1 = hz349,
+       FS1 = hz369,
+       G1 = hz392,
+       GS1 = hz415,
+       A1 = hz440,
+       AS1 = hz466,
+       B1 = hz493,
+       C2 = hz523,
+       CS2 = hz554,
+       D2 = hz587,
+       DS2 = hz622,
+       E2 = hz659,
+       F2 = hz698,
+       FS2 = hz739,
+       G2 = hz783,
+       GS2 = hz830,
+       A2 = hz880,
+       AS2 = hz932,
+} IXJ_NOTE;
+
+typedef struct {
+       int tone_index;
+       int freq0;
+       int gain0;
+       int freq1;
+       int gain1;
+} IXJ_TONE;
+
+#define IXJCTL_INIT_TONE               _IOW ('q', 0xC9, IXJ_TONE *)
+
+/******************************************************************************
+*
+* The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various
+* Call Progress Tones (CPT).  This is accomplished by setting up an array of
+* IXJ_CADENCE_ELEMENT structures that sequentially define the states of
+* the tone sequence.  The tone_on_time and tone_off time are in
+* 250 microsecond intervals.  A pointer to this array is passed to the
+* driver as the ce element of an IXJ_CADENCE structure.  The elements_used
+* must be set to the number of IXJ_CADENCE_ELEMENTS in the array.  The
+* termination variable defines what to do at the end of a cadence, the
+* options are to play the cadence once and stop, to repeat the last
+* element of the cadence indefinitely, or to repeat the entire cadence
+* indefinitely.  The ce variable is a pointer to the array of IXJ_TONE
+* structures.  If the freq0 variable is non-zero, the tone table contents
+* for the tone_index are updated to the frequencies and gains defined.  It
+* should be noted that DTMF tones cannot be reassigned, so if DTMF tone
+* table indexes are used in a cadence the frequency and gain variables will
+* be ignored.
+*
+* If the array elements contain frequency parameters the driver will
+* initialize the needed tone table elements and begin playing the tone,
+* there is no preset limit on the number of elements in the cadence.  If
+* there is more than one frequency used in the cadence, sequential elements
+* of different frequencies MUST use different tone table indexes.  Only one
+* cadence can be played at a time.  It is possible to build complex
+* cadences with multiple frequencies using 2 tone table indexes by
+* alternating between them.
+*
+******************************************************************************/
+
+typedef struct {
+       int index;
+       int tone_on_time;
+       int tone_off_time;
+       int freq0;
+       int gain0;
+       int freq1;
+       int gain1;
+} IXJ_CADENCE_ELEMENT;
+
+typedef enum {
+       PLAY_ONCE,
+       REPEAT_LAST_ELEMENT,
+       REPEAT_ALL
+} IXJ_CADENCE_TERM;
+
+typedef struct {
+       int elements_used;
+       IXJ_CADENCE_TERM termination;
+       IXJ_CADENCE_ELEMENT *ce;
+} IXJ_CADENCE;
+
+#define IXJCTL_TONE_CADENCE            _IOW ('q', 0xCA, IXJ_CADENCE *)
+/******************************************************************************
+*
+* This group of IOCTLs deal with the playback settings of the DSP
+*
+******************************************************************************/
+
+#define IXJCTL_PLAY_CODEC               PHONE_PLAY_CODEC
+#define IXJCTL_PLAY_START               PHONE_PLAY_START
+#define IXJCTL_PLAY_STOP                PHONE_PLAY_STOP
+#define IXJCTL_PLAY_DEPTH              PHONE_PLAY_DEPTH
+#define IXJCTL_PLAY_VOLUME             PHONE_PLAY_VOLUME
+#define IXJCTL_PLAY_LEVEL              PHONE_PLAY_LEVEL
+
+/******************************************************************************
+*
+* This group of IOCTLs deal with the Acoustic Echo Cancellation settings
+* of the DSP
+*
+* Issuing the IXJCTL_AEC_START command with a value of AEC_OFF has the
+* same effect as IXJCTL_AEC_STOP.  This is to simplify slider bar
+* controls.  IXJCTL_AEC_GET_LEVEL returns the current setting of the AEC.
+******************************************************************************/
+#define IXJCTL_AEC_START               _IOW ('q', 0xCB, int)
+#define IXJCTL_AEC_STOP                        _IO  ('q', 0xCC)
+#define IXJCTL_AEC_GET_LEVEL           _IO  ('q', 0xCD)
+
+#define AEC_OFF   0
+#define AEC_LOW   1
+#define AEC_MED   2
+#define AEC_HIGH  3
+#define AEC_AUTO  4
+#define AEC_AGC   5
+/******************************************************************************
+*
+* Call Progress Tones, DTMF, etc.
+* IXJCTL_DTMF_OOB determines if DTMF signaling is sent as Out-Of-Band
+* only.  If you pass a 1, DTMF is suppressed from the audio stream.
+* Tone on and off times are in 250 microsecond intervals so
+* ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360);
+* will set the tone on time of board ixj1 to 360 * 250us = 90ms
+* the default values of tone on and off times is 840 or 210ms
+******************************************************************************/
+
+#define IXJCTL_DTMF_READY              PHONE_DTMF_READY
+#define IXJCTL_GET_DTMF                 PHONE_GET_DTMF
+#define IXJCTL_GET_DTMF_ASCII           PHONE_GET_DTMF_ASCII
+#define IXJCTL_DTMF_OOB                        PHONE_DTMF_OOB
+#define IXJCTL_EXCEPTION               PHONE_EXCEPTION
+#define IXJCTL_PLAY_TONE               PHONE_PLAY_TONE
+#define IXJCTL_SET_TONE_ON_TIME                PHONE_SET_TONE_ON_TIME
+#define IXJCTL_SET_TONE_OFF_TIME       PHONE_SET_TONE_OFF_TIME
+#define IXJCTL_GET_TONE_ON_TIME                PHONE_GET_TONE_ON_TIME
+#define IXJCTL_GET_TONE_OFF_TIME       PHONE_GET_TONE_OFF_TIME
+#define IXJCTL_GET_TONE_STATE          PHONE_GET_TONE_STATE
+#define IXJCTL_BUSY                    PHONE_BUSY
+#define IXJCTL_RINGBACK                        PHONE_RINGBACK
+#define IXJCTL_DIALTONE                        PHONE_DIALTONE
+#define IXJCTL_CPT_STOP                        PHONE_CPT_STOP
+
+/******************************************************************************
+* LineJACK specific IOCTLs
+*
+* The lsb 4 bits of the LED argument represent the state of each of the 4
+* LED's on the LineJACK
+******************************************************************************/
+
+#define IXJCTL_SET_LED                 _IOW ('q', 0xCE, int)
+#define IXJCTL_MIXER                   _IOW ('q', 0xCF, int)
+
+/******************************************************************************
+* 
+* The master volume controls use attenuation with 32 levels from 0 to -62dB
+* with steps of 2dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_MASTER_L         0x0000
+#define MIXER_MASTER_R         0x0100
+#define ATT00DB                        0x00
+#define ATT02DB                        0x01
+#define ATT04DB                        0x02
+#define ATT06DB                        0x03
+#define ATT08DB                        0x04
+#define ATT10DB                        0x05
+#define ATT12DB                        0x06
+#define ATT14DB                        0x07
+#define ATT16DB                        0x08
+#define ATT18DB                        0x09
+#define ATT20DB                        0x0A
+#define ATT22DB                        0x0B
+#define ATT24DB                        0x0C
+#define ATT26DB                        0x0D
+#define ATT28DB                        0x0E
+#define ATT30DB                        0x0F
+#define ATT32DB                        0x10
+#define ATT34DB                        0x11
+#define ATT36DB                        0x12
+#define ATT38DB                        0x13
+#define ATT40DB                        0x14
+#define ATT42DB                        0x15
+#define ATT44DB                        0x16
+#define ATT46DB                        0x17
+#define ATT48DB                        0x18
+#define ATT50DB                        0x19
+#define ATT52DB                        0x1A
+#define ATT54DB                        0x1B
+#define ATT56DB                        0x1C
+#define ATT58DB                        0x1D
+#define ATT60DB                        0x1E
+#define ATT62DB                        0x1F
+#define MASTER_MUTE            0x80
+
+/******************************************************************************
+* 
+* The input volume controls use gain with 32 levels from +12dB to -50dB
+* with steps of 2dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_PORT_CD_L                0x0600
+#define MIXER_PORT_CD_R                0x0700
+#define MIXER_PORT_LINE_IN_L   0x0800
+#define MIXER_PORT_LINE_IN_R   0x0900
+#define MIXER_PORT_POTS_REC    0x0C00
+#define MIXER_PORT_MIC         0x0E00
+
+#define GAIN12DB               0x00
+#define GAIN10DB               0x01
+#define GAIN08DB               0x02
+#define GAIN06DB               0x03
+#define GAIN04DB               0x04
+#define GAIN02DB               0x05
+#define GAIN00DB               0x06
+#define GAIN_02DB              0x07
+#define GAIN_04DB              0x08
+#define GAIN_06DB              0x09
+#define GAIN_08DB              0x0A
+#define GAIN_10DB              0x0B
+#define GAIN_12DB              0x0C
+#define GAIN_14DB              0x0D
+#define GAIN_16DB              0x0E
+#define GAIN_18DB              0x0F
+#define GAIN_20DB              0x10
+#define GAIN_22DB              0x11
+#define GAIN_24DB              0x12
+#define GAIN_26DB              0x13
+#define GAIN_28DB              0x14
+#define GAIN_30DB              0x15
+#define GAIN_32DB              0x16
+#define GAIN_34DB              0x17
+#define GAIN_36DB              0x18
+#define GAIN_38DB              0x19
+#define GAIN_40DB              0x1A
+#define GAIN_42DB              0x1B
+#define GAIN_44DB              0x1C
+#define GAIN_46DB              0x1D
+#define GAIN_48DB              0x1E
+#define GAIN_50DB              0x1F
+#define INPUT_MUTE             0x80
+
+/******************************************************************************
+* 
+* The POTS volume control use attenuation with 8 levels from 0dB to -28dB
+* with steps of 4dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_PORT_POTS_PLAY   0x0F00
+
+#define POTS_ATT_00DB          0x00
+#define POTS_ATT_04DB          0x01
+#define POTS_ATT_08DB          0x02
+#define POTS_ATT_12DB          0x03
+#define POTS_ATT_16DB          0x04
+#define POTS_ATT_20DB          0x05
+#define POTS_ATT_24DB          0x06
+#define POTS_ATT_28DB          0x07
+#define POTS_MUTE              0x80
+
+/******************************************************************************
+* 
+* The DAA controls the interface to the PSTN port.  The driver loads the
+* US coefficients by default, so if you live in a different country you
+* need to load the set for your countries phone system.
+* 
+******************************************************************************/
+#define IXJCTL_DAA_COEFF_SET           _IOW ('q', 0xD0, int)
+
+#define DAA_US                 1       /*PITA 8kHz */
+#define DAA_UK                 2       /*ISAR34 8kHz */
+#define DAA_FRANCE     3       /* */
+#define DAA_GERMANY    4
+#define DAA_AUSTRALIA  5
+#define DAA_JAPAN      6
+
+/******************************************************************************
+* 
+* Use IXJCTL_PORT to set or query the port the card is set to.  If the
+* argument is set to PORT_QUERY, the return value of the ioctl will
+* indicate which port is currently in use, otherwise it will change the
+* port.
+* 
+******************************************************************************/
+#define IXJCTL_PORT                    _IOW ('q', 0xD1, int)
+
+#define PORT_QUERY     0
+#define PORT_POTS      1
+#define PORT_PSTN      2
+#define PORT_SPEAKER   3
+#define PORT_HANDSET   4
+
+#define IXJCTL_PSTN_SET_STATE          PHONE_PSTN_SET_STATE
+#define IXJCTL_PSTN_GET_STATE          PHONE_PSTN_GET_STATE
+
+#define PSTN_ON_HOOK   0
+#define PSTN_RINGING   1
+#define PSTN_OFF_HOOK  2
+#define PSTN_PULSE_DIAL        3
+
+/******************************************************************************
+* 
+* The DAA Analog GAIN sets 2 parameters at one time, the receive gain (AGRR), 
+* and the transmit gain (AGX).  OR together the components and pass them
+* as the parameter to IXJCTL_DAA_AGAIN.  The default setting is both at 0dB.
+* 
+******************************************************************************/
+#define IXJCTL_DAA_AGAIN               _IOW ('q', 0xD2, int)
+
+#define AGRR00DB       0x00    /* Analog gain in receive direction 0dB */
+#define AGRR3_5DB      0x10    /* Analog gain in receive direction 3.5dB */
+#define AGRR06DB       0x30    /* Analog gain in receive direction 6dB */
+
+#define AGX00DB                0x00    /* Analog gain in transmit direction 0dB */
+#define AGX_6DB                0x04    /* Analog gain in transmit direction -6dB */
+#define AGX3_5DB       0x08    /* Analog gain in transmit direction 3.5dB */
+#define AGX_2_5B       0x0C    /* Analog gain in transmit direction -2.5dB */
+
+#define IXJCTL_PSTN_LINETEST           _IO  ('q', 0xD3)
+
+#define IXJCTL_CID                     _IOR ('q', 0xD4, PHONE_CID *)
+#define IXJCTL_VMWI                    _IOR ('q', 0xD8, int)
+#define IXJCTL_CIDCW                   _IOW ('q', 0xD9, PHONE_CID *)
+/******************************************************************************
+* 
+* The wink duration is tunable with this ioctl.  The default wink duration  
+* is 320ms.  You do not need to use this ioctl if you do not require a
+* different wink duration.
+* 
+******************************************************************************/
+#define IXJCTL_WINK_DURATION           PHONE_WINK_DURATION
+
+/******************************************************************************
+* 
+* This ioctl will connect the POTS port to the PSTN port on the LineJACK
+* In order for this to work properly the port selection should be set to
+* the PSTN port with IXJCTL_PORT prior to calling this ioctl.  This will
+* enable conference calls between PSTN callers and network callers.
+* Passing a 1 to this ioctl enables the POTS<->PSTN connection while
+* passing a 0 turns it back off.
+* 
+******************************************************************************/
+#define IXJCTL_POTS_PSTN               _IOW ('q', 0xD5, int)
+
+/******************************************************************************
+*
+* IOCTLs added by request.
+*
+* IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in
+*           /usr/include/asm/param.h, this determines the fundamental
+*           frequency of the clock ticks on your Linux system.  The kernel
+*           must be rebuilt if you change this value, also all modules you
+*           use (except this one) must be recompiled.  The default value
+*           is 100, and you only need to use this IOCTL if you use some
+*           other value.
+*
+*
+* IXJCTL_RATE sets the number of times per second that the driver polls
+*             the DSP.  This value cannot be larger than HZ.  By
+*             increasing both of these values, you may be able to reduce
+*             latency because the max hang time that can exist between the
+*             driver and the DSP will be reduced.
+*
+******************************************************************************/
+
+#define IXJCTL_HZ                       _IOW ('q', 0xE0, int)
+#define IXJCTL_RATE                     _IOW ('q', 0xE1, int)
+#define IXJCTL_FRAMES_READ             _IOR ('q', 0xE2, unsigned long)
+#define IXJCTL_FRAMES_WRITTEN          _IOR ('q', 0xE3, unsigned long)
+#define IXJCTL_READ_WAIT               _IOR ('q', 0xE4, unsigned long)
+#define IXJCTL_WRITE_WAIT              _IOR ('q', 0xE5, unsigned long)
+#define IXJCTL_DRYBUFFER_READ          _IOR ('q', 0xE6, unsigned long)
+#define IXJCTL_DRYBUFFER_CLEAR         _IO  ('q', 0xE7)
+#define IXJCTL_DTMF_PRESCALE           _IOW ('q', 0xE8, int)
+
+/******************************************************************************
+*
+* This ioctl allows the user application to control what events the driver
+* will send signals for, and what signals it will send for which event.
+* By default, if signaling is enabled, all events will send SIGIO when
+* they occur.  To disable signals for an event set the signal to 0.
+*
+******************************************************************************/
+typedef enum {
+       SIG_DTMF_READY,
+       SIG_HOOKSTATE,
+       SIG_FLASH,
+       SIG_PSTN_RING,
+       SIG_CALLER_ID,
+       SIG_PSTN_WINK,
+       SIG_F0, SIG_F1, SIG_F2, SIG_F3,
+       SIG_FC0, SIG_FC1, SIG_FC2, SIG_FC3,
+       SIG_READ_READY = 33,
+       SIG_WRITE_READY = 34
+} IXJ_SIGEVENT;
+
+typedef struct {
+       unsigned int event;
+       int signal;
+} IXJ_SIGDEF;
+
+#define IXJCTL_SIGCTL                  _IOW ('q', 0xE9, IXJ_SIGDEF *)
+
+/******************************************************************************
+*
+* These ioctls allow the user application to change the gain in the 
+* Smart Cable of the Internet Phone Card.  Sending -1 as a value will cause
+* return value to be the current setting.  Valid values to set are 0x00 - 0x1F
+*
+* 11111 = +12 dB
+* 10111 =   0 dB
+* 00000 = -34.5 dB
+*
+* IXJCTL_SC_RXG sets the Receive gain
+* IXJCTL_SC_TXG sets the Transmit gain
+*
+******************************************************************************/
+#define IXJCTL_SC_RXG                  _IOW ('q', 0xEA, int)
+#define IXJCTL_SC_TXG                  _IOW ('q', 0xEB, int)
+
+/******************************************************************************
+*
+* The intercom IOCTL's short the output from one card to the input of the
+* other and vice versa (actually done in the DSP read function).  It is only
+* necessary to execute the IOCTL on one card, but it is necessary to have
+* both devices open to be able to detect hook switch changes.  The record
+* codec and rate of each card must match the playback codec and rate of
+* the other card for this to work properly.
+*
+******************************************************************************/
+
+#define IXJCTL_INTERCOM_START          _IOW ('q', 0xFD, int)
+#define IXJCTL_INTERCOM_STOP           _IOW ('q', 0xFE, int)
+
+/******************************************************************************
+ *
+ * new structure for accessing raw filter information
+ *
+ ******************************************************************************/
+
+typedef struct {
+       unsigned int filter;
+       char enable;
+       unsigned int coeff[19];
+} IXJ_FILTER_RAW;
+
+#endif
diff --git a/lib/libdss-include/include/linux/jffs2.h b/lib/libdss-include/include/linux/jffs2.h
new file mode 100644 (file)
index 0000000..a18b719
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright © 2001-2007 Red Hat, Inc.
+ * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * Created by David Woodhouse <dwmw2@infradead.org>
+ *
+ * For licensing information, see the file 'LICENCE' in the
+ * jffs2 directory.
+ */
+
+#ifndef __LINUX_JFFS2_H__
+#define __LINUX_JFFS2_H__
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* You must include something which defines the C99 uintXX_t types. 
+   We don't do it from here because this file is used in too many
+   different environments. */
+
+/* Values we may expect to find in the 'magic' field */
+#define JFFS2_OLD_MAGIC_BITMASK 0x1984
+#define JFFS2_MAGIC_BITMASK 0x1985
+#define KSAMTIB_CIGAM_2SFFJ 0x8519 /* For detecting wrong-endian fs */
+#define JFFS2_EMPTY_BITMASK 0xffff
+#define JFFS2_DIRTY_BITMASK 0x0000
+
+/* Summary node MAGIC marker */
+#define JFFS2_SUM_MAGIC        0x02851885
+
+/* We only allow a single char for length, and 0xFF is empty flash so
+   we don't want it confused with a real length. Hence max 254.
+*/
+#define JFFS2_MAX_NAME_LEN 254
+
+/* How small can we sensibly write nodes? */
+#define JFFS2_MIN_DATA_LEN 128
+
+#define JFFS2_COMPR_NONE       0x00
+#define JFFS2_COMPR_ZERO       0x01
+#define JFFS2_COMPR_RTIME      0x02
+#define JFFS2_COMPR_RUBINMIPS  0x03
+#define JFFS2_COMPR_COPY       0x04
+#define JFFS2_COMPR_DYNRUBIN   0x05
+#define JFFS2_COMPR_ZLIB       0x06
+#define JFFS2_COMPR_LZO                0x07
+/* Compatibility flags. */
+#define JFFS2_COMPAT_MASK 0xc000      /* What do to if an unknown nodetype is found */
+#define JFFS2_NODE_ACCURATE 0x2000
+/* INCOMPAT: Fail to mount the filesystem */
+#define JFFS2_FEATURE_INCOMPAT 0xc000
+/* ROCOMPAT: Mount read-only */
+#define JFFS2_FEATURE_ROCOMPAT 0x8000
+/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000
+/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000
+
+#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1)
+#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2)
+#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4)
+
+#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6)
+
+#define JFFS2_NODETYPE_XATTR (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 8)
+#define JFFS2_NODETYPE_XREF (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 9)
+
+/* XATTR Related */
+#define JFFS2_XPREFIX_USER             1       /* for "user." */
+#define JFFS2_XPREFIX_SECURITY         2       /* for "security." */
+#define JFFS2_XPREFIX_ACL_ACCESS       3       /* for "system.posix_acl_access" */
+#define JFFS2_XPREFIX_ACL_DEFAULT      4       /* for "system.posix_acl_default" */
+#define JFFS2_XPREFIX_TRUSTED          5       /* for "trusted.*" */
+
+#define JFFS2_ACL_VERSION              0x0001
+
+// Maybe later...
+//#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+//#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4)
+
+
+#define JFFS2_INO_FLAG_PREREAD   1     /* Do read_inode() for this one at
+                                          mount time, don't wait for it to
+                                          happen later */
+#define JFFS2_INO_FLAG_USERCOMPR  2    /* User has requested a specific
+                                          compression type */
+
+
+/* These can go once we've made sure we've caught all uses without
+   byteswapping */
+
+typedef struct {
+       __u32 v32;
+} __attribute__((packed)) jint32_t;
+
+typedef struct {
+       __u32 m;
+} __attribute__((packed)) jmode_t;
+
+typedef struct {
+       __u16 v16;
+} __attribute__((packed)) jint16_t;
+
+struct jffs2_unknown_node
+{
+       /* All start like this */
+       jint16_t magic;
+       jint16_t nodetype;
+       jint32_t totlen; /* So we can skip over nodes we don't grok */
+       jint32_t hdr_crc;
+};
+
+struct jffs2_raw_dirent
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* == JFFS2_NODETYPE_DIRENT */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t pino;
+       jint32_t version;
+       jint32_t ino; /* == zero for unlink */
+       jint32_t mctime;
+       __u8 nsize;
+       __u8 type;
+       __u8 unused[2];
+       jint32_t node_crc;
+       jint32_t name_crc;
+       __u8 name[0];
+};
+
+/* The JFFS2 raw inode structure: Used for storage on physical media.  */
+/* The uid, gid, atime, mtime and ctime members could be longer, but
+   are left like this for space efficiency. If and when people decide
+   they really need them extended, it's simple enough to add support for
+   a new type of raw node.
+*/
+struct jffs2_raw_inode
+{
+       jint16_t magic;      /* A constant magic number.  */
+       jint16_t nodetype;   /* == JFFS2_NODETYPE_INODE */
+       jint32_t totlen;     /* Total length of this node (inc data, etc.) */
+       jint32_t hdr_crc;
+       jint32_t ino;        /* Inode number.  */
+       jint32_t version;    /* Version number.  */
+       jmode_t mode;       /* The file's type or mode.  */
+       jint16_t uid;        /* The file's owner.  */
+       jint16_t gid;        /* The file's group.  */
+       jint32_t isize;      /* Total resultant size of this inode (used for truncations)  */
+       jint32_t atime;      /* Last access time.  */
+       jint32_t mtime;      /* Last modification time.  */
+       jint32_t ctime;      /* Change time.  */
+       jint32_t offset;     /* Where to begin to write.  */
+       jint32_t csize;      /* (Compressed) data size */
+       jint32_t dsize;      /* Size of the node's data. (after decompression) */
+       __u8 compr;       /* Compression algorithm used */
+       __u8 usercompr;   /* Compression algorithm requested by the user */
+       jint16_t flags;      /* See JFFS2_INO_FLAG_* */
+       jint32_t data_crc;   /* CRC for the (compressed) data.  */
+       jint32_t node_crc;   /* CRC for the raw inode (excluding data)  */
+       __u8 data[0];
+};
+
+struct jffs2_raw_xattr {
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_XATTR */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t xid;           /* XATTR identifier number */
+       jint32_t version;
+       __u8 xprefix;
+       __u8 name_len;
+       jint16_t value_len;
+       jint32_t data_crc;
+       jint32_t node_crc;
+       __u8 data[0];
+} __attribute__((packed));
+
+struct jffs2_raw_xref
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_XREF */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t ino;           /* inode number */
+       jint32_t xid;           /* XATTR identifier number */
+       jint32_t xseqno;        /* xref sequential number */
+       jint32_t node_crc;
+} __attribute__((packed));
+
+struct jffs2_raw_summary
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_SUMMARY */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t sum_num;       /* number of sum entries*/
+       jint32_t cln_mkr;       /* clean marker size, 0 = no cleanmarker */
+       jint32_t padded;        /* sum of the size of padding nodes */
+       jint32_t sum_crc;       /* summary information crc */
+       jint32_t node_crc;      /* node crc */
+       jint32_t sum[0];        /* inode summary info */
+};
+
+union jffs2_node_union
+{
+       struct jffs2_raw_inode i;
+       struct jffs2_raw_dirent d;
+       struct jffs2_raw_xattr x;
+       struct jffs2_raw_xref r;
+       struct jffs2_raw_summary s;
+       struct jffs2_unknown_node u;
+};
+
+/* Data payload for device nodes. */
+union jffs2_device_node {
+       jint16_t old_id;
+       jint32_t new_id;
+};
+
+#endif /* __LINUX_JFFS2_H__ */
diff --git a/lib/libdss-include/include/linux/joystick.h b/lib/libdss-include/include/linux/joystick.h
new file mode 100644 (file)
index 0000000..141a6d5
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ *  Copyright (C) 1996-2000 Vojtech Pavlik
+ *
+ *  Sponsored by SuSE
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or 
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
+ * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
+ */
+#ifndef _LINUX_JOYSTICK_H
+#define _LINUX_JOYSTICK_H
+
+
+
+#include <linux/types.h>
+#include <linux/input.h>
+
+/*
+ * Version
+ */
+
+#define JS_VERSION             0x020100
+
+/*
+ * Types and constants for reading from /dev/js
+ */
+
+#define JS_EVENT_BUTTON                0x01    /* button pressed/released */
+#define JS_EVENT_AXIS          0x02    /* joystick moved */
+#define JS_EVENT_INIT          0x80    /* initial state of device */
+
+struct js_event {
+       __u32 time;     /* event timestamp in milliseconds */
+       __s16 value;    /* value */
+       __u8 type;      /* event type */
+       __u8 number;    /* axis/button number */
+};
+
+/*
+ * IOCTL commands for joystick driver
+ */
+
+#define JSIOCGVERSION          _IOR('j', 0x01, __u32)                          /* get driver version */
+
+#define JSIOCGAXES             _IOR('j', 0x11, __u8)                           /* get number of axes */
+#define JSIOCGBUTTONS          _IOR('j', 0x12, __u8)                           /* get number of buttons */
+#define JSIOCGNAME(len)                _IOC(_IOC_READ, 'j', 0x13, len)                 /* get identifier string */
+
+#define JSIOCSCORR             _IOW('j', 0x21, struct js_corr)                 /* set correction values */
+#define JSIOCGCORR             _IOR('j', 0x22, struct js_corr)                 /* get correction values */
+
+#define JSIOCSAXMAP            _IOW('j', 0x31, __u8[ABS_CNT])                  /* set axis mapping */
+#define JSIOCGAXMAP            _IOR('j', 0x32, __u8[ABS_CNT])                  /* get axis mapping */
+#define JSIOCSBTNMAP           _IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1])  /* set button mapping */
+#define JSIOCGBTNMAP           _IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1])  /* get button mapping */
+
+/*
+ * Types and constants for get/set correction
+ */
+
+#define JS_CORR_NONE           0x00    /* returns raw values */
+#define JS_CORR_BROKEN         0x01    /* broken line */
+
+struct js_corr {
+       __s32 coef[8];
+       __s16 prec;
+       __u16 type;
+};
+
+/*
+ * v0.x compatibility definitions
+ */
+
+#define JS_RETURN              sizeof(struct JS_DATA_TYPE)
+#define JS_TRUE                        1
+#define JS_FALSE               0
+#define JS_X_0                 0x01
+#define JS_Y_0                 0x02
+#define JS_X_1                 0x04
+#define JS_Y_1                 0x08
+#define JS_MAX                 2
+
+#define JS_DEF_TIMEOUT         0x1300
+#define JS_DEF_CORR            0
+#define JS_DEF_TIMELIMIT       10L
+
+#define JS_SET_CAL             1
+#define JS_GET_CAL             2
+#define JS_SET_TIMEOUT         3
+#define JS_GET_TIMEOUT         4
+#define JS_SET_TIMELIMIT       5
+#define JS_GET_TIMELIMIT       6
+#define JS_GET_ALL             7
+#define JS_SET_ALL             8
+
+struct JS_DATA_TYPE {
+       __s32 buttons;
+       __s32 x;
+       __s32 y;
+};
+
+struct JS_DATA_SAVE_TYPE_32 {
+       __s32 JS_TIMEOUT;
+       __s32 BUSY;
+       __s32 JS_EXPIRETIME;
+       __s32 JS_TIMELIMIT;
+       struct JS_DATA_TYPE JS_SAVE;
+       struct JS_DATA_TYPE JS_CORR;
+};
+
+struct JS_DATA_SAVE_TYPE_64 {
+       __s32 JS_TIMEOUT;
+       __s32 BUSY;
+       __s64 JS_EXPIRETIME;
+       __s64 JS_TIMELIMIT;
+       struct JS_DATA_TYPE JS_SAVE;
+       struct JS_DATA_TYPE JS_CORR;
+};
+
+
+#endif /* _LINUX_JOYSTICK_H */
diff --git a/lib/libdss-include/include/linux/kcmp.h b/lib/libdss-include/include/linux/kcmp.h
new file mode 100644 (file)
index 0000000..2dcd1b3
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _LINUX_KCMP_H
+#define _LINUX_KCMP_H
+
+/* Comparison type */
+enum kcmp_type {
+       KCMP_FILE,
+       KCMP_VM,
+       KCMP_FILES,
+       KCMP_FS,
+       KCMP_SIGHAND,
+       KCMP_IO,
+       KCMP_SYSVSEM,
+
+       KCMP_TYPES,
+};
+
+#endif /* _LINUX_KCMP_H */
diff --git a/lib/libdss-include/include/linux/kd.h b/lib/libdss-include/include/linux/kd.h
new file mode 100644 (file)
index 0000000..dc37bfb
--- /dev/null
@@ -0,0 +1,185 @@
+#ifndef _LINUX_KD_H
+#define _LINUX_KD_H
+#include <linux/types.h>
+
+
+/* 0x4B is 'K', to avoid collision with termios and vt */
+
+#define GIO_FONT       0x4B60  /* gets font in expanded form */
+#define PIO_FONT       0x4B61  /* use font in expanded form */
+
+#define GIO_FONTX      0x4B6B  /* get font using struct consolefontdesc */
+#define PIO_FONTX      0x4B6C  /* set font using struct consolefontdesc */
+struct consolefontdesc {
+       unsigned short charcount;       /* characters in font (256 or 512) */
+       unsigned short charheight;      /* scan lines per character (1-32) */
+       char *chardata;         /* font data in expanded form */
+};
+
+#define PIO_FONTRESET   0x4B6D /* reset to default font */
+
+#define GIO_CMAP       0x4B70  /* gets colour palette on VGA+ */
+#define PIO_CMAP       0x4B71  /* sets colour palette on VGA+ */
+
+#define KIOCSOUND      0x4B2F  /* start sound generation (0 for off) */
+#define KDMKTONE       0x4B30  /* generate tone */
+
+#define KDGETLED       0x4B31  /* return current led state */
+#define KDSETLED       0x4B32  /* set led state [lights, not flags] */
+#define        LED_SCR         0x01    /* scroll lock led */
+#define        LED_NUM         0x02    /* num lock led */
+#define        LED_CAP         0x04    /* caps lock led */
+
+#define KDGKBTYPE      0x4B33  /* get keyboard type */
+#define        KB_84           0x01
+#define        KB_101          0x02    /* this is what we always answer */
+#define        KB_OTHER        0x03
+
+#define KDADDIO                0x4B34  /* add i/o port as valid */
+#define KDDELIO                0x4B35  /* del i/o port as valid */
+#define KDENABIO       0x4B36  /* enable i/o to video board */
+#define KDDISABIO      0x4B37  /* disable i/o to video board */
+
+#define KDSETMODE      0x4B3A  /* set text/graphics mode */
+#define                KD_TEXT         0x00
+#define                KD_GRAPHICS     0x01
+#define                KD_TEXT0        0x02    /* obsolete */
+#define                KD_TEXT1        0x03    /* obsolete */
+#define                KD_TRANSPARENT  0x04
+
+#define KDGETMODE      0x4B3B  /* get current mode */
+
+#define KDMAPDISP      0x4B3C  /* map display into address space */
+#define KDUNMAPDISP    0x4B3D  /* unmap display from address space */
+
+typedef char scrnmap_t;
+#define                E_TABSZ         256
+#define GIO_SCRNMAP    0x4B40  /* get screen mapping from kernel */
+#define PIO_SCRNMAP    0x4B41  /* put screen mapping table in kernel */
+#define GIO_UNISCRNMAP  0x4B69 /* get full Unicode screen mapping */
+#define PIO_UNISCRNMAP  0x4B6A  /* set full Unicode screen mapping */
+
+#define GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
+struct unipair {
+       unsigned short unicode;
+       unsigned short fontpos;
+};
+struct unimapdesc {
+       unsigned short entry_ct;
+       struct unipair *entries;
+};
+#define PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
+#define PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
+struct unimapinit {
+       unsigned short advised_hashsize;  /* 0 if no opinion */
+       unsigned short advised_hashstep;  /* 0 if no opinion */
+       unsigned short advised_hashlevel; /* 0 if no opinion */
+};
+
+#define UNI_DIRECT_BASE 0xF000 /* start of Direct Font Region */
+#define UNI_DIRECT_MASK 0x01FF /* Direct Font Region bitmask */
+
+#define                K_RAW           0x00
+#define                K_XLATE         0x01
+#define                K_MEDIUMRAW     0x02
+#define                K_UNICODE       0x03
+#define                K_OFF           0x04
+#define KDGKBMODE      0x4B44  /* gets current keyboard mode */
+#define KDSKBMODE      0x4B45  /* sets current keyboard mode */
+
+#define                K_METABIT       0x03
+#define                K_ESCPREFIX     0x04
+#define KDGKBMETA      0x4B62  /* gets meta key handling mode */
+#define KDSKBMETA      0x4B63  /* sets meta key handling mode */
+
+#define                K_SCROLLLOCK    0x01
+#define                K_NUMLOCK       0x02
+#define                K_CAPSLOCK      0x04
+#define        KDGKBLED        0x4B64  /* get led flags (not lights) */
+#define        KDSKBLED        0x4B65  /* set led flags (not lights) */
+
+struct kbentry {
+       unsigned char kb_table;
+       unsigned char kb_index;
+       unsigned short kb_value;
+};
+#define                K_NORMTAB       0x00
+#define                K_SHIFTTAB      0x01
+#define                K_ALTTAB        0x02
+#define                K_ALTSHIFTTAB   0x03
+
+#define KDGKBENT       0x4B46  /* gets one entry in translation table */
+#define KDSKBENT       0x4B47  /* sets one entry in translation table */
+
+struct kbsentry {
+       unsigned char kb_func;
+       unsigned char kb_string[512];
+};
+#define KDGKBSENT      0x4B48  /* gets one function key string entry */
+#define KDSKBSENT      0x4B49  /* sets one function key string entry */
+
+struct kbdiacr {
+        unsigned char diacr, base, result;
+};
+struct kbdiacrs {
+        unsigned int kb_cnt;    /* number of entries in following array */
+       struct kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
+};
+#define KDGKBDIACR      0x4B4A  /* read kernel accent table */
+#define KDSKBDIACR      0x4B4B  /* write kernel accent table */
+
+struct kbdiacruc {
+       unsigned int diacr, base, result;
+};
+struct kbdiacrsuc {
+        unsigned int kb_cnt;    /* number of entries in following array */
+       struct kbdiacruc kbdiacruc[256];    /* MAX_DIACR from keyboard.h */
+};
+#define KDGKBDIACRUC    0x4BFA  /* read kernel accent table - UCS */
+#define KDSKBDIACRUC    0x4BFB  /* write kernel accent table - UCS */
+
+struct kbkeycode {
+       unsigned int scancode, keycode;
+};
+#define KDGETKEYCODE   0x4B4C  /* read kernel keycode table entry */
+#define KDSETKEYCODE   0x4B4D  /* write kernel keycode table entry */
+
+#define KDSIGACCEPT    0x4B4E  /* accept kbd generated signals */
+
+struct kbd_repeat {
+       int delay;      /* in msec; <= 0: don't change */
+       int period;     /* in msec; <= 0: don't change */
+                       /* earlier this field was misnamed "rate" */
+};
+
+#define KDKBDREP        0x4B52  /* set keyboard delay/repeat rate;
+                                * actually used values are returned */
+
+#define KDFONTOP       0x4B72  /* font operations */
+
+struct console_font_op {
+       unsigned int op;        /* operation code KD_FONT_OP_* */
+       unsigned int flags;     /* KD_FONT_FLAG_* */
+       unsigned int width, height;     /* font size */
+       unsigned int charcount;
+       unsigned char *data;    /* font data with height fixed to 32 */
+};
+
+struct console_font {
+       unsigned int width, height;     /* font size */
+       unsigned int charcount;
+       unsigned char *data;    /* font data with height fixed to 32 */
+};
+
+#define KD_FONT_OP_SET         0       /* Set font */
+#define KD_FONT_OP_GET         1       /* Get font */
+#define KD_FONT_OP_SET_DEFAULT 2       /* Set font to default, data points to name / NULL */
+#define KD_FONT_OP_COPY                3       /* Copy from another console */
+
+#define KD_FONT_FLAG_DONT_RECALC       1       /* Don't recalculate hw charcell size [compat] */
+
+/* note: 0x4B00-0x4B4E all have had a value at some time;
+   don't reuse for the time being */
+/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */
+
+#endif /* _LINUX_KD_H */
diff --git a/lib/libdss-include/include/linux/kdev_t.h b/lib/libdss-include/include/linux/kdev_t.h
new file mode 100644 (file)
index 0000000..3f10017
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _LINUX_KDEV_T_H
+#define _LINUX_KDEV_T_H
+
+/*
+Some programs want their definitions of MAJOR and MINOR and MKDEV
+from the kernel sources. These must be the externally visible ones.
+*/
+#define MAJOR(dev)     ((dev)>>8)
+#define MINOR(dev)     ((dev) & 0xff)
+#define MKDEV(ma,mi)   ((ma)<<8 | (mi))
+#endif /* _LINUX_KDEV_T_H */
diff --git a/lib/libdss-include/include/linux/kernel-page-flags.h b/lib/libdss-include/include/linux/kernel-page-flags.h
new file mode 100644 (file)
index 0000000..a4c6e2c
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef LINUX_KERNEL_PAGE_FLAGS_H
+#define LINUX_KERNEL_PAGE_FLAGS_H
+
+/*
+ * Stable page flag bits exported to user space
+ */
+
+#define KPF_LOCKED             0
+#define KPF_ERROR              1
+#define KPF_REFERENCED         2
+#define KPF_UPTODATE           3
+#define KPF_DIRTY              4
+#define KPF_LRU                        5
+#define KPF_ACTIVE             6
+#define KPF_SLAB               7
+#define KPF_WRITEBACK          8
+#define KPF_RECLAIM            9
+#define KPF_BUDDY              10
+
+/* 11-20: new additions in 2.6.31 */
+#define KPF_MMAP               11
+#define KPF_ANON               12
+#define KPF_SWAPCACHE          13
+#define KPF_SWAPBACKED         14
+#define KPF_COMPOUND_HEAD      15
+#define KPF_COMPOUND_TAIL      16
+#define KPF_HUGE               17
+#define KPF_UNEVICTABLE                18
+#define KPF_HWPOISON           19
+#define KPF_NOPAGE             20
+
+#define KPF_KSM                        21
+#define KPF_THP                        22
+#define KPF_BALLOON            23
+#define KPF_ZERO_PAGE          24
+#define KPF_IDLE               25
+
+
+#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
diff --git a/lib/libdss-include/include/linux/kernel.h b/lib/libdss-include/include/linux/kernel.h
new file mode 100644 (file)
index 0000000..642d1e9
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_KERNEL_H
+#define _LINUX_KERNEL_H
+
+#include <linux/sysinfo.h>
+
+/*
+ * 'kernel.h' contains some often-used function prototypes etc
+ */
+#define __ALIGN_KERNEL(x, a)           __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+#define __ALIGN_KERNEL_MASK(x, mask)   (((x) + (mask)) & ~(mask))
+
+
+#endif /* _LINUX_KERNEL_H */
diff --git a/lib/libdss-include/include/linux/kernelcapi.h b/lib/libdss-include/include/linux/kernelcapi.h
new file mode 100644 (file)
index 0000000..7b6e7b1
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * $Id: kernelcapi.h,v 1.8.6.2 2001/02/07 11:31:31 kai Exp $
+ * 
+ * Kernel CAPI 2.0 Interface for Linux
+ * 
+ * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
+ * 
+ */
+
+#ifndef __KERNELCAPI_H__
+#define __KERNELCAPI_H__
+
+#define CAPI_MAXAPPL   240     /* maximum number of applications  */
+#define CAPI_MAXCONTR  32      /* maximum number of controller    */
+#define CAPI_MAXDATAWINDOW     8
+
+
+typedef struct kcapi_flagdef {
+       int contr;
+       int flag;
+} kcapi_flagdef;
+
+typedef struct kcapi_carddef {
+       char            driver[32];
+       unsigned int    port;
+       unsigned        irq;
+       unsigned int    membase;
+       int             cardnr;
+} kcapi_carddef;
+
+/* new ioctls >= 10 */
+#define KCAPI_CMD_TRACE                10
+#define KCAPI_CMD_ADDCARD      11      /* OBSOLETE */
+
+/* 
+ * flag > 2 => trace also data
+ * flag & 1 => show trace
+ */
+#define KCAPI_TRACE_OFF                        0
+#define KCAPI_TRACE_SHORT_NO_DATA      1
+#define KCAPI_TRACE_FULL_NO_DATA       2
+#define KCAPI_TRACE_SHORT              3
+#define KCAPI_TRACE_FULL               4
+
+
+
+#endif /* __KERNELCAPI_H__ */
diff --git a/lib/libdss-include/include/linux/kexec.h b/lib/libdss-include/include/linux/kexec.h
new file mode 100644 (file)
index 0000000..99fcbf0
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef LINUX_KEXEC_H
+#define LINUX_KEXEC_H
+
+/* kexec system call -  It loads the new kernel to boot into.
+ * kexec does not sync, or unmount filesystems so if you need
+ * that to happen you need to do that yourself.
+ */
+
+#include <linux/types.h>
+
+/* kexec flags for different usage scenarios */
+#define KEXEC_ON_CRASH         0x00000001
+#define KEXEC_PRESERVE_CONTEXT 0x00000002
+#define KEXEC_ARCH_MASK                0xffff0000
+
+/*
+ * Kexec file load interface flags.
+ * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image.
+ * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image.
+ * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd
+ *                           fd field.
+ */
+#define KEXEC_FILE_UNLOAD      0x00000001
+#define KEXEC_FILE_ON_CRASH    0x00000002
+#define KEXEC_FILE_NO_INITRAMFS        0x00000004
+
+/* These values match the ELF architecture values.
+ * Unless there is a good reason that should continue to be the case.
+ */
+#define KEXEC_ARCH_DEFAULT ( 0 << 16)
+#define KEXEC_ARCH_386     ( 3 << 16)
+#define KEXEC_ARCH_68K     ( 4 << 16)
+#define KEXEC_ARCH_X86_64  (62 << 16)
+#define KEXEC_ARCH_PPC     (20 << 16)
+#define KEXEC_ARCH_PPC64   (21 << 16)
+#define KEXEC_ARCH_IA_64   (50 << 16)
+#define KEXEC_ARCH_ARM     (40 << 16)
+#define KEXEC_ARCH_S390    (22 << 16)
+#define KEXEC_ARCH_SH      (42 << 16)
+#define KEXEC_ARCH_MIPS_LE (10 << 16)
+#define KEXEC_ARCH_MIPS    ( 8 << 16)
+
+/* The artificial cap on the number of segments passed to kexec_load. */
+#define KEXEC_SEGMENT_MAX 16
+
+/*
+ * This structure is used to hold the arguments that are used when
+ * loading  kernel binaries.
+ */
+struct kexec_segment {
+       const void *buf;
+       size_t bufsz;
+       const void *mem;
+       size_t memsz;
+};
+
+
+#endif /* LINUX_KEXEC_H */
diff --git a/lib/libdss-include/include/linux/keyboard.h b/lib/libdss-include/include/linux/keyboard.h
new file mode 100644 (file)
index 0000000..b4be860
--- /dev/null
@@ -0,0 +1,443 @@
+#ifndef __LINUX_KEYBOARD_H
+#define __LINUX_KEYBOARD_H
+
+#include <linux/wait.h>
+
+#define KG_SHIFT       0
+#define KG_CTRL                2
+#define KG_ALT         3
+#define KG_ALTGR       1
+#define KG_SHIFTL      4
+#define KG_KANASHIFT   4
+#define KG_SHIFTR      5
+#define KG_CTRLL       6
+#define KG_CTRLR       7
+#define KG_CAPSSHIFT   8
+
+#define NR_SHIFT       9
+
+#define NR_KEYS                256
+#define MAX_NR_KEYMAPS 256
+/* This means 128Kb if all keymaps are allocated. Only the superuser
+       may increase the number of keymaps beyond MAX_NR_OF_USER_KEYMAPS. */
+#define MAX_NR_OF_USER_KEYMAPS 256     /* should be at least 7 */
+
+
+#define MAX_NR_FUNC    256     /* max nr of strings assigned to keys */
+
+#define KT_LATIN       0       /* we depend on this being zero */
+#define KT_LETTER      11      /* symbol that can be acted upon by CapsLock */
+#define KT_FN          1
+#define KT_SPEC                2
+#define KT_PAD         3
+#define KT_DEAD                4
+#define KT_CONS                5
+#define KT_CUR         6
+#define KT_SHIFT       7
+#define KT_META                8
+#define KT_ASCII       9
+#define KT_LOCK                10
+#define KT_SLOCK       12
+#define KT_DEAD2       13
+#define KT_BRL         14
+
+#define K(t,v)         (((t)<<8)|(v))
+#define KTYP(x)                ((x) >> 8)
+#define KVAL(x)                ((x) & 0xff)
+
+#define K_F1           K(KT_FN,0)
+#define K_F2           K(KT_FN,1)
+#define K_F3           K(KT_FN,2)
+#define K_F4           K(KT_FN,3)
+#define K_F5           K(KT_FN,4)
+#define K_F6           K(KT_FN,5)
+#define K_F7           K(KT_FN,6)
+#define K_F8           K(KT_FN,7)
+#define K_F9           K(KT_FN,8)
+#define K_F10          K(KT_FN,9)
+#define K_F11          K(KT_FN,10)
+#define K_F12          K(KT_FN,11)
+#define K_F13          K(KT_FN,12)
+#define K_F14          K(KT_FN,13)
+#define K_F15          K(KT_FN,14)
+#define K_F16          K(KT_FN,15)
+#define K_F17          K(KT_FN,16)
+#define K_F18          K(KT_FN,17)
+#define K_F19          K(KT_FN,18)
+#define K_F20          K(KT_FN,19)
+#define K_FIND         K(KT_FN,20)
+#define K_INSERT       K(KT_FN,21)
+#define K_REMOVE       K(KT_FN,22)
+#define K_SELECT       K(KT_FN,23)
+#define K_PGUP         K(KT_FN,24) /* PGUP is a synonym for PRIOR */
+#define K_PGDN         K(KT_FN,25) /* PGDN is a synonym for NEXT */
+#define K_MACRO                K(KT_FN,26)
+#define K_HELP         K(KT_FN,27)
+#define K_DO           K(KT_FN,28)
+#define K_PAUSE                K(KT_FN,29)
+#define K_F21          K(KT_FN,30)
+#define K_F22          K(KT_FN,31)
+#define K_F23          K(KT_FN,32)
+#define K_F24          K(KT_FN,33)
+#define K_F25          K(KT_FN,34)
+#define K_F26          K(KT_FN,35)
+#define K_F27          K(KT_FN,36)
+#define K_F28          K(KT_FN,37)
+#define K_F29          K(KT_FN,38)
+#define K_F30          K(KT_FN,39)
+#define K_F31          K(KT_FN,40)
+#define K_F32          K(KT_FN,41)
+#define K_F33          K(KT_FN,42)
+#define K_F34          K(KT_FN,43)
+#define K_F35          K(KT_FN,44)
+#define K_F36          K(KT_FN,45)
+#define K_F37          K(KT_FN,46)
+#define K_F38          K(KT_FN,47)
+#define K_F39          K(KT_FN,48)
+#define K_F40          K(KT_FN,49)
+#define K_F41          K(KT_FN,50)
+#define K_F42          K(KT_FN,51)
+#define K_F43          K(KT_FN,52)
+#define K_F44          K(KT_FN,53)
+#define K_F45          K(KT_FN,54)
+#define K_F46          K(KT_FN,55)
+#define K_F47          K(KT_FN,56)
+#define K_F48          K(KT_FN,57)
+#define K_F49          K(KT_FN,58)
+#define K_F50          K(KT_FN,59)
+#define K_F51          K(KT_FN,60)
+#define K_F52          K(KT_FN,61)
+#define K_F53          K(KT_FN,62)
+#define K_F54          K(KT_FN,63)
+#define K_F55          K(KT_FN,64)
+#define K_F56          K(KT_FN,65)
+#define K_F57          K(KT_FN,66)
+#define K_F58          K(KT_FN,67)
+#define K_F59          K(KT_FN,68)
+#define K_F60          K(KT_FN,69)
+#define K_F61          K(KT_FN,70)
+#define K_F62          K(KT_FN,71)
+#define K_F63          K(KT_FN,72)
+#define K_F64          K(KT_FN,73)
+#define K_F65          K(KT_FN,74)
+#define K_F66          K(KT_FN,75)
+#define K_F67          K(KT_FN,76)
+#define K_F68          K(KT_FN,77)
+#define K_F69          K(KT_FN,78)
+#define K_F70          K(KT_FN,79)
+#define K_F71          K(KT_FN,80)
+#define K_F72          K(KT_FN,81)
+#define K_F73          K(KT_FN,82)
+#define K_F74          K(KT_FN,83)
+#define K_F75          K(KT_FN,84)
+#define K_F76          K(KT_FN,85)
+#define K_F77          K(KT_FN,86)
+#define K_F78          K(KT_FN,87)
+#define K_F79          K(KT_FN,88)
+#define K_F80          K(KT_FN,89)
+#define K_F81          K(KT_FN,90)
+#define K_F82          K(KT_FN,91)
+#define K_F83          K(KT_FN,92)
+#define K_F84          K(KT_FN,93)
+#define K_F85          K(KT_FN,94)
+#define K_F86          K(KT_FN,95)
+#define K_F87          K(KT_FN,96)
+#define K_F88          K(KT_FN,97)
+#define K_F89          K(KT_FN,98)
+#define K_F90          K(KT_FN,99)
+#define K_F91          K(KT_FN,100)
+#define K_F92          K(KT_FN,101)
+#define K_F93          K(KT_FN,102)
+#define K_F94          K(KT_FN,103)
+#define K_F95          K(KT_FN,104)
+#define K_F96          K(KT_FN,105)
+#define K_F97          K(KT_FN,106)
+#define K_F98          K(KT_FN,107)
+#define K_F99          K(KT_FN,108)
+#define K_F100         K(KT_FN,109)
+#define K_F101         K(KT_FN,110)
+#define K_F102         K(KT_FN,111)
+#define K_F103         K(KT_FN,112)
+#define K_F104         K(KT_FN,113)
+#define K_F105         K(KT_FN,114)
+#define K_F106         K(KT_FN,115)
+#define K_F107         K(KT_FN,116)
+#define K_F108         K(KT_FN,117)
+#define K_F109         K(KT_FN,118)
+#define K_F110         K(KT_FN,119)
+#define K_F111         K(KT_FN,120)
+#define K_F112         K(KT_FN,121)
+#define K_F113         K(KT_FN,122)
+#define K_F114         K(KT_FN,123)
+#define K_F115         K(KT_FN,124)
+#define K_F116         K(KT_FN,125)
+#define K_F117         K(KT_FN,126)
+#define K_F118         K(KT_FN,127)
+#define K_F119         K(KT_FN,128)
+#define K_F120         K(KT_FN,129)
+#define K_F121         K(KT_FN,130)
+#define K_F122         K(KT_FN,131)
+#define K_F123         K(KT_FN,132)
+#define K_F124         K(KT_FN,133)
+#define K_F125         K(KT_FN,134)
+#define K_F126         K(KT_FN,135)
+#define K_F127         K(KT_FN,136)
+#define K_F128         K(KT_FN,137)
+#define K_F129         K(KT_FN,138)
+#define K_F130         K(KT_FN,139)
+#define K_F131         K(KT_FN,140)
+#define K_F132         K(KT_FN,141)
+#define K_F133         K(KT_FN,142)
+#define K_F134         K(KT_FN,143)
+#define K_F135         K(KT_FN,144)
+#define K_F136         K(KT_FN,145)
+#define K_F137         K(KT_FN,146)
+#define K_F138         K(KT_FN,147)
+#define K_F139         K(KT_FN,148)
+#define K_F140         K(KT_FN,149)
+#define K_F141         K(KT_FN,150)
+#define K_F142         K(KT_FN,151)
+#define K_F143         K(KT_FN,152)
+#define K_F144         K(KT_FN,153)
+#define K_F145         K(KT_FN,154)
+#define K_F146         K(KT_FN,155)
+#define K_F147         K(KT_FN,156)
+#define K_F148         K(KT_FN,157)
+#define K_F149         K(KT_FN,158)
+#define K_F150         K(KT_FN,159)
+#define K_F151         K(KT_FN,160)
+#define K_F152         K(KT_FN,161)
+#define K_F153         K(KT_FN,162)
+#define K_F154         K(KT_FN,163)
+#define K_F155         K(KT_FN,164)
+#define K_F156         K(KT_FN,165)
+#define K_F157         K(KT_FN,166)
+#define K_F158         K(KT_FN,167)
+#define K_F159         K(KT_FN,168)
+#define K_F160         K(KT_FN,169)
+#define K_F161         K(KT_FN,170)
+#define K_F162         K(KT_FN,171)
+#define K_F163         K(KT_FN,172)
+#define K_F164         K(KT_FN,173)
+#define K_F165         K(KT_FN,174)
+#define K_F166         K(KT_FN,175)
+#define K_F167         K(KT_FN,176)
+#define K_F168         K(KT_FN,177)
+#define K_F169         K(KT_FN,178)
+#define K_F170         K(KT_FN,179)
+#define K_F171         K(KT_FN,180)
+#define K_F172         K(KT_FN,181)
+#define K_F173         K(KT_FN,182)
+#define K_F174         K(KT_FN,183)
+#define K_F175         K(KT_FN,184)
+#define K_F176         K(KT_FN,185)
+#define K_F177         K(KT_FN,186)
+#define K_F178         K(KT_FN,187)
+#define K_F179         K(KT_FN,188)
+#define K_F180         K(KT_FN,189)
+#define K_F181         K(KT_FN,190)
+#define K_F182         K(KT_FN,191)
+#define K_F183         K(KT_FN,192)
+#define K_F184         K(KT_FN,193)
+#define K_F185         K(KT_FN,194)
+#define K_F186         K(KT_FN,195)
+#define K_F187         K(KT_FN,196)
+#define K_F188         K(KT_FN,197)
+#define K_F189         K(KT_FN,198)
+#define K_F190         K(KT_FN,199)
+#define K_F191         K(KT_FN,200)
+#define K_F192         K(KT_FN,201)
+#define K_F193         K(KT_FN,202)
+#define K_F194         K(KT_FN,203)
+#define K_F195         K(KT_FN,204)
+#define K_F196         K(KT_FN,205)
+#define K_F197         K(KT_FN,206)
+#define K_F198         K(KT_FN,207)
+#define K_F199         K(KT_FN,208)
+#define K_F200         K(KT_FN,209)
+#define K_F201         K(KT_FN,210)
+#define K_F202         K(KT_FN,211)
+#define K_F203         K(KT_FN,212)
+#define K_F204         K(KT_FN,213)
+#define K_F205         K(KT_FN,214)
+#define K_F206         K(KT_FN,215)
+#define K_F207         K(KT_FN,216)
+#define K_F208         K(KT_FN,217)
+#define K_F209         K(KT_FN,218)
+#define K_F210         K(KT_FN,219)
+#define K_F211         K(KT_FN,220)
+#define K_F212         K(KT_FN,221)
+#define K_F213         K(KT_FN,222)
+#define K_F214         K(KT_FN,223)
+#define K_F215         K(KT_FN,224)
+#define K_F216         K(KT_FN,225)
+#define K_F217         K(KT_FN,226)
+#define K_F218         K(KT_FN,227)
+#define K_F219         K(KT_FN,228)
+#define K_F220         K(KT_FN,229)
+#define K_F221         K(KT_FN,230)
+#define K_F222         K(KT_FN,231)
+#define K_F223         K(KT_FN,232)
+#define K_F224         K(KT_FN,233)
+#define K_F225         K(KT_FN,234)
+#define K_F226         K(KT_FN,235)
+#define K_F227         K(KT_FN,236)
+#define K_F228         K(KT_FN,237)
+#define K_F229         K(KT_FN,238)
+#define K_F230         K(KT_FN,239)
+#define K_F231         K(KT_FN,240)
+#define K_F232         K(KT_FN,241)
+#define K_F233         K(KT_FN,242)
+#define K_F234         K(KT_FN,243)
+#define K_F235         K(KT_FN,244)
+#define K_F236         K(KT_FN,245)
+#define K_F237         K(KT_FN,246)
+#define K_F238         K(KT_FN,247)
+#define K_F239         K(KT_FN,248)
+#define K_F240         K(KT_FN,249)
+#define K_F241         K(KT_FN,250)
+#define K_F242         K(KT_FN,251)
+#define K_F243         K(KT_FN,252)
+#define K_F244         K(KT_FN,253)
+#define K_F245         K(KT_FN,254)
+#define K_UNDO         K(KT_FN,255)
+
+
+#define K_HOLE         K(KT_SPEC,0)
+#define K_ENTER                K(KT_SPEC,1)
+#define K_SH_REGS      K(KT_SPEC,2)
+#define K_SH_MEM       K(KT_SPEC,3)
+#define K_SH_STAT      K(KT_SPEC,4)
+#define K_BREAK                K(KT_SPEC,5)
+#define K_CONS         K(KT_SPEC,6)
+#define K_CAPS         K(KT_SPEC,7)
+#define K_NUM          K(KT_SPEC,8)
+#define K_HOLD         K(KT_SPEC,9)
+#define K_SCROLLFORW   K(KT_SPEC,10)
+#define K_SCROLLBACK   K(KT_SPEC,11)
+#define K_BOOT         K(KT_SPEC,12)
+#define K_CAPSON       K(KT_SPEC,13)
+#define K_COMPOSE      K(KT_SPEC,14)
+#define K_SAK          K(KT_SPEC,15)
+#define K_DECRCONSOLE  K(KT_SPEC,16)
+#define K_INCRCONSOLE  K(KT_SPEC,17)
+#define K_SPAWNCONSOLE K(KT_SPEC,18)
+#define K_BARENUMLOCK  K(KT_SPEC,19)
+
+#define K_ALLOCATED    K(KT_SPEC,126) /* dynamically allocated keymap */
+#define K_NOSUCHMAP    K(KT_SPEC,127) /* returned by KDGKBENT */
+
+#define K_P0           K(KT_PAD,0)
+#define K_P1           K(KT_PAD,1)
+#define K_P2           K(KT_PAD,2)
+#define K_P3           K(KT_PAD,3)
+#define K_P4           K(KT_PAD,4)
+#define K_P5           K(KT_PAD,5)
+#define K_P6           K(KT_PAD,6)
+#define K_P7           K(KT_PAD,7)
+#define K_P8           K(KT_PAD,8)
+#define K_P9           K(KT_PAD,9)
+#define K_PPLUS                K(KT_PAD,10)    /* key-pad plus */
+#define K_PMINUS       K(KT_PAD,11)    /* key-pad minus */
+#define K_PSTAR                K(KT_PAD,12)    /* key-pad asterisk (star) */
+#define K_PSLASH       K(KT_PAD,13)    /* key-pad slash */
+#define K_PENTER       K(KT_PAD,14)    /* key-pad enter */
+#define K_PCOMMA       K(KT_PAD,15)    /* key-pad comma: kludge... */
+#define K_PDOT         K(KT_PAD,16)    /* key-pad dot (period): kludge... */
+#define K_PPLUSMINUS   K(KT_PAD,17)    /* key-pad plus/minus */
+#define K_PPARENL      K(KT_PAD,18)    /* key-pad left parenthesis */
+#define K_PPARENR      K(KT_PAD,19)    /* key-pad right parenthesis */
+
+#define NR_PAD         20
+
+#define K_DGRAVE       K(KT_DEAD,0)
+#define K_DACUTE       K(KT_DEAD,1)
+#define K_DCIRCM       K(KT_DEAD,2)
+#define K_DTILDE       K(KT_DEAD,3)
+#define K_DDIERE       K(KT_DEAD,4)
+#define K_DCEDIL       K(KT_DEAD,5)
+
+#define NR_DEAD                6
+
+#define K_DOWN         K(KT_CUR,0)
+#define K_LEFT         K(KT_CUR,1)
+#define K_RIGHT                K(KT_CUR,2)
+#define K_UP           K(KT_CUR,3)
+
+#define K_SHIFT                K(KT_SHIFT,KG_SHIFT)
+#define K_CTRL         K(KT_SHIFT,KG_CTRL)
+#define K_ALT          K(KT_SHIFT,KG_ALT)
+#define K_ALTGR                K(KT_SHIFT,KG_ALTGR)
+#define K_SHIFTL       K(KT_SHIFT,KG_SHIFTL)
+#define K_SHIFTR       K(KT_SHIFT,KG_SHIFTR)
+#define K_CTRLL                K(KT_SHIFT,KG_CTRLL)
+#define K_CTRLR                K(KT_SHIFT,KG_CTRLR)
+#define K_CAPSSHIFT    K(KT_SHIFT,KG_CAPSSHIFT)
+
+#define K_ASC0         K(KT_ASCII,0)
+#define K_ASC1         K(KT_ASCII,1)
+#define K_ASC2         K(KT_ASCII,2)
+#define K_ASC3         K(KT_ASCII,3)
+#define K_ASC4         K(KT_ASCII,4)
+#define K_ASC5         K(KT_ASCII,5)
+#define K_ASC6         K(KT_ASCII,6)
+#define K_ASC7         K(KT_ASCII,7)
+#define K_ASC8         K(KT_ASCII,8)
+#define K_ASC9         K(KT_ASCII,9)
+#define K_HEX0         K(KT_ASCII,10)
+#define K_HEX1         K(KT_ASCII,11)
+#define K_HEX2         K(KT_ASCII,12)
+#define K_HEX3         K(KT_ASCII,13)
+#define K_HEX4         K(KT_ASCII,14)
+#define K_HEX5         K(KT_ASCII,15)
+#define K_HEX6         K(KT_ASCII,16)
+#define K_HEX7         K(KT_ASCII,17)
+#define K_HEX8         K(KT_ASCII,18)
+#define K_HEX9         K(KT_ASCII,19)
+#define K_HEXa         K(KT_ASCII,20)
+#define K_HEXb         K(KT_ASCII,21)
+#define K_HEXc         K(KT_ASCII,22)
+#define K_HEXd         K(KT_ASCII,23)
+#define K_HEXe         K(KT_ASCII,24)
+#define K_HEXf         K(KT_ASCII,25)
+
+#define NR_ASCII       26
+
+#define K_SHIFTLOCK    K(KT_LOCK,KG_SHIFT)
+#define K_CTRLLOCK     K(KT_LOCK,KG_CTRL)
+#define K_ALTLOCK      K(KT_LOCK,KG_ALT)
+#define K_ALTGRLOCK    K(KT_LOCK,KG_ALTGR)
+#define K_SHIFTLLOCK   K(KT_LOCK,KG_SHIFTL)
+#define K_SHIFTRLOCK   K(KT_LOCK,KG_SHIFTR)
+#define K_CTRLLLOCK    K(KT_LOCK,KG_CTRLL)
+#define K_CTRLRLOCK    K(KT_LOCK,KG_CTRLR)
+#define K_CAPSSHIFTLOCK        K(KT_LOCK,KG_CAPSSHIFT)
+
+#define K_SHIFT_SLOCK  K(KT_SLOCK,KG_SHIFT)
+#define K_CTRL_SLOCK   K(KT_SLOCK,KG_CTRL)
+#define K_ALT_SLOCK    K(KT_SLOCK,KG_ALT)
+#define K_ALTGR_SLOCK  K(KT_SLOCK,KG_ALTGR)
+#define K_SHIFTL_SLOCK K(KT_SLOCK,KG_SHIFTL)
+#define K_SHIFTR_SLOCK K(KT_SLOCK,KG_SHIFTR)
+#define K_CTRLL_SLOCK  K(KT_SLOCK,KG_CTRLL)
+#define K_CTRLR_SLOCK  K(KT_SLOCK,KG_CTRLR)
+#define K_CAPSSHIFT_SLOCK      K(KT_SLOCK,KG_CAPSSHIFT)
+
+#define NR_LOCK                9
+
+#define K_BRL_BLANK     K(KT_BRL, 0)
+#define K_BRL_DOT1      K(KT_BRL, 1)
+#define K_BRL_DOT2      K(KT_BRL, 2)
+#define K_BRL_DOT3      K(KT_BRL, 3)
+#define K_BRL_DOT4      K(KT_BRL, 4)
+#define K_BRL_DOT5      K(KT_BRL, 5)
+#define K_BRL_DOT6      K(KT_BRL, 6)
+#define K_BRL_DOT7      K(KT_BRL, 7)
+#define K_BRL_DOT8      K(KT_BRL, 8)
+#define K_BRL_DOT9      K(KT_BRL, 9)
+#define K_BRL_DOT10     K(KT_BRL, 10)
+
+#define NR_BRL         11
+
+#define MAX_DIACR      256
+#endif /* __LINUX_KEYBOARD_H */
diff --git a/lib/libdss-include/include/linux/keyctl.h b/lib/libdss-include/include/linux/keyctl.h
new file mode 100644 (file)
index 0000000..840cb99
--- /dev/null
@@ -0,0 +1,61 @@
+/* keyctl.h: keyctl command IDs
+ *
+ * Copyright (C) 2004, 2008 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_KEYCTL_H
+#define _LINUX_KEYCTL_H
+
+/* special process keyring shortcut IDs */
+#define KEY_SPEC_THREAD_KEYRING                -1      /* - key ID for thread-specific keyring */
+#define KEY_SPEC_PROCESS_KEYRING       -2      /* - key ID for process-specific keyring */
+#define KEY_SPEC_SESSION_KEYRING       -3      /* - key ID for session-specific keyring */
+#define KEY_SPEC_USER_KEYRING          -4      /* - key ID for UID-specific keyring */
+#define KEY_SPEC_USER_SESSION_KEYRING  -5      /* - key ID for UID-session keyring */
+#define KEY_SPEC_GROUP_KEYRING         -6      /* - key ID for GID-specific keyring */
+#define KEY_SPEC_REQKEY_AUTH_KEY       -7      /* - key ID for assumed request_key auth key */
+#define KEY_SPEC_REQUESTOR_KEYRING     -8      /* - key ID for request_key() dest keyring */
+
+/* request-key default keyrings */
+#define KEY_REQKEY_DEFL_NO_CHANGE              -1
+#define KEY_REQKEY_DEFL_DEFAULT                        0
+#define KEY_REQKEY_DEFL_THREAD_KEYRING         1
+#define KEY_REQKEY_DEFL_PROCESS_KEYRING                2
+#define KEY_REQKEY_DEFL_SESSION_KEYRING                3
+#define KEY_REQKEY_DEFL_USER_KEYRING           4
+#define KEY_REQKEY_DEFL_USER_SESSION_KEYRING   5
+#define KEY_REQKEY_DEFL_GROUP_KEYRING          6
+#define KEY_REQKEY_DEFL_REQUESTOR_KEYRING      7
+
+/* keyctl commands */
+#define KEYCTL_GET_KEYRING_ID          0       /* ask for a keyring's ID */
+#define KEYCTL_JOIN_SESSION_KEYRING    1       /* join or start named session keyring */
+#define KEYCTL_UPDATE                  2       /* update a key */
+#define KEYCTL_REVOKE                  3       /* revoke a key */
+#define KEYCTL_CHOWN                   4       /* set ownership of a key */
+#define KEYCTL_SETPERM                 5       /* set perms on a key */
+#define KEYCTL_DESCRIBE                        6       /* describe a key */
+#define KEYCTL_CLEAR                   7       /* clear contents of a keyring */
+#define KEYCTL_LINK                    8       /* link a key into a keyring */
+#define KEYCTL_UNLINK                  9       /* unlink a key from a keyring */
+#define KEYCTL_SEARCH                  10      /* search for a key in a keyring */
+#define KEYCTL_READ                    11      /* read a key or keyring's contents */
+#define KEYCTL_INSTANTIATE             12      /* instantiate a partially constructed key */
+#define KEYCTL_NEGATE                  13      /* negate a partially constructed key */
+#define KEYCTL_SET_REQKEY_KEYRING      14      /* set default request-key keyring */
+#define KEYCTL_SET_TIMEOUT             15      /* set key timeout */
+#define KEYCTL_ASSUME_AUTHORITY                16      /* assume request_key() authorisation */
+#define KEYCTL_GET_SECURITY            17      /* get key security label */
+#define KEYCTL_SESSION_TO_PARENT       18      /* apply session keyring to parent process */
+#define KEYCTL_REJECT                  19      /* reject a partially constructed key */
+#define KEYCTL_INSTANTIATE_IOV         20      /* instantiate a partially constructed key */
+#define KEYCTL_INVALIDATE              21      /* invalidate a key */
+#define KEYCTL_GET_PERSISTENT          22      /* get a user's persistent keyring */
+
+#endif /*  _LINUX_KEYCTL_H */
diff --git a/lib/libdss-include/include/linux/kvm.h b/lib/libdss-include/include/linux/kvm.h
new file mode 100644 (file)
index 0000000..dcc410e
--- /dev/null
@@ -0,0 +1,1272 @@
+#ifndef __LINUX_KVM_H
+#define __LINUX_KVM_H
+
+/*
+ * Userspace interface for /dev/kvm - kernel based virtual machine
+ *
+ * Note: you must update KVM_API_VERSION if you change this interface.
+ */
+
+#include <linux/types.h>
+
+#include <linux/ioctl.h>
+#include <asm/kvm.h>
+
+#define KVM_API_VERSION 12
+
+/* *** Deprecated interfaces *** */
+
+#define KVM_TRC_SHIFT           16
+
+#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
+#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
+
+#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
+#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
+#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
+
+#define KVM_TRC_HEAD_SIZE       12
+#define KVM_TRC_CYCLE_SIZE      8
+#define KVM_TRC_EXTRA_MAX       7
+
+#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
+#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
+#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
+#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
+#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
+#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
+#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
+#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
+#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
+#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
+#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
+#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
+#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
+#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
+#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
+#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
+#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
+#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
+#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
+#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
+#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
+#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
+#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
+#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
+
+struct kvm_user_trace_setup {
+       __u32 buf_size;
+       __u32 buf_nr;
+};
+
+#define __KVM_DEPRECATED_MAIN_W_0x06 \
+       _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
+#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
+#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
+
+#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
+
+struct kvm_breakpoint {
+       __u32 enabled;
+       __u32 padding;
+       __u64 address;
+};
+
+struct kvm_debug_guest {
+       __u32 enabled;
+       __u32 pad;
+       struct kvm_breakpoint breakpoints[4];
+       __u32 singlestep;
+};
+
+#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
+
+/* *** End of deprecated interfaces *** */
+
+
+/* for KVM_CREATE_MEMORY_REGION */
+struct kvm_memory_region {
+       __u32 slot;
+       __u32 flags;
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+};
+
+/* for KVM_SET_USER_MEMORY_REGION */
+struct kvm_userspace_memory_region {
+       __u32 slot;
+       __u32 flags;
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+       __u64 userspace_addr; /* start of the userspace allocated memory */
+};
+
+/*
+ * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace,
+ * other bits are reserved for kvm internal use which are defined in
+ * include/linux/kvm_host.h.
+ */
+#define KVM_MEM_LOG_DIRTY_PAGES        (1UL << 0)
+#define KVM_MEM_READONLY       (1UL << 1)
+
+/* for KVM_IRQ_LINE */
+struct kvm_irq_level {
+       /*
+        * ACPI gsi notion of irq.
+        * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
+        * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
+        * For ARM: See Documentation/virtual/kvm/api.txt
+        */
+       union {
+               __u32 irq;
+               __s32 status;
+       };
+       __u32 level;
+};
+
+
+struct kvm_irqchip {
+       __u32 chip_id;
+       __u32 pad;
+        union {
+               char dummy[512];  /* reserving space */
+#ifdef __KVM_HAVE_PIT
+               struct kvm_pic_state pic;
+#endif
+#ifdef __KVM_HAVE_IOAPIC
+               struct kvm_ioapic_state ioapic;
+#endif
+       } chip;
+};
+
+/* for KVM_CREATE_PIT2 */
+struct kvm_pit_config {
+       __u32 flags;
+       __u32 pad[15];
+};
+
+#define KVM_PIT_SPEAKER_DUMMY     1
+
+struct kvm_s390_skeys {
+       __u64 start_gfn;
+       __u64 count;
+       __u64 skeydata_addr;
+       __u32 flags;
+       __u32 reserved[9];
+};
+#define KVM_S390_GET_SKEYS_NONE   1
+#define KVM_S390_SKEYS_MAX        1048576
+
+#define KVM_EXIT_UNKNOWN          0
+#define KVM_EXIT_EXCEPTION        1
+#define KVM_EXIT_IO               2
+#define KVM_EXIT_HYPERCALL        3
+#define KVM_EXIT_DEBUG            4
+#define KVM_EXIT_HLT              5
+#define KVM_EXIT_MMIO             6
+#define KVM_EXIT_IRQ_WINDOW_OPEN  7
+#define KVM_EXIT_SHUTDOWN         8
+#define KVM_EXIT_FAIL_ENTRY       9
+#define KVM_EXIT_INTR             10
+#define KVM_EXIT_SET_TPR          11
+#define KVM_EXIT_TPR_ACCESS       12
+#define KVM_EXIT_S390_SIEIC       13
+#define KVM_EXIT_S390_RESET       14
+#define KVM_EXIT_DCR              15 /* deprecated */
+#define KVM_EXIT_NMI              16
+#define KVM_EXIT_INTERNAL_ERROR   17
+#define KVM_EXIT_OSI              18
+#define KVM_EXIT_PAPR_HCALL      19
+#define KVM_EXIT_S390_UCONTROL   20
+#define KVM_EXIT_WATCHDOG         21
+#define KVM_EXIT_S390_TSCH        22
+#define KVM_EXIT_EPR              23
+#define KVM_EXIT_SYSTEM_EVENT     24
+#define KVM_EXIT_S390_STSI        25
+#define KVM_EXIT_IOAPIC_EOI       26
+
+/* For KVM_EXIT_INTERNAL_ERROR */
+/* Emulate instruction failed. */
+#define KVM_INTERNAL_ERROR_EMULATION   1
+/* Encounter unexpected simultaneous exceptions. */
+#define KVM_INTERNAL_ERROR_SIMUL_EX    2
+/* Encounter unexpected vm-exit due to delivery event. */
+#define KVM_INTERNAL_ERROR_DELIVERY_EV 3
+
+/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
+struct kvm_run {
+       /* in */
+       __u8 request_interrupt_window;
+       __u8 padding1[7];
+
+       /* out */
+       __u32 exit_reason;
+       __u8 ready_for_interrupt_injection;
+       __u8 if_flag;
+       __u16 flags;
+
+       /* in (pre_kvm_run), out (post_kvm_run) */
+       __u64 cr8;
+       __u64 apic_base;
+
+#ifdef __KVM_S390
+       /* the processor status word for s390 */
+       __u64 psw_mask; /* psw upper half */
+       __u64 psw_addr; /* psw lower half */
+#endif
+       union {
+               /* KVM_EXIT_UNKNOWN */
+               struct {
+                       __u64 hardware_exit_reason;
+               } hw;
+               /* KVM_EXIT_FAIL_ENTRY */
+               struct {
+                       __u64 hardware_entry_failure_reason;
+               } fail_entry;
+               /* KVM_EXIT_EXCEPTION */
+               struct {
+                       __u32 exception;
+                       __u32 error_code;
+               } ex;
+               /* KVM_EXIT_IO */
+               struct {
+#define KVM_EXIT_IO_IN  0
+#define KVM_EXIT_IO_OUT 1
+                       __u8 direction;
+                       __u8 size; /* bytes */
+                       __u16 port;
+                       __u32 count;
+                       __u64 data_offset; /* relative to kvm_run start */
+               } io;
+               /* KVM_EXIT_DEBUG */
+               struct {
+                       struct kvm_debug_exit_arch arch;
+               } debug;
+               /* KVM_EXIT_MMIO */
+               struct {
+                       __u64 phys_addr;
+                       __u8  data[8];
+                       __u32 len;
+                       __u8  is_write;
+               } mmio;
+               /* KVM_EXIT_HYPERCALL */
+               struct {
+                       __u64 nr;
+                       __u64 args[6];
+                       __u64 ret;
+                       __u32 longmode;
+                       __u32 pad;
+               } hypercall;
+               /* KVM_EXIT_TPR_ACCESS */
+               struct {
+                       __u64 rip;
+                       __u32 is_write;
+                       __u32 pad;
+               } tpr_access;
+               /* KVM_EXIT_S390_SIEIC */
+               struct {
+                       __u8 icptcode;
+                       __u16 ipa;
+                       __u32 ipb;
+               } s390_sieic;
+               /* KVM_EXIT_S390_RESET */
+#define KVM_S390_RESET_POR       1
+#define KVM_S390_RESET_CLEAR     2
+#define KVM_S390_RESET_SUBSYSTEM 4
+#define KVM_S390_RESET_CPU_INIT  8
+#define KVM_S390_RESET_IPL       16
+               __u64 s390_reset_flags;
+               /* KVM_EXIT_S390_UCONTROL */
+               struct {
+                       __u64 trans_exc_code;
+                       __u32 pgm_code;
+               } s390_ucontrol;
+               /* KVM_EXIT_DCR (deprecated) */
+               struct {
+                       __u32 dcrn;
+                       __u32 data;
+                       __u8  is_write;
+               } dcr;
+               /* KVM_EXIT_INTERNAL_ERROR */
+               struct {
+                       __u32 suberror;
+                       /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
+                       __u32 ndata;
+                       __u64 data[16];
+               } internal;
+               /* KVM_EXIT_OSI */
+               struct {
+                       __u64 gprs[32];
+               } osi;
+               /* KVM_EXIT_PAPR_HCALL */
+               struct {
+                       __u64 nr;
+                       __u64 ret;
+                       __u64 args[9];
+               } papr_hcall;
+               /* KVM_EXIT_S390_TSCH */
+               struct {
+                       __u16 subchannel_id;
+                       __u16 subchannel_nr;
+                       __u32 io_int_parm;
+                       __u32 io_int_word;
+                       __u32 ipb;
+                       __u8 dequeued;
+               } s390_tsch;
+               /* KVM_EXIT_EPR */
+               struct {
+                       __u32 epr;
+               } epr;
+               /* KVM_EXIT_SYSTEM_EVENT */
+               struct {
+#define KVM_SYSTEM_EVENT_SHUTDOWN       1
+#define KVM_SYSTEM_EVENT_RESET          2
+#define KVM_SYSTEM_EVENT_CRASH          3
+                       __u32 type;
+                       __u64 flags;
+               } system_event;
+               /* KVM_EXIT_S390_STSI */
+               struct {
+                       __u64 addr;
+                       __u8 ar;
+                       __u8 reserved;
+                       __u8 fc;
+                       __u8 sel1;
+                       __u16 sel2;
+               } s390_stsi;
+               /* KVM_EXIT_IOAPIC_EOI */
+               struct {
+                       __u8 vector;
+               } eoi;
+               /* Fix the size of the union. */
+               char padding[256];
+       };
+
+       /*
+        * shared registers between kvm and userspace.
+        * kvm_valid_regs specifies the register classes set by the host
+        * kvm_dirty_regs specified the register classes dirtied by userspace
+        * struct kvm_sync_regs is architecture specific, as well as the
+        * bits for kvm_valid_regs and kvm_dirty_regs
+        */
+       __u64 kvm_valid_regs;
+       __u64 kvm_dirty_regs;
+       union {
+               struct kvm_sync_regs regs;
+               char padding[2048];
+       } s;
+};
+
+/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
+
+struct kvm_coalesced_mmio_zone {
+       __u64 addr;
+       __u32 size;
+       __u32 pad;
+};
+
+struct kvm_coalesced_mmio {
+       __u64 phys_addr;
+       __u32 len;
+       __u32 pad;
+       __u8  data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+       __u32 first, last;
+       struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+#define KVM_COALESCED_MMIO_MAX \
+       ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
+        sizeof(struct kvm_coalesced_mmio))
+
+/* for KVM_TRANSLATE */
+struct kvm_translation {
+       /* in */
+       __u64 linear_address;
+
+       /* out */
+       __u64 physical_address;
+       __u8  valid;
+       __u8  writeable;
+       __u8  usermode;
+       __u8  pad[5];
+};
+
+/* for KVM_S390_MEM_OP */
+struct kvm_s390_mem_op {
+       /* in */
+       __u64 gaddr;            /* the guest address */
+       __u64 flags;            /* flags */
+       __u32 size;             /* amount of bytes */
+       __u32 op;               /* type of operation */
+       __u64 buf;              /* buffer in userspace */
+       __u8 ar;                /* the access register number */
+       __u8 reserved[31];      /* should be set to 0 */
+};
+/* types for kvm_s390_mem_op->op */
+#define KVM_S390_MEMOP_LOGICAL_READ    0
+#define KVM_S390_MEMOP_LOGICAL_WRITE   1
+/* flags for kvm_s390_mem_op->flags */
+#define KVM_S390_MEMOP_F_CHECK_ONLY            (1ULL << 0)
+#define KVM_S390_MEMOP_F_INJECT_EXCEPTION      (1ULL << 1)
+
+/* for KVM_INTERRUPT */
+struct kvm_interrupt {
+       /* in */
+       __u32 irq;
+};
+
+/* for KVM_GET_DIRTY_LOG */
+struct kvm_dirty_log {
+       __u32 slot;
+       __u32 padding1;
+       union {
+               void *dirty_bitmap; /* one bit per page */
+               __u64 padding2;
+       };
+};
+
+/* for KVM_SET_SIGNAL_MASK */
+struct kvm_signal_mask {
+       __u32 len;
+       __u8  sigset[0];
+};
+
+/* for KVM_TPR_ACCESS_REPORTING */
+struct kvm_tpr_access_ctl {
+       __u32 enabled;
+       __u32 flags;
+       __u32 reserved[8];
+};
+
+/* for KVM_SET_VAPIC_ADDR */
+struct kvm_vapic_addr {
+       __u64 vapic_addr;
+};
+
+/* for KVM_SET_MP_STATE */
+
+/* not all states are valid on all architectures */
+#define KVM_MP_STATE_RUNNABLE          0
+#define KVM_MP_STATE_UNINITIALIZED     1
+#define KVM_MP_STATE_INIT_RECEIVED     2
+#define KVM_MP_STATE_HALTED            3
+#define KVM_MP_STATE_SIPI_RECEIVED     4
+#define KVM_MP_STATE_STOPPED           5
+#define KVM_MP_STATE_CHECK_STOP        6
+#define KVM_MP_STATE_OPERATING         7
+#define KVM_MP_STATE_LOAD              8
+
+struct kvm_mp_state {
+       __u32 mp_state;
+};
+
+struct kvm_s390_psw {
+       __u64 mask;
+       __u64 addr;
+};
+
+/* valid values for type in kvm_s390_interrupt */
+#define KVM_S390_SIGP_STOP             0xfffe0000u
+#define KVM_S390_PROGRAM_INT           0xfffe0001u
+#define KVM_S390_SIGP_SET_PREFIX       0xfffe0002u
+#define KVM_S390_RESTART               0xfffe0003u
+#define KVM_S390_INT_PFAULT_INIT       0xfffe0004u
+#define KVM_S390_INT_PFAULT_DONE       0xfffe0005u
+#define KVM_S390_MCHK                  0xfffe1000u
+#define KVM_S390_INT_CLOCK_COMP                0xffff1004u
+#define KVM_S390_INT_CPU_TIMER         0xffff1005u
+#define KVM_S390_INT_VIRTIO            0xffff2603u
+#define KVM_S390_INT_SERVICE           0xffff2401u
+#define KVM_S390_INT_EMERGENCY         0xffff1201u
+#define KVM_S390_INT_EXTERNAL_CALL     0xffff1202u
+/* Anything below 0xfffe0000u is taken by INT_IO */
+#define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
+       (((schid)) |                           \
+        ((ssid) << 16) |                      \
+        ((cssid) << 18) |                     \
+        ((ai) << 26))
+#define KVM_S390_INT_IO_MIN            0x00000000u
+#define KVM_S390_INT_IO_MAX            0xfffdffffu
+#define KVM_S390_INT_IO_AI_MASK                0x04000000u
+
+
+struct kvm_s390_interrupt {
+       __u32 type;
+       __u32 parm;
+       __u64 parm64;
+};
+
+struct kvm_s390_io_info {
+       __u16 subchannel_id;
+       __u16 subchannel_nr;
+       __u32 io_int_parm;
+       __u32 io_int_word;
+};
+
+struct kvm_s390_ext_info {
+       __u32 ext_params;
+       __u32 pad;
+       __u64 ext_params2;
+};
+
+struct kvm_s390_pgm_info {
+       __u64 trans_exc_code;
+       __u64 mon_code;
+       __u64 per_address;
+       __u32 data_exc_code;
+       __u16 code;
+       __u16 mon_class_nr;
+       __u8 per_code;
+       __u8 per_atmid;
+       __u8 exc_access_id;
+       __u8 per_access_id;
+       __u8 op_access_id;
+       __u8 pad[3];
+};
+
+struct kvm_s390_prefix_info {
+       __u32 address;
+};
+
+struct kvm_s390_extcall_info {
+       __u16 code;
+};
+
+struct kvm_s390_emerg_info {
+       __u16 code;
+};
+
+#define KVM_S390_STOP_FLAG_STORE_STATUS        0x01
+struct kvm_s390_stop_info {
+       __u32 flags;
+};
+
+struct kvm_s390_mchk_info {
+       __u64 cr14;
+       __u64 mcic;
+       __u64 failing_storage_address;
+       __u32 ext_damage_code;
+       __u32 pad;
+       __u8 fixed_logout[16];
+};
+
+struct kvm_s390_irq {
+       __u64 type;
+       union {
+               struct kvm_s390_io_info io;
+               struct kvm_s390_ext_info ext;
+               struct kvm_s390_pgm_info pgm;
+               struct kvm_s390_emerg_info emerg;
+               struct kvm_s390_extcall_info extcall;
+               struct kvm_s390_prefix_info prefix;
+               struct kvm_s390_stop_info stop;
+               struct kvm_s390_mchk_info mchk;
+               char reserved[64];
+       } u;
+};
+
+struct kvm_s390_irq_state {
+       __u64 buf;
+       __u32 flags;
+       __u32 len;
+       __u32 reserved[4];
+};
+
+/* for KVM_SET_GUEST_DEBUG */
+
+#define KVM_GUESTDBG_ENABLE            0x00000001
+#define KVM_GUESTDBG_SINGLESTEP                0x00000002
+
+struct kvm_guest_debug {
+       __u32 control;
+       __u32 pad;
+       struct kvm_guest_debug_arch arch;
+};
+
+enum {
+       kvm_ioeventfd_flag_nr_datamatch,
+       kvm_ioeventfd_flag_nr_pio,
+       kvm_ioeventfd_flag_nr_deassign,
+       kvm_ioeventfd_flag_nr_virtio_ccw_notify,
+       kvm_ioeventfd_flag_nr_fast_mmio,
+       kvm_ioeventfd_flag_nr_max,
+};
+
+#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
+#define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
+#define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
+#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
+       (1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
+
+#define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
+
+struct kvm_ioeventfd {
+       __u64 datamatch;
+       __u64 addr;        /* legal pio/mmio address */
+       __u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
+       __s32 fd;
+       __u32 flags;
+       __u8  pad[36];
+};
+
+/* for KVM_ENABLE_CAP */
+struct kvm_enable_cap {
+       /* in */
+       __u32 cap;
+       __u32 flags;
+       __u64 args[4];
+       __u8  pad[64];
+};
+
+/* for KVM_PPC_GET_PVINFO */
+struct kvm_ppc_pvinfo {
+       /* out */
+       __u32 flags;
+       __u32 hcall[4];
+       __u8  pad[108];
+};
+
+/* for KVM_PPC_GET_SMMU_INFO */
+#define KVM_PPC_PAGE_SIZES_MAX_SZ      8
+
+struct kvm_ppc_one_page_size {
+       __u32 page_shift;       /* Page shift (or 0) */
+       __u32 pte_enc;          /* Encoding in the HPTE (>>12) */
+};
+
+struct kvm_ppc_one_seg_page_size {
+       __u32 page_shift;       /* Base page shift of segment (or 0) */
+       __u32 slb_enc;          /* SLB encoding for BookS */
+       struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
+};
+
+#define KVM_PPC_PAGE_SIZES_REAL                0x00000001
+#define KVM_PPC_1T_SEGMENTS            0x00000002
+
+struct kvm_ppc_smmu_info {
+       __u64 flags;
+       __u32 slb_size;
+       __u32 pad;
+       struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
+};
+
+#define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)
+
+#define KVMIO 0xAE
+
+/* machine type bits, to be used as argument to KVM_CREATE_VM */
+#define KVM_VM_S390_UCONTROL   1
+
+/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
+#define KVM_VM_PPC_HV 1
+#define KVM_VM_PPC_PR 2
+
+#define KVM_S390_SIE_PAGE_OFFSET 1
+
+/*
+ * ioctls for /dev/kvm fds:
+ */
+#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
+#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
+#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
+
+#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
+/*
+ * Check if a kvm extension is available.  Argument is extension number,
+ * return is 1 (yes) or 0 (no, sorry).
+ */
+#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
+/*
+ * Get size for mmap(vcpu_fd)
+ */
+#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
+#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
+#define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
+#define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
+#define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
+#define KVM_GET_EMULATED_CPUID   _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
+
+/*
+ * Extension capability list.
+ */
+#define KVM_CAP_IRQCHIP          0
+#define KVM_CAP_HLT      1
+#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
+#define KVM_CAP_USER_MEMORY 3
+#define KVM_CAP_SET_TSS_ADDR 4
+#define KVM_CAP_VAPIC 6
+#define KVM_CAP_EXT_CPUID 7
+#define KVM_CAP_CLOCKSOURCE 8
+#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
+#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
+#define KVM_CAP_PIT 11
+#define KVM_CAP_NOP_IO_DELAY 12
+#define KVM_CAP_PV_MMU 13
+#define KVM_CAP_MP_STATE 14
+#define KVM_CAP_COALESCED_MMIO 15
+#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
+#define KVM_CAP_IOMMU 18
+/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
+#define KVM_CAP_USER_NMI 22
+#ifdef __KVM_HAVE_GUEST_DEBUG
+#define KVM_CAP_SET_GUEST_DEBUG 23
+#endif
+#ifdef __KVM_HAVE_PIT
+#define KVM_CAP_REINJECT_CONTROL 24
+#endif
+#define KVM_CAP_IRQ_ROUTING 25
+#define KVM_CAP_IRQ_INJECT_STATUS 26
+#define KVM_CAP_ASSIGN_DEV_IRQ 29
+/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
+#ifdef __KVM_HAVE_MCE
+#define KVM_CAP_MCE 31
+#endif
+#define KVM_CAP_IRQFD 32
+#ifdef __KVM_HAVE_PIT
+#define KVM_CAP_PIT2 33
+#endif
+#define KVM_CAP_SET_BOOT_CPU_ID 34
+#ifdef __KVM_HAVE_PIT_STATE2
+#define KVM_CAP_PIT_STATE2 35
+#endif
+#define KVM_CAP_IOEVENTFD 36
+#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
+#ifdef __KVM_HAVE_XEN_HVM
+#define KVM_CAP_XEN_HVM 38
+#endif
+#define KVM_CAP_ADJUST_CLOCK 39
+#define KVM_CAP_INTERNAL_ERROR_DATA 40
+#ifdef __KVM_HAVE_VCPU_EVENTS
+#define KVM_CAP_VCPU_EVENTS 41
+#endif
+#define KVM_CAP_S390_PSW 42
+#define KVM_CAP_PPC_SEGSTATE 43
+#define KVM_CAP_HYPERV 44
+#define KVM_CAP_HYPERV_VAPIC 45
+#define KVM_CAP_HYPERV_SPIN 46
+#define KVM_CAP_PCI_SEGMENT 47
+#define KVM_CAP_PPC_PAIRED_SINGLES 48
+#define KVM_CAP_INTR_SHADOW 49
+#ifdef __KVM_HAVE_DEBUGREGS
+#define KVM_CAP_DEBUGREGS 50
+#endif
+#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
+#define KVM_CAP_PPC_OSI 52
+#define KVM_CAP_PPC_UNSET_IRQ 53
+#define KVM_CAP_ENABLE_CAP 54
+#ifdef __KVM_HAVE_XSAVE
+#define KVM_CAP_XSAVE 55
+#endif
+#ifdef __KVM_HAVE_XCRS
+#define KVM_CAP_XCRS 56
+#endif
+#define KVM_CAP_PPC_GET_PVINFO 57
+#define KVM_CAP_PPC_IRQ_LEVEL 58
+#define KVM_CAP_ASYNC_PF 59
+#define KVM_CAP_TSC_CONTROL 60
+#define KVM_CAP_GET_TSC_KHZ 61
+#define KVM_CAP_PPC_BOOKE_SREGS 62
+#define KVM_CAP_SPAPR_TCE 63
+#define KVM_CAP_PPC_SMT 64
+#define KVM_CAP_PPC_RMA        65
+#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
+#define KVM_CAP_PPC_HIOR 67
+#define KVM_CAP_PPC_PAPR 68
+#define KVM_CAP_SW_TLB 69
+#define KVM_CAP_ONE_REG 70
+#define KVM_CAP_S390_GMAP 71
+#define KVM_CAP_TSC_DEADLINE_TIMER 72
+#define KVM_CAP_S390_UCONTROL 73
+#define KVM_CAP_SYNC_REGS 74
+#define KVM_CAP_PCI_2_3 75
+#define KVM_CAP_KVMCLOCK_CTRL 76
+#define KVM_CAP_SIGNAL_MSI 77
+#define KVM_CAP_PPC_GET_SMMU_INFO 78
+#define KVM_CAP_S390_COW 79
+#define KVM_CAP_PPC_ALLOC_HTAB 80
+#define KVM_CAP_READONLY_MEM 81
+#define KVM_CAP_IRQFD_RESAMPLE 82
+#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
+#define KVM_CAP_PPC_HTAB_FD 84
+#define KVM_CAP_S390_CSS_SUPPORT 85
+#define KVM_CAP_PPC_EPR 86
+#define KVM_CAP_ARM_PSCI 87
+#define KVM_CAP_ARM_SET_DEVICE_ADDR 88
+#define KVM_CAP_DEVICE_CTRL 89
+#define KVM_CAP_IRQ_MPIC 90
+#define KVM_CAP_PPC_RTAS 91
+#define KVM_CAP_IRQ_XICS 92
+#define KVM_CAP_ARM_EL1_32BIT 93
+#define KVM_CAP_SPAPR_MULTITCE 94
+#define KVM_CAP_EXT_EMUL_CPUID 95
+#define KVM_CAP_HYPERV_TIME 96
+#define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
+#define KVM_CAP_ENABLE_CAP_VM 98
+#define KVM_CAP_S390_IRQCHIP 99
+#define KVM_CAP_IOEVENTFD_NO_LENGTH 100
+#define KVM_CAP_VM_ATTRIBUTES 101
+#define KVM_CAP_ARM_PSCI_0_2 102
+#define KVM_CAP_PPC_FIXUP_HCALL 103
+#define KVM_CAP_PPC_ENABLE_HCALL 104
+#define KVM_CAP_CHECK_EXTENSION_VM 105
+#define KVM_CAP_S390_USER_SIGP 106
+#define KVM_CAP_S390_VECTOR_REGISTERS 107
+#define KVM_CAP_S390_MEM_OP 108
+#define KVM_CAP_S390_USER_STSI 109
+#define KVM_CAP_S390_SKEYS 110
+#define KVM_CAP_MIPS_FPU 111
+#define KVM_CAP_MIPS_MSA 112
+#define KVM_CAP_S390_INJECT_IRQ 113
+#define KVM_CAP_S390_IRQ_STATE 114
+#define KVM_CAP_PPC_HWRNG 115
+#define KVM_CAP_DISABLE_QUIRKS 116
+#define KVM_CAP_X86_SMM 117
+#define KVM_CAP_MULTI_ADDRESS_SPACE 118
+#define KVM_CAP_GUEST_DEBUG_HW_BPS 119
+#define KVM_CAP_GUEST_DEBUG_HW_WPS 120
+#define KVM_CAP_SPLIT_IRQCHIP 121
+#define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
+
+#ifdef KVM_CAP_IRQ_ROUTING
+
+struct kvm_irq_routing_irqchip {
+       __u32 irqchip;
+       __u32 pin;
+};
+
+struct kvm_irq_routing_msi {
+       __u32 address_lo;
+       __u32 address_hi;
+       __u32 data;
+       __u32 pad;
+};
+
+struct kvm_irq_routing_s390_adapter {
+       __u64 ind_addr;
+       __u64 summary_addr;
+       __u64 ind_offset;
+       __u32 summary_offset;
+       __u32 adapter_id;
+};
+
+/* gsi routing entry types */
+#define KVM_IRQ_ROUTING_IRQCHIP 1
+#define KVM_IRQ_ROUTING_MSI 2
+#define KVM_IRQ_ROUTING_S390_ADAPTER 3
+
+struct kvm_irq_routing_entry {
+       __u32 gsi;
+       __u32 type;
+       __u32 flags;
+       __u32 pad;
+       union {
+               struct kvm_irq_routing_irqchip irqchip;
+               struct kvm_irq_routing_msi msi;
+               struct kvm_irq_routing_s390_adapter adapter;
+               __u32 pad[8];
+       } u;
+};
+
+struct kvm_irq_routing {
+       __u32 nr;
+       __u32 flags;
+       struct kvm_irq_routing_entry entries[0];
+};
+
+#endif
+
+#ifdef KVM_CAP_MCE
+/* x86 MCE */
+struct kvm_x86_mce {
+       __u64 status;
+       __u64 addr;
+       __u64 misc;
+       __u64 mcg_status;
+       __u8 bank;
+       __u8 pad1[7];
+       __u64 pad2[3];
+};
+#endif
+
+#ifdef KVM_CAP_XEN_HVM
+struct kvm_xen_hvm_config {
+       __u32 flags;
+       __u32 msr;
+       __u64 blob_addr_32;
+       __u64 blob_addr_64;
+       __u8 blob_size_32;
+       __u8 blob_size_64;
+       __u8 pad2[30];
+};
+#endif
+
+#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
+/*
+ * Available with KVM_CAP_IRQFD_RESAMPLE
+ *
+ * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
+ * the irqfd to operate in resampling mode for level triggered interrupt
+ * emulation.  See Documentation/virtual/kvm/api.txt.
+ */
+#define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
+
+struct kvm_irqfd {
+       __u32 fd;
+       __u32 gsi;
+       __u32 flags;
+       __u32 resamplefd;
+       __u8  pad[16];
+};
+
+struct kvm_clock_data {
+       __u64 clock;
+       __u32 flags;
+       __u32 pad[9];
+};
+
+#define KVM_MMU_FSL_BOOKE_NOHV         0
+#define KVM_MMU_FSL_BOOKE_HV           1
+
+struct kvm_config_tlb {
+       __u64 params;
+       __u64 array;
+       __u32 mmu_type;
+       __u32 array_len;
+};
+
+struct kvm_dirty_tlb {
+       __u64 bitmap;
+       __u32 num_dirty;
+};
+
+/* Available with KVM_CAP_ONE_REG */
+
+#define KVM_REG_ARCH_MASK      0xff00000000000000ULL
+#define KVM_REG_GENERIC                0x0000000000000000ULL
+
+/*
+ * Architecture specific registers are to be defined in arch headers and
+ * ORed with the arch identifier.
+ */
+#define KVM_REG_PPC            0x1000000000000000ULL
+#define KVM_REG_X86            0x2000000000000000ULL
+#define KVM_REG_IA64           0x3000000000000000ULL
+#define KVM_REG_ARM            0x4000000000000000ULL
+#define KVM_REG_S390           0x5000000000000000ULL
+#define KVM_REG_ARM64          0x6000000000000000ULL
+#define KVM_REG_MIPS           0x7000000000000000ULL
+
+#define KVM_REG_SIZE_SHIFT     52
+#define KVM_REG_SIZE_MASK      0x00f0000000000000ULL
+#define KVM_REG_SIZE_U8                0x0000000000000000ULL
+#define KVM_REG_SIZE_U16       0x0010000000000000ULL
+#define KVM_REG_SIZE_U32       0x0020000000000000ULL
+#define KVM_REG_SIZE_U64       0x0030000000000000ULL
+#define KVM_REG_SIZE_U128      0x0040000000000000ULL
+#define KVM_REG_SIZE_U256      0x0050000000000000ULL
+#define KVM_REG_SIZE_U512      0x0060000000000000ULL
+#define KVM_REG_SIZE_U1024     0x0070000000000000ULL
+
+struct kvm_reg_list {
+       __u64 n; /* number of regs */
+       __u64 reg[0];
+};
+
+struct kvm_one_reg {
+       __u64 id;
+       __u64 addr;
+};
+
+struct kvm_msi {
+       __u32 address_lo;
+       __u32 address_hi;
+       __u32 data;
+       __u32 flags;
+       __u8  pad[16];
+};
+
+struct kvm_arm_device_addr {
+       __u64 id;
+       __u64 addr;
+};
+
+/*
+ * Device control API, available with KVM_CAP_DEVICE_CTRL
+ */
+#define KVM_CREATE_DEVICE_TEST         1
+
+struct kvm_create_device {
+       __u32   type;   /* in: KVM_DEV_TYPE_xxx */
+       __u32   fd;     /* out: device handle */
+       __u32   flags;  /* in: KVM_CREATE_DEVICE_xxx */
+};
+
+struct kvm_device_attr {
+       __u32   flags;          /* no flags currently defined */
+       __u32   group;          /* device-defined */
+       __u64   attr;           /* group-defined */
+       __u64   addr;           /* userspace address of attr data */
+};
+
+#define  KVM_DEV_VFIO_GROUP                    1
+#define   KVM_DEV_VFIO_GROUP_ADD                       1
+#define   KVM_DEV_VFIO_GROUP_DEL                       2
+
+enum kvm_device_type {
+       KVM_DEV_TYPE_FSL_MPIC_20        = 1,
+#define KVM_DEV_TYPE_FSL_MPIC_20       KVM_DEV_TYPE_FSL_MPIC_20
+       KVM_DEV_TYPE_FSL_MPIC_42,
+#define KVM_DEV_TYPE_FSL_MPIC_42       KVM_DEV_TYPE_FSL_MPIC_42
+       KVM_DEV_TYPE_XICS,
+#define KVM_DEV_TYPE_XICS              KVM_DEV_TYPE_XICS
+       KVM_DEV_TYPE_VFIO,
+#define KVM_DEV_TYPE_VFIO              KVM_DEV_TYPE_VFIO
+       KVM_DEV_TYPE_ARM_VGIC_V2,
+#define KVM_DEV_TYPE_ARM_VGIC_V2       KVM_DEV_TYPE_ARM_VGIC_V2
+       KVM_DEV_TYPE_FLIC,
+#define KVM_DEV_TYPE_FLIC              KVM_DEV_TYPE_FLIC
+       KVM_DEV_TYPE_ARM_VGIC_V3,
+#define KVM_DEV_TYPE_ARM_VGIC_V3       KVM_DEV_TYPE_ARM_VGIC_V3
+       KVM_DEV_TYPE_MAX,
+};
+
+/*
+ * ioctls for VM fds
+ */
+#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
+/*
+ * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
+ * a vcpu fd.
+ */
+#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
+#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
+/* KVM_SET_MEMORY_ALIAS is obsolete: */
+#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
+#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
+#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
+#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
+                                       struct kvm_userspace_memory_region)
+#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
+#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
+
+/* enable ucontrol for s390 */
+struct kvm_s390_ucas_mapping {
+       __u64 user_addr;
+       __u64 vcpu_addr;
+       __u64 length;
+};
+#define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
+#define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
+#define KVM_S390_VCPU_FAULT     _IOW(KVMIO, 0x52, unsigned long)
+
+/* Device model IOC */
+#define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
+#define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
+#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
+#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
+#define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
+#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
+#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
+#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
+#define KVM_REGISTER_COALESCED_MMIO \
+                       _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
+#define KVM_UNREGISTER_COALESCED_MMIO \
+                       _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
+#define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
+                                      struct kvm_assigned_pci_dev)
+#define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
+/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
+#define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
+#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
+#define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
+#define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
+                                      struct kvm_assigned_pci_dev)
+#define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
+                                      struct kvm_assigned_msix_nr)
+#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
+                                      struct kvm_assigned_msix_entry)
+#define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
+#define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
+#define KVM_CREATE_PIT2                  _IOW(KVMIO,  0x77, struct kvm_pit_config)
+#define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
+#define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
+#define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
+#define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
+#define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
+/* Available with KVM_CAP_PIT_STATE2 */
+#define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
+#define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
+/* Available with KVM_CAP_PPC_GET_PVINFO */
+#define KVM_PPC_GET_PVINFO       _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
+/* Available with KVM_CAP_TSC_CONTROL */
+#define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
+#define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
+/* Available with KVM_CAP_PCI_2_3 */
+#define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
+                                      struct kvm_assigned_pci_dev)
+/* Available with KVM_CAP_SIGNAL_MSI */
+#define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
+/* Available with KVM_CAP_PPC_GET_SMMU_INFO */
+#define KVM_PPC_GET_SMMU_INFO    _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
+/* Available with KVM_CAP_PPC_ALLOC_HTAB */
+#define KVM_PPC_ALLOCATE_HTAB    _IOWR(KVMIO, 0xa7, __u32)
+#define KVM_CREATE_SPAPR_TCE     _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
+/* Available with KVM_CAP_RMA */
+#define KVM_ALLOCATE_RMA         _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
+/* Available with KVM_CAP_PPC_HTAB_FD */
+#define KVM_PPC_GET_HTAB_FD      _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
+/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
+#define KVM_ARM_SET_DEVICE_ADDR          _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
+/* Available with KVM_CAP_PPC_RTAS */
+#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
+
+/* ioctl for vm fd */
+#define KVM_CREATE_DEVICE        _IOWR(KVMIO,  0xe0, struct kvm_create_device)
+
+/* ioctls for fds returned by KVM_CREATE_DEVICE */
+#define KVM_SET_DEVICE_ATTR      _IOW(KVMIO,  0xe1, struct kvm_device_attr)
+#define KVM_GET_DEVICE_ATTR      _IOW(KVMIO,  0xe2, struct kvm_device_attr)
+#define KVM_HAS_DEVICE_ATTR      _IOW(KVMIO,  0xe3, struct kvm_device_attr)
+
+/*
+ * ioctls for vcpu fds
+ */
+#define KVM_RUN                   _IO(KVMIO,   0x80)
+#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
+#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
+#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
+#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
+#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
+#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
+/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
+#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
+#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
+#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
+#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
+#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
+#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
+#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
+#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
+#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
+#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
+#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
+/* Available with KVM_CAP_VAPIC */
+#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
+/* Available with KVM_CAP_VAPIC */
+#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
+/* valid for virtual machine (for floating interrupt)_and_ vcpu */
+#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
+/* store status for s390 */
+#define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
+#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
+#define KVM_S390_STORE_STATUS    _IOW(KVMIO,  0x95, unsigned long)
+/* initial ipl psw for s390 */
+#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
+/* initial reset for s390 */
+#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
+#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
+#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
+/* Available with KVM_CAP_USER_NMI */
+#define KVM_NMI                   _IO(KVMIO,   0x9a)
+/* Available with KVM_CAP_SET_GUEST_DEBUG */
+#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
+/* MCE for x86 */
+#define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
+#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
+#define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
+/* Available with KVM_CAP_VCPU_EVENTS */
+#define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
+#define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
+/* Available with KVM_CAP_DEBUGREGS */
+#define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
+#define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
+/*
+ * vcpu version available with KVM_ENABLE_CAP
+ * vm version available with KVM_CAP_ENABLE_CAP_VM
+ */
+#define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
+/* Available with KVM_CAP_XSAVE */
+#define KVM_GET_XSAVE            _IOR(KVMIO,  0xa4, struct kvm_xsave)
+#define KVM_SET_XSAVE            _IOW(KVMIO,  0xa5, struct kvm_xsave)
+/* Available with KVM_CAP_XCRS */
+#define KVM_GET_XCRS             _IOR(KVMIO,  0xa6, struct kvm_xcrs)
+#define KVM_SET_XCRS             _IOW(KVMIO,  0xa7, struct kvm_xcrs)
+/* Available with KVM_CAP_SW_TLB */
+#define KVM_DIRTY_TLB            _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
+/* Available with KVM_CAP_ONE_REG */
+#define KVM_GET_ONE_REG                  _IOW(KVMIO,  0xab, struct kvm_one_reg)
+#define KVM_SET_ONE_REG                  _IOW(KVMIO,  0xac, struct kvm_one_reg)
+/* VM is being stopped by host */
+#define KVM_KVMCLOCK_CTRL        _IO(KVMIO,   0xad)
+#define KVM_ARM_VCPU_INIT        _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
+#define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
+#define KVM_GET_REG_LIST         _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
+/* Available with KVM_CAP_S390_MEM_OP */
+#define KVM_S390_MEM_OP                  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
+/* Available with KVM_CAP_S390_SKEYS */
+#define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
+#define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
+/* Available with KVM_CAP_S390_INJECT_IRQ */
+#define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
+/* Available with KVM_CAP_S390_IRQ_STATE */
+#define KVM_S390_SET_IRQ_STATE   _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
+#define KVM_S390_GET_IRQ_STATE   _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
+/* Available with KVM_CAP_X86_SMM */
+#define KVM_SMI                   _IO(KVMIO,   0xb7)
+
+#define KVM_DEV_ASSIGN_ENABLE_IOMMU    (1 << 0)
+#define KVM_DEV_ASSIGN_PCI_2_3         (1 << 1)
+#define KVM_DEV_ASSIGN_MASK_INTX       (1 << 2)
+
+struct kvm_assigned_pci_dev {
+       __u32 assigned_dev_id;
+       __u32 busnr;
+       __u32 devfn;
+       __u32 flags;
+       __u32 segnr;
+       union {
+               __u32 reserved[11];
+       };
+};
+
+#define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
+#define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
+#define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
+
+#define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
+#define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
+#define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
+
+#define KVM_DEV_IRQ_HOST_MASK   0x00ff
+#define KVM_DEV_IRQ_GUEST_MASK   0xff00
+
+struct kvm_assigned_irq {
+       __u32 assigned_dev_id;
+       __u32 host_irq; /* ignored (legacy field) */
+       __u32 guest_irq;
+       __u32 flags;
+       union {
+               __u32 reserved[12];
+       };
+};
+
+struct kvm_assigned_msix_nr {
+       __u32 assigned_dev_id;
+       __u16 entry_nr;
+       __u16 padding;
+};
+
+#define KVM_MAX_MSIX_PER_DEV           256
+struct kvm_assigned_msix_entry {
+       __u32 assigned_dev_id;
+       __u32 gsi;
+       __u16 entry; /* The index of entry in the MSI-X table */
+       __u16 padding[3];
+};
+
+#endif /* __LINUX_KVM_H */
diff --git a/lib/libdss-include/include/linux/l2tp.h b/lib/libdss-include/include/linux/l2tp.h
new file mode 100644 (file)
index 0000000..5b0e36d
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * L2TP-over-IP socket for L2TPv3.
+ *
+ * Author: James Chapman <jchapman@katalix.com>
+ */
+
+#ifndef _LINUX_L2TP_H_
+#define _LINUX_L2TP_H_
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <netinet/in.h>
+
+#define IPPROTO_L2TP           115
+
+/**
+ * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
+ * @l2tp_family:  address family number AF_L2TPIP.
+ * @l2tp_addr:    protocol specific address information
+ * @l2tp_conn_id: connection id of tunnel
+ */
+#define __SOCK_SIZE__  16              /* sizeof(struct sockaddr)      */
+struct sockaddr_l2tpip {
+       /* The first fields must match struct sockaddr_in */
+       __kernel_sa_family_t l2tp_family; /* AF_INET */
+       __be16          l2tp_unused;    /* INET port number (unused) */
+       struct in_addr  l2tp_addr;      /* Internet address */
+
+       __u32           l2tp_conn_id;   /* Connection ID of tunnel */
+
+       /* Pad to size of `struct sockaddr'. */
+       unsigned char   __pad[sizeof(struct sockaddr) -
+                             sizeof(__kernel_sa_family_t) -
+                             sizeof(__be16) - sizeof(struct in_addr) -
+                             sizeof(__u32)];
+};
+
+/**
+ * struct sockaddr_l2tpip6 - the sockaddr structure for L2TP-over-IPv6 sockets
+ * @l2tp_family:  address family number AF_L2TPIP.
+ * @l2tp_addr:    protocol specific address information
+ * @l2tp_conn_id: connection id of tunnel
+ */
+struct sockaddr_l2tpip6 {
+       /* The first fields must match struct sockaddr_in6 */
+       __kernel_sa_family_t l2tp_family; /* AF_INET6 */
+       __be16          l2tp_unused;    /* INET port number (unused) */
+       __be32          l2tp_flowinfo;  /* IPv6 flow information */
+       struct in6_addr l2tp_addr;      /* IPv6 address */
+       __u32           l2tp_scope_id;  /* scope id (new in RFC2553) */
+       __u32           l2tp_conn_id;   /* Connection ID of tunnel */
+};
+
+/*****************************************************************************
+ *  NETLINK_GENERIC netlink family.
+ *****************************************************************************/
+
+/*
+ * Commands.
+ * Valid TLVs of each command are:-
+ * TUNNEL_CREATE       - CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid
+ * TUNNEL_DELETE       - CONN_ID
+ * TUNNEL_MODIFY       - CONN_ID, udpcsum
+ * TUNNEL_GETSTATS     - CONN_ID, (stats)
+ * TUNNEL_GET          - CONN_ID, (...)
+ * SESSION_CREATE      - SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec
+ * SESSION_DELETE      - SESSION_ID
+ * SESSION_MODIFY      - SESSION_ID, data_seq
+ * SESSION_GET         - SESSION_ID, (...)
+ * SESSION_GETSTATS    - SESSION_ID, (stats)
+ *
+ */
+enum {
+       L2TP_CMD_NOOP,
+       L2TP_CMD_TUNNEL_CREATE,
+       L2TP_CMD_TUNNEL_DELETE,
+       L2TP_CMD_TUNNEL_MODIFY,
+       L2TP_CMD_TUNNEL_GET,
+       L2TP_CMD_SESSION_CREATE,
+       L2TP_CMD_SESSION_DELETE,
+       L2TP_CMD_SESSION_MODIFY,
+       L2TP_CMD_SESSION_GET,
+       __L2TP_CMD_MAX,
+};
+
+#define L2TP_CMD_MAX                   (__L2TP_CMD_MAX - 1)
+
+/*
+ * ATTR types defined for L2TP
+ */
+enum {
+       L2TP_ATTR_NONE,                 /* no data */
+       L2TP_ATTR_PW_TYPE,              /* u16, enum l2tp_pwtype */
+       L2TP_ATTR_ENCAP_TYPE,           /* u16, enum l2tp_encap_type */
+       L2TP_ATTR_OFFSET,               /* u16 */
+       L2TP_ATTR_DATA_SEQ,             /* u16 */
+       L2TP_ATTR_L2SPEC_TYPE,          /* u8, enum l2tp_l2spec_type */
+       L2TP_ATTR_L2SPEC_LEN,           /* u8, enum l2tp_l2spec_type */
+       L2TP_ATTR_PROTO_VERSION,        /* u8 */
+       L2TP_ATTR_IFNAME,               /* string */
+       L2TP_ATTR_CONN_ID,              /* u32 */
+       L2TP_ATTR_PEER_CONN_ID,         /* u32 */
+       L2TP_ATTR_SESSION_ID,           /* u32 */
+       L2TP_ATTR_PEER_SESSION_ID,      /* u32 */
+       L2TP_ATTR_UDP_CSUM,             /* u8 */
+       L2TP_ATTR_VLAN_ID,              /* u16 */
+       L2TP_ATTR_COOKIE,               /* 0, 4 or 8 bytes */
+       L2TP_ATTR_PEER_COOKIE,          /* 0, 4 or 8 bytes */
+       L2TP_ATTR_DEBUG,                /* u32 */
+       L2TP_ATTR_RECV_SEQ,             /* u8 */
+       L2TP_ATTR_SEND_SEQ,             /* u8 */
+       L2TP_ATTR_LNS_MODE,             /* u8 */
+       L2TP_ATTR_USING_IPSEC,          /* u8 */
+       L2TP_ATTR_RECV_TIMEOUT,         /* msec */
+       L2TP_ATTR_FD,                   /* int */
+       L2TP_ATTR_IP_SADDR,             /* u32 */
+       L2TP_ATTR_IP_DADDR,             /* u32 */
+       L2TP_ATTR_UDP_SPORT,            /* u16 */
+       L2TP_ATTR_UDP_DPORT,            /* u16 */
+       L2TP_ATTR_MTU,                  /* u16 */
+       L2TP_ATTR_MRU,                  /* u16 */
+       L2TP_ATTR_STATS,                /* nested */
+       L2TP_ATTR_IP6_SADDR,            /* struct in6_addr */
+       L2TP_ATTR_IP6_DADDR,            /* struct in6_addr */
+       L2TP_ATTR_UDP_ZERO_CSUM6_TX,    /* u8 */
+       L2TP_ATTR_UDP_ZERO_CSUM6_RX,    /* u8 */
+       __L2TP_ATTR_MAX,
+};
+
+#define L2TP_ATTR_MAX                  (__L2TP_ATTR_MAX - 1)
+
+/* Nested in L2TP_ATTR_STATS */
+enum {
+       L2TP_ATTR_STATS_NONE,           /* no data */
+       L2TP_ATTR_TX_PACKETS,           /* u64 */
+       L2TP_ATTR_TX_BYTES,             /* u64 */
+       L2TP_ATTR_TX_ERRORS,            /* u64 */
+       L2TP_ATTR_RX_PACKETS,           /* u64 */
+       L2TP_ATTR_RX_BYTES,             /* u64 */
+       L2TP_ATTR_RX_SEQ_DISCARDS,      /* u64 */
+       L2TP_ATTR_RX_OOS_PACKETS,       /* u64 */
+       L2TP_ATTR_RX_ERRORS,            /* u64 */
+       __L2TP_ATTR_STATS_MAX,
+};
+
+#define L2TP_ATTR_STATS_MAX            (__L2TP_ATTR_STATS_MAX - 1)
+
+enum l2tp_pwtype {
+       L2TP_PWTYPE_NONE = 0x0000,
+       L2TP_PWTYPE_ETH_VLAN = 0x0004,
+       L2TP_PWTYPE_ETH = 0x0005,
+       L2TP_PWTYPE_PPP = 0x0007,
+       L2TP_PWTYPE_PPP_AC = 0x0008,
+       L2TP_PWTYPE_IP = 0x000b,
+       __L2TP_PWTYPE_MAX
+};
+
+enum l2tp_l2spec_type {
+       L2TP_L2SPECTYPE_NONE,
+       L2TP_L2SPECTYPE_DEFAULT,
+};
+
+enum l2tp_encap_type {
+       L2TP_ENCAPTYPE_UDP,
+       L2TP_ENCAPTYPE_IP,
+};
+
+enum l2tp_seqmode {
+       L2TP_SEQ_NONE = 0,
+       L2TP_SEQ_IP = 1,
+       L2TP_SEQ_ALL = 2,
+};
+
+/*
+ * NETLINK_GENERIC related info
+ */
+#define L2TP_GENL_NAME         "l2tp"
+#define L2TP_GENL_VERSION      0x1
+#define L2TP_GENL_MCGROUP       "l2tp"
+
+#endif /* _LINUX_L2TP_H_ */
diff --git a/lib/libdss-include/include/linux/libc-compat.h b/lib/libdss-include/include/linux/libc-compat.h
new file mode 100644 (file)
index 0000000..9bed5b6
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Compatibility interface for userspace libc header coordination:
+ *
+ * Define compatibility macros that are used to control the inclusion or
+ * exclusion of UAPI structures and definitions in coordination with another
+ * userspace C library.
+ *
+ * This header is intended to solve the problem of UAPI definitions that
+ * conflict with userspace definitions. If a UAPI header has such conflicting
+ * definitions then the solution is as follows:
+ *
+ * * Synchronize the UAPI header and the libc headers so either one can be
+ *   used and such that the ABI is preserved. If this is not possible then
+ *   no simple compatibility interface exists (you need to write translating
+ *   wrappers and rename things) and you can't use this interface.
+ *
+ * Then follow this process:
+ *
+ * (a) Include libc-compat.h in the UAPI header.
+ *      e.g. #include <linux/libc-compat.h>
+ *     This include must be as early as possible.
+ *
+ * (b) In libc-compat.h add enough code to detect that the comflicting
+ *     userspace libc header has been included first.
+ *
+ * (c) If the userspace libc header has been included first define a set of
+ *     guard macros of the form __UAPI_DEF_FOO and set their values to 1, else
+ *     set their values to 0.
+ *
+ * (d) Back in the UAPI header with the conflicting definitions, guard the
+ *     definitions with:
+ *     #if __UAPI_DEF_FOO
+ *       ...
+ *     #endif
+ *
+ * This fixes the situation where the linux headers are included *after* the
+ * libc headers. To fix the problem with the inclusion in the other order the
+ * userspace libc headers must be fixed like this:
+ *
+ * * For all definitions that conflict with kernel definitions wrap those
+ *   defines in the following:
+ *   #if !__UAPI_DEF_FOO
+ *     ...
+ *   #endif
+ *
+ * This prevents the redefinition of a construct already defined by the kernel.
+ */
+#ifndef _LIBC_COMPAT_H
+#define _LIBC_COMPAT_H
+
+/* We have included glibc headers... */
+#if defined(__GLIBC__)
+
+/* Coordinate with glibc netinet/in.h header. */
+#if defined(_NETINET_IN_H)
+
+/* GLIBC headers included first so don't define anything
+ * that would already be defined. */
+#define __UAPI_DEF_IN_ADDR             0
+#define __UAPI_DEF_IN_IPPROTO          0
+#define __UAPI_DEF_IN_PKTINFO          0
+#define __UAPI_DEF_IP_MREQ             0
+#define __UAPI_DEF_SOCKADDR_IN         0
+#define __UAPI_DEF_IN_CLASS            0
+
+#define __UAPI_DEF_IN6_ADDR            0
+/* The exception is the in6_addr macros which must be defined
+ * if the glibc code didn't define them. This guard matches
+ * the guard in glibc/inet/netinet/in.h which defines the
+ * additional in6_addr macros e.g. s6_addr16, and s6_addr32. */
+#if defined(__USE_MISC) || defined (__USE_GNU)
+#define __UAPI_DEF_IN6_ADDR_ALT                0
+#else
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#endif
+#define __UAPI_DEF_SOCKADDR_IN6                0
+#define __UAPI_DEF_IPV6_MREQ           0
+#define __UAPI_DEF_IPPROTO_V6          0
+#define __UAPI_DEF_IPV6_OPTIONS                0
+#define __UAPI_DEF_IN6_PKTINFO         0
+#define __UAPI_DEF_IP6_MTUINFO         0
+
+#else
+
+/* Linux headers included first, and we must define everything
+ * we need. The expectation is that glibc will check the
+ * __UAPI_DEF_* defines and adjust appropriately. */
+#define __UAPI_DEF_IN_ADDR             1
+#define __UAPI_DEF_IN_IPPROTO          1
+#define __UAPI_DEF_IN_PKTINFO          1
+#define __UAPI_DEF_IP_MREQ             1
+#define __UAPI_DEF_SOCKADDR_IN         1
+#define __UAPI_DEF_IN_CLASS            1
+
+#define __UAPI_DEF_IN6_ADDR            1
+/* We unconditionally define the in6_addr macros and glibc must
+ * coordinate. */
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#define __UAPI_DEF_SOCKADDR_IN6                1
+#define __UAPI_DEF_IPV6_MREQ           1
+#define __UAPI_DEF_IPPROTO_V6          1
+#define __UAPI_DEF_IPV6_OPTIONS                1
+#define __UAPI_DEF_IN6_PKTINFO         1
+#define __UAPI_DEF_IP6_MTUINFO         1
+
+#endif /* _NETINET_IN_H */
+
+/* Definitions for xattr.h */
+#if defined(_SYS_XATTR_H)
+#define __UAPI_DEF_XATTR               0
+#else
+#define __UAPI_DEF_XATTR               1
+#endif
+
+/* If we did not see any headers from any supported C libraries,
+ * or we are being included in the kernel, then define everything
+ * that we need. */
+#else /* !defined(__GLIBC__) */
+
+/* Definitions for in.h */
+#define __UAPI_DEF_IN_ADDR             1
+#define __UAPI_DEF_IN_IPPROTO          1
+#define __UAPI_DEF_IN_PKTINFO          1
+#define __UAPI_DEF_IP_MREQ             1
+#define __UAPI_DEF_SOCKADDR_IN         1
+#define __UAPI_DEF_IN_CLASS            1
+
+/* Definitions for in6.h */
+#define __UAPI_DEF_IN6_ADDR            1
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#define __UAPI_DEF_SOCKADDR_IN6                1
+#define __UAPI_DEF_IPV6_MREQ           1
+#define __UAPI_DEF_IPPROTO_V6          1
+#define __UAPI_DEF_IPV6_OPTIONS                1
+#define __UAPI_DEF_IN6_PKTINFO         1
+#define __UAPI_DEF_IP6_MTUINFO         1
+
+/* Definitions for xattr.h */
+#define __UAPI_DEF_XATTR               1
+
+#endif /* __GLIBC__ */
+
+#endif /* _LIBC_COMPAT_H */
diff --git a/lib/libdss-include/include/linux/limits.h b/lib/libdss-include/include/linux/limits.h
new file mode 100644 (file)
index 0000000..2d0f941
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_LIMITS_H
+#define _LINUX_LIMITS_H
+
+#define NR_OPEN                1024
+
+#define NGROUPS_MAX    65536   /* supplemental group IDs are available */
+#define ARG_MAX       131072   /* # bytes of args + environ for exec() */
+#define LINK_MAX         127   /* # links a file may have */
+#define MAX_CANON        255   /* size of the canonical input queue */
+#define MAX_INPUT        255   /* size of the type-ahead buffer */
+#define NAME_MAX         255   /* # chars in a file name */
+#define PATH_MAX        4096   /* # chars in a path name including nul */
+#define PIPE_BUF        4096   /* # bytes in atomic write to a pipe */
+#define XATTR_NAME_MAX   255   /* # chars in an extended attribute name */
+#define XATTR_SIZE_MAX 65536   /* size of an extended attribute value (64k) */
+#define XATTR_LIST_MAX 65536   /* size of extended attribute namelist (64k) */
+
+#define RTSIG_MAX        32
+
+#endif
diff --git a/lib/libdss-include/include/linux/llc.h b/lib/libdss-include/include/linux/llc.h
new file mode 100644 (file)
index 0000000..ff895d1
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * IEEE 802.2 User Interface SAPs for Linux, data structures and indicators.
+ *
+ * Copyright (c) 2001 by Jay Schulist <jschlst@samba.org>
+ *
+ * This program can be redistributed or modified under the terms of the
+ * GNU General Public License as published by the Free Software Foundation.
+ * This program is distributed without any warranty or implied warranty
+ * of merchantability or fitness for a particular purpose.
+ *
+ * See the GNU General Public License for more details.
+ */
+#ifndef __LINUX_LLC_H
+#define __LINUX_LLC_H
+
+#include <linux/socket.h>
+
+#define __LLC_SOCK_SIZE__ 16   /* sizeof(sockaddr_llc), word align. */
+struct sockaddr_llc {
+       __kernel_sa_family_t sllc_family; /* AF_LLC */
+       __kernel_sa_family_t sllc_arphrd; /* ARPHRD_ETHER */
+       unsigned char   sllc_test;
+       unsigned char   sllc_xid;
+       unsigned char   sllc_ua;        /* UA data, only for SOCK_STREAM. */
+       unsigned char   sllc_sap;
+       unsigned char   sllc_mac[IFHWADDRLEN];
+       unsigned char   __pad[__LLC_SOCK_SIZE__ -
+                             sizeof(__kernel_sa_family_t) * 2 -
+                             sizeof(unsigned char) * 4 - IFHWADDRLEN];
+};
+
+/* sockopt definitions. */
+enum llc_sockopts {
+       LLC_OPT_UNKNOWN = 0,
+       LLC_OPT_RETRY,          /* max retrans attempts. */
+       LLC_OPT_SIZE,           /* max PDU size (octets). */
+       LLC_OPT_ACK_TMR_EXP,    /* ack expire time (secs). */
+       LLC_OPT_P_TMR_EXP,      /* pf cycle expire time (secs). */
+       LLC_OPT_REJ_TMR_EXP,    /* rej sent expire time (secs). */
+       LLC_OPT_BUSY_TMR_EXP,   /* busy state expire time (secs). */
+       LLC_OPT_TX_WIN,         /* tx window size. */
+       LLC_OPT_RX_WIN,         /* rx window size. */
+       LLC_OPT_PKTINFO,        /* ancillary packet information. */
+       LLC_OPT_MAX
+};
+
+#define LLC_OPT_MAX_RETRY       100
+#define LLC_OPT_MAX_SIZE       4196
+#define LLC_OPT_MAX_WIN                 127
+#define LLC_OPT_MAX_ACK_TMR_EXP          60
+#define LLC_OPT_MAX_P_TMR_EXP    60
+#define LLC_OPT_MAX_REJ_TMR_EXP          60
+#define LLC_OPT_MAX_BUSY_TMR_EXP  60
+
+/* LLC SAP types. */
+#define LLC_SAP_NULL   0x00            /* NULL SAP.                    */
+#define LLC_SAP_LLC    0x02            /* LLC Sublayer Management.     */
+#define LLC_SAP_SNA    0x04            /* SNA Path Control.            */
+#define LLC_SAP_PNM    0x0E            /* Proway Network Management.   */      
+#define LLC_SAP_IP     0x06            /* TCP/IP.                      */
+#define LLC_SAP_BSPAN  0x42            /* Bridge Spanning Tree Proto   */
+#define LLC_SAP_MMS    0x4E            /* Manufacturing Message Srv.   */
+#define LLC_SAP_8208   0x7E            /* ISO 8208                     */
+#define LLC_SAP_3COM   0x80            /* 3COM.                        */
+#define LLC_SAP_PRO    0x8E            /* Proway Active Station List   */
+#define LLC_SAP_SNAP   0xAA            /* SNAP.                        */
+#define LLC_SAP_BANYAN 0xBC            /* Banyan.                      */
+#define LLC_SAP_IPX    0xE0            /* IPX/SPX.                     */
+#define LLC_SAP_NETBEUI        0xF0            /* NetBEUI.                     */
+#define LLC_SAP_LANMGR 0xF4            /* LanManager.                  */
+#define LLC_SAP_IMPL   0xF8            /* IMPL                         */
+#define LLC_SAP_DISC   0xFC            /* Discovery                    */
+#define LLC_SAP_OSI    0xFE            /* OSI Network Layers.          */
+#define LLC_SAP_LAR    0xDC            /* LAN Address Resolution       */
+#define LLC_SAP_RM     0xD4            /* Resource Management          */
+#define LLC_SAP_GLOBAL 0xFF            /* Global SAP.                  */
+
+struct llc_pktinfo {
+       int lpi_ifindex;
+       unsigned char lpi_sap;
+       unsigned char lpi_mac[IFHWADDRLEN];
+};
+
+#endif /* __LINUX_LLC_H */
diff --git a/lib/libdss-include/include/linux/loop.h b/lib/libdss-include/include/linux/loop.h
new file mode 100644 (file)
index 0000000..50b4ec8
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * include/linux/loop.h
+ *
+ * Written by Theodore Ts'o, 3/29/93.
+ *
+ * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
+ * permitted under the GNU General Public License.
+ */
+#ifndef _LINUX_LOOP_H
+#define _LINUX_LOOP_H
+
+
+#define LO_NAME_SIZE   64
+#define LO_KEY_SIZE    32
+
+
+/*
+ * Loop flags
+ */
+enum {
+       LO_FLAGS_READ_ONLY      = 1,
+       LO_FLAGS_AUTOCLEAR      = 4,
+       LO_FLAGS_PARTSCAN       = 8,
+       LO_FLAGS_DIRECT_IO      = 16,
+};
+
+#include <asm/posix_types.h>   /* for __kernel_old_dev_t */
+#include <linux/types.h>       /* for __u64 */
+
+/* Backwards compatibility version */
+struct loop_info {
+       int                lo_number;           /* ioctl r/o */
+       __kernel_old_dev_t lo_device;           /* ioctl r/o */
+       unsigned long      lo_inode;            /* ioctl r/o */
+       __kernel_old_dev_t lo_rdevice;          /* ioctl r/o */
+       int                lo_offset;
+       int                lo_encrypt_type;
+       int                lo_encrypt_key_size;         /* ioctl w/o */
+       int                lo_flags;                    /* ioctl r/o */
+       char               lo_name[LO_NAME_SIZE];
+       unsigned char      lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
+       unsigned long      lo_init[2];
+       char               reserved[4];
+};
+
+struct loop_info64 {
+       __u64              lo_device;                   /* ioctl r/o */
+       __u64              lo_inode;                    /* ioctl r/o */
+       __u64              lo_rdevice;                  /* ioctl r/o */
+       __u64              lo_offset;
+       __u64              lo_sizelimit;/* bytes, 0 == max available */
+       __u32              lo_number;                   /* ioctl r/o */
+       __u32              lo_encrypt_type;
+       __u32              lo_encrypt_key_size;         /* ioctl w/o */
+       __u32              lo_flags;                    /* ioctl r/o */
+       __u8               lo_file_name[LO_NAME_SIZE];
+       __u8               lo_crypt_name[LO_NAME_SIZE];
+       __u8               lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
+       __u64              lo_init[2];
+};
+
+/*
+ * Loop filter types
+ */
+
+#define LO_CRYPT_NONE          0
+#define LO_CRYPT_XOR           1
+#define LO_CRYPT_DES           2
+#define LO_CRYPT_FISH2         3    /* Twofish encryption */
+#define LO_CRYPT_BLOW          4
+#define LO_CRYPT_CAST128       5
+#define LO_CRYPT_IDEA          6
+#define LO_CRYPT_DUMMY         9
+#define LO_CRYPT_SKIPJACK      10
+#define LO_CRYPT_CRYPTOAPI     18
+#define MAX_LO_CRYPT           20
+
+/*
+ * IOCTL commands --- we will commandeer 0x4C ('L')
+ */
+
+#define LOOP_SET_FD            0x4C00
+#define LOOP_CLR_FD            0x4C01
+#define LOOP_SET_STATUS                0x4C02
+#define LOOP_GET_STATUS                0x4C03
+#define LOOP_SET_STATUS64      0x4C04
+#define LOOP_GET_STATUS64      0x4C05
+#define LOOP_CHANGE_FD         0x4C06
+#define LOOP_SET_CAPACITY      0x4C07
+#define LOOP_SET_DIRECT_IO     0x4C08
+
+/* /dev/loop-control interface */
+#define LOOP_CTL_ADD           0x4C80
+#define LOOP_CTL_REMOVE                0x4C81
+#define LOOP_CTL_GET_FREE      0x4C82
+#endif /* _LINUX_LOOP_H */
diff --git a/lib/libdss-include/include/linux/lp.h b/lib/libdss-include/include/linux/lp.h
new file mode 100644 (file)
index 0000000..3226e65
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * usr/include/linux/lp.h c.1991-1992 James Wiegand
+ * many modifications copyright (C) 1992 Michael K. Johnson
+ * Interrupt support added 1993 Nigel Gamble
+ * Removed 8255 status defines from inside __KERNEL__ Marcelo Tosatti 
+ */
+#ifndef _LINUX_LP_H
+#define _LINUX_LP_H
+
+
+/*
+ * Per POSIX guidelines, this module reserves the LP and lp prefixes
+ * These are the lp_table[minor].flags flags...
+ */
+#define LP_EXIST 0x0001
+#define LP_SELEC 0x0002
+#define LP_BUSY         0x0004
+#define LP_BUSY_BIT_POS 2
+#define LP_OFFL         0x0008
+#define LP_NOPA  0x0010
+#define LP_ERR   0x0020
+#define LP_ABORT 0x0040
+#define LP_CAREFUL 0x0080 /* obsoleted -arca */
+#define LP_ABORTOPEN 0x0100
+
+#define LP_TRUST_IRQ_  0x0200 /* obsolete */
+#define LP_NO_REVERSE  0x0400 /* No reverse mode available. */
+#define LP_DATA_AVAIL  0x0800 /* Data is available. */
+
+/* 
+ * bit defines for 8255 status port
+ * base + 1
+ * accessed with LP_S(minor), which gets the byte...
+ */
+#define LP_PBUSY       0x80  /* inverted input, active high */
+#define LP_PACK                0x40  /* unchanged input, active low */
+#define LP_POUTPA      0x20  /* unchanged input, active high */
+#define LP_PSELECD     0x10  /* unchanged input, active high */
+#define LP_PERRORP     0x08  /* unchanged input, active low */
+
+/* timeout for each character.  This is relative to bus cycles -- it
+ * is the count in a busy loop.  THIS IS THE VALUE TO CHANGE if you
+ * have extremely slow printing, or if the machine seems to slow down
+ * a lot when you print.  If you have slow printing, increase this
+ * number and recompile, and if your system gets bogged down, decrease
+ * this number.  This can be changed with the tunelp(8) command as well.
+ */
+
+#define LP_INIT_CHAR 1000
+
+/* The parallel port specs apparently say that there needs to be
+ * a .5usec wait before and after the strobe.
+ */
+
+#define LP_INIT_WAIT 1
+
+/* This is the amount of time that the driver waits for the printer to
+ * catch up when the printer's buffer appears to be filled.  If you
+ * want to tune this and have a fast printer (i.e. HPIIIP), decrease
+ * this number, and if you have a slow printer, increase this number.
+ * This is in hundredths of a second, the default 2 being .05 second.
+ * Or use the tunelp(8) command, which is especially nice if you want
+ * change back and forth between character and graphics printing, which
+ * are wildly different...
+ */
+
+#define LP_INIT_TIME 2
+
+/* IOCTL numbers */
+#define LPCHAR   0x0601  /* corresponds to LP_INIT_CHAR */
+#define LPTIME   0x0602  /* corresponds to LP_INIT_TIME */
+#define LPABORT  0x0604  /* call with TRUE arg to abort on error,
+                           FALSE to retry.  Default is retry.  */
+#define LPSETIRQ 0x0605  /* call with new IRQ number,
+                           or 0 for polling (no IRQ) */
+#define LPGETIRQ 0x0606  /* get the current IRQ number */
+#define LPWAIT   0x0608  /* corresponds to LP_INIT_WAIT */
+/* NOTE: LPCAREFUL is obsoleted and it' s always the default right now -arca */
+#define LPCAREFUL   0x0609  /* call with TRUE arg to require out-of-paper, off-
+                           line, and error indicators good on all writes,
+                           FALSE to ignore them.  Default is ignore. */
+#define LPABORTOPEN 0x060a  /* call with TRUE arg to abort open() on error,
+                           FALSE to ignore error.  Default is ignore.  */
+#define LPGETSTATUS 0x060b  /* return LP_S(minor) */
+#define LPRESET     0x060c  /* reset printer */
+#ifdef LP_STATS
+#define LPGETSTATS  0x060d  /* get statistics (struct lp_stats) */
+#endif
+#define LPGETFLAGS  0x060e  /* get status flags */
+#define LPSETTIMEOUT 0x060f /* set parport timeout */
+
+/* timeout for printk'ing a timeout, in jiffies (100ths of a second).
+   This is also used for re-checking error conditions if LP_ABORT is
+   not set.  This is the default behavior. */
+
+#define LP_TIMEOUT_INTERRUPT   (60 * HZ)
+#define LP_TIMEOUT_POLLED      (10 * HZ)
+
+
+#endif /* _LINUX_LP_H */
diff --git a/lib/libdss-include/include/linux/lwtunnel.h b/lib/libdss-include/include/linux/lwtunnel.h
new file mode 100644 (file)
index 0000000..1d2f4f6
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef _LWTUNNEL_H_
+#define _LWTUNNEL_H_
+
+#include <linux/types.h>
+
+enum lwtunnel_encap_types {
+       LWTUNNEL_ENCAP_NONE,
+       LWTUNNEL_ENCAP_MPLS,
+       LWTUNNEL_ENCAP_IP,
+       LWTUNNEL_ENCAP_ILA,
+       LWTUNNEL_ENCAP_IP6,
+       __LWTUNNEL_ENCAP_MAX,
+};
+
+#define LWTUNNEL_ENCAP_MAX (__LWTUNNEL_ENCAP_MAX - 1)
+
+enum lwtunnel_ip_t {
+       LWTUNNEL_IP_UNSPEC,
+       LWTUNNEL_IP_ID,
+       LWTUNNEL_IP_DST,
+       LWTUNNEL_IP_SRC,
+       LWTUNNEL_IP_TTL,
+       LWTUNNEL_IP_TOS,
+       LWTUNNEL_IP_FLAGS,
+       __LWTUNNEL_IP_MAX,
+};
+
+#define LWTUNNEL_IP_MAX (__LWTUNNEL_IP_MAX - 1)
+
+enum lwtunnel_ip6_t {
+       LWTUNNEL_IP6_UNSPEC,
+       LWTUNNEL_IP6_ID,
+       LWTUNNEL_IP6_DST,
+       LWTUNNEL_IP6_SRC,
+       LWTUNNEL_IP6_HOPLIMIT,
+       LWTUNNEL_IP6_TC,
+       LWTUNNEL_IP6_FLAGS,
+       __LWTUNNEL_IP6_MAX,
+};
+
+#define LWTUNNEL_IP6_MAX (__LWTUNNEL_IP6_MAX - 1)
+
+#endif /* _LWTUNNEL_H_ */
diff --git a/lib/libdss-include/include/linux/magic.h b/lib/libdss-include/include/linux/magic.h
new file mode 100644 (file)
index 0000000..accb036
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef __LINUX_MAGIC_H__
+#define __LINUX_MAGIC_H__
+
+#define ADFS_SUPER_MAGIC       0xadf5
+#define AFFS_SUPER_MAGIC       0xadff
+#define AFS_SUPER_MAGIC                0x5346414F
+#define AUTOFS_SUPER_MAGIC     0x0187
+#define CODA_SUPER_MAGIC       0x73757245
+#define CRAMFS_MAGIC           0x28cd3d45      /* some random number */
+#define CRAMFS_MAGIC_WEND      0x453dcd28      /* magic number with the wrong endianess */
+#define DEBUGFS_MAGIC          0x64626720
+#define SECURITYFS_MAGIC       0x73636673
+#define SELINUX_MAGIC          0xf97cff8c
+#define SMACK_MAGIC            0x43415d53      /* "SMAC" */
+#define RAMFS_MAGIC            0x858458f6      /* some random number */
+#define TMPFS_MAGIC            0x01021994
+#define HUGETLBFS_MAGIC        0x958458f6      /* some random number */
+#define SQUASHFS_MAGIC         0x73717368
+#define ECRYPTFS_SUPER_MAGIC   0xf15f
+#define EFS_SUPER_MAGIC                0x414A53
+#define EXT2_SUPER_MAGIC       0xEF53
+#define EXT3_SUPER_MAGIC       0xEF53
+#define XENFS_SUPER_MAGIC      0xabba1974
+#define EXT4_SUPER_MAGIC       0xEF53
+#define BTRFS_SUPER_MAGIC      0x9123683E
+#define NILFS_SUPER_MAGIC      0x3434
+#define F2FS_SUPER_MAGIC       0xF2F52010
+#define HPFS_SUPER_MAGIC       0xf995e849
+#define ISOFS_SUPER_MAGIC      0x9660
+#define JFFS2_SUPER_MAGIC      0x72b6
+#define PSTOREFS_MAGIC         0x6165676C
+#define EFIVARFS_MAGIC         0xde5e81e4
+#define HOSTFS_SUPER_MAGIC     0x00c0ffee
+
+#define MINIX_SUPER_MAGIC      0x137F          /* minix v1 fs, 14 char names */
+#define MINIX_SUPER_MAGIC2     0x138F          /* minix v1 fs, 30 char names */
+#define MINIX2_SUPER_MAGIC     0x2468          /* minix v2 fs, 14 char names */
+#define MINIX2_SUPER_MAGIC2    0x2478          /* minix v2 fs, 30 char names */
+#define MINIX3_SUPER_MAGIC     0x4d5a          /* minix v3 fs, 60 char names */
+
+#define MSDOS_SUPER_MAGIC      0x4d44          /* MD */
+#define NCP_SUPER_MAGIC                0x564c          /* Guess, what 0x564c is :-) */
+#define NFS_SUPER_MAGIC                0x6969
+#define OPENPROM_SUPER_MAGIC   0x9fa1
+#define QNX4_SUPER_MAGIC       0x002f          /* qnx4 fs detection */
+#define QNX6_SUPER_MAGIC       0x68191122      /* qnx6 fs detection */
+
+#define REISERFS_SUPER_MAGIC   0x52654973      /* used by gcc */
+                                       /* used by file system utilities that
+                                          look at the superblock, etc.  */
+#define REISERFS_SUPER_MAGIC_STRING    "ReIsErFs"
+#define REISER2FS_SUPER_MAGIC_STRING   "ReIsEr2Fs"
+#define REISER2FS_JR_SUPER_MAGIC_STRING        "ReIsEr3Fs"
+
+#define SMB_SUPER_MAGIC                0x517B
+#define CGROUP_SUPER_MAGIC     0x27e0eb
+
+
+#define STACK_END_MAGIC                0x57AC6E9D
+
+#define TRACEFS_MAGIC          0x74726163
+
+#define V9FS_MAGIC             0x01021997
+
+#define BDEVFS_MAGIC            0x62646576
+#define BINFMTFS_MAGIC          0x42494e4d
+#define DEVPTS_SUPER_MAGIC     0x1cd1
+#define FUTEXFS_SUPER_MAGIC    0xBAD1DEA
+#define PIPEFS_MAGIC            0x50495045
+#define PROC_SUPER_MAGIC       0x9fa0
+#define SOCKFS_MAGIC           0x534F434B
+#define SYSFS_MAGIC            0x62656572
+#define USBDEVICE_SUPER_MAGIC  0x9fa2
+#define MTD_INODE_FS_MAGIC      0x11307854
+#define ANON_INODE_FS_MAGIC    0x09041934
+#define BTRFS_TEST_MAGIC       0x73727279
+#define NSFS_MAGIC             0x6e736673
+#define BPF_FS_MAGIC           0xcafe4a11
+
+#endif /* __LINUX_MAGIC_H__ */
diff --git a/lib/libdss-include/include/linux/major.h b/lib/libdss-include/include/linux/major.h
new file mode 100644 (file)
index 0000000..620252e
--- /dev/null
@@ -0,0 +1,179 @@
+#ifndef _LINUX_MAJOR_H
+#define _LINUX_MAJOR_H
+
+/*
+ * This file has definitions for major device numbers.
+ * For the device number assignments, see Documentation/devices.txt.
+ */
+
+#define UNNAMED_MAJOR          0
+#define MEM_MAJOR              1
+#define RAMDISK_MAJOR          1
+#define FLOPPY_MAJOR           2
+#define PTY_MASTER_MAJOR       2
+#define IDE0_MAJOR             3
+#define HD_MAJOR               IDE0_MAJOR
+#define PTY_SLAVE_MAJOR                3
+#define TTY_MAJOR              4
+#define TTYAUX_MAJOR           5
+#define LP_MAJOR               6
+#define VCS_MAJOR              7
+#define LOOP_MAJOR             7
+#define SCSI_DISK0_MAJOR       8
+#define SCSI_TAPE_MAJOR                9
+#define MD_MAJOR               9
+#define MISC_MAJOR             10
+#define SCSI_CDROM_MAJOR       11
+#define MUX_MAJOR              11      /* PA-RISC only */
+#define XT_DISK_MAJOR          13
+#define INPUT_MAJOR            13
+#define SOUND_MAJOR            14
+#define CDU31A_CDROM_MAJOR     15
+#define JOYSTICK_MAJOR         15
+#define GOLDSTAR_CDROM_MAJOR   16
+#define OPTICS_CDROM_MAJOR     17
+#define SANYO_CDROM_MAJOR      18
+#define CYCLADES_MAJOR         19
+#define CYCLADESAUX_MAJOR      20
+#define MITSUMI_X_CDROM_MAJOR  20
+#define MFM_ACORN_MAJOR                21      /* ARM Linux /dev/mfm */
+#define SCSI_GENERIC_MAJOR     21
+#define IDE1_MAJOR             22
+#define DIGICU_MAJOR           22
+#define DIGI_MAJOR             23
+#define MITSUMI_CDROM_MAJOR    23
+#define CDU535_CDROM_MAJOR     24
+#define STL_SERIALMAJOR                24
+#define MATSUSHITA_CDROM_MAJOR 25
+#define STL_CALLOUTMAJOR       25
+#define MATSUSHITA_CDROM2_MAJOR        26
+#define QIC117_TAPE_MAJOR      27
+#define MATSUSHITA_CDROM3_MAJOR        27
+#define MATSUSHITA_CDROM4_MAJOR        28
+#define STL_SIOMEMMAJOR                28
+#define ACSI_MAJOR             28
+#define AZTECH_CDROM_MAJOR     29
+#define FB_MAJOR               29   /* /dev/fb* framebuffers */
+#define MTD_BLOCK_MAJOR                31
+#define CM206_CDROM_MAJOR      32
+#define IDE2_MAJOR             33
+#define IDE3_MAJOR             34
+#define Z8530_MAJOR            34
+#define XPRAM_MAJOR            35   /* Expanded storage on S/390: "slow ram"*/
+#define NETLINK_MAJOR          36
+#define PS2ESDI_MAJOR          36
+#define IDETAPE_MAJOR          37
+#define Z2RAM_MAJOR            37
+#define APBLOCK_MAJOR          38   /* AP1000 Block device */
+#define DDV_MAJOR              39   /* AP1000 DDV block device */
+#define NBD_MAJOR              43   /* Network block device    */
+#define RISCOM8_NORMAL_MAJOR   48
+#define DAC960_MAJOR           48   /* 48..55 */
+#define RISCOM8_CALLOUT_MAJOR  49
+#define MKISS_MAJOR            55
+#define DSP56K_MAJOR           55   /* DSP56001 processor device */
+
+#define IDE4_MAJOR             56
+#define IDE5_MAJOR             57
+
+#define SCSI_DISK1_MAJOR       65
+#define SCSI_DISK2_MAJOR       66
+#define SCSI_DISK3_MAJOR       67
+#define SCSI_DISK4_MAJOR       68
+#define SCSI_DISK5_MAJOR       69
+#define SCSI_DISK6_MAJOR       70
+#define SCSI_DISK7_MAJOR       71
+
+#define COMPAQ_SMART2_MAJOR    72
+#define COMPAQ_SMART2_MAJOR1   73
+#define COMPAQ_SMART2_MAJOR2   74
+#define COMPAQ_SMART2_MAJOR3   75
+#define COMPAQ_SMART2_MAJOR4   76
+#define COMPAQ_SMART2_MAJOR5   77
+#define COMPAQ_SMART2_MAJOR6   78
+#define COMPAQ_SMART2_MAJOR7   79
+
+#define SPECIALIX_NORMAL_MAJOR 75
+#define SPECIALIX_CALLOUT_MAJOR        76
+
+#define AURORA_MAJOR           79
+
+#define I2O_MAJOR              80      /* 80->87 */
+
+#define SHMIQ_MAJOR            85   /* Linux/mips, SGI /dev/shmiq */
+#define SCSI_CHANGER_MAJOR      86
+
+#define IDE6_MAJOR             88
+#define IDE7_MAJOR             89
+#define IDE8_MAJOR             90
+#define MTD_CHAR_MAJOR         90
+#define IDE9_MAJOR             91
+
+#define DASD_MAJOR             94
+
+#define MDISK_MAJOR            95
+
+#define UBD_MAJOR              98
+
+#define PP_MAJOR               99
+#define JSFD_MAJOR             99
+
+#define PHONE_MAJOR            100
+
+#define COMPAQ_CISS_MAJOR      104
+#define COMPAQ_CISS_MAJOR1     105
+#define COMPAQ_CISS_MAJOR2      106
+#define COMPAQ_CISS_MAJOR3      107
+#define COMPAQ_CISS_MAJOR4      108
+#define COMPAQ_CISS_MAJOR5      109
+#define COMPAQ_CISS_MAJOR6      110
+#define COMPAQ_CISS_MAJOR7      111
+
+#define VIODASD_MAJOR          112
+#define VIOCD_MAJOR            113
+
+#define ATARAID_MAJOR          114
+
+#define SCSI_DISK8_MAJOR       128
+#define SCSI_DISK9_MAJOR       129
+#define SCSI_DISK10_MAJOR      130
+#define SCSI_DISK11_MAJOR      131
+#define SCSI_DISK12_MAJOR      132
+#define SCSI_DISK13_MAJOR      133
+#define SCSI_DISK14_MAJOR      134
+#define SCSI_DISK15_MAJOR      135
+
+#define UNIX98_PTY_MASTER_MAJOR        128
+#define UNIX98_PTY_MAJOR_COUNT 8
+#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
+
+#define DRBD_MAJOR             147
+#define RTF_MAJOR              150
+#define RAW_MAJOR              162
+
+#define USB_ACM_MAJOR          166
+#define USB_ACM_AUX_MAJOR      167
+#define USB_CHAR_MAJOR         180
+
+#define MMC_BLOCK_MAJOR                179
+
+#define VXVM_MAJOR             199     /* VERITAS volume i/o driver    */
+#define VXSPEC_MAJOR           200     /* VERITAS volume config driver */
+#define VXDMP_MAJOR            201     /* VERITAS volume multipath driver */
+
+#define XENVBD_MAJOR           202     /* Xen virtual block device */
+
+#define MSR_MAJOR              202
+#define CPUID_MAJOR            203
+
+#define OSST_MAJOR             206     /* OnStream-SCx0 SCSI tape */
+
+#define IBM_TTY3270_MAJOR      227
+#define IBM_FS3270_MAJOR       228
+
+#define VIOTAPE_MAJOR          230
+
+#define BLOCK_EXT_MAJOR                259
+#define SCSI_OSD_MAJOR         260     /* open-osd's OSD scsi device */
+
+#endif
diff --git a/lib/libdss-include/include/linux/map_to_7segment.h b/lib/libdss-include/include/linux/map_to_7segment.h
new file mode 100644 (file)
index 0000000..12d62a5
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef MAP_TO_7SEGMENT_H
+#define MAP_TO_7SEGMENT_H
+
+/* This file provides translation primitives and tables for the conversion
+ * of (ASCII) characters to a 7-segments notation.
+ *
+ * The 7 segment's wikipedia notation below is used as standard.
+ * See: http://en.wikipedia.org/wiki/Seven_segment_display
+ *
+ * Notation:   +-a-+
+ *             f   b
+ *             +-g-+
+ *             e   c
+ *             +-d-+
+ *
+ * Usage:
+ *
+ *   Register a map variable, and fill it with a character set:
+ *     static SEG7_DEFAULT_MAP(map_seg7);
+ *
+ *
+ *   Then use for conversion:
+ *     seg7 = map_to_seg7(&map_seg7, some_char);
+ *     ...
+ *
+ * In device drivers it is recommended, if required, to make the char map
+ * accessible via the sysfs interface using the following scheme:
+ *
+ * static ssize_t show_map(struct device *dev, char *buf) {
+ *     memcpy(buf, &map_seg7, sizeof(map_seg7));
+ *     return sizeof(map_seg7);
+ * }
+ * static ssize_t store_map(struct device *dev, const char *buf, size_t cnt) {
+ *     if(cnt != sizeof(map_seg7))
+ *             return -EINVAL;
+ *     memcpy(&map_seg7, buf, cnt);
+ *     return cnt;
+ * }
+ * static DEVICE_ATTR(map_seg7, PERMS_RW, show_map, store_map);
+ *
+ * History:
+ * 2005-05-31  RFC linux-kernel@vger.kernel.org
+ */
+#include <linux/errno.h>
+
+
+#define BIT_SEG7_A             0
+#define BIT_SEG7_B             1
+#define BIT_SEG7_C             2
+#define BIT_SEG7_D             3
+#define BIT_SEG7_E             4
+#define BIT_SEG7_F             5
+#define BIT_SEG7_G             6
+#define BIT_SEG7_RESERVED      7
+
+struct seg7_conversion_map {
+       unsigned char   table[128];
+};
+
+static __inline__ int map_to_seg7(struct seg7_conversion_map *map, int c)
+{
+       return c >= 0 && c < sizeof(map->table) ? map->table[c] : -EINVAL;
+}
+
+#define SEG7_CONVERSION_MAP(_name, _map)       \
+       struct seg7_conversion_map _name = { .table = { _map } }
+
+/*
+ * It is recommended to use a facility that allows user space to redefine
+ * custom character sets for LCD devices. Please use a sysfs interface
+ * as described above.
+ */
+#define MAP_TO_SEG7_SYSFS_FILE "map_seg7"
+
+/*******************************************************************************
+ * ASCII conversion table
+ ******************************************************************************/
+
+#define _SEG7(l,a,b,c,d,e,f,g) \
+      (        a<<BIT_SEG7_A | b<<BIT_SEG7_B | c<<BIT_SEG7_C | d<<BIT_SEG7_D | \
+       e<<BIT_SEG7_E | f<<BIT_SEG7_F | g<<BIT_SEG7_G )
+
+#define _MAP_0_32_ASCII_SEG7_NON_PRINTABLE     \
+       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+
+#define _MAP_33_47_ASCII_SEG7_SYMBOL           \
+ _SEG7('!',0,0,0,0,1,1,0), _SEG7('"',0,1,0,0,0,1,0), _SEG7('#',0,1,1,0,1,1,0),\
+ _SEG7('$',1,0,1,1,0,1,1), _SEG7('%',0,0,1,0,0,1,0), _SEG7('&',1,0,1,1,1,1,1),\
+ _SEG7('\'',0,0,0,0,0,1,0),_SEG7('(',1,0,0,1,1,1,0), _SEG7(')',1,1,1,1,0,0,0),\
+ _SEG7('*',0,1,1,0,1,1,1), _SEG7('+',0,1,1,0,0,0,1), _SEG7(',',0,0,0,0,1,0,0),\
+ _SEG7('-',0,0,0,0,0,0,1), _SEG7('.',0,0,0,0,1,0,0), _SEG7('/',0,1,0,0,1,0,1),
+
+#define _MAP_48_57_ASCII_SEG7_NUMERIC          \
+ _SEG7('0',1,1,1,1,1,1,0), _SEG7('1',0,1,1,0,0,0,0), _SEG7('2',1,1,0,1,1,0,1),\
+ _SEG7('3',1,1,1,1,0,0,1), _SEG7('4',0,1,1,0,0,1,1), _SEG7('5',1,0,1,1,0,1,1),\
+ _SEG7('6',1,0,1,1,1,1,1), _SEG7('7',1,1,1,0,0,0,0), _SEG7('8',1,1,1,1,1,1,1),\
+ _SEG7('9',1,1,1,1,0,1,1),
+
+#define _MAP_58_64_ASCII_SEG7_SYMBOL           \
+ _SEG7(':',0,0,0,1,0,0,1), _SEG7(';',0,0,0,1,0,0,1), _SEG7('<',1,0,0,0,0,1,1),\
+ _SEG7('=',0,0,0,1,0,0,1), _SEG7('>',1,1,0,0,0,0,1), _SEG7('?',1,1,1,0,0,1,0),\
+ _SEG7('@',1,1,0,1,1,1,1),
+
+#define _MAP_65_90_ASCII_SEG7_ALPHA_UPPR       \
+ _SEG7('A',1,1,1,0,1,1,1), _SEG7('B',1,1,1,1,1,1,1), _SEG7('C',1,0,0,1,1,1,0),\
+ _SEG7('D',1,1,1,1,1,1,0), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
+ _SEG7('G',1,1,1,1,0,1,1), _SEG7('H',0,1,1,0,1,1,1), _SEG7('I',0,1,1,0,0,0,0),\
+ _SEG7('J',0,1,1,1,0,0,0), _SEG7('K',0,1,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
+ _SEG7('M',1,1,1,0,1,1,0), _SEG7('N',1,1,1,0,1,1,0), _SEG7('O',1,1,1,1,1,1,0),\
+ _SEG7('P',1,1,0,0,1,1,1), _SEG7('Q',1,1,1,1,1,1,0), _SEG7('R',1,1,1,0,1,1,1),\
+ _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('U',0,1,1,1,1,1,0),\
+ _SEG7('V',0,1,1,1,1,1,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
+ _SEG7('Y',0,1,1,0,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
+
+#define _MAP_91_96_ASCII_SEG7_SYMBOL           \
+ _SEG7('[',1,0,0,1,1,1,0), _SEG7('\\',0,0,1,0,0,1,1),_SEG7(']',1,1,1,1,0,0,0),\
+ _SEG7('^',1,1,0,0,0,1,0), _SEG7('_',0,0,0,1,0,0,0), _SEG7('`',0,1,0,0,0,0,0),
+
+#define _MAP_97_122_ASCII_SEG7_ALPHA_LOWER     \
+ _SEG7('A',1,1,1,0,1,1,1), _SEG7('b',0,0,1,1,1,1,1), _SEG7('c',0,0,0,1,1,0,1),\
+ _SEG7('d',0,1,1,1,1,0,1), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
+ _SEG7('G',1,1,1,1,0,1,1), _SEG7('h',0,0,1,0,1,1,1), _SEG7('i',0,0,1,0,0,0,0),\
+ _SEG7('j',0,0,1,1,0,0,0), _SEG7('k',0,0,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
+ _SEG7('M',1,1,1,0,1,1,0), _SEG7('n',0,0,1,0,1,0,1), _SEG7('o',0,0,1,1,1,0,1),\
+ _SEG7('P',1,1,0,0,1,1,1), _SEG7('q',1,1,1,0,0,1,1), _SEG7('r',0,0,0,0,1,0,1),\
+ _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('u',0,0,1,1,1,0,0),\
+ _SEG7('v',0,0,1,1,1,0,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
+ _SEG7('y',0,1,1,1,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
+
+#define _MAP_123_126_ASCII_SEG7_SYMBOL         \
+ _SEG7('{',1,0,0,1,1,1,0), _SEG7('|',0,0,0,0,1,1,0), _SEG7('}',1,1,1,1,0,0,0),\
+ _SEG7('~',1,0,0,0,0,0,0),
+
+/* Maps */
+
+/* This set tries to map as close as possible to the visible characteristics
+ * of the ASCII symbol, lowercase and uppercase letters may differ in
+ * presentation on the display.
+ */
+#define MAP_ASCII7SEG_ALPHANUM                 \
+       _MAP_0_32_ASCII_SEG7_NON_PRINTABLE      \
+       _MAP_33_47_ASCII_SEG7_SYMBOL            \
+       _MAP_48_57_ASCII_SEG7_NUMERIC           \
+       _MAP_58_64_ASCII_SEG7_SYMBOL            \
+       _MAP_65_90_ASCII_SEG7_ALPHA_UPPR        \
+       _MAP_91_96_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_123_126_ASCII_SEG7_SYMBOL
+
+/* This set tries to map as close as possible to the symbolic characteristics
+ * of the ASCII character for maximum discrimination.
+ * For now this means all alpha chars are in lower case representations.
+ * (This for example facilitates the use of hex numbers with uppercase input.)
+ */
+#define MAP_ASCII7SEG_ALPHANUM_LC                      \
+       _MAP_0_32_ASCII_SEG7_NON_PRINTABLE      \
+       _MAP_33_47_ASCII_SEG7_SYMBOL            \
+       _MAP_48_57_ASCII_SEG7_NUMERIC           \
+       _MAP_58_64_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_91_96_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_123_126_ASCII_SEG7_SYMBOL
+
+#define SEG7_DEFAULT_MAP(_name)                \
+       SEG7_CONVERSION_MAP(_name,MAP_ASCII7SEG_ALPHANUM)
+
+#endif /* MAP_TO_7SEGMENT_H */
+
diff --git a/lib/libdss-include/include/linux/matroxfb.h b/lib/libdss-include/include/linux/matroxfb.h
new file mode 100644 (file)
index 0000000..8c22a89
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef __LINUX_MATROXFB_H__
+#define __LINUX_MATROXFB_H__
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+#include <linux/videodev2.h>
+#include <linux/fb.h>
+
+struct matroxioc_output_mode {
+       __u32   output;         /* which output */
+#define MATROXFB_OUTPUT_PRIMARY                0x0000
+#define MATROXFB_OUTPUT_SECONDARY      0x0001
+#define MATROXFB_OUTPUT_DFP            0x0002
+       __u32   mode;           /* which mode */
+#define MATROXFB_OUTPUT_MODE_PAL       0x0001
+#define MATROXFB_OUTPUT_MODE_NTSC      0x0002
+#define MATROXFB_OUTPUT_MODE_MONITOR   0x0080
+};
+#define MATROXFB_SET_OUTPUT_MODE       _IOW('n',0xFA,size_t)
+#define MATROXFB_GET_OUTPUT_MODE       _IOWR('n',0xFA,size_t)
+
+/* bitfield */
+#define MATROXFB_OUTPUT_CONN_PRIMARY   (1 << MATROXFB_OUTPUT_PRIMARY)
+#define MATROXFB_OUTPUT_CONN_SECONDARY (1 << MATROXFB_OUTPUT_SECONDARY)
+#define MATROXFB_OUTPUT_CONN_DFP       (1 << MATROXFB_OUTPUT_DFP)
+/* connect these outputs to this framebuffer */
+#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,size_t)
+/* which outputs are connected to this framebuffer */
+#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,size_t)
+/* which outputs are available for this framebuffer */
+#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,size_t)
+/* which outputs exist on this framebuffer */
+#define MATROXFB_GET_ALL_OUTPUTS       _IOR('n',0xFB,size_t)
+
+enum matroxfb_ctrl_id {
+  MATROXFB_CID_TESTOUT  = V4L2_CID_PRIVATE_BASE,
+  MATROXFB_CID_DEFLICKER,
+  MATROXFB_CID_LAST
+};
+
+#endif
+
diff --git a/lib/libdss-include/include/linux/mdio.h b/lib/libdss-include/include/linux/mdio.h
new file mode 100644 (file)
index 0000000..57672dd
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * linux/mdio.h: definitions for MDIO (clause 45) transceivers
+ * Copyright 2006-2009 Solarflare Communications Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation, incorporated herein by reference.
+ */
+
+#ifndef __LINUX_MDIO_H__
+#define __LINUX_MDIO_H__
+
+#include <linux/types.h>
+#include <linux/mii.h>
+
+/* MDIO Manageable Devices (MMDs). */
+#define MDIO_MMD_PMAPMD                1       /* Physical Medium Attachment/
+                                        * Physical Medium Dependent */
+#define MDIO_MMD_WIS           2       /* WAN Interface Sublayer */
+#define MDIO_MMD_PCS           3       /* Physical Coding Sublayer */
+#define MDIO_MMD_PHYXS         4       /* PHY Extender Sublayer */
+#define MDIO_MMD_DTEXS         5       /* DTE Extender Sublayer */
+#define MDIO_MMD_TC            6       /* Transmission Convergence */
+#define MDIO_MMD_AN            7       /* Auto-Negotiation */
+#define MDIO_MMD_C22EXT                29      /* Clause 22 extension */
+#define MDIO_MMD_VEND1         30      /* Vendor specific 1 */
+#define MDIO_MMD_VEND2         31      /* Vendor specific 2 */
+
+/* Generic MDIO registers. */
+#define MDIO_CTRL1             MII_BMCR
+#define MDIO_STAT1             MII_BMSR
+#define MDIO_DEVID1            MII_PHYSID1
+#define MDIO_DEVID2            MII_PHYSID2
+#define MDIO_SPEED             4       /* Speed ability */
+#define MDIO_DEVS1             5       /* Devices in package */
+#define MDIO_DEVS2             6
+#define MDIO_CTRL2             7       /* 10G control 2 */
+#define MDIO_STAT2             8       /* 10G status 2 */
+#define MDIO_PMA_TXDIS         9       /* 10G PMA/PMD transmit disable */
+#define MDIO_PMA_RXDET         10      /* 10G PMA/PMD receive signal detect */
+#define MDIO_PMA_EXTABLE       11      /* 10G PMA/PMD extended ability */
+#define MDIO_PKGID1            14      /* Package identifier */
+#define MDIO_PKGID2            15
+#define MDIO_AN_ADVERTISE      16      /* AN advertising (base page) */
+#define MDIO_AN_LPA            19      /* AN LP abilities (base page) */
+#define MDIO_PCS_EEE_ABLE      20      /* EEE Capability register */
+#define MDIO_PCS_EEE_WK_ERR    22      /* EEE wake error counter */
+#define MDIO_PHYXS_LNSTAT      24      /* PHY XGXS lane state */
+#define MDIO_AN_EEE_ADV                60      /* EEE advertisement */
+#define MDIO_AN_EEE_LPABLE     61      /* EEE link partner ability */
+
+/* Media-dependent registers. */
+#define MDIO_PMA_10GBT_SWAPPOL 130     /* 10GBASE-T pair swap & polarity */
+#define MDIO_PMA_10GBT_TXPWR   131     /* 10GBASE-T TX power control */
+#define MDIO_PMA_10GBT_SNR     133     /* 10GBASE-T SNR margin, lane A.
+                                        * Lanes B-D are numbered 134-136. */
+#define MDIO_PMA_10GBR_FECABLE 170     /* 10GBASE-R FEC ability */
+#define MDIO_PCS_10GBX_STAT1   24      /* 10GBASE-X PCS status 1 */
+#define MDIO_PCS_10GBRT_STAT1  32      /* 10GBASE-R/-T PCS status 1 */
+#define MDIO_PCS_10GBRT_STAT2  33      /* 10GBASE-R/-T PCS status 2 */
+#define MDIO_AN_10GBT_CTRL     32      /* 10GBASE-T auto-negotiation control */
+#define MDIO_AN_10GBT_STAT     33      /* 10GBASE-T auto-negotiation status */
+
+/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */
+#define MDIO_PMA_LASI_RXCTRL   0x9000  /* RX_ALARM control */
+#define MDIO_PMA_LASI_TXCTRL   0x9001  /* TX_ALARM control */
+#define MDIO_PMA_LASI_CTRL     0x9002  /* LASI control */
+#define MDIO_PMA_LASI_RXSTAT   0x9003  /* RX_ALARM status */
+#define MDIO_PMA_LASI_TXSTAT   0x9004  /* TX_ALARM status */
+#define MDIO_PMA_LASI_STAT     0x9005  /* LASI status */
+
+/* Control register 1. */
+/* Enable extended speed selection */
+#define MDIO_CTRL1_SPEEDSELEXT         (BMCR_SPEED1000 | BMCR_SPEED100)
+/* All speed selection bits */
+#define MDIO_CTRL1_SPEEDSEL            (MDIO_CTRL1_SPEEDSELEXT | 0x003c)
+#define MDIO_CTRL1_FULLDPLX            BMCR_FULLDPLX
+#define MDIO_CTRL1_LPOWER              BMCR_PDOWN
+#define MDIO_CTRL1_RESET               BMCR_RESET
+#define MDIO_PMA_CTRL1_LOOPBACK                0x0001
+#define MDIO_PMA_CTRL1_SPEED1000       BMCR_SPEED1000
+#define MDIO_PMA_CTRL1_SPEED100                BMCR_SPEED100
+#define MDIO_PCS_CTRL1_LOOPBACK                BMCR_LOOPBACK
+#define MDIO_PHYXS_CTRL1_LOOPBACK      BMCR_LOOPBACK
+#define MDIO_AN_CTRL1_RESTART          BMCR_ANRESTART
+#define MDIO_AN_CTRL1_ENABLE           BMCR_ANENABLE
+#define MDIO_AN_CTRL1_XNP              0x2000  /* Enable extended next page */
+#define MDIO_PCS_CTRL1_CLKSTOP_EN      0x400   /* Stop the clock during LPI */
+
+/* 10 Gb/s */
+#define MDIO_CTRL1_SPEED10G            (MDIO_CTRL1_SPEEDSELEXT | 0x00)
+/* 10PASS-TS/2BASE-TL */
+#define MDIO_CTRL1_SPEED10P2B          (MDIO_CTRL1_SPEEDSELEXT | 0x04)
+
+/* Status register 1. */
+#define MDIO_STAT1_LPOWERABLE          0x0002  /* Low-power ability */
+#define MDIO_STAT1_LSTATUS             BMSR_LSTATUS
+#define MDIO_STAT1_FAULT               0x0080  /* Fault */
+#define MDIO_AN_STAT1_LPABLE           0x0001  /* Link partner AN ability */
+#define MDIO_AN_STAT1_ABLE             BMSR_ANEGCAPABLE
+#define MDIO_AN_STAT1_RFAULT           BMSR_RFAULT
+#define MDIO_AN_STAT1_COMPLETE         BMSR_ANEGCOMPLETE
+#define MDIO_AN_STAT1_PAGE             0x0040  /* Page received */
+#define MDIO_AN_STAT1_XNP              0x0080  /* Extended next page status */
+
+/* Speed register. */
+#define MDIO_SPEED_10G                 0x0001  /* 10G capable */
+#define MDIO_PMA_SPEED_2B              0x0002  /* 2BASE-TL capable */
+#define MDIO_PMA_SPEED_10P             0x0004  /* 10PASS-TS capable */
+#define MDIO_PMA_SPEED_1000            0x0010  /* 1000M capable */
+#define MDIO_PMA_SPEED_100             0x0020  /* 100M capable */
+#define MDIO_PMA_SPEED_10              0x0040  /* 10M capable */
+#define MDIO_PCS_SPEED_10P2B           0x0002  /* 10PASS-TS/2BASE-TL capable */
+
+/* Device present registers. */
+#define MDIO_DEVS_PRESENT(devad)       (1 << (devad))
+#define MDIO_DEVS_PMAPMD               MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD)
+#define MDIO_DEVS_WIS                  MDIO_DEVS_PRESENT(MDIO_MMD_WIS)
+#define MDIO_DEVS_PCS                  MDIO_DEVS_PRESENT(MDIO_MMD_PCS)
+#define MDIO_DEVS_PHYXS                        MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS)
+#define MDIO_DEVS_DTEXS                        MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS)
+#define MDIO_DEVS_TC                   MDIO_DEVS_PRESENT(MDIO_MMD_TC)
+#define MDIO_DEVS_AN                   MDIO_DEVS_PRESENT(MDIO_MMD_AN)
+#define MDIO_DEVS_C22EXT               MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT)
+
+/* Control register 2. */
+#define MDIO_PMA_CTRL2_TYPE            0x000f  /* PMA/PMD type selection */
+#define MDIO_PMA_CTRL2_10GBCX4         0x0000  /* 10GBASE-CX4 type */
+#define MDIO_PMA_CTRL2_10GBEW          0x0001  /* 10GBASE-EW type */
+#define MDIO_PMA_CTRL2_10GBLW          0x0002  /* 10GBASE-LW type */
+#define MDIO_PMA_CTRL2_10GBSW          0x0003  /* 10GBASE-SW type */
+#define MDIO_PMA_CTRL2_10GBLX4         0x0004  /* 10GBASE-LX4 type */
+#define MDIO_PMA_CTRL2_10GBER          0x0005  /* 10GBASE-ER type */
+#define MDIO_PMA_CTRL2_10GBLR          0x0006  /* 10GBASE-LR type */
+#define MDIO_PMA_CTRL2_10GBSR          0x0007  /* 10GBASE-SR type */
+#define MDIO_PMA_CTRL2_10GBLRM         0x0008  /* 10GBASE-LRM type */
+#define MDIO_PMA_CTRL2_10GBT           0x0009  /* 10GBASE-T type */
+#define MDIO_PMA_CTRL2_10GBKX4         0x000a  /* 10GBASE-KX4 type */
+#define MDIO_PMA_CTRL2_10GBKR          0x000b  /* 10GBASE-KR type */
+#define MDIO_PMA_CTRL2_1000BT          0x000c  /* 1000BASE-T type */
+#define MDIO_PMA_CTRL2_1000BKX         0x000d  /* 1000BASE-KX type */
+#define MDIO_PMA_CTRL2_100BTX          0x000e  /* 100BASE-TX type */
+#define MDIO_PMA_CTRL2_10BT            0x000f  /* 10BASE-T type */
+#define MDIO_PCS_CTRL2_TYPE            0x0003  /* PCS type selection */
+#define MDIO_PCS_CTRL2_10GBR           0x0000  /* 10GBASE-R type */
+#define MDIO_PCS_CTRL2_10GBX           0x0001  /* 10GBASE-X type */
+#define MDIO_PCS_CTRL2_10GBW           0x0002  /* 10GBASE-W type */
+#define MDIO_PCS_CTRL2_10GBT           0x0003  /* 10GBASE-T type */
+
+/* Status register 2. */
+#define MDIO_STAT2_RXFAULT             0x0400  /* Receive fault */
+#define MDIO_STAT2_TXFAULT             0x0800  /* Transmit fault */
+#define MDIO_STAT2_DEVPRST             0xc000  /* Device present */
+#define MDIO_STAT2_DEVPRST_VAL         0x8000  /* Device present value */
+#define MDIO_PMA_STAT2_LBABLE          0x0001  /* PMA loopback ability */
+#define MDIO_PMA_STAT2_10GBEW          0x0002  /* 10GBASE-EW ability */
+#define MDIO_PMA_STAT2_10GBLW          0x0004  /* 10GBASE-LW ability */
+#define MDIO_PMA_STAT2_10GBSW          0x0008  /* 10GBASE-SW ability */
+#define MDIO_PMA_STAT2_10GBLX4         0x0010  /* 10GBASE-LX4 ability */
+#define MDIO_PMA_STAT2_10GBER          0x0020  /* 10GBASE-ER ability */
+#define MDIO_PMA_STAT2_10GBLR          0x0040  /* 10GBASE-LR ability */
+#define MDIO_PMA_STAT2_10GBSR          0x0080  /* 10GBASE-SR ability */
+#define MDIO_PMD_STAT2_TXDISAB         0x0100  /* PMD TX disable ability */
+#define MDIO_PMA_STAT2_EXTABLE         0x0200  /* Extended abilities */
+#define MDIO_PMA_STAT2_RXFLTABLE       0x1000  /* Receive fault ability */
+#define MDIO_PMA_STAT2_TXFLTABLE       0x2000  /* Transmit fault ability */
+#define MDIO_PCS_STAT2_10GBR           0x0001  /* 10GBASE-R capable */
+#define MDIO_PCS_STAT2_10GBX           0x0002  /* 10GBASE-X capable */
+#define MDIO_PCS_STAT2_10GBW           0x0004  /* 10GBASE-W capable */
+#define MDIO_PCS_STAT2_RXFLTABLE       0x1000  /* Receive fault ability */
+#define MDIO_PCS_STAT2_TXFLTABLE       0x2000  /* Transmit fault ability */
+
+/* Transmit disable register. */
+#define MDIO_PMD_TXDIS_GLOBAL          0x0001  /* Global PMD TX disable */
+#define MDIO_PMD_TXDIS_0               0x0002  /* PMD TX disable 0 */
+#define MDIO_PMD_TXDIS_1               0x0004  /* PMD TX disable 1 */
+#define MDIO_PMD_TXDIS_2               0x0008  /* PMD TX disable 2 */
+#define MDIO_PMD_TXDIS_3               0x0010  /* PMD TX disable 3 */
+
+/* Receive signal detect register. */
+#define MDIO_PMD_RXDET_GLOBAL          0x0001  /* Global PMD RX signal detect */
+#define MDIO_PMD_RXDET_0               0x0002  /* PMD RX signal detect 0 */
+#define MDIO_PMD_RXDET_1               0x0004  /* PMD RX signal detect 1 */
+#define MDIO_PMD_RXDET_2               0x0008  /* PMD RX signal detect 2 */
+#define MDIO_PMD_RXDET_3               0x0010  /* PMD RX signal detect 3 */
+
+/* Extended abilities register. */
+#define MDIO_PMA_EXTABLE_10GCX4                0x0001  /* 10GBASE-CX4 ability */
+#define MDIO_PMA_EXTABLE_10GBLRM       0x0002  /* 10GBASE-LRM ability */
+#define MDIO_PMA_EXTABLE_10GBT         0x0004  /* 10GBASE-T ability */
+#define MDIO_PMA_EXTABLE_10GBKX4       0x0008  /* 10GBASE-KX4 ability */
+#define MDIO_PMA_EXTABLE_10GBKR                0x0010  /* 10GBASE-KR ability */
+#define MDIO_PMA_EXTABLE_1000BT                0x0020  /* 1000BASE-T ability */
+#define MDIO_PMA_EXTABLE_1000BKX       0x0040  /* 1000BASE-KX ability */
+#define MDIO_PMA_EXTABLE_100BTX                0x0080  /* 100BASE-TX ability */
+#define MDIO_PMA_EXTABLE_10BT          0x0100  /* 10BASE-T ability */
+
+/* PHY XGXS lane state register. */
+#define MDIO_PHYXS_LNSTAT_SYNC0                0x0001
+#define MDIO_PHYXS_LNSTAT_SYNC1                0x0002
+#define MDIO_PHYXS_LNSTAT_SYNC2                0x0004
+#define MDIO_PHYXS_LNSTAT_SYNC3                0x0008
+#define MDIO_PHYXS_LNSTAT_ALIGN                0x1000
+
+/* PMA 10GBASE-T pair swap & polarity */
+#define MDIO_PMA_10GBT_SWAPPOL_ABNX    0x0001  /* Pair A/B uncrossed */
+#define MDIO_PMA_10GBT_SWAPPOL_CDNX    0x0002  /* Pair C/D uncrossed */
+#define MDIO_PMA_10GBT_SWAPPOL_AREV    0x0100  /* Pair A polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_BREV    0x0200  /* Pair B polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_CREV    0x0400  /* Pair C polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_DREV    0x0800  /* Pair D polarity reversed */
+
+/* PMA 10GBASE-T TX power register. */
+#define MDIO_PMA_10GBT_TXPWR_SHORT     0x0001  /* Short-reach mode */
+
+/* PMA 10GBASE-T SNR registers. */
+/* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */
+#define MDIO_PMA_10GBT_SNR_BIAS                0x8000
+#define MDIO_PMA_10GBT_SNR_MAX         127
+
+/* PMA 10GBASE-R FEC ability register. */
+#define MDIO_PMA_10GBR_FECABLE_ABLE    0x0001  /* FEC ability */
+#define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002  /* FEC error indic. ability */
+
+/* PCS 10GBASE-R/-T status register 1. */
+#define MDIO_PCS_10GBRT_STAT1_BLKLK    0x0001  /* Block lock attained */
+
+/* PCS 10GBASE-R/-T status register 2. */
+#define MDIO_PCS_10GBRT_STAT2_ERR      0x00ff
+#define MDIO_PCS_10GBRT_STAT2_BER      0x3f00
+
+/* AN 10GBASE-T control register. */
+#define MDIO_AN_10GBT_CTRL_ADV10G      0x1000  /* Advertise 10GBASE-T */
+
+/* AN 10GBASE-T status register. */
+#define MDIO_AN_10GBT_STAT_LPTRR       0x0200  /* LP training reset req. */
+#define MDIO_AN_10GBT_STAT_LPLTABLE    0x0400  /* LP loop timing ability */
+#define MDIO_AN_10GBT_STAT_LP10G       0x0800  /* LP is 10GBT capable */
+#define MDIO_AN_10GBT_STAT_REMOK       0x1000  /* Remote OK */
+#define MDIO_AN_10GBT_STAT_LOCOK       0x2000  /* Local OK */
+#define MDIO_AN_10GBT_STAT_MS          0x4000  /* Master/slave config */
+#define MDIO_AN_10GBT_STAT_MSFLT       0x8000  /* Master/slave config fault */
+
+/* EEE Supported/Advertisement/LP Advertisement registers.
+ *
+ * EEE capability Register (3.20), Advertisement (7.60) and
+ * Link partner ability (7.61) registers have and can use the same identical
+ * bit masks.
+ */
+#define MDIO_AN_EEE_ADV_100TX  0x0002  /* Advertise 100TX EEE cap */
+#define MDIO_AN_EEE_ADV_1000T  0x0004  /* Advertise 1000T EEE cap */
+/* Note: the two defines above can be potentially used by the user-land
+ * and cannot remove them now.
+ * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros
+ * using the previous ones (that can be considered obsolete).
+ */
+#define MDIO_EEE_100TX         MDIO_AN_EEE_ADV_100TX   /* 100TX EEE cap */
+#define MDIO_EEE_1000T         MDIO_AN_EEE_ADV_1000T   /* 1000T EEE cap */
+#define MDIO_EEE_10GT          0x0008  /* 10GT EEE cap */
+#define MDIO_EEE_1000KX                0x0010  /* 1000KX EEE cap */
+#define MDIO_EEE_10GKX4                0x0020  /* 10G KX4 EEE cap */
+#define MDIO_EEE_10GKR         0x0040  /* 10G KR EEE cap */
+
+/* LASI RX_ALARM control/status registers. */
+#define MDIO_PMA_LASI_RX_PHYXSLFLT     0x0001  /* PHY XS RX local fault */
+#define MDIO_PMA_LASI_RX_PCSLFLT       0x0008  /* PCS RX local fault */
+#define MDIO_PMA_LASI_RX_PMALFLT       0x0010  /* PMA/PMD RX local fault */
+#define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020  /* RX optical power fault */
+#define MDIO_PMA_LASI_RX_WISLFLT       0x0200  /* WIS local fault */
+
+/* LASI TX_ALARM control/status registers. */
+#define MDIO_PMA_LASI_TX_PHYXSLFLT     0x0001  /* PHY XS TX local fault */
+#define MDIO_PMA_LASI_TX_PCSLFLT       0x0008  /* PCS TX local fault */
+#define MDIO_PMA_LASI_TX_PMALFLT       0x0010  /* PMA/PMD TX local fault */
+#define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080  /* Laser output power fault */
+#define MDIO_PMA_LASI_TX_LASERTEMPFLT  0x0100  /* Laser temperature fault */
+#define MDIO_PMA_LASI_TX_LASERBICURRFLT        0x0200  /* Laser bias current fault */
+
+/* LASI control/status registers. */
+#define MDIO_PMA_LASI_LSALARM          0x0001  /* LS_ALARM enable/status */
+#define MDIO_PMA_LASI_TXALARM          0x0002  /* TX_ALARM enable/status */
+#define MDIO_PMA_LASI_RXALARM          0x0004  /* RX_ALARM enable/status */
+
+/* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */
+
+#define MDIO_PHY_ID_C45                        0x8000
+#define MDIO_PHY_ID_PRTAD              0x03e0
+#define MDIO_PHY_ID_DEVAD              0x001f
+#define MDIO_PHY_ID_C45_MASK                                           \
+       (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD)
+
+static __inline__ __u16 mdio_phy_id_c45(int prtad, int devad)
+{
+       return MDIO_PHY_ID_C45 | (prtad << 5) | devad;
+}
+
+#endif /* __LINUX_MDIO_H__ */
diff --git a/lib/libdss-include/include/linux/media-bus-format.h b/lib/libdss-include/include/linux/media-bus-format.h
new file mode 100644 (file)
index 0000000..190d491
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Media Bus API header
+ *
+ * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_MEDIA_BUS_FORMAT_H
+#define __LINUX_MEDIA_BUS_FORMAT_H
+
+/*
+ * These bus formats uniquely identify data formats on the data bus. Format 0
+ * is reserved, MEDIA_BUS_FMT_FIXED shall be used by host-client pairs, where
+ * the data format is fixed. Additionally, "2X8" means that one pixel is
+ * transferred in two 8-bit samples, "BE" or "LE" specify in which order those
+ * samples are transferred over the bus: "LE" means that the least significant
+ * bits are transferred first, "BE" means that the most significant bits are
+ * transferred first, and "PADHI" and "PADLO" define which bits - low or high,
+ * in the incomplete high byte, are filled with padding bits.
+ *
+ * The bus formats are grouped by type, bus_width, bits per component, samples
+ * per pixel and order of subsamples. Numerical values are sorted using generic
+ * numerical sort order (8 thus comes before 10).
+ *
+ * As their value can't change when a new bus format is inserted in the
+ * enumeration, the bus formats are explicitly given a numerical value. The next
+ * free values for each category are listed below, update them when inserting
+ * new pixel codes.
+ */
+
+#define MEDIA_BUS_FMT_FIXED                    0x0001
+
+/* RGB - next is       0x1018 */
+#define MEDIA_BUS_FMT_RGB444_1X12              0x1016
+#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE      0x1001
+#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE      0x1002
+#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE      0x1003
+#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE      0x1004
+#define MEDIA_BUS_FMT_RGB565_1X16              0x1017
+#define MEDIA_BUS_FMT_BGR565_2X8_BE            0x1005
+#define MEDIA_BUS_FMT_BGR565_2X8_LE            0x1006
+#define MEDIA_BUS_FMT_RGB565_2X8_BE            0x1007
+#define MEDIA_BUS_FMT_RGB565_2X8_LE            0x1008
+#define MEDIA_BUS_FMT_RGB666_1X18              0x1009
+#define MEDIA_BUS_FMT_RBG888_1X24              0x100e
+#define MEDIA_BUS_FMT_RGB666_1X24_CPADHI       0x1015
+#define MEDIA_BUS_FMT_RGB666_1X7X3_SPWG                0x1010
+#define MEDIA_BUS_FMT_BGR888_1X24              0x1013
+#define MEDIA_BUS_FMT_GBR888_1X24              0x1014
+#define MEDIA_BUS_FMT_RGB888_1X24              0x100a
+#define MEDIA_BUS_FMT_RGB888_2X12_BE           0x100b
+#define MEDIA_BUS_FMT_RGB888_2X12_LE           0x100c
+#define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG                0x1011
+#define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA       0x1012
+#define MEDIA_BUS_FMT_ARGB8888_1X32            0x100d
+#define MEDIA_BUS_FMT_RGB888_1X32_PADHI                0x100f
+
+/* YUV (including grey) - next is      0x2026 */
+#define MEDIA_BUS_FMT_Y8_1X8                   0x2001
+#define MEDIA_BUS_FMT_UV8_1X8                  0x2015
+#define MEDIA_BUS_FMT_UYVY8_1_5X8              0x2002
+#define MEDIA_BUS_FMT_VYUY8_1_5X8              0x2003
+#define MEDIA_BUS_FMT_YUYV8_1_5X8              0x2004
+#define MEDIA_BUS_FMT_YVYU8_1_5X8              0x2005
+#define MEDIA_BUS_FMT_UYVY8_2X8                        0x2006
+#define MEDIA_BUS_FMT_VYUY8_2X8                        0x2007
+#define MEDIA_BUS_FMT_YUYV8_2X8                        0x2008
+#define MEDIA_BUS_FMT_YVYU8_2X8                        0x2009
+#define MEDIA_BUS_FMT_Y10_1X10                 0x200a
+#define MEDIA_BUS_FMT_UYVY10_2X10              0x2018
+#define MEDIA_BUS_FMT_VYUY10_2X10              0x2019
+#define MEDIA_BUS_FMT_YUYV10_2X10              0x200b
+#define MEDIA_BUS_FMT_YVYU10_2X10              0x200c
+#define MEDIA_BUS_FMT_Y12_1X12                 0x2013
+#define MEDIA_BUS_FMT_UYVY12_2X12              0x201c
+#define MEDIA_BUS_FMT_VYUY12_2X12              0x201d
+#define MEDIA_BUS_FMT_YUYV12_2X12              0x201e
+#define MEDIA_BUS_FMT_YVYU12_2X12              0x201f
+#define MEDIA_BUS_FMT_UYVY8_1X16               0x200f
+#define MEDIA_BUS_FMT_VYUY8_1X16               0x2010
+#define MEDIA_BUS_FMT_YUYV8_1X16               0x2011
+#define MEDIA_BUS_FMT_YVYU8_1X16               0x2012
+#define MEDIA_BUS_FMT_YDYUYDYV8_1X16           0x2014
+#define MEDIA_BUS_FMT_UYVY10_1X20              0x201a
+#define MEDIA_BUS_FMT_VYUY10_1X20              0x201b
+#define MEDIA_BUS_FMT_YUYV10_1X20              0x200d
+#define MEDIA_BUS_FMT_YVYU10_1X20              0x200e
+#define MEDIA_BUS_FMT_VUY8_1X24                        0x2024
+#define MEDIA_BUS_FMT_YUV8_1X24                        0x2025
+#define MEDIA_BUS_FMT_UYVY12_1X24              0x2020
+#define MEDIA_BUS_FMT_VYUY12_1X24              0x2021
+#define MEDIA_BUS_FMT_YUYV12_1X24              0x2022
+#define MEDIA_BUS_FMT_YVYU12_1X24              0x2023
+#define MEDIA_BUS_FMT_YUV10_1X30               0x2016
+#define MEDIA_BUS_FMT_AYUV8_1X32               0x2017
+
+/* Bayer - next is     0x3019 */
+#define MEDIA_BUS_FMT_SBGGR8_1X8               0x3001
+#define MEDIA_BUS_FMT_SGBRG8_1X8               0x3013
+#define MEDIA_BUS_FMT_SGRBG8_1X8               0x3002
+#define MEDIA_BUS_FMT_SRGGB8_1X8               0x3014
+#define MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8                0x3015
+#define MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8                0x3016
+#define MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8                0x3017
+#define MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8                0x3018
+#define MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8                0x300b
+#define MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8                0x300c
+#define MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8                0x3009
+#define MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8                0x300d
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE     0x3003
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE     0x3004
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_BE     0x3005
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_LE     0x3006
+#define MEDIA_BUS_FMT_SBGGR10_1X10             0x3007
+#define MEDIA_BUS_FMT_SGBRG10_1X10             0x300e
+#define MEDIA_BUS_FMT_SGRBG10_1X10             0x300a
+#define MEDIA_BUS_FMT_SRGGB10_1X10             0x300f
+#define MEDIA_BUS_FMT_SBGGR12_1X12             0x3008
+#define MEDIA_BUS_FMT_SGBRG12_1X12             0x3010
+#define MEDIA_BUS_FMT_SGRBG12_1X12             0x3011
+#define MEDIA_BUS_FMT_SRGGB12_1X12             0x3012
+
+/* JPEG compressed formats - next is   0x4002 */
+#define MEDIA_BUS_FMT_JPEG_1X8                 0x4001
+
+/* Vendor specific formats - next is   0x5002 */
+
+/* S5C73M3 sensor specific interleaved UYVY and JPEG */
+#define MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8                0x5001
+
+/* HSV - next is       0x6002 */
+#define MEDIA_BUS_FMT_AHSV8888_1X32            0x6001
+
+#endif /* __LINUX_MEDIA_BUS_FORMAT_H */
diff --git a/lib/libdss-include/include/linux/media.h b/lib/libdss-include/include/linux/media.h
new file mode 100644 (file)
index 0000000..83ef6a2
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Multimedia device API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_MEDIA_H
+#define __LINUX_MEDIA_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/version.h>
+
+#define MEDIA_API_VERSION      KERNEL_VERSION(0, 1, 0)
+
+struct media_device_info {
+       char driver[16];
+       char model[32];
+       char serial[40];
+       char bus_info[32];
+       __u32 media_version;
+       __u32 hw_revision;
+       __u32 driver_version;
+       __u32 reserved[31];
+};
+
+#define MEDIA_ENT_ID_FLAG_NEXT         (1 << 31)
+
+#define MEDIA_ENT_TYPE_SHIFT           16
+#define MEDIA_ENT_TYPE_MASK            0x00ff0000
+#define MEDIA_ENT_SUBTYPE_MASK         0x0000ffff
+
+#define MEDIA_ENT_T_DEVNODE            (1 << MEDIA_ENT_TYPE_SHIFT)
+#define MEDIA_ENT_T_DEVNODE_V4L                (MEDIA_ENT_T_DEVNODE + 1)
+#define MEDIA_ENT_T_DEVNODE_FB         (MEDIA_ENT_T_DEVNODE + 2)
+#define MEDIA_ENT_T_DEVNODE_ALSA       (MEDIA_ENT_T_DEVNODE + 3)
+#define MEDIA_ENT_T_DEVNODE_DVB_FE     (MEDIA_ENT_T_DEVNODE + 4)
+#define MEDIA_ENT_T_DEVNODE_DVB_DEMUX  (MEDIA_ENT_T_DEVNODE + 5)
+#define MEDIA_ENT_T_DEVNODE_DVB_DVR    (MEDIA_ENT_T_DEVNODE + 6)
+#define MEDIA_ENT_T_DEVNODE_DVB_CA     (MEDIA_ENT_T_DEVNODE + 7)
+#define MEDIA_ENT_T_DEVNODE_DVB_NET    (MEDIA_ENT_T_DEVNODE + 8)
+
+/* Legacy symbol. Use it to avoid userspace compilation breakages */
+#define MEDIA_ENT_T_DEVNODE_DVB                MEDIA_ENT_T_DEVNODE_DVB_FE
+
+#define MEDIA_ENT_T_V4L2_SUBDEV                (2 << MEDIA_ENT_TYPE_SHIFT)
+#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1)
+#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH  (MEDIA_ENT_T_V4L2_SUBDEV + 2)
+#define MEDIA_ENT_T_V4L2_SUBDEV_LENS   (MEDIA_ENT_T_V4L2_SUBDEV + 3)
+/* A converter of analogue video to its digital representation. */
+#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER        (MEDIA_ENT_T_V4L2_SUBDEV + 4)
+
+#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER  (MEDIA_ENT_T_V4L2_SUBDEV + 5)
+
+#define MEDIA_ENT_FL_DEFAULT           (1 << 0)
+
+struct media_entity_desc {
+       __u32 id;
+       char name[32];
+       __u32 type;
+       __u32 revision;
+       __u32 flags;
+       __u32 group_id;
+       __u16 pads;
+       __u16 links;
+
+       __u32 reserved[4];
+
+       union {
+               /* Node specifications */
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } dev;
+
+#if 1
+               /*
+                * TODO: this shouldn't have been added without
+                * actual drivers that use this. When the first real driver
+                * appears that sets this information, special attention
+                * should be given whether this information is 1) enough, and
+                * 2) can deal with udev rules that rename devices. The struct
+                * dev would not be sufficient for this since that does not
+                * contain the subdevice information. In addition, struct dev
+                * can only refer to a single device, and not to multiple (e.g.
+                * pcm and mixer devices).
+                *
+                * So for now mark this as a to do.
+                */
+               struct {
+                       __u32 card;
+                       __u32 device;
+                       __u32 subdevice;
+               } alsa;
+#endif
+
+#if 1
+               /*
+                * DEPRECATED: previous node specifications. Kept just to
+                * avoid breaking compilation, but media_entity_desc.dev
+                * should be used instead. In particular, alsa and dvb
+                * fields below are wrong: for all devnodes, there should
+                * be just major/minor inside the struct, as this is enough
+                * to represent any devnode, no matter what type.
+                */
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } v4l;
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } fb;
+               int dvb;
+#endif
+
+               /* Sub-device specifications */
+               /* Nothing needed yet */
+               __u8 raw[184];
+       };
+};
+
+#define MEDIA_PAD_FL_SINK              (1 << 0)
+#define MEDIA_PAD_FL_SOURCE            (1 << 1)
+#define MEDIA_PAD_FL_MUST_CONNECT      (1 << 2)
+
+struct media_pad_desc {
+       __u32 entity;           /* entity ID */
+       __u16 index;            /* pad index */
+       __u32 flags;            /* pad flags */
+       __u32 reserved[2];
+};
+
+#define MEDIA_LNK_FL_ENABLED           (1 << 0)
+#define MEDIA_LNK_FL_IMMUTABLE         (1 << 1)
+#define MEDIA_LNK_FL_DYNAMIC           (1 << 2)
+
+struct media_link_desc {
+       struct media_pad_desc source;
+       struct media_pad_desc sink;
+       __u32 flags;
+       __u32 reserved[2];
+};
+
+struct media_links_enum {
+       __u32 entity;
+       /* Should have enough room for pads elements */
+       struct media_pad_desc *pads;
+       /* Should have enough room for links elements */
+       struct media_link_desc *links;
+       __u32 reserved[4];
+};
+
+#define MEDIA_IOC_DEVICE_INFO          _IOWR('|', 0x00, struct media_device_info)
+#define MEDIA_IOC_ENUM_ENTITIES                _IOWR('|', 0x01, struct media_entity_desc)
+#define MEDIA_IOC_ENUM_LINKS           _IOWR('|', 0x02, struct media_links_enum)
+#define MEDIA_IOC_SETUP_LINK           _IOWR('|', 0x03, struct media_link_desc)
+
+#endif /* __LINUX_MEDIA_H */
diff --git a/lib/libdss-include/include/linux/mei.h b/lib/libdss-include/include/linux/mei.h
new file mode 100644 (file)
index 0000000..7c3b64f
--- /dev/null
@@ -0,0 +1,129 @@
+/******************************************************************************
+ * Intel Management Engine Interface (Intel MEI) Linux driver
+ * Intel MEI Interface Header
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
+ * USA
+ *
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * Contact Information:
+ *     Intel Corporation.
+ *     linux-mei@linux.intel.com
+ *     http://www.intel.com
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  * Neither the name Intel Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+#ifndef _LINUX_MEI_H
+#define _LINUX_MEI_H
+
+#include <linux/uuid.h>
+
+/*
+ * This IOCTL is used to associate the current file descriptor with a
+ * FW Client (given by UUID). This opens a communication channel
+ * between a host client and a FW client. From this point every read and write
+ * will communicate with the associated FW client.
+ * Only in close() (file_operation release()) the communication between
+ * the clients is disconnected
+ *
+ * The IOCTL argument is a struct with a union that contains
+ * the input parameter and the output parameter for this IOCTL.
+ *
+ * The input parameter is UUID of the FW Client.
+ * The output parameter is the properties of the FW client
+ * (FW protocol version and max message size).
+ *
+ */
+#define IOCTL_MEI_CONNECT_CLIENT \
+       _IOWR('H' , 0x01, struct mei_connect_client_data)
+
+/*
+ * Intel MEI client information struct
+ */
+struct mei_client {
+       __u32 max_msg_length;
+       __u8 protocol_version;
+       __u8 reserved[3];
+};
+
+/*
+ * IOCTL Connect Client Data structure
+ */
+struct mei_connect_client_data {
+       union {
+               uuid_le in_client_uuid;
+               struct mei_client out_client_properties;
+       };
+};
+
+/**
+ * DOC: set and unset event notification for a connected client
+ *
+ * The IOCTL argument is 1 for enabling event notification and 0 for
+ * disabling the service
+ * Return:  -EOPNOTSUPP if the devices doesn't support the feature
+ */
+#define IOCTL_MEI_NOTIFY_SET _IOW('H', 0x02, __u32)
+
+/**
+ * DOC: retrieve notification
+ *
+ * The IOCTL output argument is 1 if an event was is pending and 0 otherwise
+ * the ioctl has to be called in order to acknowledge pending event
+ *
+ * Return:  -EOPNOTSUPP if the devices doesn't support the feature
+ */
+#define IOCTL_MEI_NOTIFY_GET _IOR('H', 0x03, __u32)
+
+#endif /* _LINUX_MEI_H  */
diff --git a/lib/libdss-include/include/linux/membarrier.h b/lib/libdss-include/include/linux/membarrier.h
new file mode 100644 (file)
index 0000000..2af9dde
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _LINUX_MEMBARRIER_H
+#define _LINUX_MEMBARRIER_H
+
+/*
+ * linux/membarrier.h
+ *
+ * membarrier system call API
+ *
+ * Copyright (c) 2010, 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * enum membarrier_cmd - membarrier system call command
+ * @MEMBARRIER_CMD_QUERY:   Query the set of supported commands. It returns
+ *                          a bitmask of valid commands.
+ * @MEMBARRIER_CMD_SHARED:  Execute a memory barrier on all running threads.
+ *                          Upon return from system call, the caller thread
+ *                          is ensured that all running threads have passed
+ *                          through a state where all memory accesses to
+ *                          user-space addresses match program order between
+ *                          entry to and return from the system call
+ *                          (non-running threads are de facto in such a
+ *                          state). This covers threads from all processes
+ *                          running on the system. This command returns 0.
+ *
+ * Command to be passed to the membarrier system call. The commands need to
+ * be a single bit each, except for MEMBARRIER_CMD_QUERY which is assigned to
+ * the value 0.
+ */
+enum membarrier_cmd {
+       MEMBARRIER_CMD_QUERY = 0,
+       MEMBARRIER_CMD_SHARED = (1 << 0),
+};
+
+#endif /* _LINUX_MEMBARRIER_H */
diff --git a/lib/libdss-include/include/linux/memfd.h b/lib/libdss-include/include/linux/memfd.h
new file mode 100644 (file)
index 0000000..6632b15
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _LINUX_MEMFD_H
+#define _LINUX_MEMFD_H
+
+/* flags for memfd_create(2) (unsigned int) */
+#define MFD_CLOEXEC            0x0001U
+#define MFD_ALLOW_SEALING      0x0002U
+
+#endif /* _LINUX_MEMFD_H */
diff --git a/lib/libdss-include/include/linux/mempolicy.h b/lib/libdss-include/include/linux/mempolicy.h
new file mode 100644 (file)
index 0000000..de2651f
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * NUMA memory policies for Linux.
+ * Copyright 2003,2004 Andi Kleen SuSE Labs
+ */
+#ifndef _LINUX_MEMPOLICY_H
+#define _LINUX_MEMPOLICY_H
+
+#include <linux/errno.h>
+
+
+/*
+ * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are
+ * passed by the user to either set_mempolicy() or mbind() in an 'int' actual.
+ * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags.
+ */
+
+/* Policies */
+enum {
+       MPOL_DEFAULT,
+       MPOL_PREFERRED,
+       MPOL_BIND,
+       MPOL_INTERLEAVE,
+       MPOL_LOCAL,
+       MPOL_MAX,       /* always last member of enum */
+};
+
+enum mpol_rebind_step {
+       MPOL_REBIND_ONCE,       /* do rebind work at once(not by two step) */
+       MPOL_REBIND_STEP1,      /* first step(set all the newly nodes) */
+       MPOL_REBIND_STEP2,      /* second step(clean all the disallowed nodes)*/
+       MPOL_REBIND_NSTEP,
+};
+
+/* Flags for set_mempolicy */
+#define MPOL_F_STATIC_NODES    (1 << 15)
+#define MPOL_F_RELATIVE_NODES  (1 << 14)
+
+/*
+ * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to
+ * either set_mempolicy() or mbind().
+ */
+#define MPOL_MODE_FLAGS        (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES)
+
+/* Flags for get_mempolicy */
+#define MPOL_F_NODE    (1<<0)  /* return next IL mode instead of node mask */
+#define MPOL_F_ADDR    (1<<1)  /* look up vma using address */
+#define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */
+
+/* Flags for mbind */
+#define MPOL_MF_STRICT (1<<0)  /* Verify existing pages in the mapping */
+#define MPOL_MF_MOVE    (1<<1) /* Move pages owned by this process to conform
+                                  to policy */
+#define MPOL_MF_MOVE_ALL (1<<2)        /* Move every page to conform to policy */
+#define MPOL_MF_LAZY    (1<<3) /* Modifies '_MOVE:  lazy migrate on fault */
+#define MPOL_MF_INTERNAL (1<<4)        /* Internal flags start here */
+
+#define MPOL_MF_VALID  (MPOL_MF_STRICT   |     \
+                        MPOL_MF_MOVE     |     \
+                        MPOL_MF_MOVE_ALL)
+
+/*
+ * Internal flags that share the struct mempolicy flags word with
+ * "mode flags".  These flags are allocated from bit 0 up, as they
+ * are never OR'ed into the mode in mempolicy API arguments.
+ */
+#define MPOL_F_SHARED  (1 << 0)        /* identify shared policies */
+#define MPOL_F_LOCAL   (1 << 1)        /* preferred local allocation */
+#define MPOL_F_REBINDING (1 << 2)      /* identify policies in rebinding */
+#define MPOL_F_MOF     (1 << 3) /* this policy wants migrate on fault */
+#define MPOL_F_MORON   (1 << 4) /* Migrate On protnone Reference On Node */
+
+
+#endif /* _LINUX_MEMPOLICY_H */
diff --git a/lib/libdss-include/include/linux/meye.h b/lib/libdss-include/include/linux/meye.h
new file mode 100644 (file)
index 0000000..8ff50fe
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Motion Eye video4linux driver for Sony Vaio PictureBook
+ *
+ * Copyright (C) 2001-2003 Stelian Pop <stelian@popies.net>
+ *
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ *
+ * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
+ *
+ * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras.
+ *
+ * Some parts borrowed from various video4linux drivers, especially
+ * bttv-driver.c and zoran.c, see original files for credits.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _MEYE_H_
+#define _MEYE_H_
+
+/****************************************************************************/
+/* Private API for handling mjpeg capture / playback.                       */
+/****************************************************************************/
+
+struct meye_params {
+       unsigned char subsample;
+       unsigned char quality;
+       unsigned char sharpness;
+       unsigned char agc;
+       unsigned char picture;
+       unsigned char framerate;
+};
+
+/* query the extended parameters */
+#define MEYEIOC_G_PARAMS       _IOR ('v', BASE_VIDIOC_PRIVATE+0, struct meye_params)
+/* set the extended parameters */
+#define MEYEIOC_S_PARAMS       _IOW ('v', BASE_VIDIOC_PRIVATE+1, struct meye_params)
+/* queue a buffer for mjpeg capture */
+#define MEYEIOC_QBUF_CAPT      _IOW ('v', BASE_VIDIOC_PRIVATE+2, int)
+/* sync a previously queued mjpeg buffer */
+#define MEYEIOC_SYNC           _IOWR('v', BASE_VIDIOC_PRIVATE+3, int)
+/* get a still uncompressed snapshot */
+#define MEYEIOC_STILLCAPT      _IO  ('v', BASE_VIDIOC_PRIVATE+4)
+/* get a jpeg compressed snapshot */
+#define MEYEIOC_STILLJCAPT     _IOR ('v', BASE_VIDIOC_PRIVATE+5, int)
+
+/* V4L2 private controls */
+#define V4L2_CID_MEYE_AGC              (V4L2_CID_USER_MEYE_BASE + 0)
+#define V4L2_CID_MEYE_PICTURE          (V4L2_CID_USER_MEYE_BASE + 1)
+#define V4L2_CID_MEYE_FRAMERATE                (V4L2_CID_USER_MEYE_BASE + 2)
+
+#endif
diff --git a/lib/libdss-include/include/linux/mic_common.h b/lib/libdss-include/include/linux/mic_common.h
new file mode 100644 (file)
index 0000000..667263a
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * Copyright(c) 2013 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * The full GNU General Public License is included in this distribution in
+ * the file called "COPYING".
+ *
+ * Intel MIC driver.
+ *
+ */
+#ifndef __MIC_COMMON_H_
+#define __MIC_COMMON_H_
+
+#include <linux/virtio_ring.h>
+
+#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1))
+
+/**
+ * struct mic_device_desc: Virtio device information shared between the
+ * virtio driver and userspace backend
+ *
+ * @type: Device type: console/network/disk etc.  Type 0/-1 terminates.
+ * @num_vq: Number of virtqueues.
+ * @feature_len: Number of bytes of feature bits.  Multiply by 2: one for
+   host features and one for guest acknowledgements.
+ * @config_len: Number of bytes of the config array after virtqueues.
+ * @status: A status byte, written by the Guest.
+ * @config: Start of the following variable length config.
+ */
+struct mic_device_desc {
+       __s8 type;
+       __u8 num_vq;
+       __u8 feature_len;
+       __u8 config_len;
+       __u8 status;
+       __le64 config[0];
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_device_ctrl: Per virtio device information in the device page
+ * used internally by the host and card side drivers.
+ *
+ * @vdev: Used for storing MIC vdev information by the guest.
+ * @config_change: Set to 1 by host when a config change is requested.
+ * @vdev_reset: Set to 1 by guest to indicate virtio device has been reset.
+ * @guest_ack: Set to 1 by guest to ack a command.
+ * @host_ack: Set to 1 by host to ack a command.
+ * @used_address_updated: Set to 1 by guest when the used address should be
+ * updated.
+ * @c2h_vdev_db: The doorbell number to be used by guest. Set by host.
+ * @h2c_vdev_db: The doorbell number to be used by host. Set by guest.
+ */
+struct mic_device_ctrl {
+       __le64 vdev;
+       __u8 config_change;
+       __u8 vdev_reset;
+       __u8 guest_ack;
+       __u8 host_ack;
+       __u8 used_address_updated;
+       __s8 c2h_vdev_db;
+       __s8 h2c_vdev_db;
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_bootparam: Virtio device independent information in device page
+ *
+ * @magic: A magic value used by the card to ensure it can see the host
+ * @h2c_config_db: Host to Card Virtio config doorbell set by card
+ * @node_id: Unique id of the node
+ * @h2c_scif_db - Host to card SCIF doorbell set by card
+ * @c2h_scif_db - Card to host SCIF doorbell set by host
+ * @scif_host_dma_addr - SCIF host queue pair DMA address
+ * @scif_card_dma_addr - SCIF card queue pair DMA address
+ */
+struct mic_bootparam {
+       __le32 magic;
+       __s8 h2c_config_db;
+       __u8 node_id;
+       __u8 h2c_scif_db;
+       __u8 c2h_scif_db;
+       __u64 scif_host_dma_addr;
+       __u64 scif_card_dma_addr;
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_device_page: High level representation of the device page
+ *
+ * @bootparam: The bootparam structure is used for sharing information and
+ * status updates between MIC host and card drivers.
+ * @desc: Array of MIC virtio device descriptors.
+ */
+struct mic_device_page {
+       struct mic_bootparam bootparam;
+       struct mic_device_desc desc[0];
+};
+/**
+ * struct mic_vqconfig: This is how we expect the device configuration field
+ * for a virtqueue to be laid out in config space.
+ *
+ * @address: Guest/MIC physical address of the virtio ring
+ * (avail and desc rings)
+ * @used_address: Guest/MIC physical address of the used ring
+ * @num: The number of entries in the virtio_ring
+ */
+struct mic_vqconfig {
+       __le64 address;
+       __le64 used_address;
+       __le16 num;
+} __attribute__ ((aligned(8)));
+
+/*
+ * The alignment to use between consumer and producer parts of vring.
+ * This is pagesize for historical reasons.
+ */
+#define MIC_VIRTIO_RING_ALIGN          4096
+
+#define MIC_MAX_VRINGS                 4
+#define MIC_VRING_ENTRIES              128
+
+/*
+ * Max vring entries (power of 2) to ensure desc and avail rings
+ * fit in a single page
+ */
+#define MIC_MAX_VRING_ENTRIES          128
+
+/**
+ * Max size of the desc block in bytes: includes:
+ *     - struct mic_device_desc
+ *     - struct mic_vqconfig (num_vq of these)
+ *     - host and guest features
+ *     - virtio device config space
+ */
+#define MIC_MAX_DESC_BLK_SIZE          256
+
+/**
+ * struct _mic_vring_info - Host vring info exposed to userspace backend
+ * for the avail index and magic for the card.
+ *
+ * @avail_idx: host avail idx
+ * @magic: A magic debug cookie.
+ */
+struct _mic_vring_info {
+       __u16 avail_idx;
+       __le32 magic;
+};
+
+/**
+ * struct mic_vring - Vring information.
+ *
+ * @vr: The virtio ring.
+ * @info: Host vring information exposed to the userspace backend for the
+ * avail index and magic for the card.
+ * @va: The va for the buffer allocated for vr and info.
+ * @len: The length of the buffer required for allocating vr and info.
+ */
+struct mic_vring {
+       struct vring vr;
+       struct _mic_vring_info *info;
+       void *va;
+       int len;
+};
+
+#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8)
+
+#ifndef INTEL_MIC_CARD
+static __inline__ unsigned mic_desc_size(const struct mic_device_desc *desc)
+{
+       return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig)
+               + desc->feature_len * 2 + desc->config_len;
+}
+
+static __inline__ struct mic_vqconfig *
+mic_vq_config(const struct mic_device_desc *desc)
+{
+       return (struct mic_vqconfig *)(desc + 1);
+}
+
+static __inline__ __u8 *mic_vq_features(const struct mic_device_desc *desc)
+{
+       return (__u8 *)(mic_vq_config(desc) + desc->num_vq);
+}
+
+static __inline__ __u8 *mic_vq_configspace(const struct mic_device_desc *desc)
+{
+       return mic_vq_features(desc) + desc->feature_len * 2;
+}
+static __inline__ unsigned mic_total_desc_size(struct mic_device_desc *desc)
+{
+       return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
+}
+#endif
+
+/* Device page size */
+#define MIC_DP_SIZE 4096
+
+#define MIC_MAGIC 0xc0ffee00
+
+/**
+ * enum mic_states - MIC states.
+ */
+enum mic_states {
+       MIC_READY = 0,
+       MIC_BOOTING,
+       MIC_ONLINE,
+       MIC_SHUTTING_DOWN,
+       MIC_RESETTING,
+       MIC_RESET_FAILED,
+       MIC_LAST
+};
+
+/**
+ * enum mic_status - MIC status reported by card after
+ * a host or card initiated shutdown or a card crash.
+ */
+enum mic_status {
+       MIC_NOP = 0,
+       MIC_CRASHED,
+       MIC_HALTED,
+       MIC_POWER_OFF,
+       MIC_RESTART,
+       MIC_STATUS_LAST
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/mic_ioctl.h b/lib/libdss-include/include/linux/mic_ioctl.h
new file mode 100644 (file)
index 0000000..a0d7ce6
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * Copyright(c) 2013 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * The full GNU General Public License is included in this distribution in
+ * the file called "COPYING".
+ *
+ * Intel MIC Host driver.
+ *
+ */
+#ifndef _MIC_IOCTL_H_
+#define _MIC_IOCTL_H_
+
+#include <linux/types.h>
+
+/*
+ * mic_copy - MIC virtio descriptor copy.
+ *
+ * @iov: An array of IOVEC structures containing user space buffers.
+ * @iovcnt: Number of IOVEC structures in iov.
+ * @vr_idx: The vring index.
+ * @update_used: A non zero value results in used index being updated.
+ * @out_len: The aggregate of the total length written to or read from
+ *     the virtio device.
+ */
+struct mic_copy_desc {
+       struct iovec *iov;
+       __u32 iovcnt;
+       __u8 vr_idx;
+       __u8 update_used;
+       __u32 out_len;
+};
+
+/*
+ * Add a new virtio device
+ * The (struct mic_device_desc *) pointer points to a device page entry
+ *     for the virtio device consisting of:
+ *     - struct mic_device_desc
+ *     - struct mic_vqconfig (num_vq of these)
+ *     - host and guest features
+ *     - virtio device config space
+ * The total size referenced by the pointer should equal the size returned
+ * by desc_size() in mic_common.h
+ */
+#define MIC_VIRTIO_ADD_DEVICE _IOWR('s', 1, struct mic_device_desc *)
+
+/*
+ * Copy the number of entries in the iovec and update the used index
+ * if requested by the user.
+ */
+#define MIC_VIRTIO_COPY_DESC   _IOWR('s', 2, struct mic_copy_desc *)
+
+/*
+ * Notify virtio device of a config change
+ * The (__u8 *) pointer points to config space values for the device
+ * as they should be written into the device page. The total size
+ * referenced by the pointer should equal the config_len field of struct
+ * mic_device_desc.
+ */
+#define MIC_VIRTIO_CONFIG_CHANGE _IOWR('s', 5, __u8 *)
+
+#endif
diff --git a/lib/libdss-include/include/linux/mii.h b/lib/libdss-include/include/linux/mii.h
new file mode 100644 (file)
index 0000000..c75eea1
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * linux/mii.h: definitions for MII-compatible transceivers
+ * Originally drivers/net/sunhme.h.
+ *
+ * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com)
+ */
+
+#ifndef __LINUX_MII_H__
+#define __LINUX_MII_H__
+
+#include <linux/types.h>
+#include <linux/ethtool.h>
+
+/* Generic MII registers. */
+#define MII_BMCR               0x00    /* Basic mode control register */
+#define MII_BMSR               0x01    /* Basic mode status register  */
+#define MII_PHYSID1            0x02    /* PHYS ID 1                   */
+#define MII_PHYSID2            0x03    /* PHYS ID 2                   */
+#define MII_ADVERTISE          0x04    /* Advertisement control reg   */
+#define MII_LPA                        0x05    /* Link partner ability reg    */
+#define MII_EXPANSION          0x06    /* Expansion register          */
+#define MII_CTRL1000           0x09    /* 1000BASE-T control          */
+#define MII_STAT1000           0x0a    /* 1000BASE-T status           */
+#define        MII_MMD_CTRL            0x0d    /* MMD Access Control Register */
+#define        MII_MMD_DATA            0x0e    /* MMD Access Data Register */
+#define MII_ESTATUS            0x0f    /* Extended Status             */
+#define MII_DCOUNTER           0x12    /* Disconnect counter          */
+#define MII_FCSCOUNTER         0x13    /* False carrier counter       */
+#define MII_NWAYTEST           0x14    /* N-way auto-neg test reg     */
+#define MII_RERRCOUNTER                0x15    /* Receive error counter       */
+#define MII_SREVISION          0x16    /* Silicon revision            */
+#define MII_RESV1              0x17    /* Reserved...                 */
+#define MII_LBRERROR           0x18    /* Lpback, rx, bypass error    */
+#define MII_PHYADDR            0x19    /* PHY address                 */
+#define MII_RESV2              0x1a    /* Reserved...                 */
+#define MII_TPISTATUS          0x1b    /* TPI status for 10mbps       */
+#define MII_NCONFIG            0x1c    /* Network interface config    */
+
+/* Basic mode control register. */
+#define BMCR_RESV              0x003f  /* Unused...                   */
+#define BMCR_SPEED1000         0x0040  /* MSB of Speed (1000)         */
+#define BMCR_CTST              0x0080  /* Collision test              */
+#define BMCR_FULLDPLX          0x0100  /* Full duplex                 */
+#define BMCR_ANRESTART         0x0200  /* Auto negotiation restart    */
+#define BMCR_ISOLATE           0x0400  /* Isolate data paths from MII */
+#define BMCR_PDOWN             0x0800  /* Enable low power state      */
+#define BMCR_ANENABLE          0x1000  /* Enable auto negotiation     */
+#define BMCR_SPEED100          0x2000  /* Select 100Mbps              */
+#define BMCR_LOOPBACK          0x4000  /* TXD loopback bits           */
+#define BMCR_RESET             0x8000  /* Reset to default state      */
+
+/* Basic mode status register. */
+#define BMSR_ERCAP             0x0001  /* Ext-reg capability          */
+#define BMSR_JCD               0x0002  /* Jabber detected             */
+#define BMSR_LSTATUS           0x0004  /* Link status                 */
+#define BMSR_ANEGCAPABLE       0x0008  /* Able to do auto-negotiation */
+#define BMSR_RFAULT            0x0010  /* Remote fault detected       */
+#define BMSR_ANEGCOMPLETE      0x0020  /* Auto-negotiation complete   */
+#define BMSR_RESV              0x00c0  /* Unused...                   */
+#define BMSR_ESTATEN           0x0100  /* Extended Status in R15      */
+#define BMSR_100HALF2          0x0200  /* Can do 100BASE-T2 HDX       */
+#define BMSR_100FULL2          0x0400  /* Can do 100BASE-T2 FDX       */
+#define BMSR_10HALF            0x0800  /* Can do 10mbps, half-duplex  */
+#define BMSR_10FULL            0x1000  /* Can do 10mbps, full-duplex  */
+#define BMSR_100HALF           0x2000  /* Can do 100mbps, half-duplex */
+#define BMSR_100FULL           0x4000  /* Can do 100mbps, full-duplex */
+#define BMSR_100BASE4          0x8000  /* Can do 100mbps, 4k packets  */
+
+/* Advertisement control register. */
+#define ADVERTISE_SLCT         0x001f  /* Selector bits               */
+#define ADVERTISE_CSMA         0x0001  /* Only selector supported     */
+#define ADVERTISE_10HALF       0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_1000XFULL    0x0020  /* Try for 1000BASE-X full-duplex */
+#define ADVERTISE_10FULL       0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_1000XHALF    0x0040  /* Try for 1000BASE-X half-duplex */
+#define ADVERTISE_100HALF      0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_1000XPAUSE   0x0080  /* Try for 1000BASE-X pause    */
+#define ADVERTISE_100FULL      0x0100  /* Try for 100mbps full-duplex */
+#define ADVERTISE_1000XPSE_ASYM        0x0100  /* Try for 1000BASE-X asym pause */
+#define ADVERTISE_100BASE4     0x0200  /* Try for 100mbps 4k packets  */
+#define ADVERTISE_PAUSE_CAP    0x0400  /* Try for pause               */
+#define ADVERTISE_PAUSE_ASYM   0x0800  /* Try for asymetric pause     */
+#define ADVERTISE_RESV         0x1000  /* Unused...                   */
+#define ADVERTISE_RFAULT       0x2000  /* Say we can detect faults    */
+#define ADVERTISE_LPACK                0x4000  /* Ack link partners response  */
+#define ADVERTISE_NPAGE                0x8000  /* Next page bit               */
+
+#define ADVERTISE_FULL         (ADVERTISE_100FULL | ADVERTISE_10FULL | \
+                                 ADVERTISE_CSMA)
+#define ADVERTISE_ALL          (ADVERTISE_10HALF | ADVERTISE_10FULL | \
+                                 ADVERTISE_100HALF | ADVERTISE_100FULL)
+
+/* Link partner ability register. */
+#define LPA_SLCT               0x001f  /* Same as advertise selector  */
+#define LPA_10HALF             0x0020  /* Can do 10mbps half-duplex   */
+#define LPA_1000XFULL          0x0020  /* Can do 1000BASE-X full-duplex */
+#define LPA_10FULL             0x0040  /* Can do 10mbps full-duplex   */
+#define LPA_1000XHALF          0x0040  /* Can do 1000BASE-X half-duplex */
+#define LPA_100HALF            0x0080  /* Can do 100mbps half-duplex  */
+#define LPA_1000XPAUSE         0x0080  /* Can do 1000BASE-X pause     */
+#define LPA_100FULL            0x0100  /* Can do 100mbps full-duplex  */
+#define LPA_1000XPAUSE_ASYM    0x0100  /* Can do 1000BASE-X pause asym*/
+#define LPA_100BASE4           0x0200  /* Can do 100mbps 4k packets   */
+#define LPA_PAUSE_CAP          0x0400  /* Can pause                   */
+#define LPA_PAUSE_ASYM         0x0800  /* Can pause asymetrically     */
+#define LPA_RESV               0x1000  /* Unused...                   */
+#define LPA_RFAULT             0x2000  /* Link partner faulted        */
+#define LPA_LPACK              0x4000  /* Link partner acked us       */
+#define LPA_NPAGE              0x8000  /* Next page bit               */
+
+#define LPA_DUPLEX             (LPA_10FULL | LPA_100FULL)
+#define LPA_100                        (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
+
+/* Expansion register for auto-negotiation. */
+#define EXPANSION_NWAY         0x0001  /* Can do N-way auto-nego      */
+#define EXPANSION_LCWP         0x0002  /* Got new RX page code word   */
+#define EXPANSION_ENABLENPAGE  0x0004  /* This enables npage words    */
+#define EXPANSION_NPCAPABLE    0x0008  /* Link partner supports npage */
+#define EXPANSION_MFAULTS      0x0010  /* Multiple faults detected    */
+#define EXPANSION_RESV         0xffe0  /* Unused...                   */
+
+#define ESTATUS_1000_TFULL     0x2000  /* Can do 1000BT Full          */
+#define ESTATUS_1000_THALF     0x1000  /* Can do 1000BT Half          */
+
+/* N-way test register. */
+#define NWAYTEST_RESV1         0x00ff  /* Unused...                   */
+#define NWAYTEST_LOOPBACK      0x0100  /* Enable loopback for N-way   */
+#define NWAYTEST_RESV2         0xfe00  /* Unused...                   */
+
+/* 1000BASE-T Control register */
+#define ADVERTISE_1000FULL     0x0200  /* Advertise 1000BASE-T full duplex */
+#define ADVERTISE_1000HALF     0x0100  /* Advertise 1000BASE-T half duplex */
+#define CTL1000_AS_MASTER      0x0800
+#define CTL1000_ENABLE_MASTER  0x1000
+
+/* 1000BASE-T Status register */
+#define LPA_1000LOCALRXOK      0x2000  /* Link partner local receiver status */
+#define LPA_1000REMRXOK                0x1000  /* Link partner remote receiver status */
+#define LPA_1000FULL           0x0800  /* Link partner 1000BASE-T full duplex */
+#define LPA_1000HALF           0x0400  /* Link partner 1000BASE-T half duplex */
+
+/* Flow control flags */
+#define FLOW_CTRL_TX           0x01
+#define FLOW_CTRL_RX           0x02
+
+/* MMD Access Control register fields */
+#define MII_MMD_CTRL_DEVAD_MASK        0x1f    /* Mask MMD DEVAD*/
+#define MII_MMD_CTRL_ADDR      0x0000  /* Address */
+#define MII_MMD_CTRL_NOINCR    0x4000  /* no post increment */
+#define MII_MMD_CTRL_INCR_RDWT 0x8000  /* post increment on reads & writes */
+#define MII_MMD_CTRL_INCR_ON_WT        0xC000  /* post increment on writes only */
+
+/* This structure is used in all SIOCxMIIxxx ioctl calls */
+struct mii_ioctl_data {
+       __u16           phy_id;
+       __u16           reg_num;
+       __u16           val_in;
+       __u16           val_out;
+};
+
+#endif /* __LINUX_MII_H__ */
diff --git a/lib/libdss-include/include/linux/minix_fs.h b/lib/libdss-include/include/linux/minix_fs.h
new file mode 100644 (file)
index 0000000..13fe09e
--- /dev/null
@@ -0,0 +1,106 @@
+#ifndef _LINUX_MINIX_FS_H
+#define _LINUX_MINIX_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * The minix filesystem constants/structures
+ */
+
+/*
+ * Thanks to Kees J Bot for sending me the definitions of the new
+ * minix filesystem (aka V2) with bigger inodes and 32-bit block
+ * pointers.
+ */
+
+#define MINIX_ROOT_INO 1
+
+/* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
+#define MINIX_LINK_MAX 250
+#define MINIX2_LINK_MAX        65530
+
+#define MINIX_I_MAP_SLOTS      8
+#define MINIX_Z_MAP_SLOTS      64
+#define MINIX_VALID_FS         0x0001          /* Clean fs. */
+#define MINIX_ERROR_FS         0x0002          /* fs has errors. */
+
+#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
+
+/*
+ * This is the original minix inode layout on disk.
+ * Note the 8-bit gid and atime and ctime.
+ */
+struct minix_inode {
+       __u16 i_mode;
+       __u16 i_uid;
+       __u32 i_size;
+       __u32 i_time;
+       __u8  i_gid;
+       __u8  i_nlinks;
+       __u16 i_zone[9];
+};
+
+/*
+ * The new minix inode has all the time entries, as well as
+ * long block numbers and a third indirect block (7+1+1+1
+ * instead of 7+1+1). Also, some previously 8-bit values are
+ * now 16-bit. The inode is now 64 bytes instead of 32.
+ */
+struct minix2_inode {
+       __u16 i_mode;
+       __u16 i_nlinks;
+       __u16 i_uid;
+       __u16 i_gid;
+       __u32 i_size;
+       __u32 i_atime;
+       __u32 i_mtime;
+       __u32 i_ctime;
+       __u32 i_zone[10];
+};
+
+/*
+ * minix super-block data on disk
+ */
+struct minix_super_block {
+       __u16 s_ninodes;
+       __u16 s_nzones;
+       __u16 s_imap_blocks;
+       __u16 s_zmap_blocks;
+       __u16 s_firstdatazone;
+       __u16 s_log_zone_size;
+       __u32 s_max_size;
+       __u16 s_magic;
+       __u16 s_state;
+       __u32 s_zones;
+};
+
+/*
+ * V3 minix super-block data on disk
+ */
+struct minix3_super_block {
+       __u32 s_ninodes;
+       __u16 s_pad0;
+       __u16 s_imap_blocks;
+       __u16 s_zmap_blocks;
+       __u16 s_firstdatazone;
+       __u16 s_log_zone_size;
+       __u16 s_pad1;
+       __u32 s_max_size;
+       __u32 s_zones;
+       __u16 s_magic;
+       __u16 s_pad2;
+       __u16 s_blocksize;
+       __u8  s_disk_version;
+};
+
+struct minix_dir_entry {
+       __u16 inode;
+       char name[0];
+};
+
+struct minix3_dir_entry {
+       __u32 inode;
+       char name[0];
+};
+#endif
diff --git a/lib/libdss-include/include/linux/mman.h b/lib/libdss-include/include/linux/mman.h
new file mode 100644 (file)
index 0000000..36b3004
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_MMAN_H
+#define _LINUX_MMAN_H
+
+#include <asm/mman.h>
+
+#define MREMAP_MAYMOVE 1
+#define MREMAP_FIXED   2
+
+#define OVERCOMMIT_GUESS               0
+#define OVERCOMMIT_ALWAYS              1
+#define OVERCOMMIT_NEVER               2
+
+#endif /* _LINUX_MMAN_H */
diff --git a/lib/libdss-include/include/linux/mmc/ioctl.h b/lib/libdss-include/include/linux/mmc/ioctl.h
new file mode 100644 (file)
index 0000000..7e385b8
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef LINUX_MMC_IOCTL_H
+#define LINUX_MMC_IOCTL_H
+
+#include <linux/types.h>
+
+struct mmc_ioc_cmd {
+       /* Implies direction of data.  true = write, false = read */
+       int write_flag;
+
+       /* Application-specific command.  true = precede with CMD55 */
+       int is_acmd;
+
+       __u32 opcode;
+       __u32 arg;
+       __u32 response[4];  /* CMD response */
+       unsigned int flags;
+       unsigned int blksz;
+       unsigned int blocks;
+
+       /*
+        * Sleep at least postsleep_min_us useconds, and at most
+        * postsleep_max_us useconds *after* issuing command.  Needed for
+        * some read commands for which cards have no other way of indicating
+        * they're ready for the next command (i.e. there is no equivalent of
+        * a "busy" indicator for read operations).
+        */
+       unsigned int postsleep_min_us;
+       unsigned int postsleep_max_us;
+
+       /*
+        * Override driver-computed timeouts.  Note the difference in units!
+        */
+       unsigned int data_timeout_ns;
+       unsigned int cmd_timeout_ms;
+
+       /*
+        * For 64-bit machines, the next member, ``__u64 data_ptr``, wants to
+        * be 8-byte aligned.  Make sure this struct is the same size when
+        * built for 32-bit.
+        */
+       __u32 __pad;
+
+       /* DAT buffer */
+       __u64 data_ptr;
+};
+#define mmc_ioc_cmd_set_data(ic, ptr) ic.data_ptr = (__u64)(unsigned long) ptr
+
+/**
+ * struct mmc_ioc_multi_cmd - multi command information
+ * @num_of_cmds: Number of commands to send. Must be equal to or less than
+ *     MMC_IOC_MAX_CMDS.
+ * @cmds: Array of commands with length equal to 'num_of_cmds'
+ */
+struct mmc_ioc_multi_cmd {
+       __u64 num_of_cmds;
+       struct mmc_ioc_cmd cmds[0];
+};
+
+#define MMC_IOC_CMD _IOWR(MMC_BLOCK_MAJOR, 0, struct mmc_ioc_cmd)
+/*
+ * MMC_IOC_MULTI_CMD: Used to send an array of MMC commands described by
+ *     the structure mmc_ioc_multi_cmd. The MMC driver will issue all
+ *     commands in array in sequence to card.
+ */
+#define MMC_IOC_MULTI_CMD _IOWR(MMC_BLOCK_MAJOR, 1, struct mmc_ioc_multi_cmd)
+/*
+ * Since this ioctl is only meant to enhance (and not replace) normal access
+ * to the mmc bus device, an upper data transfer limit of MMC_IOC_MAX_BYTES
+ * is enforced per ioctl call.  For larger data transfers, use the normal
+ * block device operations.
+ */
+#define MMC_IOC_MAX_BYTES  (512L * 256)
+#define MMC_IOC_MAX_CMDS    255
+#endif /* LINUX_MMC_IOCTL_H */
diff --git a/lib/libdss-include/include/linux/mmtimer.h b/lib/libdss-include/include/linux/mmtimer.h
new file mode 100644 (file)
index 0000000..884cabf
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Intel Multimedia Timer device interface
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (c) 2001-2004 Silicon Graphics, Inc.  All rights reserved.
+ *
+ * This file should define an interface compatible with the IA-PC Multimedia
+ * Timers Draft Specification (rev. 0.97) from Intel.  Note that some
+ * hardware may not be able to safely export its registers to userspace,
+ * so the ioctl interface should support all necessary functionality.
+ *
+ * 11/01/01 - jbarnes - initial revision
+ * 9/10/04 - Christoph Lameter - remove interrupt support
+ * 9/17/04 - jbarnes - remove test program, move some #defines to the driver
+ */
+
+#ifndef _LINUX_MMTIMER_H
+#define _LINUX_MMTIMER_H
+
+/*
+ * Breakdown of the ioctl's available.  An 'optional' next to the command
+ * indicates that supporting this command is optional, while 'required'
+ * commands must be implemented if conformance is desired.
+ *
+ * MMTIMER_GETOFFSET - optional
+ *   Should return the offset (relative to the start of the page where the
+ *   registers are mapped) for the counter in question.
+ *
+ * MMTIMER_GETRES - required
+ *   The resolution of the clock in femto (10^-15) seconds
+ *
+ * MMTIMER_GETFREQ - required
+ *   Frequency of the clock in Hz
+ *
+ * MMTIMER_GETBITS - required
+ *   Number of bits in the clock's counter
+ *
+ * MMTIMER_MMAPAVAIL - required
+ *   Returns nonzero if the registers can be mmap'd into userspace, 0 otherwise
+ *
+ * MMTIMER_GETCOUNTER - required
+ *   Gets the current value in the counter
+ */
+#define MMTIMER_IOCTL_BASE 'm'
+
+#define MMTIMER_GETOFFSET _IO(MMTIMER_IOCTL_BASE, 0)
+#define MMTIMER_GETRES _IOR(MMTIMER_IOCTL_BASE, 1, unsigned long)
+#define MMTIMER_GETFREQ _IOR(MMTIMER_IOCTL_BASE, 2, unsigned long)
+#define MMTIMER_GETBITS _IO(MMTIMER_IOCTL_BASE, 4)
+#define MMTIMER_MMAPAVAIL _IO(MMTIMER_IOCTL_BASE, 6)
+#define MMTIMER_GETCOUNTER _IOR(MMTIMER_IOCTL_BASE, 9, unsigned long)
+
+#endif /* _LINUX_MMTIMER_H */
diff --git a/lib/libdss-include/include/linux/mpls.h b/lib/libdss-include/include/linux/mpls.h
new file mode 100644 (file)
index 0000000..a14b54b
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _MPLS_H
+#define _MPLS_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/* Reference: RFC 5462, RFC 3032
+ *
+ *  0                   1                   2                   3
+ *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                Label                  | TC  |S|       TTL     |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *     Label:  Label Value, 20 bits
+ *     TC:     Traffic Class field, 3 bits
+ *     S:      Bottom of Stack, 1 bit
+ *     TTL:    Time to Live, 8 bits
+ */
+
+struct mpls_label {
+       __be32 entry;
+};
+
+#define MPLS_LS_LABEL_MASK      0xFFFFF000
+#define MPLS_LS_LABEL_SHIFT     12
+#define MPLS_LS_TC_MASK         0x00000E00
+#define MPLS_LS_TC_SHIFT        9
+#define MPLS_LS_S_MASK          0x00000100
+#define MPLS_LS_S_SHIFT         8
+#define MPLS_LS_TTL_MASK        0x000000FF
+#define MPLS_LS_TTL_SHIFT       0
+
+/* Reserved labels */
+#define MPLS_LABEL_IPV4NULL            0 /* RFC3032 */
+#define MPLS_LABEL_RTALERT             1 /* RFC3032 */
+#define MPLS_LABEL_IPV6NULL            2 /* RFC3032 */
+#define MPLS_LABEL_IMPLNULL            3 /* RFC3032 */
+#define MPLS_LABEL_ENTROPY             7 /* RFC6790 */
+#define MPLS_LABEL_GAL                 13 /* RFC5586 */
+#define MPLS_LABEL_OAMALERT            14 /* RFC3429 */
+#define MPLS_LABEL_EXTENSION           15 /* RFC7274 */
+
+#define MPLS_LABEL_FIRST_UNRESERVED    16 /* RFC3032 */
+
+#endif /* _MPLS_H */
diff --git a/lib/libdss-include/include/linux/mpls_iptunnel.h b/lib/libdss-include/include/linux/mpls_iptunnel.h
new file mode 100644 (file)
index 0000000..4132c3c
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *     mpls tunnel api
+ *
+ *     Authors:
+ *             Roopa Prabhu <roopa@cumulusnetworks.com>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_MPLS_IPTUNNEL_H
+#define _LINUX_MPLS_IPTUNNEL_H
+
+/* MPLS tunnel attributes
+ * [RTA_ENCAP] = {
+ *     [MPLS_IPTUNNEL_DST]
+ * }
+ */
+enum {
+       MPLS_IPTUNNEL_UNSPEC,
+       MPLS_IPTUNNEL_DST,
+       __MPLS_IPTUNNEL_MAX,
+};
+#define MPLS_IPTUNNEL_MAX (__MPLS_IPTUNNEL_MAX - 1)
+
+#endif /* _LINUX_MPLS_IPTUNNEL_H */
diff --git a/lib/libdss-include/include/linux/mqueue.h b/lib/libdss-include/include/linux/mqueue.h
new file mode 100644 (file)
index 0000000..d0a2b8e
--- /dev/null
@@ -0,0 +1,53 @@
+/* Copyright (C) 2003 Krzysztof Benedyczak & Michal Wronski
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   It is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this software; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _LINUX_MQUEUE_H
+#define _LINUX_MQUEUE_H
+
+#define MQ_PRIO_MAX    32768
+/* per-uid limit of kernel memory used by mqueue, in bytes */
+#define MQ_BYTES_MAX   819200
+
+struct mq_attr {
+       __kernel_long_t mq_flags;       /* message queue flags                  */
+       __kernel_long_t mq_maxmsg;      /* maximum number of messages           */
+       __kernel_long_t mq_msgsize;     /* maximum message size                 */
+       __kernel_long_t mq_curmsgs;     /* number of messages currently queued  */
+       __kernel_long_t __reserved[4];  /* ignored for input, zeroed for output */
+};
+
+/*
+ * SIGEV_THREAD implementation:
+ * SIGEV_THREAD must be implemented in user space. If SIGEV_THREAD is passed
+ * to mq_notify, then
+ * - sigev_signo must be the file descriptor of an AF_NETLINK socket. It's not
+ *   necessary that the socket is bound.
+ * - sigev_value.sival_ptr must point to a cookie that is NOTIFY_COOKIE_LEN
+ *   bytes long.
+ * If the notification is triggered, then the cookie is sent to the netlink
+ * socket. The last byte of the cookie is replaced with the NOTIFY_?? codes:
+ * NOTIFY_WOKENUP if the notification got triggered, NOTIFY_REMOVED if it was
+ * removed, either due to a close() on the message queue fd or due to a
+ * mq_notify() that removed the notification.
+ */
+#define NOTIFY_NONE    0
+#define NOTIFY_WOKENUP 1
+#define NOTIFY_REMOVED 2
+
+#define NOTIFY_COOKIE_LEN      32
+
+#endif
diff --git a/lib/libdss-include/include/linux/mroute.h b/lib/libdss-include/include/linux/mroute.h
new file mode 100644 (file)
index 0000000..ef12aa4
--- /dev/null
@@ -0,0 +1,146 @@
+#ifndef __LINUX_MROUTE_H
+#define __LINUX_MROUTE_H
+
+#include <linux/sockios.h>
+#include <linux/types.h>
+
+/*
+ *     Based on the MROUTING 3.5 defines primarily to keep
+ *     source compatibility with BSD.
+ *
+ *     See the mrouted code for the original history.
+ *
+ *      Protocol Independent Multicast (PIM) data structures included
+ *      Carlos Picoto (cap@di.fc.ul.pt)
+ *
+ */
+
+#define MRT_BASE       200
+#define MRT_INIT       (MRT_BASE)      /* Activate the kernel mroute code      */
+#define MRT_DONE       (MRT_BASE+1)    /* Shutdown the kernel mroute           */
+#define MRT_ADD_VIF    (MRT_BASE+2)    /* Add a virtual interface              */
+#define MRT_DEL_VIF    (MRT_BASE+3)    /* Delete a virtual interface           */
+#define MRT_ADD_MFC    (MRT_BASE+4)    /* Add a multicast forwarding entry     */
+#define MRT_DEL_MFC    (MRT_BASE+5)    /* Delete a multicast forwarding entry  */
+#define MRT_VERSION    (MRT_BASE+6)    /* Get the kernel multicast version     */
+#define MRT_ASSERT     (MRT_BASE+7)    /* Activate PIM assert mode             */
+#define MRT_PIM                (MRT_BASE+8)    /* enable PIM code                      */
+#define MRT_TABLE      (MRT_BASE+9)    /* Specify mroute table ID              */
+#define MRT_ADD_MFC_PROXY      (MRT_BASE+10)   /* Add a (*,*|G) mfc entry      */
+#define MRT_DEL_MFC_PROXY      (MRT_BASE+11)   /* Del a (*,*|G) mfc entry      */
+#define MRT_MAX                (MRT_BASE+11)
+
+#define SIOCGETVIFCNT  SIOCPROTOPRIVATE        /* IP protocol privates */
+#define SIOCGETSGCNT   (SIOCPROTOPRIVATE+1)
+#define SIOCGETRPF     (SIOCPROTOPRIVATE+2)
+
+#define MAXVIFS                32      
+typedef unsigned long vifbitmap_t;     /* User mode code depends on this lot */
+typedef unsigned short vifi_t;
+#define ALL_VIFS       ((vifi_t)(-1))
+
+/*
+ *     Same idea as select
+ */
+#define VIFM_SET(n,m)  ((m)|=(1<<(n)))
+#define VIFM_CLR(n,m)  ((m)&=~(1<<(n)))
+#define VIFM_ISSET(n,m)        ((m)&(1<<(n)))
+#define VIFM_CLRALL(m) ((m)=0)
+#define VIFM_COPY(mfrom,mto)   ((mto)=(mfrom))
+#define VIFM_SAME(m1,m2)       ((m1)==(m2))
+
+/*
+ *     Passed by mrouted for an MRT_ADD_VIF - again we use the
+ *     mrouted 3.6 structures for compatibility
+ */
+struct vifctl {
+       vifi_t  vifc_vifi;              /* Index of VIF */
+       unsigned char vifc_flags;       /* VIFF_ flags */
+       unsigned char vifc_threshold;   /* ttl limit */
+       unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
+       union {
+               struct in_addr vifc_lcl_addr;     /* Local interface address */
+               int            vifc_lcl_ifindex;  /* Local interface index   */
+       };
+       struct in_addr vifc_rmt_addr;   /* IPIP tunnel addr */
+};
+
+#define VIFF_TUNNEL            0x1     /* IPIP tunnel */
+#define VIFF_SRCRT             0x2     /* NI */
+#define VIFF_REGISTER          0x4     /* register vif */
+#define VIFF_USE_IFINDEX       0x8     /* use vifc_lcl_ifindex instead of
+                                          vifc_lcl_addr to find an interface */
+
+/*
+ *     Cache manipulation structures for mrouted and PIMd
+ */
+struct mfcctl {
+       struct in_addr mfcc_origin;             /* Origin of mcast      */
+       struct in_addr mfcc_mcastgrp;           /* Group in question    */
+       vifi_t  mfcc_parent;                    /* Where it arrived     */
+       unsigned char mfcc_ttls[MAXVIFS];       /* Where it is going    */
+       unsigned int mfcc_pkt_cnt;              /* pkt count for src-grp */
+       unsigned int mfcc_byte_cnt;
+       unsigned int mfcc_wrong_if;
+       int          mfcc_expire;
+};
+
+/* 
+ *     Group count retrieval for mrouted
+ */
+struct sioc_sg_req {
+       struct in_addr src;
+       struct in_addr grp;
+       unsigned long pktcnt;
+       unsigned long bytecnt;
+       unsigned long wrong_if;
+};
+
+/*
+ *     To get vif packet counts
+ */
+
+struct sioc_vif_req {
+       vifi_t  vifi;           /* Which iface */
+       unsigned long icount;   /* In packets */
+       unsigned long ocount;   /* Out packets */
+       unsigned long ibytes;   /* In bytes */
+       unsigned long obytes;   /* Out bytes */
+};
+
+/*
+ *     This is the format the mroute daemon expects to see IGMP control
+ *     data. Magically happens to be like an IP packet as per the original
+ */
+struct igmpmsg {
+       __u32 unused1,unused2;
+       unsigned char im_msgtype;               /* What is this */
+       unsigned char im_mbz;                   /* Must be zero */
+       unsigned char im_vif;                   /* Interface (this ought to be a vifi_t!) */
+       unsigned char unused3;
+       struct in_addr im_src,im_dst;
+};
+
+/*
+ *     That's all usermode folks
+ */
+
+
+
+#define MFC_ASSERT_THRESH (3*HZ)               /* Maximal freq. of asserts */
+
+/*
+ *     Pseudo messages used by mrouted
+ */
+
+#define IGMPMSG_NOCACHE                1               /* Kern cache fill request to mrouted */
+#define IGMPMSG_WRONGVIF       2               /* For PIM assert processing (unused) */
+#define IGMPMSG_WHOLEPKT       3               /* For PIM Register processing */
+
+
+#endif /* __LINUX_MROUTE_H */
diff --git a/lib/libdss-include/include/linux/mroute6.h b/lib/libdss-include/include/linux/mroute6.h
new file mode 100644 (file)
index 0000000..72bcfa9
--- /dev/null
@@ -0,0 +1,138 @@
+#ifndef __LINUX_MROUTE6_H
+#define __LINUX_MROUTE6_H
+
+#include <linux/types.h>
+#include <linux/sockios.h>
+
+/*
+ *     Based on the MROUTING 3.5 defines primarily to keep
+ *     source compatibility with BSD.
+ *
+ *     See the pim6sd code for the original history.
+ *
+ *      Protocol Independent Multicast (PIM) data structures included
+ *      Carlos Picoto (cap@di.fc.ul.pt)
+ *
+ */
+
+#define MRT6_BASE      200
+#define MRT6_INIT      (MRT6_BASE)     /* Activate the kernel mroute code      */
+#define MRT6_DONE      (MRT6_BASE+1)   /* Shutdown the kernel mroute           */
+#define MRT6_ADD_MIF   (MRT6_BASE+2)   /* Add a virtual interface              */
+#define MRT6_DEL_MIF   (MRT6_BASE+3)   /* Delete a virtual interface           */
+#define MRT6_ADD_MFC   (MRT6_BASE+4)   /* Add a multicast forwarding entry     */
+#define MRT6_DEL_MFC   (MRT6_BASE+5)   /* Delete a multicast forwarding entry  */
+#define MRT6_VERSION   (MRT6_BASE+6)   /* Get the kernel multicast version     */
+#define MRT6_ASSERT    (MRT6_BASE+7)   /* Activate PIM assert mode             */
+#define MRT6_PIM       (MRT6_BASE+8)   /* enable PIM code                      */
+#define MRT6_TABLE     (MRT6_BASE+9)   /* Specify mroute table ID              */
+#define MRT6_ADD_MFC_PROXY     (MRT6_BASE+10)  /* Add a (*,*|G) mfc entry      */
+#define MRT6_DEL_MFC_PROXY     (MRT6_BASE+11)  /* Del a (*,*|G) mfc entry      */
+#define MRT6_MAX       (MRT6_BASE+11)
+
+#define SIOCGETMIFCNT_IN6      SIOCPROTOPRIVATE        /* IP protocol privates */
+#define SIOCGETSGCNT_IN6       (SIOCPROTOPRIVATE+1)
+#define SIOCGETRPF     (SIOCPROTOPRIVATE+2)
+
+#define MAXMIFS                32
+typedef unsigned long mifbitmap_t;     /* User mode code depends on this lot */
+typedef unsigned short mifi_t;
+#define ALL_MIFS       ((mifi_t)(-1))
+
+#ifndef IF_SETSIZE
+#define IF_SETSIZE     256
+#endif
+
+typedef        __u32           if_mask;
+#define NIFBITS (sizeof(if_mask) * 8)        /* bits per mask */
+
+#if !defined(DIV_ROUND_UP)
+#define        DIV_ROUND_UP(x,y)       (((x) + ((y) - 1)) / (y))
+#endif
+
+typedef struct if_set {
+       if_mask ifs_bits[DIV_ROUND_UP(IF_SETSIZE, NIFBITS)];
+} if_set;
+
+#define IF_SET(n, p)    ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS)))
+#define IF_CLR(n, p)    ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS)))
+#define IF_ISSET(n, p)  ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS)))
+#define IF_COPY(f, t)   bcopy(f, t, sizeof(*(f)))
+#define IF_ZERO(p)      bzero(p, sizeof(*(p)))
+
+/*
+ *     Passed by mrouted for an MRT_ADD_MIF - again we use the
+ *     mrouted 3.6 structures for compatibility
+ */
+
+struct mif6ctl {
+       mifi_t  mif6c_mifi;             /* Index of MIF */
+       unsigned char mif6c_flags;      /* MIFF_ flags */
+       unsigned char vifc_threshold;   /* ttl limit */
+       __u16    mif6c_pifi;            /* the index of the physical IF */
+       unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
+};
+
+#define MIFF_REGISTER  0x1     /* register vif */
+
+/*
+ *     Cache manipulation structures for mrouted and PIMd
+ */
+
+struct mf6cctl {
+       struct sockaddr_in6 mf6cc_origin;               /* Origin of mcast      */
+       struct sockaddr_in6 mf6cc_mcastgrp;             /* Group in question    */
+       mifi_t  mf6cc_parent;                   /* Where it arrived     */
+       struct if_set mf6cc_ifset;              /* Where it is going */
+};
+
+/*
+ *     Group count retrieval for pim6sd
+ */
+
+struct sioc_sg_req6 {
+       struct sockaddr_in6 src;
+       struct sockaddr_in6 grp;
+       unsigned long pktcnt;
+       unsigned long bytecnt;
+       unsigned long wrong_if;
+};
+
+/*
+ *     To get vif packet counts
+ */
+
+struct sioc_mif_req6 {
+       mifi_t  mifi;           /* Which iface */
+       unsigned long icount;   /* In packets */
+       unsigned long ocount;   /* Out packets */
+       unsigned long ibytes;   /* In bytes */
+       unsigned long obytes;   /* Out bytes */
+};
+
+/*
+ *     That's all usermode folks
+ */
+
+
+
+/*
+ * Structure used to communicate from kernel to multicast router.
+ * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{}
+ * used for IPv4 implementation). This is because this structure will be passed via an
+ * IPv6 raw socket, on which an application will only receiver the payload i.e the data after
+ * the IPv6 header and all the extension headers. (See section 3 of RFC 3542)
+ */
+
+struct mrt6msg {
+#define MRT6MSG_NOCACHE                1
+#define MRT6MSG_WRONGMIF       2
+#define MRT6MSG_WHOLEPKT       3               /* used for use level encap */
+       __u8            im6_mbz;                /* must be zero            */
+       __u8            im6_msgtype;            /* what type of message    */
+       __u16           im6_mif;                /* mif rec'd on            */
+       __u32           im6_pad;                /* padding for 64 bit arch */
+       struct in6_addr im6_src, im6_dst;
+};
+
+#endif /* __LINUX_MROUTE6_H */
diff --git a/lib/libdss-include/include/linux/msdos_fs.h b/lib/libdss-include/include/linux/msdos_fs.h
new file mode 100644 (file)
index 0000000..983d3a6
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef _LINUX_MSDOS_FS_H
+#define _LINUX_MSDOS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+#include <asm/byteorder.h>
+
+/*
+ * The MS-DOS filesystem constants/structures
+ */
+
+#define SECTOR_SIZE    512             /* sector size (bytes) */
+#define SECTOR_BITS    9               /* log2(SECTOR_SIZE) */
+#define MSDOS_DPB      (MSDOS_DPS)     /* dir entries per block */
+#define MSDOS_DPB_BITS 4               /* log2(MSDOS_DPB) */
+#define MSDOS_DPS      (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
+#define MSDOS_DPS_BITS 4               /* log2(MSDOS_DPS) */
+#define MSDOS_LONGNAME 256             /* maximum name length */
+#define CF_LE_W(v)     le16_to_cpu(v)
+#define CF_LE_L(v)     le32_to_cpu(v)
+#define CT_LE_W(v)     cpu_to_le16(v)
+#define CT_LE_L(v)     cpu_to_le32(v)
+
+#define MSDOS_ROOT_INO  1      /* The root inode number */
+#define MSDOS_FSINFO_INO 2     /* Used for managing the FSINFO block */
+
+#define MSDOS_DIR_BITS 5       /* log2(sizeof(struct msdos_dir_entry)) */
+
+/* directory limit */
+#define FAT_MAX_DIR_ENTRIES    (65536)
+#define FAT_MAX_DIR_SIZE       (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS)
+
+#define ATTR_NONE      0       /* no attribute bits */
+#define ATTR_RO                1       /* read-only */
+#define ATTR_HIDDEN    2       /* hidden */
+#define ATTR_SYS       4       /* system */
+#define ATTR_VOLUME    8       /* volume label */
+#define ATTR_DIR       16      /* directory */
+#define ATTR_ARCH      32      /* archived */
+
+/* attribute bits that are copied "as is" */
+#define ATTR_UNUSED    (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN)
+/* bits that are used by the Windows 95/Windows NT extended FAT */
+#define ATTR_EXT       (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
+
+#define CASE_LOWER_BASE        8       /* base is lower case */
+#define CASE_LOWER_EXT 16      /* extension is lower case */
+
+#define DELETED_FLAG   0xe5    /* marks file as deleted when in name[0] */
+#define IS_FREE(n)     (!*(n) || *(n) == DELETED_FLAG)
+
+#define FAT_LFN_LEN    255     /* maximum long name length */
+#define MSDOS_NAME     11      /* maximum name length */
+#define MSDOS_SLOTS    21      /* max # of slots for short and long names */
+#define MSDOS_DOT      ".          "   /* ".", padded to MSDOS_NAME chars */
+#define MSDOS_DOTDOT   "..         "   /* "..", padded to MSDOS_NAME chars */
+
+#define FAT_FIRST_ENT(s, x)    ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \
+       MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x))
+
+/* start of data cluster's entry (number of reserved clusters) */
+#define FAT_START_ENT  2
+
+/* maximum number of clusters */
+#define MAX_FAT12      0xFF4
+#define MAX_FAT16      0xFFF4
+#define MAX_FAT32      0x0FFFFFF6
+#define MAX_FAT(s)     (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \
+       MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12)
+
+/* bad cluster mark */
+#define BAD_FAT12      0xFF7
+#define BAD_FAT16      0xFFF7
+#define BAD_FAT32      0x0FFFFFF7
+
+/* standard EOF */
+#define EOF_FAT12      0xFFF
+#define EOF_FAT16      0xFFFF
+#define EOF_FAT32      0x0FFFFFFF
+
+#define FAT_ENT_FREE   (0)
+#define FAT_ENT_BAD    (BAD_FAT32)
+#define FAT_ENT_EOF    (EOF_FAT32)
+
+#define FAT_FSINFO_SIG1        0x41615252
+#define FAT_FSINFO_SIG2        0x61417272
+#define IS_FSINFO(x)   (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \
+                        && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2)
+
+#define FAT_STATE_DIRTY 0x01
+
+struct __fat_dirent {
+       long            d_ino;
+       __kernel_off_t  d_off;
+       unsigned short  d_reclen;
+       char            d_name[256]; /* We must not include limits.h! */
+};
+
+/*
+ * ioctl commands
+ */
+#define VFAT_IOCTL_READDIR_BOTH                _IOR('r', 1, struct __fat_dirent[2])
+#define VFAT_IOCTL_READDIR_SHORT       _IOR('r', 2, struct __fat_dirent[2])
+/* <linux/videotext.h> has used 0x72 ('r') in collision, so skip a few */
+#define FAT_IOCTL_GET_ATTRIBUTES       _IOR('r', 0x10, __u32)
+#define FAT_IOCTL_SET_ATTRIBUTES       _IOW('r', 0x11, __u32)
+/*Android kernel has used 0x12, so we use 0x13*/
+#define FAT_IOCTL_GET_VOLUME_ID                _IOR('r', 0x13, __u32)
+
+struct fat_boot_sector {
+       __u8    ignored[3];     /* Boot strap short or near jump */
+       __u8    system_id[8];   /* Name - can be used to special case
+                                  partition manager volumes */
+       __u8    sector_size[2]; /* bytes per logical sector */
+       __u8    sec_per_clus;   /* sectors/cluster */
+       __le16  reserved;       /* reserved sectors */
+       __u8    fats;           /* number of FATs */
+       __u8    dir_entries[2]; /* root directory entries */
+       __u8    sectors[2];     /* number of sectors */
+       __u8    media;          /* media code */
+       __le16  fat_length;     /* sectors/FAT */
+       __le16  secs_track;     /* sectors per track */
+       __le16  heads;          /* number of heads */
+       __le32  hidden;         /* hidden sectors (unused) */
+       __le32  total_sect;     /* number of sectors (if sectors == 0) */
+
+       union {
+               struct {
+                       /*  Extended BPB Fields for FAT16 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       __u8    signature;  /* extended boot signature */
+                       __u8    vol_id[4];      /* volume ID */
+                       __u8    vol_label[11];  /* volume label */
+                       __u8    fs_type[8];             /* file system type */
+                       /* other fields are not added here */
+               } fat16;
+
+               struct {
+                       /* only used by FAT32 */
+                       __le32  length;         /* sectors/FAT */
+                       __le16  flags;          /* bit 8: fat mirroring,
+                                                  low 4: active fat */
+                       __u8    version[2];     /* major, minor filesystem
+                                                  version */
+                       __le32  root_cluster;   /* first cluster in
+                                                  root directory */
+                       __le16  info_sector;    /* filesystem info sector */
+                       __le16  backup_boot;    /* backup boot sector */
+                       __le16  reserved2[6];   /* Unused */
+                       /* Extended BPB Fields for FAT32 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       __u8    signature;  /* extended boot signature */
+                       __u8    vol_id[4];      /* volume ID */
+                       __u8    vol_label[11];  /* volume label */
+                       __u8    fs_type[8];             /* file system type */
+                       /* other fields are not added here */
+               } fat32;
+       };
+};
+
+struct fat_boot_fsinfo {
+       __le32   signature1;    /* 0x41615252L */
+       __le32   reserved1[120];        /* Nothing as far as I can tell */
+       __le32   signature2;    /* 0x61417272L */
+       __le32   free_clusters; /* Free cluster count.  -1 if unknown */
+       __le32   next_cluster;  /* Most recently allocated cluster */
+       __le32   reserved2[4];
+};
+
+struct msdos_dir_entry {
+       __u8    name[MSDOS_NAME];/* name and extension */
+       __u8    attr;           /* attribute bits */
+       __u8    lcase;          /* Case for base and extension */
+       __u8    ctime_cs;       /* Creation time, centiseconds (0-199) */
+       __le16  ctime;          /* Creation time */
+       __le16  cdate;          /* Creation date */
+       __le16  adate;          /* Last access date */
+       __le16  starthi;        /* High 16 bits of cluster in FAT32 */
+       __le16  time,date,start;/* time, date and first cluster */
+       __le32  size;           /* file size (in bytes) */
+};
+
+/* Up to 13 characters of the name */
+struct msdos_dir_slot {
+       __u8    id;             /* sequence number for slot */
+       __u8    name0_4[10];    /* first 5 characters in name */
+       __u8    attr;           /* attribute byte */
+       __u8    reserved;       /* always 0 */
+       __u8    alias_checksum; /* checksum for 8.3 alias */
+       __u8    name5_10[12];   /* 6 more characters in name */
+       __le16   start;         /* starting cluster number, 0 in long slots */
+       __u8    name11_12[4];   /* last 2 characters in name */
+};
+
+#endif /* _LINUX_MSDOS_FS_H */
diff --git a/lib/libdss-include/include/linux/msg.h b/lib/libdss-include/include/linux/msg.h
new file mode 100644 (file)
index 0000000..5844b04
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef _LINUX_MSG_H
+#define _LINUX_MSG_H
+
+#include <linux/ipc.h>
+
+/* ipcs ctl commands */
+#define MSG_STAT 11
+#define MSG_INFO 12
+
+/* msgrcv options */
+#define MSG_NOERROR     010000  /* no error if message is too big */
+#define MSG_EXCEPT      020000  /* recv any msg except of specified type.*/
+#define MSG_COPY        040000  /* copy (not remove) all queue messages */
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct msqid_ds {
+       struct ipc_perm msg_perm;
+       struct msg *msg_first;          /* first message on queue,unused  */
+       struct msg *msg_last;           /* last message in queue,unused */
+       __kernel_time_t msg_stime;      /* last msgsnd time */
+       __kernel_time_t msg_rtime;      /* last msgrcv time */
+       __kernel_time_t msg_ctime;      /* last change time */
+       unsigned long  msg_lcbytes;     /* Reuse junk fields for 32 bit */
+       unsigned long  msg_lqbytes;     /* ditto */
+       unsigned short msg_cbytes;      /* current number of bytes on queue */
+       unsigned short msg_qnum;        /* number of messages in queue */
+       unsigned short msg_qbytes;      /* max number of bytes on queue */
+       __kernel_ipc_pid_t msg_lspid;   /* pid of last msgsnd */
+       __kernel_ipc_pid_t msg_lrpid;   /* last receive pid */
+};
+
+/* Include the definition of msqid64_ds */
+#include <asm/msgbuf.h>
+
+/* message buffer for msgsnd and msgrcv calls */
+struct msgbuf {
+       __kernel_long_t mtype;          /* type of message */
+       char mtext[1];                  /* message text */
+};
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo {
+       int msgpool;
+       int msgmap; 
+       int msgmax; 
+       int msgmnb; 
+       int msgmni; 
+       int msgssz; 
+       int msgtql; 
+       unsigned short  msgseg; 
+};
+
+/*
+ * MSGMNI, MSGMAX and MSGMNB are default values which can be
+ * modified by sysctl.
+ *
+ * MSGMNI is the upper limit for the number of messages queues per
+ * namespace.
+ * It has been chosen to be as large possible without facilitating
+ * scenarios where userspace causes overflows when adjusting the limits via
+ * operations of the form retrieve current limit; add X; update limit".
+ *
+ * MSGMNB is the default size of a new message queue. Non-root tasks can
+ * decrease the size with msgctl(IPC_SET), root tasks
+ * (actually: CAP_SYS_RESOURCE) can both increase and decrease the queue
+ * size. The optimal value is application dependent.
+ * 16384 is used because it was always used (since 0.99.10)
+ *
+ * MAXMAX is the maximum size of an individual message, it's a global
+ * (per-namespace) limit that applies for all message queues.
+ * It's set to 1/2 of MSGMNB, to ensure that at least two messages fit into
+ * the queue. This is also an arbitrary choice (since 2.6.0).
+ */
+
+#define MSGMNI 32000   /* <= IPCMNI */     /* max # of msg queue identifiers */
+#define MSGMAX  8192   /* <= INT_MAX */   /* max size of message (bytes) */
+#define MSGMNB 16384   /* <= INT_MAX */   /* default max size of a message queue */
+
+/* unused */
+#define MSGPOOL (MSGMNI * MSGMNB / 1024) /* size in kbytes of message pool */
+#define MSGTQL  MSGMNB            /* number of system message headers */
+#define MSGMAP  MSGMNB            /* number of entries in message map */
+#define MSGSSZ  16                /* message segment size */
+#define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) /* max no. of segments */
+#define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff)
+
+
+#endif /* _LINUX_MSG_H */
diff --git a/lib/libdss-include/include/linux/mtio.h b/lib/libdss-include/include/linux/mtio.h
new file mode 100644 (file)
index 0000000..18543e2
--- /dev/null
@@ -0,0 +1,208 @@
+/* 
+ * linux/mtio.h header file for Linux. Written by H. Bergman
+ *
+ * Modified for special ioctls provided by zftape in September 1997
+ * by C.-J. Heine.
+ */
+
+#ifndef _LINUX_MTIO_H
+#define _LINUX_MTIO_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * Structures and definitions for mag tape io control commands
+ */
+
+/* structure for MTIOCTOP - mag tape op command */
+struct mtop {
+       short   mt_op;          /* operations defined below */
+       int     mt_count;       /* how many of them */
+};
+
+/* Magnetic Tape operations [Not all operations supported by all drivers]: */
+#define MTRESET 0      /* +reset drive in case of problems */
+#define MTFSF  1       /* forward space over FileMark,
+                        * position at first record of next file 
+                        */
+#define MTBSF  2       /* backward space FileMark (position before FM) */
+#define MTFSR  3       /* forward space record */
+#define MTBSR  4       /* backward space record */
+#define MTWEOF 5       /* write an end-of-file record (mark) */
+#define MTREW  6       /* rewind */
+#define MTOFFL 7       /* rewind and put the drive offline (eject?) */
+#define MTNOP  8       /* no op, set status only (read with MTIOCGET) */
+#define MTRETEN 9      /* retension tape */
+#define MTBSFM 10      /* +backward space FileMark, position at FM */
+#define MTFSFM  11     /* +forward space FileMark, position at FM */
+#define MTEOM  12      /* goto end of recorded media (for appending files).
+                        * MTEOM positions after the last FM, ready for
+                        * appending another file.
+                        */
+#define MTERASE 13     /* erase tape -- be careful! */
+
+#define MTRAS1  14     /* run self test 1 (nondestructive) */
+#define MTRAS2 15      /* run self test 2 (destructive) */
+#define MTRAS3  16     /* reserved for self test 3 */
+
+#define MTSETBLK 20    /* set block length (SCSI) */
+#define MTSETDENSITY 21        /* set tape density (SCSI) */
+#define MTSEEK 22      /* seek to block (Tandberg, etc.) */
+#define MTTELL 23      /* tell block (Tandberg, etc.) */
+#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
+                       /* ordinary buffered operation with code 1 */
+#define MTFSS  25      /* space forward over setmarks */
+#define MTBSS  26      /* space backward over setmarks */
+#define MTWSM  27      /* write setmarks */
+
+#define MTLOCK  28     /* lock the drive door */
+#define MTUNLOCK 29    /* unlock the drive door */
+#define MTLOAD  30     /* execute the SCSI load command */
+#define MTUNLOAD 31    /* execute the SCSI unload command */
+#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */
+#define MTSETPART 33   /* Change the active tape partition */
+#define MTMKPART  34   /* Format the tape with one or two partitions */
+#define MTWEOFI        35      /* write an end-of-file record (mark) in immediate mode */
+
+/* structure for MTIOCGET - mag tape get status command */
+
+struct mtget {
+       long    mt_type;        /* type of magtape device */
+       long    mt_resid;       /* residual count: (not sure)
+                                *      number of bytes ignored, or
+                                *      number of files not skipped, or
+                                *      number of records not skipped.
+                                */
+       /* the following registers are device dependent */
+       long    mt_dsreg;       /* status register */
+       long    mt_gstat;       /* generic (device independent) status */
+       long    mt_erreg;       /* error register */
+       /* The next two fields are not always used */
+       __kernel_daddr_t mt_fileno;     /* number of current file on tape */
+       __kernel_daddr_t mt_blkno;      /* current block number */
+};
+
+
+
+/*
+ * Constants for mt_type. Not all of these are supported,
+ * and these are not all of the ones that are supported.
+ */
+#define MT_ISUNKNOWN           0x01
+#define MT_ISQIC02             0x02    /* Generic QIC-02 tape streamer */
+#define MT_ISWT5150            0x03    /* Wangtek 5150EQ, QIC-150, QIC-02 */
+#define MT_ISARCHIVE_5945L2    0x04    /* Archive 5945L-2, QIC-24, QIC-02? */
+#define MT_ISCMSJ500           0x05    /* CMS Jumbo 500 (QIC-02?) */
+#define MT_ISTDC3610           0x06    /* Tandberg 6310, QIC-24 */
+#define MT_ISARCHIVE_VP60I     0x07    /* Archive VP60i, QIC-02 */
+#define MT_ISARCHIVE_2150L     0x08    /* Archive Viper 2150L */
+#define MT_ISARCHIVE_2060L     0x09    /* Archive Viper 2060L */
+#define MT_ISARCHIVESC499      0x0A    /* Archive SC-499 QIC-36 controller */
+#define MT_ISQIC02_ALL_FEATURES        0x0F    /* Generic QIC-02 with all features */
+#define MT_ISWT5099EEN24       0x11    /* Wangtek 5099-een24, 60MB, QIC-24 */
+#define MT_ISTEAC_MT2ST                0x12    /* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
+#define MT_ISEVEREX_FT40A      0x32    /* Everex FT40A (QIC-40) */
+#define MT_ISDDS1              0x51    /* DDS device without partitions */
+#define MT_ISDDS2              0x52    /* DDS device with partitions */
+#define MT_ISONSTREAM_SC        0x61   /* OnStream SCSI tape drives (SC-x0)
+                                         and SCSI emulated (DI, DP, USB) */
+#define MT_ISSCSI1             0x71    /* Generic ANSI SCSI-1 tape unit */
+#define MT_ISSCSI2             0x72    /* Generic ANSI SCSI-2 tape unit */
+
+/* QIC-40/80/3010/3020 ftape supported drives.
+ * 20bit vendor ID + 0x800000 (see ftape-vendors.h)
+ */
+#define MT_ISFTAPE_UNKNOWN     0x800000 /* obsolete */
+#define MT_ISFTAPE_FLAG        0x800000
+
+
+/* structure for MTIOCPOS - mag tape get position command */
+
+struct mtpos {
+       long    mt_blkno;       /* current block number */
+};
+
+
+/* mag tape io control commands */
+#define        MTIOCTOP        _IOW('m', 1, struct mtop)       /* do a mag tape op */
+#define        MTIOCGET        _IOR('m', 2, struct mtget)      /* get tape status */
+#define        MTIOCPOS        _IOR('m', 3, struct mtpos)      /* get tape position */
+
+
+/* Generic Mag Tape (device independent) status macros for examining
+ * mt_gstat -- HP-UX compatible.
+ * There is room for more generic status bits here, but I don't
+ * know which of them are reserved. At least three or so should
+ * be added to make this really useful.
+ */
+#define GMT_EOF(x)              ((x) & 0x80000000)
+#define GMT_BOT(x)              ((x) & 0x40000000)
+#define GMT_EOT(x)              ((x) & 0x20000000)
+#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
+#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
+#define GMT_WR_PROT(x)          ((x) & 0x04000000)
+/* #define GMT_ ?              ((x) & 0x02000000) */
+#define GMT_ONLINE(x)           ((x) & 0x01000000)
+#define GMT_D_6250(x)           ((x) & 0x00800000)
+#define GMT_D_1600(x)           ((x) & 0x00400000)
+#define GMT_D_800(x)            ((x) & 0x00200000)
+/* #define GMT_ ?              ((x) & 0x00100000) */
+/* #define GMT_ ?              ((x) & 0x00080000) */
+#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* door open (no tape) */
+/* #define GMT_ ?              ((x) & 0x00020000) */
+#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* immediate report mode */
+#define GMT_CLN(x)              ((x) & 0x00008000)  /* cleaning requested */
+/* 15 generic status bits unused */
+
+
+/* SCSI-tape specific definitions */
+/* Bitfield shifts in the status  */
+#define MT_ST_BLKSIZE_SHIFT    0
+#define MT_ST_BLKSIZE_MASK     0xffffff
+#define MT_ST_DENSITY_SHIFT    24
+#define MT_ST_DENSITY_MASK     0xff000000
+
+#define MT_ST_SOFTERR_SHIFT    0
+#define MT_ST_SOFTERR_MASK     0xffff
+
+/* Bitfields for the MTSETDRVBUFFER ioctl */
+#define MT_ST_OPTIONS          0xf0000000
+#define MT_ST_BOOLEANS         0x10000000
+#define MT_ST_SETBOOLEANS      0x30000000
+#define MT_ST_CLEARBOOLEANS    0x40000000
+#define MT_ST_WRITE_THRESHOLD  0x20000000
+#define MT_ST_DEF_BLKSIZE      0x50000000
+#define MT_ST_DEF_OPTIONS      0x60000000
+#define MT_ST_TIMEOUTS         0x70000000
+#define MT_ST_SET_TIMEOUT      (MT_ST_TIMEOUTS | 0x000000)
+#define MT_ST_SET_LONG_TIMEOUT (MT_ST_TIMEOUTS | 0x100000)
+#define MT_ST_SET_CLN          0x80000000
+
+#define MT_ST_BUFFER_WRITES    0x1
+#define MT_ST_ASYNC_WRITES     0x2
+#define MT_ST_READ_AHEAD       0x4
+#define MT_ST_DEBUGGING                0x8
+#define MT_ST_TWO_FM           0x10
+#define MT_ST_FAST_MTEOM       0x20
+#define MT_ST_AUTO_LOCK                0x40
+#define MT_ST_DEF_WRITES       0x80
+#define MT_ST_CAN_BSR          0x100
+#define MT_ST_NO_BLKLIMS       0x200
+#define MT_ST_CAN_PARTITIONS    0x400
+#define MT_ST_SCSI2LOGICAL      0x800
+#define MT_ST_SYSV              0x1000
+#define MT_ST_NOWAIT            0x2000
+#define MT_ST_SILI             0x4000
+#define MT_ST_NOWAIT_EOF       0x8000
+
+/* The mode parameters to be controlled. Parameter chosen with bits 20-28 */
+#define MT_ST_CLEAR_DEFAULT    0xfffff
+#define MT_ST_DEF_DENSITY      (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION  (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER    (MT_ST_DEF_OPTIONS | 0x300000)
+
+/* The offset for the arguments for the special HP changer load command. */
+#define MT_ST_HPLOADER_OFFSET 10000
+
+#endif /* _LINUX_MTIO_H */
diff --git a/lib/libdss-include/include/linux/n_r3964.h b/lib/libdss-include/include/linux/n_r3964.h
new file mode 100644 (file)
index 0000000..168a0f9
--- /dev/null
@@ -0,0 +1,98 @@
+/* r3964 linediscipline for linux
+ *
+ * -----------------------------------------------------------
+ * Copyright by
+ * Philips Automation Projects
+ * Kassel (Germany)
+ * -----------------------------------------------------------
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License, incorporated herein by reference.
+ *
+ * Author:
+ * L. Haag
+ *
+ * $Log: r3964.h,v $
+ * Revision 1.4  2005/12/21 19:54:24  Kurt Huwig <kurt huwig de>
+ * Fixed HZ usage on 2.6 kernels
+ * Removed unnecessary include
+ *
+ * Revision 1.3  2001/03/18 13:02:24  dwmw2
+ * Fix timer usage, use spinlocks properly.
+ *
+ * Revision 1.2  2001/03/18 12:53:15  dwmw2
+ * Merge changes in 2.4.2
+ *
+ * Revision 1.1.1.1  1998/10/13 16:43:14  dwmw2
+ * This'll screw the version control
+ *
+ * Revision 1.6  1998/09/30 00:40:38  dwmw2
+ * Updated to use kernel's N_R3964 if available
+ *
+ * Revision 1.4  1998/04/02 20:29:44  lhaag
+ * select, blocking, ...
+ *
+ * Revision 1.3  1998/02/12 18:58:43  root
+ * fixed some memory leaks
+ * calculation of checksum characters
+ *
+ * Revision 1.2  1998/02/07 13:03:17  root
+ * ioctl read_telegram
+ *
+ * Revision 1.1  1998/02/06 19:19:43  root
+ * Initial revision
+ *
+ *
+ */
+
+#ifndef __LINUX_N_R3964_H__
+#define __LINUX_N_R3964_H__
+
+/* line disciplines for r3964 protocol */
+
+
+/*
+ * Ioctl-commands
+ */
+
+#define R3964_ENABLE_SIGNALS      0x5301
+#define R3964_SETPRIORITY         0x5302
+#define R3964_USE_BCC             0x5303
+#define R3964_READ_TELEGRAM       0x5304
+
+/* Options for R3964_SETPRIORITY */
+#define R3964_MASTER   0
+#define R3964_SLAVE    1
+
+/* Options for R3964_ENABLE_SIGNALS */
+#define R3964_SIG_ACK   0x0001
+#define R3964_SIG_DATA  0x0002
+#define R3964_SIG_ALL   0x000f
+#define R3964_SIG_NONE  0x0000
+#define R3964_USE_SIGIO 0x1000
+
+/*
+ * r3964 operation states:
+ */
+
+/* types for msg_id: */
+enum {R3964_MSG_ACK=1, R3964_MSG_DATA };
+
+#define R3964_MAX_MSG_COUNT 32
+
+/* error codes for client messages */
+#define R3964_OK 0        /* no error. */
+#define R3964_TX_FAIL -1  /* transmission error, block NOT sent */
+#define R3964_OVERFLOW -2 /* msg queue overflow */
+
+/* the client gets this struct when calling read(fd,...): */
+struct r3964_client_message {
+         int     msg_id;
+         int     arg;
+         int     error_code;
+};
+
+#define R3964_MTU      256
+
+
+
+#endif /* __LINUX_N_R3964_H__ */
diff --git a/lib/libdss-include/include/linux/nbd.h b/lib/libdss-include/include/linux/nbd.h
new file mode 100644 (file)
index 0000000..c8cca35
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
+ * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
+ *            Made nbd_end_request() use the io_request_lock
+ * 2001 Copyright (C) Steven Whitehouse
+ *            New nbd_end_request() for compatibility with new linux block
+ *            layer code.
+ * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
+ *            Removed unneeded blksize_bits field from nbd_device struct.
+ *            Cleanup PARANOIA usage & code.
+ * 2004/02/19 Paul Clements
+ *            Removed PARANOIA, plus various cleanup and comments
+ */
+
+#ifndef LINUX_NBD_H
+#define LINUX_NBD_H
+
+#include <linux/types.h>
+
+#define NBD_SET_SOCK   _IO( 0xab, 0 )
+#define NBD_SET_BLKSIZE        _IO( 0xab, 1 )
+#define NBD_SET_SIZE   _IO( 0xab, 2 )
+#define NBD_DO_IT      _IO( 0xab, 3 )
+#define NBD_CLEAR_SOCK _IO( 0xab, 4 )
+#define NBD_CLEAR_QUE  _IO( 0xab, 5 )
+#define NBD_PRINT_DEBUG        _IO( 0xab, 6 )
+#define NBD_SET_SIZE_BLOCKS    _IO( 0xab, 7 )
+#define NBD_DISCONNECT  _IO( 0xab, 8 )
+#define NBD_SET_TIMEOUT _IO( 0xab, 9 )
+#define NBD_SET_FLAGS   _IO( 0xab, 10)
+
+enum {
+       NBD_CMD_READ = 0,
+       NBD_CMD_WRITE = 1,
+       NBD_CMD_DISC = 2,
+       NBD_CMD_FLUSH = 3,
+       NBD_CMD_TRIM = 4
+};
+
+/* values for flags field */
+#define NBD_FLAG_HAS_FLAGS    (1 << 0) /* nbd-server supports flags */
+#define NBD_FLAG_READ_ONLY    (1 << 1) /* device is read-only */
+#define NBD_FLAG_SEND_FLUSH   (1 << 2) /* can flush writeback cache */
+/* there is a gap here to match userspace */
+#define NBD_FLAG_SEND_TRIM    (1 << 5) /* send trim/discard */
+
+/* userspace doesn't need the nbd_device structure */
+
+/* These are sent over the network in the request/reply magic fields */
+
+#define NBD_REQUEST_MAGIC 0x25609513
+#define NBD_REPLY_MAGIC 0x67446698
+/* Do *not* use magics: 0x12560953 0x96744668. */
+
+/*
+ * This is the packet used for communication between client and
+ * server. All data are in network byte order.
+ */
+struct nbd_request {
+       __be32 magic;
+       __be32 type;    /* == READ || == WRITE  */
+       char handle[8];
+       __be64 from;
+       __be32 len;
+} __attribute__((packed));
+
+/*
+ * This is the reply packet that nbd-server sends back to the client after
+ * it has completed an I/O request (or an error occurs).
+ */
+struct nbd_reply {
+       __be32 magic;
+       __be32 error;           /* 0 = ok, else error   */
+       char handle[8];         /* handle you got from request  */
+};
+#endif /* LINUX_NBD_H */
diff --git a/lib/libdss-include/include/linux/ncp.h b/lib/libdss-include/include/linux/ncp.h
new file mode 100644 (file)
index 0000000..4482ad7
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ *  ncp.h
+ *
+ *  Copyright (C) 1995 by Volker Lendecke
+ *  Modified for sparc by J.F. Chadima
+ *  Modified for __constant_ntoh by Frank A. Vorstenbosch
+ *
+ */
+
+#ifndef _LINUX_NCP_H
+#define _LINUX_NCP_H
+
+#include <linux/types.h>
+
+#define NCP_PTYPE                (0x11)
+#define NCP_PORT                 (0x0451)
+
+#define NCP_ALLOC_SLOT_REQUEST   (0x1111)
+#define NCP_REQUEST              (0x2222)
+#define NCP_DEALLOC_SLOT_REQUEST (0x5555)
+
+struct ncp_request_header {
+       __u16 type;
+       __u8 sequence;
+       __u8 conn_low;
+       __u8 task;
+       __u8 conn_high;
+       __u8 function;
+       __u8 data[0];
+} __attribute__((packed));
+
+#define NCP_REPLY                (0x3333)
+#define NCP_WATCHDOG            (0x3E3E)
+#define NCP_POSITIVE_ACK         (0x9999)
+
+struct ncp_reply_header {
+       __u16 type;
+       __u8 sequence;
+       __u8 conn_low;
+       __u8 task;
+       __u8 conn_high;
+       __u8 completion_code;
+       __u8 connection_state;
+       __u8 data[0];
+} __attribute__((packed));
+
+#define NCP_VOLNAME_LEN (16)
+#define NCP_NUMBER_OF_VOLUMES (256)
+struct ncp_volume_info {
+       __u32 total_blocks;
+       __u32 free_blocks;
+       __u32 purgeable_blocks;
+       __u32 not_yet_purgeable_blocks;
+       __u32 total_dir_entries;
+       __u32 available_dir_entries;
+       __u8 sectors_per_block;
+       char volume_name[NCP_VOLNAME_LEN + 1];
+};
+
+#define AR_READ      (cpu_to_le16(1))
+#define AR_WRITE     (cpu_to_le16(2))
+#define AR_EXCLUSIVE (cpu_to_le16(0x20))
+
+#define NCP_FILE_ID_LEN 6
+
+/* Defines for Name Spaces */
+#define NW_NS_DOS     0
+#define NW_NS_MAC     1
+#define NW_NS_NFS     2
+#define NW_NS_FTAM    3
+#define NW_NS_OS2     4
+
+/*  Defines for ReturnInformationMask */
+#define RIM_NAME             (cpu_to_le32(1))
+#define RIM_SPACE_ALLOCATED   (cpu_to_le32(2))
+#define RIM_ATTRIBUTES       (cpu_to_le32(4))
+#define RIM_DATA_SIZE        (cpu_to_le32(8))
+#define RIM_TOTAL_SIZE       (cpu_to_le32(0x10))
+#define RIM_EXT_ATTR_INFO     (cpu_to_le32(0x20))
+#define RIM_ARCHIVE          (cpu_to_le32(0x40))
+#define RIM_MODIFY           (cpu_to_le32(0x80))
+#define RIM_CREATION         (cpu_to_le32(0x100))
+#define RIM_OWNING_NAMESPACE  (cpu_to_le32(0x200))
+#define RIM_DIRECTORY        (cpu_to_le32(0x400))
+#define RIM_RIGHTS           (cpu_to_le32(0x800))
+#define RIM_ALL              (cpu_to_le32(0xFFF))
+#define RIM_COMPRESSED_INFO   (cpu_to_le32(0x80000000))
+
+/* Defines for NSInfoBitMask */
+#define NSIBM_NFS_NAME         0x0001
+#define NSIBM_NFS_MODE         0x0002
+#define NSIBM_NFS_GID          0x0004
+#define NSIBM_NFS_NLINKS       0x0008
+#define NSIBM_NFS_RDEV         0x0010
+#define NSIBM_NFS_LINK         0x0020
+#define NSIBM_NFS_CREATED      0x0040
+#define NSIBM_NFS_UID          0x0080
+#define NSIBM_NFS_ACSFLAG      0x0100
+#define NSIBM_NFS_MYFLAG       0x0200
+
+/* open/create modes */
+#define OC_MODE_OPEN     0x01
+#define OC_MODE_TRUNCATE  0x02
+#define OC_MODE_REPLACE   0x02
+#define OC_MODE_CREATE   0x08
+
+/* open/create results */
+#define OC_ACTION_NONE    0x00
+#define OC_ACTION_OPEN    0x01
+#define OC_ACTION_CREATE   0x02
+#define OC_ACTION_TRUNCATE 0x04
+#define OC_ACTION_REPLACE  0x04
+
+/* access rights attributes */
+#ifndef AR_READ_ONLY
+#define AR_READ_ONLY      0x0001
+#define AR_WRITE_ONLY     0x0002
+#define AR_DENY_READ      0x0004
+#define AR_DENY_WRITE     0x0008
+#define AR_COMPATIBILITY   0x0010
+#define AR_WRITE_THROUGH   0x0040
+#define AR_OPEN_COMPRESSED 0x0100
+#endif
+
+struct nw_nfs_info {
+       __u32 mode;
+       __u32 rdev;
+};
+
+struct nw_info_struct {
+       __u32 spaceAlloc;
+       __le32 attributes;
+       __u16 flags;
+       __le32 dataStreamSize;
+       __le32 totalStreamSize;
+       __u16 numberOfStreams;
+       __le16 creationTime;
+       __le16 creationDate;
+       __u32 creatorID;
+       __le16 modifyTime;
+       __le16 modifyDate;
+       __u32 modifierID;
+       __le16 lastAccessDate;
+       __u16 archiveTime;
+       __u16 archiveDate;
+       __u32 archiverID;
+       __u16 inheritedRightsMask;
+       __le32 dirEntNum;
+       __le32 DosDirNum;
+       __u32 volNumber;
+       __u32 EADataSize;
+       __u32 EAKeyCount;
+       __u32 EAKeySize;
+       __u32 NSCreator;
+       __u8 nameLen;
+       __u8 entryName[256];
+       /* libncp may depend on there being nothing after entryName */
+} __attribute__((packed));
+
+/* modify mask - use with MODIFY_DOS_INFO structure */
+#define DM_ATTRIBUTES            (cpu_to_le32(0x02))
+#define DM_CREATE_DATE           (cpu_to_le32(0x04))
+#define DM_CREATE_TIME           (cpu_to_le32(0x08))
+#define DM_CREATOR_ID            (cpu_to_le32(0x10))
+#define DM_ARCHIVE_DATE          (cpu_to_le32(0x20))
+#define DM_ARCHIVE_TIME          (cpu_to_le32(0x40))
+#define DM_ARCHIVER_ID           (cpu_to_le32(0x80))
+#define DM_MODIFY_DATE           (cpu_to_le32(0x0100))
+#define DM_MODIFY_TIME           (cpu_to_le32(0x0200))
+#define DM_MODIFIER_ID           (cpu_to_le32(0x0400))
+#define DM_LAST_ACCESS_DATE      (cpu_to_le32(0x0800))
+#define DM_INHERITED_RIGHTS_MASK  (cpu_to_le32(0x1000))
+#define DM_MAXIMUM_SPACE         (cpu_to_le32(0x2000))
+
+struct nw_modify_dos_info {
+       __le32 attributes;
+       __le16 creationDate;
+       __le16 creationTime;
+       __u32 creatorID;
+       __le16 modifyDate;
+       __le16 modifyTime;
+       __u32 modifierID;
+       __u16 archiveDate;
+       __u16 archiveTime;
+       __u32 archiverID;
+       __le16 lastAccessDate;
+       __u16 inheritanceGrantMask;
+       __u16 inheritanceRevokeMask;
+       __u32 maximumSpace;
+} __attribute__((packed));
+
+struct nw_search_sequence {
+       __u8 volNumber;
+       __u32 dirBase;
+       __u32 sequence;
+} __attribute__((packed));
+
+#endif                         /* _LINUX_NCP_H */
diff --git a/lib/libdss-include/include/linux/ncp_fs.h b/lib/libdss-include/include/linux/ncp_fs.h
new file mode 100644 (file)
index 0000000..9b84469
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ *  ncp_fs.h
+ *
+ *  Copyright (C) 1995, 1996 by Volker Lendecke
+ *
+ */
+
+#ifndef _LINUX_NCP_FS_H
+#define _LINUX_NCP_FS_H
+
+#include <linux/fs.h>
+#include <linux/in.h>
+#include <linux/types.h>
+#include <linux/magic.h>
+
+#include <linux/ipx.h>
+#include <linux/ncp_no.h>
+
+/*
+ * ioctl commands
+ */
+
+struct ncp_ioctl_request {
+       unsigned int function;
+       unsigned int size;
+       char *data;
+};
+
+struct ncp_fs_info {
+       int version;
+       struct sockaddr_ipx addr;
+       __kernel_uid_t mounted_uid;
+       int connection;         /* Connection number the server assigned us */
+       int buffer_size;        /* The negotiated buffer size, to be
+                                  used for read/write requests! */
+
+       int volume_number;
+       __le32 directory_id;
+};
+
+struct ncp_fs_info_v2 {
+       int version;
+       unsigned long mounted_uid;
+       unsigned int connection;
+       unsigned int buffer_size;
+
+       unsigned int volume_number;
+       __le32 directory_id;
+
+       __u32 dummy1;
+       __u32 dummy2;
+       __u32 dummy3;
+};
+
+struct ncp_sign_init
+{
+       char sign_root[8];
+       char sign_last[16];
+};
+
+struct ncp_lock_ioctl
+{
+#define NCP_LOCK_LOG   0
+#define NCP_LOCK_SH    1
+#define NCP_LOCK_EX    2
+#define NCP_LOCK_CLEAR 256
+       int             cmd;
+       int             origin;
+       unsigned int    offset;
+       unsigned int    length;
+#define NCP_LOCK_DEFAULT_TIMEOUT       18
+#define NCP_LOCK_MAX_TIMEOUT           180
+       int             timeout;
+};
+
+struct ncp_setroot_ioctl
+{
+       int             volNumber;
+       int             namespace;
+       __le32          dirEntNum;
+};
+
+struct ncp_objectname_ioctl
+{
+#define NCP_AUTH_NONE  0x00
+#define NCP_AUTH_BIND  0x31
+#define NCP_AUTH_NDS   0x32
+       int             auth_type;
+       size_t          object_name_len;
+       void *  object_name;    /* a userspace data, in most cases user name */
+};
+
+struct ncp_privatedata_ioctl
+{
+       size_t          len;
+       void *  data;           /* ~1000 for NDS */
+};
+
+/* NLS charsets by ioctl */
+#define NCP_IOCSNAME_LEN 20
+struct ncp_nls_ioctl
+{
+       unsigned char codepage[NCP_IOCSNAME_LEN+1];
+       unsigned char iocharset[NCP_IOCSNAME_LEN+1];
+};
+
+#define        NCP_IOC_NCPREQUEST              _IOR('n', 1, struct ncp_ioctl_request)
+#define        NCP_IOC_GETMOUNTUID             _IOW('n', 2, __kernel_old_uid_t)
+#define NCP_IOC_GETMOUNTUID2           _IOW('n', 2, unsigned long)
+
+#define NCP_IOC_CONN_LOGGED_IN          _IO('n', 3)
+
+#define NCP_GET_FS_INFO_VERSION    (1)
+#define NCP_IOC_GET_FS_INFO             _IOWR('n', 4, struct ncp_fs_info)
+#define NCP_GET_FS_INFO_VERSION_V2 (2)
+#define NCP_IOC_GET_FS_INFO_V2         _IOWR('n', 4, struct ncp_fs_info_v2)
+
+#define NCP_IOC_SIGN_INIT              _IOR('n', 5, struct ncp_sign_init)
+#define NCP_IOC_SIGN_WANTED            _IOR('n', 6, int)
+#define NCP_IOC_SET_SIGN_WANTED                _IOW('n', 6, int)
+
+#define NCP_IOC_LOCKUNLOCK             _IOR('n', 7, struct ncp_lock_ioctl)
+
+#define NCP_IOC_GETROOT                        _IOW('n', 8, struct ncp_setroot_ioctl)
+#define NCP_IOC_SETROOT                        _IOR('n', 8, struct ncp_setroot_ioctl)
+
+#define NCP_IOC_GETOBJECTNAME          _IOWR('n', 9, struct ncp_objectname_ioctl)
+#define NCP_IOC_SETOBJECTNAME          _IOR('n', 9, struct ncp_objectname_ioctl)
+#define NCP_IOC_GETPRIVATEDATA         _IOWR('n', 10, struct ncp_privatedata_ioctl)
+#define NCP_IOC_SETPRIVATEDATA         _IOR('n', 10, struct ncp_privatedata_ioctl)
+
+#define NCP_IOC_GETCHARSETS            _IOWR('n', 11, struct ncp_nls_ioctl)
+#define NCP_IOC_SETCHARSETS            _IOR('n', 11, struct ncp_nls_ioctl)
+
+#define NCP_IOC_GETDENTRYTTL           _IOW('n', 12, __u32)
+#define NCP_IOC_SETDENTRYTTL           _IOR('n', 12, __u32)
+
+/*
+ * The packet size to allocate. One page should be enough.
+ */
+#define NCP_PACKET_SIZE 4070
+
+#define NCP_MAXPATHLEN 255
+#define NCP_MAXNAMELEN 14
+
+#endif                         /* _LINUX_NCP_FS_H */
diff --git a/lib/libdss-include/include/linux/ncp_mount.h b/lib/libdss-include/include/linux/ncp_mount.h
new file mode 100644 (file)
index 0000000..dfcbea2
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ *  ncp_mount.h
+ *
+ *  Copyright (C) 1995, 1996 by Volker Lendecke
+ *
+ */
+
+#ifndef _LINUX_NCP_MOUNT_H
+#define _LINUX_NCP_MOUNT_H
+
+#include <linux/types.h>
+#include <linux/ncp.h>
+
+#define NCP_MOUNT_VERSION 3    /* Binary */
+
+/* Values for flags */
+#define NCP_MOUNT_SOFT         0x0001
+#define NCP_MOUNT_INTR         0x0002
+#define NCP_MOUNT_STRONG       0x0004  /* enable delete/rename of r/o files */
+#define NCP_MOUNT_NO_OS2       0x0008  /* do not use OS/2 (LONG) namespace */
+#define NCP_MOUNT_NO_NFS       0x0010  /* do not use NFS namespace */
+#define NCP_MOUNT_EXTRAS       0x0020
+#define NCP_MOUNT_SYMLINKS     0x0040  /* enable symlinks */
+#define NCP_MOUNT_NFS_EXTRAS   0x0080  /* Enable use of NFS NS meta-info */
+
+struct ncp_mount_data {
+       int version;
+       unsigned int ncp_fd;    /* The socket to the ncp port */
+       __kernel_uid_t mounted_uid;     /* Who may umount() this filesystem? */
+       __kernel_pid_t wdog_pid;                /* Who cares for our watchdog packets? */
+
+       unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
+       unsigned int time_out;  /* How long should I wait after
+                                  sending a NCP request? */
+       unsigned int retry_count;       /* And how often should I retry? */
+       unsigned int flags;
+
+       __kernel_uid_t uid;
+       __kernel_gid_t gid;
+       __kernel_mode_t file_mode;
+       __kernel_mode_t dir_mode;
+};
+
+#define NCP_MOUNT_VERSION_V4   (4)     /* Binary or text */
+
+struct ncp_mount_data_v4 {
+       int version;
+       unsigned long flags;    /* NCP_MOUNT_* flags */
+       /* MIPS uses long __kernel_uid_t, but... */
+       /* we neever pass -1, so it is safe */
+       unsigned long mounted_uid;      /* Who may umount() this filesystem? */
+       /* MIPS uses long __kernel_pid_t */
+       long wdog_pid;          /* Who cares for our watchdog packets? */
+
+       unsigned int ncp_fd;    /* The socket to the ncp port */
+       unsigned int time_out;  /* How long should I wait after
+                                  sending a NCP request? */
+       unsigned int retry_count;       /* And how often should I retry? */
+
+       /* MIPS uses long __kernel_uid_t... */
+       /* we never pass -1, so it is safe */
+       unsigned long uid;
+       unsigned long gid;
+       /* MIPS uses unsigned long __kernel_mode_t */
+       unsigned long file_mode;
+       unsigned long dir_mode;
+};
+
+#define NCP_MOUNT_VERSION_V5   (5)     /* Text only */
+
+#endif
diff --git a/lib/libdss-include/include/linux/ncp_no.h b/lib/libdss-include/include/linux/ncp_no.h
new file mode 100644 (file)
index 0000000..cddaa48
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _NCP_NO
+#define _NCP_NO
+
+/* these define the attribute byte as seen by NCP */
+#define aRONLY                 (__cpu_to_le32(1))
+#define aHIDDEN                        (__cpu_to_le32(2))
+#define aSYSTEM                        (__cpu_to_le32(4))
+#define aEXECUTE               (__cpu_to_le32(8))
+#define aDIR                   (__cpu_to_le32(0x10))
+#define aARCH                  (__cpu_to_le32(0x20))
+#define aSHARED                        (__cpu_to_le32(0x80))
+#define aDONTSUBALLOCATE       (__cpu_to_le32(1L<<11))
+#define aTRANSACTIONAL         (__cpu_to_le32(1L<<12))
+#define aPURGE                 (__cpu_to_le32(1L<<16))
+#define aRENAMEINHIBIT         (__cpu_to_le32(1L<<17))
+#define aDELETEINHIBIT         (__cpu_to_le32(1L<<18))
+#define aDONTCOMPRESS          (__cpu_to_le32(1L<<27))
+
+#endif /* _NCP_NO */
diff --git a/lib/libdss-include/include/linux/ndctl.h b/lib/libdss-include/include/linux/ndctl.h
new file mode 100644 (file)
index 0000000..076cc92
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2014-2015, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ */
+#ifndef __NDCTL_H__
+#define __NDCTL_H__
+
+#include <linux/types.h>
+
+struct nd_cmd_smart {
+       __u32 status;
+       __u8 data[128];
+} __attribute__((packed));
+
+struct nd_cmd_smart_threshold {
+       __u32 status;
+       __u8 data[8];
+} __attribute__((packed));
+
+struct nd_cmd_dimm_flags {
+       __u32 status;
+       __u32 flags;
+} __attribute__((packed));
+
+struct nd_cmd_get_config_size {
+       __u32 status;
+       __u32 config_size;
+       __u32 max_xfer;
+} __attribute__((packed));
+
+struct nd_cmd_get_config_data_hdr {
+       __u32 in_offset;
+       __u32 in_length;
+       __u32 status;
+       __u8 out_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_set_config_hdr {
+       __u32 in_offset;
+       __u32 in_length;
+       __u8 in_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_vendor_hdr {
+       __u32 opcode;
+       __u32 in_length;
+       __u8 in_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_vendor_tail {
+       __u32 status;
+       __u32 out_length;
+       __u8 out_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_ars_cap {
+       __u64 address;
+       __u64 length;
+       __u32 status;
+       __u32 max_ars_out;
+} __attribute__((packed));
+
+struct nd_cmd_ars_start {
+       __u64 address;
+       __u64 length;
+       __u16 type;
+       __u8 reserved[6];
+       __u32 status;
+} __attribute__((packed));
+
+struct nd_cmd_ars_status {
+       __u32 status;
+       __u32 out_length;
+       __u64 address;
+       __u64 length;
+       __u16 type;
+       __u32 num_records;
+       struct nd_ars_record {
+               __u32 handle;
+               __u32 flags;
+               __u64 err_address;
+               __u64 length;
+       } __attribute__((packed)) records[0];
+} __attribute__((packed));
+
+enum {
+       ND_CMD_IMPLEMENTED = 0,
+
+       /* bus commands */
+       ND_CMD_ARS_CAP = 1,
+       ND_CMD_ARS_START = 2,
+       ND_CMD_ARS_STATUS = 3,
+
+       /* per-dimm commands */
+       ND_CMD_SMART = 1,
+       ND_CMD_SMART_THRESHOLD = 2,
+       ND_CMD_DIMM_FLAGS = 3,
+       ND_CMD_GET_CONFIG_SIZE = 4,
+       ND_CMD_GET_CONFIG_DATA = 5,
+       ND_CMD_SET_CONFIG_DATA = 6,
+       ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+       ND_CMD_VENDOR_EFFECT_LOG = 8,
+       ND_CMD_VENDOR = 9,
+};
+
+enum {
+       ND_ARS_VOLATILE = 1,
+       ND_ARS_PERSISTENT = 2,
+};
+
+static __inline__ const char *nvdimm_bus_cmd_name(unsigned cmd)
+{
+       static const char * const names[] = {
+               [ND_CMD_ARS_CAP] = "ars_cap",
+               [ND_CMD_ARS_START] = "ars_start",
+               [ND_CMD_ARS_STATUS] = "ars_status",
+       };
+
+       if (cmd < ARRAY_SIZE(names) && names[cmd])
+               return names[cmd];
+       return "unknown";
+}
+
+static __inline__ const char *nvdimm_cmd_name(unsigned cmd)
+{
+       static const char * const names[] = {
+               [ND_CMD_SMART] = "smart",
+               [ND_CMD_SMART_THRESHOLD] = "smart_thresh",
+               [ND_CMD_DIMM_FLAGS] = "flags",
+               [ND_CMD_GET_CONFIG_SIZE] = "get_size",
+               [ND_CMD_GET_CONFIG_DATA] = "get_data",
+               [ND_CMD_SET_CONFIG_DATA] = "set_data",
+               [ND_CMD_VENDOR_EFFECT_LOG_SIZE] = "effect_size",
+               [ND_CMD_VENDOR_EFFECT_LOG] = "effect_log",
+               [ND_CMD_VENDOR] = "vendor",
+       };
+
+       if (cmd < ARRAY_SIZE(names) && names[cmd])
+               return names[cmd];
+       return "unknown";
+}
+
+#define ND_IOCTL 'N'
+
+#define ND_IOCTL_SMART                 _IOWR(ND_IOCTL, ND_CMD_SMART,\
+                                       struct nd_cmd_smart)
+
+#define ND_IOCTL_SMART_THRESHOLD       _IOWR(ND_IOCTL, ND_CMD_SMART_THRESHOLD,\
+                                       struct nd_cmd_smart_threshold)
+
+#define ND_IOCTL_DIMM_FLAGS            _IOWR(ND_IOCTL, ND_CMD_DIMM_FLAGS,\
+                                       struct nd_cmd_dimm_flags)
+
+#define ND_IOCTL_GET_CONFIG_SIZE       _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_SIZE,\
+                                       struct nd_cmd_get_config_size)
+
+#define ND_IOCTL_GET_CONFIG_DATA       _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_DATA,\
+                                       struct nd_cmd_get_config_data_hdr)
+
+#define ND_IOCTL_SET_CONFIG_DATA       _IOWR(ND_IOCTL, ND_CMD_SET_CONFIG_DATA,\
+                                       struct nd_cmd_set_config_hdr)
+
+#define ND_IOCTL_VENDOR                        _IOWR(ND_IOCTL, ND_CMD_VENDOR,\
+                                       struct nd_cmd_vendor_hdr)
+
+#define ND_IOCTL_ARS_CAP               _IOWR(ND_IOCTL, ND_CMD_ARS_CAP,\
+                                       struct nd_cmd_ars_cap)
+
+#define ND_IOCTL_ARS_START             _IOWR(ND_IOCTL, ND_CMD_ARS_START,\
+                                       struct nd_cmd_ars_start)
+
+#define ND_IOCTL_ARS_STATUS            _IOWR(ND_IOCTL, ND_CMD_ARS_STATUS,\
+                                       struct nd_cmd_ars_status)
+
+#define ND_DEVICE_DIMM 1            /* nd_dimm: container for "config data" */
+#define ND_DEVICE_REGION_PMEM 2     /* nd_region: (parent of PMEM namespaces) */
+#define ND_DEVICE_REGION_BLK 3      /* nd_region: (parent of BLK namespaces) */
+#define ND_DEVICE_NAMESPACE_IO 4    /* legacy persistent memory */
+#define ND_DEVICE_NAMESPACE_PMEM 5  /* PMEM namespace (may alias with BLK) */
+#define ND_DEVICE_NAMESPACE_BLK 6   /* BLK namespace (may alias with PMEM) */
+
+enum nd_driver_flags {
+       ND_DRIVER_DIMM            = 1 << ND_DEVICE_DIMM,
+       ND_DRIVER_REGION_PMEM     = 1 << ND_DEVICE_REGION_PMEM,
+       ND_DRIVER_REGION_BLK      = 1 << ND_DEVICE_REGION_BLK,
+       ND_DRIVER_NAMESPACE_IO    = 1 << ND_DEVICE_NAMESPACE_IO,
+       ND_DRIVER_NAMESPACE_PMEM  = 1 << ND_DEVICE_NAMESPACE_PMEM,
+       ND_DRIVER_NAMESPACE_BLK   = 1 << ND_DEVICE_NAMESPACE_BLK,
+};
+
+enum {
+       ND_MIN_NAMESPACE_SIZE = 0x00400000,
+};
+
+enum ars_masks {
+       ARS_STATUS_MASK = 0x0000FFFF,
+       ARS_EXT_STATUS_SHIFT = 16,
+};
+#endif /* __NDCTL_H__ */
diff --git a/lib/libdss-include/include/linux/neighbour.h b/lib/libdss-include/include/linux/neighbour.h
new file mode 100644 (file)
index 0000000..788655b
--- /dev/null
@@ -0,0 +1,167 @@
+#ifndef __LINUX_NEIGHBOUR_H
+#define __LINUX_NEIGHBOUR_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct ndmsg {
+       __u8            ndm_family;
+       __u8            ndm_pad1;
+       __u16           ndm_pad2;
+       __s32           ndm_ifindex;
+       __u16           ndm_state;
+       __u8            ndm_flags;
+       __u8            ndm_type;
+};
+
+enum {
+       NDA_UNSPEC,
+       NDA_DST,
+       NDA_LLADDR,
+       NDA_CACHEINFO,
+       NDA_PROBES,
+       NDA_VLAN,
+       NDA_PORT,
+       NDA_VNI,
+       NDA_IFINDEX,
+       NDA_MASTER,
+       NDA_LINK_NETNSID,
+       __NDA_MAX
+};
+
+#define NDA_MAX (__NDA_MAX - 1)
+
+/*
+ *     Neighbor Cache Entry Flags
+ */
+
+#define NTF_USE                0x01
+#define NTF_SELF       0x02
+#define NTF_MASTER     0x04
+#define NTF_PROXY      0x08    /* == ATF_PUBL */
+#define NTF_EXT_LEARNED        0x10
+#define NTF_ROUTER     0x80
+
+/*
+ *     Neighbor Cache Entry States.
+ */
+
+#define NUD_INCOMPLETE 0x01
+#define NUD_REACHABLE  0x02
+#define NUD_STALE      0x04
+#define NUD_DELAY      0x08
+#define NUD_PROBE      0x10
+#define NUD_FAILED     0x20
+
+/* Dummy states */
+#define NUD_NOARP      0x40
+#define NUD_PERMANENT  0x80
+#define NUD_NONE       0x00
+
+/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change
+   and make no address resolution or NUD.
+   NUD_PERMANENT also cannot be deleted by garbage collectors.
+ */
+
+struct nda_cacheinfo {
+       __u32           ndm_confirmed;
+       __u32           ndm_used;
+       __u32           ndm_updated;
+       __u32           ndm_refcnt;
+};
+
+/*****************************************************************
+ *             Neighbour tables specific messages.
+ *
+ * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
+ * NLM_F_DUMP flag set. Every neighbour table configuration is
+ * spread over multiple messages to avoid running into message
+ * size limits on systems with many interfaces. The first message
+ * in the sequence transports all not device specific data such as
+ * statistics, configuration, and the default parameter set.
+ * This message is followed by 0..n messages carrying device
+ * specific parameter sets.
+ * Although the ordering should be sufficient, NDTA_NAME can be
+ * used to identify sequences. The initial message can be identified
+ * by checking for NDTA_CONFIG. The device specific messages do
+ * not contain this TLV but have NDTPA_IFINDEX set to the
+ * corresponding interface index.
+ *
+ * To change neighbour table attributes, send RTM_SETNEIGHTBL
+ * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
+ * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
+ * otherwise. Device specific parameter sets can be changed by
+ * setting NDTPA_IFINDEX to the interface index of the corresponding
+ * device.
+ ****/
+
+struct ndt_stats {
+       __u64           ndts_allocs;
+       __u64           ndts_destroys;
+       __u64           ndts_hash_grows;
+       __u64           ndts_res_failed;
+       __u64           ndts_lookups;
+       __u64           ndts_hits;
+       __u64           ndts_rcv_probes_mcast;
+       __u64           ndts_rcv_probes_ucast;
+       __u64           ndts_periodic_gc_runs;
+       __u64           ndts_forced_gc_runs;
+       __u64           ndts_table_fulls;
+};
+
+enum {
+       NDTPA_UNSPEC,
+       NDTPA_IFINDEX,                  /* u32, unchangeable */
+       NDTPA_REFCNT,                   /* u32, read-only */
+       NDTPA_REACHABLE_TIME,           /* u64, read-only, msecs */
+       NDTPA_BASE_REACHABLE_TIME,      /* u64, msecs */
+       NDTPA_RETRANS_TIME,             /* u64, msecs */
+       NDTPA_GC_STALETIME,             /* u64, msecs */
+       NDTPA_DELAY_PROBE_TIME,         /* u64, msecs */
+       NDTPA_QUEUE_LEN,                /* u32 */
+       NDTPA_APP_PROBES,               /* u32 */
+       NDTPA_UCAST_PROBES,             /* u32 */
+       NDTPA_MCAST_PROBES,             /* u32 */
+       NDTPA_ANYCAST_DELAY,            /* u64, msecs */
+       NDTPA_PROXY_DELAY,              /* u64, msecs */
+       NDTPA_PROXY_QLEN,               /* u32 */
+       NDTPA_LOCKTIME,                 /* u64, msecs */
+       NDTPA_QUEUE_LENBYTES,           /* u32 */
+       NDTPA_MCAST_REPROBES,           /* u32 */
+       __NDTPA_MAX
+};
+#define NDTPA_MAX (__NDTPA_MAX - 1)
+
+struct ndtmsg {
+       __u8            ndtm_family;
+       __u8            ndtm_pad1;
+       __u16           ndtm_pad2;
+};
+
+struct ndt_config {
+       __u16           ndtc_key_len;
+       __u16           ndtc_entry_size;
+       __u32           ndtc_entries;
+       __u32           ndtc_last_flush;        /* delta to now in msecs */
+       __u32           ndtc_last_rand;         /* delta to now in msecs */
+       __u32           ndtc_hash_rnd;
+       __u32           ndtc_hash_mask;
+       __u32           ndtc_hash_chain_gc;
+       __u32           ndtc_proxy_qlen;
+};
+
+enum {
+       NDTA_UNSPEC,
+       NDTA_NAME,                      /* char *, unchangeable */
+       NDTA_THRESH1,                   /* u32 */
+       NDTA_THRESH2,                   /* u32 */
+       NDTA_THRESH3,                   /* u32 */
+       NDTA_CONFIG,                    /* struct ndt_config, read-only */
+       NDTA_PARMS,                     /* nested TLV NDTPA_* */
+       NDTA_STATS,                     /* struct ndt_stats, read-only */
+       NDTA_GC_INTERVAL,               /* u64, msecs */
+       __NDTA_MAX
+};
+#define NDTA_MAX (__NDTA_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/net.h b/lib/libdss-include/include/linux/net.h
new file mode 100644 (file)
index 0000000..24eaec3
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * NET         An implementation of the SOCKET network access protocol.
+ *             This is the master header file for the Linux NET layer,
+ *             or, in plain English: the networking handling part of the
+ *             kernel.
+ *
+ * Version:    @(#)net.h       1.0.3   05/25/93
+ *
+ * Authors:    Orest Zborowski, <obz@Kodak.COM>
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_NET_H
+#define _LINUX_NET_H
+
+#include <linux/socket.h>
+#include <asm/socket.h>
+
+#define NPROTO         AF_MAX
+
+#define SYS_SOCKET     1               /* sys_socket(2)                */
+#define SYS_BIND       2               /* sys_bind(2)                  */
+#define SYS_CONNECT    3               /* sys_connect(2)               */
+#define SYS_LISTEN     4               /* sys_listen(2)                */
+#define SYS_ACCEPT     5               /* sys_accept(2)                */
+#define SYS_GETSOCKNAME        6               /* sys_getsockname(2)           */
+#define SYS_GETPEERNAME        7               /* sys_getpeername(2)           */
+#define SYS_SOCKETPAIR 8               /* sys_socketpair(2)            */
+#define SYS_SEND       9               /* sys_send(2)                  */
+#define SYS_RECV       10              /* sys_recv(2)                  */
+#define SYS_SENDTO     11              /* sys_sendto(2)                */
+#define SYS_RECVFROM   12              /* sys_recvfrom(2)              */
+#define SYS_SHUTDOWN   13              /* sys_shutdown(2)              */
+#define SYS_SETSOCKOPT 14              /* sys_setsockopt(2)            */
+#define SYS_GETSOCKOPT 15              /* sys_getsockopt(2)            */
+#define SYS_SENDMSG    16              /* sys_sendmsg(2)               */
+#define SYS_RECVMSG    17              /* sys_recvmsg(2)               */
+#define SYS_ACCEPT4    18              /* sys_accept4(2)               */
+#define SYS_RECVMMSG   19              /* sys_recvmmsg(2)              */
+#define SYS_SENDMMSG   20              /* sys_sendmmsg(2)              */
+
+typedef enum {
+       SS_FREE = 0,                    /* not allocated                */
+       SS_UNCONNECTED,                 /* unconnected to any socket    */
+       SS_CONNECTING,                  /* in process of connecting     */
+       SS_CONNECTED,                   /* connected to socket          */
+       SS_DISCONNECTING                /* in process of disconnecting  */
+} socket_state;
+
+#define __SO_ACCEPTCON (1 << 16)       /* performed a listen           */
+
+#endif /* _LINUX_NET_H */
diff --git a/lib/libdss-include/include/linux/net_dropmon.h b/lib/libdss-include/include/linux/net_dropmon.h
new file mode 100644 (file)
index 0000000..2a73946
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef __NET_DROPMON_H
+#define __NET_DROPMON_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct net_dm_drop_point {
+       __u8 pc[8];
+       __u32 count;
+};
+
+#define is_drop_point_hw(x) do {\
+       int ____i, ____j;\
+       for (____i = 0; ____i < 8; i ____i++)\
+               ____j |= x[____i];\
+       ____j;\
+} while (0)
+
+#define NET_DM_CFG_VERSION  0
+#define NET_DM_CFG_ALERT_COUNT  1
+#define NET_DM_CFG_ALERT_DELAY 2
+#define NET_DM_CFG_MAX 3
+
+struct net_dm_config_entry {
+       __u32 type;
+       __u64 data __attribute__((aligned(8)));
+};
+
+struct net_dm_config_msg {
+       __u32 entries;
+       struct net_dm_config_entry options[0];
+};
+
+struct net_dm_alert_msg {
+       __u32 entries;
+       struct net_dm_drop_point points[0];
+};
+
+struct net_dm_user_msg {
+       union {
+               struct net_dm_config_msg user;
+               struct net_dm_alert_msg alert;
+       } u;
+};
+
+
+/* These are the netlink message types for this protocol */
+
+enum {
+       NET_DM_CMD_UNSPEC = 0,
+       NET_DM_CMD_ALERT,
+       NET_DM_CMD_CONFIG,
+       NET_DM_CMD_START,
+       NET_DM_CMD_STOP,
+       _NET_DM_CMD_MAX,
+};
+
+#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1)
+
+/*
+ * Our group identifiers
+ */
+#define NET_DM_GRP_ALERT 1
+#endif
diff --git a/lib/libdss-include/include/linux/net_namespace.h b/lib/libdss-include/include/linux/net_namespace.h
new file mode 100644 (file)
index 0000000..9a92b7e
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (c) 2015 6WIND S.A.
+ * Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+#ifndef _LINUX_NET_NAMESPACE_H_
+#define _LINUX_NET_NAMESPACE_H_
+
+/* Attributes of RTM_NEWNSID/RTM_GETNSID messages */
+enum {
+       NETNSA_NONE,
+#define NETNSA_NSID_NOT_ASSIGNED -1
+       NETNSA_NSID,
+       NETNSA_PID,
+       NETNSA_FD,
+       __NETNSA_MAX,
+};
+
+#define NETNSA_MAX             (__NETNSA_MAX - 1)
+
+#endif /* _LINUX_NET_NAMESPACE_H_ */
diff --git a/lib/libdss-include/include/linux/net_tstamp.h b/lib/libdss-include/include/linux/net_tstamp.h
new file mode 100644 (file)
index 0000000..6d1abea
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Userspace API for hardware time stamping of network packets
+ *
+ * Copyright (C) 2008,2009 Intel Corporation
+ * Author: Patrick Ohly <patrick.ohly@intel.com>
+ *
+ */
+
+#ifndef _NET_TIMESTAMPING_H
+#define _NET_TIMESTAMPING_H
+
+#include <linux/socket.h>   /* for SO_TIMESTAMPING */
+
+/* SO_TIMESTAMPING gets an integer bit field comprised of these values */
+enum {
+       SOF_TIMESTAMPING_TX_HARDWARE = (1<<0),
+       SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1),
+       SOF_TIMESTAMPING_RX_HARDWARE = (1<<2),
+       SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3),
+       SOF_TIMESTAMPING_SOFTWARE = (1<<4),
+       SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
+       SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
+       SOF_TIMESTAMPING_OPT_ID = (1<<7),
+       SOF_TIMESTAMPING_TX_SCHED = (1<<8),
+       SOF_TIMESTAMPING_TX_ACK = (1<<9),
+       SOF_TIMESTAMPING_OPT_CMSG = (1<<10),
+       SOF_TIMESTAMPING_OPT_TSONLY = (1<<11),
+
+       SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_TSONLY,
+       SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) |
+                                SOF_TIMESTAMPING_LAST
+};
+
+/**
+ * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
+ *
+ * @flags:     no flags defined right now, must be zero for %SIOCSHWTSTAMP
+ * @tx_type:   one of HWTSTAMP_TX_*
+ * @rx_filter: one of HWTSTAMP_FILTER_*
+ *
+ * %SIOCGHWTSTAMP and %SIOCSHWTSTAMP expect a &struct ifreq with a
+ * ifr_data pointer to this structure.  For %SIOCSHWTSTAMP, if the
+ * driver or hardware does not support the requested @rx_filter value,
+ * the driver may use a more general filter mode.  In this case
+ * @rx_filter will indicate the actual mode on return.
+ */
+struct hwtstamp_config {
+       int flags;
+       int tx_type;
+       int rx_filter;
+};
+
+/* possible values for hwtstamp_config->tx_type */
+enum hwtstamp_tx_types {
+       /*
+        * No outgoing packet will need hardware time stamping;
+        * should a packet arrive which asks for it, no hardware
+        * time stamping will be done.
+        */
+       HWTSTAMP_TX_OFF,
+
+       /*
+        * Enables hardware time stamping for outgoing packets;
+        * the sender of the packet decides which are to be
+        * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE
+        * before sending the packet.
+        */
+       HWTSTAMP_TX_ON,
+
+       /*
+        * Enables time stamping for outgoing packets just as
+        * HWTSTAMP_TX_ON does, but also enables time stamp insertion
+        * directly into Sync packets. In this case, transmitted Sync
+        * packets will not received a time stamp via the socket error
+        * queue.
+        */
+       HWTSTAMP_TX_ONESTEP_SYNC,
+};
+
+/* possible values for hwtstamp_config->rx_filter */
+enum hwtstamp_rx_filters {
+       /* time stamp no incoming packet at all */
+       HWTSTAMP_FILTER_NONE,
+
+       /* time stamp any incoming packet */
+       HWTSTAMP_FILTER_ALL,
+
+       /* return value: time stamp all packets requested plus some others */
+       HWTSTAMP_FILTER_SOME,
+
+       /* PTP v1, UDP, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
+       /* PTP v1, UDP, Sync packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_SYNC,
+       /* PTP v1, UDP, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ,
+       /* PTP v2, UDP, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_EVENT,
+       /* PTP v2, UDP, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_SYNC,
+       /* PTP v2, UDP, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ,
+
+       /* 802.AS1, Ethernet, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_EVENT,
+       /* 802.AS1, Ethernet, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_SYNC,
+       /* 802.AS1, Ethernet, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ,
+
+       /* PTP v2/802.AS1, any layer, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_EVENT,
+       /* PTP v2/802.AS1, any layer, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_SYNC,
+       /* PTP v2/802.AS1, any layer, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
+};
+
+#endif /* _NET_TIMESTAMPING_H */
diff --git a/lib/libdss-include/include/linux/netconf.h b/lib/libdss-include/include/linux/netconf.h
new file mode 100644 (file)
index 0000000..7210fe4
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _LINUX_NETCONF_H_
+#define _LINUX_NETCONF_H_
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct netconfmsg {
+       __u8    ncm_family;
+};
+
+enum {
+       NETCONFA_UNSPEC,
+       NETCONFA_IFINDEX,
+       NETCONFA_FORWARDING,
+       NETCONFA_RP_FILTER,
+       NETCONFA_MC_FORWARDING,
+       NETCONFA_PROXY_NEIGH,
+       NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
+       __NETCONFA_MAX
+};
+#define NETCONFA_MAX   (__NETCONFA_MAX - 1)
+
+#define NETCONFA_IFINDEX_ALL           -1
+#define NETCONFA_IFINDEX_DEFAULT       -2
+
+#endif /* _LINUX_NETCONF_H_ */
diff --git a/lib/libdss-include/include/linux/netdevice.h b/lib/libdss-include/include/linux/netdevice.h
new file mode 100644 (file)
index 0000000..66fceb4
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the Interfaces handler.
+ *
+ * Version:    @(#)dev.h       1.0.10  08/12/93
+ *
+ * Authors:    Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Corey Minyard <wf-rch!minyard@relay.EU.net>
+ *             Donald J. Becker, <becker@cesdis.gsfc.nasa.gov>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Bjorn Ekwall. <bj0rn@blox.se>
+ *              Pekka Riikonen <priikone@poseidon.pspt.fi>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ *             Moved to /usr/include/linux for NET3
+ */
+#ifndef _LINUX_NETDEVICE_H
+#define _LINUX_NETDEVICE_H
+
+#include <linux/if.h>
+#include <linux/if_ether.h>
+#include <linux/if_packet.h>
+#include <linux/if_link.h>
+
+
+#define MAX_ADDR_LEN   32              /* Largest hardware address length */
+
+/* Initial net device group. All devices belong to group 0 by default. */
+#define INIT_NETDEV_GROUP      0
+
+
+/* interface name assignment types (sysfs name_assign_type attribute) */
+#define NET_NAME_UNKNOWN       0       /* unknown origin (not exposed to userspace) */
+#define NET_NAME_ENUM          1       /* enumerated by kernel */
+#define NET_NAME_PREDICTABLE   2       /* predictably named by the kernel */
+#define NET_NAME_USER          3       /* provided by user-space */
+#define NET_NAME_RENAMED       4       /* renamed by user-space */
+
+/* Media selection options. */
+enum {
+        IF_PORT_UNKNOWN = 0,
+        IF_PORT_10BASE2,
+        IF_PORT_10BASET,
+        IF_PORT_AUI,
+        IF_PORT_100BASET,
+        IF_PORT_100BASETX,
+        IF_PORT_100BASEFX
+};
+
+/* hardware address assignment types */
+#define NET_ADDR_PERM          0       /* address is permanent (default) */
+#define NET_ADDR_RANDOM                1       /* address is generated randomly */
+#define NET_ADDR_STOLEN                2       /* address is stolen from other device */
+#define NET_ADDR_SET           3       /* address is set using
+                                        * dev_set_mac_address() */
+
+#endif /* _LINUX_NETDEVICE_H */
diff --git a/lib/libdss-include/include/linux/netfilter.h b/lib/libdss-include/include/linux/netfilter.h
new file mode 100644 (file)
index 0000000..b71b4c9
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef __LINUX_NETFILTER_H
+#define __LINUX_NETFILTER_H
+
+#include <linux/types.h>
+
+#include <linux/sysctl.h>
+#include <linux/in.h>
+#include <linux/in6.h>
+
+/* Responses from hook functions. */
+#define NF_DROP 0
+#define NF_ACCEPT 1
+#define NF_STOLEN 2
+#define NF_QUEUE 3
+#define NF_REPEAT 4
+#define NF_STOP 5
+#define NF_MAX_VERDICT NF_STOP
+
+/* we overload the higher bits for encoding auxiliary data such as the queue
+ * number or errno values. Not nice, but better than additional function
+ * arguments. */
+#define NF_VERDICT_MASK 0x000000ff
+
+/* extra verdict flags have mask 0x0000ff00 */
+#define NF_VERDICT_FLAG_QUEUE_BYPASS   0x00008000
+
+/* queue number (NF_QUEUE) or errno (NF_DROP) */
+#define NF_VERDICT_QMASK 0xffff0000
+#define NF_VERDICT_QBITS 16
+
+#define NF_QUEUE_NR(x) ((((x) << 16) & NF_VERDICT_QMASK) | NF_QUEUE)
+
+#define NF_DROP_ERR(x) (((-x) << 16) | NF_DROP)
+
+/* only for userspace compatibility */
+/* Generic cache responses from hook functions.
+   <= 0x2000 is used for protocol-flags. */
+#define NFC_UNKNOWN 0x4000
+#define NFC_ALTERED 0x8000
+
+/* NF_VERDICT_BITS should be 8 now, but userspace might break if this changes */
+#define NF_VERDICT_BITS 16
+
+enum nf_inet_hooks {
+       NF_INET_PRE_ROUTING,
+       NF_INET_LOCAL_IN,
+       NF_INET_FORWARD,
+       NF_INET_LOCAL_OUT,
+       NF_INET_POST_ROUTING,
+       NF_INET_NUMHOOKS
+};
+
+enum nf_dev_hooks {
+       NF_NETDEV_INGRESS,
+       NF_NETDEV_NUMHOOKS
+};
+
+enum {
+       NFPROTO_UNSPEC =  0,
+       NFPROTO_INET   =  1,
+       NFPROTO_IPV4   =  2,
+       NFPROTO_ARP    =  3,
+       NFPROTO_NETDEV =  5,
+       NFPROTO_BRIDGE =  7,
+       NFPROTO_IPV6   = 10,
+       NFPROTO_DECNET = 12,
+       NFPROTO_NUMPROTO,
+};
+
+union nf_inet_addr {
+       __u32           all[4];
+       __be32          ip;
+       __be32          ip6[4];
+       struct in_addr  in;
+       struct in6_addr in6;
+};
+
+#endif /* __LINUX_NETFILTER_H */
diff --git a/lib/libdss-include/include/linux/netfilter/ipset/ip_set.h b/lib/libdss-include/include/linux/netfilter/ipset/ip_set.h
new file mode 100644 (file)
index 0000000..ec5af15
--- /dev/null
@@ -0,0 +1,303 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ *                         Patrick Schaaf <bof@bof.de>
+ *                         Martin Josefsson <gandalf@wlug.westbo.se>
+ * Copyright (C) 2003-2011 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef _IP_SET_H
+#define _IP_SET_H
+
+#include <linux/types.h>
+
+/* The protocol version */
+#define IPSET_PROTOCOL         6
+
+/* The max length of strings including NUL: set and type identifiers */
+#define IPSET_MAXNAMELEN       32
+
+/* The maximum permissible comment length we will accept over netlink */
+#define IPSET_MAX_COMMENT_SIZE 255
+
+/* Message types and commands */
+enum ipset_cmd {
+       IPSET_CMD_NONE,
+       IPSET_CMD_PROTOCOL,     /* 1: Return protocol version */
+       IPSET_CMD_CREATE,       /* 2: Create a new (empty) set */
+       IPSET_CMD_DESTROY,      /* 3: Destroy a (empty) set */
+       IPSET_CMD_FLUSH,        /* 4: Remove all elements from a set */
+       IPSET_CMD_RENAME,       /* 5: Rename a set */
+       IPSET_CMD_SWAP,         /* 6: Swap two sets */
+       IPSET_CMD_LIST,         /* 7: List sets */
+       IPSET_CMD_SAVE,         /* 8: Save sets */
+       IPSET_CMD_ADD,          /* 9: Add an element to a set */
+       IPSET_CMD_DEL,          /* 10: Delete an element from a set */
+       IPSET_CMD_TEST,         /* 11: Test an element in a set */
+       IPSET_CMD_HEADER,       /* 12: Get set header data only */
+       IPSET_CMD_TYPE,         /* 13: Get set type */
+       IPSET_MSG_MAX,          /* Netlink message commands */
+
+       /* Commands in userspace: */
+       IPSET_CMD_RESTORE = IPSET_MSG_MAX, /* 14: Enter restore mode */
+       IPSET_CMD_HELP,         /* 15: Get help */
+       IPSET_CMD_VERSION,      /* 16: Get program version */
+       IPSET_CMD_QUIT,         /* 17: Quit from interactive mode */
+
+       IPSET_CMD_MAX,
+
+       IPSET_CMD_COMMIT = IPSET_CMD_MAX, /* 18: Commit buffered commands */
+};
+
+/* Attributes at command level */
+enum {
+       IPSET_ATTR_UNSPEC,
+       IPSET_ATTR_PROTOCOL,    /* 1: Protocol version */
+       IPSET_ATTR_SETNAME,     /* 2: Name of the set */
+       IPSET_ATTR_TYPENAME,    /* 3: Typename */
+       IPSET_ATTR_SETNAME2 = IPSET_ATTR_TYPENAME, /* Setname at rename/swap */
+       IPSET_ATTR_REVISION,    /* 4: Settype revision */
+       IPSET_ATTR_FAMILY,      /* 5: Settype family */
+       IPSET_ATTR_FLAGS,       /* 6: Flags at command level */
+       IPSET_ATTR_DATA,        /* 7: Nested attributes */
+       IPSET_ATTR_ADT,         /* 8: Multiple data containers */
+       IPSET_ATTR_LINENO,      /* 9: Restore lineno */
+       IPSET_ATTR_PROTOCOL_MIN, /* 10: Minimal supported version number */
+       IPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN, /* type rev min */
+       __IPSET_ATTR_CMD_MAX,
+};
+#define IPSET_ATTR_CMD_MAX     (__IPSET_ATTR_CMD_MAX - 1)
+
+/* CADT specific attributes */
+enum {
+       IPSET_ATTR_IP = IPSET_ATTR_UNSPEC + 1,
+       IPSET_ATTR_IP_FROM = IPSET_ATTR_IP,
+       IPSET_ATTR_IP_TO,       /* 2 */
+       IPSET_ATTR_CIDR,        /* 3 */
+       IPSET_ATTR_PORT,        /* 4 */
+       IPSET_ATTR_PORT_FROM = IPSET_ATTR_PORT,
+       IPSET_ATTR_PORT_TO,     /* 5 */
+       IPSET_ATTR_TIMEOUT,     /* 6 */
+       IPSET_ATTR_PROTO,       /* 7 */
+       IPSET_ATTR_CADT_FLAGS,  /* 8 */
+       IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO,     /* 9 */
+       IPSET_ATTR_MARK,        /* 10 */
+       IPSET_ATTR_MARKMASK,    /* 11 */
+       /* Reserve empty slots */
+       IPSET_ATTR_CADT_MAX = 16,
+       /* Create-only specific attributes */
+       IPSET_ATTR_GC,
+       IPSET_ATTR_HASHSIZE,
+       IPSET_ATTR_MAXELEM,
+       IPSET_ATTR_NETMASK,
+       IPSET_ATTR_PROBES,
+       IPSET_ATTR_RESIZE,
+       IPSET_ATTR_SIZE,
+       /* Kernel-only */
+       IPSET_ATTR_ELEMENTS,
+       IPSET_ATTR_REFERENCES,
+       IPSET_ATTR_MEMSIZE,
+
+       __IPSET_ATTR_CREATE_MAX,
+};
+#define IPSET_ATTR_CREATE_MAX  (__IPSET_ATTR_CREATE_MAX - 1)
+
+/* ADT specific attributes */
+enum {
+       IPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + 1,
+       IPSET_ATTR_NAME,
+       IPSET_ATTR_NAMEREF,
+       IPSET_ATTR_IP2,
+       IPSET_ATTR_CIDR2,
+       IPSET_ATTR_IP2_TO,
+       IPSET_ATTR_IFACE,
+       IPSET_ATTR_BYTES,
+       IPSET_ATTR_PACKETS,
+       IPSET_ATTR_COMMENT,
+       IPSET_ATTR_SKBMARK,
+       IPSET_ATTR_SKBPRIO,
+       IPSET_ATTR_SKBQUEUE,
+       __IPSET_ATTR_ADT_MAX,
+};
+#define IPSET_ATTR_ADT_MAX     (__IPSET_ATTR_ADT_MAX - 1)
+
+/* IP specific attributes */
+enum {
+       IPSET_ATTR_IPADDR_IPV4 = IPSET_ATTR_UNSPEC + 1,
+       IPSET_ATTR_IPADDR_IPV6,
+       __IPSET_ATTR_IPADDR_MAX,
+};
+#define IPSET_ATTR_IPADDR_MAX  (__IPSET_ATTR_IPADDR_MAX - 1)
+
+/* Error codes */
+enum ipset_errno {
+       IPSET_ERR_PRIVATE = 4096,
+       IPSET_ERR_PROTOCOL,
+       IPSET_ERR_FIND_TYPE,
+       IPSET_ERR_MAX_SETS,
+       IPSET_ERR_BUSY,
+       IPSET_ERR_EXIST_SETNAME2,
+       IPSET_ERR_TYPE_MISMATCH,
+       IPSET_ERR_EXIST,
+       IPSET_ERR_INVALID_CIDR,
+       IPSET_ERR_INVALID_NETMASK,
+       IPSET_ERR_INVALID_FAMILY,
+       IPSET_ERR_TIMEOUT,
+       IPSET_ERR_REFERENCED,
+       IPSET_ERR_IPADDR_IPV4,
+       IPSET_ERR_IPADDR_IPV6,
+       IPSET_ERR_COUNTER,
+       IPSET_ERR_COMMENT,
+       IPSET_ERR_INVALID_MARKMASK,
+       IPSET_ERR_SKBINFO,
+
+       /* Type specific error codes */
+       IPSET_ERR_TYPE_SPECIFIC = 4352,
+};
+
+/* Flags at command level or match/target flags, lower half of cmdattrs*/
+enum ipset_cmd_flags {
+       IPSET_FLAG_BIT_EXIST    = 0,
+       IPSET_FLAG_EXIST        = (1 << IPSET_FLAG_BIT_EXIST),
+       IPSET_FLAG_BIT_LIST_SETNAME = 1,
+       IPSET_FLAG_LIST_SETNAME = (1 << IPSET_FLAG_BIT_LIST_SETNAME),
+       IPSET_FLAG_BIT_LIST_HEADER = 2,
+       IPSET_FLAG_LIST_HEADER  = (1 << IPSET_FLAG_BIT_LIST_HEADER),
+       IPSET_FLAG_BIT_SKIP_COUNTER_UPDATE = 3,
+       IPSET_FLAG_SKIP_COUNTER_UPDATE =
+               (1 << IPSET_FLAG_BIT_SKIP_COUNTER_UPDATE),
+       IPSET_FLAG_BIT_SKIP_SUBCOUNTER_UPDATE = 4,
+       IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE =
+               (1 << IPSET_FLAG_BIT_SKIP_SUBCOUNTER_UPDATE),
+       IPSET_FLAG_BIT_MATCH_COUNTERS = 5,
+       IPSET_FLAG_MATCH_COUNTERS = (1 << IPSET_FLAG_BIT_MATCH_COUNTERS),
+       IPSET_FLAG_BIT_RETURN_NOMATCH = 7,
+       IPSET_FLAG_RETURN_NOMATCH = (1 << IPSET_FLAG_BIT_RETURN_NOMATCH),
+       IPSET_FLAG_BIT_MAP_SKBMARK = 8,
+       IPSET_FLAG_MAP_SKBMARK = (1 << IPSET_FLAG_BIT_MAP_SKBMARK),
+       IPSET_FLAG_BIT_MAP_SKBPRIO = 9,
+       IPSET_FLAG_MAP_SKBPRIO = (1 << IPSET_FLAG_BIT_MAP_SKBPRIO),
+       IPSET_FLAG_BIT_MAP_SKBQUEUE = 10,
+       IPSET_FLAG_MAP_SKBQUEUE = (1 << IPSET_FLAG_BIT_MAP_SKBQUEUE),
+       IPSET_FLAG_CMD_MAX = 15,
+};
+
+/* Flags at CADT attribute level, upper half of cmdattrs */
+enum ipset_cadt_flags {
+       IPSET_FLAG_BIT_BEFORE   = 0,
+       IPSET_FLAG_BEFORE       = (1 << IPSET_FLAG_BIT_BEFORE),
+       IPSET_FLAG_BIT_PHYSDEV  = 1,
+       IPSET_FLAG_PHYSDEV      = (1 << IPSET_FLAG_BIT_PHYSDEV),
+       IPSET_FLAG_BIT_NOMATCH  = 2,
+       IPSET_FLAG_NOMATCH      = (1 << IPSET_FLAG_BIT_NOMATCH),
+       IPSET_FLAG_BIT_WITH_COUNTERS = 3,
+       IPSET_FLAG_WITH_COUNTERS = (1 << IPSET_FLAG_BIT_WITH_COUNTERS),
+       IPSET_FLAG_BIT_WITH_COMMENT = 4,
+       IPSET_FLAG_WITH_COMMENT = (1 << IPSET_FLAG_BIT_WITH_COMMENT),
+       IPSET_FLAG_BIT_WITH_FORCEADD = 5,
+       IPSET_FLAG_WITH_FORCEADD = (1 << IPSET_FLAG_BIT_WITH_FORCEADD),
+       IPSET_FLAG_BIT_WITH_SKBINFO = 6,
+       IPSET_FLAG_WITH_SKBINFO = (1 << IPSET_FLAG_BIT_WITH_SKBINFO),
+       IPSET_FLAG_CADT_MAX     = 15,
+};
+
+/* The flag bits which correspond to the non-extension create flags */
+enum ipset_create_flags {
+       IPSET_CREATE_FLAG_BIT_FORCEADD = 0,
+       IPSET_CREATE_FLAG_FORCEADD = (1 << IPSET_CREATE_FLAG_BIT_FORCEADD),
+       IPSET_CREATE_FLAG_BIT_MAX = 7,
+};
+
+/* Commands with settype-specific attributes */
+enum ipset_adt {
+       IPSET_ADD,
+       IPSET_DEL,
+       IPSET_TEST,
+       IPSET_ADT_MAX,
+       IPSET_CREATE = IPSET_ADT_MAX,
+       IPSET_CADT_MAX,
+};
+
+/* Sets are identified by an index in kernel space. Tweak with ip_set_id_t
+ * and IPSET_INVALID_ID if you want to increase the max number of sets.
+ */
+typedef __u16 ip_set_id_t;
+
+#define IPSET_INVALID_ID               65535
+
+enum ip_set_dim {
+       IPSET_DIM_ZERO = 0,
+       IPSET_DIM_ONE,
+       IPSET_DIM_TWO,
+       IPSET_DIM_THREE,
+       /* Max dimension in elements.
+        * If changed, new revision of iptables match/target is required.
+        */
+       IPSET_DIM_MAX = 6,
+       /* Backward compatibility: set match revision 2 */
+       IPSET_BIT_RETURN_NOMATCH = 7,
+};
+
+/* Option flags for kernel operations */
+enum ip_set_kopt {
+       IPSET_INV_MATCH = (1 << IPSET_DIM_ZERO),
+       IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE),
+       IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO),
+       IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE),
+       IPSET_RETURN_NOMATCH = (1 << IPSET_BIT_RETURN_NOMATCH),
+};
+
+enum {
+       IPSET_COUNTER_NONE = 0,
+       IPSET_COUNTER_EQ,
+       IPSET_COUNTER_NE,
+       IPSET_COUNTER_LT,
+       IPSET_COUNTER_GT,
+};
+
+/* Backward compatibility for set match v3 */
+struct ip_set_counter_match0 {
+       __u8 op;
+       __u64 value;
+};
+
+struct ip_set_counter_match {
+       __aligned_u64 value;
+       __u8 op;
+};
+
+/* Interface to iptables/ip6tables */
+
+#define SO_IP_SET              83
+
+union ip_set_name_index {
+       char name[IPSET_MAXNAMELEN];
+       ip_set_id_t index;
+};
+
+#define IP_SET_OP_GET_BYNAME   0x00000006      /* Get set index by name */
+struct ip_set_req_get_set {
+       unsigned int op;
+       unsigned int version;
+       union ip_set_name_index set;
+};
+
+#define IP_SET_OP_GET_BYINDEX  0x00000007      /* Get set name by index */
+/* Uses ip_set_req_get_set */
+
+#define IP_SET_OP_GET_FNAME    0x00000008      /* Get set index and family */
+struct ip_set_req_get_set_family {
+       unsigned int op;
+       unsigned int version;
+       unsigned int family;
+       union ip_set_name_index set;
+};
+
+#define IP_SET_OP_VERSION      0x00000100      /* Ask kernel version */
+struct ip_set_req_version {
+       unsigned int op;
+       unsigned int version;
+};
+
+#endif /* _IP_SET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/ipset/ip_set_bitmap.h b/lib/libdss-include/include/linux/netfilter/ipset/ip_set_bitmap.h
new file mode 100644 (file)
index 0000000..061a28e
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __IP_SET_BITMAP_H
+#define __IP_SET_BITMAP_H
+
+/* Bitmap type specific error codes */
+enum {
+       /* The element is out of the range of the set */
+       IPSET_ERR_BITMAP_RANGE = IPSET_ERR_TYPE_SPECIFIC,
+       /* The range exceeds the size limit of the set type */
+       IPSET_ERR_BITMAP_RANGE_SIZE,
+};
+
+
+#endif /* __IP_SET_BITMAP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/ipset/ip_set_hash.h b/lib/libdss-include/include/linux/netfilter/ipset/ip_set_hash.h
new file mode 100644 (file)
index 0000000..34ac6ce
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __IP_SET_HASH_H
+#define __IP_SET_HASH_H
+
+/* Hash type specific error codes */
+enum {
+       /* Hash is full */
+       IPSET_ERR_HASH_FULL = IPSET_ERR_TYPE_SPECIFIC,
+       /* Null-valued element */
+       IPSET_ERR_HASH_ELEM,
+       /* Invalid protocol */
+       IPSET_ERR_INVALID_PROTO,
+       /* Protocol missing but must be specified */
+       IPSET_ERR_MISSING_PROTO,
+       /* Range not supported */
+       IPSET_ERR_HASH_RANGE_UNSUPPORTED,
+       /* Invalid range */
+       IPSET_ERR_HASH_RANGE,
+};
+
+
+#endif /* __IP_SET_HASH_H */
diff --git a/lib/libdss-include/include/linux/netfilter/ipset/ip_set_list.h b/lib/libdss-include/include/linux/netfilter/ipset/ip_set_list.h
new file mode 100644 (file)
index 0000000..75e6175
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __IP_SET_LIST_H
+#define __IP_SET_LIST_H
+
+/* List type specific error codes */
+enum {
+       /* Set name to be added/deleted/tested does not exist. */
+       IPSET_ERR_NAME = IPSET_ERR_TYPE_SPECIFIC,
+       /* list:set type is not permitted to add */
+       IPSET_ERR_LOOP,
+       /* Missing reference set */
+       IPSET_ERR_BEFORE,
+       /* Reference set does not exist */
+       IPSET_ERR_NAMEREF,
+       /* Set is full */
+       IPSET_ERR_LIST_FULL,
+       /* Reference set is not added to the set */
+       IPSET_ERR_REF_EXIST,
+};
+
+
+#endif /* __IP_SET_LIST_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_conntrack_common.h b/lib/libdss-include/include/linux/netfilter/nf_conntrack_common.h
new file mode 100644 (file)
index 0000000..10b51fc
--- /dev/null
@@ -0,0 +1,123 @@
+#ifndef _NF_CONNTRACK_COMMON_H
+#define _NF_CONNTRACK_COMMON_H
+/* Connection state tracking for netfilter.  This is separated from,
+   but required by, the NAT layer; it can also be used by an iptables
+   extension. */
+enum ip_conntrack_info {
+       /* Part of an established connection (either direction). */
+       IP_CT_ESTABLISHED,
+
+       /* Like NEW, but related to an existing connection, or ICMP error
+          (in either direction). */
+       IP_CT_RELATED,
+
+       /* Started a new connection to track (only
+           IP_CT_DIR_ORIGINAL); may be a retransmission. */
+       IP_CT_NEW,
+
+       /* >= this indicates reply direction */
+       IP_CT_IS_REPLY,
+
+       IP_CT_ESTABLISHED_REPLY = IP_CT_ESTABLISHED + IP_CT_IS_REPLY,
+       IP_CT_RELATED_REPLY = IP_CT_RELATED + IP_CT_IS_REPLY,
+       IP_CT_NEW_REPLY = IP_CT_NEW + IP_CT_IS_REPLY,   
+       /* Number of distinct IP_CT types (no NEW in reply dirn). */
+       IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1
+};
+
+#define NF_CT_STATE_INVALID_BIT                        (1 << 0)
+#define NF_CT_STATE_BIT(ctinfo)                        (1 << ((ctinfo) % IP_CT_IS_REPLY + 1))
+#define NF_CT_STATE_UNTRACKED_BIT              (1 << (IP_CT_NUMBER + 1))
+
+/* Bitset representing status of connection. */
+enum ip_conntrack_status {
+       /* It's an expected connection: bit 0 set.  This bit never changed */
+       IPS_EXPECTED_BIT = 0,
+       IPS_EXPECTED = (1 << IPS_EXPECTED_BIT),
+
+       /* We've seen packets both ways: bit 1 set.  Can be set, not unset. */
+       IPS_SEEN_REPLY_BIT = 1,
+       IPS_SEEN_REPLY = (1 << IPS_SEEN_REPLY_BIT),
+
+       /* Conntrack should never be early-expired. */
+       IPS_ASSURED_BIT = 2,
+       IPS_ASSURED = (1 << IPS_ASSURED_BIT),
+
+       /* Connection is confirmed: originating packet has left box */
+       IPS_CONFIRMED_BIT = 3,
+       IPS_CONFIRMED = (1 << IPS_CONFIRMED_BIT),
+
+       /* Connection needs src nat in orig dir.  This bit never changed. */
+       IPS_SRC_NAT_BIT = 4,
+       IPS_SRC_NAT = (1 << IPS_SRC_NAT_BIT),
+
+       /* Connection needs dst nat in orig dir.  This bit never changed. */
+       IPS_DST_NAT_BIT = 5,
+       IPS_DST_NAT = (1 << IPS_DST_NAT_BIT),
+
+       /* Both together. */
+       IPS_NAT_MASK = (IPS_DST_NAT | IPS_SRC_NAT),
+
+       /* Connection needs TCP sequence adjusted. */
+       IPS_SEQ_ADJUST_BIT = 6,
+       IPS_SEQ_ADJUST = (1 << IPS_SEQ_ADJUST_BIT),
+
+       /* NAT initialization bits. */
+       IPS_SRC_NAT_DONE_BIT = 7,
+       IPS_SRC_NAT_DONE = (1 << IPS_SRC_NAT_DONE_BIT),
+
+       IPS_DST_NAT_DONE_BIT = 8,
+       IPS_DST_NAT_DONE = (1 << IPS_DST_NAT_DONE_BIT),
+
+       /* Both together */
+       IPS_NAT_DONE_MASK = (IPS_DST_NAT_DONE | IPS_SRC_NAT_DONE),
+
+       /* Connection is dying (removed from lists), can not be unset. */
+       IPS_DYING_BIT = 9,
+       IPS_DYING = (1 << IPS_DYING_BIT),
+
+       /* Connection has fixed timeout. */
+       IPS_FIXED_TIMEOUT_BIT = 10,
+       IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT),
+
+       /* Conntrack is a template */
+       IPS_TEMPLATE_BIT = 11,
+       IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT),
+
+       /* Conntrack is a fake untracked entry */
+       IPS_UNTRACKED_BIT = 12,
+       IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
+
+       /* Conntrack got a helper explicitly attached via CT target. */
+       IPS_HELPER_BIT = 13,
+       IPS_HELPER = (1 << IPS_HELPER_BIT),
+};
+
+/* Connection tracking event types */
+enum ip_conntrack_events {
+       IPCT_NEW,               /* new conntrack */
+       IPCT_RELATED,           /* related conntrack */
+       IPCT_DESTROY,           /* destroyed conntrack */
+       IPCT_REPLY,             /* connection has seen two-way traffic */
+       IPCT_ASSURED,           /* connection status has changed to assured */
+       IPCT_PROTOINFO,         /* protocol information has changed */
+       IPCT_HELPER,            /* new helper has been set */
+       IPCT_MARK,              /* new mark has been set */
+       IPCT_SEQADJ,            /* sequence adjustment has changed */
+       IPCT_NATSEQADJ = IPCT_SEQADJ,
+       IPCT_SECMARK,           /* new security mark has been set */
+       IPCT_LABEL,             /* new connlabel has been set */
+};
+
+enum ip_conntrack_expect_events {
+       IPEXP_NEW,              /* new expectation */
+       IPEXP_DESTROY,          /* destroyed expectation */
+};
+
+/* expectation flags */
+#define NF_CT_EXPECT_PERMANENT         0x1
+#define NF_CT_EXPECT_INACTIVE          0x2
+#define NF_CT_EXPECT_USERSPACE         0x4
+
+
+#endif /* _NF_CONNTRACK_COMMON_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_conntrack_ftp.h b/lib/libdss-include/include/linux/netfilter/nf_conntrack_ftp.h
new file mode 100644 (file)
index 0000000..a222fac
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _NF_CONNTRACK_FTP_H
+#define _NF_CONNTRACK_FTP_H
+/* FTP tracking. */
+
+/* This enum is exposed to userspace */
+enum nf_ct_ftp_type {
+       /* PORT command from client */
+       NF_CT_FTP_PORT,
+       /* PASV response from server */
+       NF_CT_FTP_PASV,
+       /* EPRT command from client */
+       NF_CT_FTP_EPRT,
+       /* EPSV response from server */
+       NF_CT_FTP_EPSV,
+};
+
+
+#endif /* _NF_CONNTRACK_FTP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_conntrack_sctp.h b/lib/libdss-include/include/linux/netfilter/nf_conntrack_sctp.h
new file mode 100644 (file)
index 0000000..ed4e776
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _NF_CONNTRACK_SCTP_H
+#define _NF_CONNTRACK_SCTP_H
+/* SCTP tracking. */
+
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+enum sctp_conntrack {
+       SCTP_CONNTRACK_NONE,
+       SCTP_CONNTRACK_CLOSED,
+       SCTP_CONNTRACK_COOKIE_WAIT,
+       SCTP_CONNTRACK_COOKIE_ECHOED,
+       SCTP_CONNTRACK_ESTABLISHED,
+       SCTP_CONNTRACK_SHUTDOWN_SENT,
+       SCTP_CONNTRACK_SHUTDOWN_RECD,
+       SCTP_CONNTRACK_SHUTDOWN_ACK_SENT,
+       SCTP_CONNTRACK_HEARTBEAT_SENT,
+       SCTP_CONNTRACK_HEARTBEAT_ACKED,
+       SCTP_CONNTRACK_MAX
+};
+
+struct ip_ct_sctp {
+       enum sctp_conntrack state;
+
+       __be32 vtag[IP_CT_DIR_MAX];
+};
+
+#endif /* _NF_CONNTRACK_SCTP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_conntrack_tcp.h b/lib/libdss-include/include/linux/netfilter/nf_conntrack_tcp.h
new file mode 100644 (file)
index 0000000..c3ffd0c
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _NF_CONNTRACK_TCP_H
+#define _NF_CONNTRACK_TCP_H
+/* TCP tracking. */
+
+#include <linux/types.h>
+
+/* This is exposed to userspace (ctnetlink) */
+enum tcp_conntrack {
+       TCP_CONNTRACK_NONE,
+       TCP_CONNTRACK_SYN_SENT,
+       TCP_CONNTRACK_SYN_RECV,
+       TCP_CONNTRACK_ESTABLISHED,
+       TCP_CONNTRACK_FIN_WAIT,
+       TCP_CONNTRACK_CLOSE_WAIT,
+       TCP_CONNTRACK_LAST_ACK,
+       TCP_CONNTRACK_TIME_WAIT,
+       TCP_CONNTRACK_CLOSE,
+       TCP_CONNTRACK_LISTEN,   /* obsolete */
+#define TCP_CONNTRACK_SYN_SENT2        TCP_CONNTRACK_LISTEN
+       TCP_CONNTRACK_MAX,
+       TCP_CONNTRACK_IGNORE,
+       TCP_CONNTRACK_RETRANS,
+       TCP_CONNTRACK_UNACK,
+       TCP_CONNTRACK_TIMEOUT_MAX
+};
+
+/* Window scaling is advertised by the sender */
+#define IP_CT_TCP_FLAG_WINDOW_SCALE            0x01
+
+/* SACK is permitted by the sender */
+#define IP_CT_TCP_FLAG_SACK_PERM               0x02
+
+/* This sender sent FIN first */
+#define IP_CT_TCP_FLAG_CLOSE_INIT              0x04
+
+/* Be liberal in window checking */
+#define IP_CT_TCP_FLAG_BE_LIBERAL              0x08
+
+/* Has unacknowledged data */
+#define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED     0x10
+
+/* The field td_maxack has been set */
+#define IP_CT_TCP_FLAG_MAXACK_SET              0x20
+
+/* Marks possibility for expected RFC5961 challenge ACK */
+#define IP_CT_EXP_CHALLENGE_ACK                0x40
+
+struct nf_ct_tcp_flags {
+       __u8 flags;
+       __u8 mask;
+};
+
+
+#endif /* _NF_CONNTRACK_TCP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_conntrack_tuple_common.h b/lib/libdss-include/include/linux/netfilter/nf_conntrack_tuple_common.h
new file mode 100644 (file)
index 0000000..2f6bbc5
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _NF_CONNTRACK_TUPLE_COMMON_H
+#define _NF_CONNTRACK_TUPLE_COMMON_H
+
+enum ip_conntrack_dir {
+       IP_CT_DIR_ORIGINAL,
+       IP_CT_DIR_REPLY,
+       IP_CT_DIR_MAX
+};
+
+/* The protocol-specific manipulable parts of the tuple: always in
+ * network order
+ */
+union nf_conntrack_man_proto {
+       /* Add other protocols here. */
+       __be16 all;
+
+       struct {
+               __be16 port;
+       } tcp;
+       struct {
+               __be16 port;
+       } udp;
+       struct {
+               __be16 id;
+       } icmp;
+       struct {
+               __be16 port;
+       } dccp;
+       struct {
+               __be16 port;
+       } sctp;
+       struct {
+               __be16 key;     /* GRE key is 32bit, PPtP only uses 16bit */
+       } gre;
+};
+
+#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
+
+#endif /* _NF_CONNTRACK_TUPLE_COMMON_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_nat.h b/lib/libdss-include/include/linux/netfilter/nf_nat.h
new file mode 100644 (file)
index 0000000..0880781
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _NETFILTER_NF_NAT_H
+#define _NETFILTER_NF_NAT_H
+
+#include <linux/netfilter.h>
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+#define NF_NAT_RANGE_MAP_IPS                   (1 << 0)
+#define NF_NAT_RANGE_PROTO_SPECIFIED           (1 << 1)
+#define NF_NAT_RANGE_PROTO_RANDOM              (1 << 2)
+#define NF_NAT_RANGE_PERSISTENT                        (1 << 3)
+#define NF_NAT_RANGE_PROTO_RANDOM_FULLY                (1 << 4)
+
+#define NF_NAT_RANGE_PROTO_RANDOM_ALL          \
+       (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
+
+#define NF_NAT_RANGE_MASK                                      \
+       (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED |  \
+        NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT |  \
+        NF_NAT_RANGE_PROTO_RANDOM_FULLY)
+
+struct nf_nat_ipv4_range {
+       unsigned int                    flags;
+       __be32                          min_ip;
+       __be32                          max_ip;
+       union nf_conntrack_man_proto    min;
+       union nf_conntrack_man_proto    max;
+};
+
+struct nf_nat_ipv4_multi_range_compat {
+       unsigned int                    rangesize;
+       struct nf_nat_ipv4_range        range[1];
+};
+
+struct nf_nat_range {
+       unsigned int                    flags;
+       union nf_inet_addr              min_addr;
+       union nf_inet_addr              max_addr;
+       union nf_conntrack_man_proto    min_proto;
+       union nf_conntrack_man_proto    max_proto;
+};
+
+#endif /* _NETFILTER_NF_NAT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_tables.h b/lib/libdss-include/include/linux/netfilter/nf_tables.h
new file mode 100644 (file)
index 0000000..d8c8a7c
--- /dev/null
@@ -0,0 +1,973 @@
+#ifndef _LINUX_NF_TABLES_H
+#define _LINUX_NF_TABLES_H
+
+#define NFT_TABLE_MAXNAMELEN   32
+#define NFT_CHAIN_MAXNAMELEN   32
+#define NFT_USERDATA_MAXLEN    256
+
+/**
+ * enum nft_registers - nf_tables registers
+ *
+ * nf_tables used to have five registers: a verdict register and four data
+ * registers of size 16. The data registers have been changed to 16 registers
+ * of size 4. For compatibility reasons, the NFT_REG_[1-4] registers still
+ * map to areas of size 16, the 4 byte registers are addressed using
+ * NFT_REG32_00 - NFT_REG32_15.
+ */
+enum nft_registers {
+       NFT_REG_VERDICT,
+       NFT_REG_1,
+       NFT_REG_2,
+       NFT_REG_3,
+       NFT_REG_4,
+       __NFT_REG_MAX,
+
+       NFT_REG32_00    = 8,
+       MFT_REG32_01,
+       NFT_REG32_02,
+       NFT_REG32_03,
+       NFT_REG32_04,
+       NFT_REG32_05,
+       NFT_REG32_06,
+       NFT_REG32_07,
+       NFT_REG32_08,
+       NFT_REG32_09,
+       NFT_REG32_10,
+       NFT_REG32_11,
+       NFT_REG32_12,
+       NFT_REG32_13,
+       NFT_REG32_14,
+       NFT_REG32_15,
+};
+#define NFT_REG_MAX    (__NFT_REG_MAX - 1)
+
+#define NFT_REG_SIZE   16
+#define NFT_REG32_SIZE 4
+
+/**
+ * enum nft_verdicts - nf_tables internal verdicts
+ *
+ * @NFT_CONTINUE: continue evaluation of the current rule
+ * @NFT_BREAK: terminate evaluation of the current rule
+ * @NFT_JUMP: push the current chain on the jump stack and jump to a chain
+ * @NFT_GOTO: jump to a chain without pushing the current chain on the jump stack
+ * @NFT_RETURN: return to the topmost chain on the jump stack
+ *
+ * The nf_tables verdicts share their numeric space with the netfilter verdicts.
+ */
+enum nft_verdicts {
+       NFT_CONTINUE    = -1,
+       NFT_BREAK       = -2,
+       NFT_JUMP        = -3,
+       NFT_GOTO        = -4,
+       NFT_RETURN      = -5,
+};
+
+/**
+ * enum nf_tables_msg_types - nf_tables netlink message types
+ *
+ * @NFT_MSG_NEWTABLE: create a new table (enum nft_table_attributes)
+ * @NFT_MSG_GETTABLE: get a table (enum nft_table_attributes)
+ * @NFT_MSG_DELTABLE: delete a table (enum nft_table_attributes)
+ * @NFT_MSG_NEWCHAIN: create a new chain (enum nft_chain_attributes)
+ * @NFT_MSG_GETCHAIN: get a chain (enum nft_chain_attributes)
+ * @NFT_MSG_DELCHAIN: delete a chain (enum nft_chain_attributes)
+ * @NFT_MSG_NEWRULE: create a new rule (enum nft_rule_attributes)
+ * @NFT_MSG_GETRULE: get a rule (enum nft_rule_attributes)
+ * @NFT_MSG_DELRULE: delete a rule (enum nft_rule_attributes)
+ * @NFT_MSG_NEWSET: create a new set (enum nft_set_attributes)
+ * @NFT_MSG_GETSET: get a set (enum nft_set_attributes)
+ * @NFT_MSG_DELSET: delete a set (enum nft_set_attributes)
+ * @NFT_MSG_NEWSETELEM: create a new set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_GETSETELEM: get a set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_DELSETELEM: delete a set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_NEWGEN: announce a new generation, only for events (enum nft_gen_attributes)
+ * @NFT_MSG_GETGEN: get the rule-set generation (enum nft_gen_attributes)
+ */
+enum nf_tables_msg_types {
+       NFT_MSG_NEWTABLE,
+       NFT_MSG_GETTABLE,
+       NFT_MSG_DELTABLE,
+       NFT_MSG_NEWCHAIN,
+       NFT_MSG_GETCHAIN,
+       NFT_MSG_DELCHAIN,
+       NFT_MSG_NEWRULE,
+       NFT_MSG_GETRULE,
+       NFT_MSG_DELRULE,
+       NFT_MSG_NEWSET,
+       NFT_MSG_GETSET,
+       NFT_MSG_DELSET,
+       NFT_MSG_NEWSETELEM,
+       NFT_MSG_GETSETELEM,
+       NFT_MSG_DELSETELEM,
+       NFT_MSG_NEWGEN,
+       NFT_MSG_GETGEN,
+       NFT_MSG_MAX,
+};
+
+/**
+ * enum nft_list_attributes - nf_tables generic list netlink attributes
+ *
+ * @NFTA_LIST_ELEM: list element (NLA_NESTED)
+ */
+enum nft_list_attributes {
+       NFTA_LIST_UNPEC,
+       NFTA_LIST_ELEM,
+       __NFTA_LIST_MAX
+};
+#define NFTA_LIST_MAX          (__NFTA_LIST_MAX - 1)
+
+/**
+ * enum nft_hook_attributes - nf_tables netfilter hook netlink attributes
+ *
+ * @NFTA_HOOK_HOOKNUM: netfilter hook number (NLA_U32)
+ * @NFTA_HOOK_PRIORITY: netfilter hook priority (NLA_U32)
+ * @NFTA_HOOK_DEV: netdevice name (NLA_STRING)
+ */
+enum nft_hook_attributes {
+       NFTA_HOOK_UNSPEC,
+       NFTA_HOOK_HOOKNUM,
+       NFTA_HOOK_PRIORITY,
+       NFTA_HOOK_DEV,
+       __NFTA_HOOK_MAX
+};
+#define NFTA_HOOK_MAX          (__NFTA_HOOK_MAX - 1)
+
+/**
+ * enum nft_table_flags - nf_tables table flags
+ *
+ * @NFT_TABLE_F_DORMANT: this table is not active
+ */
+enum nft_table_flags {
+       NFT_TABLE_F_DORMANT     = 0x1,
+};
+
+/**
+ * enum nft_table_attributes - nf_tables table netlink attributes
+ *
+ * @NFTA_TABLE_NAME: name of the table (NLA_STRING)
+ * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32)
+ * @NFTA_TABLE_USE: number of chains in this table (NLA_U32)
+ */
+enum nft_table_attributes {
+       NFTA_TABLE_UNSPEC,
+       NFTA_TABLE_NAME,
+       NFTA_TABLE_FLAGS,
+       NFTA_TABLE_USE,
+       __NFTA_TABLE_MAX
+};
+#define NFTA_TABLE_MAX         (__NFTA_TABLE_MAX - 1)
+
+/**
+ * enum nft_chain_attributes - nf_tables chain netlink attributes
+ *
+ * @NFTA_CHAIN_TABLE: name of the table containing the chain (NLA_STRING)
+ * @NFTA_CHAIN_HANDLE: numeric handle of the chain (NLA_U64)
+ * @NFTA_CHAIN_NAME: name of the chain (NLA_STRING)
+ * @NFTA_CHAIN_HOOK: hook specification for basechains (NLA_NESTED: nft_hook_attributes)
+ * @NFTA_CHAIN_POLICY: numeric policy of the chain (NLA_U32)
+ * @NFTA_CHAIN_USE: number of references to this chain (NLA_U32)
+ * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
+ * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes)
+ */
+enum nft_chain_attributes {
+       NFTA_CHAIN_UNSPEC,
+       NFTA_CHAIN_TABLE,
+       NFTA_CHAIN_HANDLE,
+       NFTA_CHAIN_NAME,
+       NFTA_CHAIN_HOOK,
+       NFTA_CHAIN_POLICY,
+       NFTA_CHAIN_USE,
+       NFTA_CHAIN_TYPE,
+       NFTA_CHAIN_COUNTERS,
+       __NFTA_CHAIN_MAX
+};
+#define NFTA_CHAIN_MAX         (__NFTA_CHAIN_MAX - 1)
+
+/**
+ * enum nft_rule_attributes - nf_tables rule netlink attributes
+ *
+ * @NFTA_RULE_TABLE: name of the table containing the rule (NLA_STRING)
+ * @NFTA_RULE_CHAIN: name of the chain containing the rule (NLA_STRING)
+ * @NFTA_RULE_HANDLE: numeric handle of the rule (NLA_U64)
+ * @NFTA_RULE_EXPRESSIONS: list of expressions (NLA_NESTED: nft_expr_attributes)
+ * @NFTA_RULE_COMPAT: compatibility specifications of the rule (NLA_NESTED: nft_rule_compat_attributes)
+ * @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64)
+ * @NFTA_RULE_USERDATA: user data (NLA_BINARY, NFT_USERDATA_MAXLEN)
+ */
+enum nft_rule_attributes {
+       NFTA_RULE_UNSPEC,
+       NFTA_RULE_TABLE,
+       NFTA_RULE_CHAIN,
+       NFTA_RULE_HANDLE,
+       NFTA_RULE_EXPRESSIONS,
+       NFTA_RULE_COMPAT,
+       NFTA_RULE_POSITION,
+       NFTA_RULE_USERDATA,
+       __NFTA_RULE_MAX
+};
+#define NFTA_RULE_MAX          (__NFTA_RULE_MAX - 1)
+
+/**
+ * enum nft_rule_compat_flags - nf_tables rule compat flags
+ *
+ * @NFT_RULE_COMPAT_F_INV: invert the check result
+ */
+enum nft_rule_compat_flags {
+       NFT_RULE_COMPAT_F_INV   = (1 << 1),
+       NFT_RULE_COMPAT_F_MASK  = NFT_RULE_COMPAT_F_INV,
+};
+
+/**
+ * enum nft_rule_compat_attributes - nf_tables rule compat attributes
+ *
+ * @NFTA_RULE_COMPAT_PROTO: numerice value of handled protocol (NLA_U32)
+ * @NFTA_RULE_COMPAT_FLAGS: bitmask of enum nft_rule_compat_flags (NLA_U32)
+ */
+enum nft_rule_compat_attributes {
+       NFTA_RULE_COMPAT_UNSPEC,
+       NFTA_RULE_COMPAT_PROTO,
+       NFTA_RULE_COMPAT_FLAGS,
+       __NFTA_RULE_COMPAT_MAX
+};
+#define NFTA_RULE_COMPAT_MAX   (__NFTA_RULE_COMPAT_MAX - 1)
+
+/**
+ * enum nft_set_flags - nf_tables set flags
+ *
+ * @NFT_SET_ANONYMOUS: name allocation, automatic cleanup on unlink
+ * @NFT_SET_CONSTANT: set contents may not change while bound
+ * @NFT_SET_INTERVAL: set contains intervals
+ * @NFT_SET_MAP: set is used as a dictionary
+ * @NFT_SET_TIMEOUT: set uses timeouts
+ * @NFT_SET_EVAL: set contains expressions for evaluation
+ */
+enum nft_set_flags {
+       NFT_SET_ANONYMOUS               = 0x1,
+       NFT_SET_CONSTANT                = 0x2,
+       NFT_SET_INTERVAL                = 0x4,
+       NFT_SET_MAP                     = 0x8,
+       NFT_SET_TIMEOUT                 = 0x10,
+       NFT_SET_EVAL                    = 0x20,
+};
+
+/**
+ * enum nft_set_policies - set selection policy
+ *
+ * @NFT_SET_POL_PERFORMANCE: prefer high performance over low memory use
+ * @NFT_SET_POL_MEMORY: prefer low memory use over high performance
+ */
+enum nft_set_policies {
+       NFT_SET_POL_PERFORMANCE,
+       NFT_SET_POL_MEMORY,
+};
+
+/**
+ * enum nft_set_desc_attributes - set element description
+ *
+ * @NFTA_SET_DESC_SIZE: number of elements in set (NLA_U32)
+ */
+enum nft_set_desc_attributes {
+       NFTA_SET_DESC_UNSPEC,
+       NFTA_SET_DESC_SIZE,
+       __NFTA_SET_DESC_MAX
+};
+#define NFTA_SET_DESC_MAX      (__NFTA_SET_DESC_MAX - 1)
+
+/**
+ * enum nft_set_attributes - nf_tables set netlink attributes
+ *
+ * @NFTA_SET_TABLE: table name (NLA_STRING)
+ * @NFTA_SET_NAME: set name (NLA_STRING)
+ * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32)
+ * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32)
+ * @NFTA_SET_KEY_LEN: key data length (NLA_U32)
+ * @NFTA_SET_DATA_TYPE: mapping data type (NLA_U32)
+ * @NFTA_SET_DATA_LEN: mapping data length (NLA_U32)
+ * @NFTA_SET_POLICY: selection policy (NLA_U32)
+ * @NFTA_SET_DESC: set description (NLA_NESTED)
+ * @NFTA_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ * @NFTA_SET_TIMEOUT: default timeout value (NLA_U64)
+ * @NFTA_SET_GC_INTERVAL: garbage collection interval (NLA_U32)
+ */
+enum nft_set_attributes {
+       NFTA_SET_UNSPEC,
+       NFTA_SET_TABLE,
+       NFTA_SET_NAME,
+       NFTA_SET_FLAGS,
+       NFTA_SET_KEY_TYPE,
+       NFTA_SET_KEY_LEN,
+       NFTA_SET_DATA_TYPE,
+       NFTA_SET_DATA_LEN,
+       NFTA_SET_POLICY,
+       NFTA_SET_DESC,
+       NFTA_SET_ID,
+       NFTA_SET_TIMEOUT,
+       NFTA_SET_GC_INTERVAL,
+       __NFTA_SET_MAX
+};
+#define NFTA_SET_MAX           (__NFTA_SET_MAX - 1)
+
+/**
+ * enum nft_set_elem_flags - nf_tables set element flags
+ *
+ * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
+ */
+enum nft_set_elem_flags {
+       NFT_SET_ELEM_INTERVAL_END       = 0x1,
+};
+
+/**
+ * enum nft_set_elem_attributes - nf_tables set element netlink attributes
+ *
+ * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data)
+ * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes)
+ * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32)
+ * @NFTA_SET_ELEM_TIMEOUT: timeout value (NLA_U64)
+ * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64)
+ * @NFTA_SET_ELEM_USERDATA: user data (NLA_BINARY)
+ * @NFTA_SET_ELEM_EXPR: expression (NLA_NESTED: nft_expr_attributes)
+ */
+enum nft_set_elem_attributes {
+       NFTA_SET_ELEM_UNSPEC,
+       NFTA_SET_ELEM_KEY,
+       NFTA_SET_ELEM_DATA,
+       NFTA_SET_ELEM_FLAGS,
+       NFTA_SET_ELEM_TIMEOUT,
+       NFTA_SET_ELEM_EXPIRATION,
+       NFTA_SET_ELEM_USERDATA,
+       NFTA_SET_ELEM_EXPR,
+       __NFTA_SET_ELEM_MAX
+};
+#define NFTA_SET_ELEM_MAX      (__NFTA_SET_ELEM_MAX - 1)
+
+/**
+ * enum nft_set_elem_list_attributes - nf_tables set element list netlink attributes
+ *
+ * @NFTA_SET_ELEM_LIST_TABLE: table of the set to be changed (NLA_STRING)
+ * @NFTA_SET_ELEM_LIST_SET: name of the set to be changed (NLA_STRING)
+ * @NFTA_SET_ELEM_LIST_ELEMENTS: list of set elements (NLA_NESTED: nft_set_elem_attributes)
+ * @NFTA_SET_ELEM_LIST_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ */
+enum nft_set_elem_list_attributes {
+       NFTA_SET_ELEM_LIST_UNSPEC,
+       NFTA_SET_ELEM_LIST_TABLE,
+       NFTA_SET_ELEM_LIST_SET,
+       NFTA_SET_ELEM_LIST_ELEMENTS,
+       NFTA_SET_ELEM_LIST_SET_ID,
+       __NFTA_SET_ELEM_LIST_MAX
+};
+#define NFTA_SET_ELEM_LIST_MAX (__NFTA_SET_ELEM_LIST_MAX - 1)
+
+/**
+ * enum nft_data_types - nf_tables data types
+ *
+ * @NFT_DATA_VALUE: generic data
+ * @NFT_DATA_VERDICT: netfilter verdict
+ *
+ * The type of data is usually determined by the kernel directly and is not
+ * explicitly specified by userspace. The only difference are sets, where
+ * userspace specifies the key and mapping data types.
+ *
+ * The values 0xffffff00-0xffffffff are reserved for internally used types.
+ * The remaining range can be freely used by userspace to encode types, all
+ * values are equivalent to NFT_DATA_VALUE.
+ */
+enum nft_data_types {
+       NFT_DATA_VALUE,
+       NFT_DATA_VERDICT        = 0xffffff00U,
+};
+
+#define NFT_DATA_RESERVED_MASK 0xffffff00U
+
+/**
+ * enum nft_data_attributes - nf_tables data netlink attributes
+ *
+ * @NFTA_DATA_VALUE: generic data (NLA_BINARY)
+ * @NFTA_DATA_VERDICT: nf_tables verdict (NLA_NESTED: nft_verdict_attributes)
+ */
+enum nft_data_attributes {
+       NFTA_DATA_UNSPEC,
+       NFTA_DATA_VALUE,
+       NFTA_DATA_VERDICT,
+       __NFTA_DATA_MAX
+};
+#define NFTA_DATA_MAX          (__NFTA_DATA_MAX - 1)
+
+/* Maximum length of a value */
+#define NFT_DATA_VALUE_MAXLEN  64
+
+/**
+ * enum nft_verdict_attributes - nf_tables verdict netlink attributes
+ *
+ * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts)
+ * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING)
+ */
+enum nft_verdict_attributes {
+       NFTA_VERDICT_UNSPEC,
+       NFTA_VERDICT_CODE,
+       NFTA_VERDICT_CHAIN,
+       __NFTA_VERDICT_MAX
+};
+#define NFTA_VERDICT_MAX       (__NFTA_VERDICT_MAX - 1)
+
+/**
+ * enum nft_expr_attributes - nf_tables expression netlink attributes
+ *
+ * @NFTA_EXPR_NAME: name of the expression type (NLA_STRING)
+ * @NFTA_EXPR_DATA: type specific data (NLA_NESTED)
+ */
+enum nft_expr_attributes {
+       NFTA_EXPR_UNSPEC,
+       NFTA_EXPR_NAME,
+       NFTA_EXPR_DATA,
+       __NFTA_EXPR_MAX
+};
+#define NFTA_EXPR_MAX          (__NFTA_EXPR_MAX - 1)
+
+/**
+ * enum nft_immediate_attributes - nf_tables immediate expression netlink attributes
+ *
+ * @NFTA_IMMEDIATE_DREG: destination register to load data into (NLA_U32)
+ * @NFTA_IMMEDIATE_DATA: data to load (NLA_NESTED: nft_data_attributes)
+ */
+enum nft_immediate_attributes {
+       NFTA_IMMEDIATE_UNSPEC,
+       NFTA_IMMEDIATE_DREG,
+       NFTA_IMMEDIATE_DATA,
+       __NFTA_IMMEDIATE_MAX
+};
+#define NFTA_IMMEDIATE_MAX     (__NFTA_IMMEDIATE_MAX - 1)
+
+/**
+ * enum nft_bitwise_attributes - nf_tables bitwise expression netlink attributes
+ *
+ * @NFTA_BITWISE_SREG: source register (NLA_U32: nft_registers)
+ * @NFTA_BITWISE_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_BITWISE_LEN: length of operands (NLA_U32)
+ * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)
+ * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)
+ *
+ * The bitwise expression performs the following operation:
+ *
+ * dreg = (sreg & mask) ^ xor
+ *
+ * which allow to express all bitwise operations:
+ *
+ *             mask    xor
+ * NOT:                1       1
+ * OR:         0       x
+ * XOR:                1       x
+ * AND:                x       0
+ */
+enum nft_bitwise_attributes {
+       NFTA_BITWISE_UNSPEC,
+       NFTA_BITWISE_SREG,
+       NFTA_BITWISE_DREG,
+       NFTA_BITWISE_LEN,
+       NFTA_BITWISE_MASK,
+       NFTA_BITWISE_XOR,
+       __NFTA_BITWISE_MAX
+};
+#define NFTA_BITWISE_MAX       (__NFTA_BITWISE_MAX - 1)
+
+/**
+ * enum nft_byteorder_ops - nf_tables byteorder operators
+ *
+ * @NFT_BYTEORDER_NTOH: network to host operator
+ * @NFT_BYTEORDER_HTON: host to network opertaor
+ */
+enum nft_byteorder_ops {
+       NFT_BYTEORDER_NTOH,
+       NFT_BYTEORDER_HTON,
+};
+
+/**
+ * enum nft_byteorder_attributes - nf_tables byteorder expression netlink attributes
+ *
+ * @NFTA_BYTEORDER_SREG: source register (NLA_U32: nft_registers)
+ * @NFTA_BYTEORDER_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_BYTEORDER_OP: operator (NLA_U32: enum nft_byteorder_ops)
+ * @NFTA_BYTEORDER_LEN: length of the data (NLA_U32)
+ * @NFTA_BYTEORDER_SIZE: data size in bytes (NLA_U32: 2 or 4)
+ */
+enum nft_byteorder_attributes {
+       NFTA_BYTEORDER_UNSPEC,
+       NFTA_BYTEORDER_SREG,
+       NFTA_BYTEORDER_DREG,
+       NFTA_BYTEORDER_OP,
+       NFTA_BYTEORDER_LEN,
+       NFTA_BYTEORDER_SIZE,
+       __NFTA_BYTEORDER_MAX
+};
+#define NFTA_BYTEORDER_MAX     (__NFTA_BYTEORDER_MAX - 1)
+
+/**
+ * enum nft_cmp_ops - nf_tables relational operator
+ *
+ * @NFT_CMP_EQ: equal
+ * @NFT_CMP_NEQ: not equal
+ * @NFT_CMP_LT: less than
+ * @NFT_CMP_LTE: less than or equal to
+ * @NFT_CMP_GT: greater than
+ * @NFT_CMP_GTE: greater than or equal to
+ */
+enum nft_cmp_ops {
+       NFT_CMP_EQ,
+       NFT_CMP_NEQ,
+       NFT_CMP_LT,
+       NFT_CMP_LTE,
+       NFT_CMP_GT,
+       NFT_CMP_GTE,
+};
+
+/**
+ * enum nft_cmp_attributes - nf_tables cmp expression netlink attributes
+ *
+ * @NFTA_CMP_SREG: source register of data to compare (NLA_U32: nft_registers)
+ * @NFTA_CMP_OP: cmp operation (NLA_U32: nft_cmp_ops)
+ * @NFTA_CMP_DATA: data to compare against (NLA_NESTED: nft_data_attributes)
+ */
+enum nft_cmp_attributes {
+       NFTA_CMP_UNSPEC,
+       NFTA_CMP_SREG,
+       NFTA_CMP_OP,
+       NFTA_CMP_DATA,
+       __NFTA_CMP_MAX
+};
+#define NFTA_CMP_MAX           (__NFTA_CMP_MAX - 1)
+
+/**
+ * enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes
+ *
+ * @NFTA_LOOKUP_SET: name of the set where to look for (NLA_STRING)
+ * @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers)
+ * @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_LOOKUP_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ */
+enum nft_lookup_attributes {
+       NFTA_LOOKUP_UNSPEC,
+       NFTA_LOOKUP_SET,
+       NFTA_LOOKUP_SREG,
+       NFTA_LOOKUP_DREG,
+       NFTA_LOOKUP_SET_ID,
+       __NFTA_LOOKUP_MAX
+};
+#define NFTA_LOOKUP_MAX                (__NFTA_LOOKUP_MAX - 1)
+
+enum nft_dynset_ops {
+       NFT_DYNSET_OP_ADD,
+       NFT_DYNSET_OP_UPDATE,
+};
+
+/**
+ * enum nft_dynset_attributes - dynset expression attributes
+ *
+ * @NFTA_DYNSET_SET_NAME: name of set the to add data to (NLA_STRING)
+ * @NFTA_DYNSET_SET_ID: uniquely identifier of the set in the transaction (NLA_U32)
+ * @NFTA_DYNSET_OP: operation (NLA_U32)
+ * @NFTA_DYNSET_SREG_KEY: source register of the key (NLA_U32)
+ * @NFTA_DYNSET_SREG_DATA: source register of the data (NLA_U32)
+ * @NFTA_DYNSET_TIMEOUT: timeout value for the new element (NLA_U64)
+ * @NFTA_DYNSET_EXPR: expression (NLA_NESTED: nft_expr_attributes)
+ */
+enum nft_dynset_attributes {
+       NFTA_DYNSET_UNSPEC,
+       NFTA_DYNSET_SET_NAME,
+       NFTA_DYNSET_SET_ID,
+       NFTA_DYNSET_OP,
+       NFTA_DYNSET_SREG_KEY,
+       NFTA_DYNSET_SREG_DATA,
+       NFTA_DYNSET_TIMEOUT,
+       NFTA_DYNSET_EXPR,
+       __NFTA_DYNSET_MAX,
+};
+#define NFTA_DYNSET_MAX                (__NFTA_DYNSET_MAX - 1)
+
+/**
+ * enum nft_payload_bases - nf_tables payload expression offset bases
+ *
+ * @NFT_PAYLOAD_LL_HEADER: link layer header
+ * @NFT_PAYLOAD_NETWORK_HEADER: network header
+ * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header
+ */
+enum nft_payload_bases {
+       NFT_PAYLOAD_LL_HEADER,
+       NFT_PAYLOAD_NETWORK_HEADER,
+       NFT_PAYLOAD_TRANSPORT_HEADER,
+};
+
+/**
+ * enum nft_payload_attributes - nf_tables payload expression netlink attributes
+ *
+ * @NFTA_PAYLOAD_DREG: destination register to load data into (NLA_U32: nft_registers)
+ * @NFTA_PAYLOAD_BASE: payload base (NLA_U32: nft_payload_bases)
+ * @NFTA_PAYLOAD_OFFSET: payload offset relative to base (NLA_U32)
+ * @NFTA_PAYLOAD_LEN: payload length (NLA_U32)
+ */
+enum nft_payload_attributes {
+       NFTA_PAYLOAD_UNSPEC,
+       NFTA_PAYLOAD_DREG,
+       NFTA_PAYLOAD_BASE,
+       NFTA_PAYLOAD_OFFSET,
+       NFTA_PAYLOAD_LEN,
+       __NFTA_PAYLOAD_MAX
+};
+#define NFTA_PAYLOAD_MAX       (__NFTA_PAYLOAD_MAX - 1)
+
+/**
+ * enum nft_exthdr_attributes - nf_tables IPv6 extension header expression netlink attributes
+ *
+ * @NFTA_EXTHDR_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_EXTHDR_TYPE: extension header type (NLA_U8)
+ * @NFTA_EXTHDR_OFFSET: extension header offset (NLA_U32)
+ * @NFTA_EXTHDR_LEN: extension header length (NLA_U32)
+ */
+enum nft_exthdr_attributes {
+       NFTA_EXTHDR_UNSPEC,
+       NFTA_EXTHDR_DREG,
+       NFTA_EXTHDR_TYPE,
+       NFTA_EXTHDR_OFFSET,
+       NFTA_EXTHDR_LEN,
+       __NFTA_EXTHDR_MAX
+};
+#define NFTA_EXTHDR_MAX                (__NFTA_EXTHDR_MAX - 1)
+
+/**
+ * enum nft_meta_keys - nf_tables meta expression keys
+ *
+ * @NFT_META_LEN: packet length (skb->len)
+ * @NFT_META_PROTOCOL: packet ethertype protocol (skb->protocol), invalid in OUTPUT
+ * @NFT_META_PRIORITY: packet priority (skb->priority)
+ * @NFT_META_MARK: packet mark (skb->mark)
+ * @NFT_META_IIF: packet input interface index (dev->ifindex)
+ * @NFT_META_OIF: packet output interface index (dev->ifindex)
+ * @NFT_META_IIFNAME: packet input interface name (dev->name)
+ * @NFT_META_OIFNAME: packet output interface name (dev->name)
+ * @NFT_META_IIFTYPE: packet input interface type (dev->type)
+ * @NFT_META_OIFTYPE: packet output interface type (dev->type)
+ * @NFT_META_SKUID: originating socket UID (fsuid)
+ * @NFT_META_SKGID: originating socket GID (fsgid)
+ * @NFT_META_NFTRACE: packet nftrace bit
+ * @NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid)
+ * @NFT_META_SECMARK: packet secmark (skb->secmark)
+ * @NFT_META_NFPROTO: netfilter protocol
+ * @NFT_META_L4PROTO: layer 4 protocol number
+ * @NFT_META_BRI_IIFNAME: packet input bridge interface name
+ * @NFT_META_BRI_OIFNAME: packet output bridge interface name
+ * @NFT_META_PKTTYPE: packet type (skb->pkt_type), special handling for loopback
+ * @NFT_META_CPU: cpu id through smp_processor_id()
+ * @NFT_META_IIFGROUP: packet input interface group
+ * @NFT_META_OIFGROUP: packet output interface group
+ * @NFT_META_CGROUP: socket control group (skb->sk->sk_classid)
+ */
+enum nft_meta_keys {
+       NFT_META_LEN,
+       NFT_META_PROTOCOL,
+       NFT_META_PRIORITY,
+       NFT_META_MARK,
+       NFT_META_IIF,
+       NFT_META_OIF,
+       NFT_META_IIFNAME,
+       NFT_META_OIFNAME,
+       NFT_META_IIFTYPE,
+       NFT_META_OIFTYPE,
+       NFT_META_SKUID,
+       NFT_META_SKGID,
+       NFT_META_NFTRACE,
+       NFT_META_RTCLASSID,
+       NFT_META_SECMARK,
+       NFT_META_NFPROTO,
+       NFT_META_L4PROTO,
+       NFT_META_BRI_IIFNAME,
+       NFT_META_BRI_OIFNAME,
+       NFT_META_PKTTYPE,
+       NFT_META_CPU,
+       NFT_META_IIFGROUP,
+       NFT_META_OIFGROUP,
+       NFT_META_CGROUP,
+};
+
+/**
+ * enum nft_meta_attributes - nf_tables meta expression netlink attributes
+ *
+ * @NFTA_META_DREG: destination register (NLA_U32)
+ * @NFTA_META_KEY: meta data item to load (NLA_U32: nft_meta_keys)
+ * @NFTA_META_SREG: source register (NLA_U32)
+ */
+enum nft_meta_attributes {
+       NFTA_META_UNSPEC,
+       NFTA_META_DREG,
+       NFTA_META_KEY,
+       NFTA_META_SREG,
+       __NFTA_META_MAX
+};
+#define NFTA_META_MAX          (__NFTA_META_MAX - 1)
+
+/**
+ * enum nft_ct_keys - nf_tables ct expression keys
+ *
+ * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info)
+ * @NFT_CT_DIRECTION: conntrack direction (enum ip_conntrack_dir)
+ * @NFT_CT_STATUS: conntrack status (bitmask of enum ip_conntrack_status)
+ * @NFT_CT_MARK: conntrack mark value
+ * @NFT_CT_SECMARK: conntrack secmark value
+ * @NFT_CT_EXPIRATION: relative conntrack expiration time in ms
+ * @NFT_CT_HELPER: connection tracking helper assigned to conntrack
+ * @NFT_CT_L3PROTOCOL: conntrack layer 3 protocol
+ * @NFT_CT_SRC: conntrack layer 3 protocol source (IPv4/IPv6 address)
+ * @NFT_CT_DST: conntrack layer 3 protocol destination (IPv4/IPv6 address)
+ * @NFT_CT_PROTOCOL: conntrack layer 4 protocol
+ * @NFT_CT_PROTO_SRC: conntrack layer 4 protocol source
+ * @NFT_CT_PROTO_DST: conntrack layer 4 protocol destination
+ */
+enum nft_ct_keys {
+       NFT_CT_STATE,
+       NFT_CT_DIRECTION,
+       NFT_CT_STATUS,
+       NFT_CT_MARK,
+       NFT_CT_SECMARK,
+       NFT_CT_EXPIRATION,
+       NFT_CT_HELPER,
+       NFT_CT_L3PROTOCOL,
+       NFT_CT_SRC,
+       NFT_CT_DST,
+       NFT_CT_PROTOCOL,
+       NFT_CT_PROTO_SRC,
+       NFT_CT_PROTO_DST,
+       NFT_CT_LABELS,
+};
+
+/**
+ * enum nft_ct_attributes - nf_tables ct expression netlink attributes
+ *
+ * @NFTA_CT_DREG: destination register (NLA_U32)
+ * @NFTA_CT_KEY: conntrack data item to load (NLA_U32: nft_ct_keys)
+ * @NFTA_CT_DIRECTION: direction in case of directional keys (NLA_U8)
+ * @NFTA_CT_SREG: source register (NLA_U32)
+ */
+enum nft_ct_attributes {
+       NFTA_CT_UNSPEC,
+       NFTA_CT_DREG,
+       NFTA_CT_KEY,
+       NFTA_CT_DIRECTION,
+       NFTA_CT_SREG,
+       __NFTA_CT_MAX
+};
+#define NFTA_CT_MAX            (__NFTA_CT_MAX - 1)
+
+enum nft_limit_type {
+       NFT_LIMIT_PKTS,
+       NFT_LIMIT_PKT_BYTES
+};
+
+/**
+ * enum nft_limit_attributes - nf_tables limit expression netlink attributes
+ *
+ * @NFTA_LIMIT_RATE: refill rate (NLA_U64)
+ * @NFTA_LIMIT_UNIT: refill unit (NLA_U64)
+ * @NFTA_LIMIT_BURST: burst (NLA_U32)
+ * @NFTA_LIMIT_TYPE: type of limit (NLA_U32: enum nft_limit_type)
+ */
+enum nft_limit_attributes {
+       NFTA_LIMIT_UNSPEC,
+       NFTA_LIMIT_RATE,
+       NFTA_LIMIT_UNIT,
+       NFTA_LIMIT_BURST,
+       NFTA_LIMIT_TYPE,
+       __NFTA_LIMIT_MAX
+};
+#define NFTA_LIMIT_MAX         (__NFTA_LIMIT_MAX - 1)
+
+/**
+ * enum nft_counter_attributes - nf_tables counter expression netlink attributes
+ *
+ * @NFTA_COUNTER_BYTES: number of bytes (NLA_U64)
+ * @NFTA_COUNTER_PACKETS: number of packets (NLA_U64)
+ */
+enum nft_counter_attributes {
+       NFTA_COUNTER_UNSPEC,
+       NFTA_COUNTER_BYTES,
+       NFTA_COUNTER_PACKETS,
+       __NFTA_COUNTER_MAX
+};
+#define NFTA_COUNTER_MAX       (__NFTA_COUNTER_MAX - 1)
+
+/**
+ * enum nft_log_attributes - nf_tables log expression netlink attributes
+ *
+ * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32)
+ * @NFTA_LOG_PREFIX: prefix to prepend to log messages (NLA_STRING)
+ * @NFTA_LOG_SNAPLEN: length of payload to include in netlink message (NLA_U32)
+ * @NFTA_LOG_QTHRESHOLD: queue threshold (NLA_U32)
+ * @NFTA_LOG_LEVEL: log level (NLA_U32)
+ * @NFTA_LOG_FLAGS: logging flags (NLA_U32)
+ */
+enum nft_log_attributes {
+       NFTA_LOG_UNSPEC,
+       NFTA_LOG_GROUP,
+       NFTA_LOG_PREFIX,
+       NFTA_LOG_SNAPLEN,
+       NFTA_LOG_QTHRESHOLD,
+       NFTA_LOG_LEVEL,
+       NFTA_LOG_FLAGS,
+       __NFTA_LOG_MAX
+};
+#define NFTA_LOG_MAX           (__NFTA_LOG_MAX - 1)
+
+/**
+ * enum nft_queue_attributes - nf_tables queue expression netlink attributes
+ *
+ * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16)
+ * @NFTA_QUEUE_TOTAL: number of queues to load balance packets on (NLA_U16)
+ * @NFTA_QUEUE_FLAGS: various flags (NLA_U16)
+ */
+enum nft_queue_attributes {
+       NFTA_QUEUE_UNSPEC,
+       NFTA_QUEUE_NUM,
+       NFTA_QUEUE_TOTAL,
+       NFTA_QUEUE_FLAGS,
+       __NFTA_QUEUE_MAX
+};
+#define NFTA_QUEUE_MAX         (__NFTA_QUEUE_MAX - 1)
+
+#define NFT_QUEUE_FLAG_BYPASS          0x01 /* for compatibility with v2 */
+#define NFT_QUEUE_FLAG_CPU_FANOUT      0x02 /* use current CPU (no hashing) */
+#define NFT_QUEUE_FLAG_MASK            0x03
+
+/**
+ * enum nft_reject_types - nf_tables reject expression reject types
+ *
+ * @NFT_REJECT_ICMP_UNREACH: reject using ICMP unreachable
+ * @NFT_REJECT_TCP_RST: reject using TCP RST
+ * @NFT_REJECT_ICMPX_UNREACH: abstracted ICMP unreachable for bridge and inet
+ */
+enum nft_reject_types {
+       NFT_REJECT_ICMP_UNREACH,
+       NFT_REJECT_TCP_RST,
+       NFT_REJECT_ICMPX_UNREACH,
+};
+
+/**
+ * enum nft_reject_code - Generic reject codes for IPv4/IPv6
+ *
+ * @NFT_REJECT_ICMPX_NO_ROUTE: no route to host / network unreachable
+ * @NFT_REJECT_ICMPX_PORT_UNREACH: port unreachable
+ * @NFT_REJECT_ICMPX_HOST_UNREACH: host unreachable
+ * @NFT_REJECT_ICMPX_ADMIN_PROHIBITED: administratively prohibited
+ *
+ * These codes are mapped to real ICMP and ICMPv6 codes.
+ */
+enum nft_reject_inet_code {
+       NFT_REJECT_ICMPX_NO_ROUTE       = 0,
+       NFT_REJECT_ICMPX_PORT_UNREACH,
+       NFT_REJECT_ICMPX_HOST_UNREACH,
+       NFT_REJECT_ICMPX_ADMIN_PROHIBITED,
+       __NFT_REJECT_ICMPX_MAX
+};
+#define NFT_REJECT_ICMPX_MAX   (__NFT_REJECT_ICMPX_MAX - 1)
+
+/**
+ * enum nft_reject_attributes - nf_tables reject expression netlink attributes
+ *
+ * @NFTA_REJECT_TYPE: packet type to use (NLA_U32: nft_reject_types)
+ * @NFTA_REJECT_ICMP_CODE: ICMP code to use (NLA_U8)
+ */
+enum nft_reject_attributes {
+       NFTA_REJECT_UNSPEC,
+       NFTA_REJECT_TYPE,
+       NFTA_REJECT_ICMP_CODE,
+       __NFTA_REJECT_MAX
+};
+#define NFTA_REJECT_MAX                (__NFTA_REJECT_MAX - 1)
+
+/**
+ * enum nft_nat_types - nf_tables nat expression NAT types
+ *
+ * @NFT_NAT_SNAT: source NAT
+ * @NFT_NAT_DNAT: destination NAT
+ */
+enum nft_nat_types {
+       NFT_NAT_SNAT,
+       NFT_NAT_DNAT,
+};
+
+/**
+ * enum nft_nat_attributes - nf_tables nat expression netlink attributes
+ *
+ * @NFTA_NAT_TYPE: NAT type (NLA_U32: nft_nat_types)
+ * @NFTA_NAT_FAMILY: NAT family (NLA_U32)
+ * @NFTA_NAT_REG_ADDR_MIN: source register of address range start (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_ADDR_MAX: source register of address range end (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
+ * @NFTA_NAT_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_nat_attributes {
+       NFTA_NAT_UNSPEC,
+       NFTA_NAT_TYPE,
+       NFTA_NAT_FAMILY,
+       NFTA_NAT_REG_ADDR_MIN,
+       NFTA_NAT_REG_ADDR_MAX,
+       NFTA_NAT_REG_PROTO_MIN,
+       NFTA_NAT_REG_PROTO_MAX,
+       NFTA_NAT_FLAGS,
+       __NFTA_NAT_MAX
+};
+#define NFTA_NAT_MAX           (__NFTA_NAT_MAX - 1)
+
+/**
+ * enum nft_masq_attributes - nf_tables masquerade expression attributes
+ *
+ * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_masq_attributes {
+       NFTA_MASQ_UNSPEC,
+       NFTA_MASQ_FLAGS,
+       __NFTA_MASQ_MAX
+};
+#define NFTA_MASQ_MAX          (__NFTA_MASQ_MAX - 1)
+
+/**
+ * enum nft_redir_attributes - nf_tables redirect expression netlink attributes
+ *
+ * @NFTA_REDIR_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
+ * @NFTA_REDIR_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
+ * @NFTA_REDIR_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_redir_attributes {
+       NFTA_REDIR_UNSPEC,
+       NFTA_REDIR_REG_PROTO_MIN,
+       NFTA_REDIR_REG_PROTO_MAX,
+       NFTA_REDIR_FLAGS,
+       __NFTA_REDIR_MAX
+};
+#define NFTA_REDIR_MAX         (__NFTA_REDIR_MAX - 1)
+
+/**
+ * enum nft_dup_attributes - nf_tables dup expression netlink attributes
+ *
+ * @NFTA_DUP_SREG_ADDR: source register of address (NLA_U32: nft_registers)
+ * @NFTA_DUP_SREG_DEV: source register of output interface (NLA_U32: nft_register)
+ */
+enum nft_dup_attributes {
+       NFTA_DUP_UNSPEC,
+       NFTA_DUP_SREG_ADDR,
+       NFTA_DUP_SREG_DEV,
+       __NFTA_DUP_MAX
+};
+#define NFTA_DUP_MAX           (__NFTA_DUP_MAX - 1)
+
+/**
+ * enum nft_gen_attributes - nf_tables ruleset generation attributes
+ *
+ * @NFTA_GEN_ID: Ruleset generation ID (NLA_U32)
+ */
+enum nft_gen_attributes {
+       NFTA_GEN_UNSPEC,
+       NFTA_GEN_ID,
+       __NFTA_GEN_MAX
+};
+#define NFTA_GEN_MAX           (__NFTA_GEN_MAX - 1)
+
+#endif /* _LINUX_NF_TABLES_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nf_tables_compat.h b/lib/libdss-include/include/linux/netfilter/nf_tables_compat.h
new file mode 100644 (file)
index 0000000..8310f5f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef _NFT_COMPAT_NFNETLINK_H_
+#define _NFT_COMPAT_NFNETLINK_H_
+
+enum nft_target_attributes {
+       NFTA_TARGET_UNSPEC,
+       NFTA_TARGET_NAME,
+       NFTA_TARGET_REV,
+       NFTA_TARGET_INFO,
+       __NFTA_TARGET_MAX
+};
+#define NFTA_TARGET_MAX                (__NFTA_TARGET_MAX - 1)
+
+enum nft_match_attributes {
+       NFTA_MATCH_UNSPEC,
+       NFTA_MATCH_NAME,
+       NFTA_MATCH_REV,
+       NFTA_MATCH_INFO,
+       __NFTA_MATCH_MAX
+};
+#define NFTA_MATCH_MAX         (__NFTA_MATCH_MAX - 1)
+
+#define NFT_COMPAT_NAME_MAX    32
+
+enum {
+       NFNL_MSG_COMPAT_GET,
+       NFNL_MSG_COMPAT_MAX
+};
+
+enum {
+       NFTA_COMPAT_UNSPEC = 0,
+       NFTA_COMPAT_NAME,
+       NFTA_COMPAT_REV,
+       NFTA_COMPAT_TYPE,
+       __NFTA_COMPAT_MAX,
+};
+#define NFTA_COMPAT_MAX (__NFTA_COMPAT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink.h b/lib/libdss-include/include/linux/netfilter/nfnetlink.h
new file mode 100644 (file)
index 0000000..c755646
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _NFNETLINK_H
+#define _NFNETLINK_H
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink_compat.h>
+
+enum nfnetlink_groups {
+       NFNLGRP_NONE,
+#define NFNLGRP_NONE                   NFNLGRP_NONE
+       NFNLGRP_CONNTRACK_NEW,
+#define NFNLGRP_CONNTRACK_NEW          NFNLGRP_CONNTRACK_NEW
+       NFNLGRP_CONNTRACK_UPDATE,
+#define NFNLGRP_CONNTRACK_UPDATE       NFNLGRP_CONNTRACK_UPDATE
+       NFNLGRP_CONNTRACK_DESTROY,
+#define NFNLGRP_CONNTRACK_DESTROY      NFNLGRP_CONNTRACK_DESTROY
+       NFNLGRP_CONNTRACK_EXP_NEW,
+#define        NFNLGRP_CONNTRACK_EXP_NEW       NFNLGRP_CONNTRACK_EXP_NEW
+       NFNLGRP_CONNTRACK_EXP_UPDATE,
+#define NFNLGRP_CONNTRACK_EXP_UPDATE   NFNLGRP_CONNTRACK_EXP_UPDATE
+       NFNLGRP_CONNTRACK_EXP_DESTROY,
+#define NFNLGRP_CONNTRACK_EXP_DESTROY  NFNLGRP_CONNTRACK_EXP_DESTROY
+       NFNLGRP_NFTABLES,
+#define NFNLGRP_NFTABLES                NFNLGRP_NFTABLES
+       NFNLGRP_ACCT_QUOTA,
+#define NFNLGRP_ACCT_QUOTA             NFNLGRP_ACCT_QUOTA
+       __NFNLGRP_MAX,
+};
+#define NFNLGRP_MAX    (__NFNLGRP_MAX - 1)
+
+/* General form of address family dependent message.
+ */
+struct nfgenmsg {
+       __u8  nfgen_family;             /* AF_xxx */
+       __u8  version;          /* nfnetlink version */
+       __be16    res_id;               /* resource id */
+};
+
+#define NFNETLINK_V0   0
+
+/* netfilter netlink message types are split in two pieces:
+ * 8 bit subsystem, 8bit operation.
+ */
+
+#define NFNL_SUBSYS_ID(x)      ((x & 0xff00) >> 8)
+#define NFNL_MSG_TYPE(x)       (x & 0x00ff)
+
+/* No enum here, otherwise __stringify() trick of MODULE_ALIAS_NFNL_SUBSYS()
+ * won't work anymore */
+#define NFNL_SUBSYS_NONE               0
+#define NFNL_SUBSYS_CTNETLINK          1
+#define NFNL_SUBSYS_CTNETLINK_EXP      2
+#define NFNL_SUBSYS_QUEUE              3
+#define NFNL_SUBSYS_ULOG               4
+#define NFNL_SUBSYS_OSF                        5
+#define NFNL_SUBSYS_IPSET              6
+#define NFNL_SUBSYS_ACCT               7
+#define NFNL_SUBSYS_CTNETLINK_TIMEOUT  8
+#define NFNL_SUBSYS_CTHELPER           9
+#define NFNL_SUBSYS_NFTABLES           10
+#define NFNL_SUBSYS_NFT_COMPAT         11
+#define NFNL_SUBSYS_COUNT              12
+
+/* Reserved control nfnetlink messages */
+#define NFNL_MSG_BATCH_BEGIN           NLMSG_MIN_TYPE
+#define NFNL_MSG_BATCH_END             NLMSG_MIN_TYPE+1
+
+#endif /* _NFNETLINK_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_acct.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_acct.h
new file mode 100644 (file)
index 0000000..98b6286
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _NFNL_ACCT_H_
+#define _NFNL_ACCT_H_
+
+#ifndef NFACCT_NAME_MAX
+#define NFACCT_NAME_MAX                32
+#endif
+
+enum nfnl_acct_msg_types {
+       NFNL_MSG_ACCT_NEW,
+       NFNL_MSG_ACCT_GET,
+       NFNL_MSG_ACCT_GET_CTRZERO,
+       NFNL_MSG_ACCT_DEL,
+       NFNL_MSG_ACCT_OVERQUOTA,
+       NFNL_MSG_ACCT_MAX
+};
+
+enum nfnl_acct_flags {
+       NFACCT_F_QUOTA_PKTS     = (1 << 0),
+       NFACCT_F_QUOTA_BYTES    = (1 << 1),
+       NFACCT_F_OVERQUOTA      = (1 << 2), /* can't be set from userspace */
+};
+
+enum nfnl_acct_type {
+       NFACCT_UNSPEC,
+       NFACCT_NAME,
+       NFACCT_PKTS,
+       NFACCT_BYTES,
+       NFACCT_USE,
+       NFACCT_FLAGS,
+       NFACCT_QUOTA,
+       NFACCT_FILTER,
+       __NFACCT_MAX
+};
+#define NFACCT_MAX (__NFACCT_MAX - 1)
+
+enum nfnl_attr_filter_type {
+       NFACCT_FILTER_UNSPEC,
+       NFACCT_FILTER_MASK,
+       NFACCT_FILTER_VALUE,
+       __NFACCT_FILTER_MAX
+};
+#define NFACCT_FILTER_MAX (__NFACCT_FILTER_MAX - 1)
+
+#endif /* _NFNL_ACCT_H_ */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_compat.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_compat.h
new file mode 100644 (file)
index 0000000..74b9e55
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _NFNETLINK_COMPAT_H
+#define _NFNETLINK_COMPAT_H
+
+#include <linux/types.h>
+
+/* Old nfnetlink macros for userspace */
+
+/* nfnetlink groups: Up to 32 maximum */
+#define NF_NETLINK_CONNTRACK_NEW               0x00000001
+#define NF_NETLINK_CONNTRACK_UPDATE            0x00000002
+#define NF_NETLINK_CONNTRACK_DESTROY           0x00000004
+#define NF_NETLINK_CONNTRACK_EXP_NEW           0x00000008
+#define NF_NETLINK_CONNTRACK_EXP_UPDATE                0x00000010
+#define NF_NETLINK_CONNTRACK_EXP_DESTROY       0x00000020
+
+/* Generic structure for encapsulation optional netfilter information.
+ * It is reminiscent of sockaddr, but with sa_family replaced
+ * with attribute type.
+ * ! This should someday be put somewhere generic as now rtnetlink and
+ * ! nfnetlink use the same attributes methods. - J. Schulist.
+ */
+
+struct nfattr {
+       __u16 nfa_len;
+       __u16 nfa_type; /* we use 15 bits for the type, and the highest
+                                * bit to indicate whether the payload is nested */
+};
+
+/* FIXME: Apart from NFNL_NFA_NESTED shamelessly copy and pasted from
+ * rtnetlink.h, it's time to put this in a generic file */
+
+#define NFNL_NFA_NEST  0x8000
+#define NFA_TYPE(attr)         ((attr)->nfa_type & 0x7fff)
+
+#define NFA_ALIGNTO     4
+#define NFA_ALIGN(len) (((len) + NFA_ALIGNTO - 1) & ~(NFA_ALIGNTO - 1))
+#define NFA_OK(nfa,len)        ((len) > 0 && (nfa)->nfa_len >= sizeof(struct nfattr) \
+       && (nfa)->nfa_len <= (len))
+#define NFA_NEXT(nfa,attrlen)  ((attrlen) -= NFA_ALIGN((nfa)->nfa_len), \
+       (struct nfattr *)(((char *)(nfa)) + NFA_ALIGN((nfa)->nfa_len)))
+#define NFA_LENGTH(len)        (NFA_ALIGN(sizeof(struct nfattr)) + (len))
+#define NFA_SPACE(len) NFA_ALIGN(NFA_LENGTH(len))
+#define NFA_DATA(nfa)   ((void *)(((char *)(nfa)) + NFA_LENGTH(0)))
+#define NFA_PAYLOAD(nfa) ((int)((nfa)->nfa_len) - NFA_LENGTH(0))
+#define NFA_NEST(skb, type) \
+({     struct nfattr *__start = (struct nfattr *)skb_tail_pointer(skb); \
+       NFA_PUT(skb, (NFNL_NFA_NEST | type), 0, NULL); \
+       __start;  })
+#define NFA_NEST_END(skb, start) \
+({      (start)->nfa_len = skb_tail_pointer(skb) - (unsigned char *)(start); \
+        (skb)->len; })
+#define NFA_NEST_CANCEL(skb, start) \
+({      if (start) \
+                skb_trim(skb, (unsigned char *) (start) - (skb)->data); \
+        -1; })
+
+#define NFM_NFA(n)      ((struct nfattr *)(((char *)(n)) \
+        + NLMSG_ALIGN(sizeof(struct nfgenmsg))))
+#define NFM_PAYLOAD(n)  NLMSG_PAYLOAD(n, sizeof(struct nfgenmsg))
+
+#endif /* _NFNETLINK_COMPAT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_conntrack.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_conntrack.h
new file mode 100644 (file)
index 0000000..c1a4e14
--- /dev/null
@@ -0,0 +1,264 @@
+#ifndef _IPCONNTRACK_NETLINK_H
+#define _IPCONNTRACK_NETLINK_H
+#include <linux/netfilter/nfnetlink.h>
+
+enum cntl_msg_types {
+       IPCTNL_MSG_CT_NEW,
+       IPCTNL_MSG_CT_GET,
+       IPCTNL_MSG_CT_DELETE,
+       IPCTNL_MSG_CT_GET_CTRZERO,
+       IPCTNL_MSG_CT_GET_STATS_CPU,
+       IPCTNL_MSG_CT_GET_STATS,
+       IPCTNL_MSG_CT_GET_DYING,
+       IPCTNL_MSG_CT_GET_UNCONFIRMED,
+
+       IPCTNL_MSG_MAX
+};
+
+enum ctnl_exp_msg_types {
+       IPCTNL_MSG_EXP_NEW,
+       IPCTNL_MSG_EXP_GET,
+       IPCTNL_MSG_EXP_DELETE,
+       IPCTNL_MSG_EXP_GET_STATS_CPU,
+
+       IPCTNL_MSG_EXP_MAX
+};
+
+
+enum ctattr_type {
+       CTA_UNSPEC,
+       CTA_TUPLE_ORIG,
+       CTA_TUPLE_REPLY,
+       CTA_STATUS,
+       CTA_PROTOINFO,
+       CTA_HELP,
+       CTA_NAT_SRC,
+#define CTA_NAT        CTA_NAT_SRC     /* backwards compatibility */
+       CTA_TIMEOUT,
+       CTA_MARK,
+       CTA_COUNTERS_ORIG,
+       CTA_COUNTERS_REPLY,
+       CTA_USE,
+       CTA_ID,
+       CTA_NAT_DST,
+       CTA_TUPLE_MASTER,
+       CTA_SEQ_ADJ_ORIG,
+       CTA_NAT_SEQ_ADJ_ORIG    = CTA_SEQ_ADJ_ORIG,
+       CTA_SEQ_ADJ_REPLY,
+       CTA_NAT_SEQ_ADJ_REPLY   = CTA_SEQ_ADJ_REPLY,
+       CTA_SECMARK,            /* obsolete */
+       CTA_ZONE,
+       CTA_SECCTX,
+       CTA_TIMESTAMP,
+       CTA_MARK_MASK,
+       CTA_LABELS,
+       CTA_LABELS_MASK,
+       __CTA_MAX
+};
+#define CTA_MAX (__CTA_MAX - 1)
+
+enum ctattr_tuple {
+       CTA_TUPLE_UNSPEC,
+       CTA_TUPLE_IP,
+       CTA_TUPLE_PROTO,
+       CTA_TUPLE_ZONE,
+       __CTA_TUPLE_MAX
+};
+#define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1)
+
+enum ctattr_ip {
+       CTA_IP_UNSPEC,
+       CTA_IP_V4_SRC,
+       CTA_IP_V4_DST,
+       CTA_IP_V6_SRC,
+       CTA_IP_V6_DST,
+       __CTA_IP_MAX
+};
+#define CTA_IP_MAX (__CTA_IP_MAX - 1)
+
+enum ctattr_l4proto {
+       CTA_PROTO_UNSPEC,
+       CTA_PROTO_NUM,
+       CTA_PROTO_SRC_PORT,
+       CTA_PROTO_DST_PORT,
+       CTA_PROTO_ICMP_ID,
+       CTA_PROTO_ICMP_TYPE,
+       CTA_PROTO_ICMP_CODE,
+       CTA_PROTO_ICMPV6_ID,
+       CTA_PROTO_ICMPV6_TYPE,
+       CTA_PROTO_ICMPV6_CODE,
+       __CTA_PROTO_MAX
+};
+#define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1)
+
+enum ctattr_protoinfo {
+       CTA_PROTOINFO_UNSPEC,
+       CTA_PROTOINFO_TCP,
+       CTA_PROTOINFO_DCCP,
+       CTA_PROTOINFO_SCTP,
+       __CTA_PROTOINFO_MAX
+};
+#define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
+
+enum ctattr_protoinfo_tcp {
+       CTA_PROTOINFO_TCP_UNSPEC,
+       CTA_PROTOINFO_TCP_STATE,
+       CTA_PROTOINFO_TCP_WSCALE_ORIGINAL,
+       CTA_PROTOINFO_TCP_WSCALE_REPLY,
+       CTA_PROTOINFO_TCP_FLAGS_ORIGINAL,
+       CTA_PROTOINFO_TCP_FLAGS_REPLY,
+       __CTA_PROTOINFO_TCP_MAX
+};
+#define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
+
+enum ctattr_protoinfo_dccp {
+       CTA_PROTOINFO_DCCP_UNSPEC,
+       CTA_PROTOINFO_DCCP_STATE,
+       CTA_PROTOINFO_DCCP_ROLE,
+       CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ,
+       __CTA_PROTOINFO_DCCP_MAX,
+};
+#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1)
+
+enum ctattr_protoinfo_sctp {
+       CTA_PROTOINFO_SCTP_UNSPEC,
+       CTA_PROTOINFO_SCTP_STATE,
+       CTA_PROTOINFO_SCTP_VTAG_ORIGINAL,
+       CTA_PROTOINFO_SCTP_VTAG_REPLY,
+       __CTA_PROTOINFO_SCTP_MAX
+};
+#define CTA_PROTOINFO_SCTP_MAX (__CTA_PROTOINFO_SCTP_MAX - 1)
+
+enum ctattr_counters {
+       CTA_COUNTERS_UNSPEC,
+       CTA_COUNTERS_PACKETS,           /* 64bit counters */
+       CTA_COUNTERS_BYTES,             /* 64bit counters */
+       CTA_COUNTERS32_PACKETS,         /* old 32bit counters, unused */
+       CTA_COUNTERS32_BYTES,           /* old 32bit counters, unused */
+       __CTA_COUNTERS_MAX
+};
+#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
+
+enum ctattr_tstamp {
+       CTA_TIMESTAMP_UNSPEC,
+       CTA_TIMESTAMP_START,
+       CTA_TIMESTAMP_STOP,
+       __CTA_TIMESTAMP_MAX
+};
+#define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1)
+
+enum ctattr_nat {
+       CTA_NAT_UNSPEC,
+       CTA_NAT_V4_MINIP,
+#define CTA_NAT_MINIP CTA_NAT_V4_MINIP
+       CTA_NAT_V4_MAXIP,
+#define CTA_NAT_MAXIP CTA_NAT_V4_MAXIP
+       CTA_NAT_PROTO,
+       CTA_NAT_V6_MINIP,
+       CTA_NAT_V6_MAXIP,
+       __CTA_NAT_MAX
+};
+#define CTA_NAT_MAX (__CTA_NAT_MAX - 1)
+
+enum ctattr_protonat {
+       CTA_PROTONAT_UNSPEC,
+       CTA_PROTONAT_PORT_MIN,
+       CTA_PROTONAT_PORT_MAX,
+       __CTA_PROTONAT_MAX
+};
+#define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1)
+
+enum ctattr_seqadj {
+       CTA_SEQADJ_UNSPEC,
+       CTA_SEQADJ_CORRECTION_POS,
+       CTA_SEQADJ_OFFSET_BEFORE,
+       CTA_SEQADJ_OFFSET_AFTER,
+       __CTA_SEQADJ_MAX
+};
+#define CTA_SEQADJ_MAX (__CTA_SEQADJ_MAX - 1)
+
+enum ctattr_natseq {
+       CTA_NAT_SEQ_UNSPEC,
+       CTA_NAT_SEQ_CORRECTION_POS,
+       CTA_NAT_SEQ_OFFSET_BEFORE,
+       CTA_NAT_SEQ_OFFSET_AFTER,
+       __CTA_NAT_SEQ_MAX
+};
+#define CTA_NAT_SEQ_MAX (__CTA_NAT_SEQ_MAX - 1)
+
+enum ctattr_expect {
+       CTA_EXPECT_UNSPEC,
+       CTA_EXPECT_MASTER,
+       CTA_EXPECT_TUPLE,
+       CTA_EXPECT_MASK,
+       CTA_EXPECT_TIMEOUT,
+       CTA_EXPECT_ID,
+       CTA_EXPECT_HELP_NAME,
+       CTA_EXPECT_ZONE,
+       CTA_EXPECT_FLAGS,
+       CTA_EXPECT_CLASS,
+       CTA_EXPECT_NAT,
+       CTA_EXPECT_FN,
+       __CTA_EXPECT_MAX
+};
+#define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1)
+
+enum ctattr_expect_nat {
+       CTA_EXPECT_NAT_UNSPEC,
+       CTA_EXPECT_NAT_DIR,
+       CTA_EXPECT_NAT_TUPLE,
+       __CTA_EXPECT_NAT_MAX
+};
+#define CTA_EXPECT_NAT_MAX (__CTA_EXPECT_NAT_MAX - 1)
+
+enum ctattr_help {
+       CTA_HELP_UNSPEC,
+       CTA_HELP_NAME,
+       CTA_HELP_INFO,
+       __CTA_HELP_MAX
+};
+#define CTA_HELP_MAX (__CTA_HELP_MAX - 1)
+
+enum ctattr_secctx {
+       CTA_SECCTX_UNSPEC,
+       CTA_SECCTX_NAME,
+       __CTA_SECCTX_MAX
+};
+#define CTA_SECCTX_MAX (__CTA_SECCTX_MAX - 1)
+
+enum ctattr_stats_cpu {
+       CTA_STATS_UNSPEC,
+       CTA_STATS_SEARCHED,
+       CTA_STATS_FOUND,
+       CTA_STATS_NEW,
+       CTA_STATS_INVALID,
+       CTA_STATS_IGNORE,
+       CTA_STATS_DELETE,
+       CTA_STATS_DELETE_LIST,
+       CTA_STATS_INSERT,
+       CTA_STATS_INSERT_FAILED,
+       CTA_STATS_DROP,
+       CTA_STATS_EARLY_DROP,
+       CTA_STATS_ERROR,
+       CTA_STATS_SEARCH_RESTART,
+       __CTA_STATS_MAX,
+};
+#define CTA_STATS_MAX (__CTA_STATS_MAX - 1)
+
+enum ctattr_stats_global {
+       CTA_STATS_GLOBAL_UNSPEC,
+       CTA_STATS_GLOBAL_ENTRIES,
+       __CTA_STATS_GLOBAL_MAX,
+};
+#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1)
+
+enum ctattr_expect_stats {
+       CTA_STATS_EXP_UNSPEC,
+       CTA_STATS_EXP_NEW,
+       CTA_STATS_EXP_CREATE,
+       CTA_STATS_EXP_DELETE,
+       __CTA_STATS_EXP_MAX,
+};
+#define CTA_STATS_EXP_MAX (__CTA_STATS_EXP_MAX - 1)
+
+#endif /* _IPCONNTRACK_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_cthelper.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_cthelper.h
new file mode 100644 (file)
index 0000000..33659f6
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef _NFNL_CTHELPER_H_
+#define _NFNL_CTHELPER_H_
+
+#define NFCT_HELPER_STATUS_DISABLED    0
+#define NFCT_HELPER_STATUS_ENABLED     1
+
+enum nfnl_acct_msg_types {
+       NFNL_MSG_CTHELPER_NEW,
+       NFNL_MSG_CTHELPER_GET,
+       NFNL_MSG_CTHELPER_DEL,
+       NFNL_MSG_CTHELPER_MAX
+};
+
+enum nfnl_cthelper_type {
+       NFCTH_UNSPEC,
+       NFCTH_NAME,
+       NFCTH_TUPLE,
+       NFCTH_QUEUE_NUM,
+       NFCTH_POLICY,
+       NFCTH_PRIV_DATA_LEN,
+       NFCTH_STATUS,
+       __NFCTH_MAX
+};
+#define NFCTH_MAX (__NFCTH_MAX - 1)
+
+enum nfnl_cthelper_policy_type {
+       NFCTH_POLICY_SET_UNSPEC,
+       NFCTH_POLICY_SET_NUM,
+       NFCTH_POLICY_SET,
+       NFCTH_POLICY_SET1       = NFCTH_POLICY_SET,
+       NFCTH_POLICY_SET2,
+       NFCTH_POLICY_SET3,
+       NFCTH_POLICY_SET4,
+       __NFCTH_POLICY_SET_MAX
+};
+#define NFCTH_POLICY_SET_MAX (__NFCTH_POLICY_SET_MAX - 1)
+
+enum nfnl_cthelper_pol_type {
+       NFCTH_POLICY_UNSPEC,
+       NFCTH_POLICY_NAME,
+       NFCTH_POLICY_EXPECT_MAX,
+       NFCTH_POLICY_EXPECT_TIMEOUT,
+       __NFCTH_POLICY_MAX
+};
+#define NFCTH_POLICY_MAX (__NFCTH_POLICY_MAX - 1)
+
+enum nfnl_cthelper_tuple_type {
+       NFCTH_TUPLE_UNSPEC,
+       NFCTH_TUPLE_L3PROTONUM,
+       NFCTH_TUPLE_L4PROTONUM,
+       __NFCTH_TUPLE_MAX,
+};
+#define NFCTH_TUPLE_MAX (__NFCTH_TUPLE_MAX - 1)
+
+#endif /* _NFNL_CTHELPER_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_cttimeout.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_cttimeout.h
new file mode 100644 (file)
index 0000000..f2c10dc
--- /dev/null
@@ -0,0 +1,118 @@
+#ifndef _CTTIMEOUT_NETLINK_H
+#define _CTTIMEOUT_NETLINK_H
+#include <linux/netfilter/nfnetlink.h>
+
+enum ctnl_timeout_msg_types {
+       IPCTNL_MSG_TIMEOUT_NEW,
+       IPCTNL_MSG_TIMEOUT_GET,
+       IPCTNL_MSG_TIMEOUT_DELETE,
+       IPCTNL_MSG_TIMEOUT_DEFAULT_SET,
+       IPCTNL_MSG_TIMEOUT_DEFAULT_GET,
+
+       IPCTNL_MSG_TIMEOUT_MAX
+};
+
+enum ctattr_timeout {
+       CTA_TIMEOUT_UNSPEC,
+       CTA_TIMEOUT_NAME,
+       CTA_TIMEOUT_L3PROTO,
+       CTA_TIMEOUT_L4PROTO,
+       CTA_TIMEOUT_DATA,
+       CTA_TIMEOUT_USE,
+       __CTA_TIMEOUT_MAX
+};
+#define CTA_TIMEOUT_MAX (__CTA_TIMEOUT_MAX - 1)
+
+enum ctattr_timeout_generic {
+       CTA_TIMEOUT_GENERIC_UNSPEC,
+       CTA_TIMEOUT_GENERIC_TIMEOUT,
+       __CTA_TIMEOUT_GENERIC_MAX
+};
+#define CTA_TIMEOUT_GENERIC_MAX (__CTA_TIMEOUT_GENERIC_MAX - 1)
+
+enum ctattr_timeout_tcp {
+       CTA_TIMEOUT_TCP_UNSPEC,
+       CTA_TIMEOUT_TCP_SYN_SENT,
+       CTA_TIMEOUT_TCP_SYN_RECV,
+       CTA_TIMEOUT_TCP_ESTABLISHED,
+       CTA_TIMEOUT_TCP_FIN_WAIT,
+       CTA_TIMEOUT_TCP_CLOSE_WAIT,
+       CTA_TIMEOUT_TCP_LAST_ACK,
+       CTA_TIMEOUT_TCP_TIME_WAIT,
+       CTA_TIMEOUT_TCP_CLOSE,
+       CTA_TIMEOUT_TCP_SYN_SENT2,
+       CTA_TIMEOUT_TCP_RETRANS,
+       CTA_TIMEOUT_TCP_UNACK,
+       __CTA_TIMEOUT_TCP_MAX
+};
+#define CTA_TIMEOUT_TCP_MAX (__CTA_TIMEOUT_TCP_MAX - 1)
+
+enum ctattr_timeout_udp {
+       CTA_TIMEOUT_UDP_UNSPEC,
+       CTA_TIMEOUT_UDP_UNREPLIED,
+       CTA_TIMEOUT_UDP_REPLIED,
+       __CTA_TIMEOUT_UDP_MAX
+};
+#define CTA_TIMEOUT_UDP_MAX (__CTA_TIMEOUT_UDP_MAX - 1)
+
+enum ctattr_timeout_udplite {
+       CTA_TIMEOUT_UDPLITE_UNSPEC,
+       CTA_TIMEOUT_UDPLITE_UNREPLIED,
+       CTA_TIMEOUT_UDPLITE_REPLIED,
+       __CTA_TIMEOUT_UDPLITE_MAX
+};
+#define CTA_TIMEOUT_UDPLITE_MAX (__CTA_TIMEOUT_UDPLITE_MAX - 1)
+
+enum ctattr_timeout_icmp {
+       CTA_TIMEOUT_ICMP_UNSPEC,
+       CTA_TIMEOUT_ICMP_TIMEOUT,
+       __CTA_TIMEOUT_ICMP_MAX
+};
+#define CTA_TIMEOUT_ICMP_MAX (__CTA_TIMEOUT_ICMP_MAX - 1)
+
+enum ctattr_timeout_dccp {
+       CTA_TIMEOUT_DCCP_UNSPEC,
+       CTA_TIMEOUT_DCCP_REQUEST,
+       CTA_TIMEOUT_DCCP_RESPOND,
+       CTA_TIMEOUT_DCCP_PARTOPEN,
+       CTA_TIMEOUT_DCCP_OPEN,
+       CTA_TIMEOUT_DCCP_CLOSEREQ,
+       CTA_TIMEOUT_DCCP_CLOSING,
+       CTA_TIMEOUT_DCCP_TIMEWAIT,
+       __CTA_TIMEOUT_DCCP_MAX
+};
+#define CTA_TIMEOUT_DCCP_MAX (__CTA_TIMEOUT_DCCP_MAX - 1)
+
+enum ctattr_timeout_sctp {
+       CTA_TIMEOUT_SCTP_UNSPEC,
+       CTA_TIMEOUT_SCTP_CLOSED,
+       CTA_TIMEOUT_SCTP_COOKIE_WAIT,
+       CTA_TIMEOUT_SCTP_COOKIE_ECHOED,
+       CTA_TIMEOUT_SCTP_ESTABLISHED,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_SENT,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_RECD,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT,
+       CTA_TIMEOUT_SCTP_HEARTBEAT_SENT,
+       CTA_TIMEOUT_SCTP_HEARTBEAT_ACKED,
+       __CTA_TIMEOUT_SCTP_MAX
+};
+#define CTA_TIMEOUT_SCTP_MAX (__CTA_TIMEOUT_SCTP_MAX - 1)
+
+enum ctattr_timeout_icmpv6 {
+       CTA_TIMEOUT_ICMPV6_UNSPEC,
+       CTA_TIMEOUT_ICMPV6_TIMEOUT,
+       __CTA_TIMEOUT_ICMPV6_MAX
+};
+#define CTA_TIMEOUT_ICMPV6_MAX (__CTA_TIMEOUT_ICMPV6_MAX - 1)
+
+enum ctattr_timeout_gre {
+       CTA_TIMEOUT_GRE_UNSPEC,
+       CTA_TIMEOUT_GRE_UNREPLIED,
+       CTA_TIMEOUT_GRE_REPLIED,
+       __CTA_TIMEOUT_GRE_MAX
+};
+#define CTA_TIMEOUT_GRE_MAX (__CTA_TIMEOUT_GRE_MAX - 1)
+
+#define CTNL_TIMEOUT_NAME_MAX  32
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_log.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_log.h
new file mode 100644 (file)
index 0000000..fb21f0c
--- /dev/null
@@ -0,0 +1,100 @@
+#ifndef _NFNETLINK_LOG_H
+#define _NFNETLINK_LOG_H
+
+/* This file describes the netlink messages (i.e. 'protocol packets'),
+ * and not any kind of function definitions.  It is shared between kernel and
+ * userspace.  Don't put kernel specific stuff in here */
+
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink.h>
+
+enum nfulnl_msg_types {
+       NFULNL_MSG_PACKET,              /* packet from kernel to userspace */
+       NFULNL_MSG_CONFIG,              /* connect to a particular queue */
+
+       NFULNL_MSG_MAX
+};
+
+struct nfulnl_msg_packet_hdr {
+       __be16          hw_protocol;    /* hw protocol (network order) */
+       __u8    hook;           /* netfilter hook */
+       __u8    _pad;
+};
+
+struct nfulnl_msg_packet_hw {
+       __be16          hw_addrlen;
+       __u16   _pad;
+       __u8    hw_addr[8];
+};
+
+struct nfulnl_msg_packet_timestamp {
+       __aligned_be64  sec;
+       __aligned_be64  usec;
+};
+
+enum nfulnl_attr_type {
+       NFULA_UNSPEC,
+       NFULA_PACKET_HDR,
+       NFULA_MARK,                     /* __u32 nfmark */
+       NFULA_TIMESTAMP,                /* nfulnl_msg_packet_timestamp */
+       NFULA_IFINDEX_INDEV,            /* __u32 ifindex */
+       NFULA_IFINDEX_OUTDEV,           /* __u32 ifindex */
+       NFULA_IFINDEX_PHYSINDEV,        /* __u32 ifindex */
+       NFULA_IFINDEX_PHYSOUTDEV,       /* __u32 ifindex */
+       NFULA_HWADDR,                   /* nfulnl_msg_packet_hw */
+       NFULA_PAYLOAD,                  /* opaque data payload */
+       NFULA_PREFIX,                   /* string prefix */
+       NFULA_UID,                      /* user id of socket */
+       NFULA_SEQ,                      /* instance-local sequence number */
+       NFULA_SEQ_GLOBAL,               /* global sequence number */
+       NFULA_GID,                      /* group id of socket */
+       NFULA_HWTYPE,                   /* hardware type */
+       NFULA_HWHEADER,                 /* hardware header */
+       NFULA_HWLEN,                    /* hardware header length */
+       NFULA_CT,                       /* nf_conntrack_netlink.h */
+       NFULA_CT_INFO,                  /* enum ip_conntrack_info */
+
+       __NFULA_MAX
+};
+#define NFULA_MAX (__NFULA_MAX - 1)
+
+enum nfulnl_msg_config_cmds {
+       NFULNL_CFG_CMD_NONE,
+       NFULNL_CFG_CMD_BIND,
+       NFULNL_CFG_CMD_UNBIND,
+       NFULNL_CFG_CMD_PF_BIND,
+       NFULNL_CFG_CMD_PF_UNBIND,
+};
+
+struct nfulnl_msg_config_cmd {
+       __u8    command;        /* nfulnl_msg_config_cmds */
+} __attribute__ ((packed));
+
+struct nfulnl_msg_config_mode {
+       __be32          copy_range;
+       __u8    copy_mode;
+       __u8    _pad;
+} __attribute__ ((packed));
+
+enum nfulnl_attr_config {
+       NFULA_CFG_UNSPEC,
+       NFULA_CFG_CMD,                  /* nfulnl_msg_config_cmd */
+       NFULA_CFG_MODE,                 /* nfulnl_msg_config_mode */
+       NFULA_CFG_NLBUFSIZ,             /* __u32 buffer size */
+       NFULA_CFG_TIMEOUT,              /* __u32 in 1/100 s */
+       NFULA_CFG_QTHRESH,              /* __u32 */
+       NFULA_CFG_FLAGS,                /* __u16 */
+       __NFULA_CFG_MAX
+};
+#define NFULA_CFG_MAX (__NFULA_CFG_MAX -1)
+
+#define NFULNL_COPY_NONE       0x00
+#define NFULNL_COPY_META       0x01
+#define NFULNL_COPY_PACKET     0x02
+/* 0xff is reserved, don't use it for new copy modes. */
+
+#define NFULNL_CFG_F_SEQ       0x0001
+#define NFULNL_CFG_F_SEQ_GLOBAL        0x0002
+#define NFULNL_CFG_F_CONNTRACK 0x0004
+
+#endif /* _NFNETLINK_LOG_H */
diff --git a/lib/libdss-include/include/linux/netfilter/nfnetlink_queue.h b/lib/libdss-include/include/linux/netfilter/nfnetlink_queue.h
new file mode 100644 (file)
index 0000000..b67a853
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef _NFNETLINK_QUEUE_H
+#define _NFNETLINK_QUEUE_H
+
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink.h>
+
+enum nfqnl_msg_types {
+       NFQNL_MSG_PACKET,               /* packet from kernel to userspace */
+       NFQNL_MSG_VERDICT,              /* verdict from userspace to kernel */
+       NFQNL_MSG_CONFIG,               /* connect to a particular queue */
+       NFQNL_MSG_VERDICT_BATCH,        /* batchv from userspace to kernel */
+
+       NFQNL_MSG_MAX
+};
+
+struct nfqnl_msg_packet_hdr {
+       __be32          packet_id;      /* unique ID of packet in queue */
+       __be16          hw_protocol;    /* hw protocol (network order) */
+       __u8    hook;           /* netfilter hook */
+} __attribute__ ((packed));
+
+struct nfqnl_msg_packet_hw {
+       __be16          hw_addrlen;
+       __u16   _pad;
+       __u8    hw_addr[8];
+};
+
+struct nfqnl_msg_packet_timestamp {
+       __aligned_be64  sec;
+       __aligned_be64  usec;
+};
+
+enum nfqnl_attr_type {
+       NFQA_UNSPEC,
+       NFQA_PACKET_HDR,
+       NFQA_VERDICT_HDR,               /* nfqnl_msg_verdict_hrd */
+       NFQA_MARK,                      /* __u32 nfmark */
+       NFQA_TIMESTAMP,                 /* nfqnl_msg_packet_timestamp */
+       NFQA_IFINDEX_INDEV,             /* __u32 ifindex */
+       NFQA_IFINDEX_OUTDEV,            /* __u32 ifindex */
+       NFQA_IFINDEX_PHYSINDEV,         /* __u32 ifindex */
+       NFQA_IFINDEX_PHYSOUTDEV,        /* __u32 ifindex */
+       NFQA_HWADDR,                    /* nfqnl_msg_packet_hw */
+       NFQA_PAYLOAD,                   /* opaque data payload */
+       NFQA_CT,                        /* nf_conntrack_netlink.h */
+       NFQA_CT_INFO,                   /* enum ip_conntrack_info */
+       NFQA_CAP_LEN,                   /* __u32 length of captured packet */
+       NFQA_SKB_INFO,                  /* __u32 skb meta information */
+       NFQA_EXP,                       /* nf_conntrack_netlink.h */
+       NFQA_UID,                       /* __u32 sk uid */
+       NFQA_GID,                       /* __u32 sk gid */
+       NFQA_SECCTX,                    /* security context string */
+
+       __NFQA_MAX
+};
+#define NFQA_MAX (__NFQA_MAX - 1)
+
+struct nfqnl_msg_verdict_hdr {
+       __be32 verdict;
+       __be32 id;
+};
+
+
+enum nfqnl_msg_config_cmds {
+       NFQNL_CFG_CMD_NONE,
+       NFQNL_CFG_CMD_BIND,
+       NFQNL_CFG_CMD_UNBIND,
+       NFQNL_CFG_CMD_PF_BIND,
+       NFQNL_CFG_CMD_PF_UNBIND,
+};
+
+struct nfqnl_msg_config_cmd {
+       __u8    command;        /* nfqnl_msg_config_cmds */
+       __u8    _pad;
+       __be16          pf;             /* AF_xxx for PF_[UN]BIND */
+};
+
+enum nfqnl_config_mode {
+       NFQNL_COPY_NONE,
+       NFQNL_COPY_META,
+       NFQNL_COPY_PACKET,
+};
+
+struct nfqnl_msg_config_params {
+       __be32          copy_range;
+       __u8    copy_mode;      /* enum nfqnl_config_mode */
+} __attribute__ ((packed));
+
+
+enum nfqnl_attr_config {
+       NFQA_CFG_UNSPEC,
+       NFQA_CFG_CMD,                   /* nfqnl_msg_config_cmd */
+       NFQA_CFG_PARAMS,                /* nfqnl_msg_config_params */
+       NFQA_CFG_QUEUE_MAXLEN,          /* __u32 */
+       NFQA_CFG_MASK,                  /* identify which flags to change */
+       NFQA_CFG_FLAGS,                 /* value of these flags (__u32) */
+       __NFQA_CFG_MAX
+};
+#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1)
+
+/* Flags for NFQA_CFG_FLAGS */
+#define NFQA_CFG_F_FAIL_OPEN                   (1 << 0)
+#define NFQA_CFG_F_CONNTRACK                   (1 << 1)
+#define NFQA_CFG_F_GSO                         (1 << 2)
+#define NFQA_CFG_F_UID_GID                     (1 << 3)
+#define NFQA_CFG_F_SECCTX                      (1 << 4)
+#define NFQA_CFG_F_MAX                         (1 << 5)
+
+/* flags for NFQA_SKB_INFO */
+/* packet appears to have wrong checksums, but they are ok */
+#define NFQA_SKB_CSUMNOTREADY (1 << 0)
+/* packet is GSO (i.e., exceeds device mtu) */
+#define NFQA_SKB_GSO (1 << 1)
+/* csum not validated (incoming device doesn't support hw checksum, etc.) */
+#define NFQA_SKB_CSUM_NOTVERIFIED (1 << 2)
+
+#endif /* _NFNETLINK_QUEUE_H */
diff --git a/lib/libdss-include/include/linux/netfilter/x_tables.h b/lib/libdss-include/include/linux/netfilter/x_tables.h
new file mode 100644 (file)
index 0000000..4120970
--- /dev/null
@@ -0,0 +1,185 @@
+#ifndef _X_TABLES_H
+#define _X_TABLES_H
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+#define XT_FUNCTION_MAXNAMELEN 30
+#define XT_EXTENSION_MAXNAMELEN 29
+#define XT_TABLE_MAXNAMELEN 32
+
+struct xt_entry_match {
+       union {
+               struct {
+                       __u16 match_size;
+
+                       /* Used by userspace */
+                       char name[XT_EXTENSION_MAXNAMELEN];
+                       __u8 revision;
+               } user;
+               struct {
+                       __u16 match_size;
+
+                       /* Used inside the kernel */
+                       struct xt_match *match;
+               } kernel;
+
+               /* Total length */
+               __u16 match_size;
+       } u;
+
+       unsigned char data[0];
+};
+
+struct xt_entry_target {
+       union {
+               struct {
+                       __u16 target_size;
+
+                       /* Used by userspace */
+                       char name[XT_EXTENSION_MAXNAMELEN];
+                       __u8 revision;
+               } user;
+               struct {
+                       __u16 target_size;
+
+                       /* Used inside the kernel */
+                       struct xt_target *target;
+               } kernel;
+
+               /* Total length */
+               __u16 target_size;
+       } u;
+
+       unsigned char data[0];
+};
+
+#define XT_TARGET_INIT(__name, __size)                                        \
+{                                                                             \
+       .target.u.user = {                                                     \
+               .target_size    = XT_ALIGN(__size),                            \
+               .name           = __name,                                      \
+       },                                                                     \
+}
+
+struct xt_standard_target {
+       struct xt_entry_target target;
+       int verdict;
+};
+
+struct xt_error_target {
+       struct xt_entry_target target;
+       char errorname[XT_FUNCTION_MAXNAMELEN];
+};
+
+/* The argument to IPT_SO_GET_REVISION_*.  Returns highest revision
+ * kernel supports, if >= revision. */
+struct xt_get_revision {
+       char name[XT_EXTENSION_MAXNAMELEN];
+       __u8 revision;
+};
+
+/* CONTINUE verdict for targets */
+#define XT_CONTINUE 0xFFFFFFFF
+
+/* For standard target */
+#define XT_RETURN (-NF_REPEAT - 1)
+
+/* this is a dummy structure to find out the alignment requirement for a struct
+ * containing all the fundamental data types that are used in ipt_entry,
+ * ip6t_entry and arpt_entry.  This sucks, and it is a hack.  It will be my
+ * personal pleasure to remove it -HW
+ */
+struct _xt_align {
+       __u8 u8;
+       __u16 u16;
+       __u32 u32;
+       __u64 u64;
+};
+
+#define XT_ALIGN(s) __ALIGN_KERNEL((s), __alignof__(struct _xt_align))
+
+/* Standard return verdict, or do jump. */
+#define XT_STANDARD_TARGET ""
+/* Error verdict. */
+#define XT_ERROR_TARGET "ERROR"
+
+#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
+#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
+
+struct xt_counters {
+       __u64 pcnt, bcnt;                       /* Packet and byte counters */
+};
+
+/* The argument to IPT_SO_ADD_COUNTERS. */
+struct xt_counters_info {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       unsigned int num_counters;
+
+       /* The counters (actually `number' of these). */
+       struct xt_counters counters[0];
+};
+
+#define XT_INV_PROTO           0x40    /* Invert the sense of PROTO. */
+
+/* fn returns 0 to continue iteration */
+#define XT_MATCH_ITERATE(type, e, fn, args...)                 \
+({                                                             \
+       unsigned int __i;                                       \
+       int __ret = 0;                                          \
+       struct xt_entry_match *__m;                             \
+                                                               \
+       for (__i = sizeof(type);                                \
+            __i < (e)->target_offset;                          \
+            __i += __m->u.match_size) {                        \
+               __m = (void *)e + __i;                          \
+                                                               \
+               __ret = fn(__m , ## args);                      \
+               if (__ret != 0)                                 \
+                       break;                                  \
+       }                                                       \
+       __ret;                                                  \
+})
+
+/* fn returns 0 to continue iteration */
+#define XT_ENTRY_ITERATE_CONTINUE(type, entries, size, n, fn, args...) \
+({                                                             \
+       unsigned int __i, __n;                                  \
+       int __ret = 0;                                          \
+       type *__entry;                                          \
+                                                               \
+       for (__i = 0, __n = 0; __i < (size);                    \
+            __i += __entry->next_offset, __n++) {              \
+               __entry = (void *)(entries) + __i;              \
+               if (__n < n)                                    \
+                       continue;                               \
+                                                               \
+               __ret = fn(__entry , ## args);                  \
+               if (__ret != 0)                                 \
+                       break;                                  \
+       }                                                       \
+       __ret;                                                  \
+})
+
+/* fn returns 0 to continue iteration */
+#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \
+       XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args)
+
+
+/* pos is normally a struct ipt_entry/ip6t_entry/etc. */
+#define xt_entry_foreach(pos, ehead, esize) \
+       for ((pos) = (typeof(pos))(ehead); \
+            (pos) < (typeof(pos))((char *)(ehead) + (esize)); \
+            (pos) = (typeof(pos))((char *)(pos) + (pos)->next_offset))
+
+/* can only be xt_entry_match, so no use of typeof here */
+#define xt_ematch_foreach(pos, entry) \
+       for ((pos) = (struct xt_entry_match *)entry->elems; \
+            (pos) < (struct xt_entry_match *)((char *)(entry) + \
+                    (entry)->target_offset); \
+            (pos) = (struct xt_entry_match *)((char *)(pos) + \
+                    (pos)->u.match_size))
+
+
+#endif /* _X_TABLES_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_AUDIT.h b/lib/libdss-include/include/linux/netfilter/xt_AUDIT.h
new file mode 100644 (file)
index 0000000..38751d2
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Header file for iptables xt_AUDIT target
+ *
+ * (C) 2010-2011 Thomas Graf <tgraf@redhat.com>
+ * (C) 2010-2011 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _XT_AUDIT_TARGET_H
+#define _XT_AUDIT_TARGET_H
+
+#include <linux/types.h>
+
+enum {
+       XT_AUDIT_TYPE_ACCEPT = 0,
+       XT_AUDIT_TYPE_DROP,
+       XT_AUDIT_TYPE_REJECT,
+       __XT_AUDIT_TYPE_MAX,
+};
+
+#define XT_AUDIT_TYPE_MAX (__XT_AUDIT_TYPE_MAX - 1)
+
+struct xt_audit_info {
+       __u8 type; /* XT_AUDIT_TYPE_* */
+};
+
+#endif /* _XT_AUDIT_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_CHECKSUM.h b/lib/libdss-include/include/linux/netfilter/xt_CHECKSUM.h
new file mode 100644 (file)
index 0000000..9a2e466
--- /dev/null
@@ -0,0 +1,20 @@
+/* Header file for iptables ipt_CHECKSUM target
+ *
+ * (C) 2002 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2010 Red Hat Inc
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+*/
+#ifndef _XT_CHECKSUM_TARGET_H
+#define _XT_CHECKSUM_TARGET_H
+
+#include <linux/types.h>
+
+#define XT_CHECKSUM_OP_FILL    0x01    /* fill in checksum in IP header */
+
+struct xt_CHECKSUM_info {
+       __u8 operation; /* bitset of operations */
+};
+
+#endif /* _XT_CHECKSUM_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_CLASSIFY.h b/lib/libdss-include/include/linux/netfilter/xt_CLASSIFY.h
new file mode 100644 (file)
index 0000000..a813bf1
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _XT_CLASSIFY_H
+#define _XT_CLASSIFY_H
+
+#include <linux/types.h>
+
+struct xt_classify_target_info {
+       __u32 priority;
+};
+
+#endif /*_XT_CLASSIFY_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_CONNMARK.h b/lib/libdss-include/include/linux/netfilter/xt_CONNMARK.h
new file mode 100644 (file)
index 0000000..2f2e48e
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _XT_CONNMARK_H_target
+#define _XT_CONNMARK_H_target
+
+#include <linux/netfilter/xt_connmark.h>
+
+#endif /*_XT_CONNMARK_H_target*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_CONNSECMARK.h b/lib/libdss-include/include/linux/netfilter/xt_CONNSECMARK.h
new file mode 100644 (file)
index 0000000..b973ff8
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_CONNSECMARK_H_target
+#define _XT_CONNSECMARK_H_target
+
+#include <linux/types.h>
+
+enum {
+       CONNSECMARK_SAVE = 1,
+       CONNSECMARK_RESTORE,
+};
+
+struct xt_connsecmark_target_info {
+       __u8 mode;
+};
+
+#endif /*_XT_CONNSECMARK_H_target */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_CT.h b/lib/libdss-include/include/linux/netfilter/xt_CT.h
new file mode 100644 (file)
index 0000000..9e52041
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _XT_CT_H
+#define _XT_CT_H
+
+#include <linux/types.h>
+
+enum {
+       XT_CT_NOTRACK           = 1 << 0,
+       XT_CT_NOTRACK_ALIAS     = 1 << 1,
+       XT_CT_ZONE_DIR_ORIG     = 1 << 2,
+       XT_CT_ZONE_DIR_REPL     = 1 << 3,
+       XT_CT_ZONE_MARK         = 1 << 4,
+
+       XT_CT_MASK              = XT_CT_NOTRACK | XT_CT_NOTRACK_ALIAS |
+                                 XT_CT_ZONE_DIR_ORIG | XT_CT_ZONE_DIR_REPL |
+                                 XT_CT_ZONE_MARK,
+};
+
+struct xt_ct_target_info {
+       __u16 flags;
+       __u16 zone;
+       __u32 ct_events;
+       __u32 exp_events;
+       char helper[16];
+
+       /* Used internally by the kernel */
+       struct nf_conn  *ct __attribute__((aligned(8)));
+};
+
+struct xt_ct_target_info_v1 {
+       __u16 flags;
+       __u16 zone;
+       __u32 ct_events;
+       __u32 exp_events;
+       char helper[16];
+       char timeout[32];
+
+       /* Used internally by the kernel */
+       struct nf_conn  *ct __attribute__((aligned(8)));
+};
+
+#endif /* _XT_CT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_DSCP.h b/lib/libdss-include/include/linux/netfilter/xt_DSCP.h
new file mode 100644 (file)
index 0000000..648e0b3
--- /dev/null
@@ -0,0 +1,26 @@
+/* x_tables module for setting the IPv4/IPv6 DSCP field
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
+ * This software is distributed under GNU GPL v2, 1991
+ *
+ * See RFC2474 for a description of the DSCP field within the IP Header.
+ *
+ * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
+*/
+#ifndef _XT_DSCP_TARGET_H
+#define _XT_DSCP_TARGET_H
+#include <linux/netfilter/xt_dscp.h>
+#include <linux/types.h>
+
+/* target info */
+struct xt_DSCP_info {
+       __u8 dscp;
+};
+
+struct xt_tos_target_info {
+       __u8 tos_value;
+       __u8 tos_mask;
+};
+
+#endif /* _XT_DSCP_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_HMARK.h b/lib/libdss-include/include/linux/netfilter/xt_HMARK.h
new file mode 100644 (file)
index 0000000..826fc58
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef XT_HMARK_H_
+#define XT_HMARK_H_
+
+#include <linux/types.h>
+
+enum {
+       XT_HMARK_SADDR_MASK,
+       XT_HMARK_DADDR_MASK,
+       XT_HMARK_SPI,
+       XT_HMARK_SPI_MASK,
+       XT_HMARK_SPORT,
+       XT_HMARK_DPORT,
+       XT_HMARK_SPORT_MASK,
+       XT_HMARK_DPORT_MASK,
+       XT_HMARK_PROTO_MASK,
+       XT_HMARK_RND,
+       XT_HMARK_MODULUS,
+       XT_HMARK_OFFSET,
+       XT_HMARK_CT,
+       XT_HMARK_METHOD_L3,
+       XT_HMARK_METHOD_L3_4,
+};
+#define XT_HMARK_FLAG(flag)    (1 << flag)
+
+union hmark_ports {
+       struct {
+               __u16   src;
+               __u16   dst;
+       } p16;
+       struct {
+               __be16  src;
+               __be16  dst;
+       } b16;
+       __u32   v32;
+       __be32  b32;
+};
+
+struct xt_hmark_info {
+       union nf_inet_addr      src_mask;
+       union nf_inet_addr      dst_mask;
+       union hmark_ports       port_mask;
+       union hmark_ports       port_set;
+       __u32                   flags;
+       __u16                   proto_mask;
+       __u32                   hashrnd;
+       __u32                   hmodulus;
+       __u32                   hoffset;        /* Mark offset to start from */
+};
+
+#endif /* XT_HMARK_H_ */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_IDLETIMER.h b/lib/libdss-include/include/linux/netfilter/xt_IDLETIMER.h
new file mode 100644 (file)
index 0000000..208ae93
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * linux/include/linux/netfilter/xt_IDLETIMER.h
+ *
+ * Header file for Xtables timer target module.
+ *
+ * Copyright (C) 2004, 2010 Nokia Corporation
+ * Written by Timo Teras <ext-timo.teras@nokia.com>
+ *
+ * Converted to x_tables and forward-ported to 2.6.34
+ * by Luciano Coelho <luciano.coelho@nokia.com>
+ *
+ * Contact: Luciano Coelho <luciano.coelho@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _XT_IDLETIMER_H
+#define _XT_IDLETIMER_H
+
+#include <linux/types.h>
+
+#define MAX_IDLETIMER_LABEL_SIZE 28
+
+struct idletimer_tg_info {
+       __u32 timeout;
+
+       char label[MAX_IDLETIMER_LABEL_SIZE];
+
+       /* for kernel module internal use only */
+       struct idletimer_tg *timer __attribute__((aligned(8)));
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/xt_LED.h b/lib/libdss-include/include/linux/netfilter/xt_LED.h
new file mode 100644 (file)
index 0000000..f5509e7
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_LED_H
+#define _XT_LED_H
+
+#include <linux/types.h>
+
+struct xt_led_info {
+       char id[27];        /* Unique ID for this trigger in the LED class */
+       __u8 always_blink;  /* Blink even if the LED is already on */
+       __u32 delay;        /* Delay until LED is switched off after trigger */
+
+       /* Kernel data used in the module */
+       void *internal_data __attribute__((aligned(8)));
+};
+
+#endif /* _XT_LED_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_LOG.h b/lib/libdss-include/include/linux/netfilter/xt_LOG.h
new file mode 100644 (file)
index 0000000..cac0790
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_LOG_H
+#define _XT_LOG_H
+
+/* make sure not to change this without changing nf_log.h:NF_LOG_* (!) */
+#define XT_LOG_TCPSEQ          0x01    /* Log TCP sequence numbers */
+#define XT_LOG_TCPOPT          0x02    /* Log TCP options */
+#define XT_LOG_IPOPT           0x04    /* Log IP options */
+#define XT_LOG_UID             0x08    /* Log UID owning local socket */
+#define XT_LOG_NFLOG           0x10    /* Unsupported, don't reuse */
+#define XT_LOG_MACDECODE       0x20    /* Decode MAC header */
+#define XT_LOG_MASK            0x2f
+
+struct xt_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /* _XT_LOG_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_MARK.h b/lib/libdss-include/include/linux/netfilter/xt_MARK.h
new file mode 100644 (file)
index 0000000..41c456d
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _XT_MARK_H_target
+#define _XT_MARK_H_target
+
+#include <linux/netfilter/xt_mark.h>
+
+#endif /*_XT_MARK_H_target */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_NFLOG.h b/lib/libdss-include/include/linux/netfilter/xt_NFLOG.h
new file mode 100644 (file)
index 0000000..87b5831
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _XT_NFLOG_TARGET
+#define _XT_NFLOG_TARGET
+
+#include <linux/types.h>
+
+#define XT_NFLOG_DEFAULT_GROUP         0x1
+#define XT_NFLOG_DEFAULT_THRESHOLD     0
+
+#define XT_NFLOG_MASK                  0x0
+
+struct xt_nflog_info {
+       __u32   len;
+       __u16   group;
+       __u16   threshold;
+       __u16   flags;
+       __u16   pad;
+       char            prefix[64];
+};
+
+#endif /* _XT_NFLOG_TARGET */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_NFQUEUE.h b/lib/libdss-include/include/linux/netfilter/xt_NFQUEUE.h
new file mode 100644 (file)
index 0000000..8bb5fe6
--- /dev/null
@@ -0,0 +1,38 @@
+/* iptables module for using NFQUEUE mechanism
+ *
+ * (C) 2005 Harald Welte <laforge@netfilter.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+*/
+#ifndef _XT_NFQ_TARGET_H
+#define _XT_NFQ_TARGET_H
+
+#include <linux/types.h>
+
+/* target info */
+struct xt_NFQ_info {
+       __u16 queuenum;
+};
+
+struct xt_NFQ_info_v1 {
+       __u16 queuenum;
+       __u16 queues_total;
+};
+
+struct xt_NFQ_info_v2 {
+       __u16 queuenum;
+       __u16 queues_total;
+       __u16 bypass;
+};
+
+struct xt_NFQ_info_v3 {
+       __u16 queuenum;
+       __u16 queues_total;
+       __u16 flags;
+#define NFQ_FLAG_BYPASS                0x01 /* for compatibility with v2 */
+#define NFQ_FLAG_CPU_FANOUT    0x02 /* use current CPU (no hashing) */
+#define NFQ_FLAG_MASK          0x03
+};
+
+#endif /* _XT_NFQ_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_RATEEST.h b/lib/libdss-include/include/linux/netfilter/xt_RATEEST.h
new file mode 100644 (file)
index 0000000..6605e20
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_RATEEST_TARGET_H
+#define _XT_RATEEST_TARGET_H
+
+#include <linux/types.h>
+
+struct xt_rateest_target_info {
+       char                    name[IFNAMSIZ];
+       __s8                    interval;
+       __u8            ewma_log;
+
+       /* Used internally by the kernel */
+       struct xt_rateest       *est __attribute__((aligned(8)));
+};
+
+#endif /* _XT_RATEEST_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_SECMARK.h b/lib/libdss-include/include/linux/netfilter/xt_SECMARK.h
new file mode 100644 (file)
index 0000000..989092b
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _XT_SECMARK_H_target
+#define _XT_SECMARK_H_target
+
+#include <linux/types.h>
+
+/*
+ * This is intended for use by various security subsystems (but not
+ * at the same time).
+ *
+ * 'mode' refers to the specific security subsystem which the
+ * packets are being marked for.
+ */
+#define SECMARK_MODE_SEL       0x01            /* SELinux */
+#define SECMARK_SECCTX_MAX     256
+
+struct xt_secmark_target_info {
+       __u8 mode;
+       __u32 secid;
+       char secctx[SECMARK_SECCTX_MAX];
+};
+
+#endif /*_XT_SECMARK_H_target */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_TCPMSS.h b/lib/libdss-include/include/linux/netfilter/xt_TCPMSS.h
new file mode 100644 (file)
index 0000000..9a6960a
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_TCPMSS_H
+#define _XT_TCPMSS_H
+
+#include <linux/types.h>
+
+struct xt_tcpmss_info {
+       __u16 mss;
+};
+
+#define XT_TCPMSS_CLAMP_PMTU 0xffff
+
+#endif /* _XT_TCPMSS_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_TCPOPTSTRIP.h b/lib/libdss-include/include/linux/netfilter/xt_TCPOPTSTRIP.h
new file mode 100644 (file)
index 0000000..7157318
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_TCPOPTSTRIP_H
+#define _XT_TCPOPTSTRIP_H
+
+#include <linux/types.h>
+
+#define tcpoptstrip_set_bit(bmap, idx) \
+       (bmap[(idx) >> 5] |= 1U << (idx & 31))
+#define tcpoptstrip_test_bit(bmap, idx) \
+       (((1U << (idx & 31)) & bmap[(idx) >> 5]) != 0)
+
+struct xt_tcpoptstrip_target_info {
+       __u32 strip_bmap[8];
+};
+
+#endif /* _XT_TCPOPTSTRIP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_TEE.h b/lib/libdss-include/include/linux/netfilter/xt_TEE.h
new file mode 100644 (file)
index 0000000..5c21d5c
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_TEE_TARGET_H
+#define _XT_TEE_TARGET_H
+
+struct xt_tee_tginfo {
+       union nf_inet_addr gw;
+       char oif[16];
+
+       /* used internally by the kernel */
+       struct xt_tee_priv *priv __attribute__((aligned(8)));
+};
+
+#endif /* _XT_TEE_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_TPROXY.h b/lib/libdss-include/include/linux/netfilter/xt_TPROXY.h
new file mode 100644 (file)
index 0000000..902043c
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _XT_TPROXY_H
+#define _XT_TPROXY_H
+
+#include <linux/types.h>
+
+/* TPROXY target is capable of marking the packet to perform
+ * redirection. We can get rid of that whenever we get support for
+ * mutliple targets in the same rule. */
+struct xt_tproxy_target_info {
+       __u32 mark_mask;
+       __u32 mark_value;
+       __be32 laddr;
+       __be16 lport;
+};
+
+struct xt_tproxy_target_info_v1 {
+       __u32 mark_mask;
+       __u32 mark_value;
+       union nf_inet_addr laddr;
+       __be16 lport;
+};
+
+#endif /* _XT_TPROXY_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_addrtype.h b/lib/libdss-include/include/linux/netfilter/xt_addrtype.h
new file mode 100644 (file)
index 0000000..b156baa
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _XT_ADDRTYPE_H
+#define _XT_ADDRTYPE_H
+
+#include <linux/types.h>
+
+enum {
+       XT_ADDRTYPE_INVERT_SOURCE       = 0x0001,
+       XT_ADDRTYPE_INVERT_DEST         = 0x0002,
+       XT_ADDRTYPE_LIMIT_IFACE_IN      = 0x0004,
+       XT_ADDRTYPE_LIMIT_IFACE_OUT     = 0x0008,
+};
+
+
+/* rtn_type enum values from rtnetlink.h, but shifted */
+enum {
+       XT_ADDRTYPE_UNSPEC = 1 << 0,
+       XT_ADDRTYPE_UNICAST = 1 << 1,   /* 1 << RTN_UNICAST */
+       XT_ADDRTYPE_LOCAL  = 1 << 2,    /* 1 << RTN_LOCAL, etc */
+       XT_ADDRTYPE_BROADCAST = 1 << 3,
+       XT_ADDRTYPE_ANYCAST = 1 << 4,
+       XT_ADDRTYPE_MULTICAST = 1 << 5,
+       XT_ADDRTYPE_BLACKHOLE = 1 << 6,
+       XT_ADDRTYPE_UNREACHABLE = 1 << 7,
+       XT_ADDRTYPE_PROHIBIT = 1 << 8,
+       XT_ADDRTYPE_THROW = 1 << 9,
+       XT_ADDRTYPE_NAT = 1 << 10,
+       XT_ADDRTYPE_XRESOLVE = 1 << 11,
+};
+
+struct xt_addrtype_info_v1 {
+       __u16   source;         /* source-type mask */
+       __u16   dest;           /* dest-type mask */
+       __u32   flags;
+};
+
+/* revision 0 */
+struct xt_addrtype_info {
+       __u16   source;         /* source-type mask */
+       __u16   dest;           /* dest-type mask */
+       __u32   invert_source;
+       __u32   invert_dest;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/xt_bpf.h b/lib/libdss-include/include/linux/netfilter/xt_bpf.h
new file mode 100644 (file)
index 0000000..1fad2c2
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_BPF_H
+#define _XT_BPF_H
+
+#include <linux/filter.h>
+#include <linux/types.h>
+
+#define XT_BPF_MAX_NUM_INSTR   64
+
+struct bpf_prog;
+
+struct xt_bpf_info {
+       __u16 bpf_program_num_elem;
+       struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
+
+       /* only used in the kernel */
+       struct bpf_prog *filter __attribute__((aligned(8)));
+};
+
+#endif /*_XT_BPF_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_cgroup.h b/lib/libdss-include/include/linux/netfilter/xt_cgroup.h
new file mode 100644 (file)
index 0000000..943d3a0
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_CGROUP_H
+#define _XT_CGROUP_H
+
+#include <linux/types.h>
+
+struct xt_cgroup_info {
+       __u32 id;
+       __u32 invert;
+};
+
+#endif /* _XT_CGROUP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_cluster.h b/lib/libdss-include/include/linux/netfilter/xt_cluster.h
new file mode 100644 (file)
index 0000000..9b883c8
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_CLUSTER_MATCH_H
+#define _XT_CLUSTER_MATCH_H
+
+#include <linux/types.h>
+
+enum xt_cluster_flags {
+       XT_CLUSTER_F_INV        = (1 << 0)
+};
+
+struct xt_cluster_match_info {
+       __u32 total_nodes;
+       __u32 node_mask;
+       __u32 hash_seed;
+       __u32 flags;
+};
+
+#define XT_CLUSTER_NODES_MAX   32
+
+#endif /* _XT_CLUSTER_MATCH_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_comment.h b/lib/libdss-include/include/linux/netfilter/xt_comment.h
new file mode 100644 (file)
index 0000000..0ea5e79
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _XT_COMMENT_H
+#define _XT_COMMENT_H
+
+#define XT_MAX_COMMENT_LEN 256
+
+struct xt_comment_info {
+       char comment[XT_MAX_COMMENT_LEN];
+};
+
+#endif /* XT_COMMENT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_connbytes.h b/lib/libdss-include/include/linux/netfilter/xt_connbytes.h
new file mode 100644 (file)
index 0000000..f1d6c15
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _XT_CONNBYTES_H
+#define _XT_CONNBYTES_H
+
+#include <linux/types.h>
+
+enum xt_connbytes_what {
+       XT_CONNBYTES_PKTS,
+       XT_CONNBYTES_BYTES,
+       XT_CONNBYTES_AVGPKT,
+};
+
+enum xt_connbytes_direction {
+       XT_CONNBYTES_DIR_ORIGINAL,
+       XT_CONNBYTES_DIR_REPLY,
+       XT_CONNBYTES_DIR_BOTH,
+};
+
+struct xt_connbytes_info {
+       struct {
+               __aligned_u64 from;     /* count to be matched */
+               __aligned_u64 to;       /* count to be matched */
+       } count;
+       __u8 what;              /* ipt_connbytes_what */
+       __u8 direction; /* ipt_connbytes_direction */
+};
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/xt_connlabel.h b/lib/libdss-include/include/linux/netfilter/xt_connlabel.h
new file mode 100644 (file)
index 0000000..c4bc9ee
--- /dev/null
@@ -0,0 +1,12 @@
+#include <linux/types.h>
+
+#define XT_CONNLABEL_MAXBIT 127
+enum xt_connlabel_mtopts {
+       XT_CONNLABEL_OP_INVERT = 1 << 0,
+       XT_CONNLABEL_OP_SET    = 1 << 1,
+};
+
+struct xt_connlabel_mtinfo {
+       __u16 bit;
+       __u16 options;
+};
diff --git a/lib/libdss-include/include/linux/netfilter/xt_connlimit.h b/lib/libdss-include/include/linux/netfilter/xt_connlimit.h
new file mode 100644 (file)
index 0000000..cdcc117
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _XT_CONNLIMIT_H
+#define _XT_CONNLIMIT_H
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+struct xt_connlimit_data;
+
+enum {
+       XT_CONNLIMIT_INVERT = 1 << 0,
+       XT_CONNLIMIT_DADDR  = 1 << 1,
+};
+
+struct xt_connlimit_info {
+       union {
+               union nf_inet_addr mask;
+               union {
+                       __be32 v4_mask;
+                       __be32 v6_mask[4];
+               };
+       };
+       unsigned int limit;
+       /* revision 1 */
+       __u32 flags;
+
+       /* Used internally by the kernel */
+       struct xt_connlimit_data *data __attribute__((aligned(8)));
+};
+
+#endif /* _XT_CONNLIMIT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_connmark.h b/lib/libdss-include/include/linux/netfilter/xt_connmark.h
new file mode 100644 (file)
index 0000000..efc17a8
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _XT_CONNMARK_H
+#define _XT_CONNMARK_H
+
+#include <linux/types.h>
+
+/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
+ * by Henrik Nordstrom <hno@marasystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+enum {
+       XT_CONNMARK_SET = 0,
+       XT_CONNMARK_SAVE,
+       XT_CONNMARK_RESTORE
+};
+
+struct xt_connmark_tginfo1 {
+       __u32 ctmark, ctmask, nfmask;
+       __u8 mode;
+};
+
+struct xt_connmark_mtinfo1 {
+       __u32 mark, mask;
+       __u8 invert;
+};
+
+#endif /*_XT_CONNMARK_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_conntrack.h b/lib/libdss-include/include/linux/netfilter/xt_conntrack.h
new file mode 100644 (file)
index 0000000..e5bd308
--- /dev/null
@@ -0,0 +1,78 @@
+/* Header file for kernel module to match connection tracking information.
+ * GPL (C) 2001  Marc Boucher (marc@mbsi.ca).
+ */
+
+#ifndef _XT_CONNTRACK_H
+#define _XT_CONNTRACK_H
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+#define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
+#define XT_CONNTRACK_STATE_INVALID (1 << 0)
+
+#define XT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1))
+#define XT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2))
+#define XT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3))
+
+/* flags, invflags: */
+enum {
+       XT_CONNTRACK_STATE        = 1 << 0,
+       XT_CONNTRACK_PROTO        = 1 << 1,
+       XT_CONNTRACK_ORIGSRC      = 1 << 2,
+       XT_CONNTRACK_ORIGDST      = 1 << 3,
+       XT_CONNTRACK_REPLSRC      = 1 << 4,
+       XT_CONNTRACK_REPLDST      = 1 << 5,
+       XT_CONNTRACK_STATUS       = 1 << 6,
+       XT_CONNTRACK_EXPIRES      = 1 << 7,
+       XT_CONNTRACK_ORIGSRC_PORT = 1 << 8,
+       XT_CONNTRACK_ORIGDST_PORT = 1 << 9,
+       XT_CONNTRACK_REPLSRC_PORT = 1 << 10,
+       XT_CONNTRACK_REPLDST_PORT = 1 << 11,
+       XT_CONNTRACK_DIRECTION    = 1 << 12,
+       XT_CONNTRACK_STATE_ALIAS  = 1 << 13,
+};
+
+struct xt_conntrack_mtinfo1 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __be16 origsrc_port, origdst_port;
+       __be16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u8 state_mask, status_mask;
+};
+
+struct xt_conntrack_mtinfo2 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __be16 origsrc_port, origdst_port;
+       __be16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u16 state_mask, status_mask;
+};
+
+struct xt_conntrack_mtinfo3 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __u16 origsrc_port, origdst_port;
+       __u16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u16 state_mask, status_mask;
+       __u16 origsrc_port_high, origdst_port_high;
+       __u16 replsrc_port_high, repldst_port_high;
+};
+
+#endif /*_XT_CONNTRACK_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_cpu.h b/lib/libdss-include/include/linux/netfilter/xt_cpu.h
new file mode 100644 (file)
index 0000000..93c7f11
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_CPU_H
+#define _XT_CPU_H
+
+#include <linux/types.h>
+
+struct xt_cpu_info {
+       __u32   cpu;
+       __u32   invert;
+};
+
+#endif /*_XT_CPU_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_dccp.h b/lib/libdss-include/include/linux/netfilter/xt_dccp.h
new file mode 100644 (file)
index 0000000..a579e1b
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _XT_DCCP_H_
+#define _XT_DCCP_H_
+
+#include <linux/types.h>
+
+#define XT_DCCP_SRC_PORTS              0x01
+#define XT_DCCP_DEST_PORTS             0x02
+#define XT_DCCP_TYPE                   0x04
+#define XT_DCCP_OPTION                 0x08
+
+#define XT_DCCP_VALID_FLAGS            0x0f
+
+struct xt_dccp_info {
+       __u16 dpts[2];  /* Min, Max */
+       __u16 spts[2];  /* Min, Max */
+
+       __u16 flags;
+       __u16 invflags;
+
+       __u16 typemask;
+       __u8 option;
+};
+
+#endif /* _XT_DCCP_H_ */
+
diff --git a/lib/libdss-include/include/linux/netfilter/xt_devgroup.h b/lib/libdss-include/include/linux/netfilter/xt_devgroup.h
new file mode 100644 (file)
index 0000000..1babde0
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _XT_DEVGROUP_H
+#define _XT_DEVGROUP_H
+
+#include <linux/types.h>
+
+enum xt_devgroup_flags {
+       XT_DEVGROUP_MATCH_SRC   = 0x1,
+       XT_DEVGROUP_INVERT_SRC  = 0x2,
+       XT_DEVGROUP_MATCH_DST   = 0x4,
+       XT_DEVGROUP_INVERT_DST  = 0x8,
+};
+
+struct xt_devgroup_info {
+       __u32   flags;
+       __u32   src_group;
+       __u32   src_mask;
+       __u32   dst_group;
+       __u32   dst_mask;
+};
+
+#endif /* _XT_DEVGROUP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_dscp.h b/lib/libdss-include/include/linux/netfilter/xt_dscp.h
new file mode 100644 (file)
index 0000000..15f8932
--- /dev/null
@@ -0,0 +1,31 @@
+/* x_tables module for matching the IPv4/IPv6 DSCP field
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ * This software is distributed under GNU GPL v2, 1991
+ *
+ * See RFC2474 for a description of the DSCP field within the IP Header.
+ *
+ * xt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp
+*/
+#ifndef _XT_DSCP_H
+#define _XT_DSCP_H
+
+#include <linux/types.h>
+
+#define XT_DSCP_MASK   0xfc    /* 11111100 */
+#define XT_DSCP_SHIFT  2
+#define XT_DSCP_MAX    0x3f    /* 00111111 */
+
+/* match info */
+struct xt_dscp_info {
+       __u8 dscp;
+       __u8 invert;
+};
+
+struct xt_tos_match_info {
+       __u8 tos_mask;
+       __u8 tos_value;
+       __u8 invert;
+};
+
+#endif /* _XT_DSCP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_ecn.h b/lib/libdss-include/include/linux/netfilter/xt_ecn.h
new file mode 100644 (file)
index 0000000..7158fca
--- /dev/null
@@ -0,0 +1,35 @@
+/* iptables module for matching the ECN header in IPv4 and TCP header
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+ * ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
+*/
+#ifndef _XT_ECN_H
+#define _XT_ECN_H
+
+#include <linux/types.h>
+#include <linux/netfilter/xt_dscp.h>
+
+#define XT_ECN_IP_MASK (~XT_DSCP_MASK)
+
+#define XT_ECN_OP_MATCH_IP     0x01
+#define XT_ECN_OP_MATCH_ECE    0x10
+#define XT_ECN_OP_MATCH_CWR    0x20
+
+#define XT_ECN_OP_MATCH_MASK   0xce
+
+/* match info */
+struct xt_ecn_info {
+       __u8 operation;
+       __u8 invert;
+       __u8 ip_ect;
+       union {
+               struct {
+                       __u8 ect;
+               } tcp;
+       } proto;
+};
+
+#endif /* _XT_ECN_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_esp.h b/lib/libdss-include/include/linux/netfilter/xt_esp.h
new file mode 100644 (file)
index 0000000..ee68824
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_ESP_H
+#define _XT_ESP_H
+
+#include <linux/types.h>
+
+struct xt_esp {
+       __u32 spis[2];  /* Security Parameter Index */
+       __u8  invflags; /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct xt_esp. */
+#define XT_ESP_INV_SPI 0x01    /* Invert the sense of spi. */
+#define XT_ESP_INV_MASK        0x01    /* All possible flags. */
+
+#endif /*_XT_ESP_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_hashlimit.h b/lib/libdss-include/include/linux/netfilter/xt_hashlimit.h
new file mode 100644 (file)
index 0000000..33511b7
--- /dev/null
@@ -0,0 +1,73 @@
+#ifndef _XT_HASHLIMIT_H
+#define _XT_HASHLIMIT_H
+
+#include <linux/types.h>
+
+/* timings are in milliseconds. */
+#define XT_HASHLIMIT_SCALE 10000
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+ * seconds, or one packet every 59 hours.
+ */
+
+/* packet length accounting is done in 16-byte steps */
+#define XT_HASHLIMIT_BYTE_SHIFT 4
+
+/* details of this structure hidden by the implementation */
+struct xt_hashlimit_htable;
+
+enum {
+       XT_HASHLIMIT_HASH_DIP = 1 << 0,
+       XT_HASHLIMIT_HASH_DPT = 1 << 1,
+       XT_HASHLIMIT_HASH_SIP = 1 << 2,
+       XT_HASHLIMIT_HASH_SPT = 1 << 3,
+       XT_HASHLIMIT_INVERT   = 1 << 4,
+       XT_HASHLIMIT_BYTES    = 1 << 5,
+};
+
+struct hashlimit_cfg {
+       __u32 mode;       /* bitmask of XT_HASHLIMIT_HASH_* */
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* user specified */
+       __u32 size;             /* how many buckets */
+       __u32 max;              /* max number of entries */
+       __u32 gc_interval;      /* gc interval */
+       __u32 expire;   /* when do entries expire? */
+};
+
+struct xt_hashlimit_info {
+       char name [IFNAMSIZ];           /* name */
+       struct hashlimit_cfg cfg;
+
+       /* Used internally by the kernel */
+       struct xt_hashlimit_htable *hinfo;
+       union {
+               void *ptr;
+               struct xt_hashlimit_info *master;
+       } u;
+};
+
+struct hashlimit_cfg1 {
+       __u32 mode;       /* bitmask of XT_HASHLIMIT_HASH_* */
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* user specified */
+       __u32 size;             /* how many buckets */
+       __u32 max;              /* max number of entries */
+       __u32 gc_interval;      /* gc interval */
+       __u32 expire;   /* when do entries expire? */
+
+       __u8 srcmask, dstmask;
+};
+
+struct xt_hashlimit_mtinfo1 {
+       char name[IFNAMSIZ];
+       struct hashlimit_cfg1 cfg;
+
+       /* Used internally by the kernel */
+       struct xt_hashlimit_htable *hinfo __attribute__((aligned(8)));
+};
+
+#endif /* _XT_HASHLIMIT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_helper.h b/lib/libdss-include/include/linux/netfilter/xt_helper.h
new file mode 100644 (file)
index 0000000..6b42763
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_HELPER_H
+#define _XT_HELPER_H
+
+struct xt_helper_info {
+       int invert;
+       char name[30];
+};
+#endif /* _XT_HELPER_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_ipcomp.h b/lib/libdss-include/include/linux/netfilter/xt_ipcomp.h
new file mode 100644 (file)
index 0000000..45c7e40
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _XT_IPCOMP_H
+#define _XT_IPCOMP_H
+
+#include <linux/types.h>
+
+struct xt_ipcomp {
+       __u32 spis[2];  /* Security Parameter Index */
+       __u8 invflags;  /* Inverse flags */
+       __u8 hdrres;    /* Test of the Reserved Filed */
+};
+
+/* Values for "invflags" field in struct xt_ipcomp. */
+#define XT_IPCOMP_INV_SPI      0x01    /* Invert the sense of spi. */
+#define XT_IPCOMP_INV_MASK     0x01    /* All possible flags. */
+
+#endif /*_XT_IPCOMP_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_iprange.h b/lib/libdss-include/include/linux/netfilter/xt_iprange.h
new file mode 100644 (file)
index 0000000..25fd7cf
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_NETFILTER_XT_IPRANGE_H
+#define _LINUX_NETFILTER_XT_IPRANGE_H 1
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+enum {
+       IPRANGE_SRC     = 1 << 0,       /* match source IP address */
+       IPRANGE_DST     = 1 << 1,       /* match destination IP address */
+       IPRANGE_SRC_INV = 1 << 4,       /* negate the condition */
+       IPRANGE_DST_INV = 1 << 5,       /* -"- */
+};
+
+struct xt_iprange_mtinfo {
+       union nf_inet_addr src_min, src_max;
+       union nf_inet_addr dst_min, dst_max;
+       __u8 flags;
+};
+
+#endif /* _LINUX_NETFILTER_XT_IPRANGE_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_ipvs.h b/lib/libdss-include/include/linux/netfilter/xt_ipvs.h
new file mode 100644 (file)
index 0000000..eff34ac
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_IPVS_H
+#define _XT_IPVS_H
+
+#include <linux/types.h>
+
+enum {
+       XT_IPVS_IPVS_PROPERTY = 1 << 0, /* all other options imply this one */
+       XT_IPVS_PROTO =         1 << 1,
+       XT_IPVS_VADDR =         1 << 2,
+       XT_IPVS_VPORT =         1 << 3,
+       XT_IPVS_DIR =           1 << 4,
+       XT_IPVS_METHOD =        1 << 5,
+       XT_IPVS_VPORTCTL =      1 << 6,
+       XT_IPVS_MASK =          (1 << 7) - 1,
+       XT_IPVS_ONCE_MASK =     XT_IPVS_MASK & ~XT_IPVS_IPVS_PROPERTY
+};
+
+struct xt_ipvs_mtinfo {
+       union nf_inet_addr      vaddr, vmask;
+       __be16                  vport;
+       __u8                    l4proto;
+       __u8                    fwd_method;
+       __be16                  vportctl;
+
+       __u8                    invert;
+       __u8                    bitmask;
+};
+
+#endif /* _XT_IPVS_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_l2tp.h b/lib/libdss-include/include/linux/netfilter/xt_l2tp.h
new file mode 100644 (file)
index 0000000..7dccfa0
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _LINUX_NETFILTER_XT_L2TP_H
+#define _LINUX_NETFILTER_XT_L2TP_H
+
+#include <linux/types.h>
+
+enum xt_l2tp_type {
+       XT_L2TP_TYPE_CONTROL,
+       XT_L2TP_TYPE_DATA,
+};
+
+/* L2TP matching stuff */
+struct xt_l2tp_info {
+       __u32 tid;                      /* tunnel id */
+       __u32 sid;                      /* session id */
+       __u8 version;                   /* L2TP protocol version */
+       __u8 type;                      /* L2TP packet type */
+       __u8 flags;                     /* which fields to match */
+};
+
+enum {
+       XT_L2TP_TID     = (1 << 0),     /* match L2TP tunnel id */
+       XT_L2TP_SID     = (1 << 1),     /* match L2TP session id */
+       XT_L2TP_VERSION = (1 << 2),     /* match L2TP protocol version */
+       XT_L2TP_TYPE    = (1 << 3),     /* match L2TP packet type */
+};
+
+#endif /* _LINUX_NETFILTER_XT_L2TP_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_length.h b/lib/libdss-include/include/linux/netfilter/xt_length.h
new file mode 100644 (file)
index 0000000..b82ed7c
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_LENGTH_H
+#define _XT_LENGTH_H
+
+#include <linux/types.h>
+
+struct xt_length_info {
+    __u16      min, max;
+    __u8       invert;
+};
+
+#endif /*_XT_LENGTH_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_limit.h b/lib/libdss-include/include/linux/netfilter/xt_limit.h
new file mode 100644 (file)
index 0000000..bb47fc4
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _XT_RATE_H
+#define _XT_RATE_H
+
+#include <linux/types.h>
+
+/* timings are in milliseconds. */
+#define XT_LIMIT_SCALE 10000
+
+struct xt_limit_priv;
+
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+   seconds, or one every 59 hours. */
+struct xt_rateinfo {
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* Used internally by the kernel */
+       unsigned long prev; /* moved to xt_limit_priv */
+       __u32 credit; /* moved to xt_limit_priv */
+       __u32 credit_cap, cost;
+
+       struct xt_limit_priv *master;
+};
+#endif /*_XT_RATE_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_mac.h b/lib/libdss-include/include/linux/netfilter/xt_mac.h
new file mode 100644 (file)
index 0000000..b892cdc
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_MAC_H
+#define _XT_MAC_H
+
+struct xt_mac_info {
+    unsigned char srcaddr[ETH_ALEN];
+    int invert;
+};
+#endif /*_XT_MAC_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_mark.h b/lib/libdss-include/include/linux/netfilter/xt_mark.h
new file mode 100644 (file)
index 0000000..ecadc40
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_MARK_H
+#define _XT_MARK_H
+
+#include <linux/types.h>
+
+struct xt_mark_tginfo2 {
+       __u32 mark, mask;
+};
+
+struct xt_mark_mtinfo1 {
+       __u32 mark, mask;
+       __u8 invert;
+};
+
+#endif /*_XT_MARK_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_multiport.h b/lib/libdss-include/include/linux/netfilter/xt_multiport.h
new file mode 100644 (file)
index 0000000..5b7e72d
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_MULTIPORT_H
+#define _XT_MULTIPORT_H
+
+#include <linux/types.h>
+
+enum xt_multiport_flags {
+       XT_MULTIPORT_SOURCE,
+       XT_MULTIPORT_DESTINATION,
+       XT_MULTIPORT_EITHER
+};
+
+#define XT_MULTI_PORTS 15
+
+/* Must fit inside union xt_matchinfo: 16 bytes */
+struct xt_multiport {
+       __u8 flags;                             /* Type of comparison */
+       __u8 count;                             /* Number of ports */
+       __u16 ports[XT_MULTI_PORTS];    /* Ports */
+};
+
+struct xt_multiport_v1 {
+       __u8 flags;                             /* Type of comparison */
+       __u8 count;                             /* Number of ports */
+       __u16 ports[XT_MULTI_PORTS];    /* Ports */
+       __u8 pflags[XT_MULTI_PORTS];    /* Port flags */
+       __u8 invert;                    /* Invert flag */
+};
+
+#endif /*_XT_MULTIPORT_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_nfacct.h b/lib/libdss-include/include/linux/netfilter/xt_nfacct.h
new file mode 100644 (file)
index 0000000..3e19c8a
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _XT_NFACCT_MATCH_H
+#define _XT_NFACCT_MATCH_H
+
+#include <linux/netfilter/nfnetlink_acct.h>
+
+struct nf_acct;
+
+struct xt_nfacct_match_info {
+       char            name[NFACCT_NAME_MAX];
+       struct nf_acct  *nfacct;
+};
+
+#endif /* _XT_NFACCT_MATCH_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_osf.h b/lib/libdss-include/include/linux/netfilter/xt_osf.h
new file mode 100644 (file)
index 0000000..5d66cae
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2003+ Evgeniy Polyakov <johnpol@2ka.mxt.ru>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _XT_OSF_H
+#define _XT_OSF_H
+
+#include <linux/types.h>
+
+#define MAXGENRELEN            32
+
+#define XT_OSF_GENRE           (1<<0)
+#define        XT_OSF_TTL              (1<<1)
+#define XT_OSF_LOG             (1<<2)
+#define XT_OSF_INVERT          (1<<3)
+
+#define XT_OSF_LOGLEVEL_ALL    0       /* log all matched fingerprints */
+#define XT_OSF_LOGLEVEL_FIRST  1       /* log only the first matced fingerprint */
+#define XT_OSF_LOGLEVEL_ALL_KNOWN      2 /* do not log unknown packets */
+
+#define XT_OSF_TTL_TRUE                0       /* True ip and fingerprint TTL comparison */
+#define XT_OSF_TTL_LESS                1       /* Check if ip TTL is less than fingerprint one */
+#define XT_OSF_TTL_NOCHECK     2       /* Do not compare ip and fingerprint TTL at all */
+
+struct xt_osf_info {
+       char                    genre[MAXGENRELEN];
+       __u32                   len;
+       __u32                   flags;
+       __u32                   loglevel;
+       __u32                   ttl;
+};
+
+/*
+ * Wildcard MSS (kind of).
+ * It is used to implement a state machine for the different wildcard values
+ * of the MSS and window sizes.
+ */
+struct xt_osf_wc {
+       __u32                   wc;
+       __u32                   val;
+};
+
+/*
+ * This struct represents IANA options
+ * http://www.iana.org/assignments/tcp-parameters
+ */
+struct xt_osf_opt {
+       __u16                   kind, length;
+       struct xt_osf_wc        wc;
+};
+
+struct xt_osf_user_finger {
+       struct xt_osf_wc        wss;
+
+       __u8                    ttl, df;
+       __u16                   ss, mss;
+       __u16                   opt_num;
+
+       char                    genre[MAXGENRELEN];
+       char                    version[MAXGENRELEN];
+       char                    subtype[MAXGENRELEN];
+
+       /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */
+       struct xt_osf_opt       opt[MAX_IPOPTLEN];
+};
+
+struct xt_osf_nlmsg {
+       struct xt_osf_user_finger       f;
+       struct iphdr            ip;
+       struct tcphdr           tcp;
+};
+
+/* Defines for IANA option kinds */
+
+enum iana_options {
+       OSFOPT_EOL = 0,         /* End of options */
+       OSFOPT_NOP,             /* NOP */
+       OSFOPT_MSS,             /* Maximum segment size */
+       OSFOPT_WSO,             /* Window scale option */
+       OSFOPT_SACKP,           /* SACK permitted */
+       OSFOPT_SACK,            /* SACK */
+       OSFOPT_ECHO,
+       OSFOPT_ECHOREPLY,
+       OSFOPT_TS,              /* Timestamp option */
+       OSFOPT_POCP,            /* Partial Order Connection Permitted */
+       OSFOPT_POSP,            /* Partial Order Service Profile */
+
+       /* Others are not used in the current OSF */
+       OSFOPT_EMPTY = 255,
+};
+
+/*
+ * Initial window size option state machine: multiple of mss, mtu or
+ * plain numeric value. Can also be made as plain numeric value which
+ * is not a multiple of specified value.
+ */
+enum xt_osf_window_size_options {
+       OSF_WSS_PLAIN   = 0,
+       OSF_WSS_MSS,
+       OSF_WSS_MTU,
+       OSF_WSS_MODULO,
+       OSF_WSS_MAX,
+};
+
+/*
+ * Add/remove fingerprint from the kernel.
+ */
+enum xt_osf_msg_types {
+       OSF_MSG_ADD,
+       OSF_MSG_REMOVE,
+       OSF_MSG_MAX,
+};
+
+enum xt_osf_attr_type {
+       OSF_ATTR_UNSPEC,
+       OSF_ATTR_FINGER,
+       OSF_ATTR_MAX,
+};
+
+#endif                         /* _XT_OSF_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_owner.h b/lib/libdss-include/include/linux/netfilter/xt_owner.h
new file mode 100644 (file)
index 0000000..2081761
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _XT_OWNER_MATCH_H
+#define _XT_OWNER_MATCH_H
+
+#include <linux/types.h>
+
+enum {
+       XT_OWNER_UID    = 1 << 0,
+       XT_OWNER_GID    = 1 << 1,
+       XT_OWNER_SOCKET = 1 << 2,
+};
+
+struct xt_owner_match_info {
+       __u32 uid_min, uid_max;
+       __u32 gid_min, gid_max;
+       __u8 match, invert;
+};
+
+#endif /* _XT_OWNER_MATCH_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_physdev.h b/lib/libdss-include/include/linux/netfilter/xt_physdev.h
new file mode 100644 (file)
index 0000000..8ab7eb7
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _XT_PHYSDEV_H
+#define _XT_PHYSDEV_H
+
+#include <linux/types.h>
+
+
+#define XT_PHYSDEV_OP_IN               0x01
+#define XT_PHYSDEV_OP_OUT              0x02
+#define XT_PHYSDEV_OP_BRIDGED          0x04
+#define XT_PHYSDEV_OP_ISIN             0x08
+#define XT_PHYSDEV_OP_ISOUT            0x10
+#define XT_PHYSDEV_OP_MASK             (0x20 - 1)
+
+struct xt_physdev_info {
+       char physindev[IFNAMSIZ];
+       char in_mask[IFNAMSIZ];
+       char physoutdev[IFNAMSIZ];
+       char out_mask[IFNAMSIZ];
+       __u8 invert;
+       __u8 bitmask;
+};
+
+#endif /* _XT_PHYSDEV_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_pkttype.h b/lib/libdss-include/include/linux/netfilter/xt_pkttype.h
new file mode 100644 (file)
index 0000000..f265cf5
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_PKTTYPE_H
+#define _XT_PKTTYPE_H
+
+struct xt_pkttype_info {
+       int     pkttype;
+       int     invert;
+};
+#endif /*_XT_PKTTYPE_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_policy.h b/lib/libdss-include/include/linux/netfilter/xt_policy.h
new file mode 100644 (file)
index 0000000..d246eac
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef _XT_POLICY_H
+#define _XT_POLICY_H
+
+#include <linux/types.h>
+
+#define XT_POLICY_MAX_ELEM     4
+
+enum xt_policy_flags {
+       XT_POLICY_MATCH_IN      = 0x1,
+       XT_POLICY_MATCH_OUT     = 0x2,
+       XT_POLICY_MATCH_NONE    = 0x4,
+       XT_POLICY_MATCH_STRICT  = 0x8,
+};
+
+enum xt_policy_modes {
+       XT_POLICY_MODE_TRANSPORT,
+       XT_POLICY_MODE_TUNNEL
+};
+
+struct xt_policy_spec {
+       __u8    saddr:1,
+                       daddr:1,
+                       proto:1,
+                       mode:1,
+                       spi:1,
+                       reqid:1;
+};
+
+union xt_policy_addr {
+       struct in_addr  a4;
+       struct in6_addr a6;
+};
+
+struct xt_policy_elem {
+       union {
+               struct {
+                       union xt_policy_addr saddr;
+                       union xt_policy_addr smask;
+                       union xt_policy_addr daddr;
+                       union xt_policy_addr dmask;
+               };
+       };
+       __be32                  spi;
+       __u32           reqid;
+       __u8            proto;
+       __u8            mode;
+
+       struct xt_policy_spec   match;
+       struct xt_policy_spec   invert;
+};
+
+struct xt_policy_info {
+       struct xt_policy_elem pol[XT_POLICY_MAX_ELEM];
+       __u16 flags;
+       __u16 len;
+};
+
+#endif /* _XT_POLICY_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_quota.h b/lib/libdss-include/include/linux/netfilter/xt_quota.h
new file mode 100644 (file)
index 0000000..9314723
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _XT_QUOTA_H
+#define _XT_QUOTA_H
+
+#include <linux/types.h>
+
+enum xt_quota_flags {
+       XT_QUOTA_INVERT         = 0x1,
+};
+#define XT_QUOTA_MASK          0x1
+
+struct xt_quota_priv;
+
+struct xt_quota_info {
+       __u32 flags;
+       __u32 pad;
+       __aligned_u64 quota;
+
+       /* Used internally by the kernel */
+       struct xt_quota_priv    *master;
+};
+
+#endif /* _XT_QUOTA_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_rateest.h b/lib/libdss-include/include/linux/netfilter/xt_rateest.h
new file mode 100644 (file)
index 0000000..d40a619
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _XT_RATEEST_MATCH_H
+#define _XT_RATEEST_MATCH_H
+
+#include <linux/types.h>
+
+enum xt_rateest_match_flags {
+       XT_RATEEST_MATCH_INVERT = 1<<0,
+       XT_RATEEST_MATCH_ABS    = 1<<1,
+       XT_RATEEST_MATCH_REL    = 1<<2,
+       XT_RATEEST_MATCH_DELTA  = 1<<3,
+       XT_RATEEST_MATCH_BPS    = 1<<4,
+       XT_RATEEST_MATCH_PPS    = 1<<5,
+};
+
+enum xt_rateest_match_mode {
+       XT_RATEEST_MATCH_NONE,
+       XT_RATEEST_MATCH_EQ,
+       XT_RATEEST_MATCH_LT,
+       XT_RATEEST_MATCH_GT,
+};
+
+struct xt_rateest_match_info {
+       char                    name1[IFNAMSIZ];
+       char                    name2[IFNAMSIZ];
+       __u16           flags;
+       __u16           mode;
+       __u32           bps1;
+       __u32           pps1;
+       __u32           bps2;
+       __u32           pps2;
+
+       /* Used internally by the kernel */
+       struct xt_rateest       *est1 __attribute__((aligned(8)));
+       struct xt_rateest       *est2 __attribute__((aligned(8)));
+};
+
+#endif /* _XT_RATEEST_MATCH_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_realm.h b/lib/libdss-include/include/linux/netfilter/xt_realm.h
new file mode 100644 (file)
index 0000000..d4a82ee
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_REALM_H
+#define _XT_REALM_H
+
+#include <linux/types.h>
+
+struct xt_realm_info {
+       __u32 id;
+       __u32 mask;
+       __u8 invert;
+};
+
+#endif /* _XT_REALM_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_recent.h b/lib/libdss-include/include/linux/netfilter/xt_recent.h
new file mode 100644 (file)
index 0000000..6ef36c1
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_NETFILTER_XT_RECENT_H
+#define _LINUX_NETFILTER_XT_RECENT_H 1
+
+#include <linux/types.h>
+
+enum {
+       XT_RECENT_CHECK    = 1 << 0,
+       XT_RECENT_SET      = 1 << 1,
+       XT_RECENT_UPDATE   = 1 << 2,
+       XT_RECENT_REMOVE   = 1 << 3,
+       XT_RECENT_TTL      = 1 << 4,
+       XT_RECENT_REAP     = 1 << 5,
+
+       XT_RECENT_SOURCE   = 0,
+       XT_RECENT_DEST     = 1,
+
+       XT_RECENT_NAME_LEN = 200,
+};
+
+/* Only allowed with --rcheck and --update */
+#define XT_RECENT_MODIFIERS (XT_RECENT_TTL|XT_RECENT_REAP)
+
+#define XT_RECENT_VALID_FLAGS (XT_RECENT_CHECK|XT_RECENT_SET|XT_RECENT_UPDATE|\
+                              XT_RECENT_REMOVE|XT_RECENT_TTL|XT_RECENT_REAP)
+
+struct xt_recent_mtinfo {
+       __u32 seconds;
+       __u32 hit_count;
+       __u8 check_set;
+       __u8 invert;
+       char name[XT_RECENT_NAME_LEN];
+       __u8 side;
+};
+
+struct xt_recent_mtinfo_v1 {
+       __u32 seconds;
+       __u32 hit_count;
+       __u8 check_set;
+       __u8 invert;
+       char name[XT_RECENT_NAME_LEN];
+       __u8 side;
+       union nf_inet_addr mask;
+};
+
+#endif /* _LINUX_NETFILTER_XT_RECENT_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_rpfilter.h b/lib/libdss-include/include/linux/netfilter/xt_rpfilter.h
new file mode 100644 (file)
index 0000000..672b605
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _XT_RPATH_H
+#define _XT_RPATH_H
+
+#include <linux/types.h>
+
+enum {
+       XT_RPFILTER_LOOSE = 1 << 0,
+       XT_RPFILTER_VALID_MARK = 1 << 1,
+       XT_RPFILTER_ACCEPT_LOCAL = 1 << 2,
+       XT_RPFILTER_INVERT = 1 << 3,
+};
+
+struct xt_rpfilter_info {
+       __u8 flags;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/xt_sctp.h b/lib/libdss-include/include/linux/netfilter/xt_sctp.h
new file mode 100644 (file)
index 0000000..a501e61
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef _XT_SCTP_H_
+#define _XT_SCTP_H_
+
+#include <linux/types.h>
+
+#define XT_SCTP_SRC_PORTS              0x01
+#define XT_SCTP_DEST_PORTS             0x02
+#define XT_SCTP_CHUNK_TYPES            0x04
+
+#define XT_SCTP_VALID_FLAGS            0x07
+
+struct xt_sctp_flag_info {
+       __u8 chunktype;
+       __u8 flag;
+       __u8 flag_mask;
+};
+
+#define XT_NUM_SCTP_FLAGS      4
+
+struct xt_sctp_info {
+       __u16 dpts[2];  /* Min, Max */
+       __u16 spts[2];  /* Min, Max */
+
+       __u32 chunkmap[256 / sizeof (__u32)];  /* Bit mask of chunks to be matched according to RFC 2960 */
+
+#define SCTP_CHUNK_MATCH_ANY   0x01  /* Match if any of the chunk types are present */
+#define SCTP_CHUNK_MATCH_ALL   0x02  /* Match if all of the chunk types are present */
+#define SCTP_CHUNK_MATCH_ONLY  0x04  /* Match if these are the only chunk types present */
+
+       __u32 chunk_match_type;
+       struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS];
+       int flag_count;
+
+       __u32 flags;
+       __u32 invflags;
+};
+
+#define bytes(type) (sizeof(type) * 8)
+
+#define SCTP_CHUNKMAP_SET(chunkmap, type)              \
+       do {                                            \
+               (chunkmap)[type / bytes(__u32)] |=      \
+                       1 << (type % bytes(__u32));     \
+       } while (0)
+
+#define SCTP_CHUNKMAP_CLEAR(chunkmap, type)                    \
+       do {                                                    \
+               (chunkmap)[type / bytes(__u32)] &=              \
+                       ~(1 << (type % bytes(__u32)));  \
+       } while (0)
+
+#define SCTP_CHUNKMAP_IS_SET(chunkmap, type)                   \
+({                                                             \
+       ((chunkmap)[type / bytes (__u32)] &             \
+               (1 << (type % bytes (__u32)))) ? 1: 0;  \
+})
+
+#define SCTP_CHUNKMAP_RESET(chunkmap) \
+       memset((chunkmap), 0, sizeof(chunkmap))
+
+#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
+       memset((chunkmap), ~0U, sizeof(chunkmap))
+
+#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
+       memcpy((destmap), (srcmap), sizeof(srcmap))
+
+#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
+       __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap))
+static __inline__ bool
+__sctp_chunkmap_is_clear(const __u32 *chunkmap, unsigned int n)
+{
+       unsigned int i;
+       for (i = 0; i < n; ++i)
+               if (chunkmap[i])
+                       return false;
+       return true;
+}
+
+#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
+       __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap))
+static __inline__ bool
+__sctp_chunkmap_is_all_set(const __u32 *chunkmap, unsigned int n)
+{
+       unsigned int i;
+       for (i = 0; i < n; ++i)
+               if (chunkmap[i] != ~0U)
+                       return false;
+       return true;
+}
+
+#endif /* _XT_SCTP_H_ */
+
diff --git a/lib/libdss-include/include/linux/netfilter/xt_set.h b/lib/libdss-include/include/linux/netfilter/xt_set.h
new file mode 100644 (file)
index 0000000..d4e0234
--- /dev/null
@@ -0,0 +1,93 @@
+#ifndef _XT_SET_H
+#define _XT_SET_H
+
+#include <linux/types.h>
+#include <linux/netfilter/ipset/ip_set.h>
+
+/* Revision 0 interface: backward compatible with netfilter/iptables */
+
+/*
+ * Option flags for kernel operations (xt_set_info_v0)
+ */
+#define IPSET_SRC              0x01    /* Source match/add */
+#define IPSET_DST              0x02    /* Destination match/add */
+#define IPSET_MATCH_INV                0x04    /* Inverse matching */
+
+struct xt_set_info_v0 {
+       ip_set_id_t index;
+       union {
+               __u32 flags[IPSET_DIM_MAX + 1];
+               struct {
+                       __u32 __flags[IPSET_DIM_MAX];
+                       __u8 dim;
+                       __u8 flags;
+               } compat;
+       } u;
+};
+
+/* match and target infos */
+struct xt_set_info_match_v0 {
+       struct xt_set_info_v0 match_set;
+};
+
+struct xt_set_info_target_v0 {
+       struct xt_set_info_v0 add_set;
+       struct xt_set_info_v0 del_set;
+};
+
+/* Revision 1  match and target */
+
+struct xt_set_info {
+       ip_set_id_t index;
+       __u8 dim;
+       __u8 flags;
+};
+
+/* match and target infos */
+struct xt_set_info_match_v1 {
+       struct xt_set_info match_set;
+};
+
+struct xt_set_info_target_v1 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+};
+
+/* Revision 2 target */
+
+struct xt_set_info_target_v2 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+       __u32 flags;
+       __u32 timeout;
+};
+
+/* Revision 3 match */
+
+struct xt_set_info_match_v3 {
+       struct xt_set_info match_set;
+       struct ip_set_counter_match0 packets;
+       struct ip_set_counter_match0 bytes;
+       __u32 flags;
+};
+
+/* Revision 3 target */
+
+struct xt_set_info_target_v3 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+       struct xt_set_info map_set;
+       __u32 flags;
+       __u32 timeout;
+};
+
+/* Revision 4 match */
+
+struct xt_set_info_match_v4 {
+       struct xt_set_info match_set;
+       struct ip_set_counter_match packets;
+       struct ip_set_counter_match bytes;
+       __u32 flags;
+};
+
+#endif /*_XT_SET_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_socket.h b/lib/libdss-include/include/linux/netfilter/xt_socket.h
new file mode 100644 (file)
index 0000000..87644f8
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_SOCKET_H
+#define _XT_SOCKET_H
+
+#include <linux/types.h>
+
+enum {
+       XT_SOCKET_TRANSPARENT = 1 << 0,
+       XT_SOCKET_NOWILDCARD = 1 << 1,
+       XT_SOCKET_RESTORESKMARK = 1 << 2,
+};
+
+struct xt_socket_mtinfo1 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V1 XT_SOCKET_TRANSPARENT
+
+struct xt_socket_mtinfo2 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V2 (XT_SOCKET_TRANSPARENT | XT_SOCKET_NOWILDCARD)
+
+struct xt_socket_mtinfo3 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V3 (XT_SOCKET_TRANSPARENT \
+                          | XT_SOCKET_NOWILDCARD \
+                          | XT_SOCKET_RESTORESKMARK)
+
+#endif /* _XT_SOCKET_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_state.h b/lib/libdss-include/include/linux/netfilter/xt_state.h
new file mode 100644 (file)
index 0000000..7b32de8
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_STATE_H
+#define _XT_STATE_H
+
+#define XT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
+#define XT_STATE_INVALID (1 << 0)
+
+#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1))
+
+struct xt_state_info {
+       unsigned int statemask;
+};
+#endif /*_XT_STATE_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_statistic.h b/lib/libdss-include/include/linux/netfilter/xt_statistic.h
new file mode 100644 (file)
index 0000000..4e983ef
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _XT_STATISTIC_H
+#define _XT_STATISTIC_H
+
+#include <linux/types.h>
+
+enum xt_statistic_mode {
+       XT_STATISTIC_MODE_RANDOM,
+       XT_STATISTIC_MODE_NTH,
+       __XT_STATISTIC_MODE_MAX
+};
+#define XT_STATISTIC_MODE_MAX (__XT_STATISTIC_MODE_MAX - 1)
+
+enum xt_statistic_flags {
+       XT_STATISTIC_INVERT             = 0x1,
+};
+#define XT_STATISTIC_MASK              0x1
+
+struct xt_statistic_priv;
+
+struct xt_statistic_info {
+       __u16                   mode;
+       __u16                   flags;
+       union {
+               struct {
+                       __u32   probability;
+               } random;
+               struct {
+                       __u32   every;
+                       __u32   packet;
+                       __u32   count; /* unused */
+               } nth;
+       } u;
+       struct xt_statistic_priv *master __attribute__((aligned(8)));
+};
+
+#endif /* _XT_STATISTIC_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_string.h b/lib/libdss-include/include/linux/netfilter/xt_string.h
new file mode 100644 (file)
index 0000000..235347c
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef _XT_STRING_H
+#define _XT_STRING_H
+
+#include <linux/types.h>
+
+#define XT_STRING_MAX_PATTERN_SIZE 128
+#define XT_STRING_MAX_ALGO_NAME_SIZE 16
+
+enum {
+       XT_STRING_FLAG_INVERT           = 0x01,
+       XT_STRING_FLAG_IGNORECASE       = 0x02
+};
+
+struct xt_string_info {
+       __u16 from_offset;
+       __u16 to_offset;
+       char      algo[XT_STRING_MAX_ALGO_NAME_SIZE];
+       char      pattern[XT_STRING_MAX_PATTERN_SIZE];
+       __u8  patlen;
+       union {
+               struct {
+                       __u8  invert;
+               } v0;
+
+               struct {
+                       __u8  flags;
+               } v1;
+       } u;
+
+       /* Used internally by the kernel */
+       struct ts_config __attribute__((aligned(8))) *config;
+};
+
+#endif /*_XT_STRING_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_tcpmss.h b/lib/libdss-include/include/linux/netfilter/xt_tcpmss.h
new file mode 100644 (file)
index 0000000..fbac56b
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_TCPMSS_MATCH_H
+#define _XT_TCPMSS_MATCH_H
+
+#include <linux/types.h>
+
+struct xt_tcpmss_match_info {
+    __u16 mss_min, mss_max;
+    __u8 invert;
+};
+
+#endif /*_XT_TCPMSS_MATCH_H*/
diff --git a/lib/libdss-include/include/linux/netfilter/xt_tcpudp.h b/lib/libdss-include/include/linux/netfilter/xt_tcpudp.h
new file mode 100644 (file)
index 0000000..38aa7b3
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _XT_TCPUDP_H
+#define _XT_TCPUDP_H
+
+#include <linux/types.h>
+
+/* TCP matching stuff */
+struct xt_tcp {
+       __u16 spts[2];                  /* Source port range. */
+       __u16 dpts[2];                  /* Destination port range. */
+       __u8 option;                    /* TCP Option iff non-zero*/
+       __u8 flg_mask;                  /* TCP flags mask byte */
+       __u8 flg_cmp;                   /* TCP flags compare byte */
+       __u8 invflags;                  /* Inverse flags */
+};
+
+/* Values for "inv" field in struct ipt_tcp. */
+#define XT_TCP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
+#define XT_TCP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
+#define XT_TCP_INV_FLAGS       0x04    /* Invert the sense of TCP flags. */
+#define XT_TCP_INV_OPTION      0x08    /* Invert the sense of option test. */
+#define XT_TCP_INV_MASK                0x0F    /* All possible flags. */
+
+/* UDP matching stuff */
+struct xt_udp {
+       __u16 spts[2];                  /* Source port range. */
+       __u16 dpts[2];                  /* Destination port range. */
+       __u8 invflags;                  /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct ipt_udp. */
+#define XT_UDP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
+#define XT_UDP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
+#define XT_UDP_INV_MASK        0x03    /* All possible flags. */
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter/xt_time.h b/lib/libdss-include/include/linux/netfilter/xt_time.h
new file mode 100644 (file)
index 0000000..0958860
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _XT_TIME_H
+#define _XT_TIME_H 1
+
+#include <linux/types.h>
+
+struct xt_time_info {
+       __u32 date_start;
+       __u32 date_stop;
+       __u32 daytime_start;
+       __u32 daytime_stop;
+       __u32 monthdays_match;
+       __u8 weekdays_match;
+       __u8 flags;
+};
+
+enum {
+       /* Match against local time (instead of UTC) */
+       XT_TIME_LOCAL_TZ = 1 << 0,
+
+       /* treat timestart > timestop (e.g. 23:00-01:00) as single period */
+       XT_TIME_CONTIGUOUS = 1 << 1,
+
+       /* Shortcuts */
+       XT_TIME_ALL_MONTHDAYS = 0xFFFFFFFE,
+       XT_TIME_ALL_WEEKDAYS  = 0xFE,
+       XT_TIME_MIN_DAYTIME   = 0,
+       XT_TIME_MAX_DAYTIME   = 24 * 60 * 60 - 1,
+};
+
+#define XT_TIME_ALL_FLAGS (XT_TIME_LOCAL_TZ|XT_TIME_CONTIGUOUS)
+
+#endif /* _XT_TIME_H */
diff --git a/lib/libdss-include/include/linux/netfilter/xt_u32.h b/lib/libdss-include/include/linux/netfilter/xt_u32.h
new file mode 100644 (file)
index 0000000..04d1bfe
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _XT_U32_H
+#define _XT_U32_H 1
+
+#include <linux/types.h>
+
+enum xt_u32_ops {
+       XT_U32_AND,
+       XT_U32_LEFTSH,
+       XT_U32_RIGHTSH,
+       XT_U32_AT,
+};
+
+struct xt_u32_location_element {
+       __u32 number;
+       __u8 nextop;
+};
+
+struct xt_u32_value_element {
+       __u32 min;
+       __u32 max;
+};
+
+/*
+ * Any way to allow for an arbitrary number of elements?
+ * For now, I settle with a limit of 10 each.
+ */
+#define XT_U32_MAXSIZE 10
+
+struct xt_u32_test {
+       struct xt_u32_location_element location[XT_U32_MAXSIZE+1];
+       struct xt_u32_value_element value[XT_U32_MAXSIZE+1];
+       __u8 nnums;
+       __u8 nvalues;
+};
+
+struct xt_u32 {
+       struct xt_u32_test tests[XT_U32_MAXSIZE+1];
+       __u8 ntests;
+       __u8 invert;
+};
+
+#endif /* _XT_U32_H */
diff --git a/lib/libdss-include/include/linux/netfilter_arp.h b/lib/libdss-include/include/linux/netfilter_arp.h
new file mode 100644 (file)
index 0000000..92bc6dd
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_ARP_NETFILTER_H
+#define __LINUX_ARP_NETFILTER_H
+
+/* ARP-specific defines for netfilter.
+ * (C)2002 Rusty Russell IBM -- This code is GPL.
+ */
+
+#include <linux/netfilter.h>
+
+/* There is no PF_ARP. */
+#define NF_ARP         0
+
+/* ARP Hooks */
+#define NF_ARP_IN      0
+#define NF_ARP_OUT     1
+#define NF_ARP_FORWARD 2
+#define NF_ARP_NUMHOOKS        3
+
+#endif /* __LINUX_ARP_NETFILTER_H */
diff --git a/lib/libdss-include/include/linux/netfilter_arp/arp_tables.h b/lib/libdss-include/include/linux/netfilter_arp/arp_tables.h
new file mode 100644 (file)
index 0000000..bb1ec64
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ *     Format of an ARP firewall descriptor
+ *
+ *     src, tgt, src_mask, tgt_mask, arpop, arpop_mask are always stored in
+ *     network byte order.
+ *     flags are stored in host byte order (of course).
+ */
+
+#ifndef _ARPTABLES_H
+#define _ARPTABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_arp.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define arpt_entry_target xt_entry_target
+#define arpt_standard_target xt_standard_target
+#define arpt_error_target xt_error_target
+#define ARPT_CONTINUE XT_CONTINUE
+#define ARPT_RETURN XT_RETURN
+#define arpt_counters_info xt_counters_info
+#define arpt_counters xt_counters
+#define ARPT_STANDARD_TARGET XT_STANDARD_TARGET
+#define ARPT_ERROR_TARGET XT_ERROR_TARGET
+#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args)
+
+#define ARPT_DEV_ADDR_LEN_MAX 16
+
+struct arpt_devaddr_info {
+       char addr[ARPT_DEV_ADDR_LEN_MAX];
+       char mask[ARPT_DEV_ADDR_LEN_MAX];
+};
+
+/* Yes, Virginia, you have to zero the padding. */
+struct arpt_arp {
+       /* Source and target IP addr */
+       struct in_addr src, tgt;
+       /* Mask for src and target IP addr */
+       struct in_addr smsk, tmsk;
+
+       /* Device hw address length, src+target device addresses */
+       __u8 arhln, arhln_mask;
+       struct arpt_devaddr_info src_devaddr;
+       struct arpt_devaddr_info tgt_devaddr;
+
+       /* ARP operation code. */
+       __be16 arpop, arpop_mask;
+
+       /* ARP hardware address and protocol address format. */
+       __be16 arhrd, arhrd_mask;
+       __be16 arpro, arpro_mask;
+
+       /* The protocol address length is only accepted if it is 4
+        * so there is no use in offering a way to do filtering on it.
+        */
+
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u16 invflags;
+};
+
+/* Values for "flag" field in struct arpt_ip (general arp structure).
+ * No flags defined yet.
+ */
+#define ARPT_F_MASK            0x00    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct arpt_arp. */
+#define ARPT_INV_VIA_IN                0x0001  /* Invert the sense of IN IFACE. */
+#define ARPT_INV_VIA_OUT       0x0002  /* Invert the sense of OUT IFACE */
+#define ARPT_INV_SRCIP         0x0004  /* Invert the sense of SRC IP. */
+#define ARPT_INV_TGTIP         0x0008  /* Invert the sense of TGT IP. */
+#define ARPT_INV_SRCDEVADDR    0x0010  /* Invert the sense of SRC DEV ADDR. */
+#define ARPT_INV_TGTDEVADDR    0x0020  /* Invert the sense of TGT DEV ADDR. */
+#define ARPT_INV_ARPOP         0x0040  /* Invert the sense of ARP OP. */
+#define ARPT_INV_ARPHRD                0x0080  /* Invert the sense of ARP HRD. */
+#define ARPT_INV_ARPPRO                0x0100  /* Invert the sense of ARP PRO. */
+#define ARPT_INV_ARPHLN                0x0200  /* Invert the sense of ARP HLN. */
+#define ARPT_INV_MASK          0x03FF  /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general ARP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct arpt_entry
+{
+       struct arpt_arp arp;
+
+       /* Size of arpt_entry + matches */
+       __u16 target_offset;
+       /* Size of arpt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use a raw
+ * socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in.h before adding new number here.
+ */
+#define ARPT_BASE_CTL          96
+
+#define ARPT_SO_SET_REPLACE            (ARPT_BASE_CTL)
+#define ARPT_SO_SET_ADD_COUNTERS       (ARPT_BASE_CTL + 1)
+#define ARPT_SO_SET_MAX                        ARPT_SO_SET_ADD_COUNTERS
+
+#define ARPT_SO_GET_INFO               (ARPT_BASE_CTL)
+#define ARPT_SO_GET_ENTRIES            (ARPT_BASE_CTL + 1)
+/* #define ARPT_SO_GET_REVISION_MATCH  (APRT_BASE_CTL + 2) */
+#define ARPT_SO_GET_REVISION_TARGET    (ARPT_BASE_CTL + 3)
+#define ARPT_SO_GET_MAX                        (ARPT_SO_GET_REVISION_TARGET)
+
+/* The argument to ARPT_SO_GET_INFO */
+struct arpt_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_ARP_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_ARP_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to ARPT_SO_SET_REPLACE. */
+struct arpt_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_ARP_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_ARP_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct arpt_entry entries[0];
+};
+
+/* The argument to ARPT_SO_GET_ENTRIES. */
+struct arpt_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct arpt_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *arpt_get_target(struct arpt_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+#endif /* _ARPTABLES_H */
diff --git a/lib/libdss-include/include/linux/netfilter_arp/arpt_mangle.h b/lib/libdss-include/include/linux/netfilter_arp/arpt_mangle.h
new file mode 100644 (file)
index 0000000..8c2b16a
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _ARPT_MANGLE_H
+#define _ARPT_MANGLE_H
+#include <linux/netfilter_arp/arp_tables.h>
+
+#define ARPT_MANGLE_ADDR_LEN_MAX sizeof(struct in_addr)
+struct arpt_mangle
+{
+       char src_devaddr[ARPT_DEV_ADDR_LEN_MAX];
+       char tgt_devaddr[ARPT_DEV_ADDR_LEN_MAX];
+       union {
+               struct in_addr src_ip;
+       } u_s;
+       union {
+               struct in_addr tgt_ip;
+       } u_t;
+       __u8 flags;
+       int target;
+};
+
+#define ARPT_MANGLE_SDEV 0x01
+#define ARPT_MANGLE_TDEV 0x02
+#define ARPT_MANGLE_SIP 0x04
+#define ARPT_MANGLE_TIP 0x08
+#define ARPT_MANGLE_MASK 0x0f
+
+#endif /* _ARPT_MANGLE_H */
diff --git a/lib/libdss-include/include/linux/netfilter_bridge.h b/lib/libdss-include/include/linux/netfilter_bridge.h
new file mode 100644 (file)
index 0000000..c4dbfd9
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_BRIDGE_NETFILTER_H
+#define __LINUX_BRIDGE_NETFILTER_H
+
+/* bridge-specific defines for netfilter. 
+ */
+
+#include <linux/netfilter.h>
+#include <linux/if_ether.h>
+#include <linux/if_vlan.h>
+#include <linux/if_pppox.h>
+
+/* Bridge Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_BR_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_BR_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_BR_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_BR_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_BR_POST_ROUTING     4
+/* Not really a hook, but used for the ebtables broute table */
+#define NF_BR_BROUTING         5
+#define NF_BR_NUMHOOKS         6
+
+#endif /* __LINUX_BRIDGE_NETFILTER_H */
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_802_3.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_802_3.h
new file mode 100644 (file)
index 0000000..70028c1
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef __LINUX_BRIDGE_EBT_802_3_H
+#define __LINUX_BRIDGE_EBT_802_3_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+#define EBT_802_3_SAP 0x01
+#define EBT_802_3_TYPE 0x02
+
+#define EBT_802_3_MATCH "802_3"
+
+/*
+ * If frame has DSAP/SSAP value 0xaa you must check the SNAP type
+ * to discover what kind of packet we're carrying. 
+ */
+#define CHECK_TYPE 0xaa
+
+/*
+ * Control field may be one or two bytes.  If the first byte has
+ * the value 0x03 then the entire length is one byte, otherwise it is two.
+ * One byte controls are used in Unnumbered Information frames.
+ * Two byte controls are used in Numbered Information frames.
+ */
+#define IS_UI 0x03
+
+#define EBT_802_3_MASK (EBT_802_3_SAP | EBT_802_3_TYPE | EBT_802_3)
+
+/* ui has one byte ctrl, ni has two */
+struct hdr_ui {
+       __u8 dsap;
+       __u8 ssap;
+       __u8 ctrl;
+       __u8 orig[3];
+       __be16 type;
+};
+
+struct hdr_ni {
+       __u8 dsap;
+       __u8 ssap;
+       __be16 ctrl;
+       __u8  orig[3];
+       __be16 type;
+};
+
+struct ebt_802_3_hdr {
+       __u8  daddr[ETH_ALEN];
+       __u8  saddr[ETH_ALEN];
+       __be16 len;
+       union {
+               struct hdr_ui ui;
+               struct hdr_ni ni;
+       } llc;
+};
+
+
+struct ebt_802_3_info {
+       __u8  sap;
+       __be16 type;
+       __u8  bitmask;
+       __u8  invflags;
+};
+
+#endif /* __LINUX_BRIDGE_EBT_802_3_H */
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_among.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_among.h
new file mode 100644 (file)
index 0000000..bd4e3ad
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef __LINUX_BRIDGE_EBT_AMONG_H
+#define __LINUX_BRIDGE_EBT_AMONG_H
+
+#include <linux/types.h>
+
+#define EBT_AMONG_DST 0x01
+#define EBT_AMONG_SRC 0x02
+
+/* Grzegorz Borowiak <grzes@gnu.univ.gda.pl> 2003
+ * 
+ * Write-once-read-many hash table, used for checking if a given
+ * MAC address belongs to a set or not and possibly for checking
+ * if it is related with a given IPv4 address.
+ *
+ * The hash value of an address is its last byte.
+ * 
+ * In real-world ethernet addresses, values of the last byte are
+ * evenly distributed and there is no need to consider other bytes.
+ * It would only slow the routines down.
+ *
+ * For MAC address comparison speedup reasons, we introduce a trick.
+ * MAC address is mapped onto an array of two 32-bit integers.
+ * This pair of integers is compared with MAC addresses in the
+ * hash table, which are stored also in form of pairs of integers
+ * (in `cmp' array). This is quick as it requires only two elementary
+ * number comparisons in worst case. Further, we take advantage of
+ * fact that entropy of 3 last bytes of address is larger than entropy
+ * of 3 first bytes. So first we compare 4 last bytes of addresses and
+ * if they are the same we compare 2 first.
+ *
+ * Yes, it is a memory overhead, but in 2003 AD, who cares?
+ */
+
+struct ebt_mac_wormhash_tuple {
+       __u32 cmp[2];
+       __be32 ip;
+};
+
+struct ebt_mac_wormhash {
+       int table[257];
+       int poolsize;
+       struct ebt_mac_wormhash_tuple pool[0];
+};
+
+#define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \
+               + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0)
+
+struct ebt_among_info {
+       int wh_dst_ofs;
+       int wh_src_ofs;
+       int bitmask;
+};
+
+#define EBT_AMONG_DST_NEG 0x1
+#define EBT_AMONG_SRC_NEG 0x2
+
+#define ebt_among_wh_dst(x) ((x)->wh_dst_ofs ? \
+       (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_dst_ofs) : NULL)
+#define ebt_among_wh_src(x) ((x)->wh_src_ofs ? \
+       (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_src_ofs) : NULL)
+
+#define EBT_AMONG_MATCH "among"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_arp.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_arp.h
new file mode 100644 (file)
index 0000000..522f3e4
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __LINUX_BRIDGE_EBT_ARP_H
+#define __LINUX_BRIDGE_EBT_ARP_H
+
+#include <linux/types.h>
+
+#define EBT_ARP_OPCODE 0x01
+#define EBT_ARP_HTYPE 0x02
+#define EBT_ARP_PTYPE 0x04
+#define EBT_ARP_SRC_IP 0x08
+#define EBT_ARP_DST_IP 0x10
+#define EBT_ARP_SRC_MAC 0x20
+#define EBT_ARP_DST_MAC 0x40
+#define EBT_ARP_GRAT 0x80
+#define EBT_ARP_MASK (EBT_ARP_OPCODE | EBT_ARP_HTYPE | EBT_ARP_PTYPE | \
+   EBT_ARP_SRC_IP | EBT_ARP_DST_IP | EBT_ARP_SRC_MAC | EBT_ARP_DST_MAC | \
+   EBT_ARP_GRAT)
+#define EBT_ARP_MATCH "arp"
+
+struct ebt_arp_info
+{
+       __be16 htype;
+       __be16 ptype;
+       __be16 opcode;
+       __be32 saddr;
+       __be32 smsk;
+       __be32 daddr;
+       __be32 dmsk;
+       unsigned char smaddr[ETH_ALEN];
+       unsigned char smmsk[ETH_ALEN];
+       unsigned char dmaddr[ETH_ALEN];
+       unsigned char dmmsk[ETH_ALEN];
+       __u8  bitmask;
+       __u8  invflags;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_arpreply.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_arpreply.h
new file mode 100644 (file)
index 0000000..7e77896
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H
+#define __LINUX_BRIDGE_EBT_ARPREPLY_H
+
+struct ebt_arpreply_info {
+       unsigned char mac[ETH_ALEN];
+       int target;
+};
+#define EBT_ARPREPLY_TARGET "arpreply"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_ip.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_ip.h
new file mode 100644 (file)
index 0000000..c4bbc41
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *  ebt_ip
+ *
+ *     Authors:
+ *     Bart De Schuymer <bart.de.schuymer@pandora.be>
+ *
+ *  April, 2002
+ *
+ *  Changes:
+ *    added ip-sport and ip-dport
+ *    Innominate Security Technologies AG <mhopf@innominate.com>
+ *    September, 2002
+ */
+
+#ifndef __LINUX_BRIDGE_EBT_IP_H
+#define __LINUX_BRIDGE_EBT_IP_H
+
+#include <linux/types.h>
+
+#define EBT_IP_SOURCE 0x01
+#define EBT_IP_DEST 0x02
+#define EBT_IP_TOS 0x04
+#define EBT_IP_PROTO 0x08
+#define EBT_IP_SPORT 0x10
+#define EBT_IP_DPORT 0x20
+#define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\
+ EBT_IP_SPORT | EBT_IP_DPORT )
+#define EBT_IP_MATCH "ip"
+
+/* the same values are used for the invflags */
+struct ebt_ip_info {
+       __be32 saddr;
+       __be32 daddr;
+       __be32 smsk;
+       __be32 dmsk;
+       __u8  tos;
+       __u8  protocol;
+       __u8  bitmask;
+       __u8  invflags;
+       __u16 sport[2];
+       __u16 dport[2];
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_ip6.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_ip6.h
new file mode 100644 (file)
index 0000000..42b8896
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *  ebt_ip6
+ *
+ *     Authors:
+ * Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
+ * Manohar Castelino <manohar.r.castelino@intel.com>
+ *
+ *  Jan 11, 2008
+ *
+ */
+
+#ifndef __LINUX_BRIDGE_EBT_IP6_H
+#define __LINUX_BRIDGE_EBT_IP6_H
+
+#include <linux/types.h>
+
+#define EBT_IP6_SOURCE 0x01
+#define EBT_IP6_DEST 0x02
+#define EBT_IP6_TCLASS 0x04
+#define EBT_IP6_PROTO 0x08
+#define EBT_IP6_SPORT 0x10
+#define EBT_IP6_DPORT 0x20
+#define EBT_IP6_ICMP6 0x40
+
+#define EBT_IP6_MASK (EBT_IP6_SOURCE | EBT_IP6_DEST | EBT_IP6_TCLASS |\
+                     EBT_IP6_PROTO | EBT_IP6_SPORT | EBT_IP6_DPORT | \
+                     EBT_IP6_ICMP6)
+#define EBT_IP6_MATCH "ip6"
+
+/* the same values are used for the invflags */
+struct ebt_ip6_info {
+       struct in6_addr saddr;
+       struct in6_addr daddr;
+       struct in6_addr smsk;
+       struct in6_addr dmsk;
+       __u8  tclass;
+       __u8  protocol;
+       __u8  bitmask;
+       __u8  invflags;
+       union {
+               __u16 sport[2];
+               __u8 icmpv6_type[2];
+       };
+       union {
+               __u16 dport[2];
+               __u8 icmpv6_code[2];
+       };
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_limit.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_limit.h
new file mode 100644 (file)
index 0000000..66d80b3
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef __LINUX_BRIDGE_EBT_LIMIT_H
+#define __LINUX_BRIDGE_EBT_LIMIT_H
+
+#include <linux/types.h>
+
+#define EBT_LIMIT_MATCH "limit"
+
+/* timings are in milliseconds. */
+#define EBT_LIMIT_SCALE 10000
+
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+   seconds, or one every 59 hours. */
+
+struct ebt_limit_info {
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* Used internally by the kernel */
+       unsigned long prev;
+       __u32 credit;
+       __u32 credit_cap, cost;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_log.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_log.h
new file mode 100644 (file)
index 0000000..7e7f1d1
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __LINUX_BRIDGE_EBT_LOG_H
+#define __LINUX_BRIDGE_EBT_LOG_H
+
+#include <linux/types.h>
+
+#define EBT_LOG_IP 0x01 /* if the frame is made by ip, log the ip information */
+#define EBT_LOG_ARP 0x02
+#define EBT_LOG_NFLOG 0x04
+#define EBT_LOG_IP6 0x08
+#define EBT_LOG_MASK (EBT_LOG_IP | EBT_LOG_ARP | EBT_LOG_IP6)
+#define EBT_LOG_PREFIX_SIZE 30
+#define EBT_LOG_WATCHER "log"
+
+struct ebt_log_info {
+       __u8 loglevel;
+       __u8 prefix[EBT_LOG_PREFIX_SIZE];
+       __u32 bitmask;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_m.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_m.h
new file mode 100644 (file)
index 0000000..410f9e5
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __LINUX_BRIDGE_EBT_MARK_M_H
+#define __LINUX_BRIDGE_EBT_MARK_M_H
+
+#include <linux/types.h>
+
+#define EBT_MARK_AND 0x01
+#define EBT_MARK_OR 0x02
+#define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR)
+struct ebt_mark_m_info {
+       unsigned long mark, mask;
+       __u8 invert;
+       __u8 bitmask;
+};
+#define EBT_MARK_MATCH "mark_m"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_t.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_mark_t.h
new file mode 100644 (file)
index 0000000..7d5a268
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __LINUX_BRIDGE_EBT_MARK_T_H
+#define __LINUX_BRIDGE_EBT_MARK_T_H
+
+/* The target member is reused for adding new actions, the
+ * value of the real target is -1 to -NUM_STANDARD_TARGETS.
+ * For backward compatibility, the 4 lsb (2 would be enough,
+ * but let's play it safe) are kept to designate this target.
+ * The remaining bits designate the action. By making the set
+ * action 0xfffffff0, the result will look ok for older
+ * versions. [September 2006] */
+#define MARK_SET_VALUE (0xfffffff0)
+#define MARK_OR_VALUE  (0xffffffe0)
+#define MARK_AND_VALUE (0xffffffd0)
+#define MARK_XOR_VALUE (0xffffffc0)
+
+struct ebt_mark_t_info {
+       unsigned long mark;
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_MARK_TARGET "mark"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_nat.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_nat.h
new file mode 100644 (file)
index 0000000..5e74e3b
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __LINUX_BRIDGE_EBT_NAT_H
+#define __LINUX_BRIDGE_EBT_NAT_H
+
+#define NAT_ARP_BIT  (0x00000010)
+struct ebt_nat_info {
+       unsigned char mac[ETH_ALEN];
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_SNAT_TARGET "snat"
+#define EBT_DNAT_TARGET "dnat"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_nflog.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_nflog.h
new file mode 100644 (file)
index 0000000..df829fc
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __LINUX_BRIDGE_EBT_NFLOG_H
+#define __LINUX_BRIDGE_EBT_NFLOG_H
+
+#include <linux/types.h>
+
+#define EBT_NFLOG_MASK 0x0
+
+#define EBT_NFLOG_PREFIX_SIZE 64
+#define EBT_NFLOG_WATCHER "nflog"
+
+#define EBT_NFLOG_DEFAULT_GROUP                0x1
+#define EBT_NFLOG_DEFAULT_THRESHOLD    1
+
+struct ebt_nflog_info {
+       __u32 len;
+       __u16 group;
+       __u16 threshold;
+       __u16 flags;
+       __u16 pad;
+       char prefix[EBT_NFLOG_PREFIX_SIZE];
+};
+
+#endif                         /* __LINUX_BRIDGE_EBT_NFLOG_H */
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_pkttype.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_pkttype.h
new file mode 100644 (file)
index 0000000..c241bad
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H
+#define __LINUX_BRIDGE_EBT_PKTTYPE_H
+
+#include <linux/types.h>
+
+struct ebt_pkttype_info {
+       __u8 pkt_type;
+       __u8 invert;
+};
+#define EBT_PKTTYPE_MATCH "pkttype"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_redirect.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_redirect.h
new file mode 100644 (file)
index 0000000..dd9622c
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __LINUX_BRIDGE_EBT_REDIRECT_H
+#define __LINUX_BRIDGE_EBT_REDIRECT_H
+
+struct ebt_redirect_info {
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_REDIRECT_TARGET "redirect"
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_stp.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_stp.h
new file mode 100644 (file)
index 0000000..1025b9f
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef __LINUX_BRIDGE_EBT_STP_H
+#define __LINUX_BRIDGE_EBT_STP_H
+
+#include <linux/types.h>
+
+#define EBT_STP_TYPE           0x0001
+
+#define EBT_STP_FLAGS          0x0002
+#define EBT_STP_ROOTPRIO       0x0004
+#define EBT_STP_ROOTADDR       0x0008
+#define EBT_STP_ROOTCOST       0x0010
+#define EBT_STP_SENDERPRIO     0x0020
+#define EBT_STP_SENDERADDR     0x0040
+#define EBT_STP_PORT           0x0080
+#define EBT_STP_MSGAGE         0x0100
+#define EBT_STP_MAXAGE         0x0200
+#define EBT_STP_HELLOTIME      0x0400
+#define EBT_STP_FWDD           0x0800
+
+#define EBT_STP_MASK           0x0fff
+#define EBT_STP_CONFIG_MASK    0x0ffe
+
+#define EBT_STP_MATCH "stp"
+
+struct ebt_stp_config_info {
+       __u8 flags;
+       __u16 root_priol, root_priou;
+       char root_addr[6], root_addrmsk[6];
+       __u32 root_costl, root_costu;
+       __u16 sender_priol, sender_priou;
+       char sender_addr[6], sender_addrmsk[6];
+       __u16 portl, portu;
+       __u16 msg_agel, msg_ageu;
+       __u16 max_agel, max_ageu;
+       __u16 hello_timel, hello_timeu;
+       __u16 forward_delayl, forward_delayu;
+};
+
+struct ebt_stp_info {
+       __u8 type;
+       struct ebt_stp_config_info config;
+       __u16 bitmask;
+       __u16 invflags;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebt_vlan.h b/lib/libdss-include/include/linux/netfilter_bridge/ebt_vlan.h
new file mode 100644 (file)
index 0000000..967d1d5
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __LINUX_BRIDGE_EBT_VLAN_H
+#define __LINUX_BRIDGE_EBT_VLAN_H
+
+#include <linux/types.h>
+
+#define EBT_VLAN_ID    0x01
+#define EBT_VLAN_PRIO  0x02
+#define EBT_VLAN_ENCAP 0x04
+#define EBT_VLAN_MASK (EBT_VLAN_ID | EBT_VLAN_PRIO | EBT_VLAN_ENCAP)
+#define EBT_VLAN_MATCH "vlan"
+
+struct ebt_vlan_info {
+       __u16 id;               /* VLAN ID {1-4095} */
+       __u8 prio;              /* VLAN User Priority {0-7} */
+       __be16 encap;           /* VLAN Encapsulated frame code {0-65535} */
+       __u8 bitmask;           /* Args bitmask bit 1=1 - ID arg,
+                                  bit 2=1 User-Priority arg, bit 3=1 encap*/
+       __u8 invflags;          /* Inverse bitmask  bit 1=1 - inversed ID arg, 
+                                  bit 2=1 - inversed Pirority arg */
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_bridge/ebtables.h b/lib/libdss-include/include/linux/netfilter_bridge/ebtables.h
new file mode 100644 (file)
index 0000000..0524374
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+ *  ebtables
+ *
+ *     Authors:
+ *     Bart De Schuymer                <bdschuym@pandora.be>
+ *
+ *  ebtables.c,v 2.0, April, 2002
+ *
+ *  This code is strongly inspired by the iptables code which is
+ *  Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling
+ */
+
+#ifndef __LINUX_BRIDGE_EFF_H
+#define __LINUX_BRIDGE_EFF_H
+#include <linux/netfilter_bridge.h>
+
+#define EBT_TABLE_MAXNAMELEN 32
+#define EBT_CHAIN_MAXNAMELEN EBT_TABLE_MAXNAMELEN
+#define EBT_FUNCTION_MAXNAMELEN EBT_TABLE_MAXNAMELEN
+
+/* verdicts >0 are "branches" */
+#define EBT_ACCEPT   -1
+#define EBT_DROP     -2
+#define EBT_CONTINUE -3
+#define EBT_RETURN   -4
+#define NUM_STANDARD_TARGETS   4
+/* ebtables target modules store the verdict inside an int. We can
+ * reclaim a part of this int for backwards compatible extensions.
+ * The 4 lsb are more than enough to store the verdict. */
+#define EBT_VERDICT_BITS 0x0000000F
+
+struct xt_match;
+struct xt_target;
+
+struct ebt_counter {
+       uint64_t pcnt;
+       uint64_t bcnt;
+};
+
+struct ebt_replace {
+       char name[EBT_TABLE_MAXNAMELEN];
+       unsigned int valid_hooks;
+       /* nr of rules in the table */
+       unsigned int nentries;
+       /* total size of the entries */
+       unsigned int entries_size;
+       /* start of the chains */
+       struct ebt_entries *hook_entry[NF_BR_NUMHOOKS];
+       /* nr of counters userspace expects back */
+       unsigned int num_counters;
+       /* where the kernel will put the old counters */
+       struct ebt_counter *counters;
+       char *entries;
+};
+
+struct ebt_replace_kernel {
+       char name[EBT_TABLE_MAXNAMELEN];
+       unsigned int valid_hooks;
+       /* nr of rules in the table */
+       unsigned int nentries;
+       /* total size of the entries */
+       unsigned int entries_size;
+       /* start of the chains */
+       struct ebt_entries *hook_entry[NF_BR_NUMHOOKS];
+       /* nr of counters userspace expects back */
+       unsigned int num_counters;
+       /* where the kernel will put the old counters */
+       struct ebt_counter *counters;
+       char *entries;
+};
+
+struct ebt_entries {
+       /* this field is always set to zero
+        * See EBT_ENTRY_OR_ENTRIES.
+        * Must be same size as ebt_entry.bitmask */
+       unsigned int distinguisher;
+       /* the chain name */
+       char name[EBT_CHAIN_MAXNAMELEN];
+       /* counter offset for this chain */
+       unsigned int counter_offset;
+       /* one standard (accept, drop, return) per hook */
+       int policy;
+       /* nr. of entries */
+       unsigned int nentries;
+       /* entry list */
+       char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+/* used for the bitmask of struct ebt_entry */
+
+/* This is a hack to make a difference between an ebt_entry struct and an
+ * ebt_entries struct when traversing the entries from start to end.
+ * Using this simplifies the code a lot, while still being able to use
+ * ebt_entries.
+ * Contrary, iptables doesn't use something like ebt_entries and therefore uses
+ * different techniques for naming the policy and such. So, iptables doesn't
+ * need a hack like this.
+ */
+#define EBT_ENTRY_OR_ENTRIES 0x01
+/* these are the normal masks */
+#define EBT_NOPROTO 0x02
+#define EBT_802_3 0x04
+#define EBT_SOURCEMAC 0x08
+#define EBT_DESTMAC 0x10
+#define EBT_F_MASK (EBT_NOPROTO | EBT_802_3 | EBT_SOURCEMAC | EBT_DESTMAC \
+   | EBT_ENTRY_OR_ENTRIES)
+
+#define EBT_IPROTO 0x01
+#define EBT_IIN 0x02
+#define EBT_IOUT 0x04
+#define EBT_ISOURCE 0x8
+#define EBT_IDEST 0x10
+#define EBT_ILOGICALIN 0x20
+#define EBT_ILOGICALOUT 0x40
+#define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \
+   | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST)
+
+struct ebt_entry_match {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_match *match;
+       } u;
+       /* size of data */
+       unsigned int match_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+struct ebt_entry_watcher {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_target *watcher;
+       } u;
+       /* size of data */
+       unsigned int watcher_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+struct ebt_entry_target {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_target *target;
+       } u;
+       /* size of data */
+       unsigned int target_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+#define EBT_STANDARD_TARGET "standard"
+struct ebt_standard_target {
+       struct ebt_entry_target target;
+       int verdict;
+};
+
+/* one entry */
+struct ebt_entry {
+       /* this needs to be the first field */
+       unsigned int bitmask;
+       unsigned int invflags;
+       __be16 ethproto;
+       /* the physical in-dev */
+       char in[IFNAMSIZ];
+       /* the logical in-dev */
+       char logical_in[IFNAMSIZ];
+       /* the physical out-dev */
+       char out[IFNAMSIZ];
+       /* the logical out-dev */
+       char logical_out[IFNAMSIZ];
+       unsigned char sourcemac[ETH_ALEN];
+       unsigned char sourcemsk[ETH_ALEN];
+       unsigned char destmac[ETH_ALEN];
+       unsigned char destmsk[ETH_ALEN];
+       /* sizeof ebt_entry + matches */
+       unsigned int watchers_offset;
+       /* sizeof ebt_entry + matches + watchers */
+       unsigned int target_offset;
+       /* sizeof ebt_entry + matches + watchers + target */
+       unsigned int next_offset;
+       unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+/* {g,s}etsockopt numbers */
+#define EBT_BASE_CTL            128
+
+#define EBT_SO_SET_ENTRIES      (EBT_BASE_CTL)
+#define EBT_SO_SET_COUNTERS     (EBT_SO_SET_ENTRIES+1)
+#define EBT_SO_SET_MAX          (EBT_SO_SET_COUNTERS+1)
+
+#define EBT_SO_GET_INFO         (EBT_BASE_CTL)
+#define EBT_SO_GET_ENTRIES      (EBT_SO_GET_INFO+1)
+#define EBT_SO_GET_INIT_INFO    (EBT_SO_GET_ENTRIES+1)
+#define EBT_SO_GET_INIT_ENTRIES (EBT_SO_GET_INIT_INFO+1)
+#define EBT_SO_GET_MAX          (EBT_SO_GET_INIT_ENTRIES+1)
+
+
+/* blatently stolen from ip_tables.h
+ * fn returns 0 to continue iteration */
+#define EBT_MATCH_ITERATE(e, fn, args...)                   \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry_match *__match;                    \
+                                                           \
+       for (__i = sizeof(struct ebt_entry);                \
+            __i < (e)->watchers_offset;                    \
+            __i += __match->match_size +                   \
+            sizeof(struct ebt_entry_match)) {              \
+               __match = (void *)(e) + __i;                \
+                                                           \
+               __ret = fn(__match , ## args);              \
+               if (__ret != 0)                             \
+                       break;                              \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (e)->watchers_offset)            \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#define EBT_WATCHER_ITERATE(e, fn, args...)                 \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry_watcher *__watcher;                \
+                                                           \
+       for (__i = e->watchers_offset;                      \
+            __i < (e)->target_offset;                      \
+            __i += __watcher->watcher_size +               \
+            sizeof(struct ebt_entry_watcher)) {            \
+               __watcher = (void *)(e) + __i;              \
+                                                           \
+               __ret = fn(__watcher , ## args);            \
+               if (__ret != 0)                             \
+                       break;                              \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (e)->target_offset)              \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#define EBT_ENTRY_ITERATE(entries, size, fn, args...)       \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry *__entry;                          \
+                                                           \
+       for (__i = 0; __i < (size);) {                      \
+               __entry = (void *)(entries) + __i;          \
+               __ret = fn(__entry , ## args);              \
+               if (__ret != 0)                             \
+                       break;                              \
+               if (__entry->bitmask != 0)                  \
+                       __i += __entry->next_offset;        \
+               else                                        \
+                       __i += sizeof(struct ebt_entries);  \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (size))                          \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#endif /* __LINUX_BRIDGE_EFF_H */
diff --git a/lib/libdss-include/include/linux/netfilter_decnet.h b/lib/libdss-include/include/linux/netfilter_decnet.h
new file mode 100644 (file)
index 0000000..f1e80a9
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef __LINUX_DECNET_NETFILTER_H
+#define __LINUX_DECNET_NETFILTER_H
+
+/* DECnet-specific defines for netfilter. 
+ * This file (C) Steve Whitehouse 1999 derived from the
+ * ipv4 netfilter header file which is
+ * (C)1998 Rusty Russell -- This code is GPL.
+ */
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_DN_SRC             0x0001
+/* Dest IP address. */
+#define NFC_DN_DST             0x0002
+/* Input device. */
+#define NFC_DN_IF_IN           0x0004
+/* Output device. */
+#define NFC_DN_IF_OUT          0x0008
+
+/* DECnet Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_DN_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_DN_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_DN_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_DN_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_DN_POST_ROUTING     4
+/* Input Hello Packets */
+#define NF_DN_HELLO            5
+/* Input Routing Packets */
+#define NF_DN_ROUTE            6
+#define NF_DN_NUMHOOKS         7
+
+enum nf_dn_hook_priorities {
+       NF_DN_PRI_FIRST = INT_MIN,
+       NF_DN_PRI_CONNTRACK = -200,
+       NF_DN_PRI_MANGLE = -150,
+       NF_DN_PRI_NAT_DST = -100,
+       NF_DN_PRI_FILTER = 0,
+       NF_DN_PRI_NAT_SRC = 100,
+       NF_DN_PRI_DNRTMSG = 200,
+       NF_DN_PRI_LAST = INT_MAX,
+};
+
+struct nf_dn_rtmsg {
+       int nfdn_ifindex;
+};
+
+#define NFDN_RTMSG(r) ((unsigned char *)(r) + NLMSG_ALIGN(sizeof(struct nf_dn_rtmsg)))
+
+/* backwards compatibility for userspace */
+#define DNRMG_L1_GROUP 0x01
+#define DNRMG_L2_GROUP 0x02
+
+enum {
+       DNRNG_NLGRP_NONE,
+#define DNRNG_NLGRP_NONE       DNRNG_NLGRP_NONE
+       DNRNG_NLGRP_L1,
+#define DNRNG_NLGRP_L1         DNRNG_NLGRP_L1
+       DNRNG_NLGRP_L2,
+#define DNRNG_NLGRP_L2         DNRNG_NLGRP_L2
+       __DNRNG_NLGRP_MAX
+};
+#define DNRNG_NLGRP_MAX        (__DNRNG_NLGRP_MAX - 1)
+
+#endif /*__LINUX_DECNET_NETFILTER_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4.h b/lib/libdss-include/include/linux/netfilter_ipv4.h
new file mode 100644 (file)
index 0000000..a5f4dc7
--- /dev/null
@@ -0,0 +1,79 @@
+/* IPv4-specific defines for netfilter. 
+ * (C)1998 Rusty Russell -- This code is GPL.
+ */
+#ifndef __LINUX_IP_NETFILTER_H
+#define __LINUX_IP_NETFILTER_H
+
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_IP_SRC             0x0001
+/* Dest IP address. */
+#define NFC_IP_DST             0x0002
+/* Input device. */
+#define NFC_IP_IF_IN           0x0004
+/* Output device. */
+#define NFC_IP_IF_OUT          0x0008
+/* TOS. */
+#define NFC_IP_TOS             0x0010
+/* Protocol. */
+#define NFC_IP_PROTO           0x0020
+/* IP options. */
+#define NFC_IP_OPTIONS         0x0040
+/* Frag & flags. */
+#define NFC_IP_FRAG            0x0080
+
+/* Per-protocol information: only matters if proto match. */
+/* TCP flags. */
+#define NFC_IP_TCPFLAGS                0x0100
+/* Source port. */
+#define NFC_IP_SRC_PT          0x0200
+/* Dest port. */
+#define NFC_IP_DST_PT          0x0400
+/* Something else about the proto */
+#define NFC_IP_PROTO_UNKNOWN   0x2000
+
+/* IP Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_IP_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_IP_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_IP_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_IP_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_IP_POST_ROUTING     4
+#define NF_IP_NUMHOOKS         5
+
+enum nf_ip_hook_priorities {
+       NF_IP_PRI_FIRST = INT_MIN,
+       NF_IP_PRI_CONNTRACK_DEFRAG = -400,
+       NF_IP_PRI_RAW = -300,
+       NF_IP_PRI_SELINUX_FIRST = -225,
+       NF_IP_PRI_CONNTRACK = -200,
+       NF_IP_PRI_MANGLE = -150,
+       NF_IP_PRI_NAT_DST = -100,
+       NF_IP_PRI_FILTER = 0,
+       NF_IP_PRI_SECURITY = 50,
+       NF_IP_PRI_NAT_SRC = 100,
+       NF_IP_PRI_SELINUX_LAST = 225,
+       NF_IP_PRI_CONNTRACK_HELPER = 300,
+       NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
+       NF_IP_PRI_LAST = INT_MAX,
+};
+
+/* Arguments for setsockopt SOL_IP: */
+/* 2.0 firewalling went from 64 through 71 (and +256, +512, etc). */
+/* 2.2 firewalling (+ masq) went from 64 through 76 */
+/* 2.4 firewalling went 64 through 67. */
+#define SO_ORIGINAL_DST 80
+
+
+#endif /* __LINUX_IP_NETFILTER_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ip_tables.h b/lib/libdss-include/include/linux/netfilter_ipv4/ip_tables.h
new file mode 100644 (file)
index 0000000..38542b4
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * 25-Jul-1998 Major changes to allow for ip chain table
+ *
+ * 3-Jan-2000 Named tables to allow packet selection for different uses.
+ */
+
+/*
+ *     Format of an IP firewall descriptor
+ *
+ *     src, dst, src_mask, dst_mask are always stored in network byte order.
+ *     flags are stored in host byte order (of course).
+ *     Port numbers are stored in HOST byte order.
+ */
+
+#ifndef _IPTABLES_H
+#define _IPTABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_ipv4.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define ipt_match xt_match
+#define ipt_target xt_target
+#define ipt_table xt_table
+#define ipt_get_revision xt_get_revision
+#define ipt_entry_match xt_entry_match
+#define ipt_entry_target xt_entry_target
+#define ipt_standard_target xt_standard_target
+#define ipt_error_target xt_error_target
+#define ipt_counters xt_counters
+#define IPT_CONTINUE XT_CONTINUE
+#define IPT_RETURN XT_RETURN
+
+/* This group is older than old (iptables < v1.4.0-rc1~89) */
+#include <linux/netfilter/xt_tcpudp.h>
+#define ipt_udp xt_udp
+#define ipt_tcp xt_tcp
+#define IPT_TCP_INV_SRCPT      XT_TCP_INV_SRCPT
+#define IPT_TCP_INV_DSTPT      XT_TCP_INV_DSTPT
+#define IPT_TCP_INV_FLAGS      XT_TCP_INV_FLAGS
+#define IPT_TCP_INV_OPTION     XT_TCP_INV_OPTION
+#define IPT_TCP_INV_MASK       XT_TCP_INV_MASK
+#define IPT_UDP_INV_SRCPT      XT_UDP_INV_SRCPT
+#define IPT_UDP_INV_DSTPT      XT_UDP_INV_DSTPT
+#define IPT_UDP_INV_MASK       XT_UDP_INV_MASK
+
+/* The argument to IPT_SO_ADD_COUNTERS. */
+#define ipt_counters_info xt_counters_info
+/* Standard return verdict, or do jump. */
+#define IPT_STANDARD_TARGET XT_STANDARD_TARGET
+/* Error verdict. */
+#define IPT_ERROR_TARGET XT_ERROR_TARGET
+
+/* fn returns 0 to continue iteration */
+#define IPT_MATCH_ITERATE(e, fn, args...) \
+       XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
+
+/* fn returns 0 to continue iteration */
+#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
+
+/* Yes, Virginia, you have to zero the padding. */
+struct ipt_ip {
+       /* Source and destination IP addr */
+       struct in_addr src, dst;
+       /* Mask for src and dest IP addr */
+       struct in_addr smsk, dmsk;
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Protocol, 0 = ANY */
+       __u16 proto;
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u8 invflags;
+};
+
+/* Values for "flag" field in struct ipt_ip (general ip structure). */
+#define IPT_F_FRAG             0x01    /* Set if rule is a fragment rule */
+#define IPT_F_GOTO             0x02    /* Set if jump is a goto */
+#define IPT_F_MASK             0x03    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct ipt_ip. */
+#define IPT_INV_VIA_IN         0x01    /* Invert the sense of IN IFACE. */
+#define IPT_INV_VIA_OUT                0x02    /* Invert the sense of OUT IFACE */
+#define IPT_INV_TOS            0x04    /* Invert the sense of TOS. */
+#define IPT_INV_SRCIP          0x08    /* Invert the sense of SRC IP. */
+#define IPT_INV_DSTIP          0x10    /* Invert the sense of DST OP. */
+#define IPT_INV_FRAG           0x20    /* Invert the sense of FRAG. */
+#define IPT_INV_PROTO          XT_INV_PROTO
+#define IPT_INV_MASK           0x7F    /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general IP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct ipt_entry {
+       struct ipt_ip ip;
+
+       /* Mark with fields that we care about. */
+       unsigned int nfcache;
+
+       /* Size of ipt_entry + matches */
+       __u16 target_offset;
+       /* Size of ipt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use a raw
+ * socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in.h before adding new number here.
+ */
+#define IPT_BASE_CTL           64
+
+#define IPT_SO_SET_REPLACE     (IPT_BASE_CTL)
+#define IPT_SO_SET_ADD_COUNTERS        (IPT_BASE_CTL + 1)
+#define IPT_SO_SET_MAX         IPT_SO_SET_ADD_COUNTERS
+
+#define IPT_SO_GET_INFO                        (IPT_BASE_CTL)
+#define IPT_SO_GET_ENTRIES             (IPT_BASE_CTL + 1)
+#define IPT_SO_GET_REVISION_MATCH      (IPT_BASE_CTL + 2)
+#define IPT_SO_GET_REVISION_TARGET     (IPT_BASE_CTL + 3)
+#define IPT_SO_GET_MAX                 IPT_SO_GET_REVISION_TARGET
+
+/* ICMP matching stuff */
+struct ipt_icmp {
+       __u8 type;                              /* type to match */
+       __u8 code[2];                           /* range of code */
+       __u8 invflags;                          /* Inverse flags */
+};
+
+/* Values for "inv" field for struct ipt_icmp. */
+#define IPT_ICMP_INV   0x01    /* Invert the sense of type/code test */
+
+/* The argument to IPT_SO_GET_INFO */
+struct ipt_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to IPT_SO_SET_REPLACE. */
+struct ipt_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct ipt_entry entries[0];
+};
+
+/* The argument to IPT_SO_GET_ENTRIES. */
+struct ipt_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct ipt_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *
+ipt_get_target(struct ipt_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+#endif /* _IPTABLES_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
new file mode 100644 (file)
index 0000000..eac0f65
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _IPT_CLUSTERIP_H_target
+#define _IPT_CLUSTERIP_H_target
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+enum clusterip_hashmode {
+    CLUSTERIP_HASHMODE_SIP = 0,
+    CLUSTERIP_HASHMODE_SIP_SPT,
+    CLUSTERIP_HASHMODE_SIP_SPT_DPT,
+};
+
+#define CLUSTERIP_HASHMODE_MAX CLUSTERIP_HASHMODE_SIP_SPT_DPT
+
+#define CLUSTERIP_MAX_NODES 16
+
+#define CLUSTERIP_FLAG_NEW 0x00000001
+
+struct clusterip_config;
+
+struct ipt_clusterip_tgt_info {
+
+       __u32 flags;
+
+       /* only relevant for new ones */
+       __u8 clustermac[ETH_ALEN];
+       __u16 num_total_nodes;
+       __u16 num_local_nodes;
+       __u16 local_nodes[CLUSTERIP_MAX_NODES];
+       __u32 hash_mode;
+       __u32 hash_initval;
+
+       /* Used internally by the kernel */
+       struct clusterip_config *config;
+};
+
+#endif /*_IPT_CLUSTERIP_H_target*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ECN.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ECN.h
new file mode 100644 (file)
index 0000000..bb88d53
--- /dev/null
@@ -0,0 +1,33 @@
+/* Header file for iptables ipt_ECN target
+ *
+ * (C) 2002 by Harald Welte <laforge@gnumonks.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+ * ipt_ECN.h,v 1.3 2002/05/29 12:17:40 laforge Exp
+*/
+#ifndef _IPT_ECN_TARGET_H
+#define _IPT_ECN_TARGET_H
+
+#include <linux/types.h>
+#include <linux/netfilter/xt_DSCP.h>
+
+#define IPT_ECN_IP_MASK        (~XT_DSCP_MASK)
+
+#define IPT_ECN_OP_SET_IP      0x01    /* set ECN bits of IPv4 header */
+#define IPT_ECN_OP_SET_ECE     0x10    /* set ECE bit of TCP header */
+#define IPT_ECN_OP_SET_CWR     0x20    /* set CWR bit of TCP header */
+
+#define IPT_ECN_OP_MASK                0xce
+
+struct ipt_ECN_info {
+       __u8 operation; /* bitset of operations */
+       __u8 ip_ect;    /* ECT codepoint of IPv4 header, pre-shifted */
+       union {
+               struct {
+                       __u8 ece:1, cwr:1; /* TCP ECT bits */
+               } tcp;
+       } proto;
+};
+
+#endif /* _IPT_ECN_TARGET_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_LOG.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_LOG.h
new file mode 100644 (file)
index 0000000..5d81520
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _IPT_LOG_H
+#define _IPT_LOG_H
+
+#warning "Please update iptables, this file will be removed soon!"
+
+/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
+#define IPT_LOG_TCPSEQ         0x01    /* Log TCP sequence numbers */
+#define IPT_LOG_TCPOPT         0x02    /* Log TCP options */
+#define IPT_LOG_IPOPT          0x04    /* Log IP options */
+#define IPT_LOG_UID            0x08    /* Log UID owning local socket */
+#define IPT_LOG_NFLOG          0x10    /* Unsupported, don't reuse */
+#define IPT_LOG_MACDECODE      0x20    /* Decode MAC header */
+#define IPT_LOG_MASK           0x2f
+
+struct ipt_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /*_IPT_LOG_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_REJECT.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_REJECT.h
new file mode 100644 (file)
index 0000000..4293a1a
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _IPT_REJECT_H
+#define _IPT_REJECT_H
+
+enum ipt_reject_with {
+       IPT_ICMP_NET_UNREACHABLE,
+       IPT_ICMP_HOST_UNREACHABLE,
+       IPT_ICMP_PROT_UNREACHABLE,
+       IPT_ICMP_PORT_UNREACHABLE,
+       IPT_ICMP_ECHOREPLY,
+       IPT_ICMP_NET_PROHIBITED,
+       IPT_ICMP_HOST_PROHIBITED,
+       IPT_TCP_RESET,
+       IPT_ICMP_ADMIN_PROHIBITED
+};
+
+struct ipt_reject_info {
+       enum ipt_reject_with with;      /* reject type */
+};
+
+#endif /*_IPT_REJECT_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_TTL.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_TTL.h
new file mode 100644 (file)
index 0000000..f6ac169
--- /dev/null
@@ -0,0 +1,23 @@
+/* TTL modification module for IP tables
+ * (C) 2000 by Harald Welte <laforge@netfilter.org> */
+
+#ifndef _IPT_TTL_H
+#define _IPT_TTL_H
+
+#include <linux/types.h>
+
+enum {
+       IPT_TTL_SET = 0,
+       IPT_TTL_INC,
+       IPT_TTL_DEC
+};
+
+#define IPT_TTL_MAXMODE        IPT_TTL_DEC
+
+struct ipt_TTL_info {
+       __u8    mode;
+       __u8    ttl;
+};
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ah.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ah.h
new file mode 100644 (file)
index 0000000..4e02bb0
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _IPT_AH_H
+#define _IPT_AH_H
+
+#include <linux/types.h>
+
+struct ipt_ah {
+       __u32 spis[2];                  /* Security Parameter Index */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+
+
+/* Values for "invflags" field in struct ipt_ah. */
+#define IPT_AH_INV_SPI         0x01    /* Invert the sense of spi. */
+#define IPT_AH_INV_MASK        0x01    /* All possible flags. */
+
+#endif /*_IPT_AH_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ecn.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ecn.h
new file mode 100644 (file)
index 0000000..0e0c063
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _IPT_ECN_H
+#define _IPT_ECN_H
+
+#include <linux/netfilter/xt_ecn.h>
+#define ipt_ecn_info xt_ecn_info
+
+enum {
+       IPT_ECN_IP_MASK       = XT_ECN_IP_MASK,
+       IPT_ECN_OP_MATCH_IP   = XT_ECN_OP_MATCH_IP,
+       IPT_ECN_OP_MATCH_ECE  = XT_ECN_OP_MATCH_ECE,
+       IPT_ECN_OP_MATCH_CWR  = XT_ECN_OP_MATCH_CWR,
+       IPT_ECN_OP_MATCH_MASK = XT_ECN_OP_MATCH_MASK,
+};
+
+#endif /* IPT_ECN_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ttl.h b/lib/libdss-include/include/linux/netfilter_ipv4/ipt_ttl.h
new file mode 100644 (file)
index 0000000..37bee44
--- /dev/null
@@ -0,0 +1,23 @@
+/* IP tables module for matching the value of the TTL
+ * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
+
+#ifndef _IPT_TTL_H
+#define _IPT_TTL_H
+
+#include <linux/types.h>
+
+enum {
+       IPT_TTL_EQ = 0,         /* equals */
+       IPT_TTL_NE,             /* not equals */
+       IPT_TTL_LT,             /* less than */
+       IPT_TTL_GT,             /* greater than */
+};
+
+
+struct ipt_ttl_info {
+       __u8    mode;
+       __u8    ttl;
+};
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6.h b/lib/libdss-include/include/linux/netfilter_ipv6.h
new file mode 100644 (file)
index 0000000..8483d1d
--- /dev/null
@@ -0,0 +1,77 @@
+/* IPv6-specific defines for netfilter. 
+ * (C)1998 Rusty Russell -- This code is GPL.
+ * (C)1999 David Jeffery
+ *   this header was blatantly ripped from netfilter_ipv4.h 
+ *   it's amazing what adding a bunch of 6s can do =8^)
+ */
+#ifndef __LINUX_IP6_NETFILTER_H
+#define __LINUX_IP6_NETFILTER_H
+
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_IP6_SRC              0x0001
+/* Dest IP address. */
+#define NFC_IP6_DST              0x0002
+/* Input device. */
+#define NFC_IP6_IF_IN            0x0004
+/* Output device. */
+#define NFC_IP6_IF_OUT           0x0008
+/* TOS. */
+#define NFC_IP6_TOS              0x0010
+/* Protocol. */
+#define NFC_IP6_PROTO            0x0020
+/* IP options. */
+#define NFC_IP6_OPTIONS          0x0040
+/* Frag & flags. */
+#define NFC_IP6_FRAG             0x0080
+
+
+/* Per-protocol information: only matters if proto match. */
+/* TCP flags. */
+#define NFC_IP6_TCPFLAGS         0x0100
+/* Source port. */
+#define NFC_IP6_SRC_PT           0x0200
+/* Dest port. */
+#define NFC_IP6_DST_PT           0x0400
+/* Something else about the proto */
+#define NFC_IP6_PROTO_UNKNOWN    0x2000
+
+/* IP6 Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_IP6_PRE_ROUTING     0
+/* If the packet is destined for this box. */
+#define NF_IP6_LOCAL_IN                1
+/* If the packet is destined for another interface. */
+#define NF_IP6_FORWARD         2
+/* Packets coming from a local process. */
+#define NF_IP6_LOCAL_OUT               3
+/* Packets about to hit the wire. */
+#define NF_IP6_POST_ROUTING    4
+#define NF_IP6_NUMHOOKS                5
+
+
+enum nf_ip6_hook_priorities {
+       NF_IP6_PRI_FIRST = INT_MIN,
+       NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
+       NF_IP6_PRI_RAW = -300,
+       NF_IP6_PRI_SELINUX_FIRST = -225,
+       NF_IP6_PRI_CONNTRACK = -200,
+       NF_IP6_PRI_MANGLE = -150,
+       NF_IP6_PRI_NAT_DST = -100,
+       NF_IP6_PRI_FILTER = 0,
+       NF_IP6_PRI_SECURITY = 50,
+       NF_IP6_PRI_NAT_SRC = 100,
+       NF_IP6_PRI_SELINUX_LAST = 225,
+       NF_IP6_PRI_CONNTRACK_HELPER = 300,
+       NF_IP6_PRI_LAST = INT_MAX,
+};
+
+
+#endif /* __LINUX_IP6_NETFILTER_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6_tables.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6_tables.h
new file mode 100644 (file)
index 0000000..640a1d0
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * 25-Jul-1998 Major changes to allow for ip chain table
+ *
+ * 3-Jan-2000 Named tables to allow packet selection for different uses.
+ */
+
+/*
+ *     Format of an IP6 firewall descriptor
+ *
+ *     src, dst, src_mask, dst_mask are always stored in network byte order.
+ *     flags are stored in host byte order (of course).
+ *     Port numbers are stored in HOST byte order.
+ */
+
+#ifndef _IP6_TABLES_H
+#define _IP6_TABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_ipv6.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define ip6t_match xt_match
+#define ip6t_target xt_target
+#define ip6t_table xt_table
+#define ip6t_get_revision xt_get_revision
+#define ip6t_entry_match xt_entry_match
+#define ip6t_entry_target xt_entry_target
+#define ip6t_standard_target xt_standard_target
+#define ip6t_error_target xt_error_target
+#define ip6t_counters xt_counters
+#define IP6T_CONTINUE XT_CONTINUE
+#define IP6T_RETURN XT_RETURN
+
+/* Pre-iptables-1.4.0 */
+#include <linux/netfilter/xt_tcpudp.h>
+#define ip6t_tcp xt_tcp
+#define ip6t_udp xt_udp
+#define IP6T_TCP_INV_SRCPT     XT_TCP_INV_SRCPT
+#define IP6T_TCP_INV_DSTPT     XT_TCP_INV_DSTPT
+#define IP6T_TCP_INV_FLAGS     XT_TCP_INV_FLAGS
+#define IP6T_TCP_INV_OPTION    XT_TCP_INV_OPTION
+#define IP6T_TCP_INV_MASK      XT_TCP_INV_MASK
+#define IP6T_UDP_INV_SRCPT     XT_UDP_INV_SRCPT
+#define IP6T_UDP_INV_DSTPT     XT_UDP_INV_DSTPT
+#define IP6T_UDP_INV_MASK      XT_UDP_INV_MASK
+
+#define ip6t_counters_info xt_counters_info
+#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET
+#define IP6T_ERROR_TARGET XT_ERROR_TARGET
+#define IP6T_MATCH_ITERATE(e, fn, args...) \
+       XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args)
+#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args)
+
+/* Yes, Virginia, you have to zero the padding. */
+struct ip6t_ip6 {
+       /* Source and destination IP6 addr */
+       struct in6_addr src, dst;               
+       /* Mask for src and dest IP6 addr */
+       struct in6_addr smsk, dmsk;
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Upper protocol number
+        * - The allowed value is 0 (any) or protocol number of last parsable
+        *   header, which is 50 (ESP), 59 (No Next Header), 135 (MH), or
+        *   the non IPv6 extension headers.
+        * - The protocol numbers of IPv6 extension headers except of ESP and
+        *   MH do not match any packets.
+        * - You also need to set IP6T_FLAGS_PROTO to "flags" to check protocol.
+        */
+       __u16 proto;
+       /* TOS to match iff flags & IP6T_F_TOS */
+       __u8 tos;
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u8 invflags;
+};
+
+/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
+#define IP6T_F_PROTO           0x01    /* Set if rule cares about upper 
+                                          protocols */
+#define IP6T_F_TOS             0x02    /* Match the TOS. */
+#define IP6T_F_GOTO            0x04    /* Set if jump is a goto */
+#define IP6T_F_MASK            0x07    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct ip6t_ip6. */
+#define IP6T_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
+#define IP6T_INV_VIA_OUT               0x02    /* Invert the sense of OUT IFACE */
+#define IP6T_INV_TOS           0x04    /* Invert the sense of TOS. */
+#define IP6T_INV_SRCIP         0x08    /* Invert the sense of SRC IP. */
+#define IP6T_INV_DSTIP         0x10    /* Invert the sense of DST OP. */
+#define IP6T_INV_FRAG          0x20    /* Invert the sense of FRAG. */
+#define IP6T_INV_PROTO         XT_INV_PROTO
+#define IP6T_INV_MASK          0x7F    /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general IP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct ip6t_entry {
+       struct ip6t_ip6 ipv6;
+
+       /* Mark with fields that we care about. */
+       unsigned int nfcache;
+
+       /* Size of ipt_entry + matches */
+       __u16 target_offset;
+       /* Size of ipt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/* Standard entry */
+struct ip6t_standard {
+       struct ip6t_entry entry;
+       struct xt_standard_target target;
+};
+
+struct ip6t_error {
+       struct ip6t_entry entry;
+       struct xt_error_target target;
+};
+
+#define IP6T_ENTRY_INIT(__size)                                                       \
+{                                                                             \
+       .target_offset  = sizeof(struct ip6t_entry),                           \
+       .next_offset    = (__size),                                            \
+}
+
+#define IP6T_STANDARD_INIT(__verdict)                                         \
+{                                                                             \
+       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_standard)),       \
+       .target         = XT_TARGET_INIT(XT_STANDARD_TARGET,                   \
+                                        sizeof(struct xt_standard_target)),   \
+       .target.verdict = -(__verdict) - 1,                                    \
+}
+
+#define IP6T_ERROR_INIT                                                               \
+{                                                                             \
+       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_error)),          \
+       .target         = XT_TARGET_INIT(XT_ERROR_TARGET,                      \
+                                        sizeof(struct xt_error_target)),      \
+       .target.errorname = "ERROR",                                           \
+}
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use
+ * a raw socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in6.h before adding new number here.
+ */
+#define IP6T_BASE_CTL                  64
+
+#define IP6T_SO_SET_REPLACE            (IP6T_BASE_CTL)
+#define IP6T_SO_SET_ADD_COUNTERS       (IP6T_BASE_CTL + 1)
+#define IP6T_SO_SET_MAX                        IP6T_SO_SET_ADD_COUNTERS
+
+#define IP6T_SO_GET_INFO               (IP6T_BASE_CTL)
+#define IP6T_SO_GET_ENTRIES            (IP6T_BASE_CTL + 1)
+#define IP6T_SO_GET_REVISION_MATCH     (IP6T_BASE_CTL + 4)
+#define IP6T_SO_GET_REVISION_TARGET    (IP6T_BASE_CTL + 5)
+#define IP6T_SO_GET_MAX                        IP6T_SO_GET_REVISION_TARGET
+
+/* obtain original address if REDIRECT'd connection */
+#define IP6T_SO_ORIGINAL_DST            80
+
+/* ICMP matching stuff */
+struct ip6t_icmp {
+       __u8 type;                              /* type to match */
+       __u8 code[2];                           /* range of code */
+       __u8 invflags;                          /* Inverse flags */
+};
+
+/* Values for "inv" field for struct ipt_icmp. */
+#define IP6T_ICMP_INV  0x01    /* Invert the sense of type/code test */
+
+/* The argument to IP6T_SO_GET_INFO */
+struct ip6t_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to IP6T_SO_SET_REPLACE. */
+struct ip6t_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct ip6t_entry entries[0];
+};
+
+/* The argument to IP6T_SO_GET_ENTRIES. */
+struct ip6t_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct ip6t_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *
+ip6t_get_target(struct ip6t_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+
+#endif /* _IP6_TABLES_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_HL.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_HL.h
new file mode 100644 (file)
index 0000000..ebd8ead
--- /dev/null
@@ -0,0 +1,24 @@
+/* Hop Limit modification module for ip6tables
+ * Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ * Based on HW's TTL module */
+
+#ifndef _IP6T_HL_H
+#define _IP6T_HL_H
+
+#include <linux/types.h>
+
+enum {
+       IP6T_HL_SET = 0,
+       IP6T_HL_INC,
+       IP6T_HL_DEC
+};
+
+#define IP6T_HL_MAXMODE        IP6T_HL_DEC
+
+struct ip6t_HL_info {
+       __u8    mode;
+       __u8    hop_limit;
+};
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_LOG.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_LOG.h
new file mode 100644 (file)
index 0000000..3dd0bc4
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _IP6T_LOG_H
+#define _IP6T_LOG_H
+
+#warning "Please update iptables, this file will be removed soon!"
+
+/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
+#define IP6T_LOG_TCPSEQ                0x01    /* Log TCP sequence numbers */
+#define IP6T_LOG_TCPOPT                0x02    /* Log TCP options */
+#define IP6T_LOG_IPOPT         0x04    /* Log IP options */
+#define IP6T_LOG_UID           0x08    /* Log UID owning local socket */
+#define IP6T_LOG_NFLOG         0x10    /* Unsupported, don't use */
+#define IP6T_LOG_MACDECODE     0x20    /* Decode MAC header */
+#define IP6T_LOG_MASK          0x2f
+
+struct ip6t_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /*_IPT_LOG_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_NPT.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_NPT.h
new file mode 100644 (file)
index 0000000..f763355
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __NETFILTER_IP6T_NPT
+#define __NETFILTER_IP6T_NPT
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+struct ip6t_npt_tginfo {
+       union nf_inet_addr      src_pfx;
+       union nf_inet_addr      dst_pfx;
+       __u8                    src_pfx_len;
+       __u8                    dst_pfx_len;
+       /* Used internally by the kernel */
+       __sum16                 adjustment;
+};
+
+#endif /* __NETFILTER_IP6T_NPT */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_REJECT.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_REJECT.h
new file mode 100644 (file)
index 0000000..cd2e940
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _IP6T_REJECT_H
+#define _IP6T_REJECT_H
+
+#include <linux/types.h>
+
+enum ip6t_reject_with {
+       IP6T_ICMP6_NO_ROUTE,
+       IP6T_ICMP6_ADM_PROHIBITED,
+       IP6T_ICMP6_NOT_NEIGHBOUR,
+       IP6T_ICMP6_ADDR_UNREACH,
+       IP6T_ICMP6_PORT_UNREACH,
+       IP6T_ICMP6_ECHOREPLY,
+       IP6T_TCP_RESET,
+       IP6T_ICMP6_POLICY_FAIL,
+       IP6T_ICMP6_REJECT_ROUTE
+};
+
+struct ip6t_reject_info {
+       __u32   with;   /* reject type */
+};
+
+#endif /*_IP6T_REJECT_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ah.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ah.h
new file mode 100644 (file)
index 0000000..5da2b65
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _IP6T_AH_H
+#define _IP6T_AH_H
+
+#include <linux/types.h>
+
+struct ip6t_ah {
+       __u32 spis[2];                  /* Security Parameter Index */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  hdrres;                   /* Test of the Reserved Filed */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+#define IP6T_AH_SPI 0x01
+#define IP6T_AH_LEN 0x02
+#define IP6T_AH_RES 0x04
+
+/* Values for "invflags" field in struct ip6t_ah. */
+#define IP6T_AH_INV_SPI                0x01    /* Invert the sense of spi. */
+#define IP6T_AH_INV_LEN                0x02    /* Invert the sense of length. */
+#define IP6T_AH_INV_MASK       0x03    /* All possible flags. */
+
+#endif /*_IP6T_AH_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_frag.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_frag.h
new file mode 100644 (file)
index 0000000..dfd8bc2
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _IP6T_FRAG_H
+#define _IP6T_FRAG_H
+
+#include <linux/types.h>
+
+struct ip6t_frag {
+       __u32 ids[2];                   /* Identification range */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  flags;                    /* Flags */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+#define IP6T_FRAG_IDS          0x01
+#define IP6T_FRAG_LEN          0x02
+#define IP6T_FRAG_RES          0x04
+#define IP6T_FRAG_FST          0x08
+#define IP6T_FRAG_MF           0x10
+#define IP6T_FRAG_NMF                  0x20
+
+/* Values for "invflags" field in struct ip6t_frag. */
+#define IP6T_FRAG_INV_IDS      0x01    /* Invert the sense of ids. */
+#define IP6T_FRAG_INV_LEN      0x02    /* Invert the sense of length. */
+#define IP6T_FRAG_INV_MASK     0x03    /* All possible flags. */
+
+#endif /*_IP6T_FRAG_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_hl.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_hl.h
new file mode 100644 (file)
index 0000000..6e76dbc
--- /dev/null
@@ -0,0 +1,24 @@
+/* ip6tables module for matching the Hop Limit value
+ * Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ * Based on HW's ttl module */
+
+#ifndef _IP6T_HL_H
+#define _IP6T_HL_H
+
+#include <linux/types.h>
+
+enum {
+       IP6T_HL_EQ = 0,         /* equals */
+       IP6T_HL_NE,             /* not equals */
+       IP6T_HL_LT,             /* less than */
+       IP6T_HL_GT,             /* greater than */
+};
+
+
+struct ip6t_hl_info {
+       __u8    mode;
+       __u8    hop_limit;
+};
+
+
+#endif
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ipv6header.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_ipv6header.h
new file mode 100644 (file)
index 0000000..efae3a2
--- /dev/null
@@ -0,0 +1,28 @@
+/* ipv6header match - matches IPv6 packets based
+on whether they contain certain headers */
+
+/* Original idea: Brad Chapman 
+ * Rewritten by: Andras Kis-Szabo <kisza@sch.bme.hu> */
+
+
+#ifndef __IPV6HEADER_H
+#define __IPV6HEADER_H
+
+#include <linux/types.h>
+
+struct ip6t_ipv6header_info {
+       __u8 matchflags;
+       __u8 invflags;
+       __u8 modeflag;
+};
+
+#define MASK_HOPOPTS    128
+#define MASK_DSTOPTS    64
+#define MASK_ROUTING    32
+#define MASK_FRAGMENT   16
+#define MASK_AH         8
+#define MASK_ESP        4
+#define MASK_NONE       2
+#define MASK_PROTO      1
+
+#endif /* __IPV6HEADER_H */
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_mh.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_mh.h
new file mode 100644 (file)
index 0000000..a7729a5
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _IP6T_MH_H
+#define _IP6T_MH_H
+
+#include <linux/types.h>
+
+/* MH matching stuff */
+struct ip6t_mh {
+       __u8 types[2];  /* MH type range */
+       __u8 invflags;  /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct ip6t_mh. */
+#define IP6T_MH_INV_TYPE       0x01    /* Invert the sense of type. */
+#define IP6T_MH_INV_MASK       0x01    /* All possible flags. */
+
+#endif /*_IP6T_MH_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_opts.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_opts.h
new file mode 100644 (file)
index 0000000..17d419a
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _IP6T_OPTS_H
+#define _IP6T_OPTS_H
+
+#include <linux/types.h>
+
+#define IP6T_OPTS_OPTSNR 16
+
+struct ip6t_opts {
+       __u32 hdrlen;                   /* Header Length */
+       __u8 flags;                             /*  */
+       __u8 invflags;                  /* Inverse flags */
+       __u16 opts[IP6T_OPTS_OPTSNR];   /* opts */
+       __u8 optsnr;                    /* Nr of OPts */
+};
+
+#define IP6T_OPTS_LEN          0x01
+#define IP6T_OPTS_OPTS                 0x02
+#define IP6T_OPTS_NSTRICT      0x04
+
+/* Values for "invflags" field in struct ip6t_rt. */
+#define IP6T_OPTS_INV_LEN      0x01    /* Invert the sense of length. */
+#define IP6T_OPTS_INV_MASK     0x01    /* All possible flags. */
+
+#endif /*_IP6T_OPTS_H*/
diff --git a/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_rt.h b/lib/libdss-include/include/linux/netfilter_ipv6/ip6t_rt.h
new file mode 100644 (file)
index 0000000..7605a5f
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _IP6T_RT_H
+#define _IP6T_RT_H
+
+#include <linux/types.h>
+/*#include <linux/in6.h>*/
+
+#define IP6T_RT_HOPS 16
+
+struct ip6t_rt {
+       __u32 rt_type;                  /* Routing Type */
+       __u32 segsleft[2];                      /* Segments Left */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  flags;                    /*  */
+       __u8  invflags;                 /* Inverse flags */
+       struct in6_addr addrs[IP6T_RT_HOPS];    /* Hops */
+       __u8 addrnr;                    /* Nr of Addresses */
+};
+
+#define IP6T_RT_TYP            0x01
+#define IP6T_RT_SGS            0x02
+#define IP6T_RT_LEN            0x04
+#define IP6T_RT_RES            0x08
+#define IP6T_RT_FST_MASK       0x30
+#define IP6T_RT_FST            0x10
+#define IP6T_RT_FST_NSTRICT    0x20
+
+/* Values for "invflags" field in struct ip6t_rt. */
+#define IP6T_RT_INV_TYP                0x01    /* Invert the sense of type. */
+#define IP6T_RT_INV_SGS                0x02    /* Invert the sense of Segments. */
+#define IP6T_RT_INV_LEN                0x04    /* Invert the sense of length. */
+#define IP6T_RT_INV_MASK       0x07    /* All possible flags. */
+
+#endif /*_IP6T_RT_H*/
diff --git a/lib/libdss-include/include/linux/netlink.h b/lib/libdss-include/include/linux/netlink.h
new file mode 100644 (file)
index 0000000..8a7ca5c
--- /dev/null
@@ -0,0 +1,189 @@
+#ifndef __LINUX_NETLINK_H
+#define __LINUX_NETLINK_H
+
+#include <linux/kernel.h>
+#include <linux/socket.h> /* for __kernel_sa_family_t */
+#include <linux/types.h>
+
+#define NETLINK_ROUTE          0       /* Routing/device hook                          */
+#define NETLINK_UNUSED         1       /* Unused number                                */
+#define NETLINK_USERSOCK       2       /* Reserved for user mode socket protocols      */
+#define NETLINK_FIREWALL       3       /* Unused number, formerly ip_queue             */
+#define NETLINK_SOCK_DIAG      4       /* socket monitoring                            */
+#define NETLINK_NFLOG          5       /* netfilter/iptables ULOG */
+#define NETLINK_XFRM           6       /* ipsec */
+#define NETLINK_SELINUX                7       /* SELinux event notifications */
+#define NETLINK_ISCSI          8       /* Open-iSCSI */
+#define NETLINK_AUDIT          9       /* auditing */
+#define NETLINK_FIB_LOOKUP     10      
+#define NETLINK_CONNECTOR      11
+#define NETLINK_NETFILTER      12      /* netfilter subsystem */
+#define NETLINK_IP6_FW         13
+#define NETLINK_DNRTMSG                14      /* DECnet routing messages */
+#define NETLINK_KOBJECT_UEVENT 15      /* Kernel messages to userspace */
+#define NETLINK_GENERIC                16
+/* leave room for NETLINK_DM (DM Events) */
+#define NETLINK_SCSITRANSPORT  18      /* SCSI Transports */
+#define NETLINK_ECRYPTFS       19
+#define NETLINK_RDMA           20
+#define NETLINK_CRYPTO         21      /* Crypto layer */
+
+#define NETLINK_INET_DIAG      NETLINK_SOCK_DIAG
+
+#define MAX_LINKS 32           
+
+struct sockaddr_nl {
+       __kernel_sa_family_t    nl_family;      /* AF_NETLINK   */
+       unsigned short  nl_pad;         /* zero         */
+       __u32           nl_pid;         /* port ID      */
+               __u32           nl_groups;      /* multicast groups mask */
+};
+
+struct nlmsghdr {
+       __u32           nlmsg_len;      /* Length of message including header */
+       __u16           nlmsg_type;     /* Message content */
+       __u16           nlmsg_flags;    /* Additional flags */
+       __u32           nlmsg_seq;      /* Sequence number */
+       __u32           nlmsg_pid;      /* Sending process port ID */
+};
+
+/* Flags values */
+
+#define NLM_F_REQUEST          1       /* It is request message.       */
+#define NLM_F_MULTI            2       /* Multipart message, terminated by NLMSG_DONE */
+#define NLM_F_ACK              4       /* Reply with ack, with zero or error code */
+#define NLM_F_ECHO             8       /* Echo this request            */
+#define NLM_F_DUMP_INTR                16      /* Dump was inconsistent due to sequence change */
+#define NLM_F_DUMP_FILTERED    32      /* Dump was filtered as requested */
+
+/* Modifiers to GET request */
+#define NLM_F_ROOT     0x100   /* specify tree root    */
+#define NLM_F_MATCH    0x200   /* return all matching  */
+#define NLM_F_ATOMIC   0x400   /* atomic GET           */
+#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
+
+/* Modifiers to NEW request */
+#define NLM_F_REPLACE  0x100   /* Override existing            */
+#define NLM_F_EXCL     0x200   /* Do not touch, if it exists   */
+#define NLM_F_CREATE   0x400   /* Create, if it does not exist */
+#define NLM_F_APPEND   0x800   /* Add to end of list           */
+
+/*
+   4.4BSD ADD          NLM_F_CREATE|NLM_F_EXCL
+   4.4BSD CHANGE       NLM_F_REPLACE
+
+   True CHANGE         NLM_F_CREATE|NLM_F_REPLACE
+   Append              NLM_F_CREATE
+   Check               NLM_F_EXCL
+ */
+
+#define NLMSG_ALIGNTO  4U
+#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
+#define NLMSG_HDRLEN    ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
+#define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
+#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
+#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
+#define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
+                                 (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
+#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len <= (len))
+#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
+
+#define NLMSG_NOOP             0x1     /* Nothing.             */
+#define NLMSG_ERROR            0x2     /* Error                */
+#define NLMSG_DONE             0x3     /* End of a dump        */
+#define NLMSG_OVERRUN          0x4     /* Data lost            */
+
+#define NLMSG_MIN_TYPE         0x10    /* < 0x10: reserved control messages */
+
+struct nlmsgerr {
+       int             error;
+       struct nlmsghdr msg;
+};
+
+#define NETLINK_ADD_MEMBERSHIP         1
+#define NETLINK_DROP_MEMBERSHIP                2
+#define NETLINK_PKTINFO                        3
+#define NETLINK_BROADCAST_ERROR                4
+#define NETLINK_NO_ENOBUFS             5
+#define NETLINK_RX_RING                        6
+#define NETLINK_TX_RING                        7
+#define NETLINK_LISTEN_ALL_NSID                8
+#define NETLINK_LIST_MEMBERSHIPS       9
+#define NETLINK_CAP_ACK                        10
+
+struct nl_pktinfo {
+       __u32   group;
+};
+
+struct nl_mmap_req {
+       unsigned int    nm_block_size;
+       unsigned int    nm_block_nr;
+       unsigned int    nm_frame_size;
+       unsigned int    nm_frame_nr;
+};
+
+struct nl_mmap_hdr {
+       unsigned int    nm_status;
+       unsigned int    nm_len;
+       __u32           nm_group;
+       /* credentials */
+       __u32           nm_pid;
+       __u32           nm_uid;
+       __u32           nm_gid;
+};
+
+enum nl_mmap_status {
+       NL_MMAP_STATUS_UNUSED,
+       NL_MMAP_STATUS_RESERVED,
+       NL_MMAP_STATUS_VALID,
+       NL_MMAP_STATUS_COPY,
+       NL_MMAP_STATUS_SKIP,
+};
+
+#define NL_MMAP_MSG_ALIGNMENT          NLMSG_ALIGNTO
+#define NL_MMAP_MSG_ALIGN(sz)          __ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
+#define NL_MMAP_HDRLEN                 NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
+
+#define NET_MAJOR 36           /* Major 36 is reserved for networking                                          */
+
+enum {
+       NETLINK_UNCONNECTED = 0,
+       NETLINK_CONNECTED,
+};
+
+/*
+ *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ * |        Header       | Pad |     Payload       | Pad |
+ * |   (struct nlattr)   | ing |                   | ing |
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ *  <-------------- nlattr->nla_len -------------->
+ */
+
+struct nlattr {
+       __u16           nla_len;
+       __u16           nla_type;
+};
+
+/*
+ * nla_type (16 bits)
+ * +---+---+-------------------------------+
+ * | N | O | Attribute Type                |
+ * +---+---+-------------------------------+
+ * N := Carries nested attributes
+ * O := Payload stored in network byte order
+ *
+ * Note: The N and O flag are mutually exclusive.
+ */
+#define NLA_F_NESTED           (1 << 15)
+#define NLA_F_NET_BYTEORDER    (1 << 14)
+#define NLA_TYPE_MASK          ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
+
+#define NLA_ALIGNTO            4
+#define NLA_ALIGN(len)         (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
+#define NLA_HDRLEN             ((int) NLA_ALIGN(sizeof(struct nlattr)))
+
+
+#endif /* __LINUX_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/netlink_diag.h b/lib/libdss-include/include/linux/netlink_diag.h
new file mode 100644 (file)
index 0000000..f2159d3
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __NETLINK_DIAG_H__
+#define __NETLINK_DIAG_H__
+
+#include <linux/types.h>
+
+struct netlink_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   ndiag_ino;
+       __u32   ndiag_show;
+       __u32   ndiag_cookie[2];
+};
+
+struct netlink_diag_msg {
+       __u8    ndiag_family;
+       __u8    ndiag_type;
+       __u8    ndiag_protocol;
+       __u8    ndiag_state;
+
+       __u32   ndiag_portid;
+       __u32   ndiag_dst_portid;
+       __u32   ndiag_dst_group;
+       __u32   ndiag_ino;
+       __u32   ndiag_cookie[2];
+};
+
+struct netlink_diag_ring {
+       __u32   ndr_block_size;
+       __u32   ndr_block_nr;
+       __u32   ndr_frame_size;
+       __u32   ndr_frame_nr;
+};
+
+enum {
+       /* NETLINK_DIAG_NONE, standard nl API requires this attribute!  */
+       NETLINK_DIAG_MEMINFO,
+       NETLINK_DIAG_GROUPS,
+       NETLINK_DIAG_RX_RING,
+       NETLINK_DIAG_TX_RING,
+
+       __NETLINK_DIAG_MAX,
+};
+
+#define NETLINK_DIAG_MAX (__NETLINK_DIAG_MAX - 1)
+
+#define NDIAG_PROTO_ALL                ((__u8) ~0)
+
+#define NDIAG_SHOW_MEMINFO     0x00000001 /* show memory info of a socket */
+#define NDIAG_SHOW_GROUPS      0x00000002 /* show groups of a netlink socket */
+#define NDIAG_SHOW_RING_CFG    0x00000004 /* show ring configuration */
+
+#endif
diff --git a/lib/libdss-include/include/linux/netrom.h b/lib/libdss-include/include/linux/netrom.h
new file mode 100644 (file)
index 0000000..af7313c
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * These are the public elements of the Linux kernel NET/ROM implementation.
+ * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
+ * definition of the ax25_address structure.
+ */
+
+#ifndef        NETROM_KERNEL_H
+#define        NETROM_KERNEL_H
+
+#include <linux/ax25.h>
+
+#define NETROM_MTU     236
+
+#define NETROM_T1      1
+#define NETROM_T2      2
+#define NETROM_N2      3
+#define        NETROM_T4       6
+#define        NETROM_IDLE     7
+
+#define        SIOCNRDECOBS            (SIOCPROTOPRIVATE+2)
+
+struct nr_route_struct {
+#define        NETROM_NEIGH    0
+#define        NETROM_NODE     1
+       int             type;
+       ax25_address    callsign;
+       char            device[16];
+       unsigned int    quality;
+       char            mnemonic[7];
+       ax25_address    neighbour;
+       unsigned int    obs_count;
+       unsigned int    ndigis;
+       ax25_address    digipeaters[AX25_MAX_DIGIS];
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/nfc.h b/lib/libdss-include/include/linux/nfc.h
new file mode 100644 (file)
index 0000000..399f39f
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2011 Instituto Nokia de Tecnologia
+ *
+ * Authors:
+ *    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
+ *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef __LINUX_NFC_H
+#define __LINUX_NFC_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+#define NFC_GENL_NAME "nfc"
+#define NFC_GENL_VERSION 1
+
+#define NFC_GENL_MCAST_EVENT_NAME "events"
+
+/**
+ * enum nfc_commands - supported nfc commands
+ *
+ * @NFC_CMD_UNSPEC: unspecified command
+ *
+ * @NFC_CMD_GET_DEVICE: request information about a device (requires
+ *     %NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices
+ * @NFC_CMD_DEV_UP: turn on the nfc device
+ *     (requires %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_DEV_DOWN: turn off the nfc device
+ *     (requires %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_START_POLL: start polling for targets using the given protocols
+ *     (requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS)
+ * @NFC_CMD_STOP_POLL: stop polling for targets (requires
+ *     %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires
+ *     %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found
+ *     (it sends %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred
+ *     (it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and
+ *     %NFC_ATTR_PROTOCOLS)
+ * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed
+ *     (it sends %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_TM_ACTIVATED: event emitted when the adapter is activated in
+ *      target mode.
+ * @NFC_EVENT_DEVICE_DEACTIVATED: event emitted when the adapter is deactivated
+ *      from target mode.
+ * @NFC_CMD_LLC_GET_PARAMS: request LTO, RW, and MIUX parameters for a device
+ * @NFC_CMD_LLC_SET_PARAMS: set one or more of LTO, RW, and MIUX parameters for
+ *     a device. LTO must be set before the link is up otherwise -EINPROGRESS
+ *     is returned. RW and MIUX can be set at anytime and will be passed in
+ *     subsequent CONNECT and CC messages.
+ *     If one of the passed parameters is wrong none is set and -EINVAL is
+ *     returned.
+ * @NFC_CMD_ENABLE_SE: Enable the physical link to a specific secure element.
+ *     Once enabled a secure element will handle card emulation mode, i.e.
+ *     starting a poll from a device which has a secure element enabled means
+ *     we want to do SE based card emulation.
+ * @NFC_CMD_DISABLE_SE: Disable the physical link to a specific secure element.
+ * @NFC_CMD_FW_DOWNLOAD: Request to Load/flash firmware, or event to inform
+ *     that some firmware was loaded
+ * @NFC_EVENT_SE_ADDED: Event emitted when a new secure element is discovered.
+ *     This typically will be sent whenever a new NFC controller with either
+ *     an embedded SE or an UICC one connected to it through SWP.
+ * @NFC_EVENT_SE_REMOVED: Event emitted when a secure element is removed from
+ *     the system, as a consequence of e.g. an NFC controller being unplugged.
+ * @NFC_EVENT_SE_CONNECTIVITY: This event is emitted whenever a secure element
+ *     is requesting connectivity access. For example a UICC SE may need to
+ *     talk with a sleeping modem and will notify this need by sending this
+ *     event. It is then up to userspace to decide if it will wake the modem
+ *     up or not.
+ * @NFC_EVENT_SE_TRANSACTION: This event is sent when an application running on
+ *     a specific SE notifies us about the end of a transaction. The parameter
+ *     for this event is the application ID (AID).
+ * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller.
+ * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element.
+ * @NFC_CMD_ACTIVATE_TARGET: Request NFC controller to reactivate target.
+ * @NFC_CMD_VENDOR: Vendor specific command, to be implemented directly
+ *     from the driver in order to support hardware specific operations.
+ */
+enum nfc_commands {
+       NFC_CMD_UNSPEC,
+       NFC_CMD_GET_DEVICE,
+       NFC_CMD_DEV_UP,
+       NFC_CMD_DEV_DOWN,
+       NFC_CMD_DEP_LINK_UP,
+       NFC_CMD_DEP_LINK_DOWN,
+       NFC_CMD_START_POLL,
+       NFC_CMD_STOP_POLL,
+       NFC_CMD_GET_TARGET,
+       NFC_EVENT_TARGETS_FOUND,
+       NFC_EVENT_DEVICE_ADDED,
+       NFC_EVENT_DEVICE_REMOVED,
+       NFC_EVENT_TARGET_LOST,
+       NFC_EVENT_TM_ACTIVATED,
+       NFC_EVENT_TM_DEACTIVATED,
+       NFC_CMD_LLC_GET_PARAMS,
+       NFC_CMD_LLC_SET_PARAMS,
+       NFC_CMD_ENABLE_SE,
+       NFC_CMD_DISABLE_SE,
+       NFC_CMD_LLC_SDREQ,
+       NFC_EVENT_LLC_SDRES,
+       NFC_CMD_FW_DOWNLOAD,
+       NFC_EVENT_SE_ADDED,
+       NFC_EVENT_SE_REMOVED,
+       NFC_EVENT_SE_CONNECTIVITY,
+       NFC_EVENT_SE_TRANSACTION,
+       NFC_CMD_GET_SE,
+       NFC_CMD_SE_IO,
+       NFC_CMD_ACTIVATE_TARGET,
+       NFC_CMD_VENDOR,
+/* private: internal use only */
+       __NFC_CMD_AFTER_LAST
+};
+#define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1)
+
+/**
+ * enum nfc_attrs - supported nfc attributes
+ *
+ * @NFC_ATTR_UNSPEC: unspecified attribute
+ *
+ * @NFC_ATTR_DEVICE_INDEX: index of nfc device
+ * @NFC_ATTR_DEVICE_NAME: device name, max 8 chars
+ * @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from
+ *     NFC_PROTO_*_MASK constants
+ * @NFC_ATTR_TARGET_INDEX: index of the nfc target
+ * @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID
+ * @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the
+ *     target is not NFC-Forum compliant)
+ * @NFC_ATTR_TARGET_NFCID1: NFC-A targets identifier, max 10 bytes
+ * @NFC_ATTR_TARGET_SENSB_RES: NFC-B targets extra information, max 12 bytes
+ * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes
+ * @NFC_ATTR_COMM_MODE: Passive or active mode
+ * @NFC_ATTR_RF_MODE: Initiator or target
+ * @NFC_ATTR_IM_PROTOCOLS: Initiator mode protocols to poll for
+ * @NFC_ATTR_TM_PROTOCOLS: Target mode protocols to listen for
+ * @NFC_ATTR_LLC_PARAM_LTO: Link TimeOut parameter
+ * @NFC_ATTR_LLC_PARAM_RW: Receive Window size parameter
+ * @NFC_ATTR_LLC_PARAM_MIUX: MIU eXtension parameter
+ * @NFC_ATTR_SE: Available Secure Elements
+ * @NFC_ATTR_FIRMWARE_NAME: Free format firmware version
+ * @NFC_ATTR_SE_INDEX: Secure element index
+ * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED)
+ * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status
+ * @NFC_ATTR_APDU: Secure element APDU
+ * @NFC_ATTR_TARGET_ISO15693_DSFID: ISO 15693 Data Storage Format Identifier
+ * @NFC_ATTR_TARGET_ISO15693_UID: ISO 15693 Unique Identifier
+ * @NFC_ATTR_SE_PARAMS: Parameters data from an evt_transaction
+ * @NFC_ATTR_VENDOR_ID: NFC manufacturer unique ID, typically an OUI
+ * @NFC_ATTR_VENDOR_SUBCMD: Vendor specific sub command
+ * @NFC_ATTR_VENDOR_DATA: Vendor specific data, to be optionally passed
+ *     to a vendor specific command implementation
+ */
+enum nfc_attrs {
+       NFC_ATTR_UNSPEC,
+       NFC_ATTR_DEVICE_INDEX,
+       NFC_ATTR_DEVICE_NAME,
+       NFC_ATTR_PROTOCOLS,
+       NFC_ATTR_TARGET_INDEX,
+       NFC_ATTR_TARGET_SENS_RES,
+       NFC_ATTR_TARGET_SEL_RES,
+       NFC_ATTR_TARGET_NFCID1,
+       NFC_ATTR_TARGET_SENSB_RES,
+       NFC_ATTR_TARGET_SENSF_RES,
+       NFC_ATTR_COMM_MODE,
+       NFC_ATTR_RF_MODE,
+       NFC_ATTR_DEVICE_POWERED,
+       NFC_ATTR_IM_PROTOCOLS,
+       NFC_ATTR_TM_PROTOCOLS,
+       NFC_ATTR_LLC_PARAM_LTO,
+       NFC_ATTR_LLC_PARAM_RW,
+       NFC_ATTR_LLC_PARAM_MIUX,
+       NFC_ATTR_SE,
+       NFC_ATTR_LLC_SDP,
+       NFC_ATTR_FIRMWARE_NAME,
+       NFC_ATTR_SE_INDEX,
+       NFC_ATTR_SE_TYPE,
+       NFC_ATTR_SE_AID,
+       NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS,
+       NFC_ATTR_SE_APDU,
+       NFC_ATTR_TARGET_ISO15693_DSFID,
+       NFC_ATTR_TARGET_ISO15693_UID,
+       NFC_ATTR_SE_PARAMS,
+       NFC_ATTR_VENDOR_ID,
+       NFC_ATTR_VENDOR_SUBCMD,
+       NFC_ATTR_VENDOR_DATA,
+/* private: internal use only */
+       __NFC_ATTR_AFTER_LAST
+};
+#define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1)
+
+enum nfc_sdp_attr {
+       NFC_SDP_ATTR_UNSPEC,
+       NFC_SDP_ATTR_URI,
+       NFC_SDP_ATTR_SAP,
+/* private: internal use only */
+       __NFC_SDP_ATTR_AFTER_LAST
+};
+#define NFC_SDP_ATTR_MAX (__NFC_SDP_ATTR_AFTER_LAST - 1)
+
+#define NFC_DEVICE_NAME_MAXSIZE                8
+#define NFC_NFCID1_MAXSIZE             10
+#define NFC_NFCID2_MAXSIZE             8
+#define NFC_NFCID3_MAXSIZE             10
+#define NFC_SENSB_RES_MAXSIZE          12
+#define NFC_SENSF_RES_MAXSIZE          18
+#define NFC_ATR_REQ_MAXSIZE            64
+#define NFC_ATR_RES_MAXSIZE            64
+#define NFC_ATR_REQ_GB_MAXSIZE         48
+#define NFC_ATR_RES_GB_MAXSIZE         47
+#define NFC_GB_MAXSIZE                 48
+#define NFC_FIRMWARE_NAME_MAXSIZE      32
+#define NFC_ISO15693_UID_MAXSIZE       8
+
+/* NFC protocols */
+#define NFC_PROTO_JEWEL                1
+#define NFC_PROTO_MIFARE       2
+#define NFC_PROTO_FELICA       3
+#define NFC_PROTO_ISO14443     4
+#define NFC_PROTO_NFC_DEP      5
+#define NFC_PROTO_ISO14443_B   6
+#define NFC_PROTO_ISO15693     7
+
+#define NFC_PROTO_MAX          8
+
+/* NFC communication modes */
+#define NFC_COMM_ACTIVE  0
+#define NFC_COMM_PASSIVE 1
+
+/* NFC RF modes */
+#define NFC_RF_INITIATOR 0
+#define NFC_RF_TARGET    1
+#define NFC_RF_NONE      2
+
+/* NFC protocols masks used in bitsets */
+#define NFC_PROTO_JEWEL_MASK      (1 << NFC_PROTO_JEWEL)
+#define NFC_PROTO_MIFARE_MASK     (1 << NFC_PROTO_MIFARE)
+#define NFC_PROTO_FELICA_MASK    (1 << NFC_PROTO_FELICA)
+#define NFC_PROTO_ISO14443_MASK          (1 << NFC_PROTO_ISO14443)
+#define NFC_PROTO_NFC_DEP_MASK   (1 << NFC_PROTO_NFC_DEP)
+#define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B)
+#define NFC_PROTO_ISO15693_MASK          (1 << NFC_PROTO_ISO15693)
+
+/* NFC Secure Elements */
+#define NFC_SE_UICC     0x1
+#define NFC_SE_EMBEDDED 0x2
+
+#define NFC_SE_DISABLED 0x0
+#define NFC_SE_ENABLED  0x1
+
+struct sockaddr_nfc {
+       sa_family_t sa_family;
+       __u32 dev_idx;
+       __u32 target_idx;
+       __u32 nfc_protocol;
+};
+
+#define NFC_LLCP_MAX_SERVICE_NAME 63
+struct sockaddr_nfc_llcp {
+       sa_family_t sa_family;
+       __u32 dev_idx;
+       __u32 target_idx;
+       __u32 nfc_protocol;
+       __u8 dsap; /* Destination SAP, if known */
+       __u8 ssap; /* Source SAP to be bound to */
+       char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */;
+       size_t service_name_len;
+};
+
+/* NFC socket protocols */
+#define NFC_SOCKPROTO_RAW      0
+#define NFC_SOCKPROTO_LLCP     1
+#define NFC_SOCKPROTO_MAX      2
+
+#define NFC_HEADER_SIZE 1
+
+/**
+ * Pseudo-header info for raw socket packets
+ * First byte is the adapter index
+ * Second byte contains flags
+ *  - 0x01 - Direction (0=RX, 1=TX)
+ *  - 0x02-0x04 - Payload type (000=LLCP, 001=NCI, 010=HCI, 011=Digital,
+ *                              100=Proprietary)
+ *  - 0x05-0x80 - Reserved
+ **/
+#define NFC_RAW_HEADER_SIZE    2
+#define NFC_DIRECTION_RX               0x00
+#define NFC_DIRECTION_TX               0x01
+
+#define RAW_PAYLOAD_LLCP 0
+#define RAW_PAYLOAD_NCI        1
+#define RAW_PAYLOAD_HCI        2
+#define RAW_PAYLOAD_DIGITAL    3
+#define RAW_PAYLOAD_PROPRIETARY        4
+
+/* socket option names */
+#define NFC_LLCP_RW            0
+#define NFC_LLCP_MIUX          1
+#define NFC_LLCP_REMOTE_MIU    2
+#define NFC_LLCP_REMOTE_LTO    3
+#define NFC_LLCP_REMOTE_RW     4
+
+#endif /*__LINUX_NFC_H */
diff --git a/lib/libdss-include/include/linux/nfs.h b/lib/libdss-include/include/linux/nfs.h
new file mode 100644 (file)
index 0000000..85a16dd
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * NFS protocol definitions
+ *
+ * This file contains constants mostly for Version 2 of the protocol,
+ * but also has a couple of NFSv3 bits in (notably the error codes).
+ */
+#ifndef _LINUX_NFS_H
+#define _LINUX_NFS_H
+
+#include <linux/types.h>
+
+#define NFS_PROGRAM    100003
+#define NFS_PORT       2049
+#define NFS_MAXDATA    8192
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN  255
+#define NFS_MAXGROUPS  16
+#define NFS_FHSIZE     32
+#define NFS_COOKIESIZE 4
+#define NFS_FIFO_DEV   (-1)
+#define NFSMODE_FMT    0170000
+#define NFSMODE_DIR    0040000
+#define NFSMODE_CHR    0020000
+#define NFSMODE_BLK    0060000
+#define NFSMODE_REG    0100000
+#define NFSMODE_LNK    0120000
+#define NFSMODE_SOCK   0140000
+#define NFSMODE_FIFO   0010000
+
+#define NFS_MNT_PROGRAM                100005
+#define NFS_MNT_VERSION                1
+#define NFS_MNT3_VERSION       3
+
+#define NFS_PIPE_DIRNAME "nfs"
+
+/*
+ * NFS stats. The good thing with these values is that NFSv3 errors are
+ * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which
+ * no-one uses anyway), so we can happily mix code as long as we make sure
+ * no NFSv3 errors are returned to NFSv2 clients.
+ * Error codes that have a `--' in the v2 column are not part of the
+ * standard, but seem to be widely used nevertheless.
+ */
+ enum nfs_stat {
+       NFS_OK = 0,                     /* v2 v3 v4 */
+       NFSERR_PERM = 1,                /* v2 v3 v4 */
+       NFSERR_NOENT = 2,               /* v2 v3 v4 */
+       NFSERR_IO = 5,                  /* v2 v3 v4 */
+       NFSERR_NXIO = 6,                /* v2 v3 v4 */
+       NFSERR_EAGAIN = 11,             /* v2 v3 */
+       NFSERR_ACCES = 13,              /* v2 v3 v4 */
+       NFSERR_EXIST = 17,              /* v2 v3 v4 */
+       NFSERR_XDEV = 18,               /*    v3 v4 */
+       NFSERR_NODEV = 19,              /* v2 v3 v4 */
+       NFSERR_NOTDIR = 20,             /* v2 v3 v4 */
+       NFSERR_ISDIR = 21,              /* v2 v3 v4 */
+       NFSERR_INVAL = 22,              /* v2 v3 v4 */
+       NFSERR_FBIG = 27,               /* v2 v3 v4 */
+       NFSERR_NOSPC = 28,              /* v2 v3 v4 */
+       NFSERR_ROFS = 30,               /* v2 v3 v4 */
+       NFSERR_MLINK = 31,              /*    v3 v4 */
+       NFSERR_OPNOTSUPP = 45,          /* v2 v3 */
+       NFSERR_NAMETOOLONG = 63,        /* v2 v3 v4 */
+       NFSERR_NOTEMPTY = 66,           /* v2 v3 v4 */
+       NFSERR_DQUOT = 69,              /* v2 v3 v4 */
+       NFSERR_STALE = 70,              /* v2 v3 v4 */
+       NFSERR_REMOTE = 71,             /* v2 v3 */
+       NFSERR_WFLUSH = 99,             /* v2    */
+       NFSERR_BADHANDLE = 10001,       /*    v3 v4 */
+       NFSERR_NOT_SYNC = 10002,        /*    v3 */
+       NFSERR_BAD_COOKIE = 10003,      /*    v3 v4 */
+       NFSERR_NOTSUPP = 10004,         /*    v3 v4 */
+       NFSERR_TOOSMALL = 10005,        /*    v3 v4 */
+       NFSERR_SERVERFAULT = 10006,     /*    v3 v4 */
+       NFSERR_BADTYPE = 10007,         /*    v3 v4 */
+       NFSERR_JUKEBOX = 10008,         /*    v3 v4 */
+       NFSERR_SAME = 10009,            /*       v4 */
+       NFSERR_DENIED = 10010,          /*       v4 */
+       NFSERR_EXPIRED = 10011,         /*       v4 */
+       NFSERR_LOCKED = 10012,          /*       v4 */
+       NFSERR_GRACE = 10013,           /*       v4 */
+       NFSERR_FHEXPIRED = 10014,       /*       v4 */
+       NFSERR_SHARE_DENIED = 10015,    /*       v4 */
+       NFSERR_WRONGSEC = 10016,        /*       v4 */
+       NFSERR_CLID_INUSE = 10017,      /*       v4 */
+       NFSERR_RESOURCE = 10018,        /*       v4 */
+       NFSERR_MOVED = 10019,           /*       v4 */
+       NFSERR_NOFILEHANDLE = 10020,    /*       v4 */
+       NFSERR_MINOR_VERS_MISMATCH = 10021,   /* v4 */
+       NFSERR_STALE_CLIENTID = 10022,  /*       v4 */
+       NFSERR_STALE_STATEID = 10023,   /*       v4 */
+       NFSERR_OLD_STATEID = 10024,     /*       v4 */
+       NFSERR_BAD_STATEID = 10025,     /*       v4 */  
+       NFSERR_BAD_SEQID = 10026,       /*       v4 */
+       NFSERR_NOT_SAME = 10027,        /*       v4 */
+       NFSERR_LOCK_RANGE = 10028,      /*       v4 */
+       NFSERR_SYMLINK = 10029,         /*       v4 */
+       NFSERR_RESTOREFH = 10030,       /*       v4 */
+       NFSERR_LEASE_MOVED = 10031,     /*       v4 */
+       NFSERR_ATTRNOTSUPP = 10032,     /*       v4 */
+       NFSERR_NO_GRACE = 10033,        /*       v4 */
+       NFSERR_RECLAIM_BAD = 10034,     /*       v4 */
+       NFSERR_RECLAIM_CONFLICT = 10035,/*       v4 */
+       NFSERR_BAD_XDR = 10036,         /*       v4 */
+       NFSERR_LOCKS_HELD = 10037,      /*       v4 */
+       NFSERR_OPENMODE = 10038,       /*       v4 */
+       NFSERR_BADOWNER = 10039,       /*       v4 */
+       NFSERR_BADCHAR = 10040,        /*       v4 */
+       NFSERR_BADNAME = 10041,        /*       v4 */
+       NFSERR_BAD_RANGE = 10042,      /*       v4 */
+       NFSERR_LOCK_NOTSUPP = 10043,   /*       v4 */
+       NFSERR_OP_ILLEGAL = 10044,     /*       v4 */
+       NFSERR_DEADLOCK = 10045,       /*       v4 */
+       NFSERR_FILE_OPEN = 10046,      /*       v4 */
+       NFSERR_ADMIN_REVOKED = 10047,  /*       v4 */
+       NFSERR_CB_PATH_DOWN = 10048,   /*       v4 */
+};
+
+/* NFSv2 file types - beware, these are not the same in NFSv3 */
+
+enum nfs_ftype {
+       NFNON = 0,
+       NFREG = 1,
+       NFDIR = 2,
+       NFBLK = 3,
+       NFCHR = 4,
+       NFLNK = 5,
+       NFSOCK = 6,
+       NFBAD = 7,
+       NFFIFO = 8
+};
+
+#endif /* _LINUX_NFS_H */
diff --git a/lib/libdss-include/include/linux/nfs2.h b/lib/libdss-include/include/linux/nfs2.h
new file mode 100644 (file)
index 0000000..fde24b3
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * NFS protocol definitions
+ *
+ * This file contains constants for Version 2 of the protocol.
+ */
+#ifndef _LINUX_NFS2_H
+#define _LINUX_NFS2_H
+
+#define NFS2_PORT      2049
+#define NFS2_MAXDATA   8192
+#define NFS2_MAXPATHLEN        1024
+#define NFS2_MAXNAMLEN 255
+#define NFS2_MAXGROUPS 16
+#define NFS2_FHSIZE    32
+#define NFS2_COOKIESIZE        4
+#define NFS2_FIFO_DEV  (-1)
+#define NFS2MODE_FMT   0170000
+#define NFS2MODE_DIR   0040000
+#define NFS2MODE_CHR   0020000
+#define NFS2MODE_BLK   0060000
+#define NFS2MODE_REG   0100000
+#define NFS2MODE_LNK   0120000
+#define NFS2MODE_SOCK  0140000
+#define NFS2MODE_FIFO  0010000
+
+
+/* NFSv2 file types - beware, these are not the same in NFSv3 */
+enum nfs2_ftype {
+       NF2NON = 0,
+       NF2REG = 1,
+       NF2DIR = 2,
+       NF2BLK = 3,
+       NF2CHR = 4,
+       NF2LNK = 5,
+       NF2SOCK = 6,
+       NF2BAD = 7,
+       NF2FIFO = 8
+};
+
+struct nfs2_fh {
+       char                    data[NFS2_FHSIZE];
+};
+
+/*
+ * Procedure numbers for NFSv2
+ */
+#define NFS2_VERSION           2
+#define NFSPROC_NULL           0
+#define NFSPROC_GETATTR                1
+#define NFSPROC_SETATTR                2
+#define NFSPROC_ROOT           3
+#define NFSPROC_LOOKUP         4
+#define NFSPROC_READLINK       5
+#define NFSPROC_READ           6
+#define NFSPROC_WRITECACHE     7
+#define NFSPROC_WRITE          8
+#define NFSPROC_CREATE         9
+#define NFSPROC_REMOVE         10
+#define NFSPROC_RENAME         11
+#define NFSPROC_LINK           12
+#define NFSPROC_SYMLINK                13
+#define NFSPROC_MKDIR          14
+#define NFSPROC_RMDIR          15
+#define NFSPROC_READDIR                16
+#define NFSPROC_STATFS         17
+
+#endif /* _LINUX_NFS2_H */
diff --git a/lib/libdss-include/include/linux/nfs3.h b/lib/libdss-include/include/linux/nfs3.h
new file mode 100644 (file)
index 0000000..bacfe41
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * NFSv3 protocol definitions
+ */
+#ifndef _LINUX_NFS3_H
+#define _LINUX_NFS3_H
+
+#define NFS3_PORT              2049
+#define NFS3_MAXDATA           32768
+#define NFS3_MAXPATHLEN                PATH_MAX
+#define NFS3_MAXNAMLEN         NAME_MAX
+#define NFS3_MAXGROUPS         16
+#define NFS3_FHSIZE            64
+#define NFS3_COOKIESIZE                4
+#define NFS3_CREATEVERFSIZE    8
+#define NFS3_COOKIEVERFSIZE    8
+#define NFS3_WRITEVERFSIZE     8
+#define NFS3_FIFO_DEV          (-1)
+#define NFS3MODE_FMT           0170000
+#define NFS3MODE_DIR           0040000
+#define NFS3MODE_CHR           0020000
+#define NFS3MODE_BLK           0060000
+#define NFS3MODE_REG           0100000
+#define NFS3MODE_LNK           0120000
+#define NFS3MODE_SOCK          0140000
+#define NFS3MODE_FIFO          0010000
+
+/* Flags for access() call */
+#define NFS3_ACCESS_READ       0x0001
+#define NFS3_ACCESS_LOOKUP     0x0002
+#define NFS3_ACCESS_MODIFY     0x0004
+#define NFS3_ACCESS_EXTEND     0x0008
+#define NFS3_ACCESS_DELETE     0x0010
+#define NFS3_ACCESS_EXECUTE    0x0020
+#define NFS3_ACCESS_FULL       0x003f
+
+/* Flags for create mode */
+enum nfs3_createmode {
+       NFS3_CREATE_UNCHECKED = 0,
+       NFS3_CREATE_GUARDED = 1,
+       NFS3_CREATE_EXCLUSIVE = 2
+};
+
+/* NFSv3 file system properties */
+#define NFS3_FSF_LINK          0x0001
+#define NFS3_FSF_SYMLINK       0x0002
+#define NFS3_FSF_HOMOGENEOUS   0x0008
+#define NFS3_FSF_CANSETTIME    0x0010
+/* Some shorthands. See fs/nfsd/nfs3proc.c */
+#define NFS3_FSF_DEFAULT       0x001B
+#define NFS3_FSF_BILLYBOY      0x0018
+#define NFS3_FSF_READONLY      0x0008
+
+enum nfs3_ftype {
+       NF3NON  = 0,
+       NF3REG  = 1,
+       NF3DIR  = 2,
+       NF3BLK  = 3,
+       NF3CHR  = 4,
+       NF3LNK  = 5,
+       NF3SOCK = 6,
+       NF3FIFO = 7,    /* changed from NFSv2 (was 8) */
+       NF3BAD  = 8
+};
+
+struct nfs3_fh {
+       unsigned short size;
+       unsigned char  data[NFS3_FHSIZE];
+};
+
+#define NFS3_VERSION           3
+#define NFS3PROC_NULL          0
+#define NFS3PROC_GETATTR       1
+#define NFS3PROC_SETATTR       2
+#define NFS3PROC_LOOKUP                3
+#define NFS3PROC_ACCESS                4
+#define NFS3PROC_READLINK      5
+#define NFS3PROC_READ          6
+#define NFS3PROC_WRITE         7
+#define NFS3PROC_CREATE                8
+#define NFS3PROC_MKDIR         9
+#define NFS3PROC_SYMLINK       10
+#define NFS3PROC_MKNOD         11
+#define NFS3PROC_REMOVE                12
+#define NFS3PROC_RMDIR         13
+#define NFS3PROC_RENAME                14
+#define NFS3PROC_LINK          15
+#define NFS3PROC_READDIR       16
+#define NFS3PROC_READDIRPLUS   17
+#define NFS3PROC_FSSTAT                18
+#define NFS3PROC_FSINFO                19
+#define NFS3PROC_PATHCONF      20
+#define NFS3PROC_COMMIT                21
+
+#define NFS_MNT3_VERSION       3
+
+#endif /* _LINUX_NFS3_H */
diff --git a/lib/libdss-include/include/linux/nfs4.h b/lib/libdss-include/include/linux/nfs4.h
new file mode 100644 (file)
index 0000000..5ab38ab
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ *  include/linux/nfs4.h
+ *
+ *  NFSv4 protocol definitions.
+ *
+ *  Copyright (c) 2002 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Kendrick Smith <kmsmith@umich.edu>
+ *  Andy Adamson   <andros@umich.edu>
+ */
+
+#ifndef _LINUX_NFS4_H
+#define _LINUX_NFS4_H
+
+#include <linux/types.h>
+
+#define NFS4_BITMAP_SIZE       3
+#define NFS4_VERIFIER_SIZE     8
+#define NFS4_STATEID_SEQID_SIZE 4
+#define NFS4_STATEID_OTHER_SIZE 12
+#define NFS4_STATEID_SIZE      (NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE)
+#define NFS4_FHSIZE            128
+#define NFS4_MAXPATHLEN                PATH_MAX
+#define NFS4_MAXNAMLEN         NAME_MAX
+#define NFS4_OPAQUE_LIMIT      1024
+#define NFS4_MAX_SESSIONID_LEN 16
+
+#define NFS4_ACCESS_READ        0x0001
+#define NFS4_ACCESS_LOOKUP      0x0002
+#define NFS4_ACCESS_MODIFY      0x0004
+#define NFS4_ACCESS_EXTEND      0x0008
+#define NFS4_ACCESS_DELETE      0x0010
+#define NFS4_ACCESS_EXECUTE     0x0020
+
+#define NFS4_FH_PERSISTENT             0x0000
+#define NFS4_FH_NOEXPIRE_WITH_OPEN     0x0001
+#define NFS4_FH_VOLATILE_ANY           0x0002
+#define NFS4_FH_VOL_MIGRATION          0x0004
+#define NFS4_FH_VOL_RENAME             0x0008
+
+#define NFS4_OPEN_RESULT_CONFIRM 0x0002
+#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
+
+#define NFS4_SHARE_ACCESS_MASK 0x000F
+#define NFS4_SHARE_ACCESS_READ 0x0001
+#define NFS4_SHARE_ACCESS_WRITE        0x0002
+#define NFS4_SHARE_ACCESS_BOTH 0x0003
+#define NFS4_SHARE_DENY_READ   0x0001
+#define NFS4_SHARE_DENY_WRITE  0x0002
+#define NFS4_SHARE_DENY_BOTH   0x0003
+
+/* nfs41 */
+#define NFS4_SHARE_WANT_MASK           0xFF00
+#define NFS4_SHARE_WANT_NO_PREFERENCE  0x0000
+#define NFS4_SHARE_WANT_READ_DELEG     0x0100
+#define NFS4_SHARE_WANT_WRITE_DELEG    0x0200
+#define NFS4_SHARE_WANT_ANY_DELEG      0x0300
+#define NFS4_SHARE_WANT_NO_DELEG       0x0400
+#define NFS4_SHARE_WANT_CANCEL         0x0500
+
+#define NFS4_SHARE_WHEN_MASK           0xF0000
+#define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL       0x10000
+#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED         0x20000
+
+#define NFS4_CDFC4_FORE        0x1
+#define NFS4_CDFC4_BACK 0x2
+#define NFS4_CDFC4_BOTH 0x3
+#define NFS4_CDFC4_FORE_OR_BOTH 0x3
+#define NFS4_CDFC4_BACK_OR_BOTH 0x7
+
+#define NFS4_CDFS4_FORE 0x1
+#define NFS4_CDFS4_BACK 0x2
+#define NFS4_CDFS4_BOTH 0x3
+
+#define NFS4_SET_TO_SERVER_TIME        0
+#define NFS4_SET_TO_CLIENT_TIME        1
+
+#define NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE 0
+#define NFS4_ACE_ACCESS_DENIED_ACE_TYPE  1
+#define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE   2
+#define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE   3
+
+#define ACL4_SUPPORT_ALLOW_ACL 0x01
+#define ACL4_SUPPORT_DENY_ACL  0x02
+#define ACL4_SUPPORT_AUDIT_ACL 0x04
+#define ACL4_SUPPORT_ALARM_ACL 0x08
+
+#define NFS4_ACL_AUTO_INHERIT 0x00000001
+#define NFS4_ACL_PROTECTED    0x00000002
+#define NFS4_ACL_DEFAULTED    0x00000004
+
+#define NFS4_ACE_FILE_INHERIT_ACE             0x00000001
+#define NFS4_ACE_DIRECTORY_INHERIT_ACE        0x00000002
+#define NFS4_ACE_NO_PROPAGATE_INHERIT_ACE     0x00000004
+#define NFS4_ACE_INHERIT_ONLY_ACE             0x00000008
+#define NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG   0x00000010
+#define NFS4_ACE_FAILED_ACCESS_ACE_FLAG       0x00000020
+#define NFS4_ACE_IDENTIFIER_GROUP             0x00000040
+#define NFS4_ACE_INHERITED_ACE                0x00000080
+
+#define NFS4_ACE_READ_DATA                    0x00000001
+#define NFS4_ACE_LIST_DIRECTORY               0x00000001
+#define NFS4_ACE_WRITE_DATA                   0x00000002
+#define NFS4_ACE_ADD_FILE                     0x00000002
+#define NFS4_ACE_APPEND_DATA                  0x00000004
+#define NFS4_ACE_ADD_SUBDIRECTORY             0x00000004
+#define NFS4_ACE_READ_NAMED_ATTRS             0x00000008
+#define NFS4_ACE_WRITE_NAMED_ATTRS            0x00000010
+#define NFS4_ACE_EXECUTE                      0x00000020
+#define NFS4_ACE_DELETE_CHILD                 0x00000040
+#define NFS4_ACE_READ_ATTRIBUTES              0x00000080
+#define NFS4_ACE_WRITE_ATTRIBUTES             0x00000100
+#define NFS4_ACE_WRITE_RETENTION              0x00000200
+#define NFS4_ACE_WRITE_RETENTION_HOLD         0x00000400
+#define NFS4_ACE_DELETE                       0x00010000
+#define NFS4_ACE_READ_ACL                     0x00020000
+#define NFS4_ACE_WRITE_ACL                    0x00040000
+#define NFS4_ACE_WRITE_OWNER                  0x00080000
+#define NFS4_ACE_SYNCHRONIZE                  0x00100000
+#define NFS4_ACE_GENERIC_READ                 0x00120081
+#define NFS4_ACE_GENERIC_WRITE                0x00160106
+#define NFS4_ACE_GENERIC_EXECUTE              0x001200A0
+#define NFS4_ACE_MASK_ALL                     0x001F01FF
+
+#define EXCHGID4_FLAG_SUPP_MOVED_REFER         0x00000001
+#define EXCHGID4_FLAG_SUPP_MOVED_MIGR          0x00000002
+#define EXCHGID4_FLAG_BIND_PRINC_STATEID       0x00000100
+
+#define EXCHGID4_FLAG_USE_NON_PNFS             0x00010000
+#define EXCHGID4_FLAG_USE_PNFS_MDS             0x00020000
+#define EXCHGID4_FLAG_USE_PNFS_DS              0x00040000
+#define EXCHGID4_FLAG_MASK_PNFS                        0x00070000
+
+#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A      0x40000000
+#define EXCHGID4_FLAG_CONFIRMED_R              0x80000000
+/*
+ * Since the validity of these bits depends on whether
+ * they're set in the argument or response, have separate
+ * invalid flag masks for arg (_A) and resp (_R).
+ */
+#define EXCHGID4_FLAG_MASK_A                   0x40070103
+#define EXCHGID4_FLAG_MASK_R                   0x80070103
+
+#define SEQ4_STATUS_CB_PATH_DOWN               0x00000001
+#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING   0x00000002
+#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED    0x00000004
+#define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED  0x00000008
+#define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010
+#define SEQ4_STATUS_ADMIN_STATE_REVOKED                0x00000020
+#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED   0x00000040
+#define SEQ4_STATUS_LEASE_MOVED                        0x00000080
+#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED     0x00000100
+#define SEQ4_STATUS_CB_PATH_DOWN_SESSION       0x00000200
+#define SEQ4_STATUS_BACKCHANNEL_FAULT          0x00000400
+
+#define NFS4_SECINFO_STYLE4_CURRENT_FH 0
+#define NFS4_SECINFO_STYLE4_PARENT     1
+
+#define NFS4_MAX_UINT64        (~(__u64)0)
+
+/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
+ * If a compound requires more operations, adjust NFS4_MAX_OPS accordingly.
+ */
+#define NFS4_MAX_OPS   8
+
+/* Our NFS4 client back channel server only wants the cb_sequene and the
+ * actual operation per compound
+ */
+#define NFS4_MAX_BACK_CHANNEL_OPS 2
+
+#endif /* _LINUX_NFS4_H */
+
+/*
+ * Local variables:
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/lib/libdss-include/include/linux/nfs4_mount.h b/lib/libdss-include/include/linux/nfs4_mount.h
new file mode 100644 (file)
index 0000000..f4ff32d
--- /dev/null
@@ -0,0 +1,71 @@
+#ifndef _LINUX_NFS4_MOUNT_H
+#define _LINUX_NFS4_MOUNT_H
+
+/*
+ *  linux/include/linux/nfs4_mount.h
+ *
+ *  Copyright (C) 2002  Trond Myklebust
+ *
+ *  structure passed from user-space to kernel-space during an nfsv4 mount
+ */
+
+/*
+ * WARNING!  Do not delete or change the order of these fields.  If
+ * a new field is required then add it to the end.  The version field
+ * tracks which fields are present.  This will ensure some measure of
+ * mount-to-kernel version compatibility.  Some of these aren't used yet
+ * but here they are anyway.
+ */
+#define NFS4_MOUNT_VERSION     1
+
+struct nfs_string {
+       unsigned int len;
+       const char * data;
+};
+
+struct nfs4_mount_data {
+       int version;                            /* 1 */
+       int flags;                              /* 1 */
+       int rsize;                              /* 1 */
+       int wsize;                              /* 1 */
+       int timeo;                              /* 1 */
+       int retrans;                            /* 1 */
+       int acregmin;                           /* 1 */
+       int acregmax;                           /* 1 */
+       int acdirmin;                           /* 1 */
+       int acdirmax;                           /* 1 */
+
+       /* see the definition of 'struct clientaddr4' in RFC3010 */
+       struct nfs_string client_addr;          /* 1 */
+
+       /* Mount path */
+       struct nfs_string mnt_path;             /* 1 */
+
+       /* Server details */
+       struct nfs_string hostname;             /* 1 */
+       /* Server IP address */
+       unsigned int host_addrlen;              /* 1 */
+       struct sockaddr * host_addr;    /* 1 */
+
+       /* Transport protocol to use */
+       int proto;                              /* 1 */
+
+       /* Pseudo-flavours to use for authentication. See RFC2623 */
+       int auth_flavourlen;                    /* 1 */
+       int *auth_flavours;             /* 1 */
+};
+
+/* bits in the flags field */
+/* Note: the fields that correspond to existing NFSv2/v3 mount options
+ *      should mirror the values from include/linux/nfs_mount.h
+ */
+
+#define NFS4_MOUNT_SOFT                0x0001  /* 1 */
+#define NFS4_MOUNT_INTR                0x0002  /* 1 */
+#define NFS4_MOUNT_NOCTO       0x0010  /* 1 */
+#define NFS4_MOUNT_NOAC                0x0020  /* 1 */
+#define NFS4_MOUNT_STRICTLOCK  0x1000  /* 1 */
+#define NFS4_MOUNT_UNSHARED    0x8000  /* 1 */
+#define NFS4_MOUNT_FLAGMASK    0x9033
+
+#endif
diff --git a/lib/libdss-include/include/linux/nfs_fs.h b/lib/libdss-include/include/linux/nfs_fs.h
new file mode 100644 (file)
index 0000000..99e509a
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ *  linux/include/linux/nfs_fs.h
+ *
+ *  Copyright (C) 1992  Rick Sladkey
+ *
+ *  OS-specific nfs filesystem definitions and declarations
+ */
+
+#ifndef _LINUX_NFS_FS_H
+#define _LINUX_NFS_FS_H
+
+#include <linux/magic.h>
+
+/* Default timeout values */
+#define NFS_DEF_UDP_TIMEO      (11)
+#define NFS_DEF_UDP_RETRANS    (3)
+#define NFS_DEF_TCP_TIMEO      (600)
+#define NFS_DEF_TCP_RETRANS    (2)
+
+#define NFS_MAX_UDP_TIMEOUT    (60*HZ)
+#define NFS_MAX_TCP_TIMEOUT    (600*HZ)
+
+#define NFS_DEF_ACREGMIN       (3)
+#define NFS_DEF_ACREGMAX       (60)
+#define NFS_DEF_ACDIRMIN       (30)
+#define NFS_DEF_ACDIRMAX       (60)
+
+/*
+ * When flushing a cluster of dirty pages, there can be different
+ * strategies:
+ */
+#define FLUSH_SYNC             1       /* file being synced, or contention */
+#define FLUSH_STABLE           4       /* commit to stable storage */
+#define FLUSH_LOWPRI           8       /* low priority background flush */
+#define FLUSH_HIGHPRI          16      /* high priority memory reclaim flush */
+#define FLUSH_COND_STABLE      32      /* conditional stable write - only stable
+                                        * if everything fits in one RPC */
+
+
+/*
+ * NFS debug flags
+ */
+#define NFSDBG_VFS             0x0001
+#define NFSDBG_DIRCACHE                0x0002
+#define NFSDBG_LOOKUPCACHE     0x0004
+#define NFSDBG_PAGECACHE       0x0008
+#define NFSDBG_PROC            0x0010
+#define NFSDBG_XDR             0x0020
+#define NFSDBG_FILE            0x0040
+#define NFSDBG_ROOT            0x0080
+#define NFSDBG_CALLBACK                0x0100
+#define NFSDBG_CLIENT          0x0200
+#define NFSDBG_MOUNT           0x0400
+#define NFSDBG_FSCACHE         0x0800
+#define NFSDBG_PNFS            0x1000
+#define NFSDBG_PNFS_LD         0x2000
+#define NFSDBG_STATE           0x4000
+#define NFSDBG_ALL             0xFFFF
+
+
+#endif /* _LINUX_NFS_FS_H */
diff --git a/lib/libdss-include/include/linux/nfs_idmap.h b/lib/libdss-include/include/linux/nfs_idmap.h
new file mode 100644 (file)
index 0000000..1296067
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * include/uapi/linux/nfs_idmap.h
+ *
+ *  UID and GID to name mapping for clients.
+ *
+ *  Copyright (c) 2002 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Marius Aamodt Eriksen <marius@umich.edu>
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the University nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef NFS_IDMAP_H
+#define NFS_IDMAP_H
+
+#include <linux/types.h>
+
+/* XXX from bits/utmp.h  */
+#define IDMAP_NAMESZ  128
+
+#define IDMAP_TYPE_USER  0
+#define IDMAP_TYPE_GROUP 1
+
+#define IDMAP_CONV_IDTONAME 0
+#define IDMAP_CONV_NAMETOID 1
+
+#define IDMAP_STATUS_INVALIDMSG 0x01
+#define IDMAP_STATUS_AGAIN      0x02
+#define IDMAP_STATUS_LOOKUPFAIL 0x04
+#define IDMAP_STATUS_SUCCESS    0x08
+
+struct idmap_msg {
+       __u8  im_type;
+       __u8  im_conv;
+       char  im_name[IDMAP_NAMESZ];
+       __u32 im_id;
+       __u8  im_status;
+};
+
+
+#endif /* NFS_IDMAP_H */
diff --git a/lib/libdss-include/include/linux/nfs_mount.h b/lib/libdss-include/include/linux/nfs_mount.h
new file mode 100644 (file)
index 0000000..64b0f22
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef _LINUX_NFS_MOUNT_H
+#define _LINUX_NFS_MOUNT_H
+
+/*
+ *  linux/include/linux/nfs_mount.h
+ *
+ *  Copyright (C) 1992  Rick Sladkey
+ *
+ *  structure passed from user-space to kernel-space during an nfs mount
+ */
+#include <linux/in.h>
+#include <linux/nfs.h>
+#include <linux/nfs2.h>
+#include <linux/nfs3.h>
+
+/*
+ * WARNING!  Do not delete or change the order of these fields.  If
+ * a new field is required then add it to the end.  The version field
+ * tracks which fields are present.  This will ensure some measure of
+ * mount-to-kernel version compatibility.  Some of these aren't used yet
+ * but here they are anyway.
+ */
+#define NFS_MOUNT_VERSION      6
+#define NFS_MAX_CONTEXT_LEN    256
+
+struct nfs_mount_data {
+       int             version;                /* 1 */
+       int             fd;                     /* 1 */
+       struct nfs2_fh  old_root;               /* 1 */
+       int             flags;                  /* 1 */
+       int             rsize;                  /* 1 */
+       int             wsize;                  /* 1 */
+       int             timeo;                  /* 1 */
+       int             retrans;                /* 1 */
+       int             acregmin;               /* 1 */
+       int             acregmax;               /* 1 */
+       int             acdirmin;               /* 1 */
+       int             acdirmax;               /* 1 */
+       struct sockaddr_in addr;                /* 1 */
+       char            hostname[NFS_MAXNAMLEN + 1];            /* 1 */
+       int             namlen;                 /* 2 */
+       unsigned int    bsize;                  /* 3 */
+       struct nfs3_fh  root;                   /* 4 */
+       int             pseudoflavor;           /* 5 */
+       char            context[NFS_MAX_CONTEXT_LEN + 1];       /* 6 */
+};
+
+/* bits in the flags field visible to user space */
+
+#define NFS_MOUNT_SOFT         0x0001  /* 1 */
+#define NFS_MOUNT_INTR         0x0002  /* 1 */ /* now unused, but ABI */
+#define NFS_MOUNT_SECURE       0x0004  /* 1 */
+#define NFS_MOUNT_POSIX                0x0008  /* 1 */
+#define NFS_MOUNT_NOCTO                0x0010  /* 1 */
+#define NFS_MOUNT_NOAC         0x0020  /* 1 */
+#define NFS_MOUNT_TCP          0x0040  /* 2 */
+#define NFS_MOUNT_VER3         0x0080  /* 3 */
+#define NFS_MOUNT_KERBEROS     0x0100  /* 3 */
+#define NFS_MOUNT_NONLM                0x0200  /* 3 */
+#define NFS_MOUNT_BROKEN_SUID  0x0400  /* 4 */
+#define NFS_MOUNT_NOACL                0x0800  /* 4 */
+#define NFS_MOUNT_STRICTLOCK   0x1000  /* reserved for NFSv4 */
+#define NFS_MOUNT_SECFLAVOUR   0x2000  /* 5 non-text parsed mount data only */
+#define NFS_MOUNT_NORDIRPLUS   0x4000  /* 5 */
+#define NFS_MOUNT_UNSHARED     0x8000  /* 5 */
+#define NFS_MOUNT_FLAGMASK     0xFFFF
+
+/* The following are for internal use only */
+#define NFS_MOUNT_LOOKUP_CACHE_NONEG   0x10000
+#define NFS_MOUNT_LOOKUP_CACHE_NONE    0x20000
+#define NFS_MOUNT_NORESVPORT           0x40000
+#define NFS_MOUNT_LEGACY_INTERFACE     0x80000
+
+#define NFS_MOUNT_LOCAL_FLOCK  0x100000
+#define NFS_MOUNT_LOCAL_FCNTL  0x200000
+
+#endif
diff --git a/lib/libdss-include/include/linux/nfsacl.h b/lib/libdss-include/include/linux/nfsacl.h
new file mode 100644 (file)
index 0000000..67b3763
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * File: linux/nfsacl.h
+ *
+ * (C) 2003 Andreas Gruenbacher <agruen@suse.de>
+ */
+#ifndef __LINUX_NFSACL_H
+#define __LINUX_NFSACL_H
+
+#define NFS_ACL_PROGRAM        100227
+
+#define ACLPROC2_GETACL                1
+#define ACLPROC2_SETACL                2
+#define ACLPROC2_GETATTR       3
+#define ACLPROC2_ACCESS                4
+
+#define ACLPROC3_GETACL                1
+#define ACLPROC3_SETACL                2
+
+
+/* Flags for the getacl/setacl mode */
+#define NFS_ACL                        0x0001
+#define NFS_ACLCNT             0x0002
+#define NFS_DFACL              0x0004
+#define NFS_DFACLCNT           0x0008
+#define NFS_ACL_MASK           0x000f
+
+/* Flag for Default ACL entries */
+#define NFS_ACL_DEFAULT                0x1000
+
+#endif /* __LINUX_NFSACL_H */
diff --git a/lib/libdss-include/include/linux/nfsd/cld.h b/lib/libdss-include/include/linux/nfsd/cld.h
new file mode 100644 (file)
index 0000000..f14a9ab
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Upcall description for nfsdcld communication
+ *
+ * Copyright (c) 2012 Red Hat, Inc.
+ * Author(s): Jeff Layton <jlayton@redhat.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _NFSD_CLD_H
+#define _NFSD_CLD_H
+
+/* latest upcall version available */
+#define CLD_UPCALL_VERSION 1
+
+/* defined by RFC3530 */
+#define NFS4_OPAQUE_LIMIT 1024
+
+enum cld_command {
+       Cld_Create,             /* create a record for this cm_id */
+       Cld_Remove,             /* remove record of this cm_id */
+       Cld_Check,              /* is this cm_id allowed? */
+       Cld_GraceDone,          /* grace period is complete */
+};
+
+/* representation of long-form NFSv4 client ID */
+struct cld_name {
+       uint16_t        cn_len;                         /* length of cm_id */
+       unsigned char   cn_id[NFS4_OPAQUE_LIMIT];       /* client-provided */
+} __attribute__((packed));
+
+/* message struct for communication with userspace */
+struct cld_msg {
+       uint8_t         cm_vers;                /* upcall version */
+       uint8_t         cm_cmd;                 /* upcall command */
+       int16_t         cm_status;              /* return code */
+       uint32_t        cm_xid;                 /* transaction id */
+       union {
+               int64_t         cm_gracetime;   /* grace period start time */
+               struct cld_name cm_name;
+       } __attribute__((packed)) cm_u;
+} __attribute__((packed));
+
+#endif /* !_NFSD_CLD_H */
diff --git a/lib/libdss-include/include/linux/nfsd/debug.h b/lib/libdss-include/include/linux/nfsd/debug.h
new file mode 100644 (file)
index 0000000..6b1f912
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * linux/include/linux/nfsd/debug.h
+ *
+ * Debugging-related stuff for nfsd
+ *
+ * Copyright (C) 1995 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef LINUX_NFSD_DEBUG_H
+#define LINUX_NFSD_DEBUG_H
+
+#include <linux/sunrpc/debug.h>
+
+/*
+ * knfsd debug flags
+ */
+#define NFSDDBG_SOCK           0x0001
+#define NFSDDBG_FH             0x0002
+#define NFSDDBG_EXPORT         0x0004
+#define NFSDDBG_SVC            0x0008
+#define NFSDDBG_PROC           0x0010
+#define NFSDDBG_FILEOP         0x0020
+#define NFSDDBG_AUTH           0x0040
+#define NFSDDBG_REPCACHE       0x0080
+#define NFSDDBG_XDR            0x0100
+#define NFSDDBG_LOCKD          0x0200
+#define NFSDDBG_PNFS           0x0400
+#define NFSDDBG_ALL            0x7FFF
+#define NFSDDBG_NOCHANGE       0xFFFF
+
+
+
+#endif /* LINUX_NFSD_DEBUG_H */
diff --git a/lib/libdss-include/include/linux/nfsd/export.h b/lib/libdss-include/include/linux/nfsd/export.h
new file mode 100644 (file)
index 0000000..407d25c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * include/linux/nfsd/export.h
+ * 
+ * Public declarations for NFS exports. The definitions for the
+ * syscall interface are in nfsctl.h
+ *
+ * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef NFSD_EXPORT_H
+#define NFSD_EXPORT_H
+
+# include <linux/types.h>
+
+/*
+ * Important limits for the exports stuff.
+ */
+#define NFSCLNT_IDMAX          1024
+#define NFSCLNT_ADDRMAX                16
+#define NFSCLNT_KEYMAX         32
+
+/*
+ * Export flags.
+ *
+ * Please update the expflags[] array in fs/nfsd/export.c when adding
+ * a new flag.
+ */
+#define NFSEXP_READONLY                0x0001
+#define NFSEXP_INSECURE_PORT   0x0002
+#define NFSEXP_ROOTSQUASH      0x0004
+#define NFSEXP_ALLSQUASH       0x0008
+#define NFSEXP_ASYNC           0x0010
+#define NFSEXP_GATHERED_WRITES 0x0020
+#define NFSEXP_NOREADDIRPLUS    0x0040
+/* 80 100 currently unused */
+#define NFSEXP_NOHIDE          0x0200
+#define NFSEXP_NOSUBTREECHECK  0x0400
+#define        NFSEXP_NOAUTHNLM        0x0800          /* Don't authenticate NLM requests - just trust */
+#define NFSEXP_MSNFS           0x1000  /* do silly things that MS clients expect; no longer supported */
+#define NFSEXP_FSID            0x2000
+#define        NFSEXP_CROSSMOUNT       0x4000
+#define        NFSEXP_NOACL            0x8000  /* reserved for possible ACL related use */
+/*
+ * The NFSEXP_V4ROOT flag causes the kernel to give access only to NFSv4
+ * clients, and only to the single directory that is the root of the
+ * export; further lookup and readdir operations are treated as if every
+ * subdirectory was a mountpoint, and ignored if they are not themselves
+ * exported.  This is used by nfsd and mountd to construct the NFSv4
+ * pseudofilesystem, which provides access only to paths leading to each
+ * exported filesystem.
+ */
+#define        NFSEXP_V4ROOT           0x10000
+#define NFSEXP_PNFS            0x20000
+
+/* All flags that we claim to support.  (Note we don't support NOACL.) */
+#define NFSEXP_ALLFLAGS                0x3FE7F
+
+/* The flags that may vary depending on security flavor: */
+#define NFSEXP_SECINFO_FLAGS   (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
+                                       | NFSEXP_ALLSQUASH \
+                                       | NFSEXP_INSECURE_PORT)
+
+
+#endif /* NFSD_EXPORT_H */
diff --git a/lib/libdss-include/include/linux/nfsd/nfsfh.h b/lib/libdss-include/include/linux/nfsd/nfsfh.h
new file mode 100644 (file)
index 0000000..beb05e9
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * This file describes the layout of the file handles as passed
+ * over the wire.
+ *
+ * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef _LINUX_NFSD_FH_H
+#define _LINUX_NFSD_FH_H
+
+#include <linux/types.h>
+#include <linux/nfs.h>
+#include <linux/nfs2.h>
+#include <linux/nfs3.h>
+#include <linux/nfs4.h>
+
+/*
+ * This is the old "dentry style" Linux NFSv2 file handle.
+ *
+ * The xino and xdev fields are currently used to transport the
+ * ino/dev of the exported inode.
+ */
+struct nfs_fhbase_old {
+       __u32           fb_dcookie;     /* dentry cookie - always 0xfeebbaca */
+       __u32           fb_ino;         /* our inode number */
+       __u32           fb_dirino;      /* dir inode number, 0 for directories */
+       __u32           fb_dev;         /* our device */
+       __u32           fb_xdev;
+       __u32           fb_xino;
+       __u32           fb_generation;
+};
+
+/*
+ * This is the new flexible, extensible style NFSv2/v3/v4 file handle.
+ * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000
+ *
+ * The file handle starts with a sequence of four-byte words.
+ * The first word contains a version number (1) and three descriptor bytes
+ * that tell how the remaining 3 variable length fields should be handled.
+ * These three bytes are auth_type, fsid_type and fileid_type.
+ *
+ * All four-byte values are in host-byte-order.
+ *
+ * The auth_type field is deprecated and must be set to 0.
+ *
+ * The fsid_type identifies how the filesystem (or export point) is
+ *    encoded.
+ *  Current values:
+ *     0  - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
+ *        NOTE: we cannot use the kdev_t device id value, because kdev_t.h
+ *              says we mustn't.  We must break it up and reassemble.
+ *     1  - 4 byte user specified identifier
+ *     2  - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
+ *     3  - 4 byte device id, encoded for user-space, 4 byte inode number
+ *     4  - 4 byte inode number and 4 byte uuid
+ *     5  - 8 byte uuid
+ *     6  - 16 byte uuid
+ *     7  - 8 byte inode number and 16 byte uuid
+ *
+ * The fileid_type identified how the file within the filesystem is encoded.
+ *   The values for this field are filesystem specific, exccept that
+ *   filesystems must not use the values '0' or '0xff'. 'See enum fid_type'
+ *   in include/linux/exportfs.h for currently registered values.
+ */
+struct nfs_fhbase_new {
+       __u8            fb_version;     /* == 1, even => nfs_fhbase_old */
+       __u8            fb_auth_type;
+       __u8            fb_fsid_type;
+       __u8            fb_fileid_type;
+       __u32           fb_auth[1];
+/*     __u32           fb_fsid[0]; floating */
+/*     __u32           fb_fileid[0]; floating */
+};
+
+struct knfsd_fh {
+       unsigned int    fh_size;        /* significant for NFSv3.
+                                        * Points to the current size while building
+                                        * a new file handle
+                                        */
+       union {
+               struct nfs_fhbase_old   fh_old;
+               __u32                   fh_pad[NFS4_FHSIZE/4];
+               struct nfs_fhbase_new   fh_new;
+       } fh_base;
+};
+
+#define ofh_dcookie            fh_base.fh_old.fb_dcookie
+#define ofh_ino                        fh_base.fh_old.fb_ino
+#define ofh_dirino             fh_base.fh_old.fb_dirino
+#define ofh_dev                        fh_base.fh_old.fb_dev
+#define ofh_xdev               fh_base.fh_old.fb_xdev
+#define ofh_xino               fh_base.fh_old.fb_xino
+#define ofh_generation         fh_base.fh_old.fb_generation
+
+#define        fh_version              fh_base.fh_new.fb_version
+#define        fh_fsid_type            fh_base.fh_new.fb_fsid_type
+#define        fh_auth_type            fh_base.fh_new.fb_auth_type
+#define        fh_fileid_type          fh_base.fh_new.fb_fileid_type
+#define        fh_fsid                 fh_base.fh_new.fb_auth
+
+/* Do not use, provided for userspace compatiblity. */
+#define        fh_auth                 fh_base.fh_new.fb_auth
+
+#endif /* _LINUX_NFSD_FH_H */
diff --git a/lib/libdss-include/include/linux/nfsd/stats.h b/lib/libdss-include/include/linux/nfsd/stats.h
new file mode 100644 (file)
index 0000000..b7024e8
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * linux/include/linux/nfsd/stats.h
+ *
+ * Statistics for NFS server.
+ *
+ * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef LINUX_NFSD_STATS_H
+#define LINUX_NFSD_STATS_H
+
+#include <linux/nfs4.h>
+
+/* thread usage wraps very million seconds (approx one fortnight) */
+#define        NFSD_USAGE_WRAP (HZ*1000000)
+
+#endif /* LINUX_NFSD_STATS_H */
diff --git a/lib/libdss-include/include/linux/nl80211.h b/lib/libdss-include/include/linux/nl80211.h
new file mode 100644 (file)
index 0000000..1f0b4cf
--- /dev/null
@@ -0,0 +1,4647 @@
+#ifndef __LINUX_NL80211_H
+#define __LINUX_NL80211_H
+/*
+ * 802.11 netlink interface public header
+ *
+ * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
+ * Copyright 2008 Michael Wu <flamingice@sourmilk.net>
+ * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com>
+ * Copyright 2008 Michael Buesch <m@bues.ch>
+ * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>
+ * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
+ * Copyright 2008 Colin McCabe <colin@cozybit.com>
+ * Copyright 2015      Intel Deutschland GmbH
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/*
+ * This header file defines the userspace API to the wireless stack. Please
+ * be careful not to break things - i.e. don't move anything around or so
+ * unless you can demonstrate that it breaks neither API nor ABI.
+ *
+ * Additions to the API should be accompanied by actual implementations in
+ * an upstream driver, so that example implementations exist in case there
+ * are ever concerns about the precise semantics of the API or changes are
+ * needed, and to ensure that code for dead (no longer implemented) API
+ * can actually be identified and removed.
+ * Nonetheless, semantics should also be documented carefully in this file.
+ */
+
+#include <linux/types.h>
+
+#define NL80211_GENL_NAME "nl80211"
+
+#define NL80211_MULTICAST_GROUP_CONFIG         "config"
+#define NL80211_MULTICAST_GROUP_SCAN           "scan"
+#define NL80211_MULTICAST_GROUP_REG            "regulatory"
+#define NL80211_MULTICAST_GROUP_MLME           "mlme"
+#define NL80211_MULTICAST_GROUP_VENDOR         "vendor"
+#define NL80211_MULTICAST_GROUP_TESTMODE       "testmode"
+
+/**
+ * DOC: Station handling
+ *
+ * Stations are added per interface, but a special case exists with VLAN
+ * interfaces. When a station is bound to an AP interface, it may be moved
+ * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN).
+ * The station is still assumed to belong to the AP interface it was added
+ * to.
+ *
+ * Station handling varies per interface type and depending on the driver's
+ * capabilities.
+ *
+ * For drivers supporting TDLS with external setup (WIPHY_FLAG_SUPPORTS_TDLS
+ * and WIPHY_FLAG_TDLS_EXTERNAL_SETUP), the station lifetime is as follows:
+ *  - a setup station entry is added, not yet authorized, without any rate
+ *    or capability information, this just exists to avoid race conditions
+ *  - when the TDLS setup is done, a single NL80211_CMD_SET_STATION is valid
+ *    to add rate and capability information to the station and at the same
+ *    time mark it authorized.
+ *  - %NL80211_TDLS_ENABLE_LINK is then used
+ *  - after this, the only valid operation is to remove it by tearing down
+ *    the TDLS link (%NL80211_TDLS_DISABLE_LINK)
+ *
+ * TODO: need more info for other interface types
+ */
+
+/**
+ * DOC: Frame transmission/registration support
+ *
+ * Frame transmission and registration support exists to allow userspace
+ * management entities such as wpa_supplicant react to management frames
+ * that are not being handled by the kernel. This includes, for example,
+ * certain classes of action frames that cannot be handled in the kernel
+ * for various reasons.
+ *
+ * Frame registration is done on a per-interface basis and registrations
+ * cannot be removed other than by closing the socket. It is possible to
+ * specify a registration filter to register, for example, only for a
+ * certain type of action frame. In particular with action frames, those
+ * that userspace registers for will not be returned as unhandled by the
+ * driver, so that the registered application has to take responsibility
+ * for doing that.
+ *
+ * The type of frame that can be registered for is also dependent on the
+ * driver and interface type. The frame types are advertised in wiphy
+ * attributes so applications know what to expect.
+ *
+ * NOTE: When an interface changes type while registrations are active,
+ *       these registrations are ignored until the interface type is
+ *       changed again. This means that changing the interface type can
+ *       lead to a situation that couldn't otherwise be produced, but
+ *       any such registrations will be dormant in the sense that they
+ *       will not be serviced, i.e. they will not receive any frames.
+ *
+ * Frame transmission allows userspace to send for example the required
+ * responses to action frames. It is subject to some sanity checking,
+ * but many frames can be transmitted. When a frame was transmitted, its
+ * status is indicated to the sending socket.
+ *
+ * For more technical details, see the corresponding command descriptions
+ * below.
+ */
+
+/**
+ * DOC: Virtual interface / concurrency capabilities
+ *
+ * Some devices are able to operate with virtual MACs, they can have
+ * more than one virtual interface. The capability handling for this
+ * is a bit complex though, as there may be a number of restrictions
+ * on the types of concurrency that are supported.
+ *
+ * To start with, each device supports the interface types listed in
+ * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the
+ * types there no concurrency is implied.
+ *
+ * Once concurrency is desired, more attributes must be observed:
+ * To start with, since some interface types are purely managed in
+ * software, like the AP-VLAN type in mac80211 for example, there's
+ * an additional list of these, they can be added at any time and
+ * are only restricted by some semantic restrictions (e.g. AP-VLAN
+ * cannot be added without a corresponding AP interface). This list
+ * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute.
+ *
+ * Further, the list of supported combinations is exported. This is
+ * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically,
+ * it exports a list of "groups", and at any point in time the
+ * interfaces that are currently active must fall into any one of
+ * the advertised groups. Within each group, there are restrictions
+ * on the number of interfaces of different types that are supported
+ * and also the number of different channels, along with potentially
+ * some other restrictions. See &enum nl80211_if_combination_attrs.
+ *
+ * All together, these attributes define the concurrency of virtual
+ * interfaces that a given device supports.
+ */
+
+/**
+ * DOC: packet coalesce support
+ *
+ * In most cases, host that receives IPv4 and IPv6 multicast/broadcast
+ * packets does not do anything with these packets. Therefore the
+ * reception of these unwanted packets causes unnecessary processing
+ * and power consumption.
+ *
+ * Packet coalesce feature helps to reduce number of received interrupts
+ * to host by buffering these packets in firmware/hardware for some
+ * predefined time. Received interrupt will be generated when one of the
+ * following events occur.
+ * a) Expiration of hardware timer whose expiration time is set to maximum
+ * coalescing delay of matching coalesce rule.
+ * b) Coalescing buffer in hardware reaches it's limit.
+ * c) Packet doesn't match any of the configured coalesce rules.
+ *
+ * User needs to configure following parameters for creating a coalesce
+ * rule.
+ * a) Maximum coalescing delay
+ * b) List of packet patterns which needs to be matched
+ * c) Condition for coalescence. pattern 'match' or 'no match'
+ * Multiple such rules can be created.
+ */
+
+/**
+ * enum nl80211_commands - supported nl80211 commands
+ *
+ * @NL80211_CMD_UNSPEC: unspecified command to catch errors
+ *
+ * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request
+ *     to get a list of all present wiphys.
+ * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or
+ *     %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME,
+ *     %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ (and the
+ *     attributes determining the channel width; this is used for setting
+ *     monitor mode channel),  %NL80211_ATTR_WIPHY_RETRY_SHORT,
+ *     %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD,
+ *     and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD.
+ *     However, for setting the channel, see %NL80211_CMD_SET_CHANNEL
+ *     instead, the support here is for backward compatibility only.
+ * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
+ *     or rename notification. Has attributes %NL80211_ATTR_WIPHY and
+ *     %NL80211_ATTR_WIPHY_NAME.
+ * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes
+ *     %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME.
+ *
+ * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration;
+ *     either a dump request for all interfaces or a specific get with a
+ *     single %NL80211_ATTR_IFINDEX is supported.
+ * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE.
+ * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response
+ *     to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX,
+ *     %NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also
+ *     be sent from userspace to request creation of a new virtual interface,
+ *     then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and
+ *     %NL80211_ATTR_IFNAME.
+ * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from
+ *     userspace to request deletion of a virtual interface, then requires
+ *     attribute %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
+ *     by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
+ * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
+ *     %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
+ * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
+ *     %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER,
+ *     and %NL80211_ATTR_KEY_SEQ attributes.
+ * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
+ *     or %NL80211_ATTR_MAC.
+ *
+ * @NL80211_CMD_GET_BEACON: (not used)
+ * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface
+ *     using the %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL
+ *     attributes. For drivers that generate the beacon and probe responses
+ *     internally, the following attributes must be provided: %NL80211_ATTR_IE,
+ *     %NL80211_ATTR_IE_PROBE_RESP and %NL80211_ATTR_IE_ASSOC_RESP.
+ * @NL80211_CMD_START_AP: Start AP operation on an AP interface, parameters
+ *     are like for %NL80211_CMD_SET_BEACON, and additionally parameters that
+ *     do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL,
+ *     %NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID,
+ *     %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE,
+ *     %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
+ *     %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
+ *     %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
+ *     %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
+ *     The channel to use can be set on the interface or be given using the
+ *     %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width.
+ * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
+ * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface
+ * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP
+ *
+ * @NL80211_CMD_GET_STATION: Get station attributes for station identified by
+ *     %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_STATION: Set station attributes for station identified by
+ *     %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the
+ *     the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC
+ *     or, if no MAC address given, all stations, on the interface identified
+ *     by %NL80211_ATTR_IFINDEX. %NL80211_ATTR_MGMT_SUBTYPE and
+ *     %NL80211_ATTR_REASON_CODE can optionally be used to specify which type
+ *     of disconnection indication should be sent to the station
+ *     (Deauthentication or Disassociation frame and reason code for that
+ *     frame).
+ *
+ * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_MPATH:  Set mesh path attributes for mesh path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by
+ *     %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP.
+ * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by
+ *     %NL80211_ATTR_MAC.
+ * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the
+ *     the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC
+ *     or, if no MAC address given, all mesh paths, on the interface identified
+ *     by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by
+ *     %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set
+ *     regulatory domain. If %NL80211_ATTR_WIPHY is specified and the device
+ *     has a private regulatory domain, it will be returned. Otherwise, the
+ *     global regdomain will be returned.
+ *     A device will have a private regulatory domain if it uses the
+ *     regulatory_hint() API. Even when a private regdomain is used the channel
+ *     information will still be mended according to further hints from
+ *     the regulatory core to help with compliance. A dump version of this API
+ *     is now available which will returns the global regdomain as well as
+ *     all private regdomains of present wiphys (for those that have it).
+ *     If a wiphy is self-managed (%NL80211_ATTR_WIPHY_SELF_MANAGED_REG), then
+ *     its private regdomain is the only valid one for it. The regulatory
+ *     core is not used to help with compliance in this case.
+ * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command
+ *     after being queried by the kernel. CRDA replies by sending a regulatory
+ *     domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our
+ *     current alpha2 if it found a match. It also provides
+ *     NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each
+ *     regulatory rule is a nested set of attributes  given by
+ *     %NL80211_ATTR_REG_RULE_FREQ_[START|END] and
+ *     %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP.
+ * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain
+ *     to the specified ISO/IEC 3166-1 alpha2 country code. The core will
+ *     store this as a valid request and then query userspace for it.
+ *
+ * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the
+ *     interface identified by %NL80211_ATTR_IFINDEX
+ *
+ * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the
+ *      interface identified by %NL80211_ATTR_IFINDEX
+ *
+ * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
+ *     interface is identified with %NL80211_ATTR_IFINDEX and the management
+ *     frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be
+ *     added to the end of the specified management frame is specified with
+ *     %NL80211_ATTR_IE. If the command succeeds, the requested data will be
+ *     added to all specified management frames generated by
+ *     kernel/firmware/driver.
+ *     Note: This command has been removed and it is only reserved at this
+ *     point to avoid re-using existing command number. The functionality this
+ *     command was planned for has been provided with cleaner design with the
+ *     option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN,
+ *     NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE,
+ *     NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE.
+ *
+ * @NL80211_CMD_GET_SCAN: get scan results
+ * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters
+ *     %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the
+ *     probe requests at CCK rate or not.
+ * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to
+ *     NL80211_CMD_GET_SCAN and on the "scan" multicast group)
+ * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
+ *     partial scan results may be available
+ *
+ * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain
+ *     intervals and certain number of cycles, as specified by
+ *     %NL80211_ATTR_SCHED_SCAN_PLANS. If %NL80211_ATTR_SCHED_SCAN_PLANS is
+ *     not specified and only %NL80211_ATTR_SCHED_SCAN_INTERVAL is specified,
+ *     scheduled scan will run in an infinite loop with the specified interval.
+ *     These attributes are mutually exculsive,
+ *     i.e. NL80211_ATTR_SCHED_SCAN_INTERVAL must not be passed if
+ *     NL80211_ATTR_SCHED_SCAN_PLANS is defined.
+ *     If for some reason scheduled scan is aborted by the driver, all scan
+ *     plans are canceled (including scan plans that did not start yet).
+ *     Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS)
+ *     are passed, they are used in the probe requests.  For
+ *     broadcast, a broadcast SSID must be passed (ie. an empty
+ *     string).  If no SSID is passed, no probe requests are sent and
+ *     a passive scan is performed.  %NL80211_ATTR_SCAN_FREQUENCIES,
+ *     if passed, define which channels should be scanned; if not
+ *     passed, all channels allowed for the current regulatory domain
+ *     are used.  Extra IEs can also be passed from the userspace by
+ *     using the %NL80211_ATTR_IE attribute.  The first cycle of the
+ *     scheduled scan can be delayed by %NL80211_ATTR_SCHED_SCAN_DELAY
+ *     is supplied.
+ * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if
+ *     scheduled scan is not running. The caller may assume that as soon
+ *     as the call returns, it is safe to start a new scheduled scan again.
+ * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan
+ *     results available.
+ * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has
+ *     stopped.  The driver may issue this event at any time during a
+ *     scheduled scan.  One reason for stopping the scan is if the hardware
+ *     does not support starting an association or a normal scan while running
+ *     a scheduled scan.  This event is also sent when the
+ *     %NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface
+ *     is brought down while a scheduled scan was running.
+ *
+ * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation
+ *      or noise level
+ * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
+ *     NL80211_CMD_GET_SURVEY and on the "scan" multicast group)
+ *
+ * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC
+ *     (for the BSSID) and %NL80211_ATTR_PMKID.
+ * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC
+ *     (for the BSSID) and %NL80211_ATTR_PMKID.
+ * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries.
+ *
+ * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
+ *     has been changed and provides details of the request information
+ *     that caused the change such as who initiated the regulatory request
+ *     (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx
+ *     (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if
+ *     the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or
+ *     %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain
+ *     set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is
+ *     %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
+ *     to (%NL80211_ATTR_REG_ALPHA2).
+ * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon
+ *     has been found while world roaming thus enabling active scan or
+ *     any mode of operation that initiates TX (beacons) on a channel
+ *     where we would not have been able to do either before. As an example
+ *     if you are world roaming (regulatory domain set to world or if your
+ *     driver is using a custom world roaming regulatory domain) and while
+ *     doing a passive scan on the 5 GHz band you find an AP there (if not
+ *     on a DFS channel) you will now be able to actively scan for that AP
+ *     or use AP mode on your card on that same channel. Note that this will
+ *     never be used for channels 1-11 on the 2 GHz band as they are always
+ *     enabled world wide. This beacon hint is only sent if your device had
+ *     either disabled active scanning or beaconing on a channel. We send to
+ *     userspace the wiphy on which we removed a restriction from
+ *     (%NL80211_ATTR_WIPHY) and the channel on which this occurred
+ *     before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER)
+ *     the beacon hint was processed.
+ *
+ * @NL80211_CMD_AUTHENTICATE: authentication request and notification.
+ *     This command is used both as a command (request to authenticate) and
+ *     as an event on the "mlme" multicast group indicating completion of the
+ *     authentication process.
+ *     When used as a command, %NL80211_ATTR_IFINDEX is used to identify the
+ *     interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and
+ *     BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify
+ *     the SSID (mainly for association, but is included in authentication
+ *     request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used
+ *     to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE
+ *     is used to specify the authentication type. %NL80211_ATTR_IE is used to
+ *     define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs)
+ *     to be added to the frame.
+ *     When used as an event, this reports reception of an Authentication
+ *     frame in station and IBSS modes when the local MLME processed the
+ *     frame, i.e., it was for the local STA and was received in correct
+ *     state. This is similar to MLME-AUTHENTICATE.confirm primitive in the
+ *     MLME SAP interface (kernel providing MLME, userspace SME). The
+ *     included %NL80211_ATTR_FRAME attribute contains the management frame
+ *     (including both the header and frame body, but not FCS). This event is
+ *     also used to indicate if the authentication attempt timed out. In that
+ *     case the %NL80211_ATTR_FRAME attribute is replaced with a
+ *     %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which
+ *     pending authentication timed out).
+ * @NL80211_CMD_ASSOCIATE: association request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Association and Reassociation
+ *     (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request,
+ *     MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives).
+ * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to
+ *     MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication
+ *     primitives).
+ * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to
+ *     MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives).
+ *
+ * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael
+ *     MIC (part of TKIP) failure; sent on the "mlme" multicast group; the
+ *     event includes %NL80211_ATTR_MAC to describe the source MAC address of
+ *     the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key
+ *     type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and
+ *     %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this
+ *     event matches with MLME-MICHAELMICFAILURE.indication() primitive
+ *
+ * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a
+ *     FREQ attribute (for the initial frequency if no peer can be found)
+ *     and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those
+ *     should be fixed rather than automatically determined. Can only be
+ *     executed on a network interface that is UP, and fixed BSSID/FREQ
+ *     may be rejected. Another optional parameter is the beacon interval,
+ *     given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not
+ *     given defaults to 100 TU (102.4ms).
+ * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is
+ *     determined by the network interface.
+ *
+ * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute
+ *     to identify the device, and the TESTDATA blob attribute to pass through
+ *     to the driver.
+ *
+ * @NL80211_CMD_CONNECT: connection request and notification; this command
+ *     requests to connect to a specified network but without separating
+ *     auth and assoc steps. For this, you need to specify the SSID in a
+ *     %NL80211_ATTR_SSID attribute, and can optionally specify the association
+ *     IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,
+ *     %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,
+ *     %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
+ *     %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and
+ *     %NL80211_ATTR_WIPHY_FREQ_HINT.
+ *     If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are
+ *     restrictions on BSS selection, i.e., they effectively prevent roaming
+ *     within the ESS. %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT
+ *     can be included to provide a recommendation of the initial BSS while
+ *     allowing the driver to roam to other BSSes within the ESS and also to
+ *     ignore this recommendation if the indicated BSS is not ideal. Only one
+ *     set of BSSID,frequency parameters is used (i.e., either the enforcing
+ *     %NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict
+ *     %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT).
+ *     Background scan period can optionally be
+ *     specified in %NL80211_ATTR_BG_SCAN_PERIOD,
+ *     if not specified default background scan configuration
+ *     in driver is used and if period value is 0, bg scan will be disabled.
+ *     This attribute is ignored if driver does not support roam scan.
+ *     It is also sent as an event, with the BSSID and response IEs when the
+ *     connection is established or failed to be established. This can be
+ *     determined by the STATUS_CODE attribute.
+ * @NL80211_CMD_ROAM: request that the card roam (currently not implemented),
+ *     sent as an event when the card/driver roamed by itself.
+ * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify
+ *     userspace that a connection was dropped by the AP or due to other
+ *     reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and
+ *     %NL80211_ATTR_REASON_CODE attributes are used.
+ *
+ * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices
+ *     associated with this wiphy must be down and will follow.
+ *
+ * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified
+ *     channel for the specified amount of time. This can be used to do
+ *     off-channel operations like transmit a Public Action frame and wait for
+ *     a response while being associated to an AP on another channel.
+ *     %NL80211_ATTR_IFINDEX is used to specify which interface (and thus
+ *     radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the
+ *     frequency for the operation.
+ *     %NL80211_ATTR_DURATION is used to specify the duration in milliseconds
+ *     to remain on the channel. This command is also used as an event to
+ *     notify when the requested duration starts (it may take a while for the
+ *     driver to schedule this time due to other concurrent needs for the
+ *     radio).
+ *     When called, this operation returns a cookie (%NL80211_ATTR_COOKIE)
+ *     that will be included with any events pertaining to this request;
+ *     the cookie is also used to cancel the request.
+ * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a
+ *     pending remain-on-channel duration if the desired operation has been
+ *     completed prior to expiration of the originally requested duration.
+ *     %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the
+ *     radio. The %NL80211_ATTR_COOKIE attribute must be given as well to
+ *     uniquely identify the request.
+ *     This command is also used as an event to notify when a requested
+ *     remain-on-channel duration has expired.
+ *
+ * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX
+ *     rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface
+ *     and @NL80211_ATTR_TX_RATES the set of allowed rates.
+ *
+ * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames
+ *     (via @NL80211_CMD_FRAME) for processing in userspace. This command
+ *     requires an interface index, a frame type attribute (optional for
+ *     backward compatibility reasons, if not given assumes action frames)
+ *     and a match attribute containing the first few bytes of the frame
+ *     that should match, e.g. a single byte for only a category match or
+ *     four bytes for vendor frames including the OUI. The registration
+ *     cannot be dropped, but is removed automatically when the netlink
+ *     socket is closed. Multiple registrations can be made.
+ * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for
+ *     backward compatibility
+ * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This
+ *     command is used both as a request to transmit a management frame and
+ *     as an event indicating reception of a frame that was not processed in
+ *     kernel code, but is for us (i.e., which may need to be processed in a
+ *     user space application). %NL80211_ATTR_FRAME is used to specify the
+ *     frame contents (including header). %NL80211_ATTR_WIPHY_FREQ is used
+ *     to indicate on which channel the frame is to be transmitted or was
+ *     received. If this channel is not the current channel (remain-on-channel
+ *     or the operational channel) the device will switch to the given channel
+ *     and transmit the frame, optionally waiting for a response for the time
+ *     specified using %NL80211_ATTR_DURATION. When called, this operation
+ *     returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the
+ *     TX status event pertaining to the TX request.
+ *     %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the
+ *     management frames at CCK rate or not in 2GHz band.
+ *     %NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA
+ *     counters which will be updated to the current value. This attribute
+ *     is used during CSA period.
+ * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
+ *     command may be used with the corresponding cookie to cancel the wait
+ *     time if it is known that it is no longer necessary.
+ * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility.
+ * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame
+ *     transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
+ *     the TX command and %NL80211_ATTR_FRAME includes the contents of the
+ *     frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
+ *     the frame.
+ * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
+ *     backward compatibility.
+ *
+ * @NL80211_CMD_SET_POWER_SAVE: Set powersave, using %NL80211_ATTR_PS_STATE
+ * @NL80211_CMD_GET_POWER_SAVE: Get powersave status in %NL80211_ATTR_PS_STATE
+ *
+ * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command
+ *     is used to configure connection quality monitoring notification trigger
+ *     levels.
+ * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This
+ *     command is used as an event to indicate the that a trigger level was
+ *     reached.
+ * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ
+ *     and the attributes determining channel width) the given interface
+ *     (identifed by %NL80211_ATTR_IFINDEX) shall operate on.
+ *     In case multiple channels are supported by the device, the mechanism
+ *     with which it switches channels is implementation-defined.
+ *     When a monitor interface is given, it can only switch channel while
+ *     no other interfaces are operating to avoid disturbing the operation
+ *     of any other interfaces, and other interfaces will again take
+ *     precedence when they are used.
+ *
+ * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
+ *
+ * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial
+ *     mesh config parameters may be given.
+ * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the
+ *     network is determined by the network interface.
+ *
+ * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
+ *     notification. This event is used to indicate that an unprotected
+ *     deauthentication frame was dropped when MFP is in use.
+ * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
+ *     notification. This event is used to indicate that an unprotected
+ *     disassociation frame was dropped when MFP is in use.
+ *
+ * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a
+ *      beacon or probe response from a compatible mesh peer.  This is only
+ *      sent while no station information (sta_info) exists for the new peer
+ *      candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH,
+ *      @NL80211_MESH_SETUP_USERSPACE_AMPE, or
+ *      @NL80211_MESH_SETUP_USERSPACE_MPM is set.  On reception of this
+ *      notification, userspace may decide to create a new station
+ *      (@NL80211_CMD_NEW_STATION).  To stop this notification from
+ *      reoccurring, the userspace authentication daemon may want to create the
+ *      new station with the AUTHENTICATED flag unset and maybe change it later
+ *      depending on the authentication result.
+ *
+ * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings.
+ * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings.
+ *     Since wireless is more complex than wired ethernet, it supports
+ *     various triggers. These triggers can be configured through this
+ *     command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For
+ *     more background information, see
+ *     http://wireless.kernel.org/en/users/Documentation/WoWLAN.
+ *     The @NL80211_CMD_SET_WOWLAN command can also be used as a notification
+ *     from the driver reporting the wakeup reason. In this case, the
+ *     @NL80211_ATTR_WOWLAN_TRIGGERS attribute will contain the reason
+ *     for the wakeup, if it was caused by wireless. If it is not present
+ *     in the wakeup notification, the wireless device didn't cause the
+ *     wakeup but reports that it was woken up.
+ *
+ * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver
+ *     the necessary information for supporting GTK rekey offload. This
+ *     feature is typically used during WoWLAN. The configuration data
+ *     is contained in %NL80211_ATTR_REKEY_DATA (which is nested and
+ *     contains the data in sub-attributes). After rekeying happened,
+ *     this command may also be sent by the driver as an MLME event to
+ *     inform userspace of the new replay counter.
+ *
+ * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace
+ *     of PMKSA caching dandidates.
+ *
+ * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup).
+ *     In addition, this can be used as an event to request userspace to take
+ *     actions on TDLS links (set up a new link or tear down an existing one).
+ *     In such events, %NL80211_ATTR_TDLS_OPERATION indicates the requested
+ *     operation, %NL80211_ATTR_MAC contains the peer MAC address, and
+ *     %NL80211_ATTR_REASON_CODE the reason code to be used (only with
+ *     %NL80211_TDLS_TEARDOWN).
+ * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. The
+ *     %NL80211_ATTR_TDLS_ACTION attribute determines the type of frame to be
+ *     sent. Public Action codes (802.11-2012 8.1.5.1) will be sent as
+ *     802.11 management frames, while TDLS action codes (802.11-2012
+ *     8.5.13.1) will be encapsulated and sent as data frames. The currently
+ *     supported Public Action code is %WLAN_PUB_ACTION_TDLS_DISCOVER_RES
+ *     and the currently supported TDLS actions codes are given in
+ *     &enum ieee80211_tdls_actioncode.
+ *
+ * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP
+ *     (or GO) interface (i.e. hostapd) to ask for unexpected frames to
+ *     implement sending deauth to stations that send unexpected class 3
+ *     frames. Also used as the event sent by the kernel when such a frame
+ *     is received.
+ *     For the event, the %NL80211_ATTR_MAC attribute carries the TA and
+ *     other attributes like the interface index are present.
+ *     If used as the command it must have an interface index and you can
+ *     only unsubscribe from the event by closing the socket. Subscription
+ *     is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events.
+ *
+ * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the
+ *     associated station identified by %NL80211_ATTR_MAC sent a 4addr frame
+ *     and wasn't already in a 4-addr VLAN. The event will be sent similarly
+ *     to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener.
+ *
+ * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface
+ *     by sending a null data frame to it and reporting when the frame is
+ *     acknowleged. This is used to allow timing out inactive clients. Uses
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a
+ *     direct reply with an %NL80211_ATTR_COOKIE that is later used to match
+ *     up the event with the request. The event includes the same data and
+ *     has %NL80211_ATTR_ACK set if the frame was ACKed.
+ *
+ * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from
+ *     other BSSes when any interfaces are in AP mode. This helps implement
+ *     OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME
+ *     messages. Note that per PHY only one application may register.
+ *
+ * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether
+ *      No Acknowledgement Policy should be applied.
+ *
+ * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels
+ *     independently of the userspace SME, send this event indicating
+ *     %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ and the
+ *     attributes determining channel width.  This indication may also be
+ *     sent when a remotely-initiated switch (e.g., when a STA receives a CSA
+ *     from the remote AP) is completed;
+ *
+ * @NL80211_CMD_CH_SWITCH_STARTED_NOTIFY: Notify that a channel switch
+ *     has been started on an interface, regardless of the initiator
+ *     (ie. whether it was requested from a remote device or
+ *     initiated on our own).  It indicates that
+ *     %NL80211_ATTR_IFINDEX will be on %NL80211_ATTR_WIPHY_FREQ
+ *     after %NL80211_ATTR_CH_SWITCH_COUNT TBTT's.  The userspace may
+ *     decide to react to this indication by requesting other
+ *     interfaces to change channel as well.
+ *
+ * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by
+ *     its %NL80211_ATTR_WDEV identifier. It must have been created with
+ *     %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the
+ *     P2P Device can be used for P2P operations, e.g. remain-on-channel and
+ *     public action frame TX.
+ * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by
+ *     its %NL80211_ATTR_WDEV identifier.
+ *
+ * @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to
+ *     notify userspace that AP has rejected the connection request from a
+ *     station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON
+ *     is used for this.
+ *
+ * @NL80211_CMD_SET_MCAST_RATE: Change the rate used to send multicast frames
+ *     for IBSS or MESH vif.
+ *
+ * @NL80211_CMD_SET_MAC_ACL: sets ACL for MAC address based access control.
+ *     This is to be used with the drivers advertising the support of MAC
+ *     address based access control. List of MAC addresses is passed in
+ *     %NL80211_ATTR_MAC_ADDRS and ACL policy is passed in
+ *     %NL80211_ATTR_ACL_POLICY. Driver will enable ACL with this list, if it
+ *     is not already done. The new list will replace any existing list. Driver
+ *     will clear its ACL when the list of MAC addresses passed is empty. This
+ *     command is used in AP/P2P GO mode. Driver has to make sure to clear its
+ *     ACL list during %NL80211_CMD_STOP_AP.
+ *
+ * @NL80211_CMD_RADAR_DETECT: Start a Channel availability check (CAC). Once
+ *     a radar is detected or the channel availability scan (CAC) has finished
+ *     or was aborted, or a radar was detected, usermode will be notified with
+ *     this event. This command is also used to notify userspace about radars
+ *     while operating on this channel.
+ *     %NL80211_ATTR_RADAR_EVENT is used to inform about the type of the
+ *     event.
+ *
+ * @NL80211_CMD_GET_PROTOCOL_FEATURES: Get global nl80211 protocol features,
+ *     i.e. features for the nl80211 protocol rather than device features.
+ *     Returns the features in the %NL80211_ATTR_PROTOCOL_FEATURES bitmap.
+ *
+ * @NL80211_CMD_UPDATE_FT_IES: Pass down the most up-to-date Fast Transition
+ *     Information Element to the WLAN driver
+ *
+ * @NL80211_CMD_FT_EVENT: Send a Fast transition event from the WLAN driver
+ *     to the supplicant. This will carry the target AP's MAC address along
+ *     with the relevant Information Elements. This event is used to report
+ *     received FT IEs (MDIE, FTIE, RSN IE, TIE, RICIE).
+ *
+ * @NL80211_CMD_CRIT_PROTOCOL_START: Indicates user-space will start running
+ *     a critical protocol that needs more reliability in the connection to
+ *     complete.
+ *
+ * @NL80211_CMD_CRIT_PROTOCOL_STOP: Indicates the connection reliability can
+ *     return back to normal.
+ *
+ * @NL80211_CMD_GET_COALESCE: Get currently supported coalesce rules.
+ * @NL80211_CMD_SET_COALESCE: Configure coalesce rules or clear existing rules.
+ *
+ * @NL80211_CMD_CHANNEL_SWITCH: Perform a channel switch by announcing the
+ *     the new channel information (Channel Switch Announcement - CSA)
+ *     in the beacon for some time (as defined in the
+ *     %NL80211_ATTR_CH_SWITCH_COUNT parameter) and then change to the
+ *     new channel. Userspace provides the new channel information (using
+ *     %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel
+ *     width). %NL80211_ATTR_CH_SWITCH_BLOCK_TX may be supplied to inform
+ *     other station that transmission must be blocked until the channel
+ *     switch is complete.
+ *
+ * @NL80211_CMD_VENDOR: Vendor-specified command/event. The command is specified
+ *     by the %NL80211_ATTR_VENDOR_ID attribute and a sub-command in
+ *     %NL80211_ATTR_VENDOR_SUBCMD. Parameter(s) can be transported in
+ *     %NL80211_ATTR_VENDOR_DATA.
+ *     For feature advertisement, the %NL80211_ATTR_VENDOR_DATA attribute is
+ *     used in the wiphy data as a nested attribute containing descriptions
+ *     (&struct nl80211_vendor_cmd_info) of the supported vendor commands.
+ *     This may also be sent as an event with the same attributes.
+ *
+ * @NL80211_CMD_SET_QOS_MAP: Set Interworking QoS mapping for IP DSCP values.
+ *     The QoS mapping information is included in %NL80211_ATTR_QOS_MAP. If
+ *     that attribute is not included, QoS mapping is disabled. Since this
+ *     QoS mapping is relevant for IP packets, it is only valid during an
+ *     association. This is cleared on disassociation and AP restart.
+ *
+ * @NL80211_CMD_ADD_TX_TS: Ask the kernel to add a traffic stream for the given
+ *     %NL80211_ATTR_TSID and %NL80211_ATTR_MAC with %NL80211_ATTR_USER_PRIO
+ *     and %NL80211_ATTR_ADMITTED_TIME parameters.
+ *     Note that the action frame handshake with the AP shall be handled by
+ *     userspace via the normal management RX/TX framework, this only sets
+ *     up the TX TS in the driver/device.
+ *     If the admitted time attribute is not added then the request just checks
+ *     if a subsequent setup could be successful, the intent is to use this to
+ *     avoid setting up a session with the AP when local restrictions would
+ *     make that impossible. However, the subsequent "real" setup may still
+ *     fail even if the check was successful.
+ * @NL80211_CMD_DEL_TX_TS: Remove an existing TS with the %NL80211_ATTR_TSID
+ *     and %NL80211_ATTR_MAC parameters. It isn't necessary to call this
+ *     before removing a station entry entirely, or before disassociating
+ *     or similar, cleanup will happen in the driver/device in this case.
+ *
+ * @NL80211_CMD_GET_MPP: Get mesh path attributes for mesh proxy path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_JOIN_OCB: Join the OCB network. The center frequency and
+ *     bandwidth of a channel must be given.
+ * @NL80211_CMD_LEAVE_OCB: Leave the OCB network -- no special arguments, the
+ *     network is determined by the network interface.
+ *
+ * @NL80211_CMD_TDLS_CHANNEL_SWITCH: Start channel-switching with a TDLS peer,
+ *     identified by the %NL80211_ATTR_MAC parameter. A target channel is
+ *     provided via %NL80211_ATTR_WIPHY_FREQ and other attributes determining
+ *     channel width/type. The target operating class is given via
+ *     %NL80211_ATTR_OPER_CLASS.
+ *     The driver is responsible for continually initiating channel-switching
+ *     operations and returning to the base channel for communication with the
+ *     AP.
+ * @NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH: Stop channel-switching with a TDLS
+ *     peer given by %NL80211_ATTR_MAC. Both peers must be on the base channel
+ *     when this command completes.
+ *
+ * @NL80211_CMD_WIPHY_REG_CHANGE: Similar to %NL80211_CMD_REG_CHANGE, but used
+ *     as an event to indicate changes for devices with wiphy-specific regdom
+ *     management.
+ *
+ * @NL80211_CMD_MAX: highest used command number
+ * @__NL80211_CMD_AFTER_LAST: internal use
+ */
+enum nl80211_commands {
+/* don't change the order or add anything between, this is ABI! */
+       NL80211_CMD_UNSPEC,
+
+       NL80211_CMD_GET_WIPHY,          /* can dump */
+       NL80211_CMD_SET_WIPHY,
+       NL80211_CMD_NEW_WIPHY,
+       NL80211_CMD_DEL_WIPHY,
+
+       NL80211_CMD_GET_INTERFACE,      /* can dump */
+       NL80211_CMD_SET_INTERFACE,
+       NL80211_CMD_NEW_INTERFACE,
+       NL80211_CMD_DEL_INTERFACE,
+
+       NL80211_CMD_GET_KEY,
+       NL80211_CMD_SET_KEY,
+       NL80211_CMD_NEW_KEY,
+       NL80211_CMD_DEL_KEY,
+
+       NL80211_CMD_GET_BEACON,
+       NL80211_CMD_SET_BEACON,
+       NL80211_CMD_START_AP,
+       NL80211_CMD_NEW_BEACON = NL80211_CMD_START_AP,
+       NL80211_CMD_STOP_AP,
+       NL80211_CMD_DEL_BEACON = NL80211_CMD_STOP_AP,
+
+       NL80211_CMD_GET_STATION,
+       NL80211_CMD_SET_STATION,
+       NL80211_CMD_NEW_STATION,
+       NL80211_CMD_DEL_STATION,
+
+       NL80211_CMD_GET_MPATH,
+       NL80211_CMD_SET_MPATH,
+       NL80211_CMD_NEW_MPATH,
+       NL80211_CMD_DEL_MPATH,
+
+       NL80211_CMD_SET_BSS,
+
+       NL80211_CMD_SET_REG,
+       NL80211_CMD_REQ_SET_REG,
+
+       NL80211_CMD_GET_MESH_CONFIG,
+       NL80211_CMD_SET_MESH_CONFIG,
+
+       NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */,
+
+       NL80211_CMD_GET_REG,
+
+       NL80211_CMD_GET_SCAN,
+       NL80211_CMD_TRIGGER_SCAN,
+       NL80211_CMD_NEW_SCAN_RESULTS,
+       NL80211_CMD_SCAN_ABORTED,
+
+       NL80211_CMD_REG_CHANGE,
+
+       NL80211_CMD_AUTHENTICATE,
+       NL80211_CMD_ASSOCIATE,
+       NL80211_CMD_DEAUTHENTICATE,
+       NL80211_CMD_DISASSOCIATE,
+
+       NL80211_CMD_MICHAEL_MIC_FAILURE,
+
+       NL80211_CMD_REG_BEACON_HINT,
+
+       NL80211_CMD_JOIN_IBSS,
+       NL80211_CMD_LEAVE_IBSS,
+
+       NL80211_CMD_TESTMODE,
+
+       NL80211_CMD_CONNECT,
+       NL80211_CMD_ROAM,
+       NL80211_CMD_DISCONNECT,
+
+       NL80211_CMD_SET_WIPHY_NETNS,
+
+       NL80211_CMD_GET_SURVEY,
+       NL80211_CMD_NEW_SURVEY_RESULTS,
+
+       NL80211_CMD_SET_PMKSA,
+       NL80211_CMD_DEL_PMKSA,
+       NL80211_CMD_FLUSH_PMKSA,
+
+       NL80211_CMD_REMAIN_ON_CHANNEL,
+       NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
+
+       NL80211_CMD_SET_TX_BITRATE_MASK,
+
+       NL80211_CMD_REGISTER_FRAME,
+       NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME,
+       NL80211_CMD_FRAME,
+       NL80211_CMD_ACTION = NL80211_CMD_FRAME,
+       NL80211_CMD_FRAME_TX_STATUS,
+       NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS,
+
+       NL80211_CMD_SET_POWER_SAVE,
+       NL80211_CMD_GET_POWER_SAVE,
+
+       NL80211_CMD_SET_CQM,
+       NL80211_CMD_NOTIFY_CQM,
+
+       NL80211_CMD_SET_CHANNEL,
+       NL80211_CMD_SET_WDS_PEER,
+
+       NL80211_CMD_FRAME_WAIT_CANCEL,
+
+       NL80211_CMD_JOIN_MESH,
+       NL80211_CMD_LEAVE_MESH,
+
+       NL80211_CMD_UNPROT_DEAUTHENTICATE,
+       NL80211_CMD_UNPROT_DISASSOCIATE,
+
+       NL80211_CMD_NEW_PEER_CANDIDATE,
+
+       NL80211_CMD_GET_WOWLAN,
+       NL80211_CMD_SET_WOWLAN,
+
+       NL80211_CMD_START_SCHED_SCAN,
+       NL80211_CMD_STOP_SCHED_SCAN,
+       NL80211_CMD_SCHED_SCAN_RESULTS,
+       NL80211_CMD_SCHED_SCAN_STOPPED,
+
+       NL80211_CMD_SET_REKEY_OFFLOAD,
+
+       NL80211_CMD_PMKSA_CANDIDATE,
+
+       NL80211_CMD_TDLS_OPER,
+       NL80211_CMD_TDLS_MGMT,
+
+       NL80211_CMD_UNEXPECTED_FRAME,
+
+       NL80211_CMD_PROBE_CLIENT,
+
+       NL80211_CMD_REGISTER_BEACONS,
+
+       NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
+
+       NL80211_CMD_SET_NOACK_MAP,
+
+       NL80211_CMD_CH_SWITCH_NOTIFY,
+
+       NL80211_CMD_START_P2P_DEVICE,
+       NL80211_CMD_STOP_P2P_DEVICE,
+
+       NL80211_CMD_CONN_FAILED,
+
+       NL80211_CMD_SET_MCAST_RATE,
+
+       NL80211_CMD_SET_MAC_ACL,
+
+       NL80211_CMD_RADAR_DETECT,
+
+       NL80211_CMD_GET_PROTOCOL_FEATURES,
+
+       NL80211_CMD_UPDATE_FT_IES,
+       NL80211_CMD_FT_EVENT,
+
+       NL80211_CMD_CRIT_PROTOCOL_START,
+       NL80211_CMD_CRIT_PROTOCOL_STOP,
+
+       NL80211_CMD_GET_COALESCE,
+       NL80211_CMD_SET_COALESCE,
+
+       NL80211_CMD_CHANNEL_SWITCH,
+
+       NL80211_CMD_VENDOR,
+
+       NL80211_CMD_SET_QOS_MAP,
+
+       NL80211_CMD_ADD_TX_TS,
+       NL80211_CMD_DEL_TX_TS,
+
+       NL80211_CMD_GET_MPP,
+
+       NL80211_CMD_JOIN_OCB,
+       NL80211_CMD_LEAVE_OCB,
+
+       NL80211_CMD_CH_SWITCH_STARTED_NOTIFY,
+
+       NL80211_CMD_TDLS_CHANNEL_SWITCH,
+       NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
+
+       NL80211_CMD_WIPHY_REG_CHANGE,
+
+       /* add new commands above here */
+
+       /* used to define NL80211_CMD_MAX below */
+       __NL80211_CMD_AFTER_LAST,
+       NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
+};
+
+/*
+ * Allow user space programs to use #ifdef on new commands by defining them
+ * here
+ */
+#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
+#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
+#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE
+#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE
+#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE
+#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE
+#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
+#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
+
+#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
+
+/* source-level API compatibility */
+#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
+#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
+#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE
+
+/**
+ * enum nl80211_attrs - nl80211 netlink attributes
+ *
+ * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors
+ *
+ * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf.
+ *     /sys/class/ieee80211/<phyname>/index
+ * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming)
+ * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters
+ * @NL80211_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz,
+ *     defines the channel together with the (deprecated)
+ *     %NL80211_ATTR_WIPHY_CHANNEL_TYPE attribute or the attributes
+ *     %NL80211_ATTR_CHANNEL_WIDTH and if needed %NL80211_ATTR_CENTER_FREQ1
+ *     and %NL80211_ATTR_CENTER_FREQ2
+ * @NL80211_ATTR_CHANNEL_WIDTH: u32 attribute containing one of the values
+ *     of &enum nl80211_chan_width, describing the channel width. See the
+ *     documentation of the enum for more information.
+ * @NL80211_ATTR_CENTER_FREQ1: Center frequency of the first part of the
+ *     channel, used for anything but 20 MHz bandwidth
+ * @NL80211_ATTR_CENTER_FREQ2: Center frequency of the second part of the
+ *     channel, used only for 80+80 MHz bandwidth
+ * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ
+ *     if HT20 or HT40 are to be used (i.e., HT disabled if not included):
+ *     NL80211_CHAN_NO_HT = HT not allowed (i.e., same as not including
+ *             this attribute)
+ *     NL80211_CHAN_HT20 = HT20 only
+ *     NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel
+ *     NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel
+ *     This attribute is now deprecated.
+ * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is
+ *     less than or equal to the RTS threshold; allowed range: 1..255;
+ *     dot11ShortRetryLimit; u8
+ * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is
+ *     greater than the RTS threshold; allowed range: 1..255;
+ *     dot11ShortLongLimit; u8
+ * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum
+ *     length in octets for frames; allowed range: 256..8000, disable
+ *     fragmentation with (u32)-1; dot11FragmentationThreshold; u32
+ * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length
+ *     larger than or equal to this use RTS/CTS handshake); allowed range:
+ *     0..65536, disable with (u32)-1; dot11RTSThreshold; u32
+ * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11
+ *     section 7.3.2.9; dot11CoverageClass; u8
+ *
+ * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on
+ * @NL80211_ATTR_IFNAME: network interface name
+ * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
+ *
+ * @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices
+ *     that don't have a netdev (u64)
+ *
+ * @NL80211_ATTR_MAC: MAC address (various uses)
+ *
+ * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of
+ *     16 bytes encryption key followed by 8 bytes each for TX and RX MIC
+ *     keys
+ * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3)
+ * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
+ *     section 7.3.2.25.1, e.g. 0x000FAC04)
+ * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
+ *     CCMP keys, each six bytes in little endian
+ * @NL80211_ATTR_KEY_DEFAULT: Flag attribute indicating the key is default key
+ * @NL80211_ATTR_KEY_DEFAULT_MGMT: Flag attribute indicating the key is the
+ *     default management key
+ * @NL80211_ATTR_CIPHER_SUITES_PAIRWISE: For crypto settings for connect or
+ *     other commands, indicates which pairwise cipher suites are used
+ * @NL80211_ATTR_CIPHER_SUITE_GROUP: For crypto settings for connect or
+ *     other commands, indicates which group cipher suite is used
+ *
+ * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU
+ * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing
+ * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE
+ * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE
+ *
+ * @NL80211_ATTR_STA_AID: Association ID for the station (u16)
+ * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of
+ *     &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2)
+ * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by
+ *     IEEE 802.11 7.3.1.6 (u16).
+ * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported
+ *     rates as defined by IEEE 802.11 7.3.2.2 but without the length
+ *     restriction (at most %NL80211_MAX_SUPP_RATES).
+ * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station
+ *     to, or the AP interface the station was originally added to to.
+ * @NL80211_ATTR_STA_INFO: information about a station, part of station info
+ *     given for %NL80211_CMD_GET_STATION, nested attribute containing
+ *     info as possible, see &enum nl80211_sta_info.
+ *
+ * @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands,
+ *     consisting of a nested array.
+ *
+ * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes).
+ * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link
+ *     (see &enum nl80211_plink_action).
+ * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path.
+ * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path
+ *     info given for %NL80211_CMD_GET_MPATH, nested attribute described at
+ *     &enum nl80211_mpath_info.
+ *
+ * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of
+ *      &enum nl80211_mntr_flags.
+ *
+ * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the
+ *     current regulatory domain should be set to or is already set to.
+ *     For example, 'CR', for Costa Rica. This attribute is used by the kernel
+ *     to query the CRDA to retrieve one regulatory domain. This attribute can
+ *     also be used by userspace to query the kernel for the currently set
+ *     regulatory domain. We chose an alpha2 as that is also used by the
+ *     IEEE-802.11 country information element to identify a country.
+ *     Users can also simply ask the wireless core to set regulatory domain
+ *     to a specific alpha2.
+ * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory
+ *     rules.
+ *
+ * @NL80211_ATTR_BSS_CTS_PROT: whether CTS protection is enabled (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_SHORT_PREAMBLE: whether short preamble is enabled
+ *     (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled
+ *     (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic
+ *     rates in format defined by IEEE 802.11 7.3.2.2 but without the length
+ *     restriction (at most %NL80211_MAX_SUPP_RATES).
+ *
+ * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from
+ *     association request when used with NL80211_CMD_NEW_STATION)
+ *
+ * @NL80211_ATTR_SUPPORTED_IFTYPES: nested attribute containing all
+ *     supported interface types, each a flag attribute with the number
+ *     of the interface mode.
+ *
+ * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for
+ *     %NL80211_CMD_SET_MGMT_EXTRA_IE.
+ *
+ * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with
+ *     %NL80211_CMD_SET_MGMT_EXTRA_IE).
+ *
+ * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with
+ *     a single scan request, a wiphy attribute.
+ * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can
+ *     scan with a single scheduled scan request, a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements
+ *     that can be added to a scan request
+ * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information
+ *     elements that can be added to a scheduled scan request
+ * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be
+ *     used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute.
+ *
+ * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz)
+ * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive
+ *     scanning and include a zero-length SSID (wildcard) for wildcard scan
+ * @NL80211_ATTR_BSS: scan result BSS
+ *
+ * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain
+ *     currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_*
+ * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently
+ *     set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
+ *
+ * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies
+ *     an array of command numbers (i.e. a mapping index to command number)
+ *     that the driver for the given wiphy supports.
+ *
+ * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header
+ *     and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and
+ *     NL80211_CMD_ASSOCIATE events
+ * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets)
+ * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type,
+ *     represented as a u32
+ * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and
+ *     %NL80211_CMD_DISASSOCIATE, u16
+ *
+ * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as
+ *     a u32
+ *
+ * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _before_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
+ * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _after_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
+ *
+ * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported
+ *     cipher suites
+ *
+ * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look
+ *     for other networks on different channels
+ *
+ * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this
+ *     is used, e.g., with %NL80211_CMD_AUTHENTICATE event
+ *
+ * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is
+ *     used for the association (&enum nl80211_mfp, represented as a u32);
+ *     this attribute can be used
+ *     with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests
+ *
+ * @NL80211_ATTR_STA_FLAGS2: Attribute containing a
+ *     &struct nl80211_sta_flag_update.
+ *
+ * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls
+ *     IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in
+ *     station mode. If the flag is included in %NL80211_CMD_ASSOCIATE
+ *     request, the driver will assume that the port is unauthorized until
+ *     authorized by user space. Otherwise, port is marked authorized by
+ *     default in station mode.
+ * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the
+ *     ethertype that will be used for key negotiation. It can be
+ *     specified with the associate and connect commands. If it is not
+ *     specified, the value defaults to 0x888E (PAE, 802.1X). This
+ *     attribute is also used as a flag in the wiphy information to
+ *     indicate that protocols other than PAE are supported.
+ * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with
+ *     %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom
+ *     ethertype frames used for key negotiation must not be encrypted.
+ *
+ * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.
+ *     We recommend using nested, driver-specific attributes within this.
+ *
+ * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT
+ *     event was due to the AP disconnecting the station, and not due to
+ *     a local disconnect request.
+ * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT
+ *     event (u16)
+ * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating
+ *     that protected APs should be used. This is also used with NEW_BEACON to
+ *     indicate that the BSS is to use protection.
+ *
+ * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON
+ *     to indicate which unicast key ciphers will be used with the connection
+ *     (an array of u32).
+ * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which group key cipher will be used with the connection (a
+ *     u32).
+ * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which WPA version(s) the AP we want to associate with is using
+ *     (a u32 with flags from &enum nl80211_wpa_versions).
+ * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which key management algorithm(s) to use (an array of u32).
+ *
+ * @NL80211_ATTR_REQ_IE: (Re)association request information elements as
+ *     sent out by the card, for ROAM and successful CONNECT events.
+ * @NL80211_ATTR_RESP_IE: (Re)association response information elements as
+ *     sent by peer, for ROAM and successful CONNECT events.
+ *
+ * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE
+ *     commands to specify using a reassociate frame
+ *
+ * @NL80211_ATTR_KEY: key information in a nested attribute with
+ *     %NL80211_KEY_* sub-attributes
+ * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect()
+ *     and join_ibss(), key information is in a nested attribute each
+ *     with %NL80211_KEY_* sub-attributes
+ *
+ * @NL80211_ATTR_PID: Process ID of a network namespace.
+ *
+ * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for
+ *     dumps. This number increases whenever the object list being
+ *     dumped changes, and as such userspace can verify that it has
+ *     obtained a complete and consistent snapshot by verifying that
+ *     all dump messages contain the same generation number. If it
+ *     changed then the list changed and the dump should be repeated
+ *     completely from scratch.
+ *
+ * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface
+ *
+ * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of
+ *      the survey response for %NL80211_CMD_GET_SURVEY, nested attribute
+ *      containing info as possible, see &enum survey_info.
+ *
+ * @NL80211_ATTR_PMKID: PMK material for PMKSA caching.
+ * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can
+ *     cache, a wiphy attribute.
+ *
+ * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
+ * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that
+ *     specifies the maximum duration that can be requested with the
+ *     remain-on-channel operation, in milliseconds, u32.
+ *
+ * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
+ *
+ * @NL80211_ATTR_TX_RATES: Nested set of attributes
+ *     (enum nl80211_tx_rate_attributes) describing TX rates per band. The
+ *     enum nl80211_band value is used as the index (nla_type() of the nested
+ *     data. If a band is not included, it will be configured to allow all
+ *     rates based on negotiated supported rates information. This attribute
+ *     is used with %NL80211_CMD_SET_TX_BITRATE_MASK.
+ *
+ * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
+ *     at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME.
+ * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the
+ *     @NL80211_CMD_REGISTER_FRAME command.
+ * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a
+ *     nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing
+ *     information about which frame types can be transmitted with
+ *     %NL80211_CMD_FRAME.
+ * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a
+ *     nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing
+ *     information about which frame types can be registered for RX.
+ *
+ * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was
+ *     acknowledged by the recipient.
+ *
+ * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values.
+ *
+ * @NL80211_ATTR_CQM: connection quality monitor configuration in a
+ *     nested attribute with %NL80211_ATTR_CQM_* sub-attributes.
+ *
+ * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command
+ *     is requesting a local authentication/association state change without
+ *     invoking actual management frame exchange. This can be used with
+ *     NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE,
+ *     NL80211_CMD_DISASSOCIATE.
+ *
+ * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations
+ *     connected to this BSS.
+ *
+ * @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See
+ *      &enum nl80211_tx_power_setting for possible values.
+ * @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units.
+ *      This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING
+ *      for non-automatic settings.
+ *
+ * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly
+ *     means support for per-station GTKs.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting.
+ *     This can be used to mask out antennas which are not attached or should
+ *     not be used for transmitting. If an antenna is not selected in this
+ *     bitmap the hardware is not allowed to transmit on this antenna.
+ *
+ *     Each bit represents one antenna, starting with antenna 1 at the first
+ *     bit. Depending on which antennas are selected in the bitmap, 802.11n
+ *     drivers can derive which chainmasks to use (if all antennas belonging to
+ *     a particular chain are disabled this chain should be disabled) and if
+ *     a chain has diversity antennas wether diversity should be used or not.
+ *     HT capabilities (STBC, TX Beamforming, Antenna selection) can be
+ *     derived from the available chains after applying the antenna mask.
+ *     Non-802.11n drivers can derive wether to use diversity or not.
+ *     Drivers may reject configurations or RX/TX mask combinations they cannot
+ *     support by returning -EINVAL.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving.
+ *     This can be used to mask out antennas which are not attached or should
+ *     not be used for receiving. If an antenna is not selected in this bitmap
+ *     the hardware should not be configured to receive on this antenna.
+ *     For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available
+ *     for configuration as TX antennas via the above parameters.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available
+ *     for configuration as RX antennas via the above parameters.
+ *
+ * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS
+ *
+ * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be
+ *     transmitted on another channel when the channel given doesn't match
+ *     the current channel. If the current channel doesn't match and this
+ *     flag isn't set, the frame will be rejected. This is also used as an
+ *     nl80211 capability flag.
+ *
+ * @NL80211_ATTR_BSS_HT_OPMODE: HT operation mode (u16)
+ *
+ * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags
+ *     attributes, specifying what a key should be set as default as.
+ *     See &enum nl80211_key_default_types.
+ *
+ * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters.  These cannot be
+ *     changed once the mesh is active.
+ * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute
+ *     containing attributes from &enum nl80211_meshconf_params.
+ * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver
+ *     allows auth frames in a mesh to be passed to userspace for processing via
+ *     the @NL80211_MESH_SETUP_USERSPACE_AUTH flag.
+ * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as defined in
+ *     &enum nl80211_plink_state. Used when userspace is driving the peer link
+ *     management state machine.  @NL80211_MESH_SETUP_USERSPACE_AMPE or
+ *     @NL80211_MESH_SETUP_USERSPACE_MPM must be enabled.
+ *
+ * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy
+ *     capabilities, the supported WoWLAN triggers
+ * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to
+ *     indicate which WoW triggers should be enabled. This is also
+ *     used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN
+ *     triggers.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan
+ *     cycles, in msecs.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more
+ *     sets of attributes to match during scheduled scans.  Only BSSs
+ *     that match any of the sets will be reported.  These are
+ *     pass-thru filter rules.
+ *     For a match to succeed, the BSS must match all attributes of a
+ *     set.  Since not every hardware supports matching all types of
+ *     attributes, there is no guarantee that the reported BSSs are
+ *     fully complying with the match sets and userspace needs to be
+ *     able to ignore them by itself.
+ *     Thus, the implementation is somewhat hardware-dependent, but
+ *     this is only an optimization and the userspace application
+ *     needs to handle all the non-filtered results anyway.
+ *     If the match attributes don't make sense when combined with
+ *     the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID
+ *     is included in the probe request, but the match attributes
+ *     will never let it go through), -EINVAL may be returned.
+ *     If ommited, no filtering is done.
+ *
+ * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported
+ *     interface combinations. In each nested item, it contains attributes
+ *     defined in &enum nl80211_if_combination_attrs.
+ * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like
+ *     %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that
+ *     are managed in software: interfaces of these types aren't subject to
+ *     any restrictions in their number or combinations.
+ *
+ * @NL80211_ATTR_REKEY_DATA: nested attribute containing the information
+ *     necessary for GTK rekeying in the device, see &enum nl80211_rekey_data.
+ *
+ * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan,
+ *     nested array attribute containing an entry for each band, with the entry
+ *     being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but
+ *     without the length restriction (at most %NL80211_MAX_SUPP_RATES).
+ *
+ * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon
+ *     and Probe Response (when response to wildcard Probe Request); see
+ *     &enum nl80211_hidden_ssid, represented as a u32
+ *
+ * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame.
+ *     This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to
+ *     provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the
+ *     driver (or firmware) replies to Probe Request frames.
+ * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association
+ *     Response frames. This is used with %NL80211_CMD_NEW_BEACON and
+ *     %NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into
+ *     (Re)Association Response frames when the driver (or firmware) replies to
+ *     (Re)Association Request frames.
+ *
+ * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration
+ *     of the station, see &enum nl80211_sta_wme_attr.
+ * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working
+ *     as AP.
+ *
+ * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of
+ *     roaming to another AP in the same ESS if the signal lever is low.
+ *
+ * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching
+ *     candidate information, see &enum nl80211_pmksa_candidate_attr.
+ *
+ * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not
+ *     for management frames transmission. In order to avoid p2p probe/action
+ *     frames are being transmitted at CCK rate in 2GHz band, the user space
+ *     applications use this attribute.
+ *     This attribute is used with %NL80211_CMD_TRIGGER_SCAN and
+ *     %NL80211_CMD_FRAME commands.
+ *
+ * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup
+ *     request, link setup confirm, link teardown, etc.). Values are
+ *     described in the TDLS (802.11z) specification.
+ * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a
+ *     TDLS conversation between two devices.
+ * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see
+ *     &enum nl80211_tdls_operation, represented as a u8.
+ * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate
+ *     as a TDLS peer sta.
+ * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown
+ *     procedures should be performed by sending TDLS packets via
+ *     %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
+ *     used for asking the driver to perform a TDLS operation.
+ *
+ * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices
+ *     that have AP support to indicate that they have the AP SME integrated
+ *     with support for the features listed in this attribute, see
+ *     &enum nl80211_ap_sme_features.
+ *
+ * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells
+ *     the driver to not wait for an acknowledgement. Note that due to this,
+ *     it will also not give a status callback nor return a cookie. This is
+ *     mostly useful for probe responses to save airtime.
+ *
+ * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from
+ *     &enum nl80211_feature_flags and is advertised in wiphy information.
+ * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe
+ *     requests while operating in AP-mode.
+ *     This attribute holds a bitmap of the supported protocols for
+ *     offloading (see &enum nl80211_probe_resp_offload_support_attr).
+ *
+ * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
+ *     probe-response frame. The DA field in the 802.11 header is zero-ed out,
+ *     to be filled by the FW.
+ * @NL80211_ATTR_DISABLE_HT:  Force HT capable interfaces to disable
+ *      this feature.  Currently, only supported in mac80211 drivers.
+ * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
+ *      ATTR_HT_CAPABILITY to which attention should be paid.
+ *      Currently, only mac80211 NICs support this feature.
+ *      The values that may be configured are:
+ *       MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40
+ *       AMPDU density and AMPDU factor.
+ *      All values are treated as suggestions and may be ignored
+ *      by the driver as required.  The actual values may be seen in
+ *      the station debugfs ht_caps file.
+ *
+ * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
+ *    abides to when initiating radiation on DFS channels. A country maps
+ *    to one DFS region.
+ *
+ * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of
+ *      up to 16 TIDs.
+ *
+ * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be
+ *     used by the drivers which has MLME in firmware and does not have support
+ *     to report per station tx/rx activity to free up the staion entry from
+ *     the list. This needs to be used when the driver advertises the
+ *     capability to timeout the stations.
+ *
+ * @NL80211_ATTR_RX_SIGNAL_DBM: signal strength in dBm (as a 32-bit int);
+ *     this attribute is (depending on the driver capabilities) added to
+ *     received frames indicated with %NL80211_CMD_FRAME.
+ *
+ * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds
+ *      or 0 to disable background scan.
+ *
+ * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from
+ *     userspace. If unset it is assumed the hint comes directly from
+ *     a user. If set code could specify exactly what type of source
+ *     was used to provide the hint. For the different types of
+ *     allowed user regulatory hints see nl80211_user_reg_hint_type.
+ *
+ * @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected
+ *     the connection request from a station. nl80211_connect_failed_reason
+ *     enum has different reasons of connection failure.
+ *
+ * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts
+ *     with the Authentication transaction sequence number field.
+ *
+ * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from
+ *     association request when used with NL80211_CMD_NEW_STATION)
+ *
+ * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32)
+ *
+ * @NL80211_ATTR_P2P_CTWINDOW: P2P GO Client Traffic Window (u8), used with
+ *     the START_AP and SET_BSS commands
+ * @NL80211_ATTR_P2P_OPPPS: P2P GO opportunistic PS (u8), used with the
+ *     START_AP and SET_BSS commands. This can have the values 0 or 1;
+ *     if not given in START_AP 0 is assumed, if not given in SET_BSS
+ *     no change is made.
+ *
+ * @NL80211_ATTR_LOCAL_MESH_POWER_MODE: local mesh STA link-specific power mode
+ *     defined in &enum nl80211_mesh_power_mode.
+ *
+ * @NL80211_ATTR_ACL_POLICY: ACL policy, see &enum nl80211_acl_policy,
+ *     carried in a u32 attribute
+ *
+ * @NL80211_ATTR_MAC_ADDRS: Array of nested MAC addresses, used for
+ *     MAC ACL.
+ *
+ * @NL80211_ATTR_MAC_ACL_MAX: u32 attribute to advertise the maximum
+ *     number of MAC addresses that a device can support for MAC
+ *     ACL.
+ *
+ * @NL80211_ATTR_RADAR_EVENT: Type of radar event for notification to userspace,
+ *     contains a value of enum nl80211_radar_event (u32).
+ *
+ * @NL80211_ATTR_EXT_CAPA: 802.11 extended capabilities that the kernel driver
+ *     has and handles. The format is the same as the IE contents. See
+ *     802.11-2012 8.4.2.29 for more information.
+ * @NL80211_ATTR_EXT_CAPA_MASK: Extended capabilities that the kernel driver
+ *     has set in the %NL80211_ATTR_EXT_CAPA value, for multibit fields.
+ *
+ * @NL80211_ATTR_STA_CAPABILITY: Station capabilities (u16) are advertised to
+ *     the driver, e.g., to enable TDLS power save (PU-APSD).
+ *
+ * @NL80211_ATTR_STA_EXT_CAPABILITY: Station extended capabilities are
+ *     advertised to the driver, e.g., to enable TDLS off channel operations
+ *     and PU-APSD.
+ *
+ * @NL80211_ATTR_PROTOCOL_FEATURES: global nl80211 feature flags, see
+ *     &enum nl80211_protocol_features, the attribute is a u32.
+ *
+ * @NL80211_ATTR_SPLIT_WIPHY_DUMP: flag attribute, userspace supports
+ *     receiving the data for a single wiphy split across multiple
+ *     messages, given with wiphy dump message
+ *
+ * @NL80211_ATTR_MDID: Mobility Domain Identifier
+ *
+ * @NL80211_ATTR_IE_RIC: Resource Information Container Information
+ *     Element
+ *
+ * @NL80211_ATTR_CRIT_PROT_ID: critical protocol identifier requiring increased
+ *     reliability, see &enum nl80211_crit_proto_id (u16).
+ * @NL80211_ATTR_MAX_CRIT_PROT_DURATION: duration in milliseconds in which
+ *      the connection should have increased reliability (u16).
+ *
+ * @NL80211_ATTR_PEER_AID: Association ID for the peer TDLS station (u16).
+ *     This is similar to @NL80211_ATTR_STA_AID but with a difference of being
+ *     allowed to be used with the first @NL80211_CMD_SET_STATION command to
+ *     update a TDLS peer STA entry.
+ *
+ * @NL80211_ATTR_COALESCE_RULE: Coalesce rule information.
+ *
+ * @NL80211_ATTR_CH_SWITCH_COUNT: u32 attribute specifying the number of TBTT's
+ *     until the channel switch event.
+ * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
+ *     must be blocked on the current channel (before the channel switch
+ *     operation).
+ * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
+ *     for the time while performing a channel switch.
+ * @NL80211_ATTR_CSA_C_OFF_BEACON: An array of offsets (u16) to the channel
+ *     switch counters in the beacons tail (%NL80211_ATTR_BEACON_TAIL).
+ * @NL80211_ATTR_CSA_C_OFF_PRESP: An array of offsets (u16) to the channel
+ *     switch counters in the probe response (%NL80211_ATTR_PROBE_RESP).
+ *
+ * @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32.
+ *     As specified in the &enum nl80211_rxmgmt_flags.
+ *
+ * @NL80211_ATTR_STA_SUPPORTED_CHANNELS: array of supported channels.
+ *
+ * @NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES: array of supported
+ *      supported operating classes.
+ *
+ * @NL80211_ATTR_HANDLE_DFS: A flag indicating whether user space
+ *     controls DFS operation in IBSS mode. If the flag is included in
+ *     %NL80211_CMD_JOIN_IBSS request, the driver will allow use of DFS
+ *     channels and reports radar events to userspace. Userspace is required
+ *     to react to radar events, e.g. initiate a channel switch or leave the
+ *     IBSS network.
+ *
+ * @NL80211_ATTR_SUPPORT_5_MHZ: A flag indicating that the device supports
+ *     5 MHz channel bandwidth.
+ * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports
+ *     10 MHz channel bandwidth.
+ *
+ * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode
+ *     Notification Element based on association request when used with
+ *     %NL80211_CMD_NEW_STATION; u8 attribute.
+ *
+ * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if
+ *     %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet)
+ * @NL80211_ATTR_VENDOR_SUBCMD: vendor sub-command
+ * @NL80211_ATTR_VENDOR_DATA: data for the vendor command, if any; this
+ *     attribute is also used for vendor command feature advertisement
+ * @NL80211_ATTR_VENDOR_EVENTS: used for event list advertising in the wiphy
+ *     info, containing a nested array of possible events
+ *
+ * @NL80211_ATTR_QOS_MAP: IP DSCP mapping for Interworking QoS mapping. This
+ *     data is in the format defined for the payload of the QoS Map Set element
+ *     in IEEE Std 802.11-2012, 8.4.2.97.
+ *
+ * @NL80211_ATTR_MAC_HINT: MAC address recommendation as initial BSS
+ * @NL80211_ATTR_WIPHY_FREQ_HINT: frequency of the recommended initial BSS
+ *
+ * @NL80211_ATTR_MAX_AP_ASSOC_STA: Device attribute that indicates how many
+ *     associated stations are supported in AP mode (including P2P GO); u32.
+ *     Since drivers may not have a fixed limit on the maximum number (e.g.,
+ *     other concurrent operations may affect this), drivers are allowed to
+ *     advertise values that cannot always be met. In such cases, an attempt
+ *     to add a new station entry with @NL80211_CMD_NEW_STATION may fail.
+ *
+ * @NL80211_ATTR_CSA_C_OFFSETS_TX: An array of csa counter offsets (u16) which
+ *     should be updated when the frame is transmitted.
+ * @NL80211_ATTR_MAX_CSA_COUNTERS: U8 attribute used to advertise the maximum
+ *     supported number of csa counters.
+ *
+ * @NL80211_ATTR_TDLS_PEER_CAPABILITY: flags for TDLS peer capabilities, u32.
+ *     As specified in the &enum nl80211_tdls_peer_capability.
+ *
+ * @NL80211_ATTR_SOCKET_OWNER: Flag attribute, if set during interface
+ *     creation then the new interface will be owned by the netlink socket
+ *     that created it and will be destroyed when the socket is closed.
+ *     If set during scheduled scan start then the new scan req will be
+ *     owned by the netlink socket that created it and the scheduled scan will
+ *     be stopped when the socket is closed.
+ *     If set during configuration of regulatory indoor operation then the
+ *     regulatory indoor configuration would be owned by the netlink socket
+ *     that configured the indoor setting, and the indoor operation would be
+ *     cleared when the socket is closed.
+ *
+ * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
+ *     the TDLS link initiator.
+ *
+ * @NL80211_ATTR_USE_RRM: flag for indicating whether the current connection
+ *     shall support Radio Resource Measurements (11k). This attribute can be
+ *     used with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests.
+ *     User space applications are expected to use this flag only if the
+ *     underlying device supports these minimal RRM features:
+ *             %NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES,
+ *             %NL80211_FEATURE_QUIET,
+ *     If this flag is used, driver must add the Power Capabilities IE to the
+ *     association request. In addition, it must also set the RRM capability
+ *     flag in the association request's Capability Info field.
+ *
+ * @NL80211_ATTR_WIPHY_DYN_ACK: flag attribute used to enable ACK timeout
+ *     estimation algorithm (dynack). In order to activate dynack
+ *     %NL80211_FEATURE_ACKTO_ESTIMATION feature flag must be set by lower
+ *     drivers to indicate dynack capability. Dynack is automatically disabled
+ *     setting valid value for coverage class.
+ *
+ * @NL80211_ATTR_TSID: a TSID value (u8 attribute)
+ * @NL80211_ATTR_USER_PRIO: user priority value (u8 attribute)
+ * @NL80211_ATTR_ADMITTED_TIME: admitted time in units of 32 microseconds
+ *     (per second) (u16 attribute)
+ *
+ * @NL80211_ATTR_SMPS_MODE: SMPS mode to use (ap mode). see
+ *     &enum nl80211_smps_mode.
+ *
+ * @NL80211_ATTR_OPER_CLASS: operating class
+ *
+ * @NL80211_ATTR_MAC_MASK: MAC address mask
+ *
+ * @NL80211_ATTR_WIPHY_SELF_MANAGED_REG: flag attribute indicating this device
+ *     is self-managing its regulatory information and any regulatory domain
+ *     obtained from it is coming from the device's wiphy and not the global
+ *     cfg80211 regdomain.
+ *
+ * @NL80211_ATTR_EXT_FEATURES: extended feature flags contained in a byte
+ *     array. The feature flags are identified by their bit index (see &enum
+ *     nl80211_ext_feature_index). The bit index is ordered starting at the
+ *     least-significant bit of the first byte in the array, ie. bit index 0
+ *     is located at bit 0 of byte 0. bit index 25 would be located at bit 1
+ *     of byte 3 (u8 array).
+ *
+ * @NL80211_ATTR_SURVEY_RADIO_STATS: Request overall radio statistics to be
+ *     returned along with other survey data. If set, @NL80211_CMD_GET_SURVEY
+ *     may return a survey entry without a channel indicating global radio
+ *     statistics (only some values are valid and make sense.)
+ *     For devices that don't return such an entry even then, the information
+ *     should be contained in the result as the sum of the respective counters
+ *     over all channels.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_DELAY: delay before the first cycle of a
+ *     scheduled scan (or a WoWLAN net-detect scan) is started, u32
+ *     in seconds.
+
+ * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device
+ *      is operating in an indoor environment.
+ *
+ * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS: maximum number of scan plans for
+ *     scheduled scan supported by the device (u32), a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL: maximum interval (in seconds) for
+ *     a scan plan (u32), a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS: maximum number of iterations in
+ *     a scan plan (u32), a wiphy attribute.
+ * @NL80211_ATTR_SCHED_SCAN_PLANS: a list of scan plans for scheduled scan.
+ *     Each scan plan defines the number of scan iterations and the interval
+ *     between scans. The last scan plan will always run infinitely,
+ *     thus it must not specify the number of iterations, only the interval
+ *     between scans. The scan plans are executed sequentially.
+ *     Each scan plan is a nested attribute of &enum nl80211_sched_scan_plan.
+ *
+ * @NUM_NL80211_ATTR: total number of nl80211_attrs available
+ * @NL80211_ATTR_MAX: highest attribute number currently defined
+ * @__NL80211_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_attrs {
+/* don't change the order or add anything between, this is ABI! */
+       NL80211_ATTR_UNSPEC,
+
+       NL80211_ATTR_WIPHY,
+       NL80211_ATTR_WIPHY_NAME,
+
+       NL80211_ATTR_IFINDEX,
+       NL80211_ATTR_IFNAME,
+       NL80211_ATTR_IFTYPE,
+
+       NL80211_ATTR_MAC,
+
+       NL80211_ATTR_KEY_DATA,
+       NL80211_ATTR_KEY_IDX,
+       NL80211_ATTR_KEY_CIPHER,
+       NL80211_ATTR_KEY_SEQ,
+       NL80211_ATTR_KEY_DEFAULT,
+
+       NL80211_ATTR_BEACON_INTERVAL,
+       NL80211_ATTR_DTIM_PERIOD,
+       NL80211_ATTR_BEACON_HEAD,
+       NL80211_ATTR_BEACON_TAIL,
+
+       NL80211_ATTR_STA_AID,
+       NL80211_ATTR_STA_FLAGS,
+       NL80211_ATTR_STA_LISTEN_INTERVAL,
+       NL80211_ATTR_STA_SUPPORTED_RATES,
+       NL80211_ATTR_STA_VLAN,
+       NL80211_ATTR_STA_INFO,
+
+       NL80211_ATTR_WIPHY_BANDS,
+
+       NL80211_ATTR_MNTR_FLAGS,
+
+       NL80211_ATTR_MESH_ID,
+       NL80211_ATTR_STA_PLINK_ACTION,
+       NL80211_ATTR_MPATH_NEXT_HOP,
+       NL80211_ATTR_MPATH_INFO,
+
+       NL80211_ATTR_BSS_CTS_PROT,
+       NL80211_ATTR_BSS_SHORT_PREAMBLE,
+       NL80211_ATTR_BSS_SHORT_SLOT_TIME,
+
+       NL80211_ATTR_HT_CAPABILITY,
+
+       NL80211_ATTR_SUPPORTED_IFTYPES,
+
+       NL80211_ATTR_REG_ALPHA2,
+       NL80211_ATTR_REG_RULES,
+
+       NL80211_ATTR_MESH_CONFIG,
+
+       NL80211_ATTR_BSS_BASIC_RATES,
+
+       NL80211_ATTR_WIPHY_TXQ_PARAMS,
+       NL80211_ATTR_WIPHY_FREQ,
+       NL80211_ATTR_WIPHY_CHANNEL_TYPE,
+
+       NL80211_ATTR_KEY_DEFAULT_MGMT,
+
+       NL80211_ATTR_MGMT_SUBTYPE,
+       NL80211_ATTR_IE,
+
+       NL80211_ATTR_MAX_NUM_SCAN_SSIDS,
+
+       NL80211_ATTR_SCAN_FREQUENCIES,
+       NL80211_ATTR_SCAN_SSIDS,
+       NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */
+       NL80211_ATTR_BSS,
+
+       NL80211_ATTR_REG_INITIATOR,
+       NL80211_ATTR_REG_TYPE,
+
+       NL80211_ATTR_SUPPORTED_COMMANDS,
+
+       NL80211_ATTR_FRAME,
+       NL80211_ATTR_SSID,
+       NL80211_ATTR_AUTH_TYPE,
+       NL80211_ATTR_REASON_CODE,
+
+       NL80211_ATTR_KEY_TYPE,
+
+       NL80211_ATTR_MAX_SCAN_IE_LEN,
+       NL80211_ATTR_CIPHER_SUITES,
+
+       NL80211_ATTR_FREQ_BEFORE,
+       NL80211_ATTR_FREQ_AFTER,
+
+       NL80211_ATTR_FREQ_FIXED,
+
+
+       NL80211_ATTR_WIPHY_RETRY_SHORT,
+       NL80211_ATTR_WIPHY_RETRY_LONG,
+       NL80211_ATTR_WIPHY_FRAG_THRESHOLD,
+       NL80211_ATTR_WIPHY_RTS_THRESHOLD,
+
+       NL80211_ATTR_TIMED_OUT,
+
+       NL80211_ATTR_USE_MFP,
+
+       NL80211_ATTR_STA_FLAGS2,
+
+       NL80211_ATTR_CONTROL_PORT,
+
+       NL80211_ATTR_TESTDATA,
+
+       NL80211_ATTR_PRIVACY,
+
+       NL80211_ATTR_DISCONNECTED_BY_AP,
+       NL80211_ATTR_STATUS_CODE,
+
+       NL80211_ATTR_CIPHER_SUITES_PAIRWISE,
+       NL80211_ATTR_CIPHER_SUITE_GROUP,
+       NL80211_ATTR_WPA_VERSIONS,
+       NL80211_ATTR_AKM_SUITES,
+
+       NL80211_ATTR_REQ_IE,
+       NL80211_ATTR_RESP_IE,
+
+       NL80211_ATTR_PREV_BSSID,
+
+       NL80211_ATTR_KEY,
+       NL80211_ATTR_KEYS,
+
+       NL80211_ATTR_PID,
+
+       NL80211_ATTR_4ADDR,
+
+       NL80211_ATTR_SURVEY_INFO,
+
+       NL80211_ATTR_PMKID,
+       NL80211_ATTR_MAX_NUM_PMKIDS,
+
+       NL80211_ATTR_DURATION,
+
+       NL80211_ATTR_COOKIE,
+
+       NL80211_ATTR_WIPHY_COVERAGE_CLASS,
+
+       NL80211_ATTR_TX_RATES,
+
+       NL80211_ATTR_FRAME_MATCH,
+
+       NL80211_ATTR_ACK,
+
+       NL80211_ATTR_PS_STATE,
+
+       NL80211_ATTR_CQM,
+
+       NL80211_ATTR_LOCAL_STATE_CHANGE,
+
+       NL80211_ATTR_AP_ISOLATE,
+
+       NL80211_ATTR_WIPHY_TX_POWER_SETTING,
+       NL80211_ATTR_WIPHY_TX_POWER_LEVEL,
+
+       NL80211_ATTR_TX_FRAME_TYPES,
+       NL80211_ATTR_RX_FRAME_TYPES,
+       NL80211_ATTR_FRAME_TYPE,
+
+       NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
+       NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT,
+
+       NL80211_ATTR_SUPPORT_IBSS_RSN,
+
+       NL80211_ATTR_WIPHY_ANTENNA_TX,
+       NL80211_ATTR_WIPHY_ANTENNA_RX,
+
+       NL80211_ATTR_MCAST_RATE,
+
+       NL80211_ATTR_OFFCHANNEL_TX_OK,
+
+       NL80211_ATTR_BSS_HT_OPMODE,
+
+       NL80211_ATTR_KEY_DEFAULT_TYPES,
+
+       NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
+
+       NL80211_ATTR_MESH_SETUP,
+
+       NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
+       NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX,
+
+       NL80211_ATTR_SUPPORT_MESH_AUTH,
+       NL80211_ATTR_STA_PLINK_STATE,
+
+       NL80211_ATTR_WOWLAN_TRIGGERS,
+       NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED,
+
+       NL80211_ATTR_SCHED_SCAN_INTERVAL,
+
+       NL80211_ATTR_INTERFACE_COMBINATIONS,
+       NL80211_ATTR_SOFTWARE_IFTYPES,
+
+       NL80211_ATTR_REKEY_DATA,
+
+       NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS,
+       NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN,
+
+       NL80211_ATTR_SCAN_SUPP_RATES,
+
+       NL80211_ATTR_HIDDEN_SSID,
+
+       NL80211_ATTR_IE_PROBE_RESP,
+       NL80211_ATTR_IE_ASSOC_RESP,
+
+       NL80211_ATTR_STA_WME,
+       NL80211_ATTR_SUPPORT_AP_UAPSD,
+
+       NL80211_ATTR_ROAM_SUPPORT,
+
+       NL80211_ATTR_SCHED_SCAN_MATCH,
+       NL80211_ATTR_MAX_MATCH_SETS,
+
+       NL80211_ATTR_PMKSA_CANDIDATE,
+
+       NL80211_ATTR_TX_NO_CCK_RATE,
+
+       NL80211_ATTR_TDLS_ACTION,
+       NL80211_ATTR_TDLS_DIALOG_TOKEN,
+       NL80211_ATTR_TDLS_OPERATION,
+       NL80211_ATTR_TDLS_SUPPORT,
+       NL80211_ATTR_TDLS_EXTERNAL_SETUP,
+
+       NL80211_ATTR_DEVICE_AP_SME,
+
+       NL80211_ATTR_DONT_WAIT_FOR_ACK,
+
+       NL80211_ATTR_FEATURE_FLAGS,
+
+       NL80211_ATTR_PROBE_RESP_OFFLOAD,
+
+       NL80211_ATTR_PROBE_RESP,
+
+       NL80211_ATTR_DFS_REGION,
+
+       NL80211_ATTR_DISABLE_HT,
+       NL80211_ATTR_HT_CAPABILITY_MASK,
+
+       NL80211_ATTR_NOACK_MAP,
+
+       NL80211_ATTR_INACTIVITY_TIMEOUT,
+
+       NL80211_ATTR_RX_SIGNAL_DBM,
+
+       NL80211_ATTR_BG_SCAN_PERIOD,
+
+       NL80211_ATTR_WDEV,
+
+       NL80211_ATTR_USER_REG_HINT_TYPE,
+
+       NL80211_ATTR_CONN_FAILED_REASON,
+
+       NL80211_ATTR_SAE_DATA,
+
+       NL80211_ATTR_VHT_CAPABILITY,
+
+       NL80211_ATTR_SCAN_FLAGS,
+
+       NL80211_ATTR_CHANNEL_WIDTH,
+       NL80211_ATTR_CENTER_FREQ1,
+       NL80211_ATTR_CENTER_FREQ2,
+
+       NL80211_ATTR_P2P_CTWINDOW,
+       NL80211_ATTR_P2P_OPPPS,
+
+       NL80211_ATTR_LOCAL_MESH_POWER_MODE,
+
+       NL80211_ATTR_ACL_POLICY,
+
+       NL80211_ATTR_MAC_ADDRS,
+
+       NL80211_ATTR_MAC_ACL_MAX,
+
+       NL80211_ATTR_RADAR_EVENT,
+
+       NL80211_ATTR_EXT_CAPA,
+       NL80211_ATTR_EXT_CAPA_MASK,
+
+       NL80211_ATTR_STA_CAPABILITY,
+       NL80211_ATTR_STA_EXT_CAPABILITY,
+
+       NL80211_ATTR_PROTOCOL_FEATURES,
+       NL80211_ATTR_SPLIT_WIPHY_DUMP,
+
+       NL80211_ATTR_DISABLE_VHT,
+       NL80211_ATTR_VHT_CAPABILITY_MASK,
+
+       NL80211_ATTR_MDID,
+       NL80211_ATTR_IE_RIC,
+
+       NL80211_ATTR_CRIT_PROT_ID,
+       NL80211_ATTR_MAX_CRIT_PROT_DURATION,
+
+       NL80211_ATTR_PEER_AID,
+
+       NL80211_ATTR_COALESCE_RULE,
+
+       NL80211_ATTR_CH_SWITCH_COUNT,
+       NL80211_ATTR_CH_SWITCH_BLOCK_TX,
+       NL80211_ATTR_CSA_IES,
+       NL80211_ATTR_CSA_C_OFF_BEACON,
+       NL80211_ATTR_CSA_C_OFF_PRESP,
+
+       NL80211_ATTR_RXMGMT_FLAGS,
+
+       NL80211_ATTR_STA_SUPPORTED_CHANNELS,
+
+       NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES,
+
+       NL80211_ATTR_HANDLE_DFS,
+
+       NL80211_ATTR_SUPPORT_5_MHZ,
+       NL80211_ATTR_SUPPORT_10_MHZ,
+
+       NL80211_ATTR_OPMODE_NOTIF,
+
+       NL80211_ATTR_VENDOR_ID,
+       NL80211_ATTR_VENDOR_SUBCMD,
+       NL80211_ATTR_VENDOR_DATA,
+       NL80211_ATTR_VENDOR_EVENTS,
+
+       NL80211_ATTR_QOS_MAP,
+
+       NL80211_ATTR_MAC_HINT,
+       NL80211_ATTR_WIPHY_FREQ_HINT,
+
+       NL80211_ATTR_MAX_AP_ASSOC_STA,
+
+       NL80211_ATTR_TDLS_PEER_CAPABILITY,
+
+       NL80211_ATTR_SOCKET_OWNER,
+
+       NL80211_ATTR_CSA_C_OFFSETS_TX,
+       NL80211_ATTR_MAX_CSA_COUNTERS,
+
+       NL80211_ATTR_TDLS_INITIATOR,
+
+       NL80211_ATTR_USE_RRM,
+
+       NL80211_ATTR_WIPHY_DYN_ACK,
+
+       NL80211_ATTR_TSID,
+       NL80211_ATTR_USER_PRIO,
+       NL80211_ATTR_ADMITTED_TIME,
+
+       NL80211_ATTR_SMPS_MODE,
+
+       NL80211_ATTR_OPER_CLASS,
+
+       NL80211_ATTR_MAC_MASK,
+
+       NL80211_ATTR_WIPHY_SELF_MANAGED_REG,
+
+       NL80211_ATTR_EXT_FEATURES,
+
+       NL80211_ATTR_SURVEY_RADIO_STATS,
+
+       NL80211_ATTR_NETNS_FD,
+
+       NL80211_ATTR_SCHED_SCAN_DELAY,
+
+       NL80211_ATTR_REG_INDOOR,
+
+       NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS,
+       NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL,
+       NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS,
+       NL80211_ATTR_SCHED_SCAN_PLANS,
+
+       /* add attributes here, update the policy in nl80211.c */
+
+       __NL80211_ATTR_AFTER_LAST,
+       NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
+       NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
+};
+
+/* source-level API compatibility */
+#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION
+#define        NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG
+#define NL80211_ATTR_IFACE_SOCKET_OWNER NL80211_ATTR_SOCKET_OWNER
+
+/*
+ * Allow user space programs to use #ifdef on new attributes by defining them
+ * here
+ */
+#define NL80211_CMD_CONNECT NL80211_CMD_CONNECT
+#define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY
+#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES
+#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS
+#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ
+#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE
+#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE
+#define NL80211_ATTR_IE NL80211_ATTR_IE
+#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR
+#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE
+#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME
+#define NL80211_ATTR_SSID NL80211_ATTR_SSID
+#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE
+#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE
+#define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE
+#define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP
+#define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS
+#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES
+#define NL80211_ATTR_KEY NL80211_ATTR_KEY
+#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS
+#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
+
+#define NL80211_MAX_SUPP_RATES                 32
+#define NL80211_MAX_SUPP_HT_RATES              77
+#define NL80211_MAX_SUPP_REG_RULES             64
+#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY      0
+#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY    16
+#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY    24
+#define NL80211_HT_CAPABILITY_LEN              26
+#define NL80211_VHT_CAPABILITY_LEN             12
+
+#define NL80211_MAX_NR_CIPHER_SUITES           5
+#define NL80211_MAX_NR_AKM_SUITES              2
+
+#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME     10
+
+/* default RSSI threshold for scan results if none specified. */
+#define NL80211_SCAN_RSSI_THOLD_OFF            -300
+
+#define NL80211_CQM_TXE_MAX_INTVL              1800
+
+/**
+ * enum nl80211_iftype - (virtual) interface types
+ *
+ * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides
+ * @NL80211_IFTYPE_ADHOC: independent BSS member
+ * @NL80211_IFTYPE_STATION: managed BSS member
+ * @NL80211_IFTYPE_AP: access point
+ * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces
+ *     are a bit special in that they must always be tied to a pre-existing
+ *     AP type interface.
+ * @NL80211_IFTYPE_WDS: wireless distribution interface
+ * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
+ * @NL80211_IFTYPE_MESH_POINT: mesh point
+ * @NL80211_IFTYPE_P2P_CLIENT: P2P client
+ * @NL80211_IFTYPE_P2P_GO: P2P group owner
+ * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev
+ *     and therefore can't be created in the normal ways, use the
+ *     %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
+ *     commands to create and destroy one
+ * @NL80211_IF_TYPE_OCB: Outside Context of a BSS
+ *     This mode corresponds to the MIB variable dot11OCBActivated=true
+ * @NL80211_IFTYPE_MAX: highest interface type number currently defined
+ * @NUM_NL80211_IFTYPES: number of defined interface types
+ *
+ * These values are used with the %NL80211_ATTR_IFTYPE
+ * to set the type of an interface.
+ *
+ */
+enum nl80211_iftype {
+       NL80211_IFTYPE_UNSPECIFIED,
+       NL80211_IFTYPE_ADHOC,
+       NL80211_IFTYPE_STATION,
+       NL80211_IFTYPE_AP,
+       NL80211_IFTYPE_AP_VLAN,
+       NL80211_IFTYPE_WDS,
+       NL80211_IFTYPE_MONITOR,
+       NL80211_IFTYPE_MESH_POINT,
+       NL80211_IFTYPE_P2P_CLIENT,
+       NL80211_IFTYPE_P2P_GO,
+       NL80211_IFTYPE_P2P_DEVICE,
+       NL80211_IFTYPE_OCB,
+
+       /* keep last */
+       NUM_NL80211_IFTYPES,
+       NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
+};
+
+/**
+ * enum nl80211_sta_flags - station flags
+ *
+ * Station flags. When a station is added to an AP interface, it is
+ * assumed to be already associated (and hence authenticated.)
+ *
+ * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X)
+ * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
+ *     with short barker preamble
+ * @NL80211_STA_FLAG_WME: station is WME/QoS capable
+ * @NL80211_STA_FLAG_MFP: station uses management frame protection
+ * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated
+ * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should
+ *     only be used in managed mode (even in the flags mask). Note that the
+ *     flag can't be changed, it is only valid while adding a station, and
+ *     attempts to change it will silently be ignored (rather than rejected
+ *     as errors.)
+ * @NL80211_STA_FLAG_ASSOCIATED: station is associated; used with drivers
+ *     that support %NL80211_FEATURE_FULL_AP_CLIENT_STATE to transition a
+ *     previously added station into associated state
+ * @NL80211_STA_FLAG_MAX: highest station flag number currently defined
+ * @__NL80211_STA_FLAG_AFTER_LAST: internal use
+ */
+enum nl80211_sta_flags {
+       __NL80211_STA_FLAG_INVALID,
+       NL80211_STA_FLAG_AUTHORIZED,
+       NL80211_STA_FLAG_SHORT_PREAMBLE,
+       NL80211_STA_FLAG_WME,
+       NL80211_STA_FLAG_MFP,
+       NL80211_STA_FLAG_AUTHENTICATED,
+       NL80211_STA_FLAG_TDLS_PEER,
+       NL80211_STA_FLAG_ASSOCIATED,
+
+       /* keep last */
+       __NL80211_STA_FLAG_AFTER_LAST,
+       NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1
+};
+
+#define NL80211_STA_FLAG_MAX_OLD_API   NL80211_STA_FLAG_TDLS_PEER
+
+/**
+ * struct nl80211_sta_flag_update - station flags mask/set
+ * @mask: mask of station flags to set
+ * @set: which values to set them to
+ *
+ * Both mask and set contain bits as per &enum nl80211_sta_flags.
+ */
+struct nl80211_sta_flag_update {
+       __u32 mask;
+       __u32 set;
+} __attribute__((packed));
+
+/**
+ * enum nl80211_rate_info - bitrate information
+ *
+ * These attribute types are used with %NL80211_STA_INFO_TXRATE
+ * when getting information about the bitrate of a station.
+ * There are 2 attributes for bitrate, a legacy one that represents
+ * a 16-bit value, and new one that represents a 32-bit value.
+ * If the rate value fits into 16 bit, both attributes are reported
+ * with the same value. If the rate is too high to fit into 16 bits
+ * (>6.5535Gbps) only 32-bit attribute is included.
+ * User space tools encouraged to use the 32-bit attribute and fall
+ * back to the 16-bit one for compatibility with older kernels.
+ *
+ * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s)
+ * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8)
+ * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 MHz dualchannel bitrate
+ * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval
+ * @NL80211_RATE_INFO_BITRATE32: total bitrate (u32, 100kbit/s)
+ * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined
+ * @NL80211_RATE_INFO_VHT_MCS: MCS index for VHT (u8)
+ * @NL80211_RATE_INFO_VHT_NSS: number of streams in VHT (u8)
+ * @NL80211_RATE_INFO_80_MHZ_WIDTH: 80 MHz VHT rate
+ * @NL80211_RATE_INFO_80P80_MHZ_WIDTH: unused - 80+80 is treated the
+ *     same as 160 for purposes of the bitrates
+ * @NL80211_RATE_INFO_160_MHZ_WIDTH: 160 MHz VHT rate
+ * @NL80211_RATE_INFO_10_MHZ_WIDTH: 10 MHz width - note that this is
+ *     a legacy rate and will be reported as the actual bitrate, i.e.
+ *     half the base (20 MHz) rate
+ * @NL80211_RATE_INFO_5_MHZ_WIDTH: 5 MHz width - note that this is
+ *     a legacy rate and will be reported as the actual bitrate, i.e.
+ *     a quarter of the base (20 MHz) rate
+ * @__NL80211_RATE_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_rate_info {
+       __NL80211_RATE_INFO_INVALID,
+       NL80211_RATE_INFO_BITRATE,
+       NL80211_RATE_INFO_MCS,
+       NL80211_RATE_INFO_40_MHZ_WIDTH,
+       NL80211_RATE_INFO_SHORT_GI,
+       NL80211_RATE_INFO_BITRATE32,
+       NL80211_RATE_INFO_VHT_MCS,
+       NL80211_RATE_INFO_VHT_NSS,
+       NL80211_RATE_INFO_80_MHZ_WIDTH,
+       NL80211_RATE_INFO_80P80_MHZ_WIDTH,
+       NL80211_RATE_INFO_160_MHZ_WIDTH,
+       NL80211_RATE_INFO_10_MHZ_WIDTH,
+       NL80211_RATE_INFO_5_MHZ_WIDTH,
+
+       /* keep last */
+       __NL80211_RATE_INFO_AFTER_LAST,
+       NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sta_bss_param - BSS information collected by STA
+ *
+ * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM
+ * when getting information about the bitrate of a station.
+ *
+ * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag)
+ * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE:  whether short preamble is enabled
+ *     (flag)
+ * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME:  whether short slot time is enabled
+ *     (flag)
+ * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8)
+ * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16)
+ * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined
+ * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use
+ */
+enum nl80211_sta_bss_param {
+       __NL80211_STA_BSS_PARAM_INVALID,
+       NL80211_STA_BSS_PARAM_CTS_PROT,
+       NL80211_STA_BSS_PARAM_SHORT_PREAMBLE,
+       NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME,
+       NL80211_STA_BSS_PARAM_DTIM_PERIOD,
+       NL80211_STA_BSS_PARAM_BEACON_INTERVAL,
+
+       /* keep last */
+       __NL80211_STA_BSS_PARAM_AFTER_LAST,
+       NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sta_info - station information
+ *
+ * These attribute types are used with %NL80211_ATTR_STA_INFO
+ * when getting information about a station.
+ *
+ * @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs)
+ * @NL80211_STA_INFO_RX_BYTES: total received bytes (MPDU length)
+ *     (u32, from this station)
+ * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (MPDU length)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_RX_BYTES64: total received bytes (MPDU length)
+ *     (u64, from this station)
+ * @NL80211_STA_INFO_TX_BYTES64: total transmitted bytes (MPDU length)
+ *     (u64, to this station)
+ * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)
+ * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute
+ *     containing info as possible, see &enum nl80211_rate_info
+ * @NL80211_STA_INFO_RX_PACKETS: total received packet (MSDUs and MMPDUs)
+ *     (u32, from this station)
+ * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (MSDUs and MMPDUs)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_TX_RETRIES: total retries (MPDUs) (u32, to this station)
+ * @NL80211_STA_INFO_TX_FAILED: total failed packets (MPDUs)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm)
+ * @NL80211_STA_INFO_LLID: the station's mesh LLID
+ * @NL80211_STA_INFO_PLID: the station's mesh PLID
+ * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
+ *     (see %enum nl80211_plink_state)
+ * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
+ *     attribute, like NL80211_STA_INFO_TX_BITRATE.
+ * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute
+ *     containing info as possible, see &enum nl80211_sta_bss_param
+ * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
+ * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
+ * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
+ * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
+ * @NL80211_STA_INFO_LOCAL_PM: local mesh STA link-specific power mode
+ * @NL80211_STA_INFO_PEER_PM: peer mesh STA link-specific power mode
+ * @NL80211_STA_INFO_NONPEER_PM: neighbor mesh STA power save mode towards
+ *     non-peer STA
+ * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU
+ *     Contains a nested array of signal strength attributes (u8, dBm)
+ * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average
+ *     Same format as NL80211_STA_INFO_CHAIN_SIGNAL.
+ * @NL80211_STA_EXPECTED_THROUGHPUT: expected throughput considering also the
+ *     802.11 header (u32, kbps)
+ * @NL80211_STA_INFO_RX_DROP_MISC: RX packets dropped for unspecified reasons
+ *     (u64)
+ * @NL80211_STA_INFO_BEACON_RX: number of beacons received from this peer (u64)
+ * @NL80211_STA_INFO_BEACON_SIGNAL_AVG: signal strength average
+ *     for beacons only (u8, dBm)
+ * @NL80211_STA_INFO_TID_STATS: per-TID statistics (see &enum nl80211_tid_stats)
+ *     This is a nested attribute where each the inner attribute number is the
+ *     TID+1 and the special TID 16 (i.e. value 17) is used for non-QoS frames;
+ *     each one of those is again nested with &enum nl80211_tid_stats
+ *     attributes carrying the actual values.
+ * @__NL80211_STA_INFO_AFTER_LAST: internal
+ * @NL80211_STA_INFO_MAX: highest possible station info attribute
+ */
+enum nl80211_sta_info {
+       __NL80211_STA_INFO_INVALID,
+       NL80211_STA_INFO_INACTIVE_TIME,
+       NL80211_STA_INFO_RX_BYTES,
+       NL80211_STA_INFO_TX_BYTES,
+       NL80211_STA_INFO_LLID,
+       NL80211_STA_INFO_PLID,
+       NL80211_STA_INFO_PLINK_STATE,
+       NL80211_STA_INFO_SIGNAL,
+       NL80211_STA_INFO_TX_BITRATE,
+       NL80211_STA_INFO_RX_PACKETS,
+       NL80211_STA_INFO_TX_PACKETS,
+       NL80211_STA_INFO_TX_RETRIES,
+       NL80211_STA_INFO_TX_FAILED,
+       NL80211_STA_INFO_SIGNAL_AVG,
+       NL80211_STA_INFO_RX_BITRATE,
+       NL80211_STA_INFO_BSS_PARAM,
+       NL80211_STA_INFO_CONNECTED_TIME,
+       NL80211_STA_INFO_STA_FLAGS,
+       NL80211_STA_INFO_BEACON_LOSS,
+       NL80211_STA_INFO_T_OFFSET,
+       NL80211_STA_INFO_LOCAL_PM,
+       NL80211_STA_INFO_PEER_PM,
+       NL80211_STA_INFO_NONPEER_PM,
+       NL80211_STA_INFO_RX_BYTES64,
+       NL80211_STA_INFO_TX_BYTES64,
+       NL80211_STA_INFO_CHAIN_SIGNAL,
+       NL80211_STA_INFO_CHAIN_SIGNAL_AVG,
+       NL80211_STA_INFO_EXPECTED_THROUGHPUT,
+       NL80211_STA_INFO_RX_DROP_MISC,
+       NL80211_STA_INFO_BEACON_RX,
+       NL80211_STA_INFO_BEACON_SIGNAL_AVG,
+       NL80211_STA_INFO_TID_STATS,
+
+       /* keep last */
+       __NL80211_STA_INFO_AFTER_LAST,
+       NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_tid_stats - per TID statistics attributes
+ * @__NL80211_TID_STATS_INVALID: attribute number 0 is reserved
+ * @NL80211_TID_STATS_RX_MSDU: number of MSDUs received (u64)
+ * @NL80211_TID_STATS_TX_MSDU: number of MSDUs transmitted (or
+ *     attempted to transmit; u64)
+ * @NL80211_TID_STATS_TX_MSDU_RETRIES: number of retries for
+ *     transmitted MSDUs (not counting the first attempt; u64)
+ * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted
+ *     MSDUs (u64)
+ * @NUM_NL80211_TID_STATS: number of attributes here
+ * @NL80211_TID_STATS_MAX: highest numbered attribute here
+ */
+enum nl80211_tid_stats {
+       __NL80211_TID_STATS_INVALID,
+       NL80211_TID_STATS_RX_MSDU,
+       NL80211_TID_STATS_TX_MSDU,
+       NL80211_TID_STATS_TX_MSDU_RETRIES,
+       NL80211_TID_STATS_TX_MSDU_FAILED,
+
+       /* keep last */
+       NUM_NL80211_TID_STATS,
+       NL80211_TID_STATS_MAX = NUM_NL80211_TID_STATS - 1
+};
+
+/**
+ * enum nl80211_mpath_flags - nl80211 mesh path flags
+ *
+ * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active
+ * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running
+ * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN
+ * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set
+ * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded
+ */
+enum nl80211_mpath_flags {
+       NL80211_MPATH_FLAG_ACTIVE =     1<<0,
+       NL80211_MPATH_FLAG_RESOLVING =  1<<1,
+       NL80211_MPATH_FLAG_SN_VALID =   1<<2,
+       NL80211_MPATH_FLAG_FIXED =      1<<3,
+       NL80211_MPATH_FLAG_RESOLVED =   1<<4,
+};
+
+/**
+ * enum nl80211_mpath_info - mesh path information
+ *
+ * These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting
+ * information about a mesh path.
+ *
+ * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination
+ * @NL80211_MPATH_INFO_SN: destination sequence number
+ * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path
+ * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now
+ * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in
+ *     &enum nl80211_mpath_flags;
+ * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec
+ * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries
+ * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number
+ *     currently defind
+ * @__NL80211_MPATH_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_mpath_info {
+       __NL80211_MPATH_INFO_INVALID,
+       NL80211_MPATH_INFO_FRAME_QLEN,
+       NL80211_MPATH_INFO_SN,
+       NL80211_MPATH_INFO_METRIC,
+       NL80211_MPATH_INFO_EXPTIME,
+       NL80211_MPATH_INFO_FLAGS,
+       NL80211_MPATH_INFO_DISCOVERY_TIMEOUT,
+       NL80211_MPATH_INFO_DISCOVERY_RETRIES,
+
+       /* keep last */
+       __NL80211_MPATH_INFO_AFTER_LAST,
+       NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_band_attr - band attributes
+ * @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_BAND_ATTR_FREQS: supported frequencies in this band,
+ *     an array of nested frequency attributes
+ * @NL80211_BAND_ATTR_RATES: supported bitrates in this band,
+ *     an array of nested bitrate attributes
+ * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as
+ *     defined in 802.11n
+ * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE
+ * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n
+ * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n
+ * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as
+ *     defined in 802.11ac
+ * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE
+ * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined
+ * @__NL80211_BAND_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_band_attr {
+       __NL80211_BAND_ATTR_INVALID,
+       NL80211_BAND_ATTR_FREQS,
+       NL80211_BAND_ATTR_RATES,
+
+       NL80211_BAND_ATTR_HT_MCS_SET,
+       NL80211_BAND_ATTR_HT_CAPA,
+       NL80211_BAND_ATTR_HT_AMPDU_FACTOR,
+       NL80211_BAND_ATTR_HT_AMPDU_DENSITY,
+
+       NL80211_BAND_ATTR_VHT_MCS_SET,
+       NL80211_BAND_ATTR_VHT_CAPA,
+
+       /* keep last */
+       __NL80211_BAND_ATTR_AFTER_LAST,
+       NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
+};
+
+#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA
+
+/**
+ * enum nl80211_frequency_attr - frequency attributes
+ * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz
+ * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current
+ *     regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_NO_IR: no mechanisms that initiate radiation
+ *     are permitted on this channel, this includes sending probe
+ *     requests, or modes of operation that require beaconing.
+ * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm
+ *     (100 * dBm).
+ * @NL80211_FREQUENCY_ATTR_DFS_STATE: current state for DFS
+ *     (enum nl80211_dfs_state)
+ * @NL80211_FREQUENCY_ATTR_DFS_TIME: time in miliseconds for how long
+ *     this channel is in this DFS state.
+ * @NL80211_FREQUENCY_ATTR_NO_HT40_MINUS: HT40- isn't possible with this
+ *     channel as the control channel
+ * @NL80211_FREQUENCY_ATTR_NO_HT40_PLUS: HT40+ isn't possible with this
+ *     channel as the control channel
+ * @NL80211_FREQUENCY_ATTR_NO_80MHZ: any 80 MHz channel using this channel
+ *     as the primary or any of the secondary channels isn't possible,
+ *     this includes 80+80 channels
+ * @NL80211_FREQUENCY_ATTR_NO_160MHZ: any 160 MHz (but not 80+80) channel
+ *     using this channel as the primary or any of the secondary channels
+ *     isn't possible
+ * @NL80211_FREQUENCY_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds.
+ * @NL80211_FREQUENCY_ATTR_INDOOR_ONLY: Only indoor use is permitted on this
+ *     channel. A channel that has the INDOOR_ONLY attribute can only be
+ *     used when there is a clear assessment that the device is operating in
+ *     an indoor surroundings, i.e., it is connected to AC power (and not
+ *     through portable DC inverters) or is under the control of a master
+ *     that is acting as an AP and is connected to AC power.
+ * @NL80211_FREQUENCY_ATTR_IR_CONCURRENT: IR operation is allowed on this
+ *     channel if it's connected concurrently to a BSS on the same channel on
+ *     the 2 GHz band or to a channel in the same UNII band (on the 5 GHz
+ *     band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO or TDLS
+ *     off-channel on a channel that has the IR_CONCURRENT attribute set can be
+ *     done when there is a clear assessment that the device is operating under
+ *     the guidance of an authorized master, i.e., setting up a GO or TDLS
+ *     off-channel while the device is also connected to an AP with DFS and
+ *     radar detection on the UNII band (it is up to user-space, i.e.,
+ *     wpa_supplicant to perform the required verifications). Using this
+ *     attribute for IR is disallowed for master interfaces (IBSS, AP).
+ * @NL80211_FREQUENCY_ATTR_NO_20MHZ: 20 MHz operation is not allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
+ *     currently defined
+ * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
+ *
+ * See https://apps.fcc.gov/eas/comments/GetPublishedDocument.html?id=327&tn=528122
+ * for more information on the FCC description of the relaxations allowed
+ * by NL80211_FREQUENCY_ATTR_INDOOR_ONLY and
+ * NL80211_FREQUENCY_ATTR_IR_CONCURRENT.
+ */
+enum nl80211_frequency_attr {
+       __NL80211_FREQUENCY_ATTR_INVALID,
+       NL80211_FREQUENCY_ATTR_FREQ,
+       NL80211_FREQUENCY_ATTR_DISABLED,
+       NL80211_FREQUENCY_ATTR_NO_IR,
+       __NL80211_FREQUENCY_ATTR_NO_IBSS,
+       NL80211_FREQUENCY_ATTR_RADAR,
+       NL80211_FREQUENCY_ATTR_MAX_TX_POWER,
+       NL80211_FREQUENCY_ATTR_DFS_STATE,
+       NL80211_FREQUENCY_ATTR_DFS_TIME,
+       NL80211_FREQUENCY_ATTR_NO_HT40_MINUS,
+       NL80211_FREQUENCY_ATTR_NO_HT40_PLUS,
+       NL80211_FREQUENCY_ATTR_NO_80MHZ,
+       NL80211_FREQUENCY_ATTR_NO_160MHZ,
+       NL80211_FREQUENCY_ATTR_DFS_CAC_TIME,
+       NL80211_FREQUENCY_ATTR_INDOOR_ONLY,
+       NL80211_FREQUENCY_ATTR_IR_CONCURRENT,
+       NL80211_FREQUENCY_ATTR_NO_20MHZ,
+       NL80211_FREQUENCY_ATTR_NO_10MHZ,
+
+       /* keep last */
+       __NL80211_FREQUENCY_ATTR_AFTER_LAST,
+       NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1
+};
+
+#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER
+#define NL80211_FREQUENCY_ATTR_PASSIVE_SCAN    NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_NO_IBSS         NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_NO_IR           NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_GO_CONCURRENT \
+                                       NL80211_FREQUENCY_ATTR_IR_CONCURRENT
+
+/**
+ * enum nl80211_bitrate_attr - bitrate attributes
+ * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps
+ * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported
+ *     in 2.4 GHz band.
+ * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number
+ *     currently defined
+ * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_bitrate_attr {
+       __NL80211_BITRATE_ATTR_INVALID,
+       NL80211_BITRATE_ATTR_RATE,
+       NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE,
+
+       /* keep last */
+       __NL80211_BITRATE_ATTR_AFTER_LAST,
+       NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_initiator - Indicates the initiator of a reg domain request
+ * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world
+ *     regulatory domain.
+ * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the
+ *     regulatory domain.
+ * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the
+ *     wireless core it thinks its knows the regulatory domain we should be in.
+ * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
+ *     802.11 country information element with regulatory information it
+ *     thinks we should consider. cfg80211 only processes the country
+ *     code from the IE, and relies on the regulatory domain information
+ *     structure passed by userspace (CRDA) from our wireless-regdb.
+ *     If a channel is enabled but the country code indicates it should
+ *     be disabled we disable the channel and re-enable it upon disassociation.
+ */
+enum nl80211_reg_initiator {
+       NL80211_REGDOM_SET_BY_CORE,
+       NL80211_REGDOM_SET_BY_USER,
+       NL80211_REGDOM_SET_BY_DRIVER,
+       NL80211_REGDOM_SET_BY_COUNTRY_IE,
+};
+
+/**
+ * enum nl80211_reg_type - specifies the type of regulatory domain
+ * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains
+ *     to a specific country. When this is set you can count on the
+ *     ISO / IEC 3166 alpha2 country code being valid.
+ * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory
+ *     domain.
+ * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom
+ *     driver specific world regulatory domain. These do not apply system-wide
+ *     and are only applicable to the individual devices which have requested
+ *     them to be applied.
+ * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product
+ *     of an intersection between two regulatory domains -- the previously
+ *     set regulatory domain on the system and the last accepted regulatory
+ *     domain request to be processed.
+ */
+enum nl80211_reg_type {
+       NL80211_REGDOM_TYPE_COUNTRY,
+       NL80211_REGDOM_TYPE_WORLD,
+       NL80211_REGDOM_TYPE_CUSTOM_WORLD,
+       NL80211_REGDOM_TYPE_INTERSECTION,
+};
+
+/**
+ * enum nl80211_reg_rule_attr - regulatory rule attributes
+ * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional
+ *     considerations for a given frequency range. These are the
+ *     &enum nl80211_reg_rule_flags.
+ * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory
+ *     rule in KHz. This is not a center of frequency but an actual regulatory
+ *     band edge.
+ * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule
+ *     in KHz. This is not a center a frequency but an actual regulatory
+ *     band edge.
+ * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this
+ *     frequency range, in KHz.
+ * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain
+ *     for a given frequency range. The value is in mBi (100 * dBi).
+ *     If you don't have one then don't send this.
+ * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for
+ *     a given frequency range. The value is in mBm (100 * dBm).
+ * @NL80211_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds.
+ *     If not present or 0 default CAC time will be used.
+ * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number
+ *     currently defined
+ * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_reg_rule_attr {
+       __NL80211_REG_RULE_ATTR_INVALID,
+       NL80211_ATTR_REG_RULE_FLAGS,
+
+       NL80211_ATTR_FREQ_RANGE_START,
+       NL80211_ATTR_FREQ_RANGE_END,
+       NL80211_ATTR_FREQ_RANGE_MAX_BW,
+
+       NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN,
+       NL80211_ATTR_POWER_RULE_MAX_EIRP,
+
+       NL80211_ATTR_DFS_CAC_TIME,
+
+       /* keep last */
+       __NL80211_REG_RULE_ATTR_AFTER_LAST,
+       NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sched_scan_match_attr - scheduled scan match attributes
+ * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching,
+ *     only report BSS with matching SSID.
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a
+ *     BSS in scan results. Filtering is turned off if not specified. Note that
+ *     if this attribute is in a match set of its own, then it is treated as
+ *     the default value for all matchsets with an SSID, rather than being a
+ *     matchset of its own without an RSSI filter. This is due to problems with
+ *     how this API was implemented in the past. Also, due to the same problem,
+ *     the only way to create a matchset with only an RSSI filter (with this
+ *     attribute) is if there's only a single matchset with the RSSI attribute.
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
+ *     attribute number currently defined
+ * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_sched_scan_match_attr {
+       __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID,
+
+       NL80211_SCHED_SCAN_MATCH_ATTR_SSID,
+       NL80211_SCHED_SCAN_MATCH_ATTR_RSSI,
+
+       /* keep last */
+       __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST,
+       NL80211_SCHED_SCAN_MATCH_ATTR_MAX =
+               __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1
+};
+
+/* only for backward compatibility */
+#define NL80211_ATTR_SCHED_SCAN_MATCH_SSID NL80211_SCHED_SCAN_MATCH_ATTR_SSID
+
+/**
+ * enum nl80211_reg_rule_flags - regulatory rule flags
+ *
+ * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed
+ * @NL80211_RRF_NO_CCK: CCK modulation not allowed
+ * @NL80211_RRF_NO_INDOOR: indoor operation not allowed
+ * @NL80211_RRF_NO_OUTDOOR: outdoor operation not allowed
+ * @NL80211_RRF_DFS: DFS support is required to be used
+ * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links
+ * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links
+ * @NL80211_RRF_NO_IR: no mechanisms that initiate radiation are allowed,
+ *     this includes probe requests or modes of operation that require
+ *     beaconing.
+ * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated
+ *     base on contiguous rules and wider channels will be allowed to cross
+ *     multiple contiguous/overlapping frequency ranges.
+ * @NL80211_RRF_IR_CONCURRENT: See &NL80211_FREQUENCY_ATTR_IR_CONCURRENT
+ * @NL80211_RRF_NO_HT40MINUS: channels can't be used in HT40- operation
+ * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation
+ * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed
+ * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed
+ */
+enum nl80211_reg_rule_flags {
+       NL80211_RRF_NO_OFDM             = 1<<0,
+       NL80211_RRF_NO_CCK              = 1<<1,
+       NL80211_RRF_NO_INDOOR           = 1<<2,
+       NL80211_RRF_NO_OUTDOOR          = 1<<3,
+       NL80211_RRF_DFS                 = 1<<4,
+       NL80211_RRF_PTP_ONLY            = 1<<5,
+       NL80211_RRF_PTMP_ONLY           = 1<<6,
+       NL80211_RRF_NO_IR               = 1<<7,
+       __NL80211_RRF_NO_IBSS           = 1<<8,
+       NL80211_RRF_AUTO_BW             = 1<<11,
+       NL80211_RRF_IR_CONCURRENT       = 1<<12,
+       NL80211_RRF_NO_HT40MINUS        = 1<<13,
+       NL80211_RRF_NO_HT40PLUS         = 1<<14,
+       NL80211_RRF_NO_80MHZ            = 1<<15,
+       NL80211_RRF_NO_160MHZ           = 1<<16,
+};
+
+#define NL80211_RRF_PASSIVE_SCAN       NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_IBSS            NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_IR              NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_HT40            (NL80211_RRF_NO_HT40MINUS |\
+                                        NL80211_RRF_NO_HT40PLUS)
+#define NL80211_RRF_GO_CONCURRENT      NL80211_RRF_IR_CONCURRENT
+
+/* For backport compatibility with older userspace */
+#define NL80211_RRF_NO_IR_ALL          (NL80211_RRF_NO_IR | __NL80211_RRF_NO_IBSS)
+
+/**
+ * enum nl80211_dfs_regions - regulatory DFS regions
+ *
+ * @NL80211_DFS_UNSET: Country has no DFS master region specified
+ * @NL80211_DFS_FCC: Country follows DFS master rules from FCC
+ * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI
+ * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec
+ */
+enum nl80211_dfs_regions {
+       NL80211_DFS_UNSET       = 0,
+       NL80211_DFS_FCC         = 1,
+       NL80211_DFS_ETSI        = 2,
+       NL80211_DFS_JP          = 3,
+};
+
+/**
+ * enum nl80211_user_reg_hint_type - type of user regulatory hint
+ *
+ * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always
+ *     assumed if the attribute is not set.
+ * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular
+ *     base station. Device drivers that have been tested to work
+ *     properly to support this type of hint can enable these hints
+ *     by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature
+ *     capability on the struct wiphy. The wireless core will
+ *     ignore all cell base station hints until at least one device
+ *     present has been registered with the wireless core that
+ *     has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a
+ *     supported feature.
+ * @NL80211_USER_REG_HINT_INDOOR: a user sent an hint indicating that the
+ *     platform is operating in an indoor environment.
+ */
+enum nl80211_user_reg_hint_type {
+       NL80211_USER_REG_HINT_USER      = 0,
+       NL80211_USER_REG_HINT_CELL_BASE = 1,
+       NL80211_USER_REG_HINT_INDOOR    = 2,
+};
+
+/**
+ * enum nl80211_survey_info - survey information
+ *
+ * These attribute types are used with %NL80211_ATTR_SURVEY_INFO
+ * when getting information about a survey.
+ *
+ * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel
+ * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm)
+ * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used
+ * @NL80211_SURVEY_INFO_TIME: amount of time (in ms) that the radio
+ *     was turned on (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_BUSY: amount of the time the primary
+ *     channel was sensed busy (either due to activity or energy detect)
+ * @NL80211_SURVEY_INFO_TIME_EXT_BUSY: amount of time the extension
+ *     channel was sensed busy
+ * @NL80211_SURVEY_INFO_TIME_RX: amount of time the radio spent
+ *     receiving data (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_TX: amount of time the radio spent
+ *     transmitting data (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_SCAN: time the radio spent for scan
+ *     (on this channel or globally)
+ * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number
+ *     currently defined
+ * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_survey_info {
+       __NL80211_SURVEY_INFO_INVALID,
+       NL80211_SURVEY_INFO_FREQUENCY,
+       NL80211_SURVEY_INFO_NOISE,
+       NL80211_SURVEY_INFO_IN_USE,
+       NL80211_SURVEY_INFO_TIME,
+       NL80211_SURVEY_INFO_TIME_BUSY,
+       NL80211_SURVEY_INFO_TIME_EXT_BUSY,
+       NL80211_SURVEY_INFO_TIME_RX,
+       NL80211_SURVEY_INFO_TIME_TX,
+       NL80211_SURVEY_INFO_TIME_SCAN,
+
+       /* keep last */
+       __NL80211_SURVEY_INFO_AFTER_LAST,
+       NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1
+};
+
+/* keep old names for compatibility */
+#define NL80211_SURVEY_INFO_CHANNEL_TIME               NL80211_SURVEY_INFO_TIME
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY          NL80211_SURVEY_INFO_TIME_BUSY
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY      NL80211_SURVEY_INFO_TIME_EXT_BUSY
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_RX            NL80211_SURVEY_INFO_TIME_RX
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_TX            NL80211_SURVEY_INFO_TIME_TX
+
+/**
+ * enum nl80211_mntr_flags - monitor configuration flags
+ *
+ * Monitor configuration flags.
+ *
+ * @__NL80211_MNTR_FLAG_INVALID: reserved
+ *
+ * @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS
+ * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP
+ * @NL80211_MNTR_FLAG_CONTROL: pass control frames
+ * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering
+ * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing.
+ *     overrides all other flags.
+ * @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address
+ *     and ACK incoming unicast packets.
+ *
+ * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use
+ * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag
+ */
+enum nl80211_mntr_flags {
+       __NL80211_MNTR_FLAG_INVALID,
+       NL80211_MNTR_FLAG_FCSFAIL,
+       NL80211_MNTR_FLAG_PLCPFAIL,
+       NL80211_MNTR_FLAG_CONTROL,
+       NL80211_MNTR_FLAG_OTHER_BSS,
+       NL80211_MNTR_FLAG_COOK_FRAMES,
+       NL80211_MNTR_FLAG_ACTIVE,
+
+       /* keep last */
+       __NL80211_MNTR_FLAG_AFTER_LAST,
+       NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_mesh_power_mode - mesh power save modes
+ *
+ * @NL80211_MESH_POWER_UNKNOWN: The mesh power mode of the mesh STA is
+ *     not known or has not been set yet.
+ * @NL80211_MESH_POWER_ACTIVE: Active mesh power mode. The mesh STA is
+ *     in Awake state all the time.
+ * @NL80211_MESH_POWER_LIGHT_SLEEP: Light sleep mode. The mesh STA will
+ *     alternate between Active and Doze states, but will wake up for
+ *     neighbor's beacons.
+ * @NL80211_MESH_POWER_DEEP_SLEEP: Deep sleep mode. The mesh STA will
+ *     alternate between Active and Doze states, but may not wake up
+ *     for neighbor's beacons.
+ *
+ * @__NL80211_MESH_POWER_AFTER_LAST - internal use
+ * @NL80211_MESH_POWER_MAX - highest possible power save level
+ */
+
+enum nl80211_mesh_power_mode {
+       NL80211_MESH_POWER_UNKNOWN,
+       NL80211_MESH_POWER_ACTIVE,
+       NL80211_MESH_POWER_LIGHT_SLEEP,
+       NL80211_MESH_POWER_DEEP_SLEEP,
+
+       __NL80211_MESH_POWER_AFTER_LAST,
+       NL80211_MESH_POWER_MAX = __NL80211_MESH_POWER_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_meshconf_params - mesh configuration parameters
+ *
+ * Mesh configuration parameters. These can be changed while the mesh is
+ * active.
+ *
+ * @__NL80211_MESHCONF_INVALID: internal use
+ *
+ * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in
+ *     millisecond units, used by the Peer Link Open message
+ *
+ * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in
+ *     millisecond units, used by the peer link management to close a peer link
+ *
+ * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in
+ *     millisecond units
+ *
+ * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed
+ *     on this mesh interface
+ *
+ * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link
+ *     open retries that can be sent to establish a new peer link instance in a
+ *     mesh
+ *
+ * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh
+ *     point.
+ *
+ * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically open
+ *     peer links when we detect compatible mesh peers. Disabled if
+ *     @NL80211_MESH_SETUP_USERSPACE_MPM or @NL80211_MESH_SETUP_USERSPACE_AMPE are
+ *     set.
+ *
+ * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames
+ *     containing a PREQ that an MP can send to a particular destination (path
+ *     target)
+ *
+ * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths
+ *     (in milliseconds)
+ *
+ * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait
+ *     until giving up on a path discovery (in milliseconds)
+ *
+ * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh
+ *     points receiving a PREQ shall consider the forwarding information from
+ *     the root to be valid. (TU = time unit)
+ *
+ * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in
+ *     TUs) during which an MP can send only one action frame containing a PREQ
+ *     reference element
+ *
+ * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)
+ *     that it takes for an HWMP information element to propagate across the
+ *     mesh
+ *
+ * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not
+ *
+ * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
+ *     source mesh point for path selection elements.
+ *
+ * @NL80211_MESHCONF_HWMP_RANN_INTERVAL:  The interval of time (in TUs) between
+ *     root announcements are transmitted.
+ *
+ * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has
+ *     access to a broader network beyond the MBSS.  This is done via Root
+ *     Announcement frames.
+ *
+ * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in
+ *     TUs) during which a mesh STA can send only one Action frame containing a
+ *     PERR element.
+ *
+ * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding
+ *     or forwarding entity (default is TRUE - forwarding entity)
+ *
+ * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the
+ *     threshold for average signal strength of candidate station to establish
+ *     a peer link.
+ *
+ * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors
+ *     to synchronize to for 11s default synchronization method
+ *     (see 11C.12.2.2)
+ *
+ * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode.
+ *
+ * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
+ *
+ * @NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: The time (in TUs) for
+ *     which mesh STAs receiving a proactive PREQ shall consider the forwarding
+ *     information to the root mesh STA to be valid.
+ *
+ * @NL80211_MESHCONF_HWMP_ROOT_INTERVAL: The interval of time (in TUs) between
+ *     proactive PREQs are transmitted.
+ *
+ * @NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: The minimum interval of time
+ *     (in TUs) during which a mesh STA can send only one Action frame
+ *     containing a PREQ element for root path confirmation.
+ *
+ * @NL80211_MESHCONF_POWER_MODE: Default mesh power mode for new peer links.
+ *     type &enum nl80211_mesh_power_mode (u32)
+ *
+ * @NL80211_MESHCONF_AWAKE_WINDOW: awake window duration (in TUs)
+ *
+ * @NL80211_MESHCONF_PLINK_TIMEOUT: If no tx activity is seen from a STA we've
+ *     established peering with for longer than this time (in seconds), then
+ *     remove it from the STA's list of peers. You may set this to 0 to disable
+ *     the removal of the STA. Default is 30 minutes.
+ *
+ * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_meshconf_params {
+       __NL80211_MESHCONF_INVALID,
+       NL80211_MESHCONF_RETRY_TIMEOUT,
+       NL80211_MESHCONF_CONFIRM_TIMEOUT,
+       NL80211_MESHCONF_HOLDING_TIMEOUT,
+       NL80211_MESHCONF_MAX_PEER_LINKS,
+       NL80211_MESHCONF_MAX_RETRIES,
+       NL80211_MESHCONF_TTL,
+       NL80211_MESHCONF_AUTO_OPEN_PLINKS,
+       NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES,
+       NL80211_MESHCONF_PATH_REFRESH_TIME,
+       NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT,
+       NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT,
+       NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
+       NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
+       NL80211_MESHCONF_HWMP_ROOTMODE,
+       NL80211_MESHCONF_ELEMENT_TTL,
+       NL80211_MESHCONF_HWMP_RANN_INTERVAL,
+       NL80211_MESHCONF_GATE_ANNOUNCEMENTS,
+       NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL,
+       NL80211_MESHCONF_FORWARDING,
+       NL80211_MESHCONF_RSSI_THRESHOLD,
+       NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR,
+       NL80211_MESHCONF_HT_OPMODE,
+       NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT,
+       NL80211_MESHCONF_HWMP_ROOT_INTERVAL,
+       NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL,
+       NL80211_MESHCONF_POWER_MODE,
+       NL80211_MESHCONF_AWAKE_WINDOW,
+       NL80211_MESHCONF_PLINK_TIMEOUT,
+
+       /* keep last */
+       __NL80211_MESHCONF_ATTR_AFTER_LAST,
+       NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_mesh_setup_params - mesh setup parameters
+ *
+ * Mesh setup parameters.  These are used to start/join a mesh and cannot be
+ * changed while the mesh is active.
+ *
+ * @__NL80211_MESH_SETUP_INVALID: Internal use
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a
+ *     vendor specific path selection algorithm or disable it to use the
+ *     default HWMP.
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a
+ *     vendor specific path metric or disable it to use the default Airtime
+ *     metric.
+ *
+ * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a
+ *     robust security network ie, or a vendor specific information element
+ *     that vendors will use to identify the path selection methods and
+ *     metrics in use.
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication
+ *     daemon will be authenticating mesh candidates.
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication
+ *     daemon will be securing peer link frames.  AMPE is a secured version of
+ *     Mesh Peering Management (MPM) and is implemented with the assistance of
+ *     a userspace daemon.  When this flag is set, the kernel will send peer
+ *     management frames to a userspace daemon that will implement AMPE
+ *     functionality (security capabilities selection, key confirmation, and
+ *     key management).  When the flag is unset (default), the kernel can
+ *     autonomously complete (unsecured) mesh peering without the need of a
+ *     userspace daemon.
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a
+ *     vendor specific synchronization method or disable it to use the default
+ *     neighbor offset synchronization
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_MPM: Enable this option if userspace will
+ *     implement an MPM which handles peer allocation and state.
+ *
+ * @NL80211_MESH_SETUP_AUTH_PROTOCOL: Inform the kernel of the authentication
+ *     method (u8, as defined in IEEE 8.4.2.100.6, e.g. 0x1 for SAE).
+ *     Default is no authentication method required.
+ *
+ * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
+ *
+ * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
+ */
+enum nl80211_mesh_setup_params {
+       __NL80211_MESH_SETUP_INVALID,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
+       NL80211_MESH_SETUP_IE,
+       NL80211_MESH_SETUP_USERSPACE_AUTH,
+       NL80211_MESH_SETUP_USERSPACE_AMPE,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC,
+       NL80211_MESH_SETUP_USERSPACE_MPM,
+       NL80211_MESH_SETUP_AUTH_PROTOCOL,
+
+       /* keep last */
+       __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
+       NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_txq_attr - TX queue parameter attributes
+ * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved
+ * @NL80211_TXQ_ATTR_AC: AC identifier (NL80211_AC_*)
+ * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning
+ *     disabled
+ * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form
+ *     2^n-1 in the range 1..32767]
+ * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form
+ *     2^n-1 in the range 1..32767]
+ * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255]
+ * @__NL80211_TXQ_ATTR_AFTER_LAST: Internal
+ * @NL80211_TXQ_ATTR_MAX: Maximum TXQ attribute number
+ */
+enum nl80211_txq_attr {
+       __NL80211_TXQ_ATTR_INVALID,
+       NL80211_TXQ_ATTR_AC,
+       NL80211_TXQ_ATTR_TXOP,
+       NL80211_TXQ_ATTR_CWMIN,
+       NL80211_TXQ_ATTR_CWMAX,
+       NL80211_TXQ_ATTR_AIFS,
+
+       /* keep last */
+       __NL80211_TXQ_ATTR_AFTER_LAST,
+       NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1
+};
+
+enum nl80211_ac {
+       NL80211_AC_VO,
+       NL80211_AC_VI,
+       NL80211_AC_BE,
+       NL80211_AC_BK,
+       NL80211_NUM_ACS
+};
+
+/* backward compat */
+#define NL80211_TXQ_ATTR_QUEUE NL80211_TXQ_ATTR_AC
+#define NL80211_TXQ_Q_VO       NL80211_AC_VO
+#define NL80211_TXQ_Q_VI       NL80211_AC_VI
+#define NL80211_TXQ_Q_BE       NL80211_AC_BE
+#define NL80211_TXQ_Q_BK       NL80211_AC_BK
+
+/**
+ * enum nl80211_channel_type - channel type
+ * @NL80211_CHAN_NO_HT: 20 MHz, non-HT channel
+ * @NL80211_CHAN_HT20: 20 MHz HT channel
+ * @NL80211_CHAN_HT40MINUS: HT40 channel, secondary channel
+ *     below the control channel
+ * @NL80211_CHAN_HT40PLUS: HT40 channel, secondary channel
+ *     above the control channel
+ */
+enum nl80211_channel_type {
+       NL80211_CHAN_NO_HT,
+       NL80211_CHAN_HT20,
+       NL80211_CHAN_HT40MINUS,
+       NL80211_CHAN_HT40PLUS
+};
+
+/**
+ * enum nl80211_chan_width - channel width definitions
+ *
+ * These values are used with the %NL80211_ATTR_CHANNEL_WIDTH
+ * attribute.
+ *
+ * @NL80211_CHAN_WIDTH_20_NOHT: 20 MHz, non-HT channel
+ * @NL80211_CHAN_WIDTH_20: 20 MHz HT channel
+ * @NL80211_CHAN_WIDTH_40: 40 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_80: 80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_80P80: 80+80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     and %NL80211_ATTR_CENTER_FREQ2 attributes must be provided as well
+ * @NL80211_CHAN_WIDTH_160: 160 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_5: 5 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_10: 10 MHz OFDM channel
+ */
+enum nl80211_chan_width {
+       NL80211_CHAN_WIDTH_20_NOHT,
+       NL80211_CHAN_WIDTH_20,
+       NL80211_CHAN_WIDTH_40,
+       NL80211_CHAN_WIDTH_80,
+       NL80211_CHAN_WIDTH_80P80,
+       NL80211_CHAN_WIDTH_160,
+       NL80211_CHAN_WIDTH_5,
+       NL80211_CHAN_WIDTH_10,
+};
+
+/**
+ * enum nl80211_bss_scan_width - control channel width for a BSS
+ *
+ * These values are used with the %NL80211_BSS_CHAN_WIDTH attribute.
+ *
+ * @NL80211_BSS_CHAN_WIDTH_20: control channel is 20 MHz wide or compatible
+ * @NL80211_BSS_CHAN_WIDTH_10: control channel is 10 MHz wide
+ * @NL80211_BSS_CHAN_WIDTH_5: control channel is 5 MHz wide
+ */
+enum nl80211_bss_scan_width {
+       NL80211_BSS_CHAN_WIDTH_20,
+       NL80211_BSS_CHAN_WIDTH_10,
+       NL80211_BSS_CHAN_WIDTH_5,
+};
+
+/**
+ * enum nl80211_bss - netlink attributes for a BSS
+ *
+ * @__NL80211_BSS_INVALID: invalid
+ * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets)
+ * @NL80211_BSS_FREQUENCY: frequency in MHz (u32)
+ * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64)
+ *     (if @NL80211_BSS_PRESP_DATA is present then this is known to be
+ *     from a probe response, otherwise it may be from the same beacon
+ *     that the NL80211_BSS_BEACON_TSF will be from)
+ * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16)
+ * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16)
+ * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the
+ *     raw information elements from the probe response/beacon (bin);
+ *     if the %NL80211_BSS_BEACON_IES attribute is present and the data is
+ *     different then the IEs here are from a Probe Response frame; otherwise
+ *     they are from a Beacon frame.
+ *     However, if the driver does not indicate the source of the IEs, these
+ *     IEs may be from either frame subtype.
+ *     If present, the @NL80211_BSS_PRESP_DATA attribute indicates that the
+ *     data here is known to be from a probe response, without any heuristics.
+ * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon
+ *     in mBm (100 * dBm) (s32)
+ * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
+ *     in unspecified units, scaled to 0..100 (u8)
+ * @NL80211_BSS_STATUS: status, if this BSS is "used"
+ * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms
+ * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information
+ *     elements from a Beacon frame (bin); not present if no Beacon frame has
+ *     yet been received
+ * @NL80211_BSS_CHAN_WIDTH: channel width of the control channel
+ *     (u32, enum nl80211_bss_scan_width)
+ * @NL80211_BSS_BEACON_TSF: TSF of the last received beacon (u64)
+ *     (not present if no beacon frame has been received yet)
+ * @NL80211_BSS_PRESP_DATA: the data in @NL80211_BSS_INFORMATION_ELEMENTS and
+ *     @NL80211_BSS_TSF is known to be from a probe response (flag attribute)
+ * @NL80211_BSS_LAST_SEEN_BOOTTIME: CLOCK_BOOTTIME timestamp when this entry
+ *     was last updated by a received frame. The value is expected to be
+ *     accurate to about 10ms. (u64, nanoseconds)
+ * @__NL80211_BSS_AFTER_LAST: internal
+ * @NL80211_BSS_MAX: highest BSS attribute
+ */
+enum nl80211_bss {
+       __NL80211_BSS_INVALID,
+       NL80211_BSS_BSSID,
+       NL80211_BSS_FREQUENCY,
+       NL80211_BSS_TSF,
+       NL80211_BSS_BEACON_INTERVAL,
+       NL80211_BSS_CAPABILITY,
+       NL80211_BSS_INFORMATION_ELEMENTS,
+       NL80211_BSS_SIGNAL_MBM,
+       NL80211_BSS_SIGNAL_UNSPEC,
+       NL80211_BSS_STATUS,
+       NL80211_BSS_SEEN_MS_AGO,
+       NL80211_BSS_BEACON_IES,
+       NL80211_BSS_CHAN_WIDTH,
+       NL80211_BSS_BEACON_TSF,
+       NL80211_BSS_PRESP_DATA,
+       NL80211_BSS_LAST_SEEN_BOOTTIME,
+
+       /* keep last */
+       __NL80211_BSS_AFTER_LAST,
+       NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_bss_status - BSS "status"
+ * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS.
+ *     Note that this is no longer used since cfg80211 no longer
+ *     keeps track of whether or not authentication was done with
+ *     a given BSS.
+ * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS.
+ * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS.
+ *
+ * The BSS status is a BSS attribute in scan dumps, which
+ * indicates the status the interface has wrt. this BSS.
+ */
+enum nl80211_bss_status {
+       NL80211_BSS_STATUS_AUTHENTICATED,
+       NL80211_BSS_STATUS_ASSOCIATED,
+       NL80211_BSS_STATUS_IBSS_JOINED,
+};
+
+/**
+ * enum nl80211_auth_type - AuthenticationType
+ *
+ * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication
+ * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only)
+ * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r)
+ * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP)
+ * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals
+ * @__NL80211_AUTHTYPE_NUM: internal
+ * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm
+ * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by
+ *     trying multiple times); this is invalid in netlink -- leave out
+ *     the attribute for this on CONNECT commands.
+ */
+enum nl80211_auth_type {
+       NL80211_AUTHTYPE_OPEN_SYSTEM,
+       NL80211_AUTHTYPE_SHARED_KEY,
+       NL80211_AUTHTYPE_FT,
+       NL80211_AUTHTYPE_NETWORK_EAP,
+       NL80211_AUTHTYPE_SAE,
+
+       /* keep last */
+       __NL80211_AUTHTYPE_NUM,
+       NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1,
+       NL80211_AUTHTYPE_AUTOMATIC
+};
+
+/**
+ * enum nl80211_key_type - Key Type
+ * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key
+ * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key
+ * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS)
+ * @NUM_NL80211_KEYTYPES: number of defined key types
+ */
+enum nl80211_key_type {
+       NL80211_KEYTYPE_GROUP,
+       NL80211_KEYTYPE_PAIRWISE,
+       NL80211_KEYTYPE_PEERKEY,
+
+       NUM_NL80211_KEYTYPES
+};
+
+/**
+ * enum nl80211_mfp - Management frame protection state
+ * @NL80211_MFP_NO: Management frame protection not used
+ * @NL80211_MFP_REQUIRED: Management frame protection required
+ */
+enum nl80211_mfp {
+       NL80211_MFP_NO,
+       NL80211_MFP_REQUIRED,
+};
+
+enum nl80211_wpa_versions {
+       NL80211_WPA_VERSION_1 = 1 << 0,
+       NL80211_WPA_VERSION_2 = 1 << 1,
+};
+
+/**
+ * enum nl80211_key_default_types - key default types
+ * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid
+ * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default
+ *     unicast key
+ * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default
+ *     multicast key
+ * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types
+ */
+enum nl80211_key_default_types {
+       __NL80211_KEY_DEFAULT_TYPE_INVALID,
+       NL80211_KEY_DEFAULT_TYPE_UNICAST,
+       NL80211_KEY_DEFAULT_TYPE_MULTICAST,
+
+       NUM_NL80211_KEY_DEFAULT_TYPES
+};
+
+/**
+ * enum nl80211_key_attributes - key attributes
+ * @__NL80211_KEY_INVALID: invalid
+ * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of
+ *     16 bytes encryption key followed by 8 bytes each for TX and RX MIC
+ *     keys
+ * @NL80211_KEY_IDX: key ID (u8, 0-3)
+ * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
+ *     section 7.3.2.25.1, e.g. 0x000FAC04)
+ * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
+ *     CCMP keys, each six bytes in little endian
+ * @NL80211_KEY_DEFAULT: flag indicating default key
+ * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key
+ * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not
+ *     specified the default depends on whether a MAC address was
+ *     given with the command using the key or not (u32)
+ * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
+ *     attributes, specifying what a key should be set as default as.
+ *     See &enum nl80211_key_default_types.
+ * @__NL80211_KEY_AFTER_LAST: internal
+ * @NL80211_KEY_MAX: highest key attribute
+ */
+enum nl80211_key_attributes {
+       __NL80211_KEY_INVALID,
+       NL80211_KEY_DATA,
+       NL80211_KEY_IDX,
+       NL80211_KEY_CIPHER,
+       NL80211_KEY_SEQ,
+       NL80211_KEY_DEFAULT,
+       NL80211_KEY_DEFAULT_MGMT,
+       NL80211_KEY_TYPE,
+       NL80211_KEY_DEFAULT_TYPES,
+
+       /* keep last */
+       __NL80211_KEY_AFTER_LAST,
+       NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_tx_rate_attributes - TX rate set attributes
+ * @__NL80211_TXRATE_INVALID: invalid
+ * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection
+ *     in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with
+ *     1 = 500 kbps) but without the IE length restriction (at most
+ *     %NL80211_MAX_SUPP_RATES in a single array).
+ * @NL80211_TXRATE_HT: HT (MCS) rates allowed for TX rate selection
+ *     in an array of MCS numbers.
+ * @NL80211_TXRATE_VHT: VHT rates allowed for TX rate selection,
+ *     see &struct nl80211_txrate_vht
+ * @NL80211_TXRATE_GI: configure GI, see &enum nl80211_txrate_gi
+ * @__NL80211_TXRATE_AFTER_LAST: internal
+ * @NL80211_TXRATE_MAX: highest TX rate attribute
+ */
+enum nl80211_tx_rate_attributes {
+       __NL80211_TXRATE_INVALID,
+       NL80211_TXRATE_LEGACY,
+       NL80211_TXRATE_HT,
+       NL80211_TXRATE_VHT,
+       NL80211_TXRATE_GI,
+
+       /* keep last */
+       __NL80211_TXRATE_AFTER_LAST,
+       NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1
+};
+
+#define NL80211_TXRATE_MCS NL80211_TXRATE_HT
+#define NL80211_VHT_NSS_MAX            8
+
+/**
+ * struct nl80211_txrate_vht - VHT MCS/NSS txrate bitmap
+ * @mcs: MCS bitmap table for each NSS (array index 0 for 1 stream, etc.)
+ */
+struct nl80211_txrate_vht {
+       __u16 mcs[NL80211_VHT_NSS_MAX];
+};
+
+enum nl80211_txrate_gi {
+       NL80211_TXRATE_DEFAULT_GI,
+       NL80211_TXRATE_FORCE_SGI,
+       NL80211_TXRATE_FORCE_LGI,
+};
+
+/**
+ * enum nl80211_band - Frequency band
+ * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
+ * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
+ * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
+ */
+enum nl80211_band {
+       NL80211_BAND_2GHZ,
+       NL80211_BAND_5GHZ,
+       NL80211_BAND_60GHZ,
+};
+
+/**
+ * enum nl80211_ps_state - powersave state
+ * @NL80211_PS_DISABLED: powersave is disabled
+ * @NL80211_PS_ENABLED: powersave is enabled
+ */
+enum nl80211_ps_state {
+       NL80211_PS_DISABLED,
+       NL80211_PS_ENABLED,
+};
+
+/**
+ * enum nl80211_attr_cqm - connection quality monitor attributes
+ * @__NL80211_ATTR_CQM_INVALID: invalid
+ * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies
+ *     the threshold for the RSSI level at which an event will be sent. Zero
+ *     to disable.
+ * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies
+ *     the minimum amount the RSSI level must change after an event before a
+ *     new event may be issued (to reduce effects of RSSI oscillation).
+ * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event
+ * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many
+ *     consecutive packets were not acknowledged by the peer
+ * @NL80211_ATTR_CQM_TXE_RATE: TX error rate in %. Minimum % of TX failures
+ *     during the given %NL80211_ATTR_CQM_TXE_INTVL before an
+ *     %NL80211_CMD_NOTIFY_CQM with reported %NL80211_ATTR_CQM_TXE_RATE and
+ *     %NL80211_ATTR_CQM_TXE_PKTS is generated.
+ * @NL80211_ATTR_CQM_TXE_PKTS: number of attempted packets in a given
+ *     %NL80211_ATTR_CQM_TXE_INTVL before %NL80211_ATTR_CQM_TXE_RATE is
+ *     checked.
+ * @NL80211_ATTR_CQM_TXE_INTVL: interval in seconds. Specifies the periodic
+ *     interval in which %NL80211_ATTR_CQM_TXE_PKTS and
+ *     %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an
+ *     %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting.
+ * @NL80211_ATTR_CQM_BEACON_LOSS_EVENT: flag attribute that's set in a beacon
+ *     loss event
+ * @__NL80211_ATTR_CQM_AFTER_LAST: internal
+ * @NL80211_ATTR_CQM_MAX: highest key attribute
+ */
+enum nl80211_attr_cqm {
+       __NL80211_ATTR_CQM_INVALID,
+       NL80211_ATTR_CQM_RSSI_THOLD,
+       NL80211_ATTR_CQM_RSSI_HYST,
+       NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
+       NL80211_ATTR_CQM_PKT_LOSS_EVENT,
+       NL80211_ATTR_CQM_TXE_RATE,
+       NL80211_ATTR_CQM_TXE_PKTS,
+       NL80211_ATTR_CQM_TXE_INTVL,
+       NL80211_ATTR_CQM_BEACON_LOSS_EVENT,
+
+       /* keep last */
+       __NL80211_ATTR_CQM_AFTER_LAST,
+       NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event
+ * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the
+ *      configured threshold
+ * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the
+ *      configured threshold
+ * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: (reserved, never sent)
+ */
+enum nl80211_cqm_rssi_threshold_event {
+       NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW,
+       NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH,
+       NL80211_CQM_RSSI_BEACON_LOSS_EVENT,
+};
+
+
+/**
+ * enum nl80211_tx_power_setting - TX power adjustment
+ * @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power
+ * @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter
+ * @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter
+ */
+enum nl80211_tx_power_setting {
+       NL80211_TX_POWER_AUTOMATIC,
+       NL80211_TX_POWER_LIMITED,
+       NL80211_TX_POWER_FIXED,
+};
+
+/**
+ * enum nl80211_packet_pattern_attr - packet pattern attribute
+ * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute
+ * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has
+ *     a zero bit are ignored
+ * @NL80211_PKTPAT_MASK: pattern mask, must be long enough to have
+ *     a bit for each byte in the pattern. The lowest-order bit corresponds
+ *     to the first byte of the pattern, but the bytes of the pattern are
+ *     in a little-endian-like format, i.e. the 9th byte of the pattern
+ *     corresponds to the lowest-order bit in the second byte of the mask.
+ *     For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where
+ *     xx indicates "don't care") would be represented by a pattern of
+ *     twelve zero bytes, and a mask of "0xed,0x01".
+ *     Note that the pattern matching is done as though frames were not
+ *     802.11 frames but 802.3 frames, i.e. the frame is fully unpacked
+ *     first (including SNAP header unpacking) and then matched.
+ * @NL80211_PKTPAT_OFFSET: packet offset, pattern is matched after
+ *     these fixed number of bytes of received packet
+ * @NUM_NL80211_PKTPAT: number of attributes
+ * @MAX_NL80211_PKTPAT: max attribute number
+ */
+enum nl80211_packet_pattern_attr {
+       __NL80211_PKTPAT_INVALID,
+       NL80211_PKTPAT_MASK,
+       NL80211_PKTPAT_PATTERN,
+       NL80211_PKTPAT_OFFSET,
+
+       NUM_NL80211_PKTPAT,
+       MAX_NL80211_PKTPAT = NUM_NL80211_PKTPAT - 1,
+};
+
+/**
+ * struct nl80211_pattern_support - packet pattern support information
+ * @max_patterns: maximum number of patterns supported
+ * @min_pattern_len: minimum length of each pattern
+ * @max_pattern_len: maximum length of each pattern
+ * @max_pkt_offset: maximum Rx packet offset
+ *
+ * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when
+ * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED or in
+ * %NL80211_ATTR_COALESCE_RULE_PKT_PATTERN when that is part of
+ * %NL80211_ATTR_COALESCE_RULE in the capability information given
+ * by the kernel to userspace.
+ */
+struct nl80211_pattern_support {
+       __u32 max_patterns;
+       __u32 min_pattern_len;
+       __u32 max_pattern_len;
+       __u32 max_pkt_offset;
+} __attribute__((packed));
+
+/* only for backward compatibility */
+#define __NL80211_WOWLAN_PKTPAT_INVALID __NL80211_PKTPAT_INVALID
+#define NL80211_WOWLAN_PKTPAT_MASK NL80211_PKTPAT_MASK
+#define NL80211_WOWLAN_PKTPAT_PATTERN NL80211_PKTPAT_PATTERN
+#define NL80211_WOWLAN_PKTPAT_OFFSET NL80211_PKTPAT_OFFSET
+#define NUM_NL80211_WOWLAN_PKTPAT NUM_NL80211_PKTPAT
+#define MAX_NL80211_WOWLAN_PKTPAT MAX_NL80211_PKTPAT
+#define nl80211_wowlan_pattern_support nl80211_pattern_support
+
+/**
+ * enum nl80211_wowlan_triggers - WoWLAN trigger definitions
+ * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes
+ * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put
+ *     the chip into a special state -- works best with chips that have
+ *     support for low-power operation already (flag)
+ *     Note that this mode is incompatible with all of the others, if
+ *     any others are even supported by the device.
+ * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect
+ *     is detected is implementation-specific (flag)
+ * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed
+ *     by 16 repetitions of MAC addr, anywhere in payload) (flag)
+ * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns
+ *     which are passed in an array of nested attributes, each nested attribute
+ *     defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern.
+ *     Each pattern defines a wakeup packet. Packet offset is associated with
+ *     each pattern which is used while matching the pattern. The matching is
+ *     done on the MSDU, i.e. as though the packet was an 802.3 packet, so the
+ *     pattern matching is done after the packet is converted to the MSDU.
+ *
+ *     In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute
+ *     carrying a &struct nl80211_pattern_support.
+ *
+ *     When reporting wakeup. it is a u32 attribute containing the 0-based
+ *     index of the pattern that caused the wakeup, in the patterns passed
+ *     to the kernel when configuring.
+ * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be
+ *     used when setting, used only to indicate that GTK rekeying is supported
+ *     by the device (flag)
+ * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if
+ *     done by the device) (flag)
+ * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request
+ *     packet (flag)
+ * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag)
+ * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released
+ *     (on devices that have rfkill in the device) (flag)
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211: For wakeup reporting only, contains
+ *     the 802.11 packet that caused the wakeup, e.g. a deauth frame. The frame
+ *     may be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN
+ *     attribute contains the original length.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN: Original length of the 802.11
+ *     packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211
+ *     attribute if the packet was truncated somewhere.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023: For wakeup reporting only, contains the
+ *     802.11 packet that caused the wakeup, e.g. a magic packet. The frame may
+ *     be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN attribute
+ *     contains the original length.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: Original length of the 802.3
+ *     packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023
+ *     attribute if the packet was truncated somewhere.
+ * @NL80211_WOWLAN_TRIG_TCP_CONNECTION: TCP connection wake, see DOC section
+ *     "TCP connection wakeup" for more details. This is a nested attribute
+ *     containing the exact information for establishing and keeping alive
+ *     the TCP connection.
+ * @NL80211_WOWLAN_TRIG_TCP_WAKEUP_MATCH: For wakeup reporting only, the
+ *     wakeup packet was received on the TCP connection
+ * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: For wakeup reporting only, the
+ *     TCP connection was lost or failed to be established
+ * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: For wakeup reporting only,
+ *     the TCP connection ran out of tokens to use for data to send to the
+ *     service
+ * @NL80211_WOWLAN_TRIG_NET_DETECT: wake up when a configured network
+ *     is detected.  This is a nested attribute that contains the
+ *     same attributes used with @NL80211_CMD_START_SCHED_SCAN.  It
+ *     specifies how the scan is performed (e.g. the interval, the
+ *     channels to scan and the initial delay) as well as the scan
+ *     results that will trigger a wake (i.e. the matchsets).  This
+ *     attribute is also sent in a response to
+ *     @NL80211_CMD_GET_WIPHY, indicating the number of match sets
+ *     supported by the driver (u32).
+ * @NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS: nested attribute
+ *     containing an array with information about what triggered the
+ *     wake up.  If no elements are present in the array, it means
+ *     that the information is not available.  If more than one
+ *     element is present, it means that more than one match
+ *     occurred.
+ *     Each element in the array is a nested attribute that contains
+ *     one optional %NL80211_ATTR_SSID attribute and one optional
+ *     %NL80211_ATTR_SCAN_FREQUENCIES attribute.  At least one of
+ *     these attributes must be present.  If
+ *     %NL80211_ATTR_SCAN_FREQUENCIES contains more than one
+ *     frequency, it means that the match occurred in more than one
+ *     channel.
+ * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers
+ * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number
+ *
+ * These nested attributes are used to configure the wakeup triggers and
+ * to report the wakeup reason(s).
+ */
+enum nl80211_wowlan_triggers {
+       __NL80211_WOWLAN_TRIG_INVALID,
+       NL80211_WOWLAN_TRIG_ANY,
+       NL80211_WOWLAN_TRIG_DISCONNECT,
+       NL80211_WOWLAN_TRIG_MAGIC_PKT,
+       NL80211_WOWLAN_TRIG_PKT_PATTERN,
+       NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED,
+       NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE,
+       NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST,
+       NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE,
+       NL80211_WOWLAN_TRIG_RFKILL_RELEASE,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN,
+       NL80211_WOWLAN_TRIG_TCP_CONNECTION,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS,
+       NL80211_WOWLAN_TRIG_NET_DETECT,
+       NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS,
+
+       /* keep last */
+       NUM_NL80211_WOWLAN_TRIG,
+       MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1
+};
+
+/**
+ * DOC: TCP connection wakeup
+ *
+ * Some devices can establish a TCP connection in order to be woken up by a
+ * packet coming in from outside their network segment, or behind NAT. If
+ * configured, the device will establish a TCP connection to the given
+ * service, and periodically send data to that service. The first data
+ * packet is usually transmitted after SYN/ACK, also ACKing the SYN/ACK.
+ * The data packets can optionally include a (little endian) sequence
+ * number (in the TCP payload!) that is generated by the device, and, also
+ * optionally, a token from a list of tokens. This serves as a keep-alive
+ * with the service, and for NATed connections, etc.
+ *
+ * During this keep-alive period, the server doesn't send any data to the
+ * client. When receiving data, it is compared against the wakeup pattern
+ * (and mask) and if it matches, the host is woken up. Similarly, if the
+ * connection breaks or cannot be established to start with, the host is
+ * also woken up.
+ *
+ * Developer's note: ARP offload is required for this, otherwise TCP
+ * response packets might not go through correctly.
+ */
+
+/**
+ * struct nl80211_wowlan_tcp_data_seq - WoWLAN TCP data sequence
+ * @start: starting value
+ * @offset: offset of sequence number in packet
+ * @len: length of the sequence value to write, 1 through 4
+ *
+ * Note: don't confuse with the TCP sequence number(s), this is for the
+ * keepalive packet payload. The actual value is written into the packet
+ * in little endian.
+ */
+struct nl80211_wowlan_tcp_data_seq {
+       __u32 start, offset, len;
+};
+
+/**
+ * struct nl80211_wowlan_tcp_data_token - WoWLAN TCP data token config
+ * @offset: offset of token in packet
+ * @len: length of each token
+ * @token_stream: stream of data to be used for the tokens, the length must
+ *     be a multiple of @len for this to make sense
+ */
+struct nl80211_wowlan_tcp_data_token {
+       __u32 offset, len;
+       __u8 token_stream[];
+};
+
+/**
+ * struct nl80211_wowlan_tcp_data_token_feature - data token features
+ * @min_len: minimum token length
+ * @max_len: maximum token length
+ * @bufsize: total available token buffer size (max size of @token_stream)
+ */
+struct nl80211_wowlan_tcp_data_token_feature {
+       __u32 min_len, max_len, bufsize;
+};
+
+/**
+ * enum nl80211_wowlan_tcp_attrs - WoWLAN TCP connection parameters
+ * @__NL80211_WOWLAN_TCP_INVALID: invalid number for nested attributes
+ * @NL80211_WOWLAN_TCP_SRC_IPV4: source IPv4 address (in network byte order)
+ * @NL80211_WOWLAN_TCP_DST_IPV4: destination IPv4 address
+ *     (in network byte order)
+ * @NL80211_WOWLAN_TCP_DST_MAC: destination MAC address, this is given because
+ *     route lookup when configured might be invalid by the time we suspend,
+ *     and doing a route lookup when suspending is no longer possible as it
+ *     might require ARP querying.
+ * @NL80211_WOWLAN_TCP_SRC_PORT: source port (u16); optional, if not given a
+ *     socket and port will be allocated
+ * @NL80211_WOWLAN_TCP_DST_PORT: destination port (u16)
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD: data packet payload, at least one byte.
+ *     For feature advertising, a u32 attribute holding the maximum length
+ *     of the data payload.
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: data packet sequence configuration
+ *     (if desired), a &struct nl80211_wowlan_tcp_data_seq. For feature
+ *     advertising it is just a flag
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: data packet token configuration,
+ *     see &struct nl80211_wowlan_tcp_data_token and for advertising see
+ *     &struct nl80211_wowlan_tcp_data_token_feature.
+ * @NL80211_WOWLAN_TCP_DATA_INTERVAL: data interval in seconds, maximum
+ *     interval in feature advertising (u32)
+ * @NL80211_WOWLAN_TCP_WAKE_PAYLOAD: wake packet payload, for advertising a
+ *     u32 attribute holding the maximum length
+ * @NL80211_WOWLAN_TCP_WAKE_MASK: Wake packet payload mask, not used for
+ *     feature advertising. The mask works like @NL80211_PKTPAT_MASK
+ *     but on the TCP payload only.
+ * @NUM_NL80211_WOWLAN_TCP: number of TCP attributes
+ * @MAX_NL80211_WOWLAN_TCP: highest attribute number
+ */
+enum nl80211_wowlan_tcp_attrs {
+       __NL80211_WOWLAN_TCP_INVALID,
+       NL80211_WOWLAN_TCP_SRC_IPV4,
+       NL80211_WOWLAN_TCP_DST_IPV4,
+       NL80211_WOWLAN_TCP_DST_MAC,
+       NL80211_WOWLAN_TCP_SRC_PORT,
+       NL80211_WOWLAN_TCP_DST_PORT,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN,
+       NL80211_WOWLAN_TCP_DATA_INTERVAL,
+       NL80211_WOWLAN_TCP_WAKE_PAYLOAD,
+       NL80211_WOWLAN_TCP_WAKE_MASK,
+
+       /* keep last */
+       NUM_NL80211_WOWLAN_TCP,
+       MAX_NL80211_WOWLAN_TCP = NUM_NL80211_WOWLAN_TCP - 1
+};
+
+/**
+ * struct nl80211_coalesce_rule_support - coalesce rule support information
+ * @max_rules: maximum number of rules supported
+ * @pat: packet pattern support information
+ * @max_delay: maximum supported coalescing delay in msecs
+ *
+ * This struct is carried in %NL80211_ATTR_COALESCE_RULE in the
+ * capability information given by the kernel to userspace.
+ */
+struct nl80211_coalesce_rule_support {
+       __u32 max_rules;
+       struct nl80211_pattern_support pat;
+       __u32 max_delay;
+} __attribute__((packed));
+
+/**
+ * enum nl80211_attr_coalesce_rule - coalesce rule attribute
+ * @__NL80211_COALESCE_RULE_INVALID: invalid number for nested attribute
+ * @NL80211_ATTR_COALESCE_RULE_DELAY: delay in msecs used for packet coalescing
+ * @NL80211_ATTR_COALESCE_RULE_CONDITION: condition for packet coalescence,
+ *     see &enum nl80211_coalesce_condition.
+ * @NL80211_ATTR_COALESCE_RULE_PKT_PATTERN: packet offset, pattern is matched
+ *     after these fixed number of bytes of received packet
+ * @NUM_NL80211_ATTR_COALESCE_RULE: number of attributes
+ * @NL80211_ATTR_COALESCE_RULE_MAX: max attribute number
+ */
+enum nl80211_attr_coalesce_rule {
+       __NL80211_COALESCE_RULE_INVALID,
+       NL80211_ATTR_COALESCE_RULE_DELAY,
+       NL80211_ATTR_COALESCE_RULE_CONDITION,
+       NL80211_ATTR_COALESCE_RULE_PKT_PATTERN,
+
+       /* keep last */
+       NUM_NL80211_ATTR_COALESCE_RULE,
+       NL80211_ATTR_COALESCE_RULE_MAX = NUM_NL80211_ATTR_COALESCE_RULE - 1
+};
+
+/**
+ * enum nl80211_coalesce_condition - coalesce rule conditions
+ * @NL80211_COALESCE_CONDITION_MATCH: coalaesce Rx packets when patterns
+ *     in a rule are matched.
+ * @NL80211_COALESCE_CONDITION_NO_MATCH: coalesce Rx packets when patterns
+ *     in a rule are not matched.
+ */
+enum nl80211_coalesce_condition {
+       NL80211_COALESCE_CONDITION_MATCH,
+       NL80211_COALESCE_CONDITION_NO_MATCH
+};
+
+/**
+ * enum nl80211_iface_limit_attrs - limit attributes
+ * @NL80211_IFACE_LIMIT_UNSPEC: (reserved)
+ * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that
+ *     can be chosen from this set of interface types (u32)
+ * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a
+ *     flag attribute for each interface type in this set
+ * @NUM_NL80211_IFACE_LIMIT: number of attributes
+ * @MAX_NL80211_IFACE_LIMIT: highest attribute number
+ */
+enum nl80211_iface_limit_attrs {
+       NL80211_IFACE_LIMIT_UNSPEC,
+       NL80211_IFACE_LIMIT_MAX,
+       NL80211_IFACE_LIMIT_TYPES,
+
+       /* keep last */
+       NUM_NL80211_IFACE_LIMIT,
+       MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1
+};
+
+/**
+ * enum nl80211_if_combination_attrs -- interface combination attributes
+ *
+ * @NL80211_IFACE_COMB_UNSPEC: (reserved)
+ * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits
+ *     for given interface types, see &enum nl80211_iface_limit_attrs.
+ * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of
+ *     interfaces that can be created in this group. This number doesn't
+ *     apply to interfaces purely managed in software, which are listed
+ *     in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE.
+ * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that
+ *     beacon intervals within this group must be all the same even for
+ *     infrastructure and AP/GO combinations, i.e. the GO(s) must adopt
+ *     the infrastructure network's beacon interval.
+ * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many
+ *     different channels may be used within this group.
+ * @NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: u32 attribute containing the bitmap
+ *     of supported channel widths for radar detection.
+ * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap
+ *     of supported regulatory regions for radar detection.
+ * @NUM_NL80211_IFACE_COMB: number of attributes
+ * @MAX_NL80211_IFACE_COMB: highest attribute number
+ *
+ * Examples:
+ *     limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2
+ *     => allows an AP and a STA that must match BIs
+ *
+ *     numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8
+ *     => allows 8 of AP/GO
+ *
+ *     numbers = [ #{STA} <= 2 ], channels = 2, max = 2
+ *     => allows two STAs on different channels
+ *
+ *     numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
+ *     => allows a STA plus three P2P interfaces
+ *
+ * The list of these four possiblities could completely be contained
+ * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate
+ * that any of these groups must match.
+ *
+ * "Combinations" of just a single interface will not be listed here,
+ * a single interface of any valid interface type is assumed to always
+ * be possible by itself. This means that implicitly, for each valid
+ * interface type, the following group always exists:
+ *     numbers = [ #{<type>} <= 1 ], channels = 1, max = 1
+ */
+enum nl80211_if_combination_attrs {
+       NL80211_IFACE_COMB_UNSPEC,
+       NL80211_IFACE_COMB_LIMITS,
+       NL80211_IFACE_COMB_MAXNUM,
+       NL80211_IFACE_COMB_STA_AP_BI_MATCH,
+       NL80211_IFACE_COMB_NUM_CHANNELS,
+       NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS,
+       NL80211_IFACE_COMB_RADAR_DETECT_REGIONS,
+
+       /* keep last */
+       NUM_NL80211_IFACE_COMB,
+       MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
+};
+
+
+/**
+ * enum nl80211_plink_state - state of a mesh peer link finite state machine
+ *
+ * @NL80211_PLINK_LISTEN: initial state, considered the implicit
+ *     state of non existant mesh peer links
+ * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to
+ *     this mesh peer
+ * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received
+ *     from this mesh peer
+ * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been
+ *     received from this mesh peer
+ * @NL80211_PLINK_ESTAB: mesh peer link is established
+ * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
+ * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
+ *     plink are discarded
+ * @NUM_NL80211_PLINK_STATES: number of peer link states
+ * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
+ */
+enum nl80211_plink_state {
+       NL80211_PLINK_LISTEN,
+       NL80211_PLINK_OPN_SNT,
+       NL80211_PLINK_OPN_RCVD,
+       NL80211_PLINK_CNF_RCVD,
+       NL80211_PLINK_ESTAB,
+       NL80211_PLINK_HOLDING,
+       NL80211_PLINK_BLOCKED,
+
+       /* keep last */
+       NUM_NL80211_PLINK_STATES,
+       MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1
+};
+
+/**
+ * enum nl80211_plink_action - actions to perform in mesh peers
+ *
+ * @NL80211_PLINK_ACTION_NO_ACTION: perform no action
+ * @NL80211_PLINK_ACTION_OPEN: start mesh peer link establishment
+ * @NL80211_PLINK_ACTION_BLOCK: block traffic from this mesh peer
+ * @NUM_NL80211_PLINK_ACTIONS: number of possible actions
+ */
+enum plink_actions {
+       NL80211_PLINK_ACTION_NO_ACTION,
+       NL80211_PLINK_ACTION_OPEN,
+       NL80211_PLINK_ACTION_BLOCK,
+
+       NUM_NL80211_PLINK_ACTIONS,
+};
+
+
+#define NL80211_KCK_LEN                        16
+#define NL80211_KEK_LEN                        16
+#define NL80211_REPLAY_CTR_LEN         8
+
+/**
+ * enum nl80211_rekey_data - attributes for GTK rekey offload
+ * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes
+ * @NL80211_REKEY_DATA_KEK: key encryption key (binary)
+ * @NL80211_REKEY_DATA_KCK: key confirmation key (binary)
+ * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary)
+ * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal)
+ * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal)
+ */
+enum nl80211_rekey_data {
+       __NL80211_REKEY_DATA_INVALID,
+       NL80211_REKEY_DATA_KEK,
+       NL80211_REKEY_DATA_KCK,
+       NL80211_REKEY_DATA_REPLAY_CTR,
+
+       /* keep last */
+       NUM_NL80211_REKEY_DATA,
+       MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1
+};
+
+/**
+ * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID
+ * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in
+ *     Beacon frames)
+ * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element
+ *     in Beacon frames
+ * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID
+ *     element in Beacon frames but zero out each byte in the SSID
+ */
+enum nl80211_hidden_ssid {
+       NL80211_HIDDEN_SSID_NOT_IN_USE,
+       NL80211_HIDDEN_SSID_ZERO_LEN,
+       NL80211_HIDDEN_SSID_ZERO_CONTENTS
+};
+
+/**
+ * enum nl80211_sta_wme_attr - station WME attributes
+ * @__NL80211_STA_WME_INVALID: invalid number for nested attribute
+ * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format
+ *     is the same as the AC bitmap in the QoS info field.
+ * @NL80211_STA_WME_MAX_SP: max service period. the format is the same
+ *     as the MAX_SP field in the QoS info field (but already shifted down).
+ * @__NL80211_STA_WME_AFTER_LAST: internal
+ * @NL80211_STA_WME_MAX: highest station WME attribute
+ */
+enum nl80211_sta_wme_attr {
+       __NL80211_STA_WME_INVALID,
+       NL80211_STA_WME_UAPSD_QUEUES,
+       NL80211_STA_WME_MAX_SP,
+
+       /* keep last */
+       __NL80211_STA_WME_AFTER_LAST,
+       NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates
+ * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes
+ * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher
+ *     priority)
+ * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets)
+ * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag)
+ * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes
+ *     (internal)
+ * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute
+ *     (internal)
+ */
+enum nl80211_pmksa_candidate_attr {
+       __NL80211_PMKSA_CANDIDATE_INVALID,
+       NL80211_PMKSA_CANDIDATE_INDEX,
+       NL80211_PMKSA_CANDIDATE_BSSID,
+       NL80211_PMKSA_CANDIDATE_PREAUTH,
+
+       /* keep last */
+       NUM_NL80211_PMKSA_CANDIDATE,
+       MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1
+};
+
+/**
+ * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION
+ * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request
+ * @NL80211_TDLS_SETUP: Setup TDLS link
+ * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established
+ * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link
+ * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link
+ */
+enum nl80211_tdls_operation {
+       NL80211_TDLS_DISCOVERY_REQ,
+       NL80211_TDLS_SETUP,
+       NL80211_TDLS_TEARDOWN,
+       NL80211_TDLS_ENABLE_LINK,
+       NL80211_TDLS_DISABLE_LINK,
+};
+
+/*
+ * enum nl80211_ap_sme_features - device-integrated AP features
+ * Reserved for future use, no bits are defined in
+ * NL80211_ATTR_DEVICE_AP_SME yet.
+enum nl80211_ap_sme_features {
+};
+ */
+
+/**
+ * enum nl80211_feature_flags - device/driver features
+ * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back
+ *     TX status to the socket error queue when requested with the
+ *     socket option.
+ * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates.
+ * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
+ *     the connected inactive stations in AP mode.
+ * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
+ *     to work properly to suppport receiving regulatory hints from
+ *     cellular base stations.
+ * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only
+ *     here to reserve the value for API/ABI compatibility)
+ * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of
+ *     equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station
+ *     mode
+ * @NL80211_FEATURE_LOW_PRIORITY_SCAN: This driver supports low priority scan
+ * @NL80211_FEATURE_SCAN_FLUSH: Scan flush is supported
+ * @NL80211_FEATURE_AP_SCAN: Support scanning using an AP vif
+ * @NL80211_FEATURE_VIF_TXPOWER: The driver supports per-vif TX power setting
+ * @NL80211_FEATURE_NEED_OBSS_SCAN: The driver expects userspace to perform
+ *     OBSS scans and generate 20/40 BSS coex reports. This flag is used only
+ *     for drivers implementing the CONNECT API, for AUTH/ASSOC it is implied.
+ * @NL80211_FEATURE_P2P_GO_CTWIN: P2P GO implementation supports CT Window
+ *     setting
+ * @NL80211_FEATURE_P2P_GO_OPPPS: P2P GO implementation supports opportunistic
+ *     powersave
+ * @NL80211_FEATURE_FULL_AP_CLIENT_STATE: The driver supports full state
+ *     transitions for AP clients. Without this flag (and if the driver
+ *     doesn't have the AP SME in the device) the driver supports adding
+ *     stations only when they're associated and adds them in associated
+ *     state (to later be transitioned into authorized), with this flag
+ *     they should be added before even sending the authentication reply
+ *     and then transitioned into authenticated, associated and authorized
+ *     states using station flags.
+ *     Note that even for drivers that support this, the default is to add
+ *     stations in authenticated/associated state, so to add unauthenticated
+ *     stations the authenticated/associated bits have to be set in the mask.
+ * @NL80211_FEATURE_ADVERTISE_CHAN_LIMITS: cfg80211 advertises channel limits
+ *     (HT40, VHT 80/160 MHz) if this flag is set
+ * @NL80211_FEATURE_USERSPACE_MPM: This driver supports a userspace Mesh
+ *     Peering Management entity which may be implemented by registering for
+ *     beacons or NL80211_CMD_NEW_PEER_CANDIDATE events. The mesh beacon is
+ *     still generated by the driver.
+ * @NL80211_FEATURE_ACTIVE_MONITOR: This driver supports an active monitor
+ *     interface. An active monitor interface behaves like a normal monitor
+ *     interface, but gets added to the driver. It ensures that incoming
+ *     unicast packets directed at the configured interface address get ACKed.
+ * @NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE: This driver supports dynamic
+ *     channel bandwidth change (e.g., HT 20 <-> 40 MHz channel) during the
+ *     lifetime of a BSS.
+ * @NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES: This device adds a DS Parameter
+ *     Set IE to probe requests.
+ * @NL80211_FEATURE_WFA_TPC_IE_IN_PROBES: This device adds a WFA TPC Report IE
+ *     to probe requests.
+ * @NL80211_FEATURE_QUIET: This device, in client mode, supports Quiet Period
+ *     requests sent to it by an AP.
+ * @NL80211_FEATURE_TX_POWER_INSERTION: This device is capable of inserting the
+ *     current tx power value into the TPC Report IE in the spectrum
+ *     management TPC Report action frame, and in the Radio Measurement Link
+ *     Measurement Report action frame.
+ * @NL80211_FEATURE_ACKTO_ESTIMATION: This driver supports dynamic ACK timeout
+ *     estimation (dynack). %NL80211_ATTR_WIPHY_DYN_ACK flag attribute is used
+ *     to enable dynack.
+ * @NL80211_FEATURE_STATIC_SMPS: Device supports static spatial
+ *     multiplexing powersave, ie. can turn off all but one chain
+ *     even on HT connections that should be using more chains.
+ * @NL80211_FEATURE_DYNAMIC_SMPS: Device supports dynamic spatial
+ *     multiplexing powersave, ie. can turn off all but one chain
+ *     and then wake the rest up as required after, for example,
+ *     rts/cts handshake.
+ * @NL80211_FEATURE_SUPPORTS_WMM_ADMISSION: the device supports setting up WMM
+ *     TSPEC sessions (TID aka TSID 0-7) with the %NL80211_CMD_ADD_TX_TS
+ *     command. Standard IEEE 802.11 TSPEC setup is not yet supported, it
+ *     needs to be able to handle Block-Ack agreements and other things.
+ * @NL80211_FEATURE_MAC_ON_CREATE: Device supports configuring
+ *     the vif's MAC address upon creation.
+ *     See 'macaddr' field in the vif_params (cfg80211.h).
+ * @NL80211_FEATURE_TDLS_CHANNEL_SWITCH: Driver supports channel switching when
+ *     operating as a TDLS peer.
+ * @NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR: This device/driver supports using a
+ *     random MAC address during scan (if the device is unassociated); the
+ *     %NL80211_SCAN_FLAG_RANDOM_ADDR flag may be set for scans and the MAC
+ *     address mask/value will be used.
+ * @NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR: This device/driver supports
+ *     using a random MAC address for every scan iteration during scheduled
+ *     scan (while not associated), the %NL80211_SCAN_FLAG_RANDOM_ADDR may
+ *     be set for scheduled scan and the MAC address mask/value will be used.
+ * @NL80211_FEATURE_ND_RANDOM_MAC_ADDR: This device/driver supports using a
+ *     random MAC address for every scan iteration during "net detect", i.e.
+ *     scan in unassociated WoWLAN, the %NL80211_SCAN_FLAG_RANDOM_ADDR may
+ *     be set for scheduled scan and the MAC address mask/value will be used.
+ */
+enum nl80211_feature_flags {
+       NL80211_FEATURE_SK_TX_STATUS                    = 1 << 0,
+       NL80211_FEATURE_HT_IBSS                         = 1 << 1,
+       NL80211_FEATURE_INACTIVITY_TIMER                = 1 << 2,
+       NL80211_FEATURE_CELL_BASE_REG_HINTS             = 1 << 3,
+       NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL        = 1 << 4,
+       NL80211_FEATURE_SAE                             = 1 << 5,
+       NL80211_FEATURE_LOW_PRIORITY_SCAN               = 1 << 6,
+       NL80211_FEATURE_SCAN_FLUSH                      = 1 << 7,
+       NL80211_FEATURE_AP_SCAN                         = 1 << 8,
+       NL80211_FEATURE_VIF_TXPOWER                     = 1 << 9,
+       NL80211_FEATURE_NEED_OBSS_SCAN                  = 1 << 10,
+       NL80211_FEATURE_P2P_GO_CTWIN                    = 1 << 11,
+       NL80211_FEATURE_P2P_GO_OPPPS                    = 1 << 12,
+       /* bit 13 is reserved */
+       NL80211_FEATURE_ADVERTISE_CHAN_LIMITS           = 1 << 14,
+       NL80211_FEATURE_FULL_AP_CLIENT_STATE            = 1 << 15,
+       NL80211_FEATURE_USERSPACE_MPM                   = 1 << 16,
+       NL80211_FEATURE_ACTIVE_MONITOR                  = 1 << 17,
+       NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE       = 1 << 18,
+       NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES       = 1 << 19,
+       NL80211_FEATURE_WFA_TPC_IE_IN_PROBES            = 1 << 20,
+       NL80211_FEATURE_QUIET                           = 1 << 21,
+       NL80211_FEATURE_TX_POWER_INSERTION              = 1 << 22,
+       NL80211_FEATURE_ACKTO_ESTIMATION                = 1 << 23,
+       NL80211_FEATURE_STATIC_SMPS                     = 1 << 24,
+       NL80211_FEATURE_DYNAMIC_SMPS                    = 1 << 25,
+       NL80211_FEATURE_SUPPORTS_WMM_ADMISSION          = 1 << 26,
+       NL80211_FEATURE_MAC_ON_CREATE                   = 1 << 27,
+       NL80211_FEATURE_TDLS_CHANNEL_SWITCH             = 1 << 28,
+       NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR            = 1 << 29,
+       NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR      = 1 << 30,
+       NL80211_FEATURE_ND_RANDOM_MAC_ADDR              = 1 << 31,
+};
+
+/**
+ * enum nl80211_ext_feature_index - bit index of extended features.
+ * @NL80211_EXT_FEATURE_VHT_IBSS: This driver supports IBSS with VHT datarates.
+ *
+ * @NUM_NL80211_EXT_FEATURES: number of extended features.
+ * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
+ */
+enum nl80211_ext_feature_index {
+       NL80211_EXT_FEATURE_VHT_IBSS,
+
+       /* add new features before the definition below */
+       NUM_NL80211_EXT_FEATURES,
+       MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
+};
+
+/**
+ * enum nl80211_probe_resp_offload_support_attr - optional supported
+ *     protocols for probe-response offloading by the driver/FW.
+ *     To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute.
+ *     Each enum value represents a bit in the bitmap of supported
+ *     protocols. Typically a subset of probe-requests belonging to a
+ *     supported protocol will be excluded from offload and uploaded
+ *     to the host.
+ *
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u
+ */
+enum nl80211_probe_resp_offload_support_attr {
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS =        1<<0,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 =       1<<1,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P =        1<<2,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U =     1<<3,
+};
+
+/**
+ * enum nl80211_connect_failed_reason - connection request failed reasons
+ * @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be
+ *     handled by the AP is reached.
+ * @NL80211_CONN_FAIL_BLOCKED_CLIENT: Connection request is rejected due to ACL.
+ */
+enum nl80211_connect_failed_reason {
+       NL80211_CONN_FAIL_MAX_CLIENTS,
+       NL80211_CONN_FAIL_BLOCKED_CLIENT,
+};
+
+/**
+ * enum nl80211_scan_flags -  scan request control flags
+ *
+ * Scan request control flags are used to control the handling
+ * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN
+ * requests.
+ *
+ * @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority
+ * @NL80211_SCAN_FLAG_FLUSH: flush cache before scanning
+ * @NL80211_SCAN_FLAG_AP: force a scan even if the interface is configured
+ *     as AP and the beaconing has already been configured. This attribute is
+ *     dangerous because will destroy stations performance as a lot of frames
+ *     will be lost while scanning off-channel, therefore it must be used only
+ *     when really needed
+ * @NL80211_SCAN_FLAG_RANDOM_ADDR: use a random MAC address for this scan (or
+ *     for scheduled scan: a different one for every scan iteration). When the
+ *     flag is set, depending on device capabilities the @NL80211_ATTR_MAC and
+ *     @NL80211_ATTR_MAC_MASK attributes may also be given in which case only
+ *     the masked bits will be preserved from the MAC address and the remainder
+ *     randomised. If the attributes are not given full randomisation (46 bits,
+ *     locally administered 1, multicast 0) is assumed.
+ *     This flag must not be requested when the feature isn't supported, check
+ *     the nl80211 feature flags for the device.
+ */
+enum nl80211_scan_flags {
+       NL80211_SCAN_FLAG_LOW_PRIORITY                  = 1<<0,
+       NL80211_SCAN_FLAG_FLUSH                         = 1<<1,
+       NL80211_SCAN_FLAG_AP                            = 1<<2,
+       NL80211_SCAN_FLAG_RANDOM_ADDR                   = 1<<3,
+};
+
+/**
+ * enum nl80211_acl_policy - access control policy
+ *
+ * Access control policy is applied on a MAC list set by
+ * %NL80211_CMD_START_AP and %NL80211_CMD_SET_MAC_ACL, to
+ * be used with %NL80211_ATTR_ACL_POLICY.
+ *
+ * @NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: Deny stations which are
+ *     listed in ACL, i.e. allow all the stations which are not listed
+ *     in ACL to authenticate.
+ * @NL80211_ACL_POLICY_DENY_UNLESS_LISTED: Allow the stations which are listed
+ *     in ACL, i.e. deny all the stations which are not listed in ACL.
+ */
+enum nl80211_acl_policy {
+       NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED,
+       NL80211_ACL_POLICY_DENY_UNLESS_LISTED,
+};
+
+/**
+ * enum nl80211_smps_mode - SMPS mode
+ *
+ * Requested SMPS mode (for AP mode)
+ *
+ * @NL80211_SMPS_OFF: SMPS off (use all antennas).
+ * @NL80211_SMPS_STATIC: static SMPS (use a single antenna)
+ * @NL80211_SMPS_DYNAMIC: dynamic smps (start with a single antenna and
+ *     turn on other antennas after CTS/RTS).
+ */
+enum nl80211_smps_mode {
+       NL80211_SMPS_OFF,
+       NL80211_SMPS_STATIC,
+       NL80211_SMPS_DYNAMIC,
+
+       __NL80211_SMPS_AFTER_LAST,
+       NL80211_SMPS_MAX = __NL80211_SMPS_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_radar_event - type of radar event for DFS operation
+ *
+ * Type of event to be used with NL80211_ATTR_RADAR_EVENT to inform userspace
+ * about detected radars or success of the channel available check (CAC)
+ *
+ * @NL80211_RADAR_DETECTED: A radar pattern has been detected. The channel is
+ *     now unusable.
+ * @NL80211_RADAR_CAC_FINISHED: Channel Availability Check has been finished,
+ *     the channel is now available.
+ * @NL80211_RADAR_CAC_ABORTED: Channel Availability Check has been aborted, no
+ *     change to the channel status.
+ * @NL80211_RADAR_NOP_FINISHED: The Non-Occupancy Period for this channel is
+ *     over, channel becomes usable.
+ */
+enum nl80211_radar_event {
+       NL80211_RADAR_DETECTED,
+       NL80211_RADAR_CAC_FINISHED,
+       NL80211_RADAR_CAC_ABORTED,
+       NL80211_RADAR_NOP_FINISHED,
+};
+
+/**
+ * enum nl80211_dfs_state - DFS states for channels
+ *
+ * Channel states used by the DFS code.
+ *
+ * @NL80211_DFS_USABLE: The channel can be used, but channel availability
+ *     check (CAC) must be performed before using it for AP or IBSS.
+ * @NL80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it
+ *     is therefore marked as not available.
+ * @NL80211_DFS_AVAILABLE: The channel has been CAC checked and is available.
+ */
+enum nl80211_dfs_state {
+       NL80211_DFS_USABLE,
+       NL80211_DFS_UNAVAILABLE,
+       NL80211_DFS_AVAILABLE,
+};
+
+/**
+ * enum enum nl80211_protocol_features - nl80211 protocol features
+ * @NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP: nl80211 supports splitting
+ *     wiphy dumps (if requested by the application with the attribute
+ *     %NL80211_ATTR_SPLIT_WIPHY_DUMP. Also supported is filtering the
+ *     wiphy dump by %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFINDEX or
+ *     %NL80211_ATTR_WDEV.
+ */
+enum nl80211_protocol_features {
+       NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP =     1 << 0,
+};
+
+/**
+ * enum nl80211_crit_proto_id - nl80211 critical protocol identifiers
+ *
+ * @NL80211_CRIT_PROTO_UNSPEC: protocol unspecified.
+ * @NL80211_CRIT_PROTO_DHCP: BOOTP or DHCPv6 protocol.
+ * @NL80211_CRIT_PROTO_EAPOL: EAPOL protocol.
+ * @NL80211_CRIT_PROTO_APIPA: APIPA protocol.
+ * @NUM_NL80211_CRIT_PROTO: must be kept last.
+ */
+enum nl80211_crit_proto_id {
+       NL80211_CRIT_PROTO_UNSPEC,
+       NL80211_CRIT_PROTO_DHCP,
+       NL80211_CRIT_PROTO_EAPOL,
+       NL80211_CRIT_PROTO_APIPA,
+       /* add other protocols before this one */
+       NUM_NL80211_CRIT_PROTO
+};
+
+/* maximum duration for critical protocol measures */
+#define NL80211_CRIT_PROTO_MAX_DURATION                5000 /* msec */
+
+/**
+ * enum nl80211_rxmgmt_flags - flags for received management frame.
+ *
+ * Used by cfg80211_rx_mgmt()
+ *
+ * @NL80211_RXMGMT_FLAG_ANSWERED: frame was answered by device/driver.
+ */
+enum nl80211_rxmgmt_flags {
+       NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0,
+};
+
+/*
+ * If this flag is unset, the lower 24 bits are an OUI, if set
+ * a Linux nl80211 vendor ID is used (no such IDs are allocated
+ * yet, so that's not valid so far)
+ */
+#define NL80211_VENDOR_ID_IS_LINUX     0x80000000
+
+/**
+ * struct nl80211_vendor_cmd_info - vendor command data
+ * @vendor_id: If the %NL80211_VENDOR_ID_IS_LINUX flag is clear, then the
+ *     value is a 24-bit OUI; if it is set then a separately allocated ID
+ *     may be used, but no such IDs are allocated yet. New IDs should be
+ *     added to this file when needed.
+ * @subcmd: sub-command ID for the command
+ */
+struct nl80211_vendor_cmd_info {
+       __u32 vendor_id;
+       __u32 subcmd;
+};
+
+/**
+ * enum nl80211_tdls_peer_capability - TDLS peer flags.
+ *
+ * Used by tdls_mgmt() to determine which conditional elements need
+ * to be added to TDLS Setup frames.
+ *
+ * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable.
+ * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable.
+ * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable.
+ */
+enum nl80211_tdls_peer_capability {
+       NL80211_TDLS_PEER_HT = 1<<0,
+       NL80211_TDLS_PEER_VHT = 1<<1,
+       NL80211_TDLS_PEER_WMM = 1<<2,
+};
+
+/**
+ * enum nl80211_sched_scan_plan - scanning plan for scheduled scan
+ * @__NL80211_SCHED_SCAN_PLAN_INVALID: attribute number 0 is reserved
+ * @NL80211_SCHED_SCAN_PLAN_INTERVAL: interval between scan iterations. In
+ *     seconds (u32).
+ * @NL80211_SCHED_SCAN_PLAN_ITERATIONS: number of scan iterations in this
+ *     scan plan (u32). The last scan plan must not specify this attribute
+ *     because it will run infinitely. A value of zero is invalid as it will
+ *     make the scan plan meaningless.
+ * @NL80211_SCHED_SCAN_PLAN_MAX: highest scheduled scan plan attribute number
+ *     currently defined
+ * @__NL80211_SCHED_SCAN_PLAN_AFTER_LAST: internal use
+ */
+enum nl80211_sched_scan_plan {
+       __NL80211_SCHED_SCAN_PLAN_INVALID,
+       NL80211_SCHED_SCAN_PLAN_INTERVAL,
+       NL80211_SCHED_SCAN_PLAN_ITERATIONS,
+
+       /* keep last */
+       __NL80211_SCHED_SCAN_PLAN_AFTER_LAST,
+       NL80211_SCHED_SCAN_PLAN_MAX =
+               __NL80211_SCHED_SCAN_PLAN_AFTER_LAST - 1
+};
+
+#endif /* __LINUX_NL80211_H */
diff --git a/lib/libdss-include/include/linux/nubus.h b/lib/libdss-include/include/linux/nubus.h
new file mode 100644 (file)
index 0000000..60b03e4
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+  nubus.h: various definitions and prototypes for NuBus drivers to use.
+
+  Originally written by Alan Cox.
+
+  Hacked to death by C. Scott Ananian and David Huggins-Daines.
+  
+  Some of the constants in here are from the corresponding
+  NetBSD/OpenBSD header file, by Allen Briggs.  We figured out the
+  rest of them on our own. */
+
+#ifndef LINUX_NUBUS_H
+#define LINUX_NUBUS_H
+
+#include <linux/types.h>
+
+enum nubus_category {
+       NUBUS_CAT_BOARD          = 0x0001,
+       NUBUS_CAT_DISPLAY        = 0x0003,
+       NUBUS_CAT_NETWORK        = 0x0004,
+       NUBUS_CAT_COMMUNICATIONS = 0x0006,
+       NUBUS_CAT_FONT           = 0x0009,
+       NUBUS_CAT_CPU            = 0x000A,
+       /* For lack of a better name */
+       NUBUS_CAT_DUODOCK        = 0x0020
+};
+
+enum nubus_type_network {
+       NUBUS_TYPE_ETHERNET      = 0x0001,
+       NUBUS_TYPE_RS232         = 0x0002
+};
+
+enum nubus_type_display {
+       NUBUS_TYPE_VIDEO         = 0x0001
+};
+
+enum nubus_type_cpu {
+       NUBUS_TYPE_68020         = 0x0003,
+       NUBUS_TYPE_68030         = 0x0004,
+       NUBUS_TYPE_68040         = 0x0005
+};
+
+/* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots)
+ *  68030 motherboards: <10,4,0,24>
+ *  68040 motherboards: <10,5,0,24>
+ *  DuoDock Plus: <32,1,1,2>
+ *
+ *  Toby Frame Buffer card: <3,1,1,1>
+ *  RBV built-in video (IIci): <3,1,1,24>
+ *  Valkyrie built-in video (Q630): <3,1,1,46>
+ *  Macintosh Display Card: <3,1,1,25>
+ *  Sonora built-in video (P460): <3,1,1,34>
+ *  Jet framebuffer (DuoDock Plus): <3,1,1,41>
+ *
+ *  SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272>
+ *  SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271>
+ *  Apple SONIC LC-PDS Ethernet ("Apple Ethernet LC Twisted-Pair Card"): <4,1,0,281>
+ *  Sonic Systems Ethernet A-Series Card: <4,1,268,256>
+ *  Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision)
+ *   ROM on the above card: <2,1,0,0>
+ *  Cabletron ethernet card: <4,1,1,265>
+ *  Farallon ethernet card: <4,1,268,256> (identical to Sonic Systems card)
+ *  Kinetics EtherPort IIN: <4,1,259,262>
+ *  API Engineering EtherRun_LCa PDS enet card: <4,1,282,256>
+ *
+ *  Add your devices to the list!  You can obtain the "Slots" utility
+ *  from Apple's FTP site at:
+ *  ftp://dev.apple.com/devworld/Tool_Chest/Devices_-_Hardware/NuBus_Slot_Manager/
+ *
+ *  Alternately, TattleTech can be found at any Info-Mac mirror site.  
+ *  or from its distribution site: ftp://ftp.decismkr.com/dms
+ */
+
+/* DrSW: Uniquely identifies the software interface to a board.  This
+   is usually the one you want to look at when writing a driver.  It's
+   not as useful as you think, though, because as we should know by
+   now (duh), "Apple Compatible" can mean a lot of things... */
+
+/* Add known DrSW values here */
+enum nubus_drsw {
+       /* NUBUS_CAT_DISPLAY */
+       NUBUS_DRSW_APPLE        = 0x0001,
+       NUBUS_DRSW_APPLE_HIRES  = 0x0013, /* MacII HiRes card driver */
+       
+       /* NUBUS_CAT_NETWORK */
+       NUBUS_DRSW_3COM         = 0x0000,
+       NUBUS_DRSW_CABLETRON    = 0x0001,
+       NUBUS_DRSW_SONIC_LC     = 0x0001,
+       NUBUS_DRSW_KINETICS     = 0x0103,
+       NUBUS_DRSW_ASANTE       = 0x0104,
+       NUBUS_DRSW_TECHWORKS    = 0x0109,
+       NUBUS_DRSW_DAYNA        = 0x010b,
+       NUBUS_DRSW_FARALLON     = 0x010c,
+       NUBUS_DRSW_APPLE_SN     = 0x010f,
+       NUBUS_DRSW_DAYNA2       = 0x0115,
+       NUBUS_DRSW_FOCUS        = 0x011a,
+       NUBUS_DRSW_ASANTE_CS    = 0x011d, /* use asante SMC9194 driver */
+       NUBUS_DRSW_DAYNA_LC     = 0x011e,
+
+       /* NUBUS_CAT_CPU */
+       NUBUS_DRSW_NONE         = 0x0000,
+};
+
+/* DrHW: Uniquely identifies the hardware interface to a board (or at
+   least, it should...  some video cards are known to incorrectly
+   identify themselves as Toby cards) */
+
+/* Add known DrHW values here */
+enum nubus_drhw {
+       /* NUBUS_CAT_DISPLAY */
+       NUBUS_DRHW_APPLE_TFB      = 0x0001, /* Toby frame buffer card */
+       NUBUS_DRHW_APPLE_WVC      = 0x0006, /* Apple Workstation Video Card */
+       NUBUS_DRHW_SIGMA_CLRMAX   = 0x0007, /* Sigma Design ColorMax */
+       NUBUS_DRHW_APPLE_SE30     = 0x0009, /* Apple SE/30 video */
+       NUBUS_DRHW_APPLE_HRVC     = 0x0013, /* Mac II High-Res Video Card */
+       NUBUS_DRHW_APPLE_PVC      = 0x0017, /* Mac II Portrait Video Card */
+       NUBUS_DRHW_APPLE_RBV1     = 0x0018, /* IIci RBV video */
+       NUBUS_DRHW_APPLE_MDC      = 0x0019, /* Macintosh Display Card */
+       NUBUS_DRHW_APPLE_SONORA   = 0x0022, /* Sonora built-in video */
+       NUBUS_DRHW_APPLE_24AC     = 0x002b, /* Mac 24AC Video Card */
+       NUBUS_DRHW_APPLE_VALKYRIE = 0x002e,
+       NUBUS_DRHW_APPLE_JET      = 0x0029, /* Jet framebuffer (DuoDock) */
+       NUBUS_DRHW_SMAC_GFX       = 0x0105, /* SuperMac GFX */
+       NUBUS_DRHW_RASTER_CB264   = 0x013B, /* RasterOps ColorBoard 264 */
+       NUBUS_DRHW_MICRON_XCEED   = 0x0146, /* Micron Exceed color */
+       NUBUS_DRHW_RDIUS_GSC      = 0x0153, /* Radius GS/C */
+       NUBUS_DRHW_SMAC_SPEC8     = 0x017B, /* SuperMac Spectrum/8 */
+       NUBUS_DRHW_SMAC_SPEC24    = 0x017C, /* SuperMac Spectrum/24 */
+       NUBUS_DRHW_RASTER_CB364   = 0x026F, /* RasterOps ColorBoard 364 */
+       NUBUS_DRHW_RDIUS_DCGX     = 0x027C, /* Radius DirectColor/GX */
+       NUBUS_DRHW_RDIUS_PC8      = 0x0291, /* Radius PrecisionColor 8 */
+       NUBUS_DRHW_LAPIS_PCS8     = 0x0292, /* Lapis ProColorServer 8 */
+       NUBUS_DRHW_RASTER_24XLI   = 0x02A0, /* RasterOps 8/24 XLi */
+       NUBUS_DRHW_RASTER_PBPGT   = 0x02A5, /* RasterOps PaintBoard Prism GT */
+       NUBUS_DRHW_EMACH_FSX      = 0x02AE, /* E-Machines Futura SX */
+       NUBUS_DRHW_RASTER_24XLTV  = 0x02B7, /* RasterOps 24XLTV */
+       NUBUS_DRHW_SMAC_THUND24   = 0x02CB, /* SuperMac Thunder/24 */
+       NUBUS_DRHW_SMAC_THUNDLGHT = 0x03D9, /* SuperMac ThunderLight */
+       NUBUS_DRHW_RDIUS_PC24XP   = 0x0406, /* Radius PrecisionColor 24Xp */
+       NUBUS_DRHW_RDIUS_PC24X    = 0x040A, /* Radius PrecisionColor 24X */
+       NUBUS_DRHW_RDIUS_PC8XJ    = 0x040B, /* Radius PrecisionColor 8XJ */
+       
+       /* NUBUS_CAT_NETWORK */
+       NUBUS_DRHW_INTERLAN       = 0x0100,
+       NUBUS_DRHW_SMC9194        = 0x0101,
+       NUBUS_DRHW_KINETICS       = 0x0106,
+       NUBUS_DRHW_CABLETRON      = 0x0109,
+       NUBUS_DRHW_ASANTE_LC      = 0x010f,
+       NUBUS_DRHW_SONIC          = 0x0110,
+       NUBUS_DRHW_TECHWORKS      = 0x0112,
+       NUBUS_DRHW_APPLE_SONIC_NB = 0x0118,
+       NUBUS_DRHW_APPLE_SONIC_LC = 0x0119,
+       NUBUS_DRHW_FOCUS          = 0x011c,
+       NUBUS_DRHW_SONNET         = 0x011d,
+};
+
+/* Resource IDs: These are the identifiers for the various weird and
+   wonderful tidbits of information that may or may not reside in the
+   NuBus ROM directory. */
+enum nubus_res_id {
+       NUBUS_RESID_TYPE         = 0x0001,
+       NUBUS_RESID_NAME         = 0x0002,
+       NUBUS_RESID_ICON         = 0x0003,
+       NUBUS_RESID_DRVRDIR      = 0x0004,
+       NUBUS_RESID_LOADREC      = 0x0005,
+       NUBUS_RESID_BOOTREC      = 0x0006,
+       NUBUS_RESID_FLAGS        = 0x0007,
+       NUBUS_RESID_HWDEVID      = 0x0008,
+       NUBUS_RESID_MINOR_BASEOS = 0x000a,
+       NUBUS_RESID_MINOR_LENGTH = 0x000b,
+       NUBUS_RESID_MAJOR_BASEOS = 0x000c,
+       NUBUS_RESID_MAJOR_LENGTH = 0x000d,
+       NUBUS_RESID_CICN         = 0x000f,
+       NUBUS_RESID_ICL8         = 0x0010,
+       NUBUS_RESID_ICL4         = 0x0011,
+};
+
+/* Category-specific resources. */
+enum nubus_board_res_id {
+       NUBUS_RESID_BOARDID      = 0x0020,
+       NUBUS_RESID_PRAMINITDATA = 0x0021,
+       NUBUS_RESID_PRIMARYINIT  = 0x0022,
+       NUBUS_RESID_TIMEOUTCONST = 0x0023,
+       NUBUS_RESID_VENDORINFO   = 0x0024,
+       NUBUS_RESID_BOARDFLAGS   = 0x0025,
+       NUBUS_RESID_SECONDINIT   = 0x0026,
+
+       /* Not sure why Apple put these next two in here */
+       NUBUS_RESID_VIDNAMES     = 0x0041,
+       NUBUS_RESID_VIDMODES     = 0x007e
+};
+
+/* Fields within the vendor info directory */
+enum nubus_vendor_res_id {
+       NUBUS_RESID_VEND_ID     = 0x0001,
+       NUBUS_RESID_VEND_SERIAL = 0x0002,
+       NUBUS_RESID_VEND_REV    = 0x0003,
+       NUBUS_RESID_VEND_PART   = 0x0004,
+       NUBUS_RESID_VEND_DATE   = 0x0005
+};
+
+enum nubus_net_res_id {
+       NUBUS_RESID_MAC_ADDRESS  = 0x0080
+};
+
+enum nubus_cpu_res_id {
+       NUBUS_RESID_MEMINFO      = 0x0081,
+       NUBUS_RESID_ROMINFO      = 0x0082
+};
+
+enum nubus_display_res_id {
+       NUBUS_RESID_GAMMADIR    = 0x0040,
+       NUBUS_RESID_FIRSTMODE   = 0x0080,
+       NUBUS_RESID_SECONDMODE  = 0x0081,
+       NUBUS_RESID_THIRDMODE   = 0x0082,
+       NUBUS_RESID_FOURTHMODE  = 0x0083,
+       NUBUS_RESID_FIFTHMODE   = 0x0084,
+       NUBUS_RESID_SIXTHMODE   = 0x0085
+};
+
+struct nubus_dir
+{
+       unsigned char *base;
+       unsigned char *ptr;
+       int done;
+       int mask;
+};
+
+struct nubus_dirent
+{
+       unsigned char *base;
+       unsigned char type;
+       __u32 data;     /* Actually 24bits used */
+       int mask;
+};
+
+
+/* We'd like to get rid of this eventually.  Only daynaport.c uses it now. */
+static __inline__ void *nubus_slot_addr(int slot)
+{
+       return (void *)(0xF0000000|(slot<<24));
+}
+
+#endif /* LINUX_NUBUS_H */
diff --git a/lib/libdss-include/include/linux/nvme_ioctl.h b/lib/libdss-include/include/linux/nvme_ioctl.h
new file mode 100644 (file)
index 0000000..9cea1ff
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Definitions for the NVM Express ioctl interface
+ * Copyright (c) 2011-2014, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#ifndef _LINUX_NVME_IOCTL_H
+#define _LINUX_NVME_IOCTL_H
+
+#include <linux/types.h>
+
+struct nvme_user_io {
+       __u8    opcode;
+       __u8    flags;
+       __u16   control;
+       __u16   nblocks;
+       __u16   rsvd;
+       __u64   metadata;
+       __u64   addr;
+       __u64   slba;
+       __u32   dsmgmt;
+       __u32   reftag;
+       __u16   apptag;
+       __u16   appmask;
+};
+
+struct nvme_passthru_cmd {
+       __u8    opcode;
+       __u8    flags;
+       __u16   rsvd1;
+       __u32   nsid;
+       __u32   cdw2;
+       __u32   cdw3;
+       __u64   metadata;
+       __u64   addr;
+       __u32   metadata_len;
+       __u32   data_len;
+       __u32   cdw10;
+       __u32   cdw11;
+       __u32   cdw12;
+       __u32   cdw13;
+       __u32   cdw14;
+       __u32   cdw15;
+       __u32   timeout_ms;
+       __u32   result;
+};
+
+#define nvme_admin_cmd nvme_passthru_cmd
+
+#define NVME_IOCTL_ID          _IO('N', 0x40)
+#define NVME_IOCTL_ADMIN_CMD   _IOWR('N', 0x41, struct nvme_admin_cmd)
+#define NVME_IOCTL_SUBMIT_IO   _IOW('N', 0x42, struct nvme_user_io)
+#define NVME_IOCTL_IO_CMD      _IOWR('N', 0x43, struct nvme_passthru_cmd)
+#define NVME_IOCTL_RESET       _IO('N', 0x44)
+#define NVME_IOCTL_SUBSYS_RESET        _IO('N', 0x45)
+
+#endif /* _LINUX_NVME_IOCTL_H */
diff --git a/lib/libdss-include/include/linux/nvram.h b/lib/libdss-include/include/linux/nvram.h
new file mode 100644 (file)
index 0000000..a05d28a
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _LINUX_NVRAM_H
+#define _LINUX_NVRAM_H
+
+#include <linux/ioctl.h>
+
+/* /dev/nvram ioctls */
+#define NVRAM_INIT     _IO('p', 0x40) /* initialize NVRAM and set checksum */
+#define NVRAM_SETCKS   _IO('p', 0x41) /* recalculate checksum */
+
+/* for all current systems, this is where NVRAM starts */
+#define NVRAM_FIRST_BYTE    14
+/* all these functions expect an NVRAM offset, not an absolute */
+#define NVRAM_OFFSET(x)   ((x)-NVRAM_FIRST_BYTE)
+
+
+#endif /* _LINUX_NVRAM_H */
diff --git a/lib/libdss-include/include/linux/omap3isp.h b/lib/libdss-include/include/linux/omap3isp.h
new file mode 100644 (file)
index 0000000..cb3e8a5
--- /dev/null
@@ -0,0 +1,646 @@
+/*
+ * omap3isp.h
+ *
+ * TI OMAP3 ISP - User-space API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ * Copyright (C) 2009 Texas Instruments, Inc.
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef OMAP3_ISP_USER_H
+#define OMAP3_ISP_USER_H
+
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/*
+ * Private IOCTLs
+ *
+ * VIDIOC_OMAP3ISP_CCDC_CFG: Set CCDC configuration
+ * VIDIOC_OMAP3ISP_PRV_CFG: Set preview engine configuration
+ * VIDIOC_OMAP3ISP_AEWB_CFG: Set AEWB module configuration
+ * VIDIOC_OMAP3ISP_HIST_CFG: Set histogram module configuration
+ * VIDIOC_OMAP3ISP_AF_CFG: Set auto-focus module configuration
+ * VIDIOC_OMAP3ISP_STAT_REQ: Read statistics (AEWB/AF/histogram) data
+ * VIDIOC_OMAP3ISP_STAT_EN: Enable/disable a statistics module
+ */
+
+#define VIDIOC_OMAP3ISP_CCDC_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct omap3isp_ccdc_update_config)
+#define VIDIOC_OMAP3ISP_PRV_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct omap3isp_prev_update_config)
+#define VIDIOC_OMAP3ISP_AEWB_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct omap3isp_h3a_aewb_config)
+#define VIDIOC_OMAP3ISP_HIST_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config)
+#define VIDIOC_OMAP3ISP_AF_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
+#define VIDIOC_OMAP3ISP_STAT_REQ \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
+#define VIDIOC_OMAP3ISP_STAT_EN \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
+
+/*
+ * Events
+ *
+ * V4L2_EVENT_OMAP3ISP_AEWB: AEWB statistics data ready
+ * V4L2_EVENT_OMAP3ISP_AF: AF statistics data ready
+ * V4L2_EVENT_OMAP3ISP_HIST: Histogram statistics data ready
+ */
+
+#define V4L2_EVENT_OMAP3ISP_CLASS      (V4L2_EVENT_PRIVATE_START | 0x100)
+#define V4L2_EVENT_OMAP3ISP_AEWB       (V4L2_EVENT_OMAP3ISP_CLASS | 0x1)
+#define V4L2_EVENT_OMAP3ISP_AF         (V4L2_EVENT_OMAP3ISP_CLASS | 0x2)
+#define V4L2_EVENT_OMAP3ISP_HIST       (V4L2_EVENT_OMAP3ISP_CLASS | 0x3)
+
+struct omap3isp_stat_event_status {
+       __u32 frame_number;
+       __u16 config_counter;
+       __u8 buf_err;
+};
+
+/* AE/AWB related structures and flags*/
+
+/* H3A Range Constants */
+#define OMAP3ISP_AEWB_MAX_SATURATION_LIM       1023
+#define OMAP3ISP_AEWB_MIN_WIN_H                        2
+#define OMAP3ISP_AEWB_MAX_WIN_H                        256
+#define OMAP3ISP_AEWB_MIN_WIN_W                        6
+#define OMAP3ISP_AEWB_MAX_WIN_W                        256
+#define OMAP3ISP_AEWB_MIN_WINVC                        1
+#define OMAP3ISP_AEWB_MIN_WINHC                        1
+#define OMAP3ISP_AEWB_MAX_WINVC                        128
+#define OMAP3ISP_AEWB_MAX_WINHC                        36
+#define OMAP3ISP_AEWB_MAX_WINSTART             4095
+#define OMAP3ISP_AEWB_MIN_SUB_INC              2
+#define OMAP3ISP_AEWB_MAX_SUB_INC              32
+#define OMAP3ISP_AEWB_MAX_BUF_SIZE             83600
+
+#define OMAP3ISP_AF_IIRSH_MIN                  0
+#define OMAP3ISP_AF_IIRSH_MAX                  4095
+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN 1
+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX 36
+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN   1
+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX   128
+#define OMAP3ISP_AF_PAXEL_INCREMENT_MIN                2
+#define OMAP3ISP_AF_PAXEL_INCREMENT_MAX                32
+#define OMAP3ISP_AF_PAXEL_HEIGHT_MIN           2
+#define OMAP3ISP_AF_PAXEL_HEIGHT_MAX           256
+#define OMAP3ISP_AF_PAXEL_WIDTH_MIN            16
+#define OMAP3ISP_AF_PAXEL_WIDTH_MAX            256
+#define OMAP3ISP_AF_PAXEL_HZSTART_MIN          1
+#define OMAP3ISP_AF_PAXEL_HZSTART_MAX          4095
+#define OMAP3ISP_AF_PAXEL_VTSTART_MIN          0
+#define OMAP3ISP_AF_PAXEL_VTSTART_MAX          4095
+#define OMAP3ISP_AF_THRESHOLD_MAX              255
+#define OMAP3ISP_AF_COEF_MAX                   4095
+#define OMAP3ISP_AF_PAXEL_SIZE                 48
+#define OMAP3ISP_AF_MAX_BUF_SIZE               221184
+
+/**
+ * struct omap3isp_h3a_aewb_config - AE AWB configuration reset values
+ * saturation_limit: Saturation limit.
+ * @win_height: Window Height. Range 2 - 256, even values only.
+ * @win_width: Window Width. Range 6 - 256, even values only.
+ * @ver_win_count: Vertical Window Count. Range 1 - 128.
+ * @hor_win_count: Horizontal Window Count. Range 1 - 36.
+ * @ver_win_start: Vertical Window Start. Range 0 - 4095.
+ * @hor_win_start: Horizontal Window Start. Range 0 - 4095.
+ * @blk_ver_win_start: Black Vertical Windows Start. Range 0 - 4095.
+ * @blk_win_height: Black Window Height. Range 2 - 256, even values only.
+ * @subsample_ver_inc: Subsample Vertical points increment Range 2 - 32, even
+ *                     values only.
+ * @subsample_hor_inc: Subsample Horizontal points increment Range 2 - 32, even
+ *                     values only.
+ * @alaw_enable: AEW ALAW EN flag.
+ */
+struct omap3isp_h3a_aewb_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       /* Private fields */
+       __u16 saturation_limit;
+       __u16 win_height;
+       __u16 win_width;
+       __u16 ver_win_count;
+       __u16 hor_win_count;
+       __u16 ver_win_start;
+       __u16 hor_win_start;
+       __u16 blk_ver_win_start;
+       __u16 blk_win_height;
+       __u16 subsample_ver_inc;
+       __u16 subsample_hor_inc;
+       __u8 alaw_enable;
+};
+
+/**
+ * struct omap3isp_stat_data - Statistic data sent to or received from user
+ * @ts: Timestamp of returned framestats.
+ * @buf: Pointer to pass to user.
+ * @frame_number: Frame number of requested stats.
+ * @cur_frame: Current frame number being processed.
+ * @config_counter: Number of the configuration associated with the data.
+ */
+struct omap3isp_stat_data {
+       struct timeval ts;
+       void *buf;
+       __u32 buf_size;
+       __u16 frame_number;
+       __u16 cur_frame;
+       __u16 config_counter;
+};
+
+
+/* Histogram related structs */
+
+/* Flags for number of bins */
+#define OMAP3ISP_HIST_BINS_32          0
+#define OMAP3ISP_HIST_BINS_64          1
+#define OMAP3ISP_HIST_BINS_128         2
+#define OMAP3ISP_HIST_BINS_256         3
+
+/* Number of bins * 4 colors * 4-bytes word */
+#define OMAP3ISP_HIST_MEM_SIZE_BINS(n) ((1 << ((n)+5))*4*4)
+
+#define OMAP3ISP_HIST_MEM_SIZE         1024
+#define OMAP3ISP_HIST_MIN_REGIONS      1
+#define OMAP3ISP_HIST_MAX_REGIONS      4
+#define OMAP3ISP_HIST_MAX_WB_GAIN      255
+#define OMAP3ISP_HIST_MIN_WB_GAIN      0
+#define OMAP3ISP_HIST_MAX_BIT_WIDTH    14
+#define OMAP3ISP_HIST_MIN_BIT_WIDTH    8
+#define OMAP3ISP_HIST_MAX_WG           4
+#define OMAP3ISP_HIST_MAX_BUF_SIZE     4096
+
+/* Source */
+#define OMAP3ISP_HIST_SOURCE_CCDC      0
+#define OMAP3ISP_HIST_SOURCE_MEM       1
+
+/* CFA pattern */
+#define OMAP3ISP_HIST_CFA_BAYER                0
+#define OMAP3ISP_HIST_CFA_FOVEONX3     1
+
+struct omap3isp_hist_region {
+       __u16 h_start;
+       __u16 h_end;
+       __u16 v_start;
+       __u16 v_end;
+};
+
+struct omap3isp_hist_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       __u8 num_acc_frames;    /* Num of image frames to be processed and
+                                  accumulated for each histogram frame */
+       __u16 hist_bins;        /* number of bins: 32, 64, 128, or 256 */
+       __u8 cfa;               /* BAYER or FOVEON X3 */
+       __u8 wg[OMAP3ISP_HIST_MAX_WG];  /* White Balance Gain */
+       __u8 num_regions;       /* number of regions to be configured */
+       struct omap3isp_hist_region region[OMAP3ISP_HIST_MAX_REGIONS];
+};
+
+/* Auto Focus related structs */
+
+#define OMAP3ISP_AF_NUM_COEF           11
+
+enum omap3isp_h3a_af_fvmode {
+       OMAP3ISP_AF_MODE_SUMMED = 0,
+       OMAP3ISP_AF_MODE_PEAK = 1
+};
+
+/* Red, Green, and blue pixel location in the AF windows */
+enum omap3isp_h3a_af_rgbpos {
+       OMAP3ISP_AF_GR_GB_BAYER = 0,    /* GR and GB as Bayer pattern */
+       OMAP3ISP_AF_RG_GB_BAYER = 1,    /* RG and GB as Bayer pattern */
+       OMAP3ISP_AF_GR_BG_BAYER = 2,    /* GR and BG as Bayer pattern */
+       OMAP3ISP_AF_RG_BG_BAYER = 3,    /* RG and BG as Bayer pattern */
+       OMAP3ISP_AF_GG_RB_CUSTOM = 4,   /* GG and RB as custom pattern */
+       OMAP3ISP_AF_RB_GG_CUSTOM = 5    /* RB and GG as custom pattern */
+};
+
+/* Contains the information regarding the Horizontal Median Filter */
+struct omap3isp_h3a_af_hmf {
+       __u8 enable;    /* Status of Horizontal Median Filter */
+       __u8 threshold; /* Threshold Value for Horizontal Median Filter */
+};
+
+/* Contains the information regarding the IIR Filters */
+struct omap3isp_h3a_af_iir {
+       __u16 h_start;                  /* IIR horizontal start */
+       __u16 coeff_set0[OMAP3ISP_AF_NUM_COEF]; /* Filter coefficient, set 0 */
+       __u16 coeff_set1[OMAP3ISP_AF_NUM_COEF]; /* Filter coefficient, set 1 */
+};
+
+/* Contains the information regarding the Paxels Structure in AF Engine */
+struct omap3isp_h3a_af_paxel {
+       __u16 h_start;  /* Horizontal Start Position */
+       __u16 v_start;  /* Vertical Start Position */
+       __u8 width;     /* Width of the Paxel */
+       __u8 height;    /* Height of the Paxel */
+       __u8 h_cnt;     /* Horizontal Count */
+       __u8 v_cnt;     /* vertical Count */
+       __u8 line_inc;  /* Line Increment */
+};
+
+/* Contains the parameters required for hardware set up of AF Engine */
+struct omap3isp_h3a_af_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       struct omap3isp_h3a_af_hmf hmf;         /* HMF configurations */
+       struct omap3isp_h3a_af_iir iir;         /* IIR filter configurations */
+       struct omap3isp_h3a_af_paxel paxel;     /* Paxel parameters */
+       enum omap3isp_h3a_af_rgbpos rgb_pos;    /* RGB Positions */
+       enum omap3isp_h3a_af_fvmode fvmode;     /* Accumulator mode */
+       __u8 alaw_enable;                       /* AF ALAW status */
+};
+
+/* ISP CCDC structs */
+
+/* Abstraction layer CCDC configurations */
+#define OMAP3ISP_CCDC_ALAW             (1 << 0)
+#define OMAP3ISP_CCDC_LPF              (1 << 1)
+#define OMAP3ISP_CCDC_BLCLAMP          (1 << 2)
+#define OMAP3ISP_CCDC_BCOMP            (1 << 3)
+#define OMAP3ISP_CCDC_FPC              (1 << 4)
+#define OMAP3ISP_CCDC_CULL             (1 << 5)
+#define OMAP3ISP_CCDC_CONFIG_LSC       (1 << 7)
+#define OMAP3ISP_CCDC_TBL_LSC          (1 << 8)
+
+#define OMAP3ISP_RGB_MAX               3
+
+/* Enumeration constants for Alaw input width */
+enum omap3isp_alaw_ipwidth {
+       OMAP3ISP_ALAW_BIT12_3 = 0x3,
+       OMAP3ISP_ALAW_BIT11_2 = 0x4,
+       OMAP3ISP_ALAW_BIT10_1 = 0x5,
+       OMAP3ISP_ALAW_BIT9_0 = 0x6
+};
+
+/**
+ * struct omap3isp_ccdc_lsc_config - LSC configuration
+ * @offset: Table Offset of the gain table.
+ * @gain_mode_n: Vertical dimension of a paxel in LSC configuration.
+ * @gain_mode_m: Horizontal dimension of a paxel in LSC configuration.
+ * @gain_format: Gain table format.
+ * @fmtsph: Start pixel horizontal from start of the HS sync pulse.
+ * @fmtlnh: Number of pixels in horizontal direction to use for the data
+ *          reformatter.
+ * @fmtslv: Start line from start of VS sync pulse for the data reformatter.
+ * @fmtlnv: Number of lines in vertical direction for the data reformatter.
+ * @initial_x: X position, in pixels, of the first active pixel in reference
+ *             to the first active paxel. Must be an even number.
+ * @initial_y: Y position, in pixels, of the first active pixel in reference
+ *             to the first active paxel. Must be an even number.
+ * @size: Size of LSC gain table. Filled when loaded from userspace.
+ */
+struct omap3isp_ccdc_lsc_config {
+       __u16 offset;
+       __u8 gain_mode_n;
+       __u8 gain_mode_m;
+       __u8 gain_format;
+       __u16 fmtsph;
+       __u16 fmtlnh;
+       __u16 fmtslv;
+       __u16 fmtlnv;
+       __u8 initial_x;
+       __u8 initial_y;
+       __u32 size;
+};
+
+/**
+ * struct omap3isp_ccdc_bclamp - Optical & Digital black clamp subtract
+ * @obgain: Optical black average gain.
+ * @obstpixel: Start Pixel w.r.t. HS pulse in Optical black sample.
+ * @oblines: Optical Black Sample lines.
+ * @oblen: Optical Black Sample Length.
+ * @dcsubval: Digital Black Clamp subtract value.
+ */
+struct omap3isp_ccdc_bclamp {
+       __u8 obgain;
+       __u8 obstpixel;
+       __u8 oblines;
+       __u8 oblen;
+       __u16 dcsubval;
+};
+
+/**
+ * struct omap3isp_ccdc_fpc - Faulty Pixels Correction
+ * @fpnum: Number of faulty pixels to be corrected in the frame.
+ * @fpcaddr: Memory address of the FPC Table
+ */
+struct omap3isp_ccdc_fpc {
+       __u16 fpnum;
+       __u32 fpcaddr;
+};
+
+/**
+ * struct omap3isp_ccdc_blcomp - Black Level Compensation parameters
+ * @b_mg: B/Mg pixels. 2's complement. -128 to +127.
+ * @gb_g: Gb/G pixels. 2's complement. -128 to +127.
+ * @gr_cy: Gr/Cy pixels. 2's complement. -128 to +127.
+ * @r_ye: R/Ye pixels. 2's complement. -128 to +127.
+ */
+struct omap3isp_ccdc_blcomp {
+       __u8 b_mg;
+       __u8 gb_g;
+       __u8 gr_cy;
+       __u8 r_ye;
+};
+
+/**
+ * omap3isp_ccdc_culling - Culling parameters
+ * @v_pattern: Vertical culling pattern.
+ * @h_odd: Horizontal Culling pattern for odd lines.
+ * @h_even: Horizontal Culling pattern for even lines.
+ */
+struct omap3isp_ccdc_culling {
+       __u8 v_pattern;
+       __u16 h_odd;
+       __u16 h_even;
+};
+
+/**
+ * omap3isp_ccdc_update_config - CCDC configuration
+ * @update: Specifies which CCDC registers should be updated.
+ * @flag: Specifies which CCDC functions should be enabled.
+ * @alawip: Enable/Disable A-Law compression.
+ * @bclamp: Black clamp control register.
+ * @blcomp: Black level compensation value for RGrGbB Pixels. 2's complement.
+ * @fpc: Number of faulty pixels corrected in the frame, address of FPC table.
+ * @cull: Cull control register.
+ * @lsc: Pointer to LSC gain table.
+ */
+struct omap3isp_ccdc_update_config {
+       __u16 update;
+       __u16 flag;
+       enum omap3isp_alaw_ipwidth alawip;
+       struct omap3isp_ccdc_bclamp *bclamp;
+       struct omap3isp_ccdc_blcomp *blcomp;
+       struct omap3isp_ccdc_fpc *fpc;
+       struct omap3isp_ccdc_lsc_config *lsc_cfg;
+       struct omap3isp_ccdc_culling *cull;
+       __u8 *lsc;
+};
+
+/* Preview configurations */
+#define OMAP3ISP_PREV_LUMAENH          (1 << 0)
+#define OMAP3ISP_PREV_INVALAW          (1 << 1)
+#define OMAP3ISP_PREV_HRZ_MED          (1 << 2)
+#define OMAP3ISP_PREV_CFA              (1 << 3)
+#define OMAP3ISP_PREV_CHROMA_SUPP      (1 << 4)
+#define OMAP3ISP_PREV_WB               (1 << 5)
+#define OMAP3ISP_PREV_BLKADJ           (1 << 6)
+#define OMAP3ISP_PREV_RGB2RGB          (1 << 7)
+#define OMAP3ISP_PREV_COLOR_CONV       (1 << 8)
+#define OMAP3ISP_PREV_YC_LIMIT         (1 << 9)
+#define OMAP3ISP_PREV_DEFECT_COR       (1 << 10)
+/* Bit 11 was OMAP3ISP_PREV_GAMMABYPASS, now merged with OMAP3ISP_PREV_GAMMA */
+#define OMAP3ISP_PREV_DRK_FRM_CAPTURE  (1 << 12)
+#define OMAP3ISP_PREV_DRK_FRM_SUBTRACT (1 << 13)
+#define OMAP3ISP_PREV_LENS_SHADING     (1 << 14)
+#define OMAP3ISP_PREV_NF               (1 << 15)
+#define OMAP3ISP_PREV_GAMMA            (1 << 16)
+
+#define OMAP3ISP_PREV_NF_TBL_SIZE      64
+#define OMAP3ISP_PREV_CFA_TBL_SIZE     576
+#define OMAP3ISP_PREV_CFA_BLK_SIZE     (OMAP3ISP_PREV_CFA_TBL_SIZE / 4)
+#define OMAP3ISP_PREV_GAMMA_TBL_SIZE   1024
+#define OMAP3ISP_PREV_YENH_TBL_SIZE    128
+
+#define OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS  4
+
+/**
+ * struct omap3isp_prev_hmed - Horizontal Median Filter
+ * @odddist: Distance between consecutive pixels of same color in the odd line.
+ * @evendist: Distance between consecutive pixels of same color in the even
+ *            line.
+ * @thres: Horizontal median filter threshold.
+ */
+struct omap3isp_prev_hmed {
+       __u8 odddist;
+       __u8 evendist;
+       __u8 thres;
+};
+
+/*
+ * Enumeration for CFA Formats supported by preview
+ */
+enum omap3isp_cfa_fmt {
+       OMAP3ISP_CFAFMT_BAYER,
+       OMAP3ISP_CFAFMT_SONYVGA,
+       OMAP3ISP_CFAFMT_RGBFOVEON,
+       OMAP3ISP_CFAFMT_DNSPL,
+       OMAP3ISP_CFAFMT_HONEYCOMB,
+       OMAP3ISP_CFAFMT_RRGGBBFOVEON
+};
+
+/**
+ * struct omap3isp_prev_cfa - CFA Interpolation
+ * @format: CFA Format Enum value supported by preview.
+ * @gradthrs_vert: CFA Gradient Threshold - Vertical.
+ * @gradthrs_horz: CFA Gradient Threshold - Horizontal.
+ * @table: Pointer to the CFA table.
+ */
+struct omap3isp_prev_cfa {
+       enum omap3isp_cfa_fmt format;
+       __u8 gradthrs_vert;
+       __u8 gradthrs_horz;
+       __u32 table[4][OMAP3ISP_PREV_CFA_BLK_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_csup - Chrominance Suppression
+ * @gain: Gain.
+ * @thres: Threshold.
+ * @hypf_en: Flag to enable/disable the High Pass Filter.
+ */
+struct omap3isp_prev_csup {
+       __u8 gain;
+       __u8 thres;
+       __u8 hypf_en;
+};
+
+/**
+ * struct omap3isp_prev_wbal - White Balance
+ * @dgain: Digital gain (U10Q8).
+ * @coef3: White balance gain - COEF 3 (U8Q5).
+ * @coef2: White balance gain - COEF 2 (U8Q5).
+ * @coef1: White balance gain - COEF 1 (U8Q5).
+ * @coef0: White balance gain - COEF 0 (U8Q5).
+ */
+struct omap3isp_prev_wbal {
+       __u16 dgain;
+       __u8 coef3;
+       __u8 coef2;
+       __u8 coef1;
+       __u8 coef0;
+};
+
+/**
+ * struct omap3isp_prev_blkadj - Black Level Adjustment
+ * @red: Black level offset adjustment for Red in 2's complement format
+ * @green: Black level offset adjustment for Green in 2's complement format
+ * @blue: Black level offset adjustment for Blue in 2's complement format
+ */
+struct omap3isp_prev_blkadj {
+       /*Black level offset adjustment for Red in 2's complement format */
+       __u8 red;
+       /*Black level offset adjustment for Green in 2's complement format */
+       __u8 green;
+       /* Black level offset adjustment for Blue in 2's complement format */
+       __u8 blue;
+};
+
+/**
+ * struct omap3isp_prev_rgbtorgb - RGB to RGB Blending
+ * @matrix: Blending values(S12Q8 format)
+ *              [RR] [GR] [BR]
+ *              [RG] [GG] [BG]
+ *              [RB] [GB] [BB]
+ * @offset: Blending offset value for R,G,B in 2's complement integer format.
+ */
+struct omap3isp_prev_rgbtorgb {
+       __u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
+       __u16 offset[OMAP3ISP_RGB_MAX];
+};
+
+/**
+ * struct omap3isp_prev_csc - Color Space Conversion from RGB-YCbYCr
+ * @matrix: Color space conversion coefficients(S10Q8)
+ *              [CSCRY]  [CSCGY]  [CSCBY]
+ *              [CSCRCB] [CSCGCB] [CSCBCB]
+ *              [CSCRCR] [CSCGCR] [CSCBCR]
+ * @offset: CSC offset values for Y offset, CB offset and CR offset respectively
+ */
+struct omap3isp_prev_csc {
+       __u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
+       __s16 offset[OMAP3ISP_RGB_MAX];
+};
+
+/**
+ * struct omap3isp_prev_yclimit - Y, C Value Limit
+ * @minC: Minimum C value
+ * @maxC: Maximum C value
+ * @minY: Minimum Y value
+ * @maxY: Maximum Y value
+ */
+struct omap3isp_prev_yclimit {
+       __u8 minC;
+       __u8 maxC;
+       __u8 minY;
+       __u8 maxY;
+};
+
+/**
+ * struct omap3isp_prev_dcor - Defect correction
+ * @couplet_mode_en: Flag to enable or disable the couplet dc Correction in NF
+ * @detect_correct: Thresholds for correction bit 0:10 detect 16:25 correct
+ */
+struct omap3isp_prev_dcor {
+       __u8 couplet_mode_en;
+       __u32 detect_correct[OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS];
+};
+
+/**
+ * struct omap3isp_prev_nf - Noise Filter
+ * @spread: Spread value to be used in Noise Filter
+ * @table: Pointer to the Noise Filter table
+ */
+struct omap3isp_prev_nf {
+       __u8 spread;
+       __u32 table[OMAP3ISP_PREV_NF_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_gtables - Gamma correction tables
+ * @red: Array for red gamma table.
+ * @green: Array for green gamma table.
+ * @blue: Array for blue gamma table.
+ */
+struct omap3isp_prev_gtables {
+       __u32 red[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+       __u32 green[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+       __u32 blue[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_luma - Luma enhancement
+ * @table: Array for luma enhancement table.
+ */
+struct omap3isp_prev_luma {
+       __u32 table[OMAP3ISP_PREV_YENH_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_update_config - Preview engine configuration (user)
+ * @update: Specifies which ISP Preview registers should be updated.
+ * @flag: Specifies which ISP Preview functions should be enabled.
+ * @shading_shift: 3bit value of shift used in shading compensation.
+ * @luma: Pointer to luma enhancement structure.
+ * @hmed: Pointer to structure containing the odd and even distance.
+ *        between the pixels in the image along with the filter threshold.
+ * @cfa: Pointer to structure containing the CFA interpolation table, CFA.
+ *       format in the image, vertical and horizontal gradient threshold.
+ * @csup: Pointer to Structure for Chrominance Suppression coefficients.
+ * @wbal: Pointer to structure for White Balance.
+ * @blkadj: Pointer to structure for Black Adjustment.
+ * @rgb2rgb: Pointer to structure for RGB to RGB Blending.
+ * @csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr.
+ * @yclimit: Pointer to structure for Y, C Value Limit.
+ * @dcor: Pointer to structure for defect correction.
+ * @nf: Pointer to structure for Noise Filter
+ * @gamma: Pointer to gamma structure.
+ */
+struct omap3isp_prev_update_config {
+       __u32 update;
+       __u32 flag;
+       __u32 shading_shift;
+       struct omap3isp_prev_luma *luma;
+       struct omap3isp_prev_hmed *hmed;
+       struct omap3isp_prev_cfa *cfa;
+       struct omap3isp_prev_csup *csup;
+       struct omap3isp_prev_wbal *wbal;
+       struct omap3isp_prev_blkadj *blkadj;
+       struct omap3isp_prev_rgbtorgb *rgb2rgb;
+       struct omap3isp_prev_csc *csc;
+       struct omap3isp_prev_yclimit *yclimit;
+       struct omap3isp_prev_dcor *dcor;
+       struct omap3isp_prev_nf *nf;
+       struct omap3isp_prev_gtables *gamma;
+};
+
+#endif /* OMAP3_ISP_USER_H */
diff --git a/lib/libdss-include/include/linux/omapfb.h b/lib/libdss-include/include/linux/omapfb.h
new file mode 100644 (file)
index 0000000..9563f61
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * File: include/linux/omapfb.h
+ *
+ * Framebuffer driver for TI OMAP boards
+ *
+ * Copyright (C) 2004 Nokia Corporation
+ * Author: Imre Deak <imre.deak@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __LINUX_OMAPFB_H__
+#define __LINUX_OMAPFB_H__
+
+#include <linux/fb.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* IOCTL commands. */
+
+#define OMAP_IOW(num, dtype)   _IOW('O', num, dtype)
+#define OMAP_IOR(num, dtype)   _IOR('O', num, dtype)
+#define OMAP_IOWR(num, dtype)  _IOWR('O', num, dtype)
+#define OMAP_IO(num)           _IO('O', num)
+
+#define OMAPFB_MIRROR          OMAP_IOW(31, int)
+#define OMAPFB_SYNC_GFX                OMAP_IO(37)
+#define OMAPFB_VSYNC           OMAP_IO(38)
+#define OMAPFB_SET_UPDATE_MODE OMAP_IOW(40, int)
+#define OMAPFB_GET_CAPS                OMAP_IOR(42, struct omapfb_caps)
+#define OMAPFB_GET_UPDATE_MODE OMAP_IOW(43, int)
+#define OMAPFB_LCD_TEST                OMAP_IOW(45, int)
+#define OMAPFB_CTRL_TEST       OMAP_IOW(46, int)
+#define OMAPFB_UPDATE_WINDOW_OLD OMAP_IOW(47, struct omapfb_update_window_old)
+#define OMAPFB_SET_COLOR_KEY   OMAP_IOW(50, struct omapfb_color_key)
+#define OMAPFB_GET_COLOR_KEY   OMAP_IOW(51, struct omapfb_color_key)
+#define OMAPFB_SETUP_PLANE     OMAP_IOW(52, struct omapfb_plane_info)
+#define OMAPFB_QUERY_PLANE     OMAP_IOW(53, struct omapfb_plane_info)
+#define OMAPFB_UPDATE_WINDOW   OMAP_IOW(54, struct omapfb_update_window)
+#define OMAPFB_SETUP_MEM       OMAP_IOW(55, struct omapfb_mem_info)
+#define OMAPFB_QUERY_MEM       OMAP_IOW(56, struct omapfb_mem_info)
+#define OMAPFB_WAITFORVSYNC    OMAP_IO(57)
+#define OMAPFB_MEMORY_READ     OMAP_IOR(58, struct omapfb_memory_read)
+#define OMAPFB_GET_OVERLAY_COLORMODE OMAP_IOR(59, struct omapfb_ovl_colormode)
+#define OMAPFB_WAITFORGO       OMAP_IO(60)
+#define OMAPFB_GET_VRAM_INFO   OMAP_IOR(61, struct omapfb_vram_info)
+#define OMAPFB_SET_TEARSYNC    OMAP_IOW(62, struct omapfb_tearsync_info)
+#define OMAPFB_GET_DISPLAY_INFO        OMAP_IOR(63, struct omapfb_display_info)
+
+#define OMAPFB_CAPS_GENERIC_MASK       0x00000fff
+#define OMAPFB_CAPS_LCDC_MASK          0x00fff000
+#define OMAPFB_CAPS_PANEL_MASK         0xff000000
+
+#define OMAPFB_CAPS_MANUAL_UPDATE      0x00001000
+#define OMAPFB_CAPS_TEARSYNC           0x00002000
+#define OMAPFB_CAPS_PLANE_RELOCATE_MEM 0x00004000
+#define OMAPFB_CAPS_PLANE_SCALE                0x00008000
+#define OMAPFB_CAPS_WINDOW_PIXEL_DOUBLE        0x00010000
+#define OMAPFB_CAPS_WINDOW_SCALE       0x00020000
+#define OMAPFB_CAPS_WINDOW_OVERLAY     0x00040000
+#define OMAPFB_CAPS_WINDOW_ROTATE      0x00080000
+#define OMAPFB_CAPS_SET_BACKLIGHT      0x01000000
+
+/* Values from DSP must map to lower 16-bits */
+#define OMAPFB_FORMAT_MASK             0x00ff
+#define OMAPFB_FORMAT_FLAG_DOUBLE      0x0100
+#define OMAPFB_FORMAT_FLAG_TEARSYNC    0x0200
+#define OMAPFB_FORMAT_FLAG_FORCE_VSYNC 0x0400
+#define OMAPFB_FORMAT_FLAG_ENABLE_OVERLAY      0x0800
+#define OMAPFB_FORMAT_FLAG_DISABLE_OVERLAY     0x1000
+
+#define OMAPFB_MEMTYPE_SDRAM           0
+#define OMAPFB_MEMTYPE_SRAM            1
+#define OMAPFB_MEMTYPE_MAX             1
+
+#define OMAPFB_MEM_IDX_ENABLED 0x80
+#define OMAPFB_MEM_IDX_MASK    0x7f
+
+enum omapfb_color_format {
+       OMAPFB_COLOR_RGB565 = 0,
+       OMAPFB_COLOR_YUV422,
+       OMAPFB_COLOR_YUV420,
+       OMAPFB_COLOR_CLUT_8BPP,
+       OMAPFB_COLOR_CLUT_4BPP,
+       OMAPFB_COLOR_CLUT_2BPP,
+       OMAPFB_COLOR_CLUT_1BPP,
+       OMAPFB_COLOR_RGB444,
+       OMAPFB_COLOR_YUY422,
+
+       OMAPFB_COLOR_ARGB16,
+       OMAPFB_COLOR_RGB24U,    /* RGB24, 32-bit container */
+       OMAPFB_COLOR_RGB24P,    /* RGB24, 24-bit container */
+       OMAPFB_COLOR_ARGB32,
+       OMAPFB_COLOR_RGBA32,
+       OMAPFB_COLOR_RGBX32,
+};
+
+struct omapfb_update_window {
+       __u32 x, y;
+       __u32 width, height;
+       __u32 format;
+       __u32 out_x, out_y;
+       __u32 out_width, out_height;
+       __u32 reserved[8];
+};
+
+struct omapfb_update_window_old {
+       __u32 x, y;
+       __u32 width, height;
+       __u32 format;
+};
+
+enum omapfb_plane {
+       OMAPFB_PLANE_GFX = 0,
+       OMAPFB_PLANE_VID1,
+       OMAPFB_PLANE_VID2,
+};
+
+enum omapfb_channel_out {
+       OMAPFB_CHANNEL_OUT_LCD = 0,
+       OMAPFB_CHANNEL_OUT_DIGIT,
+};
+
+struct omapfb_plane_info {
+       __u32 pos_x;
+       __u32 pos_y;
+       __u8  enabled;
+       __u8  channel_out;
+       __u8  mirror;
+       __u8  mem_idx;
+       __u32 out_width;
+       __u32 out_height;
+       __u32 reserved2[12];
+};
+
+struct omapfb_mem_info {
+       __u32 size;
+       __u8  type;
+       __u8  reserved[3];
+};
+
+struct omapfb_caps {
+       __u32 ctrl;
+       __u32 plane_color;
+       __u32 wnd_color;
+};
+
+enum omapfb_color_key_type {
+       OMAPFB_COLOR_KEY_DISABLED = 0,
+       OMAPFB_COLOR_KEY_GFX_DST,
+       OMAPFB_COLOR_KEY_VID_SRC,
+};
+
+struct omapfb_color_key {
+       __u8  channel_out;
+       __u32 background;
+       __u32 trans_key;
+       __u8  key_type;
+};
+
+enum omapfb_update_mode {
+       OMAPFB_UPDATE_DISABLED = 0,
+       OMAPFB_AUTO_UPDATE,
+       OMAPFB_MANUAL_UPDATE
+};
+
+struct omapfb_memory_read {
+       __u16 x;
+       __u16 y;
+       __u16 w;
+       __u16 h;
+       size_t buffer_size;
+       void *buffer;
+};
+
+struct omapfb_ovl_colormode {
+       __u8 overlay_idx;
+       __u8 mode_idx;
+       __u32 bits_per_pixel;
+       __u32 nonstd;
+       struct fb_bitfield red;
+       struct fb_bitfield green;
+       struct fb_bitfield blue;
+       struct fb_bitfield transp;
+};
+
+struct omapfb_vram_info {
+       __u32 total;
+       __u32 free;
+       __u32 largest_free_block;
+       __u32 reserved[5];
+};
+
+struct omapfb_tearsync_info {
+       __u8 enabled;
+       __u8 reserved1[3];
+       __u16 line;
+       __u16 reserved2;
+};
+
+struct omapfb_display_info {
+       __u16 xres;
+       __u16 yres;
+       __u32 width;    /* phys width of the display in micrometers */
+       __u32 height;   /* phys height of the display in micrometers */
+       __u32 reserved[5];
+};
+
+
+#endif /* __LINUX_OMAPFB_H__ */
diff --git a/lib/libdss-include/include/linux/oom.h b/lib/libdss-include/include/linux/oom.h
new file mode 100644 (file)
index 0000000..ca6c46e
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __INCLUDE_LINUX_OOM_H
+#define __INCLUDE_LINUX_OOM_H
+
+/*
+ * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for
+ * pid.
+ */
+#define OOM_SCORE_ADJ_MIN      (-1000)
+#define OOM_SCORE_ADJ_MAX      1000
+
+/*
+ * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy
+ * purposes.
+ */
+#define OOM_DISABLE (-17)
+/* inclusive */
+#define OOM_ADJUST_MIN (-16)
+#define OOM_ADJUST_MAX 15
+
+#endif /* __INCLUDE_LINUX_OOM_H */
diff --git a/lib/libdss-include/include/linux/openvswitch.h b/lib/libdss-include/include/linux/openvswitch.h
new file mode 100644 (file)
index 0000000..ede106e
--- /dev/null
@@ -0,0 +1,711 @@
+
+/*
+ * Copyright (c) 2007-2013 Nicira, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifndef __LINUX_OPENVSWITCH_H
+#define __LINUX_OPENVSWITCH_H 1
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/**
+ * struct ovs_header - header for OVS Generic Netlink messages.
+ * @dp_ifindex: ifindex of local port for datapath (0 to make a request not
+ * specific to a datapath).
+ *
+ * Attributes following the header are specific to a particular OVS Generic
+ * Netlink family, but all of the OVS families use this header.
+ */
+
+struct ovs_header {
+       int dp_ifindex;
+};
+
+/* Datapaths. */
+
+#define OVS_DATAPATH_FAMILY  "ovs_datapath"
+#define OVS_DATAPATH_MCGROUP "ovs_datapath"
+
+/* V2:
+ *   - API users are expected to provide OVS_DP_ATTR_USER_FEATURES
+ *     when creating the datapath.
+ */
+#define OVS_DATAPATH_VERSION 2
+
+/* First OVS datapath version to support features */
+#define OVS_DP_VER_FEATURES 2
+
+enum ovs_datapath_cmd {
+       OVS_DP_CMD_UNSPEC,
+       OVS_DP_CMD_NEW,
+       OVS_DP_CMD_DEL,
+       OVS_DP_CMD_GET,
+       OVS_DP_CMD_SET
+};
+
+/**
+ * enum ovs_datapath_attr - attributes for %OVS_DP_* commands.
+ * @OVS_DP_ATTR_NAME: Name of the network device that serves as the "local
+ * port".  This is the name of the network device whose dp_ifindex is given in
+ * the &struct ovs_header.  Always present in notifications.  Required in
+ * %OVS_DP_NEW requests.  May be used as an alternative to specifying
+ * dp_ifindex in other requests (with a dp_ifindex of 0).
+ * @OVS_DP_ATTR_UPCALL_PID: The Netlink socket in userspace that is initially
+ * set on the datapath port (for OVS_ACTION_ATTR_MISS).  Only valid on
+ * %OVS_DP_CMD_NEW requests. A value of zero indicates that upcalls should
+ * not be sent.
+ * @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the
+ * datapath.  Always present in notifications.
+ * @OVS_DP_ATTR_MEGAFLOW_STATS: Statistics about mega flow masks usage for the
+ * datapath. Always present in notifications.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_DP_* commands.
+ */
+enum ovs_datapath_attr {
+       OVS_DP_ATTR_UNSPEC,
+       OVS_DP_ATTR_NAME,               /* name of dp_ifindex netdev */
+       OVS_DP_ATTR_UPCALL_PID,         /* Netlink PID to receive upcalls */
+       OVS_DP_ATTR_STATS,              /* struct ovs_dp_stats */
+       OVS_DP_ATTR_MEGAFLOW_STATS,     /* struct ovs_dp_megaflow_stats */
+       OVS_DP_ATTR_USER_FEATURES,      /* OVS_DP_F_*  */
+       __OVS_DP_ATTR_MAX
+};
+
+#define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1)
+
+struct ovs_dp_stats {
+       __u64 n_hit;             /* Number of flow table matches. */
+       __u64 n_missed;          /* Number of flow table misses. */
+       __u64 n_lost;            /* Number of misses not sent to userspace. */
+       __u64 n_flows;           /* Number of flows present */
+};
+
+struct ovs_dp_megaflow_stats {
+       __u64 n_mask_hit;        /* Number of masks used for flow lookups. */
+       __u32 n_masks;           /* Number of masks for the datapath. */
+       __u32 pad0;              /* Pad for future expension. */
+       __u64 pad1;              /* Pad for future expension. */
+       __u64 pad2;              /* Pad for future expension. */
+};
+
+struct ovs_vport_stats {
+       __u64   rx_packets;             /* total packets received       */
+       __u64   tx_packets;             /* total packets transmitted    */
+       __u64   rx_bytes;               /* total bytes received         */
+       __u64   tx_bytes;               /* total bytes transmitted      */
+       __u64   rx_errors;              /* bad packets received         */
+       __u64   tx_errors;              /* packet transmit problems     */
+       __u64   rx_dropped;             /* no space in linux buffers    */
+       __u64   tx_dropped;             /* no space available in linux  */
+};
+
+/* Allow last Netlink attribute to be unaligned */
+#define OVS_DP_F_UNALIGNED     (1 << 0)
+
+/* Allow datapath to associate multiple Netlink PIDs to each vport */
+#define OVS_DP_F_VPORT_PIDS    (1 << 1)
+
+/* Fixed logical ports. */
+#define OVSP_LOCAL      ((__u32)0)
+
+/* Packet transfer. */
+
+#define OVS_PACKET_FAMILY "ovs_packet"
+#define OVS_PACKET_VERSION 0x1
+
+enum ovs_packet_cmd {
+       OVS_PACKET_CMD_UNSPEC,
+
+       /* Kernel-to-user notifications. */
+       OVS_PACKET_CMD_MISS,    /* Flow table miss. */
+       OVS_PACKET_CMD_ACTION,  /* OVS_ACTION_ATTR_USERSPACE action. */
+
+       /* Userspace commands. */
+       OVS_PACKET_CMD_EXECUTE  /* Apply actions to a packet. */
+};
+
+/**
+ * enum ovs_packet_attr - attributes for %OVS_PACKET_* commands.
+ * @OVS_PACKET_ATTR_PACKET: Present for all notifications.  Contains the entire
+ * packet as received, from the start of the Ethernet header onward.  For
+ * %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PACKET reflects changes made by
+ * actions preceding %OVS_ACTION_ATTR_USERSPACE, but %OVS_PACKET_ATTR_KEY is
+ * the flow key extracted from the packet as originally received.
+ * @OVS_PACKET_ATTR_KEY: Present for all notifications.  Contains the flow key
+ * extracted from the packet as nested %OVS_KEY_ATTR_* attributes.  This allows
+ * userspace to adapt its flow setup strategy by comparing its notion of the
+ * flow key against the kernel's.
+ * @OVS_PACKET_ATTR_ACTIONS: Contains actions for the packet.  Used
+ * for %OVS_PACKET_CMD_EXECUTE.  It has nested %OVS_ACTION_ATTR_* attributes.
+ * Also used in upcall when %OVS_ACTION_ATTR_USERSPACE has optional
+ * %OVS_USERSPACE_ATTR_ACTIONS attribute.
+ * @OVS_PACKET_ATTR_USERDATA: Present for an %OVS_PACKET_CMD_ACTION
+ * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
+ * %OVS_USERSPACE_ATTR_USERDATA attribute, with the same length and content
+ * specified there.
+ * @OVS_PACKET_ATTR_EGRESS_TUN_KEY: Present for an %OVS_PACKET_CMD_ACTION
+ * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
+ * %OVS_USERSPACE_ATTR_EGRESS_TUN_PORT attribute, which is sent only if the
+ * output port is actually a tunnel port. Contains the output tunnel key
+ * extracted from the packet as nested %OVS_TUNNEL_KEY_ATTR_* attributes.
+ * @OVS_PACKET_ATTR_MRU: Present for an %OVS_PACKET_CMD_ACTION and
+ * %OVS_PACKET_ATTR_USERSPACE action specify the Maximum received fragment
+ * size.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_PACKET_* commands.
+ */
+enum ovs_packet_attr {
+       OVS_PACKET_ATTR_UNSPEC,
+       OVS_PACKET_ATTR_PACKET,      /* Packet data. */
+       OVS_PACKET_ATTR_KEY,         /* Nested OVS_KEY_ATTR_* attributes. */
+       OVS_PACKET_ATTR_ACTIONS,     /* Nested OVS_ACTION_ATTR_* attributes. */
+       OVS_PACKET_ATTR_USERDATA,    /* OVS_ACTION_ATTR_USERSPACE arg. */
+       OVS_PACKET_ATTR_EGRESS_TUN_KEY,  /* Nested OVS_TUNNEL_KEY_ATTR_*
+                                           attributes. */
+       OVS_PACKET_ATTR_UNUSED1,
+       OVS_PACKET_ATTR_UNUSED2,
+       OVS_PACKET_ATTR_PROBE,      /* Packet operation is a feature probe,
+                                      error logging should be suppressed. */
+       OVS_PACKET_ATTR_MRU,        /* Maximum received IP fragment size. */
+       __OVS_PACKET_ATTR_MAX
+};
+
+#define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR_MAX - 1)
+
+/* Virtual ports. */
+
+#define OVS_VPORT_FAMILY  "ovs_vport"
+#define OVS_VPORT_MCGROUP "ovs_vport"
+#define OVS_VPORT_VERSION 0x1
+
+enum ovs_vport_cmd {
+       OVS_VPORT_CMD_UNSPEC,
+       OVS_VPORT_CMD_NEW,
+       OVS_VPORT_CMD_DEL,
+       OVS_VPORT_CMD_GET,
+       OVS_VPORT_CMD_SET
+};
+
+enum ovs_vport_type {
+       OVS_VPORT_TYPE_UNSPEC,
+       OVS_VPORT_TYPE_NETDEV,   /* network device */
+       OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */
+       OVS_VPORT_TYPE_GRE,      /* GRE tunnel. */
+       OVS_VPORT_TYPE_VXLAN,    /* VXLAN tunnel. */
+       OVS_VPORT_TYPE_GENEVE,   /* Geneve tunnel. */
+       __OVS_VPORT_TYPE_MAX
+};
+
+#define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_MAX - 1)
+
+/**
+ * enum ovs_vport_attr - attributes for %OVS_VPORT_* commands.
+ * @OVS_VPORT_ATTR_PORT_NO: 32-bit port number within datapath.
+ * @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYPE_* constant describing the type
+ * of vport.
+ * @OVS_VPORT_ATTR_NAME: Name of vport.  For a vport based on a network device
+ * this is the name of the network device.  Maximum length %IFNAMSIZ-1 bytes
+ * plus a null terminator.
+ * @OVS_VPORT_ATTR_OPTIONS: Vport-specific configuration information.
+ * @OVS_VPORT_ATTR_UPCALL_PID: The array of Netlink socket pids in userspace
+ * among which OVS_PACKET_CMD_MISS upcalls will be distributed for packets
+ * received on this port.  If this is a single-element array of value 0,
+ * upcalls should not be sent.
+ * @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_stats giving statistics for
+ * packets sent or received through the vport.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_VPORT_* commands.
+ *
+ * For %OVS_VPORT_CMD_NEW requests, the %OVS_VPORT_ATTR_TYPE and
+ * %OVS_VPORT_ATTR_NAME attributes are required.  %OVS_VPORT_ATTR_PORT_NO is
+ * optional; if not specified a free port number is automatically selected.
+ * Whether %OVS_VPORT_ATTR_OPTIONS is required or optional depends on the type
+ * of vport.
+ *
+ * For other requests, if %OVS_VPORT_ATTR_NAME is specified then it is used to
+ * look up the vport to operate on; otherwise dp_idx from the &struct
+ * ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport.
+ */
+enum ovs_vport_attr {
+       OVS_VPORT_ATTR_UNSPEC,
+       OVS_VPORT_ATTR_PORT_NO, /* u32 port number within datapath */
+       OVS_VPORT_ATTR_TYPE,    /* u32 OVS_VPORT_TYPE_* constant. */
+       OVS_VPORT_ATTR_NAME,    /* string name, up to IFNAMSIZ bytes long */
+       OVS_VPORT_ATTR_OPTIONS, /* nested attributes, varies by vport type */
+       OVS_VPORT_ATTR_UPCALL_PID, /* array of u32 Netlink socket PIDs for */
+                               /* receiving upcalls */
+       OVS_VPORT_ATTR_STATS,   /* struct ovs_vport_stats */
+       __OVS_VPORT_ATTR_MAX
+};
+
+#define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1)
+
+enum {
+       OVS_VXLAN_EXT_UNSPEC,
+       OVS_VXLAN_EXT_GBP,      /* Flag or __u32 */
+       __OVS_VXLAN_EXT_MAX,
+};
+
+#define OVS_VXLAN_EXT_MAX (__OVS_VXLAN_EXT_MAX - 1)
+
+
+/* OVS_VPORT_ATTR_OPTIONS attributes for tunnels.
+ */
+enum {
+       OVS_TUNNEL_ATTR_UNSPEC,
+       OVS_TUNNEL_ATTR_DST_PORT, /* 16-bit UDP port, used by L4 tunnels. */
+       OVS_TUNNEL_ATTR_EXTENSION,
+       __OVS_TUNNEL_ATTR_MAX
+};
+
+#define OVS_TUNNEL_ATTR_MAX (__OVS_TUNNEL_ATTR_MAX - 1)
+
+/* Flows. */
+
+#define OVS_FLOW_FAMILY  "ovs_flow"
+#define OVS_FLOW_MCGROUP "ovs_flow"
+#define OVS_FLOW_VERSION 0x1
+
+enum ovs_flow_cmd {
+       OVS_FLOW_CMD_UNSPEC,
+       OVS_FLOW_CMD_NEW,
+       OVS_FLOW_CMD_DEL,
+       OVS_FLOW_CMD_GET,
+       OVS_FLOW_CMD_SET
+};
+
+struct ovs_flow_stats {
+       __u64 n_packets;         /* Number of matched packets. */
+       __u64 n_bytes;           /* Number of matched bytes. */
+};
+
+enum ovs_key_attr {
+       OVS_KEY_ATTR_UNSPEC,
+       OVS_KEY_ATTR_ENCAP,     /* Nested set of encapsulated attributes. */
+       OVS_KEY_ATTR_PRIORITY,  /* u32 skb->priority */
+       OVS_KEY_ATTR_IN_PORT,   /* u32 OVS dp port number */
+       OVS_KEY_ATTR_ETHERNET,  /* struct ovs_key_ethernet */
+       OVS_KEY_ATTR_VLAN,      /* be16 VLAN TCI */
+       OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethernet type */
+       OVS_KEY_ATTR_IPV4,      /* struct ovs_key_ipv4 */
+       OVS_KEY_ATTR_IPV6,      /* struct ovs_key_ipv6 */
+       OVS_KEY_ATTR_TCP,       /* struct ovs_key_tcp */
+       OVS_KEY_ATTR_UDP,       /* struct ovs_key_udp */
+       OVS_KEY_ATTR_ICMP,      /* struct ovs_key_icmp */
+       OVS_KEY_ATTR_ICMPV6,    /* struct ovs_key_icmpv6 */
+       OVS_KEY_ATTR_ARP,       /* struct ovs_key_arp */
+       OVS_KEY_ATTR_ND,        /* struct ovs_key_nd */
+       OVS_KEY_ATTR_SKB_MARK,  /* u32 skb mark */
+       OVS_KEY_ATTR_TUNNEL,    /* Nested set of ovs_tunnel attributes */
+       OVS_KEY_ATTR_SCTP,      /* struct ovs_key_sctp */
+       OVS_KEY_ATTR_TCP_FLAGS, /* be16 TCP flags. */
+       OVS_KEY_ATTR_DP_HASH,      /* u32 hash value. Value 0 indicates the hash
+                                  is not computed by the datapath. */
+       OVS_KEY_ATTR_RECIRC_ID, /* u32 recirc id */
+       OVS_KEY_ATTR_MPLS,      /* array of struct ovs_key_mpls.
+                                * The implementation may restrict
+                                * the accepted length of the array. */
+       OVS_KEY_ATTR_CT_STATE,  /* u32 bitmask of OVS_CS_F_* */
+       OVS_KEY_ATTR_CT_ZONE,   /* u16 connection tracking zone. */
+       OVS_KEY_ATTR_CT_MARK,   /* u32 connection tracking mark */
+       OVS_KEY_ATTR_CT_LABELS, /* 16-octet connection tracking label */
+
+       __OVS_KEY_ATTR_MAX
+};
+
+#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
+
+enum ovs_tunnel_key_attr {
+       OVS_TUNNEL_KEY_ATTR_ID,                 /* be64 Tunnel ID */
+       OVS_TUNNEL_KEY_ATTR_IPV4_SRC,           /* be32 src IP address. */
+       OVS_TUNNEL_KEY_ATTR_IPV4_DST,           /* be32 dst IP address. */
+       OVS_TUNNEL_KEY_ATTR_TOS,                /* u8 Tunnel IP ToS. */
+       OVS_TUNNEL_KEY_ATTR_TTL,                /* u8 Tunnel IP TTL. */
+       OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT,      /* No argument, set DF. */
+       OVS_TUNNEL_KEY_ATTR_CSUM,               /* No argument. CSUM packet. */
+       OVS_TUNNEL_KEY_ATTR_OAM,                /* No argument. OAM frame.  */
+       OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS,        /* Array of Geneve options. */
+       OVS_TUNNEL_KEY_ATTR_TP_SRC,             /* be16 src Transport Port. */
+       OVS_TUNNEL_KEY_ATTR_TP_DST,             /* be16 dst Transport Port. */
+       OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS,         /* Nested OVS_VXLAN_EXT_* */
+       OVS_TUNNEL_KEY_ATTR_IPV6_SRC,           /* struct in6_addr src IPv6 address. */
+       OVS_TUNNEL_KEY_ATTR_IPV6_DST,           /* struct in6_addr dst IPv6 address. */
+       __OVS_TUNNEL_KEY_ATTR_MAX
+};
+
+#define OVS_TUNNEL_KEY_ATTR_MAX (__OVS_TUNNEL_KEY_ATTR_MAX - 1)
+
+/**
+ * enum ovs_frag_type - IPv4 and IPv6 fragment type
+ * @OVS_FRAG_TYPE_NONE: Packet is not a fragment.
+ * @OVS_FRAG_TYPE_FIRST: Packet is a fragment with offset 0.
+ * @OVS_FRAG_TYPE_LATER: Packet is a fragment with nonzero offset.
+ *
+ * Used as the @ipv4_frag in &struct ovs_key_ipv4 and as @ipv6_frag &struct
+ * ovs_key_ipv6.
+ */
+enum ovs_frag_type {
+       OVS_FRAG_TYPE_NONE,
+       OVS_FRAG_TYPE_FIRST,
+       OVS_FRAG_TYPE_LATER,
+       __OVS_FRAG_TYPE_MAX
+};
+
+#define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1)
+
+struct ovs_key_ethernet {
+       __u8     eth_src[ETH_ALEN];
+       __u8     eth_dst[ETH_ALEN];
+};
+
+struct ovs_key_mpls {
+       __be32 mpls_lse;
+};
+
+struct ovs_key_ipv4 {
+       __be32 ipv4_src;
+       __be32 ipv4_dst;
+       __u8   ipv4_proto;
+       __u8   ipv4_tos;
+       __u8   ipv4_ttl;
+       __u8   ipv4_frag;       /* One of OVS_FRAG_TYPE_*. */
+};
+
+struct ovs_key_ipv6 {
+       __be32 ipv6_src[4];
+       __be32 ipv6_dst[4];
+       __be32 ipv6_label;      /* 20-bits in least-significant bits. */
+       __u8   ipv6_proto;
+       __u8   ipv6_tclass;
+       __u8   ipv6_hlimit;
+       __u8   ipv6_frag;       /* One of OVS_FRAG_TYPE_*. */
+};
+
+struct ovs_key_tcp {
+       __be16 tcp_src;
+       __be16 tcp_dst;
+};
+
+struct ovs_key_udp {
+       __be16 udp_src;
+       __be16 udp_dst;
+};
+
+struct ovs_key_sctp {
+       __be16 sctp_src;
+       __be16 sctp_dst;
+};
+
+struct ovs_key_icmp {
+       __u8 icmp_type;
+       __u8 icmp_code;
+};
+
+struct ovs_key_icmpv6 {
+       __u8 icmpv6_type;
+       __u8 icmpv6_code;
+};
+
+struct ovs_key_arp {
+       __be32 arp_sip;
+       __be32 arp_tip;
+       __be16 arp_op;
+       __u8   arp_sha[ETH_ALEN];
+       __u8   arp_tha[ETH_ALEN];
+};
+
+struct ovs_key_nd {
+       __be32  nd_target[4];
+       __u8    nd_sll[ETH_ALEN];
+       __u8    nd_tll[ETH_ALEN];
+};
+
+#define OVS_CT_LABELS_LEN      16
+struct ovs_key_ct_labels {
+       __u8    ct_labels[OVS_CT_LABELS_LEN];
+};
+
+/* OVS_KEY_ATTR_CT_STATE flags */
+#define OVS_CS_F_NEW               0x01 /* Beginning of a new connection. */
+#define OVS_CS_F_ESTABLISHED       0x02 /* Part of an existing connection. */
+#define OVS_CS_F_RELATED           0x04 /* Related to an established
+                                        * connection. */
+#define OVS_CS_F_REPLY_DIR         0x08 /* Flow is in the reply direction. */
+#define OVS_CS_F_INVALID           0x10 /* Could not track connection. */
+#define OVS_CS_F_TRACKED           0x20 /* Conntrack has occurred. */
+
+/**
+ * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
+ * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
+ * key.  Always present in notifications.  Required for all requests (except
+ * dumps).
+ * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
+ * the actions to take for packets that match the key.  Always present in
+ * notifications.  Required for %OVS_FLOW_CMD_NEW requests, optional for
+ * %OVS_FLOW_CMD_SET requests.  An %OVS_FLOW_CMD_SET without
+ * %OVS_FLOW_ATTR_ACTIONS will not modify the actions.  To clear the actions,
+ * an %OVS_FLOW_ATTR_ACTIONS without any nested attributes must be given.
+ * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this
+ * flow.  Present in notifications if the stats would be nonzero.  Ignored in
+ * requests.
+ * @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value giving the OR'd value of all of the
+ * TCP flags seen on packets in this flow.  Only present in notifications for
+ * TCP flows, and only if it would be nonzero.  Ignored in requests.
+ * @OVS_FLOW_ATTR_USED: A 64-bit integer giving the time, in milliseconds on
+ * the system monotonic clock, at which a packet was last processed for this
+ * flow.  Only present in notifications if a packet has been processed for this
+ * flow.  Ignored in requests.
+ * @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_FLOW_CMD_SET request, clears the
+ * last-used time, accumulated TCP flags, and statistics for this flow.
+ * Otherwise ignored in requests.  Never present in notifications.
+ * @OVS_FLOW_ATTR_MASK: Nested %OVS_KEY_ATTR_* attributes specifying the
+ * mask bits for wildcarded flow match. Mask bit value '1' specifies exact
+ * match with corresponding flow key bit, while mask bit value '0' specifies
+ * a wildcarded match. Omitting attribute is treated as wildcarding all
+ * corresponding fields. Optional for all requests. If not present,
+ * all flow key bits are exact match bits.
+ * @OVS_FLOW_ATTR_UFID: A value between 1-16 octets specifying a unique
+ * identifier for the flow. Causes the flow to be indexed by this value rather
+ * than the value of the %OVS_FLOW_ATTR_KEY attribute. Optional for all
+ * requests. Present in notifications if the flow was created with this
+ * attribute.
+ * @OVS_FLOW_ATTR_UFID_FLAGS: A 32-bit value of OR'd %OVS_UFID_F_*
+ * flags that provide alternative semantics for flow installation and
+ * retrieval. Optional for all requests.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_FLOW_* commands.
+ */
+enum ovs_flow_attr {
+       OVS_FLOW_ATTR_UNSPEC,
+       OVS_FLOW_ATTR_KEY,       /* Sequence of OVS_KEY_ATTR_* attributes. */
+       OVS_FLOW_ATTR_ACTIONS,   /* Nested OVS_ACTION_ATTR_* attributes. */
+       OVS_FLOW_ATTR_STATS,     /* struct ovs_flow_stats. */
+       OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd TCP flags. */
+       OVS_FLOW_ATTR_USED,      /* u64 msecs last used in monotonic time. */
+       OVS_FLOW_ATTR_CLEAR,     /* Flag to clear stats, tcp_flags, used. */
+       OVS_FLOW_ATTR_MASK,      /* Sequence of OVS_KEY_ATTR_* attributes. */
+       OVS_FLOW_ATTR_PROBE,     /* Flow operation is a feature probe, error
+                                 * logging should be suppressed. */
+       OVS_FLOW_ATTR_UFID,      /* Variable length unique flow identifier. */
+       OVS_FLOW_ATTR_UFID_FLAGS,/* u32 of OVS_UFID_F_*. */
+       __OVS_FLOW_ATTR_MAX
+};
+
+#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
+
+/**
+ * Omit attributes for notifications.
+ *
+ * If a datapath request contains an %OVS_UFID_F_OMIT_* flag, then the datapath
+ * may omit the corresponding %OVS_FLOW_ATTR_* from the response.
+ */
+#define OVS_UFID_F_OMIT_KEY      (1 << 0)
+#define OVS_UFID_F_OMIT_MASK     (1 << 1)
+#define OVS_UFID_F_OMIT_ACTIONS  (1 << 2)
+
+/**
+ * enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
+ * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
+ * @OVS_ACTION_ATTR_SAMPLE.  A value of 0 samples no packets, a value of
+ * %UINT32_MAX samples all packets and intermediate values sample intermediate
+ * fractions of packets.
+ * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling event.
+ * Actions are passed as nested attributes.
+ *
+ * Executes the specified actions with the given probability on a per-packet
+ * basis.
+ */
+enum ovs_sample_attr {
+       OVS_SAMPLE_ATTR_UNSPEC,
+       OVS_SAMPLE_ATTR_PROBABILITY, /* u32 number */
+       OVS_SAMPLE_ATTR_ACTIONS,     /* Nested OVS_ACTION_ATTR_* attributes. */
+       __OVS_SAMPLE_ATTR_MAX,
+};
+
+#define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR_MAX - 1)
+
+/**
+ * enum ovs_userspace_attr - Attributes for %OVS_ACTION_ATTR_USERSPACE action.
+ * @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to which the %OVS_PACKET_CMD_ACTION
+ * message should be sent.  Required.
+ * @OVS_USERSPACE_ATTR_USERDATA: If present, its variable-length argument is
+ * copied to the %OVS_PACKET_CMD_ACTION message as %OVS_PACKET_ATTR_USERDATA.
+ * @OVS_USERSPACE_ATTR_EGRESS_TUN_PORT: If present, u32 output port to get
+ * tunnel info.
+ * @OVS_USERSPACE_ATTR_ACTIONS: If present, send actions with upcall.
+ */
+enum ovs_userspace_attr {
+       OVS_USERSPACE_ATTR_UNSPEC,
+       OVS_USERSPACE_ATTR_PID,       /* u32 Netlink PID to receive upcalls. */
+       OVS_USERSPACE_ATTR_USERDATA,  /* Optional user-specified cookie. */
+       OVS_USERSPACE_ATTR_EGRESS_TUN_PORT,  /* Optional, u32 output port
+                                             * to get tunnel info. */
+       OVS_USERSPACE_ATTR_ACTIONS,   /* Optional flag to get actions. */
+       __OVS_USERSPACE_ATTR_MAX
+};
+
+#define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPACE_ATTR_MAX - 1)
+
+/**
+ * struct ovs_action_push_mpls - %OVS_ACTION_ATTR_PUSH_MPLS action argument.
+ * @mpls_lse: MPLS label stack entry to push.
+ * @mpls_ethertype: Ethertype to set in the encapsulating ethernet frame.
+ *
+ * The only values @mpls_ethertype should ever be given are %ETH_P_MPLS_UC and
+ * %ETH_P_MPLS_MC, indicating MPLS unicast or multicast. Other are rejected.
+ */
+struct ovs_action_push_mpls {
+       __be32 mpls_lse;
+       __be16 mpls_ethertype; /* Either %ETH_P_MPLS_UC or %ETH_P_MPLS_MC */
+};
+
+/**
+ * struct ovs_action_push_vlan - %OVS_ACTION_ATTR_PUSH_VLAN action argument.
+ * @vlan_tpid: Tag protocol identifier (TPID) to push.
+ * @vlan_tci: Tag control identifier (TCI) to push.  The CFI bit must be set
+ * (but it will not be set in the 802.1Q header that is pushed).
+ *
+ * The @vlan_tpid value is typically %ETH_P_8021Q.  The only acceptable TPID
+ * values are those that the kernel module also parses as 802.1Q headers, to
+ * prevent %OVS_ACTION_ATTR_PUSH_VLAN followed by %OVS_ACTION_ATTR_POP_VLAN
+ * from having surprising results.
+ */
+struct ovs_action_push_vlan {
+       __be16 vlan_tpid;       /* 802.1Q TPID. */
+       __be16 vlan_tci;        /* 802.1Q TCI (VLAN ID and priority). */
+};
+
+/* Data path hash algorithm for computing Datapath hash.
+ *
+ * The algorithm type only specifies the fields in a flow
+ * will be used as part of the hash. Each datapath is free
+ * to use its own hash algorithm. The hash value will be
+ * opaque to the user space daemon.
+ */
+enum ovs_hash_alg {
+       OVS_HASH_ALG_L4,
+};
+
+/*
+ * struct ovs_action_hash - %OVS_ACTION_ATTR_HASH action argument.
+ * @hash_alg: Algorithm used to compute hash prior to recirculation.
+ * @hash_basis: basis used for computing hash.
+ */
+struct ovs_action_hash {
+       uint32_t  hash_alg;     /* One of ovs_hash_alg. */
+       uint32_t  hash_basis;
+};
+
+/**
+ * enum ovs_ct_attr - Attributes for %OVS_ACTION_ATTR_CT action.
+ * @OVS_CT_ATTR_COMMIT: If present, commits the connection to the conntrack
+ * table. This allows future packets for the same connection to be identified
+ * as 'established' or 'related'. The flow key for the current packet will
+ * retain the pre-commit connection state.
+ * @OVS_CT_ATTR_ZONE: u16 connection tracking zone.
+ * @OVS_CT_ATTR_MARK: u32 value followed by u32 mask. For each bit set in the
+ * mask, the corresponding bit in the value is copied to the connection
+ * tracking mark field in the connection.
+ * @OVS_CT_ATTR_LABELS: %OVS_CT_LABELS_LEN value followed by %OVS_CT_LABELS_LEN
+ * mask. For each bit set in the mask, the corresponding bit in the value is
+ * copied to the connection tracking label field in the connection.
+ * @OVS_CT_ATTR_HELPER: variable length string defining conntrack ALG.
+ */
+enum ovs_ct_attr {
+       OVS_CT_ATTR_UNSPEC,
+       OVS_CT_ATTR_COMMIT,     /* No argument, commits connection. */
+       OVS_CT_ATTR_ZONE,       /* u16 zone id. */
+       OVS_CT_ATTR_MARK,       /* mark to associate with this connection. */
+       OVS_CT_ATTR_LABELS,     /* labels to associate with this connection. */
+       OVS_CT_ATTR_HELPER,     /* netlink helper to assist detection of
+                                  related connections. */
+       __OVS_CT_ATTR_MAX
+};
+
+#define OVS_CT_ATTR_MAX (__OVS_CT_ATTR_MAX - 1)
+
+/**
+ * enum ovs_action_attr - Action types.
+ *
+ * @OVS_ACTION_ATTR_OUTPUT: Output packet to port.
+ * @OVS_ACTION_ATTR_USERSPACE: Send packet to userspace according to nested
+ * %OVS_USERSPACE_ATTR_* attributes.
+ * @OVS_ACTION_ATTR_SET: Replaces the contents of an existing header.  The
+ * single nested %OVS_KEY_ATTR_* attribute specifies a header to modify and its
+ * value.
+ * @OVS_ACTION_ATTR_SET_MASKED: Replaces the contents of an existing header.  A
+ * nested %OVS_KEY_ATTR_* attribute specifies a header to modify, its value,
+ * and a mask.  For every bit set in the mask, the corresponding bit value
+ * is copied from the value to the packet header field, rest of the bits are
+ * left unchanged.  The non-masked value bits must be passed in as zeroes.
+ * Masking is not supported for the %OVS_KEY_ATTR_TUNNEL attribute.
+ * @OVS_ACTION_ATTR_PUSH_VLAN: Push a new outermost 802.1Q header onto the
+ * packet.
+ * @OVS_ACTION_ATTR_POP_VLAN: Pop the outermost 802.1Q header off the packet.
+ * @OVS_ACTION_ATTR_SAMPLE: Probabilitically executes actions, as specified in
+ * the nested %OVS_SAMPLE_ATTR_* attributes.
+ * @OVS_ACTION_ATTR_PUSH_MPLS: Push a new MPLS label stack entry onto the
+ * top of the packets MPLS label stack.  Set the ethertype of the
+ * encapsulating frame to either %ETH_P_MPLS_UC or %ETH_P_MPLS_MC to
+ * indicate the new packet contents.
+ * @OVS_ACTION_ATTR_POP_MPLS: Pop an MPLS label stack entry off of the
+ * packet's MPLS label stack.  Set the encapsulating frame's ethertype to
+ * indicate the new packet contents. This could potentially still be
+ * %ETH_P_MPLS if the resulting MPLS label stack is not empty.  If there
+ * is no MPLS label stack, as determined by ethertype, no action is taken.
+ * @OVS_ACTION_ATTR_CT: Track the connection. Populate the conntrack-related
+ * entries in the flow key.
+ *
+ * Only a single header can be set with a single %OVS_ACTION_ATTR_SET.  Not all
+ * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
+ * type may not be changed.
+ *
+ * @OVS_ACTION_ATTR_SET_TO_MASKED: Kernel internal masked set action translated
+ * from the @OVS_ACTION_ATTR_SET.
+ */
+
+enum ovs_action_attr {
+       OVS_ACTION_ATTR_UNSPEC,
+       OVS_ACTION_ATTR_OUTPUT,       /* u32 port number. */
+       OVS_ACTION_ATTR_USERSPACE,    /* Nested OVS_USERSPACE_ATTR_*. */
+       OVS_ACTION_ATTR_SET,          /* One nested OVS_KEY_ATTR_*. */
+       OVS_ACTION_ATTR_PUSH_VLAN,    /* struct ovs_action_push_vlan. */
+       OVS_ACTION_ATTR_POP_VLAN,     /* No argument. */
+       OVS_ACTION_ATTR_SAMPLE,       /* Nested OVS_SAMPLE_ATTR_*. */
+       OVS_ACTION_ATTR_RECIRC,       /* u32 recirc_id. */
+       OVS_ACTION_ATTR_HASH,         /* struct ovs_action_hash. */
+       OVS_ACTION_ATTR_PUSH_MPLS,    /* struct ovs_action_push_mpls. */
+       OVS_ACTION_ATTR_POP_MPLS,     /* __be16 ethertype. */
+       OVS_ACTION_ATTR_SET_MASKED,   /* One nested OVS_KEY_ATTR_* including
+                                      * data immediately followed by a mask.
+                                      * The data must be zero for the unmasked
+                                      * bits. */
+       OVS_ACTION_ATTR_CT,           /* Nested OVS_CT_ATTR_* . */
+
+       __OVS_ACTION_ATTR_MAX,        /* Nothing past this will be accepted
+                                      * from userspace. */
+
+};
+
+#define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
+
+#endif /* _LINUX_OPENVSWITCH_H */
diff --git a/lib/libdss-include/include/linux/packet_diag.h b/lib/libdss-include/include/linux/packet_diag.h
new file mode 100644 (file)
index 0000000..d08c63f
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef __PACKET_DIAG_H__
+#define __PACKET_DIAG_H__
+
+#include <linux/types.h>
+
+struct packet_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   pdiag_ino;
+       __u32   pdiag_show;
+       __u32   pdiag_cookie[2];
+};
+
+#define PACKET_SHOW_INFO       0x00000001 /* Basic packet_sk information */
+#define PACKET_SHOW_MCLIST     0x00000002 /* A set of packet_diag_mclist-s */
+#define PACKET_SHOW_RING_CFG   0x00000004 /* Rings configuration parameters */
+#define PACKET_SHOW_FANOUT     0x00000008
+#define PACKET_SHOW_MEMINFO    0x00000010
+#define PACKET_SHOW_FILTER     0x00000020
+
+struct packet_diag_msg {
+       __u8    pdiag_family;
+       __u8    pdiag_type;
+       __u16   pdiag_num;
+
+       __u32   pdiag_ino;
+       __u32   pdiag_cookie[2];
+};
+
+enum {
+       /* PACKET_DIAG_NONE, standard nl API requires this attribute!  */
+       PACKET_DIAG_INFO,
+       PACKET_DIAG_MCLIST,
+       PACKET_DIAG_RX_RING,
+       PACKET_DIAG_TX_RING,
+       PACKET_DIAG_FANOUT,
+       PACKET_DIAG_UID,
+       PACKET_DIAG_MEMINFO,
+       PACKET_DIAG_FILTER,
+
+       __PACKET_DIAG_MAX,
+};
+
+#define PACKET_DIAG_MAX (__PACKET_DIAG_MAX - 1)
+
+struct packet_diag_info {
+       __u32   pdi_index;
+       __u32   pdi_version;
+       __u32   pdi_reserve;
+       __u32   pdi_copy_thresh;
+       __u32   pdi_tstamp;
+       __u32   pdi_flags;
+
+#define PDI_RUNNING    0x1
+#define PDI_AUXDATA    0x2
+#define PDI_ORIGDEV    0x4
+#define PDI_VNETHDR    0x8
+#define PDI_LOSS       0x10
+};
+
+struct packet_diag_mclist {
+       __u32   pdmc_index;
+       __u32   pdmc_count;
+       __u16   pdmc_type;
+       __u16   pdmc_alen;
+       __u8    pdmc_addr[MAX_ADDR_LEN];
+};
+
+struct packet_diag_ring {
+       __u32   pdr_block_size;
+       __u32   pdr_block_nr;
+       __u32   pdr_frame_size;
+       __u32   pdr_frame_nr;
+       __u32   pdr_retire_tmo;
+       __u32   pdr_sizeof_priv;
+       __u32   pdr_features;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/param.h b/lib/libdss-include/include/linux/param.h
new file mode 100644 (file)
index 0000000..092e92f
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _LINUX_PARAM_H
+#define _LINUX_PARAM_H
+
+#include <asm/param.h>
+
+#endif
diff --git a/lib/libdss-include/include/linux/parport.h b/lib/libdss-include/include/linux/parport.h
new file mode 100644 (file)
index 0000000..4cd4442
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Any part of this program may be used in documents licensed under
+ * the GNU Free Documentation License, Version 1.1 or any later version
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _PARPORT_H_
+#define _PARPORT_H_
+
+/* Start off with user-visible constants */
+
+/* Maximum of 16 ports per machine */
+#define PARPORT_MAX  16
+
+/* Magic numbers */
+#define PARPORT_IRQ_NONE  -1
+#define PARPORT_DMA_NONE  -1
+#define PARPORT_IRQ_AUTO  -2
+#define PARPORT_DMA_AUTO  -2
+#define PARPORT_DMA_NOFIFO -3
+#define PARPORT_DISABLE   -2
+#define PARPORT_IRQ_PROBEONLY -3
+#define PARPORT_IOHI_AUTO -1
+
+#define PARPORT_CONTROL_STROBE    0x1
+#define PARPORT_CONTROL_AUTOFD    0x2
+#define PARPORT_CONTROL_INIT      0x4
+#define PARPORT_CONTROL_SELECT    0x8
+
+#define PARPORT_STATUS_ERROR      0x8
+#define PARPORT_STATUS_SELECT     0x10
+#define PARPORT_STATUS_PAPEROUT   0x20
+#define PARPORT_STATUS_ACK        0x40
+#define PARPORT_STATUS_BUSY       0x80
+
+/* Type classes for Plug-and-Play probe.  */
+typedef enum {
+       PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */
+       PARPORT_CLASS_PRINTER,
+       PARPORT_CLASS_MODEM,
+       PARPORT_CLASS_NET,
+       PARPORT_CLASS_HDC,              /* Hard disk controller */
+       PARPORT_CLASS_PCMCIA,
+       PARPORT_CLASS_MEDIA,            /* Multimedia device */
+       PARPORT_CLASS_FDC,              /* Floppy disk controller */
+       PARPORT_CLASS_PORTS,
+       PARPORT_CLASS_SCANNER,
+       PARPORT_CLASS_DIGCAM,
+       PARPORT_CLASS_OTHER,            /* Anything else */
+       PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */
+       PARPORT_CLASS_SCSIADAPTER
+} parport_device_class;
+
+/* The "modes" entry in parport is a bit field representing the
+   capabilities of the hardware. */
+#define PARPORT_MODE_PCSPP     (1<<0) /* IBM PC registers available. */
+#define PARPORT_MODE_TRISTATE  (1<<1) /* Can tristate. */
+#define PARPORT_MODE_EPP       (1<<2) /* Hardware EPP. */
+#define PARPORT_MODE_ECP       (1<<3) /* Hardware ECP. */
+#define PARPORT_MODE_COMPAT    (1<<4) /* Hardware 'printer protocol'. */
+#define PARPORT_MODE_DMA       (1<<5) /* Hardware can DMA. */
+#define PARPORT_MODE_SAFEININT (1<<6) /* SPP registers accessible in IRQ. */
+
+/* IEEE1284 modes: 
+   Nibble mode, byte mode, ECP, ECPRLE and EPP are their own
+   'extensibility request' values.  Others are special.
+   'Real' ECP modes must have the IEEE1284_MODE_ECP bit set.  */
+#define IEEE1284_MODE_NIBBLE             0
+#define IEEE1284_MODE_BYTE              (1<<0)
+#define IEEE1284_MODE_COMPAT            (1<<8)
+#define IEEE1284_MODE_BECP              (1<<9) /* Bounded ECP mode */
+#define IEEE1284_MODE_ECP               (1<<4)
+#define IEEE1284_MODE_ECPRLE            (IEEE1284_MODE_ECP | (1<<5))
+#define IEEE1284_MODE_ECPSWE            (1<<10) /* Software-emulated */
+#define IEEE1284_MODE_EPP               (1<<6)
+#define IEEE1284_MODE_EPPSL             (1<<11) /* EPP 1.7 */
+#define IEEE1284_MODE_EPPSWE            (1<<12) /* Software-emulated */
+#define IEEE1284_DEVICEID               (1<<2)  /* This is a flag */
+#define IEEE1284_EXT_LINK               (1<<14) /* This flag causes the
+                                                * extensibility link to
+                                                * be requested, using
+                                                * bits 0-6. */
+
+/* For the benefit of parport_read/write, you can use these with
+ * parport_negotiate to use address operations.  They have no effect
+ * other than to make parport_read/write use address transfers. */
+#define IEEE1284_ADDR                  (1<<13) /* This is a flag */
+#define IEEE1284_DATA                   0      /* So is this */
+
+/* Flags for block transfer operations. */
+#define PARPORT_EPP_FAST               (1<<0) /* Unreliable counts. */
+#define PARPORT_W91284PIC              (1<<1) /* have a Warp9 w91284pic in the device */
+
+/* The rest is for the kernel only */
+#endif /* _PARPORT_H_ */
diff --git a/lib/libdss-include/include/linux/patchkey.h b/lib/libdss-include/include/linux/patchkey.h
new file mode 100644 (file)
index 0000000..bb28430
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * <linux/patchkey.h> -- definition of _PATCHKEY macro
+ *
+ * Copyright (C) 2005 Stuart Brady
+ *
+ * This exists because awe_voice.h defined its own _PATCHKEY and it wasn't
+ * clear whether removing this would break anything in userspace.
+ *
+ * Do not include this file directly.  Please use <sys/soundcard.h> instead.
+ * For kernel code, use <linux/soundcard.h>
+ */
+
+#ifndef _LINUX_PATCHKEY_H_INDIRECT
+#error "patchkey.h included directly"
+#endif
+
+#ifndef _LINUX_PATCHKEY_H
+#define _LINUX_PATCHKEY_H
+
+/* Endian macros. */
+#  include <endian.h>
+
+#if defined(__BYTE_ORDER)
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#    define _PATCHKEY(id) (0xfd00|id)
+#  elif __BYTE_ORDER == __LITTLE_ENDIAN
+#    define _PATCHKEY(id) ((id<<8)|0x00fd)
+#  else
+#    error "could not determine byte order"
+#  endif
+#endif
+
+#endif /* _LINUX_PATCHKEY_H */
diff --git a/lib/libdss-include/include/linux/pci.h b/lib/libdss-include/include/linux/pci.h
new file mode 100644 (file)
index 0000000..a5bb5c7
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *     pci.h
+ *
+ *     PCI defines and function prototypes
+ *     Copyright 1994, Drew Eckhardt
+ *     Copyright 1997--1999 Martin Mares <mj@ucw.cz>
+ *
+ *     For more information, please consult the following manuals (look at
+ *     http://www.pcisig.com/ for how to get them):
+ *
+ *     PCI BIOS Specification
+ *     PCI Local Bus Specification
+ *     PCI to PCI Bridge Specification
+ *     PCI System Design Guide
+ */
+
+#ifndef LINUX_PCI_H
+#define LINUX_PCI_H
+
+#include <linux/pci_regs.h>    /* The pci register defines */
+
+/*
+ * The PCI interface treats multi-function devices as independent
+ * devices.  The slot/function address of each device is encoded
+ * in a single byte as follows:
+ *
+ *     7:3 = slot
+ *     2:0 = function
+ */
+#define PCI_DEVFN(slot, func)  ((((slot) & 0x1f) << 3) | ((func) & 0x07))
+#define PCI_SLOT(devfn)                (((devfn) >> 3) & 0x1f)
+#define PCI_FUNC(devfn)                ((devfn) & 0x07)
+
+/* Ioctls for /proc/bus/pci/X/Y nodes. */
+#define PCIIOC_BASE            ('P' << 24 | 'C' << 16 | 'I' << 8)
+#define PCIIOC_CONTROLLER      (PCIIOC_BASE | 0x00)    /* Get controller for PCI device. */
+#define PCIIOC_MMAP_IS_IO      (PCIIOC_BASE | 0x01)    /* Set mmap state to I/O space. */
+#define PCIIOC_MMAP_IS_MEM     (PCIIOC_BASE | 0x02)    /* Set mmap state to MEM space. */
+#define PCIIOC_WRITE_COMBINE   (PCIIOC_BASE | 0x03)    /* Enable/disable write-combining. */
+
+#endif /* LINUX_PCI_H */
diff --git a/lib/libdss-include/include/linux/pci_regs.h b/lib/libdss-include/include/linux/pci_regs.h
new file mode 100644 (file)
index 0000000..1becea8
--- /dev/null
@@ -0,0 +1,949 @@
+/*
+ *     pci_regs.h
+ *
+ *     PCI standard defines
+ *     Copyright 1994, Drew Eckhardt
+ *     Copyright 1997--1999 Martin Mares <mj@ucw.cz>
+ *
+ *     For more information, please consult the following manuals (look at
+ *     http://www.pcisig.com/ for how to get them):
+ *
+ *     PCI BIOS Specification
+ *     PCI Local Bus Specification
+ *     PCI to PCI Bridge Specification
+ *     PCI System Design Guide
+ *
+ *     For HyperTransport information, please consult the following manuals
+ *     from http://www.hypertransport.org
+ *
+ *     The HyperTransport I/O Link Specification
+ */
+
+#ifndef LINUX_PCI_REGS_H
+#define LINUX_PCI_REGS_H
+
+/*
+ * Under PCI, each device has 256 bytes of configuration address space,
+ * of which the first 64 bytes are standardized as follows:
+ */
+#define PCI_STD_HEADER_SIZEOF  64
+#define PCI_VENDOR_ID          0x00    /* 16 bits */
+#define PCI_DEVICE_ID          0x02    /* 16 bits */
+#define PCI_COMMAND            0x04    /* 16 bits */
+#define  PCI_COMMAND_IO                0x1     /* Enable response in I/O space */
+#define  PCI_COMMAND_MEMORY    0x2     /* Enable response in Memory space */
+#define  PCI_COMMAND_MASTER    0x4     /* Enable bus mastering */
+#define  PCI_COMMAND_SPECIAL   0x8     /* Enable response to special cycles */
+#define  PCI_COMMAND_INVALIDATE        0x10    /* Use memory write and invalidate */
+#define  PCI_COMMAND_VGA_PALETTE 0x20  /* Enable palette snooping */
+#define  PCI_COMMAND_PARITY    0x40    /* Enable parity checking */
+#define  PCI_COMMAND_WAIT      0x80    /* Enable address/data stepping */
+#define  PCI_COMMAND_SERR      0x100   /* Enable SERR */
+#define  PCI_COMMAND_FAST_BACK 0x200   /* Enable back-to-back writes */
+#define  PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
+
+#define PCI_STATUS             0x06    /* 16 bits */
+#define  PCI_STATUS_INTERRUPT  0x08    /* Interrupt status */
+#define  PCI_STATUS_CAP_LIST   0x10    /* Support Capability List */
+#define  PCI_STATUS_66MHZ      0x20    /* Support 66 MHz PCI 2.1 bus */
+#define  PCI_STATUS_UDF                0x40    /* Support User Definable Features [obsolete] */
+#define  PCI_STATUS_FAST_BACK  0x80    /* Accept fast-back to back */
+#define  PCI_STATUS_PARITY     0x100   /* Detected parity error */
+#define  PCI_STATUS_DEVSEL_MASK        0x600   /* DEVSEL timing */
+#define  PCI_STATUS_DEVSEL_FAST                0x000
+#define  PCI_STATUS_DEVSEL_MEDIUM      0x200
+#define  PCI_STATUS_DEVSEL_SLOW                0x400
+#define  PCI_STATUS_SIG_TARGET_ABORT   0x800 /* Set on target abort */
+#define  PCI_STATUS_REC_TARGET_ABORT   0x1000 /* Master ack of " */
+#define  PCI_STATUS_REC_MASTER_ABORT   0x2000 /* Set on master abort */
+#define  PCI_STATUS_SIG_SYSTEM_ERROR   0x4000 /* Set when we drive SERR */
+#define  PCI_STATUS_DETECTED_PARITY    0x8000 /* Set on parity error */
+
+#define PCI_CLASS_REVISION     0x08    /* High 24 bits are class, low 8 revision */
+#define PCI_REVISION_ID                0x08    /* Revision ID */
+#define PCI_CLASS_PROG         0x09    /* Reg. Level Programming Interface */
+#define PCI_CLASS_DEVICE       0x0a    /* Device class */
+
+#define PCI_CACHE_LINE_SIZE    0x0c    /* 8 bits */
+#define PCI_LATENCY_TIMER      0x0d    /* 8 bits */
+#define PCI_HEADER_TYPE                0x0e    /* 8 bits */
+#define  PCI_HEADER_TYPE_NORMAL                0
+#define  PCI_HEADER_TYPE_BRIDGE                1
+#define  PCI_HEADER_TYPE_CARDBUS       2
+
+#define PCI_BIST               0x0f    /* 8 bits */
+#define  PCI_BIST_CODE_MASK    0x0f    /* Return result */
+#define  PCI_BIST_START                0x40    /* 1 to start BIST, 2 secs or less */
+#define  PCI_BIST_CAPABLE      0x80    /* 1 if BIST capable */
+
+/*
+ * Base addresses specify locations in memory or I/O space.
+ * Decoded size can be determined by writing a value of
+ * 0xffffffff to the register, and reading it back.  Only
+ * 1 bits are decoded.
+ */
+#define PCI_BASE_ADDRESS_0     0x10    /* 32 bits */
+#define PCI_BASE_ADDRESS_1     0x14    /* 32 bits [htype 0,1 only] */
+#define PCI_BASE_ADDRESS_2     0x18    /* 32 bits [htype 0 only] */
+#define PCI_BASE_ADDRESS_3     0x1c    /* 32 bits */
+#define PCI_BASE_ADDRESS_4     0x20    /* 32 bits */
+#define PCI_BASE_ADDRESS_5     0x24    /* 32 bits */
+#define  PCI_BASE_ADDRESS_SPACE                0x01    /* 0 = memory, 1 = I/O */
+#define  PCI_BASE_ADDRESS_SPACE_IO     0x01
+#define  PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
+#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK        0x06
+#define  PCI_BASE_ADDRESS_MEM_TYPE_32  0x00    /* 32 bit address */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_1M  0x02    /* Below 1M [obsolete] */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_64  0x04    /* 64 bit address */
+#define  PCI_BASE_ADDRESS_MEM_PREFETCH 0x08    /* prefetchable? */
+#define  PCI_BASE_ADDRESS_MEM_MASK     (~0x0fUL)
+#define  PCI_BASE_ADDRESS_IO_MASK      (~0x03UL)
+/* bit 1 is reserved if address_space = 1 */
+
+/* Header type 0 (normal devices) */
+#define PCI_CARDBUS_CIS                0x28
+#define PCI_SUBSYSTEM_VENDOR_ID        0x2c
+#define PCI_SUBSYSTEM_ID       0x2e
+#define PCI_ROM_ADDRESS                0x30    /* Bits 31..11 are address, 10..1 reserved */
+#define  PCI_ROM_ADDRESS_ENABLE        0x01
+#define PCI_ROM_ADDRESS_MASK   (~0x7ffUL)
+
+#define PCI_CAPABILITY_LIST    0x34    /* Offset of first capability list entry */
+
+/* 0x35-0x3b are reserved */
+#define PCI_INTERRUPT_LINE     0x3c    /* 8 bits */
+#define PCI_INTERRUPT_PIN      0x3d    /* 8 bits */
+#define PCI_MIN_GNT            0x3e    /* 8 bits */
+#define PCI_MAX_LAT            0x3f    /* 8 bits */
+
+/* Header type 1 (PCI-to-PCI bridges) */
+#define PCI_PRIMARY_BUS                0x18    /* Primary bus number */
+#define PCI_SECONDARY_BUS      0x19    /* Secondary bus number */
+#define PCI_SUBORDINATE_BUS    0x1a    /* Highest bus number behind the bridge */
+#define PCI_SEC_LATENCY_TIMER  0x1b    /* Latency timer for secondary interface */
+#define PCI_IO_BASE            0x1c    /* I/O range behind the bridge */
+#define PCI_IO_LIMIT           0x1d
+#define  PCI_IO_RANGE_TYPE_MASK        0x0fUL  /* I/O bridging type */
+#define  PCI_IO_RANGE_TYPE_16  0x00
+#define  PCI_IO_RANGE_TYPE_32  0x01
+#define  PCI_IO_RANGE_MASK     (~0x0fUL) /* Standard 4K I/O windows */
+#define  PCI_IO_1K_RANGE_MASK  (~0x03UL) /* Intel 1K I/O windows */
+#define PCI_SEC_STATUS         0x1e    /* Secondary status register, only bit 14 used */
+#define PCI_MEMORY_BASE                0x20    /* Memory range behind */
+#define PCI_MEMORY_LIMIT       0x22
+#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
+#define  PCI_MEMORY_RANGE_MASK (~0x0fUL)
+#define PCI_PREF_MEMORY_BASE   0x24    /* Prefetchable memory range behind */
+#define PCI_PREF_MEMORY_LIMIT  0x26
+#define  PCI_PREF_RANGE_TYPE_MASK 0x0fUL
+#define  PCI_PREF_RANGE_TYPE_32        0x00
+#define  PCI_PREF_RANGE_TYPE_64        0x01
+#define  PCI_PREF_RANGE_MASK   (~0x0fUL)
+#define PCI_PREF_BASE_UPPER32  0x28    /* Upper half of prefetchable memory range */
+#define PCI_PREF_LIMIT_UPPER32 0x2c
+#define PCI_IO_BASE_UPPER16    0x30    /* Upper half of I/O addresses */
+#define PCI_IO_LIMIT_UPPER16   0x32
+/* 0x34 same as for htype 0 */
+/* 0x35-0x3b is reserved */
+#define PCI_ROM_ADDRESS1       0x38    /* Same as PCI_ROM_ADDRESS, but for htype 1 */
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_BRIDGE_CONTROL     0x3e
+#define  PCI_BRIDGE_CTL_PARITY 0x01    /* Enable parity detection on secondary interface */
+#define  PCI_BRIDGE_CTL_SERR   0x02    /* The same for SERR forwarding */
+#define  PCI_BRIDGE_CTL_ISA    0x04    /* Enable ISA mode */
+#define  PCI_BRIDGE_CTL_VGA    0x08    /* Forward VGA addresses */
+#define  PCI_BRIDGE_CTL_MASTER_ABORT   0x20  /* Report master aborts */
+#define  PCI_BRIDGE_CTL_BUS_RESET      0x40    /* Secondary bus reset */
+#define  PCI_BRIDGE_CTL_FAST_BACK      0x80    /* Fast Back2Back enabled on secondary interface */
+
+/* Header type 2 (CardBus bridges) */
+#define PCI_CB_CAPABILITY_LIST 0x14
+/* 0x15 reserved */
+#define PCI_CB_SEC_STATUS      0x16    /* Secondary status */
+#define PCI_CB_PRIMARY_BUS     0x18    /* PCI bus number */
+#define PCI_CB_CARD_BUS                0x19    /* CardBus bus number */
+#define PCI_CB_SUBORDINATE_BUS 0x1a    /* Subordinate bus number */
+#define PCI_CB_LATENCY_TIMER   0x1b    /* CardBus latency timer */
+#define PCI_CB_MEMORY_BASE_0   0x1c
+#define PCI_CB_MEMORY_LIMIT_0  0x20
+#define PCI_CB_MEMORY_BASE_1   0x24
+#define PCI_CB_MEMORY_LIMIT_1  0x28
+#define PCI_CB_IO_BASE_0       0x2c
+#define PCI_CB_IO_BASE_0_HI    0x2e
+#define PCI_CB_IO_LIMIT_0      0x30
+#define PCI_CB_IO_LIMIT_0_HI   0x32
+#define PCI_CB_IO_BASE_1       0x34
+#define PCI_CB_IO_BASE_1_HI    0x36
+#define PCI_CB_IO_LIMIT_1      0x38
+#define PCI_CB_IO_LIMIT_1_HI   0x3a
+#define  PCI_CB_IO_RANGE_MASK  (~0x03UL)
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_CB_BRIDGE_CONTROL  0x3e
+#define  PCI_CB_BRIDGE_CTL_PARITY      0x01    /* Similar to standard bridge control register */
+#define  PCI_CB_BRIDGE_CTL_SERR                0x02
+#define  PCI_CB_BRIDGE_CTL_ISA         0x04
+#define  PCI_CB_BRIDGE_CTL_VGA         0x08
+#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT        0x20
+#define  PCI_CB_BRIDGE_CTL_CB_RESET    0x40    /* CardBus reset */
+#define  PCI_CB_BRIDGE_CTL_16BIT_INT   0x80    /* Enable interrupt for 16-bit cards */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
+#define  PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
+#define PCI_CB_SUBSYSTEM_VENDOR_ID     0x40
+#define PCI_CB_SUBSYSTEM_ID            0x42
+#define PCI_CB_LEGACY_MODE_BASE                0x44    /* 16-bit PC Card legacy mode base address (ExCa) */
+/* 0x48-0x7f reserved */
+
+/* Capability lists */
+
+#define PCI_CAP_LIST_ID                0       /* Capability ID */
+#define  PCI_CAP_ID_PM         0x01    /* Power Management */
+#define  PCI_CAP_ID_AGP                0x02    /* Accelerated Graphics Port */
+#define  PCI_CAP_ID_VPD                0x03    /* Vital Product Data */
+#define  PCI_CAP_ID_SLOTID     0x04    /* Slot Identification */
+#define  PCI_CAP_ID_MSI                0x05    /* Message Signalled Interrupts */
+#define  PCI_CAP_ID_CHSWP      0x06    /* CompactPCI HotSwap */
+#define  PCI_CAP_ID_PCIX       0x07    /* PCI-X */
+#define  PCI_CAP_ID_HT         0x08    /* HyperTransport */
+#define  PCI_CAP_ID_VNDR       0x09    /* Vendor-Specific */
+#define  PCI_CAP_ID_DBG                0x0A    /* Debug port */
+#define  PCI_CAP_ID_CCRC       0x0B    /* CompactPCI Central Resource Control */
+#define  PCI_CAP_ID_SHPC       0x0C    /* PCI Standard Hot-Plug Controller */
+#define  PCI_CAP_ID_SSVID      0x0D    /* Bridge subsystem vendor/device ID */
+#define  PCI_CAP_ID_AGP3       0x0E    /* AGP Target PCI-PCI bridge */
+#define  PCI_CAP_ID_SECDEV     0x0F    /* Secure Device */
+#define  PCI_CAP_ID_EXP                0x10    /* PCI Express */
+#define  PCI_CAP_ID_MSIX       0x11    /* MSI-X */
+#define  PCI_CAP_ID_SATA       0x12    /* SATA Data/Index Conf. */
+#define  PCI_CAP_ID_AF         0x13    /* PCI Advanced Features */
+#define  PCI_CAP_ID_EA         0x14    /* PCI Enhanced Allocation */
+#define  PCI_CAP_ID_MAX                PCI_CAP_ID_EA
+#define PCI_CAP_LIST_NEXT      1       /* Next capability in the list */
+#define PCI_CAP_FLAGS          2       /* Capability defined flags (16 bits) */
+#define PCI_CAP_SIZEOF         4
+
+/* Power Management Registers */
+
+#define PCI_PM_PMC             2       /* PM Capabilities Register */
+#define  PCI_PM_CAP_VER_MASK   0x0007  /* Version */
+#define  PCI_PM_CAP_PME_CLOCK  0x0008  /* PME clock required */
+#define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */
+#define  PCI_PM_CAP_DSI                0x0020  /* Device specific initialization */
+#define  PCI_PM_CAP_AUX_POWER  0x01C0  /* Auxiliary power support mask */
+#define  PCI_PM_CAP_D1         0x0200  /* D1 power state support */
+#define  PCI_PM_CAP_D2         0x0400  /* D2 power state support */
+#define  PCI_PM_CAP_PME                0x0800  /* PME pin supported */
+#define  PCI_PM_CAP_PME_MASK   0xF800  /* PME Mask of all supported states */
+#define  PCI_PM_CAP_PME_D0     0x0800  /* PME# from D0 */
+#define  PCI_PM_CAP_PME_D1     0x1000  /* PME# from D1 */
+#define  PCI_PM_CAP_PME_D2     0x2000  /* PME# from D2 */
+#define  PCI_PM_CAP_PME_D3     0x4000  /* PME# from D3 (hot) */
+#define  PCI_PM_CAP_PME_D3cold 0x8000  /* PME# from D3 (cold) */
+#define  PCI_PM_CAP_PME_SHIFT  11      /* Start of the PME Mask in PMC */
+#define PCI_PM_CTRL            4       /* PM control and status register */
+#define  PCI_PM_CTRL_STATE_MASK        0x0003  /* Current power state (D0 to D3) */
+#define  PCI_PM_CTRL_NO_SOFT_RESET     0x0008  /* No reset for D3hot->D0 */
+#define  PCI_PM_CTRL_PME_ENABLE        0x0100  /* PME pin enable */
+#define  PCI_PM_CTRL_DATA_SEL_MASK     0x1e00  /* Data select (??) */
+#define  PCI_PM_CTRL_DATA_SCALE_MASK   0x6000  /* Data scale (??) */
+#define  PCI_PM_CTRL_PME_STATUS        0x8000  /* PME pin status */
+#define PCI_PM_PPB_EXTENSIONS  6       /* PPB support extensions (??) */
+#define  PCI_PM_PPB_B2_B3      0x40    /* Stop clock when in D3hot (??) */
+#define  PCI_PM_BPCC_ENABLE    0x80    /* Bus power/clock control enable (??) */
+#define PCI_PM_DATA_REGISTER   7       /* (??) */
+#define PCI_PM_SIZEOF          8
+
+/* AGP registers */
+
+#define PCI_AGP_VERSION                2       /* BCD version number */
+#define PCI_AGP_RFU            3       /* Rest of capability flags */
+#define PCI_AGP_STATUS         4       /* Status register */
+#define  PCI_AGP_STATUS_RQ_MASK        0xff000000      /* Maximum number of requests - 1 */
+#define  PCI_AGP_STATUS_SBA    0x0200  /* Sideband addressing supported */
+#define  PCI_AGP_STATUS_64BIT  0x0020  /* 64-bit addressing supported */
+#define  PCI_AGP_STATUS_FW     0x0010  /* FW transfers supported */
+#define  PCI_AGP_STATUS_RATE4  0x0004  /* 4x transfer rate supported */
+#define  PCI_AGP_STATUS_RATE2  0x0002  /* 2x transfer rate supported */
+#define  PCI_AGP_STATUS_RATE1  0x0001  /* 1x transfer rate supported */
+#define PCI_AGP_COMMAND                8       /* Control register */
+#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */
+#define  PCI_AGP_COMMAND_SBA   0x0200  /* Sideband addressing enabled */
+#define  PCI_AGP_COMMAND_AGP   0x0100  /* Allow processing of AGP transactions */
+#define  PCI_AGP_COMMAND_64BIT 0x0020  /* Allow processing of 64-bit addresses */
+#define  PCI_AGP_COMMAND_FW    0x0010  /* Force FW transfers */
+#define  PCI_AGP_COMMAND_RATE4 0x0004  /* Use 4x rate */
+#define  PCI_AGP_COMMAND_RATE2 0x0002  /* Use 2x rate */
+#define  PCI_AGP_COMMAND_RATE1 0x0001  /* Use 1x rate */
+#define PCI_AGP_SIZEOF         12
+
+/* Vital Product Data */
+
+#define PCI_VPD_ADDR           2       /* Address to access (15 bits!) */
+#define  PCI_VPD_ADDR_MASK     0x7fff  /* Address mask */
+#define  PCI_VPD_ADDR_F                0x8000  /* Write 0, 1 indicates completion */
+#define PCI_VPD_DATA           4       /* 32-bits of data returned here */
+#define PCI_CAP_VPD_SIZEOF     8
+
+/* Slot Identification */
+
+#define PCI_SID_ESR            2       /* Expansion Slot Register */
+#define  PCI_SID_ESR_NSLOTS    0x1f    /* Number of expansion slots available */
+#define  PCI_SID_ESR_FIC       0x20    /* First In Chassis Flag */
+#define PCI_SID_CHASSIS_NR     3       /* Chassis Number */
+
+/* Message Signalled Interrupts registers */
+
+#define PCI_MSI_FLAGS          2       /* Message Control */
+#define  PCI_MSI_FLAGS_ENABLE  0x0001  /* MSI feature enabled */
+#define  PCI_MSI_FLAGS_QMASK   0x000e  /* Maximum queue size available */
+#define  PCI_MSI_FLAGS_QSIZE   0x0070  /* Message queue size configured */
+#define  PCI_MSI_FLAGS_64BIT   0x0080  /* 64-bit addresses allowed */
+#define  PCI_MSI_FLAGS_MASKBIT 0x0100  /* Per-vector masking capable */
+#define PCI_MSI_RFU            3       /* Rest of capability flags */
+#define PCI_MSI_ADDRESS_LO     4       /* Lower 32 bits */
+#define PCI_MSI_ADDRESS_HI     8       /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
+#define PCI_MSI_DATA_32                8       /* 16 bits of data for 32-bit devices */
+#define PCI_MSI_MASK_32                12      /* Mask bits register for 32-bit devices */
+#define PCI_MSI_PENDING_32     16      /* Pending intrs for 32-bit devices */
+#define PCI_MSI_DATA_64                12      /* 16 bits of data for 64-bit devices */
+#define PCI_MSI_MASK_64                16      /* Mask bits register for 64-bit devices */
+#define PCI_MSI_PENDING_64     20      /* Pending intrs for 64-bit devices */
+
+/* MSI-X registers */
+#define PCI_MSIX_FLAGS         2       /* Message Control */
+#define  PCI_MSIX_FLAGS_QSIZE  0x07FF  /* Table size */
+#define  PCI_MSIX_FLAGS_MASKALL        0x4000  /* Mask all vectors for this function */
+#define  PCI_MSIX_FLAGS_ENABLE 0x8000  /* MSI-X enable */
+#define PCI_MSIX_TABLE         4       /* Table offset */
+#define  PCI_MSIX_TABLE_BIR    0x00000007 /* BAR index */
+#define  PCI_MSIX_TABLE_OFFSET 0xfffffff8 /* Offset into specified BAR */
+#define PCI_MSIX_PBA           8       /* Pending Bit Array offset */
+#define  PCI_MSIX_PBA_BIR      0x00000007 /* BAR index */
+#define  PCI_MSIX_PBA_OFFSET   0xfffffff8 /* Offset into specified BAR */
+#define PCI_MSIX_FLAGS_BIRMASK PCI_MSIX_PBA_BIR /* deprecated */
+#define PCI_CAP_MSIX_SIZEOF    12      /* size of MSIX registers */
+
+/* MSI-X Table entry format */
+#define PCI_MSIX_ENTRY_SIZE            16
+#define  PCI_MSIX_ENTRY_LOWER_ADDR     0
+#define  PCI_MSIX_ENTRY_UPPER_ADDR     4
+#define  PCI_MSIX_ENTRY_DATA           8
+#define  PCI_MSIX_ENTRY_VECTOR_CTRL    12
+#define   PCI_MSIX_ENTRY_CTRL_MASKBIT  1
+
+/* CompactPCI Hotswap Register */
+
+#define PCI_CHSWP_CSR          2       /* Control and Status Register */
+#define  PCI_CHSWP_DHA         0x01    /* Device Hiding Arm */
+#define  PCI_CHSWP_EIM         0x02    /* ENUM# Signal Mask */
+#define  PCI_CHSWP_PIE         0x04    /* Pending Insert or Extract */
+#define  PCI_CHSWP_LOO         0x08    /* LED On / Off */
+#define  PCI_CHSWP_PI          0x30    /* Programming Interface */
+#define  PCI_CHSWP_EXT         0x40    /* ENUM# status - extraction */
+#define  PCI_CHSWP_INS         0x80    /* ENUM# status - insertion */
+
+/* PCI Advanced Feature registers */
+
+#define PCI_AF_LENGTH          2
+#define PCI_AF_CAP             3
+#define  PCI_AF_CAP_TP         0x01
+#define  PCI_AF_CAP_FLR                0x02
+#define PCI_AF_CTRL            4
+#define  PCI_AF_CTRL_FLR       0x01
+#define PCI_AF_STATUS          5
+#define  PCI_AF_STATUS_TP      0x01
+#define PCI_CAP_AF_SIZEOF      6       /* size of AF registers */
+
+/* PCI Enhanced Allocation registers */
+
+#define PCI_EA_NUM_ENT         2       /* Number of Capability Entries */
+#define  PCI_EA_NUM_ENT_MASK   0x3f    /* Num Entries Mask */
+#define PCI_EA_FIRST_ENT       4       /* First EA Entry in List */
+#define PCI_EA_FIRST_ENT_BRIDGE        8       /* First EA Entry for Bridges */
+#define  PCI_EA_ES             0x00000007 /* Entry Size */
+#define  PCI_EA_BEI            0x000000f0 /* BAR Equivalent Indicator */
+/* 0-5 map to BARs 0-5 respectively */
+#define   PCI_EA_BEI_BAR0              0
+#define   PCI_EA_BEI_BAR5              5
+#define   PCI_EA_BEI_BRIDGE            6       /* Resource behind bridge */
+#define   PCI_EA_BEI_ENI               7       /* Equivalent Not Indicated */
+#define   PCI_EA_BEI_ROM               8       /* Expansion ROM */
+/* 9-14 map to VF BARs 0-5 respectively */
+#define   PCI_EA_BEI_VF_BAR0           9
+#define   PCI_EA_BEI_VF_BAR5           14
+#define   PCI_EA_BEI_RESERVED          15      /* Reserved - Treat like ENI */
+#define  PCI_EA_PP             0x0000ff00      /* Primary Properties */
+#define  PCI_EA_SP             0x00ff0000      /* Secondary Properties */
+#define   PCI_EA_P_MEM                 0x00    /* Non-Prefetch Memory */
+#define   PCI_EA_P_MEM_PREFETCH                0x01    /* Prefetchable Memory */
+#define   PCI_EA_P_IO                  0x02    /* I/O Space */
+#define   PCI_EA_P_VF_MEM_PREFETCH     0x03    /* VF Prefetchable Memory */
+#define   PCI_EA_P_VF_MEM              0x04    /* VF Non-Prefetch Memory */
+#define   PCI_EA_P_BRIDGE_MEM          0x05    /* Bridge Non-Prefetch Memory */
+#define   PCI_EA_P_BRIDGE_MEM_PREFETCH 0x06    /* Bridge Prefetchable Memory */
+#define   PCI_EA_P_BRIDGE_IO           0x07    /* Bridge I/O Space */
+/* 0x08-0xfc reserved */
+#define   PCI_EA_P_MEM_RESERVED                0xfd    /* Reserved Memory */
+#define   PCI_EA_P_IO_RESERVED         0xfe    /* Reserved I/O Space */
+#define   PCI_EA_P_UNAVAILABLE         0xff    /* Entry Unavailable */
+#define  PCI_EA_WRITABLE       0x40000000      /* Writable: 1 = RW, 0 = HwInit */
+#define  PCI_EA_ENABLE         0x80000000      /* Enable for this entry */
+#define PCI_EA_BASE            4               /* Base Address Offset */
+#define PCI_EA_MAX_OFFSET      8               /* MaxOffset (resource length) */
+/* bit 0 is reserved */
+#define  PCI_EA_IS_64          0x00000002      /* 64-bit field flag */
+#define  PCI_EA_FIELD_MASK     0xfffffffc      /* For Base & Max Offset */
+
+/* PCI-X registers (Type 0 (non-bridge) devices) */
+
+#define PCI_X_CMD              2       /* Modes & Features */
+#define  PCI_X_CMD_DPERR_E     0x0001  /* Data Parity Error Recovery Enable */
+#define  PCI_X_CMD_ERO         0x0002  /* Enable Relaxed Ordering */
+#define  PCI_X_CMD_READ_512    0x0000  /* 512 byte maximum read byte count */
+#define  PCI_X_CMD_READ_1K     0x0004  /* 1Kbyte maximum read byte count */
+#define  PCI_X_CMD_READ_2K     0x0008  /* 2Kbyte maximum read byte count */
+#define  PCI_X_CMD_READ_4K     0x000c  /* 4Kbyte maximum read byte count */
+#define  PCI_X_CMD_MAX_READ    0x000c  /* Max Memory Read Byte Count */
+                               /* Max # of outstanding split transactions */
+#define  PCI_X_CMD_SPLIT_1     0x0000  /* Max 1 */
+#define  PCI_X_CMD_SPLIT_2     0x0010  /* Max 2 */
+#define  PCI_X_CMD_SPLIT_3     0x0020  /* Max 3 */
+#define  PCI_X_CMD_SPLIT_4     0x0030  /* Max 4 */
+#define  PCI_X_CMD_SPLIT_8     0x0040  /* Max 8 */
+#define  PCI_X_CMD_SPLIT_12    0x0050  /* Max 12 */
+#define  PCI_X_CMD_SPLIT_16    0x0060  /* Max 16 */
+#define  PCI_X_CMD_SPLIT_32    0x0070  /* Max 32 */
+#define  PCI_X_CMD_MAX_SPLIT   0x0070  /* Max Outstanding Split Transactions */
+#define  PCI_X_CMD_VERSION(x)  (((x) >> 12) & 3) /* Version */
+#define PCI_X_STATUS           4       /* PCI-X capabilities */
+#define  PCI_X_STATUS_DEVFN    0x000000ff      /* A copy of devfn */
+#define  PCI_X_STATUS_BUS      0x0000ff00      /* A copy of bus nr */
+#define  PCI_X_STATUS_64BIT    0x00010000      /* 64-bit device */
+#define  PCI_X_STATUS_133MHZ   0x00020000      /* 133 MHz capable */
+#define  PCI_X_STATUS_SPL_DISC 0x00040000      /* Split Completion Discarded */
+#define  PCI_X_STATUS_UNX_SPL  0x00080000      /* Unexpected Split Completion */
+#define  PCI_X_STATUS_COMPLEX  0x00100000      /* Device Complexity */
+#define  PCI_X_STATUS_MAX_READ 0x00600000      /* Designed Max Memory Read Count */
+#define  PCI_X_STATUS_MAX_SPLIT        0x03800000      /* Designed Max Outstanding Split Transactions */
+#define  PCI_X_STATUS_MAX_CUM  0x1c000000      /* Designed Max Cumulative Read Size */
+#define  PCI_X_STATUS_SPL_ERR  0x20000000      /* Rcvd Split Completion Error Msg */
+#define  PCI_X_STATUS_266MHZ   0x40000000      /* 266 MHz capable */
+#define  PCI_X_STATUS_533MHZ   0x80000000      /* 533 MHz capable */
+#define PCI_X_ECC_CSR          8       /* ECC control and status */
+#define PCI_CAP_PCIX_SIZEOF_V0 8       /* size of registers for Version 0 */
+#define PCI_CAP_PCIX_SIZEOF_V1 24      /* size for Version 1 */
+#define PCI_CAP_PCIX_SIZEOF_V2 PCI_CAP_PCIX_SIZEOF_V1  /* Same for v2 */
+
+/* PCI-X registers (Type 1 (bridge) devices) */
+
+#define PCI_X_BRIDGE_SSTATUS   2       /* Secondary Status */
+#define  PCI_X_SSTATUS_64BIT   0x0001  /* Secondary AD interface is 64 bits */
+#define  PCI_X_SSTATUS_133MHZ  0x0002  /* 133 MHz capable */
+#define  PCI_X_SSTATUS_FREQ    0x03c0  /* Secondary Bus Mode and Frequency */
+#define  PCI_X_SSTATUS_VERS    0x3000  /* PCI-X Capability Version */
+#define  PCI_X_SSTATUS_V1      0x1000  /* Mode 2, not Mode 1 */
+#define  PCI_X_SSTATUS_V2      0x2000  /* Mode 1 or Modes 1 and 2 */
+#define  PCI_X_SSTATUS_266MHZ  0x4000  /* 266 MHz capable */
+#define  PCI_X_SSTATUS_533MHZ  0x8000  /* 533 MHz capable */
+#define PCI_X_BRIDGE_STATUS    4       /* Bridge Status */
+
+/* PCI Bridge Subsystem ID registers */
+
+#define PCI_SSVID_VENDOR_ID     4      /* PCI Bridge subsystem vendor ID */
+#define PCI_SSVID_DEVICE_ID     6      /* PCI Bridge subsystem device ID */
+
+/* PCI Express capability registers */
+
+#define PCI_EXP_FLAGS          2       /* Capabilities register */
+#define PCI_EXP_FLAGS_VERS     0x000f  /* Capability version */
+#define PCI_EXP_FLAGS_TYPE     0x00f0  /* Device/Port type */
+#define  PCI_EXP_TYPE_ENDPOINT 0x0     /* Express Endpoint */
+#define  PCI_EXP_TYPE_LEG_END  0x1     /* Legacy Endpoint */
+#define  PCI_EXP_TYPE_ROOT_PORT 0x4    /* Root Port */
+#define  PCI_EXP_TYPE_UPSTREAM 0x5     /* Upstream Port */
+#define  PCI_EXP_TYPE_DOWNSTREAM 0x6   /* Downstream Port */
+#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7   /* PCIe to PCI/PCI-X Bridge */
+#define  PCI_EXP_TYPE_PCIE_BRIDGE 0x8  /* PCI/PCI-X to PCIe Bridge */
+#define  PCI_EXP_TYPE_RC_END   0x9     /* Root Complex Integrated Endpoint */
+#define  PCI_EXP_TYPE_RC_EC    0xa     /* Root Complex Event Collector */
+#define PCI_EXP_FLAGS_SLOT     0x0100  /* Slot implemented */
+#define PCI_EXP_FLAGS_IRQ      0x3e00  /* Interrupt message number */
+#define PCI_EXP_DEVCAP         4       /* Device capabilities */
+#define  PCI_EXP_DEVCAP_PAYLOAD        0x00000007 /* Max_Payload_Size */
+#define  PCI_EXP_DEVCAP_PHANTOM        0x00000018 /* Phantom functions */
+#define  PCI_EXP_DEVCAP_EXT_TAG        0x00000020 /* Extended tags */
+#define  PCI_EXP_DEVCAP_L0S    0x000001c0 /* L0s Acceptable Latency */
+#define  PCI_EXP_DEVCAP_L1     0x00000e00 /* L1 Acceptable Latency */
+#define  PCI_EXP_DEVCAP_ATN_BUT        0x00001000 /* Attention Button Present */
+#define  PCI_EXP_DEVCAP_ATN_IND        0x00002000 /* Attention Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_IND        0x00004000 /* Power Indicator Present */
+#define  PCI_EXP_DEVCAP_RBER   0x00008000 /* Role-Based Error Reporting */
+#define  PCI_EXP_DEVCAP_PWR_VAL        0x03fc0000 /* Slot Power Limit Value */
+#define  PCI_EXP_DEVCAP_PWR_SCL        0x0c000000 /* Slot Power Limit Scale */
+#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
+#define PCI_EXP_DEVCTL         8       /* Device Control */
+#define  PCI_EXP_DEVCTL_CERE   0x0001  /* Correctable Error Reporting En. */
+#define  PCI_EXP_DEVCTL_NFERE  0x0002  /* Non-Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_FERE   0x0004  /* Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_URRE   0x0008  /* Unsupported Request Reporting En. */
+#define  PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
+#define  PCI_EXP_DEVCTL_PAYLOAD        0x00e0  /* Max_Payload_Size */
+#define  PCI_EXP_DEVCTL_EXT_TAG        0x0100  /* Extended Tag Field Enable */
+#define  PCI_EXP_DEVCTL_PHANTOM        0x0200  /* Phantom Functions Enable */
+#define  PCI_EXP_DEVCTL_AUX_PME        0x0400  /* Auxiliary Power PM Enable */
+#define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
+#define  PCI_EXP_DEVCTL_READRQ 0x7000  /* Max_Read_Request_Size */
+#define  PCI_EXP_DEVCTL_READRQ_128B  0x0000 /* 128 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_256B  0x1000 /* 256 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_512B  0x2000 /* 512 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_1024B 0x3000 /* 1024 Bytes */
+#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
+#define PCI_EXP_DEVSTA         10      /* Device Status */
+#define  PCI_EXP_DEVSTA_CED    0x0001  /* Correctable Error Detected */
+#define  PCI_EXP_DEVSTA_NFED   0x0002  /* Non-Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_FED    0x0004  /* Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_URD    0x0008  /* Unsupported Request Detected */
+#define  PCI_EXP_DEVSTA_AUXPD  0x0010  /* AUX Power Detected */
+#define  PCI_EXP_DEVSTA_TRPND  0x0020  /* Transactions Pending */
+#define PCI_EXP_LNKCAP         12      /* Link Capabilities */
+#define  PCI_EXP_LNKCAP_SLS    0x0000000f /* Supported Link Speeds */
+#define  PCI_EXP_LNKCAP_SLS_2_5GB 0x00000001 /* LNKCAP2 SLS Vector bit 0 */
+#define  PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002 /* LNKCAP2 SLS Vector bit 1 */
+#define  PCI_EXP_LNKCAP_MLW    0x000003f0 /* Maximum Link Width */
+#define  PCI_EXP_LNKCAP_ASPMS  0x00000c00 /* ASPM Support */
+#define  PCI_EXP_LNKCAP_L0SEL  0x00007000 /* L0s Exit Latency */
+#define  PCI_EXP_LNKCAP_L1EL   0x00038000 /* L1 Exit Latency */
+#define  PCI_EXP_LNKCAP_CLKPM  0x00040000 /* Clock Power Management */
+#define  PCI_EXP_LNKCAP_SDERC  0x00080000 /* Surprise Down Error Reporting Capable */
+#define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link Active Reporting Capable */
+#define  PCI_EXP_LNKCAP_LBNC   0x00200000 /* Link Bandwidth Notification Capability */
+#define  PCI_EXP_LNKCAP_PN     0xff000000 /* Port Number */
+#define PCI_EXP_LNKCTL         16      /* Link Control */
+#define  PCI_EXP_LNKCTL_ASPMC  0x0003  /* ASPM Control */
+#define  PCI_EXP_LNKCTL_ASPM_L0S 0x0001        /* L0s Enable */
+#define  PCI_EXP_LNKCTL_ASPM_L1  0x0002        /* L1 Enable */
+#define  PCI_EXP_LNKCTL_RCB    0x0008  /* Read Completion Boundary */
+#define  PCI_EXP_LNKCTL_LD     0x0010  /* Link Disable */
+#define  PCI_EXP_LNKCTL_RL     0x0020  /* Retrain Link */
+#define  PCI_EXP_LNKCTL_CCC    0x0040  /* Common Clock Configuration */
+#define  PCI_EXP_LNKCTL_ES     0x0080  /* Extended Synch */
+#define  PCI_EXP_LNKCTL_CLKREQ_EN 0x0100 /* Enable clkreq */
+#define  PCI_EXP_LNKCTL_HAWD   0x0200  /* Hardware Autonomous Width Disable */
+#define  PCI_EXP_LNKCTL_LBMIE  0x0400  /* Link Bandwidth Management Interrupt Enable */
+#define  PCI_EXP_LNKCTL_LABIE  0x0800  /* Link Autonomous Bandwidth Interrupt Enable */
+#define PCI_EXP_LNKSTA         18      /* Link Status */
+#define  PCI_EXP_LNKSTA_CLS    0x000f  /* Current Link Speed */
+#define  PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */
+#define  PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */
+#define  PCI_EXP_LNKSTA_CLS_8_0GB 0x0003 /* Current Link Speed 8.0GT/s */
+#define  PCI_EXP_LNKSTA_NLW    0x03f0  /* Negotiated Link Width */
+#define  PCI_EXP_LNKSTA_NLW_X1 0x0010  /* Current Link Width x1 */
+#define  PCI_EXP_LNKSTA_NLW_X2 0x0020  /* Current Link Width x2 */
+#define  PCI_EXP_LNKSTA_NLW_X4 0x0040  /* Current Link Width x4 */
+#define  PCI_EXP_LNKSTA_NLW_X8 0x0080  /* Current Link Width x8 */
+#define  PCI_EXP_LNKSTA_NLW_SHIFT 4    /* start of NLW mask in link status */
+#define  PCI_EXP_LNKSTA_LT     0x0800  /* Link Training */
+#define  PCI_EXP_LNKSTA_SLC    0x1000  /* Slot Clock Configuration */
+#define  PCI_EXP_LNKSTA_DLLLA  0x2000  /* Data Link Layer Link Active */
+#define  PCI_EXP_LNKSTA_LBMS   0x4000  /* Link Bandwidth Management Status */
+#define  PCI_EXP_LNKSTA_LABS   0x8000  /* Link Autonomous Bandwidth Status */
+#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V1 20      /* v1 endpoints end here */
+#define PCI_EXP_SLTCAP         20      /* Slot Capabilities */
+#define  PCI_EXP_SLTCAP_ABP    0x00000001 /* Attention Button Present */
+#define  PCI_EXP_SLTCAP_PCP    0x00000002 /* Power Controller Present */
+#define  PCI_EXP_SLTCAP_MRLSP  0x00000004 /* MRL Sensor Present */
+#define  PCI_EXP_SLTCAP_AIP    0x00000008 /* Attention Indicator Present */
+#define  PCI_EXP_SLTCAP_PIP    0x00000010 /* Power Indicator Present */
+#define  PCI_EXP_SLTCAP_HPS    0x00000020 /* Hot-Plug Surprise */
+#define  PCI_EXP_SLTCAP_HPC    0x00000040 /* Hot-Plug Capable */
+#define  PCI_EXP_SLTCAP_SPLV   0x00007f80 /* Slot Power Limit Value */
+#define  PCI_EXP_SLTCAP_SPLS   0x00018000 /* Slot Power Limit Scale */
+#define  PCI_EXP_SLTCAP_EIP    0x00020000 /* Electromechanical Interlock Present */
+#define  PCI_EXP_SLTCAP_NCCS   0x00040000 /* No Command Completed Support */
+#define  PCI_EXP_SLTCAP_PSN    0xfff80000 /* Physical Slot Number */
+#define PCI_EXP_SLTCTL         24      /* Slot Control */
+#define  PCI_EXP_SLTCTL_ABPE   0x0001  /* Attention Button Pressed Enable */
+#define  PCI_EXP_SLTCTL_PFDE   0x0002  /* Power Fault Detected Enable */
+#define  PCI_EXP_SLTCTL_MRLSCE 0x0004  /* MRL Sensor Changed Enable */
+#define  PCI_EXP_SLTCTL_PDCE   0x0008  /* Presence Detect Changed Enable */
+#define  PCI_EXP_SLTCTL_CCIE   0x0010  /* Command Completed Interrupt Enable */
+#define  PCI_EXP_SLTCTL_HPIE   0x0020  /* Hot-Plug Interrupt Enable */
+#define  PCI_EXP_SLTCTL_AIC    0x00c0  /* Attention Indicator Control */
+#define  PCI_EXP_SLTCTL_ATTN_IND_ON    0x0040 /* Attention Indicator on */
+#define  PCI_EXP_SLTCTL_ATTN_IND_BLINK 0x0080 /* Attention Indicator blinking */
+#define  PCI_EXP_SLTCTL_ATTN_IND_OFF   0x00c0 /* Attention Indicator off */
+#define  PCI_EXP_SLTCTL_PIC    0x0300  /* Power Indicator Control */
+#define  PCI_EXP_SLTCTL_PWR_IND_ON     0x0100 /* Power Indicator on */
+#define  PCI_EXP_SLTCTL_PWR_IND_BLINK  0x0200 /* Power Indicator blinking */
+#define  PCI_EXP_SLTCTL_PWR_IND_OFF    0x0300 /* Power Indicator off */
+#define  PCI_EXP_SLTCTL_PCC    0x0400  /* Power Controller Control */
+#define  PCI_EXP_SLTCTL_PWR_ON         0x0000 /* Power On */
+#define  PCI_EXP_SLTCTL_PWR_OFF        0x0400 /* Power Off */
+#define  PCI_EXP_SLTCTL_EIC    0x0800  /* Electromechanical Interlock Control */
+#define  PCI_EXP_SLTCTL_DLLSCE 0x1000  /* Data Link Layer State Changed Enable */
+#define PCI_EXP_SLTSTA         26      /* Slot Status */
+#define  PCI_EXP_SLTSTA_ABP    0x0001  /* Attention Button Pressed */
+#define  PCI_EXP_SLTSTA_PFD    0x0002  /* Power Fault Detected */
+#define  PCI_EXP_SLTSTA_MRLSC  0x0004  /* MRL Sensor Changed */
+#define  PCI_EXP_SLTSTA_PDC    0x0008  /* Presence Detect Changed */
+#define  PCI_EXP_SLTSTA_CC     0x0010  /* Command Completed */
+#define  PCI_EXP_SLTSTA_MRLSS  0x0020  /* MRL Sensor State */
+#define  PCI_EXP_SLTSTA_PDS    0x0040  /* Presence Detect State */
+#define  PCI_EXP_SLTSTA_EIS    0x0080  /* Electromechanical Interlock Status */
+#define  PCI_EXP_SLTSTA_DLLSC  0x0100  /* Data Link Layer State Changed */
+#define PCI_EXP_RTCTL          28      /* Root Control */
+#define  PCI_EXP_RTCTL_SECEE   0x0001  /* System Error on Correctable Error */
+#define  PCI_EXP_RTCTL_SENFEE  0x0002  /* System Error on Non-Fatal Error */
+#define  PCI_EXP_RTCTL_SEFEE   0x0004  /* System Error on Fatal Error */
+#define  PCI_EXP_RTCTL_PMEIE   0x0008  /* PME Interrupt Enable */
+#define  PCI_EXP_RTCTL_CRSSVE  0x0010  /* CRS Software Visibility Enable */
+#define PCI_EXP_RTCAP          30      /* Root Capabilities */
+#define  PCI_EXP_RTCAP_CRSVIS  0x0001  /* CRS Software Visibility capability */
+#define PCI_EXP_RTSTA          32      /* Root Status */
+#define PCI_EXP_RTSTA_PME      0x00010000 /* PME status */
+#define PCI_EXP_RTSTA_PENDING  0x00020000 /* PME pending */
+/*
+ * The Device Capabilities 2, Device Status 2, Device Control 2,
+ * Link Capabilities 2, Link Status 2, Link Control 2,
+ * Slot Capabilities 2, Slot Status 2, and Slot Control 2 registers
+ * are only present on devices with PCIe Capability version 2.
+ * Use pcie_capability_read_word() and similar interfaces to use them
+ * safely.
+ */
+#define PCI_EXP_DEVCAP2                36      /* Device Capabilities 2 */
+#define  PCI_EXP_DEVCAP2_ARI           0x00000020 /* Alternative Routing-ID */
+#define  PCI_EXP_DEVCAP2_LTR           0x00000800 /* Latency tolerance reporting */
+#define  PCI_EXP_DEVCAP2_OBFF_MASK     0x000c0000 /* OBFF support mechanism */
+#define  PCI_EXP_DEVCAP2_OBFF_MSG      0x00040000 /* New message signaling */
+#define  PCI_EXP_DEVCAP2_OBFF_WAKE     0x00080000 /* Re-use WAKE# for OBFF */
+#define PCI_EXP_DEVCTL2                40      /* Device Control 2 */
+#define  PCI_EXP_DEVCTL2_COMP_TIMEOUT  0x000f  /* Completion Timeout Value */
+#define  PCI_EXP_DEVCTL2_ARI           0x0020  /* Alternative Routing-ID */
+#define  PCI_EXP_DEVCTL2_IDO_REQ_EN    0x0100  /* Allow IDO for requests */
+#define  PCI_EXP_DEVCTL2_IDO_CMP_EN    0x0200  /* Allow IDO for completions */
+#define  PCI_EXP_DEVCTL2_LTR_EN                0x0400  /* Enable LTR mechanism */
+#define  PCI_EXP_DEVCTL2_OBFF_MSGA_EN  0x2000  /* Enable OBFF Message type A */
+#define  PCI_EXP_DEVCTL2_OBFF_MSGB_EN  0x4000  /* Enable OBFF Message type B */
+#define  PCI_EXP_DEVCTL2_OBFF_WAKE_EN  0x6000  /* OBFF using WAKE# signaling */
+#define PCI_EXP_DEVSTA2                42      /* Device Status 2 */
+#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 44      /* v2 endpoints end here */
+#define PCI_EXP_LNKCAP2                44      /* Link Capabilities 2 */
+#define  PCI_EXP_LNKCAP2_SLS_2_5GB     0x00000002 /* Supported Speed 2.5GT/s */
+#define  PCI_EXP_LNKCAP2_SLS_5_0GB     0x00000004 /* Supported Speed 5.0GT/s */
+#define  PCI_EXP_LNKCAP2_SLS_8_0GB     0x00000008 /* Supported Speed 8.0GT/s */
+#define  PCI_EXP_LNKCAP2_CROSSLINK     0x00000100 /* Crosslink supported */
+#define PCI_EXP_LNKCTL2                48      /* Link Control 2 */
+#define PCI_EXP_LNKSTA2                50      /* Link Status 2 */
+#define PCI_EXP_SLTCAP2                52      /* Slot Capabilities 2 */
+#define PCI_EXP_SLTCTL2                56      /* Slot Control 2 */
+#define PCI_EXP_SLTSTA2                58      /* Slot Status 2 */
+
+/* Extended Capabilities (PCI-X 2.0 and Express) */
+#define PCI_EXT_CAP_ID(header)         (header & 0x0000ffff)
+#define PCI_EXT_CAP_VER(header)                ((header >> 16) & 0xf)
+#define PCI_EXT_CAP_NEXT(header)       ((header >> 20) & 0xffc)
+
+#define PCI_EXT_CAP_ID_ERR     0x01    /* Advanced Error Reporting */
+#define PCI_EXT_CAP_ID_VC      0x02    /* Virtual Channel Capability */
+#define PCI_EXT_CAP_ID_DSN     0x03    /* Device Serial Number */
+#define PCI_EXT_CAP_ID_PWR     0x04    /* Power Budgeting */
+#define PCI_EXT_CAP_ID_RCLD    0x05    /* Root Complex Link Declaration */
+#define PCI_EXT_CAP_ID_RCILC   0x06    /* Root Complex Internal Link Control */
+#define PCI_EXT_CAP_ID_RCEC    0x07    /* Root Complex Event Collector */
+#define PCI_EXT_CAP_ID_MFVC    0x08    /* Multi-Function VC Capability */
+#define PCI_EXT_CAP_ID_VC9     0x09    /* same as _VC */
+#define PCI_EXT_CAP_ID_RCRB    0x0A    /* Root Complex RB? */
+#define PCI_EXT_CAP_ID_VNDR    0x0B    /* Vendor-Specific */
+#define PCI_EXT_CAP_ID_CAC     0x0C    /* Config Access - obsolete */
+#define PCI_EXT_CAP_ID_ACS     0x0D    /* Access Control Services */
+#define PCI_EXT_CAP_ID_ARI     0x0E    /* Alternate Routing ID */
+#define PCI_EXT_CAP_ID_ATS     0x0F    /* Address Translation Services */
+#define PCI_EXT_CAP_ID_SRIOV   0x10    /* Single Root I/O Virtualization */
+#define PCI_EXT_CAP_ID_MRIOV   0x11    /* Multi Root I/O Virtualization */
+#define PCI_EXT_CAP_ID_MCAST   0x12    /* Multicast */
+#define PCI_EXT_CAP_ID_PRI     0x13    /* Page Request Interface */
+#define PCI_EXT_CAP_ID_AMD_XXX 0x14    /* Reserved for AMD */
+#define PCI_EXT_CAP_ID_REBAR   0x15    /* Resizable BAR */
+#define PCI_EXT_CAP_ID_DPA     0x16    /* Dynamic Power Allocation */
+#define PCI_EXT_CAP_ID_TPH     0x17    /* TPH Requester */
+#define PCI_EXT_CAP_ID_LTR     0x18    /* Latency Tolerance Reporting */
+#define PCI_EXT_CAP_ID_SECPCI  0x19    /* Secondary PCIe Capability */
+#define PCI_EXT_CAP_ID_PMUX    0x1A    /* Protocol Multiplexing */
+#define PCI_EXT_CAP_ID_PASID   0x1B    /* Process Address Space ID */
+#define PCI_EXT_CAP_ID_MAX     PCI_EXT_CAP_ID_PASID
+
+#define PCI_EXT_CAP_DSN_SIZEOF 12
+#define PCI_EXT_CAP_MCAST_ENDPOINT_SIZEOF 40
+
+/* Advanced Error Reporting */
+#define PCI_ERR_UNCOR_STATUS   4       /* Uncorrectable Error Status */
+#define  PCI_ERR_UNC_UND       0x00000001      /* Undefined */
+#define  PCI_ERR_UNC_DLP       0x00000010      /* Data Link Protocol */
+#define  PCI_ERR_UNC_SURPDN    0x00000020      /* Surprise Down */
+#define  PCI_ERR_UNC_POISON_TLP        0x00001000      /* Poisoned TLP */
+#define  PCI_ERR_UNC_FCP       0x00002000      /* Flow Control Protocol */
+#define  PCI_ERR_UNC_COMP_TIME 0x00004000      /* Completion Timeout */
+#define  PCI_ERR_UNC_COMP_ABORT        0x00008000      /* Completer Abort */
+#define  PCI_ERR_UNC_UNX_COMP  0x00010000      /* Unexpected Completion */
+#define  PCI_ERR_UNC_RX_OVER   0x00020000      /* Receiver Overflow */
+#define  PCI_ERR_UNC_MALF_TLP  0x00040000      /* Malformed TLP */
+#define  PCI_ERR_UNC_ECRC      0x00080000      /* ECRC Error Status */
+#define  PCI_ERR_UNC_UNSUP     0x00100000      /* Unsupported Request */
+#define  PCI_ERR_UNC_ACSV      0x00200000      /* ACS Violation */
+#define  PCI_ERR_UNC_INTN      0x00400000      /* internal error */
+#define  PCI_ERR_UNC_MCBTLP    0x00800000      /* MC blocked TLP */
+#define  PCI_ERR_UNC_ATOMEG    0x01000000      /* Atomic egress blocked */
+#define  PCI_ERR_UNC_TLPPRE    0x02000000      /* TLP prefix blocked */
+#define PCI_ERR_UNCOR_MASK     8       /* Uncorrectable Error Mask */
+       /* Same bits as above */
+#define PCI_ERR_UNCOR_SEVER    12      /* Uncorrectable Error Severity */
+       /* Same bits as above */
+#define PCI_ERR_COR_STATUS     16      /* Correctable Error Status */
+#define  PCI_ERR_COR_RCVR      0x00000001      /* Receiver Error Status */
+#define  PCI_ERR_COR_BAD_TLP   0x00000040      /* Bad TLP Status */
+#define  PCI_ERR_COR_BAD_DLLP  0x00000080      /* Bad DLLP Status */
+#define  PCI_ERR_COR_REP_ROLL  0x00000100      /* REPLAY_NUM Rollover */
+#define  PCI_ERR_COR_REP_TIMER 0x00001000      /* Replay Timer Timeout */
+#define  PCI_ERR_COR_ADV_NFAT  0x00002000      /* Advisory Non-Fatal */
+#define  PCI_ERR_COR_INTERNAL  0x00004000      /* Corrected Internal */
+#define  PCI_ERR_COR_LOG_OVER  0x00008000      /* Header Log Overflow */
+#define PCI_ERR_COR_MASK       20      /* Correctable Error Mask */
+       /* Same bits as above */
+#define PCI_ERR_CAP            24      /* Advanced Error Capabilities */
+#define  PCI_ERR_CAP_FEP(x)    ((x) & 31)      /* First Error Pointer */
+#define  PCI_ERR_CAP_ECRC_GENC 0x00000020      /* ECRC Generation Capable */
+#define  PCI_ERR_CAP_ECRC_GENE 0x00000040      /* ECRC Generation Enable */
+#define  PCI_ERR_CAP_ECRC_CHKC 0x00000080      /* ECRC Check Capable */
+#define  PCI_ERR_CAP_ECRC_CHKE 0x00000100      /* ECRC Check Enable */
+#define PCI_ERR_HEADER_LOG     28      /* Header Log Register (16 bytes) */
+#define PCI_ERR_ROOT_COMMAND   44      /* Root Error Command */
+/* Correctable Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_COR_EN                0x00000001
+/* Non-fatal Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_NONFATAL_EN   0x00000002
+/* Fatal Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_FATAL_EN      0x00000004
+#define PCI_ERR_ROOT_STATUS    48
+#define PCI_ERR_ROOT_COR_RCV           0x00000001      /* ERR_COR Received */
+/* Multi ERR_COR Received */
+#define PCI_ERR_ROOT_MULTI_COR_RCV     0x00000002
+/* ERR_FATAL/NONFATAL Received */
+#define PCI_ERR_ROOT_UNCOR_RCV         0x00000004
+/* Multi ERR_FATAL/NONFATAL Received */
+#define PCI_ERR_ROOT_MULTI_UNCOR_RCV   0x00000008
+#define PCI_ERR_ROOT_FIRST_FATAL       0x00000010      /* First Fatal */
+#define PCI_ERR_ROOT_NONFATAL_RCV      0x00000020      /* Non-Fatal Received */
+#define PCI_ERR_ROOT_FATAL_RCV         0x00000040      /* Fatal Received */
+#define PCI_ERR_ROOT_ERR_SRC   52      /* Error Source Identification */
+
+/* Virtual Channel */
+#define PCI_VC_PORT_CAP1       4
+#define  PCI_VC_CAP1_EVCC      0x00000007      /* extended VC count */
+#define  PCI_VC_CAP1_LPEVCC    0x00000070      /* low prio extended VC count */
+#define  PCI_VC_CAP1_ARB_SIZE  0x00000c00
+#define PCI_VC_PORT_CAP2       8
+#define  PCI_VC_CAP2_32_PHASE          0x00000002
+#define  PCI_VC_CAP2_64_PHASE          0x00000004
+#define  PCI_VC_CAP2_128_PHASE         0x00000008
+#define  PCI_VC_CAP2_ARB_OFF           0xff000000
+#define PCI_VC_PORT_CTRL       12
+#define  PCI_VC_PORT_CTRL_LOAD_TABLE   0x00000001
+#define PCI_VC_PORT_STATUS     14
+#define  PCI_VC_PORT_STATUS_TABLE      0x00000001
+#define PCI_VC_RES_CAP         16
+#define  PCI_VC_RES_CAP_32_PHASE       0x00000002
+#define  PCI_VC_RES_CAP_64_PHASE       0x00000004
+#define  PCI_VC_RES_CAP_128_PHASE      0x00000008
+#define  PCI_VC_RES_CAP_128_PHASE_TB   0x00000010
+#define  PCI_VC_RES_CAP_256_PHASE      0x00000020
+#define  PCI_VC_RES_CAP_ARB_OFF                0xff000000
+#define PCI_VC_RES_CTRL                20
+#define  PCI_VC_RES_CTRL_LOAD_TABLE    0x00010000
+#define  PCI_VC_RES_CTRL_ARB_SELECT    0x000e0000
+#define  PCI_VC_RES_CTRL_ID            0x07000000
+#define  PCI_VC_RES_CTRL_ENABLE                0x80000000
+#define PCI_VC_RES_STATUS      26
+#define  PCI_VC_RES_STATUS_TABLE       0x00000001
+#define  PCI_VC_RES_STATUS_NEGO                0x00000002
+#define PCI_CAP_VC_BASE_SIZEOF         0x10
+#define PCI_CAP_VC_PER_VC_SIZEOF       0x0C
+
+/* Power Budgeting */
+#define PCI_PWR_DSR            4       /* Data Select Register */
+#define PCI_PWR_DATA           8       /* Data Register */
+#define  PCI_PWR_DATA_BASE(x)  ((x) & 0xff)        /* Base Power */
+#define  PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3)    /* Data Scale */
+#define  PCI_PWR_DATA_PM_SUB(x)        (((x) >> 10) & 7)   /* PM Sub State */
+#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
+#define  PCI_PWR_DATA_TYPE(x)  (((x) >> 15) & 7)   /* Type */
+#define  PCI_PWR_DATA_RAIL(x)  (((x) >> 18) & 7)   /* Power Rail */
+#define PCI_PWR_CAP            12      /* Capability */
+#define  PCI_PWR_CAP_BUDGET(x) ((x) & 1)       /* Included in system budget */
+#define PCI_EXT_CAP_PWR_SIZEOF 16
+
+/* Vendor-Specific (VSEC, PCI_EXT_CAP_ID_VNDR) */
+#define PCI_VNDR_HEADER                4       /* Vendor-Specific Header */
+#define  PCI_VNDR_HEADER_ID(x) ((x) & 0xffff)
+#define  PCI_VNDR_HEADER_REV(x)        (((x) >> 16) & 0xf)
+#define  PCI_VNDR_HEADER_LEN(x)        (((x) >> 20) & 0xfff)
+
+/*
+ * HyperTransport sub capability types
+ *
+ * Unfortunately there are both 3 bit and 5 bit capability types defined
+ * in the HT spec, catering for that is a little messy. You probably don't
+ * want to use these directly, just use pci_find_ht_capability() and it
+ * will do the right thing for you.
+ */
+#define HT_3BIT_CAP_MASK       0xE0
+#define HT_CAPTYPE_SLAVE       0x00    /* Slave/Primary link configuration */
+#define HT_CAPTYPE_HOST                0x20    /* Host/Secondary link configuration */
+
+#define HT_5BIT_CAP_MASK       0xF8
+#define HT_CAPTYPE_IRQ         0x80    /* IRQ Configuration */
+#define HT_CAPTYPE_REMAPPING_40        0xA0    /* 40 bit address remapping */
+#define HT_CAPTYPE_REMAPPING_64 0xA2   /* 64 bit address remapping */
+#define HT_CAPTYPE_UNITID_CLUMP        0x90    /* Unit ID clumping */
+#define HT_CAPTYPE_EXTCONF     0x98    /* Extended Configuration Space Access */
+#define HT_CAPTYPE_MSI_MAPPING 0xA8    /* MSI Mapping Capability */
+#define  HT_MSI_FLAGS          0x02            /* Offset to flags */
+#define  HT_MSI_FLAGS_ENABLE   0x1             /* Mapping enable */
+#define  HT_MSI_FLAGS_FIXED    0x2             /* Fixed mapping only */
+#define  HT_MSI_FIXED_ADDR     0x00000000FEE00000ULL   /* Fixed addr */
+#define  HT_MSI_ADDR_LO                0x04            /* Offset to low addr bits */
+#define  HT_MSI_ADDR_LO_MASK   0xFFF00000      /* Low address bit mask */
+#define  HT_MSI_ADDR_HI                0x08            /* Offset to high addr bits */
+#define HT_CAPTYPE_DIRECT_ROUTE        0xB0    /* Direct routing configuration */
+#define HT_CAPTYPE_VCSET       0xB8    /* Virtual Channel configuration */
+#define HT_CAPTYPE_ERROR_RETRY 0xC0    /* Retry on error configuration */
+#define HT_CAPTYPE_GEN3                0xD0    /* Generation 3 HyperTransport configuration */
+#define HT_CAPTYPE_PM          0xE0    /* HyperTransport power management configuration */
+#define HT_CAP_SIZEOF_LONG     28      /* slave & primary */
+#define HT_CAP_SIZEOF_SHORT    24      /* host & secondary */
+
+/* Alternative Routing-ID Interpretation */
+#define PCI_ARI_CAP            0x04    /* ARI Capability Register */
+#define  PCI_ARI_CAP_MFVC      0x0001  /* MFVC Function Groups Capability */
+#define  PCI_ARI_CAP_ACS       0x0002  /* ACS Function Groups Capability */
+#define  PCI_ARI_CAP_NFN(x)    (((x) >> 8) & 0xff) /* Next Function Number */
+#define PCI_ARI_CTRL           0x06    /* ARI Control Register */
+#define  PCI_ARI_CTRL_MFVC     0x0001  /* MFVC Function Groups Enable */
+#define  PCI_ARI_CTRL_ACS      0x0002  /* ACS Function Groups Enable */
+#define  PCI_ARI_CTRL_FG(x)    (((x) >> 4) & 7) /* Function Group */
+#define PCI_EXT_CAP_ARI_SIZEOF 8
+
+/* Address Translation Service */
+#define PCI_ATS_CAP            0x04    /* ATS Capability Register */
+#define  PCI_ATS_CAP_QDEP(x)   ((x) & 0x1f)    /* Invalidate Queue Depth */
+#define  PCI_ATS_MAX_QDEP      32      /* Max Invalidate Queue Depth */
+#define PCI_ATS_CTRL           0x06    /* ATS Control Register */
+#define  PCI_ATS_CTRL_ENABLE   0x8000  /* ATS Enable */
+#define  PCI_ATS_CTRL_STU(x)   ((x) & 0x1f)    /* Smallest Translation Unit */
+#define  PCI_ATS_MIN_STU       12      /* shift of minimum STU block */
+#define PCI_EXT_CAP_ATS_SIZEOF 8
+
+/* Page Request Interface */
+#define PCI_PRI_CTRL           0x04    /* PRI control register */
+#define  PCI_PRI_CTRL_ENABLE   0x01    /* Enable */
+#define  PCI_PRI_CTRL_RESET    0x02    /* Reset */
+#define PCI_PRI_STATUS         0x06    /* PRI status register */
+#define  PCI_PRI_STATUS_RF     0x001   /* Response Failure */
+#define  PCI_PRI_STATUS_UPRGI  0x002   /* Unexpected PRG index */
+#define  PCI_PRI_STATUS_STOPPED        0x100   /* PRI Stopped */
+#define PCI_PRI_MAX_REQ                0x08    /* PRI max reqs supported */
+#define PCI_PRI_ALLOC_REQ      0x0c    /* PRI max reqs allowed */
+#define PCI_EXT_CAP_PRI_SIZEOF 16
+
+/* Process Address Space ID */
+#define PCI_PASID_CAP          0x04    /* PASID feature register */
+#define  PCI_PASID_CAP_EXEC    0x02    /* Exec permissions Supported */
+#define  PCI_PASID_CAP_PRIV    0x04    /* Privilege Mode Supported */
+#define PCI_PASID_CTRL         0x06    /* PASID control register */
+#define  PCI_PASID_CTRL_ENABLE 0x01    /* Enable bit */
+#define  PCI_PASID_CTRL_EXEC   0x02    /* Exec permissions Enable */
+#define  PCI_PASID_CTRL_PRIV   0x04    /* Privilege Mode Enable */
+#define PCI_EXT_CAP_PASID_SIZEOF       8
+
+/* Single Root I/O Virtualization */
+#define PCI_SRIOV_CAP          0x04    /* SR-IOV Capabilities */
+#define  PCI_SRIOV_CAP_VFM     0x01    /* VF Migration Capable */
+#define  PCI_SRIOV_CAP_INTR(x) ((x) >> 21) /* Interrupt Message Number */
+#define PCI_SRIOV_CTRL         0x08    /* SR-IOV Control */
+#define  PCI_SRIOV_CTRL_VFE    0x01    /* VF Enable */
+#define  PCI_SRIOV_CTRL_VFM    0x02    /* VF Migration Enable */
+#define  PCI_SRIOV_CTRL_INTR   0x04    /* VF Migration Interrupt Enable */
+#define  PCI_SRIOV_CTRL_MSE    0x08    /* VF Memory Space Enable */
+#define  PCI_SRIOV_CTRL_ARI    0x10    /* ARI Capable Hierarchy */
+#define PCI_SRIOV_STATUS       0x0a    /* SR-IOV Status */
+#define  PCI_SRIOV_STATUS_VFM  0x01    /* VF Migration Status */
+#define PCI_SRIOV_INITIAL_VF   0x0c    /* Initial VFs */
+#define PCI_SRIOV_TOTAL_VF     0x0e    /* Total VFs */
+#define PCI_SRIOV_NUM_VF       0x10    /* Number of VFs */
+#define PCI_SRIOV_FUNC_LINK    0x12    /* Function Dependency Link */
+#define PCI_SRIOV_VF_OFFSET    0x14    /* First VF Offset */
+#define PCI_SRIOV_VF_STRIDE    0x16    /* Following VF Stride */
+#define PCI_SRIOV_VF_DID       0x1a    /* VF Device ID */
+#define PCI_SRIOV_SUP_PGSIZE   0x1c    /* Supported Page Sizes */
+#define PCI_SRIOV_SYS_PGSIZE   0x20    /* System Page Size */
+#define PCI_SRIOV_BAR          0x24    /* VF BAR0 */
+#define  PCI_SRIOV_NUM_BARS    6       /* Number of VF BARs */
+#define PCI_SRIOV_VFM          0x3c    /* VF Migration State Array Offset*/
+#define  PCI_SRIOV_VFM_BIR(x)  ((x) & 7)       /* State BIR */
+#define  PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7)    /* State Offset */
+#define  PCI_SRIOV_VFM_UA      0x0     /* Inactive.Unavailable */
+#define  PCI_SRIOV_VFM_MI      0x1     /* Dormant.MigrateIn */
+#define  PCI_SRIOV_VFM_MO      0x2     /* Active.MigrateOut */
+#define  PCI_SRIOV_VFM_AV      0x3     /* Active.Available */
+#define PCI_EXT_CAP_SRIOV_SIZEOF 64
+
+#define PCI_LTR_MAX_SNOOP_LAT  0x4
+#define PCI_LTR_MAX_NOSNOOP_LAT        0x6
+#define  PCI_LTR_VALUE_MASK    0x000003ff
+#define  PCI_LTR_SCALE_MASK    0x00001c00
+#define  PCI_LTR_SCALE_SHIFT   10
+#define PCI_EXT_CAP_LTR_SIZEOF 8
+
+/* Access Control Service */
+#define PCI_ACS_CAP            0x04    /* ACS Capability Register */
+#define  PCI_ACS_SV            0x01    /* Source Validation */
+#define  PCI_ACS_TB            0x02    /* Translation Blocking */
+#define  PCI_ACS_RR            0x04    /* P2P Request Redirect */
+#define  PCI_ACS_CR            0x08    /* P2P Completion Redirect */
+#define  PCI_ACS_UF            0x10    /* Upstream Forwarding */
+#define  PCI_ACS_EC            0x20    /* P2P Egress Control */
+#define  PCI_ACS_DT            0x40    /* Direct Translated P2P */
+#define PCI_ACS_EGRESS_BITS    0x05    /* ACS Egress Control Vector Size */
+#define PCI_ACS_CTRL           0x06    /* ACS Control Register */
+#define PCI_ACS_EGRESS_CTL_V   0x08    /* ACS Egress Control Vector */
+
+#define PCI_VSEC_HDR           4       /* extended cap - vendor-specific */
+#define  PCI_VSEC_HDR_LEN_SHIFT        20      /* shift for length field */
+
+/* SATA capability */
+#define PCI_SATA_REGS          4       /* SATA REGs specifier */
+#define  PCI_SATA_REGS_MASK    0xF     /* location - BAR#/inline */
+#define  PCI_SATA_REGS_INLINE  0xF     /* REGS in config space */
+#define PCI_SATA_SIZEOF_SHORT  8
+#define PCI_SATA_SIZEOF_LONG   16
+
+/* Resizable BARs */
+#define PCI_REBAR_CTRL         8       /* control register */
+#define  PCI_REBAR_CTRL_NBAR_MASK      (7 << 5)        /* mask for # bars */
+#define  PCI_REBAR_CTRL_NBAR_SHIFT     5       /* shift for # bars */
+
+/* Dynamic Power Allocation */
+#define PCI_DPA_CAP            4       /* capability register */
+#define  PCI_DPA_CAP_SUBSTATE_MASK     0x1F    /* # substates - 1 */
+#define PCI_DPA_BASE_SIZEOF    16      /* size with 0 substates */
+
+/* TPH Requester */
+#define PCI_TPH_CAP            4       /* capability register */
+#define  PCI_TPH_CAP_LOC_MASK  0x600   /* location mask */
+#define   PCI_TPH_LOC_NONE     0x000   /* no location */
+#define   PCI_TPH_LOC_CAP      0x200   /* in capability */
+#define   PCI_TPH_LOC_MSIX     0x400   /* in MSI-X */
+#define PCI_TPH_CAP_ST_MASK    0x07FF0000      /* st table mask */
+#define PCI_TPH_CAP_ST_SHIFT   16      /* st table shift */
+#define PCI_TPH_BASE_SIZEOF    12      /* size with no st table */
+
+#endif /* LINUX_PCI_REGS_H */
diff --git a/lib/libdss-include/include/linux/perf_event.h b/lib/libdss-include/include/linux/perf_event.h
new file mode 100644 (file)
index 0000000..42b9195
--- /dev/null
@@ -0,0 +1,970 @@
+/*
+ * Performance events:
+ *
+ *    Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de>
+ *    Copyright (C) 2008-2011, Red Hat, Inc., Ingo Molnar
+ *    Copyright (C) 2008-2011, Red Hat, Inc., Peter Zijlstra
+ *
+ * Data type definitions, declarations, prototypes.
+ *
+ *    Started by: Thomas Gleixner and Ingo Molnar
+ *
+ * For licencing details see kernel-base/COPYING
+ */
+#ifndef _LINUX_PERF_EVENT_H
+#define _LINUX_PERF_EVENT_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <asm/byteorder.h>
+
+/*
+ * User-space ABI bits:
+ */
+
+/*
+ * attr.type
+ */
+enum perf_type_id {
+       PERF_TYPE_HARDWARE                      = 0,
+       PERF_TYPE_SOFTWARE                      = 1,
+       PERF_TYPE_TRACEPOINT                    = 2,
+       PERF_TYPE_HW_CACHE                      = 3,
+       PERF_TYPE_RAW                           = 4,
+       PERF_TYPE_BREAKPOINT                    = 5,
+
+       PERF_TYPE_MAX,                          /* non-ABI */
+};
+
+/*
+ * Generalized performance event event_id types, used by the
+ * attr.event_id parameter of the sys_perf_event_open()
+ * syscall:
+ */
+enum perf_hw_id {
+       /*
+        * Common hardware events, generalized by the kernel:
+        */
+       PERF_COUNT_HW_CPU_CYCLES                = 0,
+       PERF_COUNT_HW_INSTRUCTIONS              = 1,
+       PERF_COUNT_HW_CACHE_REFERENCES          = 2,
+       PERF_COUNT_HW_CACHE_MISSES              = 3,
+       PERF_COUNT_HW_BRANCH_INSTRUCTIONS       = 4,
+       PERF_COUNT_HW_BRANCH_MISSES             = 5,
+       PERF_COUNT_HW_BUS_CYCLES                = 6,
+       PERF_COUNT_HW_STALLED_CYCLES_FRONTEND   = 7,
+       PERF_COUNT_HW_STALLED_CYCLES_BACKEND    = 8,
+       PERF_COUNT_HW_REF_CPU_CYCLES            = 9,
+
+       PERF_COUNT_HW_MAX,                      /* non-ABI */
+};
+
+/*
+ * Generalized hardware cache events:
+ *
+ *       { L1-D, L1-I, LLC, ITLB, DTLB, BPU, NODE } x
+ *       { read, write, prefetch } x
+ *       { accesses, misses }
+ */
+enum perf_hw_cache_id {
+       PERF_COUNT_HW_CACHE_L1D                 = 0,
+       PERF_COUNT_HW_CACHE_L1I                 = 1,
+       PERF_COUNT_HW_CACHE_LL                  = 2,
+       PERF_COUNT_HW_CACHE_DTLB                = 3,
+       PERF_COUNT_HW_CACHE_ITLB                = 4,
+       PERF_COUNT_HW_CACHE_BPU                 = 5,
+       PERF_COUNT_HW_CACHE_NODE                = 6,
+
+       PERF_COUNT_HW_CACHE_MAX,                /* non-ABI */
+};
+
+enum perf_hw_cache_op_id {
+       PERF_COUNT_HW_CACHE_OP_READ             = 0,
+       PERF_COUNT_HW_CACHE_OP_WRITE            = 1,
+       PERF_COUNT_HW_CACHE_OP_PREFETCH         = 2,
+
+       PERF_COUNT_HW_CACHE_OP_MAX,             /* non-ABI */
+};
+
+enum perf_hw_cache_op_result_id {
+       PERF_COUNT_HW_CACHE_RESULT_ACCESS       = 0,
+       PERF_COUNT_HW_CACHE_RESULT_MISS         = 1,
+
+       PERF_COUNT_HW_CACHE_RESULT_MAX,         /* non-ABI */
+};
+
+/*
+ * Special "software" events provided by the kernel, even if the hardware
+ * does not support performance events. These events measure various
+ * physical and sw events of the kernel (and allow the profiling of them as
+ * well):
+ */
+enum perf_sw_ids {
+       PERF_COUNT_SW_CPU_CLOCK                 = 0,
+       PERF_COUNT_SW_TASK_CLOCK                = 1,
+       PERF_COUNT_SW_PAGE_FAULTS               = 2,
+       PERF_COUNT_SW_CONTEXT_SWITCHES          = 3,
+       PERF_COUNT_SW_CPU_MIGRATIONS            = 4,
+       PERF_COUNT_SW_PAGE_FAULTS_MIN           = 5,
+       PERF_COUNT_SW_PAGE_FAULTS_MAJ           = 6,
+       PERF_COUNT_SW_ALIGNMENT_FAULTS          = 7,
+       PERF_COUNT_SW_EMULATION_FAULTS          = 8,
+       PERF_COUNT_SW_DUMMY                     = 9,
+       PERF_COUNT_SW_BPF_OUTPUT                = 10,
+
+       PERF_COUNT_SW_MAX,                      /* non-ABI */
+};
+
+/*
+ * Bits that can be set in attr.sample_type to request information
+ * in the overflow packets.
+ */
+enum perf_event_sample_format {
+       PERF_SAMPLE_IP                          = 1U << 0,
+       PERF_SAMPLE_TID                         = 1U << 1,
+       PERF_SAMPLE_TIME                        = 1U << 2,
+       PERF_SAMPLE_ADDR                        = 1U << 3,
+       PERF_SAMPLE_READ                        = 1U << 4,
+       PERF_SAMPLE_CALLCHAIN                   = 1U << 5,
+       PERF_SAMPLE_ID                          = 1U << 6,
+       PERF_SAMPLE_CPU                         = 1U << 7,
+       PERF_SAMPLE_PERIOD                      = 1U << 8,
+       PERF_SAMPLE_STREAM_ID                   = 1U << 9,
+       PERF_SAMPLE_RAW                         = 1U << 10,
+       PERF_SAMPLE_BRANCH_STACK                = 1U << 11,
+       PERF_SAMPLE_REGS_USER                   = 1U << 12,
+       PERF_SAMPLE_STACK_USER                  = 1U << 13,
+       PERF_SAMPLE_WEIGHT                      = 1U << 14,
+       PERF_SAMPLE_DATA_SRC                    = 1U << 15,
+       PERF_SAMPLE_IDENTIFIER                  = 1U << 16,
+       PERF_SAMPLE_TRANSACTION                 = 1U << 17,
+       PERF_SAMPLE_REGS_INTR                   = 1U << 18,
+
+       PERF_SAMPLE_MAX = 1U << 19,             /* non-ABI */
+};
+
+/*
+ * values to program into branch_sample_type when PERF_SAMPLE_BRANCH is set
+ *
+ * If the user does not pass priv level information via branch_sample_type,
+ * the kernel uses the event's priv level. Branch and event priv levels do
+ * not have to match. Branch priv level is checked for permissions.
+ *
+ * The branch types can be combined, however BRANCH_ANY covers all types
+ * of branches and therefore it supersedes all the other types.
+ */
+enum perf_branch_sample_type_shift {
+       PERF_SAMPLE_BRANCH_USER_SHIFT           = 0, /* user branches */
+       PERF_SAMPLE_BRANCH_KERNEL_SHIFT         = 1, /* kernel branches */
+       PERF_SAMPLE_BRANCH_HV_SHIFT             = 2, /* hypervisor branches */
+
+       PERF_SAMPLE_BRANCH_ANY_SHIFT            = 3, /* any branch types */
+       PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT       = 4, /* any call branch */
+       PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT     = 5, /* any return branch */
+       PERF_SAMPLE_BRANCH_IND_CALL_SHIFT       = 6, /* indirect calls */
+       PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT       = 7, /* transaction aborts */
+       PERF_SAMPLE_BRANCH_IN_TX_SHIFT          = 8, /* in transaction */
+       PERF_SAMPLE_BRANCH_NO_TX_SHIFT          = 9, /* not in transaction */
+       PERF_SAMPLE_BRANCH_COND_SHIFT           = 10, /* conditional branches */
+
+       PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT     = 11, /* call/ret stack */
+       PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT       = 12, /* indirect jumps */
+       PERF_SAMPLE_BRANCH_CALL_SHIFT           = 13, /* direct call */
+
+       PERF_SAMPLE_BRANCH_MAX_SHIFT            /* non-ABI */
+};
+
+enum perf_branch_sample_type {
+       PERF_SAMPLE_BRANCH_USER         = 1U << PERF_SAMPLE_BRANCH_USER_SHIFT,
+       PERF_SAMPLE_BRANCH_KERNEL       = 1U << PERF_SAMPLE_BRANCH_KERNEL_SHIFT,
+       PERF_SAMPLE_BRANCH_HV           = 1U << PERF_SAMPLE_BRANCH_HV_SHIFT,
+
+       PERF_SAMPLE_BRANCH_ANY          = 1U << PERF_SAMPLE_BRANCH_ANY_SHIFT,
+       PERF_SAMPLE_BRANCH_ANY_CALL     = 1U << PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT,
+       PERF_SAMPLE_BRANCH_ANY_RETURN   = 1U << PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT,
+       PERF_SAMPLE_BRANCH_IND_CALL     = 1U << PERF_SAMPLE_BRANCH_IND_CALL_SHIFT,
+       PERF_SAMPLE_BRANCH_ABORT_TX     = 1U << PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_IN_TX        = 1U << PERF_SAMPLE_BRANCH_IN_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_NO_TX        = 1U << PERF_SAMPLE_BRANCH_NO_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_COND         = 1U << PERF_SAMPLE_BRANCH_COND_SHIFT,
+
+       PERF_SAMPLE_BRANCH_CALL_STACK   = 1U << PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT,
+       PERF_SAMPLE_BRANCH_IND_JUMP     = 1U << PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT,
+       PERF_SAMPLE_BRANCH_CALL         = 1U << PERF_SAMPLE_BRANCH_CALL_SHIFT,
+
+       PERF_SAMPLE_BRANCH_MAX          = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
+};
+
+#define PERF_SAMPLE_BRANCH_PLM_ALL \
+       (PERF_SAMPLE_BRANCH_USER|\
+        PERF_SAMPLE_BRANCH_KERNEL|\
+        PERF_SAMPLE_BRANCH_HV)
+
+/*
+ * Values to determine ABI of the registers dump.
+ */
+enum perf_sample_regs_abi {
+       PERF_SAMPLE_REGS_ABI_NONE       = 0,
+       PERF_SAMPLE_REGS_ABI_32         = 1,
+       PERF_SAMPLE_REGS_ABI_64         = 2,
+};
+
+/*
+ * Values for the memory transaction event qualifier, mostly for
+ * abort events. Multiple bits can be set.
+ */
+enum {
+       PERF_TXN_ELISION        = (1 << 0), /* From elision */
+       PERF_TXN_TRANSACTION    = (1 << 1), /* From transaction */
+       PERF_TXN_SYNC           = (1 << 2), /* Instruction is related */
+       PERF_TXN_ASYNC          = (1 << 3), /* Instruction not related */
+       PERF_TXN_RETRY          = (1 << 4), /* Retry possible */
+       PERF_TXN_CONFLICT       = (1 << 5), /* Conflict abort */
+       PERF_TXN_CAPACITY_WRITE = (1 << 6), /* Capacity write abort */
+       PERF_TXN_CAPACITY_READ  = (1 << 7), /* Capacity read abort */
+
+       PERF_TXN_MAX            = (1 << 8), /* non-ABI */
+
+       /* bits 32..63 are reserved for the abort code */
+
+       PERF_TXN_ABORT_MASK  = (0xffffffffULL << 32),
+       PERF_TXN_ABORT_SHIFT = 32,
+};
+
+/*
+ * The format of the data returned by read() on a perf event fd,
+ * as specified by attr.read_format:
+ *
+ * struct read_format {
+ *     { u64           value;
+ *       { u64         time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED
+ *       { u64         time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING
+ *       { u64         id;           } && PERF_FORMAT_ID
+ *     } && !PERF_FORMAT_GROUP
+ *
+ *     { u64           nr;
+ *       { u64         time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED
+ *       { u64         time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING
+ *       { u64         value;
+ *         { u64       id;           } && PERF_FORMAT_ID
+ *       }             cntr[nr];
+ *     } && PERF_FORMAT_GROUP
+ * };
+ */
+enum perf_event_read_format {
+       PERF_FORMAT_TOTAL_TIME_ENABLED          = 1U << 0,
+       PERF_FORMAT_TOTAL_TIME_RUNNING          = 1U << 1,
+       PERF_FORMAT_ID                          = 1U << 2,
+       PERF_FORMAT_GROUP                       = 1U << 3,
+
+       PERF_FORMAT_MAX = 1U << 4,              /* non-ABI */
+};
+
+#define PERF_ATTR_SIZE_VER0    64      /* sizeof first published struct */
+#define PERF_ATTR_SIZE_VER1    72      /* add: config2 */
+#define PERF_ATTR_SIZE_VER2    80      /* add: branch_sample_type */
+#define PERF_ATTR_SIZE_VER3    96      /* add: sample_regs_user */
+                                       /* add: sample_stack_user */
+#define PERF_ATTR_SIZE_VER4    104     /* add: sample_regs_intr */
+#define PERF_ATTR_SIZE_VER5    112     /* add: aux_watermark */
+
+/*
+ * Hardware event_id to monitor via a performance monitoring event:
+ */
+struct perf_event_attr {
+
+       /*
+        * Major type: hardware/software/tracepoint/etc.
+        */
+       __u32                   type;
+
+       /*
+        * Size of the attr structure, for fwd/bwd compat.
+        */
+       __u32                   size;
+
+       /*
+        * Type specific configuration information.
+        */
+       __u64                   config;
+
+       union {
+               __u64           sample_period;
+               __u64           sample_freq;
+       };
+
+       __u64                   sample_type;
+       __u64                   read_format;
+
+       __u64                   disabled       :  1, /* off by default        */
+                               inherit        :  1, /* children inherit it   */
+                               pinned         :  1, /* must always be on PMU */
+                               exclusive      :  1, /* only group on PMU     */
+                               exclude_user   :  1, /* don't count user      */
+                               exclude_kernel :  1, /* ditto kernel          */
+                               exclude_hv     :  1, /* ditto hypervisor      */
+                               exclude_idle   :  1, /* don't count when idle */
+                               mmap           :  1, /* include mmap data     */
+                               comm           :  1, /* include comm data     */
+                               freq           :  1, /* use freq, not period  */
+                               inherit_stat   :  1, /* per task counts       */
+                               enable_on_exec :  1, /* next exec enables     */
+                               task           :  1, /* trace fork/exit       */
+                               watermark      :  1, /* wakeup_watermark      */
+                               /*
+                                * precise_ip:
+                                *
+                                *  0 - SAMPLE_IP can have arbitrary skid
+                                *  1 - SAMPLE_IP must have constant skid
+                                *  2 - SAMPLE_IP requested to have 0 skid
+                                *  3 - SAMPLE_IP must have 0 skid
+                                *
+                                *  See also PERF_RECORD_MISC_EXACT_IP
+                                */
+                               precise_ip     :  2, /* skid constraint       */
+                               mmap_data      :  1, /* non-exec mmap data    */
+                               sample_id_all  :  1, /* sample_type all events */
+
+                               exclude_host   :  1, /* don't count in host   */
+                               exclude_guest  :  1, /* don't count in guest  */
+
+                               exclude_callchain_kernel : 1, /* exclude kernel callchains */
+                               exclude_callchain_user   : 1, /* exclude user callchains */
+                               mmap2          :  1, /* include mmap with inode data     */
+                               comm_exec      :  1, /* flag comm events that are due to an exec */
+                               use_clockid    :  1, /* use @clockid for time fields */
+                               context_switch :  1, /* context switch data */
+                               __reserved_1   : 37;
+
+       union {
+               __u32           wakeup_events;    /* wakeup every n events */
+               __u32           wakeup_watermark; /* bytes before wakeup   */
+       };
+
+       __u32                   bp_type;
+       union {
+               __u64           bp_addr;
+               __u64           config1; /* extension of config */
+       };
+       union {
+               __u64           bp_len;
+               __u64           config2; /* extension of config1 */
+       };
+       __u64   branch_sample_type; /* enum perf_branch_sample_type */
+
+       /*
+        * Defines set of user regs to dump on samples.
+        * See asm/perf_regs.h for details.
+        */
+       __u64   sample_regs_user;
+
+       /*
+        * Defines size of the user stack to dump on samples.
+        */
+       __u32   sample_stack_user;
+
+       __s32   clockid;
+       /*
+        * Defines set of regs to dump for each sample
+        * state captured on:
+        *  - precise = 0: PMU interrupt
+        *  - precise > 0: sampled instruction
+        *
+        * See asm/perf_regs.h for details.
+        */
+       __u64   sample_regs_intr;
+
+       /*
+        * Wakeup watermark for AUX area
+        */
+       __u32   aux_watermark;
+       __u32   __reserved_2;   /* align to __u64 */
+};
+
+#define perf_flags(attr)       (*(&(attr)->read_format + 1))
+
+/*
+ * Ioctls that can be done on a perf event fd:
+ */
+#define PERF_EVENT_IOC_ENABLE          _IO ('$', 0)
+#define PERF_EVENT_IOC_DISABLE         _IO ('$', 1)
+#define PERF_EVENT_IOC_REFRESH         _IO ('$', 2)
+#define PERF_EVENT_IOC_RESET           _IO ('$', 3)
+#define PERF_EVENT_IOC_PERIOD          _IOW('$', 4, __u64)
+#define PERF_EVENT_IOC_SET_OUTPUT      _IO ('$', 5)
+#define PERF_EVENT_IOC_SET_FILTER      _IOW('$', 6, char *)
+#define PERF_EVENT_IOC_ID              _IOR('$', 7, __u64 *)
+#define PERF_EVENT_IOC_SET_BPF         _IOW('$', 8, __u32)
+
+enum perf_event_ioc_flags {
+       PERF_IOC_FLAG_GROUP             = 1U << 0,
+};
+
+/*
+ * Structure of the page that can be mapped via mmap
+ */
+struct perf_event_mmap_page {
+       __u32   version;                /* version number of this structure */
+       __u32   compat_version;         /* lowest version this is compat with */
+
+       /*
+        * Bits needed to read the hw events in user-space.
+        *
+        *   u32 seq, time_mult, time_shift, index, width;
+        *   u64 count, enabled, running;
+        *   u64 cyc, time_offset;
+        *   s64 pmc = 0;
+        *
+        *   do {
+        *     seq = pc->lock;
+        *     barrier()
+        *
+        *     enabled = pc->time_enabled;
+        *     running = pc->time_running;
+        *
+        *     if (pc->cap_usr_time && enabled != running) {
+        *       cyc = rdtsc();
+        *       time_offset = pc->time_offset;
+        *       time_mult   = pc->time_mult;
+        *       time_shift  = pc->time_shift;
+        *     }
+        *
+        *     index = pc->index;
+        *     count = pc->offset;
+        *     if (pc->cap_user_rdpmc && index) {
+        *       width = pc->pmc_width;
+        *       pmc = rdpmc(index - 1);
+        *     }
+        *
+        *     barrier();
+        *   } while (pc->lock != seq);
+        *
+        * NOTE: for obvious reason this only works on self-monitoring
+        *       processes.
+        */
+       __u32   lock;                   /* seqlock for synchronization */
+       __u32   index;                  /* hardware event identifier */
+       __s64   offset;                 /* add to hardware event value */
+       __u64   time_enabled;           /* time event active */
+       __u64   time_running;           /* time event on cpu */
+       union {
+               __u64   capabilities;
+               struct {
+                       __u64   cap_bit0                : 1, /* Always 0, deprecated, see commit 860f085b74e9 */
+                               cap_bit0_is_deprecated  : 1, /* Always 1, signals that bit 0 is zero */
+
+                               cap_user_rdpmc          : 1, /* The RDPMC instruction can be used to read counts */
+                               cap_user_time           : 1, /* The time_* fields are used */
+                               cap_user_time_zero      : 1, /* The time_zero field is used */
+                               cap_____res             : 59;
+               };
+       };
+
+       /*
+        * If cap_user_rdpmc this field provides the bit-width of the value
+        * read using the rdpmc() or equivalent instruction. This can be used
+        * to sign extend the result like:
+        *
+        *   pmc <<= 64 - width;
+        *   pmc >>= 64 - width; // signed shift right
+        *   count += pmc;
+        */
+       __u16   pmc_width;
+
+       /*
+        * If cap_usr_time the below fields can be used to compute the time
+        * delta since time_enabled (in ns) using rdtsc or similar.
+        *
+        *   u64 quot, rem;
+        *   u64 delta;
+        *
+        *   quot = (cyc >> time_shift);
+        *   rem = cyc & (((u64)1 << time_shift) - 1);
+        *   delta = time_offset + quot * time_mult +
+        *              ((rem * time_mult) >> time_shift);
+        *
+        * Where time_offset,time_mult,time_shift and cyc are read in the
+        * seqcount loop described above. This delta can then be added to
+        * enabled and possible running (if index), improving the scaling:
+        *
+        *   enabled += delta;
+        *   if (index)
+        *     running += delta;
+        *
+        *   quot = count / running;
+        *   rem  = count % running;
+        *   count = quot * enabled + (rem * enabled) / running;
+        */
+       __u16   time_shift;
+       __u32   time_mult;
+       __u64   time_offset;
+       /*
+        * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated
+        * from sample timestamps.
+        *
+        *   time = timestamp - time_zero;
+        *   quot = time / time_mult;
+        *   rem  = time % time_mult;
+        *   cyc = (quot << time_shift) + (rem << time_shift) / time_mult;
+        *
+        * And vice versa:
+        *
+        *   quot = cyc >> time_shift;
+        *   rem  = cyc & (((u64)1 << time_shift) - 1);
+        *   timestamp = time_zero + quot * time_mult +
+        *               ((rem * time_mult) >> time_shift);
+        */
+       __u64   time_zero;
+       __u32   size;                   /* Header size up to __reserved[] fields. */
+
+               /*
+                * Hole for extension of the self monitor capabilities
+                */
+
+       __u8    __reserved[118*8+4];    /* align to 1k. */
+
+       /*
+        * Control data for the mmap() data buffer.
+        *
+        * User-space reading the @data_head value should issue an smp_rmb(),
+        * after reading this value.
+        *
+        * When the mapping is PROT_WRITE the @data_tail value should be
+        * written by userspace to reflect the last read data, after issueing
+        * an smp_mb() to separate the data read from the ->data_tail store.
+        * In this case the kernel will not over-write unread data.
+        *
+        * See perf_output_put_handle() for the data ordering.
+        *
+        * data_{offset,size} indicate the location and size of the perf record
+        * buffer within the mmapped area.
+        */
+       __u64   data_head;              /* head in the data section */
+       __u64   data_tail;              /* user-space written tail */
+       __u64   data_offset;            /* where the buffer starts */
+       __u64   data_size;              /* data buffer size */
+
+       /*
+        * AUX area is defined by aux_{offset,size} fields that should be set
+        * by the userspace, so that
+        *
+        *   aux_offset >= data_offset + data_size
+        *
+        * prior to mmap()ing it. Size of the mmap()ed area should be aux_size.
+        *
+        * Ring buffer pointers aux_{head,tail} have the same semantics as
+        * data_{head,tail} and same ordering rules apply.
+        */
+       __u64   aux_head;
+       __u64   aux_tail;
+       __u64   aux_offset;
+       __u64   aux_size;
+};
+
+#define PERF_RECORD_MISC_CPUMODE_MASK          (7 << 0)
+#define PERF_RECORD_MISC_CPUMODE_UNKNOWN       (0 << 0)
+#define PERF_RECORD_MISC_KERNEL                        (1 << 0)
+#define PERF_RECORD_MISC_USER                  (2 << 0)
+#define PERF_RECORD_MISC_HYPERVISOR            (3 << 0)
+#define PERF_RECORD_MISC_GUEST_KERNEL          (4 << 0)
+#define PERF_RECORD_MISC_GUEST_USER            (5 << 0)
+
+/*
+ * Indicates that /proc/PID/maps parsing are truncated by time out.
+ */
+#define PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT        (1 << 12)
+/*
+ * PERF_RECORD_MISC_MMAP_DATA and PERF_RECORD_MISC_COMM_EXEC are used on
+ * different events so can reuse the same bit position.
+ * Ditto PERF_RECORD_MISC_SWITCH_OUT.
+ */
+#define PERF_RECORD_MISC_MMAP_DATA             (1 << 13)
+#define PERF_RECORD_MISC_COMM_EXEC             (1 << 13)
+#define PERF_RECORD_MISC_SWITCH_OUT            (1 << 13)
+/*
+ * Indicates that the content of PERF_SAMPLE_IP points to
+ * the actual instruction that triggered the event. See also
+ * perf_event_attr::precise_ip.
+ */
+#define PERF_RECORD_MISC_EXACT_IP              (1 << 14)
+/*
+ * Reserve the last bit to indicate some extended misc field
+ */
+#define PERF_RECORD_MISC_EXT_RESERVED          (1 << 15)
+
+struct perf_event_header {
+       __u32   type;
+       __u16   misc;
+       __u16   size;
+};
+
+enum perf_event_type {
+
+       /*
+        * If perf_event_attr.sample_id_all is set then all event types will
+        * have the sample_type selected fields related to where/when
+        * (identity) an event took place (TID, TIME, ID, STREAM_ID, CPU,
+        * IDENTIFIER) described in PERF_RECORD_SAMPLE below, it will be stashed
+        * just after the perf_event_header and the fields already present for
+        * the existing fields, i.e. at the end of the payload. That way a newer
+        * perf.data file will be supported by older perf tools, with these new
+        * optional fields being ignored.
+        *
+        * struct sample_id {
+        *      { u32                   pid, tid; } && PERF_SAMPLE_TID
+        *      { u64                   time;     } && PERF_SAMPLE_TIME
+        *      { u64                   id;       } && PERF_SAMPLE_ID
+        *      { u64                   stream_id;} && PERF_SAMPLE_STREAM_ID
+        *      { u32                   cpu, res; } && PERF_SAMPLE_CPU
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
+        * } && perf_event_attr::sample_id_all
+        *
+        * Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.  The
+        * advantage of PERF_SAMPLE_IDENTIFIER is that its position is fixed
+        * relative to header.size.
+        */
+
+       /*
+        * The MMAP events record the PROT_EXEC mappings so that we can
+        * correlate userspace IPs to code. They have the following structure:
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      u64                             addr;
+        *      u64                             len;
+        *      u64                             pgoff;
+        *      char                            filename[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_MMAP                        = 1,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u64                             id;
+        *      u64                             lost;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_LOST                        = 2,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      char                            comm[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_COMM                        = 3,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, ppid;
+        *      u32                             tid, ptid;
+        *      u64                             time;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_EXIT                        = 4,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u64                             time;
+        *      u64                             id;
+        *      u64                             stream_id;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_THROTTLE                    = 5,
+       PERF_RECORD_UNTHROTTLE                  = 6,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, ppid;
+        *      u32                             tid, ptid;
+        *      u64                             time;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_FORK                        = 7,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, tid;
+        *
+        *      struct read_format              values;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_READ                        = 8,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      #
+        *      # Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.
+        *      # The advantage of PERF_SAMPLE_IDENTIFIER is that its position
+        *      # is fixed relative to header.
+        *      #
+        *
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
+        *      { u64                   ip;       } && PERF_SAMPLE_IP
+        *      { u32                   pid, tid; } && PERF_SAMPLE_TID
+        *      { u64                   time;     } && PERF_SAMPLE_TIME
+        *      { u64                   addr;     } && PERF_SAMPLE_ADDR
+        *      { u64                   id;       } && PERF_SAMPLE_ID
+        *      { u64                   stream_id;} && PERF_SAMPLE_STREAM_ID
+        *      { u32                   cpu, res; } && PERF_SAMPLE_CPU
+        *      { u64                   period;   } && PERF_SAMPLE_PERIOD
+        *
+        *      { struct read_format    values;   } && PERF_SAMPLE_READ
+        *
+        *      { u64                   nr,
+        *        u64                   ips[nr];  } && PERF_SAMPLE_CALLCHAIN
+        *
+        *      #
+        *      # The RAW record below is opaque data wrt the ABI
+        *      #
+        *      # That is, the ABI doesn't make any promises wrt to
+        *      # the stability of its content, it may vary depending
+        *      # on event, hardware, kernel version and phase of
+        *      # the moon.
+        *      #
+        *      # In other words, PERF_SAMPLE_RAW contents are not an ABI.
+        *      #
+        *
+        *      { u32                   size;
+        *        char                  data[size];}&& PERF_SAMPLE_RAW
+        *
+        *      { u64                   nr;
+        *        { u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK
+        *
+        *      { u64                   abi; # enum perf_sample_regs_abi
+        *        u64                   regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER
+        *
+        *      { u64                   size;
+        *        char                  data[size];
+        *        u64                   dyn_size; } && PERF_SAMPLE_STACK_USER
+        *
+        *      { u64                   weight;   } && PERF_SAMPLE_WEIGHT
+        *      { u64                   data_src; } && PERF_SAMPLE_DATA_SRC
+        *      { u64                   transaction; } && PERF_SAMPLE_TRANSACTION
+        *      { u64                   abi; # enum perf_sample_regs_abi
+        *        u64                   regs[weight(mask)]; } && PERF_SAMPLE_REGS_INTR
+        * };
+        */
+       PERF_RECORD_SAMPLE                      = 9,
+
+       /*
+        * The MMAP2 records are an augmented version of MMAP, they add
+        * maj, min, ino numbers to be used to uniquely identify each mapping
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      u64                             addr;
+        *      u64                             len;
+        *      u64                             pgoff;
+        *      u32                             maj;
+        *      u32                             min;
+        *      u64                             ino;
+        *      u64                             ino_generation;
+        *      u32                             prot, flags;
+        *      char                            filename[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_MMAP2                       = 10,
+
+       /*
+        * Records that new data landed in the AUX buffer part.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u64                             aux_offset;
+        *      u64                             aux_size;
+        *      u64                             flags;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_AUX                         = 11,
+
+       /*
+        * Indicates that instruction trace has started
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid;
+        *      u32                             tid;
+        * };
+        */
+       PERF_RECORD_ITRACE_START                = 12,
+
+       /*
+        * Records the dropped/lost sample number.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u64                             lost;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_LOST_SAMPLES                = 13,
+
+       /*
+        * Records a context switch in or out (flagged by
+        * PERF_RECORD_MISC_SWITCH_OUT). See also
+        * PERF_RECORD_SWITCH_CPU_WIDE.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_SWITCH                      = 14,
+
+       /*
+        * CPU-wide version of PERF_RECORD_SWITCH with next_prev_pid and
+        * next_prev_tid that are the next (switching out) or previous
+        * (switching in) pid/tid.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             next_prev_pid;
+        *      u32                             next_prev_tid;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_SWITCH_CPU_WIDE             = 15,
+
+       PERF_RECORD_MAX,                        /* non-ABI */
+};
+
+#define PERF_MAX_STACK_DEPTH           127
+
+enum perf_callchain_context {
+       PERF_CONTEXT_HV                 = (__u64)-32,
+       PERF_CONTEXT_KERNEL             = (__u64)-128,
+       PERF_CONTEXT_USER               = (__u64)-512,
+
+       PERF_CONTEXT_GUEST              = (__u64)-2048,
+       PERF_CONTEXT_GUEST_KERNEL       = (__u64)-2176,
+       PERF_CONTEXT_GUEST_USER         = (__u64)-2560,
+
+       PERF_CONTEXT_MAX                = (__u64)-4095,
+};
+
+/**
+ * PERF_RECORD_AUX::flags bits
+ */
+#define PERF_AUX_FLAG_TRUNCATED                0x01    /* record was truncated to fit */
+#define PERF_AUX_FLAG_OVERWRITE                0x02    /* snapshot from overwrite mode */
+
+#define PERF_FLAG_FD_NO_GROUP          (1UL << 0)
+#define PERF_FLAG_FD_OUTPUT            (1UL << 1)
+#define PERF_FLAG_PID_CGROUP           (1UL << 2) /* pid=cgroup id, per-cpu mode only */
+#define PERF_FLAG_FD_CLOEXEC           (1UL << 3) /* O_CLOEXEC */
+
+union perf_mem_data_src {
+       __u64 val;
+       struct {
+               __u64   mem_op:5,       /* type of opcode */
+                       mem_lvl:14,     /* memory hierarchy level */
+                       mem_snoop:5,    /* snoop mode */
+                       mem_lock:2,     /* lock instr */
+                       mem_dtlb:7,     /* tlb access */
+                       mem_rsvd:31;
+       };
+};
+
+/* type of opcode (load/store/prefetch,code) */
+#define PERF_MEM_OP_NA         0x01 /* not available */
+#define PERF_MEM_OP_LOAD       0x02 /* load instruction */
+#define PERF_MEM_OP_STORE      0x04 /* store instruction */
+#define PERF_MEM_OP_PFETCH     0x08 /* prefetch */
+#define PERF_MEM_OP_EXEC       0x10 /* code (execution) */
+#define PERF_MEM_OP_SHIFT      0
+
+/* memory hierarchy (memory level, hit or miss) */
+#define PERF_MEM_LVL_NA                0x01  /* not available */
+#define PERF_MEM_LVL_HIT       0x02  /* hit level */
+#define PERF_MEM_LVL_MISS      0x04  /* miss level  */
+#define PERF_MEM_LVL_L1                0x08  /* L1 */
+#define PERF_MEM_LVL_LFB       0x10  /* Line Fill Buffer */
+#define PERF_MEM_LVL_L2                0x20  /* L2 */
+#define PERF_MEM_LVL_L3                0x40  /* L3 */
+#define PERF_MEM_LVL_LOC_RAM   0x80  /* Local DRAM */
+#define PERF_MEM_LVL_REM_RAM1  0x100 /* Remote DRAM (1 hop) */
+#define PERF_MEM_LVL_REM_RAM2  0x200 /* Remote DRAM (2 hops) */
+#define PERF_MEM_LVL_REM_CCE1  0x400 /* Remote Cache (1 hop) */
+#define PERF_MEM_LVL_REM_CCE2  0x800 /* Remote Cache (2 hops) */
+#define PERF_MEM_LVL_IO                0x1000 /* I/O memory */
+#define PERF_MEM_LVL_UNC       0x2000 /* Uncached memory */
+#define PERF_MEM_LVL_SHIFT     5
+
+/* snoop mode */
+#define PERF_MEM_SNOOP_NA      0x01 /* not available */
+#define PERF_MEM_SNOOP_NONE    0x02 /* no snoop */
+#define PERF_MEM_SNOOP_HIT     0x04 /* snoop hit */
+#define PERF_MEM_SNOOP_MISS    0x08 /* snoop miss */
+#define PERF_MEM_SNOOP_HITM    0x10 /* snoop hit modified */
+#define PERF_MEM_SNOOP_SHIFT   19
+
+/* locked instruction */
+#define PERF_MEM_LOCK_NA       0x01 /* not available */
+#define PERF_MEM_LOCK_LOCKED   0x02 /* locked transaction */
+#define PERF_MEM_LOCK_SHIFT    24
+
+/* TLB access */
+#define PERF_MEM_TLB_NA                0x01 /* not available */
+#define PERF_MEM_TLB_HIT       0x02 /* hit level */
+#define PERF_MEM_TLB_MISS      0x04 /* miss level */
+#define PERF_MEM_TLB_L1                0x08 /* L1 */
+#define PERF_MEM_TLB_L2                0x10 /* L2 */
+#define PERF_MEM_TLB_WK                0x20 /* Hardware Walker*/
+#define PERF_MEM_TLB_OS                0x40 /* OS fault handler */
+#define PERF_MEM_TLB_SHIFT     26
+
+#define PERF_MEM_S(a, s) \
+       (((__u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT)
+
+/*
+ * single taken branch record layout:
+ *
+ *      from: source instruction (may not always be a branch insn)
+ *        to: branch target
+ *   mispred: branch target was mispredicted
+ * predicted: branch target was predicted
+ *
+ * support for mispred, predicted is optional. In case it
+ * is not supported mispred = predicted = 0.
+ *
+ *     in_tx: running in a hardware transaction
+ *     abort: aborting a hardware transaction
+ *    cycles: cycles from last branch (or 0 if not supported)
+ */
+struct perf_branch_entry {
+       __u64   from;
+       __u64   to;
+       __u64   mispred:1,  /* target mispredicted */
+               predicted:1,/* target predicted */
+               in_tx:1,    /* in transaction */
+               abort:1,    /* transaction abort */
+               cycles:16,  /* cycle count to last branch */
+               reserved:44;
+};
+
+#endif /* _LINUX_PERF_EVENT_H */
diff --git a/lib/libdss-include/include/linux/personality.h b/lib/libdss-include/include/linux/personality.h
new file mode 100644 (file)
index 0000000..9971703
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _LINUX_PERSONALITY_H
+#define _LINUX_PERSONALITY_H
+
+
+/*
+ * Flags for bug emulation.
+ *
+ * These occupy the top three bytes.
+ */
+enum {
+       UNAME26 =               0x0020000,
+       ADDR_NO_RANDOMIZE =     0x0040000,      /* disable randomization of VA space */
+       FDPIC_FUNCPTRS =        0x0080000,      /* userspace function ptrs point to descriptors
+                                                * (signal handling)
+                                                */
+       MMAP_PAGE_ZERO =        0x0100000,
+       ADDR_COMPAT_LAYOUT =    0x0200000,
+       READ_IMPLIES_EXEC =     0x0400000,
+       ADDR_LIMIT_32BIT =      0x0800000,
+       SHORT_INODE =           0x1000000,
+       WHOLE_SECONDS =         0x2000000,
+       STICKY_TIMEOUTS =       0x4000000,
+       ADDR_LIMIT_3GB =        0x8000000,
+};
+
+/*
+ * Security-relevant compatibility flags that must be
+ * cleared upon setuid or setgid exec:
+ */
+#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC  | \
+                           ADDR_NO_RANDOMIZE  | \
+                           ADDR_COMPAT_LAYOUT | \
+                           MMAP_PAGE_ZERO)
+
+/*
+ * Personality types.
+ *
+ * These go in the low byte.  Avoid using the top bit, it will
+ * conflict with error returns.
+ */
+enum {
+       PER_LINUX =             0x0000,
+       PER_LINUX_32BIT =       0x0000 | ADDR_LIMIT_32BIT,
+       PER_LINUX_FDPIC =       0x0000 | FDPIC_FUNCPTRS,
+       PER_SVR4 =              0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_SVR3 =              0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_SCOSVR3 =           0x0003 | STICKY_TIMEOUTS |
+                                        WHOLE_SECONDS | SHORT_INODE,
+       PER_OSR5 =              0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+       PER_WYSEV386 =          0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_ISCR4 =             0x0005 | STICKY_TIMEOUTS,
+       PER_BSD =               0x0006,
+       PER_SUNOS =             0x0006 | STICKY_TIMEOUTS,
+       PER_XENIX =             0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_LINUX32 =           0x0008,
+       PER_LINUX32_3GB =       0x0008 | ADDR_LIMIT_3GB,
+       PER_IRIX32 =            0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */
+       PER_IRIXN32 =           0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */
+       PER_IRIX64 =            0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */
+       PER_RISCOS =            0x000c,
+       PER_SOLARIS =           0x000d | STICKY_TIMEOUTS,
+       PER_UW7 =               0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_OSF4 =              0x000f,                  /* OSF/1 v4 */
+       PER_HPUX =              0x0010,
+       PER_MASK =              0x00ff,
+};
+
+
+#endif /* _LINUX_PERSONALITY_H */
diff --git a/lib/libdss-include/include/linux/pfkeyv2.h b/lib/libdss-include/include/linux/pfkeyv2.h
new file mode 100644 (file)
index 0000000..ada7f01
--- /dev/null
@@ -0,0 +1,383 @@
+/* PF_KEY user interface, this is defined by rfc2367 so
+ * do not make arbitrary modifications or else this header
+ * file will not be compliant.
+ */
+
+#ifndef _LINUX_PFKEY2_H
+#define _LINUX_PFKEY2_H
+
+#include <linux/types.h>
+
+#define PF_KEY_V2              2
+#define PFKEYV2_REVISION       199806L
+
+struct sadb_msg {
+       __u8            sadb_msg_version;
+       __u8            sadb_msg_type;
+       __u8            sadb_msg_errno;
+       __u8            sadb_msg_satype;
+       __u16   sadb_msg_len;
+       __u16   sadb_msg_reserved;
+       __u32   sadb_msg_seq;
+       __u32   sadb_msg_pid;
+} __attribute__((packed));
+/* sizeof(struct sadb_msg) == 16 */
+
+struct sadb_ext {
+       __u16   sadb_ext_len;
+       __u16   sadb_ext_type;
+} __attribute__((packed));
+/* sizeof(struct sadb_ext) == 4 */
+
+struct sadb_sa {
+       __u16   sadb_sa_len;
+       __u16   sadb_sa_exttype;
+       __be32          sadb_sa_spi;
+       __u8            sadb_sa_replay;
+       __u8            sadb_sa_state;
+       __u8            sadb_sa_auth;
+       __u8            sadb_sa_encrypt;
+       __u32   sadb_sa_flags;
+} __attribute__((packed));
+/* sizeof(struct sadb_sa) == 16 */
+
+struct sadb_lifetime {
+       __u16   sadb_lifetime_len;
+       __u16   sadb_lifetime_exttype;
+       __u32   sadb_lifetime_allocations;
+       __u64   sadb_lifetime_bytes;
+       __u64   sadb_lifetime_addtime;
+       __u64   sadb_lifetime_usetime;
+} __attribute__((packed));
+/* sizeof(struct sadb_lifetime) == 32 */
+
+struct sadb_address {
+       __u16   sadb_address_len;
+       __u16   sadb_address_exttype;
+       __u8            sadb_address_proto;
+       __u8            sadb_address_prefixlen;
+       __u16   sadb_address_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_address) == 8 */
+
+struct sadb_key {
+       __u16   sadb_key_len;
+       __u16   sadb_key_exttype;
+       __u16   sadb_key_bits;
+       __u16   sadb_key_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_key) == 8 */
+
+struct sadb_ident {
+       __u16   sadb_ident_len;
+       __u16   sadb_ident_exttype;
+       __u16   sadb_ident_type;
+       __u16   sadb_ident_reserved;
+       __u64   sadb_ident_id;
+} __attribute__((packed));
+/* sizeof(struct sadb_ident) == 16 */
+
+struct sadb_sens {
+       __u16   sadb_sens_len;
+       __u16   sadb_sens_exttype;
+       __u32   sadb_sens_dpd;
+       __u8            sadb_sens_sens_level;
+       __u8            sadb_sens_sens_len;
+       __u8            sadb_sens_integ_level;
+       __u8            sadb_sens_integ_len;
+       __u32   sadb_sens_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_sens) == 16 */
+
+/* followed by:
+       __u64   sadb_sens_bitmap[sens_len];
+       __u64   sadb_integ_bitmap[integ_len];  */
+
+struct sadb_prop {
+       __u16   sadb_prop_len;
+       __u16   sadb_prop_exttype;
+       __u8            sadb_prop_replay;
+       __u8            sadb_prop_reserved[3];
+} __attribute__((packed));
+/* sizeof(struct sadb_prop) == 8 */
+
+/* followed by:
+       struct sadb_comb sadb_combs[(sadb_prop_len +
+               sizeof(__u64) - sizeof(struct sadb_prop)) /
+               sizeof(struct sadb_comb)]; */
+
+struct sadb_comb {
+       __u8            sadb_comb_auth;
+       __u8            sadb_comb_encrypt;
+       __u16   sadb_comb_flags;
+       __u16   sadb_comb_auth_minbits;
+       __u16   sadb_comb_auth_maxbits;
+       __u16   sadb_comb_encrypt_minbits;
+       __u16   sadb_comb_encrypt_maxbits;
+       __u32   sadb_comb_reserved;
+       __u32   sadb_comb_soft_allocations;
+       __u32   sadb_comb_hard_allocations;
+       __u64   sadb_comb_soft_bytes;
+       __u64   sadb_comb_hard_bytes;
+       __u64   sadb_comb_soft_addtime;
+       __u64   sadb_comb_hard_addtime;
+       __u64   sadb_comb_soft_usetime;
+       __u64   sadb_comb_hard_usetime;
+} __attribute__((packed));
+/* sizeof(struct sadb_comb) == 72 */
+
+struct sadb_supported {
+       __u16   sadb_supported_len;
+       __u16   sadb_supported_exttype;
+       __u32   sadb_supported_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_supported) == 8 */
+
+/* followed by:
+       struct sadb_alg sadb_algs[(sadb_supported_len +
+               sizeof(__u64) - sizeof(struct sadb_supported)) /
+               sizeof(struct sadb_alg)]; */
+
+struct sadb_alg {
+       __u8            sadb_alg_id;
+       __u8            sadb_alg_ivlen;
+       __u16   sadb_alg_minbits;
+       __u16   sadb_alg_maxbits;
+       __u16   sadb_alg_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_alg) == 8 */
+
+struct sadb_spirange {
+       __u16   sadb_spirange_len;
+       __u16   sadb_spirange_exttype;
+       __u32   sadb_spirange_min;
+       __u32   sadb_spirange_max;
+       __u32   sadb_spirange_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_spirange) == 16 */
+
+struct sadb_x_kmprivate {
+       __u16   sadb_x_kmprivate_len;
+       __u16   sadb_x_kmprivate_exttype;
+       __u32   sadb_x_kmprivate_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_kmprivate) == 8 */
+
+struct sadb_x_sa2 {
+       __u16   sadb_x_sa2_len;
+       __u16   sadb_x_sa2_exttype;
+       __u8            sadb_x_sa2_mode;
+       __u8            sadb_x_sa2_reserved1;
+       __u16   sadb_x_sa2_reserved2;
+       __u32   sadb_x_sa2_sequence;
+       __u32   sadb_x_sa2_reqid;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_sa2) == 16 */
+
+struct sadb_x_policy {
+       __u16   sadb_x_policy_len;
+       __u16   sadb_x_policy_exttype;
+       __u16   sadb_x_policy_type;
+       __u8            sadb_x_policy_dir;
+       __u8            sadb_x_policy_reserved;
+       __u32   sadb_x_policy_id;
+       __u32   sadb_x_policy_priority;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_policy) == 16 */
+
+struct sadb_x_ipsecrequest {
+       __u16   sadb_x_ipsecrequest_len;
+       __u16   sadb_x_ipsecrequest_proto;
+       __u8            sadb_x_ipsecrequest_mode;
+       __u8            sadb_x_ipsecrequest_level;
+       __u16   sadb_x_ipsecrequest_reserved1;
+       __u32   sadb_x_ipsecrequest_reqid;
+       __u32   sadb_x_ipsecrequest_reserved2;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_ipsecrequest) == 16 */
+
+/* This defines the TYPE of Nat Traversal in use.  Currently only one
+ * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06
+ */
+struct sadb_x_nat_t_type {
+       __u16   sadb_x_nat_t_type_len;
+       __u16   sadb_x_nat_t_type_exttype;
+       __u8            sadb_x_nat_t_type_type;
+       __u8            sadb_x_nat_t_type_reserved[3];
+} __attribute__((packed));
+/* sizeof(struct sadb_x_nat_t_type) == 8 */
+
+/* Pass a NAT Traversal port (Source or Dest port) */
+struct sadb_x_nat_t_port {
+       __u16   sadb_x_nat_t_port_len;
+       __u16   sadb_x_nat_t_port_exttype;
+       __be16          sadb_x_nat_t_port_port;
+       __u16   sadb_x_nat_t_port_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_nat_t_port) == 8 */
+
+/* Generic LSM security context */
+struct sadb_x_sec_ctx {
+       __u16   sadb_x_sec_len;
+       __u16   sadb_x_sec_exttype;
+       __u8            sadb_x_ctx_alg;  /* LSMs: e.g., selinux == 1 */
+       __u8            sadb_x_ctx_doi;
+       __u16   sadb_x_ctx_len;
+} __attribute__((packed));
+/* sizeof(struct sadb_sec_ctx) = 8 */
+
+/* Used by MIGRATE to pass addresses IKE will use to perform
+ * negotiation with the peer */
+struct sadb_x_kmaddress {
+       __u16   sadb_x_kmaddress_len;
+       __u16   sadb_x_kmaddress_exttype;
+       __u32   sadb_x_kmaddress_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_kmaddress) == 8 */
+
+/* To specify the SA dump filter */
+struct sadb_x_filter {
+       __u16   sadb_x_filter_len;
+       __u16   sadb_x_filter_exttype;
+       __u32   sadb_x_filter_saddr[4];
+       __u32   sadb_x_filter_daddr[4];
+       __u16   sadb_x_filter_family;
+       __u8    sadb_x_filter_splen;
+       __u8    sadb_x_filter_dplen;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_filter) == 40 */
+
+/* Message types */
+#define SADB_RESERVED          0
+#define SADB_GETSPI            1
+#define SADB_UPDATE            2
+#define SADB_ADD               3
+#define SADB_DELETE            4
+#define SADB_GET               5
+#define SADB_ACQUIRE           6
+#define SADB_REGISTER          7
+#define SADB_EXPIRE            8
+#define SADB_FLUSH             9
+#define SADB_DUMP              10
+#define SADB_X_PROMISC         11
+#define SADB_X_PCHANGE         12
+#define SADB_X_SPDUPDATE       13
+#define SADB_X_SPDADD          14
+#define SADB_X_SPDDELETE       15
+#define SADB_X_SPDGET          16
+#define SADB_X_SPDACQUIRE      17
+#define SADB_X_SPDDUMP         18
+#define SADB_X_SPDFLUSH                19
+#define SADB_X_SPDSETIDX       20
+#define SADB_X_SPDEXPIRE       21
+#define SADB_X_SPDDELETE2      22
+#define SADB_X_NAT_T_NEW_MAPPING       23
+#define SADB_X_MIGRATE         24
+#define SADB_MAX               24
+
+/* Security Association flags */
+#define SADB_SAFLAGS_PFS       1
+#define SADB_SAFLAGS_NOPMTUDISC        0x20000000
+#define SADB_SAFLAGS_DECAP_DSCP        0x40000000
+#define SADB_SAFLAGS_NOECN     0x80000000
+
+/* Security Association states */
+#define SADB_SASTATE_LARVAL    0
+#define SADB_SASTATE_MATURE    1
+#define SADB_SASTATE_DYING     2
+#define SADB_SASTATE_DEAD      3
+#define SADB_SASTATE_MAX       3
+
+/* Security Association types */
+#define SADB_SATYPE_UNSPEC     0
+#define SADB_SATYPE_AH         2
+#define SADB_SATYPE_ESP                3
+#define SADB_SATYPE_RSVP       5
+#define SADB_SATYPE_OSPFV2     6
+#define SADB_SATYPE_RIPV2      7
+#define SADB_SATYPE_MIP                8
+#define SADB_X_SATYPE_IPCOMP   9
+#define SADB_SATYPE_MAX                9
+
+/* Authentication algorithms */
+#define SADB_AALG_NONE                 0
+#define SADB_AALG_MD5HMAC              2
+#define SADB_AALG_SHA1HMAC             3
+#define SADB_X_AALG_SHA2_256HMAC       5
+#define SADB_X_AALG_SHA2_384HMAC       6
+#define SADB_X_AALG_SHA2_512HMAC       7
+#define SADB_X_AALG_RIPEMD160HMAC      8
+#define SADB_X_AALG_AES_XCBC_MAC       9
+#define SADB_X_AALG_NULL               251     /* kame */
+#define SADB_AALG_MAX                  251
+
+/* Encryption algorithms */
+#define SADB_EALG_NONE                 0
+#define SADB_EALG_DESCBC               2
+#define SADB_EALG_3DESCBC              3
+#define SADB_X_EALG_CASTCBC            6
+#define SADB_X_EALG_BLOWFISHCBC                7
+#define SADB_EALG_NULL                 11
+#define SADB_X_EALG_AESCBC             12
+#define SADB_X_EALG_AESCTR             13
+#define SADB_X_EALG_AES_CCM_ICV8       14
+#define SADB_X_EALG_AES_CCM_ICV12      15
+#define SADB_X_EALG_AES_CCM_ICV16      16
+#define SADB_X_EALG_AES_GCM_ICV8       18
+#define SADB_X_EALG_AES_GCM_ICV12      19
+#define SADB_X_EALG_AES_GCM_ICV16      20
+#define SADB_X_EALG_CAMELLIACBC                22
+#define SADB_X_EALG_NULL_AES_GMAC      23
+#define SADB_EALG_MAX                   253 /* last EALG */
+/* private allocations should use 249-255 (RFC2407) */
+#define SADB_X_EALG_SERPENTCBC  252     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
+#define SADB_X_EALG_TWOFISHCBC  253     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
+
+/* Compression algorithms */
+#define SADB_X_CALG_NONE               0
+#define SADB_X_CALG_OUI                        1
+#define SADB_X_CALG_DEFLATE            2
+#define SADB_X_CALG_LZS                        3
+#define SADB_X_CALG_LZJH               4
+#define SADB_X_CALG_MAX                        4
+
+/* Extension Header values */
+#define SADB_EXT_RESERVED              0
+#define SADB_EXT_SA                    1
+#define SADB_EXT_LIFETIME_CURRENT      2
+#define SADB_EXT_LIFETIME_HARD         3
+#define SADB_EXT_LIFETIME_SOFT         4
+#define SADB_EXT_ADDRESS_SRC           5
+#define SADB_EXT_ADDRESS_DST           6
+#define SADB_EXT_ADDRESS_PROXY         7
+#define SADB_EXT_KEY_AUTH              8
+#define SADB_EXT_KEY_ENCRYPT           9
+#define SADB_EXT_IDENTITY_SRC          10
+#define SADB_EXT_IDENTITY_DST          11
+#define SADB_EXT_SENSITIVITY           12
+#define SADB_EXT_PROPOSAL              13
+#define SADB_EXT_SUPPORTED_AUTH                14
+#define SADB_EXT_SUPPORTED_ENCRYPT     15
+#define SADB_EXT_SPIRANGE              16
+#define SADB_X_EXT_KMPRIVATE           17
+#define SADB_X_EXT_POLICY              18
+#define SADB_X_EXT_SA2                 19
+/* The next four entries are for setting up NAT Traversal */
+#define SADB_X_EXT_NAT_T_TYPE          20
+#define SADB_X_EXT_NAT_T_SPORT         21
+#define SADB_X_EXT_NAT_T_DPORT         22
+#define SADB_X_EXT_NAT_T_OA            23
+#define SADB_X_EXT_SEC_CTX             24
+/* Used with MIGRATE to pass @ to IKE for negotiation */
+#define SADB_X_EXT_KMADDRESS           25
+#define SADB_X_EXT_FILTER              26
+#define SADB_EXT_MAX                   26
+
+/* Identity Extension values */
+#define SADB_IDENTTYPE_RESERVED        0
+#define SADB_IDENTTYPE_PREFIX  1
+#define SADB_IDENTTYPE_FQDN    2
+#define SADB_IDENTTYPE_USERFQDN        3
+#define SADB_IDENTTYPE_MAX     3
+
+#endif /* !(_LINUX_PFKEY2_H) */
diff --git a/lib/libdss-include/include/linux/pg.h b/lib/libdss-include/include/linux/pg.h
new file mode 100644 (file)
index 0000000..db994bb
--- /dev/null
@@ -0,0 +1,63 @@
+/*     pg.h (c) 1998  Grant R. Guenther <grant@torque.net>
+                      Under the terms of the GNU General Public License
+
+
+       pg.h defines the user interface to the generic ATAPI packet
+        command driver for parallel port ATAPI devices (pg). The
+       driver is loosely modelled after the generic SCSI driver, sg,
+       although the actual interface is different.
+
+       The pg driver provides a simple character device interface for
+        sending ATAPI commands to a device.  With the exception of the
+       ATAPI reset operation, all operations are performed by a pair
+        of read and write operations to the appropriate /dev/pgN device.
+       A write operation delivers a command and any outbound data in
+        a single buffer.  Normally, the write will succeed unless the
+        device is offline or malfunctioning, or there is already another
+       command pending.  If the write succeeds, it should be followed
+        immediately by a read operation, to obtain any returned data and
+        status information.  A read will fail if there is no operation
+        in progress.
+
+       As a special case, the device can be reset with a write operation,
+        and in this case, no following read is expected, or permitted.
+
+       There are no ioctl() operations.  Any single operation
+       may transfer at most PG_MAX_DATA bytes.  Note that the driver must
+        copy the data through an internal buffer.  In keeping with all
+       current ATAPI devices, command packets are assumed to be exactly
+       12 bytes in length.
+
+       To permit future changes to this interface, the headers in the
+       read and write buffers contain a single character "magic" flag.
+        Currently this flag must be the character "P".
+
+*/
+
+#define PG_MAGIC       'P'
+#define PG_RESET       'Z'
+#define PG_COMMAND     'C'
+
+#define PG_MAX_DATA    32768
+
+struct pg_write_hdr {
+
+       char    magic;          /* == PG_MAGIC */
+       char    func;           /* PG_RESET or PG_COMMAND */
+       int     dlen;           /* number of bytes expected to transfer */
+       int     timeout;        /* number of seconds before timeout */
+       char    packet[12];     /* packet command */
+
+};
+
+struct pg_read_hdr {
+
+       char    magic;          /* == PG_MAGIC */
+       char    scsi;           /* "scsi" status == sense key */
+       int     dlen;           /* size of device transfer request */
+       int     duration;       /* time in seconds command took */
+       char    pad[12];        /* not used */
+
+};
+
+/* end of pg.h */
diff --git a/lib/libdss-include/include/linux/phantom.h b/lib/libdss-include/include/linux/phantom.h
new file mode 100644 (file)
index 0000000..94dd664
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ *  Copyright (C) 2005-2007 Jiri Slaby <jirislaby@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ */
+
+#ifndef __PHANTOM_H
+#define __PHANTOM_H
+
+#include <linux/types.h>
+
+/* PHN_(G/S)ET_REG param */
+struct phm_reg {
+       __u32 reg;
+       __u32 value;
+};
+
+/* PHN_(G/S)ET_REGS param */
+struct phm_regs {
+       __u32 count;
+       __u32 mask;
+       __u32 values[8];
+};
+
+#define PH_IOC_MAGIC           'p'
+#define PHN_GET_REG            _IOWR(PH_IOC_MAGIC, 0, struct phm_reg *)
+#define PHN_SET_REG            _IOW(PH_IOC_MAGIC, 1, struct phm_reg *)
+#define PHN_GET_REGS           _IOWR(PH_IOC_MAGIC, 2, struct phm_regs *)
+#define PHN_SET_REGS           _IOW(PH_IOC_MAGIC, 3, struct phm_regs *)
+/* this ioctl tells the driver, that the caller is not OpenHaptics and might
+ * use improved registers update (no more phantom switchoffs when using
+ * libphantom) */
+#define PHN_NOT_OH             _IO(PH_IOC_MAGIC, 4)
+#define PHN_GETREG             _IOWR(PH_IOC_MAGIC, 5, struct phm_reg)
+#define PHN_SETREG             _IOW(PH_IOC_MAGIC, 6, struct phm_reg)
+#define PHN_GETREGS            _IOWR(PH_IOC_MAGIC, 7, struct phm_regs)
+#define PHN_SETREGS            _IOW(PH_IOC_MAGIC, 8, struct phm_regs)
+
+#define PHN_CONTROL            0x6     /* control byte in iaddr space */
+#define PHN_CTL_AMP            0x1     /*   switch after torques change */
+#define PHN_CTL_BUT            0x2     /*   is button switched */
+#define PHN_CTL_IRQ            0x10    /*   is irq enabled */
+
+#define PHN_ZERO_FORCE         2048    /* zero torque on motor */
+
+#endif
diff --git a/lib/libdss-include/include/linux/phonet.h b/lib/libdss-include/include/linux/phonet.h
new file mode 100644 (file)
index 0000000..7d663d5
--- /dev/null
@@ -0,0 +1,185 @@
+/**
+ * file phonet.h
+ *
+ * Phonet sockets kernel interface
+ *
+ * Copyright (C) 2008 Nokia Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef LINUX_PHONET_H
+#define LINUX_PHONET_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* Automatic protocol selection */
+#define PN_PROTO_TRANSPORT     0
+/* Phonet datagram socket */
+#define PN_PROTO_PHONET                1
+/* Phonet pipe */
+#define PN_PROTO_PIPE          2
+#define PHONET_NPROTO          3
+
+/* Socket options for SOL_PNPIPE level */
+#define PNPIPE_ENCAP           1
+#define PNPIPE_IFINDEX         2
+#define PNPIPE_HANDLE          3
+#define PNPIPE_INITSTATE       4
+
+#define PNADDR_ANY             0
+#define PNADDR_BROADCAST       0xFC
+#define PNPORT_RESOURCE_ROUTING        0
+
+/* Values for PNPIPE_ENCAP option */
+#define PNPIPE_ENCAP_NONE      0
+#define PNPIPE_ENCAP_IP                1
+
+/* ioctls */
+#define SIOCPNGETOBJECT                (SIOCPROTOPRIVATE + 0)
+#define SIOCPNENABLEPIPE       (SIOCPROTOPRIVATE + 13)
+#define SIOCPNADDRESOURCE      (SIOCPROTOPRIVATE + 14)
+#define SIOCPNDELRESOURCE      (SIOCPROTOPRIVATE + 15)
+
+/* Phonet protocol header */
+struct phonethdr {
+       __u8    pn_rdev;
+       __u8    pn_sdev;
+       __u8    pn_res;
+       __be16  pn_length;
+       __u8    pn_robj;
+       __u8    pn_sobj;
+} __attribute__((packed));
+
+/* Common Phonet payload header */
+struct phonetmsg {
+       __u8    pn_trans_id;    /* transaction ID */
+       __u8    pn_msg_id;      /* message type */
+       union {
+               struct {
+                       __u8    pn_submsg_id;   /* message subtype */
+                       __u8    pn_data[5];
+               } base;
+               struct {
+                       __u16   pn_e_res_id;    /* extended resource ID */
+                       __u8    pn_e_submsg_id; /* message subtype */
+                       __u8    pn_e_data[3];
+               } ext;
+       } pn_msg_u;
+};
+#define PN_COMMON_MESSAGE      0xF0
+#define PN_COMMGR              0x10
+#define PN_PREFIX              0xE0 /* resource for extended messages */
+#define pn_submsg_id           pn_msg_u.base.pn_submsg_id
+#define pn_e_submsg_id         pn_msg_u.ext.pn_e_submsg_id
+#define pn_e_res_id            pn_msg_u.ext.pn_e_res_id
+#define pn_data                        pn_msg_u.base.pn_data
+#define pn_e_data              pn_msg_u.ext.pn_e_data
+
+/* data for unreachable errors */
+#define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP    0x01
+#define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP  0x14
+#define pn_orig_msg_id         pn_data[0]
+#define pn_status              pn_data[1]
+#define pn_e_orig_msg_id       pn_e_data[0]
+#define pn_e_status            pn_e_data[1]
+
+/* Phonet socket address structure */
+struct sockaddr_pn {
+       __kernel_sa_family_t spn_family;
+       __u8 spn_obj;
+       __u8 spn_dev;
+       __u8 spn_resource;
+       __u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3];
+} __attribute__((packed));
+
+/* Well known address */
+#define PN_DEV_PC      0x10
+
+static __inline__ __u16 pn_object(__u8 addr, __u16 port)
+{
+       return (addr << 8) | (port & 0x3ff);
+}
+
+static __inline__ __u8 pn_obj(__u16 handle)
+{
+       return handle & 0xff;
+}
+
+static __inline__ __u8 pn_dev(__u16 handle)
+{
+       return handle >> 8;
+}
+
+static __inline__ __u16 pn_port(__u16 handle)
+{
+       return handle & 0x3ff;
+}
+
+static __inline__ __u8 pn_addr(__u16 handle)
+{
+       return (handle >> 8) & 0xfc;
+}
+
+static __inline__ void pn_sockaddr_set_addr(struct sockaddr_pn *spn, __u8 addr)
+{
+       spn->spn_dev &= 0x03;
+       spn->spn_dev |= addr & 0xfc;
+}
+
+static __inline__ void pn_sockaddr_set_port(struct sockaddr_pn *spn, __u16 port)
+{
+       spn->spn_dev &= 0xfc;
+       spn->spn_dev |= (port >> 8) & 0x03;
+       spn->spn_obj = port & 0xff;
+}
+
+static __inline__ void pn_sockaddr_set_object(struct sockaddr_pn *spn,
+                                               __u16 handle)
+{
+       spn->spn_dev = pn_dev(handle);
+       spn->spn_obj = pn_obj(handle);
+}
+
+static __inline__ void pn_sockaddr_set_resource(struct sockaddr_pn *spn,
+                                               __u8 resource)
+{
+       spn->spn_resource = resource;
+}
+
+static __inline__ __u8 pn_sockaddr_get_addr(const struct sockaddr_pn *spn)
+{
+       return spn->spn_dev & 0xfc;
+}
+
+static __inline__ __u16 pn_sockaddr_get_port(const struct sockaddr_pn *spn)
+{
+       return ((spn->spn_dev & 0x03) << 8) | spn->spn_obj;
+}
+
+static __inline__ __u16 pn_sockaddr_get_object(const struct sockaddr_pn *spn)
+{
+       return pn_object(spn->spn_dev, spn->spn_obj);
+}
+
+static __inline__ __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn)
+{
+       return spn->spn_resource;
+}
+
+/* Phonet device ioctl requests */
+
+#endif /* LINUX_PHONET_H */
diff --git a/lib/libdss-include/include/linux/pkt_cls.h b/lib/libdss-include/include/linux/pkt_cls.h
new file mode 100644 (file)
index 0000000..a323146
--- /dev/null
@@ -0,0 +1,448 @@
+#ifndef __LINUX_PKT_CLS_H
+#define __LINUX_PKT_CLS_H
+
+#include <linux/types.h>
+#include <linux/pkt_sched.h>
+
+
+/* Action attributes */
+enum {
+       TCA_ACT_UNSPEC,
+       TCA_ACT_KIND,
+       TCA_ACT_OPTIONS,
+       TCA_ACT_INDEX,
+       TCA_ACT_STATS,
+       __TCA_ACT_MAX
+};
+
+#define TCA_ACT_MAX __TCA_ACT_MAX
+#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
+#define TCA_ACT_MAX_PRIO 32
+#define TCA_ACT_BIND   1
+#define TCA_ACT_NOBIND 0
+#define TCA_ACT_UNBIND 1
+#define TCA_ACT_NOUNBIND       0
+#define TCA_ACT_REPLACE                1
+#define TCA_ACT_NOREPLACE      0
+
+#define TC_ACT_UNSPEC  (-1)
+#define TC_ACT_OK              0
+#define TC_ACT_RECLASSIFY      1
+#define TC_ACT_SHOT            2
+#define TC_ACT_PIPE            3
+#define TC_ACT_STOLEN          4
+#define TC_ACT_QUEUED          5
+#define TC_ACT_REPEAT          6
+#define TC_ACT_REDIRECT                7
+#define TC_ACT_JUMP            0x10000000
+
+/* Action type identifiers*/
+enum {
+       TCA_ID_UNSPEC=0,
+       TCA_ID_POLICE=1,
+       /* other actions go here */
+       __TCA_ID_MAX=255
+};
+
+#define TCA_ID_MAX __TCA_ID_MAX
+
+struct tc_police {
+       __u32                   index;
+       int                     action;
+#define TC_POLICE_UNSPEC       TC_ACT_UNSPEC
+#define TC_POLICE_OK           TC_ACT_OK
+#define TC_POLICE_RECLASSIFY   TC_ACT_RECLASSIFY
+#define TC_POLICE_SHOT         TC_ACT_SHOT
+#define TC_POLICE_PIPE         TC_ACT_PIPE
+
+       __u32                   limit;
+       __u32                   burst;
+       __u32                   mtu;
+       struct tc_ratespec      rate;
+       struct tc_ratespec      peakrate;
+       int                     refcnt;
+       int                     bindcnt;
+       __u32                   capab;
+};
+
+struct tcf_t {
+       __u64   install;
+       __u64   lastuse;
+       __u64   expires;
+};
+
+struct tc_cnt {
+       int                   refcnt; 
+       int                   bindcnt;
+};
+
+#define tc_gen \
+       __u32                 index; \
+       __u32                 capab; \
+       int                   action; \
+       int                   refcnt; \
+       int                   bindcnt
+
+enum {
+       TCA_POLICE_UNSPEC,
+       TCA_POLICE_TBF,
+       TCA_POLICE_RATE,
+       TCA_POLICE_PEAKRATE,
+       TCA_POLICE_AVRATE,
+       TCA_POLICE_RESULT,
+       __TCA_POLICE_MAX
+#define TCA_POLICE_RESULT TCA_POLICE_RESULT
+};
+
+#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
+
+/* U32 filters */
+
+#define TC_U32_HTID(h) ((h)&0xFFF00000)
+#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
+#define TC_U32_HASH(h) (((h)>>12)&0xFF)
+#define TC_U32_NODE(h) ((h)&0xFFF)
+#define TC_U32_KEY(h) ((h)&0xFFFFF)
+#define TC_U32_UNSPEC  0
+#define TC_U32_ROOT    (0xFFF00000)
+
+enum {
+       TCA_U32_UNSPEC,
+       TCA_U32_CLASSID,
+       TCA_U32_HASH,
+       TCA_U32_LINK,
+       TCA_U32_DIVISOR,
+       TCA_U32_SEL,
+       TCA_U32_POLICE,
+       TCA_U32_ACT,   
+       TCA_U32_INDEV,
+       TCA_U32_PCNT,
+       TCA_U32_MARK,
+       __TCA_U32_MAX
+};
+
+#define TCA_U32_MAX (__TCA_U32_MAX - 1)
+
+struct tc_u32_key {
+       __be32          mask;
+       __be32          val;
+       int             off;
+       int             offmask;
+};
+
+struct tc_u32_sel {
+       unsigned char           flags;
+       unsigned char           offshift;
+       unsigned char           nkeys;
+
+       __be16                  offmask;
+       __u16                   off;
+       short                   offoff;
+
+       short                   hoff;
+       __be32                  hmask;
+       struct tc_u32_key       keys[0];
+};
+
+struct tc_u32_mark {
+       __u32           val;
+       __u32           mask;
+       __u32           success;
+};
+
+struct tc_u32_pcnt {
+       __u64 rcnt;
+       __u64 rhit;
+       __u64 kcnts[0];
+};
+
+/* Flags */
+
+#define TC_U32_TERMINAL                1
+#define TC_U32_OFFSET          2
+#define TC_U32_VAROFFSET       4
+#define TC_U32_EAT             8
+
+#define TC_U32_MAXDEPTH 8
+
+
+/* RSVP filter */
+
+enum {
+       TCA_RSVP_UNSPEC,
+       TCA_RSVP_CLASSID,
+       TCA_RSVP_DST,
+       TCA_RSVP_SRC,
+       TCA_RSVP_PINFO,
+       TCA_RSVP_POLICE,
+       TCA_RSVP_ACT,
+       __TCA_RSVP_MAX
+};
+
+#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
+
+struct tc_rsvp_gpi {
+       __u32   key;
+       __u32   mask;
+       int     offset;
+};
+
+struct tc_rsvp_pinfo {
+       struct tc_rsvp_gpi dpi;
+       struct tc_rsvp_gpi spi;
+       __u8    protocol;
+       __u8    tunnelid;
+       __u8    tunnelhdr;
+       __u8    pad;
+};
+
+/* ROUTE filter */
+
+enum {
+       TCA_ROUTE4_UNSPEC,
+       TCA_ROUTE4_CLASSID,
+       TCA_ROUTE4_TO,
+       TCA_ROUTE4_FROM,
+       TCA_ROUTE4_IIF,
+       TCA_ROUTE4_POLICE,
+       TCA_ROUTE4_ACT,
+       __TCA_ROUTE4_MAX
+};
+
+#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
+
+
+/* FW filter */
+
+enum {
+       TCA_FW_UNSPEC,
+       TCA_FW_CLASSID,
+       TCA_FW_POLICE,
+       TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
+       TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
+       TCA_FW_MASK,
+       __TCA_FW_MAX
+};
+
+#define TCA_FW_MAX (__TCA_FW_MAX - 1)
+
+/* TC index filter */
+
+enum {
+       TCA_TCINDEX_UNSPEC,
+       TCA_TCINDEX_HASH,
+       TCA_TCINDEX_MASK,
+       TCA_TCINDEX_SHIFT,
+       TCA_TCINDEX_FALL_THROUGH,
+       TCA_TCINDEX_CLASSID,
+       TCA_TCINDEX_POLICE,
+       TCA_TCINDEX_ACT,
+       __TCA_TCINDEX_MAX
+};
+
+#define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
+
+/* Flow filter */
+
+enum {
+       FLOW_KEY_SRC,
+       FLOW_KEY_DST,
+       FLOW_KEY_PROTO,
+       FLOW_KEY_PROTO_SRC,
+       FLOW_KEY_PROTO_DST,
+       FLOW_KEY_IIF,
+       FLOW_KEY_PRIORITY,
+       FLOW_KEY_MARK,
+       FLOW_KEY_NFCT,
+       FLOW_KEY_NFCT_SRC,
+       FLOW_KEY_NFCT_DST,
+       FLOW_KEY_NFCT_PROTO_SRC,
+       FLOW_KEY_NFCT_PROTO_DST,
+       FLOW_KEY_RTCLASSID,
+       FLOW_KEY_SKUID,
+       FLOW_KEY_SKGID,
+       FLOW_KEY_VLAN_TAG,
+       FLOW_KEY_RXHASH,
+       __FLOW_KEY_MAX,
+};
+
+#define FLOW_KEY_MAX   (__FLOW_KEY_MAX - 1)
+
+enum {
+       FLOW_MODE_MAP,
+       FLOW_MODE_HASH,
+};
+
+enum {
+       TCA_FLOW_UNSPEC,
+       TCA_FLOW_KEYS,
+       TCA_FLOW_MODE,
+       TCA_FLOW_BASECLASS,
+       TCA_FLOW_RSHIFT,
+       TCA_FLOW_ADDEND,
+       TCA_FLOW_MASK,
+       TCA_FLOW_XOR,
+       TCA_FLOW_DIVISOR,
+       TCA_FLOW_ACT,
+       TCA_FLOW_POLICE,
+       TCA_FLOW_EMATCHES,
+       TCA_FLOW_PERTURB,
+       __TCA_FLOW_MAX
+};
+
+#define TCA_FLOW_MAX   (__TCA_FLOW_MAX - 1)
+
+/* Basic filter */
+
+enum {
+       TCA_BASIC_UNSPEC,
+       TCA_BASIC_CLASSID,
+       TCA_BASIC_EMATCHES,
+       TCA_BASIC_ACT,
+       TCA_BASIC_POLICE,
+       __TCA_BASIC_MAX
+};
+
+#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
+
+
+/* Cgroup classifier */
+
+enum {
+       TCA_CGROUP_UNSPEC,
+       TCA_CGROUP_ACT,
+       TCA_CGROUP_POLICE,
+       TCA_CGROUP_EMATCHES,
+       __TCA_CGROUP_MAX,
+};
+
+#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
+
+/* BPF classifier */
+
+#define TCA_BPF_FLAG_ACT_DIRECT                (1 << 0)
+
+enum {
+       TCA_BPF_UNSPEC,
+       TCA_BPF_ACT,
+       TCA_BPF_POLICE,
+       TCA_BPF_CLASSID,
+       TCA_BPF_OPS_LEN,
+       TCA_BPF_OPS,
+       TCA_BPF_FD,
+       TCA_BPF_NAME,
+       TCA_BPF_FLAGS,
+       __TCA_BPF_MAX,
+};
+
+#define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
+
+/* Flower classifier */
+
+enum {
+       TCA_FLOWER_UNSPEC,
+       TCA_FLOWER_CLASSID,
+       TCA_FLOWER_INDEV,
+       TCA_FLOWER_ACT,
+       TCA_FLOWER_KEY_ETH_DST,         /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_DST_MASK,    /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_SRC,         /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_SRC_MASK,    /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_TYPE,        /* be16 */
+       TCA_FLOWER_KEY_IP_PROTO,        /* u8 */
+       TCA_FLOWER_KEY_IPV4_SRC,        /* be32 */
+       TCA_FLOWER_KEY_IPV4_SRC_MASK,   /* be32 */
+       TCA_FLOWER_KEY_IPV4_DST,        /* be32 */
+       TCA_FLOWER_KEY_IPV4_DST_MASK,   /* be32 */
+       TCA_FLOWER_KEY_IPV6_SRC,        /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_SRC_MASK,   /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_DST,        /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_DST_MASK,   /* struct in6_addr */
+       TCA_FLOWER_KEY_TCP_SRC,         /* be16 */
+       TCA_FLOWER_KEY_TCP_DST,         /* be16 */
+       TCA_FLOWER_KEY_UDP_SRC,         /* be16 */
+       TCA_FLOWER_KEY_UDP_DST,         /* be16 */
+       __TCA_FLOWER_MAX,
+};
+
+#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
+
+/* Extended Matches */
+
+struct tcf_ematch_tree_hdr {
+       __u16           nmatches;
+       __u16           progid;
+};
+
+enum {
+       TCA_EMATCH_TREE_UNSPEC,
+       TCA_EMATCH_TREE_HDR,
+       TCA_EMATCH_TREE_LIST,
+       __TCA_EMATCH_TREE_MAX
+};
+#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
+
+struct tcf_ematch_hdr {
+       __u16           matchid;
+       __u16           kind;
+       __u16           flags;
+       __u16           pad; /* currently unused */
+};
+
+/*  0                   1
+ *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
+ * +-----------------------+-+-+---+
+ * |         Unused        |S|I| R |
+ * +-----------------------+-+-+---+
+ *
+ * R(2) ::= relation to next ematch
+ *          where: 0 0 END (last ematch)
+ *                 0 1 AND
+ *                 1 0 OR
+ *                 1 1 Unused (invalid)
+ * I(1) ::= invert result
+ * S(1) ::= simple payload
+ */
+#define TCF_EM_REL_END 0
+#define TCF_EM_REL_AND (1<<0)
+#define TCF_EM_REL_OR  (1<<1)
+#define TCF_EM_INVERT  (1<<2)
+#define TCF_EM_SIMPLE  (1<<3)
+
+#define TCF_EM_REL_MASK        3
+#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
+
+enum {
+       TCF_LAYER_LINK,
+       TCF_LAYER_NETWORK,
+       TCF_LAYER_TRANSPORT,
+       __TCF_LAYER_MAX
+};
+#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
+
+/* Ematch type assignments
+ *   1..32767          Reserved for ematches inside kernel tree
+ *   32768..65535      Free to use, not reliable
+ */
+#define        TCF_EM_CONTAINER        0
+#define        TCF_EM_CMP              1
+#define        TCF_EM_NBYTE            2
+#define        TCF_EM_U32              3
+#define        TCF_EM_META             4
+#define        TCF_EM_TEXT             5
+#define        TCF_EM_VLAN             6
+#define        TCF_EM_CANID            7
+#define        TCF_EM_IPSET            8
+#define        TCF_EM_MAX              8
+
+enum {
+       TCF_EM_PROG_TC
+};
+
+enum {
+       TCF_EM_OPND_EQ,
+       TCF_EM_OPND_GT,
+       TCF_EM_OPND_LT
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/pkt_sched.h b/lib/libdss-include/include/linux/pkt_sched.h
new file mode 100644 (file)
index 0000000..8d2530d
--- /dev/null
@@ -0,0 +1,853 @@
+#ifndef __LINUX_PKT_SCHED_H
+#define __LINUX_PKT_SCHED_H
+
+#include <linux/types.h>
+
+/* Logical priority bands not depending on specific packet scheduler.
+   Every scheduler will map them to real traffic classes, if it has
+   no more precise mechanism to classify packets.
+
+   These numbers have no special meaning, though their coincidence
+   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
+   preferred full anarchy inspired by diffserv group.
+
+   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
+   class, actually, as rule it will be handled with more care than
+   filler or even bulk.
+ */
+
+#define TC_PRIO_BESTEFFORT             0
+#define TC_PRIO_FILLER                 1
+#define TC_PRIO_BULK                   2
+#define TC_PRIO_INTERACTIVE_BULK       4
+#define TC_PRIO_INTERACTIVE            6
+#define TC_PRIO_CONTROL                        7
+
+#define TC_PRIO_MAX                    15
+
+/* Generic queue statistics, available for all the elements.
+   Particular schedulers may have also their private records.
+ */
+
+struct tc_stats {
+       __u64   bytes;                  /* Number of enqueued bytes */
+       __u32   packets;                /* Number of enqueued packets   */
+       __u32   drops;                  /* Packets dropped because of lack of resources */
+       __u32   overlimits;             /* Number of throttle events when this
+                                        * flow goes out of allocated bandwidth */
+       __u32   bps;                    /* Current flow byte rate */
+       __u32   pps;                    /* Current flow packet rate */
+       __u32   qlen;
+       __u32   backlog;
+};
+
+struct tc_estimator {
+       signed char     interval;
+       unsigned char   ewma_log;
+};
+
+/* "Handles"
+   ---------
+
+    All the traffic control objects have 32bit identifiers, or "handles".
+
+    They can be considered as opaque numbers from user API viewpoint,
+    but actually they always consist of two fields: major and
+    minor numbers, which are interpreted by kernel specially,
+    that may be used by applications, though not recommended.
+
+    F.e. qdisc handles always have minor number equal to zero,
+    classes (or flows) have major equal to parent qdisc major, and
+    minor uniquely identifying class inside qdisc.
+
+    Macros to manipulate handles:
+ */
+
+#define TC_H_MAJ_MASK (0xFFFF0000U)
+#define TC_H_MIN_MASK (0x0000FFFFU)
+#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
+#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
+#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
+
+#define TC_H_UNSPEC    (0U)
+#define TC_H_ROOT      (0xFFFFFFFFU)
+#define TC_H_INGRESS    (0xFFFFFFF1U)
+
+/* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
+enum tc_link_layer {
+       TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
+       TC_LINKLAYER_ETHERNET,
+       TC_LINKLAYER_ATM,
+};
+#define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
+
+struct tc_ratespec {
+       unsigned char   cell_log;
+       __u8            linklayer; /* lower 4 bits */
+       unsigned short  overhead;
+       short           cell_align;
+       unsigned short  mpu;
+       __u32           rate;
+};
+
+#define TC_RTAB_SIZE   1024
+
+struct tc_sizespec {
+       unsigned char   cell_log;
+       unsigned char   size_log;
+       short           cell_align;
+       int             overhead;
+       unsigned int    linklayer;
+       unsigned int    mpu;
+       unsigned int    mtu;
+       unsigned int    tsize;
+};
+
+enum {
+       TCA_STAB_UNSPEC,
+       TCA_STAB_BASE,
+       TCA_STAB_DATA,
+       __TCA_STAB_MAX
+};
+
+#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
+
+/* FIFO section */
+
+struct tc_fifo_qopt {
+       __u32   limit;  /* Queue length: bytes for bfifo, packets for pfifo */
+};
+
+/* PRIO section */
+
+#define TCQ_PRIO_BANDS 16
+#define TCQ_MIN_PRIO_BANDS 2
+
+struct tc_prio_qopt {
+       int     bands;                  /* Number of bands */
+       __u8    priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
+};
+
+/* MULTIQ section */
+
+struct tc_multiq_qopt {
+       __u16   bands;                  /* Number of bands */
+       __u16   max_bands;              /* Maximum number of queues */
+};
+
+/* PLUG section */
+
+#define TCQ_PLUG_BUFFER                0
+#define TCQ_PLUG_RELEASE_ONE           1
+#define TCQ_PLUG_RELEASE_INDEFINITE    2
+#define TCQ_PLUG_LIMIT                 3
+
+struct tc_plug_qopt {
+       /* TCQ_PLUG_BUFFER: Inset a plug into the queue and
+        *  buffer any incoming packets
+        * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
+        *   to beginning of the next plug.
+        * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
+        *   Stop buffering packets until the next TCQ_PLUG_BUFFER
+        *   command is received (just act as a pass-thru queue).
+        * TCQ_PLUG_LIMIT: Increase/decrease queue size
+        */
+       int             action;
+       __u32           limit;
+};
+
+/* TBF section */
+
+struct tc_tbf_qopt {
+       struct tc_ratespec rate;
+       struct tc_ratespec peakrate;
+       __u32           limit;
+       __u32           buffer;
+       __u32           mtu;
+};
+
+enum {
+       TCA_TBF_UNSPEC,
+       TCA_TBF_PARMS,
+       TCA_TBF_RTAB,
+       TCA_TBF_PTAB,
+       TCA_TBF_RATE64,
+       TCA_TBF_PRATE64,
+       TCA_TBF_BURST,
+       TCA_TBF_PBURST,
+       __TCA_TBF_MAX,
+};
+
+#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
+
+
+/* TEQL section */
+
+/* TEQL does not require any parameters */
+
+/* SFQ section */
+
+struct tc_sfq_qopt {
+       unsigned        quantum;        /* Bytes per round allocated to flow */
+       int             perturb_period; /* Period of hash perturbation */
+       __u32           limit;          /* Maximal packets in queue */
+       unsigned        divisor;        /* Hash divisor  */
+       unsigned        flows;          /* Maximal number of flows  */
+};
+
+struct tc_sfqred_stats {
+       __u32           prob_drop;      /* Early drops, below max threshold */
+       __u32           forced_drop;    /* Early drops, after max threshold */
+       __u32           prob_mark;      /* Marked packets, below max threshold */
+       __u32           forced_mark;    /* Marked packets, after max threshold */
+       __u32           prob_mark_head; /* Marked packets, below max threshold */
+       __u32           forced_mark_head;/* Marked packets, after max threshold */
+};
+
+struct tc_sfq_qopt_v1 {
+       struct tc_sfq_qopt v0;
+       unsigned int    depth;          /* max number of packets per flow */
+       unsigned int    headdrop;
+/* SFQRED parameters */
+       __u32           limit;          /* HARD maximal flow queue length (bytes) */
+       __u32           qth_min;        /* Min average length threshold (bytes) */
+       __u32           qth_max;        /* Max average length threshold (bytes) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;
+       __u32           max_P;          /* probability, high resolution */
+/* SFQRED stats */
+       struct tc_sfqred_stats stats;
+};
+
+
+struct tc_sfq_xstats {
+       __s32           allot;
+};
+
+/* RED section */
+
+enum {
+       TCA_RED_UNSPEC,
+       TCA_RED_PARMS,
+       TCA_RED_STAB,
+       TCA_RED_MAX_P,
+       __TCA_RED_MAX,
+};
+
+#define TCA_RED_MAX (__TCA_RED_MAX - 1)
+
+struct tc_red_qopt {
+       __u32           limit;          /* HARD maximal queue length (bytes)    */
+       __u32           qth_min;        /* Min average length threshold (bytes) */
+       __u32           qth_max;        /* Max average length threshold (bytes) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;
+#define TC_RED_ECN             1
+#define TC_RED_HARDDROP                2
+#define TC_RED_ADAPTATIVE      4
+};
+
+struct tc_red_xstats {
+       __u32           early;          /* Early drops */
+       __u32           pdrop;          /* Drops due to queue limits */
+       __u32           other;          /* Drops due to drop() calls */
+       __u32           marked;         /* Marked packets */
+};
+
+/* GRED section */
+
+#define MAX_DPs 16
+
+enum {
+       TCA_GRED_UNSPEC,
+       TCA_GRED_PARMS,
+       TCA_GRED_STAB,
+       TCA_GRED_DPS,
+       TCA_GRED_MAX_P,
+       TCA_GRED_LIMIT,
+       __TCA_GRED_MAX,
+};
+
+#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
+
+struct tc_gred_qopt {
+       __u32           limit;        /* HARD maximal queue length (bytes)    */
+       __u32           qth_min;      /* Min average length threshold (bytes) */
+       __u32           qth_max;      /* Max average length threshold (bytes) */
+       __u32           DP;           /* up to 2^32 DPs */
+       __u32           backlog;
+       __u32           qave;
+       __u32           forced;
+       __u32           early;
+       __u32           other;
+       __u32           pdrop;
+       __u8            Wlog;         /* log(W)               */
+       __u8            Plog;         /* log(P_max/(qth_max-qth_min)) */
+       __u8            Scell_log;    /* cell size for idle damping */
+       __u8            prio;         /* prio of this VQ */
+       __u32           packets;
+       __u32           bytesin;
+};
+
+/* gred setup */
+struct tc_gred_sopt {
+       __u32           DPs;
+       __u32           def_DP;
+       __u8            grio;
+       __u8            flags;
+       __u16           pad1;
+};
+
+/* CHOKe section */
+
+enum {
+       TCA_CHOKE_UNSPEC,
+       TCA_CHOKE_PARMS,
+       TCA_CHOKE_STAB,
+       TCA_CHOKE_MAX_P,
+       __TCA_CHOKE_MAX,
+};
+
+#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
+
+struct tc_choke_qopt {
+       __u32           limit;          /* Hard queue length (packets)  */
+       __u32           qth_min;        /* Min average threshold (packets) */
+       __u32           qth_max;        /* Max average threshold (packets) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;          /* see RED flags */
+};
+
+struct tc_choke_xstats {
+       __u32           early;          /* Early drops */
+       __u32           pdrop;          /* Drops due to queue limits */
+       __u32           other;          /* Drops due to drop() calls */
+       __u32           marked;         /* Marked packets */
+       __u32           matched;        /* Drops due to flow match */
+};
+
+/* HTB section */
+#define TC_HTB_NUMPRIO         8
+#define TC_HTB_MAXDEPTH                8
+#define TC_HTB_PROTOVER                3 /* the same as HTB and TC's major */
+
+struct tc_htb_opt {
+       struct tc_ratespec      rate;
+       struct tc_ratespec      ceil;
+       __u32   buffer;
+       __u32   cbuffer;
+       __u32   quantum;
+       __u32   level;          /* out only */
+       __u32   prio;
+};
+struct tc_htb_glob {
+       __u32 version;          /* to match HTB/TC */
+       __u32 rate2quantum;     /* bps->quantum divisor */
+       __u32 defcls;           /* default class number */
+       __u32 debug;            /* debug flags */
+
+       /* stats */
+       __u32 direct_pkts; /* count of non shaped packets */
+};
+enum {
+       TCA_HTB_UNSPEC,
+       TCA_HTB_PARMS,
+       TCA_HTB_INIT,
+       TCA_HTB_CTAB,
+       TCA_HTB_RTAB,
+       TCA_HTB_DIRECT_QLEN,
+       TCA_HTB_RATE64,
+       TCA_HTB_CEIL64,
+       __TCA_HTB_MAX,
+};
+
+#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
+
+struct tc_htb_xstats {
+       __u32 lends;
+       __u32 borrows;
+       __u32 giants;   /* too big packets (rate will not be accurate) */
+       __u32 tokens;
+       __u32 ctokens;
+};
+
+/* HFSC section */
+
+struct tc_hfsc_qopt {
+       __u16   defcls;         /* default class */
+};
+
+struct tc_service_curve {
+       __u32   m1;             /* slope of the first segment in bps */
+       __u32   d;              /* x-projection of the first segment in us */
+       __u32   m2;             /* slope of the second segment in bps */
+};
+
+struct tc_hfsc_stats {
+       __u64   work;           /* total work done */
+       __u64   rtwork;         /* work done by real-time criteria */
+       __u32   period;         /* current period */
+       __u32   level;          /* class level in hierarchy */
+};
+
+enum {
+       TCA_HFSC_UNSPEC,
+       TCA_HFSC_RSC,
+       TCA_HFSC_FSC,
+       TCA_HFSC_USC,
+       __TCA_HFSC_MAX,
+};
+
+#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
+
+
+/* CBQ section */
+
+#define TC_CBQ_MAXPRIO         8
+#define TC_CBQ_MAXLEVEL                8
+#define TC_CBQ_DEF_EWMA                5
+
+struct tc_cbq_lssopt {
+       unsigned char   change;
+       unsigned char   flags;
+#define TCF_CBQ_LSS_BOUNDED    1
+#define TCF_CBQ_LSS_ISOLATED   2
+       unsigned char   ewma_log;
+       unsigned char   level;
+#define TCF_CBQ_LSS_FLAGS      1
+#define TCF_CBQ_LSS_EWMA       2
+#define TCF_CBQ_LSS_MAXIDLE    4
+#define TCF_CBQ_LSS_MINIDLE    8
+#define TCF_CBQ_LSS_OFFTIME    0x10
+#define TCF_CBQ_LSS_AVPKT      0x20
+       __u32           maxidle;
+       __u32           minidle;
+       __u32           offtime;
+       __u32           avpkt;
+};
+
+struct tc_cbq_wrropt {
+       unsigned char   flags;
+       unsigned char   priority;
+       unsigned char   cpriority;
+       unsigned char   __reserved;
+       __u32           allot;
+       __u32           weight;
+};
+
+struct tc_cbq_ovl {
+       unsigned char   strategy;
+#define        TC_CBQ_OVL_CLASSIC      0
+#define        TC_CBQ_OVL_DELAY        1
+#define        TC_CBQ_OVL_LOWPRIO      2
+#define        TC_CBQ_OVL_DROP         3
+#define        TC_CBQ_OVL_RCLASSIC     4
+       unsigned char   priority2;
+       __u16           pad;
+       __u32           penalty;
+};
+
+struct tc_cbq_police {
+       unsigned char   police;
+       unsigned char   __res1;
+       unsigned short  __res2;
+};
+
+struct tc_cbq_fopt {
+       __u32           split;
+       __u32           defmap;
+       __u32           defchange;
+};
+
+struct tc_cbq_xstats {
+       __u32           borrows;
+       __u32           overactions;
+       __s32           avgidle;
+       __s32           undertime;
+};
+
+enum {
+       TCA_CBQ_UNSPEC,
+       TCA_CBQ_LSSOPT,
+       TCA_CBQ_WRROPT,
+       TCA_CBQ_FOPT,
+       TCA_CBQ_OVL_STRATEGY,
+       TCA_CBQ_RATE,
+       TCA_CBQ_RTAB,
+       TCA_CBQ_POLICE,
+       __TCA_CBQ_MAX,
+};
+
+#define TCA_CBQ_MAX    (__TCA_CBQ_MAX - 1)
+
+/* dsmark section */
+
+enum {
+       TCA_DSMARK_UNSPEC,
+       TCA_DSMARK_INDICES,
+       TCA_DSMARK_DEFAULT_INDEX,
+       TCA_DSMARK_SET_TC_INDEX,
+       TCA_DSMARK_MASK,
+       TCA_DSMARK_VALUE,
+       __TCA_DSMARK_MAX,
+};
+
+#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
+
+/* ATM  section */
+
+enum {
+       TCA_ATM_UNSPEC,
+       TCA_ATM_FD,             /* file/socket descriptor */
+       TCA_ATM_PTR,            /* pointer to descriptor - later */
+       TCA_ATM_HDR,            /* LL header */
+       TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
+       TCA_ATM_ADDR,           /* PVC address (for output only) */
+       TCA_ATM_STATE,          /* VC state (ATM_VS_*; for output only) */
+       __TCA_ATM_MAX,
+};
+
+#define TCA_ATM_MAX    (__TCA_ATM_MAX - 1)
+
+/* Network emulator */
+
+enum {
+       TCA_NETEM_UNSPEC,
+       TCA_NETEM_CORR,
+       TCA_NETEM_DELAY_DIST,
+       TCA_NETEM_REORDER,
+       TCA_NETEM_CORRUPT,
+       TCA_NETEM_LOSS,
+       TCA_NETEM_RATE,
+       TCA_NETEM_ECN,
+       TCA_NETEM_RATE64,
+       __TCA_NETEM_MAX,
+};
+
+#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
+
+struct tc_netem_qopt {
+       __u32   latency;        /* added delay (us) */
+       __u32   limit;          /* fifo limit (packets) */
+       __u32   loss;           /* random packet loss (0=none ~0=100%) */
+       __u32   gap;            /* re-ordering gap (0 for none) */
+       __u32   duplicate;      /* random packet dup  (0=none ~0=100%) */
+       __u32   jitter;         /* random jitter in latency (us) */
+};
+
+struct tc_netem_corr {
+       __u32   delay_corr;     /* delay correlation */
+       __u32   loss_corr;      /* packet loss correlation */
+       __u32   dup_corr;       /* duplicate correlation  */
+};
+
+struct tc_netem_reorder {
+       __u32   probability;
+       __u32   correlation;
+};
+
+struct tc_netem_corrupt {
+       __u32   probability;
+       __u32   correlation;
+};
+
+struct tc_netem_rate {
+       __u32   rate;   /* byte/s */
+       __s32   packet_overhead;
+       __u32   cell_size;
+       __s32   cell_overhead;
+};
+
+enum {
+       NETEM_LOSS_UNSPEC,
+       NETEM_LOSS_GI,          /* General Intuitive - 4 state model */
+       NETEM_LOSS_GE,          /* Gilbert Elliot models */
+       __NETEM_LOSS_MAX
+};
+#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
+
+/* State transition probabilities for 4 state model */
+struct tc_netem_gimodel {
+       __u32   p13;
+       __u32   p31;
+       __u32   p32;
+       __u32   p14;
+       __u32   p23;
+};
+
+/* Gilbert-Elliot models */
+struct tc_netem_gemodel {
+       __u32 p;
+       __u32 r;
+       __u32 h;
+       __u32 k1;
+};
+
+#define NETEM_DIST_SCALE       8192
+#define NETEM_DIST_MAX         16384
+
+/* DRR */
+
+enum {
+       TCA_DRR_UNSPEC,
+       TCA_DRR_QUANTUM,
+       __TCA_DRR_MAX
+};
+
+#define TCA_DRR_MAX    (__TCA_DRR_MAX - 1)
+
+struct tc_drr_stats {
+       __u32   deficit;
+};
+
+/* MQPRIO */
+#define TC_QOPT_BITMASK 15
+#define TC_QOPT_MAX_QUEUE 16
+
+struct tc_mqprio_qopt {
+       __u8    num_tc;
+       __u8    prio_tc_map[TC_QOPT_BITMASK + 1];
+       __u8    hw;
+       __u16   count[TC_QOPT_MAX_QUEUE];
+       __u16   offset[TC_QOPT_MAX_QUEUE];
+};
+
+/* SFB */
+
+enum {
+       TCA_SFB_UNSPEC,
+       TCA_SFB_PARMS,
+       __TCA_SFB_MAX,
+};
+
+#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
+
+/*
+ * Note: increment, decrement are Q0.16 fixed-point values.
+ */
+struct tc_sfb_qopt {
+       __u32 rehash_interval;  /* delay between hash move, in ms */
+       __u32 warmup_time;      /* double buffering warmup time in ms (warmup_time < rehash_interval) */
+       __u32 max;              /* max len of qlen_min */
+       __u32 bin_size;         /* maximum queue length per bin */
+       __u32 increment;        /* probability increment, (d1 in Blue) */
+       __u32 decrement;        /* probability decrement, (d2 in Blue) */
+       __u32 limit;            /* max SFB queue length */
+       __u32 penalty_rate;     /* inelastic flows are rate limited to 'rate' pps */
+       __u32 penalty_burst;
+};
+
+struct tc_sfb_xstats {
+       __u32 earlydrop;
+       __u32 penaltydrop;
+       __u32 bucketdrop;
+       __u32 queuedrop;
+       __u32 childdrop; /* drops in child qdisc */
+       __u32 marked;
+       __u32 maxqlen;
+       __u32 maxprob;
+       __u32 avgprob;
+};
+
+#define SFB_MAX_PROB 0xFFFF
+
+/* QFQ */
+enum {
+       TCA_QFQ_UNSPEC,
+       TCA_QFQ_WEIGHT,
+       TCA_QFQ_LMAX,
+       __TCA_QFQ_MAX
+};
+
+#define TCA_QFQ_MAX    (__TCA_QFQ_MAX - 1)
+
+struct tc_qfq_stats {
+       __u32 weight;
+       __u32 lmax;
+};
+
+/* CODEL */
+
+enum {
+       TCA_CODEL_UNSPEC,
+       TCA_CODEL_TARGET,
+       TCA_CODEL_LIMIT,
+       TCA_CODEL_INTERVAL,
+       TCA_CODEL_ECN,
+       TCA_CODEL_CE_THRESHOLD,
+       __TCA_CODEL_MAX
+};
+
+#define TCA_CODEL_MAX  (__TCA_CODEL_MAX - 1)
+
+struct tc_codel_xstats {
+       __u32   maxpacket; /* largest packet we've seen so far */
+       __u32   count;     /* how many drops we've done since the last time we
+                           * entered dropping state
+                           */
+       __u32   lastcount; /* count at entry to dropping state */
+       __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
+       __s32   drop_next; /* time to drop next packet */
+       __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
+       __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
+       __u32   dropping;  /* are we in dropping state ? */
+       __u32   ce_mark;   /* number of CE marked packets because of ce_threshold */
+};
+
+/* FQ_CODEL */
+
+enum {
+       TCA_FQ_CODEL_UNSPEC,
+       TCA_FQ_CODEL_TARGET,
+       TCA_FQ_CODEL_LIMIT,
+       TCA_FQ_CODEL_INTERVAL,
+       TCA_FQ_CODEL_ECN,
+       TCA_FQ_CODEL_FLOWS,
+       TCA_FQ_CODEL_QUANTUM,
+       TCA_FQ_CODEL_CE_THRESHOLD,
+       __TCA_FQ_CODEL_MAX
+};
+
+#define TCA_FQ_CODEL_MAX       (__TCA_FQ_CODEL_MAX - 1)
+
+enum {
+       TCA_FQ_CODEL_XSTATS_QDISC,
+       TCA_FQ_CODEL_XSTATS_CLASS,
+};
+
+struct tc_fq_codel_qd_stats {
+       __u32   maxpacket;      /* largest packet we've seen so far */
+       __u32   drop_overlimit; /* number of time max qdisc
+                                * packet limit was hit
+                                */
+       __u32   ecn_mark;       /* number of packets we ECN marked
+                                * instead of being dropped
+                                */
+       __u32   new_flow_count; /* number of time packets
+                                * created a 'new flow'
+                                */
+       __u32   new_flows_len;  /* count of flows in new list */
+       __u32   old_flows_len;  /* count of flows in old list */
+       __u32   ce_mark;        /* packets above ce_threshold */
+};
+
+struct tc_fq_codel_cl_stats {
+       __s32   deficit;
+       __u32   ldelay;         /* in-queue delay seen by most recently
+                                * dequeued packet
+                                */
+       __u32   count;
+       __u32   lastcount;
+       __u32   dropping;
+       __s32   drop_next;
+};
+
+struct tc_fq_codel_xstats {
+       __u32   type;
+       union {
+               struct tc_fq_codel_qd_stats qdisc_stats;
+               struct tc_fq_codel_cl_stats class_stats;
+       };
+};
+
+/* FQ */
+
+enum {
+       TCA_FQ_UNSPEC,
+
+       TCA_FQ_PLIMIT,          /* limit of total number of packets in queue */
+
+       TCA_FQ_FLOW_PLIMIT,     /* limit of packets per flow */
+
+       TCA_FQ_QUANTUM,         /* RR quantum */
+
+       TCA_FQ_INITIAL_QUANTUM,         /* RR quantum for new flow */
+
+       TCA_FQ_RATE_ENABLE,     /* enable/disable rate limiting */
+
+       TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
+
+       TCA_FQ_FLOW_MAX_RATE,   /* per flow max rate */
+
+       TCA_FQ_BUCKETS_LOG,     /* log2(number of buckets) */
+
+       TCA_FQ_FLOW_REFILL_DELAY,       /* flow credit refill delay in usec */
+
+       TCA_FQ_ORPHAN_MASK,     /* mask applied to orphaned skb hashes */
+
+       __TCA_FQ_MAX
+};
+
+#define TCA_FQ_MAX     (__TCA_FQ_MAX - 1)
+
+struct tc_fq_qd_stats {
+       __u64   gc_flows;
+       __u64   highprio_packets;
+       __u64   tcp_retrans;
+       __u64   throttled;
+       __u64   flows_plimit;
+       __u64   pkts_too_long;
+       __u64   allocation_errors;
+       __s64   time_next_delayed_flow;
+       __u32   flows;
+       __u32   inactive_flows;
+       __u32   throttled_flows;
+       __u32   pad;
+};
+
+/* Heavy-Hitter Filter */
+
+enum {
+       TCA_HHF_UNSPEC,
+       TCA_HHF_BACKLOG_LIMIT,
+       TCA_HHF_QUANTUM,
+       TCA_HHF_HH_FLOWS_LIMIT,
+       TCA_HHF_RESET_TIMEOUT,
+       TCA_HHF_ADMIT_BYTES,
+       TCA_HHF_EVICT_TIMEOUT,
+       TCA_HHF_NON_HH_WEIGHT,
+       __TCA_HHF_MAX
+};
+
+#define TCA_HHF_MAX    (__TCA_HHF_MAX - 1)
+
+struct tc_hhf_xstats {
+       __u32   drop_overlimit; /* number of times max qdisc packet limit
+                                * was hit
+                                */
+       __u32   hh_overlimit;   /* number of times max heavy-hitters was hit */
+       __u32   hh_tot_count;   /* number of captured heavy-hitters so far */
+       __u32   hh_cur_count;   /* number of current heavy-hitters */
+};
+
+/* PIE */
+enum {
+       TCA_PIE_UNSPEC,
+       TCA_PIE_TARGET,
+       TCA_PIE_LIMIT,
+       TCA_PIE_TUPDATE,
+       TCA_PIE_ALPHA,
+       TCA_PIE_BETA,
+       TCA_PIE_ECN,
+       TCA_PIE_BYTEMODE,
+       __TCA_PIE_MAX
+};
+#define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
+
+struct tc_pie_xstats {
+       __u32 prob;             /* current probability */
+       __u32 delay;            /* current delay in ms */
+       __u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */
+       __u32 packets_in;       /* total number of packets enqueued */
+       __u32 dropped;          /* packets dropped due to pie_action */
+       __u32 overlimit;        /* dropped due to lack of space in queue */
+       __u32 maxq;             /* maximum queue size */
+       __u32 ecn_mark;         /* packets marked with ecn*/
+};
+#endif
diff --git a/lib/libdss-include/include/linux/pktcdvd.h b/lib/libdss-include/include/linux/pktcdvd.h
new file mode 100644 (file)
index 0000000..7c31eb7
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2000 Jens Axboe <axboe@suse.de>
+ * Copyright (C) 2001-2004 Peter Osterlund <petero2@telia.com>
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * Packet writing layer for ATAPI and SCSI CD-R, CD-RW, DVD-R, and
+ * DVD-RW devices.
+ *
+ */
+#ifndef __PKTCDVD_H
+#define __PKTCDVD_H
+
+#include <linux/types.h>
+
+/*
+ * 1 for normal debug messages, 2 is very verbose. 0 to turn it off.
+ */
+#define PACKET_DEBUG           1
+
+#define        MAX_WRITERS             8
+
+#define PKT_RB_POOL_SIZE       512
+
+/*
+ * How long we should hold a non-full packet before starting data gathering.
+ */
+#define PACKET_WAIT_TIME       (HZ * 5 / 1000)
+
+/*
+ * use drive write caching -- we need deferred error handling to be
+ * able to successfully recover with this option (drive will return good
+ * status as soon as the cdb is validated).
+ */
+#if defined(CONFIG_CDROM_PKTCDVD_WCACHE)
+#define USE_WCACHING           1
+#else
+#define USE_WCACHING           0
+#endif
+
+/*
+ * No user-servicable parts beyond this point ->
+ */
+
+/*
+ * device types
+ */
+#define PACKET_CDR             1
+#define        PACKET_CDRW             2
+#define PACKET_DVDR            3
+#define PACKET_DVDRW           4
+
+/*
+ * flags
+ */
+#define PACKET_WRITABLE                1       /* pd is writable */
+#define PACKET_NWA_VALID       2       /* next writable address valid */
+#define PACKET_LRA_VALID       3       /* last recorded address valid */
+#define PACKET_MERGE_SEGS      4       /* perform segment merging to keep */
+                                       /* underlying cdrom device happy */
+
+/*
+ * Disc status -- from READ_DISC_INFO
+ */
+#define PACKET_DISC_EMPTY      0
+#define PACKET_DISC_INCOMPLETE 1
+#define PACKET_DISC_COMPLETE   2
+#define PACKET_DISC_OTHER      3
+
+/*
+ * write type, and corresponding data block type
+ */
+#define PACKET_MODE1           1
+#define PACKET_MODE2           2
+#define PACKET_BLOCK_MODE1     8
+#define PACKET_BLOCK_MODE2     10
+
+/*
+ * Last session/border status
+ */
+#define PACKET_SESSION_EMPTY           0
+#define PACKET_SESSION_INCOMPLETE      1
+#define PACKET_SESSION_RESERVED                2
+#define PACKET_SESSION_COMPLETE                3
+
+#define PACKET_MCN                     "4a656e734178626f65323030300000"
+
+#undef PACKET_USE_LS
+
+#define PKT_CTRL_CMD_SETUP     0
+#define PKT_CTRL_CMD_TEARDOWN  1
+#define PKT_CTRL_CMD_STATUS    2
+
+struct pkt_ctrl_command {
+       __u32 command;                          /* in: Setup, teardown, status */
+       __u32 dev_index;                        /* in/out: Device index */
+       __u32 dev;                              /* in/out: Device nr for cdrw device */
+       __u32 pkt_dev;                          /* in/out: Device nr for packet device */
+       __u32 num_devices;                      /* out: Largest device index + 1 */
+       __u32 padding;                          /* Not used */
+};
+
+/*
+ * packet ioctls
+ */
+#define PACKET_IOCTL_MAGIC     ('X')
+#define PACKET_CTRL_CMD                _IOWR(PACKET_IOCTL_MAGIC, 1, struct pkt_ctrl_command)
+
+
+#endif /* __PKTCDVD_H */
diff --git a/lib/libdss-include/include/linux/pmu.h b/lib/libdss-include/include/linux/pmu.h
new file mode 100644 (file)
index 0000000..12eccb4
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Definitions for talking to the PMU.  The PMU is a microcontroller
+ * which controls battery charging and system power on PowerBook 3400
+ * and 2400 models as well as the RTC and various other things.
+ *
+ * Copyright (C) 1998 Paul Mackerras.
+ */
+
+#ifndef _LINUX_PMU_H
+#define _LINUX_PMU_H
+
+#define PMU_DRIVER_VERSION     2
+
+/*
+ * PMU commands
+ */
+#define PMU_POWER_CTRL0                0x10    /* control power of some devices */
+#define PMU_POWER_CTRL         0x11    /* control power of some devices */
+#define PMU_ADB_CMD            0x20    /* send ADB packet */
+#define PMU_ADB_POLL_OFF       0x21    /* disable ADB auto-poll */
+#define PMU_WRITE_NVRAM                0x33    /* write non-volatile RAM */
+#define PMU_READ_NVRAM         0x3b    /* read non-volatile RAM */
+#define PMU_SET_RTC            0x30    /* set real-time clock */
+#define PMU_READ_RTC           0x38    /* read real-time clock */
+#define PMU_SET_VOLBUTTON      0x40    /* set volume up/down position */
+#define PMU_BACKLIGHT_BRIGHT   0x41    /* set backlight brightness */
+#define PMU_GET_VOLBUTTON      0x48    /* get volume up/down position */
+#define PMU_PCEJECT            0x4c    /* eject PC-card from slot */
+#define PMU_BATTERY_STATE      0x6b    /* report battery state etc. */
+#define PMU_SMART_BATTERY_STATE        0x6f    /* report battery state (new way) */
+#define PMU_SET_INTR_MASK      0x70    /* set PMU interrupt mask */
+#define PMU_INT_ACK            0x78    /* read interrupt bits */
+#define PMU_SHUTDOWN           0x7e    /* turn power off */
+#define PMU_CPU_SPEED          0x7d    /* control CPU speed on some models */
+#define PMU_SLEEP              0x7f    /* put CPU to sleep */
+#define PMU_POWER_EVENTS       0x8f    /* Send power-event commands to PMU */
+#define PMU_I2C_CMD            0x9a    /* I2C operations */
+#define PMU_RESET              0xd0    /* reset CPU */
+#define PMU_GET_BRIGHTBUTTON   0xd9    /* report brightness up/down pos */
+#define PMU_GET_COVER          0xdc    /* report cover open/closed */
+#define PMU_SYSTEM_READY       0xdf    /* tell PMU we are awake */
+#define PMU_GET_VERSION                0xea    /* read the PMU version */
+
+/* Bits to use with the PMU_POWER_CTRL0 command */
+#define PMU_POW0_ON            0x80    /* OR this to power ON the device */
+#define PMU_POW0_OFF           0x00    /* leave bit 7 to 0 to power it OFF */
+#define PMU_POW0_HARD_DRIVE    0x04    /* Hard drive power (on wallstreet/lombard ?) */
+
+/* Bits to use with the PMU_POWER_CTRL command */
+#define PMU_POW_ON             0x80    /* OR this to power ON the device */
+#define PMU_POW_OFF            0x00    /* leave bit 7 to 0 to power it OFF */
+#define PMU_POW_BACKLIGHT      0x01    /* backlight power */
+#define PMU_POW_CHARGER                0x02    /* battery charger power */
+#define PMU_POW_IRLED          0x04    /* IR led power (on wallstreet) */
+#define PMU_POW_MEDIABAY       0x08    /* media bay power (wallstreet/lombard ?) */
+
+/* Bits in PMU interrupt and interrupt mask bytes */
+#define PMU_INT_PCEJECT                0x04    /* PC-card eject buttons */
+#define PMU_INT_SNDBRT         0x08    /* sound/brightness up/down buttons */
+#define PMU_INT_ADB            0x10    /* ADB autopoll or reply data */
+#define PMU_INT_BATTERY                0x20    /* Battery state change */
+#define PMU_INT_ENVIRONMENT    0x40    /* Environment interrupts */
+#define PMU_INT_TICK           0x80    /* 1-second tick interrupt */
+
+/* Other bits in PMU interrupt valid when PMU_INT_ADB is set */
+#define PMU_INT_ADB_AUTO       0x04    /* ADB autopoll, when PMU_INT_ADB */
+#define PMU_INT_WAITING_CHARGER        0x01    /* ??? */
+#define PMU_INT_AUTO_SRQ_POLL  0x02    /* ??? */
+
+/* Bits in the environement message (either obtained via PMU_GET_COVER,
+ * or via PMU_INT_ENVIRONMENT on core99 */
+#define PMU_ENV_LID_CLOSED     0x01    /* The lid is closed */
+
+/* I2C related definitions */
+#define PMU_I2C_MODE_SIMPLE    0
+#define PMU_I2C_MODE_STDSUB    1
+#define PMU_I2C_MODE_COMBINED  2
+
+#define PMU_I2C_BUS_STATUS     0
+#define PMU_I2C_BUS_SYSCLK     1
+#define PMU_I2C_BUS_POWER      2
+
+#define PMU_I2C_STATUS_OK      0
+#define PMU_I2C_STATUS_DATAREAD        1
+#define PMU_I2C_STATUS_BUSY    0xfe
+
+
+/* Kind of PMU (model) */
+enum {
+       PMU_UNKNOWN,
+       PMU_OHARE_BASED,        /* 2400, 3400, 3500 (old G3 powerbook) */
+       PMU_HEATHROW_BASED,     /* PowerBook G3 series */
+       PMU_PADDINGTON_BASED,   /* 1999 PowerBook G3 */
+       PMU_KEYLARGO_BASED,     /* Core99 motherboard (PMU99) */
+       PMU_68K_V1,             /* 68K PMU, version 1 */
+       PMU_68K_V2,             /* 68K PMU, version 2 */
+};
+
+/* PMU PMU_POWER_EVENTS commands */
+enum {
+       PMU_PWR_GET_POWERUP_EVENTS      = 0x00,
+       PMU_PWR_SET_POWERUP_EVENTS      = 0x01,
+       PMU_PWR_CLR_POWERUP_EVENTS      = 0x02,
+       PMU_PWR_GET_WAKEUP_EVENTS       = 0x03,
+       PMU_PWR_SET_WAKEUP_EVENTS       = 0x04,
+       PMU_PWR_CLR_WAKEUP_EVENTS       = 0x05,
+};
+
+/* Power events wakeup bits */
+enum {
+       PMU_PWR_WAKEUP_KEY              = 0x01, /* Wake on key press */
+       PMU_PWR_WAKEUP_AC_INSERT        = 0x02, /* Wake on AC adapter plug */
+       PMU_PWR_WAKEUP_AC_CHANGE        = 0x04,
+       PMU_PWR_WAKEUP_LID_OPEN         = 0x08,
+       PMU_PWR_WAKEUP_RING             = 0x10,
+};
+       
+/*
+ * Ioctl commands for the /dev/pmu device
+ */
+#include <linux/ioctl.h>
+
+/* no param */
+#define PMU_IOC_SLEEP          _IO('B', 0)
+/* out param: u32*     backlight value: 0 to 15 */
+#define PMU_IOC_GET_BACKLIGHT  _IOR('B', 1, size_t)
+/* in param: u32       backlight value: 0 to 15 */
+#define PMU_IOC_SET_BACKLIGHT  _IOW('B', 2, size_t)
+/* out param: u32*     PMU model */
+#define PMU_IOC_GET_MODEL      _IOR('B', 3, size_t)
+/* out param: u32*     has_adb: 0 or 1 */
+#define PMU_IOC_HAS_ADB                _IOR('B', 4, size_t) 
+/* out param: u32*     can_sleep: 0 or 1 */
+#define PMU_IOC_CAN_SLEEP      _IOR('B', 5, size_t) 
+/* no param, but historically was _IOR('B', 6, 0), meaning 4 bytes */
+#define PMU_IOC_GRAB_BACKLIGHT _IOR('B', 6, size_t) 
+
+
+#endif /* _LINUX_PMU_H */
diff --git a/lib/libdss-include/include/linux/poll.h b/lib/libdss-include/include/linux/poll.h
new file mode 100644 (file)
index 0000000..2001fed
--- /dev/null
@@ -0,0 +1 @@
+#include <asm/poll.h>
diff --git a/lib/libdss-include/include/linux/posix_types.h b/lib/libdss-include/include/linux/posix_types.h
new file mode 100644 (file)
index 0000000..988f76e
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _LINUX_POSIX_TYPES_H
+#define _LINUX_POSIX_TYPES_H
+
+#include <linux/stddef.h>
+
+/*
+ * This allows for 1024 file descriptors: if NR_OPEN is ever grown
+ * beyond that you'll have to change this too. But 1024 fd's seem to be
+ * enough even for such "real" unices like OSF/1, so hopefully this is
+ * one limit that doesn't have to be changed [again].
+ *
+ * Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in
+ * <sys/time.h> (and thus <linux/time.h>) - but this is a more logical
+ * place for them. Solved by having dummy defines in <sys/time.h>.
+ */
+
+/*
+ * This macro may have been defined in <gnu/types.h>. But we always
+ * use the one here.
+ */
+#undef __FD_SETSIZE
+#define __FD_SETSIZE   1024
+
+typedef struct {
+       unsigned long fds_bits[__FD_SETSIZE / (8 * sizeof(long))];
+} __kernel_fd_set;
+
+/* Type of a signal handler.  */
+typedef void (*__kernel_sighandler_t)(int);
+
+/* Type of a SYSV IPC key.  */
+typedef int __kernel_key_t;
+typedef int __kernel_mqd_t;
+
+#include <asm/posix_types.h>
+
+#endif /* _LINUX_POSIX_TYPES_H */
diff --git a/lib/libdss-include/include/linux/ppdev.h b/lib/libdss-include/include/linux/ppdev.h
new file mode 100644 (file)
index 0000000..dc18c5d
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * linux/include/linux/ppdev.h
+ *
+ * User-space parallel port device driver (header file).
+ *
+ * Copyright (C) 1998-9 Tim Waugh <tim@cyberelk.demon.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Added PPGETTIME/PPSETTIME, Fred Barnes, 1999
+ * Added PPGETMODES/PPGETMODE/PPGETPHASE, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001
+ */
+
+#define PP_IOCTL       'p'
+
+/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
+#define PPSETMODE      _IOW(PP_IOCTL, 0x80, int)
+
+/* Read status */
+#define PPRSTATUS      _IOR(PP_IOCTL, 0x81, unsigned char)
+#define PPWSTATUS      OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
+
+/* Read/write control */
+#define PPRCONTROL     _IOR(PP_IOCTL, 0x83, unsigned char)
+#define PPWCONTROL     _IOW(PP_IOCTL, 0x84, unsigned char)
+
+struct ppdev_frob_struct {
+       unsigned char mask;
+       unsigned char val;
+};
+#define PPFCONTROL      _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct)
+
+/* Read/write data */
+#define PPRDATA                _IOR(PP_IOCTL, 0x85, unsigned char)
+#define PPWDATA                _IOW(PP_IOCTL, 0x86, unsigned char)
+
+/* Read/write econtrol (not used) */
+#define PPRECONTROL    OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char)
+#define PPWECONTROL    OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char)
+
+/* Read/write FIFO (not used) */
+#define PPRFIFO                OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char)
+#define PPWFIFO                OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char)
+
+/* Claim the port to start using it */
+#define PPCLAIM                _IO(PP_IOCTL, 0x8b)
+
+/* Release the port when you aren't using it */
+#define PPRELEASE      _IO(PP_IOCTL, 0x8c)
+
+/* Yield the port (release it if another driver is waiting,
+ * then reclaim) */
+#define PPYIELD                _IO(PP_IOCTL, 0x8d)
+
+/* Register device exclusively (must be before PPCLAIM). */
+#define PPEXCL         _IO(PP_IOCTL, 0x8f)
+
+/* Data line direction: non-zero for input mode. */
+#define PPDATADIR      _IOW(PP_IOCTL, 0x90, int)
+
+/* Negotiate a particular IEEE 1284 mode. */
+#define PPNEGOT                _IOW(PP_IOCTL, 0x91, int)
+
+/* Set control lines when an interrupt occurs. */
+#define PPWCTLONIRQ    _IOW(PP_IOCTL, 0x92, unsigned char)
+
+/* Clear (and return) interrupt count. */
+#define PPCLRIRQ       _IOR(PP_IOCTL, 0x93, int)
+
+/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
+#define PPSETPHASE     _IOW(PP_IOCTL, 0x94, int)
+
+/* Set and get port timeout (struct timeval's) */
+#define PPGETTIME      _IOR(PP_IOCTL, 0x95, struct timeval)
+#define PPSETTIME      _IOW(PP_IOCTL, 0x96, struct timeval)
+
+/* Get available modes (what the hardware can do) */
+#define PPGETMODES     _IOR(PP_IOCTL, 0x97, unsigned int)
+
+/* Get the current mode and phaze */
+#define PPGETMODE      _IOR(PP_IOCTL, 0x98, int)
+#define PPGETPHASE     _IOR(PP_IOCTL, 0x99, int)
+
+/* get/set flags */
+#define PPGETFLAGS     _IOR(PP_IOCTL, 0x9a, int)
+#define PPSETFLAGS     _IOW(PP_IOCTL, 0x9b, int)
+
+/* flags visible to the world */
+#define PP_FASTWRITE   (1<<2)
+#define PP_FASTREAD    (1<<3)
+#define PP_W91284PIC   (1<<4)
+
+/* only masks user-visible flags */
+#define PP_FLAGMASK    (PP_FASTWRITE | PP_FASTREAD | PP_W91284PIC)
+
+
diff --git a/lib/libdss-include/include/linux/ppp-comp.h b/lib/libdss-include/include/linux/ppp-comp.h
new file mode 100644 (file)
index 0000000..e16dead
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * ppp-comp.h - Definitions for doing PPP packet compression.
+ *
+ * Copyright 1994-1998 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#ifndef _NET_PPP_COMP_H
+#define _NET_PPP_COMP_H
+
+
+/*
+ * CCP codes.
+ */
+
+#define CCP_CONFREQ    1
+#define CCP_CONFACK    2
+#define CCP_TERMREQ    5
+#define CCP_TERMACK    6
+#define CCP_RESETREQ   14
+#define CCP_RESETACK   15
+
+/*
+ * Max # bytes for a CCP option
+ */
+
+#define CCP_MAX_OPTION_LENGTH  32
+
+/*
+ * Parts of a CCP packet.
+ */
+
+#define CCP_CODE(dp)           ((dp)[0])
+#define CCP_ID(dp)             ((dp)[1])
+#define CCP_LENGTH(dp)         (((dp)[2] << 8) + (dp)[3])
+#define CCP_HDRLEN             4
+
+#define CCP_OPT_CODE(dp)       ((dp)[0])
+#define CCP_OPT_LENGTH(dp)     ((dp)[1])
+#define CCP_OPT_MINLEN         2
+
+/*
+ * Definitions for BSD-Compress.
+ */
+
+#define CI_BSD_COMPRESS                21      /* config. option for BSD-Compress */
+#define CILEN_BSD_COMPRESS     3       /* length of config. option */
+
+/* Macros for handling the 3rd byte of the BSD-Compress config option. */
+#define BSD_NBITS(x)           ((x) & 0x1F)    /* number of bits requested */
+#define BSD_VERSION(x)         ((x) >> 5)      /* version of option format */
+#define BSD_CURRENT_VERSION    1               /* current version number */
+#define BSD_MAKE_OPT(v, n)     (((v) << 5) | (n))
+
+#define BSD_MIN_BITS           9       /* smallest code size supported */
+#define BSD_MAX_BITS           15      /* largest code size supported */
+
+/*
+ * Definitions for Deflate.
+ */
+
+#define CI_DEFLATE             26      /* config option for Deflate */
+#define CI_DEFLATE_DRAFT       24      /* value used in original draft RFC */
+#define CILEN_DEFLATE          4       /* length of its config option */
+
+#define DEFLATE_MIN_SIZE       9
+#define DEFLATE_MAX_SIZE       15
+#define DEFLATE_METHOD_VAL     8
+#define DEFLATE_SIZE(x)                (((x) >> 4) + 8)
+#define DEFLATE_METHOD(x)      ((x) & 0x0F)
+#define DEFLATE_MAKE_OPT(w)    ((((w) - 8) << 4) + DEFLATE_METHOD_VAL)
+#define DEFLATE_CHK_SEQUENCE   0
+
+/*
+ * Definitions for MPPE.
+ */
+
+#define CI_MPPE                18      /* config option for MPPE */
+#define CILEN_MPPE              6      /* length of config option */
+
+/*
+ * Definitions for other, as yet unsupported, compression methods.
+ */
+
+#define CI_PREDICTOR_1         1       /* config option for Predictor-1 */
+#define CILEN_PREDICTOR_1      2       /* length of its config option */
+#define CI_PREDICTOR_2         2       /* config option for Predictor-2 */
+#define CILEN_PREDICTOR_2      2       /* length of its config option */
+
+
+#endif /* _NET_PPP_COMP_H */
diff --git a/lib/libdss-include/include/linux/ppp-ioctl.h b/lib/libdss-include/include/linux/ppp-ioctl.h
new file mode 100644 (file)
index 0000000..62ccaa6
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * ppp-ioctl.h - PPP ioctl definitions.
+ *
+ * Copyright 1999-2002 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#ifndef _PPP_IOCTL_H
+#define _PPP_IOCTL_H
+
+#include <linux/types.h>
+
+#include <linux/ppp_defs.h>
+
+/*
+ * Bit definitions for flags argument to PPPIOCGFLAGS/PPPIOCSFLAGS.
+ */
+#define SC_COMP_PROT   0x00000001      /* protocol compression (output) */
+#define SC_COMP_AC     0x00000002      /* header compression (output) */
+#define        SC_COMP_TCP     0x00000004      /* TCP (VJ) compression (output) */
+#define SC_NO_TCP_CCID 0x00000008      /* disable VJ connection-id comp. */
+#define SC_REJ_COMP_AC 0x00000010      /* reject adrs/ctrl comp. on input */
+#define SC_REJ_COMP_TCP        0x00000020      /* reject TCP (VJ) comp. on input */
+#define SC_CCP_OPEN    0x00000040      /* Look at CCP packets */
+#define SC_CCP_UP      0x00000080      /* May send/recv compressed packets */
+#define SC_ENABLE_IP   0x00000100      /* IP packets may be exchanged */
+#define SC_LOOP_TRAFFIC        0x00000200      /* send traffic to pppd */
+#define SC_MULTILINK   0x00000400      /* do multilink encapsulation */
+#define SC_MP_SHORTSEQ 0x00000800      /* use short MP sequence numbers */
+#define SC_COMP_RUN    0x00001000      /* compressor has been inited */
+#define SC_DECOMP_RUN  0x00002000      /* decompressor has been inited */
+#define SC_MP_XSHORTSEQ        0x00004000      /* transmit short MP seq numbers */
+#define SC_DEBUG       0x00010000      /* enable debug messages */
+#define SC_LOG_INPKT   0x00020000      /* log contents of good pkts recvd */
+#define SC_LOG_OUTPKT  0x00040000      /* log contents of pkts sent */
+#define SC_LOG_RAWIN   0x00080000      /* log all chars received */
+#define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
+#define        SC_SYNC         0x00200000      /* synchronous serial mode */
+#define        SC_MUST_COMP    0x00400000      /* no uncompressed packets may be sent or received */
+#define        SC_MASK         0x0f600fff      /* bits that user can change */
+
+/* state bits */
+#define SC_XMIT_BUSY   0x10000000      /* (used by isdn_ppp?) */
+#define SC_RCV_ODDP    0x08000000      /* have rcvd char with odd parity */
+#define SC_RCV_EVNP    0x04000000      /* have rcvd char with even parity */
+#define SC_RCV_B7_1    0x02000000      /* have rcvd char with bit 7 = 1 */
+#define SC_RCV_B7_0    0x01000000      /* have rcvd char with bit 7 = 0 */
+#define SC_DC_FERROR   0x00800000      /* fatal decomp error detected */
+#define SC_DC_ERROR    0x00400000      /* non-fatal decomp error detected */
+
+/* Used with PPPIOCGNPMODE/PPPIOCSNPMODE */
+struct npioctl {
+       int             protocol;       /* PPP protocol, e.g. PPP_IP */
+       enum NPmode     mode;
+};
+
+/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
+struct ppp_option_data {
+       __u8    *ptr;
+       __u32   length;
+       int     transmit;
+};
+
+/* For PPPIOCGL2TPSTATS */
+struct pppol2tp_ioc_stats {
+       __u16           tunnel_id;      /* redundant */
+       __u16           session_id;     /* if zero, get tunnel stats */
+       __u32           using_ipsec:1;  /* valid only for session_id == 0 */
+       __aligned_u64   tx_packets;
+       __aligned_u64   tx_bytes;
+       __aligned_u64   tx_errors;
+       __aligned_u64   rx_packets;
+       __aligned_u64   rx_bytes;
+       __aligned_u64   rx_seq_discards;
+       __aligned_u64   rx_oos_packets;
+       __aligned_u64   rx_errors;
+};
+
+/*
+ * Ioctl definitions.
+ */
+
+#define        PPPIOCGFLAGS    _IOR('t', 90, int)      /* get configuration flags */
+#define        PPPIOCSFLAGS    _IOW('t', 89, int)      /* set configuration flags */
+#define        PPPIOCGASYNCMAP _IOR('t', 88, int)      /* get async map */
+#define        PPPIOCSASYNCMAP _IOW('t', 87, int)      /* set async map */
+#define        PPPIOCGUNIT     _IOR('t', 86, int)      /* get ppp unit number */
+#define        PPPIOCGRASYNCMAP _IOR('t', 85, int)     /* get receive async map */
+#define        PPPIOCSRASYNCMAP _IOW('t', 84, int)     /* set receive async map */
+#define        PPPIOCGMRU      _IOR('t', 83, int)      /* get max receive unit */
+#define        PPPIOCSMRU      _IOW('t', 82, int)      /* set max receive unit */
+#define        PPPIOCSMAXCID   _IOW('t', 81, int)      /* set VJ max slot ID */
+#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
+#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
+#define PPPIOCXFERUNIT _IO('t', 78)            /* transfer PPP unit */
+#define PPPIOCSCOMPRESS        _IOW('t', 77, struct ppp_option_data)
+#define PPPIOCGNPMODE  _IOWR('t', 76, struct npioctl) /* get NP mode */
+#define PPPIOCSNPMODE  _IOW('t', 75, struct npioctl)  /* set NP mode */
+#define PPPIOCSPASS    _IOW('t', 71, struct sock_fprog) /* set pass filter */
+#define PPPIOCSACTIVE  _IOW('t', 70, struct sock_fprog) /* set active filt */
+#define PPPIOCGDEBUG   _IOR('t', 65, int)      /* Read debug level */
+#define PPPIOCSDEBUG   _IOW('t', 64, int)      /* Set debug level */
+#define PPPIOCGIDLE    _IOR('t', 63, struct ppp_idle) /* get idle time */
+#define PPPIOCNEWUNIT  _IOWR('t', 62, int)     /* create new ppp unit */
+#define PPPIOCATTACH   _IOW('t', 61, int)      /* attach to ppp unit */
+#define PPPIOCDETACH   _IOW('t', 60, int)      /* detach from ppp unit/chan */
+#define PPPIOCSMRRU    _IOW('t', 59, int)      /* set multilink MRU */
+#define PPPIOCCONNECT  _IOW('t', 58, int)      /* connect channel to unit */
+#define PPPIOCDISCONN  _IO('t', 57)            /* disconnect channel */
+#define PPPIOCATTCHAN  _IOW('t', 56, int)      /* attach to ppp channel */
+#define PPPIOCGCHAN    _IOR('t', 55, int)      /* get ppp channel number */
+#define PPPIOCGL2TPSTATS _IOR('t', 54, struct pppol2tp_ioc_stats)
+
+#define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0)
+#define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)   /* NEVER change this!! */
+#define SIOCGPPPCSTATS  (SIOCDEVPRIVATE + 2)
+
+#endif /* _PPP_IOCTL_H */
diff --git a/lib/libdss-include/include/linux/ppp_defs.h b/lib/libdss-include/include/linux/ppp_defs.h
new file mode 100644 (file)
index 0000000..096dd5c
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * ppp_defs.h - PPP definitions.
+ *
+ * Copyright 1994-2000 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#include <linux/types.h>
+
+#ifndef _PPP_DEFS_H_
+#define _PPP_DEFS_H_
+
+/*
+ * The basic PPP frame.
+ */
+#define PPP_HDRLEN     4       /* octets for standard ppp header */
+#define PPP_FCSLEN     2       /* octets for FCS */
+#define PPP_MRU                1500    /* default MRU = max length of info field */
+
+#define PPP_ADDRESS(p) (((__u8 *)(p))[0])
+#define PPP_CONTROL(p) (((__u8 *)(p))[1])
+#define PPP_PROTOCOL(p)        ((((__u8 *)(p))[2] << 8) + ((__u8 *)(p))[3])
+
+/*
+ * Significant octet values.
+ */
+#define        PPP_ALLSTATIONS 0xff    /* All-Stations broadcast address */
+#define        PPP_UI          0x03    /* Unnumbered Information */
+#define        PPP_FLAG        0x7e    /* Flag Sequence */
+#define        PPP_ESCAPE      0x7d    /* Asynchronous Control Escape */
+#define        PPP_TRANS       0x20    /* Asynchronous transparency modifier */
+
+/*
+ * Protocol field values.
+ */
+#define PPP_IP         0x21    /* Internet Protocol */
+#define PPP_AT         0x29    /* AppleTalk Protocol */
+#define PPP_IPX                0x2b    /* IPX protocol */
+#define        PPP_VJC_COMP    0x2d    /* VJ compressed TCP */
+#define        PPP_VJC_UNCOMP  0x2f    /* VJ uncompressed TCP */
+#define PPP_MP         0x3d    /* Multilink protocol */
+#define PPP_IPV6       0x57    /* Internet Protocol Version 6 */
+#define PPP_COMPFRAG   0xfb    /* fragment compressed below bundle */
+#define PPP_COMP       0xfd    /* compressed packet */
+#define PPP_MPLS_UC    0x0281  /* Multi Protocol Label Switching - Unicast */
+#define PPP_MPLS_MC    0x0283  /* Multi Protocol Label Switching - Multicast */
+#define PPP_IPCP       0x8021  /* IP Control Protocol */
+#define PPP_ATCP       0x8029  /* AppleTalk Control Protocol */
+#define PPP_IPXCP      0x802b  /* IPX Control Protocol */
+#define PPP_IPV6CP     0x8057  /* IPv6 Control Protocol */
+#define PPP_CCPFRAG    0x80fb  /* CCP at link level (below MP bundle) */
+#define PPP_CCP                0x80fd  /* Compression Control Protocol */
+#define PPP_MPLSCP     0x80fd  /* MPLS Control Protocol */
+#define PPP_LCP                0xc021  /* Link Control Protocol */
+#define PPP_PAP                0xc023  /* Password Authentication Protocol */
+#define PPP_LQR                0xc025  /* Link Quality Report protocol */
+#define PPP_CHAP       0xc223  /* Cryptographic Handshake Auth. Protocol */
+#define PPP_CBCP       0xc029  /* Callback Control Protocol */
+
+/*
+ * Values for FCS calculations.
+ */
+
+#define PPP_INITFCS    0xffff  /* Initial FCS value */
+#define PPP_GOODFCS    0xf0b8  /* Good final FCS value */
+
+
+/*
+ * Extended asyncmap - allows any character to be escaped.
+ */
+
+typedef __u32          ext_accm[8];
+
+/*
+ * What to do with network protocol (NP) packets.
+ */
+enum NPmode {
+    NPMODE_PASS,               /* pass the packet through */
+    NPMODE_DROP,               /* silently drop the packet */
+    NPMODE_ERROR,              /* return an error */
+    NPMODE_QUEUE               /* save it up for later. */
+};
+
+/*
+ * Statistics for LQRP and pppstats
+ */
+struct pppstat {
+    __u32      ppp_discards;   /* # frames discarded */
+
+    __u32      ppp_ibytes;     /* bytes received */
+    __u32      ppp_ioctects;   /* bytes received not in error */
+    __u32      ppp_ipackets;   /* packets received */
+    __u32      ppp_ierrors;    /* receive errors */
+    __u32      ppp_ilqrs;      /* # LQR frames received */
+
+    __u32      ppp_obytes;     /* raw bytes sent */
+    __u32      ppp_ooctects;   /* frame bytes sent */
+    __u32      ppp_opackets;   /* packets sent */
+    __u32      ppp_oerrors;    /* transmit errors */ 
+    __u32      ppp_olqrs;      /* # LQR frames sent */
+};
+
+struct vjstat {
+    __u32      vjs_packets;    /* outbound packets */
+    __u32      vjs_compressed; /* outbound compressed packets */
+    __u32      vjs_searches;   /* searches for connection state */
+    __u32      vjs_misses;     /* times couldn't find conn. state */
+    __u32      vjs_uncompressedin; /* inbound uncompressed packets */
+    __u32      vjs_compressedin;   /* inbound compressed packets */
+    __u32      vjs_errorin;    /* inbound unknown type packets */
+    __u32      vjs_tossed;     /* inbound packets tossed because of error */
+};
+
+struct compstat {
+    __u32      unc_bytes;      /* total uncompressed bytes */
+    __u32      unc_packets;    /* total uncompressed packets */
+    __u32      comp_bytes;     /* compressed bytes */
+    __u32      comp_packets;   /* compressed packets */
+    __u32      inc_bytes;      /* incompressible bytes */
+    __u32      inc_packets;    /* incompressible packets */
+
+    /* the compression ratio is defined as in_count / bytes_out */
+    __u32       in_count;      /* Bytes received */
+    __u32       bytes_out;     /* Bytes transmitted */
+
+    double     ratio;          /* not computed in kernel. */
+};
+
+struct ppp_stats {
+    struct pppstat     p;      /* basic PPP statistics */
+    struct vjstat      vj;     /* VJ header compression statistics */
+};
+
+struct ppp_comp_stats {
+    struct compstat    c;      /* packet compression statistics */
+    struct compstat    d;      /* packet decompression statistics */
+};
+
+/*
+ * The following structure records the time in seconds since
+ * the last NP packet was sent or received.
+ */
+struct ppp_idle {
+    __kernel_time_t xmit_idle; /* time since last NP packet sent */
+    __kernel_time_t recv_idle; /* time since last NP packet received */
+};
+
+#endif /* _PPP_DEFS_H_ */
diff --git a/lib/libdss-include/include/linux/pps.h b/lib/libdss-include/include/linux/pps.h
new file mode 100644 (file)
index 0000000..a9bb1d9
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * PPS API header
+ *
+ * Copyright (C) 2005-2009   Rodolfo Giometti <giometti@linux.it>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef _PPS_H_
+#define _PPS_H_
+
+#include <linux/types.h>
+
+#define PPS_VERSION            "5.3.6"
+#define PPS_MAX_SOURCES                16              /* should be enough... */
+
+/* Implementation note: the logical states ``assert'' and ``clear''
+ * are implemented in terms of the chip register, i.e. ``assert''
+ * means the bit is set.  */
+
+/*
+ * 3.2 New data structures
+ */
+
+#define PPS_API_VERS_1         1
+#define PPS_API_VERS           PPS_API_VERS_1  /* we use API version 1 */
+#define PPS_MAX_NAME_LEN       32
+
+/* 32-bit vs. 64-bit compatibility.
+ *
+ * 0n i386, the alignment of a uint64_t is only 4 bytes, while on most other
+ * architectures it's 8 bytes. On i386, there will be no padding between the
+ * two consecutive 'struct pps_ktime' members of struct pps_kinfo and struct
+ * pps_kparams. But on most platforms there will be padding to ensure correct
+ * alignment.
+ *
+ * The simple fix is probably to add an explicit padding.
+ *                                                     [David Woodhouse]
+ */
+struct pps_ktime {
+       __s64 sec;
+       __s32 nsec;
+       __u32 flags;
+};
+#define PPS_TIME_INVALID       (1<<0)  /* used to specify timeout==NULL */
+
+struct pps_kinfo {
+       __u32 assert_sequence;          /* seq. num. of assert event */
+       __u32 clear_sequence;           /* seq. num. of clear event */
+       struct pps_ktime assert_tu;     /* time of assert event */
+       struct pps_ktime clear_tu;      /* time of clear event */
+       int current_mode;               /* current mode bits */
+};
+
+struct pps_kparams {
+       int api_version;                /* API version # */
+       int mode;                       /* mode bits */
+       struct pps_ktime assert_off_tu; /* offset compensation for assert */
+       struct pps_ktime clear_off_tu;  /* offset compensation for clear */
+};
+
+/*
+ * 3.3 Mode bit definitions
+ */
+
+/* Device/implementation parameters */
+#define PPS_CAPTUREASSERT      0x01    /* capture assert events */
+#define PPS_CAPTURECLEAR       0x02    /* capture clear events */
+#define PPS_CAPTUREBOTH                0x03    /* capture assert and clear events */
+
+#define PPS_OFFSETASSERT       0x10    /* apply compensation for assert ev. */
+#define PPS_OFFSETCLEAR                0x20    /* apply compensation for clear ev. */
+
+#define PPS_CANWAIT            0x100   /* can we wait for an event? */
+#define PPS_CANPOLL            0x200   /* bit reserved for future use */
+
+/* Kernel actions */
+#define PPS_ECHOASSERT         0x40    /* feed back assert event to output */
+#define PPS_ECHOCLEAR          0x80    /* feed back clear event to output */
+
+/* Timestamp formats */
+#define PPS_TSFMT_TSPEC                0x1000  /* select timespec format */
+#define PPS_TSFMT_NTPFP                0x2000  /* select NTP format */
+
+/*
+ * 3.4.4 New functions: disciplining the kernel timebase
+ */
+
+/* Kernel consumers */
+#define PPS_KC_HARDPPS         0       /* hardpps() (or equivalent) */
+#define PPS_KC_HARDPPS_PLL     1       /* hardpps() constrained to
+                                          use a phase-locked loop */
+#define PPS_KC_HARDPPS_FLL     2       /* hardpps() constrained to
+                                          use a frequency-locked loop */
+/*
+ * Here begins the implementation-specific part!
+ */
+
+struct pps_fdata {
+       struct pps_kinfo info;
+       struct pps_ktime timeout;
+};
+
+struct pps_bind_args {
+       int tsformat;   /* format of time stamps */
+       int edge;       /* selected event type */
+       int consumer;   /* selected kernel consumer */
+};
+
+#include <linux/ioctl.h>
+
+#define PPS_GETPARAMS          _IOR('p', 0xa1, struct pps_kparams *)
+#define PPS_SETPARAMS          _IOW('p', 0xa2, struct pps_kparams *)
+#define PPS_GETCAP             _IOR('p', 0xa3, int *)
+#define PPS_FETCH              _IOWR('p', 0xa4, struct pps_fdata *)
+#define PPS_KC_BIND            _IOW('p', 0xa5, struct pps_bind_args *)
+
+#endif /* _PPS_H_ */
diff --git a/lib/libdss-include/include/linux/prctl.h b/lib/libdss-include/include/linux/prctl.h
new file mode 100644 (file)
index 0000000..a8d0759
--- /dev/null
@@ -0,0 +1,200 @@
+#ifndef _LINUX_PRCTL_H
+#define _LINUX_PRCTL_H
+
+#include <linux/types.h>
+
+/* Values to pass as first argument to prctl() */
+
+#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */
+#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
+
+/* Get/set current->mm->dumpable */
+#define PR_GET_DUMPABLE   3
+#define PR_SET_DUMPABLE   4
+
+/* Get/set unaligned access control bits (if meaningful) */
+#define PR_GET_UNALIGN   5
+#define PR_SET_UNALIGN   6
+# define PR_UNALIGN_NOPRINT    1       /* silently fix up unaligned user accesses */
+# define PR_UNALIGN_SIGBUS     2       /* generate SIGBUS on unaligned user access */
+
+/* Get/set whether or not to drop capabilities on setuid() away from
+ * uid 0 (as per security/commoncap.c) */
+#define PR_GET_KEEPCAPS   7
+#define PR_SET_KEEPCAPS   8
+
+/* Get/set floating-point emulation control bits (if meaningful) */
+#define PR_GET_FPEMU  9
+#define PR_SET_FPEMU 10
+# define PR_FPEMU_NOPRINT      1       /* silently emulate fp operations accesses */
+# define PR_FPEMU_SIGFPE       2       /* don't emulate fp operations, send SIGFPE instead */
+
+/* Get/set floating-point exception mode (if meaningful) */
+#define PR_GET_FPEXC   11
+#define PR_SET_FPEXC   12
+# define PR_FP_EXC_SW_ENABLE   0x80    /* Use FPEXC for FP exception enables */
+# define PR_FP_EXC_DIV         0x010000        /* floating point divide by zero */
+# define PR_FP_EXC_OVF         0x020000        /* floating point overflow */
+# define PR_FP_EXC_UND         0x040000        /* floating point underflow */
+# define PR_FP_EXC_RES         0x080000        /* floating point inexact result */
+# define PR_FP_EXC_INV         0x100000        /* floating point invalid operation */
+# define PR_FP_EXC_DISABLED    0       /* FP exceptions disabled */
+# define PR_FP_EXC_NONRECOV    1       /* async non-recoverable exc. mode */
+# define PR_FP_EXC_ASYNC       2       /* async recoverable exception mode */
+# define PR_FP_EXC_PRECISE     3       /* precise exception mode */
+
+/* Get/set whether we use statistical process timing or accurate timestamp
+ * based process timing */
+#define PR_GET_TIMING   13
+#define PR_SET_TIMING   14
+# define PR_TIMING_STATISTICAL  0       /* Normal, traditional,
+                                                   statistical process timing */
+# define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
+                                                   process timing */
+
+#define PR_SET_NAME    15              /* Set process name */
+#define PR_GET_NAME    16              /* Get process name */
+
+/* Get/set process endian */
+#define PR_GET_ENDIAN  19
+#define PR_SET_ENDIAN  20
+# define PR_ENDIAN_BIG         0
+# define PR_ENDIAN_LITTLE      1       /* True little endian mode */
+# define PR_ENDIAN_PPC_LITTLE  2       /* "PowerPC" pseudo little endian */
+
+/* Get/set process seccomp mode */
+#define PR_GET_SECCOMP 21
+#define PR_SET_SECCOMP 22
+
+/* Get/set the capability bounding set (as per security/commoncap.c) */
+#define PR_CAPBSET_READ 23
+#define PR_CAPBSET_DROP 24
+
+/* Get/set the process' ability to use the timestamp counter instruction */
+#define PR_GET_TSC 25
+#define PR_SET_TSC 26
+# define PR_TSC_ENABLE         1       /* allow the use of the timestamp counter */
+# define PR_TSC_SIGSEGV                2       /* throw a SIGSEGV instead of reading the TSC */
+
+/* Get/set securebits (as per security/commoncap.c) */
+#define PR_GET_SECUREBITS 27
+#define PR_SET_SECUREBITS 28
+
+/*
+ * Get/set the timerslack as used by poll/select/nanosleep
+ * A value of 0 means "use default"
+ */
+#define PR_SET_TIMERSLACK 29
+#define PR_GET_TIMERSLACK 30
+
+#define PR_TASK_PERF_EVENTS_DISABLE            31
+#define PR_TASK_PERF_EVENTS_ENABLE             32
+
+/*
+ * Set early/late kill mode for hwpoison memory corruption.
+ * This influences when the process gets killed on a memory corruption.
+ */
+#define PR_MCE_KILL    33
+# define PR_MCE_KILL_CLEAR   0
+# define PR_MCE_KILL_SET     1
+
+# define PR_MCE_KILL_LATE    0
+# define PR_MCE_KILL_EARLY   1
+# define PR_MCE_KILL_DEFAULT 2
+
+#define PR_MCE_KILL_GET 34
+
+/*
+ * Tune up process memory map specifics.
+ */
+#define PR_SET_MM              35
+# define PR_SET_MM_START_CODE          1
+# define PR_SET_MM_END_CODE            2
+# define PR_SET_MM_START_DATA          3
+# define PR_SET_MM_END_DATA            4
+# define PR_SET_MM_START_STACK         5
+# define PR_SET_MM_START_BRK           6
+# define PR_SET_MM_BRK                 7
+# define PR_SET_MM_ARG_START           8
+# define PR_SET_MM_ARG_END             9
+# define PR_SET_MM_ENV_START           10
+# define PR_SET_MM_ENV_END             11
+# define PR_SET_MM_AUXV                        12
+# define PR_SET_MM_EXE_FILE            13
+# define PR_SET_MM_MAP                 14
+# define PR_SET_MM_MAP_SIZE            15
+
+/*
+ * This structure provides new memory descriptor
+ * map which mostly modifies /proc/pid/stat[m]
+ * output for a task. This mostly done in a
+ * sake of checkpoint/restore functionality.
+ */
+struct prctl_mm_map {
+       __u64   start_code;             /* code section bounds */
+       __u64   end_code;
+       __u64   start_data;             /* data section bounds */
+       __u64   end_data;
+       __u64   start_brk;              /* heap for brk() syscall */
+       __u64   brk;
+       __u64   start_stack;            /* stack starts at */
+       __u64   arg_start;              /* command line arguments bounds */
+       __u64   arg_end;
+       __u64   env_start;              /* environment variables bounds */
+       __u64   env_end;
+       __u64   *auxv;                  /* auxiliary vector */
+       __u32   auxv_size;              /* vector size */
+       __u32   exe_fd;                 /* /proc/$pid/exe link file */
+};
+
+/*
+ * Set specific pid that is allowed to ptrace the current task.
+ * A value of 0 mean "no process".
+ */
+#define PR_SET_PTRACER 0x59616d61
+# define PR_SET_PTRACER_ANY ((unsigned long)-1)
+
+#define PR_SET_CHILD_SUBREAPER 36
+#define PR_GET_CHILD_SUBREAPER 37
+
+/*
+ * If no_new_privs is set, then operations that grant new privileges (i.e.
+ * execve) will either fail or not grant them.  This affects suid/sgid,
+ * file capabilities, and LSMs.
+ *
+ * Operations that merely manipulate or drop existing privileges (setresuid,
+ * capset, etc.) will still work.  Drop those privileges if you want them gone.
+ *
+ * Changing LSM security domain is considered a new privilege.  So, for example,
+ * asking selinux for a specific new context (e.g. with runcon) will result
+ * in execve returning -EPERM.
+ *
+ * See Documentation/prctl/no_new_privs.txt for more details.
+ */
+#define PR_SET_NO_NEW_PRIVS    38
+#define PR_GET_NO_NEW_PRIVS    39
+
+#define PR_GET_TID_ADDRESS     40
+
+#define PR_SET_THP_DISABLE     41
+#define PR_GET_THP_DISABLE     42
+
+/*
+ * Tell the kernel to start/stop helping userspace manage bounds tables.
+ */
+#define PR_MPX_ENABLE_MANAGEMENT  43
+#define PR_MPX_DISABLE_MANAGEMENT 44
+
+#define PR_SET_FP_MODE         45
+#define PR_GET_FP_MODE         46
+# define PR_FP_MODE_FR         (1 << 0)        /* 64b FP registers */
+# define PR_FP_MODE_FRE                (1 << 1)        /* 32b compatibility */
+
+/* Control the ambient capability set */
+#define PR_CAP_AMBIENT                 47
+# define PR_CAP_AMBIENT_IS_SET         1
+# define PR_CAP_AMBIENT_RAISE          2
+# define PR_CAP_AMBIENT_LOWER          3
+# define PR_CAP_AMBIENT_CLEAR_ALL      4
+
+#endif /* _LINUX_PRCTL_H */
diff --git a/lib/libdss-include/include/linux/psci.h b/lib/libdss-include/include/linux/psci.h
new file mode 100644 (file)
index 0000000..08d443f
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * ARM Power State and Coordination Interface (PSCI) header
+ *
+ * This header holds common PSCI defines and macros shared
+ * by: ARM kernel, ARM64 kernel, KVM ARM/ARM64 and user space.
+ *
+ * Copyright (C) 2014 Linaro Ltd.
+ * Author: Anup Patel <anup.patel@linaro.org>
+ */
+
+#ifndef _LINUX_PSCI_H
+#define _LINUX_PSCI_H
+
+/*
+ * PSCI v0.1 interface
+ *
+ * The PSCI v0.1 function numbers are implementation defined.
+ *
+ * Only PSCI return values such as: SUCCESS, NOT_SUPPORTED,
+ * INVALID_PARAMS, and DENIED defined below are applicable
+ * to PSCI v0.1.
+ */
+
+/* PSCI v0.2 interface */
+#define PSCI_0_2_FN_BASE                       0x84000000
+#define PSCI_0_2_FN(n)                         (PSCI_0_2_FN_BASE + (n))
+#define PSCI_0_2_64BIT                         0x40000000
+#define PSCI_0_2_FN64_BASE                     \
+                                       (PSCI_0_2_FN_BASE + PSCI_0_2_64BIT)
+#define PSCI_0_2_FN64(n)                       (PSCI_0_2_FN64_BASE + (n))
+
+#define PSCI_0_2_FN_PSCI_VERSION               PSCI_0_2_FN(0)
+#define PSCI_0_2_FN_CPU_SUSPEND                        PSCI_0_2_FN(1)
+#define PSCI_0_2_FN_CPU_OFF                    PSCI_0_2_FN(2)
+#define PSCI_0_2_FN_CPU_ON                     PSCI_0_2_FN(3)
+#define PSCI_0_2_FN_AFFINITY_INFO              PSCI_0_2_FN(4)
+#define PSCI_0_2_FN_MIGRATE                    PSCI_0_2_FN(5)
+#define PSCI_0_2_FN_MIGRATE_INFO_TYPE          PSCI_0_2_FN(6)
+#define PSCI_0_2_FN_MIGRATE_INFO_UP_CPU                PSCI_0_2_FN(7)
+#define PSCI_0_2_FN_SYSTEM_OFF                 PSCI_0_2_FN(8)
+#define PSCI_0_2_FN_SYSTEM_RESET               PSCI_0_2_FN(9)
+
+#define PSCI_0_2_FN64_CPU_SUSPEND              PSCI_0_2_FN64(1)
+#define PSCI_0_2_FN64_CPU_ON                   PSCI_0_2_FN64(3)
+#define PSCI_0_2_FN64_AFFINITY_INFO            PSCI_0_2_FN64(4)
+#define PSCI_0_2_FN64_MIGRATE                  PSCI_0_2_FN64(5)
+#define PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU      PSCI_0_2_FN64(7)
+
+#define PSCI_1_0_FN_PSCI_FEATURES              PSCI_0_2_FN(10)
+#define PSCI_1_0_FN_SYSTEM_SUSPEND             PSCI_0_2_FN(14)
+
+#define PSCI_1_0_FN64_SYSTEM_SUSPEND           PSCI_0_2_FN64(14)
+
+/* PSCI v0.2 power state encoding for CPU_SUSPEND function */
+#define PSCI_0_2_POWER_STATE_ID_MASK           0xffff
+#define PSCI_0_2_POWER_STATE_ID_SHIFT          0
+#define PSCI_0_2_POWER_STATE_TYPE_SHIFT                16
+#define PSCI_0_2_POWER_STATE_TYPE_MASK         \
+                               (0x1 << PSCI_0_2_POWER_STATE_TYPE_SHIFT)
+#define PSCI_0_2_POWER_STATE_AFFL_SHIFT                24
+#define PSCI_0_2_POWER_STATE_AFFL_MASK         \
+                               (0x3 << PSCI_0_2_POWER_STATE_AFFL_SHIFT)
+
+/* PSCI extended power state encoding for CPU_SUSPEND function */
+#define PSCI_1_0_EXT_POWER_STATE_ID_MASK       0xfffffff
+#define PSCI_1_0_EXT_POWER_STATE_ID_SHIFT      0
+#define PSCI_1_0_EXT_POWER_STATE_TYPE_SHIFT    30
+#define PSCI_1_0_EXT_POWER_STATE_TYPE_MASK     \
+                               (0x1 << PSCI_1_0_EXT_POWER_STATE_TYPE_SHIFT)
+
+/* PSCI v0.2 affinity level state returned by AFFINITY_INFO */
+#define PSCI_0_2_AFFINITY_LEVEL_ON             0
+#define PSCI_0_2_AFFINITY_LEVEL_OFF            1
+#define PSCI_0_2_AFFINITY_LEVEL_ON_PENDING     2
+
+/* PSCI v0.2 multicore support in Trusted OS returned by MIGRATE_INFO_TYPE */
+#define PSCI_0_2_TOS_UP_MIGRATE                        0
+#define PSCI_0_2_TOS_UP_NO_MIGRATE             1
+#define PSCI_0_2_TOS_MP                                2
+
+/* PSCI version decoding (independent of PSCI version) */
+#define PSCI_VERSION_MAJOR_SHIFT               16
+#define PSCI_VERSION_MINOR_MASK                        \
+               ((1U << PSCI_VERSION_MAJOR_SHIFT) - 1)
+#define PSCI_VERSION_MAJOR_MASK                        ~PSCI_VERSION_MINOR_MASK
+#define PSCI_VERSION_MAJOR(ver)                        \
+               (((ver) & PSCI_VERSION_MAJOR_MASK) >> PSCI_VERSION_MAJOR_SHIFT)
+#define PSCI_VERSION_MINOR(ver)                        \
+               ((ver) & PSCI_VERSION_MINOR_MASK)
+
+/* PSCI features decoding (>=1.0) */
+#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT 1
+#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK  \
+                       (0x1 << PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT)
+
+/* PSCI return values (inclusive of all PSCI versions) */
+#define PSCI_RET_SUCCESS                       0
+#define PSCI_RET_NOT_SUPPORTED                 -1
+#define PSCI_RET_INVALID_PARAMS                        -2
+#define PSCI_RET_DENIED                                -3
+#define PSCI_RET_ALREADY_ON                    -4
+#define PSCI_RET_ON_PENDING                    -5
+#define PSCI_RET_INTERNAL_FAILURE              -6
+#define PSCI_RET_NOT_PRESENT                   -7
+#define PSCI_RET_DISABLED                      -8
+#define PSCI_RET_INVALID_ADDRESS               -9
+
+#endif /* _LINUX_PSCI_H */
diff --git a/lib/libdss-include/include/linux/ptp_clock.h b/lib/libdss-include/include/linux/ptp_clock.h
new file mode 100644 (file)
index 0000000..ac6dded
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * PTP 1588 clock support - user space interface
+ *
+ * Copyright (C) 2010 OMICRON electronics GmbH
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _PTP_CLOCK_H_
+#define _PTP_CLOCK_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* PTP_xxx bits, for the flags field within the request structures. */
+#define PTP_ENABLE_FEATURE (1<<0)
+#define PTP_RISING_EDGE    (1<<1)
+#define PTP_FALLING_EDGE   (1<<2)
+
+/*
+ * struct ptp_clock_time - represents a time value
+ *
+ * The sign of the seconds field applies to the whole value. The
+ * nanoseconds field is always unsigned. The reserved field is
+ * included for sub-nanosecond resolution, should the demand for
+ * this ever appear.
+ *
+ */
+struct ptp_clock_time {
+       __s64 sec;  /* seconds */
+       __u32 nsec; /* nanoseconds */
+       __u32 reserved;
+};
+
+struct ptp_clock_caps {
+       int max_adj;   /* Maximum frequency adjustment in parts per billon. */
+       int n_alarm;   /* Number of programmable alarms. */
+       int n_ext_ts;  /* Number of external time stamp channels. */
+       int n_per_out; /* Number of programmable periodic signals. */
+       int pps;       /* Whether the clock supports a PPS callback. */
+       int n_pins;    /* Number of input/output pins. */
+       /* Whether the clock supports precise system-device cross timestamps */
+       int cross_timestamping;
+       int rsv[13];   /* Reserved for future use. */
+};
+
+struct ptp_extts_request {
+       unsigned int index;  /* Which channel to configure. */
+       unsigned int flags;  /* Bit field for PTP_xxx flags. */
+       unsigned int rsv[2]; /* Reserved for future use. */
+};
+
+struct ptp_perout_request {
+       struct ptp_clock_time start;  /* Absolute start time. */
+       struct ptp_clock_time period; /* Desired period, zero means disable. */
+       unsigned int index;           /* Which channel to configure. */
+       unsigned int flags;           /* Reserved for future use. */
+       unsigned int rsv[4];          /* Reserved for future use. */
+};
+
+#define PTP_MAX_SAMPLES 25 /* Maximum allowed offset measurement samples. */
+
+struct ptp_sys_offset {
+       unsigned int n_samples; /* Desired number of measurements. */
+       unsigned int rsv[3];    /* Reserved for future use. */
+       /*
+        * Array of interleaved system/phc time stamps. The kernel
+        * will provide 2*n_samples + 1 time stamps, with the last
+        * one as a system time stamp.
+        */
+       struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1];
+};
+
+struct ptp_sys_offset_precise {
+       struct ptp_clock_time device;
+       struct ptp_clock_time sys_realtime;
+       struct ptp_clock_time sys_monoraw;
+       unsigned int rsv[4];    /* Reserved for future use. */
+};
+
+enum ptp_pin_function {
+       PTP_PF_NONE,
+       PTP_PF_EXTTS,
+       PTP_PF_PEROUT,
+       PTP_PF_PHYSYNC,
+};
+
+struct ptp_pin_desc {
+       /*
+        * Hardware specific human readable pin name. This field is
+        * set by the kernel during the PTP_PIN_GETFUNC ioctl and is
+        * ignored for the PTP_PIN_SETFUNC ioctl.
+        */
+       char name[64];
+       /*
+        * Pin index in the range of zero to ptp_clock_caps.n_pins - 1.
+        */
+       unsigned int index;
+       /*
+        * Which of the PTP_PF_xxx functions to use on this pin.
+        */
+       unsigned int func;
+       /*
+        * The specific channel to use for this function.
+        * This corresponds to the 'index' field of the
+        * PTP_EXTTS_REQUEST and PTP_PEROUT_REQUEST ioctls.
+        */
+       unsigned int chan;
+       /*
+        * Reserved for future use.
+        */
+       unsigned int rsv[5];
+};
+
+#define PTP_CLK_MAGIC '='
+
+#define PTP_CLOCK_GETCAPS  _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps)
+#define PTP_EXTTS_REQUEST  _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request)
+#define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request)
+#define PTP_ENABLE_PPS     _IOW(PTP_CLK_MAGIC, 4, int)
+#define PTP_SYS_OFFSET     _IOW(PTP_CLK_MAGIC, 5, struct ptp_sys_offset)
+#define PTP_PIN_GETFUNC    _IOWR(PTP_CLK_MAGIC, 6, struct ptp_pin_desc)
+#define PTP_PIN_SETFUNC    _IOW(PTP_CLK_MAGIC, 7, struct ptp_pin_desc)
+#define PTP_SYS_OFFSET_PRECISE \
+       _IOWR(PTP_CLK_MAGIC, 8, struct ptp_sys_offset_precise)
+
+struct ptp_extts_event {
+       struct ptp_clock_time t; /* Time event occured. */
+       unsigned int index;      /* Which channel produced the event. */
+       unsigned int flags;      /* Reserved for future use. */
+       unsigned int rsv[2];     /* Reserved for future use. */
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/ptrace.h b/lib/libdss-include/include/linux/ptrace.h
new file mode 100644 (file)
index 0000000..73b0338
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef _LINUX_PTRACE_H
+#define _LINUX_PTRACE_H
+/* ptrace.h */
+/* structs and defines to help the user use the ptrace system call. */
+
+/* has the defines to get at the registers. */
+
+#include <linux/types.h>
+
+#define PTRACE_TRACEME            0
+#define PTRACE_PEEKTEXT                   1
+#define PTRACE_PEEKDATA                   2
+#define PTRACE_PEEKUSR            3
+#define PTRACE_POKETEXT                   4
+#define PTRACE_POKEDATA                   5
+#define PTRACE_POKEUSR            6
+#define PTRACE_CONT               7
+#define PTRACE_KILL               8
+#define PTRACE_SINGLESTEP         9
+
+#define PTRACE_ATTACH            16
+#define PTRACE_DETACH            17
+
+#define PTRACE_SYSCALL           24
+
+/* 0x4200-0x4300 are reserved for architecture-independent additions.  */
+#define PTRACE_SETOPTIONS      0x4200
+#define PTRACE_GETEVENTMSG     0x4201
+#define PTRACE_GETSIGINFO      0x4202
+#define PTRACE_SETSIGINFO      0x4203
+
+/*
+ * Generic ptrace interface that exports the architecture specific regsets
+ * using the corresponding NT_* types (which are also used in the core dump).
+ * Please note that the NT_PRSTATUS note type in a core dump contains a full
+ * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the
+ * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the
+ * other user_regset flavors, the user_regset layout and the ELF core dump note
+ * payload are exactly the same layout.
+ *
+ * This interface usage is as follows:
+ *     struct iovec iov = { buf, len};
+ *
+ *     ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov);
+ *
+ * On the successful completion, iov.len will be updated by the kernel,
+ * specifying how much the kernel has written/read to/from the user's iov.buf.
+ */
+#define PTRACE_GETREGSET       0x4204
+#define PTRACE_SETREGSET       0x4205
+
+#define PTRACE_SEIZE           0x4206
+#define PTRACE_INTERRUPT       0x4207
+#define PTRACE_LISTEN          0x4208
+
+#define PTRACE_PEEKSIGINFO     0x4209
+
+struct ptrace_peeksiginfo_args {
+       __u64 off;      /* from which siginfo to start */
+       __u32 flags;
+       __s32 nr;       /* how may siginfos to take */
+};
+
+#define PTRACE_GETSIGMASK      0x420a
+#define PTRACE_SETSIGMASK      0x420b
+
+#define PTRACE_SECCOMP_GET_FILTER      0x420c
+
+/* Read signals from a shared (process wide) queue */
+#define PTRACE_PEEKSIGINFO_SHARED      (1 << 0)
+
+/* Wait extended result codes for the above trace options.  */
+#define PTRACE_EVENT_FORK      1
+#define PTRACE_EVENT_VFORK     2
+#define PTRACE_EVENT_CLONE     3
+#define PTRACE_EVENT_EXEC      4
+#define PTRACE_EVENT_VFORK_DONE        5
+#define PTRACE_EVENT_EXIT      6
+#define PTRACE_EVENT_SECCOMP   7
+/* Extended result codes which enabled by means other than options.  */
+#define PTRACE_EVENT_STOP      128
+
+/* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */
+#define PTRACE_O_TRACESYSGOOD  1
+#define PTRACE_O_TRACEFORK     (1 << PTRACE_EVENT_FORK)
+#define PTRACE_O_TRACEVFORK    (1 << PTRACE_EVENT_VFORK)
+#define PTRACE_O_TRACECLONE    (1 << PTRACE_EVENT_CLONE)
+#define PTRACE_O_TRACEEXEC     (1 << PTRACE_EVENT_EXEC)
+#define PTRACE_O_TRACEVFORKDONE        (1 << PTRACE_EVENT_VFORK_DONE)
+#define PTRACE_O_TRACEEXIT     (1 << PTRACE_EVENT_EXIT)
+#define PTRACE_O_TRACESECCOMP  (1 << PTRACE_EVENT_SECCOMP)
+
+/* eventless options */
+#define PTRACE_O_EXITKILL              (1 << 20)
+#define PTRACE_O_SUSPEND_SECCOMP       (1 << 21)
+
+#define PTRACE_O_MASK          (\
+       0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP)
+
+#include <asm/ptrace.h>
+
+
+#endif /* _LINUX_PTRACE_H */
diff --git a/lib/libdss-include/include/linux/qnx4_fs.h b/lib/libdss-include/include/linux/qnx4_fs.h
new file mode 100644 (file)
index 0000000..8b9aee1
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ *  Name                         : qnx4_fs.h
+ *  Author                       : Richard Frowijn
+ *  Function                     : qnx4 global filesystem definitions
+ *  History                      : 23-03-1998 created
+ */
+#ifndef _LINUX_QNX4_FS_H
+#define _LINUX_QNX4_FS_H
+
+#include <linux/types.h>
+#include <linux/qnxtypes.h>
+#include <linux/magic.h>
+
+#define QNX4_ROOT_INO 1
+
+#define QNX4_MAX_XTNTS_PER_XBLK        60
+/* for di_status */
+#define QNX4_FILE_USED          0x01
+#define QNX4_FILE_MODIFIED      0x02
+#define QNX4_FILE_BUSY          0x04
+#define QNX4_FILE_LINK          0x08
+#define QNX4_FILE_INODE         0x10
+#define QNX4_FILE_FSYSCLEAN     0x20
+
+#define QNX4_I_MAP_SLOTS       8
+#define QNX4_Z_MAP_SLOTS       64
+#define QNX4_VALID_FS          0x0001  /* Clean fs. */
+#define QNX4_ERROR_FS          0x0002  /* fs has errors. */
+#define QNX4_BLOCK_SIZE         0x200  /* blocksize of 512 bytes */
+#define QNX4_BLOCK_SIZE_BITS    9      /* blocksize shift */
+#define QNX4_DIR_ENTRY_SIZE     0x040  /* dir entry size of 64 bytes */
+#define QNX4_DIR_ENTRY_SIZE_BITS 6     /* dir entry size shift */
+#define QNX4_XBLK_ENTRY_SIZE    0x200  /* xblk entry size */
+#define QNX4_INODES_PER_BLOCK   0x08   /* 512 / 64 */
+
+/* for filenames */
+#define QNX4_SHORT_NAME_MAX    16
+#define QNX4_NAME_MAX          48
+
+/*
+ * This is the original qnx4 inode layout on disk.
+ */
+struct qnx4_inode_entry {
+       char            di_fname[QNX4_SHORT_NAME_MAX];
+       qnx4_off_t      di_size;
+       qnx4_xtnt_t     di_first_xtnt;
+       __le32          di_xblk;
+       __le32          di_ftime;
+       __le32          di_mtime;
+       __le32          di_atime;
+       __le32          di_ctime;
+       qnx4_nxtnt_t    di_num_xtnts;
+       qnx4_mode_t     di_mode;
+       qnx4_muid_t     di_uid;
+       qnx4_mgid_t     di_gid;
+       qnx4_nlink_t    di_nlink;
+       __u8            di_zero[4];
+       qnx4_ftype_t    di_type;
+       __u8            di_status;
+};
+
+struct qnx4_link_info {
+       char            dl_fname[QNX4_NAME_MAX];
+       __le32          dl_inode_blk;
+       __u8            dl_inode_ndx;
+       __u8            dl_spare[10];
+       __u8            dl_status;
+};
+
+struct qnx4_xblk {
+       __le32          xblk_next_xblk;
+       __le32          xblk_prev_xblk;
+       __u8            xblk_num_xtnts;
+       __u8            xblk_spare[3];
+       __le32          xblk_num_blocks;
+       qnx4_xtnt_t     xblk_xtnts[QNX4_MAX_XTNTS_PER_XBLK];
+       char            xblk_signature[8];
+       qnx4_xtnt_t     xblk_first_xtnt;
+};
+
+struct qnx4_super_block {
+       struct qnx4_inode_entry RootDir;
+       struct qnx4_inode_entry Inode;
+       struct qnx4_inode_entry Boot;
+       struct qnx4_inode_entry AltBoot;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/qnxtypes.h b/lib/libdss-include/include/linux/qnxtypes.h
new file mode 100644 (file)
index 0000000..bebbe5c
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Name                         : qnxtypes.h
+ *  Author                       : Richard Frowijn
+ *  Function                     : standard qnx types
+ *  History                      : 22-03-1998 created
+ *
+ */
+
+#ifndef _QNX4TYPES_H
+#define _QNX4TYPES_H
+
+#include <linux/types.h>
+
+typedef __le16 qnx4_nxtnt_t;
+typedef __u8  qnx4_ftype_t;
+
+typedef struct {
+       __le32 xtnt_blk;
+       __le32 xtnt_size;
+} qnx4_xtnt_t;
+
+typedef __le16 qnx4_mode_t;
+typedef __le16 qnx4_muid_t;
+typedef __le16 qnx4_mgid_t;
+typedef __le32 qnx4_off_t;
+typedef __le16 qnx4_nlink_t;
+
+#endif
diff --git a/lib/libdss-include/include/linux/quota.h b/lib/libdss-include/include/linux/quota.h
new file mode 100644 (file)
index 0000000..0695307
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Robert Elz at The University of Melbourne.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_QUOTA_
+#define _LINUX_QUOTA_
+
+#include <linux/errno.h>
+#include <linux/types.h>
+
+#define __DQUOT_VERSION__      "dquot_6.6.0"
+
+#define MAXQUOTAS 3
+#define USRQUOTA  0            /* element used for user quotas */
+#define GRPQUOTA  1            /* element used for group quotas */
+#define PRJQUOTA  2            /* element used for project quotas */
+
+/*
+ * Definitions for the default names of the quotas files.
+ */
+#define INITQFNAMES { \
+       "user",    /* USRQUOTA */ \
+       "group",   /* GRPQUOTA */ \
+       "project", /* PRJQUOTA */ \
+       "undefined", \
+};
+
+/*
+ * Command definitions for the 'quotactl' system call.
+ * The commands are broken into a main command defined below
+ * and a subcommand that is used to convey the type of
+ * quota that is being manipulated (see above).
+ */
+#define SUBCMDMASK  0x00ff
+#define SUBCMDSHIFT 8
+#define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
+
+#define Q_SYNC     0x800001    /* sync disk copy of a filesystems quotas */
+#define Q_QUOTAON  0x800002    /* turn quotas on */
+#define Q_QUOTAOFF 0x800003    /* turn quotas off */
+#define Q_GETFMT   0x800004    /* get quota format used on given filesystem */
+#define Q_GETINFO  0x800005    /* get information about quota files */
+#define Q_SETINFO  0x800006    /* set information about quota files */
+#define Q_GETQUOTA 0x800007    /* get user quota structure */
+#define Q_SETQUOTA 0x800008    /* set user quota structure */
+
+/* Quota format type IDs */
+#define        QFMT_VFS_OLD 1
+#define        QFMT_VFS_V0 2
+#define QFMT_OCFS2 3
+#define        QFMT_VFS_V1 4
+
+/* Size of block in which space limits are passed through the quota
+ * interface */
+#define QIF_DQBLKSIZE_BITS 10
+#define QIF_DQBLKSIZE (1 << QIF_DQBLKSIZE_BITS)
+
+/*
+ * Quota structure used for communication with userspace via quotactl
+ * Following flags are used to specify which fields are valid
+ */
+enum {
+       QIF_BLIMITS_B = 0,
+       QIF_SPACE_B,
+       QIF_ILIMITS_B,
+       QIF_INODES_B,
+       QIF_BTIME_B,
+       QIF_ITIME_B,
+};
+
+#define QIF_BLIMITS    (1 << QIF_BLIMITS_B)
+#define QIF_SPACE      (1 << QIF_SPACE_B)
+#define QIF_ILIMITS    (1 << QIF_ILIMITS_B)
+#define QIF_INODES     (1 << QIF_INODES_B)
+#define QIF_BTIME      (1 << QIF_BTIME_B)
+#define QIF_ITIME      (1 << QIF_ITIME_B)
+#define QIF_LIMITS     (QIF_BLIMITS | QIF_ILIMITS)
+#define QIF_USAGE      (QIF_SPACE | QIF_INODES)
+#define QIF_TIMES      (QIF_BTIME | QIF_ITIME)
+#define QIF_ALL                (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
+
+struct if_dqblk {
+       __u64 dqb_bhardlimit;
+       __u64 dqb_bsoftlimit;
+       __u64 dqb_curspace;
+       __u64 dqb_ihardlimit;
+       __u64 dqb_isoftlimit;
+       __u64 dqb_curinodes;
+       __u64 dqb_btime;
+       __u64 dqb_itime;
+       __u32 dqb_valid;
+};
+
+/*
+ * Structure used for setting quota information about file via quotactl
+ * Following flags are used to specify which fields are valid
+ */
+#define IIF_BGRACE     1
+#define IIF_IGRACE     2
+#define IIF_FLAGS      4
+#define IIF_ALL                (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
+
+enum {
+       DQF_ROOT_SQUASH_B = 0,
+       DQF_SYS_FILE_B = 16,
+       /* Kernel internal flags invisible to userspace */
+       DQF_PRIVATE
+};
+
+/* Root squash enabled (for v1 quota format) */
+#define DQF_ROOT_SQUASH        (1 << DQF_ROOT_SQUASH_B)
+/* Quota stored in a system file */
+#define DQF_SYS_FILE   (1 << DQF_SYS_FILE_B)
+
+struct if_dqinfo {
+       __u64 dqi_bgrace;
+       __u64 dqi_igrace;
+       __u32 dqi_flags;        /* DFQ_* */
+       __u32 dqi_valid;
+};
+
+/*
+ * Definitions for quota netlink interface
+ */
+#define QUOTA_NL_NOWARN 0
+#define QUOTA_NL_IHARDWARN 1           /* Inode hardlimit reached */
+#define QUOTA_NL_ISOFTLONGWARN 2       /* Inode grace time expired */
+#define QUOTA_NL_ISOFTWARN 3           /* Inode softlimit reached */
+#define QUOTA_NL_BHARDWARN 4           /* Block hardlimit reached */
+#define QUOTA_NL_BSOFTLONGWARN 5       /* Block grace time expired */
+#define QUOTA_NL_BSOFTWARN 6           /* Block softlimit reached */
+#define QUOTA_NL_IHARDBELOW 7          /* Usage got below inode hardlimit */
+#define QUOTA_NL_ISOFTBELOW 8          /* Usage got below inode softlimit */
+#define QUOTA_NL_BHARDBELOW 9          /* Usage got below block hardlimit */
+#define QUOTA_NL_BSOFTBELOW 10         /* Usage got below block softlimit */
+
+enum {
+       QUOTA_NL_C_UNSPEC,
+       QUOTA_NL_C_WARNING,
+       __QUOTA_NL_C_MAX,
+};
+#define QUOTA_NL_C_MAX (__QUOTA_NL_C_MAX - 1)
+
+enum {
+       QUOTA_NL_A_UNSPEC,
+       QUOTA_NL_A_QTYPE,
+       QUOTA_NL_A_EXCESS_ID,
+       QUOTA_NL_A_WARNING,
+       QUOTA_NL_A_DEV_MAJOR,
+       QUOTA_NL_A_DEV_MINOR,
+       QUOTA_NL_A_CAUSED_ID,
+       __QUOTA_NL_A_MAX,
+};
+#define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1)
+
+
+#endif /* _LINUX_QUOTA_ */
diff --git a/lib/libdss-include/include/linux/radeonfb.h b/lib/libdss-include/include/linux/radeonfb.h
new file mode 100644 (file)
index 0000000..8c4bbde
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __LINUX_RADEONFB_H__
+#define __LINUX_RADEONFB_H__
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+
+#define ATY_RADEON_LCD_ON      0x00000001
+#define ATY_RADEON_CRT_ON      0x00000002
+
+
+#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, size_t)
+#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, size_t)
+
+#endif
+
diff --git a/lib/libdss-include/include/linux/raid/md_p.h b/lib/libdss-include/include/linux/raid/md_p.h
new file mode 100644 (file)
index 0000000..e956671
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+   md_p.h : physical layout of Linux RAID devices
+          Copyright (C) 1996-98 Ingo Molnar, Gadi Oxman
+         
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+   
+   You should have received a copy of the GNU General Public License
+   (for example /usr/src/linux/COPYING); if not, write to the Free
+   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#ifndef _MD_P_H
+#define _MD_P_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ * RAID superblock.
+ *
+ * The RAID superblock maintains some statistics on each RAID configuration.
+ * Each real device in the RAID set contains it near the end of the device.
+ * Some of the ideas are copied from the ext2fs implementation.
+ *
+ * We currently use 4096 bytes as follows:
+ *
+ *     word offset     function
+ *
+ *        0  -    31   Constant generic RAID device information.
+ *        32  -    63   Generic state information.
+ *       64  -   127   Personality specific information.
+ *      128  -   511   12 32-words descriptors of the disks in the raid set.
+ *      512  -   911   Reserved.
+ *      912  -  1023   Disk specific descriptor.
+ */
+
+/*
+ * If x is the real device size in bytes, we return an apparent size of:
+ *
+ *     y = (x & ~(MD_RESERVED_BYTES - 1)) - MD_RESERVED_BYTES
+ *
+ * and place the 4kB superblock at offset y.
+ */
+#define MD_RESERVED_BYTES              (64 * 1024)
+#define MD_RESERVED_SECTORS            (MD_RESERVED_BYTES / 512)
+
+#define MD_NEW_SIZE_SECTORS(x)         ((x & ~(MD_RESERVED_SECTORS - 1)) - MD_RESERVED_SECTORS)
+
+#define MD_SB_BYTES                    4096
+#define MD_SB_WORDS                    (MD_SB_BYTES / 4)
+#define MD_SB_SECTORS                  (MD_SB_BYTES / 512)
+
+/*
+ * The following are counted in 32-bit words
+ */
+#define        MD_SB_GENERIC_OFFSET            0
+#define MD_SB_PERSONALITY_OFFSET       64
+#define MD_SB_DISKS_OFFSET             128
+#define MD_SB_DESCRIPTOR_OFFSET                992
+
+#define MD_SB_GENERIC_CONSTANT_WORDS   32
+#define MD_SB_GENERIC_STATE_WORDS      32
+#define MD_SB_GENERIC_WORDS            (MD_SB_GENERIC_CONSTANT_WORDS + MD_SB_GENERIC_STATE_WORDS)
+#define MD_SB_PERSONALITY_WORDS                64
+#define MD_SB_DESCRIPTOR_WORDS         32
+#define MD_SB_DISKS                    27
+#define MD_SB_DISKS_WORDS              (MD_SB_DISKS*MD_SB_DESCRIPTOR_WORDS)
+#define MD_SB_RESERVED_WORDS           (1024 - MD_SB_GENERIC_WORDS - MD_SB_PERSONALITY_WORDS - MD_SB_DISKS_WORDS - MD_SB_DESCRIPTOR_WORDS)
+#define MD_SB_EQUAL_WORDS              (MD_SB_GENERIC_WORDS + MD_SB_PERSONALITY_WORDS + MD_SB_DISKS_WORDS)
+
+/*
+ * Device "operational" state bits
+ */
+#define MD_DISK_FAULTY         0 /* disk is faulty / operational */
+#define MD_DISK_ACTIVE         1 /* disk is running or spare disk */
+#define MD_DISK_SYNC           2 /* disk is in sync with the raid set */
+#define MD_DISK_REMOVED                3 /* disk is in sync with the raid set */
+#define MD_DISK_CLUSTER_ADD     4 /* Initiate a disk add across the cluster
+                                  * For clustered enviroments only.
+                                  */
+#define MD_DISK_CANDIDATE      5 /* disk is added as spare (local) until confirmed
+                                  * For clustered enviroments only.
+                                  */
+
+#define        MD_DISK_WRITEMOSTLY     9 /* disk is "write-mostly" is RAID1 config.
+                                  * read requests will only be sent here in
+                                  * dire need
+                                  */
+#define MD_DISK_JOURNAL                18 /* disk is used as the write journal in RAID-5/6 */
+
+#define MD_DISK_ROLE_SPARE     0xffff
+#define MD_DISK_ROLE_FAULTY    0xfffe
+#define MD_DISK_ROLE_JOURNAL   0xfffd
+#define MD_DISK_ROLE_MAX       0xff00 /* max value of regular disk role */
+
+typedef struct mdp_device_descriptor_s {
+       __u32 number;           /* 0 Device number in the entire set          */
+       __u32 major;            /* 1 Device major number                      */
+       __u32 minor;            /* 2 Device minor number                      */
+       __u32 raid_disk;        /* 3 The role of the device in the raid set   */
+       __u32 state;            /* 4 Operational state                        */
+       __u32 reserved[MD_SB_DESCRIPTOR_WORDS - 5];
+} mdp_disk_t;
+
+#define MD_SB_MAGIC            0xa92b4efc
+
+/*
+ * Superblock state bits
+ */
+#define MD_SB_CLEAN            0
+#define MD_SB_ERRORS           1
+
+#define        MD_SB_CLUSTERED         5 /* MD is clustered */
+#define        MD_SB_BITMAP_PRESENT    8 /* bitmap may be present nearby */
+
+/*
+ * Notes:
+ * - if an array is being reshaped (restriped) in order to change the
+ *   the number of active devices in the array, 'raid_disks' will be
+ *   the larger of the old and new numbers.  'delta_disks' will
+ *   be the "new - old".  So if +ve, raid_disks is the new value, and
+ *   "raid_disks-delta_disks" is the old.  If -ve, raid_disks is the
+ *   old value and "raid_disks+delta_disks" is the new (smaller) value.
+ */
+
+
+typedef struct mdp_superblock_s {
+       /*
+        * Constant generic information
+        */
+       __u32 md_magic;         /*  0 MD identifier                           */
+       __u32 major_version;    /*  1 major version to which the set conforms */
+       __u32 minor_version;    /*  2 minor version ...                       */
+       __u32 patch_version;    /*  3 patchlevel version ...                  */
+       __u32 gvalid_words;     /*  4 Number of used words in this section    */
+       __u32 set_uuid0;        /*  5 Raid set identifier                     */
+       __u32 ctime;            /*  6 Creation time                           */
+       __u32 level;            /*  7 Raid personality                        */
+       __u32 size;             /*  8 Apparent size of each individual disk   */
+       __u32 nr_disks;         /*  9 total disks in the raid set             */
+       __u32 raid_disks;       /* 10 disks in a fully functional raid set    */
+       __u32 md_minor;         /* 11 preferred MD minor device number        */
+       __u32 not_persistent;   /* 12 does it have a persistent superblock    */
+       __u32 set_uuid1;        /* 13 Raid set identifier #2                  */
+       __u32 set_uuid2;        /* 14 Raid set identifier #3                  */
+       __u32 set_uuid3;        /* 15 Raid set identifier #4                  */
+       __u32 gstate_creserved[MD_SB_GENERIC_CONSTANT_WORDS - 16];
+
+       /*
+        * Generic state information
+        */
+       __u32 utime;            /*  0 Superblock update time                  */
+       __u32 state;            /*  1 State bits (clean, ...)                 */
+       __u32 active_disks;     /*  2 Number of currently active disks        */
+       __u32 working_disks;    /*  3 Number of working disks                 */
+       __u32 failed_disks;     /*  4 Number of failed disks                  */
+       __u32 spare_disks;      /*  5 Number of spare disks                   */
+       __u32 sb_csum;          /*  6 checksum of the whole superblock        */
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+       __u32 events_hi;        /*  7 high-order of superblock update count   */
+       __u32 events_lo;        /*  8 low-order of superblock update count    */
+       __u32 cp_events_hi;     /*  9 high-order of checkpoint update count   */
+       __u32 cp_events_lo;     /* 10 low-order of checkpoint update count    */
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+       __u32 events_lo;        /*  7 low-order of superblock update count    */
+       __u32 events_hi;        /*  8 high-order of superblock update count   */
+       __u32 cp_events_lo;     /*  9 low-order of checkpoint update count    */
+       __u32 cp_events_hi;     /* 10 high-order of checkpoint update count   */
+#else
+#error unspecified endianness
+#endif
+       __u32 recovery_cp;      /* 11 recovery checkpoint sector count        */
+       /* There are only valid for minor_version > 90 */
+       __u64 reshape_position; /* 12,13 next address in array-space for reshape */
+       __u32 new_level;        /* 14 new level we are reshaping to           */
+       __u32 delta_disks;      /* 15 change in number of raid_disks          */
+       __u32 new_layout;       /* 16 new layout                              */
+       __u32 new_chunk;        /* 17 new chunk size (bytes)                  */
+       __u32 gstate_sreserved[MD_SB_GENERIC_STATE_WORDS - 18];
+
+       /*
+        * Personality information
+        */
+       __u32 layout;           /*  0 the array's physical layout             */
+       __u32 chunk_size;       /*  1 chunk size in bytes                     */
+       __u32 root_pv;          /*  2 LV root PV */
+       __u32 root_block;       /*  3 LV root block */
+       __u32 pstate_reserved[MD_SB_PERSONALITY_WORDS - 4];
+
+       /*
+        * Disks information
+        */
+       mdp_disk_t disks[MD_SB_DISKS];
+
+       /*
+        * Reserved
+        */
+       __u32 reserved[MD_SB_RESERVED_WORDS];
+
+       /*
+        * Active descriptor
+        */
+       mdp_disk_t this_disk;
+
+} mdp_super_t;
+
+static __inline__ __u64 md_event(mdp_super_t *sb) {
+       __u64 ev = sb->events_hi;
+       return (ev<<32)| sb->events_lo;
+}
+
+#define MD_SUPERBLOCK_1_TIME_SEC_MASK ((1ULL<<40) - 1)
+
+/*
+ * The version-1 superblock :
+ * All numeric fields are little-endian.
+ *
+ * total size: 256 bytes plus 2 per device.
+ *  1K allows 384 devices.
+ */
+struct mdp_superblock_1 {
+       /* constant array information - 128 bytes */
+       __le32  magic;          /* MD_SB_MAGIC: 0xa92b4efc - little endian */
+       __le32  major_version;  /* 1 */
+       __le32  feature_map;    /* bit 0 set if 'bitmap_offset' is meaningful */
+       __le32  pad0;           /* always set to 0 when writing */
+
+       __u8    set_uuid[16];   /* user-space generated. */
+       char    set_name[32];   /* set and interpreted by user-space */
+
+       __le64  ctime;          /* lo 40 bits are seconds, top 24 are microseconds or 0*/
+       __le32  level;          /* -4 (multipath), -1 (linear), 0,1,4,5 */
+       __le32  layout;         /* only for raid5 and raid10 currently */
+       __le64  size;           /* used size of component devices, in 512byte sectors */
+
+       __le32  chunksize;      /* in 512byte sectors */
+       __le32  raid_disks;
+       __le32  bitmap_offset;  /* sectors after start of superblock that bitmap starts
+                                * NOTE: signed, so bitmap can be before superblock
+                                * only meaningful of feature_map[0] is set.
+                                */
+
+       /* These are only valid with feature bit '4' */
+       __le32  new_level;      /* new level we are reshaping to                */
+       __le64  reshape_position;       /* next address in array-space for reshape */
+       __le32  delta_disks;    /* change in number of raid_disks               */
+       __le32  new_layout;     /* new layout                                   */
+       __le32  new_chunk;      /* new chunk size (512byte sectors)             */
+       __le32  new_offset;     /* signed number to add to data_offset in new
+                                * layout.  0 == no-change.  This can be
+                                * different on each device in the array.
+                                */
+
+       /* constant this-device information - 64 bytes */
+       __le64  data_offset;    /* sector start of data, often 0 */
+       __le64  data_size;      /* sectors in this device that can be used for data */
+       __le64  super_offset;   /* sector start of this superblock */
+       union {
+               __le64  recovery_offset;/* sectors before this offset (from data_offset) have been recovered */
+               __le64  journal_tail;/* journal tail of journal device (from data_offset) */
+       };
+       __le32  dev_number;     /* permanent identifier of this  device - not role in raid */
+       __le32  cnt_corrected_read; /* number of read errors that were corrected by re-writing */
+       __u8    device_uuid[16]; /* user-space setable, ignored by kernel */
+       __u8    devflags;       /* per-device flags.  Only one defined...*/
+#define        WriteMostly1    1       /* mask for writemostly flag in above */
+       /* Bad block log.  If there are any bad blocks the feature flag is set.
+        * If offset and size are non-zero, that space is reserved and available
+        */
+       __u8    bblog_shift;    /* shift from sectors to block size */
+       __le16  bblog_size;     /* number of sectors reserved for list */
+       __le32  bblog_offset;   /* sector offset from superblock to bblog,
+                                * signed - not unsigned */
+
+       /* array state information - 64 bytes */
+       __le64  utime;          /* 40 bits second, 24 bits microseconds */
+       __le64  events;         /* incremented when superblock updated */
+       __le64  resync_offset;  /* data before this offset (from data_offset) known to be in sync */
+       __le32  sb_csum;        /* checksum up to devs[max_dev] */
+       __le32  max_dev;        /* size of devs[] array to consider */
+       __u8    pad3[64-32];    /* set to 0 when writing */
+
+       /* device state information. Indexed by dev_number.
+        * 2 bytes per device
+        * Note there are no per-device state flags. State information is rolled
+        * into the 'roles' value.  If a device is spare or faulty, then it doesn't
+        * have a meaningful role.
+        */
+       __le16  dev_roles[0];   /* role in array, or 0xffff for a spare, or 0xfffe for faulty */
+};
+
+/* feature_map bits */
+#define MD_FEATURE_BITMAP_OFFSET       1
+#define        MD_FEATURE_RECOVERY_OFFSET      2 /* recovery_offset is present and
+                                          * must be honoured
+                                          */
+#define        MD_FEATURE_RESHAPE_ACTIVE       4
+#define        MD_FEATURE_BAD_BLOCKS           8 /* badblock list is not empty */
+#define        MD_FEATURE_REPLACEMENT          16 /* This device is replacing an
+                                           * active device with same 'role'.
+                                           * 'recovery_offset' is also set.
+                                           */
+#define        MD_FEATURE_RESHAPE_BACKWARDS    32 /* Reshape doesn't change number
+                                           * of devices, but is going
+                                           * backwards anyway.
+                                           */
+#define        MD_FEATURE_NEW_OFFSET           64 /* new_offset must be honoured */
+#define        MD_FEATURE_RECOVERY_BITMAP      128 /* recovery that is happening
+                                            * is guided by bitmap.
+                                            */
+#define MD_FEATURE_CLUSTERED           256 /* clustered MD */
+#define        MD_FEATURE_JOURNAL              512 /* support write cache */
+#define        MD_FEATURE_ALL                  (MD_FEATURE_BITMAP_OFFSET       \
+                                       |MD_FEATURE_RECOVERY_OFFSET     \
+                                       |MD_FEATURE_RESHAPE_ACTIVE      \
+                                       |MD_FEATURE_BAD_BLOCKS          \
+                                       |MD_FEATURE_REPLACEMENT         \
+                                       |MD_FEATURE_RESHAPE_BACKWARDS   \
+                                       |MD_FEATURE_NEW_OFFSET          \
+                                       |MD_FEATURE_RECOVERY_BITMAP     \
+                                       |MD_FEATURE_CLUSTERED           \
+                                       |MD_FEATURE_JOURNAL             \
+                                       )
+
+struct r5l_payload_header {
+       __le16 type;
+       __le16 flags;
+} __attribute__ ((__packed__));
+
+enum r5l_payload_type {
+       R5LOG_PAYLOAD_DATA = 0,
+       R5LOG_PAYLOAD_PARITY = 1,
+       R5LOG_PAYLOAD_FLUSH = 2,
+};
+
+struct r5l_payload_data_parity {
+       struct r5l_payload_header header;
+       __le32 size;            /* sector. data/parity size. each 4k
+                                * has a checksum */
+       __le64 location;        /* sector. For data, it's raid sector. For
+                                * parity, it's stripe sector */
+       __le32 checksum[];
+} __attribute__ ((__packed__));
+
+enum r5l_payload_data_parity_flag {
+       R5LOG_PAYLOAD_FLAG_DISCARD = 1, /* payload is discard */
+       /*
+        * RESHAPED/RESHAPING is only set when there is reshape activity. Note,
+        * both data/parity of a stripe should have the same flag set
+        *
+        * RESHAPED: reshape is running, and this stripe finished reshape
+        * RESHAPING: reshape is running, and this stripe isn't reshaped
+        */
+       R5LOG_PAYLOAD_FLAG_RESHAPED = 2,
+       R5LOG_PAYLOAD_FLAG_RESHAPING = 3,
+};
+
+struct r5l_payload_flush {
+       struct r5l_payload_header header;
+       __le32 size; /* flush_stripes size, bytes */
+       __le64 flush_stripes[];
+} __attribute__ ((__packed__));
+
+enum r5l_payload_flush_flag {
+       R5LOG_PAYLOAD_FLAG_FLUSH_STRIPE = 1, /* data represents whole stripe */
+};
+
+struct r5l_meta_block {
+       __le32 magic;
+       __le32 checksum;
+       __u8 version;
+       __u8 __zero_pading_1;
+       __le16 __zero_pading_2;
+       __le32 meta_size; /* whole size of the block */
+
+       __le64 seq;
+       __le64 position; /* sector, start from rdev->data_offset, current position */
+       struct r5l_payload_header payloads[];
+} __attribute__ ((__packed__));
+
+#define R5LOG_VERSION 0x1
+#define R5LOG_MAGIC 0x6433c509
+#endif
diff --git a/lib/libdss-include/include/linux/raid/md_u.h b/lib/libdss-include/include/linux/raid/md_u.h
new file mode 100644 (file)
index 0000000..162e12d
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+   md_u.h : user <=> kernel API between Linux raidtools and RAID drivers
+          Copyright (C) 1998 Ingo Molnar
+         
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+   
+   You should have received a copy of the GNU General Public License
+   (for example /usr/src/linux/COPYING); if not, write to the Free
+   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#ifndef _MD_U_H
+#define _MD_U_H
+
+/*
+ * Different major versions are not compatible.
+ * Different minor versions are only downward compatible.
+ * Different patchlevel versions are downward and upward compatible.
+ */
+#define MD_MAJOR_VERSION                0
+#define MD_MINOR_VERSION                90
+/*
+ * MD_PATCHLEVEL_VERSION indicates kernel functionality.
+ * >=1 means different superblock formats are selectable using SET_ARRAY_INFO
+ *     and major_version/minor_version accordingly
+ * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT
+ *     in the super status byte
+ * >=3 means that bitmap superblock version 4 is supported, which uses
+ *     little-ending representation rather than host-endian
+ */
+#define MD_PATCHLEVEL_VERSION           3
+
+/* ioctls */
+
+/* status */
+#define RAID_VERSION           _IOR (MD_MAJOR, 0x10, mdu_version_t)
+#define GET_ARRAY_INFO         _IOR (MD_MAJOR, 0x11, mdu_array_info_t)
+#define GET_DISK_INFO          _IOR (MD_MAJOR, 0x12, mdu_disk_info_t)
+#define RAID_AUTORUN           _IO (MD_MAJOR, 0x14)
+#define GET_BITMAP_FILE                _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t)
+
+/* configuration */
+#define CLEAR_ARRAY            _IO (MD_MAJOR, 0x20)
+#define ADD_NEW_DISK           _IOW (MD_MAJOR, 0x21, mdu_disk_info_t)
+#define HOT_REMOVE_DISK                _IO (MD_MAJOR, 0x22)
+#define SET_ARRAY_INFO         _IOW (MD_MAJOR, 0x23, mdu_array_info_t)
+#define SET_DISK_INFO          _IO (MD_MAJOR, 0x24)
+#define WRITE_RAID_INFO                _IO (MD_MAJOR, 0x25)
+#define UNPROTECT_ARRAY                _IO (MD_MAJOR, 0x26)
+#define PROTECT_ARRAY          _IO (MD_MAJOR, 0x27)
+#define HOT_ADD_DISK           _IO (MD_MAJOR, 0x28)
+#define SET_DISK_FAULTY                _IO (MD_MAJOR, 0x29)
+#define HOT_GENERATE_ERROR     _IO (MD_MAJOR, 0x2a)
+#define SET_BITMAP_FILE                _IOW (MD_MAJOR, 0x2b, int)
+
+/* usage */
+#define RUN_ARRAY              _IOW (MD_MAJOR, 0x30, mdu_param_t)
+/*  0x31 was START_ARRAY  */
+#define STOP_ARRAY             _IO (MD_MAJOR, 0x32)
+#define STOP_ARRAY_RO          _IO (MD_MAJOR, 0x33)
+#define RESTART_ARRAY_RW       _IO (MD_MAJOR, 0x34)
+#define CLUSTERED_DISK_NACK    _IO (MD_MAJOR, 0x35)
+
+/* 63 partitions with the alternate major number (mdp) */
+#define MdpMinorShift 6
+
+typedef struct mdu_version_s {
+       int major;
+       int minor;
+       int patchlevel;
+} mdu_version_t;
+
+typedef struct mdu_array_info_s {
+       /*
+        * Generic constant information
+        */
+       int major_version;
+       int minor_version;
+       int patch_version;
+       int ctime;
+       int level;
+       int size;
+       int nr_disks;
+       int raid_disks;
+       int md_minor;
+       int not_persistent;
+
+       /*
+        * Generic state information
+        */
+       int utime;              /*  0 Superblock update time                  */
+       int state;              /*  1 State bits (clean, ...)                 */
+       int active_disks;       /*  2 Number of currently active disks        */
+       int working_disks;      /*  3 Number of working disks                 */
+       int failed_disks;       /*  4 Number of failed disks                  */
+       int spare_disks;        /*  5 Number of spare disks                   */
+
+       /*
+        * Personality information
+        */
+       int layout;             /*  0 the array's physical layout             */
+       int chunk_size; /*  1 chunk size in bytes                     */
+
+} mdu_array_info_t;
+
+/* non-obvious values for 'level' */
+#define        LEVEL_MULTIPATH         (-4)
+#define        LEVEL_LINEAR            (-1)
+#define        LEVEL_FAULTY            (-5)
+
+/* we need a value for 'no level specified' and 0
+ * means 'raid0', so we need something else.  This is
+ * for internal use only
+ */
+#define        LEVEL_NONE              (-1000000)
+
+typedef struct mdu_disk_info_s {
+       /*
+        * configuration/status of one particular disk
+        */
+       int number;
+       int major;
+       int minor;
+       int raid_disk;
+       int state;
+
+} mdu_disk_info_t;
+
+typedef struct mdu_start_info_s {
+       /*
+        * configuration/status of one particular disk
+        */
+       int major;
+       int minor;
+       int raid_disk;
+       int state;
+
+} mdu_start_info_t;
+
+typedef struct mdu_bitmap_file_s
+{
+       char pathname[4096];
+} mdu_bitmap_file_t;
+
+typedef struct mdu_param_s
+{
+       int                     personality;    /* 1,2,3,4 */
+       int                     chunk_size;     /* in bytes */
+       int                     max_fault;      /* unused for now */
+} mdu_param_t;
+
+#endif /* _MD_U_H */
diff --git a/lib/libdss-include/include/linux/random.h b/lib/libdss-include/include/linux/random.h
new file mode 100644 (file)
index 0000000..1f166ce
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * include/linux/random.h
+ *
+ * Include file for the random number generator.
+ */
+
+#ifndef _LINUX_RANDOM_H
+#define _LINUX_RANDOM_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/irqnr.h>
+
+/* ioctl()'s for the random number generator */
+
+/* Get the entropy count. */
+#define RNDGETENTCNT   _IOR( 'R', 0x00, int )
+
+/* Add to (or subtract from) the entropy count.  (Superuser only.) */
+#define RNDADDTOENTCNT _IOW( 'R', 0x01, int )
+
+/* Get the contents of the entropy pool.  (Superuser only.) */
+#define RNDGETPOOL     _IOR( 'R', 0x02, int [2] )
+
+/* 
+ * Write bytes into the entropy pool and add to the entropy count.
+ * (Superuser only.)
+ */
+#define RNDADDENTROPY  _IOW( 'R', 0x03, int [2] )
+
+/* Clear entropy count to 0.  (Superuser only.) */
+#define RNDZAPENTCNT   _IO( 'R', 0x04 )
+
+/* Clear the entropy pool and associated counters.  (Superuser only.) */
+#define RNDCLEARPOOL   _IO( 'R', 0x06 )
+
+struct rand_pool_info {
+       int     entropy_count;
+       int     buf_size;
+       __u32   buf[0];
+};
+
+/*
+ * Flags for getrandom(2)
+ *
+ * GRND_NONBLOCK       Don't block and return EAGAIN instead
+ * GRND_RANDOM         Use the /dev/random pool instead of /dev/urandom
+ */
+#define GRND_NONBLOCK  0x0001
+#define GRND_RANDOM    0x0002
+
+#endif /* _LINUX_RANDOM_H */
diff --git a/lib/libdss-include/include/linux/raw.h b/lib/libdss-include/include/linux/raw.h
new file mode 100644 (file)
index 0000000..62d543e
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef __LINUX_RAW_H
+#define __LINUX_RAW_H
+
+#include <linux/types.h>
+
+#define RAW_SETBIND    _IO( 0xac, 0 )
+#define RAW_GETBIND    _IO( 0xac, 1 )
+
+struct raw_config_request 
+{
+       int     raw_minor;
+       __u64   block_major;
+       __u64   block_minor;
+};
+
+#define MAX_RAW_MINORS CONFIG_MAX_RAW_DEVS
+
+#endif /* __LINUX_RAW_H */
diff --git a/lib/libdss-include/include/linux/rds.h b/lib/libdss-include/include/linux/rds.h
new file mode 100644 (file)
index 0000000..0f9265c
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * Copyright (c) 2008 Oracle.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef _LINUX_RDS_H
+#define _LINUX_RDS_H
+
+#include <linux/types.h>
+
+#define RDS_IB_ABI_VERSION             0x301
+
+#define        SOL_RDS         276
+
+/*
+ * setsockopt/getsockopt for SOL_RDS
+ */
+#define RDS_CANCEL_SENT_TO             1
+#define RDS_GET_MR                     2
+#define RDS_FREE_MR                    3
+/* deprecated: RDS_BARRIER 4 */
+#define RDS_RECVERR                    5
+#define RDS_CONG_MONITOR               6
+#define RDS_GET_MR_FOR_DEST            7
+#define SO_RDS_TRANSPORT               8
+
+/* supported values for SO_RDS_TRANSPORT */
+#define        RDS_TRANS_IB    0
+#define        RDS_TRANS_IWARP 1
+#define        RDS_TRANS_TCP   2
+#define RDS_TRANS_COUNT        3
+#define        RDS_TRANS_NONE  (~0)
+
+/*
+ * Control message types for SOL_RDS.
+ *
+ * CMSG_RDMA_ARGS (sendmsg)
+ *     Request a RDMA transfer to/from the specified
+ *     memory ranges.
+ *     The cmsg_data is a struct rds_rdma_args.
+ * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg)
+ *     Kernel informs application about intended
+ *     source/destination of a RDMA transfer
+ * RDS_CMSG_RDMA_MAP (sendmsg)
+ *     Application asks kernel to map the given
+ *     memory range into a IB MR, and send the
+ *     R_Key along in an RDS extension header.
+ *     The cmsg_data is a struct rds_get_mr_args,
+ *     the same as for the GET_MR setsockopt.
+ * RDS_CMSG_RDMA_STATUS (recvmsg)
+ *     Returns the status of a completed RDMA operation.
+ */
+#define RDS_CMSG_RDMA_ARGS             1
+#define RDS_CMSG_RDMA_DEST             2
+#define RDS_CMSG_RDMA_MAP              3
+#define RDS_CMSG_RDMA_STATUS           4
+#define RDS_CMSG_CONG_UPDATE           5
+#define RDS_CMSG_ATOMIC_FADD           6
+#define RDS_CMSG_ATOMIC_CSWP           7
+#define RDS_CMSG_MASKED_ATOMIC_FADD    8
+#define RDS_CMSG_MASKED_ATOMIC_CSWP    9
+
+#define RDS_INFO_FIRST                 10000
+#define RDS_INFO_COUNTERS              10000
+#define RDS_INFO_CONNECTIONS           10001
+/* 10002 aka RDS_INFO_FLOWS is deprecated */
+#define RDS_INFO_SEND_MESSAGES         10003
+#define RDS_INFO_RETRANS_MESSAGES       10004
+#define RDS_INFO_RECV_MESSAGES          10005
+#define RDS_INFO_SOCKETS                10006
+#define RDS_INFO_TCP_SOCKETS            10007
+#define RDS_INFO_IB_CONNECTIONS                10008
+#define RDS_INFO_CONNECTION_STATS      10009
+#define RDS_INFO_IWARP_CONNECTIONS     10010
+#define RDS_INFO_LAST                  10010
+
+struct rds_info_counter {
+       uint8_t name[32];
+       uint64_t        value;
+} __attribute__((packed));
+
+#define RDS_INFO_CONNECTION_FLAG_SENDING       0x01
+#define RDS_INFO_CONNECTION_FLAG_CONNECTING    0x02
+#define RDS_INFO_CONNECTION_FLAG_CONNECTED     0x04
+
+#define TRANSNAMSIZ    16
+
+struct rds_info_connection {
+       uint64_t        next_tx_seq;
+       uint64_t        next_rx_seq;
+       __be32          laddr;
+       __be32          faddr;
+       uint8_t transport[TRANSNAMSIZ];         /* null term ascii */
+       uint8_t flags;
+} __attribute__((packed));
+
+#define RDS_INFO_MESSAGE_FLAG_ACK               0x01
+#define RDS_INFO_MESSAGE_FLAG_FAST_ACK          0x02
+
+struct rds_info_message {
+       uint64_t        seq;
+       uint32_t        len;
+       __be32          laddr;
+       __be32          faddr;
+       __be16          lport;
+       __be16          fport;
+       uint8_t flags;
+} __attribute__((packed));
+
+struct rds_info_socket {
+       uint32_t        sndbuf;
+       __be32          bound_addr;
+       __be32          connected_addr;
+       __be16          bound_port;
+       __be16          connected_port;
+       uint32_t        rcvbuf;
+       uint64_t        inum;
+} __attribute__((packed));
+
+struct rds_info_tcp_socket {
+       __be32          local_addr;
+       __be16          local_port;
+       __be32          peer_addr;
+       __be16          peer_port;
+       uint64_t       hdr_rem;
+       uint64_t       data_rem;
+       uint32_t       last_sent_nxt;
+       uint32_t       last_expected_una;
+       uint32_t       last_seen_una;
+} __attribute__((packed));
+
+#define RDS_IB_GID_LEN 16
+struct rds_info_rdma_connection {
+       __be32          src_addr;
+       __be32          dst_addr;
+       uint8_t         src_gid[RDS_IB_GID_LEN];
+       uint8_t         dst_gid[RDS_IB_GID_LEN];
+
+       uint32_t        max_send_wr;
+       uint32_t        max_recv_wr;
+       uint32_t        max_send_sge;
+       uint32_t        rdma_mr_max;
+       uint32_t        rdma_mr_size;
+};
+
+/*
+ * Congestion monitoring.
+ * Congestion control in RDS happens at the host connection
+ * level by exchanging a bitmap marking congested ports.
+ * By default, a process sleeping in poll() is always woken
+ * up when the congestion map is updated.
+ * With explicit monitoring, an application can have more
+ * fine-grained control.
+ * The application installs a 64bit mask value in the socket,
+ * where each bit corresponds to a group of ports.
+ * When a congestion update arrives, RDS checks the set of
+ * ports that are now uncongested against the list bit mask
+ * installed in the socket, and if they overlap, we queue a
+ * cong_notification on the socket.
+ *
+ * To install the congestion monitor bitmask, use RDS_CONG_MONITOR
+ * with the 64bit mask.
+ * Congestion updates are received via RDS_CMSG_CONG_UPDATE
+ * control messages.
+ *
+ * The correspondence between bits and ports is
+ *     1 << (portnum % 64)
+ */
+#define RDS_CONG_MONITOR_SIZE  64
+#define RDS_CONG_MONITOR_BIT(port)  (((unsigned int) port) % RDS_CONG_MONITOR_SIZE)
+#define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port))
+
+/*
+ * RDMA related types
+ */
+
+/*
+ * This encapsulates a remote memory location.
+ * In the current implementation, it contains the R_Key
+ * of the remote memory region, and the offset into it
+ * (so that the application does not have to worry about
+ * alignment).
+ */
+typedef uint64_t       rds_rdma_cookie_t;
+
+struct rds_iovec {
+       uint64_t        addr;
+       uint64_t        bytes;
+};
+
+struct rds_get_mr_args {
+       struct rds_iovec vec;
+       uint64_t        cookie_addr;
+       uint64_t        flags;
+};
+
+struct rds_get_mr_for_dest_args {
+       struct sockaddr_storage dest_addr;
+       struct rds_iovec        vec;
+       uint64_t                cookie_addr;
+       uint64_t                flags;
+};
+
+struct rds_free_mr_args {
+       rds_rdma_cookie_t cookie;
+       uint64_t        flags;
+};
+
+struct rds_rdma_args {
+       rds_rdma_cookie_t cookie;
+       struct rds_iovec remote_vec;
+       uint64_t        local_vec_addr;
+       uint64_t        nr_local;
+       uint64_t        flags;
+       uint64_t        user_token;
+};
+
+struct rds_atomic_args {
+       rds_rdma_cookie_t cookie;
+       uint64_t        local_addr;
+       uint64_t        remote_addr;
+       union {
+               struct {
+                       uint64_t        compare;
+                       uint64_t        swap;
+               } cswp;
+               struct {
+                       uint64_t        add;
+               } fadd;
+               struct {
+                       uint64_t        compare;
+                       uint64_t        swap;
+                       uint64_t        compare_mask;
+                       uint64_t        swap_mask;
+               } m_cswp;
+               struct {
+                       uint64_t        add;
+                       uint64_t        nocarry_mask;
+               } m_fadd;
+       };
+       uint64_t        flags;
+       uint64_t        user_token;
+};
+
+struct rds_rdma_notify {
+       uint64_t        user_token;
+       int32_t         status;
+};
+
+#define RDS_RDMA_SUCCESS       0
+#define RDS_RDMA_REMOTE_ERROR  1
+#define RDS_RDMA_CANCELED      2
+#define RDS_RDMA_DROPPED       3
+#define RDS_RDMA_OTHER_ERROR   4
+
+/*
+ * Common set of flags for all RDMA related structs
+ */
+#define RDS_RDMA_READWRITE     0x0001
+#define RDS_RDMA_FENCE         0x0002  /* use FENCE for immediate send */
+#define RDS_RDMA_INVALIDATE    0x0004  /* invalidate R_Key after freeing MR */
+#define RDS_RDMA_USE_ONCE      0x0008  /* free MR after use */
+#define RDS_RDMA_DONTWAIT      0x0010  /* Don't wait in SET_BARRIER */
+#define RDS_RDMA_NOTIFY_ME     0x0020  /* Notify when operation completes */
+#define RDS_RDMA_SILENT                0x0040  /* Do not interrupt remote */
+
+#endif /* IB_RDS_H */
diff --git a/lib/libdss-include/include/linux/reboot.h b/lib/libdss-include/include/linux/reboot.h
new file mode 100644 (file)
index 0000000..aa33674
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_REBOOT_H
+#define _LINUX_REBOOT_H
+
+/*
+ * Magic values required to use _reboot() system call.
+ */
+
+#define        LINUX_REBOOT_MAGIC1     0xfee1dead
+#define        LINUX_REBOOT_MAGIC2     672274793
+#define        LINUX_REBOOT_MAGIC2A    85072278
+#define        LINUX_REBOOT_MAGIC2B    369367448
+#define        LINUX_REBOOT_MAGIC2C    537993216
+
+
+/*
+ * Commands accepted by the _reboot() system call.
+ *
+ * RESTART     Restart system using default command and mode.
+ * HALT        Stop OS and give system control to ROM monitor, if any.
+ * CAD_ON      Ctrl-Alt-Del sequence causes RESTART command.
+ * CAD_OFF     Ctrl-Alt-Del sequence sends SIGINT to init task.
+ * POWER_OFF   Stop OS and remove all power from system, if possible.
+ * RESTART2    Restart system using given command string.
+ * SW_SUSPEND  Suspend system using software suspend if compiled in.
+ * KEXEC       Restart system using a previously loaded Linux kernel
+ */
+
+#define        LINUX_REBOOT_CMD_RESTART        0x01234567
+#define        LINUX_REBOOT_CMD_HALT           0xCDEF0123
+#define        LINUX_REBOOT_CMD_CAD_ON         0x89ABCDEF
+#define        LINUX_REBOOT_CMD_CAD_OFF        0x00000000
+#define        LINUX_REBOOT_CMD_POWER_OFF      0x4321FEDC
+#define        LINUX_REBOOT_CMD_RESTART2       0xA1B2C3D4
+#define        LINUX_REBOOT_CMD_SW_SUSPEND     0xD000FCE2
+#define        LINUX_REBOOT_CMD_KEXEC          0x45584543
+
+
+
+#endif /* _LINUX_REBOOT_H */
diff --git a/lib/libdss-include/include/linux/reiserfs_fs.h b/lib/libdss-include/include/linux/reiserfs_fs.h
new file mode 100644 (file)
index 0000000..ea3700c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details
+ */
+#ifndef _LINUX_REISER_FS_H
+#define _LINUX_REISER_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ *  include/linux/reiser_fs.h
+ *
+ *  Reiser File System constants and structures
+ *
+ */
+
+/* ioctl's command */
+#define REISERFS_IOC_UNPACK            _IOW(0xCD,1,long)
+/* define following flags to be the same as in ext2, so that chattr(1),
+   lsattr(1) will work with us. */
+#define REISERFS_IOC_GETFLAGS          FS_IOC_GETFLAGS
+#define REISERFS_IOC_SETFLAGS          FS_IOC_SETFLAGS
+#define REISERFS_IOC_GETVERSION                FS_IOC_GETVERSION
+#define REISERFS_IOC_SETVERSION                FS_IOC_SETVERSION
+
+#endif                         /* _LINUX_REISER_FS_H */
diff --git a/lib/libdss-include/include/linux/reiserfs_xattr.h b/lib/libdss-include/include/linux/reiserfs_xattr.h
new file mode 100644 (file)
index 0000000..38fdd64
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+  File: linux/reiserfs_xattr.h
+*/
+
+#ifndef _LINUX_REISERFS_XATTR_H
+#define _LINUX_REISERFS_XATTR_H
+
+#include <linux/types.h>
+
+/* Magic value in header */
+#define REISERFS_XATTR_MAGIC 0x52465841        /* "RFXA" */
+
+struct reiserfs_xattr_header {
+       __le32 h_magic;         /* magic number for identification */
+       __le32 h_hash;          /* hash of the value */
+};
+
+struct reiserfs_security_handle {
+       const char *name;
+       void *value;
+       size_t length;
+};
+
+#endif  /*  _LINUX_REISERFS_XATTR_H  */
diff --git a/lib/libdss-include/include/linux/resource.h b/lib/libdss-include/include/linux/resource.h
new file mode 100644 (file)
index 0000000..5e036db
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef _LINUX_RESOURCE_H
+#define _LINUX_RESOURCE_H
+
+#include <linux/time.h>
+#include <linux/types.h>
+
+/*
+ * Resource control/accounting header file for linux
+ */
+
+/*
+ * Definition of struct rusage taken from BSD 4.3 Reno
+ * 
+ * We don't support all of these yet, but we might as well have them....
+ * Otherwise, each time we add new items, programs which depend on this
+ * structure will lose.  This reduces the chances of that happening.
+ */
+#define        RUSAGE_SELF     0
+#define        RUSAGE_CHILDREN (-1)
+#define RUSAGE_BOTH    (-2)            /* sys_wait4() uses this */
+#define        RUSAGE_THREAD   1               /* only the calling thread */
+
+struct rusage {
+       struct timeval ru_utime;        /* user time used */
+       struct timeval ru_stime;        /* system time used */
+       __kernel_long_t ru_maxrss;      /* maximum resident set size */
+       __kernel_long_t ru_ixrss;       /* integral shared memory size */
+       __kernel_long_t ru_idrss;       /* integral unshared data size */
+       __kernel_long_t ru_isrss;       /* integral unshared stack size */
+       __kernel_long_t ru_minflt;      /* page reclaims */
+       __kernel_long_t ru_majflt;      /* page faults */
+       __kernel_long_t ru_nswap;       /* swaps */
+       __kernel_long_t ru_inblock;     /* block input operations */
+       __kernel_long_t ru_oublock;     /* block output operations */
+       __kernel_long_t ru_msgsnd;      /* messages sent */
+       __kernel_long_t ru_msgrcv;      /* messages received */
+       __kernel_long_t ru_nsignals;    /* signals received */
+       __kernel_long_t ru_nvcsw;       /* voluntary context switches */
+       __kernel_long_t ru_nivcsw;      /* involuntary " */
+};
+
+struct rlimit {
+       __kernel_ulong_t        rlim_cur;
+       __kernel_ulong_t        rlim_max;
+};
+
+#define RLIM64_INFINITY                (~0ULL)
+
+struct rlimit64 {
+       __u64 rlim_cur;
+       __u64 rlim_max;
+};
+
+#define        PRIO_MIN        (-20)
+#define        PRIO_MAX        20
+
+#define        PRIO_PROCESS    0
+#define        PRIO_PGRP       1
+#define        PRIO_USER       2
+
+/*
+ * Limit the stack by to some sane default: root can always
+ * increase this limit if needed..  8MB seems reasonable.
+ */
+#define _STK_LIM       (8*1024*1024)
+
+/*
+ * GPG2 wants 64kB of mlocked memory, to make sure pass phrases
+ * and other sensitive information are never written to disk.
+ */
+#define MLOCK_LIMIT    ((PAGE_SIZE > 64*1024) ? PAGE_SIZE : 64*1024)
+
+/*
+ * Due to binary compatibility, the actual resource numbers
+ * may be different for different linux versions..
+ */
+#include <asm/resource.h>
+
+
+#endif /* _LINUX_RESOURCE_H */
diff --git a/lib/libdss-include/include/linux/rfkill.h b/lib/libdss-include/include/linux/rfkill.h
new file mode 100644 (file)
index 0000000..557cde2
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2006 - 2007 Ivo van Doorn
+ * Copyright (C) 2007 Dmitry Torokhov
+ * Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef __RFKILL_H
+#define __RFKILL_H
+
+
+#include <linux/types.h>
+
+/* define userspace visible states */
+#define RFKILL_STATE_SOFT_BLOCKED      0
+#define RFKILL_STATE_UNBLOCKED         1
+#define RFKILL_STATE_HARD_BLOCKED      2
+
+/**
+ * enum rfkill_type - type of rfkill switch.
+ *
+ * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type)
+ * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device.
+ * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device.
+ * @RFKILL_TYPE_UWB: switch is on a ultra wideband device.
+ * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device.
+ * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device.
+ * @RFKILL_TYPE_GPS: switch is on a GPS device.
+ * @RFKILL_TYPE_FM: switch is on a FM radio device.
+ * @RFKILL_TYPE_NFC: switch is on an NFC device.
+ * @NUM_RFKILL_TYPES: number of defined rfkill types
+ */
+enum rfkill_type {
+       RFKILL_TYPE_ALL = 0,
+       RFKILL_TYPE_WLAN,
+       RFKILL_TYPE_BLUETOOTH,
+       RFKILL_TYPE_UWB,
+       RFKILL_TYPE_WIMAX,
+       RFKILL_TYPE_WWAN,
+       RFKILL_TYPE_GPS,
+       RFKILL_TYPE_FM,
+       RFKILL_TYPE_NFC,
+       NUM_RFKILL_TYPES,
+};
+
+/**
+ * enum rfkill_operation - operation types
+ * @RFKILL_OP_ADD: a device was added
+ * @RFKILL_OP_DEL: a device was removed
+ * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device
+ * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all)
+ */
+enum rfkill_operation {
+       RFKILL_OP_ADD = 0,
+       RFKILL_OP_DEL,
+       RFKILL_OP_CHANGE,
+       RFKILL_OP_CHANGE_ALL,
+};
+
+/**
+ * struct rfkill_event - events for userspace on /dev/rfkill
+ * @idx: index of dev rfkill
+ * @type: type of the rfkill struct
+ * @op: operation code
+ * @hard: hard state (0/1)
+ * @soft: soft state (0/1)
+ *
+ * Structure used for userspace communication on /dev/rfkill,
+ * used for events from the kernel and control to the kernel.
+ */
+struct rfkill_event {
+       __u32 idx;
+       __u8  type;
+       __u8  op;
+       __u8  soft, hard;
+} __attribute__((packed));
+
+/*
+ * We are planning to be backward and forward compatible with changes
+ * to the event struct, by adding new, optional, members at the end.
+ * When reading an event (whether the kernel from userspace or vice
+ * versa) we need to accept anything that's at least as large as the
+ * version 1 event size, but might be able to accept other sizes in
+ * the future.
+ *
+ * One exception is the kernel -- we already have two event sizes in
+ * that we've made the 'hard' member optional since our only option
+ * is to ignore it anyway.
+ */
+#define RFKILL_EVENT_SIZE_V1   8
+
+/* ioctl for turning off rfkill-input (if present) */
+#define RFKILL_IOC_MAGIC       'R'
+#define RFKILL_IOC_NOINPUT     1
+#define RFKILL_IOCTL_NOINPUT   _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT)
+
+/* and that's all userspace gets */
+
+#endif /* __RFKILL_H */
diff --git a/lib/libdss-include/include/linux/romfs_fs.h b/lib/libdss-include/include/linux/romfs_fs.h
new file mode 100644 (file)
index 0000000..5f57f93
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __LINUX_ROMFS_FS_H
+#define __LINUX_ROMFS_FS_H
+
+#include <linux/types.h>
+#include <linux/fs.h>
+
+/* The basic structures of the romfs filesystem */
+
+#define ROMBSIZE BLOCK_SIZE
+#define ROMBSBITS BLOCK_SIZE_BITS
+#define ROMBMASK (ROMBSIZE-1)
+#define ROMFS_MAGIC 0x7275
+
+#define ROMFS_MAXFN 128
+
+#define __mkw(h,l) (((h)&0x00ff)<< 8|((l)&0x00ff))
+#define __mkl(h,l) (((h)&0xffff)<<16|((l)&0xffff))
+#define __mk4(a,b,c,d) cpu_to_be32(__mkl(__mkw(a,b),__mkw(c,d)))
+#define ROMSB_WORD0 __mk4('-','r','o','m')
+#define ROMSB_WORD1 __mk4('1','f','s','-')
+
+/* On-disk "super block" */
+
+struct romfs_super_block {
+       __be32 word0;
+       __be32 word1;
+       __be32 size;
+       __be32 checksum;
+       char name[0];           /* volume name */
+};
+
+/* On disk inode */
+
+struct romfs_inode {
+       __be32 next;            /* low 4 bits see ROMFH_ */
+       __be32 spec;
+       __be32 size;
+       __be32 checksum;
+       char name[0];
+};
+
+#define ROMFH_TYPE 7
+#define ROMFH_HRD 0
+#define ROMFH_DIR 1
+#define ROMFH_REG 2
+#define ROMFH_SYM 3
+#define ROMFH_BLK 4
+#define ROMFH_CHR 5
+#define ROMFH_SCK 6
+#define ROMFH_FIF 7
+#define ROMFH_EXEC 8
+
+/* Alignment */
+
+#define ROMFH_SIZE 16
+#define ROMFH_PAD (ROMFH_SIZE-1)
+#define ROMFH_MASK (~ROMFH_PAD)
+
+#endif
diff --git a/lib/libdss-include/include/linux/rose.h b/lib/libdss-include/include/linux/rose.h
new file mode 100644 (file)
index 0000000..1fcfe95
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * These are the public elements of the Linux kernel Rose implementation.
+ * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
+ * definition of the ax25_address structure.
+ */
+
+#ifndef        ROSE_KERNEL_H
+#define        ROSE_KERNEL_H
+
+#include <linux/socket.h>
+#include <linux/ax25.h>
+
+#define ROSE_MTU       251
+
+#define ROSE_MAX_DIGIS 6
+
+#define        ROSE_DEFER      1
+#define ROSE_T1                2
+#define        ROSE_T2         3
+#define        ROSE_T3         4
+#define        ROSE_IDLE       5
+#define        ROSE_QBITINCL   6
+#define        ROSE_HOLDBACK   7
+
+#define        SIOCRSGCAUSE            (SIOCPROTOPRIVATE+0)
+#define        SIOCRSSCAUSE            (SIOCPROTOPRIVATE+1)
+#define        SIOCRSL2CALL            (SIOCPROTOPRIVATE+2)
+#define        SIOCRSSL2CALL           (SIOCPROTOPRIVATE+2)
+#define        SIOCRSACCEPT            (SIOCPROTOPRIVATE+3)
+#define        SIOCRSCLRRT             (SIOCPROTOPRIVATE+4)
+#define        SIOCRSGL2CALL           (SIOCPROTOPRIVATE+5)
+#define        SIOCRSGFACILITIES       (SIOCPROTOPRIVATE+6)
+
+#define        ROSE_DTE_ORIGINATED     0x00
+#define        ROSE_NUMBER_BUSY        0x01
+#define        ROSE_INVALID_FACILITY   0x03
+#define        ROSE_NETWORK_CONGESTION 0x05
+#define        ROSE_OUT_OF_ORDER       0x09
+#define        ROSE_ACCESS_BARRED      0x0B
+#define        ROSE_NOT_OBTAINABLE     0x0D
+#define        ROSE_REMOTE_PROCEDURE   0x11
+#define        ROSE_LOCAL_PROCEDURE    0x13
+#define        ROSE_SHIP_ABSENT        0x39
+
+typedef struct {
+       char            rose_addr[5];
+} rose_address;
+
+struct sockaddr_rose {
+       __kernel_sa_family_t srose_family;
+       rose_address    srose_addr;
+       ax25_address    srose_call;
+       int             srose_ndigis;
+       ax25_address    srose_digi;
+};
+
+struct full_sockaddr_rose {
+       __kernel_sa_family_t srose_family;
+       rose_address    srose_addr;
+       ax25_address    srose_call;
+       unsigned int    srose_ndigis;
+       ax25_address    srose_digis[ROSE_MAX_DIGIS];
+};
+
+struct rose_route_struct {
+       rose_address    address;
+       unsigned short  mask;
+       ax25_address    neighbour;
+       char            device[16];
+       unsigned char   ndigis;
+       ax25_address    digipeaters[AX25_MAX_DIGIS];
+};
+
+struct rose_cause_struct {
+       unsigned char   cause;
+       unsigned char   diagnostic;
+};
+
+struct rose_facilities_struct {
+       rose_address    source_addr,   dest_addr;
+       ax25_address    source_call,   dest_call;
+       unsigned char   source_ndigis, dest_ndigis;
+       ax25_address    source_digis[ROSE_MAX_DIGIS];
+       ax25_address    dest_digis[ROSE_MAX_DIGIS];
+       unsigned int    rand;
+       rose_address    fail_addr;
+       ax25_address    fail_call;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/route.h b/lib/libdss-include/include/linux/route.h
new file mode 100644 (file)
index 0000000..11abf54
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the IP router interface.
+ *
+ * Version:    @(#)route.h     1.0.3   05/27/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
+ *             for the purposes of compatibility only.
+ *
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ * Changes:
+ *              Mike McLagan    :       Routing by source
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_ROUTE_H
+#define _LINUX_ROUTE_H
+
+#include <linux/if.h>
+
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry {
+       unsigned long   rt_pad1;
+       struct sockaddr rt_dst;         /* target address               */
+       struct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */
+       struct sockaddr rt_genmask;     /* target network mask (IP)     */
+       unsigned short  rt_flags;
+       short           rt_pad2;
+       unsigned long   rt_pad3;
+       void            *rt_pad4;
+       short           rt_metric;      /* +1 for binary compatibility! */
+       char *rt_dev;   /* forcing the device at add    */
+       unsigned long   rt_mtu;         /* per route MTU/Window         */
+#define rt_mss rt_mtu                  /* Compatibility :-(            */
+       unsigned long   rt_window;      /* Window clamping              */
+       unsigned short  rt_irtt;        /* Initial RTT                  */
+};
+
+
+#define        RTF_UP          0x0001          /* route usable                 */
+#define        RTF_GATEWAY     0x0002          /* destination is a gateway     */
+#define        RTF_HOST        0x0004          /* host entry (net otherwise)   */
+#define RTF_REINSTATE  0x0008          /* reinstate route after tmout  */
+#define        RTF_DYNAMIC     0x0010          /* created dyn. (by redirect)   */
+#define        RTF_MODIFIED    0x0020          /* modified dyn. (by redirect)  */
+#define RTF_MTU                0x0040          /* specific MTU for this route  */
+#define RTF_MSS                RTF_MTU         /* Compatibility :-(            */
+#define RTF_WINDOW     0x0080          /* per route window clamping    */
+#define RTF_IRTT       0x0100          /* Initial round trip time      */
+#define RTF_REJECT     0x0200          /* Reject route                 */
+
+/*
+ *     <linux/ipv6_route.h> uses RTF values >= 64k
+ */
+
+
+
+#endif /* _LINUX_ROUTE_H */
+
diff --git a/lib/libdss-include/include/linux/rtc.h b/lib/libdss-include/include/linux/rtc.h
new file mode 100644 (file)
index 0000000..cebd172
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Generic RTC interface.
+ * This version contains the part of the user interface to the Real Time Clock
+ * service. It is used with both the legacy mc146818 and also  EFI
+ * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out
+ * from <linux/mc146818rtc.h> to this file for 2.4 kernels.
+ *
+ * Copyright (C) 1999 Hewlett-Packard Co.
+ * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com>
+ */
+#ifndef _LINUX_RTC_H_
+#define _LINUX_RTC_H_
+
+/*
+ * The struct used to pass data via the following ioctl. Similar to the
+ * struct tm in <time.h>, but it needs to be here so that the kernel
+ * source is self contained, allowing cross-compiles, etc. etc.
+ */
+
+struct rtc_time {
+       int tm_sec;
+       int tm_min;
+       int tm_hour;
+       int tm_mday;
+       int tm_mon;
+       int tm_year;
+       int tm_wday;
+       int tm_yday;
+       int tm_isdst;
+};
+
+/*
+ * This data structure is inspired by the EFI (v0.92) wakeup
+ * alarm API.
+ */
+struct rtc_wkalrm {
+       unsigned char enabled;  /* 0 = alarm disabled, 1 = alarm enabled */
+       unsigned char pending;  /* 0 = alarm not pending, 1 = alarm pending */
+       struct rtc_time time;   /* time the alarm is set to */
+};
+
+/*
+ * Data structure to control PLL correction some better RTC feature
+ * pll_value is used to get or set current value of correction,
+ * the rest of the struct is used to query HW capabilities.
+ * This is modeled after the RTC used in Q40/Q60 computers but
+ * should be sufficiently flexible for other devices
+ *
+ * +ve pll_value means clock will run faster by
+ *   pll_value*pll_posmult/pll_clock
+ * -ve pll_value means clock will run slower by
+ *   pll_value*pll_negmult/pll_clock
+ */
+
+struct rtc_pll_info {
+       int pll_ctrl;       /* placeholder for fancier control */
+       int pll_value;      /* get/set correction value */
+       int pll_max;        /* max +ve (faster) adjustment value */
+       int pll_min;        /* max -ve (slower) adjustment value */
+       int pll_posmult;    /* factor for +ve correction */
+       int pll_negmult;    /* factor for -ve correction */
+       long pll_clock;     /* base PLL frequency */
+};
+
+/*
+ * ioctl calls that are permitted to the /dev/rtc interface, if
+ * any of the RTC drivers are enabled.
+ */
+
+#define RTC_AIE_ON     _IO('p', 0x01)  /* Alarm int. enable on         */
+#define RTC_AIE_OFF    _IO('p', 0x02)  /* ... off                      */
+#define RTC_UIE_ON     _IO('p', 0x03)  /* Update int. enable on        */
+#define RTC_UIE_OFF    _IO('p', 0x04)  /* ... off                      */
+#define RTC_PIE_ON     _IO('p', 0x05)  /* Periodic int. enable on      */
+#define RTC_PIE_OFF    _IO('p', 0x06)  /* ... off                      */
+#define RTC_WIE_ON     _IO('p', 0x0f)  /* Watchdog int. enable on      */
+#define RTC_WIE_OFF    _IO('p', 0x10)  /* ... off                      */
+
+#define RTC_ALM_SET    _IOW('p', 0x07, struct rtc_time) /* Set alarm time  */
+#define RTC_ALM_READ   _IOR('p', 0x08, struct rtc_time) /* Read alarm time */
+#define RTC_RD_TIME    _IOR('p', 0x09, struct rtc_time) /* Read RTC time   */
+#define RTC_SET_TIME   _IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */
+#define RTC_IRQP_READ  _IOR('p', 0x0b, unsigned long)   /* Read IRQ rate   */
+#define RTC_IRQP_SET   _IOW('p', 0x0c, unsigned long)   /* Set IRQ rate    */
+#define RTC_EPOCH_READ _IOR('p', 0x0d, unsigned long)   /* Read epoch      */
+#define RTC_EPOCH_SET  _IOW('p', 0x0e, unsigned long)   /* Set epoch       */
+
+#define RTC_WKALM_SET  _IOW('p', 0x0f, struct rtc_wkalrm)/* Set wakeup alarm*/
+#define RTC_WKALM_RD   _IOR('p', 0x10, struct rtc_wkalrm)/* Get wakeup alarm*/
+
+#define RTC_PLL_GET    _IOR('p', 0x11, struct rtc_pll_info)  /* Get PLL correction */
+#define RTC_PLL_SET    _IOW('p', 0x12, struct rtc_pll_info)  /* Set PLL correction */
+
+#define RTC_VL_READ    _IOR('p', 0x13, int)    /* Voltage low detector */
+#define RTC_VL_CLR     _IO('p', 0x14)          /* Clear voltage low information */
+
+/* interrupt flags */
+#define RTC_IRQF 0x80  /* Any of the following is active */
+#define RTC_PF 0x40    /* Periodic interrupt */
+#define RTC_AF 0x20    /* Alarm interrupt */
+#define RTC_UF 0x10    /* Update interrupt for 1Hz RTC */
+
+
+#define RTC_MAX_FREQ   8192
+
+
+#endif /* _LINUX_RTC_H_ */
diff --git a/lib/libdss-include/include/linux/rtnetlink.h b/lib/libdss-include/include/linux/rtnetlink.h
new file mode 100644 (file)
index 0000000..18c543a
--- /dev/null
@@ -0,0 +1,674 @@
+#ifndef __LINUX_RTNETLINK_H
+#define __LINUX_RTNETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+#include <linux/if_link.h>
+#include <linux/if_addr.h>
+#include <linux/neighbour.h>
+
+/* rtnetlink families. Values up to 127 are reserved for real address
+ * families, values above 128 may be used arbitrarily.
+ */
+#define RTNL_FAMILY_IPMR               128
+#define RTNL_FAMILY_IP6MR              129
+#define RTNL_FAMILY_MAX                        129
+
+/****
+ *             Routing/neighbour discovery messages.
+ ****/
+
+/* Types of messages */
+
+enum {
+       RTM_BASE        = 16,
+#define RTM_BASE       RTM_BASE
+
+       RTM_NEWLINK     = 16,
+#define RTM_NEWLINK    RTM_NEWLINK
+       RTM_DELLINK,
+#define RTM_DELLINK    RTM_DELLINK
+       RTM_GETLINK,
+#define RTM_GETLINK    RTM_GETLINK
+       RTM_SETLINK,
+#define RTM_SETLINK    RTM_SETLINK
+
+       RTM_NEWADDR     = 20,
+#define RTM_NEWADDR    RTM_NEWADDR
+       RTM_DELADDR,
+#define RTM_DELADDR    RTM_DELADDR
+       RTM_GETADDR,
+#define RTM_GETADDR    RTM_GETADDR
+
+       RTM_NEWROUTE    = 24,
+#define RTM_NEWROUTE   RTM_NEWROUTE
+       RTM_DELROUTE,
+#define RTM_DELROUTE   RTM_DELROUTE
+       RTM_GETROUTE,
+#define RTM_GETROUTE   RTM_GETROUTE
+
+       RTM_NEWNEIGH    = 28,
+#define RTM_NEWNEIGH   RTM_NEWNEIGH
+       RTM_DELNEIGH,
+#define RTM_DELNEIGH   RTM_DELNEIGH
+       RTM_GETNEIGH,
+#define RTM_GETNEIGH   RTM_GETNEIGH
+
+       RTM_NEWRULE     = 32,
+#define RTM_NEWRULE    RTM_NEWRULE
+       RTM_DELRULE,
+#define RTM_DELRULE    RTM_DELRULE
+       RTM_GETRULE,
+#define RTM_GETRULE    RTM_GETRULE
+
+       RTM_NEWQDISC    = 36,
+#define RTM_NEWQDISC   RTM_NEWQDISC
+       RTM_DELQDISC,
+#define RTM_DELQDISC   RTM_DELQDISC
+       RTM_GETQDISC,
+#define RTM_GETQDISC   RTM_GETQDISC
+
+       RTM_NEWTCLASS   = 40,
+#define RTM_NEWTCLASS  RTM_NEWTCLASS
+       RTM_DELTCLASS,
+#define RTM_DELTCLASS  RTM_DELTCLASS
+       RTM_GETTCLASS,
+#define RTM_GETTCLASS  RTM_GETTCLASS
+
+       RTM_NEWTFILTER  = 44,
+#define RTM_NEWTFILTER RTM_NEWTFILTER
+       RTM_DELTFILTER,
+#define RTM_DELTFILTER RTM_DELTFILTER
+       RTM_GETTFILTER,
+#define RTM_GETTFILTER RTM_GETTFILTER
+
+       RTM_NEWACTION   = 48,
+#define RTM_NEWACTION   RTM_NEWACTION
+       RTM_DELACTION,
+#define RTM_DELACTION   RTM_DELACTION
+       RTM_GETACTION,
+#define RTM_GETACTION   RTM_GETACTION
+
+       RTM_NEWPREFIX   = 52,
+#define RTM_NEWPREFIX  RTM_NEWPREFIX
+
+       RTM_GETMULTICAST = 58,
+#define RTM_GETMULTICAST RTM_GETMULTICAST
+
+       RTM_GETANYCAST  = 62,
+#define RTM_GETANYCAST RTM_GETANYCAST
+
+       RTM_NEWNEIGHTBL = 64,
+#define RTM_NEWNEIGHTBL        RTM_NEWNEIGHTBL
+       RTM_GETNEIGHTBL = 66,
+#define RTM_GETNEIGHTBL        RTM_GETNEIGHTBL
+       RTM_SETNEIGHTBL,
+#define RTM_SETNEIGHTBL        RTM_SETNEIGHTBL
+
+       RTM_NEWNDUSEROPT = 68,
+#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
+
+       RTM_NEWADDRLABEL = 72,
+#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
+       RTM_DELADDRLABEL,
+#define RTM_DELADDRLABEL RTM_DELADDRLABEL
+       RTM_GETADDRLABEL,
+#define RTM_GETADDRLABEL RTM_GETADDRLABEL
+
+       RTM_GETDCB = 78,
+#define RTM_GETDCB RTM_GETDCB
+       RTM_SETDCB,
+#define RTM_SETDCB RTM_SETDCB
+
+       RTM_NEWNETCONF = 80,
+#define RTM_NEWNETCONF RTM_NEWNETCONF
+       RTM_GETNETCONF = 82,
+#define RTM_GETNETCONF RTM_GETNETCONF
+
+       RTM_NEWMDB = 84,
+#define RTM_NEWMDB RTM_NEWMDB
+       RTM_DELMDB = 85,
+#define RTM_DELMDB RTM_DELMDB
+       RTM_GETMDB = 86,
+#define RTM_GETMDB RTM_GETMDB
+
+       RTM_NEWNSID = 88,
+#define RTM_NEWNSID RTM_NEWNSID
+       RTM_DELNSID = 89,
+#define RTM_DELNSID RTM_DELNSID
+       RTM_GETNSID = 90,
+#define RTM_GETNSID RTM_GETNSID
+
+       __RTM_MAX,
+#define RTM_MAX                (((__RTM_MAX + 3) & ~3) - 1)
+};
+
+#define RTM_NR_MSGTYPES        (RTM_MAX + 1 - RTM_BASE)
+#define RTM_NR_FAMILIES        (RTM_NR_MSGTYPES >> 2)
+#define RTM_FAM(cmd)   (((cmd) - RTM_BASE) >> 2)
+
+/* 
+   Generic structure for encapsulation of optional route information.
+   It is reminiscent of sockaddr, but with sa_family replaced
+   with attribute type.
+ */
+
+struct rtattr {
+       unsigned short  rta_len;
+       unsigned short  rta_type;
+};
+
+/* Macros to handle rtattributes */
+
+#define RTA_ALIGNTO    4U
+#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
+#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
+                        (rta)->rta_len >= sizeof(struct rtattr) && \
+                        (rta)->rta_len <= (len))
+#define RTA_NEXT(rta,attrlen)  ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
+                                (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
+#define RTA_LENGTH(len)        (RTA_ALIGN(sizeof(struct rtattr)) + (len))
+#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
+#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
+#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
+
+
+
+
+/******************************************************************************
+ *             Definitions used in routing table administration.
+ ****/
+
+struct rtmsg {
+       unsigned char           rtm_family;
+       unsigned char           rtm_dst_len;
+       unsigned char           rtm_src_len;
+       unsigned char           rtm_tos;
+
+       unsigned char           rtm_table;      /* Routing table id */
+       unsigned char           rtm_protocol;   /* Routing protocol; see below  */
+       unsigned char           rtm_scope;      /* See below */ 
+       unsigned char           rtm_type;       /* See below    */
+
+       unsigned                rtm_flags;
+};
+
+/* rtm_type */
+
+enum {
+       RTN_UNSPEC,
+       RTN_UNICAST,            /* Gateway or direct route      */
+       RTN_LOCAL,              /* Accept locally               */
+       RTN_BROADCAST,          /* Accept locally as broadcast,
+                                  send as broadcast */
+       RTN_ANYCAST,            /* Accept locally as broadcast,
+                                  but send as unicast */
+       RTN_MULTICAST,          /* Multicast route              */
+       RTN_BLACKHOLE,          /* Drop                         */
+       RTN_UNREACHABLE,        /* Destination is unreachable   */
+       RTN_PROHIBIT,           /* Administratively prohibited  */
+       RTN_THROW,              /* Not in this table            */
+       RTN_NAT,                /* Translate this address       */
+       RTN_XRESOLVE,           /* Use external resolver        */
+       __RTN_MAX
+};
+
+#define RTN_MAX (__RTN_MAX - 1)
+
+
+/* rtm_protocol */
+
+#define RTPROT_UNSPEC  0
+#define RTPROT_REDIRECT        1       /* Route installed by ICMP redirects;
+                                  not used by current IPv4 */
+#define RTPROT_KERNEL  2       /* Route installed by kernel            */
+#define RTPROT_BOOT    3       /* Route installed during boot          */
+#define RTPROT_STATIC  4       /* Route installed by administrator     */
+
+/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
+   they are just passed from user and back as is.
+   It will be used by hypothetical multiple routing daemons.
+   Note that protocol values should be standardized in order to
+   avoid conflicts.
+ */
+
+#define RTPROT_GATED   8       /* Apparently, GateD */
+#define RTPROT_RA      9       /* RDISC/ND router advertisements */
+#define RTPROT_MRT     10      /* Merit MRT */
+#define RTPROT_ZEBRA   11      /* Zebra */
+#define RTPROT_BIRD    12      /* BIRD */
+#define RTPROT_DNROUTED        13      /* DECnet routing daemon */
+#define RTPROT_XORP    14      /* XORP */
+#define RTPROT_NTK     15      /* Netsukuku */
+#define RTPROT_DHCP    16      /* DHCP client */
+#define RTPROT_MROUTED 17      /* Multicast daemon */
+#define RTPROT_BABEL   42      /* Babel daemon */
+
+/* rtm_scope
+
+   Really it is not scope, but sort of distance to the destination.
+   NOWHERE are reserved for not existing destinations, HOST is our
+   local addresses, LINK are destinations, located on directly attached
+   link and UNIVERSE is everywhere in the Universe.
+
+   Intermediate values are also possible f.e. interior routes
+   could be assigned a value between UNIVERSE and LINK.
+*/
+
+enum rt_scope_t {
+       RT_SCOPE_UNIVERSE=0,
+/* User defined values  */
+       RT_SCOPE_SITE=200,
+       RT_SCOPE_LINK=253,
+       RT_SCOPE_HOST=254,
+       RT_SCOPE_NOWHERE=255
+};
+
+/* rtm_flags */
+
+#define RTM_F_NOTIFY           0x100   /* Notify user of route change  */
+#define RTM_F_CLONED           0x200   /* This route is cloned         */
+#define RTM_F_EQUALIZE         0x400   /* Multipath equalizer: NI      */
+#define RTM_F_PREFIX           0x800   /* Prefix addresses             */
+#define RTM_F_LOOKUP_TABLE     0x1000  /* set rtm_table to FIB lookup result */
+
+/* Reserved table identifiers */
+
+enum rt_class_t {
+       RT_TABLE_UNSPEC=0,
+/* User defined values */
+       RT_TABLE_COMPAT=252,
+       RT_TABLE_DEFAULT=253,
+       RT_TABLE_MAIN=254,
+       RT_TABLE_LOCAL=255,
+       RT_TABLE_MAX=0xFFFFFFFF
+};
+
+
+/* Routing message attributes */
+
+enum rtattr_type_t {
+       RTA_UNSPEC,
+       RTA_DST,
+       RTA_SRC,
+       RTA_IIF,
+       RTA_OIF,
+       RTA_GATEWAY,
+       RTA_PRIORITY,
+       RTA_PREFSRC,
+       RTA_METRICS,
+       RTA_MULTIPATH,
+       RTA_PROTOINFO, /* no longer used */
+       RTA_FLOW,
+       RTA_CACHEINFO,
+       RTA_SESSION, /* no longer used */
+       RTA_MP_ALGO, /* no longer used */
+       RTA_TABLE,
+       RTA_MARK,
+       RTA_MFC_STATS,
+       RTA_VIA,
+       RTA_NEWDST,
+       RTA_PREF,
+       RTA_ENCAP_TYPE,
+       RTA_ENCAP,
+       __RTA_MAX
+};
+
+#define RTA_MAX (__RTA_MAX - 1)
+
+#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
+#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
+
+/* RTM_MULTIPATH --- array of struct rtnexthop.
+ *
+ * "struct rtnexthop" describes all necessary nexthop information,
+ * i.e. parameters of path to a destination via this nexthop.
+ *
+ * At the moment it is impossible to set different prefsrc, mtu, window
+ * and rtt for different paths from multipath.
+ */
+
+struct rtnexthop {
+       unsigned short          rtnh_len;
+       unsigned char           rtnh_flags;
+       unsigned char           rtnh_hops;
+       int                     rtnh_ifindex;
+};
+
+/* rtnh_flags */
+
+#define RTNH_F_DEAD            1       /* Nexthop is dead (used by multipath)  */
+#define RTNH_F_PERVASIVE       2       /* Do recursive gateway lookup  */
+#define RTNH_F_ONLINK          4       /* Gateway is forced on link    */
+#define RTNH_F_OFFLOAD         8       /* offloaded route */
+#define RTNH_F_LINKDOWN                16      /* carrier-down on nexthop */
+
+#define RTNH_COMPARE_MASK      (RTNH_F_DEAD | RTNH_F_LINKDOWN)
+
+/* Macros to handle hexthops */
+
+#define RTNH_ALIGNTO   4
+#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
+#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
+                          ((int)(rtnh)->rtnh_len) <= (len))
+#define RTNH_NEXT(rtnh)        ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
+#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
+#define RTNH_SPACE(len)        RTNH_ALIGN(RTNH_LENGTH(len))
+#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
+
+/* RTA_VIA */
+struct rtvia {
+       __kernel_sa_family_t    rtvia_family;
+       __u8                    rtvia_addr[0];
+};
+
+/* RTM_CACHEINFO */
+
+struct rta_cacheinfo {
+       __u32   rta_clntref;
+       __u32   rta_lastuse;
+       __s32   rta_expires;
+       __u32   rta_error;
+       __u32   rta_used;
+
+#define RTNETLINK_HAVE_PEERINFO 1
+       __u32   rta_id;
+       __u32   rta_ts;
+       __u32   rta_tsage;
+};
+
+/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
+
+enum {
+       RTAX_UNSPEC,
+#define RTAX_UNSPEC RTAX_UNSPEC
+       RTAX_LOCK,
+#define RTAX_LOCK RTAX_LOCK
+       RTAX_MTU,
+#define RTAX_MTU RTAX_MTU
+       RTAX_WINDOW,
+#define RTAX_WINDOW RTAX_WINDOW
+       RTAX_RTT,
+#define RTAX_RTT RTAX_RTT
+       RTAX_RTTVAR,
+#define RTAX_RTTVAR RTAX_RTTVAR
+       RTAX_SSTHRESH,
+#define RTAX_SSTHRESH RTAX_SSTHRESH
+       RTAX_CWND,
+#define RTAX_CWND RTAX_CWND
+       RTAX_ADVMSS,
+#define RTAX_ADVMSS RTAX_ADVMSS
+       RTAX_REORDERING,
+#define RTAX_REORDERING RTAX_REORDERING
+       RTAX_HOPLIMIT,
+#define RTAX_HOPLIMIT RTAX_HOPLIMIT
+       RTAX_INITCWND,
+#define RTAX_INITCWND RTAX_INITCWND
+       RTAX_FEATURES,
+#define RTAX_FEATURES RTAX_FEATURES
+       RTAX_RTO_MIN,
+#define RTAX_RTO_MIN RTAX_RTO_MIN
+       RTAX_INITRWND,
+#define RTAX_INITRWND RTAX_INITRWND
+       RTAX_QUICKACK,
+#define RTAX_QUICKACK RTAX_QUICKACK
+       RTAX_CC_ALGO,
+#define RTAX_CC_ALGO RTAX_CC_ALGO
+       __RTAX_MAX
+};
+
+#define RTAX_MAX (__RTAX_MAX - 1)
+
+#define RTAX_FEATURE_ECN       (1 << 0)
+#define RTAX_FEATURE_SACK      (1 << 1)
+#define RTAX_FEATURE_TIMESTAMP (1 << 2)
+#define RTAX_FEATURE_ALLFRAG   (1 << 3)
+
+#define RTAX_FEATURE_MASK      (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
+                                RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
+
+struct rta_session {
+       __u8    proto;
+       __u8    pad1;
+       __u16   pad2;
+
+       union {
+               struct {
+                       __u16   sport;
+                       __u16   dport;
+               } ports;
+
+               struct {
+                       __u8    type;
+                       __u8    code;
+                       __u16   ident;
+               } icmpt;
+
+               __u32           spi;
+       } u;
+};
+
+struct rta_mfc_stats {
+       __u64   mfcs_packets;
+       __u64   mfcs_bytes;
+       __u64   mfcs_wrong_if;
+};
+
+/****
+ *             General form of address family dependent message.
+ ****/
+
+struct rtgenmsg {
+       unsigned char           rtgen_family;
+};
+
+/*****************************************************************
+ *             Link layer specific messages.
+ ****/
+
+/* struct ifinfomsg
+ * passes link level specific information, not dependent
+ * on network protocol.
+ */
+
+struct ifinfomsg {
+       unsigned char   ifi_family;
+       unsigned char   __ifi_pad;
+       unsigned short  ifi_type;               /* ARPHRD_* */
+       int             ifi_index;              /* Link index   */
+       unsigned        ifi_flags;              /* IFF_* flags  */
+       unsigned        ifi_change;             /* IFF_* change mask */
+};
+
+/********************************************************************
+ *             prefix information 
+ ****/
+
+struct prefixmsg {
+       unsigned char   prefix_family;
+       unsigned char   prefix_pad1;
+       unsigned short  prefix_pad2;
+       int             prefix_ifindex;
+       unsigned char   prefix_type;
+       unsigned char   prefix_len;
+       unsigned char   prefix_flags;
+       unsigned char   prefix_pad3;
+};
+
+enum 
+{
+       PREFIX_UNSPEC,
+       PREFIX_ADDRESS,
+       PREFIX_CACHEINFO,
+       __PREFIX_MAX
+};
+
+#define PREFIX_MAX     (__PREFIX_MAX - 1)
+
+struct prefix_cacheinfo {
+       __u32   preferred_time;
+       __u32   valid_time;
+};
+
+
+/*****************************************************************
+ *             Traffic control messages.
+ ****/
+
+struct tcmsg {
+       unsigned char   tcm_family;
+       unsigned char   tcm__pad1;
+       unsigned short  tcm__pad2;
+       int             tcm_ifindex;
+       __u32           tcm_handle;
+       __u32           tcm_parent;
+       __u32           tcm_info;
+};
+
+enum {
+       TCA_UNSPEC,
+       TCA_KIND,
+       TCA_OPTIONS,
+       TCA_STATS,
+       TCA_XSTATS,
+       TCA_RATE,
+       TCA_FCNT,
+       TCA_STATS2,
+       TCA_STAB,
+       __TCA_MAX
+};
+
+#define TCA_MAX (__TCA_MAX - 1)
+
+#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
+#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
+
+/********************************************************************
+ *             Neighbor Discovery userland options
+ ****/
+
+struct nduseroptmsg {
+       unsigned char   nduseropt_family;
+       unsigned char   nduseropt_pad1;
+       unsigned short  nduseropt_opts_len;     /* Total length of options */
+       int             nduseropt_ifindex;
+       __u8            nduseropt_icmp_type;
+       __u8            nduseropt_icmp_code;
+       unsigned short  nduseropt_pad2;
+       unsigned int    nduseropt_pad3;
+       /* Followed by one or more ND options */
+};
+
+enum {
+       NDUSEROPT_UNSPEC,
+       NDUSEROPT_SRCADDR,
+       __NDUSEROPT_MAX
+};
+
+#define NDUSEROPT_MAX  (__NDUSEROPT_MAX - 1)
+
+/* RTnetlink multicast groups - backwards compatibility for userspace */
+#define RTMGRP_LINK            1
+#define RTMGRP_NOTIFY          2
+#define RTMGRP_NEIGH           4
+#define RTMGRP_TC              8
+
+#define RTMGRP_IPV4_IFADDR     0x10
+#define RTMGRP_IPV4_MROUTE     0x20
+#define RTMGRP_IPV4_ROUTE      0x40
+#define RTMGRP_IPV4_RULE       0x80
+
+#define RTMGRP_IPV6_IFADDR     0x100
+#define RTMGRP_IPV6_MROUTE     0x200
+#define RTMGRP_IPV6_ROUTE      0x400
+#define RTMGRP_IPV6_IFINFO     0x800
+
+#define RTMGRP_DECnet_IFADDR    0x1000
+#define RTMGRP_DECnet_ROUTE     0x4000
+
+#define RTMGRP_IPV6_PREFIX     0x20000
+
+/* RTnetlink multicast groups */
+enum rtnetlink_groups {
+       RTNLGRP_NONE,
+#define RTNLGRP_NONE           RTNLGRP_NONE
+       RTNLGRP_LINK,
+#define RTNLGRP_LINK           RTNLGRP_LINK
+       RTNLGRP_NOTIFY,
+#define RTNLGRP_NOTIFY         RTNLGRP_NOTIFY
+       RTNLGRP_NEIGH,
+#define RTNLGRP_NEIGH          RTNLGRP_NEIGH
+       RTNLGRP_TC,
+#define RTNLGRP_TC             RTNLGRP_TC
+       RTNLGRP_IPV4_IFADDR,
+#define RTNLGRP_IPV4_IFADDR    RTNLGRP_IPV4_IFADDR
+       RTNLGRP_IPV4_MROUTE,
+#define        RTNLGRP_IPV4_MROUTE     RTNLGRP_IPV4_MROUTE
+       RTNLGRP_IPV4_ROUTE,
+#define RTNLGRP_IPV4_ROUTE     RTNLGRP_IPV4_ROUTE
+       RTNLGRP_IPV4_RULE,
+#define RTNLGRP_IPV4_RULE      RTNLGRP_IPV4_RULE
+       RTNLGRP_IPV6_IFADDR,
+#define RTNLGRP_IPV6_IFADDR    RTNLGRP_IPV6_IFADDR
+       RTNLGRP_IPV6_MROUTE,
+#define RTNLGRP_IPV6_MROUTE    RTNLGRP_IPV6_MROUTE
+       RTNLGRP_IPV6_ROUTE,
+#define RTNLGRP_IPV6_ROUTE     RTNLGRP_IPV6_ROUTE
+       RTNLGRP_IPV6_IFINFO,
+#define RTNLGRP_IPV6_IFINFO    RTNLGRP_IPV6_IFINFO
+       RTNLGRP_DECnet_IFADDR,
+#define RTNLGRP_DECnet_IFADDR  RTNLGRP_DECnet_IFADDR
+       RTNLGRP_NOP2,
+       RTNLGRP_DECnet_ROUTE,
+#define RTNLGRP_DECnet_ROUTE   RTNLGRP_DECnet_ROUTE
+       RTNLGRP_DECnet_RULE,
+#define RTNLGRP_DECnet_RULE    RTNLGRP_DECnet_RULE
+       RTNLGRP_NOP4,
+       RTNLGRP_IPV6_PREFIX,
+#define RTNLGRP_IPV6_PREFIX    RTNLGRP_IPV6_PREFIX
+       RTNLGRP_IPV6_RULE,
+#define RTNLGRP_IPV6_RULE      RTNLGRP_IPV6_RULE
+       RTNLGRP_ND_USEROPT,
+#define RTNLGRP_ND_USEROPT     RTNLGRP_ND_USEROPT
+       RTNLGRP_PHONET_IFADDR,
+#define RTNLGRP_PHONET_IFADDR  RTNLGRP_PHONET_IFADDR
+       RTNLGRP_PHONET_ROUTE,
+#define RTNLGRP_PHONET_ROUTE   RTNLGRP_PHONET_ROUTE
+       RTNLGRP_DCB,
+#define RTNLGRP_DCB            RTNLGRP_DCB
+       RTNLGRP_IPV4_NETCONF,
+#define RTNLGRP_IPV4_NETCONF   RTNLGRP_IPV4_NETCONF
+       RTNLGRP_IPV6_NETCONF,
+#define RTNLGRP_IPV6_NETCONF   RTNLGRP_IPV6_NETCONF
+       RTNLGRP_MDB,
+#define RTNLGRP_MDB            RTNLGRP_MDB
+       RTNLGRP_MPLS_ROUTE,
+#define RTNLGRP_MPLS_ROUTE     RTNLGRP_MPLS_ROUTE
+       RTNLGRP_NSID,
+#define RTNLGRP_NSID           RTNLGRP_NSID
+       __RTNLGRP_MAX
+};
+#define RTNLGRP_MAX    (__RTNLGRP_MAX - 1)
+
+/* TC action piece */
+struct tcamsg {
+       unsigned char   tca_family;
+       unsigned char   tca__pad1;
+       unsigned short  tca__pad2;
+};
+#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
+#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
+#define TCA_ACT_TAB 1 /* attr type must be >=1 */      
+#define TCAA_MAX 1
+
+/* New extended info filters for IFLA_EXT_MASK */
+#define RTEXT_FILTER_VF                (1 << 0)
+#define RTEXT_FILTER_BRVLAN    (1 << 1)
+#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2)
+#define        RTEXT_FILTER_SKIP_STATS (1 << 3)
+
+/* End of information exported to user level */
+
+
+
+#endif /* __LINUX_RTNETLINK_H */
diff --git a/lib/libdss-include/include/linux/scc.h b/lib/libdss-include/include/linux/scc.h
new file mode 100644 (file)
index 0000000..73c0cb2
--- /dev/null
@@ -0,0 +1,172 @@
+/* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */
+
+#ifndef _SCC_H
+#define _SCC_H
+
+
+/* selection of hardware types */
+
+#define PA0HZP         0x00    /* hardware type for PA0HZP SCC card and compatible */
+#define EAGLE          0x01    /* hardware type for EAGLE card */
+#define PC100          0x02    /* hardware type for PC100 card */
+#define PRIMUS         0x04    /* hardware type for PRIMUS-PC (DG9BL) card */
+#define DRSI           0x08    /* hardware type for DRSI PC*Packet card */
+#define BAYCOM         0x10    /* hardware type for BayCom (U)SCC */
+
+/* DEV ioctl() commands */
+
+enum SCC_ioctl_cmds {
+       SIOCSCCRESERVED = SIOCDEVPRIVATE,
+       SIOCSCCCFG,
+       SIOCSCCINI,
+       SIOCSCCCHANINI,
+       SIOCSCCSMEM,
+       SIOCSCCGKISS,
+       SIOCSCCSKISS,
+       SIOCSCCGSTAT,
+       SIOCSCCCAL
+};
+
+/* Device parameter control (from WAMPES) */
+
+enum L1_params {
+       PARAM_DATA,
+       PARAM_TXDELAY,
+       PARAM_PERSIST,
+       PARAM_SLOTTIME,
+       PARAM_TXTAIL,
+       PARAM_FULLDUP,
+       PARAM_SOFTDCD,          /* was: PARAM_HW */
+       PARAM_MUTE,             /* ??? */
+       PARAM_DTR,
+       PARAM_RTS,
+       PARAM_SPEED,
+       PARAM_ENDDELAY,         /* ??? */
+       PARAM_GROUP,
+       PARAM_IDLE,
+       PARAM_MIN,
+       PARAM_MAXKEY,
+       PARAM_WAIT,
+       PARAM_MAXDEFER,
+       PARAM_TX,
+       PARAM_HWEVENT = 31,
+       PARAM_RETURN = 255      /* reset kiss mode */
+};
+
+/* fulldup parameter */
+
+enum FULLDUP_modes {
+       KISS_DUPLEX_HALF,       /* normal CSMA operation */
+       KISS_DUPLEX_FULL,       /* fullduplex, key down trx after transmission */
+       KISS_DUPLEX_LINK,       /* fullduplex, key down trx after 'idletime' sec */
+       KISS_DUPLEX_OPTIMA      /* fullduplex, let the protocol layer control the hw */
+};
+
+/* misc. parameters */
+
+#define TIMER_OFF      65535U  /* to switch off timers */
+#define NO_SUCH_PARAM  65534U  /* param not implemented */
+
+/* HWEVENT parameter */
+
+enum HWEVENT_opts {
+       HWEV_DCD_ON,
+       HWEV_DCD_OFF,
+       HWEV_ALL_SENT
+};
+
+/* channel grouping */
+
+#define RXGROUP                0100    /* if set, only tx when all channels clear */
+#define TXGROUP                0200    /* if set, don't transmit simultaneously */
+
+/* Tx/Rx clock sources */
+
+enum CLOCK_sources {
+       CLK_DPLL,       /* normal halfduplex operation */
+       CLK_EXTERNAL,   /* external clocking (G3RUH/DF9IC modems) */
+       CLK_DIVIDER,    /* Rx = DPLL, Tx = divider (fullduplex with */
+                       /* modems without clock regeneration */
+       CLK_BRG         /* experimental fullduplex mode with DPLL/BRG for */
+                       /* MODEMs without clock recovery */
+};
+
+/* Tx state */
+
+enum TX_state {
+       TXS_IDLE,       /* Transmitter off, no data pending */
+       TXS_BUSY,       /* waiting for permission to send / tailtime */
+       TXS_ACTIVE,     /* Transmitter on, sending data */
+       TXS_NEWFRAME,   /* reset CRC and send (next) frame */
+       TXS_IDLE2,      /* Transmitter on, no data pending */
+       TXS_WAIT,       /* Waiting for Mintime to expire */
+       TXS_TIMEOUT     /* We had a transmission timeout */
+};
+
+typedef unsigned long io_port; /* type definition for an 'io port address' */
+
+/* SCC statistical information */
+
+struct scc_stat {
+        long rxints;            /* Receiver interrupts */
+        long txints;            /* Transmitter interrupts */
+        long exints;            /* External/status interrupts */
+        long spints;            /* Special receiver interrupts */
+
+        long txframes;          /* Packets sent */
+        long rxframes;          /* Number of Frames Actually Received */
+        long rxerrs;            /* CRC Errors */
+        long txerrs;           /* KISS errors */
+        
+       unsigned int nospace;   /* "Out of buffers" */
+       unsigned int rx_over;   /* Receiver Overruns */
+       unsigned int tx_under;  /* Transmitter Underruns */
+
+       unsigned int tx_state;  /* Transmitter state */
+       int tx_queued;          /* tx frames enqueued */
+
+       unsigned int maxqueue;  /* allocated tx_buffers */
+       unsigned int bufsize;   /* used buffersize */
+};
+
+struct scc_modem {
+       long speed;             /* Line speed, bps */
+       char clocksrc;          /* 0 = DPLL, 1 = external, 2 = divider */
+       char nrz;               /* NRZ instead of NRZI */       
+};
+
+struct scc_kiss_cmd {
+       int      command;       /* one of the KISS-Commands defined above */
+       unsigned param;         /* KISS-Param */
+};
+
+struct scc_hw_config {
+       io_port data_a;         /* data port channel A */
+       io_port ctrl_a;         /* control port channel A */
+       io_port data_b;         /* data port channel B */
+       io_port ctrl_b;         /* control port channel B */
+       io_port vector_latch;   /* INTACK-Latch (#) */
+       io_port special;        /* special function port */
+
+       int     irq;            /* irq */
+       long    clock;          /* clock */
+       char    option;         /* command for function port */
+
+       char brand;             /* hardware type */
+       char escc;              /* use ext. features of a 8580/85180/85280 */
+};
+
+/* (#) only one INTACK latch allowed. */
+
+
+struct scc_mem_config {
+       unsigned int dummy;
+       unsigned int bufsize;
+};
+
+struct scc_calibrate {
+       unsigned int time;
+       unsigned char pattern;
+};
+
+#endif /* _SCC_H */
diff --git a/lib/libdss-include/include/linux/sched.h b/lib/libdss-include/include/linux/sched.h
new file mode 100644 (file)
index 0000000..2d1e6e0
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _LINUX_SCHED_H
+#define _LINUX_SCHED_H
+
+/*
+ * cloning flags:
+ */
+#define CSIGNAL                0x000000ff      /* signal mask to be sent at exit */
+#define CLONE_VM       0x00000100      /* set if VM shared between processes */
+#define CLONE_FS       0x00000200      /* set if fs info shared between processes */
+#define CLONE_FILES    0x00000400      /* set if open files shared between processes */
+#define CLONE_SIGHAND  0x00000800      /* set if signal handlers and blocked signals shared */
+#define CLONE_PTRACE   0x00002000      /* set if we want to let tracing continue on the child too */
+#define CLONE_VFORK    0x00004000      /* set if the parent wants the child to wake it up on mm_release */
+#define CLONE_PARENT   0x00008000      /* set if we want to have the same parent as the cloner */
+#define CLONE_THREAD   0x00010000      /* Same thread group? */
+#define CLONE_NEWNS    0x00020000      /* New mount namespace group */
+#define CLONE_SYSVSEM  0x00040000      /* share system V SEM_UNDO semantics */
+#define CLONE_SETTLS   0x00080000      /* create a new TLS for the child */
+#define CLONE_PARENT_SETTID    0x00100000      /* set the TID in the parent */
+#define CLONE_CHILD_CLEARTID   0x00200000      /* clear the TID in the child */
+#define CLONE_DETACHED         0x00400000      /* Unused, ignored */
+#define CLONE_UNTRACED         0x00800000      /* set if the tracing process can't force CLONE_PTRACE on this clone */
+#define CLONE_CHILD_SETTID     0x01000000      /* set the TID in the child */
+#define CLONE_NEWCGROUP                0x02000000      /* New cgroup namespace */
+#define CLONE_NEWUTS           0x04000000      /* New utsname namespace */
+#define CLONE_NEWIPC           0x08000000      /* New ipc namespace */
+#define CLONE_NEWUSER          0x10000000      /* New user namespace */
+#define CLONE_NEWPID           0x20000000      /* New pid namespace */
+#define CLONE_NEWNET           0x40000000      /* New network namespace */
+#define CLONE_IO               0x80000000      /* Clone io context */
+
+/*
+ * Scheduling policies
+ */
+#define SCHED_NORMAL           0
+#define SCHED_FIFO             1
+#define SCHED_RR               2
+#define SCHED_BATCH            3
+/* SCHED_ISO: reserved but not implemented yet */
+#define SCHED_IDLE             5
+#define SCHED_DEADLINE         6
+
+/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
+#define SCHED_RESET_ON_FORK     0x40000000
+
+/*
+ * For the sched_{set,get}attr() calls
+ */
+#define SCHED_FLAG_RESET_ON_FORK       0x01
+
+#endif /* _LINUX_SCHED_H */
diff --git a/lib/libdss-include/include/linux/scif_ioctl.h b/lib/libdss-include/include/linux/scif_ioctl.h
new file mode 100644 (file)
index 0000000..d904891
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2014 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2014 Intel Corporation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Intel SCIF driver.
+ *
+ */
+/*
+ * -----------------------------------------
+ * SCIF IOCTL interface information
+ * -----------------------------------------
+ */
+#ifndef SCIF_IOCTL_H
+#define SCIF_IOCTL_H
+
+#include <linux/types.h>
+
+/**
+ * struct scif_port_id - SCIF port information
+ * @node:      node on which port resides
+ * @port:      local port number
+ */
+struct scif_port_id {
+       __u16 node;
+       __u16 port;
+};
+
+/**
+ * struct scifioctl_connect - used for SCIF_CONNECT IOCTL
+ * @self:      used to read back the assigned port_id
+ * @peer:      destination node and port to connect to
+ */
+struct scifioctl_connect {
+       struct scif_port_id     self;
+       struct scif_port_id     peer;
+};
+
+/**
+ * struct scifioctl_accept - used for SCIF_ACCEPTREQ IOCTL
+ * @flags:     flags
+ * @peer:      global id of peer endpoint
+ * @endpt:     new connected endpoint descriptor
+ */
+struct scifioctl_accept {
+       __s32                   flags;
+       struct scif_port_id     peer;
+       __u64                   endpt;
+};
+
+/**
+ * struct scifioctl_msg - used for SCIF_SEND/SCIF_RECV IOCTL
+ * @msg:       message buffer address
+ * @len:       message length
+ * @flags:     flags
+ * @out_len:   number of bytes sent/received
+ */
+struct scifioctl_msg {
+       __u64   msg;
+       __s32   len;
+       __s32   flags;
+       __s32   out_len;
+};
+
+/**
+ * struct scifioctl_reg - used for SCIF_REG IOCTL
+ * @addr:      starting virtual address
+ * @len:       length of range
+ * @offset:    offset of window
+ * @prot:      read/write protection
+ * @flags:     flags
+ * @out_offset:        offset returned
+ */
+struct scifioctl_reg {
+       __u64           addr;
+       __u64           len;
+       __s64           offset;
+       __s32           prot;
+       __s32           flags;
+       __s64           out_offset;
+};
+
+/**
+ * struct scifioctl_unreg - used for SCIF_UNREG IOCTL
+ * @offset:    start of range to unregister
+ * @len:       length of range to unregister
+ */
+struct scifioctl_unreg {
+       __s64           offset;
+       __u64           len;
+};
+
+/**
+ * struct scifioctl_copy - used for SCIF DMA copy IOCTLs
+ *
+ * @loffset:   offset in local registered address space to/from
+ *             which to copy
+ * @len:       length of range to copy
+ * @roffset:   offset in remote registered address space to/from
+ *             which to copy
+ * @addr:      user virtual address to/from which to copy
+ * @flags:     flags
+ *
+ * This structure is used for SCIF_READFROM, SCIF_WRITETO, SCIF_VREADFROM
+ * and SCIF_VREADFROM IOCTL's.
+ */
+struct scifioctl_copy {
+       __s64           loffset;
+       __u64           len;
+       __s64           roffset;
+       __u64           addr;
+       __s32           flags;
+};
+
+/**
+ * struct scifioctl_fence_mark  - used for SCIF_FENCE_MARK IOCTL
+ * @flags:     flags
+ * @mark:      fence handle which is a pointer to a __s32
+ */
+struct scifioctl_fence_mark {
+       __s32   flags;
+       __u64   mark;
+};
+
+/**
+ * struct scifioctl_fence_signal - used for SCIF_FENCE_SIGNAL IOCTL
+ * @loff:      local offset
+ * @lval:      value to write to loffset
+ * @roff:      remote offset
+ * @rval:      value to write to roffset
+ * @flags:     flags
+ */
+struct scifioctl_fence_signal {
+       __s64           loff;
+       __u64           lval;
+       __s64           roff;
+       __u64           rval;
+       __s32           flags;
+};
+
+/**
+ * struct scifioctl_node_ids - used for SCIF_GET_NODEIDS IOCTL
+ * @nodes:     pointer to an array of node_ids
+ * @self:      ID of the current node
+ * @len:       length of array
+ */
+struct scifioctl_node_ids {
+       __u64   nodes;
+       __u64   self;
+       __s32   len;
+};
+
+#define SCIF_BIND              _IOWR('s', 1, __u64)
+#define SCIF_LISTEN            _IOW('s', 2, __s32)
+#define SCIF_CONNECT           _IOWR('s', 3, struct scifioctl_connect)
+#define SCIF_ACCEPTREQ         _IOWR('s', 4, struct scifioctl_accept)
+#define SCIF_ACCEPTREG         _IOWR('s', 5, __u64)
+#define SCIF_SEND              _IOWR('s', 6, struct scifioctl_msg)
+#define SCIF_RECV              _IOWR('s', 7, struct scifioctl_msg)
+#define SCIF_REG               _IOWR('s', 8, struct scifioctl_reg)
+#define SCIF_UNREG             _IOWR('s', 9, struct scifioctl_unreg)
+#define SCIF_READFROM          _IOWR('s', 10, struct scifioctl_copy)
+#define SCIF_WRITETO           _IOWR('s', 11, struct scifioctl_copy)
+#define SCIF_VREADFROM         _IOWR('s', 12, struct scifioctl_copy)
+#define SCIF_VWRITETO          _IOWR('s', 13, struct scifioctl_copy)
+#define SCIF_GET_NODEIDS       _IOWR('s', 14, struct scifioctl_node_ids)
+#define SCIF_FENCE_MARK                _IOWR('s', 15, struct scifioctl_fence_mark)
+#define SCIF_FENCE_WAIT                _IOWR('s', 16, __s32)
+#define SCIF_FENCE_SIGNAL      _IOWR('s', 17, struct scifioctl_fence_signal)
+
+#endif /* SCIF_IOCTL_H */
diff --git a/lib/libdss-include/include/linux/screen_info.h b/lib/libdss-include/include/linux/screen_info.h
new file mode 100644 (file)
index 0000000..5dc1a0a
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _SCREEN_INFO_H
+#define _SCREEN_INFO_H
+
+#include <linux/types.h>
+
+/*
+ * These are set up by the setup-routine at boot-time:
+ */
+
+struct screen_info {
+       __u8  orig_x;           /* 0x00 */
+       __u8  orig_y;           /* 0x01 */
+       __u16 ext_mem_k;        /* 0x02 */
+       __u16 orig_video_page;  /* 0x04 */
+       __u8  orig_video_mode;  /* 0x06 */
+       __u8  orig_video_cols;  /* 0x07 */
+       __u8  flags;            /* 0x08 */
+       __u8  unused2;          /* 0x09 */
+       __u16 orig_video_ega_bx;/* 0x0a */
+       __u16 unused3;          /* 0x0c */
+       __u8  orig_video_lines; /* 0x0e */
+       __u8  orig_video_isVGA; /* 0x0f */
+       __u16 orig_video_points;/* 0x10 */
+
+       /* VESA graphic mode -- linear frame buffer */
+       __u16 lfb_width;        /* 0x12 */
+       __u16 lfb_height;       /* 0x14 */
+       __u16 lfb_depth;        /* 0x16 */
+       __u32 lfb_base;         /* 0x18 */
+       __u32 lfb_size;         /* 0x1c */
+       __u16 cl_magic, cl_offset; /* 0x20 */
+       __u16 lfb_linelength;   /* 0x24 */
+       __u8  red_size;         /* 0x26 */
+       __u8  red_pos;          /* 0x27 */
+       __u8  green_size;       /* 0x28 */
+       __u8  green_pos;        /* 0x29 */
+       __u8  blue_size;        /* 0x2a */
+       __u8  blue_pos;         /* 0x2b */
+       __u8  rsvd_size;        /* 0x2c */
+       __u8  rsvd_pos;         /* 0x2d */
+       __u16 vesapm_seg;       /* 0x2e */
+       __u16 vesapm_off;       /* 0x30 */
+       __u16 pages;            /* 0x32 */
+       __u16 vesa_attributes;  /* 0x34 */
+       __u32 capabilities;     /* 0x36 */
+       __u32 ext_lfb_base;     /* 0x3a */
+       __u8  _reserved[2];     /* 0x3e */
+} __attribute__((packed));
+
+#define VIDEO_TYPE_MDA         0x10    /* Monochrome Text Display      */
+#define VIDEO_TYPE_CGA         0x11    /* CGA Display                  */
+#define VIDEO_TYPE_EGAM                0x20    /* EGA/VGA in Monochrome Mode   */
+#define VIDEO_TYPE_EGAC                0x21    /* EGA in Color Mode            */
+#define VIDEO_TYPE_VGAC                0x22    /* VGA+ in Color Mode           */
+#define VIDEO_TYPE_VLFB                0x23    /* VESA VGA in graphic mode     */
+
+#define VIDEO_TYPE_PICA_S3     0x30    /* ACER PICA-61 local S3 video  */
+#define VIDEO_TYPE_MIPS_G364   0x31    /* MIPS Magnum 4000 G364 video  */
+#define VIDEO_TYPE_SGI          0x33    /* Various SGI graphics hardware */
+
+#define VIDEO_TYPE_TGAC                0x40    /* DEC TGA */
+
+#define VIDEO_TYPE_SUN          0x50    /* Sun frame buffer. */
+#define VIDEO_TYPE_SUNPCI       0x51    /* Sun PCI based frame buffer. */
+
+#define VIDEO_TYPE_PMAC                0x60    /* PowerMacintosh frame buffer. */
+
+#define VIDEO_TYPE_EFI         0x70    /* EFI graphic mode             */
+
+#define VIDEO_FLAGS_NOCURSOR   (1 << 0) /* The video mode has no cursor set */
+
+#define VIDEO_CAPABILITY_SKIP_QUIRKS   (1 << 0)
+#define VIDEO_CAPABILITY_64BIT_BASE    (1 << 1)        /* Frame buffer base is 64-bit */
+
+#endif /* _SCREEN_INFO_H */
diff --git a/lib/libdss-include/include/linux/sctp.h b/lib/libdss-include/include/linux/sctp.h
new file mode 100644 (file)
index 0000000..b9bcc0e
--- /dev/null
@@ -0,0 +1,899 @@
+/* SCTP kernel implementation
+ * (C) Copyright IBM Corp. 2001, 2004
+ * Copyright (c) 1999-2000 Cisco, Inc.
+ * Copyright (c) 1999-2001 Motorola, Inc.
+ * Copyright (c) 2002 Intel Corp.
+ *
+ * This file is part of the SCTP kernel implementation
+ *
+ * This header represents the structures and constants needed to support
+ * the SCTP Extension to the Sockets API.
+ *
+ * This SCTP implementation is free software;
+ * you can redistribute it and/or modify it under the terms of
+ * the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This SCTP implementation is distributed in the hope that it
+ * will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ *                 ************************
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU CC; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Please send any bug reports or fixes you make to the
+ * email address(es):
+ *    lksctp developers <linux-sctp@vger.kernel.org>
+ *
+ * Or submit a bug report through the following website:
+ *    http://www.sf.net/projects/lksctp
+ *
+ * Written or modified by:
+ *    La Monte H.P. Yarroll    <piggy@acm.org>
+ *    R. Stewart               <randall@sctp.chicago.il.us>
+ *    K. Morneau               <kmorneau@cisco.com>
+ *    Q. Xie                   <qxie1@email.mot.com>
+ *    Karl Knutson             <karl@athena.chicago.il.us>
+ *    Jon Grimm                <jgrimm@us.ibm.com>
+ *    Daisy Chang              <daisyc@us.ibm.com>
+ *    Ryan Layer               <rmlayer@us.ibm.com>
+ *    Ardelle Fan              <ardelle.fan@intel.com>
+ *    Sridhar Samudrala        <sri@us.ibm.com>
+ *    Inaky Perez-Gonzalez     <inaky.gonzalez@intel.com>
+ *    Vlad Yasevich            <vladislav.yasevich@hp.com>
+ *
+ * Any bugs reported given to us we will try to fix... any fixes shared will
+ * be incorporated into the next SCTP release.
+ */
+
+#ifndef _SCTP_H
+#define _SCTP_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+typedef __s32 sctp_assoc_t;
+
+/* The following symbols come from the Sockets API Extensions for
+ * SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
+ */
+#define SCTP_RTOINFO   0
+#define SCTP_ASSOCINFO  1
+#define SCTP_INITMSG   2
+#define SCTP_NODELAY   3               /* Get/set nodelay option. */
+#define SCTP_AUTOCLOSE 4
+#define SCTP_SET_PEER_PRIMARY_ADDR 5
+#define SCTP_PRIMARY_ADDR      6
+#define SCTP_ADAPTATION_LAYER  7
+#define SCTP_DISABLE_FRAGMENTS 8
+#define SCTP_PEER_ADDR_PARAMS  9
+#define SCTP_DEFAULT_SEND_PARAM        10
+#define SCTP_EVENTS    11
+#define SCTP_I_WANT_MAPPED_V4_ADDR 12  /* Turn on/off mapped v4 addresses  */
+#define SCTP_MAXSEG    13              /* Get/set maximum fragment. */
+#define SCTP_STATUS    14
+#define SCTP_GET_PEER_ADDR_INFO        15
+#define SCTP_DELAYED_ACK_TIME  16
+#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
+#define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
+#define SCTP_CONTEXT   17
+#define SCTP_FRAGMENT_INTERLEAVE       18
+#define SCTP_PARTIAL_DELIVERY_POINT    19 /* Set/Get partial delivery point */
+#define SCTP_MAX_BURST 20              /* Set/Get max burst */
+#define SCTP_AUTH_CHUNK        21      /* Set only: add a chunk type to authenticate */
+#define SCTP_HMAC_IDENT        22
+#define SCTP_AUTH_KEY  23
+#define SCTP_AUTH_ACTIVE_KEY   24
+#define SCTP_AUTH_DELETE_KEY   25
+#define SCTP_PEER_AUTH_CHUNKS  26      /* Read only */
+#define SCTP_LOCAL_AUTH_CHUNKS 27      /* Read only */
+#define SCTP_GET_ASSOC_NUMBER  28      /* Read only */
+#define SCTP_GET_ASSOC_ID_LIST 29      /* Read only */
+#define SCTP_AUTO_ASCONF       30
+#define SCTP_PEER_ADDR_THLDS   31
+#define SCTP_RECVRCVINFO       32
+#define SCTP_RECVNXTINFO       33
+#define SCTP_DEFAULT_SNDINFO   34
+
+/* Internal Socket Options. Some of the sctp library functions are
+ * implemented using these socket options.
+ */
+#define SCTP_SOCKOPT_BINDX_ADD 100     /* BINDX requests for adding addrs */
+#define SCTP_SOCKOPT_BINDX_REM 101     /* BINDX requests for removing addrs. */
+#define SCTP_SOCKOPT_PEELOFF   102     /* peel off association. */
+/* Options 104-106 are deprecated and removed. Do not use this space */
+#define SCTP_SOCKOPT_CONNECTX_OLD      107     /* CONNECTX old requests. */
+#define SCTP_GET_PEER_ADDRS    108             /* Get all peer address. */
+#define SCTP_GET_LOCAL_ADDRS   109             /* Get all local address. */
+#define SCTP_SOCKOPT_CONNECTX  110             /* CONNECTX requests. */
+#define SCTP_SOCKOPT_CONNECTX3 111     /* CONNECTX requests (updated) */
+#define SCTP_GET_ASSOC_STATS   112     /* Read only */
+
+/* These are bit fields for msghdr->msg_flags.  See section 5.1.  */
+/* On user space Linux, these live in <bits/socket.h> as an enum.  */
+enum sctp_msg_flags {
+       MSG_NOTIFICATION = 0x8000,
+#define MSG_NOTIFICATION MSG_NOTIFICATION
+};
+
+/* 5.3.1 SCTP Initiation Structure (SCTP_INIT)
+ *
+ *   This cmsghdr structure provides information for initializing new
+ *   SCTP associations with sendmsg().  The SCTP_INITMSG socket option
+ *   uses this same data structure.  This structure is not used for
+ *   recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   ----------------------
+ *   IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
+ */
+struct sctp_initmsg {
+       __u16 sinit_num_ostreams;
+       __u16 sinit_max_instreams;
+       __u16 sinit_max_attempts;
+       __u16 sinit_max_init_timeo;
+};
+
+/* 5.3.2 SCTP Header Information Structure (SCTP_SNDRCV)
+ *
+ *   This cmsghdr structure specifies SCTP options for sendmsg() and
+ *   describes SCTP header information about a received message through
+ *   recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   ----------------------
+ *   IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
+ */
+struct sctp_sndrcvinfo {
+       __u16 sinfo_stream;
+       __u16 sinfo_ssn;
+       __u16 sinfo_flags;
+       __u32 sinfo_ppid;
+       __u32 sinfo_context;
+       __u32 sinfo_timetolive;
+       __u32 sinfo_tsn;
+       __u32 sinfo_cumtsn;
+       sctp_assoc_t sinfo_assoc_id;
+};
+
+/* 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
+ *
+ *   This cmsghdr structure specifies SCTP options for sendmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_SNDINFO   struct sctp_sndinfo
+ */
+struct sctp_sndinfo {
+       __u16 snd_sid;
+       __u16 snd_flags;
+       __u32 snd_ppid;
+       __u32 snd_context;
+       sctp_assoc_t snd_assoc_id;
+};
+
+/* 5.3.5 SCTP Receive Information Structure (SCTP_RCVINFO)
+ *
+ *   This cmsghdr structure describes SCTP receive information
+ *   about a received message through recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_RCVINFO   struct sctp_rcvinfo
+ */
+struct sctp_rcvinfo {
+       __u16 rcv_sid;
+       __u16 rcv_ssn;
+       __u16 rcv_flags;
+       __u32 rcv_ppid;
+       __u32 rcv_tsn;
+       __u32 rcv_cumtsn;
+       __u32 rcv_context;
+       sctp_assoc_t rcv_assoc_id;
+};
+
+/* 5.3.6 SCTP Next Receive Information Structure (SCTP_NXTINFO)
+ *
+ *   This cmsghdr structure describes SCTP receive information
+ *   of the next message that will be delivered through recvmsg()
+ *   if this information is already available when delivering
+ *   the current message.
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_NXTINFO   struct sctp_nxtinfo
+ */
+struct sctp_nxtinfo {
+       __u16 nxt_sid;
+       __u16 nxt_flags;
+       __u32 nxt_ppid;
+       __u32 nxt_length;
+       sctp_assoc_t nxt_assoc_id;
+};
+
+/*
+ *  sinfo_flags: 16 bits (unsigned integer)
+ *
+ *   This field may contain any of the following flags and is composed of
+ *   a bitwise OR of these values.
+ */
+enum sctp_sinfo_flags {
+       SCTP_UNORDERED          = (1 << 0), /* Send/receive message unordered. */
+       SCTP_ADDR_OVER          = (1 << 1), /* Override the primary destination. */
+       SCTP_ABORT              = (1 << 2), /* Send an ABORT message to the peer. */
+       SCTP_SACK_IMMEDIATELY   = (1 << 3), /* SACK should be sent without delay. */
+       SCTP_NOTIFICATION       = MSG_NOTIFICATION, /* Next message is not user msg but notification. */
+       SCTP_EOF                = MSG_FIN,  /* Initiate graceful shutdown process. */
+};
+
+typedef union {
+       __u8                    raw;
+       struct sctp_initmsg     init;
+       struct sctp_sndrcvinfo  sndrcv;
+} sctp_cmsg_data_t;
+
+/* These are cmsg_types.  */
+typedef enum sctp_cmsg_type {
+       SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
+#define SCTP_INIT      SCTP_INIT
+       SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
+#define SCTP_SNDRCV    SCTP_SNDRCV
+       SCTP_SNDINFO,           /* 5.3.4 SCTP Send Information Structure */
+#define SCTP_SNDINFO   SCTP_SNDINFO
+       SCTP_RCVINFO,           /* 5.3.5 SCTP Receive Information Structure */
+#define SCTP_RCVINFO   SCTP_RCVINFO
+       SCTP_NXTINFO,           /* 5.3.6 SCTP Next Receive Information Structure */
+#define SCTP_NXTINFO   SCTP_NXTINFO
+} sctp_cmsg_t;
+
+/*
+ * 5.3.1.1 SCTP_ASSOC_CHANGE
+ *
+ *   Communication notifications inform the ULP that an SCTP association
+ *   has either begun or ended. The identifier for a new association is
+ *   provided by this notificaion. The notification information has the
+ *   following format:
+ *
+ */
+struct sctp_assoc_change {
+       __u16 sac_type;
+       __u16 sac_flags;
+       __u32 sac_length;
+       __u16 sac_state;
+       __u16 sac_error;
+       __u16 sac_outbound_streams;
+       __u16 sac_inbound_streams;
+       sctp_assoc_t sac_assoc_id;
+       __u8 sac_info[0];
+};
+
+/*
+ *   sac_state: 32 bits (signed integer)
+ *
+ *   This field holds one of a number of values that communicate the
+ *   event that happened to the association.  They include:
+ *
+ *   Note:  The following state names deviate from the API draft as
+ *   the names clash too easily with other kernel symbols.
+ */
+enum sctp_sac_state {
+       SCTP_COMM_UP,
+       SCTP_COMM_LOST,
+       SCTP_RESTART,
+       SCTP_SHUTDOWN_COMP,
+       SCTP_CANT_STR_ASSOC,
+};
+
+/*
+ * 5.3.1.2 SCTP_PEER_ADDR_CHANGE
+ *
+ *   When a destination address on a multi-homed peer encounters a change
+ *   an interface details event is sent.  The information has the
+ *   following structure:
+ */
+struct sctp_paddr_change {
+       __u16 spc_type;
+       __u16 spc_flags;
+       __u32 spc_length;
+       struct sockaddr_storage spc_aaddr;
+       int spc_state;
+       int spc_error;
+       sctp_assoc_t spc_assoc_id;
+} __attribute__((packed, aligned(4)));
+
+/*
+ *    spc_state:  32 bits (signed integer)
+ *
+ *   This field holds one of a number of values that communicate the
+ *   event that happened to the address.  They include:
+ */
+enum sctp_spc_state {
+       SCTP_ADDR_AVAILABLE,
+       SCTP_ADDR_UNREACHABLE,
+       SCTP_ADDR_REMOVED,
+       SCTP_ADDR_ADDED,
+       SCTP_ADDR_MADE_PRIM,
+       SCTP_ADDR_CONFIRMED,
+};
+
+
+/*
+ * 5.3.1.3 SCTP_REMOTE_ERROR
+ *
+ *   A remote peer may send an Operational Error message to its peer.
+ *   This message indicates a variety of error conditions on an
+ *   association. The entire error TLV as it appears on the wire is
+ *   included in a SCTP_REMOTE_ERROR event.  Please refer to the SCTP
+ *   specification [SCTP] and any extensions for a list of possible
+ *   error formats. SCTP error TLVs have the format:
+ */
+struct sctp_remote_error {
+       __u16 sre_type;
+       __u16 sre_flags;
+       __u32 sre_length;
+       __u16 sre_error;
+       sctp_assoc_t sre_assoc_id;
+       __u8 sre_data[0];
+};
+
+
+/*
+ * 5.3.1.4 SCTP_SEND_FAILED
+ *
+ *   If SCTP cannot deliver a message it may return the message as a
+ *   notification.
+ */
+struct sctp_send_failed {
+       __u16 ssf_type;
+       __u16 ssf_flags;
+       __u32 ssf_length;
+       __u32 ssf_error;
+       struct sctp_sndrcvinfo ssf_info;
+       sctp_assoc_t ssf_assoc_id;
+       __u8 ssf_data[0];
+};
+
+/*
+ *   ssf_flags: 16 bits (unsigned integer)
+ *
+ *   The flag value will take one of the following values
+ *
+ *   SCTP_DATA_UNSENT  - Indicates that the data was never put on
+ *                       the wire.
+ *
+ *   SCTP_DATA_SENT    - Indicates that the data was put on the wire.
+ *                       Note that this does not necessarily mean that the
+ *                       data was (or was not) successfully delivered.
+ */
+enum sctp_ssf_flags {
+       SCTP_DATA_UNSENT,
+       SCTP_DATA_SENT,
+};
+
+/*
+ * 5.3.1.5 SCTP_SHUTDOWN_EVENT
+ *
+ *   When a peer sends a SHUTDOWN, SCTP delivers this notification to
+ *   inform the application that it should cease sending data.
+ */
+struct sctp_shutdown_event {
+       __u16 sse_type;
+       __u16 sse_flags;
+       __u32 sse_length;
+       sctp_assoc_t sse_assoc_id;
+};
+
+/*
+ * 5.3.1.6 SCTP_ADAPTATION_INDICATION
+ *
+ *   When a peer sends a Adaptation Layer Indication parameter , SCTP
+ *   delivers this notification to inform the application
+ *   that of the peers requested adaptation layer.
+ */
+struct sctp_adaptation_event {
+       __u16 sai_type;
+       __u16 sai_flags;
+       __u32 sai_length;
+       __u32 sai_adaptation_ind;
+       sctp_assoc_t sai_assoc_id;
+};
+
+/*
+ * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT
+ *
+ *   When a receiver is engaged in a partial delivery of a
+ *   message this notification will be used to indicate
+ *   various events.
+ */
+struct sctp_pdapi_event {
+       __u16 pdapi_type;
+       __u16 pdapi_flags;
+       __u32 pdapi_length;
+       __u32 pdapi_indication;
+       sctp_assoc_t pdapi_assoc_id;
+};
+
+enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
+
+/*
+ * 5.3.1.8.  SCTP_AUTHENTICATION_EVENT
+ *
+ *  When a receiver is using authentication this message will provide
+ *  notifications regarding new keys being made active as well as errors.
+ */
+struct sctp_authkey_event {
+       __u16 auth_type;
+       __u16 auth_flags;
+       __u32 auth_length;
+       __u16 auth_keynumber;
+       __u16 auth_altkeynumber;
+       __u32 auth_indication;
+       sctp_assoc_t auth_assoc_id;
+};
+
+enum { SCTP_AUTH_NEWKEY = 0, };
+
+/*
+ * 6.1.9. SCTP_SENDER_DRY_EVENT
+ *
+ * When the SCTP stack has no more user data to send or retransmit, this
+ * notification is given to the user. Also, at the time when a user app
+ * subscribes to this event, if there is no data to be sent or
+ * retransmit, the stack will immediately send up this notification.
+ */
+struct sctp_sender_dry_event {
+       __u16 sender_dry_type;
+       __u16 sender_dry_flags;
+       __u32 sender_dry_length;
+       sctp_assoc_t sender_dry_assoc_id;
+};
+
+/*
+ * Described in Section 7.3
+ *   Ancillary Data and Notification Interest Options
+ */
+struct sctp_event_subscribe {
+       __u8 sctp_data_io_event;
+       __u8 sctp_association_event;
+       __u8 sctp_address_event;
+       __u8 sctp_send_failure_event;
+       __u8 sctp_peer_error_event;
+       __u8 sctp_shutdown_event;
+       __u8 sctp_partial_delivery_event;
+       __u8 sctp_adaptation_layer_event;
+       __u8 sctp_authentication_event;
+       __u8 sctp_sender_dry_event;
+};
+
+/*
+ * 5.3.1 SCTP Notification Structure
+ *
+ *   The notification structure is defined as the union of all
+ *   notification types.
+ *
+ */
+union sctp_notification {
+       struct {
+               __u16 sn_type;             /* Notification type. */
+               __u16 sn_flags;
+               __u32 sn_length;
+       } sn_header;
+       struct sctp_assoc_change sn_assoc_change;
+       struct sctp_paddr_change sn_paddr_change;
+       struct sctp_remote_error sn_remote_error;
+       struct sctp_send_failed sn_send_failed;
+       struct sctp_shutdown_event sn_shutdown_event;
+       struct sctp_adaptation_event sn_adaptation_event;
+       struct sctp_pdapi_event sn_pdapi_event;
+       struct sctp_authkey_event sn_authkey_event;
+       struct sctp_sender_dry_event sn_sender_dry_event;
+};
+
+/* Section 5.3.1
+ * All standard values for sn_type flags are greater than 2^15.
+ * Values from 2^15 and down are reserved.
+ */
+
+enum sctp_sn_type {
+       SCTP_SN_TYPE_BASE     = (1<<15),
+       SCTP_ASSOC_CHANGE,
+#define SCTP_ASSOC_CHANGE              SCTP_ASSOC_CHANGE
+       SCTP_PEER_ADDR_CHANGE,
+#define SCTP_PEER_ADDR_CHANGE          SCTP_PEER_ADDR_CHANGE
+       SCTP_SEND_FAILED,
+#define SCTP_SEND_FAILED               SCTP_SEND_FAILED
+       SCTP_REMOTE_ERROR,
+#define SCTP_REMOTE_ERROR              SCTP_REMOTE_ERROR
+       SCTP_SHUTDOWN_EVENT,
+#define SCTP_SHUTDOWN_EVENT            SCTP_SHUTDOWN_EVENT
+       SCTP_PARTIAL_DELIVERY_EVENT,
+#define SCTP_PARTIAL_DELIVERY_EVENT    SCTP_PARTIAL_DELIVERY_EVENT
+       SCTP_ADAPTATION_INDICATION,
+#define SCTP_ADAPTATION_INDICATION     SCTP_ADAPTATION_INDICATION
+       SCTP_AUTHENTICATION_EVENT,
+#define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_EVENT
+       SCTP_SENDER_DRY_EVENT,
+#define SCTP_SENDER_DRY_EVENT          SCTP_SENDER_DRY_EVENT
+};
+
+/* Notification error codes used to fill up the error fields in some
+ * notifications.
+ * SCTP_PEER_ADDRESS_CHAGE     : spc_error
+ * SCTP_ASSOC_CHANGE           : sac_error
+ * These names should be potentially included in the draft 04 of the SCTP
+ * sockets API specification.
+ */
+typedef enum sctp_sn_error {
+       SCTP_FAILED_THRESHOLD,
+       SCTP_RECEIVED_SACK,
+       SCTP_HEARTBEAT_SUCCESS,
+       SCTP_RESPONSE_TO_USER_REQ,
+       SCTP_INTERNAL_ERROR,
+       SCTP_SHUTDOWN_GUARD_EXPIRES,
+       SCTP_PEER_FAULTY,
+} sctp_sn_error_t;
+
+/*
+ * 7.1.1 Retransmission Timeout Parameters (SCTP_RTOINFO)
+ *
+ *   The protocol parameters used to initialize and bound retransmission
+ *   timeout (RTO) are tunable.  See [SCTP] for more information on how
+ *   these parameters are used in RTO calculation.
+ */
+struct sctp_rtoinfo {
+       sctp_assoc_t    srto_assoc_id;
+       __u32           srto_initial;
+       __u32           srto_max;
+       __u32           srto_min;
+};
+
+/*
+ * 7.1.2 Association Parameters (SCTP_ASSOCINFO)
+ *
+ *   This option is used to both examine and set various association and
+ *   endpoint parameters.
+ */
+struct sctp_assocparams {
+       sctp_assoc_t    sasoc_assoc_id;
+       __u16           sasoc_asocmaxrxt;
+       __u16           sasoc_number_peer_destinations;
+       __u32           sasoc_peer_rwnd;
+       __u32           sasoc_local_rwnd;
+       __u32           sasoc_cookie_life;
+};
+
+/*
+ * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
+ *
+ *  Requests that the peer mark the enclosed address as the association
+ *  primary. The enclosed address must be one of the association's
+ *  locally bound addresses. The following structure is used to make a
+ *   set primary request:
+ */
+struct sctp_setpeerprim {
+       sctp_assoc_t            sspp_assoc_id;
+       struct sockaddr_storage sspp_addr;
+} __attribute__((packed, aligned(4)));
+
+/*
+ * 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
+ *
+ *  Requests that the local SCTP stack use the enclosed peer address as
+ *  the association primary. The enclosed address must be one of the
+ *  association peer's addresses. The following structure is used to
+ *  make a set peer primary request:
+ */
+struct sctp_prim {
+       sctp_assoc_t            ssp_assoc_id;
+       struct sockaddr_storage ssp_addr;
+} __attribute__((packed, aligned(4)));
+
+/* For backward compatibility use, define the old name too */
+#define sctp_setprim   sctp_prim
+
+/*
+ * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
+ *
+ * Requests that the local endpoint set the specified Adaptation Layer
+ * Indication parameter for all future INIT and INIT-ACK exchanges.
+ */
+struct sctp_setadaptation {
+       __u32   ssb_adaptation_ind;
+};
+
+/*
+ * 7.1.13 Peer Address Parameters  (SCTP_PEER_ADDR_PARAMS)
+ *
+ *   Applications can enable or disable heartbeats for any peer address
+ *   of an association, modify an address's heartbeat interval, force a
+ *   heartbeat to be sent immediately, and adjust the address's maximum
+ *   number of retransmissions sent before an address is considered
+ *   unreachable. The following structure is used to access and modify an
+ *   address's parameters:
+ */
+enum  sctp_spp_flags {
+       SPP_HB_ENABLE = 1<<0,           /*Enable heartbeats*/
+       SPP_HB_DISABLE = 1<<1,          /*Disable heartbeats*/
+       SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
+       SPP_HB_DEMAND = 1<<2,           /*Send heartbeat immediately*/
+       SPP_PMTUD_ENABLE = 1<<3,        /*Enable PMTU discovery*/
+       SPP_PMTUD_DISABLE = 1<<4,       /*Disable PMTU discovery*/
+       SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
+       SPP_SACKDELAY_ENABLE = 1<<5,    /*Enable SACK*/
+       SPP_SACKDELAY_DISABLE = 1<<6,   /*Disable SACK*/
+       SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
+       SPP_HB_TIME_IS_ZERO = 1<<7,     /* Set HB delay to 0 */
+};
+
+struct sctp_paddrparams {
+       sctp_assoc_t            spp_assoc_id;
+       struct sockaddr_storage spp_address;
+       __u32                   spp_hbinterval;
+       __u16                   spp_pathmaxrxt;
+       __u32                   spp_pathmtu;
+       __u32                   spp_sackdelay;
+       __u32                   spp_flags;
+} __attribute__((packed, aligned(4)));
+
+/*
+ * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
+ *
+ * This set option adds a chunk type that the user is requesting to be
+ * received only in an authenticated way.  Changes to the list of chunks
+ * will only effect future associations on the socket.
+ */
+struct sctp_authchunk {
+       __u8            sauth_chunk;
+};
+
+/*
+ * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
+ *
+ * This option gets or sets the list of HMAC algorithms that the local
+ * endpoint requires the peer to use.
+ */
+/* This here is only used by user space as is. It might not be a good idea
+ * to export/reveal the whole structure with reserved fields etc.
+ */
+enum {
+       SCTP_AUTH_HMAC_ID_SHA1 = 1,
+       SCTP_AUTH_HMAC_ID_SHA256 = 3,
+};
+
+struct sctp_hmacalgo {
+       __u32           shmac_num_idents;
+       __u16           shmac_idents[];
+};
+
+/* Sadly, user and kernel space have different names for
+ * this structure member, so this is to not break anything.
+ */
+#define shmac_number_of_idents shmac_num_idents
+
+/*
+ * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
+ *
+ * This option will set a shared secret key which is used to build an
+ * association shared key.
+ */
+struct sctp_authkey {
+       sctp_assoc_t    sca_assoc_id;
+       __u16           sca_keynumber;
+       __u16           sca_keylength;
+       __u8            sca_key[];
+};
+
+/*
+ * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
+ *
+ * This option will get or set the active shared key to be used to build
+ * the association shared key.
+ */
+
+struct sctp_authkeyid {
+       sctp_assoc_t    scact_assoc_id;
+       __u16           scact_keynumber;
+};
+
+
+/*
+ * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
+ *
+ * This option will effect the way delayed acks are performed.  This
+ * option allows you to get or set the delayed ack time, in
+ * milliseconds.  It also allows changing the delayed ack frequency.
+ * Changing the frequency to 1 disables the delayed sack algorithm.  If
+ * the assoc_id is 0, then this sets or gets the endpoints default
+ * values.  If the assoc_id field is non-zero, then the set or get
+ * effects the specified association for the one to many model (the
+ * assoc_id field is ignored by the one to one model).  Note that if
+ * sack_delay or sack_freq are 0 when setting this option, then the
+ * current values will remain unchanged.
+ */
+struct sctp_sack_info {
+       sctp_assoc_t    sack_assoc_id;
+       uint32_t        sack_delay;
+       uint32_t        sack_freq;
+};
+
+struct sctp_assoc_value {
+    sctp_assoc_t            assoc_id;
+    uint32_t                assoc_value;
+};
+
+/*
+ * 7.2.2 Peer Address Information
+ *
+ *   Applications can retrieve information about a specific peer address
+ *   of an association, including its reachability state, congestion
+ *   window, and retransmission timer values.  This information is
+ *   read-only. The following structure is used to access this
+ *   information:
+ */
+struct sctp_paddrinfo {
+       sctp_assoc_t            spinfo_assoc_id;
+       struct sockaddr_storage spinfo_address;
+       __s32                   spinfo_state;
+       __u32                   spinfo_cwnd;
+       __u32                   spinfo_srtt;
+       __u32                   spinfo_rto;
+       __u32                   spinfo_mtu;
+} __attribute__((packed, aligned(4)));
+
+/* Peer addresses's state. */
+/* UNKNOWN: Peer address passed by the upper layer in sendmsg or connect[x]
+ * calls.
+ * UNCONFIRMED: Peer address received in INIT/INIT-ACK address parameters.
+ *              Not yet confirmed by a heartbeat and not available for data
+ *             transfers.
+ * ACTIVE : Peer address confirmed, active and available for data transfers.
+ * INACTIVE: Peer address inactive and not available for data transfers.
+ */
+enum sctp_spinfo_state {
+       SCTP_INACTIVE,
+       SCTP_PF,
+       SCTP_ACTIVE,
+       SCTP_UNCONFIRMED,
+       SCTP_UNKNOWN = 0xffff  /* Value used for transport state unknown */
+};
+
+/*
+ * 7.2.1 Association Status (SCTP_STATUS)
+ *
+ *   Applications can retrieve current status information about an
+ *   association, including association state, peer receiver window size,
+ *   number of unacked data chunks, and number of data chunks pending
+ *   receipt.  This information is read-only.  The following structure is
+ *   used to access this information:
+ */
+struct sctp_status {
+       sctp_assoc_t            sstat_assoc_id;
+       __s32                   sstat_state;
+       __u32                   sstat_rwnd;
+       __u16                   sstat_unackdata;
+       __u16                   sstat_penddata;
+       __u16                   sstat_instrms;
+       __u16                   sstat_outstrms;
+       __u32                   sstat_fragmentation_point;
+       struct sctp_paddrinfo   sstat_primary;
+};
+
+/*
+ * 7.2.3.  Get the list of chunks the peer requires to be authenticated
+ *         (SCTP_PEER_AUTH_CHUNKS)
+ *
+ * This option gets a list of chunks for a specified association that
+ * the peer requires to be received authenticated only.
+ */
+struct sctp_authchunks {
+       sctp_assoc_t    gauth_assoc_id;
+       __u32           gauth_number_of_chunks;
+       uint8_t         gauth_chunks[];
+};
+
+/* The broken spelling has been released already in lksctp-tools header,
+ * so don't break anyone, now that it's fixed.
+ */
+#define guth_number_of_chunks  gauth_number_of_chunks
+
+/* Association states.  */
+enum sctp_sstat_state {
+       SCTP_EMPTY                = 0,
+       SCTP_CLOSED               = 1,
+       SCTP_COOKIE_WAIT          = 2,
+       SCTP_COOKIE_ECHOED        = 3,
+       SCTP_ESTABLISHED          = 4,
+       SCTP_SHUTDOWN_PENDING     = 5,
+       SCTP_SHUTDOWN_SENT        = 6,
+       SCTP_SHUTDOWN_RECEIVED    = 7,
+       SCTP_SHUTDOWN_ACK_SENT    = 8,
+};
+
+/*
+ * 8.2.6. Get the Current Identifiers of Associations
+ *        (SCTP_GET_ASSOC_ID_LIST)
+ *
+ * This option gets the current list of SCTP association identifiers of
+ * the SCTP associations handled by a one-to-many style socket.
+ */
+struct sctp_assoc_ids {
+       __u32           gaids_number_of_ids;
+       sctp_assoc_t    gaids_assoc_id[];
+};
+
+/*
+ * 8.3, 8.5 get all peer/local addresses in an association.
+ * This parameter struct is used by SCTP_GET_PEER_ADDRS and
+ * SCTP_GET_LOCAL_ADDRS socket options used internally to implement
+ * sctp_getpaddrs() and sctp_getladdrs() API.
+ */
+struct sctp_getaddrs_old {
+       sctp_assoc_t            assoc_id;
+       int                     addr_num;
+       struct sockaddr         *addrs;
+};
+
+struct sctp_getaddrs {
+       sctp_assoc_t            assoc_id; /*input*/
+       __u32                   addr_num; /*output*/
+       __u8                    addrs[0]; /*output, variable size*/
+};
+
+/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
+ * association stats. All stats are counts except sas_maxrto and
+ * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
+ * the last call. Will return 0 when RTO was not update since last call
+ */
+struct sctp_assoc_stats {
+       sctp_assoc_t    sas_assoc_id;    /* Input */
+                                        /* Transport of observed max RTO */
+       struct sockaddr_storage sas_obs_rto_ipaddr;
+       __u64           sas_maxrto;      /* Maximum Observed RTO for period */
+       __u64           sas_isacks;      /* SACKs received */
+       __u64           sas_osacks;      /* SACKs sent */
+       __u64           sas_opackets;    /* Packets sent */
+       __u64           sas_ipackets;    /* Packets received */
+       __u64           sas_rtxchunks;   /* Retransmitted Chunks */
+       __u64           sas_outofseqtsns;/* TSN received > next expected */
+       __u64           sas_idupchunks;  /* Dups received (ordered+unordered) */
+       __u64           sas_gapcnt;      /* Gap Acknowledgements Received */
+       __u64           sas_ouodchunks;  /* Unordered data chunks sent */
+       __u64           sas_iuodchunks;  /* Unordered data chunks received */
+       __u64           sas_oodchunks;   /* Ordered data chunks sent */
+       __u64           sas_iodchunks;   /* Ordered data chunks received */
+       __u64           sas_octrlchunks; /* Control chunks sent */
+       __u64           sas_ictrlchunks; /* Control chunks received */
+};
+
+/*
+ * 8.1 sctp_bindx()
+ *
+ * The flags parameter is formed from the bitwise OR of zero or more of the
+ * following currently defined flags:
+ */
+#define SCTP_BINDX_ADD_ADDR 0x01
+#define SCTP_BINDX_REM_ADDR 0x02
+
+/* This is the structure that is passed as an argument(optval) to
+ * getsockopt(SCTP_SOCKOPT_PEELOFF).
+ */
+typedef struct {
+       sctp_assoc_t associd;
+       int sd;
+} sctp_peeloff_arg_t;
+
+/*
+ *  Peer Address Thresholds socket option
+ */
+struct sctp_paddrthlds {
+       sctp_assoc_t spt_assoc_id;
+       struct sockaddr_storage spt_address;
+       __u16 spt_pathmaxrxt;
+       __u16 spt_pathpfthld;
+};
+
+#endif /* _SCTP_H */
diff --git a/lib/libdss-include/include/linux/sdla.h b/lib/libdss-include/include/linux/sdla.h
new file mode 100644 (file)
index 0000000..0760ba4
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the Frame relay interface.
+ *
+ * Version:    @(#)if_ifrad.h  0.20    13 Apr 96
+ *
+ * Author:     Mike McLagan <mike.mclagan@linux.org>
+ *
+ * Changes:
+ *             0.15    Mike McLagan    Structure packing
+ *
+ *             0.20    Mike McLagan    New flags for S508 buffer handling
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef SDLA_H
+#define SDLA_H
+
+/* adapter type */
+#define SDLA_TYPES
+#define SDLA_S502A                     5020
+#define SDLA_S502E                     5021
+#define SDLA_S503                      5030
+#define SDLA_S507                      5070
+#define SDLA_S508                      5080
+#define SDLA_S509                      5090
+#define SDLA_UNKNOWN                   -1
+
+/* port selection flags for the S508 */
+#define SDLA_S508_PORT_V35             0x00
+#define SDLA_S508_PORT_RS232           0x02
+
+/* Z80 CPU speeds */
+#define SDLA_CPU_3M                    0x00
+#define SDLA_CPU_5M                    0x01
+#define SDLA_CPU_7M                    0x02
+#define SDLA_CPU_8M                    0x03
+#define SDLA_CPU_10M                   0x04
+#define SDLA_CPU_16M                   0x05
+#define SDLA_CPU_12M                   0x06
+
+/* some private IOCTLs */
+#define SDLA_IDENTIFY                  (FRAD_LAST_IOCTL + 1)
+#define SDLA_CPUSPEED                  (FRAD_LAST_IOCTL + 2)
+#define SDLA_PROTOCOL                  (FRAD_LAST_IOCTL + 3)
+
+#define SDLA_CLEARMEM                  (FRAD_LAST_IOCTL + 4)
+#define SDLA_WRITEMEM                  (FRAD_LAST_IOCTL + 5)
+#define SDLA_READMEM                   (FRAD_LAST_IOCTL + 6)
+
+struct sdla_mem {
+   int  addr;
+   int  len;
+   void *data;
+};
+
+#define SDLA_START                     (FRAD_LAST_IOCTL + 7)
+#define SDLA_STOP                      (FRAD_LAST_IOCTL + 8)
+
+/* some offsets in the Z80's memory space */
+#define SDLA_NMIADDR                   0x0000
+#define SDLA_CONF_ADDR                 0x0010
+#define SDLA_S502A_NMIADDR             0x0066
+#define SDLA_CODE_BASEADDR             0x0100
+#define SDLA_WINDOW_SIZE               0x2000
+#define SDLA_ADDR_MASK                 0x1FFF
+
+/* largest handleable block of data */
+#define SDLA_MAX_DATA                  4080
+#define SDLA_MAX_MTU                   4072    /* MAX_DATA - sizeof(fradhdr) */
+#define SDLA_MAX_DLCI                  24
+
+/* this should be the same as frad_conf */
+struct sdla_conf {
+   short station;
+   short config;
+   short kbaud;
+   short clocking;
+   short max_frm;
+   short T391;
+   short T392;
+   short N391;
+   short N392;
+   short N393;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd;
+};
+
+/* this should be the same as dlci_conf */
+struct sdla_dlci_conf {
+   short config;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd; 
+   short Tc_fwd;
+   short Tc_bwd;
+   short Tf_max;
+   short Tb_max;
+};
+
+
+#endif /* SDLA_H */
diff --git a/lib/libdss-include/include/linux/seccomp.h b/lib/libdss-include/include/linux/seccomp.h
new file mode 100644 (file)
index 0000000..2f4c2e9
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _LINUX_SECCOMP_H
+#define _LINUX_SECCOMP_H
+
+
+#include <linux/types.h>
+
+
+/* Valid values for seccomp.mode and prctl(PR_SET_SECCOMP, <mode>) */
+#define SECCOMP_MODE_DISABLED  0 /* seccomp is not in use. */
+#define SECCOMP_MODE_STRICT    1 /* uses hard-coded filter. */
+#define SECCOMP_MODE_FILTER    2 /* uses user-supplied filter. */
+
+/* Valid operations for seccomp syscall. */
+#define SECCOMP_SET_MODE_STRICT        0
+#define SECCOMP_SET_MODE_FILTER        1
+
+/* Valid flags for SECCOMP_SET_MODE_FILTER */
+#define SECCOMP_FILTER_FLAG_TSYNC      1
+
+/*
+ * All BPF programs must return a 32-bit value.
+ * The bottom 16-bits are for optional return data.
+ * The upper 16-bits are ordered from least permissive values to most.
+ *
+ * The ordering ensures that a min_t() over composed return values always
+ * selects the least permissive choice.
+ */
+#define SECCOMP_RET_KILL       0x00000000U /* kill the task immediately */
+#define SECCOMP_RET_TRAP       0x00030000U /* disallow and force a SIGSYS */
+#define SECCOMP_RET_ERRNO      0x00050000U /* returns an errno */
+#define SECCOMP_RET_TRACE      0x7ff00000U /* pass to a tracer or disallow */
+#define SECCOMP_RET_ALLOW      0x7fff0000U /* allow */
+
+/* Masks for the return value sections. */
+#define SECCOMP_RET_ACTION     0x7fff0000U
+#define SECCOMP_RET_DATA       0x0000ffffU
+
+/**
+ * struct seccomp_data - the format the BPF program executes over.
+ * @nr: the system call number
+ * @arch: indicates system call convention as an AUDIT_ARCH_* value
+ *        as defined in <linux/audit.h>.
+ * @instruction_pointer: at the time of the system call.
+ * @args: up to 6 system call arguments always stored as 64-bit values
+ *        regardless of the architecture.
+ */
+struct seccomp_data {
+       int nr;
+       __u32 arch;
+       __u64 instruction_pointer;
+       __u64 args[6];
+};
+
+#endif /* _LINUX_SECCOMP_H */
diff --git a/lib/libdss-include/include/linux/securebits.h b/lib/libdss-include/include/linux/securebits.h
new file mode 100644 (file)
index 0000000..57a1811
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _LINUX_SECUREBITS_H
+#define _LINUX_SECUREBITS_H
+
+/* Each securesetting is implemented using two bits. One bit specifies
+   whether the setting is on or off. The other bit specify whether the
+   setting is locked or not. A setting which is locked cannot be
+   changed from user-level. */
+#define issecure_mask(X)       (1 << (X))
+
+#define SECUREBITS_DEFAULT 0x00000000
+
+/* When set UID 0 has no special privileges. When unset, we support
+   inheritance of root-permissions and suid-root executable under
+   compatibility mode. We raise the effective and inheritable bitmasks
+   *of the executable file* if the effective uid of the new process is
+   0. If the real uid is 0, we raise the effective (legacy) bit of the
+   executable file. */
+#define SECURE_NOROOT                  0
+#define SECURE_NOROOT_LOCKED           1  /* make bit-0 immutable */
+
+#define SECBIT_NOROOT          (issecure_mask(SECURE_NOROOT))
+#define SECBIT_NOROOT_LOCKED   (issecure_mask(SECURE_NOROOT_LOCKED))
+
+/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
+   When unset, to provide compatiblility with old programs relying on
+   set*uid to gain/lose privilege, transitions to/from uid 0 cause
+   capabilities to be gained/lost. */
+#define SECURE_NO_SETUID_FIXUP         2
+#define SECURE_NO_SETUID_FIXUP_LOCKED  3  /* make bit-2 immutable */
+
+#define SECBIT_NO_SETUID_FIXUP (issecure_mask(SECURE_NO_SETUID_FIXUP))
+#define SECBIT_NO_SETUID_FIXUP_LOCKED \
+                       (issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
+
+/* When set, a process can retain its capabilities even after
+   transitioning to a non-root user (the set-uid fixup suppressed by
+   bit 2). Bit-4 is cleared when a process calls exec(); setting both
+   bit 4 and 5 will create a barrier through exec that no exec()'d
+   child can use this feature again. */
+#define SECURE_KEEP_CAPS               4
+#define SECURE_KEEP_CAPS_LOCKED                5  /* make bit-4 immutable */
+
+#define SECBIT_KEEP_CAPS       (issecure_mask(SECURE_KEEP_CAPS))
+#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
+
+/* When set, a process cannot add new capabilities to its ambient set. */
+#define SECURE_NO_CAP_AMBIENT_RAISE            6
+#define SECURE_NO_CAP_AMBIENT_RAISE_LOCKED     7  /* make bit-6 immutable */
+
+#define SECBIT_NO_CAP_AMBIENT_RAISE (issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
+#define SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED \
+                       (issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE_LOCKED))
+
+#define SECURE_ALL_BITS                (issecure_mask(SECURE_NOROOT) | \
+                                issecure_mask(SECURE_NO_SETUID_FIXUP) | \
+                                issecure_mask(SECURE_KEEP_CAPS) | \
+                                issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
+#define SECURE_ALL_LOCKS       (SECURE_ALL_BITS << 1)
+
+#endif /* _LINUX_SECUREBITS_H */
diff --git a/lib/libdss-include/include/linux/selinux_netlink.h b/lib/libdss-include/include/linux/selinux_netlink.h
new file mode 100644 (file)
index 0000000..7a9bf6a
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Netlink event notifications for SELinux.
+ *
+ * Author: James Morris <jmorris@redhat.com>
+ *
+ * Copyright (C) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ */
+#ifndef _LINUX_SELINUX_NETLINK_H
+#define _LINUX_SELINUX_NETLINK_H
+
+#include <linux/types.h>
+
+/* Message types. */
+#define SELNL_MSG_BASE 0x10
+enum {
+       SELNL_MSG_SETENFORCE = SELNL_MSG_BASE,
+       SELNL_MSG_POLICYLOAD,
+       SELNL_MSG_MAX
+};
+
+/* Multicast groups - backwards compatiblility for userspace */
+#define SELNL_GRP_NONE         0x00000000
+#define SELNL_GRP_AVC          0x00000001      /* AVC notifications */
+#define SELNL_GRP_ALL          0xffffffff
+
+enum selinux_nlgroups {
+       SELNLGRP_NONE,
+#define SELNLGRP_NONE  SELNLGRP_NONE
+       SELNLGRP_AVC,
+#define SELNLGRP_AVC   SELNLGRP_AVC
+       __SELNLGRP_MAX
+};
+#define SELNLGRP_MAX   (__SELNLGRP_MAX - 1)
+
+/* Message structures */
+struct selnl_msg_setenforce {
+       __s32           val;
+};
+
+struct selnl_msg_policyload {
+       __u32   seqno;
+};
+
+#endif /* _LINUX_SELINUX_NETLINK_H */
diff --git a/lib/libdss-include/include/linux/sem.h b/lib/libdss-include/include/linux/sem.h
new file mode 100644 (file)
index 0000000..b605950
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef _LINUX_SEM_H
+#define _LINUX_SEM_H
+
+#include <linux/ipc.h>
+
+/* semop flags */
+#define SEM_UNDO        0x1000  /* undo the operation on exit */
+
+/* semctl Command Definitions. */
+#define GETPID  11       /* get sempid */
+#define GETVAL  12       /* get semval */
+#define GETALL  13       /* get all semval's */
+#define GETNCNT 14       /* get semncnt */
+#define GETZCNT 15       /* get semzcnt */
+#define SETVAL  16       /* set semval */
+#define SETALL  17       /* set all semval's */
+
+/* ipcs ctl cmds */
+#define SEM_STAT 18
+#define SEM_INFO 19
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct semid_ds {
+       struct ipc_perm sem_perm;               /* permissions .. see ipc.h */
+       __kernel_time_t sem_otime;              /* last semop time */
+       __kernel_time_t sem_ctime;              /* last change time */
+       struct sem      *sem_base;              /* ptr to first semaphore in array */
+       struct sem_queue *sem_pending;          /* pending operations to be processed */
+       struct sem_queue **sem_pending_last;    /* last pending operation */
+       struct sem_undo *undo;                  /* undo requests on this array */
+       unsigned short  sem_nsems;              /* no. of semaphores in array */
+};
+
+/* Include the definition of semid64_ds */
+#include <asm/sembuf.h>
+
+/* semop system calls takes an array of these. */
+struct sembuf {
+       unsigned short  sem_num;        /* semaphore index in array */
+       short           sem_op;         /* semaphore operation */
+       short           sem_flg;        /* operation flags */
+};
+
+/* arg for semctl system calls. */
+union semun {
+       int val;                        /* value for SETVAL */
+       struct semid_ds *buf;   /* buffer for IPC_STAT & IPC_SET */
+       unsigned short *array;  /* array for GETALL & SETALL */
+       struct seminfo *__buf;  /* buffer for IPC_INFO */
+       void *__pad;
+};
+
+struct  seminfo {
+       int semmap;
+       int semmni;
+       int semmns;
+       int semmnu;
+       int semmsl;
+       int semopm;
+       int semume;
+       int semusz;
+       int semvmx;
+       int semaem;
+};
+
+/*
+ * SEMMNI, SEMMSL and SEMMNS are default values which can be
+ * modified by sysctl.
+ * The values has been chosen to be larger than necessary for any
+ * known configuration.
+ *
+ * SEMOPM should not be increased beyond 1000, otherwise there is the
+ * risk that semop()/semtimedop() fails due to kernel memory fragmentation when
+ * allocating the sop array.
+ */
+
+
+#define SEMMNI  32000           /* <= IPCMNI  max # of semaphore identifiers */
+#define SEMMSL  32000           /* <= INT_MAX max num of semaphores per id */
+#define SEMMNS  (SEMMNI*SEMMSL) /* <= INT_MAX max # of semaphores in system */
+#define SEMOPM  500            /* <= 1 000 max num of ops per semop call */
+#define SEMVMX  32767           /* <= 32767 semaphore maximum value */
+#define SEMAEM  SEMVMX          /* adjust on exit max value */
+
+/* unused */
+#define SEMUME  SEMOPM          /* max num of undo entries per process */
+#define SEMMNU  SEMMNS          /* num of undo structures system wide */
+#define SEMMAP  SEMMNS          /* # of entries in semaphore map */
+#define SEMUSZ  20             /* sizeof struct sem_undo */
+
+
+#endif /* _LINUX_SEM_H */
diff --git a/lib/libdss-include/include/linux/serial.h b/lib/libdss-include/include/linux/serial.h
new file mode 100644 (file)
index 0000000..1e0531d
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * include/linux/serial.h
+ *
+ * Copyright (C) 1992 by Theodore Ts'o.
+ * 
+ * Redistribution of this file is permitted under the terms of the GNU 
+ * Public License (GPL)
+ */
+
+#ifndef _LINUX_SERIAL_H
+#define _LINUX_SERIAL_H
+
+#include <linux/types.h>
+
+#include <linux/tty_flags.h>
+
+
+struct serial_struct {
+       int     type;
+       int     line;
+       unsigned int    port;
+       int     irq;
+       int     flags;
+       int     xmit_fifo_size;
+       int     custom_divisor;
+       int     baud_base;
+       unsigned short  close_delay;
+       char    io_type;
+       char    reserved_char[1];
+       int     hub6;
+       unsigned short  closing_wait; /* time to wait before closing */
+       unsigned short  closing_wait2; /* no longer used... */
+       unsigned char   *iomem_base;
+       unsigned short  iomem_reg_shift;
+       unsigned int    port_high;
+       unsigned long   iomap_base;     /* cookie passed into ioremap */
+};
+
+/*
+ * For the close wait times, 0 means wait forever for serial port to
+ * flush its output.  65535 means don't wait at all.
+ */
+#define ASYNC_CLOSING_WAIT_INF 0
+#define ASYNC_CLOSING_WAIT_NONE        65535
+
+/*
+ * These are the supported serial types.
+ */
+#define PORT_UNKNOWN   0
+#define PORT_8250      1
+#define PORT_16450     2
+#define PORT_16550     3
+#define PORT_16550A    4
+#define PORT_CIRRUS     5      /* usurped by cyclades.c */
+#define PORT_16650     6
+#define PORT_16650V2   7
+#define PORT_16750     8
+#define PORT_STARTECH  9       /* usurped by cyclades.c */
+#define PORT_16C950    10      /* Oxford Semiconductor */
+#define PORT_16654     11
+#define PORT_16850     12
+#define PORT_RSA       13      /* RSA-DV II/S card */
+#define PORT_MAX       13
+
+#define SERIAL_IO_PORT 0
+#define SERIAL_IO_HUB6 1
+#define SERIAL_IO_MEM  2
+#define SERIAL_IO_MEM32          3
+#define SERIAL_IO_AU     4
+#define SERIAL_IO_TSI    5
+#define SERIAL_IO_MEM32BE 6
+
+#define UART_CLEAR_FIFO                0x01
+#define UART_USE_FIFO          0x02
+#define UART_STARTECH          0x04
+#define UART_NATSEMI           0x08
+
+
+/*
+ * Multiport serial configuration structure --- external structure
+ */
+struct serial_multiport_struct {
+       int             irq;
+       int             port1;
+       unsigned char   mask1, match1;
+       int             port2;
+       unsigned char   mask2, match2;
+       int             port3;
+       unsigned char   mask3, match3;
+       int             port4;
+       unsigned char   mask4, match4;
+       int             port_monitor;
+       int     reserved[32];
+};
+
+/*
+ * Serial input interrupt line counters -- external structure
+ * Four lines can interrupt: CTS, DSR, RI, DCD
+ */
+struct serial_icounter_struct {
+       int cts, dsr, rng, dcd;
+       int rx, tx;
+       int frame, overrun, parity, brk;
+       int buf_overrun;
+       int reserved[9];
+};
+
+/*
+ * Serial interface for controlling RS485 settings on chips with suitable
+ * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
+ * platform. The set function returns the new state, with any unsupported bits
+ * reverted appropriately.
+ */
+
+struct serial_rs485 {
+       __u32   flags;                  /* RS485 feature flags */
+#define SER_RS485_ENABLED              (1 << 0)        /* If enabled */
+#define SER_RS485_RTS_ON_SEND          (1 << 1)        /* Logical level for
+                                                          RTS pin when
+                                                          sending */
+#define SER_RS485_RTS_AFTER_SEND       (1 << 2)        /* Logical level for
+                                                          RTS pin after sent*/
+#define SER_RS485_RX_DURING_TX         (1 << 4)
+       __u32   delay_rts_before_send;  /* Delay before send (milliseconds) */
+       __u32   delay_rts_after_send;   /* Delay after send (milliseconds) */
+       __u32   padding[5];             /* Memory is cheap, new structs
+                                          are a royal PITA .. */
+};
+
+#endif /* _LINUX_SERIAL_H */
diff --git a/lib/libdss-include/include/linux/serial_core.h b/lib/libdss-include/include/linux/serial_core.h
new file mode 100644 (file)
index 0000000..dd0f071
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ *  linux/drivers/char/serial_core.h
+ *
+ *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef LINUX_SERIAL_CORE_H
+#define LINUX_SERIAL_CORE_H
+
+#include <linux/serial.h>
+
+/*
+ * The type definitions.  These are from Ted Ts'o's serial.h
+ */
+#define PORT_UNKNOWN   0
+#define PORT_8250      1
+#define PORT_16450     2
+#define PORT_16550     3
+#define PORT_16550A    4
+#define PORT_CIRRUS    5
+#define PORT_16650     6
+#define PORT_16650V2   7
+#define PORT_16750     8
+#define PORT_STARTECH  9
+#define PORT_16C950    10
+#define PORT_16654     11
+#define PORT_16850     12
+#define PORT_RSA       13
+#define PORT_NS16550A  14
+#define PORT_XSCALE    15
+#define PORT_RM9000    16      /* PMC-Sierra RM9xxx internal UART */
+#define PORT_OCTEON    17      /* Cavium OCTEON internal UART */
+#define PORT_AR7       18      /* Texas Instruments AR7 internal UART */
+#define PORT_U6_16550A 19      /* ST-Ericsson U6xxx internal UART */
+#define PORT_TEGRA     20      /* NVIDIA Tegra internal UART */
+#define PORT_XR17D15X  21      /* Exar XR17D15x UART */
+#define PORT_LPC3220   22      /* NXP LPC32xx SoC "Standard" UART */
+#define PORT_8250_CIR  23      /* CIR infrared port, has its own driver */
+#define PORT_XR17V35X  24      /* Exar XR17V35x UARTs */
+#define PORT_BRCM_TRUMANAGE    25
+#define PORT_ALTR_16550_F32 26 /* Altera 16550 UART with 32 FIFOs */
+#define PORT_ALTR_16550_F64 27 /* Altera 16550 UART with 64 FIFOs */
+#define PORT_ALTR_16550_F128 28 /* Altera 16550 UART with 128 FIFOs */
+#define PORT_RT2880    29      /* Ralink RT2880 internal UART */
+#define PORT_16550A_FSL64 30   /* Freescale 16550 UART with 64 FIFOs */
+#define PORT_MAX_8250  30      /* max port ID */
+
+/*
+ * ARM specific type numbers.  These are not currently guaranteed
+ * to be implemented, and will change in the future.  These are
+ * separate so any additions to the old serial.c that occur before
+ * we are merged can be easily merged here.
+ */
+#define PORT_PXA       31
+#define PORT_AMBA      32
+#define PORT_CLPS711X  33
+#define PORT_SA1100    34
+#define PORT_UART00    35
+#define PORT_21285     37
+
+/* Sparc type numbers.  */
+#define PORT_SUNZILOG  38
+#define PORT_SUNSAB    39
+
+/* DEC */
+#define PORT_DZ                46
+#define PORT_ZS                47
+
+/* Parisc type numbers. */
+#define PORT_MUX       48
+
+/* Atmel AT91 / AT32 SoC */
+#define PORT_ATMEL     49
+
+/* Macintosh Zilog type numbers */
+#define PORT_MAC_ZILOG 50      /* m68k : not yet implemented */
+#define PORT_PMAC_ZILOG        51
+
+/* SH-SCI */
+#define PORT_SCI       52
+#define PORT_SCIF      53
+#define PORT_IRDA      54
+
+/* Samsung S3C2410 SoC and derivatives thereof */
+#define PORT_S3C2410    55
+
+/* SGI IP22 aka Indy / Challenge S / Indigo 2 */
+#define PORT_IP22ZILOG 56
+
+/* Sharp LH7a40x -- an ARM9 SoC series */
+#define PORT_LH7A40X   57
+
+/* PPC CPM type number */
+#define PORT_CPM        58
+
+/* MPC52xx (and MPC512x) type numbers */
+#define PORT_MPC52xx   59
+
+/* IBM icom */
+#define PORT_ICOM      60
+
+/* Samsung S3C2440 SoC */
+#define PORT_S3C2440   61
+
+/* Motorola i.MX SoC */
+#define PORT_IMX       62
+
+/* Marvell MPSC */
+#define PORT_MPSC      63
+
+/* TXX9 type number */
+#define PORT_TXX9      64
+
+/* NEC VR4100 series SIU/DSIU */
+#define PORT_VR41XX_SIU                65
+#define PORT_VR41XX_DSIU       66
+
+/* Samsung S3C2400 SoC */
+#define PORT_S3C2400   67
+
+/* M32R SIO */
+#define PORT_M32R_SIO  68
+
+/*Digi jsm */
+#define PORT_JSM        69
+
+#define PORT_PNX8XXX   70
+
+/* Hilscher netx */
+#define PORT_NETX      71
+
+/* SUN4V Hypervisor Console */
+#define PORT_SUNHV     72
+
+#define PORT_S3C2412   73
+
+/* Xilinx uartlite */
+#define PORT_UARTLITE  74
+
+/* Blackfin bf5xx */
+#define PORT_BFIN      75
+
+/* Micrel KS8695 */
+#define PORT_KS8695    76
+
+/* Broadcom SB1250, etc. SOC */
+#define PORT_SB1250_DUART      77
+
+/* Freescale ColdFire */
+#define PORT_MCF       78
+
+/* Blackfin SPORT */
+#define PORT_BFIN_SPORT                79
+
+/* MN10300 on-chip UART numbers */
+#define PORT_MN10300           80
+#define PORT_MN10300_CTS       81
+
+#define PORT_SC26XX    82
+
+/* SH-SCI */
+#define PORT_SCIFA     83
+
+#define PORT_S3C6400   84
+
+/* NWPSERIAL */
+#define PORT_NWPSERIAL 85
+
+/* MAX3100 */
+#define PORT_MAX3100    86
+
+/* Timberdale UART */
+#define PORT_TIMBUART  87
+
+/* Qualcomm MSM SoCs */
+#define PORT_MSM       88
+
+/* BCM63xx family SoCs */
+#define PORT_BCM63XX   89
+
+/* Aeroflex Gaisler GRLIB APBUART */
+#define PORT_APBUART    90
+
+/* Altera UARTs */
+#define PORT_ALTERA_JTAGUART   91
+#define PORT_ALTERA_UART       92
+
+/* SH-SCI */
+#define PORT_SCIFB     93
+
+/* MAX310X */
+#define PORT_MAX310X   94
+
+/* High Speed UART for Medfield */
+#define PORT_MFD       95
+
+/* TI OMAP-UART */
+#define PORT_OMAP      96
+
+/* VIA VT8500 SoC */
+#define PORT_VT8500    97
+
+/* Cadence (Xilinx Zynq) UART */
+#define PORT_XUARTPS   98
+
+/* Atheros AR933X SoC */
+#define PORT_AR933X    99
+
+/* Energy Micro efm32 SoC */
+#define PORT_EFMUART   100
+
+/* ARC (Synopsys) on-chip UART */
+#define PORT_ARC       101
+
+/* Rocketport EXPRESS/INFINITY */
+#define PORT_RP2       102
+
+/* Freescale lpuart */
+#define PORT_LPUART    103
+
+/* SH-SCI */
+#define PORT_HSCIF     104
+
+/* ST ASC type numbers */
+#define PORT_ASC       105
+
+/* Tilera TILE-Gx UART */
+#define PORT_TILEGX    106
+
+/* MEN 16z135 UART */
+#define PORT_MEN_Z135  107
+
+/* SC16IS74xx */
+#define PORT_SC16IS7XX   108
+
+/* MESON */
+#define PORT_MESON     109
+
+/* Conexant Digicolor */
+#define PORT_DIGICOLOR 110
+
+/* SPRD SERIAL  */
+#define PORT_SPRD      111
+
+/* Cris v10 / v32 SoC */
+#define PORT_CRIS      112
+
+/* STM32 USART */
+#define PORT_STM32     113
+
+#endif /* LINUX_SERIAL_CORE_H */
diff --git a/lib/libdss-include/include/linux/serial_reg.h b/lib/libdss-include/include/linux/serial_reg.h
new file mode 100644 (file)
index 0000000..1e5ac4e
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * include/linux/serial_reg.h
+ *
+ * Copyright (C) 1992, 1994 by Theodore Ts'o.
+ * 
+ * Redistribution of this file is permitted under the terms of the GNU 
+ * Public License (GPL)
+ * 
+ * These are the UART port assignments, expressed as offsets from the base
+ * register.  These assignments should hold for any serial port based on
+ * a 8250, 16450, or 16550(A).
+ */
+
+#ifndef _LINUX_SERIAL_REG_H
+#define _LINUX_SERIAL_REG_H
+
+/*
+ * DLAB=0
+ */
+#define UART_RX                0       /* In:  Receive buffer */
+#define UART_TX                0       /* Out: Transmit buffer */
+
+#define UART_IER       1       /* Out: Interrupt Enable Register */
+#define UART_IER_MSI           0x08 /* Enable Modem status interrupt */
+#define UART_IER_RLSI          0x04 /* Enable receiver line status interrupt */
+#define UART_IER_THRI          0x02 /* Enable Transmitter holding register int. */
+#define UART_IER_RDI           0x01 /* Enable receiver data interrupt */
+/*
+ * Sleep mode for ST16650 and TI16750.  For the ST16650, EFR[4]=1
+ */
+#define UART_IERX_SLEEP                0x10 /* Enable sleep mode */
+
+#define UART_IIR       2       /* In:  Interrupt ID Register */
+#define UART_IIR_NO_INT                0x01 /* No interrupts pending */
+#define UART_IIR_ID            0x0e /* Mask for the interrupt ID */
+#define UART_IIR_MSI           0x00 /* Modem status interrupt */
+#define UART_IIR_THRI          0x02 /* Transmitter holding register empty */
+#define UART_IIR_RDI           0x04 /* Receiver data interrupt */
+#define UART_IIR_RLSI          0x06 /* Receiver line status interrupt */
+
+#define UART_IIR_BUSY          0x07 /* DesignWare APB Busy Detect */
+
+#define UART_IIR_RX_TIMEOUT    0x0c /* OMAP RX Timeout interrupt */
+#define UART_IIR_XOFF          0x10 /* OMAP XOFF/Special Character */
+#define UART_IIR_CTS_RTS_DSR   0x20 /* OMAP CTS/RTS/DSR Change */
+
+#define UART_FCR       2       /* Out: FIFO Control Register */
+#define UART_FCR_ENABLE_FIFO   0x01 /* Enable the FIFO */
+#define UART_FCR_CLEAR_RCVR    0x02 /* Clear the RCVR FIFO */
+#define UART_FCR_CLEAR_XMIT    0x04 /* Clear the XMIT FIFO */
+#define UART_FCR_DMA_SELECT    0x08 /* For DMA applications */
+/*
+ * Note: The FIFO trigger levels are chip specific:
+ *     RX:76 = 00  01  10  11  TX:54 = 00  01  10  11
+ * PC16550D:    1   4   8  14          xx  xx  xx  xx
+ * TI16C550A:   1   4   8  14          xx  xx  xx  xx
+ * TI16C550C:   1   4   8  14          xx  xx  xx  xx
+ * ST16C550:    1   4   8  14          xx  xx  xx  xx
+ * ST16C650:    8  16  24  28          16   8  24  30  PORT_16650V2
+ * NS16C552:    1   4   8  14          xx  xx  xx  xx
+ * ST16C654:    8  16  56  60           8  16  32  56  PORT_16654
+ * TI16C750:    1  16  32  56          xx  xx  xx  xx  PORT_16750
+ * TI16C752:    8  16  56  60           8  16  32  56
+ * Tegra:       1   4   8  14          16   8   4   1  PORT_TEGRA
+ */
+#define UART_FCR_R_TRIG_00     0x00
+#define UART_FCR_R_TRIG_01     0x40
+#define UART_FCR_R_TRIG_10     0x80
+#define UART_FCR_R_TRIG_11     0xc0
+#define UART_FCR_T_TRIG_00     0x00
+#define UART_FCR_T_TRIG_01     0x10
+#define UART_FCR_T_TRIG_10     0x20
+#define UART_FCR_T_TRIG_11     0x30
+
+#define UART_FCR_TRIGGER_MASK  0xC0 /* Mask for the FIFO trigger range */
+#define UART_FCR_TRIGGER_1     0x00 /* Mask for trigger set at 1 */
+#define UART_FCR_TRIGGER_4     0x40 /* Mask for trigger set at 4 */
+#define UART_FCR_TRIGGER_8     0x80 /* Mask for trigger set at 8 */
+#define UART_FCR_TRIGGER_14    0xC0 /* Mask for trigger set at 14 */
+/* 16650 definitions */
+#define UART_FCR6_R_TRIGGER_8  0x00 /* Mask for receive trigger set at 1 */
+#define UART_FCR6_R_TRIGGER_16 0x40 /* Mask for receive trigger set at 4 */
+#define UART_FCR6_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 8 */
+#define UART_FCR6_R_TRIGGER_28 0xC0 /* Mask for receive trigger set at 14 */
+#define UART_FCR6_T_TRIGGER_16 0x00 /* Mask for transmit trigger set at 16 */
+#define UART_FCR6_T_TRIGGER_8  0x10 /* Mask for transmit trigger set at 8 */
+#define UART_FCR6_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */
+#define UART_FCR6_T_TRIGGER_30 0x30 /* Mask for transmit trigger set at 30 */
+#define UART_FCR7_64BYTE       0x20 /* Go into 64 byte mode (TI16C750 and
+                                       some Freescale UARTs) */
+
+#define UART_FCR_R_TRIG_SHIFT          6
+#define UART_FCR_R_TRIG_BITS(x)                \
+       (((x) & UART_FCR_TRIGGER_MASK) >> UART_FCR_R_TRIG_SHIFT)
+#define UART_FCR_R_TRIG_MAX_STATE      4
+
+#define UART_LCR       3       /* Out: Line Control Register */
+/*
+ * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting 
+ * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits.
+ */
+#define UART_LCR_DLAB          0x80 /* Divisor latch access bit */
+#define UART_LCR_SBC           0x40 /* Set break control */
+#define UART_LCR_SPAR          0x20 /* Stick parity (?) */
+#define UART_LCR_EPAR          0x10 /* Even parity select */
+#define UART_LCR_PARITY                0x08 /* Parity Enable */
+#define UART_LCR_STOP          0x04 /* Stop bits: 0=1 bit, 1=2 bits */
+#define UART_LCR_WLEN5         0x00 /* Wordlength: 5 bits */
+#define UART_LCR_WLEN6         0x01 /* Wordlength: 6 bits */
+#define UART_LCR_WLEN7         0x02 /* Wordlength: 7 bits */
+#define UART_LCR_WLEN8         0x03 /* Wordlength: 8 bits */
+
+/*
+ * Access to some registers depends on register access / configuration
+ * mode.
+ */
+#define UART_LCR_CONF_MODE_A   UART_LCR_DLAB   /* Configutation mode A */
+#define UART_LCR_CONF_MODE_B   0xBF            /* Configutation mode B */
+
+#define UART_MCR       4       /* Out: Modem Control Register */
+#define UART_MCR_CLKSEL                0x80 /* Divide clock by 4 (TI16C752, EFR[4]=1) */
+#define UART_MCR_TCRTLR                0x40 /* Access TCR/TLR (TI16C752, EFR[4]=1) */
+#define UART_MCR_XONANY                0x20 /* Enable Xon Any (TI16C752, EFR[4]=1) */
+#define UART_MCR_AFE           0x20 /* Enable auto-RTS/CTS (TI16C550C/TI16C750) */
+#define UART_MCR_LOOP          0x10 /* Enable loopback test mode */
+#define UART_MCR_OUT2          0x08 /* Out2 complement */
+#define UART_MCR_OUT1          0x04 /* Out1 complement */
+#define UART_MCR_RTS           0x02 /* RTS complement */
+#define UART_MCR_DTR           0x01 /* DTR complement */
+
+#define UART_LSR       5       /* In:  Line Status Register */
+#define UART_LSR_FIFOE         0x80 /* Fifo error */
+#define UART_LSR_TEMT          0x40 /* Transmitter empty */
+#define UART_LSR_THRE          0x20 /* Transmit-hold-register empty */
+#define UART_LSR_BI            0x10 /* Break interrupt indicator */
+#define UART_LSR_FE            0x08 /* Frame error indicator */
+#define UART_LSR_PE            0x04 /* Parity error indicator */
+#define UART_LSR_OE            0x02 /* Overrun error indicator */
+#define UART_LSR_DR            0x01 /* Receiver data ready */
+#define UART_LSR_BRK_ERROR_BITS        0x1E /* BI, FE, PE, OE bits */
+
+#define UART_MSR       6       /* In:  Modem Status Register */
+#define UART_MSR_DCD           0x80 /* Data Carrier Detect */
+#define UART_MSR_RI            0x40 /* Ring Indicator */
+#define UART_MSR_DSR           0x20 /* Data Set Ready */
+#define UART_MSR_CTS           0x10 /* Clear to Send */
+#define UART_MSR_DDCD          0x08 /* Delta DCD */
+#define UART_MSR_TERI          0x04 /* Trailing edge ring indicator */
+#define UART_MSR_DDSR          0x02 /* Delta DSR */
+#define UART_MSR_DCTS          0x01 /* Delta CTS */
+#define UART_MSR_ANY_DELTA     0x0F /* Any of the delta bits! */
+
+#define UART_SCR       7       /* I/O: Scratch Register */
+
+/*
+ * DLAB=1
+ */
+#define UART_DLL       0       /* Out: Divisor Latch Low */
+#define UART_DLM       1       /* Out: Divisor Latch High */
+
+/*
+ * LCR=0xBF (or DLAB=1 for 16C660)
+ */
+#define UART_EFR       2       /* I/O: Extended Features Register */
+#define UART_XR_EFR    9       /* I/O: Extended Features Register (XR17D15x) */
+#define UART_EFR_CTS           0x80 /* CTS flow control */
+#define UART_EFR_RTS           0x40 /* RTS flow control */
+#define UART_EFR_SCD           0x20 /* Special character detect */
+#define UART_EFR_ECB           0x10 /* Enhanced control bit */
+/*
+ * the low four bits control software flow control
+ */
+
+/*
+ * LCR=0xBF, TI16C752, ST16650, ST16650A, ST16654
+ */
+#define UART_XON1      4       /* I/O: Xon character 1 */
+#define UART_XON2      5       /* I/O: Xon character 2 */
+#define UART_XOFF1     6       /* I/O: Xoff character 1 */
+#define UART_XOFF2     7       /* I/O: Xoff character 2 */
+
+/*
+ * EFR[4]=1 MCR[6]=1, TI16C752
+ */
+#define UART_TI752_TCR 6       /* I/O: transmission control register */
+#define UART_TI752_TLR 7       /* I/O: trigger level register */
+
+/*
+ * LCR=0xBF, XR16C85x
+ */
+#define UART_TRG       0       /* FCTR bit 7 selects Rx or Tx
+                                * In: Fifo count
+                                * Out: Fifo custom trigger levels */
+/*
+ * These are the definitions for the Programmable Trigger Register
+ */
+#define UART_TRG_1             0x01
+#define UART_TRG_4             0x04
+#define UART_TRG_8             0x08
+#define UART_TRG_16            0x10
+#define UART_TRG_32            0x20
+#define UART_TRG_64            0x40
+#define UART_TRG_96            0x60
+#define UART_TRG_120           0x78
+#define UART_TRG_128           0x80
+
+#define UART_FCTR      1       /* Feature Control Register */
+#define UART_FCTR_RTS_NODELAY  0x00  /* RTS flow control delay */
+#define UART_FCTR_RTS_4DELAY   0x01
+#define UART_FCTR_RTS_6DELAY   0x02
+#define UART_FCTR_RTS_8DELAY   0x03
+#define UART_FCTR_IRDA         0x04  /* IrDa data encode select */
+#define UART_FCTR_TX_INT       0x08  /* Tx interrupt type select */
+#define UART_FCTR_TRGA         0x00  /* Tx/Rx 550 trigger table select */
+#define UART_FCTR_TRGB         0x10  /* Tx/Rx 650 trigger table select */
+#define UART_FCTR_TRGC         0x20  /* Tx/Rx 654 trigger table select */
+#define UART_FCTR_TRGD         0x30  /* Tx/Rx 850 programmable trigger select */
+#define UART_FCTR_SCR_SWAP     0x40  /* Scratch pad register swap */
+#define UART_FCTR_RX           0x00  /* Programmable trigger mode select */
+#define UART_FCTR_TX           0x80  /* Programmable trigger mode select */
+
+/*
+ * LCR=0xBF, FCTR[6]=1
+ */
+#define UART_EMSR      7       /* Extended Mode Select Register */
+#define UART_EMSR_FIFO_COUNT   0x01  /* Rx/Tx select */
+#define UART_EMSR_ALT_COUNT    0x02  /* Alternating count select */
+
+/*
+ * The Intel XScale on-chip UARTs define these bits
+ */
+#define UART_IER_DMAE  0x80    /* DMA Requests Enable */
+#define UART_IER_UUE   0x40    /* UART Unit Enable */
+#define UART_IER_NRZE  0x20    /* NRZ coding Enable */
+#define UART_IER_RTOIE 0x10    /* Receiver Time Out Interrupt Enable */
+
+#define UART_IIR_TOD   0x08    /* Character Timeout Indication Detected */
+
+#define UART_FCR_PXAR1 0x00    /* receive FIFO threshold = 1 */
+#define UART_FCR_PXAR8 0x40    /* receive FIFO threshold = 8 */
+#define UART_FCR_PXAR16        0x80    /* receive FIFO threshold = 16 */
+#define UART_FCR_PXAR32        0xc0    /* receive FIFO threshold = 32 */
+
+/*
+ * These register definitions are for the 16C950
+ */
+#define UART_ASR       0x01    /* Additional Status Register */
+#define UART_RFL       0x03    /* Receiver FIFO level */
+#define UART_TFL       0x04    /* Transmitter FIFO level */
+#define UART_ICR       0x05    /* Index Control Register */
+
+/* The 16950 ICR registers */
+#define UART_ACR       0x00    /* Additional Control Register */
+#define UART_CPR       0x01    /* Clock Prescalar Register */
+#define UART_TCR       0x02    /* Times Clock Register */
+#define UART_CKS       0x03    /* Clock Select Register */
+#define UART_TTL       0x04    /* Transmitter Interrupt Trigger Level */
+#define UART_RTL       0x05    /* Receiver Interrupt Trigger Level */
+#define UART_FCL       0x06    /* Flow Control Level Lower */
+#define UART_FCH       0x07    /* Flow Control Level Higher */
+#define UART_ID1       0x08    /* ID #1 */
+#define UART_ID2       0x09    /* ID #2 */
+#define UART_ID3       0x0A    /* ID #3 */
+#define UART_REV       0x0B    /* Revision */
+#define UART_CSR       0x0C    /* Channel Software Reset */
+#define UART_NMR       0x0D    /* Nine-bit Mode Register */
+#define UART_CTR       0xFF
+
+/*
+ * The 16C950 Additional Control Register
+ */
+#define UART_ACR_RXDIS 0x01    /* Receiver disable */
+#define UART_ACR_TXDIS 0x02    /* Transmitter disable */
+#define UART_ACR_DSRFC 0x04    /* DSR Flow Control */
+#define UART_ACR_TLENB 0x20    /* 950 trigger levels enable */
+#define UART_ACR_ICRRD 0x40    /* ICR Read enable */
+#define UART_ACR_ASREN 0x80    /* Additional status enable */
+
+
+
+/*
+ * These definitions are for the RSA-DV II/S card, from
+ *
+ * Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
+ */
+
+#define UART_RSA_BASE (-8)
+
+#define UART_RSA_MSR ((UART_RSA_BASE) + 0) /* I/O: Mode Select Register */
+
+#define UART_RSA_MSR_SWAP (1 << 0) /* Swap low/high 8 bytes in I/O port addr */
+#define UART_RSA_MSR_FIFO (1 << 2) /* Enable the external FIFO */
+#define UART_RSA_MSR_FLOW (1 << 3) /* Enable the auto RTS/CTS flow control */
+#define UART_RSA_MSR_ITYP (1 << 4) /* Level (1) / Edge triger (0) */
+
+#define UART_RSA_IER ((UART_RSA_BASE) + 1) /* I/O: Interrupt Enable Register */
+
+#define UART_RSA_IER_Rx_FIFO_H (1 << 0) /* Enable Rx FIFO half full int. */
+#define UART_RSA_IER_Tx_FIFO_H (1 << 1) /* Enable Tx FIFO half full int. */
+#define UART_RSA_IER_Tx_FIFO_E (1 << 2) /* Enable Tx FIFO empty int. */
+#define UART_RSA_IER_Rx_TOUT (1 << 3) /* Enable char receive timeout int */
+#define UART_RSA_IER_TIMER (1 << 4) /* Enable timer interrupt */
+
+#define UART_RSA_SRR ((UART_RSA_BASE) + 2) /* IN: Status Read Register */
+
+#define UART_RSA_SRR_Tx_FIFO_NEMP (1 << 0) /* Tx FIFO is not empty (1) */
+#define UART_RSA_SRR_Tx_FIFO_NHFL (1 << 1) /* Tx FIFO is not half full (1) */
+#define UART_RSA_SRR_Tx_FIFO_NFUL (1 << 2) /* Tx FIFO is not full (1) */
+#define UART_RSA_SRR_Rx_FIFO_NEMP (1 << 3) /* Rx FIFO is not empty (1) */
+#define UART_RSA_SRR_Rx_FIFO_NHFL (1 << 4) /* Rx FIFO is not half full (1) */
+#define UART_RSA_SRR_Rx_FIFO_NFUL (1 << 5) /* Rx FIFO is not full (1) */
+#define UART_RSA_SRR_Rx_TOUT (1 << 6) /* Character reception timeout occurred (1) */
+#define UART_RSA_SRR_TIMER (1 << 7) /* Timer interrupt occurred */
+
+#define UART_RSA_FRR ((UART_RSA_BASE) + 2) /* OUT: FIFO Reset Register */
+
+#define UART_RSA_TIVSR ((UART_RSA_BASE) + 3) /* I/O: Timer Interval Value Set Register */
+
+#define UART_RSA_TCR ((UART_RSA_BASE) + 4) /* OUT: Timer Control Register */
+
+#define UART_RSA_TCR_SWITCH (1 << 0) /* Timer on */
+
+/*
+ * The RSA DSV/II board has two fixed clock frequencies.  One is the
+ * standard rate, and the other is 8 times faster.
+ */
+#define SERIAL_RSA_BAUD_BASE (921600)
+#define SERIAL_RSA_BAUD_BASE_LO (SERIAL_RSA_BAUD_BASE / 8)
+
+/*
+ * Extra serial register definitions for the internal UARTs
+ * in TI OMAP processors.
+ */
+#define OMAP1_UART1_BASE       0xfffb0000
+#define OMAP1_UART2_BASE       0xfffb0800
+#define OMAP1_UART3_BASE       0xfffb9800
+#define UART_OMAP_MDR1         0x08    /* Mode definition register */
+#define UART_OMAP_MDR2         0x09    /* Mode definition register 2 */
+#define UART_OMAP_SCR          0x10    /* Supplementary control register */
+#define UART_OMAP_SSR          0x11    /* Supplementary status register */
+#define UART_OMAP_EBLR         0x12    /* BOF length register */
+#define UART_OMAP_OSC_12M_SEL  0x13    /* OMAP1510 12MHz osc select */
+#define UART_OMAP_MVER         0x14    /* Module version register */
+#define UART_OMAP_SYSC         0x15    /* System configuration register */
+#define UART_OMAP_SYSS         0x16    /* System status register */
+#define UART_OMAP_WER          0x17    /* Wake-up enable register */
+#define UART_OMAP_TX_LVL       0x1a    /* TX FIFO level register */
+
+/*
+ * These are the definitions for the MDR1 register
+ */
+#define UART_OMAP_MDR1_16X_MODE                0x00    /* UART 16x mode */
+#define UART_OMAP_MDR1_SIR_MODE                0x01    /* SIR mode */
+#define UART_OMAP_MDR1_16X_ABAUD_MODE  0x02    /* UART 16x auto-baud */
+#define UART_OMAP_MDR1_13X_MODE                0x03    /* UART 13x mode */
+#define UART_OMAP_MDR1_MIR_MODE                0x04    /* MIR mode */
+#define UART_OMAP_MDR1_FIR_MODE                0x05    /* FIR mode */
+#define UART_OMAP_MDR1_CIR_MODE                0x06    /* CIR mode */
+#define UART_OMAP_MDR1_DISABLE         0x07    /* Disable (default state) */
+
+/*
+ * These are definitions for the Exar XR17V35X and XR17(C|D)15X
+ */
+#define UART_EXAR_8XMODE       0x88    /* 8X sampling rate select */
+#define UART_EXAR_SLEEP                0x8b    /* Sleep mode */
+#define UART_EXAR_DVID         0x8d    /* Device identification */
+
+#define UART_EXAR_FCTR         0x08    /* Feature Control Register */
+#define UART_FCTR_EXAR_IRDA    0x08    /* IrDa data encode select */
+#define UART_FCTR_EXAR_485     0x10    /* Auto 485 half duplex dir ctl */
+#define UART_FCTR_EXAR_TRGA    0x00    /* FIFO trigger table A */
+#define UART_FCTR_EXAR_TRGB    0x60    /* FIFO trigger table B */
+#define UART_FCTR_EXAR_TRGC    0x80    /* FIFO trigger table C */
+#define UART_FCTR_EXAR_TRGD    0xc0    /* FIFO trigger table D programmable */
+
+#define UART_EXAR_TXTRG                0x0a    /* Tx FIFO trigger level write-only */
+#define UART_EXAR_RXTRG                0x0b    /* Rx FIFO trigger level write-only */
+
+#endif /* _LINUX_SERIAL_REG_H */
+
diff --git a/lib/libdss-include/include/linux/serio.h b/lib/libdss-include/include/linux/serio.h
new file mode 100644 (file)
index 0000000..c13f49c
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 1999-2002 Vojtech Pavlik
+*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _SERIO_H
+#define _SERIO_H
+
+
+#include <linux/ioctl.h>
+
+#define SPIOCSTYPE     _IOW('q', 0x01, unsigned long)
+
+
+/*
+ * bit masks for use in "interrupt" flags (3rd argument)
+ */
+#define SERIO_TIMEOUT  1
+#define SERIO_PARITY   2
+#define SERIO_FRAME    4
+
+/*
+ * Serio types
+ */
+#define SERIO_XT       0x00
+#define SERIO_8042     0x01
+#define SERIO_RS232    0x02
+#define SERIO_HIL_MLC  0x03
+#define SERIO_PS_PSTHRU        0x05
+#define SERIO_8042_XL  0x06
+
+/*
+ * Serio protocols
+ */
+#define SERIO_UNKNOWN  0x00
+#define SERIO_MSC      0x01
+#define SERIO_SUN      0x02
+#define SERIO_MS       0x03
+#define SERIO_MP       0x04
+#define SERIO_MZ       0x05
+#define SERIO_MZP      0x06
+#define SERIO_MZPP     0x07
+#define SERIO_VSXXXAA  0x08
+#define SERIO_SUNKBD   0x10
+#define SERIO_WARRIOR  0x18
+#define SERIO_SPACEORB 0x19
+#define SERIO_MAGELLAN 0x1a
+#define SERIO_SPACEBALL        0x1b
+#define SERIO_GUNZE    0x1c
+#define SERIO_IFORCE   0x1d
+#define SERIO_STINGER  0x1e
+#define SERIO_NEWTON   0x1f
+#define SERIO_STOWAWAY 0x20
+#define SERIO_H3600    0x21
+#define SERIO_PS2SER   0x22
+#define SERIO_TWIDKBD  0x23
+#define SERIO_TWIDJOY  0x24
+#define SERIO_HIL      0x25
+#define SERIO_SNES232  0x26
+#define SERIO_SEMTECH  0x27
+#define SERIO_LKKBD    0x28
+#define SERIO_ELO      0x29
+#define SERIO_MICROTOUCH       0x30
+#define SERIO_PENMOUNT 0x31
+#define SERIO_TOUCHRIGHT       0x32
+#define SERIO_TOUCHWIN 0x33
+#define SERIO_TAOSEVM  0x34
+#define SERIO_FUJITSU  0x35
+#define SERIO_ZHENHUA  0x36
+#define SERIO_INEXIO   0x37
+#define SERIO_TOUCHIT213       0x38
+#define SERIO_W8001    0x39
+#define SERIO_DYNAPRO  0x3a
+#define SERIO_HAMPSHIRE        0x3b
+#define SERIO_PS2MULT  0x3c
+#define SERIO_TSC40    0x3d
+#define SERIO_WACOM_IV 0x3e
+
+#endif /* _SERIO_H */
diff --git a/lib/libdss-include/include/linux/shm.h b/lib/libdss-include/include/linux/shm.h
new file mode 100644 (file)
index 0000000..18dac98
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef _LINUX_SHM_H_
+#define _LINUX_SHM_H_
+
+#include <linux/ipc.h>
+#include <linux/errno.h>
+#include <unistd.h>
+
+/*
+ * SHMMNI, SHMMAX and SHMALL are default upper limits which can be
+ * modified by sysctl. The SHMMAX and SHMALL values have been chosen to
+ * be as large possible without facilitating scenarios where userspace
+ * causes overflows when adjusting the limits via operations of the form
+ * "retrieve current limit; add X; update limit". It is therefore not
+ * advised to make SHMMAX and SHMALL any larger. These limits are
+ * suitable for both 32 and 64-bit systems.
+ */
+#define SHMMIN 1                        /* min shared seg size (bytes) */
+#define SHMMNI 4096                     /* max num of segs system wide */
+#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */
+#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */
+#define SHMSEG SHMMNI                   /* max shared segs per process */
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct shmid_ds {
+       struct ipc_perm         shm_perm;       /* operation perms */
+       int                     shm_segsz;      /* size of segment (bytes) */
+       __kernel_time_t         shm_atime;      /* last attach time */
+       __kernel_time_t         shm_dtime;      /* last detach time */
+       __kernel_time_t         shm_ctime;      /* last change time */
+       __kernel_ipc_pid_t      shm_cpid;       /* pid of creator */
+       __kernel_ipc_pid_t      shm_lpid;       /* pid of last operator */
+       unsigned short          shm_nattch;     /* no. of current attaches */
+       unsigned short          shm_unused;     /* compatibility */
+       void                    *shm_unused2;   /* ditto - used by DIPC */
+       void                    *shm_unused3;   /* unused */
+};
+
+/* Include the definition of shmid64_ds and shminfo64 */
+#include <asm/shmbuf.h>
+
+/* permission flag for shmget */
+#define SHM_R          0400    /* or S_IRUGO from <linux/stat.h> */
+#define SHM_W          0200    /* or S_IWUGO from <linux/stat.h> */
+
+/* mode for attach */
+#define        SHM_RDONLY      010000  /* read-only access */
+#define        SHM_RND         020000  /* round attach address to SHMLBA boundary */
+#define        SHM_REMAP       040000  /* take-over region on attach */
+#define        SHM_EXEC        0100000 /* execution access */
+
+/* super user shmctl commands */
+#define SHM_LOCK       11
+#define SHM_UNLOCK     12
+
+/* ipcs ctl commands */
+#define SHM_STAT       13
+#define SHM_INFO       14
+
+/* Obsolete, used only for backwards compatibility */
+struct shminfo {
+       int shmmax;
+       int shmmin;
+       int shmmni;
+       int shmseg;
+       int shmall;
+};
+
+struct shm_info {
+       int used_ids;
+       __kernel_ulong_t shm_tot;       /* total allocated shm */
+       __kernel_ulong_t shm_rss;       /* total resident shm */
+       __kernel_ulong_t shm_swp;       /* total swapped shm */
+       __kernel_ulong_t swap_attempts;
+       __kernel_ulong_t swap_successes;
+};
+
+
+#endif /* _LINUX_SHM_H_ */
diff --git a/lib/libdss-include/include/linux/signal.h b/lib/libdss-include/include/linux/signal.h
new file mode 100644 (file)
index 0000000..94dc2e6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _LINUX_SIGNAL_H
+#define _LINUX_SIGNAL_H
+
+#include <asm/signal.h>
+#include <asm/siginfo.h>
+
+#define SS_ONSTACK     1
+#define SS_DISABLE     2
+
+#endif /* _LINUX_SIGNAL_H */
diff --git a/lib/libdss-include/include/linux/signalfd.h b/lib/libdss-include/include/linux/signalfd.h
new file mode 100644 (file)
index 0000000..90e689a
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *  include/linux/signalfd.h
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#ifndef _LINUX_SIGNALFD_H
+#define _LINUX_SIGNALFD_H
+
+#include <linux/types.h>
+/* For O_CLOEXEC and O_NONBLOCK */
+#include <linux/fcntl.h>
+
+/* Flags for signalfd4.  */
+#define SFD_CLOEXEC O_CLOEXEC
+#define SFD_NONBLOCK O_NONBLOCK
+
+struct signalfd_siginfo {
+       __u32 ssi_signo;
+       __s32 ssi_errno;
+       __s32 ssi_code;
+       __u32 ssi_pid;
+       __u32 ssi_uid;
+       __s32 ssi_fd;
+       __u32 ssi_tid;
+       __u32 ssi_band;
+       __u32 ssi_overrun;
+       __u32 ssi_trapno;
+       __s32 ssi_status;
+       __s32 ssi_int;
+       __u64 ssi_ptr;
+       __u64 ssi_utime;
+       __u64 ssi_stime;
+       __u64 ssi_addr;
+       __u16 ssi_addr_lsb;
+
+       /*
+        * Pad strcture to 128 bytes. Remember to update the
+        * pad size when you add new members. We use a fixed
+        * size structure to avoid compatibility problems with
+        * future versions, and we leave extra space for additional
+        * members. We use fixed size members because this strcture
+        * comes out of a read(2) and we really don't want to have
+        * a compat on read(2).
+        */
+       __u8 __pad[46];
+};
+
+
+
+#endif /* _LINUX_SIGNALFD_H */
diff --git a/lib/libdss-include/include/linux/smiapp.h b/lib/libdss-include/include/linux/smiapp.h
new file mode 100644 (file)
index 0000000..53938f4
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * include/uapi/linux/smiapp.h
+ *
+ * Generic driver for SMIA/SMIA++ compliant camera modules
+ *
+ * Copyright (C) 2014 Intel Corporation
+ * Contact: Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef __UAPI_LINUX_SMIAPP_H_
+#define __UAPI_LINUX_SMIAPP_H_
+
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_DISABLED                 0
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_SOLID_COLOUR             1
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_COLOUR_BARS              2
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_COLOUR_BARS_GREY         3
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_PN9                      4
+
+#endif /* __UAPI_LINUX_SMIAPP_H_ */
diff --git a/lib/libdss-include/include/linux/snmp.h b/lib/libdss-include/include/linux/snmp.h
new file mode 100644 (file)
index 0000000..25a9ad8
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+ * Definitions for MIBs
+ *
+ * Author: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
+ */
+
+#ifndef _LINUX_SNMP_H
+#define _LINUX_SNMP_H
+
+/* ipstats mib definitions */
+/*
+ * RFC 1213:  MIB-II
+ * RFC 2011 (updates 1213):  SNMPv2-MIB-IP
+ * RFC 2863:  Interfaces Group MIB
+ * RFC 2465:  IPv6 MIB: General Group
+ * draft-ietf-ipv6-rfc2011-update-10.txt: MIB for IP: IP Statistics Tables
+ */
+enum
+{
+       IPSTATS_MIB_NUM = 0,
+/* frequently written fields in fast path, kept in same cache line */
+       IPSTATS_MIB_INPKTS,                     /* InReceives */
+       IPSTATS_MIB_INOCTETS,                   /* InOctets */
+       IPSTATS_MIB_INDELIVERS,                 /* InDelivers */
+       IPSTATS_MIB_OUTFORWDATAGRAMS,           /* OutForwDatagrams */
+       IPSTATS_MIB_OUTPKTS,                    /* OutRequests */
+       IPSTATS_MIB_OUTOCTETS,                  /* OutOctets */
+/* other fields */
+       IPSTATS_MIB_INHDRERRORS,                /* InHdrErrors */
+       IPSTATS_MIB_INTOOBIGERRORS,             /* InTooBigErrors */
+       IPSTATS_MIB_INNOROUTES,                 /* InNoRoutes */
+       IPSTATS_MIB_INADDRERRORS,               /* InAddrErrors */
+       IPSTATS_MIB_INUNKNOWNPROTOS,            /* InUnknownProtos */
+       IPSTATS_MIB_INTRUNCATEDPKTS,            /* InTruncatedPkts */
+       IPSTATS_MIB_INDISCARDS,                 /* InDiscards */
+       IPSTATS_MIB_OUTDISCARDS,                /* OutDiscards */
+       IPSTATS_MIB_OUTNOROUTES,                /* OutNoRoutes */
+       IPSTATS_MIB_REASMTIMEOUT,               /* ReasmTimeout */
+       IPSTATS_MIB_REASMREQDS,                 /* ReasmReqds */
+       IPSTATS_MIB_REASMOKS,                   /* ReasmOKs */
+       IPSTATS_MIB_REASMFAILS,                 /* ReasmFails */
+       IPSTATS_MIB_FRAGOKS,                    /* FragOKs */
+       IPSTATS_MIB_FRAGFAILS,                  /* FragFails */
+       IPSTATS_MIB_FRAGCREATES,                /* FragCreates */
+       IPSTATS_MIB_INMCASTPKTS,                /* InMcastPkts */
+       IPSTATS_MIB_OUTMCASTPKTS,               /* OutMcastPkts */
+       IPSTATS_MIB_INBCASTPKTS,                /* InBcastPkts */
+       IPSTATS_MIB_OUTBCASTPKTS,               /* OutBcastPkts */
+       IPSTATS_MIB_INMCASTOCTETS,              /* InMcastOctets */
+       IPSTATS_MIB_OUTMCASTOCTETS,             /* OutMcastOctets */
+       IPSTATS_MIB_INBCASTOCTETS,              /* InBcastOctets */
+       IPSTATS_MIB_OUTBCASTOCTETS,             /* OutBcastOctets */
+       IPSTATS_MIB_CSUMERRORS,                 /* InCsumErrors */
+       IPSTATS_MIB_NOECTPKTS,                  /* InNoECTPkts */
+       IPSTATS_MIB_ECT1PKTS,                   /* InECT1Pkts */
+       IPSTATS_MIB_ECT0PKTS,                   /* InECT0Pkts */
+       IPSTATS_MIB_CEPKTS,                     /* InCEPkts */
+       __IPSTATS_MIB_MAX
+};
+
+/* icmp mib definitions */
+/*
+ * RFC 1213:  MIB-II ICMP Group
+ * RFC 2011 (updates 1213):  SNMPv2 MIB for IP: ICMP group
+ */
+enum
+{
+       ICMP_MIB_NUM = 0,
+       ICMP_MIB_INMSGS,                        /* InMsgs */
+       ICMP_MIB_INERRORS,                      /* InErrors */
+       ICMP_MIB_INDESTUNREACHS,                /* InDestUnreachs */
+       ICMP_MIB_INTIMEEXCDS,                   /* InTimeExcds */
+       ICMP_MIB_INPARMPROBS,                   /* InParmProbs */
+       ICMP_MIB_INSRCQUENCHS,                  /* InSrcQuenchs */
+       ICMP_MIB_INREDIRECTS,                   /* InRedirects */
+       ICMP_MIB_INECHOS,                       /* InEchos */
+       ICMP_MIB_INECHOREPS,                    /* InEchoReps */
+       ICMP_MIB_INTIMESTAMPS,                  /* InTimestamps */
+       ICMP_MIB_INTIMESTAMPREPS,               /* InTimestampReps */
+       ICMP_MIB_INADDRMASKS,                   /* InAddrMasks */
+       ICMP_MIB_INADDRMASKREPS,                /* InAddrMaskReps */
+       ICMP_MIB_OUTMSGS,                       /* OutMsgs */
+       ICMP_MIB_OUTERRORS,                     /* OutErrors */
+       ICMP_MIB_OUTDESTUNREACHS,               /* OutDestUnreachs */
+       ICMP_MIB_OUTTIMEEXCDS,                  /* OutTimeExcds */
+       ICMP_MIB_OUTPARMPROBS,                  /* OutParmProbs */
+       ICMP_MIB_OUTSRCQUENCHS,                 /* OutSrcQuenchs */
+       ICMP_MIB_OUTREDIRECTS,                  /* OutRedirects */
+       ICMP_MIB_OUTECHOS,                      /* OutEchos */
+       ICMP_MIB_OUTECHOREPS,                   /* OutEchoReps */
+       ICMP_MIB_OUTTIMESTAMPS,                 /* OutTimestamps */
+       ICMP_MIB_OUTTIMESTAMPREPS,              /* OutTimestampReps */
+       ICMP_MIB_OUTADDRMASKS,                  /* OutAddrMasks */
+       ICMP_MIB_OUTADDRMASKREPS,               /* OutAddrMaskReps */
+       ICMP_MIB_CSUMERRORS,                    /* InCsumErrors */
+       __ICMP_MIB_MAX
+};
+
+#define __ICMPMSG_MIB_MAX 512  /* Out+In for all 8-bit ICMP types */
+
+/* icmp6 mib definitions */
+/*
+ * RFC 2466:  ICMPv6-MIB
+ */
+enum
+{
+       ICMP6_MIB_NUM = 0,
+       ICMP6_MIB_INMSGS,                       /* InMsgs */
+       ICMP6_MIB_INERRORS,                     /* InErrors */
+       ICMP6_MIB_OUTMSGS,                      /* OutMsgs */
+       ICMP6_MIB_OUTERRORS,                    /* OutErrors */
+       ICMP6_MIB_CSUMERRORS,                   /* InCsumErrors */
+       __ICMP6_MIB_MAX
+};
+
+#define __ICMP6MSG_MIB_MAX 512 /* Out+In for all 8-bit ICMPv6 types */
+
+/* tcp mib definitions */
+/*
+ * RFC 1213:  MIB-II TCP group
+ * RFC 2012 (updates 1213):  SNMPv2-MIB-TCP
+ */
+enum
+{
+       TCP_MIB_NUM = 0,
+       TCP_MIB_RTOALGORITHM,                   /* RtoAlgorithm */
+       TCP_MIB_RTOMIN,                         /* RtoMin */
+       TCP_MIB_RTOMAX,                         /* RtoMax */
+       TCP_MIB_MAXCONN,                        /* MaxConn */
+       TCP_MIB_ACTIVEOPENS,                    /* ActiveOpens */
+       TCP_MIB_PASSIVEOPENS,                   /* PassiveOpens */
+       TCP_MIB_ATTEMPTFAILS,                   /* AttemptFails */
+       TCP_MIB_ESTABRESETS,                    /* EstabResets */
+       TCP_MIB_CURRESTAB,                      /* CurrEstab */
+       TCP_MIB_INSEGS,                         /* InSegs */
+       TCP_MIB_OUTSEGS,                        /* OutSegs */
+       TCP_MIB_RETRANSSEGS,                    /* RetransSegs */
+       TCP_MIB_INERRS,                         /* InErrs */
+       TCP_MIB_OUTRSTS,                        /* OutRsts */
+       TCP_MIB_CSUMERRORS,                     /* InCsumErrors */
+       __TCP_MIB_MAX
+};
+
+/* udp mib definitions */
+/*
+ * RFC 1213:  MIB-II UDP group
+ * RFC 2013 (updates 1213):  SNMPv2-MIB-UDP
+ */
+enum
+{
+       UDP_MIB_NUM = 0,
+       UDP_MIB_INDATAGRAMS,                    /* InDatagrams */
+       UDP_MIB_NOPORTS,                        /* NoPorts */
+       UDP_MIB_INERRORS,                       /* InErrors */
+       UDP_MIB_OUTDATAGRAMS,                   /* OutDatagrams */
+       UDP_MIB_RCVBUFERRORS,                   /* RcvbufErrors */
+       UDP_MIB_SNDBUFERRORS,                   /* SndbufErrors */
+       UDP_MIB_CSUMERRORS,                     /* InCsumErrors */
+       UDP_MIB_IGNOREDMULTI,                   /* IgnoredMulti */
+       __UDP_MIB_MAX
+};
+
+/* linux mib definitions */
+enum
+{
+       LINUX_MIB_NUM = 0,
+       LINUX_MIB_SYNCOOKIESSENT,               /* SyncookiesSent */
+       LINUX_MIB_SYNCOOKIESRECV,               /* SyncookiesRecv */
+       LINUX_MIB_SYNCOOKIESFAILED,             /* SyncookiesFailed */
+       LINUX_MIB_EMBRYONICRSTS,                /* EmbryonicRsts */
+       LINUX_MIB_PRUNECALLED,                  /* PruneCalled */
+       LINUX_MIB_RCVPRUNED,                    /* RcvPruned */
+       LINUX_MIB_OFOPRUNED,                    /* OfoPruned */
+       LINUX_MIB_OUTOFWINDOWICMPS,             /* OutOfWindowIcmps */
+       LINUX_MIB_LOCKDROPPEDICMPS,             /* LockDroppedIcmps */
+       LINUX_MIB_ARPFILTER,                    /* ArpFilter */
+       LINUX_MIB_TIMEWAITED,                   /* TimeWaited */
+       LINUX_MIB_TIMEWAITRECYCLED,             /* TimeWaitRecycled */
+       LINUX_MIB_TIMEWAITKILLED,               /* TimeWaitKilled */
+       LINUX_MIB_PAWSPASSIVEREJECTED,          /* PAWSPassiveRejected */
+       LINUX_MIB_PAWSACTIVEREJECTED,           /* PAWSActiveRejected */
+       LINUX_MIB_PAWSESTABREJECTED,            /* PAWSEstabRejected */
+       LINUX_MIB_DELAYEDACKS,                  /* DelayedACKs */
+       LINUX_MIB_DELAYEDACKLOCKED,             /* DelayedACKLocked */
+       LINUX_MIB_DELAYEDACKLOST,               /* DelayedACKLost */
+       LINUX_MIB_LISTENOVERFLOWS,              /* ListenOverflows */
+       LINUX_MIB_LISTENDROPS,                  /* ListenDrops */
+       LINUX_MIB_TCPPREQUEUED,                 /* TCPPrequeued */
+       LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG,     /* TCPDirectCopyFromBacklog */
+       LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE,    /* TCPDirectCopyFromPrequeue */
+       LINUX_MIB_TCPPREQUEUEDROPPED,           /* TCPPrequeueDropped */
+       LINUX_MIB_TCPHPHITS,                    /* TCPHPHits */
+       LINUX_MIB_TCPHPHITSTOUSER,              /* TCPHPHitsToUser */
+       LINUX_MIB_TCPPUREACKS,                  /* TCPPureAcks */
+       LINUX_MIB_TCPHPACKS,                    /* TCPHPAcks */
+       LINUX_MIB_TCPRENORECOVERY,              /* TCPRenoRecovery */
+       LINUX_MIB_TCPSACKRECOVERY,              /* TCPSackRecovery */
+       LINUX_MIB_TCPSACKRENEGING,              /* TCPSACKReneging */
+       LINUX_MIB_TCPFACKREORDER,               /* TCPFACKReorder */
+       LINUX_MIB_TCPSACKREORDER,               /* TCPSACKReorder */
+       LINUX_MIB_TCPRENOREORDER,               /* TCPRenoReorder */
+       LINUX_MIB_TCPTSREORDER,                 /* TCPTSReorder */
+       LINUX_MIB_TCPFULLUNDO,                  /* TCPFullUndo */
+       LINUX_MIB_TCPPARTIALUNDO,               /* TCPPartialUndo */
+       LINUX_MIB_TCPDSACKUNDO,                 /* TCPDSACKUndo */
+       LINUX_MIB_TCPLOSSUNDO,                  /* TCPLossUndo */
+       LINUX_MIB_TCPLOSTRETRANSMIT,            /* TCPLostRetransmit */
+       LINUX_MIB_TCPRENOFAILURES,              /* TCPRenoFailures */
+       LINUX_MIB_TCPSACKFAILURES,              /* TCPSackFailures */
+       LINUX_MIB_TCPLOSSFAILURES,              /* TCPLossFailures */
+       LINUX_MIB_TCPFASTRETRANS,               /* TCPFastRetrans */
+       LINUX_MIB_TCPFORWARDRETRANS,            /* TCPForwardRetrans */
+       LINUX_MIB_TCPSLOWSTARTRETRANS,          /* TCPSlowStartRetrans */
+       LINUX_MIB_TCPTIMEOUTS,                  /* TCPTimeouts */
+       LINUX_MIB_TCPLOSSPROBES,                /* TCPLossProbes */
+       LINUX_MIB_TCPLOSSPROBERECOVERY,         /* TCPLossProbeRecovery */
+       LINUX_MIB_TCPRENORECOVERYFAIL,          /* TCPRenoRecoveryFail */
+       LINUX_MIB_TCPSACKRECOVERYFAIL,          /* TCPSackRecoveryFail */
+       LINUX_MIB_TCPSCHEDULERFAILED,           /* TCPSchedulerFailed */
+       LINUX_MIB_TCPRCVCOLLAPSED,              /* TCPRcvCollapsed */
+       LINUX_MIB_TCPDSACKOLDSENT,              /* TCPDSACKOldSent */
+       LINUX_MIB_TCPDSACKOFOSENT,              /* TCPDSACKOfoSent */
+       LINUX_MIB_TCPDSACKRECV,                 /* TCPDSACKRecv */
+       LINUX_MIB_TCPDSACKOFORECV,              /* TCPDSACKOfoRecv */
+       LINUX_MIB_TCPABORTONDATA,               /* TCPAbortOnData */
+       LINUX_MIB_TCPABORTONCLOSE,              /* TCPAbortOnClose */
+       LINUX_MIB_TCPABORTONMEMORY,             /* TCPAbortOnMemory */
+       LINUX_MIB_TCPABORTONTIMEOUT,            /* TCPAbortOnTimeout */
+       LINUX_MIB_TCPABORTONLINGER,             /* TCPAbortOnLinger */
+       LINUX_MIB_TCPABORTFAILED,               /* TCPAbortFailed */
+       LINUX_MIB_TCPMEMORYPRESSURES,           /* TCPMemoryPressures */
+       LINUX_MIB_TCPSACKDISCARD,               /* TCPSACKDiscard */
+       LINUX_MIB_TCPDSACKIGNOREDOLD,           /* TCPSACKIgnoredOld */
+       LINUX_MIB_TCPDSACKIGNOREDNOUNDO,        /* TCPSACKIgnoredNoUndo */
+       LINUX_MIB_TCPSPURIOUSRTOS,              /* TCPSpuriousRTOs */
+       LINUX_MIB_TCPMD5NOTFOUND,               /* TCPMD5NotFound */
+       LINUX_MIB_TCPMD5UNEXPECTED,             /* TCPMD5Unexpected */
+       LINUX_MIB_SACKSHIFTED,
+       LINUX_MIB_SACKMERGED,
+       LINUX_MIB_SACKSHIFTFALLBACK,
+       LINUX_MIB_TCPBACKLOGDROP,
+       LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */
+       LINUX_MIB_TCPDEFERACCEPTDROP,
+       LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */
+       LINUX_MIB_TCPTIMEWAITOVERFLOW,          /* TCPTimeWaitOverflow */
+       LINUX_MIB_TCPREQQFULLDOCOOKIES,         /* TCPReqQFullDoCookies */
+       LINUX_MIB_TCPREQQFULLDROP,              /* TCPReqQFullDrop */
+       LINUX_MIB_TCPRETRANSFAIL,               /* TCPRetransFail */
+       LINUX_MIB_TCPRCVCOALESCE,               /* TCPRcvCoalesce */
+       LINUX_MIB_TCPOFOQUEUE,                  /* TCPOFOQueue */
+       LINUX_MIB_TCPOFODROP,                   /* TCPOFODrop */
+       LINUX_MIB_TCPOFOMERGE,                  /* TCPOFOMerge */
+       LINUX_MIB_TCPCHALLENGEACK,              /* TCPChallengeACK */
+       LINUX_MIB_TCPSYNCHALLENGE,              /* TCPSYNChallenge */
+       LINUX_MIB_TCPFASTOPENACTIVE,            /* TCPFastOpenActive */
+       LINUX_MIB_TCPFASTOPENACTIVEFAIL,        /* TCPFastOpenActiveFail */
+       LINUX_MIB_TCPFASTOPENPASSIVE,           /* TCPFastOpenPassive*/
+       LINUX_MIB_TCPFASTOPENPASSIVEFAIL,       /* TCPFastOpenPassiveFail */
+       LINUX_MIB_TCPFASTOPENLISTENOVERFLOW,    /* TCPFastOpenListenOverflow */
+       LINUX_MIB_TCPFASTOPENCOOKIEREQD,        /* TCPFastOpenCookieReqd */
+       LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES, /* TCPSpuriousRtxHostQueues */
+       LINUX_MIB_BUSYPOLLRXPACKETS,            /* BusyPollRxPackets */
+       LINUX_MIB_TCPAUTOCORKING,               /* TCPAutoCorking */
+       LINUX_MIB_TCPFROMZEROWINDOWADV,         /* TCPFromZeroWindowAdv */
+       LINUX_MIB_TCPTOZEROWINDOWADV,           /* TCPToZeroWindowAdv */
+       LINUX_MIB_TCPWANTZEROWINDOWADV,         /* TCPWantZeroWindowAdv */
+       LINUX_MIB_TCPSYNRETRANS,                /* TCPSynRetrans */
+       LINUX_MIB_TCPORIGDATASENT,              /* TCPOrigDataSent */
+       LINUX_MIB_TCPHYSTARTTRAINDETECT,        /* TCPHystartTrainDetect */
+       LINUX_MIB_TCPHYSTARTTRAINCWND,          /* TCPHystartTrainCwnd */
+       LINUX_MIB_TCPHYSTARTDELAYDETECT,        /* TCPHystartDelayDetect */
+       LINUX_MIB_TCPHYSTARTDELAYCWND,          /* TCPHystartDelayCwnd */
+       LINUX_MIB_TCPACKSKIPPEDSYNRECV,         /* TCPACKSkippedSynRecv */
+       LINUX_MIB_TCPACKSKIPPEDPAWS,            /* TCPACKSkippedPAWS */
+       LINUX_MIB_TCPACKSKIPPEDSEQ,             /* TCPACKSkippedSeq */
+       LINUX_MIB_TCPACKSKIPPEDFINWAIT2,        /* TCPACKSkippedFinWait2 */
+       LINUX_MIB_TCPACKSKIPPEDTIMEWAIT,        /* TCPACKSkippedTimeWait */
+       LINUX_MIB_TCPACKSKIPPEDCHALLENGE,       /* TCPACKSkippedChallenge */
+       LINUX_MIB_TCPWINPROBE,                  /* TCPWinProbe */
+       LINUX_MIB_TCPKEEPALIVE,                 /* TCPKeepAlive */
+       LINUX_MIB_TCPMTUPFAIL,                  /* TCPMTUPFail */
+       LINUX_MIB_TCPMTUPSUCCESS,               /* TCPMTUPSuccess */
+       __LINUX_MIB_MAX
+};
+
+/* linux Xfrm mib definitions */
+enum
+{
+       LINUX_MIB_XFRMNUM = 0,
+       LINUX_MIB_XFRMINERROR,                  /* XfrmInError */
+       LINUX_MIB_XFRMINBUFFERERROR,            /* XfrmInBufferError */
+       LINUX_MIB_XFRMINHDRERROR,               /* XfrmInHdrError */
+       LINUX_MIB_XFRMINNOSTATES,               /* XfrmInNoStates */
+       LINUX_MIB_XFRMINSTATEPROTOERROR,        /* XfrmInStateProtoError */
+       LINUX_MIB_XFRMINSTATEMODEERROR,         /* XfrmInStateModeError */
+       LINUX_MIB_XFRMINSTATESEQERROR,          /* XfrmInStateSeqError */
+       LINUX_MIB_XFRMINSTATEEXPIRED,           /* XfrmInStateExpired */
+       LINUX_MIB_XFRMINSTATEMISMATCH,          /* XfrmInStateMismatch */
+       LINUX_MIB_XFRMINSTATEINVALID,           /* XfrmInStateInvalid */
+       LINUX_MIB_XFRMINTMPLMISMATCH,           /* XfrmInTmplMismatch */
+       LINUX_MIB_XFRMINNOPOLS,                 /* XfrmInNoPols */
+       LINUX_MIB_XFRMINPOLBLOCK,               /* XfrmInPolBlock */
+       LINUX_MIB_XFRMINPOLERROR,               /* XfrmInPolError */
+       LINUX_MIB_XFRMOUTERROR,                 /* XfrmOutError */
+       LINUX_MIB_XFRMOUTBUNDLEGENERROR,        /* XfrmOutBundleGenError */
+       LINUX_MIB_XFRMOUTBUNDLECHECKERROR,      /* XfrmOutBundleCheckError */
+       LINUX_MIB_XFRMOUTNOSTATES,              /* XfrmOutNoStates */
+       LINUX_MIB_XFRMOUTSTATEPROTOERROR,       /* XfrmOutStateProtoError */
+       LINUX_MIB_XFRMOUTSTATEMODEERROR,        /* XfrmOutStateModeError */
+       LINUX_MIB_XFRMOUTSTATESEQERROR,         /* XfrmOutStateSeqError */
+       LINUX_MIB_XFRMOUTSTATEEXPIRED,          /* XfrmOutStateExpired */
+       LINUX_MIB_XFRMOUTPOLBLOCK,              /* XfrmOutPolBlock */
+       LINUX_MIB_XFRMOUTPOLDEAD,               /* XfrmOutPolDead */
+       LINUX_MIB_XFRMOUTPOLERROR,              /* XfrmOutPolError */
+       LINUX_MIB_XFRMFWDHDRERROR,              /* XfrmFwdHdrError*/
+       LINUX_MIB_XFRMOUTSTATEINVALID,          /* XfrmOutStateInvalid */
+       LINUX_MIB_XFRMACQUIREERROR,             /* XfrmAcquireError */
+       __LINUX_MIB_XFRMMAX
+};
+
+#endif /* _LINUX_SNMP_H */
diff --git a/lib/libdss-include/include/linux/sock_diag.h b/lib/libdss-include/include/linux/sock_diag.h
new file mode 100644 (file)
index 0000000..024e1f4
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __SOCK_DIAG_H__
+#define __SOCK_DIAG_H__
+
+#include <linux/types.h>
+
+#define SOCK_DIAG_BY_FAMILY 20
+
+struct sock_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+};
+
+enum {
+       SK_MEMINFO_RMEM_ALLOC,
+       SK_MEMINFO_RCVBUF,
+       SK_MEMINFO_WMEM_ALLOC,
+       SK_MEMINFO_SNDBUF,
+       SK_MEMINFO_FWD_ALLOC,
+       SK_MEMINFO_WMEM_QUEUED,
+       SK_MEMINFO_OPTMEM,
+       SK_MEMINFO_BACKLOG,
+
+       SK_MEMINFO_VARS,
+};
+
+enum sknetlink_groups {
+       SKNLGRP_NONE,
+       SKNLGRP_INET_TCP_DESTROY,
+       SKNLGRP_INET_UDP_DESTROY,
+       SKNLGRP_INET6_TCP_DESTROY,
+       SKNLGRP_INET6_UDP_DESTROY,
+       __SKNLGRP_MAX,
+};
+#define SKNLGRP_MAX    (__SKNLGRP_MAX - 1)
+
+#endif /* __SOCK_DIAG_H__ */
diff --git a/lib/libdss-include/include/linux/socket.h b/lib/libdss-include/include/linux/socket.h
new file mode 100644 (file)
index 0000000..8c1e501
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _LINUX_SOCKET_H
+#define _LINUX_SOCKET_H
+
+/*
+ * Desired design of maximum size and alignment (see RFC2553)
+ */
+#define _K_SS_MAXSIZE  128     /* Implementation specific max size */
+#define _K_SS_ALIGNSIZE        (__alignof__ (struct sockaddr *))
+                               /* Implementation specific desired alignment */
+
+typedef unsigned short __kernel_sa_family_t;
+
+struct __kernel_sockaddr_storage {
+       __kernel_sa_family_t    ss_family;              /* address family */
+       /* Following field(s) are implementation specific */
+       char            __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
+                               /* space to achieve desired size, */
+                               /* _SS_MAXSIZE value minus size of ss_family */
+} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));  /* force desired alignment */
+
+#endif /* _LINUX_SOCKET_H */
diff --git a/lib/libdss-include/include/linux/sockios.h b/lib/libdss-include/include/linux/sockios.h
new file mode 100644 (file)
index 0000000..e888b1a
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions of the socket-level I/O control calls.
+ *
+ * Version:    @(#)sockios.h   1.0.2   03/09/93
+ *
+ * Authors:    Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_SOCKIOS_H
+#define _LINUX_SOCKIOS_H
+
+#include <asm/sockios.h>
+
+/* Linux-specific socket ioctls */
+#define SIOCINQ                FIONREAD
+#define SIOCOUTQ       TIOCOUTQ        /* output queue size (not sent + not acked) */
+
+/* Routing table calls. */
+#define SIOCADDRT      0x890B          /* add routing table entry      */
+#define SIOCDELRT      0x890C          /* delete routing table entry   */
+#define SIOCRTMSG      0x890D          /* call to routing system       */
+
+/* Socket configuration controls. */
+#define SIOCGIFNAME    0x8910          /* get iface name               */
+#define SIOCSIFLINK    0x8911          /* set iface channel            */
+#define SIOCGIFCONF    0x8912          /* get iface list               */
+#define SIOCGIFFLAGS   0x8913          /* get flags                    */
+#define SIOCSIFFLAGS   0x8914          /* set flags                    */
+#define SIOCGIFADDR    0x8915          /* get PA address               */
+#define SIOCSIFADDR    0x8916          /* set PA address               */
+#define SIOCGIFDSTADDR 0x8917          /* get remote PA address        */
+#define SIOCSIFDSTADDR 0x8918          /* set remote PA address        */
+#define SIOCGIFBRDADDR 0x8919          /* get broadcast PA address     */
+#define SIOCSIFBRDADDR 0x891a          /* set broadcast PA address     */
+#define SIOCGIFNETMASK 0x891b          /* get network PA mask          */
+#define SIOCSIFNETMASK 0x891c          /* set network PA mask          */
+#define SIOCGIFMETRIC  0x891d          /* get metric                   */
+#define SIOCSIFMETRIC  0x891e          /* set metric                   */
+#define SIOCGIFMEM     0x891f          /* get memory address (BSD)     */
+#define SIOCSIFMEM     0x8920          /* set memory address (BSD)     */
+#define SIOCGIFMTU     0x8921          /* get MTU size                 */
+#define SIOCSIFMTU     0x8922          /* set MTU size                 */
+#define SIOCSIFNAME    0x8923          /* set interface name */
+#define        SIOCSIFHWADDR   0x8924          /* set hardware address         */
+#define SIOCGIFENCAP   0x8925          /* get/set encapsulations       */
+#define SIOCSIFENCAP   0x8926          
+#define SIOCGIFHWADDR  0x8927          /* Get hardware address         */
+#define SIOCGIFSLAVE   0x8929          /* Driver slaving support       */
+#define SIOCSIFSLAVE   0x8930
+#define SIOCADDMULTI   0x8931          /* Multicast address lists      */
+#define SIOCDELMULTI   0x8932
+#define SIOCGIFINDEX   0x8933          /* name -> if_index mapping     */
+#define SIOGIFINDEX    SIOCGIFINDEX    /* misprint compatibility :-)   */
+#define SIOCSIFPFLAGS  0x8934          /* set/get extended flags set   */
+#define SIOCGIFPFLAGS  0x8935
+#define SIOCDIFADDR    0x8936          /* delete PA address            */
+#define        SIOCSIFHWBROADCAST      0x8937  /* set hardware broadcast addr  */
+#define SIOCGIFCOUNT   0x8938          /* get number of devices */
+
+#define SIOCGIFBR      0x8940          /* Bridging support             */
+#define SIOCSIFBR      0x8941          /* Set bridging options         */
+
+#define SIOCGIFTXQLEN  0x8942          /* Get the tx queue length      */
+#define SIOCSIFTXQLEN  0x8943          /* Set the tx queue length      */
+
+/* SIOCGIFDIVERT was:  0x8944          Frame diversion support */
+/* SIOCSIFDIVERT was:  0x8945          Set frame diversion options */
+
+#define SIOCETHTOOL    0x8946          /* Ethtool interface            */
+
+#define SIOCGMIIPHY    0x8947          /* Get address of MII PHY in use. */
+#define SIOCGMIIREG    0x8948          /* Read MII PHY register.       */
+#define SIOCSMIIREG    0x8949          /* Write MII PHY register.      */
+
+#define SIOCWANDEV     0x894A          /* get/set netdev parameters    */
+
+#define SIOCOUTQNSD    0x894B          /* output queue size (not sent only) */
+
+/* ARP cache control calls. */
+                   /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
+#define SIOCDARP       0x8953          /* delete ARP table entry       */
+#define SIOCGARP       0x8954          /* get ARP table entry          */
+#define SIOCSARP       0x8955          /* set ARP table entry          */
+
+/* RARP cache control calls. */
+#define SIOCDRARP      0x8960          /* delete RARP table entry      */
+#define SIOCGRARP      0x8961          /* get RARP table entry         */
+#define SIOCSRARP      0x8962          /* set RARP table entry         */
+
+/* Driver configuration calls */
+
+#define SIOCGIFMAP     0x8970          /* Get device parameters        */
+#define SIOCSIFMAP     0x8971          /* Set device parameters        */
+
+/* DLCI configuration calls */
+
+#define SIOCADDDLCI    0x8980          /* Create new DLCI device       */
+#define SIOCDELDLCI    0x8981          /* Delete DLCI device           */
+
+#define SIOCGIFVLAN    0x8982          /* 802.1Q VLAN support          */
+#define SIOCSIFVLAN    0x8983          /* Set 802.1Q VLAN options      */
+
+/* bonding calls */
+
+#define SIOCBONDENSLAVE        0x8990          /* enslave a device to the bond */
+#define SIOCBONDRELEASE 0x8991         /* release a slave from the bond*/
+#define SIOCBONDSETHWADDR      0x8992  /* set the hw addr of the bond  */
+#define SIOCBONDSLAVEINFOQUERY 0x8993   /* rtn info about slave state   */
+#define SIOCBONDINFOQUERY      0x8994  /* rtn info about bond state    */
+#define SIOCBONDCHANGEACTIVE   0x8995   /* update to a new active slave */
+                       
+/* bridge calls */
+#define SIOCBRADDBR     0x89a0         /* create new bridge device     */
+#define SIOCBRDELBR     0x89a1         /* remove bridge device         */
+#define SIOCBRADDIF    0x89a2          /* add interface to bridge      */
+#define SIOCBRDELIF    0x89a3          /* remove interface from bridge */
+
+/* hardware time stamping: parameters in linux/net_tstamp.h */
+#define SIOCSHWTSTAMP  0x89b0          /* set and get config           */
+#define SIOCGHWTSTAMP  0x89b1          /* get config                   */
+
+/* Device private ioctl calls */
+
+/*
+ *     These 16 ioctls are available to devices via the do_ioctl() device
+ *     vector. Each device should include this file and redefine these names
+ *     as their own. Because these are device dependent it is a good idea
+ *     _NOT_ to issue them to random objects and hope.
+ *
+ *     THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM
+ */
+#define SIOCDEVPRIVATE 0x89F0  /* to 89FF */
+
+/*
+ *     These 16 ioctl calls are protocol private
+ */
+#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
+#endif /* _LINUX_SOCKIOS_H */
diff --git a/lib/libdss-include/include/linux/sonet.h b/lib/libdss-include/include/linux/sonet.h
new file mode 100644 (file)
index 0000000..77c834a
--- /dev/null
@@ -0,0 +1,60 @@
+/* sonet.h - SONET/SHD physical layer control */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_SONET_H
+#define LINUX_SONET_H
+
+#define __SONET_ITEMS \
+    __HANDLE_ITEM(section_bip);        /* section parity errors (B1) */ \
+    __HANDLE_ITEM(line_bip);           /* line parity errors (B2) */ \
+    __HANDLE_ITEM(path_bip);           /* path parity errors (B3) */ \
+    __HANDLE_ITEM(line_febe);          /* line parity errors at remote */ \
+    __HANDLE_ITEM(path_febe);          /* path parity errors at remote */ \
+    __HANDLE_ITEM(corr_hcs);           /* correctable header errors */ \
+    __HANDLE_ITEM(uncorr_hcs);         /* uncorrectable header errors */ \
+    __HANDLE_ITEM(tx_cells);           /* cells sent */ \
+    __HANDLE_ITEM(rx_cells);           /* cells received */
+
+struct sonet_stats {
+#define __HANDLE_ITEM(i) int i
+       __SONET_ITEMS
+#undef __HANDLE_ITEM
+} __attribute__ ((packed));
+
+
+#define SONET_GETSTAT  _IOR('a',ATMIOC_PHYTYP,struct sonet_stats)
+                                       /* get statistics */
+#define SONET_GETSTATZ _IOR('a',ATMIOC_PHYTYP+1,struct sonet_stats)
+                                       /* ... and zero counters */
+#define SONET_SETDIAG  _IOWR('a',ATMIOC_PHYTYP+2,int)
+                                       /* set error insertion */
+#define SONET_CLRDIAG  _IOWR('a',ATMIOC_PHYTYP+3,int)
+                                       /* clear error insertion */
+#define SONET_GETDIAG  _IOR('a',ATMIOC_PHYTYP+4,int)
+                                       /* query error insertion */
+#define SONET_SETFRAMING _IOW('a',ATMIOC_PHYTYP+5,int)
+                                       /* set framing mode (SONET/SDH) */
+#define SONET_GETFRAMING _IOR('a',ATMIOC_PHYTYP+6,int)
+                                       /* get framing mode */
+#define SONET_GETFRSENSE _IOR('a',ATMIOC_PHYTYP+7, \
+  unsigned char[SONET_FRSENSE_SIZE])   /* get framing sense information */
+
+#define SONET_INS_SBIP   1             /* section BIP */
+#define SONET_INS_LBIP   2             /* line BIP */
+#define SONET_INS_PBIP   4             /* path BIP */
+#define SONET_INS_FRAME          8             /* out of frame */
+#define SONET_INS_LOS   16             /* set line to zero */
+#define SONET_INS_LAIS  32             /* line alarm indication signal */
+#define SONET_INS_PAIS  64             /* path alarm indication signal */
+#define SONET_INS_HCS  128             /* insert HCS error */
+
+#define SONET_FRAME_SONET 0            /* SONET STS-3 framing */
+#define SONET_FRAME_SDH   1            /* SDH STM-1 framing */
+
+#define SONET_FRSENSE_SIZE 6           /* C1[3],H1[3] (0xff for unknown) */
+
+
+
+#endif /* LINUX_SONET_H */
diff --git a/lib/libdss-include/include/linux/sonypi.h b/lib/libdss-include/include/linux/sonypi.h
new file mode 100644 (file)
index 0000000..1c0a25f
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Sony Programmable I/O Control Device driver for VAIO
+ *
+ * Copyright (C) 2001-2005 Stelian Pop <stelian@popies.net>
+ *
+ * Copyright (C) 2005 Narayanan R S <nars@kadamba.org>
+
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ *
+ * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au>
+ *
+ * Copyright (C) 2001 Junichi Morita <jun1m@mars.dti.ne.jp>
+ *
+ * Copyright (C) 2000 Takaya Kinjo <t-kinjo@tc4.so-net.ne.jp>
+ *
+ * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
+ *
+ * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef _SONYPI_H_
+#define _SONYPI_H_
+
+#include <linux/types.h>
+
+/* events the user application reading /dev/sonypi can use */
+
+#define SONYPI_EVENT_IGNORE                     0
+#define SONYPI_EVENT_JOGDIAL_DOWN               1
+#define SONYPI_EVENT_JOGDIAL_UP                         2
+#define SONYPI_EVENT_JOGDIAL_DOWN_PRESSED       3
+#define SONYPI_EVENT_JOGDIAL_UP_PRESSED                 4
+#define SONYPI_EVENT_JOGDIAL_PRESSED            5
+#define SONYPI_EVENT_JOGDIAL_RELEASED           6      /* obsolete */
+#define SONYPI_EVENT_CAPTURE_PRESSED            7
+#define SONYPI_EVENT_CAPTURE_RELEASED           8      /* obsolete */
+#define SONYPI_EVENT_CAPTURE_PARTIALPRESSED     9
+#define SONYPI_EVENT_CAPTURE_PARTIALRELEASED   10
+#define SONYPI_EVENT_FNKEY_ESC                 11
+#define SONYPI_EVENT_FNKEY_F1                  12
+#define SONYPI_EVENT_FNKEY_F2                  13
+#define SONYPI_EVENT_FNKEY_F3                  14
+#define SONYPI_EVENT_FNKEY_F4                  15
+#define SONYPI_EVENT_FNKEY_F5                  16
+#define SONYPI_EVENT_FNKEY_F6                  17
+#define SONYPI_EVENT_FNKEY_F7                  18
+#define SONYPI_EVENT_FNKEY_F8                  19
+#define SONYPI_EVENT_FNKEY_F9                  20
+#define SONYPI_EVENT_FNKEY_F10                 21
+#define SONYPI_EVENT_FNKEY_F11                 22
+#define SONYPI_EVENT_FNKEY_F12                 23
+#define SONYPI_EVENT_FNKEY_1                   24
+#define SONYPI_EVENT_FNKEY_2                   25
+#define SONYPI_EVENT_FNKEY_D                   26
+#define SONYPI_EVENT_FNKEY_E                   27
+#define SONYPI_EVENT_FNKEY_F                   28
+#define SONYPI_EVENT_FNKEY_S                   29
+#define SONYPI_EVENT_FNKEY_B                   30
+#define SONYPI_EVENT_BLUETOOTH_PRESSED         31
+#define SONYPI_EVENT_PKEY_P1                   32
+#define SONYPI_EVENT_PKEY_P2                   33
+#define SONYPI_EVENT_PKEY_P3                   34
+#define SONYPI_EVENT_BACK_PRESSED              35
+#define SONYPI_EVENT_LID_CLOSED                        36
+#define SONYPI_EVENT_LID_OPENED                        37
+#define SONYPI_EVENT_BLUETOOTH_ON              38
+#define SONYPI_EVENT_BLUETOOTH_OFF             39
+#define SONYPI_EVENT_HELP_PRESSED              40
+#define SONYPI_EVENT_FNKEY_ONLY                        41
+#define SONYPI_EVENT_JOGDIAL_FAST_DOWN         42
+#define SONYPI_EVENT_JOGDIAL_FAST_UP           43
+#define SONYPI_EVENT_JOGDIAL_FAST_DOWN_PRESSED 44
+#define SONYPI_EVENT_JOGDIAL_FAST_UP_PRESSED   45
+#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN                46
+#define SONYPI_EVENT_JOGDIAL_VFAST_UP          47
+#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN_PRESSED        48
+#define SONYPI_EVENT_JOGDIAL_VFAST_UP_PRESSED  49
+#define SONYPI_EVENT_ZOOM_PRESSED              50
+#define SONYPI_EVENT_THUMBPHRASE_PRESSED       51
+#define SONYPI_EVENT_MEYE_FACE                 52
+#define SONYPI_EVENT_MEYE_OPPOSITE             53
+#define SONYPI_EVENT_MEMORYSTICK_INSERT                54
+#define SONYPI_EVENT_MEMORYSTICK_EJECT         55
+#define SONYPI_EVENT_ANYBUTTON_RELEASED                56
+#define SONYPI_EVENT_BATTERY_INSERT            57
+#define SONYPI_EVENT_BATTERY_REMOVE            58
+#define SONYPI_EVENT_FNKEY_RELEASED            59
+#define SONYPI_EVENT_WIRELESS_ON               60
+#define SONYPI_EVENT_WIRELESS_OFF              61
+#define SONYPI_EVENT_ZOOM_IN_PRESSED           62
+#define SONYPI_EVENT_ZOOM_OUT_PRESSED          63
+#define SONYPI_EVENT_CD_EJECT_PRESSED          64
+#define SONYPI_EVENT_MODEKEY_PRESSED           65
+#define SONYPI_EVENT_PKEY_P4                   66
+#define SONYPI_EVENT_PKEY_P5                   67
+#define SONYPI_EVENT_SETTINGKEY_PRESSED                68
+#define SONYPI_EVENT_VOLUME_INC_PRESSED                69
+#define SONYPI_EVENT_VOLUME_DEC_PRESSED                70
+#define SONYPI_EVENT_BRIGHTNESS_PRESSED                71
+#define SONYPI_EVENT_MEDIA_PRESSED             72
+#define SONYPI_EVENT_VENDOR_PRESSED            73
+
+/* get/set brightness */
+#define SONYPI_IOCGBRT         _IOR('v', 0, __u8)
+#define SONYPI_IOCSBRT         _IOW('v', 0, __u8)
+
+/* get battery full capacity/remaining capacity */
+#define SONYPI_IOCGBAT1CAP     _IOR('v', 2, __u16)
+#define SONYPI_IOCGBAT1REM     _IOR('v', 3, __u16)
+#define SONYPI_IOCGBAT2CAP     _IOR('v', 4, __u16)
+#define SONYPI_IOCGBAT2REM     _IOR('v', 5, __u16)
+
+/* get battery flags: battery1/battery2/ac adapter present */
+#define SONYPI_BFLAGS_B1       0x01
+#define SONYPI_BFLAGS_B2       0x02
+#define SONYPI_BFLAGS_AC       0x04
+#define SONYPI_IOCGBATFLAGS    _IOR('v', 7, __u8)
+
+/* get/set bluetooth subsystem state on/off */
+#define SONYPI_IOCGBLUE                _IOR('v', 8, __u8)
+#define SONYPI_IOCSBLUE                _IOW('v', 9, __u8)
+
+/* get/set fan state on/off */
+#define SONYPI_IOCGFAN         _IOR('v', 10, __u8)
+#define SONYPI_IOCSFAN         _IOW('v', 11, __u8)
+
+/* get temperature (C) */
+#define SONYPI_IOCGTEMP                _IOR('v', 12, __u8)
+
+
+#endif /* _SONYPI_H_ */
diff --git a/lib/libdss-include/include/linux/sound.h b/lib/libdss-include/include/linux/sound.h
new file mode 100644 (file)
index 0000000..a1d0682
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _LINUX_SOUND_H
+#define _LINUX_SOUND_H
+
+/*
+ * Minor numbers for the sound driver.
+ */
+
+#include <linux/fs.h>
+
+#define SND_DEV_CTL            0       /* Control port /dev/mixer */
+#define SND_DEV_SEQ            1       /* Sequencer output /dev/sequencer (FM
+                                               synthesizer and MIDI output) */
+#define SND_DEV_MIDIN          2       /* Raw midi access */
+#define SND_DEV_DSP            3       /* Digitized voice /dev/dsp */
+#define SND_DEV_AUDIO          4       /* Sparc compatible /dev/audio */
+#define SND_DEV_DSP16          5       /* Like /dev/dsp but 16 bits/sample */
+/* #define SND_DEV_STATUS      6 */    /* /dev/sndstat (obsolete) */
+#define SND_DEV_UNUSED         6
+#define SND_DEV_AWFM           7       /* Reserved */
+#define SND_DEV_SEQ2           8       /* /dev/sequencer, level 2 interface */
+/* #define SND_DEV_SNDPROC     9 */    /* /dev/sndproc for programmable devices (not used) */
+/* #define SND_DEV_DMMIDI      9 */
+#define SND_DEV_SYNTH          9       /* Raw synth access /dev/synth (same as /dev/dmfm) */
+#define SND_DEV_DMFM           10      /* Raw synth access /dev/dmfm */
+#define SND_DEV_UNKNOWN11      11
+#define SND_DEV_ADSP           12      /* Like /dev/dsp (obsolete) */
+#define SND_DEV_AMIDI          13      /* Like /dev/midi (obsolete) */
+#define SND_DEV_ADMMIDI                14      /* Like /dev/dmmidi (onsolete) */
+
+
+#endif /* _LINUX_SOUND_H */
diff --git a/lib/libdss-include/include/linux/soundcard.h b/lib/libdss-include/include/linux/soundcard.h
new file mode 100644 (file)
index 0000000..c5abf86
--- /dev/null
@@ -0,0 +1,1276 @@
+/*
+ * Copyright by Hannu Savolainen 1993-1997
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. 2.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef SOUNDCARD_H
+#define SOUNDCARD_H
+
+
+/*
+ * OSS interface version. With versions earlier than 3.6 this value is
+ * an integer with value less than 361. In versions 3.6 and later
+ * it's a six digit hexadecimal value. For example value
+ * of 0x030600 represents OSS version 3.6.0.
+ * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
+ * the currently active driver.
+ */
+#define SOUND_VERSION  0x030802
+#define OPEN_SOUND_SYSTEM
+
+/* In Linux we need to be prepared for cross compiling */
+#include <linux/ioctl.h>
+
+/* Endian macros. */
+#  include <endian.h>
+
+/*
+ *     Supported card ID numbers (Should be somewhere else?)
+ */
+
+#define SNDCARD_ADLIB          1
+#define SNDCARD_SB             2
+#define SNDCARD_PAS            3
+#define SNDCARD_GUS            4
+#define SNDCARD_MPU401         5
+#define SNDCARD_SB16           6
+#define SNDCARD_SB16MIDI       7
+#define SNDCARD_UART6850       8
+#define SNDCARD_GUS16          9
+#define SNDCARD_MSS            10
+#define SNDCARD_PSS            11
+#define SNDCARD_SSCAPE         12
+#define SNDCARD_PSS_MPU        13
+#define SNDCARD_PSS_MSS        14
+#define SNDCARD_SSCAPE_MSS     15
+#define SNDCARD_TRXPRO         16
+#define SNDCARD_TRXPRO_SB      17
+#define SNDCARD_TRXPRO_MPU     18
+#define SNDCARD_MAD16          19
+#define SNDCARD_MAD16_MPU      20
+#define SNDCARD_CS4232         21
+#define SNDCARD_CS4232_MPU     22
+#define SNDCARD_MAUI           23
+#define SNDCARD_PSEUDO_MSS     24
+#define SNDCARD_GUSPNP         25
+#define SNDCARD_UART401                26
+/* Sound card numbers 27 to N are reserved. Don't add more numbers here. */
+
+/***********************************
+ * IOCTL Commands for /dev/sequencer
+ */
+
+#ifndef _SIOWR
+#if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
+/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
+#define        SIOCPARM_MASK   IOCPARM_MASK
+#define        SIOC_VOID       IOC_VOID
+#define        SIOC_OUT        IOC_OUT
+#define        SIOC_IN         IOC_IN
+#define        SIOC_INOUT      IOC_INOUT
+#define _SIOC_SIZE     _IOC_SIZE
+#define _SIOC_DIR      _IOC_DIR
+#define _SIOC_NONE     _IOC_NONE
+#define _SIOC_READ     _IOC_READ
+#define _SIOC_WRITE    _IOC_WRITE
+#define        _SIO            _IO
+#define        _SIOR           _IOR
+#define        _SIOW           _IOW
+#define        _SIOWR          _IOWR
+#else
+
+/* Ioctl's have the command encoded in the lower word,
+ * and the size of any in or out parameters in the upper
+ * word.  The high 2 bits of the upper word are used
+ * to encode the in/out status of the parameter; for now
+ * we restrict parameters to at most 8191 bytes.
+ */
+/* #define     SIOCTYPE                (0xff<<8) */
+#define        SIOCPARM_MASK   0x1fff          /* parameters must be < 8192 bytes */
+#define        SIOC_VOID       0x00000000      /* no parameters */
+#define        SIOC_OUT        0x20000000      /* copy out parameters */
+#define        SIOC_IN         0x40000000      /* copy in parameters */
+#define        SIOC_INOUT      (SIOC_IN|SIOC_OUT)
+/* the 0x20000000 is so we can distinguish new ioctl's from old */
+#define        _SIO(x,y)       ((int)(SIOC_VOID|(x<<8)|y))
+#define        _SIOR(x,y,t)    ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define        _SIOW(x,y,t)    ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+/* this should be _SIORW, but stdio got there first */
+#define        _SIOWR(x,y,t)   ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define _SIOC_SIZE(x)  ((x>>16)&SIOCPARM_MASK) 
+#define _SIOC_DIR(x)   (x & 0xf0000000)
+#define _SIOC_NONE     SIOC_VOID
+#define _SIOC_READ     SIOC_OUT
+#define _SIOC_WRITE    SIOC_IN
+#  endif /* _IOWR */
+#endif  /* !_SIOWR */
+
+#define SNDCTL_SEQ_RESET               _SIO  ('Q', 0)
+#define SNDCTL_SEQ_SYNC                        _SIO  ('Q', 1)
+#define SNDCTL_SYNTH_INFO              _SIOWR('Q', 2, struct synth_info)
+#define SNDCTL_SEQ_CTRLRATE            _SIOWR('Q', 3, int)     /* Set/get timer resolution (HZ) */
+#define SNDCTL_SEQ_GETOUTCOUNT         _SIOR ('Q', 4, int)
+#define SNDCTL_SEQ_GETINCOUNT          _SIOR ('Q', 5, int)
+#define SNDCTL_SEQ_PERCMODE            _SIOW ('Q', 6, int)
+#define SNDCTL_FM_LOAD_INSTR           _SIOW ('Q', 7, struct sbi_instrument)   /* Obsolete. Don't use!!!!!! */
+#define SNDCTL_SEQ_TESTMIDI            _SIOW ('Q', 8, int)
+#define SNDCTL_SEQ_RESETSAMPLES                _SIOW ('Q', 9, int)
+#define SNDCTL_SEQ_NRSYNTHS            _SIOR ('Q',10, int)
+#define SNDCTL_SEQ_NRMIDIS             _SIOR ('Q',11, int)
+#define SNDCTL_MIDI_INFO               _SIOWR('Q',12, struct midi_info)
+#define SNDCTL_SEQ_THRESHOLD           _SIOW ('Q',13, int)
+#define SNDCTL_SYNTH_MEMAVL            _SIOWR('Q',14, int)     /* in=dev#, out=memsize */
+#define SNDCTL_FM_4OP_ENABLE           _SIOW ('Q',15, int)     /* in=dev# */
+#define SNDCTL_SEQ_PANIC               _SIO  ('Q',17)
+#define SNDCTL_SEQ_OUTOFBAND           _SIOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SEQ_GETTIME             _SIOR ('Q',19, int)
+#define SNDCTL_SYNTH_ID                        _SIOWR('Q',20, struct synth_info)
+#define SNDCTL_SYNTH_CONTROL           _SIOWR('Q',21, struct synth_control)
+#define SNDCTL_SYNTH_REMOVESAMPLE      _SIOWR('Q',22, struct remove_sample)
+
+typedef struct synth_control
+{
+       int devno;      /* Synthesizer # */
+       char data[4000]; /* Device spesific command/data record */
+}synth_control;
+
+typedef struct remove_sample
+{
+       int devno;      /* Synthesizer # */
+       int bankno;     /* MIDI bank # (0=General MIDI) */
+       int instrno;    /* MIDI instrument number */
+} remove_sample;
+
+typedef struct seq_event_rec {
+               unsigned char arr[8];
+} seq_event_rec;
+
+#define SNDCTL_TMR_TIMEBASE            _SIOWR('T', 1, int)
+#define SNDCTL_TMR_START               _SIO  ('T', 2)
+#define SNDCTL_TMR_STOP                        _SIO  ('T', 3)
+#define SNDCTL_TMR_CONTINUE            _SIO  ('T', 4)
+#define SNDCTL_TMR_TEMPO               _SIOWR('T', 5, int)
+#define SNDCTL_TMR_SOURCE              _SIOWR('T', 6, int)
+#      define TMR_INTERNAL             0x00000001
+#      define TMR_EXTERNAL             0x00000002
+#              define TMR_MODE_MIDI    0x00000010
+#              define TMR_MODE_FSK     0x00000020
+#              define TMR_MODE_CLS     0x00000040
+#              define TMR_MODE_SMPTE   0x00000080
+#define SNDCTL_TMR_METRONOME           _SIOW ('T', 7, int)
+#define SNDCTL_TMR_SELECT              _SIOW ('T', 8, int)
+
+/*
+ * Some big endian/little endian handling macros
+ */
+
+#define _LINUX_PATCHKEY_H_INDIRECT
+#include <linux/patchkey.h>
+#undef _LINUX_PATCHKEY_H_INDIRECT
+
+# if defined(__BYTE_ORDER)
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#    define AFMT_S16_NE AFMT_S16_BE
+#  elif __BYTE_ORDER == __LITTLE_ENDIAN
+#    define AFMT_S16_NE AFMT_S16_LE
+#  else
+#    error "could not determine byte order"
+#  endif
+# endif
+
+/*
+ *     Sample loading mechanism for internal synthesizers (/dev/sequencer)
+ *     The following patch_info structure has been designed to support
+ *     Gravis UltraSound. It tries to be universal format for uploading
+ *     sample based patches but is probably too limited.
+ *
+ *      (PBD) As Hannu guessed, the GUS structure is too limited for 
+ *      the WaveFront, but this is the right place for a constant definition.
+ */
+
+struct patch_info {
+               unsigned short key;             /* Use WAVE_PATCH here */
+#define WAVE_PATCH        _PATCHKEY(0x04)
+#define GUS_PATCH         WAVE_PATCH
+#define WAVEFRONT_PATCH    _PATCHKEY(0x06)
+
+               short device_no;        /* Synthesizer number */
+               short instr_no;         /* Midi pgm# */
+
+               unsigned int mode;
+/*
+ * The least significant byte has the same format than the GUS .PAT
+ * files
+ */
+#define WAVE_16_BITS   0x01    /* bit 0 = 8 or 16 bit wave data. */
+#define WAVE_UNSIGNED  0x02    /* bit 1 = Signed - Unsigned data. */
+#define WAVE_LOOPING   0x04    /* bit 2 = looping enabled-1. */
+#define WAVE_BIDIR_LOOP        0x08    /* bit 3 = Set is bidirectional looping. */
+#define WAVE_LOOP_BACK 0x10    /* bit 4 = Set is looping backward. */
+#define WAVE_SUSTAIN_ON        0x20    /* bit 5 = Turn sustaining on. (Env. pts. 3)*/
+#define WAVE_ENVELOPES 0x40    /* bit 6 = Enable envelopes - 1 */
+#define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
+                               /*      (use the env_rate/env_offs fields). */
+/* Linux specific bits */
+#define WAVE_VIBRATO   0x00010000      /* The vibrato info is valid */
+#define WAVE_TREMOLO   0x00020000      /* The tremolo info is valid */
+#define WAVE_SCALE     0x00040000      /* The scaling info is valid */
+#define WAVE_FRACTIONS 0x00080000      /* Fraction information is valid */
+/* Reserved bits */
+#define WAVE_ROM       0x40000000      /* For future use */
+#define WAVE_MULAW     0x20000000      /* For future use */
+/* Other bits must be zeroed */
+
+               int len;        /* Size of the wave data in bytes */
+               int loop_start, loop_end; /* Byte offsets from the beginning */
+
+/* 
+ * The base_freq and base_note fields are used when computing the
+ * playback speed for a note. The base_note defines the tone frequency
+ * which is heard if the sample is played using the base_freq as the
+ * playback speed.
+ *
+ * The low_note and high_note fields define the minimum and maximum note
+ * frequencies for which this sample is valid. It is possible to define
+ * more than one samples for an instrument number at the same time. The
+ * low_note and high_note fields are used to select the most suitable one.
+ *
+ * The fields base_note, high_note and low_note should contain
+ * the note frequency multiplied by 1000. For example value for the
+ * middle A is 440*1000.
+ */
+
+               unsigned int base_freq;
+               unsigned int base_note;
+               unsigned int high_note;
+               unsigned int low_note;
+               int panning;    /* -128=left, 127=right */
+               int detuning;
+
+/*     New fields introduced in version 1.99.5 */
+
+       /* Envelope. Enabled by mode bit WAVE_ENVELOPES */
+               unsigned char   env_rate[ 6 ];   /* GUS HW ramping rate */
+               unsigned char   env_offset[ 6 ]; /* 255 == 100% */
+
+       /* 
+        * The tremolo, vibrato and scale info are not supported yet.
+        * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
+        * WAVE_SCALE
+        */
+
+               unsigned char   tremolo_sweep;
+               unsigned char   tremolo_rate;
+               unsigned char   tremolo_depth;
+       
+               unsigned char   vibrato_sweep;
+               unsigned char   vibrato_rate;
+               unsigned char   vibrato_depth;
+
+               int             scale_frequency;
+               unsigned int    scale_factor;           /* from 0 to 2048 or 0 to 2 */
+       
+               int             volume;
+               int             fractions;
+               int             reserved1;
+               int             spare[2];
+               char data[1];   /* The waveform data starts here */
+       };
+
+struct sysex_info {
+               short key;              /* Use SYSEX_PATCH or MAUI_PATCH here */
+#define SYSEX_PATCH    _PATCHKEY(0x05)
+#define MAUI_PATCH     _PATCHKEY(0x06)
+               short device_no;        /* Synthesizer number */
+               int len;        /* Size of the sysex data in bytes */
+               unsigned char data[1];  /* Sysex data starts here */
+       };
+
+/*
+ * /dev/sequencer input events.
+ *
+ * The data written to the /dev/sequencer is a stream of events. Events
+ * are records of 4 or 8 bytes. The first byte defines the size. 
+ * Any number of events can be written with a write call. There
+ * is a set of macros for sending these events. Use these macros if you
+ * want to maximize portability of your program.
+ *
+ * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
+ * (All input events are currently 4 bytes long. Be prepared to support
+ * 8 byte events also. If you receive any event having first byte >= 128,
+ * it's a 8 byte event.
+ *
+ * The events are documented at the end of this file.
+ *
+ * Normal events (4 bytes)
+ * There is also a 8 byte version of most of the 4 byte events. The
+ * 8 byte one is recommended.
+ */
+#define SEQ_NOTEOFF            0
+#define SEQ_FMNOTEOFF          SEQ_NOTEOFF     /* Just old name */
+#define SEQ_NOTEON             1
+#define        SEQ_FMNOTEON            SEQ_NOTEON
+#define SEQ_WAIT               TMR_WAIT_ABS
+#define SEQ_PGMCHANGE          3
+#define SEQ_FMPGMCHANGE                SEQ_PGMCHANGE
+#define SEQ_SYNCTIMER          TMR_START
+#define SEQ_MIDIPUTC           5
+#define SEQ_DRUMON             6       /*** OBSOLETE ***/
+#define SEQ_DRUMOFF            7       /*** OBSOLETE ***/
+#define SEQ_ECHO               TMR_ECHO        /* For synching programs with output */
+#define SEQ_AFTERTOUCH         9
+#define SEQ_CONTROLLER         10
+
+/*******************************************
+ *     Midi controller numbers
+ *******************************************
+ * Controllers 0 to 31 (0x00 to 0x1f) and
+ * 32 to 63 (0x20 to 0x3f) are continuous
+ * controllers.
+ * In the MIDI 1.0 these controllers are sent using
+ * two messages. Controller numbers 0 to 31 are used
+ * to send the MSB and the controller numbers 32 to 63
+ * are for the LSB. Note that just 7 bits are used in MIDI bytes.
+ */
+
+#define           CTL_BANK_SELECT              0x00
+#define           CTL_MODWHEEL                 0x01
+#define    CTL_BREATH                  0x02
+/*             undefined               0x03 */
+#define    CTL_FOOT                    0x04
+#define    CTL_PORTAMENTO_TIME         0x05
+#define    CTL_DATA_ENTRY              0x06
+#define    CTL_MAIN_VOLUME             0x07
+#define    CTL_BALANCE                 0x08
+/*             undefined               0x09 */
+#define    CTL_PAN                     0x0a
+#define    CTL_EXPRESSION              0x0b
+/*             undefined               0x0c */
+/*             undefined               0x0d */
+/*             undefined               0x0e */
+/*             undefined               0x0f */
+#define    CTL_GENERAL_PURPOSE1        0x10
+#define    CTL_GENERAL_PURPOSE2        0x11
+#define    CTL_GENERAL_PURPOSE3        0x12
+#define    CTL_GENERAL_PURPOSE4        0x13
+/*             undefined               0x14 - 0x1f */
+
+/*             undefined               0x20 */
+/* The controller numbers 0x21 to 0x3f are reserved for the */
+/* least significant bytes of the controllers 0x00 to 0x1f. */
+/* These controllers are not recognised by the driver. */
+
+/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
+/* 0=OFF and 127=ON (intermediate values are possible) */
+#define    CTL_DAMPER_PEDAL            0x40
+#define    CTL_SUSTAIN                 0x40    /* Alias */
+#define    CTL_HOLD                    0x40    /* Alias */
+#define    CTL_PORTAMENTO              0x41
+#define    CTL_SOSTENUTO               0x42
+#define    CTL_SOFT_PEDAL              0x43
+/*             undefined               0x44 */
+#define    CTL_HOLD2                   0x45
+/*             undefined               0x46 - 0x4f */
+
+#define    CTL_GENERAL_PURPOSE5        0x50
+#define    CTL_GENERAL_PURPOSE6        0x51
+#define    CTL_GENERAL_PURPOSE7        0x52
+#define    CTL_GENERAL_PURPOSE8        0x53
+/*             undefined               0x54 - 0x5a */
+#define    CTL_EXT_EFF_DEPTH           0x5b
+#define    CTL_TREMOLO_DEPTH           0x5c
+#define    CTL_CHORUS_DEPTH            0x5d
+#define    CTL_DETUNE_DEPTH            0x5e
+#define    CTL_CELESTE_DEPTH           0x5e    /* Alias for the above one */
+#define    CTL_PHASER_DEPTH            0x5f
+#define    CTL_DATA_INCREMENT          0x60
+#define    CTL_DATA_DECREMENT          0x61
+#define    CTL_NONREG_PARM_NUM_LSB     0x62
+#define    CTL_NONREG_PARM_NUM_MSB     0x63
+#define    CTL_REGIST_PARM_NUM_LSB     0x64
+#define    CTL_REGIST_PARM_NUM_MSB     0x65
+/*             undefined               0x66 - 0x78 */
+/*             reserved                0x79 - 0x7f */
+
+/* Pseudo controllers (not midi compatible) */
+#define    CTRL_PITCH_BENDER           255
+#define    CTRL_PITCH_BENDER_RANGE     254
+#define    CTRL_EXPRESSION             253     /* Obsolete */
+#define    CTRL_MAIN_VOLUME            252     /* Obsolete */
+#define SEQ_BALANCE            11
+#define SEQ_VOLMODE             12
+
+/*
+ * Volume mode decides how volumes are used
+ */
+
+#define VOL_METHOD_ADAGIO      1
+#define VOL_METHOD_LINEAR      2
+
+/*
+ * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
+ *      input events.
+ */
+
+/*
+ * Event codes 0xf0 to 0xfc are reserved for future extensions.
+ */
+
+#define SEQ_FULLSIZE           0xfd    /* Long events */
+/*
+ *     SEQ_FULLSIZE events are used for loading patches/samples to the
+ *     synthesizer devices. These events are passed directly to the driver
+ *     of the associated synthesizer device. There is no limit to the size
+ *     of the extended events. These events are not queued but executed
+ *     immediately when the write() is called (execution can take several
+ *     seconds of time). 
+ *
+ *     When a SEQ_FULLSIZE message is written to the device, it must
+ *     be written using exactly one write() call. Other events cannot
+ *     be mixed to the same write.
+ *     
+ *     For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the 
+ *     /dev/sequencer. Don't write other data together with the instrument structure
+ *     Set the key field of the structure to FM_PATCH. The device field is used to
+ *     route the patch to the corresponding device.
+ *
+ *     For wave table use struct patch_info. Initialize the key field
+ *      to WAVE_PATCH.
+ */
+#define SEQ_PRIVATE            0xfe    /* Low level HW dependent events (8 bytes) */
+#define SEQ_EXTENDED           0xff    /* Extended events (8 bytes) OBSOLETE */
+
+/*
+ * Record for FM patches
+ */
+
+typedef unsigned char sbi_instr_data[32];
+
+struct sbi_instrument {
+               unsigned short  key;    /* FM_PATCH or OPL3_PATCH */
+#define FM_PATCH       _PATCHKEY(0x01)
+#define OPL3_PATCH     _PATCHKEY(0x03)
+               short           device;         /*      Synth# (0-4)    */
+               int             channel;        /*      Program# to be initialized      */
+               sbi_instr_data  operators;      /*      Register settings for operator cells (.SBI format)      */
+       };
+
+struct synth_info {    /* Read only */
+               char    name[30];
+               int     device;         /* 0-N. INITIALIZE BEFORE CALLING */
+               int     synth_type;
+#define SYNTH_TYPE_FM                  0
+#define SYNTH_TYPE_SAMPLE              1
+#define SYNTH_TYPE_MIDI                        2       /* Midi interface */
+
+               int     synth_subtype;
+#define FM_TYPE_ADLIB                  0x00
+#define FM_TYPE_OPL3                   0x01
+#define MIDI_TYPE_MPU401               0x401
+
+#define SAMPLE_TYPE_BASIC              0x10
+#define SAMPLE_TYPE_GUS                        SAMPLE_TYPE_BASIC
+#define SAMPLE_TYPE_WAVEFRONT           0x11
+
+               int     perc_mode;      /* No longer supported */
+               int     nr_voices;
+               int     nr_drums;       /* Obsolete field */
+               int     instr_bank_size;
+               unsigned int    capabilities;   
+#define SYNTH_CAP_PERCMODE             0x00000001 /* No longer used */
+#define SYNTH_CAP_OPL3                 0x00000002 /* Set if OPL3 supported */
+#define SYNTH_CAP_INPUT                        0x00000004 /* Input (MIDI) device */
+               int     dummies[19];    /* Reserve space */
+       };
+
+struct sound_timer_info {
+               char name[32];
+               int caps;
+       };
+
+#define MIDI_CAP_MPU401                1               /* MPU-401 intelligent mode */
+
+struct midi_info {
+               char            name[30];
+               int             device;         /* 0-N. INITIALIZE BEFORE CALLING */
+               unsigned int    capabilities;   /* To be defined later */
+               int             dev_type;
+               int             dummies[18];    /* Reserve space */
+       };
+
+/********************************************
+ * ioctl commands for the /dev/midi##
+ */
+typedef struct {
+               unsigned char cmd;
+               char nr_args, nr_returns;
+               unsigned char data[30];
+       } mpu_command_rec;
+
+#define SNDCTL_MIDI_PRETIME            _SIOWR('m', 0, int)
+#define SNDCTL_MIDI_MPUMODE            _SIOWR('m', 1, int)
+#define SNDCTL_MIDI_MPUCMD             _SIOWR('m', 2, mpu_command_rec)
+
+/********************************************
+ * IOCTL commands for /dev/dsp and /dev/audio
+ */
+
+#define SNDCTL_DSP_RESET               _SIO  ('P', 0)
+#define SNDCTL_DSP_SYNC                        _SIO  ('P', 1)
+#define SNDCTL_DSP_SPEED               _SIOWR('P', 2, int)
+#define SNDCTL_DSP_STEREO              _SIOWR('P', 3, int)
+#define SNDCTL_DSP_GETBLKSIZE          _SIOWR('P', 4, int)
+#define SNDCTL_DSP_SAMPLESIZE          SNDCTL_DSP_SETFMT
+#define SNDCTL_DSP_CHANNELS            _SIOWR('P', 6, int)
+#define SOUND_PCM_WRITE_CHANNELS       SNDCTL_DSP_CHANNELS
+#define SOUND_PCM_WRITE_FILTER         _SIOWR('P', 7, int)
+#define SNDCTL_DSP_POST                        _SIO  ('P', 8)
+#define SNDCTL_DSP_SUBDIVIDE           _SIOWR('P', 9, int)
+#define SNDCTL_DSP_SETFRAGMENT         _SIOWR('P',10, int)
+
+/*     Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
+#define SNDCTL_DSP_GETFMTS             _SIOR ('P',11, int) /* Returns a mask */
+#define SNDCTL_DSP_SETFMT              _SIOWR('P',5, int) /* Selects ONE fmt*/
+#      define AFMT_QUERY               0x00000000      /* Return current fmt */
+#      define AFMT_MU_LAW              0x00000001
+#      define AFMT_A_LAW               0x00000002
+#      define AFMT_IMA_ADPCM           0x00000004
+#      define AFMT_U8                  0x00000008
+#      define AFMT_S16_LE              0x00000010      /* Little endian signed 16*/
+#      define AFMT_S16_BE              0x00000020      /* Big endian signed 16 */
+#      define AFMT_S8                  0x00000040
+#      define AFMT_U16_LE              0x00000080      /* Little endian U16 */
+#      define AFMT_U16_BE              0x00000100      /* Big endian U16 */
+#      define AFMT_MPEG                0x00000200      /* MPEG (2) audio */
+#      define AFMT_AC3         0x00000400      /* Dolby Digital AC3 */
+
+/*
+ * Buffer status queries.
+ */
+typedef struct audio_buf_info {
+                       int fragments;  /* # of available fragments (partially usend ones not counted) */
+                       int fragstotal; /* Total # of fragments allocated */
+                       int fragsize;   /* Size of a fragment in bytes */
+
+                       int bytes;      /* Available space in bytes (includes partially used fragments) */
+                       /* Note! 'bytes' could be more than fragments*fragsize */
+               } audio_buf_info;
+
+#define SNDCTL_DSP_GETOSPACE           _SIOR ('P',12, audio_buf_info)
+#define SNDCTL_DSP_GETISPACE           _SIOR ('P',13, audio_buf_info)
+#define SNDCTL_DSP_NONBLOCK            _SIO  ('P',14)
+#define SNDCTL_DSP_GETCAPS             _SIOR ('P',15, int)
+#      define DSP_CAP_REVISION         0x000000ff      /* Bits for revision level (0 to 255) */
+#      define DSP_CAP_DUPLEX           0x00000100      /* Full duplex record/playback */
+#      define DSP_CAP_REALTIME         0x00000200      /* Real time capability */
+#      define DSP_CAP_BATCH            0x00000400      /* Device has some kind of */
+                                                       /* internal buffers which may */
+                                                       /* cause some delays and */
+                                                       /* decrease precision of timing */
+#      define DSP_CAP_COPROC           0x00000800      /* Has a coprocessor */
+                                                       /* Sometimes it's a DSP */
+                                                       /* but usually not */
+#      define DSP_CAP_TRIGGER          0x00001000      /* Supports SETTRIGGER */
+#      define DSP_CAP_MMAP             0x00002000      /* Supports mmap() */
+#      define DSP_CAP_MULTI            0x00004000      /* support multiple open */
+#      define DSP_CAP_BIND             0x00008000      /* channel binding to front/rear/cneter/lfe */
+
+
+#define SNDCTL_DSP_GETTRIGGER          _SIOR ('P',16, int)
+#define SNDCTL_DSP_SETTRIGGER          _SIOW ('P',16, int)
+#      define PCM_ENABLE_INPUT         0x00000001
+#      define PCM_ENABLE_OUTPUT                0x00000002
+
+typedef struct count_info {
+               int bytes;      /* Total # of bytes processed */
+               int blocks;     /* # of fragment transitions since last time */
+               int ptr;        /* Current DMA pointer value */
+       } count_info;
+
+#define SNDCTL_DSP_GETIPTR             _SIOR ('P',17, count_info)
+#define SNDCTL_DSP_GETOPTR             _SIOR ('P',18, count_info)
+
+typedef struct buffmem_desc {
+               unsigned *buffer;
+               int size;
+       } buffmem_desc;
+#define SNDCTL_DSP_MAPINBUF            _SIOR ('P', 19, buffmem_desc)
+#define SNDCTL_DSP_MAPOUTBUF           _SIOR ('P', 20, buffmem_desc)
+#define SNDCTL_DSP_SETSYNCRO           _SIO  ('P', 21)
+#define SNDCTL_DSP_SETDUPLEX           _SIO  ('P', 22)
+#define SNDCTL_DSP_GETODELAY           _SIOR ('P', 23, int)
+
+#define SNDCTL_DSP_GETCHANNELMASK              _SIOWR('P', 64, int)
+#define SNDCTL_DSP_BIND_CHANNEL                _SIOWR('P', 65, int)
+#      define DSP_BIND_QUERY           0x00000000
+#      define DSP_BIND_FRONT           0x00000001
+#      define DSP_BIND_SURR            0x00000002
+#      define DSP_BIND_CENTER_LFE      0x00000004
+#      define DSP_BIND_HANDSET         0x00000008
+#      define DSP_BIND_MIC             0x00000010
+#      define DSP_BIND_MODEM1          0x00000020
+#      define DSP_BIND_MODEM2          0x00000040
+#      define DSP_BIND_I2S             0x00000080
+#      define DSP_BIND_SPDIF           0x00000100
+
+#define SNDCTL_DSP_SETSPDIF            _SIOW ('P', 66, int)
+#define SNDCTL_DSP_GETSPDIF            _SIOR ('P', 67, int)
+#      define SPDIF_PRO        0x0001
+#      define SPDIF_N_AUD      0x0002
+#      define SPDIF_COPY       0x0004
+#      define SPDIF_PRE        0x0008
+#      define SPDIF_CC         0x07f0
+#      define SPDIF_L          0x0800
+#      define SPDIF_DRS        0x4000
+#      define SPDIF_V          0x8000
+
+/*
+ * Application's profile defines the way how playback underrun situations should be handled.
+ * 
+ *     APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
+ *     playback buffer whenever an underrun occurs. This consumes some time
+ *     prevents looping the existing buffer.
+ *     APF_CPUINTENS is intended to be set by CPU intensive applications which
+ *     are likely to run out of time occasionally. In this mode the buffer cleanup is
+ *     disabled which saves CPU time but also let's the previous buffer content to
+ *     be played during the "pause" after the underrun.
+ */
+#define SNDCTL_DSP_PROFILE             _SIOW ('P', 23, int)
+#define          APF_NORMAL    0       /* Normal applications */
+#define          APF_NETWORK   1       /* Underruns probably caused by an "external" delay */
+#define   APF_CPUINTENS 2      /* Underruns probably caused by "overheating" the CPU */
+
+#define SOUND_PCM_READ_RATE            _SIOR ('P', 2, int)
+#define SOUND_PCM_READ_CHANNELS                _SIOR ('P', 6, int)
+#define SOUND_PCM_READ_BITS            _SIOR ('P', 5, int)
+#define SOUND_PCM_READ_FILTER          _SIOR ('P', 7, int)
+
+/* Some alias names */
+#define SOUND_PCM_WRITE_BITS           SNDCTL_DSP_SETFMT
+#define SOUND_PCM_WRITE_RATE           SNDCTL_DSP_SPEED
+#define SOUND_PCM_POST                 SNDCTL_DSP_POST
+#define SOUND_PCM_RESET                        SNDCTL_DSP_RESET
+#define SOUND_PCM_SYNC                 SNDCTL_DSP_SYNC
+#define SOUND_PCM_SUBDIVIDE            SNDCTL_DSP_SUBDIVIDE
+#define SOUND_PCM_SETFRAGMENT          SNDCTL_DSP_SETFRAGMENT
+#define SOUND_PCM_GETFMTS              SNDCTL_DSP_GETFMTS
+#define SOUND_PCM_SETFMT               SNDCTL_DSP_SETFMT
+#define SOUND_PCM_GETOSPACE            SNDCTL_DSP_GETOSPACE
+#define SOUND_PCM_GETISPACE            SNDCTL_DSP_GETISPACE
+#define SOUND_PCM_NONBLOCK             SNDCTL_DSP_NONBLOCK
+#define SOUND_PCM_GETCAPS              SNDCTL_DSP_GETCAPS
+#define SOUND_PCM_GETTRIGGER           SNDCTL_DSP_GETTRIGGER
+#define SOUND_PCM_SETTRIGGER           SNDCTL_DSP_SETTRIGGER
+#define SOUND_PCM_SETSYNCRO            SNDCTL_DSP_SETSYNCRO
+#define SOUND_PCM_GETIPTR              SNDCTL_DSP_GETIPTR
+#define SOUND_PCM_GETOPTR              SNDCTL_DSP_GETOPTR
+#define SOUND_PCM_MAPINBUF             SNDCTL_DSP_MAPINBUF
+#define SOUND_PCM_MAPOUTBUF            SNDCTL_DSP_MAPOUTBUF
+
+/*
+ * ioctl calls to be used in communication with coprocessors and
+ * DSP chips.
+ */
+
+typedef struct copr_buffer {
+               int command;    /* Set to 0 if not used */
+               int flags;
+#define CPF_NONE               0x0000
+#define CPF_FIRST              0x0001  /* First block */
+#define CPF_LAST               0x0002  /* Last block */
+               int len;
+               int offs;       /* If required by the device (0 if not used) */
+
+               unsigned char data[4000]; /* NOTE! 4000 is not 4k */
+       } copr_buffer;
+
+typedef struct copr_debug_buf {
+               int command;    /* Used internally. Set to 0 */
+               int parm1;
+               int parm2;
+               int flags;      
+               int len;        /* Length of data in bytes */
+       } copr_debug_buf;
+
+typedef struct copr_msg {
+               int len;
+               unsigned char data[4000];
+       } copr_msg;
+
+#define SNDCTL_COPR_RESET             _SIO  ('C',  0)
+#define SNDCTL_COPR_LOAD             _SIOWR('C',  1, copr_buffer)
+#define SNDCTL_COPR_RDATA            _SIOWR('C',  2, copr_debug_buf)
+#define SNDCTL_COPR_RCODE            _SIOWR('C',  3, copr_debug_buf)
+#define SNDCTL_COPR_WDATA            _SIOW ('C',  4, copr_debug_buf)
+#define SNDCTL_COPR_WCODE            _SIOW ('C',  5, copr_debug_buf)
+#define SNDCTL_COPR_RUN                      _SIOWR('C',  6, copr_debug_buf)
+#define SNDCTL_COPR_HALT             _SIOWR('C',  7, copr_debug_buf)
+#define SNDCTL_COPR_SENDMSG          _SIOWR('C',  8, copr_msg)
+#define SNDCTL_COPR_RCVMSG           _SIOR ('C',  9, copr_msg)
+
+/*********************************************
+ * IOCTL commands for /dev/mixer
+ */
+       
+/* 
+ * Mixer devices
+ *
+ * There can be up to 20 different analog mixer channels. The
+ * SOUND_MIXER_NRDEVICES gives the currently supported maximum. 
+ * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
+ * the devices supported by the particular mixer.
+ */
+
+#define SOUND_MIXER_NRDEVICES  25
+#define SOUND_MIXER_VOLUME     0
+#define SOUND_MIXER_BASS       1
+#define SOUND_MIXER_TREBLE     2
+#define SOUND_MIXER_SYNTH      3
+#define SOUND_MIXER_PCM                4
+#define SOUND_MIXER_SPEAKER    5
+#define SOUND_MIXER_LINE       6
+#define SOUND_MIXER_MIC                7
+#define SOUND_MIXER_CD         8
+#define SOUND_MIXER_IMIX       9       /*  Recording monitor  */
+#define SOUND_MIXER_ALTPCM     10
+#define SOUND_MIXER_RECLEV     11      /* Recording level */
+#define SOUND_MIXER_IGAIN      12      /* Input gain */
+#define SOUND_MIXER_OGAIN      13      /* Output gain */
+/* 
+ * The AD1848 codec and compatibles have three line level inputs
+ * (line, aux1 and aux2). Since each card manufacturer have assigned
+ * different meanings to these inputs, it's inpractical to assign
+ * specific meanings (line, cd, synth etc.) to them.
+ */
+#define SOUND_MIXER_LINE1      14      /* Input source 1  (aux1) */
+#define SOUND_MIXER_LINE2      15      /* Input source 2  (aux2) */
+#define SOUND_MIXER_LINE3      16      /* Input source 3  (line) */
+#define SOUND_MIXER_DIGITAL1   17      /* Digital (input) 1 */
+#define SOUND_MIXER_DIGITAL2   18      /* Digital (input) 2 */
+#define SOUND_MIXER_DIGITAL3   19      /* Digital (input) 3 */
+#define SOUND_MIXER_PHONEIN    20      /* Phone input */
+#define SOUND_MIXER_PHONEOUT   21      /* Phone output */
+#define SOUND_MIXER_VIDEO      22      /* Video/TV (audio) in */
+#define SOUND_MIXER_RADIO      23      /* Radio in */
+#define SOUND_MIXER_MONITOR    24      /* Monitor (usually mic) volume */
+
+/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
+/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
+#define SOUND_ONOFF_MIN                28
+#define SOUND_ONOFF_MAX                30
+
+/* Note!       Number 31 cannot be used since the sign bit is reserved */
+#define SOUND_MIXER_NONE       31
+
+/*
+ * The following unsupported macros are no longer functional.
+ * Use SOUND_MIXER_PRIVATE# macros in future.
+ */
+#define SOUND_MIXER_ENHANCE    SOUND_MIXER_NONE
+#define SOUND_MIXER_MUTE       SOUND_MIXER_NONE
+#define SOUND_MIXER_LOUD       SOUND_MIXER_NONE
+
+
+#define SOUND_DEVICE_LABELS    {"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \
+                                "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "Rec  ", "IGain", "OGain", \
+                                "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
+                                "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
+
+#define SOUND_DEVICE_NAMES     {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
+                                "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
+                                "line1", "line2", "line3", "dig1", "dig2", "dig3", \
+                                "phin", "phout", "video", "radio", "monitor"}
+
+/*     Device bitmask identifiers      */
+
+#define SOUND_MIXER_RECSRC     0xff    /* Arg contains a bit for each recording source */
+#define SOUND_MIXER_DEVMASK    0xfe    /* Arg contains a bit for each supported device */
+#define SOUND_MIXER_RECMASK    0xfd    /* Arg contains a bit for each supported recording source */
+#define SOUND_MIXER_CAPS       0xfc
+#      define SOUND_CAP_EXCL_INPUT     0x00000001      /* Only one recording source at a time */
+#define SOUND_MIXER_STEREODEVS 0xfb    /* Mixer channels supporting stereo */
+#define SOUND_MIXER_OUTSRC     0xfa    /* Arg contains a bit for each input source to output */
+#define SOUND_MIXER_OUTMASK    0xf9    /* Arg contains a bit for each supported input source to output */
+
+/*     Device mask bits        */
+
+#define SOUND_MASK_VOLUME      (1 << SOUND_MIXER_VOLUME)
+#define SOUND_MASK_BASS                (1 << SOUND_MIXER_BASS)
+#define SOUND_MASK_TREBLE      (1 << SOUND_MIXER_TREBLE)
+#define SOUND_MASK_SYNTH       (1 << SOUND_MIXER_SYNTH)
+#define SOUND_MASK_PCM         (1 << SOUND_MIXER_PCM)
+#define SOUND_MASK_SPEAKER     (1 << SOUND_MIXER_SPEAKER)
+#define SOUND_MASK_LINE                (1 << SOUND_MIXER_LINE)
+#define SOUND_MASK_MIC         (1 << SOUND_MIXER_MIC)
+#define SOUND_MASK_CD          (1 << SOUND_MIXER_CD)
+#define SOUND_MASK_IMIX                (1 << SOUND_MIXER_IMIX)
+#define SOUND_MASK_ALTPCM      (1 << SOUND_MIXER_ALTPCM)
+#define SOUND_MASK_RECLEV      (1 << SOUND_MIXER_RECLEV)
+#define SOUND_MASK_IGAIN       (1 << SOUND_MIXER_IGAIN)
+#define SOUND_MASK_OGAIN       (1 << SOUND_MIXER_OGAIN)
+#define SOUND_MASK_LINE1       (1 << SOUND_MIXER_LINE1)
+#define SOUND_MASK_LINE2       (1 << SOUND_MIXER_LINE2)
+#define SOUND_MASK_LINE3       (1 << SOUND_MIXER_LINE3)
+#define SOUND_MASK_DIGITAL1    (1 << SOUND_MIXER_DIGITAL1)
+#define SOUND_MASK_DIGITAL2    (1 << SOUND_MIXER_DIGITAL2)
+#define SOUND_MASK_DIGITAL3    (1 << SOUND_MIXER_DIGITAL3)
+#define SOUND_MASK_PHONEIN     (1 << SOUND_MIXER_PHONEIN)
+#define SOUND_MASK_PHONEOUT    (1 << SOUND_MIXER_PHONEOUT)
+#define SOUND_MASK_RADIO       (1 << SOUND_MIXER_RADIO)
+#define SOUND_MASK_VIDEO       (1 << SOUND_MIXER_VIDEO)
+#define SOUND_MASK_MONITOR     (1 << SOUND_MIXER_MONITOR)
+
+/* Obsolete macros */
+#define SOUND_MASK_MUTE                (1 << SOUND_MIXER_MUTE)
+#define SOUND_MASK_ENHANCE     (1 << SOUND_MIXER_ENHANCE)
+#define SOUND_MASK_LOUD                (1 << SOUND_MIXER_LOUD)
+
+#define MIXER_READ(dev)                _SIOR('M', dev, int)
+#define SOUND_MIXER_READ_VOLUME                MIXER_READ(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_READ_BASS          MIXER_READ(SOUND_MIXER_BASS)
+#define SOUND_MIXER_READ_TREBLE                MIXER_READ(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_READ_SYNTH         MIXER_READ(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_READ_PCM           MIXER_READ(SOUND_MIXER_PCM)
+#define SOUND_MIXER_READ_SPEAKER       MIXER_READ(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_READ_LINE          MIXER_READ(SOUND_MIXER_LINE)
+#define SOUND_MIXER_READ_MIC           MIXER_READ(SOUND_MIXER_MIC)
+#define SOUND_MIXER_READ_CD            MIXER_READ(SOUND_MIXER_CD)
+#define SOUND_MIXER_READ_IMIX          MIXER_READ(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_READ_ALTPCM                MIXER_READ(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_READ_RECLEV                MIXER_READ(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_READ_IGAIN         MIXER_READ(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_READ_OGAIN         MIXER_READ(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_READ_LINE1         MIXER_READ(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_READ_LINE2         MIXER_READ(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_READ_LINE3         MIXER_READ(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_READ_MUTE          MIXER_READ(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_READ_ENHANCE       MIXER_READ(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_READ_LOUD          MIXER_READ(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_READ_RECSRC                MIXER_READ(SOUND_MIXER_RECSRC)
+#define SOUND_MIXER_READ_DEVMASK       MIXER_READ(SOUND_MIXER_DEVMASK)
+#define SOUND_MIXER_READ_RECMASK       MIXER_READ(SOUND_MIXER_RECMASK)
+#define SOUND_MIXER_READ_STEREODEVS    MIXER_READ(SOUND_MIXER_STEREODEVS)
+#define SOUND_MIXER_READ_CAPS          MIXER_READ(SOUND_MIXER_CAPS)
+
+#define MIXER_WRITE(dev)               _SIOWR('M', dev, int)
+#define SOUND_MIXER_WRITE_VOLUME       MIXER_WRITE(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_WRITE_BASS         MIXER_WRITE(SOUND_MIXER_BASS)
+#define SOUND_MIXER_WRITE_TREBLE       MIXER_WRITE(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_WRITE_SYNTH                MIXER_WRITE(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_WRITE_PCM          MIXER_WRITE(SOUND_MIXER_PCM)
+#define SOUND_MIXER_WRITE_SPEAKER      MIXER_WRITE(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_WRITE_LINE         MIXER_WRITE(SOUND_MIXER_LINE)
+#define SOUND_MIXER_WRITE_MIC          MIXER_WRITE(SOUND_MIXER_MIC)
+#define SOUND_MIXER_WRITE_CD           MIXER_WRITE(SOUND_MIXER_CD)
+#define SOUND_MIXER_WRITE_IMIX         MIXER_WRITE(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_WRITE_ALTPCM       MIXER_WRITE(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_WRITE_RECLEV       MIXER_WRITE(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_WRITE_IGAIN                MIXER_WRITE(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_WRITE_OGAIN                MIXER_WRITE(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_WRITE_LINE1                MIXER_WRITE(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_WRITE_LINE2                MIXER_WRITE(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_WRITE_LINE3                MIXER_WRITE(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_WRITE_MUTE         MIXER_WRITE(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_WRITE_ENHANCE      MIXER_WRITE(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_WRITE_LOUD         MIXER_WRITE(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_WRITE_RECSRC       MIXER_WRITE(SOUND_MIXER_RECSRC)
+
+typedef struct mixer_info
+{
+  char id[16];
+  char name[32];
+  int  modify_counter;
+  int fillers[10];
+} mixer_info;
+
+typedef struct _old_mixer_info /* Obsolete */
+{
+  char id[16];
+  char name[32];
+} _old_mixer_info;
+
+#define SOUND_MIXER_INFO               _SIOR ('M', 101, mixer_info)
+#define SOUND_OLD_MIXER_INFO           _SIOR ('M', 101, _old_mixer_info)
+
+/*
+ * A mechanism for accessing "proprietary" mixer features. This method
+ * permits passing 128 bytes of arbitrary data between a mixer application
+ * and the mixer driver. Interpretation of the record is defined by
+ * the particular mixer driver.
+ */
+typedef unsigned char mixer_record[128];
+
+#define SOUND_MIXER_ACCESS             _SIOWR('M', 102, mixer_record)
+
+/*
+ * Two ioctls for special souncard function
+ */
+#define SOUND_MIXER_AGC  _SIOWR('M', 103, int)
+#define SOUND_MIXER_3DSE  _SIOWR('M', 104, int)
+
+/*
+ * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
+ * These features can be used when accessing device specific features.
+ */
+#define SOUND_MIXER_PRIVATE1           _SIOWR('M', 111, int)
+#define SOUND_MIXER_PRIVATE2           _SIOWR('M', 112, int)
+#define SOUND_MIXER_PRIVATE3           _SIOWR('M', 113, int)
+#define SOUND_MIXER_PRIVATE4           _SIOWR('M', 114, int)
+#define SOUND_MIXER_PRIVATE5           _SIOWR('M', 115, int)
+
+/*
+ * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
+ * for querying current mixer settings from the driver and for loading
+ * default volume settings _prior_ activating the mixer (loading
+ * doesn't affect current state of the mixer hardware). These calls
+ * are for internal use only.
+ */
+
+typedef struct mixer_vol_table {
+  int num;     /* Index to volume table */
+  char name[32];
+  int levels[32];
+} mixer_vol_table;
+
+#define SOUND_MIXER_GETLEVELS          _SIOWR('M', 116, mixer_vol_table)
+#define SOUND_MIXER_SETLEVELS          _SIOWR('M', 117, mixer_vol_table)
+
+/* 
+ * An ioctl for identifying the driver version. It will return value
+ * of the SOUND_VERSION macro used when compiling the driver.
+ * This call was introduced in OSS version 3.6 and it will not work
+ * with earlier versions (returns EINVAL).
+ */
+#define OSS_GETVERSION                 _SIOR ('M', 118, int)
+
+/*
+ * Level 2 event types for /dev/sequencer
+ */
+
+/*
+ * The 4 most significant bits of byte 0 specify the class of
+ * the event: 
+ *
+ *     0x8X = system level events,
+ *     0x9X = device/port specific events, event[1] = device/port,
+ *             The last 4 bits give the subtype:
+ *                     0x02    = Channel event (event[3] = chn).
+ *                     0x01    = note event (event[4] = note).
+ *                     (0x01 is not used alone but always with bit 0x02).
+ *            event[2] = MIDI message code (0x80=note off etc.)
+ *
+ */
+
+#define EV_SEQ_LOCAL           0x80
+#define EV_TIMING              0x81
+#define EV_CHN_COMMON          0x92
+#define EV_CHN_VOICE           0x93
+#define EV_SYSEX               0x94
+/*
+ * Event types 200 to 220 are reserved for application use.
+ * These numbers will not be used by the driver.
+ */
+
+/*
+ * Events for event type EV_CHN_VOICE
+ */
+
+#define MIDI_NOTEOFF           0x80
+#define MIDI_NOTEON            0x90
+#define MIDI_KEY_PRESSURE      0xA0
+
+/*
+ * Events for event type EV_CHN_COMMON
+ */
+
+#define MIDI_CTL_CHANGE                0xB0
+#define MIDI_PGM_CHANGE                0xC0
+#define MIDI_CHN_PRESSURE      0xD0
+#define MIDI_PITCH_BEND                0xE0
+
+#define MIDI_SYSTEM_PREFIX     0xF0
+
+/*
+ * Timer event types
+ */
+#define TMR_WAIT_REL           1       /* Time relative to the prev time */
+#define TMR_WAIT_ABS           2       /* Absolute time since TMR_START */
+#define TMR_STOP               3
+#define TMR_START              4
+#define TMR_CONTINUE           5
+#define TMR_TEMPO              6
+#define TMR_ECHO               8
+#define TMR_CLOCK              9       /* MIDI clock */
+#define TMR_SPP                        10      /* Song position pointer */
+#define TMR_TIMESIG            11      /* Time signature */
+
+/*
+ *     Local event types
+ */
+#define LOCL_STARTAUDIO                1
+
+/*
+ *     Some convenience macros to simplify programming of the
+ *     /dev/sequencer interface
+ *
+ *     This is a legacy interface for applications written against
+ *     the OSSlib-3.8 style interface. It is no longer possible
+ *     to actually link against OSSlib with this header, but we
+ *     still provide these macros for programs using them.
+ *
+ *     If you want to use OSSlib, it is recommended that you get
+ *     the GPL version of OSS-4.x and build against that version
+ *     of the header.
+ *
+ *     We redefine the extern keyword so that make headers_check
+ *     does not complain about SEQ_USE_EXTBUF.
+ */
+#define SEQ_DECLAREBUF()               SEQ_USE_EXTBUF()
+
+void seqbuf_dump(void);        /* This function must be provided by programs */
+
+#define SEQ_PM_DEFINES int __foo_bar___
+
+#define SEQ_LOAD_GMINSTR(dev, instr)
+#define SEQ_LOAD_GMDRUM(dev, drum)
+
+#define _SEQ_EXTERN extern
+#define SEQ_USE_EXTBUF() \
+               _SEQ_EXTERN unsigned char _seqbuf[]; \
+               _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr
+
+#ifndef USE_SIMPLE_MACROS
+/* Sample seqbuf_dump() implementation:
+ *
+ *     SEQ_DEFINEBUF (2048);   -- Defines a buffer for 2048 bytes
+ *
+ *     int seqfd;              -- The file descriptor for /dev/sequencer.
+ *
+ *     void
+ *     seqbuf_dump ()
+ *     {
+ *       if (_seqbufptr)
+ *         if (write (seqfd, _seqbuf, _seqbufptr) == -1)
+ *           {
+ *             perror ("write /dev/sequencer");
+ *             exit (-1);
+ *           }
+ *       _seqbufptr = 0;
+ *     }
+ */
+
+#define SEQ_DEFINEBUF(len)             unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
+#define _SEQ_NEEDBUF(len)              if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
+#define _SEQ_ADVBUF(len)               _seqbufptr += len
+#define SEQ_DUMPBUF                    seqbuf_dump
+#else
+/*
+ * This variation of the sequencer macros is used just to format one event
+ * using fixed buffer.
+ * 
+ * The program using the macro library must define the following macros before
+ * using this library.
+ *
+ * #define _seqbuf              name of the buffer (unsigned char[]) 
+ * #define _SEQ_ADVBUF(len)     If the applic needs to know the exact
+ *                              size of the event, this macro can be used.
+ *                              Otherwise this must be defined as empty.
+ * #define _seqbufptr           Define the name of index variable or 0 if
+ *                              not required. 
+ */
+#define _SEQ_NEEDBUF(len)      /* empty */
+#endif
+
+#define SEQ_VOLUME_MODE(dev, mode)     {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                                       _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
+                                       _seqbuf[_seqbufptr+2] = (dev);\
+                                       _seqbuf[_seqbufptr+3] = (mode);\
+                                       _seqbuf[_seqbufptr+4] = 0;\
+                                       _seqbuf[_seqbufptr+5] = 0;\
+                                       _seqbuf[_seqbufptr+6] = 0;\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+
+/*
+ * Midi voice messages
+ */
+
+#define _CHN_VOICE(dev, event, chn, note, parm) \
+                                       {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       _seqbuf[_seqbufptr+2] = (event);\
+                                       _seqbuf[_seqbufptr+3] = (chn);\
+                                       _seqbuf[_seqbufptr+4] = (note);\
+                                       _seqbuf[_seqbufptr+5] = (parm);\
+                                       _seqbuf[_seqbufptr+6] = (0);\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_START_NOTE(dev, chn, note, vol) \
+               _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
+
+#define SEQ_STOP_NOTE(dev, chn, note, vol) \
+               _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
+
+#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
+               _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
+
+/*
+ * Midi channel messages
+ */
+
+#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
+                                       {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       _seqbuf[_seqbufptr+2] = (event);\
+                                       _seqbuf[_seqbufptr+3] = (chn);\
+                                       _seqbuf[_seqbufptr+4] = (p1);\
+                                       _seqbuf[_seqbufptr+5] = (p2);\
+                                       *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
+                                       _SEQ_ADVBUF(8);}
+/*
+ * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
+ * sending any MIDI bytes but it's absolutely not possible. Trying to do
+ * so _will_ cause problems with MPU401 intelligent mode).
+ *
+ * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be 
+ * sent by calling SEQ_SYSEX() several times (there must be no other events
+ * between them). First sysex fragment must have 0xf0 in the first byte
+ * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
+ * between these sysex start and end markers cannot be larger than 0x7f. Also
+ * lengths of each fragments (except the last one) must be 6.
+ *
+ * Breaking the above rules may work with some MIDI ports but is likely to
+ * cause fatal problems with some other devices (such as MPU401).
+ */
+#define SEQ_SYSEX(dev, buf, len) \
+                                       {int ii, ll=(len); \
+                                        unsigned char *bufp=buf;\
+                                        if (ll>6)ll=6;\
+                                       _SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_SYSEX;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       for(ii=0;ii<ll;ii++)\
+                                          _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
+                                       for(ii=ll;ii<6;ii++)\
+                                          _seqbuf[_seqbufptr+ii+2] = 0xff;\
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
+               _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
+
+#define SEQ_SET_PATCH SEQ_PGM_CHANGE
+#define SEQ_PGM_CHANGE(dev, chn, patch) \
+               _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
+
+#define SEQ_CONTROL(dev, chn, controller, value) \
+               _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
+
+#define SEQ_BENDER(dev, chn, value) \
+               _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
+
+
+#define SEQ_V2_X_CONTROL(dev, voice, controller, value)        {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                                       _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
+                                       _seqbuf[_seqbufptr+2] = (dev);\
+                                       _seqbuf[_seqbufptr+3] = (voice);\
+                                       _seqbuf[_seqbufptr+4] = (controller);\
+                                       _seqbuf[_seqbufptr+5] = ((value)&0xff);\
+                                       _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+/*
+ * The following 5 macros are incorrectly implemented and obsolete.
+ * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
+ */
+#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
+#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
+#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
+#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
+#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
+
+/*
+ * Timing and synchronization macros
+ */
+
+#define _TIMER_EVENT(ev, parm)         {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr+0] = EV_TIMING; \
+                                       _seqbuf[_seqbufptr+1] = (ev); \
+                                       _seqbuf[_seqbufptr+2] = 0;\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_START_TIMER()              _TIMER_EVENT(TMR_START, 0)
+#define SEQ_STOP_TIMER()               _TIMER_EVENT(TMR_STOP, 0)
+#define SEQ_CONTINUE_TIMER()           _TIMER_EVENT(TMR_CONTINUE, 0)
+#define SEQ_WAIT_TIME(ticks)           _TIMER_EVENT(TMR_WAIT_ABS, ticks)
+#define SEQ_DELTA_TIME(ticks)          _TIMER_EVENT(TMR_WAIT_REL, ticks)
+#define SEQ_ECHO_BACK(key)             _TIMER_EVENT(TMR_ECHO, key)
+#define SEQ_SET_TEMPO(value)           _TIMER_EVENT(TMR_TEMPO, value)
+#define SEQ_SONGPOS(pos)               _TIMER_EVENT(TMR_SPP, pos)
+#define SEQ_TIME_SIGNATURE(sig)                _TIMER_EVENT(TMR_TIMESIG, sig)
+
+/*
+ * Local control events
+ */
+
+#define _LOCAL_EVENT(ev, parm)         {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
+                                       _seqbuf[_seqbufptr+1] = (ev); \
+                                       _seqbuf[_seqbufptr+2] = 0;\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_PLAYAUDIO(devmask)         _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
+/*
+ * Events for the level 1 interface only 
+ */
+
+#define SEQ_MIDIOUT(device, byte)      {_SEQ_NEEDBUF(4);\
+                                       _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
+                                       _seqbuf[_seqbufptr+1] = (byte);\
+                                       _seqbuf[_seqbufptr+2] = (device);\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       _SEQ_ADVBUF(4);}
+
+/*
+ * Patch loading.
+ */
+#define SEQ_WRPATCH(patchx, len) \
+               {if (_seqbufptr) SEQ_DUMPBUF();\
+                if (write(seqfd, (char*)(patchx), len)==-1) \
+                   perror("Write patch: /dev/sequencer");}
+#define SEQ_WRPATCH2(patchx, len) \
+               (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
+
+#endif /* SOUNDCARD_H */
diff --git a/lib/libdss-include/include/linux/spi/spidev.h b/lib/libdss-include/include/linux/spi/spidev.h
new file mode 100644 (file)
index 0000000..dd5f21e
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * include/linux/spi/spidev.h
+ *
+ * Copyright (C) 2006 SWAPP
+ *     Andrea Paterniani <a.paterniani@swapp-eng.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+  */
+
+#ifndef SPIDEV_H
+#define SPIDEV_H
+
+#include <linux/types.h>
+
+/* User space versions of kernel symbols for SPI clocking modes,
+ * matching <linux/spi/spi.h>
+ */
+
+#define SPI_CPHA               0x01
+#define SPI_CPOL               0x02
+
+#define SPI_MODE_0             (0|0)
+#define SPI_MODE_1             (0|SPI_CPHA)
+#define SPI_MODE_2             (SPI_CPOL|0)
+#define SPI_MODE_3             (SPI_CPOL|SPI_CPHA)
+
+#define SPI_CS_HIGH            0x04
+#define SPI_LSB_FIRST          0x08
+#define SPI_3WIRE              0x10
+#define SPI_LOOP               0x20
+#define SPI_NO_CS              0x40
+#define SPI_READY              0x80
+#define SPI_TX_DUAL            0x100
+#define SPI_TX_QUAD            0x200
+#define SPI_RX_DUAL            0x400
+#define SPI_RX_QUAD            0x800
+
+/*---------------------------------------------------------------------------*/
+
+/* IOCTL commands */
+
+#define SPI_IOC_MAGIC                  'k'
+
+/**
+ * struct spi_ioc_transfer - describes a single SPI transfer
+ * @tx_buf: Holds pointer to userspace buffer with transmit data, or null.
+ *     If no data is provided, zeroes are shifted out.
+ * @rx_buf: Holds pointer to userspace buffer for receive data, or null.
+ * @len: Length of tx and rx buffers, in bytes.
+ * @speed_hz: Temporary override of the device's bitrate.
+ * @bits_per_word: Temporary override of the device's wordsize.
+ * @delay_usecs: If nonzero, how long to delay after the last bit transfer
+ *     before optionally deselecting the device before the next transfer.
+ * @cs_change: True to deselect device before starting the next transfer.
+ *
+ * This structure is mapped directly to the kernel spi_transfer structure;
+ * the fields have the same meanings, except of course that the pointers
+ * are in a different address space (and may be of different sizes in some
+ * cases, such as 32-bit i386 userspace over a 64-bit x86_64 kernel).
+ * Zero-initialize the structure, including currently unused fields, to
+ * accommodate potential future updates.
+ *
+ * SPI_IOC_MESSAGE gives userspace the equivalent of kernel spi_sync().
+ * Pass it an array of related transfers, they'll execute together.
+ * Each transfer may be half duplex (either direction) or full duplex.
+ *
+ *     struct spi_ioc_transfer mesg[4];
+ *     ...
+ *     status = ioctl(fd, SPI_IOC_MESSAGE(4), mesg);
+ *
+ * So for example one transfer might send a nine bit command (right aligned
+ * in a 16-bit word), the next could read a block of 8-bit data before
+ * terminating that command by temporarily deselecting the chip; the next
+ * could send a different nine bit command (re-selecting the chip), and the
+ * last transfer might write some register values.
+ */
+struct spi_ioc_transfer {
+       __u64           tx_buf;
+       __u64           rx_buf;
+
+       __u32           len;
+       __u32           speed_hz;
+
+       __u16           delay_usecs;
+       __u8            bits_per_word;
+       __u8            cs_change;
+       __u8            tx_nbits;
+       __u8            rx_nbits;
+       __u16           pad;
+
+       /* If the contents of 'struct spi_ioc_transfer' ever change
+        * incompatibly, then the ioctl number (currently 0) must change;
+        * ioctls with constant size fields get a bit more in the way of
+        * error checking than ones (like this) where that field varies.
+        *
+        * NOTE: struct layout is the same in 64bit and 32bit userspace.
+        */
+};
+
+/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
+#define SPI_MSGSIZE(N) \
+       ((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
+               ? ((N)*(sizeof (struct spi_ioc_transfer))) : 0)
+#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])
+
+
+/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) (limited to 8 bits) */
+#define SPI_IOC_RD_MODE                        _IOR(SPI_IOC_MAGIC, 1, __u8)
+#define SPI_IOC_WR_MODE                        _IOW(SPI_IOC_MAGIC, 1, __u8)
+
+/* Read / Write SPI bit justification */
+#define SPI_IOC_RD_LSB_FIRST           _IOR(SPI_IOC_MAGIC, 2, __u8)
+#define SPI_IOC_WR_LSB_FIRST           _IOW(SPI_IOC_MAGIC, 2, __u8)
+
+/* Read / Write SPI device word length (1..N) */
+#define SPI_IOC_RD_BITS_PER_WORD       _IOR(SPI_IOC_MAGIC, 3, __u8)
+#define SPI_IOC_WR_BITS_PER_WORD       _IOW(SPI_IOC_MAGIC, 3, __u8)
+
+/* Read / Write SPI device default max speed hz */
+#define SPI_IOC_RD_MAX_SPEED_HZ                _IOR(SPI_IOC_MAGIC, 4, __u32)
+#define SPI_IOC_WR_MAX_SPEED_HZ                _IOW(SPI_IOC_MAGIC, 4, __u32)
+
+/* Read / Write of the SPI mode field */
+#define SPI_IOC_RD_MODE32              _IOR(SPI_IOC_MAGIC, 5, __u32)
+#define SPI_IOC_WR_MODE32              _IOW(SPI_IOC_MAGIC, 5, __u32)
+
+
+
+#endif /* SPIDEV_H */
diff --git a/lib/libdss-include/include/linux/stat.h b/lib/libdss-include/include/linux/stat.h
new file mode 100644 (file)
index 0000000..b014ce4
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_STAT_H
+#define _LINUX_STAT_H
+
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
+#define S_IFMT  00170000
+#define S_IFSOCK 0140000
+#define S_IFLNK         0120000
+#define S_IFREG  0100000
+#define S_IFBLK  0060000
+#define S_IFDIR  0040000
+#define S_IFCHR  0020000
+#define S_IFIFO  0010000
+#define S_ISUID  0004000
+#define S_ISGID  0002000
+#define S_ISVTX  0001000
+
+#define S_ISLNK(m)     (((m) & S_IFMT) == S_IFLNK)
+#define S_ISREG(m)     (((m) & S_IFMT) == S_IFREG)
+#define S_ISDIR(m)     (((m) & S_IFMT) == S_IFDIR)
+#define S_ISCHR(m)     (((m) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(m)     (((m) & S_IFMT) == S_IFBLK)
+#define S_ISFIFO(m)    (((m) & S_IFMT) == S_IFIFO)
+#define S_ISSOCK(m)    (((m) & S_IFMT) == S_IFSOCK)
+
+#define S_IRWXU 00700
+#define S_IRUSR 00400
+#define S_IWUSR 00200
+#define S_IXUSR 00100
+
+#define S_IRWXG 00070
+#define S_IRGRP 00040
+#define S_IWGRP 00020
+#define S_IXGRP 00010
+
+#define S_IRWXO 00007
+#define S_IROTH 00004
+#define S_IWOTH 00002
+#define S_IXOTH 00001
+
+#endif
+
+
+#endif /* _LINUX_STAT_H */
diff --git a/lib/libdss-include/include/linux/stddef.h b/lib/libdss-include/include/linux/stddef.h
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/lib/libdss-include/include/linux/string.h b/lib/libdss-include/include/linux/string.h
new file mode 100644 (file)
index 0000000..d7ed844
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef _LINUX_STRING_H_
+#define _LINUX_STRING_H_
+
+/* We don't want strings.h stuff being used by user stuff by accident */
+
+#include <string.h>
+#endif /* _LINUX_STRING_H_ */
diff --git a/lib/libdss-include/include/linux/sunrpc/debug.h b/lib/libdss-include/include/linux/sunrpc/debug.h
new file mode 100644 (file)
index 0000000..4ead318
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * linux/include/linux/sunrpc/debug.h
+ *
+ * Debugging support for sunrpc module
+ *
+ * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef _LINUX_SUNRPC_DEBUG_H_
+#define _LINUX_SUNRPC_DEBUG_H_
+
+/*
+ * RPC debug facilities
+ */
+#define RPCDBG_XPRT            0x0001
+#define RPCDBG_CALL            0x0002
+#define RPCDBG_DEBUG           0x0004
+#define RPCDBG_NFS             0x0008
+#define RPCDBG_AUTH            0x0010
+#define RPCDBG_BIND            0x0020
+#define RPCDBG_SCHED           0x0040
+#define RPCDBG_TRANS           0x0080
+#define RPCDBG_SVCXPRT         0x0100
+#define RPCDBG_SVCDSP          0x0200
+#define RPCDBG_MISC            0x0400
+#define RPCDBG_CACHE           0x0800
+#define RPCDBG_ALL             0x7fff
+
+
+/*
+ * Declarations for the sysctl debug interface, which allows to read or
+ * change the debug flags for rpc, nfs, nfsd, and lockd. Since the sunrpc
+ * module currently registers its sysctl table dynamically, the sysctl path
+ * for module FOO is <CTL_SUNRPC, CTL_FOODEBUG>.
+ */
+
+enum {
+       CTL_RPCDEBUG = 1,
+       CTL_NFSDEBUG,
+       CTL_NFSDDEBUG,
+       CTL_NLMDEBUG,
+       CTL_SLOTTABLE_UDP,
+       CTL_SLOTTABLE_TCP,
+       CTL_MIN_RESVPORT,
+       CTL_MAX_RESVPORT,
+};
+
+#endif /* _LINUX_SUNRPC_DEBUG_H_ */
diff --git a/lib/libdss-include/include/linux/suspend_ioctls.h b/lib/libdss-include/include/linux/suspend_ioctls.h
new file mode 100644 (file)
index 0000000..0b30382
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _LINUX_SUSPEND_IOCTLS_H
+#define _LINUX_SUSPEND_IOCTLS_H
+
+#include <linux/types.h>
+/*
+ * This structure is used to pass the values needed for the identification
+ * of the resume swap area from a user space to the kernel via the
+ * SNAPSHOT_SET_SWAP_AREA ioctl
+ */
+struct resume_swap_area {
+       __kernel_loff_t offset;
+       __u32 dev;
+} __attribute__((packed));
+
+#define SNAPSHOT_IOC_MAGIC     '3'
+#define SNAPSHOT_FREEZE                        _IO(SNAPSHOT_IOC_MAGIC, 1)
+#define SNAPSHOT_UNFREEZE              _IO(SNAPSHOT_IOC_MAGIC, 2)
+#define SNAPSHOT_ATOMIC_RESTORE                _IO(SNAPSHOT_IOC_MAGIC, 4)
+#define SNAPSHOT_FREE                  _IO(SNAPSHOT_IOC_MAGIC, 5)
+#define SNAPSHOT_FREE_SWAP_PAGES       _IO(SNAPSHOT_IOC_MAGIC, 9)
+#define SNAPSHOT_S2RAM                 _IO(SNAPSHOT_IOC_MAGIC, 11)
+#define SNAPSHOT_SET_SWAP_AREA         _IOW(SNAPSHOT_IOC_MAGIC, 13, \
+                                                       struct resume_swap_area)
+#define SNAPSHOT_GET_IMAGE_SIZE                _IOR(SNAPSHOT_IOC_MAGIC, 14, __kernel_loff_t)
+#define SNAPSHOT_PLATFORM_SUPPORT      _IO(SNAPSHOT_IOC_MAGIC, 15)
+#define SNAPSHOT_POWER_OFF             _IO(SNAPSHOT_IOC_MAGIC, 16)
+#define SNAPSHOT_CREATE_IMAGE          _IOW(SNAPSHOT_IOC_MAGIC, 17, int)
+#define SNAPSHOT_PREF_IMAGE_SIZE       _IO(SNAPSHOT_IOC_MAGIC, 18)
+#define SNAPSHOT_AVAIL_SWAP_SIZE       _IOR(SNAPSHOT_IOC_MAGIC, 19, __kernel_loff_t)
+#define SNAPSHOT_ALLOC_SWAP_PAGE       _IOR(SNAPSHOT_IOC_MAGIC, 20, __kernel_loff_t)
+#define SNAPSHOT_IOC_MAXNR     20
+
+#endif /* _LINUX_SUSPEND_IOCTLS_H */
diff --git a/lib/libdss-include/include/linux/swab.h b/lib/libdss-include/include/linux/swab.h
new file mode 100644 (file)
index 0000000..13a943c
--- /dev/null
@@ -0,0 +1,288 @@
+#ifndef _LINUX_SWAB_H
+#define _LINUX_SWAB_H
+
+#include <linux/types.h>
+
+#include <asm/swab.h>
+
+/*
+ * casts are necessary for constants, because we never know how for sure
+ * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way.
+ */
+#define ___constant_swab16(x) ((__u16)(                                \
+       (((__u16)(x) & (__u16)0x00ffU) << 8) |                  \
+       (((__u16)(x) & (__u16)0xff00U) >> 8)))
+
+#define ___constant_swab32(x) ((__u32)(                                \
+       (((__u32)(x) & (__u32)0x000000ffUL) << 24) |            \
+       (((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |            \
+       (((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |            \
+       (((__u32)(x) & (__u32)0xff000000UL) >> 24)))
+
+#define ___constant_swab64(x) ((__u64)(                                \
+       (((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) |   \
+       (((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) |   \
+       (((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) |   \
+       (((__u64)(x) & (__u64)0x00000000ff000000ULL) <<  8) |   \
+       (((__u64)(x) & (__u64)0x000000ff00000000ULL) >>  8) |   \
+       (((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) |   \
+       (((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) |   \
+       (((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56)))
+
+#define ___constant_swahw32(x) ((__u32)(                       \
+       (((__u32)(x) & (__u32)0x0000ffffUL) << 16) |            \
+       (((__u32)(x) & (__u32)0xffff0000UL) >> 16)))
+
+#define ___constant_swahb32(x) ((__u32)(                       \
+       (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) |             \
+       (((__u32)(x) & (__u32)0xff00ff00UL) >> 8)))
+
+/*
+ * Implement the following as inlines, but define the interface using
+ * macros to allow constant folding when possible:
+ * ___swab16, ___swab32, ___swab64, ___swahw32, ___swahb32
+ */
+
+static __inline__  __u16 __fswab16(__u16 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP16__
+       return __builtin_bswap16(val);
+#elif defined (__arch_swab16)
+       return __arch_swab16(val);
+#else
+       return ___constant_swab16(val);
+#endif
+}
+
+static __inline__  __u32 __fswab32(__u32 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP32__
+       return __builtin_bswap32(val);
+#elif defined(__arch_swab32)
+       return __arch_swab32(val);
+#else
+       return ___constant_swab32(val);
+#endif
+}
+
+static __inline__  __u64 __fswab64(__u64 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP64__
+       return __builtin_bswap64(val);
+#elif defined (__arch_swab64)
+       return __arch_swab64(val);
+#elif defined(__SWAB_64_THRU_32__)
+       __u32 h = val >> 32;
+       __u32 l = val & ((1ULL << 32) - 1);
+       return (((__u64)__fswab32(l)) << 32) | ((__u64)(__fswab32(h)));
+#else
+       return ___constant_swab64(val);
+#endif
+}
+
+static __inline__  __u32 __fswahw32(__u32 val)
+{
+#ifdef __arch_swahw32
+       return __arch_swahw32(val);
+#else
+       return ___constant_swahw32(val);
+#endif
+}
+
+static __inline__  __u32 __fswahb32(__u32 val)
+{
+#ifdef __arch_swahb32
+       return __arch_swahb32(val);
+#else
+       return ___constant_swahb32(val);
+#endif
+}
+
+/**
+ * __swab16 - return a byteswapped 16-bit value
+ * @x: value to byteswap
+ */
+#define __swab16(x)                            \
+       (__builtin_constant_p((__u16)(x)) ?     \
+       ___constant_swab16(x) :                 \
+       __fswab16(x))
+
+/**
+ * __swab32 - return a byteswapped 32-bit value
+ * @x: value to byteswap
+ */
+#define __swab32(x)                            \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swab32(x) :                 \
+       __fswab32(x))
+
+/**
+ * __swab64 - return a byteswapped 64-bit value
+ * @x: value to byteswap
+ */
+#define __swab64(x)                            \
+       (__builtin_constant_p((__u64)(x)) ?     \
+       ___constant_swab64(x) :                 \
+       __fswab64(x))
+
+/**
+ * __swahw32 - return a word-swapped 32-bit value
+ * @x: value to wordswap
+ *
+ * __swahw32(0x12340000) is 0x00001234
+ */
+#define __swahw32(x)                           \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swahw32(x) :                \
+       __fswahw32(x))
+
+/**
+ * __swahb32 - return a high and low byte-swapped 32-bit value
+ * @x: value to byteswap
+ *
+ * __swahb32(0x12345678) is 0x34127856
+ */
+#define __swahb32(x)                           \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swahb32(x) :                \
+       __fswahb32(x))
+
+/**
+ * __swab16p - return a byteswapped 16-bit value from a pointer
+ * @p: pointer to a naturally-aligned 16-bit value
+ */
+static __inline__ __u16 __swab16p(const __u16 *p)
+{
+#ifdef __arch_swab16p
+       return __arch_swab16p(p);
+#else
+       return __swab16(*p);
+#endif
+}
+
+/**
+ * __swab32p - return a byteswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ */
+static __inline__ __u32 __swab32p(const __u32 *p)
+{
+#ifdef __arch_swab32p
+       return __arch_swab32p(p);
+#else
+       return __swab32(*p);
+#endif
+}
+
+/**
+ * __swab64p - return a byteswapped 64-bit value from a pointer
+ * @p: pointer to a naturally-aligned 64-bit value
+ */
+static __inline__ __u64 __swab64p(const __u64 *p)
+{
+#ifdef __arch_swab64p
+       return __arch_swab64p(p);
+#else
+       return __swab64(*p);
+#endif
+}
+
+/**
+ * __swahw32p - return a wordswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahw32() for details of wordswapping.
+ */
+static __inline__ __u32 __swahw32p(const __u32 *p)
+{
+#ifdef __arch_swahw32p
+       return __arch_swahw32p(p);
+#else
+       return __swahw32(*p);
+#endif
+}
+
+/**
+ * __swahb32p - return a high and low byteswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahb32() for details of high/low byteswapping.
+ */
+static __inline__ __u32 __swahb32p(const __u32 *p)
+{
+#ifdef __arch_swahb32p
+       return __arch_swahb32p(p);
+#else
+       return __swahb32(*p);
+#endif
+}
+
+/**
+ * __swab16s - byteswap a 16-bit value in-place
+ * @p: pointer to a naturally-aligned 16-bit value
+ */
+static __inline__ void __swab16s(__u16 *p)
+{
+#ifdef __arch_swab16s
+       __arch_swab16s(p);
+#else
+       *p = __swab16p(p);
+#endif
+}
+/**
+ * __swab32s - byteswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ */
+static __inline__ void __swab32s(__u32 *p)
+{
+#ifdef __arch_swab32s
+       __arch_swab32s(p);
+#else
+       *p = __swab32p(p);
+#endif
+}
+
+/**
+ * __swab64s - byteswap a 64-bit value in-place
+ * @p: pointer to a naturally-aligned 64-bit value
+ */
+static __inline__ void __swab64s(__u64 *p)
+{
+#ifdef __arch_swab64s
+       __arch_swab64s(p);
+#else
+       *p = __swab64p(p);
+#endif
+}
+
+/**
+ * __swahw32s - wordswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahw32() for details of wordswapping
+ */
+static __inline__ void __swahw32s(__u32 *p)
+{
+#ifdef __arch_swahw32s
+       __arch_swahw32s(p);
+#else
+       *p = __swahw32p(p);
+#endif
+}
+
+/**
+ * __swahb32s - high and low byteswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahb32() for details of high and low byte swapping
+ */
+static __inline__ void __swahb32s(__u32 *p)
+{
+#ifdef __arch_swahb32s
+       __arch_swahb32s(p);
+#else
+       *p = __swahb32p(p);
+#endif
+}
+
+
+#endif /* _LINUX_SWAB_H */
diff --git a/lib/libdss-include/include/linux/synclink.h b/lib/libdss-include/include/linux/synclink.h
new file mode 100644 (file)
index 0000000..0818434
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * SyncLink Multiprotocol Serial Adapter Driver
+ *
+ * $Id: synclink.h,v 3.14 2006/07/17 20:15:43 paulkf Exp $
+ *
+ * Copyright (C) 1998-2000 by Microgate Corporation
+ *
+ * Redistribution of this file is permitted under
+ * the terms of the GNU Public License (GPL)
+ */
+
+#ifndef _SYNCLINK_H_
+#define _SYNCLINK_H_
+#define SYNCLINK_H_VERSION 3.6
+
+#include <linux/types.h>
+
+#define BIT0   0x0001
+#define BIT1   0x0002
+#define BIT2   0x0004
+#define BIT3   0x0008
+#define BIT4   0x0010
+#define BIT5   0x0020
+#define BIT6   0x0040
+#define BIT7   0x0080
+#define BIT8   0x0100
+#define BIT9   0x0200
+#define BIT10  0x0400
+#define BIT11  0x0800
+#define BIT12  0x1000
+#define BIT13  0x2000
+#define BIT14  0x4000
+#define BIT15  0x8000
+#define BIT16  0x00010000
+#define BIT17  0x00020000
+#define BIT18  0x00040000
+#define BIT19  0x00080000
+#define BIT20  0x00100000
+#define BIT21  0x00200000
+#define BIT22  0x00400000
+#define BIT23  0x00800000
+#define BIT24  0x01000000
+#define BIT25  0x02000000
+#define BIT26  0x04000000
+#define BIT27  0x08000000
+#define BIT28  0x10000000
+#define BIT29  0x20000000
+#define BIT30  0x40000000
+#define BIT31  0x80000000
+
+
+#define HDLC_MAX_FRAME_SIZE    65535
+#define MAX_ASYNC_TRANSMIT     4096
+#define MAX_ASYNC_BUFFER_SIZE  4096
+
+#define ASYNC_PARITY_NONE              0
+#define ASYNC_PARITY_EVEN              1
+#define ASYNC_PARITY_ODD               2
+#define ASYNC_PARITY_SPACE             3
+
+#define HDLC_FLAG_UNDERRUN_ABORT7      0x0000
+#define HDLC_FLAG_UNDERRUN_ABORT15     0x0001
+#define HDLC_FLAG_UNDERRUN_FLAG                0x0002
+#define HDLC_FLAG_UNDERRUN_CRC         0x0004
+#define HDLC_FLAG_SHARE_ZERO           0x0010
+#define HDLC_FLAG_AUTO_CTS             0x0020
+#define HDLC_FLAG_AUTO_DCD             0x0040
+#define HDLC_FLAG_AUTO_RTS             0x0080
+#define HDLC_FLAG_RXC_DPLL             0x0100
+#define HDLC_FLAG_RXC_BRG              0x0200
+#define HDLC_FLAG_RXC_TXCPIN           0x8000
+#define HDLC_FLAG_RXC_RXCPIN           0x0000
+#define HDLC_FLAG_TXC_DPLL             0x0400
+#define HDLC_FLAG_TXC_BRG              0x0800
+#define HDLC_FLAG_TXC_TXCPIN           0x0000
+#define HDLC_FLAG_TXC_RXCPIN           0x0008
+#define HDLC_FLAG_DPLL_DIV8            0x1000
+#define HDLC_FLAG_DPLL_DIV16           0x2000
+#define HDLC_FLAG_DPLL_DIV32           0x0000
+#define HDLC_FLAG_HDLC_LOOPMODE                0x4000
+
+#define HDLC_CRC_NONE                  0
+#define HDLC_CRC_16_CCITT              1
+#define HDLC_CRC_32_CCITT              2
+#define HDLC_CRC_MASK                  0x00ff
+#define HDLC_CRC_RETURN_EX             0x8000
+
+#define RX_OK                          0
+#define RX_CRC_ERROR                   1
+
+#define HDLC_TXIDLE_FLAGS              0
+#define HDLC_TXIDLE_ALT_ZEROS_ONES     1
+#define HDLC_TXIDLE_ZEROS              2
+#define HDLC_TXIDLE_ONES               3
+#define HDLC_TXIDLE_ALT_MARK_SPACE     4
+#define HDLC_TXIDLE_SPACE              5
+#define HDLC_TXIDLE_MARK               6
+#define HDLC_TXIDLE_CUSTOM_8            0x10000000
+#define HDLC_TXIDLE_CUSTOM_16           0x20000000
+
+#define HDLC_ENCODING_NRZ                      0
+#define HDLC_ENCODING_NRZB                     1
+#define HDLC_ENCODING_NRZI_MARK                        2
+#define HDLC_ENCODING_NRZI_SPACE               3
+#define HDLC_ENCODING_NRZI                     HDLC_ENCODING_NRZI_SPACE
+#define HDLC_ENCODING_BIPHASE_MARK             4
+#define HDLC_ENCODING_BIPHASE_SPACE            5
+#define HDLC_ENCODING_BIPHASE_LEVEL            6
+#define HDLC_ENCODING_DIFF_BIPHASE_LEVEL       7
+
+#define HDLC_PREAMBLE_LENGTH_8BITS     0
+#define HDLC_PREAMBLE_LENGTH_16BITS    1
+#define HDLC_PREAMBLE_LENGTH_32BITS    2
+#define HDLC_PREAMBLE_LENGTH_64BITS    3
+
+#define HDLC_PREAMBLE_PATTERN_NONE     0
+#define HDLC_PREAMBLE_PATTERN_ZEROS    1
+#define HDLC_PREAMBLE_PATTERN_FLAGS    2
+#define HDLC_PREAMBLE_PATTERN_10       3
+#define HDLC_PREAMBLE_PATTERN_01       4
+#define HDLC_PREAMBLE_PATTERN_ONES     5
+
+#define MGSL_MODE_ASYNC                1
+#define MGSL_MODE_HDLC         2
+#define MGSL_MODE_MONOSYNC     3
+#define MGSL_MODE_BISYNC       4
+#define MGSL_MODE_RAW          6
+#define MGSL_MODE_BASE_CLOCK    7
+#define MGSL_MODE_XSYNC         8
+
+#define MGSL_BUS_TYPE_ISA      1
+#define MGSL_BUS_TYPE_EISA     2
+#define MGSL_BUS_TYPE_PCI      5
+
+#define MGSL_INTERFACE_MASK     0xf
+#define MGSL_INTERFACE_DISABLE  0
+#define MGSL_INTERFACE_RS232    1
+#define MGSL_INTERFACE_V35      2
+#define MGSL_INTERFACE_RS422    3
+#define MGSL_INTERFACE_RTS_EN   0x10
+#define MGSL_INTERFACE_LL       0x20
+#define MGSL_INTERFACE_RL       0x40
+#define MGSL_INTERFACE_MSB_FIRST 0x80
+
+typedef struct _MGSL_PARAMS
+{
+       /* Common */
+
+       unsigned long   mode;           /* Asynchronous or HDLC */
+       unsigned char   loopback;       /* internal loopback mode */
+
+       /* HDLC Only */
+
+       unsigned short  flags;
+       unsigned char   encoding;       /* NRZ, NRZI, etc. */
+       unsigned long   clock_speed;    /* external clock speed in bits per second */
+       unsigned char   addr_filter;    /* receive HDLC address filter, 0xFF = disable */
+       unsigned short  crc_type;       /* None, CRC16-CCITT, or CRC32-CCITT */
+       unsigned char   preamble_length;
+       unsigned char   preamble;
+
+       /* Async Only */
+
+       unsigned long   data_rate;      /* bits per second */
+       unsigned char   data_bits;      /* 7 or 8 data bits */
+       unsigned char   stop_bits;      /* 1 or 2 stop bits */
+       unsigned char   parity;         /* none, even, or odd */
+
+} MGSL_PARAMS, *PMGSL_PARAMS;
+
+#define MICROGATE_VENDOR_ID 0x13c0
+#define SYNCLINK_DEVICE_ID 0x0010
+#define MGSCC_DEVICE_ID 0x0020
+#define SYNCLINK_SCA_DEVICE_ID 0x0030
+#define SYNCLINK_GT_DEVICE_ID 0x0070
+#define SYNCLINK_GT4_DEVICE_ID 0x0080
+#define SYNCLINK_AC_DEVICE_ID  0x0090
+#define SYNCLINK_GT2_DEVICE_ID 0x00A0
+#define MGSL_MAX_SERIAL_NUMBER 30
+
+/*
+** device diagnostics status
+*/
+
+#define DiagStatus_OK                          0
+#define DiagStatus_AddressFailure              1
+#define DiagStatus_AddressConflict             2
+#define DiagStatus_IrqFailure                  3
+#define DiagStatus_IrqConflict                 4
+#define DiagStatus_DmaFailure                  5
+#define DiagStatus_DmaConflict                 6
+#define DiagStatus_PciAdapterNotFound          7
+#define DiagStatus_CantAssignPciResources      8
+#define DiagStatus_CantAssignPciMemAddr                9
+#define DiagStatus_CantAssignPciIoAddr         10
+#define DiagStatus_CantAssignPciIrq            11
+#define DiagStatus_MemoryError                 12
+
+#define SerialSignal_DCD            0x01     /* Data Carrier Detect */
+#define SerialSignal_TXD            0x02     /* Transmit Data */
+#define SerialSignal_RI             0x04     /* Ring Indicator */
+#define SerialSignal_RXD            0x08     /* Receive Data */
+#define SerialSignal_CTS            0x10     /* Clear to Send */
+#define SerialSignal_RTS            0x20     /* Request to Send */
+#define SerialSignal_DSR            0x40     /* Data Set Ready */
+#define SerialSignal_DTR            0x80     /* Data Terminal Ready */
+
+
+/*
+ * Counters of the input lines (CTS, DSR, RI, CD) interrupts
+ */
+struct mgsl_icount {
+       __u32   cts, dsr, rng, dcd, tx, rx;
+       __u32   frame, parity, overrun, brk;
+       __u32   buf_overrun;
+       __u32   txok;
+       __u32   txunder;
+       __u32   txabort;
+       __u32   txtimeout;
+       __u32   rxshort;
+       __u32   rxlong;
+       __u32   rxabort;
+       __u32   rxover;
+       __u32   rxcrc;
+       __u32   rxok;
+       __u32   exithunt;
+       __u32   rxidle;
+};
+
+struct gpio_desc {
+       __u32 state;
+       __u32 smask;
+       __u32 dir;
+       __u32 dmask;
+};
+
+#define DEBUG_LEVEL_DATA       1
+#define DEBUG_LEVEL_ERROR      2
+#define DEBUG_LEVEL_INFO       3
+#define DEBUG_LEVEL_BH         4
+#define DEBUG_LEVEL_ISR                5
+
+/*
+** Event bit flags for use with MgslWaitEvent
+*/
+
+#define MgslEvent_DsrActive    0x0001
+#define MgslEvent_DsrInactive  0x0002
+#define MgslEvent_Dsr          0x0003
+#define MgslEvent_CtsActive    0x0004
+#define MgslEvent_CtsInactive  0x0008
+#define MgslEvent_Cts          0x000c
+#define MgslEvent_DcdActive    0x0010
+#define MgslEvent_DcdInactive  0x0020
+#define MgslEvent_Dcd          0x0030
+#define MgslEvent_RiActive     0x0040
+#define MgslEvent_RiInactive   0x0080
+#define MgslEvent_Ri           0x00c0
+#define MgslEvent_ExitHuntMode 0x0100
+#define MgslEvent_IdleReceived 0x0200
+
+/* Private IOCTL codes:
+ *
+ * MGSL_IOCSPARAMS     set MGSL_PARAMS structure values
+ * MGSL_IOCGPARAMS     get current MGSL_PARAMS structure values
+ * MGSL_IOCSTXIDLE     set current transmit idle mode
+ * MGSL_IOCGTXIDLE     get current transmit idle mode
+ * MGSL_IOCTXENABLE    enable or disable transmitter
+ * MGSL_IOCRXENABLE    enable or disable receiver
+ * MGSL_IOCTXABORT     abort transmitting frame (HDLC)
+ * MGSL_IOCGSTATS      return current statistics
+ * MGSL_IOCWAITEVENT   wait for specified event to occur
+ * MGSL_LOOPTXDONE     transmit in HDLC LoopMode done
+ * MGSL_IOCSIF          set the serial interface type
+ * MGSL_IOCGIF          get the serial interface type
+ */
+#define MGSL_MAGIC_IOC 'm'
+#define MGSL_IOCSPARAMS                _IOW(MGSL_MAGIC_IOC,0,struct _MGSL_PARAMS)
+#define MGSL_IOCGPARAMS                _IOR(MGSL_MAGIC_IOC,1,struct _MGSL_PARAMS)
+#define MGSL_IOCSTXIDLE                _IO(MGSL_MAGIC_IOC,2)
+#define MGSL_IOCGTXIDLE                _IO(MGSL_MAGIC_IOC,3)
+#define MGSL_IOCTXENABLE       _IO(MGSL_MAGIC_IOC,4)
+#define MGSL_IOCRXENABLE       _IO(MGSL_MAGIC_IOC,5)
+#define MGSL_IOCTXABORT                _IO(MGSL_MAGIC_IOC,6)
+#define MGSL_IOCGSTATS         _IO(MGSL_MAGIC_IOC,7)
+#define MGSL_IOCWAITEVENT      _IOWR(MGSL_MAGIC_IOC,8,int)
+#define MGSL_IOCCLRMODCOUNT    _IO(MGSL_MAGIC_IOC,15)
+#define MGSL_IOCLOOPTXDONE     _IO(MGSL_MAGIC_IOC,9)
+#define MGSL_IOCSIF            _IO(MGSL_MAGIC_IOC,10)
+#define MGSL_IOCGIF            _IO(MGSL_MAGIC_IOC,11)
+#define MGSL_IOCSGPIO          _IOW(MGSL_MAGIC_IOC,16,struct gpio_desc)
+#define MGSL_IOCGGPIO          _IOR(MGSL_MAGIC_IOC,17,struct gpio_desc)
+#define MGSL_IOCWAITGPIO       _IOWR(MGSL_MAGIC_IOC,18,struct gpio_desc)
+#define MGSL_IOCSXSYNC         _IO(MGSL_MAGIC_IOC, 19)
+#define MGSL_IOCGXSYNC         _IO(MGSL_MAGIC_IOC, 20)
+#define MGSL_IOCSXCTRL         _IO(MGSL_MAGIC_IOC, 21)
+#define MGSL_IOCGXCTRL         _IO(MGSL_MAGIC_IOC, 22)
+
+
+#endif /* _SYNCLINK_H_ */
diff --git a/lib/libdss-include/include/linux/sysctl.h b/lib/libdss-include/include/linux/sysctl.h
new file mode 100644 (file)
index 0000000..af4d004
--- /dev/null
@@ -0,0 +1,934 @@
+/*
+ * sysctl.h: General linux system control interface
+ *
+ * Begun 24 March 1995, Stephen Tweedie
+ *
+ ****************************************************************
+ ****************************************************************
+ **
+ **  WARNING:
+ **  The values in this file are exported to user space via 
+ **  the sysctl() binary interface.  Do *NOT* change the
+ **  numbering of any existing values here, and do not change
+ **  any numbers within any one set of values.  If you have to
+ **  redefine an existing interface, use a new number for it.
+ **  The kernel will then return -ENOTDIR to any application using
+ **  the old binary interface.
+ **
+ ****************************************************************
+ ****************************************************************
+ */
+
+#ifndef _LINUX_SYSCTL_H
+#define _LINUX_SYSCTL_H
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+
+struct completion;
+
+#define CTL_MAXNAME 10         /* how many path components do we allow in a
+                                  call to sysctl?   In other words, what is
+                                  the largest acceptable value for the nlen
+                                  member of a struct __sysctl_args to have? */
+
+struct __sysctl_args {
+       int *name;
+       int nlen;
+       void *oldval;
+       size_t *oldlenp;
+       void *newval;
+       size_t newlen;
+       unsigned long __unused[4];
+};
+
+/* Define sysctl names first */
+
+/* Top-level names: */
+
+enum
+{
+       CTL_KERN=1,             /* General kernel info and control */
+       CTL_VM=2,               /* VM management */
+       CTL_NET=3,              /* Networking */
+       CTL_PROC=4,             /* removal breaks strace(1) compilation */
+       CTL_FS=5,               /* Filesystems */
+       CTL_DEBUG=6,            /* Debugging */
+       CTL_DEV=7,              /* Devices */
+       CTL_BUS=8,              /* Busses */
+       CTL_ABI=9,              /* Binary emulation */
+       CTL_CPU=10,             /* CPU stuff (speed scaling, etc) */
+       CTL_ARLAN=254,          /* arlan wireless driver */
+       CTL_S390DBF=5677,       /* s390 debug */
+       CTL_SUNRPC=7249,        /* sunrpc debug */
+       CTL_PM=9899,            /* frv power management */
+       CTL_FRV=9898,           /* frv specific sysctls */
+};
+
+/* CTL_BUS names: */
+enum
+{
+       CTL_BUS_ISA=1           /* ISA */
+};
+
+/* /proc/sys/fs/inotify/ */
+enum
+{
+       INOTIFY_MAX_USER_INSTANCES=1,   /* max instances per user */
+       INOTIFY_MAX_USER_WATCHES=2,     /* max watches per user */
+       INOTIFY_MAX_QUEUED_EVENTS=3     /* max queued events per instance */
+};
+
+/* CTL_KERN names: */
+enum
+{
+       KERN_OSTYPE=1,          /* string: system version */
+       KERN_OSRELEASE=2,       /* string: system release */
+       KERN_OSREV=3,           /* int: system revision */
+       KERN_VERSION=4,         /* string: compile time info */
+       KERN_SECUREMASK=5,      /* struct: maximum rights mask */
+       KERN_PROF=6,            /* table: profiling information */
+       KERN_NODENAME=7,        /* string: hostname */
+       KERN_DOMAINNAME=8,      /* string: domainname */
+
+       KERN_PANIC=15,          /* int: panic timeout */
+       KERN_REALROOTDEV=16,    /* real root device to mount after initrd */
+
+       KERN_SPARC_REBOOT=21,   /* reboot command on Sparc */
+       KERN_CTLALTDEL=22,      /* int: allow ctl-alt-del to reboot */
+       KERN_PRINTK=23,         /* struct: control printk logging parameters */
+       KERN_NAMETRANS=24,      /* Name translation */
+       KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */
+       KERN_PPC_ZEROPAGED=26,  /* turn idle page zeroing on/off on PPC */
+       KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */
+       KERN_MODPROBE=28,       /* string: modprobe path */
+       KERN_SG_BIG_BUFF=29,    /* int: sg driver reserved buffer size */
+       KERN_ACCT=30,           /* BSD process accounting parameters */
+       KERN_PPC_L2CR=31,       /* l2cr register on PPC */
+
+       KERN_RTSIGNR=32,        /* Number of rt sigs queued */
+       KERN_RTSIGMAX=33,       /* Max queuable */
+       
+       KERN_SHMMAX=34,         /* long: Maximum shared memory segment */
+       KERN_MSGMAX=35,         /* int: Maximum size of a messege */
+       KERN_MSGMNB=36,         /* int: Maximum message queue size */
+       KERN_MSGPOOL=37,        /* int: Maximum system message pool size */
+       KERN_SYSRQ=38,          /* int: Sysreq enable */
+       KERN_MAX_THREADS=39,    /* int: Maximum nr of threads in the system */
+       KERN_RANDOM=40,         /* Random driver */
+       KERN_SHMALL=41,         /* int: Maximum size of shared memory */
+       KERN_MSGMNI=42,         /* int: msg queue identifiers */
+       KERN_SEM=43,            /* struct: sysv semaphore limits */
+       KERN_SPARC_STOP_A=44,   /* int: Sparc Stop-A enable */
+       KERN_SHMMNI=45,         /* int: shm array identifiers */
+       KERN_OVERFLOWUID=46,    /* int: overflow UID */
+       KERN_OVERFLOWGID=47,    /* int: overflow GID */
+       KERN_SHMPATH=48,        /* string: path to shm fs */
+       KERN_HOTPLUG=49,        /* string: path to uevent helper (deprecated) */
+       KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */
+       KERN_S390_USER_DEBUG_LOGGING=51,  /* int: dumps of user faults */
+       KERN_CORE_USES_PID=52,          /* int: use core or core.%pid */
+       KERN_TAINTED=53,        /* int: various kernel tainted flags */
+       KERN_CADPID=54,         /* int: PID of the process to notify on CAD */
+       KERN_PIDMAX=55,         /* int: PID # limit */
+       KERN_CORE_PATTERN=56,   /* string: pattern for core-file names */
+       KERN_PANIC_ON_OOPS=57,  /* int: whether we will panic on an oops */
+       KERN_HPPA_PWRSW=58,     /* int: hppa soft-power enable */
+       KERN_HPPA_UNALIGNED=59, /* int: hppa unaligned-trap enable */
+       KERN_PRINTK_RATELIMIT=60, /* int: tune printk ratelimiting */
+       KERN_PRINTK_RATELIMIT_BURST=61, /* int: tune printk ratelimiting */
+       KERN_PTY=62,            /* dir: pty driver */
+       KERN_NGROUPS_MAX=63,    /* int: NGROUPS_MAX */
+       KERN_SPARC_SCONS_PWROFF=64, /* int: serial console power-off halt */
+       KERN_HZ_TIMER=65,       /* int: hz timer on or off */
+       KERN_UNKNOWN_NMI_PANIC=66, /* int: unknown nmi panic flag */
+       KERN_BOOTLOADER_TYPE=67, /* int: boot loader type */
+       KERN_RANDOMIZE=68, /* int: randomize virtual address space */
+       KERN_SETUID_DUMPABLE=69, /* int: behaviour of dumps for setuid core */
+       KERN_SPIN_RETRY=70,     /* int: number of spinlock retries */
+       KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */
+       KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */
+       KERN_COMPAT_LOG=73,     /* int: print compat layer  messages */
+       KERN_MAX_LOCK_DEPTH=74, /* int: rtmutex's maximum lock depth */
+       KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */
+       KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */
+       KERN_PANIC_ON_WARN=77, /* int: call panic() in WARN() functions */
+};
+
+
+
+/* CTL_VM names: */
+enum
+{
+       VM_UNUSED1=1,           /* was: struct: Set vm swapping control */
+       VM_UNUSED2=2,           /* was; int: Linear or sqrt() swapout for hogs */
+       VM_UNUSED3=3,           /* was: struct: Set free page thresholds */
+       VM_UNUSED4=4,           /* Spare */
+       VM_OVERCOMMIT_MEMORY=5, /* Turn off the virtual memory safety limit */
+       VM_UNUSED5=6,           /* was: struct: Set buffer memory thresholds */
+       VM_UNUSED7=7,           /* was: struct: Set cache memory thresholds */
+       VM_UNUSED8=8,           /* was: struct: Control kswapd behaviour */
+       VM_UNUSED9=9,           /* was: struct: Set page table cache parameters */
+       VM_PAGE_CLUSTER=10,     /* int: set number of pages to swap together */
+       VM_DIRTY_BACKGROUND=11, /* dirty_background_ratio */
+       VM_DIRTY_RATIO=12,      /* dirty_ratio */
+       VM_DIRTY_WB_CS=13,      /* dirty_writeback_centisecs */
+       VM_DIRTY_EXPIRE_CS=14,  /* dirty_expire_centisecs */
+       VM_NR_PDFLUSH_THREADS=15, /* nr_pdflush_threads */
+       VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */
+       VM_PAGEBUF=17,          /* struct: Control pagebuf parameters */
+       VM_HUGETLB_PAGES=18,    /* int: Number of available Huge Pages */
+       VM_SWAPPINESS=19,       /* Tendency to steal mapped memory */
+       VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */
+       VM_MIN_FREE_KBYTES=21,  /* Minimum free kilobytes to maintain */
+       VM_MAX_MAP_COUNT=22,    /* int: Maximum number of mmaps/address-space */
+       VM_LAPTOP_MODE=23,      /* vm laptop mode */
+       VM_BLOCK_DUMP=24,       /* block dump mode */
+       VM_HUGETLB_GROUP=25,    /* permitted hugetlb group */
+       VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */
+       VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */
+       VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */
+       VM_DROP_PAGECACHE=29,   /* int: nuke lots of pagecache */
+       VM_PERCPU_PAGELIST_FRACTION=30,/* int: fraction of pages in each percpu_pagelist */
+       VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */
+       VM_MIN_UNMAPPED=32,     /* Set min percent of unmapped pages */
+       VM_PANIC_ON_OOM=33,     /* panic at out-of-memory */
+       VM_VDSO_ENABLED=34,     /* map VDSO into new processes? */
+       VM_MIN_SLAB=35,          /* Percent pages ignored by zone reclaim */
+};
+
+
+/* CTL_NET names: */
+enum
+{
+       NET_CORE=1,
+       NET_ETHER=2,
+       NET_802=3,
+       NET_UNIX=4,
+       NET_IPV4=5,
+       NET_IPX=6,
+       NET_ATALK=7,
+       NET_NETROM=8,
+       NET_AX25=9,
+       NET_BRIDGE=10,
+       NET_ROSE=11,
+       NET_IPV6=12,
+       NET_X25=13,
+       NET_TR=14,
+       NET_DECNET=15,
+       NET_ECONET=16,
+       NET_SCTP=17,
+       NET_LLC=18,
+       NET_NETFILTER=19,
+       NET_DCCP=20,
+       NET_IRDA=412,
+};
+
+/* /proc/sys/kernel/random */
+enum
+{
+       RANDOM_POOLSIZE=1,
+       RANDOM_ENTROPY_COUNT=2,
+       RANDOM_READ_THRESH=3,
+       RANDOM_WRITE_THRESH=4,
+       RANDOM_BOOT_ID=5,
+       RANDOM_UUID=6
+};
+
+/* /proc/sys/kernel/pty */
+enum
+{
+       PTY_MAX=1,
+       PTY_NR=2
+};
+
+/* /proc/sys/bus/isa */
+enum
+{
+       BUS_ISA_MEM_BASE=1,
+       BUS_ISA_PORT_BASE=2,
+       BUS_ISA_PORT_SHIFT=3
+};
+
+/* /proc/sys/net/core */
+enum
+{
+       NET_CORE_WMEM_MAX=1,
+       NET_CORE_RMEM_MAX=2,
+       NET_CORE_WMEM_DEFAULT=3,
+       NET_CORE_RMEM_DEFAULT=4,
+/* was NET_CORE_DESTROY_DELAY */
+       NET_CORE_MAX_BACKLOG=6,
+       NET_CORE_FASTROUTE=7,
+       NET_CORE_MSG_COST=8,
+       NET_CORE_MSG_BURST=9,
+       NET_CORE_OPTMEM_MAX=10,
+       NET_CORE_HOT_LIST_LENGTH=11,
+       NET_CORE_DIVERT_VERSION=12,
+       NET_CORE_NO_CONG_THRESH=13,
+       NET_CORE_NO_CONG=14,
+       NET_CORE_LO_CONG=15,
+       NET_CORE_MOD_CONG=16,
+       NET_CORE_DEV_WEIGHT=17,
+       NET_CORE_SOMAXCONN=18,
+       NET_CORE_BUDGET=19,
+       NET_CORE_AEVENT_ETIME=20,
+       NET_CORE_AEVENT_RSEQTH=21,
+       NET_CORE_WARNINGS=22,
+};
+
+/* /proc/sys/net/ethernet */
+
+/* /proc/sys/net/802 */
+
+/* /proc/sys/net/unix */
+
+enum
+{
+       NET_UNIX_DESTROY_DELAY=1,
+       NET_UNIX_DELETE_DELAY=2,
+       NET_UNIX_MAX_DGRAM_QLEN=3,
+};
+
+/* /proc/sys/net/netfilter */
+enum
+{
+       NET_NF_CONNTRACK_MAX=1,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
+       NET_NF_CONNTRACK_UDP_TIMEOUT=10,
+       NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
+       NET_NF_CONNTRACK_ICMP_TIMEOUT=12,
+       NET_NF_CONNTRACK_GENERIC_TIMEOUT=13,
+       NET_NF_CONNTRACK_BUCKETS=14,
+       NET_NF_CONNTRACK_LOG_INVALID=15,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
+       NET_NF_CONNTRACK_TCP_LOOSE=17,
+       NET_NF_CONNTRACK_TCP_BE_LIBERAL=18,
+       NET_NF_CONNTRACK_TCP_MAX_RETRANS=19,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
+       NET_NF_CONNTRACK_COUNT=27,
+       NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28,
+       NET_NF_CONNTRACK_FRAG6_TIMEOUT=29,
+       NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30,
+       NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31,
+       NET_NF_CONNTRACK_CHECKSUM=32,
+};
+
+/* /proc/sys/net/ipv4 */
+enum
+{
+       /* v2.0 compatibile variables */
+       NET_IPV4_FORWARD=8,
+       NET_IPV4_DYNADDR=9,
+
+       NET_IPV4_CONF=16,
+       NET_IPV4_NEIGH=17,
+       NET_IPV4_ROUTE=18,
+       NET_IPV4_FIB_HASH=19,
+       NET_IPV4_NETFILTER=20,
+
+       NET_IPV4_TCP_TIMESTAMPS=33,
+       NET_IPV4_TCP_WINDOW_SCALING=34,
+       NET_IPV4_TCP_SACK=35,
+       NET_IPV4_TCP_RETRANS_COLLAPSE=36,
+       NET_IPV4_DEFAULT_TTL=37,
+       NET_IPV4_AUTOCONFIG=38,
+       NET_IPV4_NO_PMTU_DISC=39,
+       NET_IPV4_TCP_SYN_RETRIES=40,
+       NET_IPV4_IPFRAG_HIGH_THRESH=41,
+       NET_IPV4_IPFRAG_LOW_THRESH=42,
+       NET_IPV4_IPFRAG_TIME=43,
+       NET_IPV4_TCP_MAX_KA_PROBES=44,
+       NET_IPV4_TCP_KEEPALIVE_TIME=45,
+       NET_IPV4_TCP_KEEPALIVE_PROBES=46,
+       NET_IPV4_TCP_RETRIES1=47,
+       NET_IPV4_TCP_RETRIES2=48,
+       NET_IPV4_TCP_FIN_TIMEOUT=49,
+       NET_IPV4_IP_MASQ_DEBUG=50,
+       NET_TCP_SYNCOOKIES=51,
+       NET_TCP_STDURG=52,
+       NET_TCP_RFC1337=53,
+       NET_TCP_SYN_TAILDROP=54,
+       NET_TCP_MAX_SYN_BACKLOG=55,
+       NET_IPV4_LOCAL_PORT_RANGE=56,
+       NET_IPV4_ICMP_ECHO_IGNORE_ALL=57,
+       NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58,
+       NET_IPV4_ICMP_SOURCEQUENCH_RATE=59,
+       NET_IPV4_ICMP_DESTUNREACH_RATE=60,
+       NET_IPV4_ICMP_TIMEEXCEED_RATE=61,
+       NET_IPV4_ICMP_PARAMPROB_RATE=62,
+       NET_IPV4_ICMP_ECHOREPLY_RATE=63,
+       NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64,
+       NET_IPV4_IGMP_MAX_MEMBERSHIPS=65,
+       NET_TCP_TW_RECYCLE=66,
+       NET_IPV4_ALWAYS_DEFRAG=67,
+       NET_IPV4_TCP_KEEPALIVE_INTVL=68,
+       NET_IPV4_INET_PEER_THRESHOLD=69,
+       NET_IPV4_INET_PEER_MINTTL=70,
+       NET_IPV4_INET_PEER_MAXTTL=71,
+       NET_IPV4_INET_PEER_GC_MINTIME=72,
+       NET_IPV4_INET_PEER_GC_MAXTIME=73,
+       NET_TCP_ORPHAN_RETRIES=74,
+       NET_TCP_ABORT_ON_OVERFLOW=75,
+       NET_TCP_SYNACK_RETRIES=76,
+       NET_TCP_MAX_ORPHANS=77,
+       NET_TCP_MAX_TW_BUCKETS=78,
+       NET_TCP_FACK=79,
+       NET_TCP_REORDERING=80,
+       NET_TCP_ECN=81,
+       NET_TCP_DSACK=82,
+       NET_TCP_MEM=83,
+       NET_TCP_WMEM=84,
+       NET_TCP_RMEM=85,
+       NET_TCP_APP_WIN=86,
+       NET_TCP_ADV_WIN_SCALE=87,
+       NET_IPV4_NONLOCAL_BIND=88,
+       NET_IPV4_ICMP_RATELIMIT=89,
+       NET_IPV4_ICMP_RATEMASK=90,
+       NET_TCP_TW_REUSE=91,
+       NET_TCP_FRTO=92,
+       NET_TCP_LOW_LATENCY=93,
+       NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
+       NET_IPV4_IGMP_MAX_MSF=96,
+       NET_TCP_NO_METRICS_SAVE=97,
+       NET_TCP_DEFAULT_WIN_SCALE=105,
+       NET_TCP_MODERATE_RCVBUF=106,
+       NET_TCP_TSO_WIN_DIVISOR=107,
+       NET_TCP_BIC_BETA=108,
+       NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
+       NET_TCP_CONG_CONTROL=110,
+       NET_TCP_ABC=111,
+       NET_IPV4_IPFRAG_MAX_DIST=112,
+       NET_TCP_MTU_PROBING=113,
+       NET_TCP_BASE_MSS=114,
+       NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115,
+       NET_TCP_DMA_COPYBREAK=116,
+       NET_TCP_SLOW_START_AFTER_IDLE=117,
+       NET_CIPSOV4_CACHE_ENABLE=118,
+       NET_CIPSOV4_CACHE_BUCKET_SIZE=119,
+       NET_CIPSOV4_RBM_OPTFMT=120,
+       NET_CIPSOV4_RBM_STRICTVALID=121,
+       NET_TCP_AVAIL_CONG_CONTROL=122,
+       NET_TCP_ALLOWED_CONG_CONTROL=123,
+       NET_TCP_MAX_SSTHRESH=124,
+       NET_TCP_FRTO_RESPONSE=125,
+};
+
+enum {
+       NET_IPV4_ROUTE_FLUSH=1,
+       NET_IPV4_ROUTE_MIN_DELAY=2, /* obsolete since 2.6.25 */
+       NET_IPV4_ROUTE_MAX_DELAY=3, /* obsolete since 2.6.25 */
+       NET_IPV4_ROUTE_GC_THRESH=4,
+       NET_IPV4_ROUTE_MAX_SIZE=5,
+       NET_IPV4_ROUTE_GC_MIN_INTERVAL=6,
+       NET_IPV4_ROUTE_GC_TIMEOUT=7,
+       NET_IPV4_ROUTE_GC_INTERVAL=8, /* obsolete since 2.6.38 */
+       NET_IPV4_ROUTE_REDIRECT_LOAD=9,
+       NET_IPV4_ROUTE_REDIRECT_NUMBER=10,
+       NET_IPV4_ROUTE_REDIRECT_SILENCE=11,
+       NET_IPV4_ROUTE_ERROR_COST=12,
+       NET_IPV4_ROUTE_ERROR_BURST=13,
+       NET_IPV4_ROUTE_GC_ELASTICITY=14,
+       NET_IPV4_ROUTE_MTU_EXPIRES=15,
+       NET_IPV4_ROUTE_MIN_PMTU=16,
+       NET_IPV4_ROUTE_MIN_ADVMSS=17,
+       NET_IPV4_ROUTE_SECRET_INTERVAL=18,
+       NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
+};
+
+enum
+{
+       NET_PROTO_CONF_ALL=-2,
+       NET_PROTO_CONF_DEFAULT=-3
+
+       /* And device ifindices ... */
+};
+
+enum
+{
+       NET_IPV4_CONF_FORWARDING=1,
+       NET_IPV4_CONF_MC_FORWARDING=2,
+       NET_IPV4_CONF_PROXY_ARP=3,
+       NET_IPV4_CONF_ACCEPT_REDIRECTS=4,
+       NET_IPV4_CONF_SECURE_REDIRECTS=5,
+       NET_IPV4_CONF_SEND_REDIRECTS=6,
+       NET_IPV4_CONF_SHARED_MEDIA=7,
+       NET_IPV4_CONF_RP_FILTER=8,
+       NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
+       NET_IPV4_CONF_BOOTP_RELAY=10,
+       NET_IPV4_CONF_LOG_MARTIANS=11,
+       NET_IPV4_CONF_TAG=12,
+       NET_IPV4_CONF_ARPFILTER=13,
+       NET_IPV4_CONF_MEDIUM_ID=14,
+       NET_IPV4_CONF_NOXFRM=15,
+       NET_IPV4_CONF_NOPOLICY=16,
+       NET_IPV4_CONF_FORCE_IGMP_VERSION=17,
+       NET_IPV4_CONF_ARP_ANNOUNCE=18,
+       NET_IPV4_CONF_ARP_IGNORE=19,
+       NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
+       NET_IPV4_CONF_ARP_ACCEPT=21,
+       NET_IPV4_CONF_ARP_NOTIFY=22,
+};
+
+/* /proc/sys/net/ipv4/netfilter */
+enum
+{
+       NET_IPV4_NF_CONNTRACK_MAX=1,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
+       NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10,
+       NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
+       NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12,
+       NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13,
+       NET_IPV4_NF_CONNTRACK_BUCKETS=14,
+       NET_IPV4_NF_CONNTRACK_LOG_INVALID=15,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
+       NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17,
+       NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18,
+       NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
+       NET_IPV4_NF_CONNTRACK_COUNT=27,
+       NET_IPV4_NF_CONNTRACK_CHECKSUM=28,
+};
+/* /proc/sys/net/ipv6 */
+enum {
+       NET_IPV6_CONF=16,
+       NET_IPV6_NEIGH=17,
+       NET_IPV6_ROUTE=18,
+       NET_IPV6_ICMP=19,
+       NET_IPV6_BINDV6ONLY=20,
+       NET_IPV6_IP6FRAG_HIGH_THRESH=21,
+       NET_IPV6_IP6FRAG_LOW_THRESH=22,
+       NET_IPV6_IP6FRAG_TIME=23,
+       NET_IPV6_IP6FRAG_SECRET_INTERVAL=24,
+       NET_IPV6_MLD_MAX_MSF=25,
+};
+
+enum {
+       NET_IPV6_ROUTE_FLUSH=1,
+       NET_IPV6_ROUTE_GC_THRESH=2,
+       NET_IPV6_ROUTE_MAX_SIZE=3,
+       NET_IPV6_ROUTE_GC_MIN_INTERVAL=4,
+       NET_IPV6_ROUTE_GC_TIMEOUT=5,
+       NET_IPV6_ROUTE_GC_INTERVAL=6,
+       NET_IPV6_ROUTE_GC_ELASTICITY=7,
+       NET_IPV6_ROUTE_MTU_EXPIRES=8,
+       NET_IPV6_ROUTE_MIN_ADVMSS=9,
+       NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10
+};
+
+enum {
+       NET_IPV6_FORWARDING=1,
+       NET_IPV6_HOP_LIMIT=2,
+       NET_IPV6_MTU=3,
+       NET_IPV6_ACCEPT_RA=4,
+       NET_IPV6_ACCEPT_REDIRECTS=5,
+       NET_IPV6_AUTOCONF=6,
+       NET_IPV6_DAD_TRANSMITS=7,
+       NET_IPV6_RTR_SOLICITS=8,
+       NET_IPV6_RTR_SOLICIT_INTERVAL=9,
+       NET_IPV6_RTR_SOLICIT_DELAY=10,
+       NET_IPV6_USE_TEMPADDR=11,
+       NET_IPV6_TEMP_VALID_LFT=12,
+       NET_IPV6_TEMP_PREFERED_LFT=13,
+       NET_IPV6_REGEN_MAX_RETRY=14,
+       NET_IPV6_MAX_DESYNC_FACTOR=15,
+       NET_IPV6_MAX_ADDRESSES=16,
+       NET_IPV6_FORCE_MLD_VERSION=17,
+       NET_IPV6_ACCEPT_RA_DEFRTR=18,
+       NET_IPV6_ACCEPT_RA_PINFO=19,
+       NET_IPV6_ACCEPT_RA_RTR_PREF=20,
+       NET_IPV6_RTR_PROBE_INTERVAL=21,
+       NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
+       NET_IPV6_PROXY_NDP=23,
+       NET_IPV6_ACCEPT_SOURCE_ROUTE=25,
+       NET_IPV6_ACCEPT_RA_FROM_LOCAL=26,
+       __NET_IPV6_MAX
+};
+
+/* /proc/sys/net/ipv6/icmp */
+enum {
+       NET_IPV6_ICMP_RATELIMIT=1
+};
+
+/* /proc/sys/net/<protocol>/neigh/<dev> */
+enum {
+       NET_NEIGH_MCAST_SOLICIT=1,
+       NET_NEIGH_UCAST_SOLICIT=2,
+       NET_NEIGH_APP_SOLICIT=3,
+       NET_NEIGH_RETRANS_TIME=4,
+       NET_NEIGH_REACHABLE_TIME=5,
+       NET_NEIGH_DELAY_PROBE_TIME=6,
+       NET_NEIGH_GC_STALE_TIME=7,
+       NET_NEIGH_UNRES_QLEN=8,
+       NET_NEIGH_PROXY_QLEN=9,
+       NET_NEIGH_ANYCAST_DELAY=10,
+       NET_NEIGH_PROXY_DELAY=11,
+       NET_NEIGH_LOCKTIME=12,
+       NET_NEIGH_GC_INTERVAL=13,
+       NET_NEIGH_GC_THRESH1=14,
+       NET_NEIGH_GC_THRESH2=15,
+       NET_NEIGH_GC_THRESH3=16,
+       NET_NEIGH_RETRANS_TIME_MS=17,
+       NET_NEIGH_REACHABLE_TIME_MS=18,
+};
+
+/* /proc/sys/net/dccp */
+enum {
+       NET_DCCP_DEFAULT=1,
+};
+
+/* /proc/sys/net/ipx */
+enum {
+       NET_IPX_PPROP_BROADCASTING=1,
+       NET_IPX_FORWARDING=2
+};
+
+/* /proc/sys/net/llc */
+enum {
+       NET_LLC2=1,
+       NET_LLC_STATION=2,
+};
+
+/* /proc/sys/net/llc/llc2 */
+enum {
+       NET_LLC2_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/station */
+enum {
+       NET_LLC_STATION_ACK_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/llc2/timeout */
+enum {
+       NET_LLC2_ACK_TIMEOUT=1,
+       NET_LLC2_P_TIMEOUT=2,
+       NET_LLC2_REJ_TIMEOUT=3,
+       NET_LLC2_BUSY_TIMEOUT=4,
+};
+
+/* /proc/sys/net/appletalk */
+enum {
+       NET_ATALK_AARP_EXPIRY_TIME=1,
+       NET_ATALK_AARP_TICK_TIME=2,
+       NET_ATALK_AARP_RETRANSMIT_LIMIT=3,
+       NET_ATALK_AARP_RESOLVE_TIME=4
+};
+
+
+/* /proc/sys/net/netrom */
+enum {
+       NET_NETROM_DEFAULT_PATH_QUALITY=1,
+       NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2,
+       NET_NETROM_NETWORK_TTL_INITIALISER=3,
+       NET_NETROM_TRANSPORT_TIMEOUT=4,
+       NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5,
+       NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6,
+       NET_NETROM_TRANSPORT_BUSY_DELAY=7,
+       NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8,
+       NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9,
+       NET_NETROM_ROUTING_CONTROL=10,
+       NET_NETROM_LINK_FAILS_COUNT=11,
+       NET_NETROM_RESET=12
+};
+
+/* /proc/sys/net/ax25 */
+enum {
+       NET_AX25_IP_DEFAULT_MODE=1,
+       NET_AX25_DEFAULT_MODE=2,
+       NET_AX25_BACKOFF_TYPE=3,
+       NET_AX25_CONNECT_MODE=4,
+       NET_AX25_STANDARD_WINDOW=5,
+       NET_AX25_EXTENDED_WINDOW=6,
+       NET_AX25_T1_TIMEOUT=7,
+       NET_AX25_T2_TIMEOUT=8,
+       NET_AX25_T3_TIMEOUT=9,
+       NET_AX25_IDLE_TIMEOUT=10,
+       NET_AX25_N2=11,
+       NET_AX25_PACLEN=12,
+       NET_AX25_PROTOCOL=13,
+       NET_AX25_DAMA_SLAVE_TIMEOUT=14
+};
+
+/* /proc/sys/net/rose */
+enum {
+       NET_ROSE_RESTART_REQUEST_TIMEOUT=1,
+       NET_ROSE_CALL_REQUEST_TIMEOUT=2,
+       NET_ROSE_RESET_REQUEST_TIMEOUT=3,
+       NET_ROSE_CLEAR_REQUEST_TIMEOUT=4,
+       NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5,
+       NET_ROSE_ROUTING_CONTROL=6,
+       NET_ROSE_LINK_FAIL_TIMEOUT=7,
+       NET_ROSE_MAX_VCS=8,
+       NET_ROSE_WINDOW_SIZE=9,
+       NET_ROSE_NO_ACTIVITY_TIMEOUT=10
+};
+
+/* /proc/sys/net/x25 */
+enum {
+       NET_X25_RESTART_REQUEST_TIMEOUT=1,
+       NET_X25_CALL_REQUEST_TIMEOUT=2,
+       NET_X25_RESET_REQUEST_TIMEOUT=3,
+       NET_X25_CLEAR_REQUEST_TIMEOUT=4,
+       NET_X25_ACK_HOLD_BACK_TIMEOUT=5,
+       NET_X25_FORWARD=6
+};
+
+/* /proc/sys/net/token-ring */
+enum
+{
+       NET_TR_RIF_TIMEOUT=1
+};
+
+/* /proc/sys/net/decnet/ */
+enum {
+       NET_DECNET_NODE_TYPE = 1,
+       NET_DECNET_NODE_ADDRESS = 2,
+       NET_DECNET_NODE_NAME = 3,
+       NET_DECNET_DEFAULT_DEVICE = 4,
+       NET_DECNET_TIME_WAIT = 5,
+       NET_DECNET_DN_COUNT = 6,
+       NET_DECNET_DI_COUNT = 7,
+       NET_DECNET_DR_COUNT = 8,
+       NET_DECNET_DST_GC_INTERVAL = 9,
+       NET_DECNET_CONF = 10,
+       NET_DECNET_NO_FC_MAX_CWND = 11,
+       NET_DECNET_MEM = 12,
+       NET_DECNET_RMEM = 13,
+       NET_DECNET_WMEM = 14,
+       NET_DECNET_DEBUG_LEVEL = 255
+};
+
+/* /proc/sys/net/decnet/conf/<dev> */
+enum {
+       NET_DECNET_CONF_LOOPBACK = -2,
+       NET_DECNET_CONF_DDCMP = -3,
+       NET_DECNET_CONF_PPP = -4,
+       NET_DECNET_CONF_X25 = -5,
+       NET_DECNET_CONF_GRE = -6,
+       NET_DECNET_CONF_ETHER = -7
+
+       /* ... and ifindex of devices */
+};
+
+/* /proc/sys/net/decnet/conf/<dev>/ */
+enum {
+       NET_DECNET_CONF_DEV_PRIORITY = 1,
+       NET_DECNET_CONF_DEV_T1 = 2,
+       NET_DECNET_CONF_DEV_T2 = 3,
+       NET_DECNET_CONF_DEV_T3 = 4,
+       NET_DECNET_CONF_DEV_FORWARDING = 5,
+       NET_DECNET_CONF_DEV_BLKSIZE = 6,
+       NET_DECNET_CONF_DEV_STATE = 7
+};
+
+/* /proc/sys/net/sctp */
+enum {
+       NET_SCTP_RTO_INITIAL = 1,
+       NET_SCTP_RTO_MIN     = 2,
+       NET_SCTP_RTO_MAX     = 3,
+       NET_SCTP_RTO_ALPHA   = 4,
+       NET_SCTP_RTO_BETA    = 5,
+       NET_SCTP_VALID_COOKIE_LIFE       =  6,
+       NET_SCTP_ASSOCIATION_MAX_RETRANS =  7,
+       NET_SCTP_PATH_MAX_RETRANS        =  8,
+       NET_SCTP_MAX_INIT_RETRANSMITS    =  9,
+       NET_SCTP_HB_INTERVAL             = 10,
+       NET_SCTP_PRESERVE_ENABLE         = 11,
+       NET_SCTP_MAX_BURST               = 12,
+       NET_SCTP_ADDIP_ENABLE            = 13,
+       NET_SCTP_PRSCTP_ENABLE           = 14,
+       NET_SCTP_SNDBUF_POLICY           = 15,
+       NET_SCTP_SACK_TIMEOUT            = 16,
+       NET_SCTP_RCVBUF_POLICY           = 17,
+};
+
+/* /proc/sys/net/bridge */
+enum {
+       NET_BRIDGE_NF_CALL_ARPTABLES = 1,
+       NET_BRIDGE_NF_CALL_IPTABLES = 2,
+       NET_BRIDGE_NF_CALL_IP6TABLES = 3,
+       NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4,
+       NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5,
+};
+
+/* proc/sys/net/irda */
+enum {
+       NET_IRDA_DISCOVERY=1,
+       NET_IRDA_DEVNAME=2,
+       NET_IRDA_DEBUG=3,
+       NET_IRDA_FAST_POLL=4,
+       NET_IRDA_DISCOVERY_SLOTS=5,
+       NET_IRDA_DISCOVERY_TIMEOUT=6,
+       NET_IRDA_SLOT_TIMEOUT=7,
+       NET_IRDA_MAX_BAUD_RATE=8,
+       NET_IRDA_MIN_TX_TURN_TIME=9,
+       NET_IRDA_MAX_TX_DATA_SIZE=10,
+       NET_IRDA_MAX_TX_WINDOW=11,
+       NET_IRDA_MAX_NOREPLY_TIME=12,
+       NET_IRDA_WARN_NOREPLY_TIME=13,
+       NET_IRDA_LAP_KEEPALIVE_TIME=14,
+};
+
+
+/* CTL_FS names: */
+enum
+{
+       FS_NRINODE=1,   /* int:current number of allocated inodes */
+       FS_STATINODE=2,
+       FS_MAXINODE=3,  /* int:maximum number of inodes that can be allocated */
+       FS_NRDQUOT=4,   /* int:current number of allocated dquots */
+       FS_MAXDQUOT=5,  /* int:maximum number of dquots that can be allocated */
+       FS_NRFILE=6,    /* int:current number of allocated filedescriptors */
+       FS_MAXFILE=7,   /* int:maximum number of filedescriptors that can be allocated */
+       FS_DENTRY=8,
+       FS_NRSUPER=9,   /* int:current number of allocated super_blocks */
+       FS_MAXSUPER=10, /* int:maximum number of super_blocks that can be allocated */
+       FS_OVERFLOWUID=11,      /* int: overflow UID */
+       FS_OVERFLOWGID=12,      /* int: overflow GID */
+       FS_LEASES=13,   /* int: leases enabled */
+       FS_DIR_NOTIFY=14,       /* int: directory notification enabled */
+       FS_LEASE_TIME=15,       /* int: maximum time to wait for a lease break */
+       FS_DQSTATS=16,  /* disc quota usage statistics and control */
+       FS_XFS=17,      /* struct: control xfs parameters */
+       FS_AIO_NR=18,   /* current system-wide number of aio requests */
+       FS_AIO_MAX_NR=19,       /* system-wide maximum number of aio requests */
+       FS_INOTIFY=20,  /* inotify submenu */
+       FS_OCFS2=988,   /* ocfs2 */
+};
+
+/* /proc/sys/fs/quota/ */
+enum {
+       FS_DQ_LOOKUPS = 1,
+       FS_DQ_DROPS = 2,
+       FS_DQ_READS = 3,
+       FS_DQ_WRITES = 4,
+       FS_DQ_CACHE_HITS = 5,
+       FS_DQ_ALLOCATED = 6,
+       FS_DQ_FREE = 7,
+       FS_DQ_SYNCS = 8,
+       FS_DQ_WARNINGS = 9,
+};
+
+/* CTL_DEBUG names: */
+
+/* CTL_DEV names: */
+enum {
+       DEV_CDROM=1,
+       DEV_HWMON=2,
+       DEV_PARPORT=3,
+       DEV_RAID=4,
+       DEV_MAC_HID=5,
+       DEV_SCSI=6,
+       DEV_IPMI=7,
+};
+
+/* /proc/sys/dev/cdrom */
+enum {
+       DEV_CDROM_INFO=1,
+       DEV_CDROM_AUTOCLOSE=2,
+       DEV_CDROM_AUTOEJECT=3,
+       DEV_CDROM_DEBUG=4,
+       DEV_CDROM_LOCK=5,
+       DEV_CDROM_CHECK_MEDIA=6
+};
+
+/* /proc/sys/dev/parport */
+enum {
+       DEV_PARPORT_DEFAULT=-3
+};
+
+/* /proc/sys/dev/raid */
+enum {
+       DEV_RAID_SPEED_LIMIT_MIN=1,
+       DEV_RAID_SPEED_LIMIT_MAX=2
+};
+
+/* /proc/sys/dev/parport/default */
+enum {
+       DEV_PARPORT_DEFAULT_TIMESLICE=1,
+       DEV_PARPORT_DEFAULT_SPINTIME=2
+};
+
+/* /proc/sys/dev/parport/parport n */
+enum {
+       DEV_PARPORT_SPINTIME=1,
+       DEV_PARPORT_BASE_ADDR=2,
+       DEV_PARPORT_IRQ=3,
+       DEV_PARPORT_DMA=4,
+       DEV_PARPORT_MODES=5,
+       DEV_PARPORT_DEVICES=6,
+       DEV_PARPORT_AUTOPROBE=16
+};
+
+/* /proc/sys/dev/parport/parport n/devices/ */
+enum {
+       DEV_PARPORT_DEVICES_ACTIVE=-3,
+};
+
+/* /proc/sys/dev/parport/parport n/devices/device n */
+enum {
+       DEV_PARPORT_DEVICE_TIMESLICE=1,
+};
+
+/* /proc/sys/dev/mac_hid */
+enum {
+       DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
+       DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
+       DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
+       DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
+       DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
+       DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
+};
+
+/* /proc/sys/dev/scsi */
+enum {
+       DEV_SCSI_LOGGING_LEVEL=1,
+};
+
+/* /proc/sys/dev/ipmi */
+enum {
+       DEV_IPMI_POWEROFF_POWERCYCLE=1,
+};
+
+/* /proc/sys/abi */
+enum
+{
+       ABI_DEFHANDLER_COFF=1,  /* default handler for coff binaries */
+       ABI_DEFHANDLER_ELF=2,   /* default handler for ELF binaries */
+       ABI_DEFHANDLER_LCALL7=3,/* default handler for procs using lcall7 */
+       ABI_DEFHANDLER_LIBCSO=4,/* default handler for an libc.so ELF interp */
+       ABI_TRACE=5,            /* tracing flags */
+       ABI_FAKE_UTSNAME=6,     /* fake target utsname information */
+};
+
+
+#endif /* _LINUX_SYSCTL_H */
diff --git a/lib/libdss-include/include/linux/sysinfo.h b/lib/libdss-include/include/linux/sysinfo.h
new file mode 100644 (file)
index 0000000..934335a
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _LINUX_SYSINFO_H
+#define _LINUX_SYSINFO_H
+
+#include <linux/types.h>
+
+#define SI_LOAD_SHIFT  16
+struct sysinfo {
+       __kernel_long_t uptime;         /* Seconds since boot */
+       __kernel_ulong_t loads[3];      /* 1, 5, and 15 minute load averages */
+       __kernel_ulong_t totalram;      /* Total usable main memory size */
+       __kernel_ulong_t freeram;       /* Available memory size */
+       __kernel_ulong_t sharedram;     /* Amount of shared memory */
+       __kernel_ulong_t bufferram;     /* Memory used by buffers */
+       __kernel_ulong_t totalswap;     /* Total swap space size */
+       __kernel_ulong_t freeswap;      /* swap space still available */
+       __u16 procs;                    /* Number of current processes */
+       __u16 pad;                      /* Explicit padding for m68k */
+       __kernel_ulong_t totalhigh;     /* Total high memory size */
+       __kernel_ulong_t freehigh;      /* Available high memory size */
+       __u32 mem_unit;                 /* Memory unit size in bytes */
+       char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];   /* Padding: libc5 uses this.. */
+};
+
+#endif /* _LINUX_SYSINFO_H */
diff --git a/lib/libdss-include/include/linux/target_core_user.h b/lib/libdss-include/include/linux/target_core_user.h
new file mode 100644 (file)
index 0000000..94b1eff
--- /dev/null
@@ -0,0 +1,144 @@
+#ifndef __TARGET_CORE_USER_H
+#define __TARGET_CORE_USER_H
+
+/* This header will be used by application too */
+
+#include <linux/types.h>
+#include <linux/uio.h>
+
+#define TCMU_VERSION "2.0"
+
+/*
+ * Ring Design
+ * -----------
+ *
+ * The mmaped area is divided into three parts:
+ * 1) The mailbox (struct tcmu_mailbox, below)
+ * 2) The command ring
+ * 3) Everything beyond the command ring (data)
+ *
+ * The mailbox tells userspace the offset of the command ring from the
+ * start of the shared memory region, and how big the command ring is.
+ *
+ * The kernel passes SCSI commands to userspace by putting a struct
+ * tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking
+ * userspace via uio's interrupt mechanism.
+ *
+ * tcmu_cmd_entry contains a header. If the header type is PAD,
+ * userspace should skip hdr->length bytes (mod cmdr_size) to find the
+ * next cmd_entry.
+ *
+ * Otherwise, the entry will contain offsets into the mmaped area that
+ * contain the cdb and data buffers -- the latter accessible via the
+ * iov array. iov addresses are also offsets into the shared area.
+ *
+ * When userspace is completed handling the command, set
+ * entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate,
+ * and also set mailbox->cmd_tail equal to the old cmd_tail plus
+ * hdr->length, mod cmdr_size. If cmd_tail doesn't equal cmd_head, it
+ * should process the next packet the same way, and so on.
+ */
+
+#define TCMU_MAILBOX_VERSION 2
+#define ALIGN_SIZE 64 /* Should be enough for most CPUs */
+
+struct tcmu_mailbox {
+       __u16 version;
+       __u16 flags;
+       __u32 cmdr_off;
+       __u32 cmdr_size;
+
+       __u32 cmd_head;
+
+       /* Updated by user. On its own cacheline */
+       __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE)));
+
+} __attribute__((packed));
+
+enum tcmu_opcode {
+       TCMU_OP_PAD = 0,
+       TCMU_OP_CMD,
+};
+
+/*
+ * Only a few opcodes, and length is 8-byte aligned, so use low bits for opcode.
+ */
+struct tcmu_cmd_entry_hdr {
+       __u32 len_op;
+       __u16 cmd_id;
+       __u8 kflags;
+#define TCMU_UFLAG_UNKNOWN_OP 0x1
+       __u8 uflags;
+
+} __attribute__((packed));
+
+#define TCMU_OP_MASK 0x7
+
+static __inline__ enum tcmu_opcode tcmu_hdr_get_op(__u32 len_op)
+{
+       return len_op & TCMU_OP_MASK;
+}
+
+static __inline__ void tcmu_hdr_set_op(__u32 *len_op, enum tcmu_opcode op)
+{
+       *len_op &= ~TCMU_OP_MASK;
+       *len_op |= (op & TCMU_OP_MASK);
+}
+
+static __inline__ __u32 tcmu_hdr_get_len(__u32 len_op)
+{
+       return len_op & ~TCMU_OP_MASK;
+}
+
+static __inline__ void tcmu_hdr_set_len(__u32 *len_op, __u32 len)
+{
+       *len_op &= TCMU_OP_MASK;
+       *len_op |= len;
+}
+
+/* Currently the same as SCSI_SENSE_BUFFERSIZE */
+#define TCMU_SENSE_BUFFERSIZE 96
+
+struct tcmu_cmd_entry {
+       struct tcmu_cmd_entry_hdr hdr;
+
+       union {
+               struct {
+                       uint32_t iov_cnt;
+                       uint32_t iov_bidi_cnt;
+                       uint32_t iov_dif_cnt;
+                       uint64_t cdb_off;
+                       uint64_t __pad1;
+                       uint64_t __pad2;
+                       struct iovec iov[0];
+               } req;
+               struct {
+                       uint8_t scsi_status;
+                       uint8_t __pad1;
+                       uint16_t __pad2;
+                       uint32_t __pad3;
+                       char sense_buffer[TCMU_SENSE_BUFFERSIZE];
+               } rsp;
+       };
+
+} __attribute__((packed));
+
+#define TCMU_OP_ALIGN_SIZE sizeof(uint64_t)
+
+enum tcmu_genl_cmd {
+       TCMU_CMD_UNSPEC,
+       TCMU_CMD_ADDED_DEVICE,
+       TCMU_CMD_REMOVED_DEVICE,
+       __TCMU_CMD_MAX,
+};
+#define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1)
+
+enum tcmu_genl_attr {
+       TCMU_ATTR_UNSPEC,
+       TCMU_ATTR_DEVICE,
+       TCMU_ATTR_MINOR,
+       __TCMU_ATTR_MAX,
+};
+#define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/taskstats.h b/lib/libdss-include/include/linux/taskstats.h
new file mode 100644 (file)
index 0000000..2466e55
--- /dev/null
@@ -0,0 +1,213 @@
+/* taskstats.h - exporting per-task statistics
+ *
+ * Copyright (C) Shailabh Nagar, IBM Corp. 2006
+ *           (C) Balbir Singh,   IBM Corp. 2006
+ *           (C) Jay Lan,        SGI, 2006
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _LINUX_TASKSTATS_H
+#define _LINUX_TASKSTATS_H
+
+#include <linux/types.h>
+
+/* Format for per-task data returned to userland when
+ *     - a task exits
+ *     - listener requests stats for a task
+ *
+ * The struct is versioned. Newer versions should only add fields to
+ * the bottom of the struct to maintain backward compatibility.
+ *
+ *
+ * To add new fields
+ *     a) bump up TASKSTATS_VERSION
+ *     b) add comment indicating new version number at end of struct
+ *     c) add new fields after version comment; maintain 64-bit alignment
+ */
+
+
+#define TASKSTATS_VERSION      8
+#define TS_COMM_LEN            32      /* should be >= TASK_COMM_LEN
+                                        * in linux/sched.h */
+
+struct taskstats {
+
+       /* The version number of this struct. This field is always set to
+        * TAKSTATS_VERSION, which is defined in <linux/taskstats.h>.
+        * Each time the struct is changed, the value should be incremented.
+        */
+       __u16   version;
+       __u32   ac_exitcode;            /* Exit status */
+
+       /* The accounting flags of a task as defined in <linux/acct.h>
+        * Defined values are AFORK, ASU, ACOMPAT, ACORE, and AXSIG.
+        */
+       __u8    ac_flag;                /* Record flags */
+       __u8    ac_nice;                /* task_nice */
+
+       /* Delay accounting fields start
+        *
+        * All values, until comment "Delay accounting fields end" are
+        * available only if delay accounting is enabled, even though the last
+        * few fields are not delays
+        *
+        * xxx_count is the number of delay values recorded
+        * xxx_delay_total is the corresponding cumulative delay in nanoseconds
+        *
+        * xxx_delay_total wraps around to zero on overflow
+        * xxx_count incremented regardless of overflow
+        */
+
+       /* Delay waiting for cpu, while runnable
+        * count, delay_total NOT updated atomically
+        */
+       __u64   cpu_count __attribute__((aligned(8)));
+       __u64   cpu_delay_total;
+
+       /* Following four fields atomically updated using task->delays->lock */
+
+       /* Delay waiting for synchronous block I/O to complete
+        * does not account for delays in I/O submission
+        */
+       __u64   blkio_count;
+       __u64   blkio_delay_total;
+
+       /* Delay waiting for page fault I/O (swap in only) */
+       __u64   swapin_count;
+       __u64   swapin_delay_total;
+
+       /* cpu "wall-clock" running time
+        * On some architectures, value will adjust for cpu time stolen
+        * from the kernel in involuntary waits due to virtualization.
+        * Value is cumulative, in nanoseconds, without a corresponding count
+        * and wraps around to zero silently on overflow
+        */
+       __u64   cpu_run_real_total;
+
+       /* cpu "virtual" running time
+        * Uses time intervals seen by the kernel i.e. no adjustment
+        * for kernel's involuntary waits due to virtualization.
+        * Value is cumulative, in nanoseconds, without a corresponding count
+        * and wraps around to zero silently on overflow
+        */
+       __u64   cpu_run_virtual_total;
+       /* Delay accounting fields end */
+       /* version 1 ends here */
+
+       /* Basic Accounting Fields start */
+       char    ac_comm[TS_COMM_LEN];   /* Command name */
+       __u8    ac_sched __attribute__((aligned(8)));
+                                       /* Scheduling discipline */
+       __u8    ac_pad[3];
+       __u32   ac_uid __attribute__((aligned(8)));
+                                       /* User ID */
+       __u32   ac_gid;                 /* Group ID */
+       __u32   ac_pid;                 /* Process ID */
+       __u32   ac_ppid;                /* Parent process ID */
+       __u32   ac_btime;               /* Begin time [sec since 1970] */
+       __u64   ac_etime __attribute__((aligned(8)));
+                                       /* Elapsed time [usec] */
+       __u64   ac_utime;               /* User CPU time [usec] */
+       __u64   ac_stime;               /* SYstem CPU time [usec] */
+       __u64   ac_minflt;              /* Minor Page Fault Count */
+       __u64   ac_majflt;              /* Major Page Fault Count */
+       /* Basic Accounting Fields end */
+
+       /* Extended accounting fields start */
+       /* Accumulated RSS usage in duration of a task, in MBytes-usecs.
+        * The current rss usage is added to this counter every time
+        * a tick is charged to a task's system time. So, at the end we
+        * will have memory usage multiplied by system time. Thus an
+        * average usage per system time unit can be calculated.
+        */
+       __u64   coremem;                /* accumulated RSS usage in MB-usec */
+       /* Accumulated virtual memory usage in duration of a task.
+        * Same as acct_rss_mem1 above except that we keep track of VM usage.
+        */
+       __u64   virtmem;                /* accumulated VM  usage in MB-usec */
+
+       /* High watermark of RSS and virtual memory usage in duration of
+        * a task, in KBytes.
+        */
+       __u64   hiwater_rss;            /* High-watermark of RSS usage, in KB */
+       __u64   hiwater_vm;             /* High-water VM usage, in KB */
+
+       /* The following four fields are I/O statistics of a task. */
+       __u64   read_char;              /* bytes read */
+       __u64   write_char;             /* bytes written */
+       __u64   read_syscalls;          /* read syscalls */
+       __u64   write_syscalls;         /* write syscalls */
+       /* Extended accounting fields end */
+
+#define TASKSTATS_HAS_IO_ACCOUNTING
+       /* Per-task storage I/O accounting starts */
+       __u64   read_bytes;             /* bytes of read I/O */
+       __u64   write_bytes;            /* bytes of write I/O */
+       __u64   cancelled_write_bytes;  /* bytes of cancelled write I/O */
+
+       __u64  nvcsw;                   /* voluntary_ctxt_switches */
+       __u64  nivcsw;                  /* nonvoluntary_ctxt_switches */
+
+       /* time accounting for SMT machines */
+       __u64   ac_utimescaled;         /* utime scaled on frequency etc */
+       __u64   ac_stimescaled;         /* stime scaled on frequency etc */
+       __u64   cpu_scaled_run_real_total; /* scaled cpu_run_real_total */
+
+       /* Delay waiting for memory reclaim */
+       __u64   freepages_count;
+       __u64   freepages_delay_total;
+};
+
+
+/*
+ * Commands sent from userspace
+ * Not versioned. New commands should only be inserted at the enum's end
+ * prior to __TASKSTATS_CMD_MAX
+ */
+
+enum {
+       TASKSTATS_CMD_UNSPEC = 0,       /* Reserved */
+       TASKSTATS_CMD_GET,              /* user->kernel request/get-response */
+       TASKSTATS_CMD_NEW,              /* kernel->user event */
+       __TASKSTATS_CMD_MAX,
+};
+
+#define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1)
+
+enum {
+       TASKSTATS_TYPE_UNSPEC = 0,      /* Reserved */
+       TASKSTATS_TYPE_PID,             /* Process id */
+       TASKSTATS_TYPE_TGID,            /* Thread group id */
+       TASKSTATS_TYPE_STATS,           /* taskstats structure */
+       TASKSTATS_TYPE_AGGR_PID,        /* contains pid + stats */
+       TASKSTATS_TYPE_AGGR_TGID,       /* contains tgid + stats */
+       TASKSTATS_TYPE_NULL,            /* contains nothing */
+       __TASKSTATS_TYPE_MAX,
+};
+
+#define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1)
+
+enum {
+       TASKSTATS_CMD_ATTR_UNSPEC = 0,
+       TASKSTATS_CMD_ATTR_PID,
+       TASKSTATS_CMD_ATTR_TGID,
+       TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
+       TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
+       __TASKSTATS_CMD_ATTR_MAX,
+};
+
+#define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1)
+
+/* NETLINK_GENERIC related info */
+
+#define TASKSTATS_GENL_NAME    "TASKSTATS"
+#define TASKSTATS_GENL_VERSION 0x1
+
+#endif /* _LINUX_TASKSTATS_H */
diff --git a/lib/libdss-include/include/linux/tc_act/tc_bpf.h b/lib/libdss-include/include/linux/tc_act/tc_bpf.h
new file mode 100644 (file)
index 0000000..07f17cc
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_BPF_H
+#define __LINUX_TC_BPF_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_BPF 13
+
+struct tc_act_bpf {
+       tc_gen;
+};
+
+enum {
+       TCA_ACT_BPF_UNSPEC,
+       TCA_ACT_BPF_TM,
+       TCA_ACT_BPF_PARMS,
+       TCA_ACT_BPF_OPS_LEN,
+       TCA_ACT_BPF_OPS,
+       TCA_ACT_BPF_FD,
+       TCA_ACT_BPF_NAME,
+       __TCA_ACT_BPF_MAX,
+};
+#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_connmark.h b/lib/libdss-include/include/linux/tc_act/tc_connmark.h
new file mode 100644 (file)
index 0000000..994b097
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __UAPI_TC_CONNMARK_H
+#define __UAPI_TC_CONNMARK_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_CONNMARK 14
+
+struct tc_connmark {
+       tc_gen;
+       __u16 zone;
+};
+
+enum {
+       TCA_CONNMARK_UNSPEC,
+       TCA_CONNMARK_PARMS,
+       TCA_CONNMARK_TM,
+       __TCA_CONNMARK_MAX
+};
+#define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_csum.h b/lib/libdss-include/include/linux/tc_act/tc_csum.h
new file mode 100644 (file)
index 0000000..a047c49
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef __LINUX_TC_CSUM_H
+#define __LINUX_TC_CSUM_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_CSUM 16
+
+enum {
+       TCA_CSUM_UNSPEC,
+       TCA_CSUM_PARMS,
+       TCA_CSUM_TM,
+       __TCA_CSUM_MAX
+};
+#define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1)
+
+enum {
+       TCA_CSUM_UPDATE_FLAG_IPV4HDR = 1,
+       TCA_CSUM_UPDATE_FLAG_ICMP    = 2,
+       TCA_CSUM_UPDATE_FLAG_IGMP    = 4,
+       TCA_CSUM_UPDATE_FLAG_TCP     = 8,
+       TCA_CSUM_UPDATE_FLAG_UDP     = 16,
+       TCA_CSUM_UPDATE_FLAG_UDPLITE = 32
+};
+
+struct tc_csum {
+       tc_gen;
+
+       __u32 update_flags;
+};
+
+#endif /* __LINUX_TC_CSUM_H */
diff --git a/lib/libdss-include/include/linux/tc_act/tc_defact.h b/lib/libdss-include/include/linux/tc_act/tc_defact.h
new file mode 100644 (file)
index 0000000..17dddb4
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_TC_DEF_H
+#define __LINUX_TC_DEF_H
+
+#include <linux/pkt_cls.h>
+
+struct tc_defact {
+       tc_gen;
+};
+
+enum {
+       TCA_DEF_UNSPEC,
+       TCA_DEF_TM,
+       TCA_DEF_PARMS,
+       TCA_DEF_DATA,
+       __TCA_DEF_MAX
+};
+#define TCA_DEF_MAX (__TCA_DEF_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_gact.h b/lib/libdss-include/include/linux/tc_act/tc_gact.h
new file mode 100644 (file)
index 0000000..f7bf94e
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef __LINUX_TC_GACT_H
+#define __LINUX_TC_GACT_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_GACT 5
+struct tc_gact {
+       tc_gen;
+
+};
+
+struct tc_gact_p {
+#define PGACT_NONE              0
+#define PGACT_NETRAND           1
+#define PGACT_DETERM            2
+#define MAX_RAND                (PGACT_DETERM + 1 )
+       __u16                 ptype;
+       __u16                 pval;
+       int                   paction;
+};
+enum {
+       TCA_GACT_UNSPEC,
+       TCA_GACT_TM,
+       TCA_GACT_PARMS,
+       TCA_GACT_PROB,
+       __TCA_GACT_MAX
+};
+#define TCA_GACT_MAX (__TCA_GACT_MAX - 1)
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_ipt.h b/lib/libdss-include/include/linux/tc_act/tc_ipt.h
new file mode 100644 (file)
index 0000000..130aaad
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __LINUX_TC_IPT_H
+#define __LINUX_TC_IPT_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_IPT 6
+#define TCA_ACT_XT 10
+
+enum {
+       TCA_IPT_UNSPEC,
+       TCA_IPT_TABLE,
+       TCA_IPT_HOOK,
+       TCA_IPT_INDEX,
+       TCA_IPT_CNT,
+       TCA_IPT_TM,
+       TCA_IPT_TARG,
+       __TCA_IPT_MAX
+};
+#define TCA_IPT_MAX (__TCA_IPT_MAX - 1)
+                                                                                
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_mirred.h b/lib/libdss-include/include/linux/tc_act/tc_mirred.h
new file mode 100644 (file)
index 0000000..7561750
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_TC_MIR_H
+#define __LINUX_TC_MIR_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_MIRRED 8
+#define TCA_EGRESS_REDIR 1  /* packet redirect to EGRESS*/
+#define TCA_EGRESS_MIRROR 2 /* mirror packet to EGRESS */
+#define TCA_INGRESS_REDIR 3  /* packet redirect to INGRESS*/
+#define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */
+                                                                                
+struct tc_mirred {
+       tc_gen;
+       int                     eaction;   /* one of IN/EGRESS_MIRROR/REDIR */
+       __u32                   ifindex;  /* ifindex of egress port */
+};
+                                                                                
+enum {
+       TCA_MIRRED_UNSPEC,
+       TCA_MIRRED_TM,
+       TCA_MIRRED_PARMS,
+       __TCA_MIRRED_MAX
+};
+#define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1)
+                                                                                
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_nat.h b/lib/libdss-include/include/linux/tc_act/tc_nat.h
new file mode 100644 (file)
index 0000000..6663aeb
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_TC_NAT_H
+#define __LINUX_TC_NAT_H
+
+#include <linux/pkt_cls.h>
+#include <linux/types.h>
+
+#define TCA_ACT_NAT 9
+
+enum {
+       TCA_NAT_UNSPEC,
+       TCA_NAT_PARMS,
+       TCA_NAT_TM,
+       __TCA_NAT_MAX
+};
+#define TCA_NAT_MAX (__TCA_NAT_MAX - 1)
+
+#define TCA_NAT_FLAG_EGRESS 1
+
+struct tc_nat {
+       tc_gen;
+       __be32 old_addr;
+       __be32 new_addr;
+       __be32 mask;
+       __u32 flags;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_pedit.h b/lib/libdss-include/include/linux/tc_act/tc_pedit.h
new file mode 100644 (file)
index 0000000..716cfab
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __LINUX_TC_PED_H
+#define __LINUX_TC_PED_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_PEDIT 7
+
+enum {
+       TCA_PEDIT_UNSPEC,
+       TCA_PEDIT_TM,
+       TCA_PEDIT_PARMS,
+       __TCA_PEDIT_MAX
+};
+#define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1)
+                                                                                
+struct tc_pedit_key {
+       __u32           mask;  /* AND */
+       __u32           val;   /*XOR */
+       __u32           off;  /*offset */
+       __u32           at;
+       __u32           offmask;
+       __u32           shift;
+};
+                                                                                
+struct tc_pedit_sel {
+       tc_gen;
+       unsigned char           nkeys;
+       unsigned char           flags;
+       struct tc_pedit_key     keys[0];
+};
+#define tc_pedit tc_pedit_sel
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_skbedit.h b/lib/libdss-include/include/linux/tc_act/tc_skbedit.h
new file mode 100644 (file)
index 0000000..7a2e910
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2008, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Author: Alexander Duyck <alexander.h.duyck@intel.com>
+ */
+
+#ifndef __LINUX_TC_SKBEDIT_H
+#define __LINUX_TC_SKBEDIT_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_SKBEDIT 11
+
+#define SKBEDIT_F_PRIORITY             0x1
+#define SKBEDIT_F_QUEUE_MAPPING                0x2
+#define SKBEDIT_F_MARK                 0x4
+
+struct tc_skbedit {
+       tc_gen;
+};
+
+enum {
+       TCA_SKBEDIT_UNSPEC,
+       TCA_SKBEDIT_TM,
+       TCA_SKBEDIT_PARMS,
+       TCA_SKBEDIT_PRIORITY,
+       TCA_SKBEDIT_QUEUE_MAPPING,
+       TCA_SKBEDIT_MARK,
+       __TCA_SKBEDIT_MAX
+};
+#define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_act/tc_vlan.h b/lib/libdss-include/include/linux/tc_act/tc_vlan.h
new file mode 100644 (file)
index 0000000..f7b8d44
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_VLAN_H
+#define __LINUX_TC_VLAN_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_VLAN 12
+
+#define TCA_VLAN_ACT_POP       1
+#define TCA_VLAN_ACT_PUSH      2
+
+struct tc_vlan {
+       tc_gen;
+       int v_action;
+};
+
+enum {
+       TCA_VLAN_UNSPEC,
+       TCA_VLAN_TM,
+       TCA_VLAN_PARMS,
+       TCA_VLAN_PUSH_VLAN_ID,
+       TCA_VLAN_PUSH_VLAN_PROTOCOL,
+       __TCA_VLAN_MAX,
+};
+#define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_ematch/tc_em_cmp.h b/lib/libdss-include/include/linux/tc_ematch/tc_em_cmp.h
new file mode 100644 (file)
index 0000000..f34bb1b
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __LINUX_TC_EM_CMP_H
+#define __LINUX_TC_EM_CMP_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+struct tcf_em_cmp {
+       __u32           val;
+       __u32           mask;
+       __u16           off;
+       __u8            align:4;
+       __u8            flags:4;
+       __u8            layer:4;
+       __u8            opnd:4;
+};
+
+enum {
+       TCF_EM_ALIGN_U8  = 1,
+       TCF_EM_ALIGN_U16 = 2,
+       TCF_EM_ALIGN_U32 = 4
+};
+
+#define TCF_EM_CMP_TRANS       1
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_ematch/tc_em_meta.h b/lib/libdss-include/include/linux/tc_ematch/tc_em_meta.h
new file mode 100644 (file)
index 0000000..b11f8ce
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef __LINUX_TC_EM_META_H
+#define __LINUX_TC_EM_META_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+enum {
+       TCA_EM_META_UNSPEC,
+       TCA_EM_META_HDR,
+       TCA_EM_META_LVALUE,
+       TCA_EM_META_RVALUE,
+       __TCA_EM_META_MAX
+};
+#define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1)
+
+struct tcf_meta_val {
+       __u16                   kind;
+       __u8                    shift;
+       __u8                    op;
+};
+
+#define TCF_META_TYPE_MASK     (0xf << 12)
+#define TCF_META_TYPE(kind)    (((kind) & TCF_META_TYPE_MASK) >> 12)
+#define TCF_META_ID_MASK       0x7ff
+#define TCF_META_ID(kind)      ((kind) & TCF_META_ID_MASK)
+
+enum {
+       TCF_META_TYPE_VAR,
+       TCF_META_TYPE_INT,
+       __TCF_META_TYPE_MAX
+};
+#define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1)
+
+enum {
+       TCF_META_ID_VALUE,
+       TCF_META_ID_RANDOM,
+       TCF_META_ID_LOADAVG_0,
+       TCF_META_ID_LOADAVG_1,
+       TCF_META_ID_LOADAVG_2,
+       TCF_META_ID_DEV,
+       TCF_META_ID_PRIORITY,
+       TCF_META_ID_PROTOCOL,
+       TCF_META_ID_PKTTYPE,
+       TCF_META_ID_PKTLEN,
+       TCF_META_ID_DATALEN,
+       TCF_META_ID_MACLEN,
+       TCF_META_ID_NFMARK,
+       TCF_META_ID_TCINDEX,
+       TCF_META_ID_RTCLASSID,
+       TCF_META_ID_RTIIF,
+       TCF_META_ID_SK_FAMILY,
+       TCF_META_ID_SK_STATE,
+       TCF_META_ID_SK_REUSE,
+       TCF_META_ID_SK_BOUND_IF,
+       TCF_META_ID_SK_REFCNT,
+       TCF_META_ID_SK_SHUTDOWN,
+       TCF_META_ID_SK_PROTO,
+       TCF_META_ID_SK_TYPE,
+       TCF_META_ID_SK_RCVBUF,
+       TCF_META_ID_SK_RMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_ALLOC,
+       TCF_META_ID_SK_OMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_QUEUED,
+       TCF_META_ID_SK_RCV_QLEN,
+       TCF_META_ID_SK_SND_QLEN,
+       TCF_META_ID_SK_ERR_QLEN,
+       TCF_META_ID_SK_FORWARD_ALLOCS,
+       TCF_META_ID_SK_SNDBUF,
+       TCF_META_ID_SK_ALLOCS,
+       __TCF_META_ID_SK_ROUTE_CAPS,    /* unimplemented but in ABI already */
+       TCF_META_ID_SK_HASH,
+       TCF_META_ID_SK_LINGERTIME,
+       TCF_META_ID_SK_ACK_BACKLOG,
+       TCF_META_ID_SK_MAX_ACK_BACKLOG,
+       TCF_META_ID_SK_PRIO,
+       TCF_META_ID_SK_RCVLOWAT,
+       TCF_META_ID_SK_RCVTIMEO,
+       TCF_META_ID_SK_SNDTIMEO,
+       TCF_META_ID_SK_SENDMSG_OFF,
+       TCF_META_ID_SK_WRITE_PENDING,
+       TCF_META_ID_VLAN_TAG,
+       TCF_META_ID_RXHASH,
+       __TCF_META_ID_MAX
+};
+#define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
+
+struct tcf_meta_hdr {
+       struct tcf_meta_val     left;
+       struct tcf_meta_val     right;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_ematch/tc_em_nbyte.h b/lib/libdss-include/include/linux/tc_ematch/tc_em_nbyte.h
new file mode 100644 (file)
index 0000000..7172cfb
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __LINUX_TC_EM_NBYTE_H
+#define __LINUX_TC_EM_NBYTE_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+struct tcf_em_nbyte {
+       __u16           off;
+       __u16           len:12;
+       __u8            layer:4;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/tc_ematch/tc_em_text.h b/lib/libdss-include/include/linux/tc_ematch/tc_em_text.h
new file mode 100644 (file)
index 0000000..5aac404
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_TC_EM_TEXT_H
+#define __LINUX_TC_EM_TEXT_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TC_EM_TEXT_ALGOSIZ     16
+
+struct tcf_em_text {
+       char            algo[TC_EM_TEXT_ALGOSIZ];
+       __u16           from_offset;
+       __u16           to_offset;
+       __u16           pattern_len;
+       __u8            from_layer:4;
+       __u8            to_layer:4;
+       __u8            pad;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/tcp.h b/lib/libdss-include/include/linux/tcp.h
new file mode 100644 (file)
index 0000000..1e9b4a6
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the TCP protocol.
+ *
+ * Version:    @(#)tcp.h       1.0.2   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_TCP_H
+#define _LINUX_TCP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include <linux/socket.h>
+
+struct tcphdr {
+       __be16  source;
+       __be16  dest;
+       __be32  seq;
+       __be32  ack_seq;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u16   res1:4,
+               doff:4,
+               fin:1,
+               syn:1,
+               rst:1,
+               psh:1,
+               ack:1,
+               urg:1,
+               ece:1,
+               cwr:1;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u16   doff:4,
+               res1:4,
+               cwr:1,
+               ece:1,
+               urg:1,
+               ack:1,
+               psh:1,
+               rst:1,
+               syn:1,
+               fin:1;
+#else
+#error "Adjust your <asm/byteorder.h> defines"
+#endif 
+       __be16  window;
+       __sum16 check;
+       __be16  urg_ptr;
+};
+
+/*
+ *     The union cast uses a gcc extension to avoid aliasing problems
+ *  (union is compatible to any of its members)
+ *  This means this part of the code is -fstrict-aliasing safe now.
+ */
+union tcp_word_hdr { 
+       struct tcphdr hdr;
+       __be32            words[5];
+}; 
+
+#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
+
+enum { 
+       TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000),
+       TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000),
+       TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000),
+       TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000),
+       TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000),
+       TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000),
+       TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000),
+       TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000),
+       TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000),
+       TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000)
+}; 
+
+/*
+ * TCP general constants
+ */
+#define TCP_MSS_DEFAULT                 536U   /* IPv4 (RFC1122, RFC2581) */
+#define TCP_MSS_DESIRED                1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
+
+/* TCP socket options */
+#define TCP_NODELAY            1       /* Turn off Nagle's algorithm. */
+#define TCP_MAXSEG             2       /* Limit MSS */
+#define TCP_CORK               3       /* Never send partially complete segments */
+#define TCP_KEEPIDLE           4       /* Start keeplives after this period */
+#define TCP_KEEPINTVL          5       /* Interval between keepalives */
+#define TCP_KEEPCNT            6       /* Number of keepalives before death */
+#define TCP_SYNCNT             7       /* Number of SYN retransmits */
+#define TCP_LINGER2            8       /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT       9       /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP       10      /* Bound advertised window */
+#define TCP_INFO               11      /* Information about this connection. */
+#define TCP_QUICKACK           12      /* Block/reenable quick acks */
+#define TCP_CONGESTION         13      /* Congestion control algorithm */
+#define TCP_MD5SIG             14      /* TCP MD5 Signature (RFC2385) */
+#define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
+#define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */
+#define TCP_USER_TIMEOUT       18      /* How long for loss retry before timeout */
+#define TCP_REPAIR             19      /* TCP sock is under repair right now */
+#define TCP_REPAIR_QUEUE       20
+#define TCP_QUEUE_SEQ          21
+#define TCP_REPAIR_OPTIONS     22
+#define TCP_FASTOPEN           23      /* Enable FastOpen on listeners */
+#define TCP_TIMESTAMP          24
+#define TCP_NOTSENT_LOWAT      25      /* limit number of unsent bytes in write queue */
+#define TCP_CC_INFO            26      /* Get Congestion Control (optional) info */
+#define TCP_SAVE_SYN           27      /* Record SYN headers for new connections */
+#define TCP_SAVED_SYN          28      /* Get SYN headers recorded for connection */
+
+struct tcp_repair_opt {
+       __u32   opt_code;
+       __u32   opt_val;
+};
+
+enum {
+       TCP_NO_QUEUE,
+       TCP_RECV_QUEUE,
+       TCP_SEND_QUEUE,
+       TCP_QUEUES_NR,
+};
+
+/* for TCP_INFO socket option */
+#define TCPI_OPT_TIMESTAMPS    1
+#define TCPI_OPT_SACK          2
+#define TCPI_OPT_WSCALE                4
+#define TCPI_OPT_ECN           8 /* ECN was negociated at TCP session init */
+#define TCPI_OPT_ECN_SEEN      16 /* we received at least one packet with ECT */
+#define TCPI_OPT_SYN_DATA      32 /* SYN-ACK acked data in SYN sent or rcvd */
+
+enum tcp_ca_state {
+       TCP_CA_Open = 0,
+#define TCPF_CA_Open   (1<<TCP_CA_Open)
+       TCP_CA_Disorder = 1,
+#define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
+       TCP_CA_CWR = 2,
+#define TCPF_CA_CWR    (1<<TCP_CA_CWR)
+       TCP_CA_Recovery = 3,
+#define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
+       TCP_CA_Loss = 4
+#define TCPF_CA_Loss   (1<<TCP_CA_Loss)
+};
+
+struct tcp_info {
+       __u8    tcpi_state;
+       __u8    tcpi_ca_state;
+       __u8    tcpi_retransmits;
+       __u8    tcpi_probes;
+       __u8    tcpi_backoff;
+       __u8    tcpi_options;
+       __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
+
+       __u32   tcpi_rto;
+       __u32   tcpi_ato;
+       __u32   tcpi_snd_mss;
+       __u32   tcpi_rcv_mss;
+
+       __u32   tcpi_unacked;
+       __u32   tcpi_sacked;
+       __u32   tcpi_lost;
+       __u32   tcpi_retrans;
+       __u32   tcpi_fackets;
+
+       /* Times. */
+       __u32   tcpi_last_data_sent;
+       __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
+       __u32   tcpi_last_data_recv;
+       __u32   tcpi_last_ack_recv;
+
+       /* Metrics. */
+       __u32   tcpi_pmtu;
+       __u32   tcpi_rcv_ssthresh;
+       __u32   tcpi_rtt;
+       __u32   tcpi_rttvar;
+       __u32   tcpi_snd_ssthresh;
+       __u32   tcpi_snd_cwnd;
+       __u32   tcpi_advmss;
+       __u32   tcpi_reordering;
+
+       __u32   tcpi_rcv_rtt;
+       __u32   tcpi_rcv_space;
+
+       __u32   tcpi_total_retrans;
+
+       __u64   tcpi_pacing_rate;
+       __u64   tcpi_max_pacing_rate;
+       __u64   tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
+       __u64   tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
+       __u32   tcpi_segs_out;       /* RFC4898 tcpEStatsPerfSegsOut */
+       __u32   tcpi_segs_in;        /* RFC4898 tcpEStatsPerfSegsIn */
+};
+
+/* for TCP_MD5SIG socket option */
+#define TCP_MD5SIG_MAXKEYLEN   80
+
+struct tcp_md5sig {
+       struct __kernel_sockaddr_storage tcpm_addr;     /* address associated */
+       __u16   __tcpm_pad1;                            /* zero */
+       __u16   tcpm_keylen;                            /* key length */
+       __u32   __tcpm_pad2;                            /* zero */
+       __u8    tcpm_key[TCP_MD5SIG_MAXKEYLEN];         /* key (binary) */
+};
+
+#endif /* _LINUX_TCP_H */
diff --git a/lib/libdss-include/include/linux/tcp_metrics.h b/lib/libdss-include/include/linux/tcp_metrics.h
new file mode 100644 (file)
index 0000000..9353392
--- /dev/null
@@ -0,0 +1,59 @@
+/* tcp_metrics.h - TCP Metrics Interface */
+
+#ifndef _LINUX_TCP_METRICS_H
+#define _LINUX_TCP_METRICS_H
+
+#include <linux/types.h>
+
+/* NETLINK_GENERIC related info
+ */
+#define TCP_METRICS_GENL_NAME          "tcp_metrics"
+#define TCP_METRICS_GENL_VERSION       0x1
+
+enum tcp_metric_index {
+       TCP_METRIC_RTT,         /* in ms units */
+       TCP_METRIC_RTTVAR,      /* in ms units */
+       TCP_METRIC_SSTHRESH,
+       TCP_METRIC_CWND,
+       TCP_METRIC_REORDERING,
+
+       TCP_METRIC_RTT_US,      /* in usec units */
+       TCP_METRIC_RTTVAR_US,   /* in usec units */
+
+       /* Always last.  */
+       __TCP_METRIC_MAX,
+};
+
+#define TCP_METRIC_MAX (__TCP_METRIC_MAX - 1)
+
+enum {
+       TCP_METRICS_ATTR_UNSPEC,
+       TCP_METRICS_ATTR_ADDR_IPV4,             /* u32 */
+       TCP_METRICS_ATTR_ADDR_IPV6,             /* binary */
+       TCP_METRICS_ATTR_AGE,                   /* msecs */
+       TCP_METRICS_ATTR_TW_TSVAL,              /* u32, raw, rcv tsval */
+       TCP_METRICS_ATTR_TW_TS_STAMP,           /* s32, sec age */
+       TCP_METRICS_ATTR_VALS,                  /* nested +1, u32 */
+       TCP_METRICS_ATTR_FOPEN_MSS,             /* u16 */
+       TCP_METRICS_ATTR_FOPEN_SYN_DROPS,       /* u16, count of drops */
+       TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS,     /* msecs age */
+       TCP_METRICS_ATTR_FOPEN_COOKIE,          /* binary */
+       TCP_METRICS_ATTR_SADDR_IPV4,            /* u32 */
+       TCP_METRICS_ATTR_SADDR_IPV6,            /* binary */
+
+       __TCP_METRICS_ATTR_MAX,
+};
+
+#define TCP_METRICS_ATTR_MAX   (__TCP_METRICS_ATTR_MAX - 1)
+
+enum {
+       TCP_METRICS_CMD_UNSPEC,
+       TCP_METRICS_CMD_GET,
+       TCP_METRICS_CMD_DEL,
+
+       __TCP_METRICS_CMD_MAX,
+};
+
+#define TCP_METRICS_CMD_MAX    (__TCP_METRICS_CMD_MAX - 1)
+
+#endif /* _LINUX_TCP_METRICS_H */
diff --git a/lib/libdss-include/include/linux/telephony.h b/lib/libdss-include/include/linux/telephony.h
new file mode 100644 (file)
index 0000000..f63afe3
--- /dev/null
@@ -0,0 +1,262 @@
+/******************************************************************************
+ *
+ *             telephony.h
+ *
+ *             Basic Linux Telephony Interface
+ *
+ *             (c) Copyright 1999-2001 Quicknet Technologies, Inc.
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ *    Authors:       Ed Okerson, <eokerson@quicknet.net>
+ *                   Greg Herlein, <gherlein@quicknet.net>
+ *
+ *    Contributors:  Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *                   David W. Erhart, <derhart@quicknet.net>
+ *
+ * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
+ * TECHNOLOGIES, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION
+ * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ *****************************************************************************/
+
+#ifndef TELEPHONY_H
+#define TELEPHONY_H
+
+#define TELEPHONY_VERSION 3013
+
+#define PHONE_VENDOR_IXJ          1
+#define PHONE_VENDOR_QUICKNET    PHONE_VENDOR_IXJ
+#define PHONE_VENDOR_VOICETRONIX  2
+#define PHONE_VENDOR_ACULAB       3
+#define PHONE_VENDOR_DIGI         4
+#define PHONE_VENDOR_FRANKLIN     5
+
+/******************************************************************************
+ *  Vendor Summary Information Area
+ *
+ *  Quicknet Technologies, Inc. - makes low density analog telephony cards
+ *    with audio compression, POTS and PSTN interfaces (www.quicknet.net)
+ *
+ *  (other vendors following this API shuld add a short description of
+ *  the telephony products they support under Linux)
+ *
+ *****************************************************************************/
+#define QTI_PHONEJACK          100
+#define QTI_LINEJACK           300
+#define QTI_PHONEJACK_LITE     400
+#define QTI_PHONEJACK_PCI      500
+#define QTI_PHONECARD          600
+
+/******************************************************************************
+*
+* The capabilities ioctls can inform you of the capabilities of each phone
+* device installed in your system.  The PHONECTL_CAPABILITIES ioctl
+* returns an integer value indicating the number of capabilities the   
+* device has.  The PHONECTL_CAPABILITIES_LIST will fill an array of 
+* capability structs with all of its capabilities.  The
+* PHONECTL_CAPABILITIES_CHECK takes a single capability struct and returns
+* a TRUE if the device has that capability, otherwise it returns false.
+* 
+******************************************************************************/
+typedef enum {
+       vendor = 0,
+       device,
+       port,
+       codec,
+       dsp
+} phone_cap;
+
+struct phone_capability {
+       char desc[80];
+       phone_cap captype;
+       int cap;
+       int handle;
+};
+
+typedef enum {
+       pots = 0,
+       pstn,
+       handset,
+       speaker
+} phone_ports;
+
+#define PHONE_CAPABILITIES              _IO  ('q', 0x80)
+#define PHONE_CAPABILITIES_LIST         _IOR ('q', 0x81, struct phone_capability *)
+#define PHONE_CAPABILITIES_CHECK        _IOW ('q', 0x82, struct phone_capability *)
+
+typedef struct {
+        char month[3];
+        char day[3];
+        char hour[3];
+        char min[3];
+        int numlen;
+        char number[11];
+        int namelen;
+        char name[80];
+} PHONE_CID;
+#define PHONE_RING                     _IO  ('q', 0x83)
+#define PHONE_HOOKSTATE                        _IO  ('q', 0x84)
+#define PHONE_MAXRINGS                 _IOW ('q', 0x85, char)
+#define PHONE_RING_CADENCE             _IOW ('q', 0x86, short)
+#define OLD_PHONE_RING_START            _IO  ('q', 0x87)
+#define PHONE_RING_START               _IOW ('q', 0x87, PHONE_CID *)
+#define PHONE_RING_STOP                        _IO  ('q', 0x88)
+
+#define USA_RING_CADENCE        0xC0C0
+
+#define PHONE_REC_CODEC                        _IOW ('q', 0x89, int)
+#define PHONE_REC_START                        _IO  ('q', 0x8A)
+#define PHONE_REC_STOP                 _IO  ('q', 0x8B)
+#define PHONE_REC_DEPTH                        _IOW ('q', 0x8C, int)
+#define PHONE_FRAME                    _IOW ('q', 0x8D, int)
+#define PHONE_REC_VOLUME               _IOW ('q', 0x8E, int)
+#define PHONE_REC_VOLUME_LINEAR                _IOW ('q', 0xDB, int)
+#define PHONE_REC_LEVEL                        _IO  ('q', 0x8F)
+
+#define PHONE_PLAY_CODEC               _IOW ('q', 0x90, int)
+#define PHONE_PLAY_START               _IO  ('q', 0x91)
+#define PHONE_PLAY_STOP                        _IO  ('q', 0x92)
+#define PHONE_PLAY_DEPTH               _IOW ('q', 0x93, int)
+#define PHONE_PLAY_VOLUME              _IOW ('q', 0x94, int)
+#define PHONE_PLAY_VOLUME_LINEAR       _IOW ('q', 0xDC, int)
+#define PHONE_PLAY_LEVEL               _IO  ('q', 0x95)
+#define PHONE_DTMF_READY               _IOR ('q', 0x96, int)
+#define PHONE_GET_DTMF                 _IOR ('q', 0x97, int)
+#define PHONE_GET_DTMF_ASCII           _IOR ('q', 0x98, int)
+#define PHONE_DTMF_OOB                 _IOW ('q', 0x99, int)
+#define PHONE_EXCEPTION                        _IOR ('q', 0x9A, int)
+#define PHONE_PLAY_TONE                        _IOW ('q', 0x9B, char)
+#define PHONE_SET_TONE_ON_TIME         _IOW ('q', 0x9C, int)
+#define PHONE_SET_TONE_OFF_TIME                _IOW ('q', 0x9D, int)
+#define PHONE_GET_TONE_ON_TIME         _IO  ('q', 0x9E)
+#define PHONE_GET_TONE_OFF_TIME                _IO  ('q', 0x9F)
+#define PHONE_GET_TONE_STATE           _IO  ('q', 0xA0)
+#define PHONE_BUSY                     _IO  ('q', 0xA1)
+#define PHONE_RINGBACK                 _IO  ('q', 0xA2)
+#define PHONE_DIALTONE                 _IO  ('q', 0xA3)
+#define PHONE_CPT_STOP                 _IO  ('q', 0xA4)
+
+#define PHONE_PSTN_SET_STATE           _IOW ('q', 0xA4, int)
+#define PHONE_PSTN_GET_STATE           _IO  ('q', 0xA5)
+
+#define PSTN_ON_HOOK           0
+#define PSTN_RINGING           1
+#define PSTN_OFF_HOOK          2
+#define PSTN_PULSE_DIAL                3
+
+/******************************************************************************
+* 
+* The wink duration is tunable with this ioctl.  The default wink duration  
+* is 320ms.  You do not need to use this ioctl if you do not require a
+* different wink duration.
+* 
+******************************************************************************/
+#define PHONE_WINK_DURATION            _IOW ('q', 0xA6, int)
+#define PHONE_WINK                     _IOW ('q', 0xAA, int)
+
+/******************************************************************************
+* 
+*  Codec Definitions
+* 
+******************************************************************************/
+typedef enum {
+       G723_63 = 1,
+       G723_53 = 2,
+       TS85 = 3,
+       TS48 = 4,
+       TS41 = 5,
+       G728 = 6,
+       G729 = 7,
+       ULAW = 8,
+       ALAW = 9,
+       LINEAR16 = 10,
+       LINEAR8 = 11,
+       WSS = 12,
+       G729B = 13
+} phone_codec;
+
+struct phone_codec_data
+{
+        phone_codec type;
+        unsigned short buf_min, buf_opt, buf_max;
+};
+
+#define PHONE_QUERY_CODEC               _IOWR ('q', 0xA7, struct phone_codec_data *)
+#define PHONE_PSTN_LINETEST             _IO ('q', 0xA8)
+
+/******************************************************************************
+* 
+* This controls the VAD/CNG functionality of G.723.1.  The driver will
+* always pass full size frames, any unused bytes will be padded with zeros,
+* and frames passed to the driver should also be padded with zeros.  The
+* frame type is encoded in the least significant two bits of the first
+* WORD of the frame as follows:
+*
+* bits 1-0     Frame Type      Data Rate               Significant Words
+* 00           0               G.723.1 6.3             12
+* 01           1               G.723.1 5.3             10
+* 10           2               VAD/CNG                  2
+* 11           3               Repeat last CNG          2 bits
+* 
+******************************************************************************/
+#define PHONE_VAD                      _IOW ('q', 0xA9, int)
+
+
+/******************************************************************************
+*
+* The exception structure allows us to multiplex multiple events onto the
+* select() exception set.  If any of these flags are set select() will
+* return with a positive indication on the exception set.  The dtmf_ready
+* bit indicates if there is data waiting in the DTMF buffer.  The
+* hookstate bit is set if there is a change in hookstate status, it does not
+* indicate the current state of the hookswitch.  The pstn_ring bit
+* indicates that the DAA on a LineJACK card has detected ring voltage on
+* the PSTN port.  The caller_id bit indicates that caller_id data has been
+* received and is available.  The pstn_wink bit indicates that the DAA on
+* the LineJACK has received a wink from the telco switch.  The f0, f1, f2
+* and f3 bits indicate that the filter has been triggered by detecting the
+* frequency programmed into that filter.
+*
+* The remaining bits should be set to zero. They will become defined over time
+* for other interface cards and their needs.
+*
+******************************************************************************/
+struct phone_except
+{
+       unsigned int dtmf_ready:1;
+       unsigned int hookstate:1;
+       unsigned int pstn_ring:1;
+       unsigned int caller_id:1;
+       unsigned int pstn_wink:1;
+       unsigned int f0:1;
+       unsigned int f1:1;
+       unsigned int f2:1;
+       unsigned int f3:1;
+       unsigned int flash:1;
+       unsigned int fc0:1;
+       unsigned int fc1:1;
+       unsigned int fc2:1;
+       unsigned int fc3:1;
+       unsigned int reserved:18;
+};
+
+union telephony_exception {
+       struct phone_except bits;
+       unsigned int bytes;
+};
+
+
+#endif         /* TELEPHONY_H */
+
diff --git a/lib/libdss-include/include/linux/termios.h b/lib/libdss-include/include/linux/termios.h
new file mode 100644 (file)
index 0000000..2acd0c1
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _LINUX_TERMIOS_H
+#define _LINUX_TERMIOS_H
+
+#include <linux/types.h>
+#include <asm/termios.h>
+
+#define NFF    5
+
+struct termiox
+{
+       __u16   x_hflag;
+       __u16   x_cflag;
+       __u16   x_rflag[NFF];
+       __u16   x_sflag;
+};
+
+#define        RTSXOFF         0x0001          /* RTS flow control on input */
+#define        CTSXON          0x0002          /* CTS flow control on output */
+#define        DTRXOFF         0x0004          /* DTR flow control on input */
+#define DSRXON         0x0008          /* DCD flow control on output */
+
+#endif
diff --git a/lib/libdss-include/include/linux/thermal.h b/lib/libdss-include/include/linux/thermal.h
new file mode 100644 (file)
index 0000000..7843937
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef _LINUX_THERMAL_H
+#define _LINUX_THERMAL_H
+
+#define THERMAL_NAME_LENGTH    20
+
+/* Adding event notification support elements */
+#define THERMAL_GENL_FAMILY_NAME                "thermal_event"
+#define THERMAL_GENL_VERSION                    0x01
+#define THERMAL_GENL_MCAST_GROUP_NAME           "thermal_mc_grp"
+
+/* Events supported by Thermal Netlink */
+enum events {
+       THERMAL_AUX0,
+       THERMAL_AUX1,
+       THERMAL_CRITICAL,
+       THERMAL_DEV_FAULT,
+};
+
+/* attributes of thermal_genl_family */
+enum {
+       THERMAL_GENL_ATTR_UNSPEC,
+       THERMAL_GENL_ATTR_EVENT,
+       __THERMAL_GENL_ATTR_MAX,
+};
+#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
+
+/* commands supported by the thermal_genl_family */
+enum {
+       THERMAL_GENL_CMD_UNSPEC,
+       THERMAL_GENL_CMD_EVENT,
+       __THERMAL_GENL_CMD_MAX,
+};
+#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
+
+#endif /* _LINUX_THERMAL_H */
diff --git a/lib/libdss-include/include/linux/time.h b/lib/libdss-include/include/linux/time.h
new file mode 100644 (file)
index 0000000..3d7a29d
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _LINUX_TIME_H
+#define _LINUX_TIME_H
+
+#include <linux/types.h>
+
+
+#ifndef _STRUCT_TIMESPEC
+#define _STRUCT_TIMESPEC
+struct timespec {
+       __kernel_time_t tv_sec;                 /* seconds */
+       long            tv_nsec;                /* nanoseconds */
+};
+#endif
+
+struct timeval {
+       __kernel_time_t         tv_sec;         /* seconds */
+       __kernel_suseconds_t    tv_usec;        /* microseconds */
+};
+
+struct timezone {
+       int     tz_minuteswest; /* minutes west of Greenwich */
+       int     tz_dsttime;     /* type of dst correction */
+};
+
+
+/*
+ * Names of the interval timers, and structure
+ * defining a timer setting:
+ */
+#define        ITIMER_REAL             0
+#define        ITIMER_VIRTUAL          1
+#define        ITIMER_PROF             2
+
+struct itimerspec {
+       struct timespec it_interval;    /* timer period */
+       struct timespec it_value;       /* timer expiration */
+};
+
+struct itimerval {
+       struct timeval it_interval;     /* timer interval */
+       struct timeval it_value;        /* current value */
+};
+
+/*
+ * The IDs of the various system clocks (for POSIX.1b interval timers):
+ */
+#define CLOCK_REALTIME                 0
+#define CLOCK_MONOTONIC                        1
+#define CLOCK_PROCESS_CPUTIME_ID       2
+#define CLOCK_THREAD_CPUTIME_ID                3
+#define CLOCK_MONOTONIC_RAW            4
+#define CLOCK_REALTIME_COARSE          5
+#define CLOCK_MONOTONIC_COARSE         6
+#define CLOCK_BOOTTIME                 7
+#define CLOCK_REALTIME_ALARM           8
+#define CLOCK_BOOTTIME_ALARM           9
+#define CLOCK_SGI_CYCLE                        10      /* Hardware specific */
+#define CLOCK_TAI                      11
+
+#define MAX_CLOCKS                     16
+#define CLOCKS_MASK                    (CLOCK_REALTIME | CLOCK_MONOTONIC)
+#define CLOCKS_MONO                    CLOCK_MONOTONIC
+
+/*
+ * The various flags for setting POSIX.1b interval timers:
+ */
+#define TIMER_ABSTIME                  0x01
+
+#endif /* _LINUX_TIME_H */
diff --git a/lib/libdss-include/include/linux/times.h b/lib/libdss-include/include/linux/times.h
new file mode 100644 (file)
index 0000000..87b6261
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_TIMES_H
+#define _LINUX_TIMES_H
+
+#include <linux/types.h>
+
+struct tms {
+       __kernel_clock_t tms_utime;
+       __kernel_clock_t tms_stime;
+       __kernel_clock_t tms_cutime;
+       __kernel_clock_t tms_cstime;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/timex.h b/lib/libdss-include/include/linux/timex.h
new file mode 100644 (file)
index 0000000..9249c77
--- /dev/null
@@ -0,0 +1,164 @@
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) David L. Mills 1993                                         *
+ *                                                                           *
+ * Permission to use, copy, modify, and distribute this software and its     *
+ * documentation for any purpose and without fee is hereby granted, provided *
+ * that the above copyright notice appears in all copies and that both the   *
+ * copyright notice and this permission notice appear in supporting          *
+ * documentation, and that the name University of Delaware not be used in    *
+ * advertising or publicity pertaining to distribution of the software       *
+ * without specific, written prior permission.  The University of Delaware   *
+ * makes no representations about the suitability this software for any      *
+ * purpose.  It is provided "as is" without express or implied warranty.     *
+ *                                                                           *
+ *****************************************************************************/
+
+/*
+ * Modification history timex.h
+ *
+ * 29 Dec 97   Russell King
+ *     Moved CLOCK_TICK_RATE, CLOCK_TICK_FACTOR and FINETUNE to asm/timex.h
+ *     for ARM machines
+ *
+ *  9 Jan 97    Adrian Sun
+ *      Shifted LATCH define to allow access to alpha machines.
+ *
+ * 26 Sep 94   David L. Mills
+ *     Added defines for hybrid phase/frequency-lock loop.
+ *
+ * 19 Mar 94   David L. Mills
+ *     Moved defines from kernel routines to header file and added new
+ *     defines for PPS phase-lock loop.
+ *
+ * 20 Feb 94   David L. Mills
+ *     Revised status codes and structures for external clock and PPS
+ *     signal discipline.
+ *
+ * 28 Nov 93   David L. Mills
+ *     Adjusted parameters to improve stability and increase poll
+ *     interval.
+ *
+ * 17 Sep 93    David L. Mills
+ *      Created file $NTP/include/sys/timex.h
+ * 07 Oct 93    Torsten Duwe
+ *      Derived linux/timex.h
+ * 1995-08-13    Torsten Duwe
+ *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
+ * 1997-08-30    Ulrich Windl
+ *      Added new constant NTP_PHASE_LIMIT
+ * 2004-08-12    Christoph Lameter
+ *      Reworked time interpolation logic
+ */
+#ifndef _LINUX_TIMEX_H
+#define _LINUX_TIMEX_H
+
+#include <linux/time.h>
+
+#define NTP_API                4       /* NTP API version */
+
+/*
+ * syscall interface - used (mainly by NTP daemon)
+ * to discipline kernel clock oscillator
+ */
+struct timex {
+       unsigned int modes;     /* mode selector */
+       __kernel_long_t offset; /* time offset (usec) */
+       __kernel_long_t freq;   /* frequency offset (scaled ppm) */
+       __kernel_long_t maxerror;/* maximum error (usec) */
+       __kernel_long_t esterror;/* estimated error (usec) */
+       int status;             /* clock command/status */
+       __kernel_long_t constant;/* pll time constant */
+       __kernel_long_t precision;/* clock precision (usec) (read only) */
+       __kernel_long_t tolerance;/* clock frequency tolerance (ppm)
+                                  * (read only)
+                                  */
+       struct timeval time;    /* (read only, except for ADJ_SETOFFSET) */
+       __kernel_long_t tick;   /* (modified) usecs between clock ticks */
+
+       __kernel_long_t ppsfreq;/* pps frequency (scaled ppm) (ro) */
+       __kernel_long_t jitter; /* pps jitter (us) (ro) */
+       int shift;              /* interval duration (s) (shift) (ro) */
+       __kernel_long_t stabil;            /* pps stability (scaled ppm) (ro) */
+       __kernel_long_t jitcnt; /* jitter limit exceeded (ro) */
+       __kernel_long_t calcnt; /* calibration intervals (ro) */
+       __kernel_long_t errcnt; /* calibration errors (ro) */
+       __kernel_long_t stbcnt; /* stability limit exceeded (ro) */
+
+       int tai;                /* TAI offset (ro) */
+
+       int  :32; int  :32; int  :32; int  :32;
+       int  :32; int  :32; int  :32; int  :32;
+       int  :32; int  :32; int  :32;
+};
+
+/*
+ * Mode codes (timex.mode)
+ */
+#define ADJ_OFFSET             0x0001  /* time offset */
+#define ADJ_FREQUENCY          0x0002  /* frequency offset */
+#define ADJ_MAXERROR           0x0004  /* maximum time error */
+#define ADJ_ESTERROR           0x0008  /* estimated time error */
+#define ADJ_STATUS             0x0010  /* clock status */
+#define ADJ_TIMECONST          0x0020  /* pll time constant */
+#define ADJ_TAI                        0x0080  /* set TAI offset */
+#define ADJ_SETOFFSET          0x0100  /* add 'time' to current time */
+#define ADJ_MICRO              0x1000  /* select microsecond resolution */
+#define ADJ_NANO               0x2000  /* select nanosecond resolution */
+#define ADJ_TICK               0x4000  /* tick value */
+
+#define ADJ_OFFSET_SINGLESHOT  0x8001  /* old-fashioned adjtime */
+#define ADJ_OFFSET_SS_READ     0xa001  /* read-only adjtime */
+
+/* NTP userland likes the MOD_ prefix better */
+#define MOD_OFFSET     ADJ_OFFSET
+#define MOD_FREQUENCY  ADJ_FREQUENCY
+#define MOD_MAXERROR   ADJ_MAXERROR
+#define MOD_ESTERROR   ADJ_ESTERROR
+#define MOD_STATUS     ADJ_STATUS
+#define MOD_TIMECONST  ADJ_TIMECONST
+#define MOD_TAI        ADJ_TAI
+#define MOD_MICRO      ADJ_MICRO
+#define MOD_NANO       ADJ_NANO
+
+
+/*
+ * Status codes (timex.status)
+ */
+#define STA_PLL                0x0001  /* enable PLL updates (rw) */
+#define STA_PPSFREQ    0x0002  /* enable PPS freq discipline (rw) */
+#define STA_PPSTIME    0x0004  /* enable PPS time discipline (rw) */
+#define STA_FLL                0x0008  /* select frequency-lock mode (rw) */
+
+#define STA_INS                0x0010  /* insert leap (rw) */
+#define STA_DEL                0x0020  /* delete leap (rw) */
+#define STA_UNSYNC     0x0040  /* clock unsynchronized (rw) */
+#define STA_FREQHOLD   0x0080  /* hold frequency (rw) */
+
+#define STA_PPSSIGNAL  0x0100  /* PPS signal present (ro) */
+#define STA_PPSJITTER  0x0200  /* PPS signal jitter exceeded (ro) */
+#define STA_PPSWANDER  0x0400  /* PPS signal wander exceeded (ro) */
+#define STA_PPSERROR   0x0800  /* PPS signal calibration error (ro) */
+
+#define STA_CLOCKERR   0x1000  /* clock hardware fault (ro) */
+#define STA_NANO       0x2000  /* resolution (0 = us, 1 = ns) (ro) */
+#define STA_MODE       0x4000  /* mode (0 = PLL, 1 = FLL) (ro) */
+#define STA_CLK                0x8000  /* clock source (0 = A, 1 = B) (ro) */
+
+/* read-only bits */
+#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
+       STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
+
+/*
+ * Clock states (time_state)
+ */
+#define TIME_OK                0       /* clock synchronized, no leap second */
+#define TIME_INS       1       /* insert leap second */
+#define TIME_DEL       2       /* delete leap second */
+#define TIME_OOP       3       /* leap second in progress */
+#define TIME_WAIT      4       /* leap second has occurred */
+#define TIME_ERROR     5       /* clock not synchronized */
+#define TIME_BAD       TIME_ERROR /* bw compat */
+
+
+#endif /* _LINUX_TIMEX_H */
diff --git a/lib/libdss-include/include/linux/tiocl.h b/lib/libdss-include/include/linux/tiocl.h
new file mode 100644 (file)
index 0000000..4756862
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_TIOCL_H
+#define _LINUX_TIOCL_H
+
+#define TIOCL_SETSEL   2       /* set a selection */
+#define        TIOCL_SELCHAR   0       /* select characters */
+#define        TIOCL_SELWORD   1       /* select whole words */
+#define        TIOCL_SELLINE   2       /* select whole lines */
+#define        TIOCL_SELPOINTER        3       /* show the pointer */
+#define        TIOCL_SELCLEAR  4       /* clear visibility of selection */
+#define        TIOCL_SELMOUSEREPORT    16      /* report beginning of selection */
+#define        TIOCL_SELBUTTONMASK     15      /* button mask for report */
+/* selection extent */
+struct tiocl_selection {
+       unsigned short xs;      /* X start */
+       unsigned short ys;      /* Y start */
+       unsigned short xe;      /* X end */
+       unsigned short ye;      /* Y end */
+       unsigned short sel_mode;        /* selection mode */
+};
+
+#define TIOCL_PASTESEL 3       /* paste previous selection */
+#define TIOCL_UNBLANKSCREEN    4       /* unblank screen */
+
+#define TIOCL_SELLOADLUT       5
+       /* set characters to be considered alphabetic when selecting */
+       /* u32[8] bit array, 4 bytes-aligned with type */
+
+/* these two don't return a value: they write it back in the type */
+#define TIOCL_GETSHIFTSTATE    6       /* write shift state */
+#define TIOCL_GETMOUSEREPORTING        7       /* write whether mouse event are reported */
+#define TIOCL_SETVESABLANK     10      /* set vesa blanking mode */
+#define TIOCL_SETKMSGREDIRECT  11      /* restrict kernel messages to a vt */
+#define TIOCL_GETFGCONSOLE     12      /* get foreground vt */
+#define TIOCL_SCROLLCONSOLE    13      /* scroll console */
+#define TIOCL_BLANKSCREEN      14      /* keep screen blank even if a key is pressed */
+#define TIOCL_BLANKEDSCREEN    15      /* return which vt was blanked */
+#define TIOCL_GETKMSGREDIRECT  17      /* get the vt the kernel messages are restricted to */
+
+#endif /* _LINUX_TIOCL_H */
diff --git a/lib/libdss-include/include/linux/tipc.h b/lib/libdss-include/include/linux/tipc.h
new file mode 100644 (file)
index 0000000..ebd3b63
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * include/uapi/linux/tipc.h: Header for TIPC socket interface
+ *
+ * Copyright (c) 2003-2006, Ericsson AB
+ * Copyright (c) 2005, 2010-2011, Wind River Systems
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_H_
+#define _LINUX_TIPC_H_
+
+#include <linux/types.h>
+#include <linux/sockios.h>
+
+/*
+ * TIPC addressing primitives
+ */
+
+struct tipc_portid {
+       __u32 ref;
+       __u32 node;
+};
+
+struct tipc_name {
+       __u32 type;
+       __u32 instance;
+};
+
+struct tipc_name_seq {
+       __u32 type;
+       __u32 lower;
+       __u32 upper;
+};
+
+static __inline__ __u32 tipc_addr(unsigned int zone,
+                             unsigned int cluster,
+                             unsigned int node)
+{
+       return (zone << 24) | (cluster << 12) | node;
+}
+
+static __inline__ unsigned int tipc_zone(__u32 addr)
+{
+       return addr >> 24;
+}
+
+static __inline__ unsigned int tipc_cluster(__u32 addr)
+{
+       return (addr >> 12) & 0xfff;
+}
+
+static __inline__ unsigned int tipc_node(__u32 addr)
+{
+       return addr & 0xfff;
+}
+
+/*
+ * Application-accessible port name types
+ */
+
+#define TIPC_CFG_SRV           0       /* configuration service name type */
+#define TIPC_TOP_SRV           1       /* topology service name type */
+#define TIPC_LINK_STATE                2       /* link state name type */
+#define TIPC_RESERVED_TYPES    64      /* lowest user-publishable name type */
+
+/*
+ * Publication scopes when binding port names and port name sequences
+ */
+
+#define TIPC_ZONE_SCOPE                1
+#define TIPC_CLUSTER_SCOPE     2
+#define TIPC_NODE_SCOPE                3
+
+/*
+ * Limiting values for messages
+ */
+
+#define TIPC_MAX_USER_MSG_SIZE 66000U
+
+/*
+ * Message importance levels
+ */
+
+#define TIPC_LOW_IMPORTANCE            0
+#define TIPC_MEDIUM_IMPORTANCE         1
+#define TIPC_HIGH_IMPORTANCE           2
+#define TIPC_CRITICAL_IMPORTANCE       3
+
+/*
+ * Msg rejection/connection shutdown reasons
+ */
+
+#define TIPC_OK                        0
+#define TIPC_ERR_NO_NAME       1
+#define TIPC_ERR_NO_PORT       2
+#define TIPC_ERR_NO_NODE       3
+#define TIPC_ERR_OVERLOAD      4
+#define TIPC_CONN_SHUTDOWN     5
+
+/*
+ * TIPC topology subscription service definitions
+ */
+
+#define TIPC_SUB_PORTS         0x01    /* filter for port availability */
+#define TIPC_SUB_SERVICE       0x02    /* filter for service availability */
+#define TIPC_SUB_CANCEL                0x04    /* cancel a subscription */
+
+#define TIPC_WAIT_FOREVER      (~0)    /* timeout for permanent subscription */
+
+struct tipc_subscr {
+       struct tipc_name_seq seq;       /* name sequence of interest */
+       __u32 timeout;                  /* subscription duration (in ms) */
+       __u32 filter;                   /* bitmask of filter options */
+       char usr_handle[8];             /* available for subscriber use */
+};
+
+#define TIPC_PUBLISHED         1       /* publication event */
+#define TIPC_WITHDRAWN         2       /* withdraw event */
+#define TIPC_SUBSCR_TIMEOUT    3       /* subscription timeout event */
+
+struct tipc_event {
+       __u32 event;                    /* event type */
+       __u32 found_lower;              /* matching name seq instances */
+       __u32 found_upper;              /*    "      "    "     "      */
+       struct tipc_portid port;        /* associated port */
+       struct tipc_subscr s;           /* associated subscription */
+};
+
+/*
+ * Socket API
+ */
+
+#ifndef AF_TIPC
+#define AF_TIPC                30
+#endif
+
+#ifndef PF_TIPC
+#define PF_TIPC                AF_TIPC
+#endif
+
+#ifndef SOL_TIPC
+#define SOL_TIPC       271
+#endif
+
+#define TIPC_ADDR_NAMESEQ      1
+#define TIPC_ADDR_MCAST                1
+#define TIPC_ADDR_NAME         2
+#define TIPC_ADDR_ID           3
+
+struct sockaddr_tipc {
+       unsigned short family;
+       unsigned char  addrtype;
+       signed   char  scope;
+       union {
+               struct tipc_portid id;
+               struct tipc_name_seq nameseq;
+               struct {
+                       struct tipc_name name;
+                       __u32 domain;
+               } name;
+       } addr;
+};
+
+/*
+ * Ancillary data objects supported by recvmsg()
+ */
+
+#define TIPC_ERRINFO   1       /* error info */
+#define TIPC_RETDATA   2       /* returned data */
+#define TIPC_DESTNAME  3       /* destination name */
+
+/*
+ * TIPC-specific socket option values
+ */
+
+#define TIPC_IMPORTANCE                127     /* Default: TIPC_LOW_IMPORTANCE */
+#define TIPC_SRC_DROPPABLE     128     /* Default: based on socket type */
+#define TIPC_DEST_DROPPABLE    129     /* Default: based on socket type */
+#define TIPC_CONN_TIMEOUT      130     /* Default: 8000 (ms)  */
+#define TIPC_NODE_RECVQ_DEPTH  131     /* Default: none (read only) */
+#define TIPC_SOCK_RECVQ_DEPTH  132     /* Default: none (read only) */
+
+/*
+ * Maximum sizes of TIPC bearer-related names (including terminating NULL)
+ * The string formatting for each name element is:
+ * media: media
+ * interface: media:interface name
+ * link: Z.C.N:interface-Z.C.N:interface
+ *
+ */
+
+#define TIPC_MAX_MEDIA_NAME    16
+#define TIPC_MAX_IF_NAME       16
+#define TIPC_MAX_BEARER_NAME   32
+#define TIPC_MAX_LINK_NAME     60
+
+#define SIOCGETLINKNAME                SIOCPROTOPRIVATE
+
+struct tipc_sioc_ln_req {
+       __u32 peer;
+       __u32 bearer_id;
+       char linkname[TIPC_MAX_LINK_NAME];
+};
+#endif
diff --git a/lib/libdss-include/include/linux/tipc_config.h b/lib/libdss-include/include/linux/tipc_config.h
new file mode 100644 (file)
index 0000000..89f667c
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+ * include/uapi/linux/tipc_config.h: Header for TIPC configuration interface
+ *
+ * Copyright (c) 2003-2006, Ericsson AB
+ * Copyright (c) 2005-2007, 2010-2011, Wind River Systems
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_CONFIG_H_
+#define _LINUX_TIPC_CONFIG_H_
+
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/tipc.h>
+#include <asm/byteorder.h>
+
+#include <arpa/inet.h> /* for ntohs etc. */
+
+/*
+ * Configuration
+ *
+ * All configuration management messaging involves sending a request message
+ * to the TIPC configuration service on a node, which sends a reply message
+ * back.  (In the future multi-message replies may be supported.)
+ *
+ * Both request and reply messages consist of a transport header and payload.
+ * The transport header contains info about the desired operation;
+ * the payload consists of zero or more type/length/value (TLV) items
+ * which specify parameters or results for the operation.
+ *
+ * For many operations, the request and reply messages have a fixed number
+ * of TLVs (usually zero or one); however, some reply messages may return
+ * a variable number of TLVs.  A failed request is denoted by the presence
+ * of an "error string" TLV in the reply message instead of the TLV(s) the
+ * reply should contain if the request succeeds.
+ */
+
+/*
+ * Public commands:
+ * May be issued by any process.
+ * Accepted by own node, or by remote node only if remote management enabled.
+ */
+
+#define  TIPC_CMD_NOOP              0x0000    /* tx none, rx none */
+#define  TIPC_CMD_GET_NODES         0x0001    /* tx net_addr, rx node_info(s) */
+#define  TIPC_CMD_GET_MEDIA_NAMES   0x0002    /* tx none, rx media_name(s) */
+#define  TIPC_CMD_GET_BEARER_NAMES  0x0003    /* tx none, rx bearer_name(s) */
+#define  TIPC_CMD_GET_LINKS         0x0004    /* tx net_addr, rx link_info(s) */
+#define  TIPC_CMD_SHOW_NAME_TABLE   0x0005    /* tx name_tbl_query, rx ultra_string */
+#define  TIPC_CMD_SHOW_PORTS        0x0006    /* tx none, rx ultra_string */
+#define  TIPC_CMD_SHOW_LINK_STATS   0x000B    /* tx link_name, rx ultra_string */
+#define  TIPC_CMD_SHOW_STATS        0x000F    /* tx unsigned, rx ultra_string */
+
+/*
+ * Protected commands:
+ * May only be issued by "network administration capable" process.
+ * Accepted by own node, or by remote node only if remote management enabled
+ * and this node is zone manager.
+ */
+
+#define  TIPC_CMD_GET_REMOTE_MNG    0x4003    /* tx none, rx unsigned */
+#define  TIPC_CMD_GET_MAX_PORTS     0x4004    /* tx none, rx unsigned */
+#define  TIPC_CMD_GET_MAX_PUBL      0x4005    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_SUBSCR    0x4006    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_ZONES     0x4007    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_CLUSTERS  0x4008    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_NODES     0x4009    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_SLAVES    0x400A    /* obsoleted */
+#define  TIPC_CMD_GET_NETID         0x400B    /* tx none, rx unsigned */
+
+#define  TIPC_CMD_ENABLE_BEARER     0x4101    /* tx bearer_config, rx none */
+#define  TIPC_CMD_DISABLE_BEARER    0x4102    /* tx bearer_name, rx none */
+#define  TIPC_CMD_SET_LINK_TOL      0x4107    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LINK_PRI      0x4108    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LINK_WINDOW   0x4109    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LOG_SIZE      0x410A    /* obsoleted */
+#define  TIPC_CMD_DUMP_LOG          0x410B    /* obsoleted */
+#define  TIPC_CMD_RESET_LINK_STATS  0x410C    /* tx link_name, rx none */
+
+/*
+ * Private commands:
+ * May only be issued by "network administration capable" process.
+ * Accepted by own node only; cannot be used on a remote node.
+ */
+
+#define  TIPC_CMD_SET_NODE_ADDR     0x8001    /* tx net_addr, rx none */
+#define  TIPC_CMD_SET_REMOTE_MNG    0x8003    /* tx unsigned, rx none */
+#define  TIPC_CMD_SET_MAX_PORTS     0x8004    /* tx unsigned, rx none */
+#define  TIPC_CMD_SET_MAX_PUBL      0x8005    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_SUBSCR    0x8006    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_ZONES     0x8007    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_CLUSTERS  0x8008    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_NODES     0x8009    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_SLAVES    0x800A    /* obsoleted */
+#define  TIPC_CMD_SET_NETID         0x800B    /* tx unsigned, rx none */
+
+/*
+ * Reserved commands:
+ * May not be issued by any process.
+ * Used internally by TIPC.
+ */
+
+#define  TIPC_CMD_NOT_NET_ADMIN     0xC001    /* tx none, rx none */
+
+/*
+ * TLV types defined for TIPC
+ */
+
+#define TIPC_TLV_NONE          0       /* no TLV present */
+#define TIPC_TLV_VOID          1       /* empty TLV (0 data bytes)*/
+#define TIPC_TLV_UNSIGNED      2       /* 32-bit integer */
+#define TIPC_TLV_STRING                3       /* char[128] (max) */
+#define TIPC_TLV_LARGE_STRING  4       /* char[2048] (max) */
+#define TIPC_TLV_ULTRA_STRING  5       /* char[32768] (max) */
+
+#define TIPC_TLV_ERROR_STRING  16      /* char[128] containing "error code" */
+#define TIPC_TLV_NET_ADDR      17      /* 32-bit integer denoting <Z.C.N> */
+#define TIPC_TLV_MEDIA_NAME    18      /* char[TIPC_MAX_MEDIA_NAME] */
+#define TIPC_TLV_BEARER_NAME   19      /* char[TIPC_MAX_BEARER_NAME] */
+#define TIPC_TLV_LINK_NAME     20      /* char[TIPC_MAX_LINK_NAME] */
+#define TIPC_TLV_NODE_INFO     21      /* struct tipc_node_info */
+#define TIPC_TLV_LINK_INFO     22      /* struct tipc_link_info */
+#define TIPC_TLV_BEARER_CONFIG 23      /* struct tipc_bearer_config */
+#define TIPC_TLV_LINK_CONFIG   24      /* struct tipc_link_config */
+#define TIPC_TLV_NAME_TBL_QUERY        25      /* struct tipc_name_table_query */
+#define TIPC_TLV_PORT_REF      26      /* 32-bit port reference */
+
+/*
+ * Link priority limits (min, default, max, media default)
+ */
+
+#define TIPC_MIN_LINK_PRI      0
+#define TIPC_DEF_LINK_PRI      10
+#define TIPC_MAX_LINK_PRI      31
+#define TIPC_MEDIA_LINK_PRI    (TIPC_MAX_LINK_PRI + 1)
+
+/*
+ * Link tolerance limits (min, default, max), in ms
+ */
+
+#define TIPC_MIN_LINK_TOL 50
+#define TIPC_DEF_LINK_TOL 1500
+#define TIPC_MAX_LINK_TOL 30000
+
+#if (TIPC_MIN_LINK_TOL < 16)
+#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
+#endif
+
+/*
+ * Link window limits (min, default, max), in packets
+ */
+
+#define TIPC_MIN_LINK_WIN 16
+#define TIPC_DEF_LINK_WIN 50
+#define TIPC_MAX_LINK_WIN 8191
+
+
+struct tipc_node_info {
+       __be32 addr;                    /* network address of node */
+       __be32 up;                      /* 0=down, 1= up */
+};
+
+struct tipc_link_info {
+       __be32 dest;                    /* network address of peer node */
+       __be32 up;                      /* 0=down, 1=up */
+       char str[TIPC_MAX_LINK_NAME];   /* link name */
+};
+
+struct tipc_bearer_config {
+       __be32 priority;                /* Range [1,31]. Override per link  */
+       __be32 disc_domain;             /* <Z.C.N> describing desired nodes */
+       char name[TIPC_MAX_BEARER_NAME];
+};
+
+struct tipc_link_config {
+       __be32 value;
+       char name[TIPC_MAX_LINK_NAME];
+};
+
+#define TIPC_NTQ_ALLTYPES 0x80000000
+
+struct tipc_name_table_query {
+       __be32 depth;   /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */
+       __be32 type;    /* {t,l,u} info ignored if high bit of "depth" is set */
+       __be32 lowbound; /* (i.e. displays all entries of name table) */
+       __be32 upbound;
+};
+
+/*
+ * The error string TLV is a null-terminated string describing the cause
+ * of the request failure.  To simplify error processing (and to save space)
+ * the first character of the string can be a special error code character
+ * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason.
+ */
+
+#define TIPC_CFG_TLV_ERROR      "\x80"  /* request contains incorrect TLV(s) */
+#define TIPC_CFG_NOT_NET_ADMIN  "\x81" /* must be network administrator */
+#define TIPC_CFG_NOT_ZONE_MSTR "\x82"  /* must be zone master */
+#define TIPC_CFG_NO_REMOTE     "\x83"  /* remote management not enabled */
+#define TIPC_CFG_NOT_SUPPORTED  "\x84" /* request is not supported by TIPC */
+#define TIPC_CFG_INVALID_VALUE  "\x85"  /* request has invalid argument value */
+
+/*
+ * A TLV consists of a descriptor, followed by the TLV value.
+ * TLV descriptor fields are stored in network byte order;
+ * TLV values must also be stored in network byte order (where applicable).
+ * TLV descriptors must be aligned to addresses which are multiple of 4,
+ * so up to 3 bytes of padding may exist at the end of the TLV value area.
+ * There must not be any padding between the TLV descriptor and its value.
+ */
+
+struct tlv_desc {
+       __be16 tlv_len;         /* TLV length (descriptor + value) */
+       __be16 tlv_type;                /* TLV identifier */
+};
+
+#define TLV_ALIGNTO 4
+
+#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1))
+#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))
+#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))
+#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))
+
+static __inline__ int TLV_OK(const void *tlv, __u16 space)
+{
+       /*
+        * Would also like to check that "tlv" is a multiple of 4,
+        * but don't know how to do this in a portable way.
+        * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler
+        *   won't allow binary "&" with a pointer.
+        * - Tried casting "tlv" to integer type, but causes warning about size
+        *   mismatch when pointer is bigger than chosen type (int, long, ...).
+        */
+
+       return (space >= TLV_SPACE(0)) &&
+               (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space);
+}
+
+static __inline__ int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
+{
+       return TLV_OK(tlv, space) &&
+               (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
+}
+
+static __inline__ int TLV_GET_LEN(struct tlv_desc *tlv)
+{
+       return ntohs(tlv->tlv_len);
+}
+
+static __inline__ void TLV_SET_LEN(struct tlv_desc *tlv, __u16 len)
+{
+       tlv->tlv_len = htons(len);
+}
+
+static __inline__ int TLV_CHECK_TYPE(struct tlv_desc *tlv,  __u16 type)
+{
+       return (ntohs(tlv->tlv_type) == type);
+}
+
+static __inline__ void TLV_SET_TYPE(struct tlv_desc *tlv, __u16 type)
+{
+       tlv->tlv_type = htons(type);
+}
+
+static __inline__ int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
+{
+       struct tlv_desc *tlv_ptr;
+       int tlv_len;
+
+       tlv_len = TLV_LENGTH(len);
+       tlv_ptr = (struct tlv_desc *)tlv;
+       tlv_ptr->tlv_type = htons(type);
+       tlv_ptr->tlv_len  = htons(tlv_len);
+       if (len && data)
+               memcpy(TLV_DATA(tlv_ptr), data, tlv_len);
+       return TLV_SPACE(len);
+}
+
+/*
+ * A TLV list descriptor simplifies processing of messages
+ * containing multiple TLVs.
+ */
+
+struct tlv_list_desc {
+       struct tlv_desc *tlv_ptr;       /* ptr to current TLV */
+       __u32 tlv_space;                /* # bytes from curr TLV to list end */
+};
+
+static __inline__ void TLV_LIST_INIT(struct tlv_list_desc *list,
+                                void *data, __u32 space)
+{
+       list->tlv_ptr = (struct tlv_desc *)data;
+       list->tlv_space = space;
+}
+
+static __inline__ int TLV_LIST_EMPTY(struct tlv_list_desc *list)
+{
+       return (list->tlv_space == 0);
+}
+
+static __inline__ int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type)
+{
+       return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type);
+}
+
+static __inline__ void *TLV_LIST_DATA(struct tlv_list_desc *list)
+{
+       return TLV_DATA(list->tlv_ptr);
+}
+
+static __inline__ void TLV_LIST_STEP(struct tlv_list_desc *list)
+{
+       __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len));
+
+       list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
+       list->tlv_space -= tlv_space;
+}
+
+/*
+ * Configuration messages exchanged via NETLINK_GENERIC use the following
+ * family id, name, version and command.
+ */
+#define TIPC_GENL_NAME         "TIPC"
+#define TIPC_GENL_VERSION      0x1
+#define TIPC_GENL_CMD          0x1
+
+/*
+ * TIPC specific header used in NETLINK_GENERIC requests.
+ */
+struct tipc_genlmsghdr {
+       __u32 dest;             /* Destination address */
+       __u16 cmd;              /* Command */
+       __u16 reserved;         /* Unused */
+};
+
+#define TIPC_GENL_HDRLEN       NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
+
+/*
+ * Configuration messages exchanged via TIPC sockets use the TIPC configuration
+ * message header, which is defined below.  This structure is analogous
+ * to the Netlink message header, but fields are stored in network byte order
+ * and no padding is permitted between the header and the message data
+ * that follows.
+ */
+
+struct tipc_cfg_msg_hdr {
+       __be32 tcm_len;         /* Message length (including header) */
+       __be16 tcm_type;        /* Command type */
+       __be16 tcm_flags;       /* Additional flags */
+       char  tcm_reserved[8];  /* Unused */
+};
+
+#define TCM_F_REQUEST  0x1     /* Flag: Request message */
+#define TCM_F_MORE     0x2     /* Flag: Message to be continued */
+
+#define TCM_ALIGN(datalen)  (((datalen)+3) & ~3)
+#define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen)
+#define TCM_SPACE(datalen)  (TCM_ALIGN(TCM_LENGTH(datalen)))
+#define TCM_DATA(tcm_hdr)   ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0)))
+
+static __inline__ int TCM_SET(void *msg, __u16 cmd, __u16 flags,
+                         void *data, __u16 data_len)
+{
+       struct tipc_cfg_msg_hdr *tcm_hdr;
+       int msg_len;
+
+       msg_len = TCM_LENGTH(data_len);
+       tcm_hdr = (struct tipc_cfg_msg_hdr *)msg;
+       tcm_hdr->tcm_len   = htonl(msg_len);
+       tcm_hdr->tcm_type  = htons(cmd);
+       tcm_hdr->tcm_flags = htons(flags);
+       if (data_len && data)
+               memcpy(TCM_DATA(msg), data, data_len);
+       return TCM_SPACE(data_len);
+}
+
+#endif
diff --git a/lib/libdss-include/include/linux/tipc_netlink.h b/lib/libdss-include/include/linux/tipc_netlink.h
new file mode 100644 (file)
index 0000000..d4c8f14
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2014, Ericsson AB
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_NETLINK_H_
+#define _LINUX_TIPC_NETLINK_H_
+
+#define TIPC_GENL_V2_NAME      "TIPCv2"
+#define TIPC_GENL_V2_VERSION   0x1
+
+/* Netlink commands */
+enum {
+       TIPC_NL_UNSPEC,
+       TIPC_NL_LEGACY,
+       TIPC_NL_BEARER_DISABLE,
+       TIPC_NL_BEARER_ENABLE,
+       TIPC_NL_BEARER_GET,
+       TIPC_NL_BEARER_SET,
+       TIPC_NL_SOCK_GET,
+       TIPC_NL_PUBL_GET,
+       TIPC_NL_LINK_GET,
+       TIPC_NL_LINK_SET,
+       TIPC_NL_LINK_RESET_STATS,
+       TIPC_NL_MEDIA_GET,
+       TIPC_NL_MEDIA_SET,
+       TIPC_NL_NODE_GET,
+       TIPC_NL_NET_GET,
+       TIPC_NL_NET_SET,
+       TIPC_NL_NAME_TABLE_GET,
+
+       __TIPC_NL_CMD_MAX,
+       TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
+};
+
+/* Top level netlink attributes */
+enum {
+       TIPC_NLA_UNSPEC,
+       TIPC_NLA_BEARER,                /* nest */
+       TIPC_NLA_SOCK,                  /* nest */
+       TIPC_NLA_PUBL,                  /* nest */
+       TIPC_NLA_LINK,                  /* nest */
+       TIPC_NLA_MEDIA,                 /* nest */
+       TIPC_NLA_NODE,                  /* nest */
+       TIPC_NLA_NET,                   /* nest */
+       TIPC_NLA_NAME_TABLE,            /* nest */
+
+       __TIPC_NLA_MAX,
+       TIPC_NLA_MAX = __TIPC_NLA_MAX - 1
+};
+
+/* Bearer info */
+enum {
+       TIPC_NLA_BEARER_UNSPEC,
+       TIPC_NLA_BEARER_NAME,           /* string */
+       TIPC_NLA_BEARER_PROP,           /* nest */
+       TIPC_NLA_BEARER_DOMAIN,         /* u32 */
+       TIPC_NLA_BEARER_UDP_OPTS,       /* nest */
+
+       __TIPC_NLA_BEARER_MAX,
+       TIPC_NLA_BEARER_MAX = __TIPC_NLA_BEARER_MAX - 1
+};
+
+enum {
+       TIPC_NLA_UDP_UNSPEC,
+       TIPC_NLA_UDP_LOCAL,             /* sockaddr_storage */
+       TIPC_NLA_UDP_REMOTE,            /* sockaddr_storage */
+
+       __TIPC_NLA_UDP_MAX,
+       TIPC_NLA_UDP_MAX = __TIPC_NLA_UDP_MAX - 1
+};
+/* Socket info */
+enum {
+       TIPC_NLA_SOCK_UNSPEC,
+       TIPC_NLA_SOCK_ADDR,             /* u32 */
+       TIPC_NLA_SOCK_REF,              /* u32 */
+       TIPC_NLA_SOCK_CON,              /* nest */
+       TIPC_NLA_SOCK_HAS_PUBL,         /* flag */
+
+       __TIPC_NLA_SOCK_MAX,
+       TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
+};
+
+/* Link info */
+enum {
+       TIPC_NLA_LINK_UNSPEC,
+       TIPC_NLA_LINK_NAME,             /* string */
+       TIPC_NLA_LINK_DEST,             /* u32 */
+       TIPC_NLA_LINK_MTU,              /* u32 */
+       TIPC_NLA_LINK_BROADCAST,        /* flag */
+       TIPC_NLA_LINK_UP,               /* flag */
+       TIPC_NLA_LINK_ACTIVE,           /* flag */
+       TIPC_NLA_LINK_PROP,             /* nest */
+       TIPC_NLA_LINK_STATS,            /* nest */
+       TIPC_NLA_LINK_RX,               /* u32 */
+       TIPC_NLA_LINK_TX,               /* u32 */
+
+       __TIPC_NLA_LINK_MAX,
+       TIPC_NLA_LINK_MAX = __TIPC_NLA_LINK_MAX - 1
+};
+
+/* Media info */
+enum {
+       TIPC_NLA_MEDIA_UNSPEC,
+       TIPC_NLA_MEDIA_NAME,            /* string */
+       TIPC_NLA_MEDIA_PROP,            /* nest */
+
+       __TIPC_NLA_MEDIA_MAX,
+       TIPC_NLA_MEDIA_MAX = __TIPC_NLA_MEDIA_MAX - 1
+};
+
+/* Node info */
+enum {
+       TIPC_NLA_NODE_UNSPEC,
+       TIPC_NLA_NODE_ADDR,             /* u32 */
+       TIPC_NLA_NODE_UP,               /* flag */
+
+       __TIPC_NLA_NODE_MAX,
+       TIPC_NLA_NODE_MAX = __TIPC_NLA_NODE_MAX - 1
+};
+
+/* Net info */
+enum {
+       TIPC_NLA_NET_UNSPEC,
+       TIPC_NLA_NET_ID,                /* u32 */
+       TIPC_NLA_NET_ADDR,              /* u32 */
+
+       __TIPC_NLA_NET_MAX,
+       TIPC_NLA_NET_MAX = __TIPC_NLA_NET_MAX - 1
+};
+
+/* Name table info */
+enum {
+       TIPC_NLA_NAME_TABLE_UNSPEC,
+       TIPC_NLA_NAME_TABLE_PUBL,       /* nest */
+
+       __TIPC_NLA_NAME_TABLE_MAX,
+       TIPC_NLA_NAME_TABLE_MAX = __TIPC_NLA_NAME_TABLE_MAX - 1
+};
+
+/* Publication info */
+enum {
+       TIPC_NLA_PUBL_UNSPEC,
+
+       TIPC_NLA_PUBL_TYPE,             /* u32 */
+       TIPC_NLA_PUBL_LOWER,            /* u32 */
+       TIPC_NLA_PUBL_UPPER,            /* u32 */
+       TIPC_NLA_PUBL_SCOPE,            /* u32 */
+       TIPC_NLA_PUBL_NODE,             /* u32 */
+       TIPC_NLA_PUBL_REF,              /* u32 */
+       TIPC_NLA_PUBL_KEY,              /* u32 */
+
+       __TIPC_NLA_PUBL_MAX,
+       TIPC_NLA_PUBL_MAX = __TIPC_NLA_PUBL_MAX - 1
+};
+
+/* Nest, connection info */
+enum {
+       TIPC_NLA_CON_UNSPEC,
+
+       TIPC_NLA_CON_FLAG,              /* flag */
+       TIPC_NLA_CON_NODE,              /* u32 */
+       TIPC_NLA_CON_SOCK,              /* u32 */
+       TIPC_NLA_CON_TYPE,              /* u32 */
+       TIPC_NLA_CON_INST,              /* u32 */
+
+       __TIPC_NLA_CON_MAX,
+       TIPC_NLA_CON_MAX = __TIPC_NLA_CON_MAX - 1
+};
+
+/* Nest, link propreties. Valid for link, media and bearer */
+enum {
+       TIPC_NLA_PROP_UNSPEC,
+
+       TIPC_NLA_PROP_PRIO,             /* u32 */
+       TIPC_NLA_PROP_TOL,              /* u32 */
+       TIPC_NLA_PROP_WIN,              /* u32 */
+
+       __TIPC_NLA_PROP_MAX,
+       TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
+};
+
+/* Nest, statistics info */
+enum {
+       TIPC_NLA_STATS_UNSPEC,
+
+       TIPC_NLA_STATS_RX_INFO,         /* u32 */
+       TIPC_NLA_STATS_RX_FRAGMENTS,    /* u32 */
+       TIPC_NLA_STATS_RX_FRAGMENTED,   /* u32 */
+       TIPC_NLA_STATS_RX_BUNDLES,      /* u32 */
+       TIPC_NLA_STATS_RX_BUNDLED,      /* u32 */
+       TIPC_NLA_STATS_TX_INFO,         /* u32 */
+       TIPC_NLA_STATS_TX_FRAGMENTS,    /* u32 */
+       TIPC_NLA_STATS_TX_FRAGMENTED,   /* u32 */
+       TIPC_NLA_STATS_TX_BUNDLES,      /* u32 */
+       TIPC_NLA_STATS_TX_BUNDLED,      /* u32 */
+       TIPC_NLA_STATS_MSG_PROF_TOT,    /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_CNT,     /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_TOT,     /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P0,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P1,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P2,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P3,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P4,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P5,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P6,      /* u32 */
+       TIPC_NLA_STATS_RX_STATES,       /* u32 */
+       TIPC_NLA_STATS_RX_PROBES,       /* u32 */
+       TIPC_NLA_STATS_RX_NACKS,        /* u32 */
+       TIPC_NLA_STATS_RX_DEFERRED,     /* u32 */
+       TIPC_NLA_STATS_TX_STATES,       /* u32 */
+       TIPC_NLA_STATS_TX_PROBES,       /* u32 */
+       TIPC_NLA_STATS_TX_NACKS,        /* u32 */
+       TIPC_NLA_STATS_TX_ACKS,         /* u32 */
+       TIPC_NLA_STATS_RETRANSMITTED,   /* u32 */
+       TIPC_NLA_STATS_DUPLICATES,      /* u32 */
+       TIPC_NLA_STATS_LINK_CONGS,      /* u32 */
+       TIPC_NLA_STATS_MAX_QUEUE,       /* u32 */
+       TIPC_NLA_STATS_AVG_QUEUE,       /* u32 */
+
+       __TIPC_NLA_STATS_MAX,
+       TIPC_NLA_STATS_MAX = __TIPC_NLA_STATS_MAX - 1
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/toshiba.h b/lib/libdss-include/include/linux/toshiba.h
new file mode 100644 (file)
index 0000000..42f2f11
--- /dev/null
@@ -0,0 +1,63 @@
+/* toshiba.h -- Linux driver for accessing the SMM on Toshiba laptops 
+ *
+ * Copyright (c) 1996-2000  Jonathan A. Buzzard (jonathan@buzzard.org.uk)
+ * Copyright (c) 2015  Azael Avalos <coproscefalo@gmail.com>
+ *
+ * Thanks to Juergen Heinzl <juergen@monocerus.demon.co.uk> for the pointers
+ * on making sure the structure is aligned and packed.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_TOSHIBA_H
+#define _LINUX_TOSHIBA_H
+
+/*
+ * Toshiba modules paths
+ */
+
+#define TOSH_PROC              "/proc/toshiba"
+#define TOSH_DEVICE            "/dev/toshiba"
+#define TOSHIBA_ACPI_PROC      "/proc/acpi/toshiba"
+#define TOSHIBA_ACPI_DEVICE    "/dev/toshiba_acpi"
+
+/*
+ * Toshiba SMM structure
+ */
+
+typedef struct {
+       unsigned int eax;
+       unsigned int ebx __attribute__ ((packed));
+       unsigned int ecx __attribute__ ((packed));
+       unsigned int edx __attribute__ ((packed));
+       unsigned int esi __attribute__ ((packed));
+       unsigned int edi __attribute__ ((packed));
+} SMMRegisters;
+
+/*
+ * IOCTLs (0x90 - 0x91)
+ */
+
+#define TOSH_SMM               _IOWR('t', 0x90, SMMRegisters)
+/*
+ * Convenience toshiba_acpi command.
+ *
+ * The System Configuration Interface (SCI) is opened/closed internally
+ * to avoid userspace of buggy BIOSes.
+ *
+ * The toshiba_acpi module checks whether the eax register is set with
+ * SCI_GET (0xf300) or SCI_SET (0xf400), returning -EINVAL if not.
+ */
+#define TOSHIBA_ACPI_SCI       _IOWR('t', 0x91, SMMRegisters)
+
+
+#endif /* _LINUX_TOSHIBA_H */
diff --git a/lib/libdss-include/include/linux/tty.h b/lib/libdss-include/include/linux/tty.h
new file mode 100644 (file)
index 0000000..31156e5
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_TTY_H
+#define _LINUX_TTY_H
+
+/*
+ * 'tty.h' defines some structures used by tty_io.c and some defines.
+ */
+
+#define NR_LDISCS              30
+
+/* line disciplines */
+#define N_TTY          0
+#define N_SLIP         1
+#define N_MOUSE                2
+#define N_PPP          3
+#define N_STRIP                4
+#define N_AX25         5
+#define N_X25          6       /* X.25 async */
+#define N_6PACK                7
+#define N_MASC         8       /* Reserved for Mobitex module <kaz@cafe.net> */
+#define N_R3964                9       /* Reserved for Simatic R3964 module */
+#define N_PROFIBUS_FDL 10      /* Reserved for Profibus */
+#define N_IRDA         11      /* Linux IrDa - http://irda.sourceforge.net/ */
+#define N_SMSBLOCK     12      /* SMS block mode - for talking to GSM data */
+                               /* cards about SMS messages */
+#define N_HDLC         13      /* synchronous HDLC */
+#define N_SYNC_PPP     14      /* synchronous PPP */
+#define N_HCI          15      /* Bluetooth HCI UART */
+#define N_GIGASET_M101 16      /* Siemens Gigaset M101 serial DECT adapter */
+#define N_SLCAN                17      /* Serial / USB serial CAN Adaptors */
+#define N_PPS          18      /* Pulse per Second */
+#define N_V253         19      /* Codec control over voice modem */
+#define N_CAIF         20      /* CAIF protocol for talking to modems */
+#define N_GSM0710      21      /* GSM 0710 Mux */
+#define N_TI_WL                22      /* for TI's WL BT, FM, GPS combo chips */
+#define N_TRACESINK    23      /* Trace data routing for MIPI P1149.7 */
+#define N_TRACEROUTER  24      /* Trace data routing for MIPI P1149.7 */
+#define N_NCI          25      /* NFC NCI UART */
+
+#endif /* _LINUX_TTY_H */
diff --git a/lib/libdss-include/include/linux/tty_flags.h b/lib/libdss-include/include/linux/tty_flags.h
new file mode 100644 (file)
index 0000000..072e41e
--- /dev/null
@@ -0,0 +1,85 @@
+#ifndef _LINUX_TTY_FLAGS_H
+#define _LINUX_TTY_FLAGS_H
+
+/*
+ * Definitions for async_struct (and serial_struct) flags field also
+ * shared by the tty_port flags structures.
+ *
+ * Define ASYNCB_* for convenient use with {test,set,clear}_bit.
+ *
+ * Bits [0..ASYNCB_LAST_USER] are userspace defined/visible/changeable
+ * [x] in the bit comments indicates the flag is defunct and no longer used.
+ */
+#define ASYNCB_HUP_NOTIFY       0 /* Notify getty on hangups and closes
+                                   * on the callout port */
+#define ASYNCB_FOURPORT                 1 /* Set OU1, OUT2 per AST Fourport settings */
+#define ASYNCB_SAK              2 /* Secure Attention Key (Orange book) */
+#define ASYNCB_SPLIT_TERMIOS    3 /* [x] Separate termios for dialin/callout */
+#define ASYNCB_SPD_HI           4 /* Use 57600 instead of 38400 bps */
+#define ASYNCB_SPD_VHI          5 /* Use 115200 instead of 38400 bps */
+#define ASYNCB_SKIP_TEST        6 /* Skip UART test during autoconfiguration */
+#define ASYNCB_AUTO_IRQ                 7 /* Do automatic IRQ during
+                                   * autoconfiguration */
+#define ASYNCB_SESSION_LOCKOUT  8 /* [x] Lock out cua opens based on session */
+#define ASYNCB_PGRP_LOCKOUT     9 /* [x] Lock out cua opens based on pgrp */
+#define ASYNCB_CALLOUT_NOHUP   10 /* [x] Don't do hangups for cua device */
+#define ASYNCB_HARDPPS_CD      11 /* Call hardpps when CD goes high  */
+#define ASYNCB_SPD_SHI         12 /* Use 230400 instead of 38400 bps */
+#define ASYNCB_LOW_LATENCY     13 /* Request low latency behaviour */
+#define ASYNCB_BUGGY_UART      14 /* This is a buggy UART, skip some safety
+                                   * checks.  Note: can be dangerous! */
+#define ASYNCB_AUTOPROBE       15 /* [x] Port was autoprobed by PCI/PNP code */
+#define ASYNCB_MAGIC_MULTIPLIER        16 /* Use special CLK or divisor */
+#define ASYNCB_LAST_USER       16
+
+/* Internal flags used only by kernel */
+#define ASYNCB_INITIALIZED     31 /* Serial port was initialized */
+#define ASYNCB_SUSPENDED       30 /* Serial port is suspended */
+#define ASYNCB_NORMAL_ACTIVE   29 /* Normal device is active */
+#define ASYNCB_BOOT_AUTOCONF   28 /* Autoconfigure port on bootup */
+#define ASYNCB_CLOSING         27 /* Serial port is closing */
+#define ASYNCB_CTS_FLOW                26 /* Do CTS flow control */
+#define ASYNCB_CHECK_CD                25 /* i.e., CLOCAL */
+#define ASYNCB_SHARE_IRQ       24 /* for multifunction cards, no longer used */
+#define ASYNCB_CONS_FLOW       23 /* flow control for console  */
+#define ASYNCB_FIRST_KERNEL    22
+
+#define ASYNC_HUP_NOTIFY       (1U << ASYNCB_HUP_NOTIFY)
+#define ASYNC_SUSPENDED                (1U << ASYNCB_SUSPENDED)
+#define ASYNC_FOURPORT         (1U << ASYNCB_FOURPORT)
+#define ASYNC_SAK              (1U << ASYNCB_SAK)
+#define ASYNC_SPLIT_TERMIOS    (1U << ASYNCB_SPLIT_TERMIOS)
+#define ASYNC_SPD_HI           (1U << ASYNCB_SPD_HI)
+#define ASYNC_SPD_VHI          (1U << ASYNCB_SPD_VHI)
+#define ASYNC_SKIP_TEST                (1U << ASYNCB_SKIP_TEST)
+#define ASYNC_AUTO_IRQ         (1U << ASYNCB_AUTO_IRQ)
+#define ASYNC_SESSION_LOCKOUT  (1U << ASYNCB_SESSION_LOCKOUT)
+#define ASYNC_PGRP_LOCKOUT     (1U << ASYNCB_PGRP_LOCKOUT)
+#define ASYNC_CALLOUT_NOHUP    (1U << ASYNCB_CALLOUT_NOHUP)
+#define ASYNC_HARDPPS_CD       (1U << ASYNCB_HARDPPS_CD)
+#define ASYNC_SPD_SHI          (1U << ASYNCB_SPD_SHI)
+#define ASYNC_LOW_LATENCY      (1U << ASYNCB_LOW_LATENCY)
+#define ASYNC_BUGGY_UART       (1U << ASYNCB_BUGGY_UART)
+#define ASYNC_AUTOPROBE                (1U << ASYNCB_AUTOPROBE)
+#define ASYNC_MAGIC_MULTIPLIER (1U << ASYNCB_MAGIC_MULTIPLIER)
+
+#define ASYNC_FLAGS            ((1U << (ASYNCB_LAST_USER + 1)) - 1)
+#define ASYNC_DEPRECATED       (ASYNC_SESSION_LOCKOUT | ASYNC_PGRP_LOCKOUT | \
+               ASYNC_CALLOUT_NOHUP | ASYNC_AUTOPROBE)
+#define ASYNC_USR_MASK         (ASYNC_SPD_MASK|ASYNC_CALLOUT_NOHUP| \
+               ASYNC_LOW_LATENCY)
+#define ASYNC_SPD_CUST         (ASYNC_SPD_HI|ASYNC_SPD_VHI)
+#define ASYNC_SPD_WARP         (ASYNC_SPD_HI|ASYNC_SPD_SHI)
+#define ASYNC_SPD_MASK         (ASYNC_SPD_HI|ASYNC_SPD_VHI|ASYNC_SPD_SHI)
+
+#define ASYNC_INITIALIZED      (1U << ASYNCB_INITIALIZED)
+#define ASYNC_NORMAL_ACTIVE    (1U << ASYNCB_NORMAL_ACTIVE)
+#define ASYNC_BOOT_AUTOCONF    (1U << ASYNCB_BOOT_AUTOCONF)
+#define ASYNC_CLOSING          (1U << ASYNCB_CLOSING)
+#define ASYNC_CTS_FLOW         (1U << ASYNCB_CTS_FLOW)
+#define ASYNC_CHECK_CD         (1U << ASYNCB_CHECK_CD)
+#define ASYNC_SHARE_IRQ                (1U << ASYNCB_SHARE_IRQ)
+#define ASYNC_CONS_FLOW                (1U << ASYNCB_CONS_FLOW)
+#define ASYNC_INTERNAL_FLAGS   (~((1U << ASYNCB_FIRST_KERNEL) - 1))
+
+#endif
diff --git a/lib/libdss-include/include/linux/types.h b/lib/libdss-include/include/linux/types.h
new file mode 100644 (file)
index 0000000..23ea78f
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _LINUX_TYPES_H
+#define _LINUX_TYPES_H
+
+#include <asm/types.h>
+
+#ifndef __ASSEMBLY__
+
+#include <linux/posix_types.h>
+
+
+/*
+ * Below are truly Linux-specific types that should never collide with
+ * any application/library that wants linux/types.h.
+ */
+
+#ifdef __CHECKER__
+#define __bitwise__ __attribute__((bitwise))
+#else
+#define __bitwise__
+#endif
+#ifdef __CHECK_ENDIAN__
+#define __bitwise __bitwise__
+#else
+#define __bitwise
+#endif
+
+typedef __u16 __bitwise __le16;
+typedef __u16 __bitwise __be16;
+typedef __u32 __bitwise __le32;
+typedef __u32 __bitwise __be32;
+typedef __u64 __bitwise __le64;
+typedef __u64 __bitwise __be64;
+
+typedef __u16 __bitwise __sum16;
+typedef __u32 __bitwise __wsum;
+
+/*
+ * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid
+ * common 32/64-bit compat problems.
+ * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other
+ * architectures) and to 8-byte boundaries on 64-bit architectures.  The new
+ * aligned_64 type enforces 8-byte alignment so that structs containing
+ * aligned_64 values have the same alignment on 32-bit and 64-bit architectures.
+ * No conversions are necessary between 32-bit user-space and a 64-bit kernel.
+ */
+#define __aligned_u64 __u64 __attribute__((aligned(8)))
+#define __aligned_be64 __be64 __attribute__((aligned(8)))
+#define __aligned_le64 __le64 __attribute__((aligned(8)))
+
+#endif /*  __ASSEMBLY__ */
+#endif /* _LINUX_TYPES_H */
diff --git a/lib/libdss-include/include/linux/udf_fs_i.h b/lib/libdss-include/include/linux/udf_fs_i.h
new file mode 100644 (file)
index 0000000..3536965
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * udf_fs_i.h
+ *
+ * This file is intended for the Linux kernel/module. 
+ *
+ * COPYRIGHT
+ *     This file is distributed under the terms of the GNU General Public
+ *     License (GPL). Copies of the GPL can be obtained from:
+ *             ftp://prep.ai.mit.edu/pub/gnu/GPL
+ *     Each contributing author retains all rights to their own work.
+ */
+#ifndef _UDF_FS_I_H
+#define _UDF_FS_I_H 1
+
+/* exported IOCTLs, we have 'l', 0x40-0x7f */
+#define UDF_GETEASIZE   _IOR('l', 0x40, int)
+#define UDF_GETEABLOCK  _IOR('l', 0x41, void *)
+#define UDF_GETVOLIDENT _IOR('l', 0x42, void *)
+#define UDF_RELOCATE_BLOCKS _IOWR('l', 0x43, long)
+
+#endif /* _UDF_FS_I_H */
diff --git a/lib/libdss-include/include/linux/udp.h b/lib/libdss-include/include/linux/udp.h
new file mode 100644 (file)
index 0000000..ab05413
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the UDP protocol.
+ *
+ * Version:    @(#)udp.h       1.0.2   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_UDP_H
+#define _LINUX_UDP_H
+
+#include <linux/types.h>
+
+struct udphdr {
+       __be16  source;
+       __be16  dest;
+       __be16  len;
+       __sum16 check;
+};
+
+/* UDP socket options */
+#define UDP_CORK       1       /* Never send partially complete segments */
+#define UDP_ENCAP      100     /* Set the socket to accept encapsulated packets */
+#define UDP_NO_CHECK6_TX 101   /* Disable sending checksum for UDP6X */
+#define UDP_NO_CHECK6_RX 102   /* Disable accpeting checksum for UDP6 */
+
+/* UDP encapsulation types */
+#define UDP_ENCAP_ESPINUDP_NON_IKE     1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
+#define UDP_ENCAP_ESPINUDP     2 /* draft-ietf-ipsec-udp-encaps-06 */
+#define UDP_ENCAP_L2TPINUDP    3 /* rfc2661 */
+
+
+#endif /* _LINUX_UDP_H */
diff --git a/lib/libdss-include/include/linux/uhid.h b/lib/libdss-include/include/linux/uhid.h
new file mode 100644 (file)
index 0000000..0ef73d4
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef __UHID_H_
+#define __UHID_H_
+
+/*
+ * User-space I/O driver support for HID subsystem
+ * Copyright (c) 2012 David Herrmann
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ */
+
+/*
+ * Public header for user-space communication. We try to keep every structure
+ * aligned but to be safe we also use __attribute__((__packed__)). Therefore,
+ * the communication should be ABI compatible even between architectures.
+ */
+
+#include <linux/input.h>
+#include <linux/types.h>
+#include <linux/hid.h>
+
+enum uhid_event_type {
+       __UHID_LEGACY_CREATE,
+       UHID_DESTROY,
+       UHID_START,
+       UHID_STOP,
+       UHID_OPEN,
+       UHID_CLOSE,
+       UHID_OUTPUT,
+       __UHID_LEGACY_OUTPUT_EV,
+       __UHID_LEGACY_INPUT,
+       UHID_GET_REPORT,
+       UHID_GET_REPORT_REPLY,
+       UHID_CREATE2,
+       UHID_INPUT2,
+       UHID_SET_REPORT,
+       UHID_SET_REPORT_REPLY,
+};
+
+struct uhid_create2_req {
+       __u8 name[128];
+       __u8 phys[64];
+       __u8 uniq[64];
+       __u16 rd_size;
+       __u16 bus;
+       __u32 vendor;
+       __u32 product;
+       __u32 version;
+       __u32 country;
+       __u8 rd_data[HID_MAX_DESCRIPTOR_SIZE];
+} __attribute__((__packed__));
+
+enum uhid_dev_flag {
+       UHID_DEV_NUMBERED_FEATURE_REPORTS                       = (1ULL << 0),
+       UHID_DEV_NUMBERED_OUTPUT_REPORTS                        = (1ULL << 1),
+       UHID_DEV_NUMBERED_INPUT_REPORTS                         = (1ULL << 2),
+};
+
+struct uhid_start_req {
+       __u64 dev_flags;
+};
+
+#define UHID_DATA_MAX 4096
+
+enum uhid_report_type {
+       UHID_FEATURE_REPORT,
+       UHID_OUTPUT_REPORT,
+       UHID_INPUT_REPORT,
+};
+
+struct uhid_input2_req {
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_output_req {
+       __u8 data[UHID_DATA_MAX];
+       __u16 size;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+struct uhid_get_report_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+struct uhid_get_report_reply_req {
+       __u32 id;
+       __u16 err;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_set_report_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_set_report_reply_req {
+       __u32 id;
+       __u16 err;
+} __attribute__((__packed__));
+
+/*
+ * Compat Layer
+ * All these commands and requests are obsolete. You should avoid using them in
+ * new code. We support them for backwards-compatibility, but you might not get
+ * access to new feature in case you use them.
+ */
+
+enum uhid_legacy_event_type {
+       UHID_CREATE                     = __UHID_LEGACY_CREATE,
+       UHID_OUTPUT_EV                  = __UHID_LEGACY_OUTPUT_EV,
+       UHID_INPUT                      = __UHID_LEGACY_INPUT,
+       UHID_FEATURE                    = UHID_GET_REPORT,
+       UHID_FEATURE_ANSWER             = UHID_GET_REPORT_REPLY,
+};
+
+/* Obsolete! Use UHID_CREATE2. */
+struct uhid_create_req {
+       __u8 name[128];
+       __u8 phys[64];
+       __u8 uniq[64];
+       __u8 *rd_data;
+       __u16 rd_size;
+
+       __u16 bus;
+       __u32 vendor;
+       __u32 product;
+       __u32 version;
+       __u32 country;
+} __attribute__((__packed__));
+
+/* Obsolete! Use UHID_INPUT2. */
+struct uhid_input_req {
+       __u8 data[UHID_DATA_MAX];
+       __u16 size;
+} __attribute__((__packed__));
+
+/* Obsolete! Kernel uses UHID_OUTPUT exclusively now. */
+struct uhid_output_ev_req {
+       __u16 type;
+       __u16 code;
+       __s32 value;
+} __attribute__((__packed__));
+
+/* Obsolete! Kernel uses ABI compatible UHID_GET_REPORT. */
+struct uhid_feature_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+/* Obsolete! Use ABI compatible UHID_GET_REPORT_REPLY. */
+struct uhid_feature_answer_req {
+       __u32 id;
+       __u16 err;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+/*
+ * UHID Events
+ * All UHID events from and to the kernel are encoded as "struct uhid_event".
+ * The "type" field contains a UHID_* type identifier. All payload depends on
+ * that type and can be accessed via ev->u.XYZ accordingly.
+ * If user-space writes short events, they're extended with 0s by the kernel. If
+ * the kernel writes short events, user-space shall extend them with 0s.
+ */
+
+struct uhid_event {
+       __u32 type;
+
+       union {
+               struct uhid_create_req create;
+               struct uhid_input_req input;
+               struct uhid_output_req output;
+               struct uhid_output_ev_req output_ev;
+               struct uhid_feature_req feature;
+               struct uhid_get_report_req get_report;
+               struct uhid_feature_answer_req feature_answer;
+               struct uhid_get_report_reply_req get_report_reply;
+               struct uhid_create2_req create2;
+               struct uhid_input2_req input2;
+               struct uhid_set_report_req set_report;
+               struct uhid_set_report_reply_req set_report_reply;
+               struct uhid_start_req start;
+       } u;
+} __attribute__((__packed__));
+
+#endif /* __UHID_H_ */
diff --git a/lib/libdss-include/include/linux/uinput.h b/lib/libdss-include/include/linux/uinput.h
new file mode 100644 (file)
index 0000000..5eaad8a
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ *  User level driver support for input subsystem
+ *
+ * Heavily based on evdev.c by Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
+ *
+ * Changes/Revisions:
+ *     0.4     01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
+ *             - add UI_GET_SYSNAME ioctl
+ *     0.3     24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
+ *             - update ff support for the changes in kernel interface
+ *             - add UINPUT_VERSION
+ *     0.2     16/10/2004 (Micah Dowty <micah@navi.cx>)
+ *             - added force feedback support
+ *             - added UI_SET_PHYS
+ *     0.1     20/06/2002
+ *             - first public version
+ */
+#ifndef __UINPUT_H_
+#define __UINPUT_H_
+
+#include <linux/types.h>
+#include <linux/input.h>
+
+#define UINPUT_VERSION         4
+
+
+struct uinput_ff_upload {
+       __u32                   request_id;
+       __s32                   retval;
+       struct ff_effect        effect;
+       struct ff_effect        old;
+};
+
+struct uinput_ff_erase {
+       __u32                   request_id;
+       __s32                   retval;
+       __u32                   effect_id;
+};
+
+/* ioctl */
+#define UINPUT_IOCTL_BASE      'U'
+#define UI_DEV_CREATE          _IO(UINPUT_IOCTL_BASE, 1)
+#define UI_DEV_DESTROY         _IO(UINPUT_IOCTL_BASE, 2)
+
+#define UI_SET_EVBIT           _IOW(UINPUT_IOCTL_BASE, 100, int)
+#define UI_SET_KEYBIT          _IOW(UINPUT_IOCTL_BASE, 101, int)
+#define UI_SET_RELBIT          _IOW(UINPUT_IOCTL_BASE, 102, int)
+#define UI_SET_ABSBIT          _IOW(UINPUT_IOCTL_BASE, 103, int)
+#define UI_SET_MSCBIT          _IOW(UINPUT_IOCTL_BASE, 104, int)
+#define UI_SET_LEDBIT          _IOW(UINPUT_IOCTL_BASE, 105, int)
+#define UI_SET_SNDBIT          _IOW(UINPUT_IOCTL_BASE, 106, int)
+#define UI_SET_FFBIT           _IOW(UINPUT_IOCTL_BASE, 107, int)
+#define UI_SET_PHYS            _IOW(UINPUT_IOCTL_BASE, 108, char*)
+#define UI_SET_SWBIT           _IOW(UINPUT_IOCTL_BASE, 109, int)
+#define UI_SET_PROPBIT         _IOW(UINPUT_IOCTL_BASE, 110, int)
+
+#define UI_BEGIN_FF_UPLOAD     _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload)
+#define UI_END_FF_UPLOAD       _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload)
+#define UI_BEGIN_FF_ERASE      _IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase)
+#define UI_END_FF_ERASE                _IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase)
+
+/**
+ * UI_GET_SYSNAME - get the sysfs name of the created uinput device
+ *
+ * @return the sysfs name of the created virtual input device.
+ * The complete sysfs path is then /sys/devices/virtual/input/--NAME--
+ * Usually, it is in the form "inputN"
+ */
+#define UI_GET_SYSNAME(len)    _IOC(_IOC_READ, UINPUT_IOCTL_BASE, 44, len)
+
+/**
+ * UI_GET_VERSION - Return version of uinput protocol
+ *
+ * This writes uinput protocol version implemented by the kernel into
+ * the integer pointed to by the ioctl argument. The protocol version
+ * is hard-coded in the kernel and is independent of the uinput device.
+ */
+#define UI_GET_VERSION         _IOR(UINPUT_IOCTL_BASE, 45, unsigned int)
+
+/*
+ * To write a force-feedback-capable driver, the upload_effect
+ * and erase_effect callbacks in input_dev must be implemented.
+ * The uinput driver will generate a fake input event when one of
+ * these callbacks are invoked. The userspace code then uses
+ * ioctls to retrieve additional parameters and send the return code.
+ * The callback blocks until this return code is sent.
+ *
+ * The described callback mechanism is only used if ff_effects_max
+ * is set.
+ *
+ * To implement upload_effect():
+ *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_UPLOAD.
+ *      A request ID will be given in 'value'.
+ *   2. Allocate a uinput_ff_upload struct, fill in request_id with
+ *      the 'value' from the EV_UINPUT event.
+ *   3. Issue a UI_BEGIN_FF_UPLOAD ioctl, giving it the
+ *      uinput_ff_upload struct. It will be filled in with the
+ *      ff_effects passed to upload_effect().
+ *   4. Perform the effect upload, and place a return code back into
+        the uinput_ff_upload struct.
+ *   5. Issue a UI_END_FF_UPLOAD ioctl, also giving it the
+ *      uinput_ff_upload_effect struct. This will complete execution
+ *      of our upload_effect() handler.
+ *
+ * To implement erase_effect():
+ *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_ERASE.
+ *      A request ID will be given in 'value'.
+ *   2. Allocate a uinput_ff_erase struct, fill in request_id with
+ *      the 'value' from the EV_UINPUT event.
+ *   3. Issue a UI_BEGIN_FF_ERASE ioctl, giving it the
+ *      uinput_ff_erase struct. It will be filled in with the
+ *      effect ID passed to erase_effect().
+ *   4. Perform the effect erasure, and place a return code back
+ *      into the uinput_ff_erase struct.
+ *   5. Issue a UI_END_FF_ERASE ioctl, also giving it the
+ *      uinput_ff_erase_effect struct. This will complete execution
+ *      of our erase_effect() handler.
+ */
+
+/*
+ * This is the new event type, used only by uinput.
+ * 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value'
+ * is the unique request ID. This number was picked
+ * arbitrarily, above EV_MAX (since the input system
+ * never sees it) but in the range of a 16-bit int.
+ */
+#define EV_UINPUT              0x0101
+#define UI_FF_UPLOAD           1
+#define UI_FF_ERASE            2
+
+#define UINPUT_MAX_NAME_SIZE   80
+struct uinput_user_dev {
+       char name[UINPUT_MAX_NAME_SIZE];
+       struct input_id id;
+       __u32 ff_effects_max;
+       __s32 absmax[ABS_CNT];
+       __s32 absmin[ABS_CNT];
+       __s32 absfuzz[ABS_CNT];
+       __s32 absflat[ABS_CNT];
+};
+#endif /* __UINPUT_H_ */
diff --git a/lib/libdss-include/include/linux/uio.h b/lib/libdss-include/include/linux/uio.h
new file mode 100644 (file)
index 0000000..d0978de
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *     Berkeley style UIO structures   -       Alan Cox 1994.
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef __LINUX_UIO_H
+#define __LINUX_UIO_H
+
+
+#include <linux/types.h>
+
+
+struct iovec
+{
+       void *iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
+       __kernel_size_t iov_len; /* Must be size_t (1003.1g) */
+};
+
+/*
+ *     UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1)
+ */
+#define UIO_FASTIOV    8
+#define UIO_MAXIOV     1024
+
+
+#endif /* __LINUX_UIO_H */
diff --git a/lib/libdss-include/include/linux/ultrasound.h b/lib/libdss-include/include/linux/ultrasound.h
new file mode 100644 (file)
index 0000000..71339dc
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef _ULTRASOUND_H_
+#define _ULTRASOUND_H_
+/*
+ *     ultrasound.h - Macros for programming the Gravis Ultrasound
+ *                     These macros are extremely device dependent
+ *                     and not portable.
+ */
+/*
+ * Copyright (C) by Hannu Savolainen 1993-1997
+ *
+ * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
+ * Version 2 (June 1991). See the "COPYING" file distributed with this software
+ * for more info.
+ */
+
+
+/*
+ *     Private events for Gravis Ultrasound (GUS)
+ *
+ *     Format:
+ *             byte 0          - SEQ_PRIVATE (0xfe)
+ *             byte 1          - Synthesizer device number (0-N)
+ *             byte 2          - Command (see below)
+ *             byte 3          - Voice number (0-31)
+ *             bytes 4 and 5   - parameter P1 (unsigned short)
+ *             bytes 6 and 7   - parameter P2 (unsigned short)
+ *
+ *     Commands:
+ *             Each command affects one voice defined in byte 3.
+ *             Unused parameters (P1 and/or P2 *MUST* be initialized to zero).
+ *             _GUS_NUMVOICES  - Sets max. number of concurrent voices (P1=14-31, default 16)
+ *             _GUS_VOICESAMPLE- ************ OBSOLETE *************
+ *             _GUS_VOICEON    - Starts voice (P1=voice mode)
+ *             _GUS_VOICEOFF   - Stops voice (no parameters)
+ *             _GUS_VOICEFADE  - Stops the voice smoothly.
+ *             _GUS_VOICEMODE  - Alters the voice mode, don't start or stop voice (P1=voice mode)
+ *             _GUS_VOICEBALA  - Sets voice balance (P1, 0=left, 7=middle and 15=right, default 7)
+ *             _GUS_VOICEFREQ  - Sets voice (sample) playback frequency (P1=Hz)
+ *             _GUS_VOICEVOL   - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off)
+ *             _GUS_VOICEVOL2  - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off)
+ *                               (Like GUS_VOICEVOL but doesn't change the hw
+ *                               volume. It just updates volume in the voice table).
+ *
+ *             _GUS_RAMPRANGE  - Sets limits for volume ramping (P1=low volume, P2=high volume)
+ *             _GUS_RAMPRATE   - Sets the speed for volume ramping (P1=scale, P2=rate)
+ *             _GUS_RAMPMODE   - Sets the volume ramping mode (P1=ramping mode)
+ *             _GUS_RAMPON     - Starts volume ramping (no parameters)
+ *             _GUS_RAMPOFF    - Stops volume ramping (no parameters)
+ *             _GUS_VOLUME_SCALE - Changes the volume calculation constants
+ *                               for all voices.
+ */
+
+#define _GUS_NUMVOICES         0x00
+#define _GUS_VOICESAMPLE       0x01    /* OBSOLETE */
+#define _GUS_VOICEON           0x02
+#define _GUS_VOICEOFF          0x03
+#define _GUS_VOICEMODE         0x04
+#define _GUS_VOICEBALA         0x05
+#define _GUS_VOICEFREQ         0x06
+#define _GUS_VOICEVOL          0x07
+#define _GUS_RAMPRANGE         0x08
+#define _GUS_RAMPRATE          0x09
+#define _GUS_RAMPMODE          0x0a
+#define _GUS_RAMPON            0x0b
+#define _GUS_RAMPOFF           0x0c
+#define _GUS_VOICEFADE         0x0d
+#define _GUS_VOLUME_SCALE      0x0e
+#define _GUS_VOICEVOL2         0x0f
+#define _GUS_VOICE_POS         0x10
+
+/*
+ *     GUS API macros
+ */
+
+#define _GUS_CMD(chn, voice, cmd, p1, p2) \
+                                       {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = SEQ_PRIVATE;\
+                                       _seqbuf[_seqbufptr+1] = (chn); _seqbuf[_seqbufptr+2] = cmd;\
+                                       _seqbuf[_seqbufptr+3] = voice;\
+                                       *(unsigned short*)&_seqbuf[_seqbufptr+4] = p1;\
+                                       *(unsigned short*)&_seqbuf[_seqbufptr+6] = p2;\
+                                       _SEQ_ADVBUF(8);}
+
+#define GUS_NUMVOICES(chn, p1)                 _GUS_CMD(chn, 0, _GUS_NUMVOICES, (p1), 0)
+#define GUS_VOICESAMPLE(chn, voice, p1)                _GUS_CMD(chn, voice, _GUS_VOICESAMPLE, (p1), 0) /* OBSOLETE */
+#define GUS_VOICEON(chn, voice, p1)            _GUS_CMD(chn, voice, _GUS_VOICEON, (p1), 0)
+#define GUS_VOICEOFF(chn, voice)               _GUS_CMD(chn, voice, _GUS_VOICEOFF, 0, 0)
+#define GUS_VOICEFADE(chn, voice)              _GUS_CMD(chn, voice, _GUS_VOICEFADE, 0, 0)
+#define GUS_VOICEMODE(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEMODE, (p1), 0)
+#define GUS_VOICEBALA(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEBALA, (p1), 0)
+#define GUS_VOICEFREQ(chn, voice, p)           _GUS_CMD(chn, voice, _GUS_VOICEFREQ, \
+                                                       (p) & 0xffff, ((p) >> 16) & 0xffff)
+#define GUS_VOICEVOL(chn, voice, p1)           _GUS_CMD(chn, voice, _GUS_VOICEVOL, (p1), 0)
+#define GUS_VOICEVOL2(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEVOL2, (p1), 0)
+#define GUS_RAMPRANGE(chn, voice, low, high)   _GUS_CMD(chn, voice, _GUS_RAMPRANGE, (low), (high))
+#define GUS_RAMPRATE(chn, voice, p1, p2)       _GUS_CMD(chn, voice, _GUS_RAMPRATE, (p1), (p2))
+#define GUS_RAMPMODE(chn, voice, p1)           _GUS_CMD(chn, voice, _GUS_RAMPMODE, (p1), 0)
+#define GUS_RAMPON(chn, voice, p1)             _GUS_CMD(chn, voice, _GUS_RAMPON, (p1), 0)
+#define GUS_RAMPOFF(chn, voice)                        _GUS_CMD(chn, voice, _GUS_RAMPOFF, 0, 0)
+#define GUS_VOLUME_SCALE(chn, voice, p1, p2)   _GUS_CMD(chn, voice, _GUS_VOLUME_SCALE, (p1), (p2))
+#define GUS_VOICE_POS(chn, voice, p)           _GUS_CMD(chn, voice, _GUS_VOICE_POS, \
+                                                       (p) & 0xffff, ((p) >> 16) & 0xffff)
+
+#endif
diff --git a/lib/libdss-include/include/linux/un.h b/lib/libdss-include/include/linux/un.h
new file mode 100644 (file)
index 0000000..3ed3e46
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_UN_H
+#define _LINUX_UN_H
+
+#include <linux/socket.h>
+
+#define UNIX_PATH_MAX  108
+
+struct sockaddr_un {
+       __kernel_sa_family_t sun_family; /* AF_UNIX */
+       char sun_path[UNIX_PATH_MAX];   /* pathname */
+};
+
+#endif /* _LINUX_UN_H */
diff --git a/lib/libdss-include/include/linux/unistd.h b/lib/libdss-include/include/linux/unistd.h
new file mode 100644 (file)
index 0000000..aa8d5b5
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef _LINUX_UNISTD_H_
+#define _LINUX_UNISTD_H_
+
+/*
+ * Include machine specific syscall numbers
+ */
+#include <asm/unistd.h>
+
+#endif /* _LINUX_UNISTD_H_ */
diff --git a/lib/libdss-include/include/linux/unix_diag.h b/lib/libdss-include/include/linux/unix_diag.h
new file mode 100644 (file)
index 0000000..1eb0b8d
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef __UNIX_DIAG_H__
+#define __UNIX_DIAG_H__
+
+#include <linux/types.h>
+
+struct unix_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   udiag_states;
+       __u32   udiag_ino;
+       __u32   udiag_show;
+       __u32   udiag_cookie[2];
+};
+
+#define UDIAG_SHOW_NAME                0x00000001      /* show name (not path) */
+#define UDIAG_SHOW_VFS         0x00000002      /* show VFS inode info */
+#define UDIAG_SHOW_PEER                0x00000004      /* show peer socket info */
+#define UDIAG_SHOW_ICONS       0x00000008      /* show pending connections */
+#define UDIAG_SHOW_RQLEN       0x00000010      /* show skb receive queue len */
+#define UDIAG_SHOW_MEMINFO     0x00000020      /* show memory info of a socket */
+
+struct unix_diag_msg {
+       __u8    udiag_family;
+       __u8    udiag_type;
+       __u8    udiag_state;
+       __u8    pad;
+
+       __u32   udiag_ino;
+       __u32   udiag_cookie[2];
+};
+
+enum {
+       /* UNIX_DIAG_NONE, standard nl API requires this attribute!  */
+       UNIX_DIAG_NAME,
+       UNIX_DIAG_VFS,
+       UNIX_DIAG_PEER,
+       UNIX_DIAG_ICONS,
+       UNIX_DIAG_RQLEN,
+       UNIX_DIAG_MEMINFO,
+       UNIX_DIAG_SHUTDOWN,
+
+       __UNIX_DIAG_MAX,
+};
+
+#define UNIX_DIAG_MAX (__UNIX_DIAG_MAX - 1)
+
+struct unix_diag_vfs {
+       __u32   udiag_vfs_ino;
+       __u32   udiag_vfs_dev;
+};
+
+struct unix_diag_rqlen {
+       __u32   udiag_rqueue;
+       __u32   udiag_wqueue;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/usb/audio.h b/lib/libdss-include/include/linux/usb/audio.h
new file mode 100644 (file)
index 0000000..210f2f5
--- /dev/null
@@ -0,0 +1,547 @@
+/*
+ * <linux/usb/audio.h> -- USB Audio definitions.
+ *
+ * Copyright (C) 2006 Thumtronics Pty Ltd.
+ * Developed for Thumtronics by Grey Innovation
+ * Ben Williamson <ben.williamson@greyinnovation.com>
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License ("GPL") version 2, as published by the Free Software Foundation.
+ *
+ * This file holds USB constants and structures defined
+ * by the USB Device Class Definition for Audio Devices.
+ * Comments below reference relevant sections of that document:
+ *
+ * http://www.usb.org/developers/devclass_docs/audio10.pdf
+ *
+ * Types and defines in this file are either specific to version 1.0 of
+ * this standard or common for newer versions.
+ */
+
+#ifndef __LINUX_USB_AUDIO_H
+#define __LINUX_USB_AUDIO_H
+
+#include <linux/types.h>
+
+/* bInterfaceProtocol values to denote the version of the standard used */
+#define UAC_VERSION_1                  0x00
+#define UAC_VERSION_2                  0x20
+
+/* A.2 Audio Interface Subclass Codes */
+#define USB_SUBCLASS_AUDIOCONTROL      0x01
+#define USB_SUBCLASS_AUDIOSTREAMING    0x02
+#define USB_SUBCLASS_MIDISTREAMING     0x03
+
+/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */
+#define UAC_HEADER                     0x01
+#define UAC_INPUT_TERMINAL             0x02
+#define UAC_OUTPUT_TERMINAL            0x03
+#define UAC_MIXER_UNIT                 0x04
+#define UAC_SELECTOR_UNIT              0x05
+#define UAC_FEATURE_UNIT               0x06
+#define UAC1_PROCESSING_UNIT           0x07
+#define UAC1_EXTENSION_UNIT            0x08
+
+/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */
+#define UAC_AS_GENERAL                 0x01
+#define UAC_FORMAT_TYPE                        0x02
+#define UAC_FORMAT_SPECIFIC            0x03
+
+/* A.7 Processing Unit Process Types */
+#define UAC_PROCESS_UNDEFINED          0x00
+#define UAC_PROCESS_UP_DOWNMIX         0x01
+#define UAC_PROCESS_DOLBY_PROLOGIC     0x02
+#define UAC_PROCESS_STEREO_EXTENDER    0x03
+#define UAC_PROCESS_REVERB             0x04
+#define UAC_PROCESS_CHORUS             0x05
+#define UAC_PROCESS_DYN_RANGE_COMP     0x06
+
+/* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */
+#define UAC_EP_GENERAL                 0x01
+
+/* A.9 Audio Class-Specific Request Codes */
+#define UAC_SET_                       0x00
+#define UAC_GET_                       0x80
+
+#define UAC__CUR                       0x1
+#define UAC__MIN                       0x2
+#define UAC__MAX                       0x3
+#define UAC__RES                       0x4
+#define UAC__MEM                       0x5
+
+#define UAC_SET_CUR                    (UAC_SET_ | UAC__CUR)
+#define UAC_GET_CUR                    (UAC_GET_ | UAC__CUR)
+#define UAC_SET_MIN                    (UAC_SET_ | UAC__MIN)
+#define UAC_GET_MIN                    (UAC_GET_ | UAC__MIN)
+#define UAC_SET_MAX                    (UAC_SET_ | UAC__MAX)
+#define UAC_GET_MAX                    (UAC_GET_ | UAC__MAX)
+#define UAC_SET_RES                    (UAC_SET_ | UAC__RES)
+#define UAC_GET_RES                    (UAC_GET_ | UAC__RES)
+#define UAC_SET_MEM                    (UAC_SET_ | UAC__MEM)
+#define UAC_GET_MEM                    (UAC_GET_ | UAC__MEM)
+
+#define UAC_GET_STAT                   0xff
+
+/* A.10 Control Selector Codes */
+
+/* A.10.1 Terminal Control Selectors */
+#define UAC_TERM_COPY_PROTECT          0x01
+
+/* A.10.2 Feature Unit Control Selectors */
+#define UAC_FU_MUTE                    0x01
+#define UAC_FU_VOLUME                  0x02
+#define UAC_FU_BASS                    0x03
+#define UAC_FU_MID                     0x04
+#define UAC_FU_TREBLE                  0x05
+#define UAC_FU_GRAPHIC_EQUALIZER       0x06
+#define UAC_FU_AUTOMATIC_GAIN          0x07
+#define UAC_FU_DELAY                   0x08
+#define UAC_FU_BASS_BOOST              0x09
+#define UAC_FU_LOUDNESS                        0x0a
+
+#define UAC_CONTROL_BIT(CS)    (1 << ((CS) - 1))
+
+/* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */
+#define UAC_UD_ENABLE                  0x01
+#define UAC_UD_MODE_SELECT             0x02
+
+/* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */
+#define UAC_DP_ENABLE                  0x01
+#define UAC_DP_MODE_SELECT             0x02
+
+/* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */
+#define UAC_3D_ENABLE                  0x01
+#define UAC_3D_SPACE                   0x02
+
+/* A.10.3.4 Reverberation Processing Unit Control Selectors */
+#define UAC_REVERB_ENABLE              0x01
+#define UAC_REVERB_LEVEL               0x02
+#define UAC_REVERB_TIME                        0x03
+#define UAC_REVERB_FEEDBACK            0x04
+
+/* A.10.3.5 Chorus Processing Unit Control Selectors */
+#define UAC_CHORUS_ENABLE              0x01
+#define UAC_CHORUS_LEVEL               0x02
+#define UAC_CHORUS_RATE                        0x03
+#define UAC_CHORUS_DEPTH               0x04
+
+/* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */
+#define UAC_DCR_ENABLE                 0x01
+#define UAC_DCR_RATE                   0x02
+#define UAC_DCR_MAXAMPL                        0x03
+#define UAC_DCR_THRESHOLD              0x04
+#define UAC_DCR_ATTACK_TIME            0x05
+#define UAC_DCR_RELEASE_TIME           0x06
+
+/* A.10.4 Extension Unit Control Selectors */
+#define UAC_XU_ENABLE                  0x01
+
+/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */
+#define UAC_MS_HEADER                  0x01
+#define UAC_MIDI_IN_JACK               0x02
+#define UAC_MIDI_OUT_JACK              0x03
+
+/* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */
+#define UAC_MS_GENERAL                 0x01
+
+/* Terminals - 2.1 USB Terminal Types */
+#define UAC_TERMINAL_UNDEFINED         0x100
+#define UAC_TERMINAL_STREAMING         0x101
+#define UAC_TERMINAL_VENDOR_SPEC       0x1FF
+
+/* Terminal Control Selectors */
+/* 4.3.2  Class-Specific AC Interface Descriptor */
+struct uac1_ac_header_descriptor {
+       __u8  bLength;                  /* 8 + n */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* UAC_MS_HEADER */
+       __le16 bcdADC;                  /* 0x0100 */
+       __le16 wTotalLength;            /* includes Unit and Terminal desc. */
+       __u8  bInCollection;            /* n */
+       __u8  baInterfaceNr[];          /* [n] */
+} __attribute__ ((packed));
+
+#define UAC_DT_AC_HEADER_SIZE(n)       (8 + (n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n)                    \
+struct uac1_ac_header_descriptor_##n {                 \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __le16 bcdADC;                                          \
+       __le16 wTotalLength;                                    \
+       __u8  bInCollection;                                    \
+       __u8  baInterfaceNr[n];                                 \
+} __attribute__ ((packed))
+
+/* 4.3.2.1 Input Terminal Descriptor */
+struct uac_input_terminal_descriptor {
+       __u8  bLength;                  /* in bytes: 12 */
+       __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
+       __u8  bDescriptorSubtype;       /* INPUT_TERMINAL descriptor subtype */
+       __u8  bTerminalID;              /* Constant uniquely terminal ID */
+       __le16 wTerminalType;           /* USB Audio Terminal Types */
+       __u8  bAssocTerminal;           /* ID of the Output Terminal associated */
+       __u8  bNrChannels;              /* Number of logical output channels */
+       __le16 wChannelConfig;
+       __u8  iChannelNames;
+       __u8  iTerminal;
+} __attribute__ ((packed));
+
+#define UAC_DT_INPUT_TERMINAL_SIZE                     12
+
+/* Terminals - 2.2 Input Terminal Types */
+#define UAC_INPUT_TERMINAL_UNDEFINED                   0x200
+#define UAC_INPUT_TERMINAL_MICROPHONE                  0x201
+#define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE          0x202
+#define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE         0x203
+#define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE         0x204
+#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY            0x205
+#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY       0x206
+
+/* Terminals - control selectors */
+
+#define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL           0x01
+
+/* 4.3.2.2 Output Terminal Descriptor */
+struct uac1_output_terminal_descriptor {
+       __u8  bLength;                  /* in bytes: 9 */
+       __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
+       __u8  bDescriptorSubtype;       /* OUTPUT_TERMINAL descriptor subtype */
+       __u8  bTerminalID;              /* Constant uniquely terminal ID */
+       __le16 wTerminalType;           /* USB Audio Terminal Types */
+       __u8  bAssocTerminal;           /* ID of the Input Terminal associated */
+       __u8  bSourceID;                /* ID of the connected Unit or Terminal*/
+       __u8  iTerminal;
+} __attribute__ ((packed));
+
+#define UAC_DT_OUTPUT_TERMINAL_SIZE                    9
+
+/* Terminals - 2.3 Output Terminal Types */
+#define UAC_OUTPUT_TERMINAL_UNDEFINED                  0x300
+#define UAC_OUTPUT_TERMINAL_SPEAKER                    0x301
+#define UAC_OUTPUT_TERMINAL_HEADPHONES                 0x302
+#define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303
+#define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER            0x304
+#define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER               0x305
+#define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER      0x306
+#define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER   0x307
+
+/* Set bControlSize = 2 as default setting */
+#define UAC_DT_FEATURE_UNIT_SIZE(ch)           (7 + ((ch) + 1) * 2)
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch)                        \
+struct uac_feature_unit_descriptor_##ch {                      \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bUnitID;                                          \
+       __u8  bSourceID;                                        \
+       __u8  bControlSize;                                     \
+       __le16 bmaControls[ch + 1];                             \
+       __u8  iFeature;                                         \
+} __attribute__ ((packed))
+
+/* 4.3.2.3 Mixer Unit Descriptor */
+struct uac_mixer_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc)
+{
+       return desc->baSourceID[desc->bNrInPins];
+}
+
+static __inline__ __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc,
+                                                 int protocol)
+{
+       if (protocol == UAC_VERSION_1)
+               return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
+                       desc->baSourceID[desc->bNrInPins + 1];
+       else
+               return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
+                       (desc->baSourceID[desc->bNrInPins + 3] << 16) |
+                       (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
+                       (desc->baSourceID[desc->bNrInPins + 1]);
+}
+
+static __inline__ __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc,
+                                               int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 3] :
+               desc->baSourceID[desc->bNrInPins + 5];
+}
+
+static __inline__ __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc,
+                                             int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               &desc->baSourceID[desc->bNrInPins + 4] :
+               &desc->baSourceID[desc->bNrInPins + 6];
+}
+
+static __inline__ __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.4 Selector Unit Descriptor */
+struct uac_selector_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUintID;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.5 Feature Unit Descriptor */
+struct uac_feature_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u8 bSourceID;
+       __u8 bControlSize;
+       __u8 bmaControls[0]; /* variable length */
+} __attribute__((packed));
+
+static __inline__ __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.6 Processing Unit Descriptors */
+struct uac_processing_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u16 wProcessType;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc)
+{
+       return desc->baSourceID[desc->bNrInPins];
+}
+
+static __inline__ __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc,
+                                                      int protocol)
+{
+       if (protocol == UAC_VERSION_1)
+               return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
+                       desc->baSourceID[desc->bNrInPins + 1];
+       else
+               return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
+                       (desc->baSourceID[desc->bNrInPins + 3] << 16) |
+                       (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
+                       (desc->baSourceID[desc->bNrInPins + 1]);
+}
+
+static __inline__ __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc,
+                                                    int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 3] :
+               desc->baSourceID[desc->bNrInPins + 5];
+}
+
+static __inline__ __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc,
+                                                   int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 4] :
+               desc->baSourceID[desc->bNrInPins + 6];
+}
+
+static __inline__ __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc,
+                                                  int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               &desc->baSourceID[desc->bNrInPins + 5] :
+               &desc->baSourceID[desc->bNrInPins + 7];
+}
+
+static __inline__ __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc,
+                                                  int protocol)
+{
+       __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
+       return *(uac_processing_unit_bmControls(desc, protocol)
+                       + control_size);
+}
+
+static __inline__ __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
+                                                int protocol)
+{
+       __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
+       return uac_processing_unit_bmControls(desc, protocol)
+                       + control_size + 1;
+}
+
+/* 4.5.2 Class-Specific AS Interface Descriptor */
+struct uac1_as_header_descriptor {
+       __u8  bLength;                  /* in bytes: 7 */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* AS_GENERAL */
+       __u8  bTerminalLink;            /* Terminal ID of connected Terminal */
+       __u8  bDelay;                   /* Delay introduced by the data path */
+       __le16 wFormatTag;              /* The Audio Data Format */
+} __attribute__ ((packed));
+
+#define UAC_DT_AS_HEADER_SIZE          7
+
+/* Formats - A.1.1 Audio Data Format Type I Codes */
+#define UAC_FORMAT_TYPE_I_UNDEFINED    0x0
+#define UAC_FORMAT_TYPE_I_PCM          0x1
+#define UAC_FORMAT_TYPE_I_PCM8         0x2
+#define UAC_FORMAT_TYPE_I_IEEE_FLOAT   0x3
+#define UAC_FORMAT_TYPE_I_ALAW         0x4
+#define UAC_FORMAT_TYPE_I_MULAW                0x5
+
+struct uac_format_type_i_continuous_descriptor {
+       __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
+       __u8  bFormatType;              /* FORMAT_TYPE_1 */
+       __u8  bNrChannels;              /* physical channels in the stream */
+       __u8  bSubframeSize;            /* */
+       __u8  bBitResolution;
+       __u8  bSamFreqType;
+       __u8  tLowerSamFreq[3];
+       __u8  tUpperSamFreq[3];
+} __attribute__ ((packed));
+
+#define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14
+
+struct uac_format_type_i_discrete_descriptor {
+       __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
+       __u8  bFormatType;              /* FORMAT_TYPE_1 */
+       __u8  bNrChannels;              /* physical channels in the stream */
+       __u8  bSubframeSize;            /* */
+       __u8  bBitResolution;
+       __u8  bSamFreqType;
+       __u8  tSamFreq[][3];
+} __attribute__ ((packed));
+
+#define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n)             \
+struct uac_format_type_i_discrete_descriptor_##n {             \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bFormatType;                                      \
+       __u8  bNrChannels;                                      \
+       __u8  bSubframeSize;                                    \
+       __u8  bBitResolution;                                   \
+       __u8  bSamFreqType;                                     \
+       __u8  tSamFreq[n][3];                                   \
+} __attribute__ ((packed))
+
+#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n)        (8 + (n * 3))
+
+struct uac_format_type_i_ext_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __u8 bSubslotSize;
+       __u8 bBitResolution;
+       __u8 bHeaderLength;
+       __u8 bControlSize;
+       __u8 bSideBandProtocol;
+} __attribute__((packed));
+
+/* Formats - Audio Data Format Type I Codes */
+
+#define UAC_FORMAT_TYPE_II_MPEG        0x1001
+#define UAC_FORMAT_TYPE_II_AC3 0x1002
+
+struct uac_format_type_ii_discrete_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __le16 wMaxBitRate;
+       __le16 wSamplesPerFrame;
+       __u8 bSamFreqType;
+       __u8 tSamFreq[][3];
+} __attribute__((packed));
+
+struct uac_format_type_ii_ext_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __u16 wMaxBitRate;
+       __u16 wSamplesPerFrame;
+       __u8 bHeaderLength;
+       __u8 bSideBandProtocol;
+} __attribute__((packed));
+
+/* type III */
+#define UAC_FORMAT_TYPE_III_IEC1937_AC3        0x2001
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1       0x2002
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT        0x2003
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT  0x2004
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS    0x2005
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS   0x2006
+
+/* Formats - A.2 Format Type Codes */
+#define UAC_FORMAT_TYPE_UNDEFINED      0x0
+#define UAC_FORMAT_TYPE_I              0x1
+#define UAC_FORMAT_TYPE_II             0x2
+#define UAC_FORMAT_TYPE_III            0x3
+#define UAC_EXT_FORMAT_TYPE_I          0x81
+#define UAC_EXT_FORMAT_TYPE_II         0x82
+#define UAC_EXT_FORMAT_TYPE_III                0x83
+
+struct uac_iso_endpoint_descriptor {
+       __u8  bLength;                  /* in bytes: 7 */
+       __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
+       __u8  bDescriptorSubtype;       /* EP_GENERAL */
+       __u8  bmAttributes;
+       __u8  bLockDelayUnits;
+       __le16 wLockDelay;
+} __attribute__((packed));
+#define UAC_ISO_ENDPOINT_DESC_SIZE     7
+
+#define UAC_EP_CS_ATTR_SAMPLE_RATE     0x01
+#define UAC_EP_CS_ATTR_PITCH_CONTROL   0x02
+#define UAC_EP_CS_ATTR_FILL_MAX                0x80
+
+/* status word format (3.7.1.1) */
+
+#define UAC1_STATUS_TYPE_ORIG_MASK             0x0f
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF 0x0
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF  0x1
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP  0x2
+
+#define UAC1_STATUS_TYPE_IRQ_PENDING           (1 << 7)
+#define UAC1_STATUS_TYPE_MEM_CHANGED           (1 << 6)
+
+struct uac1_status_word {
+       __u8 bStatusType;
+       __u8 bOriginator;
+} __attribute__((packed));
+
+
+#endif /* __LINUX_USB_AUDIO_H */
diff --git a/lib/libdss-include/include/linux/usb/cdc-wdm.h b/lib/libdss-include/include/linux/usb/cdc-wdm.h
new file mode 100644 (file)
index 0000000..a794493
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * USB CDC Device Management userspace API definitions
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_USB_CDC_WDM_H
+#define __LINUX_USB_CDC_WDM_H
+
+#include <linux/types.h>
+
+/*
+ * This IOCTL is used to retrieve the wMaxCommand for the device,
+ * defining the message limit for both reading and writing.
+ *
+ * For CDC WDM functions this will be the wMaxCommand field of the
+ * Device Management Functional Descriptor.
+ */
+#define IOCTL_WDM_MAX_COMMAND _IOR('H', 0xA0, __u16)
+
+#endif /* __LINUX_USB_CDC_WDM_H */
diff --git a/lib/libdss-include/include/linux/usb/cdc.h b/lib/libdss-include/include/linux/usb/cdc.h
new file mode 100644 (file)
index 0000000..e2bc417
--- /dev/null
@@ -0,0 +1,447 @@
+/*
+ * USB Communications Device Class (CDC) definitions
+ *
+ * CDC says how to talk to lots of different types of network adapters,
+ * notably ethernet adapters and various modems.  It's used mostly with
+ * firmware based USB peripherals.
+ */
+
+#ifndef __UAPI_LINUX_USB_CDC_H
+#define __UAPI_LINUX_USB_CDC_H
+
+#include <linux/types.h>
+
+#define USB_CDC_SUBCLASS_ACM                   0x02
+#define USB_CDC_SUBCLASS_ETHERNET              0x06
+#define USB_CDC_SUBCLASS_WHCM                  0x08
+#define USB_CDC_SUBCLASS_DMM                   0x09
+#define USB_CDC_SUBCLASS_MDLM                  0x0a
+#define USB_CDC_SUBCLASS_OBEX                  0x0b
+#define USB_CDC_SUBCLASS_EEM                   0x0c
+#define USB_CDC_SUBCLASS_NCM                   0x0d
+#define USB_CDC_SUBCLASS_MBIM                  0x0e
+
+#define USB_CDC_PROTO_NONE                     0
+
+#define USB_CDC_ACM_PROTO_AT_V25TER            1
+#define USB_CDC_ACM_PROTO_AT_PCCA101           2
+#define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE      3
+#define USB_CDC_ACM_PROTO_AT_GSM               4
+#define USB_CDC_ACM_PROTO_AT_3G                        5
+#define USB_CDC_ACM_PROTO_AT_CDMA              6
+#define USB_CDC_ACM_PROTO_VENDOR               0xff
+
+#define USB_CDC_PROTO_EEM                      7
+
+#define USB_CDC_NCM_PROTO_NTB                  1
+#define USB_CDC_MBIM_PROTO_NTB                 2
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific descriptors ... there are a couple dozen of them
+ */
+
+#define USB_CDC_HEADER_TYPE            0x00    /* header_desc */
+#define USB_CDC_CALL_MANAGEMENT_TYPE   0x01    /* call_mgmt_descriptor */
+#define USB_CDC_ACM_TYPE               0x02    /* acm_descriptor */
+#define USB_CDC_UNION_TYPE             0x06    /* union_desc */
+#define USB_CDC_COUNTRY_TYPE           0x07
+#define USB_CDC_NETWORK_TERMINAL_TYPE  0x0a    /* network_terminal_desc */
+#define USB_CDC_ETHERNET_TYPE          0x0f    /* ether_desc */
+#define USB_CDC_WHCM_TYPE              0x11
+#define USB_CDC_MDLM_TYPE              0x12    /* mdlm_desc */
+#define USB_CDC_MDLM_DETAIL_TYPE       0x13    /* mdlm_detail_desc */
+#define USB_CDC_DMM_TYPE               0x14
+#define USB_CDC_OBEX_TYPE              0x15
+#define USB_CDC_NCM_TYPE               0x1a
+#define USB_CDC_MBIM_TYPE              0x1b
+#define USB_CDC_MBIM_EXTENDED_TYPE     0x1c
+
+/* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
+struct usb_cdc_header_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdCDC;
+} __attribute__ ((packed));
+
+/* "Call Management Descriptor" from CDC spec  5.2.3.2 */
+struct usb_cdc_call_mgmt_descriptor {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bmCapabilities;
+#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT                0x01
+#define USB_CDC_CALL_MGMT_CAP_DATA_INTF                0x02
+
+       __u8    bDataInterface;
+} __attribute__ ((packed));
+
+/* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
+struct usb_cdc_acm_descriptor {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bmCapabilities;
+} __attribute__ ((packed));
+
+/* capabilities from 5.2.3.3 */
+
+#define USB_CDC_COMM_FEATURE   0x01
+#define USB_CDC_CAP_LINE       0x02
+#define USB_CDC_CAP_BRK                0x04
+#define USB_CDC_CAP_NOTIFY     0x08
+
+/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
+struct usb_cdc_union_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bMasterInterface0;
+       __u8    bSlaveInterface0;
+       /* ... and there could be other slave interfaces */
+} __attribute__ ((packed));
+
+/* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
+struct usb_cdc_country_functional_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    iCountryCodeRelDate;
+       __le16  wCountyCode0;
+       /* ... and there can be a lot of country codes */
+} __attribute__ ((packed));
+
+/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
+struct usb_cdc_network_terminal_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bEntityId;
+       __u8    iName;
+       __u8    bChannelIndex;
+       __u8    bPhysicalInterface;
+} __attribute__ ((packed));
+
+/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
+struct usb_cdc_ether_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    iMACAddress;
+       __le32  bmEthernetStatistics;
+       __le16  wMaxSegmentSize;
+       __le16  wNumberMCFilters;
+       __u8    bNumberPowerFilters;
+} __attribute__ ((packed));
+
+/* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
+struct usb_cdc_dmm_desc {
+       __u8    bFunctionLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubtype;
+       __u16   bcdVersion;
+       __le16  wMaxCommand;
+} __attribute__ ((packed));
+
+/* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
+struct usb_cdc_mdlm_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdVersion;
+       __u8    bGUID[16];
+} __attribute__ ((packed));
+
+/* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
+struct usb_cdc_mdlm_detail_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       /* type is associated with mdlm_desc.bGUID */
+       __u8    bGuidDescriptorType;
+       __u8    bDetailData[0];
+} __attribute__ ((packed));
+
+/* "OBEX Control Model Functional Descriptor" */
+struct usb_cdc_obex_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdVersion;
+} __attribute__ ((packed));
+
+/* "NCM Control Model Functional Descriptor" */
+struct usb_cdc_ncm_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdNcmVersion;
+       __u8    bmNetworkCapabilities;
+} __attribute__ ((packed));
+
+/* "MBIM Control Model Functional Descriptor" */
+struct usb_cdc_mbim_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdMBIMVersion;
+       __le16  wMaxControlMessage;
+       __u8    bNumberFilters;
+       __u8    bMaxFilterSize;
+       __le16  wMaxSegmentSize;
+       __u8    bmNetworkCapabilities;
+} __attribute__ ((packed));
+
+/* "MBIM Extended Functional Descriptor" from CDC MBIM spec 1.0 errata-1 */
+struct usb_cdc_mbim_extended_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdMBIMExtendedVersion;
+       __u8    bMaxOutstandingCommandMessages;
+       __le16  wMTU;
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific Control Requests (6.2)
+ *
+ * section 3.6.2.1 table 4 has the ACM profile, for modems.
+ * section 3.8.2 table 10 has the ethernet profile.
+ *
+ * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
+ * heavily dependent on the encapsulated (proprietary) command mechanism.
+ */
+
+#define USB_CDC_SEND_ENCAPSULATED_COMMAND      0x00
+#define USB_CDC_GET_ENCAPSULATED_RESPONSE      0x01
+#define USB_CDC_REQ_SET_LINE_CODING            0x20
+#define USB_CDC_REQ_GET_LINE_CODING            0x21
+#define USB_CDC_REQ_SET_CONTROL_LINE_STATE     0x22
+#define USB_CDC_REQ_SEND_BREAK                 0x23
+#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40
+#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41
+#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42
+#define USB_CDC_SET_ETHERNET_PACKET_FILTER     0x43
+#define USB_CDC_GET_ETHERNET_STATISTIC         0x44
+#define USB_CDC_GET_NTB_PARAMETERS             0x80
+#define USB_CDC_GET_NET_ADDRESS                        0x81
+#define USB_CDC_SET_NET_ADDRESS                        0x82
+#define USB_CDC_GET_NTB_FORMAT                 0x83
+#define USB_CDC_SET_NTB_FORMAT                 0x84
+#define USB_CDC_GET_NTB_INPUT_SIZE             0x85
+#define USB_CDC_SET_NTB_INPUT_SIZE             0x86
+#define USB_CDC_GET_MAX_DATAGRAM_SIZE          0x87
+#define USB_CDC_SET_MAX_DATAGRAM_SIZE          0x88
+#define USB_CDC_GET_CRC_MODE                   0x89
+#define USB_CDC_SET_CRC_MODE                   0x8a
+
+/* Line Coding Structure from CDC spec 6.2.13 */
+struct usb_cdc_line_coding {
+       __le32  dwDTERate;
+       __u8    bCharFormat;
+#define USB_CDC_1_STOP_BITS                    0
+#define USB_CDC_1_5_STOP_BITS                  1
+#define USB_CDC_2_STOP_BITS                    2
+
+       __u8    bParityType;
+#define USB_CDC_NO_PARITY                      0
+#define USB_CDC_ODD_PARITY                     1
+#define USB_CDC_EVEN_PARITY                    2
+#define USB_CDC_MARK_PARITY                    3
+#define USB_CDC_SPACE_PARITY                   4
+
+       __u8    bDataBits;
+} __attribute__ ((packed));
+
+/* table 62; bits in multicast filter */
+#define        USB_CDC_PACKET_TYPE_PROMISCUOUS         (1 << 0)
+#define        USB_CDC_PACKET_TYPE_ALL_MULTICAST       (1 << 1) /* no filter */
+#define        USB_CDC_PACKET_TYPE_DIRECTED            (1 << 2)
+#define        USB_CDC_PACKET_TYPE_BROADCAST           (1 << 3)
+#define        USB_CDC_PACKET_TYPE_MULTICAST           (1 << 4) /* filtered */
+
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific Notifications (6.3) sent by interrupt transfers
+ *
+ * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
+ * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
+ * RNDIS also defines its own bit-incompatible notifications
+ */
+
+#define USB_CDC_NOTIFY_NETWORK_CONNECTION      0x00
+#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE      0x01
+#define USB_CDC_NOTIFY_SERIAL_STATE            0x20
+#define USB_CDC_NOTIFY_SPEED_CHANGE            0x2a
+
+struct usb_cdc_notification {
+       __u8    bmRequestType;
+       __u8    bNotificationType;
+       __le16  wValue;
+       __le16  wIndex;
+       __le16  wLength;
+} __attribute__ ((packed));
+
+struct usb_cdc_speed_change {
+       __le32  DLBitRRate;     /* contains the downlink bit rate (IN pipe) */
+       __le32  ULBitRate;      /* contains the uplink bit rate (OUT pipe) */
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class Specific structures and constants
+ *
+ * CDC NCM NTB parameters structure, CDC NCM subclass 6.2.1
+ *
+ */
+
+struct usb_cdc_ncm_ntb_parameters {
+       __le16  wLength;
+       __le16  bmNtbFormatsSupported;
+       __le32  dwNtbInMaxSize;
+       __le16  wNdpInDivisor;
+       __le16  wNdpInPayloadRemainder;
+       __le16  wNdpInAlignment;
+       __le16  wPadding1;
+       __le32  dwNtbOutMaxSize;
+       __le16  wNdpOutDivisor;
+       __le16  wNdpOutPayloadRemainder;
+       __le16  wNdpOutAlignment;
+       __le16  wNtbOutMaxDatagrams;
+} __attribute__ ((packed));
+
+/*
+ * CDC NCM transfer headers, CDC NCM subclass 3.2
+ */
+
+#define USB_CDC_NCM_NTH16_SIGN         0x484D434E /* NCMH */
+#define USB_CDC_NCM_NTH32_SIGN         0x686D636E /* ncmh */
+
+struct usb_cdc_ncm_nth16 {
+       __le32  dwSignature;
+       __le16  wHeaderLength;
+       __le16  wSequence;
+       __le16  wBlockLength;
+       __le16  wNdpIndex;
+} __attribute__ ((packed));
+
+struct usb_cdc_ncm_nth32 {
+       __le32  dwSignature;
+       __le16  wHeaderLength;
+       __le16  wSequence;
+       __le32  dwBlockLength;
+       __le32  dwNdpIndex;
+} __attribute__ ((packed));
+
+/*
+ * CDC NCM datagram pointers, CDC NCM subclass 3.3
+ */
+
+#define USB_CDC_NCM_NDP16_CRC_SIGN     0x314D434E /* NCM1 */
+#define USB_CDC_NCM_NDP16_NOCRC_SIGN   0x304D434E /* NCM0 */
+#define USB_CDC_NCM_NDP32_CRC_SIGN     0x316D636E /* ncm1 */
+#define USB_CDC_NCM_NDP32_NOCRC_SIGN   0x306D636E /* ncm0 */
+
+#define USB_CDC_MBIM_NDP16_IPS_SIGN     0x00535049 /* IPS<sessionID> : IPS0 for now */
+#define USB_CDC_MBIM_NDP32_IPS_SIGN     0x00737069 /* ips<sessionID> : ips0 for now */
+#define USB_CDC_MBIM_NDP16_DSS_SIGN     0x00535344 /* DSS<sessionID> */
+#define USB_CDC_MBIM_NDP32_DSS_SIGN     0x00737364 /* dss<sessionID> */
+
+/* 16-bit NCM Datagram Pointer Entry */
+struct usb_cdc_ncm_dpe16 {
+       __le16  wDatagramIndex;
+       __le16  wDatagramLength;
+} __attribute__((__packed__));
+
+/* 16-bit NCM Datagram Pointer Table */
+struct usb_cdc_ncm_ndp16 {
+       __le32  dwSignature;
+       __le16  wLength;
+       __le16  wNextNdpIndex;
+       struct  usb_cdc_ncm_dpe16 dpe16[0];
+} __attribute__ ((packed));
+
+/* 32-bit NCM Datagram Pointer Entry */
+struct usb_cdc_ncm_dpe32 {
+       __le32  dwDatagramIndex;
+       __le32  dwDatagramLength;
+} __attribute__((__packed__));
+
+/* 32-bit NCM Datagram Pointer Table */
+struct usb_cdc_ncm_ndp32 {
+       __le32  dwSignature;
+       __le16  wLength;
+       __le16  wReserved6;
+       __le32  dwNextNdpIndex;
+       __le32  dwReserved12;
+       struct  usb_cdc_ncm_dpe32 dpe32[0];
+} __attribute__ ((packed));
+
+/* CDC NCM subclass 3.2.1 and 3.2.2 */
+#define USB_CDC_NCM_NDP16_INDEX_MIN                    0x000C
+#define USB_CDC_NCM_NDP32_INDEX_MIN                    0x0010
+
+/* CDC NCM subclass 3.3.3 Datagram Formatting */
+#define USB_CDC_NCM_DATAGRAM_FORMAT_CRC                        0x30
+#define USB_CDC_NCM_DATAGRAM_FORMAT_NOCRC              0X31
+
+/* CDC NCM subclass 4.2 NCM Communications Interface Protocol Code */
+#define USB_CDC_NCM_PROTO_CODE_NO_ENCAP_COMMANDS       0x00
+#define USB_CDC_NCM_PROTO_CODE_EXTERN_PROTO            0xFE
+
+/* CDC NCM subclass 5.2.1 NCM Functional Descriptor, bmNetworkCapabilities */
+#define USB_CDC_NCM_NCAP_ETH_FILTER                    (1 << 0)
+#define USB_CDC_NCM_NCAP_NET_ADDRESS                   (1 << 1)
+#define USB_CDC_NCM_NCAP_ENCAP_COMMAND                 (1 << 2)
+#define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE             (1 << 3)
+#define USB_CDC_NCM_NCAP_CRC_MODE                      (1 << 4)
+#define        USB_CDC_NCM_NCAP_NTB_INPUT_SIZE                 (1 << 5)
+
+/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
+#define USB_CDC_NCM_NTB16_SUPPORTED                    (1 << 0)
+#define USB_CDC_NCM_NTB32_SUPPORTED                    (1 << 1)
+
+/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
+#define USB_CDC_NCM_NDP_ALIGN_MIN_SIZE                 0x04
+#define USB_CDC_NCM_NTB_MAX_LENGTH                     0x1C
+
+/* CDC NCM subclass 6.2.5 SetNtbFormat */
+#define USB_CDC_NCM_NTB16_FORMAT                       0x00
+#define USB_CDC_NCM_NTB32_FORMAT                       0x01
+
+/* CDC NCM subclass 6.2.7 SetNtbInputSize */
+#define USB_CDC_NCM_NTB_MIN_IN_SIZE                    2048
+#define USB_CDC_NCM_NTB_MIN_OUT_SIZE                   2048
+
+/* NTB Input Size Structure */
+struct usb_cdc_ncm_ndp_input_size {
+       __le32  dwNtbInMaxSize;
+       __le16  wNtbInMaxDatagrams;
+       __le16  wReserved;
+} __attribute__ ((packed));
+
+/* CDC NCM subclass 6.2.11 SetCrcMode */
+#define USB_CDC_NCM_CRC_NOT_APPENDED                   0x00
+#define USB_CDC_NCM_CRC_APPENDED                       0x01
+
+#endif /* __UAPI_LINUX_USB_CDC_H */
diff --git a/lib/libdss-include/include/linux/usb/ch11.h b/lib/libdss-include/include/linux/usb/ch11.h
new file mode 100644 (file)
index 0000000..361297e
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * This file holds Hub protocol constants and data structures that are
+ * defined in chapter 11 (Hub Specification) of the USB 2.0 specification.
+ *
+ * It is used/shared between the USB core, the HCDs and couple of other USB
+ * drivers.
+ */
+
+#ifndef __LINUX_CH11_H
+#define __LINUX_CH11_H
+
+#include <linux/types.h>       /* __u8 etc */
+
+/* This is arbitrary.
+ * From USB 2.0 spec Table 11-13, offset 7, a hub can
+ * have up to 255 ports. The most yet reported is 10.
+ *
+ * Current Wireless USB host hardware (Intel i1480 for example) allows
+ * up to 22 devices to connect. Upcoming hardware might raise that
+ * limit. Because the arrays need to add a bit for hub status data, we
+ * use 31, so plus one evens out to four bytes.
+ */
+#define USB_MAXCHILDREN                31
+
+/*
+ * Hub request types
+ */
+
+#define USB_RT_HUB     (USB_TYPE_CLASS | USB_RECIP_DEVICE)
+#define USB_RT_PORT    (USB_TYPE_CLASS | USB_RECIP_OTHER)
+
+/*
+ * Port status type for GetPortStatus requests added in USB 3.1
+ * See USB 3.1 spec Table 10-12
+ */
+#define HUB_PORT_STATUS                0
+#define HUB_PORT_PD_STATUS     1
+#define HUB_EXT_PORT_STATUS    2
+
+/*
+ * Hub class requests
+ * See USB 2.0 spec Table 11-16
+ */
+#define HUB_CLEAR_TT_BUFFER    8
+#define HUB_RESET_TT           9
+#define HUB_GET_TT_STATE       10
+#define HUB_STOP_TT            11
+
+/*
+ * Hub class additional requests defined by USB 3.0 spec
+ * See USB 3.0 spec Table 10-6
+ */
+#define HUB_SET_DEPTH          12
+#define HUB_GET_PORT_ERR_COUNT 13
+
+/*
+ * Hub Class feature numbers
+ * See USB 2.0 spec Table 11-17
+ */
+#define C_HUB_LOCAL_POWER      0
+#define C_HUB_OVER_CURRENT     1
+
+/*
+ * Port feature numbers
+ * See USB 2.0 spec Table 11-17
+ */
+#define USB_PORT_FEAT_CONNECTION       0
+#define USB_PORT_FEAT_ENABLE           1
+#define USB_PORT_FEAT_SUSPEND          2       /* L2 suspend */
+#define USB_PORT_FEAT_OVER_CURRENT     3
+#define USB_PORT_FEAT_RESET            4
+#define USB_PORT_FEAT_L1               5       /* L1 suspend */
+#define USB_PORT_FEAT_POWER            8
+#define USB_PORT_FEAT_LOWSPEED         9       /* Should never be used */
+#define USB_PORT_FEAT_C_CONNECTION     16
+#define USB_PORT_FEAT_C_ENABLE         17
+#define USB_PORT_FEAT_C_SUSPEND                18
+#define USB_PORT_FEAT_C_OVER_CURRENT   19
+#define USB_PORT_FEAT_C_RESET          20
+#define USB_PORT_FEAT_TEST              21
+#define USB_PORT_FEAT_INDICATOR         22
+#define USB_PORT_FEAT_C_PORT_L1         23
+
+/*
+ * Port feature selectors added by USB 3.0 spec.
+ * See USB 3.0 spec Table 10-7
+ */
+#define USB_PORT_FEAT_LINK_STATE               5
+#define USB_PORT_FEAT_U1_TIMEOUT               23
+#define USB_PORT_FEAT_U2_TIMEOUT               24
+#define USB_PORT_FEAT_C_PORT_LINK_STATE                25
+#define USB_PORT_FEAT_C_PORT_CONFIG_ERROR      26
+#define USB_PORT_FEAT_REMOTE_WAKE_MASK         27
+#define USB_PORT_FEAT_BH_PORT_RESET            28
+#define USB_PORT_FEAT_C_BH_PORT_RESET          29
+#define USB_PORT_FEAT_FORCE_LINKPM_ACCEPT      30
+
+#define USB_PORT_LPM_TIMEOUT(p)                        (((p) & 0xff) << 8)
+
+/* USB 3.0 hub remote wake mask bits, see table 10-14 */
+#define USB_PORT_FEAT_REMOTE_WAKE_CONNECT      (1 << 8)
+#define USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT   (1 << 9)
+#define USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT (1 << 10)
+
+/*
+ * Hub Status and Hub Change results
+ * See USB 2.0 spec Table 11-19 and Table 11-20
+ * USB 3.1 extends the port status request and may return 4 additional bytes.
+ * See USB 3.1 spec section 10.16.2.6 Table 10-12 and 10-15
+ */
+struct usb_port_status {
+       __le16 wPortStatus;
+       __le16 wPortChange;
+       __le32 dwExtPortStatus;
+} __attribute__ ((packed));
+
+/*
+ * wPortStatus bit field
+ * See USB 2.0 spec Table 11-21
+ */
+#define USB_PORT_STAT_CONNECTION       0x0001
+#define USB_PORT_STAT_ENABLE           0x0002
+#define USB_PORT_STAT_SUSPEND          0x0004
+#define USB_PORT_STAT_OVERCURRENT      0x0008
+#define USB_PORT_STAT_RESET            0x0010
+#define USB_PORT_STAT_L1               0x0020
+/* bits 6 to 7 are reserved */
+#define USB_PORT_STAT_POWER            0x0100
+#define USB_PORT_STAT_LOW_SPEED                0x0200
+#define USB_PORT_STAT_HIGH_SPEED        0x0400
+#define USB_PORT_STAT_TEST              0x0800
+#define USB_PORT_STAT_INDICATOR         0x1000
+/* bits 13 to 15 are reserved */
+
+/*
+ * Additions to wPortStatus bit field from USB 3.0
+ * See USB 3.0 spec Table 10-10
+ */
+#define USB_PORT_STAT_LINK_STATE       0x01e0
+#define USB_SS_PORT_STAT_POWER         0x0200
+#define USB_SS_PORT_STAT_SPEED         0x1c00
+#define USB_PORT_STAT_SPEED_5GBPS      0x0000
+/* Valid only if port is enabled */
+/* Bits that are the same from USB 2.0 */
+#define USB_SS_PORT_STAT_MASK (USB_PORT_STAT_CONNECTION |          \
+                               USB_PORT_STAT_ENABLE |      \
+                               USB_PORT_STAT_OVERCURRENT | \
+                               USB_PORT_STAT_RESET)
+
+/*
+ * Definitions for PORT_LINK_STATE values
+ * (bits 5-8) in wPortStatus
+ */
+#define USB_SS_PORT_LS_U0              0x0000
+#define USB_SS_PORT_LS_U1              0x0020
+#define USB_SS_PORT_LS_U2              0x0040
+#define USB_SS_PORT_LS_U3              0x0060
+#define USB_SS_PORT_LS_SS_DISABLED     0x0080
+#define USB_SS_PORT_LS_RX_DETECT       0x00a0
+#define USB_SS_PORT_LS_SS_INACTIVE     0x00c0
+#define USB_SS_PORT_LS_POLLING         0x00e0
+#define USB_SS_PORT_LS_RECOVERY                0x0100
+#define USB_SS_PORT_LS_HOT_RESET       0x0120
+#define USB_SS_PORT_LS_COMP_MOD                0x0140
+#define USB_SS_PORT_LS_LOOPBACK                0x0160
+
+/*
+ * wPortChange bit field
+ * See USB 2.0 spec Table 11-22 and USB 2.0 LPM ECN Table-4.10
+ * Bits 0 to 5 shown, bits 6 to 15 are reserved
+ */
+#define USB_PORT_STAT_C_CONNECTION     0x0001
+#define USB_PORT_STAT_C_ENABLE         0x0002
+#define USB_PORT_STAT_C_SUSPEND                0x0004
+#define USB_PORT_STAT_C_OVERCURRENT    0x0008
+#define USB_PORT_STAT_C_RESET          0x0010
+#define USB_PORT_STAT_C_L1             0x0020
+/*
+ * USB 3.0 wPortChange bit fields
+ * See USB 3.0 spec Table 10-11
+ */
+#define USB_PORT_STAT_C_BH_RESET       0x0020
+#define USB_PORT_STAT_C_LINK_STATE     0x0040
+#define USB_PORT_STAT_C_CONFIG_ERROR   0x0080
+
+/*
+ * USB 3.1 dwExtPortStatus field masks
+ * See USB 3.1 spec 10.16.2.6.3 Table 10-15
+ */
+
+#define USB_EXT_PORT_STAT_RX_SPEED_ID  0x0000000f
+#define USB_EXT_PORT_STAT_TX_SPEED_ID  0x000000f0
+#define USB_EXT_PORT_STAT_RX_LANES     0x00000f00
+#define USB_EXT_PORT_STAT_TX_LANES     0x0000f000
+
+/*
+ * wHubCharacteristics (masks)
+ * See USB 2.0 spec Table 11-13, offset 3
+ */
+#define HUB_CHAR_LPSM          0x0003 /* Logical Power Switching Mode mask */
+#define HUB_CHAR_COMMON_LPSM   0x0000 /* All ports power control at once */
+#define HUB_CHAR_INDV_PORT_LPSM        0x0001 /* per-port power control */
+#define HUB_CHAR_NO_LPSM       0x0002 /* no power switching */
+
+#define HUB_CHAR_COMPOUND      0x0004 /* hub is part of a compound device */
+
+#define HUB_CHAR_OCPM          0x0018 /* Over-Current Protection Mode mask */
+#define HUB_CHAR_COMMON_OCPM   0x0000 /* All ports Over-Current reporting */
+#define HUB_CHAR_INDV_PORT_OCPM        0x0008 /* per-port Over-current reporting */
+#define HUB_CHAR_NO_OCPM       0x0010 /* No Over-current Protection support */
+
+#define HUB_CHAR_TTTT          0x0060 /* TT Think Time mask */
+#define HUB_CHAR_PORTIND       0x0080 /* per-port indicators (LEDs) */
+
+struct usb_hub_status {
+       __le16 wHubStatus;
+       __le16 wHubChange;
+} __attribute__ ((packed));
+
+/*
+ * Hub Status & Hub Change bit masks
+ * See USB 2.0 spec Table 11-19 and Table 11-20
+ * Bits 0 and 1 for wHubStatus and wHubChange
+ * Bits 2 to 15 are reserved for both
+ */
+#define HUB_STATUS_LOCAL_POWER 0x0001
+#define HUB_STATUS_OVERCURRENT 0x0002
+#define HUB_CHANGE_LOCAL_POWER 0x0001
+#define HUB_CHANGE_OVERCURRENT 0x0002
+
+
+/*
+ * Hub descriptor
+ * See USB 2.0 spec Table 11-13
+ */
+
+#define USB_DT_HUB                     (USB_TYPE_CLASS | 0x09)
+#define USB_DT_SS_HUB                  (USB_TYPE_CLASS | 0x0a)
+#define USB_DT_HUB_NONVAR_SIZE         7
+#define USB_DT_SS_HUB_SIZE              12
+
+/*
+ * Hub Device descriptor
+ * USB Hub class device protocols
+ */
+
+#define USB_HUB_PR_FS          0 /* Full speed hub */
+#define USB_HUB_PR_HS_NO_TT    0 /* Hi-speed hub without TT */
+#define USB_HUB_PR_HS_SINGLE_TT        1 /* Hi-speed hub with single TT */
+#define USB_HUB_PR_HS_MULTI_TT 2 /* Hi-speed hub with multiple TT */
+#define USB_HUB_PR_SS          3 /* Super speed hub */
+
+struct usb_hub_descriptor {
+       __u8  bDescLength;
+       __u8  bDescriptorType;
+       __u8  bNbrPorts;
+       __le16 wHubCharacteristics;
+       __u8  bPwrOn2PwrGood;
+       __u8  bHubContrCurrent;
+
+       /* 2.0 and 3.0 hubs differ here */
+       union {
+               struct {
+                       /* add 1 bit for hub status change; round to bytes */
+                       __u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
+                       __u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
+               }  __attribute__ ((packed)) hs;
+
+               struct {
+                       __u8 bHubHdrDecLat;
+                       __le16 wHubDelay;
+                       __le16 DeviceRemovable;
+               }  __attribute__ ((packed)) ss;
+       } u;
+} __attribute__ ((packed));
+
+/* port indicator status selectors, tables 11-7 and 11-25 */
+#define HUB_LED_AUTO   0
+#define HUB_LED_AMBER  1
+#define HUB_LED_GREEN  2
+#define HUB_LED_OFF    3
+
+enum hub_led_mode {
+       INDICATOR_AUTO = 0,
+       INDICATOR_CYCLE,
+       /* software blinks for attention:  software, hardware, reserved */
+       INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF,
+       INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF,
+       INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF
+} __attribute__ ((packed));
+
+/* Transaction Translator Think Times, in bits */
+#define HUB_TTTT_8_BITS                0x00
+#define HUB_TTTT_16_BITS       0x20
+#define HUB_TTTT_24_BITS       0x40
+#define HUB_TTTT_32_BITS       0x60
+
+#endif /* __LINUX_CH11_H */
diff --git a/lib/libdss-include/include/linux/usb/ch9.h b/lib/libdss-include/include/linux/usb/ch9.h
new file mode 100644 (file)
index 0000000..135736b
--- /dev/null
@@ -0,0 +1,1069 @@
+/*
+ * This file holds USB constants and structures that are needed for
+ * USB device APIs.  These are used by the USB device model, which is
+ * defined in chapter 9 of the USB 2.0 specification and in the
+ * Wireless USB 1.0 (spread around).  Linux has several APIs in C that
+ * need these:
+ *
+ * - the master/host side Linux-USB kernel driver API;
+ * - the "usbfs" user space API; and
+ * - the Linux "gadget" slave/device/peripheral side driver API.
+ *
+ * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
+ * act either as a USB master/host or as a USB slave/device.  That means
+ * the master and slave side APIs benefit from working well together.
+ *
+ * There's also "Wireless USB", using low power short range radios for
+ * peripheral interconnection but otherwise building on the USB framework.
+ *
+ * Note all descriptors are declared '__attribute__((packed))' so that:
+ *
+ * [a] they never get padded, either internally (USB spec writers
+ *     probably handled that) or externally;
+ *
+ * [b] so that accessing bigger-than-a-bytes fields will never
+ *     generate bus errors on any platform, even when the location of
+ *     its descriptor inside a bundle isn't "naturally aligned", and
+ *
+ * [c] for consistency, removing all doubt even when it appears to
+ *     someone that the two other points are non-issues for that
+ *     particular descriptor type.
+ */
+
+#ifndef __LINUX_USB_CH9_H
+#define __LINUX_USB_CH9_H
+
+#include <linux/types.h>       /* __u8 etc */
+#include <asm/byteorder.h>     /* le16_to_cpu */
+
+/*-------------------------------------------------------------------------*/
+
+/* CONTROL REQUEST SUPPORT */
+
+/*
+ * USB directions
+ *
+ * This bit flag is used in endpoint descriptors' bEndpointAddress field.
+ * It's also one of three fields in control requests bRequestType.
+ */
+#define USB_DIR_OUT                    0               /* to device */
+#define USB_DIR_IN                     0x80            /* to host */
+
+/*
+ * USB types, the second of three bRequestType fields
+ */
+#define USB_TYPE_MASK                  (0x03 << 5)
+#define USB_TYPE_STANDARD              (0x00 << 5)
+#define USB_TYPE_CLASS                 (0x01 << 5)
+#define USB_TYPE_VENDOR                        (0x02 << 5)
+#define USB_TYPE_RESERVED              (0x03 << 5)
+
+/*
+ * USB recipients, the third of three bRequestType fields
+ */
+#define USB_RECIP_MASK                 0x1f
+#define USB_RECIP_DEVICE               0x00
+#define USB_RECIP_INTERFACE            0x01
+#define USB_RECIP_ENDPOINT             0x02
+#define USB_RECIP_OTHER                        0x03
+/* From Wireless USB 1.0 */
+#define USB_RECIP_PORT                 0x04
+#define USB_RECIP_RPIPE                0x05
+
+/*
+ * Standard requests, for the bRequest field of a SETUP packet.
+ *
+ * These are qualified by the bRequestType field, so that for example
+ * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
+ * by a GET_STATUS request.
+ */
+#define USB_REQ_GET_STATUS             0x00
+#define USB_REQ_CLEAR_FEATURE          0x01
+#define USB_REQ_SET_FEATURE            0x03
+#define USB_REQ_SET_ADDRESS            0x05
+#define USB_REQ_GET_DESCRIPTOR         0x06
+#define USB_REQ_SET_DESCRIPTOR         0x07
+#define USB_REQ_GET_CONFIGURATION      0x08
+#define USB_REQ_SET_CONFIGURATION      0x09
+#define USB_REQ_GET_INTERFACE          0x0A
+#define USB_REQ_SET_INTERFACE          0x0B
+#define USB_REQ_SYNCH_FRAME            0x0C
+#define USB_REQ_SET_SEL                        0x30
+#define USB_REQ_SET_ISOCH_DELAY                0x31
+
+#define USB_REQ_SET_ENCRYPTION         0x0D    /* Wireless USB */
+#define USB_REQ_GET_ENCRYPTION         0x0E
+#define USB_REQ_RPIPE_ABORT            0x0E
+#define USB_REQ_SET_HANDSHAKE          0x0F
+#define USB_REQ_RPIPE_RESET            0x0F
+#define USB_REQ_GET_HANDSHAKE          0x10
+#define USB_REQ_SET_CONNECTION         0x11
+#define USB_REQ_SET_SECURITY_DATA      0x12
+#define USB_REQ_GET_SECURITY_DATA      0x13
+#define USB_REQ_SET_WUSB_DATA          0x14
+#define USB_REQ_LOOPBACK_DATA_WRITE    0x15
+#define USB_REQ_LOOPBACK_DATA_READ     0x16
+#define USB_REQ_SET_INTERFACE_DS       0x17
+
+/* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command,
+ * used by hubs to put ports into a new L1 suspend state, except that it
+ * forgot to define its number ...
+ */
+
+/*
+ * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
+ * are read as a bit array returned by USB_REQ_GET_STATUS.  (So there
+ * are at most sixteen features of each type.)  Hubs may also support a
+ * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend.
+ */
+#define USB_DEVICE_SELF_POWERED                0       /* (read only) */
+#define USB_DEVICE_REMOTE_WAKEUP       1       /* dev may initiate wakeup */
+#define USB_DEVICE_TEST_MODE           2       /* (wired high speed only) */
+#define USB_DEVICE_BATTERY             2       /* (wireless) */
+#define USB_DEVICE_B_HNP_ENABLE                3       /* (otg) dev may initiate HNP */
+#define USB_DEVICE_WUSB_DEVICE         3       /* (wireless)*/
+#define USB_DEVICE_A_HNP_SUPPORT       4       /* (otg) RH port supports HNP */
+#define USB_DEVICE_A_ALT_HNP_SUPPORT   5       /* (otg) other RH port does */
+#define USB_DEVICE_DEBUG_MODE          6       /* (special devices only) */
+
+/*
+ * Test Mode Selectors
+ * See USB 2.0 spec Table 9-7
+ */
+#define        TEST_J          1
+#define        TEST_K          2
+#define        TEST_SE0_NAK    3
+#define        TEST_PACKET     4
+#define        TEST_FORCE_EN   5
+
+/*
+ * New Feature Selectors as added by USB 3.0
+ * See USB 3.0 spec Table 9-7
+ */
+#define USB_DEVICE_U1_ENABLE   48      /* dev may initiate U1 transition */
+#define USB_DEVICE_U2_ENABLE   49      /* dev may initiate U2 transition */
+#define USB_DEVICE_LTM_ENABLE  50      /* dev may send LTM */
+#define USB_INTRF_FUNC_SUSPEND 0       /* function suspend */
+
+#define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00
+/*
+ * Suspend Options, Table 9-8 USB 3.0 spec
+ */
+#define USB_INTRF_FUNC_SUSPEND_LP      (1 << (8 + 0))
+#define USB_INTRF_FUNC_SUSPEND_RW      (1 << (8 + 1))
+
+/*
+ * Interface status, Figure 9-5 USB 3.0 spec
+ */
+#define USB_INTRF_STAT_FUNC_RW_CAP     1
+#define USB_INTRF_STAT_FUNC_RW         2
+
+#define USB_ENDPOINT_HALT              0       /* IN/OUT will STALL */
+
+/* Bit array elements as returned by the USB_REQ_GET_STATUS request. */
+#define USB_DEV_STAT_U1_ENABLED                2       /* transition into U1 state */
+#define USB_DEV_STAT_U2_ENABLED                3       /* transition into U2 state */
+#define USB_DEV_STAT_LTM_ENABLED       4       /* Latency tolerance messages */
+
+/**
+ * struct usb_ctrlrequest - SETUP data for a USB device control request
+ * @bRequestType: matches the USB bmRequestType field
+ * @bRequest: matches the USB bRequest field
+ * @wValue: matches the USB wValue field (le16 byte order)
+ * @wIndex: matches the USB wIndex field (le16 byte order)
+ * @wLength: matches the USB wLength field (le16 byte order)
+ *
+ * This structure is used to send control requests to a USB device.  It matches
+ * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the
+ * USB spec for a fuller description of the different fields, and what they are
+ * used for.
+ *
+ * Note that the driver for any interface can issue control requests.
+ * For most devices, interfaces don't coordinate with each other, so
+ * such requests may be made at any time.
+ */
+struct usb_ctrlrequest {
+       __u8 bRequestType;
+       __u8 bRequest;
+       __le16 wValue;
+       __le16 wIndex;
+       __le16 wLength;
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
+ * (rarely) accepted by SET_DESCRIPTOR.
+ *
+ * Note that all multi-byte values here are encoded in little endian
+ * byte order "on the wire".  Within the kernel and when exposed
+ * through the Linux-USB APIs, they are not converted to cpu byte
+ * order; it is the responsibility of the client code to do this.
+ * The single exception is when device and configuration descriptors (but
+ * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
+ * in this case the fields are converted to host endianness by the kernel.
+ */
+
+/*
+ * Descriptor types ... USB 2.0 spec table 9.5
+ */
+#define USB_DT_DEVICE                  0x01
+#define USB_DT_CONFIG                  0x02
+#define USB_DT_STRING                  0x03
+#define USB_DT_INTERFACE               0x04
+#define USB_DT_ENDPOINT                        0x05
+#define USB_DT_DEVICE_QUALIFIER                0x06
+#define USB_DT_OTHER_SPEED_CONFIG      0x07
+#define USB_DT_INTERFACE_POWER         0x08
+/* these are from a minor usb 2.0 revision (ECN) */
+#define USB_DT_OTG                     0x09
+#define USB_DT_DEBUG                   0x0a
+#define USB_DT_INTERFACE_ASSOCIATION   0x0b
+/* these are from the Wireless USB spec */
+#define USB_DT_SECURITY                        0x0c
+#define USB_DT_KEY                     0x0d
+#define USB_DT_ENCRYPTION_TYPE         0x0e
+#define USB_DT_BOS                     0x0f
+#define USB_DT_DEVICE_CAPABILITY       0x10
+#define USB_DT_WIRELESS_ENDPOINT_COMP  0x11
+#define USB_DT_WIRE_ADAPTER            0x21
+#define USB_DT_RPIPE                   0x22
+#define USB_DT_CS_RADIO_CONTROL                0x23
+/* From the T10 UAS specification */
+#define USB_DT_PIPE_USAGE              0x24
+/* From the USB 3.0 spec */
+#define        USB_DT_SS_ENDPOINT_COMP         0x30
+/* From the USB 3.1 spec */
+#define        USB_DT_SSP_ISOC_ENDPOINT_COMP   0x31
+
+/* Conventional codes for class-specific descriptors.  The convention is
+ * defined in the USB "Common Class" Spec (3.11).  Individual class specs
+ * are authoritative for their usage, not the "common class" writeup.
+ */
+#define USB_DT_CS_DEVICE               (USB_TYPE_CLASS | USB_DT_DEVICE)
+#define USB_DT_CS_CONFIG               (USB_TYPE_CLASS | USB_DT_CONFIG)
+#define USB_DT_CS_STRING               (USB_TYPE_CLASS | USB_DT_STRING)
+#define USB_DT_CS_INTERFACE            (USB_TYPE_CLASS | USB_DT_INTERFACE)
+#define USB_DT_CS_ENDPOINT             (USB_TYPE_CLASS | USB_DT_ENDPOINT)
+
+/* All standard descriptors have these 2 fields at the beginning */
+struct usb_descriptor_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE: Device descriptor */
+struct usb_device_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 bcdUSB;
+       __u8  bDeviceClass;
+       __u8  bDeviceSubClass;
+       __u8  bDeviceProtocol;
+       __u8  bMaxPacketSize0;
+       __le16 idVendor;
+       __le16 idProduct;
+       __le16 bcdDevice;
+       __u8  iManufacturer;
+       __u8  iProduct;
+       __u8  iSerialNumber;
+       __u8  bNumConfigurations;
+} __attribute__ ((packed));
+
+#define USB_DT_DEVICE_SIZE             18
+
+
+/*
+ * Device and/or Interface Class codes
+ * as found in bDeviceClass or bInterfaceClass
+ * and defined by www.usb.org documents
+ */
+#define USB_CLASS_PER_INTERFACE                0       /* for DeviceClass */
+#define USB_CLASS_AUDIO                        1
+#define USB_CLASS_COMM                 2
+#define USB_CLASS_HID                  3
+#define USB_CLASS_PHYSICAL             5
+#define USB_CLASS_STILL_IMAGE          6
+#define USB_CLASS_PRINTER              7
+#define USB_CLASS_MASS_STORAGE         8
+#define USB_CLASS_HUB                  9
+#define USB_CLASS_CDC_DATA             0x0a
+#define USB_CLASS_CSCID                        0x0b    /* chip+ smart card */
+#define USB_CLASS_CONTENT_SEC          0x0d    /* content security */
+#define USB_CLASS_VIDEO                        0x0e
+#define USB_CLASS_WIRELESS_CONTROLLER  0xe0
+#define USB_CLASS_MISC                 0xef
+#define USB_CLASS_APP_SPEC             0xfe
+#define USB_CLASS_VENDOR_SPEC          0xff
+
+#define USB_SUBCLASS_VENDOR_SPEC       0xff
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_CONFIG: Configuration descriptor information.
+ *
+ * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
+ * descriptor type is different.  Highspeed-capable devices can look
+ * different depending on what speed they're currently running.  Only
+ * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
+ * descriptors.
+ */
+struct usb_config_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumInterfaces;
+       __u8  bConfigurationValue;
+       __u8  iConfiguration;
+       __u8  bmAttributes;
+       __u8  bMaxPower;
+} __attribute__ ((packed));
+
+#define USB_DT_CONFIG_SIZE             9
+
+/* from config descriptor bmAttributes */
+#define USB_CONFIG_ATT_ONE             (1 << 7)        /* must be set */
+#define USB_CONFIG_ATT_SELFPOWER       (1 << 6)        /* self powered */
+#define USB_CONFIG_ATT_WAKEUP          (1 << 5)        /* can wakeup */
+#define USB_CONFIG_ATT_BATTERY         (1 << 4)        /* battery powered */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_STRING: String descriptor */
+struct usb_string_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wData[1];                /* UTF-16LE encoded */
+} __attribute__ ((packed));
+
+/* note that "string" zero is special, it holds language codes that
+ * the device supports, not Unicode characters.
+ */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_INTERFACE: Interface descriptor */
+struct usb_interface_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bInterfaceNumber;
+       __u8  bAlternateSetting;
+       __u8  bNumEndpoints;
+       __u8  bInterfaceClass;
+       __u8  bInterfaceSubClass;
+       __u8  bInterfaceProtocol;
+       __u8  iInterface;
+} __attribute__ ((packed));
+
+#define USB_DT_INTERFACE_SIZE          9
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_ENDPOINT: Endpoint descriptor */
+struct usb_endpoint_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEndpointAddress;
+       __u8  bmAttributes;
+       __le16 wMaxPacketSize;
+       __u8  bInterval;
+
+       /* NOTE:  these two are _only_ in audio endpoints. */
+       /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
+       __u8  bRefresh;
+       __u8  bSynchAddress;
+} __attribute__ ((packed));
+
+#define USB_DT_ENDPOINT_SIZE           7
+#define USB_DT_ENDPOINT_AUDIO_SIZE     9       /* Audio extension */
+
+
+/*
+ * Endpoints
+ */
+#define USB_ENDPOINT_NUMBER_MASK       0x0f    /* in bEndpointAddress */
+#define USB_ENDPOINT_DIR_MASK          0x80
+
+#define USB_ENDPOINT_XFERTYPE_MASK     0x03    /* in bmAttributes */
+#define USB_ENDPOINT_XFER_CONTROL      0
+#define USB_ENDPOINT_XFER_ISOC         1
+#define USB_ENDPOINT_XFER_BULK         2
+#define USB_ENDPOINT_XFER_INT          3
+#define USB_ENDPOINT_MAX_ADJUSTABLE    0x80
+
+/* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */
+#define USB_ENDPOINT_INTRTYPE          0x30
+#define USB_ENDPOINT_INTR_PERIODIC     (0 << 4)
+#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4)
+
+#define USB_ENDPOINT_SYNCTYPE          0x0c
+#define USB_ENDPOINT_SYNC_NONE         (0 << 2)
+#define USB_ENDPOINT_SYNC_ASYNC                (1 << 2)
+#define USB_ENDPOINT_SYNC_ADAPTIVE     (2 << 2)
+#define USB_ENDPOINT_SYNC_SYNC         (3 << 2)
+
+#define USB_ENDPOINT_USAGE_MASK                0x30
+#define USB_ENDPOINT_USAGE_DATA                0x00
+#define USB_ENDPOINT_USAGE_FEEDBACK    0x10
+#define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20    /* Implicit feedback Data endpoint */
+
+/*-------------------------------------------------------------------------*/
+
+/**
+ * usb_endpoint_num - get the endpoint's number
+ * @epd: endpoint to be checked
+ *
+ * Returns @epd's number: 0 to 15.
+ */
+static __inline__ int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
+}
+
+/**
+ * usb_endpoint_type - get the endpoint's transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according
+ * to @epd's transfer type.
+ */
+static __inline__ int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+}
+
+/**
+ * usb_endpoint_dir_in - check if the endpoint has IN direction
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type IN, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
+}
+
+/**
+ * usb_endpoint_dir_out - check if the endpoint has OUT direction
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type OUT, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_dir_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
+}
+
+/**
+ * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type bulk, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_xfer_bulk(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_BULK);
+}
+
+/**
+ * usb_endpoint_xfer_control - check if the endpoint has control transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type control, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_xfer_control(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_CONTROL);
+}
+
+/**
+ * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type interrupt, otherwise it returns
+ * false.
+ */
+static __inline__ int usb_endpoint_xfer_int(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_INT);
+}
+
+/**
+ * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type isochronous, otherwise it returns
+ * false.
+ */
+static __inline__ int usb_endpoint_xfer_isoc(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_ISOC);
+}
+
+/**
+ * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has bulk transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_bulk_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has bulk transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_bulk_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has interrupt transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_int_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has interrupt transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_int_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has isochronous transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_isoc_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has isochronous transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_isoc_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_maxp - get endpoint's max packet size
+ * @epd: endpoint to be checked
+ *
+ * Returns @epd's max packet
+ */
+static __inline__ int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
+{
+       return __le16_to_cpu(epd->wMaxPacketSize);
+}
+
+static __inline__ int usb_endpoint_interrupt_type(
+               const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bmAttributes & USB_ENDPOINT_INTRTYPE;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SSP_ISOC_ENDPOINT_COMP: SuperSpeedPlus Isochronous Endpoint Companion
+ * descriptor
+ */
+struct usb_ssp_isoc_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __le16 wReseved;
+       __le32 dwBytesPerInterval;
+} __attribute__ ((packed));
+
+#define USB_DT_SSP_ISOC_EP_COMP_SIZE           8
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */
+struct usb_ss_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bMaxBurst;
+       __u8  bmAttributes;
+       __le16 wBytesPerInterval;
+} __attribute__ ((packed));
+
+#define USB_DT_SS_EP_COMP_SIZE         6
+
+/* Bits 4:0 of bmAttributes if this is a bulk endpoint */
+static __inline__ int
+usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp)
+{
+       int             max_streams;
+
+       if (!comp)
+               return 0;
+
+       max_streams = comp->bmAttributes & 0x1f;
+
+       if (!max_streams)
+               return 0;
+
+       max_streams = 1 << max_streams;
+
+       return max_streams;
+}
+
+/* Bits 1:0 of bmAttributes if this is an isoc endpoint */
+#define USB_SS_MULT(p)                 (1 + ((p) & 0x3))
+/* Bit 7 of bmAttributes if a SSP isoc endpoint companion descriptor exists */
+#define USB_SS_SSP_ISOC_COMP(p)                ((p) & (1 << 7))
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
+struct usb_qualifier_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 bcdUSB;
+       __u8  bDeviceClass;
+       __u8  bDeviceSubClass;
+       __u8  bDeviceProtocol;
+       __u8  bMaxPacketSize0;
+       __u8  bNumConfigurations;
+       __u8  bRESERVED;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_OTG (from OTG 1.0a supplement) */
+struct usb_otg_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bmAttributes;     /* support for HNP, SRP, etc */
+} __attribute__ ((packed));
+
+/* USB_DT_OTG (from OTG 2.0 supplement) */
+struct usb_otg20_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bmAttributes;     /* support for HNP, SRP and ADP, etc */
+       __le16 bcdOTG;          /* OTG and EH supplement release number
+                                * in binary-coded decimal(i.e. 2.0 is 0200H)
+                                */
+} __attribute__ ((packed));
+
+/* from usb_otg_descriptor.bmAttributes */
+#define USB_OTG_SRP            (1 << 0)
+#define USB_OTG_HNP            (1 << 1)        /* swap host/device roles */
+#define USB_OTG_ADP            (1 << 2)        /* support ADP */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEBUG:  for special highspeed devices, replacing serial console */
+struct usb_debug_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       /* bulk endpoints with 8 byte maxpacket */
+       __u8  bDebugInEndpoint;
+       __u8  bDebugOutEndpoint;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */
+struct usb_interface_assoc_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bFirstInterface;
+       __u8  bInterfaceCount;
+       __u8  bFunctionClass;
+       __u8  bFunctionSubClass;
+       __u8  bFunctionProtocol;
+       __u8  iFunction;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SECURITY:  group of wireless security descriptors, including
+ * encryption types available for setting up a CC/association.
+ */
+struct usb_security_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumEncryptionTypes;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_KEY:  used with {GET,SET}_SECURITY_DATA; only public keys
+ * may be retrieved.
+ */
+struct usb_key_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  tTKID[3];
+       __u8  bReserved;
+       __u8  bKeyData[0];
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_ENCRYPTION_TYPE:  bundled in DT_SECURITY groups */
+struct usb_encryption_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEncryptionType;
+#define        USB_ENC_TYPE_UNSECURE           0
+#define        USB_ENC_TYPE_WIRED              1       /* non-wireless mode */
+#define        USB_ENC_TYPE_CCM_1              2       /* aes128/cbc session */
+#define        USB_ENC_TYPE_RSA_1              3       /* rsa3072/sha1 auth */
+       __u8  bEncryptionValue;         /* use in SET_ENCRYPTION */
+       __u8  bAuthKeyIndex;
+} __attribute__((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_BOS:  group of device-level capabilities */
+struct usb_bos_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumDeviceCaps;
+} __attribute__((packed));
+
+#define USB_DT_BOS_SIZE                5
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE_CAPABILITY:  grouped with BOS */
+struct usb_dev_cap_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+} __attribute__((packed));
+
+#define        USB_CAP_TYPE_WIRELESS_USB       1
+
+struct usb_wireless_cap_descriptor {   /* Ultra Wide Band */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+
+       __u8  bmAttributes;
+#define        USB_WIRELESS_P2P_DRD            (1 << 1)
+#define        USB_WIRELESS_BEACON_MASK        (3 << 2)
+#define        USB_WIRELESS_BEACON_SELF        (1 << 2)
+#define        USB_WIRELESS_BEACON_DIRECTED    (2 << 2)
+#define        USB_WIRELESS_BEACON_NONE        (3 << 2)
+       __le16 wPHYRates;       /* bit rates, Mbps */
+#define        USB_WIRELESS_PHY_53             (1 << 0)        /* always set */
+#define        USB_WIRELESS_PHY_80             (1 << 1)
+#define        USB_WIRELESS_PHY_107            (1 << 2)        /* always set */
+#define        USB_WIRELESS_PHY_160            (1 << 3)
+#define        USB_WIRELESS_PHY_200            (1 << 4)        /* always set */
+#define        USB_WIRELESS_PHY_320            (1 << 5)
+#define        USB_WIRELESS_PHY_400            (1 << 6)
+#define        USB_WIRELESS_PHY_480            (1 << 7)
+       __u8  bmTFITXPowerInfo; /* TFI power levels */
+       __u8  bmFFITXPowerInfo; /* FFI power levels */
+       __le16 bmBandGroup;
+       __u8  bReserved;
+} __attribute__((packed));
+
+/* USB 2.0 Extension descriptor */
+#define        USB_CAP_TYPE_EXT                2
+
+struct usb_ext_cap_descriptor {                /* Link Power Management */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __le32 bmAttributes;
+#define USB_LPM_SUPPORT                        (1 << 1)        /* supports LPM */
+#define USB_BESL_SUPPORT               (1 << 2)        /* supports BESL */
+#define USB_BESL_BASELINE_VALID                (1 << 3)        /* Baseline BESL valid*/
+#define USB_BESL_DEEP_VALID            (1 << 4)        /* Deep BESL valid */
+#define USB_GET_BESL_BASELINE(p)       (((p) & (0xf << 8)) >> 8)
+#define USB_GET_BESL_DEEP(p)           (((p) & (0xf << 12)) >> 12)
+} __attribute__((packed));
+
+#define USB_DT_USB_EXT_CAP_SIZE        7
+
+/*
+ * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB
+ * specific device level capabilities
+ */
+#define                USB_SS_CAP_TYPE         3
+struct usb_ss_cap_descriptor {         /* Link Power Management */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bmAttributes;
+#define USB_LTM_SUPPORT                        (1 << 1) /* supports LTM */
+       __le16 wSpeedSupported;
+#define USB_LOW_SPEED_OPERATION                (1)      /* Low speed operation */
+#define USB_FULL_SPEED_OPERATION       (1 << 1) /* Full speed operation */
+#define USB_HIGH_SPEED_OPERATION       (1 << 2) /* High speed operation */
+#define USB_5GBPS_OPERATION            (1 << 3) /* Operation at 5Gbps */
+       __u8  bFunctionalitySupport;
+       __u8  bU1devExitLat;
+       __le16 bU2DevExitLat;
+} __attribute__((packed));
+
+#define USB_DT_USB_SS_CAP_SIZE 10
+
+/*
+ * Container ID Capability descriptor: Defines the instance unique ID used to
+ * identify the instance across all operating modes
+ */
+#define        CONTAINER_ID_TYPE       4
+struct usb_ss_container_id_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bReserved;
+       __u8  ContainerID[16]; /* 128-bit number */
+} __attribute__((packed));
+
+#define USB_DT_USB_SS_CONTN_ID_SIZE    20
+
+/*
+ * SuperSpeed Plus USB Capability descriptor: Defines the set of
+ * SuperSpeed Plus USB specific device level capabilities
+ */
+#define        USB_SSP_CAP_TYPE        0xa
+struct usb_ssp_cap_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bReserved;
+       __le32 bmAttributes;
+#define USB_SSP_SUBLINK_SPEED_ATTRIBS  (0x1f << 0) /* sublink speed entries */
+#define USB_SSP_SUBLINK_SPEED_IDS      (0xf << 5)  /* speed ID entries */
+       __u16  wFunctionalitySupport;
+#define USB_SSP_MIN_SUBLINK_SPEED_ATTRIBUTE_ID (0xf)
+#define USB_SSP_MIN_RX_LANE_COUNT              (0xf << 8)
+#define USB_SSP_MIN_TX_LANE_COUNT              (0xf << 12)
+       __le16 wReserved;
+       __le32 bmSublinkSpeedAttr[1]; /* list of sublink speed attrib entries */
+#define USB_SSP_SUBLINK_SPEED_SSID     (0xf)           /* sublink speed ID */
+#define USB_SSP_SUBLINK_SPEED_LSE      (0x3 << 4)      /* Lanespeed exponent */
+#define USB_SSP_SUBLINK_SPEED_ST       (0x3 << 6)      /* Sublink type */
+#define USB_SSP_SUBLINK_SPEED_RSVD     (0x3f << 8)     /* Reserved */
+#define USB_SSP_SUBLINK_SPEED_LP       (0x3 << 14)     /* Link protocol */
+#define USB_SSP_SUBLINK_SPEED_LSM      (0xff << 16)    /* Lanespeed mantissa */
+} __attribute__((packed));
+
+/*
+ * Precision time measurement capability descriptor: advertised by devices and
+ * hubs that support PTM
+ */
+#define        USB_PTM_CAP_TYPE        0xb
+struct usb_ptm_cap_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_WIRELESS_ENDPOINT_COMP:  companion descriptor associated with
+ * each endpoint descriptor for a wireless device
+ */
+struct usb_wireless_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bMaxBurst;
+       __u8  bMaxSequence;
+       __le16 wMaxStreamDelay;
+       __le16 wOverTheAirPacketSize;
+       __u8  bOverTheAirInterval;
+       __u8  bmCompAttributes;
+#define USB_ENDPOINT_SWITCH_MASK       0x03    /* in bmCompAttributes */
+#define USB_ENDPOINT_SWITCH_NO         0
+#define USB_ENDPOINT_SWITCH_SWITCH     1
+#define USB_ENDPOINT_SWITCH_SCALE      2
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless
+ * host and a device for connection set up, mutual authentication, and
+ * exchanging short lived session keys.  The handshake depends on a CC.
+ */
+struct usb_handshake {
+       __u8 bMessageNumber;
+       __u8 bStatus;
+       __u8 tTKID[3];
+       __u8 bReserved;
+       __u8 CDID[16];
+       __u8 nonce[16];
+       __u8 MIC[8];
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC).
+ * A CC may also be set up using non-wireless secure channels (including
+ * wired USB!), and some devices may support CCs with multiple hosts.
+ */
+struct usb_connection_context {
+       __u8 CHID[16];          /* persistent host id */
+       __u8 CDID[16];          /* device id (unique w/in host context) */
+       __u8 CK[16];            /* connection key */
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB 2.0 defines three speeds, here's how Linux identifies them */
+
+enum usb_device_speed {
+       USB_SPEED_UNKNOWN = 0,                  /* enumerating */
+       USB_SPEED_LOW, USB_SPEED_FULL,          /* usb 1.1 */
+       USB_SPEED_HIGH,                         /* usb 2.0 */
+       USB_SPEED_WIRELESS,                     /* wireless (usb 2.5) */
+       USB_SPEED_SUPER,                        /* usb 3.0 */
+       USB_SPEED_SUPER_PLUS,                   /* usb 3.1 */
+};
+
+
+enum usb_device_state {
+       /* NOTATTACHED isn't in the USB spec, and this state acts
+        * the same as ATTACHED ... but it's clearer this way.
+        */
+       USB_STATE_NOTATTACHED = 0,
+
+       /* chapter 9 and authentication (wireless) device states */
+       USB_STATE_ATTACHED,
+       USB_STATE_POWERED,                      /* wired */
+       USB_STATE_RECONNECTING,                 /* auth */
+       USB_STATE_UNAUTHENTICATED,              /* auth */
+       USB_STATE_DEFAULT,                      /* limited function */
+       USB_STATE_ADDRESS,
+       USB_STATE_CONFIGURED,                   /* most functions */
+
+       USB_STATE_SUSPENDED
+
+       /* NOTE:  there are actually four different SUSPENDED
+        * states, returning to POWERED, DEFAULT, ADDRESS, or
+        * CONFIGURED respectively when SOF tokens flow again.
+        * At this level there's no difference between L1 and L2
+        * suspend states.  (L2 being original USB 1.1 suspend.)
+        */
+};
+
+enum usb3_link_state {
+       USB3_LPM_U0 = 0,
+       USB3_LPM_U1,
+       USB3_LPM_U2,
+       USB3_LPM_U3
+};
+
+/*
+ * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1.
+ * 0xff means the parent hub will accept transitions to U1, but will not
+ * initiate a transition.
+ *
+ * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to
+ * U1 after that many microseconds.  Timeouts of 0x80 to 0xFE are reserved
+ * values.
+ *
+ * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2.
+ * 0xff means the parent hub will accept transitions to U2, but will not
+ * initiate a transition.
+ *
+ * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to
+ * U2 after N*256 microseconds.  Therefore a U2 timeout value of 0x1 means a U2
+ * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means
+ * 65.024ms.
+ */
+#define USB3_LPM_DISABLED              0x0
+#define USB3_LPM_U1_MAX_TIMEOUT                0x7F
+#define USB3_LPM_U2_MAX_TIMEOUT                0xFE
+#define USB3_LPM_DEVICE_INITIATED      0xFF
+
+struct usb_set_sel_req {
+       __u8    u1_sel;
+       __u8    u1_pel;
+       __le16  u2_sel;
+       __le16  u2_pel;
+} __attribute__ ((packed));
+
+/*
+ * The Set System Exit Latency control transfer provides one byte each for
+ * U1 SEL and U1 PEL, so the max exit latency is 0xFF.  U2 SEL and U2 PEL each
+ * are two bytes long.
+ */
+#define USB3_LPM_MAX_U1_SEL_PEL                0xFF
+#define USB3_LPM_MAX_U2_SEL_PEL                0xFFFF
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * As per USB compliance update, a device that is actively drawing
+ * more than 100mA from USB must report itself as bus-powered in
+ * the GetStatus(DEVICE) call.
+ * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34
+ */
+#define USB_SELF_POWER_VBUS_MAX_DRAW           100
+
+#endif /* __LINUX_USB_CH9_H */
diff --git a/lib/libdss-include/include/linux/usb/functionfs.h b/lib/libdss-include/include/linux/usb/functionfs.h
new file mode 100644 (file)
index 0000000..3585d3c
--- /dev/null
@@ -0,0 +1,286 @@
+#ifndef __LINUX_FUNCTIONFS_H__
+#define __LINUX_FUNCTIONFS_H__
+
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#include <linux/usb/ch9.h>
+
+
+enum {
+       FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
+       FUNCTIONFS_STRINGS_MAGIC = 2,
+       FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
+};
+
+enum functionfs_flags {
+       FUNCTIONFS_HAS_FS_DESC = 1,
+       FUNCTIONFS_HAS_HS_DESC = 2,
+       FUNCTIONFS_HAS_SS_DESC = 4,
+       FUNCTIONFS_HAS_MS_OS_DESC = 8,
+       FUNCTIONFS_VIRTUAL_ADDR = 16,
+       FUNCTIONFS_EVENTFD = 32,
+};
+
+/* Descriptor of an non-audio endpoint */
+struct usb_endpoint_descriptor_no_audio {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEndpointAddress;
+       __u8  bmAttributes;
+       __le16 wMaxPacketSize;
+       __u8  bInterval;
+} __attribute__((packed));
+
+struct usb_functionfs_descs_head_v2 {
+       __le32 magic;
+       __le32 length;
+       __le32 flags;
+       /*
+        * __le32 fs_count, hs_count, fs_count; must be included manually in
+        * the structure taking flags into consideration.
+        */
+} __attribute__((packed));
+
+/* Legacy format, deprecated as of 3.14. */
+struct usb_functionfs_descs_head {
+       __le32 magic;
+       __le32 length;
+       __le32 fs_count;
+       __le32 hs_count;
+} __attribute__((packed, deprecated));
+
+/* MS OS Descriptor header */
+struct usb_os_desc_header {
+       __u8    interface;
+       __le32  dwLength;
+       __le16  bcdVersion;
+       __le16  wIndex;
+       union {
+               struct {
+                       __u8    bCount;
+                       __u8    Reserved;
+               };
+               __le16  wCount;
+       };
+} __attribute__((packed));
+
+struct usb_ext_compat_desc {
+       __u8    bFirstInterfaceNumber;
+       __u8    Reserved1;
+       __u8    CompatibleID[8];
+       __u8    SubCompatibleID[8];
+       __u8    Reserved2[6];
+};
+
+struct usb_ext_prop_desc {
+       __le32  dwSize;
+       __le32  dwPropertyDataType;
+       __le16  wPropertyNameLength;
+} __attribute__((packed));
+
+
+/*
+ * Descriptors format:
+ *
+ * | off | name      | type         | description                          |
+ * |-----+-----------+--------------+--------------------------------------|
+ * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC_V2      |
+ * |   4 | length    | LE32         | length of the whole data chunk       |
+ * |   8 | flags     | LE32         | combination of functionfs_flags      |
+ * |     | fs_count  | LE32         | number of full-speed descriptors     |
+ * |     | hs_count  | LE32         | number of high-speed descriptors     |
+ * |     | ss_count  | LE32         | number of super-speed descriptors    |
+ * |     | os_count  | LE32         | number of MS OS descriptors          |
+ * |     | fs_descrs | Descriptor[] | list of full-speed descriptors       |
+ * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
+ * |     | ss_descrs | Descriptor[] | list of super-speed descriptors      |
+ * |     | os_descrs | OSDesc[]     | list of MS OS descriptors            |
+ *
+ * Depending on which flags are set, various fields may be missing in the
+ * structure.  Any flags that are not recognised cause the whole block to be
+ * rejected with -ENOSYS.
+ *
+ * Legacy descriptors format (deprecated as of 3.14):
+ *
+ * | off | name      | type         | description                          |
+ * |-----+-----------+--------------+--------------------------------------|
+ * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC         |
+ * |   4 | length    | LE32         | length of the whole data chunk       |
+ * |   8 | fs_count  | LE32         | number of full-speed descriptors     |
+ * |  12 | hs_count  | LE32         | number of high-speed descriptors     |
+ * |  16 | fs_descrs | Descriptor[] | list of full-speed descriptors       |
+ * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
+ *
+ * All numbers must be in little endian order.
+ *
+ * Descriptor[] is an array of valid USB descriptors which have the following
+ * format:
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | bLength         | U8   | length of the descriptor |
+ * |   1 | bDescriptorType | U8   | descriptor type          |
+ * |   2 | payload         |      | descriptor's payload     |
+ *
+ * OSDesc[] is an array of valid MS OS Feature Descriptors which have one of
+ * the following formats:
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | inteface        | U8   | related interface number |
+ * |   1 | dwLength        | U32  | length of the descriptor |
+ * |   5 | bcdVersion      | U16  | currently supported: 1   |
+ * |   7 | wIndex          | U16  | currently supported: 4   |
+ * |   9 | bCount          | U8   | number of ext. compat.   |
+ * |  10 | Reserved        | U8   | 0                        |
+ * |  11 | ExtCompat[]     |      | list of ext. compat. d.  |
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | inteface        | U8   | related interface number |
+ * |   1 | dwLength        | U32  | length of the descriptor |
+ * |   5 | bcdVersion      | U16  | currently supported: 1   |
+ * |   7 | wIndex          | U16  | currently supported: 5   |
+ * |   9 | wCount          | U16  | number of ext. compat.   |
+ * |  11 | ExtProp[]       |      | list of ext. prop. d.    |
+ *
+ * ExtCompat[] is an array of valid Extended Compatiblity descriptors
+ * which have the following format:
+ *
+ * | off | name                  | type | description                         |
+ * |-----+-----------------------+------+-------------------------------------|
+ * |   0 | bFirstInterfaceNumber | U8   | index of the interface or of the 1st|
+ * |     |                       |      | interface in an IAD group           |
+ * |   1 | Reserved              | U8   | 0                                   |
+ * |   2 | CompatibleID          | U8[8]| compatible ID string                |
+ * |  10 | SubCompatibleID       | U8[8]| subcompatible ID string             |
+ * |  18 | Reserved              | U8[6]| 0                                   |
+ *
+ * ExtProp[] is an array of valid Extended Properties descriptors
+ * which have the following format:
+ *
+ * | off | name                  | type | description                         |
+ * |-----+-----------------------+------+-------------------------------------|
+ * |   0 | dwSize                | U32  | length of the descriptor            |
+ * |   4 | dwPropertyDataType    | U32  | 1..7                                |
+ * |   8 | wPropertyNameLength   | U16  | bPropertyName length (NL)           |
+ * |  10 | bPropertyName         |U8[NL]| name of this property               |
+ * |10+NL| dwPropertyDataLength  | U32  | bPropertyData length (DL)           |
+ * |14+NL| bProperty             |U8[DL]| payload of this property            |
+ */
+
+struct usb_functionfs_strings_head {
+       __le32 magic;
+       __le32 length;
+       __le32 str_count;
+       __le32 lang_count;
+} __attribute__((packed));
+
+/*
+ * Strings format:
+ *
+ * | off | name       | type                  | description                |
+ * |-----+------------+-----------------------+----------------------------|
+ * |   0 | magic      | LE32                  | FUNCTIONFS_STRINGS_MAGIC   |
+ * |   4 | length     | LE32                  | length of the data chunk   |
+ * |   8 | str_count  | LE32                  | number of strings          |
+ * |  12 | lang_count | LE32                  | number of languages        |
+ * |  16 | stringtab  | StringTab[lang_count] | table of strings per lang  |
+ *
+ * For each language there is one stringtab entry (ie. there are lang_count
+ * stringtab entires).  Each StringTab has following format:
+ *
+ * | off | name    | type              | description                        |
+ * |-----+---------+-------------------+------------------------------------|
+ * |   0 | lang    | LE16              | language code                      |
+ * |   2 | strings | String[str_count] | array of strings in given language |
+ *
+ * For each string there is one strings entry (ie. there are str_count
+ * string entries).  Each String is a NUL terminated string encoded in
+ * UTF-8.
+ */
+
+
+
+/*
+ * Events are delivered on the ep0 file descriptor, when the user mode driver
+ * reads from this file descriptor after writing the descriptors.  Don't
+ * stop polling this descriptor.
+ */
+
+enum usb_functionfs_event_type {
+       FUNCTIONFS_BIND,
+       FUNCTIONFS_UNBIND,
+
+       FUNCTIONFS_ENABLE,
+       FUNCTIONFS_DISABLE,
+
+       FUNCTIONFS_SETUP,
+
+       FUNCTIONFS_SUSPEND,
+       FUNCTIONFS_RESUME
+};
+
+/* NOTE:  this structure must stay the same size and layout on
+ * both 32-bit and 64-bit kernels.
+ */
+struct usb_functionfs_event {
+       union {
+               /* SETUP: packet; DATA phase i/o precedes next event
+                *(setup.bmRequestType & USB_DIR_IN) flags direction */
+               struct usb_ctrlrequest  setup;
+       } __attribute__((packed)) u;
+
+       /* enum usb_functionfs_event_type */
+       __u8                            type;
+       __u8                            _pad[3];
+} __attribute__((packed));
+
+
+/* Endpoint ioctls */
+/* The same as in gadgetfs */
+
+/* IN transfers may be reported to the gadget driver as complete
+ *     when the fifo is loaded, before the host reads the data;
+ * OUT transfers may be reported to the host's "client" driver as
+ *     complete when they're sitting in the FIFO unread.
+ * THIS returns how many bytes are "unclaimed" in the endpoint fifo
+ * (needed for precise fault handling, when the hardware allows it)
+ */
+#define        FUNCTIONFS_FIFO_STATUS  _IO('g', 1)
+
+/* discards any unclaimed data in the fifo. */
+#define        FUNCTIONFS_FIFO_FLUSH   _IO('g', 2)
+
+/* resets endpoint halt+toggle; used to implement set_interface.
+ * some hardware (like pxa2xx) can't support this.
+ */
+#define        FUNCTIONFS_CLEAR_HALT   _IO('g', 3)
+
+/* Specific for functionfs */
+
+/*
+ * Returns reverse mapping of an interface.  Called on EP0.  If there
+ * is no such interface returns -EDOM.  If function is not active
+ * returns -ENODEV.
+ */
+#define        FUNCTIONFS_INTERFACE_REVMAP     _IO('g', 128)
+
+/*
+ * Returns real bEndpointAddress of an endpoint.  If function is not
+ * active returns -ENODEV.
+ */
+#define        FUNCTIONFS_ENDPOINT_REVMAP      _IO('g', 129)
+
+/*
+ * Returns endpoint descriptor. If function is not active returns -ENODEV.
+ */
+#define        FUNCTIONFS_ENDPOINT_DESC        _IOR('g', 130, \
+                                            struct usb_endpoint_descriptor)
+
+
+
+#endif /* __LINUX_FUNCTIONFS_H__ */
diff --git a/lib/libdss-include/include/linux/usb/g_printer.h b/lib/libdss-include/include/linux/usb/g_printer.h
new file mode 100644 (file)
index 0000000..6178fde
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * g_printer.h -- Header file for USB Printer gadget driver
+ *
+ * Copyright (C) 2007 Craig W. Nadler
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_USB_G_PRINTER_H
+#define __LINUX_USB_G_PRINTER_H
+
+#define PRINTER_NOT_ERROR      0x08
+#define PRINTER_SELECTED       0x10
+#define PRINTER_PAPER_EMPTY    0x20
+
+/* The 'g' code is also used by gadgetfs ioctl requests.
+ * Don't add any colliding codes to either driver, and keep
+ * them in unique ranges (size 0x20 for now).
+ */
+#define GADGET_GET_PRINTER_STATUS      _IOR('g', 0x21, unsigned char)
+#define GADGET_SET_PRINTER_STATUS      _IOWR('g', 0x22, unsigned char)
+
+#endif /* __LINUX_USB_G_PRINTER_H */
diff --git a/lib/libdss-include/include/linux/usb/gadgetfs.h b/lib/libdss-include/include/linux/usb/gadgetfs.h
new file mode 100644 (file)
index 0000000..0bb12e0
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Filesystem based user-mode API to USB Gadget controller hardware
+ *
+ * Other than ep0 operations, most things are done by read() and write()
+ * on endpoint files found in one directory.  They are configured by
+ * writing descriptors, and then may be used for normal stream style
+ * i/o requests.  When ep0 is configured, the device can enumerate;
+ * when it's closed, the device disconnects from usb.  Operations on
+ * ep0 require ioctl() operations.
+ *
+ * Configuration and device descriptors get written to /dev/gadget/$CHIP,
+ * which may then be used to read usb_gadgetfs_event structs.  The driver
+ * may activate endpoints as it handles SET_CONFIGURATION setup events,
+ * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT
+ * then performing data transfers by reading or writing.
+ */
+
+#ifndef __LINUX_USB_GADGETFS_H
+#define __LINUX_USB_GADGETFS_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#include <linux/usb/ch9.h>
+
+/*
+ * Events are delivered on the ep0 file descriptor, when the user mode driver
+ * reads from this file descriptor after writing the descriptors.  Don't
+ * stop polling this descriptor.
+ */
+
+enum usb_gadgetfs_event_type {
+       GADGETFS_NOP = 0,
+
+       GADGETFS_CONNECT,
+       GADGETFS_DISCONNECT,
+       GADGETFS_SETUP,
+       GADGETFS_SUSPEND,
+       /* and likely more ! */
+};
+
+/* NOTE:  this structure must stay the same size and layout on
+ * both 32-bit and 64-bit kernels.
+ */
+struct usb_gadgetfs_event {
+       union {
+               /* NOP, DISCONNECT, SUSPEND: nothing
+                * ... some hardware can't report disconnection
+                */
+
+               /* CONNECT: just the speed */
+               enum usb_device_speed   speed;
+
+               /* SETUP: packet; DATA phase i/o precedes next event
+                *(setup.bmRequestType & USB_DIR_IN) flags direction
+                * ... includes SET_CONFIGURATION, SET_INTERFACE
+                */
+               struct usb_ctrlrequest  setup;
+       } u;
+       enum usb_gadgetfs_event_type    type;
+};
+
+
+/* The 'g' code is also used by printer gadget ioctl requests.
+ * Don't add any colliding codes to either driver, and keep
+ * them in unique ranges (size 0x20 for now).
+ */
+
+/* endpoint ioctls */
+
+/* IN transfers may be reported to the gadget driver as complete
+ *     when the fifo is loaded, before the host reads the data;
+ * OUT transfers may be reported to the host's "client" driver as
+ *     complete when they're sitting in the FIFO unread.
+ * THIS returns how many bytes are "unclaimed" in the endpoint fifo
+ * (needed for precise fault handling, when the hardware allows it)
+ */
+#define        GADGETFS_FIFO_STATUS    _IO('g', 1)
+
+/* discards any unclaimed data in the fifo. */
+#define        GADGETFS_FIFO_FLUSH     _IO('g', 2)
+
+/* resets endpoint halt+toggle; used to implement set_interface.
+ * some hardware (like pxa2xx) can't support this.
+ */
+#define        GADGETFS_CLEAR_HALT     _IO('g', 3)
+
+#endif /* __LINUX_USB_GADGETFS_H */
diff --git a/lib/libdss-include/include/linux/usb/midi.h b/lib/libdss-include/include/linux/usb/midi.h
new file mode 100644 (file)
index 0000000..c8c52e3
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * <linux/usb/midi.h> -- USB MIDI definitions.
+ *
+ * Copyright (C) 2006 Thumtronics Pty Ltd.
+ * Developed for Thumtronics by Grey Innovation
+ * Ben Williamson <ben.williamson@greyinnovation.com>
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License ("GPL") version 2, as published by the Free Software Foundation.
+ *
+ * This file holds USB constants and structures defined
+ * by the USB Device Class Definition for MIDI Devices.
+ * Comments below reference relevant sections of that document:
+ *
+ * http://www.usb.org/developers/devclass_docs/midi10.pdf
+ */
+
+#ifndef __LINUX_USB_MIDI_H
+#define __LINUX_USB_MIDI_H
+
+#include <linux/types.h>
+
+/* A.1  MS Class-Specific Interface Descriptor Subtypes */
+#define USB_MS_HEADER          0x01
+#define USB_MS_MIDI_IN_JACK    0x02
+#define USB_MS_MIDI_OUT_JACK   0x03
+#define USB_MS_ELEMENT         0x04
+
+/* A.2  MS Class-Specific Endpoint Descriptor Subtypes */
+#define USB_MS_GENERAL         0x01
+
+/* A.3  MS MIDI IN and OUT Jack Types */
+#define USB_MS_EMBEDDED                0x01
+#define USB_MS_EXTERNAL                0x02
+
+/* 6.1.2.1  Class-Specific MS Interface Header Descriptor */
+struct usb_ms_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubtype;
+       __le16 bcdMSC;
+       __le16 wTotalLength;
+} __attribute__ ((packed));
+
+#define USB_DT_MS_HEADER_SIZE  7
+
+/* 6.1.2.2  MIDI IN Jack Descriptor */
+struct usb_midi_in_jack_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* USB_MS_MIDI_IN_JACK */
+       __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
+       __u8  bJackID;
+       __u8  iJack;
+} __attribute__ ((packed));
+
+#define USB_DT_MIDI_IN_SIZE    6
+
+struct usb_midi_source_pin {
+       __u8  baSourceID;
+       __u8  baSourcePin;
+} __attribute__ ((packed));
+
+/* 6.1.2.3  MIDI OUT Jack Descriptor */
+struct usb_midi_out_jack_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* USB_MS_MIDI_OUT_JACK */
+       __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
+       __u8  bJackID;
+       __u8  bNrInputPins;             /* p */
+       struct usb_midi_source_pin pins[]; /* [p] */
+       /*__u8  iJack;  -- omitted due to variable-sized pins[] */
+} __attribute__ ((packed));
+
+#define USB_DT_MIDI_OUT_SIZE(p)        (7 + 2 * (p))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p)                        \
+struct usb_midi_out_jack_descriptor_##p {                      \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bJackType;                                        \
+       __u8  bJackID;                                          \
+       __u8  bNrInputPins;                                     \
+       struct usb_midi_source_pin pins[p];                     \
+       __u8  iJack;                                            \
+} __attribute__ ((packed))
+
+/* 6.2.2  Class-Specific MS Bulk Data Endpoint Descriptor */
+struct usb_ms_endpoint_descriptor {
+       __u8  bLength;                  /* 4+n */
+       __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
+       __u8  bDescriptorSubtype;       /* USB_MS_GENERAL */
+       __u8  bNumEmbMIDIJack;          /* n */
+       __u8  baAssocJackID[];          /* [n] */
+} __attribute__ ((packed));
+
+#define USB_DT_MS_ENDPOINT_SIZE(n)     (4 + (n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n)                  \
+struct usb_ms_endpoint_descriptor_##n {                                \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bNumEmbMIDIJack;                                  \
+       __u8  baAssocJackID[n];                                 \
+} __attribute__ ((packed))
+
+#endif /* __LINUX_USB_MIDI_H */
diff --git a/lib/libdss-include/include/linux/usb/tmc.h b/lib/libdss-include/include/linux/usb/tmc.h
new file mode 100644 (file)
index 0000000..c045ae1
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
+ *
+ * This file holds USB constants defined by the USB Device Class
+ * Definition for Test and Measurement devices published by the USB-IF.
+ *
+ * It also has the ioctl definitions for the usbtmc kernel driver that
+ * userspace needs to know about.
+ */
+
+#ifndef __LINUX_USB_TMC_H
+#define __LINUX_USB_TMC_H
+
+/* USB TMC status values */
+#define USBTMC_STATUS_SUCCESS                          0x01
+#define USBTMC_STATUS_PENDING                          0x02
+#define USBTMC_STATUS_FAILED                           0x80
+#define USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS         0x81
+#define USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS            0x82
+#define USBTMC_STATUS_SPLIT_IN_PROGRESS                        0x83
+
+/* USB TMC requests values */
+#define USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT         1
+#define USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS     2
+#define USBTMC_REQUEST_INITIATE_ABORT_BULK_IN          3
+#define USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS      4
+#define USBTMC_REQUEST_INITIATE_CLEAR                  5
+#define USBTMC_REQUEST_CHECK_CLEAR_STATUS              6
+#define USBTMC_REQUEST_GET_CAPABILITIES                        7
+#define USBTMC_REQUEST_INDICATOR_PULSE                 64
+
+/* Request values for USBTMC driver's ioctl entry point */
+#define USBTMC_IOC_NR                  91
+#define USBTMC_IOCTL_INDICATOR_PULSE   _IO(USBTMC_IOC_NR, 1)
+#define USBTMC_IOCTL_CLEAR             _IO(USBTMC_IOC_NR, 2)
+#define USBTMC_IOCTL_ABORT_BULK_OUT    _IO(USBTMC_IOC_NR, 3)
+#define USBTMC_IOCTL_ABORT_BULK_IN     _IO(USBTMC_IOC_NR, 4)
+#define USBTMC_IOCTL_CLEAR_OUT_HALT    _IO(USBTMC_IOC_NR, 6)
+#define USBTMC_IOCTL_CLEAR_IN_HALT     _IO(USBTMC_IOC_NR, 7)
+
+#endif
diff --git a/lib/libdss-include/include/linux/usb/video.h b/lib/libdss-include/include/linux/usb/video.h
new file mode 100644 (file)
index 0000000..3b3b95e
--- /dev/null
@@ -0,0 +1,568 @@
+/*
+ * USB Video Class definitions.
+ *
+ * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be>
+ *
+ * This file holds USB constants and structures defined by the USB Device
+ * Class Definition for Video Devices. Unless otherwise stated, comments
+ * below reference relevant sections of the USB Video Class 1.1 specification
+ * available at
+ *
+ * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
+ */
+
+#ifndef __LINUX_USB_VIDEO_H
+#define __LINUX_USB_VIDEO_H
+
+#include <linux/types.h>
+
+/* --------------------------------------------------------------------------
+ * UVC constants
+ */
+
+/* A.2. Video Interface Subclass Codes */
+#define UVC_SC_UNDEFINED                               0x00
+#define UVC_SC_VIDEOCONTROL                            0x01
+#define UVC_SC_VIDEOSTREAMING                          0x02
+#define UVC_SC_VIDEO_INTERFACE_COLLECTION              0x03
+
+/* A.3. Video Interface Protocol Codes */
+#define UVC_PC_PROTOCOL_UNDEFINED                      0x00
+
+/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
+#define UVC_VC_DESCRIPTOR_UNDEFINED                    0x00
+#define UVC_VC_HEADER                                  0x01
+#define UVC_VC_INPUT_TERMINAL                          0x02
+#define UVC_VC_OUTPUT_TERMINAL                         0x03
+#define UVC_VC_SELECTOR_UNIT                           0x04
+#define UVC_VC_PROCESSING_UNIT                         0x05
+#define UVC_VC_EXTENSION_UNIT                          0x06
+
+/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */
+#define UVC_VS_UNDEFINED                               0x00
+#define UVC_VS_INPUT_HEADER                            0x01
+#define UVC_VS_OUTPUT_HEADER                           0x02
+#define UVC_VS_STILL_IMAGE_FRAME                       0x03
+#define UVC_VS_FORMAT_UNCOMPRESSED                     0x04
+#define UVC_VS_FRAME_UNCOMPRESSED                      0x05
+#define UVC_VS_FORMAT_MJPEG                            0x06
+#define UVC_VS_FRAME_MJPEG                             0x07
+#define UVC_VS_FORMAT_MPEG2TS                          0x0a
+#define UVC_VS_FORMAT_DV                               0x0c
+#define UVC_VS_COLORFORMAT                             0x0d
+#define UVC_VS_FORMAT_FRAME_BASED                      0x10
+#define UVC_VS_FRAME_FRAME_BASED                       0x11
+#define UVC_VS_FORMAT_STREAM_BASED                     0x12
+
+/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */
+#define UVC_EP_UNDEFINED                               0x00
+#define UVC_EP_GENERAL                                 0x01
+#define UVC_EP_ENDPOINT                                        0x02
+#define UVC_EP_INTERRUPT                               0x03
+
+/* A.8. Video Class-Specific Request Codes */
+#define UVC_RC_UNDEFINED                               0x00
+#define UVC_SET_CUR                                    0x01
+#define UVC_GET_CUR                                    0x81
+#define UVC_GET_MIN                                    0x82
+#define UVC_GET_MAX                                    0x83
+#define UVC_GET_RES                                    0x84
+#define UVC_GET_LEN                                    0x85
+#define UVC_GET_INFO                                   0x86
+#define UVC_GET_DEF                                    0x87
+
+/* A.9.1. VideoControl Interface Control Selectors */
+#define UVC_VC_CONTROL_UNDEFINED                       0x00
+#define UVC_VC_VIDEO_POWER_MODE_CONTROL                        0x01
+#define UVC_VC_REQUEST_ERROR_CODE_CONTROL              0x02
+
+/* A.9.2. Terminal Control Selectors */
+#define UVC_TE_CONTROL_UNDEFINED                       0x00
+
+/* A.9.3. Selector Unit Control Selectors */
+#define UVC_SU_CONTROL_UNDEFINED                       0x00
+#define UVC_SU_INPUT_SELECT_CONTROL                    0x01
+
+/* A.9.4. Camera Terminal Control Selectors */
+#define UVC_CT_CONTROL_UNDEFINED                       0x00
+#define UVC_CT_SCANNING_MODE_CONTROL                   0x01
+#define UVC_CT_AE_MODE_CONTROL                         0x02
+#define UVC_CT_AE_PRIORITY_CONTROL                     0x03
+#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL          0x04
+#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL          0x05
+#define UVC_CT_FOCUS_ABSOLUTE_CONTROL                  0x06
+#define UVC_CT_FOCUS_RELATIVE_CONTROL                  0x07
+#define UVC_CT_FOCUS_AUTO_CONTROL                      0x08
+#define UVC_CT_IRIS_ABSOLUTE_CONTROL                   0x09
+#define UVC_CT_IRIS_RELATIVE_CONTROL                   0x0a
+#define UVC_CT_ZOOM_ABSOLUTE_CONTROL                   0x0b
+#define UVC_CT_ZOOM_RELATIVE_CONTROL                   0x0c
+#define UVC_CT_PANTILT_ABSOLUTE_CONTROL                        0x0d
+#define UVC_CT_PANTILT_RELATIVE_CONTROL                        0x0e
+#define UVC_CT_ROLL_ABSOLUTE_CONTROL                   0x0f
+#define UVC_CT_ROLL_RELATIVE_CONTROL                   0x10
+#define UVC_CT_PRIVACY_CONTROL                         0x11
+
+/* A.9.5. Processing Unit Control Selectors */
+#define UVC_PU_CONTROL_UNDEFINED                       0x00
+#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL          0x01
+#define UVC_PU_BRIGHTNESS_CONTROL                      0x02
+#define UVC_PU_CONTRAST_CONTROL                                0x03
+#define UVC_PU_GAIN_CONTROL                            0x04
+#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL            0x05
+#define UVC_PU_HUE_CONTROL                             0x06
+#define UVC_PU_SATURATION_CONTROL                      0x07
+#define UVC_PU_SHARPNESS_CONTROL                       0x08
+#define UVC_PU_GAMMA_CONTROL                           0x09
+#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL       0x0a
+#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL  0x0b
+#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL         0x0c
+#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL    0x0d
+#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL              0x0e
+#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL                0x0f
+#define UVC_PU_HUE_AUTO_CONTROL                                0x10
+#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL           0x11
+#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL              0x12
+
+/* A.9.7. VideoStreaming Interface Control Selectors */
+#define UVC_VS_CONTROL_UNDEFINED                       0x00
+#define UVC_VS_PROBE_CONTROL                           0x01
+#define UVC_VS_COMMIT_CONTROL                          0x02
+#define UVC_VS_STILL_PROBE_CONTROL                     0x03
+#define UVC_VS_STILL_COMMIT_CONTROL                    0x04
+#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL             0x05
+#define UVC_VS_STREAM_ERROR_CODE_CONTROL               0x06
+#define UVC_VS_GENERATE_KEY_FRAME_CONTROL              0x07
+#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL            0x08
+#define UVC_VS_SYNC_DELAY_CONTROL                      0x09
+
+/* B.1. USB Terminal Types */
+#define UVC_TT_VENDOR_SPECIFIC                         0x0100
+#define UVC_TT_STREAMING                               0x0101
+
+/* B.2. Input Terminal Types */
+#define UVC_ITT_VENDOR_SPECIFIC                                0x0200
+#define UVC_ITT_CAMERA                                 0x0201
+#define UVC_ITT_MEDIA_TRANSPORT_INPUT                  0x0202
+
+/* B.3. Output Terminal Types */
+#define UVC_OTT_VENDOR_SPECIFIC                                0x0300
+#define UVC_OTT_DISPLAY                                        0x0301
+#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT                 0x0302
+
+/* B.4. External Terminal Types */
+#define UVC_EXTERNAL_VENDOR_SPECIFIC                   0x0400
+#define UVC_COMPOSITE_CONNECTOR                                0x0401
+#define UVC_SVIDEO_CONNECTOR                           0x0402
+#define UVC_COMPONENT_CONNECTOR                                0x0403
+
+/* 2.4.2.2. Status Packet Type */
+#define UVC_STATUS_TYPE_CONTROL                                1
+#define UVC_STATUS_TYPE_STREAMING                      2
+
+/* 2.4.3.3. Payload Header Information */
+#define UVC_STREAM_EOH                                 (1 << 7)
+#define UVC_STREAM_ERR                                 (1 << 6)
+#define UVC_STREAM_STI                                 (1 << 5)
+#define UVC_STREAM_RES                                 (1 << 4)
+#define UVC_STREAM_SCR                                 (1 << 3)
+#define UVC_STREAM_PTS                                 (1 << 2)
+#define UVC_STREAM_EOF                                 (1 << 1)
+#define UVC_STREAM_FID                                 (1 << 0)
+
+/* 4.1.2. Control Capabilities */
+#define UVC_CONTROL_CAP_GET                            (1 << 0)
+#define UVC_CONTROL_CAP_SET                            (1 << 1)
+#define UVC_CONTROL_CAP_DISABLED                       (1 << 2)
+#define UVC_CONTROL_CAP_AUTOUPDATE                     (1 << 3)
+#define UVC_CONTROL_CAP_ASYNCHRONOUS                   (1 << 4)
+
+/* ------------------------------------------------------------------------
+ * UVC structures
+ */
+
+/* All UVC descriptors have these 3 fields at the beginning */
+struct uvc_descriptor_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+} __attribute__((packed));
+
+/* 3.7.2. Video Control Interface Header Descriptor */
+struct uvc_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u16 bcdUVC;
+       __u16 wTotalLength;
+       __u32 dwClockFrequency;
+       __u8  bInCollection;
+       __u8  baInterfaceNr[];
+} __attribute__((__packed__));
+
+#define UVC_DT_HEADER_SIZE(n)                          (12+(n))
+
+#define UVC_HEADER_DESCRIPTOR(n) \
+       uvc_header_descriptor_##n
+
+#define DECLARE_UVC_HEADER_DESCRIPTOR(n)               \
+struct UVC_HEADER_DESCRIPTOR(n) {                      \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u16 bcdUVC;                                   \
+       __u16 wTotalLength;                             \
+       __u32 dwClockFrequency;                         \
+       __u8  bInCollection;                            \
+       __u8  baInterfaceNr[n];                         \
+} __attribute__ ((packed))
+
+/* 3.7.2.1. Input Terminal Descriptor */
+struct uvc_input_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+} __attribute__((__packed__));
+
+#define UVC_DT_INPUT_TERMINAL_SIZE                     8
+
+/* 3.7.2.2. Output Terminal Descriptor */
+struct uvc_output_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  bSourceID;
+       __u8  iTerminal;
+} __attribute__((__packed__));
+
+#define UVC_DT_OUTPUT_TERMINAL_SIZE                    9
+
+/* 3.7.2.3. Camera Terminal Descriptor */
+struct uvc_camera_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+       __u16 wObjectiveFocalLengthMin;
+       __u16 wObjectiveFocalLengthMax;
+       __u16 wOcularFocalLength;
+       __u8  bControlSize;
+       __u8  bmControls[3];
+} __attribute__((__packed__));
+
+#define UVC_DT_CAMERA_TERMINAL_SIZE(n)                 (15+(n))
+
+/* 3.7.2.4. Selector Unit Descriptor */
+struct uvc_selector_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  bNrInPins;
+       __u8  baSourceID[0];
+       __u8  iSelector;
+} __attribute__((__packed__));
+
+#define UVC_DT_SELECTOR_UNIT_SIZE(n)                   (6+(n))
+
+#define UVC_SELECTOR_UNIT_DESCRIPTOR(n)        \
+       uvc_selector_unit_descriptor_##n
+
+#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n)        \
+struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) {               \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bUnitID;                                  \
+       __u8  bNrInPins;                                \
+       __u8  baSourceID[n];                            \
+       __u8  iSelector;                                \
+} __attribute__ ((packed))
+
+/* 3.7.2.5. Processing Unit Descriptor */
+struct uvc_processing_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  bSourceID;
+       __u16 wMaxMultiplier;
+       __u8  bControlSize;
+       __u8  bmControls[2];
+       __u8  iProcessing;
+} __attribute__((__packed__));
+
+#define UVC_DT_PROCESSING_UNIT_SIZE(n)                 (9+(n))
+
+/* 3.7.2.6. Extension Unit Descriptor */
+struct uvc_extension_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  guidExtensionCode[16];
+       __u8  bNumControls;
+       __u8  bNrInPins;
+       __u8  baSourceID[0];
+       __u8  bControlSize;
+       __u8  bmControls[0];
+       __u8  iExtension;
+} __attribute__((__packed__));
+
+#define UVC_DT_EXTENSION_UNIT_SIZE(p, n)               (24+(p)+(n))
+
+#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \
+       uvc_extension_unit_descriptor_##p_##n
+
+#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n)    \
+struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) {           \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bUnitID;                                  \
+       __u8  guidExtensionCode[16];                    \
+       __u8  bNumControls;                             \
+       __u8  bNrInPins;                                \
+       __u8  baSourceID[p];                            \
+       __u8  bControlSize;                             \
+       __u8  bmControls[n];                            \
+       __u8  iExtension;                               \
+} __attribute__ ((packed))
+
+/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */
+struct uvc_control_endpoint_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u16 wMaxTransferSize;
+} __attribute__((__packed__));
+
+#define UVC_DT_CONTROL_ENDPOINT_SIZE                   5
+
+/* 3.9.2.1. Input Header Descriptor */
+struct uvc_input_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bNumFormats;
+       __u16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bmInfo;
+       __u8  bTerminalLink;
+       __u8  bStillCaptureMethod;
+       __u8  bTriggerSupport;
+       __u8  bTriggerUsage;
+       __u8  bControlSize;
+       __u8  bmaControls[];
+} __attribute__((__packed__));
+
+#define UVC_DT_INPUT_HEADER_SIZE(n, p)                 (13+(n*p))
+
+#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \
+       uvc_input_header_descriptor_##n_##p
+
+#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p)      \
+struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) {             \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bNumFormats;                              \
+       __u16 wTotalLength;                             \
+       __u8  bEndpointAddress;                         \
+       __u8  bmInfo;                                   \
+       __u8  bTerminalLink;                            \
+       __u8  bStillCaptureMethod;                      \
+       __u8  bTriggerSupport;                          \
+       __u8  bTriggerUsage;                            \
+       __u8  bControlSize;                             \
+       __u8  bmaControls[p][n];                        \
+} __attribute__ ((packed))
+
+/* 3.9.2.2. Output Header Descriptor */
+struct uvc_output_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bNumFormats;
+       __u16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bTerminalLink;
+       __u8  bControlSize;
+       __u8  bmaControls[];
+} __attribute__((__packed__));
+
+#define UVC_DT_OUTPUT_HEADER_SIZE(n, p)                        (9+(n*p))
+
+#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \
+       uvc_output_header_descriptor_##n_##p
+
+#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p)     \
+struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) {            \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bNumFormats;                              \
+       __u16 wTotalLength;                             \
+       __u8  bEndpointAddress;                         \
+       __u8  bTerminalLink;                            \
+       __u8  bControlSize;                             \
+       __u8  bmaControls[p][n];                        \
+} __attribute__ ((packed))
+
+/* 3.9.2.6. Color matching descriptor */
+struct uvc_color_matching_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bColorPrimaries;
+       __u8  bTransferCharacteristics;
+       __u8  bMatrixCoefficients;
+} __attribute__((__packed__));
+
+#define UVC_DT_COLOR_MATCHING_SIZE                     6
+
+/* 4.3.1.1. Video Probe and Commit Controls */
+struct uvc_streaming_control {
+       __u16 bmHint;
+       __u8  bFormatIndex;
+       __u8  bFrameIndex;
+       __u32 dwFrameInterval;
+       __u16 wKeyFrameRate;
+       __u16 wPFrameRate;
+       __u16 wCompQuality;
+       __u16 wCompWindowSize;
+       __u16 wDelay;
+       __u32 dwMaxVideoFrameSize;
+       __u32 dwMaxPayloadTransferSize;
+       __u32 dwClockFrequency;
+       __u8  bmFramingInfo;
+       __u8  bPreferedVersion;
+       __u8  bMinVersion;
+       __u8  bMaxVersion;
+} __attribute__((__packed__));
+
+/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */
+struct uvc_format_uncompressed {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFormatIndex;
+       __u8  bNumFrameDescriptors;
+       __u8  guidFormat[16];
+       __u8  bBitsPerPixel;
+       __u8  bDefaultFrameIndex;
+       __u8  bAspectRatioX;
+       __u8  bAspectRatioY;
+       __u8  bmInterfaceFlags;
+       __u8  bCopyProtect;
+} __attribute__((__packed__));
+
+#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE                        27
+
+/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */
+struct uvc_frame_uncompressed {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFrameIndex;
+       __u8  bmCapabilities;
+       __u16 wWidth;
+       __u16 wHeight;
+       __u32 dwMinBitRate;
+       __u32 dwMaxBitRate;
+       __u32 dwMaxVideoFrameBufferSize;
+       __u32 dwDefaultFrameInterval;
+       __u8  bFrameIntervalType;
+       __u32 dwFrameInterval[];
+} __attribute__((__packed__));
+
+#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n)              (26+4*(n))
+
+#define UVC_FRAME_UNCOMPRESSED(n) \
+       uvc_frame_uncompressed_##n
+
+#define DECLARE_UVC_FRAME_UNCOMPRESSED(n)              \
+struct UVC_FRAME_UNCOMPRESSED(n) {                     \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bFrameIndex;                              \
+       __u8  bmCapabilities;                           \
+       __u16 wWidth;                                   \
+       __u16 wHeight;                                  \
+       __u32 dwMinBitRate;                             \
+       __u32 dwMaxBitRate;                             \
+       __u32 dwMaxVideoFrameBufferSize;                \
+       __u32 dwDefaultFrameInterval;                   \
+       __u8  bFrameIntervalType;                       \
+       __u32 dwFrameInterval[n];                       \
+} __attribute__ ((packed))
+
+/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */
+struct uvc_format_mjpeg {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFormatIndex;
+       __u8  bNumFrameDescriptors;
+       __u8  bmFlags;
+       __u8  bDefaultFrameIndex;
+       __u8  bAspectRatioX;
+       __u8  bAspectRatioY;
+       __u8  bmInterfaceFlags;
+       __u8  bCopyProtect;
+} __attribute__((__packed__));
+
+#define UVC_DT_FORMAT_MJPEG_SIZE                       11
+
+/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */
+struct uvc_frame_mjpeg {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFrameIndex;
+       __u8  bmCapabilities;
+       __u16 wWidth;
+       __u16 wHeight;
+       __u32 dwMinBitRate;
+       __u32 dwMaxBitRate;
+       __u32 dwMaxVideoFrameBufferSize;
+       __u32 dwDefaultFrameInterval;
+       __u8  bFrameIntervalType;
+       __u32 dwFrameInterval[];
+} __attribute__((__packed__));
+
+#define UVC_DT_FRAME_MJPEG_SIZE(n)                     (26+4*(n))
+
+#define UVC_FRAME_MJPEG(n) \
+       uvc_frame_mjpeg_##n
+
+#define DECLARE_UVC_FRAME_MJPEG(n)                     \
+struct UVC_FRAME_MJPEG(n) {                            \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bFrameIndex;                              \
+       __u8  bmCapabilities;                           \
+       __u16 wWidth;                                   \
+       __u16 wHeight;                                  \
+       __u32 dwMinBitRate;                             \
+       __u32 dwMaxBitRate;                             \
+       __u32 dwMaxVideoFrameBufferSize;                \
+       __u32 dwDefaultFrameInterval;                   \
+       __u8  bFrameIntervalType;                       \
+       __u32 dwFrameInterval[n];                       \
+} __attribute__ ((packed))
+
+#endif /* __LINUX_USB_VIDEO_H */
+
diff --git a/lib/libdss-include/include/linux/usbdevice_fs.h b/lib/libdss-include/include/linux/usbdevice_fs.h
new file mode 100644 (file)
index 0000000..3c0e300
--- /dev/null
@@ -0,0 +1,191 @@
+/*****************************************************************************/
+
+/*
+ *     usbdevice_fs.h  --  USB device file system.
+ *
+ *     Copyright (C) 2000
+ *          Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  History:
+ *   0.1  04.01.2000  Created
+ */
+
+/*****************************************************************************/
+
+#ifndef _LINUX_USBDEVICE_FS_H
+#define _LINUX_USBDEVICE_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* --------------------------------------------------------------------- */
+
+/* usbdevfs ioctl codes */
+
+struct usbdevfs_ctrltransfer {
+       __u8 bRequestType;
+       __u8 bRequest;
+       __u16 wValue;
+       __u16 wIndex;
+       __u16 wLength;
+       __u32 timeout;  /* in milliseconds */
+       void *data;
+};
+
+struct usbdevfs_bulktransfer {
+       unsigned int ep;
+       unsigned int len;
+       unsigned int timeout; /* in milliseconds */
+       void *data;
+};
+
+struct usbdevfs_setinterface {
+       unsigned int interface;
+       unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+       unsigned int signr;
+       void *context;
+};
+
+#define USBDEVFS_MAXDRIVERNAME 255
+
+struct usbdevfs_getdriver {
+       unsigned int interface;
+       char driver[USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct usbdevfs_connectinfo {
+       unsigned int devnum;
+       unsigned char slow;
+};
+
+#define USBDEVFS_URB_SHORT_NOT_OK      0x01
+#define USBDEVFS_URB_ISO_ASAP          0x02
+#define USBDEVFS_URB_BULK_CONTINUATION 0x04
+#define USBDEVFS_URB_NO_FSBR           0x20
+#define USBDEVFS_URB_ZERO_PACKET       0x40
+#define USBDEVFS_URB_NO_INTERRUPT      0x80
+
+#define USBDEVFS_URB_TYPE_ISO             0
+#define USBDEVFS_URB_TYPE_INTERRUPT       1
+#define USBDEVFS_URB_TYPE_CONTROL         2
+#define USBDEVFS_URB_TYPE_BULK            3
+
+struct usbdevfs_iso_packet_desc {
+       unsigned int length;
+       unsigned int actual_length;
+       unsigned int status;
+};
+
+struct usbdevfs_urb {
+       unsigned char type;
+       unsigned char endpoint;
+       int status;
+       unsigned int flags;
+       void *buffer;
+       int buffer_length;
+       int actual_length;
+       int start_frame;
+       union {
+               int number_of_packets;  /* Only used for isoc urbs */
+               unsigned int stream_id; /* Only used with bulk streams */
+       };
+       int error_count;
+       unsigned int signr;     /* signal to be sent on completion,
+                                 or 0 if none should be sent. */
+       void *usercontext;
+       struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+/* ioctls for talking directly to drivers */
+struct usbdevfs_ioctl {
+       int     ifno;           /* interface 0..N ; negative numbers reserved */
+       int     ioctl_code;     /* MUST encode size + direction of data so the
+                                * macros in <asm/ioctl.h> give correct values */
+       void *data;     /* param buffer (in, or out) */
+};
+
+/* You can do most things with hubs just through control messages,
+ * except find out what device connects to what port. */
+struct usbdevfs_hub_portinfo {
+       char nports;            /* number of downstream ports in this hub */
+       char port [127];        /* e.g. port 3 connects to device 27 */
+};
+
+/* System and bus capability flags */
+#define USBDEVFS_CAP_ZERO_PACKET               0x01
+#define USBDEVFS_CAP_BULK_CONTINUATION         0x02
+#define USBDEVFS_CAP_NO_PACKET_SIZE_LIM                0x04
+#define USBDEVFS_CAP_BULK_SCATTER_GATHER       0x08
+#define USBDEVFS_CAP_REAP_AFTER_DISCONNECT     0x10
+
+/* USBDEVFS_DISCONNECT_CLAIM flags & struct */
+
+/* disconnect-and-claim if the driver matches the driver field */
+#define USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER    0x01
+/* disconnect-and-claim except when the driver matches the driver field */
+#define USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER        0x02
+
+struct usbdevfs_disconnect_claim {
+       unsigned int interface;
+       unsigned int flags;
+       char driver[USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct usbdevfs_streams {
+       unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */
+       unsigned int num_eps;
+       unsigned char eps[0];
+};
+
+#define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer)
+#define USBDEVFS_CONTROL32           _IOWR('U', 0, struct usbdevfs_ctrltransfer32)
+#define USBDEVFS_BULK              _IOWR('U', 2, struct usbdevfs_bulktransfer)
+#define USBDEVFS_BULK32              _IOWR('U', 2, struct usbdevfs_bulktransfer32)
+#define USBDEVFS_RESETEP           _IOR('U', 3, unsigned int)
+#define USBDEVFS_SETINTERFACE      _IOR('U', 4, struct usbdevfs_setinterface)
+#define USBDEVFS_SETCONFIGURATION  _IOR('U', 5, unsigned int)
+#define USBDEVFS_GETDRIVER         _IOW('U', 8, struct usbdevfs_getdriver)
+#define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb)
+#define USBDEVFS_SUBMITURB32       _IOR('U', 10, struct usbdevfs_urb32)
+#define USBDEVFS_DISCARDURB        _IO('U', 11)
+#define USBDEVFS_REAPURB           _IOW('U', 12, void *)
+#define USBDEVFS_REAPURB32         _IOW('U', 12, __u32)
+#define USBDEVFS_REAPURBNDELAY     _IOW('U', 13, void *)
+#define USBDEVFS_REAPURBNDELAY32   _IOW('U', 13, __u32)
+#define USBDEVFS_DISCSIGNAL        _IOR('U', 14, struct usbdevfs_disconnectsignal)
+#define USBDEVFS_DISCSIGNAL32      _IOR('U', 14, struct usbdevfs_disconnectsignal32)
+#define USBDEVFS_CLAIMINTERFACE    _IOR('U', 15, unsigned int)
+#define USBDEVFS_RELEASEINTERFACE  _IOR('U', 16, unsigned int)
+#define USBDEVFS_CONNECTINFO       _IOW('U', 17, struct usbdevfs_connectinfo)
+#define USBDEVFS_IOCTL             _IOWR('U', 18, struct usbdevfs_ioctl)
+#define USBDEVFS_IOCTL32           _IOWR('U', 18, struct usbdevfs_ioctl32)
+#define USBDEVFS_HUB_PORTINFO      _IOR('U', 19, struct usbdevfs_hub_portinfo)
+#define USBDEVFS_RESET             _IO('U', 20)
+#define USBDEVFS_CLEAR_HALT        _IOR('U', 21, unsigned int)
+#define USBDEVFS_DISCONNECT        _IO('U', 22)
+#define USBDEVFS_CONNECT           _IO('U', 23)
+#define USBDEVFS_CLAIM_PORT        _IOR('U', 24, unsigned int)
+#define USBDEVFS_RELEASE_PORT      _IOR('U', 25, unsigned int)
+#define USBDEVFS_GET_CAPABILITIES  _IOR('U', 26, __u32)
+#define USBDEVFS_DISCONNECT_CLAIM  _IOR('U', 27, struct usbdevfs_disconnect_claim)
+#define USBDEVFS_ALLOC_STREAMS     _IOR('U', 28, struct usbdevfs_streams)
+#define USBDEVFS_FREE_STREAMS      _IOR('U', 29, struct usbdevfs_streams)
+
+#endif /* _LINUX_USBDEVICE_FS_H */
diff --git a/lib/libdss-include/include/linux/usbip.h b/lib/libdss-include/include/linux/usbip.h
new file mode 100644 (file)
index 0000000..8d4f9a3
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ *     usbip.h
+ *
+ *     USBIP uapi defines and function prototypes etc.
+*/
+
+#ifndef _LINUX_USBIP_H
+#define _LINUX_USBIP_H
+
+/* usbip device status - exported in usbip device sysfs status */
+enum usbip_device_status {
+       /* sdev is available. */
+       SDEV_ST_AVAILABLE = 0x01,
+       /* sdev is now used. */
+       SDEV_ST_USED,
+       /* sdev is unusable because of a fatal error. */
+       SDEV_ST_ERROR,
+
+       /* vdev does not connect a remote device. */
+       VDEV_ST_NULL,
+       /* vdev is used, but the USB address is not assigned yet */
+       VDEV_ST_NOTASSIGNED,
+       VDEV_ST_USED,
+       VDEV_ST_ERROR
+};
+#endif /* _LINUX_USBIP_H */
diff --git a/lib/libdss-include/include/linux/userfaultfd.h b/lib/libdss-include/include/linux/userfaultfd.h
new file mode 100644 (file)
index 0000000..19e8453
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ *  include/linux/userfaultfd.h
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
+ *  Copyright (C) 2015  Red Hat, Inc.
+ *
+ */
+
+#ifndef _LINUX_USERFAULTFD_H
+#define _LINUX_USERFAULTFD_H
+
+#include <linux/types.h>
+
+#define UFFD_API ((__u64)0xAA)
+/*
+ * After implementing the respective features it will become:
+ * #define UFFD_API_FEATURES (UFFD_FEATURE_PAGEFAULT_FLAG_WP | \
+ *                           UFFD_FEATURE_EVENT_FORK)
+ */
+#define UFFD_API_FEATURES (0)
+#define UFFD_API_IOCTLS                                \
+       ((__u64)1 << _UFFDIO_REGISTER |         \
+        (__u64)1 << _UFFDIO_UNREGISTER |       \
+        (__u64)1 << _UFFDIO_API)
+#define UFFD_API_RANGE_IOCTLS                  \
+       ((__u64)1 << _UFFDIO_WAKE |             \
+        (__u64)1 << _UFFDIO_COPY |             \
+        (__u64)1 << _UFFDIO_ZEROPAGE)
+
+/*
+ * Valid ioctl command number range with this API is from 0x00 to
+ * 0x3F.  UFFDIO_API is the fixed number, everything else can be
+ * changed by implementing a different UFFD_API. If sticking to the
+ * same UFFD_API more ioctl can be added and userland will be aware of
+ * which ioctl the running kernel implements through the ioctl command
+ * bitmask written by the UFFDIO_API.
+ */
+#define _UFFDIO_REGISTER               (0x00)
+#define _UFFDIO_UNREGISTER             (0x01)
+#define _UFFDIO_WAKE                   (0x02)
+#define _UFFDIO_COPY                   (0x03)
+#define _UFFDIO_ZEROPAGE               (0x04)
+#define _UFFDIO_API                    (0x3F)
+
+/* userfaultfd ioctl ids */
+#define UFFDIO 0xAA
+#define UFFDIO_API             _IOWR(UFFDIO, _UFFDIO_API,      \
+                                     struct uffdio_api)
+#define UFFDIO_REGISTER                _IOWR(UFFDIO, _UFFDIO_REGISTER, \
+                                     struct uffdio_register)
+#define UFFDIO_UNREGISTER      _IOR(UFFDIO, _UFFDIO_UNREGISTER,        \
+                                    struct uffdio_range)
+#define UFFDIO_WAKE            _IOR(UFFDIO, _UFFDIO_WAKE,      \
+                                    struct uffdio_range)
+#define UFFDIO_COPY            _IOWR(UFFDIO, _UFFDIO_COPY,     \
+                                     struct uffdio_copy)
+#define UFFDIO_ZEROPAGE                _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, \
+                                     struct uffdio_zeropage)
+
+/* read() structure */
+struct uffd_msg {
+       __u8    event;
+
+       __u8    reserved1;
+       __u16   reserved2;
+       __u32   reserved3;
+
+       union {
+               struct {
+                       __u64   flags;
+                       __u64   address;
+               } pagefault;
+
+               struct {
+                       /* unused reserved fields */
+                       __u64   reserved1;
+                       __u64   reserved2;
+                       __u64   reserved3;
+               } reserved;
+       } arg;
+} __attribute__((packed));
+
+/*
+ * Start at 0x12 and not at 0 to be more strict against bugs.
+ */
+#define UFFD_EVENT_PAGEFAULT   0x12
+#if 0 /* not available yet */
+#define UFFD_EVENT_FORK                0x13
+#endif
+
+/* flags for UFFD_EVENT_PAGEFAULT */
+#define UFFD_PAGEFAULT_FLAG_WRITE      (1<<0)  /* If this was a write fault */
+#define UFFD_PAGEFAULT_FLAG_WP         (1<<1)  /* If reason is VM_UFFD_WP */
+
+struct uffdio_api {
+       /* userland asks for an API number and the features to enable */
+       __u64 api;
+       /*
+        * Kernel answers below with the all available features for
+        * the API, this notifies userland of which events and/or
+        * which flags for each event are enabled in the current
+        * kernel.
+        *
+        * Note: UFFD_EVENT_PAGEFAULT and UFFD_PAGEFAULT_FLAG_WRITE
+        * are to be considered implicitly always enabled in all kernels as
+        * long as the uffdio_api.api requested matches UFFD_API.
+        */
+#if 0 /* not available yet */
+#define UFFD_FEATURE_PAGEFAULT_FLAG_WP         (1<<0)
+#define UFFD_FEATURE_EVENT_FORK                        (1<<1)
+#endif
+       __u64 features;
+
+       __u64 ioctls;
+};
+
+struct uffdio_range {
+       __u64 start;
+       __u64 len;
+};
+
+struct uffdio_register {
+       struct uffdio_range range;
+#define UFFDIO_REGISTER_MODE_MISSING   ((__u64)1<<0)
+#define UFFDIO_REGISTER_MODE_WP                ((__u64)1<<1)
+       __u64 mode;
+
+       /*
+        * kernel answers which ioctl commands are available for the
+        * range, keep at the end as the last 8 bytes aren't read.
+        */
+       __u64 ioctls;
+};
+
+struct uffdio_copy {
+       __u64 dst;
+       __u64 src;
+       __u64 len;
+       /*
+        * There will be a wrprotection flag later that allows to map
+        * pages wrprotected on the fly. And such a flag will be
+        * available if the wrprotection ioctl are implemented for the
+        * range according to the uffdio_register.ioctls.
+        */
+#define UFFDIO_COPY_MODE_DONTWAKE              ((__u64)1<<0)
+       __u64 mode;
+
+       /*
+        * "copy" is written by the ioctl and must be at the end: the
+        * copy_from_user will not read the last 8 bytes.
+        */
+       __s64 copy;
+};
+
+struct uffdio_zeropage {
+       struct uffdio_range range;
+#define UFFDIO_ZEROPAGE_MODE_DONTWAKE          ((__u64)1<<0)
+       __u64 mode;
+
+       /*
+        * "zeropage" is written by the ioctl and must be at the end:
+        * the copy_from_user will not read the last 8 bytes.
+        */
+       __s64 zeropage;
+};
+
+#endif /* _LINUX_USERFAULTFD_H */
diff --git a/lib/libdss-include/include/linux/utime.h b/lib/libdss-include/include/linux/utime.h
new file mode 100644 (file)
index 0000000..5cdf673
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _LINUX_UTIME_H
+#define _LINUX_UTIME_H
+
+#include <linux/types.h>
+
+struct utimbuf {
+       __kernel_time_t actime;
+       __kernel_time_t modtime;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/utsname.h b/lib/libdss-include/include/linux/utsname.h
new file mode 100644 (file)
index 0000000..6387d45
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef _LINUX_UTSNAME_H
+#define _LINUX_UTSNAME_H
+
+#define __OLD_UTS_LEN 8
+
+struct oldold_utsname {
+       char sysname[9];
+       char nodename[9];
+       char release[9];
+       char version[9];
+       char machine[9];
+};
+
+#define __NEW_UTS_LEN 64
+
+struct old_utsname {
+       char sysname[65];
+       char nodename[65];
+       char release[65];
+       char version[65];
+       char machine[65];
+};
+
+struct new_utsname {
+       char sysname[__NEW_UTS_LEN + 1];
+       char nodename[__NEW_UTS_LEN + 1];
+       char release[__NEW_UTS_LEN + 1];
+       char version[__NEW_UTS_LEN + 1];
+       char machine[__NEW_UTS_LEN + 1];
+       char domainname[__NEW_UTS_LEN + 1];
+};
+
+
+#endif /* _LINUX_UTSNAME_H */
diff --git a/lib/libdss-include/include/linux/uuid.h b/lib/libdss-include/include/linux/uuid.h
new file mode 100644 (file)
index 0000000..af891a3
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * UUID/GUID definition
+ *
+ * Copyright (C) 2010, Intel Corp.
+ *     Huang Ying <ying.huang@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LINUX_UUID_H_
+#define _LINUX_UUID_H_
+
+#include <linux/types.h>
+#include <linux/string.h>
+
+typedef struct {
+       __u8 b[16];
+} uuid_le;
+
+typedef struct {
+       __u8 b[16];
+} uuid_be;
+
+#define UUID_LE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)               \
+((uuid_le)                                                             \
+{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
+   (b) & 0xff, ((b) >> 8) & 0xff,                                      \
+   (c) & 0xff, ((c) >> 8) & 0xff,                                      \
+   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
+
+#define UUID_BE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)               \
+((uuid_be)                                                             \
+{{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \
+   ((b) >> 8) & 0xff, (b) & 0xff,                                      \
+   ((c) >> 8) & 0xff, (c) & 0xff,                                      \
+   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
+
+#define NULL_UUID_LE                                                   \
+       UUID_LE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,     \
+               0x00, 0x00, 0x00, 0x00)
+
+#define NULL_UUID_BE                                                   \
+       UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,     \
+               0x00, 0x00, 0x00, 0x00)
+
+
+#endif /* _LINUX_UUID_H_ */
diff --git a/lib/libdss-include/include/linux/uvcvideo.h b/lib/libdss-include/include/linux/uvcvideo.h
new file mode 100644 (file)
index 0000000..faff40e
--- /dev/null
@@ -0,0 +1,70 @@
+#ifndef __LINUX_UVCVIDEO_H_
+#define __LINUX_UVCVIDEO_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * Dynamic controls
+ */
+
+/* Data types for UVC control data */
+#define UVC_CTRL_DATA_TYPE_RAW         0
+#define UVC_CTRL_DATA_TYPE_SIGNED      1
+#define UVC_CTRL_DATA_TYPE_UNSIGNED    2
+#define UVC_CTRL_DATA_TYPE_BOOLEAN     3
+#define UVC_CTRL_DATA_TYPE_ENUM                4
+#define UVC_CTRL_DATA_TYPE_BITMASK     5
+
+/* Control flags */
+#define UVC_CTRL_FLAG_SET_CUR          (1 << 0)
+#define UVC_CTRL_FLAG_GET_CUR          (1 << 1)
+#define UVC_CTRL_FLAG_GET_MIN          (1 << 2)
+#define UVC_CTRL_FLAG_GET_MAX          (1 << 3)
+#define UVC_CTRL_FLAG_GET_RES          (1 << 4)
+#define UVC_CTRL_FLAG_GET_DEF          (1 << 5)
+/* Control should be saved at suspend and restored at resume. */
+#define UVC_CTRL_FLAG_RESTORE          (1 << 6)
+/* Control can be updated by the camera. */
+#define UVC_CTRL_FLAG_AUTO_UPDATE      (1 << 7)
+
+#define UVC_CTRL_FLAG_GET_RANGE \
+       (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
+        UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \
+        UVC_CTRL_FLAG_GET_DEF)
+
+struct uvc_menu_info {
+       __u32 value;
+       __u8 name[32];
+};
+
+struct uvc_xu_control_mapping {
+       __u32 id;
+       __u8 name[32];
+       __u8 entity[16];
+       __u8 selector;
+
+       __u8 size;
+       __u8 offset;
+       __u32 v4l2_type;
+       __u32 data_type;
+
+       struct uvc_menu_info *menu_info;
+       __u32 menu_count;
+
+       __u32 reserved[4];
+};
+
+struct uvc_xu_control_query {
+       __u8 unit;
+       __u8 selector;
+       __u8 query;             /* Video Class-Specific Request Code, */
+                               /* defined in linux/usb/video.h A.8.  */
+       __u16 size;
+       __u8 *data;
+};
+
+#define UVCIOC_CTRL_MAP                _IOWR('u', 0x20, struct uvc_xu_control_mapping)
+#define UVCIOC_CTRL_QUERY      _IOWR('u', 0x21, struct uvc_xu_control_query)
+
+#endif
diff --git a/lib/libdss-include/include/linux/v4l2-common.h b/lib/libdss-include/include/linux/v4l2-common.h
new file mode 100644 (file)
index 0000000..1527398
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * include/linux/v4l2-common.h
+ *
+ * Common V4L2 and V4L2 subdev definitions.
+ *
+ * Users are advised to #include this file either through videodev2.h
+ * (V4L2) or through v4l2-subdev.h (V4L2 subdev) rather than to refer
+ * to this file directly.
+ *
+ * Copyright (C) 2012 Nokia Corporation
+ * Contact: Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef __V4L2_COMMON__
+#define __V4L2_COMMON__
+
+#include <linux/types.h>
+
+/*
+ *
+ * Selection interface definitions
+ *
+ */
+
+/* Current cropping area */
+#define V4L2_SEL_TGT_CROP              0x0000
+/* Default cropping area */
+#define V4L2_SEL_TGT_CROP_DEFAULT      0x0001
+/* Cropping bounds */
+#define V4L2_SEL_TGT_CROP_BOUNDS       0x0002
+/* Native frame size */
+#define V4L2_SEL_TGT_NATIVE_SIZE       0x0003
+/* Current composing area */
+#define V4L2_SEL_TGT_COMPOSE           0x0100
+/* Default composing area */
+#define V4L2_SEL_TGT_COMPOSE_DEFAULT   0x0101
+/* Composing bounds */
+#define V4L2_SEL_TGT_COMPOSE_BOUNDS    0x0102
+/* Current composing area plus all padding pixels */
+#define V4L2_SEL_TGT_COMPOSE_PADDED    0x0103
+
+/* Backward compatibility target definitions --- to be removed. */
+#define V4L2_SEL_TGT_CROP_ACTIVE       V4L2_SEL_TGT_CROP
+#define V4L2_SEL_TGT_COMPOSE_ACTIVE    V4L2_SEL_TGT_COMPOSE
+#define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL        V4L2_SEL_TGT_CROP
+#define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
+#define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS        V4L2_SEL_TGT_CROP_BOUNDS
+#define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS
+
+/* Selection flags */
+#define V4L2_SEL_FLAG_GE               (1 << 0)
+#define V4L2_SEL_FLAG_LE               (1 << 1)
+#define V4L2_SEL_FLAG_KEEP_CONFIG      (1 << 2)
+
+/* Backward compatibility flag definitions --- to be removed. */
+#define V4L2_SUBDEV_SEL_FLAG_SIZE_GE   V4L2_SEL_FLAG_GE
+#define V4L2_SUBDEV_SEL_FLAG_SIZE_LE   V4L2_SEL_FLAG_LE
+#define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG
+
+struct v4l2_edid {
+       __u32 pad;
+       __u32 start_block;
+       __u32 blocks;
+       __u32 reserved[5];
+       __u8  *edid;
+};
+
+#endif /* __V4L2_COMMON__ */
diff --git a/lib/libdss-include/include/linux/v4l2-controls.h b/lib/libdss-include/include/linux/v4l2-controls.h
new file mode 100644 (file)
index 0000000..1bdce50
--- /dev/null
@@ -0,0 +1,964 @@
+/*
+ *  Video for Linux Two controls header file
+ *
+ *  Copyright (C) 1999-2012 the contributors
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  Alternatively you can redistribute this file under the terms of the
+ *  BSD license as stated below:
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *  3. The names of its contributors may not be used to endorse or promote
+ *     products derived from this software without specific prior written
+ *     permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The contents of this header was split off from videodev2.h. All control
+ *  definitions should be added to this header, which is included by
+ *  videodev2.h.
+ */
+
+#ifndef __LINUX_V4L2_CONTROLS_H
+#define __LINUX_V4L2_CONTROLS_H
+
+/* Control classes */
+#define V4L2_CTRL_CLASS_USER           0x00980000      /* Old-style 'user' controls */
+#define V4L2_CTRL_CLASS_MPEG           0x00990000      /* MPEG-compression controls */
+#define V4L2_CTRL_CLASS_CAMERA         0x009a0000      /* Camera class controls */
+#define V4L2_CTRL_CLASS_FM_TX          0x009b0000      /* FM Modulator controls */
+#define V4L2_CTRL_CLASS_FLASH          0x009c0000      /* Camera flash controls */
+#define V4L2_CTRL_CLASS_JPEG           0x009d0000      /* JPEG-compression controls */
+#define V4L2_CTRL_CLASS_IMAGE_SOURCE   0x009e0000      /* Image source controls */
+#define V4L2_CTRL_CLASS_IMAGE_PROC     0x009f0000      /* Image processing controls */
+#define V4L2_CTRL_CLASS_DV             0x00a00000      /* Digital Video controls */
+#define V4L2_CTRL_CLASS_FM_RX          0x00a10000      /* FM Receiver controls */
+#define V4L2_CTRL_CLASS_RF_TUNER       0x00a20000      /* RF tuner controls */
+#define V4L2_CTRL_CLASS_DETECT         0x00a30000      /* Detection controls */
+
+/* User-class control IDs */
+
+#define V4L2_CID_BASE                  (V4L2_CTRL_CLASS_USER | 0x900)
+#define V4L2_CID_USER_BASE             V4L2_CID_BASE
+#define V4L2_CID_USER_CLASS            (V4L2_CTRL_CLASS_USER | 1)
+#define V4L2_CID_BRIGHTNESS            (V4L2_CID_BASE+0)
+#define V4L2_CID_CONTRAST              (V4L2_CID_BASE+1)
+#define V4L2_CID_SATURATION            (V4L2_CID_BASE+2)
+#define V4L2_CID_HUE                   (V4L2_CID_BASE+3)
+#define V4L2_CID_AUDIO_VOLUME          (V4L2_CID_BASE+5)
+#define V4L2_CID_AUDIO_BALANCE         (V4L2_CID_BASE+6)
+#define V4L2_CID_AUDIO_BASS            (V4L2_CID_BASE+7)
+#define V4L2_CID_AUDIO_TREBLE          (V4L2_CID_BASE+8)
+#define V4L2_CID_AUDIO_MUTE            (V4L2_CID_BASE+9)
+#define V4L2_CID_AUDIO_LOUDNESS                (V4L2_CID_BASE+10)
+#define V4L2_CID_BLACK_LEVEL           (V4L2_CID_BASE+11) /* Deprecated */
+#define V4L2_CID_AUTO_WHITE_BALANCE    (V4L2_CID_BASE+12)
+#define V4L2_CID_DO_WHITE_BALANCE      (V4L2_CID_BASE+13)
+#define V4L2_CID_RED_BALANCE           (V4L2_CID_BASE+14)
+#define V4L2_CID_BLUE_BALANCE          (V4L2_CID_BASE+15)
+#define V4L2_CID_GAMMA                 (V4L2_CID_BASE+16)
+#define V4L2_CID_WHITENESS             (V4L2_CID_GAMMA) /* Deprecated */
+#define V4L2_CID_EXPOSURE              (V4L2_CID_BASE+17)
+#define V4L2_CID_AUTOGAIN              (V4L2_CID_BASE+18)
+#define V4L2_CID_GAIN                  (V4L2_CID_BASE+19)
+#define V4L2_CID_HFLIP                 (V4L2_CID_BASE+20)
+#define V4L2_CID_VFLIP                 (V4L2_CID_BASE+21)
+
+#define V4L2_CID_POWER_LINE_FREQUENCY  (V4L2_CID_BASE+24)
+enum v4l2_power_line_frequency {
+       V4L2_CID_POWER_LINE_FREQUENCY_DISABLED  = 0,
+       V4L2_CID_POWER_LINE_FREQUENCY_50HZ      = 1,
+       V4L2_CID_POWER_LINE_FREQUENCY_60HZ      = 2,
+       V4L2_CID_POWER_LINE_FREQUENCY_AUTO      = 3,
+};
+#define V4L2_CID_HUE_AUTO                      (V4L2_CID_BASE+25)
+#define V4L2_CID_WHITE_BALANCE_TEMPERATURE     (V4L2_CID_BASE+26)
+#define V4L2_CID_SHARPNESS                     (V4L2_CID_BASE+27)
+#define V4L2_CID_BACKLIGHT_COMPENSATION        (V4L2_CID_BASE+28)
+#define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
+#define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
+#define V4L2_CID_COLORFX                       (V4L2_CID_BASE+31)
+enum v4l2_colorfx {
+       V4L2_COLORFX_NONE                       = 0,
+       V4L2_COLORFX_BW                         = 1,
+       V4L2_COLORFX_SEPIA                      = 2,
+       V4L2_COLORFX_NEGATIVE                   = 3,
+       V4L2_COLORFX_EMBOSS                     = 4,
+       V4L2_COLORFX_SKETCH                     = 5,
+       V4L2_COLORFX_SKY_BLUE                   = 6,
+       V4L2_COLORFX_GRASS_GREEN                = 7,
+       V4L2_COLORFX_SKIN_WHITEN                = 8,
+       V4L2_COLORFX_VIVID                      = 9,
+       V4L2_COLORFX_AQUA                       = 10,
+       V4L2_COLORFX_ART_FREEZE                 = 11,
+       V4L2_COLORFX_SILHOUETTE                 = 12,
+       V4L2_COLORFX_SOLARIZATION               = 13,
+       V4L2_COLORFX_ANTIQUE                    = 14,
+       V4L2_COLORFX_SET_CBCR                   = 15,
+};
+#define V4L2_CID_AUTOBRIGHTNESS                        (V4L2_CID_BASE+32)
+#define V4L2_CID_BAND_STOP_FILTER              (V4L2_CID_BASE+33)
+
+#define V4L2_CID_ROTATE                                (V4L2_CID_BASE+34)
+#define V4L2_CID_BG_COLOR                      (V4L2_CID_BASE+35)
+
+#define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
+
+#define V4L2_CID_ILLUMINATORS_1                        (V4L2_CID_BASE+37)
+#define V4L2_CID_ILLUMINATORS_2                        (V4L2_CID_BASE+38)
+
+#define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE       (V4L2_CID_BASE+39)
+#define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT                (V4L2_CID_BASE+40)
+
+#define V4L2_CID_ALPHA_COMPONENT               (V4L2_CID_BASE+41)
+#define V4L2_CID_COLORFX_CBCR                  (V4L2_CID_BASE+42)
+
+/* last CID + 1 */
+#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43)
+
+/* USER-class private control IDs */
+
+/* The base for the meye driver controls. See linux/meye.h for the list
+ * of controls. We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_MEYE_BASE                        (V4L2_CID_USER_BASE + 0x1000)
+
+/* The base for the bttv driver controls.
+ * We reserve 32 controls for this driver. */
+#define V4L2_CID_USER_BTTV_BASE                        (V4L2_CID_USER_BASE + 0x1010)
+
+
+/* The base for the s2255 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_S2255_BASE               (V4L2_CID_USER_BASE + 0x1030)
+
+/* The base for the si476x driver controls. See include/media/si476x.h for the list
+ * of controls. Total of 16 controls is reserved for this driver */
+#define V4L2_CID_USER_SI476X_BASE              (V4L2_CID_USER_BASE + 0x1040)
+
+/* The base for the TI VPE driver controls. Total of 16 controls is reserved for
+ * this driver */
+#define V4L2_CID_USER_TI_VPE_BASE              (V4L2_CID_USER_BASE + 0x1050)
+
+/* The base for the saa7134 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_SAA7134_BASE             (V4L2_CID_USER_BASE + 0x1060)
+
+/* The base for the adv7180 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_ADV7180_BASE             (V4L2_CID_USER_BASE + 0x1070)
+
+/* The base for the tc358743 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_TC358743_BASE            (V4L2_CID_USER_BASE + 0x1080)
+
+/* MPEG-class control IDs */
+/* The MPEG controls are applicable to all codec controls
+ * and the 'MPEG' part of the define is historical */
+
+#define V4L2_CID_MPEG_BASE                     (V4L2_CTRL_CLASS_MPEG | 0x900)
+#define V4L2_CID_MPEG_CLASS                    (V4L2_CTRL_CLASS_MPEG | 1)
+
+/*  MPEG streams, specific to multiplexed streams */
+#define V4L2_CID_MPEG_STREAM_TYPE              (V4L2_CID_MPEG_BASE+0)
+enum v4l2_mpeg_stream_type {
+       V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
+};
+#define V4L2_CID_MPEG_STREAM_PID_PMT           (V4L2_CID_MPEG_BASE+1)
+#define V4L2_CID_MPEG_STREAM_PID_AUDIO                 (V4L2_CID_MPEG_BASE+2)
+#define V4L2_CID_MPEG_STREAM_PID_VIDEO                 (V4L2_CID_MPEG_BASE+3)
+#define V4L2_CID_MPEG_STREAM_PID_PCR           (V4L2_CID_MPEG_BASE+4)
+#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO      (V4L2_CID_MPEG_BASE+5)
+#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO      (V4L2_CID_MPEG_BASE+6)
+#define V4L2_CID_MPEG_STREAM_VBI_FMT           (V4L2_CID_MPEG_BASE+7)
+enum v4l2_mpeg_stream_vbi_fmt {
+       V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
+       V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
+};
+
+/*  MPEG audio controls specific to multiplexed streams  */
+#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ      (V4L2_CID_MPEG_BASE+100)
+enum v4l2_mpeg_audio_sampling_freq {
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
+};
+#define V4L2_CID_MPEG_AUDIO_ENCODING           (V4L2_CID_MPEG_BASE+101)
+enum v4l2_mpeg_audio_encoding {
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
+       V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
+       V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
+};
+#define V4L2_CID_MPEG_AUDIO_L1_BITRATE                 (V4L2_CID_MPEG_BASE+102)
+enum v4l2_mpeg_audio_l1_bitrate {
+       V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
+       V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
+       V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
+       V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
+       V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
+       V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
+       V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
+       V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
+       V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
+       V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
+       V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
+       V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
+       V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_L2_BITRATE                 (V4L2_CID_MPEG_BASE+103)
+enum v4l2_mpeg_audio_l2_bitrate {
+       V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
+       V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
+       V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
+       V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
+       V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
+       V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
+       V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
+       V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
+       V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
+       V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
+       V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
+       V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
+       V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_L3_BITRATE                 (V4L2_CID_MPEG_BASE+104)
+enum v4l2_mpeg_audio_l3_bitrate {
+       V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
+       V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
+       V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
+       V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
+       V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
+       V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
+       V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
+       V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
+       V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
+       V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
+       V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
+       V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
+       V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE               (V4L2_CID_MPEG_BASE+105)
+enum v4l2_mpeg_audio_mode {
+       V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
+       V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
+       V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
+       V4L2_MPEG_AUDIO_MODE_MONO         = 3,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION     (V4L2_CID_MPEG_BASE+106)
+enum v4l2_mpeg_audio_mode_extension {
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
+};
+#define V4L2_CID_MPEG_AUDIO_EMPHASIS           (V4L2_CID_MPEG_BASE+107)
+enum v4l2_mpeg_audio_emphasis {
+       V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
+       V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
+       V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
+};
+#define V4L2_CID_MPEG_AUDIO_CRC                (V4L2_CID_MPEG_BASE+108)
+enum v4l2_mpeg_audio_crc {
+       V4L2_MPEG_AUDIO_CRC_NONE  = 0,
+       V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
+};
+#define V4L2_CID_MPEG_AUDIO_MUTE               (V4L2_CID_MPEG_BASE+109)
+#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE                (V4L2_CID_MPEG_BASE+110)
+#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE                (V4L2_CID_MPEG_BASE+111)
+enum v4l2_mpeg_audio_ac3_bitrate {
+       V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
+};
+#define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK       (V4L2_CID_MPEG_BASE+112)
+enum v4l2_mpeg_audio_dec_playback {
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO           = 0,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO         = 1,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT           = 2,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT          = 3,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO           = 4,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
+};
+#define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113)
+
+/*  MPEG video controls specific to multiplexed streams */
+#define V4L2_CID_MPEG_VIDEO_ENCODING           (V4L2_CID_MPEG_BASE+200)
+enum v4l2_mpeg_video_encoding {
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_ASPECT             (V4L2_CID_MPEG_BASE+201)
+enum v4l2_mpeg_video_aspect {
+       V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
+       V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
+       V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
+       V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_B_FRAMES           (V4L2_CID_MPEG_BASE+202)
+#define V4L2_CID_MPEG_VIDEO_GOP_SIZE           (V4L2_CID_MPEG_BASE+203)
+#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE        (V4L2_CID_MPEG_BASE+204)
+#define V4L2_CID_MPEG_VIDEO_PULLDOWN           (V4L2_CID_MPEG_BASE+205)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE       (V4L2_CID_MPEG_BASE+206)
+enum v4l2_mpeg_video_bitrate_mode {
+       V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
+       V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_BITRATE            (V4L2_CID_MPEG_BASE+207)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK       (V4L2_CID_MPEG_BASE+208)
+#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
+#define V4L2_CID_MPEG_VIDEO_MUTE               (V4L2_CID_MPEG_BASE+210)
+#define V4L2_CID_MPEG_VIDEO_MUTE_YUV           (V4L2_CID_MPEG_BASE+211)
+#define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE            (V4L2_CID_MPEG_BASE+212)
+#define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER       (V4L2_CID_MPEG_BASE+213)
+#define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB            (V4L2_CID_MPEG_BASE+214)
+#define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE                    (V4L2_CID_MPEG_BASE+215)
+#define V4L2_CID_MPEG_VIDEO_HEADER_MODE                                (V4L2_CID_MPEG_BASE+216)
+enum v4l2_mpeg_video_header_mode {
+       V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE                    = 0,
+       V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME       = 1,
+
+};
+#define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC                        (V4L2_CID_MPEG_BASE+217)
+#define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE               (V4L2_CID_MPEG_BASE+218)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES      (V4L2_CID_MPEG_BASE+219)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB         (V4L2_CID_MPEG_BASE+220)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE           (V4L2_CID_MPEG_BASE+221)
+enum v4l2_mpeg_video_multi_slice_mode {
+       V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE         = 0,
+       V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB          = 1,
+       V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES       = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_VBV_SIZE                   (V4L2_CID_MPEG_BASE+222)
+#define V4L2_CID_MPEG_VIDEO_DEC_PTS                    (V4L2_CID_MPEG_BASE+223)
+#define V4L2_CID_MPEG_VIDEO_DEC_FRAME                  (V4L2_CID_MPEG_BASE+224)
+#define V4L2_CID_MPEG_VIDEO_VBV_DELAY                  (V4L2_CID_MPEG_BASE+225)
+#define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER          (V4L2_CID_MPEG_BASE+226)
+#define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE          (V4L2_CID_MPEG_BASE+227)
+#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE          (V4L2_CID_MPEG_BASE+228)
+
+#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP            (V4L2_CID_MPEG_BASE+300)
+#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP            (V4L2_CID_MPEG_BASE+301)
+#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP            (V4L2_CID_MPEG_BASE+302)
+#define V4L2_CID_MPEG_VIDEO_H263_MIN_QP                        (V4L2_CID_MPEG_BASE+303)
+#define V4L2_CID_MPEG_VIDEO_H263_MAX_QP                        (V4L2_CID_MPEG_BASE+304)
+#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP            (V4L2_CID_MPEG_BASE+350)
+#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP            (V4L2_CID_MPEG_BASE+351)
+#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP            (V4L2_CID_MPEG_BASE+352)
+#define V4L2_CID_MPEG_VIDEO_H264_MIN_QP                        (V4L2_CID_MPEG_BASE+353)
+#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP                        (V4L2_CID_MPEG_BASE+354)
+#define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM         (V4L2_CID_MPEG_BASE+355)
+#define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE              (V4L2_CID_MPEG_BASE+356)
+#define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE          (V4L2_CID_MPEG_BASE+357)
+enum v4l2_mpeg_video_h264_entropy_mode {
+       V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC = 0,
+       V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD              (V4L2_CID_MPEG_BASE+358)
+#define V4L2_CID_MPEG_VIDEO_H264_LEVEL                 (V4L2_CID_MPEG_BASE+359)
+enum v4l2_mpeg_video_h264_level {
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_0  = 0,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1B   = 1,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_1  = 2,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_2  = 3,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_3  = 4,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_0  = 5,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_1  = 6,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_2  = 7,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_0  = 8,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_1  = 9,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_2  = 10,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_0  = 11,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_1  = 12,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_2  = 13,
+       V4L2_MPEG_VIDEO_H264_LEVEL_5_0  = 14,
+       V4L2_MPEG_VIDEO_H264_LEVEL_5_1  = 15,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA     (V4L2_CID_MPEG_BASE+360)
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA      (V4L2_CID_MPEG_BASE+361)
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE      (V4L2_CID_MPEG_BASE+362)
+enum v4l2_mpeg_video_h264_loop_filter_mode {
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED                           = 0,
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED                          = 1,
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY        = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_PROFILE               (V4L2_CID_MPEG_BASE+363)
+enum v4l2_mpeg_video_h264_profile {
+       V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE                   = 0,
+       V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE       = 1,
+       V4L2_MPEG_VIDEO_H264_PROFILE_MAIN                       = 2,
+       V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED                   = 3,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH                       = 4,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10                    = 5,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422                   = 6,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE        = 7,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA              = 8,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA             = 9,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA             = 10,
+       V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA            = 11,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE          = 12,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH              = 13,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA        = 14,
+       V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH                = 15,
+       V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH             = 16,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT    (V4L2_CID_MPEG_BASE+364)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH     (V4L2_CID_MPEG_BASE+365)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE                (V4L2_CID_MPEG_BASE+366)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC           (V4L2_CID_MPEG_BASE+367)
+enum v4l2_mpeg_video_h264_vui_sar_idc {
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED    = 0,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1            = 1,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11          = 2,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11          = 3,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11          = 4,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33          = 5,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11          = 6,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11          = 7,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11          = 8,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33          = 9,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11          = 10,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11          = 11,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33          = 12,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99         = 13,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3            = 14,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2            = 15,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1            = 16,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED       = 17,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING             (V4L2_CID_MPEG_BASE+368)
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0                (V4L2_CID_MPEG_BASE+369)
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE       (V4L2_CID_MPEG_BASE+370)
+enum v4l2_mpeg_video_h264_sei_fp_arrangement_type {
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD       = 0,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN             = 1,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW                = 2,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE       = 3,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM         = 4,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL           = 5,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO                   (V4L2_CID_MPEG_BASE+371)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE          (V4L2_CID_MPEG_BASE+372)
+enum v4l2_mpeg_video_h264_fmo_map_type {
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES            = 0,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES              = 1,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER     = 2,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT                       = 3,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN                   = 4,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN                     = 5,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT                      = 6,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP       (V4L2_CID_MPEG_BASE+373)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION  (V4L2_CID_MPEG_BASE+374)
+enum v4l2_mpeg_video_h264_fmo_change_dir {
+       V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT       = 0,
+       V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT        = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE       (V4L2_CID_MPEG_BASE+375)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH                (V4L2_CID_MPEG_BASE+376)
+#define V4L2_CID_MPEG_VIDEO_H264_ASO                   (V4L2_CID_MPEG_BASE+377)
+#define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER       (V4L2_CID_MPEG_BASE+378)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING           (V4L2_CID_MPEG_BASE+379)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE      (V4L2_CID_MPEG_BASE+380)
+enum v4l2_mpeg_video_h264_hierarchical_coding_type {
+       V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B      = 0,
+       V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P      = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER     (V4L2_CID_MPEG_BASE+381)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP  (V4L2_CID_MPEG_BASE+382)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP   (V4L2_CID_MPEG_BASE+400)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP   (V4L2_CID_MPEG_BASE+401)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP   (V4L2_CID_MPEG_BASE+402)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP       (V4L2_CID_MPEG_BASE+403)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP       (V4L2_CID_MPEG_BASE+404)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL                (V4L2_CID_MPEG_BASE+405)
+enum v4l2_mpeg_video_mpeg4_level {
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_0   = 0,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B  = 1,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_1   = 2,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_2   = 3,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_3   = 4,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B  = 5,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_4   = 6,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_5   = 7,
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE      (V4L2_CID_MPEG_BASE+406)
+enum v4l2_mpeg_video_mpeg4_profile {
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE                            = 0,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE                   = 1,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE                              = 2,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE                   = 3,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY        = 4,
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL         (V4L2_CID_MPEG_BASE+407)
+
+/*  Control IDs for VP8 streams
+ *  Although VP8 is not part of MPEG we add these controls to the MPEG class
+ *  as that class is already handling other video compression standards
+ */
+#define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS         (V4L2_CID_MPEG_BASE+500)
+enum v4l2_vp8_num_partitions {
+       V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION     = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS    = 1,
+       V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS    = 2,
+       V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS    = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4                (V4L2_CID_MPEG_BASE+501)
+#define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES         (V4L2_CID_MPEG_BASE+502)
+enum v4l2_vp8_num_ref_frames {
+       V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME     = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME     = 1,
+       V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME     = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL           (V4L2_CID_MPEG_BASE+503)
+#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS       (V4L2_CID_MPEG_BASE+504)
+#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD        (V4L2_CID_MPEG_BASE+505)
+#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL       (V4L2_CID_MPEG_BASE+506)
+enum v4l2_vp8_golden_frame_sel {
+       V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV           = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD     = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP                 (V4L2_CID_MPEG_BASE+507)
+#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP                 (V4L2_CID_MPEG_BASE+508)
+#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP             (V4L2_CID_MPEG_BASE+509)
+#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP             (V4L2_CID_MPEG_BASE+510)
+#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE                        (V4L2_CID_MPEG_BASE+511)
+
+/*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
+#define V4L2_CID_MPEG_CX2341X_BASE                             (V4L2_CTRL_CLASS_MPEG | 0x1000)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE        (V4L2_CID_MPEG_CX2341X_BASE+0)
+enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER             (V4L2_CID_MPEG_CX2341X_BASE+1)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE   (V4L2_CID_MPEG_CX2341X_BASE+2)
+enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE         (V4L2_CID_MPEG_CX2341X_BASE+3)
+enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE       (V4L2_CID_MPEG_CX2341X_BASE+4)
+enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER            (V4L2_CID_MPEG_CX2341X_BASE+5)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE                 (V4L2_CID_MPEG_CX2341X_BASE+6)
+enum v4l2_mpeg_cx2341x_video_median_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  (V4L2_CID_MPEG_CX2341X_BASE+7)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP     (V4L2_CID_MPEG_CX2341X_BASE+8)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM        (V4L2_CID_MPEG_CX2341X_BASE+9)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP   (V4L2_CID_MPEG_CX2341X_BASE+10)
+#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS        (V4L2_CID_MPEG_CX2341X_BASE+11)
+
+/*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
+#define V4L2_CID_MPEG_MFC51_BASE                               (V4L2_CTRL_CLASS_MPEG | 0x1100)
+
+#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY           (V4L2_CID_MPEG_MFC51_BASE+0)
+#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE    (V4L2_CID_MPEG_MFC51_BASE+1)
+#define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE                      (V4L2_CID_MPEG_MFC51_BASE+2)
+enum v4l2_mpeg_mfc51_video_frame_skip_mode {
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED          = 0,
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT       = 1,
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT         = 2,
+};
+#define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE                     (V4L2_CID_MPEG_MFC51_BASE+3)
+enum v4l2_mpeg_mfc51_video_force_frame_type {
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED         = 0,
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME          = 1,
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED        = 2,
+};
+#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING                              (V4L2_CID_MPEG_MFC51_BASE+4)
+#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV                          (V4L2_CID_MPEG_MFC51_BASE+5)
+#define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT                  (V4L2_CID_MPEG_MFC51_BASE+6)
+#define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF                    (V4L2_CID_MPEG_MFC51_BASE+7)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY            (V4L2_CID_MPEG_MFC51_BASE+50)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK                        (V4L2_CID_MPEG_MFC51_BASE+51)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH              (V4L2_CID_MPEG_MFC51_BASE+52)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC              (V4L2_CID_MPEG_MFC51_BASE+53)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P               (V4L2_CID_MPEG_MFC51_BASE+54)
+
+
+/*  Camera class control IDs */
+
+#define V4L2_CID_CAMERA_CLASS_BASE     (V4L2_CTRL_CLASS_CAMERA | 0x900)
+#define V4L2_CID_CAMERA_CLASS          (V4L2_CTRL_CLASS_CAMERA | 1)
+
+#define V4L2_CID_EXPOSURE_AUTO                 (V4L2_CID_CAMERA_CLASS_BASE+1)
+enum  v4l2_exposure_auto_type {
+       V4L2_EXPOSURE_AUTO = 0,
+       V4L2_EXPOSURE_MANUAL = 1,
+       V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
+       V4L2_EXPOSURE_APERTURE_PRIORITY = 3
+};
+#define V4L2_CID_EXPOSURE_ABSOLUTE             (V4L2_CID_CAMERA_CLASS_BASE+2)
+#define V4L2_CID_EXPOSURE_AUTO_PRIORITY                (V4L2_CID_CAMERA_CLASS_BASE+3)
+
+#define V4L2_CID_PAN_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+4)
+#define V4L2_CID_TILT_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+5)
+#define V4L2_CID_PAN_RESET                     (V4L2_CID_CAMERA_CLASS_BASE+6)
+#define V4L2_CID_TILT_RESET                    (V4L2_CID_CAMERA_CLASS_BASE+7)
+
+#define V4L2_CID_PAN_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+8)
+#define V4L2_CID_TILT_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+9)
+
+#define V4L2_CID_FOCUS_ABSOLUTE                        (V4L2_CID_CAMERA_CLASS_BASE+10)
+#define V4L2_CID_FOCUS_RELATIVE                        (V4L2_CID_CAMERA_CLASS_BASE+11)
+#define V4L2_CID_FOCUS_AUTO                    (V4L2_CID_CAMERA_CLASS_BASE+12)
+
+#define V4L2_CID_ZOOM_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+13)
+#define V4L2_CID_ZOOM_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+14)
+#define V4L2_CID_ZOOM_CONTINUOUS               (V4L2_CID_CAMERA_CLASS_BASE+15)
+
+#define V4L2_CID_PRIVACY                       (V4L2_CID_CAMERA_CLASS_BASE+16)
+
+#define V4L2_CID_IRIS_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+17)
+#define V4L2_CID_IRIS_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+18)
+
+#define V4L2_CID_AUTO_EXPOSURE_BIAS            (V4L2_CID_CAMERA_CLASS_BASE+19)
+
+#define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE   (V4L2_CID_CAMERA_CLASS_BASE+20)
+enum v4l2_auto_n_preset_white_balance {
+       V4L2_WHITE_BALANCE_MANUAL               = 0,
+       V4L2_WHITE_BALANCE_AUTO                 = 1,
+       V4L2_WHITE_BALANCE_INCANDESCENT         = 2,
+       V4L2_WHITE_BALANCE_FLUORESCENT          = 3,
+       V4L2_WHITE_BALANCE_FLUORESCENT_H        = 4,
+       V4L2_WHITE_BALANCE_HORIZON              = 5,
+       V4L2_WHITE_BALANCE_DAYLIGHT             = 6,
+       V4L2_WHITE_BALANCE_FLASH                = 7,
+       V4L2_WHITE_BALANCE_CLOUDY               = 8,
+       V4L2_WHITE_BALANCE_SHADE                = 9,
+};
+
+#define V4L2_CID_WIDE_DYNAMIC_RANGE            (V4L2_CID_CAMERA_CLASS_BASE+21)
+#define V4L2_CID_IMAGE_STABILIZATION           (V4L2_CID_CAMERA_CLASS_BASE+22)
+
+#define V4L2_CID_ISO_SENSITIVITY               (V4L2_CID_CAMERA_CLASS_BASE+23)
+#define V4L2_CID_ISO_SENSITIVITY_AUTO          (V4L2_CID_CAMERA_CLASS_BASE+24)
+enum v4l2_iso_sensitivity_auto_type {
+       V4L2_ISO_SENSITIVITY_MANUAL             = 0,
+       V4L2_ISO_SENSITIVITY_AUTO               = 1,
+};
+
+#define V4L2_CID_EXPOSURE_METERING             (V4L2_CID_CAMERA_CLASS_BASE+25)
+enum v4l2_exposure_metering {
+       V4L2_EXPOSURE_METERING_AVERAGE          = 0,
+       V4L2_EXPOSURE_METERING_CENTER_WEIGHTED  = 1,
+       V4L2_EXPOSURE_METERING_SPOT             = 2,
+       V4L2_EXPOSURE_METERING_MATRIX           = 3,
+};
+
+#define V4L2_CID_SCENE_MODE                    (V4L2_CID_CAMERA_CLASS_BASE+26)
+enum v4l2_scene_mode {
+       V4L2_SCENE_MODE_NONE                    = 0,
+       V4L2_SCENE_MODE_BACKLIGHT               = 1,
+       V4L2_SCENE_MODE_BEACH_SNOW              = 2,
+       V4L2_SCENE_MODE_CANDLE_LIGHT            = 3,
+       V4L2_SCENE_MODE_DAWN_DUSK               = 4,
+       V4L2_SCENE_MODE_FALL_COLORS             = 5,
+       V4L2_SCENE_MODE_FIREWORKS               = 6,
+       V4L2_SCENE_MODE_LANDSCAPE               = 7,
+       V4L2_SCENE_MODE_NIGHT                   = 8,
+       V4L2_SCENE_MODE_PARTY_INDOOR            = 9,
+       V4L2_SCENE_MODE_PORTRAIT                = 10,
+       V4L2_SCENE_MODE_SPORTS                  = 11,
+       V4L2_SCENE_MODE_SUNSET                  = 12,
+       V4L2_SCENE_MODE_TEXT                    = 13,
+};
+
+#define V4L2_CID_3A_LOCK                       (V4L2_CID_CAMERA_CLASS_BASE+27)
+#define V4L2_LOCK_EXPOSURE                     (1 << 0)
+#define V4L2_LOCK_WHITE_BALANCE                        (1 << 1)
+#define V4L2_LOCK_FOCUS                                (1 << 2)
+
+#define V4L2_CID_AUTO_FOCUS_START              (V4L2_CID_CAMERA_CLASS_BASE+28)
+#define V4L2_CID_AUTO_FOCUS_STOP               (V4L2_CID_CAMERA_CLASS_BASE+29)
+#define V4L2_CID_AUTO_FOCUS_STATUS             (V4L2_CID_CAMERA_CLASS_BASE+30)
+#define V4L2_AUTO_FOCUS_STATUS_IDLE            (0 << 0)
+#define V4L2_AUTO_FOCUS_STATUS_BUSY            (1 << 0)
+#define V4L2_AUTO_FOCUS_STATUS_REACHED         (1 << 1)
+#define V4L2_AUTO_FOCUS_STATUS_FAILED          (1 << 2)
+
+#define V4L2_CID_AUTO_FOCUS_RANGE              (V4L2_CID_CAMERA_CLASS_BASE+31)
+enum v4l2_auto_focus_range {
+       V4L2_AUTO_FOCUS_RANGE_AUTO              = 0,
+       V4L2_AUTO_FOCUS_RANGE_NORMAL            = 1,
+       V4L2_AUTO_FOCUS_RANGE_MACRO             = 2,
+       V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
+};
+
+#define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
+
+/* FM Modulator class control IDs */
+
+#define V4L2_CID_FM_TX_CLASS_BASE              (V4L2_CTRL_CLASS_FM_TX | 0x900)
+#define V4L2_CID_FM_TX_CLASS                   (V4L2_CTRL_CLASS_FM_TX | 1)
+
+#define V4L2_CID_RDS_TX_DEVIATION              (V4L2_CID_FM_TX_CLASS_BASE + 1)
+#define V4L2_CID_RDS_TX_PI                     (V4L2_CID_FM_TX_CLASS_BASE + 2)
+#define V4L2_CID_RDS_TX_PTY                    (V4L2_CID_FM_TX_CLASS_BASE + 3)
+#define V4L2_CID_RDS_TX_PS_NAME                        (V4L2_CID_FM_TX_CLASS_BASE + 5)
+#define V4L2_CID_RDS_TX_RADIO_TEXT             (V4L2_CID_FM_TX_CLASS_BASE + 6)
+#define V4L2_CID_RDS_TX_MONO_STEREO            (V4L2_CID_FM_TX_CLASS_BASE + 7)
+#define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD                (V4L2_CID_FM_TX_CLASS_BASE + 8)
+#define V4L2_CID_RDS_TX_COMPRESSED             (V4L2_CID_FM_TX_CLASS_BASE + 9)
+#define V4L2_CID_RDS_TX_DYNAMIC_PTY            (V4L2_CID_FM_TX_CLASS_BASE + 10)
+#define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT   (V4L2_CID_FM_TX_CLASS_BASE + 11)
+#define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM                (V4L2_CID_FM_TX_CLASS_BASE + 12)
+#define V4L2_CID_RDS_TX_MUSIC_SPEECH           (V4L2_CID_FM_TX_CLASS_BASE + 13)
+#define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE       (V4L2_CID_FM_TX_CLASS_BASE + 14)
+#define V4L2_CID_RDS_TX_ALT_FREQS              (V4L2_CID_FM_TX_CLASS_BASE + 15)
+
+#define V4L2_CID_AUDIO_LIMITER_ENABLED         (V4L2_CID_FM_TX_CLASS_BASE + 64)
+#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME    (V4L2_CID_FM_TX_CLASS_BASE + 65)
+#define V4L2_CID_AUDIO_LIMITER_DEVIATION       (V4L2_CID_FM_TX_CLASS_BASE + 66)
+
+#define V4L2_CID_AUDIO_COMPRESSION_ENABLED     (V4L2_CID_FM_TX_CLASS_BASE + 80)
+#define V4L2_CID_AUDIO_COMPRESSION_GAIN                (V4L2_CID_FM_TX_CLASS_BASE + 81)
+#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD   (V4L2_CID_FM_TX_CLASS_BASE + 82)
+#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83)
+#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME        (V4L2_CID_FM_TX_CLASS_BASE + 84)
+
+#define V4L2_CID_PILOT_TONE_ENABLED            (V4L2_CID_FM_TX_CLASS_BASE + 96)
+#define V4L2_CID_PILOT_TONE_DEVIATION          (V4L2_CID_FM_TX_CLASS_BASE + 97)
+#define V4L2_CID_PILOT_TONE_FREQUENCY          (V4L2_CID_FM_TX_CLASS_BASE + 98)
+
+#define V4L2_CID_TUNE_PREEMPHASIS              (V4L2_CID_FM_TX_CLASS_BASE + 112)
+enum v4l2_preemphasis {
+       V4L2_PREEMPHASIS_DISABLED       = 0,
+       V4L2_PREEMPHASIS_50_uS          = 1,
+       V4L2_PREEMPHASIS_75_uS          = 2,
+};
+#define V4L2_CID_TUNE_POWER_LEVEL              (V4L2_CID_FM_TX_CLASS_BASE + 113)
+#define V4L2_CID_TUNE_ANTENNA_CAPACITOR                (V4L2_CID_FM_TX_CLASS_BASE + 114)
+
+
+/* Flash and privacy (indicator) light controls */
+
+#define V4L2_CID_FLASH_CLASS_BASE              (V4L2_CTRL_CLASS_FLASH | 0x900)
+#define V4L2_CID_FLASH_CLASS                   (V4L2_CTRL_CLASS_FLASH | 1)
+
+#define V4L2_CID_FLASH_LED_MODE                        (V4L2_CID_FLASH_CLASS_BASE + 1)
+enum v4l2_flash_led_mode {
+       V4L2_FLASH_LED_MODE_NONE,
+       V4L2_FLASH_LED_MODE_FLASH,
+       V4L2_FLASH_LED_MODE_TORCH,
+};
+
+#define V4L2_CID_FLASH_STROBE_SOURCE           (V4L2_CID_FLASH_CLASS_BASE + 2)
+enum v4l2_flash_strobe_source {
+       V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
+       V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
+};
+
+#define V4L2_CID_FLASH_STROBE                  (V4L2_CID_FLASH_CLASS_BASE + 3)
+#define V4L2_CID_FLASH_STROBE_STOP             (V4L2_CID_FLASH_CLASS_BASE + 4)
+#define V4L2_CID_FLASH_STROBE_STATUS           (V4L2_CID_FLASH_CLASS_BASE + 5)
+
+#define V4L2_CID_FLASH_TIMEOUT                 (V4L2_CID_FLASH_CLASS_BASE + 6)
+#define V4L2_CID_FLASH_INTENSITY               (V4L2_CID_FLASH_CLASS_BASE + 7)
+#define V4L2_CID_FLASH_TORCH_INTENSITY         (V4L2_CID_FLASH_CLASS_BASE + 8)
+#define V4L2_CID_FLASH_INDICATOR_INTENSITY     (V4L2_CID_FLASH_CLASS_BASE + 9)
+
+#define V4L2_CID_FLASH_FAULT                   (V4L2_CID_FLASH_CLASS_BASE + 10)
+#define V4L2_FLASH_FAULT_OVER_VOLTAGE          (1 << 0)
+#define V4L2_FLASH_FAULT_TIMEOUT               (1 << 1)
+#define V4L2_FLASH_FAULT_OVER_TEMPERATURE      (1 << 2)
+#define V4L2_FLASH_FAULT_SHORT_CIRCUIT         (1 << 3)
+#define V4L2_FLASH_FAULT_OVER_CURRENT          (1 << 4)
+#define V4L2_FLASH_FAULT_INDICATOR             (1 << 5)
+#define V4L2_FLASH_FAULT_UNDER_VOLTAGE         (1 << 6)
+#define V4L2_FLASH_FAULT_INPUT_VOLTAGE         (1 << 7)
+#define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE  (1 << 8)
+
+#define V4L2_CID_FLASH_CHARGE                  (V4L2_CID_FLASH_CLASS_BASE + 11)
+#define V4L2_CID_FLASH_READY                   (V4L2_CID_FLASH_CLASS_BASE + 12)
+
+
+/* JPEG-class control IDs */
+
+#define V4L2_CID_JPEG_CLASS_BASE               (V4L2_CTRL_CLASS_JPEG | 0x900)
+#define V4L2_CID_JPEG_CLASS                    (V4L2_CTRL_CLASS_JPEG | 1)
+
+#define        V4L2_CID_JPEG_CHROMA_SUBSAMPLING        (V4L2_CID_JPEG_CLASS_BASE + 1)
+enum v4l2_jpeg_chroma_subsampling {
+       V4L2_JPEG_CHROMA_SUBSAMPLING_444        = 0,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_422        = 1,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_420        = 2,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_411        = 3,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_410        = 4,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY       = 5,
+};
+#define        V4L2_CID_JPEG_RESTART_INTERVAL          (V4L2_CID_JPEG_CLASS_BASE + 2)
+#define        V4L2_CID_JPEG_COMPRESSION_QUALITY       (V4L2_CID_JPEG_CLASS_BASE + 3)
+
+#define        V4L2_CID_JPEG_ACTIVE_MARKER             (V4L2_CID_JPEG_CLASS_BASE + 4)
+#define        V4L2_JPEG_ACTIVE_MARKER_APP0            (1 << 0)
+#define        V4L2_JPEG_ACTIVE_MARKER_APP1            (1 << 1)
+#define        V4L2_JPEG_ACTIVE_MARKER_COM             (1 << 16)
+#define        V4L2_JPEG_ACTIVE_MARKER_DQT             (1 << 17)
+#define        V4L2_JPEG_ACTIVE_MARKER_DHT             (1 << 18)
+
+
+/* Image source controls */
+#define V4L2_CID_IMAGE_SOURCE_CLASS_BASE       (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
+#define V4L2_CID_IMAGE_SOURCE_CLASS            (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)
+
+#define V4L2_CID_VBLANK                                (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
+#define V4L2_CID_HBLANK                                (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
+#define V4L2_CID_ANALOGUE_GAIN                 (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
+#define V4L2_CID_TEST_PATTERN_RED              (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
+#define V4L2_CID_TEST_PATTERN_GREENR           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
+#define V4L2_CID_TEST_PATTERN_BLUE             (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
+#define V4L2_CID_TEST_PATTERN_GREENB           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+
+
+/* Image processing controls */
+
+#define V4L2_CID_IMAGE_PROC_CLASS_BASE         (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
+#define V4L2_CID_IMAGE_PROC_CLASS              (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
+
+#define V4L2_CID_LINK_FREQ                     (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
+#define V4L2_CID_PIXEL_RATE                    (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
+#define V4L2_CID_TEST_PATTERN                  (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
+
+
+/*  DV-class control IDs defined by V4L2 */
+#define V4L2_CID_DV_CLASS_BASE                 (V4L2_CTRL_CLASS_DV | 0x900)
+#define V4L2_CID_DV_CLASS                      (V4L2_CTRL_CLASS_DV | 1)
+
+#define        V4L2_CID_DV_TX_HOTPLUG                  (V4L2_CID_DV_CLASS_BASE + 1)
+#define        V4L2_CID_DV_TX_RXSENSE                  (V4L2_CID_DV_CLASS_BASE + 2)
+#define        V4L2_CID_DV_TX_EDID_PRESENT             (V4L2_CID_DV_CLASS_BASE + 3)
+#define        V4L2_CID_DV_TX_MODE                     (V4L2_CID_DV_CLASS_BASE + 4)
+enum v4l2_dv_tx_mode {
+       V4L2_DV_TX_MODE_DVI_D   = 0,
+       V4L2_DV_TX_MODE_HDMI    = 1,
+};
+#define V4L2_CID_DV_TX_RGB_RANGE               (V4L2_CID_DV_CLASS_BASE + 5)
+enum v4l2_dv_rgb_range {
+       V4L2_DV_RGB_RANGE_AUTO    = 0,
+       V4L2_DV_RGB_RANGE_LIMITED = 1,
+       V4L2_DV_RGB_RANGE_FULL    = 2,
+};
+
+#define        V4L2_CID_DV_RX_POWER_PRESENT            (V4L2_CID_DV_CLASS_BASE + 100)
+#define V4L2_CID_DV_RX_RGB_RANGE               (V4L2_CID_DV_CLASS_BASE + 101)
+
+#define V4L2_CID_FM_RX_CLASS_BASE              (V4L2_CTRL_CLASS_FM_RX | 0x900)
+#define V4L2_CID_FM_RX_CLASS                   (V4L2_CTRL_CLASS_FM_RX | 1)
+
+#define V4L2_CID_TUNE_DEEMPHASIS               (V4L2_CID_FM_RX_CLASS_BASE + 1)
+enum v4l2_deemphasis {
+       V4L2_DEEMPHASIS_DISABLED        = V4L2_PREEMPHASIS_DISABLED,
+       V4L2_DEEMPHASIS_50_uS           = V4L2_PREEMPHASIS_50_uS,
+       V4L2_DEEMPHASIS_75_uS           = V4L2_PREEMPHASIS_75_uS,
+};
+
+#define V4L2_CID_RDS_RECEPTION                 (V4L2_CID_FM_RX_CLASS_BASE + 2)
+#define V4L2_CID_RDS_RX_PTY                    (V4L2_CID_FM_RX_CLASS_BASE + 3)
+#define V4L2_CID_RDS_RX_PS_NAME                        (V4L2_CID_FM_RX_CLASS_BASE + 4)
+#define V4L2_CID_RDS_RX_RADIO_TEXT             (V4L2_CID_FM_RX_CLASS_BASE + 5)
+#define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT   (V4L2_CID_FM_RX_CLASS_BASE + 6)
+#define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM                (V4L2_CID_FM_RX_CLASS_BASE + 7)
+#define V4L2_CID_RDS_RX_MUSIC_SPEECH           (V4L2_CID_FM_RX_CLASS_BASE + 8)
+
+#define V4L2_CID_RF_TUNER_CLASS_BASE           (V4L2_CTRL_CLASS_RF_TUNER | 0x900)
+#define V4L2_CID_RF_TUNER_CLASS                        (V4L2_CTRL_CLASS_RF_TUNER | 1)
+
+#define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO       (V4L2_CID_RF_TUNER_CLASS_BASE + 11)
+#define V4L2_CID_RF_TUNER_BANDWIDTH            (V4L2_CID_RF_TUNER_CLASS_BASE + 12)
+#define V4L2_CID_RF_TUNER_RF_GAIN              (V4L2_CID_RF_TUNER_CLASS_BASE + 32)
+#define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO                (V4L2_CID_RF_TUNER_CLASS_BASE + 41)
+#define V4L2_CID_RF_TUNER_LNA_GAIN             (V4L2_CID_RF_TUNER_CLASS_BASE + 42)
+#define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO      (V4L2_CID_RF_TUNER_CLASS_BASE + 51)
+#define V4L2_CID_RF_TUNER_MIXER_GAIN           (V4L2_CID_RF_TUNER_CLASS_BASE + 52)
+#define V4L2_CID_RF_TUNER_IF_GAIN_AUTO         (V4L2_CID_RF_TUNER_CLASS_BASE + 61)
+#define V4L2_CID_RF_TUNER_IF_GAIN              (V4L2_CID_RF_TUNER_CLASS_BASE + 62)
+#define V4L2_CID_RF_TUNER_PLL_LOCK                     (V4L2_CID_RF_TUNER_CLASS_BASE + 91)
+
+
+/*  Detection-class control IDs defined by V4L2 */
+#define V4L2_CID_DETECT_CLASS_BASE             (V4L2_CTRL_CLASS_DETECT | 0x900)
+#define V4L2_CID_DETECT_CLASS                  (V4L2_CTRL_CLASS_DETECT | 1)
+
+#define V4L2_CID_DETECT_MD_MODE                        (V4L2_CID_DETECT_CLASS_BASE + 1)
+enum v4l2_detect_md_mode {
+       V4L2_DETECT_MD_MODE_DISABLED            = 0,
+       V4L2_DETECT_MD_MODE_GLOBAL              = 1,
+       V4L2_DETECT_MD_MODE_THRESHOLD_GRID      = 2,
+       V4L2_DETECT_MD_MODE_REGION_GRID         = 3,
+};
+#define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD    (V4L2_CID_DETECT_CLASS_BASE + 2)
+#define V4L2_CID_DETECT_MD_THRESHOLD_GRID      (V4L2_CID_DETECT_CLASS_BASE + 3)
+#define V4L2_CID_DETECT_MD_REGION_GRID         (V4L2_CID_DETECT_CLASS_BASE + 4)
+
+#endif
diff --git a/lib/libdss-include/include/linux/v4l2-dv-timings.h b/lib/libdss-include/include/linux/v4l2-dv-timings.h
new file mode 100644 (file)
index 0000000..c039f1d
--- /dev/null
@@ -0,0 +1,927 @@
+/*
+ * V4L2 DV timings header.
+ *
+ * Copyright (C) 2012  Hans Verkuil <hans.verkuil@cisco.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _V4L2_DV_TIMINGS_H
+#define _V4L2_DV_TIMINGS_H
+
+#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6))
+/* Sadly gcc versions older than 4.6 have a bug in how they initialize
+   anonymous unions where they require additional curly brackets.
+   This violates the C1x standard. This workaround adds the curly brackets
+   if needed. */
+#define V4L2_INIT_BT_TIMINGS(_width, args...) \
+       { .bt = { _width , ## args } }
+#else
+#define V4L2_INIT_BT_TIMINGS(_width, args...) \
+       .bt = { _width , ## args }
+#endif
+
+/* CEA-861-E timings (i.e. standard HDTV timings) */
+
+#define V4L2_DV_BT_CEA_640X480P59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               25175000, 16, 96, 48, 10, 2, 33, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, 0) \
+}
+
+/* Note: these are the nominal timings, for HDMI links this format is typically
+ * double-clocked to meet the minimum pixelclock requirements.  */
+#define V4L2_DV_BT_CEA_720X480I59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 480, 1, 0, \
+               13500000, 19, 62, 57, 4, 3, 15, 4, 3, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_720X480P59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \
+               27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+/* Note: these are the nominal timings, for HDMI links this format is typically
+ * double-clocked to meet the minimum pixelclock requirements.  */
+#define V4L2_DV_BT_CEA_720X576I50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 576, 1, 0, \
+               13500000, 12, 63, 69, 2, 3, 19, 2, 3, 20, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_720X576P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \
+               27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               59400000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080I50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080I60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+
+/* VESA Discrete Monitor Timings as per version 1.0, revision 12 */
+
+#define V4L2_DV_BT_DMT_640X350P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 350, 0, V4L2_DV_HSYNC_POS_POL, \
+               31500000, 32, 64, 96, 32, 3, 60, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X400P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 400, 0, V4L2_DV_VSYNC_POS_POL, \
+               31500000, 32, 64, 96, 1, 3, 41, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_720X400P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 400, 0, V4L2_DV_VSYNC_POS_POL, \
+               35500000, 36, 72, 108, 1, 3, 42, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* VGA resolutions */
+#define V4L2_DV_BT_DMT_640X480P60 V4L2_DV_BT_CEA_640X480P59_94
+
+#define V4L2_DV_BT_DMT_640X480P72 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               31500000, 24, 40, 128, 9, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X480P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               31500000, 16, 64, 120, 1, 3, 16, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X480P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               36000000, 56, 56, 80, 1, 3, 25, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* SVGA resolutions */
+#define V4L2_DV_BT_DMT_800X600P56 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               36000000, 24, 72, 128, 1, 2, 22, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               40000000, 40, 128, 88, 1, 4, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P72 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               50000000, 56, 120, 64, 37, 6, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               49500000, 16, 80, 160, 1, 3, 21, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               56250000, 32, 64, 152, 1, 3, 27, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, V4L2_DV_HSYNC_POS_POL, \
+               73250000, 48, 32, 80, 3, 4, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_848X480P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(848, 480, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               33750000, 16, 112, 112, 6, 8, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768I43 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               44900000, 8, 176, 56, 0, 4, 20, 0, 4, 21, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* XGA resolutions */
+#define V4L2_DV_BT_DMT_1024X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \
+               65000000, 24, 136, 160, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P70 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \
+               75000000, 24, 136, 144, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               78750000, 16, 96, 176, 1, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               94500000, 48, 96, 208, 1, 3, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               115500000, 48, 32, 80, 3, 4, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* XGA+ resolution */
+#define V4L2_DV_BT_DMT_1152X864P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1152, 864, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 64, 128, 256, 1, 3, 32, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X720P60 V4L2_DV_BT_CEA_1280X720P60
+
+/* WXGA resolutions */
+#define V4L2_DV_BT_DMT_1280X768P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               68250000, 48, 32, 80, 3, 7, 12, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               79500000, 64, 128, 192, 3, 7, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               102250000, 80, 128, 208, 3, 7, 27, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               117500000, 80, 136, 216, 3, 7, 31, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               140250000, 48, 32, 80, 3, 7, 35, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \
+               71000000, 48, 32, 80, 3, 6, 14, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               83500000, 72, 128, 200, 3, 6, 22, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               106500000, 80, 128, 208, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               122500000, 80, 136, 216, 3, 6, 34, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \
+               146250000, 48, 32, 80, 3, 6, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 96, 112, 312, 1, 3, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 64, 160, 224, 1, 3, 47, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, V4L2_DV_HSYNC_POS_POL, \
+               175500000, 48, 32, 80, 3, 4, 50, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* SXGA resolutions */
+#define V4L2_DV_BT_DMT_1280X1024P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 48, 112, 248, 1, 3, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               135000000, 16, 144, 248, 1, 3, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               157500000, 64, 160, 224, 1, 3, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, V4L2_DV_HSYNC_POS_POL, \
+               187250000, 48, 32, 80, 3, 7, 50, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1360X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1360, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               85500000, 64, 112, 256, 3, 6, 18, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1360X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1360, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               148250000, 48, 32, 80, 3, 5, 37, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1366X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1366, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1366X768P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1366, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               72000000, 14, 56, 64, 1, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* SXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1400X1050P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               101000000, 48, 32, 80, 3, 4, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               121750000, 88, 144, 232, 3, 4, 32, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               156000000, 104, 144, 248, 3, 4, 42, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               179500000, 104, 152, 256, 3, 4, 48, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               208000000, 48, 32, 80, 3, 4, 55, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1440X900P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \
+               88750000, 48, 32, 80, 3, 6, 17, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               106500000, 80, 152, 232, 3, 6, 25, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               136750000, 96, 152, 248, 3, 6, 33, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               157000000, 104, 152, 256, 3, 6, 39, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \
+               182750000, 48, 32, 80, 3, 6, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1600X900P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 900, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 24, 80, 96, 1, 3, 96, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* UXGA resolutions */
+#define V4L2_DV_BT_DMT_1600X1200P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               162000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P65 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               175500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P70 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               189000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               202500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               229500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               268250000, 48, 32, 80, 3, 4, 64, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WSXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1680X1050P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               119000000, 48, 32, 80, 3, 6, 21, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               146250000, 104, 176, 280, 3, 6, 30, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               187000000, 120, 176, 296, 3, 6, 40, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               214750000, 128, 176, 304, 3, 6, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               245500000, 48, 32, 80, 3, 6, 53, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \
+               204750000, 128, 200, 328, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \
+               261000000, 96, 216, 352, 1, 3, 69, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_HSYNC_POS_POL, \
+               333250000, 48, 32, 80, 3, 4, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \
+               218250000, 96, 224, 352, 1, 3, 43, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \
+               288000000, 128, 224, 352, 1, 3, 104, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_HSYNC_POS_POL, \
+               356500000, 48, 32, 80, 3, 4, 75, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1080P60 V4L2_DV_BT_CEA_1920X1080P60
+
+/* WUXGA resolutions */
+#define V4L2_DV_BT_DMT_1920X1200P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               154000000, 48, 32, 80, 3, 6, 26, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               193250000, 136, 200, 336, 3, 6, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               245250000, 136, 208, 344, 3, 6, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               281250000, 144, 208, 352, 3, 6, 53, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               317000000, 48, 32, 80, 3, 6, 62, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \
+               234000000, 128, 208, 344, 1, 3, 56, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \
+               297000000, 144, 224, 352, 1, 3, 56, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_HSYNC_POS_POL, \
+               380500000, 48, 32, 80, 3, 4, 78, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_2048X1152P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2048, 1152, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               162000000, 26, 80, 96, 1, 3, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WQXGA resolutions */
+#define V4L2_DV_BT_DMT_2560X1600P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \
+               268500000, 48, 32, 80, 3, 6, 37, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               348500000, 192, 280, 472, 3, 6, 49, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               443250000, 208, 280, 488, 3, 6, 63, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               505250000, 208, 280, 488, 3, 6, 73, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \
+               552750000, 48, 32, 80, 3, 6, 85, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* 4K resolutions */
+#define V4L2_DV_BT_DMT_4096X2160P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               556744000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_4096X2160P59_94_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               556188000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#endif
diff --git a/lib/libdss-include/include/linux/v4l2-mediabus.h b/lib/libdss-include/include/linux/v4l2-mediabus.h
new file mode 100644 (file)
index 0000000..dbacc51
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Media Bus API header
+ *
+ * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_V4L2_MEDIABUS_H
+#define __LINUX_V4L2_MEDIABUS_H
+
+#include <linux/media-bus-format.h>
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/**
+ * struct v4l2_mbus_framefmt - frame format on the media bus
+ * @width:     frame width
+ * @height:    frame height
+ * @code:      data format code (from enum v4l2_mbus_pixelcode)
+ * @field:     used interlacing type (from enum v4l2_field)
+ * @colorspace:        colorspace of the data (from enum v4l2_colorspace)
+ * @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
+ * @quantization: quantization of the data (from enum v4l2_quantization)
+ * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func)
+ */
+struct v4l2_mbus_framefmt {
+       __u32                   width;
+       __u32                   height;
+       __u32                   code;
+       __u32                   field;
+       __u32                   colorspace;
+       __u16                   ycbcr_enc;
+       __u16                   quantization;
+       __u16                   xfer_func;
+       __u16                   reserved[11];
+};
+
+/*
+ * enum v4l2_mbus_pixelcode and its definitions are now deprecated, and
+ * MEDIA_BUS_FMT_ definitions (defined in media-bus-format.h) should be
+ * used instead.
+ *
+ * New defines should only be added to media-bus-format.h. The
+ * v4l2_mbus_pixelcode enum is frozen.
+ */
+
+#define V4L2_MBUS_FROM_MEDIA_BUS_FMT(name)     \
+       V4L2_MBUS_FMT_ ## name = MEDIA_BUS_FMT_ ## name
+
+enum v4l2_mbus_pixelcode {
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(FIXED),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB666_1X18),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(ARGB8888_1X32),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UV8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YDYUYDYV8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUV10_1X30),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(AYUV8_1X32),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_1X24),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB12_1X12),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(JPEG_1X8),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(S5C_UYVY_JPEG_1X8),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(AHSV8888_1X32),
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/v4l2-subdev.h b/lib/libdss-include/include/linux/v4l2-subdev.h
new file mode 100644 (file)
index 0000000..dbce2b5
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * V4L2 subdev userspace API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_V4L2_SUBDEV_H
+#define __LINUX_V4L2_SUBDEV_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/v4l2-common.h>
+#include <linux/v4l2-mediabus.h>
+
+/**
+ * enum v4l2_subdev_format_whence - Media bus format type
+ * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
+ * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
+ */
+enum v4l2_subdev_format_whence {
+       V4L2_SUBDEV_FORMAT_TRY = 0,
+       V4L2_SUBDEV_FORMAT_ACTIVE = 1,
+};
+
+/**
+ * struct v4l2_subdev_format - Pad-level media bus format
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ * @pad: pad number, as reported by the media API
+ * @format: media bus format (format code and frame size)
+ */
+struct v4l2_subdev_format {
+       __u32 which;
+       __u32 pad;
+       struct v4l2_mbus_framefmt format;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_crop - Pad-level crop settings
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ * @pad: pad number, as reported by the media API
+ * @rect: pad crop rectangle boundaries
+ */
+struct v4l2_subdev_crop {
+       __u32 which;
+       __u32 pad;
+       struct v4l2_rect rect;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: format index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_mbus_code_enum {
+       __u32 pad;
+       __u32 index;
+       __u32 code;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: format index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_frame_size_enum {
+       __u32 index;
+       __u32 pad;
+       __u32 code;
+       __u32 min_width;
+       __u32 max_width;
+       __u32 min_height;
+       __u32 max_height;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_frame_interval - Pad-level frame rate
+ * @pad: pad number, as reported by the media API
+ * @interval: frame interval in seconds
+ */
+struct v4l2_subdev_frame_interval {
+       __u32 pad;
+       struct v4l2_fract interval;
+       __u32 reserved[9];
+};
+
+/**
+ * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: frame interval index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @width: frame width in pixels
+ * @height: frame height in pixels
+ * @interval: frame interval in seconds
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_frame_interval_enum {
+       __u32 index;
+       __u32 pad;
+       __u32 code;
+       __u32 width;
+       __u32 height;
+       struct v4l2_fract interval;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_selection - selection info
+ *
+ * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY
+ * @pad: pad number, as reported by the media API
+ * @target: Selection target, used to choose one of possible rectangles,
+ *         defined in v4l2-common.h; V4L2_SEL_TGT_* .
+ * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
+ * @r: coordinates of the selection window
+ * @reserved: for future use, set to zero for now
+ *
+ * Hardware may use multiple helper windows to process a video stream.
+ * The structure is used to exchange this selection areas between
+ * an application and a driver.
+ */
+struct v4l2_subdev_selection {
+       __u32 which;
+       __u32 pad;
+       __u32 target;
+       __u32 flags;
+       struct v4l2_rect r;
+       __u32 reserved[8];
+};
+
+/* Backwards compatibility define --- to be removed */
+#define v4l2_subdev_edid v4l2_edid
+
+#define VIDIOC_SUBDEV_G_FMT                    _IOWR('V',  4, struct v4l2_subdev_format)
+#define VIDIOC_SUBDEV_S_FMT                    _IOWR('V',  5, struct v4l2_subdev_format)
+#define VIDIOC_SUBDEV_G_FRAME_INTERVAL         _IOWR('V', 21, struct v4l2_subdev_frame_interval)
+#define VIDIOC_SUBDEV_S_FRAME_INTERVAL         _IOWR('V', 22, struct v4l2_subdev_frame_interval)
+#define VIDIOC_SUBDEV_ENUM_MBUS_CODE           _IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
+#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE          _IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
+#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL      _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
+#define VIDIOC_SUBDEV_G_CROP                   _IOWR('V', 59, struct v4l2_subdev_crop)
+#define VIDIOC_SUBDEV_S_CROP                   _IOWR('V', 60, struct v4l2_subdev_crop)
+#define VIDIOC_SUBDEV_G_SELECTION              _IOWR('V', 61, struct v4l2_subdev_selection)
+#define VIDIOC_SUBDEV_S_SELECTION              _IOWR('V', 62, struct v4l2_subdev_selection)
+/* The following ioctls are identical to the ioctls in videodev2.h */
+#define VIDIOC_SUBDEV_G_EDID                   _IOWR('V', 40, struct v4l2_edid)
+#define VIDIOC_SUBDEV_S_EDID                   _IOWR('V', 41, struct v4l2_edid)
+#define VIDIOC_SUBDEV_S_DV_TIMINGS             _IOWR('V', 87, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_G_DV_TIMINGS             _IOWR('V', 88, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_ENUM_DV_TIMINGS          _IOWR('V', 98, struct v4l2_enum_dv_timings)
+#define VIDIOC_SUBDEV_QUERY_DV_TIMINGS         _IOR('V', 99, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_DV_TIMINGS_CAP           _IOWR('V', 100, struct v4l2_dv_timings_cap)
+
+#endif
diff --git a/lib/libdss-include/include/linux/version.h b/lib/libdss-include/include/linux/version.h
new file mode 100644 (file)
index 0000000..6653169
--- /dev/null
@@ -0,0 +1,2 @@
+#define LINUX_VERSION_CODE 263174
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/lib/libdss-include/include/linux/veth.h b/lib/libdss-include/include/linux/veth.h
new file mode 100644 (file)
index 0000000..3354c1e
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __NET_VETH_H_
+#define __NET_VETH_H_
+
+enum {
+       VETH_INFO_UNSPEC,
+       VETH_INFO_PEER,
+
+       __VETH_INFO_MAX
+#define VETH_INFO_MAX  (__VETH_INFO_MAX - 1)
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/vfio.h b/lib/libdss-include/include/linux/vfio.h
new file mode 100644 (file)
index 0000000..aa276bc
--- /dev/null
@@ -0,0 +1,594 @@
+/*
+ * VFIO API definition
+ *
+ * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
+ *     Author: Alex Williamson <alex.williamson@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef VFIO_H
+#define VFIO_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define VFIO_API_VERSION       0
+
+
+/* Kernel & User level defines for VFIO IOCTLs. */
+
+/* Extensions */
+
+#define VFIO_TYPE1_IOMMU               1
+#define VFIO_SPAPR_TCE_IOMMU           2
+#define VFIO_TYPE1v2_IOMMU             3
+/*
+ * IOMMU enforces DMA cache coherence (ex. PCIe NoSnoop stripping).  This
+ * capability is subject to change as groups are added or removed.
+ */
+#define VFIO_DMA_CC_IOMMU              4
+
+/* Check if EEH is supported */
+#define VFIO_EEH                       5
+
+/* Two-stage IOMMU */
+#define VFIO_TYPE1_NESTING_IOMMU       6       /* Implies v2 */
+
+#define VFIO_SPAPR_TCE_v2_IOMMU                7
+
+/*
+ * The IOCTL interface is designed for extensibility by embedding the
+ * structure length (argsz) and flags into structures passed between
+ * kernel and userspace.  We therefore use the _IO() macro for these
+ * defines to avoid implicitly embedding a size into the ioctl request.
+ * As structure fields are added, argsz will increase to match and flag
+ * bits will be defined to indicate additional fields with valid data.
+ * It's *always* the caller's responsibility to indicate the size of
+ * the structure passed by setting argsz appropriately.
+ */
+
+#define VFIO_TYPE      (';')
+#define VFIO_BASE      100
+
+/* -------- IOCTLs for VFIO file descriptor (/dev/vfio/vfio) -------- */
+
+/**
+ * VFIO_GET_API_VERSION - _IO(VFIO_TYPE, VFIO_BASE + 0)
+ *
+ * Report the version of the VFIO API.  This allows us to bump the entire
+ * API version should we later need to add or change features in incompatible
+ * ways.
+ * Return: VFIO_API_VERSION
+ * Availability: Always
+ */
+#define VFIO_GET_API_VERSION           _IO(VFIO_TYPE, VFIO_BASE + 0)
+
+/**
+ * VFIO_CHECK_EXTENSION - _IOW(VFIO_TYPE, VFIO_BASE + 1, __u32)
+ *
+ * Check whether an extension is supported.
+ * Return: 0 if not supported, 1 (or some other positive integer) if supported.
+ * Availability: Always
+ */
+#define VFIO_CHECK_EXTENSION           _IO(VFIO_TYPE, VFIO_BASE + 1)
+
+/**
+ * VFIO_SET_IOMMU - _IOW(VFIO_TYPE, VFIO_BASE + 2, __s32)
+ *
+ * Set the iommu to the given type.  The type must be supported by an
+ * iommu driver as verified by calling CHECK_EXTENSION using the same
+ * type.  A group must be set to this file descriptor before this
+ * ioctl is available.  The IOMMU interfaces enabled by this call are
+ * specific to the value set.
+ * Return: 0 on success, -errno on failure
+ * Availability: When VFIO group attached
+ */
+#define VFIO_SET_IOMMU                 _IO(VFIO_TYPE, VFIO_BASE + 2)
+
+/* -------- IOCTLs for GROUP file descriptors (/dev/vfio/$GROUP) -------- */
+
+/**
+ * VFIO_GROUP_GET_STATUS - _IOR(VFIO_TYPE, VFIO_BASE + 3,
+ *                                             struct vfio_group_status)
+ *
+ * Retrieve information about the group.  Fills in provided
+ * struct vfio_group_info.  Caller sets argsz.
+ * Return: 0 on succes, -errno on failure.
+ * Availability: Always
+ */
+struct vfio_group_status {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_GROUP_FLAGS_VIABLE                (1 << 0)
+#define VFIO_GROUP_FLAGS_CONTAINER_SET (1 << 1)
+};
+#define VFIO_GROUP_GET_STATUS          _IO(VFIO_TYPE, VFIO_BASE + 3)
+
+/**
+ * VFIO_GROUP_SET_CONTAINER - _IOW(VFIO_TYPE, VFIO_BASE + 4, __s32)
+ *
+ * Set the container for the VFIO group to the open VFIO file
+ * descriptor provided.  Groups may only belong to a single
+ * container.  Containers may, at their discretion, support multiple
+ * groups.  Only when a container is set are all of the interfaces
+ * of the VFIO file descriptor and the VFIO group file descriptor
+ * available to the user.
+ * Return: 0 on success, -errno on failure.
+ * Availability: Always
+ */
+#define VFIO_GROUP_SET_CONTAINER       _IO(VFIO_TYPE, VFIO_BASE + 4)
+
+/**
+ * VFIO_GROUP_UNSET_CONTAINER - _IO(VFIO_TYPE, VFIO_BASE + 5)
+ *
+ * Remove the group from the attached container.  This is the
+ * opposite of the SET_CONTAINER call and returns the group to
+ * an initial state.  All device file descriptors must be released
+ * prior to calling this interface.  When removing the last group
+ * from a container, the IOMMU will be disabled and all state lost,
+ * effectively also returning the VFIO file descriptor to an initial
+ * state.
+ * Return: 0 on success, -errno on failure.
+ * Availability: When attached to container
+ */
+#define VFIO_GROUP_UNSET_CONTAINER     _IO(VFIO_TYPE, VFIO_BASE + 5)
+
+/**
+ * VFIO_GROUP_GET_DEVICE_FD - _IOW(VFIO_TYPE, VFIO_BASE + 6, char)
+ *
+ * Return a new file descriptor for the device object described by
+ * the provided string.  The string should match a device listed in
+ * the devices subdirectory of the IOMMU group sysfs entry.  The
+ * group containing the device must already be added to this context.
+ * Return: new file descriptor on success, -errno on failure.
+ * Availability: When attached to container
+ */
+#define VFIO_GROUP_GET_DEVICE_FD       _IO(VFIO_TYPE, VFIO_BASE + 6)
+
+/* --------------- IOCTLs for DEVICE file descriptors --------------- */
+
+/**
+ * VFIO_DEVICE_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 7,
+ *                                             struct vfio_device_info)
+ *
+ * Retrieve information about the device.  Fills in provided
+ * struct vfio_device_info.  Caller sets argsz.
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_device_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_DEVICE_FLAGS_RESET        (1 << 0)        /* Device supports reset */
+#define VFIO_DEVICE_FLAGS_PCI  (1 << 1)        /* vfio-pci device */
+#define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)    /* vfio-platform device */
+#define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)       /* vfio-amba device */
+       __u32   num_regions;    /* Max region index + 1 */
+       __u32   num_irqs;       /* Max IRQ index + 1 */
+};
+#define VFIO_DEVICE_GET_INFO           _IO(VFIO_TYPE, VFIO_BASE + 7)
+
+/**
+ * VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8,
+ *                                    struct vfio_region_info)
+ *
+ * Retrieve information about a device region.  Caller provides
+ * struct vfio_region_info with index value set.  Caller sets argsz.
+ * Implementation of region mapping is bus driver specific.  This is
+ * intended to describe MMIO, I/O port, as well as bus specific
+ * regions (ex. PCI config space).  Zero sized regions may be used
+ * to describe unimplemented regions (ex. unimplemented PCI BARs).
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_region_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_REGION_INFO_FLAG_READ     (1 << 0) /* Region supports read */
+#define VFIO_REGION_INFO_FLAG_WRITE    (1 << 1) /* Region supports write */
+#define VFIO_REGION_INFO_FLAG_MMAP     (1 << 2) /* Region supports mmap */
+       __u32   index;          /* Region index */
+       __u32   resv;           /* Reserved for alignment */
+       __u64   size;           /* Region size (bytes) */
+       __u64   offset;         /* Region offset from start of device fd */
+};
+#define VFIO_DEVICE_GET_REGION_INFO    _IO(VFIO_TYPE, VFIO_BASE + 8)
+
+/**
+ * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9,
+ *                                 struct vfio_irq_info)
+ *
+ * Retrieve information about a device IRQ.  Caller provides
+ * struct vfio_irq_info with index value set.  Caller sets argsz.
+ * Implementation of IRQ mapping is bus driver specific.  Indexes
+ * using multiple IRQs are primarily intended to support MSI-like
+ * interrupt blocks.  Zero count irq blocks may be used to describe
+ * unimplemented interrupt types.
+ *
+ * The EVENTFD flag indicates the interrupt index supports eventfd based
+ * signaling.
+ *
+ * The MASKABLE flags indicates the index supports MASK and UNMASK
+ * actions described below.
+ *
+ * AUTOMASKED indicates that after signaling, the interrupt line is
+ * automatically masked by VFIO and the user needs to unmask the line
+ * to receive new interrupts.  This is primarily intended to distinguish
+ * level triggered interrupts.
+ *
+ * The NORESIZE flag indicates that the interrupt lines within the index
+ * are setup as a set and new subindexes cannot be enabled without first
+ * disabling the entire index.  This is used for interrupts like PCI MSI
+ * and MSI-X where the driver may only use a subset of the available
+ * indexes, but VFIO needs to enable a specific number of vectors
+ * upfront.  In the case of MSI-X, where the user can enable MSI-X and
+ * then add and unmask vectors, it's up to userspace to make the decision
+ * whether to allocate the maximum supported number of vectors or tear
+ * down setup and incrementally increase the vectors as each is enabled.
+ */
+struct vfio_irq_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IRQ_INFO_EVENTFD          (1 << 0)
+#define VFIO_IRQ_INFO_MASKABLE         (1 << 1)
+#define VFIO_IRQ_INFO_AUTOMASKED       (1 << 2)
+#define VFIO_IRQ_INFO_NORESIZE         (1 << 3)
+       __u32   index;          /* IRQ index */
+       __u32   count;          /* Number of IRQs within this index */
+};
+#define VFIO_DEVICE_GET_IRQ_INFO       _IO(VFIO_TYPE, VFIO_BASE + 9)
+
+/**
+ * VFIO_DEVICE_SET_IRQS - _IOW(VFIO_TYPE, VFIO_BASE + 10, struct vfio_irq_set)
+ *
+ * Set signaling, masking, and unmasking of interrupts.  Caller provides
+ * struct vfio_irq_set with all fields set.  'start' and 'count' indicate
+ * the range of subindexes being specified.
+ *
+ * The DATA flags specify the type of data provided.  If DATA_NONE, the
+ * operation performs the specified action immediately on the specified
+ * interrupt(s).  For example, to unmask AUTOMASKED interrupt [0,0]:
+ * flags = (DATA_NONE|ACTION_UNMASK), index = 0, start = 0, count = 1.
+ *
+ * DATA_BOOL allows sparse support for the same on arrays of interrupts.
+ * For example, to mask interrupts [0,1] and [0,3] (but not [0,2]):
+ * flags = (DATA_BOOL|ACTION_MASK), index = 0, start = 1, count = 3,
+ * data = {1,0,1}
+ *
+ * DATA_EVENTFD binds the specified ACTION to the provided __s32 eventfd.
+ * A value of -1 can be used to either de-assign interrupts if already
+ * assigned or skip un-assigned interrupts.  For example, to set an eventfd
+ * to be trigger for interrupts [0,0] and [0,2]:
+ * flags = (DATA_EVENTFD|ACTION_TRIGGER), index = 0, start = 0, count = 3,
+ * data = {fd1, -1, fd2}
+ * If index [0,1] is previously set, two count = 1 ioctls calls would be
+ * required to set [0,0] and [0,2] without changing [0,1].
+ *
+ * Once a signaling mechanism is set, DATA_BOOL or DATA_NONE can be used
+ * with ACTION_TRIGGER to perform kernel level interrupt loopback testing
+ * from userspace (ie. simulate hardware triggering).
+ *
+ * Setting of an event triggering mechanism to userspace for ACTION_TRIGGER
+ * enables the interrupt index for the device.  Individual subindex interrupts
+ * can be disabled using the -1 value for DATA_EVENTFD or the index can be
+ * disabled as a whole with: flags = (DATA_NONE|ACTION_TRIGGER), count = 0.
+ *
+ * Note that ACTION_[UN]MASK specify user->kernel signaling (irqfds) while
+ * ACTION_TRIGGER specifies kernel->user signaling.
+ */
+struct vfio_irq_set {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IRQ_SET_DATA_NONE         (1 << 0) /* Data not present */
+#define VFIO_IRQ_SET_DATA_BOOL         (1 << 1) /* Data is bool (u8) */
+#define VFIO_IRQ_SET_DATA_EVENTFD      (1 << 2) /* Data is eventfd (s32) */
+#define VFIO_IRQ_SET_ACTION_MASK       (1 << 3) /* Mask interrupt */
+#define VFIO_IRQ_SET_ACTION_UNMASK     (1 << 4) /* Unmask interrupt */
+#define VFIO_IRQ_SET_ACTION_TRIGGER    (1 << 5) /* Trigger interrupt */
+       __u32   index;
+       __u32   start;
+       __u32   count;
+       __u8    data[];
+};
+#define VFIO_DEVICE_SET_IRQS           _IO(VFIO_TYPE, VFIO_BASE + 10)
+
+#define VFIO_IRQ_SET_DATA_TYPE_MASK    (VFIO_IRQ_SET_DATA_NONE | \
+                                        VFIO_IRQ_SET_DATA_BOOL | \
+                                        VFIO_IRQ_SET_DATA_EVENTFD)
+#define VFIO_IRQ_SET_ACTION_TYPE_MASK  (VFIO_IRQ_SET_ACTION_MASK | \
+                                        VFIO_IRQ_SET_ACTION_UNMASK | \
+                                        VFIO_IRQ_SET_ACTION_TRIGGER)
+/**
+ * VFIO_DEVICE_RESET - _IO(VFIO_TYPE, VFIO_BASE + 11)
+ *
+ * Reset a device.
+ */
+#define VFIO_DEVICE_RESET              _IO(VFIO_TYPE, VFIO_BASE + 11)
+
+/*
+ * The VFIO-PCI bus driver makes use of the following fixed region and
+ * IRQ index mapping.  Unimplemented regions return a size of zero.
+ * Unimplemented IRQ types return a count of zero.
+ */
+
+enum {
+       VFIO_PCI_BAR0_REGION_INDEX,
+       VFIO_PCI_BAR1_REGION_INDEX,
+       VFIO_PCI_BAR2_REGION_INDEX,
+       VFIO_PCI_BAR3_REGION_INDEX,
+       VFIO_PCI_BAR4_REGION_INDEX,
+       VFIO_PCI_BAR5_REGION_INDEX,
+       VFIO_PCI_ROM_REGION_INDEX,
+       VFIO_PCI_CONFIG_REGION_INDEX,
+       /*
+        * Expose VGA regions defined for PCI base class 03, subclass 00.
+        * This includes I/O port ranges 0x3b0 to 0x3bb and 0x3c0 to 0x3df
+        * as well as the MMIO range 0xa0000 to 0xbffff.  Each implemented
+        * range is found at it's identity mapped offset from the region
+        * offset, for example 0x3b0 is region_info.offset + 0x3b0.  Areas
+        * between described ranges are unimplemented.
+        */
+       VFIO_PCI_VGA_REGION_INDEX,
+       VFIO_PCI_NUM_REGIONS
+};
+
+enum {
+       VFIO_PCI_INTX_IRQ_INDEX,
+       VFIO_PCI_MSI_IRQ_INDEX,
+       VFIO_PCI_MSIX_IRQ_INDEX,
+       VFIO_PCI_ERR_IRQ_INDEX,
+       VFIO_PCI_REQ_IRQ_INDEX,
+       VFIO_PCI_NUM_IRQS
+};
+
+/**
+ * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IORW(VFIO_TYPE, VFIO_BASE + 12,
+ *                                           struct vfio_pci_hot_reset_info)
+ *
+ * Return: 0 on success, -errno on failure:
+ *     -enospc = insufficient buffer, -enodev = unsupported for device.
+ */
+struct vfio_pci_dependent_device {
+       __u32   group_id;
+       __u16   segment;
+       __u8    bus;
+       __u8    devfn; /* Use PCI_SLOT/PCI_FUNC */
+};
+
+struct vfio_pci_hot_reset_info {
+       __u32   argsz;
+       __u32   flags;
+       __u32   count;
+       struct vfio_pci_dependent_device        devices[];
+};
+
+#define VFIO_DEVICE_GET_PCI_HOT_RESET_INFO     _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/**
+ * VFIO_DEVICE_PCI_HOT_RESET - _IOW(VFIO_TYPE, VFIO_BASE + 13,
+ *                                 struct vfio_pci_hot_reset)
+ *
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_pci_hot_reset {
+       __u32   argsz;
+       __u32   flags;
+       __u32   count;
+       __s32   group_fds[];
+};
+
+#define VFIO_DEVICE_PCI_HOT_RESET      _IO(VFIO_TYPE, VFIO_BASE + 13)
+
+/* -------- API for Type1 VFIO IOMMU -------- */
+
+/**
+ * VFIO_IOMMU_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 12, struct vfio_iommu_info)
+ *
+ * Retrieve information about the IOMMU object. Fills in provided
+ * struct vfio_iommu_info. Caller sets argsz.
+ *
+ * XXX Should we do these by CHECK_EXTENSION too?
+ */
+struct vfio_iommu_type1_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IOMMU_INFO_PGSIZES (1 << 0)       /* supported page sizes info */
+       __u64   iova_pgsizes;           /* Bitmap of supported page sizes */
+};
+
+#define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/**
+ * VFIO_IOMMU_MAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 13, struct vfio_dma_map)
+ *
+ * Map process virtual addresses to IO virtual addresses using the
+ * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required.
+ */
+struct vfio_iommu_type1_dma_map {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_DMA_MAP_FLAG_READ (1 << 0)                /* readable from device */
+#define VFIO_DMA_MAP_FLAG_WRITE (1 << 1)       /* writable from device */
+       __u64   vaddr;                          /* Process virtual address */
+       __u64   iova;                           /* IO virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+
+#define VFIO_IOMMU_MAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 13)
+
+/**
+ * VFIO_IOMMU_UNMAP_DMA - _IOWR(VFIO_TYPE, VFIO_BASE + 14,
+ *                                                     struct vfio_dma_unmap)
+ *
+ * Unmap IO virtual addresses using the provided struct vfio_dma_unmap.
+ * Caller sets argsz.  The actual unmapped size is returned in the size
+ * field.  No guarantee is made to the user that arbitrary unmaps of iova
+ * or size different from those used in the original mapping call will
+ * succeed.
+ */
+struct vfio_iommu_type1_dma_unmap {
+       __u32   argsz;
+       __u32   flags;
+       __u64   iova;                           /* IO virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+
+#define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14)
+
+/*
+ * IOCTLs to enable/disable IOMMU container usage.
+ * No parameters are supported.
+ */
+#define VFIO_IOMMU_ENABLE      _IO(VFIO_TYPE, VFIO_BASE + 15)
+#define VFIO_IOMMU_DISABLE     _IO(VFIO_TYPE, VFIO_BASE + 16)
+
+/* -------- Additional API for SPAPR TCE (Server POWERPC) IOMMU -------- */
+
+/*
+ * The SPAPR TCE DDW info struct provides the information about
+ * the details of Dynamic DMA window capability.
+ *
+ * @pgsizes contains a page size bitmask, 4K/64K/16M are supported.
+ * @max_dynamic_windows_supported tells the maximum number of windows
+ * which the platform can create.
+ * @levels tells the maximum number of levels in multi-level IOMMU tables;
+ * this allows splitting a table into smaller chunks which reduces
+ * the amount of physically contiguous memory required for the table.
+ */
+struct vfio_iommu_spapr_tce_ddw_info {
+       __u64 pgsizes;                  /* Bitmap of supported page sizes */
+       __u32 max_dynamic_windows_supported;
+       __u32 levels;
+};
+
+/*
+ * The SPAPR TCE info struct provides the information about the PCI bus
+ * address ranges available for DMA, these values are programmed into
+ * the hardware so the guest has to know that information.
+ *
+ * The DMA 32 bit window start is an absolute PCI bus address.
+ * The IOVA address passed via map/unmap ioctls are absolute PCI bus
+ * addresses too so the window works as a filter rather than an offset
+ * for IOVA addresses.
+ *
+ * Flags supported:
+ * - VFIO_IOMMU_SPAPR_INFO_DDW: informs the userspace that dynamic DMA windows
+ *   (DDW) support is present. @ddw is only supported when DDW is present.
+ */
+struct vfio_iommu_spapr_tce_info {
+       __u32 argsz;
+       __u32 flags;
+#define VFIO_IOMMU_SPAPR_INFO_DDW      (1 << 0)        /* DDW supported */
+       __u32 dma32_window_start;       /* 32 bit window start (bytes) */
+       __u32 dma32_window_size;        /* 32 bit window size (bytes) */
+       struct vfio_iommu_spapr_tce_ddw_info ddw;
+};
+
+#define VFIO_IOMMU_SPAPR_TCE_GET_INFO  _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/*
+ * EEH PE operation struct provides ways to:
+ * - enable/disable EEH functionality;
+ * - unfreeze IO/DMA for frozen PE;
+ * - read PE state;
+ * - reset PE;
+ * - configure PE;
+ * - inject EEH error.
+ */
+struct vfio_eeh_pe_err {
+       __u32 type;
+       __u32 func;
+       __u64 addr;
+       __u64 mask;
+};
+
+struct vfio_eeh_pe_op {
+       __u32 argsz;
+       __u32 flags;
+       __u32 op;
+       union {
+               struct vfio_eeh_pe_err err;
+       };
+};
+
+#define VFIO_EEH_PE_DISABLE            0       /* Disable EEH functionality */
+#define VFIO_EEH_PE_ENABLE             1       /* Enable EEH functionality  */
+#define VFIO_EEH_PE_UNFREEZE_IO                2       /* Enable IO for frozen PE   */
+#define VFIO_EEH_PE_UNFREEZE_DMA       3       /* Enable DMA for frozen PE  */
+#define VFIO_EEH_PE_GET_STATE          4       /* PE state retrieval        */
+#define  VFIO_EEH_PE_STATE_NORMAL      0       /* PE in functional state    */
+#define  VFIO_EEH_PE_STATE_RESET       1       /* PE reset in progress      */
+#define  VFIO_EEH_PE_STATE_STOPPED     2       /* Stopped DMA and IO        */
+#define  VFIO_EEH_PE_STATE_STOPPED_DMA 4       /* Stopped DMA only          */
+#define  VFIO_EEH_PE_STATE_UNAVAIL     5       /* State unavailable         */
+#define VFIO_EEH_PE_RESET_DEACTIVATE   5       /* Deassert PE reset         */
+#define VFIO_EEH_PE_RESET_HOT          6       /* Assert hot reset          */
+#define VFIO_EEH_PE_RESET_FUNDAMENTAL  7       /* Assert fundamental reset  */
+#define VFIO_EEH_PE_CONFIGURE          8       /* PE configuration          */
+#define VFIO_EEH_PE_INJECT_ERR         9       /* Inject EEH error          */
+
+#define VFIO_EEH_PE_OP                 _IO(VFIO_TYPE, VFIO_BASE + 21)
+
+/**
+ * VFIO_IOMMU_SPAPR_REGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 17, struct vfio_iommu_spapr_register_memory)
+ *
+ * Registers user space memory where DMA is allowed. It pins
+ * user pages and does the locked memory accounting so
+ * subsequent VFIO_IOMMU_MAP_DMA/VFIO_IOMMU_UNMAP_DMA calls
+ * get faster.
+ */
+struct vfio_iommu_spapr_register_memory {
+       __u32   argsz;
+       __u32   flags;
+       __u64   vaddr;                          /* Process virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+#define VFIO_IOMMU_SPAPR_REGISTER_MEMORY       _IO(VFIO_TYPE, VFIO_BASE + 17)
+
+/**
+ * VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 18, struct vfio_iommu_spapr_register_memory)
+ *
+ * Unregisters user space memory registered with
+ * VFIO_IOMMU_SPAPR_REGISTER_MEMORY.
+ * Uses vfio_iommu_spapr_register_memory for parameters.
+ */
+#define VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY     _IO(VFIO_TYPE, VFIO_BASE + 18)
+
+/**
+ * VFIO_IOMMU_SPAPR_TCE_CREATE - _IOWR(VFIO_TYPE, VFIO_BASE + 19, struct vfio_iommu_spapr_tce_create)
+ *
+ * Creates an additional TCE table and programs it (sets a new DMA window)
+ * to every IOMMU group in the container. It receives page shift, window
+ * size and number of levels in the TCE table being created.
+ *
+ * It allocates and returns an offset on a PCI bus of the new DMA window.
+ */
+struct vfio_iommu_spapr_tce_create {
+       __u32 argsz;
+       __u32 flags;
+       /* in */
+       __u32 page_shift;
+       __u64 window_size;
+       __u32 levels;
+       /* out */
+       __u64 start_addr;
+};
+#define VFIO_IOMMU_SPAPR_TCE_CREATE    _IO(VFIO_TYPE, VFIO_BASE + 19)
+
+/**
+ * VFIO_IOMMU_SPAPR_TCE_REMOVE - _IOW(VFIO_TYPE, VFIO_BASE + 20, struct vfio_iommu_spapr_tce_remove)
+ *
+ * Unprograms a TCE table from all groups in the container and destroys it.
+ * It receives a PCI bus offset as a window id.
+ */
+struct vfio_iommu_spapr_tce_remove {
+       __u32 argsz;
+       __u32 flags;
+       /* in */
+       __u64 start_addr;
+};
+#define VFIO_IOMMU_SPAPR_TCE_REMOVE    _IO(VFIO_TYPE, VFIO_BASE + 20)
+
+/* ***************************************************************** */
+
+#endif /* VFIO_H */
diff --git a/lib/libdss-include/include/linux/vhost.h b/lib/libdss-include/include/linux/vhost.h
new file mode 100644 (file)
index 0000000..ead86db
--- /dev/null
@@ -0,0 +1,172 @@
+#ifndef _LINUX_VHOST_H
+#define _LINUX_VHOST_H
+/* Userspace interface for in-kernel virtio accelerators. */
+
+/* vhost is used to reduce the number of system calls involved in virtio.
+ *
+ * Existing virtio net code is used in the guest without modification.
+ *
+ * This header includes interface used by userspace hypervisor for
+ * device configuration.
+ */
+
+#include <linux/types.h>
+
+#include <linux/ioctl.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_ring.h>
+
+struct vhost_vring_state {
+       unsigned int index;
+       unsigned int num;
+};
+
+struct vhost_vring_file {
+       unsigned int index;
+       int fd; /* Pass -1 to unbind from file. */
+
+};
+
+struct vhost_vring_addr {
+       unsigned int index;
+       /* Option flags. */
+       unsigned int flags;
+       /* Flag values: */
+       /* Whether log address is valid. If set enables logging. */
+#define VHOST_VRING_F_LOG 0
+
+       /* Start of array of descriptors (virtually contiguous) */
+       __u64 desc_user_addr;
+       /* Used structure address. Must be 32 bit aligned */
+       __u64 used_user_addr;
+       /* Available structure address. Must be 16 bit aligned */
+       __u64 avail_user_addr;
+       /* Logging support. */
+       /* Log writes to used structure, at offset calculated from specified
+        * address. Address must be 32 bit aligned. */
+       __u64 log_guest_addr;
+};
+
+struct vhost_memory_region {
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+       __u64 userspace_addr;
+       __u64 flags_padding; /* No flags are currently specified. */
+};
+
+/* All region addresses and sizes must be 4K aligned. */
+#define VHOST_PAGE_SIZE 0x1000
+
+struct vhost_memory {
+       __u32 nregions;
+       __u32 padding;
+       struct vhost_memory_region regions[0];
+};
+
+/* ioctls */
+
+#define VHOST_VIRTIO 0xAF
+
+/* Features bitmask for forward compatibility.  Transport bits are used for
+ * vhost specific features. */
+#define VHOST_GET_FEATURES     _IOR(VHOST_VIRTIO, 0x00, __u64)
+#define VHOST_SET_FEATURES     _IOW(VHOST_VIRTIO, 0x00, __u64)
+
+/* Set current process as the (exclusive) owner of this file descriptor.  This
+ * must be called before any other vhost command.  Further calls to
+ * VHOST_OWNER_SET fail until VHOST_OWNER_RESET is called. */
+#define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01)
+/* Give up ownership, and reset the device to default values.
+ * Allows subsequent call to VHOST_OWNER_SET to succeed. */
+#define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02)
+
+/* Set up/modify memory layout */
+#define VHOST_SET_MEM_TABLE    _IOW(VHOST_VIRTIO, 0x03, struct vhost_memory)
+
+/* Write logging setup. */
+/* Memory writes can optionally be logged by setting bit at an offset
+ * (calculated from the physical address) from specified log base.
+ * The bit is set using an atomic 32 bit operation. */
+/* Set base address for logging. */
+#define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64)
+/* Specify an eventfd file descriptor to signal on log write. */
+#define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int)
+
+/* Ring setup. */
+/* Set number of descriptors in ring. This parameter can not
+ * be modified while ring is running (bound to a device). */
+#define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state)
+/* Set addresses for the ring. */
+#define VHOST_SET_VRING_ADDR _IOW(VHOST_VIRTIO, 0x11, struct vhost_vring_addr)
+/* Base value where queue looks for available descriptors */
+#define VHOST_SET_VRING_BASE _IOW(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
+/* Get accessor: reads index, writes value in num */
+#define VHOST_GET_VRING_BASE _IOWR(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
+
+/* Set the vring byte order in num. Valid values are VHOST_VRING_LITTLE_ENDIAN
+ * or VHOST_VRING_BIG_ENDIAN (other values return -EINVAL).
+ * The byte order cannot be changed while the device is active: trying to do so
+ * returns -EBUSY.
+ * This is a legacy only API that is simply ignored when VIRTIO_F_VERSION_1 is
+ * set.
+ * Not all kernel configurations support this ioctl, but all configurations that
+ * support SET also support GET.
+ */
+#define VHOST_VRING_LITTLE_ENDIAN 0
+#define VHOST_VRING_BIG_ENDIAN 1
+#define VHOST_SET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x13, struct vhost_vring_state)
+#define VHOST_GET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x14, struct vhost_vring_state)
+
+/* The following ioctls use eventfd file descriptors to signal and poll
+ * for events. */
+
+/* Set eventfd to poll for added buffers */
+#define VHOST_SET_VRING_KICK _IOW(VHOST_VIRTIO, 0x20, struct vhost_vring_file)
+/* Set eventfd to signal when buffers have beed used */
+#define VHOST_SET_VRING_CALL _IOW(VHOST_VIRTIO, 0x21, struct vhost_vring_file)
+/* Set eventfd to signal an error */
+#define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file)
+
+/* VHOST_NET specific defines */
+
+/* Attach virtio net ring to a raw socket, or tap device.
+ * The socket must be already bound to an ethernet device, this device will be
+ * used for transmit.  Pass fd -1 to unbind from the socket and the transmit
+ * device.  This can be used to stop the ring (e.g. for migration). */
+#define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file)
+
+/* Feature bits */
+/* Log all write descriptors. Can be changed while device is active. */
+#define VHOST_F_LOG_ALL 26
+/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */
+#define VHOST_NET_F_VIRTIO_NET_HDR 27
+
+/* VHOST_SCSI specific definitions */
+
+/*
+ * Used by QEMU userspace to ensure a consistent vhost-scsi ABI.
+ *
+ * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate +
+ *            RFC-v2 vhost-scsi userspace.  Add GET_ABI_VERSION ioctl usage
+ * ABI Rev 1: January 2013. Ignore vhost_tpgt filed in struct vhost_scsi_target.
+ *            All the targets under vhost_wwpn can be seen and used by guset.
+ */
+
+#define VHOST_SCSI_ABI_VERSION 1
+
+struct vhost_scsi_target {
+       int abi_version;
+       char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */
+       unsigned short vhost_tpgt;
+       unsigned short reserved;
+};
+
+#define VHOST_SCSI_SET_ENDPOINT _IOW(VHOST_VIRTIO, 0x40, struct vhost_scsi_target)
+#define VHOST_SCSI_CLEAR_ENDPOINT _IOW(VHOST_VIRTIO, 0x41, struct vhost_scsi_target)
+/* Changing this breaks userspace. */
+#define VHOST_SCSI_GET_ABI_VERSION _IOW(VHOST_VIRTIO, 0x42, int)
+/* Set and get the events missed flag */
+#define VHOST_SCSI_SET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x43, __u32)
+#define VHOST_SCSI_GET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x44, __u32)
+
+#endif
diff --git a/lib/libdss-include/include/linux/videodev2.h b/lib/libdss-include/include/linux/videodev2.h
new file mode 100644 (file)
index 0000000..efa5432
--- /dev/null
@@ -0,0 +1,2295 @@
+/*
+ *  Video for Linux Two header file
+ *
+ *  Copyright (C) 1999-2012 the contributors
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  Alternatively you can redistribute this file under the terms of the
+ *  BSD license as stated below:
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *  3. The names of its contributors may not be used to endorse or promote
+ *     products derived from this software without specific prior written
+ *     permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *     Header file for v4l or V4L2 drivers and applications
+ * with public API.
+ * All kernel-specific stuff were moved to media/v4l2-dev.h, so
+ * no #if __KERNEL tests are allowed here
+ *
+ *     See http://linuxtv.org for more info
+ *
+ *     Author: Bill Dirks <bill@thedirks.org>
+ *             Justin Schoeman
+ *              Hans Verkuil <hverkuil@xs4all.nl>
+ *             et al.
+ */
+#ifndef __LINUX_VIDEODEV2_H
+#define __LINUX_VIDEODEV2_H
+
+#include <sys/time.h>
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/v4l2-common.h>
+#include <linux/v4l2-controls.h>
+
+/*
+ * Common stuff for both V4L1 and V4L2
+ * Moved from videodev.h
+ */
+#define VIDEO_MAX_FRAME               32
+#define VIDEO_MAX_PLANES               8
+
+/*
+ *     M I S C E L L A N E O U S
+ */
+
+/*  Four-character-code (FOURCC) */
+#define v4l2_fourcc(a, b, c, d)\
+       ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
+#define v4l2_fourcc_be(a, b, c, d)     (v4l2_fourcc(a, b, c, d) | (1 << 31))
+
+/*
+ *     E N U M S
+ */
+enum v4l2_field {
+       V4L2_FIELD_ANY           = 0, /* driver can choose from none,
+                                        top, bottom, interlaced
+                                        depending on whatever it thinks
+                                        is approximate ... */
+       V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
+       V4L2_FIELD_TOP           = 2, /* top field only */
+       V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
+       V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
+       V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
+                                        buffer, top-bottom order */
+       V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
+       V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
+                                        separate buffers */
+       V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
+                                        first and the top field is
+                                        transmitted first */
+       V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
+                                        first and the bottom field is
+                                        transmitted first */
+};
+#define V4L2_FIELD_HAS_TOP(field)      \
+       ((field) == V4L2_FIELD_TOP      ||\
+        (field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB   ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_BOTTOM(field)   \
+       ((field) == V4L2_FIELD_BOTTOM   ||\
+        (field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB   ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_BOTH(field)     \
+       ((field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_T_OR_B(field)   \
+       ((field) == V4L2_FIELD_BOTTOM ||\
+        (field) == V4L2_FIELD_TOP ||\
+        (field) == V4L2_FIELD_ALTERNATE)
+
+enum v4l2_buf_type {
+       V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
+       V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
+       V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
+       V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
+       V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
+       V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
+       V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
+#if 1
+       /* Experimental */
+       V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
+#endif
+       V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
+       V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
+       V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
+       V4L2_BUF_TYPE_SDR_OUTPUT           = 12,
+       /* Deprecated, do not use */
+       V4L2_BUF_TYPE_PRIVATE              = 0x80,
+};
+
+#define V4L2_TYPE_IS_MULTIPLANAR(type)                 \
+       ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE   \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
+
+#define V4L2_TYPE_IS_OUTPUT(type)                              \
+       ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT                   \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE         \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY               \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY        \
+        || (type) == V4L2_BUF_TYPE_VBI_OUTPUT                  \
+        || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT           \
+        || (type) == V4L2_BUF_TYPE_SDR_OUTPUT)
+
+enum v4l2_tuner_type {
+       V4L2_TUNER_RADIO             = 1,
+       V4L2_TUNER_ANALOG_TV         = 2,
+       V4L2_TUNER_DIGITAL_TV        = 3,
+       V4L2_TUNER_SDR               = 4,
+       V4L2_TUNER_RF                = 5,
+};
+
+/* Deprecated, do not use */
+#define V4L2_TUNER_ADC  V4L2_TUNER_SDR
+
+enum v4l2_memory {
+       V4L2_MEMORY_MMAP             = 1,
+       V4L2_MEMORY_USERPTR          = 2,
+       V4L2_MEMORY_OVERLAY          = 3,
+       V4L2_MEMORY_DMABUF           = 4,
+};
+
+/* see also http://vektor.theorem.ca/graphics/ycbcr/ */
+enum v4l2_colorspace {
+       /*
+        * Default colorspace, i.e. let the driver figure it out.
+        * Can only be used with video capture.
+        */
+       V4L2_COLORSPACE_DEFAULT       = 0,
+
+       /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
+       V4L2_COLORSPACE_SMPTE170M     = 1,
+
+       /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
+       V4L2_COLORSPACE_SMPTE240M     = 2,
+
+       /* Rec.709: used for HDTV */
+       V4L2_COLORSPACE_REC709        = 3,
+
+       /*
+        * Deprecated, do not use. No driver will ever return this. This was
+        * based on a misunderstanding of the bt878 datasheet.
+        */
+       V4L2_COLORSPACE_BT878         = 4,
+
+       /*
+        * NTSC 1953 colorspace. This only makes sense when dealing with
+        * really, really old NTSC recordings. Superseded by SMPTE 170M.
+        */
+       V4L2_COLORSPACE_470_SYSTEM_M  = 5,
+
+       /*
+        * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
+        * dealing with really old PAL/SECAM recordings. Superseded by
+        * SMPTE 170M.
+        */
+       V4L2_COLORSPACE_470_SYSTEM_BG = 6,
+
+       /*
+        * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
+        * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
+        */
+       V4L2_COLORSPACE_JPEG          = 7,
+
+       /* For RGB colorspaces such as produces by most webcams. */
+       V4L2_COLORSPACE_SRGB          = 8,
+
+       /* AdobeRGB colorspace */
+       V4L2_COLORSPACE_ADOBERGB      = 9,
+
+       /* BT.2020 colorspace, used for UHDTV. */
+       V4L2_COLORSPACE_BT2020        = 10,
+
+       /* Raw colorspace: for RAW unprocessed images */
+       V4L2_COLORSPACE_RAW           = 11,
+
+       /* DCI-P3 colorspace, used by cinema projectors */
+       V4L2_COLORSPACE_DCI_P3        = 12,
+};
+
+/*
+ * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
+ * This depends on whether this is a SDTV image (use SMPTE 170M), an
+ * HDTV image (use Rec. 709), or something else (use sRGB).
+ */
+#define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
+       ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
+        ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
+
+enum v4l2_xfer_func {
+       /*
+        * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
+        * for the various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
+        * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
+        *
+        * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
+        *
+        * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
+        *
+        * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
+        *
+        * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
+        */
+       V4L2_XFER_FUNC_DEFAULT     = 0,
+       V4L2_XFER_FUNC_709         = 1,
+       V4L2_XFER_FUNC_SRGB        = 2,
+       V4L2_XFER_FUNC_ADOBERGB    = 3,
+       V4L2_XFER_FUNC_SMPTE240M   = 4,
+       V4L2_XFER_FUNC_NONE        = 5,
+       V4L2_XFER_FUNC_DCI_P3      = 6,
+       V4L2_XFER_FUNC_SMPTE2084   = 7,
+};
+
+/*
+ * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
+       ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
+        ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
+         ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
+          ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
+           ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
+            V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
+
+enum v4l2_ycbcr_encoding {
+       /*
+        * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
+        * various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and
+        * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
+        *
+        * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
+        *
+        * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC
+        *
+        * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
+        */
+       V4L2_YCBCR_ENC_DEFAULT        = 0,
+
+       /* ITU-R 601 -- SDTV */
+       V4L2_YCBCR_ENC_601            = 1,
+
+       /* Rec. 709 -- HDTV */
+       V4L2_YCBCR_ENC_709            = 2,
+
+       /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
+       V4L2_YCBCR_ENC_XV601          = 3,
+
+       /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
+       V4L2_YCBCR_ENC_XV709          = 4,
+
+       /* sYCC (Y'CbCr encoding of sRGB) */
+       V4L2_YCBCR_ENC_SYCC           = 5,
+
+       /* BT.2020 Non-constant Luminance Y'CbCr */
+       V4L2_YCBCR_ENC_BT2020         = 6,
+
+       /* BT.2020 Constant Luminance Y'CbcCrc */
+       V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
+
+       /* SMPTE 240M -- Obsolete HDTV */
+       V4L2_YCBCR_ENC_SMPTE240M      = 8,
+};
+
+/*
+ * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
+       (((colsp) == V4L2_COLORSPACE_REC709 || \
+         (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
+        ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
+         ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
+          V4L2_YCBCR_ENC_601)))
+
+enum v4l2_quantization {
+       /*
+        * The default for R'G'B' quantization is always full range, except
+        * for the BT2020 colorspace. For Y'CbCr the quantization is always
+        * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709:
+        * those are full range.
+        */
+       V4L2_QUANTIZATION_DEFAULT     = 0,
+       V4L2_QUANTIZATION_FULL_RANGE  = 1,
+       V4L2_QUANTIZATION_LIM_RANGE   = 2,
+};
+
+/*
+ * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
+ * This depends on whether the image is RGB or not, the colorspace and the
+ * Y'CbCr encoding.
+ */
+#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc) \
+       (((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : \
+        (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \
+         (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ? \
+        V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
+
+enum v4l2_priority {
+       V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
+       V4L2_PRIORITY_BACKGROUND  = 1,
+       V4L2_PRIORITY_INTERACTIVE = 2,
+       V4L2_PRIORITY_RECORD      = 3,
+       V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
+};
+
+struct v4l2_rect {
+       __s32   left;
+       __s32   top;
+       __u32   width;
+       __u32   height;
+};
+
+struct v4l2_fract {
+       __u32   numerator;
+       __u32   denominator;
+};
+
+/**
+  * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
+  *
+  * @driver:      name of the driver module (e.g. "bttv")
+  * @card:        name of the card (e.g. "Hauppauge WinTV")
+  * @bus_info:    name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
+  * @version:     KERNEL_VERSION
+  * @capabilities: capabilities of the physical device as a whole
+  * @device_caps:  capabilities accessed via this particular device (node)
+  * @reserved:    reserved fields for future extensions
+  */
+struct v4l2_capability {
+       __u8    driver[16];
+       __u8    card[32];
+       __u8    bus_info[32];
+       __u32   version;
+       __u32   capabilities;
+       __u32   device_caps;
+       __u32   reserved[3];
+};
+
+/* Values for 'capabilities' field */
+#define V4L2_CAP_VIDEO_CAPTURE         0x00000001  /* Is a video capture device */
+#define V4L2_CAP_VIDEO_OUTPUT          0x00000002  /* Is a video output device */
+#define V4L2_CAP_VIDEO_OVERLAY         0x00000004  /* Can do video overlay */
+#define V4L2_CAP_VBI_CAPTURE           0x00000010  /* Is a raw VBI capture device */
+#define V4L2_CAP_VBI_OUTPUT            0x00000020  /* Is a raw VBI output device */
+#define V4L2_CAP_SLICED_VBI_CAPTURE    0x00000040  /* Is a sliced VBI capture device */
+#define V4L2_CAP_SLICED_VBI_OUTPUT     0x00000080  /* Is a sliced VBI output device */
+#define V4L2_CAP_RDS_CAPTURE           0x00000100  /* RDS data capture */
+#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY  0x00000200  /* Can do video output overlay */
+#define V4L2_CAP_HW_FREQ_SEEK          0x00000400  /* Can do hardware frequency seek  */
+#define V4L2_CAP_RDS_OUTPUT            0x00000800  /* Is an RDS encoder */
+
+/* Is a video capture device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_CAPTURE_MPLANE  0x00001000
+/* Is a video output device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_OUTPUT_MPLANE   0x00002000
+/* Is a video mem-to-mem device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_M2M_MPLANE      0x00004000
+/* Is a video mem-to-mem device */
+#define V4L2_CAP_VIDEO_M2M             0x00008000
+
+#define V4L2_CAP_TUNER                 0x00010000  /* has a tuner */
+#define V4L2_CAP_AUDIO                 0x00020000  /* has audio support */
+#define V4L2_CAP_RADIO                 0x00040000  /* is a radio device */
+#define V4L2_CAP_MODULATOR             0x00080000  /* has a modulator */
+
+#define V4L2_CAP_SDR_CAPTURE           0x00100000  /* Is a SDR capture device */
+#define V4L2_CAP_EXT_PIX_FORMAT                0x00200000  /* Supports the extended pixel format */
+#define V4L2_CAP_SDR_OUTPUT            0x00400000  /* Is a SDR output device */
+
+#define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
+#define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
+#define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
+
+#define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
+
+/*
+ *     V I D E O   I M A G E   F O R M A T
+ */
+struct v4l2_pix_format {
+       __u32                   width;
+       __u32                   height;
+       __u32                   pixelformat;
+       __u32                   field;          /* enum v4l2_field */
+       __u32                   bytesperline;   /* for padding, zero if unused */
+       __u32                   sizeimage;
+       __u32                   colorspace;     /* enum v4l2_colorspace */
+       __u32                   priv;           /* private data, depends on pixelformat */
+       __u32                   flags;          /* format flags (V4L2_PIX_FMT_FLAG_*) */
+       __u32                   ycbcr_enc;      /* enum v4l2_ycbcr_encoding */
+       __u32                   quantization;   /* enum v4l2_quantization */
+       __u32                   xfer_func;      /* enum v4l2_xfer_func */
+};
+
+/*      Pixel format         FOURCC                          depth  Description  */
+
+/* RGB formats */
+#define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
+#define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
+#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
+#define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
+#define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
+#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
+#define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
+#define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
+#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
+#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
+#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
+#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
+#define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6    */
+#define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
+#define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
+#define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
+#define V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
+#define V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
+#define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
+#define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
+#define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
+
+/* Grey formats */
+#define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
+#define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
+#define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
+#define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
+#define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
+#define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
+#define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
+
+/* Grey bit-packed formats */
+#define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
+
+/* Palette formats */
+#define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
+
+/* Chrominance formats */
+#define V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
+
+/* Luminance+Chrominance formats */
+#define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
+#define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
+#define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
+#define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
+#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
+#define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
+#define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
+#define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
+#define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
+#define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
+#define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
+#define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
+#define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
+#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
+#define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
+
+/* two planes -- one Y, one Cr + Cb interleaved  */
+#define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
+#define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
+#define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
+#define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
+#define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
+#define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
+
+/* two non contiguous planes - one Y, one Cr + Cb interleaved  */
+#define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
+#define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
+#define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
+#define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
+#define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
+#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
+
+/* three non contiguous planes - Y, Cb, Cr */
+#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
+#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
+
+/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
+#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
+#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
+       /* 10bit raw bayer packed, 5 bytes for every 4 pixels */
+#define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
+#define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
+#define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
+#define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
+       /* 10bit raw bayer a-law compressed to 8 bits */
+#define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
+#define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
+#define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
+#define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
+       /* 10bit raw bayer DPCM compressed to 8 bits */
+#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
+#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
+#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
+#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
+#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
+#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
+
+/* compressed formats */
+#define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
+#define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
+#define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
+#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
+#define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
+#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
+#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
+#define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
+#define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
+#define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
+#define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
+#define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
+#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
+#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
+#define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
+
+/*  Vendor-specific formats   */
+#define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
+#define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
+#define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
+#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
+#define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
+#define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
+#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
+#define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
+#define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
+#define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
+#define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
+#define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
+#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
+#define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
+#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
+#define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
+#define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
+#define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
+#define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
+#define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
+#define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
+#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
+#define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
+#define V4L2_PIX_FMT_JPGL      v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
+#define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
+#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
+#define V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
+#define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
+#define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
+
+/* SDR formats - used only for Software Defined Radio devices */
+#define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
+#define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
+#define V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
+#define V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
+#define V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
+
+/* priv field value to indicates that subsequent fields are valid. */
+#define V4L2_PIX_FMT_PRIV_MAGIC                0xfeedcafe
+
+/* Flags */
+#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
+
+/*
+ *     F O R M A T   E N U M E R A T I O N
+ */
+struct v4l2_fmtdesc {
+       __u32               index;             /* Format number      */
+       __u32               type;              /* enum v4l2_buf_type */
+       __u32               flags;
+       __u8                description[32];   /* Description string */
+       __u32               pixelformat;       /* Format fourcc      */
+       __u32               reserved[4];
+};
+
+#define V4L2_FMT_FLAG_COMPRESSED 0x0001
+#define V4L2_FMT_FLAG_EMULATED   0x0002
+
+#if 1
+       /* Experimental Frame Size and frame rate enumeration */
+/*
+ *     F R A M E   S I Z E   E N U M E R A T I O N
+ */
+enum v4l2_frmsizetypes {
+       V4L2_FRMSIZE_TYPE_DISCRETE      = 1,
+       V4L2_FRMSIZE_TYPE_CONTINUOUS    = 2,
+       V4L2_FRMSIZE_TYPE_STEPWISE      = 3,
+};
+
+struct v4l2_frmsize_discrete {
+       __u32                   width;          /* Frame width [pixel] */
+       __u32                   height;         /* Frame height [pixel] */
+};
+
+struct v4l2_frmsize_stepwise {
+       __u32                   min_width;      /* Minimum frame width [pixel] */
+       __u32                   max_width;      /* Maximum frame width [pixel] */
+       __u32                   step_width;     /* Frame width step size [pixel] */
+       __u32                   min_height;     /* Minimum frame height [pixel] */
+       __u32                   max_height;     /* Maximum frame height [pixel] */
+       __u32                   step_height;    /* Frame height step size [pixel] */
+};
+
+struct v4l2_frmsizeenum {
+       __u32                   index;          /* Frame size number */
+       __u32                   pixel_format;   /* Pixel format */
+       __u32                   type;           /* Frame size type the device supports. */
+
+       union {                                 /* Frame size */
+               struct v4l2_frmsize_discrete    discrete;
+               struct v4l2_frmsize_stepwise    stepwise;
+       };
+
+       __u32   reserved[2];                    /* Reserved space for future use */
+};
+
+/*
+ *     F R A M E   R A T E   E N U M E R A T I O N
+ */
+enum v4l2_frmivaltypes {
+       V4L2_FRMIVAL_TYPE_DISCRETE      = 1,
+       V4L2_FRMIVAL_TYPE_CONTINUOUS    = 2,
+       V4L2_FRMIVAL_TYPE_STEPWISE      = 3,
+};
+
+struct v4l2_frmival_stepwise {
+       struct v4l2_fract       min;            /* Minimum frame interval [s] */
+       struct v4l2_fract       max;            /* Maximum frame interval [s] */
+       struct v4l2_fract       step;           /* Frame interval step size [s] */
+};
+
+struct v4l2_frmivalenum {
+       __u32                   index;          /* Frame format index */
+       __u32                   pixel_format;   /* Pixel format */
+       __u32                   width;          /* Frame width */
+       __u32                   height;         /* Frame height */
+       __u32                   type;           /* Frame interval type the device supports. */
+
+       union {                                 /* Frame interval */
+               struct v4l2_fract               discrete;
+               struct v4l2_frmival_stepwise    stepwise;
+       };
+
+       __u32   reserved[2];                    /* Reserved space for future use */
+};
+#endif
+
+/*
+ *     T I M E C O D E
+ */
+struct v4l2_timecode {
+       __u32   type;
+       __u32   flags;
+       __u8    frames;
+       __u8    seconds;
+       __u8    minutes;
+       __u8    hours;
+       __u8    userbits[4];
+};
+
+/*  Type  */
+#define V4L2_TC_TYPE_24FPS             1
+#define V4L2_TC_TYPE_25FPS             2
+#define V4L2_TC_TYPE_30FPS             3
+#define V4L2_TC_TYPE_50FPS             4
+#define V4L2_TC_TYPE_60FPS             5
+
+/*  Flags  */
+#define V4L2_TC_FLAG_DROPFRAME         0x0001 /* "drop-frame" mode */
+#define V4L2_TC_FLAG_COLORFRAME                0x0002
+#define V4L2_TC_USERBITS_field         0x000C
+#define V4L2_TC_USERBITS_USERDEFINED   0x0000
+#define V4L2_TC_USERBITS_8BITCHARS     0x0008
+/* The above is based on SMPTE timecodes */
+
+struct v4l2_jpegcompression {
+       int quality;
+
+       int  APPn;              /* Number of APP segment to be written,
+                                * must be 0..15 */
+       int  APP_len;           /* Length of data in JPEG APPn segment */
+       char APP_data[60];      /* Data in the JPEG APPn segment. */
+
+       int  COM_len;           /* Length of data in JPEG COM segment */
+       char COM_data[60];      /* Data in JPEG COM segment */
+
+       __u32 jpeg_markers;     /* Which markers should go into the JPEG
+                                * output. Unless you exactly know what
+                                * you do, leave them untouched.
+                                * Including less markers will make the
+                                * resulting code smaller, but there will
+                                * be fewer applications which can read it.
+                                * The presence of the APP and COM marker
+                                * is influenced by APP_len and COM_len
+                                * ONLY, not by this property! */
+
+#define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
+#define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
+#define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
+#define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
+#define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
+                                       * always use APP0 */
+};
+
+/*
+ *     M E M O R Y - M A P P I N G   B U F F E R S
+ */
+struct v4l2_requestbuffers {
+       __u32                   count;
+       __u32                   type;           /* enum v4l2_buf_type */
+       __u32                   memory;         /* enum v4l2_memory */
+       __u32                   reserved[2];
+};
+
+/**
+ * struct v4l2_plane - plane info for multi-planar buffers
+ * @bytesused:         number of bytes occupied by data in the plane (payload)
+ * @length:            size of this plane (NOT the payload) in bytes
+ * @mem_offset:                when memory in the associated struct v4l2_buffer is
+ *                     V4L2_MEMORY_MMAP, equals the offset from the start of
+ *                     the device memory for this plane (or is a "cookie" that
+ *                     should be passed to mmap() called on the video node)
+ * @userptr:           when memory is V4L2_MEMORY_USERPTR, a userspace pointer
+ *                     pointing to this plane
+ * @fd:                        when memory is V4L2_MEMORY_DMABUF, a userspace file
+ *                     descriptor associated with this plane
+ * @data_offset:       offset in the plane to the start of data; usually 0,
+ *                     unless there is a header in front of the data
+ *
+ * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
+ * with two planes can have one plane for Y, and another for interleaved CbCr
+ * components. Each plane can reside in a separate memory buffer, or even in
+ * a completely separate memory node (e.g. in embedded devices).
+ */
+struct v4l2_plane {
+       __u32                   bytesused;
+       __u32                   length;
+       union {
+               __u32           mem_offset;
+               unsigned long   userptr;
+               __s32           fd;
+       } m;
+       __u32                   data_offset;
+       __u32                   reserved[11];
+};
+
+/**
+ * struct v4l2_buffer - video buffer info
+ * @index:     id number of the buffer
+ * @type:      enum v4l2_buf_type; buffer type (type == *_MPLANE for
+ *             multiplanar buffers);
+ * @bytesused: number of bytes occupied by data in the buffer (payload);
+ *             unused (set to 0) for multiplanar buffers
+ * @flags:     buffer informational flags
+ * @field:     enum v4l2_field; field order of the image in the buffer
+ * @timestamp: frame timestamp
+ * @timecode:  frame timecode
+ * @sequence:  sequence count of this frame
+ * @memory:    enum v4l2_memory; the method, in which the actual video data is
+ *             passed
+ * @offset:    for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
+ *             offset from the start of the device memory for this plane,
+ *             (or a "cookie" that should be passed to mmap() as offset)
+ * @userptr:   for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
+ *             a userspace pointer pointing to this buffer
+ * @fd:                for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
+ *             a userspace file descriptor associated with this buffer
+ * @planes:    for multiplanar buffers; userspace pointer to the array of plane
+ *             info structs for this buffer
+ * @length:    size in bytes of the buffer (NOT its payload) for single-plane
+ *             buffers (when type != *_MPLANE); number of elements in the
+ *             planes array for multi-plane buffers
+ *
+ * Contains data exchanged by application and driver using one of the Streaming
+ * I/O methods.
+ */
+struct v4l2_buffer {
+       __u32                   index;
+       __u32                   type;
+       __u32                   bytesused;
+       __u32                   flags;
+       __u32                   field;
+       struct timeval          timestamp;
+       struct v4l2_timecode    timecode;
+       __u32                   sequence;
+
+       /* memory location */
+       __u32                   memory;
+       union {
+               __u32           offset;
+               unsigned long   userptr;
+               struct v4l2_plane *planes;
+               __s32           fd;
+       } m;
+       __u32                   length;
+       __u32                   reserved2;
+       __u32                   reserved;
+};
+
+/*  Flags for 'flags' field */
+/* Buffer is mapped (flag) */
+#define V4L2_BUF_FLAG_MAPPED                   0x00000001
+/* Buffer is queued for processing */
+#define V4L2_BUF_FLAG_QUEUED                   0x00000002
+/* Buffer is ready */
+#define V4L2_BUF_FLAG_DONE                     0x00000004
+/* Image is a keyframe (I-frame) */
+#define V4L2_BUF_FLAG_KEYFRAME                 0x00000008
+/* Image is a P-frame */
+#define V4L2_BUF_FLAG_PFRAME                   0x00000010
+/* Image is a B-frame */
+#define V4L2_BUF_FLAG_BFRAME                   0x00000020
+/* Buffer is ready, but the data contained within is corrupted. */
+#define V4L2_BUF_FLAG_ERROR                    0x00000040
+/* timecode field is valid */
+#define V4L2_BUF_FLAG_TIMECODE                 0x00000100
+/* Buffer is prepared for queuing */
+#define V4L2_BUF_FLAG_PREPARED                 0x00000400
+/* Cache handling flags */
+#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE      0x00000800
+#define V4L2_BUF_FLAG_NO_CACHE_CLEAN           0x00001000
+/* Timestamp type */
+#define V4L2_BUF_FLAG_TIMESTAMP_MASK           0x0000e000
+#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN                0x00000000
+#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC      0x00002000
+#define V4L2_BUF_FLAG_TIMESTAMP_COPY           0x00004000
+/* Timestamp sources. */
+#define V4L2_BUF_FLAG_TSTAMP_SRC_MASK          0x00070000
+#define V4L2_BUF_FLAG_TSTAMP_SRC_EOF           0x00000000
+#define V4L2_BUF_FLAG_TSTAMP_SRC_SOE           0x00010000
+/* mem2mem encoder/decoder */
+#define V4L2_BUF_FLAG_LAST                     0x00100000
+
+/**
+ * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
+ *
+ * @index:     id number of the buffer
+ * @type:      enum v4l2_buf_type; buffer type (type == *_MPLANE for
+ *             multiplanar buffers);
+ * @plane:     index of the plane to be exported, 0 for single plane queues
+ * @flags:     flags for newly created file, currently only O_CLOEXEC is
+ *             supported, refer to manual of open syscall for more details
+ * @fd:                file descriptor associated with DMABUF (set by driver)
+ *
+ * Contains data used for exporting a video buffer as DMABUF file descriptor.
+ * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
+ * (identical to the cookie used to mmap() the buffer to userspace). All
+ * reserved fields must be set to zero. The field reserved0 is expected to
+ * become a structure 'type' allowing an alternative layout of the structure
+ * content. Therefore this field should not be used for any other extensions.
+ */
+struct v4l2_exportbuffer {
+       __u32           type; /* enum v4l2_buf_type */
+       __u32           index;
+       __u32           plane;
+       __u32           flags;
+       __s32           fd;
+       __u32           reserved[11];
+};
+
+/*
+ *     O V E R L A Y   P R E V I E W
+ */
+struct v4l2_framebuffer {
+       __u32                   capability;
+       __u32                   flags;
+/* FIXME: in theory we should pass something like PCI device + memory
+ * region + offset instead of some physical address */
+       void                    *base;
+       struct {
+               __u32           width;
+               __u32           height;
+               __u32           pixelformat;
+               __u32           field;          /* enum v4l2_field */
+               __u32           bytesperline;   /* for padding, zero if unused */
+               __u32           sizeimage;
+               __u32           colorspace;     /* enum v4l2_colorspace */
+               __u32           priv;           /* reserved field, set to 0 */
+       } fmt;
+};
+/*  Flags for the 'capability' field. Read only */
+#define V4L2_FBUF_CAP_EXTERNOVERLAY    0x0001
+#define V4L2_FBUF_CAP_CHROMAKEY                0x0002
+#define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
+#define V4L2_FBUF_CAP_BITMAP_CLIPPING  0x0008
+#define V4L2_FBUF_CAP_LOCAL_ALPHA      0x0010
+#define V4L2_FBUF_CAP_GLOBAL_ALPHA     0x0020
+#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA  0x0040
+#define V4L2_FBUF_CAP_SRC_CHROMAKEY    0x0080
+/*  Flags for the 'flags' field. */
+#define V4L2_FBUF_FLAG_PRIMARY         0x0001
+#define V4L2_FBUF_FLAG_OVERLAY         0x0002
+#define V4L2_FBUF_FLAG_CHROMAKEY       0x0004
+#define V4L2_FBUF_FLAG_LOCAL_ALPHA     0x0008
+#define V4L2_FBUF_FLAG_GLOBAL_ALPHA    0x0010
+#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
+#define V4L2_FBUF_FLAG_SRC_CHROMAKEY   0x0040
+
+struct v4l2_clip {
+       struct v4l2_rect        c;
+       struct v4l2_clip        *next;
+};
+
+struct v4l2_window {
+       struct v4l2_rect        w;
+       __u32                   field;   /* enum v4l2_field */
+       __u32                   chromakey;
+       struct v4l2_clip        *clips;
+       __u32                   clipcount;
+       void                    *bitmap;
+       __u8                    global_alpha;
+};
+
+/*
+ *     C A P T U R E   P A R A M E T E R S
+ */
+struct v4l2_captureparm {
+       __u32              capability;    /*  Supported modes */
+       __u32              capturemode;   /*  Current mode */
+       struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
+       __u32              extendedmode;  /*  Driver-specific extensions */
+       __u32              readbuffers;   /*  # of buffers for read */
+       __u32              reserved[4];
+};
+
+/*  Flags for 'capability' and 'capturemode' fields */
+#define V4L2_MODE_HIGHQUALITY  0x0001  /*  High quality imaging mode */
+#define V4L2_CAP_TIMEPERFRAME  0x1000  /*  timeperframe field is supported */
+
+struct v4l2_outputparm {
+       __u32              capability;   /*  Supported modes */
+       __u32              outputmode;   /*  Current mode */
+       struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
+       __u32              extendedmode; /*  Driver-specific extensions */
+       __u32              writebuffers; /*  # of buffers for write */
+       __u32              reserved[4];
+};
+
+/*
+ *     I N P U T   I M A G E   C R O P P I N G
+ */
+struct v4l2_cropcap {
+       __u32                   type;   /* enum v4l2_buf_type */
+       struct v4l2_rect        bounds;
+       struct v4l2_rect        defrect;
+       struct v4l2_fract       pixelaspect;
+};
+
+struct v4l2_crop {
+       __u32                   type;   /* enum v4l2_buf_type */
+       struct v4l2_rect        c;
+};
+
+/**
+ * struct v4l2_selection - selection info
+ * @type:      buffer type (do not use *_MPLANE types)
+ * @target:    Selection target, used to choose one of possible rectangles;
+ *             defined in v4l2-common.h; V4L2_SEL_TGT_* .
+ * @flags:     constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
+ * @r:         coordinates of selection window
+ * @reserved:  for future use, rounds structure size to 64 bytes, set to zero
+ *
+ * Hardware may use multiple helper windows to process a video stream.
+ * The structure is used to exchange this selection areas between
+ * an application and a driver.
+ */
+struct v4l2_selection {
+       __u32                   type;
+       __u32                   target;
+       __u32                   flags;
+       struct v4l2_rect        r;
+       __u32                   reserved[9];
+};
+
+
+/*
+ *      A N A L O G   V I D E O   S T A N D A R D
+ */
+
+typedef __u64 v4l2_std_id;
+
+/* one bit for each */
+#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
+#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
+#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
+#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
+#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
+#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
+#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
+#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
+
+#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
+#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
+#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
+#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
+
+#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)      /* BTSC */
+#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)      /* EIA-J */
+#define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
+#define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)      /* FM A2 */
+
+#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
+#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
+#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
+#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
+#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
+#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
+#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
+#define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
+
+/* ATSC/HDTV */
+#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
+#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
+
+/* FIXME:
+   Although std_id is 64 bits, there is an issue on PPC32 architecture that
+   makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
+   this value to 32 bits.
+   As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
+   it should work fine. However, if needed to add more than two standards,
+   v4l2-common.c should be fixed.
+ */
+
+/*
+ * Some macros to merge video standards in order to make live easier for the
+ * drivers and V4L2 applications
+ */
+
+/*
+ * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
+ * Missing here.
+ */
+#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M       |\
+                                V4L2_STD_NTSC_M_JP     |\
+                                V4L2_STD_NTSC_M_KR)
+/* Secam macros */
+#define V4L2_STD_SECAM_DK              (V4L2_STD_SECAM_D       |\
+                                V4L2_STD_SECAM_K       |\
+                                V4L2_STD_SECAM_K1)
+/* All Secam Standards */
+#define V4L2_STD_SECAM         (V4L2_STD_SECAM_B       |\
+                                V4L2_STD_SECAM_G       |\
+                                V4L2_STD_SECAM_H       |\
+                                V4L2_STD_SECAM_DK      |\
+                                V4L2_STD_SECAM_L       |\
+                                V4L2_STD_SECAM_LC)
+/* PAL macros */
+#define V4L2_STD_PAL_BG                (V4L2_STD_PAL_B         |\
+                                V4L2_STD_PAL_B1        |\
+                                V4L2_STD_PAL_G)
+#define V4L2_STD_PAL_DK                (V4L2_STD_PAL_D         |\
+                                V4L2_STD_PAL_D1        |\
+                                V4L2_STD_PAL_K)
+/*
+ * "Common" PAL - This macro is there to be compatible with the old
+ * V4L1 concept of "PAL": /BGDKHI.
+ * Several PAL standards are missing here: /M, /N and /Nc
+ */
+#define V4L2_STD_PAL           (V4L2_STD_PAL_BG        |\
+                                V4L2_STD_PAL_DK        |\
+                                V4L2_STD_PAL_H         |\
+                                V4L2_STD_PAL_I)
+/* Chroma "agnostic" standards */
+#define V4L2_STD_B             (V4L2_STD_PAL_B         |\
+                                V4L2_STD_PAL_B1        |\
+                                V4L2_STD_SECAM_B)
+#define V4L2_STD_G             (V4L2_STD_PAL_G         |\
+                                V4L2_STD_SECAM_G)
+#define V4L2_STD_H             (V4L2_STD_PAL_H         |\
+                                V4L2_STD_SECAM_H)
+#define V4L2_STD_L             (V4L2_STD_SECAM_L       |\
+                                V4L2_STD_SECAM_LC)
+#define V4L2_STD_GH            (V4L2_STD_G             |\
+                                V4L2_STD_H)
+#define V4L2_STD_DK            (V4L2_STD_PAL_DK        |\
+                                V4L2_STD_SECAM_DK)
+#define V4L2_STD_BG            (V4L2_STD_B             |\
+                                V4L2_STD_G)
+#define V4L2_STD_MN            (V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc        |\
+                                V4L2_STD_NTSC)
+
+/* Standards where MTS/BTSC stereo could be found */
+#define V4L2_STD_MTS           (V4L2_STD_NTSC_M        |\
+                                V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc)
+
+/* Standards for Countries with 60Hz Line frequency */
+#define V4L2_STD_525_60                (V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_60        |\
+                                V4L2_STD_NTSC          |\
+                                V4L2_STD_NTSC_443)
+/* Standards for Countries with 50Hz Line frequency */
+#define V4L2_STD_625_50                (V4L2_STD_PAL           |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc        |\
+                                V4L2_STD_SECAM)
+
+#define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
+                                V4L2_STD_ATSC_16_VSB)
+/* Macros with none and all analog standards */
+#define V4L2_STD_UNKNOWN        0
+#define V4L2_STD_ALL            (V4L2_STD_525_60       |\
+                                V4L2_STD_625_50)
+
+struct v4l2_standard {
+       __u32                index;
+       v4l2_std_id          id;
+       __u8                 name[24];
+       struct v4l2_fract    frameperiod; /* Frames, not fields */
+       __u32                framelines;
+       __u32                reserved[4];
+};
+
+/*
+ *     D V     B T     T I M I N G S
+ */
+
+/** struct v4l2_bt_timings - BT.656/BT.1120 timing data
+ * @width:     total width of the active video in pixels
+ * @height:    total height of the active video in lines
+ * @interlaced:        Interlaced or progressive
+ * @polarities:        Positive or negative polarities
+ * @pixelclock:        Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @hfrontporch:Horizontal front porch in pixels
+ * @hsync:     Horizontal Sync length in pixels
+ * @hbackporch:        Horizontal back porch in pixels
+ * @vfrontporch:Vertical front porch in lines
+ * @vsync:     Vertical Sync length in lines
+ * @vbackporch:        Vertical back porch in lines
+ * @il_vfrontporch:Vertical front porch for the even field
+ *             (aka field 2) of interlaced field formats
+ * @il_vsync:  Vertical Sync length for the even field
+ *             (aka field 2) of interlaced field formats
+ * @il_vbackporch:Vertical back porch for the even field
+ *             (aka field 2) of interlaced field formats
+ * @standards: Standards the timing belongs to
+ * @flags:     Flags
+ * @reserved:  Reserved fields, must be zeroed.
+ *
+ * A note regarding vertical interlaced timings: height refers to the total
+ * height of the active video frame (= two fields). The blanking timings refer
+ * to the blanking of each field. So the height of the total frame is
+ * calculated as follows:
+ *
+ * tot_height = height + vfrontporch + vsync + vbackporch +
+ *                       il_vfrontporch + il_vsync + il_vbackporch
+ *
+ * The active height of each field is height / 2.
+ */
+struct v4l2_bt_timings {
+       __u32   width;
+       __u32   height;
+       __u32   interlaced;
+       __u32   polarities;
+       __u64   pixelclock;
+       __u32   hfrontporch;
+       __u32   hsync;
+       __u32   hbackporch;
+       __u32   vfrontporch;
+       __u32   vsync;
+       __u32   vbackporch;
+       __u32   il_vfrontporch;
+       __u32   il_vsync;
+       __u32   il_vbackporch;
+       __u32   standards;
+       __u32   flags;
+       __u32   reserved[14];
+} __attribute__ ((packed));
+
+/* Interlaced or progressive format */
+#define        V4L2_DV_PROGRESSIVE     0
+#define        V4L2_DV_INTERLACED      1
+
+/* Polarities. If bit is not set, it is assumed to be negative polarity */
+#define V4L2_DV_VSYNC_POS_POL  0x00000001
+#define V4L2_DV_HSYNC_POS_POL  0x00000002
+
+/* Timings standards */
+#define V4L2_DV_BT_STD_CEA861  (1 << 0)  /* CEA-861 Digital TV Profile */
+#define V4L2_DV_BT_STD_DMT     (1 << 1)  /* VESA Discrete Monitor Timings */
+#define V4L2_DV_BT_STD_CVT     (1 << 2)  /* VESA Coordinated Video Timings */
+#define V4L2_DV_BT_STD_GTF     (1 << 3)  /* VESA Generalized Timings Formula */
+
+/* Flags */
+
+/* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
+   GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
+   intervals are reduced, allowing a higher resolution over the same
+   bandwidth. This is a read-only flag. */
+#define V4L2_DV_FL_REDUCED_BLANKING            (1 << 0)
+/* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
+   of six. These formats can be optionally played at 1 / 1.001 speed.
+   This is a read-only flag. */
+#define V4L2_DV_FL_CAN_REDUCE_FPS              (1 << 1)
+/* CEA-861 specific: only valid for video transmitters, the flag is cleared
+   by receivers.
+   If the framerate of the format is a multiple of six, then the pixelclock
+   used to set up the transmitter is divided by 1.001 to make it compatible
+   with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
+   29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
+   such frequencies, then the flag will also be cleared. */
+#define V4L2_DV_FL_REDUCED_FPS                 (1 << 2)
+/* Specific to interlaced formats: if set, then field 1 is really one half-line
+   longer and field 2 is really one half-line shorter, so each field has
+   exactly the same number of half-lines. Whether half-lines can be detected
+   or used depends on the hardware. */
+#define V4L2_DV_FL_HALF_LINE                   (1 << 3)
+/* If set, then this is a Consumer Electronics (CE) video format. Such formats
+ * differ from other formats (commonly called IT formats) in that if RGB
+ * encoding is used then by default the RGB values use limited range (i.e.
+ * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
+ * except for the 640x480 format are CE formats. */
+#define V4L2_DV_FL_IS_CE_VIDEO                 (1 << 4)
+
+/* A few useful defines to calculate the total blanking and frame sizes */
+#define V4L2_DV_BT_BLANKING_WIDTH(bt) \
+       ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
+#define V4L2_DV_BT_FRAME_WIDTH(bt) \
+       ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
+#define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
+       ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
+        (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
+#define V4L2_DV_BT_FRAME_HEIGHT(bt) \
+       ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
+
+/** struct v4l2_dv_timings - DV timings
+ * @type:      the type of the timings
+ * @bt:        BT656/1120 timings
+ */
+struct v4l2_dv_timings {
+       __u32 type;
+       union {
+               struct v4l2_bt_timings  bt;
+               __u32   reserved[32];
+       };
+} __attribute__ ((packed));
+
+/* Values for the type field */
+#define V4L2_DV_BT_656_1120    0       /* BT.656/1120 timing type */
+
+
+/** struct v4l2_enum_dv_timings - DV timings enumeration
+ * @index:     enumeration index
+ * @pad:       the pad number for which to enumerate timings (used with
+ *             v4l-subdev nodes only)
+ * @reserved:  must be zeroed
+ * @timings:   the timings for the given index
+ */
+struct v4l2_enum_dv_timings {
+       __u32 index;
+       __u32 pad;
+       __u32 reserved[2];
+       struct v4l2_dv_timings timings;
+};
+
+/** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
+ * @min_width:         width in pixels
+ * @max_width:         width in pixels
+ * @min_height:                height in lines
+ * @max_height:                height in lines
+ * @min_pixelclock:    Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @max_pixelclock:    Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @standards:         Supported standards
+ * @capabilities:      Supported capabilities
+ * @reserved:          Must be zeroed
+ */
+struct v4l2_bt_timings_cap {
+       __u32   min_width;
+       __u32   max_width;
+       __u32   min_height;
+       __u32   max_height;
+       __u64   min_pixelclock;
+       __u64   max_pixelclock;
+       __u32   standards;
+       __u32   capabilities;
+       __u32   reserved[16];
+} __attribute__ ((packed));
+
+/* Supports interlaced formats */
+#define V4L2_DV_BT_CAP_INTERLACED      (1 << 0)
+/* Supports progressive formats */
+#define V4L2_DV_BT_CAP_PROGRESSIVE     (1 << 1)
+/* Supports CVT/GTF reduced blanking */
+#define V4L2_DV_BT_CAP_REDUCED_BLANKING        (1 << 2)
+/* Supports custom formats */
+#define V4L2_DV_BT_CAP_CUSTOM          (1 << 3)
+
+/** struct v4l2_dv_timings_cap - DV timings capabilities
+ * @type:      the type of the timings (same as in struct v4l2_dv_timings)
+ * @pad:       the pad number for which to query capabilities (used with
+ *             v4l-subdev nodes only)
+ * @bt:                the BT656/1120 timings capabilities
+ */
+struct v4l2_dv_timings_cap {
+       __u32 type;
+       __u32 pad;
+       __u32 reserved[2];
+       union {
+               struct v4l2_bt_timings_cap bt;
+               __u32 raw_data[32];
+       };
+};
+
+
+/*
+ *     V I D E O   I N P U T S
+ */
+struct v4l2_input {
+       __u32        index;             /*  Which input */
+       __u8         name[32];          /*  Label */
+       __u32        type;              /*  Type of input */
+       __u32        audioset;          /*  Associated audios (bitfield) */
+       __u32        tuner;             /*  enum v4l2_tuner_type */
+       v4l2_std_id  std;
+       __u32        status;
+       __u32        capabilities;
+       __u32        reserved[3];
+};
+
+/*  Values for the 'type' field */
+#define V4L2_INPUT_TYPE_TUNER          1
+#define V4L2_INPUT_TYPE_CAMERA         2
+
+/* field 'status' - general */
+#define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
+#define V4L2_IN_ST_NO_SIGNAL   0x00000002
+#define V4L2_IN_ST_NO_COLOR    0x00000004
+
+/* field 'status' - sensor orientation */
+/* If sensor is mounted upside down set both bits */
+#define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
+#define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
+
+/* field 'status' - analog */
+#define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
+#define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
+
+/* field 'status' - digital */
+#define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
+#define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
+#define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
+
+/* field 'status' - VCR and set-top box */
+#define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
+#define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
+#define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
+
+/* capabilities flags */
+#define V4L2_IN_CAP_DV_TIMINGS         0x00000002 /* Supports S_DV_TIMINGS */
+#define V4L2_IN_CAP_CUSTOM_TIMINGS     V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
+#define V4L2_IN_CAP_STD                        0x00000004 /* Supports S_STD */
+#define V4L2_IN_CAP_NATIVE_SIZE                0x00000008 /* Supports setting native size */
+
+/*
+ *     V I D E O   O U T P U T S
+ */
+struct v4l2_output {
+       __u32        index;             /*  Which output */
+       __u8         name[32];          /*  Label */
+       __u32        type;              /*  Type of output */
+       __u32        audioset;          /*  Associated audios (bitfield) */
+       __u32        modulator;         /*  Associated modulator */
+       v4l2_std_id  std;
+       __u32        capabilities;
+       __u32        reserved[3];
+};
+/*  Values for the 'type' field */
+#define V4L2_OUTPUT_TYPE_MODULATOR             1
+#define V4L2_OUTPUT_TYPE_ANALOG                        2
+#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY      3
+
+/* capabilities flags */
+#define V4L2_OUT_CAP_DV_TIMINGS                0x00000002 /* Supports S_DV_TIMINGS */
+#define V4L2_OUT_CAP_CUSTOM_TIMINGS    V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
+#define V4L2_OUT_CAP_STD               0x00000004 /* Supports S_STD */
+#define V4L2_OUT_CAP_NATIVE_SIZE       0x00000008 /* Supports setting native size */
+
+/*
+ *     C O N T R O L S
+ */
+struct v4l2_control {
+       __u32                id;
+       __s32                value;
+};
+
+struct v4l2_ext_control {
+       __u32 id;
+       __u32 size;
+       __u32 reserved2[1];
+       union {
+               __s32 value;
+               __s64 value64;
+               char *string;
+               __u8 *p_u8;
+               __u16 *p_u16;
+               __u32 *p_u32;
+               void *ptr;
+       };
+} __attribute__ ((packed));
+
+struct v4l2_ext_controls {
+       __u32 ctrl_class;
+       __u32 count;
+       __u32 error_idx;
+       __u32 reserved[2];
+       struct v4l2_ext_control *controls;
+};
+
+#define V4L2_CTRL_ID_MASK                (0x0fffffff)
+#define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
+#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
+#define V4L2_CTRL_MAX_DIMS       (4)
+
+enum v4l2_ctrl_type {
+       V4L2_CTRL_TYPE_INTEGER       = 1,
+       V4L2_CTRL_TYPE_BOOLEAN       = 2,
+       V4L2_CTRL_TYPE_MENU          = 3,
+       V4L2_CTRL_TYPE_BUTTON        = 4,
+       V4L2_CTRL_TYPE_INTEGER64     = 5,
+       V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
+       V4L2_CTRL_TYPE_STRING        = 7,
+       V4L2_CTRL_TYPE_BITMASK       = 8,
+       V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
+
+       /* Compound types are >= 0x0100 */
+       V4L2_CTRL_COMPOUND_TYPES     = 0x0100,
+       V4L2_CTRL_TYPE_U8            = 0x0100,
+       V4L2_CTRL_TYPE_U16           = 0x0101,
+       V4L2_CTRL_TYPE_U32           = 0x0102,
+};
+
+/*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
+struct v4l2_queryctrl {
+       __u32                id;
+       __u32                type;      /* enum v4l2_ctrl_type */
+       __u8                 name[32];  /* Whatever */
+       __s32                minimum;   /* Note signedness */
+       __s32                maximum;
+       __s32                step;
+       __s32                default_value;
+       __u32                flags;
+       __u32                reserved[2];
+};
+
+/*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
+struct v4l2_query_ext_ctrl {
+       __u32                id;
+       __u32                type;
+       char                 name[32];
+       __s64                minimum;
+       __s64                maximum;
+       __u64                step;
+       __s64                default_value;
+       __u32                flags;
+       __u32                elem_size;
+       __u32                elems;
+       __u32                nr_of_dims;
+       __u32                dims[V4L2_CTRL_MAX_DIMS];
+       __u32                reserved[32];
+};
+
+/*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
+struct v4l2_querymenu {
+       __u32           id;
+       __u32           index;
+       union {
+               __u8    name[32];       /* Whatever */
+               __s64   value;
+       };
+       __u32           reserved;
+} __attribute__ ((packed));
+
+/*  Control flags  */
+#define V4L2_CTRL_FLAG_DISABLED                0x0001
+#define V4L2_CTRL_FLAG_GRABBED         0x0002
+#define V4L2_CTRL_FLAG_READ_ONLY       0x0004
+#define V4L2_CTRL_FLAG_UPDATE          0x0008
+#define V4L2_CTRL_FLAG_INACTIVE        0x0010
+#define V4L2_CTRL_FLAG_SLIDER          0x0020
+#define V4L2_CTRL_FLAG_WRITE_ONLY      0x0040
+#define V4L2_CTRL_FLAG_VOLATILE                0x0080
+#define V4L2_CTRL_FLAG_HAS_PAYLOAD     0x0100
+#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE        0x0200
+
+/*  Query flags, to be ORed with the control ID */
+#define V4L2_CTRL_FLAG_NEXT_CTRL       0x80000000
+#define V4L2_CTRL_FLAG_NEXT_COMPOUND   0x40000000
+
+/*  User-class control IDs defined by V4L2 */
+#define V4L2_CID_MAX_CTRLS             1024
+/*  IDs reserved for driver specific controls */
+#define V4L2_CID_PRIVATE_BASE          0x08000000
+
+
+/*
+ *     T U N I N G
+ */
+struct v4l2_tuner {
+       __u32                   index;
+       __u8                    name[32];
+       __u32                   type;   /* enum v4l2_tuner_type */
+       __u32                   capability;
+       __u32                   rangelow;
+       __u32                   rangehigh;
+       __u32                   rxsubchans;
+       __u32                   audmode;
+       __s32                   signal;
+       __s32                   afc;
+       __u32                   reserved[4];
+};
+
+struct v4l2_modulator {
+       __u32                   index;
+       __u8                    name[32];
+       __u32                   capability;
+       __u32                   rangelow;
+       __u32                   rangehigh;
+       __u32                   txsubchans;
+       __u32                   type;   /* enum v4l2_tuner_type */
+       __u32                   reserved[3];
+};
+
+/*  Flags for the 'capability' field */
+#define V4L2_TUNER_CAP_LOW             0x0001
+#define V4L2_TUNER_CAP_NORM            0x0002
+#define V4L2_TUNER_CAP_HWSEEK_BOUNDED  0x0004
+#define V4L2_TUNER_CAP_HWSEEK_WRAP     0x0008
+#define V4L2_TUNER_CAP_STEREO          0x0010
+#define V4L2_TUNER_CAP_LANG2           0x0020
+#define V4L2_TUNER_CAP_SAP             0x0020
+#define V4L2_TUNER_CAP_LANG1           0x0040
+#define V4L2_TUNER_CAP_RDS             0x0080
+#define V4L2_TUNER_CAP_RDS_BLOCK_IO    0x0100
+#define V4L2_TUNER_CAP_RDS_CONTROLS    0x0200
+#define V4L2_TUNER_CAP_FREQ_BANDS      0x0400
+#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
+#define V4L2_TUNER_CAP_1HZ             0x1000
+
+/*  Flags for the 'rxsubchans' field */
+#define V4L2_TUNER_SUB_MONO            0x0001
+#define V4L2_TUNER_SUB_STEREO          0x0002
+#define V4L2_TUNER_SUB_LANG2           0x0004
+#define V4L2_TUNER_SUB_SAP             0x0004
+#define V4L2_TUNER_SUB_LANG1           0x0008
+#define V4L2_TUNER_SUB_RDS             0x0010
+
+/*  Values for the 'audmode' field */
+#define V4L2_TUNER_MODE_MONO           0x0000
+#define V4L2_TUNER_MODE_STEREO         0x0001
+#define V4L2_TUNER_MODE_LANG2          0x0002
+#define V4L2_TUNER_MODE_SAP            0x0002
+#define V4L2_TUNER_MODE_LANG1          0x0003
+#define V4L2_TUNER_MODE_LANG1_LANG2    0x0004
+
+struct v4l2_frequency {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   frequency;
+       __u32   reserved[8];
+};
+
+#define V4L2_BAND_MODULATION_VSB       (1 << 1)
+#define V4L2_BAND_MODULATION_FM                (1 << 2)
+#define V4L2_BAND_MODULATION_AM                (1 << 3)
+
+struct v4l2_frequency_band {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   index;
+       __u32   capability;
+       __u32   rangelow;
+       __u32   rangehigh;
+       __u32   modulation;
+       __u32   reserved[9];
+};
+
+struct v4l2_hw_freq_seek {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   seek_upward;
+       __u32   wrap_around;
+       __u32   spacing;
+       __u32   rangelow;
+       __u32   rangehigh;
+       __u32   reserved[5];
+};
+
+/*
+ *     R D S
+ */
+
+struct v4l2_rds_data {
+       __u8    lsb;
+       __u8    msb;
+       __u8    block;
+} __attribute__ ((packed));
+
+#define V4L2_RDS_BLOCK_MSK      0x7
+#define V4L2_RDS_BLOCK_A        0
+#define V4L2_RDS_BLOCK_B        1
+#define V4L2_RDS_BLOCK_C        2
+#define V4L2_RDS_BLOCK_D        3
+#define V4L2_RDS_BLOCK_C_ALT    4
+#define V4L2_RDS_BLOCK_INVALID          7
+
+#define V4L2_RDS_BLOCK_CORRECTED 0x40
+#define V4L2_RDS_BLOCK_ERROR    0x80
+
+/*
+ *     A U D I O
+ */
+struct v4l2_audio {
+       __u32   index;
+       __u8    name[32];
+       __u32   capability;
+       __u32   mode;
+       __u32   reserved[2];
+};
+
+/*  Flags for the 'capability' field */
+#define V4L2_AUDCAP_STEREO             0x00001
+#define V4L2_AUDCAP_AVL                        0x00002
+
+/*  Flags for the 'mode' field */
+#define V4L2_AUDMODE_AVL               0x00001
+
+struct v4l2_audioout {
+       __u32   index;
+       __u8    name[32];
+       __u32   capability;
+       __u32   mode;
+       __u32   reserved[2];
+};
+
+/*
+ *     M P E G   S E R V I C E S
+ *
+ *     NOTE: EXPERIMENTAL API
+ */
+#if 1
+#define V4L2_ENC_IDX_FRAME_I    (0)
+#define V4L2_ENC_IDX_FRAME_P    (1)
+#define V4L2_ENC_IDX_FRAME_B    (2)
+#define V4L2_ENC_IDX_FRAME_MASK (0xf)
+
+struct v4l2_enc_idx_entry {
+       __u64 offset;
+       __u64 pts;
+       __u32 length;
+       __u32 flags;
+       __u32 reserved[2];
+};
+
+#define V4L2_ENC_IDX_ENTRIES (64)
+struct v4l2_enc_idx {
+       __u32 entries;
+       __u32 entries_cap;
+       __u32 reserved[4];
+       struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
+};
+
+
+#define V4L2_ENC_CMD_START      (0)
+#define V4L2_ENC_CMD_STOP       (1)
+#define V4L2_ENC_CMD_PAUSE      (2)
+#define V4L2_ENC_CMD_RESUME     (3)
+
+/* Flags for V4L2_ENC_CMD_STOP */
+#define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
+
+struct v4l2_encoder_cmd {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u32 data[8];
+               } raw;
+       };
+};
+
+/* Decoder commands */
+#define V4L2_DEC_CMD_START       (0)
+#define V4L2_DEC_CMD_STOP        (1)
+#define V4L2_DEC_CMD_PAUSE       (2)
+#define V4L2_DEC_CMD_RESUME      (3)
+
+/* Flags for V4L2_DEC_CMD_START */
+#define V4L2_DEC_CMD_START_MUTE_AUDIO  (1 << 0)
+
+/* Flags for V4L2_DEC_CMD_PAUSE */
+#define V4L2_DEC_CMD_PAUSE_TO_BLACK    (1 << 0)
+
+/* Flags for V4L2_DEC_CMD_STOP */
+#define V4L2_DEC_CMD_STOP_TO_BLACK     (1 << 0)
+#define V4L2_DEC_CMD_STOP_IMMEDIATELY  (1 << 1)
+
+/* Play format requirements (returned by the driver): */
+
+/* The decoder has no special format requirements */
+#define V4L2_DEC_START_FMT_NONE                (0)
+/* The decoder requires full GOPs */
+#define V4L2_DEC_START_FMT_GOP         (1)
+
+/* The structure must be zeroed before use by the application
+   This ensures it can be extended safely in the future. */
+struct v4l2_decoder_cmd {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u64 pts;
+               } stop;
+
+               struct {
+                       /* 0 or 1000 specifies normal speed,
+                          1 specifies forward single stepping,
+                          -1 specifies backward single stepping,
+                          >1: playback at speed/1000 of the normal speed,
+                          <-1: reverse playback at (-speed/1000) of the normal speed. */
+                       __s32 speed;
+                       __u32 format;
+               } start;
+
+               struct {
+                       __u32 data[16];
+               } raw;
+       };
+};
+#endif
+
+
+/*
+ *     D A T A   S E R V I C E S   ( V B I )
+ *
+ *     Data services API by Michael Schimek
+ */
+
+/* Raw VBI */
+struct v4l2_vbi_format {
+       __u32   sampling_rate;          /* in 1 Hz */
+       __u32   offset;
+       __u32   samples_per_line;
+       __u32   sample_format;          /* V4L2_PIX_FMT_* */
+       __s32   start[2];
+       __u32   count[2];
+       __u32   flags;                  /* V4L2_VBI_* */
+       __u32   reserved[2];            /* must be zero */
+};
+
+/*  VBI flags  */
+#define V4L2_VBI_UNSYNC                (1 << 0)
+#define V4L2_VBI_INTERLACED    (1 << 1)
+
+/* ITU-R start lines for each field */
+#define V4L2_VBI_ITU_525_F1_START (1)
+#define V4L2_VBI_ITU_525_F2_START (264)
+#define V4L2_VBI_ITU_625_F1_START (1)
+#define V4L2_VBI_ITU_625_F2_START (314)
+
+/* Sliced VBI
+ *
+ *    This implements is a proposal V4L2 API to allow SLICED VBI
+ * required for some hardware encoders. It should change without
+ * notice in the definitive implementation.
+ */
+
+struct v4l2_sliced_vbi_format {
+       __u16   service_set;
+       /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
+          service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
+                                (equals frame lines 313-336 for 625 line video
+                                 standards, 263-286 for 525 line standards) */
+       __u16   service_lines[2][24];
+       __u32   io_size;
+       __u32   reserved[2];            /* must be zero */
+};
+
+/* Teletext World System Teletext
+   (WST), defined on ITU-R BT.653-2 */
+#define V4L2_SLICED_TELETEXT_B          (0x0001)
+/* Video Program System, defined on ETS 300 231*/
+#define V4L2_SLICED_VPS                 (0x0400)
+/* Closed Caption, defined on EIA-608 */
+#define V4L2_SLICED_CAPTION_525         (0x1000)
+/* Wide Screen System, defined on ITU-R BT1119.1 */
+#define V4L2_SLICED_WSS_625             (0x4000)
+
+#define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
+#define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
+
+struct v4l2_sliced_vbi_cap {
+       __u16   service_set;
+       /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
+          service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
+                                (equals frame lines 313-336 for 625 line video
+                                 standards, 263-286 for 525 line standards) */
+       __u16   service_lines[2][24];
+       __u32   type;           /* enum v4l2_buf_type */
+       __u32   reserved[3];    /* must be 0 */
+};
+
+struct v4l2_sliced_vbi_data {
+       __u32   id;
+       __u32   field;          /* 0: first field, 1: second field */
+       __u32   line;           /* 1-23 */
+       __u32   reserved;       /* must be 0 */
+       __u8    data[48];
+};
+
+/*
+ * Sliced VBI data inserted into MPEG Streams
+ */
+
+/*
+ * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
+ *
+ * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
+ * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
+ * data
+ *
+ * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
+ * definitions are not included here.  See the MPEG-2 specifications for details
+ * on these headers.
+ */
+
+/* Line type IDs */
+#define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
+#define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
+#define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
+#define V4L2_MPEG_VBI_IVTV_VPS            (7)
+
+struct v4l2_mpeg_vbi_itv0_line {
+       __u8 id;        /* One of V4L2_MPEG_VBI_IVTV_* above */
+       __u8 data[42];  /* Sliced VBI data for the line */
+} __attribute__ ((packed));
+
+struct v4l2_mpeg_vbi_itv0 {
+       __le32 linemask[2]; /* Bitmasks of VBI service lines present */
+       struct v4l2_mpeg_vbi_itv0_line line[35];
+} __attribute__ ((packed));
+
+struct v4l2_mpeg_vbi_ITV0 {
+       struct v4l2_mpeg_vbi_itv0_line line[36];
+} __attribute__ ((packed));
+
+#define V4L2_MPEG_VBI_IVTV_MAGIC0      "itv0"
+#define V4L2_MPEG_VBI_IVTV_MAGIC1      "ITV0"
+
+struct v4l2_mpeg_vbi_fmt_ivtv {
+       __u8 magic[4];
+       union {
+               struct v4l2_mpeg_vbi_itv0 itv0;
+               struct v4l2_mpeg_vbi_ITV0 ITV0;
+       };
+} __attribute__ ((packed));
+
+/*
+ *     A G G R E G A T E   S T R U C T U R E S
+ */
+
+/**
+ * struct v4l2_plane_pix_format - additional, per-plane format definition
+ * @sizeimage:         maximum size in bytes required for data, for which
+ *                     this plane will be used
+ * @bytesperline:      distance in bytes between the leftmost pixels in two
+ *                     adjacent lines
+ */
+struct v4l2_plane_pix_format {
+       __u32           sizeimage;
+       __u32           bytesperline;
+       __u16           reserved[6];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_pix_format_mplane - multiplanar format definition
+ * @width:             image width in pixels
+ * @height:            image height in pixels
+ * @pixelformat:       little endian four character code (fourcc)
+ * @field:             enum v4l2_field; field order (for interlaced video)
+ * @colorspace:                enum v4l2_colorspace; supplemental to pixelformat
+ * @plane_fmt:         per-plane information
+ * @num_planes:                number of planes for this format
+ * @flags:             format flags (V4L2_PIX_FMT_FLAG_*)
+ * @ycbcr_enc:         enum v4l2_ycbcr_encoding, Y'CbCr encoding
+ * @quantization:      enum v4l2_quantization, colorspace quantization
+ * @xfer_func:         enum v4l2_xfer_func, colorspace transfer function
+ */
+struct v4l2_pix_format_mplane {
+       __u32                           width;
+       __u32                           height;
+       __u32                           pixelformat;
+       __u32                           field;
+       __u32                           colorspace;
+
+       struct v4l2_plane_pix_format    plane_fmt[VIDEO_MAX_PLANES];
+       __u8                            num_planes;
+       __u8                            flags;
+       __u8                            ycbcr_enc;
+       __u8                            quantization;
+       __u8                            xfer_func;
+       __u8                            reserved[7];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_sdr_format - SDR format definition
+ * @pixelformat:       little endian four character code (fourcc)
+ * @buffersize:                maximum size in bytes required for data
+ */
+struct v4l2_sdr_format {
+       __u32                           pixelformat;
+       __u32                           buffersize;
+       __u8                            reserved[24];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_format - stream data format
+ * @type:      enum v4l2_buf_type; type of the data stream
+ * @pix:       definition of an image format
+ * @pix_mp:    definition of a multiplanar image format
+ * @win:       definition of an overlaid image
+ * @vbi:       raw VBI capture or output parameters
+ * @sliced:    sliced VBI capture or output parameters
+ * @raw_data:  placeholder for future extensions and custom formats
+ */
+struct v4l2_format {
+       __u32    type;
+       union {
+               struct v4l2_pix_format          pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
+               struct v4l2_pix_format_mplane   pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
+               struct v4l2_window              win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
+               struct v4l2_vbi_format          vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
+               struct v4l2_sliced_vbi_format   sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
+               struct v4l2_sdr_format          sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */
+               __u8    raw_data[200];                   /* user-defined */
+       } fmt;
+};
+
+/*     Stream type-dependent parameters
+ */
+struct v4l2_streamparm {
+       __u32    type;                  /* enum v4l2_buf_type */
+       union {
+               struct v4l2_captureparm capture;
+               struct v4l2_outputparm  output;
+               __u8    raw_data[200];  /* user-defined */
+       } parm;
+};
+
+/*
+ *     E V E N T S
+ */
+
+#define V4L2_EVENT_ALL                         0
+#define V4L2_EVENT_VSYNC                       1
+#define V4L2_EVENT_EOS                         2
+#define V4L2_EVENT_CTRL                                3
+#define V4L2_EVENT_FRAME_SYNC                  4
+#define V4L2_EVENT_SOURCE_CHANGE               5
+#define V4L2_EVENT_MOTION_DET                  6
+#define V4L2_EVENT_PRIVATE_START               0x08000000
+
+/* Payload for V4L2_EVENT_VSYNC */
+struct v4l2_event_vsync {
+       /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
+       __u8 field;
+} __attribute__ ((packed));
+
+/* Payload for V4L2_EVENT_CTRL */
+#define V4L2_EVENT_CTRL_CH_VALUE               (1 << 0)
+#define V4L2_EVENT_CTRL_CH_FLAGS               (1 << 1)
+#define V4L2_EVENT_CTRL_CH_RANGE               (1 << 2)
+
+struct v4l2_event_ctrl {
+       __u32 changes;
+       __u32 type;
+       union {
+               __s32 value;
+               __s64 value64;
+       };
+       __u32 flags;
+       __s32 minimum;
+       __s32 maximum;
+       __s32 step;
+       __s32 default_value;
+};
+
+struct v4l2_event_frame_sync {
+       __u32 frame_sequence;
+};
+
+#define V4L2_EVENT_SRC_CH_RESOLUTION           (1 << 0)
+
+struct v4l2_event_src_change {
+       __u32 changes;
+};
+
+#define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ        (1 << 0)
+
+/**
+ * struct v4l2_event_motion_det - motion detection event
+ * @flags:             if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
+ *                     frame_sequence field is valid.
+ * @frame_sequence:    the frame sequence number associated with this event.
+ * @region_mask:       which regions detected motion.
+ */
+struct v4l2_event_motion_det {
+       __u32 flags;
+       __u32 frame_sequence;
+       __u32 region_mask;
+};
+
+struct v4l2_event {
+       __u32                           type;
+       union {
+               struct v4l2_event_vsync         vsync;
+               struct v4l2_event_ctrl          ctrl;
+               struct v4l2_event_frame_sync    frame_sync;
+               struct v4l2_event_src_change    src_change;
+               struct v4l2_event_motion_det    motion_det;
+               __u8                            data[64];
+       } u;
+       __u32                           pending;
+       __u32                           sequence;
+       struct timespec                 timestamp;
+       __u32                           id;
+       __u32                           reserved[8];
+};
+
+#define V4L2_EVENT_SUB_FL_SEND_INITIAL         (1 << 0)
+#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK       (1 << 1)
+
+struct v4l2_event_subscription {
+       __u32                           type;
+       __u32                           id;
+       __u32                           flags;
+       __u32                           reserved[5];
+};
+
+/*
+ *     A D V A N C E D   D E B U G G I N G
+ *
+ *     NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
+ *     FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
+ */
+
+/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
+
+#define V4L2_CHIP_MATCH_BRIDGE      0  /* Match against chip ID on the bridge (0 for the bridge) */
+#define V4L2_CHIP_MATCH_SUBDEV      4  /* Match against subdev index */
+
+/* The following four defines are no longer in use */
+#define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
+#define V4L2_CHIP_MATCH_I2C_DRIVER  1  /* Match against I2C driver name */
+#define V4L2_CHIP_MATCH_I2C_ADDR    2  /* Match against I2C 7-bit address */
+#define V4L2_CHIP_MATCH_AC97        3  /* Match against ancillary AC97 chip */
+
+struct v4l2_dbg_match {
+       __u32 type; /* Match type */
+       union {     /* Match this chip, meaning determined by type */
+               __u32 addr;
+               char name[32];
+       };
+} __attribute__ ((packed));
+
+struct v4l2_dbg_register {
+       struct v4l2_dbg_match match;
+       __u32 size;     /* register size in bytes */
+       __u64 reg;
+       __u64 val;
+} __attribute__ ((packed));
+
+#define V4L2_CHIP_FL_READABLE (1 << 0)
+#define V4L2_CHIP_FL_WRITABLE (1 << 1)
+
+/* VIDIOC_DBG_G_CHIP_INFO */
+struct v4l2_dbg_chip_info {
+       struct v4l2_dbg_match match;
+       char name[32];
+       __u32 flags;
+       __u32 reserved[32];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
+ * @index:     on return, index of the first created buffer
+ * @count:     entry: number of requested buffers,
+ *             return: number of created buffers
+ * @memory:    enum v4l2_memory; buffer memory type
+ * @format:    frame format, for which buffers are requested
+ * @reserved:  future extensions
+ */
+struct v4l2_create_buffers {
+       __u32                   index;
+       __u32                   count;
+       __u32                   memory;
+       struct v4l2_format      format;
+       __u32                   reserved[8];
+};
+
+/*
+ *     I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
+ *
+ */
+#define VIDIOC_QUERYCAP                 _IOR('V',  0, struct v4l2_capability)
+#define VIDIOC_RESERVED                  _IO('V',  1)
+#define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
+#define VIDIOC_G_FMT           _IOWR('V',  4, struct v4l2_format)
+#define VIDIOC_S_FMT           _IOWR('V',  5, struct v4l2_format)
+#define VIDIOC_REQBUFS         _IOWR('V',  8, struct v4l2_requestbuffers)
+#define VIDIOC_QUERYBUF                _IOWR('V',  9, struct v4l2_buffer)
+#define VIDIOC_G_FBUF           _IOR('V', 10, struct v4l2_framebuffer)
+#define VIDIOC_S_FBUF           _IOW('V', 11, struct v4l2_framebuffer)
+#define VIDIOC_OVERLAY          _IOW('V', 14, int)
+#define VIDIOC_QBUF            _IOWR('V', 15, struct v4l2_buffer)
+#define VIDIOC_EXPBUF          _IOWR('V', 16, struct v4l2_exportbuffer)
+#define VIDIOC_DQBUF           _IOWR('V', 17, struct v4l2_buffer)
+#define VIDIOC_STREAMON                 _IOW('V', 18, int)
+#define VIDIOC_STREAMOFF        _IOW('V', 19, int)
+#define VIDIOC_G_PARM          _IOWR('V', 21, struct v4l2_streamparm)
+#define VIDIOC_S_PARM          _IOWR('V', 22, struct v4l2_streamparm)
+#define VIDIOC_G_STD            _IOR('V', 23, v4l2_std_id)
+#define VIDIOC_S_STD            _IOW('V', 24, v4l2_std_id)
+#define VIDIOC_ENUMSTD         _IOWR('V', 25, struct v4l2_standard)
+#define VIDIOC_ENUMINPUT       _IOWR('V', 26, struct v4l2_input)
+#define VIDIOC_G_CTRL          _IOWR('V', 27, struct v4l2_control)
+#define VIDIOC_S_CTRL          _IOWR('V', 28, struct v4l2_control)
+#define VIDIOC_G_TUNER         _IOWR('V', 29, struct v4l2_tuner)
+#define VIDIOC_S_TUNER          _IOW('V', 30, struct v4l2_tuner)
+#define VIDIOC_G_AUDIO          _IOR('V', 33, struct v4l2_audio)
+#define VIDIOC_S_AUDIO          _IOW('V', 34, struct v4l2_audio)
+#define VIDIOC_QUERYCTRL       _IOWR('V', 36, struct v4l2_queryctrl)
+#define VIDIOC_QUERYMENU       _IOWR('V', 37, struct v4l2_querymenu)
+#define VIDIOC_G_INPUT          _IOR('V', 38, int)
+#define VIDIOC_S_INPUT         _IOWR('V', 39, int)
+#define VIDIOC_G_EDID          _IOWR('V', 40, struct v4l2_edid)
+#define VIDIOC_S_EDID          _IOWR('V', 41, struct v4l2_edid)
+#define VIDIOC_G_OUTPUT                 _IOR('V', 46, int)
+#define VIDIOC_S_OUTPUT                _IOWR('V', 47, int)
+#define VIDIOC_ENUMOUTPUT      _IOWR('V', 48, struct v4l2_output)
+#define VIDIOC_G_AUDOUT                 _IOR('V', 49, struct v4l2_audioout)
+#define VIDIOC_S_AUDOUT                 _IOW('V', 50, struct v4l2_audioout)
+#define VIDIOC_G_MODULATOR     _IOWR('V', 54, struct v4l2_modulator)
+#define VIDIOC_S_MODULATOR      _IOW('V', 55, struct v4l2_modulator)
+#define VIDIOC_G_FREQUENCY     _IOWR('V', 56, struct v4l2_frequency)
+#define VIDIOC_S_FREQUENCY      _IOW('V', 57, struct v4l2_frequency)
+#define VIDIOC_CROPCAP         _IOWR('V', 58, struct v4l2_cropcap)
+#define VIDIOC_G_CROP          _IOWR('V', 59, struct v4l2_crop)
+#define VIDIOC_S_CROP           _IOW('V', 60, struct v4l2_crop)
+#define VIDIOC_G_JPEGCOMP       _IOR('V', 61, struct v4l2_jpegcompression)
+#define VIDIOC_S_JPEGCOMP       _IOW('V', 62, struct v4l2_jpegcompression)
+#define VIDIOC_QUERYSTD         _IOR('V', 63, v4l2_std_id)
+#define VIDIOC_TRY_FMT         _IOWR('V', 64, struct v4l2_format)
+#define VIDIOC_ENUMAUDIO       _IOWR('V', 65, struct v4l2_audio)
+#define VIDIOC_ENUMAUDOUT      _IOWR('V', 66, struct v4l2_audioout)
+#define VIDIOC_G_PRIORITY       _IOR('V', 67, __u32) /* enum v4l2_priority */
+#define VIDIOC_S_PRIORITY       _IOW('V', 68, __u32) /* enum v4l2_priority */
+#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
+#define VIDIOC_LOG_STATUS         _IO('V', 70)
+#define VIDIOC_G_EXT_CTRLS     _IOWR('V', 71, struct v4l2_ext_controls)
+#define VIDIOC_S_EXT_CTRLS     _IOWR('V', 72, struct v4l2_ext_controls)
+#define VIDIOC_TRY_EXT_CTRLS   _IOWR('V', 73, struct v4l2_ext_controls)
+#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
+#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
+#define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
+#define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
+#define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
+
+/* Experimental, meant for debugging, testing and internal use.
+   Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
+   You must be root to use these ioctls. Never use these in applications! */
+#define        VIDIOC_DBG_S_REGISTER    _IOW('V', 79, struct v4l2_dbg_register)
+#define        VIDIOC_DBG_G_REGISTER   _IOWR('V', 80, struct v4l2_dbg_register)
+
+#define VIDIOC_S_HW_FREQ_SEEK   _IOW('V', 82, struct v4l2_hw_freq_seek)
+
+#define        VIDIOC_S_DV_TIMINGS     _IOWR('V', 87, struct v4l2_dv_timings)
+#define        VIDIOC_G_DV_TIMINGS     _IOWR('V', 88, struct v4l2_dv_timings)
+#define        VIDIOC_DQEVENT           _IOR('V', 89, struct v4l2_event)
+#define        VIDIOC_SUBSCRIBE_EVENT   _IOW('V', 90, struct v4l2_event_subscription)
+#define        VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
+
+/* Experimental, the below two ioctls may change over the next couple of kernel
+   versions */
+#define VIDIOC_CREATE_BUFS     _IOWR('V', 92, struct v4l2_create_buffers)
+#define VIDIOC_PREPARE_BUF     _IOWR('V', 93, struct v4l2_buffer)
+
+/* Experimental selection API */
+#define VIDIOC_G_SELECTION     _IOWR('V', 94, struct v4l2_selection)
+#define VIDIOC_S_SELECTION     _IOWR('V', 95, struct v4l2_selection)
+
+/* Experimental, these two ioctls may change over the next couple of kernel
+   versions. */
+#define VIDIOC_DECODER_CMD     _IOWR('V', 96, struct v4l2_decoder_cmd)
+#define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
+
+/* Experimental, these three ioctls may change over the next couple of kernel
+   versions. */
+#define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
+#define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
+#define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
+
+/* Experimental, this ioctl may change over the next couple of kernel
+   versions. */
+#define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band)
+
+/* Experimental, meant for debugging, testing and internal use.
+   Never use these in applications! */
+#define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
+
+#define VIDIOC_QUERY_EXT_CTRL  _IOWR('V', 103, struct v4l2_query_ext_ctrl)
+
+/* Reminder: when adding new ioctls please add support for them to
+   drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
+
+#define BASE_VIDIOC_PRIVATE    192             /* 192-255 are private */
+
+#endif /* __LINUX_VIDEODEV2_H */
diff --git a/lib/libdss-include/include/linux/virtio_9p.h b/lib/libdss-include/include/linux/virtio_9p.h
new file mode 100644 (file)
index 0000000..277c4ad
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _LINUX_VIRTIO_9P_H
+#define _LINUX_VIRTIO_9P_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* The feature bitmap for virtio 9P */
+
+/* The mount point is specified in a config variable */
+#define VIRTIO_9P_MOUNT_TAG 0
+
+struct virtio_9p_config {
+       /* length of the tag name */
+       __u16 tag_len;
+       /* non-NULL terminated tag name */
+       __u8 tag[0];
+} __attribute__((packed));
+
+#endif /* _LINUX_VIRTIO_9P_H */
diff --git a/lib/libdss-include/include/linux/virtio_balloon.h b/lib/libdss-include/include/linux/virtio_balloon.h
new file mode 100644 (file)
index 0000000..d7f1cbc
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef _LINUX_VIRTIO_BALLOON_H
+#define _LINUX_VIRTIO_BALLOON_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* The feature bitmap for virtio balloon */
+#define VIRTIO_BALLOON_F_MUST_TELL_HOST        0 /* Tell before reclaiming pages */
+#define VIRTIO_BALLOON_F_STATS_VQ      1 /* Memory Stats virtqueue */
+#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM        2 /* Deflate balloon on OOM */
+
+/* Size of a PFN in the balloon interface. */
+#define VIRTIO_BALLOON_PFN_SHIFT 12
+
+struct virtio_balloon_config {
+       /* Number of pages host wants Guest to give up. */
+       __u32 num_pages;
+       /* Number of pages we've actually got in balloon. */
+       __u32 actual;
+};
+
+#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
+#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
+#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
+#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
+#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
+#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
+#define VIRTIO_BALLOON_S_NR       6
+
+/*
+ * Memory statistics structure.
+ * Driver fills an array of these structures and passes to device.
+ *
+ * NOTE: fields are laid out in a way that would make compiler add padding
+ * between and after fields, so we have to use compiler-specific attributes to
+ * pack it, to disable this padding. This also often causes compiler to
+ * generate suboptimal code.
+ *
+ * We maintain this statistics structure format for backwards compatibility,
+ * but don't follow this example.
+ *
+ * If implementing a similar structure, do something like the below instead:
+ *     struct virtio_balloon_stat {
+ *         __virtio16 tag;
+ *         __u8 reserved[6];
+ *         __virtio64 val;
+ *     };
+ *
+ * In other words, add explicit reserved fields to align field and
+ * structure boundaries at field size, avoiding compiler padding
+ * without the packed attribute.
+ */
+struct virtio_balloon_stat {
+       __virtio16 tag;
+       __virtio64 val;
+} __attribute__((packed));
+
+#endif /* _LINUX_VIRTIO_BALLOON_H */
diff --git a/lib/libdss-include/include/linux/virtio_blk.h b/lib/libdss-include/include/linux/virtio_blk.h
new file mode 100644 (file)
index 0000000..c7c60d2
--- /dev/null
@@ -0,0 +1,147 @@
+#ifndef _LINUX_VIRTIO_BLK_H
+#define _LINUX_VIRTIO_BLK_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_types.h>
+
+/* Feature bits */
+#define VIRTIO_BLK_F_SIZE_MAX  1       /* Indicates maximum segment size */
+#define VIRTIO_BLK_F_SEG_MAX   2       /* Indicates maximum # of segments */
+#define VIRTIO_BLK_F_GEOMETRY  4       /* Legacy geometry available  */
+#define VIRTIO_BLK_F_RO                5       /* Disk is read-only */
+#define VIRTIO_BLK_F_BLK_SIZE  6       /* Block size of disk is available*/
+#define VIRTIO_BLK_F_TOPOLOGY  10      /* Topology information is available */
+#define VIRTIO_BLK_F_MQ                12      /* support more than one vq */
+
+/* Legacy feature bits */
+#ifndef VIRTIO_BLK_NO_LEGACY
+#define VIRTIO_BLK_F_BARRIER   0       /* Does host support barriers? */
+#define VIRTIO_BLK_F_SCSI      7       /* Supports scsi command passthru */
+#define VIRTIO_BLK_F_WCE       9       /* Writeback mode enabled after reset */
+#define VIRTIO_BLK_F_CONFIG_WCE        11      /* Writeback mode available in config */
+/* Old (deprecated) name for VIRTIO_BLK_F_WCE. */
+#define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+#define VIRTIO_BLK_ID_BYTES    20      /* ID string length */
+
+struct virtio_blk_config {
+       /* The capacity (in 512-byte sectors). */
+       __u64 capacity;
+       /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
+       __u32 size_max;
+       /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
+       __u32 seg_max;
+       /* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */
+       struct virtio_blk_geometry {
+               __u16 cylinders;
+               __u8 heads;
+               __u8 sectors;
+       } geometry;
+
+       /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
+       __u32 blk_size;
+
+       /* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY  */
+       /* exponent for physical block per logical block. */
+       __u8 physical_block_exp;
+       /* alignment offset in logical blocks. */
+       __u8 alignment_offset;
+       /* minimum I/O size without performance penalty in logical blocks. */
+       __u16 min_io_size;
+       /* optimal sustained I/O size in logical blocks. */
+       __u32 opt_io_size;
+
+       /* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */
+       __u8 wce;
+       __u8 unused;
+
+       /* number of vqs, only available when VIRTIO_BLK_F_MQ is set */
+       __u16 num_queues;
+} __attribute__((packed));
+
+/*
+ * Command types
+ *
+ * Usage is a bit tricky as some bits are used as flags and some are not.
+ *
+ * Rules:
+ *   VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or
+ *   VIRTIO_BLK_T_BARRIER.  VIRTIO_BLK_T_FLUSH is a command of its own
+ *   and may not be combined with any of the other flags.
+ */
+
+/* These two define direction. */
+#define VIRTIO_BLK_T_IN                0
+#define VIRTIO_BLK_T_OUT       1
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* This bit says it's a scsi command, not an actual read or write. */
+#define VIRTIO_BLK_T_SCSI_CMD  2
+#endif /* VIRTIO_BLK_NO_LEGACY */
+
+/* Cache flush command */
+#define VIRTIO_BLK_T_FLUSH     4
+
+/* Get device ID command */
+#define VIRTIO_BLK_T_GET_ID    8
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* Barrier before this op. */
+#define VIRTIO_BLK_T_BARRIER   0x80000000
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/*
+ * This comes first in the read scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated,
+ * this is the first element of the read scatter-gather list.
+ */
+struct virtio_blk_outhdr {
+       /* VIRTIO_BLK_T* */
+       __virtio32 type;
+       /* io priority. */
+       __virtio32 ioprio;
+       /* Sector (ie. 512 byte offset) */
+       __virtio64 sector;
+};
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+struct virtio_scsi_inhdr {
+       __virtio32 errors;
+       __virtio32 data_len;
+       __virtio32 sense_len;
+       __virtio32 residual;
+};
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/* And this is the final byte of the write scatter-gather list. */
+#define VIRTIO_BLK_S_OK                0
+#define VIRTIO_BLK_S_IOERR     1
+#define VIRTIO_BLK_S_UNSUPP    2
+#endif /* _LINUX_VIRTIO_BLK_H */
diff --git a/lib/libdss-include/include/linux/virtio_config.h b/lib/libdss-include/include/linux/virtio_config.h
new file mode 100644 (file)
index 0000000..a11101e
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _LINUX_VIRTIO_CONFIG_H
+#define _LINUX_VIRTIO_CONFIG_H
+/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+/* Virtio devices use a standardized configuration space to define their
+ * features and pass configuration information, but each implementation can
+ * store and access that space differently. */
+#include <linux/types.h>
+
+/* Status byte for guest to report progress, and synchronize features. */
+/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE    1
+/* We have found a driver for the device. */
+#define VIRTIO_CONFIG_S_DRIVER         2
+/* Driver has used its parts of the config, and is happy */
+#define VIRTIO_CONFIG_S_DRIVER_OK      4
+/* Driver has finished configuring features */
+#define VIRTIO_CONFIG_S_FEATURES_OK    8
+/* We've given up on this device. */
+#define VIRTIO_CONFIG_S_FAILED         0x80
+
+/* Some virtio feature bits (currently bits 28 through 32) are reserved for the
+ * transport being used (eg. virtio_ring), the rest are per-device feature
+ * bits. */
+#define VIRTIO_TRANSPORT_F_START       28
+#define VIRTIO_TRANSPORT_F_END         33
+
+#ifndef VIRTIO_CONFIG_NO_LEGACY
+/* Do we get callbacks when the ring is completely used, even if we've
+ * suppressed them? */
+#define VIRTIO_F_NOTIFY_ON_EMPTY       24
+
+/* Can the device handle any descriptor layout? */
+#define VIRTIO_F_ANY_LAYOUT            27
+#endif /* VIRTIO_CONFIG_NO_LEGACY */
+
+/* v1.0 compliant. */
+#define VIRTIO_F_VERSION_1             32
+
+#endif /* _LINUX_VIRTIO_CONFIG_H */
diff --git a/lib/libdss-include/include/linux/virtio_console.h b/lib/libdss-include/include/linux/virtio_console.h
new file mode 100644 (file)
index 0000000..b0be04f
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers:
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) Red Hat, Inc., 2009, 2010, 2011
+ * Copyright (C) Amit Shah <amit.shah@redhat.com>, 2009, 2010, 2011
+ */
+#ifndef _LINUX_VIRTIO_CONSOLE_H
+#define _LINUX_VIRTIO_CONSOLE_H
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* Feature bits */
+#define VIRTIO_CONSOLE_F_SIZE  0       /* Does host provide console size? */
+#define VIRTIO_CONSOLE_F_MULTIPORT 1   /* Does host provide multiple ports? */
+#define VIRTIO_CONSOLE_F_EMERG_WRITE 2 /* Does host support emergency write? */
+
+#define VIRTIO_CONSOLE_BAD_ID          (~(__u32)0)
+
+struct virtio_console_config {
+       /* colums of the screens */
+       __u16 cols;
+       /* rows of the screens */
+       __u16 rows;
+       /* max. number of ports this device can hold */
+       __u32 max_nr_ports;
+       /* emergency write register */
+       __u32 emerg_wr;
+} __attribute__((packed));
+
+/*
+ * A message that's passed between the Host and the Guest for a
+ * particular port.
+ */
+struct virtio_console_control {
+       __virtio32 id;          /* Port number */
+       __virtio16 event;       /* The kind of control event (see below) */
+       __virtio16 value;       /* Extra information for the key */
+};
+
+/* Some events for control messages */
+#define VIRTIO_CONSOLE_DEVICE_READY    0
+#define VIRTIO_CONSOLE_PORT_ADD                1
+#define VIRTIO_CONSOLE_PORT_REMOVE     2
+#define VIRTIO_CONSOLE_PORT_READY      3
+#define VIRTIO_CONSOLE_CONSOLE_PORT    4
+#define VIRTIO_CONSOLE_RESIZE          5
+#define VIRTIO_CONSOLE_PORT_OPEN       6
+#define VIRTIO_CONSOLE_PORT_NAME       7
+
+
+#endif /* _LINUX_VIRTIO_CONSOLE_H */
diff --git a/lib/libdss-include/include/linux/virtio_gpu.h b/lib/libdss-include/include/linux/virtio_gpu.h
new file mode 100644 (file)
index 0000000..7a63faa
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Virtio GPU Device
+ *
+ * Copyright Red Hat, Inc. 2013-2014
+ *
+ * Authors:
+ *     Dave Airlie <airlied@redhat.com>
+ *     Gerd Hoffmann <kraxel@redhat.com>
+ *
+ * This header is BSD licensed so anyone can use the definitions
+ * to implement compatible drivers/servers:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef VIRTIO_GPU_HW_H
+#define VIRTIO_GPU_HW_H
+
+#include <linux/types.h>
+
+#define VIRTIO_GPU_F_VIRGL 0
+
+enum virtio_gpu_ctrl_type {
+       VIRTIO_GPU_UNDEFINED = 0,
+
+       /* 2d commands */
+       VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
+       VIRTIO_GPU_CMD_RESOURCE_CREATE_2D,
+       VIRTIO_GPU_CMD_RESOURCE_UNREF,
+       VIRTIO_GPU_CMD_SET_SCANOUT,
+       VIRTIO_GPU_CMD_RESOURCE_FLUSH,
+       VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D,
+       VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING,
+       VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
+       VIRTIO_GPU_CMD_GET_CAPSET_INFO,
+       VIRTIO_GPU_CMD_GET_CAPSET,
+
+       /* 3d commands */
+       VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
+       VIRTIO_GPU_CMD_CTX_DESTROY,
+       VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE,
+       VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE,
+       VIRTIO_GPU_CMD_RESOURCE_CREATE_3D,
+       VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
+       VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
+       VIRTIO_GPU_CMD_SUBMIT_3D,
+
+       /* cursor commands */
+       VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
+       VIRTIO_GPU_CMD_MOVE_CURSOR,
+
+       /* success responses */
+       VIRTIO_GPU_RESP_OK_NODATA = 0x1100,
+       VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
+       VIRTIO_GPU_RESP_OK_CAPSET_INFO,
+       VIRTIO_GPU_RESP_OK_CAPSET,
+
+       /* error responses */
+       VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
+       VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY,
+       VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER,
+};
+
+#define VIRTIO_GPU_FLAG_FENCE (1 << 0)
+
+struct virtio_gpu_ctrl_hdr {
+       __le32 type;
+       __le32 flags;
+       __le64 fence_id;
+       __le32 ctx_id;
+       __le32 padding;
+};
+
+/* data passed in the cursor vq */
+
+struct virtio_gpu_cursor_pos {
+       __le32 scanout_id;
+       __le32 x;
+       __le32 y;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_UPDATE_CURSOR, VIRTIO_GPU_CMD_MOVE_CURSOR */
+struct virtio_gpu_update_cursor {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_cursor_pos pos;  /* update & move */
+       __le32 resource_id;           /* update only */
+       __le32 hot_x;                 /* update only */
+       __le32 hot_y;                 /* update only */
+       __le32 padding;
+};
+
+/* data passed in the control vq, 2d related */
+
+struct virtio_gpu_rect {
+       __le32 x;
+       __le32 y;
+       __le32 width;
+       __le32 height;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_UNREF */
+struct virtio_gpu_resource_unref {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: create a 2d resource with a format */
+struct virtio_gpu_resource_create_2d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 format;
+       __le32 width;
+       __le32 height;
+};
+
+/* VIRTIO_GPU_CMD_SET_SCANOUT */
+struct virtio_gpu_set_scanout {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le32 scanout_id;
+       __le32 resource_id;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_FLUSH */
+struct virtio_gpu_resource_flush {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: simple transfer to_host */
+struct virtio_gpu_transfer_to_host_2d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le64 offset;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+struct virtio_gpu_mem_entry {
+       __le64 addr;
+       __le32 length;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING */
+struct virtio_gpu_resource_attach_backing {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 nr_entries;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */
+struct virtio_gpu_resource_detach_backing {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_RESP_OK_DISPLAY_INFO */
+#define VIRTIO_GPU_MAX_SCANOUTS 16
+struct virtio_gpu_resp_display_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_display_one {
+               struct virtio_gpu_rect r;
+               __le32 enabled;
+               __le32 flags;
+       } pmodes[VIRTIO_GPU_MAX_SCANOUTS];
+};
+
+/* data passed in the control vq, 3d related */
+
+struct virtio_gpu_box {
+       __le32 x, y, z;
+       __le32 w, h, d;
+};
+
+/* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D */
+struct virtio_gpu_transfer_host_3d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_box box;
+       __le64 offset;
+       __le32 resource_id;
+       __le32 level;
+       __le32 stride;
+       __le32 layer_stride;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_CREATE_3D */
+#define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0)
+struct virtio_gpu_resource_create_3d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 target;
+       __le32 format;
+       __le32 bind;
+       __le32 width;
+       __le32 height;
+       __le32 depth;
+       __le32 array_size;
+       __le32 last_level;
+       __le32 nr_samples;
+       __le32 flags;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_CTX_CREATE */
+struct virtio_gpu_ctx_create {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 nlen;
+       __le32 padding;
+       char debug_name[64];
+};
+
+/* VIRTIO_GPU_CMD_CTX_DESTROY */
+struct virtio_gpu_ctx_destroy {
+       struct virtio_gpu_ctrl_hdr hdr;
+};
+
+/* VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE */
+struct virtio_gpu_ctx_resource {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_SUBMIT_3D */
+struct virtio_gpu_cmd_submit {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 size;
+       __le32 padding;
+};
+
+#define VIRTIO_GPU_CAPSET_VIRGL 1
+
+/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
+struct virtio_gpu_get_capset_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_index;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_RESP_OK_CAPSET_INFO */
+struct virtio_gpu_resp_capset_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_id;
+       __le32 capset_max_version;
+       __le32 capset_max_size;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_GET_CAPSET */
+struct virtio_gpu_get_capset {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_id;
+       __le32 capset_version;
+};
+
+/* VIRTIO_GPU_RESP_OK_CAPSET */
+struct virtio_gpu_resp_capset {
+       struct virtio_gpu_ctrl_hdr hdr;
+       uint8_t capset_data[];
+};
+
+#define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
+
+struct virtio_gpu_config {
+       __u32 events_read;
+       __u32 events_clear;
+       __u32 num_scanouts;
+       __u32 num_capsets;
+};
+
+/* simple formats for fbcon/X use */
+enum virtio_gpu_formats {
+       VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM  = 1,
+       VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM  = 2,
+       VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM  = 3,
+       VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM  = 4,
+
+       VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM  = 67,
+       VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM  = 68,
+
+       VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM  = 121,
+       VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM  = 134,
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/virtio_ids.h b/lib/libdss-include/include/linux/virtio_ids.h
new file mode 100644 (file)
index 0000000..77925f5
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_VIRTIO_IDS_H
+#define _LINUX_VIRTIO_IDS_H
+/*
+ * Virtio IDs
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+#define VIRTIO_ID_NET          1 /* virtio net */
+#define VIRTIO_ID_BLOCK                2 /* virtio block */
+#define VIRTIO_ID_CONSOLE      3 /* virtio console */
+#define VIRTIO_ID_RNG          4 /* virtio rng */
+#define VIRTIO_ID_BALLOON      5 /* virtio balloon */
+#define VIRTIO_ID_RPMSG                7 /* virtio remote processor messaging */
+#define VIRTIO_ID_SCSI         8 /* virtio scsi */
+#define VIRTIO_ID_9P           9 /* 9p virtio console */
+#define VIRTIO_ID_RPROC_SERIAL 11 /* virtio remoteproc serial link */
+#define VIRTIO_ID_CAIF        12 /* Virtio caif */
+#define VIRTIO_ID_GPU          16 /* virtio GPU */
+#define VIRTIO_ID_INPUT        18 /* virtio input */
+
+#endif /* _LINUX_VIRTIO_IDS_H */
diff --git a/lib/libdss-include/include/linux/virtio_input.h b/lib/libdss-include/include/linux/virtio_input.h
new file mode 100644 (file)
index 0000000..a7fe5c8
--- /dev/null
@@ -0,0 +1,76 @@
+#ifndef _LINUX_VIRTIO_INPUT_H
+#define _LINUX_VIRTIO_INPUT_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+#include <linux/types.h>
+
+enum virtio_input_config_select {
+       VIRTIO_INPUT_CFG_UNSET      = 0x00,
+       VIRTIO_INPUT_CFG_ID_NAME    = 0x01,
+       VIRTIO_INPUT_CFG_ID_SERIAL  = 0x02,
+       VIRTIO_INPUT_CFG_ID_DEVIDS  = 0x03,
+       VIRTIO_INPUT_CFG_PROP_BITS  = 0x10,
+       VIRTIO_INPUT_CFG_EV_BITS    = 0x11,
+       VIRTIO_INPUT_CFG_ABS_INFO   = 0x12,
+};
+
+struct virtio_input_absinfo {
+       __u32 min;
+       __u32 max;
+       __u32 fuzz;
+       __u32 flat;
+       __u32 res;
+};
+
+struct virtio_input_devids {
+       __u16 bustype;
+       __u16 vendor;
+       __u16 product;
+       __u16 version;
+};
+
+struct virtio_input_config {
+       __u8    select;
+       __u8    subsel;
+       __u8    size;
+       __u8    reserved[5];
+       union {
+               char string[128];
+               __u8 bitmap[128];
+               struct virtio_input_absinfo abs;
+               struct virtio_input_devids ids;
+       } u;
+};
+
+struct virtio_input_event {
+       __le16 type;
+       __le16 code;
+       __le32 value;
+};
+
+#endif /* _LINUX_VIRTIO_INPUT_H */
diff --git a/lib/libdss-include/include/linux/virtio_net.h b/lib/libdss-include/include/linux/virtio_net.h
new file mode 100644 (file)
index 0000000..ec32293
--- /dev/null
@@ -0,0 +1,245 @@
+#ifndef _LINUX_VIRTIO_NET_H
+#define _LINUX_VIRTIO_NET_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_types.h>
+#include <linux/if_ether.h>
+
+/* The feature bitmap for virtio net */
+#define VIRTIO_NET_F_CSUM      0       /* Host handles pkts w/ partial csum */
+#define VIRTIO_NET_F_GUEST_CSUM        1       /* Guest handles pkts w/ partial csum */
+#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Dynamic offload configuration. */
+#define VIRTIO_NET_F_MAC       5       /* Host has given MAC address. */
+#define VIRTIO_NET_F_GUEST_TSO4        7       /* Guest can handle TSOv4 in. */
+#define VIRTIO_NET_F_GUEST_TSO6        8       /* Guest can handle TSOv6 in. */
+#define VIRTIO_NET_F_GUEST_ECN 9       /* Guest can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_GUEST_UFO 10      /* Guest can handle UFO in. */
+#define VIRTIO_NET_F_HOST_TSO4 11      /* Host can handle TSOv4 in. */
+#define VIRTIO_NET_F_HOST_TSO6 12      /* Host can handle TSOv6 in. */
+#define VIRTIO_NET_F_HOST_ECN  13      /* Host can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_HOST_UFO  14      /* Host can handle UFO in. */
+#define VIRTIO_NET_F_MRG_RXBUF 15      /* Host can merge receive buffers. */
+#define VIRTIO_NET_F_STATUS    16      /* virtio_net_config.status available */
+#define VIRTIO_NET_F_CTRL_VQ   17      /* Control channel available */
+#define VIRTIO_NET_F_CTRL_RX   18      /* Control channel RX mode support */
+#define VIRTIO_NET_F_CTRL_VLAN 19      /* Control channel VLAN filtering */
+#define VIRTIO_NET_F_CTRL_RX_EXTRA 20  /* Extra RX mode control support */
+#define VIRTIO_NET_F_GUEST_ANNOUNCE 21 /* Guest can announce device on the
+                                        * network */
+#define VIRTIO_NET_F_MQ        22      /* Device supports Receive Flow
+                                        * Steering */
+#define VIRTIO_NET_F_CTRL_MAC_ADDR 23  /* Set MAC address */
+
+#ifndef VIRTIO_NET_NO_LEGACY
+#define VIRTIO_NET_F_GSO       6       /* Host handles pkts w/ any GSO type */
+#endif /* VIRTIO_NET_NO_LEGACY */
+
+#define VIRTIO_NET_S_LINK_UP   1       /* Link is up */
+#define VIRTIO_NET_S_ANNOUNCE  2       /* Announcement is needed */
+
+struct virtio_net_config {
+       /* The config defining mac address (if VIRTIO_NET_F_MAC) */
+       __u8 mac[ETH_ALEN];
+       /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
+       __u16 status;
+       /* Maximum number of each of transmit and receive queues;
+        * see VIRTIO_NET_F_MQ and VIRTIO_NET_CTRL_MQ.
+        * Legal values are between 1 and 0x8000
+        */
+       __u16 max_virtqueue_pairs;
+} __attribute__((packed));
+
+/*
+ * This header comes first in the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header.
+ *
+ * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf,
+ * only flattened.
+ */
+struct virtio_net_hdr_v1 {
+#define VIRTIO_NET_HDR_F_NEEDS_CSUM    1       /* Use csum_start, csum_offset */
+#define VIRTIO_NET_HDR_F_DATA_VALID    2       /* Csum is valid */
+       __u8 flags;
+#define VIRTIO_NET_HDR_GSO_NONE                0       /* Not a GSO frame */
+#define VIRTIO_NET_HDR_GSO_TCPV4       1       /* GSO frame, IPv4 TCP (TSO) */
+#define VIRTIO_NET_HDR_GSO_UDP         3       /* GSO frame, IPv4 UDP (UFO) */
+#define VIRTIO_NET_HDR_GSO_TCPV6       4       /* GSO frame, IPv6 TCP */
+#define VIRTIO_NET_HDR_GSO_ECN         0x80    /* TCP has ECN set */
+       __u8 gso_type;
+       __virtio16 hdr_len;     /* Ethernet + IP + tcp/udp hdrs */
+       __virtio16 gso_size;    /* Bytes to append to hdr_len per frame */
+       __virtio16 csum_start;  /* Position to start checksumming from */
+       __virtio16 csum_offset; /* Offset after that to place checksum */
+       __virtio16 num_buffers; /* Number of merged rx buffers */
+};
+
+#ifndef VIRTIO_NET_NO_LEGACY
+/* This header comes first in the scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
+ * be the first element of the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header. */
+struct virtio_net_hdr {
+       /* See VIRTIO_NET_HDR_F_* */
+       __u8 flags;
+       /* See VIRTIO_NET_HDR_GSO_* */
+       __u8 gso_type;
+       __virtio16 hdr_len;             /* Ethernet + IP + tcp/udp hdrs */
+       __virtio16 gso_size;            /* Bytes to append to hdr_len per frame */
+       __virtio16 csum_start;  /* Position to start checksumming from */
+       __virtio16 csum_offset; /* Offset after that to place checksum */
+};
+
+/* This is the version of the header to use when the MRG_RXBUF
+ * feature has been negotiated. */
+struct virtio_net_hdr_mrg_rxbuf {
+       struct virtio_net_hdr hdr;
+       __virtio16 num_buffers; /* Number of merged rx buffers */
+};
+#endif /* ...VIRTIO_NET_NO_LEGACY */
+
+/*
+ * Control virtqueue data structures
+ *
+ * The control virtqueue expects a header in the first sg entry
+ * and an ack/status response in the last entry.  Data for the
+ * command goes in between.
+ */
+struct virtio_net_ctrl_hdr {
+       __u8 class;
+       __u8 cmd;
+} __attribute__((packed));
+
+typedef __u8 virtio_net_ctrl_ack;
+
+#define VIRTIO_NET_OK     0
+#define VIRTIO_NET_ERR    1
+
+/*
+ * Control the RX mode, ie. promisucous, allmulti, etc...
+ * All commands require an "out" sg entry containing a 1 byte
+ * state value, zero = disable, non-zero = enable.  Commands
+ * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
+ * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
+ */
+#define VIRTIO_NET_CTRL_RX    0
+ #define VIRTIO_NET_CTRL_RX_PROMISC      0
+ #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
+ #define VIRTIO_NET_CTRL_RX_ALLUNI       2
+ #define VIRTIO_NET_CTRL_RX_NOMULTI      3
+ #define VIRTIO_NET_CTRL_RX_NOUNI        4
+ #define VIRTIO_NET_CTRL_RX_NOBCAST      5
+
+/*
+ * Control the MAC
+ *
+ * The MAC filter table is managed by the hypervisor, the guest should
+ * assume the size is infinite.  Filtering should be considered
+ * non-perfect, ie. based on hypervisor resources, the guest may
+ * received packets from sources not specified in the filter list.
+ *
+ * In addition to the class/cmd header, the TABLE_SET command requires
+ * two out scatterlists.  Each contains a 4 byte count of entries followed
+ * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
+ * first sg list contains unicast addresses, the second is for multicast.
+ * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
+ * is available.
+ *
+ * The ADDR_SET command requests one out scatterlist, it contains a
+ * 6 bytes MAC address. This functionality is present if the
+ * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
+ */
+struct virtio_net_ctrl_mac {
+       __virtio32 entries;
+       __u8 macs[][ETH_ALEN];
+} __attribute__((packed));
+
+#define VIRTIO_NET_CTRL_MAC    1
+ #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
+ #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+
+/*
+ * Control VLAN filtering
+ *
+ * The VLAN filter table is controlled via a simple ADD/DEL interface.
+ * VLAN IDs not added may be filterd by the hypervisor.  Del is the
+ * opposite of add.  Both commands expect an out entry containing a 2
+ * byte VLAN ID.  VLAN filterting is available with the
+ * VIRTIO_NET_F_CTRL_VLAN feature bit.
+ */
+#define VIRTIO_NET_CTRL_VLAN       2
+ #define VIRTIO_NET_CTRL_VLAN_ADD             0
+ #define VIRTIO_NET_CTRL_VLAN_DEL             1
+
+/*
+ * Control link announce acknowledgement
+ *
+ * The command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that
+ * driver has recevied the notification; device would clear the
+ * VIRTIO_NET_S_ANNOUNCE bit in the status field after it receives
+ * this command.
+ */
+#define VIRTIO_NET_CTRL_ANNOUNCE       3
+ #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
+
+/*
+ * Control Receive Flow Steering
+ *
+ * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
+ * enables Receive Flow Steering, specifying the number of the transmit and
+ * receive queues that will be used. After the command is consumed and acked by
+ * the device, the device will not steer new packets on receive virtqueues
+ * other than specified nor read from transmit virtqueues other than specified.
+ * Accordingly, driver should not transmit new packets  on virtqueues other than
+ * specified.
+ */
+struct virtio_net_ctrl_mq {
+       __virtio16 virtqueue_pairs;
+};
+
+#define VIRTIO_NET_CTRL_MQ   4
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
+
+/*
+ * Control network offloads
+ *
+ * Reconfigures the network offloads that Guest can handle.
+ *
+ * Available with the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS feature bit.
+ *
+ * Command data format matches the feature bit mask exactly.
+ *
+ * See VIRTIO_NET_F_GUEST_* for the list of offloads
+ * that can be enabled/disabled.
+ */
+#define VIRTIO_NET_CTRL_GUEST_OFFLOADS   5
+#define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET        0
+
+#endif /* _LINUX_VIRTIO_NET_H */
diff --git a/lib/libdss-include/include/linux/virtio_pci.h b/lib/libdss-include/include/linux/virtio_pci.h
new file mode 100644 (file)
index 0000000..90007a1
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * Virtio PCI driver
+ *
+ * This module allows virtio devices to be used over a virtual PCI device.
+ * This can be used with QEMU based VMMs like KVM or Xen.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors:
+ *  Anthony Liguori  <aliguori@us.ibm.com>
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_PCI_H
+#define _LINUX_VIRTIO_PCI_H
+
+#include <linux/types.h>
+
+#ifndef VIRTIO_PCI_NO_LEGACY
+
+/* A 32-bit r/o bitmask of the features supported by the host */
+#define VIRTIO_PCI_HOST_FEATURES       0
+
+/* A 32-bit r/w bitmask of features activated by the guest */
+#define VIRTIO_PCI_GUEST_FEATURES      4
+
+/* A 32-bit r/w PFN for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_PFN           8
+
+/* A 16-bit r/o queue size for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_NUM           12
+
+/* A 16-bit r/w queue selector */
+#define VIRTIO_PCI_QUEUE_SEL           14
+
+/* A 16-bit r/w queue notifier */
+#define VIRTIO_PCI_QUEUE_NOTIFY                16
+
+/* An 8-bit device status register.  */
+#define VIRTIO_PCI_STATUS              18
+
+/* An 8-bit r/o interrupt status register.  Reading the value will return the
+ * current contents of the ISR and will also clear it.  This is effectively
+ * a read-and-acknowledge. */
+#define VIRTIO_PCI_ISR                 19
+
+/* MSI-X registers: only enabled if MSI-X is enabled. */
+/* A 16-bit vector for configuration changes. */
+#define VIRTIO_MSI_CONFIG_VECTOR        20
+/* A 16-bit vector for selected queue notifications. */
+#define VIRTIO_MSI_QUEUE_VECTOR         22
+
+/* The remaining space is defined by each driver as the per-driver
+ * configuration space */
+#define VIRTIO_PCI_CONFIG_OFF(msix_enabled)    ((msix_enabled) ? 24 : 20)
+/* Deprecated: please use VIRTIO_PCI_CONFIG_OFF instead */
+#define VIRTIO_PCI_CONFIG(dev) VIRTIO_PCI_CONFIG_OFF((dev)->msix_enabled)
+
+/* Virtio ABI version, this must match exactly */
+#define VIRTIO_PCI_ABI_VERSION         0
+
+/* How many bits to shift physical queue address written to QUEUE_PFN.
+ * 12 is historical, and due to x86 page size. */
+#define VIRTIO_PCI_QUEUE_ADDR_SHIFT    12
+
+/* The alignment to use between consumer and producer parts of vring.
+ * x86 pagesize again. */
+#define VIRTIO_PCI_VRING_ALIGN         4096
+
+#endif /* VIRTIO_PCI_NO_LEGACY */
+
+/* The bit of the ISR which indicates a device configuration change. */
+#define VIRTIO_PCI_ISR_CONFIG          0x2
+/* Vector value used to disable MSI for queue */
+#define VIRTIO_MSI_NO_VECTOR            0xffff
+
+#ifndef VIRTIO_PCI_NO_MODERN
+
+/* IDs for different capabilities.  Must all exist. */
+
+/* Common configuration */
+#define VIRTIO_PCI_CAP_COMMON_CFG      1
+/* Notifications */
+#define VIRTIO_PCI_CAP_NOTIFY_CFG      2
+/* ISR access */
+#define VIRTIO_PCI_CAP_ISR_CFG         3
+/* Device specific configuration */
+#define VIRTIO_PCI_CAP_DEVICE_CFG      4
+/* PCI configuration access */
+#define VIRTIO_PCI_CAP_PCI_CFG         5
+
+/* This is the PCI capability header: */
+struct virtio_pci_cap {
+       __u8 cap_vndr;          /* Generic PCI field: PCI_CAP_ID_VNDR */
+       __u8 cap_next;          /* Generic PCI field: next ptr. */
+       __u8 cap_len;           /* Generic PCI field: capability length */
+       __u8 cfg_type;          /* Identifies the structure. */
+       __u8 bar;               /* Where to find it. */
+       __u8 padding[3];        /* Pad to full dword. */
+       __le32 offset;          /* Offset within bar. */
+       __le32 length;          /* Length of the structure, in bytes. */
+};
+
+struct virtio_pci_notify_cap {
+       struct virtio_pci_cap cap;
+       __le32 notify_off_multiplier;   /* Multiplier for queue_notify_off. */
+};
+
+/* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */
+struct virtio_pci_common_cfg {
+       /* About the whole device. */
+       __le32 device_feature_select;   /* read-write */
+       __le32 device_feature;          /* read-only */
+       __le32 guest_feature_select;    /* read-write */
+       __le32 guest_feature;           /* read-write */
+       __le16 msix_config;             /* read-write */
+       __le16 num_queues;              /* read-only */
+       __u8 device_status;             /* read-write */
+       __u8 config_generation;         /* read-only */
+
+       /* About a specific virtqueue. */
+       __le16 queue_select;            /* read-write */
+       __le16 queue_size;              /* read-write, power of 2. */
+       __le16 queue_msix_vector;       /* read-write */
+       __le16 queue_enable;            /* read-write */
+       __le16 queue_notify_off;        /* read-only */
+       __le32 queue_desc_lo;           /* read-write */
+       __le32 queue_desc_hi;           /* read-write */
+       __le32 queue_avail_lo;          /* read-write */
+       __le32 queue_avail_hi;          /* read-write */
+       __le32 queue_used_lo;           /* read-write */
+       __le32 queue_used_hi;           /* read-write */
+};
+
+/* Fields in VIRTIO_PCI_CAP_PCI_CFG: */
+struct virtio_pci_cfg_cap {
+       struct virtio_pci_cap cap;
+       __u8 pci_cfg_data[4]; /* Data for BAR access. */
+};
+
+/* Macro versions of offsets for the Old Timers! */
+#define VIRTIO_PCI_CAP_VNDR            0
+#define VIRTIO_PCI_CAP_NEXT            1
+#define VIRTIO_PCI_CAP_LEN             2
+#define VIRTIO_PCI_CAP_CFG_TYPE                3
+#define VIRTIO_PCI_CAP_BAR             4
+#define VIRTIO_PCI_CAP_OFFSET          8
+#define VIRTIO_PCI_CAP_LENGTH          12
+
+#define VIRTIO_PCI_NOTIFY_CAP_MULT     16
+
+#define VIRTIO_PCI_COMMON_DFSELECT     0
+#define VIRTIO_PCI_COMMON_DF           4
+#define VIRTIO_PCI_COMMON_GFSELECT     8
+#define VIRTIO_PCI_COMMON_GF           12
+#define VIRTIO_PCI_COMMON_MSIX         16
+#define VIRTIO_PCI_COMMON_NUMQ         18
+#define VIRTIO_PCI_COMMON_STATUS       20
+#define VIRTIO_PCI_COMMON_CFGGENERATION        21
+#define VIRTIO_PCI_COMMON_Q_SELECT     22
+#define VIRTIO_PCI_COMMON_Q_SIZE       24
+#define VIRTIO_PCI_COMMON_Q_MSIX       26
+#define VIRTIO_PCI_COMMON_Q_ENABLE     28
+#define VIRTIO_PCI_COMMON_Q_NOFF       30
+#define VIRTIO_PCI_COMMON_Q_DESCLO     32
+#define VIRTIO_PCI_COMMON_Q_DESCHI     36
+#define VIRTIO_PCI_COMMON_Q_AVAILLO    40
+#define VIRTIO_PCI_COMMON_Q_AVAILHI    44
+#define VIRTIO_PCI_COMMON_Q_USEDLO     48
+#define VIRTIO_PCI_COMMON_Q_USEDHI     52
+
+#endif /* VIRTIO_PCI_NO_MODERN */
+
+#endif
diff --git a/lib/libdss-include/include/linux/virtio_ring.h b/lib/libdss-include/include/linux/virtio_ring.h
new file mode 100644 (file)
index 0000000..4bdc90c
--- /dev/null
@@ -0,0 +1,172 @@
+#ifndef _LINUX_VIRTIO_RING_H
+#define _LINUX_VIRTIO_RING_H
+/* An interface for efficient virtio implementation, currently for use by KVM
+ * and lguest, but hopefully others soon.  Do NOT change this since it will
+ * break existing servers and clients.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright Rusty Russell IBM Corporation 2007. */
+#include <stdint.h>
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+
+/* This marks a buffer as continuing via the next field. */
+#define VRING_DESC_F_NEXT      1
+/* This marks a buffer as write-only (otherwise read-only). */
+#define VRING_DESC_F_WRITE     2
+/* This means the buffer contains a list of buffer descriptors. */
+#define VRING_DESC_F_INDIRECT  4
+
+/* The Host uses this in used->flags to advise the Guest: don't kick me when
+ * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest
+ * will still kick if it's out of buffers. */
+#define VRING_USED_F_NO_NOTIFY 1
+/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
+ * when you consume a buffer.  It's unreliable, so it's simply an
+ * optimization.  */
+#define VRING_AVAIL_F_NO_INTERRUPT     1
+
+/* We support indirect buffer descriptors */
+#define VIRTIO_RING_F_INDIRECT_DESC    28
+
+/* The Guest publishes the used index for which it expects an interrupt
+ * at the end of the avail ring. Host should ignore the avail->flags field. */
+/* The Host publishes the avail index for which it expects a kick
+ * at the end of the used ring. Guest should ignore the used->flags field. */
+#define VIRTIO_RING_F_EVENT_IDX                29
+
+/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */
+struct vring_desc {
+       /* Address (guest-physical). */
+       __virtio64 addr;
+       /* Length. */
+       __virtio32 len;
+       /* The flags as indicated above. */
+       __virtio16 flags;
+       /* We chain unused descriptors via this, too */
+       __virtio16 next;
+};
+
+struct vring_avail {
+       __virtio16 flags;
+       __virtio16 idx;
+       __virtio16 ring[];
+};
+
+/* u32 is used here for ids for padding reasons. */
+struct vring_used_elem {
+       /* Index of start of used descriptor chain. */
+       __virtio32 id;
+       /* Total length of the descriptor chain which was used (written to) */
+       __virtio32 len;
+};
+
+struct vring_used {
+       __virtio16 flags;
+       __virtio16 idx;
+       struct vring_used_elem ring[];
+};
+
+struct vring {
+       unsigned int num;
+
+       struct vring_desc *desc;
+
+       struct vring_avail *avail;
+
+       struct vring_used *used;
+};
+
+/* Alignment requirements for vring elements.
+ * When using pre-virtio 1.0 layout, these fall out naturally.
+ */
+#define VRING_AVAIL_ALIGN_SIZE 2
+#define VRING_USED_ALIGN_SIZE 4
+#define VRING_DESC_ALIGN_SIZE 16
+
+/* The standard layout for the ring is a continuous chunk of memory which looks
+ * like this.  We assume num is a power of 2.
+ *
+ * struct vring
+ * {
+ *     // The actual descriptors (16 bytes each)
+ *     struct vring_desc desc[num];
+ *
+ *     // A ring of available descriptor heads with free-running index.
+ *     __virtio16 avail_flags;
+ *     __virtio16 avail_idx;
+ *     __virtio16 available[num];
+ *     __virtio16 used_event_idx;
+ *
+ *     // Padding to the next align boundary.
+ *     char pad[];
+ *
+ *     // A ring of used descriptor heads with free-running index.
+ *     __virtio16 used_flags;
+ *     __virtio16 used_idx;
+ *     struct vring_used_elem used[num];
+ *     __virtio16 avail_event_idx;
+ * };
+ */
+/* We publish the used event index at the end of the available ring, and vice
+ * versa. They are at the end for backwards compatibility. */
+#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
+#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num])
+
+static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p,
+                             unsigned long align)
+{
+       vr->num = num;
+       vr->desc = p;
+       vr->avail = p + num*sizeof(struct vring_desc);
+       vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
+               + align-1) & ~(align - 1));
+}
+
+static __inline__ unsigned vring_size(unsigned int num, unsigned long align)
+{
+       return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num)
+                + align - 1) & ~(align - 1))
+               + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num;
+}
+
+/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
+/* Assuming a given event_idx value from the other side, if
+ * we have just incremented index from old to new_idx,
+ * should we trigger an event? */
+static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)
+{
+       /* Note: Xen has similar logic for notification hold-off
+        * in include/xen/interface/io/ring.h with req_event and req_prod
+        * corresponding to event_idx + 1 and new_idx respectively.
+        * Note also that req_event and req_prod in Xen start at 1,
+        * event indexes in virtio start at 0. */
+       return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);
+}
+
+#endif /* _LINUX_VIRTIO_RING_H */
diff --git a/lib/libdss-include/include/linux/virtio_rng.h b/lib/libdss-include/include/linux/virtio_rng.h
new file mode 100644 (file)
index 0000000..c4d5de8
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _LINUX_VIRTIO_RNG_H
+#define _LINUX_VIRTIO_RNG_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers. */
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+#endif /* _LINUX_VIRTIO_RNG_H */
diff --git a/lib/libdss-include/include/linux/virtio_scsi.h b/lib/libdss-include/include/linux/virtio_scsi.h
new file mode 100644 (file)
index 0000000..cc18ef8
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_SCSI_H
+#define _LINUX_VIRTIO_SCSI_H
+
+#include <linux/virtio_types.h>
+
+/* Default values of the CDB and sense data size configuration fields */
+#define VIRTIO_SCSI_CDB_DEFAULT_SIZE   32
+#define VIRTIO_SCSI_SENSE_DEFAULT_SIZE 96
+
+#ifndef VIRTIO_SCSI_CDB_SIZE
+#define VIRTIO_SCSI_CDB_SIZE VIRTIO_SCSI_CDB_DEFAULT_SIZE
+#endif
+#ifndef VIRTIO_SCSI_SENSE_SIZE
+#define VIRTIO_SCSI_SENSE_SIZE VIRTIO_SCSI_SENSE_DEFAULT_SIZE
+#endif
+
+/* SCSI command request, followed by data-out */
+struct virtio_scsi_cmd_req {
+       __u8 lun[8];            /* Logical Unit Number */
+       __virtio64 tag;         /* Command identifier */
+       __u8 task_attr;         /* Task attribute */
+       __u8 prio;              /* SAM command priority field */
+       __u8 crn;
+       __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
+} __attribute__((packed));
+
+/* SCSI command request, followed by protection information */
+struct virtio_scsi_cmd_req_pi {
+       __u8 lun[8];            /* Logical Unit Number */
+       __virtio64 tag;         /* Command identifier */
+       __u8 task_attr;         /* Task attribute */
+       __u8 prio;              /* SAM command priority field */
+       __u8 crn;
+       __virtio32 pi_bytesout; /* DataOUT PI Number of bytes */
+       __virtio32 pi_bytesin;          /* DataIN PI Number of bytes */
+       __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
+} __attribute__((packed));
+
+/* Response, followed by sense data and data-in */
+struct virtio_scsi_cmd_resp {
+       __virtio32 sense_len;           /* Sense data length */
+       __virtio32 resid;               /* Residual bytes in data buffer */
+       __virtio16 status_qualifier;    /* Status qualifier */
+       __u8 status;            /* Command completion status */
+       __u8 response;          /* Response values */
+       __u8 sense[VIRTIO_SCSI_SENSE_SIZE];
+} __attribute__((packed));
+
+/* Task Management Request */
+struct virtio_scsi_ctrl_tmf_req {
+       __virtio32 type;
+       __virtio32 subtype;
+       __u8 lun[8];
+       __virtio64 tag;
+} __attribute__((packed));
+
+struct virtio_scsi_ctrl_tmf_resp {
+       __u8 response;
+} __attribute__((packed));
+
+/* Asynchronous notification query/subscription */
+struct virtio_scsi_ctrl_an_req {
+       __virtio32 type;
+       __u8 lun[8];
+       __virtio32 event_requested;
+} __attribute__((packed));
+
+struct virtio_scsi_ctrl_an_resp {
+       __virtio32 event_actual;
+       __u8 response;
+} __attribute__((packed));
+
+struct virtio_scsi_event {
+       __virtio32 event;
+       __u8 lun[8];
+       __virtio32 reason;
+} __attribute__((packed));
+
+struct virtio_scsi_config {
+       __u32 num_queues;
+       __u32 seg_max;
+       __u32 max_sectors;
+       __u32 cmd_per_lun;
+       __u32 event_info_size;
+       __u32 sense_size;
+       __u32 cdb_size;
+       __u16 max_channel;
+       __u16 max_target;
+       __u32 max_lun;
+} __attribute__((packed));
+
+/* Feature Bits */
+#define VIRTIO_SCSI_F_INOUT                    0
+#define VIRTIO_SCSI_F_HOTPLUG                  1
+#define VIRTIO_SCSI_F_CHANGE                   2
+#define VIRTIO_SCSI_F_T10_PI                   3
+
+/* Response codes */
+#define VIRTIO_SCSI_S_OK                       0
+#define VIRTIO_SCSI_S_OVERRUN                  1
+#define VIRTIO_SCSI_S_ABORTED                  2
+#define VIRTIO_SCSI_S_BAD_TARGET               3
+#define VIRTIO_SCSI_S_RESET                    4
+#define VIRTIO_SCSI_S_BUSY                     5
+#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
+#define VIRTIO_SCSI_S_TARGET_FAILURE           7
+#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
+#define VIRTIO_SCSI_S_FAILURE                  9
+#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
+#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
+#define VIRTIO_SCSI_S_INCORRECT_LUN            12
+
+/* Controlq type codes.  */
+#define VIRTIO_SCSI_T_TMF                      0
+#define VIRTIO_SCSI_T_AN_QUERY                 1
+#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
+
+/* Valid TMF subtypes.  */
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
+#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
+#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
+#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
+#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
+
+/* Events.  */
+#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
+#define VIRTIO_SCSI_T_NO_EVENT                 0
+#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
+#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
+#define VIRTIO_SCSI_T_PARAM_CHANGE             3
+
+/* Reasons of transport reset event */
+#define VIRTIO_SCSI_EVT_RESET_HARD             0
+#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
+#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
+
+#define VIRTIO_SCSI_S_SIMPLE                   0
+#define VIRTIO_SCSI_S_ORDERED                  1
+#define VIRTIO_SCSI_S_HEAD                     2
+#define VIRTIO_SCSI_S_ACA                      3
+
+
+#endif /* _LINUX_VIRTIO_SCSI_H */
diff --git a/lib/libdss-include/include/linux/virtio_types.h b/lib/libdss-include/include/linux/virtio_types.h
new file mode 100644 (file)
index 0000000..6162bdf
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _LINUX_VIRTIO_TYPES_H
+#define _LINUX_VIRTIO_TYPES_H
+/* Type definitions for virtio implementations.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ */
+#include <linux/types.h>
+
+/*
+ * __virtio{16,32,64} have the following meaning:
+ * - __u{16,32,64} for virtio devices in legacy mode, accessed in native endian
+ * - __le{16,32,64} for standard-compliant virtio devices
+ */
+
+typedef __u16 __bitwise__ __virtio16;
+typedef __u32 __bitwise__ __virtio32;
+typedef __u64 __bitwise__ __virtio64;
+
+#endif /* _LINUX_VIRTIO_TYPES_H */
diff --git a/lib/libdss-include/include/linux/vm_sockets.h b/lib/libdss-include/include/linux/vm_sockets.h
new file mode 100644 (file)
index 0000000..5216014
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * VMware vSockets Driver
+ *
+ * Copyright (C) 2007-2013 VMware, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation version 2 and no later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#ifndef _VM_SOCKETS_H
+#define _VM_SOCKETS_H
+
+#include <linux/socket.h>
+
+/* Option name for STREAM socket buffer size.  Use as the option name in
+ * setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
+ * specifies the size of the buffer underlying a vSockets STREAM socket.
+ * Value is clamped to the MIN and MAX.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_SIZE 0
+
+/* Option name for STREAM socket minimum buffer size.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
+ * specifies the minimum size allowed for the buffer underlying a vSockets
+ * STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_MIN_SIZE 1
+
+/* Option name for STREAM socket maximum buffer size.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get an unsigned long long
+ * that specifies the maximum size allowed for the buffer underlying a
+ * vSockets STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_MAX_SIZE 2
+
+/* Option name for socket peer's host-specific VM ID.  Use as the option name
+ * in getsockopt(3) to get a host-specific identifier for the peer endpoint's
+ * VM.  The identifier is a signed integer.
+ * Only available for hypervisor endpoints.
+ */
+
+#define SO_VM_SOCKETS_PEER_HOST_VM_ID 3
+
+/* Option name for determining if a socket is trusted.  Use as the option name
+ * in getsockopt(3) to determine if a socket is trusted.  The value is a
+ * signed integer.
+ */
+
+#define SO_VM_SOCKETS_TRUSTED 5
+
+/* Option name for STREAM socket connection timeout.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get the connection
+ * timeout for a STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT 6
+
+/* Option name for using non-blocking send/receive.  Use as the option name
+ * for setsockopt(3) or getsockopt(3) to set or get the non-blocking
+ * transmit/receive flag for a STREAM socket.  This flag determines whether
+ * send() and recv() can be called in non-blocking contexts for the given
+ * socket.  The value is a signed integer.
+ *
+ * This option is only relevant to kernel endpoints, where descheduling the
+ * thread of execution is not allowed, for example, while holding a spinlock.
+ * It is not to be confused with conventional non-blocking socket operations.
+ *
+ * Only available for hypervisor endpoints.
+ */
+
+#define SO_VM_SOCKETS_NONBLOCK_TXRX 7
+
+/* The vSocket equivalent of INADDR_ANY.  This works for the svm_cid field of
+ * sockaddr_vm and indicates the context ID of the current endpoint.
+ */
+
+#define VMADDR_CID_ANY -1U
+
+/* Bind to any available port.  Works for the svm_port field of
+ * sockaddr_vm.
+ */
+
+#define VMADDR_PORT_ANY -1U
+
+/* Use this as the destination CID in an address when referring to the
+ * hypervisor.  VMCI relies on it being 0, but this would be useful for other
+ * transports too.
+ */
+
+#define VMADDR_CID_HYPERVISOR 0
+
+/* This CID is specific to VMCI and can be considered reserved (even VMCI
+ * doesn't use it anymore, it's a legacy value from an older release).
+ */
+
+#define VMADDR_CID_RESERVED 1
+
+/* Use this as the destination CID in an address when referring to the host
+ * (any process other than the hypervisor).  VMCI relies on it being 2, but
+ * this would be useful for other transports too.
+ */
+
+#define VMADDR_CID_HOST 2
+
+/* Invalid vSockets version. */
+
+#define VM_SOCKETS_INVALID_VERSION -1U
+
+/* The epoch (first) component of the vSockets version.  A single byte
+ * representing the epoch component of the vSockets version.
+ */
+
+#define VM_SOCKETS_VERSION_EPOCH(_v) (((_v) & 0xFF000000) >> 24)
+
+/* The major (second) component of the vSockets version.   A single byte
+ * representing the major component of the vSockets version.  Typically
+ * changes for every major release of a product.
+ */
+
+#define VM_SOCKETS_VERSION_MAJOR(_v) (((_v) & 0x00FF0000) >> 16)
+
+/* The minor (third) component of the vSockets version.  Two bytes representing
+ * the minor component of the vSockets version.
+ */
+
+#define VM_SOCKETS_VERSION_MINOR(_v) (((_v) & 0x0000FFFF))
+
+/* Address structure for vSockets.   The address family should be set to
+ * AF_VSOCK.  The structure members should all align on their natural
+ * boundaries without resorting to compiler packing directives.  The total size
+ * of this structure should be exactly the same as that of struct sockaddr.
+ */
+
+struct sockaddr_vm {
+       __kernel_sa_family_t svm_family;
+       unsigned short svm_reserved1;
+       unsigned int svm_port;
+       unsigned int svm_cid;
+       unsigned char svm_zero[sizeof(struct sockaddr) -
+                              sizeof(sa_family_t) -
+                              sizeof(unsigned short) -
+                              sizeof(unsigned int) - sizeof(unsigned int)];
+};
+
+#define IOCTL_VM_SOCKETS_GET_LOCAL_CID         _IO(7, 0xb9)
+
+#endif /* _VM_SOCKETS_H */
diff --git a/lib/libdss-include/include/linux/vt.h b/lib/libdss-include/include/linux/vt.h
new file mode 100644 (file)
index 0000000..7ffa11f
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef _LINUX_VT_H
+#define _LINUX_VT_H
+
+
+/*
+ * These constants are also useful for user-level apps (e.g., VC
+ * resizing).
+ */
+#define MIN_NR_CONSOLES 1       /* must be at least 1 */
+#define MAX_NR_CONSOLES        63      /* serial lines start at 64 */
+#define MAX_NR_USER_CONSOLES 63        /* must be root to allocate above this */
+               /* Note: the ioctl VT_GETSTATE does not work for
+                  consoles 16 and higher (since it returns a short) */
+
+/* 0x56 is 'V', to avoid collision with termios and kd */
+
+#define VT_OPENQRY     0x5600  /* find available vt */
+
+struct vt_mode {
+       char mode;              /* vt mode */
+       char waitv;             /* if set, hang on writes if not active */
+       short relsig;           /* signal to raise on release req */
+       short acqsig;           /* signal to raise on acquisition */
+       short frsig;            /* unused (set to 0) */
+};
+#define VT_GETMODE     0x5601  /* get mode of active vt */
+#define VT_SETMODE     0x5602  /* set mode of active vt */
+#define                VT_AUTO         0x00    /* auto vt switching */
+#define                VT_PROCESS      0x01    /* process controls switching */
+#define                VT_ACKACQ       0x02    /* acknowledge switch */
+
+struct vt_stat {
+       unsigned short v_active;        /* active vt */
+       unsigned short v_signal;        /* signal to send */
+       unsigned short v_state;         /* vt bitmask */
+};
+#define VT_GETSTATE    0x5603  /* get global vt state info */
+#define VT_SENDSIG     0x5604  /* signal to send to bitmask of vts */
+
+#define VT_RELDISP     0x5605  /* release display */
+
+#define VT_ACTIVATE    0x5606  /* make vt active */
+#define VT_WAITACTIVE  0x5607  /* wait for vt active */
+#define VT_DISALLOCATE 0x5608  /* free memory associated to vt */
+
+struct vt_sizes {
+       unsigned short v_rows;          /* number of rows */
+       unsigned short v_cols;          /* number of columns */
+       unsigned short v_scrollsize;    /* number of lines of scrollback */
+};
+#define VT_RESIZE      0x5609  /* set kernel's idea of screensize */
+
+struct vt_consize {
+       unsigned short v_rows;  /* number of rows */
+       unsigned short v_cols;  /* number of columns */
+       unsigned short v_vlin;  /* number of pixel rows on screen */
+       unsigned short v_clin;  /* number of pixel rows per character */
+       unsigned short v_vcol;  /* number of pixel columns on screen */
+       unsigned short v_ccol;  /* number of pixel columns per character */
+};
+#define VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */
+#define VT_LOCKSWITCH   0x560B  /* disallow vt switching */
+#define VT_UNLOCKSWITCH 0x560C  /* allow vt switching */
+#define VT_GETHIFONTMASK 0x560D  /* return hi font mask */
+
+struct vt_event {
+       unsigned int event;
+#define VT_EVENT_SWITCH                0x0001  /* Console switch */
+#define VT_EVENT_BLANK         0x0002  /* Screen blank */
+#define VT_EVENT_UNBLANK       0x0004  /* Screen unblank */
+#define VT_EVENT_RESIZE                0x0008  /* Resize display */
+#define VT_MAX_EVENT           0x000F
+       unsigned int oldev;             /* Old console */
+       unsigned int newev;             /* New console (if changing) */
+       unsigned int pad[4];            /* Padding for expansion */
+};
+
+#define VT_WAITEVENT   0x560E  /* Wait for an event */
+
+struct vt_setactivate {
+       unsigned int console;
+       struct vt_mode mode;
+};
+
+#define VT_SETACTIVATE 0x560F  /* Activate and set the mode of a console */
+
+#endif /* _LINUX_VT_H */
diff --git a/lib/libdss-include/include/linux/wait.h b/lib/libdss-include/include/linux/wait.h
new file mode 100644 (file)
index 0000000..bb88233
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _LINUX_WAIT_H
+#define _LINUX_WAIT_H
+
+#define WNOHANG                0x00000001
+#define WUNTRACED      0x00000002
+#define WSTOPPED       WUNTRACED
+#define WEXITED                0x00000004
+#define WCONTINUED     0x00000008
+#define WNOWAIT                0x01000000      /* Don't reap, just poll status.  */
+
+#define __WNOTHREAD    0x20000000      /* Don't wait on children of other threads in this group */
+#define __WALL         0x40000000      /* Wait on all children, regardless of type */
+#define __WCLONE       0x80000000      /* Wait only on non-SIGCHLD children */
+
+/* First argument to waitid: */
+#define P_ALL          0
+#define P_PID          1
+#define P_PGID         2
+
+
+#endif /* _LINUX_WAIT_H */
diff --git a/lib/libdss-include/include/linux/wanrouter.h b/lib/libdss-include/include/linux/wanrouter.h
new file mode 100644 (file)
index 0000000..cc61950
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * wanrouter.h Legacy declarations kept around until X25 is removed
+ */
+
+#ifndef _ROUTER_H
+#define _ROUTER_H
+
+/* 'state' defines */
+enum wan_states
+{
+       WAN_UNCONFIGURED,       /* link/channel is not configured */
+       WAN_DISCONNECTED,       /* link/channel is disconnected */
+       WAN_CONNECTING,         /* connection is in progress */
+       WAN_CONNECTED           /* link/channel is operational */
+};
+
+#endif /* _ROUTER_H */
diff --git a/lib/libdss-include/include/linux/watchdog.h b/lib/libdss-include/include/linux/watchdog.h
new file mode 100644 (file)
index 0000000..a89ed11
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ *     Generic watchdog defines. Derived from..
+ *
+ * Berkshire PC Watchdog Defines
+ * by Ken Hollis <khollis@bitgate.com>
+ *
+ */
+
+#ifndef _LINUX_WATCHDOG_H
+#define _LINUX_WATCHDOG_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+#define        WATCHDOG_IOCTL_BASE     'W'
+
+struct watchdog_info {
+       __u32 options;          /* Options the card/driver supports */
+       __u32 firmware_version; /* Firmware version of the card */
+       __u8  identity[32];     /* Identity of the board */
+};
+
+#define        WDIOC_GETSUPPORT        _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)
+#define        WDIOC_GETSTATUS         _IOR(WATCHDOG_IOCTL_BASE, 1, int)
+#define        WDIOC_GETBOOTSTATUS     _IOR(WATCHDOG_IOCTL_BASE, 2, int)
+#define        WDIOC_GETTEMP           _IOR(WATCHDOG_IOCTL_BASE, 3, int)
+#define        WDIOC_SETOPTIONS        _IOR(WATCHDOG_IOCTL_BASE, 4, int)
+#define        WDIOC_KEEPALIVE         _IOR(WATCHDOG_IOCTL_BASE, 5, int)
+#define        WDIOC_SETTIMEOUT        _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
+#define        WDIOC_GETTIMEOUT        _IOR(WATCHDOG_IOCTL_BASE, 7, int)
+#define        WDIOC_SETPRETIMEOUT     _IOWR(WATCHDOG_IOCTL_BASE, 8, int)
+#define        WDIOC_GETPRETIMEOUT     _IOR(WATCHDOG_IOCTL_BASE, 9, int)
+#define        WDIOC_GETTIMELEFT       _IOR(WATCHDOG_IOCTL_BASE, 10, int)
+
+#define        WDIOF_UNKNOWN           -1      /* Unknown flag error */
+#define        WDIOS_UNKNOWN           -1      /* Unknown status error */
+
+#define        WDIOF_OVERHEAT          0x0001  /* Reset due to CPU overheat */
+#define        WDIOF_FANFAULT          0x0002  /* Fan failed */
+#define        WDIOF_EXTERN1           0x0004  /* External relay 1 */
+#define        WDIOF_EXTERN2           0x0008  /* External relay 2 */
+#define        WDIOF_POWERUNDER        0x0010  /* Power bad/power fault */
+#define        WDIOF_CARDRESET         0x0020  /* Card previously reset the CPU */
+#define        WDIOF_POWEROVER         0x0040  /* Power over voltage */
+#define        WDIOF_SETTIMEOUT        0x0080  /* Set timeout (in seconds) */
+#define        WDIOF_MAGICCLOSE        0x0100  /* Supports magic close char */
+#define        WDIOF_PRETIMEOUT        0x0200  /* Pretimeout (in seconds), get/set */
+#define        WDIOF_ALARMONLY         0x0400  /* Watchdog triggers a management or
+                                          other external alarm not a reboot */
+#define        WDIOF_KEEPALIVEPING     0x8000  /* Keep alive ping reply */
+
+#define        WDIOS_DISABLECARD       0x0001  /* Turn off the watchdog timer */
+#define        WDIOS_ENABLECARD        0x0002  /* Turn on the watchdog timer */
+#define        WDIOS_TEMPPANIC         0x0004  /* Kernel panic on temperature trip */
+
+
+#endif /* _LINUX_WATCHDOG_H */
diff --git a/lib/libdss-include/include/linux/wimax.h b/lib/libdss-include/include/linux/wimax.h
new file mode 100644 (file)
index 0000000..9f6b77a
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+ * Linux WiMax
+ * API for user space
+ *
+ *
+ * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *   * Neither the name of Intel Corporation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Intel Corporation <linux-wimax@intel.com>
+ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
+ *  - Initial implementation
+ *
+ *
+ * This file declares the user/kernel protocol that is spoken over
+ * Generic Netlink, as well as any type declaration that is to be used
+ * by kernel and user space.
+ *
+ * It is intended for user space to clone it verbatim to use it as a
+ * primary reference for definitions.
+ *
+ * Stuff intended for kernel usage as well as full protocol and stack
+ * documentation is rooted in include/net/wimax.h.
+ */
+
+#ifndef __LINUX__WIMAX_H__
+#define __LINUX__WIMAX_H__
+
+#include <linux/types.h>
+
+enum {
+       /**
+        * Version of the interface (unsigned decimal, MMm, max 25.5)
+        * M - Major: change if removing or modifying an existing call.
+        * m - minor: change when adding a new call
+        */
+       WIMAX_GNL_VERSION = 01,
+       /* Generic NetLink attributes */
+       WIMAX_GNL_ATTR_INVALID = 0x00,
+       WIMAX_GNL_ATTR_MAX = 10,
+};
+
+
+/*
+ * Generic NetLink operations
+ *
+ * Most of these map to an API call; _OP_ stands for operation, _RP_
+ * for reply and _RE_ for report (aka: signal).
+ */
+enum {
+       WIMAX_GNL_OP_MSG_FROM_USER,     /* User to kernel message */
+       WIMAX_GNL_OP_MSG_TO_USER,       /* Kernel to user message */
+       WIMAX_GNL_OP_RFKILL,    /* Run wimax_rfkill() */
+       WIMAX_GNL_OP_RESET,     /* Run wimax_rfkill() */
+       WIMAX_GNL_RE_STATE_CHANGE,      /* Report: status change */
+       WIMAX_GNL_OP_STATE_GET,         /* Request for current state */
+};
+
+
+/* Message from user / to user */
+enum {
+       WIMAX_GNL_MSG_IFIDX = 1,
+       WIMAX_GNL_MSG_PIPE_NAME,
+       WIMAX_GNL_MSG_DATA,
+};
+
+
+/*
+ * wimax_rfkill()
+ *
+ * The state of the radio (ON/OFF) is mapped to the rfkill subsystem's
+ * switch state (DISABLED/ENABLED).
+ */
+enum wimax_rf_state {
+       WIMAX_RF_OFF = 0,       /* Radio is off, rfkill on/enabled */
+       WIMAX_RF_ON = 1,        /* Radio is on, rfkill off/disabled */
+       WIMAX_RF_QUERY = 2,
+};
+
+/* Attributes */
+enum {
+       WIMAX_GNL_RFKILL_IFIDX = 1,
+       WIMAX_GNL_RFKILL_STATE,
+};
+
+
+/* Attributes for wimax_reset() */
+enum {
+       WIMAX_GNL_RESET_IFIDX = 1,
+};
+
+/* Attributes for wimax_state_get() */
+enum {
+       WIMAX_GNL_STGET_IFIDX = 1,
+};
+
+/*
+ * Attributes for the Report State Change
+ *
+ * For now we just have the old and new states; new attributes might
+ * be added later on.
+ */
+enum {
+       WIMAX_GNL_STCH_IFIDX = 1,
+       WIMAX_GNL_STCH_STATE_OLD,
+       WIMAX_GNL_STCH_STATE_NEW,
+};
+
+
+/**
+ * enum wimax_st - The different states of a WiMAX device
+ * @__WIMAX_ST_NULL: The device structure has been allocated and zeroed,
+ *     but still wimax_dev_add() hasn't been called. There is no state.
+ *
+ * @WIMAX_ST_DOWN: The device has been registered with the WiMAX and
+ *     networking stacks, but it is not initialized (normally that is
+ *     done with 'ifconfig DEV up' [or equivalent], which can upload
+ *     firmware and enable communications with the device).
+ *     In this state, the device is powered down and using as less
+ *     power as possible.
+ *     This state is the default after a call to wimax_dev_add(). It
+ *     is ok to have drivers move directly to %WIMAX_ST_UNINITIALIZED
+ *     or %WIMAX_ST_RADIO_OFF in _probe() after the call to
+ *     wimax_dev_add().
+ *     It is recommended that the driver leaves this state when
+ *     calling 'ifconfig DEV up' and enters it back on 'ifconfig DEV
+ *     down'.
+ *
+ * @__WIMAX_ST_QUIESCING: The device is being torn down, so no API
+ *     operations are allowed to proceed except the ones needed to
+ *     complete the device clean up process.
+ *
+ * @WIMAX_ST_UNINITIALIZED: [optional] Communication with the device
+ *     is setup, but the device still requires some configuration
+ *     before being operational.
+ *     Some WiMAX API calls might work.
+ *
+ * @WIMAX_ST_RADIO_OFF: The device is fully up; radio is off (wether
+ *     by hardware or software switches).
+ *     It is recommended to always leave the device in this state
+ *     after initialization.
+ *
+ * @WIMAX_ST_READY: The device is fully up and radio is on.
+ *
+ * @WIMAX_ST_SCANNING: [optional] The device has been instructed to
+ *     scan. In this state, the device cannot be actively connected to
+ *     a network.
+ *
+ * @WIMAX_ST_CONNECTING: The device is connecting to a network. This
+ *     state exists because in some devices, the connect process can
+ *     include a number of negotiations between user space, kernel
+ *     space and the device. User space needs to know what the device
+ *     is doing. If the connect sequence in a device is atomic and
+ *     fast, the device can transition directly to CONNECTED
+ *
+ * @WIMAX_ST_CONNECTED: The device is connected to a network.
+ *
+ * @__WIMAX_ST_INVALID: This is an invalid state used to mark the
+ *     maximum numeric value of states.
+ *
+ * Description:
+ *
+ * Transitions from one state to another one are atomic and can only
+ * be caused in kernel space with wimax_state_change(). To read the
+ * state, use wimax_state_get().
+ *
+ * States starting with __ are internal and shall not be used or
+ * referred to by drivers or userspace. They look ugly, but that's the
+ * point -- if any use is made non-internal to the stack, it is easier
+ * to catch on review.
+ *
+ * All API operations [with well defined exceptions] will take the
+ * device mutex before starting and then check the state. If the state
+ * is %__WIMAX_ST_NULL, %WIMAX_ST_DOWN, %WIMAX_ST_UNINITIALIZED or
+ * %__WIMAX_ST_QUIESCING, it will drop the lock and quit with
+ * -%EINVAL, -%ENOMEDIUM, -%ENOTCONN or -%ESHUTDOWN.
+ *
+ * The order of the definitions is important, so we can do numerical
+ * comparisons (eg: < %WIMAX_ST_RADIO_OFF means the device is not ready
+ * to operate).
+ */
+/*
+ * The allowed state transitions are described in the table below
+ * (states in rows can go to states in columns where there is an X):
+ *
+ *                                  UNINI   RADIO READY SCAN CONNEC CONNEC
+ *             NULL DOWN QUIESCING TIALIZED  OFF        NING  TING   TED
+ * NULL         -    x
+ * DOWN              -      x        x       x
+ * QUIESCING         x      -
+ * UNINITIALIZED            x        -       x
+ * RADIO_OFF                x                -     x
+ * READY                    x                x     -     x     x      x
+ * SCANNING                 x                x     x     -     x      x
+ * CONNECTING               x                x     x     x     -      x
+ * CONNECTED                x                x     x                  -
+ *
+ * This table not available in kernel-doc because the formatting messes it up.
+ */
+ enum wimax_st {
+       __WIMAX_ST_NULL = 0,
+       WIMAX_ST_DOWN,
+       __WIMAX_ST_QUIESCING,
+       WIMAX_ST_UNINITIALIZED,
+       WIMAX_ST_RADIO_OFF,
+       WIMAX_ST_READY,
+       WIMAX_ST_SCANNING,
+       WIMAX_ST_CONNECTING,
+       WIMAX_ST_CONNECTED,
+       __WIMAX_ST_INVALID                      /* Always keep last */
+};
+
+
+#endif /* #ifndef __LINUX__WIMAX_H__ */
diff --git a/lib/libdss-include/include/linux/wimax/i2400m.h b/lib/libdss-include/include/linux/wimax/i2400m.h
new file mode 100644 (file)
index 0000000..fd198bc
--- /dev/null
@@ -0,0 +1,572 @@
+/*
+ * Intel Wireless WiMax Connection 2400m
+ * Host-Device protocol interface definitions
+ *
+ *
+ * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *   * Neither the name of Intel Corporation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Intel Corporation <linux-wimax@intel.com>
+ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
+ *  - Initial implementation
+ *
+ *
+ * This header defines the data structures and constants used to
+ * communicate with the device.
+ *
+ * BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL
+ *
+ * The firmware upload protocol is quite simple and only requires a
+ * handful of commands. See drivers/net/wimax/i2400m/fw.c for more
+ * details.
+ *
+ * The BCF data structure is for the firmware file header.
+ *
+ *
+ * THE DATA / CONTROL PROTOCOL
+ *
+ * This is the normal protocol spoken with the device once the
+ * firmware is uploaded. It transports data payloads and control
+ * messages back and forth.
+ *
+ * It consists 'messages' that pack one or more payloads each. The
+ * format is described in detail in drivers/net/wimax/i2400m/rx.c and
+ * tx.c.
+ *
+ *
+ * THE L3L4 PROTOCOL
+ *
+ * The term L3L4 refers to Layer 3 (the device), Layer 4 (the
+ * driver/host software).
+ *
+ * This is the control protocol used by the host to control the i2400m
+ * device (scan, connect, disconnect...). This is sent to / received
+ * as control frames. These frames consist of a header and zero or
+ * more TLVs with information. We call each control frame a "message".
+ *
+ * Each message is composed of:
+ *
+ * HEADER
+ * [TLV0 + PAYLOAD0]
+ * [TLV1 + PAYLOAD1]
+ * [...]
+ * [TLVN + PAYLOADN]
+ *
+ * The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are
+ * defined by a TLV structure (Type Length Value) which is a 'header'
+ * (struct i2400m_tlv_hdr) and then the payload.
+ *
+ * All integers are represented as Little Endian.
+ *
+ * - REQUESTS AND EVENTS
+ *
+ * The requests can be clasified as follows:
+ *
+ *   COMMAND:  implies a request from the host to the device requesting
+ *             an action being performed. The device will reply with a
+ *             message (with the same type as the command), status and
+ *             no (TLV) payload. Execution of a command might cause
+ *             events (of different type) to be sent later on as
+ *             device's state changes.
+ *
+ *   GET/SET:  similar to COMMAND, but will not cause other
+ *             EVENTs. The reply, in the case of GET, will contain
+ *             TLVs with the requested information.
+ *
+ *   EVENT:    asynchronous messages sent from the device, maybe as a
+ *             consequence of previous COMMANDs but disassociated from
+ *             them.
+ *
+ * Only one request might be pending at the same time (ie: don't
+ * parallelize nor post another GET request before the previous
+ * COMMAND has been acknowledged with it's corresponding reply by the
+ * device).
+ *
+ * The different requests and their formats are described below:
+ *
+ *  I2400M_MT_*   Message types
+ *  I2400M_MS_*   Message status (for replies, events)
+ *  i2400m_tlv_*  TLVs
+ *
+ * data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the
+ * operation.
+ */
+
+#ifndef __LINUX__WIMAX__I2400M_H__
+#define __LINUX__WIMAX__I2400M_H__
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+ * Host Device Interface (HDI) common to all busses
+ */
+
+/* Boot-mode (firmware upload mode) commands */
+
+/* Header for the firmware file */
+struct i2400m_bcf_hdr {
+       __le32 module_type;
+       __le32 header_len;
+       __le32 header_version;
+       __le32 module_id;
+       __le32 module_vendor;
+       __le32 date;            /* BCD YYYMMDD */
+       __le32 size;            /* in dwords */
+       __le32 key_size;        /* in dwords */
+       __le32 modulus_size;    /* in dwords */
+       __le32 exponent_size;   /* in dwords */
+       __u8 reserved[88];
+} __attribute__ ((packed));
+
+/* Boot mode opcodes */
+enum i2400m_brh_opcode {
+       I2400M_BRH_READ = 1,
+       I2400M_BRH_WRITE = 2,
+       I2400M_BRH_JUMP = 3,
+       I2400M_BRH_SIGNED_JUMP = 8,
+       I2400M_BRH_HASH_PAYLOAD_ONLY = 9,
+};
+
+/* Boot mode command masks and stuff */
+enum i2400m_brh {
+       I2400M_BRH_SIGNATURE = 0xcbbc0000,
+       I2400M_BRH_SIGNATURE_MASK = 0xffff0000,
+       I2400M_BRH_SIGNATURE_SHIFT = 16,
+       I2400M_BRH_OPCODE_MASK = 0x0000000f,
+       I2400M_BRH_RESPONSE_MASK = 0x000000f0,
+       I2400M_BRH_RESPONSE_SHIFT = 4,
+       I2400M_BRH_DIRECT_ACCESS = 0x00000400,
+       I2400M_BRH_RESPONSE_REQUIRED = 0x00000200,
+       I2400M_BRH_USE_CHECKSUM = 0x00000100,
+};
+
+
+/**
+ * i2400m_bootrom_header - Header for a boot-mode command
+ *
+ * @cmd: the above command descriptor
+ * @target_addr: where on the device memory should the action be performed.
+ * @data_size: for read/write, amount of data to be read/written
+ * @block_checksum: checksum value (if applicable)
+ * @payload: the beginning of data attached to this header
+ */
+struct i2400m_bootrom_header {
+       __le32 command;         /* Compose with enum i2400_brh */
+       __le32 target_addr;
+       __le32 data_size;
+       __le32 block_checksum;
+       char payload[0];
+} __attribute__ ((packed));
+
+
+/*
+ * Data / control protocol
+ */
+
+/* Packet types for the host-device interface */
+enum i2400m_pt {
+       I2400M_PT_DATA = 0,
+       I2400M_PT_CTRL,
+       I2400M_PT_TRACE,        /* For device debug */
+       I2400M_PT_RESET_WARM,   /* device reset */
+       I2400M_PT_RESET_COLD,   /* USB[transport] reset, like reconnect */
+       I2400M_PT_EDATA,        /* Extended RX data */
+       I2400M_PT_ILLEGAL
+};
+
+
+/*
+ * Payload for a data packet
+ *
+ * This is prefixed to each and every outgoing DATA type.
+ */
+struct i2400m_pl_data_hdr {
+       __le32 reserved;
+} __attribute__((packed));
+
+
+/*
+ * Payload for an extended data packet
+ *
+ * New in fw v1.4
+ *
+ * @reorder: if this payload has to be reorder or not (and how)
+ * @cs: the type of data in the packet, as defined per (802.16e
+ *     T11.13.19.1). Currently only 2 (IPv4 packet) supported.
+ *
+ * This is prefixed to each and every INCOMING DATA packet.
+ */
+struct i2400m_pl_edata_hdr {
+       __le32 reorder;         /* bits defined in i2400m_ro */
+       __u8 cs;
+       __u8 reserved[11];
+} __attribute__((packed));
+
+enum i2400m_cs {
+       I2400M_CS_IPV4_0 = 0,
+       I2400M_CS_IPV4 = 2,
+};
+
+enum i2400m_ro {
+       I2400M_RO_NEEDED     = 0x01,
+       I2400M_RO_TYPE       = 0x03,
+       I2400M_RO_TYPE_SHIFT = 1,
+       I2400M_RO_CIN        = 0x0f,
+       I2400M_RO_CIN_SHIFT  = 4,
+       I2400M_RO_FBN        = 0x07ff,
+       I2400M_RO_FBN_SHIFT  = 8,
+       I2400M_RO_SN         = 0x07ff,
+       I2400M_RO_SN_SHIFT   = 21,
+};
+
+enum i2400m_ro_type {
+       I2400M_RO_TYPE_RESET = 0,
+       I2400M_RO_TYPE_PACKET,
+       I2400M_RO_TYPE_WS,
+       I2400M_RO_TYPE_PACKET_WS,
+};
+
+
+/* Misc constants */
+enum {
+       I2400M_PL_ALIGN = 16,   /* Payload data size alignment */
+       I2400M_PL_SIZE_MAX = 0x3EFF,
+       I2400M_MAX_PLS_IN_MSG = 60,
+       /* protocol barkers: sync sequences; for notifications they
+        * are sent in groups of four. */
+       I2400M_H2D_PREVIEW_BARKER = 0xcafe900d,
+       I2400M_COLD_RESET_BARKER = 0xc01dc01d,
+       I2400M_WARM_RESET_BARKER = 0x50f750f7,
+       I2400M_NBOOT_BARKER = 0xdeadbeef,
+       I2400M_SBOOT_BARKER = 0x0ff1c1a1,
+       I2400M_SBOOT_BARKER_6050 = 0x80000001,
+       I2400M_ACK_BARKER = 0xfeedbabe,
+       I2400M_D2H_MSG_BARKER = 0xbeefbabe,
+};
+
+
+/*
+ * Hardware payload descriptor
+ *
+ * Bitfields encoded in a struct to enforce typing semantics.
+ *
+ * Look in rx.c and tx.c for a full description of the format.
+ */
+struct i2400m_pld {
+       __le32 val;
+} __attribute__ ((packed));
+
+#define I2400M_PLD_SIZE_MASK 0x00003fff
+#define I2400M_PLD_TYPE_SHIFT 16
+#define I2400M_PLD_TYPE_MASK 0x000f0000
+
+/*
+ * Header for a TX message or RX message
+ *
+ * @barker: preamble
+ * @size: used for management of the FIFO queue buffer; before
+ *     sending, this is converted to be a real preamble. This
+ *     indicates the real size of the TX message that starts at this
+ *     point. If the highest bit is set, then this message is to be
+ *     skipped.
+ * @sequence: sequence number of this message
+ * @offset: offset where the message itself starts -- see the comments
+ *     in the file header about message header and payload descriptor
+ *     alignment.
+ * @num_pls: number of payloads in this message
+ * @padding: amount of padding bytes at the end of the message to make
+ *           it be of block-size aligned
+ *
+ * Look in rx.c and tx.c for a full description of the format.
+ */
+struct i2400m_msg_hdr {
+       union {
+               __le32 barker;
+               __u32 size;     /* same size type as barker!! */
+       };
+       union {
+               __le32 sequence;
+               __u32 offset;   /* same size type as barker!! */
+       };
+       __le16 num_pls;
+       __le16 rsv1;
+       __le16 padding;
+       __le16 rsv2;
+       struct i2400m_pld pld[0];
+} __attribute__ ((packed));
+
+
+
+/*
+ * L3/L4 control protocol
+ */
+
+enum {
+       /* Interface version */
+       I2400M_L3L4_VERSION             = 0x0100,
+};
+
+/* Message types */
+enum i2400m_mt {
+       I2400M_MT_RESERVED              = 0x0000,
+       I2400M_MT_INVALID               = 0xffff,
+       I2400M_MT_REPORT_MASK           = 0x8000,
+
+       I2400M_MT_GET_SCAN_RESULT       = 0x4202,
+       I2400M_MT_SET_SCAN_PARAM        = 0x4402,
+       I2400M_MT_CMD_RF_CONTROL        = 0x4602,
+       I2400M_MT_CMD_SCAN              = 0x4603,
+       I2400M_MT_CMD_CONNECT           = 0x4604,
+       I2400M_MT_CMD_DISCONNECT        = 0x4605,
+       I2400M_MT_CMD_EXIT_IDLE         = 0x4606,
+       I2400M_MT_GET_LM_VERSION        = 0x5201,
+       I2400M_MT_GET_DEVICE_INFO       = 0x5202,
+       I2400M_MT_GET_LINK_STATUS       = 0x5203,
+       I2400M_MT_GET_STATISTICS        = 0x5204,
+       I2400M_MT_GET_STATE             = 0x5205,
+       I2400M_MT_GET_MEDIA_STATUS      = 0x5206,
+       I2400M_MT_SET_INIT_CONFIG       = 0x5404,
+       I2400M_MT_CMD_INIT              = 0x5601,
+       I2400M_MT_CMD_TERMINATE         = 0x5602,
+       I2400M_MT_CMD_MODE_OF_OP        = 0x5603,
+       I2400M_MT_CMD_RESET_DEVICE      = 0x5604,
+       I2400M_MT_CMD_MONITOR_CONTROL   = 0x5605,
+       I2400M_MT_CMD_ENTER_POWERSAVE   = 0x5606,
+       I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201,
+       I2400M_MT_SET_EAP_SUCCESS       = 0x6402,
+       I2400M_MT_SET_EAP_FAIL          = 0x6403,
+       I2400M_MT_SET_EAP_KEY           = 0x6404,
+       I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602,
+       I2400M_MT_REPORT_SCAN_RESULT    = 0xc002,
+       I2400M_MT_REPORT_STATE          = 0xd002,
+       I2400M_MT_REPORT_POWERSAVE_READY = 0xd005,
+       I2400M_MT_REPORT_EAP_REQUEST    = 0xe002,
+       I2400M_MT_REPORT_EAP_RESTART    = 0xe003,
+       I2400M_MT_REPORT_ALT_ACCEPT     = 0xe004,
+       I2400M_MT_REPORT_KEY_REQUEST    = 0xe005,
+};
+
+
+/*
+ * Message Ack Status codes
+ *
+ * When a message is replied-to, this status is reported.
+ */
+enum i2400m_ms {
+       I2400M_MS_DONE_OK                  = 0,
+       I2400M_MS_DONE_IN_PROGRESS         = 1,
+       I2400M_MS_INVALID_OP               = 2,
+       I2400M_MS_BAD_STATE                = 3,
+       I2400M_MS_ILLEGAL_VALUE            = 4,
+       I2400M_MS_MISSING_PARAMS           = 5,
+       I2400M_MS_VERSION_ERROR            = 6,
+       I2400M_MS_ACCESSIBILITY_ERROR      = 7,
+       I2400M_MS_BUSY                     = 8,
+       I2400M_MS_CORRUPTED_TLV            = 9,
+       I2400M_MS_UNINITIALIZED            = 10,
+       I2400M_MS_UNKNOWN_ERROR            = 11,
+       I2400M_MS_PRODUCTION_ERROR         = 12,
+       I2400M_MS_NO_RF                    = 13,
+       I2400M_MS_NOT_READY_FOR_POWERSAVE  = 14,
+       I2400M_MS_THERMAL_CRITICAL         = 15,
+       I2400M_MS_MAX
+};
+
+
+/**
+ * i2400m_tlv - enumeration of the different types of TLVs
+ *
+ * TLVs stand for type-length-value and are the header for a payload
+ * composed of almost anything. Each payload has a type assigned
+ * and a length.
+ */
+enum i2400m_tlv {
+       I2400M_TLV_L4_MESSAGE_VERSIONS = 129,
+       I2400M_TLV_SYSTEM_STATE = 141,
+       I2400M_TLV_MEDIA_STATUS = 161,
+       I2400M_TLV_RF_OPERATION = 162,
+       I2400M_TLV_RF_STATUS = 163,
+       I2400M_TLV_DEVICE_RESET_TYPE = 132,
+       I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601,
+       I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611,
+       I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614,
+       I2400M_TLV_CONFIG_DL_HOST_REORDER = 615,
+};
+
+
+struct i2400m_tlv_hdr {
+       __le16 type;
+       __le16 length;          /* payload's */
+       __u8   pl[0];
+} __attribute__((packed));
+
+
+struct i2400m_l3l4_hdr {
+       __le16 type;
+       __le16 length;          /* payload's */
+       __le16 version;
+       __le16 resv1;
+       __le16 status;
+       __le16 resv2;
+       struct i2400m_tlv_hdr pl[0];
+} __attribute__((packed));
+
+
+/**
+ * i2400m_system_state - different states of the device
+ */
+enum i2400m_system_state {
+       I2400M_SS_UNINITIALIZED = 1,
+       I2400M_SS_INIT,
+       I2400M_SS_READY,
+       I2400M_SS_SCAN,
+       I2400M_SS_STANDBY,
+       I2400M_SS_CONNECTING,
+       I2400M_SS_WIMAX_CONNECTED,
+       I2400M_SS_DATA_PATH_CONNECTED,
+       I2400M_SS_IDLE,
+       I2400M_SS_DISCONNECTING,
+       I2400M_SS_OUT_OF_ZONE,
+       I2400M_SS_SLEEPACTIVE,
+       I2400M_SS_PRODUCTION,
+       I2400M_SS_CONFIG,
+       I2400M_SS_RF_OFF,
+       I2400M_SS_RF_SHUTDOWN,
+       I2400M_SS_DEVICE_DISCONNECT,
+       I2400M_SS_MAX,
+};
+
+
+/**
+ * i2400m_tlv_system_state - report on the state of the system
+ *
+ * @state: see enum i2400m_system_state
+ */
+struct i2400m_tlv_system_state {
+       struct i2400m_tlv_hdr hdr;
+       __le32 state;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_l4_message_versions {
+       struct i2400m_tlv_hdr hdr;
+       __le16 major;
+       __le16 minor;
+       __le16 branch;
+       __le16 reserved;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_detailed_device_info {
+       struct i2400m_tlv_hdr hdr;
+       __u8 reserved1[400];
+       __u8 mac_address[ETH_ALEN];
+       __u8 reserved2[2];
+} __attribute__((packed));
+
+
+enum i2400m_rf_switch_status {
+       I2400M_RF_SWITCH_ON = 1,
+       I2400M_RF_SWITCH_OFF = 2,
+};
+
+struct i2400m_tlv_rf_switches_status {
+       struct i2400m_tlv_hdr hdr;
+       __u8 sw_rf_switch;      /* 1 ON, 2 OFF */
+       __u8 hw_rf_switch;      /* 1 ON, 2 OFF */
+       __u8 reserved[2];
+} __attribute__((packed));
+
+
+enum {
+       i2400m_rf_operation_on = 1,
+       i2400m_rf_operation_off = 2
+};
+
+struct i2400m_tlv_rf_operation {
+       struct i2400m_tlv_hdr hdr;
+       __le32 status;  /* 1 ON, 2 OFF */
+} __attribute__((packed));
+
+
+enum i2400m_tlv_reset_type {
+       I2400M_RESET_TYPE_COLD = 1,
+       I2400M_RESET_TYPE_WARM
+};
+
+struct i2400m_tlv_device_reset_type {
+       struct i2400m_tlv_hdr hdr;
+       __le32 reset_type;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_config_idle_parameters {
+       struct i2400m_tlv_hdr hdr;
+       __le32 idle_timeout;    /* 100 to 300000 ms [5min], 100 increments
+                                * 0 disabled */
+       __le32 idle_paging_interval;    /* frames */
+} __attribute__((packed));
+
+
+enum i2400m_media_status {
+       I2400M_MEDIA_STATUS_LINK_UP = 1,
+       I2400M_MEDIA_STATUS_LINK_DOWN,
+       I2400M_MEDIA_STATUS_LINK_RENEW,
+};
+
+struct i2400m_tlv_media_status {
+       struct i2400m_tlv_hdr hdr;
+       __le32 media_status;
+} __attribute__((packed));
+
+
+/* New in v1.4 */
+struct i2400m_tlv_config_idle_timeout {
+       struct i2400m_tlv_hdr hdr;
+       __le32 timeout; /* 100 to 300000 ms [5min], 100 increments
+                        * 0 disabled */
+} __attribute__((packed));
+
+/* New in v1.4 -- for backward compat, will be removed */
+struct i2400m_tlv_config_d2h_data_format {
+       struct i2400m_tlv_hdr hdr;
+       __u8 format;            /* 0 old format, 1 enhanced */
+       __u8 reserved[3];
+} __attribute__((packed));
+
+/* New in v1.4 */
+struct i2400m_tlv_config_dl_host_reorder {
+       struct i2400m_tlv_hdr hdr;
+       __u8 reorder;           /* 0 disabled, 1 enabled */
+       __u8 reserved[3];
+} __attribute__((packed));
+
+
+#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */
diff --git a/lib/libdss-include/include/linux/wireless.h b/lib/libdss-include/include/linux/wireless.h
new file mode 100644 (file)
index 0000000..ad9839f
--- /dev/null
@@ -0,0 +1,1128 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version :   22      16.3.07
+ *
+ * Authors :   Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands.  This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ *     # net/core/dev.c (two place + add include)
+ *     # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ *     # net/core/dev.c (two other places)
+ *     # include/linux/netdevice.h (one place)
+ *     # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ *     # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ *     # net/core/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+ *     # net/core/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h>               /* for __u* and __s* typedefs */
+#include <linux/socket.h>              /* for "struct sockaddr" et al  */
+#include <linux/if.h>                  /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT   22
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ *     Alan Cox start some incompatibles changes. I've integrated a bit more.
+ *     - Encryption renamed to Encode to avoid US regulation problems
+ *     - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ *     - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ *     - Missing encoding definitions in range
+ *     - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ *     - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ *     - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ *     - Changed my e-mail address
+ *     - More 802.11 support (nickname, rate, rts, frag)
+ *     - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ *     - Support for 'mode of operation' (ad-hoc, managed...)
+ *     - Support for unicast and multicast power saving
+ *     - Change encoding to support larger tokens (>64 bits)
+ *     - Updated iw_params (disable, flags) and use it for NWID
+ *     - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ *     - Add PM capability to range structure
+ *     - Add PM modifier : MAX/MIN/RELATIVE
+ *     - Add encoding option : IW_ENCODE_NOKEY
+ *     - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ *     - Add WE version in range (help backward/forward compatibility)
+ *     - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ *     - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ *     - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ *     - Add new statistics (frag, retry, beacon)
+ *     - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ *     - Document creation of new driver API.
+ *     - Extract union iwreq_data from struct iwreq (for new driver API).
+ *     - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ *
+ * V13 to V14
+ * ----------
+ *     - Wireless Events support : define struct iw_event
+ *     - Define additional specific event numbers
+ *     - Add "addr" and "param" fields in union iwreq_data
+ *     - AP scanning stuff (SIOCSIWSCAN and friends)
+ *
+ * V14 to V15
+ * ----------
+ *     - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
+ *     - Make struct iw_freq signed (both m & e), add explicit padding
+ *     - Add IWEVCUSTOM for driver specific event/scanning token
+ *     - Add IW_MAX_GET_SPY for driver returning a lot of addresses
+ *     - Add IW_TXPOW_RANGE for range of Tx Powers
+ *     - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
+ *     - Add IW_MODE_MONITOR for passive monitor
+ *
+ * V15 to V16
+ * ----------
+ *     - Increase the number of bitrates in iw_range to 32 (for 802.11g)
+ *     - Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
+ *     - Reshuffle struct iw_range for increases, add filler
+ *     - Increase IW_MAX_AP to 64 for driver returning a lot of addresses
+ *     - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
+ *     - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
+ *     - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
+ *
+ * V16 to V17
+ * ----------
+ *     - Add flags to frequency -> auto/fixed
+ *     - Document (struct iw_quality *)->updated, add new flags (INVALID)
+ *     - Wireless Event capability in struct iw_range
+ *     - Add support for relative TxPower (yick !)
+ *
+ * V17 to V18 (From Jouni Malinen <j@w1.fi>)
+ * ----------
+ *     - Add support for WPA/WPA2
+ *     - Add extended encoding configuration (SIOCSIWENCODEEXT and
+ *       SIOCGIWENCODEEXT)
+ *     - Add SIOCSIWGENIE/SIOCGIWGENIE
+ *     - Add SIOCSIWMLME
+ *     - Add SIOCSIWPMKSA
+ *     - Add struct iw_range bit field for supported encoding capabilities
+ *     - Add optional scan request parameters for SIOCSIWSCAN
+ *     - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA
+ *       related parameters (extensible up to 4096 parameter values)
+ *     - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
+ *       IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
+ *
+ * V18 to V19
+ * ----------
+ *     - Remove (struct iw_point *)->pointer from events and streams
+ *     - Remove header includes to help user space
+ *     - Increase IW_ENCODING_TOKEN_MAX from 32 to 64
+ *     - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros
+ *     - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM
+ *     - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros
+ *
+ * V19 to V20
+ * ----------
+ *     - RtNetlink requests support (SET/GET)
+ *
+ * V20 to V21
+ * ----------
+ *     - Remove (struct net_device *)->get_wireless_stats()
+ *     - Change length in ESSID and NICK to strlen() instead of strlen()+1
+ *     - Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers
+ *     - Power/Retry relative values no longer * 100000
+ *     - Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI
+ *
+ * V21 to V22
+ * ----------
+ *     - Prevent leaking of kernel space in stream on 64 bits.
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Wireless Identification */
+#define SIOCSIWCOMMIT  0x8B00          /* Commit pending changes to driver */
+#define SIOCGIWNAME    0x8B01          /* get name == wireless protocol */
+/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
+ * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
+ * Don't put the name of your driver there, it's useless. */
+
+/* Basic operations */
+#define SIOCSIWNWID    0x8B02          /* set network id (pre-802.11) */
+#define SIOCGIWNWID    0x8B03          /* get network id (the cell) */
+#define SIOCSIWFREQ    0x8B04          /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ    0x8B05          /* get channel/frequency (Hz) */
+#define SIOCSIWMODE    0x8B06          /* set operation mode */
+#define SIOCGIWMODE    0x8B07          /* get operation mode */
+#define SIOCSIWSENS    0x8B08          /* set sensitivity (dBm) */
+#define SIOCGIWSENS    0x8B09          /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE   0x8B0A          /* Unused */
+#define SIOCGIWRANGE   0x8B0B          /* Get range of parameters */
+#define SIOCSIWPRIV    0x8B0C          /* Unused */
+#define SIOCGIWPRIV    0x8B0D          /* get private ioctl interface info */
+#define SIOCSIWSTATS   0x8B0E          /* Unused */
+#define SIOCGIWSTATS   0x8B0F          /* Get /proc/net/wireless stats */
+/* SIOCGIWSTATS is strictly used between user space and the kernel, and
+ * is never passed to the driver (i.e. the driver will never see it). */
+
+/* Spy support (statistics per MAC address - used for Mobile IP support) */
+#define SIOCSIWSPY     0x8B10          /* set spy addresses */
+#define SIOCGIWSPY     0x8B11          /* get spy info (quality of link) */
+#define SIOCSIWTHRSPY  0x8B12          /* set spy threshold (spy event) */
+#define SIOCGIWTHRSPY  0x8B13          /* get spy threshold */
+
+/* Access Point manipulation */
+#define SIOCSIWAP      0x8B14          /* set access point MAC addresses */
+#define SIOCGIWAP      0x8B15          /* get access point MAC addresses */
+#define SIOCGIWAPLIST  0x8B17          /* Deprecated in favor of scanning */
+#define SIOCSIWSCAN    0x8B18          /* trigger scanning (list cells) */
+#define SIOCGIWSCAN    0x8B19          /* get scanning results */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID   0x8B1A          /* set ESSID (network name) */
+#define SIOCGIWESSID   0x8B1B          /* get ESSID */
+#define SIOCSIWNICKN   0x8B1C          /* set node name/nickname */
+#define SIOCGIWNICKN   0x8B1D          /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE... */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE    0x8B20          /* set default bit rate (bps) */
+#define SIOCGIWRATE    0x8B21          /* get default bit rate (bps) */
+#define SIOCSIWRTS     0x8B22          /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS     0x8B23          /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG    0x8B24          /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG    0x8B25          /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW   0x8B26          /* set transmit power (dBm) */
+#define SIOCGIWTXPOW   0x8B27          /* get transmit power (dBm) */
+#define SIOCSIWRETRY   0x8B28          /* set retry limits and lifetime */
+#define SIOCGIWRETRY   0x8B29          /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE  0x8B2A          /* set encoding token & mode */
+#define SIOCGIWENCODE  0x8B2B          /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER   0x8B2C          /* set Power Management settings */
+#define SIOCGIWPOWER   0x8B2D          /* get Power Management settings */
+
+/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM).
+ * This ioctl uses struct iw_point and data buffer that includes IE id and len
+ * fields. More than one IE may be included in the request. Setting the generic
+ * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers
+ * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers
+ * are required to report the used IE as a wireless event, e.g., when
+ * associating with an AP. */
+#define SIOCSIWGENIE   0x8B30          /* set generic IE */
+#define SIOCGIWGENIE   0x8B31          /* get generic IE */
+
+/* WPA : IEEE 802.11 MLME requests */
+#define SIOCSIWMLME    0x8B16          /* request MLME operation; uses
+                                        * struct iw_mlme */
+/* WPA : Authentication mode parameters */
+#define SIOCSIWAUTH    0x8B32          /* set authentication mode params */
+#define SIOCGIWAUTH    0x8B33          /* get authentication mode params */
+
+/* WPA : Extended version of encoding configuration */
+#define SIOCSIWENCODEEXT 0x8B34                /* set encoding token & mode */
+#define SIOCGIWENCODEEXT 0x8B35                /* get encoding token & mode */
+
+/* WPA2 : PMKSA cache management */
+#define SIOCSIWPMKSA   0x8B36          /* PMKSA cache operation */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 32 ioctl are wireless device private, for 16 commands.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV        0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'even' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command). More details in iwpriv.c.
+ * And I repeat : you are not forced to use them with iwpriv, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST    0x8B00
+#define SIOCIWLAST     SIOCIWLASTPRIV          /* 0x8BFF */
+#define IW_IOCTL_IDX(cmd)      ((cmd) - SIOCIWFIRST)
+#define IW_HANDLER(id, func)                   \
+       [IW_IOCTL_IDX(id)] = func
+
+/* Odd : get (world access), even : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/* Those are *NOT* ioctls, do not issue request on them !!! */
+/* Most events use the same identifier as ioctl requests */
+
+#define IWEVTXDROP     0x8C00          /* Packet dropped to excessive retry */
+#define IWEVQUAL       0x8C01          /* Quality part of statistics (scan) */
+#define IWEVCUSTOM     0x8C02          /* Driver specific ascii string */
+#define IWEVREGISTERED 0x8C03          /* Discovered a new node (AP mode) */
+#define IWEVEXPIRED    0x8C04          /* Expired a node (AP mode) */
+#define IWEVGENIE      0x8C05          /* Generic IE (WPA, RSN, WMM, ..)
+                                        * (scan results); This includes id and
+                                        * length fields. One IWEVGENIE may
+                                        * contain more than one IE. Scan
+                                        * results may contain one or more
+                                        * IWEVGENIE events. */
+#define IWEVMICHAELMICFAILURE 0x8C06   /* Michael MIC failure
+                                        * (struct iw_michaelmicfailure)
+                                        */
+#define IWEVASSOCREQIE 0x8C07          /* IEs used in (Re)Association Request.
+                                        * The data includes id and length
+                                        * fields and may contain more than one
+                                        * IE. This event is required in
+                                        * Managed mode if the driver
+                                        * generates its own WPA/RSN IE. This
+                                        * should be sent just before
+                                        * IWEVREGISTERED event for the
+                                        * association. */
+#define IWEVASSOCRESPIE        0x8C08          /* IEs used in (Re)Association
+                                        * Response. The data includes id and
+                                        * length fields and may contain more
+                                        * than one IE. This may be sent
+                                        * between IWEVASSOCREQIE and
+                                        * IWEVREGISTERED events for the
+                                        * association. */
+#define IWEVPMKIDCAND  0x8C09          /* PMKID candidate for RSN
+                                        * pre-authentication
+                                        * (struct iw_pmkid_cand) */
+
+#define IWEVFIRST      0x8C00
+#define IW_EVENT_IDX(cmd)      ((cmd) - IWEVFIRST)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK      0x7000  /* Type of arguments */
+#define IW_PRIV_TYPE_NONE      0x0000
+#define IW_PRIV_TYPE_BYTE      0x1000  /* Char as number */
+#define IW_PRIV_TYPE_CHAR      0x2000  /* Char as character */
+#define IW_PRIV_TYPE_INT       0x4000  /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT     0x5000  /* struct iw_freq */
+#define IW_PRIV_TYPE_ADDR      0x6000  /* struct sockaddr */
+
+#define IW_PRIV_SIZE_FIXED     0x0800  /* Variable or fixed number of args */
+
+#define IW_PRIV_SIZE_MASK      0x07FF  /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES     32
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES                32
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER         8
+/* Note : if you more than 8 TXPowers, just set the max and min or
+ * a few of them in the struct iw_range. */
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY             8
+
+/* Maximum of address that you may get in the
+   list of access points in range */
+#define IW_MAX_AP              64
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE      32
+
+/* Modes of operation */
+#define IW_MODE_AUTO   0       /* Let the driver decides */
+#define IW_MODE_ADHOC  1       /* Single cell network */
+#define IW_MODE_INFRA  2       /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3       /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4       /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5       /* Secondary master/repeater (backup) */
+#define IW_MODE_MONITOR        6       /* Passive monitor (listen only) */
+#define IW_MODE_MESH   7       /* Mesh (IEEE 802.11s) network */
+
+/* Statistics flags (bitmask in updated) */
+#define IW_QUAL_QUAL_UPDATED   0x01    /* Value was updated since last read */
+#define IW_QUAL_LEVEL_UPDATED  0x02
+#define IW_QUAL_NOISE_UPDATED  0x04
+#define IW_QUAL_ALL_UPDATED    0x07
+#define IW_QUAL_DBM            0x08    /* Level + Noise are dBm */
+#define IW_QUAL_QUAL_INVALID   0x10    /* Driver doesn't provide value */
+#define IW_QUAL_LEVEL_INVALID  0x20
+#define IW_QUAL_NOISE_INVALID  0x40
+#define IW_QUAL_RCPI           0x80    /* Level + Noise are 802.11k RCPI */
+#define IW_QUAL_ALL_INVALID    0x70
+
+/* Frequency flags */
+#define IW_FREQ_AUTO           0x00    /* Let the driver decides */
+#define IW_FREQ_FIXED          0x01    /* Force a specific value */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES  8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX  64      /* 512 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX                0x00FF  /* Token index (if needed) */
+#define IW_ENCODE_FLAGS                0xFF00  /* Flags defined below */
+#define IW_ENCODE_MODE         0xF000  /* Modes defined below */
+#define IW_ENCODE_DISABLED     0x8000  /* Encoding disabled */
+#define IW_ENCODE_ENABLED      0x0000  /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED   0x4000  /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN         0x2000  /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY                0x0800  /* Key is write only, so not present */
+#define IW_ENCODE_TEMP         0x0400  /* Temporary key */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON            0x0000  /* No details... */
+#define IW_POWER_TYPE          0xF000  /* Type of parameter */
+#define IW_POWER_PERIOD                0x1000  /* Value is a period/duration of  */
+#define IW_POWER_TIMEOUT       0x2000  /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE          0x0F00  /* Power Management mode */
+#define IW_POWER_UNICAST_R     0x0100  /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R   0x0200  /* Receive only multicast messages */
+#define IW_POWER_ALL_R         0x0300  /* Receive all messages though PM */
+#define IW_POWER_FORCE_S       0x0400  /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER      0x0800  /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER      0x000F  /* Modify a parameter */
+#define IW_POWER_MIN           0x0001  /* Value is a minimum  */
+#define IW_POWER_MAX           0x0002  /* Value is a maximum */
+#define IW_POWER_RELATIVE      0x0004  /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_TYPE          0x00FF  /* Type of value */
+#define IW_TXPOW_DBM           0x0000  /* Value is in dBm */
+#define IW_TXPOW_MWATT         0x0001  /* Value is in mW */
+#define IW_TXPOW_RELATIVE      0x0002  /* Value is in arbitrary units */
+#define IW_TXPOW_RANGE         0x1000  /* Range of value between min/max */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON            0x0000  /* No details... */
+#define IW_RETRY_TYPE          0xF000  /* Type of parameter */
+#define IW_RETRY_LIMIT         0x1000  /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME      0x2000  /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER      0x00FF  /* Modify a parameter */
+#define IW_RETRY_MIN           0x0001  /* Value is a minimum  */
+#define IW_RETRY_MAX           0x0002  /* Value is a maximum */
+#define IW_RETRY_RELATIVE      0x0004  /* Value is not in seconds/ms/us */
+#define IW_RETRY_SHORT         0x0010  /* Value is for short packets  */
+#define IW_RETRY_LONG          0x0020  /* Value is for long packets */
+
+/* Scanning request flags */
+#define IW_SCAN_DEFAULT                0x0000  /* Default scan of the driver */
+#define IW_SCAN_ALL_ESSID      0x0001  /* Scan all ESSIDs */
+#define IW_SCAN_THIS_ESSID     0x0002  /* Scan only this ESSID */
+#define IW_SCAN_ALL_FREQ       0x0004  /* Scan all Frequencies */
+#define IW_SCAN_THIS_FREQ      0x0008  /* Scan only this Frequency */
+#define IW_SCAN_ALL_MODE       0x0010  /* Scan all Modes */
+#define IW_SCAN_THIS_MODE      0x0020  /* Scan only this Mode */
+#define IW_SCAN_ALL_RATE       0x0040  /* Scan all Bit-Rates */
+#define IW_SCAN_THIS_RATE      0x0080  /* Scan only this Bit-Rate */
+/* struct iw_scan_req scan_type */
+#define IW_SCAN_TYPE_ACTIVE 0
+#define IW_SCAN_TYPE_PASSIVE 1
+/* Maximum size of returned data */
+#define IW_SCAN_MAX_DATA       4096    /* In bytes */
+
+/* Scan capability flags - in (struct iw_range *)->scan_capa */
+#define IW_SCAN_CAPA_NONE              0x00
+#define IW_SCAN_CAPA_ESSID             0x01
+#define IW_SCAN_CAPA_BSSID             0x02
+#define IW_SCAN_CAPA_CHANNEL   0x04
+#define IW_SCAN_CAPA_MODE              0x08
+#define IW_SCAN_CAPA_RATE              0x10
+#define IW_SCAN_CAPA_TYPE              0x20
+#define IW_SCAN_CAPA_TIME              0x40
+
+/* Max number of char in custom event - use multiple of them if needed */
+#define IW_CUSTOM_MAX          256     /* In bytes */
+
+/* Generic information element */
+#define IW_GENERIC_IE_MAX      1024
+
+/* MLME requests (SIOCSIWMLME / struct iw_mlme) */
+#define IW_MLME_DEAUTH         0
+#define IW_MLME_DISASSOC       1
+#define IW_MLME_AUTH           2
+#define IW_MLME_ASSOC          3
+
+/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */
+#define IW_AUTH_INDEX          0x0FFF
+#define IW_AUTH_FLAGS          0xF000
+/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095)
+ * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the
+ * parameter that is being set/get to; value will be read/written to
+ * struct iw_param value field) */
+#define IW_AUTH_WPA_VERSION            0
+#define IW_AUTH_CIPHER_PAIRWISE                1
+#define IW_AUTH_CIPHER_GROUP           2
+#define IW_AUTH_KEY_MGMT               3
+#define IW_AUTH_TKIP_COUNTERMEASURES   4
+#define IW_AUTH_DROP_UNENCRYPTED       5
+#define IW_AUTH_80211_AUTH_ALG         6
+#define IW_AUTH_WPA_ENABLED            7
+#define IW_AUTH_RX_UNENCRYPTED_EAPOL   8
+#define IW_AUTH_ROAMING_CONTROL                9
+#define IW_AUTH_PRIVACY_INVOKED                10
+#define IW_AUTH_CIPHER_GROUP_MGMT      11
+#define IW_AUTH_MFP                    12
+
+/* IW_AUTH_WPA_VERSION values (bit field) */
+#define IW_AUTH_WPA_VERSION_DISABLED   0x00000001
+#define IW_AUTH_WPA_VERSION_WPA                0x00000002
+#define IW_AUTH_WPA_VERSION_WPA2       0x00000004
+
+/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT
+ * values (bit field) */
+#define IW_AUTH_CIPHER_NONE    0x00000001
+#define IW_AUTH_CIPHER_WEP40   0x00000002
+#define IW_AUTH_CIPHER_TKIP    0x00000004
+#define IW_AUTH_CIPHER_CCMP    0x00000008
+#define IW_AUTH_CIPHER_WEP104  0x00000010
+#define IW_AUTH_CIPHER_AES_CMAC        0x00000020
+
+/* IW_AUTH_KEY_MGMT values (bit field) */
+#define IW_AUTH_KEY_MGMT_802_1X        1
+#define IW_AUTH_KEY_MGMT_PSK   2
+
+/* IW_AUTH_80211_AUTH_ALG values (bit field) */
+#define IW_AUTH_ALG_OPEN_SYSTEM        0x00000001
+#define IW_AUTH_ALG_SHARED_KEY 0x00000002
+#define IW_AUTH_ALG_LEAP       0x00000004
+
+/* IW_AUTH_ROAMING_CONTROL values */
+#define IW_AUTH_ROAMING_ENABLE 0       /* driver/firmware based roaming */
+#define IW_AUTH_ROAMING_DISABLE        1       /* user space program used for roaming
+                                        * control */
+
+/* IW_AUTH_MFP (management frame protection) values */
+#define IW_AUTH_MFP_DISABLED   0       /* MFP disabled */
+#define IW_AUTH_MFP_OPTIONAL   1       /* MFP optional */
+#define IW_AUTH_MFP_REQUIRED   2       /* MFP required */
+
+/* SIOCSIWENCODEEXT definitions */
+#define IW_ENCODE_SEQ_MAX_SIZE 8
+/* struct iw_encode_ext ->alg */
+#define IW_ENCODE_ALG_NONE     0
+#define IW_ENCODE_ALG_WEP      1
+#define IW_ENCODE_ALG_TKIP     2
+#define IW_ENCODE_ALG_CCMP     3
+#define IW_ENCODE_ALG_PMK      4
+#define IW_ENCODE_ALG_AES_CMAC 5
+/* struct iw_encode_ext ->ext_flags */
+#define IW_ENCODE_EXT_TX_SEQ_VALID     0x00000001
+#define IW_ENCODE_EXT_RX_SEQ_VALID     0x00000002
+#define IW_ENCODE_EXT_GROUP_KEY                0x00000004
+#define IW_ENCODE_EXT_SET_TX_KEY       0x00000008
+
+/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */
+#define IW_MICFAILURE_KEY_ID   0x00000003 /* Key ID 0..3 */
+#define IW_MICFAILURE_GROUP    0x00000004
+#define IW_MICFAILURE_PAIRWISE 0x00000008
+#define IW_MICFAILURE_STAKEY   0x00000010
+#define IW_MICFAILURE_COUNT    0x00000060 /* 1 or 2 (0 = count not supported)
+                                           */
+
+/* Bit field values for enc_capa in struct iw_range */
+#define IW_ENC_CAPA_WPA                0x00000001
+#define IW_ENC_CAPA_WPA2       0x00000002
+#define IW_ENC_CAPA_CIPHER_TKIP        0x00000004
+#define IW_ENC_CAPA_CIPHER_CCMP        0x00000008
+#define IW_ENC_CAPA_4WAY_HANDSHAKE     0x00000010
+
+/* Event capability macros - in (struct iw_range *)->event_capa
+ * Because we have more than 32 possible events, we use an array of
+ * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
+#define IW_EVENT_CAPA_BASE(cmd)                ((cmd >= SIOCIWFIRSTPRIV) ? \
+                                        (cmd - SIOCIWFIRSTPRIV + 0x60) : \
+                                        (cmd - SIOCIWFIRST))
+#define IW_EVENT_CAPA_INDEX(cmd)       (IW_EVENT_CAPA_BASE(cmd) >> 5)
+#define IW_EVENT_CAPA_MASK(cmd)                (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F))
+/* Event capability constants - event autogenerated by the kernel
+ * This list is valid for most 802.11 devices, customise as needed... */
+#define IW_EVENT_CAPA_K_0      (IW_EVENT_CAPA_MASK(0x8B04) | \
+                                IW_EVENT_CAPA_MASK(0x8B06) | \
+                                IW_EVENT_CAPA_MASK(0x8B1A))
+#define IW_EVENT_CAPA_K_1      (IW_EVENT_CAPA_MASK(0x8B2A))
+/* "Easy" macro to set events in iw_range (less efficient) */
+#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd))
+#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; }
+
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ *     Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+  __s32                value;          /* The value of the parameter itself */
+  __u8         fixed;          /* Hardware should not use auto select */
+  __u8         disabled;       /* Disable the feature */
+  __u16                flags;          /* Various specifc flags (if any) */
+};
+
+/*
+ *     For all data larger than 16 octets, we need to use a
+ *     pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+  void *pointer;       /* Pointer to the data  (in user space) */
+  __u16                length;         /* number of fields or size in bytes */
+  __u16                flags;          /* Optional params */
+};
+
+
+/*
+ *     A frequency
+ *     For numbers lower than 10^9, we encode the number in 'm' and
+ *     set 'e' to 0
+ *     For number greater than 10^9, we divide it by the lowest power
+ *     of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ *     The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+       __s32           m;              /* Mantissa */
+       __s16           e;              /* Exponent */
+       __u8            i;              /* List index (when in range struct) */
+       __u8            flags;          /* Flags (fixed/auto) */
+};
+
+/*
+ *     Quality of the link
+ */
+struct iw_quality
+{
+       __u8            qual;           /* link quality (%retries, SNR,
+                                          %missed beacons or better...) */
+       __u8            level;          /* signal level (dBm) */
+       __u8            noise;          /* noise level (dBm) */
+       __u8            updated;        /* Flags to know if updated */
+};
+
+/*
+ *     Packet discarded in the wireless adapter due to
+ *     "wireless" specific problems...
+ *     Note : the list of counter and statistics in net_device_stats
+ *     is already pretty exhaustive, and you should use that first.
+ *     This is only additional stats...
+ */
+struct iw_discarded
+{
+       __u32           nwid;           /* Rx : Wrong nwid/essid */
+       __u32           code;           /* Rx : Unable to code/decode (WEP) */
+       __u32           fragment;       /* Rx : Can't perform MAC reassembly */
+       __u32           retries;        /* Tx : Max MAC retries num reached */
+       __u32           misc;           /* Others cases */
+};
+
+/*
+ *     Packet/Time period missed in the wireless adapter due to
+ *     "wireless" specific problems...
+ */
+struct iw_missed
+{
+       __u32           beacon;         /* Missed beacons/superframe */
+};
+
+/*
+ *     Quality range (for spy threshold)
+ */
+struct iw_thrspy
+{
+       struct sockaddr         addr;           /* Source address (hw/mac) */
+       struct iw_quality       qual;           /* Quality of the link */
+       struct iw_quality       low;            /* Low threshold */
+       struct iw_quality       high;           /* High threshold */
+};
+
+/*
+ *     Optional data for scan request
+ *
+ *     Note: these optional parameters are controlling parameters for the
+ *     scanning behavior, these do not apply to getting scan results
+ *     (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and
+ *     provide a merged results with all BSSes even if the previous scan
+ *     request limited scanning to a subset, e.g., by specifying an SSID.
+ *     Especially, scan results are required to include an entry for the
+ *     current BSS if the driver is in Managed mode and associated with an AP.
+ */
+struct iw_scan_req
+{
+       __u8            scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
+       __u8            essid_len;
+       __u8            num_channels; /* num entries in channel_list;
+                                      * 0 = scan all allowed channels */
+       __u8            flags; /* reserved as padding; use zero, this may
+                               * be used in the future for adding flags
+                               * to request different scan behavior */
+       struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
+                               * individual address of a specific BSS */
+
+       /*
+        * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using
+        * the current ESSID. This allows scan requests for specific ESSID
+        * without having to change the current ESSID and potentially breaking
+        * the current association.
+        */
+       __u8            essid[IW_ESSID_MAX_SIZE];
+
+       /*
+        * Optional parameters for changing the default scanning behavior.
+        * These are based on the MLME-SCAN.request from IEEE Std 802.11.
+        * TU is 1.024 ms. If these are set to 0, driver is expected to use
+        * reasonable default values. min_channel_time defines the time that
+        * will be used to wait for the first reply on each channel. If no
+        * replies are received, next channel will be scanned after this. If
+        * replies are received, total time waited on the channel is defined by
+        * max_channel_time.
+        */
+       __u32           min_channel_time; /* in TU */
+       __u32           max_channel_time; /* in TU */
+
+       struct iw_freq  channel_list[IW_MAX_FREQUENCIES];
+};
+
+/* ------------------------- WPA SUPPORT ------------------------- */
+
+/*
+ *     Extended data structure for get/set encoding (this is used with
+ *     SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_*
+ *     flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and
+ *     only the data contents changes (key data -> this structure, including
+ *     key data).
+ *
+ *     If the new key is the first group key, it will be set as the default
+ *     TX key. Otherwise, default TX key index is only changed if
+ *     IW_ENCODE_EXT_SET_TX_KEY flag is set.
+ *
+ *     Key will be changed with SIOCSIWENCODEEXT in all cases except for
+ *     special "change TX key index" operation which is indicated by setting
+ *     key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY.
+ *
+ *     tx_seq/rx_seq are only used when respective
+ *     IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal
+ *     TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start
+ *     TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally
+ *     used only by an Authenticator (AP or an IBSS station) to get the
+ *     current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and
+ *     RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for
+ *     debugging/testing.
+ */
+struct iw_encode_ext
+{
+       __u32           ext_flags; /* IW_ENCODE_EXT_* */
+       __u8            tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+       __u8            rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+       struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
+                              * (group) keys or unicast address for
+                              * individual keys */
+       __u16           alg; /* IW_ENCODE_ALG_* */
+       __u16           key_len;
+       __u8            key[0];
+};
+
+/* SIOCSIWMLME data */
+struct iw_mlme
+{
+       __u16           cmd; /* IW_MLME_* */
+       __u16           reason_code;
+       struct sockaddr addr;
+};
+
+/* SIOCSIWPMKSA data */
+#define IW_PMKSA_ADD           1
+#define IW_PMKSA_REMOVE                2
+#define IW_PMKSA_FLUSH         3
+
+#define IW_PMKID_LEN   16
+
+struct iw_pmksa
+{
+       __u32           cmd; /* IW_PMKSA_* */
+       struct sockaddr bssid;
+       __u8            pmkid[IW_PMKID_LEN];
+};
+
+/* IWEVMICHAELMICFAILURE data */
+struct iw_michaelmicfailure
+{
+       __u32           flags;
+       struct sockaddr src_addr;
+       __u8            tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+};
+
+/* IWEVPMKIDCAND data */
+#define IW_PMKID_CAND_PREAUTH  0x00000001 /* RNS pre-authentication enabled */
+struct iw_pmkid_cand
+{
+       __u32           flags; /* IW_PMKID_CAND_* */
+       __u32           index; /* the smaller the index, the higher the
+                               * priority */
+       struct sockaddr bssid;
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+       __u16           status;         /* Status
+                                        * - device dependent for now */
+
+       struct iw_quality       qual;           /* Quality of the link
+                                                * (instant/mean/max) */
+       struct iw_discarded     discard;        /* Packet discarded counts */
+       struct iw_missed        miss;           /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used 
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union  iwreq_data
+{
+       /* Config - generic */
+       char            name[IFNAMSIZ];
+       /* Name : used to verify the presence of  wireless extensions.
+        * Name of the protocol/provider... */
+
+       struct iw_point essid;          /* Extended network name */
+       struct iw_param nwid;           /* network id (or domain - the cell) */
+       struct iw_freq  freq;           /* frequency or channel :
+                                        * 0-1000 = channel
+                                        * > 1000 = frequency in Hz */
+
+       struct iw_param sens;           /* signal level threshold */
+       struct iw_param bitrate;        /* default bit rate */
+       struct iw_param txpower;        /* default transmit power */
+       struct iw_param rts;            /* RTS threshold threshold */
+       struct iw_param frag;           /* Fragmentation threshold */
+       __u32           mode;           /* Operation mode */
+       struct iw_param retry;          /* Retry limits & lifetime */
+
+       struct iw_point encoding;       /* Encoding stuff : tokens */
+       struct iw_param power;          /* PM duration/timeout */
+       struct iw_quality qual;         /* Quality part of statistics */
+
+       struct sockaddr ap_addr;        /* Access point address */
+       struct sockaddr addr;           /* Destination address (hw/mac) */
+
+       struct iw_param param;          /* Other small parameters */
+       struct iw_point data;           /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq 
+{
+       union
+       {
+               char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "eth0" */
+       } ifr_ifrn;
+
+       /* Data part (defined just above) */
+       union   iwreq_data      u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ *     For those ioctl which want to exchange mode data that what could
+ *     fit in the above structure...
+ */
+
+/*
+ *     Range of parameters
+ */
+
+struct iw_range
+{
+       /* Informative stuff (to choose between different interface) */
+       __u32           throughput;     /* To give an idea... */
+       /* In theory this value should be the maximum benchmarked
+        * TCP/IP throughput, because with most of these devices the
+        * bit rate is meaningless (overhead an co) to estimate how
+        * fast the connection will go and pick the fastest one.
+        * I suggest people to play with Netperf or any benchmark...
+        */
+
+       /* NWID (or domain id) */
+       __u32           min_nwid;       /* Minimal NWID we are able to set */
+       __u32           max_nwid;       /* Maximal NWID we are able to set */
+
+       /* Old Frequency (backward compat - moved lower ) */
+       __u16           old_num_channels;
+       __u8            old_num_frequency;
+
+       /* Scan capabilities */
+       __u8            scan_capa;      /* IW_SCAN_CAPA_* bit field */
+
+       /* Wireless event capability bitmasks */
+       __u32           event_capa[6];
+
+       /* signal level threshold range */
+       __s32           sensitivity;
+
+       /* Quality of link & SNR stuff */
+       /* Quality range (link, level, noise)
+        * If the quality is absolute, it will be in the range [0 ; max_qual],
+        * if the quality is dBm, it will be in the range [max_qual ; 0].
+        * Don't forget that we use 8 bit arithmetics... */
+       struct iw_quality       max_qual;       /* Quality of the link */
+       /* This should contain the average/typical values of the quality
+        * indicator. This should be the threshold between a "good" and
+        * a "bad" link (example : monitor going from green to orange).
+        * Currently, user space apps like quality monitors don't have any
+        * way to calibrate the measurement. With this, they can split
+        * the range between 0 and max_qual in different quality level
+        * (using a geometric subdivision centered on the average).
+        * I expect that people doing the user space apps will feedback
+        * us on which value we need to put in each driver... */
+       struct iw_quality       avg_qual;       /* Quality of the link */
+
+       /* Rates */
+       __u8            num_bitrates;   /* Number of entries in the list */
+       __s32           bitrate[IW_MAX_BITRATES];       /* list, in bps */
+
+       /* RTS threshold */
+       __s32           min_rts;        /* Minimal RTS threshold */
+       __s32           max_rts;        /* Maximal RTS threshold */
+
+       /* Frag threshold */
+       __s32           min_frag;       /* Minimal frag threshold */
+       __s32           max_frag;       /* Maximal frag threshold */
+
+       /* Power Management duration & timeout */
+       __s32           min_pmp;        /* Minimal PM period */
+       __s32           max_pmp;        /* Maximal PM period */
+       __s32           min_pmt;        /* Minimal PM timeout */
+       __s32           max_pmt;        /* Maximal PM timeout */
+       __u16           pmp_flags;      /* How to decode max/min PM period */
+       __u16           pmt_flags;      /* How to decode max/min PM timeout */
+       __u16           pm_capa;        /* What PM options are supported */
+
+       /* Encoder stuff */
+       __u16   encoding_size[IW_MAX_ENCODING_SIZES];   /* Different token sizes */
+       __u8    num_encoding_sizes;     /* Number of entry in the list */
+       __u8    max_encoding_tokens;    /* Max number of tokens */
+       /* For drivers that need a "login/passwd" form */
+       __u8    encoding_login_index;   /* token index for login token */
+
+       /* Transmit power */
+       __u16           txpower_capa;   /* What options are supported */
+       __u8            num_txpower;    /* Number of entries in the list */
+       __s32           txpower[IW_MAX_TXPOWER];        /* list, in bps */
+
+       /* Wireless Extension version info */
+       __u8            we_version_compiled;    /* Must be WIRELESS_EXT */
+       __u8            we_version_source;      /* Last update of source */
+
+       /* Retry limits and lifetime */
+       __u16           retry_capa;     /* What retry options are supported */
+       __u16           retry_flags;    /* How to decode max/min retry limit */
+       __u16           r_time_flags;   /* How to decode max/min retry life */
+       __s32           min_retry;      /* Minimal number of retries */
+       __s32           max_retry;      /* Maximal number of retries */
+       __s32           min_r_time;     /* Minimal retry lifetime */
+       __s32           max_r_time;     /* Maximal retry lifetime */
+
+       /* Frequency */
+       __u16           num_channels;   /* Number of channels [0; num - 1] */
+       __u8            num_frequency;  /* Number of entry in the list */
+       struct iw_freq  freq[IW_MAX_FREQUENCIES];       /* list */
+       /* Note : this frequency list doesn't need to fit channel numbers,
+        * because each entry contain its channel index */
+
+       __u32           enc_capa;       /* IW_ENC_CAPA_* bit field */
+};
+
+/*
+ * Private ioctl interface information
+ */
+struct iw_priv_args
+{
+       __u32           cmd;            /* Number of the ioctl to issue */
+       __u16           set_args;       /* Type and number of args */
+       __u16           get_args;       /* Type and number of args */
+       char            name[IFNAMSIZ]; /* Name of the extension */
+};
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/*
+ * Wireless events are carried through the rtnetlink socket to user
+ * space. They are encapsulated in the IFLA_WIRELESS field of
+ * a RTM_NEWLINK message.
+ */
+
+/*
+ * A Wireless Event. Contains basically the same data as the ioctl...
+ */
+struct iw_event
+{
+       __u16           len;                    /* Real length of this stuff */
+       __u16           cmd;                    /* Wireless IOCTL */
+       union iwreq_data        u;              /* IOCTL fixed payload */
+};
+
+/* Size of the Event prefix (including padding and alignement junk) */
+#define IW_EV_LCP_LEN  (sizeof(struct iw_event) - sizeof(union iwreq_data))
+/* Size of the various events */
+#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
+#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
+#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
+#define IW_EV_PARAM_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
+
+/* iw_point events are special. First, the payload (extra data) come at
+ * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second,
+ * we omit the pointer, so start at an offset. */
+#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \
+                         (char *) NULL)
+#define IW_EV_POINT_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_point) - \
+                        IW_EV_POINT_OFF)
+
+
+/* Size of the Event prefix when packed in stream */
+#define IW_EV_LCP_PK_LEN       (4)
+/* Size of the various events when packed in stream */
+#define IW_EV_CHAR_PK_LEN      (IW_EV_LCP_PK_LEN + IFNAMSIZ)
+#define IW_EV_UINT_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(__u32))
+#define IW_EV_FREQ_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct iw_freq))
+#define IW_EV_PARAM_PK_LEN     (IW_EV_LCP_PK_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct iw_quality))
+#define IW_EV_POINT_PK_LEN     (IW_EV_LCP_PK_LEN + 4)
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/lib/libdss-include/include/linux/x25.h b/lib/libdss-include/include/linux/x25.h
new file mode 100644 (file)
index 0000000..810cce6
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * These are the public elements of the Linux kernel X.25 implementation.
+ *
+ *     History
+ *     mar/20/00       Daniela Squassoni Disabling/enabling of facilities 
+ *                                       negotiation.
+ *     apr/02/05       Shaun Pereira Selective sub address matching with
+ *                                     call user data
+ */
+
+#ifndef        X25_KERNEL_H
+#define        X25_KERNEL_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+#define        SIOCX25GSUBSCRIP        (SIOCPROTOPRIVATE + 0)
+#define        SIOCX25SSUBSCRIP        (SIOCPROTOPRIVATE + 1)
+#define        SIOCX25GFACILITIES      (SIOCPROTOPRIVATE + 2)
+#define        SIOCX25SFACILITIES      (SIOCPROTOPRIVATE + 3)
+#define        SIOCX25GCALLUSERDATA    (SIOCPROTOPRIVATE + 4)
+#define        SIOCX25SCALLUSERDATA    (SIOCPROTOPRIVATE + 5)
+#define        SIOCX25GCAUSEDIAG       (SIOCPROTOPRIVATE + 6)
+#define SIOCX25SCUDMATCHLEN    (SIOCPROTOPRIVATE + 7)
+#define SIOCX25CALLACCPTAPPRV   (SIOCPROTOPRIVATE + 8)
+#define SIOCX25SENDCALLACCPT    (SIOCPROTOPRIVATE + 9)
+#define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10)
+#define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11)
+#define SIOCX25SCAUSEDIAG      (SIOCPROTOPRIVATE + 12)
+
+/*
+ *     Values for {get,set}sockopt.
+ */
+#define        X25_QBITINCL            1
+
+/*
+ *     X.25 Packet Size values.
+ */
+#define        X25_PS16                4
+#define        X25_PS32                5
+#define        X25_PS64                6
+#define        X25_PS128               7
+#define        X25_PS256               8
+#define        X25_PS512               9
+#define        X25_PS1024              10
+#define        X25_PS2048              11
+#define        X25_PS4096              12
+
+/*
+ * An X.121 address, it is held as ASCII text, null terminated, up to 15
+ * digits and a null terminator.
+ */
+struct x25_address {
+       char x25_addr[16];
+};
+
+/*
+ *     Linux X.25 Address structure, used for bind, and connect mostly.
+ */
+struct sockaddr_x25 {
+       __kernel_sa_family_t sx25_family;       /* Must be AF_X25 */
+       struct x25_address sx25_addr;           /* X.121 Address */
+};
+
+/*
+ *     DTE/DCE subscription options.
+ *
+ *      As this is missing lots of options, user should expect major
+ *     changes of this structure in 2.5.x which might break compatibilty.
+ *      The somewhat ugly dimension 200-sizeof() is needed to maintain
+ *     backward compatibility.
+ */
+struct x25_subscrip_struct {
+       char device[200-sizeof(unsigned long)];
+       unsigned long   global_facil_mask;      /* 0 to disable negotiation */
+       unsigned int    extended;
+};
+
+/* values for above global_facil_mask */
+
+#define        X25_MASK_REVERSE        0x01    
+#define        X25_MASK_THROUGHPUT     0x02
+#define        X25_MASK_PACKET_SIZE    0x04
+#define        X25_MASK_WINDOW_SIZE    0x08
+
+#define X25_MASK_CALLING_AE 0x10
+#define X25_MASK_CALLED_AE 0x20
+
+
+/*
+ *     Routing table control structure.
+ */
+struct x25_route_struct {
+       struct x25_address address;
+       unsigned int       sigdigits;
+       char               device[200];
+};
+
+/*
+ *     Facilities structure.
+ */
+struct x25_facilities {
+       unsigned int    winsize_in, winsize_out;
+       unsigned int    pacsize_in, pacsize_out;
+       unsigned int    throughput;
+       unsigned int    reverse;
+};
+
+/*
+* ITU DTE facilities
+* Only the called and calling address
+* extension are currently implemented.
+* The rest are in place to avoid the struct
+* changing size if someone needs them later
+*/
+
+struct x25_dte_facilities {
+       __u16 delay_cumul;
+       __u16 delay_target;
+       __u16 delay_max;
+       __u8 min_throughput;
+       __u8 expedited;
+       __u8 calling_len;
+       __u8 called_len;
+       __u8 calling_ae[20];
+       __u8 called_ae[20];
+};
+
+/*
+ *     Call User Data structure.
+ */
+struct x25_calluserdata {
+       unsigned int    cudlength;
+       unsigned char   cuddata[128];
+};
+
+/*
+ *     Call clearing Cause and Diagnostic structure.
+ */
+struct x25_causediag {
+       unsigned char   cause;
+       unsigned char   diagnostic;
+};
+
+/*
+ *     Further optional call user data match length selection
+ */
+struct x25_subaddr {
+       unsigned int cudmatchlength;
+};
+
+#endif
diff --git a/lib/libdss-include/include/linux/xattr.h b/lib/libdss-include/include/linux/xattr.h
new file mode 100644 (file)
index 0000000..2634d03
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+  File: linux/xattr.h
+
+  Extended attributes handling.
+
+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
+  Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
+  Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
+*/
+
+#include <linux/libc-compat.h>
+
+#ifndef _LINUX_XATTR_H
+#define _LINUX_XATTR_H
+
+#if __UAPI_DEF_XATTR
+#define __USE_KERNEL_XATTR_DEFS
+
+#define XATTR_CREATE   0x1     /* set value, fail if attr already exists */
+#define XATTR_REPLACE  0x2     /* set value, fail if attr does not exist */
+#endif
+
+/* Namespaces */
+#define XATTR_OS2_PREFIX "os2."
+#define XATTR_OS2_PREFIX_LEN (sizeof(XATTR_OS2_PREFIX) - 1)
+
+#define XATTR_MAC_OSX_PREFIX "osx."
+#define XATTR_MAC_OSX_PREFIX_LEN (sizeof(XATTR_MAC_OSX_PREFIX) - 1)
+
+#define XATTR_BTRFS_PREFIX "btrfs."
+#define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1)
+
+#define XATTR_SECURITY_PREFIX  "security."
+#define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1)
+
+#define XATTR_SYSTEM_PREFIX "system."
+#define XATTR_SYSTEM_PREFIX_LEN (sizeof(XATTR_SYSTEM_PREFIX) - 1)
+
+#define XATTR_TRUSTED_PREFIX "trusted."
+#define XATTR_TRUSTED_PREFIX_LEN (sizeof(XATTR_TRUSTED_PREFIX) - 1)
+
+#define XATTR_USER_PREFIX "user."
+#define XATTR_USER_PREFIX_LEN (sizeof(XATTR_USER_PREFIX) - 1)
+
+/* Security namespace */
+#define XATTR_EVM_SUFFIX "evm"
+#define XATTR_NAME_EVM XATTR_SECURITY_PREFIX XATTR_EVM_SUFFIX
+
+#define XATTR_IMA_SUFFIX "ima"
+#define XATTR_NAME_IMA XATTR_SECURITY_PREFIX XATTR_IMA_SUFFIX
+
+#define XATTR_SELINUX_SUFFIX "selinux"
+#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX
+
+#define XATTR_SMACK_SUFFIX "SMACK64"
+#define XATTR_SMACK_IPIN "SMACK64IPIN"
+#define XATTR_SMACK_IPOUT "SMACK64IPOUT"
+#define XATTR_SMACK_EXEC "SMACK64EXEC"
+#define XATTR_SMACK_TRANSMUTE "SMACK64TRANSMUTE"
+#define XATTR_SMACK_MMAP "SMACK64MMAP"
+#define XATTR_NAME_SMACK XATTR_SECURITY_PREFIX XATTR_SMACK_SUFFIX
+#define XATTR_NAME_SMACKIPIN   XATTR_SECURITY_PREFIX XATTR_SMACK_IPIN
+#define XATTR_NAME_SMACKIPOUT  XATTR_SECURITY_PREFIX XATTR_SMACK_IPOUT
+#define XATTR_NAME_SMACKEXEC   XATTR_SECURITY_PREFIX XATTR_SMACK_EXEC
+#define XATTR_NAME_SMACKTRANSMUTE XATTR_SECURITY_PREFIX XATTR_SMACK_TRANSMUTE
+#define XATTR_NAME_SMACKMMAP XATTR_SECURITY_PREFIX XATTR_SMACK_MMAP
+
+#define XATTR_CAPS_SUFFIX "capability"
+#define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX
+
+#define XATTR_POSIX_ACL_ACCESS  "posix_acl_access"
+#define XATTR_NAME_POSIX_ACL_ACCESS XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_ACCESS
+#define XATTR_POSIX_ACL_DEFAULT  "posix_acl_default"
+#define XATTR_NAME_POSIX_ACL_DEFAULT XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_DEFAULT
+
+
+#endif /* _LINUX_XATTR_H */
diff --git a/lib/libdss-include/include/linux/xfrm.h b/lib/libdss-include/include/linux/xfrm.h
new file mode 100644 (file)
index 0000000..b8f5451
--- /dev/null
@@ -0,0 +1,526 @@
+#ifndef _LINUX_XFRM_H
+#define _LINUX_XFRM_H
+
+#include <linux/in6.h>
+#include <linux/types.h>
+
+/* All of the structures in this file may not change size as they are
+ * passed into the kernel from userspace via netlink sockets.
+ */
+
+/* Structure to encapsulate addresses. I do not want to use
+ * "standard" structure. My apologies.
+ */
+typedef union {
+       __be32          a4;
+       __be32          a6[4];
+       struct in6_addr in6;
+} xfrm_address_t;
+
+/* Ident of a specific xfrm_state. It is used on input to lookup
+ * the state by (spi,daddr,ah/esp) or to store information about
+ * spi, protocol and tunnel address on output.
+ */
+struct xfrm_id {
+       xfrm_address_t  daddr;
+       __be32          spi;
+       __u8            proto;
+};
+
+struct xfrm_sec_ctx {
+       __u8    ctx_doi;
+       __u8    ctx_alg;
+       __u16   ctx_len;
+       __u32   ctx_sid;
+       char    ctx_str[0];
+};
+
+/* Security Context Domains of Interpretation */
+#define XFRM_SC_DOI_RESERVED 0
+#define XFRM_SC_DOI_LSM 1
+
+/* Security Context Algorithms */
+#define XFRM_SC_ALG_RESERVED 0
+#define XFRM_SC_ALG_SELINUX 1
+
+/* Selector, used as selector both on policy rules (SPD) and SAs. */
+
+struct xfrm_selector {
+       xfrm_address_t  daddr;
+       xfrm_address_t  saddr;
+       __be16  dport;
+       __be16  dport_mask;
+       __be16  sport;
+       __be16  sport_mask;
+       __u16   family;
+       __u8    prefixlen_d;
+       __u8    prefixlen_s;
+       __u8    proto;
+       int     ifindex;
+       __kernel_uid32_t        user;
+};
+
+#define XFRM_INF (~(__u64)0)
+
+struct xfrm_lifetime_cfg {
+       __u64   soft_byte_limit;
+       __u64   hard_byte_limit;
+       __u64   soft_packet_limit;
+       __u64   hard_packet_limit;
+       __u64   soft_add_expires_seconds;
+       __u64   hard_add_expires_seconds;
+       __u64   soft_use_expires_seconds;
+       __u64   hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+       __u64   bytes;
+       __u64   packets;
+       __u64   add_time;
+       __u64   use_time;
+};
+
+struct xfrm_replay_state {
+       __u32   oseq;
+       __u32   seq;
+       __u32   bitmap;
+};
+
+#define XFRMA_REPLAY_ESN_MAX   4096
+
+struct xfrm_replay_state_esn {
+       unsigned int    bmp_len;
+       __u32           oseq;
+       __u32           seq;
+       __u32           oseq_hi;
+       __u32           seq_hi;
+       __u32           replay_window;
+       __u32           bmp[0];
+};
+
+struct xfrm_algo {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_algo_auth {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       unsigned int    alg_trunc_len;  /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_algo_aead {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       unsigned int    alg_icv_len;    /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_stats {
+       __u32   replay_window;
+       __u32   replay;
+       __u32   integrity_failed;
+};
+
+enum {
+       XFRM_POLICY_TYPE_MAIN   = 0,
+       XFRM_POLICY_TYPE_SUB    = 1,
+       XFRM_POLICY_TYPE_MAX    = 2,
+       XFRM_POLICY_TYPE_ANY    = 255
+};
+
+enum {
+       XFRM_POLICY_IN  = 0,
+       XFRM_POLICY_OUT = 1,
+       XFRM_POLICY_FWD = 2,
+       XFRM_POLICY_MASK = 3,
+       XFRM_POLICY_MAX = 3
+};
+
+enum {
+       XFRM_SHARE_ANY,         /* No limitations */
+       XFRM_SHARE_SESSION,     /* For this session only */
+       XFRM_SHARE_USER,        /* For this user only */
+       XFRM_SHARE_UNIQUE       /* Use once */
+};
+
+#define XFRM_MODE_TRANSPORT 0
+#define XFRM_MODE_TUNNEL 1
+#define XFRM_MODE_ROUTEOPTIMIZATION 2
+#define XFRM_MODE_IN_TRIGGER 3
+#define XFRM_MODE_BEET 4
+#define XFRM_MODE_MAX 5
+
+/* Netlink configuration messages.  */
+enum {
+       XFRM_MSG_BASE = 0x10,
+
+       XFRM_MSG_NEWSA = 0x10,
+#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
+       XFRM_MSG_DELSA,
+#define XFRM_MSG_DELSA XFRM_MSG_DELSA
+       XFRM_MSG_GETSA,
+#define XFRM_MSG_GETSA XFRM_MSG_GETSA
+
+       XFRM_MSG_NEWPOLICY,
+#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
+       XFRM_MSG_DELPOLICY,
+#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
+       XFRM_MSG_GETPOLICY,
+#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
+
+       XFRM_MSG_ALLOCSPI,
+#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
+       XFRM_MSG_ACQUIRE,
+#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
+       XFRM_MSG_EXPIRE,
+#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
+
+       XFRM_MSG_UPDPOLICY,
+#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
+       XFRM_MSG_UPDSA,
+#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
+
+       XFRM_MSG_POLEXPIRE,
+#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
+
+       XFRM_MSG_FLUSHSA,
+#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
+       XFRM_MSG_FLUSHPOLICY,
+#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
+
+       XFRM_MSG_NEWAE,
+#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
+       XFRM_MSG_GETAE,
+#define XFRM_MSG_GETAE XFRM_MSG_GETAE
+
+       XFRM_MSG_REPORT,
+#define XFRM_MSG_REPORT XFRM_MSG_REPORT
+
+       XFRM_MSG_MIGRATE,
+#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
+
+       XFRM_MSG_NEWSADINFO,
+#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
+       XFRM_MSG_GETSADINFO,
+#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
+
+       XFRM_MSG_NEWSPDINFO,
+#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
+       XFRM_MSG_GETSPDINFO,
+#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
+
+       XFRM_MSG_MAPPING,
+#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
+       __XFRM_MSG_MAX
+};
+#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
+
+#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
+
+/*
+ * Generic LSM security context for comunicating to user space
+ * NOTE: Same format as sadb_x_sec_ctx
+ */
+struct xfrm_user_sec_ctx {
+       __u16                   len;
+       __u16                   exttype;
+       __u8                    ctx_alg;  /* LSMs: e.g., selinux == 1 */
+       __u8                    ctx_doi;
+       __u16                   ctx_len;
+};
+
+struct xfrm_user_tmpl {
+       struct xfrm_id          id;
+       __u16                   family;
+       xfrm_address_t          saddr;
+       __u32                   reqid;
+       __u8                    mode;
+       __u8                    share;
+       __u8                    optional;
+       __u32                   aalgos;
+       __u32                   ealgos;
+       __u32                   calgos;
+};
+
+struct xfrm_encap_tmpl {
+       __u16           encap_type;
+       __be16          encap_sport;
+       __be16          encap_dport;
+       xfrm_address_t  encap_oa;
+};
+
+/* AEVENT flags  */
+enum xfrm_ae_ftype_t {
+       XFRM_AE_UNSPEC,
+       XFRM_AE_RTHR=1, /* replay threshold*/
+       XFRM_AE_RVAL=2, /* replay value */
+       XFRM_AE_LVAL=4, /* lifetime value */
+       XFRM_AE_ETHR=8, /* expiry timer threshold */
+       XFRM_AE_CR=16, /* Event cause is replay update */
+       XFRM_AE_CE=32, /* Event cause is timer expiry */
+       XFRM_AE_CU=64, /* Event cause is policy update */
+       __XFRM_AE_MAX
+
+#define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
+};
+
+struct xfrm_userpolicy_type {
+       __u8            type;
+       __u16           reserved1;
+       __u8            reserved2;
+};
+
+/* Netlink message attributes.  */
+enum xfrm_attr_type_t {
+       XFRMA_UNSPEC,
+       XFRMA_ALG_AUTH,         /* struct xfrm_algo */
+       XFRMA_ALG_CRYPT,        /* struct xfrm_algo */
+       XFRMA_ALG_COMP,         /* struct xfrm_algo */
+       XFRMA_ENCAP,            /* struct xfrm_algo + struct xfrm_encap_tmpl */
+       XFRMA_TMPL,             /* 1 or more struct xfrm_user_tmpl */
+       XFRMA_SA,               /* struct xfrm_usersa_info  */
+       XFRMA_POLICY,           /*struct xfrm_userpolicy_info */
+       XFRMA_SEC_CTX,          /* struct xfrm_sec_ctx */
+       XFRMA_LTIME_VAL,
+       XFRMA_REPLAY_VAL,
+       XFRMA_REPLAY_THRESH,
+       XFRMA_ETIMER_THRESH,
+       XFRMA_SRCADDR,          /* xfrm_address_t */
+       XFRMA_COADDR,           /* xfrm_address_t */
+       XFRMA_LASTUSED,         /* unsigned long  */
+       XFRMA_POLICY_TYPE,      /* struct xfrm_userpolicy_type */
+       XFRMA_MIGRATE,
+       XFRMA_ALG_AEAD,         /* struct xfrm_algo_aead */
+       XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */
+       XFRMA_ALG_AUTH_TRUNC,   /* struct xfrm_algo_auth */
+       XFRMA_MARK,             /* struct xfrm_mark */
+       XFRMA_TFCPAD,           /* __u32 */
+       XFRMA_REPLAY_ESN_VAL,   /* struct xfrm_replay_esn */
+       XFRMA_SA_EXTRA_FLAGS,   /* __u32 */
+       XFRMA_PROTO,            /* __u8 */
+       XFRMA_ADDRESS_FILTER,   /* struct xfrm_address_filter */
+       __XFRMA_MAX
+
+#define XFRMA_MAX (__XFRMA_MAX - 1)
+};
+
+struct xfrm_mark {
+       __u32           v; /* value */
+       __u32           m; /* mask */
+};
+
+enum xfrm_sadattr_type_t {
+       XFRMA_SAD_UNSPEC,
+       XFRMA_SAD_CNT,
+       XFRMA_SAD_HINFO,
+       __XFRMA_SAD_MAX
+
+#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
+};
+
+struct xfrmu_sadhinfo {
+       __u32 sadhcnt; /* current hash bkts */
+       __u32 sadhmcnt; /* max allowed hash bkts */
+};
+
+enum xfrm_spdattr_type_t {
+       XFRMA_SPD_UNSPEC,
+       XFRMA_SPD_INFO,
+       XFRMA_SPD_HINFO,
+       XFRMA_SPD_IPV4_HTHRESH,
+       XFRMA_SPD_IPV6_HTHRESH,
+       __XFRMA_SPD_MAX
+
+#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
+};
+
+struct xfrmu_spdinfo {
+       __u32 incnt;
+       __u32 outcnt;
+       __u32 fwdcnt;
+       __u32 inscnt;
+       __u32 outscnt;
+       __u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+       __u32 spdhcnt;
+       __u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+       __u8 lbits;
+       __u8 rbits;
+};
+
+struct xfrm_usersa_info {
+       struct xfrm_selector            sel;
+       struct xfrm_id                  id;
+       xfrm_address_t                  saddr;
+       struct xfrm_lifetime_cfg        lft;
+       struct xfrm_lifetime_cur        curlft;
+       struct xfrm_stats               stats;
+       __u32                           seq;
+       __u32                           reqid;
+       __u16                           family;
+       __u8                            mode;           /* XFRM_MODE_xxx */
+       __u8                            replay_window;
+       __u8                            flags;
+#define XFRM_STATE_NOECN       1
+#define XFRM_STATE_DECAP_DSCP  2
+#define XFRM_STATE_NOPMTUDISC  4
+#define XFRM_STATE_WILDRECV    8
+#define XFRM_STATE_ICMP                16
+#define XFRM_STATE_AF_UNSPEC   32
+#define XFRM_STATE_ALIGN4      64
+#define XFRM_STATE_ESN         128
+};
+
+#define XFRM_SA_XFLAG_DONT_ENCAP_DSCP  1
+
+struct xfrm_usersa_id {
+       xfrm_address_t                  daddr;
+       __be32                          spi;
+       __u16                           family;
+       __u8                            proto;
+};
+
+struct xfrm_aevent_id {
+       struct xfrm_usersa_id           sa_id;
+       xfrm_address_t                  saddr;
+       __u32                           flags;
+       __u32                           reqid;
+};
+
+struct xfrm_userspi_info {
+       struct xfrm_usersa_info         info;
+       __u32                           min;
+       __u32                           max;
+};
+
+struct xfrm_userpolicy_info {
+       struct xfrm_selector            sel;
+       struct xfrm_lifetime_cfg        lft;
+       struct xfrm_lifetime_cur        curlft;
+       __u32                           priority;
+       __u32                           index;
+       __u8                            dir;
+       __u8                            action;
+#define XFRM_POLICY_ALLOW      0
+#define XFRM_POLICY_BLOCK      1
+       __u8                            flags;
+#define XFRM_POLICY_LOCALOK    1       /* Allow user to override global policy */
+       /* Automatically expand selector to include matching ICMP payloads. */
+#define XFRM_POLICY_ICMP       2
+       __u8                            share;
+};
+
+struct xfrm_userpolicy_id {
+       struct xfrm_selector            sel;
+       __u32                           index;
+       __u8                            dir;
+};
+
+struct xfrm_user_acquire {
+       struct xfrm_id                  id;
+       xfrm_address_t                  saddr;
+       struct xfrm_selector            sel;
+       struct xfrm_userpolicy_info     policy;
+       __u32                           aalgos;
+       __u32                           ealgos;
+       __u32                           calgos;
+       __u32                           seq;
+};
+
+struct xfrm_user_expire {
+       struct xfrm_usersa_info         state;
+       __u8                            hard;
+};
+
+struct xfrm_user_polexpire {
+       struct xfrm_userpolicy_info     pol;
+       __u8                            hard;
+};
+
+struct xfrm_usersa_flush {
+       __u8                            proto;
+};
+
+struct xfrm_user_report {
+       __u8                            proto;
+       struct xfrm_selector            sel;
+};
+
+/* Used by MIGRATE to pass addresses IKE should use to perform
+ * SA negotiation with the peer */
+struct xfrm_user_kmaddress {
+       xfrm_address_t                  local;
+       xfrm_address_t                  remote;
+       __u32                           reserved;
+       __u16                           family;
+};
+
+struct xfrm_user_migrate {
+       xfrm_address_t                  old_daddr;
+       xfrm_address_t                  old_saddr;
+       xfrm_address_t                  new_daddr;
+       xfrm_address_t                  new_saddr;
+       __u8                            proto;
+       __u8                            mode;
+       __u16                           reserved;
+       __u32                           reqid;
+       __u16                           old_family;
+       __u16                           new_family;
+};
+
+struct xfrm_user_mapping {
+       struct xfrm_usersa_id           id;
+       __u32                           reqid;
+       xfrm_address_t                  old_saddr;
+       xfrm_address_t                  new_saddr;
+       __be16                          old_sport;
+       __be16                          new_sport;
+};
+
+struct xfrm_address_filter {
+       xfrm_address_t                  saddr;
+       xfrm_address_t                  daddr;
+       __u16                           family;
+       __u8                            splen;
+       __u8                            dplen;
+};
+
+/* backwards compatibility for userspace */
+#define XFRMGRP_ACQUIRE                1
+#define XFRMGRP_EXPIRE         2
+#define XFRMGRP_SA             4
+#define XFRMGRP_POLICY         8
+#define XFRMGRP_REPORT         0x20
+
+enum xfrm_nlgroups {
+       XFRMNLGRP_NONE,
+#define XFRMNLGRP_NONE         XFRMNLGRP_NONE
+       XFRMNLGRP_ACQUIRE,
+#define XFRMNLGRP_ACQUIRE      XFRMNLGRP_ACQUIRE
+       XFRMNLGRP_EXPIRE,
+#define XFRMNLGRP_EXPIRE       XFRMNLGRP_EXPIRE
+       XFRMNLGRP_SA,
+#define XFRMNLGRP_SA           XFRMNLGRP_SA
+       XFRMNLGRP_POLICY,
+#define XFRMNLGRP_POLICY       XFRMNLGRP_POLICY
+       XFRMNLGRP_AEVENTS,
+#define XFRMNLGRP_AEVENTS      XFRMNLGRP_AEVENTS
+       XFRMNLGRP_REPORT,
+#define XFRMNLGRP_REPORT       XFRMNLGRP_REPORT
+       XFRMNLGRP_MIGRATE,
+#define XFRMNLGRP_MIGRATE      XFRMNLGRP_MIGRATE
+       XFRMNLGRP_MAPPING,
+#define XFRMNLGRP_MAPPING      XFRMNLGRP_MAPPING
+       __XFRMNLGRP_MAX
+};
+#define XFRMNLGRP_MAX  (__XFRMNLGRP_MAX - 1)
+
+#endif /* _LINUX_XFRM_H */
diff --git a/lib/libdss-include/include/linux/xilinx-v4l2-controls.h b/lib/libdss-include/include/linux/xilinx-v4l2-controls.h
new file mode 100644 (file)
index 0000000..fb495b9
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Xilinx Controls Header
+ *
+ * Copyright (C) 2013-2015 Ideas on Board
+ * Copyright (C) 2013-2015 Xilinx, Inc.
+ *
+ * Contacts: Hyun Kwon <hyun.kwon@xilinx.com>
+ *           Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __UAPI_XILINX_V4L2_CONTROLS_H__
+#define __UAPI_XILINX_V4L2_CONTROLS_H__
+
+#include <linux/v4l2-controls.h>
+
+#define V4L2_CID_XILINX_OFFSET 0xc000
+#define V4L2_CID_XILINX_BASE   (V4L2_CID_USER_BASE + V4L2_CID_XILINX_OFFSET)
+
+/*
+ * Private Controls for Xilinx Video IPs
+ */
+
+/*
+ * Xilinx TPG Video IP
+ */
+
+#define V4L2_CID_XILINX_TPG                    (V4L2_CID_USER_BASE + 0xc000)
+
+/* Draw cross hairs */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIRS                (V4L2_CID_XILINX_TPG + 1)
+/* Enable a moving box */
+#define V4L2_CID_XILINX_TPG_MOVING_BOX         (V4L2_CID_XILINX_TPG + 2)
+/* Mask out a color component */
+#define V4L2_CID_XILINX_TPG_COLOR_MASK         (V4L2_CID_XILINX_TPG + 3)
+/* Enable a stuck pixel feature */
+#define V4L2_CID_XILINX_TPG_STUCK_PIXEL                (V4L2_CID_XILINX_TPG + 4)
+/* Enable a noisy output */
+#define V4L2_CID_XILINX_TPG_NOISE              (V4L2_CID_XILINX_TPG + 5)
+/* Enable the motion feature */
+#define V4L2_CID_XILINX_TPG_MOTION             (V4L2_CID_XILINX_TPG + 6)
+/* Configure the motion speed of moving patterns */
+#define V4L2_CID_XILINX_TPG_MOTION_SPEED       (V4L2_CID_XILINX_TPG + 7)
+/* The row of horizontal cross hair location */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIR_ROW     (V4L2_CID_XILINX_TPG + 8)
+/* The colum of vertical cross hair location */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIR_COLUMN  (V4L2_CID_XILINX_TPG + 9)
+/* Set starting point of sine wave for horizontal component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_START   (V4L2_CID_XILINX_TPG + 10)
+/* Set speed of the horizontal component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_SPEED   (V4L2_CID_XILINX_TPG + 11)
+/* Set starting point of sine wave for vertical component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_VER_START   (V4L2_CID_XILINX_TPG + 12)
+/* Set speed of the vertical component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_VER_SPEED   (V4L2_CID_XILINX_TPG + 13)
+/* Moving box size */
+#define V4L2_CID_XILINX_TPG_BOX_SIZE           (V4L2_CID_XILINX_TPG + 14)
+/* Moving box color */
+#define V4L2_CID_XILINX_TPG_BOX_COLOR          (V4L2_CID_XILINX_TPG + 15)
+/* Upper limit count of generated stuck pixels */
+#define V4L2_CID_XILINX_TPG_STUCK_PIXEL_THRESH (V4L2_CID_XILINX_TPG + 16)
+/* Noise level */
+#define V4L2_CID_XILINX_TPG_NOISE_GAIN         (V4L2_CID_XILINX_TPG + 17)
+
+#endif /* __UAPI_XILINX_V4L2_CONTROLS_H__ */
diff --git a/lib/libdss-include/include/linux/zorro.h b/lib/libdss-include/include/linux/zorro.h
new file mode 100644 (file)
index 0000000..2a26edf
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions
+ *
+ *  Copyright (C) 1995--2003 Geert Uytterhoeven
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License.  See the file COPYING in the main directory of this archive
+ *  for more details.
+ */
+
+#ifndef _LINUX_ZORRO_H
+#define _LINUX_ZORRO_H
+
+#include <linux/types.h>
+
+
+    /*
+     *  Each Zorro board has a 32-bit ID of the form
+     *
+     *      mmmmmmmmmmmmmmmmppppppppeeeeeeee
+     *
+     *  with
+     *
+     *      mmmmmmmmmmmmmmmm   16-bit Manufacturer ID (assigned by CBM (sigh))
+     *      pppppppp           8-bit Product ID (assigned by manufacturer)
+     *      eeeeeeee           8-bit Extended Product ID (currently only used
+     *                         for some GVP boards)
+     */
+
+
+#define ZORRO_MANUF(id)                ((id) >> 16)
+#define ZORRO_PROD(id)         (((id) >> 8) & 0xff)
+#define ZORRO_EPC(id)          ((id) & 0xff)
+
+#define ZORRO_ID(manuf, prod, epc) \
+       ((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc))
+
+typedef __u32 zorro_id;
+
+
+/* Include the ID list */
+#include <linux/zorro_ids.h>
+
+
+    /*
+     *  GVP identifies most of its products through the 'extended product code'
+     *  (epc). The epc has to be ANDed with the GVP_PRODMASK before the
+     *  identification.
+     */
+
+#define GVP_PRODMASK           (0xf8)
+#define GVP_SCSICLKMASK                (0x01)
+
+enum GVP_flags {
+       GVP_IO                  = 0x01,
+       GVP_ACCEL               = 0x02,
+       GVP_SCSI                = 0x04,
+       GVP_24BITDMA            = 0x08,
+       GVP_25BITDMA            = 0x10,
+       GVP_NOBANK              = 0x20,
+       GVP_14MHZ               = 0x40,
+};
+
+
+struct Node {
+       __be32 ln_Succ;         /* Pointer to next (successor) */
+       __be32 ln_Pred;         /* Pointer to previous (predecessor) */
+       __u8   ln_Type;
+       __s8   ln_Pri;          /* Priority, for sorting */
+       __be32 ln_Name;         /* ID string, null terminated */
+} __attribute__((packed));
+
+struct ExpansionRom {
+       /* -First 16 bytes of the expansion ROM */
+       __u8   er_Type;         /* Board type, size and flags */
+       __u8   er_Product;      /* Product number, assigned by manufacturer */
+       __u8   er_Flags;                /* Flags */
+       __u8   er_Reserved03;   /* Must be zero ($ff inverted) */
+       __be16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */
+       __be32 er_SerialNumber; /* Available for use by manufacturer */
+       __be16 er_InitDiagVec;  /* Offset to optional "DiagArea" structure */
+       __u8   er_Reserved0c;
+       __u8   er_Reserved0d;
+       __u8   er_Reserved0e;
+       __u8   er_Reserved0f;
+} __attribute__((packed));
+
+/* er_Type board type bits */
+#define ERT_TYPEMASK   0xc0
+#define ERT_ZORROII    0xc0
+#define ERT_ZORROIII   0x80
+
+/* other bits defined in er_Type */
+#define ERTB_MEMLIST   5               /* Link RAM into free memory list */
+#define ERTF_MEMLIST   (1<<5)
+
+struct ConfigDev {
+       struct Node     cd_Node;
+       __u8            cd_Flags;       /* (read/write) */
+       __u8            cd_Pad;         /* reserved */
+       struct ExpansionRom cd_Rom;     /* copy of board's expansion ROM */
+       __be32          cd_BoardAddr;   /* where in memory the board was placed */
+       __be32          cd_BoardSize;   /* size of board in bytes */
+       __be16          cd_SlotAddr;    /* which slot number (PRIVATE) */
+       __be16          cd_SlotSize;    /* number of slots (PRIVATE) */
+       __be32          cd_Driver;      /* pointer to node of driver */
+       __be32          cd_NextCD;      /* linked list of drivers to config */
+       __be32          cd_Unused[4];   /* for whatever the driver wants */
+} __attribute__((packed));
+
+#define ZORRO_NUM_AUTO         16
+
+#endif /* _LINUX_ZORRO_H */
diff --git a/lib/libdss-include/include/linux/zorro_ids.h b/lib/libdss-include/include/linux/zorro_ids.h
new file mode 100644 (file)
index 0000000..74bc53b
--- /dev/null
@@ -0,0 +1,552 @@
+/*
+ *  Zorro board IDs
+ *
+ *  Please keep sorted.
+ */
+
+
+#define ZORRO_MANUF_PACIFIC_PERIPHERALS                                0x00D3
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SE_2000_A500           ZORRO_ID(PACIFIC_PERIPHERALS, 0x00, 0)
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SCSI                   ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA_2                         0x0100
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE                   ZORRO_ID(MACROSYSTEMS_USA_2, 0x13, 0)
+
+#define ZORRO_MANUF_KUPKE_1                                    0x00DD
+#define  ZORRO_PROD_KUPKE_GOLEM_RAM_BOX_2MB                    ZORRO_ID(KUPKE_1, 0x00, 0)
+
+#define ZORRO_MANUF_MEMPHIS                                    0x0100
+#define  ZORRO_PROD_MEMPHIS_STORMBRINGER                       ZORRO_ID(MEMPHIS, 0x00, 0)
+
+#define ZORRO_MANUF_3_STATE                                    0x0200
+#define  ZORRO_PROD_3_STATE_MEGAMIX_2000                       ZORRO_ID(3_STATE, 0x02, 0)
+
+#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG                     0x0201
+#define  ZORRO_PROD_CBM_A2088_A2286                            ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x01, 0)
+#define  ZORRO_PROD_CBM_A2286                                  ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x02, 0)
+#define  ZORRO_PROD_CBM_A4091_1                                        ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2386SX_1                              ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x67, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1                   0x0202
+#define  ZORRO_PROD_CBM_A2090A                                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x01, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_1                           ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x02, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_2                           ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x03, 0)
+#define  ZORRO_PROD_CBM_A2090B                                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x04, 0)
+#define  ZORRO_PROD_CBM_A2060                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x09, 0)
+#define  ZORRO_PROD_CBM_A590_A2052_A2058_A2091                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x0A, 0)
+#define  ZORRO_PROD_CBM_A560_RAM                               ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x20, 0)
+#define  ZORRO_PROD_CBM_A2232_PROTOTYPE                                ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x45, 0)
+#define  ZORRO_PROD_CBM_A2232                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x46, 0)
+#define  ZORRO_PROD_CBM_A2620                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x50, 0)
+#define  ZORRO_PROD_CBM_A2630                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x51, 0)
+#define  ZORRO_PROD_CBM_A4091_2                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2065_1                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x5A, 0)
+#define  ZORRO_PROD_CBM_ROMULATOR                              ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x60, 0)
+#define  ZORRO_PROD_CBM_A3000_TEST_FIXTURE                     ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x61, 0)
+#define  ZORRO_PROD_CBM_A2386SX_2                              ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x67, 0)
+#define  ZORRO_PROD_CBM_A2065_2                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_2                   0x0203
+#define  ZORRO_PROD_CBM_A2090A_CM                              ZORRO_ID(COMMODORE_WEST_CHESTER_2, 0x03, 0)
+
+#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2      0x02F4
+#define  ZORRO_PROD_PPS_EXP8000                                        ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2, 0x02, 0)
+
+#define ZORRO_MANUF_KOLFF_COMPUTER_SUPPLIES                    0x02FF
+#define  ZORRO_PROD_KCS_POWER_PC_BOARD                         ZORRO_ID(KOLFF_COMPUTER_SUPPLIES, 0x00, 0)
+
+#define ZORRO_MANUF_CARDCO_1                                   0x03EC
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_1                       ZORRO_ID(CARDCO_1, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_1                             ZORRO_ID(CARDCO_1, 0x0C, 0)
+#define  ZORRO_PROD_CARDCO_ESCORT                              ZORRO_ID(CARDCO_1, 0x0E, 0)
+#define  ZORRO_PROD_CARDCO_A2410                               ZORRO_ID(CARDCO_1, 0xF5, 0)
+
+#define ZORRO_MANUF_A_SQUARED                                  0x03ED
+#define  ZORRO_PROD_A_SQUARED_LIVE_2000                                ZORRO_ID(A_SQUARED, 0x01, 0)
+
+#define ZORRO_MANUF_COMSPEC_COMMUNICATIONS                     0x03EE
+#define  ZORRO_PROD_COMSPEC_COMMUNICATIONS_AX2000              ZORRO_ID(COMSPEC_COMMUNICATIONS, 0x01, 0)
+
+#define ZORRO_MANUF_ANAKIN_RESEARCH                            0x03F1
+#define  ZORRO_PROD_ANAKIN_RESEARCH_EASYL                      ZORRO_ID(ANAKIN_RESEARCH, 0x01, 0)
+
+#define ZORRO_MANUF_MICROBOTICS                                        0x03F2
+#define  ZORRO_PROD_MICROBOTICS_STARBOARD_II                   ZORRO_ID(MICROBOTICS, 0x00, 0)
+#define  ZORRO_PROD_MICROBOTICS_STARDRIVE                      ZORRO_ID(MICROBOTICS, 0x02, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_A                         ZORRO_ID(MICROBOTICS, 0x03, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_Z                         ZORRO_ID(MICROBOTICS, 0x04, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA_RAM                      ZORRO_ID(MICROBOTICS, 0x20, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR_RAM                     ZORRO_ID(MICROBOTICS, 0x40, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR                         ZORRO_ID(MICROBOTICS, 0x41, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_RAM_32                     ZORRO_ID(MICROBOTICS, 0x44, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_68030                      ZORRO_ID(MICROBOTICS, 0x45, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA                          ZORRO_ID(MICROBOTICS, 0x60, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z_RAM             ZORRO_ID(MICROBOTICS, 0x81, 0)
+#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_1               ZORRO_ID(MICROBOTICS, 0x96, 0)
+#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_2               ZORRO_ID(MICROBOTICS, 0x9E, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z                 ZORRO_ID(MICROBOTICS, 0xC1, 0)
+
+#define ZORRO_MANUF_ACCESS_ASSOCIATES_ALEGRA                   0x03F4
+
+#define ZORRO_MANUF_EXPANSION_TECHNOLOGIES                     0x03F6
+
+#define ZORRO_MANUF_ASDG                                       0x03FF
+#define  ZORRO_PROD_ASDG_MEMORY_1                              ZORRO_ID(ASDG, 0x01, 0)
+#define  ZORRO_PROD_ASDG_MEMORY_2                              ZORRO_ID(ASDG, 0x02, 0)
+#define  ZORRO_PROD_ASDG_EB920_LAN_ROVER                       ZORRO_ID(ASDG, 0xFE, 0)
+#define  ZORRO_PROD_ASDG_GPIB_DUALIEEE488_TWIN_X               ZORRO_ID(ASDG, 0xFF, 0)
+
+#define ZORRO_MANUF_IMTRONICS_1                                        0x0404
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_1                 ZORRO_ID(IMTRONICS_1, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_2                 ZORRO_ID(IMTRONICS_1, 0x57, 0)
+
+#define ZORRO_MANUF_CBM_UNIVERSITY_OF_LOWELL                   0x0406
+#define  ZORRO_PROD_CBM_A2410                                  ZORRO_ID(CBM_UNIVERSITY_OF_LOWELL, 0x00, 0)
+
+#define ZORRO_MANUF_AMERISTAR                                  0x041D
+#define  ZORRO_PROD_AMERISTAR_A2065                            ZORRO_ID(AMERISTAR, 0x01, 0)
+#define  ZORRO_PROD_AMERISTAR_A560                             ZORRO_ID(AMERISTAR, 0x09, 0)
+#define  ZORRO_PROD_AMERISTAR_A4066                            ZORRO_ID(AMERISTAR, 0x0A, 0)
+
+#define ZORRO_MANUF_SUPRA                                      0x0420
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_4x4                       ZORRO_ID(SUPRA, 0x01, 0)
+#define  ZORRO_PROD_SUPRA_1000_RAM                             ZORRO_ID(SUPRA, 0x02, 0)
+#define  ZORRO_PROD_SUPRA_2000_DMA                             ZORRO_ID(SUPRA, 0x03, 0)
+#define  ZORRO_PROD_SUPRA_500                                  ZORRO_ID(SUPRA, 0x05, 0)
+#define  ZORRO_PROD_SUPRA_500_SCSI                             ZORRO_ID(SUPRA, 0x08, 0)
+#define  ZORRO_PROD_SUPRA_500XP_2000_RAM                       ZORRO_ID(SUPRA, 0x09, 0)
+#define  ZORRO_PROD_SUPRA_500RX_2000_RAM                       ZORRO_ID(SUPRA, 0x0A, 0)
+#define  ZORRO_PROD_SUPRA_2400ZI                               ZORRO_ID(SUPRA, 0x0B, 0)
+#define  ZORRO_PROD_SUPRA_500XP_SUPRADRIVE_WORDSYNC            ZORRO_ID(SUPRA, 0x0C, 0)
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_WORDSYNC_II               ZORRO_ID(SUPRA, 0x0D, 0)
+#define  ZORRO_PROD_SUPRA_2400ZIPLUS                           ZORRO_ID(SUPRA, 0x10, 0)
+
+#define ZORRO_MANUF_COMPUTER_SYSTEMS_ASSOCIATES                        0x0422
+#define  ZORRO_PROD_CSA_MAGNUM                                 ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x11, 0)
+#define  ZORRO_PROD_CSA_12_GAUGE                               ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x15, 0)
+
+#define ZORRO_MANUF_MARC_MICHAEL_GROTH                         0x0439
+
+#define ZORRO_MANUF_M_TECH                                     0x0502
+#define  ZORRO_PROD_MTEC_AT500_1                               ZORRO_ID(M_TECH, 0x03, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_1                    0x06E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_1, 0x08, 0)
+
+#define ZORRO_MANUF_BYTEBOX                                    0x07DA
+#define  ZORRO_PROD_BYTEBOX_A500                               ZORRO_ID(BYTEBOX, 0x00, 0)
+
+#define ZORRO_MANUF_DKB_POWER_COMPUTING                                0x07DC
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_SECUREKEY              ZORRO_ID(DKB_POWER_COMPUTING, 0x09, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_3128               ZORRO_ID(DKB_POWER_COMPUTING, 0x0E, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_RAPID_FIRE             ZORRO_ID(DKB_POWER_COMPUTING, 0x0F, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_1202               ZORRO_ID(DKB_POWER_COMPUTING, 0x10, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030 ZORRO_ID(DKB_POWER_COMPUTING, 0x12, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_1         ZORRO_ID(DKB_POWER_COMPUTING, 0x17, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_2         ZORRO_ID(DKB_POWER_COMPUTING, 0xFF, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2                    0x07E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_4K                     ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x01, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_2                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x02, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_3                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x03, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_1                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x08, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_RAM                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_1                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0A, 0)
+#define  ZORRO_PROD_GVP_EPC_BASE                               ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_1                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x20)
+#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_1                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x30)
+#define  ZORRO_PROD_GVP_A1291                                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x40)
+#define  ZORRO_PROD_GVP_COMBO_030_R4                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x60)
+#define  ZORRO_PROD_GVP_COMBO_030_R4_SCSI                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70)
+#define  ZORRO_PROD_GVP_PHONEPAK                               ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x78)
+#define  ZORRO_PROD_GVP_IO_EXTENDER                            ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x98)
+#define  ZORRO_PROD_GVP_GFORCE_030                             ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xa0)
+#define  ZORRO_PROD_GVP_GFORCE_030_SCSI                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0)
+#define  ZORRO_PROD_GVP_A530                                   ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xc0)
+#define  ZORRO_PROD_GVP_A530_SCSI                              ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xe0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3_SCSI                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf0)
+#define  ZORRO_PROD_GVP_SERIES_II                              ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf8)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_2                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)
+/*#define  ZORRO_PROD_GVP_A2000_030                            ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+/*#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_2                    ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+#define  ZORRO_PROD_GVP_GFORCE_040_060                         ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0)
+#define  ZORRO_PROD_GVP_IMPACT_VISION_24                       ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x20, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_2                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0xFF, 0)
+
+#define ZORRO_MANUF_CALIFORNIA_ACCESS_SYNERGY                  0x07E5
+#define  ZORRO_PROD_CALIFORNIA_ACCESS_SYNERGY_MALIBU           ZORRO_ID(CALIFORNIA_ACCESS_SYNERGY, 0x01, 0)
+
+#define ZORRO_MANUF_XETEC                                      0x07E6
+#define  ZORRO_PROD_XETEC_FASTCARD                             ZORRO_ID(XETEC, 0x01, 0)
+#define  ZORRO_PROD_XETEC_FASTCARD_RAM                         ZORRO_ID(XETEC, 0x02, 0)
+#define  ZORRO_PROD_XETEC_FASTCARD_PLUS                                ZORRO_ID(XETEC, 0x03, 0)
+
+#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS                0x07EA
+#define  ZORRO_PROD_PPS_MERCURY                                        ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x00, 0)
+#define  ZORRO_PROD_PPS_A3000_68040                            ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_PPS_A2000_68040                            ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x69, 0)
+#define  ZORRO_PROD_PPS_ZEUS                                   ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x96, 0)
+#define  ZORRO_PROD_PPS_A500_68040                             ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0xBB, 0)
+
+#define ZORRO_MANUF_XEBEC                                      0x07EC
+
+#define ZORRO_MANUF_SPIRIT_TECHNOLOGY                          0x07F2
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN1000           ZORRO_ID(SPIRIT_TECHNOLOGY, 0x01, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN500            ZORRO_ID(SPIRIT_TECHNOLOGY, 0x02, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_SIN500                   ZORRO_ID(SPIRIT_TECHNOLOGY, 0x03, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_HDA_506                  ZORRO_ID(SPIRIT_TECHNOLOGY, 0x04, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_AX_S                     ZORRO_ID(SPIRIT_TECHNOLOGY, 0x05, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_OCTABYTE                 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x06, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INMATE                   ZORRO_ID(SPIRIT_TECHNOLOGY, 0x08, 0)
+
+#define ZORRO_MANUF_SPIRIT_TECHNOLOGY_2                                0x07F3
+
+#define ZORRO_MANUF_BSC_ALFADATA_1                             0x07FE
+#define  ZORRO_PROD_BSC_ALF_3_1                                        ZORRO_ID(BSC_ALFADATA_1, 0x03, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_2                             0x0801
+#define  ZORRO_PROD_BSC_ALF_2_1                                        ZORRO_ID(BSC_ALFADATA_2, 0x01, 0)
+#define  ZORRO_PROD_BSC_ALF_2_2                                        ZORRO_ID(BSC_ALFADATA_2, 0x02, 0)
+#define  ZORRO_PROD_BSC_ALF_3_2                                        ZORRO_ID(BSC_ALFADATA_2, 0x03, 0)
+
+#define ZORRO_MANUF_CARDCO_2                                   0x0802
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_2                       ZORRO_ID(CARDCO_2, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_2                             ZORRO_ID(CARDCO_2, 0x0C, 0)
+
+#define ZORRO_MANUF_JOCHHEIM                                   0x0804
+#define  ZORRO_PROD_JOCHHEIM_RAM                               ZORRO_ID(JOCHHEIM, 0x01, 0)
+
+#define ZORRO_MANUF_CHECKPOINT_TECHNOLOGIES                    0x0807
+#define  ZORRO_PROD_CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION    ZORRO_ID(CHECKPOINT_TECHNOLOGIES, 0x00, 0)
+
+#define ZORRO_MANUF_EDOTRONIK                                  0x0810
+#define  ZORRO_PROD_EDOTRONIK_IEEE_488                         ZORRO_ID(EDOTRONIK, 0x01, 0)
+#define  ZORRO_PROD_EDOTRONIK_8032                             ZORRO_ID(EDOTRONIK, 0x02, 0)
+#define  ZORRO_PROD_EDOTRONIK_MULTISERIAL                      ZORRO_ID(EDOTRONIK, 0x03, 0)
+#define  ZORRO_PROD_EDOTRONIK_VIDEODIGITIZER                   ZORRO_ID(EDOTRONIK, 0x04, 0)
+#define  ZORRO_PROD_EDOTRONIK_PARALLEL_IO                      ZORRO_ID(EDOTRONIK, 0x05, 0)
+#define  ZORRO_PROD_EDOTRONIK_PIC_PROTOYPING                   ZORRO_ID(EDOTRONIK, 0x06, 0)
+#define  ZORRO_PROD_EDOTRONIK_ADC                              ZORRO_ID(EDOTRONIK, 0x07, 0)
+#define  ZORRO_PROD_EDOTRONIK_VME                              ZORRO_ID(EDOTRONIK, 0x08, 0)
+#define  ZORRO_PROD_EDOTRONIK_DSP96000                         ZORRO_ID(EDOTRONIK, 0x09, 0)
+
+#define ZORRO_MANUF_NES_INC                                    0x0813
+#define  ZORRO_PROD_NES_INC_RAM                                        ZORRO_ID(NES_INC, 0x00, 0)
+
+#define ZORRO_MANUF_ICD                                                0x0817
+#define  ZORRO_PROD_ICD_ADVANTAGE_2000_SCSI                    ZORRO_ID(ICD, 0x01, 0)
+#define  ZORRO_PROD_ICD_ADVANTAGE_IDE                          ZORRO_ID(ICD, 0x03, 0)
+#define  ZORRO_PROD_ICD_ADVANTAGE_2080_RAM                     ZORRO_ID(ICD, 0x04, 0)
+
+#define ZORRO_MANUF_KUPKE_2                                    0x0819
+#define  ZORRO_PROD_KUPKE_OMTI                                 ZORRO_ID(KUPKE_2, 0x01, 0)
+#define  ZORRO_PROD_KUPKE_SCSI_II                              ZORRO_ID(KUPKE_2, 0x02, 0)
+#define  ZORRO_PROD_KUPKE_GOLEM_BOX                            ZORRO_ID(KUPKE_2, 0x03, 0)
+#define  ZORRO_PROD_KUPKE_030_882                              ZORRO_ID(KUPKE_2, 0x04, 0)
+#define  ZORRO_PROD_KUPKE_SCSI_AT                              ZORRO_ID(KUPKE_2, 0x05, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_3                    0x081D
+#define  ZORRO_PROD_GVP_A2000_RAM8                             ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_2                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x0A, 0)
+
+#define ZORRO_MANUF_INTERWORKS_NETWORK                         0x081E
+
+#define ZORRO_MANUF_HARDITAL_SYNTHESIS                         0x0820
+#define  ZORRO_PROD_HARDITAL_SYNTHESIS_TQM_68030_68882         ZORRO_ID(HARDITAL_SYNTHESIS, 0x14, 0)
+
+#define ZORRO_MANUF_APPLIED_ENGINEERING                                0x0828
+#define  ZORRO_PROD_APPLIED_ENGINEERING_DL2000                 ZORRO_ID(APPLIED_ENGINEERING, 0x10, 0)
+#define  ZORRO_PROD_APPLIED_ENGINEERING_RAM_WORKS              ZORRO_ID(APPLIED_ENGINEERING, 0xE0, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_3                             0x082C
+#define  ZORRO_PROD_BSC_OKTAGON_2008                           ZORRO_ID(BSC_ALFADATA_3, 0x05, 0)
+#define  ZORRO_PROD_BSC_TANDEM_AT_2008_508                     ZORRO_ID(BSC_ALFADATA_3, 0x06, 0)
+#define  ZORRO_PROD_BSC_ALFA_RAM_1200                          ZORRO_ID(BSC_ALFADATA_3, 0x07, 0)
+#define  ZORRO_PROD_BSC_OKTAGON_2008_RAM                       ZORRO_ID(BSC_ALFADATA_3, 0x08, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_I                            ZORRO_ID(BSC_ALFADATA_3, 0x10, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_II                           ZORRO_ID(BSC_ALFADATA_3, 0x11, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_III                          ZORRO_ID(BSC_ALFADATA_3, 0x12, 0)
+#define  ZORRO_PROD_BSC_FRAMEMASTER_II                         ZORRO_ID(BSC_ALFADATA_3, 0x20, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_RAM                           ZORRO_ID(BSC_ALFADATA_3, 0x21, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_REG                           ZORRO_ID(BSC_ALFADATA_3, 0x22, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD                                ZORRO_ID(BSC_ALFADATA_3, 0x40, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD_II                     ZORRO_ID(BSC_ALFADATA_3, 0x41, 0)
+
+#define ZORRO_MANUF_PHOENIX                                    0x0835
+#define  ZORRO_PROD_PHOENIX_ST506                              ZORRO_ID(PHOENIX, 0x21, 0)
+#define  ZORRO_PROD_PHOENIX_SCSI                               ZORRO_ID(PHOENIX, 0x22, 0)
+#define  ZORRO_PROD_PHOENIX_RAM                                        ZORRO_ID(PHOENIX, 0xBE, 0)
+
+#define ZORRO_MANUF_ADVANCED_STORAGE_SYSTEMS                   0x0836
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS             ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM         ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x08, 0)
+
+#define ZORRO_MANUF_IMPULSE                                    0x0838
+#define  ZORRO_PROD_IMPULSE_FIRECRACKER_24                     ZORRO_ID(IMPULSE, 0x00, 0)
+
+#define ZORRO_MANUF_IVS                                                0x0840
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_2                                ZORRO_ID(IVS, 0x02, 0)
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_1                                ZORRO_ID(IVS, 0x04, 0)
+#define  ZORRO_PROD_IVS_OVERDRIVE                              ZORRO_ID(IVS, 0x10, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_CLASSIC                      ZORRO_ID(IVS, 0x30, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_PRO_GRANDSLAM                        ZORRO_ID(IVS, 0x34, 0)
+#define  ZORRO_PROD_IVS_META_4                                 ZORRO_ID(IVS, 0x40, 0)
+#define  ZORRO_PROD_IVS_WAVETOOLS                              ZORRO_ID(IVS, 0xBF, 0)
+#define  ZORRO_PROD_IVS_VECTOR_1                               ZORRO_ID(IVS, 0xF3, 0)
+#define  ZORRO_PROD_IVS_VECTOR_2                               ZORRO_ID(IVS, 0xF4, 0)
+
+#define ZORRO_MANUF_VECTOR_1                                   0x0841
+#define  ZORRO_PROD_VECTOR_CONNECTION_1                                ZORRO_ID(VECTOR_1, 0xE3, 0)
+
+#define ZORRO_MANUF_XPERT_PRODEV                               0x0845
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_RAM                   ZORRO_ID(XPERT_PRODEV, 0x01, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_REG                   ZORRO_ID(XPERT_PRODEV, 0x02, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_RAM                    ZORRO_ID(XPERT_PRODEV, 0x03, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_1                  ZORRO_ID(XPERT_PRODEV, 0x04, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_2                  ZORRO_ID(XPERT_PRODEV, 0xC9, 0)
+
+#define ZORRO_MANUF_HYDRA_SYSTEMS                              0x0849
+#define  ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET                     ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0)
+
+#define ZORRO_MANUF_SUNRIZE_INDUSTRIES                         0x084F
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD1012                  ZORRO_ID(SUNRIZE_INDUSTRIES, 0x01, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD516                   ZORRO_ID(SUNRIZE_INDUSTRIES, 0x02, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_DD512                   ZORRO_ID(SUNRIZE_INDUSTRIES, 0x03, 0)
+
+#define ZORRO_MANUF_TRICERATOPS                                        0x0850
+#define  ZORRO_PROD_TRICERATOPS_MULTI_IO                       ZORRO_ID(TRICERATOPS, 0x01, 0)
+
+#define ZORRO_MANUF_APPLIED_MAGIC                              0x0851
+#define  ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER                 ZORRO_ID(APPLIED_MAGIC, 0x01, 0)
+#define  ZORRO_PROD_APPLIED_MAGIC_DIGITAL_BROADCASTER          ZORRO_ID(APPLIED_MAGIC, 0x06, 0)
+
+#define ZORRO_MANUF_GFX_BASE                                   0x085E
+#define  ZORRO_PROD_GFX_BASE_GDA_1_VRAM                                ZORRO_ID(GFX_BASE, 0x00, 0)
+#define  ZORRO_PROD_GFX_BASE_GDA_1                             ZORRO_ID(GFX_BASE, 0x01, 0)
+
+#define ZORRO_MANUF_ROCTEC                                     0x0860
+#define  ZORRO_PROD_ROCTEC_RH_800C                             ZORRO_ID(ROCTEC, 0x01, 0)
+#define  ZORRO_PROD_ROCTEC_RH_800C_RAM                         ZORRO_ID(ROCTEC, 0x01, 0)
+
+#define ZORRO_MANUF_KATO                                       0x0861
+#define  ZORRO_PROD_KATO_MELODY                                        ZORRO_ID(KATO, 0x80, 0)
+/* ID clash!! */
+#define ZORRO_MANUF_HELFRICH_1                                 0x0861
+#define  ZORRO_PROD_HELFRICH_RAINBOW_II                                ZORRO_ID(HELFRICH_1, 0x20, 0)
+#define  ZORRO_PROD_HELFRICH_RAINBOW_III                       ZORRO_ID(HELFRICH_1, 0x21, 0)
+
+#define ZORRO_MANUF_ATLANTIS                                   0x0862
+
+#define ZORRO_MANUF_PROTAR                                     0x0864
+
+#define ZORRO_MANUF_ACS                                                0x0865
+
+#define ZORRO_MANUF_SOFTWARE_RESULTS_ENTERPRISES               0x0866
+#define  ZORRO_PROD_SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS        ZORRO_ID(SOFTWARE_RESULTS_ENTERPRISES, 0x01, 0)
+
+#define ZORRO_MANUF_MASOBOSHI                                  0x086D
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_SC201                        ZORRO_ID(MASOBOSHI, 0x03, 0)
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_MC702                        ZORRO_ID(MASOBOSHI, 0x04, 0)
+#define  ZORRO_PROD_MASOBOSHI_MVD_819                          ZORRO_ID(MASOBOSHI, 0x07, 0)
+
+#define ZORRO_MANUF_MAINHATTAN_DATA                            0x086F
+#define  ZORRO_PROD_MAINHATTAN_DATA_IDE                                ZORRO_ID(MAINHATTAN_DATA, 0x01, 0)
+
+#define ZORRO_MANUF_VILLAGE_TRONIC                             0x0877
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_RAM                  ZORRO_ID(VILLAGE_TRONIC, 0x01, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_REG                  ZORRO_ID(VILLAGE_TRONIC, 0x02, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_16M_PROTOTYPE                ZORRO_ID(VILLAGE_TRONIC, 0x03, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM      ZORRO_ID(VILLAGE_TRONIC, 0x0B, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG      ZORRO_ID(VILLAGE_TRONIC, 0x0C, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_SEGMENTED_MODE   ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM1          ZORRO_ID(VILLAGE_TRONIC, 0x15, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM2          ZORRO_ID(VILLAGE_TRONIC, 0x16, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG           ZORRO_ID(VILLAGE_TRONIC, 0x17, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3               ZORRO_ID(VILLAGE_TRONIC, 0x18, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE                     ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2                    ZORRO_ID(VILLAGE_TRONIC, 0xCA, 0)
+
+#define ZORRO_MANUF_UTILITIES_UNLIMITED                                0x087B
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE         ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0)
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE2                ZORRO_ID(UTILITIES_UNLIMITED, 0x20, 0)
+
+#define ZORRO_MANUF_AMITRIX                                    0x0880
+#define  ZORRO_PROD_AMITRIX_MULTI_IO                           ZORRO_ID(AMITRIX, 0x01, 0)
+#define  ZORRO_PROD_AMITRIX_CD_RAM                             ZORRO_ID(AMITRIX, 0x02, 0)
+
+#define ZORRO_MANUF_ARMAX                                      0x0885
+#define  ZORRO_PROD_ARMAX_OMNIBUS                              ZORRO_ID(ARMAX, 0x00, 0)
+
+#define ZORRO_MANUF_ZEUS                                       0x088D
+#define  ZORRO_PROD_ZEUS_SPIDER                                        ZORRO_ID(ZEUS, 0x04, 0)
+
+#define ZORRO_MANUF_NEWTEK                                     0x088F
+#define  ZORRO_PROD_NEWTEK_VIDEOTOASTER                                ZORRO_ID(NEWTEK, 0x00, 0)
+
+#define ZORRO_MANUF_M_TECH_GERMANY                             0x0890
+#define  ZORRO_PROD_MTEC_AT500_2                               ZORRO_ID(M_TECH_GERMANY, 0x01, 0)
+#define  ZORRO_PROD_MTEC_68030                                 ZORRO_ID(M_TECH_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MTEC_68020I                                        ZORRO_ID(M_TECH_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MTEC_A1200_T68030_RTC                      ZORRO_ID(M_TECH_GERMANY, 0x20, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530               ZORRO_ID(M_TECH_GERMANY, 0x21, 0)
+#define  ZORRO_PROD_MTEC_8_MB_RAM                              ZORRO_ID(M_TECH_GERMANY, 0x22, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE      ZORRO_ID(M_TECH_GERMANY, 0x24, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4                    0x0891
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0)
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0)
+
+#define ZORRO_MANUF_APOLLO_1                                   0x0892
+#define  ZORRO_PROD_APOLLO_A1200                               ZORRO_ID(APOLLO_1, 0x01, 0)
+
+#define ZORRO_MANUF_HELFRICH_2                                 0x0893
+#define  ZORRO_PROD_HELFRICH_PICCOLO_RAM                       ZORRO_ID(HELFRICH_2, 0x05, 0)
+#define  ZORRO_PROD_HELFRICH_PICCOLO_REG                       ZORRO_ID(HELFRICH_2, 0x06, 0)
+#define  ZORRO_PROD_HELFRICH_PEGGY_PLUS_MPEG                   ZORRO_ID(HELFRICH_2, 0x07, 0)
+#define  ZORRO_PROD_HELFRICH_VIDEOCRUNCHER                     ZORRO_ID(HELFRICH_2, 0x08, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_RAM                          ZORRO_ID(HELFRICH_2, 0x0A, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_REG                          ZORRO_ID(HELFRICH_2, 0x0B, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA                           0x089B
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx              ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0)
+
+#define ZORRO_MANUF_ELBOX_COMPUTER                             0x089E
+#define  ZORRO_PROD_ELBOX_COMPUTER_1200_4                      ZORRO_ID(ELBOX_COMPUTER, 0x06, 0)
+
+#define ZORRO_MANUF_HARMS_PROFESSIONAL                         0x0A00
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_030_PLUS                        ZORRO_ID(HARMS_PROFESSIONAL, 0x10, 0)
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_3500                    ZORRO_ID(HARMS_PROFESSIONAL, 0xD0, 0)
+
+#define ZORRO_MANUF_MICRONIK                                   0x0A50
+#define  ZORRO_PROD_MICRONIK_RCA_120                           ZORRO_ID(MICRONIK, 0x0A, 0)
+
+#define ZORRO_MANUF_MICRONIK2                                  0x0F0F
+#define  ZORRO_PROD_MICRONIK2_Z3I                              ZORRO_ID(MICRONIK2, 0x01, 0)
+
+#define ZORRO_MANUF_MEGAMICRO                                  0x1000
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500                                ZORRO_ID(MEGAMICRO, 0x03, 0)
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500_RAM                    ZORRO_ID(MEGAMICRO, 0x04, 0)
+
+#define ZORRO_MANUF_IMTRONICS_2                                        0x1028
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_3                 ZORRO_ID(IMTRONICS_2, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_4                 ZORRO_ID(IMTRONICS_2, 0x57, 0)
+
+/* unofficial ID */
+#define ZORRO_MANUF_INDIVIDUAL_COMPUTERS                       0x1212
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA                        ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x00, 0)
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF                        ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x17, 0)
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL             ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x2A, 0)
+
+#define ZORRO_MANUF_KUPKE_3                                    0x1248
+#define  ZORRO_PROD_KUPKE_GOLEM_HD_3000                                ZORRO_ID(KUPKE_3, 0x01, 0)
+
+#define ZORRO_MANUF_ITH                                                0x1388
+#define  ZORRO_PROD_ITH_ISDN_MASTER_II                         ZORRO_ID(ITH, 0x01, 0)
+
+#define ZORRO_MANUF_VMC                                                0x1389
+#define  ZORRO_PROD_VMC_ISDN_BLASTER_Z2                                ZORRO_ID(VMC, 0x01, 0)
+#define  ZORRO_PROD_VMC_HYPERCOM_4                             ZORRO_ID(VMC, 0x02, 0)
+
+#define ZORRO_MANUF_INFORMATION                                        0x157C
+#define  ZORRO_PROD_INFORMATION_ISDN_ENGINE_I                  ZORRO_ID(INFORMATION, 0x64, 0)
+
+#define ZORRO_MANUF_VORTEX                                     0x2017
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80386SX                 ZORRO_ID(VORTEX, 0x07, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_RAM                     ZORRO_ID(VORTEX, 0x08, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80486                   ZORRO_ID(VORTEX, 0x09, 0)
+
+#define ZORRO_MANUF_EXPANSION_SYSTEMS                          0x2062
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX         ZORRO_ID(EXPANSION_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM     ZORRO_ID(EXPANSION_SYSTEMS, 0x02, 0)
+
+#define ZORRO_MANUF_READYSOFT                                  0x2100
+#define  ZORRO_PROD_READYSOFT_AMAX_II_IV                       ZORRO_ID(READYSOFT, 0x01, 0)
+
+#define ZORRO_MANUF_PHASE5                                     0x2140
+#define  ZORRO_PROD_PHASE5_BLIZZARD_RAM                                ZORRO_ID(PHASE5, 0x01, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD                            ZORRO_ID(PHASE5, 0x02, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_IV                    ZORRO_ID(PHASE5, 0x06, 0)
+#define  ZORRO_PROD_PHASE5_FASTLANE_Z3_RAM                     ZORRO_ID(PHASE5, 0x0A, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060        ZORRO_ID(PHASE5, 0x0B, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM            ZORRO_ID(PHASE5, 0x0C, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230                       ZORRO_ID(PHASE5, 0x0D, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260               ZORRO_ID(PHASE5, 0x11, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_2060                       ZORRO_ID(PHASE5, 0x18, 0)
+#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_II                    ZORRO_ID(PHASE5, 0x19, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64                       ZORRO_ID(PHASE5, 0x22, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE          ZORRO_ID(PHASE5, 0x32, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D                    ZORRO_ID(PHASE5, 0x43, 0)
+#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_III                   ZORRO_ID(PHASE5, 0x64, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS                  ZORRO_ID(PHASE5, 0x6e, 0)
+
+#define ZORRO_MANUF_DPS                                                0x2169
+#define  ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER            ZORRO_ID(DPS, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_2                                   0x2200
+#define  ZORRO_PROD_APOLLO_A620_68020_1                                ZORRO_ID(APOLLO_2, 0x00, 0)
+#define  ZORRO_PROD_APOLLO_A620_68020_2                                ZORRO_ID(APOLLO_2, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_3                                   0x2222
+#define  ZORRO_PROD_APOLLO_AT_APOLLO                           ZORRO_ID(APOLLO_3, 0x22, 0)
+#define  ZORRO_PROD_APOLLO_1230_1240_1260_2030_4040_4060       ZORRO_ID(APOLLO_3, 0x23, 0)
+
+#define ZORRO_MANUF_PETSOFF_LP                                 0x38A5
+#define  ZORRO_PROD_PETSOFF_LP_DELFINA                         ZORRO_ID(PETSOFF_LP, 0x00, 0)
+#define  ZORRO_PROD_PETSOFF_LP_DELFINA_LITE                    ZORRO_ID(PETSOFF_LP, 0x01, 0)
+
+#define ZORRO_MANUF_UWE_GERLACH                                        0x3FF7
+#define  ZORRO_PROD_UWE_GERLACH_RAM_ROM                                ZORRO_ID(UWE_GERLACH, 0xd4, 0)
+
+#define ZORRO_MANUF_ACT                                                0x4231
+#define  ZORRO_PROD_ACT_PRELUDE                                        ZORRO_ID(ACT, 0x01, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_GERMANY                       0x4754
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO                       ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB                          ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO_PRO                   ZORRO_ID(MACROSYSTEMS_GERMANY, 0x05, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA                                ZORRO_ID(MACROSYSTEMS_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MULTI_EVOLUTION               ZORRO_ID(MACROSYSTEMS_GERMANY, 0x08, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_TOCCATA                       ZORRO_ID(MACROSYSTEMS_GERMANY, 0x0C, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA_Z3                     ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB_MOTION                   ZORRO_ID(MACROSYSTEMS_GERMANY, 0x12, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_ALTAIS                                ZORRO_ID(MACROSYSTEMS_GERMANY, 0x13, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_FALCON_040                    ZORRO_ID(MACROSYSTEMS_GERMANY, 0xFD, 0)
+
+#define ZORRO_MANUF_COMBITEC                                   0x6766
+
+#define ZORRO_MANUF_SKI_PERIPHERALS                            0x8000
+#define  ZORRO_PROD_SKI_PERIPHERALS_MAST_FIREBALL              ZORRO_ID(SKI_PERIPHERALS, 0x08, 0)
+#define  ZORRO_PROD_SKI_PERIPHERALS_SCSI_DUAL_SERIAL           ZORRO_ID(SKI_PERIPHERALS, 0x80, 0)
+
+#define ZORRO_MANUF_REIS_WARE_2                                        0xA9AD
+#define  ZORRO_PROD_REIS_WARE_SCAN_KING                                ZORRO_ID(REIS_WARE_2, 0x11, 0)
+
+#define ZORRO_MANUF_CAMERON                                    0xAA01
+#define  ZORRO_PROD_CAMERON_PERSONAL_A4                                ZORRO_ID(CAMERON, 0x10, 0)
+
+#define ZORRO_MANUF_REIS_WARE                                  0xAA11
+#define  ZORRO_PROD_REIS_WARE_HANDYSCANNER                     ZORRO_ID(REIS_WARE, 0x11, 0)
+
+#define ZORRO_MANUF_PHOENIX_2                                  0xB5A8
+#define  ZORRO_PROD_PHOENIX_ST506_2                            ZORRO_ID(PHOENIX_2, 0x21, 0)
+#define  ZORRO_PROD_PHOENIX_SCSI_2                             ZORRO_ID(PHOENIX_2, 0x22, 0)
+#define  ZORRO_PROD_PHOENIX_RAM_2                              ZORRO_ID(PHOENIX_2, 0xBE, 0)
+
+#define ZORRO_MANUF_COMBITEC_2                                 0xC008
+#define  ZORRO_PROD_COMBITEC_HD                                        ZORRO_ID(COMBITEC_2, 0x2A, 0)
+#define  ZORRO_PROD_COMBITEC_SRAM                              ZORRO_ID(COMBITEC_2, 0x2B, 0)
+
+
+    /*
+     *  Test and illegal Manufacturer IDs.
+     */
+
+#define ZORRO_MANUF_HACKER                                     0x07DB
+#define  ZORRO_PROD_GENERAL_PROTOTYPE                          ZORRO_ID(HACKER, 0x00, 0)
+#define  ZORRO_PROD_HACKER_SCSI                                        ZORRO_ID(HACKER, 0x01, 0)
+#define  ZORRO_PROD_RESOURCE_MANAGEMENT_FORCE_QUICKNET_QN2000  ZORRO_ID(HACKER, 0x02, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_2                                ZORRO_ID(HACKER, 0xE0, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_3                                ZORRO_ID(HACKER, 0xE1, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_4                                ZORRO_ID(HACKER, 0xE2, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_5                                ZORRO_ID(HACKER, 0xE3, 0)
diff --git a/lib/libdss-include/include/locale.h b/lib/libdss-include/include/locale.h
new file mode 100644 (file)
index 0000000..2f85c6c
--- /dev/null
@@ -0,0 +1,207 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.11 Localization     <locale.h>
+ */
+
+#ifndef        _LOCALE_H
+#define        _LOCALE_H       1
+
+#include <features.h>
+
+#define __need_NULL
+#include <stddef.h>
+#include <bits/locale.h>
+
+__BEGIN_DECLS
+
+/* These are the possibilities for the first argument to setlocale.
+   The code assumes that the lowest LC_* symbol has the value zero.  */
+#define LC_CTYPE          __LC_CTYPE
+#define LC_NUMERIC        __LC_NUMERIC
+#define LC_TIME           __LC_TIME
+#define LC_COLLATE        __LC_COLLATE
+#define LC_MONETARY       __LC_MONETARY
+#define LC_MESSAGES       __LC_MESSAGES
+#define        LC_ALL            __LC_ALL
+#define LC_PAPER         __LC_PAPER
+#define LC_NAME                  __LC_NAME
+#define LC_ADDRESS       __LC_ADDRESS
+#define LC_TELEPHONE     __LC_TELEPHONE
+#define LC_MEASUREMENT   __LC_MEASUREMENT
+#define LC_IDENTIFICATION __LC_IDENTIFICATION
+
+
+__BEGIN_NAMESPACE_STD
+
+/* Structure giving information about numeric and monetary notation.  */
+struct lconv
+{
+  /* Numeric (non-monetary) information.  */
+
+  char *decimal_point;         /* Decimal point character.  */
+  char *thousands_sep;         /* Thousands separator.  */
+  /* Each element is the number of digits in each group;
+     elements with higher indices are farther left.
+     An element with value CHAR_MAX means that no further grouping is done.
+     An element with value 0 means that the previous element is used
+     for all groups farther left.  */
+  char *grouping;
+
+  /* Monetary information.  */
+
+  /* First three chars are a currency symbol from ISO 4217.
+     Fourth char is the separator.  Fifth char is '\0'.  */
+  char *int_curr_symbol;
+  char *currency_symbol;       /* Local currency symbol.  */
+  char *mon_decimal_point;     /* Decimal point character.  */
+  char *mon_thousands_sep;     /* Thousands separator.  */
+  char *mon_grouping;          /* Like `grouping' element (above).  */
+  char *positive_sign;         /* Sign for positive values.  */
+  char *negative_sign;         /* Sign for negative values.  */
+  char int_frac_digits;                /* Int'l fractional digits.  */
+  char frac_digits;            /* Local fractional digits.  */
+  /* 1 if currency_symbol precedes a positive value, 0 if succeeds.  */
+  char p_cs_precedes;
+  /* 1 iff a space separates currency_symbol from a positive value.  */
+  char p_sep_by_space;
+  /* 1 if currency_symbol precedes a negative value, 0 if succeeds.  */
+  char n_cs_precedes;
+  /* 1 iff a space separates currency_symbol from a negative value.  */
+  char n_sep_by_space;
+  /* Positive and negative sign positions:
+     0 Parentheses surround the quantity and currency_symbol.
+     1 The sign string precedes the quantity and currency_symbol.
+     2 The sign string follows the quantity and currency_symbol.
+     3 The sign string immediately precedes the currency_symbol.
+     4 The sign string immediately follows the currency_symbol.  */
+  char p_sign_posn;
+  char n_sign_posn;
+#ifdef __USE_ISOC99
+  /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds.  */
+  char int_p_cs_precedes;
+  /* 1 iff a space separates int_curr_symbol from a positive value.  */
+  char int_p_sep_by_space;
+  /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds.  */
+  char int_n_cs_precedes;
+  /* 1 iff a space separates int_curr_symbol from a negative value.  */
+  char int_n_sep_by_space;
+  /* Positive and negative sign positions:
+     0 Parentheses surround the quantity and int_curr_symbol.
+     1 The sign string precedes the quantity and int_curr_symbol.
+     2 The sign string follows the quantity and int_curr_symbol.
+     3 The sign string immediately precedes the int_curr_symbol.
+     4 The sign string immediately follows the int_curr_symbol.  */
+  char int_p_sign_posn;
+  char int_n_sign_posn;
+#else
+  char __int_p_cs_precedes;
+  char __int_p_sep_by_space;
+  char __int_n_cs_precedes;
+  char __int_n_sep_by_space;
+  char __int_p_sign_posn;
+  char __int_n_sign_posn;
+#endif
+};
+
+
+/* Set and/or return the current locale.  */
+extern char *setlocale (int __category, const char *__locale) __THROW;
+
+/* Return the numeric/monetary information for the current locale.  */
+extern struct lconv *localeconv (void) __THROW;
+
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_XOPEN2K8
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Get locale datatype definition.  */
+# include <xlocale.h>
+
+/* Return a reference to a data structure representing a set of locale
+   datasets.  Unlike for the CATEGORY parameter for `setlocale' the
+   CATEGORY_MASK parameter here uses a single bit for each category,
+   made by OR'ing together LC_*_MASK bits above.  */
+extern __locale_t newlocale (int __category_mask, const char *__locale,
+                            __locale_t __base) __THROW;
+
+/* These are the bits that can be set in the CATEGORY_MASK argument to
+   `newlocale'.  In the GNU implementation, LC_FOO_MASK has the value
+   of (1 << LC_FOO), but this is not a part of the interface that
+   callers can assume will be true.  */
+# define LC_CTYPE_MASK         (1 << __LC_CTYPE)
+# define LC_NUMERIC_MASK       (1 << __LC_NUMERIC)
+# define LC_TIME_MASK          (1 << __LC_TIME)
+# define LC_COLLATE_MASK       (1 << __LC_COLLATE)
+# define LC_MONETARY_MASK      (1 << __LC_MONETARY)
+# define LC_MESSAGES_MASK      (1 << __LC_MESSAGES)
+# define LC_PAPER_MASK         (1 << __LC_PAPER)
+# define LC_NAME_MASK          (1 << __LC_NAME)
+# define LC_ADDRESS_MASK       (1 << __LC_ADDRESS)
+# define LC_TELEPHONE_MASK     (1 << __LC_TELEPHONE)
+# define LC_MEASUREMENT_MASK   (1 << __LC_MEASUREMENT)
+# define LC_IDENTIFICATION_MASK        (1 << __LC_IDENTIFICATION)
+# define LC_ALL_MASK           (LC_CTYPE_MASK \
+                                | LC_NUMERIC_MASK \
+                                | LC_TIME_MASK \
+                                | LC_COLLATE_MASK \
+                                | LC_MONETARY_MASK \
+                                | LC_MESSAGES_MASK \
+                                | LC_PAPER_MASK \
+                                | LC_NAME_MASK \
+                                | LC_ADDRESS_MASK \
+                                | LC_TELEPHONE_MASK \
+                                | LC_MEASUREMENT_MASK \
+                                | LC_IDENTIFICATION_MASK \
+                                )
+
+/* Return a duplicate of the set of locale in DATASET.  All usage
+   counters are increased if necessary.  */
+extern __locale_t duplocale (__locale_t __dataset) __THROW;
+
+/* Free the data associated with a locale dataset previously returned
+   by a call to `setlocale_r'.  */
+extern void freelocale (__locale_t __dataset) __THROW;
+
+/* Switch the current thread's locale to DATASET.
+   If DATASET is null, instead just return the current setting.
+   The special value LC_GLOBAL_LOCALE is the initial setting
+   for all threads and can also be installed any time, meaning
+   the thread uses the global settings controlled by `setlocale'.  */
+extern __locale_t uselocale (__locale_t __dataset) __THROW;
+
+/* This value can be passed to `uselocale' and may be returned by it.
+   Passing this value to any other function has undefined behavior.  */
+# define LC_GLOBAL_LOCALE      ((__locale_t) -1L)
+
+#endif
+
+__END_DECLS
+
+#endif /* locale.h  */
diff --git a/lib/libdss-include/include/malloc.h b/lib/libdss-include/include/malloc.h
new file mode 100644 (file)
index 0000000..f65e18a
--- /dev/null
@@ -0,0 +1,171 @@
+/* Prototypes and definition for malloc implementation.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MALLOC_H
+#define _MALLOC_H 1
+
+#include <features.h>
+#include <stddef.h>
+#include <stdio.h>
+
+#ifdef _LIBC
+# define __MALLOC_HOOK_VOLATILE
+# define __MALLOC_DEPRECATED
+#else
+# define __MALLOC_HOOK_VOLATILE volatile
+# define __MALLOC_DEPRECATED __attribute_deprecated__
+#endif
+
+
+__BEGIN_DECLS
+
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t __nmemb, size_t __size)
+__THROW __attribute_malloc__ __wur;
+
+/* Re-allocate the previously allocated block in __ptr, making the new
+   block SIZE bytes long.  */
+/* __attribute_malloc__ is not used, because if realloc returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *realloc (void *__ptr, size_t __size)
+__THROW __attribute_warn_unused_result__;
+
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *__ptr) __THROW;
+
+/* Free a block allocated by `calloc'. */
+extern void cfree (void *__ptr) __THROW;
+
+/* Allocate SIZE bytes allocated to ALIGNMENT bytes.  */
+extern void *memalign (size_t __alignment, size_t __size)
+__THROW __attribute_malloc__ __wur;
+
+/* Allocate SIZE bytes on a page boundary.  */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Equivalent to valloc(minimum-page-that-holds(n)), that is, round up
+   __size to nearest pagesize. */
+extern void *pvalloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Underlying allocation function; successive calls should return
+   contiguous pieces of memory.  */
+extern void *(*__morecore) (ptrdiff_t __size);
+
+/* Default value of `__morecore'.  */
+extern void *__default_morecore (ptrdiff_t __size)
+__THROW __attribute_malloc__;
+
+/* SVID2/XPG mallinfo structure */
+
+struct mallinfo
+{
+  int arena;    /* non-mmapped space allocated from system */
+  int ordblks;  /* number of free chunks */
+  int smblks;   /* number of fastbin blocks */
+  int hblks;    /* number of mmapped regions */
+  int hblkhd;   /* space in mmapped regions */
+  int usmblks;  /* maximum total allocated space */
+  int fsmblks;  /* space available in freed fastbin blocks */
+  int uordblks; /* total allocated space */
+  int fordblks; /* total free space */
+  int keepcost; /* top-most, releasable (via malloc_trim) space */
+};
+
+/* Returns a copy of the updated current mallinfo. */
+extern struct mallinfo mallinfo (void) __THROW;
+
+/* SVID2/XPG mallopt options */
+#ifndef M_MXFAST
+# define M_MXFAST  1    /* maximum request size for "fastbins" */
+#endif
+#ifndef M_NLBLKS
+# define M_NLBLKS  2    /* UNUSED in this malloc */
+#endif
+#ifndef M_GRAIN
+# define M_GRAIN   3    /* UNUSED in this malloc */
+#endif
+#ifndef M_KEEP
+# define M_KEEP    4    /* UNUSED in this malloc */
+#endif
+
+/* mallopt options that actually do something */
+#define M_TRIM_THRESHOLD    -1
+#define M_TOP_PAD           -2
+#define M_MMAP_THRESHOLD    -3
+#define M_MMAP_MAX          -4
+#define M_CHECK_ACTION      -5
+#define M_PERTURB           -6
+#define M_ARENA_TEST        -7
+#define M_ARENA_MAX         -8
+
+/* General SVID/XPG interface to tunable parameters. */
+extern int mallopt (int __param, int __val) __THROW;
+
+/* Release all but __pad bytes of freed top-most memory back to the
+   system. Return 1 if successful, else 0. */
+extern int malloc_trim (size_t __pad) __THROW;
+
+/* Report the number of usable allocated bytes associated with allocated
+   chunk __ptr. */
+extern size_t malloc_usable_size (void *__ptr) __THROW;
+
+/* Prints brief summary statistics on stderr. */
+extern void malloc_stats (void) __THROW;
+
+/* Output information about state of allocator to stream FP.  */
+extern int malloc_info (int __options, FILE *__fp) __THROW;
+
+/* Record the state of all malloc variables in an opaque data structure. */
+extern void *malloc_get_state (void) __THROW;
+
+/* Restore the state of all malloc variables from data obtained with
+   malloc_get_state(). */
+extern int malloc_set_state (void *__ptr) __THROW;
+
+/* Called once when malloc is initialized; redefining this variable in
+   the application provides the preferred way to set up the hook
+   pointers. */
+extern void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void)
+__MALLOC_DEPRECATED;
+/* Hooks for debugging and user-defined versions. */
+extern void (*__MALLOC_HOOK_VOLATILE __free_hook) (void *__ptr,
+                                                   const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __malloc_hook)(size_t __size,
+                                                     const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __realloc_hook)(void *__ptr,
+                                                      size_t __size,
+                                                      const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __memalign_hook)(size_t __alignment,
+                                                       size_t __size,
+                                                       const void *)
+__MALLOC_DEPRECATED;
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+
+/* Activate a standard set of debugging hooks. */
+extern void __malloc_check_init (void) __THROW __MALLOC_DEPRECATED;
+
+
+__END_DECLS
+#endif /* malloc.h */
diff --git a/lib/libdss-include/include/math.h b/lib/libdss-include/include/math.h
new file mode 100644 (file)
index 0000000..4724b10
--- /dev/null
@@ -0,0 +1,537 @@
+/* Declarations for math functions.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.12 Mathematics      <math.h>
+ */
+
+#ifndef        _MATH_H
+#define        _MATH_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get machine-dependent vector math functions declarations.  */
+#include <bits/math-vector.h>
+
+/* Get machine-dependent HUGE_VAL value (returned on overflow).
+   On all IEEE754 machines, this is +Infinity.  */
+#include <bits/huge_val.h>
+#ifdef __USE_ISOC99
+# include <bits/huge_valf.h>
+# include <bits/huge_vall.h>
+
+/* Get machine-dependent INFINITY value.  */
+# include <bits/inf.h>
+
+/* Get machine-dependent NAN value (returned for some domain errors).  */
+# include <bits/nan.h>
+#endif /* __USE_ISOC99 */
+
+/* Get general and ISO C99 specific information.  */
+#include <bits/mathdef.h>
+
+/* The file <bits/mathcalls.h> contains the prototypes for all the
+   actual math functions.  These macros are used for those prototypes,
+   so we can easily declare each function as both `name' and `__name',
+   and can declare the float versions `namef' and `__namef'.  */
+
+#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function)
+
+#define __MATHCALL_VEC(function, suffix, args)         \
+  __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \
+  __MATHCALL (function, suffix, args)
+
+#define __MATHDECL_VEC(type, function,suffix, args) \
+  __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \
+  __MATHDECL(type, function,suffix, args)
+
+#define __MATHCALL(function,suffix, args)      \
+  __MATHDECL (_Mdouble_,function,suffix, args)
+#define __MATHDECL(type, function,suffix, args) \
+  __MATHDECL_1(type, function,suffix, args); \
+  __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
+#define __MATHCALLX(function,suffix, args, attrib)     \
+  __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
+#define __MATHDECLX(type, function,suffix, args, attrib) \
+  __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
+  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
+#define __MATHDECL_1(type, function,suffix, args) \
+  extern type __MATH_PRECNAME(function,suffix) args __THROW
+
+#define _Mdouble_              double
+#define __MATH_PRECNAME(name,r)        __CONCAT(name,r)
+#define __MATH_DECLARING_DOUBLE  1
+#define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
+#define _Mdouble_END_NAMESPACE   __END_NAMESPACE_STD
+#include <bits/mathcalls.h>
+#undef _Mdouble_
+#undef _Mdouble_BEGIN_NAMESPACE
+#undef _Mdouble_END_NAMESPACE
+#undef __MATH_PRECNAME
+#undef __MATH_DECLARING_DOUBLE
+
+#ifdef __USE_ISOC99
+
+
+/* Include the file of declarations again, this time using `float'
+   instead of `double' and appending f to each function name.  */
+
+# ifndef _Mfloat_
+#  define _Mfloat_             float
+# endif
+# define _Mdouble_             _Mfloat_
+# define __MATH_PRECNAME(name,r) name##f##r
+# define __MATH_DECLARING_DOUBLE  0
+# define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
+# define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
+# include <bits/mathcalls.h>
+# undef        _Mdouble_
+# undef _Mdouble_BEGIN_NAMESPACE
+# undef _Mdouble_END_NAMESPACE
+# undef        __MATH_PRECNAME
+# undef __MATH_DECLARING_DOUBLE
+
+# if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC) \
+     || defined __LDBL_COMPAT \
+     || defined _LIBC_TEST
+#  ifdef __LDBL_COMPAT
+
+#   ifdef __USE_ISOC99
+extern float __nldbl_nexttowardf (float __x, long double __y)
+                                 __THROW __attribute__ ((__const__));
+#    ifdef __REDIRECT_NTH
+extern float __REDIRECT_NTH (nexttowardf, (float __x, long double __y),
+                            __nldbl_nexttowardf)
+     __attribute__ ((__const__));
+extern double __REDIRECT_NTH (nexttoward, (double __x, long double __y),
+                             nextafter) __attribute__ ((__const__));
+extern long double __REDIRECT_NTH (nexttowardl,
+                                  (long double __x, long double __y),
+                                  nextafter) __attribute__ ((__const__));
+#    endif
+#   endif
+
+#   undef __MATHDECL_1
+#   define __MATHDECL_2(type, function,suffix, args, alias) \
+  extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix), \
+                            args, alias)
+#   define __MATHDECL_1(type, function,suffix, args) \
+  __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix))
+#  endif
+
+/* Include the file of declarations again, this time using `long double'
+   instead of `double' and appending l to each function name.  */
+
+#  ifndef _Mlong_double_
+#   define _Mlong_double_      long double
+#  endif
+#  define _Mdouble_            _Mlong_double_
+#  define __MATH_PRECNAME(name,r) name##l##r
+#  define __MATH_DECLARING_DOUBLE  0
+#  define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
+#  define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
+#  define __MATH_DECLARE_LDOUBLE   1
+#  include <bits/mathcalls.h>
+#  undef _Mdouble_
+#  undef _Mdouble_BEGIN_NAMESPACE
+#  undef _Mdouble_END_NAMESPACE
+#  undef __MATH_PRECNAME
+#  undef __MATH_DECLARING_DOUBLE
+
+# endif /* !(__NO_LONG_DOUBLE_MATH && _LIBC) || __LDBL_COMPAT */
+
+#endif /* Use ISO C99.  */
+#undef __MATHDECL_1
+#undef __MATHDECL
+#undef __MATHCALL
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* This variable is used by `gamma' and `lgamma'.  */
+extern int signgam;
+#endif
+
+
+/* ISO C99 defines some generic macros which work on any data type.  */
+#ifdef __USE_ISOC99
+
+/* Get the architecture specific values describing the floating-point
+   evaluation.  The following symbols will get defined:
+
+    float_t    floating-point type at least as wide as `float' used
+               to evaluate `float' expressions
+    double_t   floating-point type at least as wide as `double' used
+               to evaluate `double' expressions
+
+    FLT_EVAL_METHOD
+               Defined to
+                 0     if `float_t' is `float' and `double_t' is `double'
+                 1     if `float_t' and `double_t' are `double'
+                 2     if `float_t' and `double_t' are `long double'
+                 else  `float_t' and `double_t' are unspecified
+
+    INFINITY   representation of the infinity value of type `float'
+
+    FP_FAST_FMA
+    FP_FAST_FMAF
+    FP_FAST_FMAL
+               If defined it indicates that the `fma' function
+               generally executes about as fast as a multiply and an add.
+               This macro is defined only iff the `fma' function is
+               implemented directly with a hardware multiply-add instructions.
+
+    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
+    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
+
+    DECIMAL_DIG        Number of decimal digits supported by conversion between
+               decimal and all internal floating-point formats.
+
+*/
+
+/* All floating-point numbers can be put in one of these categories.  */
+enum
+  {
+    FP_NAN =
+# define FP_NAN 0
+      FP_NAN,
+    FP_INFINITE =
+# define FP_INFINITE 1
+      FP_INFINITE,
+    FP_ZERO =
+# define FP_ZERO 2
+      FP_ZERO,
+    FP_SUBNORMAL =
+# define FP_SUBNORMAL 3
+      FP_SUBNORMAL,
+    FP_NORMAL =
+# define FP_NORMAL 4
+      FP_NORMAL
+  };
+
+/* GCC bug 66462 means we cannot use the math builtins with -fsignaling-nan,
+   so disable builtins if this is enabled.  When fixed in a newer GCC,
+   the __SUPPORT_SNAN__ check may be skipped for those versions.  */
+
+/* Return number of classification appropriate for X.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__                        \
+     && !defined __OPTIMIZE_SIZE__
+#  define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE,           \
+     FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define fpclassify(x) \
+     (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
+# else
+#  define fpclassify(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __fpclassifyf (x)                                                    \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __fpclassify (x) : __fpclassifyl (x))
+# endif
+
+/* Return nonzero value if sign of X is negative.  */
+# if __GNUC_PREREQ (4,0)
+#  define signbit(x) \
+     (sizeof (x) == sizeof (float)                                            \
+      ? __builtin_signbitf (x)                                                        \
+      : sizeof (x) == sizeof (double)                                         \
+      ? __builtin_signbit (x) : __builtin_signbitl (x))
+# else
+#  ifdef __NO_LONG_DOUBLE_MATH
+#   define signbit(x) \
+     (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
+#  else
+#   define signbit(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __signbitf (x)                                                       \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __signbit (x) : __signbitl (x))
+#  endif
+# endif
+
+/* Return nonzero value if X is not +-Inf or NaN.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isfinite(x) __builtin_isfinite (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isfinite(x) \
+     (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
+# else
+#  define isfinite(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __finitef (x)                                                        \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __finite (x) : __finitel (x))
+# endif
+
+/* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isnormal(x) __builtin_isnormal (x)
+# else
+#  define isnormal(x) (fpclassify (x) == FP_NORMAL)
+# endif
+
+/* Return nonzero value if X is a NaN.  We could use `fpclassify' but
+   we already have this functions `__isnan' and it is faster.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isnan(x) __builtin_isnan (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isnan(x) \
+     (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
+# else
+#  define isnan(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __isnanf (x)                                                         \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __isnan (x) : __isnanl (x))
+# endif
+
+/* Return nonzero value if X is positive or negative infinity.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isinf(x) __builtin_isinf_sign (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isinf(x) \
+     (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
+# else
+#  define isinf(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __isinff (x)                                                         \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __isinf (x) : __isinfl (x))
+# endif
+
+/* Bitmasks for the math_errhandling macro.  */
+# define MATH_ERRNO    1       /* errno set by math functions.  */
+# define MATH_ERREXCEPT        2       /* Exceptions raised by math functions.  */
+
+/* By default all functions support both errno and exception handling.
+   In gcc's fast math mode and if inline functions are defined this
+   might not be true.  */
+# ifndef __FAST_MATH__
+#  define math_errhandling     (MATH_ERRNO | MATH_ERREXCEPT)
+# endif
+
+#endif /* Use ISO C99.  */
+
+#ifdef __USE_GNU
+/* Return nonzero value if X is a signaling NaN.  */
+# ifdef __NO_LONG_DOUBLE_MATH
+#  define issignaling(x) \
+     (sizeof (x) == sizeof (float) ? __issignalingf (x) : __issignaling (x))
+# else
+#  define issignaling(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __issignalingf (x)                                                   \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __issignaling (x) : __issignalingl (x))
+# endif
+#endif /* Use GNU.  */
+
+#ifdef __USE_MISC
+/* Support for various different standard error handling behaviors.  */
+typedef enum
+{
+  _IEEE_ = -1, /* According to IEEE 754/IEEE 854.  */
+  _SVID_,      /* According to System V, release 4.  */
+  _XOPEN_,     /* Nowadays also Unix98.  */
+  _POSIX_,
+  _ISOC_       /* Actually this is ISO C99.  */
+} _LIB_VERSION_TYPE;
+
+/* This variable can be changed at run-time to any of the values above to
+   affect floating point error handling behavior (it may also be necessary
+   to change the hardware FPU exception settings).  */
+extern _LIB_VERSION_TYPE _LIB_VERSION;
+#endif
+
+
+#ifdef __USE_MISC
+/* In SVID error handling, `matherr' is called with this description
+   of the exceptional condition.
+
+   We have a problem when using C++ since `exception' is a reserved
+   name in C++.  */
+# ifdef __cplusplus
+struct __exception
+# else
+struct exception
+# endif
+  {
+    int type;
+    char *name;
+    double arg1;
+    double arg2;
+    double retval;
+  };
+
+# ifdef __cplusplus
+extern int matherr (struct __exception *__exc) throw ();
+# else
+extern int matherr (struct exception *__exc);
+# endif
+
+# define X_TLOSS       1.41484755040568800000e+16
+
+/* Types of exceptions in the `type' field.  */
+# define DOMAIN                1
+# define SING          2
+# define OVERFLOW      3
+# define UNDERFLOW     4
+# define TLOSS         5
+# define PLOSS         6
+
+/* SVID mode specifies returning this large value instead of infinity.  */
+# define HUGE          3.40282347e+38F
+
+#else  /* !Misc.  */
+
+# ifdef __USE_XOPEN
+/* X/Open wants another strange constant.  */
+#  define MAXFLOAT     3.40282347e+38F
+# endif
+
+#endif /* Misc.  */
+
+
+/* Some useful constants.  */
+#if defined __USE_MISC || defined __USE_XOPEN
+# define M_E           2.7182818284590452354   /* e */
+# define M_LOG2E       1.4426950408889634074   /* log_2 e */
+# define M_LOG10E      0.43429448190325182765  /* log_10 e */
+# define M_LN2         0.69314718055994530942  /* log_e 2 */
+# define M_LN10                2.30258509299404568402  /* log_e 10 */
+# define M_PI          3.14159265358979323846  /* pi */
+# define M_PI_2                1.57079632679489661923  /* pi/2 */
+# define M_PI_4                0.78539816339744830962  /* pi/4 */
+# define M_1_PI                0.31830988618379067154  /* 1/pi */
+# define M_2_PI                0.63661977236758134308  /* 2/pi */
+# define M_2_SQRTPI    1.12837916709551257390  /* 2/sqrt(pi) */
+# define M_SQRT2       1.41421356237309504880  /* sqrt(2) */
+# define M_SQRT1_2     0.70710678118654752440  /* 1/sqrt(2) */
+#endif
+
+/* The above constants are not adequate for computation using `long double's.
+   Therefore we provide as an extension constants with similar names as a
+   GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
+#ifdef __USE_GNU
+# define M_El          2.718281828459045235360287471352662498L /* e */
+# define M_LOG2El      1.442695040888963407359924681001892137L /* log_2 e */
+# define M_LOG10El     0.434294481903251827651128918916605082L /* log_10 e */
+# define M_LN2l                0.693147180559945309417232121458176568L /* log_e 2 */
+# define M_LN10l       2.302585092994045684017991454684364208L /* log_e 10 */
+# define M_PIl         3.141592653589793238462643383279502884L /* pi */
+# define M_PI_2l       1.570796326794896619231321691639751442L /* pi/2 */
+# define M_PI_4l       0.785398163397448309615660845819875721L /* pi/4 */
+# define M_1_PIl       0.318309886183790671537767526745028724L /* 1/pi */
+# define M_2_PIl       0.636619772367581343075535053490057448L /* 2/pi */
+# define M_2_SQRTPIl   1.128379167095512573896158903121545172L /* 2/sqrt(pi) */
+# define M_SQRT2l      1.414213562373095048801688724209698079L /* sqrt(2) */
+# define M_SQRT1_2l    0.707106781186547524400844362104849039L /* 1/sqrt(2) */
+#endif
+
+
+/* When compiling in strict ISO C compatible mode we must not use the
+   inline functions since they, among other things, do not set the
+   `errno' variable correctly.  */
+#if defined __STRICT_ANSI__ && !defined __NO_MATH_INLINES
+# define __NO_MATH_INLINES     1
+#endif
+
+#if defined __USE_ISOC99 && __GNUC_PREREQ(2,97)
+/* ISO C99 defines some macros to compare number while taking care for
+   unordered numbers.  Many FPUs provide special instructions to support
+   these operations.  Generic support in GCC for these as builtins went
+   in before 3.0.0, but not all cpus added their patterns.  We define
+   versions that use the builtins here, and <bits/mathinline.h> will
+   undef/redefine as appropriate for the specific GCC version in use.  */
+# define isgreater(x, y)       __builtin_isgreater(x, y)
+# define isgreaterequal(x, y)  __builtin_isgreaterequal(x, y)
+# define isless(x, y)          __builtin_isless(x, y)
+# define islessequal(x, y)     __builtin_islessequal(x, y)
+# define islessgreater(x, y)   __builtin_islessgreater(x, y)
+# define isunordered(u, v)     __builtin_isunordered(u, v)
+#endif
+
+/* Get machine-dependent inline versions (if there are any).  */
+#ifdef __USE_EXTERN_INLINES
+# include <bits/mathinline.h>
+#endif
+
+/* Define special entry points to use when the compiler got told to
+   only expect finite results.  */
+#if defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0
+# include <bits/math-finite.h>
+#endif
+
+#ifdef __USE_ISOC99
+/* If we've still got undefined comparison macros, provide defaults.  */
+
+/* Return nonzero value if X is greater than Y.  */
+# ifndef isgreater
+#  define isgreater(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x > __y; }))
+# endif
+
+/* Return nonzero value if X is greater than or equal to Y.  */
+# ifndef isgreaterequal
+#  define isgreaterequal(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x >= __y; }))
+# endif
+
+/* Return nonzero value if X is less than Y.  */
+# ifndef isless
+#  define isless(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x < __y; }))
+# endif
+
+/* Return nonzero value if X is less than or equal to Y.  */
+# ifndef islessequal
+#  define islessequal(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x <= __y; }))
+# endif
+
+/* Return nonzero value if either X is less than Y or Y is less than X.  */
+# ifndef islessgreater
+#  define islessgreater(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && (__x < __y || __y < __x); }))
+# endif
+
+/* Return nonzero value if arguments are unordered.  */
+# ifndef isunordered
+#  define isunordered(u, v) \
+  (__extension__                                                             \
+   ({ __typeof__(u) __u = (u); __typeof__(v) __v = (v);                              \
+      fpclassify (__u) == FP_NAN || fpclassify (__v) == FP_NAN; }))
+# endif
+
+#endif
+
+__END_DECLS
+
+
+#endif /* math.h  */
diff --git a/lib/libdss-include/include/mcheck.h b/lib/libdss-include/include/mcheck.h
new file mode 100644 (file)
index 0000000..416fcd6
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MCHECK_H
+#define _MCHECK_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return values for `mprobe': these are the kinds of inconsistencies that
+   `mcheck' enables detection of.  */
+enum mcheck_status
+{
+  MCHECK_DISABLED = -1,         /* Consistency checking is not turned on.  */
+  MCHECK_OK,                    /* Block is fine.  */
+  MCHECK_FREE,                  /* Block freed twice.  */
+  MCHECK_HEAD,                  /* Memory before the block was clobbered.  */
+  MCHECK_TAIL                   /* Memory after the block was clobbered.  */
+};
+
+
+/* Activate a standard collection of debugging hooks.  This must be called
+   before `malloc' is ever called.  ABORTFUNC is called with an error code
+   (see enum above) when an inconsistency is detected.  If ABORTFUNC is
+   null, the standard function prints on stderr and then calls `abort'.  */
+extern int mcheck (void (*__abortfunc)(enum mcheck_status)) __THROW;
+
+/* Similar to `mcheck' but performs checks for all block whenever one of
+   the memory handling functions is called.  This can be very slow.  */
+extern int mcheck_pedantic (void (*__abortfunc)(enum mcheck_status)) __THROW;
+
+/* Force check of all blocks now.  */
+extern void mcheck_check_all (void);
+
+/* Check for aberrations in a particular malloc'd block.  You must have
+   called `mcheck' already.  These are the same checks that `mcheck' does
+   when you free or reallocate a block.  */
+extern enum mcheck_status mprobe (void *__ptr) __THROW;
+
+/* Activate a standard collection of tracing hooks.  */
+extern void mtrace (void) __THROW;
+extern void muntrace (void) __THROW;
+
+__END_DECLS
+#endif /* mcheck.h */
diff --git a/lib/libdss-include/include/memory.h b/lib/libdss-include/include/memory.h
new file mode 100644 (file)
index 0000000..10ecaa2
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * SVID
+ */
+
+#ifndef        _MEMORY_H
+#define        _MEMORY_H       1
+
+#include <features.h>
+
+
+#ifndef        _STRING_H
+# include <string.h>
+#endif /* string.h  */
+
+
+#endif /* memory.h  */
diff --git a/lib/libdss-include/include/misc/cxl.h b/lib/libdss-include/include/misc/cxl.h
new file mode 100644 (file)
index 0000000..94126f7
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2014 IBM Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _MISC_CXL_H
+#define _MISC_CXL_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+
+struct cxl_ioctl_start_work {
+       __u64 flags;
+       __u64 work_element_descriptor;
+       __u64 amr;
+       __s16 num_interrupts;
+       __s16 reserved1;
+       __s32 reserved2;
+       __u64 reserved3;
+       __u64 reserved4;
+       __u64 reserved5;
+       __u64 reserved6;
+};
+
+#define CXL_START_WORK_AMR             0x0000000000000001ULL
+#define CXL_START_WORK_NUM_IRQS                0x0000000000000002ULL
+#define CXL_START_WORK_ERR_FF          0x0000000000000004ULL
+#define CXL_START_WORK_ALL             (CXL_START_WORK_AMR |\
+                                        CXL_START_WORK_NUM_IRQS |\
+                                        CXL_START_WORK_ERR_FF)
+
+
+/* Possible modes that an afu can be in */
+#define CXL_MODE_DEDICATED   0x1
+#define CXL_MODE_DIRECTED    0x2
+
+/* possible flags for the cxl_afu_id flags field */
+#define CXL_AFUID_FLAG_SLAVE    0x1  /* In directed-mode afu is in slave mode */
+
+struct cxl_afu_id {
+       __u64 flags;     /* One of CXL_AFUID_FLAG_X */
+       __u32 card_id;
+       __u32 afu_offset;
+       __u32 afu_mode;  /* one of the CXL_MODE_X */
+       __u32 reserved1;
+       __u64 reserved2;
+       __u64 reserved3;
+       __u64 reserved4;
+       __u64 reserved5;
+       __u64 reserved6;
+};
+
+/* ioctl numbers */
+#define CXL_MAGIC 0xCA
+#define CXL_IOCTL_START_WORK           _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)
+#define CXL_IOCTL_GET_PROCESS_ELEMENT  _IOR(CXL_MAGIC, 0x01, __u32)
+#define CXL_IOCTL_GET_AFU_ID            _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id)
+
+#define CXL_READ_MIN_SIZE 0x1000 /* 4K */
+
+/* Events from read() */
+enum cxl_event_type {
+       CXL_EVENT_RESERVED      = 0,
+       CXL_EVENT_AFU_INTERRUPT = 1,
+       CXL_EVENT_DATA_STORAGE  = 2,
+       CXL_EVENT_AFU_ERROR     = 3,
+};
+
+struct cxl_event_header {
+       __u16 type;
+       __u16 size;
+       __u16 process_element;
+       __u16 reserved1;
+};
+
+struct cxl_event_afu_interrupt {
+       __u16 flags;
+       __u16 irq; /* Raised AFU interrupt number */
+       __u32 reserved1;
+};
+
+struct cxl_event_data_storage {
+       __u16 flags;
+       __u16 reserved1;
+       __u32 reserved2;
+       __u64 addr;
+       __u64 dsisr;
+       __u64 reserved3;
+};
+
+struct cxl_event_afu_error {
+       __u16 flags;
+       __u16 reserved1;
+       __u32 reserved2;
+       __u64 error;
+};
+
+struct cxl_event {
+       struct cxl_event_header header;
+       union {
+               struct cxl_event_afu_interrupt irq;
+               struct cxl_event_data_storage fault;
+               struct cxl_event_afu_error afu_error;
+       };
+};
+
+#endif /* _MISC_CXL_H */
diff --git a/lib/libdss-include/include/mntent.h b/lib/libdss-include/include/mntent.h
new file mode 100644 (file)
index 0000000..43c083b
--- /dev/null
@@ -0,0 +1,97 @@
+/* Utilities for reading/writing fstab, mtab, etc.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _MNTENT_H
+#define        _MNTENT_H       1
+
+#include <features.h>
+#define __need_FILE
+#include <stdio.h>
+#include <paths.h>
+
+
+/* File listing canonical interesting mount points.  */
+#define        MNTTAB          _PATH_MNTTAB    /* Deprecated alias.  */
+
+/* File listing currently active mount points.  */
+#define        MOUNTED         _PATH_MOUNTED   /* Deprecated alias.  */
+
+
+/* General filesystem types.  */
+#define MNTTYPE_IGNORE "ignore"        /* Ignore this entry.  */
+#define MNTTYPE_NFS    "nfs"           /* Network file system.  */
+#define MNTTYPE_SWAP   "swap"          /* Swap device.  */
+
+
+/* Generic mount options.  */
+#define MNTOPT_DEFAULTS        "defaults"      /* Use all default options.  */
+#define MNTOPT_RO      "ro"            /* Read only.  */
+#define MNTOPT_RW      "rw"            /* Read/write.  */
+#define MNTOPT_SUID    "suid"          /* Set uid allowed.  */
+#define MNTOPT_NOSUID  "nosuid"        /* No set uid allowed.  */
+#define MNTOPT_NOAUTO  "noauto"        /* Do not auto mount.  */
+
+
+__BEGIN_DECLS
+
+/* Structure describing a mount table entry.  */
+struct mntent
+  {
+    char *mnt_fsname;          /* Device or server for filesystem.  */
+    char *mnt_dir;             /* Directory mounted on.  */
+    char *mnt_type;            /* Type of filesystem: ufs, nfs, etc.  */
+    char *mnt_opts;            /* Comma-separated options for fs.  */
+    int mnt_freq;              /* Dump frequency (in days).  */
+    int mnt_passno;            /* Pass number for `fsck'.  */
+  };
+
+
+/* Prepare to begin reading and/or writing mount table entries from the
+   beginning of FILE.  MODE is as for `fopen'.  */
+extern FILE *setmntent (const char *__file, const char *__mode) __THROW;
+
+/* Read one mount table entry from STREAM.  Returns a pointer to storage
+   reused on the next call, or null for EOF or error (use feof/ferror to
+   check).  */
+extern struct mntent *getmntent (FILE *__stream) __THROW;
+
+#ifdef __USE_MISC
+/* Reentrant version of the above function.  */
+extern struct mntent *getmntent_r (FILE *__restrict __stream,
+                                  struct mntent *__restrict __result,
+                                  char *__restrict __buffer,
+                                  int __bufsize) __THROW;
+#endif
+
+/* Write the mount table entry described by MNT to STREAM.
+   Return zero on success, nonzero on failure.  */
+extern int addmntent (FILE *__restrict __stream,
+                     const struct mntent *__restrict __mnt) __THROW;
+
+/* Close a stream opened with `setmntent'.  */
+extern int endmntent (FILE *__stream) __THROW;
+
+/* Search MNT->mnt_opts for an option matching OPT.
+   Returns the address of the substring, or null if none found.  */
+extern char *hasmntopt (const struct mntent *__mnt,
+                       const char *__opt) __THROW;
+
+
+__END_DECLS
+
+#endif /* mntent.h */
diff --git a/lib/libdss-include/include/monetary.h b/lib/libdss-include/include/monetary.h
new file mode 100644 (file)
index 0000000..1fe9d6b
--- /dev/null
@@ -0,0 +1,58 @@
+/* Header file for monetary value formatting functions.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _MONETARY_H
+#define        _MONETARY_H     1
+
+#include <features.h>
+
+/* Get needed types.  */
+#define __need_size_t
+#include <stddef.h>
+#include <bits/types.h>
+
+#ifndef        __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+/* Formatting a monetary value according to the current locale.  */
+extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
+                       const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (3, 4);
+
+#ifdef __USE_XOPEN2K8
+# include <xlocale.h>
+
+/* Formatting a monetary value according to the given locale.  */
+extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
+                         __locale_t __loc,
+                         const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (4, 5);
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/monetary-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* monetary.h */
diff --git a/lib/libdss-include/include/mqueue.h b/lib/libdss-include/include/mqueue.h
new file mode 100644 (file)
index 0000000..9700cdc
--- /dev/null
@@ -0,0 +1,100 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MQUEUE_H
+#define _MQUEUE_H      1
+
+#include <features.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#define __need_sigevent_t
+#include <bits/siginfo.h>
+#define __need_timespec
+#include <time.h>
+/* Get the definition of mqd_t and struct mq_attr.  */
+#include <bits/mqueue.h>
+
+__BEGIN_DECLS
+
+/* Establish connection between a process and a message queue NAME and
+   return message queue descriptor or (mqd_t) -1 on error.  OFLAG determines
+   the type of access used.  If O_CREAT is on OFLAG, the third argument is
+   taken as a `mode_t', the mode of the created message queue, and the fourth
+   argument is taken as `struct mq_attr *', pointer to message queue
+   attributes.  If the fourth argument is NULL, default attributes are
+   used.  */
+extern mqd_t mq_open (const char *__name, int __oflag, ...)
+  __THROW __nonnull ((1));
+
+/* Removes the association between message queue descriptor MQDES and its
+   message queue.  */
+extern int mq_close (mqd_t __mqdes) __THROW;
+
+/* Query status and attributes of message queue MQDES.  */
+extern int mq_getattr (mqd_t __mqdes, struct mq_attr *__mqstat)
+  __THROW __nonnull ((2));
+
+/* Set attributes associated with message queue MQDES and if OMQSTAT is
+   not NULL also query its old attributes.  */
+extern int mq_setattr (mqd_t __mqdes,
+                      const struct mq_attr *__restrict __mqstat,
+                      struct mq_attr *__restrict __omqstat)
+  __THROW __nonnull ((2));
+
+/* Remove message queue named NAME.  */
+extern int mq_unlink (const char *__name) __THROW __nonnull ((1));
+
+/* Register notification issued upon message arrival to an empty
+   message queue MQDES.  */
+extern int mq_notify (mqd_t __mqdes, const struct sigevent *__notification)
+     __THROW;
+
+/* Receive the oldest from highest priority messages in message queue
+   MQDES.  */
+extern ssize_t mq_receive (mqd_t __mqdes, char *__msg_ptr, size_t __msg_len,
+                          unsigned int *__msg_prio) __nonnull ((2));
+
+/* Add message pointed by MSG_PTR to message queue MQDES.  */
+extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
+                   unsigned int __msg_prio) __nonnull ((2));
+
+#ifdef __USE_XOPEN2K
+/* Receive the oldest from highest priority messages in message queue
+   MQDES, stop waiting if ABS_TIMEOUT expires.  */
+extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
+                               size_t __msg_len,
+                               unsigned int *__restrict __msg_prio,
+                               const struct timespec *__restrict __abs_timeout)
+  __nonnull ((2, 5));
+
+/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
+   on full message queue if ABS_TIMEOUT expires.  */
+extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr,
+                        size_t __msg_len, unsigned int __msg_prio,
+                        const struct timespec *__abs_timeout)
+  __nonnull ((2, 5));
+#endif
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \
+    && defined __va_arg_pack_len
+# include <bits/mqueue2.h>
+#endif
+
+__END_DECLS
+
+#endif /* mqueue.h */
diff --git a/lib/libdss-include/include/mtd/inftl-user.h b/lib/libdss-include/include/mtd/inftl-user.h
new file mode 100644 (file)
index 0000000..8376bd1
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Parts of INFTL headers shared with userspace
+ *
+ */
+
+#ifndef __MTD_INFTL_USER_H__
+#define __MTD_INFTL_USER_H__
+
+#include <linux/types.h>
+
+#define        OSAK_VERSION    0x5120
+#define        PERCENTUSED     98
+
+#define        SECTORSIZE      512
+
+/* Block Control Information */
+
+struct inftl_bci {
+       __u8 ECCsig[6];
+       __u8 Status;
+       __u8 Status1;
+} __attribute__((packed));
+
+struct inftl_unithead1 {
+       __u16 virtualUnitNo;
+       __u16 prevUnitNo;
+       __u8 ANAC;
+       __u8 NACs;
+       __u8 parityPerField;
+       __u8 discarded;
+} __attribute__((packed));
+
+struct inftl_unithead2 {
+       __u8 parityPerField;
+       __u8 ANAC;
+       __u16 prevUnitNo;
+       __u16 virtualUnitNo;
+       __u8 NACs;
+       __u8 discarded;
+} __attribute__((packed));
+
+struct inftl_unittail {
+       __u8 Reserved[4];
+       __u16 EraseMark;
+       __u16 EraseMark1;
+} __attribute__((packed));
+
+union inftl_uci {
+       struct inftl_unithead1 a;
+       struct inftl_unithead2 b;
+       struct inftl_unittail c;
+};
+
+struct inftl_oob {
+       struct inftl_bci b;
+       union inftl_uci u;
+};
+
+
+/* INFTL Media Header */
+
+struct INFTLPartition {
+       __u32 virtualUnits;
+       __u32 firstUnit;
+       __u32 lastUnit;
+       __u32 flags;
+       __u32 spareUnits;
+       __u32 Reserved0;
+       __u32 Reserved1;
+} __attribute__((packed));
+
+struct INFTLMediaHeader {
+       char bootRecordID[8];
+       __u32 NoOfBootImageBlocks;
+       __u32 NoOfBinaryPartitions;
+       __u32 NoOfBDTLPartitions;
+       __u32 BlockMultiplierBits;
+       __u32 FormatFlags;
+       __u32 OsakVersion;
+       __u32 PercentUsed;
+       struct INFTLPartition Partitions[4];
+} __attribute__((packed));
+
+/* Partition flag types */
+#define        INFTL_BINARY    0x20000000
+#define        INFTL_BDTL      0x40000000
+#define        INFTL_LAST      0x80000000
+
+#endif /* __MTD_INFTL_USER_H__ */
+
+
diff --git a/lib/libdss-include/include/mtd/mtd-abi.h b/lib/libdss-include/include/mtd/mtd-abi.h
new file mode 100644 (file)
index 0000000..20444f3
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org> et al.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_ABI_H__
+#define __MTD_ABI_H__
+
+#include <linux/types.h>
+
+struct erase_info_user {
+       __u32 start;
+       __u32 length;
+};
+
+struct erase_info_user64 {
+       __u64 start;
+       __u64 length;
+};
+
+struct mtd_oob_buf {
+       __u32 start;
+       __u32 length;
+       unsigned char *ptr;
+};
+
+struct mtd_oob_buf64 {
+       __u64 start;
+       __u32 pad;
+       __u32 length;
+       __u64 usr_ptr;
+};
+
+/**
+ * MTD operation modes
+ *
+ * @MTD_OPS_PLACE_OOB: OOB data are placed at the given offset (default)
+ * @MTD_OPS_AUTO_OOB:  OOB data are automatically placed at the free areas
+ *                     which are defined by the internal ecclayout
+ * @MTD_OPS_RAW:       data are transferred as-is, with no error correction;
+ *                     this mode implies %MTD_OPS_PLACE_OOB
+ *
+ * These modes can be passed to ioctl(MEMWRITE) and are also used internally.
+ * See notes on "MTD file modes" for discussion on %MTD_OPS_RAW vs.
+ * %MTD_FILE_MODE_RAW.
+ */
+enum {
+       MTD_OPS_PLACE_OOB = 0,
+       MTD_OPS_AUTO_OOB = 1,
+       MTD_OPS_RAW = 2,
+};
+
+/**
+ * struct mtd_write_req - data structure for requesting a write operation
+ *
+ * @start:     start address
+ * @len:       length of data buffer
+ * @ooblen:    length of OOB buffer
+ * @usr_data:  user-provided data buffer
+ * @usr_oob:   user-provided OOB buffer
+ * @mode:      MTD mode (see "MTD operation modes")
+ * @padding:   reserved, must be set to 0
+ *
+ * This structure supports ioctl(MEMWRITE) operations, allowing data and/or OOB
+ * writes in various modes. To write to OOB-only, set @usr_data == NULL, and to
+ * write data-only, set @usr_oob == NULL. However, setting both @usr_data and
+ * @usr_oob to NULL is not allowed.
+ */
+struct mtd_write_req {
+       __u64 start;
+       __u64 len;
+       __u64 ooblen;
+       __u64 usr_data;
+       __u64 usr_oob;
+       __u8 mode;
+       __u8 padding[7];
+};
+
+#define MTD_ABSENT             0
+#define MTD_RAM                        1
+#define MTD_ROM                        2
+#define MTD_NORFLASH           3
+#define MTD_NANDFLASH          4       /* SLC NAND */
+#define MTD_DATAFLASH          6
+#define MTD_UBIVOLUME          7
+#define MTD_MLCNANDFLASH       8       /* MLC NAND (including TLC) */
+
+#define MTD_WRITEABLE          0x400   /* Device is writeable */
+#define MTD_BIT_WRITEABLE      0x800   /* Single bits can be flipped */
+#define MTD_NO_ERASE           0x1000  /* No erase necessary */
+#define MTD_POWERUP_LOCK       0x2000  /* Always locked after reset */
+
+/* Some common devices / combinations of capabilities */
+#define MTD_CAP_ROM            0
+#define MTD_CAP_RAM            (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
+#define MTD_CAP_NORFLASH       (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
+#define MTD_CAP_NANDFLASH      (MTD_WRITEABLE)
+#define MTD_CAP_NVRAM          (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
+
+/* Obsolete ECC byte placement modes (used with obsolete MEMGETOOBSEL) */
+#define MTD_NANDECC_OFF                0       // Switch off ECC (Not recommended)
+#define MTD_NANDECC_PLACE      1       // Use the given placement in the structure (YAFFS1 legacy mode)
+#define MTD_NANDECC_AUTOPLACE  2       // Use the default placement scheme
+#define MTD_NANDECC_PLACEONLY  3       // Use the given placement in the structure (Do not store ecc result on read)
+#define MTD_NANDECC_AUTOPL_USR         4       // Use the given autoplacement scheme rather than using the default
+
+/* OTP mode selection */
+#define MTD_OTP_OFF            0
+#define MTD_OTP_FACTORY                1
+#define MTD_OTP_USER           2
+
+struct mtd_info_user {
+       __u8 type;
+       __u32 flags;
+       __u32 size;     /* Total size of the MTD */
+       __u32 erasesize;
+       __u32 writesize;
+       __u32 oobsize;  /* Amount of OOB data per block (e.g. 16) */
+       __u64 padding;  /* Old obsolete field; do not use */
+};
+
+struct region_info_user {
+       __u32 offset;           /* At which this region starts,
+                                * from the beginning of the MTD */
+       __u32 erasesize;        /* For this region */
+       __u32 numblocks;        /* Number of blocks in this region */
+       __u32 regionindex;
+};
+
+struct otp_info {
+       __u32 start;
+       __u32 length;
+       __u32 locked;
+};
+
+/*
+ * Note, the following ioctl existed in the past and was removed:
+ * #define MEMSETOOBSEL           _IOW('M', 9, struct nand_oobinfo)
+ * Try to avoid adding a new ioctl with the same ioctl number.
+ */
+
+/* Get basic MTD characteristics info (better to use sysfs) */
+#define MEMGETINFO             _IOR('M', 1, struct mtd_info_user)
+/* Erase segment of MTD */
+#define MEMERASE               _IOW('M', 2, struct erase_info_user)
+/* Write out-of-band data from MTD */
+#define MEMWRITEOOB            _IOWR('M', 3, struct mtd_oob_buf)
+/* Read out-of-band data from MTD */
+#define MEMREADOOB             _IOWR('M', 4, struct mtd_oob_buf)
+/* Lock a chip (for MTD that supports it) */
+#define MEMLOCK                        _IOW('M', 5, struct erase_info_user)
+/* Unlock a chip (for MTD that supports it) */
+#define MEMUNLOCK              _IOW('M', 6, struct erase_info_user)
+/* Get the number of different erase regions */
+#define MEMGETREGIONCOUNT      _IOR('M', 7, int)
+/* Get information about the erase region for a specific index */
+#define MEMGETREGIONINFO       _IOWR('M', 8, struct region_info_user)
+/* Get info about OOB modes (e.g., RAW, PLACE, AUTO) - legacy interface */
+#define MEMGETOOBSEL           _IOR('M', 10, struct nand_oobinfo)
+/* Check if an eraseblock is bad */
+#define MEMGETBADBLOCK         _IOW('M', 11, __kernel_loff_t)
+/* Mark an eraseblock as bad */
+#define MEMSETBADBLOCK         _IOW('M', 12, __kernel_loff_t)
+/* Set OTP (One-Time Programmable) mode (factory vs. user) */
+#define OTPSELECT              _IOR('M', 13, int)
+/* Get number of OTP (One-Time Programmable) regions */
+#define OTPGETREGIONCOUNT      _IOW('M', 14, int)
+/* Get all OTP (One-Time Programmable) info about MTD */
+#define OTPGETREGIONINFO       _IOW('M', 15, struct otp_info)
+/* Lock a given range of user data (must be in mode %MTD_FILE_MODE_OTP_USER) */
+#define OTPLOCK                        _IOR('M', 16, struct otp_info)
+/* Get ECC layout (deprecated) */
+#define ECCGETLAYOUT           _IOR('M', 17, struct nand_ecclayout_user)
+/* Get statistics about corrected/uncorrected errors */
+#define ECCGETSTATS            _IOR('M', 18, struct mtd_ecc_stats)
+/* Set MTD mode on a per-file-descriptor basis (see "MTD file modes") */
+#define MTDFILEMODE            _IO('M', 19)
+/* Erase segment of MTD (supports 64-bit address) */
+#define MEMERASE64             _IOW('M', 20, struct erase_info_user64)
+/* Write data to OOB (64-bit version) */
+#define MEMWRITEOOB64          _IOWR('M', 21, struct mtd_oob_buf64)
+/* Read data from OOB (64-bit version) */
+#define MEMREADOOB64           _IOWR('M', 22, struct mtd_oob_buf64)
+/* Check if chip is locked (for MTD that supports it) */
+#define MEMISLOCKED            _IOR('M', 23, struct erase_info_user)
+/*
+ * Most generic write interface; can write in-band and/or out-of-band in various
+ * modes (see "struct mtd_write_req"). This ioctl is not supported for flashes
+ * without OOB, e.g., NOR flash.
+ */
+#define MEMWRITE               _IOWR('M', 24, struct mtd_write_req)
+
+/*
+ * Obsolete legacy interface. Keep it in order not to break userspace
+ * interfaces
+ */
+struct nand_oobinfo {
+       __u32 useecc;
+       __u32 eccbytes;
+       __u32 oobfree[8][2];
+       __u32 eccpos[32];
+};
+
+struct nand_oobfree {
+       __u32 offset;
+       __u32 length;
+};
+
+#define MTD_MAX_OOBFREE_ENTRIES        8
+#define MTD_MAX_ECCPOS_ENTRIES 64
+/*
+ * OBSOLETE: ECC layout control structure. Exported to user-space via ioctl
+ * ECCGETLAYOUT for backwards compatbility and should not be mistaken as a
+ * complete set of ECC information. The ioctl truncates the larger internal
+ * structure to retain binary compatibility with the static declaration of the
+ * ioctl. Note that the "MTD_MAX_..._ENTRIES" macros represent the max size of
+ * the user struct, not the MAX size of the internal struct nand_ecclayout.
+ */
+struct nand_ecclayout_user {
+       __u32 eccbytes;
+       __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES];
+       __u32 oobavail;
+       struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
+};
+
+/**
+ * struct mtd_ecc_stats - error correction stats
+ *
+ * @corrected: number of corrected bits
+ * @failed:    number of uncorrectable errors
+ * @badblocks: number of bad blocks in this partition
+ * @bbtblocks: number of blocks reserved for bad block tables
+ */
+struct mtd_ecc_stats {
+       __u32 corrected;
+       __u32 failed;
+       __u32 badblocks;
+       __u32 bbtblocks;
+};
+
+/*
+ * MTD file modes - for read/write access to MTD
+ *
+ * @MTD_FILE_MODE_NORMAL:      OTP disabled, ECC enabled
+ * @MTD_FILE_MODE_OTP_FACTORY: OTP enabled in factory mode
+ * @MTD_FILE_MODE_OTP_USER:    OTP enabled in user mode
+ * @MTD_FILE_MODE_RAW:         OTP disabled, ECC disabled
+ *
+ * These modes can be set via ioctl(MTDFILEMODE). The mode mode will be retained
+ * separately for each open file descriptor.
+ *
+ * Note: %MTD_FILE_MODE_RAW provides the same functionality as %MTD_OPS_RAW -
+ * raw access to the flash, without error correction or autoplacement schemes.
+ * Wherever possible, the MTD_OPS_* mode will override the MTD_FILE_MODE_* mode
+ * (e.g., when using ioctl(MEMWRITE)), but in some cases, the MTD_FILE_MODE is
+ * used out of necessity (e.g., `write()', ioctl(MEMWRITEOOB64)).
+ */
+enum mtd_file_modes {
+       MTD_FILE_MODE_NORMAL = MTD_OTP_OFF,
+       MTD_FILE_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
+       MTD_FILE_MODE_OTP_USER = MTD_OTP_USER,
+       MTD_FILE_MODE_RAW,
+};
+
+static __inline__ int mtd_type_is_nand_user(const struct mtd_info_user *mtd)
+{
+       return mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH;
+}
+
+#endif /* __MTD_ABI_H__ */
diff --git a/lib/libdss-include/include/mtd/mtd-user.h b/lib/libdss-include/include/mtd/mtd-user.h
new file mode 100644 (file)
index 0000000..e71d555
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_USER_H__
+#define __MTD_USER_H__
+
+/* This file is blessed for inclusion by userspace */
+#include <mtd/mtd-abi.h>
+
+typedef struct mtd_info_user mtd_info_t;
+typedef struct erase_info_user erase_info_t;
+typedef struct region_info_user region_info_t;
+typedef struct nand_oobinfo nand_oobinfo_t;
+typedef struct nand_ecclayout_user nand_ecclayout_t;
+
+#endif /* __MTD_USER_H__ */
diff --git a/lib/libdss-include/include/mtd/nftl-user.h b/lib/libdss-include/include/mtd/nftl-user.h
new file mode 100644 (file)
index 0000000..bdeabd8
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_NFTL_USER_H__
+#define __MTD_NFTL_USER_H__
+
+#include <linux/types.h>
+
+/* Block Control Information */
+
+struct nftl_bci {
+       unsigned char ECCSig[6];
+       __u8 Status;
+       __u8 Status1;
+}__attribute__((packed));
+
+/* Unit Control Information */
+
+struct nftl_uci0 {
+       __u16 VirtUnitNum;
+       __u16 ReplUnitNum;
+       __u16 SpareVirtUnitNum;
+       __u16 SpareReplUnitNum;
+} __attribute__((packed));
+
+struct nftl_uci1 {
+       __u32 WearInfo;
+       __u16 EraseMark;
+       __u16 EraseMark1;
+} __attribute__((packed));
+
+struct nftl_uci2 {
+        __u16 FoldMark;
+        __u16 FoldMark1;
+       __u32 unused;
+} __attribute__((packed));
+
+union nftl_uci {
+       struct nftl_uci0 a;
+       struct nftl_uci1 b;
+       struct nftl_uci2 c;
+};
+
+struct nftl_oob {
+       struct nftl_bci b;
+       union nftl_uci u;
+};
+
+/* NFTL Media Header */
+
+struct NFTLMediaHeader {
+       char DataOrgID[6];
+       __u16 NumEraseUnits;
+       __u16 FirstPhysicalEUN;
+       __u32 FormattedSize;
+       unsigned char UnitSizeFactor;
+} __attribute__((packed));
+
+#define MAX_ERASE_ZONES (8192 - 512)
+
+#define ERASE_MARK 0x3c69
+#define SECTOR_FREE 0xff
+#define SECTOR_USED 0x55
+#define SECTOR_IGNORE 0x11
+#define SECTOR_DELETED 0x00
+
+#define FOLD_MARK_IN_PROGRESS 0x5555
+
+#define ZONE_GOOD 0xff
+#define ZONE_BAD_ORIGINAL 0
+#define ZONE_BAD_MARKED 7
+
+
+#endif /* __MTD_NFTL_USER_H__ */
diff --git a/lib/libdss-include/include/mtd/ubi-user.h b/lib/libdss-include/include/mtd/ubi-user.h
new file mode 100644 (file)
index 0000000..275ebd8
--- /dev/null
@@ -0,0 +1,445 @@
+/*
+ * Copyright © International Business Machines Corp., 2006
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Artem Bityutskiy (Битюцкий Артём)
+ */
+
+#ifndef __UBI_USER_H__
+#define __UBI_USER_H__
+
+#include <linux/types.h>
+
+/*
+ * UBI device creation (the same as MTD device attachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * MTD devices may be attached using %UBI_IOCATT ioctl command of the UBI
+ * control device. The caller has to properly fill and pass
+ * &struct ubi_attach_req object - UBI will attach the MTD device specified in
+ * the request and return the newly created UBI device number as the ioctl
+ * return value.
+ *
+ * UBI device deletion (the same as MTD device detachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * An UBI device maybe deleted with %UBI_IOCDET ioctl command of the UBI
+ * control device.
+ *
+ * UBI volume creation
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
+ * device. A &struct ubi_mkvol_req object has to be properly filled and a
+ * pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume deletion
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
+ * device should be used. A pointer to the 32-bit volume ID hast to be passed
+ * to the ioctl.
+ *
+ * UBI volume re-size
+ * ~~~~~~~~~~~~~~~~~~
+ *
+ * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
+ * device should be used. A &struct ubi_rsvol_req object has to be properly
+ * filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volumes re-name
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
+ * of the UBI character device should be used. A &struct ubi_rnvol_req object
+ * has to be properly filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume update
+ * ~~~~~~~~~~~~~~~~~
+ *
+ * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
+ * corresponding UBI volume character device. A pointer to a 64-bit update
+ * size should be passed to the ioctl. After this, UBI expects user to write
+ * this number of bytes to the volume character device. The update is finished
+ * when the claimed number of bytes is passed. So, the volume update sequence
+ * is something like:
+ *
+ * fd = open("/dev/my_volume");
+ * ioctl(fd, UBI_IOCVOLUP, &image_size);
+ * write(fd, buf, image_size);
+ * close(fd);
+ *
+ * Logical eraseblock erase
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
+ * corresponding UBI volume character device should be used. This command
+ * unmaps the requested logical eraseblock, makes sure the corresponding
+ * physical eraseblock is successfully erased, and returns.
+ *
+ * Atomic logical eraseblock change
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
+ * ioctl command of the corresponding UBI volume character device. A pointer to
+ * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
+ * user is expected to write the requested amount of bytes (similarly to what
+ * should be done in case of the "volume update" ioctl).
+ *
+ * Logical eraseblock map
+ * ~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
+ * ioctl command should be used. A pointer to a &struct ubi_map_req object is
+ * expected to be passed. The ioctl maps the requested logical eraseblock to
+ * a physical eraseblock and returns.  Only non-mapped logical eraseblocks can
+ * be mapped. If the logical eraseblock specified in the request is already
+ * mapped to a physical eraseblock, the ioctl fails and returns error.
+ *
+ * Logical eraseblock unmap
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
+ * ioctl command should be used. The ioctl unmaps the logical eraseblocks,
+ * schedules corresponding physical eraseblock for erasure, and returns. Unlike
+ * the "LEB erase" command, it does not wait for the physical eraseblock being
+ * erased. Note, the side effect of this is that if an unclean reboot happens
+ * after the unmap ioctl returns, you may find the LEB mapped again to the same
+ * physical eraseblock after the UBI is run again.
+ *
+ * Check if logical eraseblock is mapped
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To check if a logical eraseblock is mapped to a physical eraseblock, the
+ * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
+ * not mapped, and %1 if it is mapped.
+ *
+ * Set an UBI volume property
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To set an UBI volume property the %UBI_IOCSETPROP ioctl command should be
+ * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be
+ * passed. The object describes which property should be set, and to which value
+ * it should be set.
+ *
+ * Block devices on UBI volumes
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To create a R/O block device on top of an UBI volume the %UBI_IOCVOLCRBLK
+ * should be used. A pointer to a &struct ubi_blkcreate_req object is expected
+ * to be passed, which is not used and reserved for future usage.
+ *
+ * Conversely, to remove a block device the %UBI_IOCVOLRMBLK should be used,
+ * which takes no arguments.
+ */
+
+/*
+ * When a new UBI volume or UBI device is created, users may either specify the
+ * volume/device number they want to create or to let UBI automatically assign
+ * the number using these constants.
+ */
+#define UBI_VOL_NUM_AUTO (-1)
+#define UBI_DEV_NUM_AUTO (-1)
+
+/* Maximum volume name length */
+#define UBI_MAX_VOLUME_NAME 127
+
+/* ioctl commands of UBI character devices */
+
+#define UBI_IOC_MAGIC 'o'
+
+/* Create an UBI volume */
+#define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req)
+/* Remove an UBI volume */
+#define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32)
+/* Re-size an UBI volume */
+#define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req)
+/* Re-name volumes */
+#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
+
+/* ioctl commands of the UBI control character device */
+
+#define UBI_CTRL_IOC_MAGIC 'o'
+
+/* Attach an MTD device */
+#define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req)
+/* Detach an MTD device */
+#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32)
+
+/* ioctl commands of UBI volume character devices */
+
+#define UBI_VOL_IOC_MAGIC 'O'
+
+/* Start UBI volume update
+ * Note: This actually takes a pointer (__s64*), but we can't change
+ *       that without breaking the ABI on 32bit systems
+ */
+#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64)
+/* LEB erasure command, used for debugging, disabled by default */
+#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32)
+/* Atomic LEB change command */
+#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32)
+/* Map LEB command */
+#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
+/* Unmap LEB command */
+#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32)
+/* Check if LEB is mapped command */
+#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32)
+/* Set an UBI volume property */
+#define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \
+                              struct ubi_set_vol_prop_req)
+/* Create a R/O block device on top of an UBI volume */
+#define UBI_IOCVOLCRBLK _IOW(UBI_VOL_IOC_MAGIC, 7, struct ubi_blkcreate_req)
+/* Remove the R/O block device */
+#define UBI_IOCVOLRMBLK _IO(UBI_VOL_IOC_MAGIC, 8)
+
+/* Maximum MTD device name length supported by UBI */
+#define MAX_UBI_MTD_NAME_LEN 127
+
+/* Maximum amount of UBI volumes that can be re-named at one go */
+#define UBI_MAX_RNVOL 32
+
+/*
+ * UBI volume type constants.
+ *
+ * @UBI_DYNAMIC_VOLUME: dynamic volume
+ * @UBI_STATIC_VOLUME:  static volume
+ */
+enum {
+       UBI_DYNAMIC_VOLUME = 3,
+       UBI_STATIC_VOLUME  = 4,
+};
+
+/*
+ * UBI set volume property ioctl constants.
+ *
+ * @UBI_VOL_PROP_DIRECT_WRITE: allow (any non-zero value) or disallow (value 0)
+ *                             user to directly write and erase individual
+ *                             eraseblocks on dynamic volumes
+ */
+enum {
+       UBI_VOL_PROP_DIRECT_WRITE = 1,
+};
+
+/**
+ * struct ubi_attach_req - attach MTD device request.
+ * @ubi_num: UBI device number to create
+ * @mtd_num: MTD device number to attach
+ * @vid_hdr_offset: VID header offset (use defaults if %0)
+ * @max_beb_per1024: maximum expected number of bad PEB per 1024 PEBs
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * This data structure is used to specify MTD device UBI has to attach and the
+ * parameters it has to use. The number which should be assigned to the new UBI
+ * device is passed in @ubi_num. UBI may automatically assign the number if
+ * @UBI_DEV_NUM_AUTO is passed. In this case, the device number is returned in
+ * @ubi_num.
+ *
+ * Most applications should pass %0 in @vid_hdr_offset to make UBI use default
+ * offset of the VID header within physical eraseblocks. The default offset is
+ * the next min. I/O unit after the EC header. For example, it will be offset
+ * 512 in case of a 512 bytes page NAND flash with no sub-page support. Or
+ * it will be 512 in case of a 2KiB page NAND flash with 4 512-byte sub-pages.
+ *
+ * But in rare cases, if this optimizes things, the VID header may be placed to
+ * a different offset. For example, the boot-loader might do things faster if
+ * the VID header sits at the end of the first 2KiB NAND page with 4 sub-pages.
+ * As the boot-loader would not normally need to read EC headers (unless it
+ * needs UBI in RW mode), it might be faster to calculate ECC. This is weird
+ * example, but it real-life example. So, in this example, @vid_hdr_offer would
+ * be 2KiB-64 bytes = 1984. Note, that this position is not even 512-bytes
+ * aligned, which is OK, as UBI is clever enough to realize this is 4th
+ * sub-page of the first page and add needed padding.
+ *
+ * The @max_beb_per1024 is the maximum amount of bad PEBs UBI expects on the
+ * UBI device per 1024 eraseblocks.  This value is often given in an other form
+ * in the NAND datasheet (min NVB i.e. minimal number of valid blocks). The
+ * maximum expected bad eraseblocks per 1024 is then:
+ *    1024 * (1 - MinNVB / MaxNVB)
+ * Which gives 20 for most NAND devices.  This limit is used in order to derive
+ * amount of eraseblock UBI reserves for handling new bad blocks. If the device
+ * has more bad eraseblocks than this limit, UBI does not reserve any physical
+ * eraseblocks for new bad eraseblocks, but attempts to use available
+ * eraseblocks (if any). The accepted range is 0-768. If 0 is given, the
+ * default kernel value of %CONFIG_MTD_UBI_BEB_LIMIT will be used.
+ */
+struct ubi_attach_req {
+       __s32 ubi_num;
+       __s32 mtd_num;
+       __s32 vid_hdr_offset;
+       __s16 max_beb_per1024;
+       __s8 padding[10];
+};
+
+/**
+ * struct ubi_mkvol_req - volume description data structure used in
+ *                        volume creation requests.
+ * @vol_id: volume number
+ * @alignment: volume alignment
+ * @bytes: volume size in bytes
+ * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME)
+ * @padding1: reserved for future, not used, has to be zeroed
+ * @name_len: volume name length
+ * @padding2: reserved for future, not used, has to be zeroed
+ * @name: volume name
+ *
+ * This structure is used by user-space programs when creating new volumes. The
+ * @used_bytes field is only necessary when creating static volumes.
+ *
+ * The @alignment field specifies the required alignment of the volume logical
+ * eraseblock. This means, that the size of logical eraseblocks will be aligned
+ * to this number, i.e.,
+ *     (UBI device logical eraseblock size) mod (@alignment) = 0.
+ *
+ * To put it differently, the logical eraseblock of this volume may be slightly
+ * shortened in order to make it properly aligned. The alignment has to be
+ * multiple of the flash minimal input/output unit, or %1 to utilize the entire
+ * available space of logical eraseblocks.
+ *
+ * The @alignment field may be useful, for example, when one wants to maintain
+ * a block device on top of an UBI volume. In this case, it is desirable to fit
+ * an integer number of blocks in logical eraseblocks of this UBI volume. With
+ * alignment it is possible to update this volume using plane UBI volume image
+ * BLOBs, without caring about how to properly align them.
+ */
+struct ubi_mkvol_req {
+       __s32 vol_id;
+       __s32 alignment;
+       __s64 bytes;
+       __s8 vol_type;
+       __s8 padding1;
+       __s16 name_len;
+       __s8 padding2[4];
+       char name[UBI_MAX_VOLUME_NAME + 1];
+} __attribute__((packed));
+
+/**
+ * struct ubi_rsvol_req - a data structure used in volume re-size requests.
+ * @vol_id: ID of the volume to re-size
+ * @bytes: new size of the volume in bytes
+ *
+ * Re-sizing is possible for both dynamic and static volumes. But while dynamic
+ * volumes may be re-sized arbitrarily, static volumes cannot be made to be
+ * smaller than the number of bytes they bear. To arbitrarily shrink a static
+ * volume, it must be wiped out first (by means of volume update operation with
+ * zero number of bytes).
+ */
+struct ubi_rsvol_req {
+       __s64 bytes;
+       __s32 vol_id;
+} __attribute__((packed));
+
+/**
+ * struct ubi_rnvol_req - volumes re-name request.
+ * @count: count of volumes to re-name
+ * @padding1:  reserved for future, not used, has to be zeroed
+ * @vol_id: ID of the volume to re-name
+ * @name_len: name length
+ * @padding2:  reserved for future, not used, has to be zeroed
+ * @name: new volume name
+ *
+ * UBI allows to re-name up to %32 volumes at one go. The count of volumes to
+ * re-name is specified in the @count field. The ID of the volumes to re-name
+ * and the new names are specified in the @vol_id and @name fields.
+ *
+ * The UBI volume re-name operation is atomic, which means that should power cut
+ * happen, the volumes will have either old name or new name. So the possible
+ * use-cases of this command is atomic upgrade. Indeed, to upgrade, say, volumes
+ * A and B one may create temporary volumes %A1 and %B1 with the new contents,
+ * then atomically re-name A1->A and B1->B, in which case old %A and %B will
+ * be removed.
+ *
+ * If it is not desirable to remove old A and B, the re-name request has to
+ * contain 4 entries: A1->A, A->A1, B1->B, B->B1, in which case old A1 and B1
+ * become A and B, and old A and B will become A1 and B1.
+ *
+ * It is also OK to request: A1->A, A1->X, B1->B, B->Y, in which case old A1
+ * and B1 become A and B, and old A and B become X and Y.
+ *
+ * In other words, in case of re-naming into an existing volume name, the
+ * existing volume is removed, unless it is re-named as well at the same
+ * re-name request.
+ */
+struct ubi_rnvol_req {
+       __s32 count;
+       __s8 padding1[12];
+       struct {
+               __s32 vol_id;
+               __s16 name_len;
+               __s8  padding2[2];
+               char    name[UBI_MAX_VOLUME_NAME + 1];
+       } ents[UBI_MAX_RNVOL];
+} __attribute__((packed));
+
+/**
+ * struct ubi_leb_change_req - a data structure used in atomic LEB change
+ *                             requests.
+ * @lnum: logical eraseblock number to change
+ * @bytes: how many bytes will be written to the logical eraseblock
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * The @dtype field used to inform UBI about what kind of data will be written
+ * to the LEB: long term (value 1), short term (value 2), unknown (value 3).
+ * UBI tried to pick a PEB with lower erase counter for short term data and a
+ * PEB with higher erase counter for long term data. But this was not really
+ * used because users usually do not know this and could easily mislead UBI. We
+ * removed this feature in May 2012. UBI currently just ignores the @dtype
+ * field. But for better compatibility with older kernels it is recommended to
+ * set @dtype to 3 (unknown).
+ */
+struct ubi_leb_change_req {
+       __s32 lnum;
+       __s32 bytes;
+       __s8  dtype; /* obsolete, do not use! */
+       __s8  padding[7];
+} __attribute__((packed));
+
+/**
+ * struct ubi_map_req - a data structure used in map LEB requests.
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @lnum: logical eraseblock number to unmap
+ * @padding: reserved for future, not used, has to be zeroed
+ */
+struct ubi_map_req {
+       __s32 lnum;
+       __s8  dtype; /* obsolete, do not use! */
+       __s8  padding[3];
+} __attribute__((packed));
+
+
+/**
+ * struct ubi_set_vol_prop_req - a data structure used to set an UBI volume
+ *                               property.
+ * @property: property to set (%UBI_VOL_PROP_DIRECT_WRITE)
+ * @padding: reserved for future, not used, has to be zeroed
+ * @value: value to set
+ */
+struct ubi_set_vol_prop_req {
+       __u8  property;
+       __u8  padding[7];
+       __u64 value;
+}  __attribute__((packed));
+
+/**
+ * struct ubi_blkcreate_req - a data structure used in block creation requests.
+ * @padding: reserved for future, not used, has to be zeroed
+ */
+struct ubi_blkcreate_req {
+       __s8  padding[128];
+}  __attribute__((packed));
+
+#endif /* __UBI_USER_H__ */
diff --git a/lib/libdss-include/include/net/ethernet.h b/lib/libdss-include/include/net/ethernet.h
new file mode 100644 (file)
index 0000000..3160e93
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the FreeBSD version of this file. Curiously, that file
+   lacks a copyright in the header. */
+
+#ifndef __NET_ETHERNET_H
+#define __NET_ETHERNET_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <linux/if_ether.h>     /* IEEE 802.3 Ethernet constants */
+
+__BEGIN_DECLS
+
+/* This is a name for the 48 bit ethernet address available on many
+   systems.  */
+struct ether_addr
+{
+  u_int8_t ether_addr_octet[ETH_ALEN];
+} __attribute__ ((__packed__));
+
+/* 10Mb/s ethernet header */
+struct ether_header
+{
+  u_int8_t  ether_dhost[ETH_ALEN];     /* destination eth addr */
+  u_int8_t  ether_shost[ETH_ALEN];     /* source ether addr    */
+  u_int16_t ether_type;                        /* packet type ID field */
+} __attribute__ ((__packed__));
+
+/* Ethernet protocol ID's */
+#define        ETHERTYPE_PUP           0x0200          /* Xerox PUP */
+#define ETHERTYPE_SPRITE       0x0500          /* Sprite */
+#define        ETHERTYPE_IP            0x0800          /* IP */
+#define        ETHERTYPE_ARP           0x0806          /* Address resolution */
+#define        ETHERTYPE_REVARP        0x8035          /* Reverse ARP */
+#define ETHERTYPE_AT           0x809B          /* AppleTalk protocol */
+#define ETHERTYPE_AARP         0x80F3          /* AppleTalk ARP */
+#define        ETHERTYPE_VLAN          0x8100          /* IEEE 802.1Q VLAN tagging */
+#define ETHERTYPE_IPX          0x8137          /* IPX */
+#define        ETHERTYPE_IPV6          0x86dd          /* IP protocol version 6 */
+#define ETHERTYPE_LOOPBACK     0x9000          /* used to test interfaces */
+
+
+#define        ETHER_ADDR_LEN  ETH_ALEN                 /* size of ethernet addr */
+#define        ETHER_TYPE_LEN  2                        /* bytes in type field */
+#define        ETHER_CRC_LEN   4                        /* bytes in CRC field */
+#define        ETHER_HDR_LEN   ETH_HLEN                 /* total octets in header */
+#define        ETHER_MIN_LEN   (ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */
+#define        ETHER_MAX_LEN   (ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length */
+
+/* make sure ethenet length is valid */
+#define        ETHER_IS_VALID_LEN(foo) \
+       ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
+
+/*
+ * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
+ * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
+ * by an ETHER type (as given above) and then the (variable-length) header.
+ */
+#define        ETHERTYPE_TRAIL         0x1000          /* Trailer packet */
+#define        ETHERTYPE_NTRAILER      16
+
+#define        ETHERMTU        ETH_DATA_LEN
+#define        ETHERMIN        (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
+
+__END_DECLS
+
+#endif /* net/ethernet.h */
diff --git a/lib/libdss-include/include/net/if.h b/lib/libdss-include/include/net/if.h
new file mode 100644 (file)
index 0000000..bbc2094
--- /dev/null
@@ -0,0 +1,204 @@
+/* net/if.h -- declarations for inquiring about network interfaces
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_H
+#define _NET_IF_H      1
+
+#include <features.h>
+
+#ifdef __USE_MISC
+# include <sys/types.h>
+# include <sys/socket.h>
+#endif
+
+
+/* Length of interface name.  */
+#define IF_NAMESIZE    16
+
+struct if_nameindex
+  {
+    unsigned int if_index;     /* 1, 2, ... */
+    char *if_name;             /* null terminated name: "eth0", ... */
+  };
+
+
+#ifdef __USE_MISC
+/* Standard interface flags. */
+enum
+  {
+    IFF_UP = 0x1,              /* Interface is up.  */
+# define IFF_UP        IFF_UP
+    IFF_BROADCAST = 0x2,       /* Broadcast address valid.  */
+# define IFF_BROADCAST IFF_BROADCAST
+    IFF_DEBUG = 0x4,           /* Turn on debugging.  */
+# define IFF_DEBUG     IFF_DEBUG
+    IFF_LOOPBACK = 0x8,                /* Is a loopback net.  */
+# define IFF_LOOPBACK  IFF_LOOPBACK
+    IFF_POINTOPOINT = 0x10,    /* Interface is point-to-point link.  */
+# define IFF_POINTOPOINT IFF_POINTOPOINT
+    IFF_NOTRAILERS = 0x20,     /* Avoid use of trailers.  */
+# define IFF_NOTRAILERS        IFF_NOTRAILERS
+    IFF_RUNNING = 0x40,                /* Resources allocated.  */
+# define IFF_RUNNING   IFF_RUNNING
+    IFF_NOARP = 0x80,          /* No address resolution protocol.  */
+# define IFF_NOARP     IFF_NOARP
+    IFF_PROMISC = 0x100,       /* Receive all packets.  */
+# define IFF_PROMISC   IFF_PROMISC
+
+    /* Not supported */
+    IFF_ALLMULTI = 0x200,      /* Receive all multicast packets.  */
+# define IFF_ALLMULTI  IFF_ALLMULTI
+
+    IFF_MASTER = 0x400,                /* Master of a load balancer.  */
+# define IFF_MASTER    IFF_MASTER
+    IFF_SLAVE = 0x800,         /* Slave of a load balancer.  */
+# define IFF_SLAVE     IFF_SLAVE
+
+    IFF_MULTICAST = 0x1000,    /* Supports multicast.  */
+# define IFF_MULTICAST IFF_MULTICAST
+
+    IFF_PORTSEL = 0x2000,      /* Can set media type.  */
+# define IFF_PORTSEL   IFF_PORTSEL
+    IFF_AUTOMEDIA = 0x4000,    /* Auto media select active.  */
+# define IFF_AUTOMEDIA IFF_AUTOMEDIA
+    IFF_DYNAMIC = 0x8000       /* Dialup device with changing addresses.  */
+# define IFF_DYNAMIC   IFF_DYNAMIC
+  };
+
+/* The ifaddr structure contains information about one address of an
+   interface.  They are maintained by the different address families,
+   are allocated and attached when an address is set, and are linked
+   together so all addresses for an interface can be located.  */
+
+struct ifaddr
+  {
+    struct sockaddr ifa_addr;  /* Address of interface.  */
+    union
+      {
+       struct sockaddr ifu_broadaddr;
+       struct sockaddr ifu_dstaddr;
+      } ifa_ifu;
+    struct iface *ifa_ifp;     /* Back-pointer to interface.  */
+    struct ifaddr *ifa_next;   /* Next address for interface.  */
+  };
+
+# define ifa_broadaddr ifa_ifu.ifu_broadaddr   /* broadcast address    */
+# define ifa_dstaddr   ifa_ifu.ifu_dstaddr     /* other end of link    */
+
+/* Device mapping structure. I'd just gone off and designed a
+   beautiful scheme using only loadable modules with arguments for
+   driver options and along come the PCMCIA people 8)
+
+   Ah well. The get() side of this is good for WDSETUP, and it'll be
+   handy for debugging things. The set side is fine for now and being
+   very small might be worth keeping for clean configuration.  */
+
+struct ifmap
+  {
+    unsigned long int mem_start;
+    unsigned long int mem_end;
+    unsigned short int base_addr;
+    unsigned char irq;
+    unsigned char dma;
+    unsigned char port;
+    /* 3 bytes spare */
+  };
+
+/* Interface request structure used for socket ioctl's.  All interface
+   ioctl's must have parameter definitions which begin with ifr_name.
+   The remainder may be interface specific.  */
+
+struct ifreq
+  {
+# define IFHWADDRLEN   6
+# define IFNAMSIZ      IF_NAMESIZE
+    union
+      {
+       char ifrn_name[IFNAMSIZ];       /* Interface name, e.g. "en0".  */
+      } ifr_ifrn;
+
+    union
+      {
+       struct sockaddr ifru_addr;
+       struct sockaddr ifru_dstaddr;
+       struct sockaddr ifru_broadaddr;
+       struct sockaddr ifru_netmask;
+       struct sockaddr ifru_hwaddr;
+       short int ifru_flags;
+       int ifru_ivalue;
+       int ifru_mtu;
+       struct ifmap ifru_map;
+       char ifru_slave[IFNAMSIZ];      /* Just fits the size */
+       char ifru_newname[IFNAMSIZ];
+       __caddr_t ifru_data;
+      } ifr_ifru;
+  };
+# define ifr_name      ifr_ifrn.ifrn_name      /* interface name       */
+# define ifr_hwaddr    ifr_ifru.ifru_hwaddr    /* MAC address          */
+# define ifr_addr      ifr_ifru.ifru_addr      /* address              */
+# define ifr_dstaddr   ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
+# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address    */
+# define ifr_netmask   ifr_ifru.ifru_netmask   /* interface net mask   */
+# define ifr_flags     ifr_ifru.ifru_flags     /* flags                */
+# define ifr_metric    ifr_ifru.ifru_ivalue    /* metric               */
+# define ifr_mtu       ifr_ifru.ifru_mtu       /* mtu                  */
+# define ifr_map       ifr_ifru.ifru_map       /* device map           */
+# define ifr_slave     ifr_ifru.ifru_slave     /* slave device         */
+# define ifr_data      ifr_ifru.ifru_data      /* for use by interface */
+# define ifr_ifindex   ifr_ifru.ifru_ivalue    /* interface index      */
+# define ifr_bandwidth ifr_ifru.ifru_ivalue    /* link bandwidth       */
+# define ifr_qlen      ifr_ifru.ifru_ivalue    /* queue length         */
+# define ifr_newname   ifr_ifru.ifru_newname   /* New name             */
+# define _IOT_ifreq    _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
+# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
+# define _IOT_ifreq_int        _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
+
+
+/* Structure used in SIOCGIFCONF request.  Used to retrieve interface
+   configuration for machine (useful for programs which must know all
+   networks accessible).  */
+
+struct ifconf
+  {
+    int        ifc_len;                        /* Size of buffer.  */
+    union
+      {
+       __caddr_t ifcu_buf;
+       struct ifreq *ifcu_req;
+      } ifc_ifcu;
+  };
+# define ifc_buf       ifc_ifcu.ifcu_buf       /* Buffer address.  */
+# define ifc_req       ifc_ifcu.ifcu_req       /* Array of structures.  */
+# define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
+#endif /* Misc.  */
+
+__BEGIN_DECLS
+
+/* Convert an interface name to an index, and vice versa.  */
+extern unsigned int if_nametoindex (const char *__ifname) __THROW;
+extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW;
+
+/* Return a list of all interfaces and their indices.  */
+extern struct if_nameindex *if_nameindex (void) __THROW;
+
+/* Free the data returned from if_nameindex.  */
+extern void if_freenameindex (struct if_nameindex *__ptr) __THROW;
+
+__END_DECLS
+
+#endif /* net/if.h */
diff --git a/lib/libdss-include/include/net/if_arp.h b/lib/libdss-include/include/net/if_arp.h
new file mode 100644 (file)
index 0000000..1b3f1d3
--- /dev/null
@@ -0,0 +1,183 @@
+/* Definitions for Address Resolution Protocol.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_IF_ARP_H
+
+#define _NET_IF_ARP_H 1
+#include <sys/cdefs.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+__BEGIN_DECLS
+
+/* Some internals from deep down in the kernel.  */
+#define MAX_ADDR_LEN   7
+
+
+/* This structure defines an ethernet arp header.  */
+
+/* ARP protocol opcodes. */
+#define        ARPOP_REQUEST   1               /* ARP request.  */
+#define        ARPOP_REPLY     2               /* ARP reply.  */
+#define        ARPOP_RREQUEST  3               /* RARP request.  */
+#define        ARPOP_RREPLY    4               /* RARP reply.  */
+#define        ARPOP_InREQUEST 8               /* InARP request.  */
+#define        ARPOP_InREPLY   9               /* InARP reply.  */
+#define        ARPOP_NAK       10              /* (ATM)ARP NAK.  */
+
+/* See RFC 826 for protocol description.  ARP packets are variable
+   in size; the arphdr structure defines the fixed-length portion.
+   Protocol type values are the same as those for 10 Mb/s Ethernet.
+   It is followed by the variable-sized fields ar_sha, arp_spa,
+   arp_tha and arp_tpa in that order, according to the lengths
+   specified.  Field names used correspond to RFC 826.  */
+
+struct arphdr
+  {
+    unsigned short int ar_hrd;         /* Format of hardware address.  */
+    unsigned short int ar_pro;         /* Format of protocol address.  */
+    unsigned char ar_hln;              /* Length of hardware address.  */
+    unsigned char ar_pln;              /* Length of protocol address.  */
+    unsigned short int ar_op;          /* ARP opcode (command).  */
+#if 0
+    /* Ethernet looks like this : This bit is variable sized
+       however...  */
+    unsigned char __ar_sha[ETH_ALEN];  /* Sender hardware address.  */
+    unsigned char __ar_sip[4];         /* Sender IP address.  */
+    unsigned char __ar_tha[ETH_ALEN];  /* Target hardware address.  */
+    unsigned char __ar_tip[4];         /* Target IP address.  */
+#endif
+  };
+
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM  0               /* From KA9Q: NET/ROM pseudo. */
+#define ARPHRD_ETHER   1               /* Ethernet 10/100Mbps.  */
+#define        ARPHRD_EETHER   2               /* Experimental Ethernet.  */
+#define        ARPHRD_AX25     3               /* AX.25 Level 2.  */
+#define        ARPHRD_PRONET   4               /* PROnet token ring.  */
+#define        ARPHRD_CHAOS    5               /* Chaosnet.  */
+#define        ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB.  */
+#define        ARPHRD_ARCNET   7               /* ARCnet.  */
+#define        ARPHRD_APPLETLK 8               /* APPLEtalk.  */
+#define        ARPHRD_DLCI     15              /* Frame Relay DLCI.  */
+#define        ARPHRD_ATM      19              /* ATM.  */
+#define        ARPHRD_METRICOM 23              /* Metricom STRIP (new IANA id).  */
+#define ARPHRD_IEEE1394        24              /* IEEE 1394 IPv4 - RFC 2734.  */
+#define ARPHRD_EUI64           27              /* EUI-64.  */
+#define ARPHRD_INFINIBAND      32              /* InfiniBand.  */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP    256
+#define ARPHRD_CSLIP   257
+#define ARPHRD_SLIP6   258
+#define ARPHRD_CSLIP6  259
+#define ARPHRD_RSRVD   260             /* Notional KISS type.  */
+#define ARPHRD_ADAPT   264
+#define ARPHRD_ROSE    270
+#define ARPHRD_X25     271             /* CCITT X.25.  */
+#define ARPHRD_HWX25   272             /* Boards with X.25 in firmware.  */
+#define ARPHRD_PPP     512
+#define ARPHRD_CISCO   513             /* Cisco HDLC.  */
+#define ARPHRD_HDLC    ARPHRD_CISCO
+#define ARPHRD_LAPB    516             /* LAPB.  */
+#define ARPHRD_DDCMP   517             /* Digital's DDCMP.  */
+#define        ARPHRD_RAWHDLC  518             /* Raw HDLC.  */
+
+#define ARPHRD_TUNNEL  768             /* IPIP tunnel.  */
+#define ARPHRD_TUNNEL6 769             /* IPIP6 tunnel.  */
+#define ARPHRD_FRAD    770             /* Frame Relay Access Device.  */
+#define ARPHRD_SKIP    771             /* SKIP vif.  */
+#define ARPHRD_LOOPBACK        772             /* Loopback device.  */
+#define ARPHRD_LOCALTLK 773            /* Localtalk device.  */
+#define ARPHRD_FDDI    774             /* Fiber Distributed Data Interface. */
+#define ARPHRD_BIF     775             /* AP1000 BIF.  */
+#define ARPHRD_SIT     776             /* sit0 device - IPv6-in-IPv4.  */
+#define ARPHRD_IPDDP   777             /* IP-in-DDP tunnel.  */
+#define ARPHRD_IPGRE   778             /* GRE over IP.  */
+#define ARPHRD_PIMREG  779             /* PIMSM register interface.  */
+#define ARPHRD_HIPPI   780             /* High Performance Parallel I'face. */
+#define ARPHRD_ASH     781             /* (Nexus Electronics) Ash.  */
+#define ARPHRD_ECONET  782             /* Acorn Econet.  */
+#define ARPHRD_IRDA    783             /* Linux-IrDA.  */
+#define ARPHRD_FCPP    784             /* Point to point fibrechanel.  */
+#define ARPHRD_FCAL    785             /* Fibrechanel arbitrated loop.  */
+#define ARPHRD_FCPL    786             /* Fibrechanel public loop.  */
+#define ARPHRD_FCFABRIC 787            /* Fibrechanel fabric.  */
+#define ARPHRD_IEEE802_TR 800          /* Magic type ident for TR.  */
+#define ARPHRD_IEEE80211 801           /* IEEE 802.11.  */
+#define ARPHRD_IEEE80211_PRISM 802     /* IEEE 802.11 + Prism2 header.  */
+#define ARPHRD_IEEE80211_RADIOTAP 803  /* IEEE 802.11 + radiotap header.  */
+#define ARPHRD_IEEE802154 804          /* IEEE 802.15.4 header.  */
+#define ARPHRD_IEEE802154_PHY 805      /* IEEE 802.15.4 PHY header.  */
+
+#define ARPHRD_VOID      0xFFFF        /* Void type, nothing is known.  */
+#define ARPHRD_NONE      0xFFFE        /* Zero header length.  */
+
+
+/* ARP ioctl request.  */
+struct arpreq
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+    char arp_dev[16];
+  };
+
+struct arpreq_old
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+  };
+
+/* ARP Flag values.  */
+#define ATF_COM                0x02            /* Completed entry (ha valid).  */
+#define        ATF_PERM        0x04            /* Permanent entry.  */
+#define        ATF_PUBL        0x08            /* Publish entry.  */
+#define        ATF_USETRAILERS 0x10            /* Has requested trailers.  */
+#define ATF_NETMASK     0x20            /* Want to use a netmask (only
+                                          for proxy entries).  */
+#define ATF_DONTPUB    0x40            /* Don't answer this addresses.  */
+#define ATF_MAGIC      0x80            /* Automatically added entry.  */
+
+
+/* Support for the user space arp daemon, arpd.  */
+#define ARPD_UPDATE    0x01
+#define ARPD_LOOKUP    0x02
+#define ARPD_FLUSH     0x03
+
+struct arpd_request
+  {
+    unsigned short int req;            /* Request type.  */
+    u_int32_t ip;                      /* IP address of entry.  */
+    unsigned long int dev;             /* Device entry is tied to.  */
+    unsigned long int stamp;
+    unsigned long int updated;
+    unsigned char ha[MAX_ADDR_LEN];    /* Hardware address.  */
+  };
+
+__END_DECLS
+
+#endif /* net/if_arp.h */
diff --git a/lib/libdss-include/include/net/if_packet.h b/lib/libdss-include/include/net/if_packet.h
new file mode 100644 (file)
index 0000000..67f9f98
--- /dev/null
@@ -0,0 +1,36 @@
+/* Definitions for use with Linux SOCK_PACKET sockets.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __IF_PACKET_H
+#define __IF_PACKET_H
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+/* This is the SOCK_PACKET address structure as used in Linux 2.0.
+   From Linux 2.1 the AF_PACKET interface is preferred and you should
+   consider using it in place of this one.  */
+
+struct sockaddr_pkt
+  {
+    __SOCKADDR_COMMON (spkt_);
+    unsigned char spkt_device[14];
+    unsigned short spkt_protocol;
+  };
+
+#endif
diff --git a/lib/libdss-include/include/net/if_ppp.h b/lib/libdss-include/include/net/if_ppp.h
new file mode 100644 (file)
index 0000000..1b1c3ea
--- /dev/null
@@ -0,0 +1,169 @@
+/*     From: if_ppp.h,v 1.3 1995/06/12 11:36:50 paulus Exp */
+
+/*
+ * if_ppp.h - Point-to-Point Protocol definitions.
+ *
+ * Copyright (c) 1989 Carnegie Mellon University.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ *  ==FILEVERSION 960926==
+ *
+ *  NOTE TO MAINTAINERS:
+ *     If you modify this file at all, please set the above date.
+ *     if_ppp.h is shipped with a PPP distribution as well as with the kernel;
+ *     if everyone increases the FILEVERSION number above, then scripts
+ *     can do the right thing when deciding whether to install a new if_ppp.h
+ *     file.  Don't change the format of that line otherwise, so the
+ *     installation script can recognize it.
+ */
+
+
+#ifndef __NET_IF_PPP_H
+#define __NET_IF_PPP_H 1
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <net/ppp_defs.h>
+
+__BEGIN_DECLS
+
+/*
+ * Packet sizes
+ */
+
+#define        PPP_MTU         1500    /* Default MTU (size of Info field) */
+#define PPP_MAXMRU     65000   /* Largest MRU we allow */
+#define PPP_VERSION    "2.2.0"
+#define PPP_MAGIC      0x5002  /* Magic value for the ppp structure */
+#define PROTO_IPX      0x002b  /* protocol numbers */
+#define PROTO_DNA_RT    0x0027  /* DNA Routing */
+
+
+/*
+ * Bit definitions for flags.
+ */
+
+#define SC_COMP_PROT   0x00000001      /* protocol compression (output) */
+#define SC_COMP_AC     0x00000002      /* header compression (output) */
+#define        SC_COMP_TCP     0x00000004      /* TCP (VJ) compression (output) */
+#define SC_NO_TCP_CCID 0x00000008      /* disable VJ connection-id comp. */
+#define SC_REJ_COMP_AC 0x00000010      /* reject adrs/ctrl comp. on input */
+#define SC_REJ_COMP_TCP        0x00000020      /* reject TCP (VJ) comp. on input */
+#define SC_CCP_OPEN    0x00000040      /* Look at CCP packets */
+#define SC_CCP_UP      0x00000080      /* May send/recv compressed packets */
+#define SC_ENABLE_IP   0x00000100      /* IP packets may be exchanged */
+#define SC_COMP_RUN    0x00001000      /* compressor has been inited */
+#define SC_DECOMP_RUN  0x00002000      /* decompressor has been inited */
+#define SC_DEBUG       0x00010000      /* enable debug messages */
+#define SC_LOG_INPKT   0x00020000      /* log contents of good pkts recvd */
+#define SC_LOG_OUTPKT  0x00040000      /* log contents of pkts sent */
+#define SC_LOG_RAWIN   0x00080000      /* log all chars received */
+#define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
+#define        SC_MASK         0x0fE0ffff      /* bits that user can change */
+
+/* state bits */
+#define        SC_ESCAPED      0x80000000      /* saw a PPP_ESCAPE */
+#define        SC_FLUSH        0x40000000      /* flush input until next PPP_FLAG */
+#define SC_VJ_RESET    0x20000000      /* Need to reset the VJ decompressor */
+#define SC_XMIT_BUSY   0x10000000      /* ppp_write_wakeup is active */
+#define SC_RCV_ODDP    0x08000000      /* have rcvd char with odd parity */
+#define SC_RCV_EVNP    0x04000000      /* have rcvd char with even parity */
+#define SC_RCV_B7_1    0x02000000      /* have rcvd char with bit 7 = 1 */
+#define SC_RCV_B7_0    0x01000000      /* have rcvd char with bit 7 = 0 */
+#define SC_DC_FERROR   0x00800000      /* fatal decomp error detected */
+#define SC_DC_ERROR    0x00400000      /* non-fatal decomp error detected */
+
+/*
+ * Ioctl definitions.
+ */
+
+struct npioctl {
+    int                protocol;       /* PPP protocol, e.g. PPP_IP */
+    enum NPmode        mode;
+};
+
+/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
+struct ppp_option_data {
+       u_int8_t  *ptr;
+       u_int32_t length;
+       int       transmit;
+};
+
+struct ifpppstatsreq {
+  struct ifreq    b;
+  struct ppp_stats stats;                      /* statistic information */
+};
+
+struct ifpppcstatsreq {
+  struct ifreq         b;
+  struct ppp_comp_stats stats;
+};
+
+#define ifr__name       b.ifr_ifrn.ifrn_name
+#define stats_ptr       b.ifr_ifru.ifru_data
+
+/*
+ * Ioctl definitions.
+ */
+
+#define        PPPIOCGFLAGS    _IOR('t', 90, int)      /* get configuration flags */
+#define        PPPIOCSFLAGS    _IOW('t', 89, int)      /* set configuration flags */
+#define        PPPIOCGASYNCMAP _IOR('t', 88, int)      /* get async map */
+#define        PPPIOCSASYNCMAP _IOW('t', 87, int)      /* set async map */
+#define        PPPIOCGUNIT     _IOR('t', 86, int)      /* get ppp unit number */
+#define        PPPIOCGRASYNCMAP _IOR('t', 85, int)     /* get receive async map */
+#define        PPPIOCSRASYNCMAP _IOW('t', 84, int)     /* set receive async map */
+#define        PPPIOCGMRU      _IOR('t', 83, int)      /* get max receive unit */
+#define        PPPIOCSMRU      _IOW('t', 82, int)      /* set max receive unit */
+#define        PPPIOCSMAXCID   _IOW('t', 81, int)      /* set VJ max slot ID */
+#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
+#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
+#define PPPIOCXFERUNIT _IO('t', 78)            /* transfer PPP unit */
+#define PPPIOCSCOMPRESS        _IOW('t', 77, struct ppp_option_data)
+#define PPPIOCGNPMODE  _IOWR('t', 76, struct npioctl) /* get NP mode */
+#define PPPIOCSNPMODE  _IOW('t', 75, struct npioctl)  /* set NP mode */
+#define PPPIOCGDEBUG   _IOR('t', 65, int)      /* Read debug level */
+#define PPPIOCSDEBUG   _IOW('t', 64, int)      /* Set debug level */
+#define PPPIOCGIDLE    _IOR('t', 63, struct ppp_idle) /* get idle time */
+
+#define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0)
+#define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)  /* NEVER change this!! */
+#define SIOCGPPPCSTATS  (SIOCDEVPRIVATE + 2)
+
+#if !defined(ifr_mtu)
+#define ifr_mtu        ifr_ifru.ifru_metric
+#endif
+
+__END_DECLS
+
+#endif /* net/if_ppp.h */
diff --git a/lib/libdss-include/include/net/if_shaper.h b/lib/libdss-include/include/net/if_shaper.h
new file mode 100644 (file)
index 0000000..956ad62
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_SHAPER_H
+#define _NET_IF_SHAPER_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+
+__BEGIN_DECLS
+
+#define SHAPER_QLEN    10
+/*
+ *     This is a bit speed dependant (read it shouldnt be a constant!)
+ *
+ *     5 is about right for 28.8 upwards. Below that double for every
+ *     halving of speed or so. - ie about 20 for 9600 baud.
+ */
+#define SHAPER_LATENCY (5 * HZ)
+#define SHAPER_MAXSLIP 2
+#define SHAPER_BURST   (HZ / 50)       /* Good for >128K then */
+
+#define SHAPER_SET_DEV         0x0001
+#define SHAPER_SET_SPEED       0x0002
+#define SHAPER_GET_DEV         0x0003
+#define SHAPER_GET_SPEED       0x0004
+
+struct shaperconf
+{
+  u_int16_t ss_cmd;
+  union
+  {
+    char ssu_name[14];
+    u_int32_t ssu_speed;
+  } ss_u;
+#define ss_speed ss_u.ssu_speed
+#define ss_name ss_u.ssu_name
+};
+
+__END_DECLS
+
+#endif /* net/if_shaper.h */
diff --git a/lib/libdss-include/include/net/if_slip.h b/lib/libdss-include/include/net/if_slip.h
new file mode 100644 (file)
index 0000000..25856d0
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_SLIP_H
+#define _NET_IF_SLIP_H 1
+
+/* We can use the kernel header.  */
+#include <linux/if_slip.h>
+
+#endif /* net/if_slip.h.  */
diff --git a/lib/libdss-include/include/net/ppp-comp.h b/lib/libdss-include/include/net/ppp-comp.h
new file mode 100644 (file)
index 0000000..4a992d5
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ppp-comp.h>
diff --git a/lib/libdss-include/include/net/ppp_defs.h b/lib/libdss-include/include/net/ppp_defs.h
new file mode 100644 (file)
index 0000000..f8924c4
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _NET_PPP_DEFS_H
+#define _NET_PPP_DEFS_H 1
+
+#define __need_time_t
+#include <time.h>
+
+#include <asm/types.h>
+#include <linux/ppp_defs.h>
+
+#endif /* net/ppp_defs.h */
diff --git a/lib/libdss-include/include/net/route.h b/lib/libdss-include/include/net/route.h
new file mode 100644 (file)
index 0000000..11d21c6
--- /dev/null
@@ -0,0 +1,144 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_ROUTE_H
+#define _NET_ROUTE_H   1
+
+#include <features.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <bits/wordsize.h>
+
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry
+  {
+    unsigned long int rt_pad1;
+    struct sockaddr rt_dst;            /* Target address.  */
+    struct sockaddr rt_gateway;                /* Gateway addr (RTF_GATEWAY).  */
+    struct sockaddr rt_genmask;                /* Target network mask (IP).  */
+    unsigned short int rt_flags;
+    short int rt_pad2;
+    unsigned long int rt_pad3;
+    unsigned char rt_tos;
+    unsigned char rt_class;
+#if __WORDSIZE == 64
+    short int rt_pad4[3];
+#else
+    short int rt_pad4;
+#endif
+    short int rt_metric;               /* +1 for binary compatibility!  */
+    char *rt_dev;                      /* Forcing the device at add.  */
+    unsigned long int rt_mtu;          /* Per route MTU/Window.  */
+    unsigned long int rt_window;       /* Window clamping.  */
+    unsigned short int rt_irtt;                /* Initial RTT.  */
+  };
+/* Compatibility hack.  */
+#define rt_mss rt_mtu
+
+
+struct in6_rtmsg
+  {
+    struct in6_addr rtmsg_dst;
+    struct in6_addr rtmsg_src;
+    struct in6_addr rtmsg_gateway;
+    u_int32_t rtmsg_type;
+    u_int16_t rtmsg_dst_len;
+    u_int16_t rtmsg_src_len;
+    u_int32_t rtmsg_metric;
+    unsigned long int rtmsg_info;
+    u_int32_t rtmsg_flags;
+    int rtmsg_ifindex;
+  };
+
+
+#define        RTF_UP          0x0001          /* Route usable.  */
+#define        RTF_GATEWAY     0x0002          /* Destination is a gateway.  */
+
+#define        RTF_HOST        0x0004          /* Host entry (net otherwise).  */
+#define RTF_REINSTATE  0x0008          /* Reinstate route after timeout.  */
+#define        RTF_DYNAMIC     0x0010          /* Created dyn. (by redirect).  */
+#define        RTF_MODIFIED    0x0020          /* Modified dyn. (by redirect).  */
+#define RTF_MTU                0x0040          /* Specific MTU for this route.  */
+#define RTF_MSS                RTF_MTU         /* Compatibility.  */
+#define RTF_WINDOW     0x0080          /* Per route window clamping.  */
+#define RTF_IRTT       0x0100          /* Initial round trip time.  */
+#define RTF_REJECT     0x0200          /* Reject route.  */
+#define        RTF_STATIC      0x0400          /* Manually injected route.  */
+#define        RTF_XRESOLVE    0x0800          /* External resolver.  */
+#define RTF_NOFORWARD   0x1000         /* Forwarding inhibited.  */
+#define RTF_THROW      0x2000          /* Go to next class.  */
+#define RTF_NOPMTUDISC  0x4000         /* Do not send packets with DF.  */
+
+/* for IPv6 */
+#define RTF_DEFAULT    0x00010000      /* default - learned via ND     */
+#define RTF_ALLONLINK  0x00020000      /* fallback, no routers on link */
+#define RTF_ADDRCONF   0x00040000      /* addrconf route - RA          */
+
+#define RTF_LINKRT     0x00100000      /* link specific - device match */
+#define RTF_NONEXTHOP  0x00200000      /* route with no nexthop        */
+
+#define RTF_CACHE      0x01000000      /* cache entry                  */
+#define RTF_FLOW       0x02000000      /* flow significant route       */
+#define RTF_POLICY     0x04000000      /* policy route                 */
+
+#define RTCF_VALVE     0x00200000
+#define RTCF_MASQ      0x00400000
+#define RTCF_NAT       0x00800000
+#define RTCF_DOREDIRECT 0x01000000
+#define RTCF_LOG       0x02000000
+#define RTCF_DIRECTSRC 0x04000000
+
+#define RTF_LOCAL      0x80000000
+#define RTF_INTERFACE  0x40000000
+#define RTF_MULTICAST  0x20000000
+#define RTF_BROADCAST  0x10000000
+#define RTF_NAT                0x08000000
+
+#define RTF_ADDRCLASSMASK      0xF8000000
+#define RT_ADDRCLASS(flags)    ((__u_int32_t) flags >> 23)
+
+#define RT_TOS(tos)            ((tos) & IPTOS_TOS_MASK)
+
+#define RT_LOCALADDR(flags)    ((flags & RTF_ADDRCLASSMASK) \
+                                == (RTF_LOCAL|RTF_INTERFACE))
+
+#define RT_CLASS_UNSPEC                0
+#define RT_CLASS_DEFAULT       253
+
+#define RT_CLASS_MAIN          254
+#define RT_CLASS_LOCAL         255
+#define RT_CLASS_MAX           255
+
+
+#define RTMSG_ACK              NLMSG_ACK
+#define RTMSG_OVERRUN          NLMSG_OVERRUN
+
+#define RTMSG_NEWDEVICE                0x11
+#define RTMSG_DELDEVICE                0x12
+#define RTMSG_NEWROUTE         0x21
+#define RTMSG_DELROUTE         0x22
+#define RTMSG_NEWRULE          0x31
+#define RTMSG_DELRULE          0x32
+#define RTMSG_CONTROL          0x40
+
+#define RTMSG_AR_FAILED                0x51    /* Address Resolution failed.  */
+
+#endif /* net/route.h */
diff --git a/lib/libdss-include/include/netash/ash.h b/lib/libdss-include/include/netash/ash.h
new file mode 100644 (file)
index 0000000..2ce600d
--- /dev/null
@@ -0,0 +1,39 @@
+/* Definitions for use with Linux AF_ASH sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETASH_ASH_H
+#define _NETASH_ASH_H  1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+struct sockaddr_ash
+  {
+    __SOCKADDR_COMMON (sash_);         /* Common data: address family etc.  */
+    int sash_ifindex;                  /* Interface to use.  */
+    unsigned char sash_channel;                /* Realtime or control.  */
+    unsigned int sash_plen;
+    unsigned char sash_prefix[16];
+  };
+
+/* Values for `channel' member.  */
+#define ASH_CHANNEL_ANY                0
+#define ASH_CHANNEL_CONTROL    1
+#define ASH_CHANNEL_REALTIME   2
+
+#endif /* netash/ash.h */
diff --git a/lib/libdss-include/include/netatalk/at.h b/lib/libdss-include/include/netatalk/at.h
new file mode 100644 (file)
index 0000000..34945d8
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETATALK_AT_H
+#define _NETATALK_AT_H 1
+
+#include <asm/types.h>
+#include <bits/sockaddr.h>
+#include <linux/atalk.h>
+#include <sys/socket.h>
+
+#define SOL_ATALK       258     /* sockopt level for atalk */
+
+#endif /* netatalk/at.h */
diff --git a/lib/libdss-include/include/netax25/ax25.h b/lib/libdss-include/include/netax25/ax25.h
new file mode 100644 (file)
index 0000000..13883a0
--- /dev/null
@@ -0,0 +1,170 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETAX25_AX25_H
+#define _NETAX25_AX25_H        1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+/* Setsockoptions(2) level.  Thanks to BSD these must match IPPROTO_xxx.  */
+#define SOL_AX25       257
+
+/* AX.25 flags: */
+#define AX25_WINDOW    1
+#define AX25_T1                2
+#define AX25_T2                5
+#define AX25_T3                4
+#define AX25_N2                3
+#define AX25_BACKOFF   6
+#define AX25_EXTSEQ    7
+#define AX25_PIDINCL   8
+#define AX25_IDLE      9
+#define        AX25_PACLEN     10
+#define AX25_IPMAXQUEUE 11
+#define AX25_IAMDIGI   12
+#define AX25_KILL      99
+
+/* AX.25 socket ioctls: */
+#define SIOCAX25GETUID         (SIOCPROTOPRIVATE)
+#define SIOCAX25ADDUID         (SIOCPROTOPRIVATE+1)
+#define SIOCAX25DELUID         (SIOCPROTOPRIVATE+2)
+#define SIOCAX25NOUID          (SIOCPROTOPRIVATE+3)
+#define SIOCAX25BPQADDR                (SIOCPROTOPRIVATE+4)
+#define SIOCAX25GETPARMS       (SIOCPROTOPRIVATE+5)
+#define SIOCAX25SETPARMS       (SIOCPROTOPRIVATE+6)
+#define SIOCAX25OPTRT          (SIOCPROTOPRIVATE+7)
+#define SIOCAX25CTLCON         (SIOCPROTOPRIVATE+8)
+#define SIOCAX25GETINFO                (SIOCPROTOPRIVATE+9)
+#define SIOCAX25ADDFWD         (SIOCPROTOPRIVATE+10)
+#define SIOCAX25DELFWD         (SIOCPROTOPRIVATE+11)
+
+/* unknown: */
+#define AX25_NOUID_DEFAULT     0
+#define AX25_NOUID_BLOCK       1
+#define AX25_SET_RT_IPMODE     2
+
+/* Digipeating flags: */
+#define AX25_DIGI_INBAND       0x01    /* Allow digipeating within port */
+#define AX25_DIGI_XBAND                0x02    /* Allow digipeating across ports */
+
+/* Maximim number of digipeaters: */
+#define AX25_MAX_DIGIS 8
+
+
+typedef struct
+  {
+    char ax25_call[7];         /* 6 call + SSID (shifted ascii) */
+  }
+ax25_address;
+
+struct sockaddr_ax25
+  {
+    sa_family_t sax25_family;
+    ax25_address sax25_call;
+    int sax25_ndigis;
+  };
+
+/*
+ * The sockaddr struct with the digipeater adresses:
+ */
+struct full_sockaddr_ax25
+  {
+    struct sockaddr_ax25 fsa_ax25;
+    ax25_address fsa_digipeater[AX25_MAX_DIGIS];
+  };
+#define sax25_uid      sax25_ndigis
+
+struct ax25_routes_struct
+  {
+    ax25_address port_addr;
+    ax25_address dest_addr;
+    unsigned char digi_count;
+    ax25_address digi_addr[AX25_MAX_DIGIS];
+  };
+
+/* The AX.25 ioctl structure: */
+struct ax25_ctl_struct
+  {
+    ax25_address port_addr;
+    ax25_address source_addr;
+    ax25_address dest_addr;
+    unsigned int cmd;
+    unsigned long arg;
+    unsigned char digi_count;
+    ax25_address digi_addr[AX25_MAX_DIGIS];
+  };
+
+struct ax25_info_struct
+  {
+    unsigned int  n2, n2count;
+    unsigned int t1, t1timer;
+    unsigned int t2, t2timer;
+    unsigned int t3, t3timer;
+    unsigned int idle, idletimer;
+    unsigned int state;
+    unsigned int rcv_q, snd_q;
+  };
+
+struct ax25_fwd_struct
+  {
+    ax25_address port_from;
+    ax25_address port_to;
+  };
+
+/* AX.25 route structure: */
+struct ax25_route_opt_struct
+  {
+    ax25_address port_addr;
+    ax25_address dest_addr;
+    int cmd;
+    int arg;
+  };
+
+/* AX.25 BPQ stuff: */
+struct ax25_bpqaddr_struct
+  {
+    char dev[16];
+    ax25_address addr;
+  };
+
+/* Definitions for the AX.25 `values' fields: */
+#define        AX25_VALUES_IPDEFMODE   0       /* 'D'=DG 'V'=VC */
+#define        AX25_VALUES_AXDEFMODE   1       /* 8=Normal 128=Extended Seq Nos */
+#define        AX25_VALUES_NETROM      2       /* Allow NET/ROM  - 0=No 1=Yes */
+#define        AX25_VALUES_TEXT        3       /* Allow PID=Text - 0=No 1=Yes */
+#define        AX25_VALUES_BACKOFF     4       /* 'E'=Exponential 'L'=Linear */
+#define        AX25_VALUES_CONMODE     5       /* Allow connected modes - 0=No 1=Yes */
+#define        AX25_VALUES_WINDOW      6       /* Default window size for standard AX.25 */
+#define        AX25_VALUES_EWINDOW     7       /* Default window size for extended AX.25 */
+#define        AX25_VALUES_T1          8       /* Default T1 timeout value */
+#define        AX25_VALUES_T2          9       /* Default T2 timeout value */
+#define        AX25_VALUES_T3          10      /* Default T3 timeout value */
+#define        AX25_VALUES_N2          11      /* Default N2 value */
+#define        AX25_VALUES_DIGI        12      /* Digipeat mode */
+#define AX25_VALUES_IDLE       13      /* mode vc idle timer */
+#define AX25_VALUES_PACLEN     14      /* AX.25 MTU */
+#define AX25_VALUES_IPMAXQUEUE  15     /* Maximum number of buffers enqueued */
+#define        AX25_MAX_VALUES         20
+
+struct ax25_parms_struct
+  {
+    ax25_address port_addr;
+    unsigned short values[AX25_MAX_VALUES];
+  };
+
+#endif /* netax25/ax25.h */
diff --git a/lib/libdss-include/include/netdb.h b/lib/libdss-include/include/netdb.h
new file mode 100644 (file)
index 0000000..3aba530
--- /dev/null
@@ -0,0 +1,715 @@
+  /* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* All data returned by the network data base library are supplied in
+   host order and returned in network order (suitable for use in
+   system calls).  */
+
+#ifndef        _NETDB_H
+#define        _NETDB_H        1
+
+#include <features.h>
+
+#include <netinet/in.h>
+#include <stdint.h>
+#ifdef __USE_MISC
+/* This is necessary to make this include file properly replace the
+   Sun version.  */
+# include <rpc/netdb.h>
+#endif
+
+#ifdef __USE_GNU
+# define __need_sigevent_t
+# include <bits/siginfo.h>
+# define __need_timespec
+# include <time.h>
+#endif
+
+#include <bits/netdb.h>
+
+/* Absolute file name for network data base files.  */
+#define        _PATH_HEQUIV            "/etc/hosts.equiv"
+#define        _PATH_HOSTS             "/etc/hosts"
+#define        _PATH_NETWORKS          "/etc/networks"
+#define        _PATH_NSSWITCH_CONF     "/etc/nsswitch.conf"
+#define        _PATH_PROTOCOLS         "/etc/protocols"
+#define        _PATH_SERVICES          "/etc/services"
+
+
+__BEGIN_DECLS
+
+#if defined __USE_MISC || !defined __USE_XOPEN2K8
+/* Error status for non-reentrant lookup functions.
+   We use a macro to access always the thread-specific `h_errno' variable.  */
+# define h_errno (*__h_errno_location ())
+
+/* Function to get address of global `h_errno' variable.  */
+extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
+
+
+/* Possible values left in `h_errno'.  */
+# define HOST_NOT_FOUND        1       /* Authoritative Answer Host not found.  */
+# define TRY_AGAIN     2       /* Non-Authoritative Host not found,
+                                  or SERVERFAIL.  */
+# define NO_RECOVERY   3       /* Non recoverable errors, FORMERR, REFUSED,
+                                  NOTIMP.  */
+# define NO_DATA       4       /* Valid name, no data record of requested
+                                  type.  */
+#endif
+#ifdef __USE_MISC
+# define NETDB_INTERNAL        -1      /* See errno.  */
+# define NETDB_SUCCESS 0       /* No problem.  */
+# define NO_ADDRESS    NO_DATA /* No address, look for MX record.  */
+#endif
+
+#if defined __USE_XOPEN2K || defined __USE_XOPEN_EXTENDED
+/* Highest reserved Internet port number.  */
+# define IPPORT_RESERVED       1024
+#endif
+
+#ifdef __USE_GNU
+/* Scope delimiter for getaddrinfo(), getnameinfo().  */
+# define SCOPE_DELIMITER       '%'
+#endif
+
+#ifdef __USE_MISC
+/* Print error indicated by `h_errno' variable on standard error.  STR
+   if non-null is printed before the error string.  */
+extern void herror (const char *__str) __THROW;
+
+/* Return string associated with error ERR_NUM.  */
+extern const char *hstrerror (int __err_num) __THROW;
+#endif
+
+
+/* Description of data base entry for a single host.  */
+struct hostent
+{
+  char *h_name;                        /* Official name of host.  */
+  char **h_aliases;            /* Alias list.  */
+  int h_addrtype;              /* Host address type.  */
+  int h_length;                        /* Length of address.  */
+  char **h_addr_list;          /* List of addresses from name server.  */
+#ifdef __USE_MISC
+# define       h_addr  h_addr_list[0] /* Address, for backward compatibility.*/
+#endif
+};
+
+/* Open host data base files and mark them as staying open even after
+   a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void sethostent (int __stay_open);
+
+/* Close host data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endhostent (void);
+
+/* Get next entry from host data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostent (void);
+
+/* Return entry from host data base which address match ADDR with
+   length LEN and type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
+                                     int __type);
+
+/* Return entry from host data base for host with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Return entry from host data base for host with NAME.  AF must be
+   set to the address type which is `AF_INET' for IPv4 or `AF_INET6'
+   for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct hostent *gethostbyname2 (const char *__name, int __af);
+
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int gethostent_r (struct hostent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct hostent **__restrict __result,
+                        int *__restrict __h_errnop);
+
+extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
+                           int __type,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname_r (const char *__restrict __name,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname2_r (const char *__restrict __name, int __af,
+                            struct hostent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct hostent **__restrict __result,
+                            int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Open network data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setnetent (int __stay_open);
+
+/* Close network data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endnetent (void);
+
+/* Get next entry from network data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetent (void);
+
+/* Return entry from network data base which address match NET and
+   type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyaddr (uint32_t __net, int __type);
+
+/* Return entry from network data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getnetent_r (struct netent *__restrict __result_buf,
+                       char *__restrict __buf, size_t __buflen,
+                       struct netent **__restrict __result,
+                       int *__restrict __h_errnop);
+
+extern int getnetbyaddr_r (uint32_t __net, int __type,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+
+extern int getnetbyname_r (const char *__restrict __name,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct servent
+{
+  char *s_name;                        /* Official service name.  */
+  char **s_aliases;            /* Alias list.  */
+  int s_port;                  /* Port number.  */
+  char *s_proto;               /* Protocol to use.  */
+};
+
+/* Open service data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setservent (int __stay_open);
+
+/* Close service data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endservent (void);
+
+/* Get next entry from service data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservent (void);
+
+/* Return entry from network data base for network with NAME and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyname (const char *__name, const char *__proto);
+
+/* Return entry from service data base which matches port PORT and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyport (int __port, const char *__proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getservent_r (struct servent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct servent **__restrict __result);
+
+extern int getservbyname_r (const char *__restrict __name,
+                           const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+
+extern int getservbyport_r (int __port, const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct protoent
+{
+  char *p_name;                        /* Official protocol name.  */
+  char **p_aliases;            /* Alias list.  */
+  int p_proto;                 /* Protocol number.  */
+};
+
+/* Open protocol data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setprotoent (int __stay_open);
+
+/* Close protocol data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endprotoent (void);
+
+/* Get next entry from protocol data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotoent (void);
+
+/* Return entry from protocol data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobyname (const char *__name);
+
+/* Return entry from protocol data base which number is PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobynumber (int __proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getprotoent_r (struct protoent *__restrict __result_buf,
+                         char *__restrict __buf, size_t __buflen,
+                         struct protoent **__restrict __result);
+
+extern int getprotobyname_r (const char *__restrict __name,
+                            struct protoent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct protoent **__restrict __result);
+
+extern int getprotobynumber_r (int __proto,
+                              struct protoent *__restrict __result_buf,
+                              char *__restrict __buf, size_t __buflen,
+                              struct protoent **__restrict __result);
+
+
+/* Establish network group NETGROUP for enumeration.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int setnetgrent (const char *__netgroup);
+
+/* Free all space allocated by previous `setnetgrent' call.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endnetgrent (void);
+
+/* Get next member of netgroup established by last `setnetgrent' call
+   and return pointers to elements in HOSTP, USERP, and DOMAINP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent (char **__restrict __hostp,
+                       char **__restrict __userp,
+                       char **__restrict __domainp);
+
+
+/* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN).
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int innetgr (const char *__netgroup, const char *__host,
+                   const char *__user, const char *__domain);
+
+/* Reentrant version of `getnetgrent' where result is placed in BUFFER.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent_r (char **__restrict __hostp,
+                         char **__restrict __userp,
+                         char **__restrict __domainp,
+                         char *__restrict __buffer, size_t __buflen);
+#endif /* misc */
+
+
+#ifdef __USE_MISC
+/* Call `rshd' at port RPORT on remote machine *AHOST to execute CMD.
+   The local user is LOCUSER, on the remote machine the command is
+   executed as REMUSER.  In *FD2P the descriptor to the socket for the
+   connection is returned.  The caller must have the right to use a
+   reserved port.  When the function returns *AHOST contains the
+   official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
+                const char *__restrict __locuser,
+                const char *__restrict __remuser,
+                const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
+                   const char *__restrict __locuser,
+                   const char *__restrict __remuser,
+                   const char *__restrict __cmd, int *__restrict __fd2p,
+                   sa_family_t __af);
+
+/* Call `rexecd' at port RPORT on remote machine *AHOST to execute
+   CMD.  The process runs at the remote machine using the ID of user
+   NAME whose cleartext password is PASSWD.  In *FD2P the descriptor
+   to the socket for the connection is returned.  When the function
+   returns *AHOST contains the official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec (char **__restrict __ahost, int __rport,
+                 const char *__restrict __name,
+                 const char *__restrict __pass,
+                 const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec_af (char **__restrict __ahost, int __rport,
+                    const char *__restrict __name,
+                    const char *__restrict __pass,
+                    const char *__restrict __cmd, int *__restrict __fd2p,
+                    sa_family_t __af);
+
+/* Check whether user REMUSER on system RHOST is allowed to login as LOCUSER.
+   If SUSER is not zero the user tries to become superuser.  Return 0 if
+   it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok (const char *__rhost, int __suser,
+                   const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok_af (const char *__rhost, int __suser,
+                      const char *__remuser, const char *__locuser,
+                      sa_family_t __af);
+
+/* Check whether user REMUSER on system indicated by IPv4 address
+   RADDR is allowed to login as LOCUSER.  Non-IPv4 (e.g., IPv6) are
+   not supported.  If SUSER is not zero the user tries to become
+   superuser.  Return 0 if it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok (uint32_t __raddr, int __suser,
+                    const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the pfamiliy if the address
+   pointed to by RADDR is determined by the value of AF.  It therefore
+   can be used for IPv6
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok_af (const void *__raddr, int __suser,
+                       const char *__remuser, const char *__locuser,
+                       sa_family_t __af);
+
+/* Try to allocate reserved port, returning a descriptor for a socket opened
+   at this port or -1 if unsuccessful.  The search for an available port
+   will start at ALPORT and continues with lower numbers.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport (int *__alport);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport_af (int *__alport, sa_family_t __af);
+#endif
+
+
+/* Extension from POSIX.1:2001.  */
+#ifdef __USE_XOPEN2K
+/* Structure to contain information about address of a service provider.  */
+struct addrinfo
+{
+  int ai_flags;                        /* Input flags.  */
+  int ai_family;               /* Protocol family for socket.  */
+  int ai_socktype;             /* Socket type.  */
+  int ai_protocol;             /* Protocol for socket.  */
+  socklen_t ai_addrlen;                /* Length of socket address.  */
+  struct sockaddr *ai_addr;    /* Socket address for socket.  */
+  char *ai_canonname;          /* Canonical name for service location.  */
+  struct addrinfo *ai_next;    /* Pointer to next in list.  */
+};
+
+# ifdef __USE_GNU
+/* Structure used as control block for asynchronous lookup.  */
+struct gaicb
+{
+  const char *ar_name;         /* Name to look up.  */
+  const char *ar_service;      /* Service name.  */
+  const struct addrinfo *ar_request; /* Additional request specification.  */
+  struct addrinfo *ar_result;  /* Pointer to result.  */
+  /* The following are internal elements.  */
+  int __return;
+  int __glibc_reserved[5];
+};
+
+/* Lookup mode.  */
+#  define GAI_WAIT     0
+#  define GAI_NOWAIT   1
+# endif
+
+/* Possible values for `ai_flags' field in `addrinfo' structure.  */
+# define AI_PASSIVE    0x0001  /* Socket address is intended for `bind'.  */
+# define AI_CANONNAME  0x0002  /* Request for canonical name.  */
+# define AI_NUMERICHOST        0x0004  /* Don't use name resolution.  */
+# define AI_V4MAPPED   0x0008  /* IPv4 mapped addresses are acceptable.  */
+# define AI_ALL                0x0010  /* Return IPv4 mapped and IPv6 addresses.  */
+# define AI_ADDRCONFIG 0x0020  /* Use configuration of this host to choose
+                                  returned address type..  */
+# ifdef __USE_GNU
+#  define AI_IDN       0x0040  /* IDN encode input (assuming it is encoded
+                                  in the current locale's character set)
+                                  before looking it up. */
+#  define AI_CANONIDN  0x0080  /* Translate canonical name from IDN format. */
+#  define AI_IDN_ALLOW_UNASSIGNED 0x0100 /* Don't reject unassigned Unicode
+                                           code points.  */
+#  define AI_IDN_USE_STD3_ASCII_RULES 0x0200 /* Validate strings according to
+                                               STD3 rules.  */
+# endif
+# define AI_NUMERICSERV        0x0400  /* Don't use name resolution.  */
+
+/* Error values for `getaddrinfo' function.  */
+# define EAI_BADFLAGS    -1    /* Invalid value for `ai_flags' field.  */
+# define EAI_NONAME      -2    /* NAME or SERVICE is unknown.  */
+# define EAI_AGAIN       -3    /* Temporary failure in name resolution.  */
+# define EAI_FAIL        -4    /* Non-recoverable failure in name res.  */
+# define EAI_FAMILY      -6    /* `ai_family' not supported.  */
+# define EAI_SOCKTYPE    -7    /* `ai_socktype' not supported.  */
+# define EAI_SERVICE     -8    /* SERVICE not supported for `ai_socktype'.  */
+# define EAI_MEMORY      -10   /* Memory allocation failure.  */
+# define EAI_SYSTEM      -11   /* System error returned in `errno'.  */
+# define EAI_OVERFLOW    -12   /* Argument buffer overflow.  */
+# ifdef __USE_GNU
+#  define EAI_NODATA     -5    /* No address associated with NAME.  */
+#  define EAI_ADDRFAMILY  -9   /* Address family for NAME not supported.  */
+#  define EAI_INPROGRESS  -100 /* Processing request in progress.  */
+#  define EAI_CANCELED   -101  /* Request canceled.  */
+#  define EAI_NOTCANCELED -102 /* Request not canceled.  */
+#  define EAI_ALLDONE    -103  /* All requests done.  */
+#  define EAI_INTR       -104  /* Interrupted by a signal.  */
+#  define EAI_IDN_ENCODE  -105 /* IDN encoding failed.  */
+# endif
+
+# ifdef __USE_MISC
+#  define NI_MAXHOST      1025
+#  define NI_MAXSERV      32
+# endif
+
+# define NI_NUMERICHOST        1       /* Don't try to look up hostname.  */
+# define NI_NUMERICSERV 2      /* Don't convert port number to name.  */
+# define NI_NOFQDN     4       /* Only return nodename portion.  */
+# define NI_NAMEREQD   8       /* Don't return numeric addresses.  */
+# define NI_DGRAM      16      /* Look up UDP service rather than TCP.  */
+# ifdef __USE_GNU
+#  define NI_IDN       32      /* Convert name from IDN format.  */
+#  define NI_IDN_ALLOW_UNASSIGNED 64 /* Don't reject unassigned Unicode
+                                       code points.  */
+#  define NI_IDN_USE_STD3_ASCII_RULES 128 /* Validate strings according to
+                                            STD3 rules.  */
+# endif
+
+/* Translate name of a service location and/or a service name to set of
+   socket addresses.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getaddrinfo (const char *__restrict __name,
+                       const char *__restrict __service,
+                       const struct addrinfo *__restrict __req,
+                       struct addrinfo **__restrict __pai);
+
+/* Free `addrinfo' structure AI including associated storage.  */
+extern void freeaddrinfo (struct addrinfo *__ai) __THROW;
+
+/* Convert error return from getaddrinfo() to a string.  */
+extern const char *gai_strerror (int __ecode) __THROW;
+
+/* Translate a socket address to a location and service name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getnameinfo (const struct sockaddr *__restrict __sa,
+                       socklen_t __salen, char *__restrict __host,
+                       socklen_t __hostlen, char *__restrict __serv,
+                       socklen_t __servlen, int __flags);
+#endif /* POSIX */
+
+#ifdef __USE_GNU
+/* Enqueue ENT requests from the LIST.  If MODE is GAI_WAIT wait until all
+   requests are handled.  If WAIT is GAI_NOWAIT return immediately after
+   queueing the requests and signal completion according to SIG.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
+                         int __ent, struct sigevent *__restrict __sig);
+
+/* Suspend execution of the thread until at least one of the ENT requests
+   in LIST is handled.  If TIMEOUT is not a null pointer it specifies the
+   longest time the function keeps waiting before returning with an error.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int gai_suspend (const struct gaicb *const __list[], int __ent,
+                       const struct timespec *__timeout);
+
+/* Get the error status of the request REQ.  */
+extern int gai_error (struct gaicb *__req) __THROW;
+
+/* Cancel the requests associated with GAICBP.  */
+extern int gai_cancel (struct gaicb *__gaicbp) __THROW;
+#endif /* GNU */
+
+__END_DECLS
+
+#endif /* netdb.h */
diff --git a/lib/libdss-include/include/neteconet/ec.h b/lib/libdss-include/include/neteconet/ec.h
new file mode 100644 (file)
index 0000000..990f935
--- /dev/null
@@ -0,0 +1,51 @@
+/* Definitions for use with Linux AF_ECONET sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETECONET_EC_H
+#define _NETECONET_EC_H        1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+struct ec_addr
+  {
+    unsigned char station;             /* Station number.  */
+    unsigned char net;                 /* Network number.  */
+  };
+
+struct sockaddr_ec
+  {
+    __SOCKADDR_COMMON (sec_);
+    unsigned char port;                        /* Port number.  */
+    unsigned char cb;                  /* Control/flag byte.  */
+    unsigned char type;                        /* Type of message.  */
+    struct ec_addr addr;
+    unsigned long cookie;
+  };
+
+#define ECTYPE_PACKET_RECEIVED         0       /* Packet received */
+#define ECTYPE_TRANSMIT_STATUS         0x10    /* Transmit completed */
+
+#define ECTYPE_TRANSMIT_OK             1
+#define ECTYPE_TRANSMIT_NOT_LISTENING  2
+#define ECTYPE_TRANSMIT_NET_ERROR      3
+#define ECTYPE_TRANSMIT_NO_CLOCK       4
+#define ECTYPE_TRANSMIT_LINE_JAMMED    5
+#define ECTYPE_TRANSMIT_NOT_PRESENT    6
+
+#endif
diff --git a/lib/libdss-include/include/netinet/ether.h b/lib/libdss-include/include/netinet/ether.h
new file mode 100644 (file)
index 0000000..3dff523
--- /dev/null
@@ -0,0 +1,53 @@
+/* Functions for storing Ethernet addresses in ASCII and mapping to hostnames.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_ETHER_H
+#define _NETINET_ETHER_H       1
+
+#include <features.h>
+
+/* Get definition of `struct ether_addr'.  */
+#include <netinet/if_ether.h>
+
+__BEGIN_DECLS
+
+/* Convert 48 bit Ethernet ADDRess to ASCII.  */
+extern char *ether_ntoa (const struct ether_addr *__addr) __THROW;
+extern char *ether_ntoa_r (const struct ether_addr *__addr, char *__buf)
+     __THROW;
+
+/* Convert ASCII string S to 48 bit Ethernet address.  */
+extern struct ether_addr *ether_aton (const char *__asc) __THROW;
+extern struct ether_addr *ether_aton_r (const char *__asc,
+                                       struct ether_addr *__addr) __THROW;
+
+/* Map 48 bit Ethernet number ADDR to HOSTNAME.  */
+extern int ether_ntohost (char *__hostname, const struct ether_addr *__addr)
+     __THROW;
+
+/* Map HOSTNAME to 48 bit Ethernet address.  */
+extern int ether_hostton (const char *__hostname, struct ether_addr *__addr)
+     __THROW;
+
+/* Scan LINE and set ADDR and HOSTNAME.  */
+extern int ether_line (const char *__line, struct ether_addr *__addr,
+                      char *__hostname) __THROW;
+
+__END_DECLS
+
+#endif /* netinet/ether.h */
diff --git a/lib/libdss-include/include/netinet/icmp6.h b/lib/libdss-include/include/netinet/icmp6.h
new file mode 100644 (file)
index 0000000..b7a9637
--- /dev/null
@@ -0,0 +1,345 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_ICMP6_H
+#define _NETINET_ICMP6_H 1
+
+#include <inttypes.h>
+#include <string.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#define ICMP6_FILTER 1
+
+#define ICMP6_FILTER_BLOCK             1
+#define ICMP6_FILTER_PASS              2
+#define ICMP6_FILTER_BLOCKOTHERS       3
+#define ICMP6_FILTER_PASSONLY          4
+
+struct icmp6_filter
+  {
+    uint32_t icmp6_filt[8];
+  };
+
+struct icmp6_hdr
+  {
+    uint8_t     icmp6_type;   /* type field */
+    uint8_t     icmp6_code;   /* code field */
+    uint16_t    icmp6_cksum;  /* checksum field */
+    union
+      {
+       uint32_t  icmp6_un_data32[1]; /* type-specific field */
+       uint16_t  icmp6_un_data16[2]; /* type-specific field */
+       uint8_t   icmp6_un_data8[4];  /* type-specific field */
+      } icmp6_dataun;
+  };
+
+#define icmp6_data32    icmp6_dataun.icmp6_un_data32
+#define icmp6_data16    icmp6_dataun.icmp6_un_data16
+#define icmp6_data8     icmp6_dataun.icmp6_un_data8
+#define icmp6_pptr      icmp6_data32[0]  /* parameter prob */
+#define icmp6_mtu       icmp6_data32[0]  /* packet too big */
+#define icmp6_id        icmp6_data16[0]  /* echo request/reply */
+#define icmp6_seq       icmp6_data16[1]  /* echo request/reply */
+#define icmp6_maxdelay  icmp6_data16[0]  /* mcast group membership */
+
+#define ICMP6_DST_UNREACH             1
+#define ICMP6_PACKET_TOO_BIG          2
+#define ICMP6_TIME_EXCEEDED           3
+#define ICMP6_PARAM_PROB              4
+
+#define ICMP6_INFOMSG_MASK  0x80    /* all informational messages */
+
+#define ICMP6_ECHO_REQUEST          128
+#define ICMP6_ECHO_REPLY            129
+#define MLD_LISTENER_QUERY          130
+#define MLD_LISTENER_REPORT         131
+#define MLD_LISTENER_REDUCTION      132
+
+#define ICMP6_DST_UNREACH_NOROUTE     0 /* no route to destination */
+#define ICMP6_DST_UNREACH_ADMIN       1 /* communication with destination */
+                                        /* administratively prohibited */
+#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */
+#define ICMP6_DST_UNREACH_ADDR        3 /* address unreachable */
+#define ICMP6_DST_UNREACH_NOPORT      4 /* bad port */
+
+#define ICMP6_TIME_EXCEED_TRANSIT     0 /* Hop Limit == 0 in transit */
+#define ICMP6_TIME_EXCEED_REASSEMBLY  1 /* Reassembly time out */
+
+#define ICMP6_PARAMPROB_HEADER        0 /* erroneous header field */
+#define ICMP6_PARAMPROB_NEXTHEADER    1 /* unrecognized Next Header */
+#define ICMP6_PARAMPROB_OPTION        2 /* unrecognized IPv6 option */
+
+#define ICMP6_FILTER_WILLPASS(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+
+#define ICMP6_FILTER_WILLBLOCK(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+
+#define ICMP6_FILTER_SETPASS(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))))
+
+#define ICMP6_FILTER_SETBLOCK(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) |=  (1 << ((type) & 31))))
+
+#define ICMP6_FILTER_SETPASSALL(filterp) \
+       memset (filterp, 0, sizeof (struct icmp6_filter));
+
+#define ICMP6_FILTER_SETBLOCKALL(filterp) \
+       memset (filterp, 0xFF, sizeof (struct icmp6_filter));
+
+#define ND_ROUTER_SOLICIT           133
+#define ND_ROUTER_ADVERT            134
+#define ND_NEIGHBOR_SOLICIT         135
+#define ND_NEIGHBOR_ADVERT          136
+#define ND_REDIRECT                 137
+
+struct nd_router_solicit      /* router solicitation */
+  {
+    struct icmp6_hdr  nd_rs_hdr;
+    /* could be followed by options */
+  };
+
+#define nd_rs_type               nd_rs_hdr.icmp6_type
+#define nd_rs_code               nd_rs_hdr.icmp6_code
+#define nd_rs_cksum              nd_rs_hdr.icmp6_cksum
+#define nd_rs_reserved           nd_rs_hdr.icmp6_data32[0]
+
+struct nd_router_advert       /* router advertisement */
+  {
+    struct icmp6_hdr  nd_ra_hdr;
+    uint32_t   nd_ra_reachable;   /* reachable time */
+    uint32_t   nd_ra_retransmit;  /* retransmit timer */
+    /* could be followed by options */
+  };
+
+#define nd_ra_type               nd_ra_hdr.icmp6_type
+#define nd_ra_code               nd_ra_hdr.icmp6_code
+#define nd_ra_cksum              nd_ra_hdr.icmp6_cksum
+#define nd_ra_curhoplimit        nd_ra_hdr.icmp6_data8[0]
+#define nd_ra_flags_reserved     nd_ra_hdr.icmp6_data8[1]
+#define ND_RA_FLAG_MANAGED       0x80
+#define ND_RA_FLAG_OTHER         0x40
+#define ND_RA_FLAG_HOME_AGENT    0x20
+#define nd_ra_router_lifetime    nd_ra_hdr.icmp6_data16[1]
+
+struct nd_neighbor_solicit    /* neighbor solicitation */
+  {
+    struct icmp6_hdr  nd_ns_hdr;
+    struct in6_addr   nd_ns_target; /* target address */
+    /* could be followed by options */
+  };
+
+#define nd_ns_type               nd_ns_hdr.icmp6_type
+#define nd_ns_code               nd_ns_hdr.icmp6_code
+#define nd_ns_cksum              nd_ns_hdr.icmp6_cksum
+#define nd_ns_reserved           nd_ns_hdr.icmp6_data32[0]
+
+struct nd_neighbor_advert     /* neighbor advertisement */
+  {
+    struct icmp6_hdr  nd_na_hdr;
+    struct in6_addr   nd_na_target; /* target address */
+    /* could be followed by options */
+  };
+
+#define nd_na_type               nd_na_hdr.icmp6_type
+#define nd_na_code               nd_na_hdr.icmp6_code
+#define nd_na_cksum              nd_na_hdr.icmp6_cksum
+#define nd_na_flags_reserved     nd_na_hdr.icmp6_data32[0]
+#if     BYTE_ORDER == BIG_ENDIAN
+#define ND_NA_FLAG_ROUTER        0x80000000
+#define ND_NA_FLAG_SOLICITED     0x40000000
+#define ND_NA_FLAG_OVERRIDE      0x20000000
+#else   /* BYTE_ORDER == LITTLE_ENDIAN */
+#define ND_NA_FLAG_ROUTER        0x00000080
+#define ND_NA_FLAG_SOLICITED     0x00000040
+#define ND_NA_FLAG_OVERRIDE      0x00000020
+#endif
+
+struct nd_redirect            /* redirect */
+  {
+    struct icmp6_hdr  nd_rd_hdr;
+    struct in6_addr   nd_rd_target; /* target address */
+    struct in6_addr   nd_rd_dst;    /* destination address */
+    /* could be followed by options */
+  };
+
+#define nd_rd_type               nd_rd_hdr.icmp6_type
+#define nd_rd_code               nd_rd_hdr.icmp6_code
+#define nd_rd_cksum              nd_rd_hdr.icmp6_cksum
+#define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]
+
+struct nd_opt_hdr             /* Neighbor discovery option header */
+  {
+    uint8_t  nd_opt_type;
+    uint8_t  nd_opt_len;        /* in units of 8 octets */
+    /* followed by option specific data */
+  };
+
+#define ND_OPT_SOURCE_LINKADDR         1
+#define ND_OPT_TARGET_LINKADDR         2
+#define ND_OPT_PREFIX_INFORMATION      3
+#define ND_OPT_REDIRECTED_HEADER       4
+#define ND_OPT_MTU                     5
+#define ND_OPT_RTR_ADV_INTERVAL                7
+#define ND_OPT_HOME_AGENT_INFO         8
+
+struct nd_opt_prefix_info     /* prefix information */
+  {
+    uint8_t   nd_opt_pi_type;
+    uint8_t   nd_opt_pi_len;
+    uint8_t   nd_opt_pi_prefix_len;
+    uint8_t   nd_opt_pi_flags_reserved;
+    uint32_t  nd_opt_pi_valid_time;
+    uint32_t  nd_opt_pi_preferred_time;
+    uint32_t  nd_opt_pi_reserved2;
+    struct in6_addr  nd_opt_pi_prefix;
+  };
+
+#define ND_OPT_PI_FLAG_ONLINK  0x80
+#define ND_OPT_PI_FLAG_AUTO    0x40
+#define ND_OPT_PI_FLAG_RADDR   0x20
+
+struct nd_opt_rd_hdr          /* redirected header */
+  {
+    uint8_t   nd_opt_rh_type;
+    uint8_t   nd_opt_rh_len;
+    uint16_t  nd_opt_rh_reserved1;
+    uint32_t  nd_opt_rh_reserved2;
+    /* followed by IP header and data */
+  };
+
+struct nd_opt_mtu             /* MTU option */
+  {
+    uint8_t   nd_opt_mtu_type;
+    uint8_t   nd_opt_mtu_len;
+    uint16_t  nd_opt_mtu_reserved;
+    uint32_t  nd_opt_mtu_mtu;
+  };
+
+struct mld_hdr
+  {
+    struct icmp6_hdr    mld_icmp6_hdr;
+    struct in6_addr     mld_addr; /* multicast address */
+  };
+
+#define mld_type        mld_icmp6_hdr.icmp6_type
+#define mld_code        mld_icmp6_hdr.icmp6_code
+#define mld_cksum       mld_icmp6_hdr.icmp6_cksum
+#define mld_maxdelay    mld_icmp6_hdr.icmp6_data16[0]
+#define mld_reserved    mld_icmp6_hdr.icmp6_data16[1]
+
+#define ICMP6_ROUTER_RENUMBERING    138
+
+struct icmp6_router_renum    /* router renumbering header */
+  {
+    struct icmp6_hdr    rr_hdr;
+    uint8_t             rr_segnum;
+    uint8_t             rr_flags;
+    uint16_t            rr_maxdelay;
+    uint32_t            rr_reserved;
+  };
+
+#define rr_type                rr_hdr.icmp6_type
+#define rr_code         rr_hdr.icmp6_code
+#define rr_cksum        rr_hdr.icmp6_cksum
+#define rr_seqnum       rr_hdr.icmp6_data32[0]
+
+/* Router renumbering flags */
+#define ICMP6_RR_FLAGS_TEST             0x80
+#define ICMP6_RR_FLAGS_REQRESULT        0x40
+#define ICMP6_RR_FLAGS_FORCEAPPLY       0x20
+#define ICMP6_RR_FLAGS_SPECSITE         0x10
+#define ICMP6_RR_FLAGS_PREVDONE         0x08
+
+struct rr_pco_match    /* match prefix part */
+  {
+    uint8_t             rpm_code;
+    uint8_t             rpm_len;
+    uint8_t             rpm_ordinal;
+    uint8_t             rpm_matchlen;
+    uint8_t             rpm_minlen;
+    uint8_t             rpm_maxlen;
+    uint16_t            rpm_reserved;
+    struct in6_addr     rpm_prefix;
+  };
+
+/* PCO code values */
+#define RPM_PCO_ADD             1
+#define RPM_PCO_CHANGE          2
+#define RPM_PCO_SETGLOBAL       3
+
+struct rr_pco_use      /* use prefix part */
+  {
+    uint8_t             rpu_uselen;
+    uint8_t             rpu_keeplen;
+    uint8_t             rpu_ramask;
+    uint8_t             rpu_raflags;
+    uint32_t            rpu_vltime;
+    uint32_t            rpu_pltime;
+    uint32_t            rpu_flags;
+    struct in6_addr     rpu_prefix;
+  };
+
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK  0x20
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO    0x10
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000
+# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000
+#elif BYTE_ORDER == LITTLE_ENDIAN
+# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80
+# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40
+#endif
+
+struct rr_result       /* router renumbering result message */
+  {
+    uint16_t            rrr_flags;
+    uint8_t             rrr_ordinal;
+    uint8_t             rrr_matchedlen;
+    uint32_t            rrr_ifid;
+    struct in6_addr     rrr_prefix;
+  };
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define ICMP6_RR_RESULT_FLAGS_OOB       0x0002
+# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001
+#elif BYTE_ORDER == LITTLE_ENDIAN
+# define ICMP6_RR_RESULT_FLAGS_OOB       0x0200
+# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100
+#endif
+
+/* Mobile IPv6 extension: Advertisement Interval.  */
+struct nd_opt_adv_interval
+  {
+    uint8_t   nd_opt_adv_interval_type;
+    uint8_t   nd_opt_adv_interval_len;
+    uint16_t  nd_opt_adv_interval_reserved;
+    uint32_t  nd_opt_adv_interval_ival;
+  };
+
+/* Mobile IPv6 extension: Home Agent Info.  */
+struct nd_opt_home_agent_info
+  {
+    uint8_t   nd_opt_home_agent_info_type;
+    uint8_t   nd_opt_home_agent_info_len;
+    uint16_t  nd_opt_home_agent_info_reserved;
+    uint16_t  nd_opt_home_agent_info_preference;
+    uint16_t  nd_opt_home_agent_info_lifetime;
+  };
+
+#endif /* netinet/icmpv6.h */
diff --git a/lib/libdss-include/include/netinet/if_ether.h b/lib/libdss-include/include/netinet/if_ether.h
new file mode 100644 (file)
index 0000000..e9ed137
--- /dev/null
@@ -0,0 +1,104 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IF_ETHER_H
+
+#define __NETINET_IF_ETHER_H   1
+#include <features.h>
+#include <sys/types.h>
+
+/* Get definitions from kernel header file.  */
+#include <linux/if_ether.h>
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)if_ether.h  8.3 (Berkeley) 5/2/95
+ *     $FreeBSD$
+ */
+
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+
+__BEGIN_DECLS
+/*
+ * Ethernet Address Resolution Protocol.
+ *
+ * See RFC 826 for protocol description.  Structure below is adapted
+ * to resolving internet addresses.  Field names used correspond to
+ * RFC 826.
+ */
+struct ether_arp {
+       struct  arphdr ea_hdr;          /* fixed-size header */
+       u_int8_t arp_sha[ETH_ALEN];     /* sender hardware address */
+       u_int8_t arp_spa[4];            /* sender protocol address */
+       u_int8_t arp_tha[ETH_ALEN];     /* target hardware address */
+       u_int8_t arp_tpa[4];            /* target protocol address */
+};
+#define        arp_hrd ea_hdr.ar_hrd
+#define        arp_pro ea_hdr.ar_pro
+#define        arp_hln ea_hdr.ar_hln
+#define        arp_pln ea_hdr.ar_pln
+#define        arp_op  ea_hdr.ar_op
+
+/*
+ * Macro to map an IP multicast address to an Ethernet multicast address.
+ * The high-order 25 bits of the Ethernet address are statically assigned,
+ * and the low-order 23 bits are taken from the low end of the IP address.
+ */
+#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \
+       /* struct in_addr *ipaddr; */ \
+       /* u_char enaddr[ETH_ALEN];        */ \
+{ \
+       (enaddr)[0] = 0x01; \
+       (enaddr)[1] = 0x00; \
+       (enaddr)[2] = 0x5e; \
+       (enaddr)[3] = ((u_int8_t *)ipaddr)[1] & 0x7f; \
+       (enaddr)[4] = ((u_int8_t *)ipaddr)[2]; \
+       (enaddr)[5] = ((u_int8_t *)ipaddr)[3]; \
+}
+
+__END_DECLS
+#endif /* __USE_MISC */
+
+#endif /* netinet/if_ether.h */
diff --git a/lib/libdss-include/include/netinet/if_fddi.h b/lib/libdss-include/include/netinet/if_fddi.h
new file mode 100644 (file)
index 0000000..6e0ab37
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IF_FDDI_H
+#define        _NETINET_IF_FDDI_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <asm/types.h>
+
+#include <linux/if_fddi.h>
+
+#ifdef __USE_MISC
+
+struct fddi_header {
+  u_int8_t fddi_fc;                    /* Frame Control (FC) value */
+  u_int8_t fddi_dhost[FDDI_K_ALEN];    /* Destination host */
+  u_int8_t fddi_shost[FDDI_K_ALEN];    /* Source host */
+};
+#endif
+
+#endif /* netinet/if_fddi.h */
diff --git a/lib/libdss-include/include/netinet/if_tr.h b/lib/libdss-include/include/netinet/if_tr.h
new file mode 100644 (file)
index 0000000..c203d11
--- /dev/null
@@ -0,0 +1,110 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IF_TR_H
+#define        _NETINET_IF_TR_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+/* IEEE 802.5 Token-Ring magic constants.  The frame sizes omit the preamble
+   and FCS/CRC (frame check sequence). */
+#define TR_ALEN                6               /* Octets in one token-ring addr */
+#define TR_HLEN        (sizeof (struct trh_hdr) + sizeof (struct trllc))
+#define AC             0x10
+#define LLC_FRAME      0x40
+
+/* LLC and SNAP constants */
+#define EXTENDED_SAP   0xAA
+#define UI_CMD         0x03
+
+/* This is an Token-Ring frame header. */
+struct trh_hdr
+{
+  u_int8_t  ac;                        /* access control field */
+  u_int8_t  fc;                        /* frame control field */
+  u_int8_t  daddr[TR_ALEN];    /* destination address */
+  u_int8_t  saddr[TR_ALEN];    /* source address */
+  u_int16_t rcf;               /* route control field */
+  u_int16_t rseg[8];           /* routing registers */
+};
+
+/* This is an Token-Ring LLC structure */
+struct trllc
+{
+  u_int8_t  dsap;              /* destination SAP */
+  u_int8_t  ssap;              /* source SAP */
+  u_int8_t  llc;               /* LLC control field */
+  u_int8_t  protid[3];         /* protocol id */
+  u_int16_t ethertype;         /* ether type field */
+};
+
+/* Token-Ring statistics collection data. */
+struct tr_statistics
+{
+  unsigned long rx_packets;     /* total packets received      */
+  unsigned long tx_packets;    /* total packets transmitted    */
+  unsigned long rx_bytes;      /* total bytes received         */
+  unsigned long tx_bytes;      /* total bytes transmitted      */
+  unsigned long rx_errors;     /* bad packets received         */
+  unsigned long tx_errors;     /* packet transmit problems     */
+  unsigned long rx_dropped;    /* no space in linux buffers    */
+  unsigned long tx_dropped;    /* no space available in linux  */
+  unsigned long multicast;     /* multicast packets received   */
+  unsigned long transmit_collision;
+
+  /* detailed Token-Ring errors. See IBM Token-Ring Network
+     Architecture for more info */
+
+  unsigned long line_errors;
+  unsigned long internal_errors;
+  unsigned long burst_errors;
+  unsigned long A_C_errors;
+  unsigned long abort_delimiters;
+  unsigned long lost_frames;
+  unsigned long recv_congest_count;
+  unsigned long frame_copied_errors;
+  unsigned long frequency_errors;
+  unsigned long token_errors;
+  unsigned long dummy1;
+};
+
+/* source routing stuff */
+#define TR_RII                         0x80
+#define TR_RCF_DIR_BIT                 0x80
+#define TR_RCF_LEN_MASK        0x1f00
+#define TR_RCF_BROADCAST       0x8000  /* all-routes broadcast */
+#define TR_RCF_LIMITED_BROADCAST 0xC000        /* single-route broadcast */
+#define TR_RCF_FRAME2K                 0x20
+#define TR_RCF_BROADCAST_MASK  0xC000
+#define TR_MAXRIFLEN           18
+
+#ifdef __USE_MISC
+
+struct trn_hdr
+{
+  u_int8_t trn_ac;                /* access control field */
+  u_int8_t trn_fc;                /* field control field */
+  u_int8_t trn_dhost[TR_ALEN];    /* destination host */
+  u_int8_t trn_shost[TR_ALEN];    /* source host */
+  u_int16_t trn_rcf;              /* route control field */
+  u_int16_t trn_rseg[8];          /* routing registers */
+};
+
+#endif
+
+#endif /* netinet/if_tr.h */
diff --git a/lib/libdss-include/include/netinet/igmp.h b/lib/libdss-include/include/netinet/igmp.h
new file mode 100644 (file)
index 0000000..fc7599e
--- /dev/null
@@ -0,0 +1,125 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IGMP_H
+#define        _NETINET_IGMP_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#ifdef __USE_MISC
+
+#include <netinet/in.h>
+
+__BEGIN_DECLS
+
+/*
+ * Copyright (c) 1988 Stephen Deering.
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Stephen Deering of Stanford University.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)igmp.h      8.1 (Berkeley) 6/10/93
+ *     $FreeBSD$
+ */
+
+struct igmp {
+  u_int8_t igmp_type;             /* IGMP type */
+  u_int8_t igmp_code;             /* routing code */
+  u_int16_t igmp_cksum;           /* checksum */
+  struct in_addr igmp_group;      /* group address */
+};
+
+#define IGMP_MINLEN                    8
+
+/*
+ * Message types, including version number.
+ */
+#define IGMP_MEMBERSHIP_QUERY          0x11    /* membership query         */
+#define IGMP_V1_MEMBERSHIP_REPORT      0x12    /* Ver. 1 membership report */
+#define IGMP_V2_MEMBERSHIP_REPORT      0x16    /* Ver. 2 membership report */
+#define IGMP_V2_LEAVE_GROUP            0x17    /* Leave-group message      */
+
+#define IGMP_DVMRP                     0x13    /* DVMRP routing message    */
+#define IGMP_PIM                       0x14    /* PIM routing message      */
+#define IGMP_TRACE                     0x15
+
+#define IGMP_MTRACE_RESP               0x1e    /* traceroute resp.(to sender)*/
+#define IGMP_MTRACE                    0x1f    /* mcast traceroute messages  */
+
+#define IGMP_MAX_HOST_REPORT_DELAY     10      /* max delay for response to     */
+                                               /*  query (in seconds) according */
+                                               /*  to RFC1112                   */
+#define IGMP_TIMER_SCALE               10      /* denotes that the igmp code field */
+                                               /* specifies time in 10th of seconds*/
+
+/*
+ * States for the IGMP v2 state table.
+ */
+#define IGMP_DELAYING_MEMBER   1
+#define IGMP_IDLE_MEMBER       2
+#define IGMP_LAZY_MEMBER       3
+#define IGMP_SLEEPING_MEMBER   4
+#define IGMP_AWAKENING_MEMBER  5
+
+/*
+ * States for IGMP router version cache.
+ */
+#define IGMP_v1_ROUTER         1
+#define IGMP_v2_ROUTER         2
+
+/*
+ * The following four defininitions are for backwards compatibility.
+ * They should be removed as soon as all applications are updated to
+ * use the new constant names.
+ */
+#define IGMP_HOST_MEMBERSHIP_QUERY     IGMP_MEMBERSHIP_QUERY
+#define IGMP_HOST_MEMBERSHIP_REPORT    IGMP_V1_MEMBERSHIP_REPORT
+#define IGMP_HOST_NEW_MEMBERSHIP_REPORT        IGMP_V2_MEMBERSHIP_REPORT
+#define IGMP_HOST_LEAVE_MESSAGE                IGMP_V2_LEAVE_GROUP
+
+__END_DECLS
+
+#endif
+
+#endif /* netinet/igmp.h */
diff --git a/lib/libdss-include/include/netinet/in.h b/lib/libdss-include/include/netinet/in.h
new file mode 100644 (file)
index 0000000..6122ab5
--- /dev/null
@@ -0,0 +1,633 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _NETINET_IN_H
+#define        _NETINET_IN_H   1
+
+#include <features.h>
+#include <stdint.h>
+#include <sys/socket.h>
+#include <bits/types.h>
+
+
+__BEGIN_DECLS
+
+/* Internet address.  */
+typedef uint32_t in_addr_t;
+struct in_addr
+  {
+    in_addr_t s_addr;
+  };
+
+/* Get system-specific definitions.  */
+#include <bits/in.h>
+
+/* Standard well-defined IP protocols.  */
+enum
+  {
+    IPPROTO_IP = 0,       /* Dummy protocol for TCP.  */
+#define IPPROTO_IP             IPPROTO_IP
+    IPPROTO_ICMP = 1,     /* Internet Control Message Protocol.  */
+#define IPPROTO_ICMP           IPPROTO_ICMP
+    IPPROTO_IGMP = 2,     /* Internet Group Management Protocol. */
+#define IPPROTO_IGMP           IPPROTO_IGMP
+    IPPROTO_IPIP = 4,     /* IPIP tunnels (older KA9Q tunnels use 94).  */
+#define IPPROTO_IPIP           IPPROTO_IPIP
+    IPPROTO_TCP = 6,      /* Transmission Control Protocol.  */
+#define IPPROTO_TCP            IPPROTO_TCP
+    IPPROTO_EGP = 8,      /* Exterior Gateway Protocol.  */
+#define IPPROTO_EGP            IPPROTO_EGP
+    IPPROTO_PUP = 12,     /* PUP protocol.  */
+#define IPPROTO_PUP            IPPROTO_PUP
+    IPPROTO_UDP = 17,     /* User Datagram Protocol.  */
+#define IPPROTO_UDP            IPPROTO_UDP
+    IPPROTO_IDP = 22,     /* XNS IDP protocol.  */
+#define IPPROTO_IDP            IPPROTO_IDP
+    IPPROTO_TP = 29,      /* SO Transport Protocol Class 4.  */
+#define IPPROTO_TP             IPPROTO_TP
+    IPPROTO_DCCP = 33,    /* Datagram Congestion Control Protocol.  */
+#define IPPROTO_DCCP           IPPROTO_DCCP
+    IPPROTO_IPV6 = 41,     /* IPv6 header.  */
+#define IPPROTO_IPV6           IPPROTO_IPV6
+    IPPROTO_RSVP = 46,    /* Reservation Protocol.  */
+#define IPPROTO_RSVP           IPPROTO_RSVP
+    IPPROTO_GRE = 47,     /* General Routing Encapsulation.  */
+#define IPPROTO_GRE            IPPROTO_GRE
+    IPPROTO_ESP = 50,      /* encapsulating security payload.  */
+#define IPPROTO_ESP            IPPROTO_ESP
+    IPPROTO_AH = 51,       /* authentication header.  */
+#define IPPROTO_AH             IPPROTO_AH
+    IPPROTO_MTP = 92,     /* Multicast Transport Protocol.  */
+#define IPPROTO_MTP            IPPROTO_MTP
+    IPPROTO_BEETPH = 94,   /* IP option pseudo header for BEET.  */
+#define IPPROTO_BEETPH         IPPROTO_BEETPH
+    IPPROTO_ENCAP = 98,           /* Encapsulation Header.  */
+#define IPPROTO_ENCAP          IPPROTO_ENCAP
+    IPPROTO_PIM = 103,    /* Protocol Independent Multicast.  */
+#define IPPROTO_PIM            IPPROTO_PIM
+    IPPROTO_COMP = 108,           /* Compression Header Protocol.  */
+#define IPPROTO_COMP           IPPROTO_COMP
+    IPPROTO_SCTP = 132,           /* Stream Control Transmission Protocol.  */
+#define IPPROTO_SCTP           IPPROTO_SCTP
+    IPPROTO_UDPLITE = 136, /* UDP-Lite protocol.  */
+#define IPPROTO_UDPLITE                IPPROTO_UDPLITE
+    IPPROTO_MPLS = 137,    /* MPLS in IP.  */
+#define IPPROTO_MPLS           IPPROTO_MPLS
+    IPPROTO_RAW = 255,    /* Raw IP packets.  */
+#define IPPROTO_RAW            IPPROTO_RAW
+    IPPROTO_MAX
+  };
+
+/* If __USE_KERNEL_IPV6_DEFS is defined then the user has included the kernel
+   network headers first and we should use those ABI-identical definitions
+   instead of our own.  */
+#ifndef __USE_KERNEL_IPV6_DEFS
+enum
+  {
+    IPPROTO_HOPOPTS = 0,   /* IPv6 Hop-by-Hop options.  */
+#define IPPROTO_HOPOPTS                IPPROTO_HOPOPTS
+    IPPROTO_ROUTING = 43,  /* IPv6 routing header.  */
+#define IPPROTO_ROUTING                IPPROTO_ROUTING
+    IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header.  */
+#define IPPROTO_FRAGMENT       IPPROTO_FRAGMENT
+    IPPROTO_ICMPV6 = 58,   /* ICMPv6.  */
+#define IPPROTO_ICMPV6         IPPROTO_ICMPV6
+    IPPROTO_NONE = 59,     /* IPv6 no next header.  */
+#define IPPROTO_NONE           IPPROTO_NONE
+    IPPROTO_DSTOPTS = 60,  /* IPv6 destination options.  */
+#define IPPROTO_DSTOPTS                IPPROTO_DSTOPTS
+    IPPROTO_MH = 135       /* IPv6 mobility header.  */
+#define IPPROTO_MH             IPPROTO_MH
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+/* Type to represent a port.  */
+typedef uint16_t in_port_t;
+
+/* Standard well-known ports.  */
+enum
+  {
+    IPPORT_ECHO = 7,           /* Echo service.  */
+    IPPORT_DISCARD = 9,                /* Discard transmissions service.  */
+    IPPORT_SYSTAT = 11,                /* System status service.  */
+    IPPORT_DAYTIME = 13,       /* Time of day service.  */
+    IPPORT_NETSTAT = 15,       /* Network status service.  */
+    IPPORT_FTP = 21,           /* File Transfer Protocol.  */
+    IPPORT_TELNET = 23,                /* Telnet protocol.  */
+    IPPORT_SMTP = 25,          /* Simple Mail Transfer Protocol.  */
+    IPPORT_TIMESERVER = 37,    /* Timeserver service.  */
+    IPPORT_NAMESERVER = 42,    /* Domain Name Service.  */
+    IPPORT_WHOIS = 43,         /* Internet Whois service.  */
+    IPPORT_MTP = 57,
+
+    IPPORT_TFTP = 69,          /* Trivial File Transfer Protocol.  */
+    IPPORT_RJE = 77,
+    IPPORT_FINGER = 79,                /* Finger service.  */
+    IPPORT_TTYLINK = 87,
+    IPPORT_SUPDUP = 95,                /* SUPDUP protocol.  */
+
+
+    IPPORT_EXECSERVER = 512,   /* execd service.  */
+    IPPORT_LOGINSERVER = 513,  /* rlogind service.  */
+    IPPORT_CMDSERVER = 514,
+    IPPORT_EFSSERVER = 520,
+
+    /* UDP ports.  */
+    IPPORT_BIFFUDP = 512,
+    IPPORT_WHOSERVER = 513,
+    IPPORT_ROUTESERVER = 520,
+
+    /* Ports less than this value are reserved for privileged processes.  */
+    IPPORT_RESERVED = 1024,
+
+    /* Ports greater this value are reserved for (non-privileged) servers.  */
+    IPPORT_USERRESERVED = 5000
+  };
+
+/* Definitions of the bits in an Internet address integer.
+
+   On subnets, host and network parts are found according to
+   the subnet mask, not these masks.  */
+
+#define        IN_CLASSA(a)            ((((in_addr_t)(a)) & 0x80000000) == 0)
+#define        IN_CLASSA_NET           0xff000000
+#define        IN_CLASSA_NSHIFT        24
+#define        IN_CLASSA_HOST          (0xffffffff & ~IN_CLASSA_NET)
+#define        IN_CLASSA_MAX           128
+
+#define        IN_CLASSB(a)            ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000)
+#define        IN_CLASSB_NET           0xffff0000
+#define        IN_CLASSB_NSHIFT        16
+#define        IN_CLASSB_HOST          (0xffffffff & ~IN_CLASSB_NET)
+#define        IN_CLASSB_MAX           65536
+
+#define        IN_CLASSC(a)            ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000)
+#define        IN_CLASSC_NET           0xffffff00
+#define        IN_CLASSC_NSHIFT        8
+#define        IN_CLASSC_HOST          (0xffffffff & ~IN_CLASSC_NET)
+
+#define        IN_CLASSD(a)            ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000)
+#define        IN_MULTICAST(a)         IN_CLASSD(a)
+
+#define        IN_EXPERIMENTAL(a)      ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000)
+#define        IN_BADCLASS(a)          ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000)
+
+/* Address to accept any incoming messages.  */
+#define        INADDR_ANY              ((in_addr_t) 0x00000000)
+/* Address to send to all hosts.  */
+#define        INADDR_BROADCAST        ((in_addr_t) 0xffffffff)
+/* Address indicating an error return.  */
+#define        INADDR_NONE             ((in_addr_t) 0xffffffff)
+
+/* Network number for local host loopback.  */
+#define        IN_LOOPBACKNET          127
+/* Address to loopback in software to local host.  */
+#ifndef INADDR_LOOPBACK
+# define INADDR_LOOPBACK       ((in_addr_t) 0x7f000001) /* Inet 127.0.0.1.  */
+#endif
+
+/* Defines for Multicast INADDR.  */
+#define INADDR_UNSPEC_GROUP    ((in_addr_t) 0xe0000000) /* 224.0.0.0 */
+#define INADDR_ALLHOSTS_GROUP  ((in_addr_t) 0xe0000001) /* 224.0.0.1 */
+#define INADDR_ALLRTRS_GROUP    ((in_addr_t) 0xe0000002) /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* IPv6 address */
+struct in6_addr
+  {
+    union
+      {
+       uint8_t __u6_addr8[16];
+#ifdef __USE_MISC
+       uint16_t __u6_addr16[8];
+       uint32_t __u6_addr32[4];
+#endif
+      } __in6_u;
+#define s6_addr                        __in6_u.__u6_addr8
+#ifdef __USE_MISC
+# define s6_addr16             __in6_u.__u6_addr16
+# define s6_addr32             __in6_u.__u6_addr32
+#endif
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+extern const struct in6_addr in6addr_any;        /* :: */
+extern const struct in6_addr in6addr_loopback;   /* ::1 */
+#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+
+/* Structure describing an Internet socket address.  */
+struct sockaddr_in
+  {
+    __SOCKADDR_COMMON (sin_);
+    in_port_t sin_port;                        /* Port number.  */
+    struct in_addr sin_addr;           /* Internet address.  */
+
+    /* Pad to size of `struct sockaddr'.  */
+    unsigned char sin_zero[sizeof (struct sockaddr) -
+                          __SOCKADDR_COMMON_SIZE -
+                          sizeof (in_port_t) -
+                          sizeof (struct in_addr)];
+  };
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* Ditto, for IPv6.  */
+struct sockaddr_in6
+  {
+    __SOCKADDR_COMMON (sin6_);
+    in_port_t sin6_port;       /* Transport layer port # */
+    uint32_t sin6_flowinfo;    /* IPv6 flow information */
+    struct in6_addr sin6_addr; /* IPv6 address */
+    uint32_t sin6_scope_id;    /* IPv6 scope-id */
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+#ifdef __USE_MISC
+/* IPv4 multicast request.  */
+struct ip_mreq
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imr_interface;
+  };
+
+struct ip_mreq_source
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* IP address of source.  */
+    struct in_addr imr_interface;
+
+    /* IP address of interface.  */
+    struct in_addr imr_sourceaddr;
+  };
+#endif
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* Likewise, for IPv6.  */
+struct ipv6_mreq
+  {
+    /* IPv6 multicast address of group */
+    struct in6_addr ipv6mr_multiaddr;
+
+    /* local interface */
+    unsigned int ipv6mr_interface;
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+#ifdef __USE_MISC
+/* Multicast group request.  */
+struct group_req
+  {
+    /* Interface index.  */
+    uint32_t gr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gr_group;
+  };
+
+struct group_source_req
+  {
+    /* Interface index.  */
+    uint32_t gsr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gsr_group;
+
+    /* Source address.  */
+    struct sockaddr_storage gsr_source;
+  };
+
+
+/* Full-state filter operations.  */
+struct ip_msfilter
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imsf_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imsf_interface;
+
+    /* Filter mode.  */
+    uint32_t imsf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t imsf_numsrc;
+    /* Source addresses.  */
+    struct in_addr imsf_slist[1];
+  };
+
+#define IP_MSFILTER_SIZE(numsrc) (sizeof (struct ip_msfilter) \
+                                 - sizeof (struct in_addr)                   \
+                                 + (numsrc) * sizeof (struct in_addr))
+
+struct group_filter
+  {
+    /* Interface index.  */
+    uint32_t gf_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gf_group;
+
+    /* Filter mode.  */
+    uint32_t gf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t gf_numsrc;
+    /* Source addresses.  */
+    struct sockaddr_storage gf_slist[1];
+};
+
+#define GROUP_FILTER_SIZE(numsrc) (sizeof (struct group_filter) \
+                                  - sizeof (struct sockaddr_storage)         \
+                                  + ((numsrc)                                \
+                                     * sizeof (struct sockaddr_storage)))
+#endif
+
+/* Functions to convert between host and network byte order.
+
+   Please note that these functions normally take `unsigned long int' or
+   `unsigned short int' values as arguments and also return them.  But
+   this was a short-sighted decision since on different systems the types
+   may have different representations but the values are always the same.  */
+
+extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__ ((__const__));
+extern uint16_t ntohs (uint16_t __netshort)
+     __THROW __attribute__ ((__const__));
+extern uint32_t htonl (uint32_t __hostlong)
+     __THROW __attribute__ ((__const__));
+extern uint16_t htons (uint16_t __hostshort)
+     __THROW __attribute__ ((__const__));
+
+#include <endian.h>
+
+/* Get machine dependent optimized versions of byte swapping functions.  */
+#include <bits/byteswap.h>
+
+#ifdef __OPTIMIZE__
+/* We can optimize calls to the conversion functions.  Either nothing has
+   to be done or we are using directly the byte-swapping functions which
+   often can be inlined.  */
+# if __BYTE_ORDER == __BIG_ENDIAN
+/* The host byte order is the same as network byte order,
+   so these functions are all just identity.  */
+# define ntohl(x)      (x)
+# define ntohs(x)      (x)
+# define htonl(x)      (x)
+# define htons(x)      (x)
+# else
+#  if __BYTE_ORDER == __LITTLE_ENDIAN
+#   define ntohl(x)    __bswap_32 (x)
+#   define ntohs(x)    __bswap_16 (x)
+#   define htonl(x)    __bswap_32 (x)
+#   define htons(x)    __bswap_16 (x)
+#  endif
+# endif
+#endif
+
+#ifdef __GNUC__
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && __a->s6_addr32[3] == 0; }))
+
+# define IN6_IS_ADDR_LOOPBACK(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && __a->s6_addr32[3] == htonl (1); }))
+
+# define IN6_IS_ADDR_LINKLOCAL(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfe800000); }))
+
+# define IN6_IS_ADDR_SITELOCAL(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfec00000); }))
+
+# define IN6_IS_ADDR_V4MAPPED(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == htonl (0xffff); }))
+
+# define IN6_IS_ADDR_V4COMPAT(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && ntohl (__a->s6_addr32[3]) > 1; }))
+
+# define IN6_ARE_ADDR_EQUAL(a,b) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      const struct in6_addr *__b = (const struct in6_addr *) (b);            \
+      __a->s6_addr32[0] == __b->s6_addr32[0]                                 \
+      && __a->s6_addr32[1] == __b->s6_addr32[1]                                      \
+      && __a->s6_addr32[2] == __b->s6_addr32[2]                                      \
+      && __a->s6_addr32[3] == __b->s6_addr32[3]; }))
+#else
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
+       (((const uint32_t *) (a))[0] == 0                                     \
+        && ((const uint32_t *) (a))[1] == 0                                  \
+        && ((const uint32_t *) (a))[2] == 0                                  \
+        && ((const uint32_t *) (a))[3] == 0)
+
+# define IN6_IS_ADDR_LOOPBACK(a) \
+       (((const uint32_t *) (a))[0] == 0                                     \
+        && ((const uint32_t *) (a))[1] == 0                                  \
+        && ((const uint32_t *) (a))[2] == 0                                  \
+        && ((const uint32_t *) (a))[3] == htonl (1))
+
+# define IN6_IS_ADDR_LINKLOCAL(a) \
+       ((((const uint32_t *) (a))[0] & htonl (0xffc00000))                   \
+        == htonl (0xfe800000))
+
+# define IN6_IS_ADDR_SITELOCAL(a) \
+       ((((const uint32_t *) (a))[0] & htonl (0xffc00000))                   \
+        == htonl (0xfec00000))
+
+# define IN6_IS_ADDR_V4MAPPED(a) \
+       ((((const uint32_t *) (a))[0] == 0)                                   \
+        && (((const uint32_t *) (a))[1] == 0)                                \
+        && (((const uint32_t *) (a))[2] == htonl (0xffff)))
+
+# define IN6_IS_ADDR_V4COMPAT(a) \
+       ((((const uint32_t *) (a))[0] == 0)                                   \
+        && (((const uint32_t *) (a))[1] == 0)                                \
+        && (((const uint32_t *) (a))[2] == 0)                                \
+        && (ntohl (((const uint32_t *) (a))[3]) > 1))
+
+# define IN6_ARE_ADDR_EQUAL(a,b) \
+       ((((const uint32_t *) (a))[0] == ((const uint32_t *) (b))[0])         \
+        && (((const uint32_t *) (a))[1] == ((const uint32_t *) (b))[1])      \
+        && (((const uint32_t *) (a))[2] == ((const uint32_t *) (b))[2])      \
+        && (((const uint32_t *) (a))[3] == ((const uint32_t *) (b))[3]))
+#endif
+
+#define IN6_IS_ADDR_MULTICAST(a) (((const uint8_t *) (a))[0] == 0xff)
+
+#ifdef __USE_MISC
+/* Bind socket to a privileged IP port.  */
+extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __THROW;
+
+/* The IPv6 version of this function.  */
+extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
+     __THROW;
+#endif
+
+
+#define IN6_IS_ADDR_MC_NODELOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0xe))
+
+
+#ifdef __USE_GNU
+struct cmsghdr;                        /* Forward declaration.  */
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* IPv6 packet information.  */
+struct in6_pktinfo
+  {
+    struct in6_addr ipi6_addr; /* src/dst IPv6 address */
+    unsigned int ipi6_ifindex; /* send/recv interface index */
+  };
+
+/* IPv6 MTU information.  */
+struct ip6_mtuinfo
+  {
+    struct sockaddr_in6 ip6m_addr; /* dst address including zone ID */
+    uint32_t ip6m_mtu;            /* path MTU in host byte order */
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+/* Obsolete hop-by-hop and Destination Options Processing (RFC 2292).  */
+extern int inet6_option_space (int __nbytes)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
+                             int __type) __THROW __attribute_deprecated__;
+extern int inet6_option_append (struct cmsghdr *__cmsg,
+                               const uint8_t *__typep, int __multx,
+                               int __plusy) __THROW __attribute_deprecated__;
+extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
+                                   int __multx, int __plusy)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_next (const struct cmsghdr *__cmsg,
+                             uint8_t **__tptrp)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_find (const struct cmsghdr *__cmsg,
+                             uint8_t **__tptrp, int __type)
+     __THROW __attribute_deprecated__;
+
+
+/* Hop-by-Hop and Destination Options Processing (RFC 3542).  */
+extern int inet6_opt_init (void *__extbuf, socklen_t __extlen) __THROW;
+extern int inet6_opt_append (void *__extbuf, socklen_t __extlen, int __offset,
+                            uint8_t __type, socklen_t __len, uint8_t __align,
+                            void **__databufp) __THROW;
+extern int inet6_opt_finish (void *__extbuf, socklen_t __extlen, int __offset)
+     __THROW;
+extern int inet6_opt_set_val (void *__databuf, int __offset, void *__val,
+                             socklen_t __vallen) __THROW;
+extern int inet6_opt_next (void *__extbuf, socklen_t __extlen, int __offset,
+                          uint8_t *__typep, socklen_t *__lenp,
+                          void **__databufp) __THROW;
+extern int inet6_opt_find (void *__extbuf, socklen_t __extlen, int __offset,
+                          uint8_t __type, socklen_t *__lenp,
+                          void **__databufp) __THROW;
+extern int inet6_opt_get_val (void *__databuf, int __offset, void *__val,
+                             socklen_t __vallen) __THROW;
+
+
+/* Routing Header Option (RFC 3542).  */
+extern socklen_t inet6_rth_space (int __type, int __segments) __THROW;
+extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type,
+                            int __segments) __THROW;
+extern int inet6_rth_add (void *__bp, const struct in6_addr *__addr) __THROW;
+extern int inet6_rth_reverse (const void *__in, void *__out) __THROW;
+extern int inet6_rth_segments (const void *__bp) __THROW;
+extern struct in6_addr *inet6_rth_getaddr (const void *__bp, int __index)
+     __THROW;
+
+
+/* Multicast source filter support.  */
+
+/* Get IPv4 source filter.  */
+extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
+                               struct in_addr __group, uint32_t *__fmode,
+                               uint32_t *__numsrc, struct in_addr *__slist)
+     __THROW;
+
+/* Set IPv4 source filter.  */
+extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
+                               struct in_addr __group, uint32_t __fmode,
+                               uint32_t __numsrc,
+                               const struct in_addr *__slist)
+     __THROW;
+
+
+/* Get source filter.  */
+extern int getsourcefilter (int __s, uint32_t __interface_addr,
+                           const struct sockaddr *__group,
+                           socklen_t __grouplen, uint32_t *__fmode,
+                           uint32_t *__numsrc,
+                           struct sockaddr_storage *__slist) __THROW;
+
+/* Set source filter.  */
+extern int setsourcefilter (int __s, uint32_t __interface_addr,
+                           const struct sockaddr *__group,
+                           socklen_t __grouplen, uint32_t __fmode,
+                           uint32_t __numsrc,
+                           const struct sockaddr_storage *__slist) __THROW;
+#endif /* use GNU */
+
+__END_DECLS
+
+#endif /* netinet/in.h */
diff --git a/lib/libdss-include/include/netinet/in_systm.h b/lib/libdss-include/include/netinet/in_systm.h
new file mode 100644 (file)
index 0000000..41704ee
--- /dev/null
@@ -0,0 +1,40 @@
+/* System specific type definitions for networking code.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IN_SYSTM_H
+#define _NETINET_IN_SYSTM_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/*
+ * Network order versions of various data types. Unfortunately, BSD
+ * assumes specific sizes for shorts (16 bit) and longs (32 bit) which
+ * don't hold in general. As a consequence, the network order versions
+ * may not reflect the actual size of the native data types.
+ */
+
+typedef u_int16_t n_short;      /* short as received from the net */
+typedef u_int32_t n_long;       /* long as received from the net  */
+typedef u_int32_t n_time;       /* ms since 00:00 GMT, byte rev   */
+
+__END_DECLS
+
+#endif /* netinet/in_systm.h */
diff --git a/lib/libdss-include/include/netinet/ip.h b/lib/libdss-include/include/netinet/ip.h
new file mode 100644 (file)
index 0000000..557a460
--- /dev/null
@@ -0,0 +1,302 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IP_H
+#define __NETINET_IP_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+#include <netinet/in.h>
+
+__BEGIN_DECLS
+
+struct timestamp
+  {
+    u_int8_t len;
+    u_int8_t ptr;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int flags:4;
+    unsigned int overflow:4;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int overflow:4;
+    unsigned int flags:4;
+#else
+# error        "Please fix <bits/endian.h>"
+#endif
+    u_int32_t data[9];
+  };
+
+struct iphdr
+  {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ihl:4;
+    unsigned int version:4;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int version:4;
+    unsigned int ihl:4;
+#else
+# error        "Please fix <bits/endian.h>"
+#endif
+    u_int8_t tos;
+    u_int16_t tot_len;
+    u_int16_t id;
+    u_int16_t frag_off;
+    u_int8_t ttl;
+    u_int8_t protocol;
+    u_int16_t check;
+    u_int32_t saddr;
+    u_int32_t daddr;
+    /*The options start here. */
+  };
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip.h        8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Definitions for internet protocol version 4.
+ * Per RFC 791, September 1981.
+ */
+
+/*
+ * Structure of an internet header, naked of options.
+ */
+struct ip
+  {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ip_hl:4;              /* header length */
+    unsigned int ip_v:4;               /* version */
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int ip_v:4;               /* version */
+    unsigned int ip_hl:4;              /* header length */
+#endif
+    u_int8_t ip_tos;                   /* type of service */
+    u_short ip_len;                    /* total length */
+    u_short ip_id;                     /* identification */
+    u_short ip_off;                    /* fragment offset field */
+#define        IP_RF 0x8000                    /* reserved fragment flag */
+#define        IP_DF 0x4000                    /* dont fragment flag */
+#define        IP_MF 0x2000                    /* more fragments flag */
+#define        IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
+    u_int8_t ip_ttl;                   /* time to live */
+    u_int8_t ip_p;                     /* protocol */
+    u_short ip_sum;                    /* checksum */
+    struct in_addr ip_src, ip_dst;     /* source and dest address */
+  };
+
+/*
+ * Time stamp option structure.
+ */
+struct ip_timestamp
+  {
+    u_int8_t ipt_code;                 /* IPOPT_TS */
+    u_int8_t ipt_len;                  /* size of structure (variable) */
+    u_int8_t ipt_ptr;                  /* index of current entry */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ipt_flg:4;            /* flags, see below */
+    unsigned int ipt_oflw:4;           /* overflow counter */
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int ipt_oflw:4;           /* overflow counter */
+    unsigned int ipt_flg:4;            /* flags, see below */
+#endif
+    u_int32_t data[9];
+  };
+#endif /* __USE_MISC */
+
+#define        IPVERSION       4               /* IP version number */
+#define        IP_MAXPACKET    65535           /* maximum packet size */
+
+/*
+ * Definitions for Explicit Congestion Notification (ECN)
+ *
+ * Taken from RFC-3168, Section 5.
+ */
+
+#define        IPTOS_ECN_MASK          0x03
+#define        IPTOS_ECN(x)            ((x) & IPTOS_ECN_MASK)
+#define        IPTOS_ECN_NOT_ECT       0x00
+#define        IPTOS_ECN_ECT1          0x01
+#define        IPTOS_ECN_ECT0          0x02
+#define        IPTOS_ECN_CE            0x03
+
+/*
+ * Definitions for IP differentiated services code points (DSCP)
+ *
+ * Taken from RFC-2597, Section 6 and RFC-2598, Section 2.3.
+ */
+
+#define        IPTOS_DSCP_MASK         0xfc
+#define        IPTOS_DSCP(x)           ((x) & IPTOS_DSCP_MASK)
+#define        IPTOS_DSCP_AF11         0x28
+#define        IPTOS_DSCP_AF12         0x30
+#define        IPTOS_DSCP_AF13         0x38
+#define        IPTOS_DSCP_AF21         0x48
+#define        IPTOS_DSCP_AF22         0x50
+#define        IPTOS_DSCP_AF23         0x58
+#define        IPTOS_DSCP_AF31         0x68
+#define        IPTOS_DSCP_AF32         0x70
+#define        IPTOS_DSCP_AF33         0x78
+#define        IPTOS_DSCP_AF41         0x88
+#define        IPTOS_DSCP_AF42         0x90
+#define        IPTOS_DSCP_AF43         0x98
+#define        IPTOS_DSCP_EF           0xb8
+
+/*
+ * In RFC 2474, Section 4.2.2.1, the Class Selector Codepoints subsume
+ * the old ToS Precedence values.
+ */
+
+#define        IPTOS_CLASS_MASK                0xe0
+#define        IPTOS_CLASS(class)              ((class) & IPTOS_CLASS_MASK)
+#define        IPTOS_CLASS_CS0                 0x00
+#define        IPTOS_CLASS_CS1                 0x20
+#define        IPTOS_CLASS_CS2                 0x40
+#define        IPTOS_CLASS_CS3                 0x60
+#define        IPTOS_CLASS_CS4                 0x80
+#define        IPTOS_CLASS_CS5                 0xa0
+#define        IPTOS_CLASS_CS6                 0xc0
+#define        IPTOS_CLASS_CS7                 0xe0
+
+#define        IPTOS_CLASS_DEFAULT             IPTOS_CLASS_CS0
+
+/*
+ * Definitions for IP type of service (ip_tos) [deprecated; use DSCP
+ * and CS definitions above instead.]
+ */
+#define        IPTOS_TOS_MASK          0x1E
+#define        IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)
+#define        IPTOS_LOWDELAY          0x10
+#define        IPTOS_THROUGHPUT        0x08
+#define        IPTOS_RELIABILITY       0x04
+#define        IPTOS_LOWCOST           0x02
+#define        IPTOS_MINCOST           IPTOS_LOWCOST
+
+/*
+ * Definitions for IP precedence (also in ip_tos) [also deprecated.]
+ */
+#define        IPTOS_PREC_MASK                 IPTOS_CLASS_MASK
+#define        IPTOS_PREC(tos)                 IPTOS_CLASS(tos)
+#define        IPTOS_PREC_NETCONTROL           IPTOS_CLASS_CS7
+#define        IPTOS_PREC_INTERNETCONTROL      IPTOS_CLASS_CS6
+#define        IPTOS_PREC_CRITIC_ECP           IPTOS_CLASS_CS5
+#define        IPTOS_PREC_FLASHOVERRIDE        IPTOS_CLASS_CS4
+#define        IPTOS_PREC_FLASH                IPTOS_CLASS_CS3
+#define        IPTOS_PREC_IMMEDIATE            IPTOS_CLASS_CS2
+#define        IPTOS_PREC_PRIORITY             IPTOS_CLASS_CS1
+#define        IPTOS_PREC_ROUTINE              IPTOS_CLASS_CS0
+
+/*
+ * Definitions for options.
+ */
+#define        IPOPT_COPY              0x80
+#define        IPOPT_CLASS_MASK        0x60
+#define        IPOPT_NUMBER_MASK       0x1f
+
+#define        IPOPT_COPIED(o)         ((o) & IPOPT_COPY)
+#define        IPOPT_CLASS(o)          ((o) & IPOPT_CLASS_MASK)
+#define        IPOPT_NUMBER(o)         ((o) & IPOPT_NUMBER_MASK)
+
+#define        IPOPT_CONTROL           0x00
+#define        IPOPT_RESERVED1         0x20
+#define        IPOPT_DEBMEAS           0x40
+#define        IPOPT_MEASUREMENT       IPOPT_DEBMEAS
+#define        IPOPT_RESERVED2         0x60
+
+#define        IPOPT_EOL               0               /* end of option list */
+#define        IPOPT_END               IPOPT_EOL
+#define        IPOPT_NOP               1               /* no operation */
+#define        IPOPT_NOOP              IPOPT_NOP
+
+#define        IPOPT_RR                7               /* record packet route */
+#define        IPOPT_TS                68              /* timestamp */
+#define        IPOPT_TIMESTAMP         IPOPT_TS
+#define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
+#define        IPOPT_SEC               IPOPT_SECURITY
+#define        IPOPT_LSRR              131             /* loose source route */
+#define        IPOPT_SATID             136             /* satnet id */
+#define        IPOPT_SID               IPOPT_SATID
+#define        IPOPT_SSRR              137             /* strict source route */
+#define        IPOPT_RA                148             /* router alert */
+
+/*
+ * Offsets to fields in options other than EOL and NOP.
+ */
+#define        IPOPT_OPTVAL            0               /* option ID */
+#define        IPOPT_OLEN              1               /* option length */
+#define        IPOPT_OFFSET            2               /* offset within option */
+#define        IPOPT_MINOFF            4               /* min value of above */
+
+#define        MAX_IPOPTLEN            40
+
+/* flag bits for ipt_flg */
+#define        IPOPT_TS_TSONLY         0               /* timestamps only */
+#define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define        IPOPT_TS_PRESPEC        3               /* specified modules only */
+
+/* bits for security (not byte swapped) */
+#define        IPOPT_SECUR_UNCLASS     0x0000
+#define        IPOPT_SECUR_CONFID      0xf135
+#define        IPOPT_SECUR_EFTO        0x789a
+#define        IPOPT_SECUR_MMMM        0xbc4d
+#define        IPOPT_SECUR_RESTR       0xaf13
+#define        IPOPT_SECUR_SECRET      0xd788
+#define        IPOPT_SECUR_TOPSECRET   0x6bc5
+
+/*
+ * Internet implementation parameters.
+ */
+#define        MAXTTL          255             /* maximum time to live (seconds) */
+#define        IPDEFTTL        64              /* default ttl, from RFC 1340 */
+#define        IPFRAGTTL       60              /* time to live for frags, slowhz */
+#define        IPTTLDEC        1               /* subtracted when forwarding */
+
+#define        IP_MSS          576             /* default maximum segment size */
+
+__END_DECLS
+
+#endif /* netinet/ip.h */
diff --git a/lib/libdss-include/include/netinet/ip6.h b/lib/libdss-include/include/netinet/ip6.h
new file mode 100644 (file)
index 0000000..929d4b5
--- /dev/null
@@ -0,0 +1,188 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IP6_H
+#define _NETINET_IP6_H 1
+
+#include <inttypes.h>
+#include <netinet/in.h>
+
+struct ip6_hdr
+  {
+    union
+      {
+       struct ip6_hdrctl
+         {
+           uint32_t ip6_un1_flow;   /* 4 bits version, 8 bits TC,
+                                       20 bits flow-ID */
+           uint16_t ip6_un1_plen;   /* payload length */
+           uint8_t  ip6_un1_nxt;    /* next header */
+           uint8_t  ip6_un1_hlim;   /* hop limit */
+         } ip6_un1;
+       uint8_t ip6_un2_vfc;       /* 4 bits version, top 4 bits tclass */
+      } ip6_ctlun;
+    struct in6_addr ip6_src;      /* source address */
+    struct in6_addr ip6_dst;      /* destination address */
+  };
+
+#define ip6_vfc   ip6_ctlun.ip6_un2_vfc
+#define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+/* Generic extension header.  */
+struct ip6_ext
+  {
+    uint8_t  ip6e_nxt;         /* next header.  */
+    uint8_t  ip6e_len;         /* length in units of 8 octets.  */
+  };
+
+/* Hop-by-Hop options header.  */
+struct ip6_hbh
+  {
+    uint8_t  ip6h_nxt;         /* next header.  */
+    uint8_t  ip6h_len;         /* length in units of 8 octets.  */
+    /* followed by options */
+  };
+
+/* Destination options header */
+struct ip6_dest
+  {
+    uint8_t  ip6d_nxt;         /* next header */
+    uint8_t  ip6d_len;         /* length in units of 8 octets */
+    /* followed by options */
+  };
+
+/* Routing header */
+struct ip6_rthdr
+  {
+    uint8_t  ip6r_nxt;         /* next header */
+    uint8_t  ip6r_len;         /* length in units of 8 octets */
+    uint8_t  ip6r_type;                /* routing type */
+    uint8_t  ip6r_segleft;     /* segments left */
+    /* followed by routing type specific data */
+  };
+
+/* Type 0 Routing header */
+struct ip6_rthdr0
+  {
+    uint8_t  ip6r0_nxt;                /* next header */
+    uint8_t  ip6r0_len;                /* length in units of 8 octets */
+    uint8_t  ip6r0_type;       /* always zero */
+    uint8_t  ip6r0_segleft;    /* segments left */
+    uint8_t  ip6r0_reserved;   /* reserved field */
+    uint8_t  ip6r0_slmap[3];   /* strict/loose bit map */
+    /* followed by up to 127 struct in6_addr */
+    struct in6_addr ip6r0_addr[0];
+  };
+
+/* Fragment header */
+struct ip6_frag
+  {
+    uint8_t   ip6f_nxt;                /* next header */
+    uint8_t   ip6f_reserved;   /* reserved field */
+    uint16_t  ip6f_offlg;      /* offset, reserved, and flag */
+    uint32_t  ip6f_ident;      /* identification */
+  };
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define IP6F_OFF_MASK       0xfff8  /* mask out offset from _offlg */
+# define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */
+# define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */
+#else   /* BYTE_ORDER == LITTLE_ENDIAN */
+# define IP6F_OFF_MASK       0xf8ff  /* mask out offset from _offlg */
+# define IP6F_RESERVED_MASK  0x0600  /* reserved bits in ip6f_offlg */
+# define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */
+#endif
+
+/* IPv6 options */
+struct ip6_opt
+  {
+    uint8_t  ip6o_type;
+    uint8_t  ip6o_len;
+  };
+
+/* The high-order 3 bits of the option type define the behavior
+ * when processing an unknown option and whether or not the option
+ * content changes in flight.
+ */
+#define IP6OPT_TYPE(o)         ((o) & 0xc0)
+#define IP6OPT_TYPE_SKIP       0x00
+#define IP6OPT_TYPE_DISCARD    0x40
+#define IP6OPT_TYPE_FORCEICMP  0x80
+#define IP6OPT_TYPE_ICMP       0xc0
+#define IP6OPT_TYPE_MUTABLE    0x20
+
+/* Special option types for padding.  */
+#define IP6OPT_PAD1    0
+#define IP6OPT_PADN    1
+
+#define IP6OPT_JUMBO           0xc2
+#define IP6OPT_NSAP_ADDR       0xc3
+#define IP6OPT_TUNNEL_LIMIT    0x04
+#define IP6OPT_ROUTER_ALERT    0x05
+
+/* Jumbo Payload Option */
+struct ip6_opt_jumbo
+  {
+    uint8_t  ip6oj_type;
+    uint8_t  ip6oj_len;
+    uint8_t  ip6oj_jumbo_len[4];
+  };
+#define IP6OPT_JUMBO_LEN       6
+
+/* NSAP Address Option */
+struct ip6_opt_nsap
+  {
+    uint8_t  ip6on_type;
+    uint8_t  ip6on_len;
+    uint8_t  ip6on_src_nsap_len;
+    uint8_t  ip6on_dst_nsap_len;
+      /* followed by source NSAP */
+      /* followed by destination NSAP */
+  };
+
+/* Tunnel Limit Option */
+struct ip6_opt_tunnel
+  {
+    uint8_t  ip6ot_type;
+    uint8_t  ip6ot_len;
+    uint8_t  ip6ot_encap_limit;
+  };
+
+/* Router Alert Option */
+struct ip6_opt_router
+  {
+    uint8_t  ip6or_type;
+    uint8_t  ip6or_len;
+    uint8_t  ip6or_value[2];
+  };
+
+/* Router alert values (in network byte order) */
+#if BYTE_ORDER == BIG_ENDIAN
+# define IP6_ALERT_MLD 0x0000
+# define IP6_ALERT_RSVP        0x0001
+# define IP6_ALERT_AN  0x0002
+#else /* BYTE_ORDER == LITTLE_ENDING */
+# define IP6_ALERT_MLD 0x0000
+# define IP6_ALERT_RSVP        0x0100
+# define IP6_ALERT_AN  0x0200
+#endif
+
+#endif /* netinet/ip6.h */
diff --git a/lib/libdss-include/include/netinet/ip_icmp.h b/lib/libdss-include/include/netinet/ip_icmp.h
new file mode 100644 (file)
index 0000000..4f7c1b1
--- /dev/null
@@ -0,0 +1,282 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IP_ICMP_H
+#define __NETINET_IP_ICMP_H    1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+struct icmphdr
+{
+  u_int8_t type;               /* message type */
+  u_int8_t code;               /* type sub-code */
+  u_int16_t checksum;
+  union
+  {
+    struct
+    {
+      u_int16_t        id;
+      u_int16_t        sequence;
+    } echo;                    /* echo datagram */
+    u_int32_t  gateway;        /* gateway address */
+    struct
+    {
+      u_int16_t        __glibc_reserved;
+      u_int16_t        mtu;
+    } frag;                    /* path mtu discovery */
+  } un;
+};
+
+#define ICMP_ECHOREPLY         0       /* Echo Reply                   */
+#define ICMP_DEST_UNREACH      3       /* Destination Unreachable      */
+#define ICMP_SOURCE_QUENCH     4       /* Source Quench                */
+#define ICMP_REDIRECT          5       /* Redirect (change route)      */
+#define ICMP_ECHO              8       /* Echo Request                 */
+#define ICMP_TIME_EXCEEDED     11      /* Time Exceeded                */
+#define ICMP_PARAMETERPROB     12      /* Parameter Problem            */
+#define ICMP_TIMESTAMP         13      /* Timestamp Request            */
+#define ICMP_TIMESTAMPREPLY    14      /* Timestamp Reply              */
+#define ICMP_INFO_REQUEST      15      /* Information Request          */
+#define ICMP_INFO_REPLY                16      /* Information Reply            */
+#define ICMP_ADDRESS           17      /* Address Mask Request         */
+#define ICMP_ADDRESSREPLY      18      /* Address Mask Reply           */
+#define NR_ICMP_TYPES          18
+
+
+/* Codes for UNREACH. */
+#define ICMP_NET_UNREACH       0       /* Network Unreachable          */
+#define ICMP_HOST_UNREACH      1       /* Host Unreachable             */
+#define ICMP_PROT_UNREACH      2       /* Protocol Unreachable         */
+#define ICMP_PORT_UNREACH      3       /* Port Unreachable             */
+#define ICMP_FRAG_NEEDED       4       /* Fragmentation Needed/DF set  */
+#define ICMP_SR_FAILED         5       /* Source Route failed          */
+#define ICMP_NET_UNKNOWN       6
+#define ICMP_HOST_UNKNOWN      7
+#define ICMP_HOST_ISOLATED     8
+#define ICMP_NET_ANO           9
+#define ICMP_HOST_ANO          10
+#define ICMP_NET_UNR_TOS       11
+#define ICMP_HOST_UNR_TOS      12
+#define ICMP_PKT_FILTERED      13      /* Packet filtered */
+#define ICMP_PREC_VIOLATION    14      /* Precedence violation */
+#define ICMP_PREC_CUTOFF       15      /* Precedence cut off */
+#define NR_ICMP_UNREACH                15      /* instead of hardcoding immediate value */
+
+/* Codes for REDIRECT. */
+#define ICMP_REDIR_NET         0       /* Redirect Net                 */
+#define ICMP_REDIR_HOST                1       /* Redirect Host                */
+#define ICMP_REDIR_NETTOS      2       /* Redirect Net for TOS         */
+#define ICMP_REDIR_HOSTTOS     3       /* Redirect Host for TOS        */
+
+/* Codes for TIME_EXCEEDED. */
+#define ICMP_EXC_TTL           0       /* TTL count exceeded           */
+#define ICMP_EXC_FRAGTIME      1       /* Fragment Reass time exceeded */
+
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
+ */
+
+#include <netinet/in.h>
+#include <netinet/ip.h>
+
+/*
+ * Internal of an ICMP Router Advertisement
+ */
+struct icmp_ra_addr
+{
+  u_int32_t ira_addr;
+  u_int32_t ira_preference;
+};
+
+struct icmp
+{
+  u_int8_t  icmp_type; /* type of message, see below */
+  u_int8_t  icmp_code; /* type sub code */
+  u_int16_t icmp_cksum;        /* ones complement checksum of struct */
+  union
+  {
+    u_char ih_pptr;            /* ICMP_PARAMPROB */
+    struct in_addr ih_gwaddr;  /* gateway address */
+    struct ih_idseq            /* echo datagram */
+    {
+      u_int16_t icd_id;
+      u_int16_t icd_seq;
+    } ih_idseq;
+    u_int32_t ih_void;
+
+    /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
+    struct ih_pmtu
+    {
+      u_int16_t ipm_void;
+      u_int16_t ipm_nextmtu;
+    } ih_pmtu;
+
+    struct ih_rtradv
+    {
+      u_int8_t irt_num_addrs;
+      u_int8_t irt_wpa;
+      u_int16_t irt_lifetime;
+    } ih_rtradv;
+  } icmp_hun;
+#define        icmp_pptr       icmp_hun.ih_pptr
+#define        icmp_gwaddr     icmp_hun.ih_gwaddr
+#define        icmp_id         icmp_hun.ih_idseq.icd_id
+#define        icmp_seq        icmp_hun.ih_idseq.icd_seq
+#define        icmp_void       icmp_hun.ih_void
+#define        icmp_pmvoid     icmp_hun.ih_pmtu.ipm_void
+#define        icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
+#define        icmp_num_addrs  icmp_hun.ih_rtradv.irt_num_addrs
+#define        icmp_wpa        icmp_hun.ih_rtradv.irt_wpa
+#define        icmp_lifetime   icmp_hun.ih_rtradv.irt_lifetime
+  union
+  {
+    struct
+    {
+      u_int32_t its_otime;
+      u_int32_t its_rtime;
+      u_int32_t its_ttime;
+    } id_ts;
+    struct
+    {
+      struct ip idi_ip;
+      /* options and then 64 bits of data */
+    } id_ip;
+    struct icmp_ra_addr id_radv;
+    u_int32_t   id_mask;
+    u_int8_t    id_data[1];
+  } icmp_dun;
+#define        icmp_otime      icmp_dun.id_ts.its_otime
+#define        icmp_rtime      icmp_dun.id_ts.its_rtime
+#define        icmp_ttime      icmp_dun.id_ts.its_ttime
+#define        icmp_ip         icmp_dun.id_ip.idi_ip
+#define        icmp_radv       icmp_dun.id_radv
+#define        icmp_mask       icmp_dun.id_mask
+#define        icmp_data       icmp_dun.id_data
+};
+
+/*
+ * Lower bounds on packet lengths for various types.
+ * For the error advice packets must first insure that the
+ * packet is large enough to contain the returned ip header.
+ * Only then can we do the check to see if 64 bits of packet
+ * data have been returned, since we need to check the returned
+ * ip header length.
+ */
+#define        ICMP_MINLEN     8                               /* abs minimum */
+#define        ICMP_TSLEN      (8 + 3 * sizeof (n_time))       /* timestamp */
+#define        ICMP_MASKLEN    12                              /* address mask */
+#define        ICMP_ADVLENMIN  (8 + sizeof (struct ip) + 8)    /* min */
+#ifndef _IP_VHL
+#define        ICMP_ADVLEN(p)  (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
+       /* N.B.: must separately check that ip_hl >= 5 */
+#else
+#define        ICMP_ADVLEN(p)  (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
+       /* N.B.: must separately check that header length >= 5 */
+#endif
+
+/* Definition of type and code fields. */
+/* defined above: ICMP_ECHOREPLY, ICMP_REDIRECT, ICMP_ECHO */
+#define        ICMP_UNREACH            3               /* dest unreachable, codes: */
+#define        ICMP_SOURCEQUENCH       4               /* packet lost, slow down */
+#define        ICMP_ROUTERADVERT       9               /* router advertisement */
+#define        ICMP_ROUTERSOLICIT      10              /* router solicitation */
+#define        ICMP_TIMXCEED           11              /* time exceeded, code: */
+#define        ICMP_PARAMPROB          12              /* ip header bad */
+#define        ICMP_TSTAMP             13              /* timestamp request */
+#define        ICMP_TSTAMPREPLY        14              /* timestamp reply */
+#define        ICMP_IREQ               15              /* information request */
+#define        ICMP_IREQREPLY          16              /* information reply */
+#define        ICMP_MASKREQ            17              /* address mask request */
+#define        ICMP_MASKREPLY          18              /* address mask reply */
+
+#define        ICMP_MAXTYPE            18
+
+/* UNREACH codes */
+#define        ICMP_UNREACH_NET                0       /* bad net */
+#define        ICMP_UNREACH_HOST               1       /* bad host */
+#define        ICMP_UNREACH_PROTOCOL           2       /* bad protocol */
+#define        ICMP_UNREACH_PORT               3       /* bad port */
+#define        ICMP_UNREACH_NEEDFRAG           4       /* IP_DF caused drop */
+#define        ICMP_UNREACH_SRCFAIL            5       /* src route failed */
+#define        ICMP_UNREACH_NET_UNKNOWN        6       /* unknown net */
+#define        ICMP_UNREACH_HOST_UNKNOWN       7       /* unknown host */
+#define        ICMP_UNREACH_ISOLATED           8       /* src host isolated */
+#define        ICMP_UNREACH_NET_PROHIB         9       /* net denied */
+#define        ICMP_UNREACH_HOST_PROHIB        10      /* host denied */
+#define        ICMP_UNREACH_TOSNET             11      /* bad tos for net */
+#define        ICMP_UNREACH_TOSHOST            12      /* bad tos for host */
+#define        ICMP_UNREACH_FILTER_PROHIB      13      /* admin prohib */
+#define        ICMP_UNREACH_HOST_PRECEDENCE    14      /* host prec vio. */
+#define        ICMP_UNREACH_PRECEDENCE_CUTOFF  15      /* prec cutoff */
+
+/* REDIRECT codes */
+#define        ICMP_REDIRECT_NET       0               /* for network */
+#define        ICMP_REDIRECT_HOST      1               /* for host */
+#define        ICMP_REDIRECT_TOSNET    2               /* for tos and net */
+#define        ICMP_REDIRECT_TOSHOST   3               /* for tos and host */
+
+/* TIMEXCEED codes */
+#define        ICMP_TIMXCEED_INTRANS   0               /* ttl==0 in transit */
+#define        ICMP_TIMXCEED_REASS     1               /* ttl==0 in reass */
+
+/* PARAMPROB code */
+#define        ICMP_PARAMPROB_OPTABSENT 1              /* req. opt. absent */
+
+#define        ICMP_INFOTYPE(type) \
+       ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
+       (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
+       (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
+       (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
+       (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
+
+#endif /* __USE_MISC */
+
+__END_DECLS
+
+#endif /* netinet/ip_icmp.h */
diff --git a/lib/libdss-include/include/netinet/tcp.h b/lib/libdss-include/include/netinet/tcp.h
new file mode 100644 (file)
index 0000000..3918bca
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)tcp.h       8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET_TCP_H
+#define _NETINET_TCP_H 1
+
+#include <features.h>
+
+/*
+ * User-settable options (used with setsockopt).
+ */
+#define        TCP_NODELAY              1  /* Don't delay send to coalesce packets  */
+#define        TCP_MAXSEG               2  /* Set maximum segment size  */
+#define TCP_CORK                3  /* Control sending of partial frames  */
+#define TCP_KEEPIDLE            4  /* Start keeplives after this period */
+#define TCP_KEEPINTVL           5  /* Interval between keepalives */
+#define TCP_KEEPCNT             6  /* Number of keepalives before death */
+#define TCP_SYNCNT              7  /* Number of SYN retransmits */
+#define TCP_LINGER2             8  /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT        9  /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP        10 /* Bound advertised window */
+#define TCP_INFO                11 /* Information about this connection. */
+#define        TCP_QUICKACK             12 /* Bock/reenable quick ACKs.  */
+#define TCP_CONGESTION          13 /* Congestion control algorithm.  */
+#define TCP_MD5SIG              14 /* TCP MD5 Signature (RFC2385) */
+#define TCP_COOKIE_TRANSACTIONS         15 /* TCP Cookie Transactions */
+#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/
+#define TCP_THIN_DUPACK                 17 /* Fast retrans. after 1 dupack */
+#define TCP_USER_TIMEOUT        18 /* How long for loss retry before timeout */
+#define TCP_REPAIR              19 /* TCP sock is under repair right now */
+#define TCP_REPAIR_QUEUE        20 /* Set TCP queue to repair */
+#define TCP_QUEUE_SEQ           21 /* Set sequence number of repaired queue. */
+#define TCP_REPAIR_OPTIONS      22 /* Repair TCP connection options */
+#define TCP_FASTOPEN            23 /* Enable FastOpen on listeners */
+#define TCP_TIMESTAMP           24 /* TCP time stamp */
+#define TCP_NOTSENT_LOWAT       25 /* Limit number of unsent bytes in
+                                      write queue.  */
+#define TCP_CC_INFO             26 /* Get Congestion Control
+                                      (optional) info.  */
+#define TCP_SAVE_SYN            27 /* Record SYN headers for new
+                                      connections.  */
+#define TCP_SAVED_SYN           28 /* Get SYN headers recorded for
+                                      connection.  */
+
+#ifdef __USE_MISC
+# include <sys/types.h>
+# include <sys/socket.h>
+
+typedef        u_int32_t tcp_seq;
+/*
+ * TCP header.
+ * Per RFC 793, September, 1981.
+ */
+struct tcphdr
+  {
+    __extension__ union
+    {
+      struct
+      {
+       u_int16_t th_sport;             /* source port */
+       u_int16_t th_dport;             /* destination port */
+       tcp_seq th_seq;         /* sequence number */
+       tcp_seq th_ack;         /* acknowledgement number */
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+       u_int8_t th_x2:4;               /* (unused) */
+       u_int8_t th_off:4;              /* data offset */
+# endif
+# if __BYTE_ORDER == __BIG_ENDIAN
+       u_int8_t th_off:4;              /* data offset */
+       u_int8_t th_x2:4;               /* (unused) */
+# endif
+       u_int8_t th_flags;
+# define TH_FIN        0x01
+# define TH_SYN        0x02
+# define TH_RST        0x04
+# define TH_PUSH       0x08
+# define TH_ACK        0x10
+# define TH_URG        0x20
+       u_int16_t th_win;               /* window */
+       u_int16_t th_sum;               /* checksum */
+       u_int16_t th_urp;               /* urgent pointer */
+      };
+      struct
+      {
+       u_int16_t source;
+       u_int16_t dest;
+       u_int32_t seq;
+       u_int32_t ack_seq;
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+       u_int16_t res1:4;
+       u_int16_t doff:4;
+       u_int16_t fin:1;
+       u_int16_t syn:1;
+       u_int16_t rst:1;
+       u_int16_t psh:1;
+       u_int16_t ack:1;
+       u_int16_t urg:1;
+       u_int16_t res2:2;
+# elif __BYTE_ORDER == __BIG_ENDIAN
+       u_int16_t doff:4;
+       u_int16_t res1:4;
+       u_int16_t res2:2;
+       u_int16_t urg:1;
+       u_int16_t ack:1;
+       u_int16_t psh:1;
+       u_int16_t rst:1;
+       u_int16_t syn:1;
+       u_int16_t fin:1;
+# else
+#  error "Adjust your <bits/endian.h> defines"
+# endif
+       u_int16_t window;
+       u_int16_t check;
+       u_int16_t urg_ptr;
+      };
+    };
+};
+
+enum
+{
+  TCP_ESTABLISHED = 1,
+  TCP_SYN_SENT,
+  TCP_SYN_RECV,
+  TCP_FIN_WAIT1,
+  TCP_FIN_WAIT2,
+  TCP_TIME_WAIT,
+  TCP_CLOSE,
+  TCP_CLOSE_WAIT,
+  TCP_LAST_ACK,
+  TCP_LISTEN,
+  TCP_CLOSING   /* now a valid state */
+};
+
+# define TCPOPT_EOL            0
+# define TCPOPT_NOP            1
+# define TCPOPT_MAXSEG         2
+# define TCPOLEN_MAXSEG                4
+# define TCPOPT_WINDOW         3
+# define TCPOLEN_WINDOW                3
+# define TCPOPT_SACK_PERMITTED 4               /* Experimental */
+# define TCPOLEN_SACK_PERMITTED        2
+# define TCPOPT_SACK           5               /* Experimental */
+# define TCPOPT_TIMESTAMP      8
+# define TCPOLEN_TIMESTAMP     10
+# define TCPOLEN_TSTAMP_APPA   (TCPOLEN_TIMESTAMP+2) /* appendix A */
+
+# define TCPOPT_TSTAMP_HDR     \
+    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
+
+/*
+ * Default maximum segment size for TCP.
+ * With an IP MSS of 576, this is 536,
+ * but 512 is probably more convenient.
+ * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
+ */
+# define TCP_MSS       512
+
+# define TCP_MAXWIN    65535   /* largest value for (unscaled) window */
+
+# define TCP_MAX_WINSHIFT      14      /* maximum window shift */
+
+# define SOL_TCP               6       /* TCP level */
+
+
+# define TCPI_OPT_TIMESTAMPS   1
+# define TCPI_OPT_SACK         2
+# define TCPI_OPT_WSCALE       4
+# define TCPI_OPT_ECN          8  /* ECN was negociated at TCP session init */
+# define TCPI_OPT_ECN_SEEN     16 /* we received at least one packet with ECT */
+# define TCPI_OPT_SYN_DATA     32 /* SYN-ACK acked data in SYN sent or rcvd */
+
+/* Values for tcpi_state.  */
+enum tcp_ca_state
+{
+  TCP_CA_Open = 0,
+  TCP_CA_Disorder = 1,
+  TCP_CA_CWR = 2,
+  TCP_CA_Recovery = 3,
+  TCP_CA_Loss = 4
+};
+
+struct tcp_info
+{
+  u_int8_t     tcpi_state;
+  u_int8_t     tcpi_ca_state;
+  u_int8_t     tcpi_retransmits;
+  u_int8_t     tcpi_probes;
+  u_int8_t     tcpi_backoff;
+  u_int8_t     tcpi_options;
+  u_int8_t     tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
+
+  u_int32_t    tcpi_rto;
+  u_int32_t    tcpi_ato;
+  u_int32_t    tcpi_snd_mss;
+  u_int32_t    tcpi_rcv_mss;
+
+  u_int32_t    tcpi_unacked;
+  u_int32_t    tcpi_sacked;
+  u_int32_t    tcpi_lost;
+  u_int32_t    tcpi_retrans;
+  u_int32_t    tcpi_fackets;
+
+  /* Times. */
+  u_int32_t    tcpi_last_data_sent;
+  u_int32_t    tcpi_last_ack_sent;     /* Not remembered, sorry.  */
+  u_int32_t    tcpi_last_data_recv;
+  u_int32_t    tcpi_last_ack_recv;
+
+  /* Metrics. */
+  u_int32_t    tcpi_pmtu;
+  u_int32_t    tcpi_rcv_ssthresh;
+  u_int32_t    tcpi_rtt;
+  u_int32_t    tcpi_rttvar;
+  u_int32_t    tcpi_snd_ssthresh;
+  u_int32_t    tcpi_snd_cwnd;
+  u_int32_t    tcpi_advmss;
+  u_int32_t    tcpi_reordering;
+
+  u_int32_t    tcpi_rcv_rtt;
+  u_int32_t    tcpi_rcv_space;
+
+  u_int32_t    tcpi_total_retrans;
+};
+
+
+/* For TCP_MD5SIG socket option.  */
+#define TCP_MD5SIG_MAXKEYLEN   80
+
+struct tcp_md5sig
+{
+  struct sockaddr_storage tcpm_addr;           /* Address associated.  */
+  u_int16_t    __tcpm_pad1;                    /* Zero.  */
+  u_int16_t    tcpm_keylen;                    /* Key length.  */
+  u_int32_t    __tcpm_pad2;                    /* Zero.  */
+  u_int8_t     tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* Key (binary).  */
+};
+
+/* For socket repair options.  */
+struct tcp_repair_opt
+{
+  u_int32_t    opt_code;
+  u_int32_t    opt_val;
+};
+
+/* Queue to repair, for TCP_REPAIR_QUEUE.  */
+enum
+{
+  TCP_NO_QUEUE,
+  TCP_RECV_QUEUE,
+  TCP_SEND_QUEUE,
+  TCP_QUEUES_NR,
+};
+
+/* For cookie transactions socket options.  */
+#define TCP_COOKIE_MIN         8               /*  64-bits */
+#define TCP_COOKIE_MAX         16              /* 128-bits */
+#define TCP_COOKIE_PAIR_SIZE   (2*TCP_COOKIE_MAX)
+
+/* Flags for both getsockopt and setsockopt */
+#define TCP_COOKIE_IN_ALWAYS   (1 << 0)        /* Discard SYN without cookie */
+#define TCP_COOKIE_OUT_NEVER   (1 << 1)        /* Prohibit outgoing cookies,
+                                                * supercedes everything. */
+
+/* Flags for getsockopt */
+#define TCP_S_DATA_IN          (1 << 2)        /* Was data received? */
+#define TCP_S_DATA_OUT         (1 << 3)        /* Was data sent? */
+
+#define TCP_MSS_DEFAULT                 536U   /* IPv4 (RFC1122, RFC2581) */
+#define TCP_MSS_DESIRED                1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
+
+struct tcp_cookie_transactions
+{
+  u_int16_t    tcpct_flags;
+  u_int8_t     __tcpct_pad1;
+  u_int8_t     tcpct_cookie_desired;
+  u_int16_t    tcpct_s_data_desired;
+  u_int16_t    tcpct_used;
+  u_int8_t     tcpct_value[TCP_MSS_DEFAULT];
+};
+
+#endif /* Misc.  */
+
+#endif /* netinet/tcp.h */
diff --git a/lib/libdss-include/include/netinet/udp.h b/lib/libdss-include/include/netinet/udp.h
new file mode 100644 (file)
index 0000000..bcc3213
--- /dev/null
@@ -0,0 +1,93 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Copyright (C) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __NETINET_UDP_H
+#define __NETINET_UDP_H    1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+/* UDP header as specified by RFC 768, August 1980. */
+
+struct udphdr
+{
+  __extension__ union
+  {
+    struct
+    {
+      u_int16_t uh_sport;              /* source port */
+      u_int16_t uh_dport;              /* destination port */
+      u_int16_t uh_ulen;               /* udp length */
+      u_int16_t uh_sum;                /* udp checksum */
+    };
+    struct
+    {
+      u_int16_t source;
+      u_int16_t dest;
+      u_int16_t len;
+      u_int16_t check;
+    };
+  };
+};
+
+/* UDP socket options */
+#define UDP_CORK       1       /* Never send partially complete segments.  */
+#define UDP_ENCAP      100     /* Set the socket to accept
+                                  encapsulated packets.  */
+#define UDP_NO_CHECK6_TX 101   /* Disable sending checksum for UDP
+                                  over IPv6.  */
+#define UDP_NO_CHECK6_RX 102   /* Disable accepting checksum for UDP
+                                  over IPv6.  */
+
+/* UDP encapsulation types */
+#define UDP_ENCAP_ESPINUDP_NON_IKE 1   /* draft-ietf-ipsec-nat-t-ike-00/01 */
+#define UDP_ENCAP_ESPINUDP     2       /* draft-ietf-ipsec-udp-encaps-06 */
+#define UDP_ENCAP_L2TPINUDP    3       /* rfc2661 */
+
+#define SOL_UDP            17      /* sockopt level for UDP */
+
+#endif /* netinet/udp.h */
diff --git a/lib/libdss-include/include/netipx/ipx.h b/lib/libdss-include/include/netipx/ipx.h
new file mode 100644 (file)
index 0000000..855ab99
--- /dev/null
@@ -0,0 +1,112 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETIPX_IPX_H
+#define __NETIPX_IPX_H 1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+#define SOL_IPX    256          /* sockopt level */
+
+#define IPX_TYPE        1
+#define IPX_NODE_LEN   6
+#define IPX_MTU                576
+
+struct sockaddr_ipx
+  {
+    sa_family_t sipx_family;
+    u_int16_t sipx_port;
+    u_int32_t sipx_network;
+    unsigned char sipx_node[IPX_NODE_LEN];
+    u_int8_t sipx_type;
+    unsigned char sipx_zero;   /* 16 byte fill */
+  };
+
+/*
+ *     So we can fit the extra info for SIOCSIFADDR into the address nicely
+ */
+
+#define sipx_special   sipx_port
+#define sipx_action    sipx_zero
+#define IPX_DLTITF     0
+#define IPX_CRTITF     1
+
+typedef struct ipx_route_definition
+  {
+    unsigned long ipx_network;
+    unsigned long ipx_router_network;
+    unsigned char ipx_router_node[IPX_NODE_LEN];
+  }
+ipx_route_definition;
+
+typedef struct ipx_interface_definition
+  {
+    unsigned long ipx_network;
+    unsigned char ipx_device[16];
+    unsigned char ipx_dlink_type;
+#define IPX_FRAME_NONE         0
+#define IPX_FRAME_SNAP         1
+#define IPX_FRAME_8022         2
+#define IPX_FRAME_ETHERII      3
+#define IPX_FRAME_8023         4
+#define IPX_FRAME_TR_8022      5
+    unsigned char ipx_special;
+#define IPX_SPECIAL_NONE       0
+#define IPX_PRIMARY            1
+#define IPX_INTERNAL           2
+    unsigned char ipx_node[IPX_NODE_LEN];
+  }
+ipx_interface_definition;
+
+typedef struct ipx_config_data
+  {
+    unsigned char ipxcfg_auto_select_primary;
+    unsigned char ipxcfg_auto_create_interfaces;
+  }
+ipx_config_data;
+
+/*
+ * OLD Route Definition for backward compatibility.
+ */
+
+struct ipx_route_def
+  {
+    unsigned long ipx_network;
+    unsigned long ipx_router_network;
+#define IPX_ROUTE_NO_ROUTER    0
+    unsigned char ipx_router_node[IPX_NODE_LEN];
+    unsigned char ipx_device[16];
+    unsigned short ipx_flags;
+#define IPX_RT_SNAP            8
+#define IPX_RT_8022            4
+#define IPX_RT_BLUEBOOK                2
+#define IPX_RT_ROUTED          1
+  };
+
+#define SIOCAIPXITFCRT         (SIOCPROTOPRIVATE)
+#define SIOCAIPXPRISLT         (SIOCPROTOPRIVATE + 1)
+#define SIOCIPXCFGDATA         (SIOCPROTOPRIVATE + 2)
+#define SIOCIPXNCPCONN         (SIOCPROTOPRIVATE + 3)
+
+__END_DECLS
+
+#endif /* netipx/ipx.h */
diff --git a/lib/libdss-include/include/netiucv/iucv.h b/lib/libdss-include/include/netiucv/iucv.h
new file mode 100644 (file)
index 0000000..13cfe98
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETIUCV_IUCV_H
+#define __NETIUCV_IUCV_H       1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+struct sockaddr_iucv
+  {
+    __SOCKADDR_COMMON (siucv_);
+    unsigned short     siucv_port;             /* Reserved */
+    unsigned int       siucv_addr;             /* Reserved */
+    char               siucv_nodeid[8];        /* Reserved */
+    char               siucv_user_id[8];       /* Guest User Id */
+    char               siucv_name[8];          /* Application Name */
+  };
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/include/netpacket/packet.h b/lib/libdss-include/include/netpacket/packet.h
new file mode 100644 (file)
index 0000000..52b67df
--- /dev/null
@@ -0,0 +1,80 @@
+/* Definitions for use with Linux AF_PACKET sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETPACKET_PACKET_H
+#define __NETPACKET_PACKET_H   1
+
+struct sockaddr_ll
+  {
+    unsigned short int sll_family;
+    unsigned short int sll_protocol;
+    int sll_ifindex;
+    unsigned short int sll_hatype;
+    unsigned char sll_pkttype;
+    unsigned char sll_halen;
+    unsigned char sll_addr[8];
+  };
+
+/* Packet types.  */
+
+#define PACKET_HOST            0               /* To us.  */
+#define PACKET_BROADCAST       1               /* To all.  */
+#define PACKET_MULTICAST       2               /* To group.  */
+#define PACKET_OTHERHOST       3               /* To someone else.  */
+#define PACKET_OUTGOING                4               /* Originated by us . */
+#define PACKET_LOOPBACK                5
+#define PACKET_FASTROUTE       6
+
+/* Packet socket options.  */
+
+#define PACKET_ADD_MEMBERSHIP          1
+#define PACKET_DROP_MEMBERSHIP         2
+#define        PACKET_RECV_OUTPUT              3
+#define        PACKET_RX_RING                  5
+#define        PACKET_STATISTICS               6
+#define        PACKET_COPY_THRESH              7
+#define        PACKET_AUXDATA                  8
+#define        PACKET_ORIGDEV                  9
+#define        PACKET_VERSION                  10
+#define        PACKET_HDRLEN                   11
+#define        PACKET_RESERVE                  12
+#define        PACKET_TX_RING                  13
+#define        PACKET_LOSS                     14
+#define        PACKET_VNET_HDR                 15
+#define        PACKET_TX_TIMESTAMP             16
+#define        PACKET_TIMESTAMP                17
+#define        PACKET_FANOUT                   18
+#define        PACKET_TX_HAS_OFF               19
+#define        PACKET_QDISC_BYPASS             20
+#define        PACKET_ROLLOVER_STATS           21
+#define        PACKET_FANOUT_DATA              22
+
+struct packet_mreq
+  {
+    int mr_ifindex;
+    unsigned short int mr_type;
+    unsigned short int mr_alen;
+    unsigned char mr_address[8];
+  };
+
+#define PACKET_MR_MULTICAST    0
+#define PACKET_MR_PROMISC      1
+#define PACKET_MR_ALLMULTI     2
+#define PACKET_MR_UNICAST      3
+
+#endif /* netpacket/packet.h */
diff --git a/lib/libdss-include/include/netrom/netrom.h b/lib/libdss-include/include/netrom/netrom.h
new file mode 100644 (file)
index 0000000..4d544ad
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETROM_NETROM_H
+#define _NETROM_NETROM_H       1
+
+#include <netax25/ax25.h>
+
+/* Setsockoptions(2) level.  Thanks to BSD these must match IPPROTO_xxx.  */
+#define SOL_NETROM     259
+
+/* NetRom control values: */
+#define NETROM_T1      1
+#define NETROM_T2      2
+#define NETROM_N2      3
+#define NETROM_PACLEN  5
+#define        NETROM_T4       6
+#define NETROM_IDLE    7
+
+#define NETROM_KILL    99
+
+/* Type of route: */
+#define NETROM_NEIGH    0
+#define NETROM_NODE     1
+
+struct nr_route_struct
+  {
+    int type;
+    ax25_address callsign;
+    char device[16];
+    unsigned int quality;
+    char mnemonic[7];
+    ax25_address neighbour;
+    unsigned int obs_count;
+    unsigned int ndigis;
+    ax25_address digipeaters[AX25_MAX_DIGIS];
+  };
+
+/* NetRom socket ioctls: */
+#define        SIOCNRGETPARMS          (SIOCPROTOPRIVATE+0)
+#define        SIOCNRSETPARMS          (SIOCPROTOPRIVATE+1)
+#define        SIOCNRDECOBS            (SIOCPROTOPRIVATE+2)
+#define        SIOCNRRTCTL             (SIOCPROTOPRIVATE+3)
+#define        SIOCNRCTLCON            (SIOCPROTOPRIVATE+4)
+
+/* NetRom parameter structure: */
+struct nr_parms_struct
+  {
+    unsigned int quality;
+    unsigned int obs_count;
+    unsigned int ttl;
+    unsigned int timeout;
+    unsigned int ack_delay;
+    unsigned int busy_delay;
+    unsigned int tries;
+    unsigned int window;
+    unsigned int paclen;
+  };
+
+/* NetRom control structure: */
+struct nr_ctl_struct
+  {
+    unsigned char index;
+    unsigned char id;
+    unsigned int cmd;
+    unsigned long arg;
+  };
+
+#endif /* netrom/netrom.h */
diff --git a/lib/libdss-include/include/netrose/rose.h b/lib/libdss-include/include/netrose/rose.h
new file mode 100644 (file)
index 0000000..3cb7f84
--- /dev/null
@@ -0,0 +1,115 @@
+/* Definitions for Rose packet radio address family.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* What follows is copied from the 2.1.93 <linux/rose.h>.  */
+
+#ifndef _NETROSE_ROSE_H
+#define _NETROSE_ROSE_H 1
+
+/* Socket level values.  */
+#define SOL_ROSE        260
+
+
+/* These are the public elements of the Linux kernel Rose
+   implementation.  For kernel AX.25 see the file ax25.h. This file
+   requires ax25.h for the definition of the ax25_address structure.  */
+#define ROSE_MTU       251
+
+#define ROSE_MAX_DIGIS 6
+
+#define        ROSE_DEFER      1
+#define        ROSE_T1         2
+#define        ROSE_T2         3
+#define        ROSE_T3         4
+#define        ROSE_IDLE       5
+#define        ROSE_QBITINCL   6
+#define        ROSE_HOLDBACK   7
+
+#define        SIOCRSGCAUSE            (SIOCPROTOPRIVATE + 0)
+#define        SIOCRSSCAUSE            (SIOCPROTOPRIVATE + 1)
+#define        SIOCRSL2CALL            (SIOCPROTOPRIVATE + 2)
+#define        SIOCRSSL2CALL           (SIOCPROTOPRIVATE + 2)
+#define        SIOCRSACCEPT            (SIOCPROTOPRIVATE + 3)
+#define        SIOCRSCLRRT             (SIOCPROTOPRIVATE + 4)
+#define        SIOCRSGL2CALL           (SIOCPROTOPRIVATE + 5)
+#define        SIOCRSGFACILITIES       (SIOCPROTOPRIVATE + 6)
+
+#define        ROSE_DTE_ORIGINATED     0x00
+#define        ROSE_NUMBER_BUSY        0x01
+#define        ROSE_INVALID_FACILITY   0x03
+#define        ROSE_NETWORK_CONGESTION 0x05
+#define        ROSE_OUT_OF_ORDER       0x09
+#define        ROSE_ACCESS_BARRED      0x0B
+#define        ROSE_NOT_OBTAINABLE     0x0D
+#define        ROSE_REMOTE_PROCEDURE   0x11
+#define        ROSE_LOCAL_PROCEDURE    0x13
+#define        ROSE_SHIP_ABSENT        0x39
+
+
+typedef struct
+{
+  char rose_addr[5];
+} rose_address;
+
+struct sockaddr_rose
+{
+  sa_family_t srose_family;
+  rose_address srose_addr;
+  ax25_address srose_call;
+  int srose_ndigis;
+  ax25_address srose_digi;
+};
+
+struct full_sockaddr_rose
+{
+  sa_family_t srose_family;
+  rose_address srose_addr;
+  ax25_address srose_call;
+  unsigned int srose_ndigis;
+  ax25_address srose_digis[ROSE_MAX_DIGIS];
+};
+
+struct rose_route_struct
+{
+  rose_address address;
+  unsigned short int mask;
+  ax25_address neighbour;
+  char device[16];
+  unsigned char        ndigis;
+  ax25_address digipeaters[AX25_MAX_DIGIS];
+};
+
+struct rose_cause_struct
+{
+  unsigned char        cause;
+  unsigned char        diagnostic;
+};
+
+struct rose_facilities_struct
+{
+  rose_address source_addr,   dest_addr;
+  ax25_address source_call,   dest_call;
+  unsigned char source_ndigis, dest_ndigis;
+  ax25_address source_digis[ROSE_MAX_DIGIS];
+  ax25_address dest_digis[ROSE_MAX_DIGIS];
+  unsigned int rand;
+  rose_address fail_addr;
+  ax25_address fail_call;
+};
+
+#endif /* netrose/rose.h */
diff --git a/lib/libdss-include/include/nfs/nfs.h b/lib/libdss-include/include/nfs/nfs.h
new file mode 100644 (file)
index 0000000..61e4b65
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/nfs.h>
diff --git a/lib/libdss-include/include/nl_types.h b/lib/libdss-include/include/nl_types.h
new file mode 100644 (file)
index 0000000..202603f
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NL_TYPES_H
+#define _NL_TYPES_H 1
+
+#include <features.h>
+
+/* The default message set used by the gencat program.  */
+#define NL_SETD 1
+
+/* Value for FLAG parameter of `catgets' to say we want XPG4 compliance.  */
+#define NL_CAT_LOCALE 1
+
+
+__BEGIN_DECLS
+
+/* Message catalog descriptor type.  */
+typedef void *nl_catd;
+
+/* Type used by `nl_langinfo'.  */
+typedef int nl_item;
+
+/* Open message catalog for later use, returning descriptor.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern nl_catd catopen (const char *__cat_name, int __flag) __nonnull ((1));
+
+/* Return translation with NUMBER in SET of CATALOG; if not found
+   return STRING.  */
+extern char *catgets (nl_catd __catalog, int __set, int __number,
+                     const char *__string) __THROW __nonnull ((1));
+
+/* Close message CATALOG.  */
+extern int catclose (nl_catd __catalog) __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* nl_types.h  */
diff --git a/lib/libdss-include/include/nss.h b/lib/libdss-include/include/nss.h
new file mode 100644 (file)
index 0000000..e0681b2
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define interface to NSS.  This is meant for the interface functions
+   and for implementors of new services.  */
+
+#ifndef _NSS_H
+#define _NSS_H 1
+
+#include <features.h>
+#include <stdint.h>
+
+
+__BEGIN_DECLS
+
+/* Possible results of lookup using a nss_* function.  */
+enum nss_status
+{
+  NSS_STATUS_TRYAGAIN = -2,
+  NSS_STATUS_UNAVAIL,
+  NSS_STATUS_NOTFOUND,
+  NSS_STATUS_SUCCESS,
+  NSS_STATUS_RETURN
+};
+
+
+/* Data structure used for the 'gethostbyname4_r' function.  */
+struct gaih_addrtuple
+  {
+    struct gaih_addrtuple *next;
+    char *name;
+    int family;
+    uint32_t addr[4];
+    uint32_t scopeid;
+  };
+
+
+/* Overwrite service selection for database DBNAME using specification
+   in STRING.
+   This function should only be used by system programs which have to
+   work around non-existing services (e.e., while booting).
+   Attention: Using this function repeatedly will slowly eat up the
+   whole memory since previous selection data cannot be freed.  */
+extern int __nss_configure_lookup (const char *__dbname,
+                                  const char *__string) __THROW;
+
+__END_DECLS
+
+#endif /* nss.h */
diff --git a/lib/libdss-include/include/obstack.h b/lib/libdss-include/include/obstack.h
new file mode 100644 (file)
index 0000000..5716202
--- /dev/null
@@ -0,0 +1,515 @@
+/* obstack.h - object stack macros
+   Copyright (C) 1988-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Summary:
+
+   All the apparent functions defined here are macros. The idea
+   is that you would use these pre-tested macros to solve a
+   very specific set of problems, and they would run fast.
+   Caution: no side-effects in arguments please!! They may be
+   evaluated MANY times!!
+
+   These macros operate a stack of objects.  Each object starts life
+   small, and may grow to maturity.  (Consider building a word syllable
+   by syllable.)  An object can move while it is growing.  Once it has
+   been "finished" it never changes address again.  So the "top of the
+   stack" is typically an immature growing object, while the rest of the
+   stack is of mature, fixed size and fixed address objects.
+
+   These routines grab large chunks of memory, using a function you
+   supply, called 'obstack_chunk_alloc'.  On occasion, they free chunks,
+   by calling 'obstack_chunk_free'.  You must define them and declare
+   them before using any obstack macros.
+
+   Each independent stack is represented by a 'struct obstack'.
+   Each of the obstack macros expects a pointer to such a structure
+   as the first argument.
+
+   One motivation for this package is the problem of growing char strings
+   in symbol tables.  Unless you are "fascist pig with a read-only mind"
+   --Gosper's immortal quote from HAKMEM item 154, out of context--you
+   would not like to put any arbitrary upper limit on the length of your
+   symbols.
+
+   In practice this often means you will build many short symbols and a
+   few long symbols.  At the time you are reading a symbol you don't know
+   how long it is.  One traditional method is to read a symbol into a
+   buffer, realloc()ating the buffer every time you try to read a symbol
+   that is longer than the buffer.  This is beaut, but you still will
+   want to copy the symbol from the buffer to a more permanent
+   symbol-table entry say about half the time.
+
+   With obstacks, you can work differently.  Use one obstack for all symbol
+   names.  As you read a symbol, grow the name in the obstack gradually.
+   When the name is complete, finalize it.  Then, if the symbol exists already,
+   free the newly read name.
+
+   The way we do this is to take a large chunk, allocating memory from
+   low addresses.  When you want to build a symbol in the chunk you just
+   add chars above the current "high water mark" in the chunk.  When you
+   have finished adding chars, because you got to the end of the symbol,
+   you know how long the chars are, and you can create a new object.
+   Mostly the chars will not burst over the highest address of the chunk,
+   because you would typically expect a chunk to be (say) 100 times as
+   long as an average object.
+
+   In case that isn't clear, when we have enough chars to make up
+   the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+   so we just point to it where it lies.  No moving of chars is
+   needed and this is the second win: potentially long strings need
+   never be explicitly shuffled. Once an object is formed, it does not
+   change its address during its lifetime.
+
+   When the chars burst over a chunk boundary, we allocate a larger
+   chunk, and then copy the partly formed object from the end of the old
+   chunk to the beginning of the new larger chunk.  We then carry on
+   accreting characters to the end of the object as we normally would.
+
+   A special macro is provided to add a single char at a time to a
+   growing object.  This allows the use of register variables, which
+   break the ordinary 'growth' macro.
+
+   Summary:
+       We allocate large chunks.
+       We carve out one object at a time from the current chunk.
+       Once carved, an object never moves.
+       We are free to append data of any size to the currently
+         growing object.
+       Exactly one object is growing in an obstack at any one time.
+       You can run one obstack per control block.
+       You may have as many control blocks as you dare.
+       Because of the way we do it, you can "unwind" an obstack
+         back to a previous state. (You may remove objects much
+         as you would with a stack.)
+ */
+
+
+/* Don't do the contents of this file more than once.  */
+
+#ifndef _OBSTACK_H
+#define _OBSTACK_H 1
+
+/* We need the type of a pointer subtraction.  If __PTRDIFF_TYPE__ is
+   defined, as with GNU C, use that; that way we don't pollute the
+   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
+   and use ptrdiff_t.  */
+
+#ifdef __PTRDIFF_TYPE__
+# define PTR_INT_TYPE __PTRDIFF_TYPE__
+#else
+# include <stddef.h>
+# define PTR_INT_TYPE ptrdiff_t
+#endif
+
+/* If B is the base of an object addressed by P, return the result of
+   aligning P to the next multiple of A + 1.  B and P must be of type
+   char *.  A + 1 must be a power of 2.  */
+
+#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
+
+/* Similar to _BPTR_ALIGN (B, P, A), except optimize the common case
+   where pointers can be converted to integers, aligned as integers,
+   and converted back again.  If PTR_INT_TYPE is narrower than a
+   pointer (e.g., the AS/400), play it safe and compute the alignment
+   relative to B.  Otherwise, use the faster strategy of computing the
+   alignment relative to 0.  */
+
+#define __PTR_ALIGN(B, P, A)                                                 \
+  __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
+               P, A)
+
+#include <string.h>
+
+#ifndef __attribute_pure__
+# define __attribute_pure__ _GL_ATTRIBUTE_PURE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _obstack_chunk           /* Lives at front of each chunk. */
+{
+  char *limit;                  /* 1 past end of this chunk */
+  struct _obstack_chunk *prev;  /* address of prior chunk or NULL */
+  char contents[4];             /* objects begin here */
+};
+
+struct obstack          /* control current object in current chunk */
+{
+  long chunk_size;              /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
+  char *object_base;            /* address of object we are building */
+  char *next_free;              /* where to add next char to current object */
+  char *chunk_limit;            /* address of char after current chunk */
+  union
+  {
+    PTR_INT_TYPE tempint;
+    void *tempptr;
+  } temp;                       /* Temporary for some macros.  */
+  int alignment_mask;           /* Mask of alignment for each object. */
+  /* These prototypes vary based on 'use_extra_arg', and we use
+     casts to the prototypeless function type in all assignments,
+     but having prototypes here quiets -Wstrict-prototypes.  */
+  struct _obstack_chunk *(*chunkfun) (void *, long);
+  void (*freefun) (void *, struct _obstack_chunk *);
+  void *extra_arg;              /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg : 1;     /* chunk alloc/dealloc funcs take extra arg */
+  unsigned maybe_empty_object : 1; /* There is a possibility that the current
+                                     chunk contains a zero-length object.  This
+                                     prevents freeing the chunk if we allocate
+                                     a bigger chunk to replace it. */
+  unsigned alloc_failed : 1;      /* No longer used, as we now call the failed
+                                    handler on error, but retained for binary
+                                    compatibility.  */
+};
+
+/* Declare the external functions we use; they are in obstack.c.  */
+
+extern void _obstack_newchunk (struct obstack *, int);
+extern int _obstack_begin (struct obstack *, int, int,
+                          void *(*)(long), void (*)(void *));
+extern int _obstack_begin_1 (struct obstack *, int, int,
+                            void *(*)(void *, long),
+                            void (*)(void *, void *), void *);
+extern int _obstack_memory_used (struct obstack *) __attribute_pure__;
+
+/* The default name of the function for freeing a chunk is 'obstack_free',
+   but gnulib users can override this by defining '__obstack_free'.  */
+#ifndef __obstack_free
+# define __obstack_free obstack_free
+#endif
+extern void __obstack_free (struct obstack *, void *);
+
+
+/* Error handler called when 'obstack_chunk_alloc' failed to allocate
+   more memory.  This can be set to a user defined function which
+   should either abort gracefully or use longjump - but shouldn't
+   return.  The default action is to print a message and abort.  */
+extern void (*obstack_alloc_failed_handler) (void);
+
+/* Exit value used when 'print_and_abort' is used.  */
+extern int obstack_exit_failure;
+
+/* Pointer to beginning of object being allocated or to be allocated next.
+   Note that this might not be the final address of the object
+   because a new chunk might be needed to hold the final size.  */
+
+#define obstack_base(h) ((void *) (h)->object_base)
+
+/* Size for allocating ordinary chunks.  */
+
+#define obstack_chunk_size(h) ((h)->chunk_size)
+
+/* Pointer to next byte not yet allocated in current chunk.  */
+
+#define obstack_next_free(h)    ((h)->next_free)
+
+/* Mask specifying low bits that should be clear in address of an object.  */
+
+#define obstack_alignment_mask(h) ((h)->alignment_mask)
+
+/* To prevent prototype warnings provide complete argument list.  */
+#define obstack_init(h)                                                              \
+  _obstack_begin ((h), 0, 0,                                                 \
+                 (void *(*)(long))obstack_chunk_alloc,                       \
+                 (void (*)(void *))obstack_chunk_free)
+
+#define obstack_begin(h, size)                                               \
+  _obstack_begin ((h), (size), 0,                                            \
+                 (void *(*)(long))obstack_chunk_alloc,                       \
+                 (void (*)(void *))obstack_chunk_free)
+
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
+  _obstack_begin ((h), (size), (alignment),                                  \
+                 (void *(*)(long))(chunkfun),                                \
+                 (void (*)(void *))(freefun))
+
+#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+  _obstack_begin_1 ((h), (size), (alignment),                                \
+                   (void *(*)(void *, long))(chunkfun),                      \
+                   (void (*)(void *, void *))(freefun), (arg))
+
+#define obstack_chunkfun(h, newchunkfun) \
+  ((h)->chunkfun = (struct _obstack_chunk *(*)(void *, long))(newchunkfun))
+
+#define obstack_freefun(h, newfreefun) \
+  ((h)->freefun = (void (*)(void *, struct _obstack_chunk *))(newfreefun))
+
+#define obstack_1grow_fast(h, achar) (*((h)->next_free)++ = (achar))
+
+#define obstack_blank_fast(h, n) ((h)->next_free += (n))
+
+#define obstack_memory_used(h) _obstack_memory_used (h)
+
+#if defined __GNUC__
+# if ! (2 < __GNUC__ + (8 <= __GNUC_MINOR__))
+#  define __extension__
+# endif
+
+/* For GNU C, if not -traditional,
+   we can define these macros to compute all args only once
+   without using a global variable.
+   Also, we can avoid using the 'temp' slot, to make faster code.  */
+
+# define obstack_object_size(OBSTACK)                                        \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (unsigned) (__o->next_free - __o->object_base); })
+
+# define obstack_room(OBSTACK)                                               \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (unsigned) (__o->chunk_limit - __o->next_free); })
+
+# define obstack_make_room(OBSTACK, length)                                  \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->chunk_limit - __o->next_free < __len)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       (void) 0; })
+
+# define obstack_empty_p(OBSTACK)                                            \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (__o->chunk->prev == 0                                                \
+       && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,                \
+                                         __o->chunk->contents,               \
+                                         __o->alignment_mask)); })
+
+# define obstack_grow(OBSTACK, where, length)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->next_free + __len > __o->chunk_limit)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       memcpy (__o->next_free, where, __len);                                \
+       __o->next_free += __len;                                                      \
+       (void) 0; })
+
+# define obstack_grow0(OBSTACK, where, length)                               \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->next_free + __len + 1 > __o->chunk_limit)                    \
+        _obstack_newchunk (__o, __len + 1);                                  \
+       memcpy (__o->next_free, where, __len);                                \
+       __o->next_free += __len;                                                      \
+       *(__o->next_free)++ = 0;                                                      \
+       (void) 0; })
+
+# define obstack_1grow(OBSTACK, datum)                                       \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + 1 > __o->chunk_limit)                            \
+        _obstack_newchunk (__o, 1);                                          \
+       obstack_1grow_fast (__o, datum);                                              \
+       (void) 0; })
+
+/* These assume that the obstack alignment is good enough for pointers
+   or ints, and that the data added so far to the current object
+   shares that much alignment.  */
+
+# define obstack_ptr_grow(OBSTACK, datum)                                    \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + sizeof (void *) > __o->chunk_limit)                      \
+        _obstack_newchunk (__o, sizeof (void *));                            \
+       obstack_ptr_grow_fast (__o, datum); })                                \
+
+# define obstack_int_grow(OBSTACK, datum)                                    \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + sizeof (int) > __o->chunk_limit)                 \
+        _obstack_newchunk (__o, sizeof (int));                               \
+       obstack_int_grow_fast (__o, datum); })
+
+# define obstack_ptr_grow_fast(OBSTACK, aptr)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__p1 = __o1->next_free;                                         \
+       *(const void **) __p1 = (aptr);                                       \
+       __o1->next_free += sizeof (const void *);                             \
+       (void) 0; })
+
+# define obstack_int_grow_fast(OBSTACK, aint)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__p1 = __o1->next_free;                                         \
+       *(int *) __p1 = (aint);                                               \
+       __o1->next_free += sizeof (int);                                              \
+       (void) 0; })
+
+# define obstack_blank(OBSTACK, length)                                              \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->chunk_limit - __o->next_free < __len)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       obstack_blank_fast (__o, __len);                                              \
+       (void) 0; })
+
+# define obstack_alloc(OBSTACK, length)                                              \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_blank (__h, (length));                                        \
+       obstack_finish (__h); })
+
+# define obstack_copy(OBSTACK, where, length)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_grow (__h, (where), (length));                                \
+       obstack_finish (__h); })
+
+# define obstack_copy0(OBSTACK, where, length)                               \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_grow0 (__h, (where), (length));                               \
+       obstack_finish (__h); })
+
+/* The local variable is named __o1 to avoid a name conflict
+   when obstack_blank is called.  */
+# define obstack_finish(OBSTACK)                                             \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__value = (void *) __o1->object_base;                           \
+       if (__o1->next_free == __value)                                       \
+        __o1->maybe_empty_object = 1;                                        \
+       __o1->next_free                                                       \
+        = __PTR_ALIGN (__o1->object_base, __o1->next_free,                   \
+                       __o1->alignment_mask);                                \
+       if (__o1->next_free - (char *) __o1->chunk                            \
+          > __o1->chunk_limit - (char *) __o1->chunk)                        \
+        __o1->next_free = __o1->chunk_limit;                                 \
+       __o1->object_base = __o1->next_free;                                  \
+       __value; })
+
+# define obstack_free(OBSTACK, OBJ)                                          \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       void *__obj = (OBJ);                                                  \
+       if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit)  \
+        __o->next_free = __o->object_base = (char *) __obj;                  \
+       else (__obstack_free) (__o, __obj); })
+
+#else /* not __GNUC__ */
+
+# define obstack_object_size(h) \
+  (unsigned) ((h)->next_free - (h)->object_base)
+
+# define obstack_room(h)                                                     \
+  (unsigned) ((h)->chunk_limit - (h)->next_free)
+
+# define obstack_empty_p(h) \
+  ((h)->chunk->prev == 0                                                     \
+   && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,                    \
+                                    (h)->chunk->contents,                    \
+                                    (h)->alignment_mask))
+
+/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
+   so that we can avoid having void expressions
+   in the arms of the conditional expression.
+   Casting the third operand to void was tried before,
+   but some compilers won't accept it.  */
+
+# define obstack_make_room(h, length)                                        \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
+
+# define obstack_grow(h, where, length)                                              \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),                   \
+   memcpy ((h)->next_free, where, (h)->temp.tempint),                        \
+   (h)->next_free += (h)->temp.tempint)
+
+# define obstack_grow0(h, where, length)                                     \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)                      \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),               \
+   memcpy ((h)->next_free, where, (h)->temp.tempint),                        \
+   (h)->next_free += (h)->temp.tempint,                                              \
+   *((h)->next_free)++ = 0)
+
+# define obstack_1grow(h, datum)                                             \
+  ((((h)->next_free + 1 > (h)->chunk_limit)                                  \
+    ? (_obstack_newchunk ((h), 1), 0) : 0),                                  \
+   obstack_1grow_fast (h, datum))
+
+# define obstack_ptr_grow(h, datum)                                          \
+  ((((h)->next_free + sizeof (char *) > (h)->chunk_limit)                    \
+    ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),                    \
+   obstack_ptr_grow_fast (h, datum))
+
+# define obstack_int_grow(h, datum)                                          \
+  ((((h)->next_free + sizeof (int) > (h)->chunk_limit)                       \
+    ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                       \
+   obstack_int_grow_fast (h, datum))
+
+# define obstack_ptr_grow_fast(h, aptr)                                              \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+
+# define obstack_int_grow_fast(h, aint)                                              \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
+
+# define obstack_blank(h, length)                                            \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),                   \
+   obstack_blank_fast (h, (h)->temp.tempint))
+
+# define obstack_alloc(h, length)                                            \
+  (obstack_blank ((h), (length)), obstack_finish ((h)))
+
+# define obstack_copy(h, where, length)                                              \
+  (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_copy0(h, where, length)                                     \
+  (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_finish(h)                                                   \
+  (((h)->next_free == (h)->object_base                                       \
+    ? (((h)->maybe_empty_object = 1), 0)                                     \
+    : 0),                                                                    \
+   (h)->temp.tempptr = (h)->object_base,                                     \
+   (h)->next_free                                                            \
+     = __PTR_ALIGN ((h)->object_base, (h)->next_free,                        \
+                   (h)->alignment_mask),                                     \
+   (((h)->next_free - (char *) (h)->chunk                                    \
+     > (h)->chunk_limit - (char *) (h)->chunk)                               \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),                               \
+   (h)->object_base = (h)->next_free,                                        \
+   (h)->temp.tempptr)
+
+# define obstack_free(h, obj)                                                \
+  ((h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,                 \
+   ((((h)->temp.tempint > 0                                                  \
+      && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))        \
+    ? (void) ((h)->next_free = (h)->object_base                                      \
+             = (h)->temp.tempint + (char *) (h)->chunk)                      \
+    : (__obstack_free) (h, (h)->temp.tempint + (char *) (h)->chunk)))
+
+#endif /* not __GNUC__ */
+
+#ifdef __cplusplus
+}       /* C++ */
+#endif
+
+#endif /* obstack.h */
diff --git a/lib/libdss-include/include/paths.h b/lib/libdss-include/include/paths.h
new file mode 100644 (file)
index 0000000..c764e20
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)paths.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PATHS_H_
+#define        _PATHS_H_
+
+/* Default search path. */
+#define        _PATH_DEFPATH   "/usr/bin:/bin"
+/* All standard utilities path. */
+#define        _PATH_STDPATH \
+       "/usr/bin:/bin:/usr/sbin:/sbin"
+
+#define        _PATH_BSHELL    "/bin/sh"
+#define        _PATH_CONSOLE   "/dev/console"
+#define        _PATH_CSHELL    "/bin/csh"
+#define        _PATH_DEVDB     "/var/run/dev.db"
+#define        _PATH_DEVNULL   "/dev/null"
+#define        _PATH_DRUM      "/dev/drum"
+#define        _PATH_GSHADOW   "/etc/gshadow"
+#define        _PATH_KLOG      "/proc/kmsg"
+#define        _PATH_KMEM      "/dev/kmem"
+#define        _PATH_LASTLOG   "/var/log/lastlog"
+#define        _PATH_MAILDIR   "/var/mail"
+#define        _PATH_MAN       "/usr/share/man"
+#define        _PATH_MEM       "/dev/mem"
+#define        _PATH_MNTTAB    "/etc/fstab"
+#define        _PATH_MOUNTED   "/etc/mtab"
+#define        _PATH_NOLOGIN   "/etc/nologin"
+#define        _PATH_PRESERVE  "/var/lib"
+#define        _PATH_RWHODIR   "/var/spool/rwho"
+#define        _PATH_SENDMAIL  "/usr/sbin/sendmail"
+#define        _PATH_SHADOW    "/etc/shadow"
+#define        _PATH_SHELLS    "/etc/shells"
+#define        _PATH_TTY       "/dev/tty"
+#define        _PATH_UNIX      "/boot/vmlinux"
+#define        _PATH_UTMP      "/var/run/utmp"
+#define        _PATH_VI        "/usr/bin/vi"
+#define        _PATH_WTMP      "/var/log/wtmp"
+
+/* Provide trailing slash, since mostly used for building pathnames. */
+#define        _PATH_DEV       "/dev/"
+#define        _PATH_TMP       "/tmp/"
+#define        _PATH_VARDB     "/var/lib/misc/"
+#define        _PATH_VARRUN    "/var/run/"
+#define        _PATH_VARTMP    "/var/tmp/"
+
+#endif /* !_PATHS_H_ */
diff --git a/lib/libdss-include/include/poll.h b/lib/libdss-include/include/poll.h
new file mode 100644 (file)
index 0000000..06fb41a
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/poll.h>
diff --git a/lib/libdss-include/include/printf.h b/lib/libdss-include/include/printf.h
new file mode 100644 (file)
index 0000000..d731216
--- /dev/null
@@ -0,0 +1,188 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _PRINTF_H
+
+#define        _PRINTF_H       1
+#include <features.h>
+
+__BEGIN_DECLS
+
+#define        __need_FILE
+#include <stdio.h>
+#define        __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+#include <stdarg.h>
+
+
+struct printf_info
+{
+  int prec;                    /* Precision.  */
+  int width;                   /* Width.  */
+  wchar_t spec;                        /* Format letter.  */
+  unsigned int is_long_double:1;/* L flag.  */
+  unsigned int is_short:1;     /* h flag.  */
+  unsigned int is_long:1;      /* l flag.  */
+  unsigned int alt:1;          /* # flag.  */
+  unsigned int space:1;                /* Space flag.  */
+  unsigned int left:1;         /* - flag.  */
+  unsigned int showsign:1;     /* + flag.  */
+  unsigned int group:1;                /* ' flag.  */
+  unsigned int extra:1;                /* For special use.  */
+  unsigned int is_char:1;      /* hh flag.  */
+  unsigned int wide:1;         /* Nonzero for wide character streams.  */
+  unsigned int i18n:1;         /* I flag.  */
+  unsigned int __pad:4;                /* Unused so far.  */
+  unsigned short int user;     /* Bits for user-installed modifiers.  */
+  wchar_t pad;                 /* Padding character.  */
+};
+
+
+/* Type of a printf specifier-handler function.
+   STREAM is the FILE on which to write output.
+   INFO gives information about the format specification.
+   ARGS is a vector of pointers to the argument data;
+   the number of pointers will be the number returned
+   by the associated arginfo function for the same INFO.
+
+   The function should return the number of characters written,
+   or -1 for errors.  */
+
+typedef int printf_function (FILE *__stream,
+                            const struct printf_info *__info,
+                            const void *const *__args);
+
+/* Type of a printf specifier-arginfo function.
+   INFO gives information about the format specification.
+   N, ARGTYPES, *SIZE has to contain the size of the parameter for
+   user-defined types, and return value are as for parse_printf_format
+   except that -1 should be returned if the handler cannot handle
+   this case.  This allows to partially overwrite the functionality
+   of existing format specifiers.  */
+
+typedef int printf_arginfo_size_function (const struct printf_info *__info,
+                                         size_t __n, int *__argtypes,
+                                         int *__size);
+
+/* Old version of 'printf_arginfo_function' without a SIZE parameter.  */
+
+typedef int printf_arginfo_function (const struct printf_info *__info,
+                                    size_t __n, int *__argtypes);
+
+/* Type of a function to get a value of a user-defined from the
+   variable argument list.  */
+typedef void printf_va_arg_function (void *__mem, va_list *__ap);
+
+
+/* Register FUNC to be called to format SPEC specifiers; ARGINFO must be
+   specified to determine how many arguments a SPEC conversion requires and
+   what their types are.  */
+
+extern int register_printf_specifier (int __spec, printf_function __func,
+                                     printf_arginfo_size_function __arginfo)
+  __THROW;
+
+
+/* Obsolete interface similar to register_printf_specifier.  It can only
+   handle basic data types because the ARGINFO callback does not return
+   information on the size of the user-defined type.  */
+
+extern int register_printf_function (int __spec, printf_function __func,
+                                    printf_arginfo_function __arginfo)
+  __THROW __attribute_deprecated__;
+
+
+/* Register a new modifier character sequence.  If the call succeeds
+   it returns a positive value representing the bit set in the USER
+   field in 'struct printf_info'.  */
+
+extern int register_printf_modifier (const wchar_t *__str) __wur __THROW;
+
+
+/* Register variable argument handler for user type.  The return value
+   is to be used in ARGINFO functions to signal the use of the
+   type.  */
+extern int register_printf_type (printf_va_arg_function __fct) __wur __THROW;
+
+
+/* Parse FMT, and fill in N elements of ARGTYPES with the
+   types needed for the conversions FMT specifies.  Returns
+   the number of arguments required by FMT.
+
+   The ARGINFO function registered with a user-defined format is passed a
+   `struct printf_info' describing the format spec being parsed.  A width
+   or precision of INT_MIN means a `*' was used to indicate that the
+   width/precision will come from an arg.  The function should fill in the
+   array it is passed with the types of the arguments it wants, and return
+   the number of arguments it wants.  */
+
+extern size_t parse_printf_format (const char *__restrict __fmt, size_t __n,
+                                  int *__restrict __argtypes) __THROW;
+
+
+/* Codes returned by `parse_printf_format' for basic types.
+
+   These values cover all the standard format specifications.
+   Users can reserve new values after PA_LAST for their own types
+   using 'register_printf_type'.  */
+
+enum
+{                              /* C type: */
+  PA_INT,                      /* int */
+  PA_CHAR,                     /* int, cast to char */
+  PA_WCHAR,                    /* wide char */
+  PA_STRING,                   /* const char *, a '\0'-terminated string */
+  PA_WSTRING,                  /* const wchar_t *, wide character string */
+  PA_POINTER,                  /* void * */
+  PA_FLOAT,                    /* float */
+  PA_DOUBLE,                   /* double */
+  PA_LAST
+};
+
+/* Flag bits that can be set in a type returned by `parse_printf_format'.  */
+#define        PA_FLAG_MASK            0xff00
+#define        PA_FLAG_LONG_LONG       (1 << 8)
+#define        PA_FLAG_LONG_DOUBLE     PA_FLAG_LONG_LONG
+#define        PA_FLAG_LONG            (1 << 9)
+#define        PA_FLAG_SHORT           (1 << 10)
+#define        PA_FLAG_PTR             (1 << 11)
+
+
+
+/* Function which can be registered as `printf'-handlers.  */
+
+/* Print floating point value using using abbreviations for the orders
+   of magnitude used for numbers ('k' for kilo, 'm' for mega etc).  If
+   the format specifier is a uppercase character powers of 1000 are
+   used.  Otherwise powers of 1024.  */
+extern int printf_size (FILE *__restrict __fp,
+                       const struct printf_info *__info,
+                       const void *const *__restrict __args) __THROW;
+
+/* This is the appropriate argument information function for `printf_size'.  */
+extern int printf_size_info (const struct printf_info *__restrict
+                            __info, size_t __n, int *__restrict __argtypes)
+     __THROW;
+
+#ifdef __LDBL_COMPAT
+# include <bits/printf-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* printf.h  */
diff --git a/lib/libdss-include/include/protocols/routed.h b/lib/libdss-include/include/protocols/routed.h
new file mode 100644 (file)
index 0000000..befd865
--- /dev/null
@@ -0,0 +1,101 @@
+/*-
+ * Copyright (c) 1983, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)routed.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_ROUTED_H
+#define        _PROTOCOLS_ROUTED_H 1
+
+#include <sys/socket.h>
+/*
+ * Routing Information Protocol
+ *
+ * Derived from Xerox NS Routing Information Protocol
+ * by changing 32-bit net numbers to sockaddr's and
+ * padding stuff to 32-bit boundaries.
+ */
+#define        RIPVERSION      1
+
+struct netinfo {
+       struct  sockaddr rip_dst;       /* destination net/host */
+       int     rip_metric;             /* cost of route */
+};
+
+struct rip {
+       u_char  rip_cmd;                /* request/response */
+       u_char  rip_vers;               /* protocol version # */
+       u_char  rip_res1[2];            /* pad to 32-bit boundary */
+       union {
+               struct  netinfo ru_nets[1];     /* variable length... */
+               char    ru_tracefile[1];        /* ditto ... */
+       } ripun;
+#define        rip_nets        ripun.ru_nets
+#define        rip_tracefile   ripun.ru_tracefile
+};
+
+/*
+ * Packet types.
+ */
+#define        RIPCMD_REQUEST          1       /* want info */
+#define        RIPCMD_RESPONSE         2       /* responding to request */
+#define        RIPCMD_TRACEON          3       /* turn tracing on */
+#define        RIPCMD_TRACEOFF         4       /* turn it off */
+
+#define        RIPCMD_MAX              5
+#ifdef RIPCMDS
+char *ripcmds[RIPCMD_MAX] =
+  { "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF" };
+#endif
+
+#define        HOPCNT_INFINITY         16      /* per Xerox NS */
+#define        MAXPACKETSIZE           512     /* max broadcast size */
+
+/*
+ * Timer values used in managing the routing table.
+ * Complete tables are broadcast every SUPPLY_INTERVAL seconds.
+ * If changes occur between updates, dynamic updates containing only changes
+ * may be sent.  When these are sent, a timer is set for a random value
+ * between MIN_WAITTIME and MAX_WAITTIME, and no additional dynamic updates
+ * are sent until the timer expires.
+ *
+ * Every update of a routing entry forces an entry's timer to be reset.
+ * After EXPIRE_TIME without updates, the entry is marked invalid,
+ * but held onto until GARBAGE_TIME so that others may
+ * see it "be deleted".
+ */
+#define        TIMER_RATE              30      /* alarm clocks every 30 seconds */
+
+#define        SUPPLY_INTERVAL         30      /* time to supply tables */
+#define        MIN_WAITTIME            2       /* min. interval to broadcast changes */
+#define        MAX_WAITTIME            5       /* max. time to delay changes */
+
+#define        EXPIRE_TIME             180     /* time to mark entry invalid */
+#define        GARBAGE_TIME            240     /* time to garbage collect */
+
+#endif /* protocols/routed.h */
diff --git a/lib/libdss-include/include/protocols/rwhod.h b/lib/libdss-include/include/protocols/rwhod.h
new file mode 100644 (file)
index 0000000..446d6f9
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)rwhod.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_RWHOD_H
+#define        _PROTOCOLS_RWHOD_H 1
+
+#include <sys/types.h>
+
+/*
+ * rwho protocol packet format.
+ */
+struct outmp {
+       char    out_line[8];            /* tty name */
+       char    out_name[8];            /* user id */
+       int32_t out_time;               /* time on */
+};
+
+struct whod {
+       char    wd_vers;                /* protocol version # */
+       char    wd_type;                /* packet type, see below */
+       char    wd_pad[2];
+       int     wd_sendtime;            /* time stamp by sender */
+       int     wd_recvtime;            /* time stamp applied by receiver */
+       char    wd_hostname[32];        /* hosts's name */
+       int     wd_loadav[3];           /* load average as in uptime */
+       int     wd_boottime;            /* time system booted */
+       struct  whoent {
+               struct  outmp we_utmp;  /* active tty info */
+               int     we_idle;        /* tty idle time */
+       } wd_we[1024 / sizeof (struct whoent)];
+};
+
+#define        WHODVERSION     1
+#define        WHODTYPE_STATUS 1               /* host status */
+
+/* We used to define _PATH_RWHODIR here but it's now in <paths.h>.  */
+#include <paths.h>
+
+#endif /* protocols/rwhod.h */
diff --git a/lib/libdss-include/include/protocols/talkd.h b/lib/libdss-include/include/protocols/talkd.h
new file mode 100644 (file)
index 0000000..a8f33b1
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)talkd.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_TALKD_H
+#define        _PROTOCOLS_TALKD_H 1
+
+/*
+ * This describes the protocol used by the talk server and clients.
+ *
+ * The talk server acts a repository of invitations, responding to
+ * requests by clients wishing to rendezvous for the purpose of
+ * holding a conversation.  In normal operation, a client, the caller,
+ * initiates a rendezvous by sending a CTL_MSG to the server of
+ * type LOOK_UP.  This causes the server to search its invitation
+ * tables to check if an invitation currently exists for the caller
+ * (to speak to the callee specified in the message).  If the lookup
+ * fails, the caller then sends an ANNOUNCE message causing the server
+ * to broadcast an announcement on the callee's login ports requesting
+ * contact.  When the callee responds, the local server uses the
+ * recorded invitation to respond with the appropriate rendezvous
+ * address and the caller and callee client programs establish a
+ * stream connection through which the conversation takes place.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+/*
+ * Client->server request message format.
+ */
+typedef struct {
+       u_char  vers;           /* protocol version */
+       u_char  type;           /* request type, see below */
+       u_char  answer;         /* not used */
+       u_char  pad;
+       u_int32_t id_num;       /* message id */
+       struct  osockaddr addr;         /* old (4.3) style */
+       struct  osockaddr ctl_addr;     /* old (4.3) style */
+       int32_t pid;            /* caller's process id */
+#define        NAME_SIZE       12
+       char    l_name[NAME_SIZE];/* caller's name */
+       char    r_name[NAME_SIZE];/* callee's name */
+#define        TTY_SIZE        16
+       char    r_tty[TTY_SIZE];/* callee's tty name */
+} CTL_MSG;
+
+/*
+ * Server->client response message format.
+ */
+typedef struct {
+       u_char  vers;           /* protocol version */
+       u_char  type;           /* type of request message, see below */
+       u_char  answer;         /* response to request message, see below */
+       u_char  pad;
+       u_int32_t id_num;       /* message id */
+       struct  osockaddr addr; /* address for establishing conversation */
+} CTL_RESPONSE;
+
+#define        TALK_VERSION    1               /* protocol version */
+
+/* message type values */
+#define LEAVE_INVITE   0       /* leave invitation with server */
+#define LOOK_UP                1       /* check for invitation by callee */
+#define DELETE         2       /* delete invitation by caller */
+#define ANNOUNCE       3       /* announce invitation by caller */
+
+/* answer values */
+#define SUCCESS                0       /* operation completed properly */
+#define NOT_HERE       1       /* callee not logged in */
+#define FAILED         2       /* operation failed for unexplained reason */
+#define MACHINE_UNKNOWN        3       /* caller's machine name unknown */
+#define PERMISSION_DENIED 4    /* callee's tty doesn't permit announce */
+#define UNKNOWN_REQUEST        5       /* request has invalid type value */
+#define        BADVERSION      6       /* request has invalid protocol version */
+#define        BADADDR         7       /* request has invalid addr value */
+#define        BADCTLADDR      8       /* request has invalid ctl_addr value */
+
+/*
+ * Operational parameters.
+ */
+#define MAX_LIFE       60      /* max time daemon saves invitations */
+/* RING_WAIT should be 10's of seconds less than MAX_LIFE */
+#define RING_WAIT      30      /* time to wait before resending invitation */
+
+#endif /* protocols/talkd.h */
diff --git a/lib/libdss-include/include/protocols/timed.h b/lib/libdss-include/include/protocols/timed.h
new file mode 100644 (file)
index 0000000..b5d4702
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)timed.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _PROTOCOLS_TIMED_H
+#define        _PROTOCOLS_TIMED_H 1
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+/*
+ * Time Synchronization Protocol
+ */
+
+#define        TSPVERSION      1
+#define ANYADDR        NULL
+#define MAXHOSTNAMELEN 64
+
+struct tsp {
+       u_char  tsp_type;
+       u_char  tsp_vers;
+       u_short tsp_seq;
+       union {
+               struct timeval tspu_time;
+               char tspu_hopcnt;
+       } tsp_u;
+       char tsp_name[MAXHOSTNAMELEN];
+};
+
+#define        tsp_time        tsp_u.tspu_time
+#define        tsp_hopcnt      tsp_u.tspu_hopcnt
+
+/*
+ * Command types.
+ */
+#define        TSP_ANY                 0       /* match any types */
+#define        TSP_ADJTIME             1       /* send adjtime */
+#define        TSP_ACK                 2       /* generic acknowledgement */
+#define        TSP_MASTERREQ           3       /* ask for master's name */
+#define        TSP_MASTERACK           4       /* acknowledge master request */
+#define        TSP_SETTIME             5       /* send network time */
+#define        TSP_MASTERUP            6       /* inform slaves that master is up */
+#define        TSP_SLAVEUP             7       /* slave is up but not polled */
+#define        TSP_ELECTION            8       /* advance candidature for master */
+#define        TSP_ACCEPT              9       /* support candidature of master */
+#define        TSP_REFUSE              10      /* reject candidature of master */
+#define        TSP_CONFLICT            11      /* two or more masters present */
+#define        TSP_RESOLVE             12      /* masters' conflict resolution */
+#define        TSP_QUIT                13      /* reject candidature if master is up */
+#define        TSP_DATE                14      /* reset the time (date command) */
+#define        TSP_DATEREQ             15      /* remote request to reset the time */
+#define        TSP_DATEACK             16      /* acknowledge time setting  */
+#define        TSP_TRACEON             17      /* turn tracing on */
+#define        TSP_TRACEOFF            18      /* turn tracing off */
+#define        TSP_MSITE               19      /* find out master's site */
+#define        TSP_MSITEREQ            20      /* remote master's site request */
+#define        TSP_TEST                21      /* for testing election algo */
+#define        TSP_SETDATE             22      /* New from date command */
+#define        TSP_SETDATEREQ          23      /* New remote for above */
+#define        TSP_LOOP                24      /* loop detection packet */
+
+#define        TSPTYPENUMBER           25
+
+#ifdef TSPTYPES
+char *tsptype[TSPTYPENUMBER] =
+  { "ANY", "ADJTIME", "ACK", "MASTERREQ", "MASTERACK", "SETTIME", "MASTERUP",
+  "SLAVEUP", "ELECTION", "ACCEPT", "REFUSE", "CONFLICT", "RESOLVE", "QUIT",
+  "DATE", "DATEREQ", "DATEACK", "TRACEON", "TRACEOFF", "MSITE", "MSITEREQ",
+  "TEST", "SETDATE", "SETDATEREQ", "LOOP" };
+#endif
+
+#endif /* protocols/timed.h */
diff --git a/lib/libdss-include/include/pthread.h b/lib/libdss-include/include/pthread.h
new file mode 100644 (file)
index 0000000..fd0894e
--- /dev/null
@@ -0,0 +1,1161 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PTHREAD_H
+#define _PTHREAD_H     1
+
+#include <features.h>
+#include <endian.h>
+#include <sched.h>
+#include <time.h>
+
+#include <bits/pthreadtypes.h>
+#include <bits/setjmp.h>
+#include <bits/wordsize.h>
+
+
+/* Detach state.  */
+enum
+{
+  PTHREAD_CREATE_JOINABLE,
+#define PTHREAD_CREATE_JOINABLE        PTHREAD_CREATE_JOINABLE
+  PTHREAD_CREATE_DETACHED
+#define PTHREAD_CREATE_DETACHED        PTHREAD_CREATE_DETACHED
+};
+
+
+/* Mutex types.  */
+enum
+{
+  PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_ADAPTIVE_NP
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+  ,
+  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+#endif
+#ifdef __USE_GNU
+  /* For compatibility.  */
+  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
+#endif
+};
+
+
+#ifdef __USE_XOPEN2K
+/* Robust mutex or not flags.  */
+enum
+{
+  PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_ROBUST,
+  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
+};
+#endif
+
+
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+/* Mutex protocols.  */
+enum
+{
+  PTHREAD_PRIO_NONE,
+  PTHREAD_PRIO_INHERIT,
+  PTHREAD_PRIO_PROTECT
+};
+#endif
+
+
+#ifdef __PTHREAD_MUTEX_HAVE_PREV
+# define PTHREAD_MUTEX_INITIALIZER \
+  { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
+# ifdef __USE_GNU
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+
+# endif
+#else
+# define PTHREAD_MUTEX_INITIALIZER \
+  { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } }
+# ifdef __USE_GNU
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } }
+
+# endif
+#endif
+
+
+/* Read-write lock types.  */
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+enum
+{
+  PTHREAD_RWLOCK_PREFER_READER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
+  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
+};
+
+/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t
+   has the shared field.  All 64-bit architectures have the shared field
+   in pthread_rwlock_t.  */
+#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+# if __WORDSIZE == 64
+#  define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1
+# endif
+#endif
+
+/* Read-write lock initializers.  */
+# define PTHREAD_RWLOCK_INITIALIZER \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
+# ifdef __USE_GNU
+#  ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0,                                             \
+       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+#  else
+#   if __BYTE_ORDER == __LITTLE_ENDIAN
+#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \
+      0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
+#   else
+#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\
+      0 } }
+#   endif
+#  endif
+# endif
+#endif  /* Unix98 or XOpen2K */
+
+
+/* Scheduler inheritance.  */
+enum
+{
+  PTHREAD_INHERIT_SCHED,
+#define PTHREAD_INHERIT_SCHED   PTHREAD_INHERIT_SCHED
+  PTHREAD_EXPLICIT_SCHED
+#define PTHREAD_EXPLICIT_SCHED  PTHREAD_EXPLICIT_SCHED
+};
+
+
+/* Scope handling.  */
+enum
+{
+  PTHREAD_SCOPE_SYSTEM,
+#define PTHREAD_SCOPE_SYSTEM    PTHREAD_SCOPE_SYSTEM
+  PTHREAD_SCOPE_PROCESS
+#define PTHREAD_SCOPE_PROCESS   PTHREAD_SCOPE_PROCESS
+};
+
+
+/* Process shared or private flag.  */
+enum
+{
+  PTHREAD_PROCESS_PRIVATE,
+#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
+  PTHREAD_PROCESS_SHARED
+#define PTHREAD_PROCESS_SHARED  PTHREAD_PROCESS_SHARED
+};
+
+
+
+/* Conditional variable handling.  */
+#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
+
+
+/* Cleanup buffers */
+struct _pthread_cleanup_buffer
+{
+  void (*__routine) (void *);             /* Function to call.  */
+  void *__arg;                            /* Its argument.  */
+  int __canceltype;                       /* Saved cancellation type. */
+  struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions.  */
+};
+
+/* Cancellation */
+enum
+{
+  PTHREAD_CANCEL_ENABLE,
+#define PTHREAD_CANCEL_ENABLE   PTHREAD_CANCEL_ENABLE
+  PTHREAD_CANCEL_DISABLE
+#define PTHREAD_CANCEL_DISABLE  PTHREAD_CANCEL_DISABLE
+};
+enum
+{
+  PTHREAD_CANCEL_DEFERRED,
+#define PTHREAD_CANCEL_DEFERRED        PTHREAD_CANCEL_DEFERRED
+  PTHREAD_CANCEL_ASYNCHRONOUS
+#define PTHREAD_CANCEL_ASYNCHRONOUS    PTHREAD_CANCEL_ASYNCHRONOUS
+};
+#define PTHREAD_CANCELED ((void *) -1)
+
+
+/* Single execution handling.  */
+#define PTHREAD_ONCE_INIT 0
+
+
+#ifdef __USE_XOPEN2K
+/* Value returned by 'pthread_barrier_wait' for one of the threads after
+   the required number of threads have called this function.
+   -1 is distinct from 0 and all errno constants */
+# define PTHREAD_BARRIER_SERIAL_THREAD -1
+#endif
+
+
+__BEGIN_DECLS
+
+/* Create a new thread, starting with execution of START-ROUTINE
+   getting passed ARG.  Creation attributed come from ATTR.  The new
+   handle is stored in *NEWTHREAD.  */
+extern int pthread_create (pthread_t *__restrict __newthread,
+                          const pthread_attr_t *__restrict __attr,
+                          void *(*__start_routine) (void *),
+                          void *__restrict __arg) __THROWNL __nonnull ((1, 3));
+
+/* Terminate calling thread.
+
+   The registered cleanup handlers are called via exception handling
+   so we cannot mark this function with __THROW.*/
+extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
+
+/* Make calling thread wait for termination of the thread TH.  The
+   exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN
+   is not NULL.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_join (pthread_t __th, void **__thread_return);
+
+#ifdef __USE_GNU
+/* Check whether thread TH has terminated.  If yes return the status of
+   the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
+extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
+
+/* Make calling thread wait for termination of the thread TH, but only
+   until TIMEOUT.  The exit status of the thread is stored in
+   *THREAD_RETURN, if THREAD_RETURN is not NULL.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
+                                const struct timespec *__abstime);
+#endif
+
+/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN.
+   The resources of TH will therefore be freed immediately when it
+   terminates, instead of waiting for another thread to perform PTHREAD_JOIN
+   on it.  */
+extern int pthread_detach (pthread_t __th) __THROW;
+
+
+/* Obtain the identifier of the current thread.  */
+extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__));
+
+/* Compare two thread identifiers.  */
+extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
+  __THROW __attribute__ ((__const__));
+
+
+/* Thread attribute handling.  */
+
+/* Initialize thread attribute *ATTR with default attributes
+   (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER,
+    no user-provided stack).  */
+extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1));
+
+/* Destroy thread attribute *ATTR.  */
+extern int pthread_attr_destroy (pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get detach state attribute.  */
+extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+                                       int *__detachstate)
+     __THROW __nonnull ((1, 2));
+
+/* Set detach state attribute.  */
+extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
+                                       int __detachstate)
+     __THROW __nonnull ((1));
+
+
+/* Get the size of the guard area created for stack overflow protection.  */
+extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
+                                     size_t *__guardsize)
+     __THROW __nonnull ((1, 2));
+
+/* Set the size of the guard area created for stack overflow protection.  */
+extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
+                                     size_t __guardsize)
+     __THROW __nonnull ((1));
+
+
+/* Return in *PARAM the scheduling parameters of *ATTR.  */
+extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
+                                      struct sched_param *__restrict __param)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM.  */
+extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+                                      const struct sched_param *__restrict
+                                      __param) __THROW __nonnull ((1, 2));
+
+/* Return in *POLICY the scheduling policy of *ATTR.  */
+extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+                                       __attr, int *__restrict __policy)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling policy in *ATTR according to POLICY.  */
+extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
+     __THROW __nonnull ((1));
+
+/* Return in *INHERIT the scheduling inheritance mode of *ATTR.  */
+extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+                                        __attr, int *__restrict __inherit)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling inheritance mode in *ATTR according to INHERIT.  */
+extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
+                                        int __inherit)
+     __THROW __nonnull ((1));
+
+
+/* Return in *SCOPE the scheduling contention scope of *ATTR.  */
+extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+                                 int *__restrict __scope)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling contention scope in *ATTR according to SCOPE.  */
+extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
+     __THROW __nonnull ((1));
+
+/* Return the previously set address for the stack.  */
+extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+                                     __attr, void **__restrict __stackaddr)
+     __THROW __nonnull ((1, 2)) __attribute_deprecated__;
+
+/* Set the starting address of the stack of the thread to be created.
+   Depending on whether the stack grows up or down the value must either
+   be higher or lower than all the address in the memory block.  The
+   minimal size of the block must be PTHREAD_STACK_MIN.  */
+extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
+                                     void *__stackaddr)
+     __THROW __nonnull ((1)) __attribute_deprecated__;
+
+/* Return the currently used minimal stack size.  */
+extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+                                     __attr, size_t *__restrict __stacksize)
+     __THROW __nonnull ((1, 2));
+
+/* Add information about the minimum stack size needed for the thread
+   to be started.  This size must never be less than PTHREAD_STACK_MIN
+   and must also not exceed the system limits.  */
+extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
+                                     size_t __stacksize)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Return the previously set address for the stack.  */
+extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+                                 void **__restrict __stackaddr,
+                                 size_t *__restrict __stacksize)
+     __THROW __nonnull ((1, 2, 3));
+
+/* The following two interfaces are intended to replace the last two.  They
+   require setting the address as well as the size since only setting the
+   address will make the implementation on some architectures impossible.  */
+extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
+                                 size_t __stacksize) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_GNU
+/* Thread created with attribute ATTR will be limited to run only on
+   the processors represented in CPUSET.  */
+extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
+                                       size_t __cpusetsize,
+                                       const cpu_set_t *__cpuset)
+     __THROW __nonnull ((1, 3));
+
+/* Get bit set in CPUSET representing the processors threads created with
+   ATTR can run on.  */
+extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
+                                       size_t __cpusetsize,
+                                       cpu_set_t *__cpuset)
+     __THROW __nonnull ((1, 3));
+
+/* Get the default attributes used by pthread_create in this process.  */
+extern int pthread_getattr_default_np (pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Set the default attributes to be used by pthread_create in this
+   process.  */
+extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Initialize thread attribute *ATTR with attributes corresponding to the
+   already running thread TH.  It shall be called on uninitialized ATTR
+   and destroyed with pthread_attr_destroy when no longer needed.  */
+extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Functions for scheduling control.  */
+
+/* Set the scheduling parameters for TARGET_THREAD according to POLICY
+   and *PARAM.  */
+extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+                                 const struct sched_param *__param)
+     __THROW __nonnull ((3));
+
+/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
+extern int pthread_getschedparam (pthread_t __target_thread,
+                                 int *__restrict __policy,
+                                 struct sched_param *__restrict __param)
+     __THROW __nonnull ((2, 3));
+
+/* Set the scheduling priority for TARGET_THREAD.  */
+extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
+     __THROW;
+
+
+#ifdef __USE_GNU
+/* Get thread name visible in the kernel and its interfaces.  */
+extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
+                              size_t __buflen)
+     __THROW __nonnull ((2));
+
+/* Set thread name visible in the kernel and its interfaces.  */
+extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
+     __THROW __nonnull ((2));
+#endif
+
+
+#ifdef __USE_UNIX98
+/* Determine level of concurrency.  */
+extern int pthread_getconcurrency (void) __THROW;
+
+/* Set new concurrency level to LEVEL.  */
+extern int pthread_setconcurrency (int __level) __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Yield the processor to another thread or process.
+   This function is similar to the POSIX `sched_yield' function but
+   might be differently implemented in the case of a m-on-n thread
+   implementation.  */
+extern int pthread_yield (void) __THROW;
+
+
+/* Limit specified thread TH to run only on the processors represented
+   in CPUSET.  */
+extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
+                                  const cpu_set_t *__cpuset)
+     __THROW __nonnull ((3));
+
+/* Get bit set in CPUSET representing the processors TH can run on.  */
+extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
+                                  cpu_set_t *__cpuset)
+     __THROW __nonnull ((3));
+#endif
+
+
+/* Functions for handling initialization.  */
+
+/* Guarantee that the initialization function INIT_ROUTINE will be called
+   only once, even if pthread_once is executed several times with the
+   same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or
+   extern variable initialized to PTHREAD_ONCE_INIT.
+
+   The initialization functions might throw exception which is why
+   this function is not marked with __THROW.  */
+extern int pthread_once (pthread_once_t *__once_control,
+                        void (*__init_routine) (void)) __nonnull ((1, 2));
+
+
+/* Functions for handling cancellation.
+
+   Note that these functions are explicitly not marked to not throw an
+   exception in C++ code.  If cancellation is implemented by unwinding
+   this is necessary to have the compiler generate the unwind information.  */
+
+/* Set cancelability state of current thread to STATE, returning old
+   state in *OLDSTATE if OLDSTATE is not NULL.  */
+extern int pthread_setcancelstate (int __state, int *__oldstate);
+
+/* Set cancellation state of current thread to TYPE, returning the old
+   type in *OLDTYPE if OLDTYPE is not NULL.  */
+extern int pthread_setcanceltype (int __type, int *__oldtype);
+
+/* Cancel THREAD immediately or at the next possibility.  */
+extern int pthread_cancel (pthread_t __th);
+
+/* Test for pending cancellation for the current thread and terminate
+   the thread as per pthread_exit(PTHREAD_CANCELED) if it has been
+   cancelled.  */
+extern void pthread_testcancel (void);
+
+
+/* Cancellation handling with integration into exception handling.  */
+
+typedef struct
+{
+  struct
+  {
+    __jmp_buf __cancel_jmp_buf;
+    int __mask_was_saved;
+  } __cancel_jmp_buf[1];
+  void *__pad[4];
+} __pthread_unwind_buf_t __attribute__ ((__aligned__));
+
+/* No special attributes by default.  */
+#ifndef __cleanup_fct_attribute
+# define __cleanup_fct_attribute
+#endif
+
+
+/* Structure to hold the cleanup handler information.  */
+struct __pthread_cleanup_frame
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+};
+
+#if defined __GNUC__ && defined __EXCEPTIONS
+# ifdef __cplusplus
+/* Class to handle cancellation handler invocation.  */
+class __pthread_cleanup_class
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+
+ public:
+  __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
+    : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
+  ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
+  void __setdoit (int __newval) { __do_it = __newval; }
+  void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
+                                          &__cancel_type); }
+  void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
+};
+
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+#  define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    __pthread_cleanup_class __clframe (routine, arg)
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+#  define pthread_cleanup_pop(execute) \
+    __clframe.__setdoit (execute);                                           \
+  } while (0)
+
+#  ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#   define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    __pthread_cleanup_class __clframe (routine, arg);                        \
+    __clframe.__defer ()
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#   define pthread_cleanup_pop_restore_np(execute) \
+    __clframe.__restore ();                                                  \
+    __clframe.__setdoit (execute);                                           \
+  } while (0)
+#  endif
+# else
+/* Function called to call the cleanup handler.  As an extern inline
+   function the compiler is free to decide inlining the change when
+   needed or fall back on the copy which must exist somewhere
+   else.  */
+__extern_inline void
+__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
+{
+  if (__frame->__do_it)
+    __frame->__cancel_routine (__frame->__cancel_arg);
+}
+
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+#  define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    struct __pthread_cleanup_frame __clframe                                 \
+      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))                      \
+      = { .__cancel_routine = (routine), .__cancel_arg = (arg),                      \
+         .__do_it = 1 };
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+#  define pthread_cleanup_pop(execute) \
+    __clframe.__do_it = (execute);                                           \
+  } while (0)
+
+#  ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#   define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    struct __pthread_cleanup_frame __clframe                                 \
+      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))                      \
+      = { .__cancel_routine = (routine), .__cancel_arg = (arg),                      \
+         .__do_it = 1 };                                                     \
+    (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,                   \
+                                 &__clframe.__cancel_type)
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#   define pthread_cleanup_pop_restore_np(execute) \
+    (void) pthread_setcanceltype (__clframe.__cancel_type, NULL);            \
+    __clframe.__do_it = (execute);                                           \
+  } while (0)
+#  endif
+# endif
+#else
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+# define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    __pthread_unwind_buf_t __cancel_buf;                                     \
+    void (*__cancel_routine) (void *) = (routine);                           \
+    void *__cancel_arg = (arg);                                                      \
+    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
+                                       __cancel_buf.__cancel_jmp_buf, 0);    \
+    if (__glibc_unlikely (__not_first_call))                                 \
+      {                                                                              \
+       __cancel_routine (__cancel_arg);                                      \
+       __pthread_unwind_next (&__cancel_buf);                                \
+       /* NOTREACHED */                                                      \
+      }                                                                              \
+                                                                             \
+    __pthread_register_cancel (&__cancel_buf);                               \
+    do {
+extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute;
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+# define pthread_cleanup_pop(execute) \
+      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
+    } while (0);                                                             \
+    __pthread_unregister_cancel (&__cancel_buf);                             \
+    if (execute)                                                             \
+      __cancel_routine (__cancel_arg);                                       \
+  } while (0)
+extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
+  __cleanup_fct_attribute;
+
+# ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#  define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    __pthread_unwind_buf_t __cancel_buf;                                     \
+    void (*__cancel_routine) (void *) = (routine);                           \
+    void *__cancel_arg = (arg);                                                      \
+    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
+                                       __cancel_buf.__cancel_jmp_buf, 0);    \
+    if (__glibc_unlikely (__not_first_call))                                 \
+      {                                                                              \
+       __cancel_routine (__cancel_arg);                                      \
+       __pthread_unwind_next (&__cancel_buf);                                \
+       /* NOTREACHED */                                                      \
+      }                                                                              \
+                                                                             \
+    __pthread_register_cancel_defer (&__cancel_buf);                         \
+    do {
+extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute;
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#  define pthread_cleanup_pop_restore_np(execute) \
+      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
+    } while (0);                                                             \
+    __pthread_unregister_cancel_restore (&__cancel_buf);                     \
+    if (execute)                                                             \
+      __cancel_routine (__cancel_arg);                                       \
+  } while (0)
+extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
+  __cleanup_fct_attribute;
+# endif
+
+/* Internal interface to initiate cleanup.  */
+extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute __attribute__ ((__noreturn__))
+# ifndef SHARED
+     __attribute__ ((__weak__))
+# endif
+     ;
+#endif
+
+/* Function used in the macros.  */
+struct __jmp_buf_tag;
+extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL;
+
+
+/* Mutex handling.  */
+
+/* Initialize a mutex.  */
+extern int pthread_mutex_init (pthread_mutex_t *__mutex,
+                              const pthread_mutexattr_t *__mutexattr)
+     __THROW __nonnull ((1));
+
+/* Destroy a mutex.  */
+extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+
+/* Try locking a mutex.  */
+extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+/* Lock a mutex.  */
+extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Wait until lock becomes available, or specified time passes. */
+extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+                                   const struct timespec *__restrict
+                                   __abstime) __THROWNL __nonnull ((1, 2));
+#endif
+
+/* Unlock a mutex.  */
+extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+
+/* Get the priority ceiling of MUTEX.  */
+extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
+                                        __restrict __mutex,
+                                        int *__restrict __prioceiling)
+     __THROW __nonnull ((1, 2));
+
+/* Set the priority ceiling of MUTEX to PRIOCEILING, return old
+   priority ceiling value in *OLD_CEILING.  */
+extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
+                                        int __prioceiling,
+                                        int *__restrict __old_ceiling)
+     __THROW __nonnull ((1, 3));
+
+
+#ifdef __USE_XOPEN2K8
+/* Declare the state protected by MUTEX as consistent.  */
+extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+# ifdef __USE_GNU
+extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+# endif
+#endif
+
+
+/* Functions for handling mutex attributes.  */
+
+/* Initialize mutex attribute object ATTR with default attributes
+   (kind is PTHREAD_MUTEX_TIMED_NP).  */
+extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy mutex attribute object ATTR.  */
+extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+                                        __restrict __attr,
+                                        int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
+                                        int __pshared)
+     __THROW __nonnull ((1));
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* Return in *KIND the mutex kind attribute in *ATTR.  */
+extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+                                     __attr, int *__restrict __kind)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL,
+   PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or
+   PTHREAD_MUTEX_DEFAULT).  */
+extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
+     __THROW __nonnull ((1));
+#endif
+
+/* Return in *PROTOCOL the mutex protocol attribute in *ATTR.  */
+extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __protocol)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either
+   PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT).  */
+extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
+                                         int __protocol)
+     __THROW __nonnull ((1));
+
+/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR.  */
+extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
+                                            __restrict __attr,
+                                            int *__restrict __prioceiling)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING.  */
+extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
+                                            int __prioceiling)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Get the robustness flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
+                                       int *__robustness)
+     __THROW __nonnull ((1, 2));
+# ifdef __USE_GNU
+extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
+                                          int *__robustness)
+     __THROW __nonnull ((1, 2));
+# endif
+
+/* Set the robustness flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
+                                       int __robustness)
+     __THROW __nonnull ((1));
+# ifdef __USE_GNU
+extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
+                                          int __robustness)
+     __THROW __nonnull ((1));
+# endif
+#endif
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Functions for handling read-write locks.  */
+
+/* Initialize read-write lock RWLOCK using attributes ATTR, or use
+   the default values if later is NULL.  */
+extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+                               const pthread_rwlockattr_t *__restrict
+                               __attr) __THROW __nonnull ((1));
+
+/* Destroy read-write lock RWLOCK.  */
+extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
+     __THROW __nonnull ((1));
+
+/* Acquire read lock for RWLOCK.  */
+extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+/* Try to acquire read lock for RWLOCK.  */
+extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
+  __THROWNL __nonnull ((1));
+
+# ifdef __USE_XOPEN2K
+/* Try to acquire read lock for RWLOCK or return after specfied time.  */
+extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+                                      const struct timespec *__restrict
+                                      __abstime) __THROWNL __nonnull ((1, 2));
+# endif
+
+/* Acquire write lock for RWLOCK.  */
+extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+/* Try to acquire write lock for RWLOCK.  */
+extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+# ifdef __USE_XOPEN2K
+/* Try to acquire write lock for RWLOCK or return after specfied time.  */
+extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+                                      const struct timespec *__restrict
+                                      __abstime) __THROWNL __nonnull ((1, 2));
+# endif
+
+/* Unlock RWLOCK.  */
+extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+
+/* Functions for handling read-write lock attributes.  */
+
+/* Initialize attribute object ATTR with default values.  */
+extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy attribute object ATTR.  */
+extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Return current setting of process-shared attribute of ATTR in PSHARED.  */
+extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set process-shared attribute of ATTR to PSHARED.  */
+extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
+                                         int __pshared)
+     __THROW __nonnull ((1));
+
+/* Return current setting of reader/writer preference.  */
+extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __pref)
+     __THROW __nonnull ((1, 2));
+
+/* Set reader/write preference.  */
+extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
+                                         int __pref) __THROW __nonnull ((1));
+#endif
+
+
+/* Functions for handling conditional variables.  */
+
+/* Initialize condition variable COND using attributes ATTR, or use
+   the default values if later is NULL.  */
+extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+                             const pthread_condattr_t *__restrict __cond_attr)
+     __THROW __nonnull ((1));
+
+/* Destroy condition variable COND.  */
+extern int pthread_cond_destroy (pthread_cond_t *__cond)
+     __THROW __nonnull ((1));
+
+/* Wake up one thread waiting for condition variable COND.  */
+extern int pthread_cond_signal (pthread_cond_t *__cond)
+     __THROWNL __nonnull ((1));
+
+/* Wake up all threads waiting for condition variables COND.  */
+extern int pthread_cond_broadcast (pthread_cond_t *__cond)
+     __THROWNL __nonnull ((1));
+
+/* Wait for condition variable COND to be signaled or broadcast.
+   MUTEX is assumed to be locked before.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+                             pthread_mutex_t *__restrict __mutex)
+     __nonnull ((1, 2));
+
+/* Wait for condition variable COND to be signaled or broadcast until
+   ABSTIME.  MUTEX is assumed to be locked before.  ABSTIME is an
+   absolute time specification; zero is the beginning of the epoch
+   (00:00:00 GMT, January 1, 1970).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+                                  pthread_mutex_t *__restrict __mutex,
+                                  const struct timespec *__restrict __abstime)
+     __nonnull ((1, 2, 3));
+
+/* Functions for handling condition variable attributes.  */
+
+/* Initialize condition variable attribute ATTR.  */
+extern int pthread_condattr_init (pthread_condattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy condition variable attribute ATTR.  */
+extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the condition variable attribute ATTR.  */
+extern int pthread_condattr_getpshared (const pthread_condattr_t *
+                                       __restrict __attr,
+                                       int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the condition variable attribute ATTR.  */
+extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
+                                       int __pshared) __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Get the clock selected for the condition variable attribute ATTR.  */
+extern int pthread_condattr_getclock (const pthread_condattr_t *
+                                     __restrict __attr,
+                                     __clockid_t *__restrict __clock_id)
+     __THROW __nonnull ((1, 2));
+
+/* Set the clock selected for the condition variable attribute ATTR.  */
+extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
+                                     __clockid_t __clock_id)
+     __THROW __nonnull ((1));
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* Functions to handle spinlocks.  */
+
+/* Initialize the spinlock LOCK.  If PSHARED is nonzero the spinlock can
+   be shared between different processes.  */
+extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+     __THROW __nonnull ((1));
+
+/* Destroy the spinlock LOCK.  */
+extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
+     __THROW __nonnull ((1));
+
+/* Wait until spinlock LOCK is retrieved.  */
+extern int pthread_spin_lock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+/* Try to lock spinlock LOCK.  */
+extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+/* Release spinlock LOCK.  */
+extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+
+/* Functions to handle barriers.  */
+
+/* Initialize BARRIER with the attributes in ATTR.  The barrier is
+   opened when COUNT waiters arrived.  */
+extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+                                const pthread_barrierattr_t *__restrict
+                                __attr, unsigned int __count)
+     __THROW __nonnull ((1));
+
+/* Destroy a previously dynamically initialized barrier BARRIER.  */
+extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
+     __THROW __nonnull ((1));
+
+/* Wait on barrier BARRIER.  */
+extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
+     __THROWNL __nonnull ((1));
+
+
+/* Initialize barrier attribute ATTR.  */
+extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy previously dynamically initialized barrier attribute ATTR.  */
+extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the barrier attribute ATTR.  */
+extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+                                          __restrict __attr,
+                                          int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the barrier attribute ATTR.  */
+extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
+                                          int __pshared)
+     __THROW __nonnull ((1));
+#endif
+
+
+/* Functions for handling thread-specific data.  */
+
+/* Create a key value identifying a location in the thread-specific
+   data area.  Each thread maintains a distinct thread-specific data
+   area.  DESTR_FUNCTION, if non-NULL, is called with the value
+   associated to that key when the key is destroyed.
+   DESTR_FUNCTION is not called if the value associated is NULL when
+   the key is destroyed.  */
+extern int pthread_key_create (pthread_key_t *__key,
+                              void (*__destr_function) (void *))
+     __THROW __nonnull ((1));
+
+/* Destroy KEY.  */
+extern int pthread_key_delete (pthread_key_t __key) __THROW;
+
+/* Return current value of the thread-specific data slot identified by KEY.  */
+extern void *pthread_getspecific (pthread_key_t __key) __THROW;
+
+/* Store POINTER in the thread-specific data slot identified by KEY. */
+extern int pthread_setspecific (pthread_key_t __key,
+                               const void *__pointer) __THROW ;
+
+
+#ifdef __USE_XOPEN2K
+/* Get ID of CPU-time clock for thread THREAD_ID.  */
+extern int pthread_getcpuclockid (pthread_t __thread_id,
+                                 __clockid_t *__clock_id)
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Install handlers to be called when a new process is created with FORK.
+   The PREPARE handler is called in the parent process just before performing
+   FORK. The PARENT handler is called in the parent process just after FORK.
+   The CHILD handler is called in the child process.  Each of the three
+   handlers can be NULL, meaning that no handler needs to be called at that
+   point.
+   PTHREAD_ATFORK can be called several times, in which case the PREPARE
+   handlers are called in LIFO order (last added with PTHREAD_ATFORK,
+   first called before FORK), and the PARENT and CHILD handlers are called
+   in FIFO (first added, first called).  */
+
+extern int pthread_atfork (void (*__prepare) (void),
+                          void (*__parent) (void),
+                          void (*__child) (void)) __THROW;
+
+
+#ifdef __USE_EXTERN_INLINES
+/* Optimizations.  */
+__extern_inline int
+__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2))
+{
+  return __thread1 == __thread2;
+}
+#endif
+
+__END_DECLS
+
+#endif /* pthread.h */
diff --git a/lib/libdss-include/include/pty.h b/lib/libdss-include/include/pty.h
new file mode 100644 (file)
index 0000000..e466144
--- /dev/null
@@ -0,0 +1,48 @@
+/* Functions for pseudo TTY handling.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PTY_H
+#define _PTY_H 1
+
+#include <features.h>
+
+struct termios;
+struct winsize;
+
+#include <termios.h>
+#include <sys/ioctl.h>
+
+
+__BEGIN_DECLS
+
+/* Create pseudo tty master slave pair with NAME and set terminal
+   attributes according to TERMP and WINP and return handles for both
+   ends in AMASTER and ASLAVE.  */
+extern int openpty (int *__amaster, int *__aslave, char *__name,
+                   const struct termios *__termp,
+                   const struct winsize *__winp) __THROW;
+
+/* Create child process and establish the slave pseudo terminal as the
+   child's controlling terminal.  */
+extern int forkpty (int *__amaster, char *__name,
+                   const struct termios *__termp,
+                   const struct winsize *__winp) __THROW;
+
+__END_DECLS
+
+#endif /* pty.h */
diff --git a/lib/libdss-include/include/pwd.h b/lib/libdss-include/include/pwd.h
new file mode 100644 (file)
index 0000000..07455e7
--- /dev/null
@@ -0,0 +1,189 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 9.2.2 User Database Access      <pwd.h>
+ */
+
+#ifndef        _PWD_H
+#define        _PWD_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif
+
+/* The passwd structure.  */
+struct passwd
+{
+  char *pw_name;               /* Username.  */
+  char *pw_passwd;             /* Password.  */
+  __uid_t pw_uid;              /* User ID.  */
+  __gid_t pw_gid;              /* Group ID.  */
+  char *pw_gecos;              /* Real name.  */
+  char *pw_dir;                        /* Home directory.  */
+  char *pw_shell;              /* Shell program.  */
+};
+
+
+#ifdef __USE_MISC
+# define __need_FILE
+# include <stdio.h>
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Rewind the password-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setpwent (void);
+
+/* Close the password-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endpwent (void);
+
+/* Read an entry from the password-file stream, opening it if necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwent (void);
+#endif
+
+#ifdef __USE_MISC
+/* Read an entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct passwd *fgetpwent (FILE *__stream) __nonnull ((1));
+
+/* Write the given entry onto the given stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putpwent (const struct passwd *__restrict __p,
+                    FILE *__restrict __f);
+#endif
+
+/* Search for an entry with a matching user ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwuid (__uid_t __uid);
+
+/* Search for an entry with a matching username.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwnam (const char *__name) __nonnull ((1));
+
+#ifdef __USE_POSIX
+
+# ifdef __USE_MISC
+/* Reasonable value for the buffer sized used in the reentrant
+   functions below.  But better use `sysconf'.  */
+#  define NSS_BUFLEN_PASSWD    1024
+# endif
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
+
+# ifdef __USE_MISC
+/* This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getpwent_r (struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((1, 2, 4));
+# endif
+
+extern int getpwuid_r (__uid_t __uid,
+                      struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((2, 3, 5));
+
+extern int getpwnam_r (const char *__restrict __name,
+                      struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((1, 2, 3, 5));
+
+
+# ifdef        __USE_MISC
+/* Read an entry from STREAM.  This function is not standardized and
+   probably never will.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetpwent_r (FILE *__restrict __stream,
+                       struct passwd *__restrict __resultbuf,
+                       char *__restrict __buffer, size_t __buflen,
+                       struct passwd **__restrict __result)
+                       __nonnull ((1, 2, 3, 5));
+# endif
+
+#endif /* POSIX or reentrant */
+
+#ifdef __USE_GNU
+/* Re-construct the password-file line for the given uid
+   in the given buffer.  This knows the format that the caller
+   will expect, but this need not be the format of the password file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getpw (__uid_t __uid, char *__buffer);
+#endif
+
+__END_DECLS
+
+#endif /* pwd.h  */
diff --git a/lib/libdss-include/include/rdma/hfi/hfi1_user.h b/lib/libdss-include/include/rdma/hfi/hfi1_user.h
new file mode 100644 (file)
index 0000000..fa77d9a
--- /dev/null
@@ -0,0 +1,427 @@
+/*
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2015 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2015 Intel Corporation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Intel Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * This file contains defines, structures, etc. that are used
+ * to communicate between kernel and user code.
+ */
+
+#ifndef _LINUX__HFI1_USER_H
+#define _LINUX__HFI1_USER_H
+
+#include <linux/types.h>
+
+/*
+ * This version number is given to the driver by the user code during
+ * initialization in the spu_userversion field of hfi1_user_info, so
+ * the driver can check for compatibility with user code.
+ *
+ * The major version changes when data structures change in an incompatible
+ * way. The driver must be the same for initialization to succeed.
+ */
+#define HFI1_USER_SWMAJOR 4
+
+/*
+ * Minor version differences are always compatible
+ * a within a major version, however if user software is larger
+ * than driver software, some new features and/or structure fields
+ * may not be implemented; the user code must deal with this if it
+ * cares, or it must abort after initialization reports the difference.
+ */
+#define HFI1_USER_SWMINOR 0
+
+/*
+ * Set of HW and driver capability/feature bits.
+ * These bit values are used to configure enabled/disabled HW and
+ * driver features. The same set of bits are communicated to user
+ * space.
+ */
+#define HFI1_CAP_DMA_RTAIL        (1UL <<  0) /* Use DMA'ed RTail value */
+#define HFI1_CAP_SDMA             (1UL <<  1) /* Enable SDMA support */
+#define HFI1_CAP_SDMA_AHG         (1UL <<  2) /* Enable SDMA AHG support */
+#define HFI1_CAP_EXTENDED_PSN     (1UL <<  3) /* Enable Extended PSN support */
+#define HFI1_CAP_HDRSUPP          (1UL <<  4) /* Enable Header Suppression */
+/* 1UL << 5 unused */
+#define HFI1_CAP_USE_SDMA_HEAD    (1UL <<  6) /* DMA Hdr Q tail vs. use CSR */
+#define HFI1_CAP_MULTI_PKT_EGR    (1UL <<  7) /* Enable multi-packet Egr buffs*/
+#define HFI1_CAP_NODROP_RHQ_FULL  (1UL <<  8) /* Don't drop on Hdr Q full */
+#define HFI1_CAP_NODROP_EGR_FULL  (1UL <<  9) /* Don't drop on EGR buffs full */
+#define HFI1_CAP_TID_UNMAP        (1UL << 10) /* Enable Expected TID caching */
+#define HFI1_CAP_PRINT_UNIMPL     (1UL << 11) /* Show for unimplemented feats */
+#define HFI1_CAP_ALLOW_PERM_JKEY  (1UL << 12) /* Allow use of permissive JKEY */
+#define HFI1_CAP_NO_INTEGRITY     (1UL << 13) /* Enable ctxt integrity checks */
+#define HFI1_CAP_PKEY_CHECK       (1UL << 14) /* Enable ctxt PKey checking */
+#define HFI1_CAP_STATIC_RATE_CTRL (1UL << 15) /* Allow PBC.StaticRateControl */
+/* 1UL << 16 unused */
+#define HFI1_CAP_SDMA_HEAD_CHECK  (1UL << 17) /* SDMA head checking */
+#define HFI1_CAP_EARLY_CREDIT_RETURN (1UL << 18) /* early credit return */
+
+#define HFI1_RCVHDR_ENTSIZE_2    (1UL << 0)
+#define HFI1_RCVHDR_ENTSIZE_16   (1UL << 1)
+#define HFI1_RCVDHR_ENTSIZE_32   (1UL << 2)
+
+/*
+ * If the unit is specified via open, HFI choice is fixed.  If port is
+ * specified, it's also fixed.  Otherwise we try to spread contexts
+ * across ports and HFIs, using different algorithms.  WITHIN is
+ * the old default, prior to this mechanism.
+ */
+#define HFI1_ALG_ACROSS 0 /* round robin contexts across HFIs, then
+                         * ports; this is the default */
+#define HFI1_ALG_WITHIN 1 /* use all contexts on an HFI (round robin
+                         * active ports within), then next HFI */
+#define HFI1_ALG_COUNT  2 /* number of algorithm choices */
+
+
+/* User commands. */
+#define HFI1_CMD_ASSIGN_CTXT     1     /* allocate HFI and context */
+#define HFI1_CMD_CTXT_INFO       2     /* find out what resources we got */
+#define HFI1_CMD_USER_INFO       3     /* set up userspace */
+#define HFI1_CMD_TID_UPDATE      4     /* update expected TID entries */
+#define HFI1_CMD_TID_FREE        5     /* free expected TID entries */
+#define HFI1_CMD_CREDIT_UPD      6     /* force an update of PIO credit */
+#define HFI1_CMD_SDMA_STATUS_UPD 7       /* force update of SDMA status ring */
+
+#define HFI1_CMD_RECV_CTRL       8     /* control receipt of packets */
+#define HFI1_CMD_POLL_TYPE       9     /* set the kind of polling we want */
+#define HFI1_CMD_ACK_EVENT       10    /* ack & clear user status bits */
+#define HFI1_CMD_SET_PKEY        11      /* set context's pkey */
+#define HFI1_CMD_CTXT_RESET      12      /* reset context's HW send context */
+/* separate EPROM commands from normal PSM commands */
+#define HFI1_CMD_EP_INFO         64      /* read EPROM device ID */
+#define HFI1_CMD_EP_ERASE_CHIP   65      /* erase whole EPROM */
+#define HFI1_CMD_EP_ERASE_P0     66      /* erase EPROM partition 0 */
+#define HFI1_CMD_EP_ERASE_P1     67      /* erase EPROM partition 1 */
+#define HFI1_CMD_EP_READ_P0      68      /* read EPROM partition 0 */
+#define HFI1_CMD_EP_READ_P1      69      /* read EPROM partition 1 */
+#define HFI1_CMD_EP_WRITE_P0     70      /* write EPROM partition 0 */
+#define HFI1_CMD_EP_WRITE_P1     71      /* write EPROM partition 1 */
+
+#define _HFI1_EVENT_FROZEN_BIT       0
+#define _HFI1_EVENT_LINKDOWN_BIT     1
+#define _HFI1_EVENT_LID_CHANGE_BIT   2
+#define _HFI1_EVENT_LMC_CHANGE_BIT   3
+#define _HFI1_EVENT_SL2VL_CHANGE_BIT 4
+#define _HFI1_MAX_EVENT_BIT _HFI1_EVENT_SL2VL_CHANGE_BIT
+
+#define HFI1_EVENT_FROZEN                (1UL << _HFI1_EVENT_FROZEN_BIT)
+#define HFI1_EVENT_LINKDOWN_BIT                (1UL << _HFI1_EVENT_LINKDOWN_BIT)
+#define HFI1_EVENT_LID_CHANGE_BIT      (1UL << _HFI1_EVENT_LID_CHANGE_BIT)
+#define HFI1_EVENT_LMC_CHANGE_BIT      (1UL << _HFI1_EVENT_LMC_CHANGE_BIT)
+#define HFI1_EVENT_SL2VL_CHANGE_BIT    (1UL << _HFI1_EVENT_SL2VL_CHANGE_BIT)
+
+/*
+ * These are the status bits readable (in ASCII form, 64bit value)
+ * from the "status" sysfs file.  For binary compatibility, values
+ * must remain as is; removed states can be reused for different
+ * purposes.
+ */
+#define HFI1_STATUS_INITTED       0x1    /* basic initialization done */
+/* Chip has been found and initialized */
+#define HFI1_STATUS_CHIP_PRESENT 0x20
+/* IB link is at ACTIVE, usable for data traffic */
+#define HFI1_STATUS_IB_READY     0x40
+/* link is configured, LID, MTU, etc. have been set */
+#define HFI1_STATUS_IB_CONF      0x80
+/* A Fatal hardware error has occurred. */
+#define HFI1_STATUS_HWERROR     0x200
+
+/*
+ * Number of supported shared contexts.
+ * This is the maximum number of software contexts that can share
+ * a hardware send/receive context.
+ */
+#define HFI1_MAX_SHARED_CTXTS 8
+
+/*
+ * Poll types
+ */
+#define HFI1_POLL_TYPE_ANYRCV     0x0
+#define HFI1_POLL_TYPE_URGENT     0x1
+
+/*
+ * This structure is passed to the driver to tell it where
+ * user code buffers are, sizes, etc.   The offsets and sizes of the
+ * fields must remain unchanged, for binary compatibility.  It can
+ * be extended, if userversion is changed so user code can tell, if needed
+ */
+struct hfi1_user_info {
+       /*
+        * version of user software, to detect compatibility issues.
+        * Should be set to HFI1_USER_SWVERSION.
+        */
+       __u32 userversion;
+       __u16 pad;
+       /* HFI selection algorithm, if unit has not selected */
+       __u16 hfi1_alg;
+       /*
+        * If two or more processes wish to share a context, each process
+        * must set the subcontext_cnt and subcontext_id to the same
+        * values.  The only restriction on the subcontext_id is that
+        * it be unique for a given node.
+        */
+       __u16 subctxt_cnt;
+       __u16 subctxt_id;
+       /* 128bit UUID passed in by PSM. */
+       __u8 uuid[16];
+};
+
+struct hfi1_ctxt_info {
+       __u64 runtime_flags;    /* chip/drv runtime flags (HFI1_CAP_*) */
+       __u32 rcvegr_size;      /* size of each eager buffer */
+       __u16 num_active;       /* number of active units */
+       __u16 unit;             /* unit (chip) assigned to caller */
+       __u16 ctxt;             /* ctxt on unit assigned to caller */
+       __u16 subctxt;          /* subctxt on unit assigned to caller */
+       __u16 rcvtids;          /* number of Rcv TIDs for this context */
+       __u16 credits;          /* number of PIO credits for this context */
+       __u16 numa_node;        /* NUMA node of the assigned device */
+       __u16 rec_cpu;          /* cpu # for affinity (0xffff if none) */
+       __u16 send_ctxt;        /* send context in use by this user context */
+       __u16 egrtids;          /* number of RcvArray entries for Eager Rcvs */
+       __u16 rcvhdrq_cnt;      /* number of RcvHdrQ entries */
+       __u16 rcvhdrq_entsize;  /* size (in bytes) for each RcvHdrQ entry */
+       __u16 sdma_ring_size;   /* number of entries in SDMA request ring */
+};
+
+struct hfi1_tid_info {
+       /* virtual address of first page in transfer */
+       __u64 vaddr;
+       /* pointer to tid array. this array is big enough */
+       __u64 tidlist;
+       /* number of tids programmed by this request */
+       __u32 tidcnt;
+       /* length of transfer buffer programmed by this request */
+       __u32 length;
+       /*
+        * pointer to bitmap of TIDs used for this call;
+        * checked for being large enough at open
+        */
+       __u64 tidmap;
+};
+
+struct hfi1_cmd {
+       __u32 type;        /* command type */
+       __u32 len;         /* length of struct pointed to by add */
+       __u64 addr;        /* pointer to user structure */
+};
+
+enum hfi1_sdma_comp_state {
+       FREE = 0,
+       QUEUED,
+       COMPLETE,
+       ERROR
+};
+
+/*
+ * SDMA completion ring entry
+ */
+struct hfi1_sdma_comp_entry {
+       __u32 status;
+       __u32 errcode;
+};
+
+/*
+ * Device status and notifications from driver to user-space.
+ */
+struct hfi1_status {
+       __u64 dev;      /* device/hw status bits */
+       __u64 port;     /* port state and status bits */
+       char freezemsg[0];
+};
+
+/*
+ * This structure is returned by the driver immediately after
+ * open to get implementation-specific info, and info specific to this
+ * instance.
+ *
+ * This struct must have explicit pad fields where type sizes
+ * may result in different alignments between 32 and 64 bit
+ * programs, since the 64 bit * bit kernel requires the user code
+ * to have matching offsets
+ */
+struct hfi1_base_info {
+       /* version of hardware, for feature checking. */
+       __u32 hw_version;
+       /* version of software, for feature checking. */
+       __u32 sw_version;
+       /* Job key */
+       __u16 jkey;
+       __u16 padding1;
+       /*
+        * The special QP (queue pair) value that identifies PSM
+        * protocol packet from standard IB packets.
+        */
+       __u32 bthqp;
+       /* PIO credit return address, */
+       __u64 sc_credits_addr;
+       /*
+        * Base address of write-only pio buffers for this process.
+        * Each buffer has sendpio_credits*64 bytes.
+        */
+       __u64 pio_bufbase_sop;
+       /*
+        * Base address of write-only pio buffers for this process.
+        * Each buffer has sendpio_credits*64 bytes.
+        */
+       __u64 pio_bufbase;
+       /* address where receive buffer queue is mapped into */
+       __u64 rcvhdr_bufbase;
+       /* base address of Eager receive buffers. */
+       __u64 rcvegr_bufbase;
+       /* base address of SDMA completion ring */
+       __u64 sdma_comp_bufbase;
+       /*
+        * User register base for init code, not to be used directly by
+        * protocol or applications.  Always maps real chip register space.
+        * the register addresses are:
+        * ur_rcvhdrhead, ur_rcvhdrtail, ur_rcvegrhead, ur_rcvegrtail,
+        * ur_rcvtidflow
+        */
+       __u64 user_regbase;
+       /* notification events */
+       __u64 events_bufbase;
+       /* status page */
+       __u64 status_bufbase;
+       /* rcvhdrtail update */
+       __u64 rcvhdrtail_base;
+       /*
+        * shared memory pages for subctxts if ctxt is shared; these cover
+        * all the processes in the group sharing a single context.
+        * all have enough space for the num_subcontexts value on this job.
+        */
+       __u64 subctxt_uregbase;
+       __u64 subctxt_rcvegrbuf;
+       __u64 subctxt_rcvhdrbuf;
+};
+
+enum sdma_req_opcode {
+       EXPECTED = 0,
+       EAGER
+};
+
+#define HFI1_SDMA_REQ_VERSION_MASK 0xF
+#define HFI1_SDMA_REQ_VERSION_SHIFT 0x0
+#define HFI1_SDMA_REQ_OPCODE_MASK 0xF
+#define HFI1_SDMA_REQ_OPCODE_SHIFT 0x4
+#define HFI1_SDMA_REQ_IOVCNT_MASK 0xFF
+#define HFI1_SDMA_REQ_IOVCNT_SHIFT 0x8
+
+struct sdma_req_info {
+       /*
+        * bits 0-3 - version (currently unused)
+        * bits 4-7 - opcode (enum sdma_req_opcode)
+        * bits 8-15 - io vector count
+        */
+       __u16 ctrl;
+       /*
+        * Number of fragments contained in this request.
+        * User-space has already computed how many
+        * fragment-sized packet the user buffer will be
+        * split into.
+        */
+       __u16 npkts;
+       /*
+        * Size of each fragment the user buffer will be
+        * split into.
+        */
+       __u16 fragsize;
+       /*
+        * Index of the slot in the SDMA completion ring
+        * this request should be using. User-space is
+        * in charge of managing its own ring.
+        */
+       __u16 comp_idx;
+} __attribute__((packed));
+
+/*
+ * SW KDETH header.
+ * swdata is SW defined portion.
+ */
+struct hfi1_kdeth_header {
+       __le32 ver_tid_offset;
+       __le16 jkey;
+       __le16 hcrc;
+       __le32 swdata[7];
+} __attribute__((packed));
+
+/*
+ * Structure describing the headers that User space uses. The
+ * structure above is a subset of this one.
+ */
+struct hfi1_pkt_header {
+       __le16 pbc[4];
+       __be16 lrh[4];
+       __be32 bth[3];
+       struct hfi1_kdeth_header kdeth;
+} __attribute__((packed));
+
+
+/*
+ * The list of usermode accessible registers.
+ */
+enum hfi1_ureg {
+       /* (RO)  DMA RcvHdr to be used next. */
+       ur_rcvhdrtail = 0,
+       /* (RW)  RcvHdr entry to be processed next by host. */
+       ur_rcvhdrhead = 1,
+       /* (RO)  Index of next Eager index to use. */
+       ur_rcvegrindextail = 2,
+       /* (RW)  Eager TID to be processed next */
+       ur_rcvegrindexhead = 3,
+       /* (RO)  Receive Eager Offset Tail */
+       ur_rcvegroffsettail = 4,
+       /* For internal use only; max register number. */
+       ur_maxreg,
+       /* (RW)  Receive TID flow table */
+       ur_rcvtidflowtable = 256
+};
+
+#endif /* _LINIUX__HFI1_USER_H */
diff --git a/lib/libdss-include/include/rdma/ib_user_cm.h b/lib/libdss-include/include/rdma/ib_user_cm.h
new file mode 100644 (file)
index 0000000..f79014a
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_CM_H
+#define IB_USER_CM_H
+
+#include <linux/types.h>
+#include <rdma/ib_user_sa.h>
+
+#define IB_USER_CM_ABI_VERSION 5
+
+enum {
+       IB_USER_CM_CMD_CREATE_ID,
+       IB_USER_CM_CMD_DESTROY_ID,
+       IB_USER_CM_CMD_ATTR_ID,
+
+       IB_USER_CM_CMD_LISTEN,
+       IB_USER_CM_CMD_NOTIFY,
+
+       IB_USER_CM_CMD_SEND_REQ,
+       IB_USER_CM_CMD_SEND_REP,
+       IB_USER_CM_CMD_SEND_RTU,
+       IB_USER_CM_CMD_SEND_DREQ,
+       IB_USER_CM_CMD_SEND_DREP,
+       IB_USER_CM_CMD_SEND_REJ,
+       IB_USER_CM_CMD_SEND_MRA,
+       IB_USER_CM_CMD_SEND_LAP,
+       IB_USER_CM_CMD_SEND_APR,
+       IB_USER_CM_CMD_SEND_SIDR_REQ,
+       IB_USER_CM_CMD_SEND_SIDR_REP,
+
+       IB_USER_CM_CMD_EVENT,
+       IB_USER_CM_CMD_INIT_QP_ATTR,
+};
+/*
+ * command ABI structures.
+ */
+struct ib_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct ib_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+};
+
+struct ib_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct ib_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct ib_ucm_attr_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_attr_id_resp {
+       __be64 service_id;
+       __be64 service_mask;
+       __be32 local_id;
+       __be32 remote_id;
+};
+
+struct ib_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct ib_ucm_listen {
+       __be64 service_id;
+       __be64 service_mask;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct ib_ucm_private_data {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_req {
+       __u32 id;
+       __u32 qpn;
+       __u32 qp_type;
+       __u32 psn;
+       __be64 sid;
+       __u64 data;
+       __u64 primary_path;
+       __u64 alternate_path;
+       __u8  len;
+       __u8  peer_to_peer;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  remote_cm_response_timeout;
+       __u8  flow_control;
+       __u8  local_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  max_cm_retries;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rep {
+       __u64 uid;
+       __u64 data;
+       __u32 id;
+       __u32 qpn;
+       __u32 psn;
+       __u8  len;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_info {
+       __u32 id;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_mra {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  timeout;
+       __u8  reserved[2];
+};
+
+struct ib_ucm_lap {
+       __u64 path;
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_sidr_req {
+       __u32 id;
+       __u32 timeout;
+       __be64 sid;
+       __u64 data;
+       __u64 path;
+       __u16 reserved_pkey;
+       __u8  len;
+       __u8  max_cm_retries;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_sidr_rep {
+       __u32 id;
+       __u32 qpn;
+       __u32 qkey;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+/*
+ * event notification ABI structures.
+ */
+struct ib_ucm_event_get {
+       __u64 response;
+       __u64 data;
+       __u64 info;
+       __u8  data_len;
+       __u8  info_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_req_event_resp {
+       struct ib_user_path_rec primary_path;
+       struct ib_user_path_rec alternate_path;
+       __be64                 remote_ca_guid;
+       __u32                  remote_qkey;
+       __u32                  remote_qpn;
+       __u32                  qp_type;
+       __u32                  starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  local_cm_response_timeout;
+       __u8  flow_control;
+       __u8  remote_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  port;
+       __u8  reserved[7];
+};
+
+struct ib_ucm_rep_event_resp {
+       __be64 remote_ca_guid;
+       __u32 remote_qkey;
+       __u32 remote_qpn;
+       __u32 starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rej_event_resp {
+       __u32 reason;
+       /* ari in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_mra_event_resp {
+       __u8  timeout;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_lap_event_resp {
+       struct ib_user_path_rec path;
+};
+
+struct ib_ucm_apr_event_resp {
+       __u32 status;
+       /* apr info in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_sidr_req_event_resp {
+       __u16 pkey;
+       __u8  port;
+       __u8  reserved;
+};
+
+struct ib_ucm_sidr_rep_event_resp {
+       __u32 status;
+       __u32 qkey;
+       __u32 qpn;
+       /* info in ib_ucm_event_get info field. */
+};
+
+#define IB_UCM_PRES_DATA      0x01
+#define IB_UCM_PRES_INFO      0x02
+#define IB_UCM_PRES_PRIMARY   0x04
+#define IB_UCM_PRES_ALTERNATE 0x08
+
+struct ib_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 present;
+       __u32 reserved;
+       union {
+               struct ib_ucm_req_event_resp req_resp;
+               struct ib_ucm_rep_event_resp rep_resp;
+               struct ib_ucm_rej_event_resp rej_resp;
+               struct ib_ucm_mra_event_resp mra_resp;
+               struct ib_ucm_lap_event_resp lap_resp;
+               struct ib_ucm_apr_event_resp apr_resp;
+
+               struct ib_ucm_sidr_req_event_resp sidr_req_resp;
+               struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
+
+               __u32                             send_status;
+       } u;
+};
+
+#endif /* IB_USER_CM_H */
diff --git a/lib/libdss-include/include/rdma/ib_user_mad.h b/lib/libdss-include/include/rdma/ib_user_mad.h
new file mode 100644 (file)
index 0000000..09f809f
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_MAD_H
+#define IB_USER_MAD_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_MAD_ABI_VERSION        5
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ */
+
+/**
+ * ib_user_mad_hdr_old - Old version of MAD packet header without pkey_index
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ */
+struct ib_user_mad_hdr_old {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+};
+
+/**
+ * ib_user_mad_hdr - MAD packet header
+ *   This layout allows specifying/receiving the P_Key index.  To use
+ *   this capability, an application must call the
+ *   IB_USER_MAD_ENABLE_PKEY ioctl on the user MAD file handle before
+ *   any other actions with the file handle.
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ * @pkey_index - P_Key index
+ */
+struct ib_user_mad_hdr {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+       __u16   pkey_index;
+       __u8    reserved[6];
+};
+
+/**
+ * ib_user_mad - MAD packet
+ * @hdr - MAD packet header
+ * @data - Contents of MAD
+ *
+ */
+struct ib_user_mad {
+       struct ib_user_mad_hdr hdr;
+       __u64   data[0];
+};
+
+/*
+ * Earlier versions of this interface definition declared the
+ * method_mask[] member as an array of __u32 but treated it as a
+ * bitmap made up of longs in the kernel.  This ambiguity meant that
+ * 32-bit big-endian applications that can run on both 32-bit and
+ * 64-bit kernels had no consistent ABI to rely on, and 64-bit
+ * big-endian applications that treated method_mask as being made up
+ * of 32-bit words would have their bitmap misinterpreted.
+ *
+ * To clear up this confusion, we change the declaration of
+ * method_mask[] to use unsigned long and handle the conversion from
+ * 32-bit userspace to 64-bit kernel for big-endian systems in the
+ * compat_ioctl method.  Unfortunately, to keep the structure layout
+ * the same, we need the method_mask[] array to be aligned only to 4
+ * bytes even when long is 64 bits, which forces us into this ugly
+ * typedef.
+ */
+typedef unsigned long __attribute__((aligned(4))) packed_ulong;
+#define IB_USER_MAD_LONGS_PER_METHOD_MASK (128 / (8 * sizeof (long)))
+
+/**
+ * ib_user_mad_reg_req - MAD registration request
+ * @id - Set by the kernel; used to identify agent in future requests.
+ * @qpn - Queue pair number; must be 0 or 1.
+ * @method_mask - The caller will receive unsolicited MADs for any method
+ *   where @method_mask = 1.
+ * @mgmt_class - Indicates which management class of MADs should be receive
+ *   by the caller.  This field is only required if the user wishes to
+ *   receive unsolicited MADs, otherwise it should be 0.
+ * @mgmt_class_version - Indicates which version of MADs for the given
+ *   management class to receive.
+ * @oui: Indicates IEEE OUI when mgmt_class is a vendor class
+ *   in the range from 0x30 to 0x4f. Otherwise not used.
+ * @rmpp_version: If set, indicates the RMPP version used.
+ *
+ */
+struct ib_user_mad_reg_req {
+       __u32   id;
+       packed_ulong method_mask[IB_USER_MAD_LONGS_PER_METHOD_MASK];
+       __u8    qpn;
+       __u8    mgmt_class;
+       __u8    mgmt_class_version;
+       __u8    oui[3];
+       __u8    rmpp_version;
+};
+
+/**
+ * ib_user_mad_reg_req2 - MAD registration request
+ *
+ * @id                 - Set by the _kernel_; used by userspace to identify the
+ *                       registered agent in future requests.
+ * @qpn                - Queue pair number; must be 0 or 1.
+ * @mgmt_class         - Indicates which management class of MADs should be
+ *                       receive by the caller.  This field is only required if
+ *                       the user wishes to receive unsolicited MADs, otherwise
+ *                       it should be 0.
+ * @mgmt_class_version - Indicates which version of MADs for the given
+ *                       management class to receive.
+ * @res                - Ignored.
+ * @flags              - additional registration flags; Must be in the set of
+ *                       flags defined in IB_USER_MAD_REG_FLAGS_CAP
+ * @method_mask        - The caller wishes to receive unsolicited MADs for the
+ *                       methods whose bit(s) is(are) set.
+ * @oui                - Indicates IEEE OUI to use when mgmt_class is a vendor
+ *                       class in the range from 0x30 to 0x4f. Otherwise not
+ *                       used.
+ * @rmpp_version       - If set, indicates the RMPP version to use.
+ */
+enum {
+       IB_USER_MAD_USER_RMPP = (1 << 0),
+};
+#define IB_USER_MAD_REG_FLAGS_CAP (IB_USER_MAD_USER_RMPP)
+struct ib_user_mad_reg_req2 {
+       __u32   id;
+       __u32   qpn;
+       __u8    mgmt_class;
+       __u8    mgmt_class_version;
+       __u16   res;
+       __u32   flags;
+       __u64   method_mask[2];
+       __u32   oui;
+       __u8    rmpp_version;
+       __u8    reserved[3];
+};
+
+#define IB_IOCTL_MAGIC         0x1b
+
+#define IB_USER_MAD_REGISTER_AGENT     _IOWR(IB_IOCTL_MAGIC, 1, \
+                                             struct ib_user_mad_reg_req)
+
+#define IB_USER_MAD_UNREGISTER_AGENT   _IOW(IB_IOCTL_MAGIC, 2, __u32)
+
+#define IB_USER_MAD_ENABLE_PKEY                _IO(IB_IOCTL_MAGIC, 3)
+
+#define IB_USER_MAD_REGISTER_AGENT2     _IOWR(IB_IOCTL_MAGIC, 4, \
+                                             struct ib_user_mad_reg_req2)
+
+#endif /* IB_USER_MAD_H */
diff --git a/lib/libdss-include/include/rdma/ib_user_sa.h b/lib/libdss-include/include/rdma/ib_user_sa.h
new file mode 100644 (file)
index 0000000..cfc7c9b
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_SA_H
+#define IB_USER_SA_H
+
+#include <linux/types.h>
+
+enum {
+       IB_PATH_GMP             = 1,
+       IB_PATH_PRIMARY         = (1<<1),
+       IB_PATH_ALTERNATE       = (1<<2),
+       IB_PATH_OUTBOUND        = (1<<3),
+       IB_PATH_INBOUND         = (1<<4),
+       IB_PATH_INBOUND_REVERSE = (1<<5),
+       IB_PATH_BIDIRECTIONAL   = IB_PATH_OUTBOUND | IB_PATH_INBOUND_REVERSE
+};
+
+struct ib_path_rec_data {
+       __u32   flags;
+       __u32   reserved;
+       __u32   path_rec[16];
+};
+
+struct ib_user_path_rec {
+       __u8    dgid[16];
+       __u8    sgid[16];
+       __be16  dlid;
+       __be16  slid;
+       __u32   raw_traffic;
+       __be32  flow_label;
+       __u32   reversible;
+       __u32   mtu;
+       __be16  pkey;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    numb_path;
+       __u8    sl;
+       __u8    mtu_selector;
+       __u8    rate_selector;
+       __u8    rate;
+       __u8    packet_life_time_selector;
+       __u8    packet_life_time;
+       __u8    preference;
+};
+
+#endif /* IB_USER_SA_H */
diff --git a/lib/libdss-include/include/rdma/ib_user_verbs.h b/lib/libdss-include/include/rdma/ib_user_verbs.h
new file mode 100644 (file)
index 0000000..8126c14
--- /dev/null
@@ -0,0 +1,948 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
+ * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
+ * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_VERBS_H
+#define IB_USER_VERBS_H
+
+#include <linux/types.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_VERBS_ABI_VERSION      6
+#define IB_USER_VERBS_CMD_THRESHOLD    50
+
+enum {
+       IB_USER_VERBS_CMD_GET_CONTEXT,
+       IB_USER_VERBS_CMD_QUERY_DEVICE,
+       IB_USER_VERBS_CMD_QUERY_PORT,
+       IB_USER_VERBS_CMD_ALLOC_PD,
+       IB_USER_VERBS_CMD_DEALLOC_PD,
+       IB_USER_VERBS_CMD_CREATE_AH,
+       IB_USER_VERBS_CMD_MODIFY_AH,
+       IB_USER_VERBS_CMD_QUERY_AH,
+       IB_USER_VERBS_CMD_DESTROY_AH,
+       IB_USER_VERBS_CMD_REG_MR,
+       IB_USER_VERBS_CMD_REG_SMR,
+       IB_USER_VERBS_CMD_REREG_MR,
+       IB_USER_VERBS_CMD_QUERY_MR,
+       IB_USER_VERBS_CMD_DEREG_MR,
+       IB_USER_VERBS_CMD_ALLOC_MW,
+       IB_USER_VERBS_CMD_BIND_MW,
+       IB_USER_VERBS_CMD_DEALLOC_MW,
+       IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
+       IB_USER_VERBS_CMD_CREATE_CQ,
+       IB_USER_VERBS_CMD_RESIZE_CQ,
+       IB_USER_VERBS_CMD_DESTROY_CQ,
+       IB_USER_VERBS_CMD_POLL_CQ,
+       IB_USER_VERBS_CMD_PEEK_CQ,
+       IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
+       IB_USER_VERBS_CMD_CREATE_QP,
+       IB_USER_VERBS_CMD_QUERY_QP,
+       IB_USER_VERBS_CMD_MODIFY_QP,
+       IB_USER_VERBS_CMD_DESTROY_QP,
+       IB_USER_VERBS_CMD_POST_SEND,
+       IB_USER_VERBS_CMD_POST_RECV,
+       IB_USER_VERBS_CMD_ATTACH_MCAST,
+       IB_USER_VERBS_CMD_DETACH_MCAST,
+       IB_USER_VERBS_CMD_CREATE_SRQ,
+       IB_USER_VERBS_CMD_MODIFY_SRQ,
+       IB_USER_VERBS_CMD_QUERY_SRQ,
+       IB_USER_VERBS_CMD_DESTROY_SRQ,
+       IB_USER_VERBS_CMD_POST_SRQ_RECV,
+       IB_USER_VERBS_CMD_OPEN_XRCD,
+       IB_USER_VERBS_CMD_CLOSE_XRCD,
+       IB_USER_VERBS_CMD_CREATE_XSRQ,
+       IB_USER_VERBS_CMD_OPEN_QP,
+};
+
+enum {
+       IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,
+       IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,
+       IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,
+       IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
+       IB_USER_VERBS_EX_CMD_DESTROY_FLOW,
+};
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ * Specifically:
+ *  - Do not use pointer types -- pass pointers in __u64 instead.
+ *  - Make sure that any structure larger than 4 bytes is padded to a
+ *    multiple of 8 bytes.  Otherwise the structure size will be
+ *    different between 32-bit and 64-bit architectures.
+ */
+
+struct ib_uverbs_async_event_desc {
+       __u64 element;
+       __u32 event_type;       /* enum ib_event_type */
+       __u32 reserved;
+};
+
+struct ib_uverbs_comp_event_desc {
+       __u64 cq_handle;
+};
+
+/*
+ * All commands from userspace should start with a __u32 command field
+ * followed by __u16 in_words and out_words fields (which give the
+ * length of the command block and response buffer if any in 32-bit
+ * words).  The kernel driver will read these fields first and read
+ * the rest of the command struct based on these value.
+ */
+
+#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
+#define IB_USER_VERBS_CMD_FLAGS_MASK 0xff000000u
+#define IB_USER_VERBS_CMD_FLAGS_SHIFT 24
+
+#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80
+
+struct ib_uverbs_cmd_hdr {
+       __u32 command;
+       __u16 in_words;
+       __u16 out_words;
+};
+
+struct ib_uverbs_ex_cmd_hdr {
+       __u64 response;
+       __u16 provider_in_words;
+       __u16 provider_out_words;
+       __u32 cmd_hdr_reserved;
+};
+
+struct ib_uverbs_get_context {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_get_context_resp {
+       __u32 async_fd;
+       __u32 num_comp_vectors;
+};
+
+struct ib_uverbs_query_device {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_device_resp {
+       __u64 fw_ver;
+       __be64 node_guid;
+       __be64 sys_image_guid;
+       __u64 max_mr_size;
+       __u64 page_size_cap;
+       __u32 vendor_id;
+       __u32 vendor_part_id;
+       __u32 hw_ver;
+       __u32 max_qp;
+       __u32 max_qp_wr;
+       __u32 device_cap_flags;
+       __u32 max_sge;
+       __u32 max_sge_rd;
+       __u32 max_cq;
+       __u32 max_cqe;
+       __u32 max_mr;
+       __u32 max_pd;
+       __u32 max_qp_rd_atom;
+       __u32 max_ee_rd_atom;
+       __u32 max_res_rd_atom;
+       __u32 max_qp_init_rd_atom;
+       __u32 max_ee_init_rd_atom;
+       __u32 atomic_cap;
+       __u32 max_ee;
+       __u32 max_rdd;
+       __u32 max_mw;
+       __u32 max_raw_ipv6_qp;
+       __u32 max_raw_ethy_qp;
+       __u32 max_mcast_grp;
+       __u32 max_mcast_qp_attach;
+       __u32 max_total_mcast_qp_attach;
+       __u32 max_ah;
+       __u32 max_fmr;
+       __u32 max_map_per_fmr;
+       __u32 max_srq;
+       __u32 max_srq_wr;
+       __u32 max_srq_sge;
+       __u16 max_pkeys;
+       __u8  local_ca_ack_delay;
+       __u8  phys_port_cnt;
+       __u8  reserved[4];
+};
+
+struct ib_uverbs_ex_query_device {
+       __u32 comp_mask;
+       __u32 reserved;
+};
+
+struct ib_uverbs_odp_caps {
+       __u64 general_caps;
+       struct {
+               __u32 rc_odp_caps;
+               __u32 uc_odp_caps;
+               __u32 ud_odp_caps;
+       } per_transport_caps;
+       __u32 reserved;
+};
+
+struct ib_uverbs_ex_query_device_resp {
+       struct ib_uverbs_query_device_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+       struct ib_uverbs_odp_caps odp_caps;
+       __u64 timestamp_mask;
+       __u64 hca_core_clock; /* in KHZ */
+};
+
+struct ib_uverbs_query_port {
+       __u64 response;
+       __u8  port_num;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_port_resp {
+       __u32 port_cap_flags;
+       __u32 max_msg_sz;
+       __u32 bad_pkey_cntr;
+       __u32 qkey_viol_cntr;
+       __u32 gid_tbl_len;
+       __u16 pkey_tbl_len;
+       __u16 lid;
+       __u16 sm_lid;
+       __u8  state;
+       __u8  max_mtu;
+       __u8  active_mtu;
+       __u8  lmc;
+       __u8  max_vl_num;
+       __u8  sm_sl;
+       __u8  subnet_timeout;
+       __u8  init_type_reply;
+       __u8  active_width;
+       __u8  active_speed;
+       __u8  phys_state;
+       __u8  link_layer;
+       __u8  reserved[2];
+};
+
+struct ib_uverbs_alloc_pd {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_alloc_pd_resp {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_dealloc_pd {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_open_xrcd {
+       __u64 response;
+       __u32 fd;
+       __u32 oflags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_open_xrcd_resp {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_close_xrcd {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_reg_mr {
+       __u64 response;
+       __u64 start;
+       __u64 length;
+       __u64 hca_va;
+       __u32 pd_handle;
+       __u32 access_flags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_reg_mr_resp {
+       __u32 mr_handle;
+       __u32 lkey;
+       __u32 rkey;
+};
+
+struct ib_uverbs_rereg_mr {
+       __u64 response;
+       __u32 mr_handle;
+       __u32 flags;
+       __u64 start;
+       __u64 length;
+       __u64 hca_va;
+       __u32 pd_handle;
+       __u32 access_flags;
+};
+
+struct ib_uverbs_rereg_mr_resp {
+       __u32 lkey;
+       __u32 rkey;
+};
+
+struct ib_uverbs_dereg_mr {
+       __u32 mr_handle;
+};
+
+struct ib_uverbs_alloc_mw {
+       __u64 response;
+       __u32 pd_handle;
+       __u8  mw_type;
+       __u8  reserved[3];
+};
+
+struct ib_uverbs_alloc_mw_resp {
+       __u32 mw_handle;
+       __u32 rkey;
+};
+
+struct ib_uverbs_dealloc_mw {
+       __u32 mw_handle;
+};
+
+struct ib_uverbs_create_comp_channel {
+       __u64 response;
+};
+
+struct ib_uverbs_create_comp_channel_resp {
+       __u32 fd;
+};
+
+struct ib_uverbs_create_cq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 cqe;
+       __u32 comp_vector;
+       __s32 comp_channel;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_ex_create_cq {
+       __u64 user_handle;
+       __u32 cqe;
+       __u32 comp_vector;
+       __s32 comp_channel;
+       __u32 comp_mask;
+       __u32 flags;
+       __u32 reserved;
+};
+
+struct ib_uverbs_create_cq_resp {
+       __u32 cq_handle;
+       __u32 cqe;
+};
+
+struct ib_uverbs_ex_create_cq_resp {
+       struct ib_uverbs_create_cq_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+};
+
+struct ib_uverbs_resize_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 cqe;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_resize_cq_resp {
+       __u32 cqe;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_poll_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 ne;
+};
+
+struct ib_uverbs_wc {
+       __u64 wr_id;
+       __u32 status;
+       __u32 opcode;
+       __u32 vendor_err;
+       __u32 byte_len;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       __u32 qp_num;
+       __u32 src_qp;
+       __u32 wc_flags;
+       __u16 pkey_index;
+       __u16 slid;
+       __u8 sl;
+       __u8 dlid_path_bits;
+       __u8 port_num;
+       __u8 reserved;
+};
+
+struct ib_uverbs_poll_cq_resp {
+       __u32 count;
+       __u32 reserved;
+       struct ib_uverbs_wc wc[0];
+};
+
+struct ib_uverbs_req_notify_cq {
+       __u32 cq_handle;
+       __u32 solicited_only;
+};
+
+struct ib_uverbs_destroy_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_cq_resp {
+       __u32 comp_events_reported;
+       __u32 async_events_reported;
+};
+
+struct ib_uverbs_global_route {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  reserved;
+};
+
+struct ib_uverbs_ah_attr {
+       struct ib_uverbs_global_route grh;
+       __u16 dlid;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+       __u8  reserved;
+};
+
+struct ib_uverbs_qp_attr {
+       __u32   qp_attr_mask;
+       __u32   qp_state;
+       __u32   cur_qp_state;
+       __u32   path_mtu;
+       __u32   path_mig_state;
+       __u32   qkey;
+       __u32   rq_psn;
+       __u32   sq_psn;
+       __u32   dest_qp_num;
+       __u32   qp_access_flags;
+
+       struct ib_uverbs_ah_attr ah_attr;
+       struct ib_uverbs_ah_attr alt_ah_attr;
+
+       /* ib_qp_cap */
+       __u32   max_send_wr;
+       __u32   max_recv_wr;
+       __u32   max_send_sge;
+       __u32   max_recv_sge;
+       __u32   max_inline_data;
+
+       __u16   pkey_index;
+       __u16   alt_pkey_index;
+       __u8    en_sqd_async_notify;
+       __u8    sq_draining;
+       __u8    max_rd_atomic;
+       __u8    max_dest_rd_atomic;
+       __u8    min_rnr_timer;
+       __u8    port_num;
+       __u8    timeout;
+       __u8    retry_cnt;
+       __u8    rnr_retry;
+       __u8    alt_port_num;
+       __u8    alt_timeout;
+       __u8    reserved[5];
+};
+
+struct ib_uverbs_create_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 send_cq_handle;
+       __u32 recv_cq_handle;
+       __u32 srq_handle;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u8  sq_sig_all;
+       __u8  qp_type;
+       __u8  is_srq;
+       __u8  reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_ex_create_qp {
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 send_cq_handle;
+       __u32 recv_cq_handle;
+       __u32 srq_handle;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u8  sq_sig_all;
+       __u8  qp_type;
+       __u8  is_srq;
+       __u8 reserved;
+       __u32 comp_mask;
+       __u32 create_flags;
+};
+
+struct ib_uverbs_open_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 qpn;
+       __u8  qp_type;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+/* also used for open response */
+struct ib_uverbs_create_qp_resp {
+       __u32 qp_handle;
+       __u32 qpn;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 reserved;
+};
+
+struct ib_uverbs_ex_create_qp_resp {
+       struct ib_uverbs_create_qp_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+};
+
+/*
+ * This struct needs to remain a multiple of 8 bytes to keep the
+ * alignment of the modify QP parameters.
+ */
+struct ib_uverbs_qp_dest {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u16 dlid;
+       __u16 reserved;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+};
+
+struct ib_uverbs_query_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_qp_resp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  sq_draining;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  sq_sig_all;
+       __u8  reserved[5];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  en_sqd_async_notify;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  reserved[2];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp_resp {
+};
+
+struct ib_uverbs_destroy_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_qp_resp {
+       __u32 events_reported;
+};
+
+/*
+ * The ib_uverbs_sge structure isn't used anywhere, since we assume
+ * the ib_sge structure is packed the same way on 32-bit and 64-bit
+ * architectures in both kernel and user space.  It's just here to
+ * document the ABI.
+ */
+struct ib_uverbs_sge {
+       __u64 addr;
+       __u32 length;
+       __u32 lkey;
+};
+
+struct ib_uverbs_send_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 opcode;
+       __u32 send_flags;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       union {
+               struct {
+                       __u64 remote_addr;
+                       __u32 rkey;
+                       __u32 reserved;
+               } rdma;
+               struct {
+                       __u64 remote_addr;
+                       __u64 compare_add;
+                       __u64 swap;
+                       __u32 rkey;
+                       __u32 reserved;
+               } atomic;
+               struct {
+                       __u32 ah;
+                       __u32 remote_qpn;
+                       __u32 remote_qkey;
+                       __u32 reserved;
+               } ud;
+       } wr;
+};
+
+struct ib_uverbs_post_send {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_send_wr send_wr[0];
+};
+
+struct ib_uverbs_post_send_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_recv_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 reserved;
+};
+
+struct ib_uverbs_post_recv {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv_wr[0];
+};
+
+struct ib_uverbs_post_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_post_srq_recv {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv[0];
+};
+
+struct ib_uverbs_post_srq_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_create_ah {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 reserved;
+       struct ib_uverbs_ah_attr attr;
+};
+
+struct ib_uverbs_create_ah_resp {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_destroy_ah {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_attach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_detach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_flow_spec_hdr {
+       __u32 type;
+       __u16 size;
+       __u16 reserved;
+       /* followed by flow_spec */
+       __u64 flow_spec_data[0];
+};
+
+struct ib_uverbs_flow_eth_filter {
+       __u8  dst_mac[6];
+       __u8  src_mac[6];
+       __be16 ether_type;
+       __be16 vlan_tag;
+};
+
+struct ib_uverbs_flow_spec_eth {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_eth_filter val;
+       struct ib_uverbs_flow_eth_filter mask;
+};
+
+struct ib_uverbs_flow_ipv4_filter {
+       __be32 src_ip;
+       __be32 dst_ip;
+};
+
+struct ib_uverbs_flow_spec_ipv4 {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_ipv4_filter val;
+       struct ib_uverbs_flow_ipv4_filter mask;
+};
+
+struct ib_uverbs_flow_tcp_udp_filter {
+       __be16 dst_port;
+       __be16 src_port;
+};
+
+struct ib_uverbs_flow_spec_tcp_udp {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_tcp_udp_filter val;
+       struct ib_uverbs_flow_tcp_udp_filter mask;
+};
+
+struct ib_uverbs_flow_attr {
+       __u32 type;
+       __u16 size;
+       __u16 priority;
+       __u8  num_of_specs;
+       __u8  reserved[2];
+       __u8  port;
+       __u32 flags;
+       /* Following are the optional layers according to user request
+        * struct ib_flow_spec_xxx
+        * struct ib_flow_spec_yyy
+        */
+       struct ib_uverbs_flow_spec_hdr flow_specs[0];
+};
+
+struct ib_uverbs_create_flow  {
+       __u32 comp_mask;
+       __u32 qp_handle;
+       struct ib_uverbs_flow_attr flow_attr;
+};
+
+struct ib_uverbs_create_flow_resp {
+       __u32 comp_mask;
+       __u32 flow_handle;
+};
+
+struct ib_uverbs_destroy_flow  {
+       __u32 comp_mask;
+       __u32 flow_handle;
+};
+
+struct ib_uverbs_create_srq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_xsrq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 srq_type;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+       __u32 xrcd_handle;
+       __u32 cq_handle;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_srq_resp {
+       __u32 srq_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srqn;
+};
+
+struct ib_uverbs_modify_srq {
+       __u32 srq_handle;
+       __u32 attr_mask;
+       __u32 max_wr;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq_resp {
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq_resp {
+       __u32 events_reported;
+};
+
+#endif /* IB_USER_VERBS_H */
diff --git a/lib/libdss-include/include/rdma/rdma_netlink.h b/lib/libdss-include/include/rdma/rdma_netlink.h
new file mode 100644 (file)
index 0000000..3eb9347
--- /dev/null
@@ -0,0 +1,214 @@
+#ifndef _RDMA_NETLINK_H
+#define _RDMA_NETLINK_H
+
+#include <linux/types.h>
+
+enum {
+       RDMA_NL_RDMA_CM = 1,
+       RDMA_NL_NES,
+       RDMA_NL_C4IW,
+       RDMA_NL_LS,     /* RDMA Local Services */
+       RDMA_NL_NUM_CLIENTS
+};
+
+enum {
+       RDMA_NL_GROUP_CM = 1,
+       RDMA_NL_GROUP_IWPM,
+       RDMA_NL_GROUP_LS,
+       RDMA_NL_NUM_GROUPS
+};
+
+#define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
+#define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
+#define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
+
+enum {
+       RDMA_NL_RDMA_CM_ID_STATS = 0,
+       RDMA_NL_RDMA_CM_NUM_OPS
+};
+
+enum {
+       RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1,
+       RDMA_NL_RDMA_CM_ATTR_DST_ADDR,
+       RDMA_NL_RDMA_CM_NUM_ATTR,
+};
+
+/* iwarp port mapper op-codes */
+enum {
+       RDMA_NL_IWPM_REG_PID = 0,
+       RDMA_NL_IWPM_ADD_MAPPING,
+       RDMA_NL_IWPM_QUERY_MAPPING,
+       RDMA_NL_IWPM_REMOVE_MAPPING,
+       RDMA_NL_IWPM_REMOTE_INFO,
+       RDMA_NL_IWPM_HANDLE_ERR,
+       RDMA_NL_IWPM_MAPINFO,
+       RDMA_NL_IWPM_MAPINFO_NUM,
+       RDMA_NL_IWPM_NUM_OPS
+};
+
+struct rdma_cm_id_stats {
+       __u32   qp_num;
+       __u32   bound_dev_if;
+       __u32   port_space;
+       __s32   pid;
+       __u8    cm_state;
+       __u8    node_type;
+       __u8    port_num;
+       __u8    qp_type;
+};
+
+enum {
+       IWPM_NLA_REG_PID_UNSPEC = 0,
+       IWPM_NLA_REG_PID_SEQ,
+       IWPM_NLA_REG_IF_NAME,
+       IWPM_NLA_REG_IBDEV_NAME,
+       IWPM_NLA_REG_ULIB_NAME,
+       IWPM_NLA_REG_PID_MAX
+};
+
+enum {
+       IWPM_NLA_RREG_PID_UNSPEC = 0,
+       IWPM_NLA_RREG_PID_SEQ,
+       IWPM_NLA_RREG_IBDEV_NAME,
+       IWPM_NLA_RREG_ULIB_NAME,
+       IWPM_NLA_RREG_ULIB_VER,
+       IWPM_NLA_RREG_PID_ERR,
+       IWPM_NLA_RREG_PID_MAX
+
+};
+
+enum {
+       IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0,
+       IWPM_NLA_MANAGE_MAPPING_SEQ,
+       IWPM_NLA_MANAGE_ADDR,
+       IWPM_NLA_MANAGE_MAPPED_LOC_ADDR,
+       IWPM_NLA_RMANAGE_MAPPING_ERR,
+       IWPM_NLA_RMANAGE_MAPPING_MAX
+};
+
+#define IWPM_NLA_MANAGE_MAPPING_MAX 3
+#define IWPM_NLA_QUERY_MAPPING_MAX  4
+#define IWPM_NLA_MAPINFO_SEND_MAX   3
+
+enum {
+       IWPM_NLA_QUERY_MAPPING_UNSPEC = 0,
+       IWPM_NLA_QUERY_MAPPING_SEQ,
+       IWPM_NLA_QUERY_LOCAL_ADDR,
+       IWPM_NLA_QUERY_REMOTE_ADDR,
+       IWPM_NLA_RQUERY_MAPPED_LOC_ADDR,
+       IWPM_NLA_RQUERY_MAPPED_REM_ADDR,
+       IWPM_NLA_RQUERY_MAPPING_ERR,
+       IWPM_NLA_RQUERY_MAPPING_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_REQ_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_ULIB_NAME,
+       IWPM_NLA_MAPINFO_ULIB_VER,
+       IWPM_NLA_MAPINFO_REQ_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_LOCAL_ADDR,
+       IWPM_NLA_MAPINFO_MAPPED_ADDR,
+       IWPM_NLA_MAPINFO_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_NUM_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_SEQ,
+       IWPM_NLA_MAPINFO_SEND_NUM,
+       IWPM_NLA_MAPINFO_ACK_NUM,
+       IWPM_NLA_MAPINFO_NUM_MAX
+};
+
+enum {
+       IWPM_NLA_ERR_UNSPEC = 0,
+       IWPM_NLA_ERR_SEQ,
+       IWPM_NLA_ERR_CODE,
+       IWPM_NLA_ERR_MAX
+};
+
+/*
+ * Local service operations:
+ *   RESOLVE - The client requests the local service to resolve a path.
+ *   SET_TIMEOUT - The local service requests the client to set the timeout.
+ */
+enum {
+       RDMA_NL_LS_OP_RESOLVE = 0,
+       RDMA_NL_LS_OP_SET_TIMEOUT,
+       RDMA_NL_LS_NUM_OPS
+};
+
+/* Local service netlink message flags */
+#define RDMA_NL_LS_F_ERR       0x0100  /* Failed response */
+
+/*
+ * Local service resolve operation family header.
+ * The layout for the resolve operation:
+ *    nlmsg header
+ *    family header
+ *    attributes
+ */
+
+/*
+ * Local service path use:
+ * Specify how the path(s) will be used.
+ *   ALL - For connected CM operation (6 pathrecords)
+ *   UNIDIRECTIONAL - For unidirectional UD (1 pathrecord)
+ *   GMP - For miscellaneous GMP like operation (at least 1 reversible
+ *         pathrecord)
+ */
+enum {
+       LS_RESOLVE_PATH_USE_ALL = 0,
+       LS_RESOLVE_PATH_USE_UNIDIRECTIONAL,
+       LS_RESOLVE_PATH_USE_GMP,
+       LS_RESOLVE_PATH_USE_MAX
+};
+
+#define LS_DEVICE_NAME_MAX 64
+
+struct rdma_ls_resolve_header {
+       __u8 device_name[LS_DEVICE_NAME_MAX];
+       __u8 port_num;
+       __u8 path_use;
+};
+
+/* Local service attribute type */
+#define RDMA_NLA_F_MANDATORY   (1 << 13)
+#define RDMA_NLA_TYPE_MASK     (~(NLA_F_NESTED | NLA_F_NET_BYTEORDER | \
+                                 RDMA_NLA_F_MANDATORY))
+
+/*
+ * Local service attributes:
+ *   Attr Name       Size                       Byte order
+ *   -----------------------------------------------------
+ *   PATH_RECORD     struct ib_path_rec_data
+ *   TIMEOUT         u32                        cpu
+ *   SERVICE_ID      u64                        cpu
+ *   DGID            u8[16]                     BE
+ *   SGID            u8[16]                     BE
+ *   TCLASS          u8
+ *   PKEY            u16                        cpu
+ *   QOS_CLASS       u16                        cpu
+ */
+enum {
+       LS_NLA_TYPE_UNSPEC = 0,
+       LS_NLA_TYPE_PATH_RECORD,
+       LS_NLA_TYPE_TIMEOUT,
+       LS_NLA_TYPE_SERVICE_ID,
+       LS_NLA_TYPE_DGID,
+       LS_NLA_TYPE_SGID,
+       LS_NLA_TYPE_TCLASS,
+       LS_NLA_TYPE_PKEY,
+       LS_NLA_TYPE_QOS_CLASS,
+       LS_NLA_TYPE_MAX
+};
+
+/* Local service DGID/SGID attribute: big endian */
+struct rdma_nla_ls_gid {
+       __u8            gid[16];
+};
+
+#endif /* _RDMA_NETLINK_H */
diff --git a/lib/libdss-include/include/rdma/rdma_user_cm.h b/lib/libdss-include/include/rdma/rdma_user_cm.h
new file mode 100644 (file)
index 0000000..3066718
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+ * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef RDMA_USER_CM_H
+#define RDMA_USER_CM_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <linux/in6.h>
+#include <rdma/ib_user_verbs.h>
+#include <rdma/ib_user_sa.h>
+
+#define RDMA_USER_CM_ABI_VERSION       4
+
+#define RDMA_MAX_PRIVATE_DATA          256
+
+enum {
+       RDMA_USER_CM_CMD_CREATE_ID,
+       RDMA_USER_CM_CMD_DESTROY_ID,
+       RDMA_USER_CM_CMD_BIND_IP,
+       RDMA_USER_CM_CMD_RESOLVE_IP,
+       RDMA_USER_CM_CMD_RESOLVE_ROUTE,
+       RDMA_USER_CM_CMD_QUERY_ROUTE,
+       RDMA_USER_CM_CMD_CONNECT,
+       RDMA_USER_CM_CMD_LISTEN,
+       RDMA_USER_CM_CMD_ACCEPT,
+       RDMA_USER_CM_CMD_REJECT,
+       RDMA_USER_CM_CMD_DISCONNECT,
+       RDMA_USER_CM_CMD_INIT_QP_ATTR,
+       RDMA_USER_CM_CMD_GET_EVENT,
+       RDMA_USER_CM_CMD_GET_OPTION,
+       RDMA_USER_CM_CMD_SET_OPTION,
+       RDMA_USER_CM_CMD_NOTIFY,
+       RDMA_USER_CM_CMD_JOIN_IP_MCAST,
+       RDMA_USER_CM_CMD_LEAVE_MCAST,
+       RDMA_USER_CM_CMD_MIGRATE_ID,
+       RDMA_USER_CM_CMD_QUERY,
+       RDMA_USER_CM_CMD_BIND,
+       RDMA_USER_CM_CMD_RESOLVE_ADDR,
+       RDMA_USER_CM_CMD_JOIN_MCAST
+};
+
+/*
+ * command ABI structures.
+ */
+struct rdma_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct rdma_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+       __u16 ps;
+       __u8  qp_type;
+       __u8  reserved[5];
+};
+
+struct rdma_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct rdma_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct rdma_ucm_bind_ip {
+       __u64 response;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_bind {
+       __u32 id;
+       __u16 addr_size;
+       __u16 reserved;
+       struct sockaddr_storage addr;
+};
+
+struct rdma_ucm_resolve_ip {
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+struct rdma_ucm_resolve_addr {
+       __u32 id;
+       __u32 timeout_ms;
+       __u16 src_size;
+       __u16 dst_size;
+       __u32 reserved;
+       struct sockaddr_storage src_addr;
+       struct sockaddr_storage dst_addr;
+};
+
+struct rdma_ucm_resolve_route {
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+enum {
+       RDMA_USER_CM_QUERY_ADDR,
+       RDMA_USER_CM_QUERY_PATH,
+       RDMA_USER_CM_QUERY_GID
+};
+
+struct rdma_ucm_query {
+       __u64 response;
+       __u32 id;
+       __u32 option;
+};
+
+struct rdma_ucm_query_route_resp {
+       __u64 node_guid;
+       struct ib_user_path_rec ib_route[2];
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 num_paths;
+       __u8 port_num;
+       __u8 reserved[3];
+};
+
+struct rdma_ucm_query_addr_resp {
+       __u64 node_guid;
+       __u8  port_num;
+       __u8  reserved;
+       __u16 pkey;
+       __u16 src_size;
+       __u16 dst_size;
+       struct sockaddr_storage src_addr;
+       struct sockaddr_storage dst_addr;
+};
+
+struct rdma_ucm_query_path_resp {
+       __u32 num_paths;
+       __u32 reserved;
+       struct ib_path_rec_data path_data[0];
+};
+
+struct rdma_ucm_conn_param {
+       __u32 qp_num;
+       __u32 qkey;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  srq;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  flow_control;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  valid;
+};
+
+struct rdma_ucm_ud_param {
+       __u32 qp_num;
+       __u32 qkey;
+       struct ib_uverbs_ah_attr ah_attr;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  reserved[7];
+};
+
+struct rdma_ucm_connect {
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_listen {
+       __u32 id;
+       __u32 backlog;
+};
+
+struct rdma_ucm_accept {
+       __u64 uid;
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_reject {
+       __u32 id;
+       __u8  private_data_len;
+       __u8  reserved[3];
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+};
+
+struct rdma_ucm_disconnect {
+       __u32 id;
+};
+
+struct rdma_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct rdma_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct rdma_ucm_join_ip_mcast {
+       __u64 response;         /* rdma_ucm_create_id_resp */
+       __u64 uid;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_join_mcast {
+       __u64 response;         /* rdma_ucma_create_id_resp */
+       __u64 uid;
+       __u32 id;
+       __u16 addr_size;
+       __u16 reserved;
+       struct sockaddr_storage addr;
+};
+
+struct rdma_ucm_get_event {
+       __u64 response;
+};
+
+struct rdma_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 status;
+       union {
+               struct rdma_ucm_conn_param conn;
+               struct rdma_ucm_ud_param   ud;
+       } param;
+};
+
+/* Option levels */
+enum {
+       RDMA_OPTION_ID          = 0,
+       RDMA_OPTION_IB          = 1
+};
+
+/* Option details */
+enum {
+       RDMA_OPTION_ID_TOS       = 0,
+       RDMA_OPTION_ID_REUSEADDR = 1,
+       RDMA_OPTION_ID_AFONLY    = 2,
+       RDMA_OPTION_IB_PATH      = 1
+};
+
+struct rdma_ucm_set_option {
+       __u64 optval;
+       __u32 id;
+       __u32 level;
+       __u32 optname;
+       __u32 optlen;
+};
+
+struct rdma_ucm_migrate_id {
+       __u64 response;
+       __u32 id;
+       __u32 fd;
+};
+
+struct rdma_ucm_migrate_resp {
+       __u32 events_reported;
+};
+
+#endif /* RDMA_USER_CM_H */
diff --git a/lib/libdss-include/include/re_comp.h b/lib/libdss-include/include/re_comp.h
new file mode 100644 (file)
index 0000000..1537125
--- /dev/null
@@ -0,0 +1,25 @@
+/*  Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RE_COMP_H
+#define _RE_COMP_H     1
+
+/* This is only a wrapper around the <regex.h> file.  XPG4.2 mentions
+   this name.  */
+#include <regex.h>
+
+#endif /* re_comp.h */
diff --git a/lib/libdss-include/include/regex.h b/lib/libdss-include/include/regex.h
new file mode 100644 (file)
index 0000000..90f0851
--- /dev/null
@@ -0,0 +1,581 @@
+/* Definitions for data structures and routines for the regular
+   expression library.
+   Copyright (C) 1985, 1989-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+#include <sys/types.h>
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+#ifdef __USE_GNU
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+       ^  is an anchor if it is at the beginning of a regular
+          expression or after an open-group or an alternation operator;
+       $  is an anchor if it is at the end of a regular expression, or
+          before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+# define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+# define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+   a string of ordinary characters.  For example, the ERE 'a{1' is
+   treated as 'a\{1'.  */
+# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
+   for ^, because it is difficult to scan the regex backwards to find
+   whether ^ should be special.  */
+# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
+
+/* If this bit is set, then \{ cannot be first in an bre or
+   immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
+
+/* If this bit is set, then no_sub will be set to 1 during
+   re_compile_pattern.  */
+# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
+#endif
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+#ifdef __USE_GNU
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_CHAR_CLASSES                                                   \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS            \
+    | RE_INVALID_INTERVAL_ORD)                                         \
+   & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS                          \
+      | RE_CONTEXT_INVALID_OPS ))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS                             \
+   | RE_INVALID_INTERVAL_ORD)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                    \
+   | RE_INVALID_INTERVAL_ORD)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+\f
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+# ifdef RE_DUP_MAX
+#  undef RE_DUP_MAX
+# endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+# define RE_DUP_MAX (0x7fff)
+#endif
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+/* Use PMATCH[0] to delimit the start and end of the search in the
+   buffer.  */
+#define REG_STARTEND (1 << 2)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K
+  REG_ENOSYS = -1,     /* This will never happen for this implementation.  */
+#endif
+
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Inalid collating element.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN          /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+\f
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   and `translate' can be set.  After the pattern has been compiled,
+   the fields `re_nsub', `not_bol' and `not_eol' are available.  All
+   other fields are private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+# define __RE_TRANSLATE_TYPE unsigned char *
+# ifdef __USE_GNU
+#  define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE
+# endif
+#endif
+
+#ifdef __USE_GNU
+# define __REPB_PREFIX(name) name
+#else
+# define __REPB_PREFIX(name) __##name
+#endif
+
+struct re_pattern_buffer
+{
+  /* Space that holds the compiled pattern.  It is declared as
+     `unsigned char *' because its elements are sometimes used as
+     array indexes.  */
+  unsigned char *__REPB_PREFIX(buffer);
+
+  /* Number of bytes to which `buffer' points.  */
+  unsigned long int __REPB_PREFIX(allocated);
+
+  /* Number of bytes actually used in `buffer'.  */
+  unsigned long int __REPB_PREFIX(used);
+
+  /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t __REPB_PREFIX(syntax);
+
+  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the
+     fastmap, if there is one, to skip over impossible starting points
+     for matches.  */
+  char *__REPB_PREFIX(fastmap);
+
+  /* Either a translate table to apply to all characters before
+     comparing them, or zero for no translation.  The translation is
+     applied to a pattern when it is compiled and to a string when it
+     is matched.  */
+  __RE_TRANSLATE_TYPE __REPB_PREFIX(translate);
+
+  /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+  /* Zero if this pattern cannot match the empty string, one else.
+     Well, in truth it's used only in `re_search_2', to see whether or
+     not we should use the fastmap, so we don't set this absolutely
+     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */
+  unsigned __REPB_PREFIX(can_be_null) : 1;
+
+  /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+     for `max (RE_NREGS, re_nsub + 1)' groups.
+     If REGS_REALLOCATE, reallocate space if necessary.
+     If REGS_FIXED, use what's there.  */
+#ifdef __USE_GNU
+# define REGS_UNALLOCATED 0
+# define REGS_REALLOCATE 1
+# define REGS_FIXED 2
+#endif
+  unsigned __REPB_PREFIX(regs_allocated) : 2;
+
+  /* Set to zero when `regex_compile' compiles a pattern; set to one
+     by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned __REPB_PREFIX(fastmap_accurate) : 1;
+
+  /* If set, `re_match_2' does not return information about
+     subexpressions.  */
+  unsigned __REPB_PREFIX(no_sub) : 1;
+
+  /* If set, a beginning-of-line anchor doesn't match at the beginning
+     of the string.  */
+  unsigned __REPB_PREFIX(not_bol) : 1;
+
+  /* Similarly for an end-of-line anchor.  */
+  unsigned __REPB_PREFIX(not_eol) : 1;
+
+  /* If true, an anchor at a newline matches.  */
+  unsigned __REPB_PREFIX(newline_anchor) : 1;
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* Type for byte offsets within the string.  POSIX mandates this.  */
+typedef int regoff_t;
+
+
+#ifdef __USE_GNU
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+# ifndef RE_NREGS
+#  define RE_NREGS 30
+# endif
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+#ifdef __USE_GNU
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.
+
+   To free the allocated storage, you must call `regfree' on BUFFER.
+   Note that the translate table must either have been initialised by
+   `regcomp', with a malloc'ed value, or set to NULL before calling
+   `regfree'.  */
+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
+                                      struct re_pattern_buffer *__buffer);
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern int re_search (struct re_pattern_buffer *__buffer, const char *__string,
+                     int __length, int __start, int __range,
+                     struct re_registers *__regs);
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern int re_search_2 (struct re_pattern_buffer *__buffer,
+                       const char *__string1, int __length1,
+                       const char *__string2, int __length2, int __start,
+                       int __range, struct re_registers *__regs, int __stop);
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern int re_match (struct re_pattern_buffer *__buffer, const char *__string,
+                    int __length, int __start, struct re_registers *__regs);
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern int re_match_2 (struct re_pattern_buffer *__buffer,
+                      const char *__string1, int __length1,
+                      const char *__string2, int __length2, int __start,
+                      struct re_registers *__regs, int __stop);
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers (struct re_pattern_buffer *__buffer,
+                             struct re_registers *__regs,
+                             unsigned int __num_regs,
+                             regoff_t *__starts, regoff_t *__ends);
+#endif /* Use GNU */
+
+#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC)
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  */
+#ifndef __restrict_arr
+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
+     && !defined __GNUG__
+#  define __restrict_arr __restrict
+# else
+#  define __restrict_arr
+# endif
+#endif
+
+/* POSIX compatibility.  */
+extern int regcomp (regex_t *__restrict __preg,
+                   const char *__restrict __pattern,
+                   int __cflags);
+
+extern int regexec (const regex_t *__restrict __preg,
+                   const char *__restrict __string, size_t __nmatch,
+                   regmatch_t __pmatch[__restrict_arr],
+                   int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t *__restrict __preg,
+                       char *__restrict __errbuf, size_t __errbuf_size);
+
+extern void regfree (regex_t *__preg);
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
diff --git a/lib/libdss-include/include/regexp.h b/lib/libdss-include/include/regexp.h
new file mode 100644 (file)
index 0000000..6d3bc30
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _REGEXP_H
+#define _REGEXP_H      1
+
+/* The contents of this header file were originally standardized in
+   the Single Unix Specification, Issue 3 (1992).  In Issue 4 (1994)
+   the header was marked as TO BE WITHDRAWN, and new applications
+   were encouraged to use <regex.h> instead.  It was officially
+   withdrawn from the standard in Issue 6 (aka POSIX.1-2001).
+
+   The GNU C Library provided this header through version 2.22. */
+
+#error "The GNU C Library no longer implements <regexp.h>."
+#error "Please update your code to use <regex.h> instead (no trailing 'p')."
+
+#endif /* regexp.h */
diff --git a/lib/libdss-include/include/resolv.h b/lib/libdss-include/include/resolv.h
new file mode 100644 (file)
index 0000000..53c3bba
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * Copyright (c) 1983, 1987, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     @(#)resolv.h    8.1 (Berkeley) 6/2/93
+ *     $BINDId: resolv.h,v 8.31 2000/03/30 20:16:50 vixie Exp $
+ */
+
+#ifndef _RESOLV_H_
+
+/* These headers are needed for types used in the `struct res_state'
+   declaration.  */
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#ifndef __need_res_state
+# define _RESOLV_H_
+
+# include <sys/param.h>
+# include <sys/cdefs.h>
+# include <stdio.h>
+# include <arpa/nameser.h>
+#endif
+
+#ifndef __res_state_defined
+# define __res_state_defined
+
+typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
+       res_sendhookact;
+
+typedef res_sendhookact (*res_send_qhook) (struct sockaddr_in * const *__ns,
+                                          const u_char **__query,
+                                          int *__querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+typedef res_sendhookact (*res_send_rhook) (const struct sockaddr_in *__ns,
+                                          const u_char *__query,
+                                          int __querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+/*
+ * Global defines and variables for resolver stub.
+ */
+# define MAXNS                 3       /* max # name servers we'll track */
+# define MAXDFLSRCH            3       /* # default domain levels to try */
+# define MAXDNSRCH             6       /* max # domains in search path */
+# define LOCALDOMAINPARTS      2       /* min levels in name that is "local" */
+
+# define RES_TIMEOUT           5       /* min. seconds between retries */
+# define MAXRESOLVSORT         10      /* number of net to sort on */
+# define RES_MAXNDOTS          15      /* should reflect bit field size */
+# define RES_MAXRETRANS                30      /* only for resolv.conf/RES_OPTIONS */
+# define RES_MAXRETRY          5       /* only for resolv.conf/RES_OPTIONS */
+# define RES_DFLRETRY          2       /* Default #/tries. */
+# define RES_MAXTIME           65535   /* Infinity, in milliseconds. */
+
+struct __res_state {
+       int     retrans;                /* retransmition time interval */
+       int     retry;                  /* number of times to retransmit */
+       u_long  options;                /* option flags - see below. */
+       int     nscount;                /* number of name servers */
+       struct sockaddr_in
+               nsaddr_list[MAXNS];     /* address of name server */
+# define nsaddr        nsaddr_list[0]          /* for backward compatibility */
+       u_short id;                     /* current message id */
+       /* 2 byte hole here.  */
+       char    *dnsrch[MAXDNSRCH+1];   /* components of domain to search */
+       char    defdname[256];          /* default domain (deprecated) */
+       u_long  pfcode;                 /* RES_PRF_ flags - see below. */
+       unsigned ndots:4;               /* threshold for initial abs. query */
+       unsigned nsort:4;               /* number of elements in sort_list[] */
+       unsigned ipv6_unavail:1;        /* connecting to IPv6 server failed */
+       unsigned unused:23;
+       struct {
+               struct in_addr  addr;
+               u_int32_t       mask;
+       } sort_list[MAXRESOLVSORT];
+       /* 4 byte hole here on 64-bit architectures.  */
+       res_send_qhook qhook;           /* query hook */
+       res_send_rhook rhook;           /* response hook */
+       int     res_h_errno;            /* last one set for this context */
+       int     _vcsock;                /* PRIVATE: for res_send VC i/o */
+       u_int   _flags;                 /* PRIVATE: see below */
+       /* 4 byte hole here on 64-bit architectures.  */
+       union {
+               char    pad[52];        /* On an i386 this means 512b total. */
+               struct {
+                       u_int16_t               nscount;
+                       u_int16_t               nsmap[MAXNS];
+                       int                     nssocks[MAXNS];
+                       u_int16_t               nscount6;
+                       u_int16_t               nsinit;
+                       struct sockaddr_in6     *nsaddrs[MAXNS];
+#ifdef _LIBC
+                       unsigned long long int  initstamp
+                         __attribute__((packed));
+#else
+                       unsigned int            _initstamp[2];
+#endif
+               } _ext;
+       } _u;
+};
+
+typedef struct __res_state *res_state;
+# undef __need_res_state
+#endif
+
+#ifdef _RESOLV_H_
+/*
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__RES > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your resolver
+ * is new enough to contain a certain feature.
+ */
+
+#define        __RES   19991006
+
+/*
+ * Resolver configuration file.
+ * Normally not present, but may contain the address of the
+ * inital name server(s) to query and the domain search list.
+ */
+
+#ifndef _PATH_RESCONF
+#define _PATH_RESCONF        "/etc/resolv.conf"
+#endif
+
+struct res_sym {
+       int     number;         /* Identifying number, like T_MX */
+       char *  name;           /* Its symbolic name, like "MX" */
+       char *  humanname;      /* Its fun name, like "mail exchanger" */
+};
+
+/*
+ * Resolver flags (used to be discrete per-module statics ints).
+ */
+#define        RES_F_VC        0x00000001      /* socket is TCP */
+#define        RES_F_CONN      0x00000002      /* socket is connected */
+#define RES_F_EDNS0ERR 0x00000004      /* EDNS0 caused errors */
+
+/* res_findzonecut() options */
+#define        RES_EXHAUSTIVE  0x00000001      /* always do all queries */
+
+/*
+ * Resolver options (keep these in synch with res_debug.c, please)
+ */
+#define RES_INIT       0x00000001      /* address initialized */
+#define RES_DEBUG      0x00000002      /* print debug messages */
+#define RES_AAONLY     0x00000004      /* authoritative answers only (!IMPL)*/
+#define RES_USEVC      0x00000008      /* use virtual circuit */
+#define RES_PRIMARY    0x00000010      /* query primary server only (!IMPL) */
+#define RES_IGNTC      0x00000020      /* ignore trucation errors */
+#define RES_RECURSE    0x00000040      /* recursion desired */
+#define RES_DEFNAMES   0x00000080      /* use default domain name */
+#define RES_STAYOPEN   0x00000100      /* Keep TCP socket open */
+#define RES_DNSRCH     0x00000200      /* search up local domain tree */
+#define        RES_INSECURE1   0x00000400      /* type 1 security disabled */
+#define        RES_INSECURE2   0x00000800      /* type 2 security disabled */
+#define        RES_NOALIASES   0x00001000      /* shuts off HOSTALIASES feature */
+#define        RES_USE_INET6   0x00002000      /* use/map IPv6 in gethostbyname() */
+#define RES_ROTATE     0x00004000      /* rotate ns list after each query */
+#define        RES_NOCHECKNAME 0x00008000      /* do not check names for sanity (!IMPL) */
+#define        RES_KEEPTSIG    0x00010000      /* do not strip TSIG records */
+#define        RES_BLAST       0x00020000      /* blast all recursive servers */
+#define RES_USEBSTRING 0x00040000      /* IPv6 reverse lookup with byte
+                                          strings */
+#define RES_NOIP6DOTINT        0x00080000      /* Do not use .ip6.int in IPv6
+                                          reverse lookup */
+#define RES_USE_EDNS0  0x00100000      /* Use EDNS0.  */
+#define RES_SNGLKUP    0x00200000      /* one outstanding request at a time */
+#define RES_SNGLKUPREOP        0x00400000      /* -"-, but open new socket for each
+                                          request */
+#define RES_USE_DNSSEC 0x00800000      /* use DNSSEC using OK bit in OPT */
+#define RES_NOTLDQUERY 0x01000000      /* Do not look up unqualified name
+                                          as a TLD.  */
+
+#define RES_DEFAULT    (RES_RECURSE|RES_DEFNAMES|RES_DNSRCH|RES_NOIP6DOTINT)
+
+/*
+ * Resolver "pfcode" values.  Used by dig.
+ */
+#define RES_PRF_STATS  0x00000001
+#define RES_PRF_UPDATE 0x00000002
+#define RES_PRF_CLASS   0x00000004
+#define RES_PRF_CMD    0x00000008
+#define RES_PRF_QUES   0x00000010
+#define RES_PRF_ANS    0x00000020
+#define RES_PRF_AUTH   0x00000040
+#define RES_PRF_ADD    0x00000080
+#define RES_PRF_HEAD1  0x00000100
+#define RES_PRF_HEAD2  0x00000200
+#define RES_PRF_TTLID  0x00000400
+#define RES_PRF_HEADX  0x00000800
+#define RES_PRF_QUERY  0x00001000
+#define RES_PRF_REPLY  0x00002000
+#define RES_PRF_INIT   0x00004000
+/*                     0x00008000      */
+
+/* Things involving an internal (static) resolver context. */
+__BEGIN_DECLS
+extern struct __res_state *__res_state(void) __attribute__ ((__const__));
+__END_DECLS
+#define _res (*__res_state())
+
+#ifndef __BIND_NOSTATIC
+#define fp_nquery              __fp_nquery
+#define fp_query               __fp_query
+#define hostalias              __hostalias
+#define p_query                        __p_query
+#define res_close              __res_close
+#define res_init               __res_init
+#define res_isourserver                __res_isourserver
+#define res_mkquery            __res_mkquery
+#define res_query              __res_query
+#define res_querydomain                __res_querydomain
+#define res_search             __res_search
+#define res_send               __res_send
+
+__BEGIN_DECLS
+void           fp_nquery (const u_char *, int, FILE *) __THROW;
+void           fp_query (const u_char *, FILE *) __THROW;
+const char *   hostalias (const char *) __THROW;
+void           p_query (const u_char *) __THROW;
+void           res_close (void) __THROW;
+int            res_init (void) __THROW;
+int            res_isourserver (const struct sockaddr_in *) __THROW;
+int            res_mkquery (int, const char *, int, int, const u_char *,
+                            int, const u_char *, u_char *, int) __THROW;
+int            res_query (const char *, int, int, u_char *, int) __THROW;
+int            res_querydomain (const char *, const char *, int, int,
+                                u_char *, int) __THROW;
+int            res_search (const char *, int, int, u_char *, int) __THROW;
+int            res_send (const u_char *, int, u_char *, int) __THROW;
+__END_DECLS
+#endif
+
+#define b64_ntop               __b64_ntop
+#define b64_pton               __b64_pton
+#define dn_comp                        __dn_comp
+#define dn_count_labels                __dn_count_labels
+#define dn_expand              __dn_expand
+#define dn_skipname            __dn_skipname
+#define fp_resstat             __fp_resstat
+#define loc_aton               __loc_aton
+#define loc_ntoa               __loc_ntoa
+#define p_cdname               __p_cdname
+#define p_cdnname              __p_cdnname
+#define p_class                        __p_class
+#define p_fqname               __p_fqname
+#define p_fqnname              __p_fqnname
+#define p_option               __p_option
+#define p_secstodate           __p_secstodate
+#define p_section              __p_section
+#define p_time                 __p_time
+#define p_type                 __p_type
+#define p_rcode                        __p_rcode
+#define putlong                        __putlong
+#define putshort               __putshort
+#define res_dnok               __res_dnok
+#define res_hnok               __res_hnok
+#define res_hostalias          __res_hostalias
+#define res_mailok             __res_mailok
+#define res_nameinquery                __res_nameinquery
+#define res_nclose             __res_nclose
+#define res_ninit              __res_ninit
+#define res_nmkquery           __res_nmkquery
+#define res_npquery            __res_npquery
+#define res_nquery             __res_nquery
+#define res_nquerydomain       __res_nquerydomain
+#define res_nsearch            __res_nsearch
+#define res_nsend              __res_nsend
+#define res_nisourserver       __res_nisourserver
+#define res_ownok              __res_ownok
+#define res_queriesmatch       __res_queriesmatch
+#define res_randomid           __res_randomid
+#define sym_ntop               __sym_ntop
+#define sym_ntos               __sym_ntos
+#define sym_ston               __sym_ston
+__BEGIN_DECLS
+int            res_hnok (const char *) __THROW;
+int            res_ownok (const char *) __THROW;
+int            res_mailok (const char *) __THROW;
+int            res_dnok (const char *) __THROW;
+int            sym_ston (const struct res_sym *, const char *, int *) __THROW;
+const char *   sym_ntos (const struct res_sym *, int, int *) __THROW;
+const char *   sym_ntop (const struct res_sym *, int, int *) __THROW;
+int            b64_ntop (u_char const *, size_t, char *, size_t) __THROW;
+int            b64_pton (char const *, u_char *, size_t) __THROW;
+int            loc_aton (const char *__ascii, u_char *__binary) __THROW;
+const char *   loc_ntoa (const u_char *__binary, char *__ascii) __THROW;
+int            dn_skipname (const u_char *, const u_char *) __THROW;
+void           putlong (u_int32_t, u_char *) __THROW;
+void           putshort (u_int16_t, u_char *) __THROW;
+const char *   p_class (int) __THROW;
+const char *   p_time (u_int32_t) __THROW;
+const char *   p_type (int) __THROW;
+const char *   p_rcode (int) __THROW;
+const u_char * p_cdnname (const u_char *, const u_char *, int, FILE *)
+     __THROW;
+const u_char * p_cdname (const u_char *, const u_char *, FILE *) __THROW;
+const u_char * p_fqnname (const u_char *__cp, const u_char *__msg,
+                          int, char *, int) __THROW;
+const u_char * p_fqname (const u_char *, const u_char *, FILE *) __THROW;
+const char *   p_option (u_long __option) __THROW;
+char *         p_secstodate (u_long) __THROW;
+int            dn_count_labels (const char *) __THROW;
+int            dn_comp (const char *, u_char *, int, u_char **, u_char **)
+     __THROW;
+int            dn_expand (const u_char *, const u_char *, const u_char *,
+                          char *, int) __THROW;
+u_int          res_randomid (void) __THROW;
+int            res_nameinquery (const char *, int, int,
+                                const u_char *, const u_char *) __THROW;
+int            res_queriesmatch (const u_char *, const u_char *,
+                                 const u_char *, const u_char *) __THROW;
+const char *   p_section (int __section, int __opcode) __THROW;
+/* Things involving a resolver context. */
+int            res_ninit (res_state) __THROW;
+int            res_nisourserver (const res_state,
+                                 const struct sockaddr_in *) __THROW;
+void           fp_resstat (const res_state, FILE *) __THROW;
+void           res_npquery (const res_state, const u_char *, int, FILE *)
+     __THROW;
+const char *   res_hostalias (const res_state, const char *, char *, size_t)
+     __THROW;
+int            res_nquery (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nsearch (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nquerydomain (res_state, const char *, const char *, int,
+                                 int, u_char *, int) __THROW;
+int            res_nmkquery (res_state, int, const char *, int, int,
+                             const u_char *, int, const u_char *, u_char *,
+                             int) __THROW;
+int            res_nsend (res_state, const u_char *, int, u_char *, int)
+     __THROW;
+void           res_nclose (res_state) __THROW;
+__END_DECLS
+#endif
+
+#endif /* !_RESOLV_H_ */
diff --git a/lib/libdss-include/include/rpc/auth.h b/lib/libdss-include/include/rpc/auth.h
new file mode 100644 (file)
index 0000000..b25dcfc
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * auth.h, Authentication interface.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The data structures are completely opaque to the client.  The client
+ * is required to pass a AUTH * to routines that create rpc
+ * "sessions".
+ */
+
+#ifndef _RPC_AUTH_H
+
+#define _RPC_AUTH_H    1
+#include <features.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+#define MAX_AUTH_BYTES 400
+#define MAXNETNAMELEN  255     /* maximum length of network user's name */
+
+/*
+ * Status returned from authentication check
+ */
+enum auth_stat {
+       AUTH_OK=0,
+       /*
+        * failed at remote end
+        */
+       AUTH_BADCRED=1,                 /* bogus credentials (seal broken) */
+       AUTH_REJECTEDCRED=2,            /* client should begin new session */
+       AUTH_BADVERF=3,                 /* bogus verifier (seal broken) */
+       AUTH_REJECTEDVERF=4,            /* verifier expired or was replayed */
+       AUTH_TOOWEAK=5,                 /* rejected due to security reasons */
+       /*
+        * failed locally
+       */
+       AUTH_INVALIDRESP=6,             /* bogus response verifier */
+       AUTH_FAILED=7                   /* some unknown reason */
+};
+
+union des_block {
+       struct {
+               u_int32_t high;
+               u_int32_t low;
+       } key;
+       char c[8];
+};
+typedef union des_block des_block;
+extern bool_t xdr_des_block (XDR *__xdrs, des_block *__blkp) __THROW;
+
+/*
+ * Authentication info.  Opaque to client.
+ */
+struct opaque_auth {
+       enum_t  oa_flavor;              /* flavor of auth */
+       caddr_t oa_base;                /* address of more auth stuff */
+       u_int   oa_length;              /* not to exceed MAX_AUTH_BYTES */
+};
+
+/*
+ * Auth handle, interface to client side authenticators.
+ */
+typedef struct AUTH AUTH;
+struct AUTH {
+  struct opaque_auth ah_cred;
+  struct opaque_auth ah_verf;
+  union des_block ah_key;
+  struct auth_ops {
+    void (*ah_nextverf) (AUTH *);
+    int  (*ah_marshal) (AUTH *, XDR *);                /* nextverf & serialize */
+    int  (*ah_validate) (AUTH *, struct opaque_auth *);
+                                               /* validate verifier */
+    int  (*ah_refresh) (AUTH *);               /* refresh credentials */
+    void (*ah_destroy) (AUTH *);               /* destroy this structure */
+  } *ah_ops;
+  caddr_t ah_private;
+};
+
+
+/*
+ * Authentication ops.
+ * The ops and the auth handle provide the interface to the authenticators.
+ *
+ * AUTH        *auth;
+ * XDR *xdrs;
+ * struct opaque_auth verf;
+ */
+#define AUTH_NEXTVERF(auth)            \
+               ((*((auth)->ah_ops->ah_nextverf))(auth))
+#define auth_nextverf(auth)            \
+               ((*((auth)->ah_ops->ah_nextverf))(auth))
+
+#define AUTH_MARSHALL(auth, xdrs)      \
+               ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+#define auth_marshall(auth, xdrs)      \
+               ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+
+#define AUTH_VALIDATE(auth, verfp)     \
+               ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+#define auth_validate(auth, verfp)     \
+               ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+
+#define AUTH_REFRESH(auth)             \
+               ((*((auth)->ah_ops->ah_refresh))(auth))
+#define auth_refresh(auth)             \
+               ((*((auth)->ah_ops->ah_refresh))(auth))
+
+#define AUTH_DESTROY(auth)             \
+               ((*((auth)->ah_ops->ah_destroy))(auth))
+#define auth_destroy(auth)             \
+               ((*((auth)->ah_ops->ah_destroy))(auth))
+
+
+extern struct opaque_auth _null_auth;
+
+
+/*
+ * These are the various implementations of client side authenticators.
+ */
+
+/*
+ * Unix style authentication
+ * AUTH *authunix_create(machname, uid, gid, len, aup_gids)
+ *     char *machname;
+ *     int uid;
+ *     int gid;
+ *     int len;
+ *     int *aup_gids;
+ */
+extern AUTH *authunix_create (char *__machname, __uid_t __uid, __gid_t __gid,
+                             int __len, __gid_t *__aup_gids);
+extern AUTH *authunix_create_default (void);
+extern AUTH *authnone_create (void) __THROW;
+extern AUTH *authdes_create (const char *__servername, u_int __window,
+                            struct sockaddr *__syncaddr, des_block *__ckey)
+     __THROW;
+extern AUTH *authdes_pk_create (const char *, netobj *, u_int,
+                               struct sockaddr *, des_block *) __THROW;
+
+
+#define AUTH_NONE      0               /* no authentication */
+#define        AUTH_NULL       0               /* backward compatibility */
+#define        AUTH_SYS        1               /* unix style (uid, gids) */
+#define        AUTH_UNIX       AUTH_SYS
+#define        AUTH_SHORT      2               /* short hand unix style */
+#define AUTH_DES       3               /* des style (encrypted timestamps) */
+#define AUTH_DH                AUTH_DES        /* Diffie-Hellman (this is DES) */
+#define AUTH_KERB       4               /* kerberos style */
+
+/*
+ *  Netname manipulating functions
+ *
+ */
+extern int getnetname (char *) __THROW;
+extern int host2netname (char *, const char *, const char *) __THROW;
+extern int user2netname (char *, const uid_t, const char *) __THROW;
+extern int netname2user (const char *, uid_t *, gid_t *, int *, gid_t *)
+     __THROW;
+extern int netname2host (const char *, char *, const int) __THROW;
+
+/*
+ *
+ * These routines interface to the keyserv daemon
+ *
+ */
+extern int key_decryptsession (char *, des_block *);
+extern int key_decryptsession_pk (char *, netobj *, des_block *);
+extern int key_encryptsession (char *, des_block *);
+extern int key_encryptsession_pk (char *, netobj *, des_block *);
+extern int key_gendes (des_block *);
+extern int key_setsecret (char *);
+extern int key_secretkey_is_set (void);
+extern int key_get_conv (char *, des_block *);
+
+/*
+ * XDR an opaque authentication struct.
+ */
+extern bool_t xdr_opaque_auth (XDR *, struct opaque_auth *) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/auth.h */
diff --git a/lib/libdss-include/include/rpc/auth_des.h b/lib/libdss-include/include/rpc/auth_des.h
new file mode 100644 (file)
index 0000000..2c9f2f4
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RPC_AUTH_DES_H
+#define _RPC_AUTH_DES_H        1
+
+#include <sys/cdefs.h>
+#include <rpc/auth.h>
+
+__BEGIN_DECLS
+
+/* There are two kinds of "names": fullnames and nicknames */
+enum authdes_namekind
+  {
+    ADN_FULLNAME,
+    ADN_NICKNAME
+  };
+
+/* A fullname contains the network name of the client,
+   a conversation key and the window */
+struct authdes_fullname
+  {
+    char *name;                /* network name of client, up to MAXNETNAMELEN */
+    des_block key;     /* conversation key */
+    uint32_t window;   /* associated window */
+  };
+
+/* A credential */
+struct authdes_cred
+  {
+    enum authdes_namekind adc_namekind;
+    struct authdes_fullname adc_fullname;
+    uint32_t adc_nickname;
+  };
+
+/* A timeval replacement for !32bit platforms */
+struct rpc_timeval
+  {
+    uint32_t tv_sec;            /* Seconds.  */
+    uint32_t tv_usec;           /* Microseconds.  */
+  };
+
+/* A des authentication verifier */
+struct authdes_verf
+  {
+    union
+      {
+       struct rpc_timeval adv_ctime;   /* clear time */
+       des_block adv_xtime;            /* crypt time */
+      }
+    adv_time_u;
+    uint32_t adv_int_u;
+  };
+
+/* des authentication verifier: client variety
+
+   adv_timestamp is the current time.
+   adv_winverf is the credential window + 1.
+   Both are encrypted using the conversation key. */
+#define adv_timestamp  adv_time_u.adv_ctime
+#define adv_xtimestamp adv_time_u.adv_xtime
+#define adv_winverf    adv_int_u
+
+/* des authentication verifier: server variety
+
+   adv_timeverf is the client's timestamp + client's window
+   adv_nickname is the server's nickname for the client.
+   adv_timeverf is encrypted using the conversation key. */
+#define adv_timeverf   adv_time_u.adv_ctime
+#define adv_xtimeverf  adv_time_u.adv_xtime
+#define adv_nickname   adv_int_u
+
+/* Map a des credential into a unix cred. */
+extern int authdes_getucred (const struct authdes_cred * __adc,
+                            uid_t * __uid, gid_t * __gid,
+                            short *__grouplen, gid_t * __groups) __THROW;
+
+/* Get the public key for NAME and place it in KEY.  NAME can only be
+   up to MAXNETNAMELEN bytes long and the destination buffer KEY should
+   have HEXKEYBYTES + 1 bytes long to fit all characters from the key.  */
+extern int getpublickey (const char *__name, char *__key) __THROW;
+
+/* Get the secret key for NAME and place it in KEY.  PASSWD is used to
+   decrypt the encrypted key stored in the database.  NAME can only be
+   up to MAXNETNAMELEN bytes long and the destination buffer KEY
+   should have HEXKEYBYTES + 1 bytes long to fit all characters from
+   the key.  */
+extern int getsecretkey (const char *__name, char *__key,
+                        const char *__passwd) __THROW;
+
+extern int rtime (struct sockaddr_in *__addrp, struct rpc_timeval *__timep,
+                 struct rpc_timeval *__timeout) __THROW;
+
+__END_DECLS
+
+
+#endif /* rpc/auth_des.h */
diff --git a/lib/libdss-include/include/rpc/auth_unix.h b/lib/libdss-include/include/rpc/auth_unix.h
new file mode 100644 (file)
index 0000000..2f4ee1d
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * auth_unix.h, Protocol for UNIX style authentication parameters for RPC
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * The system is very weak.  The client uses no encryption for  it
+ * credentials and only sends null verifiers.  The server sends backs
+ * null verifiers or optionally a verifier that suggests a new short hand
+ * for the credentials.
+ */
+
+#ifndef _RPC_AUTH_UNIX_H
+#define _RPC_AUTH_UNIX_H       1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+/* The machine name is part of a credential; it may not exceed 255 bytes */
+#define MAX_MACHINE_NAME 255
+
+/* gids compose part of a credential; there may not be more than 16 of them */
+#define NGRPS 16
+
+/*
+ * Unix style credentials.
+ */
+struct authunix_parms
+  {
+    u_long aup_time;
+    char *aup_machname;
+    __uid_t aup_uid;
+    __gid_t aup_gid;
+    u_int aup_len;
+    __gid_t *aup_gids;
+  };
+
+extern bool_t xdr_authunix_parms (XDR *__xdrs, struct authunix_parms *__p)
+     __THROW;
+
+/*
+ * If a response verifier has flavor AUTH_SHORT,
+ * then the body of the response verifier encapsulates the following structure;
+ * again it is serialized in the obvious fashion.
+ */
+struct short_hand_verf
+  {
+    struct opaque_auth new_cred;
+  };
+
+__END_DECLS
+
+#endif /* rpc/auth_unix.h */
diff --git a/lib/libdss-include/include/rpc/clnt.h b/lib/libdss-include/include/rpc/clnt.h
new file mode 100644 (file)
index 0000000..f4d4a94
--- /dev/null
@@ -0,0 +1,418 @@
+/*
+ * clnt.h - Client side remote procedure call interface.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_CLNT_H
+#define _RPC_CLNT_H    1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <sys/un.h>
+
+__BEGIN_DECLS
+
+/*
+ * Rpc calls return an enum clnt_stat.  This should be looked at more,
+ * since each implementation is required to live with this (implementation
+ * independent) list of errors.
+ */
+enum clnt_stat {
+       RPC_SUCCESS=0,                  /* call succeeded */
+       /*
+        * local errors
+        */
+       RPC_CANTENCODEARGS=1,           /* can't encode arguments */
+       RPC_CANTDECODERES=2,            /* can't decode results */
+       RPC_CANTSEND=3,                 /* failure in sending call */
+       RPC_CANTRECV=4,                 /* failure in receiving result */
+       RPC_TIMEDOUT=5,                 /* call timed out */
+       /*
+        * remote errors
+        */
+       RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
+       RPC_AUTHERROR=7,                /* authentication error */
+       RPC_PROGUNAVAIL=8,              /* program not available */
+       RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
+       RPC_PROCUNAVAIL=10,             /* procedure unavailable */
+       RPC_CANTDECODEARGS=11,          /* decode arguments error */
+       RPC_SYSTEMERROR=12,             /* generic "other problem" */
+       RPC_NOBROADCAST = 21,           /* Broadcasting not supported */
+       /*
+        * callrpc & clnt_create errors
+        */
+       RPC_UNKNOWNHOST=13,             /* unknown host name */
+       RPC_UNKNOWNPROTO=17,            /* unknown protocol */
+       RPC_UNKNOWNADDR = 19,           /* Remote address unknown */
+
+       /*
+        * rpcbind errors
+        */
+       RPC_RPCBFAILURE=14,             /* portmapper failed in its call */
+#define RPC_PMAPFAILURE RPC_RPCBFAILURE
+       RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
+       RPC_N2AXLATEFAILURE = 22,       /* Name to addr translation failed */
+       /*
+        * unspecified error
+        */
+       RPC_FAILED=16,
+       RPC_INTR=18,
+       RPC_TLIERROR=20,
+       RPC_UDERROR=23,
+       /*
+        * asynchronous errors
+        */
+       RPC_INPROGRESS = 24,
+       RPC_STALERACHANDLE = 25
+};
+
+
+/*
+ * Error info.
+ */
+struct rpc_err {
+  enum clnt_stat re_status;
+  union {
+    int RE_errno;              /* related system error */
+    enum auth_stat RE_why;     /* why the auth error occurred */
+    struct {
+      u_long low;              /* lowest verion supported */
+      u_long high;             /* highest verion supported */
+    } RE_vers;
+    struct {                   /* maybe meaningful if RPC_FAILED */
+      long s1;
+      long s2;
+    } RE_lb;                   /* life boot & debugging only */
+  } ru;
+#define        re_errno        ru.RE_errno
+#define        re_why          ru.RE_why
+#define        re_vers         ru.RE_vers
+#define        re_lb           ru.RE_lb
+};
+
+
+/*
+ * Client rpc handle.
+ * Created by individual implementations, see e.g. rpc_udp.c.
+ * Client is responsible for initializing auth, see e.g. auth_none.c.
+ */
+typedef struct CLIENT CLIENT;
+struct CLIENT {
+  AUTH *cl_auth;                /* authenticator */
+  struct clnt_ops {
+    enum clnt_stat (*cl_call) (CLIENT *, u_long, xdrproc_t, caddr_t, xdrproc_t,
+                              caddr_t, struct timeval);
+                               /* call remote procedure */
+    void (*cl_abort) (void);   /* abort a call */
+    void (*cl_geterr) (CLIENT *, struct rpc_err *);
+                               /* get specific error code */
+    bool_t (*cl_freeres) (CLIENT *, xdrproc_t, caddr_t);
+                               /* frees results */
+    void (*cl_destroy) (CLIENT *); /* destroy this structure */
+    bool_t (*cl_control) (CLIENT *, int, char *);
+                               /* the ioctl() of rpc */
+  } *cl_ops;
+  caddr_t cl_private;          /* private stuff */
+};
+
+
+/*
+ * client side rpc interface ops
+ *
+ * Parameter types are:
+ *
+ */
+
+/*
+ * enum clnt_stat
+ * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
+ *     CLIENT *rh;
+ *     u_long proc;
+ *     xdrproc_t xargs;
+ *     caddr_t argsp;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ *     struct timeval timeout;
+ */
+#define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+#define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+
+/*
+ * void
+ * CLNT_ABORT(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_ABORT(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+#define        clnt_abort(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+
+/*
+ * struct rpc_err
+ * CLNT_GETERR(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_GETERR(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+#define        clnt_geterr(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+
+
+/*
+ * bool_t
+ * CLNT_FREERES(rh, xres, resp);
+ *     CLIENT *rh;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ */
+#define        CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+#define        clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+
+/*
+ * bool_t
+ * CLNT_CONTROL(cl, request, info)
+ *      CLIENT *cl;
+ *      u_int request;
+ *      char *info;
+ */
+#define        CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+#define        clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+
+/*
+ * control operations that apply to all transports
+ *
+ * Note: options marked XXX are no-ops in this implementation of RPC.
+ * The are present in TI-RPC but can't be implemented here since they
+ * depend on the presence of STREAMS/TLI, which we don't have.
+ */
+#define CLSET_TIMEOUT        1    /* set timeout (timeval) */
+#define CLGET_TIMEOUT        2    /* get timeout (timeval) */
+#define CLGET_SERVER_ADDR    3    /* get server's address (sockaddr) */
+#define CLGET_FD             6    /* get connections file descriptor */
+#define CLGET_SVC_ADDR       7    /* get server's address (netbuf)      XXX */
+#define CLSET_FD_CLOSE       8    /* close fd while clnt_destroy */
+#define CLSET_FD_NCLOSE      9    /* Do not close fd while clnt_destroy*/
+#define CLGET_XID            10   /* Get xid */
+#define CLSET_XID            11   /* Set xid */
+#define CLGET_VERS           12   /* Get version number */
+#define CLSET_VERS           13   /* Set version number */
+#define CLGET_PROG           14   /* Get program number */
+#define CLSET_PROG           15   /* Set program number */
+#define CLSET_SVC_ADDR       16   /* get server's address (netbuf)      XXX */
+#define CLSET_PUSH_TIMOD     17   /* push timod if not already present  XXX */
+#define CLSET_POP_TIMOD      18   /* pop timod                          XXX */
+/*
+ * Connectionless only control operations
+ */
+#define CLSET_RETRY_TIMEOUT    4       /* set retry timeout (timeval) */
+#define CLGET_RETRY_TIMEOUT    5       /* get retry timeout (timeval) */
+
+/*
+ * void
+ * CLNT_DESTROY(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_DESTROY(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+#define        clnt_destroy(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+
+
+/*
+ * RPCTEST is a test program which is accessible on every rpc
+ * transport/port.  It is used for testing, performance evaluation,
+ * and network administration.
+ */
+
+#define RPCTEST_PROGRAM                ((u_long)1)
+#define RPCTEST_VERSION                ((u_long)1)
+#define RPCTEST_NULL_PROC      ((u_long)2)
+#define RPCTEST_NULL_BATCH_PROC        ((u_long)3)
+
+/*
+ * By convention, procedure 0 takes null arguments and returns them
+ */
+
+#define NULLPROC ((u_long)0)
+
+/*
+ * Below are the client handle creation routines for the various
+ * implementations of client side rpc.  They can return NULL if a
+ * creation failure occurs.
+ */
+
+/*
+ * Memory based rpc (for speed check and testing)
+ * CLIENT *
+ * clntraw_create(prog, vers)
+ *     u_long prog;
+ *     u_long vers;
+ */
+extern CLIENT *clntraw_create (const u_long __prog, const u_long __vers)
+     __THROW;
+
+
+/*
+ * Generic client creation routine. Supported protocols are "udp", "tcp" and
+ * "unix"
+ * CLIENT *
+ * clnt_create(host, prog, vers, prot)
+ *     char *host;     -- hostname
+ *     u_long prog;    -- program number
+ *     u_ong vers;     -- version number
+ *     char *prot;     -- protocol
+ */
+extern CLIENT *clnt_create (const char *__host, const u_long __prog,
+                           const u_long __vers, const char *__prot)
+     __THROW;
+
+
+/*
+ * TCP based rpc
+ * CLIENT *
+ * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long prog;
+ *     u_long version;
+ *     register int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, u_long __prog,
+                              u_long __version, int *__sockp, u_int __sendsz,
+                              u_int __recvsz) __THROW;
+
+/*
+ * UDP based rpc.
+ * CLIENT *
+ * clntudp_create(raddr, program, version, wait, sockp)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait_resend;
+ *     int *sockp;
+ *
+ * Same as above, but you specify max packet sizes.
+ * CLIENT *
+ * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait_resend;
+ *     int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+extern CLIENT *clntudp_create (struct sockaddr_in *__raddr, u_long __program,
+                              u_long __version, struct timeval __wait_resend,
+                              int *__sockp) __THROW;
+extern CLIENT *clntudp_bufcreate (struct sockaddr_in *__raddr,
+                                 u_long __program, u_long __version,
+                                 struct timeval __wait_resend, int *__sockp,
+                                 u_int __sendsz, u_int __recvsz) __THROW;
+
+
+
+
+/*
+ * AF_UNIX based rpc
+ * CLIENT *
+ * clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *      struct sockaddr_un *raddr;
+ *      u_long prog;
+ *      u_long version;
+ *      register int *sockp;
+ *      u_int sendsz;
+ *      u_int recvsz;
+ */
+extern CLIENT *clntunix_create  (struct sockaddr_un *__raddr, u_long __program,
+                                u_long __version, int *__sockp,
+                                u_int __sendsz, u_int __recvsz) __THROW;
+
+
+extern int callrpc (const char *__host, const u_long __prognum,
+                   const u_long __versnum, const u_long __procnum,
+                   const xdrproc_t __inproc, const char *__in,
+                   const xdrproc_t __outproc, char *__out) __THROW;
+extern int _rpc_dtablesize (void) __THROW;
+
+/*
+ * Print why creation failed
+ */
+extern void clnt_pcreateerror (const char *__msg);     /* stderr */
+extern char *clnt_spcreateerror(const char *__msg) __THROW;    /* string */
+
+/*
+ * Like clnt_perror(), but is more verbose in its output
+ */
+extern void clnt_perrno (enum clnt_stat __num);                /* stderr */
+
+/*
+ * Print an English error message, given the client error code
+ */
+extern void clnt_perror (CLIENT *__clnt, const char *__msg);
+                                                       /* stderr */
+extern char *clnt_sperror (CLIENT *__clnt, const char *__msg) __THROW;
+                                                       /* string */
+
+/*
+ * If a creation fails, the following allows the user to figure out why.
+ */
+struct rpc_createerr {
+       enum clnt_stat cf_stat;
+       struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
+};
+
+extern struct rpc_createerr rpc_createerr;
+
+
+
+/*
+ * Copy error message to buffer.
+ */
+extern char *clnt_sperrno (enum clnt_stat __num) __THROW;      /* string */
+
+/*
+ * get the port number on the host for the rpc program,version and proto
+ */
+extern int getrpcport (const char * __host, u_long __prognum,
+                      u_long __versnum, u_int __proto) __THROW;
+
+/*
+ * get the local host's IP address without consulting
+ * name service library functions
+ */
+extern void get_myaddress (struct sockaddr_in *) __THROW;
+
+#define UDPMSGSIZE     8800    /* rpc imposed limit on udp msg size */
+#define RPCSMALLMSGSIZE        400     /* a more reasonable packet size */
+
+__END_DECLS
+
+#endif /* rpc/clnt.h */
diff --git a/lib/libdss-include/include/rpc/des_crypt.h b/lib/libdss-include/include/rpc/des_crypt.h
new file mode 100644 (file)
index 0000000..77cca3c
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * @(#)des_crypt.h     2.1 88/08/11 4.0 RPCSRC
+ *
+ * des_crypt.h, des library routine interface
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DES_CRYPT_H__
+#define __DES_CRYPT_H__ 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#define DES_MAXDATA 8192       /* max bytes encrypted in one call */
+#define DES_DIRMASK (1 << 0)
+#define DES_ENCRYPT (0*DES_DIRMASK)    /* Encrypt */
+#define DES_DECRYPT (1*DES_DIRMASK)    /* Decrypt */
+
+
+#define DES_DEVMASK (1 << 1)
+#define        DES_HW (0*DES_DEVMASK)  /* Use hardware device */
+#define DES_SW (1*DES_DEVMASK) /* Use software device */
+
+
+#define DESERR_NONE 0  /* succeeded */
+#define DESERR_NOHWDEVICE 1    /* succeeded, but hw device not available */
+#define DESERR_HWERROR 2       /* failed, hardware/driver error */
+#define DESERR_BADPARAM 3      /* failed, bad parameter to call */
+
+#define DES_FAILED(err) \
+       ((err) > DESERR_NOHWDEVICE)
+
+/*
+ * cbc_crypt()
+ * ecb_crypt()
+ *
+ * Encrypt (or decrypt) len bytes of a buffer buf.
+ * The length must be a multiple of eight.
+ * The key should have odd parity in the low bit of each byte.
+ * ivec is the input vector, and is updated to the new one (cbc only).
+ * The mode is created by oring together the appropriate parameters.
+ * DESERR_NOHWDEVICE is returned if DES_HW was specified but
+ * there was no hardware to do it on (the data will still be
+ * encrypted though, in software).
+ */
+
+
+/*
+ * Cipher Block Chaining mode
+ */
+extern int cbc_crypt (char *__key, char *__buf, unsigned __len,
+                     unsigned __mode, char *__ivec) __THROW;
+
+/*
+ * Electronic Code Book mode
+ */
+extern int ecb_crypt (char *__key, char *__buf, unsigned __len,
+                     unsigned __mode) __THROW;
+
+/*
+ * Set des parity for a key.
+ * DES parity is odd and in the low bit of each byte
+ */
+extern void des_setparity (char *__key) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/include/rpc/key_prot.h b/lib/libdss-include/include/rpc/key_prot.h
new file mode 100644 (file)
index 0000000..74627e6
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KEY_PROT_H_RPCGEN
+#define _KEY_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+/* Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Compiled from key_prot.x using rpcgen.
+ * DO NOT EDIT THIS FILE!
+ * This is NOT source code!
+ */
+#define PROOT 3
+#define HEXMODULUS "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
+#define HEXKEYBYTES 48
+#define KEYSIZE 192
+#define KEYBYTES 24
+#define KEYCHECKSUMSIZE 16
+
+enum keystatus {
+       KEY_SUCCESS = 0,
+       KEY_NOSECRET = 1,
+       KEY_UNKNOWN = 2,
+       KEY_SYSTEMERR = 3,
+};
+typedef enum keystatus keystatus;
+#ifdef __cplusplus
+extern "C" bool_t xdr_keystatus(XDR *, keystatus*);
+#elif __STDC__
+extern  bool_t xdr_keystatus(XDR *, keystatus*);
+#else /* Old Style C */
+bool_t xdr_keystatus();
+#endif /* Old Style C */
+
+
+typedef char keybuf[HEXKEYBYTES];
+#ifdef __cplusplus
+extern "C" bool_t xdr_keybuf(XDR *, keybuf);
+#elif __STDC__
+extern  bool_t xdr_keybuf(XDR *, keybuf);
+#else /* Old Style C */
+bool_t xdr_keybuf();
+#endif /* Old Style C */
+
+
+typedef char *netnamestr;
+#ifdef __cplusplus
+extern "C" bool_t xdr_netnamestr(XDR *, netnamestr*);
+#elif __STDC__
+extern  bool_t xdr_netnamestr(XDR *, netnamestr*);
+#else /* Old Style C */
+bool_t xdr_netnamestr();
+#endif /* Old Style C */
+
+
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+typedef struct cryptkeyarg cryptkeyarg;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyarg();
+#endif /* Old Style C */
+
+
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj remotekey;
+       des_block deskey;
+};
+typedef struct cryptkeyarg2 cryptkeyarg2;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyarg2();
+#endif /* Old Style C */
+
+
+struct cryptkeyres {
+       keystatus status;
+       union {
+               des_block deskey;
+       } cryptkeyres_u;
+};
+typedef struct cryptkeyres cryptkeyres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyres();
+#endif /* Old Style C */
+
+#define MAXGIDS 16
+
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       struct {
+               u_int gids_len;
+               u_int *gids_val;
+       } gids;
+};
+typedef struct unixcred unixcred;
+#ifdef __cplusplus
+extern "C" bool_t xdr_unixcred(XDR *, unixcred*);
+#elif __STDC__
+extern  bool_t xdr_unixcred(XDR *, unixcred*);
+#else /* Old Style C */
+bool_t xdr_unixcred();
+#endif /* Old Style C */
+
+
+struct getcredres {
+       keystatus status;
+       union {
+               unixcred cred;
+       } getcredres_u;
+};
+typedef struct getcredres getcredres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_getcredres(XDR *, getcredres*);
+#elif __STDC__
+extern  bool_t xdr_getcredres(XDR *, getcredres*);
+#else /* Old Style C */
+bool_t xdr_getcredres();
+#endif /* Old Style C */
+
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+typedef struct key_netstarg key_netstarg;
+#ifdef __cplusplus
+extern "C" bool_t xdr_key_netstarg(XDR *, key_netstarg*);
+#elif __STDC__
+extern  bool_t xdr_key_netstarg(XDR *, key_netstarg*);
+#else /* Old Style C */
+bool_t xdr_key_netstarg();
+#endif /* Old Style C */
+
+
+struct key_netstres {
+       keystatus status;
+       union {
+               key_netstarg knet;
+       } key_netstres_u;
+};
+typedef struct key_netstres key_netstres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_key_netstres(XDR *, key_netstres*);
+#elif __STDC__
+extern  bool_t xdr_key_netstres(XDR *, key_netstres*);
+#else /* Old Style C */
+bool_t xdr_key_netstres();
+#endif /* Old Style C */
+
+
+#ifndef opaque
+#define opaque char
+#endif
+
+
+#define KEY_PROG ((u_long)100029)
+#define KEY_VERS ((u_long)1)
+
+#ifdef __cplusplus
+#define KEY_SET ((u_long)1)
+extern "C" keystatus * key_set_1(opaque *, CLIENT *);
+extern "C" keystatus * key_set_1_svc(opaque *, struct svc_req *);
+#define KEY_ENCRYPT ((u_long)2)
+extern "C" cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT ((u_long)3)
+extern "C" cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN ((u_long)4)
+extern "C" des_block * key_gen_1(void *, CLIENT *);
+extern "C" des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED ((u_long)5)
+extern "C" getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern "C" getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+
+#elif __STDC__
+#define KEY_SET ((u_long)1)
+extern  keystatus * key_set_1(opaque *, CLIENT *);
+extern  keystatus * key_set_1_svc(opaque *, struct svc_req *);
+#define KEY_ENCRYPT ((u_long)2)
+extern  cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT ((u_long)3)
+extern  cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN ((u_long)4)
+extern  des_block * key_gen_1(void *, CLIENT *);
+extern  des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED ((u_long)5)
+extern  getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+
+#else /* Old Style C */
+#define KEY_SET ((u_long)1)
+extern  keystatus * key_set_1();
+extern  keystatus * key_set_1_svc();
+#define KEY_ENCRYPT ((u_long)2)
+extern  cryptkeyres * key_encrypt_1();
+extern  cryptkeyres * key_encrypt_1_svc();
+#define KEY_DECRYPT ((u_long)3)
+extern  cryptkeyres * key_decrypt_1();
+extern  cryptkeyres * key_decrypt_1_svc();
+#define KEY_GEN ((u_long)4)
+extern  des_block * key_gen_1();
+extern  des_block * key_gen_1_svc();
+#define KEY_GETCRED ((u_long)5)
+extern  getcredres * key_getcred_1();
+extern  getcredres * key_getcred_1_svc();
+#endif /* Old Style C */
+#define KEY_VERS2 ((u_long)2)
+
+#ifdef __cplusplus
+extern "C" keystatus * key_set_2(opaque *, CLIENT *);
+extern "C" keystatus * key_set_2_svc(opaque *, struct svc_req *);
+extern "C" cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern "C" cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern "C" des_block * key_gen_2(void *, CLIENT *);
+extern "C" des_block * key_gen_2_svc(void *, struct svc_req *);
+extern "C" getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern "C" getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern "C" cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK ((u_long)7)
+extern "C" cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT ((u_long)8)
+extern "C" keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern "C" keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET ((u_long)9)
+extern "C" key_netstres * key_net_get_2(void *, CLIENT *);
+extern "C" key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV ((u_long)10)
+extern "C" cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
+extern "C" cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
+
+#elif __STDC__
+extern  keystatus * key_set_2(opaque *, CLIENT *);
+extern  keystatus * key_set_2_svc(opaque *, struct svc_req *);
+extern  cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  des_block * key_gen_2(void *, CLIENT *);
+extern  des_block * key_gen_2_svc(void *, struct svc_req *);
+extern  getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern  cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK ((u_long)7)
+extern  cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT ((u_long)8)
+extern  keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern  keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET ((u_long)9)
+extern  key_netstres * key_net_get_2(void *, CLIENT *);
+extern  key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV ((u_long)10)
+extern  cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
+extern  cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
+
+#else /* Old Style C */
+extern  keystatus * key_set_2();
+extern  keystatus * key_set_2_svc();
+extern  cryptkeyres * key_encrypt_2();
+extern  cryptkeyres * key_encrypt_2_svc();
+extern  cryptkeyres * key_decrypt_2();
+extern  cryptkeyres * key_decrypt_2_svc();
+extern  des_block * key_gen_2();
+extern  des_block * key_gen_2_svc();
+extern  getcredres * key_getcred_2();
+extern  getcredres * key_getcred_2_svc();
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern  cryptkeyres * key_encrypt_pk_2();
+extern  cryptkeyres * key_encrypt_pk_2_svc();
+#define KEY_DECRYPT_PK ((u_long)7)
+extern  cryptkeyres * key_decrypt_pk_2();
+extern  cryptkeyres * key_decrypt_pk_2_svc();
+#define KEY_NET_PUT ((u_long)8)
+extern  keystatus * key_net_put_2();
+extern  keystatus * key_net_put_2_svc();
+#define KEY_NET_GET ((u_long)9)
+extern  key_netstres * key_net_get_2();
+extern  key_netstres * key_net_get_2_svc();
+#define KEY_GET_CONV ((u_long)10)
+extern  cryptkeyres * key_get_conv_2();
+extern  cryptkeyres * key_get_conv_2_svc();
+#endif /* Old Style C */
+
+#endif /* !_KEY_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpc/netdb.h b/lib/libdss-include/include/rpc/netdb.h
new file mode 100644 (file)
index 0000000..529a4ad
--- /dev/null
@@ -0,0 +1,74 @@
+/* @(#)netdb.h 2.1 88/07/29 3.9 RPCSRC */
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Cleaned up for GNU C library roland@gnu.ai.mit.edu:
+   added multiple inclusion protection and use of <sys/cdefs.h>.
+   In GNU this file is #include'd by <netdb.h>.  */
+
+#ifndef _RPC_NETDB_H
+#define _RPC_NETDB_H   1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+struct rpcent
+{
+  char *r_name;                /* Name of server for this rpc program.  */
+  char **r_aliases;    /* Alias list.  */
+  int r_number;                /* RPC program number.  */
+};
+
+extern void setrpcent (int __stayopen) __THROW;
+extern void endrpcent (void) __THROW;
+extern struct rpcent *getrpcbyname (const char *__name) __THROW;
+extern struct rpcent *getrpcbynumber (int __number) __THROW;
+extern struct rpcent *getrpcent (void) __THROW;
+
+#ifdef __USE_MISC
+extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
+                          char *__buffer, size_t __buflen,
+                          struct rpcent **__result) __THROW;
+
+extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
+                            char *__buffer, size_t __buflen,
+                            struct rpcent **__result) __THROW;
+
+extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
+                       size_t __buflen, struct rpcent **__result) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* rpc/netdb.h */
diff --git a/lib/libdss-include/include/rpc/pmap_clnt.h b/lib/libdss-include/include/rpc/pmap_clnt.h
new file mode 100644 (file)
index 0000000..1cc94b8
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * pmap_clnt.h
+ * Supplies C routines to get to portmap services.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_CLNT_H
+#define _RPC_PMAP_CLNT_H       1
+
+#include <features.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+#include <rpc/clnt.h>
+
+__BEGIN_DECLS
+
+typedef bool_t (*resultproc_t) (caddr_t __resp, struct sockaddr_in *__raddr);
+
+/*
+ * Usage:
+ *     success = pmap_set(program, version, protocol, port);
+ *     success = pmap_unset(program, version);
+ *     port = pmap_getport(address, program, version, protocol);
+ *     head = pmap_getmaps(address);
+ *     clnt_stat = pmap_rmtcall(address, program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, tout, port_ptr)
+ *             (works for udp only.)
+ *     clnt_stat = clnt_broadcast(program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, eachresult)
+ *             (like pmap_rmtcall, except the call is broadcasted to all
+ *             locally connected nets.  For each valid response received,
+ *             the procedure eachresult is called.  Its form is:
+ *     done = eachresult(resp, raddr)
+ *             bool_t done;
+ *             caddr_t resp;
+ *             struct sockaddr_in raddr;
+ *             where resp points to the results of the call and raddr is the
+ *             address if the responder to the broadcast.
+ */
+
+extern bool_t pmap_set (const u_long __program, const u_long __vers,
+                       int __protocol, u_short __port) __THROW;
+extern bool_t pmap_unset (const u_long __program, const u_long __vers)
+     __THROW;
+extern struct pmaplist *pmap_getmaps (struct sockaddr_in *__address) __THROW;
+extern enum clnt_stat pmap_rmtcall (struct sockaddr_in *__addr,
+                                   const u_long __prog,
+                                   const u_long __vers,
+                                   const u_long __proc,
+                                   xdrproc_t __xdrargs,
+                                   caddr_t __argsp, xdrproc_t __xdrres,
+                                   caddr_t __resp, struct timeval __tout,
+                                   u_long *__port_ptr) __THROW;
+extern enum clnt_stat clnt_broadcast (const u_long __prog,
+                                     const u_long __vers,
+                                     const u_long __proc, xdrproc_t __xargs,
+                                     caddr_t __argsp, xdrproc_t __xresults,
+                                     caddr_t __resultsp,
+                                     resultproc_t __eachresult) __THROW;
+extern u_short pmap_getport (struct sockaddr_in *__address,
+                            const u_long __program,
+                            const u_long __version, u_int __protocol)
+     __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_clnt.h */
diff --git a/lib/libdss-include/include/rpc/pmap_prot.h b/lib/libdss-include/include/rpc/pmap_prot.h
new file mode 100644 (file)
index 0000000..e5fd7cb
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * pmap_prot.h
+ * Protocol for the local binder service, or pmap.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_PROT_H
+#define _RPC_PMAP_PROT_H       1
+
+#include <features.h>
+
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+/* The following procedures are supported by the protocol:
+ *
+ * PMAPPROC_NULL() returns ()
+ *     takes nothing, returns nothing
+ *
+ * PMAPPROC_SET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Registers the tuple
+ *     [prog, vers, prot, port].
+ *
+ * PMAPPROC_UNSET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Un-registers pair
+ *     [prog, vers].  prot and port are ignored.
+ *
+ * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
+ *     0 is failure.  Otherwise returns the port number where the pair
+ *     [prog, vers] is registered.  It may lie!
+ *
+ * PMAPPROC_DUMP() RETURNS (struct pmaplist *)
+ *
+ * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
+ *     RETURNS (port, string<>);
+ * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc, encapsulatedargs);
+ *     Calls the procedure on the local machine.  If it is not registered,
+ *     this procedure is quite; ie it does not return error information!!!
+ *     This procedure only is supported on rpc/udp and calls via
+ *     rpc/udp.  This routine only passes null authentication parameters.
+ *     This file has no interface to xdr routines for PMAPPROC_CALLIT.
+ *
+ * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
+ */
+
+#define PMAPPORT               ((u_short)111)
+#define PMAPPROG               ((u_long)100000)
+#define PMAPVERS               ((u_long)2)
+#define PMAPVERS_PROTO         ((u_long)2)
+#define PMAPVERS_ORIG          ((u_long)1)
+#define PMAPPROC_NULL          ((u_long)0)
+#define PMAPPROC_SET           ((u_long)1)
+#define PMAPPROC_UNSET         ((u_long)2)
+#define PMAPPROC_GETPORT       ((u_long)3)
+#define PMAPPROC_DUMP          ((u_long)4)
+#define PMAPPROC_CALLIT                ((u_long)5)
+
+struct pmap {
+       long unsigned pm_prog;
+       long unsigned pm_vers;
+       long unsigned pm_prot;
+       long unsigned pm_port;
+};
+
+extern bool_t xdr_pmap (XDR *__xdrs, struct pmap *__regs) __THROW;
+
+struct pmaplist {
+       struct pmap     pml_map;
+       struct pmaplist *pml_next;
+};
+
+extern bool_t xdr_pmaplist (XDR *__xdrs, struct pmaplist **__rp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_prot.h */
diff --git a/lib/libdss-include/include/rpc/pmap_rmt.h b/lib/libdss-include/include/rpc/pmap_rmt.h
new file mode 100644 (file)
index 0000000..f868014
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Structures and XDR routines for parameters to and replies from
+ * the portmapper remote-call-service.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_RMT_H
+#define _RPC_PMAP_RMT_H        1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+struct rmtcallargs {
+       u_long prog, vers, proc, arglen;
+       caddr_t args_ptr;
+       xdrproc_t xdr_args;
+};
+
+extern bool_t xdr_rmtcall_args (XDR *__xdrs, struct rmtcallargs *__crp)
+     __THROW;
+
+struct rmtcallres {
+       u_long *port_ptr;
+       u_long resultslen;
+       caddr_t results_ptr;
+       xdrproc_t xdr_results;
+};
+
+extern bool_t xdr_rmtcallres (XDR *__xdrs, struct rmtcallres *__crp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_rmt.h */
diff --git a/lib/libdss-include/include/rpc/rpc.h b/lib/libdss-include/include/rpc/rpc.h
new file mode 100644 (file)
index 0000000..173a4e3
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * rpc.h, Just includes the billions of rpc header files necessary to
+ * do remote procedure calling.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_RPC_H
+#define _RPC_RPC_H 1
+
+#include <rpc/types.h>         /* some typedefs */
+#include <netinet/in.h>
+
+/* external data representation interfaces */
+#include <rpc/xdr.h>           /* generic (de)serializer */
+
+/* Client side only authentication */
+#include <rpc/auth.h>          /* generic authenticator (client side) */
+
+/* Client side (mostly) remote procedure call */
+#include <rpc/clnt.h>          /* generic rpc stuff */
+
+/* semi-private protocol headers */
+#include <rpc/rpc_msg.h>       /* protocol for rpc messages */
+#include <rpc/auth_unix.h>     /* protocol for unix style cred */
+#include <rpc/auth_des.h>      /* protocol for des style cred */
+
+/* Server side only remote procedure callee */
+#include <rpc/svc.h>           /* service manager and multiplexer */
+#include <rpc/svc_auth.h>      /* service side authenticator */
+
+/*
+ * COMMENT OUT THE NEXT INCLUDE IF RUNNING ON SUN OS OR ON A VERSION
+ * OF UNIX BASED ON NFSSRC.  These systems will already have the structures
+ * defined by <rpc/netdb.h> included in <netdb.h>.
+ */
+/* routines for parsing /etc/rpc */
+#include <rpc/netdb.h>         /* structures and routines to parse /etc/rpc */
+
+__BEGIN_DECLS
+
+/* Global variables, protected for multi-threaded applications.  */
+extern fd_set *__rpc_thread_svc_fdset (void) __attribute__ ((__const__));
+#define svc_fdset (*__rpc_thread_svc_fdset ())
+
+extern struct rpc_createerr *__rpc_thread_createerr (void)
+     __attribute__ ((__const__));
+#define get_rpc_createerr() (*__rpc_thread_createerr ())
+/* The people who "engineered" RPC should bee punished for naming the
+   data structure and the variable the same.  We cannot always define the
+   macro 'rpc_createerr' because this would prevent people from defining
+   object of type 'struct rpc_createerr'.  So we leave it up to the user
+   to select transparent replacement also of this variable.  */
+#ifdef _RPC_MT_VARS
+# define rpc_createerr (*__rpc_thread_createerr ())
+#endif
+
+extern struct pollfd **__rpc_thread_svc_pollfd (void)
+     __attribute__ ((__const__));
+#define svc_pollfd (*__rpc_thread_svc_pollfd ())
+
+extern int *__rpc_thread_svc_max_pollfd (void) __attribute__ ((__const__));
+#define svc_max_pollfd (*__rpc_thread_svc_max_pollfd ())
+
+__END_DECLS
+
+#endif /* rpc/rpc.h */
diff --git a/lib/libdss-include/include/rpc/rpc_des.h b/lib/libdss-include/include/rpc/rpc_des.h
new file mode 100644 (file)
index 0000000..4b3c426
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Generic DES driver interface
+ * Keep this file hardware independent!
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _DES_H
+#define _DES_H
+
+#include <sys/types.h>
+
+#define DES_MAXLEN     65536   /* maximum # of bytes to encrypt  */
+#define DES_QUICKLEN   16      /* maximum # of bytes to encrypt quickly */
+
+enum desdir
+  {
+    ENCRYPT, DECRYPT
+  };
+enum desmode
+  {
+    CBC, ECB
+  };
+
+/*
+ * parameters to ioctl call
+ */
+struct desparams
+  {
+    u_char des_key[8];         /* key (with low bit parity) */
+    enum desdir des_dir;       /* direction */
+    enum desmode des_mode;     /* mode */
+    u_char des_ivec[8];                /* input vector */
+    unsigned des_len;          /* number of bytes to crypt */
+    union
+      {
+       u_char UDES_data[DES_QUICKLEN];
+       u_char *UDES_buf;
+      }
+    UDES;
+#define des_data UDES.UDES_data        /* direct data here if quick */
+#define des_buf        UDES.UDES_buf   /* otherwise, pointer to data */
+  };
+
+#endif
diff --git a/lib/libdss-include/include/rpc/rpc_msg.h b/lib/libdss-include/include/rpc/rpc_msg.h
new file mode 100644 (file)
index 0000000..273b187
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * rpc_msg.h
+ * rpc message definition
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_MSG_H
+#define _RPC_MSG_H 1
+
+#include <sys/cdefs.h>
+
+#include <rpc/xdr.h>
+#include <rpc/clnt.h>
+
+#define RPC_MSG_VERSION                ((u_long) 2)
+#define RPC_SERVICE_PORT       ((u_short) 2048)
+
+__BEGIN_DECLS
+
+/*
+ * Bottom up definition of an rpc message.
+ * NOTE: call and reply use the same overall struct but
+ * different parts of unions within it.
+ */
+
+enum msg_type {
+       CALL=0,
+       REPLY=1
+};
+
+enum reply_stat {
+       MSG_ACCEPTED=0,
+       MSG_DENIED=1
+};
+
+enum accept_stat {
+       SUCCESS=0,
+       PROG_UNAVAIL=1,
+       PROG_MISMATCH=2,
+       PROC_UNAVAIL=3,
+       GARBAGE_ARGS=4,
+       SYSTEM_ERR=5
+};
+
+enum reject_stat {
+       RPC_MISMATCH=0,
+       AUTH_ERROR=1
+};
+
+/*
+ * Reply part of an rpc exchange
+ */
+
+/*
+ * Reply to an rpc request that was accepted by the server.
+ * Note: there could be an error even though the request was
+ * accepted.
+ */
+struct accepted_reply {
+       struct opaque_auth      ar_verf;
+       enum accept_stat        ar_stat;
+       union {
+               struct {
+                       u_long  low;
+                       u_long  high;
+               } AR_versions;
+               struct {
+                       caddr_t where;
+                       xdrproc_t proc;
+               } AR_results;
+               /* and many other null cases */
+       } ru;
+#define        ar_results      ru.AR_results
+#define        ar_vers         ru.AR_versions
+};
+
+/*
+ * Reply to an rpc request that was rejected by the server.
+ */
+struct rejected_reply {
+       enum reject_stat rj_stat;
+       union {
+               struct {
+                       u_long low;
+                       u_long high;
+               } RJ_versions;
+               enum auth_stat RJ_why;  /* why authentication did not work */
+       } ru;
+#define        rj_vers ru.RJ_versions
+#define        rj_why  ru.RJ_why
+};
+
+/*
+ * Body of a reply to an rpc request.
+ */
+struct reply_body {
+       enum reply_stat rp_stat;
+       union {
+               struct accepted_reply RP_ar;
+               struct rejected_reply RP_dr;
+       } ru;
+#define        rp_acpt ru.RP_ar
+#define        rp_rjct ru.RP_dr
+};
+
+/*
+ * Body of an rpc request call.
+ */
+struct call_body {
+       u_long cb_rpcvers;      /* must be equal to two */
+       u_long cb_prog;
+       u_long cb_vers;
+       u_long cb_proc;
+       struct opaque_auth cb_cred;
+       struct opaque_auth cb_verf; /* protocol specific - provided by client */
+};
+
+/*
+ * The rpc message
+ */
+struct rpc_msg {
+       u_long                  rm_xid;
+       enum msg_type           rm_direction;
+       union {
+               struct call_body RM_cmb;
+               struct reply_body RM_rmb;
+       } ru;
+#define        rm_call         ru.RM_cmb
+#define        rm_reply        ru.RM_rmb
+};
+#define        acpted_rply     ru.RM_rmb.ru.RP_ar
+#define        rjcted_rply     ru.RM_rmb.ru.RP_dr
+
+
+/*
+ * XDR routine to handle a rpc message.
+ * xdr_callmsg(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t  xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
+
+/*
+ * XDR routine to pre-serialize the static part of a rpc message.
+ * xdr_callhdr(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t  xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
+
+/*
+ * XDR routine to handle a rpc reply.
+ * xdr_replymsg(xdrs, rmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *rmsg;
+ */
+extern bool_t  xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg) __THROW;
+
+/*
+ * Fills in the error part of a reply message.
+ * _seterr_reply(msg, error)
+ *     struct rpc_msg *msg;
+ *     struct rpc_err *error;
+ */
+extern void    _seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error)
+     __THROW;
+
+__END_DECLS
+
+#endif /* rpc/rpc_msg.h */
diff --git a/lib/libdss-include/include/rpc/svc.h b/lib/libdss-include/include/rpc/svc.h
new file mode 100644 (file)
index 0000000..1879fd2
--- /dev/null
@@ -0,0 +1,336 @@
+/*
+ * svc.h, Server-side remote procedure call interface.
+ *
+ * Copyright (C) 2012-2016 Free Software Foundation, Inc.
+ * This file is part of the GNU C Library.
+ *
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * The GNU C Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the GNU C Library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_SVC_H
+#define _RPC_SVC_H 1
+
+#include <features.h>
+#include <rpc/rpc_msg.h>
+
+__BEGIN_DECLS
+
+/*
+ * This interface must manage two items concerning remote procedure calling:
+ *
+ * 1) An arbitrary number of transport connections upon which rpc requests
+ * are received.  The two most notable transports are TCP and UDP;  they are
+ * created and registered by routines in svc_tcp.c and svc_udp.c, respectively;
+ * they in turn call xprt_register and xprt_unregister.
+ *
+ * 2) An arbitrary number of locally registered services.  Services are
+ * described by the following four data: program number, version number,
+ * "service dispatch" function, a transport handle, and a boolean that
+ * indicates whether or not the exported program should be registered with a
+ * local binder service;  if true the program's number and version and the
+ * port number from the transport handle are registered with the binder.
+ * These data are registered with the rpc svc system via svc_register.
+ *
+ * A service's dispatch function is called whenever an rpc request comes in
+ * on a transport.  The request's program and version numbers must match
+ * those of the registered service.  The dispatch function is passed two
+ * parameters, struct svc_req * and SVCXPRT *, defined below.
+ */
+
+enum xprt_stat {
+       XPRT_DIED,
+       XPRT_MOREREQS,
+       XPRT_IDLE
+};
+
+/*
+ * Server side transport handle
+ */
+typedef struct SVCXPRT SVCXPRT;
+struct SVCXPRT {
+  int xp_sock;
+  u_short xp_port;             /* associated port number */
+  const struct xp_ops {
+    bool_t     (*xp_recv) (SVCXPRT *__xprt, struct rpc_msg *__msg);
+                               /* receive incoming requests */
+    enum xprt_stat (*xp_stat) (SVCXPRT *__xprt);
+                               /* get transport status */
+    bool_t     (*xp_getargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
+                              caddr_t __args_ptr); /* get arguments */
+    bool_t     (*xp_reply) (SVCXPRT *__xprt, struct rpc_msg *__msg);
+                               /* send reply */
+    bool_t     (*xp_freeargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
+                               caddr_t __args_ptr);
+                               /* free mem allocated for args */
+    void       (*xp_destroy) (SVCXPRT *__xprt);
+                               /* destroy this struct */
+  } *xp_ops;
+  int          xp_addrlen;      /* length of remote address */
+  struct sockaddr_in xp_raddr;  /* remote address */
+  struct opaque_auth xp_verf;   /* raw response verifier */
+  caddr_t              xp_p1;           /* private */
+  caddr_t              xp_p2;           /* private */
+  char         xp_pad [256];   /* padding, internal use */
+};
+
+/*
+ *  Approved way of getting address of caller
+ */
+#define svc_getcaller(x) (&(x)->xp_raddr)
+
+/*
+ * Operations defined on an SVCXPRT handle
+ *
+ * SVCXPRT             *xprt;
+ * struct rpc_msg      *msg;
+ * xdrproc_t            xargs;
+ * caddr_t              argsp;
+ */
+#define SVC_RECV(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+#define svc_recv(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+
+#define SVC_STAT(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+#define svc_stat(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+
+#define SVC_GETARGS(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+#define svc_getargs(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+
+#define SVC_REPLY(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+#define svc_reply(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+
+#define SVC_FREEARGS(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+#define svc_freeargs(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+
+#define SVC_DESTROY(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+#define svc_destroy(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+
+
+/*
+ * Service request
+ */
+struct svc_req {
+  rpcprog_t rq_prog;            /* service program number */
+  rpcvers_t rq_vers;            /* service protocol version */
+  rpcproc_t rq_proc;            /* the desired procedure */
+  struct opaque_auth rq_cred;   /* raw creds from the wire */
+  caddr_t rq_clntcred;          /* read only cooked cred */
+  SVCXPRT *rq_xprt;             /* associated transport */
+};
+
+#ifndef __DISPATCH_FN_T
+#define __DISPATCH_FN_T
+typedef void (*__dispatch_fn_t) (struct svc_req*, SVCXPRT*);
+#endif
+
+/*
+ * Service registration
+ *
+ * svc_register(xprt, prog, vers, dispatch, protocol)
+ *     SVCXPRT *xprt;
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
+ *     void (*dispatch)(struct svc_req*, SVCXPRT*);
+ *     rpcprot_t protocol;  like TCP or UDP, zero means do not register
+ */
+extern bool_t svc_register (SVCXPRT *__xprt, rpcprog_t __prog,
+                           rpcvers_t __vers, __dispatch_fn_t __dispatch,
+                           rpcprot_t __protocol) __THROW;
+
+/*
+ * Service un-registration
+ *
+ * svc_unregister(prog, vers)
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
+ */
+extern void svc_unregister (rpcprog_t __prog, rpcvers_t __vers) __THROW;
+
+/*
+ * Transport registration.
+ *
+ * xprt_register(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_register (SVCXPRT *__xprt) __THROW;
+
+/*
+ * Transport un-register
+ *
+ * xprt_unregister(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_unregister (SVCXPRT *__xprt) __THROW;
+
+
+/*
+ * When the service routine is called, it must first check to see if it
+ * knows about the procedure;  if not, it should call svcerr_noproc
+ * and return.  If so, it should deserialize its arguments via
+ * SVC_GETARGS (defined above).  If the deserialization does not work,
+ * svcerr_decode should be called followed by a return.  Successful
+ * decoding of the arguments should be followed the execution of the
+ * procedure's code and a call to svc_sendreply.
+ *
+ * Also, if the service refuses to execute the procedure due to too-
+ * weak authentication parameters, svcerr_weakauth should be called.
+ * Note: do not confuse access-control failure with weak authentication!
+ *
+ * NB: In pure implementations of rpc, the caller always waits for a reply
+ * msg.  This message is sent when svc_sendreply is called.
+ * Therefore pure service implementations should always call
+ * svc_sendreply even if the function logically returns void;  use
+ * xdr.h - xdr_void for the xdr routine.  HOWEVER, tcp based rpc allows
+ * for the abuse of pure rpc via batched calling or pipelining.  In the
+ * case of a batched call, svc_sendreply should NOT be called since
+ * this would send a return message, which is what batching tries to avoid.
+ * It is the service/protocol writer's responsibility to know which calls are
+ * batched and which are not.  Warning: responding to batch calls may
+ * deadlock the caller and server processes!
+ */
+
+extern bool_t  svc_sendreply (SVCXPRT *__xprt, xdrproc_t __xdr_results,
+                              caddr_t __xdr_location) __THROW;
+
+extern void    svcerr_decode (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_weakauth (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_noproc (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_progvers (SVCXPRT *__xprt, rpcvers_t __low_vers,
+                                rpcvers_t __high_vers) __THROW;
+
+extern void    svcerr_auth (SVCXPRT *__xprt, enum auth_stat __why) __THROW;
+
+extern void    svcerr_noprog (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_systemerr (SVCXPRT *__xprt) __THROW;
+
+/*
+ * Lowest level dispatching -OR- who owns this process anyway.
+ * Somebody has to wait for incoming requests and then call the correct
+ * service routine.  The routine svc_run does infinite waiting; i.e.,
+ * svc_run never returns.
+ * Since another (coexistent) package may wish to selectively wait for
+ * incoming calls or other events outside of the rpc architecture, the
+ * routine svc_getreq is provided.  It must be passed readfds, the
+ * "in-place" results of a select system call (see select, section 2).
+ */
+
+/*
+ * Global keeper of rpc service descriptors in use
+ * dynamic; must be inspected before each call to select
+ */
+
+extern struct pollfd *svc_pollfd;
+extern int svc_max_pollfd;
+extern fd_set svc_fdset;
+#define svc_fds svc_fdset.fds_bits[0]  /* compatibility */
+
+/*
+ * a small program implemented by the svc_rpc implementation itself;
+ * also see clnt.h for protocol numbers.
+ */
+extern void svc_getreq (int __rdfds) __THROW;
+extern void svc_getreq_common (const int __fd) __THROW;
+extern void svc_getreqset (fd_set *__readfds) __THROW;
+extern void svc_getreq_poll (struct pollfd *, const int) __THROW;
+extern void svc_exit (void) __THROW;
+extern void svc_run (void) __THROW;
+
+/*
+ * Socket to use on svcxxx_create call to get default socket
+ */
+#define        RPC_ANYSOCK     -1
+
+/*
+ * These are the existing service side transport implementations
+ */
+
+/*
+ * Memory based rpc for testing and timing.
+ */
+extern SVCXPRT *svcraw_create (void) __THROW;
+
+/*
+ * Udp based rpc.
+ */
+extern SVCXPRT *svcudp_create (int __sock) __THROW;
+extern SVCXPRT *svcudp_bufcreate (int __sock, u_int __sendsz, u_int __recvsz)
+     __THROW;
+
+/*
+ * Tcp based rpc.
+ */
+extern SVCXPRT *svctcp_create (int __sock, u_int __sendsize, u_int __recvsize)
+     __THROW;
+
+/*
+ * FD based rpc.
+ */
+extern SVCXPRT *svcfd_create (int __sock, u_int __sendsize, u_int __recvsize)
+     __THROW;
+
+/*
+ * Unix based rpc.
+ */
+extern SVCXPRT *svcunix_create (int __sock, u_int __sendsize, u_int __recvsize,
+                               char *__path) __THROW;
+
+
+__END_DECLS
+
+#endif /* rpc/svc.h */
diff --git a/lib/libdss-include/include/rpc/svc_auth.h b/lib/libdss-include/include/rpc/svc_auth.h
new file mode 100644 (file)
index 0000000..4ba2741
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * svc_auth.h, Service side of rpc authentication.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_SVC_AUTH_H
+#define _RPC_SVC_AUTH_H        1
+
+#include <features.h>
+#include <rpc/svc.h>
+
+__BEGIN_DECLS
+
+/*
+ * Server side authenticator
+ */
+extern enum auth_stat _authenticate (struct svc_req *__rqst,
+                                    struct rpc_msg *__msg) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/svc_auth.h */
diff --git a/lib/libdss-include/include/rpc/types.h b/lib/libdss-include/include/rpc/types.h
new file mode 100644 (file)
index 0000000..beded52
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* fixincludes should not add extern "C" to this file */
+/*
+ * Rpc additions to <sys/types.h>
+ */
+#ifndef _RPC_TYPES_H
+#define _RPC_TYPES_H 1
+
+typedef int bool_t;
+typedef int enum_t;
+/* This needs to be changed to uint32_t in the future */
+typedef unsigned long rpcprog_t;
+typedef unsigned long rpcvers_t;
+typedef unsigned long rpcproc_t;
+typedef unsigned long rpcprot_t;
+typedef unsigned long rpcport_t;
+
+#define        __dontcare__    -1
+
+#ifndef FALSE
+#      define  FALSE   (0)
+#endif
+
+#ifndef TRUE
+#      define  TRUE    (1)
+#endif
+
+#ifndef NULL
+#      define  NULL 0
+#endif
+
+#include <stdlib.h>            /* For malloc decl.  */
+#define mem_alloc(bsize)       malloc(bsize)
+/*
+ * XXX: This must not use the second argument, or code in xdr_array.c needs
+ * to be modified.
+ */
+#define mem_free(ptr, bsize)   free(ptr)
+
+#ifndef makedev /* ie, we haven't already included it */
+#include <sys/types.h>
+#endif
+
+#if defined __APPLE_CC__ || defined __FreeBSD__
+# define __u_char_defined
+# define __daddr_t_defined
+#endif
+
+#ifndef __u_char_defined
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+# define __u_char_defined
+#endif
+#ifndef __daddr_t_defined
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+# define __daddr_t_defined
+#endif
+
+#include <sys/time.h>
+#include <sys/param.h>
+
+#include <netinet/in.h>
+
+#ifndef INADDR_LOOPBACK
+#define       INADDR_LOOPBACK         (u_long)0x7F000001
+#endif
+#ifndef MAXHOSTNAMELEN
+#define        MAXHOSTNAMELEN  64
+#endif
+
+#endif /* rpc/types.h */
diff --git a/lib/libdss-include/include/rpc/xdr.h b/lib/libdss-include/include/rpc/xdr.h
new file mode 100644 (file)
index 0000000..d80d8f7
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ * xdr.h, External Data Representation Serialization Routines.
+ *
+ * Copyright (c) 2010, 2012, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_XDR_H
+#define _RPC_XDR_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+
+/* We need FILE.  */
+#include <stdio.h>
+
+__BEGIN_DECLS
+
+/*
+ * XDR provides a conventional way for converting between C data
+ * types and an external bit-string representation.  Library supplied
+ * routines provide for the conversion on built-in C data types.  These
+ * routines and utility routines defined here are used to help implement
+ * a type encode/decode routine for each user-defined type.
+ *
+ * Each data type provides a single procedure which takes two arguments:
+ *
+ *      bool_t
+ *      xdrproc(xdrs, argresp)
+ *              XDR *xdrs;
+ *              <type> *argresp;
+ *
+ * xdrs is an instance of a XDR handle, to which or from which the data
+ * type is to be converted.  argresp is a pointer to the structure to be
+ * converted.  The XDR handle contains an operation field which indicates
+ * which of the operations (ENCODE, DECODE * or FREE) is to be performed.
+ *
+ * XDR_DECODE may allocate space if the pointer argresp is null.  This
+ * data can be freed with the XDR_FREE operation.
+ *
+ * We write only one procedure per data type to make it easy
+ * to keep the encode and decode procedures for a data type consistent.
+ * In many cases the same code performs all operations on a user defined type,
+ * because all the hard work is done in the component type routines.
+ * decode as a series of calls on the nested data types.
+ */
+
+/*
+ * Xdr operations.  XDR_ENCODE causes the type to be encoded into the
+ * stream.  XDR_DECODE causes the type to be extracted from the stream.
+ * XDR_FREE can be used to release the space allocated by an XDR_DECODE
+ * request.
+ */
+enum xdr_op {
+  XDR_ENCODE = 0,
+  XDR_DECODE = 1,
+  XDR_FREE = 2
+};
+
+/*
+ * This is the number of bytes per unit of external data.
+ */
+#define BYTES_PER_XDR_UNIT     (4)
+/*
+ * This only works if the above is a power of 2.  But it's defined to be
+ * 4 by the appropriate RFCs.  So it will work.  And it's normally quicker
+ * than the old routine.
+ */
+#if 1
+#define RNDUP(x)  (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1))
+#else /* this is the old routine */
+#define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
+                   * BYTES_PER_XDR_UNIT)
+#endif
+
+/*
+ * The XDR handle.
+ * Contains operation which is being applied to the stream,
+ * an operations vector for the particular implementation (e.g. see xdr_mem.c),
+ * and two private fields for the use of the particular implementation.
+ */
+typedef struct XDR XDR;
+struct XDR
+  {
+    enum xdr_op x_op;          /* operation; fast additional param */
+    struct xdr_ops
+      {
+       bool_t (*x_getlong) (XDR *__xdrs, long *__lp);
+       /* get a long from underlying stream */
+       bool_t (*x_putlong) (XDR *__xdrs, const long *__lp);
+       /* put a long to " */
+       bool_t (*x_getbytes) (XDR *__xdrs, caddr_t __addr, u_int __len);
+       /* get some bytes from " */
+       bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, u_int __len);
+       /* put some bytes to " */
+       u_int (*x_getpostn) (const XDR *__xdrs);
+       /* returns bytes off from beginning */
+       bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
+       /* lets you reposition the stream */
+       int32_t *(*x_inline) (XDR *__xdrs, u_int __len);
+       /* buf quick ptr to buffered data */
+       void (*x_destroy) (XDR *__xdrs);
+       /* free privates of this xdr_stream */
+       bool_t (*x_getint32) (XDR *__xdrs, int32_t *__ip);
+       /* get a int from underlying stream */
+       bool_t (*x_putint32) (XDR *__xdrs, const int32_t *__ip);
+       /* put a int to " */
+      }
+     *x_ops;
+    caddr_t x_public;          /* users' data */
+    caddr_t x_private;         /* pointer to private data */
+    caddr_t x_base;            /* private used for position info */
+    u_int x_handy;             /* extra private word */
+  };
+
+/*
+ * A xdrproc_t exists for each data type which is to be encoded or decoded.
+ *
+ * The second argument to the xdrproc_t is a pointer to an opaque pointer.
+ * The opaque pointer generally points to a structure of the data type
+ * to be decoded.  If this pointer is 0, then the type routines should
+ * allocate dynamic storage of the appropriate size and return it.
+ * bool_t       (*xdrproc_t)(XDR *, caddr_t *);
+ */
+typedef bool_t (*xdrproc_t) (XDR *, void *,...);
+
+
+/*
+ * Operations defined on a XDR handle
+ *
+ * XDR          *xdrs;
+ * int32_t      *int32p;
+ * long         *longp;
+ * caddr_t       addr;
+ * u_int         len;
+ * u_int         pos;
+ */
+#define XDR_GETINT32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
+#define xdr_getint32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
+
+#define XDR_PUTINT32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
+#define xdr_putint32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
+
+#define XDR_GETLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+#define xdr_getlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+
+#define XDR_PUTLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+#define xdr_putlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+
+#define XDR_GETBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+#define xdr_getbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+
+#define XDR_PUTBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+#define xdr_putbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+
+#define XDR_GETPOS(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+#define xdr_getpos(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+
+#define XDR_SETPOS(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+#define xdr_setpos(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+
+#define        XDR_INLINE(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+#define        xdr_inline(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+
+#define        XDR_DESTROY(xdrs)                                       \
+       do {                                                    \
+               if ((xdrs)->x_ops->x_destroy)                   \
+                       (*(xdrs)->x_ops->x_destroy)(xdrs);      \
+       } while (0)
+#define        xdr_destroy(xdrs)                                       \
+       do {                                                    \
+               if ((xdrs)->x_ops->x_destroy)                   \
+                       (*(xdrs)->x_ops->x_destroy)(xdrs);      \
+       } while (0)
+
+/*
+ * Support struct for discriminated unions.
+ * You create an array of xdrdiscrim structures, terminated with
+ * an entry with a null procedure pointer.  The xdr_union routine gets
+ * the discriminant value and then searches the array of structures
+ * for a matching value.  If a match is found the associated xdr routine
+ * is called to handle that part of the union.  If there is
+ * no match, then a default routine may be called.
+ * If there is no match and no default routine it is an error.
+ */
+#define NULL_xdrproc_t ((xdrproc_t)0)
+struct xdr_discrim
+{
+  int value;
+  xdrproc_t proc;
+};
+
+/*
+ * Inline routines for fast encode/decode of primitive data types.
+ * Caveat emptor: these use single memory cycles to get the
+ * data from the underlying buffer, and will fail to operate
+ * properly if the data is not aligned.  The standard way to use these
+ * is to say:
+ *      if ((buf = XDR_INLINE(xdrs, count)) == NULL)
+ *              return (FALSE);
+ *      <<< macro calls >>>
+ * where ``count'' is the number of bytes of data occupied
+ * by the primitive data types.
+ *
+ * N.B. and frozen for all time: each data type here uses 4 bytes
+ * of external representation.
+ */
+
+#define IXDR_GET_INT32(buf)           ((int32_t)ntohl((uint32_t)*(buf)++))
+#define IXDR_PUT_INT32(buf, v)        (*(buf)++ = (int32_t)htonl((uint32_t)(v)))
+#define IXDR_GET_U_INT32(buf)         ((uint32_t)IXDR_GET_INT32(buf))
+#define IXDR_PUT_U_INT32(buf, v)      IXDR_PUT_INT32(buf, (int32_t)(v))
+
+/* WARNING: The IXDR_*_LONG defines are removed by Sun for new platforms
+ * and shouldn't be used any longer. Code which use this defines or longs
+ * in the RPC code will not work on 64bit Solaris platforms !
+ */
+#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))
+#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))
+#define IXDR_GET_U_LONG(buf)         ((u_long)IXDR_GET_LONG(buf))
+#define IXDR_PUT_U_LONG(buf, v)              IXDR_PUT_LONG(buf, (long)(v))
+
+
+#define IXDR_GET_BOOL(buf)            ((bool_t)IXDR_GET_LONG(buf))
+#define IXDR_GET_ENUM(buf, t)         ((t)IXDR_GET_LONG(buf))
+#define IXDR_GET_SHORT(buf)           ((short)IXDR_GET_LONG(buf))
+#define IXDR_GET_U_SHORT(buf)         ((u_short)IXDR_GET_LONG(buf))
+
+#define IXDR_PUT_BOOL(buf, v)         IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_ENUM(buf, v)         IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_SHORT(buf, v)        IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_U_SHORT(buf, v)      IXDR_PUT_LONG(buf, (long)(v))
+
+/*
+ * These are the "generic" xdr routines.
+ * None of these can have const applied because it's not possible to
+ * know whether the call is a read or a write to the passed parameter
+ * also, the XDR structure is always updated by some of these calls.
+ */
+extern bool_t xdr_void (void) __THROW;
+extern bool_t xdr_short (XDR *__xdrs, short *__sp) __THROW;
+extern bool_t xdr_u_short (XDR *__xdrs, u_short *__usp) __THROW;
+extern bool_t xdr_int (XDR *__xdrs, int *__ip) __THROW;
+extern bool_t xdr_u_int (XDR *__xdrs, u_int *__up) __THROW;
+extern bool_t xdr_long (XDR *__xdrs, long *__lp) __THROW;
+extern bool_t xdr_u_long (XDR *__xdrs, u_long *__ulp) __THROW;
+extern bool_t xdr_hyper (XDR *__xdrs, quad_t *__llp) __THROW;
+extern bool_t xdr_u_hyper (XDR *__xdrs, u_quad_t *__ullp) __THROW;
+extern bool_t xdr_longlong_t (XDR *__xdrs, quad_t *__llp) __THROW;
+extern bool_t xdr_u_longlong_t (XDR *__xdrs, u_quad_t *__ullp) __THROW;
+extern bool_t xdr_int8_t (XDR *__xdrs, int8_t *__ip) __THROW;
+extern bool_t xdr_uint8_t (XDR *__xdrs, uint8_t *__up) __THROW;
+extern bool_t xdr_int16_t (XDR *__xdrs, int16_t *__ip) __THROW;
+extern bool_t xdr_uint16_t (XDR *__xdrs, uint16_t *__up) __THROW;
+extern bool_t xdr_int32_t (XDR *__xdrs, int32_t *__ip) __THROW;
+extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
+extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
+extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
+extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
+extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
+extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
+extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
+extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
+                        u_int __maxsize, u_int __elsize, xdrproc_t __elproc)
+     __THROW;
+extern bool_t xdr_bytes (XDR *__xdrs, char **__cpp, u_int *__sizep,
+                        u_int __maxsize) __THROW;
+extern bool_t xdr_opaque (XDR *__xdrs, caddr_t __cp, u_int __cnt) __THROW;
+extern bool_t xdr_string (XDR *__xdrs, char **__cpp, u_int __maxsize) __THROW;
+extern bool_t xdr_union (XDR *__xdrs, enum_t *__dscmp, char *__unp,
+                        const struct xdr_discrim *__choices,
+                        xdrproc_t __dfault) __THROW;
+extern bool_t xdr_char (XDR *__xdrs, char *__cp) __THROW;
+extern bool_t xdr_u_char (XDR *__xdrs, u_char *__cp) __THROW;
+extern bool_t xdr_vector (XDR *__xdrs, char *__basep, u_int __nelem,
+                         u_int __elemsize, xdrproc_t __xdr_elem) __THROW;
+extern bool_t xdr_float (XDR *__xdrs, float *__fp) __THROW;
+extern bool_t xdr_double (XDR *__xdrs, double *__dp) __THROW;
+extern bool_t xdr_reference (XDR *__xdrs, caddr_t *__xpp, u_int __size,
+                            xdrproc_t __proc) __THROW;
+extern bool_t xdr_pointer (XDR *__xdrs, char **__objpp,
+                          u_int __obj_size, xdrproc_t __xdr_obj) __THROW;
+extern bool_t xdr_wrapstring (XDR *__xdrs, char **__cpp) __THROW;
+extern u_long xdr_sizeof (xdrproc_t, void *) __THROW;
+
+/*
+ * Common opaque bytes objects used by many rpc protocols;
+ * declared here due to commonality.
+ */
+#define MAX_NETOBJ_SZ 1024
+struct netobj
+{
+  u_int n_len;
+  char *n_bytes;
+};
+typedef struct netobj netobj;
+extern bool_t xdr_netobj (XDR *__xdrs, struct netobj *__np) __THROW;
+
+/*
+ * These are the public routines for the various implementations of
+ * xdr streams.
+ */
+
+/* XDR using memory buffers */
+extern void xdrmem_create (XDR *__xdrs, const caddr_t __addr,
+                          u_int __size, enum xdr_op __xop) __THROW;
+
+/* XDR using stdio library */
+extern void xdrstdio_create (XDR *__xdrs, FILE *__file, enum xdr_op __xop)
+     __THROW;
+
+/* XDR pseudo records for tcp */
+extern void xdrrec_create (XDR *__xdrs, u_int __sendsize,
+                          u_int __recvsize, caddr_t __tcp_handle,
+                          int (*__readit) (char *, char *, int),
+                          int (*__writeit) (char *, char *, int)) __THROW;
+
+/* make end of xdr record */
+extern bool_t xdrrec_endofrecord (XDR *__xdrs, bool_t __sendnow) __THROW;
+
+/* move to beginning of next record */
+extern bool_t xdrrec_skiprecord (XDR *__xdrs) __THROW;
+
+/* true if no more input */
+extern bool_t xdrrec_eof (XDR *__xdrs) __THROW;
+
+/* free memory buffers for xdr */
+extern void xdr_free (xdrproc_t __proc, char *__objp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/xdr.h */
diff --git a/lib/libdss-include/include/rpcsvc/bootparam.h b/lib/libdss-include/include/rpcsvc/bootparam.h
new file mode 100644 (file)
index 0000000..0351a79
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RPCSVC_BOOTPARAM_H
+#define _RPCSVC_BOOTPARAM_H
+
+#include <rpcsvc/bootparam_prot.h>
+
+#endif  /* _RPCSVC_BOOTPARAM_H */
diff --git a/lib/libdss-include/include/rpcsvc/bootparam_prot.h b/lib/libdss-include/include/rpcsvc/bootparam_prot.h
new file mode 100644 (file)
index 0000000..fbed446
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _BOOTPARAM_PROT_H_RPCGEN
+#define _BOOTPARAM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rpc/types.h>
+#include <sys/time.h>
+#include <sys/errno.h>
+#include <nfs/nfs.h>
+#define MAX_MACHINE_NAME 255
+#define MAX_PATH_LEN 1024
+#define MAX_FILEID 32
+#define IP_ADDR_TYPE 1
+
+typedef char *bp_machine_name_t;
+
+typedef char *bp_path_t;
+
+typedef char *bp_fileid_t;
+
+struct ip_addr_t {
+       char net;
+       char host;
+       char lh;
+       char impno;
+};
+typedef struct ip_addr_t ip_addr_t;
+
+struct bp_address {
+       int address_type;
+       union {
+               ip_addr_t ip_addr;
+       } bp_address_u;
+};
+typedef struct bp_address bp_address;
+
+struct bp_whoami_arg {
+       bp_address client_address;
+};
+typedef struct bp_whoami_arg bp_whoami_arg;
+
+struct bp_whoami_res {
+       bp_machine_name_t client_name;
+       bp_machine_name_t domain_name;
+       bp_address router_address;
+};
+typedef struct bp_whoami_res bp_whoami_res;
+
+struct bp_getfile_arg {
+       bp_machine_name_t client_name;
+       bp_fileid_t file_id;
+};
+typedef struct bp_getfile_arg bp_getfile_arg;
+
+struct bp_getfile_res {
+       bp_machine_name_t server_name;
+       bp_address server_address;
+       bp_path_t server_path;
+};
+typedef struct bp_getfile_res bp_getfile_res;
+
+#define BOOTPARAMPROG 100026
+#define BOOTPARAMVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define BOOTPARAMPROC_WHOAMI 1
+extern  bp_whoami_res * bootparamproc_whoami_1(bp_whoami_arg *, CLIENT *);
+extern  bp_whoami_res * bootparamproc_whoami_1_svc(bp_whoami_arg *, struct svc_req *);
+#define BOOTPARAMPROC_GETFILE 2
+extern  bp_getfile_res * bootparamproc_getfile_1(bp_getfile_arg *, CLIENT *);
+extern  bp_getfile_res * bootparamproc_getfile_1_svc(bp_getfile_arg *, struct svc_req *);
+extern int bootparamprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define BOOTPARAMPROC_WHOAMI 1
+extern  bp_whoami_res * bootparamproc_whoami_1();
+extern  bp_whoami_res * bootparamproc_whoami_1_svc();
+#define BOOTPARAMPROC_GETFILE 2
+extern  bp_getfile_res * bootparamproc_getfile_1();
+extern  bp_getfile_res * bootparamproc_getfile_1_svc();
+extern int bootparamprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_bp_machine_name_t (XDR *, bp_machine_name_t*);
+extern  bool_t xdr_bp_path_t (XDR *, bp_path_t*);
+extern  bool_t xdr_bp_fileid_t (XDR *, bp_fileid_t*);
+extern  bool_t xdr_ip_addr_t (XDR *, ip_addr_t*);
+extern  bool_t xdr_bp_address (XDR *, bp_address*);
+extern  bool_t xdr_bp_whoami_arg (XDR *, bp_whoami_arg*);
+extern  bool_t xdr_bp_whoami_res (XDR *, bp_whoami_res*);
+extern  bool_t xdr_bp_getfile_arg (XDR *, bp_getfile_arg*);
+extern  bool_t xdr_bp_getfile_res (XDR *, bp_getfile_res*);
+
+#else /* K&R C */
+extern bool_t xdr_bp_machine_name_t ();
+extern bool_t xdr_bp_path_t ();
+extern bool_t xdr_bp_fileid_t ();
+extern bool_t xdr_ip_addr_t ();
+extern bool_t xdr_bp_address ();
+extern bool_t xdr_bp_whoami_arg ();
+extern bool_t xdr_bp_whoami_res ();
+extern bool_t xdr_bp_getfile_arg ();
+extern bool_t xdr_bp_getfile_res ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_BOOTPARAM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/bootparam_prot.x b/lib/libdss-include/include/rpcsvc/bootparam_prot.x
new file mode 100644 (file)
index 0000000..117e428
--- /dev/null
@@ -0,0 +1,97 @@
+/* @(#)bootparam_prot.x        2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * RPC for bootparms service.
+ * There are two procedures:
+ *   WHOAMI takes a net address and returns a client name and also a
+ *     likely net address for routing
+ *   GETFILE takes a client name and file identifier and returns the
+ *     server name, server net address and pathname for the file.
+ *   file identifiers typically include root, swap, pub and dump
+ */
+
+#ifdef RPC_HDR
+%#include <rpc/types.h>
+%#include <sys/time.h>
+%#include <sys/errno.h>
+%#include <nfs/nfs.h>
+#endif
+
+const MAX_MACHINE_NAME  = 255;
+const MAX_PATH_LEN     = 1024;
+const MAX_FILEID       = 32;
+const IP_ADDR_TYPE     = 1;
+
+typedef        string  bp_machine_name_t<MAX_MACHINE_NAME>;
+typedef        string  bp_path_t<MAX_PATH_LEN>;
+typedef        string  bp_fileid_t<MAX_FILEID>;
+
+struct ip_addr_t {
+       char    net;
+       char    host;
+       char    lh;
+       char    impno;
+};
+
+union bp_address switch (int address_type) {
+       case IP_ADDR_TYPE:
+               ip_addr_t       ip_addr;
+};
+
+struct bp_whoami_arg {
+       bp_address              client_address;
+};
+
+struct bp_whoami_res {
+       bp_machine_name_t       client_name;
+       bp_machine_name_t       domain_name;
+       bp_address              router_address;
+};
+
+struct bp_getfile_arg {
+       bp_machine_name_t       client_name;
+       bp_fileid_t             file_id;
+};
+
+struct bp_getfile_res {
+       bp_machine_name_t       server_name;
+       bp_address              server_address;
+       bp_path_t               server_path;
+};
+
+program BOOTPARAMPROG {
+       version BOOTPARAMVERS {
+               bp_whoami_res   BOOTPARAMPROC_WHOAMI(bp_whoami_arg) = 1;
+               bp_getfile_res  BOOTPARAMPROC_GETFILE(bp_getfile_arg) = 2;
+       } = 1;
+} = 100026;
diff --git a/lib/libdss-include/include/rpcsvc/key_prot.h b/lib/libdss-include/include/rpcsvc/key_prot.h
new file mode 100644 (file)
index 0000000..4fbdbf4
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KEY_PROT_H_RPCGEN
+#define _KEY_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+#pragma ident "@(#)key_prot.x  1.7     94/04/29 SMI"
+#endif
+
+/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
+
+/*
+ * Compiled from key_prot.x using rpcgen.
+ * DO NOT EDIT THIS FILE!
+ * This is NOT source code!
+ */
+#define PROOT 3
+#define HEXMODULUS "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
+#define HEXKEYBYTES 48
+#define KEYSIZE 192
+#define KEYBYTES 24
+#define KEYCHECKSUMSIZE 16
+
+enum keystatus {
+       KEY_SUCCESS = 0,
+       KEY_NOSECRET = 1,
+       KEY_UNKNOWN = 2,
+       KEY_SYSTEMERR = 3,
+};
+typedef enum keystatus keystatus;
+
+typedef char keybuf[HEXKEYBYTES];
+
+typedef char *netnamestr;
+
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+typedef struct cryptkeyarg cryptkeyarg;
+
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj remotekey;
+       des_block deskey;
+};
+typedef struct cryptkeyarg2 cryptkeyarg2;
+
+struct cryptkeyres {
+       keystatus status;
+       union {
+               des_block deskey;
+       } cryptkeyres_u;
+};
+typedef struct cryptkeyres cryptkeyres;
+#define MAXGIDS 16
+
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       struct {
+               u_int gids_len;
+               u_int *gids_val;
+       } gids;
+};
+typedef struct unixcred unixcred;
+
+struct getcredres {
+       keystatus status;
+       union {
+               unixcred cred;
+       } getcredres_u;
+};
+typedef struct getcredres getcredres;
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+typedef struct key_netstarg key_netstarg;
+
+struct key_netstres {
+       keystatus status;
+       union {
+               key_netstarg knet;
+       } key_netstres_u;
+};
+typedef struct key_netstres key_netstres;
+
+#ifndef opaque
+#define opaque char
+#endif
+
+
+#define KEY_PROG 100029
+#define KEY_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define KEY_SET 1
+extern  keystatus * key_set_1(char *, CLIENT *);
+extern  keystatus * key_set_1_svc(char *, struct svc_req *);
+#define KEY_ENCRYPT 2
+extern  cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT 3
+extern  cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN 4
+extern  des_block * key_gen_1(void *, CLIENT *);
+extern  des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED 5
+extern  getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+extern int key_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define KEY_SET 1
+extern  keystatus * key_set_1();
+extern  keystatus * key_set_1_svc();
+#define KEY_ENCRYPT 2
+extern  cryptkeyres * key_encrypt_1();
+extern  cryptkeyres * key_encrypt_1_svc();
+#define KEY_DECRYPT 3
+extern  cryptkeyres * key_decrypt_1();
+extern  cryptkeyres * key_decrypt_1_svc();
+#define KEY_GEN 4
+extern  des_block * key_gen_1();
+extern  des_block * key_gen_1_svc();
+#define KEY_GETCRED 5
+extern  getcredres * key_getcred_1();
+extern  getcredres * key_getcred_1_svc();
+extern int key_prog_1_freeresult ();
+#endif /* K&R C */
+#define KEY_VERS2 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  keystatus * key_set_2(char *, CLIENT *);
+extern  keystatus * key_set_2_svc(char *, struct svc_req *);
+extern  cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  des_block * key_gen_2(void *, CLIENT *);
+extern  des_block * key_gen_2_svc(void *, struct svc_req *);
+extern  getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK 6
+extern  cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK 7
+extern  cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT 8
+extern  keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern  keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET 9
+extern  key_netstres * key_net_get_2(void *, CLIENT *);
+extern  key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV 10
+extern  cryptkeyres * key_get_conv_2(char *, CLIENT *);
+extern  cryptkeyres * key_get_conv_2_svc(char *, struct svc_req *);
+extern int key_prog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  keystatus * key_set_2();
+extern  keystatus * key_set_2_svc();
+extern  cryptkeyres * key_encrypt_2();
+extern  cryptkeyres * key_encrypt_2_svc();
+extern  cryptkeyres * key_decrypt_2();
+extern  cryptkeyres * key_decrypt_2_svc();
+extern  des_block * key_gen_2();
+extern  des_block * key_gen_2_svc();
+extern  getcredres * key_getcred_2();
+extern  getcredres * key_getcred_2_svc();
+#define KEY_ENCRYPT_PK 6
+extern  cryptkeyres * key_encrypt_pk_2();
+extern  cryptkeyres * key_encrypt_pk_2_svc();
+#define KEY_DECRYPT_PK 7
+extern  cryptkeyres * key_decrypt_pk_2();
+extern  cryptkeyres * key_decrypt_pk_2_svc();
+#define KEY_NET_PUT 8
+extern  keystatus * key_net_put_2();
+extern  keystatus * key_net_put_2_svc();
+#define KEY_NET_GET 9
+extern  key_netstres * key_net_get_2();
+extern  key_netstres * key_net_get_2_svc();
+#define KEY_GET_CONV 10
+extern  cryptkeyres * key_get_conv_2();
+extern  cryptkeyres * key_get_conv_2_svc();
+extern int key_prog_2_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_keystatus (XDR *, keystatus*);
+extern  bool_t xdr_keybuf (XDR *, keybuf);
+extern  bool_t xdr_netnamestr (XDR *, netnamestr*);
+extern  bool_t xdr_cryptkeyarg (XDR *, cryptkeyarg*);
+extern  bool_t xdr_cryptkeyarg2 (XDR *, cryptkeyarg2*);
+extern  bool_t xdr_cryptkeyres (XDR *, cryptkeyres*);
+extern  bool_t xdr_unixcred (XDR *, unixcred*);
+extern  bool_t xdr_getcredres (XDR *, getcredres*);
+extern  bool_t xdr_key_netstarg (XDR *, key_netstarg*);
+extern  bool_t xdr_key_netstres (XDR *, key_netstres*);
+
+#else /* K&R C */
+extern bool_t xdr_keystatus ();
+extern bool_t xdr_keybuf ();
+extern bool_t xdr_netnamestr ();
+extern bool_t xdr_cryptkeyarg ();
+extern bool_t xdr_cryptkeyarg2 ();
+extern bool_t xdr_cryptkeyres ();
+extern bool_t xdr_unixcred ();
+extern bool_t xdr_getcredres ();
+extern bool_t xdr_key_netstarg ();
+extern bool_t xdr_key_netstres ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_KEY_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/key_prot.x b/lib/libdss-include/include/rpcsvc/key_prot.x
new file mode 100644 (file)
index 0000000..9baf943
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+ * Key server protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The keyserver is a public key storage/encryption/decryption service
+ * The encryption method used is based on the Diffie-Hellman exponential
+ * key exchange technology.
+ *
+ * The key server is local to each machine, akin to the portmapper.
+ * Under TI-RPC, communication with the keyserver is through the
+ * loopback transport.
+ *
+ * NOTE: This .x file generates the USER level headers for the keyserver.
+ * the KERNEL level headers are created by hand as they kernel has special
+ * requirements.
+ */
+
+%#if 0
+%#pragma ident "@(#)key_prot.x 1.7     94/04/29 SMI"
+%#endif
+%
+%/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
+%
+%/*
+% * Compiled from key_prot.x using rpcgen.
+% * DO NOT EDIT THIS FILE!
+% * This is NOT source code!
+% */
+
+/*
+ * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
+ *
+ * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
+ * where p is also prime.
+ *
+ * PROOT satisfies the following two conditions:
+ * (1) (PROOT ** 2) % MODULUS != 1
+ * (2) (PROOT ** p) % MODULUS != 1
+ *
+ */
+
+const PROOT = 3;
+const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
+
+const HEXKEYBYTES = 48;                /* HEXKEYBYTES == strlen(HEXMODULUS) */
+const KEYSIZE = 192;           /* KEYSIZE == bit length of key */
+const KEYBYTES = 24;           /* byte length of key */
+
+/*
+ * The first 16 hex digits of the encrypted secret key are used as
+ * a checksum in the database.
+ */
+const KEYCHECKSUMSIZE = 16;
+
+/*
+ * status of operation
+ */
+enum keystatus {
+       KEY_SUCCESS,    /* no problems */
+       KEY_NOSECRET,   /* no secret key stored */
+       KEY_UNKNOWN,    /* unknown netname */
+       KEY_SYSTEMERR   /* system error (out of memory, encryption failure) */
+};
+
+typedef opaque keybuf[HEXKEYBYTES];    /* store key in hex */
+
+typedef string netnamestr<MAXNETNAMELEN>;
+
+/*
+ * Argument to ENCRYPT or DECRYPT
+ */
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+
+/*
+ * Argument to ENCRYPT_PK or DECRYPT_PK
+ */
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj  remotekey;      /* Contains a length up to 1024 bytes */
+       des_block deskey;
+};
+
+
+/*
+ * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
+ */
+union cryptkeyres switch (keystatus status) {
+case KEY_SUCCESS:
+       des_block deskey;
+default:
+       void;
+};
+
+const MAXGIDS  = 16;   /* max number of gids in gid list */
+
+/*
+ * Unix credential
+ */
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       u_int gids<MAXGIDS>;
+};
+
+/*
+ * Result returned from GETCRED
+ */
+union getcredres switch (keystatus status) {
+case KEY_SUCCESS:
+       unixcred cred;
+default:
+       void;
+};
+/*
+ * key_netstarg;
+ */
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+
+union key_netstres switch (keystatus status){
+case KEY_SUCCESS:
+       key_netstarg knet;
+default:
+       void;
+};
+
+#ifdef RPC_HDR
+%
+%#ifndef opaque
+%#define opaque char
+%#endif
+%
+#endif
+program KEY_PROG {
+       version KEY_VERS {
+
+               /*
+                * This is my secret key.
+                * Store it for me.
+                */
+               keystatus
+               KEY_SET(keybuf) = 1;
+
+               /*
+                * I want to talk to X.
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT(cryptkeyarg) = 2;
+
+               /*
+                * X just sent me a message.
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT(cryptkeyarg) = 3;
+
+               /*
+                * Generate a secure conversation key for me
+                */
+               des_block
+               KEY_GEN(void) = 4;
+
+               /*
+                * Get me the uid, gid and group-access-list associated
+                * with this netname (for kernel which cannot use NIS)
+                */
+               getcredres
+               KEY_GETCRED(netnamestr) = 5;
+       } = 1;
+       version KEY_VERS2 {
+
+               /*
+                * #######
+                * Procedures 1-5 are identical to version 1
+                * #######
+                */
+
+               /*
+                * This is my secret key.
+                * Store it for me.
+                */
+               keystatus
+               KEY_SET(keybuf) = 1;
+
+               /*
+                * I want to talk to X.
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT(cryptkeyarg) = 2;
+
+               /*
+                * X just sent me a message.
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT(cryptkeyarg) = 3;
+
+               /*
+                * Generate a secure conversation key for me
+                */
+               des_block
+               KEY_GEN(void) = 4;
+
+               /*
+                * Get me the uid, gid and group-access-list associated
+                * with this netname (for kernel which cannot use NIS)
+                */
+               getcredres
+               KEY_GETCRED(netnamestr) = 5;
+
+               /*
+                * I want to talk to X. and I know X's public key
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
+
+               /*
+                * X just sent me a message. and I know X's public key
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT_PK(cryptkeyarg2) = 7;
+
+               /*
+                * Store my public key, netname and private key.
+                */
+               keystatus
+               KEY_NET_PUT(key_netstarg) = 8;
+
+               /*
+                * Retrieve my public key, netname and private key.
+                */
+               key_netstres
+               KEY_NET_GET(void) = 9;
+
+               /*
+                * Return me the conversation key that is constructed
+                * from my secret key and this publickey.
+                */
+
+               cryptkeyres
+               KEY_GET_CONV(keybuf) = 10;
+
+
+       } = 2;
+} = 100029;
diff --git a/lib/libdss-include/include/rpcsvc/klm_prot.h b/lib/libdss-include/include/rpcsvc/klm_prot.h
new file mode 100644 (file)
index 0000000..6ec281e
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KLM_PROT_H_RPCGEN
+#define _KLM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LM_MAXSTRLEN 1024
+
+enum klm_stats {
+       klm_granted = 0,
+       klm_denied = 1,
+       klm_denied_nolocks = 2,
+       klm_working = 3,
+};
+typedef enum klm_stats klm_stats;
+
+struct klm_lock {
+       char *server_name;
+       netobj fh;
+       int pid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct klm_lock klm_lock;
+
+struct klm_holder {
+       bool_t exclusive;
+       int svid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct klm_holder klm_holder;
+
+struct klm_stat {
+       klm_stats stat;
+};
+typedef struct klm_stat klm_stat;
+
+struct klm_testrply {
+       klm_stats stat;
+       union {
+               struct klm_holder holder;
+       } klm_testrply_u;
+};
+typedef struct klm_testrply klm_testrply;
+
+struct klm_lockargs {
+       bool_t block;
+       bool_t exclusive;
+       struct klm_lock alock;
+};
+typedef struct klm_lockargs klm_lockargs;
+
+struct klm_testargs {
+       bool_t exclusive;
+       struct klm_lock alock;
+};
+typedef struct klm_testargs klm_testargs;
+
+struct klm_unlockargs {
+       struct klm_lock alock;
+};
+typedef struct klm_unlockargs klm_unlockargs;
+
+#define KLM_PROG 100020
+#define KLM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define KLM_TEST 1
+extern  klm_testrply * klm_test_1(struct klm_testargs *, CLIENT *);
+extern  klm_testrply * klm_test_1_svc(struct klm_testargs *, struct svc_req *);
+#define KLM_LOCK 2
+extern  klm_stat * klm_lock_1(struct klm_lockargs *, CLIENT *);
+extern  klm_stat * klm_lock_1_svc(struct klm_lockargs *, struct svc_req *);
+#define KLM_CANCEL 3
+extern  klm_stat * klm_cancel_1(struct klm_lockargs *, CLIENT *);
+extern  klm_stat * klm_cancel_1_svc(struct klm_lockargs *, struct svc_req *);
+#define KLM_UNLOCK 4
+extern  klm_stat * klm_unlock_1(struct klm_unlockargs *, CLIENT *);
+extern  klm_stat * klm_unlock_1_svc(struct klm_unlockargs *, struct svc_req *);
+extern int klm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define KLM_TEST 1
+extern  klm_testrply * klm_test_1();
+extern  klm_testrply * klm_test_1_svc();
+#define KLM_LOCK 2
+extern  klm_stat * klm_lock_1();
+extern  klm_stat * klm_lock_1_svc();
+#define KLM_CANCEL 3
+extern  klm_stat * klm_cancel_1();
+extern  klm_stat * klm_cancel_1_svc();
+#define KLM_UNLOCK 4
+extern  klm_stat * klm_unlock_1();
+extern  klm_stat * klm_unlock_1_svc();
+extern int klm_prog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_klm_stats (XDR *, klm_stats*);
+extern  bool_t xdr_klm_lock (XDR *, klm_lock*);
+extern  bool_t xdr_klm_holder (XDR *, klm_holder*);
+extern  bool_t xdr_klm_stat (XDR *, klm_stat*);
+extern  bool_t xdr_klm_testrply (XDR *, klm_testrply*);
+extern  bool_t xdr_klm_lockargs (XDR *, klm_lockargs*);
+extern  bool_t xdr_klm_testargs (XDR *, klm_testargs*);
+extern  bool_t xdr_klm_unlockargs (XDR *, klm_unlockargs*);
+
+#else /* K&R C */
+extern bool_t xdr_klm_stats ();
+extern bool_t xdr_klm_lock ();
+extern bool_t xdr_klm_holder ();
+extern bool_t xdr_klm_stat ();
+extern bool_t xdr_klm_testrply ();
+extern bool_t xdr_klm_lockargs ();
+extern bool_t xdr_klm_testargs ();
+extern bool_t xdr_klm_unlockargs ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_KLM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/klm_prot.x b/lib/libdss-include/include/rpcsvc/klm_prot.x
new file mode 100644 (file)
index 0000000..aee5b1a
--- /dev/null
@@ -0,0 +1,130 @@
+/* @(#)klm_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Kernel/lock manager protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * protocol used between the UNIX kernel (the "client") and the
+ * local lock manager.  The local lock manager is a deamon running
+ * above the kernel.
+ */
+
+const  LM_MAXSTRLEN = 1024;
+
+/*
+ * lock manager status returns
+ */
+enum klm_stats {
+       klm_granted = 0,        /* lock is granted */
+       klm_denied = 1,         /* lock is denied */
+       klm_denied_nolocks = 2, /* no lock entry available */
+       klm_working = 3         /* lock is being processed */
+};
+
+/*
+ * lock manager lock identifier
+ */
+struct klm_lock {
+       string server_name<LM_MAXSTRLEN>;
+       netobj fh;              /* a counted file handle */
+       int pid;                /* holder of the lock */
+       unsigned l_offset;      /* beginning offset of the lock */
+       unsigned l_len;         /* byte length of the lock;
+                                * zero means through end of file */
+};
+
+/*
+ * lock holder identifier
+ */
+struct klm_holder {
+       bool exclusive;         /* FALSE if shared lock */
+       int svid;               /* holder of the lock (pid) */
+       unsigned l_offset;      /* beginning offset of the lock */
+       unsigned l_len;         /* byte length of the lock;
+                                * zero means through end of file */
+};
+
+/*
+ * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
+ */
+struct klm_stat {
+       klm_stats stat;
+};
+
+/*
+ * reply to a KLM_TEST call
+ */
+union klm_testrply switch (klm_stats stat) {
+       case klm_denied:
+               struct klm_holder holder;
+       default: /* All other cases return no arguments */
+               void;
+};
+
+
+/*
+ * arguments to KLM_LOCK
+ */
+struct klm_lockargs {
+       bool block;
+       bool exclusive;
+       struct klm_lock alock;
+};
+
+/*
+ * arguments to KLM_TEST
+ */
+struct klm_testargs {
+       bool exclusive;
+       struct klm_lock alock;
+};
+
+/*
+ * arguments to KLM_UNLOCK
+ */
+struct klm_unlockargs {
+       struct klm_lock alock;
+};
+
+program KLM_PROG {
+       version KLM_VERS {
+
+               klm_testrply    KLM_TEST (struct klm_testargs) =        1;
+
+               klm_stat        KLM_LOCK (struct klm_lockargs) =        2;
+
+               klm_stat        KLM_CANCEL (struct klm_lockargs) =      3;
+               /* klm_granted=> the cancel request fails due to lock is already granted */
+               /* klm_denied=> the cancel request successfully aborts
+lock request  */
+
+               klm_stat        KLM_UNLOCK (struct klm_unlockargs) =    4;
+       } = 1;
+} = 100020;
diff --git a/lib/libdss-include/include/rpcsvc/mount.h b/lib/libdss-include/include/rpcsvc/mount.h
new file mode 100644 (file)
index 0000000..de22f29
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _MOUNT_H_RPCGEN
+#define _MOUNT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MNTPATHLEN 1024
+#define MNTNAMLEN 255
+#define FHSIZE 32
+
+typedef char fhandle[FHSIZE];
+
+struct fhstatus {
+       u_int fhs_status;
+       union {
+               fhandle fhs_fhandle;
+       } fhstatus_u;
+};
+typedef struct fhstatus fhstatus;
+
+typedef char *dirpath;
+
+typedef char *name;
+
+typedef struct mountbody *mountlist;
+
+struct mountbody {
+       name ml_hostname;
+       dirpath ml_directory;
+       mountlist ml_next;
+};
+typedef struct mountbody mountbody;
+
+typedef struct groupnode *groups;
+
+struct groupnode {
+       name gr_name;
+       groups gr_next;
+};
+typedef struct groupnode groupnode;
+
+typedef struct exportnode *exports;
+
+struct exportnode {
+       dirpath ex_dir;
+       groups ex_groups;
+       exports ex_next;
+};
+typedef struct exportnode exportnode;
+
+#define MOUNTPROG 100005
+#define MOUNTVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define MOUNTPROC_NULL 0
+extern  void * mountproc_null_1(void *, CLIENT *);
+extern  void * mountproc_null_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_MNT 1
+extern  fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
+extern  fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
+#define MOUNTPROC_DUMP 2
+extern  mountlist * mountproc_dump_1(void *, CLIENT *);
+extern  mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_UMNT 3
+extern  void * mountproc_umnt_1(dirpath *, CLIENT *);
+extern  void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
+#define MOUNTPROC_UMNTALL 4
+extern  void * mountproc_umntall_1(void *, CLIENT *);
+extern  void * mountproc_umntall_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_EXPORT 5
+extern  exports * mountproc_export_1(void *, CLIENT *);
+extern  exports * mountproc_export_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_EXPORTALL 6
+extern  exports * mountproc_exportall_1(void *, CLIENT *);
+extern  exports * mountproc_exportall_1_svc(void *, struct svc_req *);
+extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define MOUNTPROC_NULL 0
+extern  void * mountproc_null_1();
+extern  void * mountproc_null_1_svc();
+#define MOUNTPROC_MNT 1
+extern  fhstatus * mountproc_mnt_1();
+extern  fhstatus * mountproc_mnt_1_svc();
+#define MOUNTPROC_DUMP 2
+extern  mountlist * mountproc_dump_1();
+extern  mountlist * mountproc_dump_1_svc();
+#define MOUNTPROC_UMNT 3
+extern  void * mountproc_umnt_1();
+extern  void * mountproc_umnt_1_svc();
+#define MOUNTPROC_UMNTALL 4
+extern  void * mountproc_umntall_1();
+extern  void * mountproc_umntall_1_svc();
+#define MOUNTPROC_EXPORT 5
+extern  exports * mountproc_export_1();
+extern  exports * mountproc_export_1_svc();
+#define MOUNTPROC_EXPORTALL 6
+extern  exports * mountproc_exportall_1();
+extern  exports * mountproc_exportall_1_svc();
+extern int mountprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_fhandle (XDR *, fhandle);
+extern  bool_t xdr_fhstatus (XDR *, fhstatus*);
+extern  bool_t xdr_dirpath (XDR *, dirpath*);
+extern  bool_t xdr_name (XDR *, name*);
+extern  bool_t xdr_mountlist (XDR *, mountlist*);
+extern  bool_t xdr_mountbody (XDR *, mountbody*);
+extern  bool_t xdr_groups (XDR *, groups*);
+extern  bool_t xdr_groupnode (XDR *, groupnode*);
+extern  bool_t xdr_exports (XDR *, exports*);
+extern  bool_t xdr_exportnode (XDR *, exportnode*);
+
+#else /* K&R C */
+extern bool_t xdr_fhandle ();
+extern bool_t xdr_fhstatus ();
+extern bool_t xdr_dirpath ();
+extern bool_t xdr_name ();
+extern bool_t xdr_mountlist ();
+extern bool_t xdr_mountbody ();
+extern bool_t xdr_groups ();
+extern bool_t xdr_groupnode ();
+extern bool_t xdr_exports ();
+extern bool_t xdr_exportnode ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_MOUNT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/mount.x b/lib/libdss-include/include/rpcsvc/mount.x
new file mode 100644 (file)
index 0000000..ed3b339
--- /dev/null
@@ -0,0 +1,161 @@
+/* @(#)mount.x 2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Protocol description for the mount program
+ */
+
+
+const MNTPATHLEN = 1024;       /* maximum bytes in a pathname argument */
+const MNTNAMLEN = 255;         /* maximum bytes in a name argument */
+const FHSIZE = 32;             /* size in bytes of a file handle */
+
+/*
+ * The fhandle is the file handle that the server passes to the client.
+ * All file operations are done using the file handles to refer to a file
+ * or a directory. The file handle can contain whatever information the
+ * server needs to distinguish an individual file.
+ */
+typedef opaque fhandle[FHSIZE];
+
+/*
+ * If a status of zero is returned, the call completed successfully, and
+ * a file handle for the directory follows. A non-zero status indicates
+ * some sort of error. The status corresponds with UNIX error numbers.
+ */
+union fhstatus switch (unsigned fhs_status) {
+case 0:
+       fhandle fhs_fhandle;
+default:
+       void;
+};
+
+/*
+ * The type dirpath is the pathname of a directory
+ */
+typedef string dirpath<MNTPATHLEN>;
+
+/*
+ * The type name is used for arbitrary names (hostnames, groupnames)
+ */
+typedef string name<MNTNAMLEN>;
+
+/*
+ * A list of who has what mounted
+ */
+typedef struct mountbody *mountlist;
+struct mountbody {
+       name ml_hostname;
+       dirpath ml_directory;
+       mountlist ml_next;
+};
+
+/*
+ * A list of netgroups
+ */
+typedef struct groupnode *groups;
+struct groupnode {
+       name gr_name;
+       groups gr_next;
+};
+
+/*
+ * A list of what is exported and to whom
+ */
+typedef struct exportnode *exports;
+struct exportnode {
+       dirpath ex_dir;
+       groups ex_groups;
+       exports ex_next;
+};
+
+program MOUNTPROG {
+       /*
+        * Version one of the mount protocol communicates with version two
+        * of the NFS protocol. The only connecting point is the fhandle
+        * structure, which is the same for both protocols.
+        */
+       version MOUNTVERS {
+               /*
+                * Does no work. It is made available in all RPC services
+                * to allow server response testing and timing
+                */
+               void
+               MOUNTPROC_NULL(void) = 0;
+
+               /*
+                * If fhs_status is 0, then fhs_fhandle contains the
+                * file handle for the directory. This file handle may
+                * be used in the NFS protocol. This procedure also adds
+                * a new entry to the mount list for this client mounting
+                * the directory.
+                * Unix authentication required.
+                */
+               fhstatus
+               MOUNTPROC_MNT(dirpath) = 1;
+
+               /*
+                * Returns the list of remotely mounted filesystems. The
+                * mountlist contains one entry for each hostname and
+                * directory pair.
+                */
+               mountlist
+               MOUNTPROC_DUMP(void) = 2;
+
+               /*
+                * Removes the mount list entry for the directory
+                * Unix authentication required.
+                */
+               void
+               MOUNTPROC_UMNT(dirpath) = 3;
+
+               /*
+                * Removes all of the mount list entries for this client
+                * Unix authentication required.
+                */
+               void
+               MOUNTPROC_UMNTALL(void) = 4;
+
+               /*
+                * Returns a list of all the exported filesystems, and which
+                * machines are allowed to import it.
+                */
+               exports
+               MOUNTPROC_EXPORT(void)  = 5;
+
+               /*
+                * Identical to MOUNTPROC_EXPORT above
+                */
+               exports
+               MOUNTPROC_EXPORTALL(void) = 6;
+       } = 1;
+} = 100005;
diff --git a/lib/libdss-include/include/rpcsvc/nfs_prot.h b/lib/libdss-include/include/rpcsvc/nfs_prot.h
new file mode 100644 (file)
index 0000000..6cf626a
--- /dev/null
@@ -0,0 +1,450 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _NFS_PROT_H_RPCGEN
+#define _NFS_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NFS_PORT 2049
+#define NFS_MAXDATA 8192
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN 255
+#define NFS_FHSIZE 32
+#define NFS_COOKIESIZE 4
+#define NFS_FIFO_DEV -1
+#define NFSMODE_FMT 0170000
+#define NFSMODE_DIR 0040000
+#define NFSMODE_CHR 0020000
+#define NFSMODE_BLK 0060000
+#define NFSMODE_REG 0100000
+#define NFSMODE_LNK 0120000
+#define NFSMODE_SOCK 0140000
+#define NFSMODE_FIFO 0010000
+
+enum nfsstat {
+       NFS_OK = 0,
+       NFSERR_PERM = 1,
+       NFSERR_NOENT = 2,
+       NFSERR_IO = 5,
+       NFSERR_NXIO = 6,
+       NFSERR_ACCES = 13,
+       NFSERR_EXIST = 17,
+       NFSERR_NODEV = 19,
+       NFSERR_NOTDIR = 20,
+       NFSERR_ISDIR = 21,
+       NFSERR_FBIG = 27,
+       NFSERR_NOSPC = 28,
+       NFSERR_ROFS = 30,
+       NFSERR_NAMETOOLONG = 63,
+       NFSERR_NOTEMPTY = 66,
+       NFSERR_DQUOT = 69,
+       NFSERR_STALE = 70,
+       NFSERR_WFLUSH = 99,
+};
+typedef enum nfsstat nfsstat;
+
+enum ftype {
+       NFNON = 0,
+       NFREG = 1,
+       NFDIR = 2,
+       NFBLK = 3,
+       NFCHR = 4,
+       NFLNK = 5,
+       NFSOCK = 6,
+       NFBAD = 7,
+       NFFIFO = 8,
+};
+typedef enum ftype ftype;
+
+struct nfs_fh {
+       char data[NFS_FHSIZE];
+};
+typedef struct nfs_fh nfs_fh;
+
+struct nfstime {
+       u_int seconds;
+       u_int useconds;
+};
+typedef struct nfstime nfstime;
+
+struct fattr {
+       ftype type;
+       u_int mode;
+       u_int nlink;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       u_int blocksize;
+       u_int rdev;
+       u_int blocks;
+       u_int fsid;
+       u_int fileid;
+       nfstime atime;
+       nfstime mtime;
+       nfstime ctime;
+};
+typedef struct fattr fattr;
+
+struct sattr {
+       u_int mode;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       nfstime atime;
+       nfstime mtime;
+};
+typedef struct sattr sattr;
+
+typedef char *filename;
+
+typedef char *nfspath;
+
+struct attrstat {
+       nfsstat status;
+       union {
+               fattr attributes;
+       } attrstat_u;
+};
+typedef struct attrstat attrstat;
+
+struct sattrargs {
+       nfs_fh file;
+       sattr attributes;
+};
+typedef struct sattrargs sattrargs;
+
+struct diropargs {
+       nfs_fh dir;
+       filename name;
+};
+typedef struct diropargs diropargs;
+
+struct diropokres {
+       nfs_fh file;
+       fattr attributes;
+};
+typedef struct diropokres diropokres;
+
+struct diropres {
+       nfsstat status;
+       union {
+               diropokres diropres;
+       } diropres_u;
+};
+typedef struct diropres diropres;
+
+struct readlinkres {
+       nfsstat status;
+       union {
+               nfspath data;
+       } readlinkres_u;
+};
+typedef struct readlinkres readlinkres;
+
+struct readargs {
+       nfs_fh file;
+       u_int offset;
+       u_int count;
+       u_int totalcount;
+};
+typedef struct readargs readargs;
+
+struct readokres {
+       fattr attributes;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+};
+typedef struct readokres readokres;
+
+struct readres {
+       nfsstat status;
+       union {
+               readokres reply;
+       } readres_u;
+};
+typedef struct readres readres;
+
+struct writeargs {
+       nfs_fh file;
+       u_int beginoffset;
+       u_int offset;
+       u_int totalcount;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+};
+typedef struct writeargs writeargs;
+
+struct createargs {
+       diropargs where;
+       sattr attributes;
+};
+typedef struct createargs createargs;
+
+struct renameargs {
+       diropargs from;
+       diropargs to;
+};
+typedef struct renameargs renameargs;
+
+struct linkargs {
+       nfs_fh from;
+       diropargs to;
+};
+typedef struct linkargs linkargs;
+
+struct symlinkargs {
+       diropargs from;
+       nfspath to;
+       sattr attributes;
+};
+typedef struct symlinkargs symlinkargs;
+
+typedef char nfscookie[NFS_COOKIESIZE];
+
+struct readdirargs {
+       nfs_fh dir;
+       nfscookie cookie;
+       u_int count;
+};
+typedef struct readdirargs readdirargs;
+
+struct entry {
+       u_int fileid;
+       filename name;
+       nfscookie cookie;
+       struct entry *nextentry;
+};
+typedef struct entry entry;
+
+struct dirlist {
+       entry *entries;
+       bool_t eof;
+};
+typedef struct dirlist dirlist;
+
+struct readdirres {
+       nfsstat status;
+       union {
+               dirlist reply;
+       } readdirres_u;
+};
+typedef struct readdirres readdirres;
+
+struct statfsokres {
+       u_int tsize;
+       u_int bsize;
+       u_int blocks;
+       u_int bfree;
+       u_int bavail;
+};
+typedef struct statfsokres statfsokres;
+
+struct statfsres {
+       nfsstat status;
+       union {
+               statfsokres reply;
+       } statfsres_u;
+};
+typedef struct statfsres statfsres;
+
+#define NFS_PROGRAM 100003
+#define NFS_VERSION 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NFSPROC_NULL 0
+extern  void * nfsproc_null_2(void *, CLIENT *);
+extern  void * nfsproc_null_2_svc(void *, struct svc_req *);
+#define NFSPROC_GETATTR 1
+extern  attrstat * nfsproc_getattr_2(nfs_fh *, CLIENT *);
+extern  attrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *);
+#define NFSPROC_SETATTR 2
+extern  attrstat * nfsproc_setattr_2(sattrargs *, CLIENT *);
+extern  attrstat * nfsproc_setattr_2_svc(sattrargs *, struct svc_req *);
+#define NFSPROC_ROOT 3
+extern  void * nfsproc_root_2(void *, CLIENT *);
+extern  void * nfsproc_root_2_svc(void *, struct svc_req *);
+#define NFSPROC_LOOKUP 4
+extern  diropres * nfsproc_lookup_2(diropargs *, CLIENT *);
+extern  diropres * nfsproc_lookup_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_READLINK 5
+extern  readlinkres * nfsproc_readlink_2(nfs_fh *, CLIENT *);
+extern  readlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *);
+#define NFSPROC_READ 6
+extern  readres * nfsproc_read_2(readargs *, CLIENT *);
+extern  readres * nfsproc_read_2_svc(readargs *, struct svc_req *);
+#define NFSPROC_WRITECACHE 7
+extern  void * nfsproc_writecache_2(void *, CLIENT *);
+extern  void * nfsproc_writecache_2_svc(void *, struct svc_req *);
+#define NFSPROC_WRITE 8
+extern  attrstat * nfsproc_write_2(writeargs *, CLIENT *);
+extern  attrstat * nfsproc_write_2_svc(writeargs *, struct svc_req *);
+#define NFSPROC_CREATE 9
+extern  diropres * nfsproc_create_2(createargs *, CLIENT *);
+extern  diropres * nfsproc_create_2_svc(createargs *, struct svc_req *);
+#define NFSPROC_REMOVE 10
+extern  nfsstat * nfsproc_remove_2(diropargs *, CLIENT *);
+extern  nfsstat * nfsproc_remove_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_RENAME 11
+extern  nfsstat * nfsproc_rename_2(renameargs *, CLIENT *);
+extern  nfsstat * nfsproc_rename_2_svc(renameargs *, struct svc_req *);
+#define NFSPROC_LINK 12
+extern  nfsstat * nfsproc_link_2(linkargs *, CLIENT *);
+extern  nfsstat * nfsproc_link_2_svc(linkargs *, struct svc_req *);
+#define NFSPROC_SYMLINK 13
+extern  nfsstat * nfsproc_symlink_2(symlinkargs *, CLIENT *);
+extern  nfsstat * nfsproc_symlink_2_svc(symlinkargs *, struct svc_req *);
+#define NFSPROC_MKDIR 14
+extern  diropres * nfsproc_mkdir_2(createargs *, CLIENT *);
+extern  diropres * nfsproc_mkdir_2_svc(createargs *, struct svc_req *);
+#define NFSPROC_RMDIR 15
+extern  nfsstat * nfsproc_rmdir_2(diropargs *, CLIENT *);
+extern  nfsstat * nfsproc_rmdir_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_READDIR 16
+extern  readdirres * nfsproc_readdir_2(readdirargs *, CLIENT *);
+extern  readdirres * nfsproc_readdir_2_svc(readdirargs *, struct svc_req *);
+#define NFSPROC_STATFS 17
+extern  statfsres * nfsproc_statfs_2(nfs_fh *, CLIENT *);
+extern  statfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *);
+extern int nfs_program_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NFSPROC_NULL 0
+extern  void * nfsproc_null_2();
+extern  void * nfsproc_null_2_svc();
+#define NFSPROC_GETATTR 1
+extern  attrstat * nfsproc_getattr_2();
+extern  attrstat * nfsproc_getattr_2_svc();
+#define NFSPROC_SETATTR 2
+extern  attrstat * nfsproc_setattr_2();
+extern  attrstat * nfsproc_setattr_2_svc();
+#define NFSPROC_ROOT 3
+extern  void * nfsproc_root_2();
+extern  void * nfsproc_root_2_svc();
+#define NFSPROC_LOOKUP 4
+extern  diropres * nfsproc_lookup_2();
+extern  diropres * nfsproc_lookup_2_svc();
+#define NFSPROC_READLINK 5
+extern  readlinkres * nfsproc_readlink_2();
+extern  readlinkres * nfsproc_readlink_2_svc();
+#define NFSPROC_READ 6
+extern  readres * nfsproc_read_2();
+extern  readres * nfsproc_read_2_svc();
+#define NFSPROC_WRITECACHE 7
+extern  void * nfsproc_writecache_2();
+extern  void * nfsproc_writecache_2_svc();
+#define NFSPROC_WRITE 8
+extern  attrstat * nfsproc_write_2();
+extern  attrstat * nfsproc_write_2_svc();
+#define NFSPROC_CREATE 9
+extern  diropres * nfsproc_create_2();
+extern  diropres * nfsproc_create_2_svc();
+#define NFSPROC_REMOVE 10
+extern  nfsstat * nfsproc_remove_2();
+extern  nfsstat * nfsproc_remove_2_svc();
+#define NFSPROC_RENAME 11
+extern  nfsstat * nfsproc_rename_2();
+extern  nfsstat * nfsproc_rename_2_svc();
+#define NFSPROC_LINK 12
+extern  nfsstat * nfsproc_link_2();
+extern  nfsstat * nfsproc_link_2_svc();
+#define NFSPROC_SYMLINK 13
+extern  nfsstat * nfsproc_symlink_2();
+extern  nfsstat * nfsproc_symlink_2_svc();
+#define NFSPROC_MKDIR 14
+extern  diropres * nfsproc_mkdir_2();
+extern  diropres * nfsproc_mkdir_2_svc();
+#define NFSPROC_RMDIR 15
+extern  nfsstat * nfsproc_rmdir_2();
+extern  nfsstat * nfsproc_rmdir_2_svc();
+#define NFSPROC_READDIR 16
+extern  readdirres * nfsproc_readdir_2();
+extern  readdirres * nfsproc_readdir_2_svc();
+#define NFSPROC_STATFS 17
+extern  statfsres * nfsproc_statfs_2();
+extern  statfsres * nfsproc_statfs_2_svc();
+extern int nfs_program_2_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_nfsstat (XDR *, nfsstat*);
+extern  bool_t xdr_ftype (XDR *, ftype*);
+extern  bool_t xdr_nfs_fh (XDR *, nfs_fh*);
+extern  bool_t xdr_nfstime (XDR *, nfstime*);
+extern  bool_t xdr_fattr (XDR *, fattr*);
+extern  bool_t xdr_sattr (XDR *, sattr*);
+extern  bool_t xdr_filename (XDR *, filename*);
+extern  bool_t xdr_nfspath (XDR *, nfspath*);
+extern  bool_t xdr_attrstat (XDR *, attrstat*);
+extern  bool_t xdr_sattrargs (XDR *, sattrargs*);
+extern  bool_t xdr_diropargs (XDR *, diropargs*);
+extern  bool_t xdr_diropokres (XDR *, diropokres*);
+extern  bool_t xdr_diropres (XDR *, diropres*);
+extern  bool_t xdr_readlinkres (XDR *, readlinkres*);
+extern  bool_t xdr_readargs (XDR *, readargs*);
+extern  bool_t xdr_readokres (XDR *, readokres*);
+extern  bool_t xdr_readres (XDR *, readres*);
+extern  bool_t xdr_writeargs (XDR *, writeargs*);
+extern  bool_t xdr_createargs (XDR *, createargs*);
+extern  bool_t xdr_renameargs (XDR *, renameargs*);
+extern  bool_t xdr_linkargs (XDR *, linkargs*);
+extern  bool_t xdr_symlinkargs (XDR *, symlinkargs*);
+extern  bool_t xdr_nfscookie (XDR *, nfscookie);
+extern  bool_t xdr_readdirargs (XDR *, readdirargs*);
+extern  bool_t xdr_entry (XDR *, entry*);
+extern  bool_t xdr_dirlist (XDR *, dirlist*);
+extern  bool_t xdr_readdirres (XDR *, readdirres*);
+extern  bool_t xdr_statfsokres (XDR *, statfsokres*);
+extern  bool_t xdr_statfsres (XDR *, statfsres*);
+
+#else /* K&R C */
+extern bool_t xdr_nfsstat ();
+extern bool_t xdr_ftype ();
+extern bool_t xdr_nfs_fh ();
+extern bool_t xdr_nfstime ();
+extern bool_t xdr_fattr ();
+extern bool_t xdr_sattr ();
+extern bool_t xdr_filename ();
+extern bool_t xdr_nfspath ();
+extern bool_t xdr_attrstat ();
+extern bool_t xdr_sattrargs ();
+extern bool_t xdr_diropargs ();
+extern bool_t xdr_diropokres ();
+extern bool_t xdr_diropres ();
+extern bool_t xdr_readlinkres ();
+extern bool_t xdr_readargs ();
+extern bool_t xdr_readokres ();
+extern bool_t xdr_readres ();
+extern bool_t xdr_writeargs ();
+extern bool_t xdr_createargs ();
+extern bool_t xdr_renameargs ();
+extern bool_t xdr_linkargs ();
+extern bool_t xdr_symlinkargs ();
+extern bool_t xdr_nfscookie ();
+extern bool_t xdr_readdirargs ();
+extern bool_t xdr_entry ();
+extern bool_t xdr_dirlist ();
+extern bool_t xdr_readdirres ();
+extern bool_t xdr_statfsokres ();
+extern bool_t xdr_statfsres ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_NFS_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/nfs_prot.x b/lib/libdss-include/include/rpcsvc/nfs_prot.x
new file mode 100644 (file)
index 0000000..ad992e2
--- /dev/null
@@ -0,0 +1,352 @@
+/* @(#)nfs_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * nfs_prot.x 1.2 87/10/12
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+const NFS_PORT          = 2049;
+const NFS_MAXDATA       = 8192;
+const NFS_MAXPATHLEN    = 1024;
+const NFS_MAXNAMLEN    = 255;
+const NFS_FHSIZE       = 32;
+const NFS_COOKIESIZE   = 4;
+const NFS_FIFO_DEV     = -1;   /* size kludge for named pipes */
+
+/*
+ * File types
+ */
+const NFSMODE_FMT  = 0170000;  /* type of file */
+const NFSMODE_DIR  = 0040000;  /* directory */
+const NFSMODE_CHR  = 0020000;  /* character special */
+const NFSMODE_BLK  = 0060000;  /* block special */
+const NFSMODE_REG  = 0100000;  /* regular */
+const NFSMODE_LNK  = 0120000;  /* symbolic link */
+const NFSMODE_SOCK = 0140000;  /* socket */
+const NFSMODE_FIFO = 0010000;  /* fifo */
+
+/*
+ * Error status
+ */
+enum nfsstat {
+       NFS_OK= 0,              /* no error */
+       NFSERR_PERM=1,          /* Not owner */
+       NFSERR_NOENT=2,         /* No such file or directory */
+       NFSERR_IO=5,            /* I/O error */
+       NFSERR_NXIO=6,          /* No such device or address */
+       NFSERR_ACCES=13,        /* Permission denied */
+       NFSERR_EXIST=17,        /* File exists */
+       NFSERR_NODEV=19,        /* No such device */
+       NFSERR_NOTDIR=20,       /* Not a directory*/
+       NFSERR_ISDIR=21,        /* Is a directory */
+       NFSERR_FBIG=27,         /* File too large */
+       NFSERR_NOSPC=28,        /* No space left on device */
+       NFSERR_ROFS=30,         /* Read-only file system */
+       NFSERR_NAMETOOLONG=63,  /* File name too long */
+       NFSERR_NOTEMPTY=66,     /* Directory not empty */
+       NFSERR_DQUOT=69,        /* Disc quota exceeded */
+       NFSERR_STALE=70,        /* Stale NFS file handle */
+       NFSERR_WFLUSH=99        /* write cache flushed */
+};
+
+/*
+ * File types
+ */
+enum ftype {
+       NFNON = 0,      /* non-file */
+       NFREG = 1,      /* regular file */
+       NFDIR = 2,      /* directory */
+       NFBLK = 3,      /* block special */
+       NFCHR = 4,      /* character special */
+       NFLNK = 5,      /* symbolic link */
+       NFSOCK = 6,     /* unix domain sockets */
+       NFBAD = 7,      /* unused */
+       NFFIFO = 8      /* named pipe */
+};
+
+/*
+ * File access handle
+ */
+struct nfs_fh {
+       opaque data[NFS_FHSIZE];
+};
+
+/*
+ * Timeval
+ */
+struct nfstime {
+       unsigned seconds;
+       unsigned useconds;
+};
+
+
+/*
+ * File attributes
+ */
+struct fattr {
+       ftype type;             /* file type */
+       unsigned mode;          /* protection mode bits */
+       unsigned nlink;         /* # hard links */
+       unsigned uid;           /* owner user id */
+       unsigned gid;           /* owner group id */
+       unsigned size;          /* file size in bytes */
+       unsigned blocksize;     /* preferred block size */
+       unsigned rdev;          /* special device # */
+       unsigned blocks;        /* Kb of disk used by file */
+       unsigned fsid;          /* device # */
+       unsigned fileid;        /* inode # */
+       nfstime atime;          /* time of last access */
+       nfstime mtime;          /* time of last modification */
+       nfstime ctime;          /* time of last change */
+};
+
+/*
+ * File attributes which can be set
+ */
+struct sattr {
+       unsigned mode;  /* protection mode bits */
+       unsigned uid;   /* owner user id */
+       unsigned gid;   /* owner group id */
+       unsigned size;  /* file size in bytes */
+       nfstime atime;  /* time of last access */
+       nfstime mtime;  /* time of last modification */
+};
+
+
+typedef string filename<NFS_MAXNAMLEN>;
+typedef string nfspath<NFS_MAXPATHLEN>;
+
+/*
+ * Reply status with file attributes
+ */
+union attrstat switch (nfsstat status) {
+case NFS_OK:
+       fattr attributes;
+default:
+       void;
+};
+
+struct sattrargs {
+       nfs_fh file;
+       sattr attributes;
+};
+
+/*
+ * Arguments for directory operations
+ */
+struct diropargs {
+       nfs_fh  dir;    /* directory file handle */
+       filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
+};
+
+struct diropokres {
+       nfs_fh file;
+       fattr attributes;
+};
+
+/*
+ * Results from directory operation
+ */
+union diropres switch (nfsstat status) {
+case NFS_OK:
+       diropokres diropres;
+default:
+       void;
+};
+
+union readlinkres switch (nfsstat status) {
+case NFS_OK:
+       nfspath data;
+default:
+       void;
+};
+
+/*
+ * Arguments to remote read
+ */
+struct readargs {
+       nfs_fh file;            /* handle for file */
+       unsigned offset;        /* byte offset in file */
+       unsigned count;         /* immediate read count */
+       unsigned totalcount;    /* total read count (from this offset)*/
+};
+
+/*
+ * Status OK portion of remote read reply
+ */
+struct readokres {
+       fattr   attributes;     /* attributes, need for pagin*/
+       opaque data<NFS_MAXDATA>;
+};
+
+union readres switch (nfsstat status) {
+case NFS_OK:
+       readokres reply;
+default:
+       void;
+};
+
+/*
+ * Arguments to remote write
+ */
+struct writeargs {
+       nfs_fh  file;           /* handle for file */
+       unsigned beginoffset;   /* beginning byte offset in file */
+       unsigned offset;        /* current byte offset in file */
+       unsigned totalcount;    /* total write count (to this offset)*/
+       opaque data<NFS_MAXDATA>;
+};
+
+struct createargs {
+       diropargs where;
+       sattr attributes;
+};
+
+struct renameargs {
+       diropargs from;
+       diropargs to;
+};
+
+struct linkargs {
+       nfs_fh from;
+       diropargs to;
+};
+
+struct symlinkargs {
+       diropargs from;
+       nfspath to;
+       sattr attributes;
+};
+
+
+typedef opaque nfscookie[NFS_COOKIESIZE];
+
+/*
+ * Arguments to readdir
+ */
+struct readdirargs {
+       nfs_fh dir;             /* directory handle */
+       nfscookie cookie;
+       unsigned count;         /* number of directory bytes to read */
+};
+
+struct entry {
+       unsigned fileid;
+       filename name;
+       nfscookie cookie;
+       entry *nextentry;
+};
+
+struct dirlist {
+       entry *entries;
+       bool eof;
+};
+
+union readdirres switch (nfsstat status) {
+case NFS_OK:
+       dirlist reply;
+default:
+       void;
+};
+
+struct statfsokres {
+       unsigned tsize; /* preferred transfer size in bytes */
+       unsigned bsize; /* fundamental file system block size */
+       unsigned blocks;        /* total blocks in file system */
+       unsigned bfree; /* free blocks in fs */
+       unsigned bavail;        /* free blocks avail to non-superuser */
+};
+
+union statfsres switch (nfsstat status) {
+case NFS_OK:
+       statfsokres reply;
+default:
+       void;
+};
+
+/*
+ * Remote file service routines
+ */
+program NFS_PROGRAM {
+       version NFS_VERSION {
+               void
+               NFSPROC_NULL(void) = 0;
+
+               attrstat
+               NFSPROC_GETATTR(nfs_fh) =       1;
+
+               attrstat
+               NFSPROC_SETATTR(sattrargs) = 2;
+
+               void
+               NFSPROC_ROOT(void) = 3;
+
+               diropres
+               NFSPROC_LOOKUP(diropargs) = 4;
+
+               readlinkres
+               NFSPROC_READLINK(nfs_fh) = 5;
+
+               readres
+               NFSPROC_READ(readargs) = 6;
+
+               void
+               NFSPROC_WRITECACHE(void) = 7;
+
+               attrstat
+               NFSPROC_WRITE(writeargs) = 8;
+
+               diropres
+               NFSPROC_CREATE(createargs) = 9;
+
+               nfsstat
+               NFSPROC_REMOVE(diropargs) = 10;
+
+               nfsstat
+               NFSPROC_RENAME(renameargs) = 11;
+
+               nfsstat
+               NFSPROC_LINK(linkargs) = 12;
+
+               nfsstat
+               NFSPROC_SYMLINK(symlinkargs) = 13;
+
+               diropres
+               NFSPROC_MKDIR(createargs) = 14;
+
+               nfsstat
+               NFSPROC_RMDIR(diropargs) = 15;
+
+               readdirres
+               NFSPROC_READDIR(readdirargs) = 16;
+
+               statfsres
+               NFSPROC_STATFS(nfs_fh) = 17;
+       } = 2;
+} = 100003;
diff --git a/lib/libdss-include/include/rpcsvc/nis.h b/lib/libdss-include/include/rpcsvc/nis.h
new file mode 100644 (file)
index 0000000..933c4d9
--- /dev/null
@@ -0,0 +1,616 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPCSVC_NIS_H
+#define _RPCSVC_NIS_H 1
+
+#include <features.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis_tags.h>
+
+__BEGIN_DECLS
+
+/*
+ *     nis.h
+ *
+ *     This file is the main include file for NIS clients. It contains
+ *     both the client library function defines and the various data
+ *     structures used by the NIS service. It includes the file nis_tags.h
+ *     which defines the tag values. This allows the tags to change without
+ *     having to change the nis.x file.
+ *
+ *     NOTE : THIS FILE IS NOT GENERATED WITH RPCGEN ! SO YOU HAVE TO
+ *             ADD ALL THE CHANGES ON nis_*.x FILES HERE AGAIN !
+ *
+ *      I have removed all the Solaris internal structs and variables,
+ *      because they are not supported, Sun changed them between various
+ *      releases and they shouldn't be used in user programs.
+ *                                              <kukuk@suse.de>
+ */
+
+
+#ifndef __nis_object_h
+#define __nis_object_h
+
+#define NIS_MAXSTRINGLEN 255
+#define NIS_MAXNAMELEN 1024
+#define NIS_MAXATTRNAME 32
+#define NIS_MAXATTRVAL 2048
+#define NIS_MAXCOLUMNS 64
+#define NIS_MAXATTR 16
+#define NIS_MAXPATH 1024
+#define NIS_MAXREPLICAS 128
+#define NIS_MAXLINKS 16
+#define NIS_PK_NONE 0
+#define NIS_PK_DH 1
+#define NIS_PK_RSA 2
+#define NIS_PK_KERB 3
+#define NIS_PK_DHEXT 4
+
+struct nis_attr {
+       char *zattr_ndx;
+       struct {
+               u_int zattr_val_len;
+               char *zattr_val_val;
+       } zattr_val;
+};
+typedef struct nis_attr nis_attr;
+
+typedef char *nis_name;
+
+enum zotypes {
+       BOGUS_OBJ = 0,
+       NO_OBJ = 1,
+       DIRECTORY_OBJ = 2,
+       GROUP_OBJ = 3,
+       TABLE_OBJ = 4,
+       ENTRY_OBJ = 5,
+       LINK_OBJ = 6,
+       PRIVATE_OBJ = 7,
+       NIS_BOGUS_OBJ = 0,
+       NIS_NO_OBJ = 1,
+       NIS_DIRECTORY_OBJ = 2,
+       NIS_GROUP_OBJ = 3,
+       NIS_TABLE_OBJ = 4,
+       NIS_ENTRY_OBJ = 5,
+       NIS_LINK_OBJ = 6,
+       NIS_PRIVATE_OBJ = 7
+};
+typedef enum zotypes zotypes;
+
+enum nstype {
+       UNKNOWN = 0,
+       NIS = 1,
+       SUNYP = 2,
+       IVY = 3,
+       DNS = 4,
+       X500 = 5,
+       DNANS = 6,
+       XCHS = 7,
+       CDS = 8,
+};
+typedef enum nstype nstype;
+
+struct oar_mask {
+       uint32_t oa_rights;
+       zotypes oa_otype;
+};
+typedef struct oar_mask oar_mask;
+
+struct endpoint {
+       char *uaddr;
+       char *family;
+       char *proto;
+};
+typedef struct endpoint endpoint;
+
+struct nis_server {
+       nis_name name;
+       struct {
+               u_int ep_len;
+               endpoint *ep_val;
+       } ep;
+       uint32_t key_type;
+       netobj pkey;
+};
+typedef struct nis_server nis_server;
+
+struct directory_obj {
+       nis_name do_name;
+       nstype do_type;
+       struct {
+               u_int do_servers_len;
+               nis_server *do_servers_val;
+       } do_servers;
+       uint32_t do_ttl;
+       struct {
+               u_int do_armask_len;
+               oar_mask *do_armask_val;
+       } do_armask;
+};
+typedef struct directory_obj directory_obj;
+
+#define EN_BINARY 1
+#define EN_CRYPT 2
+#define EN_XDR 4
+#define EN_MODIFIED 8
+#define EN_ASN1 64
+
+struct entry_col {
+       uint32_t ec_flags;
+       struct {
+               u_int ec_value_len;
+               char *ec_value_val;
+       } ec_value;
+};
+typedef struct entry_col entry_col;
+
+struct entry_obj {
+       char *en_type;
+       struct {
+               u_int en_cols_len;
+               entry_col *en_cols_val;
+       } en_cols;
+};
+typedef struct entry_obj entry_obj;
+
+struct group_obj {
+       uint32_t gr_flags;
+       struct {
+               u_int gr_members_len;
+               nis_name *gr_members_val;
+       } gr_members;
+};
+typedef struct group_obj group_obj;
+
+struct link_obj {
+       zotypes li_rtype;
+       struct {
+               u_int li_attrs_len;
+               nis_attr *li_attrs_val;
+       } li_attrs;
+       nis_name li_name;
+};
+typedef struct link_obj link_obj;
+
+#define TA_BINARY 1
+#define TA_CRYPT 2
+#define TA_XDR 4
+#define TA_SEARCHABLE 8
+#define TA_CASE 16
+#define TA_MODIFIED 32
+#define TA_ASN1 64
+
+struct table_col {
+       char *tc_name;
+       uint32_t tc_flags;
+       uint32_t tc_rights;
+};
+typedef struct table_col table_col;
+
+struct table_obj {
+       char *ta_type;
+       int ta_maxcol;
+       u_char ta_sep;
+       struct {
+               u_int ta_cols_len;
+               table_col *ta_cols_val;
+       } ta_cols;
+       char *ta_path;
+};
+typedef struct table_obj table_obj;
+
+struct objdata {
+       zotypes zo_type;
+       union {
+               struct directory_obj di_data;
+               struct group_obj gr_data;
+               struct table_obj ta_data;
+               struct entry_obj en_data;
+               struct link_obj li_data;
+               struct {
+                       u_int po_data_len;
+                       char *po_data_val;
+               } po_data;
+       } objdata_u;
+};
+typedef struct objdata objdata;
+
+struct nis_oid {
+       uint32_t ctime;
+       uint32_t mtime;
+};
+typedef struct nis_oid nis_oid;
+
+struct nis_object {
+       nis_oid zo_oid;
+       nis_name zo_name;
+       nis_name zo_owner;
+       nis_name zo_group;
+       nis_name zo_domain;
+       uint32_t zo_access;
+       uint32_t zo_ttl;
+       objdata zo_data;
+};
+typedef struct nis_object nis_object;
+
+#endif /* if __nis_object_h */
+
+enum nis_error {
+       NIS_SUCCESS = 0,
+       NIS_S_SUCCESS = 1,
+       NIS_NOTFOUND = 2,
+       NIS_S_NOTFOUND = 3,
+       NIS_CACHEEXPIRED = 4,
+       NIS_NAMEUNREACHABLE = 5,
+       NIS_UNKNOWNOBJ = 6,
+       NIS_TRYAGAIN = 7,
+       NIS_SYSTEMERROR = 8,
+       NIS_CHAINBROKEN = 9,
+       NIS_PERMISSION = 10,
+       NIS_NOTOWNER = 11,
+       NIS_NOT_ME = 12,
+       NIS_NOMEMORY = 13,
+       NIS_NAMEEXISTS = 14,
+       NIS_NOTMASTER = 15,
+       NIS_INVALIDOBJ = 16,
+       NIS_BADNAME = 17,
+       NIS_NOCALLBACK = 18,
+       NIS_CBRESULTS = 19,
+       NIS_NOSUCHNAME = 20,
+       NIS_NOTUNIQUE = 21,
+       NIS_IBMODERROR = 22,
+       NIS_NOSUCHTABLE = 23,
+       NIS_TYPEMISMATCH = 24,
+       NIS_LINKNAMEERROR = 25,
+       NIS_PARTIAL = 26,
+       NIS_TOOMANYATTRS = 27,
+       NIS_RPCERROR = 28,
+       NIS_BADATTRIBUTE = 29,
+       NIS_NOTSEARCHABLE = 30,
+       NIS_CBERROR = 31,
+       NIS_FOREIGNNS = 32,
+       NIS_BADOBJECT = 33,
+       NIS_NOTSAMEOBJ = 34,
+       NIS_MODFAIL = 35,
+       NIS_BADREQUEST = 36,
+       NIS_NOTEMPTY = 37,
+       NIS_COLDSTART_ERR = 38,
+       NIS_RESYNC = 39,
+       NIS_FAIL = 40,
+       NIS_UNAVAIL = 41,
+       NIS_RES2BIG = 42,
+       NIS_SRVAUTH = 43,
+       NIS_CLNTAUTH = 44,
+       NIS_NOFILESPACE = 45,
+       NIS_NOPROC = 46,
+       NIS_DUMPLATER = 47,
+};
+typedef enum nis_error nis_error;
+
+struct nis_result {
+       nis_error status;
+       struct {
+               u_int objects_len;
+               nis_object *objects_val;
+       } objects;
+       netobj cookie;
+       uint32_t zticks;
+       uint32_t dticks;
+       uint32_t aticks;
+       uint32_t cticks;
+};
+typedef struct nis_result nis_result;
+
+struct ns_request {
+       nis_name ns_name;
+       struct {
+               u_int ns_object_len;
+               nis_object *ns_object_val;
+       } ns_object;
+};
+typedef struct ns_request ns_request;
+
+struct ib_request {
+       nis_name ibr_name;
+       struct {
+               u_int ibr_srch_len;
+               nis_attr *ibr_srch_val;
+       } ibr_srch;
+       uint32_t ibr_flags;
+       struct {
+               u_int ibr_obj_len;
+               nis_object *ibr_obj_val;
+       } ibr_obj;
+       struct {
+               u_int ibr_cbhost_len;
+               nis_server *ibr_cbhost_val;
+       } ibr_cbhost;
+       u_int ibr_bufsize;
+       netobj ibr_cookie;
+};
+typedef struct ib_request ib_request;
+
+struct ping_args {
+       nis_name dir;
+       uint32_t stamp;
+};
+typedef struct ping_args ping_args;
+
+enum log_entry_t {
+       LOG_NOP = 0,
+       ADD_NAME = 1,
+       REM_NAME = 2,
+       MOD_NAME_OLD = 3,
+       MOD_NAME_NEW = 4,
+       ADD_IBASE = 5,
+       REM_IBASE = 6,
+       MOD_IBASE = 7,
+       UPD_STAMP = 8,
+};
+typedef enum log_entry_t log_entry_t;
+
+struct log_entry {
+       uint32_t le_time;
+       log_entry_t le_type;
+       nis_name le_princp;
+       nis_name le_name;
+       struct {
+               u_int le_attrs_len;
+               nis_attr *le_attrs_val;
+       } le_attrs;
+       nis_object le_object;
+};
+typedef struct log_entry log_entry;
+
+struct log_result {
+       nis_error lr_status;
+       netobj lr_cookie;
+       struct {
+               u_int lr_entries_len;
+               log_entry *lr_entries_val;
+       } lr_entries;
+};
+typedef struct log_result log_result;
+
+struct cp_result {
+       nis_error cp_status;
+       uint32_t cp_zticks;
+       uint32_t cp_dticks;
+};
+typedef struct cp_result cp_result;
+
+struct nis_tag {
+       uint32_t tag_type;
+       char *tag_val;
+};
+typedef struct nis_tag nis_tag;
+
+struct nis_taglist {
+       struct {
+               u_int tags_len;
+               nis_tag *tags_val;
+       } tags;
+};
+typedef struct nis_taglist nis_taglist;
+
+struct dump_args {
+       nis_name da_dir;
+       uint32_t da_time;
+       struct {
+               u_int da_cbhost_len;
+               nis_server *da_cbhost_val;
+       } da_cbhost;
+};
+typedef struct dump_args dump_args;
+
+struct fd_args {
+       nis_name dir_name;
+       nis_name requester;
+};
+typedef struct fd_args fd_args;
+
+struct fd_result {
+       nis_error status;
+       nis_name source;
+       struct {
+               u_int dir_data_len;
+               char *dir_data_val;
+       } dir_data;
+       struct {
+               u_int signature_len;
+               char *signature_val;
+       } signature;
+};
+typedef struct fd_result fd_result;
+
+/* Generic client creating flags */
+#define ZMH_VC         1
+#define ZMH_DG         2
+#define ZMH_AUTH       4
+
+/* Testing Access rights for objects */
+
+#define NIS_READ_ACC           1
+#define NIS_MODIFY_ACC         2
+#define NIS_CREATE_ACC         4
+#define NIS_DESTROY_ACC        8
+/* Test macros. a == access rights, m == desired rights. */
+#define NIS_WORLD(a, m)        (((a) & (m)) != 0)
+#define NIS_GROUP(a, m)        (((a) & ((m) << 8)) != 0)
+#define NIS_OWNER(a, m)        (((a) & ((m) << 16)) != 0)
+#define NIS_NOBODY(a, m)       (((a) & ((m) << 24)) != 0)
+/*
+ * EOL Alert - The following non-prefixed test macros are
+ * here for backward compatibility, and will be not be present
+ * in future releases - use the NIS_*() macros above.
+ */
+#define WORLD(a, m)    (((a) & (m)) != 0)
+#define GROUP(a, m)    (((a) & ((m) << 8)) != 0)
+#define OWNER(a, m)    (((a) & ((m) << 16)) != 0)
+#define NOBODY(a, m)   (((a) & ((m) << 24)) != 0)
+
+#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
+#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
+#define WORLD_DEFAULT (NIS_READ_ACC)
+#define GROUP_DEFAULT (NIS_READ_ACC << 8)
+#define OWNER_DEFAULT ((NIS_READ_ACC + NIS_MODIFY_ACC + NIS_CREATE_ACC +\
+                       NIS_DESTROY_ACC) << 16)
+#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
+
+/* Result manipulation defines ... */
+#define NIS_RES_NUMOBJ(x)      ((x)->objects.objects_len)
+#define NIS_RES_OBJECT(x)      ((x)->objects.objects_val)
+#define NIS_RES_COOKIE(x)      ((x)->cookie)
+#define NIS_RES_STATUS(x)      ((x)->status)
+
+/* These defines make getting at the variant part of the object easier. */
+#define TA_data zo_data.objdata_u.ta_data
+#define EN_data zo_data.objdata_u.en_data
+#define DI_data zo_data.objdata_u.di_data
+#define LI_data zo_data.objdata_u.li_data
+#define GR_data zo_data.objdata_u.gr_data
+
+#define __type_of(o) ((o)->zo_data.zo_type)
+
+/* Declarations for the internal subroutines in nislib.c */
+enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
+typedef enum name_pos name_pos;
+
+/*
+ * Defines for getting at column data in entry objects. Because RPCGEN
+ * generates some rather wordy structures, we create some defines that
+ * collapse the needed keystrokes to access a particular value using
+ * these definitions they take an nis_object *, and an int and return
+ * a u_char * for Value, and an int for length.
+ */
+#define ENTRY_VAL(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
+#define ENTRY_LEN(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
+
+
+/* Prototypes, and extern declarations for the NIS library functions. */
+#include <rpcsvc/nislib.h>
+#endif
+
+/*
+ * nis_3.h
+ *
+ * This file contains definitions that are only of interest to the actual
+ * service daemon and client stubs. Normal users of NIS will not include
+ * this file.
+ *
+ * NOTE : This include file is automatically created by a combination
+ * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
+ * and then remake this file.
+ */
+#ifndef __nis_3_h
+#define __nis_3_h
+
+#define NIS_PROG 100300
+#define NIS_VERSION 3
+
+#define NIS_LOOKUP 1
+extern  nis_result * nis_lookup_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_lookup_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_ADD 2
+extern  nis_result * nis_add_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_add_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_MODIFY 3
+extern  nis_result * nis_modify_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_modify_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_REMOVE 4
+extern  nis_result * nis_remove_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_remove_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_IBLIST 5
+extern  nis_result * nis_iblist_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_iblist_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_IBADD 6
+extern  nis_result * nis_ibadd_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibadd_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_IBMODIFY 7
+extern  nis_result * nis_ibmodify_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibmodify_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBREMOVE 8
+extern  nis_result * nis_ibremove_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibremove_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBFIRST 9
+extern  nis_result * nis_ibfirst_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibfirst_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBNEXT 10
+extern  nis_result * nis_ibnext_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibnext_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_FINDDIRECTORY 12
+extern  fd_result * nis_finddirectory_3 (fd_args *, CLIENT *) __THROW;
+extern  fd_result * nis_finddirectory_3_svc (fd_args *,
+                                            struct svc_req *) __THROW;
+#define NIS_STATUS 14
+extern  nis_taglist * nis_status_3 (nis_taglist *, CLIENT *) __THROW;
+extern  nis_taglist * nis_status_3_svc (nis_taglist *, struct svc_req *)
+     __THROW;
+#define NIS_DUMPLOG 15
+extern  log_result * nis_dumplog_3 (dump_args *, CLIENT *) __THROW;
+extern  log_result * nis_dumplog_3_svc (dump_args *, struct svc_req *) __THROW;
+#define NIS_DUMP 16
+extern  log_result * nis_dump_3 (dump_args *, CLIENT *) __THROW;
+extern  log_result * nis_dump_3_svc (dump_args *, struct svc_req *) __THROW;
+#define NIS_CALLBACK 17
+extern  bool_t * nis_callback_3 (netobj *, CLIENT *) __THROW;
+extern  bool_t * nis_callback_3_svc (netobj *, struct svc_req *) __THROW;
+#define NIS_CPTIME 18
+extern  uint32_t * nis_cptime_3 (nis_name *, CLIENT *) __THROW;
+extern  uint32_t * nis_cptime_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_CHECKPOINT 19
+extern  cp_result * nis_checkpoint_3 (nis_name *, CLIENT *) __THROW;
+extern  cp_result * nis_checkpoint_3_svc (nis_name *, struct svc_req *)
+     __THROW;
+#define NIS_PING 20
+extern  void * nis_ping_3 (ping_args *, CLIENT *) __THROW;
+extern  void * nis_ping_3_svc (ping_args *, struct svc_req *) __THROW;
+#define NIS_SERVSTATE 21
+extern  nis_taglist * nis_servstate_3 (nis_taglist *, CLIENT *) __THROW;
+extern  nis_taglist * nis_servstate_3_svc (nis_taglist *,
+                                          struct svc_req *) __THROW;
+#define NIS_MKDIR 22
+extern  nis_error * nis_mkdir_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_mkdir_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_RMDIR 23
+extern  nis_error * nis_rmdir_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_rmdir_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_UPDKEYS 24
+extern  nis_error * nis_updkeys_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_updkeys_3_svc (nis_name *, struct svc_req *) __THROW;
+
+__END_DECLS
+
+#endif /* ! _RPCSVC_NIS_H */
diff --git a/lib/libdss-include/include/rpcsvc/nis.x b/lib/libdss-include/include/rpcsvc/nis.x
new file mode 100644 (file)
index 0000000..e318af2
--- /dev/null
@@ -0,0 +1,474 @@
+%/*
+% * Copyright (c) 2010, Oracle America, Inc.
+% *
+% * Redistribution and use in source and binary forms, with or without
+% * modification, are permitted provided that the following conditions are
+% * met:
+% *
+% *     * Redistributions of source code must retain the above copyright
+% *       notice, this list of conditions and the following disclaimer.
+% *     * Redistributions in binary form must reproduce the above
+% *       copyright notice, this list of conditions and the following
+% *       disclaimer in the documentation and/or other materials
+% *       provided with the distribution.
+% *     * Neither the name of the "Oracle America, Inc." nor the names of its
+% *       contributors may be used to endorse or promote products derived
+% *       from this software without specific prior written permission.
+% *
+% *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+% *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+% *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+% *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+% *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+% *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+% *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+% *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+% *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+% *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+% *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+% */
+
+#ifdef RPC_HDR
+%/*
+% *    nis.h
+% *
+% *    This file is the main include file for NIS clients. It contains
+% *    both the client library function defines and the various data
+% *    structures used by the NIS service. It includes the file nis_tags.h
+% *    which defines the tag values. This allows the tags to change without
+% *    having to change the nis.x file.
+% *
+% *    NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
+% *           rpcgen is run on the nis.x file. Note that there is a
+% *           simple sed script to remove some unneeded lines. (See the
+% *           Makefile target nis.h)
+% *
+% */
+%#include <rpcsvc/nis_tags.h>
+#endif
+
+/* This gets stuffed into the source files. */
+#if RPC_HDR
+%#include <rpc/xdr.h>
+#endif
+
+/* Include the RPC Language description of NIS objects */
+#include "nis_object.x"
+
+/* Errors  that can be returned by the service */
+enum nis_error {
+       NIS_SUCCESS = 0,        /* A-ok, let's rock n roll      */
+       NIS_S_SUCCESS = 1,      /* Name found (maybe)           */
+       NIS_NOTFOUND = 2,       /* Name definitely not found    */
+       NIS_S_NOTFOUND = 3,     /* Name maybe not found         */
+       NIS_CACHEEXPIRED = 4,   /* Name exists but cache out of date */
+       NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */
+       NIS_UNKNOWNOBJ = 6,     /* Object type is bogus */
+       NIS_TRYAGAIN = 7,       /* I'm busy, call back */
+       NIS_SYSTEMERROR = 8,    /* Generic system error */
+       NIS_CHAINBROKEN = 9,    /* First/Next warning */
+       NIS_PERMISSION = 10,    /* Not enough permission to access */
+       NIS_NOTOWNER = 11,      /* You don't own it, sorry */
+       NIS_NOT_ME = 12,        /* I don't serve this name */
+       NIS_NOMEMORY = 13,      /* Outta VM! Help! */
+       NIS_NAMEEXISTS = 14,    /* Can't create over another name */
+       NIS_NOTMASTER = 15,     /* I'm justa secondaray, don't ask me */
+       NIS_INVALIDOBJ = 16,    /* Object is broken somehow */
+       NIS_BADNAME = 17,       /* Unparsable name */
+       NIS_NOCALLBACK = 18,    /* Couldn't talk to call back proc */
+       NIS_CBRESULTS = 19,     /* Results being called back to you */
+       NIS_NOSUCHNAME = 20,    /* Name unknown */
+       NIS_NOTUNIQUE = 21,     /* Value is not uniques (entry) */
+       NIS_IBMODERROR = 22,    /* Inf. Base. Modify error. */
+       NIS_NOSUCHTABLE = 23,   /* Name for table was wrong */
+       NIS_TYPEMISMATCH = 24,  /* Entry and table type mismatch */
+       NIS_LINKNAMEERROR = 25, /* Link points to bogus name */
+       NIS_PARTIAL = 26,       /* Partial success, found table */
+       NIS_TOOMANYATTRS = 27,  /* Too many attributes */
+       NIS_RPCERROR = 28,      /* RPC error encountered */
+       NIS_BADATTRIBUTE = 29,  /* Bad or invalid attribute */
+       NIS_NOTSEARCHABLE = 30, /* Non-searchable object searched */
+       NIS_CBERROR = 31,       /* Error during callback (svc crash) */
+       NIS_FOREIGNNS = 32,     /* Foreign Namespace */
+       NIS_BADOBJECT = 33,     /* Malformed object structure */
+       NIS_NOTSAMEOBJ = 34,    /* Object swapped during deletion */
+       NIS_MODFAIL = 35,       /* Failure during a Modify. */
+       NIS_BADREQUEST = 36,    /* Illegal query for table */
+       NIS_NOTEMPTY = 37,      /* Attempt to remove a non-empty tbl */
+       NIS_COLDSTART_ERR = 38, /* Error accesing the cold start file */
+       NIS_RESYNC = 39,        /* Transaction log too far out of date */
+       NIS_FAIL = 40,          /* NIS operation failed. */
+       NIS_UNAVAIL = 41,       /* NIS+ service is unavailable (client) */
+       NIS_RES2BIG = 42,       /* NIS+ result too big for datagram */
+       NIS_SRVAUTH = 43,       /* NIS+ server wasn't authenticated. */
+       NIS_CLNTAUTH = 44,      /* NIS+ Client wasn't authenticated. */
+       NIS_NOFILESPACE = 45,   /* NIS+ server ran out of disk space */
+       NIS_NOPROC = 46,        /* NIS+ server couldn't create new proc */
+       NIS_DUMPLATER = 47      /* NIS+ server already has dump child */
+};
+
+
+/*
+ * Structure definitions for the parameters and results of the actual
+ * NIS RPC calls.
+ *
+ * This is the standard result (in the protocol) of most of the nis
+ * requests.
+ */
+
+struct nis_result {
+       nis_error       status;         /* Status of the response */
+       nis_object      objects<>;      /* objects found          */
+       netobj          cookie;         /* Cookie Data            */
+       uint32_t        zticks;         /* server ticks           */
+       uint32_t        dticks;         /* DBM ticks.             */
+       uint32_t        aticks;         /* Cache (accel) ticks    */
+       uint32_t        cticks;         /* Client ticks           */
+};
+
+/*
+ * A Name Service request
+ * This request is used to access the name space, ns_name is the name
+ * of the object within the namespace and the object is it's value, for
+ * add/modify, a copy of the original for remove.
+ */
+
+struct ns_request {
+       nis_name        ns_name;        /* Name in the NIS name space   */
+       nis_object      ns_object<1>;   /* Optional Object (add/remove) */
+};
+
+/*
+ * An information base request
+ * This request includes the NIS name of the table we wish to search, the
+ * search criteria in the form of attribute/value pairs and an optional
+ * callback program number. If the callback program number is provided
+ * the server will send back objects one at a time, otherwise it will
+ * return them all in the response.
+ */
+
+struct ib_request {
+       nis_name        ibr_name;       /* The name of the Table        */
+       nis_attr        ibr_srch<>;     /* The search critereia         */
+       uint32_t        ibr_flags;      /* Optional flags               */
+       nis_object      ibr_obj<1>;     /* optional object (add/modify) */
+       nis_server      ibr_cbhost<1>;  /* Optional callback info       */
+       u_int           ibr_bufsize;    /* Optional first/next bufsize  */
+       netobj          ibr_cookie;     /* The first/next cookie        */
+};
+
+/*
+ * This argument to the PING call notifies the replicas that something in
+ * a directory has changed and this is it's timestamp. The replica will use
+ * the timestamp to determine if its resync operation was successful.
+ */
+struct ping_args {
+       nis_name        dir;    /* Directory that had the change */
+       uint32_t        stamp;  /* timestamp of the transaction  */
+};
+
+/*
+ * These are the type of entries that are stored in the transaction log,
+ * note that modifications will appear as two entries, for names, they have
+ * a "OLD" entry followed by a "NEW" entry. For entries in tables, there
+ * is a remove followed by an add. It is done this way so that we can read
+ * the log backwards to back out transactions and forwards to propogate
+ * updated.
+ */
+enum log_entry_t {
+       LOG_NOP = 0,
+       ADD_NAME = 1,           /* Name Added to name space               */
+       REM_NAME = 2,           /* Name removed from name space           */
+       MOD_NAME_OLD = 3,       /* Name was modified in the name space    */
+       MOD_NAME_NEW = 4,       /* Name was modified in the name space    */
+       ADD_IBASE = 5,          /* Entry added to information base        */
+       REM_IBASE = 6,          /* Entry removed from information base    */
+       MOD_IBASE = 7,          /* Entry was modified in information base */
+       UPD_STAMP = 8           /* Update timestamp (used as fenceposts)  */
+};
+
+/*
+ * This result is returned from the name service when it is requested to
+ * dump logged entries from its transaction log. Information base updates
+ * will have the name of the information base in the le_name field and
+ * a canonical set of attribute/value pairs to fully specify the entry's
+ * 'name'.
+ */
+struct log_entry {
+       uint32_t        le_time;        /* Time in seconds              */
+       log_entry_t     le_type;        /* Type of log entry            */
+       nis_name        le_princp;      /* Principal making the change  */
+       nis_name        le_name;        /* Name of table/dir involved   */
+       nis_attr        le_attrs<>;     /* List of AV pairs.            */
+       nis_object      le_object;      /* Actual object value          */
+};
+
+struct log_result {
+       nis_error       lr_status;      /* The status itself            */
+       netobj          lr_cookie;      /* Used by the dump callback    */
+       log_entry       lr_entries<>;   /* zero or more entries */
+};
+
+struct cp_result {
+       nis_error       cp_status;      /* Status of the checkpoint     */
+       uint32_t        cp_zticks;      /* Service 'ticks'              */
+       uint32_t        cp_dticks;      /* Database 'ticks'             */
+};
+
+/*
+ * This structure defines a generic NIS tag list. The taglist contains
+ * zero or tags, each of which is a type and a value. (u_int).
+ * These are used to report statistics (see tag definitions below)
+ * and to set or reset state variables.
+ */
+struct nis_tag {
+       uint32_t        tag_type;       /* Statistic tag (may vary)      */
+       string          tag_val<>;      /* Statistic value may also vary */
+};
+
+struct nis_taglist {
+       nis_tag tags<>;                 /* List of tags */
+};
+
+struct dump_args {
+       nis_name        da_dir;         /* Directory to dump    */
+       uint32_t        da_time;        /* From this timestamp  */
+       nis_server      da_cbhost<1>;   /* Callback to use.     */
+};
+
+struct fd_args {
+       nis_name        dir_name;  /* The directory we're looking for */
+       nis_name        requester; /* Host principal name for signature */
+};
+
+struct fd_result {
+       nis_error       status;         /* Status returned by function  */
+       nis_name        source;         /* Source of this answer        */
+       opaque          dir_data<>;     /* Directory Data (XDR'ed)      */
+       opaque          signature<>;    /* Signature of the source      */
+};
+
+%/*
+% * Structures used for server binding.
+% */
+struct nis_bound_endpoint {
+       endpoint ep;
+       int generation;
+       int rank;
+       uint32_t flags;
+       int hostnum;
+       int epnum;
+       nis_name uaddr;
+       endpoint cbep;
+};
+typedef struct nis_bound_endpoint nis_bound_endpoint;
+
+struct nis_bound_directory {
+       int generation;
+       int min_rank;           /* minimum rank of bound endpoints */
+       int optimal_rank;       /* best possible rank of all endpoints */
+       directory_obj dobj;
+       nis_bound_endpoint BEP<>;
+};
+typedef struct nis_bound_directory nis_bound_directory;
+%#define bep_len BEP.BEP_len
+%#define bep_val BEP.BEP_val
+
+struct nis_active_endpoint {
+       endpoint ep;
+       nis_name hostname;
+       int rank;
+       int uaddr_generation;
+       nis_name uaddr;
+       int cbep_generation;
+       endpoint cbep;
+};
+typedef struct nis_active_endpoint nis_active_endpoint;
+
+%/* defines for nis_bound_endpoint.flags */
+%#define NIS_BOUND 0x1
+%#define NIS_TRANSIENT_ERRORS 0x2
+
+program  NIS_PROG {
+
+       /* RPC Language description of the NIS+ protocol */
+       version NIS_VERSION {
+               /* The name service functions */
+               nis_result  NIS_LOOKUP(ns_request) = 1;
+               nis_result  NIS_ADD(ns_request) = 2;
+               nis_result  NIS_MODIFY(ns_request) = 3;
+               nis_result  NIS_REMOVE(ns_request) = 4;
+
+               /* The information base functions */
+               nis_result  NIS_IBLIST(ib_request) = 5;
+               nis_result  NIS_IBADD(ib_request) = 6;
+               nis_result  NIS_IBMODIFY(ib_request) = 7;
+               nis_result  NIS_IBREMOVE(ib_request) = 8;
+               nis_result  NIS_IBFIRST(ib_request) = 9;
+               nis_result  NIS_IBNEXT(ib_request) = 10;
+
+               /* NIS Administrative functions */
+               fd_result   NIS_FINDDIRECTORY(fd_args) = 12;
+
+               /* If fetch and optionally reset statistics */
+               nis_taglist  NIS_STATUS(nis_taglist) = 14;
+
+               /* Dump changes to directory since time in da_time */
+               log_result  NIS_DUMPLOG(dump_args) = 15;
+
+               /* Dump contents of directory named */
+               log_result  NIS_DUMP(dump_args) = 16;
+
+               /* Check status of callback thread */
+               bool        NIS_CALLBACK(netobj) = 17;
+
+               /* Return last update time for named dir */
+               uint32_t    NIS_CPTIME(nis_name) = 18;
+
+               /* Checkpoint directory or table named */
+               cp_result   NIS_CHECKPOINT(nis_name) = 19;
+
+               /* Send 'status changed' ping to replicates */
+               void        NIS_PING(ping_args) = 20;
+
+               /* Modify server behaviour (such as debugging) */
+               nis_taglist NIS_SERVSTATE(nis_taglist) = 21;
+
+               /* Create a Directory */
+               nis_error   NIS_MKDIR(nis_name) = 22;
+
+               /* Remove a Directory */
+               nis_error   NIS_RMDIR(nis_name) = 23;
+
+               /* Update public keys of a directory object */
+               nis_error   NIS_UPDKEYS(nis_name) = 24;
+       } = 3;
+} = 100300;
+
+/*
+ * Included below are the defines that become part of nis.h,
+ * they are technically not part of the protocol, but do define
+ * key aspects of the implementation and are therefore useful
+ * in building a conforming server or client.
+ */
+#if RPC_HDR
+%/*
+% * Generic "hash" datastructures, used by all types of hashed data.
+% */
+%struct nis_hash_data {
+%      nis_name                name;      /* NIS name of hashed item      */
+%      int                     keychain;  /* It's hash key (for pop)      */
+%      struct nis_hash_data    *next;     /* Hash collision pointer       */
+%      struct nis_hash_data    *prv_item; /* A serial, doubly linked list */
+%      struct nis_hash_data    *nxt_item; /* of items in the hash table   */
+%};
+%typedef struct nis_hash_data NIS_HASH_ITEM;
+%
+%struct nis_hash_table {
+%      NIS_HASH_ITEM   *keys[64];      /* A hash table of items           */
+%      NIS_HASH_ITEM   *first;         /* The first "item" in serial list */
+%};
+%typedef struct nis_hash_table NIS_HASH_TABLE;
+%
+%/* Structure for storing dynamically allocated static data */
+%struct nis_sdata {
+%      void    *buf;   /* Memory allocation pointer    */
+%      u_int   size;   /* Buffer size                  */
+%};
+%
+%/* Generic client creating flags */
+%#define ZMH_VC                1
+%#define ZMH_DG                2
+%#define ZMH_AUTH      4
+%
+%/* Testing Access rights for objects */
+%
+%#define NIS_READ_ACC          1
+%#define NIS_MODIFY_ACC                2
+%#define NIS_CREATE_ACC                4
+%#define NIS_DESTROY_ACC       8
+%/* Test macros. a == access rights, m == desired rights. */
+%#define NIS_WORLD(a, m)       (((a) & (m)) != 0)
+%#define NIS_GROUP(a, m)       (((a) & ((m) << 8)) != 0)
+%#define NIS_OWNER(a, m)       (((a) & ((m) << 16)) != 0)
+%#define NIS_NOBODY(a, m)      (((a) & ((m) << 24)) != 0)
+%/*
+% * EOL Alert - The following non-prefixed test macros are
+% * here for backward compatability, and will be not be present
+% * in future releases - use the NIS_*() macros above.
+% */
+%#define WORLD(a, m)   (((a) & (m)) != 0)
+%#define GROUP(a, m)   (((a) & ((m) << 8)) != 0)
+%#define OWNER(a, m)   (((a) & ((m) << 16)) != 0)
+%#define NOBODY(a, m)  (((a) & ((m) << 24)) != 0)
+%
+%#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
+%#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
+%#define WORLD_DEFAULT (NIS_READ_ACC)
+%#define GROUP_DEFAULT (NIS_READ_ACC << 8)
+%#define OWNER_DEFAULT ((NIS_READ_ACC +\
+                        NIS_MODIFY_ACC +\
+                        NIS_CREATE_ACC +\
+                        NIS_DESTROY_ACC) << 16)
+%#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
+%
+%/* Result manipulation defines ... */
+%#define NIS_RES_NUMOBJ(x)     ((x)->objects.objects_len)
+%#define NIS_RES_OBJECT(x)     ((x)->objects.objects_val)
+%#define NIS_RES_COOKIE(x)     ((x)->cookie)
+%#define NIS_RES_STATUS(x)     ((x)->status)
+%
+%/* These defines make getting at the variant part of the object easier. */
+%#define TA_data zo_data.objdata_u.ta_data
+%#define EN_data zo_data.objdata_u.en_data
+%#define DI_data zo_data.objdata_u.di_data
+%#define LI_data zo_data.objdata_u.li_data
+%#define GR_data zo_data.objdata_u.gr_data
+%
+%#define __type_of(o) ((o)->zo_data.zo_type)
+%
+%/* Declarations for the internal subroutines in nislib.c */
+%enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
+%typedef enum name_pos name_pos;
+%
+%/*
+% * Defines for getting at column data in entry objects. Because RPCGEN
+% * generates some rather wordy structures, we create some defines that
+% * collapse the needed keystrokes to access a particular value using
+% * these definitions they take an nis_object *, and an int and return
+% * a u_char * for Value, and an int for length.
+% */
+%#define ENTRY_VAL(obj, col) \
+%      (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
+%#define ENTRY_LEN(obj, col) \
+%      (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
+%
+%
+%
+%#ifdef __cplusplus
+%}
+%#endif
+%
+%/* Prototypes, and extern declarations for the NIS library functions. */
+%#include <rpcsvc/nislib.h>
+%#endif /* __NIS_RPCGEN_H */
+%/* EDIT_START */
+%
+%/*
+% * nis_3.h
+% *
+% * This file contains definitions that are only of interest to the actual
+% * service daemon and client stubs. Normal users of NIS will not include
+% * this file.
+% *
+% * NOTE : This include file is automatically created by a combination
+% * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
+% * and then remake this file.
+% */
+%#ifndef __nis_3_h
+%#define __nis_3_h
+%#ifdef __cplusplus
+%extern "C" {
+%#endif
+#endif
diff --git a/lib/libdss-include/include/rpcsvc/nis_callback.h b/lib/libdss-include/include/rpcsvc/nis_callback.h
new file mode 100644 (file)
index 0000000..6f05728
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _RPCSVC_NIS_CALLBACK_H
+#define _RPCSVC_NIS_CALLBACK_H 1
+
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
+
+__BEGIN_DECLS
+
+typedef nis_object *obj_p;
+
+struct cback_data {
+       struct {
+               u_int entries_len;
+               obj_p *entries_val;
+       } entries;
+};
+typedef struct cback_data cback_data;
+
+#define CB_PROG 100302
+#define CB_VERS 1
+
+#define CBPROC_RECEIVE 1
+extern  bool_t * cbproc_receive_1 (cback_data *, CLIENT *) __THROW;
+extern  bool_t * cbproc_receive_1_svc (cback_data *, struct svc_req *) __THROW;
+
+#define CBPROC_FINISH 2
+extern  void * cbproc_finish_1 (void *, CLIENT *) __THROW;
+extern  void * cbproc_finish_1_svc (void *, struct svc_req *) __THROW;
+
+#define CBPROC_ERROR 3
+extern  void * cbproc_error_1 (nis_error *, CLIENT *) __THROW;
+extern  void * cbproc_error_1_svc (nis_error *, struct svc_req *) __THROW;
+extern int cb_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t) __THROW;
+
+/* the xdr functions */
+
+extern  bool_t xdr_obj_p (XDR *, obj_p*) __THROW;
+extern  bool_t xdr_cback_data (XDR *, cback_data*) __THROW;
+
+__END_DECLS
+
+#endif /* !_RPCVSC_NIS_CALLBACK_H */
diff --git a/lib/libdss-include/include/rpcsvc/nis_callback.x b/lib/libdss-include/include/rpcsvc/nis_callback.x
new file mode 100644 (file)
index 0000000..0fdca9e
--- /dev/null
@@ -0,0 +1,63 @@
+%/*
+% * Copyright (c) 2010, Oracle America, Inc.
+% *
+% * Redistribution and use in source and binary forms, with or without
+% * modification, are permitted provided that the following conditions are
+% * met:
+% *
+% *     * Redistributions of source code must retain the above copyright
+% *       notice, this list of conditions and the following disclaimer.
+% *     * Redistributions in binary form must reproduce the above
+% *       copyright notice, this list of conditions and the following
+% *       disclaimer in the documentation and/or other materials
+% *       provided with the distribution.
+% *     * Neither the name of the "Oracle America, Inc." nor the names of its
+% *       contributors may be used to endorse or promote products derived
+% *       from this software without specific prior written permission.
+% *
+% *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+% *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+% *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+% *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+% *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+% *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+% *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+% *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+% *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+% *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+% *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+% */
+
+/*
+ *     nis_callback.x
+ */
+
+%#pragma ident "@(#)nis_callback.x     1.7     94/05/03"
+
+/*
+ * "@(#)zns_cback.x 1.2 90/09/10"
+ *
+ * RPCL description of the Callback Service.
+ */
+
+#ifdef RPC_HDR
+%#include <rpcsvc/nis.h>
+#endif
+#ifdef RPC_XDR
+%#include "nis_clnt.h"
+#endif
+
+typedef nis_object     *obj_p;
+
+struct cback_data {
+       obj_p           entries<>;      /* List of objects */
+};
+
+program CB_PROG {
+       version CB_VERS {
+               bool    CBPROC_RECEIVE(cback_data) = 1;
+               void    CBPROC_FINISH(void) = 2;
+               void    CBPROC_ERROR(nis_error) = 3;
+       } = 1;
+} = 100302;
diff --git a/lib/libdss-include/include/rpcsvc/nis_object.x b/lib/libdss-include/include/rpcsvc/nis_object.x
new file mode 100644 (file)
index 0000000..774b38f
--- /dev/null
@@ -0,0 +1,328 @@
+/*
+ *     nis_object.x
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+%#pragma ident "@(#)nis_object.x       1.12    97/11/19"
+
+#if RPC_HDR
+%
+%#ifndef __nis_object_h
+%#define __nis_object_h
+%
+#endif
+/*
+ *     This file defines the format for a NIS object in RPC language.
+ * It is included by the main .x file and the database access protocol
+ * file. It is common because both of them need to deal with the same
+ * type of object. Generating the actual code though is a bit messy because
+ * the nis.x file and the nis_dba.x file will generate xdr routines to
+ * encode/decode objects when only one set is needed. Such is life when
+ * one is using rpcgen.
+ *
+ * Note, the protocol doesn't specify any limits on such things as
+ * maximum name length, number of attributes, etc. These are enforced
+ * by the database backend. When you hit them you will no. Also see
+ * the db_getlimits() function for fetching the limit values.
+ *
+ */
+
+/* Some manifest constants, chosen to maximize flexibility without
+ * plugging the wire full of data.
+ */
+const NIS_MAXSTRINGLEN = 255;
+const NIS_MAXNAMELEN   = 1024;
+const NIS_MAXATTRNAME  = 32;
+const NIS_MAXATTRVAL   = 2048;
+const NIS_MAXCOLUMNS   = 64;
+const NIS_MAXATTR      = 16;
+const NIS_MAXPATH      = 1024;
+const NIS_MAXREPLICAS  = 128;
+const NIS_MAXLINKS     = 16;
+
+const NIS_PK_NONE      = 0;    /* no public key (unix/sys auth) */
+const NIS_PK_DH               = 1;     /* Public key is Diffie-Hellman type */
+const NIS_PK_RSA       = 2;    /* Public key if RSA type */
+const NIS_PK_KERB      = 3;    /* Use kerberos style authentication */
+const NIS_PK_DHEXT     = 4;    /* Extended Diffie-Hellman for RPC-GSS */
+
+/*
+ * The fundamental name type of NIS. The name may consist of two parts,
+ * the first being the fully qualified name, and the second being an
+ * optional set of attribute/value pairs.
+ */
+struct nis_attr {
+       string  zattr_ndx<>;    /* name of the index            */
+       opaque  zattr_val<>;    /* Value for the attribute.     */
+};
+
+typedef string nis_name<>;     /* The NIS name itself. */
+
+/* NIS object types are defined by the following enumeration. The numbers
+ * they use are based on the following scheme :
+ *                  0 - 1023 are reserved for Sun,
+ *             1024 - 2047 are defined to be private to a particular tree.
+ *             2048 - 4095 are defined to be user defined.
+ *             4096 - ...  are reserved for future use.
+ *
+ * EOL Alert - The non-prefixed names are present for backward
+ * compatability only, and will not exist in future releases. Use
+ * the NIS_* names for future compatability.
+ */
+
+enum zotypes {
+
+       BOGUS_OBJ       = 0,    /* Uninitialized object structure       */
+       NO_OBJ          = 1,    /* NULL object (no data)                */
+       DIRECTORY_OBJ   = 2,    /* Directory object describing domain   */
+       GROUP_OBJ       = 3,    /* Group object (a list of names)       */
+       TABLE_OBJ       = 4,    /* Table object (a database schema)     */
+       ENTRY_OBJ       = 5,    /* Entry object (a database record)     */
+       LINK_OBJ        = 6,    /* A name link.                         */
+       PRIVATE_OBJ     = 7,    /* Private object (all opaque data)     */
+
+       NIS_BOGUS_OBJ   = 0,    /* Uninitialized object structure       */
+       NIS_NO_OBJ      = 1,    /* NULL object (no data)                */
+       NIS_DIRECTORY_OBJ = 2, /* Directory object describing domain    */
+       NIS_GROUP_OBJ   = 3,    /* Group object (a list of names)       */
+       NIS_TABLE_OBJ   = 4,    /* Table object (a database schema)     */
+       NIS_ENTRY_OBJ   = 5,    /* Entry object (a database record)     */
+       NIS_LINK_OBJ    = 6,    /* A name link.                         */
+       NIS_PRIVATE_OBJ  = 7 /* Private object (all opaque data) */
+};
+
+/*
+ * The types of Name services NIS knows about. They are enumerated
+ * here. The Binder code will use this type to determine if it has
+ * a set of library routines that will access the indicated name service.
+ */
+enum nstype {
+       UNKNOWN = 0,
+       NIS = 1,        /* Nis Plus Service             */
+       SUNYP = 2,      /* Old NIS Service              */
+       IVY = 3,        /* Nis Plus Plus Service        */
+       DNS = 4,        /* Domain Name Service          */
+       X500 = 5,       /* ISO/CCCIT X.500 Service      */
+       DNANS = 6,      /* Digital DECNet Name Service  */
+       XCHS = 7,       /* Xerox ClearingHouse Service  */
+       CDS= 8
+};
+
+/*
+ * DIRECTORY - The name service object. These objects identify other name
+ * servers that are serving some portion of the name space. Each has a
+ * type associated with it. The resolver library will note whether or not
+ * is has the needed routines to access that type of service.
+ * The oarmask structure defines an access rights mask on a per object
+ * type basis for the name spaces. The only bits currently used are
+ * create and destroy. By enabling or disabling these access rights for
+ * a specific object type for a one of the accessor entities (owner,
+ * group, world) the administrator can control what types of objects
+ * may be freely added to the name space and which require the
+ * administrator's approval.
+ */
+struct oar_mask {
+       uint32_t        oa_rights;      /* Access rights mask   */
+       zotypes         oa_otype;       /* Object type          */
+};
+
+struct endpoint {
+       string          uaddr<>;
+       string          family<>;   /* Transport family (INET, OSI, etc) */
+       string          proto<>;    /* Protocol (TCP, UDP, CLNP,  etc)   */
+};
+
+/*
+ * Note: pkey is a netobj which is limited to 1024 bytes which limits the
+ * keysize to 8192 bits. This is consider to be a reasonable limit for
+ * the expected lifetime of this service.
+ */
+struct nis_server {
+       nis_name        name;           /* Principal name of the server  */
+       endpoint        ep<>;           /* Universal addr(s) for server  */
+       uint32_t        key_type;       /* Public key type               */
+       netobj          pkey;           /* server's public key           */
+};
+
+struct directory_obj {
+       nis_name   do_name;      /* Name of the directory being served   */
+       nstype     do_type;      /* one of NIS, DNS, IVY, YP, or X.500   */
+       nis_server do_servers<>; /* <0> == Primary name server           */
+       uint32_t   do_ttl;       /* Time To Live (for caches)            */
+       oar_mask   do_armask<>;  /* Create/Destroy rights by object type */
+};
+
+/*
+ * ENTRY - This is one row of data from an information base.
+ * The type value is used by the client library to convert the entry to
+ * it's internal structure representation. The Table name is a back pointer
+ * to the table where the entry is stored. This allows the client library
+ * to determine where to send a request if the client wishes to change this
+ * entry but got to it through a LINK rather than directly.
+ * If the entry is a "standalone" entry then this field is void.
+ */
+const EN_BINARY   = 1; /* Indicates value is binary data       */
+const EN_CRYPT    = 2; /* Indicates the value is encrypted     */
+const EN_XDR      = 4; /* Indicates the value is XDR encoded   */
+const EN_MODIFIED = 8; /* Indicates entry is modified. */
+const EN_ASN1     = 64;        /* Means contents use ASN.1 encoding    */
+
+struct entry_col {
+       uint32_t        ec_flags;       /* Flags for this value */
+       opaque          ec_value<>;     /* It's textual value   */
+};
+
+struct entry_obj {
+       string  en_type<>;      /* Type of entry such as "passwd" */
+       entry_col en_cols<>;    /* Value for the entry            */
+};
+
+/*
+ * GROUP - The group object contains a list of NIS principal names. Groups
+ * are used to authorize principals. Each object has a set of access rights
+ * for members of its group. Principal names in groups are in the form
+ * name.directory and recursive groups are expressed as @groupname.directory
+ */
+struct group_obj {
+       uint32_t        gr_flags;       /* Flags controlling group      */
+       nis_name        gr_members<>;   /* List of names in group       */
+};
+
+/*
+ * LINK - This is the LINK object. It is quite similar to a symbolic link
+ * in the UNIX filesystem. The attributes in the main object structure are
+ * relative to the LINK data and not what it points to (like the file system)
+ * "modify" privleges here indicate the right to modify what the link points
+ * at and not to modify that actual object pointed to by the link.
+ */
+struct link_obj {
+       zotypes  li_rtype;      /* Real type of the object      */
+       nis_attr li_attrs<>;    /* Attribute/Values for tables  */
+       nis_name li_name;       /* The object's real NIS name   */
+};
+
+/*
+ * TABLE - This is the table object. It implements a simple
+ * data base that applications and use for configuration or
+ * administration purposes. The role of the table is to group together
+ * a set of related entries. Tables are the simple database component
+ * of NIS. Like many databases, tables are logically divided into columns
+ * and rows. The columns are labeled with indexes and each ENTRY makes
+ * up a row. Rows may be addressed within the table by selecting one
+ * or more indexes, and values for those indexes. Each row which has
+ * a value for the given index that matches the desired value is returned.
+ * Within the definition of each column there is a flags variable, this
+ * variable contains flags which determine whether or not the column is
+ * searchable, contains binary data, and access rights for the entry objects
+ * column value.
+ */
+
+const TA_BINARY     = 1;       /* Means table data is binary           */
+const TA_CRYPT      = 2;       /* Means value should be encrypted      */
+const TA_XDR        = 4;       /* Means value is XDR encoded           */
+const TA_SEARCHABLE = 8;       /* Means this column is searchable      */
+const TA_CASE       = 16;      /* Means this column is Case Sensitive  */
+const TA_MODIFIED   = 32;      /* Means this columns attrs are modified*/
+const TA_ASN1       = 64;      /* Means contents use ASN.1 encoding     */
+
+struct table_col {
+       string          tc_name<64>;    /* Column Name             */
+       uint32_t        tc_flags;       /* control flags           */
+       uint32_t        tc_rights;      /* Access rights mask      */
+};
+
+struct table_obj {
+       string    ta_type<64>;   /* Table type such as "passwd" */
+       int       ta_maxcol;     /* Total number of columns     */
+       u_char    ta_sep;        /* Separator character         */
+       table_col ta_cols<>;     /* The number of table indexes */
+       string    ta_path<>;     /* A search path for this table */
+};
+
+/*
+ * This union joins together all of the currently known objects.
+ */
+union objdata switch (zotypes zo_type) {
+       case NIS_DIRECTORY_OBJ :
+               struct directory_obj di_data;
+       case NIS_GROUP_OBJ :
+               struct group_obj gr_data;
+       case NIS_TABLE_OBJ :
+               struct table_obj ta_data;
+       case NIS_ENTRY_OBJ:
+               struct entry_obj en_data;
+       case NIS_LINK_OBJ :
+               struct link_obj li_data;
+       case NIS_PRIVATE_OBJ :
+               opaque  po_data<>;
+       case NIS_NO_OBJ :
+               void;
+       case NIS_BOGUS_OBJ :
+               void;
+       default :
+               void;
+};
+
+/*
+ * This is the basic NIS object data type. It consists of a generic part
+ * which all objects contain, and a specialized part which varies depending
+ * on the type of the object. All of the specialized sections have been
+ * described above. You might have wondered why they all start with an
+ * integer size, followed by the useful data. The answer is, when the
+ * server doesn't recognize the type returned it treats it as opaque data.
+ * And the definition for opaque data is {int size; char *data;}. In this
+ * way, servers and utility routines that do not understand a given type
+ * may still pass it around. One has to be careful in setting
+ * this variable accurately, it must take into account such things as
+ * XDR padding of structures etc. The best way to set it is to note one's
+ * position in the XDR encoding stream, encode the structure, look at the
+ * new position and calculate the size.
+ */
+struct nis_oid {
+       uint32_t ctime;         /* Time of objects creation     */
+       uint32_t mtime;         /* Time of objects modification */
+};
+
+struct nis_object {
+       nis_oid  zo_oid;        /* object identity verifier.            */
+       nis_name zo_name;       /* The NIS name for this object         */
+       nis_name zo_owner;      /* NIS name of object owner.            */
+       nis_name zo_group;      /* NIS name of access group.            */
+       nis_name zo_domain;     /* The administrator for the object     */
+       uint32_t zo_access;     /* Access rights (owner, group, world)  */
+       uint32_t zo_ttl;        /* Object's time to live in seconds.    */
+       objdata  zo_data;       /* Data structure for this type         */
+};
+#if RPC_HDR
+%
+%#endif /* if __nis_object_h */
+%
+#endif
diff --git a/lib/libdss-include/include/rpcsvc/nis_tags.h b/lib/libdss-include/include/rpcsvc/nis_tags.h
new file mode 100644 (file)
index 0000000..c2dc7fd
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *     nis_tags.h
+ *
+ *     This file contains the tags and statistics definitions. It is
+ *     automatically included by nis.h
+ */
+
+#ifndef        _RPCSVC_NIS_TAGS_H
+#define        _RPCSVC_NIS_TAGS_H
+
+#if 0
+#pragma ident  "@(#)nis_tags.h 1.16    96/10/25"
+#endif
+/* from file: zns_tags.h       1.7 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define        NIS_DIR "data"
+
+/* Lookup and List function flags */
+#define        FOLLOW_LINKS    (1<<0)  /* Follow link objects                  */
+#define        FOLLOW_PATH     (1<<1)  /* Follow the path in a table           */
+#define        HARD_LOOKUP     (1<<2)  /* Block until successful               */
+#define        ALL_RESULTS     (1<<3)  /* Retrieve all results                 */
+#define        NO_CACHE        (1<<4)  /* Do not return 'cached' results       */
+#define        MASTER_ONLY     (1<<5)  /* Get value only from master server    */
+#define        EXPAND_NAME     (1<<6)  /* Expand partitially qualified names   */
+
+/* Semantic modification for table operations flags */
+#define        RETURN_RESULT   (1<<7)  /* Return resulting object to client    */
+#define        ADD_OVERWRITE   (1<<8)  /* Allow overwrites on ADD              */
+#define        REM_MULTIPLE    (1<<9)  /* Allow wildcard deletes               */
+#define        MOD_SAMEOBJ     (1<<10) /* Check modified object before write   */
+#define        ADD_RESERVED    (1<<11) /* Spare ADD semantic                   */
+#define        REM_RESERVED    (1<<12) /* Spare REM semantic                   */
+#define        MOD_EXCLUSIVE   (1<<13) /* Modify no overwrite on modified keys */
+
+/* Lookup and List function flags (continued) */
+#define        SOFT_LOOKUP     (1<<14) /* The "old default" return on failure  */
+
+/* Transport specific modifications to the operation */
+#define        USE_DGRAM       (1<<16) /* Use a datagram transport             */
+#define        NO_AUTHINFO     (1<<17) /* Don't bother attaching auth info     */
+
+/*
+ * Declarations for "standard" NIS+ tags
+ * State variable tags have values     0 - 2047
+ * Statistic tags have values          2048 - 65535
+ * User Tags have values               >2^16
+ */
+#define        TAG_DEBUG       1       /* set debug level              */
+#define        TAG_STATS       2       /* Enable/disable statistics    */
+#define        TAG_GCACHE      3       /* Flush the Group Cache        */
+#define        TAG_GCACHE_ALL  TAG_GCACHE
+#define        TAG_DCACHE      4       /* Flush the directory cache    */
+#define        TAG_DCACHE_ONE  TAG_DCACHE
+#define        TAG_OCACHE      5       /* Flush the Object Cache       */
+#define        TAG_SECURE      6       /* Set the security level       */
+#define        TAG_TCACHE_ONE  7       /* Flush the table cache        */
+#define        TAG_DCACHE_ALL  8       /* Flush entire directory cache */
+#define        TAG_TCACHE_ALL  9       /* Flush entire table cache     */
+#define        TAG_GCACHE_ONE  10      /* Flush one group object       */
+#define        TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO   */
+#define        TAG_READONLY    12      /* Set read only mode           */
+#define        TAG_READWRITE   14      /* Reset read-write mode        */
+
+#define        TAG_OPSTATS     2048    /* NIS+ operations statistics   */
+#define        TAG_THREADS     2049    /* Child process/thread status  */
+#define        TAG_HEAP        2050    /* Heap usage statistics        */
+#define        TAG_UPDATES     2051    /* Updates to this service      */
+#define        TAG_VISIBLE     2052    /* First update that isn't replicated */
+#define        TAG_S_DCACHE    2053    /* Directory cache statistics   */
+#define        TAG_S_OCACHE    2054    /* Object cache statistics      */
+#define        TAG_S_GCACHE    2055    /* Group cache statistics       */
+#define        TAG_S_STORAGE   2056    /* Group cache statistics       */
+#define        TAG_UPTIME      2057    /* Time that server has been up */
+#define        TAG_DIRLIST     2058    /* Dir served by this server    */
+#define        TAG_NISCOMPAT   2059    /* Whether supports NIS compat mode */
+#define        TAG_DNSFORWARDING 2060  /* Whether DNS forwarding supported */
+#define        TAG_SECURITY_LEVEL 2061 /* Security level of the server */
+#define        TAG_ROOTSERVER  2062    /* Whether root server          */
+
+/*
+ * Declarations for the Group object flags. Currently
+ * there are only 3.
+ */
+#define        IMPMEM_GROUPS  1        /* Implicit Membership allowed  */
+#define        RECURS_GROUPS  2        /* Recursive Groups allowed     */
+#define        NEGMEM_GROUPS  4        /* Negative Groups allowed      */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RPCSVC_NIS_TAGS_H */
diff --git a/lib/libdss-include/include/rpcsvc/nislib.h b/lib/libdss-include/include/rpcsvc/nislib.h
new file mode 100644 (file)
index 0000000..21a8e48
--- /dev/null
@@ -0,0 +1,286 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        __RPCSVC_NISLIB_H__
+#define        __RPCSVC_NISLIB_H__
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+typedef const char *const_nis_name;
+
+/* nis_names: These functions are used to locate and manipulate all NIS+
+ * objects except the NIS+ entry objects.
+ *
+ * nis_lookup (name, flags) resolves a NIS+ name and returns a copy of
+ *                          that object  from a NIS+ server.
+ *    const nis_name name: name of the object to be resolved
+ *    unsigned int flags: logically ORing zero or more flags (FOLLOW_LINKS,
+ *                          HARD_LOOKUP, [NO_CACHE], MASTER_ONLY, EXPAND_NAME)
+ *
+ * nis_add (name, obj) adds objects to the NIS+ namespace.
+ *    const nis_name name: fully qualified NIS+ name.
+ *    const nis_object *obj: object members zo_name and zo_domain will be
+ *                           constructed from name.
+ *
+ * nis_remove (name, obj) removes objects from the NIS+ namespace.
+ *    const nis_name name: fully qualified NIS+ name.
+ *    const nis_object *obj: if not NULL, it is assumed to point to a copy
+ *                           of the object being removed. In this case, if
+ *                           the object on the server does not have the same
+ *                           object identifier as the  object  being  passed,
+ *                           the operation will fail with the NIS_NOTSAMEOBJ
+ *                           error.
+ *
+ * nis_modify (name, obj) can change specific attributes of an object
+ *                        that already exists in the namespace.
+ */
+extern nis_result *nis_lookup (const_nis_name name, unsigned int flags)
+     __THROW;
+extern nis_result *nis_add (const_nis_name name, const nis_object *obj)
+     __THROW;
+extern nis_result *nis_remove (const_nis_name name,
+                              const nis_object *obj) __THROW;
+extern nis_result *nis_modify (const_nis_name name,
+                              const nis_object *obj) __THROW;
+
+/* nis_tables: These functions are used to search and modify NIS+ tables.
+ *
+ * nis_list (table_name, flags, callback(table_name, obj, userdata), userdata)
+ *           search a table in the NIS+ namespace.
+ *    const nis_name table_name: indexed name ([xx=yy],table.dir)
+ *    unsigned int flags: logically ORing one or more flags (FOLLOW_LINKS,
+ *                      [FOLLOW_PATH], HARD_LOOKUP, [ALL_RESULTS], [NO_CACHE],
+ *                      MASTER_ONLY, EXPAND_NAME, RETURN_RESULT)
+ *    callback(): callback is an optional pointer to a function that will
+ *                process the ENTRY type objects that are returned from the
+ *                search. If this pointer is NULL, then all entries that match
+ *                the search criteria are returned in the nis_result structure,
+ *                otherwise  this  function  will  be  called once for each
+ *                entry returned.
+ *    void *userdata: passed to callback function along with the returned
+ *                    entry object.
+ *
+ * nis_add_entry (table_name, obj, flags) will add the NIS+ object to the
+ *                                        NIS+ table_name.
+ *    const nis_name table_name
+ *    const nis_object *obj
+ *    unsigned int flags: 0, ADD_OVERWRITE, RETURN_RESULT
+ *
+ * nis_modify_entry (name, obj, flags) modifies an object identified by name.
+ *    const nis_name name: object identifier
+ *    const nis_object *obj: should point to an entry with the EN_MODIFIED
+ *                           flag set in each column that contains new
+ *                           information.
+ *    unsigned int flags: 0, MOD_SAMEOBJ, RETURN_RESULT
+ *
+ * nis_remove_entry (table_name, obj, flags) removes a set of entries
+ *                                 identified by table_name from the table.
+ *    const nis_name table_name: indexed NIS+ name
+ *    const nis_object *obj: if obj is non-null, it is presumed to point to
+ *                           a cached copy of the entry. When the removal is
+ *                           attempted, and the object that would be removed
+ *                           is not the same as the cached object pointed to
+ *                           by object then the operation will fail with an
+ *                           NIS_NOTSAMEOBJ error
+ *    unsigned int flags: 0, REM_MULTIPLE
+ *
+ * nis_first_entry (table_name) fetches entries from a table one at a time.
+ *    const nis_name table_name
+ *
+ * nis_next_entry (table_name, cookie) retrieves the "next" entry from a
+ *                                     table specified by table_name.
+ *    const nis_name table_name:
+ *    const netobj *cookie: The value of cookie from the nis_result structure
+ *                          form the previous call.
+ */
+extern nis_result *nis_list (const_nis_name __name, unsigned int __flags,
+                            int (*__callback)(const_nis_name __table_name,
+                                              const nis_object *__obj,
+                                              const void *__userdata),
+                            const void *__userdata) __THROW;
+extern nis_result *nis_add_entry (const_nis_name __table_name,
+                                 const nis_object *__obj,
+                                 unsigned int __flags) __THROW;
+extern nis_result *nis_modify_entry (const_nis_name __name,
+                                    const nis_object *__obj,
+                                    unsigned int __flags) __THROW;
+extern nis_result *nis_remove_entry (const_nis_name __table_name,
+                                    const nis_object *__obj,
+                                    unsigned int __flags) __THROW;
+extern nis_result *nis_first_entry (const_nis_name __table_name) __THROW;
+extern nis_result *nis_next_entry (const_nis_name __table_name,
+                                  const netobj *__cookie) __THROW;
+/*
+** nis_server
+*/
+extern nis_error nis_mkdir (const_nis_name __dirname,
+                           const nis_server *__machine) __THROW;
+extern nis_error nis_rmdir (const_nis_name __dirname,
+                           const nis_server *__machine) __THROW;
+extern nis_error nis_servstate (const nis_server *__machine,
+                               const nis_tag *__tags, int __numtags,
+                               nis_tag **__result) __THROW;
+extern nis_error nis_stats (const nis_server *__machine,
+                           const nis_tag *__tags, int __numtags,
+                           nis_tag **__result) __THROW;
+extern void nis_freetags (nis_tag *__tags, int __numtags) __THROW;
+extern nis_server **nis_getservlist (const_nis_name __dirname) __THROW;
+extern void nis_freeservlist (nis_server **__machines) __THROW;
+
+/*
+** nis_subr
+*/
+extern nis_name nis_leaf_of (const_nis_name __name) __THROW;
+extern nis_name nis_leaf_of_r (const_nis_name __name, char *__buffer,
+                              size_t __buflen) __THROW;
+extern nis_name nis_name_of (const_nis_name __name) __THROW;
+extern nis_name nis_name_of_r (const_nis_name __name, char *__buffer,
+                              size_t __buflen) __THROW;
+extern nis_name nis_domain_of (const_nis_name __name) __THROW;
+extern nis_name nis_domain_of_r (const_nis_name __name, char *__buffer,
+                                size_t __buflen) __THROW;
+extern nis_name *nis_getnames (const_nis_name __name) __THROW;
+extern void nis_freenames (nis_name *__namelist) __THROW;
+extern name_pos nis_dir_cmp (const_nis_name __n1, const_nis_name __n2) __THROW;
+extern nis_object *nis_clone_object (const nis_object *__src,
+                                    nis_object *__dest) __THROW;
+extern void nis_destroy_object (nis_object *__obj) __THROW;
+extern void nis_print_object (const nis_object *__obj) __THROW;
+
+/*
+** nis_local_names
+*/
+extern nis_name nis_local_group (void) __THROW;
+extern nis_name nis_local_directory (void) __THROW;
+extern nis_name nis_local_principal (void) __THROW;
+extern nis_name nis_local_host (void) __THROW;
+
+/*
+** nis_error
+*/
+extern const char *nis_sperrno (const nis_error __status) __THROW;
+extern void nis_perror (const nis_error __status, const char *__label) __THROW;
+extern void nis_lerror (const nis_error __status, const char *__label) __THROW;
+extern char *nis_sperror (const nis_error status, const char *__label) __THROW;
+extern char *nis_sperror_r (const nis_error __status, const char *__label,
+                           char *__buffer, size_t __buflen) __THROW;
+/*
+** nis_groups
+*/
+extern bool_t nis_ismember (const_nis_name __principal,
+                           const_nis_name __group) __THROW;
+extern nis_error nis_addmember (const_nis_name __member,
+                               const_nis_name __group) __THROW;
+extern nis_error nis_removemember (const_nis_name __member,
+                                  const_nis_name __group) __THROW;
+extern nis_error nis_creategroup (const_nis_name __group,
+                                 unsigned int __flags) __THROW;
+extern nis_error nis_destroygroup (const_nis_name __group) __THROW;
+extern void nis_print_group_entry (const_nis_name __group) __THROW;
+extern nis_error nis_verifygroup (const_nis_name __group) __THROW;
+
+/*
+** nis_ping
+*/
+extern void nis_ping (const_nis_name __dirname, uint32_t __utime,
+                     const nis_object *__dirobj) __THROW;
+extern nis_result *nis_checkpoint (const_nis_name __dirname) __THROW;
+
+/*
+** nis_print (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern void nis_print_result (const nis_result *__result) __THROW;
+extern void nis_print_rights (unsigned int __rights) __THROW;
+extern void nis_print_directory (const directory_obj *__dirobj) __THROW;
+extern void nis_print_group (const group_obj *__grpobj) __THROW;
+extern void nis_print_table (const table_obj *__tblobj) __THROW;
+extern void nis_print_link (const link_obj *__lnkobj) __THROW;
+extern void nis_print_entry (const entry_obj *__enobj) __THROW;
+
+/*
+** nis_file (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern directory_obj *readColdStartFile (void) __THROW;
+extern bool_t writeColdStartFile (const directory_obj *__dirobj) __THROW;
+extern nis_object *nis_read_obj (const char *__obj) __THROW;
+extern bool_t nis_write_obj (const char *__file, const nis_object *__obj) __THROW;
+
+/*
+** nis_clone - (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern directory_obj *nis_clone_directory (const directory_obj *__src,
+                                          directory_obj *__dest) __THROW;
+extern nis_result *nis_clone_result (const nis_result *__src,
+                                    nis_result *__dest) __THROW;
+
+/* nis_free - nis_freeresult */
+extern void nis_freeresult (nis_result *__result) __THROW;
+/* (XXX THE FOLLOWING ARE INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
+extern void nis_free_request (ib_request *__req) __THROW;
+extern void nis_free_directory (directory_obj *__dirobj) __THROW;
+extern void nis_free_object (nis_object *__obj) __THROW;
+
+/* (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
+extern nis_name __nis_default_owner (char *) __THROW;
+extern nis_name __nis_default_group (char *) __THROW;
+extern uint32_t __nis_default_ttl (char *) __THROW;
+extern unsigned int __nis_default_access (char *, unsigned int) __THROW;
+extern fd_result *__nis_finddirectory (directory_obj *, const_nis_name) __THROW;
+extern void __free_fdresult (fd_result *) __THROW;
+extern uint32_t __nis_hash (const void *__keyarg, size_t __len) __THROW;
+
+/* NIS+ cache locking */
+extern int __nis_lock_cache (void) __THROW;
+extern int __nis_unlock_cache (void) __THROW;
+
+/* (XXX INTERNAL FUNCTIONS, ONLY FOR rpc.nisd AND glibc !!) */
+#if defined (NIS_INTERNAL) || defined (_LIBC)
+
+struct dir_binding
+{
+  CLIENT *clnt;                  /* RPC CLIENT handle */
+  nis_server *server_val;        /* List of servers */
+  unsigned int server_len;       /* # of servers */
+  unsigned int server_used;      /* Which server we are bind in the moment ? */
+  unsigned int current_ep;       /* Which endpoint of the server are in use? */
+  unsigned int trys;             /* How many server have we tried ? */
+  unsigned int class;            /* From which class is server_val ? */
+  bool_t master_only;            /* Is only binded to the master */
+  bool_t use_auth;               /* Do we use AUTH ? */
+  bool_t use_udp;                /* Do we use UDP ? */
+  struct sockaddr_in addr;       /* Server's IP address */
+  int socket;                    /* Server's local socket */
+};
+typedef struct dir_binding dir_binding;
+
+extern nis_error __nisbind_create (dir_binding *, const nis_server *,
+                                  unsigned int, unsigned int, unsigned int,
+                                  unsigned int) __THROW;
+extern nis_error __nisbind_connect (dir_binding *) __THROW;
+extern nis_error __nisbind_next (dir_binding *) __THROW;
+extern void __nisbind_destroy (dir_binding *) __THROW;
+extern nis_error __nisfind_server (const_nis_name, int, directory_obj **,
+                                  dir_binding *, unsigned int) __THROW;
+
+#endif
+
+__END_DECLS
+
+#endif /* __RPCSVC_NISLIB_H__ */
diff --git a/lib/libdss-include/include/rpcsvc/nlm_prot.h b/lib/libdss-include/include/rpcsvc/nlm_prot.h
new file mode 100644 (file)
index 0000000..5420a6c
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _NLM_PROT_H_RPCGEN
+#define _NLM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LM_MAXSTRLEN 1024
+#define MAXNAMELEN LM_MAXSTRLEN+1
+
+enum nlm_stats {
+       nlm_granted = 0,
+       nlm_denied = 1,
+       nlm_denied_nolocks = 2,
+       nlm_blocked = 3,
+       nlm_denied_grace_period = 4,
+};
+typedef enum nlm_stats nlm_stats;
+
+struct nlm_holder {
+       bool_t exclusive;
+       int svid;
+       netobj oh;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct nlm_holder nlm_holder;
+
+struct nlm_testrply {
+       nlm_stats stat;
+       union {
+               struct nlm_holder holder;
+       } nlm_testrply_u;
+};
+typedef struct nlm_testrply nlm_testrply;
+
+struct nlm_stat {
+       nlm_stats stat;
+};
+typedef struct nlm_stat nlm_stat;
+
+struct nlm_res {
+       netobj cookie;
+       nlm_stat stat;
+};
+typedef struct nlm_res nlm_res;
+
+struct nlm_testres {
+       netobj cookie;
+       nlm_testrply stat;
+};
+typedef struct nlm_testres nlm_testres;
+
+struct nlm_lock {
+       char *caller_name;
+       netobj fh;
+       netobj oh;
+       int svid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct nlm_lock nlm_lock;
+
+struct nlm_lockargs {
+       netobj cookie;
+       bool_t block;
+       bool_t exclusive;
+       struct nlm_lock alock;
+       bool_t reclaim;
+       int state;
+};
+typedef struct nlm_lockargs nlm_lockargs;
+
+struct nlm_cancargs {
+       netobj cookie;
+       bool_t block;
+       bool_t exclusive;
+       struct nlm_lock alock;
+};
+typedef struct nlm_cancargs nlm_cancargs;
+
+struct nlm_testargs {
+       netobj cookie;
+       bool_t exclusive;
+       struct nlm_lock alock;
+};
+typedef struct nlm_testargs nlm_testargs;
+
+struct nlm_unlockargs {
+       netobj cookie;
+       struct nlm_lock alock;
+};
+typedef struct nlm_unlockargs nlm_unlockargs;
+/*
+ * The following enums are actually bit encoded for efficient
+ * boolean algebra.... DON'T change them.....
+ */
+
+enum fsh_mode {
+       fsm_DN = 0,
+       fsm_DR = 1,
+       fsm_DW = 2,
+       fsm_DRW = 3,
+};
+typedef enum fsh_mode fsh_mode;
+
+enum fsh_access {
+       fsa_NONE = 0,
+       fsa_R = 1,
+       fsa_W = 2,
+       fsa_RW = 3,
+};
+typedef enum fsh_access fsh_access;
+
+struct nlm_share {
+       char *caller_name;
+       netobj fh;
+       netobj oh;
+       fsh_mode mode;
+       fsh_access access;
+};
+typedef struct nlm_share nlm_share;
+
+struct nlm_shareargs {
+       netobj cookie;
+       nlm_share share;
+       bool_t reclaim;
+};
+typedef struct nlm_shareargs nlm_shareargs;
+
+struct nlm_shareres {
+       netobj cookie;
+       nlm_stats stat;
+       int sequence;
+};
+typedef struct nlm_shareres nlm_shareres;
+
+struct nlm_notify {
+       char *name;
+       long state;
+};
+typedef struct nlm_notify nlm_notify;
+
+#define NLM_PROG 100021
+#define NLM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NLM_TEST 1
+extern  nlm_testres * nlm_test_1(struct nlm_testargs *, CLIENT *);
+extern  nlm_testres * nlm_test_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_LOCK 2
+extern  nlm_res * nlm_lock_1(struct nlm_lockargs *, CLIENT *);
+extern  nlm_res * nlm_lock_1_svc(struct nlm_lockargs *, struct svc_req *);
+#define NLM_CANCEL 3
+extern  nlm_res * nlm_cancel_1(struct nlm_cancargs *, CLIENT *);
+extern  nlm_res * nlm_cancel_1_svc(struct nlm_cancargs *, struct svc_req *);
+#define NLM_UNLOCK 4
+extern  nlm_res * nlm_unlock_1(struct nlm_unlockargs *, CLIENT *);
+extern  nlm_res * nlm_unlock_1_svc(struct nlm_unlockargs *, struct svc_req *);
+#define NLM_GRANTED 5
+extern  nlm_res * nlm_granted_1(struct nlm_testargs *, CLIENT *);
+extern  nlm_res * nlm_granted_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_TEST_MSG 6
+extern  void * nlm_test_msg_1(struct nlm_testargs *, CLIENT *);
+extern  void * nlm_test_msg_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_LOCK_MSG 7
+extern  void * nlm_lock_msg_1(struct nlm_lockargs *, CLIENT *);
+extern  void * nlm_lock_msg_1_svc(struct nlm_lockargs *, struct svc_req *);
+#define NLM_CANCEL_MSG 8
+extern  void * nlm_cancel_msg_1(struct nlm_cancargs *, CLIENT *);
+extern  void * nlm_cancel_msg_1_svc(struct nlm_cancargs *, struct svc_req *);
+#define NLM_UNLOCK_MSG 9
+extern  void * nlm_unlock_msg_1(struct nlm_unlockargs *, CLIENT *);
+extern  void * nlm_unlock_msg_1_svc(struct nlm_unlockargs *, struct svc_req *);
+#define NLM_GRANTED_MSG 10
+extern  void * nlm_granted_msg_1(struct nlm_testargs *, CLIENT *);
+extern  void * nlm_granted_msg_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_TEST_RES 11
+extern  void * nlm_test_res_1(nlm_testres *, CLIENT *);
+extern  void * nlm_test_res_1_svc(nlm_testres *, struct svc_req *);
+#define NLM_LOCK_RES 12
+extern  void * nlm_lock_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_lock_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_CANCEL_RES 13
+extern  void * nlm_cancel_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_cancel_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_UNLOCK_RES 14
+extern  void * nlm_unlock_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_unlock_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_GRANTED_RES 15
+extern  void * nlm_granted_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_granted_res_1_svc(nlm_res *, struct svc_req *);
+extern int nlm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NLM_TEST 1
+extern  nlm_testres * nlm_test_1();
+extern  nlm_testres * nlm_test_1_svc();
+#define NLM_LOCK 2
+extern  nlm_res * nlm_lock_1();
+extern  nlm_res * nlm_lock_1_svc();
+#define NLM_CANCEL 3
+extern  nlm_res * nlm_cancel_1();
+extern  nlm_res * nlm_cancel_1_svc();
+#define NLM_UNLOCK 4
+extern  nlm_res * nlm_unlock_1();
+extern  nlm_res * nlm_unlock_1_svc();
+#define NLM_GRANTED 5
+extern  nlm_res * nlm_granted_1();
+extern  nlm_res * nlm_granted_1_svc();
+#define NLM_TEST_MSG 6
+extern  void * nlm_test_msg_1();
+extern  void * nlm_test_msg_1_svc();
+#define NLM_LOCK_MSG 7
+extern  void * nlm_lock_msg_1();
+extern  void * nlm_lock_msg_1_svc();
+#define NLM_CANCEL_MSG 8
+extern  void * nlm_cancel_msg_1();
+extern  void * nlm_cancel_msg_1_svc();
+#define NLM_UNLOCK_MSG 9
+extern  void * nlm_unlock_msg_1();
+extern  void * nlm_unlock_msg_1_svc();
+#define NLM_GRANTED_MSG 10
+extern  void * nlm_granted_msg_1();
+extern  void * nlm_granted_msg_1_svc();
+#define NLM_TEST_RES 11
+extern  void * nlm_test_res_1();
+extern  void * nlm_test_res_1_svc();
+#define NLM_LOCK_RES 12
+extern  void * nlm_lock_res_1();
+extern  void * nlm_lock_res_1_svc();
+#define NLM_CANCEL_RES 13
+extern  void * nlm_cancel_res_1();
+extern  void * nlm_cancel_res_1_svc();
+#define NLM_UNLOCK_RES 14
+extern  void * nlm_unlock_res_1();
+extern  void * nlm_unlock_res_1_svc();
+#define NLM_GRANTED_RES 15
+extern  void * nlm_granted_res_1();
+extern  void * nlm_granted_res_1_svc();
+extern int nlm_prog_1_freeresult ();
+#endif /* K&R C */
+#define NLM_VERSX 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NLM_SHARE 20
+extern  nlm_shareres * nlm_share_3(nlm_shareargs *, CLIENT *);
+extern  nlm_shareres * nlm_share_3_svc(nlm_shareargs *, struct svc_req *);
+#define NLM_UNSHARE 21
+extern  nlm_shareres * nlm_unshare_3(nlm_shareargs *, CLIENT *);
+extern  nlm_shareres * nlm_unshare_3_svc(nlm_shareargs *, struct svc_req *);
+#define NLM_NM_LOCK 22
+extern  nlm_res * nlm_nm_lock_3(nlm_lockargs *, CLIENT *);
+extern  nlm_res * nlm_nm_lock_3_svc(nlm_lockargs *, struct svc_req *);
+#define NLM_FREE_ALL 23
+extern  void * nlm_free_all_3(nlm_notify *, CLIENT *);
+extern  void * nlm_free_all_3_svc(nlm_notify *, struct svc_req *);
+extern int nlm_prog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NLM_SHARE 20
+extern  nlm_shareres * nlm_share_3();
+extern  nlm_shareres * nlm_share_3_svc();
+#define NLM_UNSHARE 21
+extern  nlm_shareres * nlm_unshare_3();
+extern  nlm_shareres * nlm_unshare_3_svc();
+#define NLM_NM_LOCK 22
+extern  nlm_res * nlm_nm_lock_3();
+extern  nlm_res * nlm_nm_lock_3_svc();
+#define NLM_FREE_ALL 23
+extern  void * nlm_free_all_3();
+extern  void * nlm_free_all_3_svc();
+extern int nlm_prog_3_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_nlm_stats (XDR *, nlm_stats*);
+extern  bool_t xdr_nlm_holder (XDR *, nlm_holder*);
+extern  bool_t xdr_nlm_testrply (XDR *, nlm_testrply*);
+extern  bool_t xdr_nlm_stat (XDR *, nlm_stat*);
+extern  bool_t xdr_nlm_res (XDR *, nlm_res*);
+extern  bool_t xdr_nlm_testres (XDR *, nlm_testres*);
+extern  bool_t xdr_nlm_lock (XDR *, nlm_lock*);
+extern  bool_t xdr_nlm_lockargs (XDR *, nlm_lockargs*);
+extern  bool_t xdr_nlm_cancargs (XDR *, nlm_cancargs*);
+extern  bool_t xdr_nlm_testargs (XDR *, nlm_testargs*);
+extern  bool_t xdr_nlm_unlockargs (XDR *, nlm_unlockargs*);
+extern  bool_t xdr_fsh_mode (XDR *, fsh_mode*);
+extern  bool_t xdr_fsh_access (XDR *, fsh_access*);
+extern  bool_t xdr_nlm_share (XDR *, nlm_share*);
+extern  bool_t xdr_nlm_shareargs (XDR *, nlm_shareargs*);
+extern  bool_t xdr_nlm_shareres (XDR *, nlm_shareres*);
+extern  bool_t xdr_nlm_notify (XDR *, nlm_notify*);
+
+#else /* K&R C */
+extern bool_t xdr_nlm_stats ();
+extern bool_t xdr_nlm_holder ();
+extern bool_t xdr_nlm_testrply ();
+extern bool_t xdr_nlm_stat ();
+extern bool_t xdr_nlm_res ();
+extern bool_t xdr_nlm_testres ();
+extern bool_t xdr_nlm_lock ();
+extern bool_t xdr_nlm_lockargs ();
+extern bool_t xdr_nlm_cancargs ();
+extern bool_t xdr_nlm_testargs ();
+extern bool_t xdr_nlm_unlockargs ();
+extern bool_t xdr_fsh_mode ();
+extern bool_t xdr_fsh_access ();
+extern bool_t xdr_nlm_share ();
+extern bool_t xdr_nlm_shareargs ();
+extern bool_t xdr_nlm_shareres ();
+extern bool_t xdr_nlm_notify ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_NLM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/nlm_prot.x b/lib/libdss-include/include/rpcsvc/nlm_prot.x
new file mode 100644 (file)
index 0000000..81ff137
--- /dev/null
@@ -0,0 +1,203 @@
+/* @(#)nlm_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Network lock manager protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * protocol used between local lock manager and remote lock manager
+ */
+
+#ifdef RPC_HDR
+%#define LM_MAXSTRLEN  1024
+%#define MAXNAMELEN    LM_MAXSTRLEN+1
+#endif
+
+/*
+ * status of a call to the lock manager
+ */
+enum nlm_stats {
+       nlm_granted = 0,
+       nlm_denied = 1,
+       nlm_denied_nolocks = 2,
+       nlm_blocked = 3,
+       nlm_denied_grace_period = 4
+};
+
+struct nlm_holder {
+       bool exclusive;
+       int svid;
+       netobj oh;
+       unsigned l_offset;
+       unsigned l_len;
+};
+
+union nlm_testrply switch (nlm_stats stat) {
+       case nlm_denied:
+               struct nlm_holder holder;
+       default:
+               void;
+};
+
+struct nlm_stat {
+       nlm_stats stat;
+};
+
+struct nlm_res {
+       netobj cookie;
+       nlm_stat stat;
+};
+
+struct nlm_testres {
+       netobj cookie;
+       nlm_testrply stat;
+};
+
+struct nlm_lock {
+       string caller_name<LM_MAXSTRLEN>;
+       netobj fh;              /* identify a file */
+       netobj oh;              /* identify owner of a lock */
+       int svid;               /* generated from pid for svid */
+       unsigned l_offset;
+       unsigned l_len;
+};
+
+struct nlm_lockargs {
+       netobj cookie;
+       bool block;
+       bool exclusive;
+       struct nlm_lock alock;
+       bool reclaim;           /* used for recovering locks */
+       int state;              /* specify local status monitor state */
+};
+
+struct nlm_cancargs {
+       netobj cookie;
+       bool block;
+       bool exclusive;
+       struct nlm_lock alock;
+};
+
+struct nlm_testargs {
+       netobj cookie;
+       bool exclusive;
+       struct nlm_lock alock;
+};
+
+struct nlm_unlockargs {
+       netobj cookie;
+       struct nlm_lock alock;
+};
+
+
+#ifdef RPC_HDR
+%/*
+% * The following enums are actually bit encoded for efficient
+% * boolean algebra.... DON'T change them.....
+% */
+#endif
+enum   fsh_mode {
+       fsm_DN  = 0,    /* deny none */
+       fsm_DR  = 1,    /* deny read */
+       fsm_DW  = 2,    /* deny write */
+       fsm_DRW = 3     /* deny read/write */
+};
+
+enum   fsh_access {
+       fsa_NONE = 0,   /* for completeness */
+       fsa_R    = 1,   /* read only */
+       fsa_W    = 2,   /* write only */
+       fsa_RW   = 3    /* read/write */
+};
+
+struct nlm_share {
+       string caller_name<LM_MAXSTRLEN>;
+       netobj  fh;
+       netobj  oh;
+       fsh_mode        mode;
+       fsh_access      access;
+};
+
+struct nlm_shareargs {
+       netobj  cookie;
+       nlm_share       share;
+       bool    reclaim;
+};
+
+struct nlm_shareres {
+       netobj  cookie;
+       nlm_stats       stat;
+       int     sequence;
+};
+
+struct nlm_notify {
+       string name<MAXNAMELEN>;
+       long state;
+};
+
+/*
+ * Over-the-wire protocol used between the network lock managers
+ */
+
+program NLM_PROG {
+       version NLM_VERS {
+
+               nlm_testres     NLM_TEST(struct nlm_testargs) = 1;
+
+               nlm_res         NLM_LOCK(struct nlm_lockargs) = 2;
+
+               nlm_res         NLM_CANCEL(struct nlm_cancargs) = 3;
+               nlm_res         NLM_UNLOCK(struct nlm_unlockargs) =     4;
+
+               /*
+                * remote lock manager call-back to grant lock
+                */
+               nlm_res         NLM_GRANTED(struct nlm_testargs)= 5;
+               /*
+                * message passing style of requesting lock
+                */
+               void            NLM_TEST_MSG(struct nlm_testargs) = 6;
+               void            NLM_LOCK_MSG(struct nlm_lockargs) = 7;
+               void            NLM_CANCEL_MSG(struct nlm_cancargs) =8;
+               void            NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
+               void            NLM_GRANTED_MSG(struct nlm_testargs) = 10;
+               void            NLM_TEST_RES(nlm_testres) = 11;
+               void            NLM_LOCK_RES(nlm_res) = 12;
+               void            NLM_CANCEL_RES(nlm_res) = 13;
+               void            NLM_UNLOCK_RES(nlm_res) = 14;
+               void            NLM_GRANTED_RES(nlm_res) = 15;
+       } = 1;
+
+       version NLM_VERSX {
+               nlm_shareres    NLM_SHARE(nlm_shareargs) = 20;
+               nlm_shareres    NLM_UNSHARE(nlm_shareargs) = 21;
+               nlm_res         NLM_NM_LOCK(nlm_lockargs) = 22;
+               void            NLM_FREE_ALL(nlm_notify) = 23;
+       } = 3;
+
+} = 100021;
diff --git a/lib/libdss-include/include/rpcsvc/rex.h b/lib/libdss-include/include/rpcsvc/rex.h
new file mode 100644 (file)
index 0000000..3c80ce7
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _REX_H_RPCGEN
+#define _REX_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define STRINGSIZE 1024
+
+typedef char *rexstring;
+#define SIGINT 2
+#define REX_INTERACTIVE 1
+
+struct rex_start {
+       struct {
+               u_int rst_cmd_len;
+               rexstring *rst_cmd_val;
+       } rst_cmd;
+       rexstring rst_host;
+       rexstring rst_fsname;
+       rexstring rst_dirwithin;
+       struct {
+               u_int rst_env_len;
+               rexstring *rst_env_val;
+       } rst_env;
+       u_int rst_port0;
+       u_int rst_port1;
+       u_int rst_port2;
+       u_int rst_flags;
+};
+typedef struct rex_start rex_start;
+
+struct rex_result {
+       int rlt_stat;
+       rexstring rlt_message;
+};
+typedef struct rex_result rex_result;
+
+struct sgttyb {
+       u_int four;
+       char chars[4];
+       u_int flags;
+};
+typedef struct sgttyb sgttyb;
+#define B0 0
+#define B50 1
+#define B75 2
+#define B110 3
+#define B134 4
+#define B150 5
+#define B200 6
+#define B300 7
+#define B600 8
+#define B1200 9
+#define B1800 10
+#define B2400 11
+#define B4800 12
+#define B9600 13
+#define B19200 14
+#define B38400 15
+#define TANDEM 0x00000001
+#define CBREAK 0x00000002
+#define LCASE 0x00000004
+#define ECHO 0x00000008
+#define CRMOD 0x00000010
+#define RAW 0x00000020
+#define ODDP 0x00000040
+#define EVENP 0x00000080
+#define ANYP 0x000000c0
+#define NLDELAY 0x00000300
+#define NL0 0x00000000
+#define NL1 0x00000100
+#define NL2 0x00000200
+#define NL3 0x00000300
+#define TBDELAY 0x00000c00
+#define TAB0 0x00000000
+#define TAB1 0x00000400
+#define TAB2 0x00000800
+#define XTABS 0x00000c00
+#define CRDELAY 0x00003000
+#define CR0 0x00000000
+#define CR1 0x00001000
+#define CR2 0x00002000
+#define CR3 0x00003000
+#define VTDELAY 0x00004000
+#define FF0 0x00000000
+#define FF1 0x00004000
+#define BSDELAY 0x00008000
+#define BS0 0x00000000
+#define BS1 0x00008000
+#define CRTBS 0x00010000
+#define PRTERA 0x00020000
+#define CRTERA 0x00040000
+#define TILDE 0x00080000
+#define MDMBUF 0x00100000
+#define LITOUT 0x00200000
+#define TOSTOP 0x00400000
+#define FLUSHO 0x00800000
+#define NOHANG 0x01000000
+#define L001000 0x02000000
+#define CRTKIL 0x04000000
+#define PASS8 0x08000000
+#define CTLECH 0x10000000
+#define PENDIN 0x20000000
+#define DECCTQ 0x40000000
+#define NOFLSH 0x80000000
+
+struct tchars {
+       u_int six;
+       char chars[6];
+};
+typedef struct tchars tchars;
+
+struct ltchars {
+       u_int six;
+       char chars[6];
+       u_int mode;
+};
+typedef struct ltchars ltchars;
+
+struct rex_ttysize {
+       int ts_lines;
+       int ts_cols;
+};
+typedef struct rex_ttysize rex_ttysize;
+
+struct rex_ttymode {
+       sgttyb basic;
+       tchars more;
+       ltchars yetmore;
+       u_int andmore;
+};
+typedef struct rex_ttymode rex_ttymode;
+#define LCRTBS 0x0001
+#define LPRTERA 0x0002
+#define LCRTERA 0x0004
+#define LTILDE 0x0008
+#define LMDMBUF 0x0010
+#define LLITOUT 0x0020
+#define LTOSTOP 0x0040
+#define LFLUSHO 0x0080
+#define LNOHANG 0x0100
+#define LL001000 0x0200
+#define LCRTKIL 0x0400
+#define LPASS8 0x0800
+#define LCTLECH 0x1000
+#define LPENDIN 0x2000
+#define LDECCTQ 0x4000
+#define LNOFLSH 0x8000
+
+#define REXPROG 100017
+#define REXVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define REXPROC_START 1
+extern  rex_result * rexproc_start_1(rex_start *, CLIENT *);
+extern  rex_result * rexproc_start_1_svc(rex_start *, struct svc_req *);
+#define REXPROC_WAIT 2
+extern  rex_result * rexproc_wait_1(void *, CLIENT *);
+extern  rex_result * rexproc_wait_1_svc(void *, struct svc_req *);
+#define REXPROC_MODES 3
+extern  void * rexproc_modes_1(rex_ttymode *, CLIENT *);
+extern  void * rexproc_modes_1_svc(rex_ttymode *, struct svc_req *);
+#define REXPROC_WINCH 4
+extern  void * rexproc_winch_1(rex_ttysize *, CLIENT *);
+extern  void * rexproc_winch_1_svc(rex_ttysize *, struct svc_req *);
+#define REXPROC_SIGNAL 5
+extern  void * rexproc_signal_1(int *, CLIENT *);
+extern  void * rexproc_signal_1_svc(int *, struct svc_req *);
+extern int rexprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define REXPROC_START 1
+extern  rex_result * rexproc_start_1();
+extern  rex_result * rexproc_start_1_svc();
+#define REXPROC_WAIT 2
+extern  rex_result * rexproc_wait_1();
+extern  rex_result * rexproc_wait_1_svc();
+#define REXPROC_MODES 3
+extern  void * rexproc_modes_1();
+extern  void * rexproc_modes_1_svc();
+#define REXPROC_WINCH 4
+extern  void * rexproc_winch_1();
+extern  void * rexproc_winch_1_svc();
+#define REXPROC_SIGNAL 5
+extern  void * rexproc_signal_1();
+extern  void * rexproc_signal_1_svc();
+extern int rexprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rexstring (XDR *, rexstring*);
+extern  bool_t xdr_rex_start (XDR *, rex_start*);
+extern  bool_t xdr_rex_result (XDR *, rex_result*);
+extern  bool_t xdr_sgttyb (XDR *, sgttyb*);
+extern  bool_t xdr_tchars (XDR *, tchars*);
+extern  bool_t xdr_ltchars (XDR *, ltchars*);
+extern  bool_t xdr_rex_ttysize (XDR *, rex_ttysize*);
+extern  bool_t xdr_rex_ttymode (XDR *, rex_ttymode*);
+
+#else /* K&R C */
+extern bool_t xdr_rexstring ();
+extern bool_t xdr_rex_start ();
+extern bool_t xdr_rex_result ();
+extern bool_t xdr_sgttyb ();
+extern bool_t xdr_tchars ();
+extern bool_t xdr_ltchars ();
+extern bool_t xdr_rex_ttysize ();
+extern bool_t xdr_rex_ttymode ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_REX_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/rex.x b/lib/libdss-include/include/rpcsvc/rex.x
new file mode 100644 (file)
index 0000000..b5baf15
--- /dev/null
@@ -0,0 +1,229 @@
+/* @(#)rex.x   2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Remote execution (rex) protocol specification
+ */
+
+const STRINGSIZE = 1024;
+typedef string rexstring<1024>;
+
+/*
+ * values to pass to REXPROC_SIGNAL
+ */
+const SIGINT = 2;      /* interrupt */
+
+/*
+ * Values for rst_flags, below
+ */
+const REX_INTERACTIVE = 1;     /* interactive mode */
+
+struct rex_start {
+       rexstring rst_cmd<>;    /* list of command and args */
+       rexstring rst_host;     /* working directory host name */
+       rexstring rst_fsname;   /* working directory file system name */
+       rexstring rst_dirwithin;/* working directory within file system */
+       rexstring rst_env<>;    /* list of environment */
+       unsigned int rst_port0; /* port for stdin */
+       unsigned int rst_port1; /* port for stdout */
+       unsigned int rst_port2; /* port for stderr */
+       unsigned int rst_flags; /* options - see const above */
+};
+
+struct rex_result {
+       int rlt_stat;           /* integer status code */
+       rexstring rlt_message;  /* string message for human consumption */
+};
+
+
+struct sgttyb {
+       unsigned four;  /* always equals 4 */
+       opaque chars[4];
+       /* chars[0] == input speed */
+       /* chars[1] == output speed */
+       /* chars[2] == kill character */
+       /* chars[3] == erase character */
+       unsigned flags;
+};
+/* values for speeds above (baud rates)  */
+const B0  = 0;
+const B50 = 1;
+const B75 = 2;
+const B110 = 3;
+const B134 = 4;
+const B150 = 5;
+const B200 = 6;
+const B300 = 7;
+const B600 = 8;
+const B1200 = 9;
+const B1800 = 10;
+const B2400 = 11;
+const B4800 = 12;
+const B9600 = 13;
+const B19200 = 14;
+const B38400 = 15;
+
+/* values for flags above */
+const TANDEM = 0x00000001; /* send stopc on out q full */
+const CBREAK = 0x00000002; /* half-cooked mode */
+const LCASE = 0x00000004; /* simulate lower case */
+const ECHO = 0x00000008; /* echo input */
+const CRMOD = 0x00000010; /* map \r to \r\n on output */
+const RAW = 0x00000020; /* no i/o processing */
+const ODDP = 0x00000040; /* get/send odd parity */
+const EVENP = 0x00000080; /* get/send even parity */
+const ANYP = 0x000000c0; /* get any parity/send none */
+const NLDELAY = 0x00000300; /* \n delay */
+const  NL0 = 0x00000000;
+const  NL1 = 0x00000100; /* tty 37 */
+const  NL2 = 0x00000200; /* vt05 */
+const  NL3 = 0x00000300;
+const TBDELAY = 0x00000c00; /* horizontal tab delay */
+const  TAB0 = 0x00000000;
+const  TAB1 = 0x00000400; /* tty 37 */
+const  TAB2 = 0x00000800;
+const XTABS = 0x00000c00; /* expand tabs on output */
+const CRDELAY = 0x00003000; /* \r delay */
+const  CR0 = 0x00000000;
+const  CR1 = 0x00001000; /* tn 300 */
+const  CR2 = 0x00002000; /* tty 37 */
+const  CR3 = 0x00003000; /* concept 100 */
+const VTDELAY = 0x00004000; /* vertical tab delay */
+const  FF0 = 0x00000000;
+const  FF1 = 0x00004000; /* tty 37 */
+const BSDELAY = 0x00008000; /* \b delay */
+const  BS0 = 0x00000000;
+const  BS1 = 0x00008000;
+const CRTBS = 0x00010000; /* do backspacing for crt */
+const PRTERA = 0x00020000; /* \ ... / erase */
+const CRTERA = 0x00040000; /* " \b " to wipe out char */
+const TILDE = 0x00080000; /* hazeltine tilde kludge */
+const MDMBUF = 0x00100000; /* start/stop output on carrier intr */
+const LITOUT = 0x00200000; /* literal output */
+const TOSTOP = 0x00400000; /* SIGTTOU on background output */
+const FLUSHO = 0x00800000; /* flush output to terminal */
+const NOHANG = 0x01000000; /* no SIGHUP on carrier drop */
+const L001000 = 0x02000000;
+const CRTKIL = 0x04000000; /* kill line with " \b " */
+const PASS8 = 0x08000000;
+const CTLECH = 0x10000000; /* echo control chars as ^X */
+const PENDIN = 0x20000000; /* tp->t_rawq needs reread */
+const DECCTQ = 0x40000000; /* only ^Q starts after ^S */
+const NOFLSH = 0x80000000; /* no output flush on signal */
+
+struct tchars {
+       unsigned six;   /* always equals 6 */
+       opaque chars[6];
+       /* chars[0] == interrupt char */
+       /* chars[1] == quit char */
+       /* chars[2] == start output char */
+       /* chars[3] == stop output char */
+       /* chars[4] == end-of-file char */
+       /* chars[5] == input delimiter (like nl) */
+};
+
+struct ltchars {
+       unsigned six;   /* always equals 6 */
+       opaque chars[6];
+       /* chars[0] == stop process signal */
+       /* chars[1] == delayed stop process signal */
+       /* chars[2] == reprint line */
+       /* chars[3] == flush output */
+       /* chars[4] == word erase */
+       /* chars[5] == literal next character */
+       unsigned mode;
+};
+
+struct rex_ttysize {
+       int ts_lines;
+       int ts_cols;
+};
+
+struct rex_ttymode {
+    sgttyb basic;    /* standard unix tty flags */
+    tchars more; /* interrupt, kill characters, etc. */
+    ltchars yetmore; /* special Berkeley characters */
+    unsigned andmore;     /* and Berkeley modes */
+};
+
+/* values for andmore above */
+const LCRTBS = 0x0001; /* do backspacing for crt */
+const LPRTERA = 0x0002;        /* \ ... / erase */
+const LCRTERA = 0x0004;        /* " \b " to wipe out char */
+const LTILDE = 0x0008; /* hazeltine tilde kludge */
+const LMDMBUF = 0x0010;        /* start/stop output on carrier intr */
+const LLITOUT = 0x0020;        /* literal output */
+const LTOSTOP = 0x0040;        /* SIGTTOU on background output */
+const LFLUSHO = 0x0080;        /* flush output to terminal */
+const LNOHANG = 0x0100;        /* no SIGHUP on carrier drop */
+const LL001000 = 0x0200;
+const LCRTKIL = 0x0400;        /* kill line with " \b " */
+const LPASS8 = 0x0800;
+const LCTLECH = 0x1000;        /* echo control chars as ^X */
+const LPENDIN = 0x2000;        /* needs reread */
+const LDECCTQ = 0x4000;        /* only ^Q starts after ^S */
+const LNOFLSH = 0x8000;        /* no output flush on signal */
+
+program REXPROG {
+       version REXVERS {
+
+               /*
+                * Start remote execution
+                */
+               rex_result
+               REXPROC_START(rex_start) = 1;
+
+               /*
+                * Wait for remote execution to terminate
+                */
+               rex_result
+               REXPROC_WAIT(void) = 2;
+
+               /*
+                * Send tty modes
+                */
+               void
+               REXPROC_MODES(rex_ttymode) = 3;
+
+               /*
+                * Send window size change
+                */
+               void
+               REXPROC_WINCH(rex_ttysize) = 4;
+
+               /*
+                * Send other signal
+                */
+               void
+               REXPROC_SIGNAL(int) = 5;
+       } = 1;
+} = 100017;
diff --git a/lib/libdss-include/include/rpcsvc/rquota.h b/lib/libdss-include/include/rpcsvc/rquota.h
new file mode 100644 (file)
index 0000000..b506460
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RQUOTA_H_RPCGEN
+#define _RQUOTA_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RQ_PATHLEN 1024
+
+struct getquota_args {
+       char *gqa_pathp;
+       int gqa_uid;
+};
+typedef struct getquota_args getquota_args;
+
+struct rquota {
+       int rq_bsize;
+       bool_t rq_active;
+       u_int rq_bhardlimit;
+       u_int rq_bsoftlimit;
+       u_int rq_curblocks;
+       u_int rq_fhardlimit;
+       u_int rq_fsoftlimit;
+       u_int rq_curfiles;
+       u_int rq_btimeleft;
+       u_int rq_ftimeleft;
+};
+typedef struct rquota rquota;
+
+enum gqr_status {
+       Q_OK = 1,
+       Q_NOQUOTA = 2,
+       Q_EPERM = 3,
+};
+typedef enum gqr_status gqr_status;
+
+struct getquota_rslt {
+       gqr_status status;
+       union {
+               rquota gqr_rquota;
+       } getquota_rslt_u;
+};
+typedef struct getquota_rslt getquota_rslt;
+
+#define RQUOTAPROG 100011
+#define RQUOTAVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RQUOTAPROC_GETQUOTA 1
+extern  getquota_rslt * rquotaproc_getquota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getquota_1_svc(getquota_args *, struct svc_req *);
+#define RQUOTAPROC_GETACTIVEQUOTA 2
+extern  getquota_rslt * rquotaproc_getactivequota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc(getquota_args *, struct svc_req *);
+extern int rquotaprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RQUOTAPROC_GETQUOTA 1
+extern  getquota_rslt * rquotaproc_getquota_1();
+extern  getquota_rslt * rquotaproc_getquota_1_svc();
+#define RQUOTAPROC_GETACTIVEQUOTA 2
+extern  getquota_rslt * rquotaproc_getactivequota_1();
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc();
+extern int rquotaprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_getquota_args (XDR *, getquota_args*);
+extern  bool_t xdr_rquota (XDR *, rquota*);
+extern  bool_t xdr_gqr_status (XDR *, gqr_status*);
+extern  bool_t xdr_getquota_rslt (XDR *, getquota_rslt*);
+
+#else /* K&R C */
+extern bool_t xdr_getquota_args ();
+extern bool_t xdr_rquota ();
+extern bool_t xdr_gqr_status ();
+extern bool_t xdr_getquota_rslt ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RQUOTA_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/rquota.x b/lib/libdss-include/include/rpcsvc/rquota.x
new file mode 100644 (file)
index 0000000..c457524
--- /dev/null
@@ -0,0 +1,61 @@
+/* @(#)rquota.x        2.1 88/08/01 4.0 RPCSRC */
+/* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */
+
+/*
+ * Remote quota protocol
+ * Requires unix authentication
+ */
+
+const RQ_PATHLEN = 1024;
+
+struct getquota_args {
+       string gqa_pathp<RQ_PATHLEN>;   /* path to filesystem of interest */
+       int gqa_uid;                    /* inquire about quota for uid */
+};
+
+/*
+ * remote quota structure
+ */
+struct rquota {
+       int rq_bsize;                   /* block size for block counts */
+       bool rq_active;                 /* indicates whether quota is active */
+       unsigned int rq_bhardlimit;     /* absolute limit on disk blks alloc */
+       unsigned int rq_bsoftlimit;     /* preferred limit on disk blks */
+       unsigned int rq_curblocks;      /* current block count */
+       unsigned int rq_fhardlimit;     /* absolute limit on allocated files */
+       unsigned int rq_fsoftlimit;     /* preferred file limit */
+       unsigned int rq_curfiles;       /* current # allocated files */
+       unsigned int rq_btimeleft;      /* time left for excessive disk use */
+       unsigned int rq_ftimeleft;      /* time left for excessive files */
+};
+
+enum gqr_status {
+       Q_OK = 1,               /* quota returned */
+       Q_NOQUOTA = 2,          /* noquota for uid */
+       Q_EPERM = 3             /* no permission to access quota */
+};
+
+union getquota_rslt switch (gqr_status status) {
+case Q_OK:
+       rquota gqr_rquota;      /* valid if status == Q_OK */
+case Q_NOQUOTA:
+       void;
+case Q_EPERM:
+       void;
+};
+
+program RQUOTAPROG {
+       version RQUOTAVERS {
+               /*
+                * Get all quotas
+                */
+               getquota_rslt
+               RQUOTAPROC_GETQUOTA(getquota_args) = 1;
+
+               /*
+                * Get active quotas only
+                */
+               getquota_rslt
+               RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
+       } = 1;
+} = 100011;
diff --git a/lib/libdss-include/include/rpcsvc/rstat.h b/lib/libdss-include/include/rpcsvc/rstat.h
new file mode 100644 (file)
index 0000000..abc0ba8
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RSTAT_H_RPCGEN
+#define _RSTAT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef FSCALE
+/*
+ * Scale factor for scaled integers used to count load averages.
+ */
+#define FSHIFT 8 /* bits to right of fixed binary point */
+#define FSCALE (1<<FSHIFT)
+
+#endif /* ndef FSCALE */
+#define CPUSTATES 4
+#define DK_NDRIVE 4
+
+struct rstat_timeval {
+       u_int tv_sec;
+       u_int tv_usec;
+};
+typedef struct rstat_timeval rstat_timeval;
+
+struct statstime {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       u_int v_swtch;
+       int avenrun[3];
+       rstat_timeval boottime;
+       rstat_timeval curtime;
+       int if_opackets;
+};
+typedef struct statstime statstime;
+
+struct statsswtch {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       u_int v_swtch;
+       u_int avenrun[3];
+       rstat_timeval boottime;
+       int if_opackets;
+};
+typedef struct statsswtch statsswtch;
+
+struct stats {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       int if_opackets;
+};
+typedef struct stats stats;
+
+#define RSTATPROG 100001
+#define RSTATVERS_TIME 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RSTATPROC_STATS 1
+extern  statstime * rstatproc_stats_3(void *, CLIENT *);
+extern  statstime * rstatproc_stats_3_svc(void *, struct svc_req *);
+#define RSTATPROC_HAVEDISK 2
+extern  u_int * rstatproc_havedisk_3(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_3_svc(void *, struct svc_req *);
+extern int rstatprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RSTATPROC_STATS 1
+extern  statstime * rstatproc_stats_3();
+extern  statstime * rstatproc_stats_3_svc();
+#define RSTATPROC_HAVEDISK 2
+extern  u_int * rstatproc_havedisk_3();
+extern  u_int * rstatproc_havedisk_3_svc();
+extern int rstatprog_3_freeresult ();
+#endif /* K&R C */
+#define RSTATVERS_SWTCH 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  statsswtch * rstatproc_stats_2(void *, CLIENT *);
+extern  statsswtch * rstatproc_stats_2_svc(void *, struct svc_req *);
+extern  u_int * rstatproc_havedisk_2(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_2_svc(void *, struct svc_req *);
+extern int rstatprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  statsswtch * rstatproc_stats_2();
+extern  statsswtch * rstatproc_stats_2_svc();
+extern  u_int * rstatproc_havedisk_2();
+extern  u_int * rstatproc_havedisk_2_svc();
+extern int rstatprog_2_freeresult ();
+#endif /* K&R C */
+#define RSTATVERS_ORIG 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  stats * rstatproc_stats_1(void *, CLIENT *);
+extern  stats * rstatproc_stats_1_svc(void *, struct svc_req *);
+extern  u_int * rstatproc_havedisk_1(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_1_svc(void *, struct svc_req *);
+extern int rstatprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  stats * rstatproc_stats_1();
+extern  stats * rstatproc_stats_1_svc();
+extern  u_int * rstatproc_havedisk_1();
+extern  u_int * rstatproc_havedisk_1_svc();
+extern int rstatprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rstat_timeval (XDR *, rstat_timeval*);
+extern  bool_t xdr_statstime (XDR *, statstime*);
+extern  bool_t xdr_statsswtch (XDR *, statsswtch*);
+extern  bool_t xdr_stats (XDR *, stats*);
+
+#else /* K&R C */
+extern bool_t xdr_rstat_timeval ();
+extern bool_t xdr_statstime ();
+extern bool_t xdr_statsswtch ();
+extern bool_t xdr_stats ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RSTAT_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/rstat.x b/lib/libdss-include/include/rpcsvc/rstat.x
new file mode 100644 (file)
index 0000000..9b7b102
--- /dev/null
@@ -0,0 +1,145 @@
+/* @(#)rstat.x 2.2 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Gather statistics on remote machines
+ */
+
+#ifdef RPC_HDR
+
+%#ifndef FSCALE
+%/*
+% * Scale factor for scaled integers used to count load averages.
+% */
+%#define FSHIFT  8               /* bits to right of fixed binary point */
+%#define FSCALE  (1<<FSHIFT)
+%
+%#endif /* ndef FSCALE */
+
+#endif /* def RPC_HDR */
+
+const CPUSTATES = 4;
+const DK_NDRIVE = 4;
+
+/*
+ * GMT since 0:00, January 1, 1970
+ */
+struct rstat_timeval {
+       unsigned int tv_sec;    /* seconds */
+       unsigned int tv_usec;   /* and microseconds */
+};
+
+struct statstime {                             /* RSTATVERS_TIME */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       unsigned int v_swtch;
+       int avenrun[3];         /* scaled by FSCALE */
+       rstat_timeval boottime;
+       rstat_timeval curtime;
+       int if_opackets;
+};
+
+struct statsswtch {                    /* RSTATVERS_SWTCH */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       unsigned int v_swtch;
+       unsigned int avenrun[3];/* scaled by FSCALE */
+       rstat_timeval boottime;
+       int if_opackets;
+};
+
+struct stats {                         /* RSTATVERS_ORIG */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       int if_opackets;
+};
+
+
+program RSTATPROG {
+       /*
+        * Newest version includes current time and context switching info
+        */
+       version RSTATVERS_TIME {
+               statstime
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 3;
+       /*
+        * Does not have current time
+        */
+       version RSTATVERS_SWTCH {
+               statsswtch
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 2;
+       /*
+        * Old version has no info about current time or context switching
+        */
+       version RSTATVERS_ORIG {
+               stats
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 1;
+} = 100001;
diff --git a/lib/libdss-include/include/rpcsvc/rusers.h b/lib/libdss-include/include/rpcsvc/rusers.h
new file mode 100644 (file)
index 0000000..dc2d3b0
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RUSERS_H_RPCGEN
+#define _RUSERS_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Find out about remote users
+ */
+#define RUSERS_MAXUSERLEN 32
+#define RUSERS_MAXLINELEN 32
+#define RUSERS_MAXHOSTLEN 257
+
+struct rusers_utmp {
+       char *ut_user;
+       char *ut_line;
+       char *ut_host;
+       int ut_type;
+       int ut_time;
+       u_int ut_idle;
+};
+typedef struct rusers_utmp rusers_utmp;
+
+typedef struct {
+       u_int utmp_array_len;
+       rusers_utmp *utmp_array_val;
+} utmp_array;
+
+/*
+ * Values for ut_type field above.
+ */
+#define RUSERS_EMPTY 0
+#define RUSERS_RUN_LVL 1
+#define RUSERS_BOOT_TIME 2
+#define RUSERS_OLD_TIME 3
+#define RUSERS_NEW_TIME 4
+#define RUSERS_INIT_PROCESS 5
+#define RUSERS_LOGIN_PROCESS 6
+#define RUSERS_USER_PROCESS 7
+#define RUSERS_DEAD_PROCESS 8
+#define RUSERS_ACCOUNTING 9
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rpc/xdr.h>
+
+/*
+ * The following structures are used by version 2 of the rusersd protocol.
+ * They were not developed with rpcgen, so they do not appear as RPCL.
+ */
+
+#define RUSERSVERS_IDLE 2
+#define RUSERSVERS 3 /* current version */
+#define MAXUSERS 100
+
+/*
+ * This is the structure used in version 2 of the rusersd RPC service.
+ * It corresponds to the utmp structure for BSD systems.
+ */
+struct ru_utmp {
+ char ut_line[8]; /* tty name */
+ char ut_name[8]; /* user id */
+ char ut_host[16]; /* host name, if remote */
+ long int ut_time; /* time on */
+};
+
+struct utmparr {
+ struct ru_utmp **uta_arr;
+ int uta_cnt;
+};
+typedef struct utmparr utmparr;
+
+extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW;
+
+struct utmpidle {
+ struct ru_utmp ui_utmp;
+ unsigned int ui_idle;
+};
+
+struct utmpidlearr {
+ struct utmpidle **uia_arr;
+ int uia_cnt;
+};
+
+extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW;
+
+#ifdef __cplusplus
+}
+#endif
+
+#define RUSERSPROG 100002
+#define RUSERSVERS_3 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RUSERSPROC_NUM 1
+extern  int * rusersproc_num_3(void *, CLIENT *);
+extern  int * rusersproc_num_3_svc(void *, struct svc_req *);
+#define RUSERSPROC_NAMES 2
+extern  utmp_array * rusersproc_names_3(void *, CLIENT *);
+extern  utmp_array * rusersproc_names_3_svc(void *, struct svc_req *);
+#define RUSERSPROC_ALLNAMES 3
+extern  utmp_array * rusersproc_allnames_3(void *, CLIENT *);
+extern  utmp_array * rusersproc_allnames_3_svc(void *, struct svc_req *);
+extern int rusersprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RUSERSPROC_NUM 1
+extern  int * rusersproc_num_3();
+extern  int * rusersproc_num_3_svc();
+#define RUSERSPROC_NAMES 2
+extern  utmp_array * rusersproc_names_3();
+extern  utmp_array * rusersproc_names_3_svc();
+#define RUSERSPROC_ALLNAMES 3
+extern  utmp_array * rusersproc_allnames_3();
+extern  utmp_array * rusersproc_allnames_3_svc();
+extern int rusersprog_3_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rusers_utmp (XDR *, rusers_utmp*);
+extern  bool_t xdr_utmp_array (XDR *, utmp_array*);
+
+#else /* K&R C */
+extern bool_t xdr_rusers_utmp ();
+extern bool_t xdr_utmp_array ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RUSERS_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/rusers.x b/lib/libdss-include/include/rpcsvc/rusers.x
new file mode 100644 (file)
index 0000000..5bbfe97
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+%/*
+% * Find out about remote users
+% */
+
+const RUSERS_MAXUSERLEN = 32;
+const RUSERS_MAXLINELEN = 32;
+const RUSERS_MAXHOSTLEN = 257;
+
+struct rusers_utmp {
+       string ut_user<RUSERS_MAXUSERLEN>;      /* aka ut_name */
+       string ut_line<RUSERS_MAXLINELEN>;      /* device */
+       string ut_host<RUSERS_MAXHOSTLEN>;      /* host user logged on from */
+       int ut_type;                            /* type of entry */
+       int ut_time;                            /* time entry was made */
+       unsigned int ut_idle;                   /* minutes idle */
+};
+
+typedef rusers_utmp utmp_array<>;
+
+#ifdef RPC_HDR
+%
+%/*
+% * Values for ut_type field above.
+% */
+#endif
+const  RUSERS_EMPTY = 0;
+const  RUSERS_RUN_LVL = 1;
+const  RUSERS_BOOT_TIME = 2;
+const  RUSERS_OLD_TIME = 3;
+const  RUSERS_NEW_TIME = 4;
+const  RUSERS_INIT_PROCESS = 5;
+const  RUSERS_LOGIN_PROCESS = 6;
+const  RUSERS_USER_PROCESS = 7;
+const  RUSERS_DEAD_PROCESS = 8;
+const  RUSERS_ACCOUNTING = 9;
+
+program RUSERSPROG {
+
+       version RUSERSVERS_3 {
+               int
+               RUSERSPROC_NUM(void) = 1;
+
+               utmp_array
+               RUSERSPROC_NAMES(void) = 2;
+
+               utmp_array
+               RUSERSPROC_ALLNAMES(void) = 3;
+       } = 3;
+
+} = 100002;
+
+#ifdef RPC_HDR
+%
+%
+%#ifdef        __cplusplus
+%extern "C" {
+%#endif
+%
+%#include <rpc/xdr.h>
+%
+%/*
+% * The following structures are used by version 2 of the rusersd protocol.
+% * They were not developed with rpcgen, so they do not appear as RPCL.
+% */
+%
+%#define       RUSERSVERS_IDLE 2
+%#define       RUSERSVERS 3            /* current version */
+%#define       MAXUSERS 100
+%
+%/*
+% * This is the structure used in version 2 of the rusersd RPC service.
+% * It corresponds to the utmp structure for BSD systems.
+% */
+%struct ru_utmp {
+%      char    ut_line[8];             /* tty name */
+%      char    ut_name[8];             /* user id */
+%      char    ut_host[16];            /* host name, if remote */
+%      long int ut_time;               /* time on */
+%};
+%
+%struct utmparr {
+%       struct ru_utmp **uta_arr;
+%       int uta_cnt;
+%};
+%typedef struct utmparr utmparr;
+%
+%extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW;
+%
+%struct utmpidle {
+%      struct ru_utmp ui_utmp;
+%      unsigned int ui_idle;
+%};
+%
+%struct utmpidlearr {
+%      struct utmpidle **uia_arr;
+%      int uia_cnt;
+%};
+%
+%extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW;
+%
+%#ifdef        __cplusplus
+%}
+%#endif
+#endif
+
+
+#ifdef RPC_XDR
+%bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp);
+%
+%bool_t
+%xdr_utmp (XDR *xdrs, struct ru_utmp *objp)
+%{
+%      /* Since the fields are char foo [xxx], we should not free them. */
+%      if (xdrs->x_op != XDR_FREE)
+%      {
+%              char *ptr;
+%              unsigned int size;
+%              ptr = objp->ut_line;
+%              size = sizeof (objp->ut_line);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%              ptr = objp->ut_name;
+%              size = sizeof (objp->ut_name);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%              ptr = objp->ut_host;
+%              size = sizeof (objp->ut_host);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%      }
+%      if (!xdr_long(xdrs, &objp->ut_time)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp);
+%
+%bool_t
+%xdr_utmpptr (XDR *xdrs, struct ru_utmp **objpp)
+%{
+%      if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
+%                         (xdrproc_t) xdr_utmp)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmparr (XDR *xdrs, struct utmparr *objp)
+%{
+%      if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
+%                     MAXUSERS, sizeof(struct ru_utmp *),
+%                     (xdrproc_t) xdr_utmpptr)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp);
+%
+%bool_t
+%xdr_utmpidle (XDR *xdrs, struct utmpidle *objp)
+%{
+%      if (!xdr_utmp(xdrs, &objp->ui_utmp)) {
+%              return (FALSE);
+%      }
+%      if (!xdr_u_int(xdrs, &objp->ui_idle)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp);
+%
+%bool_t
+%xdr_utmpidleptr (XDR *xdrs, struct utmpidle **objpp)
+%{
+%      if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
+%                         (xdrproc_t) xdr_utmpidle)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp)
+%{
+%      if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
+%                     MAXUSERS, sizeof(struct utmpidle *),
+%                     (xdrproc_t) xdr_utmpidleptr)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+#endif
diff --git a/lib/libdss-include/include/rpcsvc/sm_inter.h b/lib/libdss-include/include/rpcsvc/sm_inter.h
new file mode 100644 (file)
index 0000000..d4bc3e1
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _SM_INTER_H_RPCGEN
+#define _SM_INTER_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SM_MAXSTRLEN 1024
+
+struct sm_name {
+       char *mon_name;
+};
+typedef struct sm_name sm_name;
+
+struct my_id {
+       char *my_name;
+       int my_prog;
+       int my_vers;
+       int my_proc;
+};
+typedef struct my_id my_id;
+
+struct mon_id {
+       char *mon_name;
+       struct my_id my_id;
+};
+typedef struct mon_id mon_id;
+
+struct mon {
+       struct mon_id mon_id;
+       char priv[16];
+};
+typedef struct mon mon;
+
+struct sm_stat {
+       int state;
+};
+typedef struct sm_stat sm_stat;
+
+enum res {
+       stat_succ = 0,
+       stat_fail = 1,
+};
+typedef enum res res;
+
+struct sm_stat_res {
+       res res_stat;
+       int state;
+};
+typedef struct sm_stat_res sm_stat_res;
+
+struct status {
+       char *mon_name;
+       int state;
+       char priv[16];
+};
+typedef struct status status;
+
+#define SM_PROG 100024
+#define SM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define SM_STAT 1
+extern  struct sm_stat_res * sm_stat_1(struct sm_name *, CLIENT *);
+extern  struct sm_stat_res * sm_stat_1_svc(struct sm_name *, struct svc_req *);
+#define SM_MON 2
+extern  struct sm_stat_res * sm_mon_1(struct mon *, CLIENT *);
+extern  struct sm_stat_res * sm_mon_1_svc(struct mon *, struct svc_req *);
+#define SM_UNMON 3
+extern  struct sm_stat * sm_unmon_1(struct mon_id *, CLIENT *);
+extern  struct sm_stat * sm_unmon_1_svc(struct mon_id *, struct svc_req *);
+#define SM_UNMON_ALL 4
+extern  struct sm_stat * sm_unmon_all_1(struct my_id *, CLIENT *);
+extern  struct sm_stat * sm_unmon_all_1_svc(struct my_id *, struct svc_req *);
+#define SM_SIMU_CRASH 5
+extern  void * sm_simu_crash_1(void *, CLIENT *);
+extern  void * sm_simu_crash_1_svc(void *, struct svc_req *);
+extern int sm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define SM_STAT 1
+extern  struct sm_stat_res * sm_stat_1();
+extern  struct sm_stat_res * sm_stat_1_svc();
+#define SM_MON 2
+extern  struct sm_stat_res * sm_mon_1();
+extern  struct sm_stat_res * sm_mon_1_svc();
+#define SM_UNMON 3
+extern  struct sm_stat * sm_unmon_1();
+extern  struct sm_stat * sm_unmon_1_svc();
+#define SM_UNMON_ALL 4
+extern  struct sm_stat * sm_unmon_all_1();
+extern  struct sm_stat * sm_unmon_all_1_svc();
+#define SM_SIMU_CRASH 5
+extern  void * sm_simu_crash_1();
+extern  void * sm_simu_crash_1_svc();
+extern int sm_prog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_sm_name (XDR *, sm_name*);
+extern  bool_t xdr_my_id (XDR *, my_id*);
+extern  bool_t xdr_mon_id (XDR *, mon_id*);
+extern  bool_t xdr_mon (XDR *, mon*);
+extern  bool_t xdr_sm_stat (XDR *, sm_stat*);
+extern  bool_t xdr_res (XDR *, res*);
+extern  bool_t xdr_sm_stat_res (XDR *, sm_stat_res*);
+extern  bool_t xdr_status (XDR *, status*);
+
+#else /* K&R C */
+extern bool_t xdr_sm_name ();
+extern bool_t xdr_my_id ();
+extern bool_t xdr_mon_id ();
+extern bool_t xdr_mon ();
+extern bool_t xdr_sm_stat ();
+extern bool_t xdr_res ();
+extern bool_t xdr_sm_stat_res ();
+extern bool_t xdr_status ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_SM_INTER_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/sm_inter.x b/lib/libdss-include/include/rpcsvc/sm_inter.x
new file mode 100644 (file)
index 0000000..767f0e0
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Status monitor protocol specification
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+program SM_PROG {
+       version SM_VERS  {
+               /* res_stat = stat_succ if status monitor agrees to monitor */
+               /* res_stat = stat_fail if status monitor cannot monitor */
+               /* if res_stat == stat_succ, state = state number of site sm_name */
+               struct sm_stat_res                       SM_STAT(struct sm_name) = 1;
+
+               /* res_stat = stat_succ if status monitor agrees to monitor */
+               /* res_stat = stat_fail if status monitor cannot monitor */
+               /* stat consists of state number of local site */
+               struct sm_stat_res                       SM_MON(struct mon) = 2;
+
+               /* stat consists of state number of local site */
+               struct sm_stat                           SM_UNMON(struct mon_id) = 3;
+
+               /* stat consists of state number of local site */
+               struct sm_stat                           SM_UNMON_ALL(struct my_id) = 4;
+
+               void                                     SM_SIMU_CRASH(void) = 5;
+
+       } = 1;
+} = 100024;
+
+const  SM_MAXSTRLEN = 1024;
+
+struct sm_name {
+       string mon_name<SM_MAXSTRLEN>;
+};
+
+struct my_id {
+       string   my_name<SM_MAXSTRLEN>;         /* name of the site initiating the monitoring request*/
+       int     my_prog;                        /* rpc program # of the requesting process */
+       int     my_vers;                        /* rpc version # of the requesting process */
+       int     my_proc;                        /* rpc procedure # of the requesting process */
+};
+
+struct mon_id {
+       string  mon_name<SM_MAXSTRLEN>;         /* name of the site to be monitored */
+       struct my_id my_id;
+};
+
+
+struct mon{
+       struct mon_id mon_id;
+       opaque priv[16];                /* private information to store at monitor for requesting process */
+};
+
+
+/*
+ * state # of status monitor monotonically increases each time
+ * status of the site changes:
+ * an even number (>= 0) indicates the site is down and
+ * an odd number (> 0) indicates the site is up;
+ */
+struct sm_stat {
+       int state;              /* state # of status monitor */
+};
+
+enum res {
+       stat_succ = 0,          /* status monitor agrees to monitor */
+       stat_fail = 1           /* status monitor cannot monitor */
+};
+
+struct sm_stat_res {
+       res res_stat;
+       int state;
+};
+
+/*
+ * structure of the status message sent back by the status monitor
+ * when monitor site status changes
+ */
+struct status {
+       string mon_name<SM_MAXSTRLEN>;
+       int state;
+       opaque priv[16];                /* stored private information */
+};
diff --git a/lib/libdss-include/include/rpcsvc/spray.h b/lib/libdss-include/include/rpcsvc/spray.h
new file mode 100644 (file)
index 0000000..b19e402
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _SPRAY_H_RPCGEN
+#define _SPRAY_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SPRAYMAX 8845
+
+struct spraytimeval {
+       u_int sec;
+       u_int usec;
+};
+typedef struct spraytimeval spraytimeval;
+
+struct spraycumul {
+       u_int counter;
+       spraytimeval clock;
+};
+typedef struct spraycumul spraycumul;
+
+typedef struct {
+       u_int sprayarr_len;
+       char *sprayarr_val;
+} sprayarr;
+
+#define SPRAYPROG 100012
+#define SPRAYVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define SPRAYPROC_SPRAY 1
+extern  void * sprayproc_spray_1(sprayarr *, CLIENT *);
+extern  void * sprayproc_spray_1_svc(sprayarr *, struct svc_req *);
+#define SPRAYPROC_GET 2
+extern  spraycumul * sprayproc_get_1(void *, CLIENT *);
+extern  spraycumul * sprayproc_get_1_svc(void *, struct svc_req *);
+#define SPRAYPROC_CLEAR 3
+extern  void * sprayproc_clear_1(void *, CLIENT *);
+extern  void * sprayproc_clear_1_svc(void *, struct svc_req *);
+extern int sprayprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define SPRAYPROC_SPRAY 1
+extern  void * sprayproc_spray_1();
+extern  void * sprayproc_spray_1_svc();
+#define SPRAYPROC_GET 2
+extern  spraycumul * sprayproc_get_1();
+extern  spraycumul * sprayproc_get_1_svc();
+#define SPRAYPROC_CLEAR 3
+extern  void * sprayproc_clear_1();
+extern  void * sprayproc_clear_1_svc();
+extern int sprayprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_spraytimeval (XDR *, spraytimeval*);
+extern  bool_t xdr_spraycumul (XDR *, spraycumul*);
+extern  bool_t xdr_sprayarr (XDR *, sprayarr*);
+
+#else /* K&R C */
+extern bool_t xdr_spraytimeval ();
+extern bool_t xdr_spraycumul ();
+extern bool_t xdr_sprayarr ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_SPRAY_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/spray.x b/lib/libdss-include/include/rpcsvc/spray.x
new file mode 100644 (file)
index 0000000..68b7c48
--- /dev/null
@@ -0,0 +1,84 @@
+/* @(#)spray.x 2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Spray a server with packets
+ * Useful for testing flakiness of network interfaces
+ */
+
+const SPRAYMAX = 8845; /* max amount can spray */
+
+/*
+ * GMT since 0:00, 1 January 1970
+ */
+struct spraytimeval {
+       unsigned int sec;
+       unsigned int usec;
+};
+
+/*
+ * spray statistics
+ */
+struct spraycumul {
+       unsigned int counter;
+       spraytimeval clock;
+};
+
+/*
+ * spray data
+ */
+typedef opaque sprayarr<SPRAYMAX>;
+
+program SPRAYPROG {
+       version SPRAYVERS {
+               /*
+                * Just throw away the data and increment the counter
+                * This call never returns, so the client should always
+                * time it out.
+                */
+               void
+               SPRAYPROC_SPRAY(sprayarr) = 1;
+
+               /*
+                * Get the value of the counter and elapsed time  since
+                * last CLEAR.
+                */
+               spraycumul
+               SPRAYPROC_GET(void) = 2;
+
+               /*
+                * Clear the counter and reset the elapsed time
+                */
+               void
+               SPRAYPROC_CLEAR(void) = 3;
+       } = 1;
+} = 100012;
diff --git a/lib/libdss-include/include/rpcsvc/yp.h b/lib/libdss-include/include/rpcsvc/yp.h
new file mode 100644 (file)
index 0000000..968b74c
--- /dev/null
@@ -0,0 +1,339 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __RPCSVC_YP_H__
+#define __RPCSVC_YP_H__
+
+#include <features.h>
+#include <rpc/rpc.h>
+
+#define YPMAXRECORD 1024
+#define YPMAXDOMAIN 64
+#define YPMAXMAP 64
+#define YPMAXPEER 64
+
+enum ypstat {
+       YP_TRUE = 1,
+       YP_NOMORE = 2,
+       YP_FALSE = 0,
+       YP_NOMAP = -1,
+       YP_NODOM = -2,
+       YP_NOKEY = -3,
+       YP_BADOP = -4,
+       YP_BADDB = -5,
+       YP_YPERR = -6,
+       YP_BADARGS = -7,
+       YP_VERS = -8,
+};
+typedef enum ypstat ypstat;
+
+enum ypxfrstat {
+       YPXFR_SUCC = 1,
+       YPXFR_AGE = 2,
+       YPXFR_NOMAP = -1,
+       YPXFR_NODOM = -2,
+       YPXFR_RSRC = -3,
+       YPXFR_RPC = -4,
+       YPXFR_MADDR = -5,
+       YPXFR_YPERR = -6,
+       YPXFR_BADARGS = -7,
+       YPXFR_DBM = -8,
+       YPXFR_FILE = -9,
+       YPXFR_SKEW = -10,
+       YPXFR_CLEAR = -11,
+       YPXFR_FORCE = -12,
+       YPXFR_XFRERR = -13,
+       YPXFR_REFUSED = -14,
+};
+typedef enum ypxfrstat ypxfrstat;
+
+typedef char *domainname;
+typedef char *mapname;
+typedef char *peername;
+
+typedef struct {
+  u_int keydat_len;
+  char *keydat_val;
+} keydat;
+
+typedef struct {
+  u_int valdat_len;
+  char *valdat_val;
+} valdat;
+
+struct ypmap_parms {
+  domainname domain;
+  mapname map;
+  u_int ordernum;
+  peername peer;
+};
+typedef struct ypmap_parms ypmap_parms;
+
+struct ypreq_key {
+  domainname domain;
+  mapname map;
+  keydat key;
+};
+typedef struct ypreq_key ypreq_key;
+
+struct ypreq_nokey {
+  domainname domain;
+  mapname map;
+};
+typedef struct ypreq_nokey ypreq_nokey;
+
+struct ypreq_xfr {
+  ypmap_parms map_parms;
+  u_int transid;
+  u_int prog;
+  u_int port;
+};
+typedef struct ypreq_xfr ypreq_xfr;
+
+struct ypresp_val {
+  ypstat stat;
+  valdat val;
+};
+typedef struct ypresp_val ypresp_val;
+
+struct ypresp_key_val {
+  ypstat stat;
+#ifdef STUPID_SUN_BUG
+  /* This is the form as distributed by Sun.  But even the Sun NIS
+     servers expect the values in the other order.  So their
+     implementation somehow must change the order internally.  We
+     don't want to follow this bad example since the user should be
+     able to use rpcgen on this file.  */
+  keydat key;
+  valdat val;
+#else
+  valdat val;
+  keydat key;
+#endif
+};
+typedef struct ypresp_key_val ypresp_key_val;
+
+struct ypresp_master {
+  ypstat stat;
+  peername peer;
+};
+typedef struct ypresp_master ypresp_master;
+
+struct ypresp_order {
+  ypstat stat;
+  u_int ordernum;
+};
+typedef struct ypresp_order ypresp_order;
+
+struct ypresp_all {
+  bool_t more;
+  union {
+    ypresp_key_val val;
+  } ypresp_all_u;
+};
+typedef struct ypresp_all ypresp_all;
+
+struct ypresp_xfr {
+  u_int transid;
+  ypxfrstat xfrstat;
+};
+typedef struct ypresp_xfr ypresp_xfr;
+
+struct ypmaplist {
+  mapname map;
+  struct ypmaplist *next;
+};
+typedef struct ypmaplist ypmaplist;
+
+struct ypresp_maplist {
+  ypstat stat;
+  ypmaplist *maps;
+};
+typedef struct ypresp_maplist ypresp_maplist;
+
+enum yppush_status {
+  YPPUSH_SUCC = 1,
+  YPPUSH_AGE = 2,
+  YPPUSH_NOMAP = -1,
+  YPPUSH_NODOM = -2,
+  YPPUSH_RSRC = -3,
+  YPPUSH_RPC = -4,
+  YPPUSH_MADDR = -5,
+  YPPUSH_YPERR = -6,
+  YPPUSH_BADARGS = -7,
+  YPPUSH_DBM = -8,
+  YPPUSH_FILE = -9,
+  YPPUSH_SKEW = -10,
+  YPPUSH_CLEAR = -11,
+  YPPUSH_FORCE = -12,
+  YPPUSH_XFRERR = -13,
+  YPPUSH_REFUSED = -14,
+};
+typedef enum yppush_status yppush_status;
+
+struct yppushresp_xfr {
+  u_int transid;
+  yppush_status status;
+};
+typedef struct yppushresp_xfr yppushresp_xfr;
+
+enum ypbind_resptype {
+  YPBIND_SUCC_VAL = 1,
+  YPBIND_FAIL_VAL = 2,
+};
+typedef enum ypbind_resptype ypbind_resptype;
+
+struct ypbind_binding {
+  char ypbind_binding_addr[4];
+  char ypbind_binding_port[2];
+};
+typedef struct ypbind_binding ypbind_binding;
+
+struct ypbind_resp {
+  ypbind_resptype ypbind_status;
+  union {
+    u_int ypbind_error;
+    ypbind_binding ypbind_bindinfo;
+  } ypbind_resp_u;
+};
+typedef struct ypbind_resp ypbind_resp;
+
+#define YPBIND_ERR_ERR 1
+#define YPBIND_ERR_NOSERV 2
+#define YPBIND_ERR_RESC 3
+
+struct ypbind_setdom {
+  domainname ypsetdom_domain;
+  ypbind_binding ypsetdom_binding;
+  u_int ypsetdom_vers;
+};
+typedef struct ypbind_setdom ypbind_setdom;
+
+__BEGIN_DECLS
+
+#define YPPROG 100004
+#define YPVERS 2
+
+#define YPPROC_NULL 0
+extern  void *ypproc_null_2 (void *, CLIENT *);
+extern  void *ypproc_null_2_svc (void *, struct svc_req *);
+#define YPPROC_DOMAIN 1
+extern  bool_t *ypproc_domain_2 (domainname *, CLIENT *);
+extern  bool_t *ypproc_domain_2_svc (domainname *, struct svc_req *);
+#define YPPROC_DOMAIN_NONACK 2
+extern  bool_t *ypproc_domain_nonack_2 (domainname *, CLIENT *);
+extern  bool_t *ypproc_domain_nonack_2_svc (domainname *, struct svc_req *);
+#define YPPROC_MATCH 3
+extern  ypresp_val *ypproc_match_2 (ypreq_key *, CLIENT *);
+extern  ypresp_val *ypproc_match_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_FIRST 4
+extern  ypresp_key_val *ypproc_first_2 (ypreq_key *, CLIENT *);
+extern  ypresp_key_val *ypproc_first_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_NEXT 5
+extern  ypresp_key_val *ypproc_next_2 (ypreq_key *, CLIENT *);
+extern  ypresp_key_val *ypproc_next_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_XFR 6
+extern  ypresp_xfr *ypproc_xfr_2 (ypreq_xfr *, CLIENT *);
+extern  ypresp_xfr *ypproc_xfr_2_svc (ypreq_xfr *, struct svc_req *);
+#define YPPROC_CLEAR 7
+extern  void *ypproc_clear_2 (void *, CLIENT *);
+extern  void *ypproc_clear_2_svc (void *, struct svc_req *);
+#define YPPROC_ALL 8
+extern  ypresp_all *ypproc_all_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_all *ypproc_all_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_MASTER 9
+extern  ypresp_master *ypproc_master_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_master *ypproc_master_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_ORDER 10
+extern  ypresp_order *ypproc_order_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_order *ypproc_order_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_MAPLIST 11
+extern  ypresp_maplist *ypproc_maplist_2 (domainname *, CLIENT *);
+extern  ypresp_maplist *ypproc_maplist_2_svc (domainname *, struct svc_req *);
+extern int ypprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+#define YPPUSH_XFRRESPPROG (0x40000000)
+#define YPPUSH_XFRRESPVERS 1
+
+#define YPPUSHPROC_NULL 0
+extern  void *yppushproc_null_1 (void *, CLIENT *);
+extern  void *yppushproc_null_1_svc (void *, struct svc_req *);
+#define YPPUSHPROC_XFRRESP 1
+extern  void *yppushproc_xfrresp_1 (yppushresp_xfr *, CLIENT *);
+extern  void *yppushproc_xfrresp_1_svc (yppushresp_xfr *, struct svc_req *);
+extern int yppush_xfrrespprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+#define YPBINDPROG 100007
+#define YPBINDVERS 2
+
+#define YPBINDPROC_NULL 0
+extern  void *ypbindproc_null_2 (void *, CLIENT *);
+extern  void *ypbindproc_null_2_svc (void *, struct svc_req *);
+#define YPBINDPROC_DOMAIN 1
+extern  ypbind_resp *ypbindproc_domain_2 (domainname *, CLIENT *);
+extern  ypbind_resp *ypbindproc_domain_2_svc (domainname *, struct svc_req *);
+#define YPBINDPROC_SETDOM 2
+extern  void *ypbindproc_setdom_2 (ypbind_setdom *, CLIENT *);
+extern  void *ypbindproc_setdom_2_svc (ypbind_setdom *, struct svc_req *);
+extern int ypbindprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+extern  bool_t xdr_ypstat (XDR *, ypstat*);
+extern  bool_t xdr_ypxfrstat (XDR *, ypxfrstat*);
+extern  bool_t xdr_domainname (XDR *, domainname*);
+extern  bool_t xdr_mapname (XDR *, mapname*);
+extern  bool_t xdr_peername (XDR *, peername*);
+extern  bool_t xdr_keydat (XDR *, keydat*);
+extern  bool_t xdr_valdat (XDR *, valdat*);
+extern  bool_t xdr_ypmap_parms (XDR *, ypmap_parms*);
+extern  bool_t xdr_ypreq_key (XDR *, ypreq_key*);
+extern  bool_t xdr_ypreq_nokey (XDR *, ypreq_nokey*);
+extern  bool_t xdr_ypreq_xfr (XDR *, ypreq_xfr*);
+extern  bool_t xdr_ypresp_val (XDR *, ypresp_val*);
+extern  bool_t xdr_ypresp_key_val (XDR *, ypresp_key_val*);
+extern  bool_t xdr_ypresp_master (XDR *, ypresp_master*);
+extern  bool_t xdr_ypresp_order (XDR *, ypresp_order*);
+extern  bool_t xdr_ypresp_all (XDR *, ypresp_all*);
+extern  bool_t xdr_ypresp_xfr (XDR *, ypresp_xfr*);
+extern  bool_t xdr_ypmaplist (XDR *, ypmaplist*);
+extern  bool_t xdr_ypresp_maplist (XDR *, ypresp_maplist*);
+extern  bool_t xdr_yppush_status (XDR *, yppush_status*);
+extern  bool_t xdr_yppushresp_xfr (XDR *, yppushresp_xfr*);
+extern  bool_t xdr_ypbind_resptype (XDR *, ypbind_resptype*);
+extern  bool_t xdr_ypbind_binding (XDR *, ypbind_binding*);
+extern  bool_t xdr_ypbind_resp (XDR *, ypbind_resp*);
+extern  bool_t xdr_ypbind_setdom (XDR *, ypbind_setdom*);
+
+__END_DECLS
+
+#endif /* !__RPCSVC_YP_H__ */
diff --git a/lib/libdss-include/include/rpcsvc/yp.x b/lib/libdss-include/include/rpcsvc/yp.x
new file mode 100644 (file)
index 0000000..269ae6f
--- /dev/null
@@ -0,0 +1,311 @@
+/* @(#)yp.x    2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Protocol description file for the Yellow Pages Service
+ */
+
+const YPMAXRECORD = 1024;
+const YPMAXDOMAIN = 64;
+const YPMAXMAP = 64;
+const YPMAXPEER = 64;
+
+
+enum ypstat {
+       YP_TRUE         =  1,
+       YP_NOMORE       =  2,
+       YP_FALSE        =  0,
+       YP_NOMAP        = -1,
+       YP_NODOM        = -2,
+       YP_NOKEY        = -3,
+       YP_BADOP        = -4,
+       YP_BADDB        = -5,
+       YP_YPERR        = -6,
+       YP_BADARGS      = -7,
+       YP_VERS         = -8
+};
+
+
+enum ypxfrstat {
+       YPXFR_SUCC      =  1,
+       YPXFR_AGE       =  2,
+       YPXFR_NOMAP     = -1,
+       YPXFR_NODOM     = -2,
+       YPXFR_RSRC      = -3,
+       YPXFR_RPC       = -4,
+       YPXFR_MADDR     = -5,
+       YPXFR_YPERR     = -6,
+       YPXFR_BADARGS   = -7,
+       YPXFR_DBM       = -8,
+       YPXFR_FILE      = -9,
+       YPXFR_SKEW      = -10,
+       YPXFR_CLEAR     = -11,
+       YPXFR_FORCE     = -12,
+       YPXFR_XFRERR    = -13,
+       YPXFR_REFUSED   = -14
+};
+
+
+typedef string domainname<YPMAXDOMAIN>;
+typedef string mapname<YPMAXMAP>;
+typedef string peername<YPMAXPEER>;
+typedef opaque keydat<YPMAXRECORD>;
+typedef opaque valdat<YPMAXRECORD>;
+
+
+struct ypmap_parms {
+       domainname domain;
+       mapname map;
+       unsigned int ordernum;
+       peername peer;
+};
+
+struct ypreq_key {
+       domainname domain;
+       mapname map;
+       keydat key;
+};
+
+struct ypreq_nokey {
+       domainname domain;
+       mapname map;
+};
+
+struct ypreq_xfr {
+       ypmap_parms map_parms;
+       unsigned int transid;
+       unsigned int prog;
+       unsigned int port;
+};
+
+
+struct ypresp_val {
+       ypstat stat;
+       valdat val;
+};
+
+struct ypresp_key_val {
+       ypstat stat;
+#ifdef STUPID_SUN_BUG
+       /* This is the form as distributed by Sun.  But even the Sun NIS
+          servers expect the values in the other order.  So their
+          implementation somehow must change the order internally.  We
+          don't want to follow this bad example since the user should be
+          able to use rpcgen on this file.  */
+       keydat key;
+       valdat val;
+#else
+       valdat val;
+       keydat key;
+#endif
+};
+
+
+struct ypresp_master {
+       ypstat stat;
+       peername peer;
+};
+
+struct ypresp_order {
+       ypstat stat;
+       unsigned int ordernum;
+};
+
+union ypresp_all switch (bool more) {
+case TRUE:
+       ypresp_key_val val;
+case FALSE:
+       void;
+};
+
+struct ypresp_xfr {
+       unsigned int transid;
+       ypxfrstat xfrstat;
+};
+
+struct ypmaplist {
+       mapname map;
+       ypmaplist *next;
+};
+
+struct ypresp_maplist {
+       ypstat stat;
+       ypmaplist *maps;
+};
+
+enum yppush_status {
+       YPPUSH_SUCC     =  1,   /* Success */
+       YPPUSH_AGE      =  2,   /* Master's version not newer */
+       YPPUSH_NOMAP    = -1,   /* Can't find server for map */
+       YPPUSH_NODOM    = -2,   /* Domain not supported */
+       YPPUSH_RSRC     = -3,   /* Local resource alloc failure */
+       YPPUSH_RPC      = -4,   /* RPC failure talking to server */
+       YPPUSH_MADDR    = -5,   /* Can't get master address */
+       YPPUSH_YPERR    = -6,   /* YP server/map db error */
+       YPPUSH_BADARGS  = -7,   /* Request arguments bad */
+       YPPUSH_DBM      = -8,   /* Local dbm operation failed */
+       YPPUSH_FILE     = -9,   /* Local file I/O operation failed */
+       YPPUSH_SKEW     = -10,  /* Map version skew during transfer */
+       YPPUSH_CLEAR    = -11,  /* Can't send "Clear" req to local ypserv */
+       YPPUSH_FORCE    = -12,  /* No local order number in map  use -f flag. */
+       YPPUSH_XFRERR   = -13,  /* ypxfr error */
+       YPPUSH_REFUSED  = -14   /* Transfer request refused by ypserv */
+};
+
+struct yppushresp_xfr {
+       unsigned transid;
+       yppush_status status;
+};
+
+/*
+ * Response structure and overall result status codes.  Success and failure
+ * represent two separate response message types.
+ */
+
+enum ypbind_resptype {
+       YPBIND_SUCC_VAL = 1,
+       YPBIND_FAIL_VAL = 2
+};
+
+struct ypbind_binding {
+    opaque ypbind_binding_addr[4]; /* In network order */
+    opaque ypbind_binding_port[2]; /* In network order */
+};
+
+union ypbind_resp switch (ypbind_resptype ypbind_status) {
+case YPBIND_FAIL_VAL:
+       unsigned ypbind_error;
+case YPBIND_SUCC_VAL:
+       ypbind_binding ypbind_bindinfo;
+};
+
+/* Detailed failure reason codes for response field ypbind_error*/
+
+const YPBIND_ERR_ERR    = 1;   /* Internal error */
+const YPBIND_ERR_NOSERV = 2;   /* No bound server for passed domain */
+const YPBIND_ERR_RESC   = 3;   /* System resource allocation failure */
+
+
+/*
+ * Request data structure for ypbind "Set domain" procedure.
+ */
+struct ypbind_setdom {
+       domainname ypsetdom_domain;
+       ypbind_binding ypsetdom_binding;
+       unsigned ypsetdom_vers;
+};
+
+
+/*
+ * YP access protocol
+ */
+program YPPROG {
+       version YPVERS {
+               void
+               YPPROC_NULL(void) = 0;
+
+               bool
+               YPPROC_DOMAIN(domainname) = 1;
+
+               bool
+               YPPROC_DOMAIN_NONACK(domainname) = 2;
+
+               ypresp_val
+               YPPROC_MATCH(ypreq_key) = 3;
+
+               ypresp_key_val
+               YPPROC_FIRST(ypreq_key) = 4;
+
+               ypresp_key_val
+               YPPROC_NEXT(ypreq_key) = 5;
+
+               ypresp_xfr
+               YPPROC_XFR(ypreq_xfr) = 6;
+
+               void
+               YPPROC_CLEAR(void) = 7;
+
+               ypresp_all
+               YPPROC_ALL(ypreq_nokey) = 8;
+
+               ypresp_master
+               YPPROC_MASTER(ypreq_nokey) = 9;
+
+               ypresp_order
+               YPPROC_ORDER(ypreq_nokey) = 10;
+
+               ypresp_maplist
+               YPPROC_MAPLIST(domainname) = 11;
+       } = 2;
+} = 100004;
+
+
+/*
+ * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
+ */
+program YPPUSH_XFRRESPPROG {
+       version YPPUSH_XFRRESPVERS {
+               void
+               YPPUSHPROC_NULL(void) = 0;
+
+#ifdef STUPID_SUN_BUG
+               /* This is the form as distributed by Sun.  But even
+                  the Sun NIS servers expect the values in the other
+                  order.  So their implementation somehow must change
+                  the order internally.  We don't want to follow this
+                  bad example since the user should be able to use
+                  rpcgen on this file.  */
+               yppushresp_xfr
+               YPPUSHPROC_XFRRESP(void) = 1;
+#else
+               void
+               YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
+#endif
+       } = 1;
+} = 0x40000000;        /* transient: could be anything up to 0x5fffffff */
+
+/*
+ * YP binding protocol
+ */
+program YPBINDPROG {
+       version YPBINDVERS {
+               void
+               YPBINDPROC_NULL(void) = 0;
+
+               ypbind_resp
+               YPBINDPROC_DOMAIN(domainname) = 1;
+
+               void
+               YPBINDPROC_SETDOM(ypbind_setdom) = 2;
+       } = 2;
+} = 100007;
diff --git a/lib/libdss-include/include/rpcsvc/yp_prot.h b/lib/libdss-include/include/rpcsvc/yp_prot.h
new file mode 100644 (file)
index 0000000..ae0db36
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+ * This file contains symbols and structures defining the rpc protocol
+ * between the NIS clients and the NIS servers.  The servers
+ * are the NIS database servers, and the NIS binders.
+ */
+
+#ifndef _RPCSVC_YP_PROT_H
+#define _RPCSVC_YP_PROT_H
+
+#include <features.h>
+
+#include <rpc/rpc.h>
+#include <rpcsvc/ypclnt.h>
+
+__BEGIN_DECLS
+
+/*
+ * The following procedures are supported by the protocol:
+ *
+ * YPPROC_NULL() returns () takes nothing, returns nothing.  This indicates
+ * that the NIS server is alive.
+ *
+ * YPPROC_DOMAIN (char *) returns (bool_t) TRUE.  Indicates that the
+ * responding NIS server does serve the named domain; FALSE indicates no
+ * support.
+ *
+ * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the NIS server does serve
+ * the named domain, otherwise does not return.  Used in the broadcast case.
+ *
+ * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val).  Returns the
+ * right-hand value for a passed left-hand key, within a named map and
+ * domain.
+ *
+ * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val).
+ * Returns the first key-value pair from a named domain and map.
+ *
+ * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val).  Returns
+ * the key-value pair following a passed key-value pair within a named
+ * domain and map.
+ *
+ * YPPROC_XFR (struct ypreq_xfr) returns nothing.  Indicates to a server that
+ * a map should be updated.
+ *
+ * YPPROC_CLEAR        takes nothing, returns nothing.  Instructs a NIS server to
+ * close the current map, so that old versions of the disk file don't get
+ * held open.
+ *
+ * YPPROC_ALL (struct ypreq_nokey), returns
+ *     union switch (bool_t more) {
+ *             TRUE:   (struct ypresp_key_val);
+ *             FALSE:  (struct) {};
+ *     }
+ *
+ * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master)
+ *
+ * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order)
+ *
+ * YPPROC_MAPLIST (char *), returns (struct ypmaplist *)
+ */
+
+/* Program and version symbols, magic numbers */
+
+#define YPPROG         100004
+#define YPVERS         2
+#define YPVERS_ORIG    1
+#define YPMAXRECORD    1024
+#define YPMAXDOMAIN    64 /* XXX orig. yp_prot.h defines 256 */
+#define YPMAXMAP       64
+#define YPMAXPEER      64 /* XXX orig. yp_prot.h defines 256 */
+
+/* byte size of a large NIS packet */
+#define YPMSGSZ                1600
+
+typedef struct {
+  u_int keydat_len;
+  char *keydat_val;
+} keydat_t;
+
+typedef struct {
+  u_int valdat_len;
+  char *valdat_val;
+} valdat_t;
+
+struct ypmap_parms {
+  char *domain;                        /* Null string means not available */
+  char *map;                   /* Null string means not available */
+  unsigned int ordernum;       /* 0 means not available */
+  char *owner;                 /* Null string means not available */
+};
+
+/*
+ * Request parameter structures
+ */
+
+struct ypreq_key {
+  const char *domain;
+  const char *map;
+  keydat_t keydat;
+};
+
+struct ypreq_nokey {
+  char *domain;
+  char *map;
+};
+
+struct ypreq_xfr {
+  struct ypmap_parms map_parms;
+  u_int transid;
+  u_int proto;
+  u_int port;
+};
+
+#define ypxfr_domain map_parms.domain
+#define ypxfr_map map_parms.map
+#define ypxfr_ordernum map_parms.ordernum
+#define ypxfr_owner map_parms.owner
+
+/* Return status values */
+
+enum ypstat {
+  YP_TRUE = 1,         /* General purpose success code */
+#define YP_TRUE YP_TRUE
+  YP_NOMORE = 2,       /* No more entries in map */
+#define YP_NOMORE YP_NOMORE
+  YP_FALSE = 0,                /* General purpose failure code */
+#define YP_FALSE YP_FALSE
+  YP_NOMAP = -1,       /* No such map in domain */
+#define YP_NOMAP YP_NOMAP
+  YP_NODOM = -2,       /* Domain not supported */
+#define YP_NODOM YP_NODOM
+  YP_NOKEY = -3,       /* No such key in map */
+#define YP_NOKEY YP_NOKEY
+  YP_BADOP = -4,       /* Invalid operation */
+#define YP_BADOP YP_BADOP
+  YP_BADDB = -5,       /* Server data base is bad */
+#define YP_BADDB YP_BADDB
+  YP_YPERR = -6,       /* NIS server error */
+#define YP_YPERR YP_YPERR
+  YP_BADARGS = -7,     /* Request arguments bad */
+#define YP_BADARGS YP_BADARGS
+  YP_VERS = -8,                /* NIS server version mismatch - server can't supply
+                          requested service. */
+#define YP_VERS YP_VERS
+};
+
+/*
+ * Response parameter structures
+ */
+
+typedef enum ypstat ypstat;
+
+struct ypresp_val {
+  ypstat status;
+  valdat_t valdat;
+};
+
+struct ypresp_key_val {
+  ypstat status;
+#ifdef STUPID_SUN_BUG
+  /* This is the form as distributed by Sun.  But even the Sun NIS
+     servers expect the values in the other order.  So their
+     implementation somehow must change the order internally.  We
+     don't want to follow this bad example since the user should be
+     able to use rpcgen on this file.  */
+  keydat_t keydat;
+  valdat_t valdat;
+#else
+  valdat_t valdat;
+  keydat_t keydat;
+#endif
+};
+
+struct ypresp_master {
+  ypstat status;
+  char *master;
+};
+
+struct ypresp_order {
+  ypstat status;
+  u_int ordernum;
+};
+
+struct ypmaplist {
+  char *map;
+#define ypml_name map
+  struct ypmaplist *next;
+#define ypml_next next
+};
+
+struct ypresp_maplist {
+  ypstat status;
+  struct ypmaplist *list;
+};
+
+/*
+ * Procedure symbols.  YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK
+ * must keep the same values (0, 1, and 2) that they had in the first version
+ * of the protocol.
+ */
+
+#define YPPROC_NULL    0
+#define YPPROC_DOMAIN  1
+#define YPPROC_DOMAIN_NONACK 2
+#define YPPROC_MATCH   3
+#define YPPROC_FIRST   4
+#define YPPROC_NEXT    5
+#define YPPROC_XFR     6
+#define YPPROC_CLEAR   7
+#define YPPROC_ALL     8
+#define YPPROC_MASTER  9
+#define YPPROC_ORDER   10
+#define YPPROC_MAPLIST 11
+#define        YPPROC_NEWXFR   12
+
+/*
+ *             Protocol between clients and NIS binder servers
+ */
+
+/*
+ * The following procedures are supported by the protocol:
+ *
+ * YPBINDPROC_NULL() returns ()
+ *     takes nothing, returns nothing
+ *
+ * YPBINDPROC_DOMAIN takes (char *) returns (struct ypbind_resp)
+ *
+ * YPBINDPROC_SETDOM takes (struct ypbind_setdom) returns nothing
+ */
+
+/* Program and version symbols, magic numbers */
+
+#define YPBINDPROG             100007
+#define YPBINDVERS             2
+#define YPBINDVERS_ORIG                1
+
+/* Procedure symbols */
+
+#define YPBINDPROC_NULL                0
+#define YPBINDPROC_DOMAIN      1
+#define YPBINDPROC_SETDOM      2
+/*
+ * Response structure and overall result status codes.  Success and failure
+ * represent two separate response message types.
+ */
+
+enum ypbind_resptype {YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2};
+
+struct ypbind_binding {
+  struct in_addr ypbind_binding_addr;          /* In network order */
+  unsigned short int ypbind_binding_port;      /* In network order */
+};
+
+struct ypbind_resp {
+  enum ypbind_resptype ypbind_status;
+  union {
+    u_int ypbind_error;
+    struct ypbind_binding ypbind_bindinfo;
+  } ypbind_respbody;
+};
+
+
+/* Detailed failure reason codes for response field ypbind_error*/
+
+#define YPBIND_ERR_ERR 1               /* Internal error */
+#define YPBIND_ERR_NOSERV 2            /* No bound server for passed domain */
+#define YPBIND_ERR_RESC 3              /* System resource allocation failure */
+
+/*
+ * Request data structure for ypbind "Set domain" procedure.
+ */
+struct ypbind_setdom {
+  char *ypsetdom_domain;
+  struct ypbind_binding ypsetdom_binding;
+  u_int ypsetdom_vers;
+};
+#define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
+#define ypsetdom_port ypsetdom_binding.ypbind_binding_port
+
+/*
+ *             Protocol between clients (ypxfr, only) and yppush
+ *             yppush speaks a protocol in the transient range, which
+ *             is supplied to ypxfr as a command-line parameter when it
+ *             is activated by ypserv.
+ */
+#define YPPUSHVERS             1
+#define YPPUSHVERS_ORIG                1
+
+/* Procedure symbols */
+
+#define YPPUSHPROC_NULL                0
+#define YPPUSHPROC_XFRRESP     1
+
+/* Status values for yppushresp_xfr.status */
+
+enum yppush_status {
+  YPPUSH_SUCC = 1,             /* Success */
+#define YPPUSH_SUCC    YPPUSH_SUCC
+  YPPUSH_AGE = 2,              /* Master's version not newer */
+#define YPPUSH_AGE     YPPUSH_AGE
+  YPPUSH_NOMAP = -1,           /* Can't find server for map */
+#define YPPUSH_NOMAP   YPPUSH_NOMAP
+  YPPUSH_NODOM = -2,           /* Domain not supported */
+#define YPPUSH_NODOM   YPPUSH_NODOM
+  YPPUSH_RSRC = -3,            /* Local resouce alloc failure */
+#define YPPUSH_RSRC    YPPUSH_RSRC
+  YPPUSH_RPC = -4,             /* RPC failure talking to server */
+#define YPPUSH_RPC     YPPUSH_RPC
+  YPPUSH_MADDR = -5,           /* Can't get master address */
+#define YPPUSH_MADDR   YPPUSH_MADDR
+  YPPUSH_YPERR = -6,           /* NIS server/map db error */
+#define YPPUSH_YPERR   YPPUSH_YPERR
+  YPPUSH_BADARGS = -7,         /* Request arguments bad */
+#define YPPUSH_BADARGS         YPPUSH_BADARGS
+  YPPUSH_DBM = -8,             /* Local dbm operation failed */
+#define YPPUSH_DBM     YPPUSH_DBM
+  YPPUSH_FILE = -9,            /* Local file I/O operation failed */
+#define YPPUSH_FILE    YPPUSH_FILE
+  YPPUSH_SKEW = -10,           /* Map version skew during transfer */
+#define YPPUSH_SKEW    YPPUSH_SKEW
+  YPPUSH_CLEAR = -11,          /* Can't send "Clear" req to local ypserv */
+#define YPPUSH_CLEAR   YPPUSH_CLEAR
+  YPPUSH_FORCE = -12,          /* No local order number in map - use -f flag*/
+#define YPPUSH_FORCE   YPPUSH_FORCE
+  YPPUSH_XFRERR = -13,         /* ypxfr error */
+#define YPPUSH_XFRERR  YPPUSH_XFRERR
+  YPPUSH_REFUSED = -14,                /* Transfer request refused by ypserv */
+#define YPPUSH_REFUSED YPPUSH_REFUSED
+  YPPUSH_NOALIAS = -15         /* Alias not found for map or domain */
+#define        YPPUSH_NOALIAS  YPPUSH_NOALIAS
+};
+typedef enum yppush_status yppush_status;
+
+struct yppushresp_xfr {
+  u_int transid;
+  yppush_status status;
+};
+
+struct ypresp_all {
+  bool_t more;
+  union {
+    struct ypresp_key_val val;
+  } ypresp_all_u;
+};
+
+extern bool_t xdr_ypreq_key (XDR *__xdrs, struct ypreq_key * __objp);
+extern bool_t xdr_ypreq_nokey (XDR *__xdrs, struct ypreq_nokey * __objp);
+extern bool_t xdr_ypreq_xfr (XDR *__xdrs, struct ypreq_xfr * __objp);
+extern bool_t xdr_ypresp_val (XDR *__xdrs, struct ypresp_val * __objp);
+extern bool_t xdr_ypresp_key_val (XDR *__xdrs, struct ypresp_key_val * __objp);
+extern bool_t xdr_ypbind_resp (XDR *__xdrs, struct ypbind_resp * __objp);
+extern bool_t xdr_ypbind_setdom (XDR *__xdrs, struct ypbind_setdom * __objp);
+extern bool_t xdr_ypmap_parms (XDR *__xdrs, struct ypmap_parms * __objp);
+extern bool_t xdr_yppushresp_xfr (XDR *__xdrs, struct yppushresp_xfr * __objp);
+extern bool_t xdr_ypresp_order (XDR *__xdrs, struct ypresp_order  * __objp);
+extern bool_t xdr_ypresp_master (XDR *__xdrs, struct ypresp_master * __objp);
+extern bool_t xdr_ypall (XDR *__xdrs, struct ypall_callback * __objp);
+extern bool_t xdr_ypresp_maplist (XDR *__xdrs, struct ypresp_maplist * __objp);
+extern bool_t xdr_ypbind_binding (XDR *__xdrs, struct ypbind_binding * __objp);
+extern bool_t xdr_ypbind_resptype (XDR *__xdrs, enum ypbind_resptype * __objp);
+extern bool_t xdr_ypstat (XDR *__xdrs, enum ypbind_resptype * __objp);
+extern bool_t xdr_ypresp_all (XDR *__xdrs, struct ypresp_all  * __objp);
+extern bool_t xdr_domainname (XDR *__xdrs, char ** __objp);
+
+__END_DECLS
+
+#endif /* _RPCSVC_YP_PROT_H */
diff --git a/lib/libdss-include/include/rpcsvc/ypclnt.h b/lib/libdss-include/include/rpcsvc/ypclnt.h
new file mode 100644 (file)
index 0000000..4c64e23
--- /dev/null
@@ -0,0 +1,88 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef        __RPCSVC_YPCLNT_H__
+#define        __RPCSVC_YPCLNT_H__
+
+#include <features.h>
+
+/* Some defines */
+#define YPERR_SUCCESS  0               /* There is no error */
+#define        YPERR_BADARGS   1               /* Args to function are bad */
+#define        YPERR_RPC       2               /* RPC failure */
+#define        YPERR_DOMAIN    3               /* Can't bind to a server with this domain */
+#define        YPERR_MAP       4               /* No such map in server's domain */
+#define        YPERR_KEY       5               /* No such key in map */
+#define        YPERR_YPERR     6               /* Internal yp server or client error */
+#define        YPERR_RESRC     7               /* Local resource allocation failure */
+#define        YPERR_NOMORE    8               /* No more records in map database */
+#define        YPERR_PMAP      9               /* Can't communicate with portmapper */
+#define        YPERR_YPBIND    10              /* Can't communicate with ypbind */
+#define        YPERR_YPSERV    11              /* Can't communicate with ypserv */
+#define        YPERR_NODOM     12              /* Local domain name not set */
+#define        YPERR_BADDB     13              /* yp data base is bad */
+#define        YPERR_VERS      14              /* YP version mismatch */
+#define        YPERR_ACCESS    15              /* Access violation */
+#define        YPERR_BUSY      16              /* Database is busy */
+
+/* Types of update operations */
+#define        YPOP_CHANGE     1               /* Change, do not add */
+#define        YPOP_INSERT     2               /* Add, do not change */
+#define        YPOP_DELETE     3               /* Delete this entry */
+#define        YPOP_STORE      4               /* Add, or change */
+
+__BEGIN_DECLS
+
+/* struct ypall_callback * is the arg which must be passed to yp_all.  */
+struct ypall_callback
+  {
+    int (*foreach) (int __status, char *__key, int __keylen,
+                   char *__val, int __vallen, char *__data);
+    char *data;
+  };
+
+/* External NIS client function references.  */
+extern int yp_bind (const char *) __THROW;
+extern void yp_unbind (const char *) __THROW;
+extern int yp_get_default_domain (char **) __THROW;
+extern int yp_match (const char *, const char *, const char *,
+                    const int, char **, int *) __THROW;
+extern int yp_first (const char *, const char *, char **,
+                    int *, char **, int *) __THROW;
+extern int yp_next (const char *, const char *, const char *,
+                   const int, char **, int *, char **, int *) __THROW;
+extern int yp_master (const char *, const char *, char **) __THROW;
+extern int yp_order (const char *, const char *, unsigned int *) __THROW;
+extern int yp_all (const char *, const char *,
+                  const struct ypall_callback *) __THROW;
+extern const char *yperr_string (const int) __THROW;
+extern const char *ypbinderr_string (const int) __THROW;
+extern int ypprot_err (const int) __THROW;
+extern int yp_update (char *, char *, unsigned int,  char *,
+                     int, char *, int) __THROW;
+#if 0
+extern int yp_maplist (const char *, struct ypmaplist **) __THROW;
+#endif
+
+/* This functions exists only under BSD and Linux systems.  */
+extern int __yp_check (char **) __THROW;
+
+__END_DECLS
+
+#endif /* __RPCSVC_YPCLNT_H__ */
diff --git a/lib/libdss-include/include/rpcsvc/yppasswd.h b/lib/libdss-include/include/rpcsvc/yppasswd.h
new file mode 100644 (file)
index 0000000..adbe9b3
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _YPPASSWD_H_RPCGEN
+#define _YPPASSWD_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct passwd {
+       char *pw_name;
+       char *pw_passwd;
+       int pw_uid;
+       int pw_gid;
+       char *pw_gecos;
+       char *pw_dir;
+       char *pw_shell;
+};
+typedef struct passwd passwd;
+
+struct yppasswd {
+       char *oldpass;
+       passwd newpw;
+};
+typedef struct yppasswd yppasswd;
+
+#define YPPASSWDPROG 100009
+#define YPPASSWDVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define YPPASSWDPROC_UPDATE 1
+extern  int * yppasswdproc_update_1(yppasswd *, CLIENT *);
+extern  int * yppasswdproc_update_1_svc(yppasswd *, struct svc_req *);
+extern int yppasswdprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define YPPASSWDPROC_UPDATE 1
+extern  int * yppasswdproc_update_1();
+extern  int * yppasswdproc_update_1_svc();
+extern int yppasswdprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_passwd (XDR *, passwd*);
+extern  bool_t xdr_yppasswd (XDR *, yppasswd*);
+
+#else /* K&R C */
+extern bool_t xdr_passwd ();
+extern bool_t xdr_yppasswd ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_YPPASSWD_H_RPCGEN */
diff --git a/lib/libdss-include/include/rpcsvc/yppasswd.x b/lib/libdss-include/include/rpcsvc/yppasswd.x
new file mode 100644 (file)
index 0000000..34e3efe
--- /dev/null
@@ -0,0 +1,61 @@
+/* @(#)yppasswd.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * YP password update protocol
+ * Requires unix authentication
+ */
+program YPPASSWDPROG {
+       version YPPASSWDVERS {
+               /*
+                * Update my passwd entry
+                */
+               int
+               YPPASSWDPROC_UPDATE(yppasswd) = 1;
+       } = 1;
+} = 100009;
+
+
+struct passwd {
+       string pw_name<>;       /* username */
+       string pw_passwd<>;     /* encrypted password */
+       int pw_uid;             /* user id */
+       int pw_gid;             /* group id */
+       string pw_gecos<>;      /* in real life name */
+       string pw_dir<>;        /* home directory */
+       string pw_shell<>;      /* default shell */
+};
+
+struct yppasswd {
+       string oldpass<>;       /* unencrypted old password */
+       passwd newpw;           /* new passwd entry */
+};
diff --git a/lib/libdss-include/include/rpcsvc/ypupd.h b/lib/libdss-include/include/rpcsvc/ypupd.h
new file mode 100644 (file)
index 0000000..d07fd4d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* from @(#)ypupdate_prot.x    1.3 91/03/11 TIRPC 1.0 */
+
+#ifndef __RPCSVC_YPUPD_H__
+#define __RPCSVC_YPUPD_H__
+
+#include <features.h>
+
+#include <rpc/rpc.h>
+
+#define MAXMAPNAMELEN 255
+#define MAXYPDATALEN 1023
+#define MAXERRMSGLEN 255
+
+__BEGIN_DECLS
+
+typedef struct {
+       u_int yp_buf_len;
+       char *yp_buf_val;
+} yp_buf;
+
+extern  bool_t xdr_yp_buf (XDR *, yp_buf*);
+
+struct ypupdate_args {
+       char *mapname;
+       yp_buf key;
+       yp_buf datum;
+};
+typedef struct ypupdate_args ypupdate_args;
+
+extern  bool_t xdr_ypupdate_args (XDR *, ypupdate_args*);
+
+struct ypdelete_args {
+       char *mapname;
+       yp_buf key;
+};
+typedef struct ypdelete_args ypdelete_args;
+
+extern  bool_t xdr_ypdelete_args (XDR *, ypdelete_args*);
+
+#define YPU_PROG 100028
+#define YPU_VERS 1
+
+#define YPU_CHANGE 1
+extern  u_int * ypu_change_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_change_1_svc (ypupdate_args *, struct svc_req *);
+#define YPU_INSERT 2
+extern  u_int * ypu_insert_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_insert_1_svc (ypupdate_args *, struct svc_req *);
+#define YPU_DELETE 3
+extern  u_int * ypu_delete_1 (ypdelete_args *, CLIENT *);
+extern  u_int * ypu_delete_1_svc (ypdelete_args *, struct svc_req *);
+#define YPU_STORE 4
+extern  u_int * ypu_store_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_store_1_svc (ypupdate_args *, struct svc_req *);
+
+__END_DECLS
+
+#endif /* !__RPCSVC_YPUPD_H__ */
diff --git a/lib/libdss-include/include/sched.h b/lib/libdss-include/include/sched.h
new file mode 100644 (file)
index 0000000..253c963
--- /dev/null
@@ -0,0 +1,128 @@
+/* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SCHED_H
+#define        _SCHED_H        1
+
+#include <features.h>
+
+/* Get type definitions.  */
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+#ifdef __USE_XOPEN2K
+# define __need_time_t
+# define __need_timespec
+#endif
+#include <time.h>
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+
+/* Get system specific constant and data structure definitions.  */
+#include <bits/sched.h>
+/* Define the real names for the elements of `struct sched_param'.  */
+#define sched_priority __sched_priority
+
+
+__BEGIN_DECLS
+
+/* Set scheduling parameters for a process.  */
+extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
+     __THROW;
+
+/* Retrieve scheduling parameters for a particular process.  */
+extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __THROW;
+
+/* Set scheduling algorithm and/or parameters for a process.  */
+extern int sched_setscheduler (__pid_t __pid, int __policy,
+                              const struct sched_param *__param) __THROW;
+
+/* Retrieve scheduling algorithm for a particular purpose.  */
+extern int sched_getscheduler (__pid_t __pid) __THROW;
+
+/* Yield the processor.  */
+extern int sched_yield (void) __THROW;
+
+/* Get maximum priority value for a scheduler.  */
+extern int sched_get_priority_max (int __algorithm) __THROW;
+
+/* Get minimum priority value for a scheduler.  */
+extern int sched_get_priority_min (int __algorithm) __THROW;
+
+/* Get the SCHED_RR interval for the named process.  */
+extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
+
+
+#ifdef __USE_GNU
+/* Access macros for `cpu_set'.  */
+# define CPU_SETSIZE __CPU_SETSIZE
+# define CPU_SET(cpu, cpusetp)  __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp)
+# define CPU_CLR(cpu, cpusetp)  __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp)
+# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), \
+                                               cpusetp)
+# define CPU_ZERO(cpusetp)      __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp)
+# define CPU_COUNT(cpusetp)     __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp)
+
+# define CPU_SET_S(cpu, setsize, cpusetp)   __CPU_SET_S (cpu, setsize, cpusetp)
+# define CPU_CLR_S(cpu, setsize, cpusetp)   __CPU_CLR_S (cpu, setsize, cpusetp)
+# define CPU_ISSET_S(cpu, setsize, cpusetp) __CPU_ISSET_S (cpu, setsize, \
+                                                          cpusetp)
+# define CPU_ZERO_S(setsize, cpusetp)      __CPU_ZERO_S (setsize, cpusetp)
+# define CPU_COUNT_S(setsize, cpusetp)     __CPU_COUNT_S (setsize, cpusetp)
+
+# define CPU_EQUAL(cpusetp1, cpusetp2) \
+  __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)
+# define CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2)
+
+# define CPU_AND(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &)
+# define CPU_OR(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)
+# define CPU_XOR(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^)
+# define CPU_AND_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, &)
+# define CPU_OR_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, |)
+# define CPU_XOR_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, ^)
+
+# define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count)
+# define CPU_ALLOC(count) __CPU_ALLOC (count)
+# define CPU_FREE(cpuset) __CPU_FREE (cpuset)
+
+
+/* Set the CPU affinity for a task */
+extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
+                             const cpu_set_t *__cpuset) __THROW;
+
+/* Get the CPU affinity for a task */
+extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
+                             cpu_set_t *__cpuset) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sched.h */
diff --git a/lib/libdss-include/include/scsi/scsi.h b/lib/libdss-include/include/scsi/scsi.h
new file mode 100644 (file)
index 0000000..ecee08c
--- /dev/null
@@ -0,0 +1,225 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * This header file contains public constants and structures used by
+ * the scsi code for linux.
+ */
+
+#ifndef _SCSI_SCSI_H
+#define _SCSI_SCSI_H   1
+
+#include <features.h>
+
+/*
+ *      SCSI opcodes
+ */
+
+#define TEST_UNIT_READY       0x00
+#define REZERO_UNIT           0x01
+#define REQUEST_SENSE         0x03
+#define FORMAT_UNIT           0x04
+#define READ_BLOCK_LIMITS     0x05
+#define REASSIGN_BLOCKS       0x07
+#define READ_6                0x08
+#define WRITE_6               0x0a
+#define SEEK_6                0x0b
+#define READ_REVERSE          0x0f
+#define WRITE_FILEMARKS       0x10
+#define SPACE                 0x11
+#define INQUIRY               0x12
+#define RECOVER_BUFFERED_DATA 0x14
+#define MODE_SELECT           0x15
+#define RESERVE               0x16
+#define RELEASE               0x17
+#define COPY                  0x18
+#define ERASE                 0x19
+#define MODE_SENSE            0x1a
+#define START_STOP            0x1b
+#define RECEIVE_DIAGNOSTIC    0x1c
+#define SEND_DIAGNOSTIC       0x1d
+#define ALLOW_MEDIUM_REMOVAL  0x1e
+
+#define SET_WINDOW            0x24
+#define READ_CAPACITY         0x25
+#define READ_10               0x28
+#define WRITE_10              0x2a
+#define SEEK_10               0x2b
+#define WRITE_VERIFY          0x2e
+#define VERIFY                0x2f
+#define SEARCH_HIGH           0x30
+#define SEARCH_EQUAL          0x31
+#define SEARCH_LOW            0x32
+#define SET_LIMITS            0x33
+#define PRE_FETCH             0x34
+#define READ_POSITION         0x34
+#define SYNCHRONIZE_CACHE     0x35
+#define LOCK_UNLOCK_CACHE     0x36
+#define READ_DEFECT_DATA      0x37
+#define MEDIUM_SCAN           0x38
+#define COMPARE               0x39
+#define COPY_VERIFY           0x3a
+#define WRITE_BUFFER          0x3b
+#define READ_BUFFER           0x3c
+#define UPDATE_BLOCK          0x3d
+#define READ_LONG             0x3e
+#define WRITE_LONG            0x3f
+#define CHANGE_DEFINITION     0x40
+#define WRITE_SAME            0x41
+#define READ_TOC              0x43
+#define LOG_SELECT            0x4c
+#define LOG_SENSE             0x4d
+#define MODE_SELECT_10        0x55
+#define RESERVE_10            0x56
+#define RELEASE_10            0x57
+#define MODE_SENSE_10         0x5a
+#define PERSISTENT_RESERVE_IN 0x5e
+#define PERSISTENT_RESERVE_OUT 0x5f
+#define MOVE_MEDIUM           0xa5
+#define READ_12               0xa8
+#define WRITE_12              0xaa
+#define WRITE_VERIFY_12       0xae
+#define SEARCH_HIGH_12        0xb0
+#define SEARCH_EQUAL_12       0xb1
+#define SEARCH_LOW_12         0xb2
+#define READ_ELEMENT_STATUS   0xb8
+#define SEND_VOLUME_TAG       0xb6
+#define WRITE_LONG_2          0xea
+
+/*
+ *  Status codes
+ */
+
+#define GOOD                 0x00
+#define CHECK_CONDITION      0x01
+#define CONDITION_GOOD       0x02
+#define BUSY                 0x04
+#define INTERMEDIATE_GOOD    0x08
+#define INTERMEDIATE_C_GOOD  0x0a
+#define RESERVATION_CONFLICT 0x0c
+#define COMMAND_TERMINATED   0x11
+#define QUEUE_FULL           0x14
+
+#define STATUS_MASK          0x3e
+
+/*
+ *  SENSE KEYS
+ */
+
+#define NO_SENSE            0x00
+#define RECOVERED_ERROR     0x01
+#define NOT_READY           0x02
+#define MEDIUM_ERROR        0x03
+#define HARDWARE_ERROR      0x04
+#define ILLEGAL_REQUEST     0x05
+#define UNIT_ATTENTION      0x06
+#define DATA_PROTECT        0x07
+#define BLANK_CHECK         0x08
+#define COPY_ABORTED        0x0a
+#define ABORTED_COMMAND     0x0b
+#define VOLUME_OVERFLOW     0x0d
+#define MISCOMPARE          0x0e
+
+
+/*
+ *  DEVICE TYPES
+ */
+
+#define TYPE_DISK           0x00
+#define TYPE_TAPE           0x01
+#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
+#define TYPE_WORM           0x04    /* Treated as ROM by our system */
+#define TYPE_ROM            0x05
+#define TYPE_SCANNER        0x06
+#define TYPE_MOD            0x07    /* Magneto-optical disk -
+                                    * - treated as TYPE_DISK */
+#define TYPE_MEDIUM_CHANGER 0x08
+#define TYPE_ENCLOSURE     0x0d    /* Enclosure Services Device */
+#define TYPE_NO_LUN         0x7f
+
+/*
+ * standard mode-select header prepended to all mode-select commands
+ *
+ * moved here from cdrom.h -- kraxel
+ */
+
+struct ccs_modesel_head
+  {
+    unsigned char _r1;                 /* reserved.  */
+    unsigned char medium;              /* device-specific medium type.  */
+    unsigned char _r2;                 /* reserved.  */
+    unsigned char block_desc_length;   /* block descriptor length.  */
+    unsigned char density;             /* device-specific density code.  */
+    unsigned char number_blocks_hi;    /* number of blocks in this block
+                                          desc.  */
+    unsigned char number_blocks_med;
+    unsigned char number_blocks_lo;
+    unsigned char _r3;
+    unsigned char block_length_hi;     /* block length for blocks in this
+                                          desc.  */
+    unsigned char block_length_med;
+    unsigned char block_length_lo;
+  };
+
+/*
+ *  MESSAGE CODES
+ */
+
+#define COMMAND_COMPLETE    0x00
+#define EXTENDED_MESSAGE    0x01
+#define     EXTENDED_MODIFY_DATA_POINTER    0x00
+#define     EXTENDED_SDTR                   0x01
+#define     EXTENDED_EXTENDED_IDENTIFY      0x02    /* SCSI-I only */
+#define     EXTENDED_WDTR                   0x03
+#define SAVE_POINTERS       0x02
+#define RESTORE_POINTERS    0x03
+#define DISCONNECT          0x04
+#define INITIATOR_ERROR     0x05
+#define ABORT               0x06
+#define MESSAGE_REJECT      0x07
+#define NOP                 0x08
+#define MSG_PARITY_ERROR    0x09
+#define LINKED_CMD_COMPLETE 0x0a
+#define LINKED_FLG_CMD_COMPLETE 0x0b
+#define BUS_DEVICE_RESET    0x0c
+
+#define INITIATE_RECOVERY   0x0f            /* SCSI-II only */
+#define RELEASE_RECOVERY    0x10            /* SCSI-II only */
+
+#define SIMPLE_QUEUE_TAG    0x20
+#define HEAD_OF_QUEUE_TAG   0x21
+#define ORDERED_QUEUE_TAG   0x22
+
+/*
+ * Here are some scsi specific ioctl commands which are sometimes useful.
+ */
+/* These are a few other constants only used by scsi devices.  */
+
+#define SCSI_IOCTL_GET_IDLUN 0x5382
+
+/* Used to turn on and off tagged queuing for scsi devices.  */
+
+#define SCSI_IOCTL_TAGGED_ENABLE 0x5383
+#define SCSI_IOCTL_TAGGED_DISABLE 0x5384
+
+/* Used to obtain the host number of a device.  */
+#define SCSI_IOCTL_PROBE_HOST 0x5385
+
+/* Used to get the bus number for a device.  */
+#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386
+
+#endif /* scsi/scsi.h */
diff --git a/lib/libdss-include/include/scsi/scsi_ioctl.h b/lib/libdss-include/include/scsi/scsi_ioctl.h
new file mode 100644 (file)
index 0000000..529aade
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SCSI_IOCTL_H
+#define _SCSI_IOCTL_H
+
+/* IOCTLs for SCSI.  */
+#define SCSI_IOCTL_SEND_COMMAND                1       /* Send a command to the SCSI host.  */
+#define SCSI_IOCTL_TEST_UNIT_READY     2       /* Test if unit is ready.  */
+#define SCSI_IOCTL_BENCHMARK_COMMAND   3
+#define SCSI_IOCTL_SYNC                        4       /* Request synchronous parameters.  */
+#define SCSI_IOCTL_START_UNIT          5
+#define SCSI_IOCTL_STOP_UNIT           6
+#define SCSI_IOCTL_DOORLOCK            0x5380  /* Lock the eject mechanism.  */
+#define SCSI_IOCTL_DOORUNLOCK          0x5381  /* Unlock the mechanism.  */
+
+#endif
diff --git a/lib/libdss-include/include/scsi/sg.h b/lib/libdss-include/include/scsi/sg.h
new file mode 100644 (file)
index 0000000..e3b1c6a
--- /dev/null
@@ -0,0 +1,276 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+   History:
+    Started: Aug 9 by Lawrence Foard (entropy@world.std.com), to allow user
+     process control of SCSI devices.
+    Development Sponsored by Killy Corp. NY NY
+*/
+
+#ifndef _SCSI_SG_H
+#define _SCSI_SG_H     1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+
+/* New interface introduced in the 3.x SG drivers follows */
+
+/* Same structure as used by readv() Linux system call. It defines one
+   scatter-gather element. */
+typedef struct sg_iovec
+{
+  void * iov_base;            /* Starting address  */
+  size_t iov_len;             /* Length in bytes  */
+} sg_iovec_t;
+
+
+typedef struct sg_io_hdr
+{
+  int interface_id;           /* [i] 'S' for SCSI generic (required) */
+  int dxfer_direction;        /* [i] data transfer direction  */
+  unsigned char cmd_len;      /* [i] SCSI command length ( <= 16 bytes) */
+  unsigned char mx_sb_len;    /* [i] max length to write to sbp */
+  unsigned short int iovec_count; /* [i] 0 implies no scatter gather */
+  unsigned int dxfer_len;     /* [i] byte count of data transfer */
+  void * dxferp;              /* [i], [*io] points to data transfer memory
+                                or scatter gather list */
+  unsigned char * cmdp;       /* [i], [*i] points to command to perform */
+  unsigned char * sbp;        /* [i], [*o] points to sense_buffer memory */
+  unsigned int timeout;       /* [i] MAX_UINT->no timeout (unit: millisec) */
+  unsigned int flags;         /* [i] 0 -> default, see SG_FLAG... */
+  int pack_id;                /* [i->o] unused internally (normally) */
+  void * usr_ptr;             /* [i->o] unused internally */
+  unsigned char status;       /* [o] scsi status */
+  unsigned char masked_status;/* [o] shifted, masked scsi status */
+  unsigned char msg_status;   /* [o] messaging level data (optional) */
+  unsigned char sb_len_wr;    /* [o] byte count actually written to sbp */
+  unsigned short int host_status; /* [o] errors from host adapter */
+  unsigned short int driver_status;/* [o] errors from software driver */
+  int resid;                  /* [o] dxfer_len - actual_transferred */
+  unsigned int duration;      /* [o] time taken by cmd (unit: millisec) */
+  unsigned int info;          /* [o] auxiliary information */
+} sg_io_hdr_t;
+
+
+/* Use negative values to flag difference from original sg_header structure.  */
+#define SG_DXFER_NONE -1        /* e.g. a SCSI Test Unit Ready command */
+#define SG_DXFER_TO_DEV -2      /* e.g. a SCSI WRITE command */
+#define SG_DXFER_FROM_DEV -3    /* e.g. a SCSI READ command */
+#define SG_DXFER_TO_FROM_DEV -4 /* treated like SG_DXFER_FROM_DEV with the
+                                  additional property than during indirect
+                                  IO the user buffer is copied into the
+                                  kernel buffers before the transfer */
+
+
+/* following flag values can be "or"-ed together */
+#define SG_FLAG_DIRECT_IO 1     /* default is indirect IO */
+#define SG_FLAG_LUN_INHIBIT 2   /* default is to put device's lun into */
+                               /* the 2nd byte of SCSI command */
+#define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */
+                               /* user space (debug indirect IO) */
+
+/* The following 'info' values are "or"-ed together.  */
+#define SG_INFO_OK_MASK        0x1
+#define SG_INFO_OK     0x0     /* no sense, host nor driver "noise" */
+#define SG_INFO_CHECK  0x1     /* something abnormal happened */
+
+#define SG_INFO_DIRECT_IO_MASK 0x6
+#define SG_INFO_INDIRECT_IO    0x0     /* data xfer via kernel buffers (or no xfer) */
+#define SG_INFO_DIRECT_IO      0x2     /* direct IO requested and performed */
+#define SG_INFO_MIXED_IO       0x4     /* part direct, part indirect IO */
+
+
+/* Request information about a specific SG device, used by
+   SG_GET_SCSI_ID ioctl ().  */
+struct sg_scsi_id {
+  /* Host number as in "scsi<n>" where 'n' is one of 0, 1, 2 etc.  */
+  int host_no;
+  int channel;
+  /* SCSI id of target device.  */
+  int scsi_id;
+  int lun;
+  /* TYPE_... defined in <scsi/scsi.h>.  */
+  int scsi_type;
+  /* Host (adapter) maximum commands per lun.  */
+  short int h_cmd_per_lun;
+  /* Device (or adapter) maximum queue length.  */
+  short int d_queue_depth;
+  /* Unused, set to 0 for now.  */
+  int unused[2];
+};
+
+/* Used by SG_GET_REQUEST_TABLE ioctl().  */
+typedef struct sg_req_info {
+    char req_state;     /* 0 -> not used, 1 -> written, 2 -> ready to read */
+    char orphan;        /* 0 -> normal request, 1 -> from interruped SG_IO */
+    char sg_io_owned;   /* 0 -> complete with read(), 1 -> owned by SG_IO */
+    char problem;       /* 0 -> no problem detected, 1 -> error to report */
+    int pack_id;        /* pack_id associated with request */
+    void * usr_ptr;     /* user provided pointer (in new interface) */
+    unsigned int duration; /* millisecs elapsed since written (req_state==1)
+                             or request duration (req_state==2) */
+    int unused;
+} sg_req_info_t;
+
+
+/* IOCTLs: Those ioctls that are relevant to the SG 3.x drivers follow.
+ [Those that only apply to the SG 2.x drivers are at the end of the file.]
+ (_GET_s yield result via 'int *' 3rd argument unless otherwise indicated) */
+
+#define SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
+
+/* Used to configure SCSI command transformation layer for ATAPI devices */
+/* Only supported by the ide-scsi driver */
+#define SG_SET_TRANSFORM 0x2204 /* N.B. 3rd arg is not pointer but value: */
+                     /* 3rd arg = 0 to disable transform, 1 to enable it */
+#define SG_GET_TRANSFORM 0x2205
+
+#define SG_SET_RESERVED_SIZE 0x2275  /* request a new reserved buffer size */
+#define SG_GET_RESERVED_SIZE 0x2272  /* actual size of reserved buffer */
+
+/* The following ioctl has a 'sg_scsi_id_t *' object as its 3rd argument. */
+#define SG_GET_SCSI_ID 0x2276   /* Yields fd's bus, chan, dev, lun + type */
+/* SCSI id information can also be obtained from SCSI_IOCTL_GET_IDLUN */
+
+/* Override host setting and always DMA using low memory ( <16MB on i386) */
+#define SG_SET_FORCE_LOW_DMA 0x2279  /* 0-> use adapter setting, 1-> force */
+#define SG_GET_LOW_DMA 0x227a   /* 0-> use all ram for dma; 1-> low dma ram */
+
+/* When SG_SET_FORCE_PACK_ID set to 1, pack_id is input to read() which
+   tries to fetch a packet with a matching pack_id, waits, or returns EAGAIN.
+   If pack_id is -1 then read oldest waiting. When ...FORCE_PACK_ID set to 0
+   then pack_id ignored by read() and oldest readable fetched. */
+#define SG_SET_FORCE_PACK_ID 0x227b
+#define SG_GET_PACK_ID 0x227c /* Yields oldest readable pack_id (or -1) */
+
+#define SG_GET_NUM_WAITING 0x227d /* Number of commands awaiting read() */
+
+/* Yields max scatter gather tablesize allowed by current host adapter */
+#define SG_GET_SG_TABLESIZE 0x227F  /* 0 implies can't do scatter gather */
+
+#define SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
+
+/* Returns -EBUSY if occupied. 3rd argument pointer to int (see next) */
+#define SG_SCSI_RESET 0x2284
+/* Associated values that can be given to SG_SCSI_RESET follow */
+#define SG_SCSI_RESET_NOTHING  0
+#define SG_SCSI_RESET_DEVICE   1
+#define SG_SCSI_RESET_BUS      2
+#define SG_SCSI_RESET_HOST     3
+
+/* synchronous SCSI command ioctl, (only in version 3 interface) */
+#define SG_IO 0x2285   /* similar effect as write() followed by read() */
+
+#define SG_GET_REQUEST_TABLE 0x2286   /* yields table of active requests */
+
+/* How to treat EINTR during SG_IO ioctl(), only in SG 3.x series */
+#define SG_SET_KEEP_ORPHAN 0x2287 /* 1 -> hold for read(), 0 -> drop (def) */
+#define SG_GET_KEEP_ORPHAN 0x2288
+
+
+#define SG_SCATTER_SZ (8 * 4096)  /* PAGE_SIZE not available to user */
+/* Largest size (in bytes) a single scatter-gather list element can have.
+   The value must be a power of 2 and <= (PAGE_SIZE * 32) [131072 bytes on
+   i386]. The minimum value is PAGE_SIZE. If scatter-gather not supported
+   by adapter then this value is the largest data block that can be
+   read/written by a single scsi command. The user can find the value of
+   PAGE_SIZE by calling getpagesize() defined in unistd.h . */
+
+#define SG_DEFAULT_RETRIES 1
+
+/* Defaults, commented if they differ from original sg driver */
+#define SG_DEF_FORCE_LOW_DMA 0  /* was 1 -> memory below 16MB on i386 */
+#define SG_DEF_FORCE_PACK_ID 0
+#define SG_DEF_KEEP_ORPHAN 0
+#define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */
+
+/* maximum outstanding requests, write() yields EDOM if exceeded */
+#define SG_MAX_QUEUE 16
+
+#define SG_BIG_BUFF SG_DEF_RESERVED_SIZE    /* for backward compatibility */
+
+/* Alternate style type names, "..._t" variants preferred */
+typedef struct sg_io_hdr Sg_io_hdr;
+typedef struct sg_io_vec Sg_io_vec;
+typedef struct sg_scsi_id Sg_scsi_id;
+typedef struct sg_req_info Sg_req_info;
+
+
+/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+/*   The older SG interface based on the 'sg_header' structure follows.   */
+/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
+
+#define SG_MAX_SENSE 16   /* this only applies to the sg_header interface */
+
+struct sg_header
+ {
+   /* Length of incoming packet (including header).  */
+   int pack_len;
+   /* Maximal length of expected reply.  */
+   int reply_len;
+   /* Id number of packet.  */
+   int pack_id;
+   /* 0==ok, otherwise error number.  */
+   int result;
+   /* Force 12 byte command length for group 6 & 7 commands.  */
+   unsigned int twelve_byte:1;
+   /* SCSI status from target.  */
+   unsigned int target_status:5;
+   /* Host status (see "DID" codes).  */
+   unsigned int host_status:8;
+   /* Driver status+suggestion.  */
+   unsigned int driver_status:8;
+   /* Unused.  */
+   unsigned int other_flags:10;
+   /* Output in 3 cases:
+      when target_status is CHECK_CONDITION or
+      when target_status is COMMAND_TERMINATED or
+      when (driver_status & DRIVER_SENSE) is true.  */
+   unsigned char sense_buffer[SG_MAX_SENSE];
+ };
+
+
+/* IOCTLs: The following are not required (or ignored) when the sg_io_hdr_t
+          interface is used. They are kept for backward compatibility with
+          the original and version 2 drivers. */
+
+#define SG_SET_TIMEOUT         0x2201  /* Set timeout; *(int *)arg==timeout.  */
+#define SG_GET_TIMEOUT         0x2202  /* Get timeout; return timeout.  */
+
+/* Get/set command queuing state per fd (default is SG_DEF_COMMAND_Q). */
+#define SG_GET_COMMAND_Q       0x2270  /* Yields 0 (queuing off) or 1 (on).  */
+#define SG_SET_COMMAND_Q       0x2271  /* Change queuing state with 0 or 1.  */
+
+/* Turn on error sense trace (1..8), dump this device to log/console (9)
+   or dump all sg device states ( >9 ) to log/console.  */
+#define SG_SET_DEBUG           0x227e  /* 0 -> turn off debug */
+
+#define SG_NEXT_CMD_LEN                0x2283  /* Override SCSI command length with given
+                                          number on the next write() on this file
+                                          descriptor.  */
+
+/* Defaults, commented if they differ from original sg driver */
+#define SG_DEFAULT_TIMEOUT (60*HZ) /* HZ == 'jiffies in 1 second' */
+#define SG_DEF_COMMAND_Q 0     /* command queuing is always on when
+                                 the new interface is used */
+#define SG_DEF_UNDERRUN_FLAG 0
+
+
+#endif /* scsi/sg.h */
diff --git a/lib/libdss-include/include/search.h b/lib/libdss-include/include/search.h
new file mode 100644 (file)
index 0000000..bbf4b1d
--- /dev/null
@@ -0,0 +1,174 @@
+/* Declarations for System V style searching functions.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEARCH_H
+#define        _SEARCH_H 1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Prototype structure for a linked-list data structure.
+   This is the type used by the `insque' and `remque' functions.  */
+
+# ifdef __USE_GNU
+struct qelem
+  {
+    struct qelem *q_forw;
+    struct qelem *q_back;
+    char q_data[1];
+  };
+# endif
+
+
+/* Insert ELEM into a doubly-linked list, after PREV.  */
+extern void insque (void *__elem, void *__prev) __THROW;
+
+/* Unlink ELEM from the doubly-linked list that it is in.  */
+extern void remque (void *__elem) __THROW;
+#endif
+
+
+/* For use with hsearch(3).  */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef        __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+
+/* Action which shall be performed in the call the hsearch.  */
+typedef enum
+  {
+    FIND,
+    ENTER
+  }
+ACTION;
+
+typedef struct entry
+  {
+    char *key;
+    void *data;
+  }
+ENTRY;
+
+/* Opaque type for internal use.  */
+struct _ENTRY;
+
+/* Family of hash table handling functions.  The functions also
+   have reentrant counterparts ending with _r.  The non-reentrant
+   functions all work on a signle internal hashing table.  */
+
+/* Search for entry matching ITEM.key in internal hash table.  If
+   ACTION is `FIND' return found entry or signal error by returning
+   NULL.  If ACTION is `ENTER' replace existing data (if any) with
+   ITEM.data.  */
+extern ENTRY *hsearch (ENTRY __item, ACTION __action) __THROW;
+
+/* Create a new hashing table which will at most contain NEL elements.  */
+extern int hcreate (size_t __nel) __THROW;
+
+/* Destroy current internal hashing table.  */
+extern void hdestroy (void) __THROW;
+
+#ifdef __USE_GNU
+/* Data type for reentrant functions.  */
+struct hsearch_data
+  {
+    struct _ENTRY *table;
+    unsigned int size;
+    unsigned int filled;
+  };
+
+/* Reentrant versions which can handle multiple hashing tables at the
+   same time.  */
+extern int hsearch_r (ENTRY __item, ACTION __action, ENTRY **__retval,
+                     struct hsearch_data *__htab) __THROW;
+extern int hcreate_r (size_t __nel, struct hsearch_data *__htab) __THROW;
+extern void hdestroy_r (struct hsearch_data *__htab) __THROW;
+#endif
+
+
+/* The tsearch routines are very interesting. They make many
+   assumptions about the compiler.  It assumes that the first field
+   in node must be the "key" field, which points to the datum.
+   Everything depends on that.  */
+/* For tsearch */
+typedef enum
+{
+  preorder,
+  postorder,
+  endorder,
+  leaf
+}
+VISIT;
+
+/* Search for an entry matching the given KEY in the tree pointed to
+   by *ROOTP and insert a new element if not found.  */
+extern void *tsearch (const void *__key, void **__rootp,
+                     __compar_fn_t __compar);
+
+/* Search for an entry matching the given KEY in the tree pointed to
+   by *ROOTP.  If no matching entry is available return NULL.  */
+extern void *tfind (const void *__key, void *const *__rootp,
+                   __compar_fn_t __compar);
+
+/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
+extern void *tdelete (const void *__restrict __key,
+                     void **__restrict __rootp,
+                     __compar_fn_t __compar);
+
+#ifndef __ACTION_FN_T
+# define __ACTION_FN_T
+typedef void (*__action_fn_t) (const void *__nodep, VISIT __value,
+                              int __level);
+#endif
+
+/* Walk through the whole tree and call the ACTION callback for every node
+   or leaf.  */
+extern void twalk (const void *__root, __action_fn_t __action);
+
+#ifdef __USE_GNU
+/* Callback type for function to free a tree node.  If the keys are atomic
+   data this function should do nothing.  */
+typedef void (*__free_fn_t) (void *__nodep);
+
+/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
+extern void tdestroy (void *__root, __free_fn_t __freefct);
+#endif
+
+
+/* Perform linear search for KEY by comparing by COMPAR in an array
+   [BASE,BASE+NMEMB*SIZE).  */
+extern void *lfind (const void *__key, const void *__base,
+                   size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+
+/* Perform linear search for KEY by comparing by COMPAR function in
+   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
+extern void *lsearch (const void *__key, void *__base,
+                     size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+
+__END_DECLS
+
+#endif /* search.h */
diff --git a/lib/libdss-include/include/semaphore.h b/lib/libdss-include/include/semaphore.h
new file mode 100644 (file)
index 0000000..9927db7
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+#define _SEMAPHORE_H   1
+
+#include <features.h>
+#include <sys/types.h>
+#ifdef __USE_XOPEN2K
+# define __need_timespec
+# include <time.h>
+#endif
+
+/* Get the definition for sem_t.  */
+#include <bits/semaphore.h>
+
+
+__BEGIN_DECLS
+
+/* Initialize semaphore object SEM to VALUE.  If PSHARED then share it
+   with other processes.  */
+extern int sem_init (sem_t *__sem, int __pshared, unsigned int __value)
+     __THROW;
+/* Free resources associated with semaphore object SEM.  */
+extern int sem_destroy (sem_t *__sem) __THROW;
+
+/* Open a named semaphore NAME with open flags OFLAG.  */
+extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW;
+
+/* Close descriptor for named semaphore SEM.  */
+extern int sem_close (sem_t *__sem) __THROW;
+
+/* Remove named semaphore NAME.  */
+extern int sem_unlink (const char *__name) __THROW;
+
+/* Wait for SEM being posted.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sem_wait (sem_t *__sem);
+
+#ifdef __USE_XOPEN2K
+/* Similar to `sem_wait' but wait only until ABSTIME.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sem_timedwait (sem_t *__restrict __sem,
+                         const struct timespec *__restrict __abstime);
+#endif
+
+/* Test whether SEM is posted.  */
+extern int sem_trywait (sem_t *__sem) __THROWNL;
+
+/* Post SEM.  */
+extern int sem_post (sem_t *__sem) __THROWNL;
+
+/* Get current value of SEM and store it in *SVAL.  */
+extern int sem_getvalue (sem_t *__restrict __sem, int *__restrict __sval)
+     __THROW;
+
+
+__END_DECLS
+
+#endif /* semaphore.h */
diff --git a/lib/libdss-include/include/setjmp.h b/lib/libdss-include/include/setjmp.h
new file mode 100644 (file)
index 0000000..ccfb70a
--- /dev/null
@@ -0,0 +1,114 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.13 Nonlocal jumps   <setjmp.h>
+ */
+
+#ifndef        _SETJMP_H
+#define        _SETJMP_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/setjmp.h>               /* Get `__jmp_buf'.  */
+#include <bits/sigset.h>               /* Get `__sigset_t'.  */
+
+
+/* Calling environment, plus possibly a saved signal mask.  */
+struct __jmp_buf_tag
+  {
+    /* NOTE: The machine-dependent definitions of `__sigsetjmp'
+       assume that a `jmp_buf' begins with a `__jmp_buf' and that
+       `__mask_was_saved' follows it.  Do not move these members
+       or add others before it.  */
+    __jmp_buf __jmpbuf;                /* Calling environment.  */
+    int __mask_was_saved;      /* Saved the signal mask?  */
+    __sigset_t __saved_mask;   /* Saved signal mask.  */
+  };
+
+
+__BEGIN_NAMESPACE_STD
+
+typedef struct __jmp_buf_tag jmp_buf[1];
+
+/* Store the calling environment in ENV, also saving the signal mask.
+   Return 0.  */
+extern int setjmp (jmp_buf __env) __THROWNL;
+
+__END_NAMESPACE_STD
+
+/* Store the calling environment in ENV, also saving the
+   signal mask if SAVEMASK is nonzero.  Return 0.
+   This is the internal name for `sigsetjmp'.  */
+extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __THROWNL;
+
+/* Store the calling environment in ENV, not saving the signal mask.
+   Return 0.  */
+extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROWNL;
+
+/* Do not save the signal mask.  This is equivalent to the `_setjmp'
+   BSD function.  */
+#define setjmp(env)    _setjmp (env)
+
+
+__BEGIN_NAMESPACE_STD
+
+/* Jump to the environment saved in ENV, making the
+   `setjmp' call there return VAL, or 1 if VAL is 0.  */
+extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+
+__END_NAMESPACE_STD
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Same.  Usually `_longjmp' is used with `_setjmp', which does not save
+   the signal mask.  But it is how ENV was saved that determines whether
+   `longjmp' restores the mask; `_longjmp' is just an alias.  */
+extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+#endif
+
+
+#ifdef __USE_POSIX
+/* Use the same type for `jmp_buf' and `sigjmp_buf'.
+   The `__mask_was_saved' flag determines whether
+   or not `longjmp' will restore the signal mask.  */
+typedef struct __jmp_buf_tag sigjmp_buf[1];
+
+/* Store the calling environment in ENV, also saving the
+   signal mask if SAVEMASK is nonzero.  Return 0.  */
+# define sigsetjmp(env, savemask)      __sigsetjmp (env, savemask)
+
+/* Jump to the environment saved in ENV, making the
+   sigsetjmp call there return VAL, or 1 if VAL is 0.
+   Restore the signal mask if that sigsetjmp call saved it.
+   This is just an alias `longjmp'.  */
+extern void siglongjmp (sigjmp_buf __env, int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+#endif /* Use POSIX.  */
+
+
+/* Define helper functions to catch unsafe code.  */
+#if __USE_FORTIFY_LEVEL > 0
+# include <bits/setjmp2.h>
+#endif
+
+__END_DECLS
+
+#endif /* setjmp.h  */
diff --git a/lib/libdss-include/include/sgtty.h b/lib/libdss-include/include/sgtty.h
new file mode 100644 (file)
index 0000000..121cd26
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SGTTY_H
+#define        _SGTTY_H        1
+
+#include <features.h>
+
+#include <sys/ioctl.h>
+
+/* On some systems this type is not defined by <bits/ioctl-types.h>;
+   in that case, the functions are just stubs that return ENOSYS.  */
+struct sgttyb;
+
+__BEGIN_DECLS
+
+/* Fill in *PARAMS with terminal parameters associated with FD.  */
+extern int gtty (int __fd, struct sgttyb *__params) __THROW;
+
+/* Set the terminal parameters associated with FD to *PARAMS.  */
+extern int stty (int __fd, const struct sgttyb *__params) __THROW;
+
+
+__END_DECLS
+
+#endif /* sgtty.h  */
diff --git a/lib/libdss-include/include/shadow.h b/lib/libdss-include/include/shadow.h
new file mode 100644 (file)
index 0000000..010949f
--- /dev/null
@@ -0,0 +1,148 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Declaration of types and functions for shadow password suite.  */
+
+#ifndef _SHADOW_H
+#define _SHADOW_H      1
+
+#include <features.h>
+
+#include <paths.h>
+
+#define        __need_FILE
+#include <stdio.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Paths to the user database files.  */
+#define        SHADOW _PATH_SHADOW
+
+
+__BEGIN_DECLS
+
+/* Structure of the password file.  */
+struct spwd
+  {
+    char *sp_namp;             /* Login name.  */
+    char *sp_pwdp;             /* Encrypted password.  */
+    long int sp_lstchg;                /* Date of last change.  */
+    long int sp_min;           /* Minimum number of days between changes.  */
+    long int sp_max;           /* Maximum number of days between changes.  */
+    long int sp_warn;          /* Number of days to warn user to change
+                                  the password.  */
+    long int sp_inact;         /* Number of days the account may be
+                                  inactive.  */
+    long int sp_expire;                /* Number of days since 1970-01-01 until
+                                  account expires.  */
+    unsigned long int sp_flag; /* Reserved.  */
+  };
+
+
+/* Open database for reading.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void setspent (void);
+
+/* Close database.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endspent (void);
+
+/* Get next entry from database, perhaps after opening the file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *getspent (void);
+
+/* Get shadow entry matching NAME.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *getspnam (const char *__name);
+
+/* Read shadow entry from STRING.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *sgetspent (const char *__string);
+
+/* Read next shadow entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *fgetspent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putspent (const struct spwd *__p, FILE *__stream);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of some of the functions above.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getspent_r (struct spwd *__result_buf, char *__buffer,
+                      size_t __buflen, struct spwd **__result);
+
+extern int getspnam_r (const char *__name, struct spwd *__result_buf,
+                      char *__buffer, size_t __buflen,
+                      struct spwd **__result);
+
+extern int sgetspent_r (const char *__string, struct spwd *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct spwd **__result);
+
+extern int fgetspent_r (FILE *__stream, struct spwd *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct spwd **__result);
+#endif /* misc */
+
+
+/* The simple locking functionality provided here is not suitable for
+   multi-threaded applications.  */
+
+/* Protect password file against multi writers.  */
+extern int lckpwdf (void) __THROW;
+
+/* Unlock password file.  */
+extern int ulckpwdf (void) __THROW;
+
+__END_DECLS
+
+#endif /* shadow.h */
diff --git a/lib/libdss-include/include/signal.h b/lib/libdss-include/include/signal.h
new file mode 100644 (file)
index 0000000..47e995a
--- /dev/null
@@ -0,0 +1,377 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.14 Signal handling <signal.h>
+ */
+
+#ifndef        _SIGNAL_H
+
+#if !defined __need_sig_atomic_t && !defined __need_sigset_t
+# define _SIGNAL_H
+#endif
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/sigset.h>               /* __sigset_t, __sig_atomic_t.  */
+
+/* An integral type that can be modified atomically, without the
+   possibility of a signal arriving in the middle of the operation.  */
+#if defined __need_sig_atomic_t || defined _SIGNAL_H
+# ifndef __sig_atomic_t_defined
+#  define __sig_atomic_t_defined
+__BEGIN_NAMESPACE_STD
+typedef __sig_atomic_t sig_atomic_t;
+__END_NAMESPACE_STD
+# endif
+# undef __need_sig_atomic_t
+#endif
+
+#if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
+# ifndef __sigset_t_defined
+#  define __sigset_t_defined
+typedef __sigset_t sigset_t;
+# endif
+# undef __need_sigset_t
+#endif
+
+#ifdef _SIGNAL_H
+
+#include <bits/types.h>
+#include <bits/signum.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+#endif
+#ifdef __USE_XOPEN
+# endif
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif /* Unix98 */
+
+#ifdef __USE_POSIX199309
+/* We need `struct timespec' later on.  */
+# define __need_timespec
+# include <time.h>
+#endif
+
+#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
+/* Get the `siginfo_t' type plus the needed symbols.  */
+# include <bits/siginfo.h>
+#endif
+
+
+/* Type of a signal handler.  */
+typedef void (*__sighandler_t) (int);
+
+/* The X/Open definition of `signal' specifies the SVID semantic.  Use
+   the additional function `sysv_signal' when X/Open compatibility is
+   requested.  */
+extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#ifdef __USE_GNU
+extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#endif
+
+/* Set the handler for the signal SIG to HANDLER, returning the old
+   handler, or SIG_ERR on error.
+   By default `signal' has the BSD semantic.  */
+__BEGIN_NAMESPACE_STD
+#ifdef __USE_MISC
+extern __sighandler_t signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#else
+/* Make sure the used `signal' implementation is the SVID version. */
+# ifdef __REDIRECT_NTH
+extern __sighandler_t __REDIRECT_NTH (signal,
+                                     (int __sig, __sighandler_t __handler),
+                                     __sysv_signal);
+# else
+#  define signal __sysv_signal
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN
+/* The X/Open definition of `signal' conflicts with the BSD version.
+   So they defined another function `bsd_signal'.  */
+extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#endif
+
+/* Send signal SIG to process number PID.  If PID is zero,
+   send SIG to all processes in the current process's process group.
+   If PID is < -1, send SIG to all processes in process group - PID.  */
+#ifdef __USE_POSIX
+extern int kill (__pid_t __pid, int __sig) __THROW;
+#endif /* Use POSIX.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Send SIG to all processes in process group PGRP.
+   If PGRP is zero, send SIG to all processes in
+   the current process's process group.  */
+extern int killpg (__pid_t __pgrp, int __sig) __THROW;
+#endif /* Use misc || X/Open Unix.  */
+
+__BEGIN_NAMESPACE_STD
+/* Raise signal SIG, i.e., send SIG to yourself.  */
+extern int raise (int __sig) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* SVID names for the same things.  */
+extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
+     __THROW;
+extern int gsignal (int __sig) __THROW;
+#endif /* Use misc.  */
+
+#ifdef __USE_XOPEN2K8
+/* Print a message describing the meaning of the given signal number.  */
+extern void psignal (int __sig, const char *__s);
+
+/* Print a message describing the meaning of the given signal information.  */
+extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
+#endif /* POSIX 2008.  */
+
+
+
+/* The `sigpause' function in X/Open defines the argument as the
+   signal number.  This requires redirecting to another function
+   because the default version in glibc uses an old BSD interface.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+
+#ifdef __USE_XOPEN
+# ifdef __GNUC__
+extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
+# else
+extern int __sigpause (int __sig_or_mask, int __is_sig);
+/* Remove a signal from the signal mask and suspend the process.  */
+#  define sigpause(sig) __sigpause ((sig), 1)
+# endif
+#endif
+
+
+#ifdef __USE_MISC
+/* None of the following functions should be used anymore.  They are here
+   only for compatibility.  A single word (`int') is not guaranteed to be
+   enough to hold a complete signal mask and therefore these functions
+   simply do not work in many situations.  Use `sigprocmask' instead.  */
+
+/* Compute mask for signal SIG.  */
+# define sigmask(sig)  __sigmask(sig)
+
+/* Block signals in MASK, returning the old mask.  */
+extern int sigblock (int __mask) __THROW __attribute_deprecated__;
+
+/* Set the mask of blocked signals to MASK, returning the old mask.  */
+extern int sigsetmask (int __mask) __THROW __attribute_deprecated__;
+
+/* Return currently selected signal mask.  */
+extern int siggetmask (void) __THROW __attribute_deprecated__;
+#endif /* Use misc.  */
+
+
+#ifdef __USE_MISC
+# define NSIG  _NSIG
+#endif
+
+#ifdef __USE_GNU
+typedef __sighandler_t sighandler_t;
+#endif
+
+/* 4.4 BSD uses the name `sig_t' for this.  */
+#ifdef __USE_MISC
+typedef __sighandler_t sig_t;
+#endif
+
+#ifdef __USE_POSIX
+
+/* Clear all signals from SET.  */
+extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));
+
+/* Set all signals in SET.  */
+extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));
+
+/* Add SIGNO to SET.  */
+extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
+
+/* Remove SIGNO from SET.  */
+extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
+
+/* Return 1 if SIGNO is in SET, 0 if not.  */
+extern int sigismember (const sigset_t *__set, int __signo)
+     __THROW __nonnull ((1));
+
+# ifdef __USE_GNU
+/* Return non-empty value is SET is not empty.  */
+extern int sigisemptyset (const sigset_t *__set) __THROW __nonnull ((1));
+
+/* Build new signal set by combining the two inputs set using logical AND.  */
+extern int sigandset (sigset_t *__set, const sigset_t *__left,
+                     const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+
+/* Build new signal set by combining the two inputs set using logical OR.  */
+extern int sigorset (sigset_t *__set, const sigset_t *__left,
+                    const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+# endif /* GNU */
+
+/* Get the system-specific definitions of `struct sigaction'
+   and the `SA_*' and `SIG_*'. constants.  */
+# include <bits/sigaction.h>
+
+/* Get and/or change the set of blocked signals.  */
+extern int sigprocmask (int __how, const sigset_t *__restrict __set,
+                       sigset_t *__restrict __oset) __THROW;
+
+/* Change the set of blocked signals to SET,
+   wait until a signal arrives, and restore the set of blocked signals.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigsuspend (const sigset_t *__set) __nonnull ((1));
+
+/* Get and/or set the action for signal SIG.  */
+extern int sigaction (int __sig, const struct sigaction *__restrict __act,
+                     struct sigaction *__restrict __oact) __THROW;
+
+/* Put in SET all signals that are blocked and waiting to be delivered.  */
+extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));
+
+
+/* Select any of pending signals from SET or wait for any to arrive.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
+     __nonnull ((1, 2));
+
+# ifdef __USE_POSIX199309
+/* Select any of pending signals from SET and place information in INFO.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigwaitinfo (const sigset_t *__restrict __set,
+                       siginfo_t *__restrict __info) __nonnull ((1));
+
+/* Select any of pending signals from SET and place information in INFO.
+   Wait the time specified by TIMEOUT if no signal is pending.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigtimedwait (const sigset_t *__restrict __set,
+                        siginfo_t *__restrict __info,
+                        const struct timespec *__restrict __timeout)
+     __nonnull ((1));
+
+/* Send signal SIG to the process PID.  Associate data in VAL with the
+   signal.  */
+extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
+     __THROW;
+# endif        /* Use POSIX 199306.  */
+
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+
+/* Names of the signals.  This variable exists only for compatibility.
+   Use `strsignal' instead (see <string.h>).  */
+extern const char *const _sys_siglist[_NSIG];
+extern const char *const sys_siglist[_NSIG];
+
+
+/* Get machine-dependent `struct sigcontext' and signal subcodes.  */
+# include <bits/sigcontext.h>
+
+/* Restore the state saved in SCP.  */
+extern int sigreturn (struct sigcontext *__scp) __THROW;
+
+#endif /* Use misc.  */
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+# define __need_size_t
+# include <stddef.h>
+
+/* If INTERRUPT is nonzero, make signal SIG interrupt system calls
+   (causing them to fail with EINTR); if INTERRUPT is zero, make system
+   calls be restarted after signal SIG.  */
+extern int siginterrupt (int __sig, int __interrupt) __THROW;
+
+# include <bits/sigstack.h>
+# if defined __USE_XOPEN || defined __USE_XOPEN2K8
+/* This will define `ucontext_t' and `mcontext_t'.  */
+#  include <sys/ucontext.h>
+# endif
+
+/* Run signals handlers on the stack specified by SS (if not NULL).
+   If OSS is not NULL, it is filled in with the old signal stack status.
+   This interface is obsolete and on many platform not implemented.  */
+extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
+     __THROW __attribute_deprecated__;
+
+/* Alternate signal handler stack interface.
+   This interface should always be preferred over `sigstack'.  */
+extern int sigaltstack (const struct sigaltstack *__restrict __ss,
+                       struct sigaltstack *__restrict __oss) __THROW;
+
+#endif /* Use POSIX.1-2008 or X/Open Unix.  */
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Simplified interface for signal management.  */
+
+/* Add SIG to the calling process' signal mask.  */
+extern int sighold (int __sig) __THROW;
+
+/* Remove SIG from the calling process' signal mask.  */
+extern int sigrelse (int __sig) __THROW;
+
+/* Set the disposition of SIG to SIG_IGN.  */
+extern int sigignore (int __sig) __THROW;
+
+/* Set the disposition of SIG.  */
+extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __THROW;
+#endif
+
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+/* Some of the functions for handling signals in threaded programs must
+   be defined here.  */
+# include <bits/pthreadtypes.h>
+# include <bits/sigthread.h>
+#endif /* use Unix98 */
+
+/* The following functions are used internally in the C library and in
+   other code which need deep insights.  */
+
+/* Return number of available real-time signal with highest priority.  */
+extern int __libc_current_sigrtmin (void) __THROW;
+/* Return number of available real-time signal with lowest priority.  */
+extern int __libc_current_sigrtmax (void) __THROW;
+
+#endif /* signal.h  */
+
+__END_DECLS
+
+#endif /* not signal.h */
diff --git a/lib/libdss-include/include/sound/asequencer.h b/lib/libdss-include/include/sound/asequencer.h
new file mode 100644 (file)
index 0000000..71f9079
--- /dev/null
@@ -0,0 +1,615 @@
+/*
+ *  Main header file for the ALSA sequencer
+ *  Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
+ *            (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_ASEQUENCER_H
+#define __SOUND_ASEQUENCER_H
+
+#include <sound/asound.h>
+
+/** version of the sequencer */
+#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
+
+/**
+ * definition of sequencer event types
+ */
+
+/** system messages
+ * event data type = #snd_seq_result
+ */
+#define SNDRV_SEQ_EVENT_SYSTEM         0
+#define SNDRV_SEQ_EVENT_RESULT         1
+
+/** note messages (channel specific)
+ * event data type = #snd_seq_ev_note
+ */
+#define SNDRV_SEQ_EVENT_NOTE           5
+#define SNDRV_SEQ_EVENT_NOTEON         6
+#define SNDRV_SEQ_EVENT_NOTEOFF                7
+#define SNDRV_SEQ_EVENT_KEYPRESS       8
+       
+/** control messages (channel specific)
+ * event data type = #snd_seq_ev_ctrl
+ */
+#define SNDRV_SEQ_EVENT_CONTROLLER     10
+#define SNDRV_SEQ_EVENT_PGMCHANGE      11
+#define SNDRV_SEQ_EVENT_CHANPRESS      12
+#define SNDRV_SEQ_EVENT_PITCHBEND      13      /**< from -8192 to 8191 */
+#define SNDRV_SEQ_EVENT_CONTROL14      14      /**< 14 bit controller value */
+#define SNDRV_SEQ_EVENT_NONREGPARAM    15      /**< 14 bit NRPN address + 14 bit unsigned value */
+#define SNDRV_SEQ_EVENT_REGPARAM       16      /**< 14 bit RPN address + 14 bit unsigned value */
+
+/** synchronisation messages
+ * event data type = #snd_seq_ev_ctrl
+ */
+#define SNDRV_SEQ_EVENT_SONGPOS                20      /* Song Position Pointer with LSB and MSB values */
+#define SNDRV_SEQ_EVENT_SONGSEL                21      /* Song Select with song ID number */
+#define SNDRV_SEQ_EVENT_QFRAME         22      /* midi time code quarter frame */
+#define SNDRV_SEQ_EVENT_TIMESIGN       23      /* SMF Time Signature event */
+#define SNDRV_SEQ_EVENT_KEYSIGN                24      /* SMF Key Signature event */
+               
+/** timer messages
+ * event data type = snd_seq_ev_queue_control
+ */
+#define SNDRV_SEQ_EVENT_START          30      /* midi Real Time Start message */
+#define SNDRV_SEQ_EVENT_CONTINUE       31      /* midi Real Time Continue message */
+#define SNDRV_SEQ_EVENT_STOP           32      /* midi Real Time Stop message */       
+#define        SNDRV_SEQ_EVENT_SETPOS_TICK     33      /* set tick queue position */
+#define SNDRV_SEQ_EVENT_SETPOS_TIME    34      /* set realtime queue position */
+#define SNDRV_SEQ_EVENT_TEMPO          35      /* (SMF) Tempo event */
+#define SNDRV_SEQ_EVENT_CLOCK          36      /* midi Real Time Clock message */
+#define SNDRV_SEQ_EVENT_TICK           37      /* midi Real Time Tick message */
+#define SNDRV_SEQ_EVENT_QUEUE_SKEW     38      /* skew queue tempo */
+
+/** others
+ * event data type = none
+ */
+#define SNDRV_SEQ_EVENT_TUNE_REQUEST   40      /* tune request */
+#define SNDRV_SEQ_EVENT_RESET          41      /* reset to power-on state */
+#define SNDRV_SEQ_EVENT_SENSING                42      /* "active sensing" event */
+
+/** echo back, kernel private messages
+ * event data type = any type
+ */
+#define SNDRV_SEQ_EVENT_ECHO           50      /* echo event */
+#define SNDRV_SEQ_EVENT_OSS            51      /* OSS raw event */
+
+/** system status messages (broadcast for subscribers)
+ * event data type = snd_seq_addr
+ */
+#define SNDRV_SEQ_EVENT_CLIENT_START   60      /* new client has connected */
+#define SNDRV_SEQ_EVENT_CLIENT_EXIT    61      /* client has left the system */
+#define SNDRV_SEQ_EVENT_CLIENT_CHANGE  62      /* client status/info has changed */
+#define SNDRV_SEQ_EVENT_PORT_START     63      /* new port was created */
+#define SNDRV_SEQ_EVENT_PORT_EXIT      64      /* port was deleted from system */
+#define SNDRV_SEQ_EVENT_PORT_CHANGE    65      /* port status/info has changed */
+
+/** port connection changes
+ * event data type = snd_seq_connect
+ */
+#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED        66      /* ports connected */
+#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67   /* ports disconnected */
+
+/* 70-89:  synthesizer events - obsoleted */
+
+/** user-defined events with fixed length
+ * event data type = any
+ */
+#define SNDRV_SEQ_EVENT_USR0           90
+#define SNDRV_SEQ_EVENT_USR1           91
+#define SNDRV_SEQ_EVENT_USR2           92
+#define SNDRV_SEQ_EVENT_USR3           93
+#define SNDRV_SEQ_EVENT_USR4           94
+#define SNDRV_SEQ_EVENT_USR5           95
+#define SNDRV_SEQ_EVENT_USR6           96
+#define SNDRV_SEQ_EVENT_USR7           97
+#define SNDRV_SEQ_EVENT_USR8           98
+#define SNDRV_SEQ_EVENT_USR9           99
+
+/* 100-118: instrument layer - obsoleted */
+/* 119-129: reserved */
+
+/* 130-139: variable length events
+ * event data type = snd_seq_ev_ext
+ * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
+ */
+#define SNDRV_SEQ_EVENT_SYSEX          130     /* system exclusive data (variable length) */
+#define SNDRV_SEQ_EVENT_BOUNCE         131     /* error event */
+/* 132-134: reserved */
+#define SNDRV_SEQ_EVENT_USR_VAR0       135
+#define SNDRV_SEQ_EVENT_USR_VAR1       136
+#define SNDRV_SEQ_EVENT_USR_VAR2       137
+#define SNDRV_SEQ_EVENT_USR_VAR3       138
+#define SNDRV_SEQ_EVENT_USR_VAR4       139
+
+/* 150-151: kernel events with quote - DO NOT use in user clients */
+#define SNDRV_SEQ_EVENT_KERNEL_ERROR   150
+#define SNDRV_SEQ_EVENT_KERNEL_QUOTE   151     /* obsolete */
+
+/* 152-191: reserved */
+
+/* 192-254: hardware specific events */
+
+/* 255: special event */
+#define SNDRV_SEQ_EVENT_NONE           255
+
+
+typedef unsigned char snd_seq_event_type_t;
+
+/** event address */
+struct snd_seq_addr {
+       unsigned char client;   /**< Client number:         0..255, 255 = broadcast to all clients */
+       unsigned char port;     /**< Port within client:    0..255, 255 = broadcast to all ports */
+};
+
+/** port connection */
+struct snd_seq_connect {
+       struct snd_seq_addr sender;
+       struct snd_seq_addr dest;
+};
+
+
+#define SNDRV_SEQ_ADDRESS_UNKNOWN      253     /* unknown source */
+#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS  254     /* send event to all subscribed ports */
+#define SNDRV_SEQ_ADDRESS_BROADCAST    255     /* send event to all queues/clients/ports/channels */
+#define SNDRV_SEQ_QUEUE_DIRECT         253     /* direct dispatch */
+
+       /* event mode flag - NOTE: only 8 bits available! */
+#define SNDRV_SEQ_TIME_STAMP_TICK      (0<<0) /* timestamp in clock ticks */
+#define SNDRV_SEQ_TIME_STAMP_REAL      (1<<0) /* timestamp in real time */
+#define SNDRV_SEQ_TIME_STAMP_MASK      (1<<0)
+
+#define SNDRV_SEQ_TIME_MODE_ABS                (0<<1)  /* absolute timestamp */
+#define SNDRV_SEQ_TIME_MODE_REL                (1<<1)  /* relative to current time */
+#define SNDRV_SEQ_TIME_MODE_MASK       (1<<1)
+
+#define SNDRV_SEQ_EVENT_LENGTH_FIXED   (0<<2)  /* fixed event size */
+#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE        (1<<2)  /* variable event size */
+#define SNDRV_SEQ_EVENT_LENGTH_VARUSR  (2<<2)  /* variable event size - user memory space */
+#define SNDRV_SEQ_EVENT_LENGTH_MASK    (3<<2)
+
+#define SNDRV_SEQ_PRIORITY_NORMAL      (0<<4)  /* normal priority */
+#define SNDRV_SEQ_PRIORITY_HIGH                (1<<4)  /* event should be processed before others */
+#define SNDRV_SEQ_PRIORITY_MASK                (1<<4)
+
+
+       /* note event */
+struct snd_seq_ev_note {
+       unsigned char channel;
+       unsigned char note;
+       unsigned char velocity;
+       unsigned char off_velocity;     /* only for SNDRV_SEQ_EVENT_NOTE */
+       unsigned int duration;          /* only for SNDRV_SEQ_EVENT_NOTE */
+};
+
+       /* controller event */
+struct snd_seq_ev_ctrl {
+       unsigned char channel;
+       unsigned char unused1, unused2, unused3;        /* pad */
+       unsigned int param;
+       signed int value;
+};
+
+       /* generic set of bytes (12x8 bit) */
+struct snd_seq_ev_raw8 {
+       unsigned char d[12];    /* 8 bit value */
+};
+
+       /* generic set of integers (3x32 bit) */
+struct snd_seq_ev_raw32 {
+       unsigned int d[3];      /* 32 bit value */
+};
+
+       /* external stored data */
+struct snd_seq_ev_ext {
+       unsigned int len;       /* length of data */
+       void *ptr;              /* pointer to data (note: maybe 64-bit) */
+} __attribute__((packed));
+
+struct snd_seq_result {
+       int event;              /* processed event type */
+       int result;
+};
+
+
+struct snd_seq_real_time {
+       unsigned int tv_sec;    /* seconds */
+       unsigned int tv_nsec;   /* nanoseconds */
+};
+
+typedef unsigned int snd_seq_tick_time_t;      /* midi ticks */
+
+union snd_seq_timestamp {
+       snd_seq_tick_time_t tick;
+       struct snd_seq_real_time time;
+};
+
+struct snd_seq_queue_skew {
+       unsigned int value;
+       unsigned int base;
+};
+
+       /* queue timer control */
+struct snd_seq_ev_queue_control {
+       unsigned char queue;                    /* affected queue */
+       unsigned char pad[3];                   /* reserved */
+       union {
+               signed int value;               /* affected value (e.g. tempo) */
+               union snd_seq_timestamp time;   /* time */
+               unsigned int position;          /* sync position */
+               struct snd_seq_queue_skew skew;
+               unsigned int d32[2];
+               unsigned char d8[8];
+       } param;
+};
+
+       /* quoted event - inside the kernel only */
+struct snd_seq_ev_quote {
+       struct snd_seq_addr origin;             /* original sender */
+       unsigned short value;           /* optional data */
+       struct snd_seq_event *event;            /* quoted event */
+} __attribute__((packed));
+
+
+       /* sequencer event */
+struct snd_seq_event {
+       snd_seq_event_type_t type;      /* event type */
+       unsigned char flags;            /* event flags */
+       char tag;
+       
+       unsigned char queue;            /* schedule queue */
+       union snd_seq_timestamp time;   /* schedule time */
+
+
+       struct snd_seq_addr source;     /* source address */
+       struct snd_seq_addr dest;       /* destination address */
+
+       union {                         /* event data... */
+               struct snd_seq_ev_note note;
+               struct snd_seq_ev_ctrl control;
+               struct snd_seq_ev_raw8 raw8;
+               struct snd_seq_ev_raw32 raw32;
+               struct snd_seq_ev_ext ext;
+               struct snd_seq_ev_queue_control queue;
+               union snd_seq_timestamp time;
+               struct snd_seq_addr addr;
+               struct snd_seq_connect connect;
+               struct snd_seq_result result;
+               struct snd_seq_ev_quote quote;
+       } data;
+};
+
+
+/*
+ * bounce event - stored as variable size data
+ */
+struct snd_seq_event_bounce {
+       int err;
+       struct snd_seq_event event;
+       /* external data follows here. */
+};
+
+
+       /* system information */
+struct snd_seq_system_info {
+       int queues;                     /* maximum queues count */
+       int clients;                    /* maximum clients count */
+       int ports;                      /* maximum ports per client */
+       int channels;                   /* maximum channels per port */
+       int cur_clients;                /* current clients */
+       int cur_queues;                 /* current queues */
+       char reserved[24];
+};
+
+
+       /* system running information */
+struct snd_seq_running_info {
+       unsigned char client;           /* client id */
+       unsigned char big_endian;       /* 1 = big-endian */
+       unsigned char cpu_mode;         /* 4 = 32bit, 8 = 64bit */
+       unsigned char pad;              /* reserved */
+       unsigned char reserved[12];
+};
+
+
+       /* known client numbers */
+#define SNDRV_SEQ_CLIENT_SYSTEM                0
+       /* internal client numbers */
+#define SNDRV_SEQ_CLIENT_DUMMY         14      /* midi through */
+#define SNDRV_SEQ_CLIENT_OSS           15      /* oss sequencer emulator */
+
+
+       /* client types */
+typedef int __bitwise snd_seq_client_type_t;
+#define        NO_CLIENT       ((snd_seq_client_type_t) 0)
+#define        USER_CLIENT     ((snd_seq_client_type_t) 1)
+#define        KERNEL_CLIENT   ((snd_seq_client_type_t) 2)
+                        
+       /* event filter flags */
+#define SNDRV_SEQ_FILTER_BROADCAST     (1<<0)  /* accept broadcast messages */
+#define SNDRV_SEQ_FILTER_MULTICAST     (1<<1)  /* accept multicast messages */
+#define SNDRV_SEQ_FILTER_BOUNCE                (1<<2)  /* accept bounce event in error */
+#define SNDRV_SEQ_FILTER_USE_EVENT     (1<<31) /* use event filter */
+
+struct snd_seq_client_info {
+       int client;                     /* client number to inquire */
+       snd_seq_client_type_t type;     /* client type */
+       char name[64];                  /* client name */
+       unsigned int filter;            /* filter flags */
+       unsigned char multicast_filter[8]; /* multicast filter bitmap */
+       unsigned char event_filter[32]; /* event filter bitmap */
+       int num_ports;                  /* RO: number of ports */
+       int event_lost;                 /* number of lost events */
+       char reserved[64];              /* for future use */
+};
+
+
+/* client pool size */
+struct snd_seq_client_pool {
+       int client;                     /* client number to inquire */
+       int output_pool;                /* outgoing (write) pool size */
+       int input_pool;                 /* incoming (read) pool size */
+       int output_room;                /* minimum free pool size for select/blocking mode */
+       int output_free;                /* unused size */
+       int input_free;                 /* unused size */
+       char reserved[64];
+};
+
+
+/* Remove events by specified criteria */
+
+#define SNDRV_SEQ_REMOVE_INPUT         (1<<0)  /* Flush input queues */
+#define SNDRV_SEQ_REMOVE_OUTPUT                (1<<1)  /* Flush output queues */
+#define SNDRV_SEQ_REMOVE_DEST          (1<<2)  /* Restrict by destination q:client:port */
+#define SNDRV_SEQ_REMOVE_DEST_CHANNEL  (1<<3)  /* Restrict by channel */
+#define SNDRV_SEQ_REMOVE_TIME_BEFORE   (1<<4)  /* Restrict to before time */
+#define SNDRV_SEQ_REMOVE_TIME_AFTER    (1<<5)  /* Restrict to time or after */
+#define SNDRV_SEQ_REMOVE_TIME_TICK     (1<<6)  /* Time is in ticks */
+#define SNDRV_SEQ_REMOVE_EVENT_TYPE    (1<<7)  /* Restrict to event type */
+#define SNDRV_SEQ_REMOVE_IGNORE_OFF    (1<<8)  /* Do not flush off events */
+#define SNDRV_SEQ_REMOVE_TAG_MATCH     (1<<9)  /* Restrict to events with given tag */
+
+struct snd_seq_remove_events {
+       unsigned int  remove_mode;      /* Flags that determine what gets removed */
+
+       union snd_seq_timestamp time;
+
+       unsigned char queue;    /* Queue for REMOVE_DEST */
+       struct snd_seq_addr dest;       /* Address for REMOVE_DEST */
+       unsigned char channel;  /* Channel for REMOVE_DEST */
+
+       int  type;      /* For REMOVE_EVENT_TYPE */
+       char  tag;      /* Tag for REMOVE_TAG */
+
+       int  reserved[10];      /* To allow for future binary compatibility */
+
+};
+
+
+       /* known port numbers */
+#define SNDRV_SEQ_PORT_SYSTEM_TIMER    0
+#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1
+
+       /* port capabilities (32 bits) */
+#define SNDRV_SEQ_PORT_CAP_READ                (1<<0)  /* readable from this port */
+#define SNDRV_SEQ_PORT_CAP_WRITE       (1<<1)  /* writable to this port */
+
+#define SNDRV_SEQ_PORT_CAP_SYNC_READ   (1<<2)
+#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE  (1<<3)
+
+#define SNDRV_SEQ_PORT_CAP_DUPLEX      (1<<4)
+
+#define SNDRV_SEQ_PORT_CAP_SUBS_READ   (1<<5)  /* allow read subscription */
+#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE  (1<<6)  /* allow write subscription */
+#define SNDRV_SEQ_PORT_CAP_NO_EXPORT   (1<<7)  /* routing not allowed */
+
+       /* port type */
+#define SNDRV_SEQ_PORT_TYPE_SPECIFIC   (1<<0)  /* hardware specific */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1)        /* generic MIDI device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM    (1<<2)  /* General MIDI compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GS    (1<<3)  /* GS compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_XG    (1<<4)  /* XG compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32  (1<<5)  /* MT-32 compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2   (1<<6)  /* General MIDI 2 compatible device */
+
+/* other standards...*/
+#define SNDRV_SEQ_PORT_TYPE_SYNTH      (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */
+#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11)      /* Sampling device (support sample download) */
+#define SNDRV_SEQ_PORT_TYPE_SAMPLE     (1<<12) /* Sampling device (sample can be downloaded at any time) */
+/*...*/
+#define SNDRV_SEQ_PORT_TYPE_HARDWARE   (1<<16) /* driver for a hardware device */
+#define SNDRV_SEQ_PORT_TYPE_SOFTWARE   (1<<17) /* implemented in software */
+#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER        (1<<18) /* generates sound */
+#define SNDRV_SEQ_PORT_TYPE_PORT       (1<<19) /* connects to other device(s) */
+#define SNDRV_SEQ_PORT_TYPE_APPLICATION        (1<<20) /* application (sequencer/editor) */
+
+/* misc. conditioning flags */
+#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT  (1<<0)
+#define SNDRV_SEQ_PORT_FLG_TIMESTAMP   (1<<1)
+#define SNDRV_SEQ_PORT_FLG_TIME_REAL   (1<<2)
+
+struct snd_seq_port_info {
+       struct snd_seq_addr addr;       /* client/port numbers */
+       char name[64];                  /* port name */
+
+       unsigned int capability;        /* port capability bits */
+       unsigned int type;              /* port type bits */
+       int midi_channels;              /* channels per MIDI port */
+       int midi_voices;                /* voices per MIDI port */
+       int synth_voices;               /* voices per SYNTH port */
+
+       int read_use;                   /* R/O: subscribers for output (from this port) */
+       int write_use;                  /* R/O: subscribers for input (to this port) */
+
+       void *kernel;                   /* reserved for kernel use (must be NULL) */
+       unsigned int flags;             /* misc. conditioning */
+       unsigned char time_queue;       /* queue # for timestamping */
+       char reserved[59];              /* for future use */
+};
+
+
+/* queue flags */
+#define SNDRV_SEQ_QUEUE_FLG_SYNC       (1<<0)  /* sync enabled */
+
+/* queue information */
+struct snd_seq_queue_info {
+       int queue;              /* queue id */
+
+       /*
+        *  security settings, only owner of this queue can start/stop timer
+        *  etc. if the queue is locked for other clients
+        */
+       int owner;              /* client id for owner of the queue */
+       unsigned locked:1;      /* timing queue locked for other queues */
+       char name[64];          /* name of this queue */
+       unsigned int flags;     /* flags */
+       char reserved[60];      /* for future use */
+
+};
+
+/* queue info/status */
+struct snd_seq_queue_status {
+       int queue;                      /* queue id */
+       int events;                     /* read-only - queue size */
+       snd_seq_tick_time_t tick;       /* current tick */
+       struct snd_seq_real_time time;  /* current time */
+       int running;                    /* running state of queue */
+       int flags;                      /* various flags */
+       char reserved[64];              /* for the future */
+};
+
+
+/* queue tempo */
+struct snd_seq_queue_tempo {
+       int queue;                      /* sequencer queue */
+       unsigned int tempo;             /* current tempo, us/tick */
+       int ppq;                        /* time resolution, ticks/quarter */
+       unsigned int skew_value;        /* queue skew */
+       unsigned int skew_base;         /* queue skew base */
+       char reserved[24];              /* for the future */
+};
+
+
+/* sequencer timer sources */
+#define SNDRV_SEQ_TIMER_ALSA           0       /* ALSA timer */
+#define SNDRV_SEQ_TIMER_MIDI_CLOCK     1       /* Midi Clock (CLOCK event) */
+#define SNDRV_SEQ_TIMER_MIDI_TICK      2       /* Midi Timer Tick (TICK event) */
+
+/* queue timer info */
+struct snd_seq_queue_timer {
+       int queue;                      /* sequencer queue */
+       int type;                       /* source timer type */
+       union {
+               struct {
+                       struct snd_timer_id id; /* ALSA's timer ID */
+                       unsigned int resolution;        /* resolution in Hz */
+               } alsa;
+       } u;
+       char reserved[64];              /* for the future use */
+};
+
+
+struct snd_seq_queue_client {
+       int queue;              /* sequencer queue */
+       int client;             /* sequencer client */
+       int used;               /* queue is used with this client
+                                  (must be set for accepting events) */
+       /* per client watermarks */
+       char reserved[64];      /* for future use */
+};
+
+
+#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE  (1<<0)  /* exclusive connection */
+#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP  (1<<1)
+#define SNDRV_SEQ_PORT_SUBS_TIME_REAL  (1<<2)
+
+struct snd_seq_port_subscribe {
+       struct snd_seq_addr sender;     /* sender address */
+       struct snd_seq_addr dest;       /* destination address */
+       unsigned int voices;            /* number of voices to be allocated (0 = don't care) */
+       unsigned int flags;             /* modes */
+       unsigned char queue;            /* input time-stamp queue (optional) */
+       unsigned char pad[3];           /* reserved */
+       char reserved[64];
+};
+
+/* type of query subscription */
+#define SNDRV_SEQ_QUERY_SUBS_READ      0
+#define SNDRV_SEQ_QUERY_SUBS_WRITE     1
+
+struct snd_seq_query_subs {
+       struct snd_seq_addr root;       /* client/port id to be searched */
+       int type;               /* READ or WRITE */
+       int index;              /* 0..N-1 */
+       int num_subs;           /* R/O: number of subscriptions on this port */
+       struct snd_seq_addr addr;       /* R/O: result */
+       unsigned char queue;    /* R/O: result */
+       unsigned int flags;     /* R/O: result */
+       char reserved[64];      /* for future use */
+};
+
+
+/*
+ *  IOCTL commands
+ */
+
+#define SNDRV_SEQ_IOCTL_PVERSION       _IOR ('S', 0x00, int)
+#define SNDRV_SEQ_IOCTL_CLIENT_ID      _IOR ('S', 0x01, int)
+#define SNDRV_SEQ_IOCTL_SYSTEM_INFO    _IOWR('S', 0x02, struct snd_seq_system_info)
+#define SNDRV_SEQ_IOCTL_RUNNING_MODE   _IOWR('S', 0x03, struct snd_seq_running_info)
+
+#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO        _IOWR('S', 0x10, struct snd_seq_client_info)
+#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO        _IOW ('S', 0x11, struct snd_seq_client_info)
+
+#define SNDRV_SEQ_IOCTL_CREATE_PORT    _IOWR('S', 0x20, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_DELETE_PORT    _IOW ('S', 0x21, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_GET_PORT_INFO  _IOWR('S', 0x22, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_SET_PORT_INFO  _IOW ('S', 0x23, struct snd_seq_port_info)
+
+#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe)
+#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
+
+#define SNDRV_SEQ_IOCTL_CREATE_QUEUE   _IOWR('S', 0x32, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_DELETE_QUEUE   _IOW ('S', 0x33, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE        _IOWR('S', 0x36, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO        _IOWR('S', 0x41, struct snd_seq_queue_tempo)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO        _IOW ('S', 0x42, struct snd_seq_queue_tempo)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_OWNER        _IOWR('S', 0x43, struct snd_seq_queue_owner)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_OWNER        _IOW ('S', 0x44, struct snd_seq_queue_owner)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER        _IOWR('S', 0x45, struct snd_seq_queue_timer)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER        _IOW ('S', 0x46, struct snd_seq_queue_timer)
+/* XXX
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_SYNC _IOWR('S', 0x53, struct snd_seq_queue_sync)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_SYNC _IOW ('S', 0x54, struct snd_seq_queue_sync)
+*/
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT       _IOWR('S', 0x49, struct snd_seq_queue_client)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT       _IOW ('S', 0x4a, struct snd_seq_queue_client)
+#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL        _IOWR('S', 0x4b, struct snd_seq_client_pool)
+#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL        _IOW ('S', 0x4c, struct snd_seq_client_pool)
+#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS  _IOW ('S', 0x4e, struct snd_seq_remove_events)
+#define SNDRV_SEQ_IOCTL_QUERY_SUBS     _IOWR('S', 0x4f, struct snd_seq_query_subs)
+#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION       _IOWR('S', 0x50, struct snd_seq_port_subscribe)
+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT      _IOWR('S', 0x51, struct snd_seq_client_info)
+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT        _IOWR('S', 0x52, struct snd_seq_port_info)
+
+#endif /* __SOUND_ASEQUENCER_H */
diff --git a/lib/libdss-include/include/sound/asound.h b/lib/libdss-include/include/sound/asound.h
new file mode 100644 (file)
index 0000000..f5f74e9
--- /dev/null
@@ -0,0 +1,1015 @@
+/*
+ *  Advanced Linux Sound Architecture - ALSA - Driver
+ *  Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
+ *                             Abramo Bagnara <abramo@alsa-project.org>
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#ifndef __SOUND_ASOUND_H
+#define __SOUND_ASOUND_H
+
+#include <linux/types.h>
+
+#include <stdlib.h>
+
+/*
+ *  protocol version
+ */
+
+#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
+#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
+#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
+#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
+#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
+       (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
+        (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
+          SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
+
+/****************************************************************************
+ *                                                                          *
+ *        Digital audio interface                                          *
+ *                                                                          *
+ ****************************************************************************/
+
+struct snd_aes_iec958 {
+       unsigned char status[24];       /* AES/IEC958 channel status bits */
+       unsigned char subcode[147];     /* AES/IEC958 subcode bits */
+       unsigned char pad;              /* nothing */
+       unsigned char dig_subframe[4];  /* AES/IEC958 subframe bits */
+};
+
+/****************************************************************************
+ *                                                                          *
+ *        CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort                    *
+ *                                                                          *
+ ****************************************************************************/
+
+struct snd_cea_861_aud_if {
+       unsigned char db1_ct_cc; /* coding type and channel count */
+       unsigned char db2_sf_ss; /* sample frequency and size */
+       unsigned char db3; /* not used, all zeros */
+       unsigned char db4_ca; /* channel allocation code */
+       unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */
+};
+
+/****************************************************************************
+ *                                                                          *
+ *      Section for driver hardware dependent interface - /dev/snd/hw?      *
+ *                                                                          *
+ ****************************************************************************/
+
+#define SNDRV_HWDEP_VERSION            SNDRV_PROTOCOL_VERSION(1, 0, 1)
+
+enum {
+       SNDRV_HWDEP_IFACE_OPL2 = 0,
+       SNDRV_HWDEP_IFACE_OPL3,
+       SNDRV_HWDEP_IFACE_OPL4,
+       SNDRV_HWDEP_IFACE_SB16CSP,      /* Creative Signal Processor */
+       SNDRV_HWDEP_IFACE_EMU10K1,      /* FX8010 processor in EMU10K1 chip */
+       SNDRV_HWDEP_IFACE_YSS225,       /* Yamaha FX processor */
+       SNDRV_HWDEP_IFACE_ICS2115,      /* Wavetable synth */
+       SNDRV_HWDEP_IFACE_SSCAPE,       /* Ensoniq SoundScape ISA card (MC68EC000) */
+       SNDRV_HWDEP_IFACE_VX,           /* Digigram VX cards */
+       SNDRV_HWDEP_IFACE_MIXART,       /* Digigram miXart cards */
+       SNDRV_HWDEP_IFACE_USX2Y,        /* Tascam US122, US224 & US428 usb */
+       SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */  
+       SNDRV_HWDEP_IFACE_BLUETOOTH,    /* Bluetooth audio */
+       SNDRV_HWDEP_IFACE_USX2Y_PCM,    /* Tascam US122, US224 & US428 rawusb pcm */
+       SNDRV_HWDEP_IFACE_PCXHR,        /* Digigram PCXHR */
+       SNDRV_HWDEP_IFACE_SB_RC,        /* SB Extigy/Audigy2NX remote control */
+       SNDRV_HWDEP_IFACE_HDA,          /* HD-audio */
+       SNDRV_HWDEP_IFACE_USB_STREAM,   /* direct access to usb stream */
+       SNDRV_HWDEP_IFACE_FW_DICE,      /* TC DICE FireWire device */
+       SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */
+       SNDRV_HWDEP_IFACE_FW_BEBOB,     /* BridgeCo BeBoB based device */
+       SNDRV_HWDEP_IFACE_FW_OXFW,      /* Oxford OXFW970/971 based device */
+       SNDRV_HWDEP_IFACE_FW_DIGI00X,   /* Digidesign Digi 002/003 family */
+       SNDRV_HWDEP_IFACE_FW_TASCAM,    /* TASCAM FireWire series */
+
+       /* Don't forget to change the following: */
+       SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_TASCAM
+};
+
+struct snd_hwdep_info {
+       unsigned int device;            /* WR: device number */
+       int card;                       /* R: card number */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* hwdep name */
+       int iface;                      /* hwdep interface */
+       unsigned char reserved[64];     /* reserved for future */
+};
+
+/* generic DSP loader */
+struct snd_hwdep_dsp_status {
+       unsigned int version;           /* R: driver-specific version */
+       unsigned char id[32];           /* R: driver-specific ID string */
+       unsigned int num_dsps;          /* R: number of DSP images to transfer */
+       unsigned int dsp_loaded;        /* R: bit flags indicating the loaded DSPs */
+       unsigned int chip_ready;        /* R: 1 = initialization finished */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+struct snd_hwdep_dsp_image {
+       unsigned int index;             /* W: DSP index */
+       unsigned char name[64];         /* W: ID (e.g. file name) */
+       unsigned char *image;   /* W: binary image */
+       size_t length;                  /* W: size of image in bytes */
+       unsigned long driver_data;      /* W: driver-specific data */
+};
+
+#define SNDRV_HWDEP_IOCTL_PVERSION     _IOR ('H', 0x00, int)
+#define SNDRV_HWDEP_IOCTL_INFO         _IOR ('H', 0x01, struct snd_hwdep_info)
+#define SNDRV_HWDEP_IOCTL_DSP_STATUS   _IOR('H', 0x02, struct snd_hwdep_dsp_status)
+#define SNDRV_HWDEP_IOCTL_DSP_LOAD     _IOW('H', 0x03, struct snd_hwdep_dsp_image)
+
+/*****************************************************************************
+ *                                                                           *
+ *             Digital Audio (PCM) interface - /dev/snd/pcm??                *
+ *                                                                           *
+ *****************************************************************************/
+
+#define SNDRV_PCM_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 13)
+
+typedef unsigned long snd_pcm_uframes_t;
+typedef signed long snd_pcm_sframes_t;
+
+enum {
+       SNDRV_PCM_CLASS_GENERIC = 0,    /* standard mono or stereo device */
+       SNDRV_PCM_CLASS_MULTI,          /* multichannel device */
+       SNDRV_PCM_CLASS_MODEM,          /* software modem class */
+       SNDRV_PCM_CLASS_DIGITIZER,      /* digitizer class */
+       /* Don't forget to change the following: */
+       SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
+};
+
+enum {
+       SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */
+       SNDRV_PCM_SUBCLASS_MULTI_MIX,   /* multichannel subdevices are mixed together */
+       /* Don't forget to change the following: */
+       SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
+};
+
+enum {
+       SNDRV_PCM_STREAM_PLAYBACK = 0,
+       SNDRV_PCM_STREAM_CAPTURE,
+       SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
+};
+
+typedef int __bitwise snd_pcm_access_t;
+#define        SNDRV_PCM_ACCESS_MMAP_INTERLEAVED       ((snd_pcm_access_t) 0) /* interleaved mmap */
+#define        SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED    ((snd_pcm_access_t) 1) /* noninterleaved mmap */
+#define        SNDRV_PCM_ACCESS_MMAP_COMPLEX           ((snd_pcm_access_t) 2) /* complex mmap */
+#define        SNDRV_PCM_ACCESS_RW_INTERLEAVED         ((snd_pcm_access_t) 3) /* readi/writei */
+#define        SNDRV_PCM_ACCESS_RW_NONINTERLEAVED      ((snd_pcm_access_t) 4) /* readn/writen */
+#define        SNDRV_PCM_ACCESS_LAST           SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
+
+typedef int __bitwise snd_pcm_format_t;
+#define        SNDRV_PCM_FORMAT_S8     ((snd_pcm_format_t) 0)
+#define        SNDRV_PCM_FORMAT_U8     ((snd_pcm_format_t) 1)
+#define        SNDRV_PCM_FORMAT_S16_LE ((snd_pcm_format_t) 2)
+#define        SNDRV_PCM_FORMAT_S16_BE ((snd_pcm_format_t) 3)
+#define        SNDRV_PCM_FORMAT_U16_LE ((snd_pcm_format_t) 4)
+#define        SNDRV_PCM_FORMAT_U16_BE ((snd_pcm_format_t) 5)
+#define        SNDRV_PCM_FORMAT_S24_LE ((snd_pcm_format_t) 6) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_S24_BE ((snd_pcm_format_t) 7) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_U24_LE ((snd_pcm_format_t) 8) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_U24_BE ((snd_pcm_format_t) 9) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_S32_LE ((snd_pcm_format_t) 10)
+#define        SNDRV_PCM_FORMAT_S32_BE ((snd_pcm_format_t) 11)
+#define        SNDRV_PCM_FORMAT_U32_LE ((snd_pcm_format_t) 12)
+#define        SNDRV_PCM_FORMAT_U32_BE ((snd_pcm_format_t) 13)
+#define        SNDRV_PCM_FORMAT_FLOAT_LE       ((snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT_BE       ((snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT64_LE     ((snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT64_BE     ((snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
+#define        SNDRV_PCM_FORMAT_MU_LAW         ((snd_pcm_format_t) 20)
+#define        SNDRV_PCM_FORMAT_A_LAW          ((snd_pcm_format_t) 21)
+#define        SNDRV_PCM_FORMAT_IMA_ADPCM      ((snd_pcm_format_t) 22)
+#define        SNDRV_PCM_FORMAT_MPEG           ((snd_pcm_format_t) 23)
+#define        SNDRV_PCM_FORMAT_GSM            ((snd_pcm_format_t) 24)
+#define        SNDRV_PCM_FORMAT_SPECIAL        ((snd_pcm_format_t) 31)
+#define        SNDRV_PCM_FORMAT_S24_3LE        ((snd_pcm_format_t) 32) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S24_3BE        ((snd_pcm_format_t) 33) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U24_3LE        ((snd_pcm_format_t) 34) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U24_3BE        ((snd_pcm_format_t) 35) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S20_3LE        ((snd_pcm_format_t) 36) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S20_3BE        ((snd_pcm_format_t) 37) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U20_3LE        ((snd_pcm_format_t) 38) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U20_3BE        ((snd_pcm_format_t) 39) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S18_3LE        ((snd_pcm_format_t) 40) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S18_3BE        ((snd_pcm_format_t) 41) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U18_3LE        ((snd_pcm_format_t) 42) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U18_3BE        ((snd_pcm_format_t) 43) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_G723_24        ((snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
+#define        SNDRV_PCM_FORMAT_G723_24_1B     ((snd_pcm_format_t) 45) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_G723_40        ((snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
+#define        SNDRV_PCM_FORMAT_G723_40_1B     ((snd_pcm_format_t) 47) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_DSD_U8         ((snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
+#define        SNDRV_PCM_FORMAT_DSD_U16_LE     ((snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
+#define        SNDRV_PCM_FORMAT_DSD_U32_LE     ((snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
+#define        SNDRV_PCM_FORMAT_DSD_U16_BE     ((snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
+#define        SNDRV_PCM_FORMAT_DSD_U32_BE     ((snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
+#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_DSD_U32_BE
+
+#ifdef SNDRV_LITTLE_ENDIAN
+#define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_LE
+#define        SNDRV_PCM_FORMAT_U16            SNDRV_PCM_FORMAT_U16_LE
+#define        SNDRV_PCM_FORMAT_S24            SNDRV_PCM_FORMAT_S24_LE
+#define        SNDRV_PCM_FORMAT_U24            SNDRV_PCM_FORMAT_U24_LE
+#define        SNDRV_PCM_FORMAT_S32            SNDRV_PCM_FORMAT_S32_LE
+#define        SNDRV_PCM_FORMAT_U32            SNDRV_PCM_FORMAT_U32_LE
+#define        SNDRV_PCM_FORMAT_FLOAT          SNDRV_PCM_FORMAT_FLOAT_LE
+#define        SNDRV_PCM_FORMAT_FLOAT64        SNDRV_PCM_FORMAT_FLOAT64_LE
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
+#endif
+#ifdef SNDRV_BIG_ENDIAN
+#define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_BE
+#define        SNDRV_PCM_FORMAT_U16            SNDRV_PCM_FORMAT_U16_BE
+#define        SNDRV_PCM_FORMAT_S24            SNDRV_PCM_FORMAT_S24_BE
+#define        SNDRV_PCM_FORMAT_U24            SNDRV_PCM_FORMAT_U24_BE
+#define        SNDRV_PCM_FORMAT_S32            SNDRV_PCM_FORMAT_S32_BE
+#define        SNDRV_PCM_FORMAT_U32            SNDRV_PCM_FORMAT_U32_BE
+#define        SNDRV_PCM_FORMAT_FLOAT          SNDRV_PCM_FORMAT_FLOAT_BE
+#define        SNDRV_PCM_FORMAT_FLOAT64        SNDRV_PCM_FORMAT_FLOAT64_BE
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
+#endif
+
+typedef int __bitwise snd_pcm_subformat_t;
+#define        SNDRV_PCM_SUBFORMAT_STD         ((snd_pcm_subformat_t) 0)
+#define        SNDRV_PCM_SUBFORMAT_LAST        SNDRV_PCM_SUBFORMAT_STD
+
+#define SNDRV_PCM_INFO_MMAP            0x00000001      /* hardware supports mmap */
+#define SNDRV_PCM_INFO_MMAP_VALID      0x00000002      /* period data are valid during transfer */
+#define SNDRV_PCM_INFO_DOUBLE          0x00000004      /* Double buffering needed for PCM start/stop */
+#define SNDRV_PCM_INFO_BATCH           0x00000010      /* double buffering */
+#define SNDRV_PCM_INFO_INTERLEAVED     0x00000100      /* channels are interleaved */
+#define SNDRV_PCM_INFO_NONINTERLEAVED  0x00000200      /* channels are not interleaved */
+#define SNDRV_PCM_INFO_COMPLEX         0x00000400      /* complex frame organization (mmap only) */
+#define SNDRV_PCM_INFO_BLOCK_TRANSFER  0x00010000      /* hardware transfer block of samples */
+#define SNDRV_PCM_INFO_OVERRANGE       0x00020000      /* hardware supports ADC (capture) overrange detection */
+#define SNDRV_PCM_INFO_RESUME          0x00040000      /* hardware supports stream resume after suspend */
+#define SNDRV_PCM_INFO_PAUSE           0x00080000      /* pause ioctl is supported */
+#define SNDRV_PCM_INFO_HALF_DUPLEX     0x00100000      /* only half duplex */
+#define SNDRV_PCM_INFO_JOINT_DUPLEX    0x00200000      /* playback and capture stream are somewhat correlated */
+#define SNDRV_PCM_INFO_SYNC_START      0x00400000      /* pcm support some kind of sync go */
+#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP        0x00800000      /* period wakeup can be disabled */
+#define SNDRV_PCM_INFO_HAS_WALL_CLOCK   0x01000000      /* (Deprecated)has audio wall clock for audio/system time sync */
+#define SNDRV_PCM_INFO_HAS_LINK_ATIME              0x01000000  /* report hardware link audio time, reset on startup */
+#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME     0x02000000  /* report absolute hardware link audio time, not reset on startup */
+#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME    0x04000000  /* report estimated link audio time */
+#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000  /* report synchronized audio/system time */
+
+#define SNDRV_PCM_INFO_DRAIN_TRIGGER   0x40000000              /* internal kernel flag - trigger in drain */
+#define SNDRV_PCM_INFO_FIFO_IN_FRAMES  0x80000000      /* internal kernel flag - FIFO size is in frames */
+
+
+
+typedef int __bitwise snd_pcm_state_t;
+#define        SNDRV_PCM_STATE_OPEN            ((snd_pcm_state_t) 0) /* stream is open */
+#define        SNDRV_PCM_STATE_SETUP           ((snd_pcm_state_t) 1) /* stream has a setup */
+#define        SNDRV_PCM_STATE_PREPARED        ((snd_pcm_state_t) 2) /* stream is ready to start */
+#define        SNDRV_PCM_STATE_RUNNING         ((snd_pcm_state_t) 3) /* stream is running */
+#define        SNDRV_PCM_STATE_XRUN            ((snd_pcm_state_t) 4) /* stream reached an xrun */
+#define        SNDRV_PCM_STATE_DRAINING        ((snd_pcm_state_t) 5) /* stream is draining */
+#define        SNDRV_PCM_STATE_PAUSED          ((snd_pcm_state_t) 6) /* stream is paused */
+#define        SNDRV_PCM_STATE_SUSPENDED       ((snd_pcm_state_t) 7) /* hardware is suspended */
+#define        SNDRV_PCM_STATE_DISCONNECTED    ((snd_pcm_state_t) 8) /* hardware is disconnected */
+#define        SNDRV_PCM_STATE_LAST            SNDRV_PCM_STATE_DISCONNECTED
+
+enum {
+       SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
+       SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
+       SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
+};
+
+union snd_pcm_sync_id {
+       unsigned char id[16];
+       unsigned short id16[8];
+       unsigned int id32[4];
+};
+
+struct snd_pcm_info {
+       unsigned int device;            /* RO/WR (control): device number */
+       unsigned int subdevice;         /* RO/WR (control): subdevice number */
+       int stream;                     /* RO/WR (control): stream direction */
+       int card;                       /* R: card number */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* name of this device */
+       unsigned char subname[32];      /* subdevice name */
+       int dev_class;                  /* SNDRV_PCM_CLASS_* */
+       int dev_subclass;               /* SNDRV_PCM_SUBCLASS_* */
+       unsigned int subdevices_count;
+       unsigned int subdevices_avail;
+       union snd_pcm_sync_id sync;     /* hardware synchronization ID */
+       unsigned char reserved[64];     /* reserved for future... */
+};
+
+typedef int snd_pcm_hw_param_t;
+#define        SNDRV_PCM_HW_PARAM_ACCESS       0       /* Access type */
+#define        SNDRV_PCM_HW_PARAM_FORMAT       1       /* Format */
+#define        SNDRV_PCM_HW_PARAM_SUBFORMAT    2       /* Subformat */
+#define        SNDRV_PCM_HW_PARAM_FIRST_MASK   SNDRV_PCM_HW_PARAM_ACCESS
+#define        SNDRV_PCM_HW_PARAM_LAST_MASK    SNDRV_PCM_HW_PARAM_SUBFORMAT
+
+#define        SNDRV_PCM_HW_PARAM_SAMPLE_BITS  8       /* Bits per sample */
+#define        SNDRV_PCM_HW_PARAM_FRAME_BITS   9       /* Bits per frame */
+#define        SNDRV_PCM_HW_PARAM_CHANNELS     10      /* Channels */
+#define        SNDRV_PCM_HW_PARAM_RATE         11      /* Approx rate */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_TIME  12      /* Approx distance between
+                                                * interrupts in us
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_SIZE  13      /* Approx frames between
+                                                * interrupts
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14      /* Approx bytes between
+                                                * interrupts
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIODS      15      /* Approx interrupts per
+                                                * buffer
+                                                */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_TIME  16      /* Approx duration of buffer
+                                                * in us
+                                                */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_SIZE  17      /* Size of buffer in frames */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18      /* Size of buffer in bytes */
+#define        SNDRV_PCM_HW_PARAM_TICK_TIME    19      /* Approx tick duration in us */
+#define        SNDRV_PCM_HW_PARAM_FIRST_INTERVAL       SNDRV_PCM_HW_PARAM_SAMPLE_BITS
+#define        SNDRV_PCM_HW_PARAM_LAST_INTERVAL        SNDRV_PCM_HW_PARAM_TICK_TIME
+
+#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0)  /* avoid rate resampling */
+#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER      (1<<1)  /* export buffer */
+#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP   (1<<2)  /* disable period wakeups */
+
+struct snd_interval {
+       unsigned int min, max;
+       unsigned int openmin:1,
+                    openmax:1,
+                    integer:1,
+                    empty:1;
+};
+
+#define SNDRV_MASK_MAX 256
+
+struct snd_mask {
+       __u32 bits[(SNDRV_MASK_MAX+31)/32];
+};
+
+struct snd_pcm_hw_params {
+       unsigned int flags;
+       struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 
+                              SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
+       struct snd_mask mres[5];        /* reserved masks */
+       struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
+                                       SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
+       struct snd_interval ires[9];    /* reserved intervals */
+       unsigned int rmask;             /* W: requested masks */
+       unsigned int cmask;             /* R: changed masks */
+       unsigned int info;              /* R: Info flags for returned setup */
+       unsigned int msbits;            /* R: used most significant bits */
+       unsigned int rate_num;          /* R: rate numerator */
+       unsigned int rate_den;          /* R: rate denominator */
+       snd_pcm_uframes_t fifo_size;    /* R: chip FIFO size in frames */
+       unsigned char reserved[64];     /* reserved for future */
+};
+
+enum {
+       SNDRV_PCM_TSTAMP_NONE = 0,
+       SNDRV_PCM_TSTAMP_ENABLE,
+       SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
+};
+
+struct snd_pcm_sw_params {
+       int tstamp_mode;                        /* timestamp mode */
+       unsigned int period_step;
+       unsigned int sleep_min;                 /* min ticks to sleep */
+       snd_pcm_uframes_t avail_min;            /* min avail frames for wakeup */
+       snd_pcm_uframes_t xfer_align;           /* obsolete: xfer size need to be a multiple */
+       snd_pcm_uframes_t start_threshold;      /* min hw_avail frames for automatic start */
+       snd_pcm_uframes_t stop_threshold;       /* min avail frames for automatic stop */
+       snd_pcm_uframes_t silence_threshold;    /* min distance from noise for silence filling */
+       snd_pcm_uframes_t silence_size;         /* silence block size */
+       snd_pcm_uframes_t boundary;             /* pointers wrap point */
+       unsigned int proto;                     /* protocol version */
+       unsigned int tstamp_type;               /* timestamp type (req. proto >= 2.0.12) */
+       unsigned char reserved[56];             /* reserved for future */
+};
+
+struct snd_pcm_channel_info {
+       unsigned int channel;
+       __kernel_off_t offset;          /* mmap offset */
+       unsigned int first;             /* offset to first sample in bits */
+       unsigned int step;              /* samples distance in bits */
+};
+
+enum {
+       /*
+        *  first definition for backwards compatibility only,
+        *  maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else
+        */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
+
+       /* timestamp definitions */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,           /* DMA time, reported as per hw_ptr */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,              /* link time reported by sample or wallclock counter, reset on startup */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,     /* link time reported by sample or wallclock counter, not reset on startup */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,    /* link time estimated indirectly */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
+};
+
+struct snd_pcm_status {
+       snd_pcm_state_t state;          /* stream state */
+       struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
+       struct timespec tstamp;         /* reference timestamp */
+       snd_pcm_uframes_t appl_ptr;     /* appl ptr */
+       snd_pcm_uframes_t hw_ptr;       /* hw ptr */
+       snd_pcm_sframes_t delay;        /* current delay in frames */
+       snd_pcm_uframes_t avail;        /* number of frames available */
+       snd_pcm_uframes_t avail_max;    /* max frames available on hw since last status */
+       snd_pcm_uframes_t overrange;    /* count of ADC (capture) overrange detections from last status */
+       snd_pcm_state_t suspended_state; /* suspended stream state */
+       __u32 audio_tstamp_data;         /* needed for 64-bit alignment, used for configs/report to/from userspace */
+       struct timespec audio_tstamp;   /* sample counter, wall clock, PHC or on-demand sync'ed */
+       struct timespec driver_tstamp;  /* useful in case reference system tstamp is reported with delay */
+       __u32 audio_tstamp_accuracy;    /* in ns units, only valid if indicated in audio_tstamp_data */
+       unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
+};
+
+struct snd_pcm_mmap_status {
+       snd_pcm_state_t state;          /* RO: state - SNDRV_PCM_STATE_XXXX */
+       int pad1;                       /* Needed for 64 bit alignment */
+       snd_pcm_uframes_t hw_ptr;       /* RO: hw ptr (0...boundary-1) */
+       struct timespec tstamp;         /* Timestamp */
+       snd_pcm_state_t suspended_state; /* RO: suspended stream state */
+       struct timespec audio_tstamp;   /* from sample counter or wall clock */
+};
+
+struct snd_pcm_mmap_control {
+       snd_pcm_uframes_t appl_ptr;     /* RW: appl ptr (0...boundary-1) */
+       snd_pcm_uframes_t avail_min;    /* RW: min available frames for wakeup */
+};
+
+#define SNDRV_PCM_SYNC_PTR_HWSYNC      (1<<0)  /* execute hwsync */
+#define SNDRV_PCM_SYNC_PTR_APPL                (1<<1)  /* get appl_ptr from driver (r/w op) */
+#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN   (1<<2)  /* get avail_min from driver */
+
+struct snd_pcm_sync_ptr {
+       unsigned int flags;
+       union {
+               struct snd_pcm_mmap_status status;
+               unsigned char reserved[64];
+       } s;
+       union {
+               struct snd_pcm_mmap_control control;
+               unsigned char reserved[64];
+       } c;
+};
+
+struct snd_xferi {
+       snd_pcm_sframes_t result;
+       void *buf;
+       snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+       snd_pcm_sframes_t result;
+       void * *bufs;
+       snd_pcm_uframes_t frames;
+};
+
+enum {
+       SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */
+       SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,        /* posix_clock_monotonic equivalent */
+       SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,    /* monotonic_raw (no NTP) */
+       SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,
+};
+
+/* channel positions */
+enum {
+       SNDRV_CHMAP_UNKNOWN = 0,
+       SNDRV_CHMAP_NA,         /* N/A, silent */
+       SNDRV_CHMAP_MONO,       /* mono stream */
+       /* this follows the alsa-lib mixer channel value + 3 */
+       SNDRV_CHMAP_FL,         /* front left */
+       SNDRV_CHMAP_FR,         /* front right */
+       SNDRV_CHMAP_RL,         /* rear left */
+       SNDRV_CHMAP_RR,         /* rear right */
+       SNDRV_CHMAP_FC,         /* front center */
+       SNDRV_CHMAP_LFE,        /* LFE */
+       SNDRV_CHMAP_SL,         /* side left */
+       SNDRV_CHMAP_SR,         /* side right */
+       SNDRV_CHMAP_RC,         /* rear center */
+       /* new definitions */
+       SNDRV_CHMAP_FLC,        /* front left center */
+       SNDRV_CHMAP_FRC,        /* front right center */
+       SNDRV_CHMAP_RLC,        /* rear left center */
+       SNDRV_CHMAP_RRC,        /* rear right center */
+       SNDRV_CHMAP_FLW,        /* front left wide */
+       SNDRV_CHMAP_FRW,        /* front right wide */
+       SNDRV_CHMAP_FLH,        /* front left high */
+       SNDRV_CHMAP_FCH,        /* front center high */
+       SNDRV_CHMAP_FRH,        /* front right high */
+       SNDRV_CHMAP_TC,         /* top center */
+       SNDRV_CHMAP_TFL,        /* top front left */
+       SNDRV_CHMAP_TFR,        /* top front right */
+       SNDRV_CHMAP_TFC,        /* top front center */
+       SNDRV_CHMAP_TRL,        /* top rear left */
+       SNDRV_CHMAP_TRR,        /* top rear right */
+       SNDRV_CHMAP_TRC,        /* top rear center */
+       /* new definitions for UAC2 */
+       SNDRV_CHMAP_TFLC,       /* top front left center */
+       SNDRV_CHMAP_TFRC,       /* top front right center */
+       SNDRV_CHMAP_TSL,        /* top side left */
+       SNDRV_CHMAP_TSR,        /* top side right */
+       SNDRV_CHMAP_LLFE,       /* left LFE */
+       SNDRV_CHMAP_RLFE,       /* right LFE */
+       SNDRV_CHMAP_BC,         /* bottom center */
+       SNDRV_CHMAP_BLC,        /* bottom left center */
+       SNDRV_CHMAP_BRC,        /* bottom right center */
+       SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC,
+};
+
+#define SNDRV_CHMAP_POSITION_MASK      0xffff
+#define SNDRV_CHMAP_PHASE_INVERSE      (0x01 << 16)
+#define SNDRV_CHMAP_DRIVER_SPEC                (0x02 << 16)
+
+#define SNDRV_PCM_IOCTL_PVERSION       _IOR('A', 0x00, int)
+#define SNDRV_PCM_IOCTL_INFO           _IOR('A', 0x01, struct snd_pcm_info)
+#define SNDRV_PCM_IOCTL_TSTAMP         _IOW('A', 0x02, int)
+#define SNDRV_PCM_IOCTL_TTSTAMP                _IOW('A', 0x03, int)
+#define SNDRV_PCM_IOCTL_HW_REFINE      _IOWR('A', 0x10, struct snd_pcm_hw_params)
+#define SNDRV_PCM_IOCTL_HW_PARAMS      _IOWR('A', 0x11, struct snd_pcm_hw_params)
+#define SNDRV_PCM_IOCTL_HW_FREE                _IO('A', 0x12)
+#define SNDRV_PCM_IOCTL_SW_PARAMS      _IOWR('A', 0x13, struct snd_pcm_sw_params)
+#define SNDRV_PCM_IOCTL_STATUS         _IOR('A', 0x20, struct snd_pcm_status)
+#define SNDRV_PCM_IOCTL_DELAY          _IOR('A', 0x21, snd_pcm_sframes_t)
+#define SNDRV_PCM_IOCTL_HWSYNC         _IO('A', 0x22)
+#define SNDRV_PCM_IOCTL_SYNC_PTR       _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
+#define SNDRV_PCM_IOCTL_STATUS_EXT     _IOWR('A', 0x24, struct snd_pcm_status)
+#define SNDRV_PCM_IOCTL_CHANNEL_INFO   _IOR('A', 0x32, struct snd_pcm_channel_info)
+#define SNDRV_PCM_IOCTL_PREPARE                _IO('A', 0x40)
+#define SNDRV_PCM_IOCTL_RESET          _IO('A', 0x41)
+#define SNDRV_PCM_IOCTL_START          _IO('A', 0x42)
+#define SNDRV_PCM_IOCTL_DROP           _IO('A', 0x43)
+#define SNDRV_PCM_IOCTL_DRAIN          _IO('A', 0x44)
+#define SNDRV_PCM_IOCTL_PAUSE          _IOW('A', 0x45, int)
+#define SNDRV_PCM_IOCTL_REWIND         _IOW('A', 0x46, snd_pcm_uframes_t)
+#define SNDRV_PCM_IOCTL_RESUME         _IO('A', 0x47)
+#define SNDRV_PCM_IOCTL_XRUN           _IO('A', 0x48)
+#define SNDRV_PCM_IOCTL_FORWARD                _IOW('A', 0x49, snd_pcm_uframes_t)
+#define SNDRV_PCM_IOCTL_WRITEI_FRAMES  _IOW('A', 0x50, struct snd_xferi)
+#define SNDRV_PCM_IOCTL_READI_FRAMES   _IOR('A', 0x51, struct snd_xferi)
+#define SNDRV_PCM_IOCTL_WRITEN_FRAMES  _IOW('A', 0x52, struct snd_xfern)
+#define SNDRV_PCM_IOCTL_READN_FRAMES   _IOR('A', 0x53, struct snd_xfern)
+#define SNDRV_PCM_IOCTL_LINK           _IOW('A', 0x60, int)
+#define SNDRV_PCM_IOCTL_UNLINK         _IO('A', 0x61)
+
+/*****************************************************************************
+ *                                                                           *
+ *                            MIDI v1.0 interface                            *
+ *                                                                           *
+ *****************************************************************************/
+
+/*
+ *  Raw MIDI section - /dev/snd/midi??
+ */
+
+#define SNDRV_RAWMIDI_VERSION          SNDRV_PROTOCOL_VERSION(2, 0, 0)
+
+enum {
+       SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
+       SNDRV_RAWMIDI_STREAM_INPUT,
+       SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
+};
+
+#define SNDRV_RAWMIDI_INFO_OUTPUT              0x00000001
+#define SNDRV_RAWMIDI_INFO_INPUT               0x00000002
+#define SNDRV_RAWMIDI_INFO_DUPLEX              0x00000004
+
+struct snd_rawmidi_info {
+       unsigned int device;            /* RO/WR (control): device number */
+       unsigned int subdevice;         /* RO/WR (control): subdevice number */
+       int stream;                     /* WR: stream */
+       int card;                       /* R: card number */
+       unsigned int flags;             /* SNDRV_RAWMIDI_INFO_XXXX */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* name of device */
+       unsigned char subname[32];      /* name of active or selected subdevice */
+       unsigned int subdevices_count;
+       unsigned int subdevices_avail;
+       unsigned char reserved[64];     /* reserved for future use */
+};
+
+struct snd_rawmidi_params {
+       int stream;
+       size_t buffer_size;             /* queue size in bytes */
+       size_t avail_min;               /* minimum avail bytes for wakeup */
+       unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+struct snd_rawmidi_status {
+       int stream;
+       struct timespec tstamp;         /* Timestamp */
+       size_t avail;                   /* available bytes */
+       size_t xruns;                   /* count of overruns since last status (in bytes) */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+#define SNDRV_RAWMIDI_IOCTL_PVERSION   _IOR('W', 0x00, int)
+#define SNDRV_RAWMIDI_IOCTL_INFO       _IOR('W', 0x01, struct snd_rawmidi_info)
+#define SNDRV_RAWMIDI_IOCTL_PARAMS     _IOWR('W', 0x10, struct snd_rawmidi_params)
+#define SNDRV_RAWMIDI_IOCTL_STATUS     _IOWR('W', 0x20, struct snd_rawmidi_status)
+#define SNDRV_RAWMIDI_IOCTL_DROP       _IOW('W', 0x30, int)
+#define SNDRV_RAWMIDI_IOCTL_DRAIN      _IOW('W', 0x31, int)
+
+/*
+ *  Timer section - /dev/snd/timer
+ */
+
+#define SNDRV_TIMER_VERSION            SNDRV_PROTOCOL_VERSION(2, 0, 6)
+
+enum {
+       SNDRV_TIMER_CLASS_NONE = -1,
+       SNDRV_TIMER_CLASS_SLAVE = 0,
+       SNDRV_TIMER_CLASS_GLOBAL,
+       SNDRV_TIMER_CLASS_CARD,
+       SNDRV_TIMER_CLASS_PCM,
+       SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
+};
+
+/* slave timer classes */
+enum {
+       SNDRV_TIMER_SCLASS_NONE = 0,
+       SNDRV_TIMER_SCLASS_APPLICATION,
+       SNDRV_TIMER_SCLASS_SEQUENCER,           /* alias */
+       SNDRV_TIMER_SCLASS_OSS_SEQUENCER,       /* alias */
+       SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
+};
+
+/* global timers (device member) */
+#define SNDRV_TIMER_GLOBAL_SYSTEM      0
+#define SNDRV_TIMER_GLOBAL_RTC         1
+#define SNDRV_TIMER_GLOBAL_HPET                2
+#define SNDRV_TIMER_GLOBAL_HRTIMER     3
+
+/* info flags */
+#define SNDRV_TIMER_FLG_SLAVE          (1<<0)  /* cannot be controlled */
+
+struct snd_timer_id {
+       int dev_class;
+       int dev_sclass;
+       int card;
+       int device;
+       int subdevice;
+};
+
+struct snd_timer_ginfo {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned int flags;             /* timer flags - SNDRV_TIMER_FLG_* */
+       int card;                       /* card number */
+       unsigned char id[64];           /* timer identification */
+       unsigned char name[80];         /* timer name */
+       unsigned long reserved0;        /* reserved for future use */
+       unsigned long resolution;       /* average period resolution in ns */
+       unsigned long resolution_min;   /* minimal period resolution in ns */
+       unsigned long resolution_max;   /* maximal period resolution in ns */
+       unsigned int clients;           /* active timer clients */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned long period_num;       /* requested precise period duration (in seconds) - numerator */
+       unsigned long period_den;       /* requested precise period duration (in seconds) - denominator */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_gstatus {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned long resolution;       /* current period resolution in ns */
+       unsigned long resolution_num;   /* precise current period resolution (in seconds) - numerator */
+       unsigned long resolution_den;   /* precise current period resolution (in seconds) - denominator */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_select {
+       struct snd_timer_id id; /* bind to timer ID */
+       unsigned char reserved[32];     /* reserved */
+};
+
+struct snd_timer_info {
+       unsigned int flags;             /* timer flags - SNDRV_TIMER_FLG_* */
+       int card;                       /* card number */
+       unsigned char id[64];           /* timer identificator */
+       unsigned char name[80];         /* timer name */
+       unsigned long reserved0;        /* reserved for future use */
+       unsigned long resolution;       /* average period resolution in ns */
+       unsigned char reserved[64];     /* reserved */
+};
+
+#define SNDRV_TIMER_PSFLG_AUTO         (1<<0)  /* auto start, otherwise one-shot */
+#define SNDRV_TIMER_PSFLG_EXCLUSIVE    (1<<1)  /* exclusive use, precise start/stop/pause/continue */
+#define SNDRV_TIMER_PSFLG_EARLY_EVENT  (1<<2)  /* write early event to the poll queue */
+
+struct snd_timer_params {
+       unsigned int flags;             /* flags - SNDRV_MIXER_PSFLG_* */
+       unsigned int ticks;             /* requested resolution in ticks */
+       unsigned int queue_size;        /* total size of queue (32-1024) */
+       unsigned int reserved0;         /* reserved, was: failure locations */
+       unsigned int filter;            /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */
+       unsigned char reserved[60];     /* reserved */
+};
+
+struct snd_timer_status {
+       struct timespec tstamp;         /* Timestamp - last update */
+       unsigned int resolution;        /* current period resolution in ns */
+       unsigned int lost;              /* counter of master tick lost */
+       unsigned int overrun;           /* count of read queue overruns */
+       unsigned int queue;             /* used queue size */
+       unsigned char reserved[64];     /* reserved */
+};
+
+#define SNDRV_TIMER_IOCTL_PVERSION     _IOR('T', 0x00, int)
+#define SNDRV_TIMER_IOCTL_NEXT_DEVICE  _IOWR('T', 0x01, struct snd_timer_id)
+#define SNDRV_TIMER_IOCTL_TREAD                _IOW('T', 0x02, int)
+#define SNDRV_TIMER_IOCTL_GINFO                _IOWR('T', 0x03, struct snd_timer_ginfo)
+#define SNDRV_TIMER_IOCTL_GPARAMS      _IOW('T', 0x04, struct snd_timer_gparams)
+#define SNDRV_TIMER_IOCTL_GSTATUS      _IOWR('T', 0x05, struct snd_timer_gstatus)
+#define SNDRV_TIMER_IOCTL_SELECT       _IOW('T', 0x10, struct snd_timer_select)
+#define SNDRV_TIMER_IOCTL_INFO         _IOR('T', 0x11, struct snd_timer_info)
+#define SNDRV_TIMER_IOCTL_PARAMS       _IOW('T', 0x12, struct snd_timer_params)
+#define SNDRV_TIMER_IOCTL_STATUS       _IOR('T', 0x14, struct snd_timer_status)
+/* The following four ioctls are changed since 1.0.9 due to confliction */
+#define SNDRV_TIMER_IOCTL_START                _IO('T', 0xa0)
+#define SNDRV_TIMER_IOCTL_STOP         _IO('T', 0xa1)
+#define SNDRV_TIMER_IOCTL_CONTINUE     _IO('T', 0xa2)
+#define SNDRV_TIMER_IOCTL_PAUSE                _IO('T', 0xa3)
+
+struct snd_timer_read {
+       unsigned int resolution;
+       unsigned int ticks;
+};
+
+enum {
+       SNDRV_TIMER_EVENT_RESOLUTION = 0,       /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_TICK,                 /* val = ticks */
+       SNDRV_TIMER_EVENT_START,                /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_STOP,                 /* val = 0 */
+       SNDRV_TIMER_EVENT_CONTINUE,             /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_PAUSE,                /* val = 0 */
+       SNDRV_TIMER_EVENT_EARLY,                /* val = 0, early event */
+       SNDRV_TIMER_EVENT_SUSPEND,              /* val = 0 */
+       SNDRV_TIMER_EVENT_RESUME,               /* val = resolution in ns */
+       /* master timer events for slave timer instances */
+       SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
+       SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
+       SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
+       SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
+       SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
+       SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
+};
+
+struct snd_timer_tread {
+       int event;
+       struct timespec tstamp;
+       unsigned int val;
+};
+
+/****************************************************************************
+ *                                                                          *
+ *        Section for driver control interface - /dev/snd/control?          *
+ *                                                                          *
+ ****************************************************************************/
+
+#define SNDRV_CTL_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 7)
+
+struct snd_ctl_card_info {
+       int card;                       /* card number */
+       int pad;                        /* reserved for future (was type) */
+       unsigned char id[16];           /* ID of card (user selectable) */
+       unsigned char driver[16];       /* Driver name */
+       unsigned char name[32];         /* Short name of soundcard */
+       unsigned char longname[80];     /* name + info text about soundcard */
+       unsigned char reserved_[16];    /* reserved for future (was ID of mixer) */
+       unsigned char mixername[80];    /* visual mixer identification */
+       unsigned char components[128];  /* card components / fine identification, delimited with one space (AC97 etc..) */
+};
+
+typedef int __bitwise snd_ctl_elem_type_t;
+#define        SNDRV_CTL_ELEM_TYPE_NONE        ((snd_ctl_elem_type_t) 0) /* invalid */
+#define        SNDRV_CTL_ELEM_TYPE_BOOLEAN     ((snd_ctl_elem_type_t) 1) /* boolean type */
+#define        SNDRV_CTL_ELEM_TYPE_INTEGER     ((snd_ctl_elem_type_t) 2) /* integer type */
+#define        SNDRV_CTL_ELEM_TYPE_ENUMERATED  ((snd_ctl_elem_type_t) 3) /* enumerated type */
+#define        SNDRV_CTL_ELEM_TYPE_BYTES       ((snd_ctl_elem_type_t) 4) /* byte array */
+#define        SNDRV_CTL_ELEM_TYPE_IEC958      ((snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
+#define        SNDRV_CTL_ELEM_TYPE_INTEGER64   ((snd_ctl_elem_type_t) 6) /* 64-bit integer type */
+#define        SNDRV_CTL_ELEM_TYPE_LAST        SNDRV_CTL_ELEM_TYPE_INTEGER64
+
+typedef int __bitwise snd_ctl_elem_iface_t;
+#define        SNDRV_CTL_ELEM_IFACE_CARD       ((snd_ctl_elem_iface_t) 0) /* global control */
+#define        SNDRV_CTL_ELEM_IFACE_HWDEP      ((snd_ctl_elem_iface_t) 1) /* hardware dependent device */
+#define        SNDRV_CTL_ELEM_IFACE_MIXER      ((snd_ctl_elem_iface_t) 2) /* virtual mixer device */
+#define        SNDRV_CTL_ELEM_IFACE_PCM        ((snd_ctl_elem_iface_t) 3) /* PCM device */
+#define        SNDRV_CTL_ELEM_IFACE_RAWMIDI    ((snd_ctl_elem_iface_t) 4) /* RawMidi device */
+#define        SNDRV_CTL_ELEM_IFACE_TIMER      ((snd_ctl_elem_iface_t) 5) /* timer device */
+#define        SNDRV_CTL_ELEM_IFACE_SEQUENCER  ((snd_ctl_elem_iface_t) 6) /* sequencer client */
+#define        SNDRV_CTL_ELEM_IFACE_LAST       SNDRV_CTL_ELEM_IFACE_SEQUENCER
+
+#define SNDRV_CTL_ELEM_ACCESS_READ             (1<<0)
+#define SNDRV_CTL_ELEM_ACCESS_WRITE            (1<<1)
+#define SNDRV_CTL_ELEM_ACCESS_READWRITE                (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
+#define SNDRV_CTL_ELEM_ACCESS_VOLATILE         (1<<2)  /* control value may be changed without a notification */
+#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP                (1<<3)  /* when was control changed */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_READ         (1<<4)  /* TLV read is possible */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE                (1<<5)  /* TLV write is possible */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE    (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
+#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND      (1<<6)  /* TLV command is possible */
+#define SNDRV_CTL_ELEM_ACCESS_INACTIVE         (1<<8)  /* control does actually nothing, but may be updated */
+#define SNDRV_CTL_ELEM_ACCESS_LOCK             (1<<9)  /* write lock */
+#define SNDRV_CTL_ELEM_ACCESS_OWNER            (1<<10) /* write lock owner */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK     (1<<28) /* kernel use a TLV callback */ 
+#define SNDRV_CTL_ELEM_ACCESS_USER             (1<<29) /* user space element */
+/* bits 30 and 31 are obsoleted (for indirect access) */
+
+/* for further details see the ACPI and PCI power management specification */
+#define SNDRV_CTL_POWER_D0             0x0000  /* full On */
+#define SNDRV_CTL_POWER_D1             0x0100  /* partial On */
+#define SNDRV_CTL_POWER_D2             0x0200  /* partial On */
+#define SNDRV_CTL_POWER_D3             0x0300  /* Off */
+#define SNDRV_CTL_POWER_D3hot          (SNDRV_CTL_POWER_D3|0x0000)     /* Off, with power */
+#define SNDRV_CTL_POWER_D3cold         (SNDRV_CTL_POWER_D3|0x0001)     /* Off, without power */
+
+#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN  44
+
+struct snd_ctl_elem_id {
+       unsigned int numid;             /* numeric identifier, zero = invalid */
+       snd_ctl_elem_iface_t iface;     /* interface identifier */
+       unsigned int device;            /* device/client number */
+       unsigned int subdevice;         /* subdevice (substream) number */
+       unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];              /* ASCII name of item */
+       unsigned int index;             /* index of item */
+};
+
+struct snd_ctl_elem_list {
+       unsigned int offset;            /* W: first element ID to get */
+       unsigned int space;             /* W: count of element IDs to get */
+       unsigned int used;              /* R: count of element IDs set */
+       unsigned int count;             /* R: count of all elements */
+       struct snd_ctl_elem_id *pids; /* R: IDs */
+       unsigned char reserved[50];
+};
+
+struct snd_ctl_elem_info {
+       struct snd_ctl_elem_id id;      /* W: element ID */
+       snd_ctl_elem_type_t type;       /* R: value type - SNDRV_CTL_ELEM_TYPE_* */
+       unsigned int access;            /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */
+       unsigned int count;             /* count of values */
+       __kernel_pid_t owner;           /* owner's PID of this control */
+       union {
+               struct {
+                       long min;               /* R: minimum value */
+                       long max;               /* R: maximum value */
+                       long step;              /* R: step (0 variable) */
+               } integer;
+               struct {
+                       long long min;          /* R: minimum value */
+                       long long max;          /* R: maximum value */
+                       long long step;         /* R: step (0 variable) */
+               } integer64;
+               struct {
+                       unsigned int items;     /* R: number of items */
+                       unsigned int item;      /* W: item number */
+                       char name[64];          /* R: value name */
+                       __u64 names_ptr;        /* W: names list (ELEM_ADD only) */
+                       unsigned int names_length;
+               } enumerated;
+               unsigned char reserved[128];
+       } value;
+       union {
+               unsigned short d[4];            /* dimensions */
+               unsigned short *d_ptr;          /* indirect - obsoleted */
+       } dimen;
+       unsigned char reserved[64-4*sizeof(unsigned short)];
+};
+
+struct snd_ctl_elem_value {
+       struct snd_ctl_elem_id id;      /* W: element ID */
+       unsigned int indirect: 1;       /* W: indirect access - obsoleted */
+       union {
+               union {
+                       long value[128];
+                       long *value_ptr;        /* obsoleted */
+               } integer;
+               union {
+                       long long value[64];
+                       long long *value_ptr;   /* obsoleted */
+               } integer64;
+               union {
+                       unsigned int item[128];
+                       unsigned int *item_ptr; /* obsoleted */
+               } enumerated;
+               union {
+                       unsigned char data[512];
+                       unsigned char *data_ptr;        /* obsoleted */
+               } bytes;
+               struct snd_aes_iec958 iec958;
+       } value;                /* RO */
+       struct timespec tstamp;
+       unsigned char reserved[128-sizeof(struct timespec)];
+};
+
+struct snd_ctl_tlv {
+       unsigned int numid;     /* control element numeric identification */
+       unsigned int length;    /* in bytes aligned to 4 */
+       unsigned int tlv[0];    /* first TLV */
+};
+
+#define SNDRV_CTL_IOCTL_PVERSION       _IOR('U', 0x00, int)
+#define SNDRV_CTL_IOCTL_CARD_INFO      _IOR('U', 0x01, struct snd_ctl_card_info)
+#define SNDRV_CTL_IOCTL_ELEM_LIST      _IOWR('U', 0x10, struct snd_ctl_elem_list)
+#define SNDRV_CTL_IOCTL_ELEM_INFO      _IOWR('U', 0x11, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_READ      _IOWR('U', 0x12, struct snd_ctl_elem_value)
+#define SNDRV_CTL_IOCTL_ELEM_WRITE     _IOWR('U', 0x13, struct snd_ctl_elem_value)
+#define SNDRV_CTL_IOCTL_ELEM_LOCK      _IOW('U', 0x14, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_ELEM_UNLOCK    _IOW('U', 0x15, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
+#define SNDRV_CTL_IOCTL_ELEM_ADD       _IOWR('U', 0x17, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_REPLACE   _IOWR('U', 0x18, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_REMOVE    _IOWR('U', 0x19, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_TLV_READ       _IOWR('U', 0x1a, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_TLV_WRITE      _IOWR('U', 0x1b, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_TLV_COMMAND    _IOWR('U', 0x1c, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
+#define SNDRV_CTL_IOCTL_HWDEP_INFO     _IOR('U', 0x21, struct snd_hwdep_info)
+#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE        _IOR('U', 0x30, int)
+#define SNDRV_CTL_IOCTL_PCM_INFO       _IOWR('U', 0x31, struct snd_pcm_info)
+#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
+#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
+#define SNDRV_CTL_IOCTL_RAWMIDI_INFO   _IOWR('U', 0x41, struct snd_rawmidi_info)
+#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
+#define SNDRV_CTL_IOCTL_POWER          _IOWR('U', 0xd0, int)
+#define SNDRV_CTL_IOCTL_POWER_STATE    _IOR('U', 0xd1, int)
+
+/*
+ *  Read interface.
+ */
+
+enum sndrv_ctl_event_type {
+       SNDRV_CTL_EVENT_ELEM = 0,
+       SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
+};
+
+#define SNDRV_CTL_EVENT_MASK_VALUE     (1<<0)  /* element value was changed */
+#define SNDRV_CTL_EVENT_MASK_INFO      (1<<1)  /* element info was changed */
+#define SNDRV_CTL_EVENT_MASK_ADD       (1<<2)  /* element was added */
+#define SNDRV_CTL_EVENT_MASK_TLV       (1<<3)  /* element TLV tree was changed */
+#define SNDRV_CTL_EVENT_MASK_REMOVE    (~0U)   /* element was removed */
+
+struct snd_ctl_event {
+       int type;       /* event type - SNDRV_CTL_EVENT_* */
+       union {
+               struct {
+                       unsigned int mask;
+                       struct snd_ctl_elem_id id;
+               } elem;
+               unsigned char data8[60];
+       } data;
+};
+
+/*
+ *  Control names
+ */
+
+#define SNDRV_CTL_NAME_NONE                            ""
+#define SNDRV_CTL_NAME_PLAYBACK                                "Playback "
+#define SNDRV_CTL_NAME_CAPTURE                         "Capture "
+
+#define SNDRV_CTL_NAME_IEC958_NONE                     ""
+#define SNDRV_CTL_NAME_IEC958_SWITCH                   "Switch"
+#define SNDRV_CTL_NAME_IEC958_VOLUME                   "Volume"
+#define SNDRV_CTL_NAME_IEC958_DEFAULT                  "Default"
+#define SNDRV_CTL_NAME_IEC958_MASK                     "Mask"
+#define SNDRV_CTL_NAME_IEC958_CON_MASK                 "Con Mask"
+#define SNDRV_CTL_NAME_IEC958_PRO_MASK                 "Pro Mask"
+#define SNDRV_CTL_NAME_IEC958_PCM_STREAM               "PCM Stream"
+#define SNDRV_CTL_NAME_IEC958(expl,direction,what)     "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
+
+#endif /* __SOUND_ASOUND_H */
diff --git a/lib/libdss-include/include/sound/asound_fm.h b/lib/libdss-include/include/sound/asound_fm.h
new file mode 100644 (file)
index 0000000..c2a4b96
--- /dev/null
@@ -0,0 +1,134 @@
+#ifndef __SOUND_ASOUND_FM_H
+#define __SOUND_ASOUND_FM_H
+
+/*
+ *  Advanced Linux Sound Architecture - ALSA
+ *
+ *  Interface file between ALSA driver & user space
+ *  Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
+ *                           4Front Technologies
+ *
+ *  Direct FM control
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#define SNDRV_DM_FM_MODE_OPL2  0x00
+#define SNDRV_DM_FM_MODE_OPL3  0x01
+
+struct snd_dm_fm_info {
+       unsigned char fm_mode;          /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
+       unsigned char rhythm;           /* percussion mode flag */
+};
+
+/*
+ *  Data structure composing an FM "note" or sound event.
+ */
+
+struct snd_dm_fm_voice {
+       unsigned char op;               /* operator cell (0 or 1) */
+       unsigned char voice;            /* FM voice (0 to 17) */
+
+       unsigned char am;               /* amplitude modulation */
+       unsigned char vibrato;          /* vibrato effect */
+       unsigned char do_sustain;       /* sustain phase */
+       unsigned char kbd_scale;        /* keyboard scaling */
+       unsigned char harmonic;         /* 4 bits: harmonic and multiplier */
+       unsigned char scale_level;      /* 2 bits: decrease output freq rises */
+       unsigned char volume;           /* 6 bits: volume */
+
+       unsigned char attack;           /* 4 bits: attack rate */
+       unsigned char decay;            /* 4 bits: decay rate */
+       unsigned char sustain;          /* 4 bits: sustain level */
+       unsigned char release;          /* 4 bits: release rate */
+
+       unsigned char feedback;         /* 3 bits: feedback for op0 */
+       unsigned char connection;       /* 0 for serial, 1 for parallel */
+       unsigned char left;             /* stereo left */
+       unsigned char right;            /* stereo right */
+       unsigned char waveform;         /* 3 bits: waveform shape */
+};
+
+/*
+ *  This describes an FM note by its voice, octave, frequency number (10bit)
+ *  and key on/off.
+ */
+
+struct snd_dm_fm_note {
+       unsigned char voice;    /* 0-17 voice channel */
+       unsigned char octave;   /* 3 bits: what octave to play */
+       unsigned int fnum;      /* 10 bits: frequency number */
+       unsigned char key_on;   /* set for active, clear for silent */
+};
+
+/*
+ *  FM parameters that apply globally to all voices, and thus are not "notes"
+ */
+
+struct snd_dm_fm_params {
+       unsigned char am_depth;         /* amplitude modulation depth (1=hi) */
+       unsigned char vib_depth;        /* vibrato depth (1=hi) */
+       unsigned char kbd_split;        /* keyboard split */
+       unsigned char rhythm;           /* percussion mode select */
+
+       /* This block is the percussion instrument data */
+       unsigned char bass;
+       unsigned char snare;
+       unsigned char tomtom;
+       unsigned char cymbal;
+       unsigned char hihat;
+};
+
+/*
+ *  FM mode ioctl settings
+ */
+
+#define SNDRV_DM_FM_IOCTL_INFO         _IOR('H', 0x20, struct snd_dm_fm_info)
+#define SNDRV_DM_FM_IOCTL_RESET                _IO ('H', 0x21)
+#define SNDRV_DM_FM_IOCTL_PLAY_NOTE    _IOW('H', 0x22, struct snd_dm_fm_note)
+#define SNDRV_DM_FM_IOCTL_SET_VOICE    _IOW('H', 0x23, struct snd_dm_fm_voice)
+#define SNDRV_DM_FM_IOCTL_SET_PARAMS   _IOW('H', 0x24, struct snd_dm_fm_params)
+#define SNDRV_DM_FM_IOCTL_SET_MODE     _IOW('H', 0x25, int)
+/* for OPL3 only */
+#define SNDRV_DM_FM_IOCTL_SET_CONNECTION       _IOW('H', 0x26, int)
+/* SBI patch management */
+#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES        _IO ('H', 0x40)
+
+#define SNDRV_DM_FM_OSS_IOCTL_RESET            0x20
+#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE                0x21
+#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE                0x22
+#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS       0x23
+#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE         0x24
+#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL          0x25
+
+/*
+ * Patch Record - fixed size for write
+ */
+
+#define FM_KEY_SBI     "SBI\032"
+#define FM_KEY_2OP     "2OP\032"
+#define FM_KEY_4OP     "4OP\032"
+
+struct sbi_patch {
+       unsigned char prog;
+       unsigned char bank;
+       char key[4];
+       char name[25];
+       char extension[7];
+       unsigned char data[32];
+};
+
+#endif /* __SOUND_ASOUND_FM_H */
diff --git a/lib/libdss-include/include/sound/compress_offload.h b/lib/libdss-include/include/sound/compress_offload.h
new file mode 100644 (file)
index 0000000..e00d8cb
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ *  compress_offload.h - compress offload header definations
+ *
+ *  Copyright (C) 2011 Intel Corporation
+ *  Authors:   Vinod Koul <vinod.koul@linux.intel.com>
+ *             Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+ *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ */
+#ifndef __COMPRESS_OFFLOAD_H
+#define __COMPRESS_OFFLOAD_H
+
+#include <linux/types.h>
+#include <sound/asound.h>
+#include <sound/compress_params.h>
+
+
+#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2)
+/**
+ * struct snd_compressed_buffer - compressed buffer
+ * @fragment_size: size of buffer fragment in bytes
+ * @fragments: number of such fragments
+ */
+struct snd_compressed_buffer {
+       __u32 fragment_size;
+       __u32 fragments;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_params - compressed stream params
+ * @buffer: buffer description
+ * @codec: codec parameters
+ * @no_wake_mode: dont wake on fragment elapsed
+ */
+struct snd_compr_params {
+       struct snd_compressed_buffer buffer;
+       struct snd_codec codec;
+       __u8 no_wake_mode;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_tstamp - timestamp descriptor
+ * @byte_offset: Byte offset in ring buffer to DSP
+ * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP
+ * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by
+ *     large steps and should only be used to monitor encoding/decoding
+ *     progress. It shall not be used for timing estimates.
+ * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio
+ * output/input. This field should be used for A/V sync or time estimates.
+ * @sampling_rate: sampling rate of audio
+ */
+struct snd_compr_tstamp {
+       __u32 byte_offset;
+       __u32 copied_total;
+       __u32 pcm_frames;
+       __u32 pcm_io_frames;
+       __u32 sampling_rate;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_avail - avail descriptor
+ * @avail: Number of bytes available in ring buffer for writing/reading
+ * @tstamp: timestamp information
+ */
+struct snd_compr_avail {
+       __u64 avail;
+       struct snd_compr_tstamp tstamp;
+} __attribute__((packed, aligned(4)));
+
+enum snd_compr_direction {
+       SND_COMPRESS_PLAYBACK = 0,
+       SND_COMPRESS_CAPTURE
+};
+
+/**
+ * struct snd_compr_caps - caps descriptor
+ * @codecs: pointer to array of codecs
+ * @direction: direction supported. Of type snd_compr_direction
+ * @min_fragment_size: minimum fragment supported by DSP
+ * @max_fragment_size: maximum fragment supported by DSP
+ * @min_fragments: min fragments supported by DSP
+ * @max_fragments: max fragments supported by DSP
+ * @num_codecs: number of codecs supported
+ * @reserved: reserved field
+ */
+struct snd_compr_caps {
+       __u32 num_codecs;
+       __u32 direction;
+       __u32 min_fragment_size;
+       __u32 max_fragment_size;
+       __u32 min_fragments;
+       __u32 max_fragments;
+       __u32 codecs[MAX_NUM_CODECS];
+       __u32 reserved[11];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_codec_caps - query capability of codec
+ * @codec: codec for which capability is queried
+ * @num_descriptors: number of codec descriptors
+ * @descriptor: array of codec capability descriptor
+ */
+struct snd_compr_codec_caps {
+       __u32 codec;
+       __u32 num_descriptors;
+       struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * enum sndrv_compress_encoder
+ * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the
+ * end of the track
+ * @SNDRV_COMPRESS_ENCODER_DELAY: no of samples inserted by the encoder at the
+ * beginning of the track
+ */
+enum sndrv_compress_encoder {
+       SNDRV_COMPRESS_ENCODER_PADDING = 1,
+       SNDRV_COMPRESS_ENCODER_DELAY = 2,
+};
+
+/**
+ * struct snd_compr_metadata - compressed stream metadata
+ * @key: key id
+ * @value: key value
+ */
+struct snd_compr_metadata {
+        __u32 key;
+        __u32 value[8];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * compress path ioctl definitions
+ * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP
+ * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec
+ * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters
+ * Note: only codec params can be changed runtime and stream params cant be
+ * SNDRV_COMPRESS_GET_PARAMS: Query codec params
+ * SNDRV_COMPRESS_TSTAMP: get the current timestamp value
+ * SNDRV_COMPRESS_AVAIL: get the current buffer avail value.
+ * This also queries the tstamp properties
+ * SNDRV_COMPRESS_PAUSE: Pause the running stream
+ * SNDRV_COMPRESS_RESUME: resume a paused stream
+ * SNDRV_COMPRESS_START: Start a stream
+ * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content
+ * and the buffers currently with DSP
+ * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that
+ * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version
+ */
+#define SNDRV_COMPRESS_IOCTL_VERSION   _IOR('C', 0x00, int)
+#define SNDRV_COMPRESS_GET_CAPS                _IOWR('C', 0x10, struct snd_compr_caps)
+#define SNDRV_COMPRESS_GET_CODEC_CAPS  _IOWR('C', 0x11,\
+                                               struct snd_compr_codec_caps)
+#define SNDRV_COMPRESS_SET_PARAMS      _IOW('C', 0x12, struct snd_compr_params)
+#define SNDRV_COMPRESS_GET_PARAMS      _IOR('C', 0x13, struct snd_codec)
+#define SNDRV_COMPRESS_SET_METADATA    _IOW('C', 0x14,\
+                                                struct snd_compr_metadata)
+#define SNDRV_COMPRESS_GET_METADATA    _IOWR('C', 0x15,\
+                                                struct snd_compr_metadata)
+#define SNDRV_COMPRESS_TSTAMP          _IOR('C', 0x20, struct snd_compr_tstamp)
+#define SNDRV_COMPRESS_AVAIL           _IOR('C', 0x21, struct snd_compr_avail)
+#define SNDRV_COMPRESS_PAUSE           _IO('C', 0x30)
+#define SNDRV_COMPRESS_RESUME          _IO('C', 0x31)
+#define SNDRV_COMPRESS_START           _IO('C', 0x32)
+#define SNDRV_COMPRESS_STOP            _IO('C', 0x33)
+#define SNDRV_COMPRESS_DRAIN           _IO('C', 0x34)
+#define SNDRV_COMPRESS_NEXT_TRACK      _IO('C', 0x35)
+#define SNDRV_COMPRESS_PARTIAL_DRAIN   _IO('C', 0x36)
+/*
+ * TODO
+ * 1. add mmap support
+ *
+ */
+#define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */
+#define SND_COMPR_TRIGGER_NEXT_TRACK 8
+#define SND_COMPR_TRIGGER_PARTIAL_DRAIN 9
+#endif
diff --git a/lib/libdss-include/include/sound/compress_params.h b/lib/libdss-include/include/sound/compress_params.h
new file mode 100644 (file)
index 0000000..d9bd9ca
--- /dev/null
@@ -0,0 +1,404 @@
+/*
+ *  compress_params.h - codec types and parameters for compressed data
+ *  streaming interface
+ *
+ *  Copyright (C) 2011 Intel Corporation
+ *  Authors:   Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+ *              Vinod Koul <vinod.koul@linux.intel.com>
+ *
+ *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * The definitions in this file are derived from the OpenMAX AL version 1.1
+ * and OpenMAX IL v 1.1.2 header files which contain the copyright notice below.
+ *
+ * Copyright (c) 2007-2010 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and/or associated documentation files (the
+ * "Materials "), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ *
+ */
+#ifndef __SND_COMPRESS_PARAMS_H
+#define __SND_COMPRESS_PARAMS_H
+
+#include <linux/types.h>
+
+/* AUDIO CODECS SUPPORTED */
+#define MAX_NUM_CODECS 32
+#define MAX_NUM_CODEC_DESCRIPTORS 32
+#define MAX_NUM_BITRATES 32
+#define MAX_NUM_SAMPLE_RATES 32
+
+/* Codecs are listed linearly to allow for extensibility */
+#define SND_AUDIOCODEC_PCM                   ((__u32) 0x00000001)
+#define SND_AUDIOCODEC_MP3                   ((__u32) 0x00000002)
+#define SND_AUDIOCODEC_AMR                   ((__u32) 0x00000003)
+#define SND_AUDIOCODEC_AMRWB                 ((__u32) 0x00000004)
+#define SND_AUDIOCODEC_AMRWBPLUS             ((__u32) 0x00000005)
+#define SND_AUDIOCODEC_AAC                   ((__u32) 0x00000006)
+#define SND_AUDIOCODEC_WMA                   ((__u32) 0x00000007)
+#define SND_AUDIOCODEC_REAL                  ((__u32) 0x00000008)
+#define SND_AUDIOCODEC_VORBIS                ((__u32) 0x00000009)
+#define SND_AUDIOCODEC_FLAC                  ((__u32) 0x0000000A)
+#define SND_AUDIOCODEC_IEC61937              ((__u32) 0x0000000B)
+#define SND_AUDIOCODEC_G723_1                ((__u32) 0x0000000C)
+#define SND_AUDIOCODEC_G729                  ((__u32) 0x0000000D)
+#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_G729
+
+/*
+ * Profile and modes are listed with bit masks. This allows for a
+ * more compact representation of fields that will not evolve
+ * (in contrast to the list of codecs)
+ */
+
+#define SND_AUDIOPROFILE_PCM                 ((__u32) 0x00000001)
+
+/* MP3 modes are only useful for encoders */
+#define SND_AUDIOCHANMODE_MP3_MONO           ((__u32) 0x00000001)
+#define SND_AUDIOCHANMODE_MP3_STEREO         ((__u32) 0x00000002)
+#define SND_AUDIOCHANMODE_MP3_JOINTSTEREO    ((__u32) 0x00000004)
+#define SND_AUDIOCHANMODE_MP3_DUAL           ((__u32) 0x00000008)
+
+#define SND_AUDIOPROFILE_AMR                 ((__u32) 0x00000001)
+
+/* AMR modes are only useful for encoders */
+#define SND_AUDIOMODE_AMR_DTX_OFF            ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AMR_VAD1               ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AMR_VAD2               ((__u32) 0x00000004)
+
+#define SND_AUDIOSTREAMFORMAT_UNDEFINED             ((__u32) 0x00000000)
+#define SND_AUDIOSTREAMFORMAT_CONFORMANCE    ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_IF1            ((__u32) 0x00000002)
+#define SND_AUDIOSTREAMFORMAT_IF2            ((__u32) 0x00000004)
+#define SND_AUDIOSTREAMFORMAT_FSF            ((__u32) 0x00000008)
+#define SND_AUDIOSTREAMFORMAT_RTPPAYLOAD     ((__u32) 0x00000010)
+#define SND_AUDIOSTREAMFORMAT_ITU            ((__u32) 0x00000020)
+
+#define SND_AUDIOPROFILE_AMRWB               ((__u32) 0x00000001)
+
+/* AMRWB modes are only useful for encoders */
+#define SND_AUDIOMODE_AMRWB_DTX_OFF          ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AMRWB_VAD1             ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AMRWB_VAD2             ((__u32) 0x00000004)
+
+#define SND_AUDIOPROFILE_AMRWBPLUS           ((__u32) 0x00000001)
+
+#define SND_AUDIOPROFILE_AAC                 ((__u32) 0x00000001)
+
+/* AAC modes are required for encoders and decoders */
+#define SND_AUDIOMODE_AAC_MAIN               ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AAC_LC                 ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AAC_SSR                ((__u32) 0x00000004)
+#define SND_AUDIOMODE_AAC_LTP                ((__u32) 0x00000008)
+#define SND_AUDIOMODE_AAC_HE                 ((__u32) 0x00000010)
+#define SND_AUDIOMODE_AAC_SCALABLE           ((__u32) 0x00000020)
+#define SND_AUDIOMODE_AAC_ERLC               ((__u32) 0x00000040)
+#define SND_AUDIOMODE_AAC_LD                 ((__u32) 0x00000080)
+#define SND_AUDIOMODE_AAC_HE_PS              ((__u32) 0x00000100)
+#define SND_AUDIOMODE_AAC_HE_MPS             ((__u32) 0x00000200)
+
+/* AAC formats are required for encoders and decoders */
+#define SND_AUDIOSTREAMFORMAT_MP2ADTS        ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_MP4ADTS        ((__u32) 0x00000002)
+#define SND_AUDIOSTREAMFORMAT_MP4LOAS        ((__u32) 0x00000004)
+#define SND_AUDIOSTREAMFORMAT_MP4LATM        ((__u32) 0x00000008)
+#define SND_AUDIOSTREAMFORMAT_ADIF           ((__u32) 0x00000010)
+#define SND_AUDIOSTREAMFORMAT_MP4FF          ((__u32) 0x00000020)
+#define SND_AUDIOSTREAMFORMAT_RAW            ((__u32) 0x00000040)
+
+#define SND_AUDIOPROFILE_WMA7                ((__u32) 0x00000001)
+#define SND_AUDIOPROFILE_WMA8                ((__u32) 0x00000002)
+#define SND_AUDIOPROFILE_WMA9                ((__u32) 0x00000004)
+#define SND_AUDIOPROFILE_WMA10               ((__u32) 0x00000008)
+
+#define SND_AUDIOMODE_WMA_LEVEL1             ((__u32) 0x00000001)
+#define SND_AUDIOMODE_WMA_LEVEL2             ((__u32) 0x00000002)
+#define SND_AUDIOMODE_WMA_LEVEL3             ((__u32) 0x00000004)
+#define SND_AUDIOMODE_WMA_LEVEL4             ((__u32) 0x00000008)
+#define SND_AUDIOMODE_WMAPRO_LEVELM0         ((__u32) 0x00000010)
+#define SND_AUDIOMODE_WMAPRO_LEVELM1         ((__u32) 0x00000020)
+#define SND_AUDIOMODE_WMAPRO_LEVELM2         ((__u32) 0x00000040)
+#define SND_AUDIOMODE_WMAPRO_LEVELM3         ((__u32) 0x00000080)
+
+#define SND_AUDIOSTREAMFORMAT_WMA_ASF        ((__u32) 0x00000001)
+/*
+ * Some implementations strip the ASF header and only send ASF packets
+ * to the DSP
+ */
+#define SND_AUDIOSTREAMFORMAT_WMA_NOASF_HDR  ((__u32) 0x00000002)
+
+#define SND_AUDIOPROFILE_REALAUDIO           ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_REALAUDIO_G2           ((__u32) 0x00000001)
+#define SND_AUDIOMODE_REALAUDIO_8            ((__u32) 0x00000002)
+#define SND_AUDIOMODE_REALAUDIO_10           ((__u32) 0x00000004)
+#define SND_AUDIOMODE_REALAUDIO_SURROUND     ((__u32) 0x00000008)
+
+#define SND_AUDIOPROFILE_VORBIS              ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_VORBIS                 ((__u32) 0x00000001)
+
+#define SND_AUDIOPROFILE_FLAC                ((__u32) 0x00000001)
+
+/*
+ * Define quality levels for FLAC encoders, from LEVEL0 (fast)
+ * to LEVEL8 (best)
+ */
+#define SND_AUDIOMODE_FLAC_LEVEL0            ((__u32) 0x00000001)
+#define SND_AUDIOMODE_FLAC_LEVEL1            ((__u32) 0x00000002)
+#define SND_AUDIOMODE_FLAC_LEVEL2            ((__u32) 0x00000004)
+#define SND_AUDIOMODE_FLAC_LEVEL3            ((__u32) 0x00000008)
+#define SND_AUDIOMODE_FLAC_LEVEL4            ((__u32) 0x00000010)
+#define SND_AUDIOMODE_FLAC_LEVEL5            ((__u32) 0x00000020)
+#define SND_AUDIOMODE_FLAC_LEVEL6            ((__u32) 0x00000040)
+#define SND_AUDIOMODE_FLAC_LEVEL7            ((__u32) 0x00000080)
+#define SND_AUDIOMODE_FLAC_LEVEL8            ((__u32) 0x00000100)
+
+#define SND_AUDIOSTREAMFORMAT_FLAC           ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_FLAC_OGG       ((__u32) 0x00000002)
+
+/* IEC61937 payloads without CUVP and preambles */
+#define SND_AUDIOPROFILE_IEC61937            ((__u32) 0x00000001)
+/* IEC61937 with S/PDIF preambles+CUVP bits in 32-bit containers */
+#define SND_AUDIOPROFILE_IEC61937_SPDIF      ((__u32) 0x00000002)
+
+/*
+ * IEC modes are mandatory for decoders. Format autodetection
+ * will only happen on the DSP side with mode 0. The PCM mode should
+ * not be used, the PCM codec should be used instead.
+ */
+#define SND_AUDIOMODE_IEC_REF_STREAM_HEADER  ((__u32) 0x00000000)
+#define SND_AUDIOMODE_IEC_LPCM              ((__u32) 0x00000001)
+#define SND_AUDIOMODE_IEC_AC3               ((__u32) 0x00000002)
+#define SND_AUDIOMODE_IEC_MPEG1                     ((__u32) 0x00000004)
+#define SND_AUDIOMODE_IEC_MP3               ((__u32) 0x00000008)
+#define SND_AUDIOMODE_IEC_MPEG2                     ((__u32) 0x00000010)
+#define SND_AUDIOMODE_IEC_AACLC                     ((__u32) 0x00000020)
+#define SND_AUDIOMODE_IEC_DTS               ((__u32) 0x00000040)
+#define SND_AUDIOMODE_IEC_ATRAC                     ((__u32) 0x00000080)
+#define SND_AUDIOMODE_IEC_SACD              ((__u32) 0x00000100)
+#define SND_AUDIOMODE_IEC_EAC3              ((__u32) 0x00000200)
+#define SND_AUDIOMODE_IEC_DTS_HD            ((__u32) 0x00000400)
+#define SND_AUDIOMODE_IEC_MLP               ((__u32) 0x00000800)
+#define SND_AUDIOMODE_IEC_DST               ((__u32) 0x00001000)
+#define SND_AUDIOMODE_IEC_WMAPRO            ((__u32) 0x00002000)
+#define SND_AUDIOMODE_IEC_REF_CXT            ((__u32) 0x00004000)
+#define SND_AUDIOMODE_IEC_HE_AAC            ((__u32) 0x00008000)
+#define SND_AUDIOMODE_IEC_HE_AAC2           ((__u32) 0x00010000)
+#define SND_AUDIOMODE_IEC_MPEG_SURROUND             ((__u32) 0x00020000)
+
+#define SND_AUDIOPROFILE_G723_1              ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_G723_1_ANNEX_A         ((__u32) 0x00000001)
+#define SND_AUDIOMODE_G723_1_ANNEX_B         ((__u32) 0x00000002)
+#define SND_AUDIOMODE_G723_1_ANNEX_C         ((__u32) 0x00000004)
+
+#define SND_AUDIOPROFILE_G729                ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_G729_ANNEX_A           ((__u32) 0x00000001)
+#define SND_AUDIOMODE_G729_ANNEX_B           ((__u32) 0x00000002)
+
+/* <FIXME: multichannel encoders aren't supported for now. Would need
+   an additional definition of channel arrangement> */
+
+/* VBR/CBR definitions */
+#define SND_RATECONTROLMODE_CONSTANTBITRATE  ((__u32) 0x00000001)
+#define SND_RATECONTROLMODE_VARIABLEBITRATE  ((__u32) 0x00000002)
+
+/* Encoder options */
+
+struct snd_enc_wma {
+       __u32 super_block_align; /* WMA Type-specific data */
+};
+
+
+/**
+ * struct snd_enc_vorbis
+ * @quality: Sets encoding quality to n, between -1 (low) and 10 (high).
+ * In the default mode of operation, the quality level is 3.
+ * Normal quality range is 0 - 10.
+ * @managed: Boolean. Set  bitrate  management  mode. This turns off the
+ * normal VBR encoding, but allows hard or soft bitrate constraints to be
+ * enforced by the encoder. This mode can be slower, and may also be
+ * lower quality. It is primarily useful for streaming.
+ * @max_bit_rate: Enabled only if managed is TRUE
+ * @min_bit_rate: Enabled only if managed is TRUE
+ * @downmix: Boolean. Downmix input from stereo to mono (has no effect on
+ * non-stereo streams). Useful for lower-bitrate encoding.
+ *
+ * These options were extracted from the OpenMAX IL spec and Gstreamer vorbisenc
+ * properties
+ *
+ * For best quality users should specify VBR mode and set quality levels.
+ */
+
+struct snd_enc_vorbis {
+       __s32 quality;
+       __u32 managed;
+       __u32 max_bit_rate;
+       __u32 min_bit_rate;
+       __u32 downmix;
+} __attribute__((packed, aligned(4)));
+
+
+/**
+ * struct snd_enc_real
+ * @quant_bits: number of coupling quantization bits in the stream
+ * @start_region: coupling start region in the stream
+ * @num_regions: number of regions value
+ *
+ * These options were extracted from the OpenMAX IL spec
+ */
+
+struct snd_enc_real {
+       __u32 quant_bits;
+       __u32 start_region;
+       __u32 num_regions;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_enc_flac
+ * @num: serial number, valid only for OGG formats
+ *     needs to be set by application
+ * @gain: Add replay gain tags
+ *
+ * These options were extracted from the FLAC online documentation
+ * at http://flac.sourceforge.net/documentation_tools_flac.html
+ *
+ * To make the API simpler, it is assumed that the user will select quality
+ * profiles. Additional options that affect encoding quality and speed can
+ * be added at a later stage if needed.
+ *
+ * By default the Subset format is used by encoders.
+ *
+ * TAGS such as pictures, etc, cannot be handled by an offloaded encoder and are
+ * not supported in this API.
+ */
+
+struct snd_enc_flac {
+       __u32 num;
+       __u32 gain;
+} __attribute__((packed, aligned(4)));
+
+struct snd_enc_generic {
+       __u32 bw;       /* encoder bandwidth */
+       __s32 reserved[15];
+} __attribute__((packed, aligned(4)));
+
+union snd_codec_options {
+       struct snd_enc_wma wma;
+       struct snd_enc_vorbis vorbis;
+       struct snd_enc_real real;
+       struct snd_enc_flac flac;
+       struct snd_enc_generic generic;
+} __attribute__((packed, aligned(4)));
+
+/** struct snd_codec_desc - description of codec capabilities
+ * @max_ch: Maximum number of audio channels
+ * @sample_rates: Sampling rates in Hz, use values like 48000 for this
+ * @num_sample_rates: Number of valid values in sample_rates array
+ * @bit_rate: Indexed array containing supported bit rates
+ * @num_bitrates: Number of valid values in bit_rate array
+ * @rate_control: value is specified by SND_RATECONTROLMODE defines.
+ * @profiles: Supported profiles. See SND_AUDIOPROFILE defines.
+ * @modes: Supported modes. See SND_AUDIOMODE defines
+ * @formats: Supported formats. See SND_AUDIOSTREAMFORMAT defines
+ * @min_buffer: Minimum buffer size handled by codec implementation
+ * @reserved: reserved for future use
+ *
+ * This structure provides a scalar value for profiles, modes and stream
+ * format fields.
+ * If an implementation supports multiple combinations, they will be listed as
+ * codecs with different descriptors, for example there would be 2 descriptors
+ * for AAC-RAW and AAC-ADTS.
+ * This entails some redundancy but makes it easier to avoid invalid
+ * configurations.
+ *
+ */
+
+struct snd_codec_desc {
+       __u32 max_ch;
+       __u32 sample_rates[MAX_NUM_SAMPLE_RATES];
+       __u32 num_sample_rates;
+       __u32 bit_rate[MAX_NUM_BITRATES];
+       __u32 num_bitrates;
+       __u32 rate_control;
+       __u32 profiles;
+       __u32 modes;
+       __u32 formats;
+       __u32 min_buffer;
+       __u32 reserved[15];
+} __attribute__((packed, aligned(4)));
+
+/** struct snd_codec
+ * @id: Identifies the supported audio encoder/decoder.
+ *             See SND_AUDIOCODEC macros.
+ * @ch_in: Number of input audio channels
+ * @ch_out: Number of output channels. In case of contradiction between
+ *             this field and the channelMode field, the channelMode field
+ *             overrides.
+ * @sample_rate: Audio sample rate of input data in Hz, use values like 48000
+ *             for this.
+ * @bit_rate: Bitrate of encoded data. May be ignored by decoders
+ * @rate_control: Encoding rate control. See SND_RATECONTROLMODE defines.
+ *               Encoders may rely on profiles for quality levels.
+ *              May be ignored by decoders.
+ * @profile: Mandatory for encoders, can be mandatory for specific
+ *             decoders as well. See SND_AUDIOPROFILE defines.
+ * @level: Supported level (Only used by WMA at the moment)
+ * @ch_mode: Channel mode for encoder. See SND_AUDIOCHANMODE defines
+ * @format: Format of encoded bistream. Mandatory when defined.
+ *             See SND_AUDIOSTREAMFORMAT defines.
+ * @align: Block alignment in bytes of an audio sample.
+ *             Only required for PCM or IEC formats.
+ * @options: encoder-specific settings
+ * @reserved: reserved for future use
+ */
+
+struct snd_codec {
+       __u32 id;
+       __u32 ch_in;
+       __u32 ch_out;
+       __u32 sample_rate;
+       __u32 bit_rate;
+       __u32 rate_control;
+       __u32 profile;
+       __u32 level;
+       __u32 ch_mode;
+       __u32 format;
+       __u32 align;
+       union snd_codec_options options;
+       __u32 reserved[3];
+} __attribute__((packed, aligned(4)));
+
+#endif
diff --git a/lib/libdss-include/include/sound/emu10k1.h b/lib/libdss-include/include/sound/emu10k1.h
new file mode 100644 (file)
index 0000000..833aa69
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+ *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
+ *                  Creative Labs, Inc.
+ *  Definitions for EMU10K1 (SB Live!) chips
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_EMU10K1_H
+#define __SOUND_EMU10K1_H
+
+#include <linux/types.h>
+#include <sound/asound.h>
+
+/*
+ * ---- FX8010 ----
+ */
+
+#define EMU10K1_CARD_CREATIVE                  0x00000000
+#define EMU10K1_CARD_EMUAPS                    0x00000001
+
+#define EMU10K1_FX8010_PCM_COUNT               8
+
+/*
+ * Following definition is copied from linux/types.h to support compiling
+ * this header file in userspace since they are not generally available for
+ * uapi headers.
+ */
+#define __EMU10K1_DECLARE_BITMAP(name,bits) \
+       unsigned long name[(bits) / (sizeof(unsigned long) * 8)]
+
+/* instruction set */
+#define iMAC0   0x00   /* R = A + (X * Y >> 31)   ; saturation */
+#define iMAC1   0x01   /* R = A + (-X * Y >> 31)  ; saturation */
+#define iMAC2   0x02   /* R = A + (X * Y >> 31)   ; wraparound */
+#define iMAC3   0x03   /* R = A + (-X * Y >> 31)  ; wraparound */
+#define iMACINT0 0x04  /* R = A + X * Y           ; saturation */
+#define iMACINT1 0x05  /* R = A + X * Y           ; wraparound (31-bit) */
+#define iACC3   0x06   /* R = A + X + Y           ; saturation */
+#define iMACMV   0x07  /* R = A, acc += X * Y >> 31 */
+#define iANDXOR  0x08  /* R = (A & X) ^ Y */
+#define iTSTNEG  0x09  /* R = (A >= Y) ? X : ~X */
+#define iLIMITGE 0x0a  /* R = (A >= Y) ? X : Y */
+#define iLIMITLT 0x0b  /* R = (A < Y) ? X : Y */
+#define iLOG    0x0c   /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */
+#define iEXP    0x0d   /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */
+#define iINTERP  0x0e  /* R = A + (X * (Y - A) >> 31)  ; saturation */
+#define iSKIP    0x0f  /* R = A (cc_reg), X (count), Y (cc_test) */
+
+/* GPRs */
+#define FXBUS(x)       (0x00 + (x))    /* x = 0x00 - 0x0f */
+#define EXTIN(x)       (0x10 + (x))    /* x = 0x00 - 0x0f */
+#define EXTOUT(x)      (0x20 + (x))    /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */
+#define FXBUS2(x)      (0x30 + (x))    /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */
+                                       /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */
+
+#define C_00000000     0x40
+#define C_00000001     0x41
+#define C_00000002     0x42
+#define C_00000003     0x43
+#define C_00000004     0x44
+#define C_00000008     0x45
+#define C_00000010     0x46
+#define C_00000020     0x47
+#define C_00000100     0x48
+#define C_00010000     0x49
+#define C_00080000     0x4a
+#define C_10000000     0x4b
+#define C_20000000     0x4c
+#define C_40000000     0x4d
+#define C_80000000     0x4e
+#define C_7fffffff     0x4f
+#define C_ffffffff     0x50
+#define C_fffffffe     0x51
+#define C_c0000000     0x52
+#define C_4f1bbcdc     0x53
+#define C_5a7ef9db     0x54
+#define C_00100000     0x55            /* ?? */
+#define GPR_ACCU       0x56            /* ACCUM, accumulator */
+#define GPR_COND       0x57            /* CCR, condition register */
+#define GPR_NOISE0     0x58            /* noise source */
+#define GPR_NOISE1     0x59            /* noise source */
+#define GPR_IRQ                0x5a            /* IRQ register */
+#define GPR_DBAC       0x5b            /* TRAM Delay Base Address Counter */
+#define GPR(x)         (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */
+#define ITRAM_DATA(x)  (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_DATA(x)  (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
+#define ITRAM_ADDR(x)  (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_ADDR(x)  (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
+
+#define A_ITRAM_DATA(x)        (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_DATA(x)        (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_ADDR(x)        (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_ADDR(x)        (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+
+#define A_FXBUS(x)     (0x00 + (x))    /* x = 0x00 - 0x3f FX buses */
+#define A_EXTIN(x)     (0x40 + (x))    /* x = 0x00 - 0x0f physical ins */
+#define A_P16VIN(x)    (0x50 + (x))    /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */
+#define A_EXTOUT(x)    (0x60 + (x))    /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown   */
+#define A_FXBUS2(x)    (0x80 + (x))    /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */
+#define A_EMU32OUTH(x) (0xa0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */
+#define A_EMU32OUTL(x) (0xb0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */
+#define A3_EMU32IN(x)  (0x160 + (x))   /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */
+#define A3_EMU32OUT(x) (0x1E0 + (x))   /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */
+#define A_GPR(x)       (A_FXGPREGBASE + (x))
+
+/* cc_reg constants */
+#define CC_REG_NORMALIZED C_00000001
+#define CC_REG_BORROW  C_00000002
+#define CC_REG_MINUS   C_00000004
+#define CC_REG_ZERO    C_00000008
+#define CC_REG_SATURATE        C_00000010
+#define CC_REG_NONZERO C_00000100
+
+/* FX buses */
+#define FXBUS_PCM_LEFT         0x00
+#define FXBUS_PCM_RIGHT                0x01
+#define FXBUS_PCM_LEFT_REAR    0x02
+#define FXBUS_PCM_RIGHT_REAR   0x03
+#define FXBUS_MIDI_LEFT                0x04
+#define FXBUS_MIDI_RIGHT       0x05
+#define FXBUS_PCM_CENTER       0x06
+#define FXBUS_PCM_LFE          0x07
+#define FXBUS_PCM_LEFT_FRONT   0x08
+#define FXBUS_PCM_RIGHT_FRONT  0x09
+#define FXBUS_MIDI_REVERB      0x0c
+#define FXBUS_MIDI_CHORUS      0x0d
+#define FXBUS_PCM_LEFT_SIDE    0x0e
+#define FXBUS_PCM_RIGHT_SIDE   0x0f
+#define FXBUS_PT_LEFT          0x14
+#define FXBUS_PT_RIGHT         0x15
+
+/* Inputs */
+#define EXTIN_AC97_L      0x00 /* AC'97 capture channel - left */
+#define EXTIN_AC97_R      0x01 /* AC'97 capture channel - right */
+#define EXTIN_SPDIF_CD_L   0x02        /* internal S/PDIF CD - onboard - left */
+#define EXTIN_SPDIF_CD_R   0x03        /* internal S/PDIF CD - onboard - right */
+#define EXTIN_ZOOM_L      0x04 /* Zoom Video I2S - left */
+#define EXTIN_ZOOM_R      0x05 /* Zoom Video I2S - right */
+#define EXTIN_TOSLINK_L           0x06 /* LiveDrive - TOSLink Optical - left */
+#define EXTIN_TOSLINK_R    0x07        /* LiveDrive - TOSLink Optical - right */
+#define EXTIN_LINE1_L     0x08 /* LiveDrive - Line/Mic 1 - left */
+#define EXTIN_LINE1_R     0x09 /* LiveDrive - Line/Mic 1 - right */
+#define EXTIN_COAX_SPDIF_L 0x0a        /* LiveDrive - Coaxial S/PDIF - left */
+#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */
+#define EXTIN_LINE2_L     0x0c /* LiveDrive - Line/Mic 2 - left */
+#define EXTIN_LINE2_R     0x0d /* LiveDrive - Line/Mic 2 - right */
+
+/* Outputs */
+#define EXTOUT_AC97_L     0x00 /* AC'97 playback channel - left */
+#define EXTOUT_AC97_R     0x01 /* AC'97 playback channel - right */
+#define EXTOUT_TOSLINK_L   0x02        /* LiveDrive - TOSLink Optical - left */
+#define EXTOUT_TOSLINK_R   0x03        /* LiveDrive - TOSLink Optical - right */
+#define EXTOUT_AC97_CENTER 0x04        /* SB Live 5.1 - center */
+#define EXTOUT_AC97_LFE           0x05 /* SB Live 5.1 - LFE */
+#define EXTOUT_HEADPHONE_L 0x06        /* LiveDrive - Headphone - left */
+#define EXTOUT_HEADPHONE_R 0x07        /* LiveDrive - Headphone - right */
+#define EXTOUT_REAR_L     0x08 /* Rear channel - left */
+#define EXTOUT_REAR_R     0x09 /* Rear channel - right */
+#define EXTOUT_ADC_CAP_L   0x0a        /* ADC Capture buffer - left */
+#define EXTOUT_ADC_CAP_R   0x0b        /* ADC Capture buffer - right */
+#define EXTOUT_MIC_CAP    0x0c /* MIC Capture buffer */
+#define EXTOUT_AC97_REAR_L 0x0d        /* SB Live 5.1 (c) 2003 - Rear Left */
+#define EXTOUT_AC97_REAR_R 0x0e        /* SB Live 5.1 (c) 2003 - Rear Right */
+#define EXTOUT_ACENTER    0x11 /* Analog Center */
+#define EXTOUT_ALFE       0x12 /* Analog LFE */
+
+/* Audigy Inputs */
+#define A_EXTIN_AC97_L         0x00    /* AC'97 capture channel - left */
+#define A_EXTIN_AC97_R         0x01    /* AC'97 capture channel - right */
+#define A_EXTIN_SPDIF_CD_L     0x02    /* digital CD left */
+#define A_EXTIN_SPDIF_CD_R     0x03    /* digital CD left */
+#define A_EXTIN_OPT_SPDIF_L     0x04    /* audigy drive Optical SPDIF - left */
+#define A_EXTIN_OPT_SPDIF_R     0x05    /*                              right */ 
+#define A_EXTIN_LINE2_L                0x08    /* audigy drive line2/mic2 - left */
+#define A_EXTIN_LINE2_R                0x09    /*                           right */
+#define A_EXTIN_ADC_L          0x0a    /* Philips ADC - left */
+#define A_EXTIN_ADC_R          0x0b    /*               right */
+#define A_EXTIN_AUX2_L         0x0c    /* audigy drive aux2 - left */
+#define A_EXTIN_AUX2_R         0x0d    /*                   - right */
+
+/* Audigiy Outputs */
+#define A_EXTOUT_FRONT_L       0x00    /* digital front left */
+#define A_EXTOUT_FRONT_R       0x01    /*               right */
+#define A_EXTOUT_CENTER                0x02    /* digital front center */
+#define A_EXTOUT_LFE           0x03    /* digital front lfe */
+#define A_EXTOUT_HEADPHONE_L   0x04    /* headphone audigy drive left */
+#define A_EXTOUT_HEADPHONE_R   0x05    /*                        right */
+#define A_EXTOUT_REAR_L                0x06    /* digital rear left */
+#define A_EXTOUT_REAR_R                0x07    /*              right */
+#define A_EXTOUT_AFRONT_L      0x08    /* analog front left */
+#define A_EXTOUT_AFRONT_R      0x09    /*              right */
+#define A_EXTOUT_ACENTER       0x0a    /* analog center */
+#define A_EXTOUT_ALFE          0x0b    /* analog LFE */
+#define A_EXTOUT_ASIDE_L       0x0c    /* analog side left  - Audigy 2 ZS */
+#define A_EXTOUT_ASIDE_R       0x0d    /*             right - Audigy 2 ZS */
+#define A_EXTOUT_AREAR_L       0x0e    /* analog rear left */
+#define A_EXTOUT_AREAR_R       0x0f    /*             right */
+#define A_EXTOUT_AC97_L                0x10    /* AC97 left (front) */
+#define A_EXTOUT_AC97_R                0x11    /*      right */
+#define A_EXTOUT_ADC_CAP_L     0x16    /* ADC capture buffer left */
+#define A_EXTOUT_ADC_CAP_R     0x17    /*                    right */
+#define A_EXTOUT_MIC_CAP       0x18    /* Mic capture buffer */
+
+/* Audigy constants */
+#define A_C_00000000   0xc0
+#define A_C_00000001   0xc1
+#define A_C_00000002   0xc2
+#define A_C_00000003   0xc3
+#define A_C_00000004   0xc4
+#define A_C_00000008   0xc5
+#define A_C_00000010   0xc6
+#define A_C_00000020   0xc7
+#define A_C_00000100   0xc8
+#define A_C_00010000   0xc9
+#define A_C_00000800   0xca
+#define A_C_10000000   0xcb
+#define A_C_20000000   0xcc
+#define A_C_40000000   0xcd
+#define A_C_80000000   0xce
+#define A_C_7fffffff   0xcf
+#define A_C_ffffffff   0xd0
+#define A_C_fffffffe   0xd1
+#define A_C_c0000000   0xd2
+#define A_C_4f1bbcdc   0xd3
+#define A_C_5a7ef9db   0xd4
+#define A_C_00100000   0xd5
+#define A_GPR_ACCU     0xd6            /* ACCUM, accumulator */
+#define A_GPR_COND     0xd7            /* CCR, condition register */
+#define A_GPR_NOISE0   0xd8            /* noise source */
+#define A_GPR_NOISE1   0xd9            /* noise source */
+#define A_GPR_IRQ      0xda            /* IRQ register */
+#define A_GPR_DBAC     0xdb            /* TRAM Delay Base Address Counter - internal */
+#define A_GPR_DBACE    0xde            /* TRAM Delay Base Address Counter - external */
+
+/* definitions for debug register */
+#define EMU10K1_DBG_ZC                 0x80000000      /* zero tram counter */
+#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000      /* saturation control */
+#define EMU10K1_DBG_SATURATION_ADDR    0x01ff0000      /* saturation address */
+#define EMU10K1_DBG_SINGLE_STEP                0x00008000      /* single step mode */
+#define EMU10K1_DBG_STEP               0x00004000      /* start single step */
+#define EMU10K1_DBG_CONDITION_CODE     0x00003e00      /* condition code */
+#define EMU10K1_DBG_SINGLE_STEP_ADDR   0x000001ff      /* single step address */
+
+/* tank memory address line */
+#define TANKMEMADDRREG_ADDR_MASK 0x000fffff    /* 20 bit tank address field                    */
+#define TANKMEMADDRREG_CLEAR    0x00800000     /* Clear tank memory                            */
+#define TANKMEMADDRREG_ALIGN    0x00400000     /* Align read or write relative to tank access  */
+#define TANKMEMADDRREG_WRITE    0x00200000     /* Write to tank memory                         */
+#define TANKMEMADDRREG_READ     0x00100000     /* Read from tank memory                        */
+
+struct snd_emu10k1_fx8010_info {
+       unsigned int internal_tram_size;        /* in samples */
+       unsigned int external_tram_size;        /* in samples */
+       char fxbus_names[16][32];               /* names of FXBUSes */
+       char extin_names[16][32];               /* names of external inputs */
+       char extout_names[32][32];              /* names of external outputs */
+       unsigned int gpr_controls;              /* count of GPR controls */
+};
+
+#define EMU10K1_GPR_TRANSLATION_NONE           0
+#define EMU10K1_GPR_TRANSLATION_TABLE100       1
+#define EMU10K1_GPR_TRANSLATION_BASS           2
+#define EMU10K1_GPR_TRANSLATION_TREBLE         3
+#define EMU10K1_GPR_TRANSLATION_ONOFF          4
+
+struct snd_emu10k1_fx8010_control_gpr {
+       struct snd_ctl_elem_id id;              /* full control ID definition */
+       unsigned int vcount;            /* visible count */
+       unsigned int count;             /* count of GPR (1..16) */
+       unsigned short gpr[32];         /* GPR number(s) */
+       unsigned int value[32];         /* initial values */
+       unsigned int min;               /* minimum range */
+       unsigned int max;               /* maximum range */
+       unsigned int translation;       /* translation type (EMU10K1_GPR_TRANSLATION*) */
+       const unsigned int *tlv;
+};
+
+/* old ABI without TLV support */
+struct snd_emu10k1_fx8010_control_old_gpr {
+       struct snd_ctl_elem_id id;
+       unsigned int vcount;
+       unsigned int count;
+       unsigned short gpr[32];
+       unsigned int value[32];
+       unsigned int min;
+       unsigned int max;
+       unsigned int translation;
+};
+
+struct snd_emu10k1_fx8010_code {
+       char name[128];
+
+       __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */
+       __u32 *gpr_map;         /* initializers */
+
+       unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; /* GPR controls to add/replace */
+
+       unsigned int gpr_del_control_count; /* count of GPR controls to remove */
+       struct snd_ctl_elem_id *gpr_del_controls; /* IDs of GPR controls to remove */
+
+       unsigned int gpr_list_control_count; /* count of GPR controls to list */
+       unsigned int gpr_list_control_total; /* total count of GPR controls */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; /* listed GPR controls */
+
+       __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */
+       __u32 *tram_data_map;     /* data initializers */
+       __u32 *tram_addr_map;     /* map initializers */
+
+       __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */
+       __u32 *code;              /* one instruction - 64 bits */
+};
+
+struct snd_emu10k1_fx8010_tram {
+       unsigned int address;           /* 31.bit == 1 -> external TRAM */
+       unsigned int size;              /* size in samples (4 bytes) */
+       unsigned int *samples;          /* pointer to samples (20-bit) */
+                                       /* NULL->clear memory */
+};
+
+struct snd_emu10k1_fx8010_pcm_rec {
+       unsigned int substream;         /* substream number */
+       unsigned int res1;              /* reserved */
+       unsigned int channels;          /* 16-bit channels count, zero = remove this substream */
+       unsigned int tram_start;        /* ring buffer position in TRAM (in samples) */
+       unsigned int buffer_size;       /* count of buffered samples */
+       unsigned short gpr_size;                /* GPR containing size of ringbuffer in samples (host) */
+       unsigned short gpr_ptr;         /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
+       unsigned short gpr_count;       /* GPR containing count of samples between two interrupts (host) */
+       unsigned short gpr_tmpcount;    /* GPR containing current count of samples to interrupt (host = set, FX8010) */
+       unsigned short gpr_trigger;     /* GPR containing trigger (activate) information (host) */
+       unsigned short gpr_running;     /* GPR containing info if PCM is running (FX8010) */
+       unsigned char pad;              /* reserved */
+       unsigned char etram[32];        /* external TRAM address & data (one per channel) */
+       unsigned int res2;              /* reserved */
+};
+
+#define SNDRV_EMU10K1_VERSION          SNDRV_PROTOCOL_VERSION(1, 0, 1)
+
+#define SNDRV_EMU10K1_IOCTL_INFO       _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
+#define SNDRV_EMU10K1_IOCTL_CODE_POKE  _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
+#define SNDRV_EMU10K1_IOCTL_CODE_PEEK  _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
+#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
+#define SNDRV_EMU10K1_IOCTL_TRAM_POKE  _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
+#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK  _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
+#define SNDRV_EMU10K1_IOCTL_PCM_POKE   _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
+#define SNDRV_EMU10K1_IOCTL_PCM_PEEK   _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
+#define SNDRV_EMU10K1_IOCTL_PVERSION   _IOR ('H', 0x40, int)
+#define SNDRV_EMU10K1_IOCTL_STOP       _IO  ('H', 0x80)
+#define SNDRV_EMU10K1_IOCTL_CONTINUE   _IO  ('H', 0x81)
+#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
+#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP        _IOW ('H', 0x83, int)
+#define SNDRV_EMU10K1_IOCTL_DBG_READ   _IOR ('H', 0x84, int)
+
+/* typedefs for compatibility to user-space */
+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
+
+#endif /* __SOUND_EMU10K1_H */
diff --git a/lib/libdss-include/include/sound/firewire.h b/lib/libdss-include/include/sound/firewire.h
new file mode 100644 (file)
index 0000000..2da0160
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef _SOUND_FIREWIRE_H_INCLUDED
+#define _SOUND_FIREWIRE_H_INCLUDED
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* events can be read() from the hwdep device */
+
+#define SNDRV_FIREWIRE_EVENT_LOCK_STATUS       0x000010cc
+#define SNDRV_FIREWIRE_EVENT_DICE_NOTIFICATION 0xd1ce004e
+#define SNDRV_FIREWIRE_EVENT_EFW_RESPONSE      0x4e617475
+#define SNDRV_FIREWIRE_EVENT_DIGI00X_MESSAGE   0x746e736c
+
+struct snd_firewire_event_common {
+       unsigned int type; /* SNDRV_FIREWIRE_EVENT_xxx */
+};
+
+struct snd_firewire_event_lock_status {
+       unsigned int type;
+       unsigned int status; /* 0/1 = unlocked/locked */
+};
+
+struct snd_firewire_event_dice_notification {
+       unsigned int type;
+       unsigned int notification; /* DICE-specific bits */
+};
+
+#define SND_EFW_TRANSACTION_USER_SEQNUM_MAX    ((__u32)((__u16)~0) - 1)
+/* each field should be in big endian */
+struct snd_efw_transaction {
+       __be32 length;
+       __be32 version;
+       __be32 seqnum;
+       __be32 category;
+       __be32 command;
+       __be32 status;
+       __be32 params[0];
+};
+struct snd_firewire_event_efw_response {
+       unsigned int type;
+       __be32 response[0];     /* some responses */
+};
+
+struct snd_firewire_event_digi00x_message {
+       unsigned int type;
+       __u32 message;  /* Digi00x-specific message */
+};
+
+union snd_firewire_event {
+       struct snd_firewire_event_common            common;
+       struct snd_firewire_event_lock_status       lock_status;
+       struct snd_firewire_event_dice_notification dice_notification;
+       struct snd_firewire_event_efw_response      efw_response;
+       struct snd_firewire_event_digi00x_message   digi00x_message;
+};
+
+
+#define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info)
+#define SNDRV_FIREWIRE_IOCTL_LOCK      _IO('H', 0xf9)
+#define SNDRV_FIREWIRE_IOCTL_UNLOCK    _IO('H', 0xfa)
+
+#define SNDRV_FIREWIRE_TYPE_DICE       1
+#define SNDRV_FIREWIRE_TYPE_FIREWORKS  2
+#define SNDRV_FIREWIRE_TYPE_BEBOB      3
+#define SNDRV_FIREWIRE_TYPE_OXFW       4
+#define SNDRV_FIREWIRE_TYPE_DIGI00X    5
+#define SNDRV_FIREWIRE_TYPE_TASCAM     6
+/* RME, MOTU, ... */
+
+struct snd_firewire_get_info {
+       unsigned int type; /* SNDRV_FIREWIRE_TYPE_xxx */
+       unsigned int card; /* same as fw_cdev_get_info.card */
+       unsigned char guid[8];
+       char device_name[16]; /* device node in /dev */
+};
+
+/*
+ * SNDRV_FIREWIRE_IOCTL_LOCK prevents the driver from streaming.
+ * Returns -EBUSY if the driver is already streaming.
+ */
+
+#endif /* _SOUND_FIREWIRE_H_INCLUDED */
diff --git a/lib/libdss-include/include/sound/hdsp.h b/lib/libdss-include/include/sound/hdsp.h
new file mode 100644 (file)
index 0000000..56b11a7
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef __SOUND_HDSP_H
+#define __SOUND_HDSP_H
+
+/*
+ *   Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
+ *    
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/types.h>
+
+#define HDSP_MATRIX_MIXER_SIZE 2048
+
+enum HDSP_IO_Type {
+       Digiface,
+       Multiface,
+       H9652,
+       H9632,
+       RPM,
+       Undefined,
+};
+
+struct hdsp_peak_rms {
+       __u32 input_peaks[26];
+       __u32 playback_peaks[26];
+       __u32 output_peaks[28];
+       __u64 input_rms[26];
+       __u64 playback_rms[26];
+       /* These are only used for H96xx cards */
+       __u64 output_rms[26];
+};
+
+#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms)
+
+struct hdsp_config_info {
+       unsigned char pref_sync_ref;
+       unsigned char wordclock_sync_check;
+       unsigned char spdif_sync_check;
+       unsigned char adatsync_sync_check;
+       unsigned char adat_sync_check[3];
+       unsigned char spdif_in;
+       unsigned char spdif_out;
+       unsigned char spdif_professional;
+       unsigned char spdif_emphasis;
+       unsigned char spdif_nonaudio;
+       unsigned int spdif_sample_rate;
+       unsigned int system_sample_rate;
+       unsigned int autosync_sample_rate;
+       unsigned char system_clock_mode;
+       unsigned char clock_source;
+       unsigned char autosync_ref;
+       unsigned char line_out;
+       unsigned char passthru; 
+       unsigned char da_gain;
+       unsigned char ad_gain;
+       unsigned char phone_gain;
+       unsigned char xlr_breakout_cable;
+       unsigned char analog_extension_board;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info)
+
+struct hdsp_firmware {
+       void *firmware_data;    /* 24413 x 4 bytes */
+};
+
+#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware)
+
+struct hdsp_version {
+       enum HDSP_IO_Type io_type;
+       unsigned short firmware_rev;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version)
+
+struct hdsp_mixer {
+       unsigned short matrix[HDSP_MATRIX_MIXER_SIZE];
+};
+
+#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer)
+
+struct hdsp_9632_aeb {
+       int aebi;
+       int aebo;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
+
+/* typedefs for compatibility to user-space */
+typedef enum HDSP_IO_Type HDSP_IO_Type;
+typedef struct hdsp_peak_rms hdsp_peak_rms_t;
+typedef struct hdsp_config_info hdsp_config_info_t;
+typedef struct hdsp_firmware hdsp_firmware_t;
+typedef struct hdsp_version hdsp_version_t;
+typedef struct hdsp_mixer hdsp_mixer_t;
+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
+
+#endif /* __SOUND_HDSP_H */
diff --git a/lib/libdss-include/include/sound/hdspm.h b/lib/libdss-include/include/sound/hdspm.h
new file mode 100644 (file)
index 0000000..c4db6f5
--- /dev/null
@@ -0,0 +1,231 @@
+#ifndef __SOUND_HDSPM_H
+#define __SOUND_HDSPM_H
+/*
+ *   Copyright (C) 2003 Winfried Ritsch (IEM)
+ *   based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/types.h>
+
+/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
+#define HDSPM_MAX_CHANNELS      64
+
+enum hdspm_io_type {
+       MADI,
+       MADIface,
+       AIO,
+       AES32,
+       RayDAT
+};
+
+enum hdspm_speed {
+       ss,
+       ds,
+       qs
+};
+
+/* -------------------- IOCTL Peak/RMS Meters -------------------- */
+
+struct hdspm_peak_rms {
+       __u32 input_peaks[64];
+       __u32 playback_peaks[64];
+       __u32 output_peaks[64];
+
+       __u64 input_rms[64];
+       __u64 playback_rms[64];
+       __u64 output_rms[64];
+
+       __u8 speed; /* enum {ss, ds, qs} */
+       int status2;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
+       _IOR('H', 0x42, struct hdspm_peak_rms)
+
+/* ------------ CONFIG block IOCTL ---------------------- */
+
+struct hdspm_config {
+       unsigned char pref_sync_ref;
+       unsigned char wordclock_sync_check;
+       unsigned char madi_sync_check;
+       unsigned int system_sample_rate;
+       unsigned int autosync_sample_rate;
+       unsigned char system_clock_mode;
+       unsigned char clock_source;
+       unsigned char autosync_ref;
+       unsigned char line_out;
+       unsigned int passthru;
+       unsigned int analog_out;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
+       _IOR('H', 0x41, struct hdspm_config)
+
+/*
+ * If there's a TCO (TimeCode Option) board installed,
+ * there are further options and status data available.
+ * The hdspm_ltc structure contains the current SMPTE
+ * timecode and some status information and can be
+ * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
+ * hdspm_status struct.
+ */
+
+enum hdspm_ltc_format {
+       format_invalid,
+       fps_24,
+       fps_25,
+       fps_2997,
+       fps_30
+};
+
+enum hdspm_ltc_frame {
+       frame_invalid,
+       drop_frame,
+       full_frame
+};
+
+enum hdspm_ltc_input_format {
+       ntsc,
+       pal,
+       no_video
+};
+
+struct hdspm_ltc {
+       unsigned int ltc;
+
+       enum hdspm_ltc_format format;
+       enum hdspm_ltc_frame frame;
+       enum hdspm_ltc_input_format input_format;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
+
+/*
+ * The status data reflects the device's current state
+ * as determined by the card's configuration and
+ * connection status.
+ */
+
+enum hdspm_sync {
+       hdspm_sync_no_lock = 0,
+       hdspm_sync_lock = 1,
+       hdspm_sync_sync = 2
+};
+
+enum hdspm_madi_input {
+       hdspm_input_optical = 0,
+       hdspm_input_coax = 1
+};
+
+enum hdspm_madi_channel_format {
+       hdspm_format_ch_64 = 0,
+       hdspm_format_ch_56 = 1
+};
+
+enum hdspm_madi_frame_format {
+       hdspm_frame_48 = 0,
+       hdspm_frame_96 = 1
+};
+
+enum hdspm_syncsource {
+       syncsource_wc = 0,
+       syncsource_madi = 1,
+       syncsource_tco = 2,
+       syncsource_sync = 3,
+       syncsource_none = 4
+};
+
+struct hdspm_status {
+       __u8 card_type; /* enum hdspm_io_type */
+       enum hdspm_syncsource autosync_source;
+
+       __u64 card_clock;
+       __u32 master_period;
+
+       union {
+               struct {
+                       __u8 sync_wc; /* enum hdspm_sync */
+                       __u8 sync_madi; /* enum hdspm_sync */
+                       __u8 sync_tco; /* enum hdspm_sync */
+                       __u8 sync_in; /* enum hdspm_sync */
+                       __u8 madi_input; /* enum hdspm_madi_input */
+                       __u8 channel_format; /* enum hdspm_madi_channel_format */
+                       __u8 frame_format; /* enum hdspm_madi_frame_format */
+               } madi;
+       } card_specific;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_STATUS \
+       _IOR('H', 0x47, struct hdspm_status)
+
+/*
+ * Get information about the card and its add-ons.
+ */
+
+#define HDSPM_ADDON_TCO 1
+
+struct hdspm_version {
+       __u8 card_type; /* enum hdspm_io_type */
+       char cardname[20];
+       unsigned int serial;
+       unsigned short firmware_rev;
+       int addons;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
+
+/* ------------- get Matrix Mixer IOCTL --------------- */
+
+/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
+ * 32768 Bytes
+ */
+
+/* organisation is 64 channelfader in a continuous memory block */
+/* equivalent to hardware definition, maybe for future feature of mmap of
+ * them
+ */
+/* each of 64 outputs has 64 infader and 64 outfader:
+   Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
+
+#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
+
+struct hdspm_channelfader {
+       unsigned int in[HDSPM_MIXER_CHANNELS];
+       unsigned int pb[HDSPM_MIXER_CHANNELS];
+};
+
+struct hdspm_mixer {
+       struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
+};
+
+struct hdspm_mixer_ioctl {
+       struct hdspm_mixer *mixer;
+};
+
+/* use indirect access due to the limit of ioctl bit size */
+#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
+
+/* typedefs for compatibility to user-space */
+typedef struct hdspm_peak_rms hdspm_peak_rms_t;
+typedef struct hdspm_config_info hdspm_config_info_t;
+typedef struct hdspm_version hdspm_version_t;
+typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
+typedef struct hdspm_mixer hdspm_mixer_t;
+
+
+#endif
diff --git a/lib/libdss-include/include/sound/sb16_csp.h b/lib/libdss-include/include/sound/sb16_csp.h
new file mode 100644 (file)
index 0000000..255f69c
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ *  Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
+ *                        Takashi Iwai <tiwai@suse.de>
+ *
+ *  SB16ASP/AWE32 CSP control
+ *
+ *   This program is free software; you can redistribute it and/or modify 
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_SB16_CSP_H
+#define __SOUND_SB16_CSP_H
+
+
+/* CSP modes */
+#define SNDRV_SB_CSP_MODE_NONE         0x00
+#define SNDRV_SB_CSP_MODE_DSP_READ     0x01    /* Record from DSP */
+#define SNDRV_SB_CSP_MODE_DSP_WRITE    0x02    /* Play to DSP */
+#define SNDRV_SB_CSP_MODE_QSOUND               0x04    /* QSound */
+
+/* CSP load flags */
+#define SNDRV_SB_CSP_LOAD_FROMUSER     0x01
+#define SNDRV_SB_CSP_LOAD_INITBLOCK    0x02
+
+/* CSP sample width */
+#define SNDRV_SB_CSP_SAMPLE_8BIT               0x01
+#define SNDRV_SB_CSP_SAMPLE_16BIT              0x02
+
+/* CSP channels */
+#define SNDRV_SB_CSP_MONO                      0x01
+#define SNDRV_SB_CSP_STEREO            0x02
+
+/* CSP rates */
+#define SNDRV_SB_CSP_RATE_8000         0x01
+#define SNDRV_SB_CSP_RATE_11025                0x02
+#define SNDRV_SB_CSP_RATE_22050                0x04
+#define SNDRV_SB_CSP_RATE_44100                0x08
+#define SNDRV_SB_CSP_RATE_ALL          0x0f
+
+/* CSP running state */
+#define SNDRV_SB_CSP_ST_IDLE           0x00
+#define SNDRV_SB_CSP_ST_LOADED         0x01
+#define SNDRV_SB_CSP_ST_RUNNING                0x02
+#define SNDRV_SB_CSP_ST_PAUSED         0x04
+#define SNDRV_SB_CSP_ST_AUTO           0x08
+#define SNDRV_SB_CSP_ST_QSOUND         0x10
+
+/* maximum QSound value (180 degrees right) */
+#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT  0x20
+
+/* maximum microcode RIFF file size */
+#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE   0x3000
+
+/* microcode header */
+struct snd_sb_csp_mc_header {
+       char codec_name[16];            /* id name of codec */
+       unsigned short func_req;        /* requested function */
+};
+
+/* microcode to be loaded */
+struct snd_sb_csp_microcode {
+       struct snd_sb_csp_mc_header info;
+       unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE];
+};
+
+/* start CSP with sample_width in mono/stereo */
+struct snd_sb_csp_start {
+       int sample_width;       /* sample width, look above */
+       int channels;           /* channels, look above */
+};
+
+/* CSP information */
+struct snd_sb_csp_info {
+       char codec_name[16];            /* id name of codec */
+       unsigned short func_nr;         /* function number */
+       unsigned int acc_format;        /* accepted PCM formats */
+       unsigned short acc_channels;    /* accepted channels */
+       unsigned short acc_width;       /* accepted sample width */
+       unsigned short acc_rates;       /* accepted sample rates */
+       unsigned short csp_mode;        /* CSP mode, see above */
+       unsigned short run_channels;    /* current channels  */
+       unsigned short run_width;       /* current sample width */
+       unsigned short version;         /* version id: 0x10 - 0x1f */
+       unsigned short state;           /* state bits */
+};
+
+/* HWDEP controls */
+/* get CSP information */
+#define SNDRV_SB_CSP_IOCTL_INFO                _IOR('H', 0x10, struct snd_sb_csp_info)
+/* load microcode to CSP */
+/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
+ * defined for some architectures like MIPS, and it leads to build errors.
+ * (x86 and co have 14-bit size, thus it's valid, though.)
+ * As a workaround for skipping the size-limit check, here we don't use the
+ * normal _IOW() macro but _IOC() with the manual argument.
+ */
+#define SNDRV_SB_CSP_IOCTL_LOAD_CODE   \
+       _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
+/* unload microcode from CSP */
+#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
+/* start CSP */
+#define SNDRV_SB_CSP_IOCTL_START               _IOW('H', 0x13, struct snd_sb_csp_start)
+/* stop CSP */
+#define SNDRV_SB_CSP_IOCTL_STOP                _IO('H', 0x14)
+/* pause CSP and DMA transfer */
+#define SNDRV_SB_CSP_IOCTL_PAUSE               _IO('H', 0x15)
+/* restart CSP and DMA transfer */
+#define SNDRV_SB_CSP_IOCTL_RESTART     _IO('H', 0x16)
+
+
+#endif /* __SOUND_SB16_CSP_H */
diff --git a/lib/libdss-include/include/sound/sfnt_info.h b/lib/libdss-include/include/sound/sfnt_info.h
new file mode 100644 (file)
index 0000000..1bce7fd
--- /dev/null
@@ -0,0 +1,212 @@
+#ifndef __SOUND_SFNT_INFO_H
+#define __SOUND_SFNT_INFO_H
+
+/*
+ *  Patch record compatible with AWE driver on OSS
+ *
+ *  Copyright (C) 1999-2000 Takashi Iwai
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include <sound/asound.h>
+
+/*
+ * patch information record
+ */
+
+#ifdef SNDRV_BIG_ENDIAN
+#define SNDRV_OSS_PATCHKEY(id) (0xfd00|id)
+#else
+#define SNDRV_OSS_PATCHKEY(id) ((id<<8)|0xfd)
+#endif
+
+/* patch interface header: 16 bytes */
+struct soundfont_patch_info {
+       unsigned short key;             /* use the key below */
+#define SNDRV_OSS_SOUNDFONT_PATCH              SNDRV_OSS_PATCHKEY(0x07)
+
+       short device_no;                /* synthesizer number */
+       unsigned short sf_id;           /* file id (should be zero) */
+       short optarg;                   /* optional argument */
+       int len;                        /* data length (without this header) */
+
+       short type;                     /* patch operation type */
+#define SNDRV_SFNT_LOAD_INFO           0       /* awe_voice_rec */
+#define SNDRV_SFNT_LOAD_DATA           1       /* awe_sample_info */
+#define SNDRV_SFNT_OPEN_PATCH  2       /* awe_open_parm */
+#define SNDRV_SFNT_CLOSE_PATCH 3       /* none */
+       /* 4 is obsolete */
+#define SNDRV_SFNT_REPLACE_DATA        5       /* awe_sample_info (optarg=#channels)*/
+#define SNDRV_SFNT_MAP_PRESET  6       /* awe_voice_map */
+       /* 7 is not used */
+#define SNDRV_SFNT_PROBE_DATA          8       /* optarg=sample */
+#define SNDRV_SFNT_REMOVE_INFO         9       /* optarg=(bank<<8)|instr */
+
+       short reserved;                 /* word alignment data */
+
+       /* the actual patch data begins after this */
+};
+
+
+/*
+ * open patch
+ */
+
+#define SNDRV_SFNT_PATCH_NAME_LEN      32
+
+struct soundfont_open_parm {
+       unsigned short type;            /* sample type */
+#define SNDRV_SFNT_PAT_TYPE_MISC       0
+#define SNDRV_SFNT_PAT_TYPE_GUS        6
+#define SNDRV_SFNT_PAT_TYPE_MAP        7
+#define SNDRV_SFNT_PAT_LOCKED  0x100   /* lock the samples */
+#define SNDRV_SFNT_PAT_SHARED  0x200   /* sample is shared */
+
+       short reserved;
+       char name[SNDRV_SFNT_PATCH_NAME_LEN];
+};
+
+
+/*
+ * raw voice information record
+ */
+
+/* wave table envelope & effect parameters to control EMU8000 */
+struct soundfont_voice_parm {
+       unsigned short moddelay;        /* modulation delay (0x8000) */
+       unsigned short modatkhld;       /* modulation attack & hold time (0x7f7f) */
+       unsigned short moddcysus;       /* modulation decay & sustain (0x7f7f) */
+       unsigned short modrelease;      /* modulation release time (0x807f) */
+       short modkeyhold, modkeydecay;  /* envelope change per key (not used) */
+       unsigned short voldelay;        /* volume delay (0x8000) */
+       unsigned short volatkhld;       /* volume attack & hold time (0x7f7f) */
+       unsigned short voldcysus;       /* volume decay & sustain (0x7f7f) */
+       unsigned short volrelease;      /* volume release time (0x807f) */
+       short volkeyhold, volkeydecay;  /* envelope change per key (not used) */
+       unsigned short lfo1delay;       /* LFO1 delay (0x8000) */
+       unsigned short lfo2delay;       /* LFO2 delay (0x8000) */
+       unsigned short pefe;            /* modulation pitch & cutoff (0x0000) */
+       unsigned short fmmod;           /* LFO1 pitch & cutoff (0x0000) */
+       unsigned short tremfrq;         /* LFO1 volume & freq (0x0000) */
+       unsigned short fm2frq2;         /* LFO2 pitch & freq (0x0000) */
+       unsigned char cutoff;           /* initial cutoff (0xff) */
+       unsigned char filterQ;          /* initial filter Q [0-15] (0x0) */
+       unsigned char chorus;           /* chorus send (0x00) */
+       unsigned char reverb;           /* reverb send (0x00) */
+       unsigned short reserved[4];     /* not used */
+};
+
+
+/* wave table parameters: 92 bytes */
+struct soundfont_voice_info {
+       unsigned short sf_id;           /* file id (should be zero) */
+       unsigned short sample;          /* sample id */
+       int start, end;                 /* sample offset correction */
+       int loopstart, loopend;         /* loop offset correction */
+       short rate_offset;              /* sample rate pitch offset */
+       unsigned short mode;            /* sample mode */
+#define SNDRV_SFNT_MODE_ROMSOUND               0x8000
+#define SNDRV_SFNT_MODE_STEREO         1
+#define SNDRV_SFNT_MODE_LOOPING                2
+#define SNDRV_SFNT_MODE_NORELEASE              4       /* obsolete */
+#define SNDRV_SFNT_MODE_INIT_PARM              8
+
+       short root;                     /* midi root key */
+       short tune;                     /* pitch tuning (in cents) */
+       unsigned char low, high;        /* key note range */
+       unsigned char vellow, velhigh;  /* velocity range */
+       signed char fixkey, fixvel;     /* fixed key, velocity */
+       signed char pan, fixpan;        /* panning, fixed panning */
+       short exclusiveClass;           /* exclusive class (0 = none) */
+       unsigned char amplitude;        /* sample volume (127 max) */
+       unsigned char attenuation;      /* attenuation (0.375dB) */
+       short scaleTuning;              /* pitch scale tuning(%), normally 100 */
+       struct soundfont_voice_parm parm;       /* voice envelope parameters */
+       unsigned short sample_mode;     /* sample mode_flag (set by driver) */
+};
+
+
+/* instrument info header: 4 bytes */
+struct soundfont_voice_rec_hdr {
+       unsigned char bank;             /* midi bank number */
+       unsigned char instr;            /* midi preset number */
+       char nvoices;                   /* number of voices */
+       char write_mode;                /* write mode; normally 0 */
+#define SNDRV_SFNT_WR_APPEND           0       /* append anyway */
+#define SNDRV_SFNT_WR_EXCLUSIVE                1       /* skip if already exists */
+#define SNDRV_SFNT_WR_REPLACE          2       /* replace if already exists */
+};
+
+
+/*
+ * sample wave information
+ */
+
+/* wave table sample header: 32 bytes */
+struct soundfont_sample_info {
+       unsigned short sf_id;           /* file id (should be zero) */
+       unsigned short sample;          /* sample id */
+       int start, end;                 /* start & end offset */
+       int loopstart, loopend;         /* loop start & end offset */
+       int size;                       /* size (0 = ROM) */
+       short dummy;                    /* not used */
+       unsigned short mode_flags;      /* mode flags */
+#define SNDRV_SFNT_SAMPLE_8BITS                1       /* wave data is 8bits */
+#define SNDRV_SFNT_SAMPLE_UNSIGNED     2       /* wave data is unsigned */
+#define SNDRV_SFNT_SAMPLE_NO_BLANK     4       /* no blank loop is attached */
+#define SNDRV_SFNT_SAMPLE_SINGLESHOT   8       /* single-shot w/o loop */
+#define SNDRV_SFNT_SAMPLE_BIDIR_LOOP   16      /* bidirectional looping */
+#define SNDRV_SFNT_SAMPLE_STEREO_LEFT  32      /* stereo left sound */
+#define SNDRV_SFNT_SAMPLE_STEREO_RIGHT 64      /* stereo right sound */
+#define SNDRV_SFNT_SAMPLE_REVERSE_LOOP 128     /* reverse looping */
+       unsigned int truesize;          /* used memory size (set by driver) */
+};
+
+
+/*
+ * voice preset mapping (aliasing)
+ */
+
+struct soundfont_voice_map {
+       int map_bank, map_instr, map_key;       /* key = -1 means all keys */
+       int src_bank, src_instr, src_key;
+};
+
+
+/*
+ * ioctls for hwdep
+ */
+
+#define SNDRV_EMUX_HWDEP_NAME  "Emux WaveTable"
+
+#define SNDRV_EMUX_VERSION     ((1 << 16) | (0 << 8) | 0)      /* 1.0.0 */
+
+struct snd_emux_misc_mode {
+       int port;       /* -1 = all */
+       int mode;
+       int value;
+       int value2;     /* reserved */
+};
+
+#define SNDRV_EMUX_IOCTL_VERSION       _IOR('H', 0x80, unsigned int)
+#define SNDRV_EMUX_IOCTL_LOAD_PATCH    _IOWR('H', 0x81, struct soundfont_patch_info)
+#define SNDRV_EMUX_IOCTL_RESET_SAMPLES _IO('H', 0x82)
+#define SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES _IO('H', 0x83)
+#define SNDRV_EMUX_IOCTL_MEM_AVAIL     _IOW('H', 0x84, int)
+#define SNDRV_EMUX_IOCTL_MISC_MODE     _IOWR('H', 0x84, struct snd_emux_misc_mode)
+
+#endif /* __SOUND_SFNT_INFO_H */
diff --git a/lib/libdss-include/include/spawn.h b/lib/libdss-include/include/spawn.h
new file mode 100644 (file)
index 0000000..f46e8c2
--- /dev/null
@@ -0,0 +1,190 @@
+/* Definitions for POSIX spawn interface.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SPAWN_H
+#define        _SPAWN_H        1
+
+#include <features.h>
+#include <sched.h>
+#define __need_sigset_t
+#include <signal.h>
+#include <sys/types.h>
+
+
+/* Data structure to contain attributes for thread creation.  */
+typedef struct
+{
+  short int __flags;
+  pid_t __pgrp;
+  sigset_t __sd;
+  sigset_t __ss;
+  struct sched_param __sp;
+  int __policy;
+  int __pad[16];
+} posix_spawnattr_t;
+
+
+/* Data structure to contain information about the actions to be
+   performed in the new process with respect to file descriptors.  */
+typedef struct
+{
+  int __allocated;
+  int __used;
+  struct __spawn_action *__actions;
+  int __pad[16];
+} posix_spawn_file_actions_t;
+
+
+/* Flags to be set in the `posix_spawnattr_t'.  */
+#define POSIX_SPAWN_RESETIDS           0x01
+#define POSIX_SPAWN_SETPGROUP          0x02
+#define POSIX_SPAWN_SETSIGDEF          0x04
+#define POSIX_SPAWN_SETSIGMASK         0x08
+#define POSIX_SPAWN_SETSCHEDPARAM      0x10
+#define POSIX_SPAWN_SETSCHEDULER       0x20
+#ifdef __USE_GNU
+# define POSIX_SPAWN_USEVFORK          0x40
+#endif
+
+
+__BEGIN_DECLS
+
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW. */
+extern int posix_spawn (pid_t *__restrict __pid,
+                       const char *__restrict __path,
+                       const posix_spawn_file_actions_t *__restrict
+                       __file_actions,
+                       const posix_spawnattr_t *__restrict __attrp,
+                       char *const __argv[__restrict_arr],
+                       char *const __envp[__restrict_arr]);
+
+/* Similar to `posix_spawn' but search for FILE in the PATH.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int posix_spawnp (pid_t *__pid, const char *__file,
+                        const posix_spawn_file_actions_t *__file_actions,
+                        const posix_spawnattr_t *__attrp,
+                        char *const __argv[], char *const __envp[]);
+
+
+/* Initialize data structure with attributes for `spawn' to default values.  */
+extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW;
+
+/* Free resources associated with ATTR.  */
+extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW;
+
+/* Store signal mask for signals with default handling from ATTR in
+   SIGDEFAULT.  */
+extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *
+                                         __restrict __attr,
+                                         sigset_t *__restrict __sigdefault)
+     __THROW;
+
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
+extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
+                                         const sigset_t *__restrict
+                                         __sigdefault)
+     __THROW;
+
+/* Store signal mask for the new process from ATTR in SIGMASK.  */
+extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
+                                      __attr,
+                                      sigset_t *__restrict __sigmask) __THROW;
+
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+extern int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr,
+                                      const sigset_t *__restrict __sigmask)
+     __THROW;
+
+/* Get flag word from the attribute structure.  */
+extern int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
+                                    __attr,
+                                    short int *__restrict __flags) __THROW;
+
+/* Store flags in the attribute structure.  */
+extern int posix_spawnattr_setflags (posix_spawnattr_t *_attr,
+                                    short int __flags) __THROW;
+
+/* Get process group ID from the attribute structure.  */
+extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
+                                     __attr, pid_t *__restrict __pgroup)
+     __THROW;
+
+/* Store process group ID in the attribute structure.  */
+extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
+                                     pid_t __pgroup) __THROW;
+
+/* Get scheduling policy from the attribute structure.  */
+extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
+                                          __restrict __attr,
+                                          int *__restrict __schedpolicy)
+     __THROW;
+
+/* Store scheduling policy in the attribute structure.  */
+extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
+                                          int __schedpolicy) __THROW;
+
+/* Get scheduling parameters from the attribute structure.  */
+extern int posix_spawnattr_getschedparam (const posix_spawnattr_t *
+                                         __restrict __attr,
+                                         struct sched_param *__restrict
+                                         __schedparam) __THROW;
+
+/* Store scheduling parameters in the attribute structure.  */
+extern int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
+                                         const struct sched_param *
+                                         __restrict __schedparam) __THROW;
+
+
+/* Initialize data structure for file attribute for `spawn' call.  */
+extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
+                                         __file_actions) __THROW;
+
+/* Free resources associated with FILE-ACTIONS.  */
+extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
+                                            __file_actions) __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `open' for the given file during the `spawn' call.  */
+extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *
+                                            __restrict __file_actions,
+                                            int __fd,
+                                            const char *__restrict __path,
+                                            int __oflag, mode_t __mode)
+     __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `close' for the given file descriptor during the `spawn' call.  */
+extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *
+                                             __file_actions, int __fd)
+     __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `dup2' for the given file descriptors during the `spawn' call.  */
+extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
+                                            __file_actions,
+                                            int __fd, int __newfd) __THROW;
+
+__END_DECLS
+
+#endif /* spawn.h */
diff --git a/lib/libdss-include/include/stab.h b/lib/libdss-include/include/stab.h
new file mode 100644 (file)
index 0000000..9dc3c32
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef __GNU_STAB__
+
+/* Indicate the GNU stab.h is in use.  */
+
+#define __GNU_STAB__
+
+#define __define_stab(NAME, CODE, STRING) NAME=CODE,
+
+enum __stab_debug_code
+{
+#include <bits/stab.def>
+LAST_UNUSED_STAB_CODE
+};
+
+#undef __define_stab
+
+#endif /* __GNU_STAB_ */
diff --git a/lib/libdss-include/include/stdc-predef.h b/lib/libdss-include/include/stdc-predef.h
new file mode 100644 (file)
index 0000000..f9f7f73
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _STDC_PREDEF_H
+#define        _STDC_PREDEF_H  1
+
+/* This header is separate from features.h so that the compiler can
+   include it implicitly at the start of every compilation.  It must
+   not itself include <features.h> or any other header that includes
+   <features.h> because the implicit include comes before any feature
+   test macros that may be defined in a source file before it first
+   explicitly includes a system header.  GCC knows the name of this
+   header in order to preinclude it.  */
+
+/* glibc's intent is to support the IEC 559 math functionality, real
+   and complex.  If the GCC (4.9 and later) predefined macros
+   specifying compiler intent are available, use them to determine
+   whether the overall intent is to support these features; otherwise,
+   presume an older compiler has intent to support these features and
+   define these macros by default.  */
+
+#ifdef __GCC_IEC_559
+# if __GCC_IEC_559 > 0
+#  define __STDC_IEC_559__             1
+# endif
+#else
+# define __STDC_IEC_559__              1
+#endif
+
+#ifdef __GCC_IEC_559_COMPLEX
+# if __GCC_IEC_559_COMPLEX > 0
+#  define __STDC_IEC_559_COMPLEX__     1
+# endif
+#else
+# define __STDC_IEC_559_COMPLEX__      1
+#endif
+
+/* wchar_t uses Unicode 8.0.0.  Version 8.0 of the Unicode Standard is
+   synchronized with ISO/IEC 10646:2014, plus Amendment 1 (published
+   2015-05-15).  */
+#define __STDC_ISO_10646__             201505L
+
+/* We do not support C11 <threads.h>.  */
+#define __STDC_NO_THREADS__            1
+
+#endif
diff --git a/lib/libdss-include/include/stdint.h b/lib/libdss-include/include/stdint.h
new file mode 100644 (file)
index 0000000..4427627
--- /dev/null
@@ -0,0 +1,310 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99: 7.18 Integer types <stdint.h>
+ */
+
+#ifndef _STDINT_H
+#define _STDINT_H      1
+
+#include <features.h>
+#include <bits/wchar.h>
+#include <bits/wordsize.h>
+
+/* Exact integral types.  */
+
+/* Signed.  */
+
+/* There is some amount of overlap with <sys/types.h> as known by inet code */
+#ifndef __int8_t_defined
+# define __int8_t_defined
+typedef signed char            int8_t;
+typedef short int              int16_t;
+typedef int                    int32_t;
+# if __WORDSIZE == 64
+typedef long int               int64_t;
+# else
+__extension__
+typedef long long int          int64_t;
+# endif
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint8_t;
+typedef unsigned short int     uint16_t;
+#ifndef __uint32_t_defined
+typedef unsigned int           uint32_t;
+# define __uint32_t_defined
+#endif
+#if __WORDSIZE == 64
+typedef unsigned long int      uint64_t;
+#else
+__extension__
+typedef unsigned long long int uint64_t;
+#endif
+
+
+/* Small types.  */
+
+/* Signed.  */
+typedef signed char            int_least8_t;
+typedef short int              int_least16_t;
+typedef int                    int_least32_t;
+#if __WORDSIZE == 64
+typedef long int               int_least64_t;
+#else
+__extension__
+typedef long long int          int_least64_t;
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint_least8_t;
+typedef unsigned short int     uint_least16_t;
+typedef unsigned int           uint_least32_t;
+#if __WORDSIZE == 64
+typedef unsigned long int      uint_least64_t;
+#else
+__extension__
+typedef unsigned long long int uint_least64_t;
+#endif
+
+
+/* Fast types.  */
+
+/* Signed.  */
+typedef signed char            int_fast8_t;
+#if __WORDSIZE == 64
+typedef long int               int_fast16_t;
+typedef long int               int_fast32_t;
+typedef long int               int_fast64_t;
+#else
+typedef int                    int_fast16_t;
+typedef int                    int_fast32_t;
+__extension__
+typedef long long int          int_fast64_t;
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint_fast8_t;
+#if __WORDSIZE == 64
+typedef unsigned long int      uint_fast16_t;
+typedef unsigned long int      uint_fast32_t;
+typedef unsigned long int      uint_fast64_t;
+#else
+typedef unsigned int           uint_fast16_t;
+typedef unsigned int           uint_fast32_t;
+__extension__
+typedef unsigned long long int uint_fast64_t;
+#endif
+
+
+/* Types for `void *' pointers.  */
+#if __WORDSIZE == 64
+# ifndef __intptr_t_defined
+typedef long int               intptr_t;
+#  define __intptr_t_defined
+# endif
+typedef unsigned long int      uintptr_t;
+#else
+# ifndef __intptr_t_defined
+typedef int                    intptr_t;
+#  define __intptr_t_defined
+# endif
+typedef unsigned int           uintptr_t;
+#endif
+
+
+/* Largest integral types.  */
+#if __WORDSIZE == 64
+typedef long int               intmax_t;
+typedef unsigned long int      uintmax_t;
+#else
+__extension__
+typedef long long int          intmax_t;
+__extension__
+typedef unsigned long long int uintmax_t;
+#endif
+
+
+# if __WORDSIZE == 64
+#  define __INT64_C(c) c ## L
+#  define __UINT64_C(c)        c ## UL
+# else
+#  define __INT64_C(c) c ## LL
+#  define __UINT64_C(c)        c ## ULL
+# endif
+
+/* Limits of integral types.  */
+
+/* Minimum of signed integral types.  */
+# define INT8_MIN              (-128)
+# define INT16_MIN             (-32767-1)
+# define INT32_MIN             (-2147483647-1)
+# define INT64_MIN             (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types.  */
+# define INT8_MAX              (127)
+# define INT16_MAX             (32767)
+# define INT32_MAX             (2147483647)
+# define INT64_MAX             (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types.  */
+# define UINT8_MAX             (255)
+# define UINT16_MAX            (65535)
+# define UINT32_MAX            (4294967295U)
+# define UINT64_MAX            (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MIN                (-128)
+# define INT_LEAST16_MIN       (-32767-1)
+# define INT_LEAST32_MIN       (-2147483647-1)
+# define INT_LEAST64_MIN       (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MAX                (127)
+# define INT_LEAST16_MAX       (32767)
+# define INT_LEAST32_MAX       (2147483647)
+# define INT_LEAST64_MAX       (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types having a minimum size.  */
+# define UINT_LEAST8_MAX       (255)
+# define UINT_LEAST16_MAX      (65535)
+# define UINT_LEAST32_MAX      (4294967295U)
+# define UINT_LEAST64_MAX      (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of fast signed integral types having a minimum size.  */
+# define INT_FAST8_MIN         (-128)
+# if __WORDSIZE == 64
+#  define INT_FAST16_MIN       (-9223372036854775807L-1)
+#  define INT_FAST32_MIN       (-9223372036854775807L-1)
+# else
+#  define INT_FAST16_MIN       (-2147483647-1)
+#  define INT_FAST32_MIN       (-2147483647-1)
+# endif
+# define INT_FAST64_MIN                (-__INT64_C(9223372036854775807)-1)
+/* Maximum of fast signed integral types having a minimum size.  */
+# define INT_FAST8_MAX         (127)
+# if __WORDSIZE == 64
+#  define INT_FAST16_MAX       (9223372036854775807L)
+#  define INT_FAST32_MAX       (9223372036854775807L)
+# else
+#  define INT_FAST16_MAX       (2147483647)
+#  define INT_FAST32_MAX       (2147483647)
+# endif
+# define INT_FAST64_MAX                (__INT64_C(9223372036854775807))
+
+/* Maximum of fast unsigned integral types having a minimum size.  */
+# define UINT_FAST8_MAX                (255)
+# if __WORDSIZE == 64
+#  define UINT_FAST16_MAX      (18446744073709551615UL)
+#  define UINT_FAST32_MAX      (18446744073709551615UL)
+# else
+#  define UINT_FAST16_MAX      (4294967295U)
+#  define UINT_FAST32_MAX      (4294967295U)
+# endif
+# define UINT_FAST64_MAX       (__UINT64_C(18446744073709551615))
+
+
+/* Values to test for integral types holding `void *' pointer.  */
+# if __WORDSIZE == 64
+#  define INTPTR_MIN           (-9223372036854775807L-1)
+#  define INTPTR_MAX           (9223372036854775807L)
+#  define UINTPTR_MAX          (18446744073709551615UL)
+# else
+#  define INTPTR_MIN           (-2147483647-1)
+#  define INTPTR_MAX           (2147483647)
+#  define UINTPTR_MAX          (4294967295U)
+# endif
+
+
+/* Minimum for largest signed integral type.  */
+# define INTMAX_MIN            (-__INT64_C(9223372036854775807)-1)
+/* Maximum for largest signed integral type.  */
+# define INTMAX_MAX            (__INT64_C(9223372036854775807))
+
+/* Maximum for largest unsigned integral type.  */
+# define UINTMAX_MAX           (__UINT64_C(18446744073709551615))
+
+
+/* Limits of other integer types.  */
+
+/* Limits of `ptrdiff_t' type.  */
+# if __WORDSIZE == 64
+#  define PTRDIFF_MIN          (-9223372036854775807L-1)
+#  define PTRDIFF_MAX          (9223372036854775807L)
+# else
+#  define PTRDIFF_MIN          (-2147483647-1)
+#  define PTRDIFF_MAX          (2147483647)
+# endif
+
+/* Limits of `sig_atomic_t'.  */
+# define SIG_ATOMIC_MIN                (-2147483647-1)
+# define SIG_ATOMIC_MAX                (2147483647)
+
+/* Limit of `size_t' type.  */
+# if __WORDSIZE == 64
+#  define SIZE_MAX             (18446744073709551615UL)
+# else
+#  ifdef __WORDSIZE32_SIZE_ULONG
+#   define SIZE_MAX            (4294967295UL)
+#  else
+#   define SIZE_MAX            (4294967295U)
+#  endif
+# endif
+
+/* Limits of `wchar_t'.  */
+# ifndef WCHAR_MIN
+/* These constants might also be defined in <wchar.h>.  */
+#  define WCHAR_MIN            __WCHAR_MIN
+#  define WCHAR_MAX            __WCHAR_MAX
+# endif
+
+/* Limits of `wint_t'.  */
+# define WINT_MIN              (0u)
+# define WINT_MAX              (4294967295u)
+
+/* Signed.  */
+# define INT8_C(c)     c
+# define INT16_C(c)    c
+# define INT32_C(c)    c
+# if __WORDSIZE == 64
+#  define INT64_C(c)   c ## L
+# else
+#  define INT64_C(c)   c ## LL
+# endif
+
+/* Unsigned.  */
+# define UINT8_C(c)    c
+# define UINT16_C(c)   c
+# define UINT32_C(c)   c ## U
+# if __WORDSIZE == 64
+#  define UINT64_C(c)  c ## UL
+# else
+#  define UINT64_C(c)  c ## ULL
+# endif
+
+/* Maximal type.  */
+# if __WORDSIZE == 64
+#  define INTMAX_C(c)  c ## L
+#  define UINTMAX_C(c) c ## UL
+# else
+#  define INTMAX_C(c)  c ## LL
+#  define UINTMAX_C(c) c ## ULL
+# endif
+
+#endif /* stdint.h */
diff --git a/lib/libdss-include/include/stdio.h b/lib/libdss-include/include/stdio.h
new file mode 100644 (file)
index 0000000..d8d7fa0
--- /dev/null
@@ -0,0 +1,946 @@
+/* Define ISO C stdio on top of C++ iostreams.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.19 Input/output     <stdio.h>
+ */
+
+#ifndef _STDIO_H
+
+#if !defined __need_FILE && !defined __need___FILE
+# define _STDIO_H      1
+# include <features.h>
+
+__BEGIN_DECLS
+
+# define __need_size_t
+# define __need_NULL
+# include <stddef.h>
+
+# include <bits/types.h>
+# define __need_FILE
+# define __need___FILE
+#endif /* Don't need FILE.  */
+
+
+#if !defined __FILE_defined && defined __need_FILE
+
+/* Define outside of namespace so the C++ is happy.  */
+struct _IO_FILE;
+
+__BEGIN_NAMESPACE_STD
+/* The opaque type of streams.  This is the definition used elsewhere.  */
+typedef struct _IO_FILE FILE;
+__END_NAMESPACE_STD
+#if defined __USE_LARGEFILE64 || defined __USE_POSIX \
+    || defined __USE_ISOC99 || defined __USE_XOPEN \
+    || defined __USE_POSIX2
+__USING_NAMESPACE_STD(FILE)
+#endif
+
+# define __FILE_defined        1
+#endif /* FILE not defined.  */
+#undef __need_FILE
+
+
+#if !defined ____FILE_defined && defined __need___FILE
+
+/* The opaque type of streams.  This is the definition used elsewhere.  */
+typedef struct _IO_FILE __FILE;
+
+# define ____FILE_defined      1
+#endif /* __FILE not defined.  */
+#undef __need___FILE
+
+
+#ifdef _STDIO_H
+#define _STDIO_USES_IOSTREAM
+
+#include <libio.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifdef __GNUC__
+#  ifndef _VA_LIST_DEFINED
+typedef _G_va_list va_list;
+#   define _VA_LIST_DEFINED
+#  endif
+# else
+#  include <stdarg.h>
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+# ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+# endif
+
+# ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+# endif
+#endif
+
+/* The type of the second argument to `fgetpos' and `fsetpos'.  */
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+typedef _G_fpos_t fpos_t;
+#else
+typedef _G_fpos64_t fpos_t;
+#endif
+__END_NAMESPACE_STD
+#ifdef __USE_LARGEFILE64
+typedef _G_fpos64_t fpos64_t;
+#endif
+
+/* The possibilities for the third argument to `setvbuf'.  */
+#define _IOFBF 0               /* Fully buffered.  */
+#define _IOLBF 1               /* Line buffered.  */
+#define _IONBF 2               /* No buffering.  */
+
+
+/* Default buffer size.  */
+#ifndef BUFSIZ
+# define BUFSIZ _IO_BUFSIZ
+#endif
+
+
+/* End of file character.
+   Some things throughout the library rely on this being -1.  */
+#ifndef EOF
+# define EOF (-1)
+#endif
+
+
+/* The possibilities for the third argument to `fseek'.
+   These values should not be changed.  */
+#define SEEK_SET       0       /* Seek from beginning of file.  */
+#define SEEK_CUR       1       /* Seek from current position.  */
+#define SEEK_END       2       /* Seek from end of file.  */
+#ifdef __USE_GNU
+# define SEEK_DATA     3       /* Seek to next data.  */
+# define SEEK_HOLE     4       /* Seek to next hole.  */
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Default path prefix for `tempnam' and `tmpnam'.  */
+# define P_tmpdir      "/tmp"
+#endif
+
+
+/* Get the values:
+   L_tmpnam    How long an array of chars must be to be passed to `tmpnam'.
+   TMP_MAX     The minimum number of unique filenames generated by tmpnam
+               (and tempnam when it uses tmpnam's name space),
+               or tempnam (the two are separate).
+   L_ctermid   How long an array to pass to `ctermid'.
+   L_cuserid   How long an array to pass to `cuserid'.
+   FOPEN_MAX   Minimum number of files that can be open at once.
+   FILENAME_MAX        Maximum length of a filename.  */
+#include <bits/stdio_lim.h>
+
+
+/* Standard streams.  */
+extern struct _IO_FILE *stdin;         /* Standard input stream.  */
+extern struct _IO_FILE *stdout;                /* Standard output stream.  */
+extern struct _IO_FILE *stderr;                /* Standard error output stream.  */
+/* C89/C99 say they're macros.  Make them happy.  */
+#define stdin stdin
+#define stdout stdout
+#define stderr stderr
+
+__BEGIN_NAMESPACE_STD
+/* Remove file FILENAME.  */
+extern int remove (const char *__filename) __THROW;
+/* Rename file OLD to NEW.  */
+extern int rename (const char *__old, const char *__new) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ATFILE
+/* Rename file OLD relative to OLDFD to NEW relative to NEWFD.  */
+extern int renameat (int __oldfd, const char *__old, int __newfd,
+                    const char *__new) __THROW;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Create a temporary file and open it read/write.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern FILE *tmpfile (void) __wur;
+#else
+# ifdef __REDIRECT
+extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur;
+# else
+#  define tmpfile tmpfile64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern FILE *tmpfile64 (void) __wur;
+#endif
+
+/* Generate a temporary filename.  */
+extern char *tmpnam (char *__s) __THROW __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* This is the reentrant variant of `tmpnam'.  The only difference is
+   that it does not allow S to be NULL.  */
+extern char *tmpnam_r (char *__s) __THROW __wur;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Generate a unique temporary filename using up to five characters of PFX
+   if it is not NULL.  The directory to put this file in is searched for
+   as follows: First the environment variable "TMPDIR" is checked.
+   If it contains the name of a writable directory, that directory is used.
+   If not and if DIR is not NULL, that value is checked.  If that fails,
+   P_tmpdir is tried and finally "/tmp".  The storage for the filename
+   is allocated by `malloc'.  */
+extern char *tempnam (const char *__dir, const char *__pfx)
+     __THROW __attribute_malloc__ __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Close STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fclose (FILE *__stream);
+/* Flush STREAM, or all streams if STREAM is NULL.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fflush (FILE *__stream);
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not required.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fflush_unlocked (FILE *__stream);
+#endif
+
+#ifdef __USE_GNU
+/* Close all streams.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fcloseall (void);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+/* Open a file and create a new stream for it.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *fopen (const char *__restrict __filename,
+                   const char *__restrict __modes) __wur;
+/* Open a file, replacing an existing stream with it.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *freopen (const char *__restrict __filename,
+                     const char *__restrict __modes,
+                     FILE *__restrict __stream) __wur;
+#else
+# ifdef __REDIRECT
+extern FILE *__REDIRECT (fopen, (const char *__restrict __filename,
+                                const char *__restrict __modes), fopen64)
+  __wur;
+extern FILE *__REDIRECT (freopen, (const char *__restrict __filename,
+                                  const char *__restrict __modes,
+                                  FILE *__restrict __stream), freopen64)
+  __wur;
+# else
+#  define fopen fopen64
+#  define freopen freopen64
+# endif
+#endif
+__END_NAMESPACE_STD
+#ifdef __USE_LARGEFILE64
+extern FILE *fopen64 (const char *__restrict __filename,
+                     const char *__restrict __modes) __wur;
+extern FILE *freopen64 (const char *__restrict __filename,
+                       const char *__restrict __modes,
+                       FILE *__restrict __stream) __wur;
+#endif
+
+#ifdef __USE_POSIX
+/* Create a new stream that refers to an existing system file descriptor.  */
+extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Create a new stream that refers to the given magic cookie,
+   and uses the given functions for input and output.  */
+extern FILE *fopencookie (void *__restrict __magic_cookie,
+                         const char *__restrict __modes,
+                         _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a new stream that refers to a memory buffer.  */
+extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+  __THROW __wur;
+
+/* Open a stream that writes into a malloc'd buffer that is expanded as
+   necessary.  *BUFLOC and *SIZELOC are updated with the buffer's location
+   and the number of characters written on fflush or fclose.  */
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* If BUF is NULL, make STREAM unbuffered.
+   Else make it use buffer BUF, of size BUFSIZ.  */
+extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
+/* Make STREAM use buffering mode MODE.
+   If BUF is not NULL, use N bytes of it for buffering;
+   else allocate an internal buffer N bytes long.  */
+extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+                   int __modes, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* If BUF is NULL, make STREAM unbuffered.
+   Else make it use SIZE bytes of BUF for buffering.  */
+extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+                      size_t __size) __THROW;
+
+/* Make STREAM line-buffered.  */
+extern void setlinebuf (FILE *__stream) __THROW;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Write formatted output to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fprintf (FILE *__restrict __stream,
+                   const char *__restrict __format, ...);
+/* Write formatted output to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int printf (const char *__restrict __format, ...);
+/* Write formatted output to S.  */
+extern int sprintf (char *__restrict __s,
+                   const char *__restrict __format, ...) __THROWNL;
+
+/* Write formatted output to S from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+                    _G_va_list __arg);
+/* Write formatted output to stdout from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vprintf (const char *__restrict __format, _G_va_list __arg);
+/* Write formatted output to S from argument list ARG.  */
+extern int vsprintf (char *__restrict __s, const char *__restrict __format,
+                    _G_va_list __arg) __THROWNL;
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+/* Maximum chars of output to write in MAXLEN.  */
+extern int snprintf (char *__restrict __s, size_t __maxlen,
+                    const char *__restrict __format, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+                     const char *__restrict __format, _G_va_list __arg)
+     __THROWNL __attribute__ ((__format__ (__printf__, 3, 0)));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Write formatted output to a string dynamically allocated with `malloc'.
+   Store the address of the string in *PTR.  */
+extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
+                     _G_va_list __arg)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
+extern int __asprintf (char **__restrict __ptr,
+                      const char *__restrict __fmt, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+extern int asprintf (char **__restrict __ptr,
+                    const char *__restrict __fmt, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Write formatted output to a file descriptor.  */
+extern int vdprintf (int __fd, const char *__restrict __fmt,
+                    _G_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Read formatted input from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fscanf (FILE *__restrict __stream,
+                  const char *__restrict __format, ...) __wur;
+/* Read formatted input from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int scanf (const char *__restrict __format, ...) __wur;
+/* Read formatted input from S.  */
+extern int sscanf (const char *__restrict __s,
+                  const char *__restrict __format, ...) __THROW;
+
+#if defined __USE_ISOC99 && !defined __USE_GNU \
+    && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+    && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+# ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
+                               const char *__restrict __format, ...),
+                      __isoc99_fscanf) __wur;
+extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
+                      __isoc99_scanf) __wur;
+extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
+                                   const char *__restrict __format, ...),
+                          __isoc99_sscanf);
+# else
+extern int __isoc99_fscanf (FILE *__restrict __stream,
+                           const char *__restrict __format, ...) __wur;
+extern int __isoc99_scanf (const char *__restrict __format, ...) __wur;
+extern int __isoc99_sscanf (const char *__restrict __s,
+                           const char *__restrict __format, ...) __THROW;
+#  define fscanf __isoc99_fscanf
+#  define scanf __isoc99_scanf
+#  define sscanf __isoc99_sscanf
+# endif
+#endif
+
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Read formatted input from S into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+                   _G_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+
+/* Read formatted input from stdin into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vscanf (const char *__restrict __format, _G_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+
+/* Read formatted input from S into argument list ARG.  */
+extern int vsscanf (const char *__restrict __s,
+                   const char *__restrict __format, _G_va_list __arg)
+     __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
+
+# if !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (vfscanf,
+                      (FILE *__restrict __s,
+                       const char *__restrict __format, _G_va_list __arg),
+                      __isoc99_vfscanf)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+extern int __REDIRECT (vscanf, (const char *__restrict __format,
+                               _G_va_list __arg), __isoc99_vscanf)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+extern int __REDIRECT_NTH (vsscanf,
+                          (const char *__restrict __s,
+                           const char *__restrict __format,
+                           _G_va_list __arg), __isoc99_vsscanf)
+     __attribute__ ((__format__ (__scanf__, 2, 0)));
+#  else
+extern int __isoc99_vfscanf (FILE *__restrict __s,
+                            const char *__restrict __format,
+                            _G_va_list __arg) __wur;
+extern int __isoc99_vscanf (const char *__restrict __format,
+                           _G_va_list __arg) __wur;
+extern int __isoc99_vsscanf (const char *__restrict __s,
+                            const char *__restrict __format,
+                            _G_va_list __arg) __THROW;
+#   define vfscanf __isoc99_vfscanf
+#   define vscanf __isoc99_vscanf
+#   define vsscanf __isoc99_vsscanf
+#  endif
+# endif
+
+__END_NAMESPACE_C99
+#endif /* Use ISO C9x.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Read a character from STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int fgetc (FILE *__stream);
+extern int getc (FILE *__stream);
+
+/* Read a character from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getchar (void);
+__END_NAMESPACE_STD
+
+/* The C standard explicitly says this is a macro, so we always do the
+   optimization for it.  */
+#define getc(_fp) _IO_getc (_fp)
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int getc_unlocked (FILE *__stream);
+extern int getchar_unlocked (void);
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetc_unlocked (FILE *__stream);
+#endif /* Use MISC.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Write a character to STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.
+
+   These functions is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputc (int __c, FILE *__stream);
+extern int putc (int __c, FILE *__stream);
+
+/* Write a character to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int putchar (int __c);
+__END_NAMESPACE_STD
+
+/* The C standard explicitly says this can be a macro,
+   so we always do the optimization for it.  */
+#define putc(_ch, _fp) _IO_putc (_ch, _fp)
+
+#ifdef __USE_MISC
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputc_unlocked (int __c, FILE *__stream);
+#endif /* Use MISC.  */
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int putc_unlocked (int __c, FILE *__stream);
+extern int putchar_unlocked (int __c);
+#endif /* Use POSIX.  */
+
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Get a word (int) from STREAM.  */
+extern int getw (FILE *__stream);
+
+/* Write a word (int) to STREAM.  */
+extern int putw (int __w, FILE *__stream);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Get a newline-terminated string of finite length from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+     __wur;
+
+#if !defined __USE_ISOC11 \
+    || (defined __cplusplus && __cplusplus <= 201103L)
+/* Get a newline-terminated string from stdin, removing the newline.
+   DO NOT USE THIS FUNCTION!!  There is no limit on how much it will read.
+
+   The function has been officially removed in ISO C11.  This opportunity
+   is used to also remove it from the GNU feature list.  It is now only
+   available when explicitly using an old ISO C, Unix, or POSIX standard.
+   GCC defines _GNU_SOURCE when building C++ code and the function is still
+   in C++11, so it is also available for C++.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *gets (char *__s) __wur __attribute_deprecated__;
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function does the same as `fgets' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern char *fgets_unlocked (char *__restrict __s, int __n,
+                            FILE *__restrict __stream) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN2K8
+/* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
+   (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
+   NULL), pointing to *N characters of space.  It is realloc'd as
+   necessary.  Returns the number of characters read (not including the
+   null terminator), or -1 on error or EOF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
+                              size_t *__restrict __n, int __delimiter,
+                              FILE *__restrict __stream) __wur;
+extern _IO_ssize_t getdelim (char **__restrict __lineptr,
+                            size_t *__restrict __n, int __delimiter,
+                            FILE *__restrict __stream) __wur;
+
+/* Like `getdelim', but reads up to a newline.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern _IO_ssize_t getline (char **__restrict __lineptr,
+                           size_t *__restrict __n,
+                           FILE *__restrict __stream) __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Write a string to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+
+/* Write a string, followed by a newline, to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int puts (const char *__s);
+
+
+/* Push a character back onto the input buffer of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int ungetc (int __c, FILE *__stream);
+
+
+/* Read chunks of generic data from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern size_t fread (void *__restrict __ptr, size_t __size,
+                    size_t __n, FILE *__restrict __stream) __wur;
+/* Write chunks of generic data to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+                     size_t __n, FILE *__restrict __s);
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function does the same as `fputs' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputs_unlocked (const char *__restrict __s,
+                          FILE *__restrict __stream);
+#endif
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not necessary.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+                             size_t __n, FILE *__restrict __stream) __wur;
+extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+                              size_t __n, FILE *__restrict __stream);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Seek to a certain position on STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fseek (FILE *__stream, long int __off, int __whence);
+/* Return the current position of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern long int ftell (FILE *__stream) __wur;
+/* Rewind to the beginning of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void rewind (FILE *__stream);
+__END_NAMESPACE_STD
+
+/* The Single Unix Specification, Version 2, specifies an alternative,
+   more adequate interface for the two functions above which deal with
+   file offset.  `long int' is not the right type.  These definitions
+   are originally defined in the Large File Support API.  */
+
+#if defined __USE_LARGEFILE || defined __USE_XOPEN2K
+# ifndef __USE_FILE_OFFSET64
+/* Seek to a certain position on STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+/* Return the current position of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern __off_t ftello (FILE *__stream) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (fseeko,
+                      (FILE *__stream, __off64_t __off, int __whence),
+                      fseeko64);
+extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64);
+#  else
+#   define fseeko fseeko64
+#   define ftello ftello64
+#  endif
+# endif
+#endif
+
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+/* Get STREAM's position.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+/* Set STREAM's position.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
+                                fpos_t *__restrict __pos), fgetpos64);
+extern int __REDIRECT (fsetpos,
+                      (FILE *__stream, const fpos_t *__pos), fsetpos64);
+# else
+#  define fgetpos fgetpos64
+#  define fsetpos fsetpos64
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_LARGEFILE64
+extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+extern __off64_t ftello64 (FILE *__stream) __wur;
+extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Clear the error and EOF indicators for STREAM.  */
+extern void clearerr (FILE *__stream) __THROW;
+/* Return the EOF indicator for STREAM.  */
+extern int feof (FILE *__stream) __THROW __wur;
+/* Return the error indicator for STREAM.  */
+extern int ferror (FILE *__stream) __THROW __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not required.  */
+extern void clearerr_unlocked (FILE *__stream) __THROW;
+extern int feof_unlocked (FILE *__stream) __THROW __wur;
+extern int ferror_unlocked (FILE *__stream) __THROW __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Print a message describing the meaning of the value of errno.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void perror (const char *__s);
+__END_NAMESPACE_STD
+
+/* Provide the declarations for `sys_errlist' and `sys_nerr' if they
+   are available on this system.  Even if available, these variables
+   should not be used directly.  The `strerror' function provides
+   all the necessary functionality.  */
+#include <bits/sys_errlist.h>
+
+
+#ifdef __USE_POSIX
+/* Return the system file descriptor for STREAM.  */
+extern int fileno (FILE *__stream) __THROW __wur;
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+/* Faster version when locking is not required.  */
+extern int fileno_unlocked (FILE *__stream) __THROW __wur;
+#endif
+
+
+#ifdef __USE_POSIX2
+/* Create a new stream connected to a pipe running the given command.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *popen (const char *__command, const char *__modes) __wur;
+
+/* Close a stream opened by popen and return the status of its child.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int pclose (FILE *__stream);
+#endif
+
+
+#ifdef __USE_POSIX
+/* Return the name of the controlling terminal.  */
+extern char *ctermid (char *__s) __THROW;
+#endif /* Use POSIX.  */
+
+
+#ifdef __USE_XOPEN
+/* Return the name of the current user.  */
+extern char *cuserid (char *__s);
+#endif /* Use X/Open, but not issue 6.  */
+
+
+#ifdef __USE_GNU
+struct obstack;                        /* See <obstack.h>.  */
+
+/* Write formatted output to an obstack.  */
+extern int obstack_printf (struct obstack *__restrict __obstack,
+                          const char *__restrict __format, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int obstack_vprintf (struct obstack *__restrict __obstack,
+                           const char *__restrict __format,
+                           _G_va_list __args)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 0)));
+#endif /* Use GNU.  */
+
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.  */
+
+/* Acquire ownership of STREAM.  */
+extern void flockfile (FILE *__stream) __THROW;
+
+/* Try to acquire ownership of STREAM but do not block if it is not
+   possible.  */
+extern int ftrylockfile (FILE *__stream) __THROW __wur;
+
+/* Relinquish the ownership granted for STREAM.  */
+extern void funlockfile (FILE *__stream) __THROW;
+#endif /* POSIX */
+
+#if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU
+/* The X/Open standard requires some functions and variables to be
+   declared here which do not belong into this header.  But we have to
+   follow.  In GNU mode we don't do this nonsense.  */
+# define __need_getopt
+# include <getopt.h>
+#endif /* X/Open, but not issue 6 and not for GNU.  */
+
+/* If we are compiling with optimizing read this file.  It contains
+   several optimizing inline functions and macros.  */
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdio.h>
+#endif
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdio2.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdio-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* <stdio.h> included.  */
+
+#endif /* !_STDIO_H */
diff --git a/lib/libdss-include/include/stdio_ext.h b/lib/libdss-include/include/stdio_ext.h
new file mode 100644 (file)
index 0000000..eca2b19
--- /dev/null
@@ -0,0 +1,86 @@
+/* Functions to access FILE structure internals.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This header contains the same definitions as the header of the same name
+   on Sun's Solaris OS.  */
+
+#ifndef _STDIO_EXT_H
+#define _STDIO_EXT_H   1
+
+#include <stdio.h>
+
+enum
+{
+  /* Query current state of the locking status.  */
+  FSETLOCKING_QUERY = 0,
+#define FSETLOCKING_QUERY      FSETLOCKING_QUERY
+  /* The library protects all uses of the stream functions, except for
+     uses of the *_unlocked functions, by calls equivalent to flockfile().  */
+  FSETLOCKING_INTERNAL,
+#define FSETLOCKING_INTERNAL   FSETLOCKING_INTERNAL
+  /* The user will take care of locking.  */
+  FSETLOCKING_BYCALLER
+#define FSETLOCKING_BYCALLER   FSETLOCKING_BYCALLER
+};
+
+
+__BEGIN_DECLS
+
+/* Return the size of the buffer of FP in bytes currently in use by
+   the given stream.  */
+extern size_t __fbufsize (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff the stream FP is opened readonly, or if the
+   last operation on the stream was a read operation.  */
+extern int __freading (FILE *__fp) __THROW;
+
+/* Return non-zero value iff the stream FP is opened write-only or
+   append-only, or if the last operation on the stream was a write
+   operation.  */
+extern int __fwriting (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff stream FP is not opened write-only or
+   append-only.  */
+extern int __freadable (FILE *__fp) __THROW;
+
+/* Return non-zero value iff stream FP is not opened read-only.  */
+extern int __fwritable (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff the stream FP is line-buffered.  */
+extern int __flbf (FILE *__fp) __THROW;
+
+
+/* Discard all pending buffered I/O on the stream FP.  */
+extern void __fpurge (FILE *__fp) __THROW;
+
+/* Return amount of output in bytes pending on a stream FP.  */
+extern size_t __fpending (FILE *__fp) __THROW;
+
+/* Flush all line-buffered files.  */
+extern void _flushlbf (void);
+
+
+/* Set locking status of stream FP to TYPE.  */
+extern int __fsetlocking (FILE *__fp, int __type) __THROW;
+
+__END_DECLS
+
+#endif /* stdio_ext.h */
diff --git a/lib/libdss-include/include/stdlib.h b/lib/libdss-include/include/stdlib.h
new file mode 100644 (file)
index 0000000..cc77708
--- /dev/null
@@ -0,0 +1,969 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.20 General utilities        <stdlib.h>
+ */
+
+#ifndef        _STDLIB_H
+
+#include <features.h>
+
+/* Get size_t, wchar_t and NULL from <stddef.h>.  */
+#define                __need_size_t
+#ifndef __need_malloc_and_calloc
+# define       __need_wchar_t
+# define       __need_NULL
+#endif
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#ifndef __need_malloc_and_calloc
+#define        _STDLIB_H       1
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
+/* XPG requires a few symbols from <sys/wait.h> being defined.  */
+# include <bits/waitflags.h>
+# include <bits/waitstatus.h>
+
+# ifdef __USE_MISC
+
+/* Lots of hair to allow traditional BSD use of `union wait'
+   as well as POSIX.1 use of `int' for the status word.  */
+
+#  if defined __GNUC__ && !defined __cplusplus
+#   define __WAIT_INT(status) \
+  (__extension__ (((union { __typeof(status) __in; int __i; }) \
+                  { .__in = (status) }).__i))
+#  else
+#   define __WAIT_INT(status)  (*(int *) &(status))
+#  endif
+
+/* This is the type of the argument to `wait'.  The funky union
+   causes redeclarations with either `int *' or `union wait *' to be
+   allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
+   the actual function definitions.  */
+
+#  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
+#   define __WAIT_STATUS       void *
+#   define __WAIT_STATUS_DEFN  void *
+#  else
+/* This works in GCC 2.6.1 and later.  */
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((__transparent_union__));
+#   define __WAIT_STATUS_DEFN  int *
+#  endif
+
+# else /* Don't use misc.  */
+
+#  define __WAIT_INT(status)   (status)
+#  define __WAIT_STATUS                int *
+#  define __WAIT_STATUS_DEFN   int *
+
+# endif /* Use misc.  */
+
+/* Define the macros <sys/wait.h> also would define this way.  */
+# define WEXITSTATUS(status)   __WEXITSTATUS (__WAIT_INT (status))
+# define WTERMSIG(status)      __WTERMSIG (__WAIT_INT (status))
+# define WSTOPSIG(status)      __WSTOPSIG (__WAIT_INT (status))
+# define WIFEXITED(status)     __WIFEXITED (__WAIT_INT (status))
+# define WIFSIGNALED(status)   __WIFSIGNALED (__WAIT_INT (status))
+# define WIFSTOPPED(status)    __WIFSTOPPED (__WAIT_INT (status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status) __WIFCONTINUED (__WAIT_INT (status))
+# endif
+#endif /* X/Open or XPG7 and <sys/wait.h> not included.  */
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `div'.  */
+typedef struct
+  {
+    int quot;                  /* Quotient.  */
+    int rem;                   /* Remainder.  */
+  } div_t;
+
+/* Returned by `ldiv'.  */
+#ifndef __ldiv_t_defined
+typedef struct
+  {
+    long int quot;             /* Quotient.  */
+    long int rem;              /* Remainder.  */
+  } ldiv_t;
+# define __ldiv_t_defined      1
+#endif
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 && !defined __lldiv_t_defined
+__BEGIN_NAMESPACE_C99
+/* Returned by `lldiv'.  */
+__extension__ typedef struct
+  {
+    long long int quot;                /* Quotient.  */
+    long long int rem;         /* Remainder.  */
+  } lldiv_t;
+# define __lldiv_t_defined     1
+__END_NAMESPACE_C99
+#endif
+
+
+/* The largest number rand will return (same as INT_MAX).  */
+#define        RAND_MAX        2147483647
+
+
+/* We define these the same for all machines.
+   Changes from this to the outside world should be done in `_exit'.  */
+#define        EXIT_FAILURE    1       /* Failing exit status.  */
+#define        EXIT_SUCCESS    0       /* Successful exit status.  */
+
+
+/* Maximum length of a multibyte character in the current locale.  */
+#define        MB_CUR_MAX      (__ctype_get_mb_cur_max ())
+extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a floating-point number.  */
+extern double atof (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to an integer.  */
+extern int atoi (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to a long integer.  */
+extern long int atol (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert a string to a long long integer.  */
+__extension__ extern long long int atoll (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+__END_NAMESPACE_C99
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a floating-point number.  */
+extern double strtod (const char *__restrict __nptr,
+                     char **__restrict __endptr)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Likewise for `float' and `long double' sizes of floating-point numbers.  */
+extern float strtof (const char *__restrict __nptr,
+                    char **__restrict __endptr) __THROW __nonnull ((1));
+
+extern long double strtold (const char *__restrict __nptr,
+                           char **__restrict __endptr)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_C99
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a long integer.  */
+extern long int strtol (const char *__restrict __nptr,
+                       char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned long integer.  */
+extern unsigned long int strtoul (const char *__restrict __nptr,
+                                 char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+                            char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+                                      char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+#endif /* Use misc.  */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+                             char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+                                       char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_C99
+#endif /* ISO C99 or use MISC.  */
+
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another problem is
+   the implementation of the internationalization handling in the
+   ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which take an additional
+   argument.
+
+   Attention: even though several *_l interfaces are part of POSIX:2008,
+   these are not.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+   use as an additional parameter.  */
+extern long int strtol_l (const char *__restrict __nptr,
+                         char **__restrict __endptr, int __base,
+                         __locale_t __loc) __THROW __nonnull ((1, 4));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+                                   char **__restrict __endptr,
+                                   int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+                               char **__restrict __endptr, int __base,
+                               __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+                                         char **__restrict __endptr,
+                                         int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+extern double strtod_l (const char *__restrict __nptr,
+                       char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern float strtof_l (const char *__restrict __nptr,
+                      char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern long double strtold_l (const char *__restrict __nptr,
+                             char **__restrict __endptr,
+                             __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+#endif /* GNU */
+
+
+#ifdef __USE_EXTERN_INLINES
+__BEGIN_NAMESPACE_STD
+__extern_inline int
+__NTH (atoi (const char *__nptr))
+{
+  return (int) strtol (__nptr, (char **) NULL, 10);
+}
+__extern_inline long int
+__NTH (atol (const char *__nptr))
+{
+  return strtol (__nptr, (char **) NULL, 10);
+}
+__END_NAMESPACE_STD
+
+# ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__extension__ __extern_inline long long int
+__NTH (atoll (const char *__nptr))
+{
+  return strtoll (__nptr, (char **) NULL, 10);
+}
+__END_NAMESPACE_C99
+# endif
+#endif /* Optimizing and Inlining.  */
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
+   digit first.  Returns a pointer to static storage overwritten by the
+   next call.  */
+extern char *l64a (long int __n) __THROW __wur;
+
+/* Read a number from a string S in base 64 as above.  */
+extern long int a64l (const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#endif /* Use misc || extended X/Open.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+# include <sys/types.h>        /* we need int32_t... */
+
+/* These are the functions that actually do things.  The `random', `srandom',
+   `initstate' and `setstate' functions are those from BSD Unices.
+   The `rand' and `srand' functions are required by the ANSI standard.
+   We provide both interfaces to the same random number generator.  */
+/* Return a random long integer between 0 and RAND_MAX inclusive.  */
+extern long int random (void) __THROW;
+
+/* Seed the random number generator with the given number.  */
+extern void srandom (unsigned int __seed) __THROW;
+
+/* Initialize the random number generator to use state buffer STATEBUF,
+   of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
+   32, 64, 128 and 256, the bigger the better; values less than 8 will
+   cause an error and values greater than 256 will be rounded down.  */
+extern char *initstate (unsigned int __seed, char *__statebuf,
+                       size_t __statelen) __THROW __nonnull ((2));
+
+/* Switch the random number generator to state buffer STATEBUF,
+   which should have been previously initialized by `initstate'.  */
+extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
+
+
+# ifdef __USE_MISC
+/* Reentrant versions of the `random' family of functions.
+   These functions all use the following data structure to contain
+   state, rather than global state variables.  */
+
+struct random_data
+  {
+    int32_t *fptr;             /* Front pointer.  */
+    int32_t *rptr;             /* Rear pointer.  */
+    int32_t *state;            /* Array of state values.  */
+    int rand_type;             /* Type of random number generator.  */
+    int rand_deg;              /* Degree of random number generator.  */
+    int rand_sep;              /* Distance between front and rear.  */
+    int32_t *end_ptr;          /* Pointer behind state table.  */
+  };
+
+extern int random_r (struct random_data *__restrict __buf,
+                    int32_t *__restrict __result) __THROW __nonnull ((1, 2));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     __THROW __nonnull ((2));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+                       size_t __statelen,
+                       struct random_data *__restrict __buf)
+     __THROW __nonnull ((2, 4));
+
+extern int setstate_r (char *__restrict __statebuf,
+                      struct random_data *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+# endif        /* Use misc.  */
+#endif /* Use extended X/Open || misc. */
+
+
+__BEGIN_NAMESPACE_STD
+/* Return a random integer between 0 and RAND_MAX inclusive.  */
+extern int rand (void) __THROW;
+/* Seed the random number generator with the given number.  */
+extern void srand (unsigned int __seed) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_POSIX
+/* Reentrant interface according to POSIX.1.  */
+extern int rand_r (unsigned int *__seed) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* System V style 48-bit random number generator functions.  */
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern double drand48 (void) __THROW;
+extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern long int lrand48 (void) __THROW;
+extern long int nrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern long int mrand48 (void) __THROW;
+extern long int jrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Seed random number generator.  */
+extern void srand48 (long int __seedval) __THROW;
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     __THROW __nonnull ((1));
+extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
+
+# ifdef __USE_MISC
+/* Data structure for communication with thread safe versions.  This
+   type is to be regarded as opaque.  It's only exported because users
+   have to allocate objects of this type.  */
+struct drand48_data
+  {
+    unsigned short int __x[3]; /* Current state.  */
+    unsigned short int __old_x[3]; /* Old state.  */
+    unsigned short int __c;    /* Additive const. in congruential formula.  */
+    unsigned short int __init; /* Flag for initializing.  */
+    __extension__ unsigned long long int __a;  /* Factor in congruential
+                                                  formula.  */
+  };
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+                     double *__restrict __result) __THROW __nonnull ((1, 2));
+extern int erand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     double *__restrict __result) __THROW __nonnull ((1, 2));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int nrand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int jrand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Seed random number generator.  */
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     __THROW __nonnull ((2));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+                    struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
+
+extern int lcong48_r (unsigned short int __param[7],
+                     struct drand48_data *__buffer)
+     __THROW __nonnull ((1, 2));
+# endif        /* Use misc.  */
+#endif /* Use misc or X/Open.  */
+
+#endif /* don't just need malloc and calloc */
+
+#ifndef __malloc_and_calloc_defined
+# define __malloc_and_calloc_defined
+__BEGIN_NAMESPACE_STD
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t __nmemb, size_t __size)
+     __THROW __attribute_malloc__ __wur;
+__END_NAMESPACE_STD
+#endif
+
+#ifndef __need_malloc_and_calloc
+__BEGIN_NAMESPACE_STD
+/* Re-allocate the previously allocated block
+   in PTR, making the new block SIZE bytes long.  */
+/* __attribute_malloc__ is not used, because if realloc returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *realloc (void *__ptr, size_t __size)
+     __THROW __attribute_warn_unused_result__;
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *__ptr) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Free a block.  An alias for `free'. (Sun Unices).  */
+extern void cfree (void *__ptr) __THROW;
+#endif /* Use misc.  */
+
+#ifdef __USE_MISC
+# include <alloca.h>
+#endif /* Use misc.  */
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+    || defined __USE_MISC
+/* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_ISOC11
+/* ISO C variant of aligned allocation.  */
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+     __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Abort execution and generate a core-dump.  */
+extern void abort (void) __THROW __attribute__ ((__noreturn__));
+
+
+/* Register a function to be called when `exit' is called.  */
+extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Register a function to be called when `quick_exit' is called.  */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+     __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Register a function to be called with the status
+   given to `exit' and the given argument.  */
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     __THROW __nonnull ((1));
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered,
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Call all functions registered with `at_quick_exit' in the reverse
+   of the order in which they were registered and terminate program
+   execution with STATUS.  */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Terminate the program with STATUS without calling any of the
+   functions registered with `atexit' or `on_exit'.  */
+extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
+__END_NAMESPACE_C99
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the value of envariable NAME, or NULL if it doesn't exist.  */
+extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to the above but returns NULL if the
+   programs is running with SUID or SGID enabled.  */
+extern char *secure_getenv (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* The SVID says this is in <stdio.h>, but this seems a better place.  */
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.
+   If there is no `=', remove NAME from the environment.  */
+extern int putenv (char *__string) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+extern int setenv (const char *__name, const char *__value, int __replace)
+     __THROW __nonnull ((2));
+
+/* Remove the variable NAME from the environment.  */
+extern int unsetenv (const char *__name) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+extern int clearenv (void) __THROW;
+#endif
+
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   Always returns TEMPLATE, it's either a temporary file name or a null
+   string if it cannot get a unique file name.  */
+extern char *mktemp (char *__template) __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the filename unique.
+   Returns a file descriptor open on the file for reading and writing,
+   or -1 if it cannot create a uniquely-named file.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemp (char *__template) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkstemp mkstemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Similar to mkstemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
+                      mkstemps64) __nonnull ((1)) __wur;
+#  else
+#   define mkstemps mkstemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemps64 (char *__template, int __suffixlen)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Generate a unique temporary file name from TEMPLATE similar to
+   mkstemp.  But allow the caller to pass additional flags which are
+   used in the open call to create the file..
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemp mkostemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
+# endif
+
+/* Similar to mkostemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
+                                  int __flags), mkostemps64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemps mkostemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Execute the given line as a shell command.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int system (const char *__command) __wur;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the canonical absolute name of the
+   existing named file.  */
+extern char *canonicalize_file_name (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Return the canonical absolute name of file NAME.  If RESOLVED is
+   null, the result is malloc'd; otherwise, if the canonical name is
+   PATH_MAX chars or more, returns null with `errno' set to
+   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  */
+extern char *realpath (const char *__restrict __name,
+                      char *__restrict __resolved) __THROW __wur;
+#endif
+
+
+/* Shorthand for type of comparison functions.  */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef        __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+#ifdef __USE_GNU
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Do a binary search for KEY in BASE, which consists of NMEMB elements
+   of SIZE bytes each, using COMPAR to perform the comparisons.  */
+extern void *bsearch (const void *__key, const void *__base,
+                     size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __nonnull ((1, 2, 5)) __wur;
+
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
+/* Sort NMEMB elements of BASE, of SIZE bytes each,
+   using COMPAR to perform the comparisons.  */
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+                  __compar_fn_t __compar) __nonnull ((1, 4));
+#ifdef __USE_GNU
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+                    __compar_d_fn_t __compar, void *__arg)
+  __nonnull ((1, 4));
+#endif
+
+
+/* Return the absolute value of X.  */
+extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
+extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__extension__ extern long long int llabs (long long int __x)
+     __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
+   of the value of NUMER over DENOM. */
+/* GCC may have built-ins for these someday.  */
+extern div_t div (int __numer, int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__extension__ extern lldiv_t lldiv (long long int __numer,
+                                   long long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_C99
+#endif
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Convert floating point numbers to strings.  The returned values are
+   valid only until another call to the same function.  */
+
+/* Convert VALUE to a string with NDIGIT digits and return a pointer to
+   this.  Set *DECPT with the position of the decimal character and *SIGN
+   with the sign of the number.  */
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
+   with the position of the decimal character and *SIGN with the sign of
+   the number.  */
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* If possible convert VALUE to a string with NDIGIT significant digits.
+   Otherwise use exponential representation.  The resulting string will
+   be written to BUF.  */
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+#endif
+
+#ifdef __USE_MISC
+/* Long double versions of above functions.  */
+extern char *qecvt (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qfcvt (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+
+
+/* Reentrant version of the functions above which provide their own
+   buffers.  */
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign, char *__restrict __buf,
+                  size_t __len) __THROW __nonnull ((3, 4, 5));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign, char *__restrict __buf,
+                  size_t __len) __THROW __nonnull ((3, 4, 5));
+
+extern int qecvt_r (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign,
+                   char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+extern int qfcvt_r (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign,
+                   char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+#endif /* misc */
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the multibyte character
+   in S, which is no longer than N.  */
+extern int mblen (const char *__s, size_t __n) __THROW;
+/* Return the length of the given multibyte character,
+   putting its `wchar_t' representation in *PWC.  */
+extern int mbtowc (wchar_t *__restrict __pwc,
+                  const char *__restrict __s, size_t __n) __THROW;
+/* Put the multibyte character represented
+   by WCHAR in S, returning its length.  */
+extern int wctomb (char *__s, wchar_t __wchar) __THROW;
+
+
+/* Convert a multibyte string to a wide char string.  */
+extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
+                       const char *__restrict __s, size_t __n) __THROW;
+/* Convert a wide char string to multibyte string.  */
+extern size_t wcstombs (char *__restrict __s,
+                       const wchar_t *__restrict __pwcs, size_t __n)
+     __THROW;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_MISC
+/* Determine whether the string value of RESPONSE matches the affirmation
+   or negative response expression as specified by the LC_MESSAGES category
+   in the program's current locale.  Returns 1 if affirmative, 0 if
+   negative, and -1 if not matching.  */
+extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Parse comma separated suboption from *OPTIONP and match against
+   strings in TOKENS.  If found return index and set *VALUEP to
+   optional value introduced by an equal sign.  If the suboption is
+   not part of TOKENS return in *VALUEP beginning of unknown
+   suboption.  On exit *OPTIONP is set to the beginning of the next
+   token or at the terminating NUL character.  */
+extern int getsubopt (char **__restrict __optionp,
+                     char *const *__restrict __tokens,
+                     char **__restrict __valuep)
+     __THROW __nonnull ((1, 2, 3)) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN
+/* Setup DES tables according KEY.  */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+#endif
+
+
+/* X/Open pseudo terminal handling.  */
+
+#ifdef __USE_XOPEN2KXSI
+/* Return a master pseudo-terminal handle.  */
+extern int posix_openpt (int __oflag) __wur;
+#endif
+
+#ifdef __USE_XOPEN
+/* The next four functions all take a master pseudo-tty fd and
+   perform an operation on the associated slave:  */
+
+/* Chown the slave to the calling user.  */
+extern int grantpt (int __fd) __THROW;
+
+/* Release an internal lock so the slave can be opened.
+   Call after grantpt().  */
+extern int unlockpt (int __fd) __THROW;
+
+/* Return the pathname of the pseudo terminal slave associated with
+   the master FD is open on, or NULL on errors.
+   The returned storage is good until the next call to this function.  */
+extern char *ptsname (int __fd) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Store at most BUFLEN characters of the pathname of the slave pseudo
+   terminal associated with the master FD is open on in BUF.
+   Return 0 on success, otherwise an error number.  */
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2));
+
+/* Open a master pseudo terminal and return its file descriptor.  */
+extern int getpt (void);
+#endif
+
+#ifdef __USE_MISC
+/* Put the 1 minute, 5 minute and 15 minute load averages into the first
+   NELEM elements of LOADAVG.  Return the number written (never more than
+   three, but may be less than NELEM), or -1 if an error occurred.  */
+extern int getloadavg (double __loadavg[], int __nelem)
+     __THROW __nonnull ((1));
+#endif
+
+#include <bits/stdlib-float.h>
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdlib.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdlib-ldbl.h>
+#endif
+
+#endif /* don't just need malloc and calloc */
+#undef __need_malloc_and_calloc
+
+__END_DECLS
+
+#endif /* stdlib.h  */
diff --git a/lib/libdss-include/include/string.h b/lib/libdss-include/include/string.h
new file mode 100644 (file)
index 0000000..1f3e348
--- /dev/null
@@ -0,0 +1,660 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.21 String handling  <string.h>
+ */
+
+#ifndef        _STRING_H
+#define        _STRING_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get size_t and NULL from <stddef.h>.  */
+#define        __need_size_t
+#define        __need_NULL
+#include <stddef.h>
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+#if defined __cplusplus && __GNUC_PREREQ (4, 4)
+# define __CORRECT_ISO_CPP_STRING_H_PROTO
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy N bytes of SRC to DEST.  */
+extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
+                    size_t __n) __THROW __nonnull ((1, 2));
+/* Copy N bytes of SRC to DEST, guaranteeing
+   correct behavior for overlapping strings.  */
+extern void *memmove (void *__dest, const void *__src, size_t __n)
+     __THROW __nonnull ((1, 2));
+__END_NAMESPACE_STD
+
+/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
+   Return the position in DEST one byte past where C was copied,
+   or NULL if C was not found in the first N bytes of SRC.  */
+#if defined __USE_MISC || defined __USE_XOPEN
+extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
+                     int __c, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif /* Misc || X/Open.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Set N bytes of S to C.  */
+extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
+
+/* Compare N bytes of S1 and S2.  */
+extern int memcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Search N bytes of S for C.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern void *memchr (void *__s, int __c, size_t __n)
+      __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
+extern const void *memchr (const void *__s, int __c, size_t __n)
+      __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline void *
+memchr (void *__s, int __c, size_t __n) __THROW
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+
+__extern_always_inline const void *
+memchr (const void *__s, int __c, size_t __n) __THROW
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+# endif
+}
+#else
+extern void *memchr (const void *__s, int __c, size_t __n)
+      __THROW __attribute_pure__ __nonnull ((1));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* Search in S for C.  This is similar to `memchr' but there is no
+   length limit.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" void *rawmemchr (void *__s, int __c)
+     __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
+extern "C++" const void *rawmemchr (const void *__s, int __c)
+     __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
+# else
+extern void *rawmemchr (const void *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Search N bytes of S for the final occurrence of C.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" void *memrchr (void *__s, int __c, size_t __n)
+      __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
+extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
+      __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
+# else
+extern void *memrchr (const void *__s, int __c, size_t __n)
+      __THROW __attribute_pure__ __nonnull ((1));
+# endif
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy SRC to DEST.  */
+extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Copy no more than N characters of SRC to DEST.  */
+extern char *strncpy (char *__restrict __dest,
+                     const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Append SRC onto DEST.  */
+extern char *strcat (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Append no more than N characters from SRC onto DEST.  */
+extern char *strncat (char *__restrict __dest, const char *__restrict __src,
+                     size_t __n) __THROW __nonnull ((1, 2));
+
+/* Compare S1 and S2.  */
+extern int strcmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Compare N characters of S1 and S2.  */
+extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Compare the collated forms of S1 and S2.  */
+extern int strcoll (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Put a transformation of SRC into no more than N bytes of DEST.  */
+extern size_t strxfrm (char *__restrict __dest,
+                      const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((2));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* The following functions are equivalent to the both above but they
+   take the locale they use for the collation as an extra argument.
+   This is not standardsized but something like will come.  */
+# include <xlocale.h>
+
+/* Compare the collated forms of S1 and S2 using rules from L.  */
+extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+/* Put a transformation of SRC into no more than N bytes of DEST.  */
+extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
+                        __locale_t __l) __THROW __nonnull ((2, 4));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Duplicate S, returning an identical malloc'd string.  */
+extern char *strdup (const char *__s)
+     __THROW __attribute_malloc__ __nonnull ((1));
+#endif
+
+/* Return a malloc'd copy of at most N bytes of STRING.  The
+   resultant string is terminated even if no null terminator
+   appears before STRING[N].  */
+#if defined __USE_XOPEN2K8
+extern char *strndup (const char *__string, size_t __n)
+     __THROW __attribute_malloc__ __nonnull ((1));
+#endif
+
+#if defined __USE_GNU && defined __GNUC__
+/* Duplicate S, returning an identical alloca'd string.  */
+# define strdupa(s)                                                          \
+  (__extension__                                                             \
+    ({                                                                       \
+      const char *__old = (s);                                               \
+      size_t __len = strlen (__old) + 1;                                     \
+      char *__new = (char *) __builtin_alloca (__len);                       \
+      (char *) memcpy (__new, __old, __len);                                 \
+    }))
+
+/* Return an alloca'd copy of at most N bytes of string.  */
+# define strndupa(s, n)                                                              \
+  (__extension__                                                             \
+    ({                                                                       \
+      const char *__old = (s);                                               \
+      size_t __len = strnlen (__old, (n));                                   \
+      char *__new = (char *) __builtin_alloca (__len + 1);                   \
+      __new[__len] = '\0';                                                   \
+      (char *) memcpy (__new, __old, __len);                                 \
+    }))
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Find the first occurrence of C in S.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strchr (char *__s, int __c)
+     __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
+extern const char *strchr (const char *__s, int __c)
+     __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strchr (char *__s, int __c) __THROW
+{
+  return __builtin_strchr (__s, __c);
+}
+
+__extern_always_inline const char *
+strchr (const char *__s, int __c) __THROW
+{
+  return __builtin_strchr (__s, __c);
+}
+# endif
+}
+#else
+extern char *strchr (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+/* Find the last occurrence of C in S.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strrchr (char *__s, int __c)
+     __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
+extern const char *strrchr (const char *__s, int __c)
+     __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strrchr (char *__s, int __c) __THROW
+{
+  return __builtin_strrchr (__s, __c);
+}
+
+__extern_always_inline const char *
+strrchr (const char *__s, int __c) __THROW
+{
+  return __builtin_strrchr (__s, __c);
+}
+# endif
+}
+#else
+extern char *strrchr (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to `strchr'.  But it returns a pointer to
+   the closing NUL byte in case C is not found in S.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *strchrnul (char *__s, int __c)
+     __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
+extern "C++" const char *strchrnul (const char *__s, int __c)
+     __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
+# else
+extern char *strchrnul (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the initial segment of S which
+   consists entirely of characters not in REJECT.  */
+extern size_t strcspn (const char *__s, const char *__reject)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Return the length of the initial segment of S which
+   consists entirely of characters in ACCEPT.  */
+extern size_t strspn (const char *__s, const char *__accept)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strpbrk (char *__s, const char *__accept)
+     __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
+extern const char *strpbrk (const char *__s, const char *__accept)
+     __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strpbrk (char *__s, const char *__accept) __THROW
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+
+__extern_always_inline const char *
+strpbrk (const char *__s, const char *__accept) __THROW
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+# endif
+}
+#else
+extern char *strpbrk (const char *__s, const char *__accept)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strstr (char *__haystack, const char *__needle)
+     __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
+extern const char *strstr (const char *__haystack, const char *__needle)
+     __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strstr (char *__haystack, const char *__needle) __THROW
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+
+__extern_always_inline const char *
+strstr (const char *__haystack, const char *__needle) __THROW
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+# endif
+}
+#else
+extern char *strstr (const char *__haystack, const char *__needle)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif
+
+
+/* Divide S into tokens separated by characters in DELIM.  */
+extern char *strtok (char *__restrict __s, const char *__restrict __delim)
+     __THROW __nonnull ((2));
+__END_NAMESPACE_STD
+
+/* Divide S into tokens separated by characters in DELIM.  Information
+   passed between calls are stored in SAVE_PTR.  */
+extern char *__strtok_r (char *__restrict __s,
+                        const char *__restrict __delim,
+                        char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
+#ifdef __USE_POSIX
+extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
+                      char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
+#endif
+
+#ifdef __USE_GNU
+/* Similar to `strstr' but this function ignores the case of both strings.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *strcasestr (char *__haystack, const char *__needle)
+     __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
+extern "C++" const char *strcasestr (const char *__haystack,
+                                    const char *__needle)
+     __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
+# else
+extern char *strcasestr (const char *__haystack, const char *__needle)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif
+
+#ifdef __USE_GNU
+/* Find the first occurrence of NEEDLE in HAYSTACK.
+   NEEDLE is NEEDLELEN bytes long;
+   HAYSTACK is HAYSTACKLEN bytes long.  */
+extern void *memmem (const void *__haystack, size_t __haystacklen,
+                    const void *__needle, size_t __needlelen)
+     __THROW __attribute_pure__ __nonnull ((1, 3));
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+extern void *__mempcpy (void *__restrict __dest,
+                       const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+extern void *mempcpy (void *__restrict __dest,
+                     const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of S.  */
+extern size_t strlen (const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Find the length of STRING, but scan at most MAXLEN characters.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+extern size_t strnlen (const char *__string, size_t __maxlen)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return a string describing the meaning of the `errno' code in ERRNUM.  */
+extern char *strerror (int __errnum) __THROW;
+__END_NAMESPACE_STD
+#ifdef __USE_XOPEN2K
+/* Reentrant version of `strerror'.
+   There are 2 flavors of `strerror_r', GNU which returns the string
+   and may or may not use the supplied temporary buffer and POSIX one
+   which fills the string into the buffer.
+   To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L
+   without -D_GNU_SOURCE is needed, otherwise the GNU version is
+   preferred.  */
+# if defined __USE_XOPEN2K && !defined __USE_GNU
+/* Fill BUF with a string describing the meaning of the `errno' code in
+   ERRNUM.  */
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (strerror_r,
+                          (int __errnum, char *__buf, size_t __buflen),
+                          __xpg_strerror_r) __nonnull ((2));
+#  else
+extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2));
+#   define strerror_r __xpg_strerror_r
+#  endif
+# else
+/* If a temporary buffer is required, at most BUFLEN bytes of BUF will be
+   used.  */
+extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Translate error number to string according to the locale L.  */
+extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
+#endif
+
+
+/* We define this function always since `bzero' is sometimes needed when
+   the namespace rules does not allow this.  */
+extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
+extern void bcopy (const void *__src, void *__dest, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Set N bytes of S to 0.  */
+extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+/* Compare N bytes of S1 and S2 (same as memcmp).  */
+extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Find the first occurrence of C in S (same as strchr).  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+extern const char *index (const char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+
+#  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
+__extern_always_inline char *
+index (char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+
+__extern_always_inline const char *
+index (const char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+#  endif
+}
+# else
+extern char *index (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Find the last occurrence of C in S (same as strrchr).  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+extern const char *rindex (const char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+
+#  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
+__extern_always_inline char *
+rindex (char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+
+__extern_always_inline const char *
+rindex (const char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+#endif
+}
+# else
+extern char *rindex (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Return the position of the first bit set in I, or 0 if none are set.
+   The least-significant bit is position 1, the most-significant 32.  */
+extern int ffs (int __i) __THROW __attribute__ ((__const__));
+
+/* The following two functions are non-standard but necessary for non-32 bit
+   platforms.  */
+# ifdef        __USE_GNU
+extern int ffsl (long int __l) __THROW __attribute__ ((__const__));
+__extension__ extern int ffsll (long long int __ll)
+     __THROW __attribute__ ((__const__));
+# endif
+
+/* Compare S1 and S2, ignoring case.  */
+extern int strcasecmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif /* Use misc.  */
+
+#ifdef __USE_GNU
+/* Again versions of a few functions which use the given locale instead
+   of the global one.  */
+extern int strcasecmp_l (const char *__s1, const char *__s2,
+                        __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+
+extern int strncasecmp_l (const char *__s1, const char *__s2,
+                         size_t __n, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
+#endif
+
+#ifdef __USE_MISC
+/* Return the next DELIM-delimited token from *STRINGP,
+   terminating it with a '\0', and update *STRINGP to point past it.  */
+extern char *strsep (char **__restrict __stringp,
+                    const char *__restrict __delim)
+     __THROW __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Return a string describing the meaning of the signal number in SIG.  */
+extern char *strsignal (int __sig) __THROW;
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
+extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+extern char *__stpncpy (char *__restrict __dest,
+                       const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+extern char *stpncpy (char *__restrict __dest,
+                     const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_GNU
+/* Compare S1 and S2 as strings holding name & indices/version numbers.  */
+extern int strverscmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Sautee STRING briskly.  */
+extern char *strfry (char *__string) __THROW __nonnull ((1));
+
+/* Frobnicate N bytes of S.  */
+extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1));
+
+# ifndef basename
+/* Return the file name within directory of FILENAME.  We don't
+   declare the function if the `basename' macro is available (defined
+   in <libgen.h>) which makes the XPG version of this function
+   available.  */
+#  ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *basename (char *__filename)
+     __THROW __asm ("basename") __nonnull ((1));
+extern "C++" const char *basename (const char *__filename)
+     __THROW __asm ("basename") __nonnull ((1));
+#  else
+extern char *basename (const char *__filename) __THROW __nonnull ((1));
+#  endif
+# endif
+#endif
+
+
+#if defined __GNUC__ && __GNUC__ >= 2
+# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
+     && !defined __NO_INLINE__ && !defined __cplusplus
+/* When using GNU CC we provide some optimized versions of selected
+   functions from this header.  There are two kinds of optimizations:
+
+   - machine-dependent optimizations, most probably using inline
+     assembler code; these might be quite expensive since the code
+     size can increase significantly.
+     These optimizations are not used unless the symbol
+       __USE_STRING_INLINES
+     is defined before including this header.
+
+   - machine-independent optimizations which do not increase the
+     code size significantly and which optimize mainly situations
+     where one or more arguments are compile-time constants.
+     These optimizations are used always when the compiler is
+     taught to optimize.
+
+   One can inhibit all optimizations by defining __NO_STRING_INLINES.  */
+
+/* Get the machine-dependent optimizations (if any).  */
+#  include <bits/string.h>
+
+/* These are generic optimizations which do not add too much inline code.  */
+#  include <bits/string2.h>
+# endif
+
+# if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+/* Functions with security checks.  */
+#  include <bits/string3.h>
+# endif
+#endif
+
+#if defined __USE_GNU && defined __OPTIMIZE__ \
+    && defined __extern_always_inline && __GNUC_PREREQ (3,2)
+# if !defined _FORCE_INLINES && !defined _HAVE_STRING_ARCH_mempcpy
+
+#undef mempcpy
+#undef __mempcpy
+#define mempcpy(dest, src, n) __mempcpy_inline (dest, src, n)
+#define __mempcpy(dest, src, n) __mempcpy_inline (dest, src, n)
+
+__extern_always_inline void *
+__mempcpy_inline (void *__restrict __dest,
+                 const void *__restrict __src, size_t __n)
+{
+  return (char *) memcpy (__dest, __src, __n) + __n;
+}
+
+# endif
+#endif
+
+__END_DECLS
+
+#endif /* string.h  */
diff --git a/lib/libdss-include/include/strings.h b/lib/libdss-include/include/strings.h
new file mode 100644 (file)
index 0000000..e372a33
--- /dev/null
@@ -0,0 +1,139 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _STRINGS_H
+#define        _STRINGS_H      1
+
+/* We don't need and should not read this file if <string.h> was already
+   read. The one exception being that if __USE_MISC isn't defined, then
+   these aren't defined in string.h, so we need to define them here.  */
+#if !defined _STRING_H || !defined __USE_MISC
+
+# include <features.h>
+# define __need_size_t
+# include <stddef.h>
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+# if defined __cplusplus && __GNUC_PREREQ (4, 4)
+#  define __CORRECT_ISO_CPP_STRINGS_H_PROTO
+# endif
+
+__BEGIN_DECLS
+
+# if defined __USE_MISC || !defined __USE_XOPEN2K8
+/* Compare N bytes of S1 and S2 (same as memcmp).  */
+extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
+extern void bcopy (const void *__src, void *__dest, size_t __n) __THROW;
+
+/* Set N bytes of S to 0.  */
+extern void bzero (void *__s, size_t __n) __THROW;
+
+/* Find the first occurrence of C in S (same as strchr).  */
+#  ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+extern const char *index (const char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+
+#   if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
+__extern_always_inline char *
+index (char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+
+__extern_always_inline const char *
+index (const char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+#   endif
+}
+#  else
+extern char *index (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#  endif
+
+/* Find the last occurrence of C in S (same as strrchr).  */
+#  ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+extern const char *rindex (const char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+
+#   if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
+__extern_always_inline char *
+rindex (char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+
+__extern_always_inline const char *
+rindex (const char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+#   endif
+}
+#  else
+extern char *rindex (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#  endif
+# endif
+
+#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI
+/* Return the position of the first bit set in I, or 0 if none are set.
+   The least-significant bit is position 1, the most-significant 32.  */
+extern int ffs (int __i) __THROW __attribute__ ((const));
+#endif
+
+/* Compare S1 and S2, ignoring case.  */
+extern int strcasecmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__;
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+#ifdef __USE_XOPEN2K8
+/* The following functions are equivalent to the both above but they
+   take the locale they use for the collation as an extra argument.
+   This is not standardsized but something like will come.  */
+# include <xlocale.h>
+
+/* Again versions of a few functions which use the given locale instead
+   of the global one.  */
+extern int strcasecmp_l (const char *__s1, const char *__s2, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+
+extern int strncasecmp_l (const char *__s1, const char *__s2,
+                         size_t __n, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
+#endif
+
+__END_DECLS
+
+#endif /* string.h  */
+
+#endif /* strings.h  */
diff --git a/lib/libdss-include/include/stropts.h b/lib/libdss-include/include/stropts.h
new file mode 100644 (file)
index 0000000..72cc3b7
--- /dev/null
@@ -0,0 +1,92 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+#define _STROPTS_H     1
+
+#include <features.h>
+#include <bits/types.h>
+#include <bits/xtitypes.h>
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+typedef __t_scalar_t t_scalar_t;
+typedef __t_uscalar_t t_uscalar_t;
+
+/* Get system specific constants.  */
+#include <bits/stropts.h>
+
+
+__BEGIN_DECLS
+
+/* Test whether FILDES is associated with a STREAM-based file.  */
+extern int isastream (int __fildes) __THROW;
+
+/* Receive next message from a STREAMS file.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int getmsg (int __fildes, struct strbuf *__restrict __ctlptr,
+                  struct strbuf *__restrict __dataptr,
+                  int *__restrict __flagsp);
+
+/* Receive next message from a STREAMS file, with *FLAGSP allowing to
+   control which message.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int getpmsg (int __fildes, struct strbuf *__restrict __ctlptr,
+                   struct strbuf *__restrict __dataptr,
+                   int *__restrict __bandp, int *__restrict __flagsp);
+
+/* Perform the I/O control operation specified by REQUEST on FD.
+   One argument may follow; its presence and type depend on REQUEST.
+   Return value depends on REQUEST.  Usually -1 indicates error.  */
+extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
+
+/* Send a message on a STREAM.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int putmsg (int __fildes, const struct strbuf *__ctlptr,
+                  const struct strbuf *__dataptr, int __flags);
+
+/* Send a message on a STREAM to the BAND.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int putpmsg (int __fildes, const struct strbuf *__ctlptr,
+                   const struct strbuf *__dataptr, int __band, int __flags);
+
+/* Attach a STREAMS-based file descriptor FILDES to a file PATH in the
+   file system name space.  */
+extern int fattach (int __fildes, const char *__path) __THROW;
+
+/* Detach a name PATH from a STREAMS-based file descriptor.  */
+extern int fdetach (const char *__path) __THROW;
+
+__END_DECLS
+
+#endif /* stropts.h */
diff --git a/lib/libdss-include/include/sys/acct.h b/lib/libdss-include/include/sys/acct.h
new file mode 100644 (file)
index 0000000..ea0e7fd
--- /dev/null
@@ -0,0 +1,108 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_ACCT_H
+#define _SYS_ACCT_H    1
+
+#include <features.h>
+
+#include <endian.h>
+#define        __need_time_t
+#include <time.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+#define ACCT_COMM 16
+
+/*
+  comp_t is a 16-bit "floating" point number with a 3-bit base 8
+  exponent and a 13-bit fraction. See linux/kernel/acct.c for the
+  specific encoding system used.
+*/
+
+typedef u_int16_t comp_t;
+
+struct acct
+{
+  char ac_flag;                        /* Flags.  */
+  u_int16_t ac_uid;            /* Real user ID.  */
+  u_int16_t ac_gid;            /* Real group ID.  */
+  u_int16_t ac_tty;            /* Controlling terminal.  */
+  u_int32_t ac_btime;          /* Beginning time.  */
+  comp_t ac_utime;             /* User time.  */
+  comp_t ac_stime;             /* System time.  */
+  comp_t ac_etime;             /* Elapsed time.  */
+  comp_t ac_mem;               /* Average memory usage.  */
+  comp_t ac_io;                        /* Chars transferred.  */
+  comp_t ac_rw;                        /* Blocks read or written.  */
+  comp_t ac_minflt;            /* Minor pagefaults.  */
+  comp_t ac_majflt;            /* Major pagefaults.  */
+  comp_t ac_swaps;             /* Number of swaps.  */
+  u_int32_t ac_exitcode;       /* Process exitcode.  */
+  char ac_comm[ACCT_COMM+1];   /* Command name.  */
+  char ac_pad[10];             /* Padding bytes.  */
+};
+
+
+struct acct_v3
+{
+  char ac_flag;                        /* Flags */
+  char ac_version;             /* Always set to ACCT_VERSION */
+  u_int16_t ac_tty;            /* Control Terminal */
+  u_int32_t ac_exitcode;       /* Exitcode */
+  u_int32_t ac_uid;            /* Real User ID */
+  u_int32_t ac_gid;            /* Real Group ID */
+  u_int32_t ac_pid;            /* Process ID */
+  u_int32_t ac_ppid;           /* Parent Process ID */
+  u_int32_t ac_btime;          /* Process Creation Time */
+  float ac_etime;              /* Elapsed Time */
+  comp_t ac_utime;             /* User Time */
+  comp_t ac_stime;             /* System Time */
+  comp_t ac_mem;               /* Average Memory Usage */
+  comp_t ac_io;                        /* Chars Transferred */
+  comp_t ac_rw;                        /* Blocks Read or Written */
+  comp_t ac_minflt;            /* Minor Pagefaults */
+  comp_t ac_majflt;            /* Major Pagefaults */
+  comp_t ac_swaps;             /* Number of Swaps */
+  char ac_comm[ACCT_COMM];     /* Command Name */
+};
+
+
+enum
+  {
+    AFORK = 0x01,              /* Has executed fork, but no exec.  */
+    ASU = 0x02,                        /* Used super-user privileges.  */
+    ACORE = 0x08,              /* Dumped core.  */
+    AXSIG = 0x10               /* Killed by a signal.  */
+  };
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define ACCT_BYTEORDER 0x80   /* Accounting file is big endian.  */
+#else
+# define ACCT_BYTEORDER 0x00   /* Accounting file is little endian.  */
+#endif
+
+#define AHZ     100
+
+
+/* Switch process accounting on and off.  */
+extern int acct (const char *__filename) __THROW;
+
+__END_DECLS
+
+#endif /* sys/acct.h */
diff --git a/lib/libdss-include/include/sys/auxv.h b/lib/libdss-include/include/sys/auxv.h
new file mode 100644 (file)
index 0000000..1b141bb
--- /dev/null
@@ -0,0 +1,37 @@
+/* Access to the auxiliary vector.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_AUXV_H
+#define _SYS_AUXV_H 1
+
+#include <elf.h>
+#include <bits/auxv.h>
+#include <sys/cdefs.h>
+#include <bits/hwcap.h>
+
+__BEGIN_DECLS
+
+/* Return the value associated with an Elf*_auxv_t type from the auxv list
+   passed to the program on startup.  If TYPE was not present in the auxv
+   list, returns zero and sets errno to ENOENT.  */
+extern unsigned long int getauxval (unsigned long int __type)
+  __THROW;
+
+__END_DECLS
+
+#endif /* sys/auxv.h */
diff --git a/lib/libdss-include/include/sys/bitypes.h b/lib/libdss-include/include/sys/bitypes.h
new file mode 100644 (file)
index 0000000..3a9860f
--- /dev/null
@@ -0,0 +1,3 @@
+/* The GNU <sys/types.h> defines all the necessary types.  */
+
+#include <sys/types.h>
diff --git a/lib/libdss-include/include/sys/cdefs.h b/lib/libdss-include/include/sys/cdefs.h
new file mode 100644 (file)
index 0000000..7fd4154
--- /dev/null
@@ -0,0 +1,444 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_CDEFS_H
+#define        _SYS_CDEFS_H    1
+
+/* We are almost always included from features.h. */
+#ifndef _FEATURES_H
+# include <features.h>
+#endif
+
+/* The GNU libc does not support any K&R compilers or the traditional mode
+   of ISO C compilers anymore.  Check for some of the combinations not
+   anymore supported.  */
+#if defined __GNUC__ && !defined __STDC__
+# error "You need a ISO C conforming compiler to use the glibc headers"
+#endif
+
+/* Some user header file might have defined this before.  */
+#undef __P
+#undef __PMT
+
+#ifdef __GNUC__
+
+/* All functions, except those with callbacks or those that
+   synchronize memory, are leaf functions.  */
+# if __GNUC_PREREQ (4, 6) && !defined _LIBC
+#  define __LEAF , __leaf__
+#  define __LEAF_ATTR __attribute__ ((__leaf__))
+# else
+#  define __LEAF
+#  define __LEAF_ATTR
+# endif
+
+/* GCC can always grok prototypes.  For C++ programs we add throw()
+   to help it optimize the function calls.  But this works only with
+   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
+   as non-throwing using a function attribute since programs can use
+   the -fexceptions options for C code as well.  */
+# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
+#  define __THROW      __attribute__ ((__nothrow__ __LEAF))
+#  define __THROWNL    __attribute__ ((__nothrow__))
+#  define __NTH(fct)   __attribute__ ((__nothrow__ __LEAF)) fct
+# else
+#  if defined __cplusplus && __GNUC_PREREQ (2,8)
+#   define __THROW     throw ()
+#   define __THROWNL   throw ()
+#   define __NTH(fct)  __LEAF_ATTR fct throw ()
+#  else
+#   define __THROW
+#   define __THROWNL
+#   define __NTH(fct)  fct
+#  endif
+# endif
+
+#else  /* Not GCC.  */
+
+# define __inline              /* No inline functions.  */
+
+# define __THROW
+# define __THROWNL
+# define __NTH(fct)    fct
+
+#endif /* GCC.  */
+
+/* These two macros are not used in glibc anymore.  They are kept here
+   only because some other projects expect the macros to be defined.  */
+#define __P(args)      args
+#define __PMT(args)    args
+
+/* For these things, GCC behaves the ANSI way normally,
+   and the non-ANSI way under -traditional.  */
+
+#define __CONCAT(x,y)  x ## y
+#define __STRING(x)    #x
+
+/* This is not a typedef so `const __ptr_t' does the right thing.  */
+#define __ptr_t void *
+#define __long_double_t  long double
+
+
+/* C++ needs to know that types and declarations are C, not C++.  */
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS   }
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+
+/* The standard library needs the functions from the ISO C90 standard
+   in the std namespace.  At the same time we want to be safe for
+   future changes and we include the ISO C99 code in the non-standard
+   namespace __c99.  The C++ wrapper header take case of adding the
+   definitions to the global namespace.  */
+#if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES
+# define __BEGIN_NAMESPACE_STD namespace std {
+# define __END_NAMESPACE_STD   }
+# define __USING_NAMESPACE_STD(name) using std::name;
+# define __BEGIN_NAMESPACE_C99 namespace __c99 {
+# define __END_NAMESPACE_C99   }
+# define __USING_NAMESPACE_C99(name) using __c99::name;
+#else
+/* For compatibility we do not add the declarations into any
+   namespace.  They will end up in the global namespace which is what
+   old code expects.  */
+# define __BEGIN_NAMESPACE_STD
+# define __END_NAMESPACE_STD
+# define __USING_NAMESPACE_STD(name)
+# define __BEGIN_NAMESPACE_C99
+# define __END_NAMESPACE_C99
+# define __USING_NAMESPACE_C99(name)
+#endif
+
+
+/* Fortify support.  */
+#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+#define __bos0(ptr) __builtin_object_size (ptr, 0)
+
+#if __GNUC_PREREQ (4,3)
+# define __warndecl(name, msg) \
+  extern void name (void) __attribute__((__warning__ (msg)))
+# define __warnattr(msg) __attribute__((__warning__ (msg)))
+# define __errordecl(name, msg) \
+  extern void name (void) __attribute__((__error__ (msg)))
+#else
+# define __warndecl(name, msg) extern void name (void)
+# define __warnattr(msg)
+# define __errordecl(name, msg) extern void name (void)
+#endif
+
+/* Support for flexible arrays.  */
+#if __GNUC_PREREQ (2,97)
+/* GCC 2.97 supports C99 flexible array members.  */
+# define __flexarr     []
+#else
+# ifdef __GNUC__
+#  define __flexarr    [0]
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __flexarr   []
+#  else
+/* Some other non-C99 compiler.  Approximate with [1].  */
+#   define __flexarr   [1]
+#  endif
+# endif
+#endif
+
+
+/* __asm__ ("xyz") is used throughout the headers to rename functions
+   at the assembly language level.  This is wrapped by the __REDIRECT
+   macro, in order to support compilers that can do this some other
+   way.  When compilers don't support asm-names at all, we have to do
+   preprocessor tricks instead (which don't have exactly the right
+   semantics, but it's the best we can do).
+
+   Example:
+   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
+
+#if defined __GNUC__ && __GNUC__ >= 2
+
+# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
+# ifdef __cplusplus
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __THROW __asm__ (__ASMNAME (#alias))
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __THROWNL __asm__ (__ASMNAME (#alias))
+# else
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROW
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROWNL
+# endif
+# define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
+
+/*
+#elif __SOME_OTHER_COMPILER__
+
+# define __REDIRECT(name, proto, alias) name proto; \
+       _Pragma("let " #name " = " #alias)
+*/
+#endif
+
+/* GCC has various useful declarations that can be made with the
+   `__attribute__' syntax.  All of the ways we use this do fine if
+   they are omitted for compilers that don't understand it. */
+#if !defined __GNUC__ || __GNUC__ < 2
+# define __attribute__(xyz)    /* Ignore */
+#endif
+
+/* At some point during the gcc 2.96 development the `malloc' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_malloc__ __attribute__ ((__malloc__))
+#else
+# define __attribute_malloc__ /* Ignore */
+#endif
+
+/* Tell the compiler which arguments to an allocation function
+   indicate the size of the allocation.  */
+#if __GNUC_PREREQ (4, 3)
+# define __attribute_alloc_size__(params) \
+  __attribute__ ((__alloc_size__ params))
+#else
+# define __attribute_alloc_size__(params) /* Ignore.  */
+#endif
+
+/* At some point during the gcc 2.96 development the `pure' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_pure__ __attribute__ ((__pure__))
+#else
+# define __attribute_pure__ /* Ignore */
+#endif
+
+/* This declaration tells the compiler that the value is constant.  */
+#if __GNUC_PREREQ (2,5)
+# define __attribute_const__ __attribute__ ((__const__))
+#else
+# define __attribute_const__ /* Ignore */
+#endif
+
+/* At some point during the gcc 3.1 development the `used' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (3,1)
+# define __attribute_used__ __attribute__ ((__used__))
+# define __attribute_noinline__ __attribute__ ((__noinline__))
+#else
+# define __attribute_used__ __attribute__ ((__unused__))
+# define __attribute_noinline__ /* Ignore */
+#endif
+
+/* gcc allows marking deprecated functions.  */
+#if __GNUC_PREREQ (3,2)
+# define __attribute_deprecated__ __attribute__ ((__deprecated__))
+#else
+# define __attribute_deprecated__ /* Ignore */
+#endif
+
+/* At some point during the gcc 2.8 development the `format_arg' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.
+   If several `format_arg' attributes are given for the same function, in
+   gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
+   all designated arguments are considered.  */
+#if __GNUC_PREREQ (2,8)
+# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
+#else
+# define __attribute_format_arg__(x) /* Ignore */
+#endif
+
+/* At some point during the gcc 2.97 development the `strfmon' format
+   attribute for functions was introduced.  We don't want to use it
+   unconditionally (although this would be possible) since it
+   generates warnings.  */
+#if __GNUC_PREREQ (2,97)
+# define __attribute_format_strfmon__(a,b) \
+  __attribute__ ((__format__ (__strfmon__, a, b)))
+#else
+# define __attribute_format_strfmon__(a,b) /* Ignore */
+#endif
+
+/* The nonull function attribute allows to mark pointer parameters which
+   must not be NULL.  */
+#if __GNUC_PREREQ (3,3)
+# define __nonnull(params) __attribute__ ((__nonnull__ params))
+#else
+# define __nonnull(params)
+#endif
+
+/* If fortification mode, we warn about unused results of certain
+   function calls which can lead to problems.  */
+#if __GNUC_PREREQ (3,4)
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+# if __USE_FORTIFY_LEVEL > 0
+#  define __wur __attribute_warn_unused_result__
+# endif
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+#ifndef __wur
+# define __wur /* Ignore */
+#endif
+
+/* Forces a function to be always inlined.  */
+#if __GNUC_PREREQ (3,2)
+# define __always_inline __inline __attribute__ ((__always_inline__))
+#else
+# define __always_inline __inline
+#endif
+
+/* Associate error messages with the source location of the call site rather
+   than with the source location inside the function.  */
+#if __GNUC_PREREQ (4,3)
+# define __attribute_artificial__ __attribute__ ((__artificial__))
+#else
+# define __attribute_artificial__ /* Ignore */
+#endif
+
+/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__
+   or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
+   older than 4.3 may define these macros and still not guarantee GNU inlining
+   semantics.
+
+   clang++ identifies itself as gcc-4.2, but has support for GNU inlining
+   semantics, that can be checked fot by using the __GNUC_STDC_INLINE_ and
+   __GNUC_GNU_INLINE__ macro definitions.  */
+#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
+     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
+                              || defined __GNUC_GNU_INLINE__)))
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+#  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+#  define __extern_always_inline \
+  extern __always_inline __attribute__ ((__gnu_inline__))
+# else
+#  define __extern_inline extern __inline
+#  define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+#ifdef __extern_always_inline
+# define __fortify_function __extern_always_inline __attribute_artificial__
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+   __extern_always_inline function to some other vararg function.  */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
+# define __va_arg_pack_len() __builtin_va_arg_pack_len ()
+#endif
+
+/* It is possible to compile containing GCC extensions even if GCC is
+   run in pedantic mode if the uses are carefully marked using the
+   `__extension__' keyword.  But this is not generally available before
+   version 2.8.  */
+#if !__GNUC_PREREQ (2,8)
+# define __extension__         /* Ignore */
+#endif
+
+/* __restrict is known in EGCS 1.2 and above. */
+#if !__GNUC_PREREQ (2,92)
+# define __restrict    /* Ignore */
+#endif
+
+/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
+     array_name[restrict]
+   GCC 3.1 supports this.  */
+#if __GNUC_PREREQ (3,1) && !defined __GNUG__
+# define __restrict_arr        __restrict
+#else
+# ifdef __GNUC__
+#  define __restrict_arr       /* Not supported in old GCC.  */
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __restrict_arr      restrict
+#  else
+/* Some other non-C99 compiler.  */
+#   define __restrict_arr      /* Not supported.  */
+#  endif
+# endif
+#endif
+
+#if __GNUC__ >= 3
+# define __glibc_unlikely(cond)        __builtin_expect ((cond), 0)
+# define __glibc_likely(cond)  __builtin_expect ((cond), 1)
+#else
+# define __glibc_unlikely(cond)        (cond)
+# define __glibc_likely(cond)  (cond)
+#endif
+
+#if (!defined _Noreturn \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     &&  !__GNUC_PREREQ (4,7))
+# if __GNUC_PREREQ (2,8)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# else
+#  define _Noreturn
+# endif
+#endif
+
+#if (!defined _Static_assert && !defined __cplusplus \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
+# define _Static_assert(expr, diagnostic) \
+    extern int (*__Static_assert_function (void)) \
+      [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
+#endif
+
+#include <bits/wordsize.h>
+
+#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+# define __LDBL_COMPAT 1
+# ifdef __REDIRECT
+#  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __LDBL_REDIR(name, proto) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
+#  define __LDBL_REDIR_NTH(name, proto) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_DECL(name, alias) \
+  extern __typeof (name) name __asm (__ASMNAME (#alias));
+#  define __LDBL_REDIR_DECL(name) \
+  extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
+#  define __REDIRECT_LDBL(name, proto, alias) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
+# endif
+#endif
+#if !defined __LDBL_COMPAT || !defined __REDIRECT
+# define __LDBL_REDIR1(name, proto, alias) name proto
+# define __LDBL_REDIR(name, proto) name proto
+# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
+# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
+# define __LDBL_REDIR_DECL(name)
+# ifdef __REDIRECT
+#  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __REDIRECT_NTH (name, proto, alias)
+# endif
+#endif
+
+#endif  /* sys/cdefs.h */
diff --git a/lib/libdss-include/include/sys/dir.h b/lib/libdss-include/include/sys/dir.h
new file mode 100644 (file)
index 0000000..73b04bf
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_DIR_H
+#define        _SYS_DIR_H      1
+
+#include <features.h>
+
+#include <dirent.h>
+
+#define        direct  dirent
+
+#endif /* sys/dir.h  */
diff --git a/lib/libdss-include/include/sys/elf.h b/lib/libdss-include/include/sys/elf.h
new file mode 100644 (file)
index 0000000..7a2b01b
--- /dev/null
@@ -0,0 +1,26 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_ELF_H
+#define _SYS_ELF_H     1
+
+#warning "This header is obsolete; use <sys/procfs.h> instead."
+
+#include <sys/procfs.h>
+
+#endif /* sys/elf.h */
diff --git a/lib/libdss-include/include/sys/epoll.h b/lib/libdss-include/include/sys/epoll.h
new file mode 100644 (file)
index 0000000..72ec211
--- /dev/null
@@ -0,0 +1,142 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EPOLL_H
+#define        _SYS_EPOLL_H    1
+
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+/* Get the platform-dependent flags.  */
+#include <bits/epoll.h>
+
+#ifndef __EPOLL_PACKED
+# define __EPOLL_PACKED
+#endif
+
+
+enum EPOLL_EVENTS
+  {
+    EPOLLIN = 0x001,
+#define EPOLLIN EPOLLIN
+    EPOLLPRI = 0x002,
+#define EPOLLPRI EPOLLPRI
+    EPOLLOUT = 0x004,
+#define EPOLLOUT EPOLLOUT
+    EPOLLRDNORM = 0x040,
+#define EPOLLRDNORM EPOLLRDNORM
+    EPOLLRDBAND = 0x080,
+#define EPOLLRDBAND EPOLLRDBAND
+    EPOLLWRNORM = 0x100,
+#define EPOLLWRNORM EPOLLWRNORM
+    EPOLLWRBAND = 0x200,
+#define EPOLLWRBAND EPOLLWRBAND
+    EPOLLMSG = 0x400,
+#define EPOLLMSG EPOLLMSG
+    EPOLLERR = 0x008,
+#define EPOLLERR EPOLLERR
+    EPOLLHUP = 0x010,
+#define EPOLLHUP EPOLLHUP
+    EPOLLRDHUP = 0x2000,
+#define EPOLLRDHUP EPOLLRDHUP
+    EPOLLWAKEUP = 1u << 29,
+#define EPOLLWAKEUP EPOLLWAKEUP
+    EPOLLONESHOT = 1u << 30,
+#define EPOLLONESHOT EPOLLONESHOT
+    EPOLLET = 1u << 31
+#define EPOLLET EPOLLET
+  };
+
+
+/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
+#define EPOLL_CTL_ADD 1        /* Add a file descriptor to the interface.  */
+#define EPOLL_CTL_DEL 2        /* Remove a file descriptor from the interface.  */
+#define EPOLL_CTL_MOD 3        /* Change file descriptor epoll_event structure.  */
+
+
+typedef union epoll_data
+{
+  void *ptr;
+  int fd;
+  uint32_t u32;
+  uint64_t u64;
+} epoll_data_t;
+
+struct epoll_event
+{
+  uint32_t events;     /* Epoll events */
+  epoll_data_t data;   /* User data variable */
+} __EPOLL_PACKED;
+
+
+__BEGIN_DECLS
+
+/* Creates an epoll instance.  Returns an fd for the new instance.
+   The "size" parameter is a hint specifying the number of file
+   descriptors to be associated with the new instance.  The fd
+   returned by epoll_create() should be closed with close().  */
+extern int epoll_create (int __size) __THROW;
+
+/* Same as epoll_create but with an FLAGS parameter.  The unused SIZE
+   parameter has been dropped.  */
+extern int epoll_create1 (int __flags) __THROW;
+
+
+/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
+   -1 in case of error ( the "errno" variable will contain the
+   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
+   constants defined above. The "fd" parameter is the target of the
+   operation. The "event" parameter describes which events the caller
+   is interested in and any associated user data.  */
+extern int epoll_ctl (int __epfd, int __op, int __fd,
+                     struct epoll_event *__event) __THROW;
+
+
+/* Wait for events on an epoll instance "epfd". Returns the number of
+   triggered events returned in "events" buffer. Or -1 in case of
+   error with the "errno" variable set to the specific error code. The
+   "events" parameter is a buffer that will contain triggered
+   events. The "maxevents" is the maximum number of events to be
+   returned ( usually size of "events" ). The "timeout" parameter
+   specifies the maximum wait time in milliseconds (-1 == infinite).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_wait (int __epfd, struct epoll_event *__events,
+                      int __maxevents, int __timeout);
+
+
+/* Same as epoll_wait, but the thread's signal mask is temporarily
+   and atomically replaced with the one provided as parameter.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_pwait (int __epfd, struct epoll_event *__events,
+                       int __maxevents, int __timeout,
+                       const __sigset_t *__ss);
+
+__END_DECLS
+
+#endif /* sys/epoll.h */
diff --git a/lib/libdss-include/include/sys/errno.h b/lib/libdss-include/include/sys/errno.h
new file mode 100644 (file)
index 0000000..339f4fc
--- /dev/null
@@ -0,0 +1 @@
+#include <errno.h>
diff --git a/lib/libdss-include/include/sys/eventfd.h b/lib/libdss-include/include/sys/eventfd.h
new file mode 100644 (file)
index 0000000..8f8a518
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EVENTFD_H
+#define        _SYS_EVENTFD_H  1
+
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/eventfd.h>
+
+/* Type for event counter.  */
+typedef uint64_t eventfd_t;
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for generic event channel.  Set initial
+   value to COUNT.  */
+extern int eventfd (unsigned int __count, int __flags) __THROW;
+
+/* Read event counter and possibly wait for events.  */
+extern int eventfd_read (int __fd, eventfd_t *__value);
+
+/* Increment event counter.  */
+extern int eventfd_write (int __fd, eventfd_t __value);
+
+__END_DECLS
+
+#endif /* sys/eventfd.h */
diff --git a/lib/libdss-include/include/sys/fanotify.h b/lib/libdss-include/include/sys/fanotify.h
new file mode 100644 (file)
index 0000000..d79ef5e
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 2010-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_FANOTIFY_H
+#define        _SYS_FANOTIFY_H 1
+
+#include <stdint.h>
+#include <linux/fanotify.h>
+
+
+__BEGIN_DECLS
+
+/* Create and initialize fanotify group.  */
+extern int fanotify_init (unsigned int __flags, unsigned int __event_f_flags)
+  __THROW;
+
+/* Add, remove, or modify an fanotify mark on a filesystem object.  */
+extern int fanotify_mark (int __fanotify_fd, unsigned int __flags,
+                         uint64_t __mask, int __dfd, const char *__pathname)
+     __THROW;
+
+__END_DECLS
+
+#endif /* sys/fanotify.h */
diff --git a/lib/libdss-include/include/sys/fcntl.h b/lib/libdss-include/include/sys/fcntl.h
new file mode 100644 (file)
index 0000000..cd30455
--- /dev/null
@@ -0,0 +1 @@
+#include <fcntl.h>
diff --git a/lib/libdss-include/include/sys/file.h b/lib/libdss-include/include/sys/file.h
new file mode 100644 (file)
index 0000000..cd2a641
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_FILE_H
+#define        _SYS_FILE_H     1
+
+#include <features.h>
+
+#ifndef        _FCNTL_H
+# include <fcntl.h>
+#endif
+
+__BEGIN_DECLS
+
+
+/* Alternate names for values for the WHENCE argument to `lseek'.
+   These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively.  */
+#ifndef L_SET
+# define L_SET 0       /* Seek from beginning of file.  */
+# define L_INCR        1       /* Seek from current position.  */
+# define L_XTND        2       /* Seek from end of file.  */
+#endif
+
+
+/* Operations for the `flock' call.  */
+#define        LOCK_SH 1       /* Shared lock.  */
+#define        LOCK_EX 2       /* Exclusive lock.  */
+#define        LOCK_UN 8       /* Unlock.  */
+#define        __LOCK_ATOMIC   16      /* Atomic update.  */
+
+/* Can be OR'd in to one of the above.  */
+#define        LOCK_NB 4       /* Don't block when locking.  */
+
+
+/* Apply or remove an advisory lock, according to OPERATION,
+   on the file FD refers to.  */
+extern int flock (int __fd, int __operation) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/file.h  */
diff --git a/lib/libdss-include/include/sys/fsuid.h b/lib/libdss-include/include/sys/fsuid.h
new file mode 100644 (file)
index 0000000..ac7f286
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_FSUID_H
+#define _SYS_FSUID_H   1
+
+#include <features.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* Change uid used for file access control to UID, without affecting
+   other privileges (such as who can send signals at the process).  */
+extern int setfsuid (__uid_t __uid) __THROW;
+
+/* Ditto for group id. */
+extern int setfsgid (__gid_t __gid) __THROW;
+
+__END_DECLS
+
+#endif /* fsuid.h */
diff --git a/lib/libdss-include/include/sys/gmon.h b/lib/libdss-include/include/sys/gmon.h
new file mode 100644 (file)
index 0000000..5b430ab
--- /dev/null
@@ -0,0 +1,201 @@
+/*-
+ * Copyright (c) 1982, 1986, 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)gmon.h      8.2 (Berkeley) 1/4/94
+ */
+
+#ifndef        _SYS_GMON_H
+#define        _SYS_GMON_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+/*
+ * See gmon_out.h for gmon.out format.
+ */
+
+/* structure emitted by "gcc -a".  This must match struct bb in
+   gcc/libgcc2.c.  It is OK for gcc to declare a longer structure as
+   long as the members below are present.  */
+struct __bb
+{
+  long                 zero_word;
+  const char           *filename;
+  long                 *counts;
+  long                 ncounts;
+  struct __bb          *next;
+  const unsigned long  *addresses;
+};
+
+extern struct __bb *__bb_head;
+
+/*
+ * histogram counters are unsigned shorts (according to the kernel).
+ */
+#define        HISTCOUNTER     unsigned short
+
+/*
+ * fraction of text space to allocate for histogram counters here, 1/2
+ */
+#define        HISTFRACTION    2
+
+/*
+ * Fraction of text space to allocate for from hash buckets.
+ * The value of HASHFRACTION is based on the minimum number of bytes
+ * of separation between two subroutine call points in the object code.
+ * Given MIN_SUBR_SEPARATION bytes of separation the value of
+ * HASHFRACTION is calculated as:
+ *
+ *     HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
+ *
+ * For example, on the VAX, the shortest two call sequence is:
+ *
+ *     calls   $0,(r0)
+ *     calls   $0,(r0)
+ *
+ * which is separated by only three bytes, thus HASHFRACTION is
+ * calculated as:
+ *
+ *     HASHFRACTION = 3 / (2 * 2 - 1) = 1
+ *
+ * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
+ * is less than three, this algorithm will not work!
+ *
+ * In practice, however, call instructions are rarely at a minimal
+ * distance.  Hence, we will define HASHFRACTION to be 2 across all
+ * architectures.  This saves a reasonable amount of space for
+ * profiling data structures without (in practice) sacrificing
+ * any granularity.
+ */
+#define        HASHFRACTION    2
+
+/*
+ * Percent of text space to allocate for tostructs.
+ * This is a heuristic; we will fail with a warning when profiling programs
+ * with a very large number of very small functions, but that's
+ * normally OK.
+ * 2 is probably still a good value for normal programs.
+ * Profiling a test case with 64000 small functions will work if
+ * you raise this value to 3 and link statically (which bloats the
+ * text size, thus raising the number of arcs expected by the heuristic).
+ */
+#define ARCDENSITY     3
+
+/*
+ * Always allocate at least this many tostructs.  This
+ * hides the inadequacy of the ARCDENSITY heuristic, at least
+ * for small programs.
+ */
+#define MINARCS                50
+
+/*
+ * The type used to represent indices into gmonparam.tos[].
+ */
+#define        ARCINDEX        u_long
+
+/*
+ * Maximum number of arcs we want to allow.
+ * Used to be max representable value of ARCINDEX minus 2, but now
+ * that ARCINDEX is a long, that's too large; we don't really want
+ * to allow a 48 gigabyte table.
+ * The old value of 1<<16 wasn't high enough in practice for large C++
+ * programs; will 1<<20 be adequate for long?  FIXME
+ */
+#define MAXARCS                (1 << 20)
+
+struct tostruct {
+       u_long          selfpc;
+       long            count;
+       ARCINDEX        link;
+};
+
+/*
+ * a raw arc, with pointers to the calling site and
+ * the called site and a count.
+ */
+struct rawarc {
+       u_long  raw_frompc;
+       u_long  raw_selfpc;
+       long    raw_count;
+};
+
+/*
+ * general rounding functions.
+ */
+#define ROUNDDOWN(x,y) (((x)/(y))*(y))
+#define ROUNDUP(x,y)   ((((x)+(y)-1)/(y))*(y))
+
+/*
+ * The profiling data structures are housed in this structure.
+ */
+struct gmonparam {
+       long int        state;
+       u_short         *kcount;
+       u_long          kcountsize;
+       ARCINDEX        *froms;
+       u_long          fromssize;
+       struct tostruct *tos;
+       u_long          tossize;
+       long            tolimit;
+       u_long          lowpc;
+       u_long          highpc;
+       u_long          textsize;
+       u_long          hashfraction;
+       long            log_hashfraction;
+};
+
+/*
+ * Possible states of profiling.
+ */
+#define        GMON_PROF_ON    0
+#define        GMON_PROF_BUSY  1
+#define        GMON_PROF_ERROR 2
+#define        GMON_PROF_OFF   3
+
+/*
+ * Sysctl definitions for extracting profiling information from the kernel.
+ */
+#define        GPROF_STATE     0       /* int: profiling enabling variable */
+#define        GPROF_COUNT     1       /* struct: profile tick count buffer */
+#define        GPROF_FROMS     2       /* struct: from location hash bucket */
+#define        GPROF_TOS       3       /* struct: destination/count structure */
+#define        GPROF_GMONPARAM 4       /* struct: profiling parameters (see above) */
+
+__BEGIN_DECLS
+
+/* Set up data structures and start profiling.  */
+extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
+extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
+
+/* Clean up profiling and write out gmon.out.  */
+extern void _mcleanup (void) __THROW;
+
+__END_DECLS
+
+#endif /* sys/gmon.h */
diff --git a/lib/libdss-include/include/sys/gmon_out.h b/lib/libdss-include/include/sys/gmon_out.h
new file mode 100644 (file)
index 0000000..b948799
--- /dev/null
@@ -0,0 +1,79 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file specifies the format of gmon.out files.  It should have
+   as few external dependencies as possible as it is going to be included
+   in many different programs.  That is, minimize the number of #include's.
+
+   A gmon.out file consists of a header (defined by gmon_hdr) followed by
+   a sequence of records.  Each record starts with a one-byte tag
+   identifying the type of records, followed by records specific data. */
+
+#ifndef _SYS_GMON_OUT_H
+#define _SYS_GMON_OUT_H        1
+
+#include <features.h>
+
+#define        GMON_MAGIC      "gmon"  /* magic cookie */
+#define GMON_VERSION   1       /* version number */
+
+/* For profiling shared object we need a new format.  */
+#define GMON_SHOBJ_VERSION     0x1ffff
+
+__BEGIN_DECLS
+
+/*
+ * Raw header as it appears on file (without padding).  This header
+ * always comes first in gmon.out and is then followed by a series
+ * records defined below.
+ */
+struct gmon_hdr
+  {
+    char cookie[4];
+    char version[4];
+    char spare[3 * 4];
+  };
+
+/* types of records in this file: */
+typedef enum
+  {
+    GMON_TAG_TIME_HIST = 0,
+    GMON_TAG_CG_ARC = 1,
+    GMON_TAG_BB_COUNT = 2
+  } GMON_Record_Tag;
+
+struct gmon_hist_hdr
+  {
+    char low_pc[sizeof (char *)];      /* base pc address of sample buffer */
+    char high_pc[sizeof (char *)];     /* max pc address of sampled buffer */
+    char hist_size[4];                 /* size of sample buffer */
+    char prof_rate[4];                 /* profiling clock rate */
+    char dimen[15];                    /* phys. dim., usually "seconds" */
+    char dimen_abbrev;                 /* usually 's' for "seconds" */
+  };
+
+struct gmon_cg_arc_record
+  {
+    char from_pc[sizeof (char *)];     /* address within caller's body */
+    char self_pc[sizeof (char *)];     /* address within callee's body */
+    char count[4];                     /* number of arc traversals */
+  };
+
+__END_DECLS
+
+#endif /* sys/gmon_out.h */
diff --git a/lib/libdss-include/include/sys/inotify.h b/lib/libdss-include/include/sys/inotify.h
new file mode 100644 (file)
index 0000000..e42dba0
--- /dev/null
@@ -0,0 +1,99 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_INOTIFY_H
+#define        _SYS_INOTIFY_H  1
+
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/inotify.h>
+
+
+/* Structure describing an inotify event.  */
+struct inotify_event
+{
+  int wd;              /* Watch descriptor.  */
+  uint32_t mask;       /* Watch mask.  */
+  uint32_t cookie;     /* Cookie to synchronize two events.  */
+  uint32_t len;                /* Length (including NULs) of name.  */
+  char name __flexarr; /* Name.  */
+};
+
+
+/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH.  */
+#define IN_ACCESS       0x00000001     /* File was accessed.  */
+#define IN_MODIFY       0x00000002     /* File was modified.  */
+#define IN_ATTRIB       0x00000004     /* Metadata changed.  */
+#define IN_CLOSE_WRITE  0x00000008     /* Writtable file was closed.  */
+#define IN_CLOSE_NOWRITE 0x00000010    /* Unwrittable file closed.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close.  */
+#define IN_OPEN                 0x00000020     /* File was opened.  */
+#define IN_MOVED_FROM   0x00000040     /* File was moved from X.  */
+#define IN_MOVED_TO      0x00000080    /* File was moved to Y.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO) /* Moves.  */
+#define IN_CREATE       0x00000100     /* Subfile was created.  */
+#define IN_DELETE       0x00000200     /* Subfile was deleted.  */
+#define IN_DELETE_SELF  0x00000400     /* Self was deleted.  */
+#define IN_MOVE_SELF    0x00000800     /* Self was moved.  */
+
+/* Events sent by the kernel.  */
+#define IN_UNMOUNT      0x00002000     /* Backing fs was unmounted.  */
+#define IN_Q_OVERFLOW   0x00004000     /* Event queued overflowed.  */
+#define IN_IGNORED      0x00008000     /* File was ignored.  */
+
+/* Helper events.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)    /* Close.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO)          /* Moves.  */
+
+/* Special flags.  */
+#define IN_ONLYDIR      0x01000000     /* Only watch the path if it is a
+                                          directory.  */
+#define IN_DONT_FOLLOW  0x02000000     /* Do not follow a sym link.  */
+#define IN_EXCL_UNLINK  0x04000000     /* Exclude events on unlinked
+                                          objects.  */
+#define IN_MASK_ADD     0x20000000     /* Add to the mask of an already
+                                          existing watch.  */
+#define IN_ISDIR        0x40000000     /* Event occurred against dir.  */
+#define IN_ONESHOT      0x80000000     /* Only send event once.  */
+
+/* All events which a program can wait on.  */
+#define IN_ALL_EVENTS   (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE  \
+                         | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM        \
+                         | IN_MOVED_TO | IN_CREATE | IN_DELETE               \
+                         | IN_DELETE_SELF | IN_MOVE_SELF)
+
+
+__BEGIN_DECLS
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init (void) __THROW;
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init1 (int __flags) __THROW;
+
+/* Add watch of object NAME to inotify instance FD.  Notify about
+   events specified by MASK.  */
+extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
+  __THROW;
+
+/* Remove the watch specified by WD from the inotify instance FD.  */
+extern int inotify_rm_watch (int __fd, int __wd) __THROW;
+
+__END_DECLS
+
+#endif /* sys/inotify.h */
diff --git a/lib/libdss-include/include/sys/ioctl.h b/lib/libdss-include/include/sys/ioctl.h
new file mode 100644 (file)
index 0000000..4bc5a1a
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_IOCTL_H
+#define        _SYS_IOCTL_H    1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get the list of `ioctl' requests and related constants.  */
+#include <bits/ioctls.h>
+
+/* Define some types used by `ioctl' requests.  */
+#include <bits/ioctl-types.h>
+
+/* On a Unix system, the system <sys/ioctl.h> probably defines some of
+   the symbols we define in <sys/ttydefaults.h> (usually with the same
+   values).  The code to generate <bits/ioctls.h> has omitted these
+   symbols to avoid the conflict, but a Unix program expects <sys/ioctl.h>
+   to define them, so we must include <sys/ttydefaults.h> here.  */
+#include <sys/ttydefaults.h>
+
+/* Perform the I/O control operation specified by REQUEST on FD.
+   One argument may follow; its presence and type depend on REQUEST.
+   Return value depends on REQUEST.  Usually -1 indicates error.  */
+extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ioctl.h */
diff --git a/lib/libdss-include/include/sys/ipc.h b/lib/libdss-include/include/sys/ipc.h
new file mode 100644 (file)
index 0000000..70bd7a6
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IPC_H
+#define _SYS_IPC_H     1
+
+#include <features.h>
+
+#if !defined __USE_MISC && !defined __USE_XOPEN && __GNUC__ >= 2
+# warning "Files using this header must be compiled with _GNU_SOURCE or _XOPEN_SOURCE"
+#endif
+
+/* Get system dependent definition of `struct ipc_perm' and more.  */
+#include <bits/ipctypes.h>
+#include <bits/ipc.h>
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __key_t_defined
+typedef __key_t key_t;
+# define __key_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* Generates key for System V style IPC.  */
+extern key_t ftok (const char *__pathname, int __proj_id) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ipc.h */
diff --git a/lib/libdss-include/include/sys/kd.h b/lib/libdss-include/include/sys/kd.h
new file mode 100644 (file)
index 0000000..bb20603
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_KD_H
+#define _SYS_KD_H      1
+
+/* Make sure the <linux/types.h> header is not loaded.  */
+#ifndef _LINUX_TYPES_H
+# define _LINUX_TYPES_H                1
+# define __undef_LINUX_TYPES_H
+#endif
+
+#include <linux/kd.h>
+
+#ifdef __undef_LINUX_TYPES_H
+# undef _LINUX_TYPES_H
+# undef __undef_LINUX_TYPES_H
+#endif
+
+#endif /* sys/kd.h */
diff --git a/lib/libdss-include/include/sys/klog.h b/lib/libdss-include/include/sys/klog.h
new file mode 100644 (file)
index 0000000..21c3950
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_KLOG_H
+
+#define        _SYS_KLOG_H     1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Control the kernel's logging facility.  This corresponds exactly to
+   the kernel's syslog system call, but that name is easily confused
+   with the user-level syslog facility, which is something completely
+   different.  */
+extern int klogctl (int __type, char *__bufp, int __len) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_KLOG_H */
diff --git a/lib/libdss-include/include/sys/mman.h b/lib/libdss-include/include/sys/mman.h
new file mode 100644 (file)
index 0000000..a7879ea
--- /dev/null
@@ -0,0 +1,151 @@
+/* Definitions for BSD-style memory management.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_MMAN_H
+#define        _SYS_MMAN_H     1
+
+#include <features.h>
+#include <bits/types.h>
+#define __need_size_t
+#include <stddef.h>
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#include <bits/mman.h>
+
+/* Return value of `mmap' in case of an error.  */
+#define MAP_FAILED     ((void *) -1)
+
+__BEGIN_DECLS
+/* Map addresses starting near ADDR and extending for LEN bytes.  from
+   OFFSET into the file FD describes according to PROT and FLAGS.  If ADDR
+   is nonzero, it is the desired mapping address.  If the MAP_FIXED bit is
+   set in FLAGS, the mapping will be at ADDR exactly (which must be
+   page-aligned); otherwise the system chooses a convenient nearby address.
+   The return value is the actual mapping address chosen or MAP_FAILED
+   for errors (in which case `errno' is set).  A successful `mmap' call
+   deallocates any previous mapping for the affected region.  */
+
+#ifndef __USE_FILE_OFFSET64
+extern void *mmap (void *__addr, size_t __len, int __prot,
+                  int __flags, int __fd, __off_t __offset) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern void * __REDIRECT_NTH (mmap,
+                             (void *__addr, size_t __len, int __prot,
+                              int __flags, int __fd, __off64_t __offset),
+                             mmap64);
+# else
+#  define mmap mmap64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern void *mmap64 (void *__addr, size_t __len, int __prot,
+                    int __flags, int __fd, __off64_t __offset) __THROW;
+#endif
+
+/* Deallocate any mapping for the region starting at ADDR and extending LEN
+   bytes.  Returns 0 if successful, -1 for errors (and sets errno).  */
+extern int munmap (void *__addr, size_t __len) __THROW;
+
+/* Change the memory protection of the region starting at ADDR and
+   extending LEN bytes to PROT.  Returns 0 if successful, -1 for errors
+   (and sets errno).  */
+extern int mprotect (void *__addr, size_t __len, int __prot) __THROW;
+
+/* Synchronize the region starting at ADDR and extending LEN bytes with the
+   file it maps.  Filesystem operations on a file being mapped are
+   unpredictable before this is done.  Flags are from the MS_* set.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int msync (void *__addr, size_t __len, int __flags);
+
+#ifdef __USE_MISC
+/* Advise the system about particular usage patterns the program follows
+   for the region starting at ADDR and extending LEN bytes.  */
+extern int madvise (void *__addr, size_t __len, int __advice) __THROW;
+#endif
+#ifdef __USE_XOPEN2K
+/* This is the POSIX name for this function.  */
+extern int posix_madvise (void *__addr, size_t __len, int __advice) __THROW;
+#endif
+
+/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to
+   be memory resident.  */
+extern int mlock (const void *__addr, size_t __len) __THROW;
+
+/* Unlock whole pages previously mapped by the range [ADDR,ADDR+LEN).  */
+extern int munlock (const void *__addr, size_t __len) __THROW;
+
+/* Cause all currently mapped pages of the process to be memory resident
+   until unlocked by a call to the `munlockall', until the process exits,
+   or until the process calls `execve'.  */
+extern int mlockall (int __flags) __THROW;
+
+/* All currently mapped pages of the process' address space become
+   unlocked.  */
+extern int munlockall (void) __THROW;
+
+#ifdef __USE_MISC
+/* mincore returns the memory residency status of the pages in the
+   current process's address space specified by [start, start + len).
+   The status is returned in a vector of bytes.  The least significant
+   bit of each byte is 1 if the referenced page is in memory, otherwise
+   it is zero.  */
+extern int mincore (void *__start, size_t __len, unsigned char *__vec)
+     __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Remap pages mapped by the range [ADDR,ADDR+OLD_LEN) to new length
+   NEW_LEN.  If MREMAP_MAYMOVE is set in FLAGS the returned address
+   may differ from ADDR.  If MREMAP_FIXED is set in FLAGS the function
+   takes another parameter which is a fixed address at which the block
+   resides after a successful call.  */
+extern void *mremap (void *__addr, size_t __old_len, size_t __new_len,
+                    int __flags, ...) __THROW;
+
+/* Remap arbitrary pages of a shared backing store within an existing
+   VMA.  */
+extern int remap_file_pages (void *__start, size_t __size, int __prot,
+                            size_t __pgoff, int __flags) __THROW;
+#endif
+
+
+/* Open shared memory segment.  */
+extern int shm_open (const char *__name, int __oflag, mode_t __mode);
+
+/* Remove shared memory segment.  */
+extern int shm_unlink (const char *__name);
+
+__END_DECLS
+
+#endif /* sys/mman.h */
diff --git a/lib/libdss-include/include/sys/mount.h b/lib/libdss-include/include/sys/mount.h
new file mode 100644 (file)
index 0000000..3b667ed
--- /dev/null
@@ -0,0 +1,150 @@
+/* Header file for mounting/unmount Linux filesystems.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is taken from /usr/include/linux/fs.h.  */
+
+#ifndef _SYS_MOUNT_H
+#define _SYS_MOUNT_H   1
+
+#include <features.h>
+#include <sys/ioctl.h>
+
+#define BLOCK_SIZE     1024
+#define BLOCK_SIZE_BITS        10
+
+
+/* These are the fs-independent mount-flags: up to 16 flags are
+   supported  */
+enum
+{
+  MS_RDONLY = 1,               /* Mount read-only.  */
+#define MS_RDONLY      MS_RDONLY
+  MS_NOSUID = 2,               /* Ignore suid and sgid bits.  */
+#define MS_NOSUID      MS_NOSUID
+  MS_NODEV = 4,                        /* Disallow access to device special files.  */
+#define MS_NODEV       MS_NODEV
+  MS_NOEXEC = 8,               /* Disallow program execution.  */
+#define MS_NOEXEC      MS_NOEXEC
+  MS_SYNCHRONOUS = 16,         /* Writes are synced at once.  */
+#define MS_SYNCHRONOUS MS_SYNCHRONOUS
+  MS_REMOUNT = 32,             /* Alter flags of a mounted FS.  */
+#define MS_REMOUNT     MS_REMOUNT
+  MS_MANDLOCK = 64,            /* Allow mandatory locks on an FS.  */
+#define MS_MANDLOCK    MS_MANDLOCK
+  MS_DIRSYNC = 128,            /* Directory modifications are synchronous.  */
+#define MS_DIRSYNC     MS_DIRSYNC
+  MS_NOATIME = 1024,           /* Do not update access times.  */
+#define MS_NOATIME     MS_NOATIME
+  MS_NODIRATIME = 2048,                /* Do not update directory access times.  */
+#define MS_NODIRATIME  MS_NODIRATIME
+  MS_BIND = 4096,              /* Bind directory at different place.  */
+#define MS_BIND                MS_BIND
+  MS_MOVE = 8192,
+#define MS_MOVE                MS_MOVE
+  MS_REC = 16384,
+#define MS_REC         MS_REC
+  MS_SILENT = 32768,
+#define MS_SILENT      MS_SILENT
+  MS_POSIXACL = 1 << 16,       /* VFS does not apply the umask.  */
+#define MS_POSIXACL    MS_POSIXACL
+  MS_UNBINDABLE = 1 << 17,     /* Change to unbindable.  */
+#define MS_UNBINDABLE  MS_UNBINDABLE
+  MS_PRIVATE = 1 << 18,                /* Change to private.  */
+#define MS_PRIVATE     MS_PRIVATE
+  MS_SLAVE = 1 << 19,          /* Change to slave.  */
+#define MS_SLAVE       MS_SLAVE
+  MS_SHARED = 1 << 20,         /* Change to shared.  */
+#define MS_SHARED      MS_SHARED
+  MS_RELATIME = 1 << 21,       /* Update atime relative to mtime/ctime.  */
+#define MS_RELATIME    MS_RELATIME
+  MS_KERNMOUNT = 1 << 22,      /* This is a kern_mount call.  */
+#define MS_KERNMOUNT   MS_KERNMOUNT
+  MS_I_VERSION =  1 << 23,     /* Update inode I_version field.  */
+#define MS_I_VERSION   MS_I_VERSION
+  MS_STRICTATIME = 1 << 24,    /* Always perform atime updates.  */
+#define MS_STRICTATIME MS_STRICTATIME
+  MS_LAZYTIME = 1 << 25,       /* Update the on-disk [acm]times lazily.  */
+#define MS_LAZYTIME    MS_LAZYTIME
+  MS_ACTIVE = 1 << 30,
+#define MS_ACTIVE      MS_ACTIVE
+  MS_NOUSER = 1 << 31
+#define MS_NOUSER      MS_NOUSER
+};
+
+/* Flags that can be altered by MS_REMOUNT  */
+#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION \
+                    |MS_LAZYTIME)
+
+
+/* Magic mount flag number. Has to be or-ed to the flag values.  */
+
+#define MS_MGC_VAL 0xc0ed0000  /* Magic flag number to indicate "new" flags */
+#define MS_MGC_MSK 0xffff0000  /* Magic flag number mask */
+
+
+/* The read-only stuff doesn't really belong here, but any other place
+   is probably as bad and I don't want to create yet another include
+   file.  */
+
+#define BLKROSET   _IO(0x12, 93) /* Set device read-only (0 = read-write).  */
+#define BLKROGET   _IO(0x12, 94) /* Get read-only status (0 = read_write).  */
+#define BLKRRPART  _IO(0x12, 95) /* Re-read partition table.  */
+#define BLKGETSIZE _IO(0x12, 96) /* Return device size.  */
+#define BLKFLSBUF  _IO(0x12, 97) /* Flush buffer cache.  */
+#define BLKRASET   _IO(0x12, 98) /* Set read ahead for block device.  */
+#define BLKRAGET   _IO(0x12, 99) /* Get current read ahead setting.  */
+#define BLKFRASET  _IO(0x12,100) /* Set filesystem read-ahead.  */
+#define BLKFRAGET  _IO(0x12,101) /* Get filesystem read-ahead.  */
+#define BLKSECTSET _IO(0x12,102) /* Set max sectors per request.  */
+#define BLKSECTGET _IO(0x12,103) /* Get max sectors per request.  */
+#define BLKSSZGET  _IO(0x12,104) /* Get block device sector size.  */
+#define BLKBSZGET  _IOR(0x12,112,size_t)
+#define BLKBSZSET  _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size.  */
+
+
+/* Possible value for FLAGS parameter of `umount2'.  */
+enum
+{
+  MNT_FORCE = 1,               /* Force unmounting.  */
+#define MNT_FORCE MNT_FORCE
+  MNT_DETACH = 2,              /* Just detach from the tree.  */
+#define MNT_DETACH MNT_DETACH
+  MNT_EXPIRE = 4,              /* Mark for expiry.  */
+#define MNT_EXPIRE MNT_EXPIRE
+  UMOUNT_NOFOLLOW = 8          /* Don't follow symlink on umount.  */
+#define UMOUNT_NOFOLLOW UMOUNT_NOFOLLOW
+};
+
+
+__BEGIN_DECLS
+
+/* Mount a filesystem.  */
+extern int mount (const char *__special_file, const char *__dir,
+                 const char *__fstype, unsigned long int __rwflag,
+                 const void *__data) __THROW;
+
+/* Unmount a filesystem.  */
+extern int umount (const char *__special_file) __THROW;
+
+/* Unmount a filesystem.  Force unmounting if FLAGS is set to MNT_FORCE.  */
+extern int umount2 (const char *__special_file, int __flags) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_MOUNT_H */
diff --git a/lib/libdss-include/include/sys/msg.h b/lib/libdss-include/include/sys/msg.h
new file mode 100644 (file)
index 0000000..4dc559f
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MSG_H
+#define _SYS_MSG_H
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct msqid_ds' and more.  */
+#include <bits/msq.h>
+
+/* Define types required by the standard.  */
+#define        __need_time_t
+#include <time.h>
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+/* The following System V style IPC functions implement a message queue
+   system.  The definition is found in XPG2.  */
+
+#ifdef __USE_GNU
+/* Template for struct to be used as argument for `msgsnd' and `msgrcv'.  */
+struct msgbuf
+  {
+    __syscall_slong_t mtype;   /* type of received/sent message */
+    char mtext[1];             /* text of the message */
+  };
+#endif
+
+
+__BEGIN_DECLS
+
+/* Message queue control operation.  */
+extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
+
+/* Get messages queue.  */
+extern int msgget (key_t __key, int __msgflg) __THROW;
+
+/* Receive message from message queue.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t msgrcv (int __msqid, void *__msgp, size_t __msgsz,
+                      long int __msgtyp, int __msgflg);
+
+/* Send message to message queue.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int msgsnd (int __msqid, const void *__msgp, size_t __msgsz,
+                  int __msgflg);
+
+__END_DECLS
+
+#endif /* sys/msg.h */
diff --git a/lib/libdss-include/include/sys/mtio.h b/lib/libdss-include/include/sys/mtio.h
new file mode 100644 (file)
index 0000000..3d175ae
--- /dev/null
@@ -0,0 +1,276 @@
+/* Structures and definitions for magnetic tape I/O control commands.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Written by H. Bergman <hennus@cybercomm.nl>.  */
+
+#ifndef _SYS_MTIO_H
+#define _SYS_MTIO_H    1
+
+/* Get necessary definitions from system and kernel headers.  */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+
+/* Structure for MTIOCTOP - magnetic tape operation command.  */
+struct mtop
+  {
+    short int mt_op;           /* Operations defined below.  */
+    int mt_count;              /* How many of them.  */
+  };
+#define _IOT_mtop /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0)
+
+/* Magnetic Tape operations [Not all operations supported by all drivers].  */
+#define MTRESET 0      /* +reset drive in case of problems.  */
+#define MTFSF  1       /* Forward space over FileMark,
+                        * position at first record of next file.  */
+#define MTBSF  2       /* Backward space FileMark (position before FM).  */
+#define MTFSR  3       /* Forward space record.  */
+#define MTBSR  4       /* Backward space record.  */
+#define MTWEOF 5       /* Write an end-of-file record (mark).  */
+#define MTREW  6       /* Rewind.  */
+#define MTOFFL 7       /* Rewind and put the drive offline (eject?).  */
+#define MTNOP  8       /* No op, set status only (read with MTIOCGET).  */
+#define MTRETEN 9      /* Retension tape.  */
+#define MTBSFM 10      /* +backward space FileMark, position at FM.  */
+#define MTFSFM  11     /* +forward space FileMark, position at FM.  */
+#define MTEOM  12      /* Goto end of recorded media (for appending files).
+                          MTEOM positions after the last FM, ready for
+                          appending another file.  */
+#define MTERASE 13     /* Erase tape -- be careful!  */
+
+#define MTRAS1  14     /* Run self test 1 (nondestructive).  */
+#define MTRAS2 15      /* Run self test 2 (destructive).  */
+#define MTRAS3  16     /* Reserved for self test 3.  */
+
+#define MTSETBLK 20    /* Set block length (SCSI).  */
+#define MTSETDENSITY 21        /* Set tape density (SCSI).  */
+#define MTSEEK 22      /* Seek to block (Tandberg, etc.).  */
+#define MTTELL 23      /* Tell block (Tandberg, etc.).  */
+#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2.
+                            Ordinary buffered operation with code 1.  */
+#define MTFSS  25      /* Space forward over setmarks.  */
+#define MTBSS  26      /* Space backward over setmarks.  */
+#define MTWSM  27      /* Write setmarks.  */
+
+#define MTLOCK  28     /* Lock the drive door.  */
+#define MTUNLOCK 29    /* Unlock the drive door.  */
+#define MTLOAD  30     /* Execute the SCSI load command.  */
+#define MTUNLOAD 31    /* Execute the SCSI unload command.  */
+#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15.  */
+#define MTSETPART 33   /* Change the active tape partition.  */
+#define MTMKPART  34   /* Format the tape with one or two partitions.  */
+
+/* structure for MTIOCGET - mag tape get status command */
+
+struct mtget
+  {
+    long int mt_type;          /* Type of magtape device.  */
+    long int mt_resid;         /* Residual count: (not sure)
+                                  number of bytes ignored, or
+                                  number of files not skipped, or
+                                  number of records not skipped.  */
+    /* The following registers are device dependent.  */
+    long int mt_dsreg;         /* Status register.  */
+    long int mt_gstat;         /* Generic (device independent) status.  */
+    long int mt_erreg;         /* Error register.  */
+    /* The next two fields are not always used.  */
+    __daddr_t mt_fileno;       /* Number of current file on tape.  */
+    __daddr_t mt_blkno;                /* Current block number.  */
+  };
+#define _IOT_mtget /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (long), 7, 0, 0, 0, 0)
+
+
+/* Constants for mt_type. Not all of these are supported, and
+   these are not all of the ones that are supported.  */
+#define MT_ISUNKNOWN           0x01
+#define MT_ISQIC02             0x02    /* Generic QIC-02 tape streamer.  */
+#define MT_ISWT5150            0x03    /* Wangtek 5150EQ, QIC-150, QIC-02.  */
+#define MT_ISARCHIVE_5945L2    0x04    /* Archive 5945L-2, QIC-24, QIC-02?. */
+#define MT_ISCMSJ500           0x05    /* CMS Jumbo 500 (QIC-02?).  */
+#define MT_ISTDC3610           0x06    /* Tandberg 6310, QIC-24.  */
+#define MT_ISARCHIVE_VP60I     0x07    /* Archive VP60i, QIC-02.  */
+#define MT_ISARCHIVE_2150L     0x08    /* Archive Viper 2150L.  */
+#define MT_ISARCHIVE_2060L     0x09    /* Archive Viper 2060L.  */
+#define MT_ISARCHIVESC499      0x0A    /* Archive SC-499 QIC-36 controller. */
+#define MT_ISQIC02_ALL_FEATURES        0x0F    /* Generic QIC-02 with all features. */
+#define MT_ISWT5099EEN24       0x11    /* Wangtek 5099-een24, 60MB, QIC-24. */
+#define MT_ISTEAC_MT2ST                0x12    /* Teac MT-2ST 155mb drive,
+                                          Teac DC-1 card (Wangtek type).  */
+#define MT_ISEVEREX_FT40A      0x32    /* Everex FT40A (QIC-40).  */
+#define MT_ISDDS1              0x51    /* DDS device without partitions.  */
+#define MT_ISDDS2              0x52    /* DDS device with partitions.  */
+#define MT_ISSCSI1             0x71    /* Generic ANSI SCSI-1 tape unit.  */
+#define MT_ISSCSI2             0x72    /* Generic ANSI SCSI-2 tape unit.  */
+
+/* QIC-40/80/3010/3020 ftape supported drives.
+   20bit vendor ID + 0x800000 (see vendors.h in ftape distribution).  */
+#define MT_ISFTAPE_UNKNOWN     0x800000 /* obsolete */
+#define MT_ISFTAPE_FLAG                0x800000
+
+struct mt_tape_info
+  {
+    long int t_type;           /* Device type id (mt_type).  */
+    char *t_name;              /* Descriptive name.  */
+  };
+
+#define MT_TAPE_INFO \
+  {                                                                          \
+       {MT_ISUNKNOWN,          "Unknown type of tape device"},               \
+       {MT_ISQIC02,            "Generic QIC-02 tape streamer"},              \
+       {MT_ISWT5150,           "Wangtek 5150, QIC-150"},                     \
+       {MT_ISARCHIVE_5945L2,   "Archive 5945L-2"},                           \
+       {MT_ISCMSJ500,          "CMS Jumbo 500"},                             \
+       {MT_ISTDC3610,          "Tandberg TDC 3610, QIC-24"},                 \
+       {MT_ISARCHIVE_VP60I,    "Archive VP60i, QIC-02"},                     \
+       {MT_ISARCHIVE_2150L,    "Archive Viper 2150L"},                       \
+       {MT_ISARCHIVE_2060L,    "Archive Viper 2060L"},                       \
+       {MT_ISARCHIVESC499,     "Archive SC-499 QIC-36 controller"},          \
+       {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"},       \
+       {MT_ISWT5099EEN24,      "Wangtek 5099-een24, 60MB"},                  \
+       {MT_ISTEAC_MT2ST,       "Teac MT-2ST 155mb data cassette drive"},     \
+       {MT_ISEVEREX_FT40A,     "Everex FT40A, QIC-40"},                      \
+       {MT_ISSCSI1,            "Generic SCSI-1 tape"},                       \
+       {MT_ISSCSI2,            "Generic SCSI-2 tape"},                       \
+       {0, NULL}                                                             \
+  }
+
+
+/* Structure for MTIOCPOS - mag tape get position command.  */
+
+struct mtpos
+  {
+    long int mt_blkno; /* Current block number.  */
+  };
+#define _IOT_mtpos /* Hurd ioctl type field.  */ \
+  _IOT_SIMPLE (long)
+
+
+/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended
+   as an interim solution for QIC-02 until DDI is fully implemented.  */
+struct mtconfiginfo
+  {
+    long int mt_type;          /* Drive type.  */
+    long int ifc_type;         /* Interface card type.  */
+    unsigned short int irqnr;  /* IRQ number to use.  */
+    unsigned short int dmanr;  /* DMA channel to use.  */
+    unsigned short int port;   /* IO port base address.  */
+
+    unsigned long int debug;   /* Debugging flags.  */
+
+    unsigned have_dens:1;
+    unsigned have_bsf:1;
+    unsigned have_fsr:1;
+    unsigned have_bsr:1;
+    unsigned have_eod:1;
+    unsigned have_seek:1;
+    unsigned have_tell:1;
+    unsigned have_ras1:1;
+    unsigned have_ras2:1;
+    unsigned have_ras3:1;
+    unsigned have_qfa:1;
+
+    unsigned pad1:5;
+    char reserved[10];
+  };
+#define _IOT_mtconfiginfo /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */
+
+
+/* Magnetic tape I/O control commands.  */
+#define        MTIOCTOP        _IOW('m', 1, struct mtop)       /* Do a mag tape op. */
+#define        MTIOCGET        _IOR('m', 2, struct mtget)      /* Get tape status.  */
+#define        MTIOCPOS        _IOR('m', 3, struct mtpos)      /* Get tape position.*/
+
+/* The next two are used by the QIC-02 driver for runtime reconfiguration.
+   See tpqic02.h for struct mtconfiginfo.  */
+#define        MTIOCGETCONFIG  _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/
+#define        MTIOCSETCONFIG  _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/
+
+/* Generic Mag Tape (device independent) status macros for examining
+   mt_gstat -- HP-UX compatible.
+   There is room for more generic status bits here, but I don't
+   know which of them are reserved. At least three or so should
+   be added to make this really useful.  */
+#define GMT_EOF(x)              ((x) & 0x80000000)
+#define GMT_BOT(x)              ((x) & 0x40000000)
+#define GMT_EOT(x)              ((x) & 0x20000000)
+#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
+#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
+#define GMT_WR_PROT(x)          ((x) & 0x04000000)
+/* #define GMT_ ?              ((x) & 0x02000000) */
+#define GMT_ONLINE(x)           ((x) & 0x01000000)
+#define GMT_D_6250(x)           ((x) & 0x00800000)
+#define GMT_D_1600(x)           ((x) & 0x00400000)
+#define GMT_D_800(x)            ((x) & 0x00200000)
+/* #define GMT_ ?              ((x) & 0x00100000) */
+/* #define GMT_ ?              ((x) & 0x00080000) */
+#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* Door open (no tape).  */
+/* #define GMT_ ?              ((x) & 0x00020000) */
+#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* Immediate report mode.*/
+/* 16 generic status bits unused.  */
+
+
+/* SCSI-tape specific definitions.  Bitfield shifts in the status  */
+#define MT_ST_BLKSIZE_SHIFT    0
+#define MT_ST_BLKSIZE_MASK     0xffffff
+#define MT_ST_DENSITY_SHIFT    24
+#define MT_ST_DENSITY_MASK     0xff000000
+
+#define MT_ST_SOFTERR_SHIFT    0
+#define MT_ST_SOFTERR_MASK     0xffff
+
+/* Bitfields for the MTSETDRVBUFFER ioctl.  */
+#define MT_ST_OPTIONS          0xf0000000
+#define MT_ST_BOOLEANS         0x10000000
+#define MT_ST_SETBOOLEANS      0x30000000
+#define MT_ST_CLEARBOOLEANS    0x40000000
+#define MT_ST_WRITE_THRESHOLD  0x20000000
+#define MT_ST_DEF_BLKSIZE      0x50000000
+#define MT_ST_DEF_OPTIONS      0x60000000
+
+#define MT_ST_BUFFER_WRITES    0x1
+#define MT_ST_ASYNC_WRITES     0x2
+#define MT_ST_READ_AHEAD       0x4
+#define MT_ST_DEBUGGING                0x8
+#define MT_ST_TWO_FM           0x10
+#define MT_ST_FAST_MTEOM       0x20
+#define MT_ST_AUTO_LOCK                0x40
+#define MT_ST_DEF_WRITES       0x80
+#define MT_ST_CAN_BSR          0x100
+#define MT_ST_NO_BLKLIMS       0x200
+#define MT_ST_CAN_PARTITIONS    0x400
+#define MT_ST_SCSI2LOGICAL      0x800
+
+/* The mode parameters to be controlled. Parameter chosen with bits 20-28.  */
+#define MT_ST_CLEAR_DEFAULT    0xfffff
+#define MT_ST_DEF_DENSITY      (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION  (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER    (MT_ST_DEF_OPTIONS | 0x300000)
+
+/* The offset for the arguments for the special HP changer load command.  */
+#define MT_ST_HPLOADER_OFFSET 10000
+
+
+/* Specify default tape device.  */
+#ifndef DEFTAPE
+# define DEFTAPE       "/dev/tape"
+#endif
+
+#endif /* mtio.h */
diff --git a/lib/libdss-include/include/sys/param.h b/lib/libdss-include/include/sys/param.h
new file mode 100644 (file)
index 0000000..7e0e331
--- /dev/null
@@ -0,0 +1,106 @@
+/* Compatibility header for old-style Unix parameters and limits.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+#define _SYS_PARAM_H    1
+
+#define __need_NULL
+#include <stddef.h>
+
+#include <sys/types.h>
+#include <limits.h>
+#include <endian.h>                     /* Define BYTE_ORDER et al.  */
+#include <signal.h>                     /* Define NSIG.  */
+
+/* This file defines some things in system-specific ways.  */
+#include <bits/param.h>
+
+
+/* BSD names for some <limits.h> values.  */
+
+#define NBBY           CHAR_BIT
+
+#if !defined NGROUPS && defined NGROUPS_MAX
+# define NGROUPS       NGROUPS_MAX
+#endif
+#if !defined MAXSYMLINKS && defined SYMLOOP_MAX
+# define MAXSYMLINKS   SYMLOOP_MAX
+#endif
+#if !defined CANBSIZ && defined MAX_CANON
+# define CANBSIZ       MAX_CANON
+#endif
+#if !defined MAXPATHLEN && defined PATH_MAX
+# define MAXPATHLEN    PATH_MAX
+#endif
+#if !defined NOFILE && defined OPEN_MAX
+# define NOFILE                OPEN_MAX
+#endif
+#if !defined MAXHOSTNAMELEN && defined HOST_NAME_MAX
+# define MAXHOSTNAMELEN        HOST_NAME_MAX
+#endif
+#ifndef NCARGS
+# ifdef ARG_MAX
+#  define NCARGS       ARG_MAX
+# else
+/* ARG_MAX is unlimited, but we define NCARGS for BSD programs that want to
+   compare against some fixed limit.  */
+# define NCARGS                INT_MAX
+# endif
+#endif
+
+
+/* Magical constants.  */
+#ifndef NOGROUP
+# define NOGROUP       65535     /* Marker for empty group set member.  */
+#endif
+#ifndef NODEV
+# define NODEV         ((dev_t) -1)    /* Non-existent device.  */
+#endif
+
+
+/* Unit of `st_blocks'.  */
+#ifndef DEV_BSIZE
+# define DEV_BSIZE     512
+#endif
+
+
+/* Bit map related macros.  */
+#define setbit(a,i)     ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define clrbit(a,i)     ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define isset(a,i)      ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define isclr(a,i)      (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+
+/* Macros for counting and rounding.  */
+#ifndef howmany
+# define howmany(x, y)  (((x) + ((y) - 1)) / (y))
+#endif
+#ifdef __GNUC__
+# define roundup(x, y)  (__builtin_constant_p (y) && powerof2 (y)             \
+                         ? (((x) + (y) - 1) & ~((y) - 1))                     \
+                         : ((((x) + ((y) - 1)) / (y)) * (y)))
+#else
+# define roundup(x, y)  ((((x) + ((y) - 1)) / (y)) * (y))
+#endif
+#define powerof2(x)     ((((x) - 1) & (x)) == 0)
+
+/* Macros for min/max.  */
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+
+
+#endif  /* sys/param.h */
diff --git a/lib/libdss-include/include/sys/pci.h b/lib/libdss-include/include/sys/pci.h
new file mode 100644 (file)
index 0000000..331f2e1
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PCI_H
+#define _SYS_PCI_H     1
+
+/* We use the constants from the kernel.  */
+#include <linux/pci.h>
+
+#endif /* sys/pci.h */
diff --git a/lib/libdss-include/include/sys/personality.h b/lib/libdss-include/include/sys/personality.h
new file mode 100644 (file)
index 0000000..ad2258f
--- /dev/null
@@ -0,0 +1,80 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Taken verbatim from Linux 2.6 (include/linux/personality.h).  */
+
+#ifndef _SYS_PERSONALITY_H
+#define _SYS_PERSONALITY_H 1
+
+#include <features.h>
+
+/* Flags for bug emulation.
+   These occupy the top three bytes.  */
+enum
+  {
+    UNAME26 = 0x0020000,
+    ADDR_NO_RANDOMIZE = 0x0040000,
+    FDPIC_FUNCPTRS = 0x0080000,
+    MMAP_PAGE_ZERO = 0x0100000,
+    ADDR_COMPAT_LAYOUT = 0x0200000,
+    READ_IMPLIES_EXEC = 0x0400000,
+    ADDR_LIMIT_32BIT = 0x0800000,
+    SHORT_INODE = 0x1000000,
+    WHOLE_SECONDS = 0x2000000,
+    STICKY_TIMEOUTS = 0x4000000,
+    ADDR_LIMIT_3GB =   0x8000000
+  };
+
+/* Personality types.
+
+   These go in the low byte.  Avoid using the top bit, it will
+   conflict with error returns.  */
+enum
+  {
+    PER_LINUX = 0x0000,
+    PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
+    PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS,
+    PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+    PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE,
+    PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+    PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
+    PER_BSD = 0x0006,
+    PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
+    PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_LINUX32 = 0x0008,
+    PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
+    PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,     /* IRIX5 32-bit */
+    PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,    /* IRIX6 new 32-bit */
+    PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,     /* IRIX6 64-bit */
+    PER_RISCOS = 0x000c,
+    PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
+    PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+    PER_OSF4 = 0x000f,
+    PER_HPUX = 0x0010,
+    PER_MASK = 0x00ff,
+  };
+
+__BEGIN_DECLS
+
+/* Set different ABIs (personalities).  */
+extern int personality (unsigned long int __persona) __THROW;
+
+__END_DECLS
+
+#endif /* sys/personality.h */
diff --git a/lib/libdss-include/include/sys/poll.h b/lib/libdss-include/include/sys/poll.h
new file mode 100644 (file)
index 0000000..e751860
--- /dev/null
@@ -0,0 +1,79 @@
+/* Compatibility definitions for System V `poll' interface.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_POLL_H
+#define        _SYS_POLL_H     1
+
+#include <features.h>
+
+/* Get the platform dependent bits of `poll'.  */
+#include <bits/poll.h>
+#ifdef __USE_GNU
+/* Get the __sigset_t definition.  */
+# include <bits/sigset.h>
+/* Get the timespec definition.  */
+# define __need_timespec
+# include <time.h>
+#endif
+
+
+/* Type used for the number of file descriptors.  */
+typedef unsigned long int nfds_t;
+
+/* Data structure describing a polling request.  */
+struct pollfd
+  {
+    int fd;                    /* File descriptor to poll.  */
+    short int events;          /* Types of events poller cares about.  */
+    short int revents;         /* Types of events that actually occurred.  */
+  };
+
+
+__BEGIN_DECLS
+
+/* Poll the file descriptors described by the NFDS structures starting at
+   FDS.  If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
+   an event to occur; if TIMEOUT is -1, block until an event occurs.
+   Returns the number of file descriptors with events, zero if timed out,
+   or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout);
+
+#ifdef __USE_GNU
+/* Like poll, but before waiting the threads signal mask is replaced
+   with that specified in the fourth parameter.  For better usability,
+   the timeout value is specified using a TIMESPEC object.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
+                 const struct timespec *__timeout,
+                 const __sigset_t *__ss);
+#endif
+
+__END_DECLS
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/poll2.h>
+#endif
+
+#endif /* sys/poll.h */
diff --git a/lib/libdss-include/include/sys/prctl.h b/lib/libdss-include/include/sys/prctl.h
new file mode 100644 (file)
index 0000000..83049d5
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PRCTL_H
+#define _SYS_PRCTL_H   1
+
+#include <features.h>
+#include <linux/prctl.h>  /*  The magic values come from here  */
+
+__BEGIN_DECLS
+
+/* Control process execution.  */
+extern int prctl (int __option, ...) __THROW;
+
+__END_DECLS
+
+#endif  /* sys/prctl.h */
diff --git a/lib/libdss-include/include/sys/procfs.h b/lib/libdss-include/include/sys/procfs.h
new file mode 100644 (file)
index 0000000..7e408c3
--- /dev/null
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H  1
+
+/* This is somewhat modelled after the file of the same name on SVR4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  It doesn't have anything to do with the /proc file
+   system, even though Linux has one.
+
+   Anyway, the whole purpose of this file is for GDB and GDB only.
+   Don't read too much into it.  Don't use it for anything other than
+   GDB unless you know what you are doing.  */
+
+#include <features.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+/* Type for a general-purpose register.  */
+typedef unsigned long elf_greg_t;
+
+/* And the whole bunch of them.  We could have used `struct
+   pt_regs' directly in the typedef, but tradition says that
+   the register set is an array, which does have some peculiar
+   semantics, so leave it that way.  */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+/* Register set for the floating-point registers.  */
+typedef struct user_fpsimd_struct elf_fpregset_t;
+
+/* Signal info.  */
+struct elf_siginfo
+  {
+    int si_signo;                      /* Signal number.  */
+    int si_code;                       /* Extra code.  */
+    int si_errno;                      /* Errno.  */
+  };
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with Linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   GDB doesn't really use excluded.  */
+
+struct elf_prstatus
+  {
+    struct elf_siginfo pr_info;                /* Info associated with signal.  */
+    short int pr_cursig;               /* Current signal.  */
+    unsigned long int pr_sigpend;      /* Set of pending signals.  */
+    unsigned long int pr_sighold;      /* Set of held signals.  */
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;           /* User time.  */
+    struct timeval pr_stime;           /* System time.  */
+    struct timeval pr_cutime;          /* Cumulative user time.  */
+    struct timeval pr_cstime;          /* Cumulative system time.  */
+    elf_gregset_t pr_reg;              /* GP registers.  */
+    int pr_fpvalid;                    /* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args.  */
+
+struct elf_prpsinfo
+  {
+    char pr_state;                     /* Numeric process state.  */
+    char pr_sname;                     /* Char for pr_state.  */
+    char pr_zomb;                      /* Zombie.  */
+    char pr_nice;                      /* Nice val.  */
+    unsigned long int pr_flag;         /* Flags.  */
+    unsigned int pr_uid;
+    unsigned int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];                 /* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
+  };
+
+/* The rest of this file provides the types for emulation of the
+   Solaris <proc_service.h> interfaces that should be implemented by
+   users of libthread_db.  */
+
+/* Addresses.  */
+typedef void *psaddr_t;
+
+/* Register sets.  Linux has different names.  */
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+
+/* We don't have any differences between processes and threads,
+   therefore have only one PID type.  */
+typedef __pid_t lwpid_t;
+
+/* Process status and info.  In the end we do provide typedefs for them.  */
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif /* sys/procfs.h */
diff --git a/lib/libdss-include/include/sys/profil.h b/lib/libdss-include/include/sys/profil.h
new file mode 100644 (file)
index 0000000..5790fe0
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PROFIL_H
+#define _PROFIL_H      1
+
+#include <features.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+/* This interface is intended to follow the sprofil() system calls as
+   described by the sprofil(2) man page of Irix v6.5, except that:
+
+       - there is no a priori limit on number of text sections
+       - pr_scale is declared as unsigned long (instead of "unsigned int")
+       - pr_size is declared as size_t (instead of "unsigned int")
+       - pr_off is declared as void * (instead of "__psunsigned_t")
+       - the overflow bin (pr_base==0, pr_scale==2) can appear anywhere
+         in the profp array
+       - PROF_FAST has no effect  */
+
+struct prof
+  {
+    void *pr_base;             /* buffer base */
+    size_t pr_size;            /* buffer size */
+    size_t pr_off;             /* pc offset */
+    unsigned long int pr_scale;        /* pc scaling (fixed-point number) */
+  };
+
+enum
+  {
+    PROF_USHORT        = 0,            /* use 16-bit counters (default) */
+    PROF_UINT  = 1 << 0,       /* use 32-bit counters */
+    PROF_FAST   = 1 << 1       /* profile faster than usual */
+  };
+
+
+__BEGIN_DECLS
+
+extern int sprofil (struct prof *__profp, int __profcnt,
+                   struct timeval *__tvp, unsigned int __flags) __THROW;
+
+__END_DECLS
+
+#endif /* profil.h */
diff --git a/lib/libdss-include/include/sys/ptrace.h b/lib/libdss-include/include/sys/ptrace.h
new file mode 100644 (file)
index 0000000..506ecce
--- /dev/null
@@ -0,0 +1,205 @@
+/* `ptrace' debugger support interface.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PTRACE_H
+#define _SYS_PTRACE_H  1
+
+#include <features.h>
+#include <bits/types.h>
+
+__BEGIN_DECLS
+
+/* Type of the REQUEST argument to `ptrace.'  */
+enum __ptrace_request
+{
+  /* Indicate that the process making this request should be traced.
+     All signals received by this process can be intercepted by its
+     parent, and its parent can use the other `ptrace' requests.  */
+  PTRACE_TRACEME = 0,
+#define PT_TRACE_ME PTRACE_TRACEME
+
+  /* Return the word in the process's text space at address ADDR.  */
+  PTRACE_PEEKTEXT = 1,
+#define PT_READ_I PTRACE_PEEKTEXT
+
+  /* Return the word in the process's data space at address ADDR.  */
+  PTRACE_PEEKDATA = 2,
+#define PT_READ_D PTRACE_PEEKDATA
+
+  /* Return the word in the process's user area at offset ADDR.  */
+  PTRACE_PEEKUSER = 3,
+#define PT_READ_U PTRACE_PEEKUSER
+
+  /* Write the word DATA into the process's text space at address ADDR.  */
+  PTRACE_POKETEXT = 4,
+#define PT_WRITE_I PTRACE_POKETEXT
+
+  /* Write the word DATA into the process's data space at address ADDR.  */
+  PTRACE_POKEDATA = 5,
+#define PT_WRITE_D PTRACE_POKEDATA
+
+  /* Write the word DATA into the process's user area at offset ADDR.  */
+  PTRACE_POKEUSER = 6,
+#define PT_WRITE_U PTRACE_POKEUSER
+
+  /* Continue the process.  */
+  PTRACE_CONT = 7,
+#define PT_CONTINUE PTRACE_CONT
+
+  /* Kill the process.  */
+  PTRACE_KILL = 8,
+#define PT_KILL PTRACE_KILL
+
+  /* Single step the process. */
+  PTRACE_SINGLESTEP = 9,
+#define PT_STEP PTRACE_SINGLESTEP
+
+  /* Attach to a process that is already running. */
+  PTRACE_ATTACH = 16,
+#define PT_ATTACH PTRACE_ATTACH
+
+  /* Detach from a process attached to with PTRACE_ATTACH.  */
+  PTRACE_DETACH = 17,
+#define PT_DETACH PTRACE_DETACH
+
+  PTRACE_GET_THREAD_AREA = 22,
+
+  /* Continue and stop at the next (return from) syscall.  */
+  PTRACE_SYSCALL = 24,
+#define PT_SYSCALL PTRACE_SYSCALL
+
+  /* Get all hardware breakpoint registers.  */
+  PTRACE_GETHBPREGS = 29,
+
+  /* Set all hardware breakpoint registers.  */
+  PTRACE_SETHBPREGS = 30,
+
+  /* Set ptrace filter options.  */
+  PTRACE_SETOPTIONS = 0x4200,
+#define PT_SETOPTIONS PTRACE_SETOPTIONS
+
+  /* Get last ptrace message.  */
+  PTRACE_GETEVENTMSG = 0x4201,
+#define PT_GETEVENTMSG PTRACE_GETEVENTMSG
+
+  /* Get siginfo for process.  */
+  PTRACE_GETSIGINFO = 0x4202,
+#define PT_GETSIGINFO PTRACE_GETSIGINFO
+
+  /* Set new siginfo for process.  */
+  PTRACE_SETSIGINFO = 0x4203,
+#define PT_SETSIGINFO PTRACE_SETSIGINFO
+
+  /* Get register content.  */
+  PTRACE_GETREGSET = 0x4204,
+#define PTRACE_GETREGSET PTRACE_GETREGSET
+
+  /* Set register content.  */
+  PTRACE_SETREGSET = 0x4205,
+#define PTRACE_SETREGSET PTRACE_SETREGSET
+
+  /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect
+     signal or group stop state.  */
+  PTRACE_SEIZE = 0x4206,
+#define PTRACE_SEIZE PTRACE_SEIZE
+
+  /* Trap seized trace.  */
+  PTRACE_INTERRUPT = 0x4207,
+#define PTRACE_INTERRUPT PTRACE_INTERRUPT
+
+  /* Wait for next group event.  */
+  PTRACE_LISTEN = 0x4208,
+#define PTRACE_LISTEN PTRACE_LISTEN
+
+  PTRACE_PEEKSIGINFO = 0x4209,
+#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO
+
+  PTRACE_GETSIGMASK = 0x420a,
+#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK
+
+  PTRACE_SETSIGMASK = 0x420b,
+#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK
+
+  PTRACE_SECCOMP_GET_FILTER = 0x420c
+#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER
+};
+
+
+/* Flag for PTRACE_LISTEN.  */
+enum __ptrace_flags
+{
+  PTRACE_SEIZE_DEVEL = 0x80000000
+};
+
+/* Options set using PTRACE_SETOPTIONS.  */
+enum __ptrace_setoptions
+{
+  PTRACE_O_TRACESYSGOOD        = 0x00000001,
+  PTRACE_O_TRACEFORK   = 0x00000002,
+  PTRACE_O_TRACEVFORK   = 0x00000004,
+  PTRACE_O_TRACECLONE  = 0x00000008,
+  PTRACE_O_TRACEEXEC   = 0x00000010,
+  PTRACE_O_TRACEVFORKDONE = 0x00000020,
+  PTRACE_O_TRACEEXIT   = 0x00000040,
+  PTRACE_O_TRACESECCOMP = 0x00000080,
+  PTRACE_O_EXITKILL    = 0x00100000,
+  PTRACE_O_SUSPEND_SECCOMP     = 0x00200000,
+  PTRACE_O_MASK                = 0x003000ff
+};
+
+/* Wait extended result codes for the above trace options.  */
+enum __ptrace_eventcodes
+{
+  PTRACE_EVENT_FORK    = 1,
+  PTRACE_EVENT_VFORK   = 2,
+  PTRACE_EVENT_CLONE   = 3,
+  PTRACE_EVENT_EXEC    = 4,
+  PTRACE_EVENT_VFORK_DONE = 5,
+  PTRACE_EVENT_EXIT    = 6,
+  PTRACE_EVENT_SECCOMP  = 7
+};
+
+/* Arguments for PTRACE_PEEKSIGINFO.  */
+struct __ptrace_peeksiginfo_args
+{
+  __uint64_t off;      /* From which siginfo to start.  */
+  __uint32_t flags;    /* Flags for peeksiginfo.  */
+  __int32_t nr;                /* How many siginfos to take.  */
+};
+
+enum __ptrace_peeksiginfo_flags
+{
+  /* Read signals from a shared (process wide) queue.  */
+  PTRACE_PEEKSIGINFO_SHARED = (1 << 0)
+};
+
+/* Perform process tracing functions.  REQUEST is one of the values
+   above, and determines the action to be taken.
+   For all requests except PTRACE_TRACEME, PID specifies the process to be
+   traced.
+
+   PID and the other arguments described above for the various requests should
+   appear (those that are used for the particular request) as:
+     pid_t PID, void *ADDR, int DATA, void *ADDR2
+   after REQUEST.  */
+extern long int ptrace (enum __ptrace_request __request, ...) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_PTRACE_H */
diff --git a/lib/libdss-include/include/sys/queue.h b/lib/libdss-include/include/sys/queue.h
new file mode 100644 (file)
index 0000000..daf4553
--- /dev/null
@@ -0,0 +1,574 @@
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)queue.h     8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef        _SYS_QUEUE_H_
+#define        _SYS_QUEUE_H_
+
+/*
+ * This file defines five types of data structures: singly-linked lists,
+ * lists, simple queues, tail queues, and circular queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The
+ * elements are singly linked for minimum space and pointer manipulation
+ * overhead at the expense of O(n) removal for arbitrary elements. New
+ * elements can be added to the list after an existing element or at the
+ * head of the list.  Elements being removed from the head of the list
+ * should use the explicit macro for this purpose for optimum
+ * efficiency. A singly-linked list may only be traversed in the forward
+ * direction.  Singly-linked lists are ideal for applications with large
+ * datasets and few or no removals or for implementing a LIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A simple queue is headed by a pair of pointers, one the head of the
+ * list and the other to the tail of the list. The elements are singly
+ * linked to save space, so elements can only be removed from the
+ * head of the list. New elements can be added to the list after
+ * an existing element, at the head of the list, or at the end of the
+ * list. A simple queue may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * A circle queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the list.
+ * A circle queue may be traversed in either direction, but has a more
+ * complex end of list detection.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+/*
+ * List definitions.
+ */
+#define        LIST_HEAD(name, type)                                           \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define        LIST_HEAD_INITIALIZER(head)                                     \
+       { NULL }
+
+#define        LIST_ENTRY(type)                                                \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+#define        LIST_INIT(head) do {                                            \
+       (head)->lh_first = NULL;                                        \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_AFTER(listelm, elm, field) do {                     \
+       if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \
+               (listelm)->field.le_next->field.le_prev =               \
+                   &(elm)->field.le_next;                              \
+       (listelm)->field.le_next = (elm);                               \
+       (elm)->field.le_prev = &(listelm)->field.le_next;               \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       (elm)->field.le_next = (listelm);                               \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &(elm)->field.le_next;               \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_HEAD(head, elm, field) do {                         \
+       if (((elm)->field.le_next = (head)->lh_first) != NULL)          \
+               (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+       (head)->lh_first = (elm);                                       \
+       (elm)->field.le_prev = &(head)->lh_first;                       \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_REMOVE(elm, field) do {                                    \
+       if ((elm)->field.le_next != NULL)                               \
+               (elm)->field.le_next->field.le_prev =                   \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = (elm)->field.le_next;                   \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_FOREACH(var, head, field)                                  \
+       for ((var) = ((head)->lh_first);                                \
+               (var);                                                  \
+               (var) = ((var)->field.le_next))
+
+/*
+ * List access methods.
+ */
+#define        LIST_EMPTY(head)                ((head)->lh_first == NULL)
+#define        LIST_FIRST(head)                ((head)->lh_first)
+#define        LIST_NEXT(elm, field)           ((elm)->field.le_next)
+
+
+/*
+ * Singly-linked List definitions.
+ */
+#define        SLIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *slh_first; /* first element */                     \
+}
+
+#define        SLIST_HEAD_INITIALIZER(head)                                    \
+       { NULL }
+
+#define        SLIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *sle_next;  /* next element */                      \
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#define        SLIST_INIT(head) do {                                           \
+       (head)->slh_first = NULL;                                       \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
+       (elm)->field.sle_next = (slistelm)->field.sle_next;             \
+       (slistelm)->field.sle_next = (elm);                             \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
+       (elm)->field.sle_next = (head)->slh_first;                      \
+       (head)->slh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_REMOVE_HEAD(head, field) do {                             \
+       (head)->slh_first = (head)->slh_first->field.sle_next;          \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_REMOVE(head, elm, type, field) do {                       \
+       if ((head)->slh_first == (elm)) {                               \
+               SLIST_REMOVE_HEAD((head), field);                       \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = (head)->slh_first;                \
+               while(curelm->field.sle_next != (elm))                  \
+                       curelm = curelm->field.sle_next;                \
+               curelm->field.sle_next =                                \
+                   curelm->field.sle_next->field.sle_next;             \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_FOREACH(var, head, field)                                 \
+       for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
+
+/*
+ * Singly-linked List access methods.
+ */
+#define        SLIST_EMPTY(head)       ((head)->slh_first == NULL)
+#define        SLIST_FIRST(head)       ((head)->slh_first)
+#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define        STAILQ_HEAD(name, type)                                 \
+struct name {                                                          \
+       struct type *stqh_first;        /* first element */                     \
+       struct type **stqh_last;        /* addr of last next element */         \
+}
+
+#define        STAILQ_HEAD_INITIALIZER(head)                                   \
+       { NULL, &(head).stqh_first }
+
+#define        STAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *stqe_next; /* next element */                      \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define        STAILQ_INIT(head) do {                                          \
+       (head)->stqh_first = NULL;                                      \
+       (head)->stqh_last = &(head)->stqh_first;                                \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_HEAD(head, elm, field) do {                       \
+       if (((elm)->field.stqe_next = (head)->stqh_first) == NULL)      \
+               (head)->stqh_last = &(elm)->field.stqe_next;            \
+       (head)->stqh_first = (elm);                                     \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_TAIL(head, elm, field) do {                       \
+       (elm)->field.stqe_next = NULL;                                  \
+       *(head)->stqh_last = (elm);                                     \
+       (head)->stqh_last = &(elm)->field.stqe_next;                    \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_AFTER(head, listelm, elm, field) do {             \
+       if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
+               (head)->stqh_last = &(elm)->field.stqe_next;            \
+       (listelm)->field.stqe_next = (elm);                             \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_REMOVE_HEAD(head, field) do {                            \
+       if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \
+               (head)->stqh_last = &(head)->stqh_first;                        \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_REMOVE(head, elm, type, field) do {                      \
+       if ((head)->stqh_first == (elm)) {                              \
+               STAILQ_REMOVE_HEAD((head), field);                      \
+       } else {                                                        \
+               struct type *curelm = (head)->stqh_first;               \
+               while (curelm->field.stqe_next != (elm))                        \
+                       curelm = curelm->field.stqe_next;               \
+               if ((curelm->field.stqe_next =                          \
+                       curelm->field.stqe_next->field.stqe_next) == NULL) \
+                           (head)->stqh_last = &(curelm)->field.stqe_next; \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_FOREACH(var, head, field)                                \
+       for ((var) = ((head)->stqh_first);                              \
+               (var);                                                  \
+               (var) = ((var)->field.stqe_next))
+
+#define        STAILQ_CONCAT(head1, head2) do {                                \
+       if (!STAILQ_EMPTY((head2))) {                                   \
+               *(head1)->stqh_last = (head2)->stqh_first;              \
+               (head1)->stqh_last = (head2)->stqh_last;                \
+               STAILQ_INIT((head2));                                   \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Singly-linked Tail queue access methods.
+ */
+#define        STAILQ_EMPTY(head)      ((head)->stqh_first == NULL)
+#define        STAILQ_FIRST(head)      ((head)->stqh_first)
+#define        STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+
+/*
+ * Simple queue definitions.
+ */
+#define        SIMPLEQ_HEAD(name, type)                                        \
+struct name {                                                          \
+       struct type *sqh_first; /* first element */                     \
+       struct type **sqh_last; /* addr of last next element */         \
+}
+
+#define        SIMPLEQ_HEAD_INITIALIZER(head)                                  \
+       { NULL, &(head).sqh_first }
+
+#define        SIMPLEQ_ENTRY(type)                                             \
+struct {                                                               \
+       struct type *sqe_next;  /* next element */                      \
+}
+
+/*
+ * Simple queue functions.
+ */
+#define        SIMPLEQ_INIT(head) do {                                         \
+       (head)->sqh_first = NULL;                                       \
+       (head)->sqh_last = &(head)->sqh_first;                          \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_HEAD(head, elm, field) do {                      \
+       if (((elm)->field.sqe_next = (head)->sqh_first) == NULL)        \
+               (head)->sqh_last = &(elm)->field.sqe_next;              \
+       (head)->sqh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_TAIL(head, elm, field) do {                      \
+       (elm)->field.sqe_next = NULL;                                   \
+       *(head)->sqh_last = (elm);                                      \
+       (head)->sqh_last = &(elm)->field.sqe_next;                      \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {            \
+       if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
+               (head)->sqh_last = &(elm)->field.sqe_next;              \
+       (listelm)->field.sqe_next = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_REMOVE_HEAD(head, field) do {                           \
+       if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+               (head)->sqh_last = &(head)->sqh_first;                  \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_REMOVE(head, elm, type, field) do {                     \
+       if ((head)->sqh_first == (elm)) {                               \
+               SIMPLEQ_REMOVE_HEAD((head), field);                     \
+       } else {                                                        \
+               struct type *curelm = (head)->sqh_first;                \
+               while (curelm->field.sqe_next != (elm))                 \
+                       curelm = curelm->field.sqe_next;                \
+               if ((curelm->field.sqe_next =                           \
+                       curelm->field.sqe_next->field.sqe_next) == NULL) \
+                           (head)->sqh_last = &(curelm)->field.sqe_next; \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_FOREACH(var, head, field)                               \
+       for ((var) = ((head)->sqh_first);                               \
+               (var);                                                  \
+               (var) = ((var)->field.sqe_next))
+
+/*
+ * Simple queue access methods.
+ */
+#define        SIMPLEQ_EMPTY(head)             ((head)->sqh_first == NULL)
+#define        SIMPLEQ_FIRST(head)             ((head)->sqh_first)
+#define        SIMPLEQ_NEXT(elm, field)        ((elm)->field.sqe_next)
+
+
+/*
+ * Tail queue definitions.
+ */
+#define        _TAILQ_HEAD(name, type, qual)                                   \
+struct name {                                                          \
+       qual type *tqh_first;           /* first element */             \
+       qual type *qual *tqh_last;      /* addr of last next element */ \
+}
+#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,)
+
+#define        TAILQ_HEAD_INITIALIZER(head)                                    \
+       { NULL, &(head).tqh_first }
+
+#define        _TAILQ_ENTRY(type, qual)                                        \
+struct {                                                               \
+       qual type *tqe_next;            /* next element */              \
+       qual type *qual *tqe_prev;      /* address of previous next element */\
+}
+#define TAILQ_ENTRY(type)      _TAILQ_ENTRY(struct type,)
+
+/*
+ * Tail queue functions.
+ */
+#define        TAILQ_INIT(head) do {                                           \
+       (head)->tqh_first = NULL;                                       \
+       (head)->tqh_last = &(head)->tqh_first;                          \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_HEAD(head, elm, field) do {                        \
+       if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        \
+               (head)->tqh_first->field.tqe_prev =                     \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (head)->tqh_first = (elm);                                      \
+       (elm)->field.tqe_prev = &(head)->tqh_first;                     \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_TAIL(head, elm, field) do {                        \
+       (elm)->field.tqe_next = NULL;                                   \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &(elm)->field.tqe_next;                      \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_AFTER(head, listelm, elm, field) do {              \
+       if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (listelm)->field.tqe_next = (elm);                              \
+       (elm)->field.tqe_prev = &(listelm)->field.tqe_next;             \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       (elm)->field.tqe_next = (listelm);                              \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &(elm)->field.tqe_next;             \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_REMOVE(head, elm, field) do {                             \
+       if (((elm)->field.tqe_next) != NULL)                            \
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   (elm)->field.tqe_prev;                              \
+       else                                                            \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+       *(elm)->field.tqe_prev = (elm)->field.tqe_next;                 \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_FOREACH(var, head, field)                                 \
+       for ((var) = ((head)->tqh_first);                               \
+               (var);                                                  \
+               (var) = ((var)->field.tqe_next))
+
+#define        TAILQ_FOREACH_REVERSE(var, head, headname, field)               \
+       for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));    \
+               (var);                                                  \
+               (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
+
+#define        TAILQ_CONCAT(head1, head2, field) do {                          \
+       if (!TAILQ_EMPTY(head2)) {                                      \
+               *(head1)->tqh_last = (head2)->tqh_first;                \
+               (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+               (head1)->tqh_last = (head2)->tqh_last;                  \
+               TAILQ_INIT((head2));                                    \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Tail queue access methods.
+ */
+#define        TAILQ_EMPTY(head)               ((head)->tqh_first == NULL)
+#define        TAILQ_FIRST(head)               ((head)->tqh_first)
+#define        TAILQ_NEXT(elm, field)          ((elm)->field.tqe_next)
+
+#define        TAILQ_LAST(head, headname) \
+       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+#define        TAILQ_PREV(elm, headname, field) \
+       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+
+/*
+ * Circular queue definitions.
+ */
+#define        CIRCLEQ_HEAD(name, type)                                        \
+struct name {                                                          \
+       struct type *cqh_first;         /* first element */             \
+       struct type *cqh_last;          /* last element */              \
+}
+
+#define        CIRCLEQ_HEAD_INITIALIZER(head)                                  \
+       { (void *)&head, (void *)&head }
+
+#define        CIRCLEQ_ENTRY(type)                                             \
+struct {                                                               \
+       struct type *cqe_next;          /* next element */              \
+       struct type *cqe_prev;          /* previous element */          \
+}
+
+/*
+ * Circular queue functions.
+ */
+#define        CIRCLEQ_INIT(head) do {                                         \
+       (head)->cqh_first = (void *)(head);                             \
+       (head)->cqh_last = (void *)(head);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {            \
+       (elm)->field.cqe_next = (listelm)->field.cqe_next;              \
+       (elm)->field.cqe_prev = (listelm);                              \
+       if ((listelm)->field.cqe_next == (void *)(head))                \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (listelm)->field.cqe_next->field.cqe_prev = (elm);      \
+       (listelm)->field.cqe_next = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {           \
+       (elm)->field.cqe_next = (listelm);                              \
+       (elm)->field.cqe_prev = (listelm)->field.cqe_prev;              \
+       if ((listelm)->field.cqe_prev == (void *)(head))                \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (listelm)->field.cqe_prev->field.cqe_next = (elm);      \
+       (listelm)->field.cqe_prev = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_HEAD(head, elm, field) do {                      \
+       (elm)->field.cqe_next = (head)->cqh_first;                      \
+       (elm)->field.cqe_prev = (void *)(head);                         \
+       if ((head)->cqh_last == (void *)(head))                         \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (head)->cqh_first->field.cqe_prev = (elm);              \
+       (head)->cqh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_TAIL(head, elm, field) do {                      \
+       (elm)->field.cqe_next = (void *)(head);                         \
+       (elm)->field.cqe_prev = (head)->cqh_last;                       \
+       if ((head)->cqh_first == (void *)(head))                        \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (head)->cqh_last->field.cqe_next = (elm);               \
+       (head)->cqh_last = (elm);                                       \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_REMOVE(head, elm, field) do {                           \
+       if ((elm)->field.cqe_next == (void *)(head))                    \
+               (head)->cqh_last = (elm)->field.cqe_prev;               \
+       else                                                            \
+               (elm)->field.cqe_next->field.cqe_prev =                 \
+                   (elm)->field.cqe_prev;                              \
+       if ((elm)->field.cqe_prev == (void *)(head))                    \
+               (head)->cqh_first = (elm)->field.cqe_next;              \
+       else                                                            \
+               (elm)->field.cqe_prev->field.cqe_next =                 \
+                   (elm)->field.cqe_next;                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_FOREACH(var, head, field)                               \
+       for ((var) = ((head)->cqh_first);                               \
+               (var) != (const void *)(head);                          \
+               (var) = ((var)->field.cqe_next))
+
+#define        CIRCLEQ_FOREACH_REVERSE(var, head, field)                       \
+       for ((var) = ((head)->cqh_last);                                \
+               (var) != (const void *)(head);                          \
+               (var) = ((var)->field.cqe_prev))
+
+/*
+ * Circular queue access methods.
+ */
+#define        CIRCLEQ_EMPTY(head)             ((head)->cqh_first == (void *)(head))
+#define        CIRCLEQ_FIRST(head)             ((head)->cqh_first)
+#define        CIRCLEQ_LAST(head)              ((head)->cqh_last)
+#define        CIRCLEQ_NEXT(elm, field)        ((elm)->field.cqe_next)
+#define        CIRCLEQ_PREV(elm, field)        ((elm)->field.cqe_prev)
+
+#define CIRCLEQ_LOOP_NEXT(head, elm, field)                            \
+       (((elm)->field.cqe_next == (void *)(head))                      \
+           ? ((head)->cqh_first)                                       \
+           : (elm->field.cqe_next))
+#define CIRCLEQ_LOOP_PREV(head, elm, field)                            \
+       (((elm)->field.cqe_prev == (void *)(head))                      \
+           ? ((head)->cqh_last)                                        \
+           : (elm->field.cqe_prev))
+
+#endif /* sys/queue.h */
diff --git a/lib/libdss-include/include/sys/quota.h b/lib/libdss-include/include/sys/quota.h
new file mode 100644 (file)
index 0000000..5aa0ec0
--- /dev/null
@@ -0,0 +1,225 @@
+/* This just represents the non-kernel parts of <linux/quota.h>.
+ *
+ * here's the corresponding copyright:
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Robert Elz at The University of Melbourne.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_QUOTA_H
+#define _SYS_QUOTA_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+/*
+ * Select between different incompatible quota versions.
+ * Default to the version used by Linux kernel version 2.4.22
+ * or later.  */
+#ifndef _LINUX_QUOTA_VERSION
+# define _LINUX_QUOTA_VERSION 2
+#endif
+
+/*
+ * Convert diskblocks to blocks and the other way around.
+ * currently only to fool the BSD source. :-)
+ */
+#define dbtob(num) ((num) << 10)
+#define btodb(num) ((num) >> 10)
+
+/*
+ * Convert count of filesystem blocks to diskquota blocks, meant
+ * for filesystems where i_blksize != BLOCK_SIZE
+ */
+#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
+
+/*
+ * Definitions for disk quotas imposed on the average user
+ * (big brother finally hits Linux).
+ *
+ * The following constants define the amount of time given a user
+ * before the soft limits are treated as hard limits (usually resulting
+ * in an allocation failure). The timer is started when the user crosses
+ * their soft limit, it is reset when they go below their soft limit.
+ */
+#define MAX_IQ_TIME  604800    /* (7*24*60*60) 1 week */
+#define MAX_DQ_TIME  604800    /* (7*24*60*60) 1 week */
+
+#define MAXQUOTAS 2
+#define USRQUOTA  0            /* element used for user quotas */
+#define GRPQUOTA  1            /* element used for group quotas */
+
+/*
+ * Definitions for the default names of the quotas files.
+ */
+#define INITQFNAMES { \
+   "user",      /* USRQUOTA */ \
+   "group",   /* GRPQUOTA */ \
+   "undefined", \
+};
+
+#define QUOTAFILENAME "quota"
+#define QUOTAGROUP "staff"
+
+#define NR_DQHASH 43          /* Just an arbitrary number any suggestions ? */
+#define NR_DQUOTS 256         /* Number of quotas active at one time */
+
+/*
+ * Command definitions for the 'quotactl' system call.
+ * The commands are broken into a main command defined below
+ * and a subcommand that is used to convey the type of
+ * quota that is being manipulated (see above).
+ */
+#define SUBCMDMASK  0x00ff
+#define SUBCMDSHIFT 8
+#define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
+
+#if _LINUX_QUOTA_VERSION < 2
+# define Q_QUOTAON  0x0100     /* enable quotas */
+# define Q_QUOTAOFF 0x0200     /* disable quotas */
+# define Q_GETQUOTA 0x0300     /* get limits and usage */
+# define Q_SETQUOTA 0x0400     /* set limits and usage */
+# define Q_SETUSE   0x0500     /* set usage */
+# define Q_SYNC     0x0600     /* sync disk copy of a filesystems quotas */
+# define Q_SETQLIM  0x0700     /* set limits */
+# define Q_GETSTATS 0x0800     /* get collected stats */
+# define Q_RSQUASH  0x1000     /* set root_squash option */
+#else
+# define Q_SYNC     0x800001   /* sync disk copy of a filesystems quotas */
+# define Q_QUOTAON  0x800002   /* turn quotas on */
+# define Q_QUOTAOFF 0x800003   /* turn quotas off */
+# define Q_GETFMT   0x800004   /* get quota format used on given filesystem */
+# define Q_GETINFO  0x800005   /* get information about quota files */
+# define Q_SETINFO  0x800006   /* set information about quota files */
+# define Q_GETQUOTA 0x800007   /* get user quota structure */
+# define Q_SETQUOTA 0x800008   /* set user quota structure */
+#endif
+
+/*
+ * The following structure defines the format of the disk quota file
+ * (as it appears on disk) - the file is an array of these structures
+ * indexed by user or group number.
+ */
+#if _LINUX_QUOTA_VERSION < 2
+struct dqblk
+  {
+    u_int32_t dqb_bhardlimit;  /* absolute limit on disk blks alloc */
+    u_int32_t dqb_bsoftlimit;  /* preferred limit on disk blks */
+    u_int32_t dqb_curblocks;   /* current block count */
+    u_int32_t dqb_ihardlimit;  /* maximum # allocated inodes */
+    u_int32_t dqb_isoftlimit;  /* preferred inode limit */
+    u_int32_t dqb_curinodes;   /* current # allocated inodes */
+    time_t dqb_btime;          /* time limit for excessive disk use */
+    time_t dqb_itime;          /* time limit for excessive files */
+  };
+#else
+
+/* Flags that indicate which fields in dqblk structure are valid.  */
+#define QIF_BLIMITS    1
+#define QIF_SPACE      2
+#define QIF_ILIMITS    4
+#define QIF_INODES     8
+#define QIF_BTIME      16
+#define QIF_ITIME      32
+#define QIF_LIMITS     (QIF_BLIMITS | QIF_ILIMITS)
+#define QIF_USAGE      (QIF_SPACE | QIF_INODES)
+#define QIF_TIMES      (QIF_BTIME | QIF_ITIME)
+#define QIF_ALL                (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
+
+struct dqblk
+  {
+    u_int64_t dqb_bhardlimit;  /* absolute limit on disk quota blocks alloc */
+    u_int64_t dqb_bsoftlimit;  /* preferred limit on disk quota blocks */
+    u_int64_t dqb_curspace;    /* current quota block count */
+    u_int64_t dqb_ihardlimit;  /* maximum # allocated inodes */
+    u_int64_t dqb_isoftlimit;  /* preferred inode limit */
+    u_int64_t dqb_curinodes;   /* current # allocated inodes */
+    u_int64_t dqb_btime;       /* time limit for excessive disk use */
+    u_int64_t dqb_itime;       /* time limit for excessive files */
+    u_int32_t dqb_valid;       /* bitmask of QIF_* constants */
+  };
+#endif
+
+/*
+ * Shorthand notation.
+ */
+#define        dq_bhardlimit   dq_dqb.dqb_bhardlimit
+#define        dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
+#if _LINUX_QUOTA_VERSION < 2
+# define dq_curblocks  dq_dqb.dqb_curblocks
+#else
+# define dq_curspace   dq_dqb.dqb_curspace
+# define dq_valid      dq_dqb.dqb_valid
+#endif
+#define        dq_ihardlimit   dq_dqb.dqb_ihardlimit
+#define        dq_isoftlimit   dq_dqb.dqb_isoftlimit
+#define        dq_curinodes    dq_dqb.dqb_curinodes
+#define        dq_btime        dq_dqb.dqb_btime
+#define        dq_itime        dq_dqb.dqb_itime
+
+#define dqoff(UID)      ((loff_t)((UID) * sizeof (struct dqblk)))
+
+#if _LINUX_QUOTA_VERSION < 2
+struct dqstats
+  {
+    u_int32_t lookups;
+    u_int32_t drops;
+    u_int32_t reads;
+    u_int32_t writes;
+    u_int32_t cache_hits;
+    u_int32_t pages_allocated;
+    u_int32_t allocated_dquots;
+    u_int32_t free_dquots;
+    u_int32_t syncs;
+  };
+#else
+
+/* Flags that indicate which fields in dqinfo structure are valid.  */
+# define IIF_BGRACE    1
+# define IIF_IGRACE    2
+# define IIF_FLAGS     4
+# define IIF_ALL       (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
+
+struct dqinfo
+  {
+    u_int64_t dqi_bgrace;
+    u_int64_t dqi_igrace;
+    u_int32_t dqi_flags;
+    u_int32_t dqi_valid;
+  };
+#endif
+
+__BEGIN_DECLS
+
+extern int quotactl (int __cmd, const char *__special, int __id,
+                    caddr_t __addr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/quota.h */
diff --git a/lib/libdss-include/include/sys/raw.h b/lib/libdss-include/include/sys/raw.h
new file mode 100644 (file)
index 0000000..bd7266d
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_RAW_H
+#define _SYS_RAW_H     1
+
+#include <stdint.h>
+#include <sys/ioctl.h>
+
+/* The major device number for raw devices.  */
+#define RAW_MAJOR      162
+
+/* `ioctl' commands for raw devices.  */
+#define RAW_SETBIND     _IO(0xac, 0)
+#define RAW_GETBIND     _IO(0xac, 1)
+
+struct raw_config_request
+{
+  int raw_minor;
+  uint64_t block_major;
+  uint64_t block_minor;
+};
+
+#endif /* sys/raw.h */
diff --git a/lib/libdss-include/include/sys/reboot.h b/lib/libdss-include/include/sys/reboot.h
new file mode 100644 (file)
index 0000000..df1076f
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file should define RB_* macros to be used as flag
+   bits in the argument to the `reboot' system call.  */
+
+#ifndef _SYS_REBOOT_H
+#define _SYS_REBOOT_H  1
+
+#include <features.h>
+
+/* Perform a hard reset now.  */
+#define RB_AUTOBOOT    0x01234567
+
+/* Halt the system.  */
+#define RB_HALT_SYSTEM 0xcdef0123
+
+/* Enable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_ENABLE_CAD  0x89abcdef
+
+/* Disable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_DISABLE_CAD 0
+
+/* Stop system and switch power off if possible.  */
+#define RB_POWER_OFF   0x4321fedc
+
+/* Suspend system using software suspend.  */
+#define RB_SW_SUSPEND  0xd000fce2
+
+/* Reboot system into new kernel.  */
+#define RB_KEXEC       0x45584543
+
+__BEGIN_DECLS
+
+/* Reboot or halt the system.  */
+extern int reboot (int __howto) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_REBOOT_H */
diff --git a/lib/libdss-include/include/sys/resource.h b/lib/libdss-include/include/sys/resource.h
new file mode 100644 (file)
index 0000000..dfef7ac
--- /dev/null
@@ -0,0 +1,102 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_RESOURCE_H
+#define        _SYS_RESOURCE_H 1
+
+#include <features.h>
+
+/* Get the system-dependent definitions of structures and bit values.  */
+#include <bits/resource.h>
+
+#ifndef __id_t_defined
+typedef __id_t id_t;
+# define __id_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* The X/Open standard defines that all the functions below must use
+   `int' as the type for the first argument.  When we are compiling with
+   GNU extensions we change this slightly to provide better error
+   checking.  */
+#if defined __USE_GNU && !defined __cplusplus
+typedef enum __rlimit_resource __rlimit_resource_t;
+typedef enum __rusage_who __rusage_who_t;
+typedef enum __priority_which __priority_which_t;
+#else
+typedef int __rlimit_resource_t;
+typedef int __rusage_who_t;
+typedef int __priority_which_t;
+#endif
+
+/* Put the soft and hard limits for RESOURCE in *RLIMITS.
+   Returns 0 if successful, -1 if not (and sets errno).  */
+#ifndef __USE_FILE_OFFSET64
+extern int getrlimit (__rlimit_resource_t __resource,
+                     struct rlimit *__rlimits) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (getrlimit, (__rlimit_resource_t __resource,
+                                      struct rlimit *__rlimits), getrlimit64);
+# else
+#  define getrlimit getrlimit64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int getrlimit64 (__rlimit_resource_t __resource,
+                       struct rlimit64 *__rlimits) __THROW;
+#endif
+
+/* Set the soft and hard limits for RESOURCE to *RLIMITS.
+   Only the super-user can increase hard limits.
+   Return 0 if successful, -1 if not (and sets errno).  */
+#ifndef __USE_FILE_OFFSET64
+extern int setrlimit (__rlimit_resource_t __resource,
+                     const struct rlimit *__rlimits) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (setrlimit, (__rlimit_resource_t __resource,
+                                      const struct rlimit *__rlimits),
+                          setrlimit64);
+# else
+#  define setrlimit setrlimit64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int setrlimit64 (__rlimit_resource_t __resource,
+                       const struct rlimit64 *__rlimits) __THROW;
+#endif
+
+/* Return resource usage information on process indicated by WHO
+   and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
+extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
+
+/* Return the highest priority of any process specified by WHICH and WHO
+   (see above); if WHO is zero, the current process, process group, or user
+   (as specified by WHO) is used.  A lower priority number means higher
+   priority.  Priorities range from PRIO_MIN to PRIO_MAX (above).  */
+extern int getpriority (__priority_which_t __which, id_t __who) __THROW;
+
+/* Set the priority of all processes specified by WHICH and WHO (see above)
+   to PRIO.  Returns 0 on success, -1 on errors.  */
+extern int setpriority (__priority_which_t __which, id_t __who, int __prio)
+     __THROW;
+
+__END_DECLS
+
+#endif /* sys/resource.h  */
diff --git a/lib/libdss-include/include/sys/select.h b/lib/libdss-include/include/sys/select.h
new file mode 100644 (file)
index 0000000..b852dac
--- /dev/null
@@ -0,0 +1,133 @@
+/* `fd_set' type and related macros, and `select'/`pselect' declarations.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*     POSIX 1003.1g: 6.2 Select from File Descriptor Sets <sys/select.h>  */
+
+#ifndef _SYS_SELECT_H
+#define _SYS_SELECT_H  1
+
+#include <features.h>
+
+/* Get definition of needed basic types.  */
+#include <bits/types.h>
+
+/* Get __FD_* definitions.  */
+#include <bits/select.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+/* Get definition of timer specification structures.  */
+#define __need_time_t
+#define __need_timespec
+#include <time.h>
+#define __need_timeval
+#include <bits/time.h>
+
+#ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+# define __suseconds_t_defined
+#endif
+
+
+/* The fd_set member is required to be an array of longs.  */
+typedef long int __fd_mask;
+
+/* Some versions of <linux/posix_types.h> define this macros.  */
+#undef __NFDBITS
+/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
+#define __NFDBITS      (8 * (int) sizeof (__fd_mask))
+#define        __FD_ELT(d)     ((d) / __NFDBITS)
+#define        __FD_MASK(d)    ((__fd_mask) (1UL << ((d) % __NFDBITS)))
+
+/* fd_set for select and pselect.  */
+typedef struct
+  {
+    /* XPG4.2 requires this member name.  Otherwise avoid the name
+       from the global namespace.  */
+#ifdef __USE_XOPEN
+    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->fds_bits)
+#else
+    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->__fds_bits)
+#endif
+  } fd_set;
+
+/* Maximum number of file descriptors in `fd_set'.  */
+#define        FD_SETSIZE              __FD_SETSIZE
+
+#ifdef __USE_MISC
+/* Sometimes the fd_set member is assumed to have this type.  */
+typedef __fd_mask fd_mask;
+
+/* Number of bits per word of `fd_set' (some code assumes this is 32).  */
+# define NFDBITS               __NFDBITS
+#endif
+
+
+/* Access macros for `fd_set'.  */
+#define        FD_SET(fd, fdsetp)      __FD_SET (fd, fdsetp)
+#define        FD_CLR(fd, fdsetp)      __FD_CLR (fd, fdsetp)
+#define        FD_ISSET(fd, fdsetp)    __FD_ISSET (fd, fdsetp)
+#define        FD_ZERO(fdsetp)         __FD_ZERO (fdsetp)
+
+
+__BEGIN_DECLS
+
+/* Check the first NFDS descriptors each in READFDS (if not NULL) for read
+   readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
+   (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
+   after waiting the interval specified therein.  Returns the number of ready
+   descriptors, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int select (int __nfds, fd_set *__restrict __readfds,
+                  fd_set *__restrict __writefds,
+                  fd_set *__restrict __exceptfds,
+                  struct timeval *__restrict __timeout);
+
+#ifdef __USE_XOPEN2K
+/* Same as above only that the TIMEOUT value is given with higher
+   resolution and a sigmask which is been set temporarily.  This version
+   should be used.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+                   fd_set *__restrict __writefds,
+                   fd_set *__restrict __exceptfds,
+                   const struct timespec *__restrict __timeout,
+                   const __sigset_t *__restrict __sigmask);
+#endif
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__
+# include <bits/select2.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/select.h */
diff --git a/lib/libdss-include/include/sys/sem.h b/lib/libdss-include/include/sys/sem.h
new file mode 100644 (file)
index 0000000..1b32092
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SEM_H
+#define _SYS_SEM_H     1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct semid_ds' and more.  */
+#include <bits/sem.h>
+
+#ifdef __USE_GNU
+# define __need_timespec
+# include <time.h>
+#endif
+
+/* The following System V style IPC functions implement a semaphore
+   handling.  The definition is found in XPG2.  */
+
+/* Structure used for argument to `semop' to describe operations.  */
+struct sembuf
+{
+  unsigned short int sem_num;  /* semaphore number */
+  short int sem_op;            /* semaphore operation */
+  short int sem_flg;           /* operation flag */
+};
+
+
+__BEGIN_DECLS
+
+/* Semaphore control operation.  */
+extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
+
+/* Get semaphore.  */
+extern int semget (key_t __key, int __nsems, int __semflg) __THROW;
+
+/* Operate on semaphore.  */
+extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
+
+#ifdef __USE_GNU
+/* Operate on semaphore with timeout.  */
+extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
+                      const struct timespec *__timeout) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sys/sem.h */
diff --git a/lib/libdss-include/include/sys/sendfile.h b/lib/libdss-include/include/sys/sendfile.h
new file mode 100644 (file)
index 0000000..d4c14ba
--- /dev/null
@@ -0,0 +1,51 @@
+/* sendfile -- copy data directly from one file descriptor to another
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SENDFILE_H
+#define _SYS_SENDFILE_H        1
+
+#include <features.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* Send up to COUNT bytes from file associated with IN_FD starting at
+   *OFFSET to descriptor OUT_FD.  Set *OFFSET to the IN_FD's file position
+   following the read bytes.  If OFFSET is a null pointer, use the normal
+   file position instead.  Return the number of written bytes, or -1 in
+   case of error.  */
+#ifndef __USE_FILE_OFFSET64
+extern ssize_t sendfile (int __out_fd, int __in_fd, off_t *__offset,
+                        size_t __count) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern ssize_t __REDIRECT_NTH (sendfile,
+                              (int __out_fd, int __in_fd, __off64_t *__offset,
+                               size_t __count), sendfile64);
+# else
+#  define sendfile sendfile64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern ssize_t sendfile64 (int __out_fd, int __in_fd, __off64_t *__offset,
+                          size_t __count) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sys/sendfile.h */
diff --git a/lib/libdss-include/include/sys/shm.h b/lib/libdss-include/include/sys/shm.h
new file mode 100644 (file)
index 0000000..df263dc
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SHM_H
+#define _SYS_SHM_H     1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct shmid_ds' and more.  */
+#include <bits/shm.h>
+
+/* Define types required by the standard.  */
+#define __need_time_t
+#include <time.h>
+
+#ifdef __USE_XOPEN
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif /* X/Open */
+
+
+__BEGIN_DECLS
+
+/* The following System V style IPC functions implement a shared memory
+   facility.  The definition is found in XPG4.2.  */
+
+/* Shared memory control operation.  */
+extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
+
+/* Get shared memory segment.  */
+extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW;
+
+/* Attach shared memory segment.  */
+extern void *shmat (int __shmid, const void *__shmaddr, int __shmflg)
+     __THROW;
+
+/* Detach shared memory segment.  */
+extern int shmdt (const void *__shmaddr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/shm.h */
diff --git a/lib/libdss-include/include/sys/signal.h b/lib/libdss-include/include/sys/signal.h
new file mode 100644 (file)
index 0000000..2e602da
--- /dev/null
@@ -0,0 +1 @@
+#include <signal.h>
diff --git a/lib/libdss-include/include/sys/signalfd.h b/lib/libdss-include/include/sys/signalfd.h
new file mode 100644 (file)
index 0000000..6f75bc0
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SIGNALFD_H
+#define        _SYS_SIGNALFD_H 1
+
+#define __need_sigset_t
+#include <signal.h>
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/signalfd.h>
+
+struct signalfd_siginfo
+{
+  uint32_t ssi_signo;
+  int32_t ssi_errno;
+  int32_t ssi_code;
+  uint32_t ssi_pid;
+  uint32_t ssi_uid;
+  int32_t ssi_fd;
+  uint32_t ssi_tid;
+  uint32_t ssi_band;
+  uint32_t ssi_overrun;
+  uint32_t ssi_trapno;
+  int32_t ssi_status;
+  int32_t ssi_int;
+  uint64_t ssi_ptr;
+  uint64_t ssi_utime;
+  uint64_t ssi_stime;
+  uint64_t ssi_addr;
+  uint8_t __pad[48];
+};
+
+__BEGIN_DECLS
+
+/* Request notification for delivery of signals in MASK to be
+   performed using descriptor FD.*/
+extern int signalfd (int __fd, const sigset_t *__mask, int __flags)
+  __THROW __nonnull ((2));
+
+__END_DECLS
+
+#endif /* sys/signalfd.h */
diff --git a/lib/libdss-include/include/sys/socket.h b/lib/libdss-include/include/sys/socket.h
new file mode 100644 (file)
index 0000000..c9f0f50
--- /dev/null
@@ -0,0 +1,285 @@
+/* Declarations of socket constants, types, and functions.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SOCKET_H
+#define        _SYS_SOCKET_H   1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <sys/uio.h>
+#define        __need_size_t
+#include <stddef.h>
+#ifdef __USE_GNU
+/* Get the __sigset_t definition.  */
+# include <bits/sigset.h>
+#endif
+
+
+/* This operating system-specific header file defines the SOCK_*, PF_*,
+   AF_*, MSG_*, SOL_*, and SO_* constants, and the `struct sockaddr',
+   `struct msghdr', and `struct linger' types.  */
+#include <bits/socket.h>
+
+#ifdef __USE_MISC
+/* This is the 4.3 BSD `struct sockaddr' format, which is used as wire
+   format in the grotty old 4.3 `talk' protocol.  */
+struct osockaddr
+  {
+    unsigned short int sa_family;
+    unsigned char sa_data[14];
+  };
+#endif
+
+/* The following constants should be used for the second parameter of
+   `shutdown'.  */
+enum
+{
+  SHUT_RD = 0,         /* No more receptions.  */
+#define SHUT_RD                SHUT_RD
+  SHUT_WR,             /* No more transmissions.  */
+#define SHUT_WR                SHUT_WR
+  SHUT_RDWR            /* No more receptions or transmissions.  */
+#define SHUT_RDWR      SHUT_RDWR
+};
+
+/* This is the type we use for generic socket address arguments.
+
+   With GCC 2.7 and later, the funky union causes redeclarations or
+   uses with any of the listed types to be allowed without complaint.
+   G++ 2.7 does not support transparent unions so there we want the
+   old-style declaration, too.  */
+#if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU
+# define __SOCKADDR_ARG                struct sockaddr *__restrict
+# define __CONST_SOCKADDR_ARG  const struct sockaddr *
+#else
+/* Add more `struct sockaddr_AF' types here as necessary.
+   These are all the ones I found on NetBSD and Linux.  */
+# define __SOCKADDR_ALLTYPES \
+  __SOCKADDR_ONETYPE (sockaddr) \
+  __SOCKADDR_ONETYPE (sockaddr_at) \
+  __SOCKADDR_ONETYPE (sockaddr_ax25) \
+  __SOCKADDR_ONETYPE (sockaddr_dl) \
+  __SOCKADDR_ONETYPE (sockaddr_eon) \
+  __SOCKADDR_ONETYPE (sockaddr_in) \
+  __SOCKADDR_ONETYPE (sockaddr_in6) \
+  __SOCKADDR_ONETYPE (sockaddr_inarp) \
+  __SOCKADDR_ONETYPE (sockaddr_ipx) \
+  __SOCKADDR_ONETYPE (sockaddr_iso) \
+  __SOCKADDR_ONETYPE (sockaddr_ns) \
+  __SOCKADDR_ONETYPE (sockaddr_un) \
+  __SOCKADDR_ONETYPE (sockaddr_x25)
+
+# define __SOCKADDR_ONETYPE(type) struct type *__restrict __##type##__;
+typedef union { __SOCKADDR_ALLTYPES
+             } __SOCKADDR_ARG __attribute__ ((__transparent_union__));
+# undef __SOCKADDR_ONETYPE
+# define __SOCKADDR_ONETYPE(type) const struct type *__restrict __##type##__;
+typedef union { __SOCKADDR_ALLTYPES
+             } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
+# undef __SOCKADDR_ONETYPE
+#endif
+
+#ifdef __USE_GNU
+/* For `recvmmsg' and `sendmmsg'.  */
+struct mmsghdr
+  {
+    struct msghdr msg_hdr;     /* Actual message header.  */
+    unsigned int msg_len;      /* Number of received or sent bytes for the
+                                  entry.  */
+  };
+#endif
+
+
+/* Create a new socket of type TYPE in domain DOMAIN, using
+   protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.
+   Returns a file descriptor for the new socket, or -1 for errors.  */
+extern int socket (int __domain, int __type, int __protocol) __THROW;
+
+/* Create two new sockets, of type TYPE in domain DOMAIN and using
+   protocol PROTOCOL, which are connected to each other, and put file
+   descriptors for them in FDS[0] and FDS[1].  If PROTOCOL is zero,
+   one will be chosen automatically.  Returns 0 on success, -1 for errors.  */
+extern int socketpair (int __domain, int __type, int __protocol,
+                      int __fds[2]) __THROW;
+
+/* Give the socket FD the local address ADDR (which is LEN bytes long).  */
+extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
+     __THROW;
+
+/* Put the local address of FD into *ADDR and its length in *LEN.  */
+extern int getsockname (int __fd, __SOCKADDR_ARG __addr,
+                       socklen_t *__restrict __len) __THROW;
+
+/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
+   For connectionless socket types, just set the default address to send to
+   and the only address from which to accept transmissions.
+   Return 0 on success, -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
+
+/* Put the address of the peer connected to socket FD into *ADDR
+   (which is *LEN bytes long), and its actual length into *LEN.  */
+extern int getpeername (int __fd, __SOCKADDR_ARG __addr,
+                       socklen_t *__restrict __len) __THROW;
+
+
+/* Send N bytes of BUF to socket FD.  Returns the number sent or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
+
+/* Read N bytes into BUF from socket FD.
+   Returns the number read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
+
+/* Send N bytes of BUF on socket FD to peer at address ADDR (which is
+   ADDR_LEN bytes long).  Returns the number sent, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
+                      int __flags, __CONST_SOCKADDR_ARG __addr,
+                      socklen_t __addr_len);
+
+/* Read N bytes into BUF through socket FD.
+   If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
+   the sender, and store the actual size of the address in *ADDR_LEN.
+   Returns the number of bytes read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
+                        int __flags, __SOCKADDR_ARG __addr,
+                        socklen_t *__restrict __addr_len);
+
+
+/* Send a message described MESSAGE on socket FD.
+   Returns the number of bytes sent, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
+                       int __flags);
+
+#ifdef __USE_GNU
+/* Send a VLEN messages as described by VMESSAGES to socket FD.
+   Returns the number of datagrams successfully written or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
+                    unsigned int __vlen, int __flags);
+#endif
+
+/* Receive a message as described by MESSAGE from socket FD.
+   Returns the number of bytes read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
+
+#ifdef __USE_GNU
+/* Receive up to VLEN messages as described by VMESSAGES from socket FD.
+   Returns the number of messages received or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
+                    unsigned int __vlen, int __flags,
+                    struct timespec *__tmo);
+#endif
+
+
+/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
+   into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
+   actual length.  Returns 0 on success, -1 for errors.  */
+extern int getsockopt (int __fd, int __level, int __optname,
+                      void *__restrict __optval,
+                      socklen_t *__restrict __optlen) __THROW;
+
+/* Set socket FD's option OPTNAME at protocol level LEVEL
+   to *OPTVAL (which is OPTLEN bytes long).
+   Returns 0 on success, -1 for errors.  */
+extern int setsockopt (int __fd, int __level, int __optname,
+                      const void *__optval, socklen_t __optlen) __THROW;
+
+
+/* Prepare to accept connections on socket FD.
+   N connection requests will be queued before further requests are refused.
+   Returns 0 on success, -1 for errors.  */
+extern int listen (int __fd, int __n) __THROW;
+
+/* Await a connection on socket FD.
+   When a connection arrives, open a new socket to communicate with it,
+   set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
+   peer and *ADDR_LEN to the address's actual length, and return the
+   new socket's descriptor, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int accept (int __fd, __SOCKADDR_ARG __addr,
+                  socklen_t *__restrict __addr_len);
+
+#ifdef __USE_GNU
+/* Similar to 'accept' but takes an additional parameter to specify flags.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int accept4 (int __fd, __SOCKADDR_ARG __addr,
+                   socklen_t *__restrict __addr_len, int __flags);
+#endif
+
+/* Shut down all or part of the connection open on socket FD.
+   HOW determines what to shut down:
+     SHUT_RD   = No more receptions;
+     SHUT_WR   = No more transmissions;
+     SHUT_RDWR = No more receptions or transmissions.
+   Returns 0 on success, -1 for errors.  */
+extern int shutdown (int __fd, int __how) __THROW;
+
+
+#ifdef __USE_XOPEN2K
+/* Determine wheter socket is at a out-of-band mark.  */
+extern int sockatmark (int __fd) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* FDTYPE is S_IFSOCK or another S_IF* macro defined in <sys/stat.h>;
+   returns 1 if FD is open on an object of the indicated type, 0 if not,
+   or -1 for errors (setting errno).  */
+extern int isfdtype (int __fd, int __fdtype) __THROW;
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/socket2.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/socket.h */
diff --git a/lib/libdss-include/include/sys/socketvar.h b/lib/libdss-include/include/sys/socketvar.h
new file mode 100644 (file)
index 0000000..b177158
--- /dev/null
@@ -0,0 +1,3 @@
+/* This header is used on many systems but for GNU we have everything
+   already defined in the standard header.  */
+#include <sys/socket.h>
diff --git a/lib/libdss-include/include/sys/soundcard.h b/lib/libdss-include/include/sys/soundcard.h
new file mode 100644 (file)
index 0000000..fade986
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/soundcard.h>
diff --git a/lib/libdss-include/include/sys/stat.h b/lib/libdss-include/include/sys/stat.h
new file mode 100644 (file)
index 0000000..bf63882
--- /dev/null
@@ -0,0 +1,536 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.6 File Characteristics        <sys/stat.h>
+ */
+
+#ifndef        _SYS_STAT_H
+#define        _SYS_STAT_H     1
+
+#include <features.h>
+
+#include <bits/types.h>                /* For __mode_t and __dev_t.  */
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K || defined __USE_ATFILE
+# if defined __USE_XOPEN || defined __USE_XOPEN2K
+#  define __need_time_t
+# endif
+# ifdef __USE_ATFILE
+#  define __need_timespec
+# endif
+# include <time.h>             /* For time_t resp. timespec.  */
+#endif
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __dev_t_defined
+typedef __dev_t dev_t;
+#  define __dev_t_defined
+# endif
+
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __ino_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+#  else
+typedef __ino64_t ino_t;
+#  endif
+#  define __ino_t_defined
+# endif
+
+# ifndef __mode_t_defined
+typedef __mode_t mode_t;
+#  define __mode_t_defined
+# endif
+
+# ifndef __nlink_t_defined
+typedef __nlink_t nlink_t;
+#  define __nlink_t_defined
+# endif
+
+# ifndef __off_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
+#  define __off_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif /* X/Open */
+
+#ifdef __USE_UNIX98
+# ifndef __blkcnt_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __blkcnt_t blkcnt_t;
+#  else
+typedef __blkcnt64_t blkcnt_t;
+#  endif
+#  define __blkcnt_t_defined
+# endif
+
+# ifndef __blksize_t_defined
+typedef __blksize_t blksize_t;
+#  define __blksize_t_defined
+# endif
+#endif /* Unix98 */
+
+__BEGIN_DECLS
+
+#include <bits/stat.h>
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# define S_IFMT                __S_IFMT
+# define S_IFDIR       __S_IFDIR
+# define S_IFCHR       __S_IFCHR
+# define S_IFBLK       __S_IFBLK
+# define S_IFREG       __S_IFREG
+# ifdef __S_IFIFO
+#  define S_IFIFO      __S_IFIFO
+# endif
+# ifdef __S_IFLNK
+#  define S_IFLNK      __S_IFLNK
+# endif
+# if (defined __USE_MISC || defined __USE_UNIX98) \
+     && defined __S_IFSOCK
+#  define S_IFSOCK     __S_IFSOCK
+# endif
+#endif
+
+/* Test macros for file types. */
+
+#define        __S_ISTYPE(mode, mask)  (((mode) & __S_IFMT) == (mask))
+
+#define        S_ISDIR(mode)    __S_ISTYPE((mode), __S_IFDIR)
+#define        S_ISCHR(mode)    __S_ISTYPE((mode), __S_IFCHR)
+#define        S_ISBLK(mode)    __S_ISTYPE((mode), __S_IFBLK)
+#define        S_ISREG(mode)    __S_ISTYPE((mode), __S_IFREG)
+#ifdef __S_IFIFO
+# define S_ISFIFO(mode)         __S_ISTYPE((mode), __S_IFIFO)
+#endif
+#ifdef __S_IFLNK
+# define S_ISLNK(mode)  __S_ISTYPE((mode), __S_IFLNK)
+#endif
+
+#if defined __USE_MISC && !defined __S_IFLNK
+# define S_ISLNK(mode)  0
+#endif
+
+#if (defined __USE_UNIX98 || defined __USE_XOPEN2K) \
+    && defined __S_IFSOCK
+# define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
+#elif defined __USE_XOPEN2K
+# define S_ISSOCK(mode) 0
+#endif
+
+/* These are from POSIX.1b.  If the objects are not implemented using separate
+   distinct file types, the macros always will evaluate to zero.  Unlike the
+   other S_* macros the following three take a pointer to a `struct stat'
+   object as the argument.  */
+#ifdef __USE_POSIX199309
+# define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
+# define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
+# define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
+#endif
+
+
+/* Protection bits.  */
+
+#define        S_ISUID __S_ISUID       /* Set user ID on execution.  */
+#define        S_ISGID __S_ISGID       /* Set group ID on execution.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
+# define S_ISVTX       __S_ISVTX
+#endif
+
+#define        S_IRUSR __S_IREAD       /* Read by owner.  */
+#define        S_IWUSR __S_IWRITE      /* Write by owner.  */
+#define        S_IXUSR __S_IEXEC       /* Execute by owner.  */
+/* Read, write, and execute by owner.  */
+#define        S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)
+
+#ifdef __USE_MISC
+# define S_IREAD       S_IRUSR
+# define S_IWRITE      S_IWUSR
+# define S_IEXEC       S_IXUSR
+#endif
+
+#define        S_IRGRP (S_IRUSR >> 3)  /* Read by group.  */
+#define        S_IWGRP (S_IWUSR >> 3)  /* Write by group.  */
+#define        S_IXGRP (S_IXUSR >> 3)  /* Execute by group.  */
+/* Read, write, and execute by group.  */
+#define        S_IRWXG (S_IRWXU >> 3)
+
+#define        S_IROTH (S_IRGRP >> 3)  /* Read by others.  */
+#define        S_IWOTH (S_IWGRP >> 3)  /* Write by others.  */
+#define        S_IXOTH (S_IXGRP >> 3)  /* Execute by others.  */
+/* Read, write, and execute by others.  */
+#define        S_IRWXO (S_IRWXG >> 3)
+
+
+#ifdef __USE_MISC
+/* Macros for common mode bit masks.  */
+# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
+# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
+
+# define S_BLKSIZE     512     /* Block size for `st_blocks'.  */
+#endif
+
+
+#ifndef __USE_FILE_OFFSET64
+/* Get file attributes for FILE and put them in BUF.  */
+extern int stat (const char *__restrict __file,
+                struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+
+/* Get file attributes for the file, device, pipe, or socket
+   that file descriptor FD is open on and put them in BUF.  */
+extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
+                                 struct stat *__restrict __buf), stat64)
+     __nonnull ((1, 2));
+extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
+     __nonnull ((2));
+# else
+#  define stat stat64
+#  define fstat fstat64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int stat64 (const char *__restrict __file,
+                  struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
+extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
+#endif
+
+#ifdef __USE_ATFILE
+/* Similar to stat, get the attributes for FILE and put them in BUF.
+   Relative path names are interpreted relative to FD unless FD is
+   AT_FDCWD.  */
+# ifndef __USE_FILE_OFFSET64
+extern int fstatat (int __fd, const char *__restrict __file,
+                   struct stat *__restrict __buf, int __flag)
+     __THROW __nonnull ((2, 3));
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
+                                    struct stat *__restrict __buf,
+                                    int __flag),
+                          fstatat64) __nonnull ((2, 3));
+#  else
+#   define fstatat fstatat64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int fstatat64 (int __fd, const char *__restrict __file,
+                     struct stat64 *__restrict __buf, int __flag)
+     __THROW __nonnull ((2, 3));
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+# ifndef __USE_FILE_OFFSET64
+/* Get file attributes about FILE and put them in BUF.
+   If FILE is a symbolic link, do not follow it.  */
+extern int lstat (const char *__restrict __file,
+                 struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (lstat,
+                          (const char *__restrict __file,
+                           struct stat *__restrict __buf), lstat64)
+     __nonnull ((1, 2));
+#  else
+#   define lstat lstat64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lstat64 (const char *__restrict __file,
+                   struct stat64 *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+# endif
+#endif
+
+/* Set file access permissions for FILE to MODE.
+   If FILE is a symbolic link, this affects its target instead.  */
+extern int chmod (const char *__file, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Set file access permissions for FILE to MODE.
+   If FILE is a symbolic link, this affects the link itself
+   rather than its target.  */
+extern int lchmod (const char *__file, __mode_t __mode)
+     __THROW __nonnull ((1));
+#endif
+
+/* Set file access permissions of the file FD is open on to MODE.  */
+#ifdef __USE_POSIX
+extern int fchmod (int __fd, __mode_t __mode) __THROW;
+#endif
+
+#ifdef __USE_ATFILE
+/* Set file access permissions of FILE relative to
+   the directory FD is open on.  */
+extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
+                    int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use ATFILE.  */
+
+
+
+/* Set the file creation mask of the current process to MASK,
+   and return the old creation mask.  */
+extern __mode_t umask (__mode_t __mask) __THROW;
+
+#ifdef __USE_GNU
+/* Get the current `umask' value without changing it.
+   This function is only available under the GNU Hurd.  */
+extern __mode_t getumask (void) __THROW;
+#endif
+
+/* Create a new directory named PATH, with permission bits MODE.  */
+extern int mkdir (const char *__path, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Like mkdir, create a new directory with permission bits MODE.  But
+   interpret relative PATH names relative to the directory associated
+   with FD.  */
+extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
+     __THROW __nonnull ((2));
+#endif
+
+/* Create a device file named PATH, with permission and special bits MODE
+   and device number DEV (which can be constructed from major and minor
+   device numbers with the `makedev' macro above).  */
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
+     __THROW __nonnull ((1));
+
+# ifdef __USE_ATFILE
+/* Like mknod, create a new device file with permission bits MODE and
+   device number DEV.  But interpret relative PATH names relative to
+   the directory associated with FD.  */
+extern int mknodat (int __fd, const char *__path, __mode_t __mode,
+                   __dev_t __dev) __THROW __nonnull ((2));
+# endif
+#endif
+
+
+/* Create a new FIFO named PATH, with permission bits MODE.  */
+extern int mkfifo (const char *__path, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Like mkfifo, create a new FIFO with permission bits MODE.  But
+   interpret relative PATH names relative to the directory associated
+   with FD.  */
+extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
+     __THROW __nonnull ((2));
+#endif
+\f
+#ifdef __USE_ATFILE
+/* Set file access and modification times relative to directory file
+   descriptor.  */
+extern int utimensat (int __fd, const char *__path,
+                     const struct timespec __times[2],
+                     int __flags)
+     __THROW __nonnull ((2));
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Set file access and modification times of the file associated with FD.  */
+extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
+#endif
+\f
+/* To allow the `struct stat' structure and the file type `mode_t'
+   bits to vary without changing shared library major version number,
+   the `stat' family of functions and `mknod' are in fact inline
+   wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
+   which all take a leading version-number argument designating the
+   data structure and bits used.  <bits/stat.h> defines _STAT_VER with
+   the version number corresponding to `struct stat' as defined in
+   that file; and _MKNOD_VER with the version number corresponding to
+   the S_IF* macros defined therein.  It is arranged that when not
+   inlined these function are always statically linked; that way a
+   dynamically-linked executable always encodes the version number
+   corresponding to the data structures it uses, so the `x' functions
+   in the shared library can adapt without needing to recompile all
+   callers.  */
+
+#ifndef _STAT_VER
+# define _STAT_VER     0
+#endif
+#ifndef _MKNOD_VER
+# define _MKNOD_VER    0
+#endif
+
+/* Wrappers for stat and mknod system calls.  */
+#ifndef __USE_FILE_OFFSET64
+extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
+     __THROW __nonnull ((3));
+extern int __xstat (int __ver, const char *__filename,
+                   struct stat *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __lxstat (int __ver, const char *__filename,
+                    struct stat *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __fxstatat (int __ver, int __fildes, const char *__filename,
+                      struct stat *__stat_buf, int __flag)
+     __THROW __nonnull ((3, 4));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
+                                     struct stat *__stat_buf), __fxstat64)
+     __nonnull ((3));
+extern int __REDIRECT_NTH (__xstat, (int __ver, const char *__filename,
+                                    struct stat *__stat_buf), __xstat64)
+     __nonnull ((2, 3));
+extern int __REDIRECT_NTH (__lxstat, (int __ver, const char *__filename,
+                                     struct stat *__stat_buf), __lxstat64)
+     __nonnull ((2, 3));
+extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
+                                       const char *__filename,
+                                       struct stat *__stat_buf, int __flag),
+                          __fxstatat64) __nonnull ((3, 4));
+
+# else
+#  define __fxstat __fxstat64
+#  define __xstat __xstat64
+#  define __lxstat __lxstat64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
+     __THROW __nonnull ((3));
+extern int __xstat64 (int __ver, const char *__filename,
+                     struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __lxstat64 (int __ver, const char *__filename,
+                      struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
+                        struct stat64 *__stat_buf, int __flag)
+     __THROW __nonnull ((3, 4));
+#endif
+extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
+                    __dev_t *__dev) __THROW __nonnull ((2, 4));
+
+extern int __xmknodat (int __ver, int __fd, const char *__path,
+                      __mode_t __mode, __dev_t *__dev)
+     __THROW __nonnull ((3, 5));
+
+#ifdef __USE_EXTERN_INLINES
+/* Inlined versions of the real stat and mknod functions.  */
+
+__extern_inline int
+__NTH (stat (const char *__path, struct stat *__statbuf))
+{
+  return __xstat (_STAT_VER, __path, __statbuf);
+}
+
+# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+__extern_inline int
+__NTH (lstat (const char *__path, struct stat *__statbuf))
+{
+  return __lxstat (_STAT_VER, __path, __statbuf);
+}
+# endif
+
+__extern_inline int
+__NTH (fstat (int __fd, struct stat *__statbuf))
+{
+  return __fxstat (_STAT_VER, __fd, __statbuf);
+}
+
+# ifdef __USE_ATFILE
+__extern_inline int
+__NTH (fstatat (int __fd, const char *__filename, struct stat *__statbuf,
+               int __flag))
+{
+  return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
+}
+# endif
+
+# ifdef __USE_MISC
+__extern_inline int
+__NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
+{
+  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
+}
+# endif
+
+# ifdef __USE_ATFILE
+__extern_inline int
+__NTH (mknodat (int __fd, const char *__path, __mode_t __mode,
+               __dev_t __dev))
+{
+  return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
+}
+# endif
+
+# if defined __USE_LARGEFILE64 \
+  && (! defined __USE_FILE_OFFSET64 \
+      || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
+__extern_inline int
+__NTH (stat64 (const char *__path, struct stat64 *__statbuf))
+{
+  return __xstat64 (_STAT_VER, __path, __statbuf);
+}
+
+#  if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+__extern_inline int
+__NTH (lstat64 (const char *__path, struct stat64 *__statbuf))
+{
+  return __lxstat64 (_STAT_VER, __path, __statbuf);
+}
+#  endif
+
+__extern_inline int
+__NTH (fstat64 (int __fd, struct stat64 *__statbuf))
+{
+  return __fxstat64 (_STAT_VER, __fd, __statbuf);
+}
+
+#  ifdef __USE_ATFILE
+__extern_inline int
+__NTH (fstatat64 (int __fd, const char *__filename, struct stat64 *__statbuf,
+                 int __flag))
+{
+  return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf, __flag);
+}
+#  endif
+
+# endif
+
+#endif
+
+__END_DECLS
+
+
+#endif /* sys/stat.h  */
diff --git a/lib/libdss-include/include/sys/statfs.h b/lib/libdss-include/include/sys/statfs.h
new file mode 100644 (file)
index 0000000..69a228d
--- /dev/null
@@ -0,0 +1,67 @@
+/* Definitions for getting information about a filesystem.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_STATFS_H
+#define        _SYS_STATFS_H   1
+
+#include <features.h>
+
+/* Get the system-specific definition of `struct statfs'.  */
+#include <bits/statfs.h>
+
+__BEGIN_DECLS
+
+/* Return information about the filesystem on which FILE resides.  */
+#ifndef __USE_FILE_OFFSET64
+extern int statfs (const char *__file, struct statfs *__buf)
+     __THROW __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (statfs,
+                          (const char *__file, struct statfs *__buf),
+                          statfs64) __nonnull ((1, 2));
+# else
+#  define statfs statfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int statfs64 (const char *__file, struct statfs64 *__buf)
+     __THROW __nonnull ((1, 2));
+#endif
+
+/* Return information about the filesystem containing the file FILDES
+   refers to.  */
+#ifndef __USE_FILE_OFFSET64
+extern int fstatfs (int __fildes, struct statfs *__buf)
+     __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatfs, (int __fildes, struct statfs *__buf),
+                          fstatfs64) __nonnull ((2));
+# else
+#  define fstatfs fstatfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstatfs64 (int __fildes, struct statfs64 *__buf)
+     __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* sys/statfs.h */
diff --git a/lib/libdss-include/include/sys/statvfs.h b/lib/libdss-include/include/sys/statvfs.h
new file mode 100644 (file)
index 0000000..5d96652
--- /dev/null
@@ -0,0 +1,90 @@
+/* Definitions for getting information about a filesystem.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_STATVFS_H
+#define        _SYS_STATVFS_H  1
+
+#include <features.h>
+
+/* Get the system-specific definition of `struct statfs'.  */
+#include <bits/statvfs.h>
+
+#ifndef __USE_FILE_OFFSET64
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#else
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#endif
+
+__BEGIN_DECLS
+
+/* Return information about the filesystem on which FILE resides.  */
+#ifndef __USE_FILE_OFFSET64
+extern int statvfs (const char *__restrict __file,
+                   struct statvfs *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (statvfs,
+                          (const char *__restrict __file,
+                           struct statvfs *__restrict __buf), statvfs64)
+     __nonnull ((1, 2));
+# else
+#  define statvfs statvfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int statvfs64 (const char *__restrict __file,
+                     struct statvfs64 *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+#endif
+
+/* Return information about the filesystem containing the file FILDES
+   refers to.  */
+#ifndef __USE_FILE_OFFSET64
+extern int fstatvfs (int __fildes, struct statvfs *__buf)
+     __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatvfs, (int __fildes, struct statvfs *__buf),
+                          fstatvfs64) __nonnull ((2));
+# else
+#  define fstatvfs fstatvfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstatvfs64 (int __fildes, struct statvfs64 *__buf)
+     __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* sys/statvfs.h */
diff --git a/lib/libdss-include/include/sys/stropts.h b/lib/libdss-include/include/sys/stropts.h
new file mode 100644 (file)
index 0000000..5b5bc02
--- /dev/null
@@ -0,0 +1 @@
+#include <stropts.h>
diff --git a/lib/libdss-include/include/sys/swap.h b/lib/libdss-include/include/sys/swap.h
new file mode 100644 (file)
index 0000000..469907b
--- /dev/null
@@ -0,0 +1,43 @@
+/* Calls to enable and disable swapping on specified locations.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SWAP_H
+
+#define _SYS_SWAP_H    1
+#include <features.h>
+
+/* The swap priority is encoded as:
+   (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK
+*/
+#define        SWAP_FLAG_PREFER        0x8000  /* Set if swap priority is specified. */
+#define        SWAP_FLAG_PRIO_MASK     0x7fff
+#define        SWAP_FLAG_PRIO_SHIFT    0
+#define SWAP_FLAG_DISCARD      0x10000 /* Discard swap cluster after use.  */
+
+__BEGIN_DECLS
+
+/* Make the block special device PATH available to the system for swapping.
+   This call is restricted to the super-user.  */
+extern int swapon (const char *__path, int __flags) __THROW;
+
+/* Stop using block special device PATH for swapping.  */
+extern int swapoff (const char *__path) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_SWAP_H */
diff --git a/lib/libdss-include/include/sys/syscall.h b/lib/libdss-include/include/sys/syscall.h
new file mode 100644 (file)
index 0000000..d925a1d
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYSCALL_H
+#define _SYSCALL_H     1
+
+/* This file should list the numbers of the system calls the system knows.
+   But instead of duplicating this we use the information available
+   from the kernel sources.  */
+#include <asm/unistd.h>
+
+#ifndef _LIBC
+/* The Linux kernel header file defines macros `__NR_<name>', but some
+   programs expect the traditional form `SYS_<name>'.  So in building libc
+   we scan the kernel's list and produce <bits/syscall.h> with macros for
+   all the `SYS_' names.  */
+# include <bits/syscall.h>
+#endif
+
+#endif
diff --git a/lib/libdss-include/include/sys/sysctl.h b/lib/libdss-include/include/sys/sysctl.h
new file mode 100644 (file)
index 0000000..687d1a2
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SYSCTL_H
+#define        _SYS_SYSCTL_H   1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+/* Prevent more kernel headers than necessary to be included.  */
+#ifndef _LINUX_KERNEL_H
+# define _LINUX_KERNEL_H       1
+# define __undef_LINUX_KERNEL_H
+#endif
+#ifndef _LINUX_TYPES_H
+# define _LINUX_TYPES_H                1
+# define __undef_LINUX_TYPES_H
+#endif
+#ifndef _LINUX_LIST_H
+# define _LINUX_LIST_H         1
+# define __undef_LINUX_LIST_H
+#endif
+#ifndef __LINUX_COMPILER_H
+# define __LINUX_COMPILER_H    1
+# define __user
+# define __undef__LINUX_COMPILER_H
+#endif
+
+#include <linux/sysctl.h>
+
+#ifdef __undef_LINUX_KERNEL_H
+# undef _LINUX_KERNEL_H
+# undef __undef_LINUX_KERNEL_H
+#endif
+#ifdef __undef_LINUX_TYPES_H
+# undef _LINUX_TYPES_H
+# undef __undef_LINUX_TYPES_H
+#endif
+#ifdef __undef_LINUX_LIST_H
+# undef _LINUX_LIST_H
+# undef __undef_LINUX_LIST_H
+#endif
+#ifdef __undef__LINUX_COMPILER_H
+# undef __LINUX_COMPILER_H
+# undef __user
+# undef __undef__LINUX_COMPILER_H
+#endif
+
+#include <bits/sysctl.h>
+
+__BEGIN_DECLS
+
+/* Read or write system parameters.  */
+extern int sysctl (int *__name, int __nlen, void *__oldval,
+                  size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_SYSCTL_H */
diff --git a/lib/libdss-include/include/sys/sysinfo.h b/lib/libdss-include/include/sys/sysinfo.h
new file mode 100644 (file)
index 0000000..4fc5186
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSINFO_H
+#define _SYS_SYSINFO_H 1
+
+#include <features.h>
+
+/* Get sysinfo structure from kernel header.  */
+#include <linux/kernel.h>
+
+__BEGIN_DECLS
+
+/* Returns information on overall system statistics.  */
+extern int sysinfo (struct sysinfo *__info) __THROW;
+
+
+/* Return number of configured processors.  */
+extern int get_nprocs_conf (void) __THROW;
+
+/* Return number of available processors.  */
+extern int get_nprocs (void) __THROW;
+
+
+/* Return number of physical pages of memory in the system.  */
+extern long int get_phys_pages (void) __THROW;
+
+/* Return number of available physical pages of memory in the system.  */
+extern long int get_avphys_pages (void) __THROW;
+
+__END_DECLS
+
+#endif /* sys/sysinfo.h */
diff --git a/lib/libdss-include/include/sys/syslog.h b/lib/libdss-include/include/sys/syslog.h
new file mode 100644 (file)
index 0000000..ee01478
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 1982, 1986, 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)syslog.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _SYS_SYSLOG_H
+#define _SYS_SYSLOG_H 1
+
+#include <features.h>
+#define __need___va_list
+#include <stdarg.h>
+
+/* This file defines _PATH_LOG.  */
+#include <bits/syslog-path.h>
+
+/*
+ * priorities/facilities are encoded into a single 32-bit quantity, where the
+ * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
+ * (0-big number).  Both the priorities and the facilities map roughly
+ * one-to-one to strings in the syslogd(8) source code.  This mapping is
+ * included in this file.
+ *
+ * priorities (these are ordered)
+ */
+#define        LOG_EMERG       0       /* system is unusable */
+#define        LOG_ALERT       1       /* action must be taken immediately */
+#define        LOG_CRIT        2       /* critical conditions */
+#define        LOG_ERR         3       /* error conditions */
+#define        LOG_WARNING     4       /* warning conditions */
+#define        LOG_NOTICE      5       /* normal but significant condition */
+#define        LOG_INFO        6       /* informational */
+#define        LOG_DEBUG       7       /* debug-level messages */
+
+#define        LOG_PRIMASK     0x07    /* mask to extract priority part (internal) */
+                               /* extract priority */
+#define        LOG_PRI(p)      ((p) & LOG_PRIMASK)
+#define        LOG_MAKEPRI(fac, pri)   ((fac) | (pri))
+
+#ifdef SYSLOG_NAMES
+#define        INTERNAL_NOPRI  0x10    /* the "no priority" priority */
+                               /* mark "facility" */
+#define        INTERNAL_MARK   LOG_MAKEPRI(LOG_NFACILITIES << 3, 0)
+typedef struct _code {
+       char    *c_name;
+       int     c_val;
+} CODE;
+
+CODE prioritynames[] =
+  {
+    { "alert", LOG_ALERT },
+    { "crit", LOG_CRIT },
+    { "debug", LOG_DEBUG },
+    { "emerg", LOG_EMERG },
+    { "err", LOG_ERR },
+    { "error", LOG_ERR },              /* DEPRECATED */
+    { "info", LOG_INFO },
+    { "none", INTERNAL_NOPRI },                /* INTERNAL */
+    { "notice", LOG_NOTICE },
+    { "panic", LOG_EMERG },            /* DEPRECATED */
+    { "warn", LOG_WARNING },           /* DEPRECATED */
+    { "warning", LOG_WARNING },
+    { NULL, -1 }
+  };
+#endif
+
+/* facility codes */
+#define        LOG_KERN        (0<<3)  /* kernel messages */
+#define        LOG_USER        (1<<3)  /* random user-level messages */
+#define        LOG_MAIL        (2<<3)  /* mail system */
+#define        LOG_DAEMON      (3<<3)  /* system daemons */
+#define        LOG_AUTH        (4<<3)  /* security/authorization messages */
+#define        LOG_SYSLOG      (5<<3)  /* messages generated internally by syslogd */
+#define        LOG_LPR         (6<<3)  /* line printer subsystem */
+#define        LOG_NEWS        (7<<3)  /* network news subsystem */
+#define        LOG_UUCP        (8<<3)  /* UUCP subsystem */
+#define        LOG_CRON        (9<<3)  /* clock daemon */
+#define        LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
+#define        LOG_FTP         (11<<3) /* ftp daemon */
+
+       /* other codes through 15 reserved for system use */
+#define        LOG_LOCAL0      (16<<3) /* reserved for local use */
+#define        LOG_LOCAL1      (17<<3) /* reserved for local use */
+#define        LOG_LOCAL2      (18<<3) /* reserved for local use */
+#define        LOG_LOCAL3      (19<<3) /* reserved for local use */
+#define        LOG_LOCAL4      (20<<3) /* reserved for local use */
+#define        LOG_LOCAL5      (21<<3) /* reserved for local use */
+#define        LOG_LOCAL6      (22<<3) /* reserved for local use */
+#define        LOG_LOCAL7      (23<<3) /* reserved for local use */
+
+#define        LOG_NFACILITIES 24      /* current number of facilities */
+#define        LOG_FACMASK     0x03f8  /* mask to extract facility part */
+                               /* facility of pri */
+#define        LOG_FAC(p)      (((p) & LOG_FACMASK) >> 3)
+
+#ifdef SYSLOG_NAMES
+CODE facilitynames[] =
+  {
+    { "auth", LOG_AUTH },
+    { "authpriv", LOG_AUTHPRIV },
+    { "cron", LOG_CRON },
+    { "daemon", LOG_DAEMON },
+    { "ftp", LOG_FTP },
+    { "kern", LOG_KERN },
+    { "lpr", LOG_LPR },
+    { "mail", LOG_MAIL },
+    { "mark", INTERNAL_MARK },         /* INTERNAL */
+    { "news", LOG_NEWS },
+    { "security", LOG_AUTH },          /* DEPRECATED */
+    { "syslog", LOG_SYSLOG },
+    { "user", LOG_USER },
+    { "uucp", LOG_UUCP },
+    { "local0", LOG_LOCAL0 },
+    { "local1", LOG_LOCAL1 },
+    { "local2", LOG_LOCAL2 },
+    { "local3", LOG_LOCAL3 },
+    { "local4", LOG_LOCAL4 },
+    { "local5", LOG_LOCAL5 },
+    { "local6", LOG_LOCAL6 },
+    { "local7", LOG_LOCAL7 },
+    { NULL, -1 }
+  };
+#endif
+
+/*
+ * arguments to setlogmask.
+ */
+#define        LOG_MASK(pri)   (1 << (pri))            /* mask for one priority */
+#define        LOG_UPTO(pri)   ((1 << ((pri)+1)) - 1)  /* all priorities through pri */
+
+/*
+ * Option flags for openlog.
+ *
+ * LOG_ODELAY no longer does anything.
+ * LOG_NDELAY is the inverse of what it used to be.
+ */
+#define        LOG_PID         0x01    /* log the pid with each message */
+#define        LOG_CONS        0x02    /* log on the console if errors in sending */
+#define        LOG_ODELAY      0x04    /* delay open until first syslog() (default) */
+#define        LOG_NDELAY      0x08    /* don't delay open */
+#define        LOG_NOWAIT      0x10    /* don't wait for console forks: DEPRECATED */
+#define        LOG_PERROR      0x20    /* log to stderr as well */
+
+__BEGIN_DECLS
+
+/* Close descriptor used to write to system logger.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void closelog (void);
+
+/* Open connection to system logger.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void openlog (const char *__ident, int __option, int __facility);
+
+/* Set the log mask level.  */
+extern int setlogmask (int __mask) __THROW;
+
+/* Generate a log message using FMT string and option arguments.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void syslog (int __pri, const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+
+#ifdef __USE_MISC
+/* Generate a log message using FMT and using arguments pointed to by AP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/syslog.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/syslog-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/syslog.h */
diff --git a/lib/libdss-include/include/sys/sysmacros.h b/lib/libdss-include/include/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..4c4a697
--- /dev/null
@@ -0,0 +1,65 @@
+/* Definitions of macros to access `dev_t' values.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSMACROS_H
+#define _SYS_SYSMACROS_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+__extension__
+extern unsigned int gnu_dev_major (unsigned long long int __dev)
+     __THROW __attribute_const__;
+__extension__
+extern unsigned int gnu_dev_minor (unsigned long long int __dev)
+     __THROW __attribute_const__;
+__extension__
+extern unsigned long long int gnu_dev_makedev (unsigned int __major,
+                                              unsigned int __minor)
+     __THROW __attribute_const__;
+
+#ifdef __USE_EXTERN_INLINES
+__extension__ __extern_inline __attribute_const__ unsigned int
+__NTH (gnu_dev_major (unsigned long long int __dev))
+{
+  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
+}
+
+__extension__ __extern_inline __attribute_const__ unsigned int
+__NTH (gnu_dev_minor (unsigned long long int __dev))
+{
+  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
+}
+
+__extension__ __extern_inline __attribute_const__ unsigned long long int
+__NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
+{
+  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
+         | (((unsigned long long int) (__minor & ~0xff)) << 12)
+         | (((unsigned long long int) (__major & ~0xfff)) << 32));
+}
+#endif
+__END_DECLS
+
+/* Access the functions with their traditional names.  */
+#define major(dev) gnu_dev_major (dev)
+#define minor(dev) gnu_dev_minor (dev)
+#define makedev(maj, min) gnu_dev_makedev (maj, min)
+
+#endif /* sys/sysmacros.h */
diff --git a/lib/libdss-include/include/sys/termios.h b/lib/libdss-include/include/sys/termios.h
new file mode 100644 (file)
index 0000000..3e18805
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _SYS_TERMIOS_H
+#define _SYS_TERMIOS_H
+#include <termios.h>
+#endif
diff --git a/lib/libdss-include/include/sys/time.h b/lib/libdss-include/include/sys/time.h
new file mode 100644 (file)
index 0000000..545de6f
--- /dev/null
@@ -0,0 +1,191 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_TIME_H
+#define _SYS_TIME_H    1
+
+#include <features.h>
+
+#include <bits/types.h>
+#define __need_time_t
+#include <time.h>
+#define __need_timeval
+#include <bits/time.h>
+
+#include <sys/select.h>
+
+#ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+# define __suseconds_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Macros for converting between `struct timeval' and `struct timespec'.  */
+# define TIMEVAL_TO_TIMESPEC(tv, ts) {                                   \
+       (ts)->tv_sec = (tv)->tv_sec;                                    \
+       (ts)->tv_nsec = (tv)->tv_usec * 1000;                           \
+}
+# define TIMESPEC_TO_TIMEVAL(tv, ts) {                                   \
+       (tv)->tv_sec = (ts)->tv_sec;                                    \
+       (tv)->tv_usec = (ts)->tv_nsec / 1000;                           \
+}
+#endif
+
+
+#ifdef __USE_MISC
+/* Structure crudely representing a timezone.
+   This is obsolete and should never be used.  */
+struct timezone
+  {
+    int tz_minuteswest;                /* Minutes west of GMT.  */
+    int tz_dsttime;            /* Nonzero if DST is ever in effect.  */
+  };
+
+typedef struct timezone *__restrict __timezone_ptr_t;
+#else
+typedef void *__restrict __timezone_ptr_t;
+#endif
+
+/* Get the current time of day and timezone information,
+   putting it into *TV and *TZ.  If TZ is NULL, *TZ is not filled.
+   Returns 0 on success, -1 on errors.
+   NOTE: This form of timezone information is obsolete.
+   Use the functions and variables declared in <time.h> instead.  */
+extern int gettimeofday (struct timeval *__restrict __tv,
+                        __timezone_ptr_t __tz) __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Set the current time of day and timezone information.
+   This call is restricted to the super-user.  */
+extern int settimeofday (const struct timeval *__tv,
+                        const struct timezone *__tz)
+     __THROW;
+
+/* Adjust the current time of day by the amount in DELTA.
+   If OLDDELTA is not NULL, it is filled in with the amount
+   of time adjustment remaining to be done from the last `adjtime' call.
+   This call is restricted to the super-user.  */
+extern int adjtime (const struct timeval *__delta,
+                   struct timeval *__olddelta) __THROW;
+#endif
+
+
+/* Values for the first argument to `getitimer' and `setitimer'.  */
+enum __itimer_which
+  {
+    /* Timers run in real time.  */
+    ITIMER_REAL = 0,
+#define ITIMER_REAL ITIMER_REAL
+    /* Timers run only when the process is executing.  */
+    ITIMER_VIRTUAL = 1,
+#define ITIMER_VIRTUAL ITIMER_VIRTUAL
+    /* Timers run when the process is executing and when
+       the system is executing on behalf of the process.  */
+    ITIMER_PROF = 2
+#define ITIMER_PROF ITIMER_PROF
+  };
+
+/* Type of the second argument to `getitimer' and
+   the second and third arguments `setitimer'.  */
+struct itimerval
+  {
+    /* Value to put into `it_value' when the timer expires.  */
+    struct timeval it_interval;
+    /* Time to the next timer expiration.  */
+    struct timeval it_value;
+  };
+
+#if defined __USE_GNU && !defined __cplusplus
+/* Use the nicer parameter type only in GNU mode and not for C++ since the
+   strict C++ rules prevent the automatic promotion.  */
+typedef enum __itimer_which __itimer_which_t;
+#else
+typedef int __itimer_which_t;
+#endif
+
+/* Set *VALUE to the current setting of timer WHICH.
+   Return 0 on success, -1 on errors.  */
+extern int getitimer (__itimer_which_t __which,
+                     struct itimerval *__value) __THROW;
+
+/* Set the timer WHICH to *NEW.  If OLD is not NULL,
+   set *OLD to the old value of timer WHICH.
+   Returns 0 on success, -1 on errors.  */
+extern int setitimer (__itimer_which_t __which,
+                     const struct itimerval *__restrict __new,
+                     struct itimerval *__restrict __old) __THROW;
+
+/* Change the access time of FILE to TVP[0] and the modification time of
+   FILE to TVP[1].  If TVP is a null pointer, use the current time instead.
+   Returns 0 on success, -1 on errors.  */
+extern int utimes (const char *__file, const struct timeval __tvp[2])
+     __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Same as `utimes', but does not follow symbolic links.  */
+extern int lutimes (const char *__file, const struct timeval __tvp[2])
+     __THROW __nonnull ((1));
+
+/* Same as `utimes', but takes an open file descriptor instead of a name.  */
+extern int futimes (int __fd, const struct timeval __tvp[2]) __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Change the access time of FILE relative to FD to TVP[0] and the
+   modification time of FILE to TVP[1].  If TVP is a null pointer, use
+   the current time instead.  Returns 0 on success, -1 on errors.  */
+extern int futimesat (int __fd, const char *__file,
+                     const struct timeval __tvp[2]) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* Convenience macros for operations on timevals.
+   NOTE: `timercmp' does not work for >= or <=.  */
+# define timerisset(tvp)       ((tvp)->tv_sec || (tvp)->tv_usec)
+# define timerclear(tvp)       ((tvp)->tv_sec = (tvp)->tv_usec = 0)
+# define timercmp(a, b, CMP)                                                 \
+  (((a)->tv_sec == (b)->tv_sec) ?                                            \
+   ((a)->tv_usec CMP (b)->tv_usec) :                                         \
+   ((a)->tv_sec CMP (b)->tv_sec))
+# define timeradd(a, b, result)                                                      \
+  do {                                                                       \
+    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                            \
+    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                         \
+    if ((result)->tv_usec >= 1000000)                                        \
+      {                                                                              \
+       ++(result)->tv_sec;                                                   \
+       (result)->tv_usec -= 1000000;                                         \
+      }                                                                              \
+  } while (0)
+# define timersub(a, b, result)                                                      \
+  do {                                                                       \
+    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                            \
+    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                         \
+    if ((result)->tv_usec < 0) {                                             \
+      --(result)->tv_sec;                                                    \
+      (result)->tv_usec += 1000000;                                          \
+    }                                                                        \
+  } while (0)
+#endif /* Misc.  */
+
+__END_DECLS
+
+#endif /* sys/time.h */
diff --git a/lib/libdss-include/include/sys/timeb.h b/lib/libdss-include/include/sys/timeb.h
new file mode 100644 (file)
index 0000000..41d71bf
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_TIMEB_H
+#define _SYS_TIMEB_H   1
+
+#include <features.h>
+
+#define __need_time_t
+#include <time.h>
+
+
+__BEGIN_DECLS
+
+/* Structure returned by the `ftime' function.  */
+
+struct timeb
+  {
+    time_t time;               /* Seconds since epoch, as from `time'.  */
+    unsigned short int millitm;        /* Additional milliseconds.  */
+    short int timezone;                /* Minutes west of GMT.  */
+    short int dstflag;         /* Nonzero if Daylight Savings Time used.  */
+  };
+
+/* Fill in TIMEBUF with information about the current time.  */
+
+extern int ftime (struct timeb *__timebuf);
+
+__END_DECLS
+
+#endif /* sys/timeb.h */
diff --git a/lib/libdss-include/include/sys/timerfd.h b/lib/libdss-include/include/sys/timerfd.h
new file mode 100644 (file)
index 0000000..3286997
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 2008-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMERFD_H
+#define        _SYS_TIMERFD_H  1
+
+#include <time.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/timerfd.h>
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_settime'.  */
+enum
+  {
+    TFD_TIMER_ABSTIME = 1 << 0
+#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for new interval timer source.  */
+extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW;
+
+/* Set next expiration time of interval timer source UFD to UTMR.  If
+   FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is
+   absolute.  Optionally return the old expiration time in OTMR.  */
+extern int timerfd_settime (int __ufd, int __flags,
+                           const struct itimerspec *__utmr,
+                           struct itimerspec *__otmr) __THROW;
+
+/* Return the next expiration time of UFD.  */
+extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timerfd.h */
diff --git a/lib/libdss-include/include/sys/times.h b/lib/libdss-include/include/sys/times.h
new file mode 100644 (file)
index 0000000..a877d14
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 4.5.2 Process Times     <sys/times.h>
+ */
+
+#ifndef        _SYS_TIMES_H
+#define        _SYS_TIMES_H    1
+
+#include <features.h>
+
+#define        __need_clock_t
+#include <time.h>
+
+
+__BEGIN_DECLS
+
+/* Structure describing CPU time used by a process and its children.  */
+struct tms
+  {
+    clock_t tms_utime;         /* User CPU time.  */
+    clock_t tms_stime;         /* System CPU time.  */
+
+    clock_t tms_cutime;                /* User CPU time of dead children.  */
+    clock_t tms_cstime;                /* System CPU time of dead children.  */
+  };
+
+
+/* Store the CPU time used by this process and all its
+   dead children (and their dead children) in BUFFER.
+   Return the elapsed real time, or (clock_t) -1 for errors.
+   All times are in CLK_TCKths of a second.  */
+extern clock_t times (struct tms *__buffer) __THROW;
+
+__END_DECLS
+
+#endif /* sys/times.h  */
diff --git a/lib/libdss-include/include/sys/timex.h b/lib/libdss-include/include/sys/timex.h
new file mode 100644 (file)
index 0000000..75e86dd
--- /dev/null
@@ -0,0 +1,71 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMEX_H
+#define        _SYS_TIMEX_H    1
+
+#include <features.h>
+#include <sys/time.h>
+
+/* These definitions from linux/timex.h as of 2.6.30.  */
+
+#include <bits/timex.h>
+
+#define NTP_API        4       /* NTP API version */
+
+struct ntptimeval
+{
+  struct timeval time; /* current time (ro) */
+  long int maxerror;   /* maximum error (us) (ro) */
+  long int esterror;   /* estimated error (us) (ro) */
+  long int tai;                /* TAI offset (ro) */
+
+  long int __glibc_reserved1;
+  long int __glibc_reserved2;
+  long int __glibc_reserved3;
+  long int __glibc_reserved4;
+};
+
+/* Clock states (time_state) */
+#define TIME_OK                0       /* clock synchronized, no leap second */
+#define TIME_INS       1       /* insert leap second */
+#define TIME_DEL       2       /* delete leap second */
+#define TIME_OOP       3       /* leap second in progress */
+#define TIME_WAIT      4       /* leap second has occurred */
+#define TIME_ERROR     5       /* clock not synchronized */
+#define TIME_BAD       TIME_ERROR /* bw compat */
+
+/* Maximum time constant of the PLL.  */
+#define MAXTC          6
+
+__BEGIN_DECLS
+
+extern int __adjtimex (struct timex *__ntx) __THROW;
+extern int adjtimex (struct timex *__ntx) __THROW;
+
+#ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
+                          ntp_gettimex);
+#else
+extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
+# define ntp_gettime ntp_gettimex
+#endif
+extern int ntp_adjtime (struct timex *__tntx) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timex.h */
diff --git a/lib/libdss-include/include/sys/ttychars.h b/lib/libdss-include/include/sys/ttychars.h
new file mode 100644 (file)
index 0000000..7043f60
--- /dev/null
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 1982, 1986, 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttychars.h  8.2 (Berkeley) 1/4/94
+ */
+
+/*
+ * 4.3 COMPATIBILITY FILE
+ *
+ * User visible structures and constants related to terminal handling.
+ */
+#ifndef _SYS_TTYCHARS_H
+#define        _SYS_TTYCHARS_H 1
+
+struct ttychars {
+       char    tc_erase;       /* erase last character */
+       char    tc_kill;        /* erase entire line */
+       char    tc_intrc;       /* interrupt */
+       char    tc_quitc;       /* quit */
+       char    tc_startc;      /* start output */
+       char    tc_stopc;       /* stop output */
+       char    tc_eofc;        /* end-of-file */
+       char    tc_brkc;        /* input delimiter (like nl) */
+       char    tc_suspc;       /* stop process signal */
+       char    tc_dsuspc;      /* delayed stop process signal */
+       char    tc_rprntc;      /* reprint line */
+       char    tc_flushc;      /* flush output (toggles) */
+       char    tc_werasc;      /* word erase */
+       char    tc_lnextc;      /* literal next character */
+};
+
+#ifdef __USE_OLD_TTY
+#include <sys/ttydefaults.h>   /* to pick up character defaults */
+#endif
+
+#endif /* sys/ttychars.h */
diff --git a/lib/libdss-include/include/sys/ttydefaults.h b/lib/libdss-include/include/sys/ttydefaults.h
new file mode 100644 (file)
index 0000000..9be168b
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttydefaults.h       8.4 (Berkeley) 1/21/94
+ */
+
+/*
+ * System wide defaults for terminal state.  Linux version.
+ */
+#ifndef _SYS_TTYDEFAULTS_H_
+#define        _SYS_TTYDEFAULTS_H_
+
+/*
+ * Defaults on "first" open.
+ */
+#define        TTYDEF_IFLAG    (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY)
+#define TTYDEF_OFLAG   (OPOST | ONLCR | XTABS)
+#define TTYDEF_LFLAG   (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL)
+#define TTYDEF_CFLAG   (CREAD | CS7 | PARENB | HUPCL)
+#define TTYDEF_SPEED   (B9600)
+
+/*
+ * Control Character Defaults
+ */
+#define CTRL(x)        (x&037)
+#define        CEOF            CTRL('d')
+#ifdef _POSIX_VDISABLE
+# define CEOL          _POSIX_VDISABLE
+#else
+# define CEOL          '\0'            /* XXX avoid _POSIX_VDISABLE */
+#endif
+#define        CERASE          0177
+#define        CINTR           CTRL('c')
+#ifdef _POSIX_VDISABLE
+# define CSTATUS       _POSIX_VDISABLE
+#else
+# define CSTATUS       '\0'            /* XXX avoid _POSIX_VDISABLE */
+#endif
+#define        CKILL           CTRL('u')
+#define        CMIN            1
+#define        CQUIT           034             /* FS, ^\ */
+#define        CSUSP           CTRL('z')
+#define        CTIME           0
+#define        CDSUSP          CTRL('y')
+#define        CSTART          CTRL('q')
+#define        CSTOP           CTRL('s')
+#define        CLNEXT          CTRL('v')
+#define        CDISCARD        CTRL('o')
+#define        CWERASE         CTRL('w')
+#define        CREPRINT        CTRL('r')
+#define        CEOT            CEOF
+/* compat */
+#define        CBRK            CEOL
+#define CRPRNT         CREPRINT
+#define        CFLUSH          CDISCARD
+
+/* PROTECTED INCLUSION ENDS HERE */
+#endif /* !_SYS_TTYDEFAULTS_H_ */
+
+/*
+ * #define TTYDEFCHARS to include an array of default control characters.
+ */
+#ifdef TTYDEFCHARS
+cc_t   ttydefchars[NCCS] = {
+       CEOF,   CEOL,   CEOL,   CERASE, CWERASE, CKILL, CREPRINT,
+       _POSIX_VDISABLE, CINTR, CQUIT,  CSUSP,  CDSUSP, CSTART, CSTOP,  CLNEXT,
+       CDISCARD, CMIN, CTIME,  CSTATUS, _POSIX_VDISABLE
+};
+#undef TTYDEFCHARS
+#endif
diff --git a/lib/libdss-include/include/sys/types.h b/lib/libdss-include/include/sys/types.h
new file mode 100644 (file)
index 0000000..a728567
--- /dev/null
@@ -0,0 +1,275 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
+ */
+
+#ifndef        _SYS_TYPES_H
+#define        _SYS_TYPES_H    1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#ifdef __USE_MISC
+# ifndef __u_char_defined
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+#  define __u_char_defined
+# endif
+#endif
+
+typedef __loff_t loff_t;
+
+#ifndef __ino_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+# else
+typedef __ino64_t ino_t;
+# endif
+# define __ino_t_defined
+#endif
+#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
+typedef __ino64_t ino64_t;
+# define __ino64_t_defined
+#endif
+
+#ifndef __dev_t_defined
+typedef __dev_t dev_t;
+# define __dev_t_defined
+#endif
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __nlink_t_defined
+typedef __nlink_t nlink_t;
+# define __nlink_t_defined
+#endif
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+#endif
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \
+    && !defined __id_t_defined
+typedef __id_t id_t;
+# define __id_t_defined
+#endif
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+#ifdef __USE_MISC
+# ifndef __daddr_t_defined
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+#  define __daddr_t_defined
+# endif
+#endif
+
+#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined
+typedef __key_t key_t;
+# define __key_t_defined
+#endif
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define __need_clock_t
+#endif
+#define        __need_time_t
+#define __need_timer_t
+#define __need_clockid_t
+#include <time.h>
+
+#ifdef __USE_XOPEN
+# ifndef __useconds_t_defined
+typedef __useconds_t useconds_t;
+#  define __useconds_t_defined
+# endif
+# ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+#  define __suseconds_t_defined
+# endif
+#endif
+
+#define        __need_size_t
+#include <stddef.h>
+
+#ifdef __USE_MISC
+/* Old compatibility names for C types.  */
+typedef unsigned long int ulong;
+typedef unsigned short int ushort;
+typedef unsigned int uint;
+#endif
+
+/* These size-specific names are used by some of the inet code.  */
+
+#if !__GNUC_PREREQ (2, 7)
+
+/* These types are defined by the ISO C99 header <inttypes.h>. */
+# ifndef __int8_t_defined
+#  define __int8_t_defined
+typedef        char int8_t;
+typedef        short int int16_t;
+typedef        int int32_t;
+#  if __WORDSIZE == 64
+typedef long int int64_t;
+#  else
+__extension__ typedef long long int int64_t;
+#  endif
+# endif
+
+/* But these were defined by ISO C without the first `_'.  */
+typedef        unsigned char u_int8_t;
+typedef        unsigned short int u_int16_t;
+typedef        unsigned int u_int32_t;
+# if __WORDSIZE == 64
+typedef unsigned long int u_int64_t;
+# else
+__extension__ typedef unsigned long long int u_int64_t;
+# endif
+
+typedef int register_t;
+
+#else
+
+/* For GCC 2.7 and later, we can use specific type-size attributes.  */
+# define __intN_t(N, MODE) \
+  typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
+# define __u_intN_t(N, MODE) \
+  typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
+
+# ifndef __int8_t_defined
+#  define __int8_t_defined
+__intN_t (8, __QI__);
+__intN_t (16, __HI__);
+__intN_t (32, __SI__);
+__intN_t (64, __DI__);
+# endif
+
+__u_intN_t (8, __QI__);
+__u_intN_t (16, __HI__);
+__u_intN_t (32, __SI__);
+__u_intN_t (64, __DI__);
+
+typedef int register_t __attribute__ ((__mode__ (__word__)));
+
+
+/* Some code from BIND tests this macro to see if the types above are
+   defined.  */
+#endif
+#define __BIT_TYPES_DEFINED__  1
+
+
+#ifdef __USE_MISC
+/* In BSD <sys/types.h> is expected to define BYTE_ORDER.  */
+# include <endian.h>
+
+/* It also defines `fd_set' and the FD_* macros for `select'.  */
+# include <sys/select.h>
+
+/* BSD defines these symbols, so we follow.  */
+# include <sys/sysmacros.h>
+#endif /* Use misc.  */
+
+
+#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \
+    && !defined __blksize_t_defined
+typedef __blksize_t blksize_t;
+# define __blksize_t_defined
+#endif
+
+/* Types from the Large File Support interface.  */
+#ifndef __USE_FILE_OFFSET64
+# ifndef __blkcnt_t_defined
+typedef __blkcnt_t blkcnt_t;    /* Type to count number of disk blocks.  */
+#  define __blkcnt_t_defined
+# endif
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#else
+# ifndef __blkcnt_t_defined
+typedef __blkcnt64_t blkcnt_t;    /* Type to count number of disk blocks.  */
+#  define __blkcnt_t_defined
+# endif
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
+typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
+typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
+#endif
+
+
+/* Now add the thread types.  */
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+# include <bits/pthreadtypes.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/types.h */
diff --git a/lib/libdss-include/include/sys/ucontext.h b/lib/libdss-include/include/sys/ucontext.h
new file mode 100644 (file)
index 0000000..01da3ca
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* System V/AArch64 ABI compliant context switching support.  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H        1
+
+#include <features.h>
+#include <signal.h>
+#include <sys/procfs.h>
+
+/* We need the signal context definitions even if they are not used
+   included in <signal.h>.  */
+#include <bits/sigcontext.h>
+
+typedef elf_greg_t greg_t;
+
+/* Container for all general registers.  */
+typedef elf_gregset_t gregset_t;
+
+/* Structure to describe FPU registers.  */
+typedef elf_fpregset_t fpregset_t;
+
+/* Context to describe whole processor state.  This only describes
+   the core registers; coprocessor registers get saved elsewhere
+   (e.g. in uc_regspace, or somewhere unspecified on the stack
+   during non-RT signal handlers).  */
+typedef struct sigcontext mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    __sigset_t uc_sigmask;
+    mcontext_t uc_mcontext;
+  } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff --git a/lib/libdss-include/include/sys/uio.h b/lib/libdss-include/include/sys/uio.h
new file mode 100644 (file)
index 0000000..2c98077
--- /dev/null
@@ -0,0 +1,122 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_UIO_H
+#define _SYS_UIO_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* This file defines `struct iovec'.  */
+#include <bits/uio.h>
+
+
+/* Read data from file descriptor FD, and put the result in the
+   buffers described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.
+   Operates just like 'read' (see <unistd.h>) except that data are
+   put in IOVEC instead of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count)
+  __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which
+   is a vector of COUNT 'struct iovec's, to file descriptor FD.
+   The data is written in the order specified.
+   Operates just like 'write' (see <unistd.h>) except that the data
+   are taken from IOVEC instead of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count)
+  __wur;
+
+
+#ifdef __USE_MISC
+# ifndef __USE_FILE_OFFSET64
+/* Read data from file descriptor FD at the given position OFFSET
+   without change the file pointer, and put the result in the buffers
+   described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.  Operates just like
+   'pread' (see <unistd.h>) except that data are put in IOVEC instead
+   of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count,
+                      __off_t __offset) __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which is a
+   vector of COUNT 'struct iovec's, to file descriptor FD at the given
+   position OFFSET without change the file pointer.  The data is
+   written in the order specified.  Operates just like 'pwrite' (see
+   <unistd.h>) except that the data are taken from IOVEC instead of a
+   contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count,
+                       __off_t __offset) __wur;
+# else
+#  ifdef __REDIRECT
+extern ssize_t __REDIRECT (preadv, (int __fd, const struct iovec *__iovec,
+                                   int __count, __off64_t __offset),
+                          preadv64) __wur;
+extern ssize_t __REDIRECT (pwritev, (int __fd, const struct iovec *__iovec,
+                                    int __count, __off64_t __offset),
+                          pwritev64) __wur;
+#  else
+#   define preadv preadv64
+#   define pwritev pwritev64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+/* Read data from file descriptor FD at the given position OFFSET
+   without change the file pointer, and put the result in the buffers
+   described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.  Operates just like
+   'pread' (see <unistd.h>) except that data are put in IOVEC instead
+   of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count,
+                        __off64_t __offset) __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which is a
+   vector of COUNT 'struct iovec's, to file descriptor FD at the given
+   position OFFSET without change the file pointer.  The data is
+   written in the order specified.  Operates just like 'pwrite' (see
+   <unistd.h>) except that the data are taken from IOVEC instead of a
+   contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count,
+                         __off64_t __offset) __wur;
+# endif
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* sys/uio.h */
diff --git a/lib/libdss-include/include/sys/ultrasound.h b/lib/libdss-include/include/sys/ultrasound.h
new file mode 100644 (file)
index 0000000..a65c385
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ultrasound.h>
diff --git a/lib/libdss-include/include/sys/un.h b/lib/libdss-include/include/sys/un.h
new file mode 100644 (file)
index 0000000..7a1a67b
--- /dev/null
@@ -0,0 +1,46 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_UN_H
+#define        _SYS_UN_H       1
+
+#include <sys/cdefs.h>
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket.  */
+struct sockaddr_un
+  {
+    __SOCKADDR_COMMON (sun_);
+    char sun_path[108];                /* Path name.  */
+  };
+
+
+#ifdef __USE_MISC
+# include <string.h>           /* For prototype of `strlen'.  */
+
+/* Evaluate to actual length of the `sockaddr_un' structure.  */
+# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path)       \
+                     + strlen ((ptr)->sun_path))
+#endif
+
+__END_DECLS
+
+#endif /* sys/un.h  */
diff --git a/lib/libdss-include/include/sys/unistd.h b/lib/libdss-include/include/sys/unistd.h
new file mode 100644 (file)
index 0000000..1e823fb
--- /dev/null
@@ -0,0 +1 @@
+#include <unistd.h>
diff --git a/lib/libdss-include/include/sys/user.h b/lib/libdss-include/include/sys/user.h
new file mode 100644 (file)
index 0000000..f6fc361
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H    1
+
+struct user_regs_struct
+{
+  unsigned long long regs[31];
+  unsigned long long sp;
+  unsigned long long pc;
+  unsigned long long pstate;
+};
+
+struct user_fpsimd_struct
+{
+  __uint128_t  vregs[32];
+  unsigned int fpsr;
+  unsigned int fpcr;
+};
+
+#endif
diff --git a/lib/libdss-include/include/sys/ustat.h b/lib/libdss-include/include/sys/ustat.h
new file mode 100644 (file)
index 0000000..b58a1de
--- /dev/null
@@ -0,0 +1,37 @@
+/* Header describing obsolete `ustat' interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * This interface is obsolete.  Use <sys/statfs.h> instead.
+ */
+
+#ifndef _SYS_USTAT_H
+#define        _SYS_USTAT_H    1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <bits/ustat.h>
+
+__BEGIN_DECLS
+
+extern int ustat (__dev_t __dev, struct ustat *__ubuf) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ustat.h */
diff --git a/lib/libdss-include/include/sys/utsname.h b/lib/libdss-include/include/sys/utsname.h
new file mode 100644 (file)
index 0000000..05682a1
--- /dev/null
@@ -0,0 +1,86 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 4.4 System Identification       <sys/utsname.h>
+ */
+
+#ifndef        _SYS_UTSNAME_H
+#define        _SYS_UTSNAME_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/utsname.h>
+
+#ifndef _UTSNAME_SYSNAME_LENGTH
+# define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_NODENAME_LENGTH
+# define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_RELEASE_LENGTH
+# define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_VERSION_LENGTH
+# define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_MACHINE_LENGTH
+# define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH
+#endif
+
+/* Structure describing the system and machine.  */
+struct utsname
+  {
+    /* Name of the implementation of the operating system.  */
+    char sysname[_UTSNAME_SYSNAME_LENGTH];
+
+    /* Name of this node on the network.  */
+    char nodename[_UTSNAME_NODENAME_LENGTH];
+
+    /* Current release level of this implementation.  */
+    char release[_UTSNAME_RELEASE_LENGTH];
+    /* Current version level of this release.  */
+    char version[_UTSNAME_VERSION_LENGTH];
+
+    /* Name of the hardware type the system is running on.  */
+    char machine[_UTSNAME_MACHINE_LENGTH];
+
+#if _UTSNAME_DOMAIN_LENGTH - 0
+    /* Name of the domain of this node on the network.  */
+# ifdef __USE_GNU
+    char domainname[_UTSNAME_DOMAIN_LENGTH];
+# else
+    char __domainname[_UTSNAME_DOMAIN_LENGTH];
+# endif
+#endif
+  };
+
+#ifdef __USE_MISC
+/* Note that SVID assumes all members have the same size.  */
+# define SYS_NMLN  _UTSNAME_LENGTH
+#endif
+
+
+/* Put information about the system in NAME.  */
+extern int uname (struct utsname *__name) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/utsname.h  */
diff --git a/lib/libdss-include/include/sys/vfs.h b/lib/libdss-include/include/sys/vfs.h
new file mode 100644 (file)
index 0000000..fa22d31
--- /dev/null
@@ -0,0 +1,4 @@
+/* Other systems declare `struct statfs' et al in <sys/vfs.h>,
+   so we have this file to be compatible with programs expecting it.  */
+
+#include <sys/statfs.h>
diff --git a/lib/libdss-include/include/sys/vlimit.h b/lib/libdss-include/include/sys/vlimit.h
new file mode 100644 (file)
index 0000000..d21b42d
--- /dev/null
@@ -0,0 +1,67 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_VLIMIT_H
+#define _SYS_VLIMIT_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* This interface is obsolete, and is superseded by <sys/resource.h>.  */
+
+/* Kinds of resource limit.  */
+enum __vlimit_resource
+{
+  /* Setting this non-zero makes it impossible to raise limits.
+     Only the super-use can set it to zero.
+
+     This is not implemented in recent versions of BSD, nor by
+     the GNU C library.  */
+  LIM_NORAISE,
+
+  /* CPU time available for each process (seconds).  */
+  LIM_CPU,
+
+  /* Largest file which can be created (bytes).  */
+  LIM_FSIZE,
+
+  /* Maximum size of the data segment (bytes).  */
+  LIM_DATA,
+
+  /* Maximum size of the stack segment (bytes).  */
+  LIM_STACK,
+
+  /* Largest core file that will be created (bytes).  */
+  LIM_CORE,
+
+  /* Resident set size (bytes).  */
+  LIM_MAXRSS
+};
+
+/* This means no limit.  */
+#define INFINITY 0x7fffffff
+
+
+/* Set the soft limit for RESOURCE to be VALUE.
+   Returns 0 for success, -1 for failure.  */
+extern int vlimit (enum __vlimit_resource __resource, int __value) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/vlimit.h  */
diff --git a/lib/libdss-include/include/sys/vt.h b/lib/libdss-include/include/sys/vt.h
new file mode 100644 (file)
index 0000000..834abfb
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/vt.h>
diff --git a/lib/libdss-include/include/sys/vtimes.h b/lib/libdss-include/include/sys/vtimes.h
new file mode 100644 (file)
index 0000000..c6af2ba
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_VTIMES_H
+#define _SYS_VTIMES_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* This interface is obsolete; use `getrusage' instead.  */
+
+/* Granularity of the `vm_utime' and `vm_stime' fields of a `struct vtimes'.
+   (This is the frequency of the machine's power supply, in Hz.)  */
+#define        VTIMES_UNITS_PER_SECOND 60
+
+struct vtimes
+{
+  /* User time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
+  int vm_utime;
+  /* System time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
+  int vm_stime;
+
+  /* Amount of data and stack memory used (kilobyte-seconds).  */
+  unsigned int vm_idsrss;
+  /* Amount of text memory used (kilobyte-seconds).  */
+  unsigned int vm_ixrss;
+  /* Maximum resident set size (text, data, and stack) (kilobytes).  */
+  int vm_maxrss;
+
+  /* Number of hard page faults (i.e. those that required I/O).  */
+  int vm_majflt;
+  /* Number of soft page faults (i.e. those serviced by reclaiming
+     a page from the list of pages awaiting reallocation.  */
+  int vm_minflt;
+
+  /* Number of times a process was swapped out of physical memory.  */
+  int vm_nswap;
+
+  /* Number of input operations via the file system.  Note: This
+     and `ru_oublock' do not include operations with the cache.  */
+  int vm_inblk;
+  /* Number of output operations via the file system.  */
+  int vm_oublk;
+};
+
+/* If CURRENT is not NULL, write statistics for the current process into
+   *CURRENT.  If CHILD is not NULL, write statistics for all terminated child
+   processes into *CHILD.  Returns 0 for success, -1 for failure.  */
+extern int vtimes (struct vtimes * __current, struct vtimes * __child) __THROW;
+
+__END_DECLS
+
+#endif /* sys/vtimes.h  */
diff --git a/lib/libdss-include/include/sys/wait.h b/lib/libdss-include/include/sys/wait.h
new file mode 100644 (file)
index 0000000..b983332
--- /dev/null
@@ -0,0 +1,175 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 3.2.1 Wait for Process Termination      <sys/wait.h>
+ */
+
+#ifndef        _SYS_WAIT_H
+#define        _SYS_WAIT_H     1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <signal.h>
+
+/* These macros could also be defined in <stdlib.h>.  */
+#if !defined _STDLIB_H || (!defined __USE_XOPEN && !defined __USE_XOPEN2K8)
+/* This will define the `W*' macros for the flag
+   bits to `waitpid', `wait3', and `wait4'.  */
+# include <bits/waitflags.h>
+
+# ifdef        __USE_MISC
+
+/* Lots of hair to allow traditional BSD use of `union wait'
+   as well as POSIX.1 use of `int' for the status word.  */
+
+#  if defined __GNUC__ && !defined __cplusplus
+#   define __WAIT_INT(status) \
+  (__extension__ (((union { __typeof(status) __in; int __i; }) \
+                  { .__in = (status) }).__i))
+#  else
+#   define __WAIT_INT(status)  (*(const int *) &(status))
+#  endif
+
+/* This is the type of the argument to `wait'.  The funky union
+   causes redeclarations with either `int *' or `union wait *' to be
+   allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
+   the actual function definitions.  */
+
+#  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
+#   define __WAIT_STATUS       void *
+#   define __WAIT_STATUS_DEFN  void *
+#  else
+/* This works in GCC 2.6.1 and later.  */
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((__transparent_union__));
+#   define __WAIT_STATUS_DEFN  int *
+#  endif
+
+# else /* Don't use misc.  */
+
+#  define __WAIT_INT(status)   (status)
+#  define __WAIT_STATUS                int *
+#  define __WAIT_STATUS_DEFN   int *
+
+# endif /* Use misc.  */
+
+/* This will define all the `__W*' macros.  */
+# include <bits/waitstatus.h>
+
+# define WEXITSTATUS(status)   __WEXITSTATUS (__WAIT_INT (status))
+# define WTERMSIG(status)      __WTERMSIG (__WAIT_INT (status))
+# define WSTOPSIG(status)      __WSTOPSIG (__WAIT_INT (status))
+# define WIFEXITED(status)     __WIFEXITED (__WAIT_INT (status))
+# define WIFSIGNALED(status)   __WIFSIGNALED (__WAIT_INT (status))
+# define WIFSTOPPED(status)    __WIFSTOPPED (__WAIT_INT (status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status) __WIFCONTINUED (__WAIT_INT (status))
+# endif
+#endif /* <stdlib.h> not included.  */
+
+#ifdef __USE_MISC
+# define WCOREFLAG             __WCOREFLAG
+# define WCOREDUMP(status)     __WCOREDUMP (__WAIT_INT (status))
+# define W_EXITCODE(ret, sig)  __W_EXITCODE (ret, sig)
+# define W_STOPCODE(sig)       __W_STOPCODE (sig)
+#endif
+
+/* Wait for a child to die.  When one does, put its status in *STAT_LOC
+   and return its process ID.  For errors, return (pid_t) -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern __pid_t wait (__WAIT_STATUS __stat_loc);
+
+#ifdef __USE_MISC
+/* Special values for the PID argument to `waitpid' and `wait4'.  */
+# define WAIT_ANY      (-1)    /* Any process.  */
+# define WAIT_MYPGRP   0       /* Any process in my process group.  */
+#endif
+
+/* Wait for a child matching PID to die.
+   If PID is greater than 0, match any process whose process ID is PID.
+   If PID is (pid_t) -1, match any process.
+   If PID is (pid_t) 0, match any process with the
+   same process group as the current process.
+   If PID is less than -1, match any process whose
+   process group is the absolute value of PID.
+   If the WNOHANG bit is set in OPTIONS, and that child
+   is not already dead, return (pid_t) 0.  If successful,
+   return PID and store the dead child's status in STAT_LOC.
+   Return (pid_t) -1 for errors.  If the WUNTRACED bit is
+   set in OPTIONS, return status for stopped children; otherwise don't.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options);
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifndef __id_t_defined
+#  include <bits/types.h>
+typedef __id_t id_t;
+#  define __id_t_defined
+# endif
+
+# define __need_siginfo_t
+# include <bits/siginfo.h>
+
+/* Wait for a childing matching IDTYPE and ID to change the status and
+   place appropriate information in *INFOP.
+   If IDTYPE is P_PID, match any process whose process ID is ID.
+   If IDTYPE is P_PGID, match any process whose process group is ID.
+   If IDTYPE is P_ALL, match any process.
+   If the WNOHANG bit is set in OPTIONS, and that child
+   is not already dead, clear *INFOP and return 0.  If successful, store
+   exit code and status in *INFOP.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int waitid (idtype_t __idtype, __id_t __id, siginfo_t *__infop,
+                  int __options);
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* This being here makes the prototypes valid whether or not
+   we have already included <sys/resource.h> to define `struct rusage'.  */
+struct rusage;
+
+/* Wait for a child to exit.  When one does, put its status in *STAT_LOC and
+   return its process ID.  For errors return (pid_t) -1.  If USAGE is not
+   nil, store information about the child's resource usage there.  If the
+   WUNTRACED bit is set in OPTIONS, return status for stopped children;
+   otherwise don't.  */
+extern __pid_t wait3 (__WAIT_STATUS __stat_loc, int __options,
+                     struct rusage * __usage) __THROWNL;
+#endif
+
+#ifdef __USE_MISC
+/* PID is like waitpid.  Other args are like wait3.  */
+extern __pid_t wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc, int __options,
+                     struct rusage *__usage) __THROWNL;
+#endif /* Use misc.  */
+
+
+__END_DECLS
+
+#endif /* sys/wait.h  */
diff --git a/lib/libdss-include/include/sys/xattr.h b/lib/libdss-include/include/sys/xattr.h
new file mode 100644 (file)
index 0000000..0bdce57
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_XATTR_H
+#define _SYS_XATTR_H   1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* The following constants should be used for the fifth parameter of
+   `*setxattr'.  */
+#ifndef __USE_KERNEL_XATTR_DEFS
+enum
+{
+  XATTR_CREATE = 1,    /* set value, fail if attr already exists.  */
+#define XATTR_CREATE   XATTR_CREATE
+  XATTR_REPLACE = 2    /* set value, fail if attr does not exist.  */
+#define XATTR_REPLACE  XATTR_REPLACE
+};
+#endif
+
+/* Set the attribute NAME of the file pointed to by PATH to VALUE (which
+   is SIZE bytes long).  Return 0 on success, -1 for errors.  */
+extern int setxattr (const char *__path, const char *__name,
+                    const void *__value, size_t __size, int __flags)
+       __THROW;
+
+/* Set the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long), not following symlinks for the last pathname component.
+   Return 0 on success, -1 for errors.  */
+extern int lsetxattr (const char *__path, const char *__name,
+                     const void *__value, size_t __size, int __flags)
+       __THROW;
+
+/* Set the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+   bytes long).  Return 0 on success, -1 for errors.  */
+extern int fsetxattr (int __fd, const char *__name, const void *__value,
+                     size_t __size, int __flags) __THROW;
+
+/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long).  Return 0 on success, -1 for errors.  */
+extern ssize_t getxattr (const char *__path, const char *__name,
+                        void *__value, size_t __size) __THROW;
+
+/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long), not following symlinks for the last pathname component.
+   Return 0 on success, -1 for errors.  */
+extern ssize_t lgetxattr (const char *__path, const char *__name,
+                         void *__value, size_t __size) __THROW;
+
+/* Get the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+   bytes long).  Return 0 on success, -1 for errors.  */
+extern ssize_t fgetxattr (int __fd, const char *__name, void *__value,
+                         size_t __size) __THROW;
+
+/* List attributes of the file pointed to by PATH into the user-supplied
+   buffer LIST (which is SIZE bytes big).  Return 0 on success, -1 for
+   errors.  */
+extern ssize_t listxattr (const char *__path, char *__list, size_t __size)
+       __THROW;
+
+/* List attributes of the file pointed to by PATH into the user-supplied
+   buffer LIST (which is SIZE bytes big), not following symlinks for the
+   last pathname component.  Return 0 on success, -1 for errors.  */
+extern ssize_t llistxattr (const char *__path, char *__list, size_t __size)
+       __THROW;
+
+/* List attributes of the file descriptor FD into the user-supplied buffer
+   LIST (which is SIZE bytes big).  Return 0 on success, -1 for errors.  */
+extern ssize_t flistxattr (int __fd, char *__list, size_t __size)
+       __THROW;
+
+/* Remove the attribute NAME from the file pointed to by PATH.  Return 0
+   on success, -1 for errors.  */
+extern int removexattr (const char *__path, const char *__name) __THROW;
+
+/* Remove the attribute NAME from the file pointed to by PATH, not
+   following symlinks for the last pathname component.  Return 0 on
+   success, -1 for errors.  */
+extern int lremovexattr (const char *__path, const char *__name) __THROW;
+
+/* Remove the attribute NAME from the file descriptor FD.  Return 0 on
+   success, -1 for errors.  */
+extern int fremovexattr (int __fd, const char *__name) __THROW;
+
+__END_DECLS
+
+#endif /* sys/xattr.h  */
diff --git a/lib/libdss-include/include/syscall.h b/lib/libdss-include/include/syscall.h
new file mode 100644 (file)
index 0000000..4c30578
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/syscall.h>
diff --git a/lib/libdss-include/include/sysexits.h b/lib/libdss-include/include/sysexits.h
new file mode 100644 (file)
index 0000000..37246b6
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 1987, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)sysexits.h  8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _SYSEXITS_H
+#define        _SYSEXITS_H 1
+
+/*
+ *  SYSEXITS.H -- Exit status codes for system programs.
+ *
+ *     This include file attempts to categorize possible error
+ *     exit statuses for system programs, notably delivermail
+ *     and the Berkeley network.
+ *
+ *     Error numbers begin at EX__BASE to reduce the possibility of
+ *     clashing with other exit statuses that random programs may
+ *     already return.  The meaning of the codes is approximately
+ *     as follows:
+ *
+ *     EX_USAGE -- The command was used incorrectly, e.g., with
+ *             the wrong number of arguments, a bad flag, a bad
+ *             syntax in a parameter, or whatever.
+ *     EX_DATAERR -- The input data was incorrect in some way.
+ *             This should only be used for user's data & not
+ *             system files.
+ *     EX_NOINPUT -- An input file (not a system file) did not
+ *             exist or was not readable.  This could also include
+ *             errors like "No message" to a mailer (if it cared
+ *             to catch it).
+ *     EX_NOUSER -- The user specified did not exist.  This might
+ *             be used for mail addresses or remote logins.
+ *     EX_NOHOST -- The host specified did not exist.  This is used
+ *             in mail addresses or network requests.
+ *     EX_UNAVAILABLE -- A service is unavailable.  This can occur
+ *             if a support program or file does not exist.  This
+ *             can also be used as a catchall message when something
+ *             you wanted to do doesn't work, but you don't know
+ *             why.
+ *     EX_SOFTWARE -- An internal software error has been detected.
+ *             This should be limited to non-operating system related
+ *             errors as possible.
+ *     EX_OSERR -- An operating system error has been detected.
+ *             This is intended to be used for such things as "cannot
+ *             fork", "cannot create pipe", or the like.  It includes
+ *             things like getuid returning a user that does not
+ *             exist in the passwd file.
+ *     EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
+ *             etc.) does not exist, cannot be opened, or has some
+ *             sort of error (e.g., syntax error).
+ *     EX_CANTCREAT -- A (user specified) output file cannot be
+ *             created.
+ *     EX_IOERR -- An error occurred while doing I/O on some file.
+ *     EX_TEMPFAIL -- temporary failure, indicating something that
+ *             is not really an error.  In sendmail, this means
+ *             that a mailer (e.g.) could not create a connection,
+ *             and the request should be reattempted later.
+ *     EX_PROTOCOL -- the remote system returned something that
+ *             was "not possible" during a protocol exchange.
+ *     EX_NOPERM -- You did not have sufficient permission to
+ *             perform the operation.  This is not intended for
+ *             file system problems, which should use NOINPUT or
+ *             CANTCREAT, but rather for higher level permissions.
+ */
+
+#define EX_OK          0       /* successful termination */
+
+#define EX__BASE       64      /* base value for error messages */
+
+#define EX_USAGE       64      /* command line usage error */
+#define EX_DATAERR     65      /* data format error */
+#define EX_NOINPUT     66      /* cannot open input */
+#define EX_NOUSER      67      /* addressee unknown */
+#define EX_NOHOST      68      /* host name unknown */
+#define EX_UNAVAILABLE 69      /* service unavailable */
+#define EX_SOFTWARE    70      /* internal software error */
+#define EX_OSERR       71      /* system error (e.g., can't fork) */
+#define EX_OSFILE      72      /* critical OS file missing */
+#define EX_CANTCREAT   73      /* can't create (user) output file */
+#define EX_IOERR       74      /* input/output error */
+#define EX_TEMPFAIL    75      /* temp failure; user is invited to retry */
+#define EX_PROTOCOL    76      /* remote error in protocol */
+#define EX_NOPERM      77      /* permission denied */
+#define EX_CONFIG      78      /* configuration error */
+
+#define EX__MAX        78      /* maximum listed value */
+
+#endif /* sysexits.h */
diff --git a/lib/libdss-include/include/syslog.h b/lib/libdss-include/include/syslog.h
new file mode 100644 (file)
index 0000000..830b492
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/syslog.h>
diff --git a/lib/libdss-include/include/tar.h b/lib/libdss-include/include/tar.h
new file mode 100644 (file)
index 0000000..321c19e
--- /dev/null
@@ -0,0 +1,112 @@
+/* Extended tar format from POSIX.1.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by David J. MacKenzie.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _TAR_H
+#define        _TAR_H  1
+
+#include <features.h>
+
+
+/* A tar archive consists of 512-byte blocks.
+   Each file in the archive has a header block followed by 0+ data blocks.
+   Two blocks of NUL bytes indicate the end of the archive.  */
+
+/* The fields of header blocks:
+   All strings are stored as ISO 646 (approximately ASCII) strings.
+
+   Fields are numeric unless otherwise noted below; numbers are ISO 646
+   representations of octal numbers, with leading zeros as needed.
+
+   linkname is only valid when typeflag==LNKTYPE.  It doesn't use prefix;
+   files that are links to pathnames >100 chars long can not be stored
+   in a tar archive.
+
+   If typeflag=={LNKTYPE,SYMTYPE,DIRTYPE} then size must be 0.
+
+   devmajor and devminor are only valid for typeflag=={BLKTYPE,CHRTYPE}.
+
+   chksum contains the sum of all 512 bytes in the header block,
+   treating each byte as an 8-bit unsigned value and treating the
+   8 bytes of chksum as blank characters.
+
+   uname and gname are used in preference to uid and gid, if those
+   names exist locally.
+
+   Field Name  Byte Offset     Length in Bytes Field Type
+   name                0               100             NUL-terminated if NUL fits
+   mode                100             8
+   uid         108             8
+   gid         116             8
+   size                124             12
+   mtime       136             12
+   chksum      148             8
+   typeflag    156             1               see below
+   linkname    157             100             NUL-terminated if NUL fits
+   magic       257             6               must be TMAGIC (NUL term.)
+   version     263             2               must be TVERSION
+   uname       265             32              NUL-terminated
+   gname       297             32              NUL-terminated
+   devmajor    329             8
+   devminor    337             8
+   prefix      345             155             NUL-terminated if NUL fits
+
+   If the first character of prefix is '\0', the file name is name;
+   otherwise, it is prefix/name.  Files whose pathnames don't fit in that
+   length can not be stored in a tar archive.  */
+
+/* The bits in mode: */
+#define TSUID  04000
+#define TSGID  02000
+#if defined __USE_XOPEN || !defined __USE_XOPEN2K
+# define TSVTX 01000
+#endif
+#define TUREAD 00400
+#define TUWRITE        00200
+#define TUEXEC 00100
+#define TGREAD 00040
+#define TGWRITE        00020
+#define TGEXEC 00010
+#define TOREAD 00004
+#define TOWRITE        00002
+#define TOEXEC 00001
+
+/* The values for typeflag:
+   Values 'A'-'Z' are reserved for custom implementations.
+   All other values are reserved for future POSIX.1 revisions.  */
+
+#define REGTYPE                '0'     /* Regular file (preferred code).  */
+#define AREGTYPE       '\0'    /* Regular file (alternate code).  */
+#define LNKTYPE                '1'     /* Hard link.  */
+#define SYMTYPE                '2'     /* Symbolic link (hard if not supported).  */
+#define CHRTYPE                '3'     /* Character special.  */
+#define BLKTYPE                '4'     /* Block special.  */
+#define DIRTYPE                '5'     /* Directory.  */
+#define FIFOTYPE       '6'     /* Named pipe.  */
+#define CONTTYPE       '7'     /* Contiguous file */
+ /* (regular file if not supported).  */
+
+/* Contents of magic field and its length.  */
+#define TMAGIC "ustar"
+#define TMAGLEN        6
+
+/* Contents of the version field and its length.  */
+#define TVERSION       "00"
+#define TVERSLEN       2
+
+#endif /* tar.h */
diff --git a/lib/libdss-include/include/termio.h b/lib/libdss-include/include/termio.h
new file mode 100644 (file)
index 0000000..0e610f0
--- /dev/null
@@ -0,0 +1,6 @@
+/* Compatible <termio.h> for old `struct termio' ioctl interface.
+   This is obsolete; use the POSIX.1 `struct termios' interface
+   defined in <termios.h> instead.  */
+
+#include <termios.h>
+#include <sys/ioctl.h>
diff --git a/lib/libdss-include/include/termios.h b/lib/libdss-include/include/termios.h
new file mode 100644 (file)
index 0000000..a56bb88
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 7.1-2 General Terminal Interface        <termios.h>
+ */
+
+#ifndef        _TERMIOS_H
+#define        _TERMIOS_H      1
+
+#include <features.h>
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* We need `pid_t'.  */
+# include <bits/types.h>
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif
+
+__BEGIN_DECLS
+
+/* Get the system-dependent definitions of `struct termios', `tcflag_t',
+   `cc_t', `speed_t', and all the macros specifying the flag bits.  */
+#include <bits/termios.h>
+
+#ifdef __USE_MISC
+/* Compare a character C to a value VAL from the `c_cc' array in a
+   `struct termios'.  If VAL is _POSIX_VDISABLE, no character can match it.  */
+# define CCEQ(val, c)  ((c) == (val) && (val) != _POSIX_VDISABLE)
+#endif
+
+/* Return the output baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetospeed (const struct termios *__termios_p) __THROW;
+
+/* Return the input baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetispeed (const struct termios *__termios_p) __THROW;
+
+/* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+/* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+#ifdef __USE_MISC
+/* Set both the input and output baud rates in *TERMIOS_OP to SPEED.  */
+extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __THROW;
+#endif
+
+
+/* Put the state of FD into *TERMIOS_P.  */
+extern int tcgetattr (int __fd, struct termios *__termios_p) __THROW;
+
+/* Set the state of FD to *TERMIOS_P.
+   Values for OPTIONAL_ACTIONS (TCSA*) are in <bits/termios.h>.  */
+extern int tcsetattr (int __fd, int __optional_actions,
+                     const struct termios *__termios_p) __THROW;
+
+
+#ifdef __USE_MISC
+/* Set *TERMIOS_P to indicate raw mode.  */
+extern void cfmakeraw (struct termios *__termios_p) __THROW;
+#endif
+
+/* Send zero bits on FD.  */
+extern int tcsendbreak (int __fd, int __duration) __THROW;
+
+/* Wait for pending output to be written on FD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int tcdrain (int __fd);
+
+/* Flush pending data on FD.
+   Values for QUEUE_SELECTOR (TC{I,O,IO}FLUSH) are in <bits/termios.h>.  */
+extern int tcflush (int __fd, int __queue_selector) __THROW;
+
+/* Suspend or restart transmission on FD.
+   Values for ACTION (TC[IO]{OFF,ON}) are in <bits/termios.h>.  */
+extern int tcflow (int __fd, int __action) __THROW;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* Get process group ID for session leader for controlling terminal FD.  */
+extern __pid_t tcgetsid (int __fd) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+# include <sys/ttydefaults.h>
+#endif
+
+__END_DECLS
+
+#endif /* termios.h  */
diff --git a/lib/libdss-include/include/tgmath.h b/lib/libdss-include/include/tgmath.h
new file mode 100644 (file)
index 0000000..ea2b611
--- /dev/null
@@ -0,0 +1,454 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.22 Type-generic math        <tgmath.h>
+ */
+
+#ifndef _TGMATH_H
+#define _TGMATH_H      1
+
+/* Include the needed headers.  */
+#include <math.h>
+#include <complex.h>
+
+
+/* Since `complex' is currently not really implemented in most C compilers
+   and if it is implemented, the implementations differ.  This makes it
+   quite difficult to write a generic implementation of this header.  We
+   do not try this for now and instead concentrate only on GNU CC.  Once
+   we have more information support for other compilers might follow.  */
+
+#if __GNUC_PREREQ (2, 7)
+
+# ifdef __NO_LONG_DOUBLE_MATH
+#  define __tgml(fct) fct
+# else
+#  define __tgml(fct) fct ## l
+# endif
+
+/* This is ugly but unless gcc gets appropriate builtins we have to do
+   something like this.  Don't ask how it works.  */
+
+/* 1 if 'type' is a floating type, 0 if 'type' is an integer type.
+   Allows for _Bool.  Expands to an integer constant expression.  */
+# if __GNUC_PREREQ (3, 1)
+#  define __floating_type(type) \
+  (__builtin_classify_type ((type) 0) == 8 \
+   || (__builtin_classify_type ((type) 0) == 9 \
+       && __builtin_classify_type (__real__ ((type) 0)) == 8))
+# else
+#  define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
+# endif
+
+/* The tgmath real type for T, where E is 0 if T is an integer type and
+   1 for a floating type.  */
+# define __tgmath_real_type_sub(T, E) \
+  __typeof__ (*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0         \
+                 : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0))
+
+/* The tgmath real type of EXPR.  */
+# define __tgmath_real_type(expr) \
+  __tgmath_real_type_sub (__typeof__ ((__typeof__ (expr)) 0),                \
+                         __floating_type (__typeof__ (expr)))
+
+
+/* We have two kinds of generic macros: to support functions which are
+   only defined on real valued parameters and those which are defined
+   for complex functions as well.  */
+# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
+     (__extension__ ((sizeof (Val) == sizeof (double)                        \
+                     || __builtin_classify_type (Val) != 8)                  \
+                    ? (__tgmath_real_type (Val)) Fct (Val)                   \
+                    : (sizeof (Val) == sizeof (float))                       \
+                    ? (__tgmath_real_type (Val)) Fct##f (Val)                \
+                    : (__tgmath_real_type (Val)) __tgml(Fct) (Val)))
+
+# define __TGMATH_UNARY_REAL_RET_ONLY(Val, RetType, Fct) \
+     (__extension__ ((sizeof (Val) == sizeof (double)                        \
+                     || __builtin_classify_type (Val) != 8)                  \
+                    ? (RetType) Fct (Val)                                    \
+                    : (sizeof (Val) == sizeof (float))                       \
+                    ? (RetType) Fct##f (Val)                                 \
+                    : (RetType) __tgml(Fct) (Val)))
+
+# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ ((sizeof (Val1) == sizeof (double)                       \
+                     || __builtin_classify_type (Val1) != 8)                 \
+                    ? (__tgmath_real_type (Val1)) Fct (Val1, Val2)           \
+                    : (sizeof (Val1) == sizeof (float))                      \
+                    ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2)        \
+                    : (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2)))
+
+# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2)) == 8)      \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      __tgml(Fct) (Val1, Val2)                               \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct (Val1, Val2)                                       \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct##f (Val1, Val2)))
+
+# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2)) == 8)      \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      __tgml(Fct) (Val1, Val2, Val3)                         \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct (Val1, Val2, Val3)                                 \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct##f (Val1, Val2, Val3)))
+
+# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double)                     \
+                      || sizeof (Val3) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2) + (Val3))   \
+                        == 8)                                                \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      __tgml(Fct) (Val1, Val2, Val3)                         \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || sizeof (Val3) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8                \
+                       || __builtin_classify_type (Val3) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      Fct (Val1, Val2, Val3)                                 \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      Fct##f (Val1, Val2, Val3)))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) Fct (Val)                \
+                       : (__tgmath_real_type (Val)) Cfct (Val))              \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) Fct##f (Val)             \
+                       : (__tgmath_real_type (Val)) Cfct##f (Val))           \
+                    : ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) __tgml(Fct) (Val)        \
+                       : (__tgmath_real_type (Val)) __tgml(Cfct) (Val))))
+
+# define __TGMATH_UNARY_IMAG(Val, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) Cfct (Val)                 \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) Cfct##f (Val)              \
+                    : (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) __tgml(Cfct) (Val)))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Fct (Val)                                           \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Cfct (Val))                                         \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Fct##f (Val)                                        \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Cfct##f (Val))                                      \
+                    : ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         __tgml(Fct) (Val)                                   \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         __tgml(Cfct) (Val))))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
+     (__extension__ (((sizeof (__real__ (Val1)) > sizeof (double)            \
+                      || sizeof (__real__ (Val2)) > sizeof (double))         \
+                     && __builtin_classify_type (__real__ (Val1)             \
+                                                 + __real__ (Val2)) == 8)    \
+                    ? ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         __tgml(Fct) (Val1, Val2)                            \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         __tgml(Cfct) (Val1, Val2))                          \
+                    : (sizeof (__real__ (Val1)) == sizeof (double)           \
+                       || sizeof (__real__ (Val2)) == sizeof (double)        \
+                       || __builtin_classify_type (__real__ (Val1)) != 8     \
+                       || __builtin_classify_type (__real__ (Val2)) != 8)    \
+                    ? ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Fct (Val1, Val2)                                    \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Cfct (Val1, Val2))                                  \
+                    : ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Fct##f (Val1, Val2)                                 \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Cfct##f (Val1, Val2))))
+#else
+# error "Unsupported compiler; you cannot use <tgmath.h>"
+#endif
+
+
+/* Unary functions defined for real and complex values.  */
+
+
+/* Trigonometric functions.  */
+
+/* Arc cosine of X.  */
+#define acos(Val) __TGMATH_UNARY_REAL_IMAG (Val, acos, cacos)
+/* Arc sine of X.  */
+#define asin(Val) __TGMATH_UNARY_REAL_IMAG (Val, asin, casin)
+/* Arc tangent of X.  */
+#define atan(Val) __TGMATH_UNARY_REAL_IMAG (Val, atan, catan)
+/* Arc tangent of Y/X.  */
+#define atan2(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, atan2)
+
+/* Cosine of X.  */
+#define cos(Val) __TGMATH_UNARY_REAL_IMAG (Val, cos, ccos)
+/* Sine of X.  */
+#define sin(Val) __TGMATH_UNARY_REAL_IMAG (Val, sin, csin)
+/* Tangent of X.  */
+#define tan(Val) __TGMATH_UNARY_REAL_IMAG (Val, tan, ctan)
+
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic arc cosine of X.  */
+#define acosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, acosh, cacosh)
+/* Hyperbolic arc sine of X.  */
+#define asinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, asinh, casinh)
+/* Hyperbolic arc tangent of X.  */
+#define atanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, atanh, catanh)
+
+/* Hyperbolic cosine of X.  */
+#define cosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, cosh, ccosh)
+/* Hyperbolic sine of X.  */
+#define sinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, sinh, csinh)
+/* Hyperbolic tangent of X.  */
+#define tanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, tanh, ctanh)
+
+
+/* Exponential and logarithmic functions.  */
+
+/* Exponential function of X.  */
+#define exp(Val) __TGMATH_UNARY_REAL_IMAG (Val, exp, cexp)
+
+/* Break VALUE into a normalized fraction and an integral power of 2.  */
+#define frexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, frexp)
+
+/* X times (two to the EXP power).  */
+#define ldexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, ldexp)
+
+/* Natural logarithm of X.  */
+#define log(Val) __TGMATH_UNARY_REAL_IMAG (Val, log, clog)
+
+/* Base-ten logarithm of X.  */
+#ifdef __USE_GNU
+# define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, __clog10)
+#else
+# define log10(Val) __TGMATH_UNARY_REAL_ONLY (Val, log10)
+#endif
+
+/* Return exp(X) - 1.  */
+#define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1)
+
+/* Return log(1 + X).  */
+#define log1p(Val) __TGMATH_UNARY_REAL_ONLY (Val, log1p)
+
+/* Return the base 2 signed integral exponent of X.  */
+#define logb(Val) __TGMATH_UNARY_REAL_ONLY (Val, logb)
+
+/* Compute base-2 exponential of X.  */
+#define exp2(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp2)
+
+/* Compute base-2 logarithm of X.  */
+#define log2(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2)
+
+
+/* Power functions.  */
+
+/* Return X to the Y power.  */
+#define pow(Val1, Val2) __TGMATH_BINARY_REAL_IMAG (Val1, Val2, pow, cpow)
+
+/* Return the square root of X.  */
+#define sqrt(Val) __TGMATH_UNARY_REAL_IMAG (Val, sqrt, csqrt)
+
+/* Return `sqrt(X*X + Y*Y)'.  */
+#define hypot(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, hypot)
+
+/* Return the cube root of X.  */
+#define cbrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, cbrt)
+
+
+/* Nearest integer, absolute value, and remainder functions.  */
+
+/* Smallest integral value not less than X.  */
+#define ceil(Val) __TGMATH_UNARY_REAL_ONLY (Val, ceil)
+
+/* Absolute value of X.  */
+#define fabs(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, fabs, cabs)
+
+/* Largest integer not greater than X.  */
+#define floor(Val) __TGMATH_UNARY_REAL_ONLY (Val, floor)
+
+/* Floating-point modulo remainder of X/Y.  */
+#define fmod(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmod)
+
+/* Round X to integral valuein floating-point format using current
+   rounding direction, but do not raise inexact exception.  */
+#define nearbyint(Val) __TGMATH_UNARY_REAL_ONLY (Val, nearbyint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define round(Val) __TGMATH_UNARY_REAL_ONLY (Val, round)
+
+/* Round X to the integral value in floating-point format nearest but
+   not larger in magnitude.  */
+#define trunc(Val) __TGMATH_UNARY_REAL_ONLY (Val, trunc)
+
+/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
+   and magnitude congruent `mod 2^n' to the magnitude of the integral
+   quotient x/y, with n >= 3.  */
+#define remquo(Val1, Val2, Val3) \
+     __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY (Val1, Val2, Val3, remquo)
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+#define lrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lrint)
+#define llrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llrint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define lround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lround)
+#define llround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llround)
+
+
+/* Return X with its signed changed to Y's.  */
+#define copysign(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, copysign)
+
+/* Error and gamma functions.  */
+#define erf(Val) __TGMATH_UNARY_REAL_ONLY (Val, erf)
+#define erfc(Val) __TGMATH_UNARY_REAL_ONLY (Val, erfc)
+#define tgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, tgamma)
+#define lgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, lgamma)
+
+
+/* Return the integer nearest X in the direction of the
+   prevailing rounding mode.  */
+#define rint(Val) __TGMATH_UNARY_REAL_ONLY (Val, rint)
+
+/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
+#define nextafter(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, nextafter)
+#define nexttoward(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, nexttoward)
+
+/* Return the remainder of integer divison X / Y with infinite precision.  */
+#define remainder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, remainder)
+
+/* Return X times (2 to the Nth power).  */
+#ifdef __USE_MISC
+# define scalb(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, scalb)
+#endif
+
+/* Return X times (2 to the Nth power).  */
+#define scalbn(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbn)
+
+/* Return X times (2 to the Nth power).  */
+#define scalbln(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
+
+/* Return the binary exponent of X, which must be nonzero.  */
+#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, int, ilogb)
+
+
+/* Return positive difference between X and Y.  */
+#define fdim(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fdim)
+
+/* Return maximum numeric value from X and Y.  */
+#define fmax(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmax)
+
+/* Return minimum numeric value from X and Y.  */
+#define fmin(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmin)
+
+
+/* Multiply-add function computed as a ternary operation.  */
+#define fma(Val1, Val2, Val3) \
+     __TGMATH_TERNARY_REAL_ONLY (Val1, Val2, Val3, fma)
+
+
+/* Absolute value, conjugates, and projection.  */
+
+/* Argument value of Z.  */
+#define carg(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, carg, carg)
+
+/* Complex conjugate of Z.  */
+#define conj(Val) __TGMATH_UNARY_IMAG (Val, conj)
+
+/* Projection of Z onto the Riemann sphere.  */
+#define cproj(Val) __TGMATH_UNARY_IMAG (Val, cproj)
+
+
+/* Decomposing complex values.  */
+
+/* Imaginary part of Z.  */
+#define cimag(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, cimag, cimag)
+
+/* Real part of Z.  */
+#define creal(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, creal, creal)
+
+#endif /* tgmath.h */
diff --git a/lib/libdss-include/include/thread_db.h b/lib/libdss-include/include/thread_db.h
new file mode 100644 (file)
index 0000000..abb95df
--- /dev/null
@@ -0,0 +1,458 @@
+/* thread_db.h -- interface to libthread_db.so library for debugging -lpthread
+   Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _THREAD_DB_H
+#define _THREAD_DB_H   1
+
+/* This is the debugger interface for the NPTL library.  It is
+   modelled closely after the interface with same names in Solaris
+   with the goal to share the same code in the debugger.  */
+#include <pthread.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/procfs.h>
+
+
+/* Error codes of the library.  */
+typedef enum
+{
+  TD_OK,         /* No error.  */
+  TD_ERR,        /* No further specified error.  */
+  TD_NOTHR,      /* No matching thread found.  */
+  TD_NOSV,       /* No matching synchronization handle found.  */
+  TD_NOLWP,      /* No matching light-weighted process found.  */
+  TD_BADPH,      /* Invalid process handle.  */
+  TD_BADTH,      /* Invalid thread handle.  */
+  TD_BADSH,      /* Invalid synchronization handle.  */
+  TD_BADTA,      /* Invalid thread agent.  */
+  TD_BADKEY,     /* Invalid key.  */
+  TD_NOMSG,      /* No event available.  */
+  TD_NOFPREGS,   /* No floating-point register content available.  */
+  TD_NOLIBTHREAD, /* Application not linked with thread library.  */
+  TD_NOEVENT,    /* Requested event is not supported.  */
+  TD_NOCAPAB,    /* Capability not available.  */
+  TD_DBERR,      /* Internal debug library error.  */
+  TD_NOAPLIC,    /* Operation is not applicable.  */
+  TD_NOTSD,      /* No thread-specific data available.  */
+  TD_MALLOC,     /* Out of memory.  */
+  TD_PARTIALREG,  /* Not entire register set was read or written.  */
+  TD_NOXREGS,    /* X register set not available for given thread.  */
+  TD_TLSDEFER,   /* Thread has not yet allocated TLS for given module.  */
+  TD_NOTALLOC = TD_TLSDEFER,
+  TD_VERSION,    /* Version if libpthread and libthread_db do not match.  */
+  TD_NOTLS       /* There is no TLS segment in the given module.  */
+} td_err_e;
+
+
+/* Possible thread states.  TD_THR_ANY_STATE is a pseudo-state used to
+   select threads regardless of state in td_ta_thr_iter().  */
+typedef enum
+{
+  TD_THR_ANY_STATE,
+  TD_THR_UNKNOWN,
+  TD_THR_STOPPED,
+  TD_THR_RUN,
+  TD_THR_ACTIVE,
+  TD_THR_ZOMBIE,
+  TD_THR_SLEEP,
+  TD_THR_STOPPED_ASLEEP
+} td_thr_state_e;
+
+/* Thread type: user or system.  TD_THR_ANY_TYPE is a pseudo-type used
+   to select threads regardless of type in td_ta_thr_iter().  */
+typedef enum
+{
+  TD_THR_ANY_TYPE,
+  TD_THR_USER,
+  TD_THR_SYSTEM
+} td_thr_type_e;
+
+
+/* Types of the debugging library.  */
+
+/* Handle for a process.  This type is opaque.  */
+typedef struct td_thragent td_thragent_t;
+
+/* The actual thread handle type.  This is also opaque.  */
+typedef struct td_thrhandle
+{
+  td_thragent_t *th_ta_p;
+  psaddr_t th_unique;
+} td_thrhandle_t;
+
+
+/* Forward declaration of a type defined by and for the dynamic linker.  */
+struct link_map;
+
+
+/* Flags for `td_ta_thr_iter'.  */
+#define TD_THR_ANY_USER_FLAGS  0xffffffff
+#define TD_THR_LOWEST_PRIORITY -20
+#define TD_SIGNO_MASK          NULL
+
+
+#define TD_EVENTSIZE   2
+#define BT_UISHIFT     5 /* log base 2 of BT_NBIPUI, to extract word index */
+#define BT_NBIPUI      (1 << BT_UISHIFT)       /* n bits per uint */
+#define BT_UIMASK      (BT_NBIPUI - 1)         /* to extract bit index */
+
+/* Bitmask of enabled events. */
+typedef struct td_thr_events
+{
+  uint32_t event_bits[TD_EVENTSIZE];
+} td_thr_events_t;
+
+/* Event set manipulation macros. */
+#define __td_eventmask(n) \
+  (UINT32_C (1) << (((n) - 1) & BT_UIMASK))
+#define __td_eventword(n) \
+  ((UINT32_C ((n) - 1)) >> BT_UISHIFT)
+
+#define td_event_emptyset(setp) \
+  do {                                                                       \
+    int __i;                                                                 \
+    for (__i = TD_EVENTSIZE; __i > 0; --__i)                                 \
+      (setp)->event_bits[__i - 1] = 0;                                       \
+  } while (0)
+
+#define td_event_fillset(setp) \
+  do {                                                                       \
+    int __i;                                                                 \
+    for (__i = TD_EVENTSIZE; __i > 0; --__i)                                 \
+      (setp)->event_bits[__i - 1] = UINT32_C (0xffffffff);                   \
+  } while (0)
+
+#define td_event_addset(setp, n) \
+  (((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n))
+#define td_event_delset(setp, n) \
+  (((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n))
+#define td_eventismember(setp, n) \
+  (__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)]))
+#if TD_EVENTSIZE == 2
+# define td_eventisempty(setp) \
+  (!((setp)->event_bits[0]) && !((setp)->event_bits[1]))
+#else
+# error "td_eventisempty must be changed to match TD_EVENTSIZE"
+#endif
+
+/* Events reportable by the thread implementation.  */
+typedef enum
+{
+  TD_ALL_EVENTS,                /* Pseudo-event number.  */
+  TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context.  */
+  TD_READY,                     /* Is executable now. */
+  TD_SLEEP,                     /* Blocked in a synchronization obj.  */
+  TD_SWITCHTO,                  /* Now assigned to a process.  */
+  TD_SWITCHFROM,                /* Not anymore assigned to a process.  */
+  TD_LOCK_TRY,                  /* Trying to get an unavailable lock.  */
+  TD_CATCHSIG,                  /* Signal posted to the thread.  */
+  TD_IDLE,                      /* Process getting idle.  */
+  TD_CREATE,                    /* New thread created.  */
+  TD_DEATH,                     /* Thread terminated.  */
+  TD_PREEMPT,                   /* Preempted.  */
+  TD_PRI_INHERIT,               /* Inherited elevated priority.  */
+  TD_REAP,                      /* Reaped.  */
+  TD_CONCURRENCY,               /* Number of processes changing.  */
+  TD_TIMEOUT,                   /* Conditional variable wait timed out.  */
+  TD_MIN_EVENT_NUM = TD_READY,
+  TD_MAX_EVENT_NUM = TD_TIMEOUT,
+  TD_EVENTS_ENABLE = 31                /* Event reporting enabled.  */
+} td_event_e;
+
+/* Values representing the different ways events are reported.  */
+typedef enum
+{
+  NOTIFY_BPT,                  /* User must insert breakpoint at u.bptaddr. */
+  NOTIFY_AUTOBPT,              /* Breakpoint at u.bptaddr is automatically
+                                  inserted.  */
+  NOTIFY_SYSCALL               /* System call u.syscallno will be invoked.  */
+} td_notify_e;
+
+/* Description how event type is reported.  */
+typedef struct td_notify
+{
+  td_notify_e type;            /* Way the event is reported.  */
+  union
+  {
+    psaddr_t bptaddr;          /* Address of breakpoint.  */
+    int syscallno;             /* Number of system call used.  */
+  } u;
+} td_notify_t;
+
+/* Structure used to report event.  */
+typedef struct td_event_msg
+{
+  td_event_e event;            /* Event type being reported.  */
+  const td_thrhandle_t *th_p;  /* Thread reporting the event.  */
+  union
+  {
+# if 0
+    td_synchandle_t *sh;       /* Handle of synchronization object.  */
+#endif
+    uintptr_t data;            /* Event specific data.  */
+  } msg;
+} td_event_msg_t;
+
+/* Structure containing event data available in each thread structure.  */
+typedef struct
+{
+  td_thr_events_t eventmask;   /* Mask of enabled events.  */
+  td_event_e eventnum;         /* Number of last event.  */
+  void *eventdata;             /* Data associated with event.  */
+} td_eventbuf_t;
+
+
+/* Gathered statistics about the process.  */
+typedef struct td_ta_stats
+{
+  int nthreads;                /* Total number of threads in use.  */
+  int r_concurrency;           /* Concurrency level requested by user.  */
+  int nrunnable_num;           /* Average runnable threads, numerator.  */
+  int nrunnable_den;           /* Average runnable threads, denominator.  */
+  int a_concurrency_num;       /* Achieved concurrency level, numerator.  */
+  int a_concurrency_den;       /* Achieved concurrency level, denominator.  */
+  int nlwps_num;               /* Average number of processes in use,
+                                  numerator.  */
+  int nlwps_den;               /* Average number of processes in use,
+                                  denominator.  */
+  int nidle_num;               /* Average number of idling processes,
+                                  numerator.  */
+  int nidle_den;               /* Average number of idling processes,
+                                  denominator.  */
+} td_ta_stats_t;
+
+
+/* Since Sun's library is based on Solaris threads we have to define a few
+   types to map them to POSIX threads.  */
+typedef pthread_t thread_t;
+typedef pthread_key_t thread_key_t;
+
+
+/* Callback for iteration over threads.  */
+typedef int td_thr_iter_f (const td_thrhandle_t *, void *);
+
+/* Callback for iteration over thread local data.  */
+typedef int td_key_iter_f (thread_key_t, void (*) (void *), void *);
+
+
+
+/* Forward declaration.  This has to be defined by the user.  */
+struct ps_prochandle;
+
+
+/* Information about the thread.  */
+typedef struct td_thrinfo
+{
+  td_thragent_t *ti_ta_p;              /* Process handle.  */
+  unsigned int ti_user_flags;          /* Unused.  */
+  thread_t ti_tid;                     /* Thread ID returned by
+                                          pthread_create().  */
+  char *ti_tls;                                /* Pointer to thread-local data.  */
+  psaddr_t ti_startfunc;               /* Start function passed to
+                                          pthread_create().  */
+  psaddr_t ti_stkbase;                 /* Base of thread's stack.  */
+  long int ti_stksize;                 /* Size of thread's stack.  */
+  psaddr_t ti_ro_area;                 /* Unused.  */
+  int ti_ro_size;                      /* Unused.  */
+  td_thr_state_e ti_state;             /* Thread state.  */
+  unsigned char ti_db_suspended;       /* Nonzero if suspended by debugger. */
+  td_thr_type_e ti_type;               /* Type of the thread (system vs
+                                          user thread).  */
+  intptr_t ti_pc;                      /* Unused.  */
+  intptr_t ti_sp;                      /* Unused.  */
+  short int ti_flags;                  /* Unused.  */
+  int ti_pri;                          /* Thread priority.  */
+  lwpid_t ti_lid;                      /* Kernel PID for this thread.  */
+  sigset_t ti_sigmask;                 /* Signal mask.  */
+  unsigned char ti_traceme;            /* Nonzero if event reporting
+                                          enabled.  */
+  unsigned char ti_preemptflag;                /* Unused.  */
+  unsigned char ti_pirecflag;          /* Unused.  */
+  sigset_t ti_pending;                 /* Set of pending signals.  */
+  td_thr_events_t ti_events;           /* Set of enabled events.  */
+} td_thrinfo_t;
+
+
+
+/* Prototypes for exported library functions.  */
+
+/* Initialize the thread debug support library.  */
+extern td_err_e td_init (void);
+
+/* Historical relict.  Should not be used anymore.  */
+extern td_err_e td_log (void);
+
+/* Return list of symbols the library can request.  */
+extern const char **td_symbol_list (void);
+
+/* Generate new thread debug library handle for process PS.  */
+extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
+
+/* Free resources allocated for TA.  */
+extern td_err_e td_ta_delete (td_thragent_t *__ta);
+
+/* Get number of currently running threads in process associated with TA.  */
+extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np);
+
+/* Return process handle passed in `td_ta_new' for process associated with
+   TA.  */
+extern td_err_e td_ta_get_ph (const td_thragent_t *__ta,
+                             struct ps_prochandle **__ph);
+
+/* Map thread library handle PT to thread debug library handle for process
+   associated with TA and store result in *TH.  */
+extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt,
+                                 td_thrhandle_t *__th);
+
+/* Map process ID LWPID to thread debug library handle for process
+   associated with TA and store result in *TH.  */
+extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
+                                  td_thrhandle_t *__th);
+
+
+/* Call for each thread in a process associated with TA the callback function
+   CALLBACK.  */
+extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
+                               td_thr_iter_f *__callback, void *__cbdata_p,
+                               td_thr_state_e __state, int __ti_pri,
+                               sigset_t *__ti_sigmask_p,
+                               unsigned int __ti_user_flags);
+
+/* Call for each defined thread local data entry the callback function KI.  */
+extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki,
+                               void *__p);
+
+
+/* Get event address for EVENT.  */
+extern td_err_e td_ta_event_addr (const td_thragent_t *__ta,
+                                 td_event_e __event, td_notify_t *__ptr);
+
+/* Enable EVENT in global mask.  */
+extern td_err_e td_ta_set_event (const td_thragent_t *__ta,
+                                td_thr_events_t *__event);
+
+/* Disable EVENT in global mask.  */
+extern td_err_e td_ta_clear_event (const td_thragent_t *__ta,
+                                  td_thr_events_t *__event);
+
+/* Return information about last event.  */
+extern td_err_e td_ta_event_getmsg (const td_thragent_t *__ta,
+                                   td_event_msg_t *__msg);
+
+
+/* Set suggested concurrency level for process associated with TA.  */
+extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level);
+
+
+/* Enable collecting statistics for process associated with TA.  */
+extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
+
+/* Reset statistics.  */
+extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
+
+/* Retrieve statistics from process associated with TA.  */
+extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
+                                td_ta_stats_t *__statsp);
+
+
+/* Validate that TH is a thread handle.  */
+extern td_err_e td_thr_validate (const td_thrhandle_t *__th);
+
+/* Return information about thread TH.  */
+extern td_err_e td_thr_get_info (const td_thrhandle_t *__th,
+                                td_thrinfo_t *__infop);
+
+/* Retrieve floating-point register contents of process running thread TH.  */
+extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th,
+                                 prfpregset_t *__regset);
+
+/* Retrieve general register contents of process running thread TH.  */
+extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th,
+                                prgregset_t __gregs);
+
+/* Retrieve extended register contents of process running thread TH.  */
+extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs);
+
+/* Get size of extended register set of process running thread TH.  */
+extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep);
+
+/* Set floating-point register contents of process running thread TH.  */
+extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th,
+                                 const prfpregset_t *__fpregs);
+
+/* Set general register contents of process running thread TH.  */
+extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th,
+                                prgregset_t __gregs);
+
+/* Set extended register contents of process running thread TH.  */
+extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th,
+                                const void *__addr);
+
+
+/* Get address of the given module's TLS storage area for the given thread.  */
+extern td_err_e td_thr_tlsbase (const td_thrhandle_t *__th,
+                               unsigned long int __modid,
+                               psaddr_t *__base);
+
+/* Get address of thread local variable.  */
+extern td_err_e td_thr_tls_get_addr (const td_thrhandle_t *__th,
+                                    psaddr_t __map_address, size_t __offset,
+                                    psaddr_t *__address);
+
+
+/* Enable reporting for EVENT for thread TH.  */
+extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event);
+
+/* Enable EVENT for thread TH.  */
+extern td_err_e td_thr_set_event (const td_thrhandle_t *__th,
+                                 td_thr_events_t *__event);
+
+/* Disable EVENT for thread TH.  */
+extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th,
+                                   td_thr_events_t *__event);
+
+/* Get event message for thread TH.  */
+extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th,
+                                    td_event_msg_t *__msg);
+
+
+/* Set priority of thread TH.  */
+extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio);
+
+
+/* Set pending signals for thread TH.  */
+extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th,
+                                     unsigned char __n, const sigset_t *__ss);
+
+/* Set signal mask for thread TH.  */
+extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th,
+                                  const sigset_t *__ss);
+
+
+/* Return thread local data associated with key TK in thread TH.  */
+extern td_err_e td_thr_tsd (const td_thrhandle_t *__th,
+                           const thread_key_t __tk, void **__data);
+
+
+/* Suspend execution of thread TH.  */
+extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th);
+
+/* Resume execution of thread TH.  */
+extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th);
+
+#endif /* thread_db.h */
diff --git a/lib/libdss-include/include/time.h b/lib/libdss-include/include/time.h
new file mode 100644 (file)
index 0000000..cc93917
--- /dev/null
@@ -0,0 +1,434 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.23 Date and time    <time.h>
+ */
+
+#ifndef        _TIME_H
+
+#if (! defined __need_time_t && !defined __need_clock_t && \
+     ! defined __need_timespec)
+# define _TIME_H       1
+# include <features.h>
+
+__BEGIN_DECLS
+
+#endif
+
+#ifdef _TIME_H
+/* Get size_t and NULL from <stddef.h>.  */
+# define __need_size_t
+# define __need_NULL
+# include <stddef.h>
+
+/* This defines CLOCKS_PER_SEC, which is the number of processor clock
+   ticks per second.  */
+# include <bits/time.h>
+
+/* This is the obsolete POSIX.1-1988 name for the same constant.  */
+# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+#  ifndef CLK_TCK
+#   define CLK_TCK     CLOCKS_PER_SEC
+#  endif
+# endif
+
+#endif /* <time.h> included.  */
+
+#if !defined __clock_t_defined && (defined _TIME_H || defined __need_clock_t)
+# define __clock_t_defined     1
+
+# include <bits/types.h>
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `clock'.  */
+typedef __clock_t clock_t;
+__END_NAMESPACE_STD
+#if defined __USE_XOPEN || defined __USE_POSIX
+__USING_NAMESPACE_STD(clock_t)
+#endif
+
+#endif /* clock_t not defined and <time.h> or need clock_t.  */
+#undef __need_clock_t
+
+#if !defined __time_t_defined && (defined _TIME_H || defined __need_time_t)
+# define __time_t_defined      1
+
+# include <bits/types.h>
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `time'.  */
+typedef __time_t time_t;
+__END_NAMESPACE_STD
+#ifdef __USE_POSIX
+__USING_NAMESPACE_STD(time_t)
+#endif
+
+#endif /* time_t not defined and <time.h> or need time_t.  */
+#undef __need_time_t
+
+#if !defined __clockid_t_defined && \
+   ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_clockid_t)
+# define __clockid_t_defined   1
+
+# include <bits/types.h>
+
+/* Clock ID used in clock and timer functions.  */
+typedef __clockid_t clockid_t;
+
+#endif /* clockid_t not defined and <time.h> or need clockid_t.  */
+#undef __clockid_time_t
+
+#if !defined __timer_t_defined && \
+    ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_timer_t)
+# define __timer_t_defined     1
+
+# include <bits/types.h>
+
+/* Timer ID returned by `timer_create'.  */
+typedef __timer_t timer_t;
+
+#endif /* timer_t not defined and <time.h> or need timer_t.  */
+#undef __need_timer_t
+
+
+#if (!defined __timespec_defined                                       \
+     && ((defined _TIME_H                                              \
+         && (defined __USE_POSIX199309                                 \
+             || defined __USE_ISOC11))                                 \
+        || defined __need_timespec))
+# define __timespec_defined    1
+
+# include <bits/types.h>       /* This defines __time_t for us.  */
+
+/* POSIX.1b structure for a time value.  This is like a `struct timeval' but
+   has nanoseconds instead of microseconds.  */
+struct timespec
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __syscall_slong_t tv_nsec; /* Nanoseconds.  */
+  };
+
+#endif /* timespec not defined and <time.h> or need timespec.  */
+#undef __need_timespec
+
+
+#ifdef _TIME_H
+__BEGIN_NAMESPACE_STD
+/* Used by other time functions.  */
+struct tm
+{
+  int tm_sec;                  /* Seconds.     [0-60] (1 leap second) */
+  int tm_min;                  /* Minutes.     [0-59] */
+  int tm_hour;                 /* Hours.       [0-23] */
+  int tm_mday;                 /* Day.         [1-31] */
+  int tm_mon;                  /* Month.       [0-11] */
+  int tm_year;                 /* Year - 1900.  */
+  int tm_wday;                 /* Day of week. [0-6] */
+  int tm_yday;                 /* Days in year.[0-365] */
+  int tm_isdst;                        /* DST.         [-1/0/1]*/
+
+# ifdef        __USE_MISC
+  long int tm_gmtoff;          /* Seconds east of UTC.  */
+  const char *tm_zone;         /* Timezone abbreviation.  */
+# else
+  long int __tm_gmtoff;                /* Seconds east of UTC.  */
+  const char *__tm_zone;       /* Timezone abbreviation.  */
+# endif
+};
+__END_NAMESPACE_STD
+#if defined __USE_XOPEN || defined __USE_POSIX
+__USING_NAMESPACE_STD(tm)
+#endif
+
+
+# ifdef __USE_POSIX199309
+/* POSIX.1b structure for timer start values and intervals.  */
+struct itimerspec
+  {
+    struct timespec it_interval;
+    struct timespec it_value;
+  };
+
+/* We can use a simple forward declaration.  */
+struct sigevent;
+
+# endif        /* POSIX.1b */
+
+# ifdef __USE_XOPEN2K
+#  ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#   define __pid_t_defined
+#  endif
+# endif
+
+
+# ifdef __USE_ISOC11
+/* Time base values for timespec_get.  */
+# define TIME_UTC 1
+# endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Time used by the program so far (user time + system time).
+   The result / CLOCKS_PER_SECOND is program time in seconds.  */
+extern clock_t clock (void) __THROW;
+
+/* Return the current time and put it in *TIMER if TIMER is not NULL.  */
+extern time_t time (time_t *__timer) __THROW;
+
+/* Return the difference between TIME1 and TIME0.  */
+extern double difftime (time_t __time1, time_t __time0)
+     __THROW __attribute__ ((__const__));
+
+/* Return the `time_t' representation of TP and normalize TP.  */
+extern time_t mktime (struct tm *__tp) __THROW;
+
+
+/* Format TP into S according to FORMAT.
+   Write no more than MAXSIZE characters and return the number
+   of characters written, or 0 if it would exceed MAXSIZE.  */
+extern size_t strftime (char *__restrict __s, size_t __maxsize,
+                       const char *__restrict __format,
+                       const struct tm *__restrict __tp) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_XOPEN
+/* Parse S according to FORMAT and store binary time information in TP.
+   The return value is a pointer to the first unparsed character in S.  */
+extern char *strptime (const char *__restrict __s,
+                      const char *__restrict __fmt, struct tm *__tp)
+     __THROW;
+# endif
+
+# ifdef __USE_XOPEN2K8
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+# include <xlocale.h>
+
+extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+                         const char *__restrict __format,
+                         const struct tm *__restrict __tp,
+                         __locale_t __loc) __THROW;
+# endif
+
+# ifdef __USE_GNU
+extern char *strptime_l (const char *__restrict __s,
+                        const char *__restrict __fmt, struct tm *__tp,
+                        __locale_t __loc) __THROW;
+# endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the `struct tm' representation of *TIMER
+   in Universal Coordinated Time (aka Greenwich Mean Time).  */
+extern struct tm *gmtime (const time_t *__timer) __THROW;
+
+/* Return the `struct tm' representation
+   of *TIMER in the local timezone.  */
+extern struct tm *localtime (const time_t *__timer) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_POSIX
+/* Return the `struct tm' representation of *TIMER in UTC,
+   using *TP to store the result.  */
+extern struct tm *gmtime_r (const time_t *__restrict __timer,
+                           struct tm *__restrict __tp) __THROW;
+
+/* Return the `struct tm' representation of *TIMER in local time,
+   using *TP to store the result.  */
+extern struct tm *localtime_r (const time_t *__restrict __timer,
+                              struct tm *__restrict __tp) __THROW;
+# endif        /* POSIX */
+
+__BEGIN_NAMESPACE_STD
+/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+   that is the representation of TP in this format.  */
+extern char *asctime (const struct tm *__tp) __THROW;
+
+/* Equivalent to `asctime (localtime (timer))'.  */
+extern char *ctime (const time_t *__timer) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_POSIX
+/* Reentrant versions of the above functions.  */
+
+/* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+   that is the representation of TP in this format.  */
+extern char *asctime_r (const struct tm *__restrict __tp,
+                       char *__restrict __buf) __THROW;
+
+/* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
+extern char *ctime_r (const time_t *__restrict __timer,
+                     char *__restrict __buf) __THROW;
+# endif        /* POSIX */
+
+
+/* Defined in localtime.c.  */
+extern char *__tzname[2];      /* Current timezone names.  */
+extern int __daylight;         /* If daylight-saving time is ever in use.  */
+extern long int __timezone;    /* Seconds west of UTC.  */
+
+
+# ifdef        __USE_POSIX
+/* Same as above.  */
+extern char *tzname[2];
+
+/* Set time conversion information from the TZ environment variable.
+   If TZ is not defined, a locale-dependent default is used.  */
+extern void tzset (void) __THROW;
+# endif
+
+# if defined __USE_MISC || defined __USE_XOPEN
+extern int daylight;
+extern long int timezone;
+# endif
+
+# ifdef __USE_MISC
+/* Set the system time to *WHEN.
+   This call is restricted to the superuser.  */
+extern int stime (const time_t *__when) __THROW;
+# endif
+
+
+/* Nonzero if YEAR is a leap year (every 4 years,
+   except every 100th isn't, and every 400th is).  */
+# define __isleap(year)        \
+  ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
+
+
+# ifdef __USE_MISC
+/* Miscellaneous functions many Unices inherited from the public domain
+   localtime package.  These are included only for compatibility.  */
+
+/* Like `mktime', but for TP represents Universal Time, not local time.  */
+extern time_t timegm (struct tm *__tp) __THROW;
+
+/* Another name for `mktime'.  */
+extern time_t timelocal (struct tm *__tp) __THROW;
+
+/* Return the number of days in YEAR.  */
+extern int dysize (int __year) __THROW  __attribute__ ((__const__));
+# endif
+
+
+# ifdef __USE_POSIX199309
+/* Pause execution for a number of nanoseconds.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int nanosleep (const struct timespec *__requested_time,
+                     struct timespec *__remaining);
+
+
+/* Get resolution of clock CLOCK_ID.  */
+extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
+
+/* Get current value of clock CLOCK_ID and store it in TP.  */
+extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
+
+/* Set clock CLOCK_ID to value TP.  */
+extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
+     __THROW;
+
+#  ifdef __USE_XOPEN2K
+/* High-resolution sleep with the specified clock.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+                           const struct timespec *__req,
+                           struct timespec *__rem);
+
+/* Return clock ID for CPU-time clock.  */
+extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW;
+#  endif
+
+
+/* Create new per-process timer using CLOCK_ID.  */
+extern int timer_create (clockid_t __clock_id,
+                        struct sigevent *__restrict __evp,
+                        timer_t *__restrict __timerid) __THROW;
+
+/* Delete timer TIMERID.  */
+extern int timer_delete (timer_t __timerid) __THROW;
+
+/* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
+extern int timer_settime (timer_t __timerid, int __flags,
+                         const struct itimerspec *__restrict __value,
+                         struct itimerspec *__restrict __ovalue) __THROW;
+
+/* Get current value of timer TIMERID and store it in VALUE.  */
+extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
+     __THROW;
+
+/* Get expiration overrun for timer TIMERID.  */
+extern int timer_getoverrun (timer_t __timerid) __THROW;
+# endif
+
+
+# ifdef __USE_ISOC11
+/* Set TS to calendar time based in time base BASE.  */
+extern int timespec_get (struct timespec *__ts, int __base)
+     __THROW __nonnull ((1));
+# endif
+
+
+# ifdef __USE_XOPEN_EXTENDED
+/* Set to one of the following values to indicate an error.
+     1  the DATEMSK environment variable is null or undefined,
+     2  the template file cannot be opened for reading,
+     3  failed to get file status information,
+     4  the template file is not a regular file,
+     5  an error is encountered while reading the template file,
+     6  memory allication failed (not enough memory available),
+     7  there is no line in the template that matches the input,
+     8  invalid input specification Example: February 31 or a time is
+       specified that can not be represented in a time_t (representing
+       the time in seconds since 00:00:00 UTC, January 1, 1970) */
+extern int getdate_err;
+
+/* Parse the given string as a date specification and return a value
+   representing the value.  The templates from the file identified by
+   the environment variable DATEMSK are used.  In case of an error
+   `getdate_err' is set.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct tm *getdate (const char *__string);
+# endif
+
+# ifdef __USE_GNU
+/* Since `getdate' is not reentrant because of the use of `getdate_err'
+   and the static buffer to return the result in, we provide a thread-safe
+   variant.  The functionality is the same.  The result is returned in
+   the buffer pointed to by RESBUFP and in case of an error the return
+   value is != 0 with the same values as given above for `getdate_err'.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getdate_r (const char *__restrict __string,
+                     struct tm *__restrict __resbufp);
+# endif
+
+__END_DECLS
+
+#endif /* <time.h> included.  */
+
+#endif /* <time.h> not already included.  */
diff --git a/lib/libdss-include/include/ttyent.h b/lib/libdss-include/include/ttyent.h
new file mode 100644 (file)
index 0000000..fe418a5
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttyent.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _TTYENT_H
+#define        _TTYENT_H       1
+
+#include <features.h>
+
+#define        _PATH_TTYS      "/etc/ttys"
+
+#define        _TTYS_OFF       "off"
+#define        _TTYS_ON        "on"
+#define        _TTYS_SECURE    "secure"
+#define        _TTYS_WINDOW    "window"
+
+struct ttyent {
+       char    *ty_name;       /* terminal device name */
+       char    *ty_getty;      /* command to execute, usually getty */
+       char    *ty_type;       /* terminal type for termcap */
+#define        TTY_ON          0x01    /* enable logins (start ty_getty program) */
+#define        TTY_SECURE      0x02    /* allow uid of 0 to login */
+       int     ty_status;      /* status flags */
+       char    *ty_window;     /* command to start up window manager */
+       char    *ty_comment;    /* comment field */
+};
+
+
+__BEGIN_DECLS
+
+extern struct ttyent *getttyent (void) __THROW;
+extern struct ttyent *getttynam (const char *__tty) __THROW;
+extern int setttyent (void) __THROW;
+extern int endttyent (void) __THROW;
+
+__END_DECLS
+
+#endif /* ttyent.h */
diff --git a/lib/libdss-include/include/uchar.h b/lib/libdss-include/include/uchar.h
new file mode 100644 (file)
index 0000000..ce92b25
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *      ISO C11 Standard: 7.28
+ *     Unicode utilities       <uchar.h>
+ */
+
+#ifndef _UCHAR_H
+#define _UCHAR_H       1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+#define __need_mbstate_t
+#include <wchar.h>
+
+#ifndef __mbstate_t_defined
+__BEGIN_NAMESPACE_C99
+/* Public type.  */
+typedef __mbstate_t mbstate_t;
+__END_NAMESPACE_C99
+# define __mbstate_t_defined 1
+#endif
+
+
+#if defined __GNUC__ && !defined __USE_ISOCXX11
+/* Define the 16-bit and 32-bit character types.  Use the information
+   provided by the compiler.  */
+# if !defined __CHAR16_TYPE__ || !defined __CHAR32_TYPE__
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ < 201000L
+#   error "<uchar.h> requires ISO C11 mode"
+#  else
+#   error "definitions of __CHAR16_TYPE__ and/or __CHAR32_TYPE__ missing"
+#  endif
+# endif
+typedef __CHAR16_TYPE__ char16_t;
+typedef __CHAR32_TYPE__ char32_t;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Write char16_t representation of multibyte character pointed
+   to by S to PC16.  */
+extern size_t mbrtoc16 (char16_t *__restrict __pc16,
+                       const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of char16_t C16 to S.  */
+extern size_t c16rtomb (char *__restrict __s, char16_t __c16,
+                       mbstate_t *__restrict __ps) __THROW;
+
+
+
+/* Write char32_t representation of multibyte character pointed
+   to by S to PC32.  */
+extern size_t mbrtoc32 (char32_t *__restrict __pc32,
+                       const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of char32_t C32 to S.  */
+extern size_t c32rtomb (char *__restrict __s, char32_t __c32,
+                       mbstate_t *__restrict __ps) __THROW;
+
+__END_DECLS
+
+#endif /* uchar.h */
diff --git a/lib/libdss-include/include/ucontext.h b/lib/libdss-include/include/ucontext.h
new file mode 100644 (file)
index 0000000..813a24d
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* System V ABI compliant user-level context switching support.  */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H    1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures.  */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP.  */
+extern int getcontext (ucontext_t *__ucp) __THROWNL;
+
+/* Set user context from information of variable pointed to by UCP.  */
+extern int setcontext (const ucontext_t *__ucp) __THROWNL;
+
+/* Save current context in context variable pointed to by OUCP and set
+   context from variable pointed to by UCP.  */
+extern int swapcontext (ucontext_t *__restrict __oucp,
+                       const ucontext_t *__restrict __ucp) __THROWNL;
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+   and the ARGC-1 parameters following ARGC when the context is used
+   the next time in `setcontext' or `swapcontext'.
+
+   We cannot say anything about the parameters FUNC takes; `void'
+   is as good as any other choice.  */
+extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
+                        int __argc, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/lib/libdss-include/include/ulimit.h b/lib/libdss-include/include/ulimit.h
new file mode 100644 (file)
index 0000000..aefc1b9
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ULIMIT_H
+#define _ULIMIT_H      1
+
+#include <features.h>
+
+/* Constants used as the first parameter for `ulimit'.  They denote limits
+   which can be set or retrieved using this function.  */
+enum
+{
+  UL_GETFSIZE = 1,                     /* Return limit on the size of a file,
+                                          in units of 512 bytes.  */
+#define UL_GETFSIZE    UL_GETFSIZE
+  UL_SETFSIZE,                         /* Set limit on the size of a file to
+                                          second argument.  */
+#define UL_SETFSIZE    UL_SETFSIZE
+  __UL_GETMAXBRK,                      /* Return the maximum possible address
+                                          of the data segment.  */
+  __UL_GETOPENMAX                      /* Return the maximum number of files
+                                          that the calling process can open.*/
+};
+
+
+__BEGIN_DECLS
+
+/* Control process limits according to CMD.  */
+extern long int ulimit (int __cmd, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ulimit.h */
diff --git a/lib/libdss-include/include/unistd.h b/lib/libdss-include/include/unistd.h
new file mode 100644 (file)
index 0000000..405638c
--- /dev/null
@@ -0,0 +1,1156 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.10 Symbolic Constants         <unistd.h>
+ */
+
+#ifndef        _UNISTD_H
+#define        _UNISTD_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* These may be used to determine what facilities are present at compile time.
+   Their values can be obtained at run time from `sysconf'.  */
+
+#ifdef __USE_XOPEN2K8
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 2008.  */
+# define _POSIX_VERSION        200809L
+#elif defined __USE_XOPEN2K
+/* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001.  */
+# define _POSIX_VERSION        200112L
+#elif defined __USE_POSIX199506
+/* POSIX Standard approved as ISO/IEC 9945-1 as of June 1995.  */
+# define _POSIX_VERSION        199506L
+#elif defined __USE_POSIX199309
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1993.  */
+# define _POSIX_VERSION        199309L
+#else
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1990.  */
+# define _POSIX_VERSION        199009L
+#endif
+
+/* These are not #ifdef __USE_POSIX2 because they are
+   in the theoretically application-owned namespace.  */
+
+#ifdef __USE_XOPEN2K8
+# define __POSIX2_THIS_VERSION 200809L
+/* The utilities on GNU systems also correspond to this version.  */
+#elif defined __USE_XOPEN2K
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 200112L
+#elif defined __USE_POSIX199506
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 199506L
+#else
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 199209L
+#endif
+
+/* The utilities on GNU systems also correspond to this version.  */
+#define _POSIX2_VERSION        __POSIX2_THIS_VERSION
+
+/* This symbol was required until the 2001 edition of POSIX.  */
+#define        _POSIX2_C_VERSION       __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   C Language Bindings Option.  */
+#define        _POSIX2_C_BIND  __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   C Language Development Utilities Option.  */
+#define        _POSIX2_C_DEV   __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   Software Development Utilities Option.  */
+#define        _POSIX2_SW_DEV  __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   creation of locales with the localedef utility.  */
+#define _POSIX2_LOCALEDEF       __POSIX2_THIS_VERSION
+
+/* X/Open version number to which the library conforms.  It is selectable.  */
+#ifdef __USE_XOPEN2K8
+# define _XOPEN_VERSION        700
+#elif defined __USE_XOPEN2K
+# define _XOPEN_VERSION        600
+#elif defined __USE_UNIX98
+# define _XOPEN_VERSION        500
+#else
+# define _XOPEN_VERSION        4
+#endif
+
+/* Commands and utilities from XPG4 are available.  */
+#define _XOPEN_XCU_VERSION     4
+
+/* We are compatible with the old published standards as well.  */
+#define _XOPEN_XPG2    1
+#define _XOPEN_XPG3    1
+#define _XOPEN_XPG4    1
+
+/* The X/Open Unix extensions are available.  */
+#define _XOPEN_UNIX    1
+
+/* Encryption is present.  */
+#define        _XOPEN_CRYPT    1
+
+/* The enhanced internationalization capabilities according to XPG4.2
+   are present.  */
+#define        _XOPEN_ENH_I18N 1
+
+/* The legacy interfaces are also available.  */
+#define _XOPEN_LEGACY  1
+
+
+/* Get values of POSIX options:
+
+   If these symbols are defined, the corresponding features are
+   always available.  If not, they may be available sometimes.
+   The current values can be obtained with `sysconf'.
+
+   _POSIX_JOB_CONTROL          Job control is supported.
+   _POSIX_SAVED_IDS            Processes have a saved set-user-ID
+                               and a saved set-group-ID.
+   _POSIX_REALTIME_SIGNALS     Real-time, queued signals are supported.
+   _POSIX_PRIORITY_SCHEDULING  Priority scheduling is supported.
+   _POSIX_TIMERS               POSIX.4 clocks and timers are supported.
+   _POSIX_ASYNCHRONOUS_IO      Asynchronous I/O is supported.
+   _POSIX_PRIORITIZED_IO       Prioritized asynchronous I/O is supported.
+   _POSIX_SYNCHRONIZED_IO      Synchronizing file data is supported.
+   _POSIX_FSYNC                        The fsync function is present.
+   _POSIX_MAPPED_FILES         Mapping of files to memory is supported.
+   _POSIX_MEMLOCK              Locking of all memory is supported.
+   _POSIX_MEMLOCK_RANGE                Locking of ranges of memory is supported.
+   _POSIX_MEMORY_PROTECTION    Setting of memory protections is supported.
+   _POSIX_MESSAGE_PASSING      POSIX.4 message queues are supported.
+   _POSIX_SEMAPHORES           POSIX.4 counting semaphores are supported.
+   _POSIX_SHARED_MEMORY_OBJECTS        POSIX.4 shared memory objects are supported.
+   _POSIX_THREADS              POSIX.1c pthreads are supported.
+   _POSIX_THREAD_ATTR_STACKADDR        Thread stack address attribute option supported.
+   _POSIX_THREAD_ATTR_STACKSIZE        Thread stack size attribute option supported.
+   _POSIX_THREAD_SAFE_FUNCTIONS        Thread-safe functions are supported.
+   _POSIX_THREAD_PRIORITY_SCHEDULING
+                               POSIX.1c thread execution scheduling supported.
+   _POSIX_THREAD_PRIO_INHERIT  Thread priority inheritance option supported.
+   _POSIX_THREAD_PRIO_PROTECT  Thread priority protection option supported.
+   _POSIX_THREAD_PROCESS_SHARED        Process-shared synchronization supported.
+   _POSIX_PII                  Protocol-independent interfaces are supported.
+   _POSIX_PII_XTI              XTI protocol-indep. interfaces are supported.
+   _POSIX_PII_SOCKET           Socket protocol-indep. interfaces are supported.
+   _POSIX_PII_INTERNET         Internet family of protocols supported.
+   _POSIX_PII_INTERNET_STREAM  Connection-mode Internet protocol supported.
+   _POSIX_PII_INTERNET_DGRAM   Connectionless Internet protocol supported.
+   _POSIX_PII_OSI              ISO/OSI family of protocols supported.
+   _POSIX_PII_OSI_COTS         Connection-mode ISO/OSI service supported.
+   _POSIX_PII_OSI_CLTS         Connectionless ISO/OSI service supported.
+   _POSIX_POLL                 Implementation supports `poll' function.
+   _POSIX_SELECT               Implementation supports `select' and `pselect'.
+
+   _XOPEN_REALTIME             X/Open realtime support is available.
+   _XOPEN_REALTIME_THREADS     X/Open realtime thread support is available.
+   _XOPEN_SHM                  Shared memory interface according to XPG4.2.
+
+   _XBS5_ILP32_OFF32           Implementation provides environment with 32-bit
+                               int, long, pointer, and off_t types.
+   _XBS5_ILP32_OFFBIG          Implementation provides environment with 32-bit
+                               int, long, and pointer and off_t with at least
+                               64 bits.
+   _XBS5_LP64_OFF64            Implementation provides environment with 32-bit
+                               int, and 64-bit long, pointer, and off_t types.
+   _XBS5_LPBIG_OFFBIG          Implementation provides environment with at
+                               least 32 bits int and long, pointer, and off_t
+                               with at least 64 bits.
+
+   If any of these symbols is defined as -1, the corresponding option is not
+   true for any file.  If any is defined as other than -1, the corresponding
+   option is true for all files.  If a symbol is not defined at all, the value
+   for a specific file can be obtained from `pathconf' and `fpathconf'.
+
+   _POSIX_CHOWN_RESTRICTED     Only the super user can use `chown' to change
+                               the owner of a file.  `chown' can only be used
+                               to change the group ID of a file to a group of
+                               which the calling process is a member.
+   _POSIX_NO_TRUNC             Pathname components longer than
+                               NAME_MAX generate an error.
+   _POSIX_VDISABLE             If defined, if the value of an element of the
+                               `c_cc' member of `struct termios' is
+                               _POSIX_VDISABLE, no character will have the
+                               effect associated with that element.
+   _POSIX_SYNC_IO              Synchronous I/O may be performed.
+   _POSIX_ASYNC_IO             Asynchronous I/O may be performed.
+   _POSIX_PRIO_IO              Prioritized Asynchronous I/O may be performed.
+
+   Support for the Large File Support interface is not generally available.
+   If it is available the following constants are defined to one.
+   _LFS64_LARGEFILE            Low-level I/O supports large files.
+   _LFS64_STDIO                        Standard I/O supports large files.
+   */
+
+#include <bits/posix_opt.h>
+
+/* Get the environment definitions from Unix98.  */
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+# include <bits/environments.h>
+#endif
+
+/* Standard file descriptors.  */
+#define        STDIN_FILENO    0       /* Standard input.  */
+#define        STDOUT_FILENO   1       /* Standard output.  */
+#define        STDERR_FILENO   2       /* Standard error output.  */
+
+
+/* All functions that are not declared anywhere else.  */
+
+#include <bits/types.h>
+
+#ifndef        __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+#define        __need_size_t
+#define __need_NULL
+#include <stddef.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+
+# ifndef __off_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
+#  define __off_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+#  define __off64_t_defined
+# endif
+
+# ifndef __useconds_t_defined
+typedef __useconds_t useconds_t;
+#  define __useconds_t_defined
+# endif
+
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif /* X/Open */
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+# ifndef __intptr_t_defined
+typedef __intptr_t intptr_t;
+#  define __intptr_t_defined
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+#  define __socklen_t_defined
+# endif
+#endif
+
+/* Values for the second argument to access.
+   These may be OR'd together.  */
+#define        R_OK    4               /* Test for read permission.  */
+#define        W_OK    2               /* Test for write permission.  */
+#define        X_OK    1               /* Test for execute permission.  */
+#define        F_OK    0               /* Test for existence.  */
+
+/* Test for access to NAME using the real UID and real GID.  */
+extern int access (const char *__name, int __type) __THROW __nonnull ((1));
+
+#ifdef __USE_GNU
+/* Test for access to NAME using the effective UID and GID
+   (as normal file operations use).  */
+extern int euidaccess (const char *__name, int __type)
+     __THROW __nonnull ((1));
+
+/* An alias for `euidaccess', used by some other systems.  */
+extern int eaccess (const char *__name, int __type)
+     __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_ATFILE
+/* Test for access to FILE relative to the directory FD is open on.
+   If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess',
+   otherwise use real IDs like `access'.  */
+extern int faccessat (int __fd, const char *__file, int __type, int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use GNU.  */
+
+
+/* Values for the WHENCE argument to lseek.  */
+#ifndef        _STDIO_H                /* <stdio.h> has the same definitions.  */
+# define SEEK_SET      0       /* Seek from beginning of file.  */
+# define SEEK_CUR      1       /* Seek from current position.  */
+# define SEEK_END      2       /* Seek from end of file.  */
+# ifdef __USE_GNU
+#  define SEEK_DATA    3       /* Seek to next data.  */
+#  define SEEK_HOLE    4       /* Seek to next hole.  */
+# endif
+#endif
+
+#if defined __USE_MISC && !defined L_SET
+/* Old BSD names for the same constants; just for compatibility.  */
+# define L_SET         SEEK_SET
+# define L_INCR                SEEK_CUR
+# define L_XTND                SEEK_END
+#endif
+
+
+/* Move FD's file position to OFFSET bytes from the
+   beginning of the file (if WHENCE is SEEK_SET),
+   the current position (if WHENCE is SEEK_CUR),
+   or the end of the file (if WHENCE is SEEK_END).
+   Return the new file position.  */
+#ifndef __USE_FILE_OFFSET64
+extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern __off64_t __REDIRECT_NTH (lseek,
+                                (int __fd, __off64_t __offset, int __whence),
+                                lseek64);
+# else
+#  define lseek lseek64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
+     __THROW;
+#endif
+
+/* Close the file descriptor FD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int close (int __fd);
+
+/* Read NBYTES into BUF from FD.  Return the
+   number read, -1 for errors or 0 for EOF.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
+
+/* Write N bytes of BUF to FD.  Return the number written, or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# ifndef __USE_FILE_OFFSET64
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+   changing the file pointer.  Return the number read, -1 for errors
+   or 0 for EOF.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
+                     __off_t __offset) __wur;
+
+/* Write N bytes of BUF to FD at the given position OFFSET without
+   changing the file pointer.  Return the number written, or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
+                      __off_t __offset) __wur;
+# else
+#  ifdef __REDIRECT
+extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes,
+                                  __off64_t __offset),
+                          pread64) __wur;
+extern ssize_t __REDIRECT (pwrite, (int __fd, const void *__buf,
+                                   size_t __nbytes, __off64_t __offset),
+                          pwrite64) __wur;
+#  else
+#   define pread pread64
+#   define pwrite pwrite64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+   changing the file pointer.  Return the number read, -1 for errors
+   or 0 for EOF.  */
+extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
+                       __off64_t __offset) __wur;
+/* Write N bytes of BUF to FD at the given position OFFSET without
+   changing the file pointer.  Return the number written, or -1.  */
+extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
+                        __off64_t __offset) __wur;
+# endif
+#endif
+
+/* Create a one-way communication channel (pipe).
+   If successful, two file descriptors are stored in PIPEDES;
+   bytes written on PIPEDES[1] can be read from PIPEDES[0].
+   Returns 0 if successful, -1 if not.  */
+extern int pipe (int __pipedes[2]) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Same as pipe but apply flags passed in FLAGS to the new file
+   descriptors.  */
+extern int pipe2 (int __pipedes[2], int __flags) __THROW __wur;
+#endif
+
+/* Schedule an alarm.  In SECONDS seconds, the process will get a SIGALRM.
+   If SECONDS is zero, any currently scheduled alarm will be cancelled.
+   The function returns the number of seconds remaining until the last
+   alarm scheduled would have signaled, or zero if there wasn't one.
+   There is no return value to indicate an error, but you can set `errno'
+   to 0 and check its value after calling `alarm', and this might tell you.
+   The signal may come late due to processor scheduling.  */
+extern unsigned int alarm (unsigned int __seconds) __THROW;
+
+/* Make the process sleep for SECONDS seconds, or until a signal arrives
+   and is not ignored.  The function returns the number of seconds less
+   than SECONDS which it actually slept (thus zero if it slept the full time).
+   If a signal handler does a `longjmp' or modifies the handling of the
+   SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
+   signal afterwards is undefined.  There is no return value to indicate
+   error, but if `sleep' returns SECONDS, it probably didn't work.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern unsigned int sleep (unsigned int __seconds);
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Set an alarm to go off (generating a SIGALRM signal) in VALUE
+   microseconds.  If INTERVAL is nonzero, when the alarm goes off, the
+   timer is reset to go off every INTERVAL microseconds thereafter.
+   Returns the number of microseconds remaining before the alarm.  */
+extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
+     __THROW;
+
+/* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
+   or ignored.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int usleep (__useconds_t __useconds);
+#endif
+
+
+/* Suspend the process until a signal arrives.
+   This always returns -1 and sets `errno' to EINTR.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pause (void);
+
+
+/* Change the owner and group of FILE.  */
+extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
+     __THROW __nonnull ((1)) __wur;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Change the owner and group of the file that FD is open on.  */
+extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW __wur;
+
+
+/* Change owner and group of FILE, if it is a symbolic
+   link the ownership of the symbolic link is changed.  */
+extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
+     __THROW __nonnull ((1)) __wur;
+
+#endif /* Use X/Open Unix.  */
+
+#ifdef __USE_ATFILE
+/* Change the owner and group of FILE relative to the directory FD is open
+   on.  */
+extern int fchownat (int __fd, const char *__file, __uid_t __owner,
+                    __gid_t __group, int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use GNU.  */
+
+/* Change the process's working directory to PATH.  */
+extern int chdir (const char *__path) __THROW __nonnull ((1)) __wur;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Change the process's working directory to the one FD is open on.  */
+extern int fchdir (int __fd) __THROW __wur;
+#endif
+
+/* Get the pathname of the current working directory,
+   and put it in SIZE bytes of BUF.  Returns NULL if the
+   directory couldn't be determined or SIZE was too small.
+   If successful, returns BUF.  In GNU, if BUF is NULL,
+   an array is allocated with `malloc'; the array is SIZE
+   bytes long, unless SIZE == 0, in which case it is as
+   big as necessary.  */
+extern char *getcwd (char *__buf, size_t __size) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the current directory name.
+   If the environment variable `PWD' is set, and its value is correct,
+   that value is used.  */
+extern char *get_current_dir_name (void) __THROW;
+#endif
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Put the absolute pathname of the current working directory in BUF.
+   If successful, return BUF.  If not, put an error message in
+   BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */
+extern char *getwd (char *__buf)
+     __THROW __nonnull ((1)) __attribute_deprecated__ __wur;
+#endif
+
+
+/* Duplicate FD, returning a new file descriptor on the same file.  */
+extern int dup (int __fd) __THROW __wur;
+
+/* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
+extern int dup2 (int __fd, int __fd2) __THROW;
+
+#ifdef __USE_GNU
+/* Duplicate FD to FD2, closing FD2 and making it open on the same
+   file while setting flags according to FLAGS.  */
+extern int dup3 (int __fd, int __fd2, int __flags) __THROW;
+#endif
+
+/* NULL-terminated array of "NAME=VALUE" environment variables.  */
+extern char **__environ;
+#ifdef __USE_GNU
+extern char **environ;
+#endif
+
+
+/* Replace the current process, executing PATH with arguments ARGV and
+   environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
+extern int execve (const char *__path, char *const __argv[],
+                  char *const __envp[]) __THROW __nonnull ((1, 2));
+
+#ifdef __USE_XOPEN2K8
+/* Execute the file FD refers to, overlaying the running program image.
+   ARGV and ENVP are passed to the new program, as for `execve'.  */
+extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Execute PATH with arguments ARGV and environment from `environ'.  */
+extern int execv (const char *__path, char *const __argv[])
+     __THROW __nonnull ((1, 2));
+
+/* Execute PATH with all arguments after PATH until a NULL pointer,
+   and the argument after that for environment.  */
+extern int execle (const char *__path, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+/* Execute PATH with all arguments after PATH until
+   a NULL pointer and environment from `environ'.  */
+extern int execl (const char *__path, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+extern int execvp (const char *__file, char *const __argv[])
+     __THROW __nonnull ((1, 2));
+
+/* Execute FILE, searching in the `PATH' environment variable if
+   it contains no slashes, with all arguments after FILE until a
+   NULL pointer and environment from `environ'.  */
+extern int execlp (const char *__file, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+#ifdef __USE_GNU
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+extern int execvpe (const char *__file, char *const __argv[],
+                   char *const __envp[])
+     __THROW __nonnull ((1, 2));
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Add INC to priority of the current process.  */
+extern int nice (int __inc) __THROW __wur;
+#endif
+
+
+/* Terminate program execution with the low-order 8 bits of STATUS.  */
+extern void _exit (int __status) __attribute__ ((__noreturn__));
+
+
+/* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
+   the `_SC_*' symbols for the NAME argument to `sysconf';
+   and the `_CS_*' symbols for the NAME argument to `confstr'.  */
+#include <bits/confname.h>
+
+/* Get file-specific configuration information about PATH.  */
+extern long int pathconf (const char *__path, int __name)
+     __THROW __nonnull ((1));
+
+/* Get file-specific configuration about descriptor FD.  */
+extern long int fpathconf (int __fd, int __name) __THROW;
+
+/* Get the value of the system variable NAME.  */
+extern long int sysconf (int __name) __THROW;
+
+#ifdef __USE_POSIX2
+/* Get the value of the string-valued system variable NAME.  */
+extern size_t confstr (int __name, char *__buf, size_t __len) __THROW;
+#endif
+
+
+/* Get the process ID of the calling process.  */
+extern __pid_t getpid (void) __THROW;
+
+/* Get the process ID of the calling process's parent.  */
+extern __pid_t getppid (void) __THROW;
+
+/* Get the process group ID of the calling process.  */
+extern __pid_t getpgrp (void) __THROW;
+
+/* Get the process group ID of process PID.  */
+extern __pid_t __getpgid (__pid_t __pid) __THROW;
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+extern __pid_t getpgid (__pid_t __pid) __THROW;
+#endif
+
+
+/* Set the process group ID of the process matching PID to PGID.
+   If PID is zero, the current process's process group ID is set.
+   If PGID is zero, the process ID of the process is used.  */
+extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Both System V and BSD have `setpgrp' functions, but with different
+   calling conventions.  The BSD function is the same as POSIX.1 `setpgid'
+   (above).  The System V function takes no arguments and puts the calling
+   process in its on group like `setpgid (0, 0)'.
+
+   New programs should always use `setpgid' instead.
+
+   GNU provides the POSIX.1 function.  */
+
+/* Set the process group ID of the calling process to its own PID.
+   This is exactly the same as `setpgid (0, 0)'.  */
+extern int setpgrp (void) __THROW;
+
+#endif /* Use misc or X/Open.  */
+
+/* Create a new session with the calling process as its leader.
+   The process group IDs of the session and the calling process
+   are set to the process ID of the calling process, which is returned.  */
+extern __pid_t setsid (void) __THROW;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Return the session ID of the given process.  */
+extern __pid_t getsid (__pid_t __pid) __THROW;
+#endif
+
+/* Get the real user ID of the calling process.  */
+extern __uid_t getuid (void) __THROW;
+
+/* Get the effective user ID of the calling process.  */
+extern __uid_t geteuid (void) __THROW;
+
+/* Get the real group ID of the calling process.  */
+extern __gid_t getgid (void) __THROW;
+
+/* Get the effective group ID of the calling process.  */
+extern __gid_t getegid (void) __THROW;
+
+/* If SIZE is zero, return the number of supplementary groups
+   the calling process is in.  Otherwise, fill in the group IDs
+   of its supplementary groups in LIST and return the number written.  */
+extern int getgroups (int __size, __gid_t __list[]) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Return nonzero iff the calling process is in group GID.  */
+extern int group_member (__gid_t __gid) __THROW;
+#endif
+
+/* Set the user ID of the calling process to UID.
+   If the calling process is the super-user, set the real
+   and effective user IDs, and the saved set-user-ID to UID;
+   if not, the effective user ID is set to UID.  */
+extern int setuid (__uid_t __uid) __THROW __wur;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Set the real user ID of the calling process to RUID,
+   and the effective user ID of the calling process to EUID.  */
+extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set the effective user ID of the calling process to UID.  */
+extern int seteuid (__uid_t __uid) __THROW __wur;
+#endif /* Use POSIX.1-2001.  */
+
+/* Set the group ID of the calling process to GID.
+   If the calling process is the super-user, set the real
+   and effective group IDs, and the saved set-group-ID to GID;
+   if not, the effective group ID is set to GID.  */
+extern int setgid (__gid_t __gid) __THROW __wur;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Set the real group ID of the calling process to RGID,
+   and the effective group ID of the calling process to EGID.  */
+extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set the effective group ID of the calling process to GID.  */
+extern int setegid (__gid_t __gid) __THROW __wur;
+#endif /* Use POSIX.1-2001.  */
+
+#ifdef __USE_GNU
+/* Fetch the real user ID, effective user ID, and saved-set user ID,
+   of the calling process.  */
+extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
+     __THROW;
+
+/* Fetch the real group ID, effective group ID, and saved-set group ID,
+   of the calling process.  */
+extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
+     __THROW;
+
+/* Set the real user ID, effective user ID, and saved-set user ID,
+   of the calling process to RUID, EUID, and SUID, respectively.  */
+extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
+     __THROW __wur;
+
+/* Set the real group ID, effective group ID, and saved-set group ID,
+   of the calling process to RGID, EGID, and SGID, respectively.  */
+extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
+     __THROW __wur;
+#endif
+
+
+/* Clone the calling process, creating an exact copy.
+   Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+extern __pid_t fork (void) __THROWNL;
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+extern __pid_t vfork (void) __THROW;
+#endif /* Use misc or XPG < 7. */
+
+
+/* Return the pathname of the terminal FD is open on, or NULL on errors.
+   The returned storage is good only until the next call to this function.  */
+extern char *ttyname (int __fd) __THROW;
+
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2)) __wur;
+
+/* Return 1 if FD is a valid descriptor associated
+   with a terminal, zero if not.  */
+extern int isatty (int __fd) __THROW;
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98)
+/* Return the index into the active-logins file (utmp) for
+   the controlling terminal.  */
+extern int ttyslot (void) __THROW;
+#endif
+
+
+/* Make a link to FROM named TO.  */
+extern int link (const char *__from, const char *__to)
+     __THROW __nonnull ((1, 2)) __wur;
+
+#ifdef __USE_ATFILE
+/* Like link but relative paths in TO and FROM are interpreted relative
+   to FROMFD and TOFD respectively.  */
+extern int linkat (int __fromfd, const char *__from, int __tofd,
+                  const char *__to, int __flags)
+     __THROW __nonnull ((2, 4)) __wur;
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+/* Make a symbolic link to FROM named TO.  */
+extern int symlink (const char *__from, const char *__to)
+     __THROW __nonnull ((1, 2)) __wur;
+
+/* Read the contents of the symbolic link PATH into no more than
+   LEN bytes of BUF.  The contents are not null-terminated.
+   Returns the number of characters read, or -1 for errors.  */
+extern ssize_t readlink (const char *__restrict __path,
+                        char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((1, 2)) __wur;
+#endif /* Use POSIX.1-2001.  */
+
+#ifdef __USE_ATFILE
+/* Like symlink but a relative path in TO is interpreted relative to TOFD.  */
+extern int symlinkat (const char *__from, int __tofd,
+                     const char *__to) __THROW __nonnull ((1, 3)) __wur;
+
+/* Like readlink but a relative PATH is interpreted relative to FD.  */
+extern ssize_t readlinkat (int __fd, const char *__restrict __path,
+                          char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((2, 3)) __wur;
+#endif
+
+/* Remove the link NAME.  */
+extern int unlink (const char *__name) __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Remove the link NAME relative to FD.  */
+extern int unlinkat (int __fd, const char *__name, int __flag)
+     __THROW __nonnull ((2));
+#endif
+
+/* Remove the directory PATH.  */
+extern int rmdir (const char *__path) __THROW __nonnull ((1));
+
+
+/* Return the foreground process group ID of FD.  */
+extern __pid_t tcgetpgrp (int __fd) __THROW;
+
+/* Set the foreground process group ID of FD set PGRP_ID.  */
+extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW;
+
+
+/* Return the login name of the user.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *getlogin (void);
+#if defined __USE_REENTRANT || defined __USE_POSIX199506
+/* Return at most NAME_LEN characters of the login name of the user in NAME.
+   If it cannot be determined or some other error occurred, return the error
+   code.  Otherwise return 0.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* Set the login name returned by `getlogin'.  */
+extern int setlogin (const char *__name) __THROW __nonnull ((1));
+#endif
+
+
+#ifdef __USE_POSIX2
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.  */
+# define __need_getopt
+# include <getopt.h>
+#endif
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Put the name of the current host in no more than LEN bytes of NAME.
+   The result is null-terminated if LEN is large enough for the full
+   name and the terminator.  */
+extern int gethostname (char *__name, size_t __len) __THROW __nonnull ((1));
+#endif
+
+
+#if defined __USE_MISC
+/* Set the name of the current host to NAME, which is LEN bytes long.
+   This call is restricted to the super-user.  */
+extern int sethostname (const char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+
+/* Set the current machine's Internet number to ID.
+   This call is restricted to the super-user.  */
+extern int sethostid (long int __id) __THROW __wur;
+
+
+/* Get and set the NIS (aka YP) domain name, if any.
+   Called just like `gethostname' and `sethostname'.
+   The NIS domain name is usually the empty string when not using NIS.  */
+extern int getdomainname (char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+extern int setdomainname (const char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+
+
+/* Revoke access permissions to all processes currently communicating
+   with the control terminal, and then send a SIGHUP signal to the process
+   group of the control terminal.  */
+extern int vhangup (void) __THROW;
+
+/* Revoke the access of all descriptors currently open on FILE.  */
+extern int revoke (const char *__file) __THROW __nonnull ((1)) __wur;
+
+
+/* Enable statistical profiling, writing samples of the PC into at most
+   SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
+   is enabled, the system examines the user PC and increments
+   SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536].  If SCALE is zero,
+   disable profiling.  Returns zero on success, -1 on error.  */
+extern int profil (unsigned short int *__sample_buffer, size_t __size,
+                  size_t __offset, unsigned int __scale)
+     __THROW __nonnull ((1));
+
+
+/* Turn accounting on if NAME is an existing file.  The system will then write
+   a record for each process as it terminates, to this file.  If NAME is NULL,
+   turn accounting off.  This call is restricted to the super-user.  */
+extern int acct (const char *__name) __THROW;
+
+
+/* Successive calls return the shells listed in `/etc/shells'.  */
+extern char *getusershell (void) __THROW;
+extern void endusershell (void) __THROW; /* Discard cached info.  */
+extern void setusershell (void) __THROW; /* Rewind and re-read the file.  */
+
+
+/* Put the program in the background, and dissociate from the controlling
+   terminal.  If NOCHDIR is zero, do `chdir ("/")'.  If NOCLOSE is zero,
+   redirects stdin, stdout, and stderr to /dev/null.  */
+extern int daemon (int __nochdir, int __noclose) __THROW __wur;
+#endif /* Use misc.  */
+
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Make PATH be the root directory (the starting point for absolute paths).
+   This call is restricted to the super-user.  */
+extern int chroot (const char *__path) __THROW __nonnull ((1)) __wur;
+
+/* Prompt with PROMPT and read a string from the terminal without echoing.
+   Uses /dev/tty if possible; otherwise stderr and stdin.  */
+extern char *getpass (const char *__prompt) __nonnull ((1));
+#endif /* Use misc || X/Open.  */
+
+
+/* Make all changes done to FD actually appear on disk.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int fsync (int __fd);
+
+
+#ifdef __USE_GNU
+/* Make all changes done to all files on the file system associated
+   with FD actually appear on disk.  */
+extern int syncfs (int __fd) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+
+/* Return identifier for the current host.  */
+extern long int gethostid (void);
+
+/* Make all changes done to all files actually appear on disk.  */
+extern void sync (void) __THROW;
+
+
+# if defined __USE_MISC || !defined __USE_XOPEN2K
+/* Return the number of bytes in a page.  This is the system's page size,
+   which is not necessarily the same as the hardware page size.  */
+extern int getpagesize (void)  __THROW __attribute__ ((__const__));
+
+
+/* Return the maximum number of file descriptors
+   the current process could possibly have.  */
+extern int getdtablesize (void) __THROW;
+# endif
+
+#endif /* Use misc || X/Open Unix.  */
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+
+/* Truncate FILE to LENGTH bytes.  */
+# ifndef __USE_FILE_OFFSET64
+extern int truncate (const char *__file, __off_t __length)
+     __THROW __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (truncate,
+                          (const char *__file, __off64_t __length),
+                          truncate64) __nonnull ((1)) __wur;
+#  else
+#   define truncate truncate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int truncate64 (const char *__file, __off64_t __length)
+     __THROW __nonnull ((1)) __wur;
+# endif
+
+#endif /* Use X/Open Unix || POSIX 2008.  */
+
+#if defined __USE_POSIX199309 \
+    || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+
+/* Truncate the file FD is open on to LENGTH bytes.  */
+# ifndef __USE_FILE_OFFSET64
+extern int ftruncate (int __fd, __off_t __length) __THROW __wur;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length),
+                          ftruncate64) __wur;
+#  else
+#   define ftruncate ftruncate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur;
+# endif
+
+#endif /* Use POSIX.1b || X/Open Unix || XPG6.  */
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+    || defined __USE_MISC
+
+/* Set the end of accessible data space (aka "the break") to ADDR.
+   Returns zero on success and -1 for errors (with errno set).  */
+extern int brk (void *__addr) __THROW __wur;
+
+/* Increase or decrease the end of accessible data space by DELTA bytes.
+   If successful, returns the address the previous end of data space
+   (i.e. the beginning of the new space, if DELTA > 0);
+   returns (void *) -1 for errors (with errno set).  */
+extern void *sbrk (intptr_t __delta) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* Invoke `system call' number SYSNO, passing it the remaining arguments.
+   This is completely system-dependent, and not often useful.
+
+   In Unix, `syscall' sets `errno' for all errors and most calls return -1
+   for errors; in many systems you cannot pass arguments or get return
+   values for all system calls (`pipe', `fork', and `getppid' typically
+   among them).
+
+   In Mach, all system calls take normal arguments and always return an
+   error code (zero for success).  */
+extern long int syscall (long int __sysno, ...) __THROW;
+
+#endif /* Use misc.  */
+
+
+#if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK
+/* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
+   files consistent.  Some systems have them there and some here, and some
+   software depends on the macros being defined without including both.  */
+
+/* `lockf' is a simpler interface to the locking facilities of `fcntl'.
+   LEN is always relative to the current file position.
+   The CMD argument is one of the following.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+
+# define F_ULOCK 0     /* Unlock a previously locked region.  */
+# define F_LOCK  1     /* Lock a region for exclusive use.  */
+# define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
+# define F_TEST  3     /* Test a region for other processes locks.  */
+
+# ifndef __USE_FILE_OFFSET64
+extern int lockf (int __fd, int __cmd, __off_t __len) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len),
+                      lockf64) __wur;
+#  else
+#   define lockf lockf64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur;
+# endif
+#endif /* Use misc and F_LOCK not already defined.  */
+
+
+#ifdef __USE_GNU
+
+/* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno'
+   set to EINTR.  */
+
+# define TEMP_FAILURE_RETRY(expression) \
+  (__extension__                                                             \
+    ({ long int __result;                                                    \
+       do __result = (long int) (expression);                                \
+       while (__result == -1L && errno == EINTR);                            \
+       __result; }))
+#endif
+
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+/* Synchronize at least the data part of a file with the underlying
+   media.  */
+extern int fdatasync (int __fildes);
+#endif /* Use POSIX199309 */
+
+
+/* XPG4.2 specifies that prototypes for the encryption functions must
+   be defined here.  */
+#ifdef __USE_XOPEN
+/* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
+extern char *crypt (const char *__key, const char *__salt)
+     __THROW __nonnull ((1, 2));
+
+/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
+   block in place.  */
+extern void encrypt (char *__glibc_block, int __edflag)
+     __THROW __nonnull ((1));
+
+
+/* Swab pairs bytes in the first N bytes of the area pointed to by
+   FROM and copy the result to TO.  The value of TO must not be in the
+   range [FROM - N + 1, FROM - 1].  If N is odd the first byte in FROM
+   is without partner.  */
+extern void swab (const void *__restrict __from, void *__restrict __to,
+                 ssize_t __n) __THROW __nonnull ((1, 2));
+#endif
+
+
+/* The Single Unix specification demands this prototype to be here.
+   It is also found in <stdio.h>.  */
+#if defined __USE_XOPEN && !defined __USE_XOPEN2K
+/* Return the name of the controlling terminal.  */
+extern char *ctermid (char *__s) __THROW;
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/unistd.h>
+#endif
+
+__END_DECLS
+
+#endif /* unistd.h  */
diff --git a/lib/libdss-include/include/ustat.h b/lib/libdss-include/include/ustat.h
new file mode 100644 (file)
index 0000000..cba150e
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/ustat.h>
diff --git a/lib/libdss-include/include/utime.h b/lib/libdss-include/include/utime.h
new file mode 100644 (file)
index 0000000..3cc0d5e
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.6.6 Set File Access and Modification Times  <utime.h>
+ */
+
+#ifndef        _UTIME_H
+#define        _UTIME_H        1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+# define __need_time_t
+# include <time.h>
+#endif
+
+/* Structure describing file times.  */
+struct utimbuf
+  {
+    __time_t actime;           /* Access time.  */
+    __time_t modtime;          /* Modification time.  */
+  };
+
+/* Set the access and modification times of FILE to those given in
+   *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
+extern int utime (const char *__file,
+                 const struct utimbuf *__file_times)
+     __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* utime.h */
diff --git a/lib/libdss-include/include/utmp.h b/lib/libdss-include/include/utmp.h
new file mode 100644 (file)
index 0000000..83e892d
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _UTMP_H
+#define        _UTMP_H 1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* Get system dependent values and data structures.  */
+#include <bits/utmp.h>
+
+/* Compatibility names for the strings of the canonical file names.  */
+#define UTMP_FILE      _PATH_UTMP
+#define UTMP_FILENAME  _PATH_UTMP
+#define WTMP_FILE      _PATH_WTMP
+#define WTMP_FILENAME  _PATH_WTMP
+
+
+
+/* Make FD be the controlling terminal, stdin, stdout, and stderr;
+   then close FD.  Returns 0 on success, nonzero on error.  */
+extern int login_tty (int __fd) __THROW;
+
+
+/* Write the given entry into utmp and wtmp.  */
+extern void login (const struct utmp *__entry) __THROW;
+
+/* Write the utmp entry to say the user on UT_LINE has logged out.  */
+extern int logout (const char *__ut_line) __THROW;
+
+/* Append to wtmp an entry for the current time and the given info.  */
+extern void logwtmp (const char *__ut_line, const char *__ut_name,
+                    const char *__ut_host) __THROW;
+
+/* Append entry UTMP to the wtmp-like file WTMP_FILE.  */
+extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp)
+     __THROW;
+
+/* Change name of the utmp file to be examined.  */
+extern int utmpname (const char *__file) __THROW;
+
+/* Read next entry from a utmp-like file.  */
+extern struct utmp *getutent (void) __THROW;
+
+/* Reset the input stream to the beginning of the file.  */
+extern void setutent (void) __THROW;
+
+/* Close the current open file.  */
+extern void endutent (void) __THROW;
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_type matching ID->ut_type.  */
+extern struct utmp *getutid (const struct utmp *__id) __THROW;
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_line matching LINE->ut_line.  */
+extern struct utmp *getutline (const struct utmp *__line) __THROW;
+
+/* Write out entry pointed to by UTMP_PTR into the utmp file.  */
+extern struct utmp *pututline (const struct utmp *__utmp_ptr) __THROW;
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the file for handling utmp files.  */
+extern int getutent_r (struct utmp *__buffer, struct utmp **__result) __THROW;
+
+extern int getutid_r (const struct utmp *__id, struct utmp *__buffer,
+                     struct utmp **__result) __THROW;
+
+extern int getutline_r (const struct utmp *__line,
+                       struct utmp *__buffer, struct utmp **__result) __THROW;
+
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* utmp.h  */
diff --git a/lib/libdss-include/include/utmpx.h b/lib/libdss-include/include/utmpx.h
new file mode 100644 (file)
index 0000000..3c45ba3
--- /dev/null
@@ -0,0 +1,125 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _UTMPX_H
+#define        _UTMPX_H        1
+
+#include <features.h>
+#include <sys/time.h>
+
+/* Required according to Unix98.  */
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+/* Get system dependent values and data structures.  */
+#include <bits/utmpx.h>
+
+#ifdef __USE_GNU
+/* Compatibility names for the strings of the canonical file names.  */
+# define UTMPX_FILE    _PATH_UTMPX
+# define UTMPX_FILENAME        _PATH_UTMPX
+# define WTMPX_FILE    _PATH_WTMPX
+# define WTMPX_FILENAME        _PATH_WTMPX
+#endif
+
+/* For the getutmp{,x} functions we need the `struct utmp'.  */
+#ifdef __USE_GNU
+struct utmp;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Open user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setutxent (void);
+
+/* Close user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endutxent (void);
+
+/* Get the next entry from the user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxent (void);
+
+/* Get the user accounting database entry corresponding to ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxid (const struct utmpx *__id);
+
+/* Get the user accounting database entry corresponding to LINE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxline (const struct utmpx *__line);
+
+/* Write the entry UTMPX into the user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *pututxline (const struct utmpx *__utmpx);
+
+
+#ifdef __USE_GNU
+/* Change name of the utmpx file to be examined.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int utmpxname (const char *__file);
+
+/* Append entry UTMP to the wtmpx-like file WTMPX_FILE.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void updwtmpx (const char *__wtmpx_file,
+                     const struct utmpx *__utmpx);
+
+
+/* Copy the information in UTMPX to UTMP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void getutmp (const struct utmpx *__utmpx,
+                    struct utmp *__utmp);
+
+/* Copy the information in UTMP to UTMPX.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx);
+#endif
+
+__END_DECLS
+
+#endif /* utmpx.h  */
diff --git a/lib/libdss-include/include/values.h b/lib/libdss-include/include/values.h
new file mode 100644 (file)
index 0000000..5ae2ead
--- /dev/null
@@ -0,0 +1,68 @@
+/* Old compatibility names for <limits.h> and <float.h> constants.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This interface is obsolete.  New programs should use
+   <limits.h> and/or <float.h> instead of <values.h>.  */
+
+#ifndef        _VALUES_H
+#define        _VALUES_H       1
+
+#include <features.h>
+
+#include <limits.h>
+
+#define _TYPEBITS(type)        (sizeof (type) * CHAR_BIT)
+
+#define CHARBITS       _TYPEBITS (char)
+#define SHORTBITS      _TYPEBITS (short int)
+#define INTBITS                _TYPEBITS (int)
+#define LONGBITS       _TYPEBITS (long int)
+#define PTRBITS                _TYPEBITS (char *)
+#define DOUBLEBITS     _TYPEBITS (double)
+#define FLOATBITS      _TYPEBITS (float)
+
+#define MINSHORT       SHRT_MIN
+#define        MININT          INT_MIN
+#define        MINLONG         LONG_MIN
+
+#define        MAXSHORT        SHRT_MAX
+#define        MAXINT          INT_MAX
+#define        MAXLONG         LONG_MAX
+
+#define HIBITS         MINSHORT
+#define HIBITL         MINLONG
+
+
+#include <float.h>
+
+#define        MAXDOUBLE       DBL_MAX
+#define        MAXFLOAT        FLT_MAX
+#define        MINDOUBLE       DBL_MIN
+#define        MINFLOAT        FLT_MIN
+#define        DMINEXP         DBL_MIN_EXP
+#define        FMINEXP         FLT_MIN_EXP
+#define        DMAXEXP         DBL_MAX_EXP
+#define        FMAXEXP         FLT_MAX_EXP
+
+
+#ifdef __USE_MISC
+/* Some systems define this name instead of CHAR_BIT or CHARBITS.  */
+# define BITSPERBYTE   CHAR_BIT
+#endif
+
+#endif /* values.h */
diff --git a/lib/libdss-include/include/video/edid.h b/lib/libdss-include/include/video/edid.h
new file mode 100644 (file)
index 0000000..6aeb974
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef __linux_video_edid_h__
+#define __linux_video_edid_h__
+
+struct edid_info {
+       unsigned char dummy[128];
+};
+
+
+#endif /* __linux_video_edid_h__ */
diff --git a/lib/libdss-include/include/video/sisfb.h b/lib/libdss-include/include/video/sisfb.h
new file mode 100644 (file)
index 0000000..e9b8e2c
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * sisfb.h - definitions for the SiS framebuffer driver
+ *
+ * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the named License,
+ * or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _LINUX_SISFB_H_
+#define _LINUX_SISFB_H_
+
+#include <linux/types.h>
+#include <asm/ioctl.h>
+
+/**********************************************/
+/*                   PUBLIC                   */
+/**********************************************/
+
+/* vbflags, public (others in sis.h) */
+#define CRT2_DEFAULT           0x00000001
+#define CRT2_LCD               0x00000002
+#define CRT2_TV                        0x00000004
+#define CRT2_VGA               0x00000008
+#define TV_NTSC                        0x00000010
+#define TV_PAL                 0x00000020
+#define TV_HIVISION            0x00000040
+#define TV_YPBPR               0x00000080
+#define TV_AVIDEO              0x00000100
+#define TV_SVIDEO              0x00000200
+#define TV_SCART               0x00000400
+#define TV_PALM                        0x00001000
+#define TV_PALN                        0x00002000
+#define TV_NTSCJ               0x00001000
+#define TV_CHSCART             0x00008000
+#define TV_CHYPBPR525I         0x00010000
+#define CRT1_VGA               0x00000000
+#define CRT1_LCDA              0x00020000
+#define VGA2_CONNECTED          0x00040000
+#define VB_DISPTYPE_CRT1       0x00080000      /* CRT1 connected and used */
+#define VB_SINGLE_MODE         0x20000000      /* CRT1 or CRT2; determined by DISPTYPE_CRTx */
+#define VB_MIRROR_MODE         0x40000000      /* CRT1 + CRT2 identical (mirror mode) */
+#define VB_DUALVIEW_MODE       0x80000000      /* CRT1 + CRT2 independent (dual head mode) */
+
+/* Aliases: */
+#define CRT2_ENABLE            (CRT2_LCD | CRT2_TV | CRT2_VGA)
+#define TV_STANDARD            (TV_NTSC | TV_PAL | TV_PALM | TV_PALN | TV_NTSCJ)
+#define TV_INTERFACE           (TV_AVIDEO|TV_SVIDEO|TV_SCART|TV_HIVISION|TV_YPBPR|TV_CHSCART|TV_CHYPBPR525I)
+
+/* Only if TV_YPBPR is set: */
+#define TV_YPBPR525I           TV_NTSC
+#define TV_YPBPR525P           TV_PAL
+#define TV_YPBPR750P           TV_PALM
+#define TV_YPBPR1080I          TV_PALN
+#define TV_YPBPRALL            (TV_YPBPR525I | TV_YPBPR525P | TV_YPBPR750P | TV_YPBPR1080I)
+
+#define VB_DISPTYPE_DISP2      CRT2_ENABLE
+#define VB_DISPTYPE_CRT2       CRT2_ENABLE
+#define VB_DISPTYPE_DISP1      VB_DISPTYPE_CRT1
+#define VB_DISPMODE_SINGLE     VB_SINGLE_MODE
+#define VB_DISPMODE_MIRROR     VB_MIRROR_MODE
+#define VB_DISPMODE_DUAL       VB_DUALVIEW_MODE
+#define VB_DISPLAY_MODE                (SINGLE_MODE | MIRROR_MODE | DUALVIEW_MODE)
+
+/* Structure argument for SISFB_GET_INFO ioctl  */
+struct sisfb_info {
+       __u32   sisfb_id;               /* for identifying sisfb */
+#ifndef SISFB_ID
+#define SISFB_ID         0x53495346    /* Identify myself with 'SISF' */
+#endif
+       __u32   chip_id;                /* PCI-ID of detected chip */
+       __u32   memory;                 /* total video memory in KB */
+       __u32   heapstart;              /* heap start offset in KB */
+       __u8    fbvidmode;              /* current sisfb mode */
+
+       __u8    sisfb_version;
+       __u8    sisfb_revision;
+       __u8    sisfb_patchlevel;
+
+       __u8    sisfb_caps;             /* sisfb capabilities */
+
+       __u32   sisfb_tqlen;            /* turbo queue length (in KB) */
+
+       __u32   sisfb_pcibus;           /* The card's PCI ID */
+       __u32   sisfb_pcislot;
+       __u32   sisfb_pcifunc;
+
+       __u8    sisfb_lcdpdc;           /* PanelDelayCompensation */
+
+       __u8    sisfb_lcda;             /* Detected status of LCDA for low res/text modes */
+
+       __u32   sisfb_vbflags;
+       __u32   sisfb_currentvbflags;
+
+       __u32   sisfb_scalelcd;
+       __u32   sisfb_specialtiming;
+
+       __u8    sisfb_haveemi;
+       __u8    sisfb_emi30,sisfb_emi31,sisfb_emi32,sisfb_emi33;
+       __u8    sisfb_haveemilcd;
+
+       __u8    sisfb_lcdpdca;          /* PanelDelayCompensation for LCD-via-CRT1 */
+
+       __u16   sisfb_tvxpos, sisfb_tvypos;     /* Warning: Values + 32 ! */
+
+       __u32   sisfb_heapsize;         /* heap size (in KB) */
+       __u32   sisfb_videooffset;      /* Offset of viewport in video memory (in bytes) */
+
+       __u32   sisfb_curfstn;          /* currently running FSTN/DSTN mode */
+       __u32   sisfb_curdstn;
+
+       __u16   sisfb_pci_vendor;       /* PCI vendor (SiS or XGI) */
+
+       __u32   sisfb_vbflags2;         /* ivideo->vbflags2 */
+
+       __u8    sisfb_can_post;         /* sisfb can POST this card */
+       __u8    sisfb_card_posted;      /* card is POSTED */
+       __u8    sisfb_was_boot_device;  /* This card was the boot video device (ie is primary) */
+
+       __u8    reserved[183];          /* for future use */
+};
+
+#define SISFB_CMD_GETVBFLAGS   0x55AA0001      /* no arg; result[1] = vbflags */
+#define SISFB_CMD_SWITCHCRT1   0x55AA0010      /* arg[0]: 99 = query, 0 = off, 1 = on */
+/* more to come */
+
+#define SISFB_CMD_ERR_OK       0x80000000      /* command succeeded */
+#define SISFB_CMD_ERR_LOCKED   0x80000001      /* sisfb is locked */
+#define SISFB_CMD_ERR_EARLY    0x80000002      /* request before sisfb took over gfx system */
+#define SISFB_CMD_ERR_NOVB     0x80000003      /* No video bridge */
+#define SISFB_CMD_ERR_NOCRT2   0x80000004      /* can't change CRT1 status, CRT2 disabled */
+/* more to come */
+#define SISFB_CMD_ERR_UNKNOWN   0x8000ffff     /* Unknown command */
+#define SISFB_CMD_ERR_OTHER    0x80010000      /* Other error */
+
+/* Argument for SISFB_CMD ioctl */
+struct sisfb_cmd {
+       __u32  sisfb_cmd;
+       __u32  sisfb_arg[16];
+       __u32  sisfb_result[4];
+};
+
+/* Additional IOCTLs for communication sisfb <> X driver                */
+/* If changing this, vgatypes.h must also be changed (for X driver)    */
+
+/* ioctl for identifying and giving some info (esp. memory heap start) */
+#define SISFB_GET_INFO_SIZE    _IOR(0xF3,0x00,__u32)
+#define SISFB_GET_INFO         _IOR(0xF3,0x01,struct sisfb_info)
+
+/* ioctrl to get current vertical retrace status */
+#define SISFB_GET_VBRSTATUS    _IOR(0xF3,0x02,__u32)
+
+/* ioctl to enable/disable panning auto-maximize (like nomax parameter) */
+#define SISFB_GET_AUTOMAXIMIZE _IOR(0xF3,0x03,__u32)
+#define SISFB_SET_AUTOMAXIMIZE _IOW(0xF3,0x03,__u32)
+
+/* ioctls to relocate TV output (x=D[31:16], y=D[15:0], + 32)*/
+#define SISFB_GET_TVPOSOFFSET  _IOR(0xF3,0x04,__u32)
+#define SISFB_SET_TVPOSOFFSET  _IOW(0xF3,0x04,__u32)
+
+/* ioctl for internal sisfb commands (sisfbctrl) */
+#define SISFB_COMMAND          _IOWR(0xF3,0x05,struct sisfb_cmd)
+
+/* ioctl for locking sisfb (no register access during lock) */
+/* As of now, only used to avoid register access during
+ * the ioctls listed above.
+ */
+#define SISFB_SET_LOCK         _IOW(0xF3,0x06,__u32)
+
+/* ioctls 0xF3 up to 0x3F reserved for sisfb */
+
+/****************************************************************/
+/* The following are deprecated and should not be used anymore: */
+/****************************************************************/
+/* ioctl for identifying and giving some info (esp. memory heap start) */
+#define SISFB_GET_INFO_OLD        _IOR('n',0xF8,__u32)
+/* ioctrl to get current vertical retrace status */
+#define SISFB_GET_VBRSTATUS_OLD           _IOR('n',0xF9,__u32)
+/* ioctl to enable/disable panning auto-maximize (like nomax parameter) */
+#define SISFB_GET_AUTOMAXIMIZE_OLD _IOR('n',0xFA,__u32)
+#define SISFB_SET_AUTOMAXIMIZE_OLD _IOW('n',0xFA,__u32)
+/****************************************************************/
+/*               End of deprecated ioctl numbers                */
+/****************************************************************/
+
+/* For fb memory manager (FBIO_ALLOC, FBIO_FREE) */
+struct sis_memreq {
+       __u32   offset;
+       __u32   size;
+};
+
+/**********************************************/
+/*                  PRIVATE                   */
+/*         (for IN-KERNEL usage only)         */
+/**********************************************/
+
+
+#endif /* _LINUX_SISFB_H_ */
diff --git a/lib/libdss-include/include/video/uvesafb.h b/lib/libdss-include/include/video/uvesafb.h
new file mode 100644 (file)
index 0000000..79e281b
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _UVESAFB_H
+#define _UVESAFB_H
+
+#include <linux/types.h>
+
+struct v86_regs {
+       __u32 ebx;
+       __u32 ecx;
+       __u32 edx;
+       __u32 esi;
+       __u32 edi;
+       __u32 ebp;
+       __u32 eax;
+       __u32 eip;
+       __u32 eflags;
+       __u32 esp;
+       __u16 cs;
+       __u16 ss;
+       __u16 es;
+       __u16 ds;
+       __u16 fs;
+       __u16 gs;
+};
+
+/* Task flags */
+#define TF_VBEIB       0x01
+#define TF_BUF_ESDI    0x02
+#define TF_BUF_ESBX    0x04
+#define TF_BUF_RET     0x08
+#define TF_EXIT                0x10
+
+struct uvesafb_task {
+       __u8 flags;
+       int buf_len;
+       struct v86_regs regs;
+};
+
+/* Constants for the capabilities field
+ * in vbe_ib */
+#define VBE_CAP_CAN_SWITCH_DAC 0x01
+#define VBE_CAP_VGACOMPAT      0x02
+
+/* The VBE Info Block */
+struct vbe_ib {
+       char  vbe_signature[4];
+       __u16 vbe_version;
+       __u32 oem_string_ptr;
+       __u32 capabilities;
+       __u32 mode_list_ptr;
+       __u16 total_memory;
+       __u16 oem_software_rev;
+       __u32 oem_vendor_name_ptr;
+       __u32 oem_product_name_ptr;
+       __u32 oem_product_rev_ptr;
+       __u8  reserved[222];
+       char  oem_data[256];
+       char  misc_data[512];
+} __attribute__ ((packed));
+
+#endif /* _UVESAFB_H */
diff --git a/lib/libdss-include/include/wait.h b/lib/libdss-include/include/wait.h
new file mode 100644 (file)
index 0000000..d01b811
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/wait.h>
diff --git a/lib/libdss-include/include/wchar.h b/lib/libdss-include/include/wchar.h
new file mode 100644 (file)
index 0000000..e413416
--- /dev/null
@@ -0,0 +1,903 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *      ISO C99 Standard: 7.24
+ *     Extended multibyte and wide character utilities <wchar.h>
+ */
+
+#ifndef _WCHAR_H
+
+#if !defined __need_mbstate_t && !defined __need_wint_t
+# define _WCHAR_H 1
+# include <features.h>
+#endif
+
+#ifdef _WCHAR_H
+/* Get FILE definition.  */
+# define __need___FILE
+# if defined __USE_UNIX98 || defined __USE_XOPEN2K
+#  define __need_FILE
+# endif
+# include <stdio.h>
+/* Get va_list definition.  */
+# define __need___va_list
+# include <stdarg.h>
+
+# include <bits/wchar.h>
+
+/* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
+# define __need_size_t
+# define __need_wchar_t
+# define __need_NULL
+#endif
+#if defined _WCHAR_H || defined __need_wint_t || !defined __WINT_TYPE__
+# undef __need_wint_t
+# define __need_wint_t
+# include <stddef.h>
+
+/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
+   there.  So define it ourselves if it remains undefined.  */
+# ifndef _WINT_T
+/* Integral type unchanged by default argument promotions that can
+   hold any value corresponding to members of the extended character
+   set, as well as at least one value that does not correspond to any
+   member of the extended character set.  */
+#  define _WINT_T
+typedef unsigned int wint_t;
+# else
+/* Work around problems with the <stddef.h> file which doesn't put
+   wint_t in the std namespace.  */
+#  if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES \
+      && defined __WINT_TYPE__
+__BEGIN_NAMESPACE_STD
+typedef __WINT_TYPE__ wint_t;
+__END_NAMESPACE_STD
+#  endif
+# endif
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+# if defined __cplusplus && __GNUC_PREREQ (4, 4)
+#  define __CORRECT_ISO_CPP_WCHAR_H_PROTO
+# endif
+#endif
+
+#if (defined _WCHAR_H || defined __need_mbstate_t) && !defined ____mbstate_t_defined
+# define ____mbstate_t_defined 1
+/* Conversion state information.  */
+typedef struct
+{
+  int __count;
+  union
+  {
+# ifdef __WINT_TYPE__
+    __WINT_TYPE__ __wch;
+# else
+    wint_t __wch;
+# endif
+    char __wchb[4];
+  } __value;           /* Value so far.  */
+} __mbstate_t;
+#endif
+#undef __need_mbstate_t
+
+
+/* The rest of the file is only used if used if __need_mbstate_t is not
+   defined.  */
+#ifdef _WCHAR_H
+
+# ifndef __mbstate_t_defined
+__BEGIN_NAMESPACE_C99
+/* Public type.  */
+typedef __mbstate_t mbstate_t;
+__END_NAMESPACE_C99
+#  define __mbstate_t_defined 1
+# endif
+
+#ifdef __USE_GNU
+__USING_NAMESPACE_C99(mbstate_t)
+#endif
+
+#ifndef WCHAR_MIN
+/* These constants might also be defined in <inttypes.h>.  */
+# define WCHAR_MIN __WCHAR_MIN
+# define WCHAR_MAX __WCHAR_MAX
+#endif
+
+#ifndef WEOF
+# define WEOF (0xffffffffu)
+#endif
+
+/* For XPG4 compliance we have to define the stuff from <wctype.h> here
+   as well.  */
+#if defined __USE_XOPEN && !defined __USE_UNIX98
+# include <wctype.h>
+#endif
+
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_STD
+/* This incomplete type is defined in <time.h> but needed here because
+   of `wcsftime'.  */
+struct tm;
+__END_NAMESPACE_STD
+/* XXX We have to clean this up at some point.  Since tm is in the std
+   namespace but wcsftime is in __c99 the type wouldn't be found
+   without inserting it in the global namespace.  */
+__USING_NAMESPACE_STD(tm)
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy SRC to DEST.  */
+extern wchar_t *wcscpy (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src)
+     __THROW __nonnull ((1, 2));
+
+/* Copy no more than N wide-characters of SRC to DEST.  */
+extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Append SRC onto DEST.  */
+extern wchar_t *wcscat (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Append no more than N wide-characters of SRC onto DEST.  */
+extern wchar_t *wcsncat (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Compare S1 and S2.  */
+extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Compare N wide-characters of S1 and S2.  */
+extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Compare S1 and S2, ignoring case.  */
+extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
+                       size_t __n) __THROW;
+
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+# include <xlocale.h>
+
+extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+                        __locale_t __loc) __THROW;
+
+extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+                         size_t __n, __locale_t __loc) __THROW;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Compare S1 and S2, both interpreted as appropriate to the
+   LC_COLLATE category of the current locale.  */
+extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+/* Transform S2 into array pointed to by S1 such that if wcscmp is
+   applied to two transformed strings the result is the as applying
+   `wcscoll' to the original strings.  */
+extern size_t wcsxfrm (wchar_t *__restrict __s1,
+                      const wchar_t *__restrict __s2, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+
+/* Compare S1 and S2, both interpreted as appropriate to the
+   LC_COLLATE category of the given locale.  */
+extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
+                     __locale_t __loc) __THROW;
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is
+   applied to two transformed strings the result is the as applying
+   `wcscoll' to the original strings.  */
+extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
+                        size_t __n, __locale_t __loc) __THROW;
+
+/* Duplicate S, returning an identical malloc'd string.  */
+extern wchar_t *wcsdup (const wchar_t *__s) __THROW __attribute_malloc__;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Find the first occurrence of WC in WCS.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcschr") __attribute_pure__;
+extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcschr") __attribute_pure__;
+#else
+extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+/* Find the last occurrence of WC in WCS.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcsrchr") __attribute_pure__;
+extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcsrchr") __attribute_pure__;
+#else
+extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to `wcschr'.  But it returns a pointer to
+   the closing NUL wide character in case C is not found in S.  */
+extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the initial segmet of WCS which
+   consists entirely of wide characters not in REJECT.  */
+extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
+     __THROW __attribute_pure__;
+/* Return the length of the initial segmet of WCS which
+   consists entirely of wide characters in  ACCEPT.  */
+extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __attribute_pure__;
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __asm ("wcspbrk") __attribute_pure__;
+extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
+                                    const wchar_t *__accept)
+     __THROW __asm ("wcspbrk") __attribute_pure__;
+#else
+extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __attribute_pure__;
+#endif
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __asm ("wcsstr") __attribute_pure__;
+extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
+                                   const wchar_t *__needle)
+     __THROW __asm ("wcsstr") __attribute_pure__;
+#else
+extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __attribute_pure__;
+#endif
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+extern wchar_t *wcstok (wchar_t *__restrict __s,
+                       const wchar_t *__restrict __delim,
+                       wchar_t **__restrict __ptr) __THROW;
+
+/* Return the number of wide characters in S.  */
+extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__;
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN
+/* Another name for `wcsstr' from XPG4.  */
+# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __asm ("wcswcs") __attribute_pure__;
+extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
+                                   const wchar_t *__needle)
+     __THROW __asm ("wcswcs") __attribute_pure__;
+# else
+extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __attribute_pure__;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
+     __THROW __attribute_pure__;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Search N wide characters of S for C.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
+     __THROW __asm ("wmemchr") __attribute_pure__;
+extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
+                                    size_t __n)
+     __THROW __asm ("wmemchr") __attribute_pure__;
+#else
+extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
+     __THROW __attribute_pure__;
+#endif
+
+/* Compare N wide characters of S1 and S2.  */
+extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+/* Copy N wide characters of SRC to DEST.  */
+extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
+                        const wchar_t *__restrict __s2, size_t __n) __THROW;
+
+/* Copy N wide characters of SRC to DEST, guaranteeing
+   correct behavior for overlapping strings.  */
+extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW;
+
+/* Set N wide characters of S to C.  */
+extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* Copy N wide characters of SRC to DEST and return pointer to following
+   wide character.  */
+extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
+                         const wchar_t *__restrict __s2, size_t __n)
+     __THROW;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Determine whether C constitutes a valid (one-byte) multibyte
+   character.  */
+extern wint_t btowc (int __c) __THROW;
+
+/* Determine whether C corresponds to a member of the extended
+   character set whose multibyte representation is a single byte.  */
+extern int wctob (wint_t __c) __THROW;
+
+/* Determine whether PS points to an object representing the initial
+   state.  */
+extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__;
+
+/* Write wide character representation of multibyte character pointed
+   to by S to PWC.  */
+extern size_t mbrtowc (wchar_t *__restrict __pwc,
+                      const char *__restrict __s, size_t __n,
+                      mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of wide character WC to S.  */
+extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
+                      mbstate_t *__restrict __ps) __THROW;
+
+/* Return number of bytes in multibyte character pointed to by S.  */
+extern size_t __mbrlen (const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __ps) __THROW;
+extern size_t mbrlen (const char *__restrict __s, size_t __n,
+                     mbstate_t *__restrict __ps) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_EXTERN_INLINES
+/* Define inline function as optimization.  */
+
+/* We can use the BTOWC and WCTOB optimizations since we know that all
+   locales must use ASCII encoding for the values in the ASCII range
+   and because the wchar_t encoding is always ISO 10646.  */
+extern wint_t __btowc_alias (int __c) __asm ("btowc");
+__extern_inline wint_t
+__NTH (btowc (int __c))
+{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
+         ? (wint_t) __c : __btowc_alias (__c)); }
+
+extern int __wctob_alias (wint_t __c) __asm ("wctob");
+__extern_inline int
+__NTH (wctob (wint_t __wc))
+{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
+         ? (int) __wc : __wctob_alias (__wc)); }
+
+__extern_inline size_t
+__NTH (mbrlen (const char *__restrict __s, size_t __n,
+              mbstate_t *__restrict __ps))
+{ return (__ps != NULL
+         ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Write wide character representation of multibyte character string
+   SRC to DST.  */
+extern size_t mbsrtowcs (wchar_t *__restrict __dst,
+                        const char **__restrict __src, size_t __len,
+                        mbstate_t *__restrict __ps) __THROW;
+
+/* Write multibyte character representation of wide character string
+   SRC to DST.  */
+extern size_t wcsrtombs (char *__restrict __dst,
+                        const wchar_t **__restrict __src, size_t __len,
+                        mbstate_t *__restrict __ps) __THROW;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_XOPEN2K8
+/* Write wide character representation of at most NMC bytes of the
+   multibyte character string SRC to DST.  */
+extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
+                         const char **__restrict __src, size_t __nmc,
+                         size_t __len, mbstate_t *__restrict __ps) __THROW;
+
+/* Write multibyte character representation of at most NWC characters
+   from the wide character string SRC to DST.  */
+extern size_t wcsnrtombs (char *__restrict __dst,
+                         const wchar_t **__restrict __src,
+                         size_t __nwc, size_t __len,
+                         mbstate_t *__restrict __ps) __THROW;
+#endif /* use POSIX 2008 */
+
+
+/* The following functions are extensions found in X/Open CAE.  */
+#ifdef __USE_XOPEN
+/* Determine number of column positions required for C.  */
+extern int wcwidth (wchar_t __c) __THROW;
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+extern int wcswidth (const wchar_t *__s, size_t __n) __THROW;
+#endif /* Use X/Open.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert initial portion of the wide string NPTR to `double'
+   representation.  */
+extern double wcstod (const wchar_t *__restrict __nptr,
+                     wchar_t **__restrict __endptr) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Likewise for `float' and `long double' sizes of floating-point numbers.  */
+extern float wcstof (const wchar_t *__restrict __nptr,
+                    wchar_t **__restrict __endptr) __THROW;
+extern long double wcstold (const wchar_t *__restrict __nptr,
+                           wchar_t **__restrict __endptr) __THROW;
+__END_NAMESPACE_C99
+#endif /* C99 */
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert initial portion of wide string NPTR to `long int'
+   representation.  */
+extern long int wcstol (const wchar_t *__restrict __nptr,
+                       wchar_t **__restrict __endptr, int __base) __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long int'
+   representation.  */
+extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
+                                 wchar_t **__restrict __endptr, int __base)
+     __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert initial portion of wide string NPTR to `long long int'
+   representation.  */
+__extension__
+extern long long int wcstoll (const wchar_t *__restrict __nptr,
+                             wchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long long int'
+   representation.  */
+__extension__
+extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
+                                       wchar_t **__restrict __endptr,
+                                       int __base) __THROW;
+__END_NAMESPACE_C99
+#endif /* ISO C99.  */
+
+#ifdef __USE_GNU
+/* Convert initial portion of wide string NPTR to `long long int'
+   representation.  */
+__extension__
+extern long long int wcstoq (const wchar_t *__restrict __nptr,
+                            wchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long long int'
+   representation.  */
+__extension__
+extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
+                                      wchar_t **__restrict __endptr,
+                                      int __base) __THROW;
+#endif /* Use GNU.  */
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+   use as an additional parameter.  */
+extern long int wcstol_l (const wchar_t *__restrict __nptr,
+                         wchar_t **__restrict __endptr, int __base,
+                         __locale_t __loc) __THROW;
+
+extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
+                                   wchar_t **__restrict __endptr,
+                                   int __base, __locale_t __loc) __THROW;
+
+__extension__
+extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
+                               wchar_t **__restrict __endptr,
+                               int __base, __locale_t __loc) __THROW;
+
+__extension__
+extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
+                                         wchar_t **__restrict __endptr,
+                                         int __base, __locale_t __loc)
+     __THROW;
+
+extern double wcstod_l (const wchar_t *__restrict __nptr,
+                       wchar_t **__restrict __endptr, __locale_t __loc)
+     __THROW;
+
+extern float wcstof_l (const wchar_t *__restrict __nptr,
+                      wchar_t **__restrict __endptr, __locale_t __loc)
+     __THROW;
+
+extern long double wcstold_l (const wchar_t *__restrict __nptr,
+                             wchar_t **__restrict __endptr,
+                             __locale_t __loc) __THROW;
+#endif /* use GNU */
+
+
+#ifdef __USE_XOPEN2K8
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in
+   DEST.  */
+extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src) __THROW;
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW;
+
+
+/* Wide character I/O functions.  */
+
+/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces
+   a wide character string.  */
+extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW;
+#endif
+
+#if defined __USE_ISOC95 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_STD
+
+/* Select orientation for stream.  */
+extern int fwide (__FILE *__fp, int __mode) __THROW;
+
+
+/* Write formatted output to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fwprintf (__FILE *__restrict __stream,
+                    const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
+/* Write formatted output to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int wprintf (const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
+/* Write formatted output of at most N characters to S.  */
+extern int swprintf (wchar_t *__restrict __s, size_t __n,
+                    const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
+
+/* Write formatted output to S from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfwprintf (__FILE *__restrict __s,
+                     const wchar_t *__restrict __format,
+                     __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
+/* Write formatted output to stdout from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vwprintf (const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
+/* Write formatted output of at most N character to S from argument
+   list ARG.  */
+extern int vswprintf (wchar_t *__restrict __s, size_t __n,
+                     const wchar_t *__restrict __format,
+                     __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
+
+
+/* Read formatted input from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fwscanf (__FILE *__restrict __stream,
+                   const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+/* Read formatted input from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int wscanf (const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
+/* Read formatted input from S.  */
+extern int swscanf (const wchar_t *__restrict __s,
+                   const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+
+# if defined __USE_ISOC99 && !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream,
+                                const wchar_t *__restrict __format, ...),
+                      __isoc99_fwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...),
+                      __isoc99_wscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
+extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s,
+                                    const wchar_t *__restrict __format,
+                                    ...), __isoc99_swscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+#  else
+extern int __isoc99_fwscanf (__FILE *__restrict __stream,
+                            const wchar_t *__restrict __format, ...);
+extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...);
+extern int __isoc99_swscanf (const wchar_t *__restrict __s,
+                            const wchar_t *__restrict __format, ...)
+     __THROW;
+#   define fwscanf __isoc99_fwscanf
+#   define wscanf __isoc99_wscanf
+#   define swscanf __isoc99_swscanf
+#  endif
+# endif
+
+__END_NAMESPACE_STD
+#endif /* Use ISO C95, C99 and Unix98. */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Read formatted input from S into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfwscanf (__FILE *__restrict __s,
+                    const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+/* Read formatted input from stdin into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vwscanf (const wchar_t *__restrict __format,
+                   __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
+/* Read formatted input from S into argument list ARG.  */
+extern int vswscanf (const wchar_t *__restrict __s,
+                    const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+
+# if !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s,
+                                 const wchar_t *__restrict __format,
+                                 __gnuc_va_list __arg), __isoc99_vfwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format,
+                                __gnuc_va_list __arg), __isoc99_vwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
+extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s,
+                                     const wchar_t *__restrict __format,
+                                     __gnuc_va_list __arg), __isoc99_vswscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+#  else
+extern int __isoc99_vfwscanf (__FILE *__restrict __s,
+                             const wchar_t *__restrict __format,
+                             __gnuc_va_list __arg);
+extern int __isoc99_vwscanf (const wchar_t *__restrict __format,
+                            __gnuc_va_list __arg);
+extern int __isoc99_vswscanf (const wchar_t *__restrict __s,
+                             const wchar_t *__restrict __format,
+                             __gnuc_va_list __arg) __THROW;
+#   define vfwscanf __isoc99_vfwscanf
+#   define vwscanf __isoc99_vwscanf
+#   define vswscanf __isoc99_vswscanf
+#  endif
+# endif
+
+__END_NAMESPACE_C99
+#endif /* Use ISO C99. */
+
+
+__BEGIN_NAMESPACE_STD
+/* Read a character from STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern wint_t fgetwc (__FILE *__stream);
+extern wint_t getwc (__FILE *__stream);
+
+/* Read a character from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t getwchar (void);
+
+
+/* Write a character to STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
+extern wint_t putwc (wchar_t __wc, __FILE *__stream);
+
+/* Write a character to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t putwchar (wchar_t __wc);
+
+
+/* Get a newline-terminated wide character string of finite length
+   from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+                       __FILE *__restrict __stream);
+
+/* Write a string to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputws (const wchar_t *__restrict __ws,
+                  __FILE *__restrict __stream);
+
+
+/* Push a character back onto the input buffer of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_GNU
+/* These are defined to be equivalent to the `char' functions defined
+   in POSIX.1:1996.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern wint_t getwc_unlocked (__FILE *__stream);
+extern wint_t getwchar_unlocked (void);
+
+/* This is the wide character version of a GNU extension.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wint_t fgetwc_unlocked (__FILE *__stream);
+
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
+
+/* These are defined to be equivalent to the `char' functions defined
+   in POSIX.1:1996.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
+extern wint_t putwchar_unlocked (wchar_t __wc);
+
+
+/* This function does the same as `fgetws' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
+                                __FILE *__restrict __stream);
+
+/* This function does the same as `fputws' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputws_unlocked (const wchar_t *__restrict __ws,
+                           __FILE *__restrict __stream);
+#endif
+
+
+__BEGIN_NAMESPACE_C99
+/* Format TP into S according to FORMAT.
+   Write no more than MAXSIZE wide characters and return the number
+   of wide characters written, or 0 if it would exceed MAXSIZE.  */
+extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
+                       const wchar_t *__restrict __format,
+                       const struct tm *__restrict __tp) __THROW;
+__END_NAMESPACE_C99
+
+# ifdef __USE_GNU
+# include <xlocale.h>
+
+/* Similar to `wcsftime' but takes the information from
+   the provided locale and not the global locale.  */
+extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
+                         const wchar_t *__restrict __format,
+                         const struct tm *__restrict __tp,
+                         __locale_t __loc) __THROW;
+# endif
+
+/* The X/Open standard demands that most of the functions defined in
+   the <wctype.h> header must also appear here.  This is probably
+   because some X/Open members wrote their implementation before the
+   ISO C standard was published and introduced the better solution.
+   We have to provide these definitions for compliance reasons but we
+   do this nonsense only if really necessary.  */
+#if defined __USE_UNIX98 && !defined __USE_GNU
+# define __need_iswxxx
+# include <wctype.h>
+#endif
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/wchar2.h>
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/wchar-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* _WCHAR_H defined */
+
+#endif /* wchar.h  */
+
+/* Undefine all __need_* constants in case we are included to get those
+   constants but the whole file was already read.  */
+#undef __need_mbstate_t
+#undef __need_wint_t
diff --git a/lib/libdss-include/include/wctype.h b/lib/libdss-include/include/wctype.h
new file mode 100644 (file)
index 0000000..acbd8df
--- /dev/null
@@ -0,0 +1,318 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.25
+ *     Wide character classification and mapping utilities  <wctype.h>
+ */
+
+#ifndef _WCTYPE_H
+
+#include <features.h>
+#include <bits/types.h>
+
+#ifndef __need_iswxxx
+# define _WCTYPE_H     1
+
+/* Get wint_t from <wchar.h>.  */
+# define __need_wint_t
+# include <wchar.h>
+
+/* Constant expression of type `wint_t' whose value does not correspond
+   to any member of the extended character set.  */
+# ifndef WEOF
+#  define WEOF (0xffffffffu)
+# endif
+#endif
+#undef __need_iswxxx
+
+
+/* The following part is also used in the <wcsmbs.h> header when compiled
+   in the Unix98 compatibility mode.  */
+#ifndef __iswxxx_defined
+# define __iswxxx_defined      1
+
+__BEGIN_NAMESPACE_C99
+/* Scalar type that can hold values which represent locale-specific
+   character classifications.  */
+typedef unsigned long int wctype_t;
+__END_NAMESPACE_C99
+
+# ifndef _ISwbit
+/* The characteristics are stored always in network byte order (big
+   endian).  We define the bit value interpretations here dependent on the
+   machine's byte order.  */
+
+#  include <endian.h>
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#   define _ISwbit(bit)        (1 << (bit))
+#  else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#   define _ISwbit(bit)        \
+       ((bit) < 8 ? (int) ((1UL << (bit)) << 24)                             \
+        : ((bit) < 16 ? (int) ((1UL << (bit)) << 8)                          \
+           : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8)                       \
+              : (int) ((1UL << (bit)) >> 24))))
+#  endif
+
+enum
+{
+  __ISwupper = 0,                      /* UPPERCASE.  */
+  __ISwlower = 1,                      /* lowercase.  */
+  __ISwalpha = 2,                      /* Alphabetic.  */
+  __ISwdigit = 3,                      /* Numeric.  */
+  __ISwxdigit = 4,                     /* Hexadecimal numeric.  */
+  __ISwspace = 5,                      /* Whitespace.  */
+  __ISwprint = 6,                      /* Printing.  */
+  __ISwgraph = 7,                      /* Graphical.  */
+  __ISwblank = 8,                      /* Blank (usually SPC and TAB).  */
+  __ISwcntrl = 9,                      /* Control character.  */
+  __ISwpunct = 10,                     /* Punctuation.  */
+  __ISwalnum = 11,                     /* Alphanumeric.  */
+
+  _ISwupper = _ISwbit (__ISwupper),    /* UPPERCASE.  */
+  _ISwlower = _ISwbit (__ISwlower),    /* lowercase.  */
+  _ISwalpha = _ISwbit (__ISwalpha),    /* Alphabetic.  */
+  _ISwdigit = _ISwbit (__ISwdigit),    /* Numeric.  */
+  _ISwxdigit = _ISwbit (__ISwxdigit),  /* Hexadecimal numeric.  */
+  _ISwspace = _ISwbit (__ISwspace),    /* Whitespace.  */
+  _ISwprint = _ISwbit (__ISwprint),    /* Printing.  */
+  _ISwgraph = _ISwbit (__ISwgraph),    /* Graphical.  */
+  _ISwblank = _ISwbit (__ISwblank),    /* Blank (usually SPC and TAB).  */
+  _ISwcntrl = _ISwbit (__ISwcntrl),    /* Control character.  */
+  _ISwpunct = _ISwbit (__ISwpunct),    /* Punctuation.  */
+  _ISwalnum = _ISwbit (__ISwalnum)     /* Alphanumeric.  */
+};
+# endif /* Not _ISwbit  */
+
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_C99
+/*
+ * Wide-character classification functions: 7.15.2.1.
+ */
+
+/* Test for any wide character for which `iswalpha' or `iswdigit' is
+   true.  */
+extern int iswalnum (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswupper' or 'iswlower' is
+   true, or any wide character that is one of a locale-specific set of
+   wide-characters for which none of `iswcntrl', `iswdigit',
+   `iswpunct', or `iswspace' is true.  */
+extern int iswalpha (wint_t __wc) __THROW;
+
+/* Test for any control wide character.  */
+extern int iswcntrl (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a decimal-digit
+   character.  */
+extern int iswdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswprint' is true and
+   `iswspace' is false.  */
+extern int iswgraph (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a lowercase letter
+   or is one of a locale-specific set of wide characters for which
+   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswlower (wint_t __wc) __THROW;
+
+/* Test for any printing wide character.  */
+extern int iswprint (wint_t __wc) __THROW;
+
+/* Test for any printing wide character that is one of a
+   locale-specific et of wide characters for which neither `iswspace'
+   nor `iswalnum' is true.  */
+extern int iswpunct (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a locale-specific
+   set of wide characters for which none of `iswalnum', `iswgraph', or
+   `iswpunct' is true.  */
+extern int iswspace (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to an uppercase letter
+   or is one of a locale-specific set of wide character for which none
+   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswupper (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a hexadecimal-digit
+   character equivalent to that performed be the functions described
+   in the previous subclause.  */
+extern int iswxdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a standard blank
+   wide character or a locale-specific set of wide characters for
+   which `iswalnum' is false.  */
+# ifdef __USE_ISOC99
+extern int iswblank (wint_t __wc) __THROW;
+# endif
+
+/*
+ * Extensible wide-character classification functions: 7.15.2.2.
+ */
+
+/* Construct value that describes a class of wide characters identified
+   by the string argument PROPERTY.  */
+extern wctype_t wctype (const char *__property) __THROW;
+
+/* Determine whether the wide-character WC has the property described by
+   DESC.  */
+extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
+__END_NAMESPACE_C99
+
+
+/*
+ * Wide-character case-mapping functions: 7.15.3.1.
+ */
+
+__BEGIN_NAMESPACE_C99
+/* Scalar type that can hold values which represent locale-specific
+   character mappings.  */
+typedef const __int32_t *wctrans_t;
+__END_NAMESPACE_C99
+#ifdef __USE_GNU
+__USING_NAMESPACE_C99(wctrans_t)
+#endif
+
+__BEGIN_NAMESPACE_C99
+/* Converts an uppercase letter to the corresponding lowercase letter.  */
+extern wint_t towlower (wint_t __wc) __THROW;
+
+/* Converts an lowercase letter to the corresponding uppercase letter.  */
+extern wint_t towupper (wint_t __wc) __THROW;
+__END_NAMESPACE_C99
+
+__END_DECLS
+
+#endif /* need iswxxx.  */
+
+
+/* The remaining definitions and declarations must not appear in the
+   <wchar.h> header.  */
+#ifdef _WCTYPE_H
+
+/*
+ * Extensible wide-character mapping functions: 7.15.3.2.
+ */
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_C99
+/* Construct value that describes a mapping between wide characters
+   identified by the string argument PROPERTY.  */
+extern wctrans_t wctrans (const char *__property) __THROW;
+
+/* Map the wide character WC using the mapping described by DESC.  */
+extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW;
+__END_NAMESPACE_C99
+
+# ifdef __USE_XOPEN2K8
+/* Declare the interface to extended locale model.  */
+#  include <xlocale.h>
+
+/* Test for any wide character for which `iswalpha' or `iswdigit' is
+   true.  */
+extern int iswalnum_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character for which `iswupper' or 'iswlower' is
+   true, or any wide character that is one of a locale-specific set of
+   wide-characters for which none of `iswcntrl', `iswdigit',
+   `iswpunct', or `iswspace' is true.  */
+extern int iswalpha_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any control wide character.  */
+extern int iswcntrl_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a decimal-digit
+   character.  */
+extern int iswdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character for which `iswprint' is true and
+   `iswspace' is false.  */
+extern int iswgraph_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a lowercase letter
+   or is one of a locale-specific set of wide characters for which
+   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswlower_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any printing wide character.  */
+extern int iswprint_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any printing wide character that is one of a
+   locale-specific et of wide characters for which neither `iswspace'
+   nor `iswalnum' is true.  */
+extern int iswpunct_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a locale-specific
+   set of wide characters for which none of `iswalnum', `iswgraph', or
+   `iswpunct' is true.  */
+extern int iswspace_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to an uppercase letter
+   or is one of a locale-specific set of wide character for which none
+   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswupper_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a hexadecimal-digit
+   character equivalent to that performed be the functions described
+   in the previous subclause.  */
+extern int iswxdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a standard blank
+   wide character or a locale-specific set of wide characters for
+   which `iswalnum' is false.  */
+extern int iswblank_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Construct value that describes a class of wide characters identified
+   by the string argument PROPERTY.  */
+extern wctype_t wctype_l (const char *__property, __locale_t __locale)
+     __THROW;
+
+/* Determine whether the wide-character WC has the property described by
+   DESC.  */
+extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
+     __THROW;
+
+
+/*
+ * Wide-character case-mapping functions.
+ */
+
+/* Converts an uppercase letter to the corresponding lowercase letter.  */
+extern wint_t towlower_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Converts an lowercase letter to the corresponding uppercase letter.  */
+extern wint_t towupper_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Construct value that describes a mapping between wide characters
+   identified by the string argument PROPERTY.  */
+extern wctrans_t wctrans_l (const char *__property, __locale_t __locale)
+     __THROW;
+
+/* Map the wide character WC using the mapping described by DESC.  */
+extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
+                          __locale_t __locale) __THROW;
+
+# endif /* Use POSIX 2008.  */
+
+__END_DECLS
+
+#endif /* __WCTYPE_H defined.  */
+
+#endif /* wctype.h  */
diff --git a/lib/libdss-include/include/wordexp.h b/lib/libdss-include/include/wordexp.h
new file mode 100644 (file)
index 0000000..92dfa9f
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _WORDEXP_H
+#define        _WORDEXP_H      1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Bits set in the FLAGS argument to `wordexp'.  */
+enum
+  {
+    WRDE_DOOFFS = (1 << 0),    /* Insert PWORDEXP->we_offs NULLs.  */
+    WRDE_APPEND = (1 << 1),    /* Append to results of a previous call.  */
+    WRDE_NOCMD = (1 << 2),     /* Don't do command substitution.  */
+    WRDE_REUSE = (1 << 3),     /* Reuse storage in PWORDEXP.  */
+    WRDE_SHOWERR = (1 << 4),   /* Don't redirect stderr to /dev/null.  */
+    WRDE_UNDEF = (1 << 5),     /* Error for expanding undefined variables.  */
+    __WRDE_FLAGS = (WRDE_DOOFFS | WRDE_APPEND | WRDE_NOCMD |
+                   WRDE_REUSE | WRDE_SHOWERR | WRDE_UNDEF)
+  };
+
+/* Structure describing a word-expansion run.  */
+typedef struct
+  {
+    size_t we_wordc;           /* Count of words matched.  */
+    char **we_wordv;           /* List of expanded words.  */
+    size_t we_offs;            /* Slots to reserve in `we_wordv'.  */
+  } wordexp_t;
+
+/* Possible nonzero return values from `wordexp'.  */
+enum
+  {
+#ifdef __USE_XOPEN
+    WRDE_NOSYS = -1,           /* Never used since we support `wordexp'.  */
+#endif
+    WRDE_NOSPACE = 1,          /* Ran out of memory.  */
+    WRDE_BADCHAR,              /* A metachar appears in the wrong place.  */
+    WRDE_BADVAL,               /* Undefined var reference with WRDE_UNDEF.  */
+    WRDE_CMDSUB,               /* Command substitution with WRDE_NOCMD.  */
+    WRDE_SYNTAX                        /* Shell syntax error.  */
+  };
+
+/* Do word expansion of WORDS into PWORDEXP.  */
+extern int wordexp (const char *__restrict __words,
+                   wordexp_t *__restrict __pwordexp, int __flags);
+
+/* Free the storage allocated by a `wordexp' call.  */
+extern void wordfree (wordexp_t *__wordexp) __THROW;
+
+__END_DECLS
+
+#endif /* wordexp.h  */
diff --git a/lib/libdss-include/include/xen/evtchn.h b/lib/libdss-include/include/xen/evtchn.h
new file mode 100644 (file)
index 0000000..14e833e
--- /dev/null
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * evtchn.h
+ *
+ * Interface to /dev/xen/evtchn.
+ *
+ * Copyright (c) 2003-2005, K A Fraser
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_EVTCHN_H__
+#define __LINUX_PUBLIC_EVTCHN_H__
+
+/*
+ * Bind a fresh port to VIRQ @virq.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_VIRQ                         \
+       _IOC(_IOC_NONE, 'E', 0, sizeof(struct ioctl_evtchn_bind_virq))
+struct ioctl_evtchn_bind_virq {
+       unsigned int virq;
+};
+
+/*
+ * Bind a fresh port to remote <@remote_domain, @remote_port>.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_INTERDOMAIN                  \
+       _IOC(_IOC_NONE, 'E', 1, sizeof(struct ioctl_evtchn_bind_interdomain))
+struct ioctl_evtchn_bind_interdomain {
+       unsigned int remote_domain, remote_port;
+};
+
+/*
+ * Allocate a fresh port for binding to @remote_domain.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_UNBOUND_PORT                 \
+       _IOC(_IOC_NONE, 'E', 2, sizeof(struct ioctl_evtchn_bind_unbound_port))
+struct ioctl_evtchn_bind_unbound_port {
+       unsigned int remote_domain;
+};
+
+/*
+ * Unbind previously allocated @port.
+ */
+#define IOCTL_EVTCHN_UNBIND                            \
+       _IOC(_IOC_NONE, 'E', 3, sizeof(struct ioctl_evtchn_unbind))
+struct ioctl_evtchn_unbind {
+       unsigned int port;
+};
+
+/*
+ * Unbind previously allocated @port.
+ */
+#define IOCTL_EVTCHN_NOTIFY                            \
+       _IOC(_IOC_NONE, 'E', 4, sizeof(struct ioctl_evtchn_notify))
+struct ioctl_evtchn_notify {
+       unsigned int port;
+};
+
+/* Clear and reinitialise the event buffer. Clear error condition. */
+#define IOCTL_EVTCHN_RESET                             \
+       _IOC(_IOC_NONE, 'E', 5, 0)
+
+#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
diff --git a/lib/libdss-include/include/xen/gntalloc.h b/lib/libdss-include/include/xen/gntalloc.h
new file mode 100644 (file)
index 0000000..48d2790
--- /dev/null
@@ -0,0 +1,84 @@
+/******************************************************************************
+ * gntalloc.h
+ *
+ * Interface to /dev/xen/gntalloc.
+ *
+ * Author: Daniel De Graaf <dgdegra@tycho.nsa.gov>
+ *
+ * This file is in the public domain.
+ */
+
+#ifndef __LINUX_PUBLIC_GNTALLOC_H__
+#define __LINUX_PUBLIC_GNTALLOC_H__
+
+#include <linux/types.h>
+
+/*
+ * Allocates a new page and creates a new grant reference.
+ */
+#define IOCTL_GNTALLOC_ALLOC_GREF \
+_IOC(_IOC_NONE, 'G', 5, sizeof(struct ioctl_gntalloc_alloc_gref))
+struct ioctl_gntalloc_alloc_gref {
+       /* IN parameters */
+       /* The ID of the domain to be given access to the grants. */
+       __u16 domid;
+       /* Flags for this mapping */
+       __u16 flags;
+       /* Number of pages to map */
+       __u32 count;
+       /* OUT parameters */
+       /* The offset to be used on a subsequent call to mmap(). */
+       __u64 index;
+       /* The grant references of the newly created grant, one per page */
+       /* Variable size, depending on count */
+       __u32 gref_ids[1];
+};
+
+#define GNTALLOC_FLAG_WRITABLE 1
+
+/*
+ * Deallocates the grant reference, allowing the associated page to be freed if
+ * no other domains are using it.
+ */
+#define IOCTL_GNTALLOC_DEALLOC_GREF \
+_IOC(_IOC_NONE, 'G', 6, sizeof(struct ioctl_gntalloc_dealloc_gref))
+struct ioctl_gntalloc_dealloc_gref {
+       /* IN parameters */
+       /* The offset returned in the map operation */
+       __u64 index;
+       /* Number of references to unmap */
+       __u32 count;
+};
+
+/*
+ * Sets up an unmap notification within the page, so that the other side can do
+ * cleanup if this side crashes. Required to implement cross-domain robust
+ * mutexes or close notification on communication channels.
+ *
+ * Each mapped page only supports one notification; multiple calls referring to
+ * the same page overwrite the previous notification. You must clear the
+ * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it
+ * to occur.
+ */
+#define IOCTL_GNTALLOC_SET_UNMAP_NOTIFY \
+_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntalloc_unmap_notify))
+struct ioctl_gntalloc_unmap_notify {
+       /* IN parameters */
+       /* Offset in the file descriptor for a byte within the page (same as
+        * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to
+        * be cleared. Otherwise, it can be any byte in the page whose
+        * notification we are adjusting.
+        */
+       __u64 index;
+       /* Action(s) to take on unmap */
+       __u32 action;
+       /* Event channel to notify */
+       __u32 event_channel_port;
+};
+
+/* Clear (set to zero) the byte specified by index */
+#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
+/* Send an interrupt on the indicated event channel */
+#define UNMAP_NOTIFY_SEND_EVENT 0x2
+
+#endif /* __LINUX_PUBLIC_GNTALLOC_H__ */
diff --git a/lib/libdss-include/include/xen/gntdev.h b/lib/libdss-include/include/xen/gntdev.h
new file mode 100644 (file)
index 0000000..aa7610a
--- /dev/null
@@ -0,0 +1,152 @@
+/******************************************************************************
+ * gntdev.h
+ * 
+ * Interface to /dev/xen/gntdev.
+ * 
+ * Copyright (c) 2007, D G Murray
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_GNTDEV_H__
+#define __LINUX_PUBLIC_GNTDEV_H__
+
+#include <linux/types.h>
+
+struct ioctl_gntdev_grant_ref {
+       /* The domain ID of the grant to be mapped. */
+       __u32 domid;
+       /* The grant reference of the grant to be mapped. */
+       __u32 ref;
+};
+
+/*
+ * Inserts the grant references into the mapping table of an instance
+ * of gntdev. N.B. This does not perform the mapping, which is deferred
+ * until mmap() is called with @index as the offset.
+ */
+#define IOCTL_GNTDEV_MAP_GRANT_REF \
+_IOC(_IOC_NONE, 'G', 0, sizeof(struct ioctl_gntdev_map_grant_ref))
+struct ioctl_gntdev_map_grant_ref {
+       /* IN parameters */
+       /* The number of grants to be mapped. */
+       __u32 count;
+       __u32 pad;
+       /* OUT parameters */
+       /* The offset to be used on a subsequent call to mmap(). */
+       __u64 index;
+       /* Variable IN parameter. */
+       /* Array of grant references, of size @count. */
+       struct ioctl_gntdev_grant_ref refs[1];
+};
+
+/*
+ * Removes the grant references from the mapping table of an instance of
+ * of gntdev. N.B. munmap() must be called on the relevant virtual address(es)
+ * before this ioctl is called, or an error will result.
+ */
+#define IOCTL_GNTDEV_UNMAP_GRANT_REF \
+_IOC(_IOC_NONE, 'G', 1, sizeof(struct ioctl_gntdev_unmap_grant_ref))
+struct ioctl_gntdev_unmap_grant_ref {
+       /* IN parameters */
+       /* The offset was returned by the corresponding map operation. */
+       __u64 index;
+       /* The number of pages to be unmapped. */
+       __u32 count;
+       __u32 pad;
+};
+
+/*
+ * Returns the offset in the driver's address space that corresponds
+ * to @vaddr. This can be used to perform a munmap(), followed by an
+ * UNMAP_GRANT_REF ioctl, where no state about the offset is retained by
+ * the caller. The number of pages that were allocated at the same time as
+ * @vaddr is returned in @count.
+ *
+ * N.B. Where more than one page has been mapped into a contiguous range, the
+ *      supplied @vaddr must correspond to the start of the range; otherwise
+ *      an error will result. It is only possible to munmap() the entire
+ *      contiguously-allocated range at once, and not any subrange thereof.
+ */
+#define IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR \
+_IOC(_IOC_NONE, 'G', 2, sizeof(struct ioctl_gntdev_get_offset_for_vaddr))
+struct ioctl_gntdev_get_offset_for_vaddr {
+       /* IN parameters */
+       /* The virtual address of the first mapped page in a range. */
+       __u64 vaddr;
+       /* OUT parameters */
+       /* The offset that was used in the initial mmap() operation. */
+       __u64 offset;
+       /* The number of pages mapped in the VM area that begins at @vaddr. */
+       __u32 count;
+       __u32 pad;
+};
+
+/*
+ * Sets the maximum number of grants that may mapped at once by this gntdev
+ * instance.
+ *
+ * N.B. This must be called before any other ioctl is performed on the device.
+ */
+#define IOCTL_GNTDEV_SET_MAX_GRANTS \
+_IOC(_IOC_NONE, 'G', 3, sizeof(struct ioctl_gntdev_set_max_grants))
+struct ioctl_gntdev_set_max_grants {
+       /* IN parameter */
+       /* The maximum number of grants that may be mapped at once. */
+       __u32 count;
+};
+
+/*
+ * Sets up an unmap notification within the page, so that the other side can do
+ * cleanup if this side crashes. Required to implement cross-domain robust
+ * mutexes or close notification on communication channels.
+ *
+ * Each mapped page only supports one notification; multiple calls referring to
+ * the same page overwrite the previous notification. You must clear the
+ * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it
+ * to occur.
+ */
+#define IOCTL_GNTDEV_SET_UNMAP_NOTIFY \
+_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntdev_unmap_notify))
+struct ioctl_gntdev_unmap_notify {
+       /* IN parameters */
+       /* Offset in the file descriptor for a byte within the page (same as
+        * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to
+        * be cleared. Otherwise, it can be any byte in the page whose
+        * notification we are adjusting.
+        */
+       __u64 index;
+       /* Action(s) to take on unmap */
+       __u32 action;
+       /* Event channel to notify */
+       __u32 event_channel_port;
+};
+
+/* Clear (set to zero) the byte specified by index */
+#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
+/* Send an interrupt on the indicated event channel */
+#define UNMAP_NOTIFY_SEND_EVENT 0x2
+
+#endif /* __LINUX_PUBLIC_GNTDEV_H__ */
diff --git a/lib/libdss-include/include/xen/privcmd.h b/lib/libdss-include/include/xen/privcmd.h
new file mode 100644 (file)
index 0000000..7e0a6bc
--- /dev/null
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * privcmd.h
+ *
+ * Interface to /proc/xen/privcmd.
+ *
+ * Copyright (c) 2003-2005, K A Fraser
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_PRIVCMD_H__
+#define __LINUX_PUBLIC_PRIVCMD_H__
+
+#include <linux/types.h>
+
+#include <xen/interface/xen.h>
+
+struct privcmd_hypercall {
+       __u64 op;
+       __u64 arg[5];
+};
+
+struct privcmd_mmap_entry {
+       __u64 va;
+       /*
+        * This should be a GFN. It's not possible to change the name because
+        * it's exposed to the user-space.
+        */
+       __u64 mfn;
+       __u64 npages;
+};
+
+struct privcmd_mmap {
+       int num;
+       domid_t dom; /* target domain */
+       struct privcmd_mmap_entry *entry;
+};
+
+struct privcmd_mmapbatch {
+       int num;     /* number of pages to populate */
+       domid_t dom; /* target domain */
+       __u64 addr;  /* virtual address */
+       xen_pfn_t *arr; /* array of mfns - or'd with
+                                 PRIVCMD_MMAPBATCH_*_ERROR on err */
+};
+
+#define PRIVCMD_MMAPBATCH_MFN_ERROR     0xf0000000U
+#define PRIVCMD_MMAPBATCH_PAGED_ERROR   0x80000000U
+
+struct privcmd_mmapbatch_v2 {
+       unsigned int num; /* number of pages to populate */
+       domid_t dom;      /* target domain */
+       __u64 addr;       /* virtual address */
+       const xen_pfn_t *arr; /* array of mfns */
+       int *err;  /* array of error codes */
+};
+
+/*
+ * @cmd: IOCTL_PRIVCMD_HYPERCALL
+ * @arg: &privcmd_hypercall_t
+ * Return: Value returned from execution of the specified hypercall.
+ *
+ * @cmd: IOCTL_PRIVCMD_MMAPBATCH_V2
+ * @arg: &struct privcmd_mmapbatch_v2
+ * Return: 0 on success (i.e., arg->err contains valid error codes for
+ * each frame).  On an error other than a failed frame remap, -1 is
+ * returned and errno is set to EINVAL, EFAULT etc.  As an exception,
+ * if the operation was otherwise successful but any frame failed with
+ * -ENOENT, then -1 is returned and errno is set to ENOENT.
+ */
+#define IOCTL_PRIVCMD_HYPERCALL                                        \
+       _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall))
+#define IOCTL_PRIVCMD_MMAP                                     \
+       _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap))
+#define IOCTL_PRIVCMD_MMAPBATCH                                        \
+       _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch))
+#define IOCTL_PRIVCMD_MMAPBATCH_V2                             \
+       _IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2))
+
+#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
diff --git a/lib/libdss-include/include/xlocale.h b/lib/libdss-include/include/xlocale.h
new file mode 100644 (file)
index 0000000..e4408e2
--- /dev/null
@@ -0,0 +1,44 @@
+/* Definition of locale datatype.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _XLOCALE_H
+#define _XLOCALE_H     1
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  The file and
+   this data structure is not standardized.  Don't rely on it.  It can
+   go away without warning.  */
+typedef struct __locale_struct
+{
+  /* Note: LC_ALL is not a valid index into this array.  */
+  struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */
+
+  /* To increase the speed of this solution we add some special members.  */
+  const unsigned short int *__ctype_b;
+  const int *__ctype_tolower;
+  const int *__ctype_toupper;
+
+  /* Note: LC_ALL is not a valid index into this array.  */
+  const char *__names[13];
+} *__locale_t;
+
+/* POSIX 2008 makes locale_t official.  */
+typedef __locale_t locale_t;
+
+#endif /* xlocale.h */
diff --git a/lib/libdss-include/inttypes.h b/lib/libdss-include/inttypes.h
new file mode 100644 (file)
index 0000000..1207bf2
--- /dev/null
@@ -0,0 +1,434 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99: 7.8 Format conversion of integer types <inttypes.h>
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H    1
+
+#include <features.h>
+/* Get the type definitions.  */
+#include <stdint.h>
+
+/* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
+#ifndef ____gwchar_t_defined
+# ifdef __cplusplus
+#  define __gwchar_t wchar_t
+# elif defined __WCHAR_TYPE__
+typedef __WCHAR_TYPE__ __gwchar_t;
+# else
+#  define __need_wchar_t
+#  include <stddef.h>
+typedef wchar_t __gwchar_t;
+# endif
+# define ____gwchar_t_defined  1
+#endif
+
+# if __WORDSIZE == 64
+#  define __PRI64_PREFIX       "l"
+#  define __PRIPTR_PREFIX      "l"
+# else
+#  define __PRI64_PREFIX       "ll"
+#  define __PRIPTR_PREFIX
+# endif
+
+/* Macros for printing format specifiers.  */
+
+/* Decimal notation.  */
+# define PRId8         "d"
+# define PRId16                "d"
+# define PRId32                "d"
+# define PRId64                __PRI64_PREFIX "d"
+
+# define PRIdLEAST8    "d"
+# define PRIdLEAST16   "d"
+# define PRIdLEAST32   "d"
+# define PRIdLEAST64   __PRI64_PREFIX "d"
+
+# define PRIdFAST8     "d"
+# define PRIdFAST16    __PRIPTR_PREFIX "d"
+# define PRIdFAST32    __PRIPTR_PREFIX "d"
+# define PRIdFAST64    __PRI64_PREFIX "d"
+
+
+# define PRIi8         "i"
+# define PRIi16                "i"
+# define PRIi32                "i"
+# define PRIi64                __PRI64_PREFIX "i"
+
+# define PRIiLEAST8    "i"
+# define PRIiLEAST16   "i"
+# define PRIiLEAST32   "i"
+# define PRIiLEAST64   __PRI64_PREFIX "i"
+
+# define PRIiFAST8     "i"
+# define PRIiFAST16    __PRIPTR_PREFIX "i"
+# define PRIiFAST32    __PRIPTR_PREFIX "i"
+# define PRIiFAST64    __PRI64_PREFIX "i"
+
+/* Octal notation.  */
+# define PRIo8         "o"
+# define PRIo16                "o"
+# define PRIo32                "o"
+# define PRIo64                __PRI64_PREFIX "o"
+
+# define PRIoLEAST8    "o"
+# define PRIoLEAST16   "o"
+# define PRIoLEAST32   "o"
+# define PRIoLEAST64   __PRI64_PREFIX "o"
+
+# define PRIoFAST8     "o"
+# define PRIoFAST16    __PRIPTR_PREFIX "o"
+# define PRIoFAST32    __PRIPTR_PREFIX "o"
+# define PRIoFAST64    __PRI64_PREFIX "o"
+
+/* Unsigned integers.  */
+# define PRIu8         "u"
+# define PRIu16                "u"
+# define PRIu32                "u"
+# define PRIu64                __PRI64_PREFIX "u"
+
+# define PRIuLEAST8    "u"
+# define PRIuLEAST16   "u"
+# define PRIuLEAST32   "u"
+# define PRIuLEAST64   __PRI64_PREFIX "u"
+
+# define PRIuFAST8     "u"
+# define PRIuFAST16    __PRIPTR_PREFIX "u"
+# define PRIuFAST32    __PRIPTR_PREFIX "u"
+# define PRIuFAST64    __PRI64_PREFIX "u"
+
+/* lowercase hexadecimal notation.  */
+# define PRIx8         "x"
+# define PRIx16                "x"
+# define PRIx32                "x"
+# define PRIx64                __PRI64_PREFIX "x"
+
+# define PRIxLEAST8    "x"
+# define PRIxLEAST16   "x"
+# define PRIxLEAST32   "x"
+# define PRIxLEAST64   __PRI64_PREFIX "x"
+
+# define PRIxFAST8     "x"
+# define PRIxFAST16    __PRIPTR_PREFIX "x"
+# define PRIxFAST32    __PRIPTR_PREFIX "x"
+# define PRIxFAST64    __PRI64_PREFIX "x"
+
+/* UPPERCASE hexadecimal notation.  */
+# define PRIX8         "X"
+# define PRIX16                "X"
+# define PRIX32                "X"
+# define PRIX64                __PRI64_PREFIX "X"
+
+# define PRIXLEAST8    "X"
+# define PRIXLEAST16   "X"
+# define PRIXLEAST32   "X"
+# define PRIXLEAST64   __PRI64_PREFIX "X"
+
+# define PRIXFAST8     "X"
+# define PRIXFAST16    __PRIPTR_PREFIX "X"
+# define PRIXFAST32    __PRIPTR_PREFIX "X"
+# define PRIXFAST64    __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intmax_t' and `uintmax_t'.  */
+# define PRIdMAX       __PRI64_PREFIX "d"
+# define PRIiMAX       __PRI64_PREFIX "i"
+# define PRIoMAX       __PRI64_PREFIX "o"
+# define PRIuMAX       __PRI64_PREFIX "u"
+# define PRIxMAX       __PRI64_PREFIX "x"
+# define PRIXMAX       __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intptr_t' and `uintptr_t'.  */
+# define PRIdPTR       __PRIPTR_PREFIX "d"
+# define PRIiPTR       __PRIPTR_PREFIX "i"
+# define PRIoPTR       __PRIPTR_PREFIX "o"
+# define PRIuPTR       __PRIPTR_PREFIX "u"
+# define PRIxPTR       __PRIPTR_PREFIX "x"
+# define PRIXPTR       __PRIPTR_PREFIX "X"
+
+
+/* Macros for scanning format specifiers.  */
+
+/* Signed decimal notation.  */
+# define SCNd8         "hhd"
+# define SCNd16                "hd"
+# define SCNd32                "d"
+# define SCNd64                __PRI64_PREFIX "d"
+
+# define SCNdLEAST8    "hhd"
+# define SCNdLEAST16   "hd"
+# define SCNdLEAST32   "d"
+# define SCNdLEAST64   __PRI64_PREFIX "d"
+
+# define SCNdFAST8     "hhd"
+# define SCNdFAST16    __PRIPTR_PREFIX "d"
+# define SCNdFAST32    __PRIPTR_PREFIX "d"
+# define SCNdFAST64    __PRI64_PREFIX "d"
+
+/* Signed decimal notation.  */
+# define SCNi8         "hhi"
+# define SCNi16                "hi"
+# define SCNi32                "i"
+# define SCNi64                __PRI64_PREFIX "i"
+
+# define SCNiLEAST8    "hhi"
+# define SCNiLEAST16   "hi"
+# define SCNiLEAST32   "i"
+# define SCNiLEAST64   __PRI64_PREFIX "i"
+
+# define SCNiFAST8     "hhi"
+# define SCNiFAST16    __PRIPTR_PREFIX "i"
+# define SCNiFAST32    __PRIPTR_PREFIX "i"
+# define SCNiFAST64    __PRI64_PREFIX "i"
+
+/* Unsigned decimal notation.  */
+# define SCNu8         "hhu"
+# define SCNu16                "hu"
+# define SCNu32                "u"
+# define SCNu64                __PRI64_PREFIX "u"
+
+# define SCNuLEAST8    "hhu"
+# define SCNuLEAST16   "hu"
+# define SCNuLEAST32   "u"
+# define SCNuLEAST64   __PRI64_PREFIX "u"
+
+# define SCNuFAST8     "hhu"
+# define SCNuFAST16    __PRIPTR_PREFIX "u"
+# define SCNuFAST32    __PRIPTR_PREFIX "u"
+# define SCNuFAST64    __PRI64_PREFIX "u"
+
+/* Octal notation.  */
+# define SCNo8         "hho"
+# define SCNo16                "ho"
+# define SCNo32                "o"
+# define SCNo64                __PRI64_PREFIX "o"
+
+# define SCNoLEAST8    "hho"
+# define SCNoLEAST16   "ho"
+# define SCNoLEAST32   "o"
+# define SCNoLEAST64   __PRI64_PREFIX "o"
+
+# define SCNoFAST8     "hho"
+# define SCNoFAST16    __PRIPTR_PREFIX "o"
+# define SCNoFAST32    __PRIPTR_PREFIX "o"
+# define SCNoFAST64    __PRI64_PREFIX "o"
+
+/* Hexadecimal notation.  */
+# define SCNx8         "hhx"
+# define SCNx16                "hx"
+# define SCNx32                "x"
+# define SCNx64                __PRI64_PREFIX "x"
+
+# define SCNxLEAST8    "hhx"
+# define SCNxLEAST16   "hx"
+# define SCNxLEAST32   "x"
+# define SCNxLEAST64   __PRI64_PREFIX "x"
+
+# define SCNxFAST8     "hhx"
+# define SCNxFAST16    __PRIPTR_PREFIX "x"
+# define SCNxFAST32    __PRIPTR_PREFIX "x"
+# define SCNxFAST64    __PRI64_PREFIX "x"
+
+
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX       __PRI64_PREFIX "d"
+# define SCNiMAX       __PRI64_PREFIX "i"
+# define SCNoMAX       __PRI64_PREFIX "o"
+# define SCNuMAX       __PRI64_PREFIX "u"
+# define SCNxMAX       __PRI64_PREFIX "x"
+
+/* Macros for scaning `intptr_t' and `uintptr_t'.  */
+# define SCNdPTR       __PRIPTR_PREFIX "d"
+# define SCNiPTR       __PRIPTR_PREFIX "i"
+# define SCNoPTR       __PRIPTR_PREFIX "o"
+# define SCNuPTR       __PRIPTR_PREFIX "u"
+# define SCNxPTR       __PRIPTR_PREFIX "x"
+
+
+__BEGIN_DECLS
+
+#if __WORDSIZE == 64
+
+/* We have to define the `uintmax_t' type using `ldiv_t'.  */
+typedef struct
+  {
+    long int quot;             /* Quotient.  */
+    long int rem;              /* Remainder.  */
+  } imaxdiv_t;
+
+#else
+
+/* We have to define the `uintmax_t' type using `lldiv_t'.  */
+typedef struct
+  {
+    __extension__ long long int quot;  /* Quotient.  */
+    __extension__ long long int rem;   /* Remainder.  */
+  } imaxdiv_t;
+
+#endif
+
+
+/* Compute absolute value of N.  */
+extern intmax_t imaxabs (intmax_t __n) __THROW __attribute__ ((__const__));
+
+/* Return the `imaxdiv_t' representation of the value of NUMER over DENOM. */
+extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
+      __THROW __attribute__ ((__const__));
+
+/* Like `strtol' but convert to `intmax_t'.  */
+extern intmax_t strtoimax (const char *__restrict __nptr,
+                          char **__restrict __endptr, int __base) __THROW;
+
+/* Like `strtoul' but convert to `uintmax_t'.  */
+extern uintmax_t strtoumax (const char *__restrict __nptr,
+                           char ** __restrict __endptr, int __base) __THROW;
+
+/* Like `wcstol' but convert to `intmax_t'.  */
+extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
+                          __gwchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
+                           __gwchar_t ** __restrict __endptr, int __base)
+     __THROW;
+
+#ifdef __USE_EXTERN_INLINES
+
+# if __WORDSIZE == 64
+
+extern long int __strtol_internal (const char *__restrict __nptr,
+                                  char **__restrict __endptr,
+                                  int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtol_internal (nptr, endptr, base, 0);
+}
+
+extern unsigned long int __strtoul_internal (const char *__restrict __nptr,
+                                            char ** __restrict __endptr,
+                                            int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoul_internal (nptr, endptr, base, 0);
+}
+
+extern long int __wcstol_internal (const __gwchar_t * __restrict __nptr,
+                                  __gwchar_t **__restrict __endptr,
+                                  int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstol_internal (nptr, endptr, base, 0);
+}
+
+extern unsigned long int __wcstoul_internal (const __gwchar_t *
+                                            __restrict __nptr,
+                                            __gwchar_t **
+                                            __restrict __endptr,
+                                            int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoul_internal (nptr, endptr, base, 0);
+}
+
+# else /* __WORDSIZE == 32 */
+
+__extension__
+extern long long int __strtoll_internal (const char *__restrict __nptr,
+                                        char **__restrict __endptr,
+                                        int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoll_internal (nptr, endptr, base, 0);
+}
+
+__extension__
+extern unsigned long long int __strtoull_internal (const char *
+                                                  __restrict __nptr,
+                                                  char **
+                                                  __restrict __endptr,
+                                                  int __base,
+                                                  int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `strtoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr,
+                 int base))
+{
+  return __strtoull_internal (nptr, endptr, base, 0);
+}
+
+__extension__
+extern long long int __wcstoll_internal (const __gwchar_t *__restrict __nptr,
+                                        __gwchar_t **__restrict __endptr,
+                                        int __base, int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstol' but convert to `intmax_t'.  */
+__extern_inline intmax_t
+__NTH (wcstoimax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoll_internal (nptr, endptr, base, 0);
+}
+
+
+__extension__
+extern unsigned long long int __wcstoull_internal (const __gwchar_t *
+                                                  __restrict __nptr,
+                                                  __gwchar_t **
+                                                  __restrict __endptr,
+                                                  int __base,
+                                                  int __group)
+  __THROW __nonnull ((1)) __wur;
+/* Like `wcstoul' but convert to `uintmax_t'.  */
+__extern_inline uintmax_t
+__NTH (wcstoumax (const __gwchar_t *__restrict nptr,
+                 __gwchar_t **__restrict endptr, int base))
+{
+  return __wcstoull_internal (nptr, endptr, base, 0);
+}
+
+# endif        /* __WORDSIZE == 32     */
+#endif /* Use extern inlines.  */
+
+__END_DECLS
+
+#endif /* inttypes.h */
diff --git a/lib/libdss-include/langinfo.h b/lib/libdss-include/langinfo.h
new file mode 100644 (file)
index 0000000..481e226
--- /dev/null
@@ -0,0 +1,599 @@
+/* Access to locale-dependent parameters.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LANGINFO_H
+#define        _LANGINFO_H 1
+
+/* Get the type definition.  */
+#include <nl_types.h>
+
+#include <bits/locale.h>       /* Define the __LC_* category names.  */
+
+
+__BEGIN_DECLS
+
+/* Construct an `nl_item' value for `nl_langinfo' from a locale category
+   (LC_*) and an item index within the category.  Some code may depend on
+   the item values within a category increasing monotonically with the
+   indices.  */
+#define _NL_ITEM(category, index)      (((category) << 16) | (index))
+
+/* Extract the category and item index from a constructed `nl_item' value.  */
+#define _NL_ITEM_CATEGORY(item)                ((int) (item) >> 16)
+#define _NL_ITEM_INDEX(item)           ((int) (item) & 0xffff)
+
+/* Enumeration of locale items that can be queried with `nl_langinfo'.  */
+enum
+{
+  /* LC_TIME category: date and time formatting.  */
+
+  /* Abbreviated days of the week. */
+  ABDAY_1 = _NL_ITEM (__LC_TIME, 0), /* Sun */
+#define ABDAY_1                        ABDAY_1
+  ABDAY_2,
+#define ABDAY_2                        ABDAY_2
+  ABDAY_3,
+#define ABDAY_3                        ABDAY_3
+  ABDAY_4,
+#define ABDAY_4                        ABDAY_4
+  ABDAY_5,
+#define ABDAY_5                        ABDAY_5
+  ABDAY_6,
+#define ABDAY_6                        ABDAY_6
+  ABDAY_7,
+#define ABDAY_7                        ABDAY_7
+
+  /* Long-named days of the week. */
+  DAY_1,                       /* Sunday */
+#define DAY_1                  DAY_1
+  DAY_2,                       /* Monday */
+#define DAY_2                  DAY_2
+  DAY_3,                       /* Tuesday */
+#define DAY_3                  DAY_3
+  DAY_4,                       /* Wednesday */
+#define DAY_4                  DAY_4
+  DAY_5,                       /* Thursday */
+#define DAY_5                  DAY_5
+  DAY_6,                       /* Friday */
+#define DAY_6                  DAY_6
+  DAY_7,                       /* Saturday */
+#define DAY_7                  DAY_7
+
+  /* Abbreviated month names.  */
+  ABMON_1,                     /* Jan */
+#define ABMON_1                        ABMON_1
+  ABMON_2,
+#define ABMON_2                        ABMON_2
+  ABMON_3,
+#define ABMON_3                        ABMON_3
+  ABMON_4,
+#define ABMON_4                        ABMON_4
+  ABMON_5,
+#define ABMON_5                        ABMON_5
+  ABMON_6,
+#define ABMON_6                        ABMON_6
+  ABMON_7,
+#define ABMON_7                        ABMON_7
+  ABMON_8,
+#define ABMON_8                        ABMON_8
+  ABMON_9,
+#define ABMON_9                        ABMON_9
+  ABMON_10,
+#define ABMON_10               ABMON_10
+  ABMON_11,
+#define ABMON_11               ABMON_11
+  ABMON_12,
+#define ABMON_12               ABMON_12
+
+  /* Long month names.  */
+  MON_1,                       /* January */
+#define MON_1                  MON_1
+  MON_2,
+#define MON_2                  MON_2
+  MON_3,
+#define MON_3                  MON_3
+  MON_4,
+#define MON_4                  MON_4
+  MON_5,
+#define MON_5                  MON_5
+  MON_6,
+#define MON_6                  MON_6
+  MON_7,
+#define MON_7                  MON_7
+  MON_8,
+#define MON_8                  MON_8
+  MON_9,
+#define MON_9                  MON_9
+  MON_10,
+#define MON_10                 MON_10
+  MON_11,
+#define MON_11                 MON_11
+  MON_12,
+#define MON_12                 MON_12
+
+  AM_STR,                      /* Ante meridiem string.  */
+#define AM_STR                 AM_STR
+  PM_STR,                      /* Post meridiem string.  */
+#define PM_STR                 PM_STR
+
+  D_T_FMT,                     /* Date and time format for strftime.  */
+#define D_T_FMT                        D_T_FMT
+  D_FMT,                       /* Date format for strftime.  */
+#define D_FMT                  D_FMT
+  T_FMT,                       /* Time format for strftime.  */
+#define T_FMT                  T_FMT
+  T_FMT_AMPM,                  /* 12-hour time format for strftime.  */
+#define T_FMT_AMPM             T_FMT_AMPM
+
+  ERA,                         /* Alternate era.  */
+#define ERA                    ERA
+  __ERA_YEAR,                  /* Year in alternate era format.  */
+#ifdef __USE_GNU
+# define ERA_YEAR              __ERA_YEAR
+#endif
+  ERA_D_FMT,                   /* Date in alternate era format.  */
+#define ERA_D_FMT              ERA_D_FMT
+  ALT_DIGITS,                  /* Alternate symbols for digits.  */
+#define ALT_DIGITS             ALT_DIGITS
+  ERA_D_T_FMT,                 /* Date and time in alternate era format.  */
+#define ERA_D_T_FMT            ERA_D_T_FMT
+  ERA_T_FMT,                   /* Time in alternate era format.  */
+#define ERA_T_FMT              ERA_T_FMT
+
+  _NL_TIME_ERA_NUM_ENTRIES,    /* Number entries in the era arrays.  */
+  _NL_TIME_ERA_ENTRIES,                /* Structure with era entries in usable form.*/
+
+  _NL_WABDAY_1,                /* Sun */
+  _NL_WABDAY_2,
+  _NL_WABDAY_3,
+  _NL_WABDAY_4,
+  _NL_WABDAY_5,
+  _NL_WABDAY_6,
+  _NL_WABDAY_7,
+
+  /* Long-named days of the week. */
+  _NL_WDAY_1,          /* Sunday */
+  _NL_WDAY_2,          /* Monday */
+  _NL_WDAY_3,          /* Tuesday */
+  _NL_WDAY_4,          /* Wednesday */
+  _NL_WDAY_5,          /* Thursday */
+  _NL_WDAY_6,          /* Friday */
+  _NL_WDAY_7,          /* Saturday */
+
+  /* Abbreviated month names.  */
+  _NL_WABMON_1,                /* Jan */
+  _NL_WABMON_2,
+  _NL_WABMON_3,
+  _NL_WABMON_4,
+  _NL_WABMON_5,
+  _NL_WABMON_6,
+  _NL_WABMON_7,
+  _NL_WABMON_8,
+  _NL_WABMON_9,
+  _NL_WABMON_10,
+  _NL_WABMON_11,
+  _NL_WABMON_12,
+
+  /* Long month names.  */
+  _NL_WMON_1,          /* January */
+  _NL_WMON_2,
+  _NL_WMON_3,
+  _NL_WMON_4,
+  _NL_WMON_5,
+  _NL_WMON_6,
+  _NL_WMON_7,
+  _NL_WMON_8,
+  _NL_WMON_9,
+  _NL_WMON_10,
+  _NL_WMON_11,
+  _NL_WMON_12,
+
+  _NL_WAM_STR,         /* Ante meridiem string.  */
+  _NL_WPM_STR,         /* Post meridiem string.  */
+
+  _NL_WD_T_FMT,                /* Date and time format for strftime.  */
+  _NL_WD_FMT,          /* Date format for strftime.  */
+  _NL_WT_FMT,          /* Time format for strftime.  */
+  _NL_WT_FMT_AMPM,     /* 12-hour time format for strftime.  */
+
+  _NL_WERA_YEAR,       /* Year in alternate era format.  */
+  _NL_WERA_D_FMT,      /* Date in alternate era format.  */
+  _NL_WALT_DIGITS,     /* Alternate symbols for digits.  */
+  _NL_WERA_D_T_FMT,    /* Date and time in alternate era format.  */
+  _NL_WERA_T_FMT,      /* Time in alternate era format.  */
+
+  _NL_TIME_WEEK_NDAYS,
+  _NL_TIME_WEEK_1STDAY,
+  _NL_TIME_WEEK_1STWEEK,
+  _NL_TIME_FIRST_WEEKDAY,
+  _NL_TIME_FIRST_WORKDAY,
+  _NL_TIME_CAL_DIRECTION,
+  _NL_TIME_TIMEZONE,
+
+  _DATE_FMT,           /* strftime format for date.  */
+#define _DATE_FMT      _DATE_FMT
+  _NL_W_DATE_FMT,
+
+  _NL_TIME_CODESET,
+
+  _NL_NUM_LC_TIME,     /* Number of indices in LC_TIME category.  */
+
+  /* LC_COLLATE category: text sorting.
+     This information is accessed by the strcoll and strxfrm functions.
+     These `nl_langinfo' names are used only internally.  */
+  _NL_COLLATE_NRULES = _NL_ITEM (__LC_COLLATE, 0),
+  _NL_COLLATE_RULESETS,
+  _NL_COLLATE_TABLEMB,
+  _NL_COLLATE_WEIGHTMB,
+  _NL_COLLATE_EXTRAMB,
+  _NL_COLLATE_INDIRECTMB,
+  _NL_COLLATE_GAP1,
+  _NL_COLLATE_GAP2,
+  _NL_COLLATE_GAP3,
+  _NL_COLLATE_TABLEWC,
+  _NL_COLLATE_WEIGHTWC,
+  _NL_COLLATE_EXTRAWC,
+  _NL_COLLATE_INDIRECTWC,
+  _NL_COLLATE_SYMB_HASH_SIZEMB,
+  _NL_COLLATE_SYMB_TABLEMB,
+  _NL_COLLATE_SYMB_EXTRAMB,
+  _NL_COLLATE_COLLSEQMB,
+  _NL_COLLATE_COLLSEQWC,
+  _NL_COLLATE_CODESET,
+  _NL_NUM_LC_COLLATE,
+
+  /* LC_CTYPE category: character classification.
+     This information is accessed by the functions in <ctype.h>.
+     These `nl_langinfo' names are used only internally.  */
+  _NL_CTYPE_CLASS = _NL_ITEM (__LC_CTYPE, 0),
+  _NL_CTYPE_TOUPPER,
+  _NL_CTYPE_GAP1,
+  _NL_CTYPE_TOLOWER,
+  _NL_CTYPE_GAP2,
+  _NL_CTYPE_CLASS32,
+  _NL_CTYPE_GAP3,
+  _NL_CTYPE_GAP4,
+  _NL_CTYPE_GAP5,
+  _NL_CTYPE_GAP6,
+  _NL_CTYPE_CLASS_NAMES,
+  _NL_CTYPE_MAP_NAMES,
+  _NL_CTYPE_WIDTH,
+  _NL_CTYPE_MB_CUR_MAX,
+  _NL_CTYPE_CODESET_NAME,
+  CODESET = _NL_CTYPE_CODESET_NAME,
+#define CODESET                        CODESET
+  _NL_CTYPE_TOUPPER32,
+  _NL_CTYPE_TOLOWER32,
+  _NL_CTYPE_CLASS_OFFSET,
+  _NL_CTYPE_MAP_OFFSET,
+  _NL_CTYPE_INDIGITS_MB_LEN,
+  _NL_CTYPE_INDIGITS0_MB,
+  _NL_CTYPE_INDIGITS1_MB,
+  _NL_CTYPE_INDIGITS2_MB,
+  _NL_CTYPE_INDIGITS3_MB,
+  _NL_CTYPE_INDIGITS4_MB,
+  _NL_CTYPE_INDIGITS5_MB,
+  _NL_CTYPE_INDIGITS6_MB,
+  _NL_CTYPE_INDIGITS7_MB,
+  _NL_CTYPE_INDIGITS8_MB,
+  _NL_CTYPE_INDIGITS9_MB,
+  _NL_CTYPE_INDIGITS_WC_LEN,
+  _NL_CTYPE_INDIGITS0_WC,
+  _NL_CTYPE_INDIGITS1_WC,
+  _NL_CTYPE_INDIGITS2_WC,
+  _NL_CTYPE_INDIGITS3_WC,
+  _NL_CTYPE_INDIGITS4_WC,
+  _NL_CTYPE_INDIGITS5_WC,
+  _NL_CTYPE_INDIGITS6_WC,
+  _NL_CTYPE_INDIGITS7_WC,
+  _NL_CTYPE_INDIGITS8_WC,
+  _NL_CTYPE_INDIGITS9_WC,
+  _NL_CTYPE_OUTDIGIT0_MB,
+  _NL_CTYPE_OUTDIGIT1_MB,
+  _NL_CTYPE_OUTDIGIT2_MB,
+  _NL_CTYPE_OUTDIGIT3_MB,
+  _NL_CTYPE_OUTDIGIT4_MB,
+  _NL_CTYPE_OUTDIGIT5_MB,
+  _NL_CTYPE_OUTDIGIT6_MB,
+  _NL_CTYPE_OUTDIGIT7_MB,
+  _NL_CTYPE_OUTDIGIT8_MB,
+  _NL_CTYPE_OUTDIGIT9_MB,
+  _NL_CTYPE_OUTDIGIT0_WC,
+  _NL_CTYPE_OUTDIGIT1_WC,
+  _NL_CTYPE_OUTDIGIT2_WC,
+  _NL_CTYPE_OUTDIGIT3_WC,
+  _NL_CTYPE_OUTDIGIT4_WC,
+  _NL_CTYPE_OUTDIGIT5_WC,
+  _NL_CTYPE_OUTDIGIT6_WC,
+  _NL_CTYPE_OUTDIGIT7_WC,
+  _NL_CTYPE_OUTDIGIT8_WC,
+  _NL_CTYPE_OUTDIGIT9_WC,
+  _NL_CTYPE_TRANSLIT_TAB_SIZE,
+  _NL_CTYPE_TRANSLIT_FROM_IDX,
+  _NL_CTYPE_TRANSLIT_FROM_TBL,
+  _NL_CTYPE_TRANSLIT_TO_IDX,
+  _NL_CTYPE_TRANSLIT_TO_TBL,
+  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN,
+  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING,
+  _NL_CTYPE_TRANSLIT_IGNORE_LEN,
+  _NL_CTYPE_TRANSLIT_IGNORE,
+  _NL_CTYPE_MAP_TO_NONASCII,
+  _NL_CTYPE_NONASCII_CASE,
+  _NL_CTYPE_EXTRA_MAP_1,
+  _NL_CTYPE_EXTRA_MAP_2,
+  _NL_CTYPE_EXTRA_MAP_3,
+  _NL_CTYPE_EXTRA_MAP_4,
+  _NL_CTYPE_EXTRA_MAP_5,
+  _NL_CTYPE_EXTRA_MAP_6,
+  _NL_CTYPE_EXTRA_MAP_7,
+  _NL_CTYPE_EXTRA_MAP_8,
+  _NL_CTYPE_EXTRA_MAP_9,
+  _NL_CTYPE_EXTRA_MAP_10,
+  _NL_CTYPE_EXTRA_MAP_11,
+  _NL_CTYPE_EXTRA_MAP_12,
+  _NL_CTYPE_EXTRA_MAP_13,
+  _NL_CTYPE_EXTRA_MAP_14,
+  _NL_NUM_LC_CTYPE,
+
+  /* LC_MONETARY category: formatting of monetary quantities.
+     These items each correspond to a member of `struct lconv',
+     defined in <locale.h>.  */
+  __INT_CURR_SYMBOL = _NL_ITEM (__LC_MONETARY, 0),
+#ifdef __USE_GNU
+# define INT_CURR_SYMBOL       __INT_CURR_SYMBOL
+#endif
+  __CURRENCY_SYMBOL,
+#ifdef __USE_GNU
+# define CURRENCY_SYMBOL       __CURRENCY_SYMBOL
+#endif
+  __MON_DECIMAL_POINT,
+#ifdef __USE_GNU
+# define MON_DECIMAL_POINT     __MON_DECIMAL_POINT
+#endif
+  __MON_THOUSANDS_SEP,
+#ifdef __USE_GNU
+# define MON_THOUSANDS_SEP     __MON_THOUSANDS_SEP
+#endif
+  __MON_GROUPING,
+#ifdef __USE_GNU
+# define MON_GROUPING          __MON_GROUPING
+#endif
+  __POSITIVE_SIGN,
+#ifdef __USE_GNU
+# define POSITIVE_SIGN         __POSITIVE_SIGN
+#endif
+  __NEGATIVE_SIGN,
+#ifdef __USE_GNU
+# define NEGATIVE_SIGN         __NEGATIVE_SIGN
+#endif
+  __INT_FRAC_DIGITS,
+#ifdef __USE_GNU
+# define INT_FRAC_DIGITS       __INT_FRAC_DIGITS
+#endif
+  __FRAC_DIGITS,
+#ifdef __USE_GNU
+# define FRAC_DIGITS           __FRAC_DIGITS
+#endif
+  __P_CS_PRECEDES,
+#ifdef __USE_GNU
+# define P_CS_PRECEDES         __P_CS_PRECEDES
+#endif
+  __P_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define P_SEP_BY_SPACE                __P_SEP_BY_SPACE
+#endif
+  __N_CS_PRECEDES,
+#ifdef __USE_GNU
+# define N_CS_PRECEDES         __N_CS_PRECEDES
+#endif
+  __N_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define N_SEP_BY_SPACE                __N_SEP_BY_SPACE
+#endif
+  __P_SIGN_POSN,
+#ifdef __USE_GNU
+# define P_SIGN_POSN           __P_SIGN_POSN
+#endif
+  __N_SIGN_POSN,
+#ifdef __USE_GNU
+# define N_SIGN_POSN           __N_SIGN_POSN
+#endif
+  _NL_MONETARY_CRNCYSTR,
+#define CRNCYSTR               _NL_MONETARY_CRNCYSTR
+  __INT_P_CS_PRECEDES,
+#ifdef __USE_GNU
+# define INT_P_CS_PRECEDES     __INT_P_CS_PRECEDES
+#endif
+  __INT_P_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define INT_P_SEP_BY_SPACE    __INT_P_SEP_BY_SPACE
+#endif
+  __INT_N_CS_PRECEDES,
+#ifdef __USE_GNU
+# define INT_N_CS_PRECEDES     __INT_N_CS_PRECEDES
+#endif
+  __INT_N_SEP_BY_SPACE,
+#ifdef __USE_GNU
+# define INT_N_SEP_BY_SPACE    __INT_N_SEP_BY_SPACE
+#endif
+  __INT_P_SIGN_POSN,
+#ifdef __USE_GNU
+# define INT_P_SIGN_POSN       __INT_P_SIGN_POSN
+#endif
+  __INT_N_SIGN_POSN,
+#ifdef __USE_GNU
+# define INT_N_SIGN_POSN       __INT_N_SIGN_POSN
+#endif
+  _NL_MONETARY_DUO_INT_CURR_SYMBOL,
+  _NL_MONETARY_DUO_CURRENCY_SYMBOL,
+  _NL_MONETARY_DUO_INT_FRAC_DIGITS,
+  _NL_MONETARY_DUO_FRAC_DIGITS,
+  _NL_MONETARY_DUO_P_CS_PRECEDES,
+  _NL_MONETARY_DUO_P_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_N_CS_PRECEDES,
+  _NL_MONETARY_DUO_N_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_INT_P_CS_PRECEDES,
+  _NL_MONETARY_DUO_INT_P_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_INT_N_CS_PRECEDES,
+  _NL_MONETARY_DUO_INT_N_SEP_BY_SPACE,
+  _NL_MONETARY_DUO_P_SIGN_POSN,
+  _NL_MONETARY_DUO_N_SIGN_POSN,
+  _NL_MONETARY_DUO_INT_P_SIGN_POSN,
+  _NL_MONETARY_DUO_INT_N_SIGN_POSN,
+  _NL_MONETARY_UNO_VALID_FROM,
+  _NL_MONETARY_UNO_VALID_TO,
+  _NL_MONETARY_DUO_VALID_FROM,
+  _NL_MONETARY_DUO_VALID_TO,
+  _NL_MONETARY_CONVERSION_RATE,
+  _NL_MONETARY_DECIMAL_POINT_WC,
+  _NL_MONETARY_THOUSANDS_SEP_WC,
+  _NL_MONETARY_CODESET,
+  _NL_NUM_LC_MONETARY,
+
+  /* LC_NUMERIC category: formatting of numbers.
+     These also correspond to members of `struct lconv'; see <locale.h>.  */
+  __DECIMAL_POINT = _NL_ITEM (__LC_NUMERIC, 0),
+#ifdef __USE_GNU
+# define DECIMAL_POINT         __DECIMAL_POINT
+#endif
+  RADIXCHAR = __DECIMAL_POINT,
+#define RADIXCHAR              RADIXCHAR
+  __THOUSANDS_SEP,
+#ifdef __USE_GNU
+# define THOUSANDS_SEP         __THOUSANDS_SEP
+#endif
+  THOUSEP = __THOUSANDS_SEP,
+#define THOUSEP                        THOUSEP
+  __GROUPING,
+#ifdef __USE_GNU
+# define GROUPING              __GROUPING
+#endif
+  _NL_NUMERIC_DECIMAL_POINT_WC,
+  _NL_NUMERIC_THOUSANDS_SEP_WC,
+  _NL_NUMERIC_CODESET,
+  _NL_NUM_LC_NUMERIC,
+
+  __YESEXPR = _NL_ITEM (__LC_MESSAGES, 0), /* Regex matching ``yes'' input.  */
+#define YESEXPR                        __YESEXPR
+  __NOEXPR,                    /* Regex matching ``no'' input.  */
+#define NOEXPR                 __NOEXPR
+  __YESSTR,                    /* Output string for ``yes''.  */
+#if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# define YESSTR                        __YESSTR
+#endif
+  __NOSTR,                     /* Output string for ``no''.  */
+#if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+# define NOSTR                 __NOSTR
+#endif
+  _NL_MESSAGES_CODESET,
+  _NL_NUM_LC_MESSAGES,
+
+  _NL_PAPER_HEIGHT = _NL_ITEM (__LC_PAPER, 0),
+  _NL_PAPER_WIDTH,
+  _NL_PAPER_CODESET,
+  _NL_NUM_LC_PAPER,
+
+  _NL_NAME_NAME_FMT = _NL_ITEM (__LC_NAME, 0),
+  _NL_NAME_NAME_GEN,
+  _NL_NAME_NAME_MR,
+  _NL_NAME_NAME_MRS,
+  _NL_NAME_NAME_MISS,
+  _NL_NAME_NAME_MS,
+  _NL_NAME_CODESET,
+  _NL_NUM_LC_NAME,
+
+  _NL_ADDRESS_POSTAL_FMT = _NL_ITEM (__LC_ADDRESS, 0),
+  _NL_ADDRESS_COUNTRY_NAME,
+  _NL_ADDRESS_COUNTRY_POST,
+  _NL_ADDRESS_COUNTRY_AB2,
+  _NL_ADDRESS_COUNTRY_AB3,
+  _NL_ADDRESS_COUNTRY_CAR,
+  _NL_ADDRESS_COUNTRY_NUM,
+  _NL_ADDRESS_COUNTRY_ISBN,
+  _NL_ADDRESS_LANG_NAME,
+  _NL_ADDRESS_LANG_AB,
+  _NL_ADDRESS_LANG_TERM,
+  _NL_ADDRESS_LANG_LIB,
+  _NL_ADDRESS_CODESET,
+  _NL_NUM_LC_ADDRESS,
+
+  _NL_TELEPHONE_TEL_INT_FMT = _NL_ITEM (__LC_TELEPHONE, 0),
+  _NL_TELEPHONE_TEL_DOM_FMT,
+  _NL_TELEPHONE_INT_SELECT,
+  _NL_TELEPHONE_INT_PREFIX,
+  _NL_TELEPHONE_CODESET,
+  _NL_NUM_LC_TELEPHONE,
+
+  _NL_MEASUREMENT_MEASUREMENT = _NL_ITEM (__LC_MEASUREMENT, 0),
+  _NL_MEASUREMENT_CODESET,
+  _NL_NUM_LC_MEASUREMENT,
+
+  _NL_IDENTIFICATION_TITLE = _NL_ITEM (__LC_IDENTIFICATION, 0),
+  _NL_IDENTIFICATION_SOURCE,
+  _NL_IDENTIFICATION_ADDRESS,
+  _NL_IDENTIFICATION_CONTACT,
+  _NL_IDENTIFICATION_EMAIL,
+  _NL_IDENTIFICATION_TEL,
+  _NL_IDENTIFICATION_FAX,
+  _NL_IDENTIFICATION_LANGUAGE,
+  _NL_IDENTIFICATION_TERRITORY,
+  _NL_IDENTIFICATION_AUDIENCE,
+  _NL_IDENTIFICATION_APPLICATION,
+  _NL_IDENTIFICATION_ABBREVIATION,
+  _NL_IDENTIFICATION_REVISION,
+  _NL_IDENTIFICATION_DATE,
+  _NL_IDENTIFICATION_CATEGORY,
+  _NL_IDENTIFICATION_CODESET,
+  _NL_NUM_LC_IDENTIFICATION,
+
+  /* This marks the highest value used.  */
+  _NL_NUM
+};
+
+/* This macro produces an item you can pass to `nl_langinfo' or
+   `nl_langinfo_l' to get the name of the locale in use for CATEGORY.  */
+#define _NL_LOCALE_NAME(category)      _NL_ITEM ((category),                 \
+                                                 _NL_ITEM_INDEX (-1))
+#ifdef __USE_GNU
+# define NL_LOCALE_NAME(category)      _NL_LOCALE_NAME (category)
+#endif
+
+
+/* Return the current locale's value for ITEM.
+   If ITEM is invalid, an empty string is returned.
+
+   The string returned will not change until `setlocale' is called;
+   it is usually in read-only memory and cannot be modified.  */
+
+extern char *nl_langinfo (nl_item __item) __THROW;
+
+
+#ifdef __USE_XOPEN2K
+/* This interface is for the extended locale model.  See <locale.h> for
+   more information.  */
+
+/* Get locale datatype definition.  */
+# include <xlocale.h>
+
+/* Just like nl_langinfo but get the information from the locale object L.  */
+extern char *nl_langinfo_l (nl_item __item, __locale_t __l);
+#endif
+
+__END_DECLS
+
+#endif /* langinfo.h */
diff --git a/lib/libdss-include/lastlog.h b/lib/libdss-include/lastlog.h
new file mode 100644 (file)
index 0000000..8cc4254
--- /dev/null
@@ -0,0 +1,4 @@
+/* This header file is used in 4.3BSD to define `struct lastlog',
+   which we define in <bits/utmp.h>.  */
+
+#include <utmp.h>
diff --git a/lib/libdss-include/libgen.h b/lib/libdss-include/libgen.h
new file mode 100644 (file)
index 0000000..38f4d19
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBGEN_H
+#define _LIBGEN_H      1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return directory part of PATH or "." if none is available.  */
+extern char *dirname (char *__path) __THROW;
+
+/* Return final component of PATH.
+
+   This is the weird XPG version of this function.  It sometimes will
+   modify its argument.  Therefore we normally use the GNU version (in
+   <string.h>) and only if this header is included make the XPG
+   version available under the real name.  */
+extern char *__xpg_basename (char *__path) __THROW;
+#define basename       __xpg_basename
+
+__END_DECLS
+
+#endif /* libgen.h */
diff --git a/lib/libdss-include/libintl.h b/lib/libdss-include/libintl.h
new file mode 100644 (file)
index 0000000..bdb6b38
--- /dev/null
@@ -0,0 +1,123 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   This file is derived from the file libgettext.h in the GNU gettext package.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H     1
+
+#include <features.h>
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats.  Returns the
+   maximum minor revision number supported for a given major revision.  */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+  ((major) == 0 ? 1 : -1)
+
+__BEGIN_DECLS
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext (const char *__msgid)
+     __THROW __attribute_format_arg__ (1);
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext (const char *__domainname, const char *__msgid)
+     __THROW __attribute_format_arg__ (2);
+extern char *__dgettext (const char *__domainname, const char *__msgid)
+     __THROW __attribute_format_arg__ (2);
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext (const char *__domainname,
+                       const char *__msgid, int __category)
+     __THROW __attribute_format_arg__ (2);
+extern char *__dcgettext (const char *__domainname,
+                         const char *__msgid, int __category)
+     __THROW __attribute_format_arg__ (2);
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+                      unsigned long int __n)
+     __THROW __attribute_format_arg__ (1) __attribute_format_arg__ (2);
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dngettext (const char *__domainname, const char *__msgid1,
+                       const char *__msgid2, unsigned long int __n)
+     __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dcngettext (const char *__domainname, const char *__msgid1,
+                        const char *__msgid2, unsigned long int __n,
+                        int __category)
+     __THROW __attribute_format_arg__ (2) __attribute_format_arg__ (3);
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain (const char *__domainname) __THROW;
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain (const char *__domainname,
+                            const char *__dirname) __THROW;
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+extern char *bind_textdomain_codeset (const char *__domainname,
+                                     const char *__codeset) __THROW;
+
+
+/* Optimized version of the function above.  */
+#if defined __OPTIMIZE__ && !defined __cplusplus
+
+/* We need NULL for `gettext'.  */
+# define __need_NULL
+# include <stddef.h>
+
+/* We need LC_MESSAGES for `dgettext'.  */
+# include <locale.h>
+
+/* These must be macros.  Inlined functions are useless because the
+   `__builtin_constant_p' predicate in dcgettext would always return
+   false.  */
+
+# define gettext(msgid) dgettext (NULL, msgid)
+
+# define dgettext(domainname, msgid) \
+  dcgettext (domainname, msgid, LC_MESSAGES)
+
+# define ngettext(msgid1, msgid2, n) dngettext (NULL, msgid1, msgid2, n)
+
+# define dngettext(domainname, msgid1, msgid2, n) \
+  dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
+
+#endif /* Optimizing.  */
+
+__END_DECLS
+
+#endif /* libintl.h */
diff --git a/lib/libdss-include/libio.h b/lib/libdss-include/libio.h
new file mode 100644 (file)
index 0000000..efd09f1
--- /dev/null
@@ -0,0 +1,524 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Per Bothner <bothner@cygnus.com>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.
+
+   As a special exception, if you link the code in this file with
+   files compiled with a GNU compiler to produce an executable,
+   that does not cause the resulting executable to be covered by
+   the GNU Lesser General Public License.  This exception does not
+   however invalidate any other reasons why the executable file
+   might be covered by the GNU Lesser General Public License.
+   This exception applies to code released by its copyright holders
+   in files containing the exception.  */
+
+#ifndef _IO_STDIO_H
+#define _IO_STDIO_H
+
+#include <_G_config.h>
+/* ALL of these should be defined in _G_config.h */
+#define _IO_fpos_t _G_fpos_t
+#define _IO_fpos64_t _G_fpos64_t
+#define _IO_size_t size_t
+#define _IO_ssize_t __ssize_t
+#define _IO_off_t __off_t
+#define _IO_off64_t __off64_t
+#define _IO_pid_t __pid_t
+#define _IO_uid_t __uid_t
+#define _IO_iconv_t _G_iconv_t
+#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
+#define _IO_BUFSIZ _G_BUFSIZ
+#define _IO_va_list _G_va_list
+#define _IO_wint_t wint_t
+
+/* This define avoids name pollution if we're using GNU stdarg.h */
+#define __need___va_list
+#include <stdarg.h>
+#ifdef __GNUC_VA_LIST
+# undef _IO_va_list
+# define _IO_va_list __gnuc_va_list
+#endif /* __GNUC_VA_LIST */
+
+#ifndef __P
+# include <sys/cdefs.h>
+#endif /*!__P*/
+
+#define _IO_UNIFIED_JUMPTABLES 1
+
+#ifndef EOF
+# define EOF (-1)
+#endif
+#ifndef NULL
+# if defined __GNUG__ && \
+    (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
+#  define NULL (__null)
+# else
+#  if !defined(__cplusplus)
+#   define NULL ((void*)0)
+#  else
+#   define NULL (0)
+#  endif
+# endif
+#endif
+
+#define _IOS_INPUT     1
+#define _IOS_OUTPUT    2
+#define _IOS_ATEND     4
+#define _IOS_APPEND    8
+#define _IOS_TRUNC     16
+#define _IOS_NOCREATE  32
+#define _IOS_NOREPLACE 64
+#define _IOS_BIN       128
+
+/* Magic numbers and bits for the _flags field.
+   The magic numbers use the high-order bits of _flags;
+   the remaining bits are available for variable flags.
+   Note: The magic numbers must all be negative if stdio
+   emulation is desired. */
+
+#define _IO_MAGIC 0xFBAD0000 /* Magic number */
+#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
+#define _IO_MAGIC_MASK 0xFFFF0000
+#define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
+#define _IO_UNBUFFERED 2
+#define _IO_NO_READS 4 /* Reading not allowed */
+#define _IO_NO_WRITES 8 /* Writing not allowd */
+#define _IO_EOF_SEEN 0x10
+#define _IO_ERR_SEEN 0x20
+#define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
+#define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
+#define _IO_IN_BACKUP 0x100
+#define _IO_LINE_BUF 0x200
+#define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
+#define _IO_CURRENTLY_PUTTING 0x800
+#define _IO_IS_APPENDING 0x1000
+#define _IO_IS_FILEBUF 0x2000
+#define _IO_BAD_SEEN 0x4000
+#define _IO_USER_LOCK 0x8000
+
+#define _IO_FLAGS2_MMAP 1
+#define _IO_FLAGS2_NOTCANCEL 2
+#ifdef _LIBC
+# define _IO_FLAGS2_FORTIFY 4
+#endif
+#define _IO_FLAGS2_USER_WBUF 8
+#ifdef _LIBC
+# define _IO_FLAGS2_SCANF_STD 16
+# define _IO_FLAGS2_NOCLOSE 32
+# define _IO_FLAGS2_CLOEXEC 64
+#endif
+
+/* These are "formatting flags" matching the iostream fmtflags enum values. */
+#define _IO_SKIPWS 01
+#define _IO_LEFT 02
+#define _IO_RIGHT 04
+#define _IO_INTERNAL 010
+#define _IO_DEC 020
+#define _IO_OCT 040
+#define _IO_HEX 0100
+#define _IO_SHOWBASE 0200
+#define _IO_SHOWPOINT 0400
+#define _IO_UPPERCASE 01000
+#define _IO_SHOWPOS 02000
+#define _IO_SCIENTIFIC 04000
+#define _IO_FIXED 010000
+#define _IO_UNITBUF 020000
+#define _IO_STDIO 040000
+#define _IO_DONT_CLOSE 0100000
+#define _IO_BOOLALPHA 0200000
+
+
+struct _IO_jump_t;  struct _IO_FILE;
+
+/* Handle lock.  */
+#ifdef _IO_MTSAFE_IO
+/* _IO_lock_t defined in internal headers during the glibc build.  */
+#else
+typedef void _IO_lock_t;
+#endif
+
+
+/* A streammarker remembers a position in a buffer. */
+
+struct _IO_marker {
+  struct _IO_marker *_next;
+  struct _IO_FILE *_sbuf;
+  /* If _pos >= 0
+ it points to _buf->Gbase()+_pos. FIXME comment */
+  /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
+  int _pos;
+#if 0
+    void set_streampos(streampos sp) { _spos = sp; }
+    void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
+  public:
+    streammarker(streambuf *sb);
+    ~streammarker();
+    int saving() { return  _spos == -2; }
+    int delta(streammarker&);
+    int delta();
+#endif
+};
+
+/* This is the structure from the libstdc++ codecvt class.  */
+enum __codecvt_result
+{
+  __codecvt_ok,
+  __codecvt_partial,
+  __codecvt_error,
+  __codecvt_noconv
+};
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+/* The order of the elements in the following struct must match the order
+   of the virtual functions in the libstdc++ codecvt class.  */
+struct _IO_codecvt
+{
+  void (*__codecvt_destr) (struct _IO_codecvt *);
+  enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
+                                            __mbstate_t *,
+                                            const wchar_t *,
+                                            const wchar_t *,
+                                            const wchar_t **, char *,
+                                            char *, char **);
+  enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
+                                                __mbstate_t *, char *,
+                                                char *, char **);
+  enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
+                                           __mbstate_t *,
+                                           const char *, const char *,
+                                           const char **, wchar_t *,
+                                           wchar_t *, wchar_t **);
+  int (*__codecvt_do_encoding) (struct _IO_codecvt *);
+  int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
+  int (*__codecvt_do_length) (struct _IO_codecvt *, __mbstate_t *,
+                             const char *, const char *, _IO_size_t);
+  int (*__codecvt_do_max_length) (struct _IO_codecvt *);
+
+  _IO_iconv_t __cd_in;
+  _IO_iconv_t __cd_out;
+};
+
+/* Extra data for wide character streams.  */
+struct _IO_wide_data
+{
+  wchar_t *_IO_read_ptr;       /* Current read pointer */
+  wchar_t *_IO_read_end;       /* End of get area. */
+  wchar_t *_IO_read_base;      /* Start of putback+get area. */
+  wchar_t *_IO_write_base;     /* Start of put area. */
+  wchar_t *_IO_write_ptr;      /* Current put pointer. */
+  wchar_t *_IO_write_end;      /* End of put area. */
+  wchar_t *_IO_buf_base;       /* Start of reserve area. */
+  wchar_t *_IO_buf_end;                /* End of reserve area. */
+  /* The following fields are used to support backing up and undo. */
+  wchar_t *_IO_save_base;      /* Pointer to start of non-current get area. */
+  wchar_t *_IO_backup_base;    /* Pointer to first valid character of
+                                  backup area */
+  wchar_t *_IO_save_end;       /* Pointer to end of non-current get area. */
+
+  __mbstate_t _IO_state;
+  __mbstate_t _IO_last_state;
+  struct _IO_codecvt _codecvt;
+
+  wchar_t _shortbuf[1];
+
+  const struct _IO_jump_t *_wide_vtable;
+};
+#endif
+
+struct _IO_FILE {
+  int _flags;          /* High-order word is _IO_MAGIC; rest is flags. */
+#define _IO_file_flags _flags
+
+  /* The following pointers correspond to the C++ streambuf protocol. */
+  /* Note:  Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
+  char* _IO_read_ptr;  /* Current read pointer */
+  char* _IO_read_end;  /* End of get area. */
+  char* _IO_read_base; /* Start of putback+get area. */
+  char* _IO_write_base;        /* Start of put area. */
+  char* _IO_write_ptr; /* Current put pointer. */
+  char* _IO_write_end; /* End of put area. */
+  char* _IO_buf_base;  /* Start of reserve area. */
+  char* _IO_buf_end;   /* End of reserve area. */
+  /* The following fields are used to support backing up and undo. */
+  char *_IO_save_base; /* Pointer to start of non-current get area. */
+  char *_IO_backup_base;  /* Pointer to first valid character of backup area */
+  char *_IO_save_end; /* Pointer to end of non-current get area. */
+
+  struct _IO_marker *_markers;
+
+  struct _IO_FILE *_chain;
+
+  int _fileno;
+#if 0
+  int _blksize;
+#else
+  int _flags2;
+#endif
+  _IO_off_t _old_offset; /* This used to be _offset but it's too small.  */
+
+#define __HAVE_COLUMN /* temporary */
+  /* 1+column number of pbase(); 0 is unknown. */
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+
+  /*  char* _save_gptr;  char* _save_egptr; */
+
+  _IO_lock_t *_lock;
+#ifdef _IO_USE_OLD_IO_FILE
+};
+
+struct _IO_FILE_complete
+{
+  struct _IO_FILE _file;
+#endif
+#if defined _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001
+  _IO_off64_t _offset;
+# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+  /* Wide character stream stuff.  */
+  struct _IO_codecvt *_codecvt;
+  struct _IO_wide_data *_wide_data;
+  struct _IO_FILE *_freeres_list;
+  void *_freeres_buf;
+# else
+  void *__pad1;
+  void *__pad2;
+  void *__pad3;
+  void *__pad4;
+# endif
+  size_t __pad5;
+  int _mode;
+  /* Make sure we don't get into trouble again.  */
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+#endif
+};
+
+#ifndef __cplusplus
+typedef struct _IO_FILE _IO_FILE;
+#endif
+
+struct _IO_FILE_plus;
+
+extern struct _IO_FILE_plus _IO_2_1_stdin_;
+extern struct _IO_FILE_plus _IO_2_1_stdout_;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+#ifndef _LIBC
+#define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
+#define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
+#define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
+#else
+extern _IO_FILE *_IO_stdin attribute_hidden;
+extern _IO_FILE *_IO_stdout attribute_hidden;
+extern _IO_FILE *_IO_stderr attribute_hidden;
+#endif
+
+
+/* Functions to do I/O and file management for a stream.  */
+
+/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
+   Return number of bytes read.  */
+typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+
+/* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
+   unless there is an error.  Return number of bytes written.  If
+   there is an error, return 0 and do not write anything.  If the file
+   has been opened for append (__mode.__append set), then set the file
+   pointer to the end of the file and then do the write; if not, just
+   write at the current file pointer.  */
+typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
+                                size_t __n);
+
+/* Move COOKIE's file position to *POS bytes from the
+   beginning of the file (if W is SEEK_SET),
+   the current position (if W is SEEK_CUR),
+   or the end of the file (if W is SEEK_END).
+   Set *POS to the new file position.
+   Returns zero if successful, nonzero if not.  */
+typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
+
+/* Close COOKIE.  */
+typedef int __io_close_fn (void *__cookie);
+
+
+#ifdef _GNU_SOURCE
+/* User-visible names for the above.  */
+typedef __io_read_fn cookie_read_function_t;
+typedef __io_write_fn cookie_write_function_t;
+typedef __io_seek_fn cookie_seek_function_t;
+typedef __io_close_fn cookie_close_function_t;
+
+/* The structure with the cookie function pointers.  */
+typedef struct
+{
+  __io_read_fn *read;          /* Read bytes.  */
+  __io_write_fn *write;                /* Write bytes.  */
+  __io_seek_fn *seek;          /* Seek/tell file position.  */
+  __io_close_fn *close;                /* Close file.  */
+} _IO_cookie_io_functions_t;
+typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+
+struct _IO_cookie_file;
+
+/* Initialize one of those.  */
+extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
+                            void *__cookie, _IO_cookie_io_functions_t __fns);
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+extern _IO_wint_t __wunderflow (_IO_FILE *);
+extern _IO_wint_t __wuflow (_IO_FILE *);
+extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
+#endif
+
+#if  __GNUC__ >= 3
+# define _IO_BE(expr, res) __builtin_expect ((expr), res)
+#else
+# define _IO_BE(expr, res) (expr)
+#endif
+
+#define _IO_getc_unlocked(_fp) \
+       (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
+       ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
+#define _IO_peekc_unlocked(_fp) \
+       (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
+         && __underflow (_fp) == EOF ? EOF \
+       : *(unsigned char *) (_fp)->_IO_read_ptr)
+#define _IO_putc_unlocked(_ch, _fp) \
+   (_IO_BE ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end, 0) \
+    ? __overflow (_fp, (unsigned char) (_ch)) \
+    : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define _IO_getwc_unlocked(_fp) \
+  (_IO_BE ((_fp)->_wide_data == NULL                                   \
+          || ((_fp)->_wide_data->_IO_read_ptr                          \
+              >= (_fp)->_wide_data->_IO_read_end), 0)                  \
+   ? __wuflow (_fp) : (_IO_wint_t) *(_fp)->_wide_data->_IO_read_ptr++)
+# define _IO_putwc_unlocked(_wch, _fp) \
+  (_IO_BE ((_fp)->_wide_data == NULL                                   \
+          || ((_fp)->_wide_data->_IO_write_ptr                         \
+              >= (_fp)->_wide_data->_IO_write_end), 0)                 \
+   ? __woverflow (_fp, _wch)                                           \
+   : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
+#endif
+
+#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
+#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
+
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_feof (_IO_FILE *__fp) __THROW;
+extern int _IO_ferror (_IO_FILE *__fp) __THROW;
+
+extern int _IO_peekc_locked (_IO_FILE *__fp);
+
+/* This one is for Emacs. */
+#define _IO_PENDING_OUTPUT_COUNT(_fp)  \
+       ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
+
+extern void _IO_flockfile (_IO_FILE *) __THROW;
+extern void _IO_funlockfile (_IO_FILE *) __THROW;
+extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
+
+#ifdef _IO_MTSAFE_IO
+# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
+# define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
+# define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
+#else
+# define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
+# define _IO_flockfile(_fp) /**/
+# define _IO_funlockfile(_fp) /**/
+# define _IO_ftrylockfile(_fp) /**/
+# define _IO_cleanup_region_start(_fct, _fp) /**/
+# define _IO_cleanup_region_end(_Doit) /**/
+#endif /* !_IO_MTSAFE_IO */
+
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+                       _IO_va_list, int *__restrict);
+extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+                        _IO_va_list);
+extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
+extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
+
+extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
+
+extern void _IO_free_backup_area (_IO_FILE *) __THROW;
+
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
+extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
+extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
+# if __GNUC__ >= 2
+/* While compiling glibc we have to handle compatibility with very old
+   versions.  */
+#  if defined _LIBC && defined SHARED
+#   include <shlib-compat.h>
+#   if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+#    define _IO_fwide_maybe_incompatible \
+  (__builtin_expect (&_IO_stdin_used == NULL, 0))
+extern const int _IO_stdin_used;
+weak_extern (_IO_stdin_used);
+#   endif
+#  endif
+#  ifndef _IO_fwide_maybe_incompatible
+#   define _IO_fwide_maybe_incompatible (0)
+#  endif
+/* A special optimized version of the function above.  It optimizes the
+   case of initializing an unoriented byte stream.  */
+#  define _IO_fwide(__fp, __mode) \
+  ({ int __result = (__mode);                                                \
+     if (__result < 0 && ! _IO_fwide_maybe_incompatible)                     \
+       {                                                                     \
+        if ((__fp)->_mode == 0)                                              \
+          /* We know that all we have to do is to set the flag.  */          \
+          (__fp)->_mode = -1;                                                \
+        __result = (__fp)->_mode;                                            \
+       }                                                                     \
+     else if (__builtin_constant_p (__mode) && (__mode) == 0)                \
+       __result = _IO_fwide_maybe_incompatible ? -1 : (__fp)->_mode;         \
+     else                                                                    \
+       __result = _IO_fwide (__fp, __result);                                \
+     __result; })
+# endif
+
+extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
+                        _IO_va_list, int *__restrict);
+extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
+                         _IO_va_list);
+extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
+extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/libio-ldbl.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IO_STDIO_H */
diff --git a/lib/libdss-include/limits.h b/lib/libdss-include/limits.h
new file mode 100644 (file)
index 0000000..5add8fc
--- /dev/null
@@ -0,0 +1,152 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types <limits.h>
+ */
+
+#ifndef _LIBC_LIMITS_H_
+#define _LIBC_LIMITS_H_        1
+
+#include <features.h>
+
+
+/* Maximum length of any multibyte character in any locale.
+   We define this value here since the gcc header does not define
+   the correct value.  */
+#define MB_LEN_MAX     16
+
+
+/* If we are not using GNU CC we have to define all the symbols ourself.
+   Otherwise use gcc's definitions (see below).  */
+#if !defined __GNUC__ || __GNUC__ < 2
+
+/* We only protect from multiple inclusion here, because all the other
+   #include's protect themselves, and in GCC 2 we may #include_next through
+   multiple copies of this file before we get to GCC's.  */
+# ifndef _LIMITS_H
+#  define _LIMITS_H    1
+
+#include <bits/wordsize.h>
+
+/* We don't have #include_next.
+   Define ANSI <limits.h> for standard 32-bit words.  */
+
+/* These assume 8-bit `char's, 16-bit `short int's,
+   and 32-bit `int's and `long int's.  */
+
+/* Number of bits in a `char'. */
+#  define CHAR_BIT     8
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#  define SCHAR_MIN    (-128)
+#  define SCHAR_MAX    127
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */
+#  define UCHAR_MAX    255
+
+/* Minimum and maximum values a `char' can hold.  */
+#  ifdef __CHAR_UNSIGNED__
+#   define CHAR_MIN    0
+#   define CHAR_MAX    UCHAR_MAX
+#  else
+#   define CHAR_MIN    SCHAR_MIN
+#   define CHAR_MAX    SCHAR_MAX
+#  endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#  define SHRT_MIN     (-32768)
+#  define SHRT_MAX     32767
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
+#  define USHRT_MAX    65535
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#  define INT_MIN      (-INT_MAX - 1)
+#  define INT_MAX      2147483647
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
+#  define UINT_MAX     4294967295U
+
+/* Minimum and maximum values a `signed long int' can hold.  */
+#  if __WORDSIZE == 64
+#   define LONG_MAX    9223372036854775807L
+#  else
+#   define LONG_MAX    2147483647L
+#  endif
+#  define LONG_MIN     (-LONG_MAX - 1L)
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
+#  if __WORDSIZE == 64
+#   define ULONG_MAX   18446744073709551615UL
+#  else
+#   define ULONG_MAX   4294967295UL
+#  endif
+
+#  ifdef __USE_ISOC99
+
+/* Minimum and maximum values a `signed long long int' can hold.  */
+#   define LLONG_MAX   9223372036854775807LL
+#   define LLONG_MIN   (-LLONG_MAX - 1LL)
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0.)  */
+#   define ULLONG_MAX  18446744073709551615ULL
+
+#  endif /* ISO C99 */
+
+# endif        /* limits.h  */
+#endif /* GCC 2.  */
+
+#endif /* !_LIBC_LIMITS_H_ */
+
+ /* Get the compiler's limits.h, which defines almost all the ISO constants.
+
+    We put this #include_next outside the double inclusion check because
+    it should be possible to include this file more than once and still get
+    the definitions from gcc's header.  */
+#if defined __GNUC__ && !defined _GCC_LIMITS_H_
+/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
+# include_next <limits.h>
+#endif
+
+/* The <limits.h> files in some gcc versions don't define LLONG_MIN,
+   LLONG_MAX, and ULLONG_MAX.  Instead only the values gcc defined for
+   ages are available.  */
+#if defined __USE_ISOC99 && defined __GNUC__
+# ifndef LLONG_MIN
+#  define LLONG_MIN    (-LLONG_MAX-1)
+# endif
+# ifndef LLONG_MAX
+#  define LLONG_MAX    __LONG_LONG_MAX__
+# endif
+# ifndef ULLONG_MAX
+#  define ULLONG_MAX   (LLONG_MAX * 2ULL + 1)
+# endif
+#endif
+
+#ifdef __USE_POSIX
+/* POSIX adds things to <limits.h>.  */
+# include <bits/posix1_lim.h>
+#endif
+
+#ifdef __USE_POSIX2
+# include <bits/posix2_lim.h>
+#endif
+
+#ifdef __USE_XOPEN
+# include <bits/xopen_lim.h>
+#endif
diff --git a/lib/libdss-include/link.h b/lib/libdss-include/link.h
new file mode 100644 (file)
index 0000000..f448141
--- /dev/null
@@ -0,0 +1,194 @@
+/* Data structure for communication from the run-time dynamic linker for
+   loaded ELF shared objects.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _LINK_H
+#define        _LINK_H 1
+
+#include <features.h>
+#include <elf.h>
+#include <dlfcn.h>
+#include <sys/types.h>
+
+/* We use this macro to refer to ELF types independent of the native wordsize.
+   `ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'.  */
+#define ElfW(type)     _ElfW (Elf, __ELF_NATIVE_CLASS, type)
+#define _ElfW(e,w,t)   _ElfW_1 (e, w, _##t)
+#define _ElfW_1(e,w,t) e##w##t
+
+#include <bits/elfclass.h>             /* Defines __ELF_NATIVE_CLASS.  */
+#include <bits/link.h>
+
+/* Rendezvous structure used by the run-time dynamic linker to communicate
+   details of shared object loading to the debugger.  If the executable's
+   dynamic section has a DT_DEBUG element, the run-time linker sets that
+   element's value to the address where this structure can be found.  */
+
+struct r_debug
+  {
+    int r_version;             /* Version number for this protocol.  */
+
+    struct link_map *r_map;    /* Head of the chain of loaded objects.  */
+
+    /* This is the address of a function internal to the run-time linker,
+       that will always be called when the linker begins to map in a
+       library or unmap it, and again when the mapping change is complete.
+       The debugger can set a breakpoint at this address if it wants to
+       notice shared object mapping changes.  */
+    ElfW(Addr) r_brk;
+    enum
+      {
+       /* This state value describes the mapping change taking place when
+          the `r_brk' address is called.  */
+       RT_CONSISTENT,          /* Mapping change is complete.  */
+       RT_ADD,                 /* Beginning to add a new object.  */
+       RT_DELETE               /* Beginning to remove an object mapping.  */
+      } r_state;
+
+    ElfW(Addr) r_ldbase;       /* Base address the linker is loaded at.  */
+  };
+
+/* This is the instance of that structure used by the dynamic linker.  */
+extern struct r_debug _r_debug;
+
+/* This symbol refers to the "dynamic structure" in the `.dynamic' section
+   of whatever module refers to `_DYNAMIC'.  So, to find its own
+   `struct r_debug', a program could do:
+     for (dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn)
+       if (dyn->d_tag == DT_DEBUG)
+        r_debug = (struct r_debug *) dyn->d_un.d_ptr;
+   */
+extern ElfW(Dyn) _DYNAMIC[];
+
+/* Structure describing a loaded shared object.  The `l_next' and `l_prev'
+   members form a chain of all the shared objects loaded at startup.
+
+   These data structures exist in space used by the run-time dynamic linker;
+   modifying them may have disastrous results.  */
+
+struct link_map
+  {
+    /* These first few members are part of the protocol with the debugger.
+       This is the same format used in SVR4.  */
+
+    ElfW(Addr) l_addr;         /* Difference between the address in the ELF
+                                  file and the addresses in memory.  */
+    char *l_name;              /* Absolute file name object was found in.  */
+    ElfW(Dyn) *l_ld;           /* Dynamic section of the shared object.  */
+    struct link_map *l_next, *l_prev; /* Chain of loaded objects.  */
+  };
+
+#ifdef __USE_GNU
+
+/* Version numbers for la_version handshake interface.  */
+#define LAV_CURRENT    1
+
+/* Activity types signaled through la_activity.  */
+enum
+  {
+    LA_ACT_CONSISTENT,         /* Link map consistent again.  */
+    LA_ACT_ADD,                        /* New object will be added.  */
+    LA_ACT_DELETE              /* Objects will be removed.  */
+  };
+
+/* Values representing origin of name for dynamic loading.  */
+enum
+  {
+    LA_SER_ORIG = 0x01,                /* Original name.  */
+    LA_SER_LIBPATH = 0x02,     /* Directory from LD_LIBRARY_PATH.  */
+    LA_SER_RUNPATH = 0x04,     /* Directory from RPATH/RUNPATH.  */
+    LA_SER_CONFIG = 0x08,      /* Found through ldconfig.  */
+    LA_SER_DEFAULT = 0x40,     /* Default directory.  */
+    LA_SER_SECURE = 0x80       /* Unused.  */
+  };
+
+/* Values for la_objopen return value.  */
+enum
+  {
+    LA_FLG_BINDTO = 0x01,      /* Audit symbols bound to this object.  */
+    LA_FLG_BINDFROM = 0x02     /* Audit symbols bound from this object.  */
+  };
+
+/* Values for la_symbind flags parameter.  */
+enum
+  {
+    LA_SYMB_NOPLTENTER = 0x01, /* la_pltenter will not be called.  */
+    LA_SYMB_NOPLTEXIT = 0x02,  /* la_pltexit will not be called.  */
+    LA_SYMB_STRUCTCALL = 0x04, /* Return value is a structure.  */
+    LA_SYMB_DLSYM = 0x08,      /* Binding due to dlsym call.  */
+    LA_SYMB_ALTVALUE = 0x10    /* Value has been changed by a previous
+                                  la_symbind call.  */
+  };
+
+struct dl_phdr_info
+  {
+    ElfW(Addr) dlpi_addr;
+    const char *dlpi_name;
+    const ElfW(Phdr) *dlpi_phdr;
+    ElfW(Half) dlpi_phnum;
+
+    /* Note: Following members were introduced after the first
+       version of this structure was available.  Check the SIZE
+       argument passed to the dl_iterate_phdr callback to determine
+       whether or not each later member is available.  */
+
+    /* Incremented when a new object may have been added.  */
+    __extension__ unsigned long long int dlpi_adds;
+    /* Incremented when an object may have been removed.  */
+    __extension__ unsigned long long int dlpi_subs;
+
+    /* If there is a PT_TLS segment, its module ID as used in
+       TLS relocations, else zero.  */
+    size_t dlpi_tls_modid;
+
+    /* The address of the calling thread's instance of this module's
+       PT_TLS segment, if it has one and it has been allocated
+       in the calling thread, otherwise a null pointer.  */
+    void *dlpi_tls_data;
+  };
+
+__BEGIN_DECLS
+
+extern int dl_iterate_phdr (int (*__callback) (struct dl_phdr_info *,
+                                              size_t, void *),
+                           void *__data);
+
+
+/* Prototypes for the ld.so auditing interfaces.  These are not
+   defined anywhere in ld.so but instead have to be provided by the
+   auditing DSO.  */
+extern unsigned int la_version (unsigned int __version);
+extern void la_activity (uintptr_t *__cookie, unsigned int __flag);
+extern char *la_objsearch (const char *__name, uintptr_t *__cookie,
+                          unsigned int __flag);
+extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid,
+                               uintptr_t *__cookie);
+extern void la_preinit (uintptr_t *__cookie);
+extern uintptr_t la_symbind32 (Elf32_Sym *__sym, unsigned int __ndx,
+                              uintptr_t *__refcook, uintptr_t *__defcook,
+                              unsigned int *__flags, const char *__symname);
+extern uintptr_t la_symbind64 (Elf64_Sym *__sym, unsigned int __ndx,
+                              uintptr_t *__refcook, uintptr_t *__defcook,
+                              unsigned int *__flags, const char *__symname);
+extern unsigned int la_objclose (uintptr_t *__cookie);
+
+__END_DECLS
+
+#endif
+
+#endif /* link.h */
diff --git a/lib/libdss-include/linux/acct.h b/lib/libdss-include/linux/acct.h
new file mode 100644 (file)
index 0000000..19baf8a
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ *  BSD Process Accounting for Linux - Definitions
+ *
+ *  Author: Marco van Wieringen (mvw@planets.elm.net)
+ *
+ *  This header file contains the definitions needed to implement
+ *  BSD-style process accounting. The kernel accounting code and all
+ *  user-level programs that try to do something useful with the
+ *  process accounting log must include this file.
+ *
+ *  Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V.
+ *
+ */
+
+#ifndef _LINUX_ACCT_H
+#define _LINUX_ACCT_H
+
+#include <linux/types.h>
+
+#include <asm/param.h>
+#include <asm/byteorder.h>
+
+/* 
+ *  comp_t is a 16-bit "floating" point number with a 3-bit base 8
+ *  exponent and a 13-bit fraction.
+ *  comp2_t is 24-bit with 5-bit base 2 exponent and 20 bit fraction
+ *  (leading 1 not stored).
+ *  See linux/kernel/acct.c for the specific encoding systems used.
+ */
+
+typedef __u16  comp_t;
+typedef __u32  comp2_t;
+
+/*
+ *   accounting file record
+ *
+ *   This structure contains all of the information written out to the
+ *   process accounting file whenever a process exits.
+ */
+
+#define ACCT_COMM      16
+
+struct acct
+{
+       char            ac_flag;                /* Flags */
+       char            ac_version;             /* Always set to ACCT_VERSION */
+       /* for binary compatibility back until 2.0 */
+       __u16           ac_uid16;               /* LSB of Real User ID */
+       __u16           ac_gid16;               /* LSB of Real Group ID */
+       __u16           ac_tty;                 /* Control Terminal */
+       __u32           ac_btime;               /* Process Creation Time */
+       comp_t          ac_utime;               /* User Time */
+       comp_t          ac_stime;               /* System Time */
+       comp_t          ac_etime;               /* Elapsed Time */
+       comp_t          ac_mem;                 /* Average Memory Usage */
+       comp_t          ac_io;                  /* Chars Transferred */
+       comp_t          ac_rw;                  /* Blocks Read or Written */
+       comp_t          ac_minflt;              /* Minor Pagefaults */
+       comp_t          ac_majflt;              /* Major Pagefaults */
+       comp_t          ac_swaps;               /* Number of Swaps */
+/* m68k had no padding here. */
+       __u16           ac_ahz;                 /* AHZ */
+       __u32           ac_exitcode;            /* Exitcode */
+       char            ac_comm[ACCT_COMM + 1]; /* Command Name */
+       __u8            ac_etime_hi;            /* Elapsed Time MSB */
+       __u16           ac_etime_lo;            /* Elapsed Time LSB */
+       __u32           ac_uid;                 /* Real User ID */
+       __u32           ac_gid;                 /* Real Group ID */
+};
+
+struct acct_v3
+{
+       char            ac_flag;                /* Flags */
+       char            ac_version;             /* Always set to ACCT_VERSION */
+       __u16           ac_tty;                 /* Control Terminal */
+       __u32           ac_exitcode;            /* Exitcode */
+       __u32           ac_uid;                 /* Real User ID */
+       __u32           ac_gid;                 /* Real Group ID */
+       __u32           ac_pid;                 /* Process ID */
+       __u32           ac_ppid;                /* Parent Process ID */
+       __u32           ac_btime;               /* Process Creation Time */
+       float           ac_etime;               /* Elapsed Time */
+       comp_t          ac_utime;               /* User Time */
+       comp_t          ac_stime;               /* System Time */
+       comp_t          ac_mem;                 /* Average Memory Usage */
+       comp_t          ac_io;                  /* Chars Transferred */
+       comp_t          ac_rw;                  /* Blocks Read or Written */
+       comp_t          ac_minflt;              /* Minor Pagefaults */
+       comp_t          ac_majflt;              /* Major Pagefaults */
+       comp_t          ac_swaps;               /* Number of Swaps */
+       char            ac_comm[ACCT_COMM];     /* Command Name */
+};
+
+/*
+ *  accounting flags
+ */
+                               /* bit set when the process ... */
+#define AFORK          0x01    /* ... executed fork, but did not exec */
+#define ASU            0x02    /* ... used super-user privileges */
+#define ACOMPAT                0x04    /* ... used compatibility mode (VAX only not used) */
+#define ACORE          0x08    /* ... dumped core */
+#define AXSIG          0x10    /* ... was killed by a signal */
+
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+#define ACCT_BYTEORDER 0x80    /* accounting file is big endian */
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+#define ACCT_BYTEORDER 0x00    /* accounting file is little endian */
+#else
+#error unspecified endianness
+#endif
+
+#define ACCT_VERSION   2
+#define AHZ            (HZ)
+
+
+#endif /* _LINUX_ACCT_H */
diff --git a/lib/libdss-include/linux/adb.h b/lib/libdss-include/linux/adb.h
new file mode 100644 (file)
index 0000000..0815025
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Definitions for ADB (Apple Desktop Bus) support.
+ */
+#ifndef __ADB_H
+#define __ADB_H
+
+/* ADB commands */
+#define ADB_BUSRESET           0
+#define ADB_FLUSH(id)          (0x01 | ((id) << 4))
+#define ADB_WRITEREG(id, reg)  (0x08 | (reg) | ((id) << 4))
+#define ADB_READREG(id, reg)   (0x0C | (reg) | ((id) << 4))
+
+/* ADB default device IDs (upper 4 bits of ADB command byte) */
+#define ADB_DONGLE     1       /* "software execution control" devices */
+#define ADB_KEYBOARD   2
+#define ADB_MOUSE      3
+#define ADB_TABLET     4
+#define ADB_MODEM      5
+#define ADB_MISC       7       /* maybe a monitor */
+
+#define ADB_RET_OK     0
+#define ADB_RET_TIMEOUT        3
+
+/* The kind of ADB request. The controller may emulate some
+   or all of those CUDA/PMU packet kinds */
+#define ADB_PACKET     0
+#define CUDA_PACKET    1
+#define ERROR_PACKET   2
+#define TIMER_PACKET   3
+#define POWER_PACKET   4
+#define MACIIC_PACKET  5
+#define PMU_PACKET     6
+#define ADB_QUERY      7
+
+/* ADB queries */
+
+/* ADB_QUERY_GETDEVINFO
+ * Query ADB slot for device presence
+ * data[2] = id, rep[0] = orig addr, rep[1] = handler_id
+ */
+#define ADB_QUERY_GETDEVINFO   1
+
+
+#endif /* __ADB_H */
diff --git a/lib/libdss-include/linux/adfs_fs.h b/lib/libdss-include/linux/adfs_fs.h
new file mode 100644 (file)
index 0000000..4f506dc
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _ADFS_FS_H
+#define _ADFS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * Disc Record at disc address 0xc00
+ */
+struct adfs_discrecord {
+    __u8  log2secsize;
+    __u8  secspertrack;
+    __u8  heads;
+    __u8  density;
+    __u8  idlen;
+    __u8  log2bpmb;
+    __u8  skew;
+    __u8  bootoption;
+    __u8  lowsector;
+    __u8  nzones;
+    __le16 zone_spare;
+    __le32 root;
+    __le32 disc_size;
+    __le16 disc_id;
+    __u8  disc_name[10];
+    __le32 disc_type;
+    __le32 disc_size_high;
+    __u8  log2sharesize:4;
+    __u8  unused40:4;
+    __u8  big_flag:1;
+    __u8  unused41:1;
+    __u8  nzones_high;
+    __le32 format_version;
+    __le32 root_size;
+    __u8  unused52[60 - 52];
+};
+
+#define ADFS_DISCRECORD                (0xc00)
+#define ADFS_DR_OFFSET         (0x1c0)
+#define ADFS_DR_SIZE            60
+#define ADFS_DR_SIZE_BITS      (ADFS_DR_SIZE << 3)
+
+
+#endif /* _ADFS_FS_H */
diff --git a/lib/libdss-include/linux/affs_hardblocks.h b/lib/libdss-include/linux/affs_hardblocks.h
new file mode 100644 (file)
index 0000000..f1b948c
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef        AFFS_HARDBLOCKS_H
+#define        AFFS_HARDBLOCKS_H
+
+#include <linux/types.h>
+
+/* Just the needed definitions for the RDB of an Amiga HD. */
+
+struct RigidDiskBlock {
+       __u32   rdb_ID;
+       __be32  rdb_SummedLongs;
+       __s32   rdb_ChkSum;
+       __u32   rdb_HostID;
+       __be32  rdb_BlockBytes;
+       __u32   rdb_Flags;
+       __u32   rdb_BadBlockList;
+       __be32  rdb_PartitionList;
+       __u32   rdb_FileSysHeaderList;
+       __u32   rdb_DriveInit;
+       __u32   rdb_Reserved1[6];
+       __u32   rdb_Cylinders;
+       __u32   rdb_Sectors;
+       __u32   rdb_Heads;
+       __u32   rdb_Interleave;
+       __u32   rdb_Park;
+       __u32   rdb_Reserved2[3];
+       __u32   rdb_WritePreComp;
+       __u32   rdb_ReducedWrite;
+       __u32   rdb_StepRate;
+       __u32   rdb_Reserved3[5];
+       __u32   rdb_RDBBlocksLo;
+       __u32   rdb_RDBBlocksHi;
+       __u32   rdb_LoCylinder;
+       __u32   rdb_HiCylinder;
+       __u32   rdb_CylBlocks;
+       __u32   rdb_AutoParkSeconds;
+       __u32   rdb_HighRDSKBlock;
+       __u32   rdb_Reserved4;
+       char    rdb_DiskVendor[8];
+       char    rdb_DiskProduct[16];
+       char    rdb_DiskRevision[4];
+       char    rdb_ControllerVendor[8];
+       char    rdb_ControllerProduct[16];
+       char    rdb_ControllerRevision[4];
+       __u32   rdb_Reserved5[10];
+};
+
+#define        IDNAME_RIGIDDISK        0x5244534B      /* "RDSK" */
+
+struct PartitionBlock {
+       __be32  pb_ID;
+       __be32  pb_SummedLongs;
+       __s32   pb_ChkSum;
+       __u32   pb_HostID;
+       __be32  pb_Next;
+       __u32   pb_Flags;
+       __u32   pb_Reserved1[2];
+       __u32   pb_DevFlags;
+       __u8    pb_DriveName[32];
+       __u32   pb_Reserved2[15];
+       __be32  pb_Environment[17];
+       __u32   pb_EReserved[15];
+};
+
+#define        IDNAME_PARTITION        0x50415254      /* "PART" */
+
+#define RDB_ALLOCATION_LIMIT   16
+
+#endif /* AFFS_HARDBLOCKS_H */
diff --git a/lib/libdss-include/linux/agpgart.h b/lib/libdss-include/linux/agpgart.h
new file mode 100644 (file)
index 0000000..126eb8a
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * AGPGART module version 0.99
+ * Copyright (C) 1999 Jeff Hartmann
+ * Copyright (C) 1999 Precision Insight, Inc.
+ * Copyright (C) 1999 Xi Graphics, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _AGP_H
+#define _AGP_H
+
+#define AGPIOC_BASE       'A'
+#define AGPIOC_INFO       _IOR (AGPIOC_BASE, 0, struct agp_info*)
+#define AGPIOC_ACQUIRE    _IO  (AGPIOC_BASE, 1)
+#define AGPIOC_RELEASE    _IO  (AGPIOC_BASE, 2)
+#define AGPIOC_SETUP      _IOW (AGPIOC_BASE, 3, struct agp_setup*)
+#define AGPIOC_RESERVE    _IOW (AGPIOC_BASE, 4, struct agp_region*)
+#define AGPIOC_PROTECT    _IOW (AGPIOC_BASE, 5, struct agp_region*)
+#define AGPIOC_ALLOCATE   _IOWR(AGPIOC_BASE, 6, struct agp_allocate*)
+#define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int)
+#define AGPIOC_BIND       _IOW (AGPIOC_BASE, 8, struct agp_bind*)
+#define AGPIOC_UNBIND     _IOW (AGPIOC_BASE, 9, struct agp_unbind*)
+#define AGPIOC_CHIPSET_FLUSH _IO (AGPIOC_BASE, 10)
+
+#define AGP_DEVICE      "/dev/agpgart"
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#include <linux/types.h>
+
+struct agp_version {
+       __u16 major;
+       __u16 minor;
+};
+
+typedef struct _agp_info {
+       struct agp_version version;     /* version of the driver        */
+       __u32 bridge_id;        /* bridge vendor/device         */
+       __u32 agp_mode;         /* mode info of bridge          */
+       unsigned long aper_base;/* base of aperture             */
+       size_t aper_size;       /* size of aperture             */
+       size_t pg_total;        /* max pages (swap + system)    */
+       size_t pg_system;       /* max pages (system)           */
+       size_t pg_used;         /* current pages used           */
+} agp_info;
+
+typedef struct _agp_setup {
+       __u32 agp_mode;         /* mode info of bridge          */
+} agp_setup;
+
+/*
+ * The "prot" down below needs still a "sleep" flag somehow ...
+ */
+typedef struct _agp_segment {
+       __kernel_off_t pg_start;        /* starting page to populate    */
+       __kernel_size_t pg_count;       /* number of pages              */
+       int prot;                       /* prot flags for mmap          */
+} agp_segment;
+
+typedef struct _agp_region {
+       __kernel_pid_t pid;             /* pid of process       */
+       __kernel_size_t seg_count;      /* number of segments   */
+       struct _agp_segment *seg_list;
+} agp_region;
+
+typedef struct _agp_allocate {
+       int key;                /* tag of allocation            */
+       __kernel_size_t pg_count;/* number of pages             */
+       __u32 type;             /* 0 == normal, other devspec   */
+       __u32 physical;         /* device specific (some devices  
+                                * need a phys address of the     
+                                * actual page behind the gatt    
+                                * table)                        */
+} agp_allocate;
+
+typedef struct _agp_bind {
+       int key;                /* tag of allocation            */
+       __kernel_off_t pg_start;/* starting page to populate    */
+} agp_bind;
+
+typedef struct _agp_unbind {
+       int key;                /* tag of allocation            */
+       __u32 priority;         /* priority for paging out      */
+} agp_unbind;
+
+
+#endif /* _AGP_H */
diff --git a/lib/libdss-include/linux/aio_abi.h b/lib/libdss-include/linux/aio_abi.h
new file mode 100644 (file)
index 0000000..bb2554f
--- /dev/null
@@ -0,0 +1,111 @@
+/* include/linux/aio_abi.h
+ *
+ * Copyright 2000,2001,2002 Red Hat.
+ *
+ * Written by Benjamin LaHaise <bcrl@kvack.org>
+ *
+ * Distribute under the terms of the GPLv2 (see ../../COPYING) or under 
+ * the following terms.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied.  Red Hat makes no representations about
+ * the suitability of this software for any purpose.
+ *
+ * IN NO EVENT SHALL RED HAT BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+ * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
+ * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RED HAT HAS BEEN ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * RED HAT DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
+ * RED HAT HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ * ENHANCEMENTS, OR MODIFICATIONS.
+ */
+#ifndef __LINUX__AIO_ABI_H
+#define __LINUX__AIO_ABI_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+typedef __kernel_ulong_t aio_context_t;
+
+enum {
+       IOCB_CMD_PREAD = 0,
+       IOCB_CMD_PWRITE = 1,
+       IOCB_CMD_FSYNC = 2,
+       IOCB_CMD_FDSYNC = 3,
+       /* These two are experimental.
+        * IOCB_CMD_PREADX = 4,
+        * IOCB_CMD_POLL = 5,
+        */
+       IOCB_CMD_NOOP = 6,
+       IOCB_CMD_PREADV = 7,
+       IOCB_CMD_PWRITEV = 8,
+};
+
+/*
+ * Valid flags for the "aio_flags" member of the "struct iocb".
+ *
+ * IOCB_FLAG_RESFD - Set if the "aio_resfd" member of the "struct iocb"
+ *                   is valid.
+ */
+#define IOCB_FLAG_RESFD                (1 << 0)
+
+/* read() from /dev/aio returns these structures. */
+struct io_event {
+       __u64           data;           /* the data field from the iocb */
+       __u64           obj;            /* what iocb this event came from */
+       __s64           res;            /* result code for this event */
+       __s64           res2;           /* secondary result */
+};
+
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+#define PADDED(x,y)    x, y
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+#define PADDED(x,y)    y, x
+#else
+#error edit for your odd byteorder.
+#endif
+
+/*
+ * we always use a 64bit off_t when communicating
+ * with userland.  its up to libraries to do the
+ * proper padding and aio_error abstraction
+ */
+
+struct iocb {
+       /* these are internal to the kernel/libc. */
+       __u64   aio_data;       /* data to be returned in event's data */
+       __u32   PADDED(aio_key, aio_reserved1);
+                               /* the kernel sets aio_key to the req # */
+
+       /* common fields */
+       __u16   aio_lio_opcode; /* see IOCB_CMD_ above */
+       __s16   aio_reqprio;
+       __u32   aio_fildes;
+
+       __u64   aio_buf;
+       __u64   aio_nbytes;
+       __s64   aio_offset;
+
+       /* extra parameters */
+       __u64   aio_reserved2;  /* TODO: use this for a (struct sigevent *) */
+
+       /* flags for the "struct iocb" */
+       __u32   aio_flags;
+
+       /*
+        * if the IOCB_FLAG_RESFD flag of "aio_flags" is set, this is an
+        * eventfd to signal AIO readiness to
+        */
+       __u32   aio_resfd;
+}; /* 64 bytes */
+
+#undef IFBIG
+#undef IFLITTLE
+
+#endif /* __LINUX__AIO_ABI_H */
+
diff --git a/lib/libdss-include/linux/am437x-vpfe.h b/lib/libdss-include/linux/am437x-vpfe.h
new file mode 100644 (file)
index 0000000..d757743
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2013 - 2014 Texas Instruments, Inc.
+ *
+ * Benoit Parrot <bparrot@ti.com>
+ * Lad, Prabhakar <prabhakar.csengg@gmail.com>
+ *
+ * This program is free software; you may redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef AM437X_VPFE_USER_H
+#define AM437X_VPFE_USER_H
+
+#include <linux/videodev2.h>
+
+enum vpfe_ccdc_data_size {
+       VPFE_CCDC_DATA_16BITS = 0,
+       VPFE_CCDC_DATA_15BITS,
+       VPFE_CCDC_DATA_14BITS,
+       VPFE_CCDC_DATA_13BITS,
+       VPFE_CCDC_DATA_12BITS,
+       VPFE_CCDC_DATA_11BITS,
+       VPFE_CCDC_DATA_10BITS,
+       VPFE_CCDC_DATA_8BITS,
+};
+
+/* enum for No of pixel per line to be avg. in Black Clamping*/
+enum vpfe_ccdc_sample_length {
+       VPFE_CCDC_SAMPLE_1PIXELS = 0,
+       VPFE_CCDC_SAMPLE_2PIXELS,
+       VPFE_CCDC_SAMPLE_4PIXELS,
+       VPFE_CCDC_SAMPLE_8PIXELS,
+       VPFE_CCDC_SAMPLE_16PIXELS,
+};
+
+/* enum for No of lines in Black Clamping */
+enum vpfe_ccdc_sample_line {
+       VPFE_CCDC_SAMPLE_1LINES = 0,
+       VPFE_CCDC_SAMPLE_2LINES,
+       VPFE_CCDC_SAMPLE_4LINES,
+       VPFE_CCDC_SAMPLE_8LINES,
+       VPFE_CCDC_SAMPLE_16LINES,
+};
+
+/* enum for Alaw gamma width */
+enum vpfe_ccdc_gamma_width {
+       VPFE_CCDC_GAMMA_BITS_15_6 = 0,  /* use bits 15-6 for gamma */
+       VPFE_CCDC_GAMMA_BITS_14_5,
+       VPFE_CCDC_GAMMA_BITS_13_4,
+       VPFE_CCDC_GAMMA_BITS_12_3,
+       VPFE_CCDC_GAMMA_BITS_11_2,
+       VPFE_CCDC_GAMMA_BITS_10_1,
+       VPFE_CCDC_GAMMA_BITS_09_0,      /* use bits 9-0 for gamma */
+};
+
+/* structure for ALaw */
+struct vpfe_ccdc_a_law {
+       /* Enable/disable A-Law */
+       unsigned char enable;
+       /* Gamma Width Input */
+       enum vpfe_ccdc_gamma_width gamma_wd;
+};
+
+/* structure for Black Clamping */
+struct vpfe_ccdc_black_clamp {
+       unsigned char enable;
+       /* only if bClampEnable is TRUE */
+       enum vpfe_ccdc_sample_length sample_pixel;
+       /* only if bClampEnable is TRUE */
+       enum vpfe_ccdc_sample_line sample_ln;
+       /* only if bClampEnable is TRUE */
+       unsigned short start_pixel;
+       /* only if bClampEnable is TRUE */
+       unsigned short sgain;
+       /* only if bClampEnable is FALSE */
+       unsigned short dc_sub;
+};
+
+/* structure for Black Level Compensation */
+struct vpfe_ccdc_black_compensation {
+       /* Constant value to subtract from Red component */
+       char r;
+       /* Constant value to subtract from Gr component */
+       char gr;
+       /* Constant value to subtract from Blue component */
+       char b;
+       /* Constant value to subtract from Gb component */
+       char gb;
+};
+
+/* Structure for CCDC configuration parameters for raw capture mode passed
+ * by application
+ */
+struct vpfe_ccdc_config_params_raw {
+       /* data size value from 8 to 16 bits */
+       enum vpfe_ccdc_data_size data_sz;
+       /* Structure for Optional A-Law */
+       struct vpfe_ccdc_a_law alaw;
+       /* Structure for Optical Black Clamp */
+       struct vpfe_ccdc_black_clamp blk_clamp;
+       /* Structure for Black Compensation */
+       struct vpfe_ccdc_black_compensation blk_comp;
+};
+
+/*
+ *  Private IOCTL
+ * VIDIOC_AM437X_CCDC_CFG - Set CCDC configuration for raw capture
+ * This is an experimental ioctl that will change in future kernels. So use
+ * this ioctl with care !
+ **/
+#define VIDIOC_AM437X_CCDC_CFG \
+       _IOW('V', BASE_VIDIOC_PRIVATE + 1, void *)
+
+#endif         /* AM437X_VPFE_USER_H */
diff --git a/lib/libdss-include/linux/android/binder.h b/lib/libdss-include/linux/android/binder.h
new file mode 100644 (file)
index 0000000..bef9fd6
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2008 Google, Inc.
+ *
+ * Based on, but no longer compatible with, the original
+ * OpenBinder.org binder driver interface, which is:
+ *
+ * Copyright (c) 2005 Palmsource, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_BINDER_H
+#define _LINUX_BINDER_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define B_PACK_CHARS(c1, c2, c3, c4) \
+       ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
+#define B_TYPE_LARGE 0x85
+
+enum {
+       BINDER_TYPE_BINDER      = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
+       BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
+       BINDER_TYPE_HANDLE      = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
+       BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
+       BINDER_TYPE_FD          = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
+};
+
+enum {
+       FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
+       FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
+};
+
+#ifdef BINDER_IPC_32BIT
+typedef __u32 binder_size_t;
+typedef __u32 binder_uintptr_t;
+#else
+typedef __u64 binder_size_t;
+typedef __u64 binder_uintptr_t;
+#endif
+
+/*
+ * This is the flattened representation of a Binder object for transfer
+ * between processes.  The 'offsets' supplied as part of a binder transaction
+ * contains offsets into the data where these structures occur.  The Binder
+ * driver takes care of re-writing the structure type and data as it moves
+ * between processes.
+ */
+struct flat_binder_object {
+       /* 8 bytes for large_flat_header. */
+       __u32           type;
+       __u32           flags;
+
+       /* 8 bytes of data. */
+       union {
+               binder_uintptr_t        binder; /* local object */
+               __u32                   handle; /* remote object */
+       };
+
+       /* extra data associated with local object */
+       binder_uintptr_t        cookie;
+};
+
+/*
+ * On 64-bit platforms where user code may run in 32-bits the driver must
+ * translate the buffer (and local binder) addresses appropriately.
+ */
+
+struct binder_write_read {
+       binder_size_t           write_size;     /* bytes to write */
+       binder_size_t           write_consumed; /* bytes consumed by driver */
+       binder_uintptr_t        write_buffer;
+       binder_size_t           read_size;      /* bytes to read */
+       binder_size_t           read_consumed;  /* bytes consumed by driver */
+       binder_uintptr_t        read_buffer;
+};
+
+/* Use with BINDER_VERSION, driver fills in fields. */
+struct binder_version {
+       /* driver protocol version -- increment with incompatible change */
+       __s32       protocol_version;
+};
+
+/* This is the current protocol version. */
+#ifdef BINDER_IPC_32BIT
+#define BINDER_CURRENT_PROTOCOL_VERSION 7
+#else
+#define BINDER_CURRENT_PROTOCOL_VERSION 8
+#endif
+
+#define BINDER_WRITE_READ              _IOWR('b', 1, struct binder_write_read)
+#define BINDER_SET_IDLE_TIMEOUT                _IOW('b', 3, __s64)
+#define BINDER_SET_MAX_THREADS         _IOW('b', 5, __u32)
+#define BINDER_SET_IDLE_PRIORITY       _IOW('b', 6, __s32)
+#define BINDER_SET_CONTEXT_MGR         _IOW('b', 7, __s32)
+#define BINDER_THREAD_EXIT             _IOW('b', 8, __s32)
+#define BINDER_VERSION                 _IOWR('b', 9, struct binder_version)
+
+/*
+ * NOTE: Two special error codes you should check for when calling
+ * in to the driver are:
+ *
+ * EINTR -- The operation has been interupted.  This should be
+ * handled by retrying the ioctl() until a different error code
+ * is returned.
+ *
+ * ECONNREFUSED -- The driver is no longer accepting operations
+ * from your process.  That is, the process is being destroyed.
+ * You should handle this by exiting from your process.  Note
+ * that once this error code is returned, all further calls to
+ * the driver from any thread will return this same code.
+ */
+
+enum transaction_flags {
+       TF_ONE_WAY      = 0x01, /* this is a one-way call: async, no return */
+       TF_ROOT_OBJECT  = 0x04, /* contents are the component's root object */
+       TF_STATUS_CODE  = 0x08, /* contents are a 32-bit status code */
+       TF_ACCEPT_FDS   = 0x10, /* allow replies with file descriptors */
+};
+
+struct binder_transaction_data {
+       /* The first two are only used for bcTRANSACTION and brTRANSACTION,
+        * identifying the target and contents of the transaction.
+        */
+       union {
+               /* target descriptor of command transaction */
+               __u32   handle;
+               /* target descriptor of return transaction */
+               binder_uintptr_t ptr;
+       } target;
+       binder_uintptr_t        cookie; /* target object cookie */
+       __u32           code;           /* transaction command */
+
+       /* General information about the transaction. */
+       __u32           flags;
+       pid_t           sender_pid;
+       uid_t           sender_euid;
+       binder_size_t   data_size;      /* number of bytes of data */
+       binder_size_t   offsets_size;   /* number of bytes of offsets */
+
+       /* If this transaction is inline, the data immediately
+        * follows here; otherwise, it ends with a pointer to
+        * the data buffer.
+        */
+       union {
+               struct {
+                       /* transaction data */
+                       binder_uintptr_t        buffer;
+                       /* offsets from buffer to flat_binder_object structs */
+                       binder_uintptr_t        offsets;
+               } ptr;
+               __u8    buf[8];
+       } data;
+};
+
+struct binder_ptr_cookie {
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
+};
+
+struct binder_handle_cookie {
+       __u32 handle;
+       binder_uintptr_t cookie;
+} __attribute__((packed));
+
+struct binder_pri_desc {
+       __s32 priority;
+       __u32 desc;
+};
+
+struct binder_pri_ptr_cookie {
+       __s32 priority;
+       binder_uintptr_t ptr;
+       binder_uintptr_t cookie;
+};
+
+enum binder_driver_return_protocol {
+       BR_ERROR = _IOR('r', 0, __s32),
+       /*
+        * int: error code
+        */
+
+       BR_OK = _IO('r', 1),
+       /* No parameters! */
+
+       BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
+       BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
+       /*
+        * binder_transaction_data: the received command.
+        */
+
+       BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
+       /*
+        * not currently supported
+        * int: 0 if the last bcATTEMPT_ACQUIRE was not successful.
+        * Else the remote object has acquired a primary reference.
+        */
+
+       BR_DEAD_REPLY = _IO('r', 5),
+       /*
+        * The target of the last transaction (either a bcTRANSACTION or
+        * a bcATTEMPT_ACQUIRE) is no longer with us.  No parameters.
+        */
+
+       BR_TRANSACTION_COMPLETE = _IO('r', 6),
+       /*
+        * No parameters... always refers to the last transaction requested
+        * (including replies).  Note that this will be sent even for
+        * asynchronous transactions.
+        */
+
+       BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
+       BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
+       BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
+       BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
+       /*
+        * void *:      ptr to binder
+        * void *: cookie for binder
+        */
+
+       BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
+       /*
+        * not currently supported
+        * int: priority
+        * void *: ptr to binder
+        * void *: cookie for binder
+        */
+
+       BR_NOOP = _IO('r', 12),
+       /*
+        * No parameters.  Do nothing and examine the next command.  It exists
+        * primarily so that we can replace it with a BR_SPAWN_LOOPER command.
+        */
+
+       BR_SPAWN_LOOPER = _IO('r', 13),
+       /*
+        * No parameters.  The driver has determined that a process has no
+        * threads waiting to service incoming transactions.  When a process
+        * receives this command, it must spawn a new service thread and
+        * register it via bcENTER_LOOPER.
+        */
+
+       BR_FINISHED = _IO('r', 14),
+       /*
+        * not currently supported
+        * stop threadpool thread
+        */
+
+       BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+       BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+
+       BR_FAILED_REPLY = _IO('r', 17),
+       /*
+        * The the last transaction (either a bcTRANSACTION or
+        * a bcATTEMPT_ACQUIRE) failed (e.g. out of memory).  No parameters.
+        */
+};
+
+enum binder_driver_command_protocol {
+       BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
+       BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
+       /*
+        * binder_transaction_data: the sent command.
+        */
+
+       BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
+       /*
+        * not currently supported
+        * int:  0 if the last BR_ATTEMPT_ACQUIRE was not successful.
+        * Else you have acquired a primary reference on the object.
+        */
+
+       BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
+       /*
+        * void *: ptr to transaction data received on a read
+        */
+
+       BC_INCREFS = _IOW('c', 4, __u32),
+       BC_ACQUIRE = _IOW('c', 5, __u32),
+       BC_RELEASE = _IOW('c', 6, __u32),
+       BC_DECREFS = _IOW('c', 7, __u32),
+       /*
+        * int: descriptor
+        */
+
+       BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
+       BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
+       /*
+        * void *: ptr to binder
+        * void *: cookie for binder
+        */
+
+       BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
+       /*
+        * not currently supported
+        * int: priority
+        * int: descriptor
+        */
+
+       BC_REGISTER_LOOPER = _IO('c', 11),
+       /*
+        * No parameters.
+        * Register a spawned looper thread with the device.
+        */
+
+       BC_ENTER_LOOPER = _IO('c', 12),
+       BC_EXIT_LOOPER = _IO('c', 13),
+       /*
+        * No parameters.
+        * These two commands are sent as an application-level thread
+        * enters and exits the binder loop, respectively.  They are
+        * used so the binder can have an accurate count of the number
+        * of looping threads it has available.
+        */
+
+       BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14,
+                                               struct binder_handle_cookie),
+       /*
+        * int: handle
+        * void *: cookie
+        */
+
+       BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15,
+                                               struct binder_handle_cookie),
+       /*
+        * int: handle
+        * void *: cookie
+        */
+
+       BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
+       /*
+        * void *: cookie
+        */
+};
+
+#endif /* _LINUX_BINDER_H */
+
diff --git a/lib/libdss-include/linux/apm_bios.h b/lib/libdss-include/linux/apm_bios.h
new file mode 100644 (file)
index 0000000..7fbcc90
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Include file for the interface to an APM BIOS
+ * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+#ifndef _LINUX_APM_H
+#define _LINUX_APM_H
+
+
+#include <linux/types.h>
+
+typedef unsigned short apm_event_t;
+typedef unsigned short apm_eventinfo_t;
+
+struct apm_bios_info {
+       __u16   version;
+       __u16   cseg;
+       __u32   offset;
+       __u16   cseg_16;
+       __u16   dseg;
+       __u16   flags;
+       __u16   cseg_len;
+       __u16   cseg_16_len;
+       __u16   dseg_len;
+};
+
+
+/*
+ * Power states
+ */
+#define APM_STATE_READY                0x0000
+#define APM_STATE_STANDBY      0x0001
+#define APM_STATE_SUSPEND      0x0002
+#define APM_STATE_OFF          0x0003
+#define APM_STATE_BUSY         0x0004
+#define APM_STATE_REJECT       0x0005
+#define APM_STATE_OEM_SYS      0x0020
+#define APM_STATE_OEM_DEV      0x0040
+
+#define APM_STATE_DISABLE      0x0000
+#define APM_STATE_ENABLE       0x0001
+
+#define APM_STATE_DISENGAGE    0x0000
+#define APM_STATE_ENGAGE       0x0001
+
+/*
+ * Events (results of Get PM Event)
+ */
+#define APM_SYS_STANDBY                0x0001
+#define APM_SYS_SUSPEND                0x0002
+#define APM_NORMAL_RESUME      0x0003
+#define APM_CRITICAL_RESUME    0x0004
+#define APM_LOW_BATTERY                0x0005
+#define APM_POWER_STATUS_CHANGE        0x0006
+#define APM_UPDATE_TIME                0x0007
+#define APM_CRITICAL_SUSPEND   0x0008
+#define APM_USER_STANDBY       0x0009
+#define APM_USER_SUSPEND       0x000a
+#define APM_STANDBY_RESUME     0x000b
+#define APM_CAPABILITY_CHANGE  0x000c
+#define APM_USER_HIBERNATION   0x000d
+#define APM_HIBERNATION_RESUME 0x000e
+
+/*
+ * Error codes
+ */
+#define APM_SUCCESS            0x00
+#define APM_DISABLED           0x01
+#define APM_CONNECTED          0x02
+#define APM_NOT_CONNECTED      0x03
+#define APM_16_CONNECTED       0x05
+#define APM_16_UNSUPPORTED     0x06
+#define APM_32_CONNECTED       0x07
+#define APM_32_UNSUPPORTED     0x08
+#define APM_BAD_DEVICE         0x09
+#define APM_BAD_PARAM          0x0a
+#define APM_NOT_ENGAGED                0x0b
+#define APM_BAD_FUNCTION       0x0c
+#define APM_RESUME_DISABLED    0x0d
+#define APM_NO_ERROR           0x53
+#define APM_BAD_STATE          0x60
+#define APM_NO_EVENTS          0x80
+#define APM_NOT_PRESENT                0x86
+
+/*
+ * APM Device IDs
+ */
+#define APM_DEVICE_BIOS                0x0000
+#define APM_DEVICE_ALL         0x0001
+#define APM_DEVICE_DISPLAY     0x0100
+#define APM_DEVICE_STORAGE     0x0200
+#define APM_DEVICE_PARALLEL    0x0300
+#define APM_DEVICE_SERIAL      0x0400
+#define APM_DEVICE_NETWORK     0x0500
+#define APM_DEVICE_PCMCIA      0x0600
+#define APM_DEVICE_BATTERY     0x8000
+#define APM_DEVICE_OEM         0xe000
+#define APM_DEVICE_OLD_ALL     0xffff
+#define APM_DEVICE_CLASS       0x00ff
+#define APM_DEVICE_MASK                0xff00
+
+
+/*
+ * Battery status
+ */
+#define APM_MAX_BATTERIES      2
+
+/*
+ * APM defined capability bit flags
+ */
+#define APM_CAP_GLOBAL_STANDBY         0x0001
+#define APM_CAP_GLOBAL_SUSPEND         0x0002
+#define APM_CAP_RESUME_STANDBY_TIMER   0x0004 /* Timer resume from standby */
+#define APM_CAP_RESUME_SUSPEND_TIMER   0x0008 /* Timer resume from suspend */
+#define APM_CAP_RESUME_STANDBY_RING    0x0010 /* Resume on Ring fr standby */
+#define APM_CAP_RESUME_SUSPEND_RING    0x0020 /* Resume on Ring fr suspend */
+#define APM_CAP_RESUME_STANDBY_PCMCIA  0x0040 /* Resume on PCMCIA Ring */
+#define APM_CAP_RESUME_SUSPEND_PCMCIA  0x0080 /* Resume on PCMCIA Ring */
+
+/*
+ * ioctl operations
+ */
+#include <linux/ioctl.h>
+
+#define APM_IOC_STANDBY                _IO('A', 1)
+#define APM_IOC_SUSPEND                _IO('A', 2)
+
+#endif /* _LINUX_APM_H */
diff --git a/lib/libdss-include/linux/arcfb.h b/lib/libdss-include/linux/arcfb.h
new file mode 100644 (file)
index 0000000..721e765
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __LINUX_ARCFB_H__
+#define __LINUX_ARCFB_H__
+
+#define FBIO_WAITEVENT         _IO('F', 0x88)
+#define FBIO_GETCONTROL2       _IOR('F', 0x89, size_t)
+
+#endif
+
diff --git a/lib/libdss-include/linux/atalk.h b/lib/libdss-include/linux/atalk.h
new file mode 100644 (file)
index 0000000..4e5eefe
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef __LINUX_ATALK_H__
+#define __LINUX_ATALK_H__
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include <linux/socket.h>
+
+/*
+ * AppleTalk networking structures
+ *
+ * The following are directly referenced from the University Of Michigan
+ * netatalk for compatibility reasons.
+ */
+#define ATPORT_FIRST   1
+#define ATPORT_RESERVED        128
+#define ATPORT_LAST    254             /* 254 is only legal on localtalk */ 
+#define ATADDR_ANYNET  (__u16)0
+#define ATADDR_ANYNODE (__u8)0
+#define ATADDR_ANYPORT  (__u8)0
+#define ATADDR_BCAST   (__u8)255
+#define DDP_MAXSZ      587
+#define DDP_MAXHOPS     15             /* 4 bits of hop counter */
+
+#define SIOCATALKDIFADDR       (SIOCPROTOPRIVATE + 0)
+
+struct atalk_addr {
+       __be16  s_net;
+       __u8    s_node;
+};
+
+struct sockaddr_at {
+       __kernel_sa_family_t sat_family;
+       __u8              sat_port;
+       struct atalk_addr sat_addr;
+       char              sat_zero[8];
+};
+
+struct atalk_netrange {
+       __u8    nr_phase;
+       __be16  nr_firstnet;
+       __be16  nr_lastnet;
+};
+
+#endif /* __LINUX_ATALK_H__ */
diff --git a/lib/libdss-include/linux/atm.h b/lib/libdss-include/linux/atm.h
new file mode 100644 (file)
index 0000000..08e27be
--- /dev/null
@@ -0,0 +1,241 @@
+/* atm.h - general ATM declarations */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+/*
+ * WARNING: User-space programs should not #include <linux/atm.h> directly.
+ *          Instead, #include <atm.h>
+ */
+
+#ifndef _LINUX_ATM_H
+#define _LINUX_ATM_H
+
+/*
+ * BEGIN_xx and END_xx markers are used for automatic generation of
+ * documentation. Do not change them.
+ */
+
+
+#include <linux/atmapi.h>
+#include <linux/atmsap.h>
+#include <linux/atmioc.h>
+#include <linux/types.h>
+
+
+/* general ATM constants */
+#define ATM_CELL_SIZE              53  /* ATM cell size incl. header */
+#define ATM_CELL_PAYLOAD           48  /* ATM payload size */
+#define ATM_AAL0_SDU               52  /* AAL0 SDU size */
+#define ATM_MAX_AAL34_PDU       65535  /* maximum AAL3/4 PDU payload */
+#define ATM_AAL5_TRAILER            8  /* AAL5 trailer size */
+#define ATM_MAX_AAL5_PDU        65535  /* maximum AAL5 PDU payload */
+#define ATM_MAX_CDV              9999  /* maximum (default) CDV */
+#define ATM_NOT_RSV_VCI                    32  /* first non-reserved VCI value */
+
+#define ATM_MAX_VPI               255  /* maximum VPI at the UNI */
+#define ATM_MAX_VPI_NNI                  4096  /* maximum VPI at the NNI */
+#define ATM_MAX_VCI             65535  /* maximum VCI */
+
+
+/* "protcol" values for the socket system call */
+#define ATM_NO_AAL     0               /* AAL not specified */
+#define ATM_AAL0       13              /* "raw" ATM cells */
+#define ATM_AAL1       1               /* AAL1 (CBR) */
+#define ATM_AAL2       2               /* AAL2 (VBR) */
+#define ATM_AAL34      3               /* AAL3/4 (data) */
+#define ATM_AAL5       5               /* AAL5 (data) */
+
+/*
+ * socket option name coding functions
+ *
+ * Note that __SO_ENCODE and __SO_LEVEL are somewhat a hack since the
+ * << 22 only reserves 9 bits for the level.  On some architectures
+ * SOL_SOCKET is 0xFFFF, so that's a bit of a problem
+ */
+
+#define __SO_ENCODE(l,n,t)     ((((l) & 0x1FF) << 22) | ((n) << 16) | \
+                               sizeof(t))
+#define __SO_LEVEL_MATCH(c,m)  (((c) >> 22) == ((m) & 0x1FF))
+#define __SO_NUMBER(c)         (((c) >> 16) & 0x3f)
+#define __SO_SIZE(c)           ((c) & 0x3fff)
+
+/*
+ * ATM layer
+ */
+
+#define SO_SETCLP      __SO_ENCODE(SOL_ATM,0,int)
+                           /* set CLP bit value - TODO */
+#define SO_CIRANGE     __SO_ENCODE(SOL_ATM,1,struct atm_cirange)
+                           /* connection identifier range; socket must be
+                              bound or connected */
+#define SO_ATMQOS      __SO_ENCODE(SOL_ATM,2,struct atm_qos)
+                           /* Quality of Service setting */
+#define SO_ATMSAP      __SO_ENCODE(SOL_ATM,3,struct atm_sap)
+                           /* Service Access Point */
+#define SO_ATMPVC      __SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc)
+                           /* "PVC" address (also for SVCs); get only */
+#define SO_MULTIPOINT  __SO_ENCODE(SOL_ATM, 5, int)
+                           /* make this vc a p2mp */
+
+
+/*
+ * Note @@@: since the socket layers don't really distinguish the control and
+ * the data plane but generally seems to be data plane-centric, any layer is
+ * about equally wrong for the SAP. If you have a better idea about this,
+ * please speak up ...
+ */
+
+
+/* ATM cell header (for AAL0) */
+
+/* BEGIN_CH */
+#define ATM_HDR_GFC_MASK       0xf0000000
+#define ATM_HDR_GFC_SHIFT      28
+#define ATM_HDR_VPI_MASK       0x0ff00000
+#define ATM_HDR_VPI_SHIFT      20
+#define ATM_HDR_VCI_MASK       0x000ffff0
+#define ATM_HDR_VCI_SHIFT      4
+#define ATM_HDR_PTI_MASK       0x0000000e
+#define ATM_HDR_PTI_SHIFT      1
+#define ATM_HDR_CLP            0x00000001
+/* END_CH */
+
+
+/* PTI codings */
+
+/* BEGIN_PTI */
+#define ATM_PTI_US0    0  /* user data cell, congestion not exp, SDU-type 0 */
+#define ATM_PTI_US1    1  /* user data cell, congestion not exp, SDU-type 1 */
+#define ATM_PTI_UCES0  2  /* user data cell, cong. experienced, SDU-type 0 */
+#define ATM_PTI_UCES1  3  /* user data cell, cong. experienced, SDU-type 1 */
+#define ATM_PTI_SEGF5  4  /* segment OAM F5 flow related cell */
+#define ATM_PTI_E2EF5  5  /* end-to-end OAM F5 flow related cell */
+#define ATM_PTI_RSV_RM 6  /* reserved for traffic control/resource mgmt */
+#define ATM_PTI_RSV    7  /* reserved */
+/* END_PTI */
+
+
+/*
+ * The following items should stay in linux/atm.h, which should be linked to
+ * netatm/atm.h
+ */
+
+/* Traffic description */
+
+#define ATM_NONE       0               /* no traffic */
+#define ATM_UBR                1
+#define ATM_CBR                2
+#define ATM_VBR                3
+#define ATM_ABR                4
+#define ATM_ANYCLASS   5               /* compatible with everything */
+
+#define ATM_MAX_PCR    -1              /* maximum available PCR */
+
+struct atm_trafprm {
+       unsigned char   traffic_class;  /* traffic class (ATM_UBR, ...) */
+       int             max_pcr;        /* maximum PCR in cells per second */
+       int             pcr;            /* desired PCR in cells per second */
+       int             min_pcr;        /* minimum PCR in cells per second */
+       int             max_cdv;        /* maximum CDV in microseconds */
+       int             max_sdu;        /* maximum SDU in bytes */
+        /* extra params for ABR */
+        unsigned int   icr;            /* Initial Cell Rate (24-bit) */
+        unsigned int   tbe;            /* Transient Buffer Exposure (24-bit) */ 
+        unsigned int   frtt : 24;      /* Fixed Round Trip Time (24-bit) */
+        unsigned int   rif  : 4;       /* Rate Increment Factor (4-bit) */
+        unsigned int   rdf  : 4;       /* Rate Decrease Factor (4-bit) */
+        unsigned int nrm_pres  :1;      /* nrm present bit */
+        unsigned int trm_pres  :1;             /* rm present bit */
+        unsigned int adtf_pres :1;             /* adtf present bit */
+        unsigned int cdf_pres  :1;     /* cdf present bit*/
+        unsigned int nrm       :3;             /* Max # of Cells for each forward RM cell (3-bit) */
+        unsigned int trm       :3;     /* Time between forward RM cells (3-bit) */    
+       unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */
+       unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */
+        unsigned int spare     :9;      /* spare bits */ 
+};
+
+struct atm_qos {
+       struct atm_trafprm txtp;        /* parameters in TX direction */
+       struct atm_trafprm rxtp __ATM_API_ALIGN;
+                                       /* parameters in RX direction */
+       unsigned char aal __ATM_API_ALIGN;
+};
+
+/* PVC addressing */
+
+#define ATM_ITF_ANY    -1              /* "magic" PVC address values */
+#define ATM_VPI_ANY    -1
+#define ATM_VCI_ANY    -1
+#define ATM_VPI_UNSPEC -2
+#define ATM_VCI_UNSPEC -2
+
+
+struct sockaddr_atmpvc {
+       unsigned short  sap_family;     /* address family, AF_ATMPVC  */
+       struct {                        /* PVC address */
+               short   itf;            /* ATM interface */
+               short   vpi;            /* VPI (only 8 bits at UNI) */
+               int     vci;            /* VCI (only 16 bits at UNI) */
+       } sap_addr __ATM_API_ALIGN;     /* PVC address */
+};
+
+/* SVC addressing */
+
+#define        ATM_ESA_LEN     20              /* ATM End System Address length */
+#define ATM_E164_LEN   12              /* maximum E.164 number length */
+
+#define ATM_AFI_DCC    0x39            /* DCC ATM Format */
+#define ATM_AFI_ICD    0x47            /* ICD ATM Format */
+#define ATM_AFI_E164   0x45            /* E.164 ATM Format */
+#define ATM_AFI_LOCAL  0x49            /* Local ATM Format */ 
+
+#define ATM_AFI_DCC_GROUP      0xBD    /* DCC ATM Group Format */
+#define ATM_AFI_ICD_GROUP      0xC5    /* ICD ATM Group Format */
+#define ATM_AFI_E164_GROUP     0xC3    /* E.164 ATM Group Format */
+#define ATM_AFI_LOCAL_GROUP    0xC7    /* Local ATM Group Format */
+
+#define ATM_LIJ_NONE   0               /* no leaf-initiated join */
+#define ATM_LIJ                1               /* request joining */
+#define ATM_LIJ_RPJ    2               /* set to root-prompted join */
+#define ATM_LIJ_NJ     3               /* set to network join */
+
+
+struct sockaddr_atmsvc {
+    unsigned short     sas_family;     /* address family, AF_ATMSVC */
+    struct {                           /* SVC address */
+        unsigned char  prv[ATM_ESA_LEN];/* private ATM address */
+        char           pub[ATM_E164_LEN+1]; /* public address (E.164) */
+                                       /* unused addresses must be bzero'ed */
+       char            lij_type;       /* role in LIJ call; one of ATM_LIJ* */
+       __u32   lij_id;         /* LIJ call identifier */
+    } sas_addr __ATM_API_ALIGN;                /* SVC address */
+};
+
+
+static __inline__ int atmsvc_addr_in_use(struct sockaddr_atmsvc addr)
+{
+       return *addr.sas_addr.prv || *addr.sas_addr.pub;
+}
+
+
+static __inline__ int atmpvc_addr_in_use(struct sockaddr_atmpvc addr)
+{
+       return addr.sap_addr.itf || addr.sap_addr.vpi || addr.sap_addr.vci;
+}
+
+
+/*
+ * Some stuff for linux/sockios.h
+ */
+
+struct atmif_sioc {
+       int number;
+       int length;
+       void *arg;
+};
+
+
+typedef unsigned short atm_backend_t;
+#endif /* _LINUX_ATM_H */
diff --git a/lib/libdss-include/linux/atm_eni.h b/lib/libdss-include/linux/atm_eni.h
new file mode 100644 (file)
index 0000000..34f3179
--- /dev/null
@@ -0,0 +1,23 @@
+/* atm_eni.h - Driver-specific declarations of the ENI driver (for use by
+              driver-specific utilities) */
+
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_ENI_H
+#define LINUX_ATM_ENI_H
+
+#include <linux/atmioc.h>
+
+
+struct eni_multipliers {
+       int tx,rx;      /* values are in percent and must be > 100 */
+};
+
+
+#define ENI_MEMDUMP     _IOW('a',ATMIOC_SARPRV,struct atmif_sioc)
+                                                /* printk memory map */
+#define ENI_SETMULT    _IOW('a',ATMIOC_SARPRV+7,struct atmif_sioc)
+                                               /* set buffer multipliers */
+
+#endif
diff --git a/lib/libdss-include/linux/atm_he.h b/lib/libdss-include/linux/atm_he.h
new file mode 100644 (file)
index 0000000..2a7713b
--- /dev/null
@@ -0,0 +1,20 @@
+/* atm_he.h */
+
+#ifndef LINUX_ATM_HE_H
+#define LINUX_ATM_HE_H
+
+#include <linux/atmioc.h>
+
+#define HE_GET_REG     _IOW('a', ATMIOC_SARPRV, struct atmif_sioc)
+
+#define HE_REGTYPE_PCI 1
+#define HE_REGTYPE_RCM 2
+#define HE_REGTYPE_TCM 3
+#define HE_REGTYPE_MBOX        4
+
+struct he_ioctl_reg {
+       unsigned addr, val;
+       char type;
+};
+
+#endif /* LINUX_ATM_HE_H */
diff --git a/lib/libdss-include/linux/atm_idt77105.h b/lib/libdss-include/linux/atm_idt77105.h
new file mode 100644 (file)
index 0000000..8b72400
--- /dev/null
@@ -0,0 +1,28 @@
+/* atm_idt77105.h - Driver-specific declarations of the IDT77105 driver (for
+ * use by driver-specific utilities) */
+
+/* Written 1999 by Greg Banks <gnb@linuxfan.com>. Copied from atm_suni.h. */
+
+
+#ifndef LINUX_ATM_IDT77105_H
+#define LINUX_ATM_IDT77105_H
+
+#include <linux/types.h>
+#include <linux/atmioc.h>
+#include <linux/atmdev.h>
+
+/*
+ * Structure for IDT77105_GETSTAT and IDT77105_GETSTATZ ioctls.
+ * Pointed to by `arg' in atmif_sioc.
+ */
+struct idt77105_stats {
+        __u32 symbol_errors;  /* wire symbol errors */
+        __u32 tx_cells;       /* cells transmitted */
+        __u32 rx_cells;       /* cells received */
+        __u32 rx_hec_errors;  /* Header Error Check errors on receive */
+};
+
+#define IDT77105_GETSTAT       _IOW('a',ATMIOC_PHYPRV+2,struct atmif_sioc)     /* get stats */
+#define IDT77105_GETSTATZ      _IOW('a',ATMIOC_PHYPRV+3,struct atmif_sioc)     /* get stats and zero */
+
+#endif
diff --git a/lib/libdss-include/linux/atm_nicstar.h b/lib/libdss-include/linux/atm_nicstar.h
new file mode 100644 (file)
index 0000000..577b79f
--- /dev/null
@@ -0,0 +1,53 @@
+/******************************************************************************
+ *
+ * atm_nicstar.h
+ *
+ * Driver-specific declarations for use by NICSTAR driver specific utils.
+ *
+ * Author: Rui Prior
+ *
+ * (C) INESC 1998
+ *
+ ******************************************************************************/
+
+
+#ifndef LINUX_ATM_NICSTAR_H
+#define LINUX_ATM_NICSTAR_H
+
+/* Note: non-kernel programs including this file must also include
+ * sys/types.h for struct timeval
+ */
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+#define NS_GETPSTAT    _IOWR('a',ATMIOC_SARPRV+1,struct atmif_sioc)
+                                               /* get pool statistics */
+#define NS_SETBUFLEV   _IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc)
+                                               /* set buffer level markers */
+#define NS_ADJBUFLEV   _IO('a',ATMIOC_SARPRV+3)
+                                               /* adjust buffer level */
+
+typedef struct buf_nr
+{
+   unsigned min;
+   unsigned init;
+   unsigned max;
+}buf_nr;
+
+
+typedef struct pool_levels
+{
+   int buftype;
+   int count;          /* (At least for now) only used in NS_GETPSTAT */
+   buf_nr level;
+} pool_levels;
+
+/* type must be one of the following: */
+#define NS_BUFTYPE_SMALL 1
+#define NS_BUFTYPE_LARGE 2
+#define NS_BUFTYPE_HUGE 3
+#define NS_BUFTYPE_IOVEC 4
+
+
+#endif /* LINUX_ATM_NICSTAR_H */
diff --git a/lib/libdss-include/linux/atm_tcp.h b/lib/libdss-include/linux/atm_tcp.h
new file mode 100644 (file)
index 0000000..f3aa76a
--- /dev/null
@@ -0,0 +1,61 @@
+/* atm_tcp.h - Driver-specific declarations of the ATMTCP driver (for use by
+              driver-specific utilities) */
+
+/* Written 1997-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_TCP_H
+#define LINUX_ATM_TCP_H
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+#include <linux/types.h>
+
+
+/*
+ * All values in struct atmtcp_hdr are in network byte order
+ */
+
+struct atmtcp_hdr {
+       __u16   vpi;
+       __u16   vci;
+       __u32   length;         /* ... of data part */
+};
+
+/*
+ * All values in struct atmtcp_command are in host byte order
+ */
+
+#define ATMTCP_HDR_MAGIC       (~0)    /* this length indicates a command */
+#define ATMTCP_CTRL_OPEN       1       /* request/reply */
+#define ATMTCP_CTRL_CLOSE      2       /* request/reply */
+
+struct atmtcp_control {
+       struct atmtcp_hdr hdr;  /* must be first */
+       int type;               /* message type; both directions */
+       atm_kptr_t vcc;         /* both directions */
+       struct sockaddr_atmpvc addr; /* suggested value from kernel */
+       struct atm_qos  qos;    /* both directions */
+       int result;             /* to kernel only */
+} __ATM_API_ALIGN;
+
+/*
+ * Field usage:
+ * Messge type dir.    hdr.v?i type    addr    qos     vcc     result
+ * -----------  ----   ------- ----    ----    ---     ---     ------
+ * OPEN                K->D    Y       Y       Y       Y       Y       0
+ * OPEN                D->K    -       Y       Y       Y       Y       Y
+ * CLOSE       K->D    -       -       Y       -       Y       0
+ * CLOSE       D->K    -       -       -       -       Y       Y
+ */
+
+#define SIOCSIFATMTCP  _IO('a',ATMIOC_ITF)     /* set ATMTCP mode */
+#define ATMTCP_CREATE  _IO('a',ATMIOC_ITF+14)  /* create persistent ATMTCP
+                                                  interface */
+#define ATMTCP_REMOVE  _IO('a',ATMIOC_ITF+15)  /* destroy persistent ATMTCP
+                                                  interface */
+
+
+
+#endif /* LINUX_ATM_TCP_H */
diff --git a/lib/libdss-include/linux/atm_zatm.h b/lib/libdss-include/linux/atm_zatm.h
new file mode 100644 (file)
index 0000000..9c9c6ad
--- /dev/null
@@ -0,0 +1,46 @@
+/* atm_zatm.h - Driver-specific declarations of the ZATM driver (for use by
+               driver-specific utilities) */
+
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef LINUX_ATM_ZATM_H
+#define LINUX_ATM_ZATM_H
+
+/*
+ * Note: non-kernel programs including this file must also include
+ * sys/types.h for struct timeval
+ */
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+#define ZATM_GETPOOL   _IOW('a',ATMIOC_SARPRV+1,struct atmif_sioc)
+                                               /* get pool statistics */
+#define ZATM_GETPOOLZ  _IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc)
+                                               /* get statistics and zero */
+#define ZATM_SETPOOL   _IOW('a',ATMIOC_SARPRV+3,struct atmif_sioc)
+                                               /* set pool parameters */
+
+struct zatm_pool_info {
+       int ref_count;                  /* free buffer pool usage counters */
+       int low_water,high_water;       /* refill parameters */
+       int rqa_count,rqu_count;        /* queue condition counters */
+       int offset,next_off;            /* alignment optimizations: offset */
+       int next_cnt,next_thres;        /* repetition counter and threshold */
+};
+
+struct zatm_pool_req {
+       int pool_num;                   /* pool number */
+       struct zatm_pool_info info;     /* actual information */
+};
+
+#define ZATM_OAM_POOL          0       /* free buffer pool for OAM cells */
+#define ZATM_AAL0_POOL         1       /* free buffer pool for AAL0 cells */
+#define ZATM_AAL5_POOL_BASE    2       /* first AAL5 free buffer pool */
+#define ZATM_LAST_POOL ZATM_AAL5_POOL_BASE+10 /* max. 64 kB */
+
+#define ZATM_TIMER_HISTORY_SIZE        16      /* number of timer adjustments to
+                                          record; must be 2^n */
+
+#endif
diff --git a/lib/libdss-include/linux/atmapi.h b/lib/libdss-include/linux/atmapi.h
new file mode 100644 (file)
index 0000000..8fe54d9
--- /dev/null
@@ -0,0 +1,29 @@
+/* atmapi.h - ATM API user space/kernel compatibility */
+/* Written 1999,2000 by Werner Almesberger, EPFL ICA */
+
+#ifndef _LINUX_ATMAPI_H
+#define _LINUX_ATMAPI_H
+
+#if defined(__sparc__) || defined(__ia64__)
+/* such alignment is not required on 32 bit sparcs, but we can't
+   figure that we are on a sparc64 while compiling user-space programs. */
+#define __ATM_API_ALIGN        __attribute__((aligned(8)))
+#else
+#define __ATM_API_ALIGN
+#endif
+
+
+/*
+ * Opaque type for kernel pointers. Note that _ is never accessed. We need
+ * the struct in order hide the array, so that we can make simple assignments
+ * instead of being forced to use memcpy. It also improves error reporting for
+ * code that still assumes that we're passing unsigned longs.
+ *
+ * Convention: NULL pointers are passed as a field of all zeroes.
+ */
+typedef struct { unsigned char _[8]; } __ATM_API_ALIGN atm_kptr_t;
+
+#endif
diff --git a/lib/libdss-include/linux/atmarp.h b/lib/libdss-include/linux/atmarp.h
new file mode 100644 (file)
index 0000000..231f4bd
--- /dev/null
@@ -0,0 +1,41 @@
+/* atmarp.h - ATM ARP protocol and kernel-demon interface definitions */
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef _LINUX_ATMARP_H
+#define _LINUX_ATMARP_H
+
+#include <linux/types.h>
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+
+
+#define ATMARP_RETRY_DELAY 30          /* request next resolution or forget
+                                          NAK after 30 sec - should go into
+                                          atmclip.h */
+#define ATMARP_MAX_UNRES_PACKETS 5     /* queue that many packets while
+                                          waiting for the resolver */
+
+
+#define ATMARPD_CTRL   _IO('a',ATMIOC_CLIP+1)  /* become atmarpd ctrl sock */
+#define ATMARP_MKIP    _IO('a',ATMIOC_CLIP+2)  /* attach socket to IP */
+#define ATMARP_SETENTRY        _IO('a',ATMIOC_CLIP+3)  /* fill or hide ARP entry */
+#define ATMARP_ENCAP   _IO('a',ATMIOC_CLIP+5)  /* change encapsulation */
+
+
+enum atmarp_ctrl_type {
+       act_invalid,            /* catch uninitialized structures */
+       act_need,               /* need address resolution */
+       act_up,                 /* interface is coming up */
+       act_down,               /* interface is going down */
+       act_change              /* interface configuration has changed */
+};
+
+struct atmarp_ctrl {
+       enum atmarp_ctrl_type   type;   /* message type */
+       int                     itf_num;/* interface number (if present) */
+       __be32                  ip;     /* IP address (act_need only) */
+};
+
+#endif
diff --git a/lib/libdss-include/linux/atmbr2684.h b/lib/libdss-include/linux/atmbr2684.h
new file mode 100644 (file)
index 0000000..fdb2629
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef _LINUX_ATMBR2684_H
+#define _LINUX_ATMBR2684_H
+
+#include <linux/types.h>
+#include <linux/atm.h>
+#include <linux/if.h>          /* For IFNAMSIZ */
+
+/*
+ * Type of media we're bridging (ethernet, token ring, etc)  Currently only
+ * ethernet is supported
+ */
+#define BR2684_MEDIA_ETHERNET  (0)     /* 802.3 */
+#define BR2684_MEDIA_802_4     (1)     /* 802.4 */
+#define BR2684_MEDIA_TR                (2)     /* 802.5 - token ring */
+#define BR2684_MEDIA_FDDI      (3)
+#define BR2684_MEDIA_802_6     (4)     /* 802.6 */
+
+                                       /* used only at device creation:  */
+#define BR2684_FLAG_ROUTED     (1<<16) /* payload is routed, not bridged */
+
+/*
+ * Is there FCS inbound on this VC?  This currently isn't supported.
+ */
+#define BR2684_FCSIN_NO                (0)
+#define BR2684_FCSIN_IGNORE    (1)
+#define BR2684_FCSIN_VERIFY    (2)
+
+/*
+ * Is there FCS outbound on this VC?  This currently isn't supported.
+ */
+#define BR2684_FCSOUT_NO       (0)
+#define BR2684_FCSOUT_SENDZERO (1)
+#define BR2684_FCSOUT_GENERATE (2)
+
+/*
+ * Does this VC include LLC encapsulation?
+ */
+#define BR2684_ENCAPS_VC       (0)     /* VC-mux */
+#define BR2684_ENCAPS_LLC      (1)
+#define BR2684_ENCAPS_AUTODETECT (2)   /* Unsuported */
+
+/*
+ * Is this VC bridged or routed?
+ */
+
+#define BR2684_PAYLOAD_ROUTED   (0)
+#define BR2684_PAYLOAD_BRIDGED  (1)
+
+/*
+ * This is for the ATM_NEWBACKENDIF call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_newif_br2684 {
+       atm_backend_t backend_num;      /* ATM_BACKEND_BR2684 */
+       int media;              /* BR2684_MEDIA_*, flags in upper bits */
+       char ifname[IFNAMSIZ];
+       int mtu;
+};
+
+/*
+ * This structure is used to specify a br2684 interface - either by a
+ * positive integer (returned by ATM_NEWBACKENDIF) or the interfaces name
+ */
+#define BR2684_FIND_BYNOTHING  (0)
+#define BR2684_FIND_BYNUM      (1)
+#define BR2684_FIND_BYIFNAME   (2)
+struct br2684_if_spec {
+       int method;             /* BR2684_FIND_* */
+       union {
+               char ifname[IFNAMSIZ];
+               int devnum;
+       } spec;
+};
+
+/*
+ * This is for the ATM_SETBACKEND call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_backend_br2684 {
+       atm_backend_t backend_num;      /* ATM_BACKEND_BR2684 */
+       struct br2684_if_spec ifspec;
+       int fcs_in;             /* BR2684_FCSIN_* */
+       int fcs_out;            /* BR2684_FCSOUT_* */
+       int fcs_auto;           /* 1: fcs_{in,out} disabled if no FCS rx'ed */
+       int encaps;             /* BR2684_ENCAPS_* */
+       int has_vpiid;          /* 1: use vpn_id - Unsupported */
+       __u8 vpn_id[7];
+       int send_padding;       /* unsupported */
+       int min_size;           /* we will pad smaller packets than this */
+};
+
+/*
+ * The BR2684_SETFILT ioctl is an experimental mechanism for folks
+ * terminating a large number of IP-only vcc's.  When netfilter allows
+ * efficient per-if in/out filters, this support will be removed
+ */
+struct br2684_filter {
+       __be32 prefix;          /* network byte order */
+       __be32 netmask;         /* 0 = disable filter */
+};
+
+struct br2684_filter_set {
+       struct br2684_if_spec ifspec;
+       struct br2684_filter filter;
+};
+
+enum br2684_payload {
+       p_routed = BR2684_PAYLOAD_ROUTED,
+       p_bridged = BR2684_PAYLOAD_BRIDGED,
+};
+
+#define BR2684_SETFILT _IOW( 'a', ATMIOC_BACKEND + 0, \
+                               struct br2684_filter_set)
+
+#endif /* _LINUX_ATMBR2684_H */
diff --git a/lib/libdss-include/linux/atmclip.h b/lib/libdss-include/linux/atmclip.h
new file mode 100644 (file)
index 0000000..02c94c4
--- /dev/null
@@ -0,0 +1,21 @@
+/* atmclip.h - Classical IP over ATM */
+/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_ATMCLIP_H
+#define LINUX_ATMCLIP_H
+
+#include <linux/sockios.h>
+#include <linux/atmioc.h>
+
+
+#define RFC1483LLC_LEN 8               /* LLC+OUI+PID = 8 */
+#define RFC1626_MTU    9180            /* RFC1626 default MTU */
+
+#define CLIP_DEFAULT_IDLETIMER 1200    /* 20 minutes, see RFC1755 */
+#define CLIP_CHECK_INTERVAL     10     /* check every ten seconds */
+
+#define        SIOCMKCLIP      _IO('a',ATMIOC_CLIP)    /* create IP interface */
+
+#endif
diff --git a/lib/libdss-include/linux/atmdev.h b/lib/libdss-include/linux/atmdev.h
new file mode 100644 (file)
index 0000000..8faa8b9
--- /dev/null
@@ -0,0 +1,215 @@
+/* atmdev.h - ATM device driver declarations and various related items */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_ATMDEV_H
+#define LINUX_ATMDEV_H
+
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+
+
+#define ESI_LEN                6
+
+#define ATM_OC3_PCR    (155520000/270*260/8/53)
+                       /* OC3 link rate:  155520000 bps
+                          SONET overhead: /270*260 (9 section, 1 path)
+                          bits per cell:  /8/53
+                          max cell rate:  353207.547 cells/sec */
+#define ATM_25_PCR     ((25600000/8-8000)/54)
+                       /* 25 Mbps ATM cell rate (59111) */
+#define ATM_OC12_PCR   (622080000/1080*1040/8/53)
+                       /* OC12 link rate: 622080000 bps
+                          SONET overhead: /1080*1040
+                          bits per cell:  /8/53
+                          max cell rate:  1412830.188 cells/sec */
+#define ATM_DS3_PCR    (8000*12)
+                       /* DS3: 12 cells in a 125 usec time slot */
+
+
+#define __AAL_STAT_ITEMS \
+    __HANDLE_ITEM(tx);                 /* TX okay */ \
+    __HANDLE_ITEM(tx_err);             /* TX errors */ \
+    __HANDLE_ITEM(rx);                 /* RX okay */ \
+    __HANDLE_ITEM(rx_err);             /* RX errors */ \
+    __HANDLE_ITEM(rx_drop);            /* RX out of memory */
+
+struct atm_aal_stats {
+#define __HANDLE_ITEM(i) int i
+       __AAL_STAT_ITEMS
+#undef __HANDLE_ITEM
+};
+
+
+struct atm_dev_stats {
+       struct atm_aal_stats aal0;
+       struct atm_aal_stats aal34;
+       struct atm_aal_stats aal5;
+} __ATM_API_ALIGN;
+
+
+#define ATM_GETLINKRATE        _IOW('a',ATMIOC_ITF+1,struct atmif_sioc)
+                                       /* get link rate */
+#define ATM_GETNAMES   _IOW('a',ATMIOC_ITF+3,struct atm_iobuf)
+                                       /* get interface names (numbers) */
+#define ATM_GETTYPE    _IOW('a',ATMIOC_ITF+4,struct atmif_sioc)
+                                       /* get interface type name */
+#define ATM_GETESI     _IOW('a',ATMIOC_ITF+5,struct atmif_sioc)
+                                       /* get interface ESI */
+#define ATM_GETADDR    _IOW('a',ATMIOC_ITF+6,struct atmif_sioc)
+                                       /* get itf's local ATM addr. list */
+#define ATM_RSTADDR    _IOW('a',ATMIOC_ITF+7,struct atmif_sioc)
+                                       /* reset itf's ATM address list */
+#define ATM_ADDADDR    _IOW('a',ATMIOC_ITF+8,struct atmif_sioc)
+                                       /* add a local ATM address */
+#define ATM_DELADDR    _IOW('a',ATMIOC_ITF+9,struct atmif_sioc)
+                                       /* remove a local ATM address */
+#define ATM_GETCIRANGE _IOW('a',ATMIOC_ITF+10,struct atmif_sioc)
+                                       /* get connection identifier range */
+#define ATM_SETCIRANGE _IOW('a',ATMIOC_ITF+11,struct atmif_sioc)
+                                       /* set connection identifier range */
+#define ATM_SETESI     _IOW('a',ATMIOC_ITF+12,struct atmif_sioc)
+                                       /* set interface ESI */
+#define ATM_SETESIF    _IOW('a',ATMIOC_ITF+13,struct atmif_sioc)
+                                       /* force interface ESI */
+#define ATM_ADDLECSADDR        _IOW('a', ATMIOC_ITF+14, struct atmif_sioc)
+                                       /* register a LECS address */
+#define ATM_DELLECSADDR        _IOW('a', ATMIOC_ITF+15, struct atmif_sioc)
+                                       /* unregister a LECS address */
+#define ATM_GETLECSADDR        _IOW('a', ATMIOC_ITF+16, struct atmif_sioc)
+                                       /* retrieve LECS address(es) */
+
+#define ATM_GETSTAT    _IOW('a',ATMIOC_SARCOM+0,struct atmif_sioc)
+                                       /* get AAL layer statistics */
+#define ATM_GETSTATZ   _IOW('a',ATMIOC_SARCOM+1,struct atmif_sioc)
+                                       /* get AAL layer statistics and zero */
+#define ATM_GETLOOP    _IOW('a',ATMIOC_SARCOM+2,struct atmif_sioc)
+                                       /* get loopback mode */
+#define ATM_SETLOOP    _IOW('a',ATMIOC_SARCOM+3,struct atmif_sioc)
+                                       /* set loopback mode */
+#define ATM_QUERYLOOP  _IOW('a',ATMIOC_SARCOM+4,struct atmif_sioc)
+                                       /* query supported loopback modes */
+#define ATM_SETSC      _IOW('a',ATMIOC_SPECIAL+1,int)
+                                       /* enable or disable single-copy */
+#define ATM_SETBACKEND _IOW('a',ATMIOC_SPECIAL+2,atm_backend_t)
+                                       /* set backend handler */
+#define ATM_NEWBACKENDIF _IOW('a',ATMIOC_SPECIAL+3,atm_backend_t)
+                                       /* use backend to make new if */
+#define ATM_ADDPARTY   _IOW('a', ATMIOC_SPECIAL+4,struct atm_iobuf)
+                                       /* add party to p2mp call */
+#ifdef CONFIG_COMPAT
+/* It actually takes struct sockaddr_atmsvc, not struct atm_iobuf */
+#define COMPAT_ATM_ADDPARTY    _IOW('a', ATMIOC_SPECIAL+4,struct compat_atm_iobuf)
+#endif
+#define ATM_DROPPARTY  _IOW('a', ATMIOC_SPECIAL+5,int)
+                                       /* drop party from p2mp call */
+
+/*
+ * These are backend handkers that can be set via the ATM_SETBACKEND call
+ * above.  In the future we may support dynamic loading of these - for now,
+ * they're just being used to share the ATMIOC_BACKEND ioctls
+ */
+#define ATM_BACKEND_RAW                0       
+#define ATM_BACKEND_PPP                1       /* PPPoATM - RFC2364 */
+#define ATM_BACKEND_BR2684     2       /* Bridged RFC1483/2684 */
+
+/* for ATM_GETTYPE */
+#define ATM_ITFTYP_LEN 8       /* maximum length of interface type name */
+
+/*
+ * Loopback modes for ATM_{PHY,SAR}_{GET,SET}LOOP
+ */
+
+/* Point of loopback                           CPU-->SAR-->PHY-->line--> ... */
+#define __ATM_LM_NONE  0       /* no loop back     ^     ^     ^      ^      */
+#define __ATM_LM_AAL   1       /* loop back PDUs --'     |     |      |      */
+#define __ATM_LM_ATM   2       /* loop back ATM cells ---'     |      |      */
+/* RESERVED            4       loop back on PHY side  ---'                   */
+#define __ATM_LM_PHY   8       /* loop back bits (digital) ----'      |      */
+#define __ATM_LM_ANALOG 16     /* loop back the analog signal --------'      */
+
+/* Direction of loopback */
+#define __ATM_LM_MKLOC(n)      ((n))       /* Local (i.e. loop TX to RX) */
+#define __ATM_LM_MKRMT(n)      ((n) << 8)  /* Remote (i.e. loop RX to TX) */
+
+#define __ATM_LM_XTLOC(n)      ((n) & 0xff)
+#define __ATM_LM_XTRMT(n)      (((n) >> 8) & 0xff)
+
+#define ATM_LM_NONE    0       /* no loopback */
+
+#define ATM_LM_LOC_AAL __ATM_LM_MKLOC(__ATM_LM_AAL)
+#define ATM_LM_LOC_ATM __ATM_LM_MKLOC(__ATM_LM_ATM)
+#define ATM_LM_LOC_PHY __ATM_LM_MKLOC(__ATM_LM_PHY)
+#define ATM_LM_LOC_ANALOG __ATM_LM_MKLOC(__ATM_LM_ANALOG)
+
+#define ATM_LM_RMT_AAL __ATM_LM_MKRMT(__ATM_LM_AAL)
+#define ATM_LM_RMT_ATM __ATM_LM_MKRMT(__ATM_LM_ATM)
+#define ATM_LM_RMT_PHY __ATM_LM_MKRMT(__ATM_LM_PHY)
+#define ATM_LM_RMT_ANALOG __ATM_LM_MKRMT(__ATM_LM_ANALOG)
+
+/*
+ * Note: ATM_LM_LOC_* and ATM_LM_RMT_* can be combined, provided that
+ * __ATM_LM_XTLOC(x) <= __ATM_LM_XTRMT(x)
+ */
+
+
+struct atm_iobuf {
+       int length;
+       void *buffer;
+};
+
+/* for ATM_GETCIRANGE / ATM_SETCIRANGE */
+
+#define ATM_CI_MAX      -1              /* use maximum range of VPI/VCI */
+struct atm_cirange {
+       signed char     vpi_bits;       /* 1..8, ATM_CI_MAX (-1) for maximum */
+       signed char     vci_bits;       /* 1..16, ATM_CI_MAX (-1) for maximum */
+};
+
+/* for ATM_SETSC; actually taken from the ATM_VF number space */
+
+#define ATM_SC_RX      1024            /* enable RX single-copy */
+#define ATM_SC_TX      2048            /* enable TX single-copy */
+
+#define ATM_BACKLOG_DEFAULT 32 /* if we get more, we're likely to time out
+                                 anyway */
+
+/* MF: change_qos (Modify) flags */
+
+#define ATM_MF_IMMED    1      /* Block until change is effective */
+#define ATM_MF_INC_RSV  2      /* Change reservation on increase */
+#define ATM_MF_INC_SHP  4      /* Change shaping on increase */
+#define ATM_MF_DEC_RSV  8      /* Change reservation on decrease */
+#define ATM_MF_DEC_SHP 16      /* Change shaping on decrease */
+#define ATM_MF_BWD     32      /* Set the backward direction parameters */
+
+#define ATM_MF_SET     (ATM_MF_INC_RSV | ATM_MF_INC_SHP | ATM_MF_DEC_RSV | \
+                         ATM_MF_DEC_SHP | ATM_MF_BWD)
+
+/*
+ * ATM_VS_* are used to express VC state in a human-friendly way.
+ */
+
+#define ATM_VS_IDLE    0       /* VC is not used */
+#define ATM_VS_CONNECTED 1     /* VC is connected */
+#define ATM_VS_CLOSING 2       /* VC is closing */
+#define ATM_VS_LISTEN  3       /* VC is listening for incoming setups */
+#define ATM_VS_INUSE   4       /* VC is in use (registered with atmsigd) */
+#define ATM_VS_BOUND   5       /* VC is bound */
+
+#define ATM_VS2TXT_MAP \
+    "IDLE", "CONNECTED", "CLOSING", "LISTEN", "INUSE", "BOUND"
+
+#define ATM_VF2TXT_MAP \
+    "ADDR",    "READY",        "PARTIAL",      "REGIS", \
+    "RELEASED", "HASQOS",      "LISTEN",       "META", \
+    "256",     "512",          "1024",         "2048", \
+    "SESSION", "HASSAP",       "BOUND",        "CLOSE"
+
+
+
+#endif /* LINUX_ATMDEV_H */
diff --git a/lib/libdss-include/linux/atmioc.h b/lib/libdss-include/linux/atmioc.h
new file mode 100644 (file)
index 0000000..37f67aa
--- /dev/null
@@ -0,0 +1,41 @@
+/* atmioc.h - ranges for ATM-related ioctl numbers */
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+/*
+ * See http://icawww1.epfl.ch/linux-atm/magic.html for the complete list of
+ * "magic" ioctl numbers.
+ */
+
+
+#ifndef _LINUX_ATMIOC_H
+#define _LINUX_ATMIOC_H
+
+#include <asm/ioctl.h>
+               /* everybody including atmioc.h will also need _IO{,R,W,WR} */
+
+#define ATMIOC_PHYCOM    0x00 /* PHY device common ioctls, globally unique */
+#define ATMIOC_PHYCOM_END 0x0f
+#define ATMIOC_PHYTYP    0x10 /* PHY dev type ioctls, unique per PHY type */
+#define ATMIOC_PHYTYP_END 0x2f
+#define ATMIOC_PHYPRV    0x30 /* PHY dev private ioctls, unique per driver */
+#define ATMIOC_PHYPRV_END 0x4f
+#define ATMIOC_SARCOM    0x50 /* SAR device common ioctls, globally unique */
+#define ATMIOC_SARCOM_END 0x50
+#define ATMIOC_SARPRV    0x60 /* SAR dev private ioctls, unique per driver */
+#define ATMIOC_SARPRV_END 0x7f
+#define ATMIOC_ITF       0x80 /* Interface ioctls, globally unique */
+#define ATMIOC_ITF_END   0x8f
+#define ATMIOC_BACKEND   0x90 /* ATM generic backend ioctls, u. per backend */
+#define ATMIOC_BACKEND_END 0xaf
+/* 0xb0-0xbf: Reserved for future use */
+#define ATMIOC_AREQUIPA          0xc0 /* Application requested IP over ATM, glob. u. */
+#define ATMIOC_LANE      0xd0 /* LAN Emulation, globally unique */
+#define ATMIOC_MPOA       0xd8 /* MPOA, globally unique */
+#define        ATMIOC_CLIP       0xe0 /* Classical IP over ATM control, globally u. */
+#define        ATMIOC_CLIP_END   0xef
+#define        ATMIOC_SPECIAL    0xf0 /* Special-purpose controls, globally unique */
+#define        ATMIOC_SPECIAL_END 0xff
+
+#endif
diff --git a/lib/libdss-include/linux/atmlec.h b/lib/libdss-include/linux/atmlec.h
new file mode 100644 (file)
index 0000000..302791e
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * ATM Lan Emulation Daemon driver interface
+ *
+ * Marko Kiiskila <mkiiskila@yahoo.com>
+ */
+
+#ifndef _ATMLEC_H_
+#define _ATMLEC_H_
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+#include <linux/atm.h>
+#include <linux/if_ether.h>
+#include <linux/types.h>
+
+/* ATM lec daemon control socket */
+#define ATMLEC_CTRL    _IO('a', ATMIOC_LANE)
+#define ATMLEC_DATA    _IO('a', ATMIOC_LANE+1)
+#define ATMLEC_MCAST   _IO('a', ATMIOC_LANE+2)
+
+/* Maximum number of LEC interfaces (tweakable) */
+#define MAX_LEC_ITF 48
+
+typedef enum {
+       l_set_mac_addr,
+       l_del_mac_addr,
+       l_svc_setup,
+       l_addr_delete,
+       l_topology_change,
+       l_flush_complete,
+       l_arp_update,
+       l_narp_req,             /* LANE2 mandates the use of this */
+       l_config,
+       l_flush_tran_id,
+       l_set_lecid,
+       l_arp_xmt,
+       l_rdesc_arp_xmt,
+       l_associate_req,
+       l_should_bridge         /* should we bridge this MAC? */
+} atmlec_msg_type;
+
+#define ATMLEC_MSG_TYPE_MAX l_should_bridge
+
+struct atmlec_config_msg {
+       unsigned int maximum_unknown_frame_count;
+       unsigned int max_unknown_frame_time;
+       unsigned short max_retry_count;
+       unsigned int aging_time;
+       unsigned int forward_delay_time;
+       unsigned int arp_response_time;
+       unsigned int flush_timeout;
+       unsigned int path_switching_delay;
+       unsigned int lane_version;      /* LANE2: 1 for LANEv1, 2 for LANEv2 */
+       int mtu;
+       int is_proxy;
+};
+
+struct atmlec_msg {
+       atmlec_msg_type type;
+       int sizeoftlvs;         /* LANE2: if != 0, tlvs follow */
+       union {
+               struct {
+                       unsigned char mac_addr[ETH_ALEN];
+                       unsigned char atm_addr[ATM_ESA_LEN];
+                       unsigned int flag;      /*
+                                                * Topology_change flag,
+                                                * remoteflag, permanent flag,
+                                                * lecid, transaction id
+                                                */
+                       unsigned int targetless_le_arp; /* LANE2 */
+                       unsigned int no_source_le_narp; /* LANE2 */
+               } normal;
+               struct atmlec_config_msg config;
+               struct {
+                       __u16 lec_id;                           /* requestor lec_id  */
+                       __u32 tran_id;                          /* transaction id    */
+                       unsigned char mac_addr[ETH_ALEN];       /* dst mac addr      */
+                       unsigned char atm_addr[ATM_ESA_LEN];    /* reqestor ATM addr */
+               } proxy;        /*
+                                * For mapping LE_ARP requests to responses. Filled by
+                                * zeppelin, returned by kernel. Used only when proxying
+                                */
+       } content;
+} __ATM_API_ALIGN;
+
+struct atmlec_ioc {
+       int dev_num;
+       unsigned char atm_addr[ATM_ESA_LEN];
+       unsigned char receive;  /* 1= receive vcc, 0 = send vcc */
+};
+#endif /* _ATMLEC_H_ */
diff --git a/lib/libdss-include/linux/atmmpc.h b/lib/libdss-include/linux/atmmpc.h
new file mode 100644 (file)
index 0000000..2aba578
--- /dev/null
@@ -0,0 +1,126 @@
+#ifndef _ATMMPC_H_
+#define _ATMMPC_H_
+
+#include <linux/atmapi.h>
+#include <linux/atmioc.h>
+#include <linux/atm.h>
+#include <linux/types.h>
+
+#define ATMMPC_CTRL _IO('a', ATMIOC_MPOA)
+#define ATMMPC_DATA _IO('a', ATMIOC_MPOA+1)
+
+#define MPC_SOCKET_INGRESS 1
+#define MPC_SOCKET_EGRESS  2
+
+struct atmmpc_ioc {
+        int dev_num;
+        __be32 ipaddr;              /* the IP address of the shortcut    */
+        int type;                     /* ingress or egress                 */
+};
+
+typedef struct in_ctrl_info {
+        __u8   Last_NHRP_CIE_code;
+        __u8   Last_Q2931_cause_value;
+        __u8   eg_MPC_ATM_addr[ATM_ESA_LEN];
+        __be32  tag;
+        __be32  in_dst_ip;      /* IP address this ingress MPC sends packets to */
+        __u16  holding_time;
+        __u32  request_id;
+} in_ctrl_info;
+
+typedef struct eg_ctrl_info {
+        __u8   DLL_header[256];
+        __u8   DH_length;
+        __be32  cache_id;
+        __be32  tag;
+        __be32  mps_ip;
+        __be32  eg_dst_ip;      /* IP address to which ingress MPC sends packets */
+        __u8   in_MPC_data_ATM_addr[ATM_ESA_LEN];
+        __u16  holding_time;
+} eg_ctrl_info;
+
+struct mpc_parameters {
+        __u16 mpc_p1;   /* Shortcut-Setup Frame Count    */
+        __u16 mpc_p2;   /* Shortcut-Setup Frame Time     */
+        __u8 mpc_p3[8]; /* Flow-detection Protocols      */
+        __u16 mpc_p4;   /* MPC Initial Retry Time        */
+        __u16 mpc_p5;   /* MPC Retry Time Maximum        */
+        __u16 mpc_p6;   /* Hold Down Time                */
+} ;
+
+struct k_message {
+        __u16 type;
+        __be32 ip_mask;
+        __u8  MPS_ctrl[ATM_ESA_LEN];
+        union {
+                in_ctrl_info in_info;
+                eg_ctrl_info eg_info;
+                struct mpc_parameters params;
+        } content;
+        struct atm_qos qos;       
+} __ATM_API_ALIGN;
+
+struct llc_snap_hdr {
+       /* RFC 1483 LLC/SNAP encapsulation for routed IP PDUs */
+        __u8  dsap;    /* Destination Service Access Point (0xAA)     */
+        __u8  ssap;    /* Source Service Access Point      (0xAA)     */
+        __u8  ui;      /* Unnumbered Information           (0x03)     */
+        __u8  org[3];  /* Organizational identification    (0x000000) */
+        __u8  type[2]; /* Ether type (for IP)              (0x0800)   */
+};
+
+/* TLVs this MPC recognizes */
+#define TLV_MPOA_DEVICE_TYPE         0x00a03e2a  
+
+/* MPOA device types in MPOA Device Type TLV */
+#define NON_MPOA    0
+#define MPS         1
+#define MPC         2
+#define MPS_AND_MPC 3
+
+
+/* MPC parameter defaults */
+
+#define MPC_P1 10  /* Shortcut-Setup Frame Count  */ 
+#define MPC_P2 1   /* Shortcut-Setup Frame Time   */
+#define MPC_P3 0   /* Flow-detection Protocols    */
+#define MPC_P4 5   /* MPC Initial Retry Time      */
+#define MPC_P5 40  /* MPC Retry Time Maximum      */
+#define MPC_P6 160 /* Hold Down Time              */
+#define HOLDING_TIME_DEFAULT 1200 /* same as MPS-p7 */
+
+/* MPC constants */
+
+#define MPC_C1 2   /* Retry Time Multiplier       */
+#define MPC_C2 60  /* Initial Keep-Alive Lifetime */
+
+/* Message types - to MPOA daemon */
+
+#define SND_MPOA_RES_RQST    201
+#define SET_MPS_CTRL_ADDR    202
+#define SND_MPOA_RES_RTRY    203 /* Different type in a retry due to req id         */
+#define STOP_KEEP_ALIVE_SM   204
+#define EGRESS_ENTRY_REMOVED 205
+#define SND_EGRESS_PURGE     206
+#define DIE                  207 /* tell the daemon to exit()                       */
+#define DATA_PLANE_PURGE     208 /* Data plane purge because of egress cache hit miss or dead MPS */
+#define OPEN_INGRESS_SVC     209
+
+/* Message types - from MPOA daemon */
+
+#define MPOA_TRIGGER_RCVD     101
+#define MPOA_RES_REPLY_RCVD   102
+#define INGRESS_PURGE_RCVD    103
+#define EGRESS_PURGE_RCVD     104
+#define MPS_DEATH             105
+#define CACHE_IMPOS_RCVD      106
+#define SET_MPC_CTRL_ADDR     107 /* Our MPC's control ATM address   */
+#define SET_MPS_MAC_ADDR      108
+#define CLEAN_UP_AND_EXIT     109
+#define SET_MPC_PARAMS        110 /* MPC configuration parameters    */
+
+/* Message types - bidirectional */       
+
+#define RELOAD                301 /* kill -HUP the daemon for reload */
+
+#endif /* _ATMMPC_H_ */
diff --git a/lib/libdss-include/linux/atmppp.h b/lib/libdss-include/linux/atmppp.h
new file mode 100644 (file)
index 0000000..300dcce
--- /dev/null
@@ -0,0 +1,24 @@
+/* atmppp.h - RFC2364 PPPoATM */
+
+/* Written 2000 by Mitchell Blank Jr */
+
+#ifndef _LINUX_ATMPPP_H
+#define _LINUX_ATMPPP_H
+
+#include <linux/atm.h>
+
+#define PPPOATM_ENCAPS_AUTODETECT      (0)
+#define PPPOATM_ENCAPS_VC              (1)
+#define PPPOATM_ENCAPS_LLC             (2)
+
+/*
+ * This is for the ATM_SETBACKEND call - these are like socket families:
+ * the first element of the structure is the backend number and the rest
+ * is per-backend specific
+ */
+struct atm_backend_ppp {
+       atm_backend_t   backend_num;    /* ATM_BACKEND_PPP */
+       int             encaps;         /* PPPOATM_ENCAPS_* */
+};
+
+#endif /* _LINUX_ATMPPP_H */
diff --git a/lib/libdss-include/linux/atmsap.h b/lib/libdss-include/linux/atmsap.h
new file mode 100644 (file)
index 0000000..799b104
--- /dev/null
@@ -0,0 +1,162 @@
+/* atmsap.h - ATM Service Access Point addressing definitions */
+
+/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */
+
+
+#ifndef _LINUX_ATMSAP_H
+#define _LINUX_ATMSAP_H
+
+#include <linux/atmapi.h>
+
+/*
+ * BEGIN_xx and END_xx markers are used for automatic generation of
+ * documentation. Do not change them.
+ */
+
+
+/*
+ * Layer 2 protocol identifiers
+ */
+
+/* BEGIN_L2 */
+#define ATM_L2_NONE    0       /* L2 not specified */
+#define ATM_L2_ISO1745  0x01   /* Basic mode ISO 1745 */
+#define ATM_L2_Q291    0x02    /* ITU-T Q.291 (Rec. I.441) */
+#define ATM_L2_X25_LL  0x06    /* ITU-T X.25, link layer */
+#define ATM_L2_X25_ML  0x07    /* ITU-T X.25, multilink */
+#define ATM_L2_LAPB    0x08    /* Extended LAPB, half-duplex (Rec. T.71) */
+#define ATM_L2_HDLC_ARM        0x09    /* HDLC ARM (ISO/IEC 4335) */
+#define ATM_L2_HDLC_NRM        0x0a    /* HDLC NRM (ISO/IEC 4335) */
+#define ATM_L2_HDLC_ABM        0x0b    /* HDLC ABM (ISO/IEC 4335) */
+#define ATM_L2_ISO8802 0x0c    /* LAN LLC (ISO/IEC 8802/2) */
+#define ATM_L2_X75     0x0d    /* ITU-T X.75, SLP */
+#define ATM_L2_Q922    0x0e    /* ITU-T Q.922 */
+#define ATM_L2_USER    0x10    /* user-specified */
+#define ATM_L2_ISO7776 0x11    /* ISO 7776 DTE-DTE */
+/* END_L2 */
+
+
+/*
+ * Layer 3 protocol identifiers
+ */
+
+/* BEGIN_L3 */
+#define ATM_L3_NONE    0       /* L3 not specified */
+#define ATM_L3_X25     0x06    /* ITU-T X.25, packet layer */
+#define ATM_L3_ISO8208 0x07    /* ISO/IEC 8208 */
+#define ATM_L3_X223    0x08    /* ITU-T X.223 | ISO/IEC 8878 */
+#define ATM_L3_ISO8473 0x09    /* ITU-T X.233 | ISO/IEC 8473 */
+#define ATM_L3_T70     0x0a    /* ITU-T T.70 minimum network layer */
+#define ATM_L3_TR9577  0x0b    /* ISO/IEC TR 9577 */
+#define ATM_L3_H310    0x0c    /* ITU-T Recommendation H.310 */
+#define ATM_L3_H321    0x0d    /* ITU-T Recommendation H.321 */
+#define ATM_L3_USER    0x10    /* user-specified */
+/* END_L3 */
+
+
+/*
+ * High layer identifiers
+ */
+
+/* BEGIN_HL */
+#define ATM_HL_NONE    0       /* HL not specified */
+#define ATM_HL_ISO     0x01    /* ISO */
+#define ATM_HL_USER    0x02    /* user-specific */
+#define ATM_HL_HLP     0x03    /* high layer profile - UNI 3.0 only */
+#define ATM_HL_VENDOR  0x04    /* vendor-specific application identifier */
+/* END_HL */
+
+
+/*
+ * ITU-T coded mode of operation
+ */
+
+/* BEGIN_IMD */
+#define ATM_IMD_NONE    0      /* mode not specified */
+#define ATM_IMD_NORMAL  1      /* normal mode of operation */
+#define ATM_IMD_EXTENDED 2     /* extended mode of operation */
+/* END_IMD */
+
+/*
+ * H.310 code points
+ */
+
+#define ATM_TT_NONE    0       /* terminal type not specified */
+#define ATM_TT_RX      1       /* receive only */
+#define ATM_TT_TX      2       /* send only */
+#define ATM_TT_RXTX    3       /* receive and send */
+
+#define ATM_MC_NONE    0       /* no multiplexing */
+#define ATM_MC_TS      1       /* transport stream (TS) */
+#define ATM_MC_TS_FEC  2       /* transport stream with forward error corr. */
+#define ATM_MC_PS      3       /* program stream (PS) */
+#define ATM_MC_PS_FEC  4       /* program stream with forward error corr. */
+#define ATM_MC_H221    5       /* ITU-T Rec. H.221 */
+
+/*
+ * SAP structures
+ */
+
+#define ATM_MAX_HLI    8       /* maximum high-layer information length */
+
+
+struct atm_blli {
+    unsigned char l2_proto;    /* layer 2 protocol */
+    union {
+       struct {
+           unsigned char mode; /* mode of operation (ATM_IMD_xxx), 0 if */
+                               /* absent */
+           unsigned char window; /* window size (k), 1-127 (0 to omit) */
+       } itu;                  /* ITU-T encoding */
+       unsigned char user;     /* user-specified l2 information */
+    } l2;
+    unsigned char l3_proto;    /* layer 3 protocol */
+    union {
+       struct {
+           unsigned char mode; /* mode of operation (ATM_IMD_xxx), 0 if */
+                               /* absent */
+           unsigned char def_size; /* default packet size (log2), 4-12 (0 to */
+                                   /* omit) */
+           unsigned char window;/* packet window size, 1-127 (0 to omit) */
+       } itu;                  /* ITU-T encoding */
+       unsigned char user;     /* user specified l3 information */
+       struct {                      /* if l3_proto = ATM_L3_H310 */
+           unsigned char term_type;  /* terminal type */
+           unsigned char fw_mpx_cap; /* forward multiplexing capability */
+                                     /* only if term_type != ATM_TT_NONE */
+           unsigned char bw_mpx_cap; /* backward multiplexing capability */
+                                     /* only if term_type != ATM_TT_NONE */
+       } h310;
+       struct {                  /* if l3_proto = ATM_L3_TR9577 */
+           unsigned char ipi;    /* initial protocol id */
+           unsigned char snap[5];/* IEEE 802.1 SNAP identifier */
+                                 /* (only if ipi == NLPID_IEEE802_1_SNAP) */
+       } tr9577;
+    } l3;
+} __ATM_API_ALIGN;
+
+
+struct atm_bhli {
+    unsigned char hl_type;     /* high layer information type */
+    unsigned char hl_length;   /* length (only if hl_type == ATM_HL_USER || */
+                               /* hl_type == ATM_HL_ISO) */
+    unsigned char hl_info[ATM_MAX_HLI];/* high layer information */
+};
+
+
+#define ATM_MAX_BLLI   3               /* maximum number of BLLI elements */
+
+
+struct atm_sap {
+       struct atm_bhli bhli;           /* local SAP, high-layer information */
+       struct atm_blli blli[ATM_MAX_BLLI] __ATM_API_ALIGN;
+                                       /* local SAP, low-layer info */
+};
+
+
+static __inline__ int blli_in_use(struct atm_blli blli)
+{
+       return blli.l2_proto || blli.l3_proto;
+}
+
+#endif
diff --git a/lib/libdss-include/linux/atmsvc.h b/lib/libdss-include/linux/atmsvc.h
new file mode 100644 (file)
index 0000000..aa71583
--- /dev/null
@@ -0,0 +1,55 @@
+/* atmsvc.h - ATM signaling kernel-demon interface definitions */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef _LINUX_ATMSVC_H
+#define _LINUX_ATMSVC_H
+
+#include <linux/atmapi.h>
+#include <linux/atm.h>
+#include <linux/atmioc.h>
+
+
+#define ATMSIGD_CTRL _IO('a',ATMIOC_SPECIAL)
+                               /* become ATM signaling demon control socket */
+
+enum atmsvc_msg_type { as_catch_null, as_bind, as_connect, as_accept, as_reject,
+                      as_listen, as_okay, as_error, as_indicate, as_close,
+                      as_itf_notify, as_modify, as_identify, as_terminate,
+                      as_addparty, as_dropparty };
+
+struct atmsvc_msg {
+       enum atmsvc_msg_type type;
+       atm_kptr_t vcc;
+       atm_kptr_t listen_vcc;          /* indicate */
+       int reply;                      /* for okay and close:             */
+                                       /*   < 0: error before active      */
+                                       /*        (sigd has discarded ctx) */
+                                       /*   ==0: success                  */
+                                       /*   > 0: error when active (still */
+                                       /*        need to close)           */
+       struct sockaddr_atmpvc pvc;     /* indicate, okay (connect) */
+       struct sockaddr_atmsvc local;   /* local SVC address */
+       struct atm_qos qos;             /* QOS parameters */
+       struct atm_sap sap;             /* SAP */
+       unsigned int session;           /* for p2pm */
+       struct sockaddr_atmsvc svc;     /* SVC address */
+} __ATM_API_ALIGN;
+
+/*
+ * Message contents: see ftp://icaftp.epfl.ch/pub/linux/atm/docs/isp-*.tar.gz
+ */
+
+/*
+ * Some policy stuff for atmsigd and for net/atm/svc.c. Both have to agree on
+ * what PCR is used to request bandwidth from the device driver. net/atm/svc.c
+ * tries to do better than that, but only if there's no routing decision (i.e.
+ * if signaling only uses one ATM interface).
+ */
+
+#define SELECT_TOP_PCR(tp) ((tp).pcr ? (tp).pcr : \
+  (tp).max_pcr && (tp).max_pcr != ATM_MAX_PCR ? (tp).max_pcr : \
+  (tp).min_pcr ? (tp).min_pcr : ATM_MAX_PCR)
+
+#endif
diff --git a/lib/libdss-include/linux/audit.h b/lib/libdss-include/linux/audit.h
new file mode 100644 (file)
index 0000000..8585daa
--- /dev/null
@@ -0,0 +1,466 @@
+/* audit.h -- Auditing support
+ *
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Written by Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#ifndef _LINUX_AUDIT_H_
+#define _LINUX_AUDIT_H_
+
+#include <linux/types.h>
+#include <linux/elf-em.h>
+
+/* The netlink messages for the audit system is divided into blocks:
+ * 1000 - 1099 are for commanding the audit system
+ * 1100 - 1199 user space trusted application messages
+ * 1200 - 1299 messages internal to the audit daemon
+ * 1300 - 1399 audit event messages
+ * 1400 - 1499 SE Linux use
+ * 1500 - 1599 kernel LSPP events
+ * 1600 - 1699 kernel crypto events
+ * 1700 - 1799 kernel anomaly records
+ * 1800 - 1899 kernel integrity events
+ * 1900 - 1999 future kernel use
+ * 2000 is for otherwise unclassified kernel audit messages (legacy)
+ * 2001 - 2099 unused (kernel)
+ * 2100 - 2199 user space anomaly records
+ * 2200 - 2299 user space actions taken in response to anomalies
+ * 2300 - 2399 user space generated LSPP events
+ * 2400 - 2499 user space crypto events
+ * 2500 - 2999 future user space (maybe integrity labels and related events)
+ *
+ * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are
+ * exclusively user space. 1300-2099 is kernel --> user space 
+ * communication.
+ */
+#define AUDIT_GET              1000    /* Get status */
+#define AUDIT_SET              1001    /* Set status (enable/disable/auditd) */
+#define AUDIT_LIST             1002    /* List syscall rules -- deprecated */
+#define AUDIT_ADD              1003    /* Add syscall rule -- deprecated */
+#define AUDIT_DEL              1004    /* Delete syscall rule -- deprecated */
+#define AUDIT_USER             1005    /* Message from userspace -- deprecated */
+#define AUDIT_LOGIN            1006    /* Define the login id and information */
+#define AUDIT_WATCH_INS                1007    /* Insert file/dir watch entry */
+#define AUDIT_WATCH_REM                1008    /* Remove file/dir watch entry */
+#define AUDIT_WATCH_LIST       1009    /* List all file/dir watches */
+#define AUDIT_SIGNAL_INFO      1010    /* Get info about sender of signal to auditd */
+#define AUDIT_ADD_RULE         1011    /* Add syscall filtering rule */
+#define AUDIT_DEL_RULE         1012    /* Delete syscall filtering rule */
+#define AUDIT_LIST_RULES       1013    /* List syscall filtering rules */
+#define AUDIT_TRIM             1014    /* Trim junk from watched tree */
+#define AUDIT_MAKE_EQUIV       1015    /* Append to watched tree */
+#define AUDIT_TTY_GET          1016    /* Get TTY auditing status */
+#define AUDIT_TTY_SET          1017    /* Set TTY auditing status */
+#define AUDIT_SET_FEATURE      1018    /* Turn an audit feature on or off */
+#define AUDIT_GET_FEATURE      1019    /* Get which features are enabled */
+
+#define AUDIT_FIRST_USER_MSG   1100    /* Userspace messages mostly uninteresting to kernel */
+#define AUDIT_USER_AVC         1107    /* We filter this differently */
+#define AUDIT_USER_TTY         1124    /* Non-ICANON TTY input meaning */
+#define AUDIT_LAST_USER_MSG    1199
+#define AUDIT_FIRST_USER_MSG2  2100    /* More user space messages */
+#define AUDIT_LAST_USER_MSG2   2999
+#define AUDIT_DAEMON_START      1200    /* Daemon startup record */
+#define AUDIT_DAEMON_END        1201    /* Daemon normal stop record */
+#define AUDIT_DAEMON_ABORT      1202    /* Daemon error stop record */
+#define AUDIT_DAEMON_CONFIG     1203    /* Daemon config change */
+
+#define AUDIT_SYSCALL          1300    /* Syscall event */
+/* #define AUDIT_FS_WATCH      1301     * Deprecated */
+#define AUDIT_PATH             1302    /* Filename path information */
+#define AUDIT_IPC              1303    /* IPC record */
+#define AUDIT_SOCKETCALL       1304    /* sys_socketcall arguments */
+#define AUDIT_CONFIG_CHANGE    1305    /* Audit system configuration change */
+#define AUDIT_SOCKADDR         1306    /* sockaddr copied as syscall arg */
+#define AUDIT_CWD              1307    /* Current working directory */
+#define AUDIT_EXECVE           1309    /* execve arguments */
+#define AUDIT_IPC_SET_PERM     1311    /* IPC new permissions record type */
+#define AUDIT_MQ_OPEN          1312    /* POSIX MQ open record type */
+#define AUDIT_MQ_SENDRECV      1313    /* POSIX MQ send/receive record type */
+#define AUDIT_MQ_NOTIFY                1314    /* POSIX MQ notify record type */
+#define AUDIT_MQ_GETSETATTR    1315    /* POSIX MQ get/set attribute record type */
+#define AUDIT_KERNEL_OTHER     1316    /* For use by 3rd party modules */
+#define AUDIT_FD_PAIR          1317    /* audit record for pipe/socketpair */
+#define AUDIT_OBJ_PID          1318    /* ptrace target */
+#define AUDIT_TTY              1319    /* Input on an administrative TTY */
+#define AUDIT_EOE              1320    /* End of multi-record event */
+#define AUDIT_BPRM_FCAPS       1321    /* Information about fcaps increasing perms */
+#define AUDIT_CAPSET           1322    /* Record showing argument to sys_capset */
+#define AUDIT_MMAP             1323    /* Record showing descriptor and flags in mmap */
+#define AUDIT_NETFILTER_PKT    1324    /* Packets traversing netfilter chains */
+#define AUDIT_NETFILTER_CFG    1325    /* Netfilter chain modifications */
+#define AUDIT_SECCOMP          1326    /* Secure Computing event */
+#define AUDIT_PROCTITLE                1327    /* Proctitle emit event */
+#define AUDIT_FEATURE_CHANGE   1328    /* audit log listing feature changes */
+
+#define AUDIT_AVC              1400    /* SE Linux avc denial or grant */
+#define AUDIT_SELINUX_ERR      1401    /* Internal SE Linux Errors */
+#define AUDIT_AVC_PATH         1402    /* dentry, vfsmount pair from avc */
+#define AUDIT_MAC_POLICY_LOAD  1403    /* Policy file load */
+#define AUDIT_MAC_STATUS       1404    /* Changed enforcing,permissive,off */
+#define AUDIT_MAC_CONFIG_CHANGE        1405    /* Changes to booleans */
+#define AUDIT_MAC_UNLBL_ALLOW  1406    /* NetLabel: allow unlabeled traffic */
+#define AUDIT_MAC_CIPSOV4_ADD  1407    /* NetLabel: add CIPSOv4 DOI entry */
+#define AUDIT_MAC_CIPSOV4_DEL  1408    /* NetLabel: del CIPSOv4 DOI entry */
+#define AUDIT_MAC_MAP_ADD      1409    /* NetLabel: add LSM domain mapping */
+#define AUDIT_MAC_MAP_DEL      1410    /* NetLabel: del LSM domain mapping */
+#define AUDIT_MAC_IPSEC_ADDSA  1411    /* Not used */
+#define AUDIT_MAC_IPSEC_DELSA  1412    /* Not used  */
+#define AUDIT_MAC_IPSEC_ADDSPD 1413    /* Not used */
+#define AUDIT_MAC_IPSEC_DELSPD 1414    /* Not used */
+#define AUDIT_MAC_IPSEC_EVENT  1415    /* Audit an IPSec event */
+#define AUDIT_MAC_UNLBL_STCADD 1416    /* NetLabel: add a static label */
+#define AUDIT_MAC_UNLBL_STCDEL 1417    /* NetLabel: del a static label */
+
+#define AUDIT_FIRST_KERN_ANOM_MSG   1700
+#define AUDIT_LAST_KERN_ANOM_MSG    1799
+#define AUDIT_ANOM_PROMISCUOUS      1700 /* Device changed promiscuous mode */
+#define AUDIT_ANOM_ABEND            1701 /* Process ended abnormally */
+#define AUDIT_ANOM_LINK                    1702 /* Suspicious use of file links */
+#define AUDIT_INTEGRITY_DATA       1800 /* Data integrity verification */
+#define AUDIT_INTEGRITY_METADATA    1801 /* Metadata integrity verification */
+#define AUDIT_INTEGRITY_STATUS     1802 /* Integrity enable status */
+#define AUDIT_INTEGRITY_HASH       1803 /* Integrity HASH type */
+#define AUDIT_INTEGRITY_PCR        1804 /* PCR invalidation msgs */
+#define AUDIT_INTEGRITY_RULE       1805 /* policy rule */
+
+#define AUDIT_KERNEL           2000    /* Asynchronous audit record. NOT A REQUEST. */
+
+/* Rule flags */
+#define AUDIT_FILTER_USER      0x00    /* Apply rule to user-generated messages */
+#define AUDIT_FILTER_TASK      0x01    /* Apply rule at task creation (not syscall) */
+#define AUDIT_FILTER_ENTRY     0x02    /* Apply rule at syscall entry */
+#define AUDIT_FILTER_WATCH     0x03    /* Apply rule to file system watches */
+#define AUDIT_FILTER_EXIT      0x04    /* Apply rule at syscall exit */
+#define AUDIT_FILTER_TYPE      0x05    /* Apply rule at audit_log_start */
+
+#define AUDIT_NR_FILTERS       6
+
+#define AUDIT_FILTER_PREPEND   0x10    /* Prepend to front of list */
+
+/* Rule actions */
+#define AUDIT_NEVER    0       /* Do not build context if rule matches */
+#define AUDIT_POSSIBLE 1       /* Build context if rule matches  */
+#define AUDIT_ALWAYS   2       /* Generate audit record if rule matches */
+
+/* Rule structure sizes -- if these change, different AUDIT_ADD and
+ * AUDIT_LIST commands must be implemented. */
+#define AUDIT_MAX_FIELDS   64
+#define AUDIT_MAX_KEY_LEN  256
+#define AUDIT_BITMASK_SIZE 64
+#define AUDIT_WORD(nr) ((__u32)((nr)/32))
+#define AUDIT_BIT(nr)  (1 << ((nr) - AUDIT_WORD(nr)*32))
+
+#define AUDIT_SYSCALL_CLASSES 16
+#define AUDIT_CLASS_DIR_WRITE 0
+#define AUDIT_CLASS_DIR_WRITE_32 1
+#define AUDIT_CLASS_CHATTR 2
+#define AUDIT_CLASS_CHATTR_32 3
+#define AUDIT_CLASS_READ 4
+#define AUDIT_CLASS_READ_32 5
+#define AUDIT_CLASS_WRITE 6
+#define AUDIT_CLASS_WRITE_32 7
+#define AUDIT_CLASS_SIGNAL 8
+#define AUDIT_CLASS_SIGNAL_32 9
+
+/* This bitmask is used to validate user input.  It represents all bits that
+ * are currently used in an audit field constant understood by the kernel.
+ * If you are adding a new #define AUDIT_<whatever>, please ensure that
+ * AUDIT_UNUSED_BITS is updated if need be. */
+#define AUDIT_UNUSED_BITS      0x07FFFC00
+
+/* AUDIT_FIELD_COMPARE rule list */
+#define AUDIT_COMPARE_UID_TO_OBJ_UID   1
+#define AUDIT_COMPARE_GID_TO_OBJ_GID   2
+#define AUDIT_COMPARE_EUID_TO_OBJ_UID  3
+#define AUDIT_COMPARE_EGID_TO_OBJ_GID  4
+#define AUDIT_COMPARE_AUID_TO_OBJ_UID  5
+#define AUDIT_COMPARE_SUID_TO_OBJ_UID  6
+#define AUDIT_COMPARE_SGID_TO_OBJ_GID  7
+#define AUDIT_COMPARE_FSUID_TO_OBJ_UID 8
+#define AUDIT_COMPARE_FSGID_TO_OBJ_GID 9
+
+#define AUDIT_COMPARE_UID_TO_AUID      10
+#define AUDIT_COMPARE_UID_TO_EUID      11
+#define AUDIT_COMPARE_UID_TO_FSUID     12
+#define AUDIT_COMPARE_UID_TO_SUID      13
+
+#define AUDIT_COMPARE_AUID_TO_FSUID    14
+#define AUDIT_COMPARE_AUID_TO_SUID     15
+#define AUDIT_COMPARE_AUID_TO_EUID     16
+
+#define AUDIT_COMPARE_EUID_TO_SUID     17
+#define AUDIT_COMPARE_EUID_TO_FSUID    18
+
+#define AUDIT_COMPARE_SUID_TO_FSUID    19
+
+#define AUDIT_COMPARE_GID_TO_EGID      20
+#define AUDIT_COMPARE_GID_TO_FSGID     21
+#define AUDIT_COMPARE_GID_TO_SGID      22
+
+#define AUDIT_COMPARE_EGID_TO_FSGID    23
+#define AUDIT_COMPARE_EGID_TO_SGID     24
+#define AUDIT_COMPARE_SGID_TO_FSGID    25
+
+#define AUDIT_MAX_FIELD_COMPARE                AUDIT_COMPARE_SGID_TO_FSGID
+
+/* Rule fields */
+                               /* These are useful when checking the
+                                * task structure at task creation time
+                                * (AUDIT_PER_TASK).  */
+#define AUDIT_PID      0
+#define AUDIT_UID      1
+#define AUDIT_EUID     2
+#define AUDIT_SUID     3
+#define AUDIT_FSUID    4
+#define AUDIT_GID      5
+#define AUDIT_EGID     6
+#define AUDIT_SGID     7
+#define AUDIT_FSGID    8
+#define AUDIT_LOGINUID 9
+#define AUDIT_PERS     10
+#define AUDIT_ARCH     11
+#define AUDIT_MSGTYPE  12
+#define AUDIT_SUBJ_USER        13      /* security label user */
+#define AUDIT_SUBJ_ROLE        14      /* security label role */
+#define AUDIT_SUBJ_TYPE        15      /* security label type */
+#define AUDIT_SUBJ_SEN 16      /* security label sensitivity label */
+#define AUDIT_SUBJ_CLR 17      /* security label clearance label */
+#define AUDIT_PPID     18
+#define AUDIT_OBJ_USER 19
+#define AUDIT_OBJ_ROLE 20
+#define AUDIT_OBJ_TYPE 21
+#define AUDIT_OBJ_LEV_LOW      22
+#define AUDIT_OBJ_LEV_HIGH     23
+#define AUDIT_LOGINUID_SET     24
+
+                               /* These are ONLY useful when checking
+                                * at syscall exit time (AUDIT_AT_EXIT). */
+#define AUDIT_DEVMAJOR 100
+#define AUDIT_DEVMINOR 101
+#define AUDIT_INODE    102
+#define AUDIT_EXIT     103
+#define AUDIT_SUCCESS   104    /* exit >= 0; value ignored */
+#define AUDIT_WATCH    105
+#define AUDIT_PERM     106
+#define AUDIT_DIR      107
+#define AUDIT_FILETYPE 108
+#define AUDIT_OBJ_UID  109
+#define AUDIT_OBJ_GID  110
+#define AUDIT_FIELD_COMPARE    111
+#define AUDIT_EXE      112
+
+#define AUDIT_ARG0      200
+#define AUDIT_ARG1      (AUDIT_ARG0+1)
+#define AUDIT_ARG2      (AUDIT_ARG0+2)
+#define AUDIT_ARG3      (AUDIT_ARG0+3)
+
+#define AUDIT_FILTERKEY        210
+
+#define AUDIT_NEGATE                   0x80000000
+
+/* These are the supported operators.
+ *     4  2  1  8
+ *     =  >  <  ?
+ *     ----------
+ *     0  0  0  0      00      nonsense
+ *     0  0  0  1      08      &  bit mask
+ *     0  0  1  0      10      <
+ *     0  1  0  0      20      >
+ *     0  1  1  0      30      !=
+ *     1  0  0  0      40      =
+ *     1  0  0  1      48      &=  bit test
+ *     1  0  1  0      50      <=
+ *     1  1  0  0      60      >=
+ *     1  1  1  1      78      all operators
+ */
+#define AUDIT_BIT_MASK                 0x08000000
+#define AUDIT_LESS_THAN                        0x10000000
+#define AUDIT_GREATER_THAN             0x20000000
+#define AUDIT_NOT_EQUAL                        0x30000000
+#define AUDIT_EQUAL                    0x40000000
+#define AUDIT_BIT_TEST                 (AUDIT_BIT_MASK|AUDIT_EQUAL)
+#define AUDIT_LESS_THAN_OR_EQUAL       (AUDIT_LESS_THAN|AUDIT_EQUAL)
+#define AUDIT_GREATER_THAN_OR_EQUAL    (AUDIT_GREATER_THAN|AUDIT_EQUAL)
+#define AUDIT_OPERATORS                        (AUDIT_EQUAL|AUDIT_NOT_EQUAL|AUDIT_BIT_MASK)
+
+enum {
+       Audit_equal,
+       Audit_not_equal,
+       Audit_bitmask,
+       Audit_bittest,
+       Audit_lt,
+       Audit_gt,
+       Audit_le,
+       Audit_ge,
+       Audit_bad
+};
+
+/* Status symbols */
+                               /* Mask values */
+#define AUDIT_STATUS_ENABLED           0x0001
+#define AUDIT_STATUS_FAILURE           0x0002
+#define AUDIT_STATUS_PID               0x0004
+#define AUDIT_STATUS_RATE_LIMIT                0x0008
+#define AUDIT_STATUS_BACKLOG_LIMIT     0x0010
+#define AUDIT_STATUS_BACKLOG_WAIT_TIME 0x0020
+
+#define AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT     0x00000001
+#define AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME 0x00000002
+#define AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH   0x00000004
+#define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
+                                 AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
+                                 AUDIT_FEATURE_BITMAP_EXECUTABLE_PATH)
+
+/* deprecated: AUDIT_VERSION_* */
+#define AUDIT_VERSION_LATEST           AUDIT_FEATURE_BITMAP_ALL
+#define AUDIT_VERSION_BACKLOG_LIMIT    AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT
+#define AUDIT_VERSION_BACKLOG_WAIT_TIME        AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME
+
+                               /* Failure-to-log actions */
+#define AUDIT_FAIL_SILENT      0
+#define AUDIT_FAIL_PRINTK      1
+#define AUDIT_FAIL_PANIC       2
+
+/*
+ * These bits disambiguate different calling conventions that share an
+ * ELF machine type, bitness, and endianness
+ */
+#define __AUDIT_ARCH_CONVENTION_MASK 0x30000000
+#define __AUDIT_ARCH_CONVENTION_MIPS64_N32 0x20000000
+
+/* distinguish syscall tables */
+#define __AUDIT_ARCH_64BIT 0x80000000
+#define __AUDIT_ARCH_LE           0x40000000
+
+#define AUDIT_ARCH_AARCH64     (EM_AARCH64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ALPHA       (EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ARM         (EM_ARM|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_ARMEB       (EM_ARM)
+#define AUDIT_ARCH_CRIS                (EM_CRIS|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_FRV         (EM_FRV)
+#define AUDIT_ARCH_I386                (EM_386|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_IA64                (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_M32R                (EM_M32R)
+#define AUDIT_ARCH_M68K                (EM_68K)
+#define AUDIT_ARCH_MICROBLAZE  (EM_MICROBLAZE)
+#define AUDIT_ARCH_MIPS                (EM_MIPS)
+#define AUDIT_ARCH_MIPSEL      (EM_MIPS|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_MIPS64      (EM_MIPS|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_MIPS64N32   (EM_MIPS|__AUDIT_ARCH_64BIT|\
+                                __AUDIT_ARCH_CONVENTION_MIPS64_N32)
+#define AUDIT_ARCH_MIPSEL64    (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_MIPSEL64N32 (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE|\
+                                __AUDIT_ARCH_CONVENTION_MIPS64_N32)
+#define AUDIT_ARCH_OPENRISC    (EM_OPENRISC)
+#define AUDIT_ARCH_PARISC      (EM_PARISC)
+#define AUDIT_ARCH_PARISC64    (EM_PARISC|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_PPC         (EM_PPC)
+/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */
+#define AUDIT_ARCH_PPC64       (EM_PPC64|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_PPC64LE     (EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_S390                (EM_S390)
+#define AUDIT_ARCH_S390X       (EM_S390|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_SH          (EM_SH)
+#define AUDIT_ARCH_SHEL                (EM_SH|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_SH64                (EM_SH|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_SHEL64      (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_SPARC       (EM_SPARC)
+#define AUDIT_ARCH_SPARC64     (EM_SPARCV9|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_TILEGX      (EM_TILEGX|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_TILEGX32    (EM_TILEGX|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_TILEPRO     (EM_TILEPRO|__AUDIT_ARCH_LE)
+#define AUDIT_ARCH_X86_64      (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
+
+#define AUDIT_PERM_EXEC                1
+#define AUDIT_PERM_WRITE       2
+#define AUDIT_PERM_READ                4
+#define AUDIT_PERM_ATTR                8
+
+/* MAX_AUDIT_MESSAGE_LENGTH is set in audit:lib/libaudit.h as:
+ * 8970 // PATH_MAX*2+CONTEXT_SIZE*2+11+256+1
+ * max header+body+tailer: 44 + 29 + 32 + 262 + 7 + pad
+ */
+#define AUDIT_MESSAGE_TEXT_MAX 8560
+
+/* Multicast Netlink socket groups (default up to 32) */
+enum audit_nlgrps {
+       AUDIT_NLGRP_NONE,       /* Group 0 not used */
+       AUDIT_NLGRP_READLOG,    /* "best effort" read only socket */
+       __AUDIT_NLGRP_MAX
+};
+#define AUDIT_NLGRP_MAX                (__AUDIT_NLGRP_MAX - 1)
+
+struct audit_status {
+       __u32           mask;           /* Bit mask for valid entries */
+       __u32           enabled;        /* 1 = enabled, 0 = disabled */
+       __u32           failure;        /* Failure-to-log action */
+       __u32           pid;            /* pid of auditd process */
+       __u32           rate_limit;     /* messages rate limit (per second) */
+       __u32           backlog_limit;  /* waiting messages limit */
+       __u32           lost;           /* messages lost */
+       __u32           backlog;        /* messages waiting in queue */
+       union {
+               __u32   version;        /* deprecated: audit api version num */
+               __u32   feature_bitmap; /* bitmap of kernel audit features */
+       };
+       __u32           backlog_wait_time;/* message queue wait timeout */
+};
+
+struct audit_features {
+#define AUDIT_FEATURE_VERSION  1
+       __u32   vers;
+       __u32   mask;           /* which bits we are dealing with */
+       __u32   features;       /* which feature to enable/disable */
+       __u32   lock;           /* which features to lock */
+};
+
+#define AUDIT_FEATURE_ONLY_UNSET_LOGINUID      0
+#define AUDIT_FEATURE_LOGINUID_IMMUTABLE       1
+#define AUDIT_LAST_FEATURE                     AUDIT_FEATURE_LOGINUID_IMMUTABLE
+
+#define audit_feature_valid(x)         ((x) >= 0 && (x) <= AUDIT_LAST_FEATURE)
+#define AUDIT_FEATURE_TO_MASK(x)       (1 << ((x) & 31)) /* mask for __u32 */
+
+struct audit_tty_status {
+       __u32           enabled;        /* 1 = enabled, 0 = disabled */
+       __u32           log_passwd;     /* 1 = enabled, 0 = disabled */
+};
+
+#define AUDIT_UID_UNSET (unsigned int)-1
+
+/* audit_rule_data supports filter rules with both integer and string
+ * fields.  It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and
+ * AUDIT_LIST_RULES requests.
+ */
+struct audit_rule_data {
+       __u32           flags;  /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
+       __u32           action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
+       __u32           field_count;
+       __u32           mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */
+       __u32           fields[AUDIT_MAX_FIELDS];
+       __u32           values[AUDIT_MAX_FIELDS];
+       __u32           fieldflags[AUDIT_MAX_FIELDS];
+       __u32           buflen; /* total length of string fields */
+       char            buf[0]; /* string fields buffer */
+};
+
+#endif /* _LINUX_AUDIT_H_ */
diff --git a/lib/libdss-include/linux/aufs_type.h b/lib/libdss-include/linux/aufs_type.h
new file mode 100644 (file)
index 0000000..3fdc6ba
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
+ * This program, aufs is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __AUFS_TYPE_H__
+#define __AUFS_TYPE_H__
+
+#define AUFS_NAME      "aufs"
+
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <linux/limits.h>
+
+#define AUFS_VERSION   "4.x-rcN-20160111"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC       ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
+
+/* ---------------------------------------------------------------------- */
+
+#ifdef CONFIG_AUFS_BRANCH_MAX_127
+typedef int8_t aufs_bindex_t;
+#define AUFS_BRANCH_MAX 127
+#else
+typedef int16_t aufs_bindex_t;
+#ifdef CONFIG_AUFS_BRANCH_MAX_511
+#define AUFS_BRANCH_MAX 511
+#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
+#define AUFS_BRANCH_MAX 1023
+#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
+#define AUFS_BRANCH_MAX 32767
+#endif
+#endif
+
+
+/* ---------------------------------------------------------------------- */
+
+#define AUFS_FSTYPE            AUFS_NAME
+
+#define AUFS_ROOT_INO          2
+#define AUFS_FIRST_INO         11
+
+#define AUFS_WH_PFX            ".wh."
+#define AUFS_WH_PFX_LEN                ((int)sizeof(AUFS_WH_PFX) - 1)
+#define AUFS_WH_TMP_LEN                4
+/* a limit for rmdir/rename a dir and copyup */
+#define AUFS_MAX_NAMELEN       (NAME_MAX \
+                               - AUFS_WH_PFX_LEN * 2   /* doubly whiteouted */\
+                               - 1                     /* dot */\
+                               - AUFS_WH_TMP_LEN)      /* hex */
+#define AUFS_XINO_FNAME                "." AUFS_NAME ".xino"
+#define AUFS_XINO_DEFPATH      "/tmp/" AUFS_XINO_FNAME
+#define AUFS_XINO_DEF_SEC      30 /* seconds */
+#define AUFS_XINO_DEF_TRUNC    45 /* percentage */
+#define AUFS_DIRWH_DEF         3
+#define AUFS_RDCACHE_DEF       10 /* seconds */
+#define AUFS_RDCACHE_MAX       3600 /* seconds */
+#define AUFS_RDBLK_DEF         512 /* bytes */
+#define AUFS_RDHASH_DEF                32
+#define AUFS_WKQ_NAME          AUFS_NAME "d"
+#define AUFS_MFS_DEF_SEC       30 /* seconds */
+#define AUFS_MFS_MAX_SEC       3600 /* seconds */
+#define AUFS_FHSM_CACHE_DEF_SEC        30 /* seconds */
+#define AUFS_PLINK_WARN                50 /* number of plinks in a single bucket */
+
+/* pseudo-link maintenace under /proc */
+#define AUFS_PLINK_MAINT_NAME  "plink_maint"
+#define AUFS_PLINK_MAINT_DIR   "fs/" AUFS_NAME
+#define AUFS_PLINK_MAINT_PATH  AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
+
+#define AUFS_DIROPQ_NAME       AUFS_WH_PFX ".opq" /* whiteouted doubly */
+#define AUFS_WH_DIROPQ         AUFS_WH_PFX AUFS_DIROPQ_NAME
+
+#define AUFS_BASE_NAME         AUFS_WH_PFX AUFS_NAME
+#define AUFS_PLINKDIR_NAME     AUFS_WH_PFX "plnk"
+#define AUFS_ORPHDIR_NAME      AUFS_WH_PFX "orph"
+
+/* doubly whiteouted */
+#define AUFS_WH_BASE           AUFS_WH_PFX AUFS_BASE_NAME
+#define AUFS_WH_PLINKDIR       AUFS_WH_PFX AUFS_PLINKDIR_NAME
+#define AUFS_WH_ORPHDIR                AUFS_WH_PFX AUFS_ORPHDIR_NAME
+
+/* branch permissions and attributes */
+#define AUFS_BRPERM_RW         "rw"
+#define AUFS_BRPERM_RO         "ro"
+#define AUFS_BRPERM_RR         "rr"
+#define AUFS_BRATTR_COO_REG    "coo_reg"
+#define AUFS_BRATTR_COO_ALL    "coo_all"
+#define AUFS_BRATTR_FHSM       "fhsm"
+#define AUFS_BRATTR_UNPIN      "unpin"
+#define AUFS_BRATTR_ICEX       "icex"
+#define AUFS_BRATTR_ICEX_SEC   "icexsec"
+#define AUFS_BRATTR_ICEX_SYS   "icexsys"
+#define AUFS_BRATTR_ICEX_TR    "icextr"
+#define AUFS_BRATTR_ICEX_USR   "icexusr"
+#define AUFS_BRATTR_ICEX_OTH   "icexoth"
+#define AUFS_BRRATTR_WH                "wh"
+#define AUFS_BRWATTR_NLWH      "nolwh"
+#define AUFS_BRWATTR_MOO       "moo"
+
+#define AuBrPerm_RW            1               /* writable, hardlinkable wh */
+#define AuBrPerm_RO            (1 << 1)        /* readonly */
+#define AuBrPerm_RR            (1 << 2)        /* natively readonly */
+#define AuBrPerm_Mask          (AuBrPerm_RW | AuBrPerm_RO | AuBrPerm_RR)
+
+#define AuBrAttr_COO_REG       (1 << 3)        /* copy-up on open */
+#define AuBrAttr_COO_ALL       (1 << 4)
+#define AuBrAttr_COO_Mask      (AuBrAttr_COO_REG | AuBrAttr_COO_ALL)
+
+#define AuBrAttr_FHSM          (1 << 5)        /* file-based hsm */
+#define AuBrAttr_UNPIN         (1 << 6)        /* rename-able top dir of
+                                                  branch. meaningless since
+                                                  linux-3.18-rc1 */
+
+/* ignore error in copying XATTR */
+#define AuBrAttr_ICEX_SEC      (1 << 7)
+#define AuBrAttr_ICEX_SYS      (1 << 8)
+#define AuBrAttr_ICEX_TR       (1 << 9)
+#define AuBrAttr_ICEX_USR      (1 << 10)
+#define AuBrAttr_ICEX_OTH      (1 << 11)
+#define AuBrAttr_ICEX          (AuBrAttr_ICEX_SEC      \
+                                | AuBrAttr_ICEX_SYS    \
+                                | AuBrAttr_ICEX_TR     \
+                                | AuBrAttr_ICEX_USR    \
+                                | AuBrAttr_ICEX_OTH)
+
+#define AuBrRAttr_WH           (1 << 12)       /* whiteout-able */
+#define AuBrRAttr_Mask         AuBrRAttr_WH
+
+#define AuBrWAttr_NoLinkWH     (1 << 13)       /* un-hardlinkable whiteouts */
+#define AuBrWAttr_MOO          (1 << 14)       /* move-up on open */
+#define AuBrWAttr_Mask         (AuBrWAttr_NoLinkWH | AuBrWAttr_MOO)
+
+#define AuBrAttr_CMOO_Mask     (AuBrAttr_COO_Mask | AuBrWAttr_MOO)
+
+/* #warning test userspace */
+
+/* the longest combination */
+/* AUFS_BRATTR_ICEX and AUFS_BRATTR_ICEX_TR don't affect here */
+#define AuBrPermStrSz  sizeof(AUFS_BRPERM_RW                   \
+                              "+" AUFS_BRATTR_COO_REG          \
+                              "+" AUFS_BRATTR_FHSM             \
+                              "+" AUFS_BRATTR_UNPIN            \
+                              "+" AUFS_BRATTR_ICEX_SEC         \
+                              "+" AUFS_BRATTR_ICEX_SYS         \
+                              "+" AUFS_BRATTR_ICEX_USR         \
+                              "+" AUFS_BRATTR_ICEX_OTH         \
+                              "+" AUFS_BRWATTR_NLWH)
+
+typedef struct {
+       char a[AuBrPermStrSz];
+} au_br_perm_str_t;
+
+static __inline__ int au_br_writable(int brperm)
+{
+       return brperm & AuBrPerm_RW;
+}
+
+static __inline__ int au_br_whable(int brperm)
+{
+       return brperm & (AuBrPerm_RW | AuBrRAttr_WH);
+}
+
+static __inline__ int au_br_wh_linkable(int brperm)
+{
+       return !(brperm & AuBrWAttr_NoLinkWH);
+}
+
+static __inline__ int au_br_cmoo(int brperm)
+{
+       return brperm & AuBrAttr_CMOO_Mask;
+}
+
+static __inline__ int au_br_fhsm(int brperm)
+{
+       return brperm & AuBrAttr_FHSM;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/* ioctl */
+enum {
+       /* readdir in userspace */
+       AuCtl_RDU,
+       AuCtl_RDU_INO,
+
+       AuCtl_WBR_FD,   /* pathconf wrapper */
+       AuCtl_IBUSY,    /* busy inode */
+       AuCtl_MVDOWN,   /* move-down */
+       AuCtl_BR,       /* info about branches */
+       AuCtl_FHSM_FD   /* connection for fhsm */
+};
+
+/* borrowed from linux/include/linux/kernel.h */
+#ifndef ALIGN
+#define ALIGN(x, a)            __ALIGN_MASK(x, (typeof(x))(a)-1)
+#define __ALIGN_MASK(x, mask)  (((x)+(mask))&~(mask))
+#endif
+
+/* borrowed from linux/include/linux/compiler-gcc3.h */
+#ifndef __aligned
+#define __aligned(x)                   __attribute__((aligned(x)))
+#endif
+
+
+struct au_rdu_cookie {
+       uint64_t        h_pos;
+       int16_t         bindex;
+       uint8_t         flags;
+       uint8_t         pad;
+       uint32_t        generation;
+} __aligned(8);
+
+struct au_rdu_ent {
+       uint64_t        ino;
+       int16_t         bindex;
+       uint8_t         type;
+       uint8_t         nlen;
+       uint8_t         wh;
+       char            name[0];
+} __aligned(8);
+
+static __inline__ int au_rdu_len(int nlen)
+{
+       /* include the terminating NULL */
+       return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
+                    sizeof(uint64_t));
+}
+
+union au_rdu_ent_ul {
+       struct au_rdu_ent *e;
+       uint64_t                        ul;
+};
+
+enum {
+       AufsCtlRduV_SZ,
+       AufsCtlRduV_End
+};
+
+struct aufs_rdu {
+       /* input */
+       union {
+               uint64_t        sz;     /* AuCtl_RDU */
+               uint64_t        nent;   /* AuCtl_RDU_INO */
+       };
+       union au_rdu_ent_ul     ent;
+       uint16_t                verify[AufsCtlRduV_End];
+
+       /* input/output */
+       uint32_t                blk;
+
+       /* output */
+       union au_rdu_ent_ul     tail;
+       /* number of entries which were added in a single call */
+       uint64_t                rent;
+       uint8_t                 full;
+       uint8_t                 shwh;
+
+       struct au_rdu_cookie    cookie;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_wbr_fd {
+       uint32_t        oflags;
+       int16_t         brid;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_ibusy {
+       uint64_t        ino, h_ino;
+       int16_t         bindex;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+/* error code for move-down */
+/* the actual message strings are implemented in aufs-util.git */
+enum {
+       EAU_MVDOWN_OPAQUE = 1,
+       EAU_MVDOWN_WHITEOUT,
+       EAU_MVDOWN_UPPER,
+       EAU_MVDOWN_BOTTOM,
+       EAU_MVDOWN_NOUPPER,
+       EAU_MVDOWN_NOLOWERBR,
+       EAU_Last
+};
+
+/* flags for move-down */
+#define AUFS_MVDOWN_DMSG       1
+#define AUFS_MVDOWN_OWLOWER    (1 << 1)        /* overwrite lower */
+#define AUFS_MVDOWN_KUPPER     (1 << 2)        /* keep upper */
+#define AUFS_MVDOWN_ROLOWER    (1 << 3)        /* do even if lower is RO */
+#define AUFS_MVDOWN_ROLOWER_R  (1 << 4)        /* did on lower RO */
+#define AUFS_MVDOWN_ROUPPER    (1 << 5)        /* do even if upper is RO */
+#define AUFS_MVDOWN_ROUPPER_R  (1 << 6)        /* did on upper RO */
+#define AUFS_MVDOWN_BRID_UPPER (1 << 7)        /* upper brid */
+#define AUFS_MVDOWN_BRID_LOWER (1 << 8)        /* lower brid */
+#define AUFS_MVDOWN_FHSM_LOWER (1 << 9)        /* find fhsm attr for lower */
+#define AUFS_MVDOWN_STFS       (1 << 10)       /* req. stfs */
+#define AUFS_MVDOWN_STFS_FAILED        (1 << 11)       /* output: stfs is unusable */
+#define AUFS_MVDOWN_BOTTOM     (1 << 12)       /* output: no more lowers */
+
+/* index for move-down */
+enum {
+       AUFS_MVDOWN_UPPER,
+       AUFS_MVDOWN_LOWER,
+       AUFS_MVDOWN_NARRAY
+};
+
+/*
+ * additional info of move-down
+ * number of free blocks and inodes.
+ * subset of struct kstatfs, but smaller and always 64bit.
+ */
+struct aufs_stfs {
+       uint64_t        f_blocks;
+       uint64_t        f_bavail;
+       uint64_t        f_files;
+       uint64_t        f_ffree;
+};
+
+struct aufs_stbr {
+       int16_t                 brid;   /* optional input */
+       int16_t                 bindex; /* output */
+       struct aufs_stfs        stfs;   /* output when AUFS_MVDOWN_STFS set */
+} __aligned(8);
+
+struct aufs_mvdown {
+       uint32_t                flags;                  /* input/output */
+       struct aufs_stbr        stbr[AUFS_MVDOWN_NARRAY]; /* input/output */
+       int8_t                  au_errno;               /* output */
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+union aufs_brinfo {
+       /* PATH_MAX may differ between kernel-space and user-space */
+       char    _spacer[4096];
+       struct {
+               int16_t id;
+               int     perm;
+               char    path[0];
+       };
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+#define AuCtlType              'A'
+#define AUFS_CTL_RDU           _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
+#define AUFS_CTL_RDU_INO       _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
+#define AUFS_CTL_WBR_FD                _IOW(AuCtlType, AuCtl_WBR_FD, \
+                                    struct aufs_wbr_fd)
+#define AUFS_CTL_IBUSY         _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
+#define AUFS_CTL_MVDOWN                _IOWR(AuCtlType, AuCtl_MVDOWN, \
+                                     struct aufs_mvdown)
+#define AUFS_CTL_BRINFO                _IOW(AuCtlType, AuCtl_BR, union aufs_brinfo)
+#define AUFS_CTL_FHSM_FD       _IOW(AuCtlType, AuCtl_FHSM_FD, int)
+
+#endif /* __AUFS_TYPE_H__ */
diff --git a/lib/libdss-include/linux/auto_fs.h b/lib/libdss-include/linux/auto_fs.h
new file mode 100644 (file)
index 0000000..556e409
--- /dev/null
@@ -0,0 +1,72 @@
+/* -*- linux-c -*- ------------------------------------------------------- *
+ *   
+ * linux/include/linux/auto_fs.h
+ *
+ *   Copyright 1997 Transmeta Corporation - All Rights Reserved
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+
+#ifndef _LINUX_AUTO_FS_H
+#define _LINUX_AUTO_FS_H
+
+#include <linux/types.h>
+#include <sys/ioctl.h>
+
+
+/* This file describes autofs v3 */
+#define AUTOFS_PROTO_VERSION   3
+
+/* Range of protocol versions defined */
+#define AUTOFS_MAX_PROTO_VERSION       AUTOFS_PROTO_VERSION
+#define AUTOFS_MIN_PROTO_VERSION       AUTOFS_PROTO_VERSION
+
+/*
+ * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
+ * back to the kernel via ioctl from userspace. On architectures where 32- and
+ * 64-bit userspace binaries can be executed it's important that the size of
+ * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we
+ * do not break the binary ABI interface by changing the structure size.
+ */
+#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */
+typedef unsigned long autofs_wqt_t;
+#else
+typedef unsigned int autofs_wqt_t;
+#endif
+
+/* Packet types */
+#define autofs_ptype_missing   0       /* Missing entry (mount request) */
+#define autofs_ptype_expire    1       /* Expire entry (umount request) */
+
+struct autofs_packet_hdr {
+       int proto_version;              /* Protocol version */
+       int type;                       /* Type of packet */
+};
+
+struct autofs_packet_missing {
+       struct autofs_packet_hdr hdr;
+        autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};     
+
+/* v3 expire (via ioctl) */
+struct autofs_packet_expire {
+       struct autofs_packet_hdr hdr;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+#define AUTOFS_IOC_READY      _IO(0x93,0x60)
+#define AUTOFS_IOC_FAIL       _IO(0x93,0x61)
+#define AUTOFS_IOC_CATATONIC  _IO(0x93,0x62)
+#define AUTOFS_IOC_PROTOVER   _IOR(0x93,0x63,int)
+#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,compat_ulong_t)
+#define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long)
+#define AUTOFS_IOC_EXPIRE     _IOR(0x93,0x65,struct autofs_packet_expire)
+
+#endif /* _LINUX_AUTO_FS_H */
diff --git a/lib/libdss-include/linux/auto_fs4.h b/lib/libdss-include/linux/auto_fs4.h
new file mode 100644 (file)
index 0000000..674aa75
--- /dev/null
@@ -0,0 +1,164 @@
+/* -*- c -*-
+ * linux/include/linux/auto_fs4.h
+ *
+ * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ */
+
+#ifndef _LINUX_AUTO_FS4_H
+#define _LINUX_AUTO_FS4_H
+
+/* Include common v3 definitions */
+#include <linux/types.h>
+#include <linux/auto_fs.h>
+
+/* autofs v4 definitions */
+#undef AUTOFS_PROTO_VERSION
+#undef AUTOFS_MIN_PROTO_VERSION
+#undef AUTOFS_MAX_PROTO_VERSION
+
+#define AUTOFS_PROTO_VERSION           5
+#define AUTOFS_MIN_PROTO_VERSION       3
+#define AUTOFS_MAX_PROTO_VERSION       5
+
+#define AUTOFS_PROTO_SUBVERSION                2
+
+/* Mask for expire behaviour */
+#define AUTOFS_EXP_IMMEDIATE           1
+#define AUTOFS_EXP_LEAVES              2
+
+#define AUTOFS_TYPE_ANY                        0U
+#define AUTOFS_TYPE_INDIRECT           1U
+#define AUTOFS_TYPE_DIRECT             2U
+#define AUTOFS_TYPE_OFFSET             4U
+
+static __inline__ void set_autofs_type_indirect(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_INDIRECT;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_indirect(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_INDIRECT);
+}
+
+static __inline__ void set_autofs_type_direct(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_DIRECT;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_direct(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT);
+}
+
+static __inline__ void set_autofs_type_offset(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_OFFSET;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_offset(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_OFFSET);
+}
+
+static __inline__ unsigned int autofs_type_trigger(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
+}
+
+/*
+ * This isn't really a type as we use it to say "no type set" to
+ * indicate we want to search for "any" mount in the
+ * autofs_dev_ioctl_ismountpoint() device ioctl function.
+ */
+static __inline__ void set_autofs_type_any(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_ANY;
+       return;
+}
+
+static __inline__ unsigned int autofs_type_any(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_ANY);
+}
+
+/* Daemon notification packet types */
+enum autofs_notify {
+       NFY_NONE,
+       NFY_MOUNT,
+       NFY_EXPIRE
+};
+
+/* Kernel protocol version 4 packet types */
+
+/* Expire entry (umount request) */
+#define autofs_ptype_expire_multi      2
+
+/* Kernel protocol version 5 packet types */
+
+/* Indirect mount missing and expire requests. */
+#define autofs_ptype_missing_indirect  3
+#define autofs_ptype_expire_indirect   4
+
+/* Direct mount missing and expire requests */
+#define autofs_ptype_missing_direct    5
+#define autofs_ptype_expire_direct     6
+
+/* v4 multi expire (via pipe) */
+struct autofs_packet_expire_multi {
+       struct autofs_packet_hdr hdr;
+        autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+union autofs_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_packet_missing missing;
+       struct autofs_packet_expire expire;
+       struct autofs_packet_expire_multi expire_multi;
+};
+
+/* autofs v5 common packet struct */
+struct autofs_v5_packet {
+       struct autofs_packet_hdr hdr;
+       autofs_wqt_t wait_queue_token;
+       __u32 dev;
+       __u64 ino;
+       __u32 uid;
+       __u32 gid;
+       __u32 pid;
+       __u32 tgid;
+       __u32 len;
+       char name[NAME_MAX+1];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_v5_packet v5_packet;
+       autofs_packet_missing_indirect_t missing_indirect;
+       autofs_packet_expire_indirect_t expire_indirect;
+       autofs_packet_missing_direct_t missing_direct;
+       autofs_packet_expire_direct_t expire_direct;
+};
+
+#define AUTOFS_IOC_EXPIRE_MULTI                _IOW(0x93,0x66,int)
+#define AUTOFS_IOC_EXPIRE_INDIRECT     AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_EXPIRE_DIRECT       AUTOFS_IOC_EXPIRE_MULTI
+#define AUTOFS_IOC_PROTOSUBVER         _IOR(0x93,0x67,int)
+#define AUTOFS_IOC_ASKUMOUNT           _IOR(0x93,0x70,int)
+
+
+#endif /* _LINUX_AUTO_FS4_H */
diff --git a/lib/libdss-include/linux/auxvec.h b/lib/libdss-include/linux/auxvec.h
new file mode 100644 (file)
index 0000000..4bad588
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _LINUX_AUXVEC_H
+#define _LINUX_AUXVEC_H
+
+#include <asm/auxvec.h>
+
+/* Symbolic values for the entries in the auxiliary table
+   put on the initial stack */
+#define AT_NULL   0    /* end of vector */
+#define AT_IGNORE 1    /* entry should be ignored */
+#define AT_EXECFD 2    /* file descriptor of program */
+#define AT_PHDR   3    /* program headers for program */
+#define AT_PHENT  4    /* size of program header entry */
+#define AT_PHNUM  5    /* number of program headers */
+#define AT_PAGESZ 6    /* system page size */
+#define AT_BASE   7    /* base address of interpreter */
+#define AT_FLAGS  8    /* flags */
+#define AT_ENTRY  9    /* entry point of program */
+#define AT_NOTELF 10   /* program is not ELF */
+#define AT_UID    11   /* real uid */
+#define AT_EUID   12   /* effective uid */
+#define AT_GID    13   /* real gid */
+#define AT_EGID   14   /* effective gid */
+#define AT_PLATFORM 15  /* string identifying CPU for optimizations */
+#define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
+#define AT_CLKTCK 17   /* frequency at which times() increments */
+/* AT_* values 18 through 22 are reserved */
+#define AT_SECURE 23   /* secure mode boolean */
+#define AT_BASE_PLATFORM 24    /* string identifying real platform, may
+                                * differ from AT_PLATFORM. */
+#define AT_RANDOM 25   /* address of 16 random bytes */
+#define AT_HWCAP2 26   /* extension of AT_HWCAP */
+
+#define AT_EXECFN  31  /* filename of program */
+
+
+#endif /* _LINUX_AUXVEC_H */
diff --git a/lib/libdss-include/linux/ax25.h b/lib/libdss-include/linux/ax25.h
new file mode 100644 (file)
index 0000000..74c89a4
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * These are the public elements of the Linux kernel AX.25 code. A similar
+ * file netrom.h exists for the NET/ROM protocol.
+ */
+
+#ifndef        AX25_KERNEL_H
+#define        AX25_KERNEL_H
+
+#include <linux/socket.h>
+
+#define AX25_MTU       256
+#define AX25_MAX_DIGIS  8
+
+#define AX25_WINDOW    1
+#define AX25_T1                2
+#define AX25_N2                3
+#define AX25_T3                4
+#define AX25_T2                5
+#define        AX25_BACKOFF    6
+#define        AX25_EXTSEQ     7
+#define        AX25_PIDINCL    8
+#define AX25_IDLE      9
+#define AX25_PACLEN    10
+#define AX25_IAMDIGI   12
+
+#define AX25_KILL      99
+
+#define SIOCAX25GETUID         (SIOCPROTOPRIVATE+0)
+#define SIOCAX25ADDUID         (SIOCPROTOPRIVATE+1)
+#define SIOCAX25DELUID         (SIOCPROTOPRIVATE+2)
+#define SIOCAX25NOUID          (SIOCPROTOPRIVATE+3)
+#define SIOCAX25OPTRT          (SIOCPROTOPRIVATE+7)
+#define SIOCAX25CTLCON         (SIOCPROTOPRIVATE+8)
+#define SIOCAX25GETINFOOLD     (SIOCPROTOPRIVATE+9)
+#define SIOCAX25ADDFWD         (SIOCPROTOPRIVATE+10)
+#define SIOCAX25DELFWD         (SIOCPROTOPRIVATE+11)
+#define SIOCAX25DEVCTL          (SIOCPROTOPRIVATE+12)
+#define SIOCAX25GETINFO         (SIOCPROTOPRIVATE+13)
+
+#define AX25_SET_RT_IPMODE     2
+
+#define AX25_NOUID_DEFAULT     0
+#define AX25_NOUID_BLOCK       1
+
+typedef struct {
+       char            ax25_call[7];   /* 6 call + SSID (shifted ascii!) */
+} ax25_address;
+
+struct sockaddr_ax25 {
+       __kernel_sa_family_t sax25_family;
+       ax25_address    sax25_call;
+       int             sax25_ndigis;
+       /* Digipeater ax25_address sets follow */
+};
+
+#define sax25_uid      sax25_ndigis
+
+struct full_sockaddr_ax25 {
+       struct sockaddr_ax25 fsa_ax25;
+       ax25_address    fsa_digipeater[AX25_MAX_DIGIS];
+};
+
+struct ax25_routes_struct {
+       ax25_address    port_addr;
+       ax25_address    dest_addr;
+       unsigned char   digi_count;
+       ax25_address    digi_addr[AX25_MAX_DIGIS];
+};
+
+struct ax25_route_opt_struct {
+       ax25_address    port_addr;
+       ax25_address    dest_addr;
+       int             cmd;
+       int             arg;
+};
+
+struct ax25_ctl_struct {
+        ax25_address            port_addr;
+        ax25_address            source_addr;
+        ax25_address            dest_addr;
+        unsigned int            cmd;
+        unsigned long           arg;
+        unsigned char           digi_count;
+        ax25_address            digi_addr[AX25_MAX_DIGIS];
+};
+
+/* this will go away. Please do not export to user land */
+struct ax25_info_struct_deprecated {
+       unsigned int    n2, n2count;
+       unsigned int    t1, t1timer;
+       unsigned int    t2, t2timer;
+       unsigned int    t3, t3timer;
+       unsigned int    idle, idletimer;
+       unsigned int    state;
+       unsigned int    rcv_q, snd_q;
+};
+
+struct ax25_info_struct {
+       unsigned int    n2, n2count;
+       unsigned int    t1, t1timer;
+       unsigned int    t2, t2timer;
+       unsigned int    t3, t3timer;
+       unsigned int    idle, idletimer;
+       unsigned int    state;
+       unsigned int    rcv_q, snd_q;
+       unsigned int    vs, vr, va, vs_max;
+       unsigned int    paclen;
+       unsigned int    window;
+};
+
+struct ax25_fwd_struct {
+       ax25_address    port_from;
+       ax25_address    port_to;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/b1lli.h b/lib/libdss-include/linux/b1lli.h
new file mode 100644 (file)
index 0000000..713f712
--- /dev/null
@@ -0,0 +1,73 @@
+/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $
+ *
+ * ISDN lowlevel-module for AVM B1-card.
+ *
+ * Copyright 1996 by Carsten Paeth (calle@calle.in-berlin.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _B1LLI_H_
+#define _B1LLI_H_
+/*
+ * struct for loading t4 file 
+ */
+typedef struct avmb1_t4file {
+       int len;
+       unsigned char *data;
+} avmb1_t4file;
+
+typedef struct avmb1_loaddef {
+       int contr;
+       avmb1_t4file t4file;
+} avmb1_loaddef;
+
+typedef struct avmb1_loadandconfigdef {
+       int contr;
+       avmb1_t4file t4file;
+        avmb1_t4file t4config; 
+} avmb1_loadandconfigdef;
+
+typedef struct avmb1_resetdef {
+       int contr;
+} avmb1_resetdef;
+
+typedef struct avmb1_getdef {
+       int contr;
+       int cardtype;
+       int cardstate;
+} avmb1_getdef;
+
+/*
+ * struct for adding new cards 
+ */
+typedef struct avmb1_carddef {
+       int port;
+       int irq;
+} avmb1_carddef;
+
+#define AVM_CARDTYPE_B1                0
+#define AVM_CARDTYPE_T1                1
+#define AVM_CARDTYPE_M1                2
+#define AVM_CARDTYPE_M2                3
+
+typedef struct avmb1_extcarddef {
+       int port;
+       int irq;
+        int cardtype;
+        int cardnr;  /* for HEMA/T1 */
+} avmb1_extcarddef;
+
+#define        AVMB1_LOAD              0       /* load image to card */
+#define AVMB1_ADDCARD          1       /* add a new card - OBSOLETE */
+#define AVMB1_RESETCARD                2       /* reset a card */
+#define        AVMB1_LOAD_AND_CONFIG   3       /* load image and config to card */
+#define        AVMB1_ADDCARD_WITH_TYPE 4       /* add a new card, with cardtype */
+#define AVMB1_GET_CARDINFO     5       /* get cardtype */
+#define AVMB1_REMOVECARD       6       /* remove a card - OBSOLETE */
+
+#define        AVMB1_REGISTERCARD_IS_OBSOLETE
+
+#endif                         /* _B1LLI_H_ */
diff --git a/lib/libdss-include/linux/baycom.h b/lib/libdss-include/linux/baycom.h
new file mode 100644 (file)
index 0000000..81249e0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * The Linux BAYCOM driver for the Baycom serial 1200 baud modem
+ * and the parallel 9600 baud modem
+ * (C) 1997-1998 by Thomas Sailer, HB9JNX/AE4WA
+ */
+
+#ifndef _BAYCOM_H
+#define _BAYCOM_H
+
+/* -------------------------------------------------------------------- */
+/*
+ * structs for the IOCTL commands
+ */
+
+struct baycom_debug_data {
+       unsigned long debug1;
+       unsigned long debug2;
+       long debug3;
+};
+
+struct baycom_ioctl {
+       int cmd;
+       union {
+               struct baycom_debug_data dbg;
+       } data;
+};
+
+/* -------------------------------------------------------------------- */
+
+/*
+ * ioctl values change for baycom
+ */
+#define BAYCOMCTL_GETDEBUG       0x92
+
+/* -------------------------------------------------------------------- */
+
+#endif /* _BAYCOM_H */
+
+/* --------------------------------------------------------------------- */
diff --git a/lib/libdss-include/linux/bcm933xx_hcs.h b/lib/libdss-include/linux/bcm933xx_hcs.h
new file mode 100644 (file)
index 0000000..d228218
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Broadcom Cable Modem firmware format
+ */
+
+#ifndef __BCM933XX_HCS_H
+#define __BCM933XX_HCS_H
+
+#include <linux/types.h>
+
+struct bcm_hcs {
+       __u16 magic;
+       __u16 control;
+       __u16 rev_maj;
+       __u16 rev_min;
+       __u32 build_date;
+       __u32 filelen;
+       __u32 ldaddress;
+       char filename[64];
+       __u16 hcs;
+       __u16 her_znaet_chto;
+       __u32 crc;
+};
+
+#endif /* __BCM933XX_HCS */
diff --git a/lib/libdss-include/linux/bfs_fs.h b/lib/libdss-include/linux/bfs_fs.h
new file mode 100644 (file)
index 0000000..1c0b355
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ *     include/linux/bfs_fs.h - BFS data structures on disk.
+ *     Copyright (C) 1999 Tigran Aivazian <tigran@veritas.com>
+ */
+
+#ifndef _LINUX_BFS_FS_H
+#define _LINUX_BFS_FS_H
+
+#include <linux/types.h>
+
+#define BFS_BSIZE_BITS         9
+#define BFS_BSIZE              (1<<BFS_BSIZE_BITS)
+
+#define BFS_MAGIC              0x1BADFACE
+#define BFS_ROOT_INO           2
+#define BFS_INODES_PER_BLOCK   8
+
+/* SVR4 vnode type values (bfs_inode->i_vtype) */
+#define BFS_VDIR 2L
+#define BFS_VREG 1L
+
+/* BFS inode layout on disk */
+struct bfs_inode {
+       __le16 i_ino;
+       __u16 i_unused;
+       __le32 i_sblock;
+       __le32 i_eblock;
+       __le32 i_eoffset;
+       __le32 i_vtype;
+       __le32 i_mode;
+       __le32 i_uid;
+       __le32 i_gid;
+       __le32 i_nlink;
+       __le32 i_atime;
+       __le32 i_mtime;
+       __le32 i_ctime;
+       __u32 i_padding[4];
+};
+
+#define BFS_NAMELEN            14      
+#define BFS_DIRENT_SIZE                16
+#define BFS_DIRS_PER_BLOCK     32
+
+struct bfs_dirent {
+       __le16 ino;
+       char name[BFS_NAMELEN];
+};
+
+/* BFS superblock layout on disk */
+struct bfs_super_block {
+       __le32 s_magic;
+       __le32 s_start;
+       __le32 s_end;
+       __le32 s_from;
+       __le32 s_to;
+       __s32 s_bfrom;
+       __s32 s_bto;
+       char  s_fsname[6];
+       char  s_volume[6];
+       __u32 s_padding[118];
+};
+
+
+#define BFS_OFF2INO(offset) \
+        ((((offset) - BFS_BSIZE) / sizeof(struct bfs_inode)) + BFS_ROOT_INO)
+
+#define BFS_INO2OFF(ino) \
+       ((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE)
+#define BFS_NZFILESIZE(ip) \
+        ((le32_to_cpu((ip)->i_eoffset) + 1) -  le32_to_cpu((ip)->i_sblock) * BFS_BSIZE)
+
+#define BFS_FILESIZE(ip) \
+        ((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip))
+
+#define BFS_FILEBLOCKS(ip) \
+        ((ip)->i_sblock == 0 ? 0 : (le32_to_cpu((ip)->i_eblock) + 1) -  le32_to_cpu((ip)->i_sblock))
+#define BFS_UNCLEAN(bfs_sb, sb)        \
+       ((le32_to_cpu(bfs_sb->s_from) != -1) && (le32_to_cpu(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY))
+
+
+#endif /* _LINUX_BFS_FS_H */
diff --git a/lib/libdss-include/linux/binfmts.h b/lib/libdss-include/linux/binfmts.h
new file mode 100644 (file)
index 0000000..6416794
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_BINFMTS_H
+#define _LINUX_BINFMTS_H
+
+#include <linux/capability.h>
+
+struct pt_regs;
+
+/*
+ * These are the maximum length and maximum number of strings passed to the
+ * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to
+ * prevent the kernel from being unduly impacted by misaddressed pointers.
+ * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
+ */
+#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
+#define MAX_ARG_STRINGS 0x7FFFFFFF
+
+/* sizeof(linux_binprm->buf) */
+#define BINPRM_BUF_SIZE 128
+
+#endif /* _LINUX_BINFMTS_H */
diff --git a/lib/libdss-include/linux/blkpg.h b/lib/libdss-include/linux/blkpg.h
new file mode 100644 (file)
index 0000000..e39cc4e
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __LINUX_BLKPG_H
+#define __LINUX_BLKPG_H
+
+/*
+ * Partition table and disk geometry handling
+ *
+ * A single ioctl with lots of subfunctions:
+ *
+ * Device number stuff:
+ *    get_whole_disk()         (given the device number of a partition,
+ *                               find the device number of the encompassing disk)
+ *    get_all_partitions()     (given the device number of a disk, return the
+ *                              device numbers of all its known partitions)
+ *
+ * Partition stuff:
+ *    add_partition()
+ *    delete_partition()
+ *    test_partition_in_use()  (also for test_disk_in_use)
+ *
+ * Geometry stuff:
+ *    get_geometry()
+ *    set_geometry()
+ *    get_bios_drivedata()
+ *
+ * For today, only the partition stuff - aeb, 990515
+ */
+
+#include <linux/ioctl.h>
+
+#define BLKPG      _IO(0x12,105)
+
+/* The argument structure */
+struct blkpg_ioctl_arg {
+        int op;
+        int flags;
+        int datalen;
+        void *data;
+};
+
+/* The subfunctions (for the op field) */
+#define BLKPG_ADD_PARTITION    1
+#define BLKPG_DEL_PARTITION    2
+#define BLKPG_RESIZE_PARTITION 3
+
+/* Sizes of name fields. Unused at present. */
+#define BLKPG_DEVNAMELTH       64
+#define BLKPG_VOLNAMELTH       64
+
+/* The data structure for ADD_PARTITION and DEL_PARTITION */
+struct blkpg_partition {
+       long long start;                /* starting offset in bytes */
+       long long length;               /* length in bytes */
+       int pno;                        /* partition number */
+       char devname[BLKPG_DEVNAMELTH]; /* partition name, like sda5 or c0d1p2,
+                                          to be used in kernel messages */
+       char volname[BLKPG_VOLNAMELTH]; /* volume label */
+};
+
+#endif /* __LINUX_BLKPG_H */
diff --git a/lib/libdss-include/linux/blktrace_api.h b/lib/libdss-include/linux/blktrace_api.h
new file mode 100644 (file)
index 0000000..8d00071
--- /dev/null
@@ -0,0 +1,142 @@
+#ifndef BLKTRACE_H
+#define BLKTRACE_H
+
+#include <linux/types.h>
+
+/*
+ * Trace categories
+ */
+enum blktrace_cat {
+       BLK_TC_READ     = 1 << 0,       /* reads */
+       BLK_TC_WRITE    = 1 << 1,       /* writes */
+       BLK_TC_FLUSH    = 1 << 2,       /* flush */
+       BLK_TC_SYNC     = 1 << 3,       /* sync IO */
+       BLK_TC_SYNCIO   = BLK_TC_SYNC,
+       BLK_TC_QUEUE    = 1 << 4,       /* queueing/merging */
+       BLK_TC_REQUEUE  = 1 << 5,       /* requeueing */
+       BLK_TC_ISSUE    = 1 << 6,       /* issue */
+       BLK_TC_COMPLETE = 1 << 7,       /* completions */
+       BLK_TC_FS       = 1 << 8,       /* fs requests */
+       BLK_TC_PC       = 1 << 9,       /* pc requests */
+       BLK_TC_NOTIFY   = 1 << 10,      /* special message */
+       BLK_TC_AHEAD    = 1 << 11,      /* readahead */
+       BLK_TC_META     = 1 << 12,      /* metadata */
+       BLK_TC_DISCARD  = 1 << 13,      /* discard requests */
+       BLK_TC_DRV_DATA = 1 << 14,      /* binary per-driver data */
+       BLK_TC_FUA      = 1 << 15,      /* fua requests */
+
+       BLK_TC_END      = 1 << 15,      /* we've run out of bits! */
+};
+
+#define BLK_TC_SHIFT           (16)
+#define BLK_TC_ACT(act)                ((act) << BLK_TC_SHIFT)
+
+/*
+ * Basic trace actions
+ */
+enum blktrace_act {
+       __BLK_TA_QUEUE = 1,             /* queued */
+       __BLK_TA_BACKMERGE,             /* back merged to existing rq */
+       __BLK_TA_FRONTMERGE,            /* front merge to existing rq */
+       __BLK_TA_GETRQ,                 /* allocated new request */
+       __BLK_TA_SLEEPRQ,               /* sleeping on rq allocation */
+       __BLK_TA_REQUEUE,               /* request requeued */
+       __BLK_TA_ISSUE,                 /* sent to driver */
+       __BLK_TA_COMPLETE,              /* completed by driver */
+       __BLK_TA_PLUG,                  /* queue was plugged */
+       __BLK_TA_UNPLUG_IO,             /* queue was unplugged by io */
+       __BLK_TA_UNPLUG_TIMER,          /* queue was unplugged by timer */
+       __BLK_TA_INSERT,                /* insert request */
+       __BLK_TA_SPLIT,                 /* bio was split */
+       __BLK_TA_BOUNCE,                /* bio was bounced */
+       __BLK_TA_REMAP,                 /* bio was remapped */
+       __BLK_TA_ABORT,                 /* request aborted */
+       __BLK_TA_DRV_DATA,              /* driver-specific binary data */
+};
+
+/*
+ * Notify events.
+ */
+enum blktrace_notify {
+       __BLK_TN_PROCESS = 0,           /* establish pid/name mapping */
+       __BLK_TN_TIMESTAMP,             /* include system clock */
+       __BLK_TN_MESSAGE,               /* Character string message */
+};
+
+
+/*
+ * Trace actions in full. Additionally, read or write is masked
+ */
+#define BLK_TA_QUEUE           (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_BACKMERGE       (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_FRONTMERGE      (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_GETRQ            (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_SLEEPRQ          (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
+#define        BLK_TA_REQUEUE          (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
+#define BLK_TA_ISSUE           (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
+#define BLK_TA_COMPLETE                (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE))
+#define BLK_TA_PLUG            (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_UNPLUG_IO       (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_UNPLUG_TIMER    (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_INSERT          (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_SPLIT           (__BLK_TA_SPLIT)
+#define BLK_TA_BOUNCE          (__BLK_TA_BOUNCE)
+#define BLK_TA_REMAP           (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_ABORT           (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
+#define BLK_TA_DRV_DATA        (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
+
+#define BLK_TN_PROCESS         (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
+#define BLK_TN_TIMESTAMP       (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
+#define BLK_TN_MESSAGE         (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
+
+#define BLK_IO_TRACE_MAGIC     0x65617400
+#define BLK_IO_TRACE_VERSION   0x07
+
+/*
+ * The trace itself
+ */
+struct blk_io_trace {
+       __u32 magic;            /* MAGIC << 8 | version */
+       __u32 sequence;         /* event number */
+       __u64 time;             /* in microseconds */
+       __u64 sector;           /* disk offset */
+       __u32 bytes;            /* transfer length */
+       __u32 action;           /* what happened */
+       __u32 pid;              /* who did it */
+       __u32 device;           /* device number */
+       __u32 cpu;              /* on what cpu did it happen */
+       __u16 error;            /* completion error */
+       __u16 pdu_len;          /* length of data after this trace */
+};
+
+/*
+ * The remap event
+ */
+struct blk_io_trace_remap {
+       __be32 device_from;
+       __be32 device_to;
+       __be64 sector_from;
+};
+
+enum {
+       Blktrace_setup = 1,
+       Blktrace_running,
+       Blktrace_stopped,
+};
+
+#define BLKTRACE_BDEV_SIZE     32
+
+/*
+ * User setup structure passed with BLKTRACESTART
+ */
+struct blk_user_trace_setup {
+       char name[BLKTRACE_BDEV_SIZE];  /* output */
+       __u16 act_mask;                 /* input */
+       __u32 buf_size;                 /* input */
+       __u32 buf_nr;                   /* input */
+       __u64 start_lba;
+       __u64 end_lba;
+       __u32 pid;
+};
+
+#endif /* BLKTRACE_H */
diff --git a/lib/libdss-include/linux/bpf.h b/lib/libdss-include/linux/bpf.h
new file mode 100644 (file)
index 0000000..2e2524d
--- /dev/null
@@ -0,0 +1,301 @@
+/* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ */
+#ifndef __LINUX_BPF_H__
+#define __LINUX_BPF_H__
+
+#include <linux/types.h>
+#include <linux/bpf_common.h>
+
+/* Extended instruction set based on top of classic BPF */
+
+/* instruction classes */
+#define BPF_ALU64      0x07    /* alu mode in double word width */
+
+/* ld/ldx fields */
+#define BPF_DW         0x18    /* double word */
+#define BPF_XADD       0xc0    /* exclusive add */
+
+/* alu/jmp fields */
+#define BPF_MOV                0xb0    /* mov reg to reg */
+#define BPF_ARSH       0xc0    /* sign extending arithmetic shift right */
+
+/* change endianness of a register */
+#define BPF_END                0xd0    /* flags for endianness conversion: */
+#define BPF_TO_LE      0x00    /* convert to little-endian */
+#define BPF_TO_BE      0x08    /* convert to big-endian */
+#define BPF_FROM_LE    BPF_TO_LE
+#define BPF_FROM_BE    BPF_TO_BE
+
+#define BPF_JNE                0x50    /* jump != */
+#define BPF_JSGT       0x60    /* SGT is signed '>', GT in x86 */
+#define BPF_JSGE       0x70    /* SGE is signed '>=', GE in x86 */
+#define BPF_CALL       0x80    /* function call */
+#define BPF_EXIT       0x90    /* function return */
+
+/* Register numbers */
+enum {
+       BPF_REG_0 = 0,
+       BPF_REG_1,
+       BPF_REG_2,
+       BPF_REG_3,
+       BPF_REG_4,
+       BPF_REG_5,
+       BPF_REG_6,
+       BPF_REG_7,
+       BPF_REG_8,
+       BPF_REG_9,
+       BPF_REG_10,
+       __MAX_BPF_REG,
+};
+
+/* BPF has 10 general purpose 64-bit registers and stack frame. */
+#define MAX_BPF_REG    __MAX_BPF_REG
+
+struct bpf_insn {
+       __u8    code;           /* opcode */
+       __u8    dst_reg:4;      /* dest register */
+       __u8    src_reg:4;      /* source register */
+       __s16   off;            /* signed offset */
+       __s32   imm;            /* signed immediate constant */
+};
+
+/* BPF syscall commands, see bpf(2) man-page for details. */
+enum bpf_cmd {
+       BPF_MAP_CREATE,
+       BPF_MAP_LOOKUP_ELEM,
+       BPF_MAP_UPDATE_ELEM,
+       BPF_MAP_DELETE_ELEM,
+       BPF_MAP_GET_NEXT_KEY,
+       BPF_PROG_LOAD,
+       BPF_OBJ_PIN,
+       BPF_OBJ_GET,
+};
+
+enum bpf_map_type {
+       BPF_MAP_TYPE_UNSPEC,
+       BPF_MAP_TYPE_HASH,
+       BPF_MAP_TYPE_ARRAY,
+       BPF_MAP_TYPE_PROG_ARRAY,
+       BPF_MAP_TYPE_PERF_EVENT_ARRAY,
+};
+
+enum bpf_prog_type {
+       BPF_PROG_TYPE_UNSPEC,
+       BPF_PROG_TYPE_SOCKET_FILTER,
+       BPF_PROG_TYPE_KPROBE,
+       BPF_PROG_TYPE_SCHED_CLS,
+       BPF_PROG_TYPE_SCHED_ACT,
+};
+
+#define BPF_PSEUDO_MAP_FD      1
+
+/* flags for BPF_MAP_UPDATE_ELEM command */
+#define BPF_ANY                0 /* create new element or update existing */
+#define BPF_NOEXIST    1 /* create new element if it didn't exist */
+#define BPF_EXIST      2 /* update existing element */
+
+union bpf_attr {
+       struct { /* anonymous struct used by BPF_MAP_CREATE command */
+               __u32   map_type;       /* one of enum bpf_map_type */
+               __u32   key_size;       /* size of key in bytes */
+               __u32   value_size;     /* size of value in bytes */
+               __u32   max_entries;    /* max number of entries in a map */
+       };
+
+       struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
+               __u32           map_fd;
+               __aligned_u64   key;
+               union {
+                       __aligned_u64 value;
+                       __aligned_u64 next_key;
+               };
+               __u64           flags;
+       };
+
+       struct { /* anonymous struct used by BPF_PROG_LOAD command */
+               __u32           prog_type;      /* one of enum bpf_prog_type */
+               __u32           insn_cnt;
+               __aligned_u64   insns;
+               __aligned_u64   license;
+               __u32           log_level;      /* verbosity level of verifier */
+               __u32           log_size;       /* size of user buffer */
+               __aligned_u64   log_buf;        /* user supplied buffer */
+               __u32           kern_version;   /* checked when prog_type=kprobe */
+       };
+
+       struct { /* anonymous struct used by BPF_OBJ_* commands */
+               __aligned_u64   pathname;
+               __u32           bpf_fd;
+       };
+} __attribute__((aligned(8)));
+
+/* integer value in 'imm' field of BPF_CALL instruction selects which helper
+ * function eBPF program intends to call
+ */
+enum bpf_func_id {
+       BPF_FUNC_unspec,
+       BPF_FUNC_map_lookup_elem, /* void *map_lookup_elem(&map, &key) */
+       BPF_FUNC_map_update_elem, /* int map_update_elem(&map, &key, &value, flags) */
+       BPF_FUNC_map_delete_elem, /* int map_delete_elem(&map, &key) */
+       BPF_FUNC_probe_read,      /* int bpf_probe_read(void *dst, int size, void *src) */
+       BPF_FUNC_ktime_get_ns,    /* u64 bpf_ktime_get_ns(void) */
+       BPF_FUNC_trace_printk,    /* int bpf_trace_printk(const char *fmt, int fmt_size, ...) */
+       BPF_FUNC_get_prandom_u32, /* u32 prandom_u32(void) */
+       BPF_FUNC_get_smp_processor_id, /* u32 raw_smp_processor_id(void) */
+
+       /**
+        * skb_store_bytes(skb, offset, from, len, flags) - store bytes into packet
+        * @skb: pointer to skb
+        * @offset: offset within packet from skb->mac_header
+        * @from: pointer where to copy bytes from
+        * @len: number of bytes to store into packet
+        * @flags: bit 0 - if true, recompute skb->csum
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_skb_store_bytes,
+
+       /**
+        * l3_csum_replace(skb, offset, from, to, flags) - recompute IP checksum
+        * @skb: pointer to skb
+        * @offset: offset within packet where IP checksum is located
+        * @from: old value of header field
+        * @to: new value of header field
+        * @flags: bits 0-3 - size of header field
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_l3_csum_replace,
+
+       /**
+        * l4_csum_replace(skb, offset, from, to, flags) - recompute TCP/UDP checksum
+        * @skb: pointer to skb
+        * @offset: offset within packet where TCP/UDP checksum is located
+        * @from: old value of header field
+        * @to: new value of header field
+        * @flags: bits 0-3 - size of header field
+        *         bit 4 - is pseudo header
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_l4_csum_replace,
+
+       /**
+        * bpf_tail_call(ctx, prog_array_map, index) - jump into another BPF program
+        * @ctx: context pointer passed to next program
+        * @prog_array_map: pointer to map which type is BPF_MAP_TYPE_PROG_ARRAY
+        * @index: index inside array that selects specific program to run
+        * Return: 0 on success
+        */
+       BPF_FUNC_tail_call,
+
+       /**
+        * bpf_clone_redirect(skb, ifindex, flags) - redirect to another netdev
+        * @skb: pointer to skb
+        * @ifindex: ifindex of the net device
+        * @flags: bit 0 - if set, redirect to ingress instead of egress
+        *         other bits - reserved
+        * Return: 0 on success
+        */
+       BPF_FUNC_clone_redirect,
+
+       /**
+        * u64 bpf_get_current_pid_tgid(void)
+        * Return: current->tgid << 32 | current->pid
+        */
+       BPF_FUNC_get_current_pid_tgid,
+
+       /**
+        * u64 bpf_get_current_uid_gid(void)
+        * Return: current_gid << 32 | current_uid
+        */
+       BPF_FUNC_get_current_uid_gid,
+
+       /**
+        * bpf_get_current_comm(char *buf, int size_of_buf)
+        * stores current->comm into buf
+        * Return: 0 on success
+        */
+       BPF_FUNC_get_current_comm,
+
+       /**
+        * bpf_get_cgroup_classid(skb) - retrieve a proc's classid
+        * @skb: pointer to skb
+        * Return: classid if != 0
+        */
+       BPF_FUNC_get_cgroup_classid,
+       BPF_FUNC_skb_vlan_push, /* bpf_skb_vlan_push(skb, vlan_proto, vlan_tci) */
+       BPF_FUNC_skb_vlan_pop,  /* bpf_skb_vlan_pop(skb) */
+
+       /**
+        * bpf_skb_[gs]et_tunnel_key(skb, key, size, flags)
+        * retrieve or populate tunnel metadata
+        * @skb: pointer to skb
+        * @key: pointer to 'struct bpf_tunnel_key'
+        * @size: size of 'struct bpf_tunnel_key'
+        * @flags: room for future extensions
+        * Retrun: 0 on success
+        */
+       BPF_FUNC_skb_get_tunnel_key,
+       BPF_FUNC_skb_set_tunnel_key,
+       BPF_FUNC_perf_event_read,       /* u64 bpf_perf_event_read(&map, index) */
+       /**
+        * bpf_redirect(ifindex, flags) - redirect to another netdev
+        * @ifindex: ifindex of the net device
+        * @flags: bit 0 - if set, redirect to ingress instead of egress
+        *         other bits - reserved
+        * Return: TC_ACT_REDIRECT
+        */
+       BPF_FUNC_redirect,
+
+       /**
+        * bpf_get_route_realm(skb) - retrieve a dst's tclassid
+        * @skb: pointer to skb
+        * Return: realm if != 0
+        */
+       BPF_FUNC_get_route_realm,
+
+       /**
+        * bpf_perf_event_output(ctx, map, index, data, size) - output perf raw sample
+        * @ctx: struct pt_regs*
+        * @map: pointer to perf_event_array map
+        * @index: index of event in the map
+        * @data: data on stack to be output as raw data
+        * @size: size of data
+        * Return: 0 on success
+        */
+       BPF_FUNC_perf_event_output,
+       __BPF_FUNC_MAX_ID,
+};
+
+/* user accessible mirror of in-kernel sk_buff.
+ * new fields can only be added to the end of this structure
+ */
+struct __sk_buff {
+       __u32 len;
+       __u32 pkt_type;
+       __u32 mark;
+       __u32 queue_mapping;
+       __u32 protocol;
+       __u32 vlan_present;
+       __u32 vlan_tci;
+       __u32 vlan_proto;
+       __u32 priority;
+       __u32 ingress_ifindex;
+       __u32 ifindex;
+       __u32 tc_index;
+       __u32 cb[5];
+       __u32 hash;
+       __u32 tc_classid;
+};
+
+struct bpf_tunnel_key {
+       __u32 tunnel_id;
+       __u32 remote_ipv4;
+};
+
+#endif /* __LINUX_BPF_H__ */
diff --git a/lib/libdss-include/linux/bpf_common.h b/lib/libdss-include/linux/bpf_common.h
new file mode 100644 (file)
index 0000000..afe7433
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef __LINUX_BPF_COMMON_H__
+#define __LINUX_BPF_COMMON_H__
+
+/* Instruction classes */
+#define BPF_CLASS(code) ((code) & 0x07)
+#define                BPF_LD          0x00
+#define                BPF_LDX         0x01
+#define                BPF_ST          0x02
+#define                BPF_STX         0x03
+#define                BPF_ALU         0x04
+#define                BPF_JMP         0x05
+#define                BPF_RET         0x06
+#define                BPF_MISC        0x07
+
+/* ld/ldx fields */
+#define BPF_SIZE(code)  ((code) & 0x18)
+#define                BPF_W           0x00
+#define                BPF_H           0x08
+#define                BPF_B           0x10
+#define BPF_MODE(code)  ((code) & 0xe0)
+#define                BPF_IMM         0x00
+#define                BPF_ABS         0x20
+#define                BPF_IND         0x40
+#define                BPF_MEM         0x60
+#define                BPF_LEN         0x80
+#define                BPF_MSH         0xa0
+
+/* alu/jmp fields */
+#define BPF_OP(code)    ((code) & 0xf0)
+#define                BPF_ADD         0x00
+#define                BPF_SUB         0x10
+#define                BPF_MUL         0x20
+#define                BPF_DIV         0x30
+#define                BPF_OR          0x40
+#define                BPF_AND         0x50
+#define                BPF_LSH         0x60
+#define                BPF_RSH         0x70
+#define                BPF_NEG         0x80
+#define                BPF_MOD         0x90
+#define                BPF_XOR         0xa0
+
+#define                BPF_JA          0x00
+#define                BPF_JEQ         0x10
+#define                BPF_JGT         0x20
+#define                BPF_JGE         0x30
+#define                BPF_JSET        0x40
+#define BPF_SRC(code)   ((code) & 0x08)
+#define                BPF_K           0x00
+#define                BPF_X           0x08
+
+#ifndef BPF_MAXINSNS
+#define BPF_MAXINSNS 4096
+#endif
+
+#endif /* __LINUX_BPF_COMMON_H__ */
diff --git a/lib/libdss-include/linux/bpqether.h b/lib/libdss-include/linux/bpqether.h
new file mode 100644 (file)
index 0000000..a6c35e1
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef        __BPQETHER_H
+#define        __BPQETHER_H
+
+/*
+ *     Defines for the BPQETHER pseudo device driver
+ */
+
+#ifndef __LINUX_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
+
+#define SIOCSBPQETHOPT         (SIOCDEVPRIVATE+0)      /* reserved */
+#define SIOCSBPQETHADDR                (SIOCDEVPRIVATE+1)
+struct bpq_ethaddr {
+       unsigned char destination[ETH_ALEN];
+       unsigned char accept[ETH_ALEN];
+};
+
+/* 
+ * For SIOCSBPQETHOPT - this is compatible with PI2/PacketTwin card drivers,
+ * currently not implemented, though. If someone wants to hook a radio
+ * to his Ethernet card he may find this useful. ;-)
+ */
+
+#define SIOCGBPQETHPARAM       0x5000  /* get Level 1 parameters */
+#define SIOCSBPQETHPARAM       0x5001  /* set */
+
+struct bpq_req  {
+    int cmd;
+    int speed;                 /* unused */
+    int clockmode;             /* unused */
+    int txdelay;
+    unsigned char persist;     /* unused */
+    int slotime;               /* unused */
+    int squeldelay;
+    int dmachan;               /* unused */
+    int irq;                   /* unused */
+};
+
+#endif
diff --git a/lib/libdss-include/linux/bsg.h b/lib/libdss-include/linux/bsg.h
new file mode 100644 (file)
index 0000000..9d35c01
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef BSG_H
+#define BSG_H
+
+#include <linux/types.h>
+
+#define BSG_PROTOCOL_SCSI              0
+
+#define BSG_SUB_PROTOCOL_SCSI_CMD      0
+#define BSG_SUB_PROTOCOL_SCSI_TMF      1
+#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT        2
+
+/*
+ * For flag constants below:
+ * sg.h sg_io_hdr also has bits defined for it's flags member. These
+ * two flag values (0x10 and 0x20) have the same meaning in sg.h . For
+ * bsg the BSG_FLAG_Q_AT_HEAD flag is ignored since it is the deafult.
+ */
+#define BSG_FLAG_Q_AT_TAIL 0x10 /* default is Q_AT_HEAD */
+#define BSG_FLAG_Q_AT_HEAD 0x20
+
+struct sg_io_v4 {
+       __s32 guard;            /* [i] 'Q' to differentiate from v3 */
+       __u32 protocol;         /* [i] 0 -> SCSI , .... */
+       __u32 subprotocol;      /* [i] 0 -> SCSI command, 1 -> SCSI task
+                                  management function, .... */
+
+       __u32 request_len;      /* [i] in bytes */
+       __u64 request;          /* [i], [*i] {SCSI: cdb} */
+       __u64 request_tag;      /* [i] {SCSI: task tag (only if flagged)} */
+       __u32 request_attr;     /* [i] {SCSI: task attribute} */
+       __u32 request_priority; /* [i] {SCSI: task priority} */
+       __u32 request_extra;    /* [i] {spare, for padding} */
+       __u32 max_response_len; /* [i] in bytes */
+       __u64 response;         /* [i], [*o] {SCSI: (auto)sense data} */
+
+        /* "dout_": data out (to device); "din_": data in (from device) */
+       __u32 dout_iovec_count; /* [i] 0 -> "flat" dout transfer else
+                                  dout_xfer points to array of iovec */
+       __u32 dout_xfer_len;    /* [i] bytes to be transferred to device */
+       __u32 din_iovec_count;  /* [i] 0 -> "flat" din transfer */
+       __u32 din_xfer_len;     /* [i] bytes to be transferred from device */
+       __u64 dout_xferp;       /* [i], [*i] */
+       __u64 din_xferp;        /* [i], [*o] */
+
+       __u32 timeout;          /* [i] units: millisecond */
+       __u32 flags;            /* [i] bit mask */
+       __u64 usr_ptr;          /* [i->o] unused internally */
+       __u32 spare_in;         /* [i] */
+
+       __u32 driver_status;    /* [o] 0 -> ok */
+       __u32 transport_status; /* [o] 0 -> ok */
+       __u32 device_status;    /* [o] {SCSI: command completion status} */
+       __u32 retry_delay;      /* [o] {SCSI: status auxiliary information} */
+       __u32 info;             /* [o] additional information */
+       __u32 duration;         /* [o] time to complete, in milliseconds */
+       __u32 response_len;     /* [o] bytes of response actually written */
+       __s32 din_resid;        /* [o] din_xfer_len - actual_din_xfer_len */
+       __s32 dout_resid;       /* [o] dout_xfer_len - actual_dout_xfer_len */
+       __u64 generated_tag;    /* [o] {SCSI: transport generated task tag} */
+       __u32 spare_out;        /* [o] */
+
+       __u32 padding;
+};
+
+
+#endif /* BSG_H */
diff --git a/lib/libdss-include/linux/btrfs.h b/lib/libdss-include/linux/btrfs.h
new file mode 100644 (file)
index 0000000..02078f1
--- /dev/null
@@ -0,0 +1,663 @@
+/*
+ * Copyright (C) 2007 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License v2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 021110-1307, USA.
+ */
+
+#ifndef _LINUX_BTRFS_H
+#define _LINUX_BTRFS_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define BTRFS_IOCTL_MAGIC 0x94
+#define BTRFS_VOL_NAME_MAX 255
+
+/* this should be 4k */
+#define BTRFS_PATH_NAME_MAX 4087
+struct btrfs_ioctl_vol_args {
+       __s64 fd;
+       char name[BTRFS_PATH_NAME_MAX + 1];
+};
+
+#define BTRFS_DEVICE_PATH_NAME_MAX 1024
+
+#define BTRFS_SUBVOL_CREATE_ASYNC      (1ULL << 0)
+#define BTRFS_SUBVOL_RDONLY            (1ULL << 1)
+#define BTRFS_SUBVOL_QGROUP_INHERIT    (1ULL << 2)
+#define BTRFS_FSID_SIZE 16
+#define BTRFS_UUID_SIZE 16
+#define BTRFS_UUID_UNPARSED_SIZE       37
+
+#define BTRFS_QGROUP_INHERIT_SET_LIMITS        (1ULL << 0)
+
+struct btrfs_qgroup_limit {
+       __u64   flags;
+       __u64   max_rfer;
+       __u64   max_excl;
+       __u64   rsv_rfer;
+       __u64   rsv_excl;
+};
+
+struct btrfs_qgroup_inherit {
+       __u64   flags;
+       __u64   num_qgroups;
+       __u64   num_ref_copies;
+       __u64   num_excl_copies;
+       struct btrfs_qgroup_limit lim;
+       __u64   qgroups[0];
+};
+
+struct btrfs_ioctl_qgroup_limit_args {
+       __u64   qgroupid;
+       struct btrfs_qgroup_limit lim;
+};
+
+#define BTRFS_SUBVOL_NAME_MAX 4039
+struct btrfs_ioctl_vol_args_v2 {
+       __s64 fd;
+       __u64 transid;
+       __u64 flags;
+       union {
+               struct {
+                       __u64 size;
+                       struct btrfs_qgroup_inherit *qgroup_inherit;
+               };
+               __u64 unused[4];
+       };
+       char name[BTRFS_SUBVOL_NAME_MAX + 1];
+};
+
+/*
+ * structure to report errors and progress to userspace, either as a
+ * result of a finished scrub, a canceled scrub or a progress inquiry
+ */
+struct btrfs_scrub_progress {
+       __u64 data_extents_scrubbed;    /* # of data extents scrubbed */
+       __u64 tree_extents_scrubbed;    /* # of tree extents scrubbed */
+       __u64 data_bytes_scrubbed;      /* # of data bytes scrubbed */
+       __u64 tree_bytes_scrubbed;      /* # of tree bytes scrubbed */
+       __u64 read_errors;              /* # of read errors encountered (EIO) */
+       __u64 csum_errors;              /* # of failed csum checks */
+       __u64 verify_errors;            /* # of occurences, where the metadata
+                                        * of a tree block did not match the
+                                        * expected values, like generation or
+                                        * logical */
+       __u64 no_csum;                  /* # of 4k data block for which no csum
+                                        * is present, probably the result of
+                                        * data written with nodatasum */
+       __u64 csum_discards;            /* # of csum for which no data was found
+                                        * in the extent tree. */
+       __u64 super_errors;             /* # of bad super blocks encountered */
+       __u64 malloc_errors;            /* # of internal kmalloc errors. These
+                                        * will likely cause an incomplete
+                                        * scrub */
+       __u64 uncorrectable_errors;     /* # of errors where either no intact
+                                        * copy was found or the writeback
+                                        * failed */
+       __u64 corrected_errors;         /* # of errors corrected */
+       __u64 last_physical;            /* last physical address scrubbed. In
+                                        * case a scrub was aborted, this can
+                                        * be used to restart the scrub */
+       __u64 unverified_errors;        /* # of occurences where a read for a
+                                        * full (64k) bio failed, but the re-
+                                        * check succeeded for each 4k piece.
+                                        * Intermittent error. */
+};
+
+#define BTRFS_SCRUB_READONLY   1
+struct btrfs_ioctl_scrub_args {
+       __u64 devid;                            /* in */
+       __u64 start;                            /* in */
+       __u64 end;                              /* in */
+       __u64 flags;                            /* in */
+       struct btrfs_scrub_progress progress;   /* out */
+       /* pad to 1k */
+       __u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS   0
+#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID    1
+struct btrfs_ioctl_dev_replace_start_params {
+       __u64 srcdevid; /* in, if 0, use srcdev_name instead */
+       __u64 cont_reading_from_srcdev_mode;    /* in, see #define
+                                                * above */
+       __u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];       /* in */
+       __u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];       /* in */
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED    0
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED          1
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED         2
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED         3
+#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED                4
+struct btrfs_ioctl_dev_replace_status_params {
+       __u64 replace_state;    /* out, see #define above */
+       __u64 progress_1000;    /* out, 0 <= x <= 1000 */
+       __u64 time_started;     /* out, seconds since 1-Jan-1970 */
+       __u64 time_stopped;     /* out, seconds since 1-Jan-1970 */
+       __u64 num_write_errors; /* out */
+       __u64 num_uncorrectable_read_errors;    /* out */
+};
+
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_START                      0
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS                     1
+#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL                     2
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR                        0
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED             1
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED         2
+#define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS                3
+struct btrfs_ioctl_dev_replace_args {
+       __u64 cmd;      /* in */
+       __u64 result;   /* out */
+
+       union {
+               struct btrfs_ioctl_dev_replace_start_params start;
+               struct btrfs_ioctl_dev_replace_status_params status;
+       };      /* in/out */
+
+       __u64 spare[64];
+};
+
+struct btrfs_ioctl_dev_info_args {
+       __u64 devid;                            /* in/out */
+       __u8 uuid[BTRFS_UUID_SIZE];             /* in/out */
+       __u64 bytes_used;                       /* out */
+       __u64 total_bytes;                      /* out */
+       __u64 unused[379];                      /* pad to 4k */
+       __u8 path[BTRFS_DEVICE_PATH_NAME_MAX];  /* out */
+};
+
+struct btrfs_ioctl_fs_info_args {
+       __u64 max_id;                           /* out */
+       __u64 num_devices;                      /* out */
+       __u8 fsid[BTRFS_FSID_SIZE];             /* out */
+       __u32 nodesize;                         /* out */
+       __u32 sectorsize;                       /* out */
+       __u32 clone_alignment;                  /* out */
+       __u32 reserved32;
+       __u64 reserved[122];                    /* pad to 1k */
+};
+
+struct btrfs_ioctl_feature_flags {
+       __u64 compat_flags;
+       __u64 compat_ro_flags;
+       __u64 incompat_flags;
+};
+
+/* balance control ioctl modes */
+#define BTRFS_BALANCE_CTL_PAUSE                1
+#define BTRFS_BALANCE_CTL_CANCEL       2
+
+/*
+ * this is packed, because it should be exactly the same as its disk
+ * byte order counterpart (struct btrfs_disk_balance_args)
+ */
+struct btrfs_balance_args {
+       __u64 profiles;
+       union {
+               __le64 usage;
+               struct {
+                       __le32 usage_min;
+                       __le32 usage_max;
+               };
+       };
+       __u64 devid;
+       __u64 pstart;
+       __u64 pend;
+       __u64 vstart;
+       __u64 vend;
+
+       __u64 target;
+
+       __u64 flags;
+
+       /*
+        * BTRFS_BALANCE_ARGS_LIMIT with value 'limit'
+        * BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum
+        * and maximum
+        */
+       union {
+               __u64 limit;            /* limit number of processed chunks */
+               struct {
+                       __u32 limit_min;
+                       __u32 limit_max;
+               };
+       };
+
+       /*
+        * Process chunks that cross stripes_min..stripes_max devices,
+        * BTRFS_BALANCE_ARGS_STRIPES_RANGE
+        */
+       __le32 stripes_min;
+       __le32 stripes_max;
+
+       __u64 unused[6];
+} __attribute__ ((__packed__));
+
+/* report balance progress to userspace */
+struct btrfs_balance_progress {
+       __u64 expected;         /* estimated # of chunks that will be
+                                * relocated to fulfill the request */
+       __u64 considered;       /* # of chunks we have considered so far */
+       __u64 completed;        /* # of chunks relocated so far */
+};
+
+#define BTRFS_BALANCE_STATE_RUNNING    (1ULL << 0)
+#define BTRFS_BALANCE_STATE_PAUSE_REQ  (1ULL << 1)
+#define BTRFS_BALANCE_STATE_CANCEL_REQ (1ULL << 2)
+
+struct btrfs_ioctl_balance_args {
+       __u64 flags;                            /* in/out */
+       __u64 state;                            /* out */
+
+       struct btrfs_balance_args data;         /* in/out */
+       struct btrfs_balance_args meta;         /* in/out */
+       struct btrfs_balance_args sys;          /* in/out */
+
+       struct btrfs_balance_progress stat;     /* out */
+
+       __u64 unused[72];                       /* pad to 1k */
+};
+
+#define BTRFS_INO_LOOKUP_PATH_MAX 4080
+struct btrfs_ioctl_ino_lookup_args {
+       __u64 treeid;
+       __u64 objectid;
+       char name[BTRFS_INO_LOOKUP_PATH_MAX];
+};
+
+struct btrfs_ioctl_search_key {
+       /* which root are we searching.  0 is the tree of tree roots */
+       __u64 tree_id;
+
+       /* keys returned will be >= min and <= max */
+       __u64 min_objectid;
+       __u64 max_objectid;
+
+       /* keys returned will be >= min and <= max */
+       __u64 min_offset;
+       __u64 max_offset;
+
+       /* max and min transids to search for */
+       __u64 min_transid;
+       __u64 max_transid;
+
+       /* keys returned will be >= min and <= max */
+       __u32 min_type;
+       __u32 max_type;
+
+       /*
+        * how many items did userland ask for, and how many are we
+        * returning
+        */
+       __u32 nr_items;
+
+       /* align to 64 bits */
+       __u32 unused;
+
+       /* some extra for later */
+       __u64 unused1;
+       __u64 unused2;
+       __u64 unused3;
+       __u64 unused4;
+};
+
+struct btrfs_ioctl_search_header {
+       __u64 transid;
+       __u64 objectid;
+       __u64 offset;
+       __u32 type;
+       __u32 len;
+};
+
+#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
+/*
+ * the buf is an array of search headers where
+ * each header is followed by the actual item
+ * the type field is expanded to 32 bits for alignment
+ */
+struct btrfs_ioctl_search_args {
+       struct btrfs_ioctl_search_key key;
+       char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
+};
+
+struct btrfs_ioctl_search_args_v2 {
+       struct btrfs_ioctl_search_key key; /* in/out - search parameters */
+       __u64 buf_size;            /* in - size of buffer
+                                           * out - on EOVERFLOW: needed size
+                                           *       to store item */
+       __u64 buf[0];                       /* out - found items */
+};
+
+struct btrfs_ioctl_clone_range_args {
+  __s64 src_fd;
+  __u64 src_offset, src_length;
+  __u64 dest_offset;
+};
+
+/* flags for the defrag range ioctl */
+#define BTRFS_DEFRAG_RANGE_COMPRESS 1
+#define BTRFS_DEFRAG_RANGE_START_IO 2
+
+#define BTRFS_SAME_DATA_DIFFERS        1
+/* For extent-same ioctl */
+struct btrfs_ioctl_same_extent_info {
+       __s64 fd;               /* in - destination file */
+       __u64 logical_offset;   /* in - start of extent in destination */
+       __u64 bytes_deduped;    /* out - total # of bytes we were able
+                                * to dedupe from this file */
+       /* status of this dedupe operation:
+        * 0 if dedup succeeds
+        * < 0 for error
+        * == BTRFS_SAME_DATA_DIFFERS if data differs
+        */
+       __s32 status;           /* out - see above description */
+       __u32 reserved;
+};
+
+struct btrfs_ioctl_same_args {
+       __u64 logical_offset;   /* in - start of extent in source */
+       __u64 length;           /* in - length of extent */
+       __u16 dest_count;       /* in - total elements in info array */
+       __u16 reserved1;
+       __u32 reserved2;
+       struct btrfs_ioctl_same_extent_info info[0];
+};
+
+struct btrfs_ioctl_space_info {
+       __u64 flags;
+       __u64 total_bytes;
+       __u64 used_bytes;
+};
+
+struct btrfs_ioctl_space_args {
+       __u64 space_slots;
+       __u64 total_spaces;
+       struct btrfs_ioctl_space_info spaces[0];
+};
+
+struct btrfs_data_container {
+       __u32   bytes_left;     /* out -- bytes not needed to deliver output */
+       __u32   bytes_missing;  /* out -- additional bytes needed for result */
+       __u32   elem_cnt;       /* out */
+       __u32   elem_missed;    /* out */
+       __u64   val[0];         /* out */
+};
+
+struct btrfs_ioctl_ino_path_args {
+       __u64                           inum;           /* in */
+       __u64                           size;           /* in */
+       __u64                           reserved[4];
+       /* struct btrfs_data_container  *fspath;           out */
+       __u64                           fspath;         /* out */
+};
+
+struct btrfs_ioctl_logical_ino_args {
+       __u64                           logical;        /* in */
+       __u64                           size;           /* in */
+       __u64                           reserved[4];
+       /* struct btrfs_data_container  *inodes;        out   */
+       __u64                           inodes;
+};
+
+enum btrfs_dev_stat_values {
+       /* disk I/O failure stats */
+       BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
+       BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
+       BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
+
+       /* stats for indirect indications for I/O failures */
+       BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
+                                        * contents is illegal: this is an
+                                        * indication that the block was damaged
+                                        * during read or write, or written to
+                                        * wrong location or read from wrong
+                                        * location */
+       BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
+                                        * been written */
+
+       BTRFS_DEV_STAT_VALUES_MAX
+};
+
+/* Reset statistics after reading; needs SYS_ADMIN capability */
+#define        BTRFS_DEV_STATS_RESET           (1ULL << 0)
+
+struct btrfs_ioctl_get_dev_stats {
+       __u64 devid;                            /* in */
+       __u64 nr_items;                         /* in/out */
+       __u64 flags;                            /* in/out */
+
+       /* out values: */
+       __u64 values[BTRFS_DEV_STAT_VALUES_MAX];
+
+       __u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
+};
+
+#define BTRFS_QUOTA_CTL_ENABLE 1
+#define BTRFS_QUOTA_CTL_DISABLE        2
+#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED        3
+struct btrfs_ioctl_quota_ctl_args {
+       __u64 cmd;
+       __u64 status;
+};
+
+struct btrfs_ioctl_quota_rescan_args {
+       __u64   flags;
+       __u64   progress;
+       __u64   reserved[6];
+};
+
+struct btrfs_ioctl_qgroup_assign_args {
+       __u64 assign;
+       __u64 src;
+       __u64 dst;
+};
+
+struct btrfs_ioctl_qgroup_create_args {
+       __u64 create;
+       __u64 qgroupid;
+};
+struct btrfs_ioctl_timespec {
+       __u64 sec;
+       __u32 nsec;
+};
+
+struct btrfs_ioctl_received_subvol_args {
+       char    uuid[BTRFS_UUID_SIZE];  /* in */
+       __u64   stransid;               /* in */
+       __u64   rtransid;               /* out */
+       struct btrfs_ioctl_timespec stime; /* in */
+       struct btrfs_ioctl_timespec rtime; /* out */
+       __u64   flags;                  /* in */
+       __u64   reserved[16];           /* in */
+};
+
+/*
+ * Caller doesn't want file data in the send stream, even if the
+ * search of clone sources doesn't find an extent. UPDATE_EXTENT
+ * commands will be sent instead of WRITE commands.
+ */
+#define BTRFS_SEND_FLAG_NO_FILE_DATA           0x1
+
+/*
+ * Do not add the leading stream header. Used when multiple snapshots
+ * are sent back to back.
+ */
+#define BTRFS_SEND_FLAG_OMIT_STREAM_HEADER     0x2
+
+/*
+ * Omit the command at the end of the stream that indicated the end
+ * of the stream. This option is used when multiple snapshots are
+ * sent back to back.
+ */
+#define BTRFS_SEND_FLAG_OMIT_END_CMD           0x4
+
+#define BTRFS_SEND_FLAG_MASK \
+       (BTRFS_SEND_FLAG_NO_FILE_DATA | \
+        BTRFS_SEND_FLAG_OMIT_STREAM_HEADER | \
+        BTRFS_SEND_FLAG_OMIT_END_CMD)
+
+struct btrfs_ioctl_send_args {
+       __s64 send_fd;                  /* in */
+       __u64 clone_sources_count;      /* in */
+       __u64 *clone_sources;   /* in */
+       __u64 parent_root;              /* in */
+       __u64 flags;                    /* in */
+       __u64 reserved[4];              /* in */
+};
+
+/* Error codes as returned by the kernel */
+enum btrfs_err_code {
+       BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,
+       BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
+       BTRFS_ERROR_DEV_TGT_REPLACE,
+       BTRFS_ERROR_DEV_MISSING_NOT_FOUND,
+       BTRFS_ERROR_DEV_ONLY_WRITABLE,
+       BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS
+};
+/* An error code to error string mapping for the kernel
+*  error codes
+*/
+static __inline__ char *btrfs_err_str(enum btrfs_err_code err_code)
+{
+       switch (err_code) {
+               case BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET:
+                       return "unable to go below two devices on raid1";
+               case BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET:
+                       return "unable to go below four devices on raid10";
+               case BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET:
+                       return "unable to go below two devices on raid5";
+               case BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET:
+                       return "unable to go below three devices on raid6";
+               case BTRFS_ERROR_DEV_TGT_REPLACE:
+                       return "unable to remove the dev_replace target dev";
+               case BTRFS_ERROR_DEV_MISSING_NOT_FOUND:
+                       return "no missing devices found to remove";
+               case BTRFS_ERROR_DEV_ONLY_WRITABLE:
+                       return "unable to remove the only writeable device";
+               case BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS:
+                       return "add/delete/balance/replace/resize operation "\
+                               "in progress";
+               default:
+                       return NULL;
+       }
+}
+
+#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
+                                  struct btrfs_ioctl_vol_args)
+/* trans start and trans end are dangerous, and only for
+ * use by applications that know how to avoid the
+ * resulting deadlocks
+ */
+#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
+#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
+#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
+
+#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
+#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
+                                  struct btrfs_ioctl_vol_args)
+
+#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
+                                 struct btrfs_ioctl_clone_range_args)
+
+#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
+                                  struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
+                               struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
+                               struct btrfs_ioctl_defrag_range_args)
+#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
+                                  struct btrfs_ioctl_search_args)
+#define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
+                                          struct btrfs_ioctl_search_args_v2)
+#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
+                                  struct btrfs_ioctl_ino_lookup_args)
+#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, __u64)
+#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
+                                   struct btrfs_ioctl_space_args)
+#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
+#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
+#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
+                                  struct btrfs_ioctl_vol_args_v2)
+#define BTRFS_IOC_SUBVOL_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 24, \
+                                  struct btrfs_ioctl_vol_args_v2)
+#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
+#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
+#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
+                             struct btrfs_ioctl_scrub_args)
+#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
+#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
+                                      struct btrfs_ioctl_scrub_args)
+#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
+                                struct btrfs_ioctl_dev_info_args)
+#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
+                              struct btrfs_ioctl_fs_info_args)
+#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
+                                  struct btrfs_ioctl_balance_args)
+#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
+#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
+                                       struct btrfs_ioctl_balance_args)
+#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
+                                       struct btrfs_ioctl_ino_path_args)
+#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
+                                       struct btrfs_ioctl_ino_path_args)
+#define BTRFS_IOC_SET_RECEIVED_SUBVOL _IOWR(BTRFS_IOCTL_MAGIC, 37, \
+                               struct btrfs_ioctl_received_subvol_args)
+#define BTRFS_IOC_SEND _IOW(BTRFS_IOCTL_MAGIC, 38, struct btrfs_ioctl_send_args)
+#define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
+                                    struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
+                              struct btrfs_ioctl_quota_ctl_args)
+#define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
+                              struct btrfs_ioctl_qgroup_assign_args)
+#define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
+                              struct btrfs_ioctl_qgroup_create_args)
+#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
+                              struct btrfs_ioctl_qgroup_limit_args)
+#define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
+                              struct btrfs_ioctl_quota_rescan_args)
+#define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
+                              struct btrfs_ioctl_quota_rescan_args)
+#define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
+#define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
+                                  char[BTRFS_LABEL_SIZE])
+#define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \
+                                  char[BTRFS_LABEL_SIZE])
+#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
+                                     struct btrfs_ioctl_get_dev_stats)
+#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
+                                   struct btrfs_ioctl_dev_replace_args)
+#define BTRFS_IOC_FILE_EXTENT_SAME _IOWR(BTRFS_IOCTL_MAGIC, 54, \
+                                        struct btrfs_ioctl_same_args)
+#define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags)
+#define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags[2])
+#define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+                                  struct btrfs_ioctl_feature_flags[3])
+
+#endif /* _LINUX_BTRFS_H */
diff --git a/lib/libdss-include/linux/byteorder/big_endian.h b/lib/libdss-include/linux/byteorder/big_endian.h
new file mode 100644 (file)
index 0000000..a4ef98d
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef _LINUX_BYTEORDER_BIG_ENDIAN_H
+#define _LINUX_BYTEORDER_BIG_ENDIAN_H
+
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN 4321
+#endif
+#ifndef __BIG_ENDIAN_BITFIELD
+#define __BIG_ENDIAN_BITFIELD
+#endif
+
+#include <linux/types.h>
+#include <linux/swab.h>
+
+#define __constant_htonl(x) ((__be32)(__u32)(x))
+#define __constant_ntohl(x) ((__u32)(__be32)(x))
+#define __constant_htons(x) ((__be16)(__u16)(x))
+#define __constant_ntohs(x) ((__u16)(__be16)(x))
+#define __constant_cpu_to_le64(x) ((__le64)___constant_swab64((x)))
+#define __constant_le64_to_cpu(x) ___constant_swab64((__u64)(__le64)(x))
+#define __constant_cpu_to_le32(x) ((__le32)___constant_swab32((x)))
+#define __constant_le32_to_cpu(x) ___constant_swab32((__u32)(__le32)(x))
+#define __constant_cpu_to_le16(x) ((__le16)___constant_swab16((x)))
+#define __constant_le16_to_cpu(x) ___constant_swab16((__u16)(__le16)(x))
+#define __constant_cpu_to_be64(x) ((__be64)(__u64)(x))
+#define __constant_be64_to_cpu(x) ((__u64)(__be64)(x))
+#define __constant_cpu_to_be32(x) ((__be32)(__u32)(x))
+#define __constant_be32_to_cpu(x) ((__u32)(__be32)(x))
+#define __constant_cpu_to_be16(x) ((__be16)(__u16)(x))
+#define __constant_be16_to_cpu(x) ((__u16)(__be16)(x))
+#define __cpu_to_le64(x) ((__le64)__swab64((x)))
+#define __le64_to_cpu(x) __swab64((__u64)(__le64)(x))
+#define __cpu_to_le32(x) ((__le32)__swab32((x)))
+#define __le32_to_cpu(x) __swab32((__u32)(__le32)(x))
+#define __cpu_to_le16(x) ((__le16)__swab16((x)))
+#define __le16_to_cpu(x) __swab16((__u16)(__le16)(x))
+#define __cpu_to_be64(x) ((__be64)(__u64)(x))
+#define __be64_to_cpu(x) ((__u64)(__be64)(x))
+#define __cpu_to_be32(x) ((__be32)(__u32)(x))
+#define __be32_to_cpu(x) ((__u32)(__be32)(x))
+#define __cpu_to_be16(x) ((__be16)(__u16)(x))
+#define __be16_to_cpu(x) ((__u16)(__be16)(x))
+
+static __inline__ __le64 __cpu_to_le64p(const __u64 *p)
+{
+       return (__le64)__swab64p(p);
+}
+static __inline__ __u64 __le64_to_cpup(const __le64 *p)
+{
+       return __swab64p((__u64 *)p);
+}
+static __inline__ __le32 __cpu_to_le32p(const __u32 *p)
+{
+       return (__le32)__swab32p(p);
+}
+static __inline__ __u32 __le32_to_cpup(const __le32 *p)
+{
+       return __swab32p((__u32 *)p);
+}
+static __inline__ __le16 __cpu_to_le16p(const __u16 *p)
+{
+       return (__le16)__swab16p(p);
+}
+static __inline__ __u16 __le16_to_cpup(const __le16 *p)
+{
+       return __swab16p((__u16 *)p);
+}
+static __inline__ __be64 __cpu_to_be64p(const __u64 *p)
+{
+       return (__be64)*p;
+}
+static __inline__ __u64 __be64_to_cpup(const __be64 *p)
+{
+       return (__u64)*p;
+}
+static __inline__ __be32 __cpu_to_be32p(const __u32 *p)
+{
+       return (__be32)*p;
+}
+static __inline__ __u32 __be32_to_cpup(const __be32 *p)
+{
+       return (__u32)*p;
+}
+static __inline__ __be16 __cpu_to_be16p(const __u16 *p)
+{
+       return (__be16)*p;
+}
+static __inline__ __u16 __be16_to_cpup(const __be16 *p)
+{
+       return (__u16)*p;
+}
+#define __cpu_to_le64s(x) __swab64s((x))
+#define __le64_to_cpus(x) __swab64s((x))
+#define __cpu_to_le32s(x) __swab32s((x))
+#define __le32_to_cpus(x) __swab32s((x))
+#define __cpu_to_le16s(x) __swab16s((x))
+#define __le16_to_cpus(x) __swab16s((x))
+#define __cpu_to_be64s(x) do { (void)(x); } while (0)
+#define __be64_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be32s(x) do { (void)(x); } while (0)
+#define __be32_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be16s(x) do { (void)(x); } while (0)
+#define __be16_to_cpus(x) do { (void)(x); } while (0)
+
+
+#endif /* _LINUX_BYTEORDER_BIG_ENDIAN_H */
diff --git a/lib/libdss-include/linux/byteorder/little_endian.h b/lib/libdss-include/linux/byteorder/little_endian.h
new file mode 100644 (file)
index 0000000..74e8a15
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef _LINUX_BYTEORDER_LITTLE_ENDIAN_H
+#define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
+
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN 1234
+#endif
+#ifndef __LITTLE_ENDIAN_BITFIELD
+#define __LITTLE_ENDIAN_BITFIELD
+#endif
+
+#include <linux/types.h>
+#include <linux/swab.h>
+
+#define __constant_htonl(x) ((__be32)___constant_swab32((x)))
+#define __constant_ntohl(x) ___constant_swab32((__be32)(x))
+#define __constant_htons(x) ((__be16)___constant_swab16((x)))
+#define __constant_ntohs(x) ___constant_swab16((__be16)(x))
+#define __constant_cpu_to_le64(x) ((__le64)(__u64)(x))
+#define __constant_le64_to_cpu(x) ((__u64)(__le64)(x))
+#define __constant_cpu_to_le32(x) ((__le32)(__u32)(x))
+#define __constant_le32_to_cpu(x) ((__u32)(__le32)(x))
+#define __constant_cpu_to_le16(x) ((__le16)(__u16)(x))
+#define __constant_le16_to_cpu(x) ((__u16)(__le16)(x))
+#define __constant_cpu_to_be64(x) ((__be64)___constant_swab64((x)))
+#define __constant_be64_to_cpu(x) ___constant_swab64((__u64)(__be64)(x))
+#define __constant_cpu_to_be32(x) ((__be32)___constant_swab32((x)))
+#define __constant_be32_to_cpu(x) ___constant_swab32((__u32)(__be32)(x))
+#define __constant_cpu_to_be16(x) ((__be16)___constant_swab16((x)))
+#define __constant_be16_to_cpu(x) ___constant_swab16((__u16)(__be16)(x))
+#define __cpu_to_le64(x) ((__le64)(__u64)(x))
+#define __le64_to_cpu(x) ((__u64)(__le64)(x))
+#define __cpu_to_le32(x) ((__le32)(__u32)(x))
+#define __le32_to_cpu(x) ((__u32)(__le32)(x))
+#define __cpu_to_le16(x) ((__le16)(__u16)(x))
+#define __le16_to_cpu(x) ((__u16)(__le16)(x))
+#define __cpu_to_be64(x) ((__be64)__swab64((x)))
+#define __be64_to_cpu(x) __swab64((__u64)(__be64)(x))
+#define __cpu_to_be32(x) ((__be32)__swab32((x)))
+#define __be32_to_cpu(x) __swab32((__u32)(__be32)(x))
+#define __cpu_to_be16(x) ((__be16)__swab16((x)))
+#define __be16_to_cpu(x) __swab16((__u16)(__be16)(x))
+
+static __inline__ __le64 __cpu_to_le64p(const __u64 *p)
+{
+       return (__le64)*p;
+}
+static __inline__ __u64 __le64_to_cpup(const __le64 *p)
+{
+       return (__u64)*p;
+}
+static __inline__ __le32 __cpu_to_le32p(const __u32 *p)
+{
+       return (__le32)*p;
+}
+static __inline__ __u32 __le32_to_cpup(const __le32 *p)
+{
+       return (__u32)*p;
+}
+static __inline__ __le16 __cpu_to_le16p(const __u16 *p)
+{
+       return (__le16)*p;
+}
+static __inline__ __u16 __le16_to_cpup(const __le16 *p)
+{
+       return (__u16)*p;
+}
+static __inline__ __be64 __cpu_to_be64p(const __u64 *p)
+{
+       return (__be64)__swab64p(p);
+}
+static __inline__ __u64 __be64_to_cpup(const __be64 *p)
+{
+       return __swab64p((__u64 *)p);
+}
+static __inline__ __be32 __cpu_to_be32p(const __u32 *p)
+{
+       return (__be32)__swab32p(p);
+}
+static __inline__ __u32 __be32_to_cpup(const __be32 *p)
+{
+       return __swab32p((__u32 *)p);
+}
+static __inline__ __be16 __cpu_to_be16p(const __u16 *p)
+{
+       return (__be16)__swab16p(p);
+}
+static __inline__ __u16 __be16_to_cpup(const __be16 *p)
+{
+       return __swab16p((__u16 *)p);
+}
+#define __cpu_to_le64s(x) do { (void)(x); } while (0)
+#define __le64_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_le32s(x) do { (void)(x); } while (0)
+#define __le32_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_le16s(x) do { (void)(x); } while (0)
+#define __le16_to_cpus(x) do { (void)(x); } while (0)
+#define __cpu_to_be64s(x) __swab64s((x))
+#define __be64_to_cpus(x) __swab64s((x))
+#define __cpu_to_be32s(x) __swab32s((x))
+#define __be32_to_cpus(x) __swab32s((x))
+#define __cpu_to_be16s(x) __swab16s((x))
+#define __be16_to_cpus(x) __swab16s((x))
+
+
+#endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */
diff --git a/lib/libdss-include/linux/caif/caif_socket.h b/lib/libdss-include/linux/caif/caif_socket.h
new file mode 100644 (file)
index 0000000..586e9f9
--- /dev/null
@@ -0,0 +1,194 @@
+/* linux/caif_socket.h
+ * CAIF Definitions for CAIF socket and network layer
+ * Copyright (C) ST-Ericsson AB 2010
+ * Author:      Sjur Brendeland
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#ifndef _LINUX_CAIF_SOCKET_H
+#define _LINUX_CAIF_SOCKET_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/**
+ * enum caif_link_selector -    Physical Link Selection.
+ * @CAIF_LINK_HIGH_BANDW:      Physical interface for high-bandwidth
+ *                             traffic.
+ * @CAIF_LINK_LOW_LATENCY:     Physical interface for low-latency
+ *                             traffic.
+ *
+ * CAIF Link Layers can register their link properties.
+ * This enum is used for choosing between CAIF Link Layers when
+ * setting up CAIF Channels when multiple CAIF Link Layers exists.
+ */
+enum caif_link_selector {
+       CAIF_LINK_HIGH_BANDW,
+       CAIF_LINK_LOW_LATENCY
+};
+
+/**
+ * enum caif_channel_priority - CAIF channel priorities.
+ *
+ * @CAIF_PRIO_MIN:     Min priority for a channel.
+ * @CAIF_PRIO_LOW:     Low-priority channel.
+ * @CAIF_PRIO_NORMAL:  Normal/default priority level.
+ * @CAIF_PRIO_HIGH:    High priority level
+ * @CAIF_PRIO_MAX:     Max priority for channel
+ *
+ * Priority can be set on CAIF Channels in order to
+ * prioritize between traffic on different CAIF Channels.
+ * These priority levels are recommended, but the priority value
+ * is not restricted to the values defined in this enum, any value
+ * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used.
+ */
+enum caif_channel_priority {
+       CAIF_PRIO_MIN    = 0x01,
+       CAIF_PRIO_LOW    = 0x04,
+       CAIF_PRIO_NORMAL = 0x0f,
+       CAIF_PRIO_HIGH   = 0x14,
+       CAIF_PRIO_MAX    = 0x1F
+};
+
+/**
+ * enum caif_protocol_type  -  CAIF Channel type.
+ * @CAIFPROTO_AT:              Classic AT channel.
+ * @CAIFPROTO_DATAGRAM:        Datagram channel.
+ * @CAIFPROTO_DATAGRAM_LOOP:   Datagram loopback channel, used for testing.
+ * @CAIFPROTO_UTIL:            Utility (Psock) channel.
+ * @CAIFPROTO_RFM:             Remote File Manager
+ * @CAIFPROTO_DEBUG:           Debug link
+ *
+ * This enum defines the CAIF Channel type to be used. This defines
+ * the service to connect to on the modem.
+ */
+enum caif_protocol_type {
+       CAIFPROTO_AT,
+       CAIFPROTO_DATAGRAM,
+       CAIFPROTO_DATAGRAM_LOOP,
+       CAIFPROTO_UTIL,
+       CAIFPROTO_RFM,
+       CAIFPROTO_DEBUG,
+       _CAIFPROTO_MAX
+};
+#define        CAIFPROTO_MAX _CAIFPROTO_MAX
+
+/**
+ * enum caif_at_type - AT Service Endpoint
+ * @CAIF_ATTYPE_PLAIN:      Connects to a plain vanilla AT channel.
+ */
+enum caif_at_type {
+       CAIF_ATTYPE_PLAIN = 2
+};
+ /**
+ * enum caif_debug_type - Content selection for debug connection
+ * @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain
+ *                             both trace and interactive debug.
+ * @CAIF_DEBUG_TRACE:          Connection contains trace only.
+ * @CAIF_DEBUG_INTERACTIVE:    Connection to interactive debug.
+ */
+enum caif_debug_type {
+       CAIF_DEBUG_TRACE_INTERACTIVE = 0,
+       CAIF_DEBUG_TRACE,
+       CAIF_DEBUG_INTERACTIVE,
+};
+
+/**
+ * enum caif_debug_service - Debug Service Endpoint
+ * @CAIF_RADIO_DEBUG_SERVICE:  Debug service on the Radio sub-system
+ * @CAIF_APP_DEBUG_SERVICE:    Debug for the applications sub-system
+ */
+enum caif_debug_service {
+       CAIF_RADIO_DEBUG_SERVICE = 1,
+       CAIF_APP_DEBUG_SERVICE
+};
+
+/**
+ * struct sockaddr_caif - the sockaddr structure for CAIF sockets.
+ * @family:                 Address family number, must be AF_CAIF.
+ * @u:                      Union of address data 'switched' by family.
+ * :
+ * @u.at:                    Applies when family = CAIFPROTO_AT.
+ *
+ * @u.at.type:               Type of AT link to set up (enum caif_at_type).
+ *
+ * @u.util:                  Applies when family = CAIFPROTO_UTIL
+ *
+ * @u.util.service:          Utility service name.
+ *
+ * @u.dgm:                   Applies when family = CAIFPROTO_DATAGRAM
+ *
+ * @u.dgm.connection_id:     Datagram connection id.
+ *
+ * @u.dgm.nsapi:             NSAPI of the PDP-Context.
+ *
+ * @u.rfm:                   Applies when family = CAIFPROTO_RFM
+ *
+ * @u.rfm.connection_id:     Connection ID for RFM.
+ *
+ * @u.rfm.volume:            Volume to mount.
+ *
+ * @u.dbg:                   Applies when family = CAIFPROTO_DEBUG.
+ *
+ * @u.dbg.type:                             Type of debug connection to set up
+ *                           (caif_debug_type).
+ *
+ * @u.dbg.service:           Service sub-system to connect (caif_debug_service
+ * Description:
+ * This structure holds the connect parameters used for setting up a
+ * CAIF Channel. It defines the service to connect to on the modem.
+ */
+struct sockaddr_caif {
+       __kernel_sa_family_t  family;
+       union {
+               struct {
+                       __u8  type;             /* type: enum caif_at_type */
+               } at;                           /* CAIFPROTO_AT */
+               struct {
+                       char      service[16];
+               } util;                         /* CAIFPROTO_UTIL */
+               union {
+                       __u32 connection_id;
+                       __u8  nsapi;
+               } dgm;                          /* CAIFPROTO_DATAGRAM(_LOOP)*/
+               struct {
+                       __u32 connection_id;
+                       char      volume[16];
+               } rfm;                          /* CAIFPROTO_RFM */
+               struct {
+                       __u8  type;             /* type:enum caif_debug_type */
+                       __u8  service;          /* service:caif_debug_service */
+               } dbg;                          /* CAIFPROTO_DEBUG */
+       } u;
+};
+
+/**
+ * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt.
+ *
+ * @CAIFSO_LINK_SELECT:                Selector used if multiple CAIF Link layers are
+ *                             available. Either a high bandwidth
+ *                             link can be selected (CAIF_LINK_HIGH_BANDW) or
+ *                             or a low latency link (CAIF_LINK_LOW_LATENCY).
+ *                              This option is of type __u32.
+ *                             Alternatively SO_BINDTODEVICE can be used.
+ *
+ * @CAIFSO_REQ_PARAM:          Used to set the request parameters for a
+ *                             utility channel. (maximum 256 bytes). This
+ *                             option must be set before connecting.
+ *
+ * @CAIFSO_RSP_PARAM:          Gets the response parameters for a utility
+ *                             channel. (maximum 256 bytes). This option
+ *                             is valid after a successful connect.
+ *
+ *
+ * This enum defines the CAIF Socket options to be used on a socket
+ * of type PF_CAIF.
+ *
+ */
+enum caif_socket_opts {
+       CAIFSO_LINK_SELECT      = 127,
+       CAIFSO_REQ_PARAM        = 128,
+       CAIFSO_RSP_PARAM        = 129,
+};
+
+#endif /* _LINUX_CAIF_SOCKET_H */
diff --git a/lib/libdss-include/linux/caif/if_caif.h b/lib/libdss-include/linux/caif/if_caif.h
new file mode 100644 (file)
index 0000000..7618aab
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) ST-Ericsson AB 2010
+ * Author:     Sjur Brendeland
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#ifndef IF_CAIF_H_
+#define IF_CAIF_H_
+#include <linux/sockios.h>
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/**
+ * enum ifla_caif - CAIF NetlinkRT parameters.
+ * @IFLA_CAIF_IPV4_CONNID:  Connection ID for IPv4 PDP Context.
+ *                         The type of attribute is NLA_U32.
+ * @IFLA_CAIF_IPV6_CONNID:  Connection ID for IPv6 PDP Context.
+ *                         The type of attribute is NLA_U32.
+ * @IFLA_CAIF_LOOPBACK:            If different from zero, device is doing loopback
+ *                         The type of attribute is NLA_U8.
+ *
+ * When using RT Netlink to create, destroy or configure a CAIF IP interface,
+ * enum ifla_caif is used to specify the configuration attributes.
+ */
+enum ifla_caif {
+       __IFLA_CAIF_UNSPEC,
+       IFLA_CAIF_IPV4_CONNID,
+       IFLA_CAIF_IPV6_CONNID,
+       IFLA_CAIF_LOOPBACK,
+       __IFLA_CAIF_MAX
+};
+#define        IFLA_CAIF_MAX (__IFLA_CAIF_MAX-1)
+
+#endif /*IF_CAIF_H_*/
diff --git a/lib/libdss-include/linux/can.h b/lib/libdss-include/linux/can.h
new file mode 100644 (file)
index 0000000..4af39b0
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * linux/can.h
+ *
+ * Definitions for CAN network layer (socket addr / CAN frame / CAN filter)
+ *
+ * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ *          Urs Thuermann   <urs.thuermann@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_H
+#define _CAN_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* controller area network (CAN) kernel definitions */
+
+/* special address description flags for the CAN_ID */
+#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
+#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
+#define CAN_ERR_FLAG 0x20000000U /* error message frame */
+
+/* valid bits in CAN ID for frame formats */
+#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
+#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
+#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */
+
+/*
+ * Controller Area Network Identifier structure
+ *
+ * bit 0-28    : CAN identifier (11/29 bit)
+ * bit 29      : error message frame flag (0 = data frame, 1 = error message)
+ * bit 30      : remote transmission request flag (1 = rtr frame)
+ * bit 31      : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
+ */
+typedef __u32 canid_t;
+
+#define CAN_SFF_ID_BITS                11
+#define CAN_EFF_ID_BITS                29
+
+/*
+ * Controller Area Network Error Message Frame Mask structure
+ *
+ * bit 0-28    : error class mask (see include/linux/can/error.h)
+ * bit 29-31   : set to zero
+ */
+typedef __u32 can_err_mask_t;
+
+/* CAN payload length and DLC definitions according to ISO 11898-1 */
+#define CAN_MAX_DLC 8
+#define CAN_MAX_DLEN 8
+
+/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
+#define CANFD_MAX_DLC 15
+#define CANFD_MAX_DLEN 64
+
+/**
+ * struct can_frame - basic CAN frame structure
+ * @can_id:  CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
+ * @can_dlc: frame payload length in byte (0 .. 8) aka data length code
+ *           N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
+ *           mapping of the 'data length code' to the real payload length
+ * @__pad:   padding
+ * @__res0:  reserved / padding
+ * @__res1:  reserved / padding
+ * @data:    CAN frame payload (up to 8 byte)
+ */
+struct can_frame {
+       canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
+       __u8    can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
+       __u8    __pad;   /* padding */
+       __u8    __res0;  /* reserved / padding */
+       __u8    __res1;  /* reserved / padding */
+       __u8    data[CAN_MAX_DLEN] __attribute__((aligned(8)));
+};
+
+/*
+ * defined bits for canfd_frame.flags
+ *
+ * The use of struct canfd_frame implies the Extended Data Length (EDL) bit to
+ * be set in the CAN frame bitstream on the wire. The EDL bit switch turns
+ * the CAN controllers bitstream processor into the CAN FD mode which creates
+ * two new options within the CAN FD frame specification:
+ *
+ * Bit Rate Switch - to indicate a second bitrate is/was used for the payload
+ * Error State Indicator - represents the error state of the transmitting node
+ *
+ * As the CANFD_ESI bit is internally generated by the transmitting CAN
+ * controller only the CANFD_BRS bit is relevant for real CAN controllers when
+ * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make
+ * sense for virtual CAN interfaces to test applications with echoed frames.
+ */
+#define CANFD_BRS 0x01 /* bit rate switch (second bitrate for payload data) */
+#define CANFD_ESI 0x02 /* error state indicator of the transmitting node */
+
+/**
+ * struct canfd_frame - CAN flexible data rate frame structure
+ * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
+ * @len:    frame payload length in byte (0 .. CANFD_MAX_DLEN)
+ * @flags:  additional flags for CAN FD
+ * @__res0: reserved / padding
+ * @__res1: reserved / padding
+ * @data:   CAN FD frame payload (up to CANFD_MAX_DLEN byte)
+ */
+struct canfd_frame {
+       canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
+       __u8    len;     /* frame payload length in byte */
+       __u8    flags;   /* additional flags for CAN FD */
+       __u8    __res0;  /* reserved / padding */
+       __u8    __res1;  /* reserved / padding */
+       __u8    data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
+};
+
+#define CAN_MTU                (sizeof(struct can_frame))
+#define CANFD_MTU      (sizeof(struct canfd_frame))
+
+/* particular protocols of the protocol family PF_CAN */
+#define CAN_RAW                1 /* RAW sockets */
+#define CAN_BCM                2 /* Broadcast Manager */
+#define CAN_TP16       3 /* VAG Transport Protocol v1.6 */
+#define CAN_TP20       4 /* VAG Transport Protocol v2.0 */
+#define CAN_MCNET      5 /* Bosch MCNet */
+#define CAN_ISOTP      6 /* ISO 15765-2 Transport Protocol */
+#define CAN_NPROTO     7
+
+#define SOL_CAN_BASE 100
+
+/**
+ * struct sockaddr_can - the sockaddr structure for CAN sockets
+ * @can_family:  address family number AF_CAN.
+ * @can_ifindex: CAN network interface index.
+ * @can_addr:    protocol specific address information
+ */
+struct sockaddr_can {
+       __kernel_sa_family_t can_family;
+       int         can_ifindex;
+       union {
+               /* transport protocol class address information (e.g. ISOTP) */
+               struct { canid_t rx_id, tx_id; } tp;
+
+               /* reserved for future CAN protocols address information */
+       } can_addr;
+};
+
+/**
+ * struct can_filter - CAN ID based filter in can_register().
+ * @can_id:   relevant bits of CAN ID which are not masked out.
+ * @can_mask: CAN mask (see description)
+ *
+ * Description:
+ * A filter matches, when
+ *
+ *          <received_can_id> & mask == can_id & mask
+ *
+ * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
+ * filter for error message frames (CAN_ERR_FLAG bit set in mask).
+ */
+struct can_filter {
+       canid_t can_id;
+       canid_t can_mask;
+};
+
+#define CAN_INV_FILTER 0x20000000U /* to be set in can_filter.can_id */
+
+#endif /* !_UAPI_CAN_H */
diff --git a/lib/libdss-include/linux/can/bcm.h b/lib/libdss-include/linux/can/bcm.h
new file mode 100644 (file)
index 0000000..9cc0d04
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * linux/can/bcm.h
+ *
+ * Definitions for CAN Broadcast Manager (BCM)
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_BCM_H
+#define _CAN_BCM_H
+
+#include <linux/types.h>
+#include <linux/can.h>
+
+struct bcm_timeval {
+       long tv_sec;
+       long tv_usec;
+};
+
+/**
+ * struct bcm_msg_head - head of messages to/from the broadcast manager
+ * @opcode:    opcode, see enum below.
+ * @flags:     special flags, see below.
+ * @count:     number of frames to send before changing interval.
+ * @ival1:     interval for the first @count frames.
+ * @ival2:     interval for the following frames.
+ * @can_id:    CAN ID of frames to be sent or received.
+ * @nframes:   number of frames appended to the message head.
+ * @frames:    array of CAN frames.
+ */
+struct bcm_msg_head {
+       __u32 opcode;
+       __u32 flags;
+       __u32 count;
+       struct bcm_timeval ival1, ival2;
+       canid_t can_id;
+       __u32 nframes;
+       struct can_frame frames[0];
+};
+
+enum {
+       TX_SETUP = 1,   /* create (cyclic) transmission task */
+       TX_DELETE,      /* remove (cyclic) transmission task */
+       TX_READ,        /* read properties of (cyclic) transmission task */
+       TX_SEND,        /* send one CAN frame */
+       RX_SETUP,       /* create RX content filter subscription */
+       RX_DELETE,      /* remove RX content filter subscription */
+       RX_READ,        /* read properties of RX content filter subscription */
+       TX_STATUS,      /* reply to TX_READ request */
+       TX_EXPIRED,     /* notification on performed transmissions (count=0) */
+       RX_STATUS,      /* reply to RX_READ request */
+       RX_TIMEOUT,     /* cyclic message is absent */
+       RX_CHANGED      /* updated CAN frame (detected content change) */
+};
+
+#define SETTIMER            0x0001
+#define STARTTIMER          0x0002
+#define TX_COUNTEVT         0x0004
+#define TX_ANNOUNCE         0x0008
+#define TX_CP_CAN_ID        0x0010
+#define RX_FILTER_ID        0x0020
+#define RX_CHECK_DLC        0x0040
+#define RX_NO_AUTOTIMER     0x0080
+#define RX_ANNOUNCE_RESUME  0x0100
+#define TX_RESET_MULTI_IDX  0x0200
+#define RX_RTR_FRAME        0x0400
+
+#endif /* !_UAPI_CAN_BCM_H */
diff --git a/lib/libdss-include/linux/can/error.h b/lib/libdss-include/linux/can/error.h
new file mode 100644 (file)
index 0000000..cfba785
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * linux/can/error.h
+ *
+ * Definitions of the CAN error messages to be filtered and passed to the user.
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_ERROR_H
+#define _CAN_ERROR_H
+
+#define CAN_ERR_DLC 8 /* dlc for error message frames */
+
+/* error class (mask) in can_id */
+#define CAN_ERR_TX_TIMEOUT   0x00000001U /* TX timeout (by netdevice driver) */
+#define CAN_ERR_LOSTARB      0x00000002U /* lost arbitration    / data[0]    */
+#define CAN_ERR_CRTL         0x00000004U /* controller problems / data[1]    */
+#define CAN_ERR_PROT         0x00000008U /* protocol violations / data[2..3] */
+#define CAN_ERR_TRX          0x00000010U /* transceiver status  / data[4]    */
+#define CAN_ERR_ACK          0x00000020U /* received no ACK on transmission */
+#define CAN_ERR_BUSOFF       0x00000040U /* bus off */
+#define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */
+#define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */
+
+/* arbitration lost in bit ... / data[0] */
+#define CAN_ERR_LOSTARB_UNSPEC   0x00 /* unspecified */
+                                     /* else bit number in bitstream */
+
+/* error status of CAN-controller / data[1] */
+#define CAN_ERR_CRTL_UNSPEC      0x00 /* unspecified */
+#define CAN_ERR_CRTL_RX_OVERFLOW 0x01 /* RX buffer overflow */
+#define CAN_ERR_CRTL_TX_OVERFLOW 0x02 /* TX buffer overflow */
+#define CAN_ERR_CRTL_RX_WARNING  0x04 /* reached warning level for RX errors */
+#define CAN_ERR_CRTL_TX_WARNING  0x08 /* reached warning level for TX errors */
+#define CAN_ERR_CRTL_RX_PASSIVE  0x10 /* reached error passive status RX */
+#define CAN_ERR_CRTL_TX_PASSIVE  0x20 /* reached error passive status TX */
+                                     /* (at least one error counter exceeds */
+                                     /* the protocol-defined level of 127)  */
+#define CAN_ERR_CRTL_ACTIVE      0x40 /* recovered to error active state */
+
+/* error in CAN protocol (type) / data[2] */
+#define CAN_ERR_PROT_UNSPEC      0x00 /* unspecified */
+#define CAN_ERR_PROT_BIT         0x01 /* single bit error */
+#define CAN_ERR_PROT_FORM        0x02 /* frame format error */
+#define CAN_ERR_PROT_STUFF       0x04 /* bit stuffing error */
+#define CAN_ERR_PROT_BIT0        0x08 /* unable to send dominant bit */
+#define CAN_ERR_PROT_BIT1        0x10 /* unable to send recessive bit */
+#define CAN_ERR_PROT_OVERLOAD    0x20 /* bus overload */
+#define CAN_ERR_PROT_ACTIVE      0x40 /* active error announcement */
+#define CAN_ERR_PROT_TX          0x80 /* error occurred on transmission */
+
+/* error in CAN protocol (location) / data[3] */
+#define CAN_ERR_PROT_LOC_UNSPEC  0x00 /* unspecified */
+#define CAN_ERR_PROT_LOC_SOF     0x03 /* start of frame */
+#define CAN_ERR_PROT_LOC_ID28_21 0x02 /* ID bits 28 - 21 (SFF: 10 - 3) */
+#define CAN_ERR_PROT_LOC_ID20_18 0x06 /* ID bits 20 - 18 (SFF: 2 - 0 )*/
+#define CAN_ERR_PROT_LOC_SRTR    0x04 /* substitute RTR (SFF: RTR) */
+#define CAN_ERR_PROT_LOC_IDE     0x05 /* identifier extension */
+#define CAN_ERR_PROT_LOC_ID17_13 0x07 /* ID bits 17-13 */
+#define CAN_ERR_PROT_LOC_ID12_05 0x0F /* ID bits 12-5 */
+#define CAN_ERR_PROT_LOC_ID04_00 0x0E /* ID bits 4-0 */
+#define CAN_ERR_PROT_LOC_RTR     0x0C /* RTR */
+#define CAN_ERR_PROT_LOC_RES1    0x0D /* reserved bit 1 */
+#define CAN_ERR_PROT_LOC_RES0    0x09 /* reserved bit 0 */
+#define CAN_ERR_PROT_LOC_DLC     0x0B /* data length code */
+#define CAN_ERR_PROT_LOC_DATA    0x0A /* data section */
+#define CAN_ERR_PROT_LOC_CRC_SEQ 0x08 /* CRC sequence */
+#define CAN_ERR_PROT_LOC_CRC_DEL 0x18 /* CRC delimiter */
+#define CAN_ERR_PROT_LOC_ACK     0x19 /* ACK slot */
+#define CAN_ERR_PROT_LOC_ACK_DEL 0x1B /* ACK delimiter */
+#define CAN_ERR_PROT_LOC_EOF     0x1A /* end of frame */
+#define CAN_ERR_PROT_LOC_INTERM  0x12 /* intermission */
+
+/* error status of CAN-transceiver / data[4] */
+/*                                             CANH CANL */
+#define CAN_ERR_TRX_UNSPEC             0x00 /* 0000 0000 */
+#define CAN_ERR_TRX_CANH_NO_WIRE       0x04 /* 0000 0100 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_BAT  0x05 /* 0000 0101 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_VCC  0x06 /* 0000 0110 */
+#define CAN_ERR_TRX_CANH_SHORT_TO_GND  0x07 /* 0000 0111 */
+#define CAN_ERR_TRX_CANL_NO_WIRE       0x40 /* 0100 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_BAT  0x50 /* 0101 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_VCC  0x60 /* 0110 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_GND  0x70 /* 0111 0000 */
+#define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80 /* 1000 0000 */
+
+/* controller specific additional information / data[5..7] */
+
+#endif /* _CAN_ERROR_H */
diff --git a/lib/libdss-include/linux/can/gw.h b/lib/libdss-include/linux/can/gw.h
new file mode 100644 (file)
index 0000000..8b080e3
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * linux/can/gw.h
+ *
+ * Definitions for CAN frame Gateway/Router/Bridge
+ *
+ * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ * Copyright (c) 2011 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_GW_H
+#define _CAN_GW_H
+
+#include <linux/types.h>
+#include <linux/can.h>
+
+struct rtcanmsg {
+       __u8  can_family;
+       __u8  gwtype;
+       __u16 flags;
+};
+
+/* CAN gateway types */
+enum {
+       CGW_TYPE_UNSPEC,
+       CGW_TYPE_CAN_CAN,       /* CAN->CAN routing */
+       __CGW_TYPE_MAX
+};
+
+#define CGW_TYPE_MAX (__CGW_TYPE_MAX - 1)
+
+/* CAN rtnetlink attribute definitions */
+enum {
+       CGW_UNSPEC,
+       CGW_MOD_AND,    /* CAN frame modification binary AND */
+       CGW_MOD_OR,     /* CAN frame modification binary OR */
+       CGW_MOD_XOR,    /* CAN frame modification binary XOR */
+       CGW_MOD_SET,    /* CAN frame modification set alternate values */
+       CGW_CS_XOR,     /* set data[] XOR checksum into data[index] */
+       CGW_CS_CRC8,    /* set data[] CRC8 checksum into data[index] */
+       CGW_HANDLED,    /* number of handled CAN frames */
+       CGW_DROPPED,    /* number of dropped CAN frames */
+       CGW_SRC_IF,     /* ifindex of source network interface */
+       CGW_DST_IF,     /* ifindex of destination network interface */
+       CGW_FILTER,     /* specify struct can_filter on source CAN device */
+       CGW_DELETED,    /* number of deleted CAN frames (see max_hops param) */
+       CGW_LIM_HOPS,   /* limit the number of hops of this specific rule */
+       CGW_MOD_UID,    /* user defined identifier for modification updates */
+       __CGW_MAX
+};
+
+#define CGW_MAX (__CGW_MAX - 1)
+
+#define CGW_FLAGS_CAN_ECHO 0x01
+#define CGW_FLAGS_CAN_SRC_TSTAMP 0x02
+#define CGW_FLAGS_CAN_IIF_TX_OK 0x04
+
+#define CGW_MOD_FUNCS 4 /* AND OR XOR SET */
+
+/* CAN frame elements that are affected by curr. 3 CAN frame modifications */
+#define CGW_MOD_ID     0x01
+#define CGW_MOD_DLC    0x02
+#define CGW_MOD_DATA   0x04
+
+#define CGW_FRAME_MODS 3 /* ID DLC DATA */
+
+#define MAX_MODFUNCTIONS (CGW_MOD_FUNCS * CGW_FRAME_MODS)
+
+struct cgw_frame_mod {
+       struct can_frame cf;
+       __u8 modtype;
+} __attribute__((packed));
+
+#define CGW_MODATTR_LEN sizeof(struct cgw_frame_mod)
+
+struct cgw_csum_xor {
+       __s8 from_idx;
+       __s8 to_idx;
+       __s8 result_idx;
+       __u8 init_xor_val;
+} __attribute__((packed));
+
+struct cgw_csum_crc8 {
+       __s8 from_idx;
+       __s8 to_idx;
+       __s8 result_idx;
+       __u8 init_crc_val;
+       __u8 final_xor_val;
+       __u8 crctab[256];
+       __u8 profile;
+       __u8 profile_data[20];
+} __attribute__((packed));
+
+/* length of checksum operation parameters. idx = index in CAN frame data[] */
+#define CGW_CS_XOR_LEN  sizeof(struct cgw_csum_xor)
+#define CGW_CS_CRC8_LEN  sizeof(struct cgw_csum_crc8)
+
+/* CRC8 profiles (compute CRC for additional data elements - see below) */
+enum {
+       CGW_CRC8PRF_UNSPEC,
+       CGW_CRC8PRF_1U8,        /* compute one additional u8 value */
+       CGW_CRC8PRF_16U8,       /* u8 value table indexed by data[1] & 0xF */
+       CGW_CRC8PRF_SFFID_XOR,  /* (can_id & 0xFF) ^ (can_id >> 8 & 0xFF) */
+       __CGW_CRC8PRF_MAX
+};
+
+#define CGW_CRC8PRF_MAX (__CGW_CRC8PRF_MAX - 1)
+
+/*
+ * CAN rtnetlink attribute contents in detail
+ *
+ * CGW_XXX_IF (length 4 bytes):
+ * Sets an interface index for source/destination network interfaces.
+ * For the CAN->CAN gwtype the indices of _two_ CAN interfaces are mandatory.
+ *
+ * CGW_FILTER (length 8 bytes):
+ * Sets a CAN receive filter for the gateway job specified by the
+ * struct can_filter described in include/linux/can.h
+ *
+ * CGW_MOD_(AND|OR|XOR|SET) (length 17 bytes):
+ * Specifies a modification that's done to a received CAN frame before it is
+ * send out to the destination interface.
+ *
+ * <struct can_frame> data used as operator
+ * <u8> affected CAN frame elements
+ *
+ * CGW_LIM_HOPS (length 1 byte):
+ * Limit the number of hops of this specific rule. Usually the received CAN
+ * frame can be processed as much as 'max_hops' times (which is given at module
+ * load time of the can-gw module). This value is used to reduce the number of
+ * possible hops for this gateway rule to a value smaller then max_hops.
+ *
+ * CGW_MOD_UID (length 4 bytes):
+ * Optional non-zero user defined routing job identifier to alter existing
+ * modification settings at runtime.
+ *
+ * CGW_CS_XOR (length 4 bytes):
+ * Set a simple XOR checksum starting with an initial value into
+ * data[result-idx] using data[start-idx] .. data[end-idx]
+ *
+ * The XOR checksum is calculated like this:
+ *
+ * xor = init_xor_val
+ *
+ * for (i = from_idx .. to_idx)
+ *      xor ^= can_frame.data[i]
+ *
+ * can_frame.data[ result_idx ] = xor
+ *
+ * CGW_CS_CRC8 (length 282 bytes):
+ * Set a CRC8 value into data[result-idx] using a given 256 byte CRC8 table,
+ * a given initial value and a defined input data[start-idx] .. data[end-idx].
+ * Finally the result value is XOR'ed with the final_xor_val.
+ *
+ * The CRC8 checksum is calculated like this:
+ *
+ * crc = init_crc_val
+ *
+ * for (i = from_idx .. to_idx)
+ *      crc = crctab[ crc ^ can_frame.data[i] ]
+ *
+ * can_frame.data[ result_idx ] = crc ^ final_xor_val
+ *
+ * The calculated CRC may contain additional source data elements that can be
+ * defined in the handling of 'checksum profiles' e.g. shown in AUTOSAR specs
+ * like http://www.autosar.org/download/R4.0/AUTOSAR_SWS_E2ELibrary.pdf
+ * E.g. the profile_data[] may contain additional u8 values (called DATA_IDs)
+ * that are used depending on counter values inside the CAN frame data[].
+ * So far only three profiles have been implemented for illustration.
+ *
+ * Remark: In general the attribute data is a linear buffer.
+ *         Beware of sending unpacked or aligned structs!
+ */
+
+#endif /* !_UAPI_CAN_GW_H */
diff --git a/lib/libdss-include/linux/can/netlink.h b/lib/libdss-include/linux/can/netlink.h
new file mode 100644 (file)
index 0000000..6d4ec2a
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * linux/can/netlink.h
+ *
+ * Definitions for the CAN netlink interface
+ *
+ * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the version 2 of the GNU General Public License
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _CAN_NETLINK_H
+#define _CAN_NETLINK_H
+
+#include <linux/types.h>
+
+/*
+ * CAN bit-timing parameters
+ *
+ * For further information, please read chapter "8 BIT TIMING
+ * REQUIREMENTS" of the "Bosch CAN Specification version 2.0"
+ * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf.
+ */
+struct can_bittiming {
+       __u32 bitrate;          /* Bit-rate in bits/second */
+       __u32 sample_point;     /* Sample point in one-tenth of a percent */
+       __u32 tq;               /* Time quanta (TQ) in nanoseconds */
+       __u32 prop_seg;         /* Propagation segment in TQs */
+       __u32 phase_seg1;       /* Phase buffer segment 1 in TQs */
+       __u32 phase_seg2;       /* Phase buffer segment 2 in TQs */
+       __u32 sjw;              /* Synchronisation jump width in TQs */
+       __u32 brp;              /* Bit-rate prescaler */
+};
+
+/*
+ * CAN harware-dependent bit-timing constant
+ *
+ * Used for calculating and checking bit-timing parameters
+ */
+struct can_bittiming_const {
+       char name[16];          /* Name of the CAN controller hardware */
+       __u32 tseg1_min;        /* Time segement 1 = prop_seg + phase_seg1 */
+       __u32 tseg1_max;
+       __u32 tseg2_min;        /* Time segement 2 = phase_seg2 */
+       __u32 tseg2_max;
+       __u32 sjw_max;          /* Synchronisation jump width */
+       __u32 brp_min;          /* Bit-rate prescaler */
+       __u32 brp_max;
+       __u32 brp_inc;
+};
+
+/*
+ * CAN clock parameters
+ */
+struct can_clock {
+       __u32 freq;             /* CAN system clock frequency in Hz */
+};
+
+/*
+ * CAN operational and error states
+ */
+enum can_state {
+       CAN_STATE_ERROR_ACTIVE = 0,     /* RX/TX error count < 96 */
+       CAN_STATE_ERROR_WARNING,        /* RX/TX error count < 128 */
+       CAN_STATE_ERROR_PASSIVE,        /* RX/TX error count < 256 */
+       CAN_STATE_BUS_OFF,              /* RX/TX error count >= 256 */
+       CAN_STATE_STOPPED,              /* Device is stopped */
+       CAN_STATE_SLEEPING,             /* Device is sleeping */
+       CAN_STATE_MAX
+};
+
+/*
+ * CAN bus error counters
+ */
+struct can_berr_counter {
+       __u16 txerr;
+       __u16 rxerr;
+};
+
+/*
+ * CAN controller mode
+ */
+struct can_ctrlmode {
+       __u32 mask;
+       __u32 flags;
+};
+
+#define CAN_CTRLMODE_LOOPBACK          0x01    /* Loopback mode */
+#define CAN_CTRLMODE_LISTENONLY                0x02    /* Listen-only mode */
+#define CAN_CTRLMODE_3_SAMPLES         0x04    /* Triple sampling mode */
+#define CAN_CTRLMODE_ONE_SHOT          0x08    /* One-Shot mode */
+#define CAN_CTRLMODE_BERR_REPORTING    0x10    /* Bus-error reporting */
+#define CAN_CTRLMODE_FD                        0x20    /* CAN FD mode */
+#define CAN_CTRLMODE_PRESUME_ACK       0x40    /* Ignore missing CAN ACKs */
+#define CAN_CTRLMODE_FD_NON_ISO                0x80    /* CAN FD in non-ISO mode */
+
+/*
+ * CAN device statistics
+ */
+struct can_device_stats {
+       __u32 bus_error;        /* Bus errors */
+       __u32 error_warning;    /* Changes to error warning state */
+       __u32 error_passive;    /* Changes to error passive state */
+       __u32 bus_off;          /* Changes to bus off state */
+       __u32 arbitration_lost; /* Arbitration lost errors */
+       __u32 restarts;         /* CAN controller re-starts */
+};
+
+/*
+ * CAN netlink interface
+ */
+enum {
+       IFLA_CAN_UNSPEC,
+       IFLA_CAN_BITTIMING,
+       IFLA_CAN_BITTIMING_CONST,
+       IFLA_CAN_CLOCK,
+       IFLA_CAN_STATE,
+       IFLA_CAN_CTRLMODE,
+       IFLA_CAN_RESTART_MS,
+       IFLA_CAN_RESTART,
+       IFLA_CAN_BERR_COUNTER,
+       IFLA_CAN_DATA_BITTIMING,
+       IFLA_CAN_DATA_BITTIMING_CONST,
+       __IFLA_CAN_MAX
+};
+
+#define IFLA_CAN_MAX   (__IFLA_CAN_MAX - 1)
+
+#endif /* !_UAPI_CAN_NETLINK_H */
diff --git a/lib/libdss-include/linux/can/raw.h b/lib/libdss-include/linux/can/raw.h
new file mode 100644 (file)
index 0000000..0e3bf9f
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * linux/can/raw.h
+ *
+ * Definitions for raw CAN sockets
+ *
+ * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
+ *          Urs Thuermann   <urs.thuermann@volkswagen.de>
+ * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Volkswagen nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#ifndef _CAN_RAW_H
+#define _CAN_RAW_H
+
+#include <linux/can.h>
+
+#define SOL_CAN_RAW (SOL_CAN_BASE + CAN_RAW)
+
+/* for socket options affecting the socket (not the global system) */
+
+enum {
+       CAN_RAW_FILTER = 1,     /* set 0 .. n can_filter(s)          */
+       CAN_RAW_ERR_FILTER,     /* set filter for error frames       */
+       CAN_RAW_LOOPBACK,       /* local loopback (default:on)       */
+       CAN_RAW_RECV_OWN_MSGS,  /* receive my own msgs (default:off) */
+       CAN_RAW_FD_FRAMES,      /* allow CAN FD frames (default:off) */
+       CAN_RAW_JOIN_FILTERS,   /* all filters must match to trigger */
+};
+
+#endif /* !_UAPI_CAN_RAW_H */
diff --git a/lib/libdss-include/linux/capability.h b/lib/libdss-include/linux/capability.h
new file mode 100644 (file)
index 0000000..b4020e9
--- /dev/null
@@ -0,0 +1,365 @@
+/*
+ * This is <linux/capability.h>
+ *
+ * Andrew G. Morgan <morgan@kernel.org>
+ * Alexander Kjeldaas <astor@guardian.no>
+ * with help from Aleph1, Roland Buresund and Andrew Main.
+ *
+ * See here for the libcap library ("POSIX draft" compliance):
+ *
+ * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/
+ */
+
+#ifndef _LINUX_CAPABILITY_H
+#define _LINUX_CAPABILITY_H
+
+#include <linux/types.h>
+
+struct task_struct;
+
+/* User-level do most of the mapping between kernel and user
+   capabilities based on the version tag given by the kernel. The
+   kernel might be somewhat backwards compatible, but don't bet on
+   it. */
+
+/* Note, cap_t, is defined by POSIX (draft) to be an "opaque" pointer to
+   a set of three capability sets.  The transposition of 3*the
+   following structure to such a composite is better handled in a user
+   library since the draft standard requires the use of malloc/free
+   etc.. */
+
+#define _LINUX_CAPABILITY_VERSION_1  0x19980330
+#define _LINUX_CAPABILITY_U32S_1     1
+
+#define _LINUX_CAPABILITY_VERSION_2  0x20071026  /* deprecated - use v3 */
+#define _LINUX_CAPABILITY_U32S_2     2
+
+#define _LINUX_CAPABILITY_VERSION_3  0x20080522
+#define _LINUX_CAPABILITY_U32S_3     2
+
+typedef struct __user_cap_header_struct {
+       __u32 version;
+       int pid;
+} *cap_user_header_t;
+
+typedef struct __user_cap_data_struct {
+        __u32 effective;
+        __u32 permitted;
+        __u32 inheritable;
+} *cap_user_data_t;
+
+
+#define VFS_CAP_REVISION_MASK  0xFF000000
+#define VFS_CAP_REVISION_SHIFT 24
+#define VFS_CAP_FLAGS_MASK     ~VFS_CAP_REVISION_MASK
+#define VFS_CAP_FLAGS_EFFECTIVE        0x000001
+
+#define VFS_CAP_REVISION_1     0x01000000
+#define VFS_CAP_U32_1           1
+#define XATTR_CAPS_SZ_1         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_1))
+
+#define VFS_CAP_REVISION_2     0x02000000
+#define VFS_CAP_U32_2           2
+#define XATTR_CAPS_SZ_2         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_2))
+
+#define XATTR_CAPS_SZ           XATTR_CAPS_SZ_2
+#define VFS_CAP_U32             VFS_CAP_U32_2
+#define VFS_CAP_REVISION       VFS_CAP_REVISION_2
+
+struct vfs_cap_data {
+       __le32 magic_etc;            /* Little endian */
+       struct {
+               __le32 permitted;    /* Little endian */
+               __le32 inheritable;  /* Little endian */
+       } data[VFS_CAP_U32];
+};
+
+
+/*
+ * Backwardly compatible definition for source code - trapped in a
+ * 32-bit world. If you find you need this, please consider using
+ * libcap to untrap yourself...
+ */
+#define _LINUX_CAPABILITY_VERSION  _LINUX_CAPABILITY_VERSION_1
+#define _LINUX_CAPABILITY_U32S     _LINUX_CAPABILITY_U32S_1
+
+
+
+/**
+ ** POSIX-draft defined capabilities.
+ **/
+
+/* In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this
+   overrides the restriction of changing file ownership and group
+   ownership. */
+
+#define CAP_CHOWN            0
+
+/* Override all DAC access, including ACL execute access if
+   [_POSIX_ACL] is defined. Excluding DAC access covered by
+   CAP_LINUX_IMMUTABLE. */
+
+#define CAP_DAC_OVERRIDE     1
+
+/* Overrides all DAC restrictions regarding read and search on files
+   and directories, including ACL restrictions if [_POSIX_ACL] is
+   defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE. */
+
+#define CAP_DAC_READ_SEARCH  2
+
+/* Overrides all restrictions about allowed operations on files, where
+   file owner ID must be equal to the user ID, except where CAP_FSETID
+   is applicable. It doesn't override MAC and DAC restrictions. */
+
+#define CAP_FOWNER           3
+
+/* Overrides the following restrictions that the effective user ID
+   shall match the file owner ID when setting the S_ISUID and S_ISGID
+   bits on that file; that the effective group ID (or one of the
+   supplementary group IDs) shall match the file owner ID when setting
+   the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are
+   cleared on successful return from chown(2) (not implemented). */
+
+#define CAP_FSETID           4
+
+/* Overrides the restriction that the real or effective user ID of a
+   process sending a signal must match the real or effective user ID
+   of the process receiving the signal. */
+
+#define CAP_KILL             5
+
+/* Allows setgid(2) manipulation */
+/* Allows setgroups(2) */
+/* Allows forged gids on socket credentials passing. */
+
+#define CAP_SETGID           6
+
+/* Allows set*uid(2) manipulation (including fsuid). */
+/* Allows forged pids on socket credentials passing. */
+
+#define CAP_SETUID           7
+
+
+/**
+ ** Linux-specific capabilities
+ **/
+
+/* Without VFS support for capabilities:
+ *   Transfer any capability in your permitted set to any pid,
+ *   remove any capability in your permitted set from any pid
+ * With VFS support for capabilities (neither of above, but)
+ *   Add any capability from current's capability bounding set
+ *       to the current process' inheritable set
+ *   Allow taking bits out of capability bounding set
+ *   Allow modification of the securebits for a process
+ */
+
+#define CAP_SETPCAP          8
+
+/* Allow modification of S_IMMUTABLE and S_APPEND file attributes */
+
+#define CAP_LINUX_IMMUTABLE  9
+
+/* Allows binding to TCP/UDP sockets below 1024 */
+/* Allows binding to ATM VCIs below 32 */
+
+#define CAP_NET_BIND_SERVICE 10
+
+/* Allow broadcasting, listen to multicast */
+
+#define CAP_NET_BROADCAST    11
+
+/* Allow interface configuration */
+/* Allow administration of IP firewall, masquerading and accounting */
+/* Allow setting debug option on sockets */
+/* Allow modification of routing tables */
+/* Allow setting arbitrary process / process group ownership on
+   sockets */
+/* Allow binding to any address for transparent proxying (also via NET_RAW) */
+/* Allow setting TOS (type of service) */
+/* Allow setting promiscuous mode */
+/* Allow clearing driver statistics */
+/* Allow multicasting */
+/* Allow read/write of device-specific registers */
+/* Allow activation of ATM control sockets */
+
+#define CAP_NET_ADMIN        12
+
+/* Allow use of RAW sockets */
+/* Allow use of PACKET sockets */
+/* Allow binding to any address for transparent proxying (also via NET_ADMIN) */
+
+#define CAP_NET_RAW          13
+
+/* Allow locking of shared memory segments */
+/* Allow mlock and mlockall (which doesn't really have anything to do
+   with IPC) */
+
+#define CAP_IPC_LOCK         14
+
+/* Override IPC ownership checks */
+
+#define CAP_IPC_OWNER        15
+
+/* Insert and remove kernel modules - modify kernel without limit */
+#define CAP_SYS_MODULE       16
+
+/* Allow ioperm/iopl access */
+/* Allow sending USB messages to any device via /proc/bus/usb */
+
+#define CAP_SYS_RAWIO        17
+
+/* Allow use of chroot() */
+
+#define CAP_SYS_CHROOT       18
+
+/* Allow ptrace() of any process */
+
+#define CAP_SYS_PTRACE       19
+
+/* Allow configuration of process accounting */
+
+#define CAP_SYS_PACCT        20
+
+/* Allow configuration of the secure attention key */
+/* Allow administration of the random device */
+/* Allow examination and configuration of disk quotas */
+/* Allow setting the domainname */
+/* Allow setting the hostname */
+/* Allow calling bdflush() */
+/* Allow mount() and umount(), setting up new smb connection */
+/* Allow some autofs root ioctls */
+/* Allow nfsservctl */
+/* Allow VM86_REQUEST_IRQ */
+/* Allow to read/write pci config on alpha */
+/* Allow irix_prctl on mips (setstacksize) */
+/* Allow flushing all cache on m68k (sys_cacheflush) */
+/* Allow removing semaphores */
+/* Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores
+   and shared memory */
+/* Allow locking/unlocking of shared memory segment */
+/* Allow turning swap on/off */
+/* Allow forged pids on socket credentials passing */
+/* Allow setting readahead and flushing buffers on block devices */
+/* Allow setting geometry in floppy driver */
+/* Allow turning DMA on/off in xd driver */
+/* Allow administration of md devices (mostly the above, but some
+   extra ioctls) */
+/* Allow tuning the ide driver */
+/* Allow access to the nvram device */
+/* Allow administration of apm_bios, serial and bttv (TV) device */
+/* Allow manufacturer commands in isdn CAPI support driver */
+/* Allow reading non-standardized portions of pci configuration space */
+/* Allow DDI debug ioctl on sbpcd driver */
+/* Allow setting up serial ports */
+/* Allow sending raw qic-117 commands */
+/* Allow enabling/disabling tagged queuing on SCSI controllers and sending
+   arbitrary SCSI commands */
+/* Allow setting encryption key on loopback filesystem */
+/* Allow setting zone reclaim policy */
+
+#define CAP_SYS_ADMIN        21
+
+/* Allow use of reboot() */
+
+#define CAP_SYS_BOOT         22
+
+/* Allow raising priority and setting priority on other (different
+   UID) processes */
+/* Allow use of FIFO and round-robin (realtime) scheduling on own
+   processes and setting the scheduling algorithm used by another
+   process. */
+/* Allow setting cpu affinity on other processes */
+
+#define CAP_SYS_NICE         23
+
+/* Override resource limits. Set resource limits. */
+/* Override quota limits. */
+/* Override reserved space on ext2 filesystem */
+/* Modify data journaling mode on ext3 filesystem (uses journaling
+   resources) */
+/* NOTE: ext2 honors fsuid when checking for resource overrides, so
+   you can override using fsuid too */
+/* Override size restrictions on IPC message queues */
+/* Allow more than 64hz interrupts from the real-time clock */
+/* Override max number of consoles on console allocation */
+/* Override max number of keymaps */
+
+#define CAP_SYS_RESOURCE     24
+
+/* Allow manipulation of system clock */
+/* Allow irix_stime on mips */
+/* Allow setting the real-time clock */
+
+#define CAP_SYS_TIME         25
+
+/* Allow configuration of tty devices */
+/* Allow vhangup() of tty */
+
+#define CAP_SYS_TTY_CONFIG   26
+
+/* Allow the privileged aspects of mknod() */
+
+#define CAP_MKNOD            27
+
+/* Allow taking of leases on files */
+
+#define CAP_LEASE            28
+
+/* Allow writing the audit log via unicast netlink socket */
+
+#define CAP_AUDIT_WRITE      29
+
+/* Allow configuration of audit via unicast netlink socket */
+
+#define CAP_AUDIT_CONTROL    30
+
+#define CAP_SETFCAP         31
+
+/* Override MAC access.
+   The base kernel enforces no MAC policy.
+   An LSM may enforce a MAC policy, and if it does and it chooses
+   to implement capability based overrides of that policy, this is
+   the capability it should use to do so. */
+
+#define CAP_MAC_OVERRIDE     32
+
+/* Allow MAC configuration or state changes.
+   The base kernel requires no MAC configuration.
+   An LSM may enforce a MAC policy, and if it does and it chooses
+   to implement capability based checks on modifications to that
+   policy or the data required to maintain it, this is the
+   capability it should use to do so. */
+
+#define CAP_MAC_ADMIN        33
+
+/* Allow configuring the kernel's syslog (printk behaviour) */
+
+#define CAP_SYSLOG           34
+
+/* Allow triggering something that will wake the system */
+
+#define CAP_WAKE_ALARM            35
+
+/* Allow preventing system suspends */
+
+#define CAP_BLOCK_SUSPEND    36
+
+/* Allow reading the audit log via multicast netlink socket */
+
+#define CAP_AUDIT_READ         37
+
+
+#define CAP_LAST_CAP         CAP_AUDIT_READ
+
+#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
+
+/*
+ * Bit location of each capability (used by user-space library and kernel)
+ */
+
+#define CAP_TO_INDEX(x)     ((x) >> 5)        /* 1 << 5 == bits in __u32 */
+#define CAP_TO_MASK(x)      (1 << ((x) & 31)) /* mask for indexed __u32 */
+
+
+#endif /* _LINUX_CAPABILITY_H */
diff --git a/lib/libdss-include/linux/capi.h b/lib/libdss-include/linux/capi.h
new file mode 100644 (file)
index 0000000..32717a9
--- /dev/null
@@ -0,0 +1,131 @@
+/* $Id: capi.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $
+ * 
+ * CAPI 2.0 Interface for Linux
+ * 
+ * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __LINUX_CAPI_H__
+#define __LINUX_CAPI_H__
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/kernelcapi.h>
+
+/*
+ * CAPI_REGISTER
+ */
+
+typedef struct capi_register_params {  /* CAPI_REGISTER */
+       __u32 level3cnt;        /* No. of simulatneous user data connections */
+       __u32 datablkcnt;       /* No. of buffered data messages */
+       __u32 datablklen;       /* Size of buffered data messages */
+} capi_register_params;
+
+#define        CAPI_REGISTER   _IOW('C',0x01,struct capi_register_params)
+
+/*
+ * CAPI_GET_MANUFACTURER
+ */
+
+#define CAPI_MANUFACTURER_LEN          64
+
+#define        CAPI_GET_MANUFACTURER   _IOWR('C',0x06,int)     /* broken: wanted size 64 (CAPI_MANUFACTURER_LEN) */
+
+/*
+ * CAPI_GET_VERSION
+ */
+
+typedef struct capi_version {
+       __u32 majorversion;
+       __u32 minorversion;
+       __u32 majormanuversion;
+       __u32 minormanuversion;
+} capi_version;
+
+#define CAPI_GET_VERSION       _IOWR('C',0x07,struct capi_version)
+
+/*
+ * CAPI_GET_SERIAL
+ */
+
+#define CAPI_SERIAL_LEN                8
+#define CAPI_GET_SERIAL                _IOWR('C',0x08,int)     /* broken: wanted size 8 (CAPI_SERIAL_LEN) */
+
+/*
+ * CAPI_GET_PROFILE
+ */
+
+typedef struct capi_profile {
+       __u16 ncontroller;      /* number of installed controller */
+       __u16 nbchannel;        /* number of B-Channels */
+       __u32 goptions;         /* global options */
+       __u32 support1;         /* B1 protocols support */
+       __u32 support2;         /* B2 protocols support */
+       __u32 support3;         /* B3 protocols support */
+       __u32 reserved[6];      /* reserved */
+       __u32 manu[5];          /* manufacturer specific information */
+} capi_profile;
+
+#define CAPI_GET_PROFILE       _IOWR('C',0x09,struct capi_profile)
+
+typedef struct capi_manufacturer_cmd {
+       unsigned long cmd;
+       void *data;
+} capi_manufacturer_cmd;
+
+/*
+ * CAPI_MANUFACTURER_CMD
+ */
+
+#define CAPI_MANUFACTURER_CMD  _IOWR('C',0x20, struct capi_manufacturer_cmd)
+
+/*
+ * CAPI_GET_ERRCODE
+ * capi errcode is set, * if read, write, or ioctl returns EIO,
+ * ioctl returns errcode directly, and in arg, if != 0
+ */
+
+#define CAPI_GET_ERRCODE       _IOR('C',0x21, __u16)
+
+/*
+ * CAPI_INSTALLED
+ */
+#define CAPI_INSTALLED         _IOR('C',0x22, __u16)
+
+
+/*
+ * member contr is input for
+ * CAPI_GET_MANUFACTURER, CAPI_GET_VERSION, CAPI_GET_SERIAL
+ * and CAPI_GET_PROFILE
+ */
+typedef union capi_ioctl_struct {
+       __u32 contr;
+       capi_register_params rparams;
+       __u8 manufacturer[CAPI_MANUFACTURER_LEN];
+       capi_version version;
+       __u8 serial[CAPI_SERIAL_LEN];
+       capi_profile profile;
+       capi_manufacturer_cmd cmd;
+       __u16 errcode;
+} capi_ioctl_struct;
+
+/*
+ * Middleware extension
+ */
+
+#define CAPIFLAG_HIGHJACKING   0x0001
+
+#define CAPI_GET_FLAGS         _IOR('C',0x23, unsigned)
+#define CAPI_SET_FLAGS         _IOR('C',0x24, unsigned)
+#define CAPI_CLR_FLAGS         _IOR('C',0x25, unsigned)
+
+#define CAPI_NCCI_OPENCOUNT    _IOR('C',0x26, unsigned)
+
+#define CAPI_NCCI_GETUNIT      _IOR('C',0x27, unsigned)
+
+#endif                         /* __LINUX_CAPI_H__ */
diff --git a/lib/libdss-include/linux/cciss_defs.h b/lib/libdss-include/linux/cciss_defs.h
new file mode 100644 (file)
index 0000000..316b670
--- /dev/null
@@ -0,0 +1,130 @@
+#ifndef CCISS_DEFS_H
+#define CCISS_DEFS_H
+
+#include <linux/types.h>
+
+/* general boundary definitions */
+#define SENSEINFOBYTES          32 /* note that this value may vary
+                                     between host implementations */
+
+/* Command Status value */
+#define CMD_SUCCESS             0x0000
+#define CMD_TARGET_STATUS       0x0001
+#define CMD_DATA_UNDERRUN       0x0002
+#define CMD_DATA_OVERRUN        0x0003
+#define CMD_INVALID             0x0004
+#define CMD_PROTOCOL_ERR        0x0005
+#define CMD_HARDWARE_ERR        0x0006
+#define CMD_CONNECTION_LOST     0x0007
+#define CMD_ABORTED             0x0008
+#define CMD_ABORT_FAILED        0x0009
+#define CMD_UNSOLICITED_ABORT   0x000A
+#define CMD_TIMEOUT             0x000B
+#define CMD_UNABORTABLE                0x000C
+
+/* transfer direction */
+#define XFER_NONE               0x00
+#define XFER_WRITE              0x01
+#define XFER_READ               0x02
+#define XFER_RSVD               0x03
+
+/* task attribute */
+#define ATTR_UNTAGGED           0x00
+#define ATTR_SIMPLE             0x04
+#define ATTR_HEADOFQUEUE        0x05
+#define ATTR_ORDERED            0x06
+#define ATTR_ACA                0x07
+
+/* cdb type */
+#define TYPE_CMD                               0x00
+#define TYPE_MSG                               0x01
+
+/* Type defs used in the following structs */
+#define BYTE __u8
+#define WORD __u16
+#define HWORD __u16
+#define DWORD __u32
+
+#define CISS_MAX_LUN   1024
+
+#define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */
+#define LEVEL3LUN   0
+
+#pragma pack(1)
+
+/* Command List Structure */
+typedef union _SCSI3Addr_struct {
+   struct {
+    BYTE Dev;
+    BYTE Bus:6;
+    BYTE Mode:2;        /* b00 */
+  } PeripDev;
+   struct {
+    BYTE DevLSB;
+    BYTE DevMSB:6;
+    BYTE Mode:2;        /* b01 */
+  } LogDev;
+   struct {
+    BYTE Dev:5;
+    BYTE Bus:3;
+    BYTE Targ:6;
+    BYTE Mode:2;        /* b10 */
+  } LogUnit;
+} SCSI3Addr_struct;
+
+typedef struct _PhysDevAddr_struct {
+  DWORD             TargetId:24;
+  DWORD             Bus:6;
+  DWORD             Mode:2;
+  SCSI3Addr_struct  Target[2]; /* 2 level target device addr */
+} PhysDevAddr_struct;
+
+typedef struct _LogDevAddr_struct {
+  DWORD            VolId:30;
+  DWORD            Mode:2;
+  BYTE             reserved[4];
+} LogDevAddr_struct;
+
+typedef union _LUNAddr_struct {
+  BYTE               LunAddrBytes[8];
+  SCSI3Addr_struct   SCSI3Lun[4];
+  PhysDevAddr_struct PhysDev;
+  LogDevAddr_struct  LogDev;
+} LUNAddr_struct;
+
+typedef struct _RequestBlock_struct {
+  BYTE   CDBLen;
+  struct {
+    BYTE Type:3;
+    BYTE Attribute:3;
+    BYTE Direction:2;
+  } Type;
+  HWORD  Timeout;
+  BYTE   CDB[16];
+} RequestBlock_struct;
+
+typedef union _MoreErrInfo_struct{
+  struct {
+    BYTE  Reserved[3];
+    BYTE  Type;
+    DWORD ErrorInfo;
+  } Common_Info;
+  struct{
+    BYTE  Reserved[2];
+    BYTE  offense_size; /* size of offending entry */
+    BYTE  offense_num;  /* byte # of offense 0-base */
+    DWORD offense_value;
+  } Invalid_Cmd;
+} MoreErrInfo_struct;
+typedef struct _ErrorInfo_struct {
+  BYTE               ScsiStatus;
+  BYTE               SenseLen;
+  HWORD              CommandStatus;
+  DWORD              ResidualCnt;
+  MoreErrInfo_struct MoreErrInfo;
+  BYTE               SenseInfo[SENSEINFOBYTES];
+} ErrorInfo_struct;
+
+#pragma pack()
+
+#endif /* CCISS_DEFS_H */
diff --git a/lib/libdss-include/linux/cciss_ioctl.h b/lib/libdss-include/linux/cciss_ioctl.h
new file mode 100644 (file)
index 0000000..d85fd2b
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef CCISS_IOCTLH
+#define CCISS_IOCTLH
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/cciss_defs.h>
+
+#define CCISS_IOC_MAGIC 'B'
+
+
+typedef struct _cciss_pci_info_struct
+{
+       unsigned char   bus;
+       unsigned char   dev_fn;
+       unsigned short  domain;
+       __u32           board_id;
+} cciss_pci_info_struct; 
+
+typedef struct _cciss_coalint_struct
+{
+       __u32  delay;
+       __u32  count;
+} cciss_coalint_struct;
+
+typedef char NodeName_type[16];
+
+typedef __u32 Heartbeat_type;
+
+#define CISS_PARSCSIU2         0x0001
+#define CISS_PARCSCIU3         0x0002
+#define CISS_FIBRE1G   0x0100
+#define CISS_FIBRE2G   0x0200
+typedef __u32 BusTypes_type;
+
+typedef char FirmwareVer_type[4];
+typedef __u32 DriverVer_type;
+
+#define MAX_KMALLOC_SIZE 128000
+
+typedef struct _IOCTL_Command_struct {
+  LUNAddr_struct          LUN_info;
+  RequestBlock_struct      Request;
+  ErrorInfo_struct        error_info; 
+  WORD                    buf_size;  /* size in bytes of the buf */
+  BYTE                    *buf;
+} IOCTL_Command_struct;
+
+typedef struct _BIG_IOCTL_Command_struct {
+  LUNAddr_struct          LUN_info;
+  RequestBlock_struct      Request;
+  ErrorInfo_struct        error_info;
+  DWORD                           malloc_size; /* < MAX_KMALLOC_SIZE in cciss.c */
+  DWORD                           buf_size;    /* size in bytes of the buf */
+                                       /* < malloc_size * MAXSGENTRIES */
+  BYTE                    *buf;
+} BIG_IOCTL_Command_struct;
+
+typedef struct _LogvolInfo_struct{
+       __u32   LunID;
+       int     num_opens;  /* number of opens on the logical volume */
+       int     num_parts;  /* number of partitions configured on logvol */
+} LogvolInfo_struct;
+
+#define CCISS_GETPCIINFO _IOR(CCISS_IOC_MAGIC, 1, cciss_pci_info_struct)
+
+#define CCISS_GETINTINFO _IOR(CCISS_IOC_MAGIC, 2, cciss_coalint_struct)
+#define CCISS_SETINTINFO _IOW(CCISS_IOC_MAGIC, 3, cciss_coalint_struct)
+
+#define CCISS_GETNODENAME _IOR(CCISS_IOC_MAGIC, 4, NodeName_type)
+#define CCISS_SETNODENAME _IOW(CCISS_IOC_MAGIC, 5, NodeName_type)
+
+#define CCISS_GETHEARTBEAT _IOR(CCISS_IOC_MAGIC, 6, Heartbeat_type)
+#define CCISS_GETBUSTYPES  _IOR(CCISS_IOC_MAGIC, 7, BusTypes_type)
+#define CCISS_GETFIRMVER   _IOR(CCISS_IOC_MAGIC, 8, FirmwareVer_type)
+#define CCISS_GETDRIVVER   _IOR(CCISS_IOC_MAGIC, 9, DriverVer_type)
+#define CCISS_REVALIDVOLS  _IO(CCISS_IOC_MAGIC, 10)
+#define CCISS_PASSTHRU    _IOWR(CCISS_IOC_MAGIC, 11, IOCTL_Command_struct)
+#define CCISS_DEREGDISK           _IO(CCISS_IOC_MAGIC, 12)
+
+/* no longer used... use REGNEWD instead */ 
+#define CCISS_REGNEWDISK  _IOW(CCISS_IOC_MAGIC, 13, int)
+
+#define CCISS_REGNEWD     _IO(CCISS_IOC_MAGIC, 14)
+#define CCISS_RESCANDISK   _IO(CCISS_IOC_MAGIC, 16)
+#define CCISS_GETLUNINFO   _IOR(CCISS_IOC_MAGIC, 17, LogvolInfo_struct)
+#define CCISS_BIG_PASSTHRU _IOWR(CCISS_IOC_MAGIC, 18, BIG_IOCTL_Command_struct)
+
+#endif /* CCISS_IOCTLH */
diff --git a/lib/libdss-include/linux/cdrom.h b/lib/libdss-include/linux/cdrom.h
new file mode 100644 (file)
index 0000000..db59b9b
--- /dev/null
@@ -0,0 +1,946 @@
+/*
+ * -- <linux/cdrom.h>
+ * General header file for linux CD-ROM drivers 
+ * Copyright (C) 1992         David Giller, rafetmad@oxy.edu
+ *               1994, 1995   Eberhard Mönkeberg, emoenke@gwdg.de
+ *               1996         David van Leeuwen, david@tm.tno.nl
+ *               1997, 1998   Erik Andersen, andersee@debian.org
+ *               1998-2002    Jens Axboe, axboe@suse.de
+ */
+#ifndef _LINUX_CDROM_H
+#define _LINUX_CDROM_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*******************************************************
+ * As of Linux 2.1.x, all Linux CD-ROM application programs will use this 
+ * (and only this) include file.  It is my hope to provide Linux with
+ * a uniform interface between software accessing CD-ROMs and the various 
+ * device drivers that actually talk to the drives.  There may still be
+ * 23 different kinds of strange CD-ROM drives, but at least there will 
+ * now be one, and only one, Linux CD-ROM interface.
+ *
+ * Additionally, as of Linux 2.1.x, all Linux application programs 
+ * should use the O_NONBLOCK option when opening a CD-ROM device 
+ * for subsequent ioctl commands.  This allows for neat system errors 
+ * like "No medium found" or "Wrong medium type" upon attempting to 
+ * mount or play an empty slot, mount an audio disc, or play a data disc.
+ * Generally, changing an application program to support O_NONBLOCK
+ * is as easy as the following:
+ *       -    drive = open("/dev/cdrom", O_RDONLY);
+ *       +    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
+ * It is worth the small change.
+ *
+ *  Patches for many common CD programs (provided by David A. van Leeuwen)
+ *  can be found at:  ftp://ftp.gwdg.de/pub/linux/cdrom/drivers/cm206/
+ * 
+ *******************************************************/
+
+/* When a driver supports a certain function, but the cdrom drive we are 
+ * using doesn't, we will return the error EDRIVE_CANT_DO_THIS.  We will 
+ * borrow the "Operation not supported" error from the network folks to 
+ * accomplish this.  Maybe someday we will get a more targeted error code, 
+ * but this will do for now... */
+#define EDRIVE_CANT_DO_THIS  EOPNOTSUPP
+
+/*******************************************************
+ * The CD-ROM IOCTL commands  -- these should be supported by 
+ * all the various cdrom drivers.  For the CD-ROM ioctls, we 
+ * will commandeer byte 0x53, or 'S'.
+ *******************************************************/
+#define CDROMPAUSE             0x5301 /* Pause Audio Operation */ 
+#define CDROMRESUME            0x5302 /* Resume paused Audio Operation */
+#define CDROMPLAYMSF           0x5303 /* Play Audio MSF (struct cdrom_msf) */
+#define CDROMPLAYTRKIND                0x5304 /* Play Audio Track/index 
+                                           (struct cdrom_ti) */
+#define CDROMREADTOCHDR                0x5305 /* Read TOC header 
+                                           (struct cdrom_tochdr) */
+#define CDROMREADTOCENTRY      0x5306 /* Read TOC entry 
+                                           (struct cdrom_tocentry) */
+#define CDROMSTOP              0x5307 /* Stop the cdrom drive */
+#define CDROMSTART             0x5308 /* Start the cdrom drive */
+#define CDROMEJECT             0x5309 /* Ejects the cdrom media */
+#define CDROMVOLCTRL           0x530a /* Control output volume 
+                                           (struct cdrom_volctrl) */
+#define CDROMSUBCHNL           0x530b /* Read subchannel data 
+                                           (struct cdrom_subchnl) */
+#define CDROMREADMODE2         0x530c /* Read CDROM mode 2 data (2336 Bytes) 
+                                           (struct cdrom_read) */
+#define CDROMREADMODE1         0x530d /* Read CDROM mode 1 data (2048 Bytes)
+                                           (struct cdrom_read) */
+#define CDROMREADAUDIO         0x530e /* (struct cdrom_read_audio) */
+#define CDROMEJECT_SW          0x530f /* enable(1)/disable(0) auto-ejecting */
+#define CDROMMULTISESSION      0x5310 /* Obtain the start-of-last-session 
+                                           address of multi session disks 
+                                           (struct cdrom_multisession) */
+#define CDROM_GET_MCN          0x5311 /* Obtain the "Universal Product Code" 
+                                           if available (struct cdrom_mcn) */
+#define CDROM_GET_UPC          CDROM_GET_MCN  /* This one is deprecated, 
+                                          but here anyway for compatibility */
+#define CDROMRESET             0x5312 /* hard-reset the drive */
+#define CDROMVOLREAD           0x5313 /* Get the drive's volume setting 
+                                          (struct cdrom_volctrl) */
+#define CDROMREADRAW           0x5314  /* read data in raw mode (2352 Bytes)
+                                           (struct cdrom_read) */
+/* 
+ * These ioctls are used only used in aztcd.c and optcd.c
+ */
+#define CDROMREADCOOKED                0x5315  /* read data in cooked mode */
+#define CDROMSEEK              0x5316  /* seek msf address */
+  
+/*
+ * This ioctl is only used by the scsi-cd driver.  
+   It is for playing audio in logical block addressing mode.
+ */
+#define CDROMPLAYBLK           0x5317  /* (struct cdrom_blk) */
+
+/* 
+ * These ioctls are only used in optcd.c
+ */
+#define CDROMREADALL           0x5318  /* read all 2646 bytes */
+
+/* 
+ * These ioctls are (now) only in ide-cd.c for controlling 
+ * drive spindown time.  They should be implemented in the
+ * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10,
+ * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE...
+ *  -Erik
+ */
+#define CDROMGETSPINDOWN        0x531d
+#define CDROMSETSPINDOWN        0x531e
+
+/* 
+ * These ioctls are implemented through the uniform CD-ROM driver
+ * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM
+ * drivers are eventually ported to the uniform CD-ROM driver interface.
+ */
+#define CDROMCLOSETRAY         0x5319  /* pendant of CDROMEJECT */
+#define CDROM_SET_OPTIONS      0x5320  /* Set behavior options */
+#define CDROM_CLEAR_OPTIONS    0x5321  /* Clear behavior options */
+#define CDROM_SELECT_SPEED     0x5322  /* Set the CD-ROM speed */
+#define CDROM_SELECT_DISC      0x5323  /* Select disc (for juke-boxes) */
+#define CDROM_MEDIA_CHANGED    0x5325  /* Check is media changed  */
+#define CDROM_DRIVE_STATUS     0x5326  /* Get tray position, etc. */
+#define CDROM_DISC_STATUS      0x5327  /* Get disc type, etc. */
+#define CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */
+#define CDROM_LOCKDOOR         0x5329  /* lock or unlock door */
+#define CDROM_DEBUG            0x5330  /* Turn debug messages on/off */
+#define CDROM_GET_CAPABILITY   0x5331  /* get capabilities */
+
+/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386.
+ * Future CDROM ioctls should be kept below 0x537F
+ */
+
+/* This ioctl is only used by sbpcd at the moment */
+#define CDROMAUDIOBUFSIZ        0x5382 /* set the audio buffer size */
+                                       /* conflict with SCSI_IOCTL_GET_IDLUN */
+
+/* DVD-ROM Specific ioctls */
+#define DVD_READ_STRUCT                0x5390  /* Read structure */
+#define DVD_WRITE_STRUCT       0x5391  /* Write structure */
+#define DVD_AUTH               0x5392  /* Authentication */
+
+#define CDROM_SEND_PACKET      0x5393  /* send a packet to the drive */
+#define CDROM_NEXT_WRITABLE    0x5394  /* get next writable block */
+#define CDROM_LAST_WRITTEN     0x5395  /* get last block written on disc */
+
+/*******************************************************
+ * CDROM IOCTL structures
+ *******************************************************/
+
+/* Address in MSF format */
+struct cdrom_msf0              
+{
+       __u8    minute;
+       __u8    second;
+       __u8    frame;
+};
+
+/* Address in either MSF or logical format */
+union cdrom_addr               
+{
+       struct cdrom_msf0       msf;
+       int                     lba;
+};
+
+/* This struct is used by the CDROMPLAYMSF ioctl */ 
+struct cdrom_msf 
+{
+       __u8    cdmsf_min0;     /* start minute */
+       __u8    cdmsf_sec0;     /* start second */
+       __u8    cdmsf_frame0;   /* start frame */
+       __u8    cdmsf_min1;     /* end minute */
+       __u8    cdmsf_sec1;     /* end second */
+       __u8    cdmsf_frame1;   /* end frame */
+};
+
+/* This struct is used by the CDROMPLAYTRKIND ioctl */
+struct cdrom_ti 
+{
+       __u8    cdti_trk0;      /* start track */
+       __u8    cdti_ind0;      /* start index */
+       __u8    cdti_trk1;      /* end track */
+       __u8    cdti_ind1;      /* end index */
+};
+
+/* This struct is used by the CDROMREADTOCHDR ioctl */
+struct cdrom_tochdr    
+{
+       __u8    cdth_trk0;      /* start track */
+       __u8    cdth_trk1;      /* end track */
+};
+
+/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */
+struct cdrom_volctrl
+{
+       __u8    channel0;
+       __u8    channel1;
+       __u8    channel2;
+       __u8    channel3;
+};
+
+/* This struct is used by the CDROMSUBCHNL ioctl */
+struct cdrom_subchnl 
+{
+       __u8    cdsc_format;
+       __u8    cdsc_audiostatus;
+       __u8    cdsc_adr:       4;
+       __u8    cdsc_ctrl:      4;
+       __u8    cdsc_trk;
+       __u8    cdsc_ind;
+       union cdrom_addr cdsc_absaddr;
+       union cdrom_addr cdsc_reladdr;
+};
+
+
+/* This struct is used by the CDROMREADTOCENTRY ioctl */
+struct cdrom_tocentry 
+{
+       __u8    cdte_track;
+       __u8    cdte_adr        :4;
+       __u8    cdte_ctrl       :4;
+       __u8    cdte_format;
+       union cdrom_addr cdte_addr;
+       __u8    cdte_datamode;
+};
+
+/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */
+struct cdrom_read      
+{
+       int     cdread_lba;
+       char    *cdread_bufaddr;
+       int     cdread_buflen;
+};
+
+/* This struct is used by the CDROMREADAUDIO ioctl */
+struct cdrom_read_audio
+{
+       union cdrom_addr addr; /* frame address */
+       __u8 addr_format;      /* CDROM_LBA or CDROM_MSF */
+       int nframes;           /* number of 2352-byte-frames to read at once */
+       __u8 *buf;      /* frame buffer (size: nframes*2352 bytes) */
+};
+
+/* This struct is used with the CDROMMULTISESSION ioctl */
+struct cdrom_multisession
+{
+       union cdrom_addr addr; /* frame address: start-of-last-session 
+                                  (not the new "frame 16"!).  Only valid
+                                  if the "xa_flag" is true. */
+       __u8 xa_flag;        /* 1: "is XA disk" */
+       __u8 addr_format;    /* CDROM_LBA or CDROM_MSF */
+};
+
+/* This struct is used with the CDROM_GET_MCN ioctl.  
+ * Very few audio discs actually have Universal Product Code information, 
+ * which should just be the Medium Catalog Number on the box.  Also note 
+ * that the way the codeis written on CD is _not_ uniform across all discs!
+ */  
+struct cdrom_mcn 
+{
+  __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
+};
+
+/* This is used by the CDROMPLAYBLK ioctl */
+struct cdrom_blk 
+{
+       unsigned from;
+       unsigned short len;
+};
+
+#define CDROM_PACKET_SIZE      12
+
+#define CGC_DATA_UNKNOWN       0
+#define CGC_DATA_WRITE         1
+#define CGC_DATA_READ          2
+#define CGC_DATA_NONE          3
+
+/* for CDROM_PACKET_COMMAND ioctl */
+struct cdrom_generic_command
+{
+       unsigned char           cmd[CDROM_PACKET_SIZE];
+       unsigned char           *buffer;
+       unsigned int            buflen;
+       int                     stat;
+       struct request_sense    *sense;
+       unsigned char           data_direction;
+       int                     quiet;
+       int                     timeout;
+       void                    *reserved[1];   /* unused, actually */
+};
+
+/*
+ * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336, 
+ * 2340, or 2352 bytes long.  
+
+*         Sector types of the standard CD-ROM data formats:
+ *
+ * format   sector type               user data size (bytes)
+ * -----------------------------------------------------------------------------
+ *   1     (Red Book)    CD-DA          2352    (CD_FRAMESIZE_RAW)
+ *   2     (Yellow Book) Mode1 Form1    2048    (CD_FRAMESIZE)
+ *   3     (Yellow Book) Mode1 Form2    2336    (CD_FRAMESIZE_RAW0)
+ *   4     (Green Book)  Mode2 Form1    2048    (CD_FRAMESIZE)
+ *   5     (Green Book)  Mode2 Form2    2328    (2324+4 spare bytes)
+ *
+ *
+ *       The layout of the standard CD-ROM data formats:
+ * -----------------------------------------------------------------------------
+ * - audio (red):                  | audio_sample_bytes |
+ *                                 |        2352        |
+ *
+ * - data (yellow, mode1):         | sync - head - data - EDC - zero - ECC |
+ *                                 |  12  -   4  - 2048 -  4  -   8  - 276 |
+ *
+ * - data (yellow, mode2):         | sync - head - data |
+ *                                 |  12  -   4  - 2336 |
+ *
+ * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC |
+ *                                 |  12  -   4  -  8  - 2048 -  4  - 276 |
+ *
+ * - XA data (green, mode2 form2): | sync - head - sub - data - Spare |
+ *                                 |  12  -   4  -  8  - 2324 -  4    |
+ *
+ */
+
+/* Some generally useful CD-ROM information -- mostly based on the above */
+#define CD_MINS              74 /* max. minutes per CD, not really a limit */
+#define CD_SECS              60 /* seconds per minute */
+#define CD_FRAMES            75 /* frames per second */
+#define CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */
+#define CD_MSF_OFFSET       150 /* MSF numbering offset of first frame */
+#define CD_CHUNK_SIZE        24 /* lowest-level "data bytes piece" */
+#define CD_NUM_OF_CHUNKS     98 /* chunks per frame */
+#define CD_FRAMESIZE_SUB     96 /* subchannel data "frame" size */
+#define CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */
+#define CD_SUBHEAD_SIZE       8 /* subheader bytes per raw XA data frame */
+#define CD_EDC_SIZE           4 /* bytes EDC per most raw data frame types */
+#define CD_ZERO_SIZE          8 /* bytes zero per yellow book mode 1 frame */
+#define CD_ECC_SIZE         276 /* bytes ECC per most raw data frame types */
+#define CD_FRAMESIZE       2048 /* bytes per frame, "cooked" mode */
+#define CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */
+#define CD_FRAMESIZE_RAWER 2646 /* The maximum possible returned bytes */ 
+/* most drives don't deliver everything: */
+#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/
+#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/
+
+#define CD_XA_HEAD        (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */
+#define CD_XA_TAIL        (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */
+#define CD_XA_SYNC_HEAD   (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */
+
+/* CD-ROM address types (cdrom_tocentry.cdte_format) */
+#define        CDROM_LBA 0x01 /* "logical block": first frame is #0 */
+#define        CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */
+
+/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */
+#define        CDROM_DATA_TRACK        0x04
+
+/* The leadout track is always 0xAA, regardless of # of tracks on disc */
+#define        CDROM_LEADOUT           0xAA
+
+/* audio states (from SCSI-2, but seen with other drives, too) */
+#define        CDROM_AUDIO_INVALID     0x00    /* audio status not supported */
+#define        CDROM_AUDIO_PLAY        0x11    /* audio play operation in progress */
+#define        CDROM_AUDIO_PAUSED      0x12    /* audio play operation paused */
+#define        CDROM_AUDIO_COMPLETED   0x13    /* audio play successfully completed */
+#define        CDROM_AUDIO_ERROR       0x14    /* audio play stopped due to error */
+#define        CDROM_AUDIO_NO_STATUS   0x15    /* no current audio status to return */
+
+/* capability flags used with the uniform CD-ROM driver */ 
+#define CDC_CLOSE_TRAY         0x1     /* caddy systems _can't_ close */
+#define CDC_OPEN_TRAY          0x2     /* but _can_ eject.  */
+#define CDC_LOCK               0x4     /* disable manual eject */
+#define CDC_SELECT_SPEED       0x8     /* programmable speed */
+#define CDC_SELECT_DISC                0x10    /* select disc from juke-box */
+#define CDC_MULTI_SESSION      0x20    /* read sessions>1 */
+#define CDC_MCN                        0x40    /* Medium Catalog Number */
+#define CDC_MEDIA_CHANGED      0x80    /* media changed */
+#define CDC_PLAY_AUDIO         0x100   /* audio functions */
+#define CDC_RESET               0x200   /* hard reset device */
+#define CDC_DRIVE_STATUS        0x800   /* driver implements drive status */
+#define CDC_GENERIC_PACKET     0x1000  /* driver implements generic packets */
+#define CDC_CD_R               0x2000  /* drive is a CD-R */
+#define CDC_CD_RW              0x4000  /* drive is a CD-RW */
+#define CDC_DVD                        0x8000  /* drive is a DVD */
+#define CDC_DVD_R              0x10000 /* drive can write DVD-R */
+#define CDC_DVD_RAM            0x20000 /* drive can write DVD-RAM */
+#define CDC_MO_DRIVE           0x40000 /* drive is an MO device */
+#define CDC_MRW                        0x80000 /* drive can read MRW */
+#define CDC_MRW_W              0x100000 /* drive can write MRW */
+#define CDC_RAM                        0x200000 /* ok to open for WRITE */
+
+/* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */
+#define CDS_NO_INFO            0       /* if not implemented */
+#define CDS_NO_DISC            1
+#define CDS_TRAY_OPEN          2
+#define CDS_DRIVE_NOT_READY    3
+#define CDS_DISC_OK            4
+
+/* return values for the CDROM_DISC_STATUS ioctl */
+/* can also return CDS_NO_[INFO|DISC], from above */
+#define CDS_AUDIO              100
+#define CDS_DATA_1             101
+#define CDS_DATA_2             102
+#define CDS_XA_2_1             103
+#define CDS_XA_2_2             104
+#define CDS_MIXED              105
+
+/* User-configurable behavior options for the uniform CD-ROM driver */
+#define CDO_AUTO_CLOSE         0x1     /* close tray on first open() */
+#define CDO_AUTO_EJECT         0x2     /* open tray on last release() */
+#define CDO_USE_FFLAGS         0x4     /* use O_NONBLOCK information on open */
+#define CDO_LOCK               0x8     /* lock tray on open files */
+#define CDO_CHECK_TYPE         0x10    /* check type on open for data */
+
+/* Special codes used when specifying changer slots. */
+#define CDSL_NONE              (INT_MAX-1)
+#define CDSL_CURRENT           INT_MAX
+
+/* For partition based multisession access. IDE can handle 64 partitions
+ * per drive - SCSI CD-ROM's use minors to differentiate between the
+ * various drives, so we can't do multisessions the same way there.
+ * Use the -o session=x option to mount on them.
+ */
+#define CD_PART_MAX            64
+#define CD_PART_MASK           (CD_PART_MAX - 1)
+
+/*********************************************************************
+ * Generic Packet commands, MMC commands, and such
+ *********************************************************************/
+
+ /* The generic packet command opcodes for CD/DVD Logical Units,
+ * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
+#define GPCMD_BLANK                        0xa1
+#define GPCMD_CLOSE_TRACK                  0x5b
+#define GPCMD_FLUSH_CACHE                  0x35
+#define GPCMD_FORMAT_UNIT                  0x04
+#define GPCMD_GET_CONFIGURATION                    0x46
+#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
+#define GPCMD_GET_PERFORMANCE              0xac
+#define GPCMD_INQUIRY                      0x12
+#define GPCMD_LOAD_UNLOAD                  0xa6
+#define GPCMD_MECHANISM_STATUS             0xbd
+#define GPCMD_MODE_SELECT_10               0x55
+#define GPCMD_MODE_SENSE_10                0x5a
+#define GPCMD_PAUSE_RESUME                 0x4b
+#define GPCMD_PLAY_AUDIO_10                0x45
+#define GPCMD_PLAY_AUDIO_MSF               0x47
+#define GPCMD_PLAY_AUDIO_TI                0x48
+#define GPCMD_PLAY_CD                      0xbc
+#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL  0x1e
+#define GPCMD_READ_10                      0x28
+#define GPCMD_READ_12                      0xa8
+#define GPCMD_READ_BUFFER                  0x3c
+#define GPCMD_READ_BUFFER_CAPACITY         0x5c
+#define GPCMD_READ_CDVD_CAPACITY           0x25
+#define GPCMD_READ_CD                      0xbe
+#define GPCMD_READ_CD_MSF                  0xb9
+#define GPCMD_READ_DISC_INFO               0x51
+#define GPCMD_READ_DVD_STRUCTURE           0xad
+#define GPCMD_READ_FORMAT_CAPACITIES       0x23
+#define GPCMD_READ_HEADER                  0x44
+#define GPCMD_READ_TRACK_RZONE_INFO        0x52
+#define GPCMD_READ_SUBCHANNEL              0x42
+#define GPCMD_READ_TOC_PMA_ATIP                    0x43
+#define GPCMD_REPAIR_RZONE_TRACK           0x58
+#define GPCMD_REPORT_KEY                   0xa4
+#define GPCMD_REQUEST_SENSE                0x03
+#define GPCMD_RESERVE_RZONE_TRACK          0x53
+#define GPCMD_SEND_CUE_SHEET               0x5d
+#define GPCMD_SCAN                         0xba
+#define GPCMD_SEEK                         0x2b
+#define GPCMD_SEND_DVD_STRUCTURE           0xbf
+#define GPCMD_SEND_EVENT                   0xa2
+#define GPCMD_SEND_KEY                     0xa3
+#define GPCMD_SEND_OPC                     0x54
+#define GPCMD_SET_READ_AHEAD               0xa7
+#define GPCMD_SET_STREAMING                0xb6
+#define GPCMD_START_STOP_UNIT              0x1b
+#define GPCMD_STOP_PLAY_SCAN               0x4e
+#define GPCMD_TEST_UNIT_READY              0x00
+#define GPCMD_VERIFY_10                            0x2f
+#define GPCMD_WRITE_10                     0x2a
+#define GPCMD_WRITE_12                     0xaa
+#define GPCMD_WRITE_AND_VERIFY_10          0x2e
+#define GPCMD_WRITE_BUFFER                 0x3b
+/* This is listed as optional in ATAPI 2.6, but is (curiously) 
+ * missing from Mt. Fuji, Table 57.  It _is_ mentioned in Mt. Fuji
+ * Table 377 as an MMC command for SCSi devices though...  Most ATAPI
+ * drives support it. */
+#define GPCMD_SET_SPEED                            0xbb
+/* This seems to be a SCSI specific CD-ROM opcode 
+ * to play data at track/index */
+#define GPCMD_PLAYAUDIO_TI                 0x48
+/*
+ * From MS Media Status Notification Support Specification. For
+ * older drives only.
+ */
+#define GPCMD_GET_MEDIA_STATUS             0xda
+
+/* Mode page codes for mode sense/set */
+#define GPMODE_VENDOR_PAGE             0x00
+#define GPMODE_R_W_ERROR_PAGE          0x01
+#define GPMODE_WRITE_PARMS_PAGE                0x05
+#define GPMODE_WCACHING_PAGE           0x08
+#define GPMODE_AUDIO_CTL_PAGE          0x0e
+#define GPMODE_POWER_PAGE              0x1a
+#define GPMODE_FAULT_FAIL_PAGE         0x1c
+#define GPMODE_TO_PROTECT_PAGE         0x1d
+#define GPMODE_CAPABILITIES_PAGE       0x2a
+#define GPMODE_ALL_PAGES               0x3f
+/* Not in Mt. Fuji, but in ATAPI 2.6 -- deprecated now in favor
+ * of MODE_SENSE_POWER_PAGE */
+#define GPMODE_CDROM_PAGE              0x0d
+
+
+
+/* DVD struct types */
+#define DVD_STRUCT_PHYSICAL    0x00
+#define DVD_STRUCT_COPYRIGHT   0x01
+#define DVD_STRUCT_DISCKEY     0x02
+#define DVD_STRUCT_BCA         0x03
+#define DVD_STRUCT_MANUFACT    0x04
+
+struct dvd_layer {
+       __u8 book_version       : 4;
+       __u8 book_type          : 4;
+       __u8 min_rate           : 4;
+       __u8 disc_size          : 4;
+       __u8 layer_type         : 4;
+       __u8 track_path         : 1;
+       __u8 nlayers            : 2;
+       __u8 track_density      : 4;
+       __u8 linear_density     : 4;
+       __u8 bca                : 1;
+       __u32 start_sector;
+       __u32 end_sector;
+       __u32 end_sector_l0;
+};
+
+#define DVD_LAYERS     4
+
+struct dvd_physical {
+       __u8 type;
+       __u8 layer_num;
+       struct dvd_layer layer[DVD_LAYERS];
+};
+
+struct dvd_copyright {
+       __u8 type;
+
+       __u8 layer_num;
+       __u8 cpst;
+       __u8 rmi;
+};
+
+struct dvd_disckey {
+       __u8 type;
+
+       unsigned agid           : 2;
+       __u8 value[2048];
+};
+
+struct dvd_bca {
+       __u8 type;
+
+       int len;
+       __u8 value[188];
+};
+
+struct dvd_manufact {
+       __u8 type;
+
+       __u8 layer_num;
+       int len;
+       __u8 value[2048];
+};
+
+typedef union {
+       __u8 type;
+
+       struct dvd_physical     physical;
+       struct dvd_copyright    copyright;
+       struct dvd_disckey      disckey;
+       struct dvd_bca          bca;
+       struct dvd_manufact     manufact;
+} dvd_struct;
+
+/*
+ * DVD authentication ioctl
+ */
+
+/* Authentication states */
+#define DVD_LU_SEND_AGID       0
+#define DVD_HOST_SEND_CHALLENGE        1
+#define DVD_LU_SEND_KEY1       2
+#define DVD_LU_SEND_CHALLENGE  3
+#define DVD_HOST_SEND_KEY2     4
+
+/* Termination states */
+#define DVD_AUTH_ESTABLISHED   5
+#define DVD_AUTH_FAILURE       6
+
+/* Other functions */
+#define DVD_LU_SEND_TITLE_KEY  7
+#define DVD_LU_SEND_ASF                8
+#define DVD_INVALIDATE_AGID    9
+#define DVD_LU_SEND_RPC_STATE  10
+#define DVD_HOST_SEND_RPC_STATE        11
+
+/* State data */
+typedef __u8 dvd_key[5];               /* 40-bit value, MSB is first elem. */
+typedef __u8 dvd_challenge[10];        /* 80-bit value, MSB is first elem. */
+
+struct dvd_lu_send_agid {
+       __u8 type;
+       unsigned agid           : 2;
+};
+
+struct dvd_host_send_challenge {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_challenge chal;
+};
+
+struct dvd_send_key {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_key key;
+};
+
+struct dvd_lu_send_challenge {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_challenge chal;
+};
+
+#define DVD_CPM_NO_COPYRIGHT   0
+#define DVD_CPM_COPYRIGHTED    1
+
+#define DVD_CP_SEC_NONE                0
+#define DVD_CP_SEC_EXIST       1
+
+#define DVD_CGMS_UNRESTRICTED  0
+#define DVD_CGMS_SINGLE                2
+#define DVD_CGMS_RESTRICTED    3
+
+struct dvd_lu_send_title_key {
+       __u8 type;
+       unsigned agid           : 2;
+
+       dvd_key title_key;
+       int lba;
+       unsigned cpm            : 1;
+       unsigned cp_sec         : 1;
+       unsigned cgms           : 2;
+};
+
+struct dvd_lu_send_asf {
+       __u8 type;
+       unsigned agid           : 2;
+
+       unsigned asf            : 1;
+};
+
+struct dvd_host_send_rpcstate {
+       __u8 type;
+       __u8 pdrc;
+};
+
+struct dvd_lu_send_rpcstate {
+       __u8 type               : 2;
+       __u8 vra                : 3;
+       __u8 ucca               : 3;
+       __u8 region_mask;
+       __u8 rpc_scheme;
+};
+
+typedef union {
+       __u8 type;
+
+       struct dvd_lu_send_agid         lsa;
+       struct dvd_host_send_challenge  hsc;
+       struct dvd_send_key             lsk;
+       struct dvd_lu_send_challenge    lsc;
+       struct dvd_send_key             hsk;
+       struct dvd_lu_send_title_key    lstk;
+       struct dvd_lu_send_asf          lsasf;
+       struct dvd_host_send_rpcstate   hrpcs;
+       struct dvd_lu_send_rpcstate     lrpcs;
+} dvd_authinfo;
+
+struct request_sense {
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 valid              : 1;
+       __u8 error_code         : 7;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 error_code         : 7;
+       __u8 valid              : 1;
+#endif
+       __u8 segment_number;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 ili                : 1;
+       __u8 reserved2          : 1;
+       __u8 sense_key          : 4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 sense_key          : 4;
+       __u8 reserved2          : 1;
+       __u8 ili                : 1;
+       __u8 reserved1          : 2;
+#endif
+       __u8 information[4];
+       __u8 add_sense_len;
+       __u8 command_info[4];
+       __u8 asc;
+       __u8 ascq;
+       __u8 fruc;
+       __u8 sks[3];
+       __u8 asb[46];
+};
+
+/*
+ * feature profile
+ */
+#define CDF_RWRT       0x0020  /* "Random Writable" */
+#define CDF_HWDM       0x0024  /* "Hardware Defect Management" */
+#define CDF_MRW        0x0028
+
+/*
+ * media status bits
+ */
+#define CDM_MRW_NOTMRW                 0
+#define CDM_MRW_BGFORMAT_INACTIVE      1
+#define CDM_MRW_BGFORMAT_ACTIVE                2
+#define CDM_MRW_BGFORMAT_COMPLETE      3
+
+/*
+ * mrw address spaces
+ */
+#define MRW_LBA_DMA                    0
+#define MRW_LBA_GAA                    1
+
+/*
+ * mrw mode pages (first is deprecated) -- probed at init time and
+ * cdi->mrw_mode_page is set
+ */
+#define MRW_MODE_PC_PRE1               0x2c
+#define MRW_MODE_PC                    0x03
+
+struct mrw_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 feature_version    : 4;
+       __u8 persistent         : 1;
+       __u8 curr               : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr               : 1;
+       __u8 persistent         : 1;
+       __u8 feature_version    : 4;
+       __u8 reserved1          : 2;
+#endif
+       __u8 add_len;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2          : 7;
+       __u8 write              : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 write              : 1;
+       __u8 reserved2          : 7;
+#endif
+       __u8 reserved3;
+       __u8 reserved4;
+       __u8 reserved5;
+};
+
+/* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */
+struct rwrt_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1          : 2;
+       __u8 feature_version    : 4;
+       __u8 persistent         : 1;
+       __u8 curr               : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr               : 1;
+       __u8 persistent         : 1;
+       __u8 feature_version    : 4;
+       __u8 reserved1          : 2;
+#endif
+       __u8 add_len;
+       __u32 last_lba;
+       __u32 block_size;
+       __u16 blocking;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2          : 7;
+       __u8 page_present       : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 page_present       : 1;
+       __u8 reserved2          : 7;
+#endif
+       __u8 reserved3;
+};
+
+typedef struct {
+       __be16 disc_information_length;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1                  : 3;
+        __u8 erasable                  : 1;
+        __u8 border_status             : 2;
+        __u8 disc_status               : 2;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+        __u8 disc_status               : 2;
+        __u8 border_status             : 2;
+        __u8 erasable                  : 1;
+       __u8 reserved1                  : 3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 n_first_track;
+       __u8 n_sessions_lsb;
+       __u8 first_track_lsb;
+       __u8 last_track_lsb;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 did_v                      : 1;
+        __u8 dbc_v                     : 1;
+        __u8 uru                       : 1;
+        __u8 reserved2                 : 2;
+       __u8 dbit                       : 1;
+       __u8 mrw_status                 : 2;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 mrw_status                 : 2;
+       __u8 dbit                       : 1;
+        __u8 reserved2                 : 2;
+        __u8 uru                       : 1;
+        __u8 dbc_v                     : 1;
+       __u8 did_v                      : 1;
+#endif
+       __u8 disc_type;
+       __u8 n_sessions_msb;
+       __u8 first_track_msb;
+       __u8 last_track_msb;
+       __u32 disc_id;
+       __u32 lead_in;
+       __u32 lead_out;
+       __u8 disc_bar_code[8];
+       __u8 reserved3;
+       __u8 n_opc;
+} disc_information;
+
+typedef struct {
+       __be16 track_information_length;
+       __u8 track_lsb;
+       __u8 session_lsb;
+       __u8 reserved1;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved2                  : 2;
+        __u8 damage                    : 1;
+        __u8 copy                      : 1;
+        __u8 track_mode                        : 4;
+       __u8 rt                         : 1;
+       __u8 blank                      : 1;
+       __u8 packet                     : 1;
+       __u8 fp                         : 1;
+       __u8 data_mode                  : 4;
+       __u8 reserved3                  : 6;
+       __u8 lra_v                      : 1;
+       __u8 nwa_v                      : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+        __u8 track_mode                        : 4;
+        __u8 copy                      : 1;
+        __u8 damage                    : 1;
+       __u8 reserved2                  : 2;
+       __u8 data_mode                  : 4;
+       __u8 fp                         : 1;
+       __u8 packet                     : 1;
+       __u8 blank                      : 1;
+       __u8 rt                         : 1;
+       __u8 nwa_v                      : 1;
+       __u8 lra_v                      : 1;
+       __u8 reserved3                  : 6;
+#endif
+       __be32 track_start;
+       __be32 next_writable;
+       __be32 free_blocks;
+       __be32 fixed_packet_size;
+       __be32 track_size;
+       __be32 last_rec_address;
+} track_information;
+
+struct feature_header {
+       __u32 data_len;
+       __u8 reserved1;
+       __u8 reserved2;
+       __u16 curr_profile;
+};
+
+struct mode_page_header {
+       __be16 mode_data_length;
+       __u8 medium_type;
+       __u8 reserved1;
+       __u8 reserved2;
+       __u8 reserved3;
+       __be16 desc_length;
+};
+
+/* removable medium feature descriptor */
+struct rm_feature_desc {
+       __be16 feature_code;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 reserved1:2;
+       __u8 feature_version:4;
+       __u8 persistent:1;
+       __u8 curr:1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 curr:1;
+       __u8 persistent:1;
+       __u8 feature_version:4;
+       __u8 reserved1:2;
+#endif
+       __u8 add_len;
+#if defined(__BIG_ENDIAN_BITFIELD)
+       __u8 mech_type:3;
+       __u8 load:1;
+       __u8 eject:1;
+       __u8 pvnt_jmpr:1;
+       __u8 dbml:1;
+       __u8 lock:1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 lock:1;
+       __u8 dbml:1;
+       __u8 pvnt_jmpr:1;
+       __u8 eject:1;
+       __u8 load:1;
+       __u8 mech_type:3;
+#endif
+       __u8 reserved2;
+       __u8 reserved3;
+       __u8 reserved4;
+};
+
+#endif /* _LINUX_CDROM_H */
diff --git a/lib/libdss-include/linux/cgroupstats.h b/lib/libdss-include/linux/cgroupstats.h
new file mode 100644 (file)
index 0000000..3753c33
--- /dev/null
@@ -0,0 +1,71 @@
+/* cgroupstats.h - exporting per-cgroup statistics
+ *
+ * Copyright IBM Corporation, 2007
+ * Author Balbir Singh <balbir@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _LINUX_CGROUPSTATS_H
+#define _LINUX_CGROUPSTATS_H
+
+#include <linux/types.h>
+#include <linux/taskstats.h>
+
+/*
+ * Data shared between user space and kernel space on a per cgroup
+ * basis. This data is shared using taskstats.
+ *
+ * Most of these states are derived by looking at the task->state value
+ * For the nr_io_wait state, a flag in the delay accounting structure
+ * indicates that the task is waiting on IO
+ *
+ * Each member is aligned to a 8 byte boundary.
+ */
+struct cgroupstats {
+       __u64   nr_sleeping;            /* Number of tasks sleeping */
+       __u64   nr_running;             /* Number of tasks running */
+       __u64   nr_stopped;             /* Number of tasks in stopped state */
+       __u64   nr_uninterruptible;     /* Number of tasks in uninterruptible */
+                                       /* state */
+       __u64   nr_io_wait;             /* Number of tasks waiting on IO */
+};
+
+/*
+ * Commands sent from userspace
+ * Not versioned. New commands should only be inserted at the enum's end
+ * prior to __CGROUPSTATS_CMD_MAX
+ */
+
+enum {
+       CGROUPSTATS_CMD_UNSPEC = __TASKSTATS_CMD_MAX,   /* Reserved */
+       CGROUPSTATS_CMD_GET,            /* user->kernel request/get-response */
+       CGROUPSTATS_CMD_NEW,            /* kernel->user event */
+       __CGROUPSTATS_CMD_MAX,
+};
+
+#define CGROUPSTATS_CMD_MAX (__CGROUPSTATS_CMD_MAX - 1)
+
+enum {
+       CGROUPSTATS_TYPE_UNSPEC = 0,    /* Reserved */
+       CGROUPSTATS_TYPE_CGROUP_STATS,  /* contains name + stats */
+       __CGROUPSTATS_TYPE_MAX,
+};
+
+#define CGROUPSTATS_TYPE_MAX (__CGROUPSTATS_TYPE_MAX - 1)
+
+enum {
+       CGROUPSTATS_CMD_ATTR_UNSPEC = 0,
+       CGROUPSTATS_CMD_ATTR_FD,
+       __CGROUPSTATS_CMD_ATTR_MAX,
+};
+
+#define CGROUPSTATS_CMD_ATTR_MAX (__CGROUPSTATS_CMD_ATTR_MAX - 1)
+
+#endif /* _LINUX_CGROUPSTATS_H */
diff --git a/lib/libdss-include/linux/chio.h b/lib/libdss-include/linux/chio.h
new file mode 100644 (file)
index 0000000..e97cd98
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * ioctl interface for the scsi media changer driver
+ */
+
+/* changer element types */
+#define CHET_MT   0    /* media transport element (robot) */
+#define CHET_ST   1    /* storage element (media slots) */
+#define CHET_IE   2    /* import/export element */
+#define CHET_DT   3    /* data transfer element (tape/cdrom/whatever) */
+#define CHET_V1   4    /* vendor specific #1 */
+#define CHET_V2   5    /* vendor specific #2 */
+#define CHET_V3   6    /* vendor specific #3 */
+#define CHET_V4   7    /* vendor specific #4 */
+
+
+/*
+ * CHIOGPARAMS
+ *    query changer properties
+ *
+ * CHIOVGPARAMS
+ *    query vendor-specific element types
+ *
+ *    accessing elements works by specifing type and unit of the element.
+ *    for example, storage elements are addressed with type = CHET_ST and
+ *    unit = 0 .. cp_nslots-1
+ *
+ */
+struct changer_params {
+       int cp_curpicker;  /* current transport element */
+       int cp_npickers;   /* number of transport elements      (CHET_MT) */
+       int cp_nslots;     /* number of storage elements        (CHET_ST) */
+       int cp_nportals;   /* number of import/export elements  (CHET_IE) */
+       int cp_ndrives;    /* number of data transfer elements  (CHET_DT) */
+};
+struct changer_vendor_params {
+       int  cvp_n1;       /* number of vendor specific elems   (CHET_V1) */
+       char cvp_label1[16];
+       int  cvp_n2;       /* number of vendor specific elems   (CHET_V2) */
+       char cvp_label2[16];
+       int  cvp_n3;       /* number of vendor specific elems   (CHET_V3) */
+       char cvp_label3[16];
+       int  cvp_n4;       /* number of vendor specific elems   (CHET_V4) */
+       char cvp_label4[16];
+       int  reserved[8];
+};
+
+
+/*
+ * CHIOMOVE
+ *    move a medium from one element to another
+ */
+struct changer_move {
+       int cm_fromtype;        /* type/unit of source element */
+       int cm_fromunit;        
+       int cm_totype;  /* type/unit of destination element */
+       int cm_tounit;
+       int cm_flags;
+};
+#define CM_INVERT   1   /* flag: rotate media (for double-sided like MOD) */
+
+
+/*
+ * CHIOEXCHANGE
+ *    move one medium from element #1 to element #2,
+ *    and another one from element #2 to element #3.
+ *    element #1 and #3 are allowed to be identical.
+ */
+struct changer_exchange {
+       int ce_srctype;     /* type/unit of element #1 */
+       int ce_srcunit;
+       int ce_fdsttype;    /* type/unit of element #2 */
+       int ce_fdstunit;
+       int ce_sdsttype;    /* type/unit of element #3 */
+       int ce_sdstunit;
+       int ce_flags;
+};
+#define CE_INVERT1   1
+#define CE_INVERT2   2
+
+
+/*
+ * CHIOPOSITION
+ *    move the transport element (robot arm) to a specific element.
+ */
+struct changer_position {
+       int cp_type;
+       int cp_unit;
+       int cp_flags;
+};
+#define CP_INVERT   1
+
+
+/*
+ * CHIOGSTATUS
+ *    get element status for all elements of a specific type
+ */
+struct changer_element_status {
+       int             ces_type;
+       unsigned char   *ces_data;
+};
+#define CESTATUS_FULL     0x01 /* full */
+#define CESTATUS_IMPEXP   0x02 /* media was imported (inserted by sysop) */
+#define CESTATUS_EXCEPT   0x04 /* error condition */
+#define CESTATUS_ACCESS   0x08 /* access allowed */
+#define CESTATUS_EXENAB   0x10 /* element can export media */
+#define CESTATUS_INENAB   0x20 /* element can import media */
+
+
+/*
+ * CHIOGELEM
+ *    get more detailed status information for a single element
+ */
+struct changer_get_element {
+       int     cge_type;        /* type/unit */
+       int     cge_unit;
+       int     cge_status;      /* status */
+       int     cge_errno;       /* errno */
+       int     cge_srctype;     /* source element of the last move/exchange */
+       int     cge_srcunit;
+       int     cge_id;          /* scsi id  (for data transfer elements) */
+       int     cge_lun;         /* scsi lun (for data transfer elements) */
+       char    cge_pvoltag[36]; /* primary volume tag */
+       char    cge_avoltag[36]; /* alternate volume tag */
+       int     cge_flags;
+};
+/* flags */
+#define CGE_ERRNO     0x01       /* errno available       */
+#define CGE_INVERT    0x02       /* media inverted        */
+#define CGE_SRC       0x04       /* media src available   */
+#define CGE_IDLUN     0x08       /* ID+LUN available      */
+#define CGE_PVOLTAG   0x10       /* primary volume tag available */
+#define CGE_AVOLTAG   0x20       /* alternate volume tag available */
+
+
+/*
+ * CHIOSVOLTAG
+ *    set volume tag
+ */
+struct changer_set_voltag {
+       int     csv_type;        /* type/unit */
+       int     csv_unit;
+       char    csv_voltag[36];  /* volume tag */
+       int     csv_flags;
+};
+#define CSV_PVOLTAG   0x01       /* primary volume tag */
+#define CSV_AVOLTAG   0x02       /* alternate volume tag */
+#define CSV_CLEARTAG  0x04       /* clear volume tag */
+
+/* ioctls */
+#define CHIOMOVE       _IOW('c', 1,struct changer_move)
+#define CHIOEXCHANGE   _IOW('c', 2,struct changer_exchange)
+#define CHIOPOSITION   _IOW('c', 3,struct changer_position)
+#define CHIOGPICKER    _IOR('c', 4,int)                        /* not impl. */
+#define CHIOSPICKER    _IOW('c', 5,int)                        /* not impl. */
+#define CHIOGPARAMS    _IOR('c', 6,struct changer_params)
+#define CHIOGSTATUS    _IOW('c', 8,struct changer_element_status)
+#define CHIOGELEM      _IOW('c',16,struct changer_get_element)
+#define CHIOINITELEM   _IO('c',17)
+#define CHIOSVOLTAG    _IOW('c',18,struct changer_set_voltag)
+#define CHIOGVPARAMS   _IOR('c',19,struct changer_vendor_params)
+
+/* ---------------------------------------------------------------------- */
+
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/lib/libdss-include/linux/cm4000_cs.h b/lib/libdss-include/linux/cm4000_cs.h
new file mode 100644 (file)
index 0000000..f912e74
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _CM4000_H_
+#define _CM4000_H_
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define        MAX_ATR                 33
+
+#define        CM4000_MAX_DEV          4
+
+/* those two structures are passed via ioctl() from/to userspace.  They are
+ * used by existing userspace programs, so I kepth the awkward "bIFSD" naming
+ * not to break compilation of userspace apps. -HW */
+
+typedef struct atreq {
+       __s32 atr_len;
+       unsigned char atr[64];
+       __s32 power_act;
+       unsigned char bIFSD;
+       unsigned char bIFSC;
+} atreq_t;
+
+
+/* what is particularly stupid in the original driver is the arch-dependent
+ * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace
+ * will lay out the structure members differently than the 64bit kernel.
+ *
+ * I've changed "ptsreq.protocol" from "unsigned long" to "__u32".
+ * On 32bit this will make no difference.  With 64bit kernels, it will make
+ * 32bit apps work, too.
+ */
+
+typedef struct ptsreq {
+       __u32 protocol; /*T=0: 2^0, T=1:  2^1*/
+       unsigned char flags;
+       unsigned char pts1;
+       unsigned char pts2;
+       unsigned char pts3;
+} ptsreq_t;
+
+#define        CM_IOC_MAGIC            'c'
+#define        CM_IOC_MAXNR            255
+
+#define        CM_IOCGSTATUS           _IOR (CM_IOC_MAGIC, 0, unsigned char *)
+#define        CM_IOCGATR              _IOWR(CM_IOC_MAGIC, 1, atreq_t *)
+#define        CM_IOCSPTS              _IOW (CM_IOC_MAGIC, 2, ptsreq_t *)
+#define        CM_IOCSRDR              _IO  (CM_IOC_MAGIC, 3)
+#define CM_IOCARDOFF            _IO  (CM_IOC_MAGIC, 4)
+
+#define CM_IOSDBGLVL            _IOW(CM_IOC_MAGIC, 250, int*)
+
+/* card and device states */
+#define        CM_CARD_INSERTED                0x01
+#define        CM_CARD_POWERED                 0x02
+#define        CM_ATR_PRESENT                  0x04
+#define        CM_ATR_VALID                    0x08
+#define        CM_STATE_VALID                  0x0f
+/* extra info only from CM4000 */
+#define        CM_NO_READER                    0x10
+#define        CM_BAD_CARD                     0x20
+
+
+#endif /* _CM4000_H_ */
diff --git a/lib/libdss-include/linux/cn_proc.h b/lib/libdss-include/linux/cn_proc.h
new file mode 100644 (file)
index 0000000..bf22f5c
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * cn_proc.h - process events connector
+ *
+ * Copyright (C) Matt Helsley, IBM Corp. 2005
+ * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin
+ * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com>
+ * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef CN_PROC_H
+#define CN_PROC_H
+
+#include <linux/types.h>
+
+/*
+ * Userspace sends this enum to register with the kernel that it is listening
+ * for events on the connector.
+ */
+enum proc_cn_mcast_op {
+       PROC_CN_MCAST_LISTEN = 1,
+       PROC_CN_MCAST_IGNORE = 2
+};
+
+/*
+ * From the user's point of view, the process
+ * ID is the thread group ID and thread ID is the internal
+ * kernel "pid". So, fields are assigned as follow:
+ *
+ *  In user space     -  In  kernel space
+ *
+ * parent process ID  =  parent->tgid
+ * parent thread  ID  =  parent->pid
+ * child  process ID  =  child->tgid
+ * child  thread  ID  =  child->pid
+ */
+
+struct proc_event {
+       enum what {
+               /* Use successive bits so the enums can be used to record
+                * sets of events as well
+                */
+               PROC_EVENT_NONE = 0x00000000,
+               PROC_EVENT_FORK = 0x00000001,
+               PROC_EVENT_EXEC = 0x00000002,
+               PROC_EVENT_UID  = 0x00000004,
+               PROC_EVENT_GID  = 0x00000040,
+               PROC_EVENT_SID  = 0x00000080,
+               PROC_EVENT_PTRACE = 0x00000100,
+               PROC_EVENT_COMM = 0x00000200,
+               /* "next" should be 0x00000400 */
+               /* "last" is the last process event: exit,
+                * while "next to last" is coredumping event */
+               PROC_EVENT_COREDUMP = 0x40000000,
+               PROC_EVENT_EXIT = 0x80000000
+       } what;
+       __u32 cpu;
+       __u64 __attribute__((aligned(8))) timestamp_ns;
+               /* Number of nano seconds since system boot */
+       union { /* must be last field of proc_event struct */
+               struct {
+                       __u32 err;
+               } ack;
+
+               struct fork_proc_event {
+                       __kernel_pid_t parent_pid;
+                       __kernel_pid_t parent_tgid;
+                       __kernel_pid_t child_pid;
+                       __kernel_pid_t child_tgid;
+               } fork;
+
+               struct exec_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } exec;
+
+               struct id_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       union {
+                               __u32 ruid; /* task uid */
+                               __u32 rgid; /* task gid */
+                       } r;
+                       union {
+                               __u32 euid;
+                               __u32 egid;
+                       } e;
+               } id;
+
+               struct sid_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } sid;
+
+               struct ptrace_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       __kernel_pid_t tracer_pid;
+                       __kernel_pid_t tracer_tgid;
+               } ptrace;
+
+               struct comm_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       char           comm[16];
+               } comm;
+
+               struct coredump_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+               } coredump;
+
+               struct exit_proc_event {
+                       __kernel_pid_t process_pid;
+                       __kernel_pid_t process_tgid;
+                       __u32 exit_code, exit_signal;
+               } exit;
+
+       } event_data;
+};
+
+#endif /* CN_PROC_H */
diff --git a/lib/libdss-include/linux/coda.h b/lib/libdss-include/linux/coda.h
new file mode 100644 (file)
index 0000000..a5e4b99
--- /dev/null
@@ -0,0 +1,736 @@
+/* 
+   You may distribute this file under either of the two licenses that
+   follow at your discretion.
+*/
+
+/* BLURB lgpl
+
+                           Coda File System
+                              Release 5
+
+          Copyright (c) 1987-1999 Carnegie Mellon University
+                  Additional copyrights listed below
+
+This code is distributed "AS IS" without warranty of any kind under
+the terms of the GNU Library General Public Licence Version 2, as
+shown in the file LICENSE, or under the license shown below. The
+technical and financial contributors to Coda are listed in the file
+CREDITS.
+
+                        Additional copyrights 
+*/
+
+/*
+
+            Coda: an Experimental Distributed File System
+                             Release 4.0
+
+          Copyright (c) 1987-1999 Carnegie Mellon University
+                         All Rights Reserved
+
+Permission  to  use, copy, modify and distribute this software and its
+documentation is hereby granted,  provided  that  both  the  copyright
+notice  and  this  permission  notice  appear  in  all  copies  of the
+software, derivative works or  modified  versions,  and  any  portions
+thereof, and that both notices appear in supporting documentation, and
+that credit is given to Carnegie Mellon University  in  all  documents
+and publicity pertaining to direct or indirect use of this code or its
+derivatives.
+
+CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
+SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
+FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
+DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
+RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
+ANY DERIVATIVE WORK.
+
+Carnegie  Mellon  encourages  users  of  this  software  to return any
+improvements or extensions that  they  make,  and  to  grant  Carnegie
+Mellon the rights to redistribute these changes without encumbrance.
+*/
+
+/*
+ *
+ * Based on cfs.h from Mach, but revamped for increased simplicity.
+ * Linux modifications by 
+ * Peter Braam, Aug 1996
+ */
+
+#ifndef _CODA_HEADER_
+#define _CODA_HEADER_
+
+
+/* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */
+#if defined(__NetBSD__) || \
+  ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL))
+#include <sys/types.h>
+#endif 
+
+#ifndef CODA_MAXSYMLINKS
+#define CODA_MAXSYMLINKS 10
+#endif
+
+#if defined(DJGPP) || defined(__CYGWIN32__)
+#ifdef KERNEL
+typedef unsigned long u_long;
+typedef unsigned int u_int;
+typedef unsigned short u_short;
+typedef u_long ino_t;
+typedef u_long dev_t;
+typedef void * caddr_t;
+#ifdef DOS
+typedef unsigned __int64 u_quad_t;
+#else 
+typedef unsigned long long u_quad_t;
+#endif
+
+#define __inline__
+
+struct timespec {
+        long       ts_sec;
+        long       ts_nsec;
+};
+#else  /* DJGPP but not KERNEL */
+#include <sys/time.h>
+typedef unsigned long long u_quad_t;
+#endif /* !KERNEL */
+#endif /* !DJGPP */
+
+
+#if defined(__linux__)
+#include <linux/time.h>
+#define cdev_t u_quad_t
+#if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
+#define _UQUAD_T_ 1
+typedef unsigned long long u_quad_t;
+#endif
+#else
+#define cdev_t dev_t
+#endif
+
+#ifdef __CYGWIN32__
+struct timespec {
+        time_t  tv_sec;         /* seconds */
+        long    tv_nsec;        /* nanoseconds */
+};
+#endif
+
+#ifndef __BIT_TYPES_DEFINED__
+#define __BIT_TYPES_DEFINED__
+typedef signed char          int8_t;
+typedef unsigned char      u_int8_t;
+typedef short               int16_t;
+typedef unsigned short    u_int16_t;
+typedef int                 int32_t;
+typedef unsigned int      u_int32_t;
+#endif
+
+
+/*
+ * Cfs constants
+ */
+#define CODA_MAXNAMLEN   255
+#define CODA_MAXPATHLEN  1024
+#define CODA_MAXSYMLINK  10
+
+/* these are Coda's version of O_RDONLY etc combinations
+ * to deal with VFS open modes
+ */
+#define        C_O_READ        0x001
+#define        C_O_WRITE       0x002
+#define C_O_TRUNC       0x010
+#define C_O_EXCL       0x100
+#define C_O_CREAT      0x200
+
+/* these are to find mode bits in Venus */ 
+#define C_M_READ  00400
+#define C_M_WRITE 00200
+
+/* for access Venus will use */
+#define C_A_C_OK    8               /* Test for writing upon create.  */
+#define C_A_R_OK    4               /* Test for read permission.  */
+#define C_A_W_OK    2               /* Test for write permission.  */
+#define C_A_X_OK    1               /* Test for execute permission.  */
+#define C_A_F_OK    0               /* Test for existence.  */
+
+
+
+#ifndef _VENUS_DIRENT_T_
+#define _VENUS_DIRENT_T_ 1
+struct venus_dirent {
+        u_int32_t d_fileno;            /* file number of entry */
+        u_int16_t d_reclen;            /* length of this record */
+        u_int8_t  d_type;                      /* file type, see below */
+        u_int8_t  d_namlen;            /* length of string in d_name */
+        char     d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
+};
+#undef DIRSIZ
+#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
+                         (((dp)->d_namlen+1 + 3) &~ 3))
+
+/*
+ * File types
+ */
+#define        CDT_UNKNOWN      0
+#define        CDT_FIFO         1
+#define        CDT_CHR          2
+#define        CDT_DIR          4
+#define        CDT_BLK          6
+#define        CDT_REG          8
+#define        CDT_LNK         10
+#define        CDT_SOCK        12
+#define        CDT_WHT         14
+
+/*
+ * Convert between stat structure types and directory types.
+ */
+#define        IFTOCDT(mode)   (((mode) & 0170000) >> 12)
+#define        CDTTOIF(dirtype)        ((dirtype) << 12)
+
+#endif
+
+#ifndef _VUID_T_
+#define _VUID_T_
+typedef u_int32_t vuid_t;
+typedef u_int32_t vgid_t;
+#endif /*_VUID_T_ */
+
+struct CodaFid {
+       u_int32_t opaque[4];
+};
+
+#define coda_f2i(fid)\
+       (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0)
+
+#ifndef _VENUS_VATTR_T_
+#define _VENUS_VATTR_T_
+/*
+ * Vnode types.  VNON means no type.
+ */
+enum coda_vtype        { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
+
+struct coda_vattr {
+       long            va_type;        /* vnode type (for create) */
+       u_short         va_mode;        /* files access mode and type */
+       short           va_nlink;       /* number of references to file */
+       vuid_t          va_uid;         /* owner user id */
+       vgid_t          va_gid;         /* owner group id */
+       long            va_fileid;      /* file id */
+       u_quad_t        va_size;        /* file size in bytes */
+       long            va_blocksize;   /* blocksize preferred for i/o */
+       struct timespec va_atime;       /* time of last access */
+       struct timespec va_mtime;       /* time of last modification */
+       struct timespec va_ctime;       /* time file changed */
+       u_long          va_gen;         /* generation number of file */
+       u_long          va_flags;       /* flags defined for file */
+       cdev_t          va_rdev;        /* device special file represents */
+       u_quad_t        va_bytes;       /* bytes of disk space held by file */
+       u_quad_t        va_filerev;     /* file modification number */
+};
+
+#endif 
+
+/* structure used by CODA_STATFS for getting cache information from venus */
+struct coda_statfs {
+    int32_t f_blocks;
+    int32_t f_bfree;
+    int32_t f_bavail;
+    int32_t f_files;
+    int32_t f_ffree;
+};
+
+/*
+ * Kernel <--> Venus communications.
+ */
+
+#define CODA_ROOT      2
+#define CODA_OPEN_BY_FD        3
+#define CODA_OPEN      4
+#define CODA_CLOSE     5
+#define CODA_IOCTL     6
+#define CODA_GETATTR   7
+#define CODA_SETATTR   8
+#define CODA_ACCESS    9
+#define CODA_LOOKUP    10
+#define CODA_CREATE    11
+#define CODA_REMOVE    12
+#define CODA_LINK      13
+#define CODA_RENAME    14
+#define CODA_MKDIR     15
+#define CODA_RMDIR     16
+#define CODA_SYMLINK   18
+#define CODA_READLINK  19
+#define CODA_FSYNC     20
+#define CODA_VGET      22
+#define CODA_SIGNAL    23
+#define CODA_REPLACE    24 /* DOWNCALL */
+#define CODA_FLUSH       25 /* DOWNCALL */
+#define CODA_PURGEUSER   26 /* DOWNCALL */
+#define CODA_ZAPFILE     27 /* DOWNCALL */
+#define CODA_ZAPDIR      28 /* DOWNCALL */
+#define CODA_PURGEFID    30 /* DOWNCALL */
+#define CODA_OPEN_BY_PATH 31
+#define CODA_RESOLVE     32
+#define CODA_REINTEGRATE 33
+#define CODA_STATFS     34
+#define CODA_STORE      35
+#define CODA_RELEASE    36
+#define CODA_NCALLS 37
+
+#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
+
+#define VC_MAXDATASIZE     8192
+#define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\
+                            VC_MAXDATASIZE  
+
+#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
+
+#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */
+
+/*
+ *        Venus <-> Coda  RPC arguments
+ */
+struct coda_in_hdr {
+    u_int32_t opcode;
+    u_int32_t unique;      /* Keep multiple outstanding msgs distinct */
+    pid_t pid;
+    pid_t pgid;
+    vuid_t uid;
+};
+
+/* Really important that opcode and unique are 1st two fields! */
+struct coda_out_hdr {
+    u_int32_t opcode;
+    u_int32_t unique;  
+    u_int32_t result;
+};
+
+/* coda_root: NO_IN */
+struct coda_root_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+};
+
+struct coda_root_in {
+    struct coda_in_hdr in;
+};
+
+/* coda_open: */
+struct coda_open_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_out {
+    struct coda_out_hdr oh;
+    cdev_t     dev;
+    ino_t      inode;
+};
+
+
+/* coda_store: */
+struct coda_store_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_store_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_release: */
+struct coda_release_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_release_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_close: */
+struct coda_close_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_close_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_ioctl: */
+struct coda_ioctl_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        cmd;
+    int        len;
+    int        rwflag;
+    char *data;                        /* Place holder for data. */
+};
+
+struct coda_ioctl_out {
+    struct coda_out_hdr oh;
+    int        len;
+    caddr_t    data;           /* Place holder for data. */
+};
+
+
+/* coda_getattr: */
+struct coda_getattr_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_getattr_out {
+    struct coda_out_hdr oh;
+    struct coda_vattr attr;
+};
+
+
+/* coda_setattr: NO_OUT */
+struct coda_setattr_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+struct coda_setattr_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_access: NO_OUT */
+struct coda_access_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_access_out {
+    struct coda_out_hdr out;
+};
+
+
+/* lookup flags */
+#define CLU_CASE_SENSITIVE     0x01
+#define CLU_CASE_INSENSITIVE   0x02
+
+/* coda_lookup: */
+struct  coda_lookup_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int         name;          /* Place holder for data. */
+    int         flags; 
+};
+
+struct coda_lookup_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    int        vtype;
+};
+
+
+/* coda_create: */
+struct coda_create_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+    int excl;
+    int mode;
+    int        name;           /* Place holder for data. */
+};
+
+struct coda_create_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+
+/* coda_remove: NO_OUT */
+struct coda_remove_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int name;          /* Place holder for data. */
+};
+
+struct coda_remove_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_link: NO_OUT */
+struct coda_link_in {
+    struct coda_in_hdr ih;
+    struct CodaFid sourceFid;  /* cnode to link *to* */
+    struct CodaFid destFid;    /* Directory in which to place link */
+    int tname;         /* Place holder for data. */
+};
+
+struct coda_link_out {
+    struct coda_out_hdr out;
+};
+
+
+/* coda_rename: NO_OUT */
+struct coda_rename_in {
+    struct coda_in_hdr ih;
+    struct CodaFid sourceFid;
+    int        srcname;
+    struct CodaFid destFid;
+    int        destname;
+};
+
+struct coda_rename_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_mkdir: */
+struct coda_mkdir_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+    int           name;                /* Place holder for data. */
+};
+
+struct coda_mkdir_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    struct coda_vattr attr;
+};
+
+
+/* coda_rmdir: NO_OUT */
+struct coda_rmdir_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int name;          /* Place holder for data. */
+};
+
+struct coda_rmdir_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_symlink: NO_OUT */
+struct coda_symlink_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;       /* Directory to put symlink in */
+    int srcname;
+    struct coda_vattr attr;
+    int tname;
+};
+
+struct coda_symlink_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_readlink: */
+struct coda_readlink_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_readlink_out {
+    struct coda_out_hdr oh;
+    int        count;
+    caddr_t    data;           /* Place holder for data. */
+};
+
+
+/* coda_fsync: NO_OUT */
+struct coda_fsync_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_fsync_out {
+    struct coda_out_hdr out;
+};
+
+/* coda_vget: */
+struct coda_vget_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+};
+
+struct coda_vget_out {
+    struct coda_out_hdr oh;
+    struct CodaFid VFid;
+    int        vtype;
+};
+
+
+/* CODA_SIGNAL is out-of-band, doesn't need data. */
+/* CODA_INVALIDATE is a venus->kernel call */
+/* CODA_FLUSH is a venus->kernel call */
+
+/* coda_purgeuser: */
+/* CODA_PURGEUSER is a venus->kernel call */
+struct coda_purgeuser_out {
+    struct coda_out_hdr oh;
+    vuid_t uid;
+};
+
+/* coda_zapfile: */
+/* CODA_ZAPFILE is a venus->kernel call */
+struct coda_zapfile_out {  
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_zapdir: */
+/* CODA_ZAPDIR is a venus->kernel call */      
+struct coda_zapdir_out {         
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_purgefid: */
+/* CODA_PURGEFID is a venus->kernel call */    
+struct coda_purgefid_out { 
+    struct coda_out_hdr oh;
+    struct CodaFid CodaFid;
+};
+
+/* coda_replace: */
+/* CODA_REPLACE is a venus->kernel call */     
+struct coda_replace_out { /* coda_replace is a venus->kernel call */
+    struct coda_out_hdr oh;
+    struct CodaFid NewFid;
+    struct CodaFid OldFid;
+};
+
+/* coda_open_by_fd: */
+struct coda_open_by_fd_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_by_fd_out {
+    struct coda_out_hdr oh;
+    int fd;
+
+};
+
+/* coda_open_by_path: */
+struct coda_open_by_path_in {
+    struct coda_in_hdr ih;
+    struct CodaFid VFid;
+    int        flags;
+};
+
+struct coda_open_by_path_out {
+    struct coda_out_hdr oh;
+       int path;
+};
+
+/* coda_statfs: NO_IN */
+struct coda_statfs_in {
+    struct coda_in_hdr in;
+};
+
+struct coda_statfs_out {
+    struct coda_out_hdr oh;
+    struct coda_statfs stat;
+};
+
+/* 
+ * Occasionally, we don't cache the fid returned by CODA_LOOKUP. 
+ * For instance, if the fid is inconsistent. 
+ * This case is handled by setting the top bit of the type result parameter.
+ */
+#define CODA_NOCACHE          0x80000000
+
+union inputArgs {
+    struct coda_in_hdr ih;             /* NB: every struct below begins with an ih */
+    struct coda_open_in coda_open;
+    struct coda_store_in coda_store;
+    struct coda_release_in coda_release;
+    struct coda_close_in coda_close;
+    struct coda_ioctl_in coda_ioctl;
+    struct coda_getattr_in coda_getattr;
+    struct coda_setattr_in coda_setattr;
+    struct coda_access_in coda_access;
+    struct coda_lookup_in coda_lookup;
+    struct coda_create_in coda_create;
+    struct coda_remove_in coda_remove;
+    struct coda_link_in coda_link;
+    struct coda_rename_in coda_rename;
+    struct coda_mkdir_in coda_mkdir;
+    struct coda_rmdir_in coda_rmdir;
+    struct coda_symlink_in coda_symlink;
+    struct coda_readlink_in coda_readlink;
+    struct coda_fsync_in coda_fsync;
+    struct coda_vget_in coda_vget;
+    struct coda_open_by_fd_in coda_open_by_fd;
+    struct coda_open_by_path_in coda_open_by_path;
+    struct coda_statfs_in coda_statfs;
+};
+
+union outputArgs {
+    struct coda_out_hdr oh;            /* NB: every struct below begins with an oh */
+    struct coda_root_out coda_root;
+    struct coda_open_out coda_open;
+    struct coda_ioctl_out coda_ioctl;
+    struct coda_getattr_out coda_getattr;
+    struct coda_lookup_out coda_lookup;
+    struct coda_create_out coda_create;
+    struct coda_mkdir_out coda_mkdir;
+    struct coda_readlink_out coda_readlink;
+    struct coda_vget_out coda_vget;
+    struct coda_purgeuser_out coda_purgeuser;
+    struct coda_zapfile_out coda_zapfile;
+    struct coda_zapdir_out coda_zapdir;
+    struct coda_purgefid_out coda_purgefid;
+    struct coda_replace_out coda_replace;
+    struct coda_open_by_fd_out coda_open_by_fd;
+    struct coda_open_by_path_out coda_open_by_path;
+    struct coda_statfs_out coda_statfs;
+};    
+
+union coda_downcalls {
+    /* CODA_INVALIDATE is a venus->kernel call */
+    /* CODA_FLUSH is a venus->kernel call */
+    struct coda_purgeuser_out purgeuser;
+    struct coda_zapfile_out zapfile;
+    struct coda_zapdir_out zapdir;
+    struct coda_purgefid_out purgefid;
+    struct coda_replace_out replace;
+};
+
+
+/*
+ * Used for identifying usage of "Control" and pioctls
+ */
+
+#define PIOCPARM_MASK 0x0000ffff
+struct ViceIoctl {
+        void *in;        /* Data to be transferred in */
+        void *out;       /* Data to be transferred out */
+        u_short in_size;        /* Size of input buffer <= 2K */
+        u_short out_size;       /* Maximum size of output buffer, <= 2K */
+};
+
+struct PioctlData {
+        const char *path;
+        int follow;
+        struct ViceIoctl vi;
+};
+
+#define CODA_CONTROL           ".CONTROL"
+#define CODA_CONTROLLEN                8
+#define CTL_INO                        -1
+
+/* Data passed to mount */
+
+#define CODA_MOUNT_VERSION 1
+
+struct coda_mount_data {
+       int             version;
+       int             fd;       /* Opened device */
+};
+
+#endif /* _CODA_HEADER_ */
diff --git a/lib/libdss-include/linux/coda_psdev.h b/lib/libdss-include/linux/coda_psdev.h
new file mode 100644 (file)
index 0000000..46e12d8
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __CODA_PSDEV_H
+#define __CODA_PSDEV_H
+
+#include <linux/magic.h>
+
+#define CODA_PSDEV_MAJOR 67
+#define MAX_CODADEVS  5           /* how many do we allow */
+
+
+/* messages between coda filesystem in kernel and Venus */
+struct upc_req {
+       struct list_head    uc_chain;
+       caddr_t             uc_data;
+       u_short             uc_flags;
+       u_short             uc_inSize;  /* Size is at most 5000 bytes */
+       u_short             uc_outSize;
+       u_short             uc_opcode;  /* copied from data to save lookup */
+       int                 uc_unique;
+       wait_queue_head_t   uc_sleep;   /* process' wait queue */
+};
+
+#define CODA_REQ_ASYNC  0x1
+#define CODA_REQ_READ   0x2
+#define CODA_REQ_WRITE  0x4
+#define CODA_REQ_ABORT  0x8
+
+#endif /* __CODA_PSDEV_H */
diff --git a/lib/libdss-include/linux/coff.h b/lib/libdss-include/linux/coff.h
new file mode 100644 (file)
index 0000000..6354a7f
--- /dev/null
@@ -0,0 +1,351 @@
+/* This file is derived from the GAS 2.1.4 assembler control file.
+   The GAS product is under the GNU General Public License, version 2 or later.
+   As such, this file is also under that license.
+
+   If the file format changes in the COFF object, this file should be
+   subsequently updated to reflect the changes.
+
+   The actual loader module only uses a few of these structures. The full
+   set is documented here because I received the full set. If you wish
+   more information about COFF, then O'Reilly has a very excellent book.
+*/
+
+#define  E_SYMNMLEN  8   /* Number of characters in a symbol name         */
+#define  E_FILNMLEN 14   /* Number of characters in a file name           */
+#define  E_DIMNUM    4   /* Number of array dimensions in auxiliary entry */
+
+/*
+ * These defines are byte order independent. There is no alignment of fields
+ * permitted in the structures. Therefore they are declared as characters
+ * and the values loaded from the character positions. It also makes it
+ * nice to have it "endian" independent.
+ */
+/* Load a short int from the following tables with little-endian formats */
+#define COFF_SHORT_L(ps) ((short)(((unsigned short)((unsigned char)ps[1])<<8)|\
+                                 ((unsigned short)((unsigned char)ps[0]))))
+
+/* Load a long int from the following tables with little-endian formats */
+#define COFF_LONG_L(ps) (((long)(((unsigned long)((unsigned char)ps[3])<<24) |\
+                                ((unsigned long)((unsigned char)ps[2])<<16) |\
+                                ((unsigned long)((unsigned char)ps[1])<<8)  |\
+                                ((unsigned long)((unsigned char)ps[0])))))
+/* Load a short int from the following tables with big-endian formats */
+#define COFF_SHORT_H(ps) ((short)(((unsigned short)((unsigned char)ps[0])<<8)|\
+                                 ((unsigned short)((unsigned char)ps[1]))))
+
+/* Load a long int from the following tables with big-endian formats */
+#define COFF_LONG_H(ps) (((long)(((unsigned long)((unsigned char)ps[0])<<24) |\
+                                ((unsigned long)((unsigned char)ps[1])<<16) |\
+                                ((unsigned long)((unsigned char)ps[2])<<8)  |\
+                                ((unsigned long)((unsigned char)ps[3])))))
+
+/* These may be overridden later by brain dead implementations which generate
+   a big-endian header with little-endian data. In that case, generate a
+   replacement macro which tests a flag and uses either of the two above
+   as appropriate. */
+
+#define COFF_LONG(v)   COFF_LONG_L(v)
+#define COFF_SHORT(v)  COFF_SHORT_L(v)
+
+/*** coff information for Intel 386/486.  */
+
+/********************** FILE HEADER **********************/
+
+struct COFF_filehdr {
+       char f_magic[2];        /* magic number                 */
+       char f_nscns[2];        /* number of sections           */
+       char f_timdat[4];       /* time & date stamp            */
+       char f_symptr[4];       /* file pointer to symtab       */
+       char f_nsyms[4];        /* number of symtab entries     */
+       char f_opthdr[2];       /* sizeof(optional hdr)         */
+       char f_flags[2];        /* flags                        */
+};
+
+/*
+ *   Bits for f_flags:
+ *
+ *     F_RELFLG        relocation info stripped from file
+ *     F_EXEC          file is executable  (i.e. no unresolved external
+ *                     references)
+ *     F_LNNO          line numbers stripped from file
+ *     F_LSYMS         local symbols stripped from file
+ *     F_MINMAL        this is a minimal object file (".m") output of fextract
+ *     F_UPDATE        this is a fully bound update file, output of ogen
+ *     F_SWABD         this file has had its bytes swabbed (in names)
+ *     F_AR16WR        this file has the byte ordering of an AR16WR
+ *                     (e.g. 11/70) machine
+ *     F_AR32WR        this file has the byte ordering of an AR32WR machine
+ *                     (e.g. vax and iNTEL 386)
+ *     F_AR32W         this file has the byte ordering of an AR32W machine
+ *                     (e.g. 3b,maxi)
+ *     F_PATCH         file contains "patch" list in optional header
+ *     F_NODF          (minimal file only) no decision functions for
+ *                     replaced functions
+ */
+
+#define  COFF_F_RELFLG         0000001
+#define  COFF_F_EXEC           0000002
+#define  COFF_F_LNNO           0000004
+#define  COFF_F_LSYMS          0000010
+#define  COFF_F_MINMAL         0000020
+#define  COFF_F_UPDATE         0000040
+#define  COFF_F_SWABD          0000100
+#define  COFF_F_AR16WR         0000200
+#define  COFF_F_AR32WR         0000400
+#define  COFF_F_AR32W          0001000
+#define  COFF_F_PATCH          0002000
+#define  COFF_F_NODF           0002000
+
+#define        COFF_I386MAGIC          0x14c   /* Linux's system    */
+
+#if 0   /* Perhaps, someday, these formats may be used.      */
+#define COFF_I386PTXMAGIC      0x154
+#define COFF_I386AIXMAGIC      0x175   /* IBM's AIX system  */
+#define COFF_I386BADMAG(x) ((COFF_SHORT((x).f_magic) != COFF_I386MAGIC) \
+                         && COFF_SHORT((x).f_magic) != COFF_I386PTXMAGIC \
+                         && COFF_SHORT((x).f_magic) != COFF_I386AIXMAGIC)
+#else
+#define COFF_I386BADMAG(x) (COFF_SHORT((x).f_magic) != COFF_I386MAGIC)
+#endif
+
+#define        COFF_FILHDR     struct COFF_filehdr
+#define        COFF_FILHSZ     sizeof(COFF_FILHDR)
+
+/********************** AOUT "OPTIONAL HEADER" **********************/
+
+/* Linux COFF must have this "optional" header. Standard COFF has no entry
+   location for the "entry" point. They normally would start with the first
+   location of the .text section. This is not a good idea for linux. So,
+   the use of this "optional" header is not optional. It is required.
+
+   Do not be tempted to assume that the size of the optional header is
+   a constant and simply index the next byte by the size of this structure.
+   Use the 'f_opthdr' field in the main coff header for the size of the
+   structure actually written to the file!!
+*/
+
+typedef struct 
+{
+  char         magic[2];               /* type of file                          */
+  char vstamp[2];              /* version stamp                         */
+  char tsize[4];               /* text size in bytes, padded to FW bdry */
+  char dsize[4];               /* initialized   data "   "              */
+  char bsize[4];               /* uninitialized data "   "              */
+  char entry[4];               /* entry pt.                             */
+  char         text_start[4];          /* base of text used for this file       */
+  char         data_start[4];          /* base of data used for this file       */
+}
+COFF_AOUTHDR;
+
+#define COFF_AOUTSZ (sizeof(COFF_AOUTHDR))
+
+#define COFF_STMAGIC   0401
+#define COFF_OMAGIC     0404
+#define COFF_JMAGIC     0407    /* dirty text and data image, can't share  */
+#define COFF_DMAGIC     0410    /* dirty text segment, data aligned        */
+#define COFF_ZMAGIC     0413    /* The proper magic number for executables  */
+#define COFF_SHMAGIC   0443    /* shared library header                   */
+
+/********************** SECTION HEADER **********************/
+
+struct COFF_scnhdr {
+  char         s_name[8];      /* section name                     */
+  char         s_paddr[4];     /* physical address, aliased s_nlib */
+  char         s_vaddr[4];     /* virtual address                  */
+  char         s_size[4];      /* section size                     */
+  char         s_scnptr[4];    /* file ptr to raw data for section */
+  char         s_relptr[4];    /* file ptr to relocation           */
+  char         s_lnnoptr[4];   /* file ptr to line numbers         */
+  char         s_nreloc[2];    /* number of relocation entries     */
+  char         s_nlnno[2];     /* number of line number entries    */
+  char         s_flags[4];     /* flags                            */
+};
+
+#define        COFF_SCNHDR     struct COFF_scnhdr
+#define        COFF_SCNHSZ     sizeof(COFF_SCNHDR)
+
+/*
+ * names of "special" sections
+ */
+
+#define COFF_TEXT      ".text"
+#define COFF_DATA      ".data"
+#define COFF_BSS       ".bss"
+#define COFF_COMMENT    ".comment"
+#define COFF_LIB        ".lib"
+
+#define COFF_SECT_TEXT  0      /* Section for instruction code             */
+#define COFF_SECT_DATA  1      /* Section for initialized globals          */
+#define COFF_SECT_BSS   2      /* Section for un-initialized globals       */
+#define COFF_SECT_REQD  3      /* Minimum number of sections for good file */
+
+#define COFF_STYP_REG     0x00 /* regular segment                          */
+#define COFF_STYP_DSECT   0x01 /* dummy segment                            */
+#define COFF_STYP_NOLOAD  0x02 /* no-load segment                          */
+#define COFF_STYP_GROUP   0x04 /* group segment                            */
+#define COFF_STYP_PAD     0x08 /* .pad segment                             */
+#define COFF_STYP_COPY    0x10 /* copy section                             */
+#define COFF_STYP_TEXT    0x20 /* .text segment                            */
+#define COFF_STYP_DATA    0x40 /* .data segment                            */
+#define COFF_STYP_BSS     0x80 /* .bss segment                             */
+#define COFF_STYP_INFO   0x200 /* .comment section                         */
+#define COFF_STYP_OVER   0x400 /* overlay section                          */
+#define COFF_STYP_LIB    0x800 /* library section                          */
+
+/*
+ * Shared libraries have the following section header in the data field for
+ * each library.
+ */
+
+struct COFF_slib {
+  char         sl_entsz[4];    /* Size of this entry               */
+  char         sl_pathndx[4];  /* size of the header field         */
+};
+
+#define        COFF_SLIBHD     struct COFF_slib
+#define        COFF_SLIBSZ     sizeof(COFF_SLIBHD)
+
+/********************** LINE NUMBERS **********************/
+
+/* 1 line number entry for every "breakpointable" source line in a section.
+ * Line numbers are grouped on a per function basis; first entry in a function
+ * grouping will have l_lnno = 0 and in place of physical address will be the
+ * symbol table index of the function name.
+ */
+
+struct COFF_lineno {
+  union {
+    char l_symndx[4];  /* function name symbol index, iff l_lnno == 0*/
+    char l_paddr[4];   /* (physical) address of line number    */
+  } l_addr;
+  char l_lnno[2];      /* line number          */
+};
+
+#define        COFF_LINENO     struct COFF_lineno
+#define        COFF_LINESZ     6
+
+/********************** SYMBOLS **********************/
+
+#define COFF_E_SYMNMLEN         8      /* # characters in a short symbol name  */
+#define COFF_E_FILNMLEN        14      /* # characters in a file name          */
+#define COFF_E_DIMNUM   4      /* # array dimensions in auxiliary entry */
+
+/*
+ *  All symbols and sections have the following definition
+ */
+
+struct COFF_syment 
+{
+  union {
+    char e_name[E_SYMNMLEN];    /* Symbol name (first 8 characters) */
+    struct {
+      char e_zeroes[4];         /* Leading zeros */
+      char e_offset[4];         /* Offset if this is a header section */
+    } e;
+  } e;
+
+  char e_value[4];              /* Value (address) of the segment */
+  char e_scnum[2];              /* Section number */
+  char e_type[2];               /* Type of section */
+  char e_sclass[1];             /* Loader class */
+  char e_numaux[1];             /* Number of auxiliary entries which follow */
+};
+
+#define COFF_N_BTMASK  (0xf)   /* Mask for important class bits */
+#define COFF_N_TMASK   (0x30)  /* Mask for important type bits  */
+#define COFF_N_BTSHFT  (4)     /* # bits to shift class field   */
+#define COFF_N_TSHIFT  (2)     /* # bits to shift type field    */
+
+/*
+ *  Auxiliary entries because the main table is too limiting.
+ */
+  
+union COFF_auxent {
+
+/*
+ *  Debugger information
+ */
+
+  struct {
+    char x_tagndx[4];          /* str, un, or enum tag indx */
+    union {
+      struct {
+       char  x_lnno[2];        /* declaration line number */
+       char  x_size[2];        /* str/union/array size */
+      } x_lnsz;
+      char x_fsize[4];         /* size of function */
+    } x_misc;
+
+    union {
+      struct {                 /* if ISFCN, tag, or .bb */
+       char x_lnnoptr[4];      /* ptr to fcn line # */
+       char x_endndx[4];       /* entry ndx past block end */
+      } x_fcn;
+
+      struct {                 /* if ISARY, up to 4 dimen. */
+       char x_dimen[E_DIMNUM][2];
+      } x_ary;
+    } x_fcnary;
+
+    char x_tvndx[2];   /* tv index */
+  } x_sym;
+
+/*
+ *   Source file names (debugger information)
+ */
+
+  union {
+    char x_fname[E_FILNMLEN];
+    struct {
+      char x_zeroes[4];
+      char x_offset[4];
+    } x_n;
+  } x_file;
+
+/*
+ *   Section information
+ */
+
+  struct {
+    char x_scnlen[4];  /* section length */
+    char x_nreloc[2];  /* # relocation entries */
+    char x_nlinno[2];  /* # line numbers */
+  } x_scn;
+
+/*
+ *   Transfer vector (branch table)
+ */
+  
+  struct {
+    char x_tvfill[4];  /* tv fill value */
+    char x_tvlen[2];   /* length of .tv */
+    char x_tvran[2][2];        /* tv range */
+  } x_tv;              /* info about .tv section (in auxent of symbol .tv)) */
+};
+
+#define        COFF_SYMENT     struct COFF_syment
+#define        COFF_SYMESZ     18      
+#define        COFF_AUXENT     union COFF_auxent
+#define        COFF_AUXESZ     18
+
+#define COFF_ETEXT     "etext"
+
+/********************** RELOCATION DIRECTIVES **********************/
+
+struct COFF_reloc {
+  char r_vaddr[4];        /* Virtual address of item    */
+  char r_symndx[4];       /* Symbol index in the symtab */
+  char r_type[2];         /* Relocation type            */
+};
+
+#define COFF_RELOC struct COFF_reloc
+#define COFF_RELSZ 10
+
+#define COFF_DEF_DATA_SECTION_ALIGNMENT  4
+#define COFF_DEF_BSS_SECTION_ALIGNMENT   4
+#define COFF_DEF_TEXT_SECTION_ALIGNMENT  4
+
+/* For new sections we haven't heard of before */
+#define COFF_DEF_SECTION_ALIGNMENT       4
diff --git a/lib/libdss-include/linux/connector.h b/lib/libdss-include/linux/connector.h
new file mode 100644 (file)
index 0000000..caf9468
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ *     connector.h
+ * 
+ * 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
+ * All rights reserved.
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __CONNECTOR_H
+#define __CONNECTOR_H
+
+#include <linux/types.h>
+
+/*
+ * Process Events connector unique ids -- used for message routing
+ */
+#define CN_IDX_PROC                    0x1
+#define CN_VAL_PROC                    0x1
+#define CN_IDX_CIFS                    0x2
+#define CN_VAL_CIFS                     0x1
+#define CN_W1_IDX                      0x3     /* w1 communication */
+#define CN_W1_VAL                      0x1
+#define CN_IDX_V86D                    0x4
+#define CN_VAL_V86D_UVESAFB            0x1
+#define CN_IDX_BB                      0x5     /* BlackBoard, from the TSP GPL sampling framework */
+#define CN_DST_IDX                     0x6
+#define CN_DST_VAL                     0x1
+#define CN_IDX_DM                      0x7     /* Device Mapper */
+#define CN_VAL_DM_USERSPACE_LOG                0x1
+#define CN_IDX_DRBD                    0x8
+#define CN_VAL_DRBD                    0x1
+#define CN_KVP_IDX                     0x9     /* HyperV KVP */
+#define CN_KVP_VAL                     0x1     /* queries from the kernel */
+#define CN_VSS_IDX                     0xA     /* HyperV VSS */
+#define CN_VSS_VAL                     0x1     /* queries from the kernel */
+
+
+#define CN_NETLINK_USERS               11      /* Highest index + 1 */
+
+/*
+ * Maximum connector's message size.
+ */
+#define CONNECTOR_MAX_MSG_SIZE         16384
+
+/*
+ * idx and val are unique identifiers which 
+ * are used for message routing and 
+ * must be registered in connector.h for in-kernel usage.
+ */
+
+struct cb_id {
+       __u32 idx;
+       __u32 val;
+};
+
+struct cn_msg {
+       struct cb_id id;
+
+       __u32 seq;
+       __u32 ack;
+
+       __u16 len;              /* Length of the following data */
+       __u16 flags;
+       __u8 data[0];
+};
+
+#endif /* __CONNECTOR_H */
diff --git a/lib/libdss-include/linux/const.h b/lib/libdss-include/linux/const.h
new file mode 100644 (file)
index 0000000..c872bfd
--- /dev/null
@@ -0,0 +1,27 @@
+/* const.h: Macros for dealing with constants.  */
+
+#ifndef _LINUX_CONST_H
+#define _LINUX_CONST_H
+
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
+ *
+ * Similarly, _AT() will cast an expression with a type in C, but
+ * leave it unchanged in asm.
+ */
+
+#ifdef __ASSEMBLY__
+#define _AC(X,Y)       X
+#define _AT(T,X)       X
+#else
+#define __AC(X,Y)      (X##Y)
+#define _AC(X,Y)       __AC(X,Y)
+#define _AT(T,X)       ((T)(X))
+#endif
+
+#define _BITUL(x)      (_AC(1,UL) << (x))
+#define _BITULL(x)     (_AC(1,ULL) << (x))
+
+#endif /* !(_LINUX_CONST_H) */
diff --git a/lib/libdss-include/linux/cramfs_fs.h b/lib/libdss-include/linux/cramfs_fs.h
new file mode 100644 (file)
index 0000000..9cada1a
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef __CRAMFS_H
+#define __CRAMFS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+#define CRAMFS_SIGNATURE       "Compressed ROMFS"
+
+/*
+ * Width of various bitfields in struct cramfs_inode.
+ * Primarily used to generate warnings in mkcramfs.
+ */
+#define CRAMFS_MODE_WIDTH 16
+#define CRAMFS_UID_WIDTH 16
+#define CRAMFS_SIZE_WIDTH 24
+#define CRAMFS_GID_WIDTH 8
+#define CRAMFS_NAMELEN_WIDTH 6
+#define CRAMFS_OFFSET_WIDTH 26
+
+/*
+ * Since inode.namelen is a unsigned 6-bit number, the maximum cramfs
+ * path length is 63 << 2 = 252.
+ */
+#define CRAMFS_MAXPATHLEN (((1 << CRAMFS_NAMELEN_WIDTH) - 1) << 2)
+
+/*
+ * Reasonably terse representation of the inode data.
+ */
+struct cramfs_inode {
+       __u32 mode:CRAMFS_MODE_WIDTH, uid:CRAMFS_UID_WIDTH;
+       /* SIZE for device files is i_rdev */
+       __u32 size:CRAMFS_SIZE_WIDTH, gid:CRAMFS_GID_WIDTH;
+       /* NAMELEN is the length of the file name, divided by 4 and
+           rounded up.  (cramfs doesn't support hard links.) */
+       /* OFFSET: For symlinks and non-empty regular files, this
+          contains the offset (divided by 4) of the file data in
+          compressed form (starting with an array of block pointers;
+          see README).  For non-empty directories it is the offset
+          (divided by 4) of the inode of the first file in that
+          directory.  For anything else, offset is zero. */
+       __u32 namelen:CRAMFS_NAMELEN_WIDTH, offset:CRAMFS_OFFSET_WIDTH;
+};
+
+struct cramfs_info {
+       __u32 crc;
+       __u32 edition;
+       __u32 blocks;
+       __u32 files;
+};
+
+/*
+ * Superblock information at the beginning of the FS.
+ */
+struct cramfs_super {
+       __u32 magic;                    /* 0x28cd3d45 - random number */
+       __u32 size;                     /* length in bytes */
+       __u32 flags;                    /* feature flags */
+       __u32 future;                   /* reserved for future use */
+       __u8 signature[16];             /* "Compressed ROMFS" */
+       struct cramfs_info fsid;        /* unique filesystem info */
+       __u8 name[16];                  /* user-defined name */
+       struct cramfs_inode root;       /* root inode data */
+};
+
+/*
+ * Feature flags
+ *
+ * 0x00000000 - 0x000000ff: features that work for all past kernels
+ * 0x00000100 - 0xffffffff: features that don't work for past kernels
+ */
+#define CRAMFS_FLAG_FSID_VERSION_2     0x00000001      /* fsid version #2 */
+#define CRAMFS_FLAG_SORTED_DIRS                0x00000002      /* sorted dirs */
+#define CRAMFS_FLAG_HOLES              0x00000100      /* support for holes */
+#define CRAMFS_FLAG_WRONG_SIGNATURE    0x00000200      /* reserved */
+#define CRAMFS_FLAG_SHIFTED_ROOT_OFFSET        0x00000400      /* shifted root fs */
+
+/*
+ * Valid values in super.flags.  Currently we refuse to mount
+ * if (flags & ~CRAMFS_SUPPORTED_FLAGS).  Maybe that should be
+ * changed to test super.future instead.
+ */
+#define CRAMFS_SUPPORTED_FLAGS ( 0x000000ff \
+                               | CRAMFS_FLAG_HOLES \
+                               | CRAMFS_FLAG_WRONG_SIGNATURE \
+                               | CRAMFS_FLAG_SHIFTED_ROOT_OFFSET )
+
+
+#endif /* __CRAMFS_H */
diff --git a/lib/libdss-include/linux/cuda.h b/lib/libdss-include/linux/cuda.h
new file mode 100644 (file)
index 0000000..83d9f93
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Definitions for talking to the CUDA.  The CUDA is a microcontroller
+ * which controls the ADB, system power, RTC, and various other things.
+ *
+ * Copyright (C) 1996 Paul Mackerras.
+ */
+
+#ifndef _LINUX_CUDA_H
+#define _LINUX_CUDA_H
+
+/* CUDA commands (2nd byte) */
+#define CUDA_WARM_START                0
+#define CUDA_AUTOPOLL          1
+#define CUDA_GET_6805_ADDR     2
+#define CUDA_GET_TIME          3
+#define CUDA_GET_PRAM          7
+#define CUDA_SET_6805_ADDR     8
+#define CUDA_SET_TIME          9
+#define CUDA_POWERDOWN         0xa
+#define CUDA_POWERUP_TIME      0xb
+#define CUDA_SET_PRAM          0xc
+#define CUDA_MS_RESET          0xd
+#define CUDA_SEND_DFAC         0xe
+#define CUDA_RESET_SYSTEM      0x11
+#define CUDA_SET_IPL           0x12
+#define CUDA_SET_AUTO_RATE     0x14
+#define CUDA_GET_AUTO_RATE     0x16
+#define CUDA_SET_DEVICE_LIST   0x19
+#define CUDA_GET_DEVICE_LIST   0x1a
+#define CUDA_GET_SET_IIC       0x22
+
+
+#endif /* _LINUX_CUDA_H */
diff --git a/lib/libdss-include/linux/cyclades.h b/lib/libdss-include/linux/cyclades.h
new file mode 100644 (file)
index 0000000..145e3c8
--- /dev/null
@@ -0,0 +1,493 @@
+/* $Revision: 3.0 $$Date: 1998/11/02 14:20:59 $
+ * linux/include/linux/cyclades.h
+ *
+ * This file was initially written by
+ * Randolph Bentson <bentson@grieg.seaslug.org> and is maintained by
+ * Ivan Passos <ivan@cyclades.com>.
+ *
+ * This file contains the general definitions for the cyclades.c driver
+ *$Log: cyclades.h,v $
+ *Revision 3.1  2002/01/29 11:36:16  henrique
+ *added throttle field on struct cyclades_port to indicate whether the
+ *port is throttled or not
+ *
+ *Revision 3.1  2000/04/19 18:52:52  ivan
+ *converted address fields to unsigned long and added fields for physical
+ *addresses on cyclades_card structure;
+ *
+ *Revision 3.0  1998/11/02 14:20:59  ivan
+ *added nports field on cyclades_card structure;
+ *
+ *Revision 2.5  1998/08/03 16:57:01  ivan
+ *added cyclades_idle_stats structure;
+ * 
+ *Revision 2.4  1998/06/01 12:09:53  ivan
+ *removed closing_wait2 from cyclades_port structure;
+ *
+ *Revision 2.3  1998/03/16 18:01:12  ivan
+ *changes in the cyclades_port structure to get it closer to the 
+ *standard serial port structure;
+ *added constants for new ioctls;
+ *
+ *Revision 2.2  1998/02/17 16:50:00  ivan
+ *changes in the cyclades_port structure (addition of shutdown_wait and 
+ *chip_rev variables);
+ *added constants for new ioctls and for CD1400 rev. numbers.
+ *
+ *Revision 2.1 1997/10/24 16:03:00  ivan
+ *added rflow (which allows enabling the CD1400 special flow control 
+ *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to 
+ *cyclades_port structure;
+ *added Alpha support
+ *
+ *Revision 2.0  1997/06/30 10:30:00  ivan
+ *added some new doorbell command constants related to IOCTLW and
+ *UART error signaling
+ *
+ *Revision 1.8  1997/06/03 15:30:00  ivan
+ *added constant ZFIRM_HLT
+ *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin)
+ *
+ *Revision 1.7  1997/03/26 10:30:00  daniel
+ *new entries at the end of cyclades_port struct to reallocate
+ *variables illegally allocated within card memory.
+ *
+ *Revision 1.6  1996/09/09 18:35:30  bentson
+ *fold in changes for Cyclom-Z -- including structures for
+ *communicating with board as well modest changes to original
+ *structures to support new features.
+ *
+ *Revision 1.5  1995/11/13 21:13:31  bentson
+ *changes suggested by Michael Chastain <mec@duracef.shout.net>
+ *to support use of this file in non-kernel applications
+ *
+ *
+ */
+
+#ifndef _LINUX_CYCLADES_H
+#define _LINUX_CYCLADES_H
+
+#include <linux/types.h>
+
+struct cyclades_monitor {
+        unsigned long           int_count;
+        unsigned long           char_count;
+        unsigned long           char_max;
+        unsigned long           char_last;
+};
+
+/*
+ * These stats all reflect activity since the device was last initialized.
+ * (i.e., since the port was opened with no other processes already having it
+ * open)
+ */
+struct cyclades_idle_stats {
+    __kernel_time_t in_use;    /* Time device has been in use (secs) */
+    __kernel_time_t recv_idle; /* Time since last char received (secs) */
+    __kernel_time_t xmit_idle; /* Time since last char transmitted (secs) */
+    unsigned long  recv_bytes; /* Bytes received */
+    unsigned long  xmit_bytes; /* Bytes transmitted */
+    unsigned long  overruns;   /* Input overruns */
+    unsigned long  frame_errs; /* Input framing errors */
+    unsigned long  parity_errs;        /* Input parity errors */
+};
+
+#define CYCLADES_MAGIC  0x4359
+
+#define CYGETMON                0x435901
+#define CYGETTHRESH             0x435902
+#define CYSETTHRESH             0x435903
+#define CYGETDEFTHRESH          0x435904
+#define CYSETDEFTHRESH          0x435905
+#define CYGETTIMEOUT            0x435906
+#define CYSETTIMEOUT            0x435907
+#define CYGETDEFTIMEOUT         0x435908
+#define CYSETDEFTIMEOUT         0x435909
+#define CYSETRFLOW             0x43590a
+#define CYGETRFLOW             0x43590b
+#define CYSETRTSDTR_INV                0x43590c
+#define CYGETRTSDTR_INV                0x43590d
+#define CYZSETPOLLCYCLE                0x43590e
+#define CYZGETPOLLCYCLE                0x43590f
+#define CYGETCD1400VER         0x435910
+#define        CYSETWAIT               0x435912
+#define        CYGETWAIT               0x435913
+
+/*************** CYCLOM-Z ADDITIONS ***************/
+
+#define CZIOC           ('M' << 8)
+#define CZ_NBOARDS      (CZIOC|0xfa)
+#define CZ_BOOT_START   (CZIOC|0xfb)
+#define CZ_BOOT_DATA    (CZIOC|0xfc)
+#define CZ_BOOT_END     (CZIOC|0xfd)
+#define CZ_TEST         (CZIOC|0xfe)
+
+#define CZ_DEF_POLL    (HZ/25)
+
+#define MAX_BOARD       4       /* Max number of boards */
+#define MAX_DEV         256     /* Max number of ports total */
+#define        CYZ_MAX_SPEED   921600
+
+#define        CYZ_FIFO_SIZE   16
+
+#define CYZ_BOOT_NWORDS 0x100
+struct CYZ_BOOT_CTRL {
+        unsigned short  nboard;
+        int             status[MAX_BOARD];
+        int             nchannel[MAX_BOARD];
+        int             fw_rev[MAX_BOARD];
+        unsigned long   offset;
+        unsigned long   data[CYZ_BOOT_NWORDS];
+};
+
+
+#ifndef DP_WINDOW_SIZE
+/*
+ *     Memory Window Sizes
+ */
+
+#define        DP_WINDOW_SIZE          (0x00080000)    /* window size 512 Kb */
+#define        ZE_DP_WINDOW_SIZE       (0x00100000)    /* window size 1 Mb (Ze and
+                                                 8Zo V.2 */
+#define        CTRL_WINDOW_SIZE        (0x00000080)    /* runtime regs 128 bytes */
+
+/*
+ *     CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver
+ *     normally will access only interested on the fpga_id, fpga_version,
+ *     start_cpu and stop_cpu.
+ */
+
+struct CUSTOM_REG {
+       __u32   fpga_id;                /* FPGA Identification Register */
+       __u32   fpga_version;           /* FPGA Version Number Register */
+       __u32   cpu_start;              /* CPU start Register (write) */
+       __u32   cpu_stop;               /* CPU stop Register (write) */
+       __u32   misc_reg;               /* Miscellaneous Register */
+       __u32   idt_mode;               /* IDT mode Register */
+       __u32   uart_irq_status;        /* UART IRQ status Register */
+       __u32   clear_timer0_irq;       /* Clear timer interrupt Register */
+       __u32   clear_timer1_irq;       /* Clear timer interrupt Register */
+       __u32   clear_timer2_irq;       /* Clear timer interrupt Register */
+       __u32   test_register;          /* Test Register */
+       __u32   test_count;             /* Test Count Register */
+       __u32   timer_select;           /* Timer select register */
+       __u32   pr_uart_irq_status;     /* Prioritized UART IRQ stat Reg */
+       __u32   ram_wait_state;         /* RAM wait-state Register */
+       __u32   uart_wait_state;        /* UART wait-state Register */
+       __u32   timer_wait_state;       /* timer wait-state Register */
+       __u32   ack_wait_state;         /* ACK wait State Register */
+};
+
+/*
+ *     RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime
+ *     registers. This structure can be used to access the 9060 registers
+ *     (memory mapped).
+ */
+
+struct RUNTIME_9060 {
+       __u32   loc_addr_range; /* 00h - Local Address Range */
+       __u32   loc_addr_base;  /* 04h - Local Address Base */
+       __u32   loc_arbitr;     /* 08h - Local Arbitration */
+       __u32   endian_descr;   /* 0Ch - Big/Little Endian Descriptor */
+       __u32   loc_rom_range;  /* 10h - Local ROM Range */
+       __u32   loc_rom_base;   /* 14h - Local ROM Base */
+       __u32   loc_bus_descr;  /* 18h - Local Bus descriptor */
+       __u32   loc_range_mst;  /* 1Ch - Local Range for Master to PCI */
+       __u32   loc_base_mst;   /* 20h - Local Base for Master PCI */
+       __u32   loc_range_io;   /* 24h - Local Range for Master IO */
+       __u32   pci_base_mst;   /* 28h - PCI Base for Master PCI */
+       __u32   pci_conf_io;    /* 2Ch - PCI configuration for Master IO */
+       __u32   filler1;        /* 30h */
+       __u32   filler2;        /* 34h */
+       __u32   filler3;        /* 38h */
+       __u32   filler4;        /* 3Ch */
+       __u32   mail_box_0;     /* 40h - Mail Box 0 */
+       __u32   mail_box_1;     /* 44h - Mail Box 1 */
+       __u32   mail_box_2;     /* 48h - Mail Box 2 */
+       __u32   mail_box_3;     /* 4Ch - Mail Box 3 */
+       __u32   filler5;        /* 50h */
+       __u32   filler6;        /* 54h */
+       __u32   filler7;        /* 58h */
+       __u32   filler8;        /* 5Ch */
+       __u32   pci_doorbell;   /* 60h - PCI to Local Doorbell */
+       __u32   loc_doorbell;   /* 64h - Local to PCI Doorbell */
+       __u32   intr_ctrl_stat; /* 68h - Interrupt Control/Status */
+       __u32   init_ctrl;      /* 6Ch - EEPROM control, Init Control, etc */
+};
+
+/* Values for the Local Base Address re-map register */
+
+#define        WIN_RAM         0x00000001L     /* set the sliding window to RAM */
+#define        WIN_CREG        0x14000001L     /* set the window to custom Registers */
+
+/* Values timer select registers */
+
+#define        TIMER_BY_1M     0x00            /* clock divided by 1M */
+#define        TIMER_BY_256K   0x01            /* clock divided by 256k */
+#define        TIMER_BY_128K   0x02            /* clock divided by 128k */
+#define        TIMER_BY_32K    0x03            /* clock divided by 32k */
+
+/****************** ****************** *******************/
+#endif
+
+#ifndef ZFIRM_ID
+/* #include "zfwint.h" */
+/****************** ****************** *******************/
+/*
+ *     This file contains the definitions for interfacing with the
+ *     Cyclom-Z ZFIRM Firmware.
+ */
+
+/* General Constant definitions */
+
+#define        MAX_CHAN        64              /* max number of channels per board */
+
+/* firmware id structure (set after boot) */
+
+#define ID_ADDRESS     0x00000180L     /* signature/pointer address */
+#define        ZFIRM_ID        0x5557465AL     /* ZFIRM/U signature */
+#define        ZFIRM_HLT       0x59505B5CL     /* ZFIRM needs external power supply */
+#define        ZFIRM_RST       0x56040674L     /* RST signal (due to FW reset) */
+
+#define        ZF_TINACT_DEF   1000            /* default inactivity timeout 
+                                          (1000 ms) */
+#define        ZF_TINACT       ZF_TINACT_DEF
+
+struct FIRM_ID {
+       __u32   signature;              /* ZFIRM/U signature */
+       __u32   zfwctrl_addr;           /* pointer to ZFW_CTRL structure */
+};
+
+/* Op. System id */
+
+#define        C_OS_LINUX      0x00000030      /* generic Linux system */
+
+/* channel op_mode */
+
+#define        C_CH_DISABLE    0x00000000      /* channel is disabled */
+#define        C_CH_TXENABLE   0x00000001      /* channel Tx enabled */
+#define        C_CH_RXENABLE   0x00000002      /* channel Rx enabled */
+#define        C_CH_ENABLE     0x00000003      /* channel Tx/Rx enabled */
+#define        C_CH_LOOPBACK   0x00000004      /* Loopback mode */
+
+/* comm_parity - parity */
+
+#define        C_PR_NONE       0x00000000      /* None */
+#define        C_PR_ODD        0x00000001      /* Odd */
+#define C_PR_EVEN      0x00000002      /* Even */
+#define C_PR_MARK      0x00000004      /* Mark */
+#define C_PR_SPACE     0x00000008      /* Space */
+#define C_PR_PARITY    0x000000ff
+
+#define        C_PR_DISCARD    0x00000100      /* discard char with frame/par error */
+#define C_PR_IGNORE    0x00000200      /* ignore frame/par error */
+
+/* comm_data_l - data length and stop bits */
+
+#define C_DL_CS5       0x00000001
+#define C_DL_CS6       0x00000002
+#define C_DL_CS7       0x00000004
+#define C_DL_CS8       0x00000008
+#define        C_DL_CS         0x0000000f
+#define C_DL_1STOP     0x00000010
+#define C_DL_15STOP    0x00000020
+#define C_DL_2STOP     0x00000040
+#define        C_DL_STOP       0x000000f0
+
+/* interrupt enabling/status */
+
+#define        C_IN_DISABLE    0x00000000      /* zero, disable interrupts */
+#define        C_IN_TXBEMPTY   0x00000001      /* tx buffer empty */
+#define        C_IN_TXLOWWM    0x00000002      /* tx buffer below LWM */
+#define        C_IN_RXHIWM     0x00000010      /* rx buffer above HWM */
+#define        C_IN_RXNNDT     0x00000020      /* rx no new data timeout */
+#define        C_IN_MDCD       0x00000100      /* modem DCD change */
+#define        C_IN_MDSR       0x00000200      /* modem DSR change */
+#define        C_IN_MRI        0x00000400      /* modem RI change */
+#define        C_IN_MCTS       0x00000800      /* modem CTS change */
+#define        C_IN_RXBRK      0x00001000      /* Break received */
+#define        C_IN_PR_ERROR   0x00002000      /* parity error */
+#define        C_IN_FR_ERROR   0x00004000      /* frame error */
+#define C_IN_OVR_ERROR  0x00008000      /* overrun error */
+#define C_IN_RXOFL     0x00010000      /* RX buffer overflow */
+#define C_IN_IOCTLW    0x00020000      /* I/O control w/ wait */
+#define C_IN_MRTS      0x00040000      /* modem RTS drop */
+#define C_IN_ICHAR     0x00080000
+/* flow control */
+
+#define        C_FL_OXX        0x00000001      /* output Xon/Xoff flow control */
+#define        C_FL_IXX        0x00000002      /* output Xon/Xoff flow control */
+#define C_FL_OIXANY    0x00000004      /* output Xon/Xoff (any xon) */
+#define        C_FL_SWFLOW     0x0000000f
+
+/* flow status */
+
+#define        C_FS_TXIDLE     0x00000000      /* no Tx data in the buffer or UART */
+#define        C_FS_SENDING    0x00000001      /* UART is sending data */
+#define        C_FS_SWFLOW     0x00000002      /* Tx is stopped by received Xoff */
+
+/* rs_control/rs_status RS-232 signals */
+
+#define C_RS_PARAM     0x80000000      /* Indicates presence of parameter in 
+                                          IOCTLM command */
+#define        C_RS_RTS        0x00000001      /* RTS */
+#define        C_RS_DTR        0x00000004      /* DTR */
+#define        C_RS_DCD        0x00000100      /* CD */
+#define        C_RS_DSR        0x00000200      /* DSR */
+#define        C_RS_RI         0x00000400      /* RI */
+#define        C_RS_CTS        0x00000800      /* CTS */
+
+/* commands Host <-> Board */
+
+#define        C_CM_RESET      0x01            /* reset/flush buffers */
+#define        C_CM_IOCTL      0x02            /* re-read CH_CTRL */
+#define        C_CM_IOCTLW     0x03            /* re-read CH_CTRL, intr when done */
+#define        C_CM_IOCTLM     0x04            /* RS-232 outputs change */
+#define        C_CM_SENDXOFF   0x10            /* send Xoff */
+#define        C_CM_SENDXON    0x11            /* send Xon */
+#define C_CM_CLFLOW    0x12            /* Clear flow control (resume) */
+#define        C_CM_SENDBRK    0x41            /* send break */
+#define        C_CM_INTBACK    0x42            /* Interrupt back */
+#define        C_CM_SET_BREAK  0x43            /* Tx break on */
+#define        C_CM_CLR_BREAK  0x44            /* Tx break off */
+#define        C_CM_CMD_DONE   0x45            /* Previous command done */
+#define C_CM_INTBACK2  0x46            /* Alternate Interrupt back */
+#define        C_CM_TINACT     0x51            /* set inactivity detection */
+#define        C_CM_IRQ_ENBL   0x52            /* enable generation of interrupts */
+#define        C_CM_IRQ_DSBL   0x53            /* disable generation of interrupts */
+#define        C_CM_ACK_ENBL   0x54            /* enable acknowledged interrupt mode */
+#define        C_CM_ACK_DSBL   0x55            /* disable acknowledged intr mode */
+#define        C_CM_FLUSH_RX   0x56            /* flushes Rx buffer */
+#define        C_CM_FLUSH_TX   0x57            /* flushes Tx buffer */
+#define C_CM_Q_ENABLE  0x58            /* enables queue access from the 
+                                          driver */
+#define C_CM_Q_DISABLE  0x59            /* disables queue access from the 
+                                          driver */
+
+#define        C_CM_TXBEMPTY   0x60            /* Tx buffer is empty */
+#define        C_CM_TXLOWWM    0x61            /* Tx buffer low water mark */
+#define        C_CM_RXHIWM     0x62            /* Rx buffer high water mark */
+#define        C_CM_RXNNDT     0x63            /* rx no new data timeout */
+#define        C_CM_TXFEMPTY   0x64
+#define        C_CM_ICHAR      0x65
+#define        C_CM_MDCD       0x70            /* modem DCD change */
+#define        C_CM_MDSR       0x71            /* modem DSR change */
+#define        C_CM_MRI        0x72            /* modem RI change */
+#define        C_CM_MCTS       0x73            /* modem CTS change */
+#define C_CM_MRTS      0x74            /* modem RTS drop */
+#define        C_CM_RXBRK      0x84            /* Break received */
+#define        C_CM_PR_ERROR   0x85            /* Parity error */
+#define        C_CM_FR_ERROR   0x86            /* Frame error */
+#define C_CM_OVR_ERROR  0x87            /* Overrun error */
+#define C_CM_RXOFL     0x88            /* RX buffer overflow */
+#define        C_CM_CMDERROR   0x90            /* command error */
+#define        C_CM_FATAL      0x91            /* fatal error */
+#define        C_CM_HW_RESET   0x92            /* reset board */
+
+/*
+ *     CH_CTRL - This per port structure contains all parameters
+ *     that control an specific port. It can be seen as the
+ *     configuration registers of a "super-serial-controller".
+ */
+
+struct CH_CTRL {
+       __u32   op_mode;        /* operation mode */
+       __u32   intr_enable;    /* interrupt masking */
+       __u32   sw_flow;        /* SW flow control */
+       __u32   flow_status;    /* output flow status */
+       __u32   comm_baud;      /* baud rate  - numerically specified */
+       __u32   comm_parity;    /* parity */
+       __u32   comm_data_l;    /* data length/stop */
+       __u32   comm_flags;     /* other flags */
+       __u32   hw_flow;        /* HW flow control */
+       __u32   rs_control;     /* RS-232 outputs */
+       __u32   rs_status;      /* RS-232 inputs */
+       __u32   flow_xon;       /* xon char */
+       __u32   flow_xoff;      /* xoff char */
+       __u32   hw_overflow;    /* hw overflow counter */
+       __u32   sw_overflow;    /* sw overflow counter */
+       __u32   comm_error;     /* frame/parity error counter */
+       __u32 ichar;
+       __u32 filler[7];
+};
+
+
+/*
+ *     BUF_CTRL - This per channel structure contains
+ *     all Tx and Rx buffer control for a given channel.
+ */
+
+struct BUF_CTRL        {
+       __u32   flag_dma;       /* buffers are in Host memory */
+       __u32   tx_bufaddr;     /* address of the tx buffer */
+       __u32   tx_bufsize;     /* tx buffer size */
+       __u32   tx_threshold;   /* tx low water mark */
+       __u32   tx_get;         /* tail index tx buf */
+       __u32   tx_put;         /* head index tx buf */
+       __u32   rx_bufaddr;     /* address of the rx buffer */
+       __u32   rx_bufsize;     /* rx buffer size */
+       __u32   rx_threshold;   /* rx high water mark */
+       __u32   rx_get;         /* tail index rx buf */
+       __u32   rx_put;         /* head index rx buf */
+       __u32   filler[5];      /* filler to align structures */
+};
+
+/*
+ *     BOARD_CTRL - This per board structure contains all global 
+ *     control fields related to the board.
+ */
+
+struct BOARD_CTRL {
+
+       /* static info provided by the on-board CPU */
+       __u32   n_channel;      /* number of channels */
+       __u32   fw_version;     /* firmware version */
+
+       /* static info provided by the driver */
+       __u32   op_system;      /* op_system id */
+       __u32   dr_version;     /* driver version */
+
+       /* board control area */
+       __u32   inactivity;     /* inactivity control */
+
+       /* host to FW commands */
+       __u32   hcmd_channel;   /* channel number */
+       __u32   hcmd_param;     /* pointer to parameters */
+
+       /* FW to Host commands */
+       __u32   fwcmd_channel;  /* channel number */
+       __u32   fwcmd_param;    /* pointer to parameters */
+       __u32   zf_int_queue_addr; /* offset for INT_QUEUE structure */
+
+       /* filler so the structures are aligned */
+       __u32   filler[6];
+};
+
+/* Host Interrupt Queue */
+
+#define QUEUE_SIZE     (10*MAX_CHAN)
+
+struct INT_QUEUE {
+       unsigned char   intr_code[QUEUE_SIZE];
+       unsigned long   channel[QUEUE_SIZE];
+       unsigned long   param[QUEUE_SIZE];
+       unsigned long   put;
+       unsigned long   get;
+};
+
+/*
+ *     ZFW_CTRL - This is the data structure that includes all other
+ *     data structures used by the Firmware.
+ */
+struct ZFW_CTRL {
+       struct BOARD_CTRL       board_ctrl;
+       struct CH_CTRL          ch_ctrl[MAX_CHAN];
+       struct BUF_CTRL         buf_ctrl[MAX_CHAN];
+};
+
+/****************** ****************** *******************/
+#endif
+
+#endif /* _LINUX_CYCLADES_H */
diff --git a/lib/libdss-include/linux/cycx_cfm.h b/lib/libdss-include/linux/cycx_cfm.h
new file mode 100644 (file)
index 0000000..032d26e
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+* cycx_cfm.h   Cyclom 2X WAN Link Driver.
+*              Definitions for the Cyclom 2X Firmware Module (CFM).
+*
+* Author:      Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+*
+* Copyright:   (c) 1998-2003 Arnaldo Carvalho de Melo
+*
+* Based on sdlasfm.h by Gene Kozin <74604.152@compuserve.com>
+*
+*              This program is free software; you can redistribute it and/or
+*              modify it under the terms of the GNU General Public License
+*              as published by the Free Software Foundation; either version
+*              2 of the License, or (at your option) any later version.
+* ============================================================================
+* 1998/08/08   acme            Initial version.
+*/
+#ifndef        _CYCX_CFM_H
+#define        _CYCX_CFM_H
+
+/* Defines */
+
+#define        CFM_VERSION     2
+#define        CFM_SIGNATURE   "CFM - Cyclades CYCX Firmware Module"
+
+/* min/max */
+#define        CFM_IMAGE_SIZE  0x20000 /* max size of CYCX code image file */
+#define        CFM_DESCR_LEN   256     /* max length of description string */
+#define        CFM_MAX_CYCX    1       /* max number of compatible adapters */
+#define        CFM_LOAD_BUFSZ  0x400   /* buffer size for reset code (buffer_load) */
+
+/* Firmware Commands */
+#define GEN_POWER_ON   0x1280
+
+#define GEN_SET_SEG    0x1401  /* boot segment setting. */
+#define GEN_BOOT_DAT   0x1402  /* boot data. */
+#define GEN_START      0x1403  /* board start. */
+#define GEN_DEFPAR     0x1404  /* buffer length for boot. */
+
+/* Adapter Types */
+#define CYCX_2X                2
+/* for now only the 2X is supported, no plans to support 8X or 16X */
+#define CYCX_8X                8
+#define CYCX_16X       16
+
+#define        CFID_X25_2X     5200
+
+/**
+ *     struct cycx_fw_info - firmware module information.
+ *     @codeid - firmware ID
+ *     @version - firmware version number
+ *     @adapter - compatible adapter types
+ *     @memsize - minimum memory size
+ *     @reserved - reserved
+ *     @startoffs - entry point offset
+ *     @winoffs - dual-port memory window offset
+ *     @codeoffs - code load offset
+ *     @codesize - code size
+ *     @dataoffs - configuration data load offset
+ *     @datasize - configuration data size
+ */
+struct cycx_fw_info {
+       unsigned short  codeid;
+       unsigned short  version;
+       unsigned short  adapter[CFM_MAX_CYCX];
+       unsigned long   memsize;
+       unsigned short  reserved[2];
+       unsigned short  startoffs;
+       unsigned short  winoffs;
+       unsigned short  codeoffs;
+       unsigned long   codesize;
+       unsigned short  dataoffs;
+       unsigned long   datasize;
+};
+
+/**
+ *     struct cycx_firmware - CYCX firmware file structure
+ *     @signature - CFM file signature
+ *     @version - file format version
+ *     @checksum - info + image
+ *     @reserved - reserved
+ *     @descr - description string
+ *     @info - firmware module info
+ *     @image - code image (variable size)
+ */
+struct cycx_firmware {
+       char                signature[80];
+       unsigned short      version;
+       unsigned short      checksum;
+       unsigned short      reserved[6];
+       char                descr[CFM_DESCR_LEN];
+       struct cycx_fw_info info;
+       unsigned char       image[0];
+};
+
+struct cycx_fw_header {
+       unsigned long  reset_size;
+       unsigned long  data_size;
+       unsigned long  code_size;
+};
+#endif /* _CYCX_CFM_H */
diff --git a/lib/libdss-include/linux/dcbnl.h b/lib/libdss-include/linux/dcbnl.h
new file mode 100644 (file)
index 0000000..3ea470f
--- /dev/null
@@ -0,0 +1,755 @@
+/*
+ * Copyright (c) 2008-2011, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Author: Lucy Liu <lucy.liu@intel.com>
+ */
+
+#ifndef __LINUX_DCBNL_H__
+#define __LINUX_DCBNL_H__
+
+#include <linux/types.h>
+
+/* IEEE 802.1Qaz std supported values */
+#define IEEE_8021QAZ_MAX_TCS   8
+
+#define IEEE_8021QAZ_TSA_STRICT                0
+#define IEEE_8021QAZ_TSA_CB_SHAPER     1
+#define IEEE_8021QAZ_TSA_ETS           2
+#define IEEE_8021QAZ_TSA_VENDOR                255
+
+/* This structure contains the IEEE 802.1Qaz ETS managed object
+ *
+ * @willing: willing bit in ETS configuration TLV
+ * @ets_cap: indicates supported capacity of ets feature
+ * @cbs: credit based shaper ets algorithm supported
+ * @tc_tx_bw: tc tx bandwidth indexed by traffic class
+ * @tc_rx_bw: tc rx bandwidth indexed by traffic class
+ * @tc_tsa: TSA Assignment table, indexed by traffic class
+ * @prio_tc: priority assignment table mapping 8021Qp to traffic class
+ * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV
+ * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV
+ * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV
+ *
+ * Recommended values are used to set fields in the ETS recommendation TLV
+ * with hardware offloaded LLDP.
+ *
+ * ----
+ *  TSA Assignment 8 bit identifiers
+ *     0       strict priority
+ *     1       credit-based shaper
+ *     2       enhanced transmission selection
+ *     3-254   reserved
+ *     255     vendor specific
+ */
+struct ieee_ets {
+       __u8    willing;
+       __u8    ets_cap;
+       __u8    cbs;
+       __u8    tc_tx_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_rx_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_tsa[IEEE_8021QAZ_MAX_TCS];
+       __u8    prio_tc[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_reco_bw[IEEE_8021QAZ_MAX_TCS];
+       __u8    tc_reco_tsa[IEEE_8021QAZ_MAX_TCS];
+       __u8    reco_prio_tc[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains rate limit extension to the IEEE 802.1Qaz ETS
+ * managed object.
+ * Values are 64 bits long and specified in Kbps to enable usage over both
+ * slow and very fast networks.
+ *
+ * @tc_maxrate: maximal tc tx bandwidth indexed by traffic class
+ */
+struct ieee_maxrate {
+       __u64   tc_maxrate[IEEE_8021QAZ_MAX_TCS];
+};
+
+enum dcbnl_cndd_states {
+       DCB_CNDD_RESET = 0,
+       DCB_CNDD_EDGE,
+       DCB_CNDD_INTERIOR,
+       DCB_CNDD_INTERIOR_READY,
+};
+
+/* This structure contains the IEEE 802.1Qau QCN managed object.
+ *
+ *@rpg_enable: enable QCN RP
+ *@rppp_max_rps: maximum number of RPs allowed for this CNPV on this port
+ *@rpg_time_reset: time between rate increases if no CNMs received.
+ *                given in u-seconds
+ *@rpg_byte_reset: transmitted data between rate increases if no CNMs received.
+ *                given in Bytes
+ *@rpg_threshold: The number of times rpByteStage or rpTimeStage can count
+ *                before RP rate control state machine advances states
+ *@rpg_max_rate: the maxinun rate, in Mbits per second,
+ *              at which an RP can transmit
+ *@rpg_ai_rate: The rate, in Mbits per second,
+ *             used to increase rpTargetRate in the RPR_ACTIVE_INCREASE
+ *@rpg_hai_rate: The rate, in Mbits per second,
+ *              used to increase rpTargetRate in the RPR_HYPER_INCREASE state
+ *@rpg_gd: Upon CNM receive, flow rate is limited to (Fb/Gd)*CurrentRate.
+ *        rpgGd is given as log2(Gd), where Gd may only be powers of 2
+ *@rpg_min_dec_fac: The minimum factor by which the current transmit rate
+ *                 can be changed by reception of a CNM.
+ *                 value is given as percentage (1-100)
+ *@rpg_min_rate: The minimum value, in bits per second, for rate to limit
+ *@cndd_state_machine: The state of the congestion notification domain
+ *                    defense state machine, as defined by IEEE 802.3Qau
+ *                    section 32.1.1. In the interior ready state,
+ *                    the QCN capable hardware may add CN-TAG TLV to the
+ *                    outgoing traffic, to specifically identify outgoing
+ *                    flows.
+ */
+
+struct ieee_qcn {
+       __u8 rpg_enable[IEEE_8021QAZ_MAX_TCS];
+       __u32 rppp_max_rps[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_time_reset[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_byte_reset[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_threshold[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_max_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_ai_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_hai_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_gd[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_min_dec_fac[IEEE_8021QAZ_MAX_TCS];
+       __u32 rpg_min_rate[IEEE_8021QAZ_MAX_TCS];
+       __u32 cndd_state_machine[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains the IEEE 802.1Qau QCN statistics.
+ *
+ *@rppp_rp_centiseconds: the number of RP-centiseconds accumulated
+ *                      by RPs at this priority level on this Port
+ *@rppp_created_rps: number of active RPs(flows) that react to CNMs
+ */
+
+struct ieee_qcn_stats {
+       __u64 rppp_rp_centiseconds[IEEE_8021QAZ_MAX_TCS];
+       __u32 rppp_created_rps[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* This structure contains the IEEE 802.1Qaz PFC managed object
+ *
+ * @pfc_cap: Indicates the number of traffic classes on the local device
+ *          that may simultaneously have PFC enabled.
+ * @pfc_en: bitmap indicating pfc enabled traffic classes
+ * @mbc: enable macsec bypass capability
+ * @delay: the allowance made for a round-trip propagation delay of the
+ *        link in bits.
+ * @requests: count of the sent pfc frames
+ * @indications: count of the received pfc frames
+ */
+struct ieee_pfc {
+       __u8    pfc_cap;
+       __u8    pfc_en;
+       __u8    mbc;
+       __u16   delay;
+       __u64   requests[IEEE_8021QAZ_MAX_TCS];
+       __u64   indications[IEEE_8021QAZ_MAX_TCS];
+};
+
+/* CEE DCBX std supported values */
+#define CEE_DCBX_MAX_PGS       8
+#define CEE_DCBX_MAX_PRIO      8
+
+/**
+ * struct cee_pg - CEE Priority-Group managed object
+ *
+ * @willing: willing bit in the PG tlv
+ * @error: error bit in the PG tlv
+ * @pg_en: enable bit of the PG feature
+ * @tcs_supported: number of traffic classes supported
+ * @pg_bw: bandwidth percentage for each priority group
+ * @prio_pg: priority to PG mapping indexed by priority
+ */
+struct cee_pg {
+       __u8    willing;
+       __u8    error;
+       __u8    pg_en;
+       __u8    tcs_supported;
+       __u8    pg_bw[CEE_DCBX_MAX_PGS];
+       __u8    prio_pg[CEE_DCBX_MAX_PGS];
+};
+
+/**
+ * struct cee_pfc - CEE PFC managed object
+ *
+ * @willing: willing bit in the PFC tlv
+ * @error: error bit in the PFC tlv
+ * @pfc_en: bitmap indicating pfc enabled traffic classes
+ * @tcs_supported: number of traffic classes supported
+ */
+struct cee_pfc {
+       __u8    willing;
+       __u8    error;
+       __u8    pfc_en;
+       __u8    tcs_supported;
+};
+
+/* IEEE 802.1Qaz std supported values */
+#define IEEE_8021QAZ_APP_SEL_ETHERTYPE 1
+#define IEEE_8021QAZ_APP_SEL_STREAM    2
+#define IEEE_8021QAZ_APP_SEL_DGRAM     3
+#define IEEE_8021QAZ_APP_SEL_ANY       4
+
+/* This structure contains the IEEE 802.1Qaz APP managed object. This
+ * object is also used for the CEE std as well.
+ *
+ * @selector: protocol identifier type
+ * @protocol: protocol of type indicated
+ * @priority: 3-bit unsigned integer indicating priority for IEEE
+ *            8-bit 802.1p user priority bitmap for CEE
+ *
+ * ----
+ *  Selector field values for IEEE 802.1Qaz
+ *     0       Reserved
+ *     1       Ethertype
+ *     2       Well known port number over TCP or SCTP
+ *     3       Well known port number over UDP or DCCP
+ *     4       Well known port number over TCP, SCTP, UDP, or DCCP
+ *     5-7     Reserved
+ *
+ *  Selector field values for CEE
+ *     0       Ethertype
+ *     1       Well known port number over TCP or UDP
+ *     2-3     Reserved
+ */
+struct dcb_app {
+       __u8    selector;
+       __u8    priority;
+       __u16   protocol;
+};
+
+/**
+ * struct dcb_peer_app_info - APP feature information sent by the peer
+ *
+ * @willing: willing bit in the peer APP tlv
+ * @error: error bit in the peer APP tlv
+ *
+ * In addition to this information the full peer APP tlv also contains
+ * a table of 'app_count' APP objects defined above.
+ */
+struct dcb_peer_app_info {
+       __u8    willing;
+       __u8    error;
+};
+
+struct dcbmsg {
+       __u8               dcb_family;
+       __u8               cmd;
+       __u16              dcb_pad;
+};
+
+/**
+ * enum dcbnl_commands - supported DCB commands
+ *
+ * @DCB_CMD_UNDEFINED: unspecified command to catch errors
+ * @DCB_CMD_GSTATE: request the state of DCB in the device
+ * @DCB_CMD_SSTATE: set the state of DCB in the device
+ * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx
+ * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx
+ * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx
+ * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx
+ * @DCB_CMD_PFC_GCFG: request the priority flow control configuration
+ * @DCB_CMD_PFC_SCFG: set the priority flow control configuration
+ * @DCB_CMD_SET_ALL: apply all changes to the underlying device
+ * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying
+ *                        device.  Only useful when using bonding.
+ * @DCB_CMD_GCAP: request the DCB capabilities of the device
+ * @DCB_CMD_GNUMTCS: get the number of traffic classes currently supported
+ * @DCB_CMD_SNUMTCS: set the number of traffic classes
+ * @DCB_CMD_GBCN: set backward congestion notification configuration
+ * @DCB_CMD_SBCN: get backward congestion notification configration.
+ * @DCB_CMD_GAPP: get application protocol configuration
+ * @DCB_CMD_SAPP: set application protocol configuration
+ * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration
+ * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration
+ * @DCB_CMD_GDCBX: get DCBX engine configuration
+ * @DCB_CMD_SDCBX: set DCBX engine configuration
+ * @DCB_CMD_GFEATCFG: get DCBX features flags
+ * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
+ * @DCB_CMD_CEE_GET: get CEE aggregated configuration
+ * @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration
+ */
+enum dcbnl_commands {
+       DCB_CMD_UNDEFINED,
+
+       DCB_CMD_GSTATE,
+       DCB_CMD_SSTATE,
+
+       DCB_CMD_PGTX_GCFG,
+       DCB_CMD_PGTX_SCFG,
+       DCB_CMD_PGRX_GCFG,
+       DCB_CMD_PGRX_SCFG,
+
+       DCB_CMD_PFC_GCFG,
+       DCB_CMD_PFC_SCFG,
+
+       DCB_CMD_SET_ALL,
+
+       DCB_CMD_GPERM_HWADDR,
+
+       DCB_CMD_GCAP,
+
+       DCB_CMD_GNUMTCS,
+       DCB_CMD_SNUMTCS,
+
+       DCB_CMD_PFC_GSTATE,
+       DCB_CMD_PFC_SSTATE,
+
+       DCB_CMD_BCN_GCFG,
+       DCB_CMD_BCN_SCFG,
+
+       DCB_CMD_GAPP,
+       DCB_CMD_SAPP,
+
+       DCB_CMD_IEEE_SET,
+       DCB_CMD_IEEE_GET,
+
+       DCB_CMD_GDCBX,
+       DCB_CMD_SDCBX,
+
+       DCB_CMD_GFEATCFG,
+       DCB_CMD_SFEATCFG,
+
+       DCB_CMD_CEE_GET,
+       DCB_CMD_IEEE_DEL,
+
+       __DCB_CMD_ENUM_MAX,
+       DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_attrs - DCB top-level netlink attributes
+ *
+ * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING)
+ * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8)
+ * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8)
+ * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED)
+ * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8)
+ * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED)
+ * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8)
+ * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED)
+ * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED)
+ * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED)
+ * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED)
+ * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
+ * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
+ * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
+ * @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED)
+ */
+enum dcbnl_attrs {
+       DCB_ATTR_UNDEFINED,
+
+       DCB_ATTR_IFNAME,
+       DCB_ATTR_STATE,
+       DCB_ATTR_PFC_STATE,
+       DCB_ATTR_PFC_CFG,
+       DCB_ATTR_NUM_TC,
+       DCB_ATTR_PG_CFG,
+       DCB_ATTR_SET_ALL,
+       DCB_ATTR_PERM_HWADDR,
+       DCB_ATTR_CAP,
+       DCB_ATTR_NUMTCS,
+       DCB_ATTR_BCN,
+       DCB_ATTR_APP,
+
+       /* IEEE std attributes */
+       DCB_ATTR_IEEE,
+
+       DCB_ATTR_DCBX,
+       DCB_ATTR_FEATCFG,
+
+       /* CEE nested attributes */
+       DCB_ATTR_CEE,
+
+       __DCB_ATTR_ENUM_MAX,
+       DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum ieee_attrs - IEEE 802.1Qaz get/set attributes
+ *
+ * @DCB_ATTR_IEEE_UNSPEC: unspecified
+ * @DCB_ATTR_IEEE_ETS: negotiated ETS configuration
+ * @DCB_ATTR_IEEE_PFC: negotiated PFC configuration
+ * @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration
+ * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
+ * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
+ * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
+ */
+enum ieee_attrs {
+       DCB_ATTR_IEEE_UNSPEC,
+       DCB_ATTR_IEEE_ETS,
+       DCB_ATTR_IEEE_PFC,
+       DCB_ATTR_IEEE_APP_TABLE,
+       DCB_ATTR_IEEE_PEER_ETS,
+       DCB_ATTR_IEEE_PEER_PFC,
+       DCB_ATTR_IEEE_PEER_APP,
+       DCB_ATTR_IEEE_MAXRATE,
+       DCB_ATTR_IEEE_QCN,
+       DCB_ATTR_IEEE_QCN_STATS,
+       __DCB_ATTR_IEEE_MAX
+};
+#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
+
+enum ieee_attrs_app {
+       DCB_ATTR_IEEE_APP_UNSPEC,
+       DCB_ATTR_IEEE_APP,
+       __DCB_ATTR_IEEE_APP_MAX
+};
+#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
+
+/**
+ * enum cee_attrs - CEE DCBX get attributes.
+ *
+ * @DCB_ATTR_CEE_UNSPEC: unspecified
+ * @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only
+ * @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only
+ * @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only
+ * @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG)
+ * @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG)
+ * @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG)
+ * @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP)
+ * @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG)
+ *
+ * An aggregated collection of the cee std negotiated parameters.
+ */
+enum cee_attrs {
+       DCB_ATTR_CEE_UNSPEC,
+       DCB_ATTR_CEE_PEER_PG,
+       DCB_ATTR_CEE_PEER_PFC,
+       DCB_ATTR_CEE_PEER_APP_TABLE,
+       DCB_ATTR_CEE_TX_PG,
+       DCB_ATTR_CEE_RX_PG,
+       DCB_ATTR_CEE_PFC,
+       DCB_ATTR_CEE_APP_TABLE,
+       DCB_ATTR_CEE_FEAT,
+       __DCB_ATTR_CEE_MAX
+};
+#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1)
+
+enum peer_app_attr {
+       DCB_ATTR_CEE_PEER_APP_UNSPEC,
+       DCB_ATTR_CEE_PEER_APP_INFO,
+       DCB_ATTR_CEE_PEER_APP,
+       __DCB_ATTR_CEE_PEER_APP_MAX
+};
+#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1)
+
+enum cee_attrs_app {
+       DCB_ATTR_CEE_APP_UNSPEC,
+       DCB_ATTR_CEE_APP,
+       __DCB_ATTR_CEE_APP_MAX
+};
+#define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1)
+
+/**
+ * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
+ *
+ * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8)
+ * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined
+ * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG)
+ *
+ */
+enum dcbnl_pfc_up_attrs {
+       DCB_PFC_UP_ATTR_UNDEFINED,
+
+       DCB_PFC_UP_ATTR_0,
+       DCB_PFC_UP_ATTR_1,
+       DCB_PFC_UP_ATTR_2,
+       DCB_PFC_UP_ATTR_3,
+       DCB_PFC_UP_ATTR_4,
+       DCB_PFC_UP_ATTR_5,
+       DCB_PFC_UP_ATTR_6,
+       DCB_PFC_UP_ATTR_7,
+       DCB_PFC_UP_ATTR_ALL,
+
+       __DCB_PFC_UP_ATTR_ENUM_MAX,
+       DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_pg_attrs - DCB Priority Group attributes
+ *
+ * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_PG_ATTR_TC_0: Priority Group Traffic Class 0 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_1: Priority Group Traffic Class 1 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_2: Priority Group Traffic Class 2 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_3: Priority Group Traffic Class 3 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_4: Priority Group Traffic Class 4 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_5: Priority Group Traffic Class 5 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_6: Priority Group Traffic Class 6 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_7: Priority Group Traffic Class 7 configuration (NLA_NESTED)
+ * @DCB_PG_ATTR_TC_MAX: highest attribute number currently defined
+ * @DCB_PG_ATTR_TC_ALL: apply to all traffic classes (NLA_NESTED)
+ * @DCB_PG_ATTR_BW_ID_0: Percent of link bandwidth for Priority Group 0 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_1: Percent of link bandwidth for Priority Group 1 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_2: Percent of link bandwidth for Priority Group 2 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_3: Percent of link bandwidth for Priority Group 3 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_4: Percent of link bandwidth for Priority Group 4 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_5: Percent of link bandwidth for Priority Group 5 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_6: Percent of link bandwidth for Priority Group 6 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_7: Percent of link bandwidth for Priority Group 7 (NLA_U8)
+ * @DCB_PG_ATTR_BW_ID_MAX: highest attribute number currently defined
+ * @DCB_PG_ATTR_BW_ID_ALL: apply to all priority groups (NLA_FLAG)
+ *
+ */
+enum dcbnl_pg_attrs {
+       DCB_PG_ATTR_UNDEFINED,
+
+       DCB_PG_ATTR_TC_0,
+       DCB_PG_ATTR_TC_1,
+       DCB_PG_ATTR_TC_2,
+       DCB_PG_ATTR_TC_3,
+       DCB_PG_ATTR_TC_4,
+       DCB_PG_ATTR_TC_5,
+       DCB_PG_ATTR_TC_6,
+       DCB_PG_ATTR_TC_7,
+       DCB_PG_ATTR_TC_MAX,
+       DCB_PG_ATTR_TC_ALL,
+
+       DCB_PG_ATTR_BW_ID_0,
+       DCB_PG_ATTR_BW_ID_1,
+       DCB_PG_ATTR_BW_ID_2,
+       DCB_PG_ATTR_BW_ID_3,
+       DCB_PG_ATTR_BW_ID_4,
+       DCB_PG_ATTR_BW_ID_5,
+       DCB_PG_ATTR_BW_ID_6,
+       DCB_PG_ATTR_BW_ID_7,
+       DCB_PG_ATTR_BW_ID_MAX,
+       DCB_PG_ATTR_BW_ID_ALL,
+
+       __DCB_PG_ATTR_ENUM_MAX,
+       DCB_PG_ATTR_MAX = __DCB_PG_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_tc_attrs - DCB Traffic Class attributes
+ *
+ * @DCB_TC_ATTR_PARAM_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_TC_ATTR_PARAM_PGID: (NLA_U8) Priority group the traffic class belongs to
+ *                          Valid values are:  0-7
+ * @DCB_TC_ATTR_PARAM_UP_MAPPING: (NLA_U8) Traffic class to user priority map
+ *                                Some devices may not support changing the
+ *                                user priority map of a TC.
+ * @DCB_TC_ATTR_PARAM_STRICT_PRIO: (NLA_U8) Strict priority setting
+ *                                 0 - none
+ *                                 1 - group strict
+ *                                 2 - link strict
+ * @DCB_TC_ATTR_PARAM_BW_PCT: optional - (NLA_U8) If supported by the device and
+ *                            not configured to use link strict priority,
+ *                            this is the percentage of bandwidth of the
+ *                            priority group this traffic class belongs to
+ * @DCB_TC_ATTR_PARAM_ALL: (NLA_FLAG) all traffic class parameters
+ *
+ */
+enum dcbnl_tc_attrs {
+       DCB_TC_ATTR_PARAM_UNDEFINED,
+
+       DCB_TC_ATTR_PARAM_PGID,
+       DCB_TC_ATTR_PARAM_UP_MAPPING,
+       DCB_TC_ATTR_PARAM_STRICT_PRIO,
+       DCB_TC_ATTR_PARAM_BW_PCT,
+       DCB_TC_ATTR_PARAM_ALL,
+
+       __DCB_TC_ATTR_PARAM_ENUM_MAX,
+       DCB_TC_ATTR_PARAM_MAX = __DCB_TC_ATTR_PARAM_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_cap_attrs - DCB Capability attributes
+ *
+ * @DCB_CAP_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_CAP_ATTR_ALL: (NLA_FLAG) all capability parameters
+ * @DCB_CAP_ATTR_PG: (NLA_U8) device supports Priority Groups
+ * @DCB_CAP_ATTR_PFC: (NLA_U8) device supports Priority Flow Control
+ * @DCB_CAP_ATTR_UP2TC: (NLA_U8) device supports user priority to
+ *                               traffic class mapping
+ * @DCB_CAP_ATTR_PG_TCS: (NLA_U8) bitmap where each bit represents a
+ *                                number of traffic classes the device
+ *                                can be configured to use for Priority Groups
+ * @DCB_CAP_ATTR_PFC_TCS: (NLA_U8) bitmap where each bit represents a
+ *                                 number of traffic classes the device can be
+ *                                 configured to use for Priority Flow Control
+ * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority
+ * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion
+ *                             Notification
+ * @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine
+ *
+ */
+enum dcbnl_cap_attrs {
+       DCB_CAP_ATTR_UNDEFINED,
+       DCB_CAP_ATTR_ALL,
+       DCB_CAP_ATTR_PG,
+       DCB_CAP_ATTR_PFC,
+       DCB_CAP_ATTR_UP2TC,
+       DCB_CAP_ATTR_PG_TCS,
+       DCB_CAP_ATTR_PFC_TCS,
+       DCB_CAP_ATTR_GSP,
+       DCB_CAP_ATTR_BCN,
+       DCB_CAP_ATTR_DCBX,
+
+       __DCB_CAP_ATTR_ENUM_MAX,
+       DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * DCBX capability flags
+ *
+ * @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent.
+ *                     'set' routines are used to configure the device with
+ *                     the negotiated parameters
+ *
+ * @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but
+ *                            by another entity
+ *                            'get' routines are used to retrieve the
+ *                            negotiated parameters
+ *                            'set' routines can be used to set the initial
+ *                            negotiation configuration
+ *
+ * @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine
+ *                        supports the CEE protocol flavor
+ *
+ * @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine
+ *                         supports the IEEE protocol flavor
+ *
+ * @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine
+ *                       supports static configuration (i.e no actual
+ *                       negotiation is performed negotiated parameters equal
+ *                       the initial configuration)
+ *
+ */
+#define DCB_CAP_DCBX_HOST              0x01
+#define DCB_CAP_DCBX_LLD_MANAGED       0x02
+#define DCB_CAP_DCBX_VER_CEE           0x04
+#define DCB_CAP_DCBX_VER_IEEE          0x08
+#define DCB_CAP_DCBX_STATIC            0x10
+
+/**
+ * enum dcbnl_numtcs_attrs - number of traffic classes
+ *
+ * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_NUMTCS_ATTR_ALL: (NLA_FLAG) all traffic class attributes
+ * @DCB_NUMTCS_ATTR_PG: (NLA_U8) number of traffic classes used for
+ *                               priority groups
+ * @DCB_NUMTCS_ATTR_PFC: (NLA_U8) number of traffic classes which can
+ *                                support priority flow control
+ */
+enum dcbnl_numtcs_attrs {
+       DCB_NUMTCS_ATTR_UNDEFINED,
+       DCB_NUMTCS_ATTR_ALL,
+       DCB_NUMTCS_ATTR_PG,
+       DCB_NUMTCS_ATTR_PFC,
+
+       __DCB_NUMTCS_ATTR_ENUM_MAX,
+       DCB_NUMTCS_ATTR_MAX = __DCB_NUMTCS_ATTR_ENUM_MAX - 1,
+};
+
+enum dcbnl_bcn_attrs{
+       DCB_BCN_ATTR_UNDEFINED = 0,
+
+       DCB_BCN_ATTR_RP_0,
+       DCB_BCN_ATTR_RP_1,
+       DCB_BCN_ATTR_RP_2,
+       DCB_BCN_ATTR_RP_3,
+       DCB_BCN_ATTR_RP_4,
+       DCB_BCN_ATTR_RP_5,
+       DCB_BCN_ATTR_RP_6,
+       DCB_BCN_ATTR_RP_7,
+       DCB_BCN_ATTR_RP_ALL,
+
+       DCB_BCN_ATTR_BCNA_0,
+       DCB_BCN_ATTR_BCNA_1,
+       DCB_BCN_ATTR_ALPHA,
+       DCB_BCN_ATTR_BETA,
+       DCB_BCN_ATTR_GD,
+       DCB_BCN_ATTR_GI,
+       DCB_BCN_ATTR_TMAX,
+       DCB_BCN_ATTR_TD,
+       DCB_BCN_ATTR_RMIN,
+       DCB_BCN_ATTR_W,
+       DCB_BCN_ATTR_RD,
+       DCB_BCN_ATTR_RU,
+       DCB_BCN_ATTR_WRTT,
+       DCB_BCN_ATTR_RI,
+       DCB_BCN_ATTR_C,
+       DCB_BCN_ATTR_ALL,
+
+       __DCB_BCN_ATTR_ENUM_MAX,
+       DCB_BCN_ATTR_MAX = __DCB_BCN_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcb_general_attr_values - general DCB attribute values
+ *
+ * @DCB_ATTR_UNDEFINED: value used to indicate an attribute is not supported
+ *
+ */
+enum dcb_general_attr_values {
+       DCB_ATTR_VALUE_UNDEFINED = 0xff
+};
+
+#define DCB_APP_IDTYPE_ETHTYPE 0x00
+#define DCB_APP_IDTYPE_PORTNUM 0x01
+enum dcbnl_app_attrs {
+       DCB_APP_ATTR_UNDEFINED,
+
+       DCB_APP_ATTR_IDTYPE,
+       DCB_APP_ATTR_ID,
+       DCB_APP_ATTR_PRIORITY,
+
+       __DCB_APP_ATTR_ENUM_MAX,
+       DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1,
+};
+
+/**
+ * enum dcbnl_featcfg_attrs - features conifiguration flags
+ *
+ * @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors
+ * @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes
+ * @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups
+ * @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority
+ *                                 flow control
+ * @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV
+ *
+ */
+#define DCB_FEATCFG_ERROR      0x01    /* error in feature resolution */
+#define DCB_FEATCFG_ENABLE     0x02    /* enable feature */
+#define DCB_FEATCFG_WILLING    0x04    /* feature is willing */
+#define DCB_FEATCFG_ADVERTISE  0x08    /* advertise feature */
+enum dcbnl_featcfg_attrs {
+       DCB_FEATCFG_ATTR_UNDEFINED,
+       DCB_FEATCFG_ATTR_ALL,
+       DCB_FEATCFG_ATTR_PG,
+       DCB_FEATCFG_ATTR_PFC,
+       DCB_FEATCFG_ATTR_APP,
+
+       __DCB_FEATCFG_ATTR_ENUM_MAX,
+       DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1,
+};
+
+#endif /* __LINUX_DCBNL_H__ */
diff --git a/lib/libdss-include/linux/dccp.h b/lib/libdss-include/linux/dccp.h
new file mode 100644 (file)
index 0000000..d0e2226
--- /dev/null
@@ -0,0 +1,237 @@
+#ifndef _LINUX_DCCP_H
+#define _LINUX_DCCP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/**
+ * struct dccp_hdr - generic part of DCCP packet header
+ *
+ * @dccph_sport - Relevant port on the endpoint that sent this packet
+ * @dccph_dport - Relevant port on the other endpoint
+ * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
+ * @dccph_ccval - Used by the HC-Sender CCID
+ * @dccph_cscov - Parts of the packet that are covered by the Checksum field
+ * @dccph_checksum - Internet checksum, depends on dccph_cscov
+ * @dccph_x - 0 = 24 bit sequence number, 1 = 48
+ * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
+ * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
+ */
+struct dccp_hdr {
+       __be16  dccph_sport,
+               dccph_dport;
+       __u8    dccph_doff;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    dccph_cscov:4,
+               dccph_ccval:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8    dccph_ccval:4,
+               dccph_cscov:4;
+#else
+#error  "Adjust your <asm/byteorder.h> defines"
+#endif
+       __sum16 dccph_checksum;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    dccph_x:1,
+               dccph_type:4,
+               dccph_reserved:3;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8    dccph_reserved:3,
+               dccph_type:4,
+               dccph_x:1;
+#else
+#error  "Adjust your <asm/byteorder.h> defines"
+#endif
+       __u8    dccph_seq2;
+       __be16  dccph_seq;
+};
+
+/**
+ * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
+ *
+ * @dccph_seq_low - low 24 bits of a 48 bit seq packet
+ */
+struct dccp_hdr_ext {
+       __be32  dccph_seq_low;
+};
+
+/**
+ * struct dccp_hdr_request - Connection initiation request header
+ *
+ * @dccph_req_service - Service to which the client app wants to connect
+ */
+struct dccp_hdr_request {
+       __be32  dccph_req_service;
+};
+/**
+ * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
+ *
+ * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
+ * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
+ */
+struct dccp_hdr_ack_bits {
+       __be16  dccph_reserved1;
+       __be16  dccph_ack_nr_high;
+       __be32  dccph_ack_nr_low;
+};
+/**
+ * struct dccp_hdr_response - Connection initiation response header
+ *
+ * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
+ * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
+ */
+struct dccp_hdr_response {
+       struct dccp_hdr_ack_bits        dccph_resp_ack;
+       __be32                          dccph_resp_service;
+};
+
+/**
+ * struct dccp_hdr_reset - Unconditionally shut down a connection
+ *
+ * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
+ * @dccph_reset_code - one of %dccp_reset_codes
+ * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
+ */
+struct dccp_hdr_reset {
+       struct dccp_hdr_ack_bits        dccph_reset_ack;
+       __u8                            dccph_reset_code,
+                                       dccph_reset_data[3];
+};
+
+enum dccp_pkt_type {
+       DCCP_PKT_REQUEST = 0,
+       DCCP_PKT_RESPONSE,
+       DCCP_PKT_DATA,
+       DCCP_PKT_ACK,
+       DCCP_PKT_DATAACK,
+       DCCP_PKT_CLOSEREQ,
+       DCCP_PKT_CLOSE,
+       DCCP_PKT_RESET,
+       DCCP_PKT_SYNC,
+       DCCP_PKT_SYNCACK,
+       DCCP_PKT_INVALID,
+};
+
+#define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID
+
+static __inline__ unsigned int dccp_packet_hdr_len(const __u8 type)
+{
+       if (type == DCCP_PKT_DATA)
+               return 0;
+       if (type == DCCP_PKT_DATAACK    ||
+           type == DCCP_PKT_ACK        ||
+           type == DCCP_PKT_SYNC       ||
+           type == DCCP_PKT_SYNCACK    ||
+           type == DCCP_PKT_CLOSE      ||
+           type == DCCP_PKT_CLOSEREQ)
+               return sizeof(struct dccp_hdr_ack_bits);
+       if (type == DCCP_PKT_REQUEST)
+               return sizeof(struct dccp_hdr_request);
+       if (type == DCCP_PKT_RESPONSE)
+               return sizeof(struct dccp_hdr_response);
+       return sizeof(struct dccp_hdr_reset);
+}
+enum dccp_reset_codes {
+       DCCP_RESET_CODE_UNSPECIFIED = 0,
+       DCCP_RESET_CODE_CLOSED,
+       DCCP_RESET_CODE_ABORTED,
+       DCCP_RESET_CODE_NO_CONNECTION,
+       DCCP_RESET_CODE_PACKET_ERROR,
+       DCCP_RESET_CODE_OPTION_ERROR,
+       DCCP_RESET_CODE_MANDATORY_ERROR,
+       DCCP_RESET_CODE_CONNECTION_REFUSED,
+       DCCP_RESET_CODE_BAD_SERVICE_CODE,
+       DCCP_RESET_CODE_TOO_BUSY,
+       DCCP_RESET_CODE_BAD_INIT_COOKIE,
+       DCCP_RESET_CODE_AGGRESSION_PENALTY,
+
+       DCCP_MAX_RESET_CODES            /* Leave at the end!  */
+};
+
+/* DCCP options */
+enum {
+       DCCPO_PADDING = 0,
+       DCCPO_MANDATORY = 1,
+       DCCPO_MIN_RESERVED = 3,
+       DCCPO_MAX_RESERVED = 31,
+       DCCPO_CHANGE_L = 32,
+       DCCPO_CONFIRM_L = 33,
+       DCCPO_CHANGE_R = 34,
+       DCCPO_CONFIRM_R = 35,
+       DCCPO_NDP_COUNT = 37,
+       DCCPO_ACK_VECTOR_0 = 38,
+       DCCPO_ACK_VECTOR_1 = 39,
+       DCCPO_TIMESTAMP = 41,
+       DCCPO_TIMESTAMP_ECHO = 42,
+       DCCPO_ELAPSED_TIME = 43,
+       DCCPO_MAX = 45,
+       DCCPO_MIN_RX_CCID_SPECIFIC = 128,       /* from sender to receiver */
+       DCCPO_MAX_RX_CCID_SPECIFIC = 191,
+       DCCPO_MIN_TX_CCID_SPECIFIC = 192,       /* from receiver to sender */
+       DCCPO_MAX_TX_CCID_SPECIFIC = 255,
+};
+/* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */
+#define DCCP_SINGLE_OPT_MAXLEN 253
+
+/* DCCP CCIDS */
+enum {
+       DCCPC_CCID2 = 2,
+       DCCPC_CCID3 = 3,
+};
+
+/* DCCP features (RFC 4340 section 6.4) */
+enum dccp_feature_numbers {
+       DCCPF_RESERVED = 0,
+       DCCPF_CCID = 1,
+       DCCPF_SHORT_SEQNOS = 2,
+       DCCPF_SEQUENCE_WINDOW = 3,
+       DCCPF_ECN_INCAPABLE = 4,
+       DCCPF_ACK_RATIO = 5,
+       DCCPF_SEND_ACK_VECTOR = 6,
+       DCCPF_SEND_NDP_COUNT = 7,
+       DCCPF_MIN_CSUM_COVER = 8,
+       DCCPF_DATA_CHECKSUM = 9,
+       /* 10-127 reserved */
+       DCCPF_MIN_CCID_SPECIFIC = 128,
+       DCCPF_SEND_LEV_RATE = 192,      /* RFC 4342, sec. 8.4 */
+       DCCPF_MAX_CCID_SPECIFIC = 255,
+};
+
+/* DCCP socket control message types for cmsg */
+enum dccp_cmsg_type {
+       DCCP_SCM_PRIORITY = 1,
+       DCCP_SCM_QPOLICY_MAX = 0xFFFF,
+       /* ^-- Up to here reserved exclusively for qpolicy parameters */
+       DCCP_SCM_MAX
+};
+
+/* DCCP priorities for outgoing/queued packets */
+enum dccp_packet_dequeueing_policy {
+       DCCPQ_POLICY_SIMPLE,
+       DCCPQ_POLICY_PRIO,
+       DCCPQ_POLICY_MAX
+};
+
+/* DCCP socket options */
+#define DCCP_SOCKOPT_PACKET_SIZE       1 /* XXX deprecated, without effect */
+#define DCCP_SOCKOPT_SERVICE           2
+#define DCCP_SOCKOPT_CHANGE_L          3
+#define DCCP_SOCKOPT_CHANGE_R          4
+#define DCCP_SOCKOPT_GET_CUR_MPS       5
+#define DCCP_SOCKOPT_SERVER_TIMEWAIT   6
+#define DCCP_SOCKOPT_SEND_CSCOV                10
+#define DCCP_SOCKOPT_RECV_CSCOV                11
+#define DCCP_SOCKOPT_AVAILABLE_CCIDS   12
+#define DCCP_SOCKOPT_CCID              13
+#define DCCP_SOCKOPT_TX_CCID           14
+#define DCCP_SOCKOPT_RX_CCID           15
+#define DCCP_SOCKOPT_QPOLICY_ID                16
+#define DCCP_SOCKOPT_QPOLICY_TXQLEN    17
+#define DCCP_SOCKOPT_CCID_RX_INFO      128
+#define DCCP_SOCKOPT_CCID_TX_INFO      192
+
+/* maximum number of services provided on the same listening port */
+#define DCCP_SERVICE_LIST_MAX_LEN      32
+
+
+#endif /* _LINUX_DCCP_H */
diff --git a/lib/libdss-include/linux/dlm.h b/lib/libdss-include/linux/dlm.h
new file mode 100644 (file)
index 0000000..6120d50
--- /dev/null
@@ -0,0 +1,75 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef __DLM_DOT_H__
+#define __DLM_DOT_H__
+
+/*
+ * Interface to Distributed Lock Manager (DLM)
+ * routines and structures to use DLM lockspaces
+ */
+
+/* Lock levels and flags are here */
+#include <linux/dlmconstants.h>
+#include <linux/types.h>
+
+typedef void dlm_lockspace_t;
+
+/*
+ * Lock status block
+ *
+ * Use this structure to specify the contents of the lock value block.  For a
+ * conversion request, this structure is used to specify the lock ID of the
+ * lock.  DLM writes the status of the lock request and the lock ID assigned
+ * to the request in the lock status block.
+ *
+ * sb_lkid: the returned lock ID.  It is set on new (non-conversion) requests.
+ * It is available when dlm_lock returns.
+ *
+ * sb_lvbptr: saves or returns the contents of the lock's LVB according to rules
+ * shown for the DLM_LKF_VALBLK flag.
+ *
+ * sb_flags: DLM_SBF_DEMOTED is returned if in the process of promoting a lock,
+ * it was first demoted to NL to avoid conversion deadlock.
+ * DLM_SBF_VALNOTVALID is returned if the resource's LVB is marked invalid.
+ *
+ * sb_status: the returned status of the lock request set prior to AST
+ * execution.  Possible return values:
+ *
+ * 0 if lock request was successful
+ * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE
+ * -DLM_EUNLOCK if unlock request was successful
+ * -DLM_ECANCEL if a cancel completed successfully
+ * -EDEADLK if a deadlock was detected
+ * -ETIMEDOUT if the lock request was canceled due to a timeout
+ */
+
+#define DLM_SBF_DEMOTED                0x01
+#define DLM_SBF_VALNOTVALID    0x02
+#define DLM_SBF_ALTMODE                0x04
+
+struct dlm_lksb {
+       int      sb_status;
+       __u32    sb_lkid;
+       char     sb_flags;
+       char *   sb_lvbptr;
+};
+
+/* dlm_new_lockspace() flags */
+
+#define DLM_LSFL_TIMEWARN      0x00000002
+#define DLM_LSFL_FS            0x00000004
+#define DLM_LSFL_NEWEXCL       0x00000008
+
+
+#endif /* __DLM_DOT_H__ */
diff --git a/lib/libdss-include/linux/dlm_device.h b/lib/libdss-include/linux/dlm_device.h
new file mode 100644 (file)
index 0000000..45f8101
--- /dev/null
@@ -0,0 +1,108 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef _LINUX_DLM_DEVICE_H
+#define _LINUX_DLM_DEVICE_H
+
+/* This is the device interface for dlm, most users will use a library
+ * interface.
+ */
+
+#include <linux/dlm.h>
+#include <linux/types.h>
+
+#define DLM_USER_LVB_LEN       32
+
+/* Version of the device interface */
+#define DLM_DEVICE_VERSION_MAJOR 6
+#define DLM_DEVICE_VERSION_MINOR 0
+#define DLM_DEVICE_VERSION_PATCH 2
+
+/* struct passed to the lock write */
+struct dlm_lock_params {
+       __u8 mode;
+       __u8 namelen;
+       __u16 unused;
+       __u32 flags;
+       __u32 lkid;
+       __u32 parent;
+       __u64 xid;
+       __u64 timeout;
+       void *castparam;
+       void *castaddr;
+       void *bastparam;
+       void *bastaddr;
+       struct dlm_lksb *lksb;
+       char lvb[DLM_USER_LVB_LEN];
+       char name[0];
+};
+
+struct dlm_lspace_params {
+       __u32 flags;
+       __u32 minor;
+       char name[0];
+};
+
+struct dlm_purge_params {
+       __u32 nodeid;
+       __u32 pid;
+};
+
+struct dlm_write_request {
+       __u32 version[3];
+       __u8 cmd;
+       __u8 is64bit;
+       __u8 unused[2];
+
+       union  {
+               struct dlm_lock_params   lock;
+               struct dlm_lspace_params lspace;
+               struct dlm_purge_params  purge;
+       } i;
+};
+
+struct dlm_device_version {
+       __u32 version[3];
+};
+
+/* struct read from the "device" fd,
+   consists mainly of userspace pointers for the library to use */
+
+struct dlm_lock_result {
+       __u32 version[3];
+       __u32 length;
+       void * user_astaddr;
+       void * user_astparam;
+       struct dlm_lksb * user_lksb;
+       struct dlm_lksb lksb;
+       __u8 bast_mode;
+       __u8 unused[3];
+       /* Offsets may be zero if no data is present */
+       __u32 lvb_offset;
+};
+
+/* Commands passed to the device */
+#define DLM_USER_LOCK         1
+#define DLM_USER_UNLOCK       2
+#define DLM_USER_QUERY        3
+#define DLM_USER_CREATE_LOCKSPACE  4
+#define DLM_USER_REMOVE_LOCKSPACE  5
+#define DLM_USER_PURGE        6
+#define DLM_USER_DEADLOCK     7
+
+/* Lockspace flags */
+#define DLM_USER_LSFLG_AUTOFREE   1
+#define DLM_USER_LSFLG_FORCEFREE  2
+
+#endif
+
diff --git a/lib/libdss-include/linux/dlm_netlink.h b/lib/libdss-include/linux/dlm_netlink.h
new file mode 100644 (file)
index 0000000..647c8ef
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef _DLM_NETLINK_H
+#define _DLM_NETLINK_H
+
+#include <linux/types.h>
+
+enum {
+       DLM_STATUS_WAITING = 1,
+       DLM_STATUS_GRANTED = 2,
+       DLM_STATUS_CONVERT = 3,
+};
+
+#define DLM_LOCK_DATA_VERSION 1
+
+struct dlm_lock_data {
+       __u16 version;
+       __u32 lockspace_id;
+       int nodeid;
+       int ownpid;
+       __u32 id;
+       __u32 remid;
+       __u64 xid;
+       __s8 status;
+       __s8 grmode;
+       __s8 rqmode;
+       unsigned long timestamp;
+       int resource_namelen;
+       char resource_name[DLM_RESNAME_MAXLEN];
+};
+
+enum {
+       DLM_CMD_UNSPEC = 0,
+       DLM_CMD_HELLO,          /* user->kernel */
+       DLM_CMD_TIMEOUT,        /* kernel->user */
+       __DLM_CMD_MAX,
+};
+
+#define DLM_CMD_MAX (__DLM_CMD_MAX - 1)
+
+enum {
+       DLM_TYPE_UNSPEC = 0,
+       DLM_TYPE_LOCK,
+       __DLM_TYPE_MAX,
+};
+
+#define DLM_TYPE_MAX (__DLM_TYPE_MAX - 1)
+
+#define DLM_GENL_VERSION 0x1
+#define DLM_GENL_NAME "DLM"
+
+#endif /* _DLM_NETLINK_H */
diff --git a/lib/libdss-include/linux/dlm_plock.h b/lib/libdss-include/linux/dlm_plock.h
new file mode 100644 (file)
index 0000000..6403ea2
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005-2008 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef __DLM_PLOCK_DOT_H__
+#define __DLM_PLOCK_DOT_H__
+
+#include <linux/types.h>
+
+#define DLM_PLOCK_MISC_NAME            "dlm_plock"
+
+#define DLM_PLOCK_VERSION_MAJOR        1
+#define DLM_PLOCK_VERSION_MINOR        2
+#define DLM_PLOCK_VERSION_PATCH        0
+
+enum {
+       DLM_PLOCK_OP_LOCK = 1,
+       DLM_PLOCK_OP_UNLOCK,
+       DLM_PLOCK_OP_GET,
+};
+
+#define DLM_PLOCK_FL_CLOSE 1
+
+struct dlm_plock_info {
+       __u32 version[3];
+       __u8 optype;
+       __u8 ex;
+       __u8 wait;
+       __u8 flags;
+       __u32 pid;
+       __s32 nodeid;
+       __s32 rv;
+       __u32 fsid;
+       __u64 number;
+       __u64 start;
+       __u64 end;
+       __u64 owner;
+};
+
+
+#endif /* __DLM_PLOCK_DOT_H__ */
diff --git a/lib/libdss-include/linux/dlmconstants.h b/lib/libdss-include/linux/dlmconstants.h
new file mode 100644 (file)
index 0000000..2857bdc
--- /dev/null
@@ -0,0 +1,163 @@
+/******************************************************************************
+*******************************************************************************
+**
+**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
+**
+**  This copyrighted material is made available to anyone wishing to use,
+**  modify, copy, or redistribute it subject to the terms and conditions
+**  of the GNU General Public License v.2.
+**
+*******************************************************************************
+******************************************************************************/
+
+#ifndef __DLMCONSTANTS_DOT_H__
+#define __DLMCONSTANTS_DOT_H__
+
+/*
+ * Constants used by DLM interface.
+ */
+
+#define DLM_LOCKSPACE_LEN       64
+#define DLM_RESNAME_MAXLEN      64
+
+
+/*
+ * Lock Modes
+ */
+
+#define DLM_LOCK_IV            (-1)    /* invalid */
+#define DLM_LOCK_NL            0       /* null */
+#define DLM_LOCK_CR            1       /* concurrent read */
+#define DLM_LOCK_CW            2       /* concurrent write */
+#define DLM_LOCK_PR            3       /* protected read */
+#define DLM_LOCK_PW            4       /* protected write */
+#define DLM_LOCK_EX            5       /* exclusive */
+
+
+/*
+ * Flags to dlm_lock
+ *
+ * DLM_LKF_NOQUEUE
+ *
+ * Do not queue the lock request on the wait queue if it cannot be granted
+ * immediately.  If the lock cannot be granted because of this flag, DLM will
+ * either return -EAGAIN from the dlm_lock call or will return 0 from
+ * dlm_lock and -EAGAIN in the lock status block when the AST is executed.
+ *
+ * DLM_LKF_CANCEL
+ *
+ * Used to cancel a pending lock request or conversion.  A converting lock is
+ * returned to its previously granted mode.
+ *
+ * DLM_LKF_CONVERT
+ *
+ * Indicates a lock conversion request.  For conversions the name and namelen
+ * are ignored and the lock ID in the LKSB is used to identify the lock.
+ *
+ * DLM_LKF_VALBLK
+ *
+ * Requests DLM to return the current contents of the lock value block in the
+ * lock status block.  When this flag is set in a lock conversion from PW or EX
+ * modes, DLM assigns the value specified in the lock status block to the lock
+ * value block of the lock resource.  The LVB is a DLM_LVB_LEN size array
+ * containing application-specific information.
+ *
+ * DLM_LKF_QUECVT
+ *
+ * Force a conversion request to be queued, even if it is compatible with
+ * the granted modes of other locks on the same resource.
+ *
+ * DLM_LKF_IVVALBLK
+ *
+ * Invalidate the lock value block.
+ *
+ * DLM_LKF_CONVDEADLK
+ *
+ * Allows the dlm to resolve conversion deadlocks internally by demoting the
+ * granted mode of a converting lock to NL.  The DLM_SBF_DEMOTED flag is
+ * returned for a conversion that's been effected by this.
+ *
+ * DLM_LKF_PERSISTENT
+ *
+ * Only relevant to locks originating in userspace.  A persistent lock will not
+ * be removed if the process holding the lock exits.
+ *
+ * DLM_LKF_NODLCKWT
+ *
+ * Do not cancel the lock if it gets into conversion deadlock.
+ * Exclude this lock from being monitored due to DLM_LSFL_TIMEWARN.
+ *
+ * DLM_LKF_NODLCKBLK
+ *
+ * net yet implemented
+ *
+ * DLM_LKF_EXPEDITE
+ *
+ * Used only with new requests for NL mode locks.  Tells the lock manager
+ * to grant the lock, ignoring other locks in convert and wait queues.
+ *
+ * DLM_LKF_NOQUEUEBAST
+ *
+ * Send blocking AST's before returning -EAGAIN to the caller.  It is only
+ * used along with the NOQUEUE flag.  Blocking AST's are not sent for failed
+ * NOQUEUE requests otherwise.
+ *
+ * DLM_LKF_HEADQUE
+ *
+ * Add a lock to the head of the convert or wait queue rather than the tail.
+ *
+ * DLM_LKF_NOORDER
+ *
+ * Disregard the standard grant order rules and grant a lock as soon as it
+ * is compatible with other granted locks.
+ *
+ * DLM_LKF_ORPHAN
+ *
+ * Acquire an orphan lock.
+ *
+ * DLM_LKF_ALTPR
+ *
+ * If the requested mode cannot be granted immediately, try to grant the lock
+ * in PR mode instead.  If this alternate mode is granted instead of the
+ * requested mode, DLM_SBF_ALTMODE is returned in the lksb.
+ *
+ * DLM_LKF_ALTCW
+ *
+ * The same as ALTPR, but the alternate mode is CW.
+ *
+ * DLM_LKF_FORCEUNLOCK
+ *
+ * Unlock the lock even if it is converting or waiting or has sublocks.
+ * Only really for use by the userland device.c code.
+ *
+ */
+
+#define DLM_LKF_NOQUEUE                0x00000001
+#define DLM_LKF_CANCEL         0x00000002
+#define DLM_LKF_CONVERT                0x00000004
+#define DLM_LKF_VALBLK         0x00000008
+#define DLM_LKF_QUECVT         0x00000010
+#define DLM_LKF_IVVALBLK       0x00000020
+#define DLM_LKF_CONVDEADLK     0x00000040
+#define DLM_LKF_PERSISTENT     0x00000080
+#define DLM_LKF_NODLCKWT       0x00000100
+#define DLM_LKF_NODLCKBLK      0x00000200
+#define DLM_LKF_EXPEDITE       0x00000400
+#define DLM_LKF_NOQUEUEBAST    0x00000800
+#define DLM_LKF_HEADQUE                0x00001000
+#define DLM_LKF_NOORDER                0x00002000
+#define DLM_LKF_ORPHAN         0x00004000
+#define DLM_LKF_ALTPR          0x00008000
+#define DLM_LKF_ALTCW          0x00010000
+#define DLM_LKF_FORCEUNLOCK    0x00020000
+#define DLM_LKF_TIMEOUT                0x00040000
+
+/*
+ * Some return codes that are not in errno.h
+ */
+
+#define DLM_ECANCEL            0x10001
+#define DLM_EUNLOCK            0x10002
+
+#endif  /* __DLMCONSTANTS_DOT_H__ */
diff --git a/lib/libdss-include/linux/dm-ioctl.h b/lib/libdss-include/linux/dm-ioctl.h
new file mode 100644 (file)
index 0000000..30afd0a
--- /dev/null
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
+ * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved.
+ *
+ * This file is released under the LGPL.
+ */
+
+#ifndef _LINUX_DM_IOCTL_V4_H
+#define _LINUX_DM_IOCTL_V4_H
+
+#include <linux/types.h>
+
+#define DM_DIR "mapper"                /* Slashes not supported */
+#define DM_CONTROL_NODE "control"
+#define DM_MAX_TYPE_NAME 16
+#define DM_NAME_LEN 128
+#define DM_UUID_LEN 129
+
+/*
+ * A traditional ioctl interface for the device mapper.
+ *
+ * Each device can have two tables associated with it, an
+ * 'active' table which is the one currently used by io passing
+ * through the device, and an 'inactive' one which is a table
+ * that is being prepared as a replacement for the 'active' one.
+ *
+ * DM_VERSION:
+ * Just get the version information for the ioctl interface.
+ *
+ * DM_REMOVE_ALL:
+ * Remove all dm devices, destroy all tables.  Only really used
+ * for debug.
+ *
+ * DM_LIST_DEVICES:
+ * Get a list of all the dm device names.
+ *
+ * DM_DEV_CREATE:
+ * Create a new device, neither the 'active' or 'inactive' table
+ * slots will be filled.  The device will be in suspended state
+ * after creation, however any io to the device will get errored
+ * since it will be out-of-bounds.
+ *
+ * DM_DEV_REMOVE:
+ * Remove a device, destroy any tables.
+ *
+ * DM_DEV_RENAME:
+ * Rename a device or set its uuid if none was previously supplied.
+ *
+ * DM_SUSPEND:
+ * This performs both suspend and resume, depending which flag is
+ * passed in.
+ * Suspend: This command will not return until all pending io to
+ * the device has completed.  Further io will be deferred until
+ * the device is resumed.
+ * Resume: It is no longer an error to issue this command on an
+ * unsuspended device.  If a table is present in the 'inactive'
+ * slot, it will be moved to the active slot, then the old table
+ * from the active slot will be _destroyed_.  Finally the device
+ * is resumed.
+ *
+ * DM_DEV_STATUS:
+ * Retrieves the status for the table in the 'active' slot.
+ *
+ * DM_DEV_WAIT:
+ * Wait for a significant event to occur to the device.  This
+ * could either be caused by an event triggered by one of the
+ * targets of the table in the 'active' slot, or a table change.
+ *
+ * DM_TABLE_LOAD:
+ * Load a table into the 'inactive' slot for the device.  The
+ * device does _not_ need to be suspended prior to this command.
+ *
+ * DM_TABLE_CLEAR:
+ * Destroy any table in the 'inactive' slot (ie. abort).
+ *
+ * DM_TABLE_DEPS:
+ * Return a set of device dependencies for the 'active' table.
+ *
+ * DM_TABLE_STATUS:
+ * Return the targets status for the 'active' table.
+ *
+ * DM_TARGET_MSG:
+ * Pass a message string to the target at a specific offset of a device.
+ *
+ * DM_DEV_SET_GEOMETRY:
+ * Set the geometry of a device by passing in a string in this format:
+ *
+ * "cylinders heads sectors_per_track start_sector"
+ *
+ * Beware that CHS geometry is nearly obsolete and only provided
+ * for compatibility with dm devices that can be booted by a PC
+ * BIOS.  See struct hd_geometry for range limits.  Also note that
+ * the geometry is erased if the device size changes.
+ */
+
+/*
+ * All ioctl arguments consist of a single chunk of memory, with
+ * this structure at the start.  If a uuid is specified any
+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
+ * name.
+ */
+struct dm_ioctl {
+       /*
+        * The version number is made up of three parts:
+        * major - no backward or forward compatibility,
+        * minor - only backwards compatible,
+        * patch - both backwards and forwards compatible.
+        *
+        * All clients of the ioctl interface should fill in the
+        * version number of the interface that they were
+        * compiled with.
+        *
+        * All recognised ioctl commands (ie. those that don't
+        * return -ENOTTY) fill out this field, even if the
+        * command failed.
+        */
+       __u32 version[3];       /* in/out */
+       __u32 data_size;        /* total size of data passed in
+                                * including this struct */
+
+       __u32 data_start;       /* offset to start of data
+                                * relative to start of this struct */
+
+       __u32 target_count;     /* in/out */
+       __s32 open_count;       /* out */
+       __u32 flags;            /* in/out */
+
+       /*
+        * event_nr holds either the event number (input and output) or the
+        * udev cookie value (input only).
+        * The DM_DEV_WAIT ioctl takes an event number as input.
+        * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls
+        * use the field as a cookie to return in the DM_COOKIE
+        * variable with the uevents they issue.
+        * For output, the ioctls return the event number, not the cookie.
+        */
+       __u32 event_nr;         /* in/out */
+       __u32 padding;
+
+       __u64 dev;              /* in/out */
+
+       char name[DM_NAME_LEN]; /* device name */
+       char uuid[DM_UUID_LEN]; /* unique identifier for
+                                * the block device */
+       char data[7];           /* padding or data */
+};
+
+/*
+ * Used to specify tables.  These structures appear after the
+ * dm_ioctl.
+ */
+struct dm_target_spec {
+       __u64 sector_start;
+       __u64 length;
+       __s32 status;           /* used when reading from kernel only */
+
+       /*
+        * Location of the next dm_target_spec.
+        * - When specifying targets on a DM_TABLE_LOAD command, this value is
+        *   the number of bytes from the start of the "current" dm_target_spec
+        *   to the start of the "next" dm_target_spec.
+        * - When retrieving targets on a DM_TABLE_STATUS command, this value
+        *   is the number of bytes from the start of the first dm_target_spec
+        *   (that follows the dm_ioctl struct) to the start of the "next"
+        *   dm_target_spec.
+        */
+       __u32 next;
+
+       char target_type[DM_MAX_TYPE_NAME];
+
+       /*
+        * Parameter string starts immediately after this object.
+        * Be careful to add padding after string to ensure correct
+        * alignment of subsequent dm_target_spec.
+        */
+};
+
+/*
+ * Used to retrieve the target dependencies.
+ */
+struct dm_target_deps {
+       __u32 count;    /* Array size */
+       __u32 padding;  /* unused */
+       __u64 dev[0];   /* out */
+};
+
+/*
+ * Used to get a list of all dm devices.
+ */
+struct dm_name_list {
+       __u64 dev;
+       __u32 next;             /* offset to the next record from
+                                  the _start_ of this */
+       char name[0];
+};
+
+/*
+ * Used to retrieve the target versions
+ */
+struct dm_target_versions {
+        __u32 next;
+        __u32 version[3];
+
+        char name[0];
+};
+
+/*
+ * Used to pass message to a target
+ */
+struct dm_target_msg {
+       __u64 sector;   /* Device sector */
+
+       char message[0];
+};
+
+/*
+ * If you change this make sure you make the corresponding change
+ * to dm-ioctl.c:lookup_ioctl()
+ */
+enum {
+       /* Top level cmds */
+       DM_VERSION_CMD = 0,
+       DM_REMOVE_ALL_CMD,
+       DM_LIST_DEVICES_CMD,
+
+       /* device level cmds */
+       DM_DEV_CREATE_CMD,
+       DM_DEV_REMOVE_CMD,
+       DM_DEV_RENAME_CMD,
+       DM_DEV_SUSPEND_CMD,
+       DM_DEV_STATUS_CMD,
+       DM_DEV_WAIT_CMD,
+
+       /* Table level cmds */
+       DM_TABLE_LOAD_CMD,
+       DM_TABLE_CLEAR_CMD,
+       DM_TABLE_DEPS_CMD,
+       DM_TABLE_STATUS_CMD,
+
+       /* Added later */
+       DM_LIST_VERSIONS_CMD,
+       DM_TARGET_MSG_CMD,
+       DM_DEV_SET_GEOMETRY_CMD
+};
+
+#define DM_IOCTL 0xfd
+
+#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
+#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
+#define DM_LIST_DEVICES  _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl)
+
+#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
+#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
+#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
+#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
+#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
+#define DM_DEV_WAIT      _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl)
+
+#define DM_TABLE_LOAD    _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl)
+#define DM_TABLE_CLEAR   _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl)
+#define DM_TABLE_DEPS    _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl)
+#define DM_TABLE_STATUS  _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl)
+
+#define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl)
+
+#define DM_TARGET_MSG   _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
+#define DM_DEV_SET_GEOMETRY    _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
+
+#define DM_VERSION_MAJOR       4
+#define DM_VERSION_MINOR       34
+#define DM_VERSION_PATCHLEVEL  0
+#define DM_VERSION_EXTRA       "-ioctl (2015-10-28)"
+
+/* Status bits */
+#define DM_READONLY_FLAG       (1 << 0) /* In/Out */
+#define DM_SUSPEND_FLAG                (1 << 1) /* In/Out */
+#define DM_PERSISTENT_DEV_FLAG (1 << 3) /* In */
+
+/*
+ * Flag passed into ioctl STATUS command to get table information
+ * rather than current status.
+ */
+#define DM_STATUS_TABLE_FLAG   (1 << 4) /* In */
+
+/*
+ * Flags that indicate whether a table is present in either of
+ * the two table slots that a device has.
+ */
+#define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */
+#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
+
+/*
+ * Indicates that the buffer passed in wasn't big enough for the
+ * results.
+ */
+#define DM_BUFFER_FULL_FLAG    (1 << 8) /* Out */
+
+/*
+ * This flag is now ignored.
+ */
+#define DM_SKIP_BDGET_FLAG     (1 << 9) /* In */
+
+/*
+ * Set this to avoid attempting to freeze any filesystem when suspending.
+ */
+#define DM_SKIP_LOCKFS_FLAG    (1 << 10) /* In */
+
+/*
+ * Set this to suspend without flushing queued ios.
+ * Also disables flushing uncommitted changes in the thin target before
+ * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT.
+ */
+#define DM_NOFLUSH_FLAG                (1 << 11) /* In */
+
+/*
+ * If set, any table information returned will relate to the inactive
+ * table instead of the live one.  Always check DM_INACTIVE_PRESENT_FLAG
+ * is set before using the data returned.
+ */
+#define DM_QUERY_INACTIVE_TABLE_FLAG   (1 << 12) /* In */
+
+/*
+ * If set, a uevent was generated for which the caller may need to wait.
+ */
+#define DM_UEVENT_GENERATED_FLAG       (1 << 13) /* Out */
+
+/*
+ * If set, rename changes the uuid not the name.  Only permitted
+ * if no uuid was previously supplied: an existing uuid cannot be changed.
+ */
+#define DM_UUID_FLAG                   (1 << 14) /* In */
+
+/*
+ * If set, all buffers are wiped after use. Use when sending
+ * or requesting sensitive data such as an encryption key.
+ */
+#define DM_SECURE_DATA_FLAG            (1 << 15) /* In */
+
+/*
+ * If set, a message generated output data.
+ */
+#define DM_DATA_OUT_FLAG               (1 << 16) /* Out */
+
+/*
+ * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if
+ * the device cannot be removed immediately because it is still in use
+ * it should instead be scheduled for removal when it gets closed.
+ *
+ * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this
+ * flag indicates that the device is scheduled to be removed when it
+ * gets closed.
+ */
+#define DM_DEFERRED_REMOVE             (1 << 17) /* In/Out */
+
+/*
+ * If set, the device is suspended internally.
+ */
+#define DM_INTERNAL_SUSPEND_FLAG       (1 << 18) /* Out */
+
+#endif                         /* _LINUX_DM_IOCTL_H */
diff --git a/lib/libdss-include/linux/dm-log-userspace.h b/lib/libdss-include/linux/dm-log-userspace.h
new file mode 100644 (file)
index 0000000..0fa0d9e
--- /dev/null
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2006-2009 Red Hat, Inc.
+ *
+ * This file is released under the LGPL.
+ */
+
+#ifndef __DM_LOG_USERSPACE_H__
+#define __DM_LOG_USERSPACE_H__
+
+#include <linux/dm-ioctl.h> /* For DM_UUID_LEN */
+
+/*
+ * The device-mapper userspace log module consists of a kernel component and
+ * a user-space component.  The kernel component implements the API defined
+ * in dm-dirty-log.h.  Its purpose is simply to pass the parameters and
+ * return values of those API functions between kernel and user-space.
+ *
+ * Below are defined the 'request_types' - DM_ULOG_CTR, DM_ULOG_DTR, etc.
+ * These request types represent the different functions in the device-mapper
+ * dirty log API.  Each of these is described in more detail below.
+ *
+ * The user-space program must listen for requests from the kernel (representing
+ * the various API functions) and process them.
+ *
+ * User-space begins by setting up the communication link (error checking
+ * removed for clarity):
+ *     fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
+ *     addr.nl_family = AF_NETLINK;
+ *     addr.nl_groups = CN_IDX_DM;
+ *     addr.nl_pid = 0;
+ *     r = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
+ *     opt = addr.nl_groups;
+ *     setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt));
+ *
+ * User-space will then wait to receive requests form the kernel, which it
+ * will process as described below.  The requests are received in the form,
+ * ((struct dm_ulog_request) + (additional data)).  Depending on the request
+ * type, there may or may not be 'additional data'.  In the descriptions below,
+ * you will see 'Payload-to-userspace' and 'Payload-to-kernel'.  The
+ * 'Payload-to-userspace' is what the kernel sends in 'additional data' as
+ * necessary parameters to complete the request.  The 'Payload-to-kernel' is
+ * the 'additional data' returned to the kernel that contains the necessary
+ * results of the request.  The 'data_size' field in the dm_ulog_request
+ * structure denotes the availability and amount of payload data.
+ */
+
+/*
+ * DM_ULOG_CTR corresponds to (found in dm-dirty-log.h):
+ * int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti,
+ *           unsigned argc, char **argv);
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     A NUL-terminated string that is the name of the device that is used
+ *     as the backing store for the log data.  'dm_get_device' will be called
+ *     on this device.  ('dm_put_device' will be called on this device
+ *     automatically after calling DM_ULOG_DTR.)  If there is no device needed
+ *     for log data, 'data_size' in the dm_ulog_request struct should be 0.
+ *
+ * The UUID contained in the dm_ulog_request structure is the reference that
+ * will be used by all request types to a specific log.  The constructor must
+ * record this association with the instance created.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field, filling the
+ * data field with the log device if necessary, and setting 'data_size'
+ * appropriately.
+ */
+#define DM_ULOG_CTR                    1
+
+/*
+ * DM_ULOG_DTR corresponds to (found in dm-dirty-log.h):
+ * void (*dtr)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     None.  ('data_size' in the dm_ulog_request struct should be 0.)
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being destroyed.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_DTR                    2
+
+/*
+ * DM_ULOG_PRESUSPEND corresponds to (found in dm-dirty-log.h):
+ * int (*presuspend)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being presuspended.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_PRESUSPEND             3
+
+/*
+ * DM_ULOG_POSTSUSPEND corresponds to (found in dm-dirty-log.h):
+ * int (*postsuspend)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being postsuspended.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_POSTSUSPEND            4
+
+/*
+ * DM_ULOG_RESUME corresponds to (found in dm-dirty-log.h):
+ * int (*resume)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     None.
+ *
+ * The UUID contained in the dm_ulog_request structure is all that is
+ * necessary to identify the log instance being resumed.  There is no
+ * payload data.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_RESUME                 5
+
+/*
+ * DM_ULOG_GET_REGION_SIZE corresponds to (found in dm-dirty-log.h):
+ * uint32_t (*get_region_size)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     uint64_t - contains the region size
+ *
+ * The region size is something that was determined at constructor time.
+ * It is returned in the payload area and 'data_size' is set to
+ * reflect this.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field appropriately.
+ */
+#define DM_ULOG_GET_REGION_SIZE        6
+
+/*
+ * DM_ULOG_IS_CLEAN corresponds to (found in dm-dirty-log.h):
+ * int (*is_clean)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - the region to get clean status on
+ * Payload-to-kernel:
+ *     int64_t  - 1 if clean, 0 otherwise
+ *
+ * Payload is sizeof(uint64_t) and contains the region for which the clean
+ * status is being made.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - filling the payload with 0 (not clean) or
+ * 1 (clean), setting 'data_size' and 'error' appropriately.
+ */
+#define DM_ULOG_IS_CLEAN               7
+
+/*
+ * DM_ULOG_IN_SYNC corresponds to (found in dm-dirty-log.h):
+ * int (*in_sync)(struct dm_dirty_log *log, region_t region,
+ *               int can_block);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - the region to get sync status on
+ * Payload-to-kernel:
+ *     int64_t - 1 if in-sync, 0 otherwise
+ *
+ * Exactly the same as 'is_clean' above, except this time asking "has the
+ * region been recovered?" vs. "is the region not being modified?"
+ */
+#define DM_ULOG_IN_SYNC                8
+
+/*
+ * DM_ULOG_FLUSH corresponds to (found in dm-dirty-log.h):
+ * int (*flush)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     If the 'integrated_flush' directive is present in the constructor
+ *     table, the payload is as same as DM_ULOG_MARK_REGION:
+ *             uint64_t [] - region(s) to mark
+ *     else
+ *             None
+ * Payload-to-kernel:
+ *     None.
+ *
+ * If the 'integrated_flush' option was used during the creation of the
+ * log, mark region requests are carried as payload in the flush request.
+ * Piggybacking the mark requests in this way allows for fewer communications
+ * between kernel and userspace.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_FLUSH                  9
+
+/*
+ * DM_ULOG_MARK_REGION corresponds to (found in dm-dirty-log.h):
+ * void (*mark_region)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t [] - region(s) to mark
+ * Payload-to-kernel:
+ *     None.
+ *
+ * Incoming payload contains the one or more regions to mark dirty.
+ * The number of regions contained in the payload can be determined from
+ * 'data_size/sizeof(uint64_t)'.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_MARK_REGION           10
+
+/*
+ * DM_ULOG_CLEAR_REGION corresponds to (found in dm-dirty-log.h):
+ * void (*clear_region)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t [] - region(s) to clear
+ * Payload-to-kernel:
+ *     None.
+ *
+ * Incoming payload contains the one or more regions to mark clean.
+ * The number of regions contained in the payload can be determined from
+ * 'data_size/sizeof(uint64_t)'.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_CLEAR_REGION          11
+
+/*
+ * DM_ULOG_GET_RESYNC_WORK corresponds to (found in dm-dirty-log.h):
+ * int (*get_resync_work)(struct dm_dirty_log *log, region_t *region);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     {
+ *             int64_t i; -- 1 if recovery necessary, 0 otherwise
+ *             uint64_t r; -- The region to recover if i=1
+ *     }
+ * 'data_size' should be set appropriately.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field appropriately.
+ */
+#define DM_ULOG_GET_RESYNC_WORK       12
+
+/*
+ * DM_ULOG_SET_REGION_SYNC corresponds to (found in dm-dirty-log.h):
+ * void (*set_region_sync)(struct dm_dirty_log *log,
+ *                        region_t region, int in_sync);
+ *
+ * Payload-to-userspace:
+ *     {
+ *             uint64_t - region to set sync state on
+ *             int64_t  - 0 if not-in-sync, 1 if in-sync
+ *     }
+ * Payload-to-kernel:
+ *     None.
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and clearing
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_SET_REGION_SYNC       13
+
+/*
+ * DM_ULOG_GET_SYNC_COUNT corresponds to (found in dm-dirty-log.h):
+ * region_t (*get_sync_count)(struct dm_dirty_log *log);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     uint64_t - the number of in-sync regions
+ *
+ * No incoming payload.  Kernel-bound payload contains the number of
+ * regions that are in-sync (in a size_t).
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_GET_SYNC_COUNT        14
+
+/*
+ * DM_ULOG_STATUS_INFO corresponds to (found in dm-dirty-log.h):
+ * int (*status)(struct dm_dirty_log *log, STATUSTYPE_INFO,
+ *              char *result, unsigned maxlen);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     Character string containing STATUSTYPE_INFO
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_STATUS_INFO           15
+
+/*
+ * DM_ULOG_STATUS_TABLE corresponds to (found in dm-dirty-log.h):
+ * int (*status)(struct dm_dirty_log *log, STATUSTYPE_TABLE,
+ *              char *result, unsigned maxlen);
+ *
+ * Payload-to-userspace:
+ *     None.
+ * Payload-to-kernel:
+ *     Character string containing STATUSTYPE_TABLE
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_STATUS_TABLE          16
+
+/*
+ * DM_ULOG_IS_REMOTE_RECOVERING corresponds to (found in dm-dirty-log.h):
+ * int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region);
+ *
+ * Payload-to-userspace:
+ *     uint64_t - region to determine recovery status on
+ * Payload-to-kernel:
+ *     {
+ *             int64_t is_recovering;  -- 0 if no, 1 if yes
+ *             uint64_t in_sync_hint;  -- lowest region still needing resync
+ *     }
+ *
+ * When the request has been processed, user-space must return the
+ * dm_ulog_request to the kernel - setting the 'error' field and
+ * 'data_size' appropriately.
+ */
+#define DM_ULOG_IS_REMOTE_RECOVERING  17
+
+/*
+ * (DM_ULOG_REQUEST_MASK & request_type) to get the request type
+ *
+ * Payload-to-userspace:
+ *     A single string containing all the argv arguments separated by ' 's
+ * Payload-to-kernel:
+ *     None.  ('data_size' in the dm_ulog_request struct should be 0.)
+ *
+ * We are reserving 8 bits of the 32-bit 'request_type' field for the
+ * various request types above.  The remaining 24-bits are currently
+ * set to zero and are reserved for future use and compatibility concerns.
+ *
+ * User-space should always use DM_ULOG_REQUEST_TYPE to acquire the
+ * request type from the 'request_type' field to maintain forward compatibility.
+ */
+#define DM_ULOG_REQUEST_MASK 0xFF
+#define DM_ULOG_REQUEST_TYPE(request_type) \
+       (DM_ULOG_REQUEST_MASK & (request_type))
+
+/*
+ * DM_ULOG_REQUEST_VERSION is incremented when there is a
+ * change to the way information is passed between kernel
+ * and userspace.  This could be a structure change of
+ * dm_ulog_request or a change in the way requests are
+ * issued/handled.  Changes are outlined here:
+ *     version 1:  Initial implementation
+ *     version 2:  DM_ULOG_CTR allowed to return a string containing a
+ *                 device name that is to be registered with DM via
+ *                 'dm_get_device'.
+ *     version 3:  DM_ULOG_FLUSH is capable of carrying payload for marking
+ *                 regions.  This "integrated flush" reduces the number of
+ *                 requests between the kernel and userspace by effectively
+ *                 merging 'mark' and 'flush' requests.  A constructor table
+ *                 argument ('integrated_flush') is required to turn this
+ *                 feature on, so it is backwards compatible with older
+ *                 userspace versions.
+ */
+#define DM_ULOG_REQUEST_VERSION 3
+
+struct dm_ulog_request {
+       /*
+        * The local unique identifier (luid) and the universally unique
+        * identifier (uuid) are used to tie a request to a specific
+        * mirror log.  A single machine log could probably make due with
+        * just the 'luid', but a cluster-aware log must use the 'uuid' and
+        * the 'luid'.  The uuid is what is required for node to node
+        * communication concerning a particular log, but the 'luid' helps
+        * differentiate between logs that are being swapped and have the
+        * same 'uuid'.  (Think "live" and "inactive" device-mapper tables.)
+        */
+       uint64_t luid;
+       char uuid[DM_UUID_LEN];
+       char padding[3];        /* Padding because DM_UUID_LEN = 129 */
+
+       uint32_t version;       /* See DM_ULOG_REQUEST_VERSION */
+       int32_t error;          /* Used to report back processing errors */
+
+       uint32_t seq;           /* Sequence number for request */
+       uint32_t request_type;  /* DM_ULOG_* defined above */
+       uint32_t data_size;     /* How much data (not including this struct) */
+
+       char data[0];
+};
+
+#endif /* __DM_LOG_USERSPACE_H__ */
diff --git a/lib/libdss-include/linux/dn.h b/lib/libdss-include/linux/dn.h
new file mode 100644 (file)
index 0000000..4295c74
--- /dev/null
@@ -0,0 +1,148 @@
+#ifndef _LINUX_DN_H
+#define _LINUX_DN_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+
+       DECnet Data Structures and Constants
+
+*/
+
+/* 
+ * DNPROTO_NSP can't be the same as SOL_SOCKET, 
+ * so increment each by one (compared to ULTRIX)
+ */
+#define DNPROTO_NSP     2                       /* NSP protocol number       */
+#define DNPROTO_ROU     3                       /* Routing protocol number   */
+#define DNPROTO_NML     4                       /* Net mgt protocol number   */
+#define DNPROTO_EVL     5                       /* Evl protocol number (usr) */
+#define DNPROTO_EVR     6                       /* Evl protocol number (evl) */
+#define DNPROTO_NSPT    7                       /* NSP trace protocol number */
+
+
+#define DN_ADDL                2
+#define DN_MAXADDL     2 /* ULTRIX headers have 20 here, but pathworks has 2 */
+#define DN_MAXOPTL     16
+#define DN_MAXOBJL     16
+#define DN_MAXACCL     40
+#define DN_MAXALIASL   128
+#define DN_MAXNODEL    256
+#define DNBUFSIZE      65023
+
+/* 
+ * SET/GET Socket options  - must match the DSO_ numbers below
+ */
+#define SO_CONDATA      1
+#define SO_CONACCESS    2
+#define SO_PROXYUSR     3
+#define SO_LINKINFO     7
+
+#define DSO_CONDATA     1        /* Set/Get connect data                */
+#define DSO_DISDATA     10       /* Set/Get disconnect data             */
+#define DSO_CONACCESS   2        /* Set/Get connect access data         */
+#define DSO_ACCEPTMODE  4        /* Set/Get accept mode                 */
+#define DSO_CONACCEPT   5        /* Accept deferred connection          */
+#define DSO_CONREJECT   6        /* Reject deferred connection          */
+#define DSO_LINKINFO    7        /* Set/Get link information            */
+#define DSO_STREAM      8        /* Set socket type to stream           */
+#define DSO_SEQPACKET   9        /* Set socket type to sequenced packet */
+#define DSO_MAXWINDOW   11       /* Maximum window size allowed         */
+#define DSO_NODELAY    12       /* Turn off nagle                      */
+#define DSO_CORK        13       /* Wait for more data!                 */
+#define DSO_SERVICES   14       /* NSP Services field                  */
+#define DSO_INFO       15       /* NSP Info field                      */
+#define DSO_MAX         15       /* Maximum option number               */
+
+
+/* LINK States */
+#define LL_INACTIVE    0
+#define LL_CONNECTING  1
+#define LL_RUNNING     2
+#define LL_DISCONNECTING 3
+
+#define ACC_IMMED 0
+#define ACC_DEFER 1
+
+#define SDF_WILD        1                  /* Wild card object          */
+#define SDF_PROXY       2                  /* Addr eligible for proxy   */
+#define SDF_UICPROXY    4                  /* Use uic-based proxy       */
+
+/* Structures */
+
+
+struct dn_naddr {
+       __le16          a_len;
+       __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */
+};
+
+struct sockaddr_dn {
+       __u16           sdn_family;
+       __u8            sdn_flags;
+       __u8            sdn_objnum;
+       __le16          sdn_objnamel;
+       __u8            sdn_objname[DN_MAXOBJL];
+       struct   dn_naddr       sdn_add;
+};
+#define sdn_nodeaddrl   sdn_add.a_len   /* Node address length  */
+#define sdn_nodeaddr    sdn_add.a_addr  /* Node address         */
+
+
+
+/*
+ * DECnet set/get DSO_CONDATA, DSO_DISDATA (optional data) structure
+ */
+struct optdata_dn {
+        __le16  opt_status;     /* Extended status return */
+#define opt_sts opt_status
+        __le16  opt_optl;       /* Length of user data    */
+        __u8   opt_data[16];   /* User data              */
+};
+
+struct accessdata_dn {
+       __u8            acc_accl;
+       __u8            acc_acc[DN_MAXACCL];
+       __u8            acc_passl;
+       __u8            acc_pass[DN_MAXACCL];
+       __u8            acc_userl;
+       __u8            acc_user[DN_MAXACCL];
+};
+
+/*
+ * DECnet logical link information structure
+ */
+struct linkinfo_dn {
+        __u16  idn_segsize;    /* Segment size for link */
+        __u8   idn_linkstate;  /* Logical link state    */
+};
+
+/*
+ * Ethernet address format (for DECnet)
+ */
+union etheraddress {
+        __u8 dne_addr[ETH_ALEN];      /* Full ethernet address */
+  struct {
+                __u8 dne_hiord[4];    /* DECnet HIORD prefix   */
+                __u8 dne_nodeaddr[2]; /* DECnet node address   */
+  } dne_remote;
+};
+
+
+/*
+ * DECnet physical socket address format
+ */
+struct dn_addr {
+        __le16 dna_family;      /* AF_DECnet               */
+        union etheraddress dna_netaddr; /* DECnet ethernet address */
+};
+
+#define DECNET_IOCTL_BASE 0x89 /* PROTOPRIVATE range */
+
+#define SIOCSNETADDR  _IOW(DECNET_IOCTL_BASE, 0xe0, struct dn_naddr)
+#define SIOCGNETADDR  _IOR(DECNET_IOCTL_BASE, 0xe1, struct dn_naddr)
+#define OSIOCSNETADDR _IOW(DECNET_IOCTL_BASE, 0xe0, int)
+#define OSIOCGNETADDR _IOR(DECNET_IOCTL_BASE, 0xe1, int)
+
+#endif /* _LINUX_DN_H */
diff --git a/lib/libdss-include/linux/dqblk_xfs.h b/lib/libdss-include/linux/dqblk_xfs.h
new file mode 100644 (file)
index 0000000..dcd75cc
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 1995-2001,2004 Silicon Graphics, Inc.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesset General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+#ifndef _LINUX_DQBLK_XFS_H
+#define _LINUX_DQBLK_XFS_H
+
+#include <linux/types.h>
+
+/*
+ * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM).
+ */
+
+#define XQM_CMD(x)     (('X'<<8)+(x))  /* note: forms first QCMD argument */
+#define XQM_COMMAND(x) (((x) & (0xff<<8)) == ('X'<<8)) /* test if for XFS */
+
+#define XQM_USRQUOTA   0       /* system call user quota type */
+#define XQM_GRPQUOTA   1       /* system call group quota type */
+#define XQM_PRJQUOTA   2       /* system call project quota type */
+#define XQM_MAXQUOTAS  3
+
+#define Q_XQUOTAON     XQM_CMD(1)      /* enable accounting/enforcement */
+#define Q_XQUOTAOFF    XQM_CMD(2)      /* disable accounting/enforcement */
+#define Q_XGETQUOTA    XQM_CMD(3)      /* get disk limits and usage */
+#define Q_XSETQLIM     XQM_CMD(4)      /* set disk limits */
+#define Q_XGETQSTAT    XQM_CMD(5)      /* get quota subsystem status */
+#define Q_XQUOTARM     XQM_CMD(6)      /* free disk space used by dquots */
+#define Q_XQUOTASYNC   XQM_CMD(7)      /* delalloc flush, updates dquots */
+#define Q_XGETQSTATV   XQM_CMD(8)      /* newer version of get quota */
+
+/*
+ * fs_disk_quota structure:
+ *
+ * This contains the current quota information regarding a user/proj/group.
+ * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of
+ * 512 bytes.
+ */
+#define FS_DQUOT_VERSION       1       /* fs_disk_quota.d_version */
+typedef struct fs_disk_quota {
+       __s8            d_version;      /* version of this structure */
+       __s8            d_flags;        /* FS_{USER,PROJ,GROUP}_QUOTA */
+       __u16           d_fieldmask;    /* field specifier */
+       __u32           d_id;           /* user, project, or group ID */
+       __u64           d_blk_hardlimit;/* absolute limit on disk blks */
+       __u64           d_blk_softlimit;/* preferred limit on disk blks */
+       __u64           d_ino_hardlimit;/* maximum # allocated inodes */
+       __u64           d_ino_softlimit;/* preferred inode limit */
+       __u64           d_bcount;       /* # disk blocks owned by the user */
+       __u64           d_icount;       /* # inodes owned by the user */
+       __s32           d_itimer;       /* zero if within inode limits */
+                                       /* if not, we refuse service */
+       __s32           d_btimer;       /* similar to above; for disk blocks */
+       __u16           d_iwarns;       /* # warnings issued wrt num inodes */
+       __u16           d_bwarns;       /* # warnings issued wrt disk blocks */
+       __s32           d_padding2;     /* padding2 - for future use */
+       __u64           d_rtb_hardlimit;/* absolute limit on realtime blks */
+       __u64           d_rtb_softlimit;/* preferred limit on RT disk blks */
+       __u64           d_rtbcount;     /* # realtime blocks owned */
+       __s32           d_rtbtimer;     /* similar to above; for RT disk blks */
+       __u16           d_rtbwarns;     /* # warnings issued wrt RT disk blks */
+       __s16           d_padding3;     /* padding3 - for future use */ 
+       char            d_padding4[8];  /* yet more padding */
+} fs_disk_quota_t;
+
+/*
+ * These fields are sent to Q_XSETQLIM to specify fields that need to change.
+ */
+#define FS_DQ_ISOFT    (1<<0)
+#define FS_DQ_IHARD    (1<<1)
+#define FS_DQ_BSOFT    (1<<2)
+#define FS_DQ_BHARD    (1<<3)
+#define FS_DQ_RTBSOFT  (1<<4)
+#define FS_DQ_RTBHARD  (1<<5)
+#define FS_DQ_LIMIT_MASK       (FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \
+                                FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD)
+/*
+ * These timers can only be set in super user's dquot. For others, timers are
+ * automatically started and stopped. Superusers timer values set the limits
+ * for the rest.  In case these values are zero, the DQ_{F,B}TIMELIMIT values
+ * defined below are used. 
+ * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
+ */
+#define FS_DQ_BTIMER   (1<<6)
+#define FS_DQ_ITIMER   (1<<7)
+#define FS_DQ_RTBTIMER         (1<<8)
+#define FS_DQ_TIMER_MASK       (FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER)
+
+/*
+ * Warning counts are set in both super user's dquot and others. For others,
+ * warnings are set/cleared by the administrators (or automatically by going
+ * below the soft limit).  Superusers warning values set the warning limits
+ * for the rest.  In case these values are zero, the DQ_{F,B}WARNLIMIT values
+ * defined below are used. 
+ * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
+ */
+#define FS_DQ_BWARNS   (1<<9)
+#define FS_DQ_IWARNS   (1<<10)
+#define FS_DQ_RTBWARNS (1<<11)
+#define FS_DQ_WARNS_MASK       (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS)
+
+/*
+ * Accounting values.  These can only be set for filesystem with
+ * non-transactional quotas that require quotacheck(8) in userspace.
+ */
+#define FS_DQ_BCOUNT           (1<<12)
+#define FS_DQ_ICOUNT           (1<<13)
+#define FS_DQ_RTBCOUNT         (1<<14)
+#define FS_DQ_ACCT_MASK                (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT)
+
+/*
+ * Various flags related to quotactl(2).
+ */
+#define FS_QUOTA_UDQ_ACCT      (1<<0)  /* user quota accounting */
+#define FS_QUOTA_UDQ_ENFD      (1<<1)  /* user quota limits enforcement */
+#define FS_QUOTA_GDQ_ACCT      (1<<2)  /* group quota accounting */
+#define FS_QUOTA_GDQ_ENFD      (1<<3)  /* group quota limits enforcement */
+#define FS_QUOTA_PDQ_ACCT      (1<<4)  /* project quota accounting */
+#define FS_QUOTA_PDQ_ENFD      (1<<5)  /* project quota limits enforcement */
+
+#define FS_USER_QUOTA          (1<<0)  /* user quota type */
+#define FS_PROJ_QUOTA          (1<<1)  /* project quota type */
+#define FS_GROUP_QUOTA         (1<<2)  /* group quota type */
+
+/*
+ * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system.
+ * Provides a centralized way to get meta information about the quota subsystem.
+ * eg. space taken up for user and group quotas, number of dquots currently
+ * incore.
+ */
+#define FS_QSTAT_VERSION       1       /* fs_quota_stat.qs_version */
+
+/*
+ * Some basic information about 'quota files'.
+ */
+typedef struct fs_qfilestat {
+       __u64           qfs_ino;        /* inode number */
+       __u64           qfs_nblks;      /* number of BBs 512-byte-blks */
+       __u32           qfs_nextents;   /* number of extents */
+} fs_qfilestat_t;
+
+typedef struct fs_quota_stat {
+       __s8            qs_version;     /* version number for future changes */
+       __u16           qs_flags;       /* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
+       __s8            qs_pad;         /* unused */
+       fs_qfilestat_t  qs_uquota;      /* user quota storage information */
+       fs_qfilestat_t  qs_gquota;      /* group quota storage information */
+       __u32           qs_incoredqs;   /* number of dquots incore */
+       __s32           qs_btimelimit;  /* limit for blks timer */      
+       __s32           qs_itimelimit;  /* limit for inodes timer */    
+       __s32           qs_rtbtimelimit;/* limit for rt blks timer */   
+       __u16           qs_bwarnlimit;  /* limit for num warnings */
+       __u16           qs_iwarnlimit;  /* limit for num warnings */
+} fs_quota_stat_t;
+
+/*
+ * fs_quota_statv is used by Q_XGETQSTATV for a given file system. It provides
+ * a centralized way to get meta information about the quota subsystem. eg.
+ * space taken up for user, group, and project quotas, number of dquots
+ * currently incore.
+ *
+ * This version has proper versioning support with appropriate padding for
+ * future expansions, and ability to expand for future without creating any
+ * backward compatibility issues.
+ *
+ * Q_XGETQSTATV uses the passed in value of the requested version via
+ * fs_quota_statv.qs_version to determine the return data layout of
+ * fs_quota_statv.  The kernel will fill the data fields relevant to that
+ * version.
+ *
+ * If kernel does not support user space caller specified version, EINVAL will
+ * be returned. User space caller can then reduce the version number and retry
+ * the same command.
+ */
+#define FS_QSTATV_VERSION1     1       /* fs_quota_statv.qs_version */
+/*
+ * Some basic information about 'quota files' for Q_XGETQSTATV command
+ */
+struct fs_qfilestatv {
+       __u64           qfs_ino;        /* inode number */
+       __u64           qfs_nblks;      /* number of BBs 512-byte-blks */
+       __u32           qfs_nextents;   /* number of extents */
+       __u32           qfs_pad;        /* pad for 8-byte alignment */
+};
+
+struct fs_quota_statv {
+       __s8                    qs_version;     /* version for future changes */
+       __u8                    qs_pad1;        /* pad for 16bit alignment */
+       __u16                   qs_flags;       /* FS_QUOTA_.* flags */
+       __u32                   qs_incoredqs;   /* number of dquots incore */
+       struct fs_qfilestatv    qs_uquota;      /* user quota information */
+       struct fs_qfilestatv    qs_gquota;      /* group quota information */
+       struct fs_qfilestatv    qs_pquota;      /* project quota information */
+       __s32                   qs_btimelimit;  /* limit for blks timer */
+       __s32                   qs_itimelimit;  /* limit for inodes timer */
+       __s32                   qs_rtbtimelimit;/* limit for rt blks timer */
+       __u16                   qs_bwarnlimit;  /* limit for num warnings */
+       __u16                   qs_iwarnlimit;  /* limit for num warnings */
+       __u64                   qs_pad2[8];     /* for future proofing */
+};
+
+#endif /* _LINUX_DQBLK_XFS_H */
diff --git a/lib/libdss-include/linux/dvb/audio.h b/lib/libdss-include/linux/dvb/audio.h
new file mode 100644 (file)
index 0000000..d47bccd
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * audio.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBAUDIO_H_
+#define _DVBAUDIO_H_
+
+#include <linux/types.h>
+
+typedef enum {
+       AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */
+       AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */
+} audio_stream_source_t;
+
+
+typedef enum {
+       AUDIO_STOPPED,      /* Device is stopped */
+       AUDIO_PLAYING,      /* Device is currently playing */
+       AUDIO_PAUSED        /* Device is paused */
+} audio_play_state_t;
+
+
+typedef enum {
+       AUDIO_STEREO,
+       AUDIO_MONO_LEFT,
+       AUDIO_MONO_RIGHT,
+       AUDIO_MONO,
+       AUDIO_STEREO_SWAPPED
+} audio_channel_select_t;
+
+
+typedef struct audio_mixer {
+       unsigned int volume_left;
+       unsigned int volume_right;
+  // what else do we need? bass, pass-through, ...
+} audio_mixer_t;
+
+
+typedef struct audio_status {
+       int                    AV_sync_state;  /* sync audio and video? */
+       int                    mute_state;     /* audio is muted */
+       audio_play_state_t     play_state;     /* current playback state */
+       audio_stream_source_t  stream_source;  /* current stream source */
+       audio_channel_select_t channel_select; /* currently selected channel */
+       int                    bypass_mode;    /* pass on audio data to */
+       audio_mixer_t          mixer_state;    /* current mixer state */
+} audio_status_t;                              /* separate decoder hardware */
+
+
+typedef
+struct audio_karaoke {  /* if Vocal1 or Vocal2 are non-zero, they get mixed  */
+       int vocal1;    /* into left and right t at 70% each */
+       int vocal2;    /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/
+       int melody;    /* mixed into the left channel and */
+                      /* Vocal2 into the right channel at 100% each. */
+                      /* if Melody is non-zero, the melody channel gets mixed*/
+} audio_karaoke_t;     /* into left and right  */
+
+
+typedef __u16 audio_attributes_t;
+/*   bits: descr. */
+/*   15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */
+/*   12    multichannel extension */
+/*   11-10 audio type (0=not spec, 1=language included) */
+/*    9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */
+/*    7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit,  */
+/*    5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */
+/*    2- 0 number of audio channels (n+1 channels) */
+
+
+/* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */
+#define AUDIO_CAP_DTS    1
+#define AUDIO_CAP_LPCM   2
+#define AUDIO_CAP_MP1    4
+#define AUDIO_CAP_MP2    8
+#define AUDIO_CAP_MP3   16
+#define AUDIO_CAP_AAC   32
+#define AUDIO_CAP_OGG   64
+#define AUDIO_CAP_SDDS 128
+#define AUDIO_CAP_AC3  256
+
+#define AUDIO_STOP                 _IO('o', 1)
+#define AUDIO_PLAY                 _IO('o', 2)
+#define AUDIO_PAUSE                _IO('o', 3)
+#define AUDIO_CONTINUE             _IO('o', 4)
+#define AUDIO_SELECT_SOURCE        _IO('o', 5)
+#define AUDIO_SET_MUTE             _IO('o', 6)
+#define AUDIO_SET_AV_SYNC          _IO('o', 7)
+#define AUDIO_SET_BYPASS_MODE      _IO('o', 8)
+#define AUDIO_CHANNEL_SELECT       _IO('o', 9)
+#define AUDIO_GET_STATUS           _IOR('o', 10, audio_status_t)
+
+#define AUDIO_GET_CAPABILITIES     _IOR('o', 11, unsigned int)
+#define AUDIO_CLEAR_BUFFER         _IO('o',  12)
+#define AUDIO_SET_ID               _IO('o', 13)
+#define AUDIO_SET_MIXER            _IOW('o', 14, audio_mixer_t)
+#define AUDIO_SET_STREAMTYPE       _IO('o', 15)
+#define AUDIO_SET_EXT_ID           _IO('o', 16)
+#define AUDIO_SET_ATTRIBUTES       _IOW('o', 17, audio_attributes_t)
+#define AUDIO_SET_KARAOKE          _IOW('o', 18, audio_karaoke_t)
+
+/**
+ * AUDIO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define AUDIO_GET_PTS              _IOR('o', 19, __u64)
+#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
+
+#endif /* _DVBAUDIO_H_ */
diff --git a/lib/libdss-include/linux/dvb/ca.h b/lib/libdss-include/linux/dvb/ca.h
new file mode 100644 (file)
index 0000000..c18537f
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * ca.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBCA_H_
+#define _DVBCA_H_
+
+/* slot interface types and info */
+
+typedef struct ca_slot_info {
+       int num;               /* slot number */
+
+       int type;              /* CA interface this slot supports */
+#define CA_CI            1     /* CI high level interface */
+#define CA_CI_LINK       2     /* CI link layer level interface */
+#define CA_CI_PHYS       4     /* CI physical layer level interface */
+#define CA_DESCR         8     /* built-in descrambler */
+#define CA_SC          128     /* simple smart card interface */
+
+       unsigned int flags;
+#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
+#define CA_CI_MODULE_READY   2
+} ca_slot_info_t;
+
+
+/* descrambler types and info */
+
+typedef struct ca_descr_info {
+       unsigned int num;          /* number of available descramblers (keys) */
+       unsigned int type;         /* type of supported scrambling system */
+#define CA_ECD           1
+#define CA_NDS           2
+#define CA_DSS           4
+} ca_descr_info_t;
+
+typedef struct ca_caps {
+       unsigned int slot_num;     /* total number of CA card and module slots */
+       unsigned int slot_type;    /* OR of all supported types */
+       unsigned int descr_num;    /* total number of descrambler slots (keys) */
+       unsigned int descr_type;   /* OR of all supported types */
+} ca_caps_t;
+
+/* a message to/from a CI-CAM */
+typedef struct ca_msg {
+       unsigned int index;
+       unsigned int type;
+       unsigned int length;
+       unsigned char msg[256];
+} ca_msg_t;
+
+typedef struct ca_descr {
+       unsigned int index;
+       unsigned int parity;    /* 0 == even, 1 == odd */
+       unsigned char cw[8];
+} ca_descr_t;
+
+typedef struct ca_pid {
+       unsigned int pid;
+       int index;              /* -1 == disable*/
+} ca_pid_t;
+
+#define CA_RESET          _IO('o', 128)
+#define CA_GET_CAP        _IOR('o', 129, ca_caps_t)
+#define CA_GET_SLOT_INFO  _IOR('o', 130, ca_slot_info_t)
+#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
+#define CA_GET_MSG        _IOR('o', 132, ca_msg_t)
+#define CA_SEND_MSG       _IOW('o', 133, ca_msg_t)
+#define CA_SET_DESCR      _IOW('o', 134, ca_descr_t)
+#define CA_SET_PID        _IOW('o', 135, ca_pid_t)
+
+#endif
diff --git a/lib/libdss-include/linux/dvb/dmx.h b/lib/libdss-include/linux/dvb/dmx.h
new file mode 100644 (file)
index 0000000..425a945
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * dmx.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDMX_H_
+#define _DVBDMX_H_
+
+#include <linux/types.h>
+#include <time.h>
+
+
+#define DMX_FILTER_SIZE 16
+
+enum dmx_output
+{
+       DMX_OUT_DECODER, /* Streaming directly to decoder. */
+       DMX_OUT_TAP,     /* Output going to a memory buffer */
+                        /* (to be retrieved via the read command).*/
+       DMX_OUT_TS_TAP,  /* Output multiplexed into a new TS  */
+                        /* (to be retrieved by reading from the */
+                        /* logical DVR device).                 */
+       DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
+};
+
+typedef enum dmx_output dmx_output_t;
+
+typedef enum dmx_input
+{
+       DMX_IN_FRONTEND, /* Input from a front-end device.  */
+       DMX_IN_DVR       /* Input from the logical DVR device.  */
+} dmx_input_t;
+
+
+typedef enum dmx_ts_pes
+{
+       DMX_PES_AUDIO0,
+       DMX_PES_VIDEO0,
+       DMX_PES_TELETEXT0,
+       DMX_PES_SUBTITLE0,
+       DMX_PES_PCR0,
+
+       DMX_PES_AUDIO1,
+       DMX_PES_VIDEO1,
+       DMX_PES_TELETEXT1,
+       DMX_PES_SUBTITLE1,
+       DMX_PES_PCR1,
+
+       DMX_PES_AUDIO2,
+       DMX_PES_VIDEO2,
+       DMX_PES_TELETEXT2,
+       DMX_PES_SUBTITLE2,
+       DMX_PES_PCR2,
+
+       DMX_PES_AUDIO3,
+       DMX_PES_VIDEO3,
+       DMX_PES_TELETEXT3,
+       DMX_PES_SUBTITLE3,
+       DMX_PES_PCR3,
+
+       DMX_PES_OTHER
+} dmx_pes_type_t;
+
+#define DMX_PES_AUDIO    DMX_PES_AUDIO0
+#define DMX_PES_VIDEO    DMX_PES_VIDEO0
+#define DMX_PES_TELETEXT DMX_PES_TELETEXT0
+#define DMX_PES_SUBTITLE DMX_PES_SUBTITLE0
+#define DMX_PES_PCR      DMX_PES_PCR0
+
+
+typedef struct dmx_filter
+{
+       __u8  filter[DMX_FILTER_SIZE];
+       __u8  mask[DMX_FILTER_SIZE];
+       __u8  mode[DMX_FILTER_SIZE];
+} dmx_filter_t;
+
+
+struct dmx_sct_filter_params
+{
+       __u16          pid;
+       dmx_filter_t   filter;
+       __u32          timeout;
+       __u32          flags;
+#define DMX_CHECK_CRC       1
+#define DMX_ONESHOT         2
+#define DMX_IMMEDIATE_START 4
+#define DMX_KERNEL_CLIENT   0x8000
+};
+
+
+struct dmx_pes_filter_params
+{
+       __u16          pid;
+       dmx_input_t    input;
+       dmx_output_t   output;
+       dmx_pes_type_t pes_type;
+       __u32          flags;
+};
+
+typedef struct dmx_caps {
+       __u32 caps;
+       int num_decoders;
+} dmx_caps_t;
+
+typedef enum dmx_source {
+       DMX_SOURCE_FRONT0 = 0,
+       DMX_SOURCE_FRONT1,
+       DMX_SOURCE_FRONT2,
+       DMX_SOURCE_FRONT3,
+       DMX_SOURCE_DVR0   = 16,
+       DMX_SOURCE_DVR1,
+       DMX_SOURCE_DVR2,
+       DMX_SOURCE_DVR3
+} dmx_source_t;
+
+struct dmx_stc {
+       unsigned int num;       /* input : which STC? 0..N */
+       unsigned int base;      /* output: divisor for stc to get 90 kHz clock */
+       __u64 stc;              /* output: stc in 'base'*90 kHz units */
+};
+
+#define DMX_START                _IO('o', 41)
+#define DMX_STOP                 _IO('o', 42)
+#define DMX_SET_FILTER           _IOW('o', 43, struct dmx_sct_filter_params)
+#define DMX_SET_PES_FILTER       _IOW('o', 44, struct dmx_pes_filter_params)
+#define DMX_SET_BUFFER_SIZE      _IO('o', 45)
+#define DMX_GET_PES_PIDS         _IOR('o', 47, __u16[5])
+#define DMX_GET_CAPS             _IOR('o', 48, dmx_caps_t)
+#define DMX_SET_SOURCE           _IOW('o', 49, dmx_source_t)
+#define DMX_GET_STC              _IOWR('o', 50, struct dmx_stc)
+#define DMX_ADD_PID              _IOW('o', 51, __u16)
+#define DMX_REMOVE_PID           _IOW('o', 52, __u16)
+
+#endif /* _DVBDMX_H_ */
diff --git a/lib/libdss-include/linux/dvb/frontend.h b/lib/libdss-include/linux/dvb/frontend.h
new file mode 100644 (file)
index 0000000..0f65bd5
--- /dev/null
@@ -0,0 +1,600 @@
+/*
+ * frontend.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                 Ralph  Metzler <ralph@convergence.de>
+ *                 Holger Waechtler <holger@convergence.de>
+ *                 Andre Draszik <ad@convergence.de>
+ *                 for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBFRONTEND_H_
+#define _DVBFRONTEND_H_
+
+#include <linux/types.h>
+
+enum fe_type {
+       FE_QPSK,
+       FE_QAM,
+       FE_OFDM,
+       FE_ATSC
+};
+
+enum fe_caps {
+       FE_IS_STUPID                    = 0,
+       FE_CAN_INVERSION_AUTO           = 0x1,
+       FE_CAN_FEC_1_2                  = 0x2,
+       FE_CAN_FEC_2_3                  = 0x4,
+       FE_CAN_FEC_3_4                  = 0x8,
+       FE_CAN_FEC_4_5                  = 0x10,
+       FE_CAN_FEC_5_6                  = 0x20,
+       FE_CAN_FEC_6_7                  = 0x40,
+       FE_CAN_FEC_7_8                  = 0x80,
+       FE_CAN_FEC_8_9                  = 0x100,
+       FE_CAN_FEC_AUTO                 = 0x200,
+       FE_CAN_QPSK                     = 0x400,
+       FE_CAN_QAM_16                   = 0x800,
+       FE_CAN_QAM_32                   = 0x1000,
+       FE_CAN_QAM_64                   = 0x2000,
+       FE_CAN_QAM_128                  = 0x4000,
+       FE_CAN_QAM_256                  = 0x8000,
+       FE_CAN_QAM_AUTO                 = 0x10000,
+       FE_CAN_TRANSMISSION_MODE_AUTO   = 0x20000,
+       FE_CAN_BANDWIDTH_AUTO           = 0x40000,
+       FE_CAN_GUARD_INTERVAL_AUTO      = 0x80000,
+       FE_CAN_HIERARCHY_AUTO           = 0x100000,
+       FE_CAN_8VSB                     = 0x200000,
+       FE_CAN_16VSB                    = 0x400000,
+       FE_HAS_EXTENDED_CAPS            = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+       FE_CAN_MULTISTREAM              = 0x4000000,  /* frontend supports multistream filtering */
+       FE_CAN_TURBO_FEC                = 0x8000000,  /* frontend supports "turbo fec modulation" */
+       FE_CAN_2G_MODULATION            = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
+       FE_NEEDS_BENDING                = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
+       FE_CAN_RECOVER                  = 0x40000000, /* frontend can recover from a cable unplug automatically */
+       FE_CAN_MUTE_TS                  = 0x80000000  /* frontend can stop spurious TS data output */
+};
+
+struct dvb_frontend_info {
+       char       name[128];
+       enum fe_type type;      /* DEPRECATED. Use DTV_ENUM_DELSYS instead */
+       __u32      frequency_min;
+       __u32      frequency_max;
+       __u32      frequency_stepsize;
+       __u32      frequency_tolerance;
+       __u32      symbol_rate_min;
+       __u32      symbol_rate_max;
+       __u32      symbol_rate_tolerance;       /* ppm */
+       __u32      notifier_delay;              /* DEPRECATED */
+       enum fe_caps caps;
+};
+
+
+/**
+ *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
+ *  the meaning of this struct...
+ */
+struct dvb_diseqc_master_cmd {
+       __u8 msg [6];   /*  { framing, address, command, data [3] } */
+       __u8 msg_len;   /*  valid values are 3...6  */
+};
+
+struct dvb_diseqc_slave_reply {
+       __u8 msg [4];   /*  { framing, data [3] } */
+       __u8 msg_len;   /*  valid values are 0...4, 0 means no msg  */
+       int  timeout;   /*  return from ioctl after timeout ms with */
+};                     /*  errorcode when no message was received  */
+
+enum fe_sec_voltage {
+       SEC_VOLTAGE_13,
+       SEC_VOLTAGE_18,
+       SEC_VOLTAGE_OFF
+};
+
+enum fe_sec_tone_mode {
+       SEC_TONE_ON,
+       SEC_TONE_OFF
+};
+
+enum fe_sec_mini_cmd {
+       SEC_MINI_A,
+       SEC_MINI_B
+};
+
+/**
+ * enum fe_status - enumerates the possible frontend status
+ * @FE_HAS_SIGNAL:     found something above the noise level
+ * @FE_HAS_CARRIER:    found a DVB signal
+ * @FE_HAS_VITERBI:    FEC is stable
+ * @FE_HAS_SYNC:       found sync bytes
+ * @FE_HAS_LOCK:       everything's working
+ * @FE_TIMEDOUT:       no lock within the last ~2 seconds
+ * @FE_REINIT:         frontend was reinitialized, application is recommended
+ *                     to reset DiSEqC, tone and parameters
+ */
+enum fe_status {
+       FE_HAS_SIGNAL           = 0x01,
+       FE_HAS_CARRIER          = 0x02,
+       FE_HAS_VITERBI          = 0x04,
+       FE_HAS_SYNC             = 0x08,
+       FE_HAS_LOCK             = 0x10,
+       FE_TIMEDOUT             = 0x20,
+       FE_REINIT               = 0x40,
+};
+
+enum fe_spectral_inversion {
+       INVERSION_OFF,
+       INVERSION_ON,
+       INVERSION_AUTO
+};
+
+enum fe_code_rate {
+       FEC_NONE = 0,
+       FEC_1_2,
+       FEC_2_3,
+       FEC_3_4,
+       FEC_4_5,
+       FEC_5_6,
+       FEC_6_7,
+       FEC_7_8,
+       FEC_8_9,
+       FEC_AUTO,
+       FEC_3_5,
+       FEC_9_10,
+       FEC_2_5,
+};
+
+enum fe_modulation {
+       QPSK,
+       QAM_16,
+       QAM_32,
+       QAM_64,
+       QAM_128,
+       QAM_256,
+       QAM_AUTO,
+       VSB_8,
+       VSB_16,
+       PSK_8,
+       APSK_16,
+       APSK_32,
+       DQPSK,
+       QAM_4_NR,
+};
+
+enum fe_transmit_mode {
+       TRANSMISSION_MODE_2K,
+       TRANSMISSION_MODE_8K,
+       TRANSMISSION_MODE_AUTO,
+       TRANSMISSION_MODE_4K,
+       TRANSMISSION_MODE_1K,
+       TRANSMISSION_MODE_16K,
+       TRANSMISSION_MODE_32K,
+       TRANSMISSION_MODE_C1,
+       TRANSMISSION_MODE_C3780,
+};
+
+enum fe_guard_interval {
+       GUARD_INTERVAL_1_32,
+       GUARD_INTERVAL_1_16,
+       GUARD_INTERVAL_1_8,
+       GUARD_INTERVAL_1_4,
+       GUARD_INTERVAL_AUTO,
+       GUARD_INTERVAL_1_128,
+       GUARD_INTERVAL_19_128,
+       GUARD_INTERVAL_19_256,
+       GUARD_INTERVAL_PN420,
+       GUARD_INTERVAL_PN595,
+       GUARD_INTERVAL_PN945,
+};
+
+enum fe_hierarchy {
+       HIERARCHY_NONE,
+       HIERARCHY_1,
+       HIERARCHY_2,
+       HIERARCHY_4,
+       HIERARCHY_AUTO
+};
+
+enum fe_interleaving {
+       INTERLEAVING_NONE,
+       INTERLEAVING_AUTO,
+       INTERLEAVING_240,
+       INTERLEAVING_720,
+};
+
+/* S2API Commands */
+#define DTV_UNDEFINED          0
+#define DTV_TUNE               1
+#define DTV_CLEAR              2
+#define DTV_FREQUENCY          3
+#define DTV_MODULATION         4
+#define DTV_BANDWIDTH_HZ       5
+#define DTV_INVERSION          6
+#define DTV_DISEQC_MASTER      7
+#define DTV_SYMBOL_RATE                8
+#define DTV_INNER_FEC          9
+#define DTV_VOLTAGE            10
+#define DTV_TONE               11
+#define DTV_PILOT              12
+#define DTV_ROLLOFF            13
+#define DTV_DISEQC_SLAVE_REPLY 14
+
+/* Basic enumeration set for querying unlimited capabilities */
+#define DTV_FE_CAPABILITY_COUNT        15
+#define DTV_FE_CAPABILITY      16
+#define DTV_DELIVERY_SYSTEM    17
+
+/* ISDB-T and ISDB-Tsb */
+#define DTV_ISDBT_PARTIAL_RECEPTION    18
+#define DTV_ISDBT_SOUND_BROADCASTING   19
+
+#define DTV_ISDBT_SB_SUBCHANNEL_ID     20
+#define DTV_ISDBT_SB_SEGMENT_IDX       21
+#define DTV_ISDBT_SB_SEGMENT_COUNT     22
+
+#define DTV_ISDBT_LAYERA_FEC                   23
+#define DTV_ISDBT_LAYERA_MODULATION            24
+#define DTV_ISDBT_LAYERA_SEGMENT_COUNT         25
+#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING     26
+
+#define DTV_ISDBT_LAYERB_FEC                   27
+#define DTV_ISDBT_LAYERB_MODULATION            28
+#define DTV_ISDBT_LAYERB_SEGMENT_COUNT         29
+#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING     30
+
+#define DTV_ISDBT_LAYERC_FEC                   31
+#define DTV_ISDBT_LAYERC_MODULATION            32
+#define DTV_ISDBT_LAYERC_SEGMENT_COUNT         33
+#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING     34
+
+#define DTV_API_VERSION                35
+
+#define DTV_CODE_RATE_HP       36
+#define DTV_CODE_RATE_LP       37
+#define DTV_GUARD_INTERVAL     38
+#define DTV_TRANSMISSION_MODE  39
+#define DTV_HIERARCHY          40
+
+#define DTV_ISDBT_LAYER_ENABLED        41
+
+#define DTV_STREAM_ID          42
+#define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY        43
+
+#define DTV_ENUM_DELSYS                44
+
+/* ATSC-MH */
+#define DTV_ATSCMH_FIC_VER             45
+#define DTV_ATSCMH_PARADE_ID           46
+#define DTV_ATSCMH_NOG                 47
+#define DTV_ATSCMH_TNOG                        48
+#define DTV_ATSCMH_SGN                 49
+#define DTV_ATSCMH_PRC                 50
+#define DTV_ATSCMH_RS_FRAME_MODE       51
+#define DTV_ATSCMH_RS_FRAME_ENSEMBLE   52
+#define DTV_ATSCMH_RS_CODE_MODE_PRI    53
+#define DTV_ATSCMH_RS_CODE_MODE_SEC    54
+#define DTV_ATSCMH_SCCC_BLOCK_MODE     55
+#define DTV_ATSCMH_SCCC_CODE_MODE_A    56
+#define DTV_ATSCMH_SCCC_CODE_MODE_B    57
+#define DTV_ATSCMH_SCCC_CODE_MODE_C    58
+#define DTV_ATSCMH_SCCC_CODE_MODE_D    59
+
+#define DTV_INTERLEAVING                       60
+#define DTV_LNA                                        61
+
+/* Quality parameters */
+#define DTV_STAT_SIGNAL_STRENGTH       62
+#define DTV_STAT_CNR                   63
+#define DTV_STAT_PRE_ERROR_BIT_COUNT   64
+#define DTV_STAT_PRE_TOTAL_BIT_COUNT   65
+#define DTV_STAT_POST_ERROR_BIT_COUNT  66
+#define DTV_STAT_POST_TOTAL_BIT_COUNT  67
+#define DTV_STAT_ERROR_BLOCK_COUNT     68
+#define DTV_STAT_TOTAL_BLOCK_COUNT     69
+
+#define DTV_MAX_COMMAND                DTV_STAT_TOTAL_BLOCK_COUNT
+
+enum fe_pilot {
+       PILOT_ON,
+       PILOT_OFF,
+       PILOT_AUTO,
+};
+
+enum fe_rolloff {
+       ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
+       ROLLOFF_20,
+       ROLLOFF_25,
+       ROLLOFF_AUTO,
+};
+
+enum fe_delivery_system {
+       SYS_UNDEFINED,
+       SYS_DVBC_ANNEX_A,
+       SYS_DVBC_ANNEX_B,
+       SYS_DVBT,
+       SYS_DSS,
+       SYS_DVBS,
+       SYS_DVBS2,
+       SYS_DVBH,
+       SYS_ISDBT,
+       SYS_ISDBS,
+       SYS_ISDBC,
+       SYS_ATSC,
+       SYS_ATSCMH,
+       SYS_DTMB,
+       SYS_CMMB,
+       SYS_DAB,
+       SYS_DVBT2,
+       SYS_TURBO,
+       SYS_DVBC_ANNEX_C,
+};
+
+/* backward compatibility */
+#define SYS_DVBC_ANNEX_AC      SYS_DVBC_ANNEX_A
+#define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */
+
+/* ATSC-MH */
+
+enum atscmh_sccc_block_mode {
+       ATSCMH_SCCC_BLK_SEP      = 0,
+       ATSCMH_SCCC_BLK_COMB     = 1,
+       ATSCMH_SCCC_BLK_RES      = 2,
+};
+
+enum atscmh_sccc_code_mode {
+       ATSCMH_SCCC_CODE_HLF     = 0,
+       ATSCMH_SCCC_CODE_QTR     = 1,
+       ATSCMH_SCCC_CODE_RES     = 2,
+};
+
+enum atscmh_rs_frame_ensemble {
+       ATSCMH_RSFRAME_ENS_PRI   = 0,
+       ATSCMH_RSFRAME_ENS_SEC   = 1,
+};
+
+enum atscmh_rs_frame_mode {
+       ATSCMH_RSFRAME_PRI_ONLY  = 0,
+       ATSCMH_RSFRAME_PRI_SEC   = 1,
+       ATSCMH_RSFRAME_RES       = 2,
+};
+
+enum atscmh_rs_code_mode {
+       ATSCMH_RSCODE_211_187    = 0,
+       ATSCMH_RSCODE_223_187    = 1,
+       ATSCMH_RSCODE_235_187    = 2,
+       ATSCMH_RSCODE_RES        = 3,
+};
+
+#define NO_STREAM_ID_FILTER    (~0U)
+#define LNA_AUTO                (~0U)
+
+struct dtv_cmds_h {
+       char    *name;          /* A display name for debugging purposes */
+
+       __u32   cmd;            /* A unique ID */
+
+       /* Flags */
+       __u32   set:1;          /* Either a set or get property */
+       __u32   buffer:1;       /* Does this property use the buffer? */
+       __u32   reserved:30;    /* Align */
+};
+
+/**
+ * Scale types for the quality parameters.
+ * @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That
+ *                         could indicate a temporary or a permanent
+ *                         condition.
+ * @FE_SCALE_DECIBEL: The scale is measured in 0.001 dB steps, typically
+ *               used on signal measures.
+ * @FE_SCALE_RELATIVE: The scale is a relative percentual measure,
+ *                     ranging from 0 (0%) to 0xffff (100%).
+ * @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like
+ *                     bit error, block error, lapsed time.
+ */
+enum fecap_scale_params {
+       FE_SCALE_NOT_AVAILABLE = 0,
+       FE_SCALE_DECIBEL,
+       FE_SCALE_RELATIVE,
+       FE_SCALE_COUNTER
+};
+
+/**
+ * struct dtv_stats - Used for reading a DTV status property
+ *
+ * @value:     value of the measure. Should range from 0 to 0xffff;
+ * @scale:     Filled with enum fecap_scale_params - the scale
+ *             in usage for that parameter
+ *
+ * For most delivery systems, this will return a single value for each
+ * parameter.
+ * It should be noticed, however, that new OFDM delivery systems like
+ * ISDB can use different modulation types for each group of carriers.
+ * On such standards, up to 8 groups of statistics can be provided, one
+ * for each carrier group (called "layer" on ISDB).
+ * In order to be consistent with other delivery systems, the first
+ * value refers to the entire set of carriers ("global").
+ * dtv_status:scale should use the value FE_SCALE_NOT_AVAILABLE when
+ * the value for the entire group of carriers or from one specific layer
+ * is not provided by the hardware.
+ * st.len should be filled with the latest filled status + 1.
+ *
+ * In other words, for ISDB, those values should be filled like:
+ *     u.st.stat.svalue[0] = global statistics;
+ *     u.st.stat.scale[0] = FE_SCALE_DECIBEL;
+ *     u.st.stat.value[1] = layer A statistics;
+ *     u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available);
+ *     u.st.stat.svalue[2] = layer B statistics;
+ *     u.st.stat.scale[2] = FE_SCALE_DECIBEL;
+ *     u.st.stat.svalue[3] = layer C statistics;
+ *     u.st.stat.scale[3] = FE_SCALE_DECIBEL;
+ *     u.st.len = 4;
+ */
+struct dtv_stats {
+       __u8 scale;     /* enum fecap_scale_params type */
+       union {
+               __u64 uvalue;   /* for counters and relative scales */
+               __s64 svalue;   /* for 0.001 dB measures */
+       };
+} __attribute__ ((packed));
+
+
+#define MAX_DTV_STATS   4
+
+struct dtv_fe_stats {
+       __u8 len;
+       struct dtv_stats stat[MAX_DTV_STATS];
+} __attribute__ ((packed));
+
+struct dtv_property {
+       __u32 cmd;
+       __u32 reserved[3];
+       union {
+               __u32 data;
+               struct dtv_fe_stats st;
+               struct {
+                       __u8 data[32];
+                       __u32 len;
+                       __u32 reserved1[3];
+                       void *reserved2;
+               } buffer;
+       } u;
+       int result;
+} __attribute__ ((packed));
+
+/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
+#define DTV_IOCTL_MAX_MSGS 64
+
+struct dtv_properties {
+       __u32 num;
+       struct dtv_property *props;
+};
+
+
+/*
+ * DEPRECATED: The DVBv3 ioctls, structs and enums should not be used on
+ * newer programs, as it doesn't support the second generation of digital
+ * TV standards, nor supports newer delivery systems.
+ */
+
+enum fe_bandwidth {
+       BANDWIDTH_8_MHZ,
+       BANDWIDTH_7_MHZ,
+       BANDWIDTH_6_MHZ,
+       BANDWIDTH_AUTO,
+       BANDWIDTH_5_MHZ,
+       BANDWIDTH_10_MHZ,
+       BANDWIDTH_1_712_MHZ,
+};
+
+/* This is needed for legacy userspace support */
+typedef enum fe_sec_voltage fe_sec_voltage_t;
+typedef enum fe_caps fe_caps_t;
+typedef enum fe_type fe_type_t;
+typedef enum fe_sec_tone_mode fe_sec_tone_mode_t;
+typedef enum fe_sec_mini_cmd fe_sec_mini_cmd_t;
+typedef enum fe_status fe_status_t;
+typedef enum fe_spectral_inversion fe_spectral_inversion_t;
+typedef enum fe_code_rate fe_code_rate_t;
+typedef enum fe_modulation fe_modulation_t;
+typedef enum fe_transmit_mode fe_transmit_mode_t;
+typedef enum fe_bandwidth fe_bandwidth_t;
+typedef enum fe_guard_interval fe_guard_interval_t;
+typedef enum fe_hierarchy fe_hierarchy_t;
+typedef enum fe_pilot fe_pilot_t;
+typedef enum fe_rolloff fe_rolloff_t;
+typedef enum fe_delivery_system fe_delivery_system_t;
+
+struct dvb_qpsk_parameters {
+       __u32           symbol_rate;  /* symbol rate in Symbols per second */
+       fe_code_rate_t  fec_inner;    /* forward error correction (see above) */
+};
+
+struct dvb_qam_parameters {
+       __u32           symbol_rate; /* symbol rate in Symbols per second */
+       fe_code_rate_t  fec_inner;   /* forward error correction (see above) */
+       fe_modulation_t modulation;  /* modulation type (see above) */
+};
+
+struct dvb_vsb_parameters {
+       fe_modulation_t modulation;  /* modulation type (see above) */
+};
+
+struct dvb_ofdm_parameters {
+       fe_bandwidth_t      bandwidth;
+       fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
+       fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
+       fe_modulation_t     constellation; /* modulation type (see above) */
+       fe_transmit_mode_t  transmission_mode;
+       fe_guard_interval_t guard_interval;
+       fe_hierarchy_t      hierarchy_information;
+};
+
+struct dvb_frontend_parameters {
+       __u32 frequency;     /* (absolute) frequency in Hz for DVB-C/DVB-T/ATSC */
+                            /* intermediate frequency in kHz for DVB-S */
+       fe_spectral_inversion_t inversion;
+       union {
+               struct dvb_qpsk_parameters qpsk;        /* DVB-S */
+               struct dvb_qam_parameters  qam;         /* DVB-C */
+               struct dvb_ofdm_parameters ofdm;        /* DVB-T */
+               struct dvb_vsb_parameters vsb;          /* ATSC */
+       } u;
+};
+
+struct dvb_frontend_event {
+       fe_status_t status;
+       struct dvb_frontend_parameters parameters;
+};
+
+#define FE_SET_PROPERTY                   _IOW('o', 82, struct dtv_properties)
+#define FE_GET_PROPERTY                   _IOR('o', 83, struct dtv_properties)
+
+/**
+ * When set, this flag will disable any zigzagging or other "normal" tuning
+ * behaviour. Additionally, there will be no automatic monitoring of the lock
+ * status, and hence no frontend events will be generated. If a frontend device
+ * is closed, this flag will be automatically turned off when the device is
+ * reopened read-write.
+ */
+#define FE_TUNE_MODE_ONESHOT 0x01
+
+#define FE_GET_INFO               _IOR('o', 61, struct dvb_frontend_info)
+
+#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
+#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
+#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
+#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
+
+#define FE_SET_TONE               _IO('o', 66)  /* fe_sec_tone_mode_t */
+#define FE_SET_VOLTAGE            _IO('o', 67)  /* fe_sec_voltage_t */
+#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
+
+#define FE_READ_STATUS            _IOR('o', 69, fe_status_t)
+#define FE_READ_BER               _IOR('o', 70, __u32)
+#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
+#define FE_READ_SNR               _IOR('o', 72, __u16)
+#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
+
+#define FE_SET_FRONTEND                   _IOW('o', 76, struct dvb_frontend_parameters)
+#define FE_GET_FRONTEND                   _IOR('o', 77, struct dvb_frontend_parameters)
+#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
+#define FE_GET_EVENT              _IOR('o', 78, struct dvb_frontend_event)
+
+#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
+
+#endif /*_DVBFRONTEND_H_*/
diff --git a/lib/libdss-include/linux/dvb/net.h b/lib/libdss-include/linux/dvb/net.h
new file mode 100644 (file)
index 0000000..f451e7e
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * net.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBNET_H_
+#define _DVBNET_H_
+
+#include <linux/types.h>
+
+struct dvb_net_if {
+       __u16 pid;
+       __u16 if_num;
+       __u8  feedtype;
+#define DVB_NET_FEEDTYPE_MPE 0 /* multi protocol encapsulation */
+#define DVB_NET_FEEDTYPE_ULE 1 /* ultra lightweight encapsulation */
+};
+
+
+#define NET_ADD_IF    _IOWR('o', 52, struct dvb_net_if)
+#define NET_REMOVE_IF _IO('o', 53)
+#define NET_GET_IF    _IOWR('o', 54, struct dvb_net_if)
+
+
+/* binary compatibility cruft: */
+struct __dvb_net_if_old {
+       __u16 pid;
+       __u16 if_num;
+};
+#define __NET_ADD_IF_OLD _IOWR('o', 52, struct __dvb_net_if_old)
+#define __NET_GET_IF_OLD _IOWR('o', 54, struct __dvb_net_if_old)
+
+
+#endif /*_DVBNET_H_*/
diff --git a/lib/libdss-include/linux/dvb/osd.h b/lib/libdss-include/linux/dvb/osd.h
new file mode 100644 (file)
index 0000000..f28c7cb
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * osd.h
+ *
+ * Copyright (C) 2001 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBOSD_H_
+#define _DVBOSD_H_
+
+
+
+typedef enum {
+  // All functions return -2 on "not open"
+  OSD_Close=1,    // ()
+  // Disables OSD and releases the buffers
+  // returns 0 on success
+  OSD_Open,       // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0))
+  // Opens OSD with this size and bit depth
+  // returns 0 on success, -1 on DRAM allocation error, -2 on "already open"
+  OSD_Show,       // ()
+  // enables OSD mode
+  // returns 0 on success
+  OSD_Hide,       // ()
+  // disables OSD mode
+  // returns 0 on success
+  OSD_Clear,      // ()
+  // Sets all pixel to color 0
+  // returns 0 on success
+  OSD_Fill,       // (color)
+  // Sets all pixel to color <col>
+  // returns 0 on success
+  OSD_SetColor,   // (color,R{x0},G{y0},B{x1},opacity{y1})
+  // set palette entry <num> to <r,g,b>, <mix> and <trans> apply
+  // R,G,B: 0..255
+  // R=Red, G=Green, B=Blue
+  // opacity=0:      pixel opacity 0% (only video pixel shows)
+  // opacity=1..254: pixel opacity as specified in header
+  // opacity=255:    pixel opacity 100% (only OSD pixel shows)
+  // returns 0 on success, -1 on error
+  OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data)
+  // Set a number of entries in the palette
+  // sets the entries "firstcolor" through "lastcolor" from the array "data"
+  // data has 4 byte for each color:
+  // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel
+  OSD_SetTrans,   // (transparency{color})
+  // Sets transparency of mixed pixel (0..15)
+  // returns 0 on success
+  OSD_SetPixel,   // (x0,y0,color)
+  // sets pixel <x>,<y> to color number <col>
+  // returns 0 on success, -1 on error
+  OSD_GetPixel,   // (x0,y0)
+  // returns color number of pixel <x>,<y>,  or -1
+  OSD_SetRow,     // (x0,y0,x1,data)
+  // fills pixels x0,y through  x1,y with the content of data[]
+  // returns 0 on success, -1 on clipping all pixel (no pixel drawn)
+  OSD_SetBlock,   // (x0,y0,x1,y1,increment{color},data)
+  // fills pixels x0,y0 through  x1,y1 with the content of data[]
+  // inc contains the width of one line in the data block,
+  // inc<=0 uses blockwidth as linewidth
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillRow,    // (x0,y0,x1,color)
+  // fills pixels x0,y through  x1,y with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillBlock,  // (x0,y0,x1,y1,color)
+  // fills pixels x0,y0 through  x1,y1 with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_Line,       // (x0,y0,x1,y1,color)
+  // draw a line from x0,y0 to x1,y1 with the color <col>
+  // returns 0 on success
+  OSD_Query,      // (x0,y0,x1,y1,xasp{color}}), yasp=11
+  // fills parameters with the picture dimensions and the pixel aspect ratio
+  // returns 0 on success
+  OSD_Test,       // ()
+  // draws a test picture. for debugging purposes only
+  // returns 0 on success
+// TODO: remove "test" in final version
+  OSD_Text,       // (x0,y0,size,color,text)
+  OSD_SetWindow, //  (x0) set window with number 0<x0<8 as current
+  OSD_MoveWindow, //  move current window to (x0, y0)
+  OSD_OpenRaw, // Open other types of OSD windows
+} OSD_Command;
+
+typedef struct osd_cmd_s {
+       OSD_Command cmd;
+       int x0;
+       int y0;
+       int x1;
+       int y1;
+       int color;
+       void *data;
+} osd_cmd_t;
+
+/* OSD_OpenRaw: set 'color' to desired window type */
+typedef enum {
+       OSD_BITMAP1,           /* 1 bit bitmap */
+       OSD_BITMAP2,           /* 2 bit bitmap */
+       OSD_BITMAP4,           /* 4 bit bitmap */
+       OSD_BITMAP8,           /* 8 bit bitmap */
+       OSD_BITMAP1HR,         /* 1 Bit bitmap half resolution */
+       OSD_BITMAP2HR,         /* 2 bit bitmap half resolution */
+       OSD_BITMAP4HR,         /* 4 bit bitmap half resolution */
+       OSD_BITMAP8HR,         /* 8 bit bitmap half resolution */
+       OSD_YCRCB422,          /* 4:2:2 YCRCB Graphic Display */
+       OSD_YCRCB444,          /* 4:4:4 YCRCB Graphic Display */
+       OSD_YCRCB444HR,        /* 4:4:4 YCRCB graphic half resolution */
+       OSD_VIDEOTSIZE,        /* True Size Normal MPEG Video Display */
+       OSD_VIDEOHSIZE,        /* MPEG Video Display Half Resolution */
+       OSD_VIDEOQSIZE,        /* MPEG Video Display Quarter Resolution */
+       OSD_VIDEODSIZE,        /* MPEG Video Display Double Resolution */
+       OSD_VIDEOTHSIZE,       /* True Size MPEG Video Display Half Resolution */
+       OSD_VIDEOTQSIZE,       /* True Size MPEG Video Display Quarter Resolution*/
+       OSD_VIDEOTDSIZE,       /* True Size MPEG Video Display Double Resolution */
+       OSD_VIDEONSIZE,        /* Full Size MPEG Video Display */
+       OSD_CURSOR             /* Cursor */
+} osd_raw_window_t;
+
+typedef struct osd_cap_s {
+       int  cmd;
+#define OSD_CAP_MEMSIZE         1  /* memory size */
+       long val;
+} osd_cap_t;
+
+
+#define OSD_SEND_CMD            _IOW('o', 160, osd_cmd_t)
+#define OSD_GET_CAPABILITY      _IOR('o', 161, osd_cap_t)
+
+#endif
diff --git a/lib/libdss-include/linux/dvb/version.h b/lib/libdss-include/linux/dvb/version.h
new file mode 100644 (file)
index 0000000..e53e2ad
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * version.h
+ *
+ * Copyright (C) 2000 Holger Waechtler <holger@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVERSION_H_
+#define _DVBVERSION_H_
+
+#define DVB_API_VERSION 5
+#define DVB_API_VERSION_MINOR 10
+
+#endif /*_DVBVERSION_H_*/
diff --git a/lib/libdss-include/linux/dvb/video.h b/lib/libdss-include/linux/dvb/video.h
new file mode 100644 (file)
index 0000000..4bb276c
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * video.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVIDEO_H_
+#define _DVBVIDEO_H_
+
+#include <linux/types.h>
+#include <stdint.h>
+#include <time.h>
+
+typedef enum {
+       VIDEO_FORMAT_4_3,     /* Select 4:3 format */
+       VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
+       VIDEO_FORMAT_221_1    /* 2.21:1 */
+} video_format_t;
+
+
+typedef enum {
+        VIDEO_SYSTEM_PAL,
+        VIDEO_SYSTEM_NTSC,
+        VIDEO_SYSTEM_PALN,
+        VIDEO_SYSTEM_PALNc,
+        VIDEO_SYSTEM_PALM,
+        VIDEO_SYSTEM_NTSC60,
+        VIDEO_SYSTEM_PAL60,
+        VIDEO_SYSTEM_PALM60
+} video_system_t;
+
+
+typedef enum {
+       VIDEO_PAN_SCAN,       /* use pan and scan format */
+       VIDEO_LETTER_BOX,     /* use letterbox format */
+       VIDEO_CENTER_CUT_OUT  /* use center cut out format */
+} video_displayformat_t;
+
+typedef struct {
+       int w;
+       int h;
+       video_format_t aspect_ratio;
+} video_size_t;
+
+typedef enum {
+       VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
+       VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
+                              comes from the user through the write
+                              system call */
+} video_stream_source_t;
+
+
+typedef enum {
+       VIDEO_STOPPED, /* Video is stopped */
+       VIDEO_PLAYING, /* Video is currently playing */
+       VIDEO_FREEZED  /* Video is freezed */
+} video_play_state_t;
+
+
+/* Decoder commands */
+#define VIDEO_CMD_PLAY        (0)
+#define VIDEO_CMD_STOP        (1)
+#define VIDEO_CMD_FREEZE      (2)
+#define VIDEO_CMD_CONTINUE    (3)
+
+/* Flags for VIDEO_CMD_FREEZE */
+#define VIDEO_CMD_FREEZE_TO_BLACK      (1 << 0)
+
+/* Flags for VIDEO_CMD_STOP */
+#define VIDEO_CMD_STOP_TO_BLACK        (1 << 0)
+#define VIDEO_CMD_STOP_IMMEDIATELY             (1 << 1)
+
+/* Play input formats: */
+/* The decoder has no special format requirements */
+#define VIDEO_PLAY_FMT_NONE         (0)
+/* The decoder requires full GOPs */
+#define VIDEO_PLAY_FMT_GOP          (1)
+
+/* The structure must be zeroed before use by the application
+   This ensures it can be extended safely in the future. */
+struct video_command {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u64 pts;
+               } stop;
+
+               struct {
+                       /* 0 or 1000 specifies normal speed,
+                          1 specifies forward single stepping,
+                          -1 specifies backward single stepping,
+                          >1: playback at speed/1000 of the normal speed,
+                          <-1: reverse playback at (-speed/1000) of the normal speed. */
+                       __s32 speed;
+                       __u32 format;
+               } play;
+
+               struct {
+                       __u32 data[16];
+               } raw;
+       };
+};
+
+/* FIELD_UNKNOWN can be used if the hardware does not know whether
+   the Vsync is for an odd, even or progressive (i.e. non-interlaced)
+   field. */
+#define VIDEO_VSYNC_FIELD_UNKNOWN      (0)
+#define VIDEO_VSYNC_FIELD_ODD          (1)
+#define VIDEO_VSYNC_FIELD_EVEN         (2)
+#define VIDEO_VSYNC_FIELD_PROGRESSIVE  (3)
+
+struct video_event {
+       __s32 type;
+#define VIDEO_EVENT_SIZE_CHANGED       1
+#define VIDEO_EVENT_FRAME_RATE_CHANGED 2
+#define VIDEO_EVENT_DECODER_STOPPED    3
+#define VIDEO_EVENT_VSYNC              4
+       __kernel_time_t timestamp;
+       union {
+               video_size_t size;
+               unsigned int frame_rate;        /* in frames per 1000sec */
+               unsigned char vsync_field;      /* unknown/odd/even/progressive */
+       } u;
+};
+
+
+struct video_status {
+       int                   video_blank;   /* blank video on freeze? */
+       video_play_state_t    play_state;    /* current state of playback */
+       video_stream_source_t stream_source; /* current source (demux/memory) */
+       video_format_t        video_format;  /* current aspect ratio of stream*/
+       video_displayformat_t display_format;/* selected cropping mode */
+};
+
+
+struct video_still_picture {
+       char *iFrame;        /* pointer to a single iframe in memory */
+       __s32 size;
+};
+
+
+typedef
+struct video_highlight {
+       int     active;      /*    1=show highlight, 0=hide highlight */
+       __u8    contrast1;   /*    7- 4  Pattern pixel contrast */
+                            /*    3- 0  Background pixel contrast */
+       __u8    contrast2;   /*    7- 4  Emphasis pixel-2 contrast */
+                            /*    3- 0  Emphasis pixel-1 contrast */
+       __u8    color1;      /*    7- 4  Pattern pixel color */
+                            /*    3- 0  Background pixel color */
+       __u8    color2;      /*    7- 4  Emphasis pixel-2 color */
+                            /*    3- 0  Emphasis pixel-1 color */
+       __u32    ypos;       /*   23-22  auto action mode */
+                            /*   21-12  start y */
+                            /*    9- 0  end y */
+       __u32    xpos;       /*   23-22  button color number */
+                            /*   21-12  start x */
+                            /*    9- 0  end x */
+} video_highlight_t;
+
+
+typedef struct video_spu {
+       int active;
+       int stream_id;
+} video_spu_t;
+
+
+typedef struct video_spu_palette {      /* SPU Palette information */
+       int length;
+       __u8 *palette;
+} video_spu_palette_t;
+
+
+typedef struct video_navi_pack {
+       int length;          /* 0 ... 1024 */
+       __u8 data[1024];
+} video_navi_pack_t;
+
+
+typedef __u16 video_attributes_t;
+/*   bits: descr. */
+/*   15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
+/*   13-12 TV system (0=525/60, 1=625/50) */
+/*   11-10 Aspect ratio (0=4:3, 3=16:9) */
+/*    9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
+/*    7    line 21-1 data present in GOP (1=yes, 0=no) */
+/*    6    line 21-2 data present in GOP (1=yes, 0=no) */
+/*    5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
+/*    2    source letterboxed (1=yes, 0=no) */
+/*    0    film/camera mode (0=camera, 1=film (625/50 only)) */
+
+
+/* bit definitions for capabilities: */
+/* can the hardware decode MPEG1 and/or MPEG2? */
+#define VIDEO_CAP_MPEG1   1
+#define VIDEO_CAP_MPEG2   2
+/* can you send a system and/or program stream to video device?
+   (you still have to open the video and the audio device but only
+    send the stream to the video device) */
+#define VIDEO_CAP_SYS     4
+#define VIDEO_CAP_PROG    8
+/* can the driver also handle SPU, NAVI and CSS encoded data?
+   (CSS API is not present yet) */
+#define VIDEO_CAP_SPU    16
+#define VIDEO_CAP_NAVI   32
+#define VIDEO_CAP_CSS    64
+
+
+#define VIDEO_STOP                 _IO('o', 21)
+#define VIDEO_PLAY                 _IO('o', 22)
+#define VIDEO_FREEZE               _IO('o', 23)
+#define VIDEO_CONTINUE             _IO('o', 24)
+#define VIDEO_SELECT_SOURCE        _IO('o', 25)
+#define VIDEO_SET_BLANK            _IO('o', 26)
+#define VIDEO_GET_STATUS           _IOR('o', 27, struct video_status)
+#define VIDEO_GET_EVENT            _IOR('o', 28, struct video_event)
+#define VIDEO_SET_DISPLAY_FORMAT   _IO('o', 29)
+#define VIDEO_STILLPICTURE         _IOW('o', 30, struct video_still_picture)
+#define VIDEO_FAST_FORWARD         _IO('o', 31)
+#define VIDEO_SLOWMOTION           _IO('o', 32)
+#define VIDEO_GET_CAPABILITIES     _IOR('o', 33, unsigned int)
+#define VIDEO_CLEAR_BUFFER         _IO('o',  34)
+#define VIDEO_SET_ID               _IO('o', 35)
+#define VIDEO_SET_STREAMTYPE       _IO('o', 36)
+#define VIDEO_SET_FORMAT           _IO('o', 37)
+#define VIDEO_SET_SYSTEM           _IO('o', 38)
+#define VIDEO_SET_HIGHLIGHT        _IOW('o', 39, video_highlight_t)
+#define VIDEO_SET_SPU              _IOW('o', 50, video_spu_t)
+#define VIDEO_SET_SPU_PALETTE      _IOW('o', 51, video_spu_palette_t)
+#define VIDEO_GET_NAVI             _IOR('o', 52, video_navi_pack_t)
+#define VIDEO_SET_ATTRIBUTES       _IO('o', 53)
+#define VIDEO_GET_SIZE             _IOR('o', 55, video_size_t)
+#define VIDEO_GET_FRAME_RATE       _IOR('o', 56, unsigned int)
+
+/**
+ * VIDEO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define VIDEO_GET_PTS              _IOR('o', 57, __u64)
+
+/* Read the number of displayed frames since the decoder was started */
+#define VIDEO_GET_FRAME_COUNT             _IOR('o', 58, __u64)
+
+#define VIDEO_COMMAND             _IOWR('o', 59, struct video_command)
+#define VIDEO_TRY_COMMAND         _IOWR('o', 60, struct video_command)
+
+#endif /* _DVBVIDEO_H_ */
diff --git a/lib/libdss-include/linux/edd.h b/lib/libdss-include/linux/edd.h
new file mode 100644 (file)
index 0000000..190815d
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ * linux/include/linux/edd.h
+ *  Copyright (C) 2002, 2003, 2004 Dell Inc.
+ *  by Matt Domsch <Matt_Domsch@dell.com>
+ *
+ * structures and definitions for the int 13h, ax={41,48}h
+ * BIOS Enhanced Disk Drive Services
+ * This is based on the T13 group document D1572 Revision 0 (August 14 2002)
+ * available at http://www.t13.org/docs2002/d1572r0.pdf.  It is
+ * very similar to D1484 Revision 3 http://www.t13.org/docs2002/d1484r3.pdf
+ *
+ * In a nutshell, arch/{i386,x86_64}/boot/setup.S populates a scratch
+ * table in the boot_params that contains a list of BIOS-enumerated
+ * boot devices.
+ * In arch/{i386,x86_64}/kernel/setup.c, this information is
+ * transferred into the edd structure, and in drivers/firmware/edd.c, that
+ * information is used to identify BIOS boot disk.  The code in setup.S
+ * is very sensitive to the size of these structures.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+#ifndef _LINUX_EDD_H
+#define _LINUX_EDD_H
+
+#include <linux/types.h>
+
+#define EDDNR 0x1e9            /* addr of number of edd_info structs at EDDBUF
+                                  in boot_params - treat this as 1 byte  */
+#define EDDBUF 0xd00           /* addr of edd_info structs in boot_params */
+#define EDDMAXNR 6             /* number of edd_info structs starting at EDDBUF  */
+#define EDDEXTSIZE 8           /* change these if you muck with the structures */
+#define EDDPARMSIZE 74
+#define CHECKEXTENSIONSPRESENT 0x41
+#define GETDEVICEPARAMETERS 0x48
+#define LEGACYGETDEVICEPARAMETERS 0x08
+#define EDDMAGIC1 0x55AA
+#define EDDMAGIC2 0xAA55
+
+
+#define READ_SECTORS 0x02         /* int13 AH=0x02 is READ_SECTORS command */
+#define EDD_MBR_SIG_OFFSET 0x1B8  /* offset of signature in the MBR */
+#define EDD_MBR_SIG_BUF    0x290  /* addr in boot params */
+#define EDD_MBR_SIG_MAX 16        /* max number of signatures to store */
+#define EDD_MBR_SIG_NR_BUF 0x1ea  /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF
+                                    in boot_params - treat this as 1 byte  */
+
+#ifndef __ASSEMBLY__
+
+#define EDD_EXT_FIXED_DISK_ACCESS           (1 << 0)
+#define EDD_EXT_DEVICE_LOCKING_AND_EJECTING (1 << 1)
+#define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2)
+#define EDD_EXT_64BIT_EXTENSIONS            (1 << 3)
+
+#define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0)
+#define EDD_INFO_GEOMETRY_VALID                (1 << 1)
+#define EDD_INFO_REMOVABLE                     (1 << 2)
+#define EDD_INFO_WRITE_VERIFY                  (1 << 3)
+#define EDD_INFO_MEDIA_CHANGE_NOTIFICATION     (1 << 4)
+#define EDD_INFO_LOCKABLE                      (1 << 5)
+#define EDD_INFO_NO_MEDIA_PRESENT              (1 << 6)
+#define EDD_INFO_USE_INT13_FN50                (1 << 7)
+
+struct edd_device_params {
+       __u16 length;
+       __u16 info_flags;
+       __u32 num_default_cylinders;
+       __u32 num_default_heads;
+       __u32 sectors_per_track;
+       __u64 number_of_sectors;
+       __u16 bytes_per_sector;
+       __u32 dpte_ptr;         /* 0xFFFFFFFF for our purposes */
+       __u16 key;              /* = 0xBEDD */
+       __u8 device_path_info_length;   /* = 44 */
+       __u8 reserved2;
+       __u16 reserved3;
+       __u8 host_bus_type[4];
+       __u8 interface_type[8];
+       union {
+               struct {
+                       __u16 base_address;
+                       __u16 reserved1;
+                       __u32 reserved2;
+               } __attribute__ ((packed)) isa;
+               struct {
+                       __u8 bus;
+                       __u8 slot;
+                       __u8 function;
+                       __u8 channel;
+                       __u32 reserved;
+               } __attribute__ ((packed)) pci;
+               /* pcix is same as pci */
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) ibnd;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) xprs;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) htpt;
+               struct {
+                       __u64 reserved;
+               } __attribute__ ((packed)) unknown;
+       } interface_path;
+       union {
+               struct {
+                       __u8 device;
+                       __u8 reserved1;
+                       __u16 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) ata;
+               struct {
+                       __u8 device;
+                       __u8 lun;
+                       __u8 reserved1;
+                       __u8 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) atapi;
+               struct {
+                       __u16 id;
+                       __u64 lun;
+                       __u16 reserved1;
+                       __u32 reserved2;
+               } __attribute__ ((packed)) scsi;
+               struct {
+                       __u64 serial_number;
+                       __u64 reserved;
+               } __attribute__ ((packed)) usb;
+               struct {
+                       __u64 eui;
+                       __u64 reserved;
+               } __attribute__ ((packed)) i1394;
+               struct {
+                       __u64 wwid;
+                       __u64 lun;
+               } __attribute__ ((packed)) fibre;
+               struct {
+                       __u64 identity_tag;
+                       __u64 reserved;
+               } __attribute__ ((packed)) i2o;
+               struct {
+                       __u32 array_number;
+                       __u32 reserved1;
+                       __u64 reserved2;
+               } __attribute__ ((packed)) raid;
+               struct {
+                       __u8 device;
+                       __u8 reserved1;
+                       __u16 reserved2;
+                       __u32 reserved3;
+                       __u64 reserved4;
+               } __attribute__ ((packed)) sata;
+               struct {
+                       __u64 reserved1;
+                       __u64 reserved2;
+               } __attribute__ ((packed)) unknown;
+       } device_path;
+       __u8 reserved4;
+       __u8 checksum;
+} __attribute__ ((packed));
+
+struct edd_info {
+       __u8 device;
+       __u8 version;
+       __u16 interface_support;
+       __u16 legacy_max_cylinder;
+       __u8 legacy_max_head;
+       __u8 legacy_sectors_per_track;
+       struct edd_device_params params;
+} __attribute__ ((packed));
+
+struct edd {
+       unsigned int mbr_signature[EDD_MBR_SIG_MAX];
+       struct edd_info edd_info[EDDMAXNR];
+       unsigned char mbr_signature_nr;
+       unsigned char edd_info_nr;
+};
+
+#endif                         /*!__ASSEMBLY__ */
+
+#endif /* _LINUX_EDD_H */
diff --git a/lib/libdss-include/linux/efs_fs_sb.h b/lib/libdss-include/linux/efs_fs_sb.h
new file mode 100644 (file)
index 0000000..a01be90
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * efs_fs_sb.h
+ *
+ * Copyright (c) 1999 Al Smith
+ *
+ * Portions derived from IRIX header files (c) 1988 Silicon Graphics
+ */
+
+#ifndef __EFS_FS_SB_H__
+#define __EFS_FS_SB_H__
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* EFS superblock magic numbers */
+#define EFS_MAGIC      0x072959
+#define EFS_NEWMAGIC   0x07295a
+
+#define IS_EFS_MAGIC(x)        ((x == EFS_MAGIC) || (x == EFS_NEWMAGIC))
+
+#define EFS_SUPER              1
+#define EFS_ROOTINODE          2
+
+/* efs superblock on disk */
+struct efs_super {
+       __be32          fs_size;        /* size of filesystem, in sectors */
+       __be32          fs_firstcg;     /* bb offset to first cg */
+       __be32          fs_cgfsize;     /* size of cylinder group in bb's */
+       __be16          fs_cgisize;     /* bb's of inodes per cylinder group */
+       __be16          fs_sectors;     /* sectors per track */
+       __be16          fs_heads;       /* heads per cylinder */
+       __be16          fs_ncg;         /* # of cylinder groups in filesystem */
+       __be16          fs_dirty;       /* fs needs to be fsck'd */
+       __be32          fs_time;        /* last super-block update */
+       __be32          fs_magic;       /* magic number */
+       char            fs_fname[6];    /* file system name */
+       char            fs_fpack[6];    /* file system pack name */
+       __be32          fs_bmsize;      /* size of bitmap in bytes */
+       __be32          fs_tfree;       /* total free data blocks */
+       __be32          fs_tinode;      /* total free inodes */
+       __be32          fs_bmblock;     /* bitmap location. */
+       __be32          fs_replsb;      /* Location of replicated superblock. */
+       __be32          fs_lastialloc;  /* last allocated inode */
+       char            fs_spare[20];   /* space for expansion - MUST BE ZERO */
+       __be32          fs_checksum;    /* checksum of volume portion of fs */
+};
+
+/* efs superblock information in memory */
+struct efs_sb_info {
+       __u32   fs_magic;       /* superblock magic number */
+       __u32   fs_start;       /* first block of filesystem */
+       __u32   first_block;    /* first data block in filesystem */
+       __u32   total_blocks;   /* total number of blocks in filesystem */
+       __u32   group_size;     /* # of blocks a group consists of */ 
+       __u32   data_free;      /* # of free data blocks */
+       __u32   inode_free;     /* # of free inodes */
+       __u16   inode_blocks;   /* # of blocks used for inodes in every grp */
+       __u16   total_groups;   /* # of groups */
+};
+
+#endif /* __EFS_FS_SB_H__ */
+
diff --git a/lib/libdss-include/linux/elf-em.h b/lib/libdss-include/linux/elf-em.h
new file mode 100644 (file)
index 0000000..b56dfcf
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _LINUX_ELF_EM_H
+#define _LINUX_ELF_EM_H
+
+/* These constants define the various ELF target machines */
+#define EM_NONE                0
+#define EM_M32         1
+#define EM_SPARC       2
+#define EM_386         3
+#define EM_68K         4
+#define EM_88K         5
+#define EM_486         6       /* Perhaps disused */
+#define EM_860         7
+#define EM_MIPS                8       /* MIPS R3000 (officially, big-endian only) */
+                               /* Next two are historical and binaries and
+                                  modules of these types will be rejected by
+                                  Linux.  */
+#define EM_MIPS_RS3_LE 10      /* MIPS R3000 little-endian */
+#define EM_MIPS_RS4_BE 10      /* MIPS R4000 big-endian */
+
+#define EM_PARISC      15      /* HPPA */
+#define EM_SPARC32PLUS 18      /* Sun's "v8plus" */
+#define EM_PPC         20      /* PowerPC */
+#define EM_PPC64       21       /* PowerPC64 */
+#define EM_SPU         23      /* Cell BE SPU */
+#define EM_ARM         40      /* ARM 32 bit */
+#define EM_SH          42      /* SuperH */
+#define EM_SPARCV9     43      /* SPARC v9 64-bit */
+#define EM_H8_300      46      /* Renesas H8/300 */
+#define EM_IA_64       50      /* HP/Intel IA-64 */
+#define EM_X86_64      62      /* AMD x86-64 */
+#define EM_S390                22      /* IBM S/390 */
+#define EM_CRIS                76      /* Axis Communications 32-bit embedded processor */
+#define EM_V850                87      /* NEC v850 */
+#define EM_M32R                88      /* Renesas M32R */
+#define EM_MN10300     89      /* Panasonic/MEI MN10300, AM33 */
+#define EM_OPENRISC     92     /* OpenRISC 32-bit embedded processor */
+#define EM_BLACKFIN     106     /* ADI Blackfin Processor */
+#define EM_ALTERA_NIOS2        113     /* Altera Nios II soft-core processor */
+#define EM_TI_C6000    140     /* TI C6X DSPs */
+#define EM_AARCH64     183     /* ARM 64 bit */
+#define EM_TILEPRO     188     /* Tilera TILEPro */
+#define EM_MICROBLAZE  189     /* Xilinx MicroBlaze */
+#define EM_TILEGX      191     /* Tilera TILE-Gx */
+#define EM_FRV         0x5441  /* Fujitsu FR-V */
+#define EM_AVR32       0x18ad  /* Atmel AVR32 */
+
+/*
+ * This is an interim value that we will use until the committee comes
+ * up with a final number.
+ */
+#define EM_ALPHA       0x9026
+
+/* Bogus old v850 magic number, used by old tools. */
+#define EM_CYGNUS_V850 0x9080
+/* Bogus old m32r magic number, used by old tools. */
+#define EM_CYGNUS_M32R 0x9041
+/* This is the old interim value for S/390 architecture */
+#define EM_S390_OLD    0xA390
+/* Also Panasonic/MEI MN10300, AM33 */
+#define EM_CYGNUS_MN10300 0xbeef
+
+
+#endif /* _LINUX_ELF_EM_H */
diff --git a/lib/libdss-include/linux/elf-fdpic.h b/lib/libdss-include/linux/elf-fdpic.h
new file mode 100644 (file)
index 0000000..5748a46
--- /dev/null
@@ -0,0 +1,34 @@
+/* elf-fdpic.h: FDPIC ELF load map
+ *
+ * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_ELF_FDPIC_H
+#define _LINUX_ELF_FDPIC_H
+
+#include <linux/elf.h>
+
+#define PT_GNU_STACK    (PT_LOOS + 0x474e551)
+
+/* segment mappings for ELF FDPIC libraries/executables/interpreters */
+struct elf32_fdpic_loadseg {
+       Elf32_Addr      addr;           /* core address to which mapped */
+       Elf32_Addr      p_vaddr;        /* VMA recorded in file */
+       Elf32_Word      p_memsz;        /* allocation size recorded in file */
+};
+
+struct elf32_fdpic_loadmap {
+       Elf32_Half      version;        /* version of these structures, just in case... */
+       Elf32_Half      nsegs;          /* number of segments */
+       struct elf32_fdpic_loadseg segs[];
+};
+
+#define ELF32_FDPIC_LOADMAP_VERSION    0x0000
+
+#endif /* _LINUX_ELF_FDPIC_H */
diff --git a/lib/libdss-include/linux/elf.h b/lib/libdss-include/linux/elf.h
new file mode 100644 (file)
index 0000000..988b53d
--- /dev/null
@@ -0,0 +1,420 @@
+#ifndef _LINUX_ELF_H
+#define _LINUX_ELF_H
+
+#include <linux/types.h>
+#include <linux/elf-em.h>
+
+/* 32-bit ELF base types. */
+typedef __u32  Elf32_Addr;
+typedef __u16  Elf32_Half;
+typedef __u32  Elf32_Off;
+typedef __s32  Elf32_Sword;
+typedef __u32  Elf32_Word;
+
+/* 64-bit ELF base types. */
+typedef __u64  Elf64_Addr;
+typedef __u16  Elf64_Half;
+typedef __s16  Elf64_SHalf;
+typedef __u64  Elf64_Off;
+typedef __s32  Elf64_Sword;
+typedef __u32  Elf64_Word;
+typedef __u64  Elf64_Xword;
+typedef __s64  Elf64_Sxword;
+
+/* These constants are for the segment types stored in the image headers */
+#define PT_NULL    0
+#define PT_LOAD    1
+#define PT_DYNAMIC 2
+#define PT_INTERP  3
+#define PT_NOTE    4
+#define PT_SHLIB   5
+#define PT_PHDR    6
+#define PT_TLS     7               /* Thread local storage segment */
+#define PT_LOOS    0x60000000      /* OS-specific */
+#define PT_HIOS    0x6fffffff      /* OS-specific */
+#define PT_LOPROC  0x70000000
+#define PT_HIPROC  0x7fffffff
+#define PT_GNU_EH_FRAME                0x6474e550
+
+#define PT_GNU_STACK   (PT_LOOS + 0x474e551)
+
+/*
+ * Extended Numbering
+ *
+ * If the real number of program header table entries is larger than
+ * or equal to PN_XNUM(0xffff), it is set to sh_info field of the
+ * section header at index 0, and PN_XNUM is set to e_phnum
+ * field. Otherwise, the section header at index 0 is zero
+ * initialized, if it exists.
+ *
+ * Specifications are available in:
+ *
+ * - Oracle: Linker and Libraries.
+ *   Part No: 817–1984–19, August 2011.
+ *   http://docs.oracle.com/cd/E18752_01/pdf/817-1984.pdf
+ *
+ * - System V ABI AMD64 Architecture Processor Supplement
+ *   Draft Version 0.99.4,
+ *   January 13, 2010.
+ *   http://www.cs.washington.edu/education/courses/cse351/12wi/supp-docs/abi.pdf
+ */
+#define PN_XNUM 0xffff
+
+/* These constants define the different elf file types */
+#define ET_NONE   0
+#define ET_REL    1
+#define ET_EXEC   2
+#define ET_DYN    3
+#define ET_CORE   4
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/* This is the info that is needed to parse the dynamic section of the file */
+#define DT_NULL                0
+#define DT_NEEDED      1
+#define DT_PLTRELSZ    2
+#define DT_PLTGOT      3
+#define DT_HASH                4
+#define DT_STRTAB      5
+#define DT_SYMTAB      6
+#define DT_RELA                7
+#define DT_RELASZ      8
+#define DT_RELAENT     9
+#define DT_STRSZ       10
+#define DT_SYMENT      11
+#define DT_INIT                12
+#define DT_FINI                13
+#define DT_SONAME      14
+#define DT_RPATH       15
+#define DT_SYMBOLIC    16
+#define DT_REL         17
+#define DT_RELSZ       18
+#define DT_RELENT      19
+#define DT_PLTREL      20
+#define DT_DEBUG       21
+#define DT_TEXTREL     22
+#define DT_JMPREL      23
+#define DT_ENCODING    32
+#define OLD_DT_LOOS    0x60000000
+#define DT_LOOS                0x6000000d
+#define DT_HIOS                0x6ffff000
+#define DT_VALRNGLO    0x6ffffd00
+#define DT_VALRNGHI    0x6ffffdff
+#define DT_ADDRRNGLO   0x6ffffe00
+#define DT_ADDRRNGHI   0x6ffffeff
+#define DT_VERSYM      0x6ffffff0
+#define DT_RELACOUNT   0x6ffffff9
+#define DT_RELCOUNT    0x6ffffffa
+#define DT_FLAGS_1     0x6ffffffb
+#define DT_VERDEF      0x6ffffffc
+#define        DT_VERDEFNUM    0x6ffffffd
+#define DT_VERNEED     0x6ffffffe
+#define        DT_VERNEEDNUM   0x6fffffff
+#define OLD_DT_HIOS     0x6fffffff
+#define DT_LOPROC      0x70000000
+#define DT_HIPROC      0x7fffffff
+
+/* This info is needed when parsing the symbol table */
+#define STB_LOCAL  0
+#define STB_GLOBAL 1
+#define STB_WEAK   2
+
+#define STT_NOTYPE  0
+#define STT_OBJECT  1
+#define STT_FUNC    2
+#define STT_SECTION 3
+#define STT_FILE    4
+#define STT_COMMON  5
+#define STT_TLS     6
+
+#define ELF_ST_BIND(x)         ((x) >> 4)
+#define ELF_ST_TYPE(x)         (((unsigned int) x) & 0xf)
+#define ELF32_ST_BIND(x)       ELF_ST_BIND(x)
+#define ELF32_ST_TYPE(x)       ELF_ST_TYPE(x)
+#define ELF64_ST_BIND(x)       ELF_ST_BIND(x)
+#define ELF64_ST_TYPE(x)       ELF_ST_TYPE(x)
+
+typedef struct dynamic{
+  Elf32_Sword d_tag;
+  union{
+    Elf32_Sword        d_val;
+    Elf32_Addr d_ptr;
+  } d_un;
+} Elf32_Dyn;
+
+typedef struct {
+  Elf64_Sxword d_tag;          /* entry tag value */
+  union {
+    Elf64_Xword d_val;
+    Elf64_Addr d_ptr;
+  } d_un;
+} Elf64_Dyn;
+
+/* The following are used with relocations */
+#define ELF32_R_SYM(x) ((x) >> 8)
+#define ELF32_R_TYPE(x) ((x) & 0xff)
+
+#define ELF64_R_SYM(i)                 ((i) >> 32)
+#define ELF64_R_TYPE(i)                        ((i) & 0xffffffff)
+
+typedef struct elf32_rel {
+  Elf32_Addr   r_offset;
+  Elf32_Word   r_info;
+} Elf32_Rel;
+
+typedef struct elf64_rel {
+  Elf64_Addr r_offset; /* Location at which to apply the action */
+  Elf64_Xword r_info;  /* index and type of relocation */
+} Elf64_Rel;
+
+typedef struct elf32_rela{
+  Elf32_Addr   r_offset;
+  Elf32_Word   r_info;
+  Elf32_Sword  r_addend;
+} Elf32_Rela;
+
+typedef struct elf64_rela {
+  Elf64_Addr r_offset; /* Location at which to apply the action */
+  Elf64_Xword r_info;  /* index and type of relocation */
+  Elf64_Sxword r_addend;       /* Constant addend used to compute value */
+} Elf64_Rela;
+
+typedef struct elf32_sym{
+  Elf32_Word   st_name;
+  Elf32_Addr   st_value;
+  Elf32_Word   st_size;
+  unsigned char        st_info;
+  unsigned char        st_other;
+  Elf32_Half   st_shndx;
+} Elf32_Sym;
+
+typedef struct elf64_sym {
+  Elf64_Word st_name;          /* Symbol name, index in string tbl */
+  unsigned char        st_info;        /* Type and binding attributes */
+  unsigned char        st_other;       /* No defined meaning, 0 */
+  Elf64_Half st_shndx;         /* Associated section index */
+  Elf64_Addr st_value;         /* Value of the symbol */
+  Elf64_Xword st_size;         /* Associated symbol size */
+} Elf64_Sym;
+
+
+#define EI_NIDENT      16
+
+typedef struct elf32_hdr{
+  unsigned char        e_ident[EI_NIDENT];
+  Elf32_Half   e_type;
+  Elf32_Half   e_machine;
+  Elf32_Word   e_version;
+  Elf32_Addr   e_entry;  /* Entry point */
+  Elf32_Off    e_phoff;
+  Elf32_Off    e_shoff;
+  Elf32_Word   e_flags;
+  Elf32_Half   e_ehsize;
+  Elf32_Half   e_phentsize;
+  Elf32_Half   e_phnum;
+  Elf32_Half   e_shentsize;
+  Elf32_Half   e_shnum;
+  Elf32_Half   e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct elf64_hdr {
+  unsigned char        e_ident[EI_NIDENT];     /* ELF "magic number" */
+  Elf64_Half e_type;
+  Elf64_Half e_machine;
+  Elf64_Word e_version;
+  Elf64_Addr e_entry;          /* Entry point virtual address */
+  Elf64_Off e_phoff;           /* Program header table file offset */
+  Elf64_Off e_shoff;           /* Section header table file offset */
+  Elf64_Word e_flags;
+  Elf64_Half e_ehsize;
+  Elf64_Half e_phentsize;
+  Elf64_Half e_phnum;
+  Elf64_Half e_shentsize;
+  Elf64_Half e_shnum;
+  Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+
+/* These constants define the permissions on sections in the program
+   header, p_flags. */
+#define PF_R           0x4
+#define PF_W           0x2
+#define PF_X           0x1
+
+typedef struct elf32_phdr{
+  Elf32_Word   p_type;
+  Elf32_Off    p_offset;
+  Elf32_Addr   p_vaddr;
+  Elf32_Addr   p_paddr;
+  Elf32_Word   p_filesz;
+  Elf32_Word   p_memsz;
+  Elf32_Word   p_flags;
+  Elf32_Word   p_align;
+} Elf32_Phdr;
+
+typedef struct elf64_phdr {
+  Elf64_Word p_type;
+  Elf64_Word p_flags;
+  Elf64_Off p_offset;          /* Segment file offset */
+  Elf64_Addr p_vaddr;          /* Segment virtual address */
+  Elf64_Addr p_paddr;          /* Segment physical address */
+  Elf64_Xword p_filesz;                /* Segment size in file */
+  Elf64_Xword p_memsz;         /* Segment size in memory */
+  Elf64_Xword p_align;         /* Segment alignment, file & memory */
+} Elf64_Phdr;
+
+/* sh_type */
+#define SHT_NULL       0
+#define SHT_PROGBITS   1
+#define SHT_SYMTAB     2
+#define SHT_STRTAB     3
+#define SHT_RELA       4
+#define SHT_HASH       5
+#define SHT_DYNAMIC    6
+#define SHT_NOTE       7
+#define SHT_NOBITS     8
+#define SHT_REL                9
+#define SHT_SHLIB      10
+#define SHT_DYNSYM     11
+#define SHT_NUM                12
+#define SHT_LOPROC     0x70000000
+#define SHT_HIPROC     0x7fffffff
+#define SHT_LOUSER     0x80000000
+#define SHT_HIUSER     0xffffffff
+
+/* sh_flags */
+#define SHF_WRITE      0x1
+#define SHF_ALLOC      0x2
+#define SHF_EXECINSTR  0x4
+#define SHF_MASKPROC   0xf0000000
+
+/* special section indexes */
+#define SHN_UNDEF      0
+#define SHN_LORESERVE  0xff00
+#define SHN_LOPROC     0xff00
+#define SHN_HIPROC     0xff1f
+#define SHN_ABS                0xfff1
+#define SHN_COMMON     0xfff2
+#define SHN_HIRESERVE  0xffff
+typedef struct elf32_shdr {
+  Elf32_Word   sh_name;
+  Elf32_Word   sh_type;
+  Elf32_Word   sh_flags;
+  Elf32_Addr   sh_addr;
+  Elf32_Off    sh_offset;
+  Elf32_Word   sh_size;
+  Elf32_Word   sh_link;
+  Elf32_Word   sh_info;
+  Elf32_Word   sh_addralign;
+  Elf32_Word   sh_entsize;
+} Elf32_Shdr;
+
+typedef struct elf64_shdr {
+  Elf64_Word sh_name;          /* Section name, index in string tbl */
+  Elf64_Word sh_type;          /* Type of section */
+  Elf64_Xword sh_flags;                /* Miscellaneous section attributes */
+  Elf64_Addr sh_addr;          /* Section virtual addr at execution */
+  Elf64_Off sh_offset;         /* Section file offset */
+  Elf64_Xword sh_size;         /* Size of section in bytes */
+  Elf64_Word sh_link;          /* Index of another section */
+  Elf64_Word sh_info;          /* Additional section information */
+  Elf64_Xword sh_addralign;    /* Section alignment */
+  Elf64_Xword sh_entsize;      /* Entry size if section holds table */
+} Elf64_Shdr;
+
+#define        EI_MAG0         0               /* e_ident[] indexes */
+#define        EI_MAG1         1
+#define        EI_MAG2         2
+#define        EI_MAG3         3
+#define        EI_CLASS        4
+#define        EI_DATA         5
+#define        EI_VERSION      6
+#define        EI_OSABI        7
+#define        EI_PAD          8
+
+#define        ELFMAG0         0x7f            /* EI_MAG */
+#define        ELFMAG1         'E'
+#define        ELFMAG2         'L'
+#define        ELFMAG3         'F'
+#define        ELFMAG          "\177ELF"
+#define        SELFMAG         4
+
+#define        ELFCLASSNONE    0               /* EI_CLASS */
+#define        ELFCLASS32      1
+#define        ELFCLASS64      2
+#define        ELFCLASSNUM     3
+
+#define ELFDATANONE    0               /* e_ident[EI_DATA] */
+#define ELFDATA2LSB    1
+#define ELFDATA2MSB    2
+
+#define EV_NONE                0               /* e_version, EI_VERSION */
+#define EV_CURRENT     1
+#define EV_NUM         2
+
+#define ELFOSABI_NONE  0
+#define ELFOSABI_LINUX 3
+
+#ifndef ELF_OSABI
+#define ELF_OSABI ELFOSABI_NONE
+#endif
+
+/*
+ * Notes used in ET_CORE. Architectures export some of the arch register sets
+ * using the corresponding note types via the PTRACE_GETREGSET and
+ * PTRACE_SETREGSET requests.
+ */
+#define NT_PRSTATUS    1
+#define NT_PRFPREG     2
+#define NT_PRPSINFO    3
+#define NT_TASKSTRUCT  4
+#define NT_AUXV                6
+/*
+ * Note to userspace developers: size of NT_SIGINFO note may increase
+ * in the future to accomodate more fields, don't assume it is fixed!
+ */
+#define NT_SIGINFO      0x53494749
+#define NT_FILE         0x46494c45
+#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */
+#define NT_PPC_VMX     0x100           /* PowerPC Altivec/VMX registers */
+#define NT_PPC_SPE     0x101           /* PowerPC SPE/EVR registers */
+#define NT_PPC_VSX     0x102           /* PowerPC VSX registers */
+#define NT_386_TLS     0x200           /* i386 TLS slots (struct user_desc) */
+#define NT_386_IOPERM  0x201           /* x86 io permission bitmap (1=deny) */
+#define NT_X86_XSTATE  0x202           /* x86 extended state using xsave */
+#define NT_S390_HIGH_GPRS      0x300   /* s390 upper register halves */
+#define NT_S390_TIMER  0x301           /* s390 timer register */
+#define NT_S390_TODCMP 0x302           /* s390 TOD clock comparator register */
+#define NT_S390_TODPREG        0x303           /* s390 TOD programmable register */
+#define NT_S390_CTRS   0x304           /* s390 control registers */
+#define NT_S390_PREFIX 0x305           /* s390 prefix register */
+#define NT_S390_LAST_BREAK     0x306   /* s390 breaking event address */
+#define NT_S390_SYSTEM_CALL    0x307   /* s390 system call restart data */
+#define NT_S390_TDB    0x308           /* s390 transaction diagnostic block */
+#define NT_S390_VXRS_LOW       0x309   /* s390 vector registers 0-15 upper half */
+#define NT_S390_VXRS_HIGH      0x30a   /* s390 vector registers 16-31 */
+#define NT_ARM_VFP     0x400           /* ARM VFP/NEON registers */
+#define NT_ARM_TLS     0x401           /* ARM TLS register */
+#define NT_ARM_HW_BREAK        0x402           /* ARM hardware breakpoint registers */
+#define NT_ARM_HW_WATCH        0x403           /* ARM hardware watchpoint registers */
+#define NT_ARM_SYSTEM_CALL     0x404   /* ARM system call number */
+#define NT_METAG_CBUF  0x500           /* Metag catch buffer registers */
+#define NT_METAG_RPIPE 0x501           /* Metag read pipeline state */
+#define NT_METAG_TLS   0x502           /* Metag TLS pointer */
+
+
+/* Note header in a PT_NOTE section */
+typedef struct elf32_note {
+  Elf32_Word   n_namesz;       /* Name size */
+  Elf32_Word   n_descsz;       /* Content size */
+  Elf32_Word   n_type;         /* Content type */
+} Elf32_Nhdr;
+
+/* Note header in a PT_NOTE section */
+typedef struct elf64_note {
+  Elf64_Word n_namesz; /* Name size */
+  Elf64_Word n_descsz; /* Content size */
+  Elf64_Word n_type;   /* Content type */
+} Elf64_Nhdr;
+
+#endif /* _LINUX_ELF_H */
diff --git a/lib/libdss-include/linux/elfcore.h b/lib/libdss-include/linux/elfcore.h
new file mode 100644 (file)
index 0000000..9dd784c
--- /dev/null
@@ -0,0 +1,96 @@
+#ifndef _LINUX_ELFCORE_H
+#define _LINUX_ELFCORE_H
+
+#include <linux/types.h>
+#include <linux/signal.h>
+#include <linux/time.h>
+#include <linux/ptrace.h>
+#include <linux/elf.h>
+#include <linux/fs.h>
+
+struct elf_siginfo
+{
+       int     si_signo;                       /* signal number */
+       int     si_code;                        /* extra code */
+       int     si_errno;                       /* errno */
+};
+
+
+typedef elf_greg_t greg_t;
+typedef elf_gregset_t gregset_t;
+typedef elf_fpregset_t fpregset_t;
+typedef elf_fpxregset_t fpxregset_t;
+#define NGREG ELF_NGREG
+
+/*
+ * Definitions to generate Intel SVR4-like core files.
+ * These mostly have the same names as the SVR4 types with "elf_"
+ * tacked on the front to prevent clashes with linux definitions,
+ * and the typedef forms have been avoided.  This is mostly like
+ * the SVR4 structure, but more Linuxy, with things that Linux does
+ * not support and which gdb doesn't really use excluded.
+ * Fields present but not used are marked with "XXX".
+ */
+struct elf_prstatus
+{
+#if 0
+       long    pr_flags;       /* XXX Process flags */
+       short   pr_why;         /* XXX Reason for process halt */
+       short   pr_what;        /* XXX More detailed reason */
+#endif
+       struct elf_siginfo pr_info;     /* Info associated with signal */
+       short   pr_cursig;              /* Current signal */
+       unsigned long pr_sigpend;       /* Set of pending signals */
+       unsigned long pr_sighold;       /* Set of held signals */
+#if 0
+       struct sigaltstack pr_altstack; /* Alternate stack info */
+       struct sigaction pr_action;     /* Signal action for current sig */
+#endif
+       pid_t   pr_pid;
+       pid_t   pr_ppid;
+       pid_t   pr_pgrp;
+       pid_t   pr_sid;
+       struct timeval pr_utime;        /* User time */
+       struct timeval pr_stime;        /* System time */
+       struct timeval pr_cutime;       /* Cumulative user time */
+       struct timeval pr_cstime;       /* Cumulative system time */
+#if 0
+       long    pr_instr;               /* Current instruction */
+#endif
+       elf_gregset_t pr_reg;   /* GP registers */
+#ifdef CONFIG_BINFMT_ELF_FDPIC
+       /* When using FDPIC, the loadmap addresses need to be communicated
+        * to GDB in order for GDB to do the necessary relocations.  The
+        * fields (below) used to communicate this information are placed
+        * immediately after ``pr_reg'', so that the loadmap addresses may
+        * be viewed as part of the register set if so desired.
+        */
+       unsigned long pr_exec_fdpic_loadmap;
+       unsigned long pr_interp_fdpic_loadmap;
+#endif
+       int pr_fpvalid;         /* True if math co-processor being used.  */
+};
+
+#define ELF_PRARGSZ    (80)    /* Number of chars for args */
+
+struct elf_prpsinfo
+{
+       char    pr_state;       /* numeric process state */
+       char    pr_sname;       /* char for pr_state */
+       char    pr_zomb;        /* zombie */
+       char    pr_nice;        /* nice val */
+       unsigned long pr_flag;  /* flags */
+       __kernel_uid_t  pr_uid;
+       __kernel_gid_t  pr_gid;
+       pid_t   pr_pid, pr_ppid, pr_pgrp, pr_sid;
+       /* Lots missing */
+       char    pr_fname[16];   /* filename of executable */
+       char    pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
+};
+
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+#define PRARGSZ ELF_PRARGSZ 
+
+
+#endif /* _LINUX_ELFCORE_H */
diff --git a/lib/libdss-include/linux/errno.h b/lib/libdss-include/linux/errno.h
new file mode 100644 (file)
index 0000000..70f2bd3
--- /dev/null
@@ -0,0 +1 @@
+#include <asm/errno.h>
diff --git a/lib/libdss-include/linux/errqueue.h b/lib/libdss-include/linux/errqueue.h
new file mode 100644 (file)
index 0000000..5575a6e
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _LINUX_ERRQUEUE_H
+#define _LINUX_ERRQUEUE_H
+
+#include <linux/types.h>
+
+struct sock_extended_err {
+       __u32   ee_errno;       
+       __u8    ee_origin;
+       __u8    ee_type;
+       __u8    ee_code;
+       __u8    ee_pad;
+       __u32   ee_info;
+       __u32   ee_data;
+};
+
+#define SO_EE_ORIGIN_NONE      0
+#define SO_EE_ORIGIN_LOCAL     1
+#define SO_EE_ORIGIN_ICMP      2
+#define SO_EE_ORIGIN_ICMP6     3
+#define SO_EE_ORIGIN_TXSTATUS  4
+#define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
+
+#define SO_EE_OFFENDER(ee)     ((struct sockaddr*)((ee)+1))
+
+/**
+ *     struct scm_timestamping - timestamps exposed through cmsg
+ *
+ *     The timestamping interfaces SO_TIMESTAMPING, MSG_TSTAMP_*
+ *     communicate network timestamps by passing this struct in a cmsg with
+ *     recvmsg(). See Documentation/networking/timestamping.txt for details.
+ */
+struct scm_timestamping {
+       struct timespec ts[3];
+};
+
+/* The type of scm_timestamping, passed in sock_extended_err ee_info.
+ * This defines the type of ts[0]. For SCM_TSTAMP_SND only, if ts[0]
+ * is zero, then this is a hardware timestamp and recorded in ts[2].
+ */
+enum {
+       SCM_TSTAMP_SND,         /* driver passed skb to NIC, or HW */
+       SCM_TSTAMP_SCHED,       /* data entered the packet scheduler */
+       SCM_TSTAMP_ACK,         /* data acknowledged by peer */
+};
+
+#endif /* _LINUX_ERRQUEUE_H */
diff --git a/lib/libdss-include/linux/ethtool.h b/lib/libdss-include/linux/ethtool.h
new file mode 100644 (file)
index 0000000..a19dc5c
--- /dev/null
@@ -0,0 +1,1441 @@
+/*
+ * ethtool.h: Defines for Linux ethtool.
+ *
+ * Copyright (C) 1998 David S. Miller (davem@redhat.com)
+ * Copyright 2001 Jeff Garzik <jgarzik@pobox.com>
+ * Portions Copyright 2001 Sun Microsystems (thockin@sun.com)
+ * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
+ *                                christopher.leech@intel.com,
+ *                                scott.feldman@intel.com)
+ * Portions Copyright (C) Sun Microsystems 2008
+ */
+
+#ifndef _LINUX_ETHTOOL_H
+#define _LINUX_ETHTOOL_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/* All structures exposed to userland should be defined such that they
+ * have the same layout for 32-bit and 64-bit userland.
+ */
+
+/**
+ * struct ethtool_cmd - link control and status
+ * @cmd: Command number = %ETHTOOL_GSET or %ETHTOOL_SSET
+ * @supported: Bitmask of %SUPPORTED_* flags for the link modes,
+ *     physical connectors and other link features for which the
+ *     interface supports autonegotiation or auto-detection.
+ *     Read-only.
+ * @advertising: Bitmask of %ADVERTISED_* flags for the link modes,
+ *     physical connectors and other link features that are
+ *     advertised through autonegotiation or enabled for
+ *     auto-detection.
+ * @speed: Low bits of the speed
+ * @duplex: Duplex mode; one of %DUPLEX_*
+ * @port: Physical connector type; one of %PORT_*
+ * @phy_address: MDIO address of PHY (transceiver); 0 or 255 if not
+ *     applicable.  For clause 45 PHYs this is the PRTAD.
+ * @transceiver: Historically used to distinguish different possible
+ *     PHY types, but not in a consistent way.  Deprecated.
+ * @autoneg: Enable/disable autonegotiation and auto-detection;
+ *     either %AUTONEG_DISABLE or %AUTONEG_ENABLE
+ * @mdio_support: Bitmask of %ETH_MDIO_SUPPORTS_* flags for the MDIO
+ *     protocols supported by the interface; 0 if unknown.
+ *     Read-only.
+ * @maxtxpkt: Historically used to report TX IRQ coalescing; now
+ *     obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
+ * @maxrxpkt: Historically used to report RX IRQ coalescing; now
+ *     obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
+ * @speed_hi: High bits of the speed
+ * @eth_tp_mdix: Ethernet twisted-pair MDI(-X) status; one of
+ *     %ETH_TP_MDI_*.  If the status is unknown or not applicable, the
+ *     value will be %ETH_TP_MDI_INVALID.  Read-only.
+ * @eth_tp_mdix_ctrl: Ethernet twisted pair MDI(-X) control; one of
+ *     %ETH_TP_MDI_*.  If MDI(-X) control is not implemented, reads
+ *     yield %ETH_TP_MDI_INVALID and writes may be ignored or rejected.
+ *     When written successfully, the link should be renegotiated if
+ *     necessary.
+ * @lp_advertising: Bitmask of %ADVERTISED_* flags for the link modes
+ *     and other link features that the link partner advertised
+ *     through autonegotiation; 0 if unknown or not applicable.
+ *     Read-only.
+ *
+ * The link speed in Mbps is split between @speed and @speed_hi.  Use
+ * the ethtool_cmd_speed() and ethtool_cmd_speed_set() functions to
+ * access it.
+ *
+ * If autonegotiation is disabled, the speed and @duplex represent the
+ * fixed link mode and are writable if the driver supports multiple
+ * link modes.  If it is enabled then they are read-only; if the link
+ * is up they represent the negotiated link mode; if the link is down,
+ * the speed is 0, %SPEED_UNKNOWN or the highest enabled speed and
+ * @duplex is %DUPLEX_UNKNOWN or the best enabled duplex mode.
+ *
+ * Some hardware interfaces may have multiple PHYs and/or physical
+ * connectors fitted or do not allow the driver to detect which are
+ * fitted.  For these interfaces @port and/or @phy_address may be
+ * writable, possibly dependent on @autoneg being %AUTONEG_DISABLE.
+ * Otherwise, attempts to write different values may be ignored or
+ * rejected.
+ *
+ * Users should assume that all fields not marked read-only are
+ * writable and subject to validation by the driver.  They should use
+ * %ETHTOOL_GSET to get the current values before making specific
+ * changes and then applying them with %ETHTOOL_SSET.
+ *
+ * Drivers that implement set_settings() should validate all fields
+ * other than @cmd that are not described as read-only or deprecated,
+ * and must ignore all fields described as read-only.
+ *
+ * Deprecated fields should be ignored by both users and drivers.
+ */
+struct ethtool_cmd {
+       __u32   cmd;
+       __u32   supported;
+       __u32   advertising;
+       __u16   speed;
+       __u8    duplex;
+       __u8    port;
+       __u8    phy_address;
+       __u8    transceiver;
+       __u8    autoneg;
+       __u8    mdio_support;
+       __u32   maxtxpkt;
+       __u32   maxrxpkt;
+       __u16   speed_hi;
+       __u8    eth_tp_mdix;
+       __u8    eth_tp_mdix_ctrl;
+       __u32   lp_advertising;
+       __u32   reserved[2];
+};
+
+static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+                                        __u32 speed)
+{
+
+       ep->speed = (__u16)speed;
+       ep->speed_hi = (__u16)(speed >> 16);
+}
+
+static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
+{
+       return (ep->speed_hi << 16) | ep->speed;
+}
+
+/* Device supports clause 22 register access to PHY or peripherals
+ * using the interface defined in <linux/mii.h>.  This should not be
+ * set if there are known to be no such peripherals present or if
+ * the driver only emulates clause 22 registers for compatibility.
+ */
+#define ETH_MDIO_SUPPORTS_C22  1
+
+/* Device supports clause 45 register access to PHY or peripherals
+ * using the interface defined in <linux/mii.h> and <linux/mdio.h>.
+ * This should not be set if there are known to be no such peripherals
+ * present.
+ */
+#define ETH_MDIO_SUPPORTS_C45  2
+
+#define ETHTOOL_FWVERS_LEN     32
+#define ETHTOOL_BUSINFO_LEN    32
+#define ETHTOOL_EROMVERS_LEN   32
+
+/**
+ * struct ethtool_drvinfo - general driver and device information
+ * @cmd: Command number = %ETHTOOL_GDRVINFO
+ * @driver: Driver short name.  This should normally match the name
+ *     in its bus driver structure (e.g. pci_driver::name).  Must
+ *     not be an empty string.
+ * @version: Driver version string; may be an empty string
+ * @fw_version: Firmware version string; may be an empty string
+ * @erom_version: Expansion ROM version string; may be an empty string
+ * @bus_info: Device bus address.  This should match the dev_name()
+ *     string for the underlying bus device, if there is one.  May be
+ *     an empty string.
+ * @n_priv_flags: Number of flags valid for %ETHTOOL_GPFLAGS and
+ *     %ETHTOOL_SPFLAGS commands; also the number of strings in the
+ *     %ETH_SS_PRIV_FLAGS set
+ * @n_stats: Number of u64 statistics returned by the %ETHTOOL_GSTATS
+ *     command; also the number of strings in the %ETH_SS_STATS set
+ * @testinfo_len: Number of results returned by the %ETHTOOL_TEST
+ *     command; also the number of strings in the %ETH_SS_TEST set
+ * @eedump_len: Size of EEPROM accessible through the %ETHTOOL_GEEPROM
+ *     and %ETHTOOL_SEEPROM commands, in bytes
+ * @regdump_len: Size of register dump returned by the %ETHTOOL_GREGS
+ *     command, in bytes
+ *
+ * Users can use the %ETHTOOL_GSSET_INFO command to get the number of
+ * strings in any string set (from Linux 2.6.34).
+ *
+ * Drivers should set at most @driver, @version, @fw_version and
+ * @bus_info in their get_drvinfo() implementation.  The ethtool
+ * core fills in the other fields using other driver operations.
+ */
+struct ethtool_drvinfo {
+       __u32   cmd;
+       char    driver[32];
+       char    version[32];
+       char    fw_version[ETHTOOL_FWVERS_LEN];
+       char    bus_info[ETHTOOL_BUSINFO_LEN];
+       char    erom_version[ETHTOOL_EROMVERS_LEN];
+       char    reserved2[12];
+       __u32   n_priv_flags;
+       __u32   n_stats;
+       __u32   testinfo_len;
+       __u32   eedump_len;
+       __u32   regdump_len;
+};
+
+#define SOPASS_MAX     6
+
+/**
+ * struct ethtool_wolinfo - Wake-On-Lan configuration
+ * @cmd: Command number = %ETHTOOL_GWOL or %ETHTOOL_SWOL
+ * @supported: Bitmask of %WAKE_* flags for supported Wake-On-Lan modes.
+ *     Read-only.
+ * @wolopts: Bitmask of %WAKE_* flags for enabled Wake-On-Lan modes.
+ * @sopass: SecureOn(tm) password; meaningful only if %WAKE_MAGICSECURE
+ *     is set in @wolopts.
+ */
+struct ethtool_wolinfo {
+       __u32   cmd;
+       __u32   supported;
+       __u32   wolopts;
+       __u8    sopass[SOPASS_MAX];
+};
+
+/* for passing single values */
+struct ethtool_value {
+       __u32   cmd;
+       __u32   data;
+};
+
+enum tunable_id {
+       ETHTOOL_ID_UNSPEC,
+       ETHTOOL_RX_COPYBREAK,
+       ETHTOOL_TX_COPYBREAK,
+       /*
+        * Add your fresh new tubale attribute above and remember to update
+        * tunable_strings[] in net/core/ethtool.c
+        */
+       __ETHTOOL_TUNABLE_COUNT,
+};
+
+enum tunable_type_id {
+       ETHTOOL_TUNABLE_UNSPEC,
+       ETHTOOL_TUNABLE_U8,
+       ETHTOOL_TUNABLE_U16,
+       ETHTOOL_TUNABLE_U32,
+       ETHTOOL_TUNABLE_U64,
+       ETHTOOL_TUNABLE_STRING,
+       ETHTOOL_TUNABLE_S8,
+       ETHTOOL_TUNABLE_S16,
+       ETHTOOL_TUNABLE_S32,
+       ETHTOOL_TUNABLE_S64,
+};
+
+struct ethtool_tunable {
+       __u32   cmd;
+       __u32   id;
+       __u32   type_id;
+       __u32   len;
+       void    *data[0];
+};
+
+/**
+ * struct ethtool_regs - hardware register dump
+ * @cmd: Command number = %ETHTOOL_GREGS
+ * @version: Dump format version.  This is driver-specific and may
+ *     distinguish different chips/revisions.  Drivers must use new
+ *     version numbers whenever the dump format changes in an
+ *     incompatible way.
+ * @len: On entry, the real length of @data.  On return, the number of
+ *     bytes used.
+ * @data: Buffer for the register dump
+ *
+ * Users should use %ETHTOOL_GDRVINFO to find the maximum length of
+ * a register dump for the interface.  They must allocate the buffer
+ * immediately following this structure.
+ */
+struct ethtool_regs {
+       __u32   cmd;
+       __u32   version;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_eeprom - EEPROM dump
+ * @cmd: Command number = %ETHTOOL_GEEPROM, %ETHTOOL_GMODULEEEPROM or
+ *     %ETHTOOL_SEEPROM
+ * @magic: A 'magic cookie' value to guard against accidental changes.
+ *     The value passed in to %ETHTOOL_SEEPROM must match the value
+ *     returned by %ETHTOOL_GEEPROM for the same device.  This is
+ *     unused when @cmd is %ETHTOOL_GMODULEEEPROM.
+ * @offset: Offset within the EEPROM to begin reading/writing, in bytes
+ * @len: On entry, number of bytes to read/write.  On successful
+ *     return, number of bytes actually read/written.  In case of
+ *     error, this may indicate at what point the error occurred.
+ * @data: Buffer to read/write from
+ *
+ * Users may use %ETHTOOL_GDRVINFO or %ETHTOOL_GMODULEINFO to find
+ * the length of an on-board or module EEPROM, respectively.  They
+ * must allocate the buffer immediately following this structure.
+ */
+struct ethtool_eeprom {
+       __u32   cmd;
+       __u32   magic;
+       __u32   offset;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_eee - Energy Efficient Ethernet information
+ * @cmd: ETHTOOL_{G,S}EEE
+ * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations
+ *     for which there is EEE support.
+ * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations
+ *     advertised as eee capable.
+ * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex
+ *     combinations advertised by the link partner as eee capable.
+ * @eee_active: Result of the eee auto negotiation.
+ * @eee_enabled: EEE configured mode (enabled/disabled).
+ * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given
+ *     that eee was negotiated.
+ * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
+ *     its tx lpi (after reaching 'idle' state). Effective only when eee
+ *     was negotiated and tx_lpi_enabled was set.
+ */
+struct ethtool_eee {
+       __u32   cmd;
+       __u32   supported;
+       __u32   advertised;
+       __u32   lp_advertised;
+       __u32   eee_active;
+       __u32   eee_enabled;
+       __u32   tx_lpi_enabled;
+       __u32   tx_lpi_timer;
+       __u32   reserved[2];
+};
+
+/**
+ * struct ethtool_modinfo - plugin module eeprom information
+ * @cmd: %ETHTOOL_GMODULEINFO
+ * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx
+ * @eeprom_len: Length of the eeprom
+ *
+ * This structure is used to return the information to
+ * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM.
+ * The type code indicates the eeprom data format
+ */
+struct ethtool_modinfo {
+       __u32   cmd;
+       __u32   type;
+       __u32   eeprom_len;
+       __u32   reserved[8];
+};
+
+/**
+ * struct ethtool_coalesce - coalescing parameters for IRQs and stats updates
+ * @cmd: ETHTOOL_{G,S}COALESCE
+ * @rx_coalesce_usecs: How many usecs to delay an RX interrupt after
+ *     a packet arrives.
+ * @rx_max_coalesced_frames: Maximum number of packets to receive
+ *     before an RX interrupt.
+ * @rx_coalesce_usecs_irq: Same as @rx_coalesce_usecs, except that
+ *     this value applies while an IRQ is being serviced by the host.
+ * @rx_max_coalesced_frames_irq: Same as @rx_max_coalesced_frames,
+ *     except that this value applies while an IRQ is being serviced
+ *     by the host.
+ * @tx_coalesce_usecs: How many usecs to delay a TX interrupt after
+ *     a packet is sent.
+ * @tx_max_coalesced_frames: Maximum number of packets to be sent
+ *     before a TX interrupt.
+ * @tx_coalesce_usecs_irq: Same as @tx_coalesce_usecs, except that
+ *     this value applies while an IRQ is being serviced by the host.
+ * @tx_max_coalesced_frames_irq: Same as @tx_max_coalesced_frames,
+ *     except that this value applies while an IRQ is being serviced
+ *     by the host.
+ * @stats_block_coalesce_usecs: How many usecs to delay in-memory
+ *     statistics block updates.  Some drivers do not have an
+ *     in-memory statistic block, and in such cases this value is
+ *     ignored.  This value must not be zero.
+ * @use_adaptive_rx_coalesce: Enable adaptive RX coalescing.
+ * @use_adaptive_tx_coalesce: Enable adaptive TX coalescing.
+ * @pkt_rate_low: Threshold for low packet rate (packets per second).
+ * @rx_coalesce_usecs_low: How many usecs to delay an RX interrupt after
+ *     a packet arrives, when the packet rate is below @pkt_rate_low.
+ * @rx_max_coalesced_frames_low: Maximum number of packets to be received
+ *     before an RX interrupt, when the packet rate is below @pkt_rate_low.
+ * @tx_coalesce_usecs_low: How many usecs to delay a TX interrupt after
+ *     a packet is sent, when the packet rate is below @pkt_rate_low.
+ * @tx_max_coalesced_frames_low: Maximum nuumber of packets to be sent before
+ *     a TX interrupt, when the packet rate is below @pkt_rate_low.
+ * @pkt_rate_high: Threshold for high packet rate (packets per second).
+ * @rx_coalesce_usecs_high: How many usecs to delay an RX interrupt after
+ *     a packet arrives, when the packet rate is above @pkt_rate_high.
+ * @rx_max_coalesced_frames_high: Maximum number of packets to be received
+ *     before an RX interrupt, when the packet rate is above @pkt_rate_high.
+ * @tx_coalesce_usecs_high: How many usecs to delay a TX interrupt after
+ *     a packet is sent, when the packet rate is above @pkt_rate_high.
+ * @tx_max_coalesced_frames_high: Maximum number of packets to be sent before
+ *     a TX interrupt, when the packet rate is above @pkt_rate_high.
+ * @rate_sample_interval: How often to do adaptive coalescing packet rate
+ *     sampling, measured in seconds.  Must not be zero.
+ *
+ * Each pair of (usecs, max_frames) fields specifies that interrupts
+ * should be coalesced until
+ *     (usecs > 0 && time_since_first_completion >= usecs) ||
+ *     (max_frames > 0 && completed_frames >= max_frames)
+ *
+ * It is illegal to set both usecs and max_frames to zero as this
+ * would cause interrupts to never be generated.  To disable
+ * coalescing, set usecs = 0 and max_frames = 1.
+ *
+ * Some implementations ignore the value of max_frames and use the
+ * condition time_since_first_completion >= usecs
+ *
+ * This is deprecated.  Drivers for hardware that does not support
+ * counting completions should validate that max_frames == !rx_usecs.
+ *
+ * Adaptive RX/TX coalescing is an algorithm implemented by some
+ * drivers to improve latency under low packet rates and improve
+ * throughput under high packet rates.  Some drivers only implement
+ * one of RX or TX adaptive coalescing.  Anything not implemented by
+ * the driver causes these values to be silently ignored.
+ *
+ * When the packet rate is below @pkt_rate_high but above
+ * @pkt_rate_low (both measured in packets per second) the
+ * normal {rx,tx}_* coalescing parameters are used.
+ */
+struct ethtool_coalesce {
+       __u32   cmd;
+       __u32   rx_coalesce_usecs;
+       __u32   rx_max_coalesced_frames;
+       __u32   rx_coalesce_usecs_irq;
+       __u32   rx_max_coalesced_frames_irq;
+       __u32   tx_coalesce_usecs;
+       __u32   tx_max_coalesced_frames;
+       __u32   tx_coalesce_usecs_irq;
+       __u32   tx_max_coalesced_frames_irq;
+       __u32   stats_block_coalesce_usecs;
+       __u32   use_adaptive_rx_coalesce;
+       __u32   use_adaptive_tx_coalesce;
+       __u32   pkt_rate_low;
+       __u32   rx_coalesce_usecs_low;
+       __u32   rx_max_coalesced_frames_low;
+       __u32   tx_coalesce_usecs_low;
+       __u32   tx_max_coalesced_frames_low;
+       __u32   pkt_rate_high;
+       __u32   rx_coalesce_usecs_high;
+       __u32   rx_max_coalesced_frames_high;
+       __u32   tx_coalesce_usecs_high;
+       __u32   tx_max_coalesced_frames_high;
+       __u32   rate_sample_interval;
+};
+
+/**
+ * struct ethtool_ringparam - RX/TX ring parameters
+ * @cmd: Command number = %ETHTOOL_GRINGPARAM or %ETHTOOL_SRINGPARAM
+ * @rx_max_pending: Maximum supported number of pending entries per
+ *     RX ring.  Read-only.
+ * @rx_mini_max_pending: Maximum supported number of pending entries
+ *     per RX mini ring.  Read-only.
+ * @rx_jumbo_max_pending: Maximum supported number of pending entries
+ *     per RX jumbo ring.  Read-only.
+ * @tx_max_pending: Maximum supported number of pending entries per
+ *     TX ring.  Read-only.
+ * @rx_pending: Current maximum number of pending entries per RX ring
+ * @rx_mini_pending: Current maximum number of pending entries per RX
+ *     mini ring
+ * @rx_jumbo_pending: Current maximum number of pending entries per RX
+ *     jumbo ring
+ * @tx_pending: Current maximum supported number of pending entries
+ *     per TX ring
+ *
+ * If the interface does not have separate RX mini and/or jumbo rings,
+ * @rx_mini_max_pending and/or @rx_jumbo_max_pending will be 0.
+ *
+ * There may also be driver-dependent minimum values for the number
+ * of entries per ring.
+ */
+struct ethtool_ringparam {
+       __u32   cmd;
+       __u32   rx_max_pending;
+       __u32   rx_mini_max_pending;
+       __u32   rx_jumbo_max_pending;
+       __u32   tx_max_pending;
+       __u32   rx_pending;
+       __u32   rx_mini_pending;
+       __u32   rx_jumbo_pending;
+       __u32   tx_pending;
+};
+
+/**
+ * struct ethtool_channels - configuring number of network channel
+ * @cmd: ETHTOOL_{G,S}CHANNELS
+ * @max_rx: Read only. Maximum number of receive channel the driver support.
+ * @max_tx: Read only. Maximum number of transmit channel the driver support.
+ * @max_other: Read only. Maximum number of other channel the driver support.
+ * @max_combined: Read only. Maximum number of combined channel the driver
+ *     support. Set of queues RX, TX or other.
+ * @rx_count: Valid values are in the range 1 to the max_rx.
+ * @tx_count: Valid values are in the range 1 to the max_tx.
+ * @other_count: Valid values are in the range 1 to the max_other.
+ * @combined_count: Valid values are in the range 1 to the max_combined.
+ *
+ * This can be used to configure RX, TX and other channels.
+ */
+
+struct ethtool_channels {
+       __u32   cmd;
+       __u32   max_rx;
+       __u32   max_tx;
+       __u32   max_other;
+       __u32   max_combined;
+       __u32   rx_count;
+       __u32   tx_count;
+       __u32   other_count;
+       __u32   combined_count;
+};
+
+/**
+ * struct ethtool_pauseparam - Ethernet pause (flow control) parameters
+ * @cmd: Command number = %ETHTOOL_GPAUSEPARAM or %ETHTOOL_SPAUSEPARAM
+ * @autoneg: Flag to enable autonegotiation of pause frame use
+ * @rx_pause: Flag to enable reception of pause frames
+ * @tx_pause: Flag to enable transmission of pause frames
+ *
+ * Drivers should reject a non-zero setting of @autoneg when
+ * autoneogotiation is disabled (or not supported) for the link.
+ *
+ * If the link is autonegotiated, drivers should use
+ * mii_advertise_flowctrl() or similar code to set the advertised
+ * pause frame capabilities based on the @rx_pause and @tx_pause flags,
+ * even if @autoneg is zero.  They should also allow the advertised
+ * pause frame capabilities to be controlled directly through the
+ * advertising field of &struct ethtool_cmd.
+ *
+ * If @autoneg is non-zero, the MAC is configured to send and/or
+ * receive pause frames according to the result of autonegotiation.
+ * Otherwise, it is configured directly based on the @rx_pause and
+ * @tx_pause flags.
+ */
+struct ethtool_pauseparam {
+       __u32   cmd;
+       __u32   autoneg;
+       __u32   rx_pause;
+       __u32   tx_pause;
+};
+
+#define ETH_GSTRING_LEN                32
+
+/**
+ * enum ethtool_stringset - string set ID
+ * @ETH_SS_TEST: Self-test result names, for use with %ETHTOOL_TEST
+ * @ETH_SS_STATS: Statistic names, for use with %ETHTOOL_GSTATS
+ * @ETH_SS_PRIV_FLAGS: Driver private flag names, for use with
+ *     %ETHTOOL_GPFLAGS and %ETHTOOL_SPFLAGS
+ * @ETH_SS_NTUPLE_FILTERS: Previously used with %ETHTOOL_GRXNTUPLE;
+ *     now deprecated
+ * @ETH_SS_FEATURES: Device feature names
+ * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
+ */
+enum ethtool_stringset {
+       ETH_SS_TEST             = 0,
+       ETH_SS_STATS,
+       ETH_SS_PRIV_FLAGS,
+       ETH_SS_NTUPLE_FILTERS,
+       ETH_SS_FEATURES,
+       ETH_SS_RSS_HASH_FUNCS,
+       ETH_SS_TUNABLES,
+};
+
+/**
+ * struct ethtool_gstrings - string set for data tagging
+ * @cmd: Command number = %ETHTOOL_GSTRINGS
+ * @string_set: String set ID; one of &enum ethtool_stringset
+ * @len: On return, the number of strings in the string set
+ * @data: Buffer for strings.  Each string is null-padded to a size of
+ *     %ETH_GSTRING_LEN.
+ *
+ * Users must use %ETHTOOL_GSSET_INFO to find the number of strings in
+ * the string set.  They must allocate a buffer of the appropriate
+ * size immediately following this structure.
+ */
+struct ethtool_gstrings {
+       __u32   cmd;
+       __u32   string_set;
+       __u32   len;
+       __u8    data[0];
+};
+
+/**
+ * struct ethtool_sset_info - string set information
+ * @cmd: Command number = %ETHTOOL_GSSET_INFO
+ * @sset_mask: On entry, a bitmask of string sets to query, with bits
+ *     numbered according to &enum ethtool_stringset.  On return, a
+ *     bitmask of those string sets queried that are supported.
+ * @data: Buffer for string set sizes.  On return, this contains the
+ *     size of each string set that was queried and supported, in
+ *     order of ID.
+ *
+ * Example: The user passes in @sset_mask = 0x7 (sets 0, 1, 2) and on
+ * return @sset_mask == 0x6 (sets 1, 2).  Then @data[0] contains the
+ * size of set 1 and @data[1] contains the size of set 2.
+ *
+ * Users must allocate a buffer of the appropriate size (4 * number of
+ * sets queried) immediately following this structure.
+ */
+struct ethtool_sset_info {
+       __u32   cmd;
+       __u32   reserved;
+       __u64   sset_mask;
+       __u32   data[0];
+};
+
+/**
+ * enum ethtool_test_flags - flags definition of ethtool_test
+ * @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise
+ *     only online tests.
+ * @ETH_TEST_FL_FAILED: Driver set this flag if test fails.
+ * @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback
+ *     test.
+ * @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test
+ */
+
+enum ethtool_test_flags {
+       ETH_TEST_FL_OFFLINE     = (1 << 0),
+       ETH_TEST_FL_FAILED      = (1 << 1),
+       ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
+       ETH_TEST_FL_EXTERNAL_LB_DONE    = (1 << 3),
+};
+
+/**
+ * struct ethtool_test - device self-test invocation
+ * @cmd: Command number = %ETHTOOL_TEST
+ * @flags: A bitmask of flags from &enum ethtool_test_flags.  Some
+ *     flags may be set by the user on entry; others may be set by
+ *     the driver on return.
+ * @len: On return, the number of test results
+ * @data: Array of test results
+ *
+ * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
+ * number of test results that will be returned.  They must allocate a
+ * buffer of the appropriate size (8 * number of results) immediately
+ * following this structure.
+ */
+struct ethtool_test {
+       __u32   cmd;
+       __u32   flags;
+       __u32   reserved;
+       __u32   len;
+       __u64   data[0];
+};
+
+/**
+ * struct ethtool_stats - device-specific statistics
+ * @cmd: Command number = %ETHTOOL_GSTATS
+ * @n_stats: On return, the number of statistics
+ * @data: Array of statistics
+ *
+ * Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
+ * number of statistics that will be returned.  They must allocate a
+ * buffer of the appropriate size (8 * number of statistics)
+ * immediately following this structure.
+ */
+struct ethtool_stats {
+       __u32   cmd;
+       __u32   n_stats;
+       __u64   data[0];
+};
+
+/**
+ * struct ethtool_perm_addr - permanent hardware address
+ * @cmd: Command number = %ETHTOOL_GPERMADDR
+ * @size: On entry, the size of the buffer.  On return, the size of the
+ *     address.  The command fails if the buffer is too small.
+ * @data: Buffer for the address
+ *
+ * Users must allocate the buffer immediately following this structure.
+ * A buffer size of %MAX_ADDR_LEN should be sufficient for any address
+ * type.
+ */
+struct ethtool_perm_addr {
+       __u32   cmd;
+       __u32   size;
+       __u8    data[0];
+};
+
+/* boolean flags controlling per-interface behavior characteristics.
+ * When reading, the flag indicates whether or not a certain behavior
+ * is enabled/present.  When writing, the flag indicates whether
+ * or not the driver should turn on (set) or off (clear) a behavior.
+ *
+ * Some behaviors may read-only (unconditionally absent or present).
+ * If such is the case, return EINVAL in the set-flags operation if the
+ * flag differs from the read-only value.
+ */
+enum ethtool_flags {
+       ETH_FLAG_TXVLAN         = (1 << 7),     /* TX VLAN offload enabled */
+       ETH_FLAG_RXVLAN         = (1 << 8),     /* RX VLAN offload enabled */
+       ETH_FLAG_LRO            = (1 << 15),    /* LRO is enabled */
+       ETH_FLAG_NTUPLE         = (1 << 27),    /* N-tuple filters enabled */
+       ETH_FLAG_RXHASH         = (1 << 28),
+};
+
+/* The following structures are for supporting RX network flow
+ * classification and RX n-tuple configuration. Note, all multibyte
+ * fields, e.g., ip4src, ip4dst, psrc, pdst, spi, etc. are expected to
+ * be in network byte order.
+ */
+
+/**
+ * struct ethtool_tcpip4_spec - flow specification for TCP/IPv4 etc.
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @psrc: Source port
+ * @pdst: Destination port
+ * @tos: Type-of-service
+ *
+ * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow.
+ */
+struct ethtool_tcpip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be16  psrc;
+       __be16  pdst;
+       __u8    tos;
+};
+
+/**
+ * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @spi: Security parameters index
+ * @tos: Type-of-service
+ *
+ * This can be used to specify an IPsec transport or tunnel over IPv4.
+ */
+struct ethtool_ah_espip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be32  spi;
+       __u8    tos;
+};
+
+#define        ETH_RX_NFC_IP4  1
+
+/**
+ * struct ethtool_usrip4_spec - general flow specification for IPv4
+ * @ip4src: Source host
+ * @ip4dst: Destination host
+ * @l4_4_bytes: First 4 bytes of transport (layer 4) header
+ * @tos: Type-of-service
+ * @ip_ver: Value must be %ETH_RX_NFC_IP4; mask must be 0
+ * @proto: Transport protocol number; mask must be 0
+ */
+struct ethtool_usrip4_spec {
+       __be32  ip4src;
+       __be32  ip4dst;
+       __be32  l4_4_bytes;
+       __u8    tos;
+       __u8    ip_ver;
+       __u8    proto;
+};
+
+union ethtool_flow_union {
+       struct ethtool_tcpip4_spec              tcp_ip4_spec;
+       struct ethtool_tcpip4_spec              udp_ip4_spec;
+       struct ethtool_tcpip4_spec              sctp_ip4_spec;
+       struct ethtool_ah_espip4_spec           ah_ip4_spec;
+       struct ethtool_ah_espip4_spec           esp_ip4_spec;
+       struct ethtool_usrip4_spec              usr_ip4_spec;
+       struct ethhdr                           ether_spec;
+       __u8                                    hdata[52];
+};
+
+/**
+ * struct ethtool_flow_ext - additional RX flow fields
+ * @h_dest: destination MAC address
+ * @vlan_etype: VLAN EtherType
+ * @vlan_tci: VLAN tag control information
+ * @data: user defined data
+ *
+ * Note, @vlan_etype, @vlan_tci, and @data are only valid if %FLOW_EXT
+ * is set in &struct ethtool_rx_flow_spec @flow_type.
+ * @h_dest is valid if %FLOW_MAC_EXT is set.
+ */
+struct ethtool_flow_ext {
+       __u8            padding[2];
+       unsigned char   h_dest[ETH_ALEN];
+       __be16          vlan_etype;
+       __be16          vlan_tci;
+       __be32          data[2];
+};
+
+/**
+ * struct ethtool_rx_flow_spec - classification rule for RX flows
+ * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
+ * @h_u: Flow fields to match (dependent on @flow_type)
+ * @h_ext: Additional fields to match
+ * @m_u: Masks for flow field bits to be matched
+ * @m_ext: Masks for additional field bits to be matched
+ *     Note, all additional fields must be ignored unless @flow_type
+ *     includes the %FLOW_EXT or %FLOW_MAC_EXT flag
+ *     (see &struct ethtool_flow_ext description).
+ * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC
+ *     if packets should be discarded
+ * @location: Location of rule in the table.  Locations must be
+ *     numbered such that a flow matching multiple rules will be
+ *     classified according to the first (lowest numbered) rule.
+ */
+struct ethtool_rx_flow_spec {
+       __u32           flow_type;
+       union ethtool_flow_union h_u;
+       struct ethtool_flow_ext h_ext;
+       union ethtool_flow_union m_u;
+       struct ethtool_flow_ext m_ext;
+       __u64           ring_cookie;
+       __u32           location;
+};
+
+/* How rings are layed out when accessing virtual functions or
+ * offloaded queues is device specific. To allow users to do flow
+ * steering and specify these queues the ring cookie is partitioned
+ * into a 32bit queue index with an 8 bit virtual function id.
+ * This also leaves the 3bytes for further specifiers. It is possible
+ * future devices may support more than 256 virtual functions if
+ * devices start supporting PCIe w/ARI. However at the moment I
+ * do not know of any devices that support this so I do not reserve
+ * space for this at this time. If a future patch consumes the next
+ * byte it should be aware of this possiblity.
+ */
+#define ETHTOOL_RX_FLOW_SPEC_RING      0x00000000FFFFFFFFLL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF   0x000000FF00000000LL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
+static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
+{
+       return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie;
+};
+
+static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
+{
+       return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >>
+                               ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
+};
+
+/**
+ * struct ethtool_rxnfc - command to get or set RX flow classification rules
+ * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH,
+ *     %ETHTOOL_GRXRINGS, %ETHTOOL_GRXCLSRLCNT, %ETHTOOL_GRXCLSRULE,
+ *     %ETHTOOL_GRXCLSRLALL, %ETHTOOL_SRXCLSRLDEL or %ETHTOOL_SRXCLSRLINS
+ * @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW
+ * @data: Command-dependent value
+ * @fs: Flow classification rule
+ * @rule_cnt: Number of rules to be affected
+ * @rule_locs: Array of used rule locations
+ *
+ * For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating
+ * the fields included in the flow hash, e.g. %RXH_IP_SRC.  The following
+ * structure fields must not be used.
+ *
+ * For %ETHTOOL_GRXRINGS, @data is set to the number of RX rings/queues
+ * on return.
+ *
+ * For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined
+ * rules on return.  If @data is non-zero on return then it is the
+ * size of the rule table, plus the flag %RX_CLS_LOC_SPECIAL if the
+ * driver supports any special location values.  If that flag is not
+ * set in @data then special location values should not be used.
+ *
+ * For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an
+ * existing rule on entry and @fs contains the rule on return.
+ *
+ * For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the
+ * user buffer for @rule_locs on entry.  On return, @data is the size
+ * of the rule table, @rule_cnt is the number of defined rules, and
+ * @rule_locs contains the locations of the defined rules.  Drivers
+ * must use the second parameter to get_rxnfc() instead of @rule_locs.
+ *
+ * For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update.
+ * @fs.@location either specifies the location to use or is a special
+ * location value with %RX_CLS_LOC_SPECIAL flag set.  On return,
+ * @fs.@location is the actual rule location.
+ *
+ * For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an
+ * existing rule on entry.
+ *
+ * A driver supporting the special location values for
+ * %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused
+ * location, and may remove a rule at a later location (lower
+ * priority) that matches exactly the same set of flows.  The special
+ * values are %RX_CLS_LOC_ANY, selecting any location;
+ * %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum
+ * priority); and %RX_CLS_LOC_LAST, selecting the last suitable
+ * location (minimum priority).  Additional special values may be
+ * defined in future and drivers must return -%EINVAL for any
+ * unrecognised value.
+ */
+struct ethtool_rxnfc {
+       __u32                           cmd;
+       __u32                           flow_type;
+       __u64                           data;
+       struct ethtool_rx_flow_spec     fs;
+       __u32                           rule_cnt;
+       __u32                           rule_locs[0];
+};
+
+
+/**
+ * struct ethtool_rxfh_indir - command to get or set RX flow hash indirection
+ * @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR
+ * @size: On entry, the array size of the user buffer, which may be zero.
+ *     On return from %ETHTOOL_GRXFHINDIR, the array size of the hardware
+ *     indirection table.
+ * @ring_index: RX ring/queue index for each hash value
+ *
+ * For %ETHTOOL_GRXFHINDIR, a @size of zero means that only the size
+ * should be returned.  For %ETHTOOL_SRXFHINDIR, a @size of zero means
+ * the table should be reset to default values.  This last feature
+ * is not supported by the original implementations.
+ */
+struct ethtool_rxfh_indir {
+       __u32   cmd;
+       __u32   size;
+       __u32   ring_index[0];
+};
+
+/**
+ * struct ethtool_rxfh - command to get/set RX flow hash indir or/and hash key.
+ * @cmd: Specific command number - %ETHTOOL_GRSSH or %ETHTOOL_SRSSH
+ * @rss_context: RSS context identifier.
+ * @indir_size: On entry, the array size of the user buffer for the
+ *     indirection table, which may be zero, or (for %ETHTOOL_SRSSH),
+ *     %ETH_RXFH_INDIR_NO_CHANGE.  On return from %ETHTOOL_GRSSH,
+ *     the array size of the hardware indirection table.
+ * @key_size: On entry, the array size of the user buffer for the hash key,
+ *     which may be zero.  On return from %ETHTOOL_GRSSH, the size of the
+ *     hardware hash key.
+ * @hfunc: Defines the current RSS hash function used by HW (or to be set to).
+ *     Valid values are one of the %ETH_RSS_HASH_*.
+ * @rsvd:      Reserved for future extensions.
+ * @rss_config: RX ring/queue index for each hash value i.e., indirection table
+ *     of @indir_size __u32 elements, followed by hash key of @key_size
+ *     bytes.
+ *
+ * For %ETHTOOL_GRSSH, a @indir_size and key_size of zero means that only the
+ * size should be returned.  For %ETHTOOL_SRSSH, an @indir_size of
+ * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested
+ * and a @indir_size of zero means the indir table should be reset to default
+ * values. An hfunc of zero means that hash function setting is not requested.
+ */
+struct ethtool_rxfh {
+       __u32   cmd;
+       __u32   rss_context;
+       __u32   indir_size;
+       __u32   key_size;
+       __u8    hfunc;
+       __u8    rsvd8[3];
+       __u32   rsvd32;
+       __u32   rss_config[0];
+};
+#define ETH_RXFH_INDIR_NO_CHANGE       0xffffffff
+
+/**
+ * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter
+ * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
+ * @h_u: Flow field values to match (dependent on @flow_type)
+ * @m_u: Masks for flow field value bits to be ignored
+ * @vlan_tag: VLAN tag to match
+ * @vlan_tag_mask: Mask for VLAN tag bits to be ignored
+ * @data: Driver-dependent data to match
+ * @data_mask: Mask for driver-dependent data bits to be ignored
+ * @action: RX ring/queue index to deliver to (non-negative) or other action
+ *     (negative, e.g. %ETHTOOL_RXNTUPLE_ACTION_DROP)
+ *
+ * For flow types %TCP_V4_FLOW, %UDP_V4_FLOW and %SCTP_V4_FLOW, where
+ * a field value and mask are both zero this is treated as if all mask
+ * bits are set i.e. the field is ignored.
+ */
+struct ethtool_rx_ntuple_flow_spec {
+       __u32            flow_type;
+       union {
+               struct ethtool_tcpip4_spec              tcp_ip4_spec;
+               struct ethtool_tcpip4_spec              udp_ip4_spec;
+               struct ethtool_tcpip4_spec              sctp_ip4_spec;
+               struct ethtool_ah_espip4_spec           ah_ip4_spec;
+               struct ethtool_ah_espip4_spec           esp_ip4_spec;
+               struct ethtool_usrip4_spec              usr_ip4_spec;
+               struct ethhdr                           ether_spec;
+               __u8                                    hdata[72];
+       } h_u, m_u;
+
+       __u16           vlan_tag;
+       __u16           vlan_tag_mask;
+       __u64           data;
+       __u64           data_mask;
+
+       __s32           action;
+#define ETHTOOL_RXNTUPLE_ACTION_DROP   (-1)    /* drop packet */
+#define ETHTOOL_RXNTUPLE_ACTION_CLEAR  (-2)    /* clear filter */
+};
+
+/**
+ * struct ethtool_rx_ntuple - command to set or clear RX flow filter
+ * @cmd: Command number - %ETHTOOL_SRXNTUPLE
+ * @fs: Flow filter specification
+ */
+struct ethtool_rx_ntuple {
+       __u32                                   cmd;
+       struct ethtool_rx_ntuple_flow_spec      fs;
+};
+
+#define ETHTOOL_FLASH_MAX_FILENAME     128
+enum ethtool_flash_op_type {
+       ETHTOOL_FLASH_ALL_REGIONS       = 0,
+};
+
+/* for passing firmware flashing related parameters */
+struct ethtool_flash {
+       __u32   cmd;
+       __u32   region;
+       char    data[ETHTOOL_FLASH_MAX_FILENAME];
+};
+
+/**
+ * struct ethtool_dump - used for retrieving, setting device dump
+ * @cmd: Command number - %ETHTOOL_GET_DUMP_FLAG, %ETHTOOL_GET_DUMP_DATA, or
+ *     %ETHTOOL_SET_DUMP
+ * @version: FW version of the dump, filled in by driver
+ * @flag: driver dependent flag for dump setting, filled in by driver during
+ *        get and filled in by ethtool for set operation.
+ *        flag must be initialized by macro ETH_FW_DUMP_DISABLE value when
+ *        firmware dump is disabled.
+ * @len: length of dump data, used as the length of the user buffer on entry to
+ *      %ETHTOOL_GET_DUMP_DATA and this is returned as dump length by driver
+ *      for %ETHTOOL_GET_DUMP_FLAG command
+ * @data: data collected for get dump data operation
+ */
+struct ethtool_dump {
+       __u32   cmd;
+       __u32   version;
+       __u32   flag;
+       __u32   len;
+       __u8    data[0];
+};
+
+#define ETH_FW_DUMP_DISABLE 0
+
+/* for returning and changing feature sets */
+
+/**
+ * struct ethtool_get_features_block - block with state of 32 features
+ * @available: mask of changeable features
+ * @requested: mask of features requested to be enabled if possible
+ * @active: mask of currently enabled features
+ * @never_changed: mask of features not changeable for any device
+ */
+struct ethtool_get_features_block {
+       __u32   available;
+       __u32   requested;
+       __u32   active;
+       __u32   never_changed;
+};
+
+/**
+ * struct ethtool_gfeatures - command to get state of device's features
+ * @cmd: command number = %ETHTOOL_GFEATURES
+ * @size: On entry, the number of elements in the features[] array;
+ *     on return, the number of elements in features[] needed to hold
+ *     all features
+ * @features: state of features
+ */
+struct ethtool_gfeatures {
+       __u32   cmd;
+       __u32   size;
+       struct ethtool_get_features_block features[0];
+};
+
+/**
+ * struct ethtool_set_features_block - block with request for 32 features
+ * @valid: mask of features to be changed
+ * @requested: values of features to be changed
+ */
+struct ethtool_set_features_block {
+       __u32   valid;
+       __u32   requested;
+};
+
+/**
+ * struct ethtool_sfeatures - command to request change in device's features
+ * @cmd: command number = %ETHTOOL_SFEATURES
+ * @size: array size of the features[] array
+ * @features: feature change masks
+ */
+struct ethtool_sfeatures {
+       __u32   cmd;
+       __u32   size;
+       struct ethtool_set_features_block features[0];
+};
+
+/**
+ * struct ethtool_ts_info - holds a device's timestamping and PHC association
+ * @cmd: command number = %ETHTOOL_GET_TS_INFO
+ * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags
+ * @phc_index: device index of the associated PHC, or -1 if there is none
+ * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values
+ * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values
+ *
+ * The bits in the 'tx_types' and 'rx_filters' fields correspond to
+ * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values,
+ * respectively.  For example, if the device supports HWTSTAMP_TX_ON,
+ * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set.
+ *
+ * Drivers should only report the filters they actually support without
+ * upscaling in the SIOCSHWTSTAMP ioctl. If the SIOCSHWSTAMP request for
+ * HWTSTAMP_FILTER_V1_SYNC is supported by HWTSTAMP_FILTER_V1_EVENT, then the
+ * driver should only report HWTSTAMP_FILTER_V1_EVENT in this op.
+ */
+struct ethtool_ts_info {
+       __u32   cmd;
+       __u32   so_timestamping;
+       __s32   phc_index;
+       __u32   tx_types;
+       __u32   tx_reserved[3];
+       __u32   rx_filters;
+       __u32   rx_reserved[3];
+};
+
+/*
+ * %ETHTOOL_SFEATURES changes features present in features[].valid to the
+ * values of corresponding bits in features[].requested. Bits in .requested
+ * not set in .valid or not changeable are ignored.
+ *
+ * Returns %EINVAL when .valid contains undefined or never-changeable bits
+ * or size is not equal to required number of features words (32-bit blocks).
+ * Returns >= 0 if request was completed; bits set in the value mean:
+ *   %ETHTOOL_F_UNSUPPORTED - there were bits set in .valid that are not
+ *     changeable (not present in %ETHTOOL_GFEATURES' features[].available)
+ *     those bits were ignored.
+ *   %ETHTOOL_F_WISH - some or all changes requested were recorded but the
+ *      resulting state of bits masked by .valid is not equal to .requested.
+ *      Probably there are other device-specific constraints on some features
+ *      in the set. When %ETHTOOL_F_UNSUPPORTED is set, .valid is considered
+ *      here as though ignored bits were cleared.
+ *   %ETHTOOL_F_COMPAT - some or all changes requested were made by calling
+ *      compatibility functions. Requested offload state cannot be properly
+ *      managed by kernel.
+ *
+ * Meaning of bits in the masks are obtained by %ETHTOOL_GSSET_INFO (number of
+ * bits in the arrays - always multiple of 32) and %ETHTOOL_GSTRINGS commands
+ * for ETH_SS_FEATURES string set. First entry in the table corresponds to least
+ * significant bit in features[0] fields. Empty strings mark undefined features.
+ */
+enum ethtool_sfeatures_retval_bits {
+       ETHTOOL_F_UNSUPPORTED__BIT,
+       ETHTOOL_F_WISH__BIT,
+       ETHTOOL_F_COMPAT__BIT,
+};
+
+#define ETHTOOL_F_UNSUPPORTED   (1 << ETHTOOL_F_UNSUPPORTED__BIT)
+#define ETHTOOL_F_WISH          (1 << ETHTOOL_F_WISH__BIT)
+#define ETHTOOL_F_COMPAT        (1 << ETHTOOL_F_COMPAT__BIT)
+
+
+/* CMDs currently supported */
+#define ETHTOOL_GSET           0x00000001 /* Get settings. */
+#define ETHTOOL_SSET           0x00000002 /* Set settings. */
+#define ETHTOOL_GDRVINFO       0x00000003 /* Get driver info. */
+#define ETHTOOL_GREGS          0x00000004 /* Get NIC registers. */
+#define ETHTOOL_GWOL           0x00000005 /* Get wake-on-lan options. */
+#define ETHTOOL_SWOL           0x00000006 /* Set wake-on-lan options. */
+#define ETHTOOL_GMSGLVL                0x00000007 /* Get driver message level */
+#define ETHTOOL_SMSGLVL                0x00000008 /* Set driver msg level. */
+#define ETHTOOL_NWAY_RST       0x00000009 /* Restart autonegotiation. */
+/* Get link status for host, i.e. whether the interface *and* the
+ * physical port (if there is one) are up (ethtool_value). */
+#define ETHTOOL_GLINK          0x0000000a
+#define ETHTOOL_GEEPROM                0x0000000b /* Get EEPROM data */
+#define ETHTOOL_SEEPROM                0x0000000c /* Set EEPROM data. */
+#define ETHTOOL_GCOALESCE      0x0000000e /* Get coalesce config */
+#define ETHTOOL_SCOALESCE      0x0000000f /* Set coalesce config. */
+#define ETHTOOL_GRINGPARAM     0x00000010 /* Get ring parameters */
+#define ETHTOOL_SRINGPARAM     0x00000011 /* Set ring parameters. */
+#define ETHTOOL_GPAUSEPARAM    0x00000012 /* Get pause parameters */
+#define ETHTOOL_SPAUSEPARAM    0x00000013 /* Set pause parameters. */
+#define ETHTOOL_GRXCSUM                0x00000014 /* Get RX hw csum enable (ethtool_value) */
+#define ETHTOOL_SRXCSUM                0x00000015 /* Set RX hw csum enable (ethtool_value) */
+#define ETHTOOL_GTXCSUM                0x00000016 /* Get TX hw csum enable (ethtool_value) */
+#define ETHTOOL_STXCSUM                0x00000017 /* Set TX hw csum enable (ethtool_value) */
+#define ETHTOOL_GSG            0x00000018 /* Get scatter-gather enable
+                                           * (ethtool_value) */
+#define ETHTOOL_SSG            0x00000019 /* Set scatter-gather enable
+                                           * (ethtool_value). */
+#define ETHTOOL_TEST           0x0000001a /* execute NIC self-test. */
+#define ETHTOOL_GSTRINGS       0x0000001b /* get specified string set */
+#define ETHTOOL_PHYS_ID                0x0000001c /* identify the NIC */
+#define ETHTOOL_GSTATS         0x0000001d /* get NIC-specific statistics */
+#define ETHTOOL_GTSO           0x0000001e /* Get TSO enable (ethtool_value) */
+#define ETHTOOL_STSO           0x0000001f /* Set TSO enable (ethtool_value) */
+#define ETHTOOL_GPERMADDR      0x00000020 /* Get permanent hardware address */
+#define ETHTOOL_GUFO           0x00000021 /* Get UFO enable (ethtool_value) */
+#define ETHTOOL_SUFO           0x00000022 /* Set UFO enable (ethtool_value) */
+#define ETHTOOL_GGSO           0x00000023 /* Get GSO enable (ethtool_value) */
+#define ETHTOOL_SGSO           0x00000024 /* Set GSO enable (ethtool_value) */
+#define ETHTOOL_GFLAGS         0x00000025 /* Get flags bitmap(ethtool_value) */
+#define ETHTOOL_SFLAGS         0x00000026 /* Set flags bitmap(ethtool_value) */
+#define ETHTOOL_GPFLAGS                0x00000027 /* Get driver-private flags bitmap */
+#define ETHTOOL_SPFLAGS                0x00000028 /* Set driver-private flags bitmap */
+
+#define ETHTOOL_GRXFH          0x00000029 /* Get RX flow hash configuration */
+#define ETHTOOL_SRXFH          0x0000002a /* Set RX flow hash configuration */
+#define ETHTOOL_GGRO           0x0000002b /* Get GRO enable (ethtool_value) */
+#define ETHTOOL_SGRO           0x0000002c /* Set GRO enable (ethtool_value) */
+#define ETHTOOL_GRXRINGS       0x0000002d /* Get RX rings available for LB */
+#define ETHTOOL_GRXCLSRLCNT    0x0000002e /* Get RX class rule count */
+#define ETHTOOL_GRXCLSRULE     0x0000002f /* Get RX classification rule */
+#define ETHTOOL_GRXCLSRLALL    0x00000030 /* Get all RX classification rule */
+#define ETHTOOL_SRXCLSRLDEL    0x00000031 /* Delete RX classification rule */
+#define ETHTOOL_SRXCLSRLINS    0x00000032 /* Insert RX classification rule */
+#define ETHTOOL_FLASHDEV       0x00000033 /* Flash firmware to device */
+#define ETHTOOL_RESET          0x00000034 /* Reset hardware */
+#define ETHTOOL_SRXNTUPLE      0x00000035 /* Add an n-tuple filter to device */
+#define ETHTOOL_GRXNTUPLE      0x00000036 /* deprecated */
+#define ETHTOOL_GSSET_INFO     0x00000037 /* Get string set info */
+#define ETHTOOL_GRXFHINDIR     0x00000038 /* Get RX flow hash indir'n table */
+#define ETHTOOL_SRXFHINDIR     0x00000039 /* Set RX flow hash indir'n table */
+
+#define ETHTOOL_GFEATURES      0x0000003a /* Get device offload settings */
+#define ETHTOOL_SFEATURES      0x0000003b /* Change device offload settings */
+#define ETHTOOL_GCHANNELS      0x0000003c /* Get no of channels */
+#define ETHTOOL_SCHANNELS      0x0000003d /* Set no of channels */
+#define ETHTOOL_SET_DUMP       0x0000003e /* Set dump settings */
+#define ETHTOOL_GET_DUMP_FLAG  0x0000003f /* Get dump settings */
+#define ETHTOOL_GET_DUMP_DATA  0x00000040 /* Get dump data */
+#define ETHTOOL_GET_TS_INFO    0x00000041 /* Get time stamping and PHC info */
+#define ETHTOOL_GMODULEINFO    0x00000042 /* Get plug-in module information */
+#define ETHTOOL_GMODULEEEPROM  0x00000043 /* Get plug-in module eeprom */
+#define ETHTOOL_GEEE           0x00000044 /* Get EEE settings */
+#define ETHTOOL_SEEE           0x00000045 /* Set EEE settings */
+
+#define ETHTOOL_GRSSH          0x00000046 /* Get RX flow hash configuration */
+#define ETHTOOL_SRSSH          0x00000047 /* Set RX flow hash configuration */
+#define ETHTOOL_GTUNABLE       0x00000048 /* Get tunable configuration */
+#define ETHTOOL_STUNABLE       0x00000049 /* Set tunable configuration */
+
+/* compatibility with older code */
+#define SPARC_ETH_GSET         ETHTOOL_GSET
+#define SPARC_ETH_SSET         ETHTOOL_SSET
+
+#define SUPPORTED_10baseT_Half         (1 << 0)
+#define SUPPORTED_10baseT_Full         (1 << 1)
+#define SUPPORTED_100baseT_Half                (1 << 2)
+#define SUPPORTED_100baseT_Full                (1 << 3)
+#define SUPPORTED_1000baseT_Half       (1 << 4)
+#define SUPPORTED_1000baseT_Full       (1 << 5)
+#define SUPPORTED_Autoneg              (1 << 6)
+#define SUPPORTED_TP                   (1 << 7)
+#define SUPPORTED_AUI                  (1 << 8)
+#define SUPPORTED_MII                  (1 << 9)
+#define SUPPORTED_FIBRE                        (1 << 10)
+#define SUPPORTED_BNC                  (1 << 11)
+#define SUPPORTED_10000baseT_Full      (1 << 12)
+#define SUPPORTED_Pause                        (1 << 13)
+#define SUPPORTED_Asym_Pause           (1 << 14)
+#define SUPPORTED_2500baseX_Full       (1 << 15)
+#define SUPPORTED_Backplane            (1 << 16)
+#define SUPPORTED_1000baseKX_Full      (1 << 17)
+#define SUPPORTED_10000baseKX4_Full    (1 << 18)
+#define SUPPORTED_10000baseKR_Full     (1 << 19)
+#define SUPPORTED_10000baseR_FEC       (1 << 20)
+#define SUPPORTED_20000baseMLD2_Full   (1 << 21)
+#define SUPPORTED_20000baseKR2_Full    (1 << 22)
+#define SUPPORTED_40000baseKR4_Full    (1 << 23)
+#define SUPPORTED_40000baseCR4_Full    (1 << 24)
+#define SUPPORTED_40000baseSR4_Full    (1 << 25)
+#define SUPPORTED_40000baseLR4_Full    (1 << 26)
+#define SUPPORTED_56000baseKR4_Full    (1 << 27)
+#define SUPPORTED_56000baseCR4_Full    (1 << 28)
+#define SUPPORTED_56000baseSR4_Full    (1 << 29)
+#define SUPPORTED_56000baseLR4_Full    (1 << 30)
+
+#define ADVERTISED_10baseT_Half                (1 << 0)
+#define ADVERTISED_10baseT_Full                (1 << 1)
+#define ADVERTISED_100baseT_Half       (1 << 2)
+#define ADVERTISED_100baseT_Full       (1 << 3)
+#define ADVERTISED_1000baseT_Half      (1 << 4)
+#define ADVERTISED_1000baseT_Full      (1 << 5)
+#define ADVERTISED_Autoneg             (1 << 6)
+#define ADVERTISED_TP                  (1 << 7)
+#define ADVERTISED_AUI                 (1 << 8)
+#define ADVERTISED_MII                 (1 << 9)
+#define ADVERTISED_FIBRE               (1 << 10)
+#define ADVERTISED_BNC                 (1 << 11)
+#define ADVERTISED_10000baseT_Full     (1 << 12)
+#define ADVERTISED_Pause               (1 << 13)
+#define ADVERTISED_Asym_Pause          (1 << 14)
+#define ADVERTISED_2500baseX_Full      (1 << 15)
+#define ADVERTISED_Backplane           (1 << 16)
+#define ADVERTISED_1000baseKX_Full     (1 << 17)
+#define ADVERTISED_10000baseKX4_Full   (1 << 18)
+#define ADVERTISED_10000baseKR_Full    (1 << 19)
+#define ADVERTISED_10000baseR_FEC      (1 << 20)
+#define ADVERTISED_20000baseMLD2_Full  (1 << 21)
+#define ADVERTISED_20000baseKR2_Full   (1 << 22)
+#define ADVERTISED_40000baseKR4_Full   (1 << 23)
+#define ADVERTISED_40000baseCR4_Full   (1 << 24)
+#define ADVERTISED_40000baseSR4_Full   (1 << 25)
+#define ADVERTISED_40000baseLR4_Full   (1 << 26)
+#define ADVERTISED_56000baseKR4_Full   (1 << 27)
+#define ADVERTISED_56000baseCR4_Full   (1 << 28)
+#define ADVERTISED_56000baseSR4_Full   (1 << 29)
+#define ADVERTISED_56000baseLR4_Full   (1 << 30)
+
+/* The following are all involved in forcing a particular link
+ * mode for the device for setting things.  When getting the
+ * devices settings, these indicate the current mode and whether
+ * it was forced up into this mode or autonegotiated.
+ */
+
+/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|5|10|20|25|40|50|56|100]GbE. */
+#define SPEED_10               10
+#define SPEED_100              100
+#define SPEED_1000             1000
+#define SPEED_2500             2500
+#define SPEED_5000             5000
+#define SPEED_10000            10000
+#define SPEED_20000            20000
+#define SPEED_25000            25000
+#define SPEED_40000            40000
+#define SPEED_50000            50000
+#define SPEED_56000            56000
+#define SPEED_100000           100000
+
+#define SPEED_UNKNOWN          -1
+
+/* Duplex, half or full. */
+#define DUPLEX_HALF            0x00
+#define DUPLEX_FULL            0x01
+#define DUPLEX_UNKNOWN         0xff
+
+/* Which connector port. */
+#define PORT_TP                        0x00
+#define PORT_AUI               0x01
+#define PORT_MII               0x02
+#define PORT_FIBRE             0x03
+#define PORT_BNC               0x04
+#define PORT_DA                        0x05
+#define PORT_NONE              0xef
+#define PORT_OTHER             0xff
+
+/* Which transceiver to use. */
+#define XCVR_INTERNAL          0x00 /* PHY and MAC are in the same package */
+#define XCVR_EXTERNAL          0x01 /* PHY and MAC are in different packages */
+#define XCVR_DUMMY1            0x02
+#define XCVR_DUMMY2            0x03
+#define XCVR_DUMMY3            0x04
+
+/* Enable or disable autonegotiation. */
+#define AUTONEG_DISABLE                0x00
+#define AUTONEG_ENABLE         0x01
+
+/* MDI or MDI-X status/control - if MDI/MDI_X/AUTO is set then
+ * the driver is required to renegotiate link
+ */
+#define ETH_TP_MDI_INVALID     0x00 /* status: unknown; control: unsupported */
+#define ETH_TP_MDI             0x01 /* status: MDI;     control: force MDI */
+#define ETH_TP_MDI_X           0x02 /* status: MDI-X;   control: force MDI-X */
+#define ETH_TP_MDI_AUTO                0x03 /*                  control: auto-select */
+
+/* Wake-On-Lan options. */
+#define WAKE_PHY               (1 << 0)
+#define WAKE_UCAST             (1 << 1)
+#define WAKE_MCAST             (1 << 2)
+#define WAKE_BCAST             (1 << 3)
+#define WAKE_ARP               (1 << 4)
+#define WAKE_MAGIC             (1 << 5)
+#define WAKE_MAGICSECURE       (1 << 6) /* only meaningful if WAKE_MAGIC */
+
+/* L2-L4 network traffic flow types */
+#define        TCP_V4_FLOW     0x01    /* hash or spec (tcp_ip4_spec) */
+#define        UDP_V4_FLOW     0x02    /* hash or spec (udp_ip4_spec) */
+#define        SCTP_V4_FLOW    0x03    /* hash or spec (sctp_ip4_spec) */
+#define        AH_ESP_V4_FLOW  0x04    /* hash only */
+#define        TCP_V6_FLOW     0x05    /* hash only */
+#define        UDP_V6_FLOW     0x06    /* hash only */
+#define        SCTP_V6_FLOW    0x07    /* hash only */
+#define        AH_ESP_V6_FLOW  0x08    /* hash only */
+#define        AH_V4_FLOW      0x09    /* hash or spec (ah_ip4_spec) */
+#define        ESP_V4_FLOW     0x0a    /* hash or spec (esp_ip4_spec) */
+#define        AH_V6_FLOW      0x0b    /* hash only */
+#define        ESP_V6_FLOW     0x0c    /* hash only */
+#define        IP_USER_FLOW    0x0d    /* spec only (usr_ip4_spec) */
+#define        IPV4_FLOW       0x10    /* hash only */
+#define        IPV6_FLOW       0x11    /* hash only */
+#define        ETHER_FLOW      0x12    /* spec only (ether_spec) */
+/* Flag to enable additional fields in struct ethtool_rx_flow_spec */
+#define        FLOW_EXT        0x80000000
+#define        FLOW_MAC_EXT    0x40000000
+
+/* L3-L4 network traffic flow hash options */
+#define        RXH_L2DA        (1 << 1)
+#define        RXH_VLAN        (1 << 2)
+#define        RXH_L3_PROTO    (1 << 3)
+#define        RXH_IP_SRC      (1 << 4)
+#define        RXH_IP_DST      (1 << 5)
+#define        RXH_L4_B_0_1    (1 << 6) /* src port in case of TCP/UDP/SCTP */
+#define        RXH_L4_B_2_3    (1 << 7) /* dst port in case of TCP/UDP/SCTP */
+#define        RXH_DISCARD     (1 << 31)
+
+#define        RX_CLS_FLOW_DISC        0xffffffffffffffffULL
+
+/* Special RX classification rule insert location values */
+#define RX_CLS_LOC_SPECIAL     0x80000000      /* flag */
+#define RX_CLS_LOC_ANY         0xffffffff
+#define RX_CLS_LOC_FIRST       0xfffffffe
+#define RX_CLS_LOC_LAST                0xfffffffd
+
+/* EEPROM Standards for plug in modules */
+#define ETH_MODULE_SFF_8079            0x1
+#define ETH_MODULE_SFF_8079_LEN                256
+#define ETH_MODULE_SFF_8472            0x2
+#define ETH_MODULE_SFF_8472_LEN                512
+#define ETH_MODULE_SFF_8636            0x3
+#define ETH_MODULE_SFF_8636_LEN                256
+#define ETH_MODULE_SFF_8436            0x4
+#define ETH_MODULE_SFF_8436_LEN                256
+
+/* Reset flags */
+/* The reset() operation must clear the flags for the components which
+ * were actually reset.  On successful return, the flags indicate the
+ * components which were not reset, either because they do not exist
+ * in the hardware or because they cannot be reset independently.  The
+ * driver must never reset any components that were not requested.
+ */
+enum ethtool_reset_flags {
+       /* These flags represent components dedicated to the interface
+        * the command is addressed to.  Shift any flag left by
+        * ETH_RESET_SHARED_SHIFT to reset a shared component of the
+        * same type.
+        */
+       ETH_RESET_MGMT          = 1 << 0,       /* Management processor */
+       ETH_RESET_IRQ           = 1 << 1,       /* Interrupt requester */
+       ETH_RESET_DMA           = 1 << 2,       /* DMA engine */
+       ETH_RESET_FILTER        = 1 << 3,       /* Filtering/flow direction */
+       ETH_RESET_OFFLOAD       = 1 << 4,       /* Protocol offload */
+       ETH_RESET_MAC           = 1 << 5,       /* Media access controller */
+       ETH_RESET_PHY           = 1 << 6,       /* Transceiver/PHY */
+       ETH_RESET_RAM           = 1 << 7,       /* RAM shared between
+                                                * multiple components */
+
+       ETH_RESET_DEDICATED     = 0x0000ffff,   /* All components dedicated to
+                                                * this interface */
+       ETH_RESET_ALL           = 0xffffffff,   /* All components used by this
+                                                * interface, even if shared */
+};
+#define ETH_RESET_SHARED_SHIFT 16
+
+#endif /* _LINUX_ETHTOOL_H */
diff --git a/lib/libdss-include/linux/eventpoll.h b/lib/libdss-include/linux/eventpoll.h
new file mode 100644 (file)
index 0000000..8625342
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ *  include/linux/eventpoll.h ( Efficient event polling implementation )
+ *  Copyright (C) 2001,...,2006         Davide Libenzi
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#ifndef _LINUX_EVENTPOLL_H
+#define _LINUX_EVENTPOLL_H
+
+/* For O_CLOEXEC */
+#include <linux/fcntl.h>
+#include <linux/types.h>
+
+/* Flags for epoll_create1.  */
+#define EPOLL_CLOEXEC O_CLOEXEC
+
+/* Valid opcodes to issue to sys_epoll_ctl() */
+#define EPOLL_CTL_ADD 1
+#define EPOLL_CTL_DEL 2
+#define EPOLL_CTL_MOD 3
+
+/*
+ * Request the handling of system wakeup events so as to prevent system suspends
+ * from happening while those events are being processed.
+ *
+ * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be
+ * re-allowed until epoll_wait is called again after consuming the wakeup
+ * event(s).
+ *
+ * Requires CAP_BLOCK_SUSPEND
+ */
+#define EPOLLWAKEUP (1 << 29)
+
+/* Set the One Shot behaviour for the target file descriptor */
+#define EPOLLONESHOT (1 << 30)
+
+/* Set the Edge Triggered behaviour for the target file descriptor */
+#define EPOLLET (1 << 31)
+
+/* 
+ * On x86-64 make the 64bit structure have the same alignment as the
+ * 32bit structure. This makes 32bit emulation easier.
+ *
+ * UML/x86_64 needs the same packing as x86_64
+ */
+#ifdef __x86_64__
+#define EPOLL_PACKED __attribute__((packed))
+#else
+#define EPOLL_PACKED
+#endif
+
+struct epoll_event {
+       __u32 events;
+       __u64 data;
+} EPOLL_PACKED;
+
+#ifdef CONFIG_PM_SLEEP
+static __inline__ void ep_take_care_of_epollwakeup(struct epoll_event *epev)
+{
+       if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND))
+               epev->events &= ~EPOLLWAKEUP;
+}
+#else
+static __inline__ void ep_take_care_of_epollwakeup(struct epoll_event *epev)
+{
+       epev->events &= ~EPOLLWAKEUP;
+}
+#endif
+#endif /* _LINUX_EVENTPOLL_H */
diff --git a/lib/libdss-include/linux/fadvise.h b/lib/libdss-include/linux/fadvise.h
new file mode 100644 (file)
index 0000000..e8e7471
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef FADVISE_H_INCLUDED
+#define FADVISE_H_INCLUDED
+
+#define POSIX_FADV_NORMAL      0 /* No further special treatment.  */
+#define POSIX_FADV_RANDOM      1 /* Expect random page references.  */
+#define POSIX_FADV_SEQUENTIAL  2 /* Expect sequential page references.  */
+#define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
+
+/*
+ * The advise values for POSIX_FADV_DONTNEED and POSIX_ADV_NOREUSE
+ * for s390-64 differ from the values for the rest of the world.
+ */
+#if defined(__s390x__)
+#define POSIX_FADV_DONTNEED    6 /* Don't need these pages.  */
+#define POSIX_FADV_NOREUSE     7 /* Data will be accessed once.  */
+#else
+#define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
+#define POSIX_FADV_NOREUSE     5 /* Data will be accessed once.  */
+#endif
+
+#endif /* FADVISE_H_INCLUDED */
diff --git a/lib/libdss-include/linux/falloc.h b/lib/libdss-include/linux/falloc.h
new file mode 100644 (file)
index 0000000..dce68de
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _FALLOC_H_
+#define _FALLOC_H_
+
+#define FALLOC_FL_KEEP_SIZE    0x01 /* default is extend size */
+#define FALLOC_FL_PUNCH_HOLE   0x02 /* de-allocates range */
+#define FALLOC_FL_NO_HIDE_STALE        0x04 /* reserved codepoint */
+
+/*
+ * FALLOC_FL_COLLAPSE_RANGE is used to remove a range of a file
+ * without leaving a hole in the file. The contents of the file beyond
+ * the range being removed is appended to the start offset of the range
+ * being removed (i.e. the hole that was punched is "collapsed"),
+ * resulting in a file layout that looks like the range that was
+ * removed never existed. As such collapsing a range of a file changes
+ * the size of the file, reducing it by the same length of the range
+ * that has been removed by the operation.
+ *
+ * Different filesystems may implement different limitations on the
+ * granularity of the operation. Most will limit operations to
+ * filesystem block size boundaries, but this boundary may be larger or
+ * smaller depending on the filesystem and/or the configuration of the
+ * filesystem or file.
+ *
+ * Attempting to collapse a range that crosses the end of the file is
+ * considered an illegal operation - just use ftruncate(2) if you need
+ * to collapse a range that crosses EOF.
+ */
+#define FALLOC_FL_COLLAPSE_RANGE       0x08
+
+/*
+ * FALLOC_FL_ZERO_RANGE is used to convert a range of file to zeros preferably
+ * without issuing data IO. Blocks should be preallocated for the regions that
+ * span holes in the file, and the entire range is preferable converted to
+ * unwritten extents - even though file system may choose to zero out the
+ * extent or do whatever which will result in reading zeros from the range
+ * while the range remains allocated for the file.
+ *
+ * This can be also used to preallocate blocks past EOF in the same way as
+ * with fallocate. Flag FALLOC_FL_KEEP_SIZE should cause the inode
+ * size to remain the same.
+ */
+#define FALLOC_FL_ZERO_RANGE           0x10
+
+/*
+ * FALLOC_FL_INSERT_RANGE is use to insert space within the file size without
+ * overwriting any existing data. The contents of the file beyond offset are
+ * shifted towards right by len bytes to create a hole.  As such, this
+ * operation will increase the size of the file by len bytes.
+ *
+ * Different filesystems may implement different limitations on the granularity
+ * of the operation. Most will limit operations to filesystem block size
+ * boundaries, but this boundary may be larger or smaller depending on
+ * the filesystem and/or the configuration of the filesystem or file.
+ *
+ * Attempting to insert space using this flag at OR beyond the end of
+ * the file is considered an illegal operation - just use ftruncate(2) or
+ * fallocate(2) with mode 0 for such type of operations.
+ */
+#define FALLOC_FL_INSERT_RANGE         0x20
+
+#endif /* _FALLOC_H_ */
diff --git a/lib/libdss-include/linux/fanotify.h b/lib/libdss-include/linux/fanotify.h
new file mode 100644 (file)
index 0000000..f780e5a
--- /dev/null
@@ -0,0 +1,116 @@
+#ifndef _LINUX_FANOTIFY_H
+#define _LINUX_FANOTIFY_H
+
+#include <linux/types.h>
+
+/* the following events that user-space can register for */
+#define FAN_ACCESS             0x00000001      /* File was accessed */
+#define FAN_MODIFY             0x00000002      /* File was modified */
+#define FAN_CLOSE_WRITE                0x00000008      /* Writtable file closed */
+#define FAN_CLOSE_NOWRITE      0x00000010      /* Unwrittable file closed */
+#define FAN_OPEN               0x00000020      /* File was opened */
+
+#define FAN_Q_OVERFLOW         0x00004000      /* Event queued overflowed */
+
+#define FAN_OPEN_PERM          0x00010000      /* File open in perm check */
+#define FAN_ACCESS_PERM                0x00020000      /* File accessed in perm check */
+
+#define FAN_ONDIR              0x40000000      /* event occurred against dir */
+
+#define FAN_EVENT_ON_CHILD     0x08000000      /* interested in child events */
+
+/* helper events */
+#define FAN_CLOSE              (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */
+
+/* flags used for fanotify_init() */
+#define FAN_CLOEXEC            0x00000001
+#define FAN_NONBLOCK           0x00000002
+
+/* These are NOT bitwise flags.  Both bits are used togther.  */
+#define FAN_CLASS_NOTIF                0x00000000
+#define FAN_CLASS_CONTENT      0x00000004
+#define FAN_CLASS_PRE_CONTENT  0x00000008
+#define FAN_ALL_CLASS_BITS     (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | \
+                                FAN_CLASS_PRE_CONTENT)
+
+#define FAN_UNLIMITED_QUEUE    0x00000010
+#define FAN_UNLIMITED_MARKS    0x00000020
+
+#define FAN_ALL_INIT_FLAGS     (FAN_CLOEXEC | FAN_NONBLOCK | \
+                                FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\
+                                FAN_UNLIMITED_MARKS)
+
+/* flags used for fanotify_modify_mark() */
+#define FAN_MARK_ADD           0x00000001
+#define FAN_MARK_REMOVE                0x00000002
+#define FAN_MARK_DONT_FOLLOW   0x00000004
+#define FAN_MARK_ONLYDIR       0x00000008
+#define FAN_MARK_MOUNT         0x00000010
+#define FAN_MARK_IGNORED_MASK  0x00000020
+#define FAN_MARK_IGNORED_SURV_MODIFY   0x00000040
+#define FAN_MARK_FLUSH         0x00000080
+
+#define FAN_ALL_MARK_FLAGS     (FAN_MARK_ADD |\
+                                FAN_MARK_REMOVE |\
+                                FAN_MARK_DONT_FOLLOW |\
+                                FAN_MARK_ONLYDIR |\
+                                FAN_MARK_MOUNT |\
+                                FAN_MARK_IGNORED_MASK |\
+                                FAN_MARK_IGNORED_SURV_MODIFY |\
+                                FAN_MARK_FLUSH)
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define FAN_ALL_EVENTS (FAN_ACCESS |\
+                       FAN_MODIFY |\
+                       FAN_CLOSE |\
+                       FAN_OPEN)
+
+/*
+ * All events which require a permission response from userspace
+ */
+#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\
+                            FAN_ACCESS_PERM)
+
+#define FAN_ALL_OUTGOING_EVENTS        (FAN_ALL_EVENTS |\
+                                FAN_ALL_PERM_EVENTS |\
+                                FAN_Q_OVERFLOW)
+
+#define FANOTIFY_METADATA_VERSION      3
+
+struct fanotify_event_metadata {
+       __u32 event_len;
+       __u8 vers;
+       __u8 reserved;
+       __u16 metadata_len;
+       __aligned_u64 mask;
+       __s32 fd;
+       __s32 pid;
+};
+
+struct fanotify_response {
+       __s32 fd;
+       __u32 response;
+};
+
+/* Legit userspace responses to a _PERM event */
+#define FAN_ALLOW      0x01
+#define FAN_DENY       0x02
+/* No fd set in event */
+#define FAN_NOFD       -1
+
+/* Helper functions to deal with fanotify_event_metadata buffers */
+#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata))
+
+#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \
+                                  (struct fanotify_event_metadata*)(((char *)(meta)) + \
+                                  (meta)->event_len))
+
+#define FAN_EVENT_OK(meta, len)        ((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \
+                               (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
+                               (long)(meta)->event_len <= (long)(len))
+
+#endif /* _LINUX_FANOTIFY_H */
diff --git a/lib/libdss-include/linux/fb.h b/lib/libdss-include/linux/fb.h
new file mode 100644 (file)
index 0000000..1b3b239
--- /dev/null
@@ -0,0 +1,400 @@
+#ifndef _LINUX_FB_H
+#define _LINUX_FB_H
+
+#include <linux/types.h>
+#include <linux/i2c.h>
+
+/* Definitions of frame buffers                                                */
+
+#define FB_MAX                 32      /* sufficient for now */
+
+/* ioctls
+   0x46 is 'F'                                                         */
+#define FBIOGET_VSCREENINFO    0x4600
+#define FBIOPUT_VSCREENINFO    0x4601
+#define FBIOGET_FSCREENINFO    0x4602
+#define FBIOGETCMAP            0x4604
+#define FBIOPUTCMAP            0x4605
+#define FBIOPAN_DISPLAY                0x4606
+#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor)
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC 0x460C */
+/* #define FBIOPUT_MONITORSPEC 0x460D */
+/* #define FBIOSWITCH_MONIBIT  0x460E */
+#define FBIOGET_CON2FBMAP      0x460F
+#define FBIOPUT_CON2FBMAP      0x4610
+#define FBIOBLANK              0x4611          /* arg: 0 or vesa level + 1 */
+#define FBIOGET_VBLANK         _IOR('F', 0x12, struct fb_vblank)
+#define FBIO_ALLOC              0x4613
+#define FBIO_FREE               0x4614
+#define FBIOGET_GLYPH           0x4615
+#define FBIOGET_HWCINFO         0x4616
+#define FBIOPUT_MODEINFO        0x4617
+#define FBIOGET_DISPINFO        0x4618
+#define FBIO_WAITFORVSYNC      _IOW('F', 0x20, __u32)
+
+#define FB_TYPE_PACKED_PIXELS          0       /* Packed Pixels        */
+#define FB_TYPE_PLANES                 1       /* Non interleaved planes */
+#define FB_TYPE_INTERLEAVED_PLANES     2       /* Interleaved planes   */
+#define FB_TYPE_TEXT                   3       /* Text/attributes      */
+#define FB_TYPE_VGA_PLANES             4       /* EGA/VGA planes       */
+#define FB_TYPE_FOURCC                 5       /* Type identified by a V4L2 FOURCC */
+
+#define FB_AUX_TEXT_MDA                0       /* Monochrome text */
+#define FB_AUX_TEXT_CGA                1       /* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO    2       /* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16 3       /* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8  4       /* other MGAs:      text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_GROUP 8       /* 8-15: SVGA tileblit compatible modes */
+#define FB_AUX_TEXT_SVGA_MASK  7       /* lower three bits says step */
+#define FB_AUX_TEXT_SVGA_STEP2 8       /* SVGA text mode:  text, attr */
+#define FB_AUX_TEXT_SVGA_STEP4 9       /* SVGA text mode:  text, attr,  2 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP8 10      /* SVGA text mode:  text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP16        11      /* SVGA text mode:  text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_SVGA_LAST  15      /* reserved up to 15 */
+
+#define FB_AUX_VGA_PLANES_VGA4         0       /* 16 color planes (EGA/VGA) */
+#define FB_AUX_VGA_PLANES_CFB4         1       /* CFB4 in planes (VGA) */
+#define FB_AUX_VGA_PLANES_CFB8         2       /* CFB8 in planes (VGA) */
+
+#define FB_VISUAL_MONO01               0       /* Monochr. 1=Black 0=White */
+#define FB_VISUAL_MONO10               1       /* Monochr. 1=White 0=Black */
+#define FB_VISUAL_TRUECOLOR            2       /* True color   */
+#define FB_VISUAL_PSEUDOCOLOR          3       /* Pseudo color (like atari) */
+#define FB_VISUAL_DIRECTCOLOR          4       /* Direct color */
+#define FB_VISUAL_STATIC_PSEUDOCOLOR   5       /* Pseudo color readonly */
+#define FB_VISUAL_FOURCC               6       /* Visual identified by a V4L2 FOURCC */
+
+#define FB_ACCEL_NONE          0       /* no hardware accelerator      */
+#define FB_ACCEL_ATARIBLITT    1       /* Atari Blitter                */
+#define FB_ACCEL_AMIGABLITT    2       /* Amiga Blitter                */
+#define FB_ACCEL_S3_TRIO64     3       /* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR_77C32BLT  4       /* RetinaZ3 (NCR 77C32BLT)      */
+#define FB_ACCEL_S3_VIRGE      5       /* Cybervision64/3D (S3 ViRGE)  */
+#define FB_ACCEL_ATI_MACH64GX  6       /* ATI Mach 64GX family         */
+#define FB_ACCEL_DEC_TGA       7       /* DEC 21030 TGA                */
+#define FB_ACCEL_ATI_MACH64CT  8       /* ATI Mach 64CT family         */
+#define FB_ACCEL_ATI_MACH64VT  9       /* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT  10      /* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR   11      /* Sun Creator/Creator3D        */
+#define FB_ACCEL_SUN_CGSIX     12      /* Sun cg6                      */
+#define FB_ACCEL_SUN_LEO       13      /* Sun leo/zx                   */
+#define FB_ACCEL_IMS_TWINTURBO 14      /* IMS Twin Turbo               */
+#define FB_ACCEL_3DLABS_PERMEDIA2 15   /* 3Dlabs Permedia 2            */
+#define FB_ACCEL_MATROX_MGA2064W 16    /* Matrox MGA2064W (Millenium)  */
+#define FB_ACCEL_MATROX_MGA1064SG 17   /* Matrox MGA1064SG (Mystique)  */
+#define FB_ACCEL_MATROX_MGA2164W 18    /* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGA2164W_AGP 19        /* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGAG100        20      /* Matrox G100 (Productiva G100) */
+#define FB_ACCEL_MATROX_MGAG200        21      /* Matrox G200 (Myst, Mill, ...) */
+#define FB_ACCEL_SUN_CG14      22      /* Sun cgfourteen                */
+#define FB_ACCEL_SUN_BWTWO     23      /* Sun bwtwo                    */
+#define FB_ACCEL_SUN_CGTHREE   24      /* Sun cgthree                  */
+#define FB_ACCEL_SUN_TCX       25      /* Sun tcx                      */
+#define FB_ACCEL_MATROX_MGAG400        26      /* Matrox G400                  */
+#define FB_ACCEL_NV3           27      /* nVidia RIVA 128              */
+#define FB_ACCEL_NV4           28      /* nVidia RIVA TNT              */
+#define FB_ACCEL_NV5           29      /* nVidia RIVA TNT2             */
+#define FB_ACCEL_CT_6555x      30      /* C&T 6555x                    */
+#define FB_ACCEL_3DFX_BANSHEE  31      /* 3Dfx Banshee                 */
+#define FB_ACCEL_ATI_RAGE128   32      /* ATI Rage128 family           */
+#define FB_ACCEL_IGS_CYBER2000 33      /* CyberPro 2000                */
+#define FB_ACCEL_IGS_CYBER2010 34      /* CyberPro 2010                */
+#define FB_ACCEL_IGS_CYBER5000 35      /* CyberPro 5000                */
+#define FB_ACCEL_SIS_GLAMOUR    36     /* SiS 300/630/540              */
+#define FB_ACCEL_3DLABS_PERMEDIA3 37   /* 3Dlabs Permedia 3            */
+#define FB_ACCEL_ATI_RADEON    38      /* ATI Radeon family            */
+#define FB_ACCEL_I810           39      /* Intel 810/815                */
+#define FB_ACCEL_SIS_GLAMOUR_2  40     /* SiS 315, 650, 740            */
+#define FB_ACCEL_SIS_XABRE      41     /* SiS 330 ("Xabre")            */
+#define FB_ACCEL_I830           42      /* Intel 830M/845G/85x/865G     */
+#define FB_ACCEL_NV_10          43      /* nVidia Arch 10               */
+#define FB_ACCEL_NV_20          44      /* nVidia Arch 20               */
+#define FB_ACCEL_NV_30          45      /* nVidia Arch 30               */
+#define FB_ACCEL_NV_40          46      /* nVidia Arch 40               */
+#define FB_ACCEL_XGI_VOLARI_V  47      /* XGI Volari V3XT, V5, V8      */
+#define FB_ACCEL_XGI_VOLARI_Z  48      /* XGI Volari Z7                */
+#define FB_ACCEL_OMAP1610      49      /* TI OMAP16xx                  */
+#define FB_ACCEL_TRIDENT_TGUI  50      /* Trident TGUI                 */
+#define FB_ACCEL_TRIDENT_3DIMAGE 51    /* Trident 3DImage              */
+#define FB_ACCEL_TRIDENT_BLADE3D 52    /* Trident Blade3D              */
+#define FB_ACCEL_TRIDENT_BLADEXP 53    /* Trident BladeXP              */
+#define FB_ACCEL_CIRRUS_ALPINE   53    /* Cirrus Logic 543x/544x/5480  */
+#define FB_ACCEL_NEOMAGIC_NM2070 90    /* NeoMagic NM2070              */
+#define FB_ACCEL_NEOMAGIC_NM2090 91    /* NeoMagic NM2090              */
+#define FB_ACCEL_NEOMAGIC_NM2093 92    /* NeoMagic NM2093              */
+#define FB_ACCEL_NEOMAGIC_NM2097 93    /* NeoMagic NM2097              */
+#define FB_ACCEL_NEOMAGIC_NM2160 94    /* NeoMagic NM2160              */
+#define FB_ACCEL_NEOMAGIC_NM2200 95    /* NeoMagic NM2200              */
+#define FB_ACCEL_NEOMAGIC_NM2230 96    /* NeoMagic NM2230              */
+#define FB_ACCEL_NEOMAGIC_NM2360 97    /* NeoMagic NM2360              */
+#define FB_ACCEL_NEOMAGIC_NM2380 98    /* NeoMagic NM2380              */
+#define FB_ACCEL_PXA3XX                 99     /* PXA3xx                       */
+
+#define FB_ACCEL_SAVAGE4        0x80   /* S3 Savage4                   */
+#define FB_ACCEL_SAVAGE3D       0x81   /* S3 Savage3D                  */
+#define FB_ACCEL_SAVAGE3D_MV    0x82   /* S3 Savage3D-MV               */
+#define FB_ACCEL_SAVAGE2000     0x83   /* S3 Savage2000                */
+#define FB_ACCEL_SAVAGE_MX_MV   0x84   /* S3 Savage/MX-MV              */
+#define FB_ACCEL_SAVAGE_MX      0x85   /* S3 Savage/MX                 */
+#define FB_ACCEL_SAVAGE_IX_MV   0x86   /* S3 Savage/IX-MV              */
+#define FB_ACCEL_SAVAGE_IX      0x87   /* S3 Savage/IX                 */
+#define FB_ACCEL_PROSAVAGE_PM   0x88   /* S3 ProSavage PM133           */
+#define FB_ACCEL_PROSAVAGE_KM   0x89   /* S3 ProSavage KM133           */
+#define FB_ACCEL_S3TWISTER_P    0x8a   /* S3 Twister                   */
+#define FB_ACCEL_S3TWISTER_K    0x8b   /* S3 TwisterK                  */
+#define FB_ACCEL_SUPERSAVAGE    0x8c    /* S3 Supersavage               */
+#define FB_ACCEL_PROSAVAGE_DDR  0x8d   /* S3 ProSavage DDR             */
+#define FB_ACCEL_PROSAVAGE_DDRK 0x8e   /* S3 ProSavage DDR-K           */
+
+#define FB_ACCEL_PUV3_UNIGFX   0xa0    /* PKUnity-v3 Unigfx            */
+
+#define FB_CAP_FOURCC          1       /* Device supports FOURCC-based formats */
+
+struct fb_fix_screeninfo {
+       char id[16];                    /* identification string eg "TT Builtin" */
+       unsigned long smem_start;       /* Start of frame buffer mem */
+                                       /* (physical address) */
+       __u32 smem_len;                 /* Length of frame buffer mem */
+       __u32 type;                     /* see FB_TYPE_*                */
+       __u32 type_aux;                 /* Interleave for interleaved Planes */
+       __u32 visual;                   /* see FB_VISUAL_*              */ 
+       __u16 xpanstep;                 /* zero if no hardware panning  */
+       __u16 ypanstep;                 /* zero if no hardware panning  */
+       __u16 ywrapstep;                /* zero if no hardware ywrap    */
+       __u32 line_length;              /* length of a line in bytes    */
+       unsigned long mmio_start;       /* Start of Memory Mapped I/O   */
+                                       /* (physical address) */
+       __u32 mmio_len;                 /* Length of Memory Mapped I/O  */
+       __u32 accel;                    /* Indicate to driver which     */
+                                       /*  specific chip/card we have  */
+       __u16 capabilities;             /* see FB_CAP_*                 */
+       __u16 reserved[2];              /* Reserved for future compatibility */
+};
+
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified.
+ *
+ * For pseudocolor: offset and length should be the same for all color
+ * components. Offset specifies the position of the least significant bit
+ * of the pallette index in a pixel value. Length indicates the number
+ * of available palette entries (i.e. # of entries = 1 << length).
+ */
+struct fb_bitfield {
+       __u32 offset;                   /* beginning of bitfield        */
+       __u32 length;                   /* length of bitfield           */
+       __u32 msb_right;                /* != 0 : Most significant bit is */ 
+                                       /* right */ 
+};
+
+#define FB_NONSTD_HAM          1       /* Hold-And-Modify (HAM)        */
+#define FB_NONSTD_REV_PIX_IN_B 2       /* order of pixels in each byte is reversed */
+
+#define FB_ACTIVATE_NOW                0       /* set values immediately (or vbl)*/
+#define FB_ACTIVATE_NXTOPEN    1       /* activate on next open        */
+#define FB_ACTIVATE_TEST       2       /* don't set, round up impossible */
+#define FB_ACTIVATE_MASK       15
+                                       /* values                       */
+#define FB_ACTIVATE_VBL               16       /* activate values on next vbl  */
+#define FB_CHANGE_CMAP_VBL     32      /* change colormap on vbl       */
+#define FB_ACTIVATE_ALL               64       /* change all VCs on this fb    */
+#define FB_ACTIVATE_FORCE     128      /* force apply even when no change*/
+#define FB_ACTIVATE_INV_MODE  256       /* invalidate videomode */
+
+#define FB_ACCELF_TEXT         1       /* (OBSOLETE) see fb_info.flags and vc_mode */
+
+#define FB_SYNC_HOR_HIGH_ACT   1       /* horizontal sync high active  */
+#define FB_SYNC_VERT_HIGH_ACT  2       /* vertical sync high active    */
+#define FB_SYNC_EXT            4       /* external sync                */
+#define FB_SYNC_COMP_HIGH_ACT  8       /* composite sync high active   */
+#define FB_SYNC_BROADCAST      16      /* broadcast video timings      */
+                                       /* vtotal = 144d/288n/576i => PAL  */
+                                       /* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN       32      /* sync on green */
+
+#define FB_VMODE_NONINTERLACED  0      /* non interlaced */
+#define FB_VMODE_INTERLACED    1       /* interlaced   */
+#define FB_VMODE_DOUBLE                2       /* double scan */
+#define FB_VMODE_ODD_FLD_FIRST 4       /* interlaced: top line first */
+#define FB_VMODE_MASK          255
+
+#define FB_VMODE_YWRAP         256     /* ywrap instead of panning     */
+#define FB_VMODE_SMOOTH_XPAN   512     /* smooth xpan possible (internally used) */
+#define FB_VMODE_CONUPDATE     512     /* don't update x/yoffset       */
+
+/*
+ * Display rotation support
+ */
+#define FB_ROTATE_UR      0
+#define FB_ROTATE_CW      1
+#define FB_ROTATE_UD      2
+#define FB_ROTATE_CCW     3
+
+#define PICOS2KHZ(a) (1000000000UL/(a))
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
+struct fb_var_screeninfo {
+       __u32 xres;                     /* visible resolution           */
+       __u32 yres;
+       __u32 xres_virtual;             /* virtual resolution           */
+       __u32 yres_virtual;
+       __u32 xoffset;                  /* offset from virtual to visible */
+       __u32 yoffset;                  /* resolution                   */
+
+       __u32 bits_per_pixel;           /* guess what                   */
+       __u32 grayscale;                /* 0 = color, 1 = grayscale,    */
+                                       /* >1 = FOURCC                  */
+       struct fb_bitfield red;         /* bitfield in fb mem if true color, */
+       struct fb_bitfield green;       /* else only length is significant */
+       struct fb_bitfield blue;
+       struct fb_bitfield transp;      /* transparency                 */      
+
+       __u32 nonstd;                   /* != 0 Non standard pixel format */
+
+       __u32 activate;                 /* see FB_ACTIVATE_*            */
+
+       __u32 height;                   /* height of picture in mm    */
+       __u32 width;                    /* width of picture in mm     */
+
+       __u32 accel_flags;              /* (OBSOLETE) see fb_info.flags */
+
+       /* Timing: All values in pixclocks, except pixclock (of course) */
+       __u32 pixclock;                 /* pixel clock in ps (pico seconds) */
+       __u32 left_margin;              /* time from sync to picture    */
+       __u32 right_margin;             /* time from picture to sync    */
+       __u32 upper_margin;             /* time from sync to picture    */
+       __u32 lower_margin;
+       __u32 hsync_len;                /* length of horizontal sync    */
+       __u32 vsync_len;                /* length of vertical sync      */
+       __u32 sync;                     /* see FB_SYNC_*                */
+       __u32 vmode;                    /* see FB_VMODE_*               */
+       __u32 rotate;                   /* angle we rotate counter clockwise */
+       __u32 colorspace;               /* colorspace for FOURCC-based modes */
+       __u32 reserved[4];              /* Reserved for future compatibility */
+};
+
+struct fb_cmap {
+       __u32 start;                    /* First entry  */
+       __u32 len;                      /* Number of entries */
+       __u16 *red;                     /* Red values   */
+       __u16 *green;
+       __u16 *blue;
+       __u16 *transp;                  /* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+       __u32 console;
+       __u32 framebuffer;
+};
+
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING        0
+#define VESA_VSYNC_SUSPEND      1
+#define VESA_HSYNC_SUSPEND      2
+#define VESA_POWERDOWN          3
+
+
+enum {
+       /* screen: unblanked, hsync: on,  vsync: on */
+       FB_BLANK_UNBLANK       = VESA_NO_BLANKING,
+
+       /* screen: blanked,   hsync: on,  vsync: on */
+       FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1,
+
+       /* screen: blanked,   hsync: on,  vsync: off */
+       FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
+
+       /* screen: blanked,   hsync: off, vsync: on */
+       FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
+
+       /* screen: blanked,   hsync: off, vsync: off */
+       FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1
+};
+
+#define FB_VBLANK_VBLANKING    0x001   /* currently in a vertical blank */
+#define FB_VBLANK_HBLANKING    0x002   /* currently in a horizontal blank */
+#define FB_VBLANK_HAVE_VBLANK  0x004   /* vertical blanks can be detected */
+#define FB_VBLANK_HAVE_HBLANK  0x008   /* horizontal blanks can be detected */
+#define FB_VBLANK_HAVE_COUNT   0x010   /* global retrace counter is available */
+#define FB_VBLANK_HAVE_VCOUNT  0x020   /* the vcount field is valid */
+#define FB_VBLANK_HAVE_HCOUNT  0x040   /* the hcount field is valid */
+#define FB_VBLANK_VSYNCING     0x080   /* currently in a vsync */
+#define FB_VBLANK_HAVE_VSYNC   0x100   /* verical syncs can be detected */
+
+struct fb_vblank {
+       __u32 flags;                    /* FB_VBLANK flags */
+       __u32 count;                    /* counter of retraces since boot */
+       __u32 vcount;                   /* current scanline position */
+       __u32 hcount;                   /* current scandot position */
+       __u32 reserved[4];              /* reserved for future compatibility */
+};
+
+/* Internal HW accel */
+#define ROP_COPY 0
+#define ROP_XOR  1
+
+struct fb_copyarea {
+       __u32 dx;
+       __u32 dy;
+       __u32 width;
+       __u32 height;
+       __u32 sx;
+       __u32 sy;
+};
+
+struct fb_fillrect {
+       __u32 dx;       /* screen-relative */
+       __u32 dy;
+       __u32 width;
+       __u32 height;
+       __u32 color;
+       __u32 rop;
+};
+
+struct fb_image {
+       __u32 dx;               /* Where to place image */
+       __u32 dy;
+       __u32 width;            /* Size of image */
+       __u32 height;
+       __u32 fg_color;         /* Only used when a mono bitmap */
+       __u32 bg_color;
+       __u8  depth;            /* Depth of the image */
+       const char *data;       /* Pointer to image data */
+       struct fb_cmap cmap;    /* color map info */
+};
+
+/*
+ * hardware cursor control
+ */
+
+#define FB_CUR_SETIMAGE 0x01
+#define FB_CUR_SETPOS   0x02
+#define FB_CUR_SETHOT   0x04
+#define FB_CUR_SETCMAP  0x08
+#define FB_CUR_SETSHAPE 0x10
+#define FB_CUR_SETSIZE 0x20
+#define FB_CUR_SETALL   0xFF
+
+struct fbcurpos {
+       __u16 x, y;
+};
+
+struct fb_cursor {
+       __u16 set;              /* what to set */
+       __u16 enable;           /* cursor on/off */
+       __u16 rop;              /* bitop operation */
+       const char *mask;       /* cursor mask bits */
+       struct fbcurpos hot;    /* cursor hot spot */
+       struct fb_image image;  /* Cursor image */
+};
+
+#ifdef CONFIG_FB_BACKLIGHT
+/* Settings for the generic backlight code */
+#define FB_BACKLIGHT_LEVELS    128
+#define FB_BACKLIGHT_MAX       0xFF
+#endif
+
+
+#endif /* _LINUX_FB_H */
diff --git a/lib/libdss-include/linux/fcntl.h b/lib/libdss-include/linux/fcntl.h
new file mode 100644 (file)
index 0000000..01379c5
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef _LINUX_FCNTL_H
+#define _LINUX_FCNTL_H
+
+#include <asm/fcntl.h>
+
+#define F_SETLEASE     (F_LINUX_SPECIFIC_BASE + 0)
+#define F_GETLEASE     (F_LINUX_SPECIFIC_BASE + 1)
+
+/*
+ * Cancel a blocking posix lock; internal use only until we expose an
+ * asynchronous lock api to userspace:
+ */
+#define F_CANCELLK     (F_LINUX_SPECIFIC_BASE + 5)
+
+/* Create a file descriptor with FD_CLOEXEC set. */
+#define F_DUPFD_CLOEXEC        (F_LINUX_SPECIFIC_BASE + 6)
+
+/*
+ * Request nofications on a directory.
+ * See below for events that may be notified.
+ */
+#define F_NOTIFY       (F_LINUX_SPECIFIC_BASE+2)
+
+/*
+ * Set and get of pipe page size array
+ */
+#define F_SETPIPE_SZ   (F_LINUX_SPECIFIC_BASE + 7)
+#define F_GETPIPE_SZ   (F_LINUX_SPECIFIC_BASE + 8)
+
+/*
+ * Set/Get seals
+ */
+#define F_ADD_SEALS    (F_LINUX_SPECIFIC_BASE + 9)
+#define F_GET_SEALS    (F_LINUX_SPECIFIC_BASE + 10)
+
+/*
+ * Types of seals
+ */
+#define F_SEAL_SEAL    0x0001  /* prevent further seals from being set */
+#define F_SEAL_SHRINK  0x0002  /* prevent file from shrinking */
+#define F_SEAL_GROW    0x0004  /* prevent file from growing */
+#define F_SEAL_WRITE   0x0008  /* prevent writes */
+/* (1U << 31) is reserved for signed error codes */
+
+/*
+ * Types of directory notifications that may be requested.
+ */
+#define DN_ACCESS      0x00000001      /* File accessed */
+#define DN_MODIFY      0x00000002      /* File modified */
+#define DN_CREATE      0x00000004      /* File created */
+#define DN_DELETE      0x00000008      /* File removed */
+#define DN_RENAME      0x00000010      /* File renamed */
+#define DN_ATTRIB      0x00000020      /* File changed attibutes */
+#define DN_MULTISHOT   0x80000000      /* Don't remove notifier */
+
+#define AT_FDCWD               -100    /* Special value used to indicate
+                                           openat should use the current
+                                           working directory. */
+#define AT_SYMLINK_NOFOLLOW    0x100   /* Do not follow symbolic links.  */
+#define AT_REMOVEDIR           0x200   /* Remove directory instead of
+                                           unlinking file.  */
+#define AT_SYMLINK_FOLLOW      0x400   /* Follow symbolic links.  */
+#define AT_NO_AUTOMOUNT                0x800   /* Suppress terminal automount traversal */
+#define AT_EMPTY_PATH          0x1000  /* Allow empty relative pathname */
+
+
+#endif /* _LINUX_FCNTL_H */
diff --git a/lib/libdss-include/linux/fd.h b/lib/libdss-include/linux/fd.h
new file mode 100644 (file)
index 0000000..06975d7
--- /dev/null
@@ -0,0 +1,383 @@
+#ifndef _LINUX_FD_H
+#define _LINUX_FD_H
+
+#include <linux/ioctl.h>
+
+
+/* New file layout: Now the ioctl definitions immediately follow the
+ * definitions of the structures that they use */
+
+/*
+ * Geometry
+ */
+struct floppy_struct {
+       unsigned int    size,           /* nr of sectors total */
+                       sect,           /* sectors per track */
+                       head,           /* nr of heads */
+                       track,          /* nr of tracks */
+                       stretch;        /* bit 0 !=0 means double track steps */
+                                       /* bit 1 != 0 means swap sides */
+                                       /* bits 2..9 give the first sector */
+                                       /*  number (the LSB is flipped) */
+#define FD_STRETCH 1
+#define FD_SWAPSIDES 2
+#define FD_ZEROBASED 4
+#define FD_SECTBASEMASK 0x3FC
+#define FD_MKSECTBASE(s) (((s) ^ 1) << 2)
+#define FD_SECTBASE(floppy) ((((floppy)->stretch & FD_SECTBASEMASK) >> 2) ^ 1)
+
+       unsigned char   gap,            /* gap1 size */
+
+                       rate,           /* data rate. |= 0x40 for perpendicular */
+#define FD_2M 0x4
+#define FD_SIZECODEMASK 0x38
+#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8)
+#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \
+                            512 : 128 << FD_SIZECODE(floppy) )
+#define FD_PERP 0x40
+
+                       spec1,          /* stepping rate, head unload time */
+                       fmt_gap;        /* gap2 size */
+       const char      * name; /* used only for predefined formats */
+};
+
+
+/* commands needing write access have 0x40 set */
+/* commands needing super user access have 0x80 set */
+
+#define FDCLRPRM _IO(2, 0x41)
+/* clear user-defined parameters */
+
+#define FDSETPRM _IOW(2, 0x42, struct floppy_struct) 
+#define FDSETMEDIAPRM FDSETPRM
+/* set user-defined parameters for current media */
+
+#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct) 
+#define FDGETPRM _IOR(2, 0x04, struct floppy_struct)
+#define FDDEFMEDIAPRM FDDEFPRM
+#define FDGETMEDIAPRM FDGETPRM
+/* set/get disk parameters */
+
+
+#define        FDMSGON  _IO(2,0x45)
+#define        FDMSGOFF _IO(2,0x46)
+/* issue/don't issue kernel messages on media type change */
+
+
+/* 
+ * Formatting (obsolete)
+ */
+#define FD_FILL_BYTE 0xF6 /* format fill byte. */
+
+struct format_descr {
+       unsigned int device,head,track;
+};
+
+#define FDFMTBEG _IO(2,0x47)
+/* begin formatting a disk */
+#define        FDFMTTRK _IOW(2,0x48, struct format_descr)
+/* format the specified track */
+#define FDFMTEND _IO(2,0x49)
+/* end formatting a disk */
+
+
+/*
+ * Error thresholds
+ */
+struct floppy_max_errors {
+       unsigned int
+         abort,      /* number of errors to be reached before aborting */
+         read_track, /* maximal number of errors permitted to read an
+                      * entire track at once */
+         reset,      /* maximal number of errors before a reset is tried */
+         recal,      /* maximal number of errors before a recalibrate is
+                      * tried */
+
+         /*
+          * Threshold for reporting FDC errors to the console.
+          * Setting this to zero may flood your screen when using
+          * ultra cheap floppies ;-)
+          */
+         reporting;
+
+};
+
+#define FDSETEMSGTRESH _IO(2,0x4a)
+/* set fdc error reporting threshold */
+
+#define FDFLUSH  _IO(2,0x4b)
+/* flush buffers for media; either for verifying media, or for
+ * handling a media change without closing the file descriptor */
+
+#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors)
+#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors)
+/* set/get abortion and read_track threshold. See also floppy_drive_params
+ * structure */
+
+
+typedef char floppy_drive_name[16];
+#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name)
+/* get drive type: 5 1/4 or 3 1/2 */
+
+
+/*
+ * Drive parameters (user modifiable)
+ */
+struct floppy_drive_params {
+       signed char cmos;               /* CMOS type */
+       
+       /* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms 
+        * etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA).
+        */
+       unsigned long max_dtr;          /* Step rate, usec */
+       unsigned long hlt;              /* Head load/settle time, msec */
+       unsigned long hut;              /* Head unload time (remnant of 
+                                        * 8" drives) */
+       unsigned long srt;              /* Step rate, usec */
+
+       unsigned long spinup;           /* time needed for spinup (expressed
+                                        * in jiffies) */
+       unsigned long spindown;         /* timeout needed for spindown */
+       unsigned char spindown_offset;  /* decides in which position the disk
+                                        * will stop */
+       unsigned char select_delay;     /* delay to wait after select */
+       unsigned char rps;              /* rotations per second */
+       unsigned char tracks;           /* maximum number of tracks */
+       unsigned long timeout;          /* timeout for interrupt requests */
+       
+       unsigned char interleave_sect;  /* if there are more sectors, use 
+                                        * interleave */
+       
+       struct floppy_max_errors max_errors;
+       
+       char flags;                     /* various flags, including ftd_msg */
+/*
+ * Announce successful media type detection and media information loss after
+ * disk changes.
+ * Also used to enable/disable printing of overrun warnings.
+ */
+
+#define FTD_MSG 0x10
+#define FD_BROKEN_DCL 0x20
+#define FD_DEBUG 0x02
+#define FD_SILENT_DCL_CLEAR 0x4
+#define FD_INVERTED_DCL 0x80 /* must be 0x80, because of hardware 
+                               considerations */
+
+       char read_track;                /* use readtrack during probing? */
+
+/*
+ * Auto-detection. Each drive type has eight formats which are
+ * used in succession to try to read the disk. If the FDC cannot lock onto
+ * the disk, the next format is tried. This uses the variable 'probing'.
+ */
+       short autodetect[8];            /* autodetected formats */
+       
+       int checkfreq; /* how often should the drive be checked for disk 
+                       * changes */
+       int native_format; /* native format of this drive */
+};
+
+enum {
+       FD_NEED_TWADDLE_BIT,    /* more magic */
+       FD_VERIFY_BIT,          /* inquire for write protection */
+       FD_DISK_NEWCHANGE_BIT,  /* change detected, and no action undertaken yet
+                                * to clear media change status */
+       FD_UNUSED_BIT,
+       FD_DISK_CHANGED_BIT,    /* disk has been changed since last i/o */
+       FD_DISK_WRITABLE_BIT,   /* disk is writable */
+       FD_OPEN_SHOULD_FAIL_BIT
+};
+
+#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params)
+#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params)
+/* set/get drive parameters */
+
+
+/*
+ * Current drive state (not directly modifiable by user, readonly)
+ */
+struct floppy_drive_struct {
+       unsigned long flags;
+/* values for these flags */
+#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT)
+#define FD_VERIFY (1 << FD_VERIFY_BIT)
+#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT)
+#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT)
+#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT)
+
+       unsigned long spinup_date;
+       unsigned long select_date;
+       unsigned long first_read_date;
+       short probed_format;
+       short track; /* current track */
+       short maxblock; /* id of highest block read */
+       short maxtrack; /* id of highest half track read */
+       int generation; /* how many diskchanges? */
+
+/*
+ * (User-provided) media information is _not_ discarded after a media change
+ * if the corresponding keep_data flag is non-zero. Positive values are
+ * decremented after each probe.
+ */
+       int keep_data;
+       
+       /* Prevent "aliased" accesses. */
+       int fd_ref;
+       int fd_device;
+       unsigned long last_checked; /* when was the drive last checked for a disk 
+                          * change? */
+       
+       char *dmabuf;
+       int bufblocks;
+};
+
+#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct)
+#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct)
+/* get drive state: GET returns the cached state, POLL polls for new state */
+
+
+/*
+ * reset FDC
+ */
+enum reset_mode {
+       FD_RESET_IF_NEEDED,     /* reset only if the reset flags is set */
+       FD_RESET_IF_RAWCMD,     /* obsolete */
+       FD_RESET_ALWAYS         /* reset always */
+};
+#define FDRESET _IO(2, 0x54)
+
+
+/*
+ * FDC state
+ */
+struct floppy_fdc_state {      
+       int spec1;              /* spec1 value last used */
+       int spec2;              /* spec2 value last used */
+       int dtr;
+       unsigned char version;  /* FDC version code */
+       unsigned char dor;
+       unsigned long address;  /* io address */
+       unsigned int rawcmd:2;
+       unsigned int reset:1;
+       unsigned int need_configure:1;
+       unsigned int perp_mode:2;
+       unsigned int has_fifo:1;
+       unsigned int driver_version;    /* version code for floppy driver */
+#define FD_DRIVER_VERSION 0x100
+/* user programs using the floppy API should use floppy_fdc_state to
+ * get the version number of the floppy driver that they are running
+ * on. If this version number is bigger than the one compiled into the
+ * user program (the FD_DRIVER_VERSION define), it should be prepared
+ * to bigger structures
+ */
+
+       unsigned char track[4];
+       /* Position of the heads of the 4 units attached to this FDC,
+        * as stored on the FDC. In the future, the position as stored
+        * on the FDC might not agree with the actual physical
+        * position of these drive heads. By allowing such
+        * disagreement, it will be possible to reset the FDC without
+        * incurring the expensive cost of repositioning all heads.
+        * Right now, these positions are hard wired to 0. */
+
+};
+
+#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state)
+
+
+/*
+ * Asynchronous Write error tracking
+ */
+struct floppy_write_errors {
+       /* Write error logging.
+        *
+        * These fields can be cleared with the FDWERRORCLR ioctl.
+        * Only writes that were attempted but failed due to a physical media
+        * error are logged.  write(2) calls that fail and return an error code
+        * to the user process are not counted.
+        */
+
+       unsigned int write_errors;  /* number of physical write errors 
+                                    * encountered */
+       
+       /* position of first and last write errors */
+       unsigned long first_error_sector;
+       int           first_error_generation;
+       unsigned long last_error_sector;
+       int           last_error_generation;
+       
+       unsigned int badness; /* highest retry count for a read or write 
+                              * operation */
+};
+
+#define FDWERRORCLR  _IO(2, 0x56)
+/* clear write error and badness information */
+#define FDWERRORGET  _IOR(2, 0x17, struct floppy_write_errors)
+/* get write error and badness information */
+
+
+/*
+ * Raw commands
+ */
+/* new interface flag: now we can do them in batches */
+#define FDHAVEBATCHEDRAWCMD
+
+struct floppy_raw_cmd {
+       unsigned int flags;
+#define FD_RAW_READ 1
+#define FD_RAW_WRITE 2
+#define FD_RAW_NO_MOTOR 4
+#define FD_RAW_DISK_CHANGE 4 /* out: disk change flag was set */
+#define FD_RAW_INTR 8    /* wait for an interrupt */
+#define FD_RAW_SPIN 0x10 /* spin up the disk for this command */
+#define FD_RAW_NO_MOTOR_AFTER 0x20 /* switch the motor off after command 
+                                   * completion */
+#define FD_RAW_NEED_DISK 0x40  /* this command needs a disk to be present */
+#define FD_RAW_NEED_SEEK 0x80  /* this command uses an implied seek (soft) */
+
+/* more "in" flags */
+#define FD_RAW_MORE 0x100  /* more records follow */
+#define FD_RAW_STOP_IF_FAILURE 0x200 /* stop if we encounter a failure */
+#define FD_RAW_STOP_IF_SUCCESS 0x400 /* stop if command successful */
+#define FD_RAW_SOFTFAILURE 0x800 /* consider the return value for failure
+                                 * detection too */
+
+/* more "out" flags */
+#define FD_RAW_FAILURE 0x10000 /* command sent to fdc, fdc returned error */
+#define FD_RAW_HARDFAILURE 0x20000 /* fdc had to be reset, or timed out */
+
+       void *data;
+       char *kernel_data; /* location of data buffer in the kernel */
+       struct floppy_raw_cmd *next; /* used for chaining of raw cmd's 
+                                     * within the kernel */
+       long length; /* in: length of dma transfer. out: remaining bytes */
+       long phys_length; /* physical length, if different from dma length */
+       int buffer_length; /* length of allocated buffer */
+
+       unsigned char rate;
+       unsigned char cmd_count;
+       unsigned char cmd[16];
+       unsigned char reply_count;
+       unsigned char reply[16];
+       int track;
+       int resultcode;
+
+       int reserved1;
+       int reserved2;
+};
+
+#define FDRAWCMD _IO(2, 0x58)
+/* send a raw command to the fdc. Structure size not included, because of
+ * batches */
+
+#define FDTWADDLE _IO(2, 0x59)
+/* flicker motor-on bit before reading a sector. Experimental */
+
+
+#define FDEJECT _IO(2, 0x5a)
+/* eject the disk */
+
+
+
+#endif /* _LINUX_FD_H */
diff --git a/lib/libdss-include/linux/fdreg.h b/lib/libdss-include/linux/fdreg.h
new file mode 100644 (file)
index 0000000..61ce641
--- /dev/null
@@ -0,0 +1,137 @@
+#ifndef _LINUX_FDREG_H
+#define _LINUX_FDREG_H
+/*
+ * This file contains some defines for the floppy disk controller.
+ * Various sources. Mostly "IBM Microcomputers: A Programmers
+ * Handbook", Sanches and Canton.
+ */
+
+#ifdef FDPATCHES
+#define FD_IOPORT fdc_state[fdc].address
+#else
+/* It would be a lot saner just to force fdc_state[fdc].address to always
+   be set ! FIXME */
+#define FD_IOPORT 0x3f0
+#endif
+
+/* Fd controller regs. S&C, about page 340 */
+#define FD_STATUS      (4 + FD_IOPORT )
+#define FD_DATA                (5 + FD_IOPORT )
+
+/* Digital Output Register */
+#define FD_DOR         (2 + FD_IOPORT )
+
+/* Digital Input Register (read) */
+#define FD_DIR         (7 + FD_IOPORT )
+
+/* Diskette Control Register (write)*/
+#define FD_DCR         (7 + FD_IOPORT )
+
+/* Bits of main status register */
+#define STATUS_BUSYMASK        0x0F            /* drive busy mask */
+#define STATUS_BUSY    0x10            /* FDC busy */
+#define STATUS_DMA     0x20            /* 0- DMA mode */
+#define STATUS_DIR     0x40            /* 0- cpu->fdc */
+#define STATUS_READY   0x80            /* Data reg ready */
+
+/* Bits of FD_ST0 */
+#define ST0_DS         0x03            /* drive select mask */
+#define ST0_HA         0x04            /* Head (Address) */
+#define ST0_NR         0x08            /* Not Ready */
+#define ST0_ECE                0x10            /* Equipment check error */
+#define ST0_SE         0x20            /* Seek end */
+#define ST0_INTR       0xC0            /* Interrupt code mask */
+
+/* Bits of FD_ST1 */
+#define ST1_MAM                0x01            /* Missing Address Mark */
+#define ST1_WP         0x02            /* Write Protect */
+#define ST1_ND         0x04            /* No Data - unreadable */
+#define ST1_OR         0x10            /* OverRun */
+#define ST1_CRC                0x20            /* CRC error in data or addr */
+#define ST1_EOC                0x80            /* End Of Cylinder */
+
+/* Bits of FD_ST2 */
+#define ST2_MAM                0x01            /* Missing Address Mark (again) */
+#define ST2_BC         0x02            /* Bad Cylinder */
+#define ST2_SNS                0x04            /* Scan Not Satisfied */
+#define ST2_SEH                0x08            /* Scan Equal Hit */
+#define ST2_WC         0x10            /* Wrong Cylinder */
+#define ST2_CRC                0x20            /* CRC error in data field */
+#define ST2_CM         0x40            /* Control Mark = deleted */
+
+/* Bits of FD_ST3 */
+#define ST3_HA         0x04            /* Head (Address) */
+#define ST3_DS         0x08            /* drive is double-sided */
+#define ST3_TZ         0x10            /* Track Zero signal (1=track 0) */
+#define ST3_RY         0x20            /* drive is ready */
+#define ST3_WP         0x40            /* Write Protect */
+#define ST3_FT         0x80            /* Drive Fault */
+
+/* Values for FD_COMMAND */
+#define FD_RECALIBRATE         0x07    /* move to track 0 */
+#define FD_SEEK                        0x0F    /* seek track */
+#define FD_READ                        0xE6    /* read with MT, MFM, SKip deleted */
+#define FD_WRITE               0xC5    /* write with MT, MFM */
+#define FD_SENSEI              0x08    /* Sense Interrupt Status */
+#define FD_SPECIFY             0x03    /* specify HUT etc */
+#define FD_FORMAT              0x4D    /* format one track */
+#define FD_VERSION             0x10    /* get version code */
+#define FD_CONFIGURE           0x13    /* configure FIFO operation */
+#define FD_PERPENDICULAR       0x12    /* perpendicular r/w mode */
+#define FD_GETSTATUS           0x04    /* read ST3 */
+#define FD_DUMPREGS            0x0E    /* dump the contents of the fdc regs */
+#define FD_READID              0xEA    /* prints the header of a sector */
+#define FD_UNLOCK              0x14    /* Fifo config unlock */
+#define FD_LOCK                        0x94    /* Fifo config lock */
+#define FD_RSEEK_OUT           0x8f    /* seek out (i.e. to lower tracks) */
+#define FD_RSEEK_IN            0xcf    /* seek in (i.e. to higher tracks) */
+
+/* the following commands are new in the 82078. They are not used in the
+ * floppy driver, except the first three. These commands may be useful for apps
+ * which use the FDRAWCMD interface. For doc, get the 82078 spec sheets at
+ * http://www.intel.com/design/archives/periphrl/docs/29046803.htm */
+
+#define FD_PARTID              0x18    /* part id ("extended" version cmd) */
+#define FD_SAVE                        0x2e    /* save fdc regs for later restore */
+#define FD_DRIVESPEC           0x8e    /* drive specification: Access to the
+                                        * 2 Mbps data transfer rate for tape
+                                        * drives */
+
+#define FD_RESTORE             0x4e    /* later restore */
+#define FD_POWERDOWN           0x27    /* configure FDC's powersave features */
+#define FD_FORMAT_N_WRITE      0xef    /* format and write in one go. */
+#define FD_OPTION              0x33    /* ISO format (which is a clean way to
+                                        * pack more sectors on a track) */
+
+/* DMA commands */
+#define DMA_READ       0x46
+#define DMA_WRITE      0x4A
+
+/* FDC version return types */
+#define FDC_NONE       0x00
+#define FDC_UNKNOWN    0x10    /* DO NOT USE THIS TYPE EXCEPT IF IDENTIFICATION
+                                  FAILS EARLY */
+#define FDC_8272A      0x20    /* Intel 8272a, NEC 765 */
+#define FDC_765ED      0x30    /* Non-Intel 1MB-compatible FDC, can't detect */
+#define FDC_82072      0x40    /* Intel 82072; 8272a + FIFO + DUMPREGS */
+#define FDC_82072A     0x45    /* 82072A (on Sparcs) */
+#define FDC_82077_ORIG 0x51    /* Original version of 82077AA, sans LOCK */
+#define FDC_82077      0x52    /* 82077AA-1 */
+#define FDC_82078_UNKN 0x5f    /* Unknown 82078 variant */
+#define FDC_82078      0x60    /* 44pin 82078 or 64pin 82078SL */
+#define FDC_82078_1    0x61    /* 82078-1 (2Mbps fdc) */
+#define FDC_S82078B    0x62    /* S82078B (first seen on Adaptec AVA-2825 VLB
+                                * SCSI/EIDE/Floppy controller) */
+#define FDC_87306      0x63    /* National Semiconductor PC 87306 */
+
+/*
+ * Beware: the fdc type list is roughly sorted by increasing features.
+ * Presence of features is tested by comparing the FDC version id with the
+ * "oldest" version that has the needed feature.
+ * If during FDC detection, an obscure test fails late in the sequence, don't
+ * assign FDC_UNKNOWN. Else the FDC will be treated as a dumb 8272a, or worse.
+ * This is especially true if the tests are unneeded.
+ */
+
+#define FD_RESET_DELAY 20
+#endif
diff --git a/lib/libdss-include/linux/fib_rules.h b/lib/libdss-include/linux/fib_rules.h
new file mode 100644 (file)
index 0000000..96161b8
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef __LINUX_FIB_RULES_H
+#define __LINUX_FIB_RULES_H
+
+#include <linux/types.h>
+#include <linux/rtnetlink.h>
+
+/* rule is permanent, and cannot be deleted */
+#define FIB_RULE_PERMANENT     0x00000001
+#define FIB_RULE_INVERT                0x00000002
+#define FIB_RULE_UNRESOLVED    0x00000004
+#define FIB_RULE_IIF_DETACHED  0x00000008
+#define FIB_RULE_DEV_DETACHED  FIB_RULE_IIF_DETACHED
+#define FIB_RULE_OIF_DETACHED  0x00000010
+
+/* try to find source address in routing lookups */
+#define FIB_RULE_FIND_SADDR    0x00010000
+
+struct fib_rule_hdr {
+       __u8            family;
+       __u8            dst_len;
+       __u8            src_len;
+       __u8            tos;
+
+       __u8            table;
+       __u8            res1;   /* reserved */
+       __u8            res2;   /* reserved */
+       __u8            action;
+
+       __u32           flags;
+};
+
+enum {
+       FRA_UNSPEC,
+       FRA_DST,        /* destination address */
+       FRA_SRC,        /* source address */
+       FRA_IIFNAME,    /* interface name */
+#define FRA_IFNAME     FRA_IIFNAME
+       FRA_GOTO,       /* target to jump to (FR_ACT_GOTO) */
+       FRA_UNUSED2,
+       FRA_PRIORITY,   /* priority/preference */
+       FRA_UNUSED3,
+       FRA_UNUSED4,
+       FRA_UNUSED5,
+       FRA_FWMARK,     /* mark */
+       FRA_FLOW,       /* flow/class id */
+       FRA_TUN_ID,
+       FRA_SUPPRESS_IFGROUP,
+       FRA_SUPPRESS_PREFIXLEN,
+       FRA_TABLE,      /* Extended table id */
+       FRA_FWMASK,     /* mask for netfilter mark */
+       FRA_OIFNAME,
+       __FRA_MAX
+};
+
+#define FRA_MAX (__FRA_MAX - 1)
+
+enum {
+       FR_ACT_UNSPEC,
+       FR_ACT_TO_TBL,          /* Pass to fixed table */
+       FR_ACT_GOTO,            /* Jump to another rule */
+       FR_ACT_NOP,             /* No operation */
+       FR_ACT_RES3,
+       FR_ACT_RES4,
+       FR_ACT_BLACKHOLE,       /* Drop without notification */
+       FR_ACT_UNREACHABLE,     /* Drop with ENETUNREACH */
+       FR_ACT_PROHIBIT,        /* Drop with EACCES */
+       __FR_ACT_MAX,
+};
+
+#define FR_ACT_MAX (__FR_ACT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/fiemap.h b/lib/libdss-include/linux/fiemap.h
new file mode 100644 (file)
index 0000000..0c51d61
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * FS_IOC_FIEMAP ioctl infrastructure.
+ *
+ * Some portions copyright (C) 2007 Cluster File Systems, Inc
+ *
+ * Authors: Mark Fasheh <mfasheh@suse.com>
+ *          Kalpak Shah <kalpak.shah@sun.com>
+ *          Andreas Dilger <adilger@sun.com>
+ */
+
+#ifndef _LINUX_FIEMAP_H
+#define _LINUX_FIEMAP_H
+
+#include <linux/types.h>
+
+struct fiemap_extent {
+       __u64 fe_logical;  /* logical offset in bytes for the start of
+                           * the extent from the beginning of the file */
+       __u64 fe_physical; /* physical offset in bytes for the start
+                           * of the extent from the beginning of the disk */
+       __u64 fe_length;   /* length in bytes for this extent */
+       __u64 fe_reserved64[2];
+       __u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+       __u32 fe_reserved[3];
+};
+
+struct fiemap {
+       __u64 fm_start;         /* logical offset (inclusive) at
+                                * which to start mapping (in) */
+       __u64 fm_length;        /* logical length of mapping which
+                                * userspace wants (in) */
+       __u32 fm_flags;         /* FIEMAP_FLAG_* flags for request (in/out) */
+       __u32 fm_mapped_extents;/* number of extents that were mapped (out) */
+       __u32 fm_extent_count;  /* size of fm_extents array (in) */
+       __u32 fm_reserved;
+       struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+};
+
+#define FIEMAP_MAX_OFFSET      (~0ULL)
+
+#define FIEMAP_FLAG_SYNC       0x00000001 /* sync file data before map */
+#define FIEMAP_FLAG_XATTR      0x00000002 /* map extended attribute tree */
+#define FIEMAP_FLAG_CACHE      0x00000004 /* request caching of the extents */
+
+#define FIEMAP_FLAGS_COMPAT    (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
+
+#define FIEMAP_EXTENT_LAST             0x00000001 /* Last extent in file. */
+#define FIEMAP_EXTENT_UNKNOWN          0x00000002 /* Data location unknown. */
+#define FIEMAP_EXTENT_DELALLOC         0x00000004 /* Location still pending.
+                                                   * Sets EXTENT_UNKNOWN. */
+#define FIEMAP_EXTENT_ENCODED          0x00000008 /* Data can not be read
+                                                   * while fs is unmounted */
+#define FIEMAP_EXTENT_DATA_ENCRYPTED   0x00000080 /* Data is encrypted by fs.
+                                                   * Sets EXTENT_NO_BYPASS. */
+#define FIEMAP_EXTENT_NOT_ALIGNED      0x00000100 /* Extent offsets may not be
+                                                   * block aligned. */
+#define FIEMAP_EXTENT_DATA_INLINE      0x00000200 /* Data mixed with metadata.
+                                                   * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_DATA_TAIL                0x00000400 /* Multiple files in block.
+                                                   * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_UNWRITTEN                0x00000800 /* Space allocated, but
+                                                   * no data (i.e. zero). */
+#define FIEMAP_EXTENT_MERGED           0x00001000 /* File does not natively
+                                                   * support extents. Result
+                                                   * merged for efficiency. */
+#define FIEMAP_EXTENT_SHARED           0x00002000 /* Space shared with other
+                                                   * files. */
+
+#endif /* _LINUX_FIEMAP_H */
diff --git a/lib/libdss-include/linux/filter.h b/lib/libdss-include/linux/filter.h
new file mode 100644 (file)
index 0000000..e4f2f74
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Linux Socket Filter Data Structures
+ */
+
+#ifndef __LINUX_FILTER_H__
+#define __LINUX_FILTER_H__
+
+
+#include <linux/types.h>
+#include <linux/bpf_common.h>
+
+/*
+ * Current version of the filter code architecture.
+ */
+#define BPF_MAJOR_VERSION 1
+#define BPF_MINOR_VERSION 1
+
+/*
+ *     Try and keep these values and structures similar to BSD, especially
+ *     the BPF code definitions which need to match so you can share filters
+ */
+struct sock_filter {   /* Filter block */
+       __u16   code;   /* Actual filter code */
+       __u8    jt;     /* Jump true */
+       __u8    jf;     /* Jump false */
+       __u32   k;      /* Generic multiuse field */
+};
+
+struct sock_fprog {    /* Required for SO_ATTACH_FILTER. */
+       unsigned short          len;    /* Number of filter blocks */
+       struct sock_filter *filter;
+};
+
+/* ret - BPF_K and BPF_X also apply */
+#define BPF_RVAL(code)  ((code) & 0x18)
+#define         BPF_A           0x10
+
+/* misc */
+#define BPF_MISCOP(code) ((code) & 0xf8)
+#define         BPF_TAX         0x00
+#define         BPF_TXA         0x80
+
+/*
+ * Macros for filter block array initializers.
+ */
+#ifndef BPF_STMT
+#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }
+#endif
+#ifndef BPF_JUMP
+#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }
+#endif
+
+/*
+ * Number of scratch memory words for: BPF_ST and BPF_STX
+ */
+#define BPF_MEMWORDS 16
+
+/* RATIONALE. Negative offsets are invalid in BPF.
+   We use them to reference ancillary data.
+   Unlike introduction new instructions, it does not break
+   existing compilers/optimizers.
+ */
+#define SKF_AD_OFF    (-0x1000)
+#define SKF_AD_PROTOCOL 0
+#define SKF_AD_PKTTYPE         4
+#define SKF_AD_IFINDEX         8
+#define SKF_AD_NLATTR  12
+#define SKF_AD_NLATTR_NEST     16
+#define SKF_AD_MARK    20
+#define SKF_AD_QUEUE   24
+#define SKF_AD_HATYPE  28
+#define SKF_AD_RXHASH  32
+#define SKF_AD_CPU     36
+#define SKF_AD_ALU_XOR_X       40
+#define SKF_AD_VLAN_TAG        44
+#define SKF_AD_VLAN_TAG_PRESENT 48
+#define SKF_AD_PAY_OFFSET      52
+#define SKF_AD_RANDOM  56
+#define SKF_AD_VLAN_TPID       60
+#define SKF_AD_MAX     64
+
+#define SKF_NET_OFF    (-0x100000)
+#define SKF_LL_OFF     (-0x200000)
+
+#define BPF_NET_OFF    SKF_NET_OFF
+#define BPF_LL_OFF     SKF_LL_OFF
+
+#endif /* __LINUX_FILTER_H__ */
diff --git a/lib/libdss-include/linux/firewire-cdev.h b/lib/libdss-include/linux/firewire-cdev.h
new file mode 100644 (file)
index 0000000..1db453e
--- /dev/null
@@ -0,0 +1,1039 @@
+/*
+ * Char device interface.
+ *
+ * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _LINUX_FIREWIRE_CDEV_H
+#define _LINUX_FIREWIRE_CDEV_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/firewire-constants.h>
+
+/* available since kernel version 2.6.22 */
+#define FW_CDEV_EVENT_BUS_RESET                                0x00
+#define FW_CDEV_EVENT_RESPONSE                         0x01
+#define FW_CDEV_EVENT_REQUEST                          0x02
+#define FW_CDEV_EVENT_ISO_INTERRUPT                    0x03
+
+/* available since kernel version 2.6.30 */
+#define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED           0x04
+#define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED         0x05
+
+/* available since kernel version 2.6.36 */
+#define FW_CDEV_EVENT_REQUEST2                         0x06
+#define FW_CDEV_EVENT_PHY_PACKET_SENT                  0x07
+#define FW_CDEV_EVENT_PHY_PACKET_RECEIVED              0x08
+#define FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL       0x09
+
+/**
+ * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types
+ * @closure:   For arbitrary use by userspace
+ * @type:      Discriminates the fw_cdev_event_ types
+ *
+ * This struct may be used to access generic members of all fw_cdev_event_
+ * types regardless of the specific type.
+ *
+ * Data passed in the @closure field for a request will be returned in the
+ * corresponding event.  It is big enough to hold a pointer on all platforms.
+ * The ioctl used to set @closure depends on the @type of event.
+ */
+struct fw_cdev_event_common {
+       __u64 closure;
+       __u32 type;
+};
+
+/**
+ * struct fw_cdev_event_bus_reset - Sent when a bus reset occurred
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_GET_INFO ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_BUS_RESET
+ * @node_id:       New node ID of this node
+ * @local_node_id: Node ID of the local node, i.e. of the controller
+ * @bm_node_id:    Node ID of the bus manager
+ * @irm_node_id:   Node ID of the iso resource manager
+ * @root_node_id:  Node ID of the root node
+ * @generation:    New bus generation
+ *
+ * This event is sent when the bus the device belongs to goes through a bus
+ * reset.  It provides information about the new bus configuration, such as
+ * new node ID for this device, new root ID, and others.
+ *
+ * If @bm_node_id is 0xffff right after bus reset it can be reread by an
+ * %FW_CDEV_IOC_GET_INFO ioctl after bus manager selection was finished.
+ * Kernels with ABI version < 4 do not set @bm_node_id.
+ */
+struct fw_cdev_event_bus_reset {
+       __u64 closure;
+       __u32 type;
+       __u32 node_id;
+       __u32 local_node_id;
+       __u32 bm_node_id;
+       __u32 irm_node_id;
+       __u32 root_node_id;
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_event_response - Sent when a response packet was received
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_REQUEST
+ *             or %FW_CDEV_IOC_SEND_BROADCAST_REQUEST
+ *             or %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_RESPONSE
+ * @rcode:     Response code returned by the remote node
+ * @length:    Data length, i.e. the response's payload size in bytes
+ * @data:      Payload data, if any
+ *
+ * This event is sent when the stack receives a response to an outgoing request
+ * sent by %FW_CDEV_IOC_SEND_REQUEST ioctl.  The payload data for responses
+ * carrying data (read and lock responses) follows immediately and can be
+ * accessed through the @data field.
+ *
+ * The event is also generated after conclusions of transactions that do not
+ * involve response packets.  This includes unified write transactions,
+ * broadcast write transactions, and transmission of asynchronous stream
+ * packets.  @rcode indicates success or failure of such transmissions.
+ */
+struct fw_cdev_event_response {
+       __u64 closure;
+       __u32 type;
+       __u32 rcode;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_request - Old version of &fw_cdev_event_request2
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST
+ *
+ * This event is sent instead of &fw_cdev_event_request2 if the kernel or
+ * the client implements ABI version <= 3.  &fw_cdev_event_request lacks
+ * essential information; use &fw_cdev_event_request2 instead.
+ */
+struct fw_cdev_event_request {
+       __u64 closure;
+       __u32 type;
+       __u32 tcode;
+       __u64 offset;
+       __u32 handle;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_request2 - Sent on incoming request to an address region
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_ALLOCATE ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST2
+ * @tcode:     Transaction code of the incoming request
+ * @offset:    The offset into the 48-bit per-node address space
+ * @source_node_id: Sender node ID
+ * @destination_node_id: Destination node ID
+ * @card:      The index of the card from which the request came
+ * @generation:        Bus generation in which the request is valid
+ * @handle:    Reference to the kernel-side pending request
+ * @length:    Data length, i.e. the request's payload size in bytes
+ * @data:      Incoming data, if any
+ *
+ * This event is sent when the stack receives an incoming request to an address
+ * region registered using the %FW_CDEV_IOC_ALLOCATE ioctl.  The request is
+ * guaranteed to be completely contained in the specified region.  Userspace is
+ * responsible for sending the response by %FW_CDEV_IOC_SEND_RESPONSE ioctl,
+ * using the same @handle.
+ *
+ * The payload data for requests carrying data (write and lock requests)
+ * follows immediately and can be accessed through the @data field.
+ *
+ * Unlike &fw_cdev_event_request, @tcode of lock requests is one of the
+ * firewire-core specific %TCODE_LOCK_MASK_SWAP...%TCODE_LOCK_VENDOR_DEPENDENT,
+ * i.e. encodes the extended transaction code.
+ *
+ * @card may differ from &fw_cdev_get_info.card because requests are received
+ * from all cards of the Linux host.  @source_node_id, @destination_node_id, and
+ * @generation pertain to that card.  Destination node ID and bus generation may
+ * therefore differ from the corresponding fields of the last
+ * &fw_cdev_event_bus_reset.
+ *
+ * @destination_node_id may also differ from the current node ID because of a
+ * non-local bus ID part or in case of a broadcast write request.  Note, a
+ * client must call an %FW_CDEV_IOC_SEND_RESPONSE ioctl even in case of a
+ * broadcast write request; the kernel will then release the kernel-side pending
+ * request but will not actually send a response packet.
+ *
+ * In case of a write request to FCP_REQUEST or FCP_RESPONSE, the kernel already
+ * sent a write response immediately after the request was received; in this
+ * case the client must still call an %FW_CDEV_IOC_SEND_RESPONSE ioctl to
+ * release the kernel-side pending request, though another response won't be
+ * sent.
+ *
+ * If the client subsequently needs to initiate requests to the sender node of
+ * an &fw_cdev_event_request2, it needs to use a device file with matching
+ * card index, node ID, and generation for outbound requests.
+ */
+struct fw_cdev_event_request2 {
+       __u64 closure;
+       __u32 type;
+       __u32 tcode;
+       __u64 offset;
+       __u32 source_node_id;
+       __u32 destination_node_id;
+       __u32 card;
+       __u32 generation;
+       __u32 handle;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * struct fw_cdev_event_iso_interrupt - Sent when an iso packet was completed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_ISO_INTERRUPT
+ * @cycle:     Cycle counter of the last completed packet
+ * @header_length: Total length of following headers, in bytes
+ * @header:    Stripped headers, if any
+ *
+ * This event is sent when the controller has completed an &fw_cdev_iso_packet
+ * with the %FW_CDEV_ISO_INTERRUPT bit set, when explicitly requested with
+ * %FW_CDEV_IOC_FLUSH_ISO, or when there have been so many completed packets
+ * without the interrupt bit set that the kernel's internal buffer for @header
+ * is about to overflow.  (In the last case, ABI versions < 5 drop header data
+ * up to the next interrupt packet.)
+ *
+ * Isochronous transmit events (context type %FW_CDEV_ISO_CONTEXT_TRANSMIT):
+ *
+ * In version 3 and some implementations of version 2 of the ABI, &header_length
+ * is a multiple of 4 and &header contains timestamps of all packets up until
+ * the interrupt packet.  The format of the timestamps is as described below for
+ * isochronous reception.  In version 1 of the ABI, &header_length was 0.
+ *
+ * Isochronous receive events (context type %FW_CDEV_ISO_CONTEXT_RECEIVE):
+ *
+ * The headers stripped of all packets up until and including the interrupt
+ * packet are returned in the @header field.  The amount of header data per
+ * packet is as specified at iso context creation by
+ * &fw_cdev_create_iso_context.header_size.
+ *
+ * Hence, _interrupt.header_length / _context.header_size is the number of
+ * packets received in this interrupt event.  The client can now iterate
+ * through the mmap()'ed DMA buffer according to this number of packets and
+ * to the buffer sizes as the client specified in &fw_cdev_queue_iso.
+ *
+ * Since version 2 of this ABI, the portion for each packet in _interrupt.header
+ * consists of the 1394 isochronous packet header, followed by a timestamp
+ * quadlet if &fw_cdev_create_iso_context.header_size > 4, followed by quadlets
+ * from the packet payload if &fw_cdev_create_iso_context.header_size > 8.
+ *
+ * Format of 1394 iso packet header:  16 bits data_length, 2 bits tag, 6 bits
+ * channel, 4 bits tcode, 4 bits sy, in big endian byte order.
+ * data_length is the actual received size of the packet without the four
+ * 1394 iso packet header bytes.
+ *
+ * Format of timestamp:  16 bits invalid, 3 bits cycleSeconds, 13 bits
+ * cycleCount, in big endian byte order.
+ *
+ * In version 1 of the ABI, no timestamp quadlet was inserted; instead, payload
+ * data followed directly after the 1394 is header if header_size > 4.
+ * Behaviour of ver. 1 of this ABI is no longer available since ABI ver. 2.
+ */
+struct fw_cdev_event_iso_interrupt {
+       __u64 closure;
+       __u32 type;
+       __u32 cycle;
+       __u32 header_length;
+       __u32 header[0];
+};
+
+/**
+ * struct fw_cdev_event_iso_interrupt_mc - An iso buffer chunk was completed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl
+ * @type:      %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * @completed: Offset into the receive buffer; data before this offset is valid
+ *
+ * This event is sent in multichannel contexts (context type
+ * %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL) for &fw_cdev_iso_packet buffer
+ * chunks that have been completely filled and that have the
+ * %FW_CDEV_ISO_INTERRUPT bit set, or when explicitly requested with
+ * %FW_CDEV_IOC_FLUSH_ISO.
+ *
+ * The buffer is continuously filled with the following data, per packet:
+ *  - the 1394 iso packet header as described at &fw_cdev_event_iso_interrupt,
+ *    but in little endian byte order,
+ *  - packet payload (as many bytes as specified in the data_length field of
+ *    the 1394 iso packet header) in big endian byte order,
+ *  - 0...3 padding bytes as needed to align the following trailer quadlet,
+ *  - trailer quadlet, containing the reception timestamp as described at
+ *    &fw_cdev_event_iso_interrupt, but in little endian byte order.
+ *
+ * Hence the per-packet size is data_length (rounded up to a multiple of 4) + 8.
+ * When processing the data, stop before a packet that would cross the
+ * @completed offset.
+ *
+ * A packet near the end of a buffer chunk will typically spill over into the
+ * next queued buffer chunk.  It is the responsibility of the client to check
+ * for this condition, assemble a broken-up packet from its parts, and not to
+ * re-queue any buffer chunks in which as yet unread packet parts reside.
+ */
+struct fw_cdev_event_iso_interrupt_mc {
+       __u64 closure;
+       __u32 type;
+       __u32 completed;
+};
+
+/**
+ * struct fw_cdev_event_iso_resource - Iso resources were allocated or freed
+ * @closure:   See &fw_cdev_event_common;
+ *             set by %FW_CDEV_IOC_(DE)ALLOCATE_ISO_RESOURCE(_ONCE) ioctl
+ * @type:      %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
+ *             %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
+ * @handle:    Reference by which an allocated resource can be deallocated
+ * @channel:   Isochronous channel which was (de)allocated, if any
+ * @bandwidth: Bandwidth allocation units which were (de)allocated, if any
+ *
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous
+ * resource was allocated at the IRM.  The client has to check @channel and
+ * @bandwidth for whether the allocation actually succeeded.
+ *
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous
+ * resource was deallocated at the IRM.  It is also sent when automatic
+ * reallocation after a bus reset failed.
+ *
+ * @channel is <0 if no channel was (de)allocated or if reallocation failed.
+ * @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed.
+ */
+struct fw_cdev_event_iso_resource {
+       __u64 closure;
+       __u32 type;
+       __u32 handle;
+       __s32 channel;
+       __s32 bandwidth;
+};
+
+/**
+ * struct fw_cdev_event_phy_packet - A PHY packet was transmitted or received
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_PHY_PACKET
+ *             or %FW_CDEV_IOC_RECEIVE_PHY_PACKETS ioctl
+ * @type:      %FW_CDEV_EVENT_PHY_PACKET_SENT or %..._RECEIVED
+ * @rcode:     %RCODE_..., indicates success or failure of transmission
+ * @length:    Data length in bytes
+ * @data:      Incoming data
+ *
+ * If @type is %FW_CDEV_EVENT_PHY_PACKET_SENT, @length is 0 and @data empty,
+ * except in case of a ping packet:  Then, @length is 4, and @data[0] is the
+ * ping time in 49.152MHz clocks if @rcode is %RCODE_COMPLETE.
+ *
+ * If @type is %FW_CDEV_EVENT_PHY_PACKET_RECEIVED, @length is 8 and @data
+ * consists of the two PHY packet quadlets, in host byte order.
+ */
+struct fw_cdev_event_phy_packet {
+       __u64 closure;
+       __u32 type;
+       __u32 rcode;
+       __u32 length;
+       __u32 data[0];
+};
+
+/**
+ * union fw_cdev_event - Convenience union of fw_cdev_event_ types
+ * @common:            Valid for all types
+ * @bus_reset:         Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET
+ * @response:          Valid if @common.type == %FW_CDEV_EVENT_RESPONSE
+ * @request:           Valid if @common.type == %FW_CDEV_EVENT_REQUEST
+ * @request2:          Valid if @common.type == %FW_CDEV_EVENT_REQUEST2
+ * @iso_interrupt:     Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
+ * @iso_interrupt_mc:  Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * @iso_resource:      Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
+ *                             %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
+ * @phy_packet:                Valid if @common.type ==
+ *                             %FW_CDEV_EVENT_PHY_PACKET_SENT or
+ *                             %FW_CDEV_EVENT_PHY_PACKET_RECEIVED
+ *
+ * Convenience union for userspace use.  Events could be read(2) into an
+ * appropriately aligned char buffer and then cast to this union for further
+ * processing.  Note that for a request, response or iso_interrupt event,
+ * the data[] or header[] may make the size of the full event larger than
+ * sizeof(union fw_cdev_event).  Also note that if you attempt to read(2)
+ * an event into a buffer that is not large enough for it, the data that does
+ * not fit will be discarded so that the next read(2) will return a new event.
+ */
+union fw_cdev_event {
+       struct fw_cdev_event_common             common;
+       struct fw_cdev_event_bus_reset          bus_reset;
+       struct fw_cdev_event_response           response;
+       struct fw_cdev_event_request            request;
+       struct fw_cdev_event_request2           request2;               /* added in 2.6.36 */
+       struct fw_cdev_event_iso_interrupt      iso_interrupt;
+       struct fw_cdev_event_iso_interrupt_mc   iso_interrupt_mc;       /* added in 2.6.36 */
+       struct fw_cdev_event_iso_resource       iso_resource;           /* added in 2.6.30 */
+       struct fw_cdev_event_phy_packet         phy_packet;             /* added in 2.6.36 */
+};
+
+/* available since kernel version 2.6.22 */
+#define FW_CDEV_IOC_GET_INFO           _IOWR('#', 0x00, struct fw_cdev_get_info)
+#define FW_CDEV_IOC_SEND_REQUEST        _IOW('#', 0x01, struct fw_cdev_send_request)
+#define FW_CDEV_IOC_ALLOCATE           _IOWR('#', 0x02, struct fw_cdev_allocate)
+#define FW_CDEV_IOC_DEALLOCATE          _IOW('#', 0x03, struct fw_cdev_deallocate)
+#define FW_CDEV_IOC_SEND_RESPONSE       _IOW('#', 0x04, struct fw_cdev_send_response)
+#define FW_CDEV_IOC_INITIATE_BUS_RESET  _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
+#define FW_CDEV_IOC_ADD_DESCRIPTOR     _IOWR('#', 0x06, struct fw_cdev_add_descriptor)
+#define FW_CDEV_IOC_REMOVE_DESCRIPTOR   _IOW('#', 0x07, struct fw_cdev_remove_descriptor)
+#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context)
+#define FW_CDEV_IOC_QUEUE_ISO          _IOWR('#', 0x09, struct fw_cdev_queue_iso)
+#define FW_CDEV_IOC_START_ISO           _IOW('#', 0x0a, struct fw_cdev_start_iso)
+#define FW_CDEV_IOC_STOP_ISO            _IOW('#', 0x0b, struct fw_cdev_stop_iso)
+
+/* available since kernel version 2.6.24 */
+#define FW_CDEV_IOC_GET_CYCLE_TIMER     _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
+
+/* available since kernel version 2.6.30 */
+#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE       _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE      _IOW('#', 0x0e, struct fw_cdev_deallocate)
+#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE   _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_GET_SPEED                     _IO('#', 0x11) /* returns speed code */
+#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST       _IOW('#', 0x12, struct fw_cdev_send_request)
+#define FW_CDEV_IOC_SEND_STREAM_PACKET           _IOW('#', 0x13, struct fw_cdev_send_stream_packet)
+
+/* available since kernel version 2.6.34 */
+#define FW_CDEV_IOC_GET_CYCLE_TIMER2   _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2)
+
+/* available since kernel version 2.6.36 */
+#define FW_CDEV_IOC_SEND_PHY_PACKET    _IOWR('#', 0x15, struct fw_cdev_send_phy_packet)
+#define FW_CDEV_IOC_RECEIVE_PHY_PACKETS _IOW('#', 0x16, struct fw_cdev_receive_phy_packets)
+#define FW_CDEV_IOC_SET_ISO_CHANNELS    _IOW('#', 0x17, struct fw_cdev_set_iso_channels)
+
+/* available since kernel version 3.4 */
+#define FW_CDEV_IOC_FLUSH_ISO           _IOW('#', 0x18, struct fw_cdev_flush_iso)
+
+/*
+ * ABI version history
+ *  1  (2.6.22)  - initial version
+ *     (2.6.24)  - added %FW_CDEV_IOC_GET_CYCLE_TIMER
+ *  2  (2.6.30)  - changed &fw_cdev_event_iso_interrupt.header if
+ *                 &fw_cdev_create_iso_context.header_size is 8 or more
+ *               - added %FW_CDEV_IOC_*_ISO_RESOURCE*,
+ *                 %FW_CDEV_IOC_GET_SPEED, %FW_CDEV_IOC_SEND_BROADCAST_REQUEST,
+ *                 %FW_CDEV_IOC_SEND_STREAM_PACKET
+ *     (2.6.32)  - added time stamp to xmit &fw_cdev_event_iso_interrupt
+ *     (2.6.33)  - IR has always packet-per-buffer semantics now, not one of
+ *                 dual-buffer or packet-per-buffer depending on hardware
+ *               - shared use and auto-response for FCP registers
+ *  3  (2.6.34)  - made &fw_cdev_get_cycle_timer reliable
+ *               - added %FW_CDEV_IOC_GET_CYCLE_TIMER2
+ *  4  (2.6.36)  - added %FW_CDEV_EVENT_REQUEST2, %FW_CDEV_EVENT_PHY_PACKET_*,
+ *                 and &fw_cdev_allocate.region_end
+ *               - implemented &fw_cdev_event_bus_reset.bm_node_id
+ *               - added %FW_CDEV_IOC_SEND_PHY_PACKET, _RECEIVE_PHY_PACKETS
+ *               - added %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL,
+ *                 %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL, and
+ *                 %FW_CDEV_IOC_SET_ISO_CHANNELS
+ *  5  (3.4)     - send %FW_CDEV_EVENT_ISO_INTERRUPT events when needed to
+ *                 avoid dropping data
+ *               - added %FW_CDEV_IOC_FLUSH_ISO
+ */
+
+/**
+ * struct fw_cdev_get_info - General purpose information ioctl
+ * @version:   The version field is just a running serial number.  Both an
+ *             input parameter (ABI version implemented by the client) and
+ *             output parameter (ABI version implemented by the kernel).
+ *             A client shall fill in the ABI @version for which the client
+ *             was implemented.  This is necessary for forward compatibility.
+ * @rom_length:        If @rom is non-zero, up to @rom_length bytes of Configuration
+ *             ROM will be copied into that user space address.  In either
+ *             case, @rom_length is updated with the actual length of the
+ *             Configuration ROM.
+ * @rom:       If non-zero, address of a buffer to be filled by a copy of the
+ *             device's Configuration ROM
+ * @bus_reset: If non-zero, address of a buffer to be filled by a
+ *             &struct fw_cdev_event_bus_reset with the current state
+ *             of the bus.  This does not cause a bus reset to happen.
+ * @bus_reset_closure: Value of &closure in this and subsequent bus reset events
+ * @card:      The index of the card this device belongs to
+ *
+ * The %FW_CDEV_IOC_GET_INFO ioctl is usually the very first one which a client
+ * performs right after it opened a /dev/fw* file.
+ *
+ * As a side effect, reception of %FW_CDEV_EVENT_BUS_RESET events to be read(2)
+ * is started by this ioctl.
+ */
+struct fw_cdev_get_info {
+       __u32 version;
+       __u32 rom_length;
+       __u64 rom;
+       __u64 bus_reset;
+       __u64 bus_reset_closure;
+       __u32 card;
+};
+
+/**
+ * struct fw_cdev_send_request - Send an asynchronous request packet
+ * @tcode:     Transaction code of the request
+ * @length:    Length of outgoing payload, in bytes
+ * @offset:    48-bit offset at destination node
+ * @closure:   Passed back to userspace in the response event
+ * @data:      Userspace pointer to payload
+ * @generation:        The bus generation where packet is valid
+ *
+ * Send a request to the device.  This ioctl implements all outgoing requests.
+ * Both quadlet and block request specify the payload as a pointer to the data
+ * in the @data field.  Once the transaction completes, the kernel writes an
+ * &fw_cdev_event_response event back.  The @closure field is passed back to
+ * user space in the response event.
+ */
+struct fw_cdev_send_request {
+       __u32 tcode;
+       __u32 length;
+       __u64 offset;
+       __u64 closure;
+       __u64 data;
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_send_response - Send an asynchronous response packet
+ * @rcode:     Response code as determined by the userspace handler
+ * @length:    Length of outgoing payload, in bytes
+ * @data:      Userspace pointer to payload
+ * @handle:    The handle from the &fw_cdev_event_request
+ *
+ * Send a response to an incoming request.  By setting up an address range using
+ * the %FW_CDEV_IOC_ALLOCATE ioctl, userspace can listen for incoming requests.  An
+ * incoming request will generate an %FW_CDEV_EVENT_REQUEST, and userspace must
+ * send a reply using this ioctl.  The event has a handle to the kernel-side
+ * pending transaction, which should be used with this ioctl.
+ */
+struct fw_cdev_send_response {
+       __u32 rcode;
+       __u32 length;
+       __u64 data;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_allocate - Allocate a CSR in an address range
+ * @offset:    Start offset of the address range
+ * @closure:   To be passed back to userspace in request events
+ * @length:    Length of the CSR, in bytes
+ * @handle:    Handle to the allocation, written by the kernel
+ * @region_end:        First address above the address range (added in ABI v4, 2.6.36)
+ *
+ * Allocate an address range in the 48-bit address space on the local node
+ * (the controller).  This allows userspace to listen for requests with an
+ * offset within that address range.  Every time when the kernel receives a
+ * request within the range, an &fw_cdev_event_request2 event will be emitted.
+ * (If the kernel or the client implements ABI version <= 3, an
+ * &fw_cdev_event_request will be generated instead.)
+ *
+ * The @closure field is passed back to userspace in these request events.
+ * The @handle field is an out parameter, returning a handle to the allocated
+ * range to be used for later deallocation of the range.
+ *
+ * The address range is allocated on all local nodes.  The address allocation
+ * is exclusive except for the FCP command and response registers.  If an
+ * exclusive address region is already in use, the ioctl fails with errno set
+ * to %EBUSY.
+ *
+ * If kernel and client implement ABI version >= 4, the kernel looks up a free
+ * spot of size @length inside [@offset..@region_end) and, if found, writes
+ * the start address of the new CSR back in @offset.  I.e. @offset is an
+ * in and out parameter.  If this automatic placement of a CSR in a bigger
+ * address range is not desired, the client simply needs to set @region_end
+ * = @offset + @length.
+ *
+ * If the kernel or the client implements ABI version <= 3, @region_end is
+ * ignored and effectively assumed to be @offset + @length.
+ *
+ * @region_end is only present in a kernel header >= 2.6.36.  If necessary,
+ * this can for example be tested by #ifdef FW_CDEV_EVENT_REQUEST2.
+ */
+struct fw_cdev_allocate {
+       __u64 offset;
+       __u64 closure;
+       __u32 length;
+       __u32 handle;
+       __u64 region_end;       /* available since kernel version 2.6.36 */
+};
+
+/**
+ * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource
+ * @handle:    Handle to the address range or iso resource, as returned by the
+ *             kernel when the range or resource was allocated
+ */
+struct fw_cdev_deallocate {
+       __u32 handle;
+};
+
+#define FW_CDEV_LONG_RESET     0
+#define FW_CDEV_SHORT_RESET    1
+
+/**
+ * struct fw_cdev_initiate_bus_reset - Initiate a bus reset
+ * @type:      %FW_CDEV_SHORT_RESET or %FW_CDEV_LONG_RESET
+ *
+ * Initiate a bus reset for the bus this device is on.  The bus reset can be
+ * either the original (long) bus reset or the arbitrated (short) bus reset
+ * introduced in 1394a-2000.
+ *
+ * The ioctl returns immediately.  A subsequent &fw_cdev_event_bus_reset
+ * indicates when the reset actually happened.  Since ABI v4, this may be
+ * considerably later than the ioctl because the kernel ensures a grace period
+ * between subsequent bus resets as per IEEE 1394 bus management specification.
+ */
+struct fw_cdev_initiate_bus_reset {
+       __u32 type;
+};
+
+/**
+ * struct fw_cdev_add_descriptor - Add contents to the local node's config ROM
+ * @immediate: If non-zero, immediate key to insert before pointer
+ * @key:       Upper 8 bits of root directory pointer
+ * @data:      Userspace pointer to contents of descriptor block
+ * @length:    Length of descriptor block data, in quadlets
+ * @handle:    Handle to the descriptor, written by the kernel
+ *
+ * Add a descriptor block and optionally a preceding immediate key to the local
+ * node's Configuration ROM.
+ *
+ * The @key field specifies the upper 8 bits of the descriptor root directory
+ * pointer and the @data and @length fields specify the contents. The @key
+ * should be of the form 0xXX000000. The offset part of the root directory entry
+ * will be filled in by the kernel.
+ *
+ * If not 0, the @immediate field specifies an immediate key which will be
+ * inserted before the root directory pointer.
+ *
+ * @immediate, @key, and @data array elements are CPU-endian quadlets.
+ *
+ * If successful, the kernel adds the descriptor and writes back a @handle to
+ * the kernel-side object to be used for later removal of the descriptor block
+ * and immediate key.  The kernel will also generate a bus reset to signal the
+ * change of the Configuration ROM to other nodes.
+ *
+ * This ioctl affects the Configuration ROMs of all local nodes.
+ * The ioctl only succeeds on device files which represent a local node.
+ */
+struct fw_cdev_add_descriptor {
+       __u32 immediate;
+       __u32 key;
+       __u64 data;
+       __u32 length;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_remove_descriptor - Remove contents from the Configuration ROM
+ * @handle:    Handle to the descriptor, as returned by the kernel when the
+ *             descriptor was added
+ *
+ * Remove a descriptor block and accompanying immediate key from the local
+ * nodes' Configuration ROMs.  The kernel will also generate a bus reset to
+ * signal the change of the Configuration ROM to other nodes.
+ */
+struct fw_cdev_remove_descriptor {
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_CONTEXT_TRANSMIT                   0
+#define FW_CDEV_ISO_CONTEXT_RECEIVE                    1
+#define FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL       2 /* added in 2.6.36 */
+
+/**
+ * struct fw_cdev_create_iso_context - Create a context for isochronous I/O
+ * @type:      %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE or
+ *             %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL
+ * @header_size: Header size to strip in single-channel reception
+ * @channel:   Channel to bind to in single-channel reception or transmission
+ * @speed:     Transmission speed
+ * @closure:   To be returned in &fw_cdev_event_iso_interrupt or
+ *             &fw_cdev_event_iso_interrupt_multichannel
+ * @handle:    Handle to context, written back by kernel
+ *
+ * Prior to sending or receiving isochronous I/O, a context must be created.
+ * The context records information about the transmit or receive configuration
+ * and typically maps to an underlying hardware resource.  A context is set up
+ * for either sending or receiving.  It is bound to a specific isochronous
+ * @channel.
+ *
+ * In case of multichannel reception, @header_size and @channel are ignored
+ * and the channels are selected by %FW_CDEV_IOC_SET_ISO_CHANNELS.
+ *
+ * For %FW_CDEV_ISO_CONTEXT_RECEIVE contexts, @header_size must be at least 4
+ * and must be a multiple of 4.  It is ignored in other context types.
+ *
+ * @speed is ignored in receive context types.
+ *
+ * If a context was successfully created, the kernel writes back a handle to the
+ * context, which must be passed in for subsequent operations on that context.
+ *
+ * Limitations:
+ * No more than one iso context can be created per fd.
+ * The total number of contexts that all userspace and kernelspace drivers can
+ * create on a card at a time is a hardware limit, typically 4 or 8 contexts per
+ * direction, and of them at most one multichannel receive context.
+ */
+struct fw_cdev_create_iso_context {
+       __u32 type;
+       __u32 header_size;
+       __u32 channel;
+       __u32 speed;
+       __u64 closure;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_set_iso_channels - Select channels in multichannel reception
+ * @channels:  Bitmask of channels to listen to
+ * @handle:    Handle of the mutichannel receive context
+ *
+ * @channels is the bitwise or of 1ULL << n for each channel n to listen to.
+ *
+ * The ioctl fails with errno %EBUSY if there is already another receive context
+ * on a channel in @channels.  In that case, the bitmask of all unoccupied
+ * channels is returned in @channels.
+ */
+struct fw_cdev_set_iso_channels {
+       __u64 channels;
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_PAYLOAD_LENGTH(v)  (v)
+#define FW_CDEV_ISO_INTERRUPT          (1 << 16)
+#define FW_CDEV_ISO_SKIP               (1 << 17)
+#define FW_CDEV_ISO_SYNC               (1 << 17)
+#define FW_CDEV_ISO_TAG(v)             ((v) << 18)
+#define FW_CDEV_ISO_SY(v)              ((v) << 20)
+#define FW_CDEV_ISO_HEADER_LENGTH(v)   ((v) << 24)
+
+/**
+ * struct fw_cdev_iso_packet - Isochronous packet
+ * @control:   Contains the header length (8 uppermost bits),
+ *             the sy field (4 bits), the tag field (2 bits), a sync flag
+ *             or a skip flag (1 bit), an interrupt flag (1 bit), and the
+ *             payload length (16 lowermost bits)
+ * @header:    Header and payload in case of a transmit context.
+ *
+ * &struct fw_cdev_iso_packet is used to describe isochronous packet queues.
+ * Use the FW_CDEV_ISO_ macros to fill in @control.
+ * The @header array is empty in case of receive contexts.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_TRANSMIT:
+ *
+ * @control.HEADER_LENGTH must be a multiple of 4.  It specifies the numbers of
+ * bytes in @header that will be prepended to the packet's payload.  These bytes
+ * are copied into the kernel and will not be accessed after the ioctl has
+ * returned.
+ *
+ * The @control.SY and TAG fields are copied to the iso packet header.  These
+ * fields are specified by IEEE 1394a and IEC 61883-1.
+ *
+ * The @control.SKIP flag specifies that no packet is to be sent in a frame.
+ * When using this, all other fields except @control.INTERRUPT must be zero.
+ *
+ * When a packet with the @control.INTERRUPT flag set has been completed, an
+ * &fw_cdev_event_iso_interrupt event will be sent.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE:
+ *
+ * @control.HEADER_LENGTH must be a multiple of the context's header_size.
+ * If the HEADER_LENGTH is larger than the context's header_size, multiple
+ * packets are queued for this entry.
+ *
+ * The @control.SY and TAG fields are ignored.
+ *
+ * If the @control.SYNC flag is set, the context drops all packets until a
+ * packet with a sy field is received which matches &fw_cdev_start_iso.sync.
+ *
+ * @control.PAYLOAD_LENGTH defines how many payload bytes can be received for
+ * one packet (in addition to payload quadlets that have been defined as headers
+ * and are stripped and returned in the &fw_cdev_event_iso_interrupt structure).
+ * If more bytes are received, the additional bytes are dropped.  If less bytes
+ * are received, the remaining bytes in this part of the payload buffer will not
+ * be written to, not even by the next packet.  I.e., packets received in
+ * consecutive frames will not necessarily be consecutive in memory.  If an
+ * entry has queued multiple packets, the PAYLOAD_LENGTH is divided equally
+ * among them.
+ *
+ * When a packet with the @control.INTERRUPT flag set has been completed, an
+ * &fw_cdev_event_iso_interrupt event will be sent.  An entry that has queued
+ * multiple receive packets is completed when its last packet is completed.
+ *
+ * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL:
+ *
+ * Here, &fw_cdev_iso_packet would be more aptly named _iso_buffer_chunk since
+ * it specifies a chunk of the mmap()'ed buffer, while the number and alignment
+ * of packets to be placed into the buffer chunk is not known beforehand.
+ *
+ * @control.PAYLOAD_LENGTH is the size of the buffer chunk and specifies room
+ * for header, payload, padding, and trailer bytes of one or more packets.
+ * It must be a multiple of 4.
+ *
+ * @control.HEADER_LENGTH, TAG and SY are ignored.  SYNC is treated as described
+ * for single-channel reception.
+ *
+ * When a buffer chunk with the @control.INTERRUPT flag set has been filled
+ * entirely, an &fw_cdev_event_iso_interrupt_mc event will be sent.
+ */
+struct fw_cdev_iso_packet {
+       __u32 control;
+       __u32 header[0];
+};
+
+/**
+ * struct fw_cdev_queue_iso - Queue isochronous packets for I/O
+ * @packets:   Userspace pointer to an array of &fw_cdev_iso_packet
+ * @data:      Pointer into mmap()'ed payload buffer
+ * @size:      Size of the @packets array, in bytes
+ * @handle:    Isochronous context handle
+ *
+ * Queue a number of isochronous packets for reception or transmission.
+ * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs,
+ * which describe how to transmit from or receive into a contiguous region
+ * of a mmap()'ed payload buffer.  As part of transmit packet descriptors,
+ * a series of headers can be supplied, which will be prepended to the
+ * payload during DMA.
+ *
+ * The kernel may or may not queue all packets, but will write back updated
+ * values of the @packets, @data and @size fields, so the ioctl can be
+ * resubmitted easily.
+ *
+ * In case of a multichannel receive context, @data must be quadlet-aligned
+ * relative to the buffer start.
+ */
+struct fw_cdev_queue_iso {
+       __u64 packets;
+       __u64 data;
+       __u32 size;
+       __u32 handle;
+};
+
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG0          1
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG1          2
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG2          4
+#define FW_CDEV_ISO_CONTEXT_MATCH_TAG3          8
+#define FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS     15
+
+/**
+ * struct fw_cdev_start_iso - Start an isochronous transmission or reception
+ * @cycle:     Cycle in which to start I/O.  If @cycle is greater than or
+ *             equal to 0, the I/O will start on that cycle.
+ * @sync:      Determines the value to wait for for receive packets that have
+ *             the %FW_CDEV_ISO_SYNC bit set
+ * @tags:      Tag filter bit mask.  Only valid for isochronous reception.
+ *             Determines the tag values for which packets will be accepted.
+ *             Use FW_CDEV_ISO_CONTEXT_MATCH_ macros to set @tags.
+ * @handle:    Isochronous context handle within which to transmit or receive
+ */
+struct fw_cdev_start_iso {
+       __s32 cycle;
+       __u32 sync;
+       __u32 tags;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_stop_iso - Stop an isochronous transmission or reception
+ * @handle:    Handle of isochronous context to stop
+ */
+struct fw_cdev_stop_iso {
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_flush_iso - flush completed iso packets
+ * @handle:    handle of isochronous context to flush
+ *
+ * For %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE contexts,
+ * report any completed packets.
+ *
+ * For %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL contexts, report the current
+ * offset in the receive buffer, if it has changed; this is typically in the
+ * middle of some buffer chunk.
+ *
+ * Any %FW_CDEV_EVENT_ISO_INTERRUPT or %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL
+ * events generated by this ioctl are sent synchronously, i.e., are available
+ * for reading from the file descriptor when this ioctl returns.
+ */
+struct fw_cdev_flush_iso {
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_get_cycle_timer - read cycle timer register
+ * @local_time:   system time, in microseconds since the Epoch
+ * @cycle_timer:  Cycle Time register contents
+ *
+ * Same as %FW_CDEV_IOC_GET_CYCLE_TIMER2, but fixed to use %CLOCK_REALTIME
+ * and only with microseconds resolution.
+ *
+ * In version 1 and 2 of the ABI, this ioctl returned unreliable (non-
+ * monotonic) @cycle_timer values on certain controllers.
+ */
+struct fw_cdev_get_cycle_timer {
+       __u64 local_time;
+       __u32 cycle_timer;
+};
+
+/**
+ * struct fw_cdev_get_cycle_timer2 - read cycle timer register
+ * @tv_sec:       system time, seconds
+ * @tv_nsec:      system time, sub-seconds part in nanoseconds
+ * @clk_id:       input parameter, clock from which to get the system time
+ * @cycle_timer:  Cycle Time register contents
+ *
+ * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 ioctl reads the isochronous cycle timer
+ * and also the system clock.  This allows to correlate reception time of
+ * isochronous packets with system time.
+ *
+ * @clk_id lets you choose a clock like with POSIX' clock_gettime function.
+ * Supported @clk_id values are POSIX' %CLOCK_REALTIME and %CLOCK_MONOTONIC
+ * and Linux' %CLOCK_MONOTONIC_RAW.
+ *
+ * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and
+ * 12 bits cycleOffset, in host byte order.  Cf. the Cycle Time register
+ * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394.
+ */
+struct fw_cdev_get_cycle_timer2 {
+       __s64 tv_sec;
+       __s32 tv_nsec;
+       __s32 clk_id;
+       __u32 cycle_timer;
+};
+
+/**
+ * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth
+ * @closure:   Passed back to userspace in corresponding iso resource events
+ * @channels:  Isochronous channels of which one is to be (de)allocated
+ * @bandwidth: Isochronous bandwidth units to be (de)allocated
+ * @handle:    Handle to the allocation, written by the kernel (only valid in
+ *             case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls)
+ *
+ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an
+ * isochronous channel and/or of isochronous bandwidth at the isochronous
+ * resource manager (IRM).  Only one of the channels specified in @channels is
+ * allocated.  An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after
+ * communication with the IRM, indicating success or failure in the event data.
+ * The kernel will automatically reallocate the resources after bus resets.
+ * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event
+ * will be sent.  The kernel will also automatically deallocate the resources
+ * when the file descriptor is closed.
+ *
+ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate
+ * deallocation of resources which were allocated as described above.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
+ *
+ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation
+ * without automatic re- or deallocation.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation,
+ * indicating success or failure in its data.
+ *
+ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like
+ * %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed
+ * instead of allocated.
+ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
+ *
+ * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources
+ * for the lifetime of the fd or @handle.
+ * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources
+ * for the duration of a bus generation.
+ *
+ * @channels is a host-endian bitfield with the least significant bit
+ * representing channel 0 and the most significant bit representing channel 63:
+ * 1ULL << c for each channel c that is a candidate for (de)allocation.
+ *
+ * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send
+ * one quadlet of data (payload or header data) at speed S1600.
+ */
+struct fw_cdev_allocate_iso_resource {
+       __u64 closure;
+       __u64 channels;
+       __u32 bandwidth;
+       __u32 handle;
+};
+
+/**
+ * struct fw_cdev_send_stream_packet - send an asynchronous stream packet
+ * @length:    Length of outgoing payload, in bytes
+ * @tag:       Data format tag
+ * @channel:   Isochronous channel to transmit to
+ * @sy:                Synchronization code
+ * @closure:   Passed back to userspace in the response event
+ * @data:      Userspace pointer to payload
+ * @generation:        The bus generation where packet is valid
+ * @speed:     Speed to transmit at
+ *
+ * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet
+ * to every device which is listening to the specified channel.  The kernel
+ * writes an &fw_cdev_event_response event which indicates success or failure of
+ * the transmission.
+ */
+struct fw_cdev_send_stream_packet {
+       __u32 length;
+       __u32 tag;
+       __u32 channel;
+       __u32 sy;
+       __u64 closure;
+       __u64 data;
+       __u32 generation;
+       __u32 speed;
+};
+
+/**
+ * struct fw_cdev_send_phy_packet - send a PHY packet
+ * @closure:   Passed back to userspace in the PHY-packet-sent event
+ * @data:      First and second quadlet of the PHY packet
+ * @generation:        The bus generation where packet is valid
+ *
+ * The %FW_CDEV_IOC_SEND_PHY_PACKET ioctl sends a PHY packet to all nodes
+ * on the same card as this device.  After transmission, an
+ * %FW_CDEV_EVENT_PHY_PACKET_SENT event is generated.
+ *
+ * The payload @data[] shall be specified in host byte order.  Usually,
+ * @data[1] needs to be the bitwise inverse of @data[0].  VersaPHY packets
+ * are an exception to this rule.
+ *
+ * The ioctl is only permitted on device files which represent a local node.
+ */
+struct fw_cdev_send_phy_packet {
+       __u64 closure;
+       __u32 data[2];
+       __u32 generation;
+};
+
+/**
+ * struct fw_cdev_receive_phy_packets - start reception of PHY packets
+ * @closure: Passed back to userspace in phy packet events
+ *
+ * This ioctl activates issuing of %FW_CDEV_EVENT_PHY_PACKET_RECEIVED due to
+ * incoming PHY packets from any node on the same bus as the device.
+ *
+ * The ioctl is only permitted on device files which represent a local node.
+ */
+struct fw_cdev_receive_phy_packets {
+       __u64 closure;
+};
+
+#define FW_CDEV_VERSION 3 /* Meaningless legacy macro; don't use it. */
+
+#endif /* _LINUX_FIREWIRE_CDEV_H */
diff --git a/lib/libdss-include/linux/firewire-constants.h b/lib/libdss-include/linux/firewire-constants.h
new file mode 100644 (file)
index 0000000..9b4bb5f
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * IEEE 1394 constants.
+ *
+ * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _LINUX_FIREWIRE_CONSTANTS_H
+#define _LINUX_FIREWIRE_CONSTANTS_H
+
+#define TCODE_WRITE_QUADLET_REQUEST    0x0
+#define TCODE_WRITE_BLOCK_REQUEST      0x1
+#define TCODE_WRITE_RESPONSE           0x2
+#define TCODE_READ_QUADLET_REQUEST     0x4
+#define TCODE_READ_BLOCK_REQUEST       0x5
+#define TCODE_READ_QUADLET_RESPONSE    0x6
+#define TCODE_READ_BLOCK_RESPONSE      0x7
+#define TCODE_CYCLE_START              0x8
+#define TCODE_LOCK_REQUEST             0x9
+#define TCODE_STREAM_DATA              0xa
+#define TCODE_LOCK_RESPONSE            0xb
+
+#define EXTCODE_MASK_SWAP              0x1
+#define EXTCODE_COMPARE_SWAP           0x2
+#define EXTCODE_FETCH_ADD              0x3
+#define EXTCODE_LITTLE_ADD             0x4
+#define EXTCODE_BOUNDED_ADD            0x5
+#define EXTCODE_WRAP_ADD               0x6
+#define EXTCODE_VENDOR_DEPENDENT       0x7
+
+/* Linux firewire-core (Juju) specific tcodes */
+#define TCODE_LOCK_MASK_SWAP           (0x10 | EXTCODE_MASK_SWAP)
+#define TCODE_LOCK_COMPARE_SWAP                (0x10 | EXTCODE_COMPARE_SWAP)
+#define TCODE_LOCK_FETCH_ADD           (0x10 | EXTCODE_FETCH_ADD)
+#define TCODE_LOCK_LITTLE_ADD          (0x10 | EXTCODE_LITTLE_ADD)
+#define TCODE_LOCK_BOUNDED_ADD         (0x10 | EXTCODE_BOUNDED_ADD)
+#define TCODE_LOCK_WRAP_ADD            (0x10 | EXTCODE_WRAP_ADD)
+#define TCODE_LOCK_VENDOR_DEPENDENT    (0x10 | EXTCODE_VENDOR_DEPENDENT)
+
+#define RCODE_COMPLETE                 0x0
+#define RCODE_CONFLICT_ERROR           0x4
+#define RCODE_DATA_ERROR               0x5
+#define RCODE_TYPE_ERROR               0x6
+#define RCODE_ADDRESS_ERROR            0x7
+
+/* Linux firewire-core (Juju) specific rcodes */
+#define RCODE_SEND_ERROR               0x10
+#define RCODE_CANCELLED                        0x11
+#define RCODE_BUSY                     0x12
+#define RCODE_GENERATION               0x13
+#define RCODE_NO_ACK                   0x14
+
+#define SCODE_100                      0x0
+#define SCODE_200                      0x1
+#define SCODE_400                      0x2
+#define SCODE_800                      0x3
+#define SCODE_1600                     0x4
+#define SCODE_3200                     0x5
+#define SCODE_BETA                     0x3
+
+#define ACK_COMPLETE                   0x1
+#define ACK_PENDING                    0x2
+#define ACK_BUSY_X                     0x4
+#define ACK_BUSY_A                     0x5
+#define ACK_BUSY_B                     0x6
+#define ACK_DATA_ERROR                 0xd
+#define ACK_TYPE_ERROR                 0xe
+
+#define RETRY_1                                0x00
+#define RETRY_X                                0x01
+#define RETRY_A                                0x02
+#define RETRY_B                                0x03
+
+#endif /* _LINUX_FIREWIRE_CONSTANTS_H */
diff --git a/lib/libdss-include/linux/flat.h b/lib/libdss-include/linux/flat.h
new file mode 100644 (file)
index 0000000..8351bc7
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2002-2003  David McCullough <davidm@snapgear.com>
+ * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com>
+ *                          The Silver Hammer Group, Ltd.
+ *
+ * This file provides the definitions and structures needed to
+ * support uClinux flat-format executables.
+ */
+
+#ifndef _LINUX_FLAT_H
+#define _LINUX_FLAT_H
+
+
+#define        FLAT_VERSION                    0x00000004L
+
+#ifdef CONFIG_BINFMT_SHARED_FLAT
+#define        MAX_SHARED_LIBS                 (4)
+#else
+#define        MAX_SHARED_LIBS                 (1)
+#endif
+
+/*
+ * To make everything easier to port and manage cross platform
+ * development,  all fields are in network byte order.
+ */
+
+struct flat_hdr {
+       char magic[4];
+       unsigned long rev;          /* version (as above) */
+       unsigned long entry;        /* Offset of first executable instruction
+                                      with text segment from beginning of file */
+       unsigned long data_start;   /* Offset of data segment from beginning of
+                                      file */
+       unsigned long data_end;     /* Offset of end of data segment
+                                      from beginning of file */
+       unsigned long bss_end;      /* Offset of end of bss segment from beginning
+                                      of file */
+
+       /* (It is assumed that data_end through bss_end forms the bss segment.) */
+
+       unsigned long stack_size;   /* Size of stack, in bytes */
+       unsigned long reloc_start;  /* Offset of relocation records from
+                                      beginning of file */
+       unsigned long reloc_count;  /* Number of relocation records */
+       unsigned long flags;       
+       unsigned long build_date;   /* When the program/library was built */
+       unsigned long filler[5];    /* Reservered, set to zero */
+};
+
+#define FLAT_FLAG_RAM    0x0001 /* load program entirely into RAM */
+#define FLAT_FLAG_GOTPIC 0x0002 /* program is PIC with GOT */
+#define FLAT_FLAG_GZIP   0x0004 /* all but the header is compressed */
+#define FLAT_FLAG_GZDATA 0x0008 /* only data/relocs are compressed (for XIP) */
+#define FLAT_FLAG_KTRACE 0x0010 /* output useful kernel trace for debugging */
+
+
+
+#endif /* _LINUX_FLAT_H */
diff --git a/lib/libdss-include/linux/fou.h b/lib/libdss-include/linux/fou.h
new file mode 100644 (file)
index 0000000..744c323
--- /dev/null
@@ -0,0 +1,41 @@
+/* fou.h - FOU Interface */
+
+#ifndef _LINUX_FOU_H
+#define _LINUX_FOU_H
+
+/* NETLINK_GENERIC related info
+ */
+#define FOU_GENL_NAME          "fou"
+#define FOU_GENL_VERSION       0x1
+
+enum {
+       FOU_ATTR_UNSPEC,
+       FOU_ATTR_PORT,                          /* u16 */
+       FOU_ATTR_AF,                            /* u8 */
+       FOU_ATTR_IPPROTO,                       /* u8 */
+       FOU_ATTR_TYPE,                          /* u8 */
+       FOU_ATTR_REMCSUM_NOPARTIAL,             /* flag */
+
+       __FOU_ATTR_MAX,
+};
+
+#define FOU_ATTR_MAX           (__FOU_ATTR_MAX - 1)
+
+enum {
+       FOU_CMD_UNSPEC,
+       FOU_CMD_ADD,
+       FOU_CMD_DEL,
+       FOU_CMD_GET,
+
+       __FOU_CMD_MAX,
+};
+
+enum {
+       FOU_ENCAP_UNSPEC,
+       FOU_ENCAP_DIRECT,
+       FOU_ENCAP_GUE,
+};
+
+#define FOU_CMD_MAX    (__FOU_CMD_MAX - 1)
+
+#endif /* _LINUX_FOU_H */
diff --git a/lib/libdss-include/linux/fs.h b/lib/libdss-include/linux/fs.h
new file mode 100644 (file)
index 0000000..d75c7ec
--- /dev/null
@@ -0,0 +1,211 @@
+#ifndef _LINUX_FS_H
+#define _LINUX_FS_H
+
+/*
+ * This file has definitions for some important file table
+ * structures etc.
+ */
+
+#include <linux/limits.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
+ * the file limit at runtime and only root can increase the per-process
+ * nr_file rlimit, so it's safe to set up a ridiculously high absolute
+ * upper limit on files-per-process.
+ *
+ * Some programs (notably those using select()) may have to be 
+ * recompiled to take full advantage of the new limits..  
+ */
+
+/* Fixed constants first: */
+#undef NR_OPEN
+#define INR_OPEN_CUR 1024      /* Initial setting for nfile rlimits */
+#define INR_OPEN_MAX 4096      /* Hard limit for nfile rlimits */
+
+#define BLOCK_SIZE_BITS 10
+#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
+
+#define SEEK_SET       0       /* seek relative to beginning of file */
+#define SEEK_CUR       1       /* seek relative to current file position */
+#define SEEK_END       2       /* seek relative to end of file */
+#define SEEK_DATA      3       /* seek to the next data */
+#define SEEK_HOLE      4       /* seek to the next hole */
+#define SEEK_MAX       SEEK_HOLE
+
+#define RENAME_NOREPLACE       (1 << 0)        /* Don't overwrite target */
+#define RENAME_EXCHANGE                (1 << 1)        /* Exchange source and dest */
+#define RENAME_WHITEOUT                (1 << 2)        /* Whiteout source */
+
+struct fstrim_range {
+       __u64 start;
+       __u64 len;
+       __u64 minlen;
+};
+
+/* And dynamically-tunable limits and defaults: */
+struct files_stat_struct {
+       unsigned long nr_files;         /* read only */
+       unsigned long nr_free_files;    /* read only */
+       unsigned long max_files;                /* tunable */
+};
+
+struct inodes_stat_t {
+       long nr_inodes;
+       long nr_unused;
+       long dummy[5];          /* padding for sysctl ABI compatibility */
+};
+
+
+#define NR_FILE  8192  /* this can well be larger on a larger system */
+
+
+/*
+ * These are the fs-independent mount-flags: up to 32 flags are supported
+ */
+#define MS_RDONLY       1      /* Mount read-only */
+#define MS_NOSUID       2      /* Ignore suid and sgid bits */
+#define MS_NODEV        4      /* Disallow access to device special files */
+#define MS_NOEXEC       8      /* Disallow program execution */
+#define MS_SYNCHRONOUS 16      /* Writes are synced at once */
+#define MS_REMOUNT     32      /* Alter flags of a mounted FS */
+#define MS_MANDLOCK    64      /* Allow mandatory locks on an FS */
+#define MS_DIRSYNC     128     /* Directory modifications are synchronous */
+#define MS_NOATIME     1024    /* Do not update access times. */
+#define MS_NODIRATIME  2048    /* Do not update directory access times */
+#define MS_BIND                4096
+#define MS_MOVE                8192
+#define MS_REC         16384
+#define MS_VERBOSE     32768   /* War is peace. Verbosity is silence.
+                                  MS_VERBOSE is deprecated. */
+#define MS_SILENT      32768
+#define MS_POSIXACL    (1<<16) /* VFS does not apply the umask */
+#define MS_UNBINDABLE  (1<<17) /* change to unbindable */
+#define MS_PRIVATE     (1<<18) /* change to private */
+#define MS_SLAVE       (1<<19) /* change to slave */
+#define MS_SHARED      (1<<20) /* change to shared */
+#define MS_RELATIME    (1<<21) /* Update atime relative to mtime/ctime. */
+#define MS_KERNMOUNT   (1<<22) /* this is a kern_mount call */
+#define MS_I_VERSION   (1<<23) /* Update inode I_version field */
+#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
+#define MS_LAZYTIME    (1<<25) /* Update the on-disk [acm]times lazily */
+
+/* These sb flags are internal to the kernel */
+#define MS_NOSEC       (1<<28)
+#define MS_BORN                (1<<29)
+#define MS_ACTIVE      (1<<30)
+#define MS_NOUSER      (1<<31)
+
+/*
+ * Superblock flags that can be altered by MS_REMOUNT
+ */
+#define MS_RMT_MASK    (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\
+                        MS_LAZYTIME)
+
+/*
+ * Old magic mount flag and mask
+ */
+#define MS_MGC_VAL 0xC0ED0000
+#define MS_MGC_MSK 0xffff0000
+
+/* the read-only stuff doesn't really belong here, but any other place is
+   probably as bad and I don't want to create yet another include file. */
+
+#define BLKROSET   _IO(0x12,93)        /* set device read-only (0 = read-write) */
+#define BLKROGET   _IO(0x12,94)        /* get read-only status (0 = read_write) */
+#define BLKRRPART  _IO(0x12,95)        /* re-read partition table */
+#define BLKGETSIZE _IO(0x12,96)        /* return device size /512 (long *arg) */
+#define BLKFLSBUF  _IO(0x12,97)        /* flush buffer cache */
+#define BLKRASET   _IO(0x12,98)        /* set read ahead for block device */
+#define BLKRAGET   _IO(0x12,99)        /* get current read ahead setting */
+#define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
+#define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
+#define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
+#define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
+#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
+#if 0
+#define BLKPG      _IO(0x12,105)/* See blkpg.h */
+
+/* Some people are morons.  Do not use sizeof! */
+
+#define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */
+#define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */
+/* This was here just to show that the number is taken -
+   probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
+#endif
+/* A jump here: 108-111 have been used for various private purposes. */
+#define BLKBSZGET  _IOR(0x12,112,size_t)
+#define BLKBSZSET  _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)     /* return device size in bytes (u64 *arg) */
+#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
+#define BLKTRACESTART _IO(0x12,116)
+#define BLKTRACESTOP _IO(0x12,117)
+#define BLKTRACETEARDOWN _IO(0x12,118)
+#define BLKDISCARD _IO(0x12,119)
+#define BLKIOMIN _IO(0x12,120)
+#define BLKIOOPT _IO(0x12,121)
+#define BLKALIGNOFF _IO(0x12,122)
+#define BLKPBSZGET _IO(0x12,123)
+#define BLKDISCARDZEROES _IO(0x12,124)
+#define BLKSECDISCARD _IO(0x12,125)
+#define BLKROTATIONAL _IO(0x12,126)
+#define BLKZEROOUT _IO(0x12,127)
+
+#define BMAP_IOCTL 1           /* obsolete - kept for compatibility */
+#define FIBMAP    _IO(0x00,1)  /* bmap access */
+#define FIGETBSZ   _IO(0x00,2) /* get the block size used for bmap */
+#define FIFREEZE       _IOWR('X', 119, int)    /* Freeze */
+#define FITHAW         _IOWR('X', 120, int)    /* Thaw */
+#define FITRIM         _IOWR('X', 121, struct fstrim_range)    /* Trim */
+
+#define        FS_IOC_GETFLAGS                 _IOR('f', 1, long)
+#define        FS_IOC_SETFLAGS                 _IOW('f', 2, long)
+#define        FS_IOC_GETVERSION               _IOR('v', 1, long)
+#define        FS_IOC_SETVERSION               _IOW('v', 2, long)
+#define FS_IOC_FIEMAP                  _IOWR('f', 11, struct fiemap)
+#define FS_IOC32_GETFLAGS              _IOR('f', 1, int)
+#define FS_IOC32_SETFLAGS              _IOW('f', 2, int)
+#define FS_IOC32_GETVERSION            _IOR('v', 1, int)
+#define FS_IOC32_SETVERSION            _IOW('v', 2, int)
+
+/*
+ * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
+ */
+#define        FS_SECRM_FL                     0x00000001 /* Secure deletion */
+#define        FS_UNRM_FL                      0x00000002 /* Undelete */
+#define        FS_COMPR_FL                     0x00000004 /* Compress file */
+#define FS_SYNC_FL                     0x00000008 /* Synchronous updates */
+#define FS_IMMUTABLE_FL                        0x00000010 /* Immutable file */
+#define FS_APPEND_FL                   0x00000020 /* writes to file may only append */
+#define FS_NODUMP_FL                   0x00000040 /* do not dump file */
+#define FS_NOATIME_FL                  0x00000080 /* do not update atime */
+/* Reserved for compression usage... */
+#define FS_DIRTY_FL                    0x00000100
+#define FS_COMPRBLK_FL                 0x00000200 /* One or more compressed clusters */
+#define FS_NOCOMP_FL                   0x00000400 /* Don't compress */
+#define FS_ECOMPR_FL                   0x00000800 /* Compression error */
+/* End compression flags --- maybe not all used */
+#define FS_BTREE_FL                    0x00001000 /* btree format dir */
+#define FS_INDEX_FL                    0x00001000 /* hash-indexed directory */
+#define FS_IMAGIC_FL                   0x00002000 /* AFS directory */
+#define FS_JOURNAL_DATA_FL             0x00004000 /* Reserved for ext3 */
+#define FS_NOTAIL_FL                   0x00008000 /* file tail should not be merged */
+#define FS_DIRSYNC_FL                  0x00010000 /* dirsync behaviour (directories only) */
+#define FS_TOPDIR_FL                   0x00020000 /* Top of directory hierarchies*/
+#define FS_EXTENT_FL                   0x00080000 /* Extents */
+#define FS_DIRECTIO_FL                 0x00100000 /* Use direct i/o */
+#define FS_NOCOW_FL                    0x00800000 /* Do not cow file */
+#define FS_PROJINHERIT_FL              0x20000000 /* Create with parents projid */
+#define FS_RESERVED_FL                 0x80000000 /* reserved for ext2 lib */
+
+#define FS_FL_USER_VISIBLE             0x0003DFFF /* User visible flags */
+#define FS_FL_USER_MODIFIABLE          0x000380FF /* User modifiable flags */
+
+
+#define SYNC_FILE_RANGE_WAIT_BEFORE    1
+#define SYNC_FILE_RANGE_WRITE          2
+#define SYNC_FILE_RANGE_WAIT_AFTER     4
+
+#endif /* _LINUX_FS_H */
diff --git a/lib/libdss-include/linux/fsl_hypervisor.h b/lib/libdss-include/linux/fsl_hypervisor.h
new file mode 100644 (file)
index 0000000..2f908de
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Freescale hypervisor ioctl and kernel interface
+ *
+ * Copyright (C) 2008-2011 Freescale Semiconductor, Inc.
+ * Author: Timur Tabi <timur@freescale.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * This software is provided by Freescale Semiconductor "as is" and any
+ * express or implied warranties, including, but not limited to, the implied
+ * warranties of merchantability and fitness for a particular purpose are
+ * disclaimed. In no event shall Freescale Semiconductor be liable for any
+ * direct, indirect, incidental, special, exemplary, or consequential damages
+ * (including, but not limited to, procurement of substitute goods or services;
+ * loss of use, data, or profits; or business interruption) however caused and
+ * on any theory of liability, whether in contract, strict liability, or tort
+ * (including negligence or otherwise) arising in any way out of the use of this
+ * software, even if advised of the possibility of such damage.
+ *
+ * This file is used by the Freescale hypervisor management driver.  It can
+ * also be included by applications that need to communicate with the driver
+ * via the ioctl interface.
+ */
+
+#ifndef FSL_HYPERVISOR_H
+#define FSL_HYPERVISOR_H
+
+#include <linux/types.h>
+
+/**
+ * struct fsl_hv_ioctl_restart - restart a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to restart, or -1 for the
+ *             calling partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_RESTART
+ */
+struct fsl_hv_ioctl_restart {
+       __u32 ret;
+       __u32 partition;
+};
+
+/**
+ * struct fsl_hv_ioctl_status - get a partition's status
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to query, or -1 for the
+ *             calling partition
+ * @status: The returned status of the partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_GET_STATUS
+ *
+ * Values of 'status':
+ *    0 = Stopped
+ *    1 = Running
+ *    2 = Starting
+ *    3 = Stopping
+ */
+struct fsl_hv_ioctl_status {
+       __u32 ret;
+       __u32 partition;
+       __u32 status;
+};
+
+/**
+ * struct fsl_hv_ioctl_start - start a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to control
+ * @entry_point: The offset within the guest IMA to start execution
+ * @load: If non-zero, reload the partition's images before starting
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_START
+ */
+struct fsl_hv_ioctl_start {
+       __u32 ret;
+       __u32 partition;
+       __u32 entry_point;
+       __u32 load;
+};
+
+/**
+ * struct fsl_hv_ioctl_stop - stop a partition
+ * @ret: return error code from the hypervisor
+ * @partition: the ID of the partition to stop, or -1 for the calling
+ *             partition
+ *
+ * Used by FSL_HV_IOCTL_PARTITION_STOP
+ */
+struct fsl_hv_ioctl_stop {
+       __u32 ret;
+       __u32 partition;
+};
+
+/**
+ * struct fsl_hv_ioctl_memcpy - copy memory between partitions
+ * @ret: return error code from the hypervisor
+ * @source: the partition ID of the source partition, or -1 for this
+ *          partition
+ * @target: the partition ID of the target partition, or -1 for this
+ *          partition
+ * @reserved: reserved, must be set to 0
+ * @local_addr: user-space virtual address of a buffer in the local
+ *              partition
+ * @remote_addr: guest physical address of a buffer in the
+ *           remote partition
+ * @count: the number of bytes to copy.  Both the local and remote
+ *         buffers must be at least 'count' bytes long
+ *
+ * Used by FSL_HV_IOCTL_MEMCPY
+ *
+ * The 'local' partition is the partition that calls this ioctl.  The
+ * 'remote' partition is a different partition.  The data is copied from
+ * the 'source' paritition' to the 'target' partition.
+ *
+ * The buffer in the remote partition must be guest physically
+ * contiguous.
+ *
+ * This ioctl does not support copying memory between two remote
+ * partitions or within the same partition, so either 'source' or
+ * 'target' (but not both) must be -1.  In other words, either
+ *
+ *      source == local and target == remote
+ * or
+ *      source == remote and target == local
+ */
+struct fsl_hv_ioctl_memcpy {
+       __u32 ret;
+       __u32 source;
+       __u32 target;
+       __u32 reserved; /* padding to ensure local_vaddr is aligned */
+       __u64 local_vaddr;
+       __u64 remote_paddr;
+       __u64 count;
+};
+
+/**
+ * struct fsl_hv_ioctl_doorbell - ring a doorbell
+ * @ret: return error code from the hypervisor
+ * @doorbell: the handle of the doorbell to ring doorbell
+ *
+ * Used by FSL_HV_IOCTL_DOORBELL
+ */
+struct fsl_hv_ioctl_doorbell {
+       __u32 ret;
+       __u32 doorbell;
+};
+
+/**
+ * struct fsl_hv_ioctl_prop - get/set a device tree property
+ * @ret: return error code from the hypervisor
+ * @handle: handle of partition whose tree to access
+ * @path: virtual address of path name of node to access
+ * @propname: virtual address of name of property to access
+ * @propval: virtual address of property data buffer
+ * @proplen: Size of property data buffer
+ * @reserved: reserved, must be set to 0
+ *
+ * Used by FSL_HV_IOCTL_DOORBELL
+ */
+struct fsl_hv_ioctl_prop {
+       __u32 ret;
+       __u32 handle;
+       __u64 path;
+       __u64 propname;
+       __u64 propval;
+       __u32 proplen;
+       __u32 reserved; /* padding to ensure structure is aligned */
+};
+
+/* The ioctl type, documented in ioctl-number.txt */
+#define FSL_HV_IOCTL_TYPE      0xAF
+
+/* Restart another partition */
+#define FSL_HV_IOCTL_PARTITION_RESTART \
+       _IOWR(FSL_HV_IOCTL_TYPE, 1, struct fsl_hv_ioctl_restart)
+
+/* Get a partition's status */
+#define FSL_HV_IOCTL_PARTITION_GET_STATUS \
+       _IOWR(FSL_HV_IOCTL_TYPE, 2, struct fsl_hv_ioctl_status)
+
+/* Boot another partition */
+#define FSL_HV_IOCTL_PARTITION_START \
+       _IOWR(FSL_HV_IOCTL_TYPE, 3, struct fsl_hv_ioctl_start)
+
+/* Stop this or another partition */
+#define FSL_HV_IOCTL_PARTITION_STOP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 4, struct fsl_hv_ioctl_stop)
+
+/* Copy data from one partition to another */
+#define FSL_HV_IOCTL_MEMCPY \
+       _IOWR(FSL_HV_IOCTL_TYPE, 5, struct fsl_hv_ioctl_memcpy)
+
+/* Ring a doorbell */
+#define FSL_HV_IOCTL_DOORBELL \
+       _IOWR(FSL_HV_IOCTL_TYPE, 6, struct fsl_hv_ioctl_doorbell)
+
+/* Get a property from another guest's device tree */
+#define FSL_HV_IOCTL_GETPROP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 7, struct fsl_hv_ioctl_prop)
+
+/* Set a property in another guest's device tree */
+#define FSL_HV_IOCTL_SETPROP \
+       _IOWR(FSL_HV_IOCTL_TYPE, 8, struct fsl_hv_ioctl_prop)
+
+
+#endif /* FSL_HYPERVISOR_H */
diff --git a/lib/libdss-include/linux/fuse.h b/lib/libdss-include/linux/fuse.h
new file mode 100644 (file)
index 0000000..68c52e8
--- /dev/null
@@ -0,0 +1,757 @@
+/*
+    This file defines the kernel interface of FUSE
+    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
+
+    This program can be distributed under the terms of the GNU GPL.
+    See the file COPYING.
+
+    This -- and only this -- header file may also be distributed under
+    the terms of the BSD Licence as follows:
+
+    Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+*/
+
+/*
+ * This file defines the kernel interface of FUSE
+ *
+ * Protocol changelog:
+ *
+ * 7.9:
+ *  - new fuse_getattr_in input argument of GETATTR
+ *  - add lk_flags in fuse_lk_in
+ *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
+ *  - add blksize field to fuse_attr
+ *  - add file flags field to fuse_read_in and fuse_write_in
+ *
+ * 7.10
+ *  - add nonseekable open flag
+ *
+ * 7.11
+ *  - add IOCTL message
+ *  - add unsolicited notification support
+ *  - add POLL message and NOTIFY_POLL notification
+ *
+ * 7.12
+ *  - add umask flag to input argument of open, mknod and mkdir
+ *  - add notification messages for invalidation of inodes and
+ *    directory entries
+ *
+ * 7.13
+ *  - make max number of background requests and congestion threshold
+ *    tunables
+ *
+ * 7.14
+ *  - add splice support to fuse device
+ *
+ * 7.15
+ *  - add store notify
+ *  - add retrieve notify
+ *
+ * 7.16
+ *  - add BATCH_FORGET request
+ *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
+ *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
+ *  - add FUSE_IOCTL_32BIT flag
+ *
+ * 7.17
+ *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
+ *
+ * 7.18
+ *  - add FUSE_IOCTL_DIR flag
+ *  - add FUSE_NOTIFY_DELETE
+ *
+ * 7.19
+ *  - add FUSE_FALLOCATE
+ *
+ * 7.20
+ *  - add FUSE_AUTO_INVAL_DATA
+ *
+ * 7.21
+ *  - add FUSE_READDIRPLUS
+ *  - send the requested events in POLL request
+ *
+ * 7.22
+ *  - add FUSE_ASYNC_DIO
+ *
+ * 7.23
+ *  - add FUSE_WRITEBACK_CACHE
+ *  - add time_gran to fuse_init_out
+ *  - add reserved space to fuse_init_out
+ *  - add FATTR_CTIME
+ *  - add ctime and ctimensec to fuse_setattr_in
+ *  - add FUSE_RENAME2 request
+ *  - add FUSE_NO_OPEN_SUPPORT flag
+ */
+
+#ifndef _LINUX_FUSE_H
+#define _LINUX_FUSE_H
+
+#include <stdint.h>
+
+/*
+ * Version negotiation:
+ *
+ * Both the kernel and userspace send the version they support in the
+ * INIT request and reply respectively.
+ *
+ * If the major versions match then both shall use the smallest
+ * of the two minor versions for communication.
+ *
+ * If the kernel supports a larger major version, then userspace shall
+ * reply with the major version it supports, ignore the rest of the
+ * INIT message and expect a new INIT message from the kernel with a
+ * matching major version.
+ *
+ * If the library supports a larger major version, then it shall fall
+ * back to the major protocol version sent by the kernel for
+ * communication and reply with that major version (and an arbitrary
+ * supported minor version).
+ */
+
+/** Version number of this interface */
+#define FUSE_KERNEL_VERSION 7
+
+/** Minor version number of this interface */
+#define FUSE_KERNEL_MINOR_VERSION 23
+
+/** The node ID of the root inode */
+#define FUSE_ROOT_ID 1
+
+/* Make sure all structures are padded to 64bit boundary, so 32bit
+   userspace works under 64bit kernels */
+
+struct fuse_attr {
+       uint64_t        ino;
+       uint64_t        size;
+       uint64_t        blocks;
+       uint64_t        atime;
+       uint64_t        mtime;
+       uint64_t        ctime;
+       uint32_t        atimensec;
+       uint32_t        mtimensec;
+       uint32_t        ctimensec;
+       uint32_t        mode;
+       uint32_t        nlink;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        rdev;
+       uint32_t        blksize;
+       uint32_t        padding;
+};
+
+struct fuse_kstatfs {
+       uint64_t        blocks;
+       uint64_t        bfree;
+       uint64_t        bavail;
+       uint64_t        files;
+       uint64_t        ffree;
+       uint32_t        bsize;
+       uint32_t        namelen;
+       uint32_t        frsize;
+       uint32_t        padding;
+       uint32_t        spare[6];
+};
+
+struct fuse_file_lock {
+       uint64_t        start;
+       uint64_t        end;
+       uint32_t        type;
+       uint32_t        pid; /* tgid */
+};
+
+/**
+ * Bitmasks for fuse_setattr_in.valid
+ */
+#define FATTR_MODE     (1 << 0)
+#define FATTR_UID      (1 << 1)
+#define FATTR_GID      (1 << 2)
+#define FATTR_SIZE     (1 << 3)
+#define FATTR_ATIME    (1 << 4)
+#define FATTR_MTIME    (1 << 5)
+#define FATTR_FH       (1 << 6)
+#define FATTR_ATIME_NOW        (1 << 7)
+#define FATTR_MTIME_NOW        (1 << 8)
+#define FATTR_LOCKOWNER        (1 << 9)
+#define FATTR_CTIME    (1 << 10)
+
+/**
+ * Flags returned by the OPEN request
+ *
+ * FOPEN_DIRECT_IO: bypass page cache for this open file
+ * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
+ * FOPEN_NONSEEKABLE: the file is not seekable
+ */
+#define FOPEN_DIRECT_IO                (1 << 0)
+#define FOPEN_KEEP_CACHE       (1 << 1)
+#define FOPEN_NONSEEKABLE      (1 << 2)
+
+/**
+ * INIT request/reply flags
+ *
+ * FUSE_ASYNC_READ: asynchronous read requests
+ * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
+ * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
+ * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
+ * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
+ * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
+ * FUSE_DONT_MASK: don't apply umask to file mode on create operations
+ * FUSE_SPLICE_WRITE: kernel supports splice write on the device
+ * FUSE_SPLICE_MOVE: kernel supports splice move on the device
+ * FUSE_SPLICE_READ: kernel supports splice read on the device
+ * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
+ * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
+ * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
+ * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
+ * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
+ * FUSE_ASYNC_DIO: asynchronous direct I/O submission
+ * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
+ * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
+ */
+#define FUSE_ASYNC_READ                (1 << 0)
+#define FUSE_POSIX_LOCKS       (1 << 1)
+#define FUSE_FILE_OPS          (1 << 2)
+#define FUSE_ATOMIC_O_TRUNC    (1 << 3)
+#define FUSE_EXPORT_SUPPORT    (1 << 4)
+#define FUSE_BIG_WRITES                (1 << 5)
+#define FUSE_DONT_MASK         (1 << 6)
+#define FUSE_SPLICE_WRITE      (1 << 7)
+#define FUSE_SPLICE_MOVE       (1 << 8)
+#define FUSE_SPLICE_READ       (1 << 9)
+#define FUSE_FLOCK_LOCKS       (1 << 10)
+#define FUSE_HAS_IOCTL_DIR     (1 << 11)
+#define FUSE_AUTO_INVAL_DATA   (1 << 12)
+#define FUSE_DO_READDIRPLUS    (1 << 13)
+#define FUSE_READDIRPLUS_AUTO  (1 << 14)
+#define FUSE_ASYNC_DIO         (1 << 15)
+#define FUSE_WRITEBACK_CACHE   (1 << 16)
+#define FUSE_NO_OPEN_SUPPORT   (1 << 17)
+
+/**
+ * CUSE INIT request/reply flags
+ *
+ * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
+ */
+#define CUSE_UNRESTRICTED_IOCTL        (1 << 0)
+
+/**
+ * Release flags
+ */
+#define FUSE_RELEASE_FLUSH     (1 << 0)
+#define FUSE_RELEASE_FLOCK_UNLOCK      (1 << 1)
+
+/**
+ * Getattr flags
+ */
+#define FUSE_GETATTR_FH                (1 << 0)
+
+/**
+ * Lock flags
+ */
+#define FUSE_LK_FLOCK          (1 << 0)
+
+/**
+ * WRITE flags
+ *
+ * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
+ * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
+ */
+#define FUSE_WRITE_CACHE       (1 << 0)
+#define FUSE_WRITE_LOCKOWNER   (1 << 1)
+
+/**
+ * Read flags
+ */
+#define FUSE_READ_LOCKOWNER    (1 << 1)
+
+/**
+ * Ioctl flags
+ *
+ * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
+ * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
+ * FUSE_IOCTL_RETRY: retry with new iovecs
+ * FUSE_IOCTL_32BIT: 32bit ioctl
+ * FUSE_IOCTL_DIR: is a directory
+ *
+ * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
+ */
+#define FUSE_IOCTL_COMPAT      (1 << 0)
+#define FUSE_IOCTL_UNRESTRICTED        (1 << 1)
+#define FUSE_IOCTL_RETRY       (1 << 2)
+#define FUSE_IOCTL_32BIT       (1 << 3)
+#define FUSE_IOCTL_DIR         (1 << 4)
+
+#define FUSE_IOCTL_MAX_IOV     256
+
+/**
+ * Poll flags
+ *
+ * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
+ */
+#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
+
+enum fuse_opcode {
+       FUSE_LOOKUP        = 1,
+       FUSE_FORGET        = 2,  /* no reply */
+       FUSE_GETATTR       = 3,
+       FUSE_SETATTR       = 4,
+       FUSE_READLINK      = 5,
+       FUSE_SYMLINK       = 6,
+       FUSE_MKNOD         = 8,
+       FUSE_MKDIR         = 9,
+       FUSE_UNLINK        = 10,
+       FUSE_RMDIR         = 11,
+       FUSE_RENAME        = 12,
+       FUSE_LINK          = 13,
+       FUSE_OPEN          = 14,
+       FUSE_READ          = 15,
+       FUSE_WRITE         = 16,
+       FUSE_STATFS        = 17,
+       FUSE_RELEASE       = 18,
+       FUSE_FSYNC         = 20,
+       FUSE_SETXATTR      = 21,
+       FUSE_GETXATTR      = 22,
+       FUSE_LISTXATTR     = 23,
+       FUSE_REMOVEXATTR   = 24,
+       FUSE_FLUSH         = 25,
+       FUSE_INIT          = 26,
+       FUSE_OPENDIR       = 27,
+       FUSE_READDIR       = 28,
+       FUSE_RELEASEDIR    = 29,
+       FUSE_FSYNCDIR      = 30,
+       FUSE_GETLK         = 31,
+       FUSE_SETLK         = 32,
+       FUSE_SETLKW        = 33,
+       FUSE_ACCESS        = 34,
+       FUSE_CREATE        = 35,
+       FUSE_INTERRUPT     = 36,
+       FUSE_BMAP          = 37,
+       FUSE_DESTROY       = 38,
+       FUSE_IOCTL         = 39,
+       FUSE_POLL          = 40,
+       FUSE_NOTIFY_REPLY  = 41,
+       FUSE_BATCH_FORGET  = 42,
+       FUSE_FALLOCATE     = 43,
+       FUSE_READDIRPLUS   = 44,
+       FUSE_RENAME2       = 45,
+
+       /* CUSE specific operations */
+       CUSE_INIT          = 4096,
+};
+
+enum fuse_notify_code {
+       FUSE_NOTIFY_POLL   = 1,
+       FUSE_NOTIFY_INVAL_INODE = 2,
+       FUSE_NOTIFY_INVAL_ENTRY = 3,
+       FUSE_NOTIFY_STORE = 4,
+       FUSE_NOTIFY_RETRIEVE = 5,
+       FUSE_NOTIFY_DELETE = 6,
+       FUSE_NOTIFY_CODE_MAX,
+};
+
+/* The read buffer is required to be at least 8k, but may be much larger */
+#define FUSE_MIN_READ_BUFFER 8192
+
+#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
+
+struct fuse_entry_out {
+       uint64_t        nodeid;         /* Inode ID */
+       uint64_t        generation;     /* Inode generation: nodeid:gen must
+                                          be unique for the fs's lifetime */
+       uint64_t        entry_valid;    /* Cache timeout for the name */
+       uint64_t        attr_valid;     /* Cache timeout for the attributes */
+       uint32_t        entry_valid_nsec;
+       uint32_t        attr_valid_nsec;
+       struct fuse_attr attr;
+};
+
+struct fuse_forget_in {
+       uint64_t        nlookup;
+};
+
+struct fuse_forget_one {
+       uint64_t        nodeid;
+       uint64_t        nlookup;
+};
+
+struct fuse_batch_forget_in {
+       uint32_t        count;
+       uint32_t        dummy;
+};
+
+struct fuse_getattr_in {
+       uint32_t        getattr_flags;
+       uint32_t        dummy;
+       uint64_t        fh;
+};
+
+#define FUSE_COMPAT_ATTR_OUT_SIZE 96
+
+struct fuse_attr_out {
+       uint64_t        attr_valid;     /* Cache timeout for the attributes */
+       uint32_t        attr_valid_nsec;
+       uint32_t        dummy;
+       struct fuse_attr attr;
+};
+
+#define FUSE_COMPAT_MKNOD_IN_SIZE 8
+
+struct fuse_mknod_in {
+       uint32_t        mode;
+       uint32_t        rdev;
+       uint32_t        umask;
+       uint32_t        padding;
+};
+
+struct fuse_mkdir_in {
+       uint32_t        mode;
+       uint32_t        umask;
+};
+
+struct fuse_rename_in {
+       uint64_t        newdir;
+};
+
+struct fuse_rename2_in {
+       uint64_t        newdir;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+struct fuse_link_in {
+       uint64_t        oldnodeid;
+};
+
+struct fuse_setattr_in {
+       uint32_t        valid;
+       uint32_t        padding;
+       uint64_t        fh;
+       uint64_t        size;
+       uint64_t        lock_owner;
+       uint64_t        atime;
+       uint64_t        mtime;
+       uint64_t        ctime;
+       uint32_t        atimensec;
+       uint32_t        mtimensec;
+       uint32_t        ctimensec;
+       uint32_t        mode;
+       uint32_t        unused4;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        unused5;
+};
+
+struct fuse_open_in {
+       uint32_t        flags;
+       uint32_t        unused;
+};
+
+struct fuse_create_in {
+       uint32_t        flags;
+       uint32_t        mode;
+       uint32_t        umask;
+       uint32_t        padding;
+};
+
+struct fuse_open_out {
+       uint64_t        fh;
+       uint32_t        open_flags;
+       uint32_t        padding;
+};
+
+struct fuse_release_in {
+       uint64_t        fh;
+       uint32_t        flags;
+       uint32_t        release_flags;
+       uint64_t        lock_owner;
+};
+
+struct fuse_flush_in {
+       uint64_t        fh;
+       uint32_t        unused;
+       uint32_t        padding;
+       uint64_t        lock_owner;
+};
+
+struct fuse_read_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        read_flags;
+       uint64_t        lock_owner;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+#define FUSE_COMPAT_WRITE_IN_SIZE 24
+
+struct fuse_write_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        write_flags;
+       uint64_t        lock_owner;
+       uint32_t        flags;
+       uint32_t        padding;
+};
+
+struct fuse_write_out {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+#define FUSE_COMPAT_STATFS_SIZE 48
+
+struct fuse_statfs_out {
+       struct fuse_kstatfs st;
+};
+
+struct fuse_fsync_in {
+       uint64_t        fh;
+       uint32_t        fsync_flags;
+       uint32_t        padding;
+};
+
+struct fuse_setxattr_in {
+       uint32_t        size;
+       uint32_t        flags;
+};
+
+struct fuse_getxattr_in {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_getxattr_out {
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_lk_in {
+       uint64_t        fh;
+       uint64_t        owner;
+       struct fuse_file_lock lk;
+       uint32_t        lk_flags;
+       uint32_t        padding;
+};
+
+struct fuse_lk_out {
+       struct fuse_file_lock lk;
+};
+
+struct fuse_access_in {
+       uint32_t        mask;
+       uint32_t        padding;
+};
+
+struct fuse_init_in {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        max_readahead;
+       uint32_t        flags;
+};
+
+#define FUSE_COMPAT_INIT_OUT_SIZE 8
+#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
+
+struct fuse_init_out {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        max_readahead;
+       uint32_t        flags;
+       uint16_t        max_background;
+       uint16_t        congestion_threshold;
+       uint32_t        max_write;
+       uint32_t        time_gran;
+       uint32_t        unused[9];
+};
+
+#define CUSE_INIT_INFO_MAX 4096
+
+struct cuse_init_in {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        unused;
+       uint32_t        flags;
+};
+
+struct cuse_init_out {
+       uint32_t        major;
+       uint32_t        minor;
+       uint32_t        unused;
+       uint32_t        flags;
+       uint32_t        max_read;
+       uint32_t        max_write;
+       uint32_t        dev_major;              /* chardev major */
+       uint32_t        dev_minor;              /* chardev minor */
+       uint32_t        spare[10];
+};
+
+struct fuse_interrupt_in {
+       uint64_t        unique;
+};
+
+struct fuse_bmap_in {
+       uint64_t        block;
+       uint32_t        blocksize;
+       uint32_t        padding;
+};
+
+struct fuse_bmap_out {
+       uint64_t        block;
+};
+
+struct fuse_ioctl_in {
+       uint64_t        fh;
+       uint32_t        flags;
+       uint32_t        cmd;
+       uint64_t        arg;
+       uint32_t        in_size;
+       uint32_t        out_size;
+};
+
+struct fuse_ioctl_iovec {
+       uint64_t        base;
+       uint64_t        len;
+};
+
+struct fuse_ioctl_out {
+       int32_t         result;
+       uint32_t        flags;
+       uint32_t        in_iovs;
+       uint32_t        out_iovs;
+};
+
+struct fuse_poll_in {
+       uint64_t        fh;
+       uint64_t        kh;
+       uint32_t        flags;
+       uint32_t        events;
+};
+
+struct fuse_poll_out {
+       uint32_t        revents;
+       uint32_t        padding;
+};
+
+struct fuse_notify_poll_wakeup_out {
+       uint64_t        kh;
+};
+
+struct fuse_fallocate_in {
+       uint64_t        fh;
+       uint64_t        offset;
+       uint64_t        length;
+       uint32_t        mode;
+       uint32_t        padding;
+};
+
+struct fuse_in_header {
+       uint32_t        len;
+       uint32_t        opcode;
+       uint64_t        unique;
+       uint64_t        nodeid;
+       uint32_t        uid;
+       uint32_t        gid;
+       uint32_t        pid;
+       uint32_t        padding;
+};
+
+struct fuse_out_header {
+       uint32_t        len;
+       int32_t         error;
+       uint64_t        unique;
+};
+
+struct fuse_dirent {
+       uint64_t        ino;
+       uint64_t        off;
+       uint32_t        namelen;
+       uint32_t        type;
+       char name[];
+};
+
+#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
+#define FUSE_DIRENT_ALIGN(x) \
+       (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
+#define FUSE_DIRENT_SIZE(d) \
+       FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
+
+struct fuse_direntplus {
+       struct fuse_entry_out entry_out;
+       struct fuse_dirent dirent;
+};
+
+#define FUSE_NAME_OFFSET_DIRENTPLUS \
+       offsetof(struct fuse_direntplus, dirent.name)
+#define FUSE_DIRENTPLUS_SIZE(d) \
+       FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
+
+struct fuse_notify_inval_inode_out {
+       uint64_t        ino;
+       int64_t         off;
+       int64_t         len;
+};
+
+struct fuse_notify_inval_entry_out {
+       uint64_t        parent;
+       uint32_t        namelen;
+       uint32_t        padding;
+};
+
+struct fuse_notify_delete_out {
+       uint64_t        parent;
+       uint64_t        child;
+       uint32_t        namelen;
+       uint32_t        padding;
+};
+
+struct fuse_notify_store_out {
+       uint64_t        nodeid;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+struct fuse_notify_retrieve_out {
+       uint64_t        notify_unique;
+       uint64_t        nodeid;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        padding;
+};
+
+/* Matches the size of fuse_write_in */
+struct fuse_notify_retrieve_in {
+       uint64_t        dummy1;
+       uint64_t        offset;
+       uint32_t        size;
+       uint32_t        dummy2;
+       uint64_t        dummy3;
+       uint64_t        dummy4;
+};
+
+/* Device ioctls: */
+#define FUSE_DEV_IOC_CLONE     _IOR(229, 0, uint32_t)
+
+#endif /* _LINUX_FUSE_H */
diff --git a/lib/libdss-include/linux/futex.h b/lib/libdss-include/linux/futex.h
new file mode 100644 (file)
index 0000000..7a46ab9
--- /dev/null
@@ -0,0 +1,152 @@
+#ifndef _LINUX_FUTEX_H
+#define _LINUX_FUTEX_H
+
+
+#include <linux/types.h>
+
+/* Second argument to futex syscall */
+
+
+#define FUTEX_WAIT             0
+#define FUTEX_WAKE             1
+#define FUTEX_FD               2
+#define FUTEX_REQUEUE          3
+#define FUTEX_CMP_REQUEUE      4
+#define FUTEX_WAKE_OP          5
+#define FUTEX_LOCK_PI          6
+#define FUTEX_UNLOCK_PI                7
+#define FUTEX_TRYLOCK_PI       8
+#define FUTEX_WAIT_BITSET      9
+#define FUTEX_WAKE_BITSET      10
+#define FUTEX_WAIT_REQUEUE_PI  11
+#define FUTEX_CMP_REQUEUE_PI   12
+
+#define FUTEX_PRIVATE_FLAG     128
+#define FUTEX_CLOCK_REALTIME   256
+#define FUTEX_CMD_MASK         ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
+
+#define FUTEX_WAIT_PRIVATE     (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_PRIVATE     (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_REQUEUE_PRIVATE  (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_OP_PRIVATE  (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
+#define FUTEX_LOCK_PI_PRIVATE  (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_UNLOCK_PI_PRIVATE        (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAIT_BITSET_PRIVATE      (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAKE_BITSET_PRIVATE      (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
+#define FUTEX_WAIT_REQUEUE_PI_PRIVATE  (FUTEX_WAIT_REQUEUE_PI | \
+                                        FUTEX_PRIVATE_FLAG)
+#define FUTEX_CMP_REQUEUE_PI_PRIVATE   (FUTEX_CMP_REQUEUE_PI | \
+                                        FUTEX_PRIVATE_FLAG)
+
+/*
+ * Support for robust futexes: the kernel cleans up held futexes at
+ * thread exit time.
+ */
+
+/*
+ * Per-lock list entry - embedded in user-space locks, somewhere close
+ * to the futex field. (Note: user-space uses a double-linked list to
+ * achieve O(1) list add and remove, but the kernel only needs to know
+ * about the forward link)
+ *
+ * NOTE: this structure is part of the syscall ABI, and must not be
+ * changed.
+ */
+struct robust_list {
+       struct robust_list *next;
+};
+
+/*
+ * Per-thread list head:
+ *
+ * NOTE: this structure is part of the syscall ABI, and must only be
+ * changed if the change is first communicated with the glibc folks.
+ * (When an incompatible change is done, we'll increase the structure
+ *  size, which glibc will detect)
+ */
+struct robust_list_head {
+       /*
+        * The head of the list. Points back to itself if empty:
+        */
+       struct robust_list list;
+
+       /*
+        * This relative offset is set by user-space, it gives the kernel
+        * the relative position of the futex field to examine. This way
+        * we keep userspace flexible, to freely shape its data-structure,
+        * without hardcoding any particular offset into the kernel:
+        */
+       long futex_offset;
+
+       /*
+        * The death of the thread may race with userspace setting
+        * up a lock's links. So to handle this race, userspace first
+        * sets this field to the address of the to-be-taken lock,
+        * then does the lock acquire, and then adds itself to the
+        * list, and then clears this field. Hence the kernel will
+        * always have full knowledge of all locks that the thread
+        * _might_ have taken. We check the owner TID in any case,
+        * so only truly owned locks will be handled.
+        */
+       struct robust_list *list_op_pending;
+};
+
+/*
+ * Are there any waiters for this robust futex:
+ */
+#define FUTEX_WAITERS          0x80000000
+
+/*
+ * The kernel signals via this bit that a thread holding a futex
+ * has exited without unlocking the futex. The kernel also does
+ * a FUTEX_WAKE on such futexes, after setting the bit, to wake
+ * up any possible waiters:
+ */
+#define FUTEX_OWNER_DIED       0x40000000
+
+/*
+ * The rest of the robust-futex field is for the TID:
+ */
+#define FUTEX_TID_MASK         0x3fffffff
+
+/*
+ * This limit protects against a deliberately circular list.
+ * (Not worth introducing an rlimit for it)
+ */
+#define ROBUST_LIST_LIMIT      2048
+
+/*
+ * bitset with all bits set for the FUTEX_xxx_BITSET OPs to request a
+ * match of any bit.
+ */
+#define FUTEX_BITSET_MATCH_ANY 0xffffffff
+
+
+#define FUTEX_OP_SET           0       /* *(int *)UADDR2 = OPARG; */
+#define FUTEX_OP_ADD           1       /* *(int *)UADDR2 += OPARG; */
+#define FUTEX_OP_OR            2       /* *(int *)UADDR2 |= OPARG; */
+#define FUTEX_OP_ANDN          3       /* *(int *)UADDR2 &= ~OPARG; */
+#define FUTEX_OP_XOR           4       /* *(int *)UADDR2 ^= OPARG; */
+
+#define FUTEX_OP_OPARG_SHIFT   8       /* Use (1 << OPARG) instead of OPARG.  */
+
+#define FUTEX_OP_CMP_EQ                0       /* if (oldval == CMPARG) wake */
+#define FUTEX_OP_CMP_NE                1       /* if (oldval != CMPARG) wake */
+#define FUTEX_OP_CMP_LT                2       /* if (oldval < CMPARG) wake */
+#define FUTEX_OP_CMP_LE                3       /* if (oldval <= CMPARG) wake */
+#define FUTEX_OP_CMP_GT                4       /* if (oldval > CMPARG) wake */
+#define FUTEX_OP_CMP_GE                5       /* if (oldval >= CMPARG) wake */
+
+/* FUTEX_WAKE_OP will perform atomically
+   int oldval = *(int *)UADDR2;
+   *(int *)UADDR2 = oldval OP OPARG;
+   if (oldval CMP CMPARG)
+     wake UADDR2;  */
+
+#define FUTEX_OP(op, oparg, cmp, cmparg) \
+  (((op & 0xf) << 28) | ((cmp & 0xf) << 24)            \
+   | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
+
+#endif /* _LINUX_FUTEX_H */
diff --git a/lib/libdss-include/linux/gameport.h b/lib/libdss-include/linux/gameport.h
new file mode 100644 (file)
index 0000000..34246b7
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _GAMEPORT_H
+#define _GAMEPORT_H
+
+
+
+#define GAMEPORT_MODE_DISABLED         0
+#define GAMEPORT_MODE_RAW              1
+#define GAMEPORT_MODE_COOKED           2
+
+#define GAMEPORT_ID_VENDOR_ANALOG      0x0001
+#define GAMEPORT_ID_VENDOR_MADCATZ     0x0002
+#define GAMEPORT_ID_VENDOR_LOGITECH    0x0003
+#define GAMEPORT_ID_VENDOR_CREATIVE    0x0004
+#define GAMEPORT_ID_VENDOR_GENIUS      0x0005
+#define GAMEPORT_ID_VENDOR_INTERACT    0x0006
+#define GAMEPORT_ID_VENDOR_MICROSOFT   0x0007
+#define GAMEPORT_ID_VENDOR_THRUSTMASTER        0x0008
+#define GAMEPORT_ID_VENDOR_GRAVIS      0x0009
+#define GAMEPORT_ID_VENDOR_GUILLEMOT   0x000a
+
+#endif /* _GAMEPORT_H */
diff --git a/lib/libdss-include/linux/gen_stats.h b/lib/libdss-include/linux/gen_stats.h
new file mode 100644 (file)
index 0000000..6487317
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef __LINUX_GEN_STATS_H
+#define __LINUX_GEN_STATS_H
+
+#include <linux/types.h>
+
+enum {
+       TCA_STATS_UNSPEC,
+       TCA_STATS_BASIC,
+       TCA_STATS_RATE_EST,
+       TCA_STATS_QUEUE,
+       TCA_STATS_APP,
+       TCA_STATS_RATE_EST64,
+       __TCA_STATS_MAX,
+};
+#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
+
+/**
+ * struct gnet_stats_basic - byte/packet throughput statistics
+ * @bytes: number of seen bytes
+ * @packets: number of seen packets
+ */
+struct gnet_stats_basic {
+       __u64   bytes;
+       __u32   packets;
+};
+struct gnet_stats_basic_packed {
+       __u64   bytes;
+       __u32   packets;
+} __attribute__ ((packed));
+
+/**
+ * struct gnet_stats_rate_est - rate estimator
+ * @bps: current byte rate
+ * @pps: current packet rate
+ */
+struct gnet_stats_rate_est {
+       __u32   bps;
+       __u32   pps;
+};
+
+/**
+ * struct gnet_stats_rate_est64 - rate estimator
+ * @bps: current byte rate
+ * @pps: current packet rate
+ */
+struct gnet_stats_rate_est64 {
+       __u64   bps;
+       __u64   pps;
+};
+
+/**
+ * struct gnet_stats_queue - queuing statistics
+ * @qlen: queue length
+ * @backlog: backlog size of queue
+ * @drops: number of dropped packets
+ * @requeues: number of requeues
+ * @overlimits: number of enqueues over the limit
+ */
+struct gnet_stats_queue {
+       __u32   qlen;
+       __u32   backlog;
+       __u32   drops;
+       __u32   requeues;
+       __u32   overlimits;
+};
+
+/**
+ * struct gnet_estimator - rate estimator configuration
+ * @interval: sampling period
+ * @ewma_log: the log of measurement window weight
+ */
+struct gnet_estimator {
+       signed char     interval;
+       unsigned char   ewma_log;
+};
+
+
+#endif /* __LINUX_GEN_STATS_H */
diff --git a/lib/libdss-include/linux/genetlink.h b/lib/libdss-include/linux/genetlink.h
new file mode 100644 (file)
index 0000000..e792092
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef __LINUX_GENERIC_NETLINK_H
+#define __LINUX_GENERIC_NETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+#define GENL_NAMSIZ    16      /* length of family name */
+
+#define GENL_MIN_ID    NLMSG_MIN_TYPE
+#define GENL_MAX_ID    1023
+
+struct genlmsghdr {
+       __u8    cmd;
+       __u8    version;
+       __u16   reserved;
+};
+
+#define GENL_HDRLEN    NLMSG_ALIGN(sizeof(struct genlmsghdr))
+
+#define GENL_ADMIN_PERM                0x01
+#define GENL_CMD_CAP_DO                0x02
+#define GENL_CMD_CAP_DUMP      0x04
+#define GENL_CMD_CAP_HASPOL    0x08
+#define GENL_UNS_ADMIN_PERM    0x10
+
+/*
+ * List of reserved static generic netlink identifiers:
+ */
+#define GENL_ID_GENERATE       0
+#define GENL_ID_CTRL           NLMSG_MIN_TYPE
+#define GENL_ID_VFS_DQUOT      (NLMSG_MIN_TYPE + 1)
+#define GENL_ID_PMCRAID                (NLMSG_MIN_TYPE + 2)
+
+/**************************************************************************
+ * Controller
+ **************************************************************************/
+
+enum {
+       CTRL_CMD_UNSPEC,
+       CTRL_CMD_NEWFAMILY,
+       CTRL_CMD_DELFAMILY,
+       CTRL_CMD_GETFAMILY,
+       CTRL_CMD_NEWOPS,
+       CTRL_CMD_DELOPS,
+       CTRL_CMD_GETOPS,
+       CTRL_CMD_NEWMCAST_GRP,
+       CTRL_CMD_DELMCAST_GRP,
+       CTRL_CMD_GETMCAST_GRP, /* unused */
+       __CTRL_CMD_MAX,
+};
+
+#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
+
+enum {
+       CTRL_ATTR_UNSPEC,
+       CTRL_ATTR_FAMILY_ID,
+       CTRL_ATTR_FAMILY_NAME,
+       CTRL_ATTR_VERSION,
+       CTRL_ATTR_HDRSIZE,
+       CTRL_ATTR_MAXATTR,
+       CTRL_ATTR_OPS,
+       CTRL_ATTR_MCAST_GROUPS,
+       __CTRL_ATTR_MAX,
+};
+
+#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
+
+enum {
+       CTRL_ATTR_OP_UNSPEC,
+       CTRL_ATTR_OP_ID,
+       CTRL_ATTR_OP_FLAGS,
+       __CTRL_ATTR_OP_MAX,
+};
+
+#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
+
+enum {
+       CTRL_ATTR_MCAST_GRP_UNSPEC,
+       CTRL_ATTR_MCAST_GRP_NAME,
+       CTRL_ATTR_MCAST_GRP_ID,
+       __CTRL_ATTR_MCAST_GRP_MAX,
+};
+
+#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
+
+
+#endif /* __LINUX_GENERIC_NETLINK_H */
diff --git a/lib/libdss-include/linux/gfs2_ondisk.h b/lib/libdss-include/linux/gfs2_ondisk.h
new file mode 100644 (file)
index 0000000..792690a
--- /dev/null
@@ -0,0 +1,479 @@
+/*
+ * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ */
+
+#ifndef __GFS2_ONDISK_DOT_H__
+#define __GFS2_ONDISK_DOT_H__
+
+#include <linux/types.h>
+
+#define GFS2_MAGIC             0x01161970
+#define GFS2_BASIC_BLOCK       512
+#define GFS2_BASIC_BLOCK_SHIFT 9
+
+/* Lock numbers of the LM_TYPE_NONDISK type */
+
+#define GFS2_MOUNT_LOCK                0
+#define GFS2_LIVE_LOCK         1
+#define GFS2_FREEZE_LOCK       2
+#define GFS2_RENAME_LOCK       3
+#define GFS2_CONTROL_LOCK      4
+#define GFS2_MOUNTED_LOCK      5
+
+/* Format numbers for various metadata types */
+
+#define GFS2_FORMAT_NONE       0
+#define GFS2_FORMAT_SB         100
+#define GFS2_FORMAT_RG         200
+#define GFS2_FORMAT_RB         300
+#define GFS2_FORMAT_DI         400
+#define GFS2_FORMAT_IN         500
+#define GFS2_FORMAT_LF         600
+#define GFS2_FORMAT_JD         700
+#define GFS2_FORMAT_LH         800
+#define GFS2_FORMAT_LD         900
+#define GFS2_FORMAT_LB         1000
+#define GFS2_FORMAT_EA         1600
+#define GFS2_FORMAT_ED         1700
+#define GFS2_FORMAT_QC         1400
+/* These are format numbers for entities contained in files */
+#define GFS2_FORMAT_RI         1100
+#define GFS2_FORMAT_DE         1200
+#define GFS2_FORMAT_QU         1500
+/* These are part of the superblock */
+#define GFS2_FORMAT_FS         1801
+#define GFS2_FORMAT_MULTI      1900
+
+/*
+ * An on-disk inode number
+ */
+
+struct gfs2_inum {
+       __be64 no_formal_ino;
+       __be64 no_addr;
+};
+
+/*
+ * Generic metadata head structure
+ * Every inplace buffer logged in the journal must start with this.
+ */
+
+#define GFS2_METATYPE_NONE     0
+#define GFS2_METATYPE_SB       1
+#define GFS2_METATYPE_RG       2
+#define GFS2_METATYPE_RB       3
+#define GFS2_METATYPE_DI       4
+#define GFS2_METATYPE_IN       5
+#define GFS2_METATYPE_LF       6
+#define GFS2_METATYPE_JD       7
+#define GFS2_METATYPE_LH       8
+#define GFS2_METATYPE_LD       9
+#define GFS2_METATYPE_LB       12
+#define GFS2_METATYPE_EA       10
+#define GFS2_METATYPE_ED       11
+#define GFS2_METATYPE_QC       14
+
+struct gfs2_meta_header {
+       __be32 mh_magic;
+       __be32 mh_type;
+       __be64 __pad0;          /* Was generation number in gfs1 */
+       __be32 mh_format;
+       /* This union is to keep userspace happy */
+       union {
+               __be32 mh_jid;          /* Was incarnation number in gfs1 */
+               __be32 __pad1;
+       };
+};
+
+/*
+ * super-block structure
+ *
+ * It's probably good if SIZEOF_SB <= GFS2_BASIC_BLOCK (512 bytes)
+ *
+ * Order is important, need to be able to read old superblocks to do on-disk
+ * version upgrades.
+ */
+
+/* Address of superblock in GFS2 basic blocks */
+#define GFS2_SB_ADDR           128
+
+/* The lock number for the superblock (must be zero) */
+#define GFS2_SB_LOCK           0
+
+/* Requirement:  GFS2_LOCKNAME_LEN % 8 == 0
+   Includes: the fencing zero at the end */
+#define GFS2_LOCKNAME_LEN      64
+
+struct gfs2_sb {
+       struct gfs2_meta_header sb_header;
+
+       __be32 sb_fs_format;
+       __be32 sb_multihost_format;
+       __u32  __pad0;  /* Was superblock flags in gfs1 */
+
+       __be32 sb_bsize;
+       __be32 sb_bsize_shift;
+       __u32 __pad1;   /* Was journal segment size in gfs1 */
+
+       struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
+       struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
+       struct gfs2_inum sb_root_dir;
+
+       char sb_lockproto[GFS2_LOCKNAME_LEN];
+       char sb_locktable[GFS2_LOCKNAME_LEN];
+
+       struct gfs2_inum __pad3; /* Was quota inode in gfs1 */
+       struct gfs2_inum __pad4; /* Was licence inode in gfs1 */
+#define GFS2_HAS_UUID 1
+       __u8 sb_uuid[16]; /* The UUID, maybe 0 for backwards compat */
+};
+
+/*
+ * resource index structure
+ */
+
+struct gfs2_rindex {
+       __be64 ri_addr; /* grp block disk address */
+       __be32 ri_length;       /* length of rgrp header in fs blocks */
+       __u32 __pad;
+
+       __be64 ri_data0;        /* first data location */
+       __be32 ri_data; /* num of data blocks in rgrp */
+
+       __be32 ri_bitbytes;     /* number of bytes in data bitmaps */
+
+       __u8 ri_reserved[64];
+};
+
+/*
+ * resource group header structure
+ */
+
+/* Number of blocks per byte in rgrp */
+#define GFS2_NBBY              4
+#define GFS2_BIT_SIZE          2
+#define GFS2_BIT_MASK          0x00000003
+
+#define GFS2_BLKST_FREE                0
+#define GFS2_BLKST_USED                1
+#define GFS2_BLKST_UNLINKED    2
+#define GFS2_BLKST_DINODE      3
+
+#define GFS2_RGF_JOURNAL       0x00000001
+#define GFS2_RGF_METAONLY      0x00000002
+#define GFS2_RGF_DATAONLY      0x00000004
+#define GFS2_RGF_NOALLOC       0x00000008
+#define GFS2_RGF_TRIMMED       0x00000010
+
+struct gfs2_rgrp_lvb {
+       __be32 rl_magic;
+       __be32 rl_flags;
+       __be32 rl_free;
+       __be32 rl_dinodes;
+       __be64 rl_igeneration;
+       __be32 rl_unlinked;
+       __be32 __pad;
+};
+
+struct gfs2_rgrp {
+       struct gfs2_meta_header rg_header;
+
+       __be32 rg_flags;
+       __be32 rg_free;
+       __be32 rg_dinodes;
+       __be32 __pad;
+       __be64 rg_igeneration;
+
+       __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */
+};
+
+/*
+ * quota structure
+ */
+
+struct gfs2_quota {
+       __be64 qu_limit;
+       __be64 qu_warn;
+       __be64 qu_value;
+       __u8 qu_reserved[64];
+};
+
+/*
+ * dinode structure
+ */
+
+#define GFS2_MAX_META_HEIGHT   10
+#define GFS2_DIR_MAX_DEPTH     17
+
+#define DT2IF(dt) (((dt) << 12) & S_IFMT)
+#define IF2DT(sif) (((sif) & S_IFMT) >> 12)
+
+enum {
+       gfs2fl_Jdata            = 0,
+       gfs2fl_ExHash           = 1,
+       gfs2fl_Unused           = 2,
+       gfs2fl_EaIndirect       = 3,
+       gfs2fl_Directio         = 4,
+       gfs2fl_Immutable        = 5,
+       gfs2fl_AppendOnly       = 6,
+       gfs2fl_NoAtime          = 7,
+       gfs2fl_Sync             = 8,
+       gfs2fl_System           = 9,
+       gfs2fl_TopLevel         = 10,
+       gfs2fl_TruncInProg      = 29,
+       gfs2fl_InheritDirectio  = 30,
+       gfs2fl_InheritJdata     = 31,
+};
+
+/* Dinode flags */
+#define GFS2_DIF_JDATA                 0x00000001
+#define GFS2_DIF_EXHASH                        0x00000002
+#define GFS2_DIF_UNUSED                        0x00000004  /* only in gfs1 */
+#define GFS2_DIF_EA_INDIRECT           0x00000008
+#define GFS2_DIF_DIRECTIO              0x00000010
+#define GFS2_DIF_IMMUTABLE             0x00000020
+#define GFS2_DIF_APPENDONLY            0x00000040
+#define GFS2_DIF_NOATIME               0x00000080
+#define GFS2_DIF_SYNC                  0x00000100
+#define GFS2_DIF_SYSTEM                        0x00000200 /* New in gfs2 */
+#define GFS2_DIF_TOPDIR                        0x00000400 /* New in gfs2 */
+#define GFS2_DIF_TRUNC_IN_PROG         0x20000000 /* New in gfs2 */
+#define GFS2_DIF_INHERIT_DIRECTIO      0x40000000 /* only in gfs1 */
+#define GFS2_DIF_INHERIT_JDATA         0x80000000
+
+struct gfs2_dinode {
+       struct gfs2_meta_header di_header;
+
+       struct gfs2_inum di_num;
+
+       __be32 di_mode; /* mode of file */
+       __be32 di_uid;  /* owner's user id */
+       __be32 di_gid;  /* owner's group id */
+       __be32 di_nlink;        /* number of links to this file */
+       __be64 di_size; /* number of bytes in file */
+       __be64 di_blocks;       /* number of blocks in file */
+       __be64 di_atime;        /* time last accessed */
+       __be64 di_mtime;        /* time last modified */
+       __be64 di_ctime;        /* time last changed */
+       __be32 di_major;        /* device major number */
+       __be32 di_minor;        /* device minor number */
+
+       /* This section varies from gfs1. Padding added to align with
+         * remainder of dinode
+        */
+       __be64 di_goal_meta;    /* rgrp to alloc from next */
+       __be64 di_goal_data;    /* data block goal */
+       __be64 di_generation;   /* generation number for NFS */
+
+       __be32 di_flags;        /* GFS2_DIF_... */
+       __be32 di_payload_format;  /* GFS2_FORMAT_... */
+       __u16 __pad1;   /* Was ditype in gfs1 */
+       __be16 di_height;       /* height of metadata */
+       __u32 __pad2;   /* Unused incarnation number from gfs1 */
+
+       /* These only apply to directories  */
+       __u16 __pad3;   /* Padding */
+       __be16 di_depth;        /* Number of bits in the table */
+       __be32 di_entries;      /* The number of entries in the directory */
+
+       struct gfs2_inum __pad4; /* Unused even in current gfs1 */
+
+       __be64 di_eattr;        /* extended attribute block number */
+       __be32 di_atime_nsec;   /* nsec portion of atime */
+       __be32 di_mtime_nsec;   /* nsec portion of mtime */
+       __be32 di_ctime_nsec;   /* nsec portion of ctime */
+
+       __u8 di_reserved[44];
+};
+
+/*
+ * directory structure - many of these per directory file
+ */
+
+#define GFS2_FNAMESIZE         255
+#define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7)
+
+struct gfs2_dirent {
+       struct gfs2_inum de_inum;
+       __be32 de_hash;
+       __be16 de_rec_len;
+       __be16 de_name_len;
+       __be16 de_type;
+       union {
+               __u8 __pad[14];
+               struct {
+                       __be16 de_rahead;
+                       __u8 pad2[12];
+               };
+       };
+};
+
+/*
+ * Header of leaf directory nodes
+ */
+
+struct gfs2_leaf {
+       struct gfs2_meta_header lf_header;
+
+       __be16 lf_depth;                /* Depth of leaf */
+       __be16 lf_entries;              /* Number of dirents in leaf */
+       __be32 lf_dirent_format;        /* Format of the dirents */
+       __be64 lf_next;                 /* Next leaf, if overflow */
+
+       union {
+               __u8 lf_reserved[64];
+               struct {
+                       __be64 lf_inode;        /* Dir inode number */
+                       __be32 lf_dist;         /* Dist from inode on chain */
+                       __be32 lf_nsec;         /* Last ins/del usecs */
+                       __be64 lf_sec;          /* Last ins/del in secs */
+                       __u8 lf_reserved2[40];
+               };
+       };
+};
+
+/*
+ * Extended attribute header format
+ *
+ * This works in a similar way to dirents. There is a fixed size header
+ * followed by a variable length section made up of the name and the
+ * associated data. In the case of a "stuffed" entry, the value is
+ * __inline__ directly after the name, the ea_num_ptrs entry will be
+ * zero in that case. For non-"stuffed" entries, there will be
+ * a set of pointers (aligned to 8 byte boundary) to the block(s)
+ * containing the value.
+ *
+ * The blocks containing the values and the blocks containing the
+ * extended attribute headers themselves all start with the common
+ * metadata header. Each inode, if it has extended attributes, will
+ * have either a single block containing the extended attribute headers
+ * or a single indirect block pointing to blocks containing the
+ * extended attribute headers.
+ *
+ * The maximum size of the data part of an extended attribute is 64k
+ * so the number of blocks required depends upon block size. Since the
+ * block size also determines the number of pointers in an indirect
+ * block, its a fairly complicated calculation to work out the maximum
+ * number of blocks that an inode may have relating to extended attributes.
+ *
+ */
+
+#define GFS2_EA_MAX_NAME_LEN   255
+#define GFS2_EA_MAX_DATA_LEN   65536
+
+#define GFS2_EATYPE_UNUSED     0
+#define GFS2_EATYPE_USR                1
+#define GFS2_EATYPE_SYS                2
+#define GFS2_EATYPE_SECURITY   3
+
+#define GFS2_EATYPE_LAST       3
+#define GFS2_EATYPE_VALID(x)   ((x) <= GFS2_EATYPE_LAST)
+
+#define GFS2_EAFLAG_LAST       0x01    /* last ea in block */
+
+struct gfs2_ea_header {
+       __be32 ea_rec_len;
+       __be32 ea_data_len;
+       __u8 ea_name_len;       /* no NULL pointer after the string */
+       __u8 ea_type;           /* GFS2_EATYPE_... */
+       __u8 ea_flags;          /* GFS2_EAFLAG_... */
+       __u8 ea_num_ptrs;
+       __u32 __pad;
+};
+
+/*
+ * Log header structure
+ */
+
+#define GFS2_LOG_HEAD_UNMOUNT  0x00000001      /* log is clean */
+
+struct gfs2_log_header {
+       struct gfs2_meta_header lh_header;
+
+       __be64 lh_sequence;     /* Sequence number of this transaction */
+       __be32 lh_flags;        /* GFS2_LOG_HEAD_... */
+       __be32 lh_tail;         /* Block number of log tail */
+       __be32 lh_blkno;
+       __be32 lh_hash;
+};
+
+/*
+ * Log type descriptor
+ */
+
+#define GFS2_LOG_DESC_METADATA 300
+/* ld_data1 is the number of metadata blocks in the descriptor.
+   ld_data2 is unused. */
+
+#define GFS2_LOG_DESC_REVOKE   301
+/* ld_data1 is the number of revoke blocks in the descriptor.
+   ld_data2 is unused. */
+
+#define GFS2_LOG_DESC_JDATA    302
+/* ld_data1 is the number of data blocks in the descriptor.
+   ld_data2 is unused. */
+
+struct gfs2_log_descriptor {
+       struct gfs2_meta_header ld_header;
+
+       __be32 ld_type;         /* GFS2_LOG_DESC_... */
+       __be32 ld_length;       /* Number of buffers in this chunk */
+       __be32 ld_data1;        /* descriptor-specific field */
+       __be32 ld_data2;        /* descriptor-specific field */
+
+       __u8 ld_reserved[32];
+};
+
+/*
+ * Inum Range
+ * Describe a range of formal inode numbers allocated to
+ * one machine to assign to inodes.
+ */
+
+#define GFS2_INUM_QUANTUM      1048576
+
+struct gfs2_inum_range {
+       __be64 ir_start;
+       __be64 ir_length;
+};
+
+/*
+ * Statfs change
+ * Describes an change to the pool of free and allocated
+ * blocks.
+ */
+
+struct gfs2_statfs_change {
+       __be64 sc_total;
+       __be64 sc_free;
+       __be64 sc_dinodes;
+};
+
+/*
+ * Quota change
+ * Describes an allocation change for a particular
+ * user or group.
+ */
+
+#define GFS2_QCF_USER          0x00000001
+
+struct gfs2_quota_change {
+       __be64 qc_change;
+       __be32 qc_flags;        /* GFS2_QCF_... */
+       __be32 qc_id;
+};
+
+struct gfs2_quota_lvb {
+        __be32 qb_magic;
+        __u32 __pad;
+        __be64 qb_limit;      /* Hard limit of # blocks to alloc */
+        __be64 qb_warn;       /* Warn user when alloc is above this # */
+        __be64 qb_value;       /* Current # blocks allocated */
+};
+
+#endif /* __GFS2_ONDISK_DOT_H__ */
diff --git a/lib/libdss-include/linux/gigaset_dev.h b/lib/libdss-include/linux/gigaset_dev.h
new file mode 100644 (file)
index 0000000..258ba82
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * interface to user space for the gigaset driver
+ *
+ * Copyright (c) 2004 by Hansjoerg Lipp <hjlipp@web.de>
+ *
+ * =====================================================================
+ *    This program is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU General Public License as
+ *    published by the Free Software Foundation; either version 2 of
+ *    the License, or (at your option) any later version.
+ * =====================================================================
+ */
+
+#ifndef GIGASET_INTERFACE_H
+#define GIGASET_INTERFACE_H
+
+#include <linux/ioctl.h>
+
+/* The magic IOCTL value for this interface. */
+#define GIGASET_IOCTL 0x47
+
+/* enable/disable device control via character device (lock out ISDN subsys) */
+#define GIGASET_REDIR    _IOWR(GIGASET_IOCTL, 0, int)
+
+/* enable adapter configuration mode (M10x only) */
+#define GIGASET_CONFIG   _IOWR(GIGASET_IOCTL, 1, int)
+
+/* set break characters (M105 only) */
+#define GIGASET_BRKCHARS _IOW(GIGASET_IOCTL, 2, unsigned char[6])
+
+/* get version information selected by arg[0] */
+#define GIGASET_VERSION  _IOWR(GIGASET_IOCTL, 3, unsigned[4])
+/* values for GIGASET_VERSION arg[0] */
+#define GIGVER_DRIVER 0                /* get driver version */
+#define GIGVER_COMPAT 1                /* get interface compatibility version */
+#define GIGVER_FWBASE 2                /* get base station firmware version */
+
+#endif
diff --git a/lib/libdss-include/linux/gsmmux.h b/lib/libdss-include/linux/gsmmux.h
new file mode 100644 (file)
index 0000000..ab055d8
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef _LINUX_GSMMUX_H
+#define _LINUX_GSMMUX_H
+
+#include <linux/if.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+struct gsm_config
+{
+       unsigned int adaption;
+       unsigned int encapsulation;
+       unsigned int initiator;
+       unsigned int t1;
+       unsigned int t2;
+       unsigned int t3;
+       unsigned int n2;
+       unsigned int mru;
+       unsigned int mtu;
+       unsigned int k;
+       unsigned int i;
+       unsigned int unused[8];         /* Padding for expansion without
+                                          breaking stuff */
+};
+
+#define GSMIOC_GETCONF         _IOR('G', 0, struct gsm_config)
+#define GSMIOC_SETCONF         _IOW('G', 1, struct gsm_config)
+
+struct gsm_netconfig {
+       unsigned int adaption;  /* Adaption to use in network mode */
+       unsigned short protocol;/* Protocol to use - only ETH_P_IP supported */
+       unsigned short unused2;
+       char if_name[IFNAMSIZ]; /* interface name format string */
+       __u8 unused[28];        /* For future use */
+};
+
+#define GSMIOC_ENABLE_NET      _IOW('G', 2, struct gsm_netconfig)
+#define GSMIOC_DISABLE_NET     _IO('G', 3)
+
+
+#endif
diff --git a/lib/libdss-include/linux/hdlc.h b/lib/libdss-include/linux/hdlc.h
new file mode 100644 (file)
index 0000000..89e484d
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Generic HDLC support routines for Linux
+ *
+ * Copyright (C) 1999-2005 Krzysztof Halasa <khc@pm.waw.pl>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License
+ * as published by the Free Software Foundation.
+ */
+
+#ifndef __HDLC_H
+#define __HDLC_H
+
+
+#define HDLC_MAX_MTU 1500      /* Ethernet 1500 bytes */
+#if 0
+#define HDLC_MAX_MRU (HDLC_MAX_MTU + 10 + 14 + 4) /* for ETH+VLAN over FR */
+#else
+#define HDLC_MAX_MRU 1600 /* as required for FR network */
+#endif
+
+
+#endif /* __HDLC_H */
diff --git a/lib/libdss-include/linux/hdlc/ioctl.h b/lib/libdss-include/linux/hdlc/ioctl.h
new file mode 100644 (file)
index 0000000..04bc027
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef __HDLC_IOCTL_H__
+#define __HDLC_IOCTL_H__
+
+
+#define GENERIC_HDLC_VERSION 4 /* For synchronization with sethdlc utility */
+
+#define CLOCK_DEFAULT   0      /* Default setting */
+#define CLOCK_EXT      1       /* External TX and RX clock - DTE */
+#define CLOCK_INT      2       /* Internal TX and RX clock - DCE */
+#define CLOCK_TXINT    3       /* Internal TX and external RX clock */
+#define CLOCK_TXFROMRX 4       /* TX clock derived from external RX clock */
+
+
+#define ENCODING_DEFAULT       0 /* Default setting */
+#define ENCODING_NRZ           1
+#define ENCODING_NRZI          2
+#define ENCODING_FM_MARK       3
+#define ENCODING_FM_SPACE      4
+#define ENCODING_MANCHESTER    5
+
+
+#define PARITY_DEFAULT         0 /* Default setting */
+#define PARITY_NONE            1 /* No parity */
+#define PARITY_CRC16_PR0       2 /* CRC16, initial value 0x0000 */
+#define PARITY_CRC16_PR1       3 /* CRC16, initial value 0xFFFF */
+#define PARITY_CRC16_PR0_CCITT 4 /* CRC16, initial 0x0000, ITU-T version */
+#define PARITY_CRC16_PR1_CCITT 5 /* CRC16, initial 0xFFFF, ITU-T version */
+#define PARITY_CRC32_PR0_CCITT 6 /* CRC32, initial value 0x00000000 */
+#define PARITY_CRC32_PR1_CCITT 7 /* CRC32, initial value 0xFFFFFFFF */
+
+#define LMI_DEFAULT            0 /* Default setting */
+#define LMI_NONE               1 /* No LMI, all PVCs are static */
+#define LMI_ANSI               2 /* ANSI Annex D */
+#define LMI_CCITT              3 /* ITU-T Annex A */
+#define LMI_CISCO              4 /* The "original" LMI, aka Gang of Four */
+
+#ifndef __ASSEMBLY__
+
+typedef struct {
+       unsigned int clock_rate; /* bits per second */
+       unsigned int clock_type; /* internal, external, TX-internal etc. */
+       unsigned short loopback;
+} sync_serial_settings;          /* V.35, V.24, X.21 */
+
+typedef struct {
+       unsigned int clock_rate; /* bits per second */
+       unsigned int clock_type; /* internal, external, TX-internal etc. */
+       unsigned short loopback;
+       unsigned int slot_map;
+} te1_settings;                  /* T1, E1 */
+
+typedef struct {
+       unsigned short encoding;
+       unsigned short parity;
+} raw_hdlc_proto;
+
+typedef struct {
+       unsigned int t391;
+       unsigned int t392;
+       unsigned int n391;
+       unsigned int n392;
+       unsigned int n393;
+       unsigned short lmi;
+       unsigned short dce; /* 1 for DCE (network side) operation */
+} fr_proto;
+
+typedef struct {
+       unsigned int dlci;
+} fr_proto_pvc;          /* for creating/deleting FR PVCs */
+
+typedef struct {
+       unsigned int dlci;
+       char master[IFNAMSIZ];  /* Name of master FRAD device */
+}fr_proto_pvc_info;            /* for returning PVC information only */
+
+typedef struct {
+    unsigned int interval;
+    unsigned int timeout;
+} cisco_proto;
+
+/* PPP doesn't need any info now - supply length = 0 to ioctl */
+
+#endif /* __ASSEMBLY__ */
+#endif /* __HDLC_IOCTL_H__ */
diff --git a/lib/libdss-include/linux/hdlcdrv.h b/lib/libdss-include/linux/hdlcdrv.h
new file mode 100644 (file)
index 0000000..422d965
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * hdlcdrv.h  -- HDLC packet radio network driver.
+ * The Linux soundcard driver for 1200 baud and 9600 baud packet radio
+ * (C) 1996-1998 by Thomas Sailer, HB9JNX/AE4WA
+ */
+
+#ifndef _HDLCDRV_H
+#define _HDLCDRV_H
+
+/* -------------------------------------------------------------------- */
+/*
+ * structs for the IOCTL commands
+ */
+
+struct hdlcdrv_params {
+       int iobase;
+       int irq;
+       int dma;
+       int dma2;
+       int seriobase;
+       int pariobase;
+       int midiiobase;
+};     
+
+struct hdlcdrv_channel_params {
+       int tx_delay;  /* the transmitter keyup delay in 10ms units */
+       int tx_tail;   /* the transmitter keyoff delay in 10ms units */
+       int slottime;  /* the slottime in 10ms; usually 10 = 100ms */
+       int ppersist;  /* the p-persistence 0..255 */
+       int fulldup;   /* some driver do not support full duplex, setting */
+                      /* this just makes them send even if DCD is on */
+};     
+
+struct hdlcdrv_old_channel_state {
+       int ptt;
+       int dcd;
+       int ptt_keyed;
+};
+
+struct hdlcdrv_channel_state {
+       int ptt;
+       int dcd;
+       int ptt_keyed;
+       unsigned long tx_packets;
+       unsigned long tx_errors;
+       unsigned long rx_packets;
+       unsigned long rx_errors;
+};
+
+struct hdlcdrv_ioctl {
+       int cmd;
+       union {
+               struct hdlcdrv_params mp;
+               struct hdlcdrv_channel_params cp;
+               struct hdlcdrv_channel_state cs;
+               struct hdlcdrv_old_channel_state ocs;
+               unsigned int calibrate;
+               unsigned char bits;
+               char modename[128];
+               char drivername[32];
+       } data;
+};
+
+/* -------------------------------------------------------------------- */
+
+/*
+ * ioctl values
+ */
+#define HDLCDRVCTL_GETMODEMPAR       0
+#define HDLCDRVCTL_SETMODEMPAR       1
+#define HDLCDRVCTL_MODEMPARMASK      2  /* not handled by hdlcdrv */
+#define HDLCDRVCTL_GETCHANNELPAR    10
+#define HDLCDRVCTL_SETCHANNELPAR    11
+#define HDLCDRVCTL_OLDGETSTAT       20
+#define HDLCDRVCTL_CALIBRATE        21
+#define HDLCDRVCTL_GETSTAT          22
+
+/*
+ * these are mainly for debugging purposes
+ */
+#define HDLCDRVCTL_GETSAMPLES       30
+#define HDLCDRVCTL_GETBITS          31
+
+/*
+ * not handled by hdlcdrv, but by its depending drivers
+ */
+#define HDLCDRVCTL_GETMODE          40
+#define HDLCDRVCTL_SETMODE          41
+#define HDLCDRVCTL_MODELIST         42
+#define HDLCDRVCTL_DRIVERNAME       43
+
+/*
+ * mask of needed modem parameters, returned by HDLCDRVCTL_MODEMPARMASK
+ */
+#define HDLCDRV_PARMASK_IOBASE      (1<<0)
+#define HDLCDRV_PARMASK_IRQ         (1<<1)
+#define HDLCDRV_PARMASK_DMA         (1<<2)
+#define HDLCDRV_PARMASK_DMA2        (1<<3)
+#define HDLCDRV_PARMASK_SERIOBASE   (1<<4)
+#define HDLCDRV_PARMASK_PARIOBASE   (1<<5)
+#define HDLCDRV_PARMASK_MIDIIOBASE  (1<<6)
+
+/* -------------------------------------------------------------------- */
+
+
+/* -------------------------------------------------------------------- */
+
+#endif /* _HDLCDRV_H */
+
+/* -------------------------------------------------------------------- */
diff --git a/lib/libdss-include/linux/hdreg.h b/lib/libdss-include/linux/hdreg.h
new file mode 100644 (file)
index 0000000..774173f
--- /dev/null
@@ -0,0 +1,642 @@
+#ifndef _LINUX_HDREG_H
+#define _LINUX_HDREG_H
+
+#include <linux/types.h>
+
+/*
+ * Command Header sizes for IOCTL commands
+ */
+
+#define HDIO_DRIVE_CMD_HDR_SIZE                (4 * sizeof(__u8))
+#define HDIO_DRIVE_HOB_HDR_SIZE                (8 * sizeof(__u8))
+#define HDIO_DRIVE_TASK_HDR_SIZE       (8 * sizeof(__u8))
+
+#define IDE_DRIVE_TASK_NO_DATA         0
+#define IDE_DRIVE_TASK_INVALID         -1
+#define IDE_DRIVE_TASK_SET_XFER                1
+#define IDE_DRIVE_TASK_IN              2
+#define IDE_DRIVE_TASK_OUT             3
+#define IDE_DRIVE_TASK_RAW_WRITE       4
+
+/*
+ * Define standard taskfile in/out register
+ */
+#define IDE_TASKFILE_STD_IN_FLAGS      0xFE
+#define IDE_HOB_STD_IN_FLAGS           0x3C
+#define IDE_TASKFILE_STD_OUT_FLAGS     0xFE
+#define IDE_HOB_STD_OUT_FLAGS          0x3C
+
+typedef unsigned char task_ioreg_t;
+typedef unsigned long sata_ioreg_t;
+
+typedef union ide_reg_valid_s {
+       unsigned all                            : 16;
+       struct {
+               unsigned data                   : 1;
+               unsigned error_feature          : 1;
+               unsigned sector                 : 1;
+               unsigned nsector                : 1;
+               unsigned lcyl                   : 1;
+               unsigned hcyl                   : 1;
+               unsigned select                 : 1;
+               unsigned status_command         : 1;
+
+               unsigned data_hob               : 1;
+               unsigned error_feature_hob      : 1;
+               unsigned sector_hob             : 1;
+               unsigned nsector_hob            : 1;
+               unsigned lcyl_hob               : 1;
+               unsigned hcyl_hob               : 1;
+               unsigned select_hob             : 1;
+               unsigned control_hob            : 1;
+       } b;
+} ide_reg_valid_t;
+
+typedef struct ide_task_request_s {
+       __u8            io_ports[8];
+       __u8            hob_ports[8]; /* bytes 6 and 7 are unused */
+       ide_reg_valid_t out_flags;
+       ide_reg_valid_t in_flags;
+       int             data_phase;
+       int             req_cmd;
+       unsigned long   out_size;
+       unsigned long   in_size;
+} ide_task_request_t;
+
+typedef struct ide_ioctl_request_s {
+       ide_task_request_t      *task_request;
+       unsigned char           *out_buffer;
+       unsigned char           *in_buffer;
+} ide_ioctl_request_t;
+
+struct hd_drive_cmd_hdr {
+       __u8 command;
+       __u8 sector_number;
+       __u8 feature;
+       __u8 sector_count;
+};
+
+typedef struct hd_drive_task_hdr {
+       __u8 data;
+       __u8 feature;
+       __u8 sector_count;
+       __u8 sector_number;
+       __u8 low_cylinder;
+       __u8 high_cylinder;
+       __u8 device_head;
+       __u8 command;
+} task_struct_t;
+
+typedef struct hd_drive_hob_hdr {
+       __u8 data;
+       __u8 feature;
+       __u8 sector_count;
+       __u8 sector_number;
+       __u8 low_cylinder;
+       __u8 high_cylinder;
+       __u8 device_head;
+       __u8 control;
+} hob_struct_t;
+
+#define TASKFILE_NO_DATA               0x0000
+
+#define TASKFILE_IN                    0x0001
+#define TASKFILE_MULTI_IN              0x0002
+
+#define TASKFILE_OUT                   0x0004
+#define TASKFILE_MULTI_OUT             0x0008
+#define TASKFILE_IN_OUT                        0x0010
+
+#define TASKFILE_IN_DMA                        0x0020
+#define TASKFILE_OUT_DMA               0x0040
+#define TASKFILE_IN_DMAQ               0x0080
+#define TASKFILE_OUT_DMAQ              0x0100
+
+#define TASKFILE_P_IN                  0x0200
+#define TASKFILE_P_OUT                 0x0400
+#define TASKFILE_P_IN_DMA              0x0800
+#define TASKFILE_P_OUT_DMA             0x1000
+#define TASKFILE_P_IN_DMAQ             0x2000
+#define TASKFILE_P_OUT_DMAQ            0x4000
+#define TASKFILE_48                    0x8000
+#define TASKFILE_INVALID               0x7fff
+
+/* ATA/ATAPI Commands pre T13 Spec */
+#define WIN_NOP                                0x00
+/*
+ *     0x01->0x02 Reserved
+ */
+#define CFA_REQ_EXT_ERROR_CODE         0x03 /* CFA Request Extended Error Code */
+/*
+ *     0x04->0x07 Reserved
+ */
+#define WIN_SRST                       0x08 /* ATAPI soft reset command */
+#define WIN_DEVICE_RESET               0x08
+/*
+ *     0x09->0x0F Reserved
+ */
+#define WIN_RECAL                      0x10
+#define WIN_RESTORE                    WIN_RECAL
+/*
+ *     0x10->0x1F Reserved
+ */
+#define WIN_READ                       0x20 /* 28-Bit */
+#define WIN_READ_ONCE                  0x21 /* 28-Bit without retries */
+#define WIN_READ_LONG                  0x22 /* 28-Bit */
+#define WIN_READ_LONG_ONCE             0x23 /* 28-Bit without retries */
+#define WIN_READ_EXT                   0x24 /* 48-Bit */
+#define WIN_READDMA_EXT                        0x25 /* 48-Bit */
+#define WIN_READDMA_QUEUED_EXT         0x26 /* 48-Bit */
+#define WIN_READ_NATIVE_MAX_EXT                0x27 /* 48-Bit */
+/*
+ *     0x28
+ */
+#define WIN_MULTREAD_EXT               0x29 /* 48-Bit */
+/*
+ *     0x2A->0x2F Reserved
+ */
+#define WIN_WRITE                      0x30 /* 28-Bit */
+#define WIN_WRITE_ONCE                 0x31 /* 28-Bit without retries */
+#define WIN_WRITE_LONG                 0x32 /* 28-Bit */
+#define WIN_WRITE_LONG_ONCE            0x33 /* 28-Bit without retries */
+#define WIN_WRITE_EXT                  0x34 /* 48-Bit */
+#define WIN_WRITEDMA_EXT               0x35 /* 48-Bit */
+#define WIN_WRITEDMA_QUEUED_EXT                0x36 /* 48-Bit */
+#define WIN_SET_MAX_EXT                        0x37 /* 48-Bit */
+#define CFA_WRITE_SECT_WO_ERASE                0x38 /* CFA Write Sectors without erase */
+#define WIN_MULTWRITE_EXT              0x39 /* 48-Bit */
+/*
+ *     0x3A->0x3B Reserved
+ */
+#define WIN_WRITE_VERIFY               0x3C /* 28-Bit */
+/*
+ *     0x3D->0x3F Reserved
+ */
+#define WIN_VERIFY                     0x40 /* 28-Bit - Read Verify Sectors */
+#define WIN_VERIFY_ONCE                        0x41 /* 28-Bit - without retries */
+#define WIN_VERIFY_EXT                 0x42 /* 48-Bit */
+/*
+ *     0x43->0x4F Reserved
+ */
+#define WIN_FORMAT                     0x50
+/*
+ *     0x51->0x5F Reserved
+ */
+#define WIN_INIT                       0x60
+/*
+ *     0x61->0x5F Reserved
+ */
+#define WIN_SEEK                       0x70 /* 0x70-0x7F Reserved */
+
+#define CFA_TRANSLATE_SECTOR           0x87 /* CFA Translate Sector */
+#define WIN_DIAGNOSE                   0x90
+#define WIN_SPECIFY                    0x91 /* set drive geometry translation */
+#define WIN_DOWNLOAD_MICROCODE         0x92
+#define WIN_STANDBYNOW2                        0x94
+#define WIN_STANDBY2                   0x96
+#define WIN_SETIDLE2                   0x97
+#define WIN_CHECKPOWERMODE2            0x98
+#define WIN_SLEEPNOW2                  0x99
+/*
+ *     0x9A VENDOR
+ */
+#define WIN_PACKETCMD                  0xA0 /* Send a packet command. */
+#define WIN_PIDENTIFY                  0xA1 /* identify ATAPI device   */
+#define WIN_QUEUED_SERVICE             0xA2
+#define WIN_SMART                      0xB0 /* self-monitoring and reporting */
+#define CFA_ERASE_SECTORS              0xC0
+#define WIN_MULTREAD                   0xC4 /* read sectors using multiple mode*/
+#define WIN_MULTWRITE                  0xC5 /* write sectors using multiple mode */
+#define WIN_SETMULT                    0xC6 /* enable/disable multiple mode */
+#define WIN_READDMA_QUEUED             0xC7 /* read sectors using Queued DMA transfers */
+#define WIN_READDMA                    0xC8 /* read sectors using DMA transfers */
+#define WIN_READDMA_ONCE               0xC9 /* 28-Bit - without retries */
+#define WIN_WRITEDMA                   0xCA /* write sectors using DMA transfers */
+#define WIN_WRITEDMA_ONCE              0xCB /* 28-Bit - without retries */
+#define WIN_WRITEDMA_QUEUED            0xCC /* write sectors using Queued DMA transfers */
+#define CFA_WRITE_MULTI_WO_ERASE       0xCD /* CFA Write multiple without erase */
+#define WIN_GETMEDIASTATUS             0xDA
+#define WIN_ACKMEDIACHANGE             0xDB /* ATA-1, ATA-2 vendor */
+#define WIN_POSTBOOT                   0xDC
+#define WIN_PREBOOT                    0xDD
+#define WIN_DOORLOCK                   0xDE /* lock door on removable drives */
+#define WIN_DOORUNLOCK                 0xDF /* unlock door on removable drives */
+#define WIN_STANDBYNOW1                        0xE0
+#define WIN_IDLEIMMEDIATE              0xE1 /* force drive to become "ready" */
+#define WIN_STANDBY                    0xE2 /* Set device in Standby Mode */
+#define WIN_SETIDLE1                   0xE3
+#define WIN_READ_BUFFER                        0xE4 /* force read only 1 sector */
+#define WIN_CHECKPOWERMODE1            0xE5
+#define WIN_SLEEPNOW1                  0xE6
+#define WIN_FLUSH_CACHE                        0xE7
+#define WIN_WRITE_BUFFER               0xE8 /* force write only 1 sector */
+#define WIN_WRITE_SAME                 0xE9 /* read ata-2 to use */
+       /* SET_FEATURES 0x22 or 0xDD */
+#define WIN_FLUSH_CACHE_EXT            0xEA /* 48-Bit */
+#define WIN_IDENTIFY                   0xEC /* ask drive to identify itself    */
+#define WIN_MEDIAEJECT                 0xED
+#define WIN_IDENTIFY_DMA               0xEE /* same as WIN_IDENTIFY, but DMA */
+#define WIN_SETFEATURES                        0xEF /* set special drive features */
+#define EXABYTE_ENABLE_NEST            0xF0
+#define WIN_SECURITY_SET_PASS          0xF1
+#define WIN_SECURITY_UNLOCK            0xF2
+#define WIN_SECURITY_ERASE_PREPARE     0xF3
+#define WIN_SECURITY_ERASE_UNIT                0xF4
+#define WIN_SECURITY_FREEZE_LOCK       0xF5
+#define WIN_SECURITY_DISABLE           0xF6
+#define WIN_READ_NATIVE_MAX            0xF8 /* return the native maximum address */
+#define WIN_SET_MAX                    0xF9
+#define DISABLE_SEAGATE                        0xFB
+
+/* WIN_SMART sub-commands */
+
+#define SMART_READ_VALUES              0xD0
+#define SMART_READ_THRESHOLDS          0xD1
+#define SMART_AUTOSAVE                 0xD2
+#define SMART_SAVE                     0xD3
+#define SMART_IMMEDIATE_OFFLINE                0xD4
+#define SMART_READ_LOG_SECTOR          0xD5
+#define SMART_WRITE_LOG_SECTOR         0xD6
+#define SMART_WRITE_THRESHOLDS         0xD7
+#define SMART_ENABLE                   0xD8
+#define SMART_DISABLE                  0xD9
+#define SMART_STATUS                   0xDA
+#define SMART_AUTO_OFFLINE             0xDB
+
+/* Password used in TF4 & TF5 executing SMART commands */
+
+#define SMART_LCYL_PASS                        0x4F
+#define SMART_HCYL_PASS                        0xC2
+
+/* WIN_SETFEATURES sub-commands */
+#define SETFEATURES_EN_8BIT    0x01    /* Enable 8-Bit Transfers */
+#define SETFEATURES_EN_WCACHE  0x02    /* Enable write cache */
+#define SETFEATURES_DIS_DEFECT 0x04    /* Disable Defect Management */
+#define SETFEATURES_EN_APM     0x05    /* Enable advanced power management */
+#define SETFEATURES_EN_SAME_R  0x22    /* for a region ATA-1 */
+#define SETFEATURES_DIS_MSN    0x31    /* Disable Media Status Notification */
+#define SETFEATURES_DIS_RETRY  0x33    /* Disable Retry */
+#define SETFEATURES_EN_AAM     0x42    /* Enable Automatic Acoustic Management */
+#define SETFEATURES_RW_LONG    0x44    /* Set Length of VS bytes */
+#define SETFEATURES_SET_CACHE  0x54    /* Set Cache segments to SC Reg. Val */
+#define SETFEATURES_DIS_RLA    0x55    /* Disable read look-ahead feature */
+#define SETFEATURES_EN_RI      0x5D    /* Enable release interrupt */
+#define SETFEATURES_EN_SI      0x5E    /* Enable SERVICE interrupt */
+#define SETFEATURES_DIS_RPOD   0x66    /* Disable reverting to power on defaults */
+#define SETFEATURES_DIS_ECC    0x77    /* Disable ECC byte count */
+#define SETFEATURES_DIS_8BIT   0x81    /* Disable 8-Bit Transfers */
+#define SETFEATURES_DIS_WCACHE 0x82    /* Disable write cache */
+#define SETFEATURES_EN_DEFECT  0x84    /* Enable Defect Management */
+#define SETFEATURES_DIS_APM    0x85    /* Disable advanced power management */
+#define SETFEATURES_EN_ECC     0x88    /* Enable ECC byte count */
+#define SETFEATURES_EN_MSN     0x95    /* Enable Media Status Notification */
+#define SETFEATURES_EN_RETRY   0x99    /* Enable Retry */
+#define SETFEATURES_EN_RLA     0xAA    /* Enable read look-ahead feature */
+#define SETFEATURES_PREFETCH   0xAB    /* Sets drive prefetch value */
+#define SETFEATURES_EN_REST    0xAC    /* ATA-1 */
+#define SETFEATURES_4B_RW_LONG 0xBB    /* Set Length of 4 bytes */
+#define SETFEATURES_DIS_AAM    0xC2    /* Disable Automatic Acoustic Management */
+#define SETFEATURES_EN_RPOD    0xCC    /* Enable reverting to power on defaults */
+#define SETFEATURES_DIS_RI     0xDD    /* Disable release interrupt ATAPI */
+#define SETFEATURES_EN_SAME_M  0xDD    /* for a entire device ATA-1 */
+#define SETFEATURES_DIS_SI     0xDE    /* Disable SERVICE interrupt ATAPI */
+
+/* WIN_SECURITY sub-commands */
+
+#define SECURITY_SET_PASSWORD          0xBA
+#define SECURITY_UNLOCK                        0xBB
+#define SECURITY_ERASE_PREPARE         0xBC
+#define SECURITY_ERASE_UNIT            0xBD
+#define SECURITY_FREEZE_LOCK           0xBE
+#define SECURITY_DISABLE_PASSWORD      0xBF
+
+struct hd_geometry {
+      unsigned char heads;
+      unsigned char sectors;
+      unsigned short cylinders;
+      unsigned long start;
+};
+
+/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
+#define HDIO_GETGEO            0x0301  /* get device geometry */
+#define HDIO_GET_UNMASKINTR    0x0302  /* get current unmask setting */
+#define HDIO_GET_MULTCOUNT     0x0304  /* get current IDE blockmode setting */
+#define HDIO_GET_QDMA          0x0305  /* get use-qdma flag */
+
+#define HDIO_SET_XFER          0x0306  /* set transfer rate via proc */
+
+#define HDIO_OBSOLETE_IDENTITY 0x0307  /* OBSOLETE, DO NOT USE: returns 142 bytes */
+#define HDIO_GET_KEEPSETTINGS  0x0308  /* get keep-settings-on-reset flag */
+#define HDIO_GET_32BIT         0x0309  /* get current io_32bit setting */
+#define HDIO_GET_NOWERR                0x030a  /* get ignore-write-error flag */
+#define HDIO_GET_DMA           0x030b  /* get use-dma flag */
+#define HDIO_GET_NICE          0x030c  /* get nice flags */
+#define HDIO_GET_IDENTITY      0x030d  /* get IDE identification info */
+#define HDIO_GET_WCACHE                0x030e  /* get write cache mode on|off */
+#define HDIO_GET_ACOUSTIC      0x030f  /* get acoustic value */
+#define        HDIO_GET_ADDRESS        0x0310  /* */
+
+#define HDIO_GET_BUSSTATE      0x031a  /* get the bus state of the hwif */
+#define HDIO_TRISTATE_HWIF     0x031b  /* execute a channel tristate */
+#define HDIO_DRIVE_RESET       0x031c  /* execute a device reset */
+#define HDIO_DRIVE_TASKFILE    0x031d  /* execute raw taskfile */
+#define HDIO_DRIVE_TASK                0x031e  /* execute task and special drive command */
+#define HDIO_DRIVE_CMD         0x031f  /* execute a special drive command */
+#define HDIO_DRIVE_CMD_AEB     HDIO_DRIVE_TASK
+
+/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
+#define HDIO_SET_MULTCOUNT     0x0321  /* change IDE blockmode */
+#define HDIO_SET_UNMASKINTR    0x0322  /* permit other irqs during I/O */
+#define HDIO_SET_KEEPSETTINGS  0x0323  /* keep ioctl settings on reset */
+#define HDIO_SET_32BIT         0x0324  /* change io_32bit flags */
+#define HDIO_SET_NOWERR                0x0325  /* change ignore-write-error flag */
+#define HDIO_SET_DMA           0x0326  /* change use-dma flag */
+#define HDIO_SET_PIO_MODE      0x0327  /* reconfig interface to new speed */
+#define HDIO_SCAN_HWIF         0x0328  /* register and (re)scan interface */
+#define HDIO_UNREGISTER_HWIF   0x032a  /* unregister interface */
+#define HDIO_SET_NICE          0x0329  /* set nice flags */
+#define HDIO_SET_WCACHE                0x032b  /* change write cache enable-disable */
+#define HDIO_SET_ACOUSTIC      0x032c  /* change acoustic behavior */
+#define HDIO_SET_BUSSTATE      0x032d  /* set the bus state of the hwif */
+#define HDIO_SET_QDMA          0x032e  /* change use-qdma flag */
+#define HDIO_SET_ADDRESS       0x032f  /* change lba addressing modes */
+
+/* bus states */
+enum {
+       BUSSTATE_OFF = 0,
+       BUSSTATE_ON,
+       BUSSTATE_TRISTATE
+};
+
+/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */
+/* 0x330 is reserved - used to be HDIO_GETGEO_BIG */
+/* 0x331 is reserved - used to be HDIO_GETGEO_BIG_RAW */
+/* 0x338 is reserved - used to be HDIO_SET_IDE_SCSI */
+/* 0x339 is reserved - used to be HDIO_SET_SCSI_IDE */
+
+#define __NEW_HD_DRIVE_ID
+
+/*
+ * Structure returned by HDIO_GET_IDENTITY, as per ANSI NCITS ATA6 rev.1b spec.
+ *
+ * If you change something here, please remember to update fix_driveid() in
+ * ide/probe.c.
+ */
+struct hd_driveid {
+       unsigned short  config;         /* lots of obsolete bit flags */
+       unsigned short  cyls;           /* Obsolete, "physical" cyls */
+       unsigned short  reserved2;      /* reserved (word 2) */
+       unsigned short  heads;          /* Obsolete, "physical" heads */
+       unsigned short  track_bytes;    /* unformatted bytes per track */
+       unsigned short  sector_bytes;   /* unformatted bytes per sector */
+       unsigned short  sectors;        /* Obsolete, "physical" sectors per track */
+       unsigned short  vendor0;        /* vendor unique */
+       unsigned short  vendor1;        /* vendor unique */
+       unsigned short  vendor2;        /* Retired vendor unique */
+       unsigned char   serial_no[20];  /* 0 = not_specified */
+       unsigned short  buf_type;       /* Retired */
+       unsigned short  buf_size;       /* Retired, 512 byte increments
+                                        * 0 = not_specified
+                                        */
+       unsigned short  ecc_bytes;      /* for r/w long cmds; 0 = not_specified */
+       unsigned char   fw_rev[8];      /* 0 = not_specified */
+       unsigned char   model[40];      /* 0 = not_specified */
+       unsigned char   max_multsect;   /* 0=not_implemented */
+       unsigned char   vendor3;        /* vendor unique */
+       unsigned short  dword_io;       /* 0=not_implemented; 1=implemented */
+       unsigned char   vendor4;        /* vendor unique */
+       unsigned char   capability;     /* (upper byte of word 49)
+                                        *  3:  IORDYsup
+                                        *  2:  IORDYsw
+                                        *  1:  LBA
+                                        *  0:  DMA
+                                        */
+       unsigned short  reserved50;     /* reserved (word 50) */
+       unsigned char   vendor5;        /* Obsolete, vendor unique */
+       unsigned char   tPIO;           /* Obsolete, 0=slow, 1=medium, 2=fast */
+       unsigned char   vendor6;        /* Obsolete, vendor unique */
+       unsigned char   tDMA;           /* Obsolete, 0=slow, 1=medium, 2=fast */
+       unsigned short  field_valid;    /* (word 53)
+                                        *  2:  ultra_ok        word  88
+                                        *  1:  eide_ok         words 64-70
+                                        *  0:  cur_ok          words 54-58
+                                        */
+       unsigned short  cur_cyls;       /* Obsolete, logical cylinders */
+       unsigned short  cur_heads;      /* Obsolete, l heads */
+       unsigned short  cur_sectors;    /* Obsolete, l sectors per track */
+       unsigned short  cur_capacity0;  /* Obsolete, l total sectors on drive */
+       unsigned short  cur_capacity1;  /* Obsolete, (2 words, misaligned int)     */
+       unsigned char   multsect;       /* current multiple sector count */
+       unsigned char   multsect_valid; /* when (bit0==1) multsect is ok */
+       unsigned int    lba_capacity;   /* Obsolete, total number of sectors */
+       unsigned short  dma_1word;      /* Obsolete, single-word dma info */
+       unsigned short  dma_mword;      /* multiple-word dma info */
+       unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */
+       unsigned short  eide_dma_min;   /* min mword dma cycle time (ns) */
+       unsigned short  eide_dma_time;  /* recommended mword dma cycle time (ns) */
+       unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */
+       unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */
+       unsigned short  words69_70[2];  /* reserved words 69-70
+                                        * future command overlap and queuing
+                                        */
+       unsigned short  words71_74[4];  /* reserved words 71-74
+                                        * for IDENTIFY PACKET DEVICE command
+                                        */
+       unsigned short  queue_depth;    /* (word 75)
+                                        * 15:5 reserved
+                                        *  4:0 Maximum queue depth -1
+                                        */
+       unsigned short  words76_79[4];  /* reserved words 76-79 */
+       unsigned short  major_rev_num;  /* (word 80) */
+       unsigned short  minor_rev_num;  /* (word 81) */
+       unsigned short  command_set_1;  /* (word 82) supported
+                                        * 15:  Obsolete
+                                        * 14:  NOP command
+                                        * 13:  READ_BUFFER
+                                        * 12:  WRITE_BUFFER
+                                        * 11:  Obsolete
+                                        * 10:  Host Protected Area
+                                        *  9:  DEVICE Reset
+                                        *  8:  SERVICE Interrupt
+                                        *  7:  Release Interrupt
+                                        *  6:  look-ahead
+                                        *  5:  write cache
+                                        *  4:  PACKET Command
+                                        *  3:  Power Management Feature Set
+                                        *  2:  Removable Feature Set
+                                        *  1:  Security Feature Set
+                                        *  0:  SMART Feature Set
+                                        */
+       unsigned short  command_set_2;  /* (word 83)
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:  FLUSH CACHE EXT
+                                        * 12:  FLUSH CACHE
+                                        * 11:  Device Configuration Overlay
+                                        * 10:  48-bit Address Feature Set
+                                        *  9:  Automatic Acoustic Management
+                                        *  8:  SET MAX security
+                                        *  7:  reserved 1407DT PARTIES
+                                        *  6:  SetF sub-command Power-Up
+                                        *  5:  Power-Up in Standby Feature Set
+                                        *  4:  Removable Media Notification
+                                        *  3:  APM Feature Set
+                                        *  2:  CFA Feature Set
+                                        *  1:  READ/WRITE DMA QUEUED
+                                        *  0:  Download MicroCode
+                                        */
+       unsigned short  cfsse;          /* (word 84)
+                                        * cmd set-feature supported extensions
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:6 reserved
+                                        *  5:  General Purpose Logging
+                                        *  4:  Streaming Feature Set
+                                        *  3:  Media Card Pass Through
+                                        *  2:  Media Serial Number Valid
+                                        *  1:  SMART selt-test supported
+                                        *  0:  SMART error logging
+                                        */
+       unsigned short  cfs_enable_1;   /* (word 85)
+                                        * command set-feature enabled
+                                        * 15:  Obsolete
+                                        * 14:  NOP command
+                                        * 13:  READ_BUFFER
+                                        * 12:  WRITE_BUFFER
+                                        * 11:  Obsolete
+                                        * 10:  Host Protected Area
+                                        *  9:  DEVICE Reset
+                                        *  8:  SERVICE Interrupt
+                                        *  7:  Release Interrupt
+                                        *  6:  look-ahead
+                                        *  5:  write cache
+                                        *  4:  PACKET Command
+                                        *  3:  Power Management Feature Set
+                                        *  2:  Removable Feature Set
+                                        *  1:  Security Feature Set
+                                        *  0:  SMART Feature Set
+                                        */
+       unsigned short  cfs_enable_2;   /* (word 86)
+                                        * command set-feature enabled
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:  FLUSH CACHE EXT
+                                        * 12:  FLUSH CACHE
+                                        * 11:  Device Configuration Overlay
+                                        * 10:  48-bit Address Feature Set
+                                        *  9:  Automatic Acoustic Management
+                                        *  8:  SET MAX security
+                                        *  7:  reserved 1407DT PARTIES
+                                        *  6:  SetF sub-command Power-Up
+                                        *  5:  Power-Up in Standby Feature Set
+                                        *  4:  Removable Media Notification
+                                        *  3:  APM Feature Set
+                                        *  2:  CFA Feature Set
+                                        *  1:  READ/WRITE DMA QUEUED
+                                        *  0:  Download MicroCode
+                                        */
+       unsigned short  csf_default;    /* (word 87)
+                                        * command set-feature default
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:6 reserved
+                                        *  5:  General Purpose Logging enabled
+                                        *  4:  Valid CONFIGURE STREAM executed
+                                        *  3:  Media Card Pass Through enabled
+                                        *  2:  Media Serial Number Valid
+                                        *  1:  SMART selt-test supported
+                                        *  0:  SMART error logging
+                                        */
+       unsigned short  dma_ultra;      /* (word 88) */
+       unsigned short  trseuc;         /* time required for security erase */
+       unsigned short  trsEuc;         /* time required for enhanced erase */
+       unsigned short  CurAPMvalues;   /* current APM values */
+       unsigned short  mprc;           /* master password revision code */
+       unsigned short  hw_config;      /* hardware config (word 93)
+                                        * 15:  Shall be ZERO
+                                        * 14:  Shall be ONE
+                                        * 13:
+                                        * 12:
+                                        * 11:
+                                        * 10:
+                                        *  9:
+                                        *  8:
+                                        *  7:
+                                        *  6:
+                                        *  5:
+                                        *  4:
+                                        *  3:
+                                        *  2:
+                                        *  1:
+                                        *  0:  Shall be ONE
+                                        */
+       unsigned short  acoustic;       /* (word 94)
+                                        * 15:8 Vendor's recommended value
+                                        *  7:0 current value
+                                        */
+       unsigned short  msrqs;          /* min stream request size */
+       unsigned short  sxfert;         /* stream transfer time */
+       unsigned short  sal;            /* stream access latency */
+       unsigned int    spg;            /* stream performance granularity */
+       unsigned long long lba_capacity_2;/* 48-bit total number of sectors */
+       unsigned short  words104_125[22];/* reserved words 104-125 */
+       unsigned short  last_lun;       /* (word 126) */
+       unsigned short  word127;        /* (word 127) Feature Set
+                                        * Removable Media Notification
+                                        * 15:2 reserved
+                                        *  1:0 00 = not supported
+                                        *      01 = supported
+                                        *      10 = reserved
+                                        *      11 = reserved
+                                        */
+       unsigned short  dlf;            /* (word 128)
+                                        * device lock function
+                                        * 15:9 reserved
+                                        *  8   security level 1:max 0:high
+                                        *  7:6 reserved
+                                        *  5   enhanced erase
+                                        *  4   expire
+                                        *  3   frozen
+                                        *  2   locked
+                                        *  1   en/disabled
+                                        *  0   capability
+                                        */
+       unsigned short  csfo;           /*  (word 129)
+                                        * current set features options
+                                        * 15:4 reserved
+                                        *  3:  auto reassign
+                                        *  2:  reverting
+                                        *  1:  read-look-ahead
+                                        *  0:  write cache
+                                        */
+       unsigned short  words130_155[26];/* reserved vendor words 130-155 */
+       unsigned short  word156;        /* reserved vendor word 156 */
+       unsigned short  words157_159[3];/* reserved vendor words 157-159 */
+       unsigned short  cfa_power;      /* (word 160) CFA Power Mode
+                                        * 15 word 160 supported
+                                        * 14 reserved
+                                        * 13
+                                        * 12
+                                        * 11:0
+                                        */
+       unsigned short  words161_175[15];/* Reserved for CFA */
+       unsigned short  words176_205[30];/* Current Media Serial Number */
+       unsigned short  words206_254[49];/* reserved words 206-254 */
+       unsigned short  integrity_word; /* (word 255)
+                                        * 15:8 Checksum
+                                        *  7:0 Signature
+                                        */
+};
+
+/*
+ * IDE "nice" flags. These are used on a per drive basis to determine
+ * when to be nice and give more bandwidth to the other devices which
+ * share the same IDE bus.
+ */
+#define IDE_NICE_DSC_OVERLAP   (0)     /* per the DSC overlap protocol */
+#define IDE_NICE_ATAPI_OVERLAP (1)     /* not supported yet */
+#define IDE_NICE_1             (3)     /* when probably won't affect us much */
+#define IDE_NICE_0             (2)     /* when sure that it won't affect us */
+#define IDE_NICE_2             (4)     /* when we know it's on our expense */
+
+#endif /* _LINUX_HDREG_H */
diff --git a/lib/libdss-include/linux/hid.h b/lib/libdss-include/linux/hid.h
new file mode 100644 (file)
index 0000000..2c23ba6
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ *  Copyright (c) 1999 Andreas Gal
+ *  Copyright (c) 2000-2001 Vojtech Pavlik
+ *  Copyright (c) 2006-2007 Jiri Kosina
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
+ * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
+ */
+#ifndef __HID_H
+#define __HID_H
+
+
+
+/*
+ * USB HID (Human Interface Device) interface class code
+ */
+
+#define USB_INTERFACE_CLASS_HID                3
+
+/*
+ * USB HID interface subclass and protocol codes
+ */
+
+#define USB_INTERFACE_SUBCLASS_BOOT    1
+#define USB_INTERFACE_PROTOCOL_KEYBOARD        1
+#define USB_INTERFACE_PROTOCOL_MOUSE   2
+
+/*
+ * HID class requests
+ */
+
+#define HID_REQ_GET_REPORT             0x01
+#define HID_REQ_GET_IDLE               0x02
+#define HID_REQ_GET_PROTOCOL           0x03
+#define HID_REQ_SET_REPORT             0x09
+#define HID_REQ_SET_IDLE               0x0A
+#define HID_REQ_SET_PROTOCOL           0x0B
+
+/*
+ * HID class descriptor types
+ */
+
+#define HID_DT_HID                     (USB_TYPE_CLASS | 0x01)
+#define HID_DT_REPORT                  (USB_TYPE_CLASS | 0x02)
+#define HID_DT_PHYSICAL                        (USB_TYPE_CLASS | 0x03)
+
+#define HID_MAX_DESCRIPTOR_SIZE                4096
+
+
+#endif /* __HID_H */
diff --git a/lib/libdss-include/linux/hiddev.h b/lib/libdss-include/linux/hiddev.h
new file mode 100644 (file)
index 0000000..e24ca19
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ *  Copyright (c) 1999-2000 Vojtech Pavlik
+ *
+ *  Sponsored by SuSE
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or 
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
+ * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
+ */
+#ifndef _HIDDEV_H
+#define _HIDDEV_H
+
+
+
+#include <linux/types.h>
+
+/*
+ * The event structure itself
+ */
+
+struct hiddev_event {
+       unsigned hid;
+       signed int value;
+};
+
+struct hiddev_devinfo {
+       __u32 bustype;
+       __u32 busnum;
+       __u32 devnum;
+       __u32 ifnum;
+       __s16 vendor;
+       __s16 product;
+       __s16 version;
+       __u32 num_applications;
+};
+
+struct hiddev_collection_info {
+       __u32 index;
+       __u32 type;
+       __u32 usage;
+       __u32 level;
+};
+
+#define HID_STRING_SIZE 256
+struct hiddev_string_descriptor {
+       __s32 index;
+       char value[HID_STRING_SIZE];
+};
+
+struct hiddev_report_info {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 num_fields;
+};
+
+/* To do a GUSAGE/SUSAGE, fill in at least usage_code,  report_type and 
+ * report_id.  Set report_id to REPORT_ID_UNKNOWN if the rest of the fields 
+ * are unknown.  Otherwise use a usage_ref struct filled in from a previous 
+ * successful GUSAGE call to save time.  To actually send a value to the
+ * device, perform a SUSAGE first, followed by a SREPORT.  An INITREPORT or a
+ * GREPORT isn't necessary for a GUSAGE to return valid data.
+ */
+#define HID_REPORT_ID_UNKNOWN 0xffffffff
+#define HID_REPORT_ID_FIRST   0x00000100
+#define HID_REPORT_ID_NEXT    0x00000200
+#define HID_REPORT_ID_MASK    0x000000ff
+#define HID_REPORT_ID_MAX     0x000000ff
+
+#define HID_REPORT_TYPE_INPUT  1
+#define HID_REPORT_TYPE_OUTPUT 2
+#define HID_REPORT_TYPE_FEATURE        3
+#define HID_REPORT_TYPE_MIN     1
+#define HID_REPORT_TYPE_MAX     3
+
+struct hiddev_field_info {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 field_index;
+       __u32 maxusage;
+       __u32 flags;
+       __u32 physical;         /* physical usage for this field */
+       __u32 logical;          /* logical usage for this field */
+       __u32 application;              /* application usage for this field */
+       __s32 logical_minimum;
+       __s32 logical_maximum;
+       __s32 physical_minimum;
+       __s32 physical_maximum;
+       __u32 unit_exponent;
+       __u32 unit;
+};
+
+/* Fill in report_type, report_id and field_index to get the information on a
+ * field.
+ */
+#define HID_FIELD_CONSTANT             0x001
+#define HID_FIELD_VARIABLE             0x002
+#define HID_FIELD_RELATIVE             0x004
+#define HID_FIELD_WRAP                 0x008   
+#define HID_FIELD_NONLINEAR            0x010
+#define HID_FIELD_NO_PREFERRED         0x020
+#define HID_FIELD_NULL_STATE           0x040
+#define HID_FIELD_VOLATILE             0x080
+#define HID_FIELD_BUFFERED_BYTE                0x100
+
+struct hiddev_usage_ref {
+       __u32 report_type;
+       __u32 report_id;
+       __u32 field_index;
+       __u32 usage_index;
+       __u32 usage_code;
+       __s32 value;
+};
+
+/* hiddev_usage_ref_multi is used for sending multiple bytes to a control.
+ * It really manifests itself as setting the value of consecutive usages */
+#define HID_MAX_MULTI_USAGES 1024
+struct hiddev_usage_ref_multi {
+       struct hiddev_usage_ref uref;
+       __u32 num_values;
+       __s32 values[HID_MAX_MULTI_USAGES];
+};
+
+/* FIELD_INDEX_NONE is returned in read() data from the kernel when flags
+ * is set to (HIDDEV_FLAG_UREF | HIDDEV_FLAG_REPORT) and a new report has
+ * been sent by the device 
+ */
+#define HID_FIELD_INDEX_NONE 0xffffffff
+
+/*
+ * Protocol version.
+ */
+
+#define HID_VERSION            0x010004
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+#define HIDIOCGVERSION         _IOR('H', 0x01, int)
+#define HIDIOCAPPLICATION      _IO('H', 0x02)
+#define HIDIOCGDEVINFO         _IOR('H', 0x03, struct hiddev_devinfo)
+#define HIDIOCGSTRING          _IOR('H', 0x04, struct hiddev_string_descriptor)
+#define HIDIOCINITREPORT       _IO('H', 0x05)
+#define HIDIOCGNAME(len)       _IOC(_IOC_READ, 'H', 0x06, len)
+#define HIDIOCGREPORT          _IOW('H', 0x07, struct hiddev_report_info)
+#define HIDIOCSREPORT          _IOW('H', 0x08, struct hiddev_report_info)
+#define HIDIOCGREPORTINFO      _IOWR('H', 0x09, struct hiddev_report_info)
+#define HIDIOCGFIELDINFO       _IOWR('H', 0x0A, struct hiddev_field_info)
+#define HIDIOCGUSAGE           _IOWR('H', 0x0B, struct hiddev_usage_ref)
+#define HIDIOCSUSAGE           _IOW('H', 0x0C, struct hiddev_usage_ref)
+#define HIDIOCGUCODE           _IOWR('H', 0x0D, struct hiddev_usage_ref)
+#define HIDIOCGFLAG            _IOR('H', 0x0E, int)
+#define HIDIOCSFLAG            _IOW('H', 0x0F, int)
+#define HIDIOCGCOLLECTIONINDEX _IOW('H', 0x10, struct hiddev_usage_ref)
+#define HIDIOCGCOLLECTIONINFO  _IOWR('H', 0x11, struct hiddev_collection_info)
+#define HIDIOCGPHYS(len)       _IOC(_IOC_READ, 'H', 0x12, len)
+
+/* For writing/reading to multiple/consecutive usages */
+#define HIDIOCGUSAGES          _IOWR('H', 0x13, struct hiddev_usage_ref_multi)
+#define HIDIOCSUSAGES          _IOW('H', 0x14, struct hiddev_usage_ref_multi)
+
+/* 
+ * Flags to be used in HIDIOCSFLAG
+ */
+#define HIDDEV_FLAG_UREF       0x1
+#define HIDDEV_FLAG_REPORT     0x2
+#define HIDDEV_FLAGS           0x3
+
+/* To traverse the input report descriptor info for a HID device, perform the 
+ * following:
+ *
+ * rinfo.report_type = HID_REPORT_TYPE_INPUT;
+ * rinfo.report_id = HID_REPORT_ID_FIRST;
+ * ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
+ *
+ * while (ret >= 0) {
+ *     for (i = 0; i < rinfo.num_fields; i++) {
+ *             finfo.report_type = rinfo.report_type;
+ *             finfo.report_id = rinfo.report_id;
+ *             finfo.field_index = i;
+ *             ioctl(fd, HIDIOCGFIELDINFO, &finfo);
+ *             for (j = 0; j < finfo.maxusage; j++) {
+ *                     uref.report_type = rinfo.report_type;
+ *                     uref.report_id = rinfo.report_id;
+ *                     uref.field_index = i;
+ *                     uref.usage_index = j;
+ *                     ioctl(fd, HIDIOCGUCODE, &uref);
+ *                     ioctl(fd, HIDIOCGUSAGE, &uref);
+ *             }
+ *     }
+ *     rinfo.report_id |= HID_REPORT_ID_NEXT;
+ *     ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
+ * }
+ */
+
+
+#endif /* _HIDDEV_H */
diff --git a/lib/libdss-include/linux/hidraw.h b/lib/libdss-include/linux/hidraw.h
new file mode 100644 (file)
index 0000000..e781b0e
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *  Copyright (c) 2007 Jiri Kosina
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef _HIDRAW_H
+#define _HIDRAW_H
+
+
+
+#include <linux/hid.h>
+#include <linux/types.h>
+
+struct hidraw_report_descriptor {
+       __u32 size;
+       __u8 value[HID_MAX_DESCRIPTOR_SIZE];
+};
+
+struct hidraw_devinfo {
+       __u32 bustype;
+       __s16 vendor;
+       __s16 product;
+};
+
+/* ioctl interface */
+#define HIDIOCGRDESCSIZE       _IOR('H', 0x01, int)
+#define HIDIOCGRDESC           _IOR('H', 0x02, struct hidraw_report_descriptor)
+#define HIDIOCGRAWINFO         _IOR('H', 0x03, struct hidraw_devinfo)
+#define HIDIOCGRAWNAME(len)     _IOC(_IOC_READ, 'H', 0x04, len)
+#define HIDIOCGRAWPHYS(len)     _IOC(_IOC_READ, 'H', 0x05, len)
+/* The first byte of SFEATURE and GFEATURE is the report number */
+#define HIDIOCSFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
+#define HIDIOCGFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len)
+
+#define HIDRAW_FIRST_MINOR 0
+#define HIDRAW_MAX_DEVICES 64
+/* number of reports to buffer */
+#define HIDRAW_BUFFER_SIZE 64
+
+
+/* kernel-only API declarations */
+
+#endif /* _HIDRAW_H */
diff --git a/lib/libdss-include/linux/hpet.h b/lib/libdss-include/linux/hpet.h
new file mode 100644 (file)
index 0000000..031f16f
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __HPET__
+#define __HPET__
+
+
+
+
+struct hpet_info {
+       unsigned long hi_ireqfreq;      /* Hz */
+       unsigned long hi_flags; /* information */
+       unsigned short hi_hpet;
+       unsigned short hi_timer;
+};
+
+#define HPET_INFO_PERIODIC     0x0010  /* periodic-capable comparator */
+
+#define        HPET_IE_ON      _IO('h', 0x01)  /* interrupt on */
+#define        HPET_IE_OFF     _IO('h', 0x02)  /* interrupt off */
+#define        HPET_INFO       _IOR('h', 0x03, struct hpet_info)
+#define        HPET_EPI        _IO('h', 0x04)  /* enable periodic */
+#define        HPET_DPI        _IO('h', 0x05)  /* disable periodic */
+#define        HPET_IRQFREQ    _IOW('h', 0x6, unsigned long)   /* IRQFREQ usec */
+
+#define MAX_HPET_TBS   8               /* maximum hpet timer blocks */
+
+#endif /* __HPET__ */
diff --git a/lib/libdss-include/linux/hsi/cs-protocol.h b/lib/libdss-include/linux/hsi/cs-protocol.h
new file mode 100644 (file)
index 0000000..f153d6e
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * cmt-speech interface definitions
+ *
+ * Copyright (C) 2008,2009,2010 Nokia Corporation. All rights reserved.
+ *
+ * Contact: Kai Vehmanen <kai.vehmanen@nokia.com>
+ * Original author: Peter Ujfalusi <peter.ujfalusi@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _CS_PROTOCOL_H
+#define _CS_PROTOCOL_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/* chardev parameters */
+#define CS_DEV_FILE_NAME               "/dev/cmt_speech"
+
+/* user-space API versioning */
+#define CS_IF_VERSION                  2
+
+/* APE kernel <-> user space messages */
+#define CS_CMD_SHIFT                   28
+#define CS_DOMAIN_SHIFT                        24
+
+#define CS_CMD_MASK                    0xff000000
+#define CS_PARAM_MASK                  0xffffff
+
+#define CS_CMD(id, dom) \
+       (((id) << CS_CMD_SHIFT) | ((dom) << CS_DOMAIN_SHIFT))
+
+#define CS_ERROR                       CS_CMD(1, 0)
+#define CS_RX_DATA_RECEIVED            CS_CMD(2, 0)
+#define CS_TX_DATA_READY               CS_CMD(3, 0)
+#define CS_TX_DATA_SENT                        CS_CMD(4, 0)
+
+/* params to CS_ERROR indication */
+#define CS_ERR_PEER_RESET              0
+
+/* ioctl interface */
+
+/* parameters to CS_CONFIG_BUFS ioctl */
+#define CS_FEAT_TSTAMP_RX_CTRL         (1 << 0)
+#define CS_FEAT_ROLLING_RX_COUNTER     (2 << 0)
+
+/* parameters to CS_GET_STATE ioctl */
+#define CS_STATE_CLOSED                        0
+#define CS_STATE_OPENED                        1 /* resource allocated */
+#define CS_STATE_CONFIGURED            2 /* data path active */
+
+/* maximum number of TX/RX buffers */
+#define CS_MAX_BUFFERS_SHIFT           4
+#define CS_MAX_BUFFERS                 (1 << CS_MAX_BUFFERS_SHIFT)
+
+/* Parameters for setting up the data buffers */
+struct cs_buffer_config {
+       __u32 rx_bufs;  /* number of RX buffer slots */
+       __u32 tx_bufs;  /* number of TX buffer slots */
+       __u32 buf_size; /* bytes */
+       __u32 flags;    /* see CS_FEAT_* */
+       __u32 reserved[4];
+};
+
+/*
+ * struct for monotonic timestamp taken when the
+ * last control command was received
+ */
+struct cs_timestamp {
+       __u32 tv_sec;  /* seconds */
+       __u32 tv_nsec; /* nanoseconds */
+};
+
+/*
+ * Struct describing the layout and contents of the driver mmap area.
+ * This information is meant as read-only information for the application.
+ */
+struct cs_mmap_config_block {
+       __u32 reserved1;
+       __u32 buf_size;         /* 0=disabled, otherwise the transfer size */
+       __u32 rx_bufs;          /* # of RX buffers */
+       __u32 tx_bufs;          /* # of TX buffers */
+       __u32 reserved2;
+       /* array of offsets within the mmap area for each RX and TX buffer */
+       __u32 rx_offsets[CS_MAX_BUFFERS];
+       __u32 tx_offsets[CS_MAX_BUFFERS];
+       __u32 rx_ptr;
+       __u32 rx_ptr_boundary;
+       __u32 reserved3[2];
+       /* enabled with CS_FEAT_TSTAMP_RX_CTRL */
+       struct cs_timestamp tstamp_rx_ctrl;
+};
+
+#define CS_IO_MAGIC            'C'
+
+#define CS_IOW(num, dtype)     _IOW(CS_IO_MAGIC, num, dtype)
+#define CS_IOR(num, dtype)     _IOR(CS_IO_MAGIC, num, dtype)
+#define CS_IOWR(num, dtype)    _IOWR(CS_IO_MAGIC, num, dtype)
+#define CS_IO(num)             _IO(CS_IO_MAGIC, num)
+
+#define CS_GET_STATE           CS_IOR(21, unsigned int)
+#define CS_SET_WAKELINE                CS_IOW(23, unsigned int)
+#define CS_GET_IF_VERSION      CS_IOR(30, unsigned int)
+#define CS_CONFIG_BUFS         CS_IOW(31, struct cs_buffer_config)
+
+#endif /* _CS_PROTOCOL_H */
diff --git a/lib/libdss-include/linux/hsi/hsi_char.h b/lib/libdss-include/linux/hsi/hsi_char.h
new file mode 100644 (file)
index 0000000..76160b4
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Part of the HSI character device driver.
+ *
+ * Copyright (C) 2010 Nokia Corporation. All rights reserved.
+ *
+ * Contact: Andras Domokos <andras.domokos at nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+
+#ifndef __HSI_CHAR_H
+#define __HSI_CHAR_H
+
+#define HSI_CHAR_MAGIC         'k'
+#define HSC_IOW(num, dtype)    _IOW(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IOR(num, dtype)    _IOR(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IOWR(num, dtype)   _IOWR(HSI_CHAR_MAGIC, num, dtype)
+#define HSC_IO(num)            _IO(HSI_CHAR_MAGIC, num)
+
+#define HSC_RESET              HSC_IO(16)
+#define HSC_SET_PM             HSC_IO(17)
+#define HSC_SEND_BREAK         HSC_IO(18)
+#define HSC_SET_RX             HSC_IOW(19, struct hsc_rx_config)
+#define HSC_GET_RX             HSC_IOW(20, struct hsc_rx_config)
+#define HSC_SET_TX             HSC_IOW(21, struct hsc_tx_config)
+#define HSC_GET_TX             HSC_IOW(22, struct hsc_tx_config)
+
+#define HSC_PM_DISABLE         0
+#define HSC_PM_ENABLE          1
+
+#define HSC_MODE_STREAM                1
+#define HSC_MODE_FRAME         2
+#define HSC_FLOW_SYNC          0
+#define HSC_ARB_RR             0
+#define HSC_ARB_PRIO           1
+
+struct hsc_rx_config {
+       uint32_t mode;
+       uint32_t flow;
+       uint32_t channels;
+};
+
+struct hsc_tx_config {
+       uint32_t mode;
+       uint32_t channels;
+       uint32_t speed;
+       uint32_t arb_mode;
+};
+
+#endif /* __HSI_CHAR_H */
diff --git a/lib/libdss-include/linux/hsr_netlink.h b/lib/libdss-include/linux/hsr_netlink.h
new file mode 100644 (file)
index 0000000..2475cb8
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2011-2013 Autronica Fire and Security AS
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * Author(s):
+ *     2011-2013 Arvid Brodin, arvid.brodin@xdin.com
+ */
+
+#ifndef __UAPI_HSR_NETLINK_H
+#define __UAPI_HSR_NETLINK_H
+
+/* Generic Netlink HSR family definition
+ */
+
+/* attributes */
+enum {
+       HSR_A_UNSPEC,
+       HSR_A_NODE_ADDR,
+       HSR_A_IFINDEX,
+       HSR_A_IF1_AGE,
+       HSR_A_IF2_AGE,
+       HSR_A_NODE_ADDR_B,
+       HSR_A_IF1_SEQ,
+       HSR_A_IF2_SEQ,
+       HSR_A_IF1_IFINDEX,
+       HSR_A_IF2_IFINDEX,
+       HSR_A_ADDR_B_IFINDEX,
+       __HSR_A_MAX,
+};
+#define HSR_A_MAX (__HSR_A_MAX - 1)
+
+
+/* commands */
+enum {
+       HSR_C_UNSPEC,
+       HSR_C_RING_ERROR,
+       HSR_C_NODE_DOWN,
+       HSR_C_GET_NODE_STATUS,
+       HSR_C_SET_NODE_STATUS,
+       HSR_C_GET_NODE_LIST,
+       HSR_C_SET_NODE_LIST,
+       __HSR_C_MAX,
+};
+#define HSR_C_MAX (__HSR_C_MAX - 1)
+
+#endif /* __UAPI_HSR_NETLINK_H */
diff --git a/lib/libdss-include/linux/hw_breakpoint.h b/lib/libdss-include/linux/hw_breakpoint.h
new file mode 100644 (file)
index 0000000..32486ee
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _LINUX_HW_BREAKPOINT_H
+#define _LINUX_HW_BREAKPOINT_H
+
+enum {
+       HW_BREAKPOINT_LEN_1 = 1,
+       HW_BREAKPOINT_LEN_2 = 2,
+       HW_BREAKPOINT_LEN_4 = 4,
+       HW_BREAKPOINT_LEN_8 = 8,
+};
+
+enum {
+       HW_BREAKPOINT_EMPTY     = 0,
+       HW_BREAKPOINT_R         = 1,
+       HW_BREAKPOINT_W         = 2,
+       HW_BREAKPOINT_RW        = HW_BREAKPOINT_R | HW_BREAKPOINT_W,
+       HW_BREAKPOINT_X         = 4,
+       HW_BREAKPOINT_INVALID   = HW_BREAKPOINT_RW | HW_BREAKPOINT_X,
+};
+
+enum bp_type_idx {
+       TYPE_INST       = 0,
+#ifdef CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
+       TYPE_DATA       = 0,
+#else
+       TYPE_DATA       = 1,
+#endif
+       TYPE_MAX
+};
+
+#endif /* _LINUX_HW_BREAKPOINT_H */
diff --git a/lib/libdss-include/linux/hyperv.h b/lib/libdss-include/linux/hyperv.h
new file mode 100644 (file)
index 0000000..0e8ad84
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ *
+ * Copyright (c) 2011, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *   K. Y. Srinivasan <kys@microsoft.com>
+ *
+ */
+
+#ifndef _HYPERV_H
+#define _HYPERV_H
+
+#include <linux/uuid.h>
+
+/*
+ * Framework version for util services.
+ */
+#define UTIL_FW_MINOR  0
+
+#define UTIL_WS2K8_FW_MAJOR  1
+#define UTIL_WS2K8_FW_VERSION     (UTIL_WS2K8_FW_MAJOR << 16 | UTIL_FW_MINOR)
+
+#define UTIL_FW_MAJOR  3
+#define UTIL_FW_VERSION     (UTIL_FW_MAJOR << 16 | UTIL_FW_MINOR)
+
+
+/*
+ * Implementation of host controlled snapshot of the guest.
+ */
+
+#define VSS_OP_REGISTER 128
+
+/*
+  Daemon code with full handshake support.
+ */
+#define VSS_OP_REGISTER1 129
+
+enum hv_vss_op {
+       VSS_OP_CREATE = 0,
+       VSS_OP_DELETE,
+       VSS_OP_HOT_BACKUP,
+       VSS_OP_GET_DM_INFO,
+       VSS_OP_BU_COMPLETE,
+       /*
+        * Following operations are only supported with IC version >= 5.0
+        */
+       VSS_OP_FREEZE, /* Freeze the file systems in the VM */
+       VSS_OP_THAW, /* Unfreeze the file systems */
+       VSS_OP_AUTO_RECOVER,
+       VSS_OP_COUNT /* Number of operations, must be last */
+};
+
+
+/*
+ * Header for all VSS messages.
+ */
+struct hv_vss_hdr {
+       __u8 operation;
+       __u8 reserved[7];
+} __attribute__((packed));
+
+
+/*
+ * Flag values for the hv_vss_check_feature. Linux supports only
+ * one value.
+ */
+#define VSS_HBU_NO_AUTO_RECOVERY       0x00000005
+
+struct hv_vss_check_feature {
+       __u32 flags;
+} __attribute__((packed));
+
+struct hv_vss_check_dm_info {
+       __u32 flags;
+} __attribute__((packed));
+
+struct hv_vss_msg {
+       union {
+               struct hv_vss_hdr vss_hdr;
+               int error;
+       };
+       union {
+               struct hv_vss_check_feature vss_cf;
+               struct hv_vss_check_dm_info dm_info;
+       };
+} __attribute__((packed));
+
+/*
+ * Implementation of a host to guest copy facility.
+ */
+
+#define FCOPY_VERSION_0 0
+#define FCOPY_VERSION_1 1
+#define FCOPY_CURRENT_VERSION FCOPY_VERSION_1
+#define W_MAX_PATH 260
+
+enum hv_fcopy_op {
+       START_FILE_COPY = 0,
+       WRITE_TO_FILE,
+       COMPLETE_FCOPY,
+       CANCEL_FCOPY,
+};
+
+struct hv_fcopy_hdr {
+       __u32 operation;
+       uuid_le service_id0; /* currently unused */
+       uuid_le service_id1; /* currently unused */
+} __attribute__((packed));
+
+#define OVER_WRITE     0x1
+#define CREATE_PATH    0x2
+
+struct hv_start_fcopy {
+       struct hv_fcopy_hdr hdr;
+       __u16 file_name[W_MAX_PATH];
+       __u16 path_name[W_MAX_PATH];
+       __u32 copy_flags;
+       __u64 file_size;
+} __attribute__((packed));
+
+/*
+ * The file is chunked into fragments.
+ */
+#define DATA_FRAGMENT  (6 * 1024)
+
+struct hv_do_fcopy {
+       struct hv_fcopy_hdr hdr;
+       __u32   pad;
+       __u64   offset;
+       __u32   size;
+       __u8    data[DATA_FRAGMENT];
+} __attribute__((packed));
+
+/*
+ * An implementation of HyperV key value pair (KVP) functionality for Linux.
+ *
+ *
+ * Copyright (C) 2010, Novell, Inc.
+ * Author : K. Y. Srinivasan <ksrinivasan@novell.com>
+ *
+ */
+
+/*
+ * Maximum value size - used for both key names and value data, and includes
+ * any applicable NULL terminators.
+ *
+ * Note:  This limit is somewhat arbitrary, but falls easily within what is
+ * supported for all native guests (back to Win 2000) and what is reasonable
+ * for the IC KVP exchange functionality.  Note that Windows Me/98/95 are
+ * limited to 255 character key names.
+ *
+ * MSDN recommends not storing data values larger than 2048 bytes in the
+ * registry.
+ *
+ * Note:  This value is used in defining the KVP exchange message - this value
+ * cannot be modified without affecting the message size and compatibility.
+ */
+
+/*
+ * bytes, including any null terminators
+ */
+#define HV_KVP_EXCHANGE_MAX_VALUE_SIZE          (2048)
+
+
+/*
+ * Maximum key size - the registry limit for the length of an entry name
+ * is 256 characters, including the null terminator
+ */
+
+#define HV_KVP_EXCHANGE_MAX_KEY_SIZE            (512)
+
+/*
+ * In Linux, we implement the KVP functionality in two components:
+ * 1) The kernel component which is packaged as part of the hv_utils driver
+ * is responsible for communicating with the host and responsible for
+ * implementing the host/guest protocol. 2) A user level daemon that is
+ * responsible for data gathering.
+ *
+ * Host/Guest Protocol: The host iterates over an index and expects the guest
+ * to assign a key name to the index and also return the value corresponding to
+ * the key. The host will have atmost one KVP transaction outstanding at any
+ * given point in time. The host side iteration stops when the guest returns
+ * an error. Microsoft has specified the following mapping of key names to
+ * host specified index:
+ *
+ *     Index           Key Name
+ *     0               FullyQualifiedDomainName
+ *     1               IntegrationServicesVersion
+ *     2               NetworkAddressIPv4
+ *     3               NetworkAddressIPv6
+ *     4               OSBuildNumber
+ *     5               OSName
+ *     6               OSMajorVersion
+ *     7               OSMinorVersion
+ *     8               OSVersion
+ *     9               ProcessorArchitecture
+ *
+ * The Windows host expects the Key Name and Key Value to be encoded in utf16.
+ *
+ * Guest Kernel/KVP Daemon Protocol: As noted earlier, we implement all of the
+ * data gathering functionality in a user mode daemon. The user level daemon
+ * is also responsible for binding the key name to the index as well. The
+ * kernel and user-level daemon communicate using a connector channel.
+ *
+ * The user mode component first registers with the
+ * the kernel component. Subsequently, the kernel component requests, data
+ * for the specified keys. In response to this message the user mode component
+ * fills in the value corresponding to the specified key. We overload the
+ * sequence field in the cn_msg header to define our KVP message types.
+ *
+ *
+ * The kernel component simply acts as a conduit for communication between the
+ * Windows host and the user-level daemon. The kernel component passes up the
+ * index received from the Host to the user-level daemon. If the index is
+ * valid (supported), the corresponding key as well as its
+ * value (both are strings) is returned. If the index is invalid
+ * (not supported), a NULL key string is returned.
+ */
+
+
+/*
+ * Registry value types.
+ */
+
+#define REG_SZ 1
+#define REG_U32 4
+#define REG_U64 8
+
+/*
+ * As we look at expanding the KVP functionality to include
+ * IP injection functionality, we need to maintain binary
+ * compatibility with older daemons.
+ *
+ * The KVP opcodes are defined by the host and it was unfortunate
+ * that I chose to treat the registration operation as part of the
+ * KVP operations defined by the host.
+ * Here is the level of compatibility
+ * (between the user level daemon and the kernel KVP driver) that we
+ * will implement:
+ *
+ * An older daemon will always be supported on a newer driver.
+ * A given user level daemon will require a minimal version of the
+ * kernel driver.
+ * If we cannot handle the version differences, we will fail gracefully
+ * (this can happen when we have a user level daemon that is more
+ * advanced than the KVP driver.
+ *
+ * We will use values used in this handshake for determining if we have
+ * workable user level daemon and the kernel driver. We begin by taking the
+ * registration opcode out of the KVP opcode namespace. We will however,
+ * maintain compatibility with the existing user-level daemon code.
+ */
+
+/*
+ * Daemon code not supporting IP injection (legacy daemon).
+ */
+
+#define KVP_OP_REGISTER        4
+
+/*
+ * Daemon code supporting IP injection.
+ * The KVP opcode field is used to communicate the
+ * registration information; so define a namespace that
+ * will be distinct from the host defined KVP opcode.
+ */
+
+#define KVP_OP_REGISTER1 100
+
+enum hv_kvp_exchg_op {
+       KVP_OP_GET = 0,
+       KVP_OP_SET,
+       KVP_OP_DELETE,
+       KVP_OP_ENUMERATE,
+       KVP_OP_GET_IP_INFO,
+       KVP_OP_SET_IP_INFO,
+       KVP_OP_COUNT /* Number of operations, must be last. */
+};
+
+enum hv_kvp_exchg_pool {
+       KVP_POOL_EXTERNAL = 0,
+       KVP_POOL_GUEST,
+       KVP_POOL_AUTO,
+       KVP_POOL_AUTO_EXTERNAL,
+       KVP_POOL_AUTO_INTERNAL,
+       KVP_POOL_COUNT /* Number of pools, must be last. */
+};
+
+/*
+ * Some Hyper-V status codes.
+ */
+
+#define HV_S_OK                                0x00000000
+#define HV_E_FAIL                      0x80004005
+#define HV_S_CONT                      0x80070103
+#define HV_ERROR_NOT_SUPPORTED         0x80070032
+#define HV_ERROR_MACHINE_LOCKED                0x800704F7
+#define HV_ERROR_DEVICE_NOT_CONNECTED  0x8007048F
+#define HV_INVALIDARG                  0x80070057
+#define HV_GUID_NOTFOUND               0x80041002
+#define HV_ERROR_ALREADY_EXISTS                0x80070050
+#define HV_ERROR_DISK_FULL             0x80070070
+
+#define ADDR_FAMILY_NONE       0x00
+#define ADDR_FAMILY_IPV4       0x01
+#define ADDR_FAMILY_IPV6       0x02
+
+#define MAX_ADAPTER_ID_SIZE    128
+#define MAX_IP_ADDR_SIZE       1024
+#define MAX_GATEWAY_SIZE       512
+
+
+struct hv_kvp_ipaddr_value {
+       __u16   adapter_id[MAX_ADAPTER_ID_SIZE];
+       __u8    addr_family;
+       __u8    dhcp_enabled;
+       __u16   ip_addr[MAX_IP_ADDR_SIZE];
+       __u16   sub_net[MAX_IP_ADDR_SIZE];
+       __u16   gate_way[MAX_GATEWAY_SIZE];
+       __u16   dns_addr[MAX_IP_ADDR_SIZE];
+} __attribute__((packed));
+
+
+struct hv_kvp_hdr {
+       __u8 operation;
+       __u8 pool;
+       __u16 pad;
+} __attribute__((packed));
+
+struct hv_kvp_exchg_msg_value {
+       __u32 value_type;
+       __u32 key_size;
+       __u32 value_size;
+       __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+       union {
+               __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
+               __u32 value_u32;
+               __u64 value_u64;
+       };
+} __attribute__((packed));
+
+struct hv_kvp_msg_enumerate {
+       __u32 index;
+       struct hv_kvp_exchg_msg_value data;
+} __attribute__((packed));
+
+struct hv_kvp_msg_get {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_set {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_delete {
+       __u32 key_size;
+       __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
+struct hv_kvp_register {
+       __u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
+struct hv_kvp_msg {
+       union {
+               struct hv_kvp_hdr       kvp_hdr;
+               int error;
+       };
+       union {
+               struct hv_kvp_msg_get           kvp_get;
+               struct hv_kvp_msg_set           kvp_set;
+               struct hv_kvp_msg_delete        kvp_delete;
+               struct hv_kvp_msg_enumerate     kvp_enum_data;
+               struct hv_kvp_ipaddr_value      kvp_ip_val;
+               struct hv_kvp_register          kvp_register;
+       } body;
+} __attribute__((packed));
+
+struct hv_kvp_ip_msg {
+       __u8 operation;
+       __u8 pool;
+       struct hv_kvp_ipaddr_value      kvp_ip_val;
+} __attribute__((packed));
+
+#endif /* _HYPERV_H */
diff --git a/lib/libdss-include/linux/hysdn_if.h b/lib/libdss-include/linux/hysdn_if.h
new file mode 100644 (file)
index 0000000..00236ae
--- /dev/null
@@ -0,0 +1,33 @@
+/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $
+ *
+ * Linux driver for HYSDN cards
+ * ioctl definitions shared by hynetmgr and driver.
+ *
+ * Author    Werner Cornelius (werner@titro.de) for Hypercope GmbH
+ * Copyright 1999 by Werner Cornelius (werner@titro.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+/****************/
+/* error values */
+/****************/
+#define ERR_NONE             0 /* no error occurred */
+#define ERR_ALREADY_BOOT  1000 /* we are already booting */
+#define EPOF_BAD_MAGIC    1001 /* bad magic in POF header */
+#define ERR_BOARD_DPRAM   1002 /* board DPRAM failed */
+#define EPOF_INTERNAL     1003 /* internal POF handler error */
+#define EPOF_BAD_IMG_SIZE 1004 /* POF boot image size invalid */
+#define ERR_BOOTIMG_FAIL  1005 /* 1. stage boot image did not start */
+#define ERR_BOOTSEQ_FAIL  1006 /* 2. stage boot seq handshake timeout */
+#define ERR_POF_TIMEOUT   1007 /* timeout waiting for card pof ready */
+#define ERR_NOT_BOOTED    1008 /* operation only allowed when booted */
+#define ERR_CONF_LONG     1009 /* conf line is too long */ 
+#define ERR_INV_CHAN      1010 /* invalid channel number */ 
+#define ERR_ASYNC_TIME    1011 /* timeout sending async data */ 
+
+
+
+
diff --git a/lib/libdss-include/linux/i2c-dev.h b/lib/libdss-include/linux/i2c-dev.h
new file mode 100644 (file)
index 0000000..bbb50e8
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    i2c-dev.h - i2c-bus driver, char device interface
+
+    Copyright (C) 1995-97 Simon G. Vogl
+    Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301 USA.
+*/
+
+#ifndef _LINUX_I2C_DEV_H
+#define _LINUX_I2C_DEV_H
+
+#include <linux/types.h>
+
+
+/* /dev/i2c-X ioctl commands.  The ioctl's parameter is always an
+ * unsigned long, except for:
+ *     - I2C_FUNCS, takes pointer to an unsigned long
+ *     - I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data
+ *     - I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data
+ */
+#define I2C_RETRIES    0x0701  /* number of times a device address should
+                                  be polled when not acknowledging */
+#define I2C_TIMEOUT    0x0702  /* set timeout in units of 10 ms */
+
+/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
+ * are NOT supported! (due to code brokenness)
+ */
+#define I2C_SLAVE      0x0703  /* Use this slave address */
+#define I2C_SLAVE_FORCE        0x0706  /* Use this slave address, even if it
+                                  is already in use by a driver! */
+#define I2C_TENBIT     0x0704  /* 0 for 7 bit addrs, != 0 for 10 bit */
+
+#define I2C_FUNCS      0x0705  /* Get the adapter functionality mask */
+
+#define I2C_RDWR       0x0707  /* Combined R/W transfer (one STOP only) */
+
+#define I2C_PEC                0x0708  /* != 0 to use PEC with SMBus */
+#define I2C_SMBUS      0x0720  /* SMBus transfer */
+
+
+/* This is the structure as used in the I2C_SMBUS ioctl call */
+struct i2c_smbus_ioctl_data {
+       __u8 read_write;
+       __u8 command;
+       __u32 size;
+       union i2c_smbus_data *data;
+};
+
+/* This is the structure as used in the I2C_RDWR ioctl call */
+struct i2c_rdwr_ioctl_data {
+       struct i2c_msg *msgs;   /* pointers to i2c_msgs */
+       __u32 nmsgs;                    /* number of i2c_msgs */
+};
+
+#define  I2C_RDWR_IOCTL_MAX_MSGS       42
+/* Originally defined with a typo, keep it for compatibility */
+#define  I2C_RDRW_IOCTL_MAX_MSGS       I2C_RDWR_IOCTL_MAX_MSGS
+
+
+#endif /* _LINUX_I2C_DEV_H */
diff --git a/lib/libdss-include/linux/i2c.h b/lib/libdss-include/linux/i2c.h
new file mode 100644 (file)
index 0000000..3dec329
--- /dev/null
@@ -0,0 +1,152 @@
+/* ------------------------------------------------------------------------- */
+/*                                                                          */
+/* i2c.h - definitions for the i2c-bus interface                            */
+/*                                                                          */
+/* ------------------------------------------------------------------------- */
+/*   Copyright (C) 1995-2000 Simon G. Vogl
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301 USA.                                                      */
+/* ------------------------------------------------------------------------- */
+
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
+   Frodo Looijaard <frodol@dds.nl> */
+
+#ifndef _LINUX_I2C_H
+#define _LINUX_I2C_H
+
+#include <linux/types.h>
+
+/**
+ * struct i2c_msg - an I2C transaction segment beginning with START
+ * @addr: Slave address, either seven or ten bits.  When this is a ten
+ *     bit address, I2C_M_TEN must be set in @flags and the adapter
+ *     must support I2C_FUNC_10BIT_ADDR.
+ * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
+ *     provided unless the adapter exported the relevant I2C_FUNC_*
+ *     flags through i2c_check_functionality().
+ * @len: Number of data bytes in @buf being read from or written to the
+ *     I2C slave address.  For read transactions where I2C_M_RECV_LEN
+ *     is set, the caller guarantees that this buffer can hold up to
+ *     32 bytes in addition to the initial length byte sent by the
+ *     slave (plus, if used, the SMBus PEC); and this value will be
+ *     incremented by the number of block data bytes received.
+ * @buf: The buffer into which data is read, or from which it's written.
+ *
+ * An i2c_msg is the low level representation of one segment of an I2C
+ * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
+ * to userspace from i2c-dev, and to I2C adapter drivers through the
+ * @i2c_adapter.@master_xfer() method.
+ *
+ * Except when I2C "protocol mangling" is used, all I2C adapters implement
+ * the standard rules for I2C transactions.  Each transaction begins with a
+ * START.  That is followed by the slave address, and a bit encoding read
+ * versus write.  Then follow all the data bytes, possibly including a byte
+ * with SMBus PEC.  The transfer terminates with a NAK, or when all those
+ * bytes have been transferred and ACKed.  If this is the last message in a
+ * group, it is followed by a STOP.  Otherwise it is followed by the next
+ * @i2c_msg transaction segment, beginning with a (repeated) START.
+ *
+ * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
+ * passing certain @flags may have changed those standard protocol behaviors.
+ * Those flags are only for use with broken/nonconforming slaves, and with
+ * adapters which are known to support the specific mangling options they
+ * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
+ */
+struct i2c_msg {
+       __u16 addr;     /* slave address                        */
+       __u16 flags;
+#define I2C_M_TEN              0x0010  /* this is a ten bit chip address */
+#define I2C_M_RD               0x0001  /* read data, from slave to master */
+#define I2C_M_STOP             0x8000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NOSTART          0x4000  /* if I2C_FUNC_NOSTART */
+#define I2C_M_REV_DIR_ADDR     0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_IGNORE_NAK       0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NO_RD_ACK                0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_RECV_LEN         0x0400  /* length will be first received byte */
+       __u16 len;              /* msg length                           */
+       __u8 *buf;              /* pointer to msg data                  */
+};
+
+/* To determine what functionality is present */
+
+#define I2C_FUNC_I2C                   0x00000001
+#define I2C_FUNC_10BIT_ADDR            0x00000002
+#define I2C_FUNC_PROTOCOL_MANGLING     0x00000004 /* I2C_M_IGNORE_NAK etc. */
+#define I2C_FUNC_SMBUS_PEC             0x00000008
+#define I2C_FUNC_NOSTART               0x00000010 /* I2C_M_NOSTART */
+#define I2C_FUNC_SLAVE                 0x00000020
+#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
+#define I2C_FUNC_SMBUS_QUICK           0x00010000
+#define I2C_FUNC_SMBUS_READ_BYTE       0x00020000
+#define I2C_FUNC_SMBUS_WRITE_BYTE      0x00040000
+#define I2C_FUNC_SMBUS_READ_BYTE_DATA  0x00080000
+#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
+#define I2C_FUNC_SMBUS_READ_WORD_DATA  0x00200000
+#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
+#define I2C_FUNC_SMBUS_PROC_CALL       0x00800000
+#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
+#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
+#define I2C_FUNC_SMBUS_READ_I2C_BLOCK  0x04000000 /* I2C-like block xfer  */
+#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
+
+#define I2C_FUNC_SMBUS_BYTE            (I2C_FUNC_SMBUS_READ_BYTE | \
+                                        I2C_FUNC_SMBUS_WRITE_BYTE)
+#define I2C_FUNC_SMBUS_BYTE_DATA       (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
+#define I2C_FUNC_SMBUS_WORD_DATA       (I2C_FUNC_SMBUS_READ_WORD_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_WORD_DATA)
+#define I2C_FUNC_SMBUS_BLOCK_DATA      (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
+                                        I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
+#define I2C_FUNC_SMBUS_I2C_BLOCK       (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
+                                        I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
+
+#define I2C_FUNC_SMBUS_EMUL            (I2C_FUNC_SMBUS_QUICK | \
+                                        I2C_FUNC_SMBUS_BYTE | \
+                                        I2C_FUNC_SMBUS_BYTE_DATA | \
+                                        I2C_FUNC_SMBUS_WORD_DATA | \
+                                        I2C_FUNC_SMBUS_PROC_CALL | \
+                                        I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
+                                        I2C_FUNC_SMBUS_I2C_BLOCK | \
+                                        I2C_FUNC_SMBUS_PEC)
+
+/*
+ * Data for SMBus Messages
+ */
+#define I2C_SMBUS_BLOCK_MAX    32      /* As specified in SMBus standard */
+union i2c_smbus_data {
+       __u8 byte;
+       __u16 word;
+       __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
+                              /* and one more for user-space compatibility */
+};
+
+/* i2c_smbus_xfer read or write markers */
+#define I2C_SMBUS_READ 1
+#define I2C_SMBUS_WRITE        0
+
+/* SMBus transaction types (size parameter in the above functions)
+   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
+#define I2C_SMBUS_QUICK                    0
+#define I2C_SMBUS_BYTE             1
+#define I2C_SMBUS_BYTE_DATA        2
+#define I2C_SMBUS_WORD_DATA        3
+#define I2C_SMBUS_PROC_CALL        4
+#define I2C_SMBUS_BLOCK_DATA       5
+#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
+#define I2C_SMBUS_BLOCK_PROC_CALL   7          /* SMBus 2.0 */
+#define I2C_SMBUS_I2C_BLOCK_DATA    8
+
+#endif /* _LINUX_I2C_H */
diff --git a/lib/libdss-include/linux/i2o-dev.h b/lib/libdss-include/linux/i2o-dev.h
new file mode 100644 (file)
index 0000000..4fb30a4
--- /dev/null
@@ -0,0 +1,421 @@
+/*
+ * I2O user space accessible structures/APIs
+ *
+ * (c) Copyright 1999, 2000 Red Hat Software
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ *************************************************************************
+ *
+ * This header file defines the I2O APIs that are available to both
+ * the kernel and user level applications.  Kernel specific structures
+ * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which
+ * automatically includes this file.
+ *
+ */
+
+#ifndef _I2O_DEV_H
+#define _I2O_DEV_H
+
+/* How many controllers are we allowing */
+#define MAX_I2O_CONTROLLERS    32
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * I2O Control IOCTLs and structures
+ */
+#define I2O_MAGIC_NUMBER       'i'
+#define I2OGETIOPS             _IOR(I2O_MAGIC_NUMBER,0,__u8[MAX_I2O_CONTROLLERS])
+#define I2OHRTGET              _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct)
+#define I2OLCTGET              _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct)
+#define I2OPARMSET             _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget)
+#define I2OPARMGET             _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget)
+#define I2OSWDL                _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer)
+#define I2OSWUL                _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer)
+#define I2OSWDEL               _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer)
+#define I2OVALIDATE            _IOR(I2O_MAGIC_NUMBER,8,__u32)
+#define I2OHTML                _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
+#define I2OEVTREG              _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id)
+#define I2OEVTGET              _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info)
+#define I2OPASSTHRU            _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru)
+#define I2OPASSTHRU32          _IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru32)
+
+struct i2o_cmd_passthru32 {
+       unsigned int iop;       /* IOP unit number */
+       __u32 msg;              /* message */
+};
+
+struct i2o_cmd_passthru {
+       unsigned int iop;       /* IOP unit number */
+       void *msg;      /* message */
+};
+
+struct i2o_cmd_hrtlct {
+       unsigned int iop;       /* IOP unit number */
+       void *resbuf;   /* Buffer for result */
+       unsigned int *reslen;   /* Buffer length in bytes */
+};
+
+struct i2o_cmd_psetget {
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device TID */
+       void *opbuf;    /* Operation List buffer */
+       unsigned int oplen;     /* Operation List buffer length in bytes */
+       void *resbuf;   /* Result List buffer */
+       unsigned int *reslen;   /* Result List buffer length in bytes */
+};
+
+struct i2o_sw_xfer {
+       unsigned int iop;       /* IOP unit number */
+       unsigned char flags;    /* Flags field */
+       unsigned char sw_type;  /* Software type */
+       unsigned int sw_id;     /* Software ID */
+       void *buf;      /* Pointer to software buffer */
+       unsigned int *swlen;    /* Length of software data */
+       unsigned int *maxfrag;  /* Maximum fragment count */
+       unsigned int *curfrag;  /* Current fragment count */
+};
+
+struct i2o_html {
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device ID */
+       unsigned int page;      /* HTML page */
+       void *resbuf;   /* Buffer for reply HTML page */
+       unsigned int *reslen;   /* Length in bytes of reply buffer */
+       void *qbuf;     /* Pointer to HTTP query string */
+       unsigned int qlen;      /* Length in bytes of query string buffer */
+};
+
+#define I2O_EVT_Q_LEN 32
+
+struct i2o_evt_id {
+       unsigned int iop;
+       unsigned int tid;
+       unsigned int evt_mask;
+};
+
+/* Event data size = frame size - message header + evt indicator */
+#define I2O_EVT_DATA_SIZE 88
+
+struct i2o_evt_info {
+       struct i2o_evt_id id;
+       unsigned char evt_data[I2O_EVT_DATA_SIZE];
+       unsigned int data_size;
+};
+
+struct i2o_evt_get {
+       struct i2o_evt_info info;
+       int pending;
+       int lost;
+};
+
+typedef struct i2o_sg_io_hdr {
+       unsigned int flags;     /* see I2O_DPT_SG_IO_FLAGS */
+} i2o_sg_io_hdr_t;
+
+/**************************************************************************
+ * HRT related constants and structures
+ **************************************************************************/
+#define I2O_BUS_LOCAL  0
+#define I2O_BUS_ISA    1
+#define I2O_BUS_EISA   2
+/* was  I2O_BUS_MCA    3 */
+#define I2O_BUS_PCI    4
+#define I2O_BUS_PCMCIA 5
+#define I2O_BUS_NUBUS  6
+#define I2O_BUS_CARDBUS 7
+#define I2O_BUS_UNKNOWN 0x80
+
+typedef struct _i2o_pci_bus {
+       __u8 PciFunctionNumber;
+       __u8 PciDeviceNumber;
+       __u8 PciBusNumber;
+       __u8 reserved;
+       __u16 PciVendorID;
+       __u16 PciDeviceID;
+} i2o_pci_bus;
+
+typedef struct _i2o_local_bus {
+       __u16 LbBaseIOPort;
+       __u16 reserved;
+       __u32 LbBaseMemoryAddress;
+} i2o_local_bus;
+
+typedef struct _i2o_isa_bus {
+       __u16 IsaBaseIOPort;
+       __u8 CSN;
+       __u8 reserved;
+       __u32 IsaBaseMemoryAddress;
+} i2o_isa_bus;
+
+typedef struct _i2o_eisa_bus_info {
+       __u16 EisaBaseIOPort;
+       __u8 reserved;
+       __u8 EisaSlotNumber;
+       __u32 EisaBaseMemoryAddress;
+} i2o_eisa_bus;
+
+typedef struct _i2o_mca_bus {
+       __u16 McaBaseIOPort;
+       __u8 reserved;
+       __u8 McaSlotNumber;
+       __u32 McaBaseMemoryAddress;
+} i2o_mca_bus;
+
+typedef struct _i2o_other_bus {
+       __u16 BaseIOPort;
+       __u16 reserved;
+       __u32 BaseMemoryAddress;
+} i2o_other_bus;
+
+typedef struct _i2o_hrt_entry {
+       __u32 adapter_id;
+       __u32 parent_tid:12;
+       __u32 state:4;
+       __u32 bus_num:8;
+       __u32 bus_type:8;
+       union {
+               i2o_pci_bus pci_bus;
+               i2o_local_bus local_bus;
+               i2o_isa_bus isa_bus;
+               i2o_eisa_bus eisa_bus;
+               i2o_mca_bus mca_bus;
+               i2o_other_bus other_bus;
+       } bus;
+} i2o_hrt_entry;
+
+typedef struct _i2o_hrt {
+       __u16 num_entries;
+       __u8 entry_len;
+       __u8 hrt_version;
+       __u32 change_ind;
+       i2o_hrt_entry hrt_entry[1];
+} i2o_hrt;
+
+typedef struct _i2o_lct_entry {
+       __u32 entry_size:16;
+       __u32 tid:12;
+       __u32 reserved:4;
+       __u32 change_ind;
+       __u32 device_flags;
+       __u32 class_id:12;
+       __u32 version:4;
+       __u32 vendor_id:16;
+       __u32 sub_class;
+       __u32 user_tid:12;
+       __u32 parent_tid:12;
+       __u32 bios_info:8;
+       __u8 identity_tag[8];
+       __u32 event_capabilities;
+} i2o_lct_entry;
+
+typedef struct _i2o_lct {
+       __u32 table_size:16;
+       __u32 boot_tid:12;
+       __u32 lct_ver:4;
+       __u32 iop_flags;
+       __u32 change_ind;
+       i2o_lct_entry lct_entry[1];
+} i2o_lct;
+
+typedef struct _i2o_status_block {
+       __u16 org_id;
+       __u16 reserved;
+       __u16 iop_id:12;
+       __u16 reserved1:4;
+       __u16 host_unit_id;
+       __u16 segment_number:12;
+       __u16 i2o_version:4;
+       __u8 iop_state;
+       __u8 msg_type;
+       __u16 inbound_frame_size;
+       __u8 init_code;
+       __u8 reserved2;
+       __u32 max_inbound_frames;
+       __u32 cur_inbound_frames;
+       __u32 max_outbound_frames;
+       char product_id[24];
+       __u32 expected_lct_size;
+       __u32 iop_capabilities;
+       __u32 desired_mem_size;
+       __u32 current_mem_size;
+       __u32 current_mem_base;
+       __u32 desired_io_size;
+       __u32 current_io_size;
+       __u32 current_io_base;
+       __u32 reserved3:24;
+       __u32 cmd_status:8;
+} i2o_status_block;
+
+/* Event indicator mask flags */
+#define I2O_EVT_IND_STATE_CHANGE               0x80000000
+#define I2O_EVT_IND_GENERAL_WARNING            0x40000000
+#define I2O_EVT_IND_CONFIGURATION_FLAG         0x20000000
+#define I2O_EVT_IND_LOCK_RELEASE               0x10000000
+#define I2O_EVT_IND_CAPABILITY_CHANGE          0x08000000
+#define I2O_EVT_IND_DEVICE_RESET               0x04000000
+#define I2O_EVT_IND_EVT_MASK_MODIFIED          0x02000000
+#define I2O_EVT_IND_FIELD_MODIFIED             0x01000000
+#define I2O_EVT_IND_VENDOR_EVT                 0x00800000
+#define I2O_EVT_IND_DEVICE_STATE               0x00400000
+
+/* Executive event indicitors */
+#define I2O_EVT_IND_EXEC_RESOURCE_LIMITS       0x00000001
+#define I2O_EVT_IND_EXEC_CONNECTION_FAIL       0x00000002
+#define I2O_EVT_IND_EXEC_ADAPTER_FAULT         0x00000004
+#define I2O_EVT_IND_EXEC_POWER_FAIL            0x00000008
+#define I2O_EVT_IND_EXEC_RESET_PENDING         0x00000010
+#define I2O_EVT_IND_EXEC_RESET_IMMINENT        0x00000020
+#define I2O_EVT_IND_EXEC_HW_FAIL               0x00000040
+#define I2O_EVT_IND_EXEC_XCT_CHANGE            0x00000080
+#define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY         0x00000100
+#define I2O_EVT_IND_EXEC_MODIFIED_LCT          0x00000200
+#define I2O_EVT_IND_EXEC_DDM_AVAILABILITY      0x00000400
+
+/* Random Block Storage Event Indicators */
+#define I2O_EVT_IND_BSA_VOLUME_LOAD            0x00000001
+#define I2O_EVT_IND_BSA_VOLUME_UNLOAD          0x00000002
+#define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ      0x00000004
+#define I2O_EVT_IND_BSA_CAPACITY_CHANGE        0x00000008
+#define I2O_EVT_IND_BSA_SCSI_SMART             0x00000010
+
+/* Event data for generic events */
+#define I2O_EVT_STATE_CHANGE_NORMAL            0x00
+#define I2O_EVT_STATE_CHANGE_SUSPENDED         0x01
+#define I2O_EVT_STATE_CHANGE_RESTART           0x02
+#define I2O_EVT_STATE_CHANGE_NA_RECOVER        0x03
+#define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER     0x04
+#define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST   0x05
+#define I2O_EVT_STATE_CHANGE_FAILED            0x10
+#define I2O_EVT_STATE_CHANGE_FAULTED           0x11
+
+#define I2O_EVT_GEN_WARNING_NORMAL             0x00
+#define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD    0x01
+#define I2O_EVT_GEN_WARNING_MEDIA_FAULT        0x02
+
+#define I2O_EVT_CAPABILITY_OTHER               0x01
+#define I2O_EVT_CAPABILITY_CHANGED             0x02
+
+#define I2O_EVT_SENSOR_STATE_CHANGED           0x01
+
+/*
+ *     I2O classes / subclasses
+ */
+
+/*  Class ID and Code Assignments
+ *  (LCT.ClassID.Version field)
+ */
+#define I2O_CLASS_VERSION_10                   0x00
+#define I2O_CLASS_VERSION_11                   0x01
+
+/*  Class code names
+ *  (from v1.5 Table 6-1 Class Code Assignments.)
+ */
+
+#define I2O_CLASS_EXECUTIVE                    0x000
+#define I2O_CLASS_DDM                          0x001
+#define I2O_CLASS_RANDOM_BLOCK_STORAGE         0x010
+#define I2O_CLASS_SEQUENTIAL_STORAGE           0x011
+#define I2O_CLASS_LAN                          0x020
+#define I2O_CLASS_WAN                          0x030
+#define I2O_CLASS_FIBRE_CHANNEL_PORT           0x040
+#define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL     0x041
+#define I2O_CLASS_SCSI_PERIPHERAL              0x051
+#define I2O_CLASS_ATE_PORT                     0x060
+#define I2O_CLASS_ATE_PERIPHERAL               0x061
+#define I2O_CLASS_FLOPPY_CONTROLLER            0x070
+#define I2O_CLASS_FLOPPY_DEVICE                0x071
+#define I2O_CLASS_BUS_ADAPTER                  0x080
+#define I2O_CLASS_PEER_TRANSPORT_AGENT         0x090
+#define I2O_CLASS_PEER_TRANSPORT               0x091
+#define        I2O_CLASS_END                           0xfff
+
+/*
+ *  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
+ */
+
+#define I2O_CLASS_MATCH_ANYCLASS               0xffffffff
+
+/*
+ *  Subclasses
+ */
+
+#define I2O_SUBCLASS_i960                      0x001
+#define I2O_SUBCLASS_HDM                       0x020
+#define I2O_SUBCLASS_ISM                       0x021
+
+/* Operation functions */
+
+#define I2O_PARAMS_FIELD_GET                   0x0001
+#define I2O_PARAMS_LIST_GET                    0x0002
+#define I2O_PARAMS_MORE_GET                    0x0003
+#define I2O_PARAMS_SIZE_GET                    0x0004
+#define I2O_PARAMS_TABLE_GET                   0x0005
+#define I2O_PARAMS_FIELD_SET                   0x0006
+#define I2O_PARAMS_LIST_SET                    0x0007
+#define I2O_PARAMS_ROW_ADD                     0x0008
+#define I2O_PARAMS_ROW_DELETE                  0x0009
+#define I2O_PARAMS_TABLE_CLEAR                 0x000A
+
+/*
+ * I2O serial number conventions / formats
+ * (circa v1.5)
+ */
+
+#define I2O_SNFORMAT_UNKNOWN                   0
+#define I2O_SNFORMAT_BINARY                    1
+#define I2O_SNFORMAT_ASCII                     2
+#define I2O_SNFORMAT_UNICODE                   3
+#define I2O_SNFORMAT_LAN48_MAC                 4
+#define I2O_SNFORMAT_WAN                       5
+
+/*
+ * Plus new in v2.0 (Yellowstone pdf doc)
+ */
+
+#define I2O_SNFORMAT_LAN64_MAC                 6
+#define I2O_SNFORMAT_DDM                       7
+#define I2O_SNFORMAT_IEEE_REG64                8
+#define I2O_SNFORMAT_IEEE_REG128               9
+#define I2O_SNFORMAT_UNKNOWN2                  0xff
+
+/*
+ *     I2O Get Status State values
+ */
+
+#define ADAPTER_STATE_INITIALIZING             0x01
+#define ADAPTER_STATE_RESET                    0x02
+#define ADAPTER_STATE_HOLD                     0x04
+#define ADAPTER_STATE_READY                    0x05
+#define ADAPTER_STATE_OPERATIONAL              0x08
+#define ADAPTER_STATE_FAILED                   0x10
+#define ADAPTER_STATE_FAULTED                  0x11
+
+/*
+ *     Software module types
+ */
+#define I2O_SOFTWARE_MODULE_IRTOS              0x11
+#define I2O_SOFTWARE_MODULE_IOP_PRIVATE                0x22
+#define I2O_SOFTWARE_MODULE_IOP_CONFIG         0x23
+
+/*
+ *     Vendors
+ */
+#define I2O_VENDOR_DPT                         0x001b
+
+/*
+ * DPT / Adaptec specific values for i2o_sg_io_hdr flags.
+ */
+#define I2O_DPT_SG_FLAG_INTERPRET              0x00010000
+#define I2O_DPT_SG_FLAG_PHYSICAL               0x00020000
+
+#define I2O_DPT_FLASH_FRAG_SIZE                        0x10000
+#define I2O_DPT_FLASH_READ                     0x0101
+#define I2O_DPT_FLASH_WRITE                    0x0102
+
+#endif                         /* _I2O_DEV_H */
diff --git a/lib/libdss-include/linux/i8k.h b/lib/libdss-include/linux/i8k.h
new file mode 100644 (file)
index 0000000..133d02f
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * i8k.h -- Linux driver for accessing the SMM BIOS on Dell laptops
+ *
+ * Copyright (C) 2001  Massimo Dal Zotto <dz@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+#ifndef _LINUX_I8K_H
+#define _LINUX_I8K_H
+
+#define I8K_PROC               "/proc/i8k"
+#define I8K_PROC_FMT           "1.0"
+
+#define I8K_BIOS_VERSION       _IOR ('i', 0x80, int)   /* broken: meant 4 bytes */
+#define I8K_MACHINE_ID         _IOR ('i', 0x81, int)   /* broken: meant 16 bytes */
+#define I8K_POWER_STATUS       _IOR ('i', 0x82, size_t)
+#define I8K_FN_STATUS          _IOR ('i', 0x83, size_t)
+#define I8K_GET_TEMP           _IOR ('i', 0x84, size_t)
+#define I8K_GET_SPEED          _IOWR('i', 0x85, size_t)
+#define I8K_GET_FAN            _IOWR('i', 0x86, size_t)
+#define I8K_SET_FAN            _IOWR('i', 0x87, size_t)
+
+#define I8K_FAN_LEFT           1
+#define I8K_FAN_RIGHT          0
+#define I8K_FAN_OFF            0
+#define I8K_FAN_LOW            1
+#define I8K_FAN_HIGH           2
+#define I8K_FAN_TURBO          3
+#define I8K_FAN_MAX            I8K_FAN_TURBO
+
+#define I8K_VOL_UP             1
+#define I8K_VOL_DOWN           2
+#define I8K_VOL_MUTE           4
+
+#define I8K_AC                 1
+#define I8K_BATTERY            0
+
+#endif
diff --git a/lib/libdss-include/linux/icmp.h b/lib/libdss-include/linux/icmp.h
new file mode 100644 (file)
index 0000000..ab58cee
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the ICMP protocol.
+ *
+ * Version:    @(#)icmp.h      1.0.3   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_ICMP_H
+#define _LINUX_ICMP_H
+
+#include <linux/types.h>
+
+#define ICMP_ECHOREPLY         0       /* Echo Reply                   */
+#define ICMP_DEST_UNREACH      3       /* Destination Unreachable      */
+#define ICMP_SOURCE_QUENCH     4       /* Source Quench                */
+#define ICMP_REDIRECT          5       /* Redirect (change route)      */
+#define ICMP_ECHO              8       /* Echo Request                 */
+#define ICMP_TIME_EXCEEDED     11      /* Time Exceeded                */
+#define ICMP_PARAMETERPROB     12      /* Parameter Problem            */
+#define ICMP_TIMESTAMP         13      /* Timestamp Request            */
+#define ICMP_TIMESTAMPREPLY    14      /* Timestamp Reply              */
+#define ICMP_INFO_REQUEST      15      /* Information Request          */
+#define ICMP_INFO_REPLY                16      /* Information Reply            */
+#define ICMP_ADDRESS           17      /* Address Mask Request         */
+#define ICMP_ADDRESSREPLY      18      /* Address Mask Reply           */
+#define NR_ICMP_TYPES          18
+
+
+/* Codes for UNREACH. */
+#define ICMP_NET_UNREACH       0       /* Network Unreachable          */
+#define ICMP_HOST_UNREACH      1       /* Host Unreachable             */
+#define ICMP_PROT_UNREACH      2       /* Protocol Unreachable         */
+#define ICMP_PORT_UNREACH      3       /* Port Unreachable             */
+#define ICMP_FRAG_NEEDED       4       /* Fragmentation Needed/DF set  */
+#define ICMP_SR_FAILED         5       /* Source Route failed          */
+#define ICMP_NET_UNKNOWN       6
+#define ICMP_HOST_UNKNOWN      7
+#define ICMP_HOST_ISOLATED     8
+#define ICMP_NET_ANO           9
+#define ICMP_HOST_ANO          10
+#define ICMP_NET_UNR_TOS       11
+#define ICMP_HOST_UNR_TOS      12
+#define ICMP_PKT_FILTERED      13      /* Packet filtered */
+#define ICMP_PREC_VIOLATION    14      /* Precedence violation */
+#define ICMP_PREC_CUTOFF       15      /* Precedence cut off */
+#define NR_ICMP_UNREACH                15      /* instead of hardcoding immediate value */
+
+/* Codes for REDIRECT. */
+#define ICMP_REDIR_NET         0       /* Redirect Net                 */
+#define ICMP_REDIR_HOST                1       /* Redirect Host                */
+#define ICMP_REDIR_NETTOS      2       /* Redirect Net for TOS         */
+#define ICMP_REDIR_HOSTTOS     3       /* Redirect Host for TOS        */
+
+/* Codes for TIME_EXCEEDED. */
+#define ICMP_EXC_TTL           0       /* TTL count exceeded           */
+#define ICMP_EXC_FRAGTIME      1       /* Fragment Reass time exceeded */
+
+
+struct icmphdr {
+  __u8         type;
+  __u8         code;
+  __sum16      checksum;
+  union {
+       struct {
+               __be16  id;
+               __be16  sequence;
+       } echo;
+       __be32  gateway;
+       struct {
+               __be16  __unused;
+               __be16  mtu;
+       } frag;
+  } un;
+};
+
+
+/*
+ *     constants for (set|get)sockopt
+ */
+
+#define ICMP_FILTER                    1
+
+struct icmp_filter {
+       __u32           data;
+};
+
+
+#endif /* _LINUX_ICMP_H */
diff --git a/lib/libdss-include/linux/icmpv6.h b/lib/libdss-include/linux/icmpv6.h
new file mode 100644 (file)
index 0000000..a2e839e
--- /dev/null
@@ -0,0 +1,166 @@
+#ifndef _LINUX_ICMPV6_H
+#define _LINUX_ICMPV6_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+struct icmp6hdr {
+
+       __u8            icmp6_type;
+       __u8            icmp6_code;
+       __sum16         icmp6_cksum;
+
+
+       union {
+               __be32                  un_data32[1];
+               __be16                  un_data16[2];
+               __u8                    un_data8[4];
+
+               struct icmpv6_echo {
+                       __be16          identifier;
+                       __be16          sequence;
+               } u_echo;
+
+                struct icmpv6_nd_advt {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+                        __u32          reserved:5,
+                                       override:1,
+                                       solicited:1,
+                                       router:1,
+                                       reserved2:24;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+                        __u32          router:1,
+                                       solicited:1,
+                                       override:1,
+                                       reserved:29;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif                                         
+                } u_nd_advt;
+
+                struct icmpv6_nd_ra {
+                       __u8            hop_limit;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+                       __u8            reserved:3,
+                                       router_pref:2,
+                                       home_agent:1,
+                                       other:1,
+                                       managed:1;
+
+#elif defined(__BIG_ENDIAN_BITFIELD)
+                       __u8            managed:1,
+                                       other:1,
+                                       home_agent:1,
+                                       router_pref:2,
+                                       reserved:3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+                       __be16          rt_lifetime;
+                } u_nd_ra;
+
+       } icmp6_dataun;
+
+#define icmp6_identifier       icmp6_dataun.u_echo.identifier
+#define icmp6_sequence         icmp6_dataun.u_echo.sequence
+#define icmp6_pointer          icmp6_dataun.un_data32[0]
+#define icmp6_mtu              icmp6_dataun.un_data32[0]
+#define icmp6_unused           icmp6_dataun.un_data32[0]
+#define icmp6_maxdelay         icmp6_dataun.un_data16[0]
+#define icmp6_router           icmp6_dataun.u_nd_advt.router
+#define icmp6_solicited                icmp6_dataun.u_nd_advt.solicited
+#define icmp6_override         icmp6_dataun.u_nd_advt.override
+#define icmp6_ndiscreserved    icmp6_dataun.u_nd_advt.reserved
+#define icmp6_hop_limit                icmp6_dataun.u_nd_ra.hop_limit
+#define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed
+#define icmp6_addrconf_other   icmp6_dataun.u_nd_ra.other
+#define icmp6_rt_lifetime      icmp6_dataun.u_nd_ra.rt_lifetime
+#define icmp6_router_pref      icmp6_dataun.u_nd_ra.router_pref
+};
+
+
+#define ICMPV6_ROUTER_PREF_LOW         0x3
+#define ICMPV6_ROUTER_PREF_MEDIUM      0x0
+#define ICMPV6_ROUTER_PREF_HIGH                0x1
+#define ICMPV6_ROUTER_PREF_INVALID     0x2
+
+#define ICMPV6_DEST_UNREACH            1
+#define ICMPV6_PKT_TOOBIG              2
+#define ICMPV6_TIME_EXCEED             3
+#define ICMPV6_PARAMPROB               4
+
+#define ICMPV6_INFOMSG_MASK            0x80
+
+#define ICMPV6_ECHO_REQUEST            128
+#define ICMPV6_ECHO_REPLY              129
+#define ICMPV6_MGM_QUERY               130
+#define ICMPV6_MGM_REPORT              131
+#define ICMPV6_MGM_REDUCTION           132
+
+#define ICMPV6_NI_QUERY                        139
+#define ICMPV6_NI_REPLY                        140
+
+#define ICMPV6_MLD2_REPORT             143
+
+#define ICMPV6_DHAAD_REQUEST           144
+#define ICMPV6_DHAAD_REPLY             145
+#define ICMPV6_MOBILE_PREFIX_SOL       146
+#define ICMPV6_MOBILE_PREFIX_ADV       147
+
+/*
+ *     Codes for Destination Unreachable
+ */
+#define ICMPV6_NOROUTE                 0
+#define ICMPV6_ADM_PROHIBITED          1
+#define ICMPV6_NOT_NEIGHBOUR           2
+#define ICMPV6_ADDR_UNREACH            3
+#define ICMPV6_PORT_UNREACH            4
+#define ICMPV6_POLICY_FAIL             5
+#define ICMPV6_REJECT_ROUTE            6
+
+/*
+ *     Codes for Time Exceeded
+ */
+#define ICMPV6_EXC_HOPLIMIT            0
+#define ICMPV6_EXC_FRAGTIME            1
+
+/*
+ *     Codes for Parameter Problem
+ */
+#define ICMPV6_HDR_FIELD               0
+#define ICMPV6_UNK_NEXTHDR             1
+#define ICMPV6_UNK_OPTION              2
+
+/*
+ *     constants for (set|get)sockopt
+ */
+
+#define ICMPV6_FILTER                  1
+
+/*
+ *     ICMPV6 filter
+ */
+
+#define ICMPV6_FILTER_BLOCK            1
+#define ICMPV6_FILTER_PASS             2
+#define ICMPV6_FILTER_BLOCKOTHERS      3
+#define ICMPV6_FILTER_PASSONLY         4
+
+struct icmp6_filter {
+       __u32           data[8];
+};
+
+/*
+ *     Definitions for MLDv2
+ */
+#define MLD2_MODE_IS_INCLUDE   1
+#define MLD2_MODE_IS_EXCLUDE   2
+#define MLD2_CHANGE_TO_INCLUDE 3
+#define MLD2_CHANGE_TO_EXCLUDE 4
+#define MLD2_ALLOW_NEW_SOURCES 5
+#define MLD2_BLOCK_OLD_SOURCES 6
+
+#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
+
+
+#endif /* _LINUX_ICMPV6_H */
diff --git a/lib/libdss-include/linux/if.h b/lib/libdss-include/linux/if.h
new file mode 100644 (file)
index 0000000..a55a9e0
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the INET interface module.
+ *
+ * Version:    @(#)if.h        1.0.2   04/18/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_H
+#define _LINUX_IF_H
+
+#include <linux/types.h>               /* for "__kernel_caddr_t" et al */
+#include <linux/socket.h>              /* for "struct sockaddr" et al  */
+               /* for "__user" et al           */
+
+#define        IFNAMSIZ        16
+#define        IFALIASZ        256
+#include <linux/hdlc/ioctl.h>
+
+/**
+ * enum net_device_flags - &struct net_device flags
+ *
+ * These are the &struct net_device flags, they can be set by drivers, the
+ * kernel and some can be triggered by userspace. Userspace can query and
+ * set these flags using userspace utilities but there is also a sysfs
+ * entry available for all dev flags which can be queried and set. These flags
+ * are shared for all types of net_devices. The sysfs entries are available
+ * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs
+ * are annotated below, note that only a few flags can be toggled and some
+ * other flags are always always preserved from the original net_device flags
+ * even if you try to set them via sysfs. Flags which are always preserved
+ * are kept under the flag grouping @IFF_VOLATILE. Flags which are __volatile__
+ * are annotated below as such.
+ *
+ * You should have a pretty good reason to be extending these flags.
+ *
+ * @IFF_UP: interface is up. Can be toggled through sysfs.
+ * @IFF_BROADCAST: broadcast address valid. Volatile.
+ * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs.
+ * @IFF_LOOPBACK: is a loopback net. Volatile.
+ * @IFF_POINTOPOINT: interface is has p-p link. Volatile.
+ * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs.
+ *     Volatile.
+ * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile.
+ * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile.
+ * @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
+ * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through
+ *     sysfs.
+ * @IFF_MASTER: master of a load balancer. Volatile.
+ * @IFF_SLAVE: slave of a load balancer. Volatile.
+ * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs.
+ * @IFF_PORTSEL: can set media type. Can be toggled through sysfs.
+ * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs.
+ * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled
+ *     through sysfs.
+ * @IFF_LOWER_UP: driver signals L1 up. Volatile.
+ * @IFF_DORMANT: driver signals dormant. Volatile.
+ * @IFF_ECHO: echo sent packets. Volatile.
+ */
+enum net_device_flags {
+       IFF_UP                          = 1<<0,  /* sysfs */
+       IFF_BROADCAST                   = 1<<1,  /* __volatile__ */
+       IFF_DEBUG                       = 1<<2,  /* sysfs */
+       IFF_LOOPBACK                    = 1<<3,  /* __volatile__ */
+       IFF_POINTOPOINT                 = 1<<4,  /* __volatile__ */
+       IFF_NOTRAILERS                  = 1<<5,  /* sysfs */
+       IFF_RUNNING                     = 1<<6,  /* __volatile__ */
+       IFF_NOARP                       = 1<<7,  /* sysfs */
+       IFF_PROMISC                     = 1<<8,  /* sysfs */
+       IFF_ALLMULTI                    = 1<<9,  /* sysfs */
+       IFF_MASTER                      = 1<<10, /* __volatile__ */
+       IFF_SLAVE                       = 1<<11, /* __volatile__ */
+       IFF_MULTICAST                   = 1<<12, /* sysfs */
+       IFF_PORTSEL                     = 1<<13, /* sysfs */
+       IFF_AUTOMEDIA                   = 1<<14, /* sysfs */
+       IFF_DYNAMIC                     = 1<<15, /* sysfs */
+       IFF_LOWER_UP                    = 1<<16, /* __volatile__ */
+       IFF_DORMANT                     = 1<<17, /* __volatile__ */
+       IFF_ECHO                        = 1<<18, /* __volatile__ */
+};
+
+#define IFF_UP                         IFF_UP
+#define IFF_BROADCAST                  IFF_BROADCAST
+#define IFF_DEBUG                      IFF_DEBUG
+#define IFF_LOOPBACK                   IFF_LOOPBACK
+#define IFF_POINTOPOINT                        IFF_POINTOPOINT
+#define IFF_NOTRAILERS                 IFF_NOTRAILERS
+#define IFF_RUNNING                    IFF_RUNNING
+#define IFF_NOARP                      IFF_NOARP
+#define IFF_PROMISC                    IFF_PROMISC
+#define IFF_ALLMULTI                   IFF_ALLMULTI
+#define IFF_MASTER                     IFF_MASTER
+#define IFF_SLAVE                      IFF_SLAVE
+#define IFF_MULTICAST                  IFF_MULTICAST
+#define IFF_PORTSEL                    IFF_PORTSEL
+#define IFF_AUTOMEDIA                  IFF_AUTOMEDIA
+#define IFF_DYNAMIC                    IFF_DYNAMIC
+#define IFF_LOWER_UP                   IFF_LOWER_UP
+#define IFF_DORMANT                    IFF_DORMANT
+#define IFF_ECHO                       IFF_ECHO
+
+#define IFF_VOLATILE   (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
+               IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
+
+#define IF_GET_IFACE   0x0001          /* for querying only */
+#define IF_GET_PROTO   0x0002
+
+/* For definitions see hdlc.h */
+#define IF_IFACE_V35   0x1000          /* V.35 serial interface        */
+#define IF_IFACE_V24   0x1001          /* V.24 serial interface        */
+#define IF_IFACE_X21   0x1002          /* X.21 serial interface        */
+#define IF_IFACE_T1    0x1003          /* T1 telco serial interface    */
+#define IF_IFACE_E1    0x1004          /* E1 telco serial interface    */
+#define IF_IFACE_SYNC_SERIAL 0x1005    /* can't be set by software     */
+#define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */
+
+/* For definitions see hdlc.h */
+#define IF_PROTO_HDLC  0x2000          /* raw HDLC protocol            */
+#define IF_PROTO_PPP   0x2001          /* PPP protocol                 */
+#define IF_PROTO_CISCO 0x2002          /* Cisco HDLC protocol          */
+#define IF_PROTO_FR    0x2003          /* Frame Relay protocol         */
+#define IF_PROTO_FR_ADD_PVC 0x2004     /*    Create FR PVC             */
+#define IF_PROTO_FR_DEL_PVC 0x2005     /*    Delete FR PVC             */
+#define IF_PROTO_X25   0x2006          /* X.25                         */
+#define IF_PROTO_HDLC_ETH 0x2007       /* raw HDLC, Ethernet emulation */
+#define IF_PROTO_FR_ADD_ETH_PVC 0x2008 /*  Create FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_DEL_ETH_PVC 0x2009 /*  Delete FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_PVC        0x200A          /* for reading PVC status       */
+#define IF_PROTO_FR_ETH_PVC 0x200B
+#define IF_PROTO_RAW    0x200C          /* RAW Socket                   */
+
+/* RFC 2863 operational status */
+enum {
+       IF_OPER_UNKNOWN,
+       IF_OPER_NOTPRESENT,
+       IF_OPER_DOWN,
+       IF_OPER_LOWERLAYERDOWN,
+       IF_OPER_TESTING,
+       IF_OPER_DORMANT,
+       IF_OPER_UP,
+};
+
+/* link modes */
+enum {
+       IF_LINK_MODE_DEFAULT,
+       IF_LINK_MODE_DORMANT,   /* limit upward transition to dormant */
+};
+
+/*
+ *     Device mapping structure. I'd just gone off and designed a 
+ *     beautiful scheme using only loadable modules with arguments
+ *     for driver options and along come the PCMCIA people 8)
+ *
+ *     Ah well. The get() side of this is good for WDSETUP, and it'll
+ *     be handy for debugging things. The set side is fine for now and
+ *     being very small might be worth keeping for clean configuration.
+ */
+
+struct ifmap {
+       unsigned long mem_start;
+       unsigned long mem_end;
+       unsigned short base_addr; 
+       unsigned char irq;
+       unsigned char dma;
+       unsigned char port;
+       /* 3 bytes spare */
+};
+
+struct if_settings {
+       unsigned int type;      /* Type of physical device or protocol */
+       unsigned int size;      /* Size of the data allocated by the caller */
+       union {
+               /* {atm/eth/dsl}_settings anyone ? */
+               raw_hdlc_proto          *raw_hdlc;
+               cisco_proto             *cisco;
+               fr_proto                *fr;
+               fr_proto_pvc            *fr_pvc;
+               fr_proto_pvc_info       *fr_pvc_info;
+
+               /* interface settings */
+               sync_serial_settings    *sync;
+               te1_settings            *te1;
+       } ifs_ifsu;
+};
+
+/*
+ * Interface request structure used for socket
+ * ioctl's.  All interface ioctl's must have parameter
+ * definitions which begin with ifr_name.  The
+ * remainder may be interface specific.
+ */
+
+struct ifreq {
+#define IFHWADDRLEN    6
+       union
+       {
+               char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+       } ifr_ifrn;
+       
+       union {
+               struct  sockaddr ifru_addr;
+               struct  sockaddr ifru_dstaddr;
+               struct  sockaddr ifru_broadaddr;
+               struct  sockaddr ifru_netmask;
+               struct  sockaddr ifru_hwaddr;
+               short   ifru_flags;
+               int     ifru_ivalue;
+               int     ifru_mtu;
+               struct  ifmap ifru_map;
+               char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
+               char    ifru_newname[IFNAMSIZ];
+               void *  ifru_data;
+               struct  if_settings ifru_settings;
+       } ifr_ifru;
+};
+
+#define ifr_name       ifr_ifrn.ifrn_name      /* interface name       */
+#define ifr_hwaddr     ifr_ifru.ifru_hwaddr    /* MAC address          */
+#define        ifr_addr        ifr_ifru.ifru_addr      /* address              */
+#define        ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
+#define        ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */
+#define        ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */
+#define        ifr_flags       ifr_ifru.ifru_flags     /* flags                */
+#define        ifr_metric      ifr_ifru.ifru_ivalue    /* metric               */
+#define        ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */
+#define ifr_map                ifr_ifru.ifru_map       /* device map           */
+#define ifr_slave      ifr_ifru.ifru_slave     /* slave device         */
+#define        ifr_data        ifr_ifru.ifru_data      /* for use by interface */
+#define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index      */
+#define ifr_bandwidth  ifr_ifru.ifru_ivalue    /* link bandwidth       */
+#define ifr_qlen       ifr_ifru.ifru_ivalue    /* Queue length         */
+#define ifr_newname    ifr_ifru.ifru_newname   /* New name             */
+#define ifr_settings   ifr_ifru.ifru_settings  /* Device/proto settings*/
+
+/*
+ * Structure used in SIOCGIFCONF request.
+ * Used to retrieve interface configuration
+ * for machine (useful for programs which
+ * must know all networks accessible).
+ */
+
+struct ifconf  {
+       int     ifc_len;                        /* size of buffer       */
+       union {
+               char *ifcu_buf;
+               struct ifreq *ifcu_req;
+       } ifc_ifcu;
+};
+#define        ifc_buf ifc_ifcu.ifcu_buf               /* buffer address       */
+#define        ifc_req ifc_ifcu.ifcu_req               /* array of structures  */
+
+#endif /* _LINUX_IF_H */
diff --git a/lib/libdss-include/linux/if_addr.h b/lib/libdss-include/linux/if_addr.h
new file mode 100644 (file)
index 0000000..26f0ecf
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef __LINUX_IF_ADDR_H
+#define __LINUX_IF_ADDR_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct ifaddrmsg {
+       __u8            ifa_family;
+       __u8            ifa_prefixlen;  /* The prefix length            */
+       __u8            ifa_flags;      /* Flags                        */
+       __u8            ifa_scope;      /* Address scope                */
+       __u32           ifa_index;      /* Link index                   */
+};
+
+/*
+ * Important comment:
+ * IFA_ADDRESS is prefix address, rather than local interface address.
+ * It makes no difference for normally configured broadcast interfaces,
+ * but for point-to-point IFA_ADDRESS is DESTINATION address,
+ * local address is supplied in IFA_LOCAL attribute.
+ *
+ * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags.
+ * If present, the value from struct ifaddrmsg will be ignored.
+ */
+enum {
+       IFA_UNSPEC,
+       IFA_ADDRESS,
+       IFA_LOCAL,
+       IFA_LABEL,
+       IFA_BROADCAST,
+       IFA_ANYCAST,
+       IFA_CACHEINFO,
+       IFA_MULTICAST,
+       IFA_FLAGS,
+       __IFA_MAX,
+};
+
+#define IFA_MAX (__IFA_MAX - 1)
+
+/* ifa_flags */
+#define IFA_F_SECONDARY                0x01
+#define IFA_F_TEMPORARY                IFA_F_SECONDARY
+
+#define        IFA_F_NODAD             0x02
+#define IFA_F_OPTIMISTIC       0x04
+#define IFA_F_DADFAILED                0x08
+#define        IFA_F_HOMEADDRESS       0x10
+#define IFA_F_DEPRECATED       0x20
+#define IFA_F_TENTATIVE                0x40
+#define IFA_F_PERMANENT                0x80
+#define IFA_F_MANAGETEMPADDR   0x100
+#define IFA_F_NOPREFIXROUTE    0x200
+#define IFA_F_MCAUTOJOIN       0x400
+#define IFA_F_STABLE_PRIVACY   0x800
+
+struct ifa_cacheinfo {
+       __u32   ifa_prefered;
+       __u32   ifa_valid;
+       __u32   cstamp; /* created timestamp, hundredths of seconds */
+       __u32   tstamp; /* updated timestamp, hundredths of seconds */
+};
+
+/* backwards compatibility for userspace */
+#define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
+#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
+
+#endif
diff --git a/lib/libdss-include/linux/if_addrlabel.h b/lib/libdss-include/linux/if_addrlabel.h
new file mode 100644 (file)
index 0000000..54580c2
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * if_addrlabel.h - netlink interface for address labels
+ *
+ * Copyright (C)2007 USAGI/WIDE Project,  All Rights Reserved.
+ *
+ * Authors:
+ *     YOSHIFUJI Hideaki @ USAGI/WIDE <yoshfuji@linux-ipv6.org>
+ */
+
+#ifndef __LINUX_IF_ADDRLABEL_H
+#define __LINUX_IF_ADDRLABEL_H
+
+#include <linux/types.h>
+
+struct ifaddrlblmsg {
+       __u8            ifal_family;            /* Address family */
+       __u8            __ifal_reserved;        /* Reserved */
+       __u8            ifal_prefixlen;         /* Prefix length */
+       __u8            ifal_flags;             /* Flags */
+       __u32           ifal_index;             /* Link index */
+       __u32           ifal_seq;               /* sequence number */
+};
+
+enum {
+       IFAL_ADDRESS = 1,
+       IFAL_LABEL = 2,
+       __IFAL_MAX
+};
+
+#define IFAL_MAX       (__IFAL_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/if_alg.h b/lib/libdss-include/linux/if_alg.h
new file mode 100644 (file)
index 0000000..f2acd2f
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * if_alg: User-space algorithm interface
+ *
+ * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ */
+
+#ifndef _LINUX_IF_ALG_H
+#define _LINUX_IF_ALG_H
+
+#include <linux/types.h>
+
+struct sockaddr_alg {
+       __u16   salg_family;
+       __u8    salg_type[14];
+       __u32   salg_feat;
+       __u32   salg_mask;
+       __u8    salg_name[64];
+};
+
+struct af_alg_iv {
+       __u32   ivlen;
+       __u8    iv[0];
+};
+
+/* Socket options */
+#define ALG_SET_KEY                    1
+#define ALG_SET_IV                     2
+#define ALG_SET_OP                     3
+#define ALG_SET_AEAD_ASSOCLEN          4
+#define ALG_SET_AEAD_AUTHSIZE          5
+
+/* Operations */
+#define ALG_OP_DECRYPT                 0
+#define ALG_OP_ENCRYPT                 1
+
+#endif /* _LINUX_IF_ALG_H */
diff --git a/lib/libdss-include/linux/if_arcnet.h b/lib/libdss-include/linux/if_arcnet.h
new file mode 100644 (file)
index 0000000..cfb642f
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * INET         An implementation of the TCP/IP protocol suite for the LINUX
+ *              operating system.  INET is implemented using the  BSD Socket
+ *              interface as the means of communication with the user level.
+ *
+ *              Global definitions for the ARCnet interface.
+ *
+ * Authors:     David Woodhouse and Avery Pennarun
+ *
+ *              This program is free software; you can redistribute it and/or
+ *              modify it under the terms of the GNU General Public License
+ *              as published by the Free Software Foundation; either version
+ *              2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_ARCNET_H
+#define _LINUX_IF_ARCNET_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+ *    These are the defined ARCnet Protocol ID's.
+ */
+
+/* CAP mode */
+/* No macro but uses 1-8 */
+
+/* RFC1201 Protocol ID's */
+#define ARC_P_IP               212     /* 0xD4 */
+#define ARC_P_IPV6             196     /* 0xC4: RFC2497 */
+#define ARC_P_ARP              213     /* 0xD5 */
+#define ARC_P_RARP             214     /* 0xD6 */
+#define ARC_P_IPX              250     /* 0xFA */
+#define ARC_P_NOVELL_EC                236     /* 0xEC */
+
+/* Old RFC1051 Protocol ID's */
+#define ARC_P_IP_RFC1051       240     /* 0xF0 */
+#define ARC_P_ARP_RFC1051      241     /* 0xF1 */
+
+/* MS LanMan/WfWg "NDIS" encapsulation */
+#define ARC_P_ETHER            232     /* 0xE8 */
+
+/* Unsupported/indirectly supported protocols */
+#define ARC_P_DATAPOINT_BOOT   0       /* very old Datapoint equipment */
+#define ARC_P_DATAPOINT_MOUNT  1
+#define ARC_P_POWERLAN_BEACON  8       /* Probably ATA-Netbios related */
+#define ARC_P_POWERLAN_BEACON2 243     /* 0xF3 */
+#define ARC_P_LANSOFT          251     /* 0xFB - what is this? */
+#define ARC_P_ATALK            0xDD
+
+/* Hardware address length */
+#define ARCNET_ALEN    1
+
+/*
+ * The RFC1201-specific components of an arcnet packet header.
+ */
+struct arc_rfc1201 {
+       __u8  proto;            /* protocol ID field - varies           */
+       __u8  split_flag;       /* for use with split packets           */
+       __be16   sequence;      /* sequence number                      */
+       __u8  payload[0];       /* space remaining in packet (504 bytes)*/
+};
+#define RFC1201_HDR_SIZE 4
+
+/*
+ * The RFC1051-specific components.
+ */
+struct arc_rfc1051 {
+       __u8 proto;             /* ARC_P_RFC1051_ARP/RFC1051_IP */
+       __u8 payload[0];        /* 507 bytes                    */
+};
+#define RFC1051_HDR_SIZE 1
+
+/*
+ * The ethernet-encap-specific components.  We have a real ethernet header
+ * and some data.
+ */
+struct arc_eth_encap {
+       __u8 proto;             /* Always ARC_P_ETHER                   */
+       struct ethhdr eth;      /* standard ethernet header (yuck!)     */
+       __u8 payload[0];        /* 493 bytes                            */
+};
+#define ETH_ENCAP_HDR_SIZE 14
+
+struct arc_cap {
+       __u8 proto;
+       __u8 cookie[sizeof(int)];
+                               /* Actually NOT sent over the network */
+       union {
+               __u8 ack;
+               __u8 raw[0];    /* 507 bytes */
+       } mes;
+};
+
+/*
+ * The data needed by the actual arcnet hardware.
+ *
+ * Now, in the real arcnet hardware, the third and fourth bytes are the
+ * 'offset' specification instead of the length, and the soft data is at
+ * the _end_ of the 512-byte buffer.  We hide this complexity inside the
+ * driver.
+ */
+struct arc_hardware {
+       __u8 source;            /* source ARCnet - filled in automagically */
+       __u8 dest;              /* destination ARCnet - 0 for broadcast    */
+       __u8 offset[2];         /* offset bytes (some weird semantics)     */
+};
+#define ARC_HDR_SIZE 4
+
+/*
+ * This is an ARCnet frame header, as seen by the kernel (and userspace,
+ * when you do a raw packet capture).
+ */
+struct archdr {
+       /* hardware requirements */
+       struct arc_hardware hard;
+
+       /* arcnet encapsulation-specific bits */
+       union {
+               struct arc_rfc1201   rfc1201;
+               struct arc_rfc1051   rfc1051;
+               struct arc_eth_encap eth_encap;
+               struct arc_cap       cap;
+               __u8 raw[0];    /* 508 bytes                            */
+       } soft;
+};
+
+#endif                         /* _LINUX_IF_ARCNET_H */
diff --git a/lib/libdss-include/linux/if_arp.h b/lib/libdss-include/linux/if_arp.h
new file mode 100644 (file)
index 0000000..d001bdb
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the ARP (RFC 826) protocol.
+ *
+ * Version:    @(#)if_arp.h    1.0.1   04/16/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
+ *             Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source.
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Florian La Roche,
+ *             Jonathan Layes <layes@loran.com>
+ *             Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_ARP_H
+#define _LINUX_IF_ARP_H
+
+#include <linux/netdevice.h>
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM  0               /* from KA9Q: NET/ROM pseudo    */
+#define ARPHRD_ETHER   1               /* Ethernet 10Mbps              */
+#define        ARPHRD_EETHER   2               /* Experimental Ethernet        */
+#define        ARPHRD_AX25     3               /* AX.25 Level 2                */
+#define        ARPHRD_PRONET   4               /* PROnet token ring            */
+#define        ARPHRD_CHAOS    5               /* Chaosnet                     */
+#define        ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB    */
+#define        ARPHRD_ARCNET   7               /* ARCnet                       */
+#define        ARPHRD_APPLETLK 8               /* APPLEtalk                    */
+#define ARPHRD_DLCI    15              /* Frame Relay DLCI             */
+#define ARPHRD_ATM     19              /* ATM                          */
+#define ARPHRD_METRICOM        23              /* Metricom STRIP (new IANA id) */
+#define        ARPHRD_IEEE1394 24              /* IEEE 1394 IPv4 - RFC 2734    */
+#define ARPHRD_EUI64   27              /* EUI-64                       */
+#define ARPHRD_INFINIBAND 32           /* InfiniBand                   */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP    256
+#define ARPHRD_CSLIP   257
+#define ARPHRD_SLIP6   258
+#define ARPHRD_CSLIP6  259
+#define ARPHRD_RSRVD   260             /* Notional KISS type           */
+#define ARPHRD_ADAPT   264
+#define ARPHRD_ROSE    270
+#define ARPHRD_X25     271             /* CCITT X.25                   */
+#define ARPHRD_HWX25   272             /* Boards with X.25 in firmware */
+#define ARPHRD_CAN     280             /* Controller Area Network      */
+#define ARPHRD_PPP     512
+#define ARPHRD_CISCO   513             /* Cisco HDLC                   */
+#define ARPHRD_HDLC    ARPHRD_CISCO
+#define ARPHRD_LAPB    516             /* LAPB                         */
+#define ARPHRD_DDCMP    517            /* Digital's DDCMP protocol     */
+#define ARPHRD_RAWHDLC 518             /* Raw HDLC                     */
+
+#define ARPHRD_TUNNEL  768             /* IPIP tunnel                  */
+#define ARPHRD_TUNNEL6 769             /* IP6IP6 tunnel                */
+#define ARPHRD_FRAD    770             /* Frame Relay Access Device    */
+#define ARPHRD_SKIP    771             /* SKIP vif                     */
+#define ARPHRD_LOOPBACK        772             /* Loopback device              */
+#define ARPHRD_LOCALTLK 773            /* Localtalk device             */
+#define ARPHRD_FDDI    774             /* Fiber Distributed Data Interface */
+#define ARPHRD_BIF      775             /* AP1000 BIF                   */
+#define ARPHRD_SIT     776             /* sit0 device - IPv6-in-IPv4   */
+#define ARPHRD_IPDDP   777             /* IP over DDP tunneller        */
+#define ARPHRD_IPGRE   778             /* GRE over IP                  */
+#define ARPHRD_PIMREG  779             /* PIMSM register interface     */
+#define ARPHRD_HIPPI   780             /* High Performance Parallel Interface */
+#define ARPHRD_ASH     781             /* Nexus 64Mbps Ash             */
+#define ARPHRD_ECONET  782             /* Acorn Econet                 */
+#define ARPHRD_IRDA    783             /* Linux-IrDA                   */
+/* ARP works differently on different FC media .. so  */
+#define ARPHRD_FCPP    784             /* Point to point fibrechannel  */
+#define ARPHRD_FCAL    785             /* Fibrechannel arbitrated loop */
+#define ARPHRD_FCPL    786             /* Fibrechannel public loop     */
+#define ARPHRD_FCFABRIC        787             /* Fibrechannel fabric          */
+       /* 787->799 reserved for fibrechannel media types */
+#define ARPHRD_IEEE802_TR 800          /* Magic type ident for TR      */
+#define ARPHRD_IEEE80211 801           /* IEEE 802.11                  */
+#define ARPHRD_IEEE80211_PRISM 802     /* IEEE 802.11 + Prism2 header  */
+#define ARPHRD_IEEE80211_RADIOTAP 803  /* IEEE 802.11 + radiotap header */
+#define ARPHRD_IEEE802154        804
+#define ARPHRD_IEEE802154_MONITOR 805  /* IEEE 802.15.4 network monitor */
+
+#define ARPHRD_PHONET  820             /* PhoNet media type            */
+#define ARPHRD_PHONET_PIPE 821         /* PhoNet pipe header           */
+#define ARPHRD_CAIF    822             /* CAIF media type              */
+#define ARPHRD_IP6GRE  823             /* GRE over IPv6                */
+#define ARPHRD_NETLINK 824             /* Netlink header               */
+#define ARPHRD_6LOWPAN 825             /* IPv6 over LoWPAN             */
+
+#define ARPHRD_VOID      0xFFFF        /* Void type, nothing is known */
+#define ARPHRD_NONE      0xFFFE        /* zero header length */
+
+/* ARP protocol opcodes. */
+#define        ARPOP_REQUEST   1               /* ARP request                  */
+#define        ARPOP_REPLY     2               /* ARP reply                    */
+#define        ARPOP_RREQUEST  3               /* RARP request                 */
+#define        ARPOP_RREPLY    4               /* RARP reply                   */
+#define        ARPOP_InREQUEST 8               /* InARP request                */
+#define        ARPOP_InREPLY   9               /* InARP reply                  */
+#define        ARPOP_NAK       10              /* (ATM)ARP NAK                 */
+
+
+/* ARP ioctl request. */
+struct arpreq {
+  struct sockaddr      arp_pa;         /* protocol address             */
+  struct sockaddr      arp_ha;         /* hardware address             */
+  int                  arp_flags;      /* flags                        */
+  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */
+  char                 arp_dev[16];
+};
+
+struct arpreq_old {
+  struct sockaddr      arp_pa;         /* protocol address             */
+  struct sockaddr      arp_ha;         /* hardware address             */
+  int                  arp_flags;      /* flags                        */
+  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */
+};
+
+/* ARP Flag values. */
+#define ATF_COM                0x02            /* completed entry (ha valid)   */
+#define        ATF_PERM        0x04            /* permanent entry              */
+#define        ATF_PUBL        0x08            /* publish entry                */
+#define        ATF_USETRAILERS 0x10            /* has requested trailers       */
+#define ATF_NETMASK     0x20            /* want to use a netmask (only
+                                          for proxy entries) */
+#define ATF_DONTPUB    0x40            /* don't answer this addresses  */
+
+/*
+ *     This structure defines an ethernet arp header.
+ */
+
+struct arphdr {
+       __be16          ar_hrd;         /* format of hardware address   */
+       __be16          ar_pro;         /* format of protocol address   */
+       unsigned char   ar_hln;         /* length of hardware address   */
+       unsigned char   ar_pln;         /* length of protocol address   */
+       __be16          ar_op;          /* ARP opcode (command)         */
+
+#if 0
+        /*
+         *      Ethernet looks like this : This bit is variable sized however...
+         */
+       unsigned char           ar_sha[ETH_ALEN];       /* sender hardware address      */
+       unsigned char           ar_sip[4];              /* sender IP address            */
+       unsigned char           ar_tha[ETH_ALEN];       /* target hardware address      */
+       unsigned char           ar_tip[4];              /* target IP address            */
+#endif
+
+};
+
+
+#endif /* _LINUX_IF_ARP_H */
diff --git a/lib/libdss-include/linux/if_bonding.h b/lib/libdss-include/linux/if_bonding.h
new file mode 100644 (file)
index 0000000..9635a62
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
+ *
+ *
+ * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
+ * NCM: Network and Communications Management, Inc.
+ *
+ * BUT, I'm the one who modified it for ethernet, so:
+ * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
+ *
+ *     This software may be used and distributed according to the terms
+ *     of the GNU Public License, incorporated herein by reference.
+ *
+ * 2003/03/18 - Amir Noam <amir.noam at intel dot com>
+ *     - Added support for getting slave's speed and duplex via ethtool.
+ *       Needed for 802.3ad and other future modes.
+ *
+ * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Enable support of modes that need to use the unique mac address of
+ *       each slave.
+ *
+ * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Amir Noam <amir.noam at intel dot com>
+ *     - Moved driver's private data types to bonding.h
+ *
+ * 2003/03/18 - Amir Noam <amir.noam at intel dot com>,
+ *             Tsippy Mendelson <tsippy.mendelson at intel dot com> and
+ *             Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Added support for IEEE 802.3ad Dynamic link aggregation mode.
+ *
+ * 2003/05/01 - Amir Noam <amir.noam at intel dot com>
+ *     - Added ABI version control to restore compatibility between
+ *       new/old ifenslave and new/old bonding.
+ *
+ * 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com>
+ *     - Code cleanup and style changes
+ *
+ * 2005/05/05 - Jason Gabler <jygabler at lbl dot gov>
+ *      - added definitions for various XOR hashing policies
+ */
+
+#ifndef _LINUX_IF_BONDING_H
+#define _LINUX_IF_BONDING_H
+
+#include <linux/if.h>
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/* userland - kernel ABI version (2003/05/08) */
+#define BOND_ABI_VERSION 2
+
+/*
+ * We can remove these ioctl definitions in 2.5.  People should use the
+ * SIOC*** versions of them instead
+ */
+#define BOND_ENSLAVE_OLD               (SIOCDEVPRIVATE)
+#define BOND_RELEASE_OLD               (SIOCDEVPRIVATE + 1)
+#define BOND_SETHWADDR_OLD             (SIOCDEVPRIVATE + 2)
+#define BOND_SLAVE_INFO_QUERY_OLD      (SIOCDEVPRIVATE + 11)
+#define BOND_INFO_QUERY_OLD            (SIOCDEVPRIVATE + 12)
+#define BOND_CHANGE_ACTIVE_OLD         (SIOCDEVPRIVATE + 13)
+
+#define BOND_CHECK_MII_STATUS  (SIOCGMIIPHY)
+
+#define BOND_MODE_ROUNDROBIN   0
+#define BOND_MODE_ACTIVEBACKUP 1
+#define BOND_MODE_XOR          2
+#define BOND_MODE_BROADCAST    3
+#define BOND_MODE_8023AD        4
+#define BOND_MODE_TLB           5
+#define BOND_MODE_ALB          6 /* TLB + RLB (receive load balancing) */
+
+/* each slave's link has 4 states */
+#define BOND_LINK_UP    0           /* link is up and running */
+#define BOND_LINK_FAIL  1           /* link has just gone down */
+#define BOND_LINK_DOWN  2           /* link has been down for too long time */
+#define BOND_LINK_BACK  3           /* link is going back */
+
+/* each slave has several states */
+#define BOND_STATE_ACTIVE       0   /* link is active */
+#define BOND_STATE_BACKUP       1   /* link is backup */
+
+#define BOND_DEFAULT_MAX_BONDS  1   /* Default maximum number of devices to support */
+
+#define BOND_DEFAULT_TX_QUEUES 16   /* Default number of tx queues per device */
+
+#define BOND_DEFAULT_RESEND_IGMP       1 /* Default number of IGMP membership reports */
+
+/* hashing types */
+#define BOND_XMIT_POLICY_LAYER2                0 /* layer 2 (MAC only), default */
+#define BOND_XMIT_POLICY_LAYER34       1 /* layer 3+4 (IP ^ (TCP || UDP)) */
+#define BOND_XMIT_POLICY_LAYER23       2 /* layer 2+3 (IP ^ MAC) */
+#define BOND_XMIT_POLICY_ENCAP23       3 /* encapsulated layer 2+3 */
+#define BOND_XMIT_POLICY_ENCAP34       4 /* encapsulated layer 3+4 */
+
+typedef struct ifbond {
+       __s32 bond_mode;
+       __s32 num_slaves;
+       __s32 miimon;
+} ifbond;
+
+typedef struct ifslave {
+       __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
+       char slave_name[IFNAMSIZ];
+       __s8 link;
+       __s8 state;
+       __u32  link_failure_count;
+} ifslave;
+
+struct ad_info {
+       __u16 aggregator_id;
+       __u16 ports;
+       __u16 actor_key;
+       __u16 partner_key;
+       __u8 partner_system[ETH_ALEN];
+};
+
+#endif /* _LINUX_IF_BONDING_H */
+
+/*
+ * Local variables:
+ *  version-control: t
+ *  kept-new-versions: 5
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ *  tab-width: 8
+ * End:
+ */
+
diff --git a/lib/libdss-include/linux/if_bridge.h b/lib/libdss-include/linux/if_bridge.h
new file mode 100644 (file)
index 0000000..ee197a3
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ *     Linux ethernet bridge
+ *
+ *     Authors:
+ *     Lennert Buytenhek               <buytenh@gnu.org>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_BRIDGE_H
+#define _LINUX_IF_BRIDGE_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+#include <linux/in6.h>
+
+#define SYSFS_BRIDGE_ATTR      "bridge"
+#define SYSFS_BRIDGE_FDB       "brforward"
+#define SYSFS_BRIDGE_PORT_SUBDIR "brif"
+#define SYSFS_BRIDGE_PORT_ATTR "brport"
+#define SYSFS_BRIDGE_PORT_LINK "bridge"
+
+#define BRCTL_VERSION 1
+
+#define BRCTL_GET_VERSION 0
+#define BRCTL_GET_BRIDGES 1
+#define BRCTL_ADD_BRIDGE 2
+#define BRCTL_DEL_BRIDGE 3
+#define BRCTL_ADD_IF 4
+#define BRCTL_DEL_IF 5
+#define BRCTL_GET_BRIDGE_INFO 6
+#define BRCTL_GET_PORT_LIST 7
+#define BRCTL_SET_BRIDGE_FORWARD_DELAY 8
+#define BRCTL_SET_BRIDGE_HELLO_TIME 9
+#define BRCTL_SET_BRIDGE_MAX_AGE 10
+#define BRCTL_SET_AGEING_TIME 11
+#define BRCTL_SET_GC_INTERVAL 12
+#define BRCTL_GET_PORT_INFO 13
+#define BRCTL_SET_BRIDGE_STP_STATE 14
+#define BRCTL_SET_BRIDGE_PRIORITY 15
+#define BRCTL_SET_PORT_PRIORITY 16
+#define BRCTL_SET_PATH_COST 17
+#define BRCTL_GET_FDB_ENTRIES 18
+
+#define BR_STATE_DISABLED 0
+#define BR_STATE_LISTENING 1
+#define BR_STATE_LEARNING 2
+#define BR_STATE_FORWARDING 3
+#define BR_STATE_BLOCKING 4
+
+struct __bridge_info {
+       __u64 designated_root;
+       __u64 bridge_id;
+       __u32 root_path_cost;
+       __u32 max_age;
+       __u32 hello_time;
+       __u32 forward_delay;
+       __u32 bridge_max_age;
+       __u32 bridge_hello_time;
+       __u32 bridge_forward_delay;
+       __u8 topology_change;
+       __u8 topology_change_detected;
+       __u8 root_port;
+       __u8 stp_enabled;
+       __u32 ageing_time;
+       __u32 gc_interval;
+       __u32 hello_timer_value;
+       __u32 tcn_timer_value;
+       __u32 topology_change_timer_value;
+       __u32 gc_timer_value;
+};
+
+struct __port_info {
+       __u64 designated_root;
+       __u64 designated_bridge;
+       __u16 port_id;
+       __u16 designated_port;
+       __u32 path_cost;
+       __u32 designated_cost;
+       __u8 state;
+       __u8 top_change_ack;
+       __u8 config_pending;
+       __u8 unused0;
+       __u32 message_age_timer_value;
+       __u32 forward_delay_timer_value;
+       __u32 hold_timer_value;
+};
+
+struct __fdb_entry {
+       __u8 mac_addr[ETH_ALEN];
+       __u8 port_no;
+       __u8 is_local;
+       __u32 ageing_timer_value;
+       __u8 port_hi;
+       __u8 pad0;
+       __u16 unused;
+};
+
+/* Bridge Flags */
+#define BRIDGE_FLAGS_MASTER    1       /* Bridge command to/from master */
+#define BRIDGE_FLAGS_SELF      2       /* Bridge command to/from lowerdev */
+
+#define BRIDGE_MODE_VEB                0       /* Default loopback mode */
+#define BRIDGE_MODE_VEPA       1       /* 802.1Qbg defined VEPA mode */
+#define BRIDGE_MODE_UNDEF      0xFFFF  /* mode undefined */
+
+/* Bridge management nested attributes
+ * [IFLA_AF_SPEC] = {
+ *     [IFLA_BRIDGE_FLAGS]
+ *     [IFLA_BRIDGE_MODE]
+ *     [IFLA_BRIDGE_VLAN_INFO]
+ * }
+ */
+enum {
+       IFLA_BRIDGE_FLAGS,
+       IFLA_BRIDGE_MODE,
+       IFLA_BRIDGE_VLAN_INFO,
+       __IFLA_BRIDGE_MAX,
+};
+#define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
+
+#define BRIDGE_VLAN_INFO_MASTER        (1<<0)  /* Operate on Bridge device as well */
+#define BRIDGE_VLAN_INFO_PVID  (1<<1)  /* VLAN is PVID, ingress untagged */
+#define BRIDGE_VLAN_INFO_UNTAGGED      (1<<2)  /* VLAN egresses untagged */
+#define BRIDGE_VLAN_INFO_RANGE_BEGIN   (1<<3) /* VLAN is start of vlan range */
+#define BRIDGE_VLAN_INFO_RANGE_END     (1<<4) /* VLAN is end of vlan range */
+#define BRIDGE_VLAN_INFO_BRENTRY       (1<<5) /* Global bridge VLAN entry */
+
+struct bridge_vlan_info {
+       __u16 flags;
+       __u16 vid;
+};
+
+/* Bridge multicast database attributes
+ * [MDBA_MDB] = {
+ *     [MDBA_MDB_ENTRY] = {
+ *         [MDBA_MDB_ENTRY_INFO]
+ *     }
+ * }
+ * [MDBA_ROUTER] = {
+ *    [MDBA_ROUTER_PORT]
+ * }
+ */
+enum {
+       MDBA_UNSPEC,
+       MDBA_MDB,
+       MDBA_ROUTER,
+       __MDBA_MAX,
+};
+#define MDBA_MAX (__MDBA_MAX - 1)
+
+enum {
+       MDBA_MDB_UNSPEC,
+       MDBA_MDB_ENTRY,
+       __MDBA_MDB_MAX,
+};
+#define MDBA_MDB_MAX (__MDBA_MDB_MAX - 1)
+
+enum {
+       MDBA_MDB_ENTRY_UNSPEC,
+       MDBA_MDB_ENTRY_INFO,
+       __MDBA_MDB_ENTRY_MAX,
+};
+#define MDBA_MDB_ENTRY_MAX (__MDBA_MDB_ENTRY_MAX - 1)
+
+enum {
+       MDBA_ROUTER_UNSPEC,
+       MDBA_ROUTER_PORT,
+       __MDBA_ROUTER_MAX,
+};
+#define MDBA_ROUTER_MAX (__MDBA_ROUTER_MAX - 1)
+
+struct br_port_msg {
+       __u8  family;
+       __u32 ifindex;
+};
+
+struct br_mdb_entry {
+       __u32 ifindex;
+#define MDB_TEMPORARY 0
+#define MDB_PERMANENT 1
+       __u8 state;
+       __u16 vid;
+       struct {
+               union {
+                       __be32  ip4;
+                       struct in6_addr ip6;
+               } u;
+               __be16          proto;
+       } addr;
+};
+
+enum {
+       MDBA_SET_ENTRY_UNSPEC,
+       MDBA_SET_ENTRY,
+       __MDBA_SET_ENTRY_MAX,
+};
+#define MDBA_SET_ENTRY_MAX (__MDBA_SET_ENTRY_MAX - 1)
+
+#endif /* _LINUX_IF_BRIDGE_H */
diff --git a/lib/libdss-include/linux/if_cablemodem.h b/lib/libdss-include/linux/if_cablemodem.h
new file mode 100644 (file)
index 0000000..ee6b3c4
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _LINUX_CABLEMODEM_H_
+#define _LINUX_CABLEMODEM_H_
+/*
+ *             Author: Franco Venturi <fventuri@mediaone.net>
+ *             Copyright 1998 Franco Venturi
+ *
+ *             This program is free software; you can redistribute it
+ *             and/or  modify it under  the terms of  the GNU General
+ *             Public  License as  published  by  the  Free  Software
+ *             Foundation;  either  version 2 of the License, or  (at
+ *             your option) any later version.
+ */
+
+/* some useful defines for sb1000.c e cmconfig.c - fv */
+#define SIOCGCMSTATS           (SIOCDEVPRIVATE+0)      /* get cable modem stats */
+#define SIOCGCMFIRMWARE                (SIOCDEVPRIVATE+1)      /* get cm firmware version */
+#define SIOCGCMFREQUENCY       (SIOCDEVPRIVATE+2)      /* get cable modem frequency */
+#define SIOCSCMFREQUENCY       (SIOCDEVPRIVATE+3)      /* set cable modem frequency */
+#define SIOCGCMPIDS                    (SIOCDEVPRIVATE+4)      /* get cable modem PIDs */
+#define SIOCSCMPIDS                    (SIOCDEVPRIVATE+5)      /* set cable modem PIDs */
+
+#endif
diff --git a/lib/libdss-include/linux/if_eql.h b/lib/libdss-include/linux/if_eql.h
new file mode 100644 (file)
index 0000000..3b489be
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Equalizer Load-balancer for serial network interfaces.
+ *
+ * (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
+ * NCM: Network and Communications Management, Inc.
+ *
+ *
+ *     This software may be used and distributed according to the terms
+ *     of the GNU General Public License, incorporated herein by reference.
+ * 
+ * The author may be reached as simon@ncm.com, or C/O
+ *    NCM
+ *    Attn: Simon Janes
+ *    6803 Whittier Ave
+ *    McLean VA 22101
+ *    Phone: 1-703-847-0040 ext 103
+ */
+
+#ifndef _LINUX_IF_EQL_H
+#define _LINUX_IF_EQL_H
+
+#define EQL_DEFAULT_SLAVE_PRIORITY 28800
+#define EQL_DEFAULT_MAX_SLAVES     4
+#define EQL_DEFAULT_MTU            576
+#define EQL_DEFAULT_RESCHED_IVAL   HZ
+
+#define EQL_ENSLAVE     (SIOCDEVPRIVATE)
+#define EQL_EMANCIPATE  (SIOCDEVPRIVATE + 1)
+
+#define EQL_GETSLAVECFG (SIOCDEVPRIVATE + 2)
+#define EQL_SETSLAVECFG (SIOCDEVPRIVATE + 3)
+
+#define EQL_GETMASTRCFG (SIOCDEVPRIVATE + 4)
+#define EQL_SETMASTRCFG (SIOCDEVPRIVATE + 5)
+
+
+typedef struct master_config {
+       char    master_name[16];
+       int     max_slaves;
+       int     min_slaves;
+} master_config_t;
+
+typedef struct slave_config {
+       char    slave_name[16];
+       long    priority;
+} slave_config_t;
+
+typedef struct slaving_request {
+       char    slave_name[16];
+       long    priority;
+} slaving_request_t;
+
+
+#endif /* _LINUX_IF_EQL_H */
diff --git a/lib/libdss-include/linux/if_ether.h b/lib/libdss-include/linux/if_ether.h
new file mode 100644 (file)
index 0000000..bf278d6
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the Ethernet IEEE 802.3 interface.
+ *
+ * Version:    @(#)if_ether.h  1.0.1a  02/08/94
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_ETHER_H
+#define _LINUX_IF_ETHER_H
+
+#include <linux/types.h>
+
+/*
+ *     IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
+ *     and FCS/CRC (frame check sequence).
+ */
+
+#define ETH_ALEN       6               /* Octets in one ethernet addr   */
+#define ETH_HLEN       14              /* Total octets in header.       */
+#define ETH_ZLEN       60              /* Min. octets in frame sans FCS */
+#define ETH_DATA_LEN   1500            /* Max. octets in payload        */
+#define ETH_FRAME_LEN  1514            /* Max. octets in frame sans FCS */
+#define ETH_FCS_LEN    4               /* Octets in the FCS             */
+
+/*
+ *     These are the defined Ethernet Protocol ID's.
+ */
+
+#define ETH_P_LOOP     0x0060          /* Ethernet Loopback packet     */
+#define ETH_P_PUP      0x0200          /* Xerox PUP packet             */
+#define ETH_P_PUPAT    0x0201          /* Xerox PUP Addr Trans packet  */
+#define ETH_P_TSN      0x22F0          /* TSN (IEEE 1722) packet       */
+#define ETH_P_IP       0x0800          /* Internet Protocol packet     */
+#define ETH_P_X25      0x0805          /* CCITT X.25                   */
+#define ETH_P_ARP      0x0806          /* Address Resolution packet    */
+#define        ETH_P_BPQ       0x08FF          /* G8BPQ AX.25 Ethernet Packet  [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_IEEEPUP  0x0a00          /* Xerox IEEE802.3 PUP packet */
+#define ETH_P_IEEEPUPAT        0x0a01          /* Xerox IEEE802.3 PUP Addr Trans packet */
+#define ETH_P_BATMAN   0x4305          /* B.A.T.M.A.N.-Advanced packet [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_DEC       0x6000          /* DEC Assigned proto           */
+#define ETH_P_DNA_DL    0x6001          /* DEC DNA Dump/Load            */
+#define ETH_P_DNA_RC    0x6002          /* DEC DNA Remote Console       */
+#define ETH_P_DNA_RT    0x6003          /* DEC DNA Routing              */
+#define ETH_P_LAT       0x6004          /* DEC LAT                      */
+#define ETH_P_DIAG      0x6005          /* DEC Diagnostics              */
+#define ETH_P_CUST      0x6006          /* DEC Customer use             */
+#define ETH_P_SCA       0x6007          /* DEC Systems Comms Arch       */
+#define ETH_P_TEB      0x6558          /* Trans Ether Bridging         */
+#define ETH_P_RARP      0x8035         /* Reverse Addr Res packet      */
+#define ETH_P_ATALK    0x809B          /* Appletalk DDP                */
+#define ETH_P_AARP     0x80F3          /* Appletalk AARP               */
+#define ETH_P_8021Q    0x8100          /* 802.1Q VLAN Extended Header  */
+#define ETH_P_IPX      0x8137          /* IPX over DIX                 */
+#define ETH_P_IPV6     0x86DD          /* IPv6 over bluebook           */
+#define ETH_P_PAUSE    0x8808          /* IEEE Pause frames. See 802.3 31B */
+#define ETH_P_SLOW     0x8809          /* Slow Protocol. See 802.3ad 43B */
+#define ETH_P_WCCP     0x883E          /* Web-cache coordination protocol
+                                        * defined in draft-wilson-wrec-wccp-v2-00.txt */
+#define ETH_P_MPLS_UC  0x8847          /* MPLS Unicast traffic         */
+#define ETH_P_MPLS_MC  0x8848          /* MPLS Multicast traffic       */
+#define ETH_P_ATMMPOA  0x884c          /* MultiProtocol Over ATM       */
+#define ETH_P_PPP_DISC 0x8863          /* PPPoE discovery messages     */
+#define ETH_P_PPP_SES  0x8864          /* PPPoE session messages       */
+#define ETH_P_LINK_CTL 0x886c          /* HPNA, wlan link local tunnel */
+#define ETH_P_ATMFATE  0x8884          /* Frame-based ATM Transport
+                                        * over Ethernet
+                                        */
+#define ETH_P_PAE      0x888E          /* Port Access Entity (IEEE 802.1X) */
+#define ETH_P_AOE      0x88A2          /* ATA over Ethernet            */
+#define ETH_P_8021AD   0x88A8          /* 802.1ad Service VLAN         */
+#define ETH_P_802_EX1  0x88B5          /* 802.1 Local Experimental 1.  */
+#define ETH_P_TIPC     0x88CA          /* TIPC                         */
+#define ETH_P_8021AH   0x88E7          /* 802.1ah Backbone Service Tag */
+#define ETH_P_MVRP     0x88F5          /* 802.1Q MVRP                  */
+#define ETH_P_1588     0x88F7          /* IEEE 1588 Timesync */
+#define ETH_P_PRP      0x88FB          /* IEC 62439-3 PRP/HSRv0        */
+#define ETH_P_FCOE     0x8906          /* Fibre Channel over Ethernet  */
+#define ETH_P_TDLS     0x890D          /* TDLS */
+#define ETH_P_FIP      0x8914          /* FCoE Initialization Protocol */
+#define ETH_P_80221    0x8917          /* IEEE 802.21 Media Independent Handover Protocol */
+#define ETH_P_LOOPBACK 0x9000          /* Ethernet loopback packet, per IEEE 802.3 */
+#define ETH_P_QINQ1    0x9100          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_QINQ2    0x9200          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_QINQ3    0x9300          /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_EDSA     0xDADA          /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
+#define ETH_P_AF_IUCV   0xFBFB         /* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */
+
+#define ETH_P_802_3_MIN        0x0600          /* If the value in the ethernet type is less than this value
+                                        * then the frame is Ethernet II. Else it is 802.3 */
+
+/*
+ *     Non DIX types. Won't clash for 1500 types.
+ */
+
+#define ETH_P_802_3    0x0001          /* Dummy type for 802.3 frames  */
+#define ETH_P_AX25     0x0002          /* Dummy protocol id for AX.25  */
+#define ETH_P_ALL      0x0003          /* Every packet (be careful!!!) */
+#define ETH_P_802_2    0x0004          /* 802.2 frames                 */
+#define ETH_P_SNAP     0x0005          /* Internal only                */
+#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */
+#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/
+#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */
+#define ETH_P_LOCALTALK 0x0009         /* Localtalk pseudo type        */
+#define ETH_P_CAN      0x000C          /* CAN: Controller Area Network */
+#define ETH_P_CANFD    0x000D          /* CANFD: CAN flexible data rate*/
+#define ETH_P_PPPTALK  0x0010          /* Dummy type for Atalk over PPP*/
+#define ETH_P_TR_802_2 0x0011          /* 802.2 frames                 */
+#define ETH_P_MOBITEX  0x0015          /* Mobitex (kaz@cafe.net)       */
+#define ETH_P_CONTROL  0x0016          /* Card specific control frames */
+#define ETH_P_IRDA     0x0017          /* Linux-IrDA                   */
+#define ETH_P_ECONET   0x0018          /* Acorn Econet                 */
+#define ETH_P_HDLC     0x0019          /* HDLC frames                  */
+#define ETH_P_ARCNET   0x001A          /* 1A for ArcNet :-)            */
+#define ETH_P_DSA      0x001B          /* Distributed Switch Arch.     */
+#define ETH_P_TRAILER  0x001C          /* Trailer switch tagging       */
+#define ETH_P_PHONET   0x00F5          /* Nokia Phonet frames          */
+#define ETH_P_IEEE802154 0x00F6                /* IEEE802.15.4 frame           */
+#define ETH_P_CAIF     0x00F7          /* ST-Ericsson CAIF protocol    */
+#define ETH_P_XDSA     0x00F8          /* Multiplexed DSA protocol     */
+
+/*
+ *     This is an Ethernet frame header.
+ */
+
+struct ethhdr {
+       unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
+       unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
+       __be16          h_proto;                /* packet type ID field */
+} __attribute__((packed));
+
+
+#endif /* _LINUX_IF_ETHER_H */
diff --git a/lib/libdss-include/linux/if_fc.h b/lib/libdss-include/linux/if_fc.h
new file mode 100644 (file)
index 0000000..6ed7f1b
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for Fibre Channel.
+ *
+ * Version:    @(#)if_fc.h     0.0     11/20/98
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *    Peter De Schrijver, <stud11@cc4.kuleuven.ac.be>
+ *       Vineet Abraham, <vma@iol.unh.edu>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_FC_H
+#define _LINUX_IF_FC_H
+
+#include <linux/types.h>
+
+#define FC_ALEN        6               /* Octets in one ethernet addr   */
+#define FC_HLEN   (sizeof(struct fch_hdr)+sizeof(struct fcllc))
+#define FC_ID_LEN 3            /* Octets in a Fibre Channel Address */
+
+/* LLC and SNAP constants */
+#define EXTENDED_SAP 0xAA
+#define UI_CMD       0x03
+
+/* This is NOT the Fibre Channel frame header. The FC frame header is
+ *  constructed in the driver as the Tachyon needs certain fields in
+ *  certains positions. So, it can't be generalized here.*/
+
+struct fch_hdr {
+       __u8  daddr[FC_ALEN];           /* destination address */
+       __u8  saddr[FC_ALEN];           /* source address */
+};
+
+/* This is a Fibre Channel LLC structure */
+struct fcllc {
+       __u8  dsap;                     /* destination SAP */
+       __u8  ssap;                     /* source SAP */
+       __u8  llc;                      /* LLC control field */
+       __u8  protid[3];                /* protocol id */
+       __be16 ethertype;               /* ether type field */
+};
+
+#endif /* _LINUX_IF_FC_H */
diff --git a/lib/libdss-include/linux/if_fddi.h b/lib/libdss-include/linux/if_fddi.h
new file mode 100644 (file)
index 0000000..6ec21e7
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the ANSI FDDI interface.
+ *
+ * Version:    @(#)if_fddi.h   1.0.2   Sep 29 2004
+ *
+ * Author:     Lawrence V. Stefani, <stefani@lkg.dec.com>
+ *
+ *             if_fddi.h is based on previous if_ether.h and if_tr.h work by
+ *                     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *                     Donald Becker, <becker@super.org>
+ *                     Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *                     Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *                     Peter De Schrijver, <stud11@cc4.kuleuven.ac.be>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_FDDI_H
+#define _LINUX_IF_FDDI_H
+
+#include <linux/types.h>
+
+/*
+ *  Define max and min legal sizes.  The frame sizes do not include
+ *  4 byte FCS/CRC (frame check sequence).
+ */
+#define FDDI_K_ALEN            6       /* Octets in one FDDI address */
+#define FDDI_K_8022_HLEN       16      /* Total octets in 802.2 header */
+#define FDDI_K_SNAP_HLEN       21      /* Total octets in 802.2 SNAP header */
+#define FDDI_K_8022_ZLEN       16      /* Min octets in 802.2 frame sans
+                                          FCS */
+#define FDDI_K_SNAP_ZLEN       21      /* Min octets in 802.2 SNAP frame sans
+                                          FCS */
+#define FDDI_K_8022_DLEN       4475    /* Max octets in 802.2 payload */
+#define FDDI_K_SNAP_DLEN       4470    /* Max octets in 802.2 SNAP payload */
+#define FDDI_K_LLC_ZLEN                13      /* Min octets in LLC frame sans FCS */
+#define FDDI_K_LLC_LEN         4491    /* Max octets in LLC frame sans FCS */
+#define FDDI_K_OUI_LEN         3       /* Octets in OUI in 802.2 SNAP
+                                          header */
+
+/* Define FDDI Frame Control (FC) Byte values */
+#define FDDI_FC_K_VOID                 0x00
+#define FDDI_FC_K_NON_RESTRICTED_TOKEN 0x80
+#define FDDI_FC_K_RESTRICTED_TOKEN     0xC0
+#define FDDI_FC_K_SMT_MIN              0x41
+#define FDDI_FC_K_SMT_MAX              0x4F
+#define FDDI_FC_K_MAC_MIN              0xC1
+#define FDDI_FC_K_MAC_MAX              0xCF
+#define FDDI_FC_K_ASYNC_LLC_MIN                0x50
+#define FDDI_FC_K_ASYNC_LLC_DEF                0x54
+#define FDDI_FC_K_ASYNC_LLC_MAX                0x5F
+#define FDDI_FC_K_SYNC_LLC_MIN         0xD0
+#define FDDI_FC_K_SYNC_LLC_MAX         0xD7
+#define FDDI_FC_K_IMPLEMENTOR_MIN      0x60
+#define FDDI_FC_K_IMPLEMENTOR_MAX      0x6F
+#define FDDI_FC_K_RESERVED_MIN         0x70
+#define FDDI_FC_K_RESERVED_MAX         0x7F
+
+/* Define LLC and SNAP constants */
+#define FDDI_EXTENDED_SAP              0xAA
+#define FDDI_UI_CMD                    0x03
+
+/* Define 802.2 Type 1 header */
+struct fddi_8022_1_hdr {
+       __u8    dsap;                   /* destination service access point */
+       __u8    ssap;                   /* source service access point */
+       __u8    ctrl;                   /* control byte #1 */
+} __attribute__((packed));
+
+/* Define 802.2 Type 2 header */
+struct fddi_8022_2_hdr {
+       __u8    dsap;                   /* destination service access point */
+       __u8    ssap;                   /* source service access point */
+       __u8    ctrl_1;                 /* control byte #1 */
+       __u8    ctrl_2;                 /* control byte #2 */
+} __attribute__((packed));
+
+/* Define 802.2 SNAP header */
+struct fddi_snap_hdr {
+       __u8    dsap;                   /* always 0xAA */
+       __u8    ssap;                   /* always 0xAA */
+       __u8    ctrl;                   /* always 0x03 */
+       __u8    oui[FDDI_K_OUI_LEN];    /* organizational universal id */
+       __be16  ethertype;              /* packet type ID field */
+} __attribute__((packed));
+
+/* Define FDDI LLC frame header */
+struct fddihdr {
+       __u8    fc;                     /* frame control */
+       __u8    daddr[FDDI_K_ALEN];     /* destination address */
+       __u8    saddr[FDDI_K_ALEN];     /* source address */
+       union {
+               struct fddi_8022_1_hdr  llc_8022_1;
+               struct fddi_8022_2_hdr  llc_8022_2;
+               struct fddi_snap_hdr    llc_snap;
+       } hdr;
+} __attribute__((packed));
+
+
+#endif /* _LINUX_IF_FDDI_H */
diff --git a/lib/libdss-include/linux/if_frad.h b/lib/libdss-include/linux/if_frad.h
new file mode 100644 (file)
index 0000000..30361db
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * DLCI/FRAD   Definitions for Frame Relay Access Devices.  DLCI devices are
+ *             created for each DLCI associated with a FRAD.  The FRAD driver
+ *             is not truly a network device, but the lower level device
+ *             handler.  This allows other FRAD manufacturers to use the DLCI
+ *             code, including its RFC1490 encapsulation alongside the current
+ *             implementation for the Sangoma cards.
+ *
+ * Version:    @(#)if_ifrad.h  0.15    31 Mar 96
+ *
+ * Author:     Mike McLagan <mike.mclagan@linux.org>
+ *
+ * Changes:
+ *             0.15    Mike McLagan    changed structure defs (packed)
+ *                                     re-arranged flags
+ *                                     added DLCI_RET vars
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _FRAD_H_
+#define _FRAD_H_
+
+#include <linux/if.h>
+
+/* Structures and constants associated with the DLCI device driver */
+
+struct dlci_add
+{
+   char  devname[IFNAMSIZ];
+   short dlci;
+};
+
+#define DLCI_GET_CONF  (SIOCDEVPRIVATE + 2)
+#define DLCI_SET_CONF  (SIOCDEVPRIVATE + 3)
+
+/* 
+ * These are related to the Sangoma SDLA and should remain in order. 
+ * Code within the SDLA module is based on the specifics of this 
+ * structure.  Change at your own peril.
+ */
+struct dlci_conf {
+   short flags;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd; 
+
+/* these are part of the status read */
+   short Tc_fwd;
+   short Tc_bwd;
+   short Tf_max;
+   short Tb_max;
+
+/* add any new fields here above is a mirror of sdla_dlci_conf */
+};
+
+#define DLCI_GET_SLAVE (SIOCDEVPRIVATE + 4)
+
+/* configuration flags for DLCI */
+#define DLCI_IGNORE_CIR_OUT    0x0001
+#define DLCI_ACCOUNT_CIR_IN    0x0002
+#define DLCI_BUFFER_IF         0x0008
+
+#define DLCI_VALID_FLAGS       0x000B
+
+/* defines for the actual Frame Relay hardware */
+#define FRAD_GET_CONF  (SIOCDEVPRIVATE)
+#define FRAD_SET_CONF  (SIOCDEVPRIVATE + 1)
+
+#define FRAD_LAST_IOCTL        FRAD_SET_CONF
+
+/*
+ * Based on the setup for the Sangoma SDLA.  If changes are 
+ * necessary to this structure, a routine will need to be 
+ * added to that module to copy fields.
+ */
+struct frad_conf 
+{
+   short station;
+   short flags;
+   short kbaud;
+   short clocking;
+   short mtu;
+   short T391;
+   short T392;
+   short N391;
+   short N392;
+   short N393;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd;
+
+/* Add new fields here, above is a mirror of the sdla_conf */
+
+};
+
+#define FRAD_STATION_CPE       0x0000
+#define FRAD_STATION_NODE      0x0001
+
+#define FRAD_TX_IGNORE_CIR     0x0001
+#define FRAD_RX_ACCOUNT_CIR    0x0002
+#define FRAD_DROP_ABORTED      0x0004
+#define FRAD_BUFFERIF          0x0008
+#define FRAD_STATS             0x0010
+#define FRAD_MCI               0x0100
+#define FRAD_AUTODLCI          0x8000
+#define FRAD_VALID_FLAGS       0x811F
+
+#define FRAD_CLOCK_INT         0x0001
+#define FRAD_CLOCK_EXT         0x0000
+
+
+#endif /* _FRAD_H_ */
diff --git a/lib/libdss-include/linux/if_hippi.h b/lib/libdss-include/linux/if_hippi.h
new file mode 100644 (file)
index 0000000..cdc049f
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the HIPPI interface.
+ *
+ * Version:    @(#)if_hippi.h  1.0.0   05/26/97
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Donald Becker, <becker@super.org>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ *             Jes Sorensen, <Jes.Sorensen@cern.ch>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_HIPPI_H
+#define _LINUX_IF_HIPPI_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ *     HIPPI magic constants.
+ */
+
+#define HIPPI_ALEN     6               /* Bytes in one HIPPI hw-addr      */
+#define HIPPI_HLEN     sizeof(struct hippi_hdr)
+#define HIPPI_ZLEN     0               /* Min. bytes in frame without FCS */
+#define HIPPI_DATA_LEN 65280           /* Max. bytes in payload           */
+#define HIPPI_FRAME_LEN        (HIPPI_DATA_LEN + HIPPI_HLEN)
+                                       /* Max. bytes in frame without FCS */
+
+/*
+ * Define LLC and SNAP constants.
+ */
+#define HIPPI_EXTENDED_SAP     0xAA
+#define HIPPI_UI_CMD           0x03
+
+
+/*
+ *     Do we need to list some sort of ID's here?
+ */
+
+/*
+ *     HIPPI statistics collection data. 
+ */
+struct hipnet_statistics {
+       int     rx_packets;             /* total packets received       */
+       int     tx_packets;             /* total packets transmitted    */
+       int     rx_errors;              /* bad packets received         */
+       int     tx_errors;              /* packet transmit problems     */
+       int     rx_dropped;             /* no space in linux buffers    */
+       int     tx_dropped;             /* no space available in linux  */
+
+       /* detailed rx_errors: */
+       int     rx_length_errors;
+       int     rx_over_errors;         /* receiver ring buff overflow  */
+       int     rx_crc_errors;          /* recved pkt with crc error    */
+       int     rx_frame_errors;        /* recv'd frame alignment error */
+       int     rx_fifo_errors;         /* recv'r fifo overrun          */
+       int     rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       int     tx_aborted_errors;
+       int     tx_carrier_errors;
+       int     tx_fifo_errors;
+       int     tx_heartbeat_errors;
+       int     tx_window_errors;
+};
+
+
+struct hippi_fp_hdr {
+#if 0
+       __u8            ulp;                            /* must contain 4 */
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            d1_data_present:1;              /* must be 1 */
+       __u8            start_d2_burst_boundary:1;      /* must be zero */
+       __u8            reserved:6;                     /* must be zero */
+#if 0
+       __u16           reserved1:5;
+       __u16           d1_area_size:8;                 /* must be 3 */
+       __u16           d2_offset:3;                    /* must be zero */
+#endif
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            reserved:6;                     /* must be zero */
+       __u8            start_d2_burst_boundary:1;      /* must be zero */
+       __u8            d1_data_present:1;              /* must be 1 */
+#if 0
+       __u16           d2_offset:3;                    /* must be zero */
+       __u16           d1_area_size:8;                 /* must be 3 */
+       __u16           reserved1:5;                    /* must be zero */
+#endif
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+#else
+       __be32          fixed;
+#endif
+       __be32          d2_size;
+} __attribute__((packed));
+
+struct hippi_le_hdr {
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            fc:3;
+       __u8            double_wide:1;
+       __u8            message_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            message_type:4;
+       __u8            double_wide:1;
+       __u8            fc:3;
+#endif
+       __u8            dest_switch_addr[3];
+#if defined (__BIG_ENDIAN_BITFIELD)
+       __u8            dest_addr_type:4,
+                       src_addr_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8            src_addr_type:4,
+                       dest_addr_type:4;
+#endif
+       __u8            src_switch_addr[3];
+       __u16           reserved;
+       __u8            daddr[HIPPI_ALEN];
+       __u16           locally_administered;
+       __u8            saddr[HIPPI_ALEN];
+} __attribute__((packed));
+
+#define HIPPI_OUI_LEN  3
+/*
+ * Looks like the dsap and ssap fields have been swapped by mistake in
+ * RFC 2067 "IP over HIPPI".
+ */
+struct hippi_snap_hdr {
+       __u8    dsap;                   /* always 0xAA */
+       __u8    ssap;                   /* always 0xAA */
+       __u8    ctrl;                   /* always 0x03 */
+       __u8    oui[HIPPI_OUI_LEN];     /* organizational universal id (zero)*/
+       __be16  ethertype;              /* packet type ID field */
+} __attribute__((packed));
+
+struct hippi_hdr {
+       struct hippi_fp_hdr     fp;
+       struct hippi_le_hdr     le;
+       struct hippi_snap_hdr   snap;
+} __attribute__((packed));
+
+#endif /* _LINUX_IF_HIPPI_H */
diff --git a/lib/libdss-include/linux/if_infiniband.h b/lib/libdss-include/linux/if_infiniband.h
new file mode 100644 (file)
index 0000000..7d95847
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available at
+ * <http://www.fsf.org/copyleft/gpl.html>, or the OpenIB.org BSD
+ * license, available in the LICENSE.TXT file accompanying this
+ * software.  These details are also available at
+ * <http://www.openfabrics.org/software_license.htm>.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ *
+ * $Id$
+ */
+
+#ifndef _LINUX_IF_INFINIBAND_H
+#define _LINUX_IF_INFINIBAND_H
+
+#define INFINIBAND_ALEN                20      /* Octets in IPoIB HW addr      */
+
+#endif /* _LINUX_IF_INFINIBAND_H */
diff --git a/lib/libdss-include/linux/if_link.h b/lib/libdss-include/linux/if_link.h
new file mode 100644 (file)
index 0000000..f6284ee
--- /dev/null
@@ -0,0 +1,728 @@
+#ifndef _LINUX_IF_LINK_H
+#define _LINUX_IF_LINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+/* This struct should be in sync with struct rtnl_link_stats64 */
+struct rtnl_link_stats {
+       __u32   rx_packets;             /* total packets received       */
+       __u32   tx_packets;             /* total packets transmitted    */
+       __u32   rx_bytes;               /* total bytes received         */
+       __u32   tx_bytes;               /* total bytes transmitted      */
+       __u32   rx_errors;              /* bad packets received         */
+       __u32   tx_errors;              /* packet transmit problems     */
+       __u32   rx_dropped;             /* no space in linux buffers    */
+       __u32   tx_dropped;             /* no space available in linux  */
+       __u32   multicast;              /* multicast packets received   */
+       __u32   collisions;
+
+       /* detailed rx_errors: */
+       __u32   rx_length_errors;
+       __u32   rx_over_errors;         /* receiver ring buff overflow  */
+       __u32   rx_crc_errors;          /* recved pkt with crc error    */
+       __u32   rx_frame_errors;        /* recv'd frame alignment error */
+       __u32   rx_fifo_errors;         /* recv'r fifo overrun          */
+       __u32   rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       __u32   tx_aborted_errors;
+       __u32   tx_carrier_errors;
+       __u32   tx_fifo_errors;
+       __u32   tx_heartbeat_errors;
+       __u32   tx_window_errors;
+
+       /* for cslip etc */
+       __u32   rx_compressed;
+       __u32   tx_compressed;
+};
+
+/* The main device statistics structure */
+struct rtnl_link_stats64 {
+       __u64   rx_packets;             /* total packets received       */
+       __u64   tx_packets;             /* total packets transmitted    */
+       __u64   rx_bytes;               /* total bytes received         */
+       __u64   tx_bytes;               /* total bytes transmitted      */
+       __u64   rx_errors;              /* bad packets received         */
+       __u64   tx_errors;              /* packet transmit problems     */
+       __u64   rx_dropped;             /* no space in linux buffers    */
+       __u64   tx_dropped;             /* no space available in linux  */
+       __u64   multicast;              /* multicast packets received   */
+       __u64   collisions;
+
+       /* detailed rx_errors: */
+       __u64   rx_length_errors;
+       __u64   rx_over_errors;         /* receiver ring buff overflow  */
+       __u64   rx_crc_errors;          /* recved pkt with crc error    */
+       __u64   rx_frame_errors;        /* recv'd frame alignment error */
+       __u64   rx_fifo_errors;         /* recv'r fifo overrun          */
+       __u64   rx_missed_errors;       /* receiver missed packet       */
+
+       /* detailed tx_errors */
+       __u64   tx_aborted_errors;
+       __u64   tx_carrier_errors;
+       __u64   tx_fifo_errors;
+       __u64   tx_heartbeat_errors;
+       __u64   tx_window_errors;
+
+       /* for cslip etc */
+       __u64   rx_compressed;
+       __u64   tx_compressed;
+};
+
+/* The struct should be in sync with struct ifmap */
+struct rtnl_link_ifmap {
+       __u64   mem_start;
+       __u64   mem_end;
+       __u64   base_addr;
+       __u16   irq;
+       __u8    dma;
+       __u8    port;
+};
+
+/*
+ * IFLA_AF_SPEC
+ *   Contains nested attributes for address family specific attributes.
+ *   Each address family may create a attribute with the address family
+ *   number as type and create its own attribute structure in it.
+ *
+ *   Example:
+ *   [IFLA_AF_SPEC] = {
+ *       [AF_INET] = {
+ *           [IFLA_INET_CONF] = ...,
+ *       },
+ *       [AF_INET6] = {
+ *           [IFLA_INET6_FLAGS] = ...,
+ *           [IFLA_INET6_CONF] = ...,
+ *       }
+ *   }
+ */
+
+enum {
+       IFLA_UNSPEC,
+       IFLA_ADDRESS,
+       IFLA_BROADCAST,
+       IFLA_IFNAME,
+       IFLA_MTU,
+       IFLA_LINK,
+       IFLA_QDISC,
+       IFLA_STATS,
+       IFLA_COST,
+#define IFLA_COST IFLA_COST
+       IFLA_PRIORITY,
+#define IFLA_PRIORITY IFLA_PRIORITY
+       IFLA_MASTER,
+#define IFLA_MASTER IFLA_MASTER
+       IFLA_WIRELESS,          /* Wireless Extension event - see wireless.h */
+#define IFLA_WIRELESS IFLA_WIRELESS
+       IFLA_PROTINFO,          /* Protocol specific information for a link */
+#define IFLA_PROTINFO IFLA_PROTINFO
+       IFLA_TXQLEN,
+#define IFLA_TXQLEN IFLA_TXQLEN
+       IFLA_MAP,
+#define IFLA_MAP IFLA_MAP
+       IFLA_WEIGHT,
+#define IFLA_WEIGHT IFLA_WEIGHT
+       IFLA_OPERSTATE,
+       IFLA_LINKMODE,
+       IFLA_LINKINFO,
+#define IFLA_LINKINFO IFLA_LINKINFO
+       IFLA_NET_NS_PID,
+       IFLA_IFALIAS,
+       IFLA_NUM_VF,            /* Number of VFs if device is SR-IOV PF */
+       IFLA_VFINFO_LIST,
+       IFLA_STATS64,
+       IFLA_VF_PORTS,
+       IFLA_PORT_SELF,
+       IFLA_AF_SPEC,
+       IFLA_GROUP,             /* Group the device belongs to */
+       IFLA_NET_NS_FD,
+       IFLA_EXT_MASK,          /* Extended info mask, VFs, etc */
+       IFLA_PROMISCUITY,       /* Promiscuity count: > 0 means acts PROMISC */
+#define IFLA_PROMISCUITY IFLA_PROMISCUITY
+       IFLA_NUM_TX_QUEUES,
+       IFLA_NUM_RX_QUEUES,
+       IFLA_CARRIER,
+       IFLA_PHYS_PORT_ID,
+       IFLA_CARRIER_CHANGES,
+       IFLA_PHYS_SWITCH_ID,
+       IFLA_LINK_NETNSID,
+       IFLA_PHYS_PORT_NAME,
+       IFLA_PROTO_DOWN,
+       __IFLA_MAX
+};
+
+
+#define IFLA_MAX (__IFLA_MAX - 1)
+
+/* backwards compatibility for userspace */
+#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
+#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
+
+enum {
+       IFLA_INET_UNSPEC,
+       IFLA_INET_CONF,
+       __IFLA_INET_MAX,
+};
+
+#define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
+
+/* ifi_flags.
+
+   IFF_* flags.
+
+   The only change is:
+   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
+   more not changeable by user. They describe link media
+   characteristics and set by device driver.
+
+   Comments:
+   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
+   - If neither of these three flags are set;
+     the interface is NBMA.
+
+   - IFF_MULTICAST does not mean anything special:
+   multicasts can be used on all not-NBMA links.
+   IFF_MULTICAST means that this media uses special encapsulation
+   for multicast frames. Apparently, all IFF_POINTOPOINT and
+   IFF_BROADCAST devices are able to use multicasts too.
+ */
+
+/* IFLA_LINK.
+   For usual devices it is equal ifi_index.
+   If it is a "virtual interface" (f.e. tunnel), ifi_link
+   can point to real physical interface (f.e. for bandwidth calculations),
+   or maybe 0, what means, that real media is unknown (usual
+   for IPIP tunnels, when route to endpoint is allowed to change)
+ */
+
+/* Subtype attributes for IFLA_PROTINFO */
+enum {
+       IFLA_INET6_UNSPEC,
+       IFLA_INET6_FLAGS,       /* link flags                   */
+       IFLA_INET6_CONF,        /* sysctl parameters            */
+       IFLA_INET6_STATS,       /* statistics                   */
+       IFLA_INET6_MCAST,       /* MC things. What of them?     */
+       IFLA_INET6_CACHEINFO,   /* time values and max reasm size */
+       IFLA_INET6_ICMP6STATS,  /* statistics (icmpv6)          */
+       IFLA_INET6_TOKEN,       /* device token                 */
+       IFLA_INET6_ADDR_GEN_MODE, /* implicit address generator mode */
+       __IFLA_INET6_MAX
+};
+
+#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
+
+enum in6_addr_gen_mode {
+       IN6_ADDR_GEN_MODE_EUI64,
+       IN6_ADDR_GEN_MODE_NONE,
+       IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
+};
+
+/* Bridge section */
+
+enum {
+       IFLA_BR_UNSPEC,
+       IFLA_BR_FORWARD_DELAY,
+       IFLA_BR_HELLO_TIME,
+       IFLA_BR_MAX_AGE,
+       IFLA_BR_AGEING_TIME,
+       IFLA_BR_STP_STATE,
+       IFLA_BR_PRIORITY,
+       IFLA_BR_VLAN_FILTERING,
+       IFLA_BR_VLAN_PROTOCOL,
+       IFLA_BR_GROUP_FWD_MASK,
+       IFLA_BR_ROOT_ID,
+       IFLA_BR_BRIDGE_ID,
+       IFLA_BR_ROOT_PORT,
+       IFLA_BR_ROOT_PATH_COST,
+       IFLA_BR_TOPOLOGY_CHANGE,
+       IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
+       IFLA_BR_HELLO_TIMER,
+       IFLA_BR_TCN_TIMER,
+       IFLA_BR_TOPOLOGY_CHANGE_TIMER,
+       IFLA_BR_GC_TIMER,
+       IFLA_BR_GROUP_ADDR,
+       IFLA_BR_FDB_FLUSH,
+       IFLA_BR_MCAST_ROUTER,
+       IFLA_BR_MCAST_SNOOPING,
+       IFLA_BR_MCAST_QUERY_USE_IFADDR,
+       IFLA_BR_MCAST_QUERIER,
+       IFLA_BR_MCAST_HASH_ELASTICITY,
+       IFLA_BR_MCAST_HASH_MAX,
+       IFLA_BR_MCAST_LAST_MEMBER_CNT,
+       IFLA_BR_MCAST_STARTUP_QUERY_CNT,
+       IFLA_BR_MCAST_LAST_MEMBER_INTVL,
+       IFLA_BR_MCAST_MEMBERSHIP_INTVL,
+       IFLA_BR_MCAST_QUERIER_INTVL,
+       IFLA_BR_MCAST_QUERY_INTVL,
+       IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
+       IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
+       IFLA_BR_NF_CALL_IPTABLES,
+       IFLA_BR_NF_CALL_IP6TABLES,
+       IFLA_BR_NF_CALL_ARPTABLES,
+       IFLA_BR_VLAN_DEFAULT_PVID,
+       __IFLA_BR_MAX,
+};
+
+#define IFLA_BR_MAX    (__IFLA_BR_MAX - 1)
+
+struct ifla_bridge_id {
+       __u8    prio[2];
+       __u8    addr[6]; /* ETH_ALEN */
+};
+
+enum {
+       BRIDGE_MODE_UNSPEC,
+       BRIDGE_MODE_HAIRPIN,
+};
+
+enum {
+       IFLA_BRPORT_UNSPEC,
+       IFLA_BRPORT_STATE,      /* Spanning tree state     */
+       IFLA_BRPORT_PRIORITY,   /* "             priority  */
+       IFLA_BRPORT_COST,       /* "             cost      */
+       IFLA_BRPORT_MODE,       /* mode (hairpin)          */
+       IFLA_BRPORT_GUARD,      /* bpdu guard              */
+       IFLA_BRPORT_PROTECT,    /* root port protection    */
+       IFLA_BRPORT_FAST_LEAVE, /* multicast fast leave    */
+       IFLA_BRPORT_LEARNING,   /* mac learning */
+       IFLA_BRPORT_UNICAST_FLOOD, /* flood unicast traffic */
+       IFLA_BRPORT_PROXYARP,   /* proxy ARP */
+       IFLA_BRPORT_LEARNING_SYNC, /* mac learning sync from device */
+       IFLA_BRPORT_PROXYARP_WIFI, /* proxy ARP for Wi-Fi */
+       IFLA_BRPORT_ROOT_ID,    /* designated root */
+       IFLA_BRPORT_BRIDGE_ID,  /* designated bridge */
+       IFLA_BRPORT_DESIGNATED_PORT,
+       IFLA_BRPORT_DESIGNATED_COST,
+       IFLA_BRPORT_ID,
+       IFLA_BRPORT_NO,
+       IFLA_BRPORT_TOPOLOGY_CHANGE_ACK,
+       IFLA_BRPORT_CONFIG_PENDING,
+       IFLA_BRPORT_MESSAGE_AGE_TIMER,
+       IFLA_BRPORT_FORWARD_DELAY_TIMER,
+       IFLA_BRPORT_HOLD_TIMER,
+       IFLA_BRPORT_FLUSH,
+       IFLA_BRPORT_MULTICAST_ROUTER,
+       __IFLA_BRPORT_MAX
+};
+#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
+
+struct ifla_cacheinfo {
+       __u32   max_reasm_len;
+       __u32   tstamp;         /* ipv6InterfaceTable updated timestamp */
+       __u32   reachable_time;
+       __u32   retrans_time;
+};
+
+enum {
+       IFLA_INFO_UNSPEC,
+       IFLA_INFO_KIND,
+       IFLA_INFO_DATA,
+       IFLA_INFO_XSTATS,
+       IFLA_INFO_SLAVE_KIND,
+       IFLA_INFO_SLAVE_DATA,
+       __IFLA_INFO_MAX,
+};
+
+#define IFLA_INFO_MAX  (__IFLA_INFO_MAX - 1)
+
+/* VLAN section */
+
+enum {
+       IFLA_VLAN_UNSPEC,
+       IFLA_VLAN_ID,
+       IFLA_VLAN_FLAGS,
+       IFLA_VLAN_EGRESS_QOS,
+       IFLA_VLAN_INGRESS_QOS,
+       IFLA_VLAN_PROTOCOL,
+       __IFLA_VLAN_MAX,
+};
+
+#define IFLA_VLAN_MAX  (__IFLA_VLAN_MAX - 1)
+
+struct ifla_vlan_flags {
+       __u32   flags;
+       __u32   mask;
+};
+
+enum {
+       IFLA_VLAN_QOS_UNSPEC,
+       IFLA_VLAN_QOS_MAPPING,
+       __IFLA_VLAN_QOS_MAX
+};
+
+#define IFLA_VLAN_QOS_MAX      (__IFLA_VLAN_QOS_MAX - 1)
+
+struct ifla_vlan_qos_mapping {
+       __u32 from;
+       __u32 to;
+};
+
+/* MACVLAN section */
+enum {
+       IFLA_MACVLAN_UNSPEC,
+       IFLA_MACVLAN_MODE,
+       IFLA_MACVLAN_FLAGS,
+       IFLA_MACVLAN_MACADDR_MODE,
+       IFLA_MACVLAN_MACADDR,
+       IFLA_MACVLAN_MACADDR_DATA,
+       IFLA_MACVLAN_MACADDR_COUNT,
+       __IFLA_MACVLAN_MAX,
+};
+
+#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
+
+enum macvlan_mode {
+       MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
+       MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
+       MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
+       MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
+       MACVLAN_MODE_SOURCE  = 16,/* use source MAC address list to assign */
+};
+
+enum macvlan_macaddr_mode {
+       MACVLAN_MACADDR_ADD,
+       MACVLAN_MACADDR_DEL,
+       MACVLAN_MACADDR_FLUSH,
+       MACVLAN_MACADDR_SET,
+};
+
+#define MACVLAN_FLAG_NOPROMISC 1
+
+/* VRF section */
+enum {
+       IFLA_VRF_UNSPEC,
+       IFLA_VRF_TABLE,
+       __IFLA_VRF_MAX
+};
+
+#define IFLA_VRF_MAX (__IFLA_VRF_MAX - 1)
+
+/* IPVLAN section */
+enum {
+       IFLA_IPVLAN_UNSPEC,
+       IFLA_IPVLAN_MODE,
+       __IFLA_IPVLAN_MAX
+};
+
+#define IFLA_IPVLAN_MAX (__IFLA_IPVLAN_MAX - 1)
+
+enum ipvlan_mode {
+       IPVLAN_MODE_L2 = 0,
+       IPVLAN_MODE_L3,
+       IPVLAN_MODE_MAX
+};
+
+/* VXLAN section */
+enum {
+       IFLA_VXLAN_UNSPEC,
+       IFLA_VXLAN_ID,
+       IFLA_VXLAN_GROUP,       /* group or remote address */
+       IFLA_VXLAN_LINK,
+       IFLA_VXLAN_LOCAL,
+       IFLA_VXLAN_TTL,
+       IFLA_VXLAN_TOS,
+       IFLA_VXLAN_LEARNING,
+       IFLA_VXLAN_AGEING,
+       IFLA_VXLAN_LIMIT,
+       IFLA_VXLAN_PORT_RANGE,  /* source port */
+       IFLA_VXLAN_PROXY,
+       IFLA_VXLAN_RSC,
+       IFLA_VXLAN_L2MISS,
+       IFLA_VXLAN_L3MISS,
+       IFLA_VXLAN_PORT,        /* destination port */
+       IFLA_VXLAN_GROUP6,
+       IFLA_VXLAN_LOCAL6,
+       IFLA_VXLAN_UDP_CSUM,
+       IFLA_VXLAN_UDP_ZERO_CSUM6_TX,
+       IFLA_VXLAN_UDP_ZERO_CSUM6_RX,
+       IFLA_VXLAN_REMCSUM_TX,
+       IFLA_VXLAN_REMCSUM_RX,
+       IFLA_VXLAN_GBP,
+       IFLA_VXLAN_REMCSUM_NOPARTIAL,
+       IFLA_VXLAN_COLLECT_METADATA,
+       IFLA_VXLAN_FAN_MAP = 33,
+       __IFLA_VXLAN_MAX
+};
+#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
+
+struct ifla_vxlan_port_range {
+       __be16  low;
+       __be16  high;
+};
+
+/* GENEVE section */
+enum {
+       IFLA_GENEVE_UNSPEC,
+       IFLA_GENEVE_ID,
+       IFLA_GENEVE_REMOTE,
+       IFLA_GENEVE_TTL,
+       IFLA_GENEVE_TOS,
+       IFLA_GENEVE_PORT,       /* destination port */
+       IFLA_GENEVE_COLLECT_METADATA,
+       IFLA_GENEVE_REMOTE6,
+       IFLA_GENEVE_UDP_CSUM,
+       IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
+       IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
+       __IFLA_GENEVE_MAX
+};
+#define IFLA_GENEVE_MAX        (__IFLA_GENEVE_MAX - 1)
+
+/* Bonding section */
+
+enum {
+       IFLA_BOND_UNSPEC,
+       IFLA_BOND_MODE,
+       IFLA_BOND_ACTIVE_SLAVE,
+       IFLA_BOND_MIIMON,
+       IFLA_BOND_UPDELAY,
+       IFLA_BOND_DOWNDELAY,
+       IFLA_BOND_USE_CARRIER,
+       IFLA_BOND_ARP_INTERVAL,
+       IFLA_BOND_ARP_IP_TARGET,
+       IFLA_BOND_ARP_VALIDATE,
+       IFLA_BOND_ARP_ALL_TARGETS,
+       IFLA_BOND_PRIMARY,
+       IFLA_BOND_PRIMARY_RESELECT,
+       IFLA_BOND_FAIL_OVER_MAC,
+       IFLA_BOND_XMIT_HASH_POLICY,
+       IFLA_BOND_RESEND_IGMP,
+       IFLA_BOND_NUM_PEER_NOTIF,
+       IFLA_BOND_ALL_SLAVES_ACTIVE,
+       IFLA_BOND_MIN_LINKS,
+       IFLA_BOND_LP_INTERVAL,
+       IFLA_BOND_PACKETS_PER_SLAVE,
+       IFLA_BOND_AD_LACP_RATE,
+       IFLA_BOND_AD_SELECT,
+       IFLA_BOND_AD_INFO,
+       IFLA_BOND_AD_ACTOR_SYS_PRIO,
+       IFLA_BOND_AD_USER_PORT_KEY,
+       IFLA_BOND_AD_ACTOR_SYSTEM,
+       IFLA_BOND_TLB_DYNAMIC_LB,
+       __IFLA_BOND_MAX,
+};
+
+#define IFLA_BOND_MAX  (__IFLA_BOND_MAX - 1)
+
+enum {
+       IFLA_BOND_AD_INFO_UNSPEC,
+       IFLA_BOND_AD_INFO_AGGREGATOR,
+       IFLA_BOND_AD_INFO_NUM_PORTS,
+       IFLA_BOND_AD_INFO_ACTOR_KEY,
+       IFLA_BOND_AD_INFO_PARTNER_KEY,
+       IFLA_BOND_AD_INFO_PARTNER_MAC,
+       __IFLA_BOND_AD_INFO_MAX,
+};
+
+#define IFLA_BOND_AD_INFO_MAX  (__IFLA_BOND_AD_INFO_MAX - 1)
+
+enum {
+       IFLA_BOND_SLAVE_UNSPEC,
+       IFLA_BOND_SLAVE_STATE,
+       IFLA_BOND_SLAVE_MII_STATUS,
+       IFLA_BOND_SLAVE_LINK_FAILURE_COUNT,
+       IFLA_BOND_SLAVE_PERM_HWADDR,
+       IFLA_BOND_SLAVE_QUEUE_ID,
+       IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
+       IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE,
+       IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE,
+       __IFLA_BOND_SLAVE_MAX,
+};
+
+#define IFLA_BOND_SLAVE_MAX    (__IFLA_BOND_SLAVE_MAX - 1)
+
+/* SR-IOV virtual function management section */
+
+enum {
+       IFLA_VF_INFO_UNSPEC,
+       IFLA_VF_INFO,
+       __IFLA_VF_INFO_MAX,
+};
+
+#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
+
+enum {
+       IFLA_VF_UNSPEC,
+       IFLA_VF_MAC,            /* Hardware queue specific attributes */
+       IFLA_VF_VLAN,
+       IFLA_VF_TX_RATE,        /* Max TX Bandwidth Allocation */
+       IFLA_VF_SPOOFCHK,       /* Spoof Checking on/off switch */
+       IFLA_VF_LINK_STATE,     /* link state enable/disable/auto switch */
+       IFLA_VF_RATE,           /* Min and Max TX Bandwidth Allocation */
+       IFLA_VF_RSS_QUERY_EN,   /* RSS Redirection Table and Hash Key query
+                                * on/off switch
+                                */
+       IFLA_VF_STATS,          /* network device statistics */
+       IFLA_VF_TRUST,          /* Trust VF */
+       __IFLA_VF_MAX,
+};
+
+#define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
+
+struct ifla_vf_mac {
+       __u32 vf;
+       __u8 mac[32]; /* MAX_ADDR_LEN */
+};
+
+struct ifla_vf_vlan {
+       __u32 vf;
+       __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
+       __u32 qos;
+};
+
+struct ifla_vf_tx_rate {
+       __u32 vf;
+       __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
+};
+
+struct ifla_vf_rate {
+       __u32 vf;
+       __u32 min_tx_rate; /* Min Bandwidth in Mbps */
+       __u32 max_tx_rate; /* Max Bandwidth in Mbps */
+};
+
+struct ifla_vf_spoofchk {
+       __u32 vf;
+       __u32 setting;
+};
+
+enum {
+       IFLA_VF_LINK_STATE_AUTO,        /* link state of the uplink */
+       IFLA_VF_LINK_STATE_ENABLE,      /* link always up */
+       IFLA_VF_LINK_STATE_DISABLE,     /* link always down */
+       __IFLA_VF_LINK_STATE_MAX,
+};
+
+struct ifla_vf_link_state {
+       __u32 vf;
+       __u32 link_state;
+};
+
+struct ifla_vf_rss_query_en {
+       __u32 vf;
+       __u32 setting;
+};
+
+enum {
+       IFLA_VF_STATS_RX_PACKETS,
+       IFLA_VF_STATS_TX_PACKETS,
+       IFLA_VF_STATS_RX_BYTES,
+       IFLA_VF_STATS_TX_BYTES,
+       IFLA_VF_STATS_BROADCAST,
+       IFLA_VF_STATS_MULTICAST,
+       __IFLA_VF_STATS_MAX,
+};
+
+#define IFLA_VF_STATS_MAX (__IFLA_VF_STATS_MAX - 1)
+
+struct ifla_vf_trust {
+       __u32 vf;
+       __u32 setting;
+};
+
+/* VF ports management section
+ *
+ *     Nested layout of set/get msg is:
+ *
+ *             [IFLA_NUM_VF]
+ *             [IFLA_VF_PORTS]
+ *                     [IFLA_VF_PORT]
+ *                             [IFLA_PORT_*], ...
+ *                     [IFLA_VF_PORT]
+ *                             [IFLA_PORT_*], ...
+ *                     ...
+ *             [IFLA_PORT_SELF]
+ *                     [IFLA_PORT_*], ...
+ */
+
+enum {
+       IFLA_VF_PORT_UNSPEC,
+       IFLA_VF_PORT,                   /* nest */
+       __IFLA_VF_PORT_MAX,
+};
+
+#define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
+
+enum {
+       IFLA_PORT_UNSPEC,
+       IFLA_PORT_VF,                   /* __u32 */
+       IFLA_PORT_PROFILE,              /* string */
+       IFLA_PORT_VSI_TYPE,             /* 802.1Qbg (pre-)standard VDP */
+       IFLA_PORT_INSTANCE_UUID,        /* binary UUID */
+       IFLA_PORT_HOST_UUID,            /* binary UUID */
+       IFLA_PORT_REQUEST,              /* __u8 */
+       IFLA_PORT_RESPONSE,             /* __u16, output only */
+       __IFLA_PORT_MAX,
+};
+
+#define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
+
+#define PORT_PROFILE_MAX       40
+#define PORT_UUID_MAX          16
+#define PORT_SELF_VF           -1
+
+enum {
+       PORT_REQUEST_PREASSOCIATE = 0,
+       PORT_REQUEST_PREASSOCIATE_RR,
+       PORT_REQUEST_ASSOCIATE,
+       PORT_REQUEST_DISASSOCIATE,
+};
+
+enum {
+       PORT_VDP_RESPONSE_SUCCESS = 0,
+       PORT_VDP_RESPONSE_INVALID_FORMAT,
+       PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
+       PORT_VDP_RESPONSE_UNUSED_VTID,
+       PORT_VDP_RESPONSE_VTID_VIOLATION,
+       PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
+       PORT_VDP_RESPONSE_OUT_OF_SYNC,
+       /* 0x08-0xFF reserved for future VDP use */
+       PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
+       PORT_PROFILE_RESPONSE_INPROGRESS,
+       PORT_PROFILE_RESPONSE_INVALID,
+       PORT_PROFILE_RESPONSE_BADSTATE,
+       PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
+       PORT_PROFILE_RESPONSE_ERROR,
+};
+
+struct ifla_port_vsi {
+       __u8 vsi_mgr_id;
+       __u8 vsi_type_id[3];
+       __u8 vsi_type_version;
+       __u8 pad[3];
+};
+
+
+/* IPoIB section */
+
+enum {
+       IFLA_IPOIB_UNSPEC,
+       IFLA_IPOIB_PKEY,
+       IFLA_IPOIB_MODE,
+       IFLA_IPOIB_UMCAST,
+       __IFLA_IPOIB_MAX
+};
+
+enum {
+       IPOIB_MODE_DATAGRAM  = 0, /* using unreliable datagram QPs */
+       IPOIB_MODE_CONNECTED = 1, /* using connected QPs */
+};
+
+#define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1)
+
+
+/* HSR section */
+
+enum {
+       IFLA_HSR_UNSPEC,
+       IFLA_HSR_SLAVE1,
+       IFLA_HSR_SLAVE2,
+       IFLA_HSR_MULTICAST_SPEC,        /* Last byte of supervision addr */
+       IFLA_HSR_SUPERVISION_ADDR,      /* Supervision frame multicast addr */
+       IFLA_HSR_SEQ_NR,
+       __IFLA_HSR_MAX,
+};
+
+#define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1)
+
+#endif /* _LINUX_IF_LINK_H */
diff --git a/lib/libdss-include/linux/if_ltalk.h b/lib/libdss-include/linux/if_ltalk.h
new file mode 100644 (file)
index 0000000..1f83ba0
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef __LINUX_LTALK_H
+#define __LINUX_LTALK_H
+
+#define LTALK_HLEN             1
+#define LTALK_MTU              600
+#define LTALK_ALEN             1
+
+
+#endif /* __LINUX_LTALK_H */
diff --git a/lib/libdss-include/linux/if_packet.h b/lib/libdss-include/linux/if_packet.h
new file mode 100644 (file)
index 0000000..9e7edfd
--- /dev/null
@@ -0,0 +1,301 @@
+#ifndef __LINUX_IF_PACKET_H
+#define __LINUX_IF_PACKET_H
+
+#include <linux/types.h>
+
+struct sockaddr_pkt {
+       unsigned short spkt_family;
+       unsigned char spkt_device[14];
+       __be16 spkt_protocol;
+};
+
+struct sockaddr_ll {
+       unsigned short  sll_family;
+       __be16          sll_protocol;
+       int             sll_ifindex;
+       unsigned short  sll_hatype;
+       unsigned char   sll_pkttype;
+       unsigned char   sll_halen;
+       unsigned char   sll_addr[8];
+};
+
+/* Packet types */
+
+#define PACKET_HOST            0               /* To us                */
+#define PACKET_BROADCAST       1               /* To all               */
+#define PACKET_MULTICAST       2               /* To group             */
+#define PACKET_OTHERHOST       3               /* To someone else      */
+#define PACKET_OUTGOING                4               /* Outgoing of any type */
+#define PACKET_LOOPBACK                5               /* MC/BRD frame looped back */
+#define PACKET_USER            6               /* To user space        */
+#define PACKET_KERNEL          7               /* To kernel space      */
+/* Unused, PACKET_FASTROUTE and PACKET_LOOPBACK are invisible to user space */
+#define PACKET_FASTROUTE       6               /* Fastrouted frame     */
+
+/* Packet socket options */
+
+#define PACKET_ADD_MEMBERSHIP          1
+#define PACKET_DROP_MEMBERSHIP         2
+#define PACKET_RECV_OUTPUT             3
+/* Value 4 is still used by obsolete turbo-packet. */
+#define PACKET_RX_RING                 5
+#define PACKET_STATISTICS              6
+#define PACKET_COPY_THRESH             7
+#define PACKET_AUXDATA                 8
+#define PACKET_ORIGDEV                 9
+#define PACKET_VERSION                 10
+#define PACKET_HDRLEN                  11
+#define PACKET_RESERVE                 12
+#define PACKET_TX_RING                 13
+#define PACKET_LOSS                    14
+#define PACKET_VNET_HDR                        15
+#define PACKET_TX_TIMESTAMP            16
+#define PACKET_TIMESTAMP               17
+#define PACKET_FANOUT                  18
+#define PACKET_TX_HAS_OFF              19
+#define PACKET_QDISC_BYPASS            20
+#define PACKET_ROLLOVER_STATS          21
+#define PACKET_FANOUT_DATA             22
+
+#define PACKET_FANOUT_HASH             0
+#define PACKET_FANOUT_LB               1
+#define PACKET_FANOUT_CPU              2
+#define PACKET_FANOUT_ROLLOVER         3
+#define PACKET_FANOUT_RND              4
+#define PACKET_FANOUT_QM               5
+#define PACKET_FANOUT_CBPF             6
+#define PACKET_FANOUT_EBPF             7
+#define PACKET_FANOUT_FLAG_ROLLOVER    0x1000
+#define PACKET_FANOUT_FLAG_DEFRAG      0x8000
+
+struct tpacket_stats {
+       unsigned int    tp_packets;
+       unsigned int    tp_drops;
+};
+
+struct tpacket_stats_v3 {
+       unsigned int    tp_packets;
+       unsigned int    tp_drops;
+       unsigned int    tp_freeze_q_cnt;
+};
+
+struct tpacket_rollover_stats {
+       __aligned_u64   tp_all;
+       __aligned_u64   tp_huge;
+       __aligned_u64   tp_failed;
+};
+
+union tpacket_stats_u {
+       struct tpacket_stats stats1;
+       struct tpacket_stats_v3 stats3;
+};
+
+struct tpacket_auxdata {
+       __u32           tp_status;
+       __u32           tp_len;
+       __u32           tp_snaplen;
+       __u16           tp_mac;
+       __u16           tp_net;
+       __u16           tp_vlan_tci;
+       __u16           tp_vlan_tpid;
+};
+
+/* Rx ring - header status */
+#define TP_STATUS_KERNEL                     0
+#define TP_STATUS_USER                 (1 << 0)
+#define TP_STATUS_COPY                 (1 << 1)
+#define TP_STATUS_LOSING               (1 << 2)
+#define TP_STATUS_CSUMNOTREADY         (1 << 3)
+#define TP_STATUS_VLAN_VALID           (1 << 4) /* auxdata has valid tp_vlan_tci */
+#define TP_STATUS_BLK_TMO              (1 << 5)
+#define TP_STATUS_VLAN_TPID_VALID      (1 << 6) /* auxdata has valid tp_vlan_tpid */
+#define TP_STATUS_CSUM_VALID           (1 << 7)
+
+/* Tx ring - header status */
+#define TP_STATUS_AVAILABLE          0
+#define TP_STATUS_SEND_REQUEST (1 << 0)
+#define TP_STATUS_SENDING      (1 << 1)
+#define TP_STATUS_WRONG_FORMAT (1 << 2)
+
+/* Rx and Tx ring - header status */
+#define TP_STATUS_TS_SOFTWARE          (1 << 29)
+#define TP_STATUS_TS_SYS_HARDWARE      (1 << 30) /* deprecated, never set */
+#define TP_STATUS_TS_RAW_HARDWARE      (1 << 31)
+
+/* Rx ring - feature request bits */
+#define TP_FT_REQ_FILL_RXHASH  0x1
+
+struct tpacket_hdr {
+       unsigned long   tp_status;
+       unsigned int    tp_len;
+       unsigned int    tp_snaplen;
+       unsigned short  tp_mac;
+       unsigned short  tp_net;
+       unsigned int    tp_sec;
+       unsigned int    tp_usec;
+};
+
+#define TPACKET_ALIGNMENT      16
+#define TPACKET_ALIGN(x)       (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
+#define TPACKET_HDRLEN         (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
+
+struct tpacket2_hdr {
+       __u32           tp_status;
+       __u32           tp_len;
+       __u32           tp_snaplen;
+       __u16           tp_mac;
+       __u16           tp_net;
+       __u32           tp_sec;
+       __u32           tp_nsec;
+       __u16           tp_vlan_tci;
+       __u16           tp_vlan_tpid;
+       __u8            tp_padding[4];
+};
+
+struct tpacket_hdr_variant1 {
+       __u32   tp_rxhash;
+       __u32   tp_vlan_tci;
+       __u16   tp_vlan_tpid;
+       __u16   tp_padding;
+};
+
+struct tpacket3_hdr {
+       __u32           tp_next_offset;
+       __u32           tp_sec;
+       __u32           tp_nsec;
+       __u32           tp_snaplen;
+       __u32           tp_len;
+       __u32           tp_status;
+       __u16           tp_mac;
+       __u16           tp_net;
+       /* pkt_hdr variants */
+       union {
+               struct tpacket_hdr_variant1 hv1;
+       };
+       __u8            tp_padding[8];
+};
+
+struct tpacket_bd_ts {
+       unsigned int ts_sec;
+       union {
+               unsigned int ts_usec;
+               unsigned int ts_nsec;
+       };
+};
+
+struct tpacket_hdr_v1 {
+       __u32   block_status;
+       __u32   num_pkts;
+       __u32   offset_to_first_pkt;
+
+       /* Number of valid bytes (including padding)
+        * blk_len <= tp_block_size
+        */
+       __u32   blk_len;
+
+       /*
+        * Quite a few uses of sequence number:
+        * 1. Make sure cache flush etc worked.
+        *    Well, one can argue - why not use the increasing ts below?
+        *    But look at 2. below first.
+        * 2. When you pass around blocks to other user space decoders,
+        *    you can see which blk[s] is[are] outstanding etc.
+        * 3. Validate kernel code.
+        */
+       __aligned_u64   seq_num;
+
+       /*
+        * ts_last_pkt:
+        *
+        * Case 1.      Block has 'N'(N >=1) packets and TMO'd(timed out)
+        *              ts_last_pkt == 'time-stamp of last packet' and NOT the
+        *              time when the timer fired and the block was closed.
+        *              By providing the ts of the last packet we can absolutely
+        *              guarantee that time-stamp wise, the first packet in the
+        *              next block will never precede the last packet of the
+        *              previous block.
+        * Case 2.      Block has zero packets and TMO'd
+        *              ts_last_pkt = time when the timer fired and the block
+        *              was closed.
+        * Case 3.      Block has 'N' packets and NO TMO.
+        *              ts_last_pkt = time-stamp of the last pkt in the block.
+        *
+        * ts_first_pkt:
+        *              Is always the time-stamp when the block was opened.
+        *              Case a) ZERO packets
+        *                      No packets to deal with but atleast you know the
+        *                      time-interval of this block.
+        *              Case b) Non-zero packets
+        *                      Use the ts of the first packet in the block.
+        *
+        */
+       struct tpacket_bd_ts    ts_first_pkt, ts_last_pkt;
+};
+
+union tpacket_bd_header_u {
+       struct tpacket_hdr_v1 bh1;
+};
+
+struct tpacket_block_desc {
+       __u32 version;
+       __u32 offset_to_priv;
+       union tpacket_bd_header_u hdr;
+};
+
+#define TPACKET2_HDRLEN                (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
+#define TPACKET3_HDRLEN                (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll))
+
+enum tpacket_versions {
+       TPACKET_V1,
+       TPACKET_V2,
+       TPACKET_V3
+};
+
+/*
+   Frame structure:
+
+   - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
+   - struct tpacket_hdr
+   - pad to TPACKET_ALIGNMENT=16
+   - struct sockaddr_ll
+   - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
+   - Start+tp_mac: [ Optional MAC header ]
+   - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
+   - Pad to align to TPACKET_ALIGNMENT=16
+ */
+
+struct tpacket_req {
+       unsigned int    tp_block_size;  /* Minimal size of contiguous block */
+       unsigned int    tp_block_nr;    /* Number of blocks */
+       unsigned int    tp_frame_size;  /* Size of frame */
+       unsigned int    tp_frame_nr;    /* Total number of frames */
+};
+
+struct tpacket_req3 {
+       unsigned int    tp_block_size;  /* Minimal size of contiguous block */
+       unsigned int    tp_block_nr;    /* Number of blocks */
+       unsigned int    tp_frame_size;  /* Size of frame */
+       unsigned int    tp_frame_nr;    /* Total number of frames */
+       unsigned int    tp_retire_blk_tov; /* timeout in msecs */
+       unsigned int    tp_sizeof_priv; /* offset to private data area */
+       unsigned int    tp_feature_req_word;
+};
+
+union tpacket_req_u {
+       struct tpacket_req      req;
+       struct tpacket_req3     req3;
+};
+
+struct packet_mreq {
+       int             mr_ifindex;
+       unsigned short  mr_type;
+       unsigned short  mr_alen;
+       unsigned char   mr_address[8];
+};
+
+#define PACKET_MR_MULTICAST    0
+#define PACKET_MR_PROMISC      1
+#define PACKET_MR_ALLMULTI     2
+#define PACKET_MR_UNICAST      3
+
+#endif
diff --git a/lib/libdss-include/linux/if_phonet.h b/lib/libdss-include/linux/if_phonet.h
new file mode 100644 (file)
index 0000000..63371bc
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * File: if_phonet.h
+ *
+ * Phonet interface kernel definitions
+ *
+ * Copyright (C) 2008 Nokia Corporation. All rights reserved.
+ */
+#ifndef LINUX_IF_PHONET_H
+#define LINUX_IF_PHONET_H
+
+#define PHONET_MIN_MTU         6       /* pn_length = 0 */
+#define PHONET_MAX_MTU         65541   /* pn_length = 0xffff */
+#define PHONET_DEV_MTU         PHONET_MAX_MTU
+
+
+#endif /* LINUX_IF_PHONET_H */
diff --git a/lib/libdss-include/linux/if_plip.h b/lib/libdss-include/linux/if_plip.h
new file mode 100644 (file)
index 0000000..6298c7e
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ *     NET3    PLIP tuning facilities for the new Niibe PLIP.
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ *
+ */
+#ifndef _LINUX_IF_PLIP_H
+#define _LINUX_IF_PLIP_H
+
+#include <linux/sockios.h>
+
+#define        SIOCDEVPLIP     SIOCDEVPRIVATE
+
+struct plipconf {
+       unsigned short pcmd;
+       unsigned long  nibble;
+       unsigned long  trigger;
+};
+
+#define PLIP_GET_TIMEOUT       0x1
+#define PLIP_SET_TIMEOUT       0x2
+
+#endif
diff --git a/lib/libdss-include/linux/if_ppp.h b/lib/libdss-include/linux/if_ppp.h
new file mode 100644 (file)
index 0000000..9048fab
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ppp-ioctl.h>
diff --git a/lib/libdss-include/linux/if_pppol2tp.h b/lib/libdss-include/linux/if_pppol2tp.h
new file mode 100644 (file)
index 0000000..8e1221c
--- /dev/null
@@ -0,0 +1,104 @@
+/***************************************************************************
+ * Linux PPP over L2TP (PPPoL2TP) Socket Implementation (RFC 2661)
+ *
+ * This file supplies definitions required by the PPP over L2TP driver
+ * (l2tp_ppp.c).  All version information wrt this file is located in l2tp_ppp.c
+ *
+ * License:
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef __LINUX_IF_PPPOL2TP_H
+#define __LINUX_IF_PPPOL2TP_H
+
+#include <linux/types.h>
+
+
+/* Structure used to connect() the socket to a particular tunnel UDP
+ * socket over IPv4.
+ */
+struct pppol2tp_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP socket to use */
+
+       struct sockaddr_in addr;        /* IP address and port to send to */
+
+       __u16 s_tunnel, s_session;      /* For matching incoming packets */
+       __u16 d_tunnel, d_session;      /* For sending outgoing packets */
+};
+
+/* Structure used to connect() the socket to a particular tunnel UDP
+ * socket over IPv6.
+ */
+struct pppol2tpin6_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP socket to use */
+
+       __u16 s_tunnel, s_session;      /* For matching incoming packets */
+       __u16 d_tunnel, d_session;      /* For sending outgoing packets */
+
+       struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
+/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
+ * bits. So we need a different sockaddr structure.
+ */
+struct pppol2tpv3_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP or IP socket to use */
+
+       struct sockaddr_in addr;        /* IP address and port to send to */
+
+       __u32 s_tunnel, s_session;      /* For matching incoming packets */
+       __u32 d_tunnel, d_session;      /* For sending outgoing packets */
+};
+
+struct pppol2tpv3in6_addr {
+       __kernel_pid_t  pid;            /* pid that owns the fd.
+                                        * 0 => current */
+       int     fd;                     /* FD of UDP or IP socket to use */
+
+       __u32 s_tunnel, s_session;      /* For matching incoming packets */
+       __u32 d_tunnel, d_session;      /* For sending outgoing packets */
+
+       struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
+/* Socket options:
+ * DEBUG       - bitmask of debug message categories
+ * SENDSEQ     - 0 => don't send packets with sequence numbers
+ *               1 => send packets with sequence numbers
+ * RECVSEQ     - 0 => receive packet sequence numbers are optional
+ *               1 => drop receive packets without sequence numbers
+ * LNSMODE     - 0 => act as LAC.
+ *               1 => act as LNS.
+ * REORDERTO   - reorder timeout (in millisecs). If 0, don't try to reorder.
+ */
+enum {
+       PPPOL2TP_SO_DEBUG       = 1,
+       PPPOL2TP_SO_RECVSEQ     = 2,
+       PPPOL2TP_SO_SENDSEQ     = 3,
+       PPPOL2TP_SO_LNSMODE     = 4,
+       PPPOL2TP_SO_REORDERTO   = 5,
+};
+
+/* Debug message categories for the DEBUG socket option */
+enum {
+       PPPOL2TP_MSG_DEBUG      = (1 << 0),     /* verbose debug (if
+                                                * compiled in) */
+       PPPOL2TP_MSG_CONTROL    = (1 << 1),     /* userspace - kernel
+                                                * interface */
+       PPPOL2TP_MSG_SEQ        = (1 << 2),     /* sequence numbers */
+       PPPOL2TP_MSG_DATA       = (1 << 3),     /* data packets */
+};
+
+
+
+#endif /* __LINUX_IF_PPPOL2TP_H */
diff --git a/lib/libdss-include/linux/if_pppox.h b/lib/libdss-include/linux/if_pppox.h
new file mode 100644 (file)
index 0000000..acd0a2c
--- /dev/null
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Linux PPP over X - Generic PPP transport layer sockets
+ * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516) 
+ *
+ * This file supplies definitions required by the PPP over Ethernet driver
+ * (pppox.c).  All version information wrt this file is located in pppox.c
+ *
+ * License:
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef __LINUX_IF_PPPOX_H
+#define __LINUX_IF_PPPOX_H
+
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+#include <linux/socket.h>
+#include <linux/if_ether.h>
+#include <linux/if_pppol2tp.h>
+
+/* For user-space programs to pick up these definitions
+ * which they wouldn't get otherwise without defining __KERNEL__
+ */
+#ifndef AF_PPPOX
+#define AF_PPPOX       24
+#define PF_PPPOX       AF_PPPOX
+#endif /* !(AF_PPPOX) */
+
+/************************************************************************ 
+ * PPPoE addressing definition 
+ */ 
+typedef __be16 sid_t;
+struct pppoe_addr {
+       sid_t         sid;                    /* Session identifier */
+       unsigned char remote[ETH_ALEN];       /* Remote address */
+       char          dev[IFNAMSIZ];          /* Local device to use */
+}; 
+/************************************************************************ 
+ * PPTP addressing definition
+ */
+struct pptp_addr {
+       __u16           call_id;
+       struct in_addr  sin_addr;
+};
+
+/************************************************************************
+ * Protocols supported by AF_PPPOX
+ */
+#define PX_PROTO_OE    0 /* Currently just PPPoE */
+#define PX_PROTO_OL2TP 1 /* Now L2TP also */
+#define PX_PROTO_PPTP  2
+#define PX_MAX_PROTO   3
+
+struct sockaddr_pppox {
+       __kernel_sa_family_t sa_family;       /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;          /* protocol identifier */
+       union {
+               struct pppoe_addr  pppoe;
+               struct pptp_addr   pptp;
+       } sa_addr;
+} __attribute__((packed));
+
+/* The use of the above union isn't viable because the size of this
+ * struct must stay fixed over time -- applications use sizeof(struct
+ * sockaddr_pppox) to fill it. We use a protocol specific sockaddr
+ * type instead.
+ */
+struct sockaddr_pppol2tp {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tp_addr pppol2tp;
+} __attribute__((packed));
+
+struct sockaddr_pppol2tpin6 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpin6_addr pppol2tp;
+} __attribute__((packed));
+
+/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
+ * bits. So we need a different sockaddr structure.
+ */
+struct sockaddr_pppol2tpv3 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpv3_addr pppol2tp;
+} __attribute__((packed));
+
+struct sockaddr_pppol2tpv3in6 {
+       __kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
+       unsigned int    sa_protocol;    /* protocol identifier */
+       struct pppol2tpv3in6_addr pppol2tp;
+} __attribute__((packed));
+
+/*********************************************************************
+ *
+ * ioctl interface for defining forwarding of connections
+ *
+ ********************************************************************/
+
+#define PPPOEIOCSFWD   _IOW(0xB1 ,0, size_t)
+#define PPPOEIOCDFWD   _IO(0xB1 ,1)
+/*#define PPPOEIOCGFWD _IOWR(0xB1,2, size_t)*/
+
+/* Codes to identify message types */
+#define PADI_CODE      0x09
+#define PADO_CODE      0x07
+#define PADR_CODE      0x19
+#define PADS_CODE      0x65
+#define PADT_CODE      0xa7
+struct pppoe_tag {
+       __be16 tag_type;
+       __be16 tag_len;
+       char tag_data[0];
+} __attribute__ ((packed));
+
+/* Tag identifiers */
+#define PTT_EOL                __cpu_to_be16(0x0000)
+#define PTT_SRV_NAME   __cpu_to_be16(0x0101)
+#define PTT_AC_NAME    __cpu_to_be16(0x0102)
+#define PTT_HOST_UNIQ  __cpu_to_be16(0x0103)
+#define PTT_AC_COOKIE  __cpu_to_be16(0x0104)
+#define PTT_VENDOR     __cpu_to_be16(0x0105)
+#define PTT_RELAY_SID  __cpu_to_be16(0x0110)
+#define PTT_SRV_ERR     __cpu_to_be16(0x0201)
+#define PTT_SYS_ERR    __cpu_to_be16(0x0202)
+#define PTT_GEN_ERR    __cpu_to_be16(0x0203)
+
+struct pppoe_hdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 type : 4;
+       __u8 ver : 4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8 ver : 4;
+       __u8 type : 4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 code;
+       __be16 sid;
+       __be16 length;
+       struct pppoe_tag tag[0];
+} __attribute__((packed));
+
+/* Length of entire PPPoE + PPP header */
+#define PPPOE_SES_HLEN 8
+
+
+#endif /* __LINUX_IF_PPPOX_H */
diff --git a/lib/libdss-include/linux/if_slip.h b/lib/libdss-include/linux/if_slip.h
new file mode 100644 (file)
index 0000000..1eb4e3a
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *     Swansea University Computer Society     NET3
+ *     
+ *     This file declares the constants of special use with the SLIP/CSLIP/
+ *     KISS TNC driver.
+ */
+#ifndef __LINUX_SLIP_H
+#define __LINUX_SLIP_H
+
+#define                SL_MODE_SLIP            0
+#define                SL_MODE_CSLIP           1
+#define        SL_MODE_KISS            4
+
+#define                SL_OPT_SIXBIT           2
+#define                SL_OPT_ADAPTIVE         8
+
+/*
+ *     VSV = ioctl for keepalive & outfill in SLIP driver 
+ */
+#define SIOCSKEEPALIVE (SIOCDEVPRIVATE)                /* Set keepalive timeout in sec */
+#define SIOCGKEEPALIVE (SIOCDEVPRIVATE+1)              /* Get keepalive timeout */
+#define SIOCSOUTFILL   (SIOCDEVPRIVATE+2)              /* Set outfill timeout */
+#define        SIOCGOUTFILL    (SIOCDEVPRIVATE+3)              /* Get outfill timeout */
+#define SIOCSLEASE     (SIOCDEVPRIVATE+4)              /* Set "leased" line type */
+#define        SIOCGLEASE      (SIOCDEVPRIVATE+5)              /* Get line type */
+
+
+#endif
diff --git a/lib/libdss-include/linux/if_team.h b/lib/libdss-include/linux/if_team.h
new file mode 100644 (file)
index 0000000..cb92efa
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * include/linux/if_team.h - Network team device driver header
+ * Copyright (c) 2011 Jiri Pirko <jpirko@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef _LINUX_IF_TEAM_H_
+#define _LINUX_IF_TEAM_H_
+
+
+#define TEAM_STRING_MAX_LEN 32
+
+/**********************************
+ * NETLINK_GENERIC netlink family.
+ **********************************/
+
+enum {
+       TEAM_CMD_NOOP,
+       TEAM_CMD_OPTIONS_SET,
+       TEAM_CMD_OPTIONS_GET,
+       TEAM_CMD_PORT_LIST_GET,
+
+       __TEAM_CMD_MAX,
+       TEAM_CMD_MAX = (__TEAM_CMD_MAX - 1),
+};
+
+enum {
+       TEAM_ATTR_UNSPEC,
+       TEAM_ATTR_TEAM_IFINDEX,         /* u32 */
+       TEAM_ATTR_LIST_OPTION,          /* nest */
+       TEAM_ATTR_LIST_PORT,            /* nest */
+
+       __TEAM_ATTR_MAX,
+       TEAM_ATTR_MAX = __TEAM_ATTR_MAX - 1,
+};
+
+/* Nested layout of get/set msg:
+ *
+ *     [TEAM_ATTR_LIST_OPTION]
+ *             [TEAM_ATTR_ITEM_OPTION]
+ *                     [TEAM_ATTR_OPTION_*], ...
+ *             [TEAM_ATTR_ITEM_OPTION]
+ *                     [TEAM_ATTR_OPTION_*], ...
+ *             ...
+ *     [TEAM_ATTR_LIST_PORT]
+ *             [TEAM_ATTR_ITEM_PORT]
+ *                     [TEAM_ATTR_PORT_*], ...
+ *             [TEAM_ATTR_ITEM_PORT]
+ *                     [TEAM_ATTR_PORT_*], ...
+ *             ...
+ */
+
+enum {
+       TEAM_ATTR_ITEM_OPTION_UNSPEC,
+       TEAM_ATTR_ITEM_OPTION,          /* nest */
+
+       __TEAM_ATTR_ITEM_OPTION_MAX,
+       TEAM_ATTR_ITEM_OPTION_MAX = __TEAM_ATTR_ITEM_OPTION_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_OPTION_UNSPEC,
+       TEAM_ATTR_OPTION_NAME,          /* string */
+       TEAM_ATTR_OPTION_CHANGED,       /* flag */
+       TEAM_ATTR_OPTION_TYPE,          /* u8 */
+       TEAM_ATTR_OPTION_DATA,          /* dynamic */
+       TEAM_ATTR_OPTION_REMOVED,       /* flag */
+       TEAM_ATTR_OPTION_PORT_IFINDEX,  /* u32 */ /* for per-port options */
+       TEAM_ATTR_OPTION_ARRAY_INDEX,   /* u32 */ /* for array options */
+
+       __TEAM_ATTR_OPTION_MAX,
+       TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_ITEM_PORT_UNSPEC,
+       TEAM_ATTR_ITEM_PORT,            /* nest */
+
+       __TEAM_ATTR_ITEM_PORT_MAX,
+       TEAM_ATTR_ITEM_PORT_MAX = __TEAM_ATTR_ITEM_PORT_MAX - 1,
+};
+
+enum {
+       TEAM_ATTR_PORT_UNSPEC,
+       TEAM_ATTR_PORT_IFINDEX,         /* u32 */
+       TEAM_ATTR_PORT_CHANGED,         /* flag */
+       TEAM_ATTR_PORT_LINKUP,          /* flag */
+       TEAM_ATTR_PORT_SPEED,           /* u32 */
+       TEAM_ATTR_PORT_DUPLEX,          /* u8 */
+       TEAM_ATTR_PORT_REMOVED,         /* flag */
+
+       __TEAM_ATTR_PORT_MAX,
+       TEAM_ATTR_PORT_MAX = __TEAM_ATTR_PORT_MAX - 1,
+};
+
+/*
+ * NETLINK_GENERIC related info
+ */
+#define TEAM_GENL_NAME "team"
+#define TEAM_GENL_VERSION 0x1
+#define TEAM_GENL_CHANGE_EVENT_MC_GRP_NAME "change_event"
+
+#endif /* _LINUX_IF_TEAM_H_ */
diff --git a/lib/libdss-include/linux/if_tun.h b/lib/libdss-include/linux/if_tun.h
new file mode 100644 (file)
index 0000000..d5ecb42
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ *  Universal TUN/TAP device driver.
+ *  Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ */
+
+#ifndef __IF_TUN_H
+#define __IF_TUN_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+#include <linux/filter.h>
+
+/* Read queue size */
+#define TUN_READQ_SIZE 500
+/* TUN device type flags: deprecated. Use IFF_TUN/IFF_TAP instead. */
+#define TUN_TUN_DEV    IFF_TUN
+#define TUN_TAP_DEV    IFF_TAP
+#define TUN_TYPE_MASK   0x000f
+
+/* Ioctl defines */
+#define TUNSETNOCSUM  _IOW('T', 200, int) 
+#define TUNSETDEBUG   _IOW('T', 201, int) 
+#define TUNSETIFF     _IOW('T', 202, int) 
+#define TUNSETPERSIST _IOW('T', 203, int) 
+#define TUNSETOWNER   _IOW('T', 204, int)
+#define TUNSETLINK    _IOW('T', 205, int)
+#define TUNSETGROUP   _IOW('T', 206, int)
+#define TUNGETFEATURES _IOR('T', 207, unsigned int)
+#define TUNSETOFFLOAD  _IOW('T', 208, unsigned int)
+#define TUNSETTXFILTER _IOW('T', 209, unsigned int)
+#define TUNGETIFF      _IOR('T', 210, unsigned int)
+#define TUNGETSNDBUF   _IOR('T', 211, int)
+#define TUNSETSNDBUF   _IOW('T', 212, int)
+#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog)
+#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
+#define TUNGETVNETHDRSZ _IOR('T', 215, int)
+#define TUNSETVNETHDRSZ _IOW('T', 216, int)
+#define TUNSETQUEUE  _IOW('T', 217, int)
+#define TUNSETIFINDEX  _IOW('T', 218, unsigned int)
+#define TUNGETFILTER _IOR('T', 219, struct sock_fprog)
+#define TUNSETVNETLE _IOW('T', 220, int)
+#define TUNGETVNETLE _IOR('T', 221, int)
+/* The TUNSETVNETBE and TUNGETVNETBE ioctls are for cross-endian support on
+ * little-endian hosts. Not all kernel configurations support them, but all
+ * configurations that support SET also support GET.
+ */
+#define TUNSETVNETBE _IOW('T', 222, int)
+#define TUNGETVNETBE _IOR('T', 223, int)
+
+/* TUNSETIFF ifr flags */
+#define IFF_TUN                0x0001
+#define IFF_TAP                0x0002
+#define IFF_NO_PI      0x1000
+/* This flag has no real effect */
+#define IFF_ONE_QUEUE  0x2000
+#define IFF_VNET_HDR   0x4000
+#define IFF_TUN_EXCL   0x8000
+#define IFF_MULTI_QUEUE 0x0100
+#define IFF_ATTACH_QUEUE 0x0200
+#define IFF_DETACH_QUEUE 0x0400
+/* read-only flag */
+#define IFF_PERSIST    0x0800
+#define IFF_NOFILTER   0x1000
+
+/* Socket options */
+#define TUN_TX_TIMESTAMP 1
+
+/* Features for GSO (TUNSETOFFLOAD). */
+#define TUN_F_CSUM     0x01    /* You can hand me unchecksummed packets. */
+#define TUN_F_TSO4     0x02    /* I can handle TSO for IPv4 packets */
+#define TUN_F_TSO6     0x04    /* I can handle TSO for IPv6 packets */
+#define TUN_F_TSO_ECN  0x08    /* I can handle TSO with ECN bits. */
+#define TUN_F_UFO      0x10    /* I can handle UFO packets */
+
+/* Protocol info prepended to the packets (when IFF_NO_PI is not set) */
+#define TUN_PKT_STRIP  0x0001
+struct tun_pi {
+       __u16  flags;
+       __be16 proto;
+};
+
+/*
+ * Filter spec (used for SETXXFILTER ioctls)
+ * This stuff is applicable only to the TAP (Ethernet) devices.
+ * If the count is zero the filter is disabled and the driver accepts
+ * all packets (promisc mode).
+ * If the filter is enabled in order to accept broadcast packets
+ * broadcast addr must be explicitly included in the addr list.
+ */
+#define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */
+struct tun_filter {
+       __u16  flags; /* TUN_FLT_ flags see above */
+       __u16  count; /* Number of addresses */
+       __u8   addr[0][ETH_ALEN];
+};
+
+#endif /* __IF_TUN_H */
diff --git a/lib/libdss-include/linux/if_tunnel.h b/lib/libdss-include/linux/if_tunnel.h
new file mode 100644 (file)
index 0000000..081c33e
--- /dev/null
@@ -0,0 +1,155 @@
+#ifndef _IF_TUNNEL_H_
+#define _IF_TUNNEL_H_
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+
+#define SIOCGETTUNNEL   (SIOCDEVPRIVATE + 0)
+#define SIOCADDTUNNEL   (SIOCDEVPRIVATE + 1)
+#define SIOCDELTUNNEL   (SIOCDEVPRIVATE + 2)
+#define SIOCCHGTUNNEL   (SIOCDEVPRIVATE + 3)
+#define SIOCGETPRL      (SIOCDEVPRIVATE + 4)
+#define SIOCADDPRL      (SIOCDEVPRIVATE + 5)
+#define SIOCDELPRL      (SIOCDEVPRIVATE + 6)
+#define SIOCCHGPRL      (SIOCDEVPRIVATE + 7)
+#define SIOCGET6RD      (SIOCDEVPRIVATE + 8)
+#define SIOCADD6RD      (SIOCDEVPRIVATE + 9)
+#define SIOCDEL6RD      (SIOCDEVPRIVATE + 10)
+#define SIOCCHG6RD      (SIOCDEVPRIVATE + 11)
+
+#define GRE_CSUM       __cpu_to_be16(0x8000)
+#define GRE_ROUTING    __cpu_to_be16(0x4000)
+#define GRE_KEY                __cpu_to_be16(0x2000)
+#define GRE_SEQ                __cpu_to_be16(0x1000)
+#define GRE_STRICT     __cpu_to_be16(0x0800)
+#define GRE_REC                __cpu_to_be16(0x0700)
+#define GRE_FLAGS      __cpu_to_be16(0x00F8)
+#define GRE_VERSION    __cpu_to_be16(0x0007)
+
+struct ip_tunnel_parm {
+       char                    name[IFNAMSIZ];
+       int                     link;
+       __be16                  i_flags;
+       __be16                  o_flags;
+       __be32                  i_key;
+       __be32                  o_key;
+       struct iphdr            iph;
+};
+
+enum {
+       IFLA_IPTUN_UNSPEC,
+       IFLA_IPTUN_LINK,
+       IFLA_IPTUN_LOCAL,
+       IFLA_IPTUN_REMOTE,
+       IFLA_IPTUN_TTL,
+       IFLA_IPTUN_TOS,
+       IFLA_IPTUN_ENCAP_LIMIT,
+       IFLA_IPTUN_FLOWINFO,
+       IFLA_IPTUN_FLAGS,
+       IFLA_IPTUN_PROTO,
+       IFLA_IPTUN_PMTUDISC,
+       IFLA_IPTUN_6RD_PREFIX,
+       IFLA_IPTUN_6RD_RELAY_PREFIX,
+       IFLA_IPTUN_6RD_PREFIXLEN,
+       IFLA_IPTUN_6RD_RELAY_PREFIXLEN,
+       IFLA_IPTUN_ENCAP_TYPE,
+       IFLA_IPTUN_ENCAP_FLAGS,
+       IFLA_IPTUN_ENCAP_SPORT,
+       IFLA_IPTUN_ENCAP_DPORT,
+
+       __IFLA_IPTUN_VENDOR_BREAK, /* Ensure new entries do not hit the below. */
+       IFLA_IPTUN_FAN_MAP = 33,
+
+       __IFLA_IPTUN_MAX,
+};
+#define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1)
+
+enum tunnel_encap_types {
+       TUNNEL_ENCAP_NONE,
+       TUNNEL_ENCAP_FOU,
+       TUNNEL_ENCAP_GUE,
+};
+
+#define TUNNEL_ENCAP_FLAG_CSUM         (1<<0)
+#define TUNNEL_ENCAP_FLAG_CSUM6                (1<<1)
+#define TUNNEL_ENCAP_FLAG_REMCSUM      (1<<2)
+
+/* SIT-mode i_flags */
+#define        SIT_ISATAP      0x0001
+
+struct ip_tunnel_prl {
+       __be32                  addr;
+       __u16                   flags;
+       __u16                   __reserved;
+       __u32                   datalen;
+       __u32                   __reserved2;
+       /* data follows */
+};
+
+/* PRL flags */
+#define        PRL_DEFAULT             0x0001
+
+struct ip_tunnel_6rd {
+       struct in6_addr         prefix;
+       __be32                  relay_prefix;
+       __u16                   prefixlen;
+       __u16                   relay_prefixlen;
+};
+
+enum {
+       IFLA_GRE_UNSPEC,
+       IFLA_GRE_LINK,
+       IFLA_GRE_IFLAGS,
+       IFLA_GRE_OFLAGS,
+       IFLA_GRE_IKEY,
+       IFLA_GRE_OKEY,
+       IFLA_GRE_LOCAL,
+       IFLA_GRE_REMOTE,
+       IFLA_GRE_TTL,
+       IFLA_GRE_TOS,
+       IFLA_GRE_PMTUDISC,
+       IFLA_GRE_ENCAP_LIMIT,
+       IFLA_GRE_FLOWINFO,
+       IFLA_GRE_FLAGS,
+       IFLA_GRE_ENCAP_TYPE,
+       IFLA_GRE_ENCAP_FLAGS,
+       IFLA_GRE_ENCAP_SPORT,
+       IFLA_GRE_ENCAP_DPORT,
+       IFLA_GRE_COLLECT_METADATA,
+       __IFLA_GRE_MAX,
+};
+
+#define IFLA_GRE_MAX   (__IFLA_GRE_MAX - 1)
+
+/* VTI-mode i_flags */
+#define VTI_ISVTI ((__be16)0x0001)
+
+enum {
+       IFLA_VTI_UNSPEC,
+       IFLA_VTI_LINK,
+       IFLA_VTI_IKEY,
+       IFLA_VTI_OKEY,
+       IFLA_VTI_LOCAL,
+       IFLA_VTI_REMOTE,
+       __IFLA_VTI_MAX,
+};
+
+#define IFLA_VTI_MAX   (__IFLA_VTI_MAX - 1)
+
+enum {
+       IFLA_FAN_UNSPEC,
+       IFLA_FAN_MAPPING,
+       __IFLA_FAN_MAX,
+};
+
+#define IFLA_FAN_MAX (__IFLA_FAN_MAX - 1)
+
+struct ifla_fan_map {
+       __be32          underlay;
+       __be32          overlay;
+       __u16           underlay_prefix;
+       __u16           overlay_prefix;
+};
+
+#endif /* _IF_TUNNEL_H_ */
diff --git a/lib/libdss-include/linux/if_vlan.h b/lib/libdss-include/linux/if_vlan.h
new file mode 100644 (file)
index 0000000..24ae007
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * VLAN                An implementation of 802.1Q VLAN tagging.
+ *
+ * Authors:    Ben Greear <greearb@candelatech.com>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ */
+
+#ifndef _LINUX_IF_VLAN_H_
+#define _LINUX_IF_VLAN_H_
+
+
+/* VLAN IOCTLs are found in sockios.h */
+
+/* Passed in vlan_ioctl_args structure to determine behaviour. */
+enum vlan_ioctl_cmds {
+       ADD_VLAN_CMD,
+       DEL_VLAN_CMD,
+       SET_VLAN_INGRESS_PRIORITY_CMD,
+       SET_VLAN_EGRESS_PRIORITY_CMD,
+       GET_VLAN_INGRESS_PRIORITY_CMD,
+       GET_VLAN_EGRESS_PRIORITY_CMD,
+       SET_VLAN_NAME_TYPE_CMD,
+       SET_VLAN_FLAG_CMD,
+       GET_VLAN_REALDEV_NAME_CMD, /* If this works, you know it's a VLAN device, btw */
+       GET_VLAN_VID_CMD /* Get the VID of this VLAN (specified by name) */
+};
+
+enum vlan_flags {
+       VLAN_FLAG_REORDER_HDR   = 0x1,
+       VLAN_FLAG_GVRP          = 0x2,
+       VLAN_FLAG_LOOSE_BINDING = 0x4,
+       VLAN_FLAG_MVRP          = 0x8,
+};
+
+enum vlan_name_types {
+       VLAN_NAME_TYPE_PLUS_VID, /* Name will look like:  vlan0005 */
+       VLAN_NAME_TYPE_RAW_PLUS_VID, /* name will look like:  eth1.0005 */
+       VLAN_NAME_TYPE_PLUS_VID_NO_PAD, /* Name will look like:  vlan5 */
+       VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, /* Name will look like:  eth0.5 */
+       VLAN_NAME_TYPE_HIGHEST
+};
+
+struct vlan_ioctl_args {
+       int cmd; /* Should be one of the vlan_ioctl_cmds enum above. */
+       char device1[24];
+
+        union {
+               char device2[24];
+               int VID;
+               unsigned int skb_priority;
+               unsigned int name_type;
+               unsigned int bind_type;
+               unsigned int flag; /* Matches vlan_dev_priv flags */
+        } u;
+
+       short vlan_qos;   
+};
+
+#endif /* _LINUX_IF_VLAN_H_ */
diff --git a/lib/libdss-include/linux/if_x25.h b/lib/libdss-include/linux/if_x25.h
new file mode 100644 (file)
index 0000000..897765f
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ *  Linux X.25 packet to device interface
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ */
+
+#ifndef _IF_X25_H
+#define _IF_X25_H
+
+#include <linux/types.h>
+
+/* Documentation/networking/x25-iface.txt */
+#define X25_IFACE_DATA         0x00
+#define X25_IFACE_CONNECT      0x01
+#define X25_IFACE_DISCONNECT   0x02
+#define X25_IFACE_PARAMS       0x03
+
+#endif /* _IF_X25_H */
diff --git a/lib/libdss-include/linux/igmp.h b/lib/libdss-include/linux/igmp.h
new file mode 100644 (file)
index 0000000..2ead5c5
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ *     Linux NET3:     Internet Group Management Protocol  [IGMP]
+ *
+ *     Authors:
+ *             Alan Cox <alan@lxorguk.ukuu.org.uk>
+ *
+ *     Extended to talk the BSD extended IGMP protocol of mrouted 3.6
+ *
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IGMP_H
+#define _LINUX_IGMP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ *     IGMP protocol structures
+ */
+
+/*
+ *     Header in on cable format
+ */
+
+struct igmphdr {
+       __u8 type;
+       __u8 code;              /* For newer IGMP */
+       __sum16 csum;
+       __be32 group;
+};
+
+/* V3 group record types [grec_type] */
+#define IGMPV3_MODE_IS_INCLUDE         1
+#define IGMPV3_MODE_IS_EXCLUDE         2
+#define IGMPV3_CHANGE_TO_INCLUDE       3
+#define IGMPV3_CHANGE_TO_EXCLUDE       4
+#define IGMPV3_ALLOW_NEW_SOURCES       5
+#define IGMPV3_BLOCK_OLD_SOURCES       6
+
+struct igmpv3_grec {
+       __u8    grec_type;
+       __u8    grec_auxwords;
+       __be16  grec_nsrcs;
+       __be32  grec_mca;
+       __be32  grec_src[0];
+};
+
+struct igmpv3_report {
+       __u8 type;
+       __u8 resv1;
+       __be16 csum;
+       __be16 resv2;
+       __be16 ngrec;
+       struct igmpv3_grec grec[0];
+};
+
+struct igmpv3_query {
+       __u8 type;
+       __u8 code;
+       __be16 csum;
+       __be32 group;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8 qrv:3,
+            suppress:1,
+            resv:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8 resv:4,
+            suppress:1,
+            qrv:3;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8 qqic;
+       __be16 nsrcs;
+       __be32 srcs[0];
+};
+
+#define IGMP_HOST_MEMBERSHIP_QUERY     0x11    /* From RFC1112 */
+#define IGMP_HOST_MEMBERSHIP_REPORT    0x12    /* Ditto */
+#define IGMP_DVMRP                     0x13    /* DVMRP routing */
+#define IGMP_PIM                       0x14    /* PIM routing */
+#define IGMP_TRACE                     0x15
+#define IGMPV2_HOST_MEMBERSHIP_REPORT  0x16    /* V2 version of 0x12 */
+#define IGMP_HOST_LEAVE_MESSAGE        0x17
+#define IGMPV3_HOST_MEMBERSHIP_REPORT  0x22    /* V3 version of 0x12 */
+
+#define IGMP_MTRACE_RESP               0x1e
+#define IGMP_MTRACE                    0x1f
+
+
+/*
+ *     Use the BSD names for these for compatibility
+ */
+
+#define IGMP_DELAYING_MEMBER           0x01
+#define IGMP_IDLE_MEMBER               0x02
+#define IGMP_LAZY_MEMBER               0x03
+#define IGMP_SLEEPING_MEMBER           0x04
+#define IGMP_AWAKENING_MEMBER          0x05
+
+#define IGMP_MINLEN                    8
+
+#define IGMP_MAX_HOST_REPORT_DELAY     10      /* max delay for response to */
+                                               /* query (in seconds)   */
+
+#define IGMP_TIMER_SCALE               10      /* denotes that the igmphdr->timer field */
+                                               /* specifies time in 10th of seconds     */
+
+#define IGMP_AGE_THRESHOLD             400     /* If this host don't hear any IGMP V1  */
+                                               /* message in this period of time,      */
+                                               /* revert to IGMP v2 router.            */
+
+#define IGMP_ALL_HOSTS         htonl(0xE0000001L)
+#define IGMP_ALL_ROUTER        htonl(0xE0000002L)
+#define IGMPV3_ALL_MCR         htonl(0xE0000016L)
+#define IGMP_LOCAL_GROUP       htonl(0xE0000000L)
+#define IGMP_LOCAL_GROUP_MASK  htonl(0xFFFFFF00L)
+
+/*
+ * struct for keeping the multicast list in
+ */
+
+#endif /* _LINUX_IGMP_H */
diff --git a/lib/libdss-include/linux/iio/events.h b/lib/libdss-include/linux/iio/events.h
new file mode 100644 (file)
index 0000000..edfcaf0
--- /dev/null
@@ -0,0 +1,42 @@
+/* The industrial I/O - event passing to userspace
+ *
+ * Copyright (c) 2008-2011 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _IIO_EVENTS_H_
+#define _IIO_EVENTS_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * struct iio_event_data - The actual event being pushed to userspace
+ * @id:                event identifier
+ * @timestamp: best estimate of time of event occurrence (often from
+ *             the interrupt handler)
+ */
+struct iio_event_data {
+       __u64   id;
+       __s64   timestamp;
+};
+
+#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
+
+#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
+
+#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F)
+
+#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
+
+/* Event code number extraction depends on which type of event we have.
+ * Perhaps review this function in the future*/
+#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
+#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
+
+#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
+#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
+
+#endif /* _IIO_EVENTS_H_ */
diff --git a/lib/libdss-include/linux/iio/types.h b/lib/libdss-include/linux/iio/types.h
new file mode 100644 (file)
index 0000000..4cf6dd2
--- /dev/null
@@ -0,0 +1,98 @@
+/* industrial I/O data types needed both in and out of kernel
+ *
+ * Copyright (c) 2008 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+
+#ifndef _IIO_TYPES_H_
+#define _IIO_TYPES_H_
+
+enum iio_chan_type {
+       IIO_VOLTAGE,
+       IIO_CURRENT,
+       IIO_POWER,
+       IIO_ACCEL,
+       IIO_ANGL_VEL,
+       IIO_MAGN,
+       IIO_LIGHT,
+       IIO_INTENSITY,
+       IIO_PROXIMITY,
+       IIO_TEMP,
+       IIO_INCLI,
+       IIO_ROT,
+       IIO_ANGL,
+       IIO_TIMESTAMP,
+       IIO_CAPACITANCE,
+       IIO_ALTVOLTAGE,
+       IIO_CCT,
+       IIO_PRESSURE,
+       IIO_HUMIDITYRELATIVE,
+       IIO_ACTIVITY,
+       IIO_STEPS,
+       IIO_ENERGY,
+       IIO_DISTANCE,
+       IIO_VELOCITY,
+       IIO_CONCENTRATION,
+       IIO_RESISTANCE,
+};
+
+enum iio_modifier {
+       IIO_NO_MOD,
+       IIO_MOD_X,
+       IIO_MOD_Y,
+       IIO_MOD_Z,
+       IIO_MOD_X_AND_Y,
+       IIO_MOD_X_AND_Z,
+       IIO_MOD_Y_AND_Z,
+       IIO_MOD_X_AND_Y_AND_Z,
+       IIO_MOD_X_OR_Y,
+       IIO_MOD_X_OR_Z,
+       IIO_MOD_Y_OR_Z,
+       IIO_MOD_X_OR_Y_OR_Z,
+       IIO_MOD_LIGHT_BOTH,
+       IIO_MOD_LIGHT_IR,
+       IIO_MOD_ROOT_SUM_SQUARED_X_Y,
+       IIO_MOD_SUM_SQUARED_X_Y_Z,
+       IIO_MOD_LIGHT_CLEAR,
+       IIO_MOD_LIGHT_RED,
+       IIO_MOD_LIGHT_GREEN,
+       IIO_MOD_LIGHT_BLUE,
+       IIO_MOD_QUATERNION,
+       IIO_MOD_TEMP_AMBIENT,
+       IIO_MOD_TEMP_OBJECT,
+       IIO_MOD_NORTH_MAGN,
+       IIO_MOD_NORTH_TRUE,
+       IIO_MOD_NORTH_MAGN_TILT_COMP,
+       IIO_MOD_NORTH_TRUE_TILT_COMP,
+       IIO_MOD_RUNNING,
+       IIO_MOD_JOGGING,
+       IIO_MOD_WALKING,
+       IIO_MOD_STILL,
+       IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
+       IIO_MOD_I,
+       IIO_MOD_Q,
+       IIO_MOD_CO2,
+       IIO_MOD_VOC,
+};
+
+enum iio_event_type {
+       IIO_EV_TYPE_THRESH,
+       IIO_EV_TYPE_MAG,
+       IIO_EV_TYPE_ROC,
+       IIO_EV_TYPE_THRESH_ADAPTIVE,
+       IIO_EV_TYPE_MAG_ADAPTIVE,
+       IIO_EV_TYPE_CHANGE,
+};
+
+enum iio_event_direction {
+       IIO_EV_DIR_EITHER,
+       IIO_EV_DIR_RISING,
+       IIO_EV_DIR_FALLING,
+       IIO_EV_DIR_NONE,
+};
+
+#endif /* _IIO_TYPES_H_ */
+
diff --git a/lib/libdss-include/linux/ila.h b/lib/libdss-include/linux/ila.h
new file mode 100644 (file)
index 0000000..f08e8d7
--- /dev/null
@@ -0,0 +1,15 @@
+/* ila.h - ILA Interface */
+
+#ifndef _LINUX_ILA_H
+#define _LINUX_ILA_H
+
+enum {
+       ILA_ATTR_UNSPEC,
+       ILA_ATTR_LOCATOR,                       /* u64 */
+
+       __ILA_ATTR_MAX,
+};
+
+#define ILA_ATTR_MAX           (__ILA_ATTR_MAX - 1)
+
+#endif /* _LINUX_ILA_H */
diff --git a/lib/libdss-include/linux/in.h b/lib/libdss-include/linux/in.h
new file mode 100644 (file)
index 0000000..194b43b
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions of the Internet Protocol.
+ *
+ * Version:    @(#)in.h        1.0.1   04/21/93
+ *
+ * Authors:    Original taken from the GNU Project <netinet/in.h> file.
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IN_H
+#define _LINUX_IN_H
+
+#include <linux/types.h>
+#include <linux/libc-compat.h>
+#include <linux/socket.h>
+
+#if __UAPI_DEF_IN_IPPROTO
+/* Standard well-defined IP protocols.  */
+enum {
+  IPPROTO_IP = 0,              /* Dummy protocol for TCP               */
+#define IPPROTO_IP             IPPROTO_IP
+  IPPROTO_ICMP = 1,            /* Internet Control Message Protocol    */
+#define IPPROTO_ICMP           IPPROTO_ICMP
+  IPPROTO_IGMP = 2,            /* Internet Group Management Protocol   */
+#define IPPROTO_IGMP           IPPROTO_IGMP
+  IPPROTO_IPIP = 4,            /* IPIP tunnels (older KA9Q tunnels use 94) */
+#define IPPROTO_IPIP           IPPROTO_IPIP
+  IPPROTO_TCP = 6,             /* Transmission Control Protocol        */
+#define IPPROTO_TCP            IPPROTO_TCP
+  IPPROTO_EGP = 8,             /* Exterior Gateway Protocol            */
+#define IPPROTO_EGP            IPPROTO_EGP
+  IPPROTO_PUP = 12,            /* PUP protocol                         */
+#define IPPROTO_PUP            IPPROTO_PUP
+  IPPROTO_UDP = 17,            /* User Datagram Protocol               */
+#define IPPROTO_UDP            IPPROTO_UDP
+  IPPROTO_IDP = 22,            /* XNS IDP protocol                     */
+#define IPPROTO_IDP            IPPROTO_IDP
+  IPPROTO_TP = 29,             /* SO Transport Protocol Class 4        */
+#define IPPROTO_TP             IPPROTO_TP
+  IPPROTO_DCCP = 33,           /* Datagram Congestion Control Protocol */
+#define IPPROTO_DCCP           IPPROTO_DCCP
+  IPPROTO_IPV6 = 41,           /* IPv6-in-IPv4 tunnelling              */
+#define IPPROTO_IPV6           IPPROTO_IPV6
+  IPPROTO_RSVP = 46,           /* RSVP Protocol                        */
+#define IPPROTO_RSVP           IPPROTO_RSVP
+  IPPROTO_GRE = 47,            /* Cisco GRE tunnels (rfc 1701,1702)    */
+#define IPPROTO_GRE            IPPROTO_GRE
+  IPPROTO_ESP = 50,            /* Encapsulation Security Payload protocol */
+#define IPPROTO_ESP            IPPROTO_ESP
+  IPPROTO_AH = 51,             /* Authentication Header protocol       */
+#define IPPROTO_AH             IPPROTO_AH
+  IPPROTO_MTP = 92,            /* Multicast Transport Protocol         */
+#define IPPROTO_MTP            IPPROTO_MTP
+  IPPROTO_BEETPH = 94,         /* IP option pseudo header for BEET     */
+#define IPPROTO_BEETPH         IPPROTO_BEETPH
+  IPPROTO_ENCAP = 98,          /* Encapsulation Header                 */
+#define IPPROTO_ENCAP          IPPROTO_ENCAP
+  IPPROTO_PIM = 103,           /* Protocol Independent Multicast       */
+#define IPPROTO_PIM            IPPROTO_PIM
+  IPPROTO_COMP = 108,          /* Compression Header Protocol          */
+#define IPPROTO_COMP           IPPROTO_COMP
+  IPPROTO_SCTP = 132,          /* Stream Control Transport Protocol    */
+#define IPPROTO_SCTP           IPPROTO_SCTP
+  IPPROTO_UDPLITE = 136,       /* UDP-Lite (RFC 3828)                  */
+#define IPPROTO_UDPLITE                IPPROTO_UDPLITE
+  IPPROTO_MPLS = 137,          /* MPLS in IP (RFC 4023)                */
+#define IPPROTO_MPLS           IPPROTO_MPLS
+  IPPROTO_RAW = 255,           /* Raw IP packets                       */
+#define IPPROTO_RAW            IPPROTO_RAW
+  IPPROTO_MAX
+};
+#endif
+
+#if __UAPI_DEF_IN_ADDR
+/* Internet address. */
+struct in_addr {
+       __be32  s_addr;
+};
+#endif
+
+#define IP_TOS         1
+#define IP_TTL         2
+#define IP_HDRINCL     3
+#define IP_OPTIONS     4
+#define IP_ROUTER_ALERT        5
+#define IP_RECVOPTS    6
+#define IP_RETOPTS     7
+#define IP_PKTINFO     8
+#define IP_PKTOPTIONS  9
+#define IP_MTU_DISCOVER        10
+#define IP_RECVERR     11
+#define IP_RECVTTL     12
+#define        IP_RECVTOS      13
+#define IP_MTU         14
+#define IP_FREEBIND    15
+#define IP_IPSEC_POLICY        16
+#define IP_XFRM_POLICY 17
+#define IP_PASSSEC     18
+#define IP_TRANSPARENT 19
+
+/* BSD compatibility */
+#define IP_RECVRETOPTS IP_RETOPTS
+
+/* TProxy original addresses */
+#define IP_ORIGDSTADDR       20
+#define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
+
+#define IP_MINTTL       21
+#define IP_NODEFRAG     22
+#define IP_CHECKSUM    23
+#define IP_BIND_ADDRESS_NO_PORT        24
+
+/* IP_MTU_DISCOVER values */
+#define IP_PMTUDISC_DONT               0       /* Never send DF frames */
+#define IP_PMTUDISC_WANT               1       /* Use per route hints  */
+#define IP_PMTUDISC_DO                 2       /* Always DF            */
+#define IP_PMTUDISC_PROBE              3       /* Ignore dst pmtu      */
+/* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
+ * Also incoming ICMP frag_needed notifications will be ignored on
+ * this socket to prevent accepting spoofed ones.
+ */
+#define IP_PMTUDISC_INTERFACE          4
+/* weaker version of IP_PMTUDISC_INTERFACE, which allos packets to get
+ * fragmented if they exeed the interface mtu
+ */
+#define IP_PMTUDISC_OMIT               5
+
+#define IP_MULTICAST_IF                        32
+#define IP_MULTICAST_TTL               33
+#define IP_MULTICAST_LOOP              34
+#define IP_ADD_MEMBERSHIP              35
+#define IP_DROP_MEMBERSHIP             36
+#define IP_UNBLOCK_SOURCE              37
+#define IP_BLOCK_SOURCE                        38
+#define IP_ADD_SOURCE_MEMBERSHIP       39
+#define IP_DROP_SOURCE_MEMBERSHIP      40
+#define IP_MSFILTER                    41
+#define MCAST_JOIN_GROUP               42
+#define MCAST_BLOCK_SOURCE             43
+#define MCAST_UNBLOCK_SOURCE           44
+#define MCAST_LEAVE_GROUP              45
+#define MCAST_JOIN_SOURCE_GROUP                46
+#define MCAST_LEAVE_SOURCE_GROUP       47
+#define MCAST_MSFILTER                 48
+#define IP_MULTICAST_ALL               49
+#define IP_UNICAST_IF                  50
+
+#define MCAST_EXCLUDE  0
+#define MCAST_INCLUDE  1
+
+/* These need to appear somewhere around here */
+#define IP_DEFAULT_MULTICAST_TTL        1
+#define IP_DEFAULT_MULTICAST_LOOP       1
+
+/* Request struct for multicast socket ops */
+
+#if __UAPI_DEF_IP_MREQ
+struct ip_mreq  {
+       struct in_addr imr_multiaddr;   /* IP multicast address of group */
+       struct in_addr imr_interface;   /* local IP address of interface */
+};
+
+struct ip_mreqn {
+       struct in_addr  imr_multiaddr;          /* IP multicast address of group */
+       struct in_addr  imr_address;            /* local IP address of interface */
+       int             imr_ifindex;            /* Interface index */
+};
+
+struct ip_mreq_source {
+       __be32          imr_multiaddr;
+       __be32          imr_interface;
+       __be32          imr_sourceaddr;
+};
+
+struct ip_msfilter {
+       __be32          imsf_multiaddr;
+       __be32          imsf_interface;
+       __u32           imsf_fmode;
+       __u32           imsf_numsrc;
+       __be32          imsf_slist[1];
+};
+
+#define IP_MSFILTER_SIZE(numsrc) \
+       (sizeof(struct ip_msfilter) - sizeof(__u32) \
+       + (numsrc) * sizeof(__u32))
+
+struct group_req {
+       __u32                            gr_interface;  /* interface index */
+       struct __kernel_sockaddr_storage gr_group;      /* group address */
+};
+
+struct group_source_req {
+       __u32                            gsr_interface; /* interface index */
+       struct __kernel_sockaddr_storage gsr_group;     /* group address */
+       struct __kernel_sockaddr_storage gsr_source;    /* source address */
+};
+
+struct group_filter {
+       __u32                            gf_interface;  /* interface index */
+       struct __kernel_sockaddr_storage gf_group;      /* multicast address */
+       __u32                            gf_fmode;      /* filter mode */
+       __u32                            gf_numsrc;     /* number of sources */
+       struct __kernel_sockaddr_storage gf_slist[1];   /* interface index */
+};
+
+#define GROUP_FILTER_SIZE(numsrc) \
+       (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \
+       + (numsrc) * sizeof(struct __kernel_sockaddr_storage))
+#endif
+
+#if __UAPI_DEF_IN_PKTINFO
+struct in_pktinfo {
+       int             ipi_ifindex;
+       struct in_addr  ipi_spec_dst;
+       struct in_addr  ipi_addr;
+};
+#endif
+
+/* Structure describing an Internet (IP) socket address. */
+#if  __UAPI_DEF_SOCKADDR_IN
+#define __SOCK_SIZE__  16              /* sizeof(struct sockaddr)      */
+struct sockaddr_in {
+  __kernel_sa_family_t sin_family;     /* Address family               */
+  __be16               sin_port;       /* Port number                  */
+  struct in_addr       sin_addr;       /* Internet address             */
+
+  /* Pad to size of `struct sockaddr'. */
+  unsigned char                __pad[__SOCK_SIZE__ - sizeof(short int) -
+                       sizeof(unsigned short int) - sizeof(struct in_addr)];
+};
+#define sin_zero       __pad           /* for BSD UNIX comp. -FvK      */
+#endif
+
+#if __UAPI_DEF_IN_CLASS
+/*
+ * Definitions of the bits in an Internet address integer.
+ * On subnets, host and network parts are found according
+ * to the subnet mask, not these masks.
+ */
+#define        IN_CLASSA(a)            ((((long int) (a)) & 0x80000000) == 0)
+#define        IN_CLASSA_NET           0xff000000
+#define        IN_CLASSA_NSHIFT        24
+#define        IN_CLASSA_HOST          (0xffffffff & ~IN_CLASSA_NET)
+#define        IN_CLASSA_MAX           128
+
+#define        IN_CLASSB(a)            ((((long int) (a)) & 0xc0000000) == 0x80000000)
+#define        IN_CLASSB_NET           0xffff0000
+#define        IN_CLASSB_NSHIFT        16
+#define        IN_CLASSB_HOST          (0xffffffff & ~IN_CLASSB_NET)
+#define        IN_CLASSB_MAX           65536
+
+#define        IN_CLASSC(a)            ((((long int) (a)) & 0xe0000000) == 0xc0000000)
+#define        IN_CLASSC_NET           0xffffff00
+#define        IN_CLASSC_NSHIFT        8
+#define        IN_CLASSC_HOST          (0xffffffff & ~IN_CLASSC_NET)
+
+#define        IN_CLASSD(a)            ((((long int) (a)) & 0xf0000000) == 0xe0000000)
+#define        IN_MULTICAST(a)         IN_CLASSD(a)
+#define IN_MULTICAST_NET       0xF0000000
+
+#define        IN_EXPERIMENTAL(a)      ((((long int) (a)) & 0xf0000000) == 0xf0000000)
+#define        IN_BADCLASS(a)          IN_EXPERIMENTAL((a))
+
+/* Address to accept any incoming messages. */
+#define        INADDR_ANY              ((unsigned long int) 0x00000000)
+
+/* Address to send to all hosts. */
+#define        INADDR_BROADCAST        ((unsigned long int) 0xffffffff)
+
+/* Address indicating an error return. */
+#define        INADDR_NONE             ((unsigned long int) 0xffffffff)
+
+/* Network number for local host loopback. */
+#define        IN_LOOPBACKNET          127
+
+/* Address to loopback in software to local host.  */
+#define        INADDR_LOOPBACK         0x7f000001      /* 127.0.0.1   */
+#define        IN_LOOPBACK(a)          ((((long int) (a)) & 0xff000000) == 0x7f000000)
+
+/* Defines for Multicast INADDR */
+#define INADDR_UNSPEC_GROUP    0xe0000000U     /* 224.0.0.0   */
+#define INADDR_ALLHOSTS_GROUP  0xe0000001U     /* 224.0.0.1   */
+#define INADDR_ALLRTRS_GROUP    0xe0000002U    /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  0xe00000ffU    /* 224.0.0.255 */
+#endif
+
+/* <asm/byteorder.h> contains the htonl type stuff.. */
+#include <asm/byteorder.h> 
+
+
+#endif /* _LINUX_IN_H */
diff --git a/lib/libdss-include/linux/in6.h b/lib/libdss-include/linux/in6.h
new file mode 100644 (file)
index 0000000..994f4c2
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ *     Types and definitions for AF_INET6 
+ *     Linux INET6 implementation 
+ *
+ *     Authors:
+ *     Pedro Roque             <roque@di.fc.ul.pt>     
+ *
+ *     Sources:
+ *     IPv6 Program Interfaces for BSD Systems
+ *      <draft-ietf-ipngwg-bsd-api-05.txt>
+ *
+ *     Advanced Sockets API for IPv6
+ *     <draft-stevens-advanced-api-00.txt>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IN6_H
+#define _LINUX_IN6_H
+
+#include <linux/types.h>
+#include <linux/libc-compat.h>
+
+/*
+ *     IPv6 address structure
+ */
+
+#if __UAPI_DEF_IN6_ADDR
+struct in6_addr {
+       union {
+               __u8            u6_addr8[16];
+#if __UAPI_DEF_IN6_ADDR_ALT
+               __be16          u6_addr16[8];
+               __be32          u6_addr32[4];
+#endif
+       } in6_u;
+#define s6_addr                        in6_u.u6_addr8
+#if __UAPI_DEF_IN6_ADDR_ALT
+#define s6_addr16              in6_u.u6_addr16
+#define s6_addr32              in6_u.u6_addr32
+#endif
+};
+#endif /* __UAPI_DEF_IN6_ADDR */
+
+#if __UAPI_DEF_SOCKADDR_IN6
+struct sockaddr_in6 {
+       unsigned short int      sin6_family;    /* AF_INET6 */
+       __be16                  sin6_port;      /* Transport layer port # */
+       __be32                  sin6_flowinfo;  /* IPv6 flow information */
+       struct in6_addr         sin6_addr;      /* IPv6 address */
+       __u32                   sin6_scope_id;  /* scope id (new in RFC2553) */
+};
+#endif /* __UAPI_DEF_SOCKADDR_IN6 */
+
+#if __UAPI_DEF_IPV6_MREQ
+struct ipv6_mreq {
+       /* IPv6 multicast address of group */
+       struct in6_addr ipv6mr_multiaddr;
+
+       /* local IPv6 address of interface */
+       int             ipv6mr_ifindex;
+};
+#endif /* __UAPI_DEF_IVP6_MREQ */
+
+#define ipv6mr_acaddr  ipv6mr_multiaddr
+
+struct in6_flowlabel_req {
+       struct in6_addr flr_dst;
+       __be32  flr_label;
+       __u8    flr_action;
+       __u8    flr_share;
+       __u16   flr_flags;
+       __u16   flr_expires;
+       __u16   flr_linger;
+       __u32   __flr_pad;
+       /* Options in format of IPV6_PKTOPTIONS */
+};
+
+#define IPV6_FL_A_GET  0
+#define IPV6_FL_A_PUT  1
+#define IPV6_FL_A_RENEW        2
+
+#define IPV6_FL_F_CREATE       1
+#define IPV6_FL_F_EXCL         2
+#define IPV6_FL_F_REFLECT      4
+#define IPV6_FL_F_REMOTE       8
+
+#define IPV6_FL_S_NONE         0
+#define IPV6_FL_S_EXCL         1
+#define IPV6_FL_S_PROCESS      2
+#define IPV6_FL_S_USER         3
+#define IPV6_FL_S_ANY          255
+
+
+/*
+ *     Bitmask constant declarations to help applications select out the 
+ *     flow label and priority fields.
+ *
+ *     Note that this are in host byte order while the flowinfo field of
+ *     sockaddr_in6 is in network byte order.
+ */
+
+#define IPV6_FLOWINFO_FLOWLABEL                0x000fffff
+#define IPV6_FLOWINFO_PRIORITY         0x0ff00000
+
+/* These definitions are obsolete */
+#define IPV6_PRIORITY_UNCHARACTERIZED  0x0000
+#define IPV6_PRIORITY_FILLER           0x0100
+#define IPV6_PRIORITY_UNATTENDED       0x0200
+#define IPV6_PRIORITY_RESERVED1                0x0300
+#define IPV6_PRIORITY_BULK             0x0400
+#define IPV6_PRIORITY_RESERVED2                0x0500
+#define IPV6_PRIORITY_INTERACTIVE      0x0600
+#define IPV6_PRIORITY_CONTROL          0x0700
+#define IPV6_PRIORITY_8                        0x0800
+#define IPV6_PRIORITY_9                        0x0900
+#define IPV6_PRIORITY_10               0x0a00
+#define IPV6_PRIORITY_11               0x0b00
+#define IPV6_PRIORITY_12               0x0c00
+#define IPV6_PRIORITY_13               0x0d00
+#define IPV6_PRIORITY_14               0x0e00
+#define IPV6_PRIORITY_15               0x0f00
+
+/*
+ *     IPV6 extension headers
+ */
+#if __UAPI_DEF_IPPROTO_V6
+#define IPPROTO_HOPOPTS                0       /* IPv6 hop-by-hop options      */
+#define IPPROTO_ROUTING                43      /* IPv6 routing header          */
+#define IPPROTO_FRAGMENT       44      /* IPv6 fragmentation header    */
+#define IPPROTO_ICMPV6         58      /* ICMPv6                       */
+#define IPPROTO_NONE           59      /* IPv6 no next header          */
+#define IPPROTO_DSTOPTS                60      /* IPv6 destination options     */
+#define IPPROTO_MH             135     /* IPv6 mobility header         */
+#endif /* __UAPI_DEF_IPPROTO_V6 */
+
+/*
+ *     IPv6 TLV options.
+ */
+#define IPV6_TLV_PAD1          0
+#define IPV6_TLV_PADN          1
+#define IPV6_TLV_ROUTERALERT   5
+#define IPV6_TLV_JUMBO         194
+#define IPV6_TLV_HAO           201     /* home address option */
+
+/*
+ *     IPV6 socket options
+ */
+#if __UAPI_DEF_IPV6_OPTIONS
+#define IPV6_ADDRFORM          1
+#define IPV6_2292PKTINFO       2
+#define IPV6_2292HOPOPTS       3
+#define IPV6_2292DSTOPTS       4
+#define IPV6_2292RTHDR         5
+#define IPV6_2292PKTOPTIONS    6
+#define IPV6_CHECKSUM          7
+#define IPV6_2292HOPLIMIT      8
+#define IPV6_NEXTHOP           9
+#define IPV6_AUTHHDR           10      /* obsolete */
+#define IPV6_FLOWINFO          11
+
+#define IPV6_UNICAST_HOPS      16
+#define IPV6_MULTICAST_IF      17
+#define IPV6_MULTICAST_HOPS    18
+#define IPV6_MULTICAST_LOOP    19
+#define IPV6_ADD_MEMBERSHIP    20
+#define IPV6_DROP_MEMBERSHIP   21
+#define IPV6_ROUTER_ALERT      22
+#define IPV6_MTU_DISCOVER      23
+#define IPV6_MTU               24
+#define IPV6_RECVERR           25
+#define IPV6_V6ONLY            26
+#define IPV6_JOIN_ANYCAST      27
+#define IPV6_LEAVE_ANYCAST     28
+
+/* IPV6_MTU_DISCOVER values */
+#define IPV6_PMTUDISC_DONT             0
+#define IPV6_PMTUDISC_WANT             1
+#define IPV6_PMTUDISC_DO               2
+#define IPV6_PMTUDISC_PROBE            3
+/* same as IPV6_PMTUDISC_PROBE, provided for symetry with IPv4
+ * also see comments on IP_PMTUDISC_INTERFACE
+ */
+#define IPV6_PMTUDISC_INTERFACE                4
+/* weaker version of IPV6_PMTUDISC_INTERFACE, which allows packets to
+ * get fragmented if they exceed the interface mtu
+ */
+#define IPV6_PMTUDISC_OMIT             5
+
+/* Flowlabel */
+#define IPV6_FLOWLABEL_MGR     32
+#define IPV6_FLOWINFO_SEND     33
+
+#define IPV6_IPSEC_POLICY      34
+#define IPV6_XFRM_POLICY       35
+#endif
+
+/*
+ * Multicast:
+ * Following socket options are shared between IPv4 and IPv6.
+ *
+ * MCAST_JOIN_GROUP            42
+ * MCAST_BLOCK_SOURCE          43
+ * MCAST_UNBLOCK_SOURCE                44
+ * MCAST_LEAVE_GROUP           45
+ * MCAST_JOIN_SOURCE_GROUP     46
+ * MCAST_LEAVE_SOURCE_GROUP    47
+ * MCAST_MSFILTER              48
+ */
+
+/*
+ * Advanced API (RFC3542) (1)
+ *
+ * Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c.
+ */
+
+#define IPV6_RECVPKTINFO       49
+#define IPV6_PKTINFO           50
+#define IPV6_RECVHOPLIMIT      51
+#define IPV6_HOPLIMIT          52
+#define IPV6_RECVHOPOPTS       53
+#define IPV6_HOPOPTS           54
+#define IPV6_RTHDRDSTOPTS      55
+#define IPV6_RECVRTHDR         56
+#define IPV6_RTHDR             57
+#define IPV6_RECVDSTOPTS       58
+#define IPV6_DSTOPTS           59
+#define IPV6_RECVPATHMTU       60
+#define IPV6_PATHMTU           61
+#define IPV6_DONTFRAG          62
+#if 0  /* not yet */
+#define IPV6_USE_MIN_MTU       63
+#endif
+
+/*
+ * Netfilter (1)
+ *
+ * Following socket options are used in ip6_tables;
+ * see include/linux/netfilter_ipv6/ip6_tables.h.
+ *
+ * IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO              64
+ * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES      65
+ */
+
+/*
+ * Advanced API (RFC3542) (2)
+ */
+#define IPV6_RECVTCLASS                66
+#define IPV6_TCLASS            67
+
+/*
+ * Netfilter (2)
+ *
+ * Following socket options are used in ip6_tables;
+ * see include/linux/netfilter_ipv6/ip6_tables.h.
+ *
+ * IP6T_SO_GET_REVISION_MATCH  68
+ * IP6T_SO_GET_REVISION_TARGET 69
+ * IP6T_SO_ORIGINAL_DST                80
+ */
+
+#define IPV6_AUTOFLOWLABEL     70
+/* RFC5014: Source address selection */
+#define IPV6_ADDR_PREFERENCES  72
+
+#define IPV6_PREFER_SRC_TMP            0x0001
+#define IPV6_PREFER_SRC_PUBLIC         0x0002
+#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
+#define IPV6_PREFER_SRC_COA            0x0004
+#define IPV6_PREFER_SRC_HOME           0x0400
+#define IPV6_PREFER_SRC_CGA            0x0008
+#define IPV6_PREFER_SRC_NONCGA         0x0800
+
+/* RFC5082: Generalized Ttl Security Mechanism */
+#define IPV6_MINHOPCOUNT               73
+
+#define IPV6_ORIGDSTADDR        74
+#define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR
+#define IPV6_TRANSPARENT        75
+#define IPV6_UNICAST_IF         76
+
+/*
+ * Multicast Routing:
+ * see include/uapi/linux/mroute6.h.
+ *
+ * MRT6_BASE                   200
+ * ...
+ * MRT6_MAX
+ */
+#endif /* _LINUX_IN6_H */
diff --git a/lib/libdss-include/linux/in_route.h b/lib/libdss-include/linux/in_route.h
new file mode 100644 (file)
index 0000000..b261b8c
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _LINUX_IN_ROUTE_H
+#define _LINUX_IN_ROUTE_H
+
+/* IPv4 routing cache flags */
+
+#define RTCF_DEAD      RTNH_F_DEAD
+#define RTCF_ONLINK    RTNH_F_ONLINK
+
+/* Obsolete flag. About to be deleted */
+#define RTCF_NOPMTUDISC RTM_F_NOPMTUDISC
+
+#define RTCF_NOTIFY    0x00010000
+#define RTCF_DIRECTDST 0x00020000 /* unused */
+#define RTCF_REDIRECTED        0x00040000
+#define RTCF_TPROXY    0x00080000 /* unused */
+
+#define RTCF_FAST      0x00200000 /* unused */
+#define RTCF_MASQ      0x00400000 /* unused */
+#define RTCF_SNAT      0x00800000 /* unused */
+#define RTCF_DOREDIRECT 0x01000000
+#define RTCF_DIRECTSRC 0x04000000
+#define RTCF_DNAT      0x08000000
+#define RTCF_BROADCAST 0x10000000
+#define RTCF_MULTICAST 0x20000000
+#define RTCF_REJECT    0x40000000 /* unused */
+#define RTCF_LOCAL     0x80000000
+
+#define RTCF_NAT       (RTCF_DNAT|RTCF_SNAT)
+
+#define RT_TOS(tos)    ((tos)&IPTOS_TOS_MASK)
+
+#endif /* _LINUX_IN_ROUTE_H */
diff --git a/lib/libdss-include/linux/inet_diag.h b/lib/libdss-include/linux/inet_diag.h
new file mode 100644 (file)
index 0000000..1db4116
--- /dev/null
@@ -0,0 +1,152 @@
+#ifndef _INET_DIAG_H_
+#define _INET_DIAG_H_
+
+#include <linux/types.h>
+
+/* Just some random number */
+#define TCPDIAG_GETSOCK 18
+#define DCCPDIAG_GETSOCK 19
+
+#define INET_DIAG_GETSOCK_MAX 24
+
+/* Socket identity */
+struct inet_diag_sockid {
+       __be16  idiag_sport;
+       __be16  idiag_dport;
+       __be32  idiag_src[4];
+       __be32  idiag_dst[4];
+       __u32   idiag_if;
+       __u32   idiag_cookie[2];
+#define INET_DIAG_NOCOOKIE (~0U)
+};
+
+/* Request structure */
+
+struct inet_diag_req {
+       __u8    idiag_family;           /* Family of addresses. */
+       __u8    idiag_src_len;
+       __u8    idiag_dst_len;
+       __u8    idiag_ext;              /* Query extended information */
+
+       struct inet_diag_sockid id;
+
+       __u32   idiag_states;           /* States to dump */
+       __u32   idiag_dbs;              /* Tables to dump (NI) */
+};
+
+struct inet_diag_req_v2 {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u8    idiag_ext;
+       __u8    pad;
+       __u32   idiag_states;
+       struct inet_diag_sockid id;
+};
+
+enum {
+       INET_DIAG_REQ_NONE,
+       INET_DIAG_REQ_BYTECODE,
+};
+
+#define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE
+
+/* Bytecode is sequence of 4 byte commands followed by variable arguments.
+ * All the commands identified by "code" are conditional jumps forward:
+ * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
+ * length of the command and its arguments.
+ */
+struct inet_diag_bc_op {
+       unsigned char   code;
+       unsigned char   yes;
+       unsigned short  no;
+};
+
+enum {
+       INET_DIAG_BC_NOP,
+       INET_DIAG_BC_JMP,
+       INET_DIAG_BC_S_GE,
+       INET_DIAG_BC_S_LE,
+       INET_DIAG_BC_D_GE,
+       INET_DIAG_BC_D_LE,
+       INET_DIAG_BC_AUTO,
+       INET_DIAG_BC_S_COND,
+       INET_DIAG_BC_D_COND,
+};
+
+struct inet_diag_hostcond {
+       __u8    family;
+       __u8    prefix_len;
+       int     port;
+       __be32  addr[0];
+};
+
+/* Base info structure. It contains socket identity (addrs/ports/cookie)
+ * and, alas, the information shown by netstat. */
+struct inet_diag_msg {
+       __u8    idiag_family;
+       __u8    idiag_state;
+       __u8    idiag_timer;
+       __u8    idiag_retrans;
+
+       struct inet_diag_sockid id;
+
+       __u32   idiag_expires;
+       __u32   idiag_rqueue;
+       __u32   idiag_wqueue;
+       __u32   idiag_uid;
+       __u32   idiag_inode;
+};
+
+/* Extensions */
+
+enum {
+       INET_DIAG_NONE,
+       INET_DIAG_MEMINFO,
+       INET_DIAG_INFO,
+       INET_DIAG_VEGASINFO,
+       INET_DIAG_CONG,
+       INET_DIAG_TOS,
+       INET_DIAG_TCLASS,
+       INET_DIAG_SKMEMINFO,
+       INET_DIAG_SHUTDOWN,
+       INET_DIAG_DCTCPINFO,
+       INET_DIAG_PROTOCOL,  /* response attribute only */
+       INET_DIAG_SKV6ONLY,
+};
+
+#define INET_DIAG_MAX INET_DIAG_SKV6ONLY
+
+/* INET_DIAG_MEM */
+
+struct inet_diag_meminfo {
+       __u32   idiag_rmem;
+       __u32   idiag_wmem;
+       __u32   idiag_fmem;
+       __u32   idiag_tmem;
+};
+
+/* INET_DIAG_VEGASINFO */
+
+struct tcpvegas_info {
+       __u32   tcpv_enabled;
+       __u32   tcpv_rttcnt;
+       __u32   tcpv_rtt;
+       __u32   tcpv_minrtt;
+};
+
+/* INET_DIAG_DCTCPINFO */
+
+struct tcp_dctcp_info {
+       __u16   dctcp_enabled;
+       __u16   dctcp_ce_state;
+       __u32   dctcp_alpha;
+       __u32   dctcp_ab_ecn;
+       __u32   dctcp_ab_tot;
+};
+
+union tcp_cc_info {
+       struct tcpvegas_info    vegas;
+       struct tcp_dctcp_info   dctcp;
+};
+#endif /* _INET_DIAG_H_ */
diff --git a/lib/libdss-include/linux/inotify.h b/lib/libdss-include/linux/inotify.h
new file mode 100644 (file)
index 0000000..44a1a27
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Inode based directory notification for Linux
+ *
+ * Copyright (C) 2005 John McCutchan
+ */
+
+#ifndef _LINUX_INOTIFY_H
+#define _LINUX_INOTIFY_H
+
+/* For O_CLOEXEC and O_NONBLOCK */
+#include <linux/fcntl.h>
+#include <linux/types.h>
+
+/*
+ * struct inotify_event - structure read from the inotify device for each event
+ *
+ * When you are watching a directory, you will receive the filename for events
+ * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd.
+ */
+struct inotify_event {
+       __s32           wd;             /* watch descriptor */
+       __u32           mask;           /* watch mask */
+       __u32           cookie;         /* cookie to synchronize two events */
+       __u32           len;            /* length (including nulls) of name */
+       char            name[0];        /* stub for possible name */
+};
+
+/* the following are legal, implemented events that user-space can watch for */
+#define IN_ACCESS              0x00000001      /* File was accessed */
+#define IN_MODIFY              0x00000002      /* File was modified */
+#define IN_ATTRIB              0x00000004      /* Metadata changed */
+#define IN_CLOSE_WRITE         0x00000008      /* Writtable file was closed */
+#define IN_CLOSE_NOWRITE       0x00000010      /* Unwrittable file closed */
+#define IN_OPEN                        0x00000020      /* File was opened */
+#define IN_MOVED_FROM          0x00000040      /* File was moved from X */
+#define IN_MOVED_TO            0x00000080      /* File was moved to Y */
+#define IN_CREATE              0x00000100      /* Subfile was created */
+#define IN_DELETE              0x00000200      /* Subfile was deleted */
+#define IN_DELETE_SELF         0x00000400      /* Self was deleted */
+#define IN_MOVE_SELF           0x00000800      /* Self was moved */
+
+/* the following are legal events.  they are sent as needed to any watch */
+#define IN_UNMOUNT             0x00002000      /* Backing fs was unmounted */
+#define IN_Q_OVERFLOW          0x00004000      /* Event queued overflowed */
+#define IN_IGNORED             0x00008000      /* File was ignored */
+
+/* helper events */
+#define IN_CLOSE               (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
+#define IN_MOVE                        (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
+
+/* special flags */
+#define IN_ONLYDIR             0x01000000      /* only watch the path if it is a directory */
+#define IN_DONT_FOLLOW         0x02000000      /* don't follow a sym link */
+#define IN_EXCL_UNLINK         0x04000000      /* exclude events on unlinked objects */
+#define IN_MASK_ADD            0x20000000      /* add to the mask of an already existing watch */
+#define IN_ISDIR               0x40000000      /* event occurred against dir */
+#define IN_ONESHOT             0x80000000      /* only send event once */
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define IN_ALL_EVENTS  (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
+                        IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
+                        IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \
+                        IN_MOVE_SELF)
+
+/* Flags for sys_inotify_init1.  */
+#define IN_CLOEXEC O_CLOEXEC
+#define IN_NONBLOCK O_NONBLOCK
+
+
+#endif /* _LINUX_INOTIFY_H */
diff --git a/lib/libdss-include/linux/input-event-codes.h b/lib/libdss-include/linux/input-event-codes.h
new file mode 100644 (file)
index 0000000..dcd34b4
--- /dev/null
@@ -0,0 +1,805 @@
+/*
+ * Input event codes
+ *
+ *    *** IMPORTANT ***
+ * This file is not only included from C-code but also from devicetree source
+ * files. As such this file MUST only contain comments and defines.
+ *
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_EVENT_CODES_H
+#define _INPUT_EVENT_CODES_H
+
+/*
+ * Device properties and quirks
+ */
+
+#define INPUT_PROP_POINTER             0x00    /* needs a pointer */
+#define INPUT_PROP_DIRECT              0x01    /* direct input devices */
+#define INPUT_PROP_BUTTONPAD           0x02    /* has button(s) under pad */
+#define INPUT_PROP_SEMI_MT             0x03    /* touch rectangle only */
+#define INPUT_PROP_TOPBUTTONPAD                0x04    /* softbuttons at top of pad */
+#define INPUT_PROP_POINTING_STICK      0x05    /* is a pointing stick */
+#define INPUT_PROP_ACCELEROMETER       0x06    /* has accelerometer */
+
+#define INPUT_PROP_MAX                 0x1f
+#define INPUT_PROP_CNT                 (INPUT_PROP_MAX + 1)
+
+/*
+ * Event types
+ */
+
+#define EV_SYN                 0x00
+#define EV_KEY                 0x01
+#define EV_REL                 0x02
+#define EV_ABS                 0x03
+#define EV_MSC                 0x04
+#define EV_SW                  0x05
+#define EV_LED                 0x11
+#define EV_SND                 0x12
+#define EV_REP                 0x14
+#define EV_FF                  0x15
+#define EV_PWR                 0x16
+#define EV_FF_STATUS           0x17
+#define EV_MAX                 0x1f
+#define EV_CNT                 (EV_MAX+1)
+
+/*
+ * Synchronization events.
+ */
+
+#define SYN_REPORT             0
+#define SYN_CONFIG             1
+#define SYN_MT_REPORT          2
+#define SYN_DROPPED            3
+#define SYN_MAX                        0xf
+#define SYN_CNT                        (SYN_MAX+1)
+
+/*
+ * Keys and buttons
+ *
+ * Most of the keys/buttons are modeled after USB HUT 1.12
+ * (see http://www.usb.org/developers/hidpage).
+ * Abbreviations in the comments:
+ * AC - Application Control
+ * AL - Application Launch Button
+ * SC - System Control
+ */
+
+#define KEY_RESERVED           0
+#define KEY_ESC                        1
+#define KEY_1                  2
+#define KEY_2                  3
+#define KEY_3                  4
+#define KEY_4                  5
+#define KEY_5                  6
+#define KEY_6                  7
+#define KEY_7                  8
+#define KEY_8                  9
+#define KEY_9                  10
+#define KEY_0                  11
+#define KEY_MINUS              12
+#define KEY_EQUAL              13
+#define KEY_BACKSPACE          14
+#define KEY_TAB                        15
+#define KEY_Q                  16
+#define KEY_W                  17
+#define KEY_E                  18
+#define KEY_R                  19
+#define KEY_T                  20
+#define KEY_Y                  21
+#define KEY_U                  22
+#define KEY_I                  23
+#define KEY_O                  24
+#define KEY_P                  25
+#define KEY_LEFTBRACE          26
+#define KEY_RIGHTBRACE         27
+#define KEY_ENTER              28
+#define KEY_LEFTCTRL           29
+#define KEY_A                  30
+#define KEY_S                  31
+#define KEY_D                  32
+#define KEY_F                  33
+#define KEY_G                  34
+#define KEY_H                  35
+#define KEY_J                  36
+#define KEY_K                  37
+#define KEY_L                  38
+#define KEY_SEMICOLON          39
+#define KEY_APOSTROPHE         40
+#define KEY_GRAVE              41
+#define KEY_LEFTSHIFT          42
+#define KEY_BACKSLASH          43
+#define KEY_Z                  44
+#define KEY_X                  45
+#define KEY_C                  46
+#define KEY_V                  47
+#define KEY_B                  48
+#define KEY_N                  49
+#define KEY_M                  50
+#define KEY_COMMA              51
+#define KEY_DOT                        52
+#define KEY_SLASH              53
+#define KEY_RIGHTSHIFT         54
+#define KEY_KPASTERISK         55
+#define KEY_LEFTALT            56
+#define KEY_SPACE              57
+#define KEY_CAPSLOCK           58
+#define KEY_F1                 59
+#define KEY_F2                 60
+#define KEY_F3                 61
+#define KEY_F4                 62
+#define KEY_F5                 63
+#define KEY_F6                 64
+#define KEY_F7                 65
+#define KEY_F8                 66
+#define KEY_F9                 67
+#define KEY_F10                        68
+#define KEY_NUMLOCK            69
+#define KEY_SCROLLLOCK         70
+#define KEY_KP7                        71
+#define KEY_KP8                        72
+#define KEY_KP9                        73
+#define KEY_KPMINUS            74
+#define KEY_KP4                        75
+#define KEY_KP5                        76
+#define KEY_KP6                        77
+#define KEY_KPPLUS             78
+#define KEY_KP1                        79
+#define KEY_KP2                        80
+#define KEY_KP3                        81
+#define KEY_KP0                        82
+#define KEY_KPDOT              83
+
+#define KEY_ZENKAKUHANKAKU     85
+#define KEY_102ND              86
+#define KEY_F11                        87
+#define KEY_F12                        88
+#define KEY_RO                 89
+#define KEY_KATAKANA           90
+#define KEY_HIRAGANA           91
+#define KEY_HENKAN             92
+#define KEY_KATAKANAHIRAGANA   93
+#define KEY_MUHENKAN           94
+#define KEY_KPJPCOMMA          95
+#define KEY_KPENTER            96
+#define KEY_RIGHTCTRL          97
+#define KEY_KPSLASH            98
+#define KEY_SYSRQ              99
+#define KEY_RIGHTALT           100
+#define KEY_LINEFEED           101
+#define KEY_HOME               102
+#define KEY_UP                 103
+#define KEY_PAGEUP             104
+#define KEY_LEFT               105
+#define KEY_RIGHT              106
+#define KEY_END                        107
+#define KEY_DOWN               108
+#define KEY_PAGEDOWN           109
+#define KEY_INSERT             110
+#define KEY_DELETE             111
+#define KEY_MACRO              112
+#define KEY_MUTE               113
+#define KEY_VOLUMEDOWN         114
+#define KEY_VOLUMEUP           115
+#define KEY_POWER              116     /* SC System Power Down */
+#define KEY_KPEQUAL            117
+#define KEY_KPPLUSMINUS                118
+#define KEY_PAUSE              119
+#define KEY_SCALE              120     /* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA            121
+#define KEY_HANGEUL            122
+#define KEY_HANGUEL            KEY_HANGEUL
+#define KEY_HANJA              123
+#define KEY_YEN                        124
+#define KEY_LEFTMETA           125
+#define KEY_RIGHTMETA          126
+#define KEY_COMPOSE            127
+
+#define KEY_STOP               128     /* AC Stop */
+#define KEY_AGAIN              129
+#define KEY_PROPS              130     /* AC Properties */
+#define KEY_UNDO               131     /* AC Undo */
+#define KEY_FRONT              132
+#define KEY_COPY               133     /* AC Copy */
+#define KEY_OPEN               134     /* AC Open */
+#define KEY_PASTE              135     /* AC Paste */
+#define KEY_FIND               136     /* AC Search */
+#define KEY_CUT                        137     /* AC Cut */
+#define KEY_HELP               138     /* AL Integrated Help Center */
+#define KEY_MENU               139     /* Menu (show menu) */
+#define KEY_CALC               140     /* AL Calculator */
+#define KEY_SETUP              141
+#define KEY_SLEEP              142     /* SC System Sleep */
+#define KEY_WAKEUP             143     /* System Wake Up */
+#define KEY_FILE               144     /* AL Local Machine Browser */
+#define KEY_SENDFILE           145
+#define KEY_DELETEFILE         146
+#define KEY_XFER               147
+#define KEY_PROG1              148
+#define KEY_PROG2              149
+#define KEY_WWW                        150     /* AL Internet Browser */
+#define KEY_MSDOS              151
+#define KEY_COFFEE             152     /* AL Terminal Lock/Screensaver */
+#define KEY_SCREENLOCK         KEY_COFFEE
+#define KEY_ROTATE_DISPLAY     153     /* Display orientation for e.g. tablets */
+#define KEY_DIRECTION          KEY_ROTATE_DISPLAY
+#define KEY_CYCLEWINDOWS       154
+#define KEY_MAIL               155
+#define KEY_BOOKMARKS          156     /* AC Bookmarks */
+#define KEY_COMPUTER           157
+#define KEY_BACK               158     /* AC Back */
+#define KEY_FORWARD            159     /* AC Forward */
+#define KEY_CLOSECD            160
+#define KEY_EJECTCD            161
+#define KEY_EJECTCLOSECD       162
+#define KEY_NEXTSONG           163
+#define KEY_PLAYPAUSE          164
+#define KEY_PREVIOUSSONG       165
+#define KEY_STOPCD             166
+#define KEY_RECORD             167
+#define KEY_REWIND             168
+#define KEY_PHONE              169     /* Media Select Telephone */
+#define KEY_ISO                        170
+#define KEY_CONFIG             171     /* AL Consumer Control Configuration */
+#define KEY_HOMEPAGE           172     /* AC Home */
+#define KEY_REFRESH            173     /* AC Refresh */
+#define KEY_EXIT               174     /* AC Exit */
+#define KEY_MOVE               175
+#define KEY_EDIT               176
+#define KEY_SCROLLUP           177
+#define KEY_SCROLLDOWN         178
+#define KEY_KPLEFTPAREN                179
+#define KEY_KPRIGHTPAREN       180
+#define KEY_NEW                        181     /* AC New */
+#define KEY_REDO               182     /* AC Redo/Repeat */
+
+#define KEY_F13                        183
+#define KEY_F14                        184
+#define KEY_F15                        185
+#define KEY_F16                        186
+#define KEY_F17                        187
+#define KEY_F18                        188
+#define KEY_F19                        189
+#define KEY_F20                        190
+#define KEY_F21                        191
+#define KEY_F22                        192
+#define KEY_F23                        193
+#define KEY_F24                        194
+
+#define KEY_PLAYCD             200
+#define KEY_PAUSECD            201
+#define KEY_PROG3              202
+#define KEY_PROG4              203
+#define KEY_DASHBOARD          204     /* AL Dashboard */
+#define KEY_SUSPEND            205
+#define KEY_CLOSE              206     /* AC Close */
+#define KEY_PLAY               207
+#define KEY_FASTFORWARD                208
+#define KEY_BASSBOOST          209
+#define KEY_PRINT              210     /* AC Print */
+#define KEY_HP                 211
+#define KEY_CAMERA             212
+#define KEY_SOUND              213
+#define KEY_QUESTION           214
+#define KEY_EMAIL              215
+#define KEY_CHAT               216
+#define KEY_SEARCH             217
+#define KEY_CONNECT            218
+#define KEY_FINANCE            219     /* AL Checkbook/Finance */
+#define KEY_SPORT              220
+#define KEY_SHOP               221
+#define KEY_ALTERASE           222
+#define KEY_CANCEL             223     /* AC Cancel */
+#define KEY_BRIGHTNESSDOWN     224
+#define KEY_BRIGHTNESSUP       225
+#define KEY_MEDIA              226
+
+#define KEY_SWITCHVIDEOMODE    227     /* Cycle between available video
+                                          outputs (Monitor/LCD/TV-out/etc) */
+#define KEY_KBDILLUMTOGGLE     228
+#define KEY_KBDILLUMDOWN       229
+#define KEY_KBDILLUMUP         230
+
+#define KEY_SEND               231     /* AC Send */
+#define KEY_REPLY              232     /* AC Reply */
+#define KEY_FORWARDMAIL                233     /* AC Forward Msg */
+#define KEY_SAVE               234     /* AC Save */
+#define KEY_DOCUMENTS          235
+
+#define KEY_BATTERY            236
+
+#define KEY_BLUETOOTH          237
+#define KEY_WLAN               238
+#define KEY_UWB                        239
+
+#define KEY_UNKNOWN            240
+
+#define KEY_VIDEO_NEXT         241     /* drive next video source */
+#define KEY_VIDEO_PREV         242     /* drive previous video source */
+#define KEY_BRIGHTNESS_CYCLE   243     /* brightness up, after max is min */
+#define KEY_BRIGHTNESS_AUTO    244     /* Set Auto Brightness: manual
+                                         brightness control is off,
+                                         rely on ambient */
+#define KEY_BRIGHTNESS_ZERO    KEY_BRIGHTNESS_AUTO
+#define KEY_DISPLAY_OFF                245     /* display device to off state */
+
+#define KEY_WWAN               246     /* Wireless WAN (LTE, UMTS, GSM, etc.) */
+#define KEY_WIMAX              KEY_WWAN
+#define KEY_RFKILL             247     /* Key that controls all radios */
+
+#define KEY_MICMUTE            248     /* Mute / unmute the microphone */
+
+/* Code 255 is reserved for special needs of AT keyboard driver */
+
+#define BTN_MISC               0x100
+#define BTN_0                  0x100
+#define BTN_1                  0x101
+#define BTN_2                  0x102
+#define BTN_3                  0x103
+#define BTN_4                  0x104
+#define BTN_5                  0x105
+#define BTN_6                  0x106
+#define BTN_7                  0x107
+#define BTN_8                  0x108
+#define BTN_9                  0x109
+
+#define BTN_MOUSE              0x110
+#define BTN_LEFT               0x110
+#define BTN_RIGHT              0x111
+#define BTN_MIDDLE             0x112
+#define BTN_SIDE               0x113
+#define BTN_EXTRA              0x114
+#define BTN_FORWARD            0x115
+#define BTN_BACK               0x116
+#define BTN_TASK               0x117
+
+#define BTN_JOYSTICK           0x120
+#define BTN_TRIGGER            0x120
+#define BTN_THUMB              0x121
+#define BTN_THUMB2             0x122
+#define BTN_TOP                        0x123
+#define BTN_TOP2               0x124
+#define BTN_PINKIE             0x125
+#define BTN_BASE               0x126
+#define BTN_BASE2              0x127
+#define BTN_BASE3              0x128
+#define BTN_BASE4              0x129
+#define BTN_BASE5              0x12a
+#define BTN_BASE6              0x12b
+#define BTN_DEAD               0x12f
+
+#define BTN_GAMEPAD            0x130
+#define BTN_SOUTH              0x130
+#define BTN_A                  BTN_SOUTH
+#define BTN_EAST               0x131
+#define BTN_B                  BTN_EAST
+#define BTN_C                  0x132
+#define BTN_NORTH              0x133
+#define BTN_X                  BTN_NORTH
+#define BTN_WEST               0x134
+#define BTN_Y                  BTN_WEST
+#define BTN_Z                  0x135
+#define BTN_TL                 0x136
+#define BTN_TR                 0x137
+#define BTN_TL2                        0x138
+#define BTN_TR2                        0x139
+#define BTN_SELECT             0x13a
+#define BTN_START              0x13b
+#define BTN_MODE               0x13c
+#define BTN_THUMBL             0x13d
+#define BTN_THUMBR             0x13e
+
+#define BTN_DIGI               0x140
+#define BTN_TOOL_PEN           0x140
+#define BTN_TOOL_RUBBER                0x141
+#define BTN_TOOL_BRUSH         0x142
+#define BTN_TOOL_PENCIL                0x143
+#define BTN_TOOL_AIRBRUSH      0x144
+#define BTN_TOOL_FINGER                0x145
+#define BTN_TOOL_MOUSE         0x146
+#define BTN_TOOL_LENS          0x147
+#define BTN_TOOL_QUINTTAP      0x148   /* Five fingers on trackpad */
+#define BTN_TOUCH              0x14a
+#define BTN_STYLUS             0x14b
+#define BTN_STYLUS2            0x14c
+#define BTN_TOOL_DOUBLETAP     0x14d
+#define BTN_TOOL_TRIPLETAP     0x14e
+#define BTN_TOOL_QUADTAP       0x14f   /* Four fingers on trackpad */
+
+#define BTN_WHEEL              0x150
+#define BTN_GEAR_DOWN          0x150
+#define BTN_GEAR_UP            0x151
+
+#define KEY_OK                 0x160
+#define KEY_SELECT             0x161
+#define KEY_GOTO               0x162
+#define KEY_CLEAR              0x163
+#define KEY_POWER2             0x164
+#define KEY_OPTION             0x165
+#define KEY_INFO               0x166   /* AL OEM Features/Tips/Tutorial */
+#define KEY_TIME               0x167
+#define KEY_VENDOR             0x168
+#define KEY_ARCHIVE            0x169
+#define KEY_PROGRAM            0x16a   /* Media Select Program Guide */
+#define KEY_CHANNEL            0x16b
+#define KEY_FAVORITES          0x16c
+#define KEY_EPG                        0x16d
+#define KEY_PVR                        0x16e   /* Media Select Home */
+#define KEY_MHP                        0x16f
+#define KEY_LANGUAGE           0x170
+#define KEY_TITLE              0x171
+#define KEY_SUBTITLE           0x172
+#define KEY_ANGLE              0x173
+#define KEY_ZOOM               0x174
+#define KEY_MODE               0x175
+#define KEY_KEYBOARD           0x176
+#define KEY_SCREEN             0x177
+#define KEY_PC                 0x178   /* Media Select Computer */
+#define KEY_TV                 0x179   /* Media Select TV */
+#define KEY_TV2                        0x17a   /* Media Select Cable */
+#define KEY_VCR                        0x17b   /* Media Select VCR */
+#define KEY_VCR2               0x17c   /* VCR Plus */
+#define KEY_SAT                        0x17d   /* Media Select Satellite */
+#define KEY_SAT2               0x17e
+#define KEY_CD                 0x17f   /* Media Select CD */
+#define KEY_TAPE               0x180   /* Media Select Tape */
+#define KEY_RADIO              0x181
+#define KEY_TUNER              0x182   /* Media Select Tuner */
+#define KEY_PLAYER             0x183
+#define KEY_TEXT               0x184
+#define KEY_DVD                        0x185   /* Media Select DVD */
+#define KEY_AUX                        0x186
+#define KEY_MP3                        0x187
+#define KEY_AUDIO              0x188   /* AL Audio Browser */
+#define KEY_VIDEO              0x189   /* AL Movie Browser */
+#define KEY_DIRECTORY          0x18a
+#define KEY_LIST               0x18b
+#define KEY_MEMO               0x18c   /* Media Select Messages */
+#define KEY_CALENDAR           0x18d
+#define KEY_RED                        0x18e
+#define KEY_GREEN              0x18f
+#define KEY_YELLOW             0x190
+#define KEY_BLUE               0x191
+#define KEY_CHANNELUP          0x192   /* Channel Increment */
+#define KEY_CHANNELDOWN                0x193   /* Channel Decrement */
+#define KEY_FIRST              0x194
+#define KEY_LAST               0x195   /* Recall Last */
+#define KEY_AB                 0x196
+#define KEY_NEXT               0x197
+#define KEY_RESTART            0x198
+#define KEY_SLOW               0x199
+#define KEY_SHUFFLE            0x19a
+#define KEY_BREAK              0x19b
+#define KEY_PREVIOUS           0x19c
+#define KEY_DIGITS             0x19d
+#define KEY_TEEN               0x19e
+#define KEY_TWEN               0x19f
+#define KEY_VIDEOPHONE         0x1a0   /* Media Select Video Phone */
+#define KEY_GAMES              0x1a1   /* Media Select Games */
+#define KEY_ZOOMIN             0x1a2   /* AC Zoom In */
+#define KEY_ZOOMOUT            0x1a3   /* AC Zoom Out */
+#define KEY_ZOOMRESET          0x1a4   /* AC Zoom */
+#define KEY_WORDPROCESSOR      0x1a5   /* AL Word Processor */
+#define KEY_EDITOR             0x1a6   /* AL Text Editor */
+#define KEY_SPREADSHEET                0x1a7   /* AL Spreadsheet */
+#define KEY_GRAPHICSEDITOR     0x1a8   /* AL Graphics Editor */
+#define KEY_PRESENTATION       0x1a9   /* AL Presentation App */
+#define KEY_DATABASE           0x1aa   /* AL Database App */
+#define KEY_NEWS               0x1ab   /* AL Newsreader */
+#define KEY_VOICEMAIL          0x1ac   /* AL Voicemail */
+#define KEY_ADDRESSBOOK                0x1ad   /* AL Contacts/Address Book */
+#define KEY_MESSENGER          0x1ae   /* AL Instant Messaging */
+#define KEY_DISPLAYTOGGLE      0x1af   /* Turn display (LCD) on and off */
+#define KEY_BRIGHTNESS_TOGGLE  KEY_DISPLAYTOGGLE
+#define KEY_SPELLCHECK         0x1b0   /* AL Spell Check */
+#define KEY_LOGOFF             0x1b1   /* AL Logoff */
+
+#define KEY_DOLLAR             0x1b2
+#define KEY_EURO               0x1b3
+
+#define KEY_FRAMEBACK          0x1b4   /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD       0x1b5
+#define KEY_CONTEXT_MENU       0x1b6   /* GenDesc - system context menu */
+#define KEY_MEDIA_REPEAT       0x1b7   /* Consumer - transport control */
+#define KEY_10CHANNELSUP       0x1b8   /* 10 channels up (10+) */
+#define KEY_10CHANNELSDOWN     0x1b9   /* 10 channels down (10-) */
+#define KEY_IMAGES             0x1ba   /* AL Image Browser */
+
+#define KEY_DEL_EOL            0x1c0
+#define KEY_DEL_EOS            0x1c1
+#define KEY_INS_LINE           0x1c2
+#define KEY_DEL_LINE           0x1c3
+
+#define KEY_FN                 0x1d0
+#define KEY_FN_ESC             0x1d1
+#define KEY_FN_F1              0x1d2
+#define KEY_FN_F2              0x1d3
+#define KEY_FN_F3              0x1d4
+#define KEY_FN_F4              0x1d5
+#define KEY_FN_F5              0x1d6
+#define KEY_FN_F6              0x1d7
+#define KEY_FN_F7              0x1d8
+#define KEY_FN_F8              0x1d9
+#define KEY_FN_F9              0x1da
+#define KEY_FN_F10             0x1db
+#define KEY_FN_F11             0x1dc
+#define KEY_FN_F12             0x1dd
+#define KEY_FN_1               0x1de
+#define KEY_FN_2               0x1df
+#define KEY_FN_D               0x1e0
+#define KEY_FN_E               0x1e1
+#define KEY_FN_F               0x1e2
+#define KEY_FN_S               0x1e3
+#define KEY_FN_B               0x1e4
+
+#define KEY_BRL_DOT1           0x1f1
+#define KEY_BRL_DOT2           0x1f2
+#define KEY_BRL_DOT3           0x1f3
+#define KEY_BRL_DOT4           0x1f4
+#define KEY_BRL_DOT5           0x1f5
+#define KEY_BRL_DOT6           0x1f6
+#define KEY_BRL_DOT7           0x1f7
+#define KEY_BRL_DOT8           0x1f8
+#define KEY_BRL_DOT9           0x1f9
+#define KEY_BRL_DOT10          0x1fa
+
+#define KEY_NUMERIC_0          0x200   /* used by phones, remote controls, */
+#define KEY_NUMERIC_1          0x201   /* and other keypads */
+#define KEY_NUMERIC_2          0x202
+#define KEY_NUMERIC_3          0x203
+#define KEY_NUMERIC_4          0x204
+#define KEY_NUMERIC_5          0x205
+#define KEY_NUMERIC_6          0x206
+#define KEY_NUMERIC_7          0x207
+#define KEY_NUMERIC_8          0x208
+#define KEY_NUMERIC_9          0x209
+#define KEY_NUMERIC_STAR       0x20a
+#define KEY_NUMERIC_POUND      0x20b
+#define KEY_NUMERIC_A          0x20c   /* Phone key A - HUT Telephony 0xb9 */
+#define KEY_NUMERIC_B          0x20d
+#define KEY_NUMERIC_C          0x20e
+#define KEY_NUMERIC_D          0x20f
+
+#define KEY_CAMERA_FOCUS       0x210
+#define KEY_WPS_BUTTON         0x211   /* WiFi Protected Setup key */
+
+#define KEY_TOUCHPAD_TOGGLE    0x212   /* Request switch touchpad on or off */
+#define KEY_TOUCHPAD_ON                0x213
+#define KEY_TOUCHPAD_OFF       0x214
+
+#define KEY_CAMERA_ZOOMIN      0x215
+#define KEY_CAMERA_ZOOMOUT     0x216
+#define KEY_CAMERA_UP          0x217
+#define KEY_CAMERA_DOWN                0x218
+#define KEY_CAMERA_LEFT                0x219
+#define KEY_CAMERA_RIGHT       0x21a
+
+#define KEY_ATTENDANT_ON       0x21b
+#define KEY_ATTENDANT_OFF      0x21c
+#define KEY_ATTENDANT_TOGGLE   0x21d   /* Attendant call on or off */
+#define KEY_LIGHTS_TOGGLE      0x21e   /* Reading light on or off */
+
+#define BTN_DPAD_UP            0x220
+#define BTN_DPAD_DOWN          0x221
+#define BTN_DPAD_LEFT          0x222
+#define BTN_DPAD_RIGHT         0x223
+
+#define KEY_ALS_TOGGLE         0x230   /* Ambient light sensor */
+
+#define KEY_BUTTONCONFIG               0x240   /* AL Button Configuration */
+#define KEY_TASKMANAGER                0x241   /* AL Task/Project Manager */
+#define KEY_JOURNAL            0x242   /* AL Log/Journal/Timecard */
+#define KEY_CONTROLPANEL               0x243   /* AL Control Panel */
+#define KEY_APPSELECT          0x244   /* AL Select Task/Application */
+#define KEY_SCREENSAVER                0x245   /* AL Screen Saver */
+#define KEY_VOICECOMMAND               0x246   /* Listening Voice Command */
+
+#define KEY_BRIGHTNESS_MIN             0x250   /* Set Brightness to Minimum */
+#define KEY_BRIGHTNESS_MAX             0x251   /* Set Brightness to Maximum */
+
+#define KEY_KBDINPUTASSIST_PREV                0x260
+#define KEY_KBDINPUTASSIST_NEXT                0x261
+#define KEY_KBDINPUTASSIST_PREVGROUP           0x262
+#define KEY_KBDINPUTASSIST_NEXTGROUP           0x263
+#define KEY_KBDINPUTASSIST_ACCEPT              0x264
+#define KEY_KBDINPUTASSIST_CANCEL              0x265
+
+#define BTN_TRIGGER_HAPPY              0x2c0
+#define BTN_TRIGGER_HAPPY1             0x2c0
+#define BTN_TRIGGER_HAPPY2             0x2c1
+#define BTN_TRIGGER_HAPPY3             0x2c2
+#define BTN_TRIGGER_HAPPY4             0x2c3
+#define BTN_TRIGGER_HAPPY5             0x2c4
+#define BTN_TRIGGER_HAPPY6             0x2c5
+#define BTN_TRIGGER_HAPPY7             0x2c6
+#define BTN_TRIGGER_HAPPY8             0x2c7
+#define BTN_TRIGGER_HAPPY9             0x2c8
+#define BTN_TRIGGER_HAPPY10            0x2c9
+#define BTN_TRIGGER_HAPPY11            0x2ca
+#define BTN_TRIGGER_HAPPY12            0x2cb
+#define BTN_TRIGGER_HAPPY13            0x2cc
+#define BTN_TRIGGER_HAPPY14            0x2cd
+#define BTN_TRIGGER_HAPPY15            0x2ce
+#define BTN_TRIGGER_HAPPY16            0x2cf
+#define BTN_TRIGGER_HAPPY17            0x2d0
+#define BTN_TRIGGER_HAPPY18            0x2d1
+#define BTN_TRIGGER_HAPPY19            0x2d2
+#define BTN_TRIGGER_HAPPY20            0x2d3
+#define BTN_TRIGGER_HAPPY21            0x2d4
+#define BTN_TRIGGER_HAPPY22            0x2d5
+#define BTN_TRIGGER_HAPPY23            0x2d6
+#define BTN_TRIGGER_HAPPY24            0x2d7
+#define BTN_TRIGGER_HAPPY25            0x2d8
+#define BTN_TRIGGER_HAPPY26            0x2d9
+#define BTN_TRIGGER_HAPPY27            0x2da
+#define BTN_TRIGGER_HAPPY28            0x2db
+#define BTN_TRIGGER_HAPPY29            0x2dc
+#define BTN_TRIGGER_HAPPY30            0x2dd
+#define BTN_TRIGGER_HAPPY31            0x2de
+#define BTN_TRIGGER_HAPPY32            0x2df
+#define BTN_TRIGGER_HAPPY33            0x2e0
+#define BTN_TRIGGER_HAPPY34            0x2e1
+#define BTN_TRIGGER_HAPPY35            0x2e2
+#define BTN_TRIGGER_HAPPY36            0x2e3
+#define BTN_TRIGGER_HAPPY37            0x2e4
+#define BTN_TRIGGER_HAPPY38            0x2e5
+#define BTN_TRIGGER_HAPPY39            0x2e6
+#define BTN_TRIGGER_HAPPY40            0x2e7
+
+/* We avoid low common keys in module aliases so they don't get huge. */
+#define KEY_MIN_INTERESTING    KEY_MUTE
+#define KEY_MAX                        0x2ff
+#define KEY_CNT                        (KEY_MAX+1)
+
+/*
+ * Relative axes
+ */
+
+#define REL_X                  0x00
+#define REL_Y                  0x01
+#define REL_Z                  0x02
+#define REL_RX                 0x03
+#define REL_RY                 0x04
+#define REL_RZ                 0x05
+#define REL_HWHEEL             0x06
+#define REL_DIAL               0x07
+#define REL_WHEEL              0x08
+#define REL_MISC               0x09
+#define REL_MAX                        0x0f
+#define REL_CNT                        (REL_MAX+1)
+
+/*
+ * Absolute axes
+ */
+
+#define ABS_X                  0x00
+#define ABS_Y                  0x01
+#define ABS_Z                  0x02
+#define ABS_RX                 0x03
+#define ABS_RY                 0x04
+#define ABS_RZ                 0x05
+#define ABS_THROTTLE           0x06
+#define ABS_RUDDER             0x07
+#define ABS_WHEEL              0x08
+#define ABS_GAS                        0x09
+#define ABS_BRAKE              0x0a
+#define ABS_HAT0X              0x10
+#define ABS_HAT0Y              0x11
+#define ABS_HAT1X              0x12
+#define ABS_HAT1Y              0x13
+#define ABS_HAT2X              0x14
+#define ABS_HAT2Y              0x15
+#define ABS_HAT3X              0x16
+#define ABS_HAT3Y              0x17
+#define ABS_PRESSURE           0x18
+#define ABS_DISTANCE           0x19
+#define ABS_TILT_X             0x1a
+#define ABS_TILT_Y             0x1b
+#define ABS_TOOL_WIDTH         0x1c
+
+#define ABS_VOLUME             0x20
+
+#define ABS_MISC               0x28
+
+#define ABS_MT_SLOT            0x2f    /* MT slot being modified */
+#define ABS_MT_TOUCH_MAJOR     0x30    /* Major axis of touching ellipse */
+#define ABS_MT_TOUCH_MINOR     0x31    /* Minor axis (omit if circular) */
+#define ABS_MT_WIDTH_MAJOR     0x32    /* Major axis of approaching ellipse */
+#define ABS_MT_WIDTH_MINOR     0x33    /* Minor axis (omit if circular) */
+#define ABS_MT_ORIENTATION     0x34    /* Ellipse orientation */
+#define ABS_MT_POSITION_X      0x35    /* Center X touch position */
+#define ABS_MT_POSITION_Y      0x36    /* Center Y touch position */
+#define ABS_MT_TOOL_TYPE       0x37    /* Type of touching device */
+#define ABS_MT_BLOB_ID         0x38    /* Group a set of packets as a blob */
+#define ABS_MT_TRACKING_ID     0x39    /* Unique ID of initiated contact */
+#define ABS_MT_PRESSURE                0x3a    /* Pressure on contact area */
+#define ABS_MT_DISTANCE                0x3b    /* Contact hover distance */
+#define ABS_MT_TOOL_X          0x3c    /* Center X tool position */
+#define ABS_MT_TOOL_Y          0x3d    /* Center Y tool position */
+
+
+#define ABS_MAX                        0x3f
+#define ABS_CNT                        (ABS_MAX+1)
+
+/*
+ * Switch events
+ */
+
+#define SW_LID                 0x00  /* set = lid shut */
+#define SW_TABLET_MODE         0x01  /* set = tablet mode */
+#define SW_HEADPHONE_INSERT    0x02  /* set = inserted */
+#define SW_RFKILL_ALL          0x03  /* rfkill master switch, type "any"
+                                        set = radio enabled */
+#define SW_RADIO               SW_RFKILL_ALL   /* deprecated */
+#define SW_MICROPHONE_INSERT   0x04  /* set = inserted */
+#define SW_DOCK                        0x05  /* set = plugged into dock */
+#define SW_LINEOUT_INSERT      0x06  /* set = inserted */
+#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */
+#define SW_VIDEOOUT_INSERT     0x08  /* set = inserted */
+#define SW_CAMERA_LENS_COVER   0x09  /* set = lens covered */
+#define SW_KEYPAD_SLIDE                0x0a  /* set = keypad slide out */
+#define SW_FRONT_PROXIMITY     0x0b  /* set = front proximity sensor active */
+#define SW_ROTATE_LOCK         0x0c  /* set = rotate locked/disabled */
+#define SW_LINEIN_INSERT       0x0d  /* set = inserted */
+#define SW_MUTE_DEVICE         0x0e  /* set = device disabled */
+#define SW_MAX                 0x0f
+#define SW_CNT                 (SW_MAX+1)
+
+/*
+ * Misc events
+ */
+
+#define MSC_SERIAL             0x00
+#define MSC_PULSELED           0x01
+#define MSC_GESTURE            0x02
+#define MSC_RAW                        0x03
+#define MSC_SCAN               0x04
+#define MSC_TIMESTAMP          0x05
+#define MSC_MAX                        0x07
+#define MSC_CNT                        (MSC_MAX+1)
+
+/*
+ * LEDs
+ */
+
+#define LED_NUML               0x00
+#define LED_CAPSL              0x01
+#define LED_SCROLLL            0x02
+#define LED_COMPOSE            0x03
+#define LED_KANA               0x04
+#define LED_SLEEP              0x05
+#define LED_SUSPEND            0x06
+#define LED_MUTE               0x07
+#define LED_MISC               0x08
+#define LED_MAIL               0x09
+#define LED_CHARGING           0x0a
+#define LED_MAX                        0x0f
+#define LED_CNT                        (LED_MAX+1)
+
+/*
+ * Autorepeat values
+ */
+
+#define REP_DELAY              0x00
+#define REP_PERIOD             0x01
+#define REP_MAX                        0x01
+#define REP_CNT                        (REP_MAX+1)
+
+/*
+ * Sounds
+ */
+
+#define SND_CLICK              0x00
+#define SND_BELL               0x01
+#define SND_TONE               0x02
+#define SND_MAX                        0x07
+#define SND_CNT                        (SND_MAX+1)
+
+#endif
diff --git a/lib/libdss-include/linux/input.h b/lib/libdss-include/linux/input.h
new file mode 100644 (file)
index 0000000..577f4b6
--- /dev/null
@@ -0,0 +1,486 @@
+/*
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_H
+#define _INPUT_H
+
+
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <linux/types.h>
+
+#include "input-event-codes.h"
+
+/*
+ * The event structure itself
+ */
+
+struct input_event {
+       struct timeval time;
+       __u16 type;
+       __u16 code;
+       __s32 value;
+};
+
+/*
+ * Protocol version.
+ */
+
+#define EV_VERSION             0x010001
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+struct input_id {
+       __u16 bustype;
+       __u16 vendor;
+       __u16 product;
+       __u16 version;
+};
+
+/**
+ * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
+ * @value: latest reported value for the axis.
+ * @minimum: specifies minimum value for the axis.
+ * @maximum: specifies maximum value for the axis.
+ * @fuzz: specifies fuzz value that is used to filter noise from
+ *     the event stream.
+ * @flat: values that are within this value will be discarded by
+ *     joydev interface and reported as 0 instead.
+ * @resolution: specifies resolution for the values reported for
+ *     the axis.
+ *
+ * Note that input core does not clamp reported values to the
+ * [minimum, maximum] limits, such task is left to userspace.
+ *
+ * Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in
+ * units per millimeter (units/mm), resolution for rotational axes
+ * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
+ */
+struct input_absinfo {
+       __s32 value;
+       __s32 minimum;
+       __s32 maximum;
+       __s32 fuzz;
+       __s32 flat;
+       __s32 resolution;
+};
+
+/**
+ * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
+ * @scancode: scancode represented in machine-endian form.
+ * @len: length of the scancode that resides in @scancode buffer.
+ * @index: index in the keymap, may be used instead of scancode
+ * @flags: allows to specify how kernel should handle the request. For
+ *     example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
+ *     should perform lookup in keymap by @index instead of @scancode
+ * @keycode: key code assigned to this scancode
+ *
+ * The structure is used to retrieve and modify keymap data. Users have
+ * option of performing lookup either by @scancode itself or by @index
+ * in keymap entry. EVIOCGKEYCODE will also return scancode or index
+ * (depending on which element was used to perform lookup).
+ */
+struct input_keymap_entry {
+#define INPUT_KEYMAP_BY_INDEX  (1 << 0)
+       __u8  flags;
+       __u8  len;
+       __u16 index;
+       __u32 keycode;
+       __u8  scancode[32];
+};
+
+struct input_mask {
+       __u32 type;
+       __u32 codes_size;
+       __u64 codes_ptr;
+};
+
+#define EVIOCGVERSION          _IOR('E', 0x01, int)                    /* get driver version */
+#define EVIOCGID               _IOR('E', 0x02, struct input_id)        /* get device ID */
+#define EVIOCGREP              _IOR('E', 0x03, unsigned int[2])        /* get repeat settings */
+#define EVIOCSREP              _IOW('E', 0x03, unsigned int[2])        /* set repeat settings */
+
+#define EVIOCGKEYCODE          _IOR('E', 0x04, unsigned int[2])        /* get keycode */
+#define EVIOCGKEYCODE_V2       _IOR('E', 0x04, struct input_keymap_entry)
+#define EVIOCSKEYCODE          _IOW('E', 0x04, unsigned int[2])        /* set keycode */
+#define EVIOCSKEYCODE_V2       _IOW('E', 0x04, struct input_keymap_entry)
+
+#define EVIOCGNAME(len)                _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
+#define EVIOCGPHYS(len)                _IOC(_IOC_READ, 'E', 0x07, len)         /* get physical location */
+#define EVIOCGUNIQ(len)                _IOC(_IOC_READ, 'E', 0x08, len)         /* get unique identifier */
+#define EVIOCGPROP(len)                _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */
+
+/**
+ * EVIOCGMTSLOTS(len) - get MT slot values
+ * @len: size of the data buffer in bytes
+ *
+ * The ioctl buffer argument should be binary equivalent to
+ *
+ * struct input_mt_request_layout {
+ *     __u32 code;
+ *     __s32 values[num_slots];
+ * };
+ *
+ * where num_slots is the (arbitrary) number of MT slots to extract.
+ *
+ * The ioctl size argument (len) is the size of the buffer, which
+ * should satisfy len = (num_slots + 1) * sizeof(__s32).  If len is
+ * too small to fit all available slots, the first num_slots are
+ * returned.
+ *
+ * Before the call, code is set to the wanted ABS_MT event type. On
+ * return, values[] is filled with the slot values for the specified
+ * ABS_MT code.
+ *
+ * If the request code is not an ABS_MT value, -EINVAL is returned.
+ */
+#define EVIOCGMTSLOTS(len)     _IOC(_IOC_READ, 'E', 0x0a, len)
+
+#define EVIOCGKEY(len)         _IOC(_IOC_READ, 'E', 0x18, len)         /* get global key state */
+#define EVIOCGLED(len)         _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
+#define EVIOCGSND(len)         _IOC(_IOC_READ, 'E', 0x1a, len)         /* get all sounds status */
+#define EVIOCGSW(len)          _IOC(_IOC_READ, 'E', 0x1b, len)         /* get all switch states */
+
+#define EVIOCGBIT(ev,len)      _IOC(_IOC_READ, 'E', 0x20 + (ev), len)  /* get event bits */
+#define EVIOCGABS(abs)         _IOR('E', 0x40 + (abs), struct input_absinfo)   /* get abs value/limits */
+#define EVIOCSABS(abs)         _IOW('E', 0xc0 + (abs), struct input_absinfo)   /* set abs value/limits */
+
+#define EVIOCSFF               _IOW('E', 0x80, struct ff_effect)       /* send a force effect to a force feedback device */
+#define EVIOCRMFF              _IOW('E', 0x81, int)                    /* Erase a force effect */
+#define EVIOCGEFFECTS          _IOR('E', 0x84, int)                    /* Report number of effects playable at the same time */
+
+#define EVIOCGRAB              _IOW('E', 0x90, int)                    /* Grab/Release device */
+#define EVIOCREVOKE            _IOW('E', 0x91, int)                    /* Revoke device access */
+
+/**
+ * EVIOCGMASK - Retrieve current event mask
+ *
+ * This ioctl allows user to retrieve the current event mask for specific
+ * event type. The argument must be of type "struct input_mask" and
+ * specifies the event type to query, the address of the receive buffer and
+ * the size of the receive buffer.
+ *
+ * The event mask is a per-client mask that specifies which events are
+ * forwarded to the client. Each event code is represented by a single bit
+ * in the event mask. If the bit is set, the event is passed to the client
+ * normally. Otherwise, the event is filtered and will never be queued on
+ * the client's receive buffer.
+ *
+ * Event masks do not affect global state of the input device. They only
+ * affect the file descriptor they are applied to.
+ *
+ * The default event mask for a client has all bits set, i.e. all events
+ * are forwarded to the client. If the kernel is queried for an unknown
+ * event type or if the receive buffer is larger than the number of
+ * event codes known to the kernel, the kernel returns all zeroes for those
+ * codes.
+ *
+ * At maximum, codes_size bytes are copied.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
+ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
+ * does not implement the ioctl.
+ */
+#define EVIOCGMASK             _IOR('E', 0x92, struct input_mask)      /* Get event-masks */
+
+/**
+ * EVIOCSMASK - Set event mask
+ *
+ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
+ * current event mask, this changes the client's event mask for a specific
+ * type.  See EVIOCGMASK for a description of event-masks and the
+ * argument-type.
+ *
+ * This ioctl provides full forward compatibility. If the passed event type
+ * is unknown to the kernel, or if the number of event codes specified in
+ * the mask is bigger than what is known to the kernel, the ioctl is still
+ * accepted and applied. However, any unknown codes are left untouched and
+ * stay cleared. That means, the kernel always filters unknown codes
+ * regardless of what the client requests.  If the new mask doesn't cover
+ * all known event-codes, all remaining codes are automatically cleared and
+ * thus filtered.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
+ * returned if the receive-buffer points to invalid memory. EINVAL is returned
+ * if the kernel does not implement the ioctl.
+ */
+#define EVIOCSMASK             _IOW('E', 0x93, struct input_mask)      /* Set event-masks */
+
+#define EVIOCSCLOCKID          _IOW('E', 0xa0, int)                    /* Set clockid to be used for timestamps */
+
+/*
+ * IDs.
+ */
+
+#define ID_BUS                 0
+#define ID_VENDOR              1
+#define ID_PRODUCT             2
+#define ID_VERSION             3
+
+#define BUS_PCI                        0x01
+#define BUS_ISAPNP             0x02
+#define BUS_USB                        0x03
+#define BUS_HIL                        0x04
+#define BUS_BLUETOOTH          0x05
+#define BUS_VIRTUAL            0x06
+
+#define BUS_ISA                        0x10
+#define BUS_I8042              0x11
+#define BUS_XTKBD              0x12
+#define BUS_RS232              0x13
+#define BUS_GAMEPORT           0x14
+#define BUS_PARPORT            0x15
+#define BUS_AMIGA              0x16
+#define BUS_ADB                        0x17
+#define BUS_I2C                        0x18
+#define BUS_HOST               0x19
+#define BUS_GSC                        0x1A
+#define BUS_ATARI              0x1B
+#define BUS_SPI                        0x1C
+
+/*
+ * MT_TOOL types
+ */
+#define MT_TOOL_FINGER         0
+#define MT_TOOL_PEN            1
+#define MT_TOOL_PALM           2
+#define MT_TOOL_MAX            2
+
+/*
+ * Values describing the status of a force-feedback effect
+ */
+#define FF_STATUS_STOPPED      0x00
+#define FF_STATUS_PLAYING      0x01
+#define FF_STATUS_MAX          0x01
+
+/*
+ * Structures used in ioctls to upload effects to a device
+ * They are pieces of a bigger structure (called ff_effect)
+ */
+
+/*
+ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
+ * should not be used and have unspecified results.
+ */
+
+/**
+ * struct ff_replay - defines scheduling of the force-feedback effect
+ * @length: duration of the effect
+ * @delay: delay before effect should start playing
+ */
+struct ff_replay {
+       __u16 length;
+       __u16 delay;
+};
+
+/**
+ * struct ff_trigger - defines what triggers the force-feedback effect
+ * @button: number of the button triggering the effect
+ * @interval: controls how soon the effect can be re-triggered
+ */
+struct ff_trigger {
+       __u16 button;
+       __u16 interval;
+};
+
+/**
+ * struct ff_envelope - generic force-feedback effect envelope
+ * @attack_length: duration of the attack (ms)
+ * @attack_level: level at the beginning of the attack
+ * @fade_length: duration of fade (ms)
+ * @fade_level: level at the end of fade
+ *
+ * The @attack_level and @fade_level are absolute values; when applying
+ * envelope force-feedback core will convert to positive/negative
+ * value based on polarity of the default level of the effect.
+ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
+ */
+struct ff_envelope {
+       __u16 attack_length;
+       __u16 attack_level;
+       __u16 fade_length;
+       __u16 fade_level;
+};
+
+/**
+ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
+ * @level: strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_constant_effect {
+       __s16 level;
+       struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
+ * @start_level: beginning strength of the effect; may be negative
+ * @end_level: final strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_ramp_effect {
+       __s16 start_level;
+       __s16 end_level;
+       struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_condition_effect - defines a spring or friction force-feedback effect
+ * @right_saturation: maximum level when joystick moved all way to the right
+ * @left_saturation: same for the left side
+ * @right_coeff: controls how fast the force grows when the joystick moves
+ *     to the right
+ * @left_coeff: same for the left side
+ * @deadband: size of the dead zone, where no force is produced
+ * @center: position of the dead zone
+ */
+struct ff_condition_effect {
+       __u16 right_saturation;
+       __u16 left_saturation;
+
+       __s16 right_coeff;
+       __s16 left_coeff;
+
+       __u16 deadband;
+       __s16 center;
+};
+
+/**
+ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
+ * @waveform: kind of the effect (wave)
+ * @period: period of the wave (ms)
+ * @magnitude: peak value
+ * @offset: mean value of the wave (roughly)
+ * @phase: 'horizontal' shift
+ * @envelope: envelope data
+ * @custom_len: number of samples (FF_CUSTOM only)
+ * @custom_data: buffer of samples (FF_CUSTOM only)
+ *
+ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
+ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
+ * for the time being as no driver supports it yet.
+ *
+ * Note: the data pointed by custom_data is copied by the driver.
+ * You can therefore dispose of the memory after the upload/update.
+ */
+struct ff_periodic_effect {
+       __u16 waveform;
+       __u16 period;
+       __s16 magnitude;
+       __s16 offset;
+       __u16 phase;
+
+       struct ff_envelope envelope;
+
+       __u32 custom_len;
+       __s16 *custom_data;
+};
+
+/**
+ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
+ * @strong_magnitude: magnitude of the heavy motor
+ * @weak_magnitude: magnitude of the light one
+ *
+ * Some rumble pads have two motors of different weight. Strong_magnitude
+ * represents the magnitude of the vibration generated by the heavy one.
+ */
+struct ff_rumble_effect {
+       __u16 strong_magnitude;
+       __u16 weak_magnitude;
+};
+
+/**
+ * struct ff_effect - defines force feedback effect
+ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
+ *     FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+ * @id: an unique id assigned to an effect
+ * @direction: direction of the effect
+ * @trigger: trigger conditions (struct ff_trigger)
+ * @replay: scheduling of the effect (struct ff_replay)
+ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
+ *     ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
+ *     defining effect parameters
+ *
+ * This structure is sent through ioctl from the application to the driver.
+ * To create a new effect application should set its @id to -1; the kernel
+ * will return assigned @id which can later be used to update or delete
+ * this effect.
+ *
+ * Direction of the effect is encoded as follows:
+ *     0 deg -> 0x0000 (down)
+ *     90 deg -> 0x4000 (left)
+ *     180 deg -> 0x8000 (up)
+ *     270 deg -> 0xC000 (right)
+ */
+struct ff_effect {
+       __u16 type;
+       __s16 id;
+       __u16 direction;
+       struct ff_trigger trigger;
+       struct ff_replay replay;
+
+       union {
+               struct ff_constant_effect constant;
+               struct ff_ramp_effect ramp;
+               struct ff_periodic_effect periodic;
+               struct ff_condition_effect condition[2]; /* One for each axis */
+               struct ff_rumble_effect rumble;
+       } u;
+};
+
+/*
+ * Force feedback effect types
+ */
+
+#define FF_RUMBLE      0x50
+#define FF_PERIODIC    0x51
+#define FF_CONSTANT    0x52
+#define FF_SPRING      0x53
+#define FF_FRICTION    0x54
+#define FF_DAMPER      0x55
+#define FF_INERTIA     0x56
+#define FF_RAMP                0x57
+
+#define FF_EFFECT_MIN  FF_RUMBLE
+#define FF_EFFECT_MAX  FF_RAMP
+
+/*
+ * Force feedback periodic effect types
+ */
+
+#define FF_SQUARE      0x58
+#define FF_TRIANGLE    0x59
+#define FF_SINE                0x5a
+#define FF_SAW_UP      0x5b
+#define FF_SAW_DOWN    0x5c
+#define FF_CUSTOM      0x5d
+
+#define FF_WAVEFORM_MIN        FF_SQUARE
+#define FF_WAVEFORM_MAX        FF_CUSTOM
+
+/*
+ * Set ff device properties
+ */
+
+#define FF_GAIN                0x60
+#define FF_AUTOCENTER  0x61
+
+/*
+ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
+ * cause a collision with another ff method, in this case ff->set_gain().
+ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
+ * and thus the total number of effects should never exceed FF_GAIN.
+ */
+#define FF_MAX_EFFECTS FF_GAIN
+
+#define FF_MAX         0x7f
+#define FF_CNT         (FF_MAX+1)
+
+#endif /* _INPUT_H */
diff --git a/lib/libdss-include/linux/ioctl.h b/lib/libdss-include/linux/ioctl.h
new file mode 100644 (file)
index 0000000..aa91eb3
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef _LINUX_IOCTL_H
+#define _LINUX_IOCTL_H
+
+#include <asm/ioctl.h>
+
+#endif /* _LINUX_IOCTL_H */
+
diff --git a/lib/libdss-include/linux/ip.h b/lib/libdss-include/linux/ip.h
new file mode 100644 (file)
index 0000000..adf7c12
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the IP protocol.
+ *
+ * Version:    @(#)ip.h        1.0.2   04/28/93
+ *
+ * Authors:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IP_H
+#define _LINUX_IP_H
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+#define IPTOS_TOS_MASK         0x1E
+#define IPTOS_TOS(tos)         ((tos)&IPTOS_TOS_MASK)
+#define        IPTOS_LOWDELAY          0x10
+#define        IPTOS_THROUGHPUT        0x08
+#define        IPTOS_RELIABILITY       0x04
+#define        IPTOS_MINCOST           0x02
+
+#define IPTOS_PREC_MASK                0xE0
+#define IPTOS_PREC(tos)                ((tos)&IPTOS_PREC_MASK)
+#define IPTOS_PREC_NETCONTROL           0xe0
+#define IPTOS_PREC_INTERNETCONTROL      0xc0
+#define IPTOS_PREC_CRITIC_ECP           0xa0
+#define IPTOS_PREC_FLASHOVERRIDE        0x80
+#define IPTOS_PREC_FLASH                0x60
+#define IPTOS_PREC_IMMEDIATE            0x40
+#define IPTOS_PREC_PRIORITY             0x20
+#define IPTOS_PREC_ROUTINE              0x00
+
+
+/* IP options */
+#define IPOPT_COPY             0x80
+#define IPOPT_CLASS_MASK       0x60
+#define IPOPT_NUMBER_MASK      0x1f
+
+#define        IPOPT_COPIED(o)         ((o)&IPOPT_COPY)
+#define        IPOPT_CLASS(o)          ((o)&IPOPT_CLASS_MASK)
+#define        IPOPT_NUMBER(o)         ((o)&IPOPT_NUMBER_MASK)
+
+#define        IPOPT_CONTROL           0x00
+#define        IPOPT_RESERVED1         0x20
+#define        IPOPT_MEASUREMENT       0x40
+#define        IPOPT_RESERVED2         0x60
+
+#define IPOPT_END      (0 |IPOPT_CONTROL)
+#define IPOPT_NOOP     (1 |IPOPT_CONTROL)
+#define IPOPT_SEC      (2 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_LSRR     (3 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_TIMESTAMP        (4 |IPOPT_MEASUREMENT)
+#define IPOPT_CIPSO    (6 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_RR       (7 |IPOPT_CONTROL)
+#define IPOPT_SID      (8 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_SSRR     (9 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_RA       (20|IPOPT_CONTROL|IPOPT_COPY)
+
+#define IPVERSION      4
+#define MAXTTL         255
+#define IPDEFTTL       64
+
+#define IPOPT_OPTVAL 0
+#define IPOPT_OLEN   1
+#define IPOPT_OFFSET 2
+#define IPOPT_MINOFF 4
+#define MAX_IPOPTLEN 40
+#define IPOPT_NOP IPOPT_NOOP
+#define IPOPT_EOL IPOPT_END
+#define IPOPT_TS  IPOPT_TIMESTAMP
+
+#define        IPOPT_TS_TSONLY         0               /* timestamps only */
+#define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define        IPOPT_TS_PRESPEC        3               /* specified modules only */
+
+#define IPV4_BEET_PHMAXLEN 8
+
+struct iphdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8    ihl:4,
+               version:4;
+#elif defined (__BIG_ENDIAN_BITFIELD)
+       __u8    version:4,
+               ihl:4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8    tos;
+       __be16  tot_len;
+       __be16  id;
+       __be16  frag_off;
+       __u8    ttl;
+       __u8    protocol;
+       __sum16 check;
+       __be32  saddr;
+       __be32  daddr;
+       /*The options start here. */
+};
+
+
+struct ip_auth_hdr {
+       __u8  nexthdr;
+       __u8  hdrlen;           /* This one is measured in 32 bit units! */
+       __be16 reserved;
+       __be32 spi;
+       __be32 seq_no;          /* Sequence number */
+       __u8  auth_data[0];     /* Variable len but >=4. Mind the 64 bit alignment! */
+};
+
+struct ip_esp_hdr {
+       __be32 spi;
+       __be32 seq_no;          /* Sequence number */
+       __u8  enc_data[0];      /* Variable len but >=8. Mind the 64 bit alignment! */
+};
+
+struct ip_comp_hdr {
+       __u8 nexthdr;
+       __u8 flags;
+       __be16 cpi;
+};
+
+struct ip_beet_phdr {
+       __u8 nexthdr;
+       __u8 hdrlen;
+       __u8 padlen;
+       __u8 reserved;
+};
+
+/* index values for the variables in ipv4_devconf */
+enum
+{
+       IPV4_DEVCONF_FORWARDING=1,
+       IPV4_DEVCONF_MC_FORWARDING,
+       IPV4_DEVCONF_PROXY_ARP,
+       IPV4_DEVCONF_ACCEPT_REDIRECTS,
+       IPV4_DEVCONF_SECURE_REDIRECTS,
+       IPV4_DEVCONF_SEND_REDIRECTS,
+       IPV4_DEVCONF_SHARED_MEDIA,
+       IPV4_DEVCONF_RP_FILTER,
+       IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
+       IPV4_DEVCONF_BOOTP_RELAY,
+       IPV4_DEVCONF_LOG_MARTIANS,
+       IPV4_DEVCONF_TAG,
+       IPV4_DEVCONF_ARPFILTER,
+       IPV4_DEVCONF_MEDIUM_ID,
+       IPV4_DEVCONF_NOXFRM,
+       IPV4_DEVCONF_NOPOLICY,
+       IPV4_DEVCONF_FORCE_IGMP_VERSION,
+       IPV4_DEVCONF_ARP_ANNOUNCE,
+       IPV4_DEVCONF_ARP_IGNORE,
+       IPV4_DEVCONF_PROMOTE_SECONDARIES,
+       IPV4_DEVCONF_ARP_ACCEPT,
+       IPV4_DEVCONF_ARP_NOTIFY,
+       IPV4_DEVCONF_ACCEPT_LOCAL,
+       IPV4_DEVCONF_SRC_VMARK,
+       IPV4_DEVCONF_PROXY_ARP_PVLAN,
+       IPV4_DEVCONF_ROUTE_LOCALNET,
+       IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
+       IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
+       IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       __IPV4_DEVCONF_MAX
+};
+
+#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
+
+#endif /* _LINUX_IP_H */
diff --git a/lib/libdss-include/linux/ip6_tunnel.h b/lib/libdss-include/linux/ip6_tunnel.h
new file mode 100644 (file)
index 0000000..48af63c
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _IP6_TUNNEL_H
+#define _IP6_TUNNEL_H
+
+#include <linux/types.h>
+
+#define IPV6_TLV_TNL_ENCAP_LIMIT 4
+#define IPV6_DEFAULT_TNL_ENCAP_LIMIT 4
+
+/* don't add encapsulation limit if one isn't present in inner packet */
+#define IP6_TNL_F_IGN_ENCAP_LIMIT 0x1
+/* copy the traffic class field from the inner packet */
+#define IP6_TNL_F_USE_ORIG_TCLASS 0x2
+/* copy the flowlabel from the inner packet */
+#define IP6_TNL_F_USE_ORIG_FLOWLABEL 0x4
+/* being used for Mobile IPv6 */
+#define IP6_TNL_F_MIP6_DEV 0x8
+/* copy DSCP from the outer packet */
+#define IP6_TNL_F_RCV_DSCP_COPY 0x10
+/* copy fwmark from inner packet */
+#define IP6_TNL_F_USE_ORIG_FWMARK 0x20
+
+struct ip6_tnl_parm {
+       char name[IFNAMSIZ];    /* name of tunnel device */
+       int link;               /* ifindex of underlying L2 interface */
+       __u8 proto;             /* tunnel protocol */
+       __u8 encap_limit;       /* encapsulation limit for tunnel */
+       __u8 hop_limit;         /* hop limit for tunnel */
+       __be32 flowinfo;        /* traffic class and flowlabel for tunnel */
+       __u32 flags;            /* tunnel flags */
+       struct in6_addr laddr;  /* local tunnel end-point address */
+       struct in6_addr raddr;  /* remote tunnel end-point address */
+};
+
+struct ip6_tnl_parm2 {
+       char name[IFNAMSIZ];    /* name of tunnel device */
+       int link;               /* ifindex of underlying L2 interface */
+       __u8 proto;             /* tunnel protocol */
+       __u8 encap_limit;       /* encapsulation limit for tunnel */
+       __u8 hop_limit;         /* hop limit for tunnel */
+       __be32 flowinfo;        /* traffic class and flowlabel for tunnel */
+       __u32 flags;            /* tunnel flags */
+       struct in6_addr laddr;  /* local tunnel end-point address */
+       struct in6_addr raddr;  /* remote tunnel end-point address */
+
+       __be16                  i_flags;
+       __be16                  o_flags;
+       __be32                  i_key;
+       __be32                  o_key;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/ip_vs.h b/lib/libdss-include/linux/ip_vs.h
new file mode 100644 (file)
index 0000000..391395c
--- /dev/null
@@ -0,0 +1,453 @@
+/*
+ *      IP Virtual Server
+ *      data structure and functionality definitions
+ */
+
+#ifndef _IP_VS_H
+#define _IP_VS_H
+
+#include <linux/types.h>       /* For __beXX types in userland */
+
+#define IP_VS_VERSION_CODE     0x010201
+#define NVERSION(version)                      \
+       (version >> 16) & 0xFF,                 \
+       (version >> 8) & 0xFF,                  \
+       version & 0xFF
+
+/*
+ *      Virtual Service Flags
+ */
+#define IP_VS_SVC_F_PERSISTENT 0x0001          /* persistent port */
+#define IP_VS_SVC_F_HASHED     0x0002          /* hashed entry */
+#define IP_VS_SVC_F_ONEPACKET  0x0004          /* one-packet scheduling */
+#define IP_VS_SVC_F_SCHED1     0x0008          /* scheduler flag 1 */
+#define IP_VS_SVC_F_SCHED2     0x0010          /* scheduler flag 2 */
+#define IP_VS_SVC_F_SCHED3     0x0020          /* scheduler flag 3 */
+
+#define IP_VS_SVC_F_SCHED_SH_FALLBACK  IP_VS_SVC_F_SCHED1 /* SH fallback */
+#define IP_VS_SVC_F_SCHED_SH_PORT      IP_VS_SVC_F_SCHED2 /* SH use port */
+
+/*
+ *      Destination Server Flags
+ */
+#define IP_VS_DEST_F_AVAILABLE 0x0001          /* server is available */
+#define IP_VS_DEST_F_OVERLOAD  0x0002          /* server is overloaded */
+
+/*
+ *      IPVS sync daemon states
+ */
+#define IP_VS_STATE_NONE       0x0000          /* daemon is stopped */
+#define IP_VS_STATE_MASTER     0x0001          /* started as master */
+#define IP_VS_STATE_BACKUP     0x0002          /* started as backup */
+
+/*
+ *      IPVS socket options
+ */
+#define IP_VS_BASE_CTL         (64+1024+64)            /* base */
+
+#define IP_VS_SO_SET_NONE      IP_VS_BASE_CTL          /* just peek */
+#define IP_VS_SO_SET_INSERT    (IP_VS_BASE_CTL+1)
+#define IP_VS_SO_SET_ADD       (IP_VS_BASE_CTL+2)
+#define IP_VS_SO_SET_EDIT      (IP_VS_BASE_CTL+3)
+#define IP_VS_SO_SET_DEL       (IP_VS_BASE_CTL+4)
+#define IP_VS_SO_SET_FLUSH     (IP_VS_BASE_CTL+5)
+#define IP_VS_SO_SET_LIST      (IP_VS_BASE_CTL+6)
+#define IP_VS_SO_SET_ADDDEST   (IP_VS_BASE_CTL+7)
+#define IP_VS_SO_SET_DELDEST   (IP_VS_BASE_CTL+8)
+#define IP_VS_SO_SET_EDITDEST  (IP_VS_BASE_CTL+9)
+#define IP_VS_SO_SET_TIMEOUT   (IP_VS_BASE_CTL+10)
+#define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
+#define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
+#define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
+#define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
+#define IP_VS_SO_SET_ZERO      (IP_VS_BASE_CTL+15)
+#define IP_VS_SO_SET_MAX       IP_VS_SO_SET_ZERO
+
+#define IP_VS_SO_GET_VERSION   IP_VS_BASE_CTL
+#define IP_VS_SO_GET_INFO      (IP_VS_BASE_CTL+1)
+#define IP_VS_SO_GET_SERVICES  (IP_VS_BASE_CTL+2)
+#define IP_VS_SO_GET_SERVICE   (IP_VS_BASE_CTL+3)
+#define IP_VS_SO_GET_DESTS     (IP_VS_BASE_CTL+4)
+#define IP_VS_SO_GET_DEST      (IP_VS_BASE_CTL+5)      /* not used now */
+#define IP_VS_SO_GET_TIMEOUT   (IP_VS_BASE_CTL+6)
+#define IP_VS_SO_GET_DAEMON    (IP_VS_BASE_CTL+7)
+#define IP_VS_SO_GET_MAX       IP_VS_SO_GET_DAEMON
+
+
+/*
+ *      IPVS Connection Flags
+ *      Only flags 0..15 are sent to backup server
+ */
+#define IP_VS_CONN_F_FWD_MASK  0x0007          /* mask for the fwd methods */
+#define IP_VS_CONN_F_MASQ      0x0000          /* masquerading/NAT */
+#define IP_VS_CONN_F_LOCALNODE 0x0001          /* local node */
+#define IP_VS_CONN_F_TUNNEL    0x0002          /* tunneling */
+#define IP_VS_CONN_F_DROUTE    0x0003          /* direct routing */
+#define IP_VS_CONN_F_BYPASS    0x0004          /* cache bypass */
+#define IP_VS_CONN_F_SYNC      0x0020          /* entry created by sync */
+#define IP_VS_CONN_F_HASHED    0x0040          /* hashed entry */
+#define IP_VS_CONN_F_NOOUTPUT  0x0080          /* no output packets */
+#define IP_VS_CONN_F_INACTIVE  0x0100          /* not established */
+#define IP_VS_CONN_F_OUT_SEQ   0x0200          /* must do output seq adjust */
+#define IP_VS_CONN_F_IN_SEQ    0x0400          /* must do input seq adjust */
+#define IP_VS_CONN_F_SEQ_MASK  0x0600          /* in/out sequence mask */
+#define IP_VS_CONN_F_NO_CPORT  0x0800          /* no client port set yet */
+#define IP_VS_CONN_F_TEMPLATE  0x1000          /* template, not connection */
+#define IP_VS_CONN_F_ONE_PACKET        0x2000          /* forward only one packet */
+
+/* Initial bits allowed in backup server */
+#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
+                                 IP_VS_CONN_F_NOOUTPUT | \
+                                 IP_VS_CONN_F_INACTIVE | \
+                                 IP_VS_CONN_F_SEQ_MASK | \
+                                 IP_VS_CONN_F_NO_CPORT | \
+                                 IP_VS_CONN_F_TEMPLATE \
+                                )
+
+/* Bits allowed to update in backup server */
+#define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \
+                                     IP_VS_CONN_F_SEQ_MASK)
+
+/* Flags that are not sent to backup server start from bit 16 */
+#define IP_VS_CONN_F_NFCT      (1 << 16)       /* use netfilter conntrack */
+
+/* Connection flags from destination that can be changed by user space */
+#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \
+                               IP_VS_CONN_F_ONE_PACKET | \
+                               IP_VS_CONN_F_NFCT | \
+                               0)
+
+#define IP_VS_SCHEDNAME_MAXLEN 16
+#define IP_VS_PENAME_MAXLEN    16
+#define IP_VS_IFNAME_MAXLEN    16
+
+#define IP_VS_PEDATA_MAXLEN     255
+
+/*
+ *     The struct ip_vs_service_user and struct ip_vs_dest_user are
+ *     used to set IPVS rules through setsockopt.
+ */
+struct ip_vs_service_user {
+       /* virtual service addresses */
+       __u16           protocol;
+       __be32                  addr;           /* virtual ip address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* virtual service options */
+       char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
+       unsigned int            flags;          /* virtual service flags */
+       unsigned int            timeout;        /* persistent timeout in sec */
+       __be32                  netmask;        /* persistent netmask */
+};
+
+
+struct ip_vs_dest_user {
+       /* destination server address */
+       __be32                  addr;
+       __be16                  port;
+
+       /* real server options */
+       unsigned int            conn_flags;     /* connection flags */
+       int                     weight;         /* destination weight */
+
+       /* thresholds for active connections */
+       __u32           u_threshold;    /* upper threshold */
+       __u32           l_threshold;    /* lower threshold */
+};
+
+
+/*
+ *     IPVS statistics object (for user space)
+ */
+struct ip_vs_stats_user {
+       __u32                   conns;          /* connections scheduled */
+       __u32                   inpkts;         /* incoming packets */
+       __u32                   outpkts;        /* outgoing packets */
+       __u64                   inbytes;        /* incoming bytes */
+       __u64                   outbytes;       /* outgoing bytes */
+
+       __u32                   cps;            /* current connection rate */
+       __u32                   inpps;          /* current in packet rate */
+       __u32                   outpps;         /* current out packet rate */
+       __u32                   inbps;          /* current in byte rate */
+       __u32                   outbps;         /* current out byte rate */
+};
+
+
+/* The argument to IP_VS_SO_GET_INFO */
+struct ip_vs_getinfo {
+       /* version number */
+       unsigned int            version;
+
+       /* size of connection hash table */
+       unsigned int            size;
+
+       /* number of virtual services */
+       unsigned int            num_services;
+};
+
+
+/* The argument to IP_VS_SO_GET_SERVICE */
+struct ip_vs_service_entry {
+       /* which service: user fills in these */
+       __u16           protocol;
+       __be32                  addr;           /* virtual address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* service options */
+       char                    sched_name[IP_VS_SCHEDNAME_MAXLEN];
+       unsigned int            flags;          /* virtual service flags */
+       unsigned int            timeout;        /* persistent timeout */
+       __be32                  netmask;        /* persistent netmask */
+
+       /* number of real servers */
+       unsigned int            num_dests;
+
+       /* statistics */
+       struct ip_vs_stats_user stats;
+};
+
+
+struct ip_vs_dest_entry {
+       __be32                  addr;           /* destination address */
+       __be16                  port;
+       unsigned int            conn_flags;     /* connection flags */
+       int                     weight;         /* destination weight */
+
+       __u32           u_threshold;    /* upper threshold */
+       __u32           l_threshold;    /* lower threshold */
+
+       __u32           activeconns;    /* active connections */
+       __u32           inactconns;     /* inactive connections */
+       __u32           persistconns;   /* persistent connections */
+
+       /* statistics */
+       struct ip_vs_stats_user stats;
+};
+
+
+/* The argument to IP_VS_SO_GET_DESTS */
+struct ip_vs_get_dests {
+       /* which service: user fills in these */
+       __u16           protocol;
+       __be32                  addr;           /* virtual address */
+       __be16                  port;
+       __u32           fwmark;         /* firwall mark of service */
+
+       /* number of real servers */
+       unsigned int            num_dests;
+
+       /* the real servers */
+       struct ip_vs_dest_entry entrytable[0];
+};
+
+
+/* The argument to IP_VS_SO_GET_SERVICES */
+struct ip_vs_get_services {
+       /* number of virtual services */
+       unsigned int            num_services;
+
+       /* service table */
+       struct ip_vs_service_entry entrytable[0];
+};
+
+
+/* The argument to IP_VS_SO_GET_TIMEOUT */
+struct ip_vs_timeout_user {
+       int                     tcp_timeout;
+       int                     tcp_fin_timeout;
+       int                     udp_timeout;
+};
+
+
+/* The argument to IP_VS_SO_GET_DAEMON */
+struct ip_vs_daemon_user {
+       /* sync daemon state (master/backup) */
+       int                     state;
+
+       /* multicast interface name */
+       char                    mcast_ifn[IP_VS_IFNAME_MAXLEN];
+
+       /* SyncID we belong to */
+       int                     syncid;
+};
+
+/*
+ *
+ * IPVS Generic Netlink interface definitions
+ *
+ */
+
+/* Generic Netlink family info */
+
+#define IPVS_GENL_NAME         "IPVS"
+#define IPVS_GENL_VERSION      0x1
+
+struct ip_vs_flags {
+       __u32 flags;
+       __u32 mask;
+};
+
+/* Generic Netlink command attributes */
+enum {
+       IPVS_CMD_UNSPEC = 0,
+
+       IPVS_CMD_NEW_SERVICE,           /* add service */
+       IPVS_CMD_SET_SERVICE,           /* modify service */
+       IPVS_CMD_DEL_SERVICE,           /* delete service */
+       IPVS_CMD_GET_SERVICE,           /* get service info */
+
+       IPVS_CMD_NEW_DEST,              /* add destination */
+       IPVS_CMD_SET_DEST,              /* modify destination */
+       IPVS_CMD_DEL_DEST,              /* delete destination */
+       IPVS_CMD_GET_DEST,              /* get destination info */
+
+       IPVS_CMD_NEW_DAEMON,            /* start sync daemon */
+       IPVS_CMD_DEL_DAEMON,            /* stop sync daemon */
+       IPVS_CMD_GET_DAEMON,            /* get sync daemon status */
+
+       IPVS_CMD_SET_CONFIG,            /* set config settings */
+       IPVS_CMD_GET_CONFIG,            /* get config settings */
+
+       IPVS_CMD_SET_INFO,              /* only used in GET_INFO reply */
+       IPVS_CMD_GET_INFO,              /* get general IPVS info */
+
+       IPVS_CMD_ZERO,                  /* zero all counters and stats */
+       IPVS_CMD_FLUSH,                 /* flush services and dests */
+
+       __IPVS_CMD_MAX,
+};
+
+#define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
+
+/* Attributes used in the first level of commands */
+enum {
+       IPVS_CMD_ATTR_UNSPEC = 0,
+       IPVS_CMD_ATTR_SERVICE,          /* nested service attribute */
+       IPVS_CMD_ATTR_DEST,             /* nested destination attribute */
+       IPVS_CMD_ATTR_DAEMON,           /* nested sync daemon attribute */
+       IPVS_CMD_ATTR_TIMEOUT_TCP,      /* TCP connection timeout */
+       IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,  /* TCP FIN wait timeout */
+       IPVS_CMD_ATTR_TIMEOUT_UDP,      /* UDP timeout */
+       __IPVS_CMD_ATTR_MAX,
+};
+
+#define IPVS_CMD_ATTR_MAX (__IPVS_CMD_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe a service
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
+ */
+enum {
+       IPVS_SVC_ATTR_UNSPEC = 0,
+       IPVS_SVC_ATTR_AF,               /* address family */
+       IPVS_SVC_ATTR_PROTOCOL,         /* virtual service protocol */
+       IPVS_SVC_ATTR_ADDR,             /* virtual service address */
+       IPVS_SVC_ATTR_PORT,             /* virtual service port */
+       IPVS_SVC_ATTR_FWMARK,           /* firewall mark of service */
+
+       IPVS_SVC_ATTR_SCHED_NAME,       /* name of scheduler */
+       IPVS_SVC_ATTR_FLAGS,            /* virtual service flags */
+       IPVS_SVC_ATTR_TIMEOUT,          /* persistent timeout */
+       IPVS_SVC_ATTR_NETMASK,          /* persistent netmask */
+
+       IPVS_SVC_ATTR_STATS,            /* nested attribute for service stats */
+
+       IPVS_SVC_ATTR_PE_NAME,          /* name of ct retriever */
+
+       IPVS_SVC_ATTR_STATS64,          /* nested attribute for service stats */
+
+       __IPVS_SVC_ATTR_MAX,
+};
+
+#define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe a destination (real server)
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_DEST
+ */
+enum {
+       IPVS_DEST_ATTR_UNSPEC = 0,
+       IPVS_DEST_ATTR_ADDR,            /* real server address */
+       IPVS_DEST_ATTR_PORT,            /* real server port */
+
+       IPVS_DEST_ATTR_FWD_METHOD,      /* forwarding method */
+       IPVS_DEST_ATTR_WEIGHT,          /* destination weight */
+
+       IPVS_DEST_ATTR_U_THRESH,        /* upper threshold */
+       IPVS_DEST_ATTR_L_THRESH,        /* lower threshold */
+
+       IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
+       IPVS_DEST_ATTR_INACT_CONNS,     /* inactive connections */
+       IPVS_DEST_ATTR_PERSIST_CONNS,   /* persistent connections */
+
+       IPVS_DEST_ATTR_STATS,           /* nested attribute for dest stats */
+
+       IPVS_DEST_ATTR_ADDR_FAMILY,     /* Address family of address */
+
+       IPVS_DEST_ATTR_STATS64,         /* nested attribute for dest stats */
+
+       __IPVS_DEST_ATTR_MAX,
+};
+
+#define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
+
+/*
+ * Attributes describing a sync daemon
+ *
+ * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
+ */
+enum {
+       IPVS_DAEMON_ATTR_UNSPEC = 0,
+       IPVS_DAEMON_ATTR_STATE,         /* sync daemon state (master/backup) */
+       IPVS_DAEMON_ATTR_MCAST_IFN,     /* multicast interface name */
+       IPVS_DAEMON_ATTR_SYNC_ID,       /* SyncID we belong to */
+       IPVS_DAEMON_ATTR_SYNC_MAXLEN,   /* UDP Payload Size */
+       IPVS_DAEMON_ATTR_MCAST_GROUP,   /* IPv4 Multicast Address */
+       IPVS_DAEMON_ATTR_MCAST_GROUP6,  /* IPv6 Multicast Address */
+       IPVS_DAEMON_ATTR_MCAST_PORT,    /* Multicast Port (base) */
+       IPVS_DAEMON_ATTR_MCAST_TTL,     /* Multicast TTL */
+       __IPVS_DAEMON_ATTR_MAX,
+};
+
+#define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
+
+/*
+ * Attributes used to describe service or destination entry statistics
+ *
+ * Used inside nested attributes IPVS_SVC_ATTR_STATS, IPVS_DEST_ATTR_STATS,
+ * IPVS_SVC_ATTR_STATS64 and IPVS_DEST_ATTR_STATS64.
+ */
+enum {
+       IPVS_STATS_ATTR_UNSPEC = 0,
+       IPVS_STATS_ATTR_CONNS,          /* connections scheduled */
+       IPVS_STATS_ATTR_INPKTS,         /* incoming packets */
+       IPVS_STATS_ATTR_OUTPKTS,        /* outgoing packets */
+       IPVS_STATS_ATTR_INBYTES,        /* incoming bytes */
+       IPVS_STATS_ATTR_OUTBYTES,       /* outgoing bytes */
+
+       IPVS_STATS_ATTR_CPS,            /* current connection rate */
+       IPVS_STATS_ATTR_INPPS,          /* current in packet rate */
+       IPVS_STATS_ATTR_OUTPPS,         /* current out packet rate */
+       IPVS_STATS_ATTR_INBPS,          /* current in byte rate */
+       IPVS_STATS_ATTR_OUTBPS,         /* current out byte rate */
+       __IPVS_STATS_ATTR_MAX,
+};
+
+#define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
+
+/* Attributes used in response to IPVS_CMD_GET_INFO command */
+enum {
+       IPVS_INFO_ATTR_UNSPEC = 0,
+       IPVS_INFO_ATTR_VERSION,         /* IPVS version number */
+       IPVS_INFO_ATTR_CONN_TAB_SIZE,   /* size of connection hash table */
+       __IPVS_INFO_ATTR_MAX,
+};
+
+#define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
+
+#endif /* _IP_VS_H */
diff --git a/lib/libdss-include/linux/ipc.h b/lib/libdss-include/linux/ipc.h
new file mode 100644 (file)
index 0000000..98a53a1
--- /dev/null
@@ -0,0 +1,81 @@
+#ifndef _LINUX_IPC_H
+#define _LINUX_IPC_H
+
+#include <linux/types.h>
+
+#define IPC_PRIVATE ((__kernel_key_t) 0)  
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct ipc_perm
+{
+       __kernel_key_t  key;
+       __kernel_uid_t  uid;
+       __kernel_gid_t  gid;
+       __kernel_uid_t  cuid;
+       __kernel_gid_t  cgid;
+       __kernel_mode_t mode; 
+       unsigned short  seq;
+};
+
+/* Include the definition of ipc64_perm */
+#include <asm/ipcbuf.h>
+
+/* resource get request flags */
+#define IPC_CREAT  00001000   /* create if key is nonexistent */
+#define IPC_EXCL   00002000   /* fail if key exists */
+#define IPC_NOWAIT 00004000   /* return error on wait */
+
+/* these fields are used by the DIPC package so the kernel as standard
+   should avoid using them if possible */
+   
+#define IPC_DIPC 00010000  /* make it distributed */
+#define IPC_OWN  00020000  /* this machine is the DIPC owner */
+
+/* 
+ * Control commands used with semctl, msgctl and shmctl 
+ * see also specific commands in sem.h, msg.h and shm.h
+ */
+#define IPC_RMID 0     /* remove resource */
+#define IPC_SET  1     /* set ipc_perm options */
+#define IPC_STAT 2     /* get ipc_perm options */
+#define IPC_INFO 3     /* see ipcs */
+
+/*
+ * Version flags for semctl, msgctl, and shmctl commands
+ * These are passed as bitflags or-ed with the actual command
+ */
+#define IPC_OLD 0      /* Old version (no 32-bit UID support on many
+                          architectures) */
+#define IPC_64  0x0100  /* New version (support 32-bit UIDs, bigger
+                          message sizes, etc. */
+
+/*
+ * These are used to wrap system calls.
+ *
+ * See architecture code for ugly details..
+ */
+struct ipc_kludge {
+       struct msgbuf *msgp;
+       long msgtyp;
+};
+
+#define SEMOP           1
+#define SEMGET          2
+#define SEMCTL          3
+#define SEMTIMEDOP      4
+#define MSGSND         11
+#define MSGRCV         12
+#define MSGGET         13
+#define MSGCTL         14
+#define SHMAT          21
+#define SHMDT          22
+#define SHMGET         23
+#define SHMCTL         24
+
+/* Used by the DIPC package, try and avoid reusing it */
+#define DIPC            25
+
+#define IPCCALL(version,op)    ((version)<<16 | (op))
+
+
+#endif /* _LINUX_IPC_H */
diff --git a/lib/libdss-include/linux/ipmi.h b/lib/libdss-include/linux/ipmi.h
new file mode 100644 (file)
index 0000000..9077549
--- /dev/null
@@ -0,0 +1,448 @@
+/*
+ * ipmi.h
+ *
+ * MontaVista IPMI interface
+ *
+ * Author: MontaVista Software, Inc.
+ *         Corey Minyard <minyard@mvista.com>
+ *         source@mvista.com
+ *
+ * Copyright 2002 MontaVista Software Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __LINUX_IPMI_H
+#define __LINUX_IPMI_H
+
+#include <linux/ipmi_msgdefs.h>
+
+
+/*
+ * This file describes an interface to an IPMI driver.  You have to
+ * have a fairly good understanding of IPMI to use this, so go read
+ * the specs first before actually trying to do anything.
+ *
+ * With that said, this driver provides a multi-user interface to the
+ * IPMI driver, and it allows multiple IPMI physical interfaces below
+ * the driver.  The physical interfaces bind as a lower layer on the
+ * driver.  They appear as interfaces to the application using this
+ * interface.
+ *
+ * Multi-user means that multiple applications may use the driver,
+ * send commands, receive responses, etc.  The driver keeps track of
+ * commands the user sends and tracks the responses.  The responses
+ * will go back to the application that send the command.  If the
+ * response doesn't come back in time, the driver will return a
+ * timeout error response to the application.  Asynchronous events
+ * from the BMC event queue will go to all users bound to the driver.
+ * The incoming event queue in the BMC will automatically be flushed
+ * if it becomes full and it is queried once a second to see if
+ * anything is in it.  Incoming commands to the driver will get
+ * delivered as commands.
+ */
+
+/*
+ * This is an overlay for all the address types, so it's easy to
+ * determine the actual address type.  This is kind of like addresses
+ * work for sockets.
+ */
+#define IPMI_MAX_ADDR_SIZE 32
+struct ipmi_addr {
+        /* Try to take these from the "Channel Medium Type" table
+           in section 6.5 of the IPMI 1.5 manual. */
+       int   addr_type;
+       short channel;
+       char  data[IPMI_MAX_ADDR_SIZE];
+};
+
+/*
+ * When the address is not used, the type will be set to this value.
+ * The channel is the BMC's channel number for the channel (usually
+ * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC.
+ */
+#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE        0x0c
+struct ipmi_system_interface_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char lun;
+};
+
+/* An IPMB Address. */
+#define IPMI_IPMB_ADDR_TYPE            0x01
+/* Used for broadcast get device id as described in section 17.9 of the
+   IPMI 1.5 manual. */
+#define IPMI_IPMB_BROADCAST_ADDR_TYPE  0x41
+struct ipmi_ipmb_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char slave_addr;
+       unsigned char lun;
+};
+
+/*
+ * A LAN Address.  This is an address to/from a LAN interface bridged
+ * by the BMC, not an address actually out on the LAN.
+ *
+ * A conscious decision was made here to deviate slightly from the IPMI
+ * spec.  We do not use rqSWID and rsSWID like it shows in the
+ * message.  Instead, we use remote_SWID and local_SWID.  This means
+ * that any message (a request or response) from another device will
+ * always have exactly the same address.  If you didn't do this,
+ * requests and responses from the same device would have different
+ * addresses, and that's not too cool.
+ *
+ * In this address, the remote_SWID is always the SWID the remote
+ * message came from, or the SWID we are sending the message to.
+ * local_SWID is always our SWID.  Note that having our SWID in the
+ * message is a little weird, but this is required.
+ */
+#define IPMI_LAN_ADDR_TYPE             0x04
+struct ipmi_lan_addr {
+       int           addr_type;
+       short         channel;
+       unsigned char privilege;
+       unsigned char session_handle;
+       unsigned char remote_SWID;
+       unsigned char local_SWID;
+       unsigned char lun;
+};
+
+
+/*
+ * Channel for talking directly with the BMC.  When using this
+ * channel, This is for the system interface address type only.  FIXME
+ * - is this right, or should we use -1?
+ */
+#define IPMI_BMC_CHANNEL  0xf
+#define IPMI_NUM_CHANNELS 0x10
+
+/*
+ * Used to signify an "all channel" bitmask.  This is more than the
+ * actual number of channels because this is used in userland and
+ * will cover us if the number of channels is extended.
+ */
+#define IPMI_CHAN_ALL     (~0)
+
+
+/*
+ * A raw IPMI message without any addressing.  This covers both
+ * commands and responses.  The completion code is always the first
+ * byte of data in the response (as the spec shows the messages laid
+ * out).
+ */
+struct ipmi_msg {
+       unsigned char  netfn;
+       unsigned char  cmd;
+       unsigned short data_len;
+       unsigned char  *data;
+};
+
+struct kernel_ipmi_msg {
+       unsigned char  netfn;
+       unsigned char  cmd;
+       unsigned short data_len;
+       unsigned char  *data;
+};
+
+/*
+ * Various defines that are useful for IPMI applications.
+ */
+#define IPMI_INVALID_CMD_COMPLETION_CODE       0xC1
+#define IPMI_TIMEOUT_COMPLETION_CODE           0xC3
+#define IPMI_UNKNOWN_ERR_COMPLETION_CODE       0xff
+
+
+/*
+ * Receive types for messages coming from the receive interface.  This
+ * is used for the receive in-kernel interface and in the receive
+ * IOCTL.
+ *
+ * The "IPMI_RESPONSE_RESPNOSE_TYPE" is a little strange sounding, but
+ * it allows you to get the message results when you send a response
+ * message.
+ */
+#define IPMI_RESPONSE_RECV_TYPE                1 /* A response to a command */
+#define IPMI_ASYNC_EVENT_RECV_TYPE     2 /* Something from the event queue */
+#define IPMI_CMD_RECV_TYPE             3 /* A command from somewhere else */
+#define IPMI_RESPONSE_RESPONSE_TYPE    4 /* The response for
+                                             a sent response, giving any
+                                             error status for sending the
+                                             response.  When you send a
+                                             response message, this will
+                                             be returned. */
+#define IPMI_OEM_RECV_TYPE             5 /* The response for OEM Channels */
+
+/* Note that async events and received commands do not have a completion
+   code as the first byte of the incoming data, unlike a response. */
+
+
+/*
+ * Modes for ipmi_set_maint_mode() and the userland IOCTL.  The AUTO
+ * setting is the default and means it will be set on certain
+ * commands.  Hard setting it on and off will override automatic
+ * operation.
+ */
+#define IPMI_MAINTENANCE_MODE_AUTO     0
+#define IPMI_MAINTENANCE_MODE_OFF      1
+#define IPMI_MAINTENANCE_MODE_ON       2
+
+
+
+/*
+ * The userland interface
+ */
+
+/*
+ * The userland interface for the IPMI driver is a standard character
+ * device, with each instance of an interface registered as a minor
+ * number under the major character device.
+ *
+ * The read and write calls do not work, to get messages in and out
+ * requires ioctl calls because of the complexity of the data.  select
+ * and poll do work, so you can wait for input using the file
+ * descriptor, you just can use read to get it.
+ *
+ * In general, you send a command down to the interface and receive
+ * responses back.  You can use the msgid value to correlate commands
+ * and responses, the driver will take care of figuring out which
+ * incoming messages are for which command and find the proper msgid
+ * value to report.  You will only receive reponses for commands you
+ * send.  Asynchronous events, however, go to all open users, so you
+ * must be ready to handle these (or ignore them if you don't care).
+ *
+ * The address type depends upon the channel type.  When talking
+ * directly to the BMC (IPMC_BMC_CHANNEL), the address is ignored
+ * (IPMI_UNUSED_ADDR_TYPE).  When talking to an IPMB channel, you must
+ * supply a valid IPMB address with the addr_type set properly.
+ *
+ * When talking to normal channels, the driver takes care of the
+ * details of formatting and sending messages on that channel.  You do
+ * not, for instance, have to format a send command, you just send
+ * whatever command you want to the channel, the driver will create
+ * the send command, automatically issue receive command and get even
+ * commands, and pass those up to the proper user.
+ */
+
+
+/* The magic IOCTL value for this interface. */
+#define IPMI_IOC_MAGIC 'i'
+
+
+/* Messages sent to the interface are this format. */
+struct ipmi_req {
+       unsigned char *addr; /* Address to send the message to. */
+       unsigned int  addr_len;
+
+       long    msgid; /* The sequence number for the message.  This
+                         exact value will be reported back in the
+                         response to this request if it is a command.
+                         If it is a response, this will be used as
+                         the sequence value for the response.  */
+
+       struct ipmi_msg msg;
+};
+/*
+ * Send a message to the interfaces.  error values are:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EINVAL - The address supplied was not valid, or the command
+ *              was not allowed.
+ *   - EMSGSIZE - The message to was too large.
+ *   - ENOMEM - Buffers could not be allocated for the command.
+ */
+#define IPMICTL_SEND_COMMAND           _IOR(IPMI_IOC_MAGIC, 13,        \
+                                            struct ipmi_req)
+
+/* Messages sent to the interface with timing parameters are this
+   format. */
+struct ipmi_req_settime {
+       struct ipmi_req req;
+
+       /* See ipmi_request_settime() above for details on these
+          values. */
+       int          retries;
+       unsigned int retry_time_ms;
+};
+/*
+ * Send a message to the interfaces with timing parameters.  error values
+ * are:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EINVAL - The address supplied was not valid, or the command
+ *              was not allowed.
+ *   - EMSGSIZE - The message to was too large.
+ *   - ENOMEM - Buffers could not be allocated for the command.
+ */
+#define IPMICTL_SEND_COMMAND_SETTIME   _IOR(IPMI_IOC_MAGIC, 21,        \
+                                            struct ipmi_req_settime)
+
+/* Messages received from the interface are this format. */
+struct ipmi_recv {
+       int     recv_type; /* Is this a command, response or an
+                             asyncronous event. */
+
+       unsigned char *addr;    /* Address the message was from is put
+                                  here.  The caller must supply the
+                                  memory. */
+       unsigned int  addr_len; /* The size of the address buffer.
+                                  The caller supplies the full buffer
+                                  length, this value is updated to
+                                  the actual message length when the
+                                  message is received. */
+
+       long    msgid; /* The sequence number specified in the request
+                         if this is a response.  If this is a command,
+                         this will be the sequence number from the
+                         command. */
+
+       struct ipmi_msg msg; /* The data field must point to a buffer.
+                               The data_size field must be set to the
+                               size of the message buffer.  The
+                               caller supplies the full buffer
+                               length, this value is updated to the
+                               actual message length when the message
+                               is received. */
+};
+
+/*
+ * Receive a message.  error values:
+ *  - EAGAIN - no messages in the queue.
+ *  - EFAULT - an address supplied was invalid.
+ *  - EINVAL - The address supplied was not valid.
+ *  - EMSGSIZE - The message to was too large to fit into the message buffer,
+ *               the message will be left in the buffer. */
+#define IPMICTL_RECEIVE_MSG            _IOWR(IPMI_IOC_MAGIC, 12,       \
+                                             struct ipmi_recv)
+
+/*
+ * Like RECEIVE_MSG, but if the message won't fit in the buffer, it
+ * will truncate the contents instead of leaving the data in the
+ * buffer.
+ */
+#define IPMICTL_RECEIVE_MSG_TRUNC      _IOWR(IPMI_IOC_MAGIC, 11,       \
+                                             struct ipmi_recv)
+
+/* Register to get commands from other entities on this interface. */
+struct ipmi_cmdspec {
+       unsigned char netfn;
+       unsigned char cmd;
+};
+
+/*
+ * Register to receive a specific command.  error values:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EBUSY - The netfn/cmd supplied was already in use.
+ *   - ENOMEM - could not allocate memory for the entry.
+ */
+#define IPMICTL_REGISTER_FOR_CMD       _IOR(IPMI_IOC_MAGIC, 14,        \
+                                            struct ipmi_cmdspec)
+/*
+ * Unregister a regsitered command.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ *  - ENOENT - The netfn/cmd was not found registered for this user.
+ */
+#define IPMICTL_UNREGISTER_FOR_CMD     _IOR(IPMI_IOC_MAGIC, 15,        \
+                                            struct ipmi_cmdspec)
+
+/*
+ * Register to get commands from other entities on specific channels.
+ * This way, you can only listen on specific channels, or have messages
+ * from some channels go to one place and other channels to someplace
+ * else.  The chans field is a bitmask, (1 << channel) for each channel.
+ * It may be IPMI_CHAN_ALL for all channels.
+ */
+struct ipmi_cmdspec_chans {
+       unsigned int netfn;
+       unsigned int cmd;
+       unsigned int chans;
+};
+
+/*
+ * Register to receive a specific command on specific channels.  error values:
+ *   - EFAULT - an address supplied was invalid.
+ *   - EBUSY - One of the netfn/cmd/chans supplied was already in use.
+ *   - ENOMEM - could not allocate memory for the entry.
+ */
+#define IPMICTL_REGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 28,        \
+                                            struct ipmi_cmdspec_chans)
+/*
+ * Unregister some netfn/cmd/chans.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ *  - ENOENT - None of the netfn/cmd/chans were found registered for this user.
+ */
+#define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29,      \
+                                            struct ipmi_cmdspec_chans)
+
+/*
+ * Set whether this interface receives events.  Note that the first
+ * user registered for events will get all pending events for the
+ * interface.  error values:
+ *  - EFAULT - an address supplied was invalid.
+ */
+#define IPMICTL_SET_GETS_EVENTS_CMD    _IOR(IPMI_IOC_MAGIC, 16, int)
+
+/*
+ * Set and get the slave address and LUN that we will use for our
+ * source messages.  Note that this affects the interface, not just
+ * this user, so it will affect all users of this interface.  This is
+ * so some initialization code can come in and do the OEM-specific
+ * things it takes to determine your address (if not the BMC) and set
+ * it for everyone else.  You should probably leave the LUN alone.
+ */
+struct ipmi_channel_lun_address_set {
+       unsigned short channel;
+       unsigned char  value;
+};
+#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD \
+       _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD \
+       _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set)
+#define IPMICTL_SET_MY_CHANNEL_LUN_CMD \
+       _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_LUN_CMD \
+       _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set)
+/* Legacy interfaces, these only set IPMB 0. */
+#define IPMICTL_SET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 17, unsigned int)
+#define IPMICTL_GET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 18, unsigned int)
+#define IPMICTL_SET_MY_LUN_CMD         _IOR(IPMI_IOC_MAGIC, 19, unsigned int)
+#define IPMICTL_GET_MY_LUN_CMD         _IOR(IPMI_IOC_MAGIC, 20, unsigned int)
+
+/*
+ * Get/set the default timing values for an interface.  You shouldn't
+ * generally mess with these.
+ */
+struct ipmi_timing_parms {
+       int          retries;
+       unsigned int retry_time_ms;
+};
+#define IPMICTL_SET_TIMING_PARMS_CMD   _IOR(IPMI_IOC_MAGIC, 22, \
+                                            struct ipmi_timing_parms)
+#define IPMICTL_GET_TIMING_PARMS_CMD   _IOR(IPMI_IOC_MAGIC, 23, \
+                                            struct ipmi_timing_parms)
+
+/*
+ * Set the maintenance mode.  See ipmi_set_maintenance_mode() above
+ * for a description of what this does.
+ */
+#define IPMICTL_GET_MAINTENANCE_MODE_CMD       _IOR(IPMI_IOC_MAGIC, 30, int)
+#define IPMICTL_SET_MAINTENANCE_MODE_CMD       _IOW(IPMI_IOC_MAGIC, 31, int)
+
+#endif /* __LINUX_IPMI_H */
diff --git a/lib/libdss-include/linux/ipmi_msgdefs.h b/lib/libdss-include/linux/ipmi_msgdefs.h
new file mode 100644 (file)
index 0000000..df97e6e
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * ipmi_smi.h
+ *
+ * MontaVista IPMI system management interface
+ *
+ * Author: MontaVista Software, Inc.
+ *         Corey Minyard <minyard@mvista.com>
+ *         source@mvista.com
+ *
+ * Copyright 2002 MontaVista Software Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at your
+ *  option) any later version.
+ *
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __LINUX_IPMI_MSGDEFS_H
+#define __LINUX_IPMI_MSGDEFS_H
+
+/* Various definitions for IPMI messages used by almost everything in
+   the IPMI stack. */
+
+/* NetFNs and commands used inside the IPMI stack. */
+
+#define IPMI_NETFN_SENSOR_EVENT_REQUEST                0x04
+#define IPMI_NETFN_SENSOR_EVENT_RESPONSE       0x05
+#define IPMI_GET_EVENT_RECEIVER_CMD    0x01
+
+#define IPMI_NETFN_APP_REQUEST                 0x06
+#define IPMI_NETFN_APP_RESPONSE                        0x07
+#define IPMI_GET_DEVICE_ID_CMD         0x01
+#define IPMI_COLD_RESET_CMD            0x02
+#define IPMI_WARM_RESET_CMD            0x03
+#define IPMI_CLEAR_MSG_FLAGS_CMD       0x30
+#define IPMI_GET_DEVICE_GUID_CMD       0x08
+#define IPMI_GET_MSG_FLAGS_CMD         0x31
+#define IPMI_SEND_MSG_CMD              0x34
+#define IPMI_GET_MSG_CMD               0x33
+#define IPMI_SET_BMC_GLOBAL_ENABLES_CMD        0x2e
+#define IPMI_GET_BMC_GLOBAL_ENABLES_CMD        0x2f
+#define IPMI_READ_EVENT_MSG_BUFFER_CMD 0x35
+#define IPMI_GET_CHANNEL_INFO_CMD      0x42
+
+/* Bit for BMC global enables. */
+#define IPMI_BMC_RCV_MSG_INTR     0x01
+#define IPMI_BMC_EVT_MSG_INTR     0x02
+#define IPMI_BMC_EVT_MSG_BUFF     0x04
+#define IPMI_BMC_SYS_LOG          0x08
+
+#define IPMI_NETFN_STORAGE_REQUEST             0x0a
+#define IPMI_NETFN_STORAGE_RESPONSE            0x0b
+#define IPMI_ADD_SEL_ENTRY_CMD         0x44
+
+#define IPMI_NETFN_FIRMWARE_REQUEST            0x08
+#define IPMI_NETFN_FIRMWARE_RESPONSE           0x09
+
+/* The default slave address */
+#define IPMI_BMC_SLAVE_ADDR    0x20
+
+/* The BT interface on high-end HP systems supports up to 255 bytes in
+ * one transfer.  Its "virtual" BMC supports some commands that are longer
+ * than 128 bytes.  Use the full 256, plus NetFn/LUN, Cmd, cCode, plus
+ * some overhead; it's not worth the effort to dynamically size this based
+ * on the results of the "Get BT Capabilities" command. */
+#define IPMI_MAX_MSG_LENGTH    272     /* multiple of 16 */
+
+#define IPMI_CC_NO_ERROR               0x00
+#define IPMI_NODE_BUSY_ERR             0xc0
+#define IPMI_INVALID_COMMAND_ERR       0xc1
+#define IPMI_TIMEOUT_ERR               0xc3
+#define IPMI_ERR_MSG_TRUNCATED         0xc6
+#define IPMI_REQ_LEN_INVALID_ERR       0xc7
+#define IPMI_REQ_LEN_EXCEEDED_ERR      0xc8
+#define IPMI_NOT_IN_MY_STATE_ERR       0xd5    /* IPMI 2.0 */
+#define IPMI_LOST_ARBITRATION_ERR      0x81
+#define IPMI_BUS_ERR                   0x82
+#define IPMI_NAK_ON_WRITE_ERR          0x83
+#define IPMI_ERR_UNSPECIFIED           0xff
+
+#define IPMI_CHANNEL_PROTOCOL_IPMB     1
+#define IPMI_CHANNEL_PROTOCOL_ICMB     2
+#define IPMI_CHANNEL_PROTOCOL_SMBUS    4
+#define IPMI_CHANNEL_PROTOCOL_KCS      5
+#define IPMI_CHANNEL_PROTOCOL_SMIC     6
+#define IPMI_CHANNEL_PROTOCOL_BT10     7
+#define IPMI_CHANNEL_PROTOCOL_BT15     8
+#define IPMI_CHANNEL_PROTOCOL_TMODE    9
+
+#define IPMI_CHANNEL_MEDIUM_IPMB       1
+#define IPMI_CHANNEL_MEDIUM_ICMB10     2
+#define IPMI_CHANNEL_MEDIUM_ICMB09     3
+#define IPMI_CHANNEL_MEDIUM_8023LAN    4
+#define IPMI_CHANNEL_MEDIUM_ASYNC      5
+#define IPMI_CHANNEL_MEDIUM_OTHER_LAN  6
+#define IPMI_CHANNEL_MEDIUM_PCI_SMBUS  7
+#define IPMI_CHANNEL_MEDIUM_SMBUS1     8
+#define IPMI_CHANNEL_MEDIUM_SMBUS2     9
+#define IPMI_CHANNEL_MEDIUM_USB1       10
+#define IPMI_CHANNEL_MEDIUM_USB2       11
+#define IPMI_CHANNEL_MEDIUM_SYSINTF    12
+#define IPMI_CHANNEL_MEDIUM_OEM_MIN    0x60
+#define IPMI_CHANNEL_MEDIUM_OEM_MAX    0x7f
+
+#endif /* __LINUX_IPMI_MSGDEFS_H */
diff --git a/lib/libdss-include/linux/ipsec.h b/lib/libdss-include/linux/ipsec.h
new file mode 100644 (file)
index 0000000..d17a630
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef _LINUX_IPSEC_H
+#define _LINUX_IPSEC_H
+
+/* The definitions, required to talk to KAME racoon IKE. */
+
+#include <linux/pfkeyv2.h>
+
+#define IPSEC_PORT_ANY         0
+#define IPSEC_ULPROTO_ANY      255
+#define IPSEC_PROTO_ANY                255
+
+enum {
+       IPSEC_MODE_ANY          = 0,    /* We do not support this for SA */
+       IPSEC_MODE_TRANSPORT    = 1,
+       IPSEC_MODE_TUNNEL       = 2,
+       IPSEC_MODE_BEET         = 3
+};
+
+enum {
+       IPSEC_DIR_ANY           = 0,
+       IPSEC_DIR_INBOUND       = 1,
+       IPSEC_DIR_OUTBOUND      = 2,
+       IPSEC_DIR_FWD           = 3,    /* It is our own */
+       IPSEC_DIR_MAX           = 4,
+       IPSEC_DIR_INVALID       = 5
+};
+
+enum {
+       IPSEC_POLICY_DISCARD    = 0,
+       IPSEC_POLICY_NONE       = 1,
+       IPSEC_POLICY_IPSEC      = 2,
+       IPSEC_POLICY_ENTRUST    = 3,
+       IPSEC_POLICY_BYPASS     = 4
+};
+
+enum {
+       IPSEC_LEVEL_DEFAULT     = 0,
+       IPSEC_LEVEL_USE         = 1,
+       IPSEC_LEVEL_REQUIRE     = 2,
+       IPSEC_LEVEL_UNIQUE      = 3
+};
+
+#define IPSEC_MANUAL_REQID_MAX 0x3fff
+
+#define IPSEC_REPLAYWSIZE  32
+
+#endif /* _LINUX_IPSEC_H */
diff --git a/lib/libdss-include/linux/ipv6.h b/lib/libdss-include/linux/ipv6.h
new file mode 100644 (file)
index 0000000..561e954
--- /dev/null
@@ -0,0 +1,181 @@
+#ifndef _IPV6_H
+#define _IPV6_H
+
+#include <linux/libc-compat.h>
+#include <linux/types.h>
+#include <linux/in6.h>
+#include <asm/byteorder.h>
+
+/* The latest drafts declared increase in minimal mtu up to 1280. */
+
+#define IPV6_MIN_MTU   1280
+
+/*
+ *     Advanced API
+ *     source interface/address selection, source routing, etc...
+ *     *under construction*
+ */
+
+#if __UAPI_DEF_IN6_PKTINFO
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;
+       int             ipi6_ifindex;
+};
+#endif
+
+#if __UAPI_DEF_IP6_MTUINFO
+struct ip6_mtuinfo {
+       struct sockaddr_in6     ip6m_addr;
+       __u32                   ip6m_mtu;
+};
+#endif
+
+struct in6_ifreq {
+       struct in6_addr ifr6_addr;
+       __u32           ifr6_prefixlen;
+       int             ifr6_ifindex; 
+};
+
+#define IPV6_SRCRT_STRICT      0x01    /* Deprecated; will be removed */
+#define IPV6_SRCRT_TYPE_0      0       /* Deprecated; will be removed */
+#define IPV6_SRCRT_TYPE_2      2       /* IPv6 type 2 Routing Header   */
+
+/*
+ *     routing header
+ */
+struct ipv6_rt_hdr {
+       __u8            nexthdr;
+       __u8            hdrlen;
+       __u8            type;
+       __u8            segments_left;
+
+       /*
+        *      type specific data
+        *      variable length field
+        */
+};
+
+
+struct ipv6_opt_hdr {
+       __u8            nexthdr;
+       __u8            hdrlen;
+       /* 
+        * TLV encoded option data follows.
+        */
+} __attribute__((packed));     /* required for some archs */
+
+#define ipv6_destopt_hdr ipv6_opt_hdr
+#define ipv6_hopopt_hdr  ipv6_opt_hdr
+
+/* Router Alert option values (RFC2711) */
+#define IPV6_OPT_ROUTERALERT_MLD       0x0000  /* MLD(RFC2710) */
+
+/*
+ *     routing header type 0 (used in cmsghdr struct)
+ */
+
+struct rt0_hdr {
+       struct ipv6_rt_hdr      rt_hdr;
+       __u32                   reserved;
+       struct in6_addr         addr[0];
+
+#define rt0_type               rt_hdr.type
+};
+
+/*
+ *     routing header type 2
+ */
+
+struct rt2_hdr {
+       struct ipv6_rt_hdr      rt_hdr;
+       __u32                   reserved;
+       struct in6_addr         addr;
+
+#define rt2_type               rt_hdr.type
+};
+
+/*
+ *     home address option in destination options header
+ */
+
+struct ipv6_destopt_hao {
+       __u8                    type;
+       __u8                    length;
+       struct in6_addr         addr;
+} __attribute__((packed));
+
+/*
+ *     IPv6 fixed header
+ *
+ *     BEWARE, it is incorrect. The first 4 bits of flow_lbl
+ *     are glued to priority now, forming "class".
+ */
+
+struct ipv6hdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u8                    priority:4,
+                               version:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u8                    version:4,
+                               priority:4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+       __u8                    flow_lbl[3];
+
+       __be16                  payload_len;
+       __u8                    nexthdr;
+       __u8                    hop_limit;
+
+       struct  in6_addr        saddr;
+       struct  in6_addr        daddr;
+};
+
+
+/* index values for the variables in ipv6_devconf */
+enum {
+       DEVCONF_FORWARDING = 0,
+       DEVCONF_HOPLIMIT,
+       DEVCONF_MTU6,
+       DEVCONF_ACCEPT_RA,
+       DEVCONF_ACCEPT_REDIRECTS,
+       DEVCONF_AUTOCONF,
+       DEVCONF_DAD_TRANSMITS,
+       DEVCONF_RTR_SOLICITS,
+       DEVCONF_RTR_SOLICIT_INTERVAL,
+       DEVCONF_RTR_SOLICIT_DELAY,
+       DEVCONF_USE_TEMPADDR,
+       DEVCONF_TEMP_VALID_LFT,
+       DEVCONF_TEMP_PREFERED_LFT,
+       DEVCONF_REGEN_MAX_RETRY,
+       DEVCONF_MAX_DESYNC_FACTOR,
+       DEVCONF_MAX_ADDRESSES,
+       DEVCONF_FORCE_MLD_VERSION,
+       DEVCONF_ACCEPT_RA_DEFRTR,
+       DEVCONF_ACCEPT_RA_PINFO,
+       DEVCONF_ACCEPT_RA_RTR_PREF,
+       DEVCONF_RTR_PROBE_INTERVAL,
+       DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
+       DEVCONF_PROXY_NDP,
+       DEVCONF_OPTIMISTIC_DAD,
+       DEVCONF_ACCEPT_SOURCE_ROUTE,
+       DEVCONF_MC_FORWARDING,
+       DEVCONF_DISABLE_IPV6,
+       DEVCONF_ACCEPT_DAD,
+       DEVCONF_FORCE_TLLAO,
+       DEVCONF_NDISC_NOTIFY,
+       DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
+       DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
+       DEVCONF_SUPPRESS_FRAG_NDISC,
+       DEVCONF_ACCEPT_RA_FROM_LOCAL,
+       DEVCONF_USE_OPTIMISTIC,
+       DEVCONF_ACCEPT_RA_MTU,
+       DEVCONF_STABLE_SECRET,
+       DEVCONF_USE_OIF_ADDRS_ONLY,
+       DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
+       DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       DEVCONF_MAX
+};
+
+
+#endif /* _IPV6_H */
diff --git a/lib/libdss-include/linux/ipv6_route.h b/lib/libdss-include/linux/ipv6_route.h
new file mode 100644 (file)
index 0000000..091a466
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ *     Linux INET6 implementation 
+ *
+ *     Authors:
+ *     Pedro Roque             <roque@di.fc.ul.pt>     
+ *
+ *     This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_IPV6_ROUTE_H
+#define _LINUX_IPV6_ROUTE_H
+
+#include <linux/types.h>
+
+#define RTF_DEFAULT    0x00010000      /* default - learned via ND     */
+#define RTF_ALLONLINK  0x00020000      /* (deprecated and will be removed)
+                                          fallback, no routers on link */
+#define RTF_ADDRCONF   0x00040000      /* addrconf route - RA          */
+#define RTF_PREFIX_RT  0x00080000      /* A prefix only route - RA     */
+#define RTF_ANYCAST    0x00100000      /* Anycast                      */
+
+#define RTF_NONEXTHOP  0x00200000      /* route with no nexthop        */
+#define RTF_EXPIRES    0x00400000
+
+#define RTF_ROUTEINFO  0x00800000      /* route information - RA       */
+
+#define RTF_CACHE      0x01000000      /* cache entry                  */
+#define RTF_FLOW       0x02000000      /* flow significant route       */
+#define RTF_POLICY     0x04000000      /* policy route                 */
+
+#define RTF_PREF(pref) ((pref) << 27)
+#define RTF_PREF_MASK  0x18000000
+
+#define RTF_PCPU       0x40000000
+#define RTF_LOCAL      0x80000000
+
+
+struct in6_rtmsg {
+       struct in6_addr         rtmsg_dst;
+       struct in6_addr         rtmsg_src;
+       struct in6_addr         rtmsg_gateway;
+       __u32                   rtmsg_type;
+       __u16                   rtmsg_dst_len;
+       __u16                   rtmsg_src_len;
+       __u32                   rtmsg_metric;
+       unsigned long           rtmsg_info;
+        __u32                  rtmsg_flags;
+       int                     rtmsg_ifindex;
+};
+
+#define RTMSG_NEWDEVICE                0x11
+#define RTMSG_DELDEVICE                0x12
+#define RTMSG_NEWROUTE         0x21
+#define RTMSG_DELROUTE         0x22
+
+#define IP6_RT_PRIO_USER       1024
+#define IP6_RT_PRIO_ADDRCONF   256
+
+#endif /* _LINUX_IPV6_ROUTE_H */
diff --git a/lib/libdss-include/linux/ipx.h b/lib/libdss-include/linux/ipx.h
new file mode 100644 (file)
index 0000000..3d48014
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _IPX_H_
+#define _IPX_H_
+#include <linux/types.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#define IPX_NODE_LEN   6
+#define IPX_MTU                576
+
+struct sockaddr_ipx {
+       __kernel_sa_family_t sipx_family;
+       __be16          sipx_port;
+       __be32          sipx_network;
+       unsigned char   sipx_node[IPX_NODE_LEN];
+       __u8            sipx_type;
+       unsigned char   sipx_zero;      /* 16 byte fill */
+};
+
+/*
+ * So we can fit the extra info for SIOCSIFADDR into the address nicely
+ */
+#define sipx_special   sipx_port
+#define sipx_action    sipx_zero
+#define IPX_DLTITF     0
+#define IPX_CRTITF     1
+
+struct ipx_route_definition {
+       __be32        ipx_network;
+       __be32        ipx_router_network;
+       unsigned char ipx_router_node[IPX_NODE_LEN];
+};
+
+struct ipx_interface_definition {
+       __be32        ipx_network;
+       unsigned char ipx_device[16];
+       unsigned char ipx_dlink_type;
+#define IPX_FRAME_NONE         0
+#define IPX_FRAME_SNAP         1
+#define IPX_FRAME_8022         2
+#define IPX_FRAME_ETHERII      3
+#define IPX_FRAME_8023         4
+#define IPX_FRAME_TR_8022       5 /* obsolete */
+       unsigned char ipx_special;
+#define IPX_SPECIAL_NONE       0
+#define IPX_PRIMARY            1
+#define IPX_INTERNAL           2
+       unsigned char ipx_node[IPX_NODE_LEN];
+};
+       
+struct ipx_config_data {
+       unsigned char   ipxcfg_auto_select_primary;
+       unsigned char   ipxcfg_auto_create_interfaces;
+};
+
+/*
+ * OLD Route Definition for backward compatibility.
+ */
+
+struct ipx_route_def {
+       __be32          ipx_network;
+       __be32          ipx_router_network;
+#define IPX_ROUTE_NO_ROUTER    0
+       unsigned char   ipx_router_node[IPX_NODE_LEN];
+       unsigned char   ipx_device[16];
+       unsigned short  ipx_flags;
+#define IPX_RT_SNAP            8
+#define IPX_RT_8022            4
+#define IPX_RT_BLUEBOOK                2
+#define IPX_RT_ROUTED          1
+};
+
+#define SIOCAIPXITFCRT         (SIOCPROTOPRIVATE)
+#define SIOCAIPXPRISLT         (SIOCPROTOPRIVATE + 1)
+#define SIOCIPXCFGDATA         (SIOCPROTOPRIVATE + 2)
+#define SIOCIPXNCPCONN         (SIOCPROTOPRIVATE + 3)
+#endif /* _IPX_H_ */
diff --git a/lib/libdss-include/linux/irda.h b/lib/libdss-include/linux/irda.h
new file mode 100644 (file)
index 0000000..a014c32
--- /dev/null
@@ -0,0 +1,251 @@
+/*********************************************************************
+ *                
+ * Filename:      irda.h
+ * Version:       
+ * Description:   
+ * Status:        Experimental.
+ * Author:        Dag Brattli <dagb@cs.uit.no>
+ * Created at:    Mon Mar  8 14:06:12 1999
+ * Modified at:   Sat Dec 25 16:06:42 1999
+ * Modified by:   Dag Brattli <dagb@cs.uit.no>
+ * 
+ *     Copyright (c) 1999 Dag Brattli, All Rights Reserved.
+ *      
+ *     This program is free software; you can redistribute it and/or 
+ *     modify it under the terms of the GNU General Public License as 
+ *     published by the Free Software Foundation; either version 2 of 
+ *     the License, or (at your option) any later version.
+ *  
+ *     Neither Dag Brattli nor University of Tromsø admit liability nor
+ *     provide warranty for any of this software. This material is 
+ *     provided "AS-IS" and at no charge.
+ *
+ ********************************************************************/
+
+#ifndef KERNEL_IRDA_H
+#define KERNEL_IRDA_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* Note that this file is shared with user space. */
+
+/* Hint bit positions for first hint byte */
+#define HINT_PNP         0x01
+#define HINT_PDA         0x02
+#define HINT_COMPUTER    0x04
+#define HINT_PRINTER     0x08
+#define HINT_MODEM       0x10
+#define HINT_FAX         0x20
+#define HINT_LAN         0x40
+#define HINT_EXTENSION   0x80
+
+/* Hint bit positions for second hint byte (first extension byte) */
+#define HINT_TELEPHONY   0x01
+#define HINT_FILE_SERVER 0x02
+#define HINT_COMM        0x04
+#define HINT_MESSAGE     0x08
+#define HINT_HTTP        0x10
+#define HINT_OBEX        0x20
+
+/* IrLMP character code values */
+#define CS_ASCII         0x00
+#define        CS_ISO_8859_1    0x01
+#define        CS_ISO_8859_2    0x02
+#define        CS_ISO_8859_3    0x03
+#define        CS_ISO_8859_4    0x04
+#define        CS_ISO_8859_5    0x05
+#define        CS_ISO_8859_6    0x06
+#define        CS_ISO_8859_7    0x07
+#define        CS_ISO_8859_8    0x08
+#define        CS_ISO_8859_9    0x09
+#define CS_UNICODE       0xff
+
+/* These are the currently known dongles */
+typedef enum {
+       IRDA_TEKRAM_DONGLE       = 0,
+       IRDA_ESI_DONGLE          = 1,
+       IRDA_ACTISYS_DONGLE      = 2,
+       IRDA_ACTISYS_PLUS_DONGLE = 3,
+       IRDA_GIRBIL_DONGLE       = 4,
+       IRDA_LITELINK_DONGLE     = 5,
+       IRDA_AIRPORT_DONGLE      = 6,
+       IRDA_OLD_BELKIN_DONGLE   = 7,
+       IRDA_EP7211_IR           = 8,
+       IRDA_MCP2120_DONGLE      = 9,
+       IRDA_ACT200L_DONGLE      = 10,
+       IRDA_MA600_DONGLE        = 11,
+       IRDA_TOIM3232_DONGLE     = 12,
+       IRDA_EP7211_DONGLE       = 13,
+} IRDA_DONGLE;
+
+/* Protocol types to be used for SOCK_DGRAM */
+enum {
+       IRDAPROTO_UNITDATA = 0,
+       IRDAPROTO_ULTRA    = 1,
+       IRDAPROTO_MAX
+};
+
+#define SOL_IRLMP      266 /* Same as SOL_IRDA for now */
+#define SOL_IRTTP      266 /* Same as SOL_IRDA for now */
+
+#define IRLMP_ENUMDEVICES        1     /* Return discovery log */
+#define IRLMP_IAS_SET            2     /* Set an attribute in local IAS */
+#define IRLMP_IAS_QUERY          3     /* Query remote IAS for attribute */
+#define IRLMP_HINTS_SET          4     /* Set hint bits advertised */
+#define IRLMP_QOS_SET            5
+#define IRLMP_QOS_GET            6
+#define IRLMP_MAX_SDU_SIZE       7
+#define IRLMP_IAS_GET            8     /* Get an attribute from local IAS */
+#define IRLMP_IAS_DEL           9      /* Remove attribute from local IAS */
+#define IRLMP_HINT_MASK_SET    10      /* Set discovery filter */
+#define IRLMP_WAITDEVICE       11      /* Wait for a new discovery */
+
+#define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE /* Compatibility */
+
+#define IAS_MAX_STRING         256     /* See IrLMP 1.1, 4.3.3.2 */
+#define IAS_MAX_OCTET_STRING  1024     /* See IrLMP 1.1, 4.3.3.2 */
+#define IAS_MAX_CLASSNAME       60     /* See IrLMP 1.1, 4.3.1 */
+#define IAS_MAX_ATTRIBNAME      60     /* See IrLMP 1.1, 4.3.3.1 */
+#define IAS_MAX_ATTRIBNUMBER   256     /* See IrLMP 1.1, 4.3.3.1 */
+/* For user space backward compatibility - may be fixed in kernel 2.5.X
+ * Note : need 60+1 ('\0'), make it 64 for alignement - Jean II */
+#define IAS_EXPORT_CLASSNAME       64
+#define IAS_EXPORT_ATTRIBNAME     256
+
+/* Attribute type needed for struct irda_ias_set */
+#define IAS_MISSING 0
+#define IAS_INTEGER 1
+#define IAS_OCT_SEQ 2
+#define IAS_STRING  3
+
+#define LSAP_ANY              0xff
+
+struct sockaddr_irda {
+       __kernel_sa_family_t sir_family; /* AF_IRDA */
+       __u8        sir_lsap_sel; /* LSAP selector */
+       __u32       sir_addr;     /* Device address */
+       char        sir_name[25]; /* Usually <service>:IrDA:TinyTP */
+};
+
+struct irda_device_info {
+       __u32       saddr;    /* Address of local interface */
+       __u32       daddr;    /* Address of remote device */
+       char        info[22]; /* Description */
+       __u8        charset;  /* Charset used for description */
+       __u8        hints[2]; /* Hint bits */
+};
+
+struct irda_device_list {
+       __u32 len;
+       struct irda_device_info dev[1];
+};
+
+struct irda_ias_set {
+       char irda_class_name[IAS_EXPORT_CLASSNAME];
+       char irda_attrib_name[IAS_EXPORT_ATTRIBNAME];
+       unsigned int irda_attrib_type;
+       union {
+               unsigned int irda_attrib_int;
+               struct {
+                       unsigned short len;
+                       __u8 octet_seq[IAS_MAX_OCTET_STRING];
+               } irda_attrib_octet_seq;
+               struct {
+                       __u8 len;
+                       __u8 charset;
+                       __u8 string[IAS_MAX_STRING];
+               } irda_attrib_string;
+       } attribute;
+       __u32       daddr;    /* Address of device (for some queries only) */
+};
+
+/* Some private IOCTL's (max 16) */
+#define SIOCSDONGLE    (SIOCDEVPRIVATE + 0)
+#define SIOCGDONGLE    (SIOCDEVPRIVATE + 1)
+#define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2)
+#define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3)
+#define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4)
+#define SIOCGRECEIVING (SIOCDEVPRIVATE + 5)
+#define SIOCSMODE      (SIOCDEVPRIVATE + 6)
+#define SIOCGMODE      (SIOCDEVPRIVATE + 7)
+#define SIOCSDTRRTS    (SIOCDEVPRIVATE + 8)
+#define SIOCGQOS       (SIOCDEVPRIVATE + 9)
+
+/* No reason to include <linux/if.h> just because of this one ;-) */
+#define IRNAMSIZ 16 
+
+/* IrDA quality of service information (must not exceed 16 bytes) */
+struct if_irda_qos {
+       unsigned long  baudrate;
+       unsigned short data_size;
+       unsigned short window_size;
+       unsigned short min_turn_time;
+       unsigned short max_turn_time;
+       unsigned char  add_bofs;
+       unsigned char  link_disc;
+};
+
+/* For setting RTS and DTR lines of a dongle */
+struct if_irda_line {
+       __u8 dtr;
+       __u8 rts;
+};
+
+/* IrDA interface configuration (data part must not exceed 16 bytes) */
+struct if_irda_req {
+       union {
+               char ifrn_name[IRNAMSIZ];  /* if name, e.g. "irda0" */
+       } ifr_ifrn;
+       
+       /* Data part */
+       union {
+               struct if_irda_line ifru_line;
+               struct if_irda_qos  ifru_qos;
+               unsigned short      ifru_flags;
+               unsigned int        ifru_receiving;
+               unsigned int        ifru_mode;
+               unsigned int        ifru_dongle;
+       } ifr_ifru;
+};
+
+#define ifr_baudrate  ifr_ifru.ifru_qos.baudrate
+#define ifr_receiving ifr_ifru.ifru_receiving 
+#define ifr_dongle    ifr_ifru.ifru_dongle
+#define ifr_mode      ifr_ifru.ifru_mode
+#define ifr_dtr       ifr_ifru.ifru_line.dtr
+#define ifr_rts       ifr_ifru.ifru_line.rts
+
+
+/* IrDA netlink definitions */
+#define IRDA_NL_NAME "irda"
+#define IRDA_NL_VERSION 1
+
+enum irda_nl_commands {
+       IRDA_NL_CMD_UNSPEC,
+       IRDA_NL_CMD_SET_MODE,
+       IRDA_NL_CMD_GET_MODE,
+
+       __IRDA_NL_CMD_AFTER_LAST
+};
+#define IRDA_NL_CMD_MAX (__IRDA_NL_CMD_AFTER_LAST - 1)
+
+enum nl80211_attrs {
+       IRDA_NL_ATTR_UNSPEC,
+       IRDA_NL_ATTR_IFNAME,
+       IRDA_NL_ATTR_MODE,
+
+       __IRDA_NL_ATTR_AFTER_LAST
+};
+#define IRDA_NL_ATTR_MAX (__IRDA_NL_ATTR_AFTER_LAST - 1)
+
+/* IrDA modes */
+#define IRDA_MODE_PRIMARY   0x1
+#define IRDA_MODE_SECONDARY 0x2
+#define IRDA_MODE_MONITOR   0x4
+
+#endif /* KERNEL_IRDA_H */
+
+
+
+
diff --git a/lib/libdss-include/linux/irqnr.h b/lib/libdss-include/linux/irqnr.h
new file mode 100644 (file)
index 0000000..ae5704f
--- /dev/null
@@ -0,0 +1,4 @@
+/*
+ * There isn't anything here anymore, but the file must not be empty or patch
+ * will delete it.
+ */
diff --git a/lib/libdss-include/linux/isdn.h b/lib/libdss-include/linux/isdn.h
new file mode 100644 (file)
index 0000000..55c0a1e
--- /dev/null
@@ -0,0 +1,143 @@
+/* $Id: isdn.h,v 1.125.2.3 2004/02/10 01:07:14 keil Exp $
+ *
+ * Main header for the Linux ISDN subsystem (linklevel).
+ *
+ * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    by Thinking Objects Software GmbH Wuerzburg
+ * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __ISDN_H__
+#define __ISDN_H__
+
+#include <linux/ioctl.h>
+#include <linux/tty.h>
+
+#define ISDN_MAX_DRIVERS    32
+#define ISDN_MAX_CHANNELS   64
+
+/* New ioctl-codes */
+#define IIOCNETAIF  _IO('I',1)
+#define IIOCNETDIF  _IO('I',2)
+#define IIOCNETSCF  _IO('I',3)
+#define IIOCNETGCF  _IO('I',4)
+#define IIOCNETANM  _IO('I',5)
+#define IIOCNETDNM  _IO('I',6)
+#define IIOCNETGNM  _IO('I',7)
+#define IIOCGETSET  _IO('I',8) /* no longer supported */
+#define IIOCSETSET  _IO('I',9) /* no longer supported */
+#define IIOCSETVER  _IO('I',10)
+#define IIOCNETHUP  _IO('I',11)
+#define IIOCSETGST  _IO('I',12)
+#define IIOCSETBRJ  _IO('I',13)
+#define IIOCSIGPRF  _IO('I',14)
+#define IIOCGETPRF  _IO('I',15)
+#define IIOCSETPRF  _IO('I',16)
+#define IIOCGETMAP  _IO('I',17)
+#define IIOCSETMAP  _IO('I',18)
+#define IIOCNETASL  _IO('I',19)
+#define IIOCNETDIL  _IO('I',20)
+#define IIOCGETCPS  _IO('I',21)
+#define IIOCGETDVR  _IO('I',22)
+#define IIOCNETLCR  _IO('I',23) /* dwabc ioctl for LCR from isdnlog */
+#define IIOCNETDWRSET  _IO('I',24) /* dwabc ioctl to reset abc-values to default on a net-interface */
+
+#define IIOCNETALN  _IO('I',32)
+#define IIOCNETDLN  _IO('I',33)
+
+#define IIOCNETGPN  _IO('I',34)
+
+#define IIOCDBGVAR  _IO('I',127)
+
+#define IIOCDRVCTL  _IO('I',128)
+
+/* cisco hdlck device private ioctls */
+#define SIOCGKEEPPERIOD        (SIOCDEVPRIVATE + 0)
+#define SIOCSKEEPPERIOD        (SIOCDEVPRIVATE + 1)
+#define SIOCGDEBSERINT (SIOCDEVPRIVATE + 2)
+#define SIOCSDEBSERINT (SIOCDEVPRIVATE + 3)
+
+/* Packet encapsulations for net-interfaces */
+#define ISDN_NET_ENCAP_ETHER      0
+#define ISDN_NET_ENCAP_RAWIP      1
+#define ISDN_NET_ENCAP_IPTYP      2
+#define ISDN_NET_ENCAP_CISCOHDLC  3 /* Without SLARP and keepalive */
+#define ISDN_NET_ENCAP_SYNCPPP    4
+#define ISDN_NET_ENCAP_UIHDLC     5
+#define ISDN_NET_ENCAP_CISCOHDLCK 6 /* With SLARP and keepalive    */
+#define ISDN_NET_ENCAP_X25IFACE   7 /* Documentation/networking/x25-iface.txt */
+#define ISDN_NET_ENCAP_MAX_ENCAP  ISDN_NET_ENCAP_X25IFACE
+
+/* Facility which currently uses an ISDN-channel */
+#define ISDN_USAGE_NONE       0
+#define ISDN_USAGE_RAW        1
+#define ISDN_USAGE_MODEM      2
+#define ISDN_USAGE_NET        3
+#define ISDN_USAGE_VOICE      4
+#define ISDN_USAGE_FAX        5
+#define ISDN_USAGE_MASK       7 /* Mask to get plain usage */
+#define ISDN_USAGE_DISABLED  32 /* This bit is set, if channel is disabled */
+#define ISDN_USAGE_EXCLUSIVE 64 /* This bit is set, if channel is exclusive */
+#define ISDN_USAGE_OUTGOING 128 /* This bit is set, if channel is outgoing  */
+
+#define ISDN_MODEM_NUMREG    24        /* Number of Modem-Registers        */
+#define ISDN_LMSNLEN         255 /* Length of tty's Listen-MSN string */
+#define ISDN_CMSGLEN        50  /* Length of CONNECT-Message to add for Modem */
+
+#define ISDN_MSNLEN          32
+#define NET_DV 0x06  /* Data version for isdn_net_ioctl_cfg   */
+#define TTY_DV 0x06  /* Data version for iprofd etc.          */
+
+#define INF_DV 0x01  /* Data version for /dev/isdninfo        */
+
+typedef struct {
+  char drvid[25];
+  unsigned long arg;
+} isdn_ioctl_struct;
+
+typedef struct {
+  char name[10];
+  char phone[ISDN_MSNLEN];
+  int  outgoing;
+} isdn_net_ioctl_phone;
+
+typedef struct {
+  char name[10];     /* Name of interface                     */
+  char master[10];   /* Name of Master for Bundling           */
+  char slave[10];    /* Name of Slave for Bundling            */
+  char eaz[256];     /* EAZ/MSN                               */
+  char drvid[25];    /* DriverId for Bindings                 */
+  int  onhtime;      /* Hangup-Timeout                        */
+  int  charge;       /* Charge-Units                          */
+  int  l2_proto;     /* Layer-2 protocol                      */
+  int  l3_proto;     /* Layer-3 protocol                      */
+  int  p_encap;      /* Encapsulation                         */
+  int  exclusive;    /* Channel, if bound exclusive           */
+  int  dialmax;      /* Dial Retry-Counter                    */
+  int  slavedelay;   /* Delay until slave starts up           */
+  int  cbdelay;      /* Delay before Callback                 */
+  int  chargehup;    /* Flag: Charge-Hangup                   */
+  int  ihup;         /* Flag: Hangup-Timeout on incoming line */
+  int  secure;       /* Flag: Secure                          */
+  int  callback;     /* Flag: Callback                        */
+  int  cbhup;        /* Flag: Reject Call before Callback     */
+  int  pppbind;      /* ippp device for bindings              */
+  int  chargeint;    /* Use fixed charge interval length      */
+  int  triggercps;   /* BogoCPS needed for triggering slave   */
+  int  dialtimeout;  /* Dial-Timeout                          */
+  int  dialwait;     /* Time to wait after failed dial        */
+  int  dialmode;     /* Flag: off / on / auto                 */
+} isdn_net_ioctl_cfg;
+
+#define ISDN_NET_DIALMODE_MASK  0xC0    /* bits for status                */
+#define ISDN_NET_DM_OFF                0x00    /* this interface is stopped      */
+#define ISDN_NET_DM_MANUAL     0x40    /* this interface is on (manual)  */
+#define ISDN_NET_DM_AUTO       0x80    /* this interface is autodial     */
+#define ISDN_NET_DIALMODE(x) ((&(x))->flags & ISDN_NET_DIALMODE_MASK)
+
+
+#endif /* __ISDN_H__ */
diff --git a/lib/libdss-include/linux/isdn/capicmd.h b/lib/libdss-include/linux/isdn/capicmd.h
new file mode 100644 (file)
index 0000000..b58635f
--- /dev/null
@@ -0,0 +1,115 @@
+/* $Id: capicmd.h,v 1.2.6.2 2001/09/23 22:24:33 kai Exp $
+ * 
+ * CAPI 2.0 Interface for Linux
+ * 
+ * Copyright 1997 by Carsten Paeth <calle@calle.de>
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __CAPICMD_H__
+#define __CAPICMD_H__
+
+#define CAPI_MSG_BASELEN               8
+#define CAPI_DATA_B3_REQ_LEN           (CAPI_MSG_BASELEN+4+4+2+2+2)
+#define CAPI_DATA_B3_RESP_LEN          (CAPI_MSG_BASELEN+4+2)
+
+/*----- CAPI commands -----*/
+#define CAPI_ALERT                 0x01
+#define CAPI_CONNECT               0x02
+#define CAPI_CONNECT_ACTIVE        0x03
+#define CAPI_CONNECT_B3_ACTIVE     0x83
+#define CAPI_CONNECT_B3            0x82
+#define CAPI_CONNECT_B3_T90_ACTIVE  0x88
+#define CAPI_DATA_B3               0x86
+#define CAPI_DISCONNECT_B3         0x84
+#define CAPI_DISCONNECT            0x04
+#define CAPI_FACILITY              0x80
+#define CAPI_INFO                  0x08
+#define CAPI_LISTEN                0x05
+#define CAPI_MANUFACTURER          0xff
+#define CAPI_RESET_B3              0x87
+#define CAPI_SELECT_B_PROTOCOL     0x41
+
+/*----- CAPI subcommands -----*/
+
+#define CAPI_REQ    0x80
+#define CAPI_CONF   0x81
+#define CAPI_IND    0x82
+#define CAPI_RESP   0x83
+
+/*----- CAPI combined commands -----*/
+
+#define CAPICMD(cmd,subcmd)    (((cmd)<<8)|(subcmd))
+
+#define CAPI_DISCONNECT_REQ            CAPICMD(CAPI_DISCONNECT,CAPI_REQ)
+#define CAPI_DISCONNECT_CONF           CAPICMD(CAPI_DISCONNECT,CAPI_CONF)
+#define CAPI_DISCONNECT_IND            CAPICMD(CAPI_DISCONNECT,CAPI_IND)
+#define CAPI_DISCONNECT_RESP           CAPICMD(CAPI_DISCONNECT,CAPI_RESP)
+
+#define CAPI_ALERT_REQ                 CAPICMD(CAPI_ALERT,CAPI_REQ)
+#define CAPI_ALERT_CONF                        CAPICMD(CAPI_ALERT,CAPI_CONF)
+
+#define CAPI_CONNECT_REQ               CAPICMD(CAPI_CONNECT,CAPI_REQ)
+#define CAPI_CONNECT_CONF              CAPICMD(CAPI_CONNECT,CAPI_CONF)
+#define CAPI_CONNECT_IND               CAPICMD(CAPI_CONNECT,CAPI_IND)
+#define CAPI_CONNECT_RESP              CAPICMD(CAPI_CONNECT,CAPI_RESP)
+
+#define CAPI_CONNECT_ACTIVE_REQ                CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_REQ)
+#define CAPI_CONNECT_ACTIVE_CONF       CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_CONF)
+#define CAPI_CONNECT_ACTIVE_IND                CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_ACTIVE_RESP       CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_RESP)
+
+#define CAPI_SELECT_B_PROTOCOL_REQ     CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_REQ)
+#define CAPI_SELECT_B_PROTOCOL_CONF    CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_CONF)
+
+#define CAPI_CONNECT_B3_ACTIVE_REQ     CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_REQ)
+#define CAPI_CONNECT_B3_ACTIVE_CONF    CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_CONF)
+#define CAPI_CONNECT_B3_ACTIVE_IND     CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_B3_ACTIVE_RESP    CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_RESP)
+
+#define CAPI_CONNECT_B3_REQ            CAPICMD(CAPI_CONNECT_B3,CAPI_REQ)
+#define CAPI_CONNECT_B3_CONF           CAPICMD(CAPI_CONNECT_B3,CAPI_CONF)
+#define CAPI_CONNECT_B3_IND            CAPICMD(CAPI_CONNECT_B3,CAPI_IND)
+#define CAPI_CONNECT_B3_RESP           CAPICMD(CAPI_CONNECT_B3,CAPI_RESP)
+
+
+#define CAPI_CONNECT_B3_T90_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_IND)
+#define CAPI_CONNECT_B3_T90_ACTIVE_RESP        CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_RESP)
+
+#define CAPI_DATA_B3_REQ               CAPICMD(CAPI_DATA_B3,CAPI_REQ)
+#define CAPI_DATA_B3_CONF              CAPICMD(CAPI_DATA_B3,CAPI_CONF)
+#define CAPI_DATA_B3_IND               CAPICMD(CAPI_DATA_B3,CAPI_IND)
+#define CAPI_DATA_B3_RESP              CAPICMD(CAPI_DATA_B3,CAPI_RESP)
+
+#define CAPI_DISCONNECT_B3_REQ         CAPICMD(CAPI_DISCONNECT_B3,CAPI_REQ)
+#define CAPI_DISCONNECT_B3_CONF                CAPICMD(CAPI_DISCONNECT_B3,CAPI_CONF)
+#define CAPI_DISCONNECT_B3_IND         CAPICMD(CAPI_DISCONNECT_B3,CAPI_IND)
+#define CAPI_DISCONNECT_B3_RESP                CAPICMD(CAPI_DISCONNECT_B3,CAPI_RESP)
+
+#define CAPI_RESET_B3_REQ              CAPICMD(CAPI_RESET_B3,CAPI_REQ)
+#define CAPI_RESET_B3_CONF             CAPICMD(CAPI_RESET_B3,CAPI_CONF)
+#define CAPI_RESET_B3_IND              CAPICMD(CAPI_RESET_B3,CAPI_IND)
+#define CAPI_RESET_B3_RESP             CAPICMD(CAPI_RESET_B3,CAPI_RESP)
+
+#define CAPI_LISTEN_REQ                        CAPICMD(CAPI_LISTEN,CAPI_REQ)
+#define CAPI_LISTEN_CONF               CAPICMD(CAPI_LISTEN,CAPI_CONF)
+
+#define CAPI_MANUFACTURER_REQ          CAPICMD(CAPI_MANUFACTURER,CAPI_REQ)
+#define CAPI_MANUFACTURER_CONF         CAPICMD(CAPI_MANUFACTURER,CAPI_CONF)
+#define CAPI_MANUFACTURER_IND          CAPICMD(CAPI_MANUFACTURER,CAPI_IND)
+#define CAPI_MANUFACTURER_RESP         CAPICMD(CAPI_MANUFACTURER,CAPI_RESP)
+
+#define CAPI_FACILITY_REQ              CAPICMD(CAPI_FACILITY,CAPI_REQ)
+#define CAPI_FACILITY_CONF             CAPICMD(CAPI_FACILITY,CAPI_CONF)
+#define CAPI_FACILITY_IND              CAPICMD(CAPI_FACILITY,CAPI_IND)
+#define CAPI_FACILITY_RESP             CAPICMD(CAPI_FACILITY,CAPI_RESP)
+
+#define CAPI_INFO_REQ                  CAPICMD(CAPI_INFO,CAPI_REQ)
+#define CAPI_INFO_CONF                 CAPICMD(CAPI_INFO,CAPI_CONF)
+#define CAPI_INFO_IND                  CAPICMD(CAPI_INFO,CAPI_IND)
+#define CAPI_INFO_RESP                 CAPICMD(CAPI_INFO,CAPI_RESP)
+
+#endif                         /* __CAPICMD_H__ */
diff --git a/lib/libdss-include/linux/isdn_divertif.h b/lib/libdss-include/linux/isdn_divertif.h
new file mode 100644 (file)
index 0000000..67575ba
--- /dev/null
@@ -0,0 +1,30 @@
+/* $Id: isdn_divertif.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $
+ *
+ * Header for the diversion supplementary interface for i4l.
+ *
+ * Author    Werner Cornelius (werner@titro.de)
+ * Copyright by Werner Cornelius (werner@titro.de)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _LINUX_ISDN_DIVERTIF_H
+#define _LINUX_ISDN_DIVERTIF_H
+
+/***********************************************************/
+/* magic value is also used to control version information */
+/***********************************************************/
+#define DIVERT_IF_MAGIC 0x25873401
+#define DIVERT_CMD_REG  0x00  /* register command */
+#define DIVERT_CMD_REL  0x01  /* release command */
+#define DIVERT_NO_ERR   0x00  /* return value no error */
+#define DIVERT_CMD_ERR  0x01  /* invalid cmd */
+#define DIVERT_VER_ERR  0x02  /* magic/version invalid */
+#define DIVERT_REG_ERR  0x03  /* module already registered */
+#define DIVERT_REL_ERR  0x04  /* module not registered */
+#define DIVERT_REG_NAME isdn_register_divert
+
+
+#endif /* _LINUX_ISDN_DIVERTIF_H */
diff --git a/lib/libdss-include/linux/isdn_ppp.h b/lib/libdss-include/linux/isdn_ppp.h
new file mode 100644 (file)
index 0000000..aabb015
--- /dev/null
@@ -0,0 +1,67 @@
+/* Linux ISDN subsystem, sync PPP, interface to ipppd
+ *
+ * Copyright 1994-1999  by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg
+ * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
+ * Copyright 2000-2002  by Kai Germaschewski (kai@germaschewski.name)
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef _LINUX_ISDN_PPP_H
+#define _LINUX_ISDN_PPP_H
+
+#define CALLTYPE_INCOMING 0x1
+#define CALLTYPE_OUTGOING 0x2
+#define CALLTYPE_CALLBACK 0x4
+
+#define IPPP_VERSION    "2.2.0"
+
+struct pppcallinfo
+{
+  int calltype;
+  unsigned char local_num[64];
+  unsigned char remote_num[64];
+  int charge_units;
+};
+
+#define PPPIOCGCALLINFO _IOWR('t',128,struct pppcallinfo)
+#define PPPIOCBUNDLE   _IOW('t',129,int)
+#define PPPIOCGMPFLAGS _IOR('t',130,int)
+#define PPPIOCSMPFLAGS _IOW('t',131,int)
+#define PPPIOCSMPMTU   _IOW('t',132,int)
+#define PPPIOCSMPMRU   _IOW('t',133,int)
+#define PPPIOCGCOMPRESSORS _IOR('t',134,unsigned long [8])
+#define PPPIOCSCOMPRESSOR _IOW('t',135,int)
+#define PPPIOCGIFNAME      _IOR('t',136, char [IFNAMSIZ] )
+
+
+#define SC_MP_PROT       0x00000200
+#define SC_REJ_MP_PROT   0x00000400
+#define SC_OUT_SHORT_SEQ 0x00000800
+#define SC_IN_SHORT_SEQ  0x00004000
+
+#define SC_DECOMP_ON           0x01
+#define SC_COMP_ON             0x02
+#define SC_DECOMP_DISCARD      0x04
+#define SC_COMP_DISCARD                0x08
+#define SC_LINK_DECOMP_ON      0x10
+#define SC_LINK_COMP_ON                0x20
+#define SC_LINK_DECOMP_DISCARD 0x40
+#define SC_LINK_COMP_DISCARD   0x80
+
+#define ISDN_PPP_COMP_MAX_OPTIONS 16
+
+#define IPPP_COMP_FLAG_XMIT 0x1
+#define IPPP_COMP_FLAG_LINK 0x2
+
+struct isdn_ppp_comp_data {
+  int num;
+  unsigned char options[ISDN_PPP_COMP_MAX_OPTIONS];
+  int optlen;
+  int flags;
+};
+
+#endif /* _LINUX_ISDN_PPP_H */
diff --git a/lib/libdss-include/linux/isdnif.h b/lib/libdss-include/linux/isdnif.h
new file mode 100644 (file)
index 0000000..1db1b0b
--- /dev/null
@@ -0,0 +1,56 @@
+/* $Id: isdnif.h,v 1.43.2.2 2004/01/12 23:08:35 keil Exp $
+ *
+ * Linux ISDN subsystem
+ * Definition of the interface between the subsystem and its low-level drivers.
+ *
+ * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de)
+ * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg
+ * 
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ */
+
+#ifndef __ISDNIF_H__
+#define __ISDNIF_H__
+
+
+/*
+ * Values for general protocol-selection
+ */
+#define ISDN_PTYPE_UNKNOWN   0   /* Protocol undefined   */
+#define ISDN_PTYPE_1TR6      1   /* german 1TR6-protocol */
+#define ISDN_PTYPE_EURO      2   /* EDSS1-protocol       */
+#define ISDN_PTYPE_LEASED    3   /* for leased lines     */
+#define ISDN_PTYPE_NI1       4   /* US NI-1 protocol     */
+#define ISDN_PTYPE_MAX       7   /* Max. 8 Protocols     */
+
+/*
+ * Values for Layer-2-protocol-selection
+ */
+#define ISDN_PROTO_L2_X75I   0   /* X75/LAPB with I-Frames            */
+#define ISDN_PROTO_L2_X75UI  1   /* X75/LAPB with UI-Frames           */
+#define ISDN_PROTO_L2_X75BUI 2   /* X75/LAPB with UI-Frames           */
+#define ISDN_PROTO_L2_HDLC   3   /* HDLC                              */
+#define ISDN_PROTO_L2_TRANS  4   /* Transparent (Voice)               */
+#define ISDN_PROTO_L2_X25DTE 5   /* X25/LAPB DTE mode                 */
+#define ISDN_PROTO_L2_X25DCE 6   /* X25/LAPB DCE mode                 */
+#define ISDN_PROTO_L2_V11096 7   /* V.110 bitrate adaption 9600 Baud  */
+#define ISDN_PROTO_L2_V11019 8   /* V.110 bitrate adaption 19200 Baud */
+#define ISDN_PROTO_L2_V11038 9   /* V.110 bitrate adaption 38400 Baud */
+#define ISDN_PROTO_L2_MODEM  10  /* Analog Modem on Board */
+#define ISDN_PROTO_L2_FAX    11  /* Fax Group 2/3         */
+#define ISDN_PROTO_L2_HDLC_56K 12   /* HDLC 56k                          */
+#define ISDN_PROTO_L2_MAX    15  /* Max. 16 Protocols                 */
+
+/*
+ * Values for Layer-3-protocol-selection
+ */
+#define ISDN_PROTO_L3_TRANS    0       /* Transparent */
+#define ISDN_PROTO_L3_TRANSDSP 1       /* Transparent with DSP */
+#define ISDN_PROTO_L3_FCLASS2  2       /* Fax Group 2/3 CLASS 2 */
+#define ISDN_PROTO_L3_FCLASS1  3       /* Fax Group 2/3 CLASS 1 */
+#define ISDN_PROTO_L3_MAX      7       /* Max. 8 Protocols */
+
+
+#endif /* __ISDNIF_H__ */
diff --git a/lib/libdss-include/linux/iso_fs.h b/lib/libdss-include/linux/iso_fs.h
new file mode 100644 (file)
index 0000000..4688ac4
--- /dev/null
@@ -0,0 +1,165 @@
+#ifndef _ISOFS_FS_H
+#define _ISOFS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * The isofs filesystem constants/structures
+ */
+
+/* This part borrowed from the bsd386 isofs */
+#define ISODCL(from, to) (to - from + 1)
+
+struct iso_volume_descriptor {
+       char type[ISODCL(1,1)]; /* 711 */
+       char id[ISODCL(2,6)];
+       char version[ISODCL(7,7)];
+       char data[ISODCL(8,2048)];
+};
+
+/* volume descriptor types */
+#define ISO_VD_PRIMARY 1
+#define ISO_VD_SUPPLEMENTARY 2
+#define ISO_VD_END 255
+
+#define ISO_STANDARD_ID "CD001"
+
+struct iso_primary_descriptor {
+       char type                       [ISODCL (  1,   1)]; /* 711 */
+       char id                         [ISODCL (  2,   6)];
+       char version                    [ISODCL (  7,   7)]; /* 711 */
+       char unused1                    [ISODCL (  8,   8)];
+       char system_id                  [ISODCL (  9,  40)]; /* achars */
+       char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
+       char unused2                    [ISODCL ( 73,  80)];
+       char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
+       char unused3                    [ISODCL ( 89, 120)];
+       char volume_set_size            [ISODCL (121, 124)]; /* 723 */
+       char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
+       char logical_block_size         [ISODCL (129, 132)]; /* 723 */
+       char path_table_size            [ISODCL (133, 140)]; /* 733 */
+       char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
+       char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
+       char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
+       char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
+       char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
+       char volume_set_id              [ISODCL (191, 318)]; /* dchars */
+       char publisher_id               [ISODCL (319, 446)]; /* achars */
+       char preparer_id                [ISODCL (447, 574)]; /* achars */
+       char application_id             [ISODCL (575, 702)]; /* achars */
+       char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
+       char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
+       char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
+       char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
+       char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
+       char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
+       char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
+       char file_structure_version     [ISODCL (882, 882)]; /* 711 */
+       char unused4                    [ISODCL (883, 883)];
+       char application_data           [ISODCL (884, 1395)];
+       char unused5                    [ISODCL (1396, 2048)];
+};
+
+/* Almost the same as the primary descriptor but two fields are specified */
+struct iso_supplementary_descriptor {
+       char type                       [ISODCL (  1,   1)]; /* 711 */
+       char id                         [ISODCL (  2,   6)];
+       char version                    [ISODCL (  7,   7)]; /* 711 */
+       char flags                      [ISODCL (  8,   8)]; /* 853 */
+       char system_id                  [ISODCL (  9,  40)]; /* achars */
+       char volume_id                  [ISODCL ( 41,  72)]; /* dchars */
+       char unused2                    [ISODCL ( 73,  80)];
+       char volume_space_size          [ISODCL ( 81,  88)]; /* 733 */
+       char escape                     [ISODCL ( 89, 120)]; /* 856 */
+       char volume_set_size            [ISODCL (121, 124)]; /* 723 */
+       char volume_sequence_number     [ISODCL (125, 128)]; /* 723 */
+       char logical_block_size         [ISODCL (129, 132)]; /* 723 */
+       char path_table_size            [ISODCL (133, 140)]; /* 733 */
+       char type_l_path_table          [ISODCL (141, 144)]; /* 731 */
+       char opt_type_l_path_table      [ISODCL (145, 148)]; /* 731 */
+       char type_m_path_table          [ISODCL (149, 152)]; /* 732 */
+       char opt_type_m_path_table      [ISODCL (153, 156)]; /* 732 */
+       char root_directory_record      [ISODCL (157, 190)]; /* 9.1 */
+       char volume_set_id              [ISODCL (191, 318)]; /* dchars */
+       char publisher_id               [ISODCL (319, 446)]; /* achars */
+       char preparer_id                [ISODCL (447, 574)]; /* achars */
+       char application_id             [ISODCL (575, 702)]; /* achars */
+       char copyright_file_id          [ISODCL (703, 739)]; /* 7.5 dchars */
+       char abstract_file_id           [ISODCL (740, 776)]; /* 7.5 dchars */
+       char bibliographic_file_id      [ISODCL (777, 813)]; /* 7.5 dchars */
+       char creation_date              [ISODCL (814, 830)]; /* 8.4.26.1 */
+       char modification_date          [ISODCL (831, 847)]; /* 8.4.26.1 */
+       char expiration_date            [ISODCL (848, 864)]; /* 8.4.26.1 */
+       char effective_date             [ISODCL (865, 881)]; /* 8.4.26.1 */
+       char file_structure_version     [ISODCL (882, 882)]; /* 711 */
+       char unused4                    [ISODCL (883, 883)];
+       char application_data           [ISODCL (884, 1395)];
+       char unused5                    [ISODCL (1396, 2048)];
+};
+
+
+#define HS_STANDARD_ID "CDROM"
+
+struct  hs_volume_descriptor {
+       char foo                        [ISODCL (  1,   8)]; /* 733 */
+       char type                       [ISODCL (  9,   9)]; /* 711 */
+       char id                         [ISODCL ( 10,  14)];
+       char version                    [ISODCL ( 15,  15)]; /* 711 */
+       char data[ISODCL(16,2048)];
+};
+
+
+struct hs_primary_descriptor {
+       char foo                        [ISODCL (  1,   8)]; /* 733 */
+       char type                       [ISODCL (  9,   9)]; /* 711 */
+       char id                         [ISODCL ( 10,  14)];
+       char version                    [ISODCL ( 15,  15)]; /* 711 */
+       char unused1                    [ISODCL ( 16,  16)]; /* 711 */
+       char system_id                  [ISODCL ( 17,  48)]; /* achars */
+       char volume_id                  [ISODCL ( 49,  80)]; /* dchars */
+       char unused2                    [ISODCL ( 81,  88)]; /* 733 */
+       char volume_space_size          [ISODCL ( 89,  96)]; /* 733 */
+       char unused3                    [ISODCL ( 97, 128)]; /* 733 */
+       char volume_set_size            [ISODCL (129, 132)]; /* 723 */
+       char volume_sequence_number     [ISODCL (133, 136)]; /* 723 */
+       char logical_block_size         [ISODCL (137, 140)]; /* 723 */
+       char path_table_size            [ISODCL (141, 148)]; /* 733 */
+       char type_l_path_table          [ISODCL (149, 152)]; /* 731 */
+       char unused4                    [ISODCL (153, 180)]; /* 733 */
+       char root_directory_record      [ISODCL (181, 214)]; /* 9.1 */
+};
+
+/* We use this to help us look up the parent inode numbers. */
+
+struct iso_path_table{
+       unsigned char  name_len[2];     /* 721 */
+       char extent[4];         /* 731 */
+       char  parent[2];        /* 721 */
+       char name[0];
+} __attribute__((packed));
+
+/* high sierra is identical to iso, except that the date is only 6 bytes, and
+   there is an extra reserved byte after the flags */
+
+struct iso_directory_record {
+       char length                     [ISODCL (1, 1)]; /* 711 */
+       char ext_attr_length            [ISODCL (2, 2)]; /* 711 */
+       char extent                     [ISODCL (3, 10)]; /* 733 */
+       char size                       [ISODCL (11, 18)]; /* 733 */
+       char date                       [ISODCL (19, 25)]; /* 7 by 711 */
+       char flags                      [ISODCL (26, 26)];
+       char file_unit_size             [ISODCL (27, 27)]; /* 711 */
+       char interleave                 [ISODCL (28, 28)]; /* 711 */
+       char volume_sequence_number     [ISODCL (29, 32)]; /* 723 */
+       unsigned char name_len          [ISODCL (33, 33)]; /* 711 */
+       char name                       [0];
+} __attribute__((packed));
+
+#define ISOFS_BLOCK_BITS 11
+#define ISOFS_BLOCK_SIZE 2048
+
+#define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize)
+#define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits)
+
+#endif /* _ISOFS_FS_H */
diff --git a/lib/libdss-include/linux/ivtv.h b/lib/libdss-include/linux/ivtv.h
new file mode 100644 (file)
index 0000000..120e82c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+    Public ivtv API header
+    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
+    Copyright (C) 2004-2007  Hans Verkuil <hverkuil@xs4all.nl>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_IVTV_H__
+#define __LINUX_IVTV_H__
+
+
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/* ivtv knows several distinct output modes: MPEG streaming,
+   YUV streaming, YUV updates through user DMA and the passthrough
+   mode.
+
+   In order to clearly tell the driver that we are in user DMA
+   YUV mode you need to call IVTV_IOC_DMA_FRAME with y_source == NULL
+   first (althrough if you don't then the first time
+   DMA_FRAME is called the mode switch is done automatically).
+
+   When you close the file handle the user DMA mode is exited again.
+
+   While in one mode, you cannot use another mode (EBUSY is returned).
+
+   All this means that if you want to change the YUV interlacing
+   for the user DMA YUV mode you first need to do call IVTV_IOC_DMA_FRAME
+   with y_source == NULL before you can set the correct format using
+   VIDIOC_S_FMT.
+
+   Eventually all this should be replaced with a proper V4L2 API,
+   but for now we have to do it this way. */
+
+struct ivtv_dma_frame {
+       enum v4l2_buf_type type; /* V4L2_BUF_TYPE_VIDEO_OUTPUT */
+       __u32 pixelformat;       /* 0 == same as destination */
+       void *y_source;   /* if NULL and type == V4L2_BUF_TYPE_VIDEO_OUTPUT,
+                                   then just switch to user DMA YUV output mode */
+       void *uv_source;  /* Unused for RGB pixelformats */
+       struct v4l2_rect src;
+       struct v4l2_rect dst;
+       __u32 src_width;
+       __u32 src_height;
+};
+
+#define IVTV_IOC_DMA_FRAME             _IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame)
+
+/* Select the passthrough mode (if the argument is non-zero). In the passthrough
+   mode the output of the encoder is passed immediately into the decoder. */
+#define IVTV_IOC_PASSTHROUGH_MODE      _IOW ('V', BASE_VIDIOC_PRIVATE+1, int)
+
+/* Deprecated defines: applications should use the defines from videodev2.h */
+#define IVTV_SLICED_TYPE_TELETEXT_B     V4L2_MPEG_VBI_IVTV_TELETEXT_B
+#define IVTV_SLICED_TYPE_CAPTION_525    V4L2_MPEG_VBI_IVTV_CAPTION_525
+#define IVTV_SLICED_TYPE_WSS_625        V4L2_MPEG_VBI_IVTV_WSS_625
+#define IVTV_SLICED_TYPE_VPS            V4L2_MPEG_VBI_IVTV_VPS
+
+#endif /* _LINUX_IVTV_H */
diff --git a/lib/libdss-include/linux/ivtvfb.h b/lib/libdss-include/linux/ivtvfb.h
new file mode 100644 (file)
index 0000000..97eaf4e
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    On Screen Display cx23415 Framebuffer driver
+
+    Copyright (C) 2006, 2007  Ian Armstrong <ian@iarmst.demon.co.uk>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_IVTVFB_H__
+#define __LINUX_IVTVFB_H__
+
+
+#include <linux/types.h>
+
+/* Framebuffer external API */
+
+struct ivtvfb_dma_frame {
+       void *source;
+       unsigned long dest_offset;
+       int count;
+};
+
+#define IVTVFB_IOC_DMA_FRAME   _IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame)
+
+#endif
diff --git a/lib/libdss-include/linux/ixjuser.h b/lib/libdss-include/linux/ixjuser.h
new file mode 100644 (file)
index 0000000..0b829f9
--- /dev/null
@@ -0,0 +1,720 @@
+#ifndef __LINUX_IXJUSER_H
+#define __LINUX_IXJUSER_H
+
+/******************************************************************************
+ *
+ *    ixjuser.h
+ *
+ * Device Driver for Quicknet Technologies, Inc.'s Telephony cards
+ * including the Internet PhoneJACK, Internet PhoneJACK Lite,
+ * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and
+ * SmartCABLE
+ *
+ *    (c) Copyright 1999-2001  Quicknet Technologies, Inc.
+ *
+ *    This program is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU General Public License
+ *    as published by the Free Software Foundation; either version
+ *    2 of the License, or (at your option) any later version.
+ *
+ * Author:          Ed Okerson, <eokerson@quicknet.net>
+ *    
+ * Contributors:    Greg Herlein, <gherlein@quicknet.net>
+ *                  David W. Erhart, <derhart@quicknet.net>
+ *                  John Sellers, <jsellers@quicknet.net>
+ *                  Mike Preston, <mpreston@quicknet.net>
+ *
+ * More information about the hardware related to this driver can be found
+ * at our website:    http://www.quicknet.net
+ *
+ * Fixes:
+ *
+ * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
+ * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION 
+ * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ *****************************************************************************/
+
+#include <linux/telephony.h>
+
+
+/******************************************************************************
+*
+* IOCTL's used for the Quicknet Telephony Cards
+*
+* If you use the IXJCTL_TESTRAM command, the card must be power cycled to
+* reset the SRAM values before further use.
+*
+******************************************************************************/
+
+#define IXJCTL_DSP_RESET               _IO  ('q', 0xC0)
+
+#define IXJCTL_RING                     PHONE_RING
+#define IXJCTL_HOOKSTATE                PHONE_HOOKSTATE
+#define IXJCTL_MAXRINGS                        PHONE_MAXRINGS
+#define IXJCTL_RING_CADENCE            PHONE_RING_CADENCE
+#define IXJCTL_RING_START              PHONE_RING_START
+#define IXJCTL_RING_STOP               PHONE_RING_STOP
+
+#define IXJCTL_CARDTYPE                        _IOR ('q', 0xC1, int)
+#define IXJCTL_SERIAL                  _IOR ('q', 0xC2, int)
+#define IXJCTL_DSP_TYPE                 _IOR ('q', 0xC3, int)
+#define IXJCTL_DSP_VERSION              _IOR ('q', 0xC4, int)
+#define IXJCTL_VERSION                 _IOR ('q', 0xDA, char *)
+#define IXJCTL_DSP_IDLE                        _IO  ('q', 0xC5)
+#define IXJCTL_TESTRAM                 _IO  ('q', 0xC6)
+
+/******************************************************************************
+*
+* This group of IOCTLs deal with the record settings of the DSP
+*
+* The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP.
+* Setting a lower depth reduces latency, but increases the demand of the
+* application to service the driver without frame loss.  The DSP has 480
+* bytes of physical buffer memory for the record channel so the true
+* maximum limit is determined by how many frames will fit in the buffer.
+*
+* 1 uncompressed (480 byte) 16-bit linear frame.
+* 2 uncompressed (240 byte) 8-bit A-law/mu-law frames.
+* 15 TrueSpeech 8.5 frames.
+* 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames.
+*
+* The default in the driver is currently set to 2 frames.
+*
+* The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8
+* number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the
+* signal by 2.0, 0x80 scales the signal by 0.5.  No protection is given
+* against over-scaling, if the multiplication factor times the input
+* signal exceeds 16 bits, overflow distortion will occur.  The default
+* setting is 0x100 (1.0).
+*
+* The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on
+* the most recently recorded frame as a 16 bit value.
+******************************************************************************/
+
+#define IXJCTL_REC_CODEC                PHONE_REC_CODEC
+#define IXJCTL_REC_START                PHONE_REC_START
+#define IXJCTL_REC_STOP                 PHONE_REC_STOP
+#define IXJCTL_REC_DEPTH               PHONE_REC_DEPTH
+#define IXJCTL_FRAME                   PHONE_FRAME
+#define IXJCTL_REC_VOLUME              PHONE_REC_VOLUME
+#define IXJCTL_REC_LEVEL               PHONE_REC_LEVEL
+
+typedef enum {
+       f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50,
+       f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400,
+       f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450,
+       f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450,
+       f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587,
+       f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850,
+       f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400,
+       f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336,
+       lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860
+} IXJ_FILTER_FREQ;
+
+typedef struct {
+       unsigned int filter;
+       IXJ_FILTER_FREQ freq;
+       char enable;
+} IXJ_FILTER;
+
+typedef struct {
+       char enable;
+       char en_filter;
+       unsigned int filter;
+       unsigned int on1;
+       unsigned int off1;
+       unsigned int on2;
+       unsigned int off2;
+       unsigned int on3;
+       unsigned int off3;
+} IXJ_FILTER_CADENCE;
+
+#define IXJCTL_SET_FILTER              _IOW ('q', 0xC7, IXJ_FILTER *)
+#define IXJCTL_SET_FILTER_RAW          _IOW ('q', 0xDD, IXJ_FILTER_RAW *)
+#define IXJCTL_GET_FILTER_HIST         _IOW ('q', 0xC8, int)
+#define IXJCTL_FILTER_CADENCE          _IOW ('q', 0xD6, IXJ_FILTER_CADENCE *)
+#define IXJCTL_PLAY_CID                        _IO  ('q', 0xD7)
+/******************************************************************************
+*
+* This IOCTL allows you to reassign values in the tone index table.  The
+* tone table has 32 entries (0 - 31), but the driver only allows entries
+* 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are
+* the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D.
+* The positions used internally for Call Progress Tones are as follows:
+*    Dial Tone   - 25
+*    Ring Back   - 26
+*    Busy Signal - 27
+*
+* The freq values are calculated as:
+* freq = cos(2 * PI * frequency / 8000)
+*
+* The most commonly needed values are already calculated and listed in the
+* enum IXJ_TONE_FREQ.  Each tone index can have two frequencies with
+* different gains, if you are only using a single frequency set the unused
+* one to 0.
+*
+* The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB
+* increments.
+*
+******************************************************************************/
+
+typedef enum {
+       hz20 = 0x7ffa,
+       hz50 = 0x7fe5,
+       hz133 = 0x7f4c,
+       hz200 = 0x7e6b,
+       hz261 = 0x7d50,         /* .63 C1  */
+       hz277 = 0x7cfa,         /* .18 CS1 */
+       hz293 = 0x7c9f,         /* .66 D1  */
+       hz300 = 0x7c75,
+       hz311 = 0x7c32,         /* .13 DS1 */
+       hz329 = 0x7bbf,         /* .63 E1  */
+       hz330 = 0x7bb8,
+       hz340 = 0x7b75,
+       hz349 = 0x7b37,         /* .23 F1  */
+       hz350 = 0x7b30,
+       hz360 = 0x7ae9,
+       hz369 = 0x7aa8,         /* .99 FS1 */
+       hz380 = 0x7a56,
+       hz392 = 0x79fa,         /* .00 G1  */
+       hz400 = 0x79bb,
+       hz415 = 0x7941,         /* .30 GS1 */
+       hz420 = 0x7918,
+       hz425 = 0x78ee,
+       hz435 = 0x7899,
+       hz440 = 0x786d,         /* .00 A1  */
+       hz445 = 0x7842,
+       hz450 = 0x7815,
+       hz452 = 0x7803,
+       hz466 = 0x7784,         /* .16 AS1 */
+       hz475 = 0x7731,
+       hz480 = 0x7701,
+       hz493 = 0x7685,         /* .88 B1  */
+       hz494 = 0x767b,
+       hz500 = 0x7640,
+       hz520 = 0x7578,
+       hz523 = 0x7559,         /* .25 C2  */
+       hz525 = 0x7544,
+       hz540 = 0x74a7,
+       hz554 = 0x7411,         /* .37 CS2 */
+       hz587 = 0x72a1,         /* .33 D2  */
+       hz590 = 0x727f,
+       hz600 = 0x720b,
+       hz620 = 0x711e,
+       hz622 = 0x7106,         /* .25 DS2 */
+       hz659 = 0x6f3b,         /* .26 E2  */
+       hz660 = 0x6f2e,
+       hz698 = 0x6d3d,         /* .46 F2  */
+       hz700 = 0x6d22,
+       hz739 = 0x6b09,         /* .99 FS2 */
+       hz740 = 0x6afa,
+       hz750 = 0x6a6c,
+       hz770 = 0x694b,
+       hz783 = 0x688b,         /* .99 G2  */
+       hz800 = 0x678d,
+       hz816 = 0x6698,
+       hz830 = 0x65bf,         /* .61 GS2 */
+       hz850 = 0x6484,
+       hz857 = 0x6414,
+       hz880 = 0x629f,         /* .00 A2  */
+       hz900 = 0x6154,
+       hz932 = 0x5f35,         /* .33 AS2 */
+       hz935 = 0x5f01,
+       hz941 = 0x5e9a,
+       hz942 = 0x5e88,
+       hz950 = 0x5dfd,
+       hz975 = 0x5c44,
+       hz1000 = 0x5a81,
+       hz1020 = 0x5912,
+       hz1050 = 0x56e2,
+       hz1100 = 0x5320,
+       hz1140 = 0x5007,
+       hz1200 = 0x4b3b,
+       hz1209 = 0x4a80,
+       hz1215 = 0x4a02,
+       hz1250 = 0x471c,
+       hz1300 = 0x42e0,
+       hz1330 = 0x4049,
+       hz1336 = 0x3fc4,
+       hz1366 = 0x3d22,
+       hz1380 = 0x3be4,
+       hz1400 = 0x3a1b,
+       hz1450 = 0x3596,
+       hz1477 = 0x331c,
+       hz1500 = 0x30fb,
+       hz1600 = 0x278d,
+       hz1633 = 0x2462,
+       hz1638 = 0x23e7,
+       hz1645 = 0x233a,
+       hz1750 = 0x18f8,
+       hz1800 = 0x1405,
+       hz1860 = 0xe0b,
+       hz2100 = 0xf5f6,
+       hz2130 = 0xf2f5,
+       hz2450 = 0xd3b3,
+       hz2750 = 0xb8e4
+} IXJ_FREQ;
+
+typedef enum {
+       C1 = hz261,
+       CS1 = hz277,
+       D1 = hz293,
+       DS1 = hz311,
+       E1 = hz329,
+       F1 = hz349,
+       FS1 = hz369,
+       G1 = hz392,
+       GS1 = hz415,
+       A1 = hz440,
+       AS1 = hz466,
+       B1 = hz493,
+       C2 = hz523,
+       CS2 = hz554,
+       D2 = hz587,
+       DS2 = hz622,
+       E2 = hz659,
+       F2 = hz698,
+       FS2 = hz739,
+       G2 = hz783,
+       GS2 = hz830,
+       A2 = hz880,
+       AS2 = hz932,
+} IXJ_NOTE;
+
+typedef struct {
+       int tone_index;
+       int freq0;
+       int gain0;
+       int freq1;
+       int gain1;
+} IXJ_TONE;
+
+#define IXJCTL_INIT_TONE               _IOW ('q', 0xC9, IXJ_TONE *)
+
+/******************************************************************************
+*
+* The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various
+* Call Progress Tones (CPT).  This is accomplished by setting up an array of
+* IXJ_CADENCE_ELEMENT structures that sequentially define the states of
+* the tone sequence.  The tone_on_time and tone_off time are in
+* 250 microsecond intervals.  A pointer to this array is passed to the
+* driver as the ce element of an IXJ_CADENCE structure.  The elements_used
+* must be set to the number of IXJ_CADENCE_ELEMENTS in the array.  The
+* termination variable defines what to do at the end of a cadence, the
+* options are to play the cadence once and stop, to repeat the last
+* element of the cadence indefinitely, or to repeat the entire cadence
+* indefinitely.  The ce variable is a pointer to the array of IXJ_TONE
+* structures.  If the freq0 variable is non-zero, the tone table contents
+* for the tone_index are updated to the frequencies and gains defined.  It
+* should be noted that DTMF tones cannot be reassigned, so if DTMF tone
+* table indexes are used in a cadence the frequency and gain variables will
+* be ignored.
+*
+* If the array elements contain frequency parameters the driver will
+* initialize the needed tone table elements and begin playing the tone,
+* there is no preset limit on the number of elements in the cadence.  If
+* there is more than one frequency used in the cadence, sequential elements
+* of different frequencies MUST use different tone table indexes.  Only one
+* cadence can be played at a time.  It is possible to build complex
+* cadences with multiple frequencies using 2 tone table indexes by
+* alternating between them.
+*
+******************************************************************************/
+
+typedef struct {
+       int index;
+       int tone_on_time;
+       int tone_off_time;
+       int freq0;
+       int gain0;
+       int freq1;
+       int gain1;
+} IXJ_CADENCE_ELEMENT;
+
+typedef enum {
+       PLAY_ONCE,
+       REPEAT_LAST_ELEMENT,
+       REPEAT_ALL
+} IXJ_CADENCE_TERM;
+
+typedef struct {
+       int elements_used;
+       IXJ_CADENCE_TERM termination;
+       IXJ_CADENCE_ELEMENT *ce;
+} IXJ_CADENCE;
+
+#define IXJCTL_TONE_CADENCE            _IOW ('q', 0xCA, IXJ_CADENCE *)
+/******************************************************************************
+*
+* This group of IOCTLs deal with the playback settings of the DSP
+*
+******************************************************************************/
+
+#define IXJCTL_PLAY_CODEC               PHONE_PLAY_CODEC
+#define IXJCTL_PLAY_START               PHONE_PLAY_START
+#define IXJCTL_PLAY_STOP                PHONE_PLAY_STOP
+#define IXJCTL_PLAY_DEPTH              PHONE_PLAY_DEPTH
+#define IXJCTL_PLAY_VOLUME             PHONE_PLAY_VOLUME
+#define IXJCTL_PLAY_LEVEL              PHONE_PLAY_LEVEL
+
+/******************************************************************************
+*
+* This group of IOCTLs deal with the Acoustic Echo Cancellation settings
+* of the DSP
+*
+* Issuing the IXJCTL_AEC_START command with a value of AEC_OFF has the
+* same effect as IXJCTL_AEC_STOP.  This is to simplify slider bar
+* controls.  IXJCTL_AEC_GET_LEVEL returns the current setting of the AEC.
+******************************************************************************/
+#define IXJCTL_AEC_START               _IOW ('q', 0xCB, int)
+#define IXJCTL_AEC_STOP                        _IO  ('q', 0xCC)
+#define IXJCTL_AEC_GET_LEVEL           _IO  ('q', 0xCD)
+
+#define AEC_OFF   0
+#define AEC_LOW   1
+#define AEC_MED   2
+#define AEC_HIGH  3
+#define AEC_AUTO  4
+#define AEC_AGC   5
+/******************************************************************************
+*
+* Call Progress Tones, DTMF, etc.
+* IXJCTL_DTMF_OOB determines if DTMF signaling is sent as Out-Of-Band
+* only.  If you pass a 1, DTMF is suppressed from the audio stream.
+* Tone on and off times are in 250 microsecond intervals so
+* ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360);
+* will set the tone on time of board ixj1 to 360 * 250us = 90ms
+* the default values of tone on and off times is 840 or 210ms
+******************************************************************************/
+
+#define IXJCTL_DTMF_READY              PHONE_DTMF_READY
+#define IXJCTL_GET_DTMF                 PHONE_GET_DTMF
+#define IXJCTL_GET_DTMF_ASCII           PHONE_GET_DTMF_ASCII
+#define IXJCTL_DTMF_OOB                        PHONE_DTMF_OOB
+#define IXJCTL_EXCEPTION               PHONE_EXCEPTION
+#define IXJCTL_PLAY_TONE               PHONE_PLAY_TONE
+#define IXJCTL_SET_TONE_ON_TIME                PHONE_SET_TONE_ON_TIME
+#define IXJCTL_SET_TONE_OFF_TIME       PHONE_SET_TONE_OFF_TIME
+#define IXJCTL_GET_TONE_ON_TIME                PHONE_GET_TONE_ON_TIME
+#define IXJCTL_GET_TONE_OFF_TIME       PHONE_GET_TONE_OFF_TIME
+#define IXJCTL_GET_TONE_STATE          PHONE_GET_TONE_STATE
+#define IXJCTL_BUSY                    PHONE_BUSY
+#define IXJCTL_RINGBACK                        PHONE_RINGBACK
+#define IXJCTL_DIALTONE                        PHONE_DIALTONE
+#define IXJCTL_CPT_STOP                        PHONE_CPT_STOP
+
+/******************************************************************************
+* LineJACK specific IOCTLs
+*
+* The lsb 4 bits of the LED argument represent the state of each of the 4
+* LED's on the LineJACK
+******************************************************************************/
+
+#define IXJCTL_SET_LED                 _IOW ('q', 0xCE, int)
+#define IXJCTL_MIXER                   _IOW ('q', 0xCF, int)
+
+/******************************************************************************
+* 
+* The master volume controls use attenuation with 32 levels from 0 to -62dB
+* with steps of 2dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_MASTER_L         0x0000
+#define MIXER_MASTER_R         0x0100
+#define ATT00DB                        0x00
+#define ATT02DB                        0x01
+#define ATT04DB                        0x02
+#define ATT06DB                        0x03
+#define ATT08DB                        0x04
+#define ATT10DB                        0x05
+#define ATT12DB                        0x06
+#define ATT14DB                        0x07
+#define ATT16DB                        0x08
+#define ATT18DB                        0x09
+#define ATT20DB                        0x0A
+#define ATT22DB                        0x0B
+#define ATT24DB                        0x0C
+#define ATT26DB                        0x0D
+#define ATT28DB                        0x0E
+#define ATT30DB                        0x0F
+#define ATT32DB                        0x10
+#define ATT34DB                        0x11
+#define ATT36DB                        0x12
+#define ATT38DB                        0x13
+#define ATT40DB                        0x14
+#define ATT42DB                        0x15
+#define ATT44DB                        0x16
+#define ATT46DB                        0x17
+#define ATT48DB                        0x18
+#define ATT50DB                        0x19
+#define ATT52DB                        0x1A
+#define ATT54DB                        0x1B
+#define ATT56DB                        0x1C
+#define ATT58DB                        0x1D
+#define ATT60DB                        0x1E
+#define ATT62DB                        0x1F
+#define MASTER_MUTE            0x80
+
+/******************************************************************************
+* 
+* The input volume controls use gain with 32 levels from +12dB to -50dB
+* with steps of 2dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_PORT_CD_L                0x0600
+#define MIXER_PORT_CD_R                0x0700
+#define MIXER_PORT_LINE_IN_L   0x0800
+#define MIXER_PORT_LINE_IN_R   0x0900
+#define MIXER_PORT_POTS_REC    0x0C00
+#define MIXER_PORT_MIC         0x0E00
+
+#define GAIN12DB               0x00
+#define GAIN10DB               0x01
+#define GAIN08DB               0x02
+#define GAIN06DB               0x03
+#define GAIN04DB               0x04
+#define GAIN02DB               0x05
+#define GAIN00DB               0x06
+#define GAIN_02DB              0x07
+#define GAIN_04DB              0x08
+#define GAIN_06DB              0x09
+#define GAIN_08DB              0x0A
+#define GAIN_10DB              0x0B
+#define GAIN_12DB              0x0C
+#define GAIN_14DB              0x0D
+#define GAIN_16DB              0x0E
+#define GAIN_18DB              0x0F
+#define GAIN_20DB              0x10
+#define GAIN_22DB              0x11
+#define GAIN_24DB              0x12
+#define GAIN_26DB              0x13
+#define GAIN_28DB              0x14
+#define GAIN_30DB              0x15
+#define GAIN_32DB              0x16
+#define GAIN_34DB              0x17
+#define GAIN_36DB              0x18
+#define GAIN_38DB              0x19
+#define GAIN_40DB              0x1A
+#define GAIN_42DB              0x1B
+#define GAIN_44DB              0x1C
+#define GAIN_46DB              0x1D
+#define GAIN_48DB              0x1E
+#define GAIN_50DB              0x1F
+#define INPUT_MUTE             0x80
+
+/******************************************************************************
+* 
+* The POTS volume control use attenuation with 8 levels from 0dB to -28dB
+* with steps of 4dB each, the defines should be OR'ed together then sent
+* as the parameter to the mixer command to change the mixer settings.
+* 
+******************************************************************************/
+#define MIXER_PORT_POTS_PLAY   0x0F00
+
+#define POTS_ATT_00DB          0x00
+#define POTS_ATT_04DB          0x01
+#define POTS_ATT_08DB          0x02
+#define POTS_ATT_12DB          0x03
+#define POTS_ATT_16DB          0x04
+#define POTS_ATT_20DB          0x05
+#define POTS_ATT_24DB          0x06
+#define POTS_ATT_28DB          0x07
+#define POTS_MUTE              0x80
+
+/******************************************************************************
+* 
+* The DAA controls the interface to the PSTN port.  The driver loads the
+* US coefficients by default, so if you live in a different country you
+* need to load the set for your countries phone system.
+* 
+******************************************************************************/
+#define IXJCTL_DAA_COEFF_SET           _IOW ('q', 0xD0, int)
+
+#define DAA_US                 1       /*PITA 8kHz */
+#define DAA_UK                 2       /*ISAR34 8kHz */
+#define DAA_FRANCE     3       /* */
+#define DAA_GERMANY    4
+#define DAA_AUSTRALIA  5
+#define DAA_JAPAN      6
+
+/******************************************************************************
+* 
+* Use IXJCTL_PORT to set or query the port the card is set to.  If the
+* argument is set to PORT_QUERY, the return value of the ioctl will
+* indicate which port is currently in use, otherwise it will change the
+* port.
+* 
+******************************************************************************/
+#define IXJCTL_PORT                    _IOW ('q', 0xD1, int)
+
+#define PORT_QUERY     0
+#define PORT_POTS      1
+#define PORT_PSTN      2
+#define PORT_SPEAKER   3
+#define PORT_HANDSET   4
+
+#define IXJCTL_PSTN_SET_STATE          PHONE_PSTN_SET_STATE
+#define IXJCTL_PSTN_GET_STATE          PHONE_PSTN_GET_STATE
+
+#define PSTN_ON_HOOK   0
+#define PSTN_RINGING   1
+#define PSTN_OFF_HOOK  2
+#define PSTN_PULSE_DIAL        3
+
+/******************************************************************************
+* 
+* The DAA Analog GAIN sets 2 parameters at one time, the receive gain (AGRR), 
+* and the transmit gain (AGX).  OR together the components and pass them
+* as the parameter to IXJCTL_DAA_AGAIN.  The default setting is both at 0dB.
+* 
+******************************************************************************/
+#define IXJCTL_DAA_AGAIN               _IOW ('q', 0xD2, int)
+
+#define AGRR00DB       0x00    /* Analog gain in receive direction 0dB */
+#define AGRR3_5DB      0x10    /* Analog gain in receive direction 3.5dB */
+#define AGRR06DB       0x30    /* Analog gain in receive direction 6dB */
+
+#define AGX00DB                0x00    /* Analog gain in transmit direction 0dB */
+#define AGX_6DB                0x04    /* Analog gain in transmit direction -6dB */
+#define AGX3_5DB       0x08    /* Analog gain in transmit direction 3.5dB */
+#define AGX_2_5B       0x0C    /* Analog gain in transmit direction -2.5dB */
+
+#define IXJCTL_PSTN_LINETEST           _IO  ('q', 0xD3)
+
+#define IXJCTL_CID                     _IOR ('q', 0xD4, PHONE_CID *)
+#define IXJCTL_VMWI                    _IOR ('q', 0xD8, int)
+#define IXJCTL_CIDCW                   _IOW ('q', 0xD9, PHONE_CID *)
+/******************************************************************************
+* 
+* The wink duration is tunable with this ioctl.  The default wink duration  
+* is 320ms.  You do not need to use this ioctl if you do not require a
+* different wink duration.
+* 
+******************************************************************************/
+#define IXJCTL_WINK_DURATION           PHONE_WINK_DURATION
+
+/******************************************************************************
+* 
+* This ioctl will connect the POTS port to the PSTN port on the LineJACK
+* In order for this to work properly the port selection should be set to
+* the PSTN port with IXJCTL_PORT prior to calling this ioctl.  This will
+* enable conference calls between PSTN callers and network callers.
+* Passing a 1 to this ioctl enables the POTS<->PSTN connection while
+* passing a 0 turns it back off.
+* 
+******************************************************************************/
+#define IXJCTL_POTS_PSTN               _IOW ('q', 0xD5, int)
+
+/******************************************************************************
+*
+* IOCTLs added by request.
+*
+* IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in
+*           /usr/include/asm/param.h, this determines the fundamental
+*           frequency of the clock ticks on your Linux system.  The kernel
+*           must be rebuilt if you change this value, also all modules you
+*           use (except this one) must be recompiled.  The default value
+*           is 100, and you only need to use this IOCTL if you use some
+*           other value.
+*
+*
+* IXJCTL_RATE sets the number of times per second that the driver polls
+*             the DSP.  This value cannot be larger than HZ.  By
+*             increasing both of these values, you may be able to reduce
+*             latency because the max hang time that can exist between the
+*             driver and the DSP will be reduced.
+*
+******************************************************************************/
+
+#define IXJCTL_HZ                       _IOW ('q', 0xE0, int)
+#define IXJCTL_RATE                     _IOW ('q', 0xE1, int)
+#define IXJCTL_FRAMES_READ             _IOR ('q', 0xE2, unsigned long)
+#define IXJCTL_FRAMES_WRITTEN          _IOR ('q', 0xE3, unsigned long)
+#define IXJCTL_READ_WAIT               _IOR ('q', 0xE4, unsigned long)
+#define IXJCTL_WRITE_WAIT              _IOR ('q', 0xE5, unsigned long)
+#define IXJCTL_DRYBUFFER_READ          _IOR ('q', 0xE6, unsigned long)
+#define IXJCTL_DRYBUFFER_CLEAR         _IO  ('q', 0xE7)
+#define IXJCTL_DTMF_PRESCALE           _IOW ('q', 0xE8, int)
+
+/******************************************************************************
+*
+* This ioctl allows the user application to control what events the driver
+* will send signals for, and what signals it will send for which event.
+* By default, if signaling is enabled, all events will send SIGIO when
+* they occur.  To disable signals for an event set the signal to 0.
+*
+******************************************************************************/
+typedef enum {
+       SIG_DTMF_READY,
+       SIG_HOOKSTATE,
+       SIG_FLASH,
+       SIG_PSTN_RING,
+       SIG_CALLER_ID,
+       SIG_PSTN_WINK,
+       SIG_F0, SIG_F1, SIG_F2, SIG_F3,
+       SIG_FC0, SIG_FC1, SIG_FC2, SIG_FC3,
+       SIG_READ_READY = 33,
+       SIG_WRITE_READY = 34
+} IXJ_SIGEVENT;
+
+typedef struct {
+       unsigned int event;
+       int signal;
+} IXJ_SIGDEF;
+
+#define IXJCTL_SIGCTL                  _IOW ('q', 0xE9, IXJ_SIGDEF *)
+
+/******************************************************************************
+*
+* These ioctls allow the user application to change the gain in the 
+* Smart Cable of the Internet Phone Card.  Sending -1 as a value will cause
+* return value to be the current setting.  Valid values to set are 0x00 - 0x1F
+*
+* 11111 = +12 dB
+* 10111 =   0 dB
+* 00000 = -34.5 dB
+*
+* IXJCTL_SC_RXG sets the Receive gain
+* IXJCTL_SC_TXG sets the Transmit gain
+*
+******************************************************************************/
+#define IXJCTL_SC_RXG                  _IOW ('q', 0xEA, int)
+#define IXJCTL_SC_TXG                  _IOW ('q', 0xEB, int)
+
+/******************************************************************************
+*
+* The intercom IOCTL's short the output from one card to the input of the
+* other and vice versa (actually done in the DSP read function).  It is only
+* necessary to execute the IOCTL on one card, but it is necessary to have
+* both devices open to be able to detect hook switch changes.  The record
+* codec and rate of each card must match the playback codec and rate of
+* the other card for this to work properly.
+*
+******************************************************************************/
+
+#define IXJCTL_INTERCOM_START          _IOW ('q', 0xFD, int)
+#define IXJCTL_INTERCOM_STOP           _IOW ('q', 0xFE, int)
+
+/******************************************************************************
+ *
+ * new structure for accessing raw filter information
+ *
+ ******************************************************************************/
+
+typedef struct {
+       unsigned int filter;
+       char enable;
+       unsigned int coeff[19];
+} IXJ_FILTER_RAW;
+
+#endif
diff --git a/lib/libdss-include/linux/jffs2.h b/lib/libdss-include/linux/jffs2.h
new file mode 100644 (file)
index 0000000..a18b719
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ * Copyright © 2001-2007 Red Hat, Inc.
+ * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * Created by David Woodhouse <dwmw2@infradead.org>
+ *
+ * For licensing information, see the file 'LICENCE' in the
+ * jffs2 directory.
+ */
+
+#ifndef __LINUX_JFFS2_H__
+#define __LINUX_JFFS2_H__
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* You must include something which defines the C99 uintXX_t types. 
+   We don't do it from here because this file is used in too many
+   different environments. */
+
+/* Values we may expect to find in the 'magic' field */
+#define JFFS2_OLD_MAGIC_BITMASK 0x1984
+#define JFFS2_MAGIC_BITMASK 0x1985
+#define KSAMTIB_CIGAM_2SFFJ 0x8519 /* For detecting wrong-endian fs */
+#define JFFS2_EMPTY_BITMASK 0xffff
+#define JFFS2_DIRTY_BITMASK 0x0000
+
+/* Summary node MAGIC marker */
+#define JFFS2_SUM_MAGIC        0x02851885
+
+/* We only allow a single char for length, and 0xFF is empty flash so
+   we don't want it confused with a real length. Hence max 254.
+*/
+#define JFFS2_MAX_NAME_LEN 254
+
+/* How small can we sensibly write nodes? */
+#define JFFS2_MIN_DATA_LEN 128
+
+#define JFFS2_COMPR_NONE       0x00
+#define JFFS2_COMPR_ZERO       0x01
+#define JFFS2_COMPR_RTIME      0x02
+#define JFFS2_COMPR_RUBINMIPS  0x03
+#define JFFS2_COMPR_COPY       0x04
+#define JFFS2_COMPR_DYNRUBIN   0x05
+#define JFFS2_COMPR_ZLIB       0x06
+#define JFFS2_COMPR_LZO                0x07
+/* Compatibility flags. */
+#define JFFS2_COMPAT_MASK 0xc000      /* What do to if an unknown nodetype is found */
+#define JFFS2_NODE_ACCURATE 0x2000
+/* INCOMPAT: Fail to mount the filesystem */
+#define JFFS2_FEATURE_INCOMPAT 0xc000
+/* ROCOMPAT: Mount read-only */
+#define JFFS2_FEATURE_ROCOMPAT 0x8000
+/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000
+/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */
+#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000
+
+#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1)
+#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2)
+#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4)
+
+#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6)
+
+#define JFFS2_NODETYPE_XATTR (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 8)
+#define JFFS2_NODETYPE_XREF (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 9)
+
+/* XATTR Related */
+#define JFFS2_XPREFIX_USER             1       /* for "user." */
+#define JFFS2_XPREFIX_SECURITY         2       /* for "security." */
+#define JFFS2_XPREFIX_ACL_ACCESS       3       /* for "system.posix_acl_access" */
+#define JFFS2_XPREFIX_ACL_DEFAULT      4       /* for "system.posix_acl_default" */
+#define JFFS2_XPREFIX_TRUSTED          5       /* for "trusted.*" */
+
+#define JFFS2_ACL_VERSION              0x0001
+
+// Maybe later...
+//#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+//#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4)
+
+
+#define JFFS2_INO_FLAG_PREREAD   1     /* Do read_inode() for this one at
+                                          mount time, don't wait for it to
+                                          happen later */
+#define JFFS2_INO_FLAG_USERCOMPR  2    /* User has requested a specific
+                                          compression type */
+
+
+/* These can go once we've made sure we've caught all uses without
+   byteswapping */
+
+typedef struct {
+       __u32 v32;
+} __attribute__((packed)) jint32_t;
+
+typedef struct {
+       __u32 m;
+} __attribute__((packed)) jmode_t;
+
+typedef struct {
+       __u16 v16;
+} __attribute__((packed)) jint16_t;
+
+struct jffs2_unknown_node
+{
+       /* All start like this */
+       jint16_t magic;
+       jint16_t nodetype;
+       jint32_t totlen; /* So we can skip over nodes we don't grok */
+       jint32_t hdr_crc;
+};
+
+struct jffs2_raw_dirent
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* == JFFS2_NODETYPE_DIRENT */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t pino;
+       jint32_t version;
+       jint32_t ino; /* == zero for unlink */
+       jint32_t mctime;
+       __u8 nsize;
+       __u8 type;
+       __u8 unused[2];
+       jint32_t node_crc;
+       jint32_t name_crc;
+       __u8 name[0];
+};
+
+/* The JFFS2 raw inode structure: Used for storage on physical media.  */
+/* The uid, gid, atime, mtime and ctime members could be longer, but
+   are left like this for space efficiency. If and when people decide
+   they really need them extended, it's simple enough to add support for
+   a new type of raw node.
+*/
+struct jffs2_raw_inode
+{
+       jint16_t magic;      /* A constant magic number.  */
+       jint16_t nodetype;   /* == JFFS2_NODETYPE_INODE */
+       jint32_t totlen;     /* Total length of this node (inc data, etc.) */
+       jint32_t hdr_crc;
+       jint32_t ino;        /* Inode number.  */
+       jint32_t version;    /* Version number.  */
+       jmode_t mode;       /* The file's type or mode.  */
+       jint16_t uid;        /* The file's owner.  */
+       jint16_t gid;        /* The file's group.  */
+       jint32_t isize;      /* Total resultant size of this inode (used for truncations)  */
+       jint32_t atime;      /* Last access time.  */
+       jint32_t mtime;      /* Last modification time.  */
+       jint32_t ctime;      /* Change time.  */
+       jint32_t offset;     /* Where to begin to write.  */
+       jint32_t csize;      /* (Compressed) data size */
+       jint32_t dsize;      /* Size of the node's data. (after decompression) */
+       __u8 compr;       /* Compression algorithm used */
+       __u8 usercompr;   /* Compression algorithm requested by the user */
+       jint16_t flags;      /* See JFFS2_INO_FLAG_* */
+       jint32_t data_crc;   /* CRC for the (compressed) data.  */
+       jint32_t node_crc;   /* CRC for the raw inode (excluding data)  */
+       __u8 data[0];
+};
+
+struct jffs2_raw_xattr {
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_XATTR */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t xid;           /* XATTR identifier number */
+       jint32_t version;
+       __u8 xprefix;
+       __u8 name_len;
+       jint16_t value_len;
+       jint32_t data_crc;
+       jint32_t node_crc;
+       __u8 data[0];
+} __attribute__((packed));
+
+struct jffs2_raw_xref
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_XREF */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t ino;           /* inode number */
+       jint32_t xid;           /* XATTR identifier number */
+       jint32_t xseqno;        /* xref sequential number */
+       jint32_t node_crc;
+} __attribute__((packed));
+
+struct jffs2_raw_summary
+{
+       jint16_t magic;
+       jint16_t nodetype;      /* = JFFS2_NODETYPE_SUMMARY */
+       jint32_t totlen;
+       jint32_t hdr_crc;
+       jint32_t sum_num;       /* number of sum entries*/
+       jint32_t cln_mkr;       /* clean marker size, 0 = no cleanmarker */
+       jint32_t padded;        /* sum of the size of padding nodes */
+       jint32_t sum_crc;       /* summary information crc */
+       jint32_t node_crc;      /* node crc */
+       jint32_t sum[0];        /* inode summary info */
+};
+
+union jffs2_node_union
+{
+       struct jffs2_raw_inode i;
+       struct jffs2_raw_dirent d;
+       struct jffs2_raw_xattr x;
+       struct jffs2_raw_xref r;
+       struct jffs2_raw_summary s;
+       struct jffs2_unknown_node u;
+};
+
+/* Data payload for device nodes. */
+union jffs2_device_node {
+       jint16_t old_id;
+       jint32_t new_id;
+};
+
+#endif /* __LINUX_JFFS2_H__ */
diff --git a/lib/libdss-include/linux/joystick.h b/lib/libdss-include/linux/joystick.h
new file mode 100644 (file)
index 0000000..141a6d5
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ *  Copyright (C) 1996-2000 Vojtech Pavlik
+ *
+ *  Sponsored by SuSE
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or 
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
+ * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
+ */
+#ifndef _LINUX_JOYSTICK_H
+#define _LINUX_JOYSTICK_H
+
+
+
+#include <linux/types.h>
+#include <linux/input.h>
+
+/*
+ * Version
+ */
+
+#define JS_VERSION             0x020100
+
+/*
+ * Types and constants for reading from /dev/js
+ */
+
+#define JS_EVENT_BUTTON                0x01    /* button pressed/released */
+#define JS_EVENT_AXIS          0x02    /* joystick moved */
+#define JS_EVENT_INIT          0x80    /* initial state of device */
+
+struct js_event {
+       __u32 time;     /* event timestamp in milliseconds */
+       __s16 value;    /* value */
+       __u8 type;      /* event type */
+       __u8 number;    /* axis/button number */
+};
+
+/*
+ * IOCTL commands for joystick driver
+ */
+
+#define JSIOCGVERSION          _IOR('j', 0x01, __u32)                          /* get driver version */
+
+#define JSIOCGAXES             _IOR('j', 0x11, __u8)                           /* get number of axes */
+#define JSIOCGBUTTONS          _IOR('j', 0x12, __u8)                           /* get number of buttons */
+#define JSIOCGNAME(len)                _IOC(_IOC_READ, 'j', 0x13, len)                 /* get identifier string */
+
+#define JSIOCSCORR             _IOW('j', 0x21, struct js_corr)                 /* set correction values */
+#define JSIOCGCORR             _IOR('j', 0x22, struct js_corr)                 /* get correction values */
+
+#define JSIOCSAXMAP            _IOW('j', 0x31, __u8[ABS_CNT])                  /* set axis mapping */
+#define JSIOCGAXMAP            _IOR('j', 0x32, __u8[ABS_CNT])                  /* get axis mapping */
+#define JSIOCSBTNMAP           _IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1])  /* set button mapping */
+#define JSIOCGBTNMAP           _IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1])  /* get button mapping */
+
+/*
+ * Types and constants for get/set correction
+ */
+
+#define JS_CORR_NONE           0x00    /* returns raw values */
+#define JS_CORR_BROKEN         0x01    /* broken line */
+
+struct js_corr {
+       __s32 coef[8];
+       __s16 prec;
+       __u16 type;
+};
+
+/*
+ * v0.x compatibility definitions
+ */
+
+#define JS_RETURN              sizeof(struct JS_DATA_TYPE)
+#define JS_TRUE                        1
+#define JS_FALSE               0
+#define JS_X_0                 0x01
+#define JS_Y_0                 0x02
+#define JS_X_1                 0x04
+#define JS_Y_1                 0x08
+#define JS_MAX                 2
+
+#define JS_DEF_TIMEOUT         0x1300
+#define JS_DEF_CORR            0
+#define JS_DEF_TIMELIMIT       10L
+
+#define JS_SET_CAL             1
+#define JS_GET_CAL             2
+#define JS_SET_TIMEOUT         3
+#define JS_GET_TIMEOUT         4
+#define JS_SET_TIMELIMIT       5
+#define JS_GET_TIMELIMIT       6
+#define JS_GET_ALL             7
+#define JS_SET_ALL             8
+
+struct JS_DATA_TYPE {
+       __s32 buttons;
+       __s32 x;
+       __s32 y;
+};
+
+struct JS_DATA_SAVE_TYPE_32 {
+       __s32 JS_TIMEOUT;
+       __s32 BUSY;
+       __s32 JS_EXPIRETIME;
+       __s32 JS_TIMELIMIT;
+       struct JS_DATA_TYPE JS_SAVE;
+       struct JS_DATA_TYPE JS_CORR;
+};
+
+struct JS_DATA_SAVE_TYPE_64 {
+       __s32 JS_TIMEOUT;
+       __s32 BUSY;
+       __s64 JS_EXPIRETIME;
+       __s64 JS_TIMELIMIT;
+       struct JS_DATA_TYPE JS_SAVE;
+       struct JS_DATA_TYPE JS_CORR;
+};
+
+
+#endif /* _LINUX_JOYSTICK_H */
diff --git a/lib/libdss-include/linux/kcmp.h b/lib/libdss-include/linux/kcmp.h
new file mode 100644 (file)
index 0000000..2dcd1b3
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _LINUX_KCMP_H
+#define _LINUX_KCMP_H
+
+/* Comparison type */
+enum kcmp_type {
+       KCMP_FILE,
+       KCMP_VM,
+       KCMP_FILES,
+       KCMP_FS,
+       KCMP_SIGHAND,
+       KCMP_IO,
+       KCMP_SYSVSEM,
+
+       KCMP_TYPES,
+};
+
+#endif /* _LINUX_KCMP_H */
diff --git a/lib/libdss-include/linux/kd.h b/lib/libdss-include/linux/kd.h
new file mode 100644 (file)
index 0000000..dc37bfb
--- /dev/null
@@ -0,0 +1,185 @@
+#ifndef _LINUX_KD_H
+#define _LINUX_KD_H
+#include <linux/types.h>
+
+
+/* 0x4B is 'K', to avoid collision with termios and vt */
+
+#define GIO_FONT       0x4B60  /* gets font in expanded form */
+#define PIO_FONT       0x4B61  /* use font in expanded form */
+
+#define GIO_FONTX      0x4B6B  /* get font using struct consolefontdesc */
+#define PIO_FONTX      0x4B6C  /* set font using struct consolefontdesc */
+struct consolefontdesc {
+       unsigned short charcount;       /* characters in font (256 or 512) */
+       unsigned short charheight;      /* scan lines per character (1-32) */
+       char *chardata;         /* font data in expanded form */
+};
+
+#define PIO_FONTRESET   0x4B6D /* reset to default font */
+
+#define GIO_CMAP       0x4B70  /* gets colour palette on VGA+ */
+#define PIO_CMAP       0x4B71  /* sets colour palette on VGA+ */
+
+#define KIOCSOUND      0x4B2F  /* start sound generation (0 for off) */
+#define KDMKTONE       0x4B30  /* generate tone */
+
+#define KDGETLED       0x4B31  /* return current led state */
+#define KDSETLED       0x4B32  /* set led state [lights, not flags] */
+#define        LED_SCR         0x01    /* scroll lock led */
+#define        LED_NUM         0x02    /* num lock led */
+#define        LED_CAP         0x04    /* caps lock led */
+
+#define KDGKBTYPE      0x4B33  /* get keyboard type */
+#define        KB_84           0x01
+#define        KB_101          0x02    /* this is what we always answer */
+#define        KB_OTHER        0x03
+
+#define KDADDIO                0x4B34  /* add i/o port as valid */
+#define KDDELIO                0x4B35  /* del i/o port as valid */
+#define KDENABIO       0x4B36  /* enable i/o to video board */
+#define KDDISABIO      0x4B37  /* disable i/o to video board */
+
+#define KDSETMODE      0x4B3A  /* set text/graphics mode */
+#define                KD_TEXT         0x00
+#define                KD_GRAPHICS     0x01
+#define                KD_TEXT0        0x02    /* obsolete */
+#define                KD_TEXT1        0x03    /* obsolete */
+#define                KD_TRANSPARENT  0x04
+
+#define KDGETMODE      0x4B3B  /* get current mode */
+
+#define KDMAPDISP      0x4B3C  /* map display into address space */
+#define KDUNMAPDISP    0x4B3D  /* unmap display from address space */
+
+typedef char scrnmap_t;
+#define                E_TABSZ         256
+#define GIO_SCRNMAP    0x4B40  /* get screen mapping from kernel */
+#define PIO_SCRNMAP    0x4B41  /* put screen mapping table in kernel */
+#define GIO_UNISCRNMAP  0x4B69 /* get full Unicode screen mapping */
+#define PIO_UNISCRNMAP  0x4B6A  /* set full Unicode screen mapping */
+
+#define GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
+struct unipair {
+       unsigned short unicode;
+       unsigned short fontpos;
+};
+struct unimapdesc {
+       unsigned short entry_ct;
+       struct unipair *entries;
+};
+#define PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
+#define PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
+struct unimapinit {
+       unsigned short advised_hashsize;  /* 0 if no opinion */
+       unsigned short advised_hashstep;  /* 0 if no opinion */
+       unsigned short advised_hashlevel; /* 0 if no opinion */
+};
+
+#define UNI_DIRECT_BASE 0xF000 /* start of Direct Font Region */
+#define UNI_DIRECT_MASK 0x01FF /* Direct Font Region bitmask */
+
+#define                K_RAW           0x00
+#define                K_XLATE         0x01
+#define                K_MEDIUMRAW     0x02
+#define                K_UNICODE       0x03
+#define                K_OFF           0x04
+#define KDGKBMODE      0x4B44  /* gets current keyboard mode */
+#define KDSKBMODE      0x4B45  /* sets current keyboard mode */
+
+#define                K_METABIT       0x03
+#define                K_ESCPREFIX     0x04
+#define KDGKBMETA      0x4B62  /* gets meta key handling mode */
+#define KDSKBMETA      0x4B63  /* sets meta key handling mode */
+
+#define                K_SCROLLLOCK    0x01
+#define                K_NUMLOCK       0x02
+#define                K_CAPSLOCK      0x04
+#define        KDGKBLED        0x4B64  /* get led flags (not lights) */
+#define        KDSKBLED        0x4B65  /* set led flags (not lights) */
+
+struct kbentry {
+       unsigned char kb_table;
+       unsigned char kb_index;
+       unsigned short kb_value;
+};
+#define                K_NORMTAB       0x00
+#define                K_SHIFTTAB      0x01
+#define                K_ALTTAB        0x02
+#define                K_ALTSHIFTTAB   0x03
+
+#define KDGKBENT       0x4B46  /* gets one entry in translation table */
+#define KDSKBENT       0x4B47  /* sets one entry in translation table */
+
+struct kbsentry {
+       unsigned char kb_func;
+       unsigned char kb_string[512];
+};
+#define KDGKBSENT      0x4B48  /* gets one function key string entry */
+#define KDSKBSENT      0x4B49  /* sets one function key string entry */
+
+struct kbdiacr {
+        unsigned char diacr, base, result;
+};
+struct kbdiacrs {
+        unsigned int kb_cnt;    /* number of entries in following array */
+       struct kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
+};
+#define KDGKBDIACR      0x4B4A  /* read kernel accent table */
+#define KDSKBDIACR      0x4B4B  /* write kernel accent table */
+
+struct kbdiacruc {
+       unsigned int diacr, base, result;
+};
+struct kbdiacrsuc {
+        unsigned int kb_cnt;    /* number of entries in following array */
+       struct kbdiacruc kbdiacruc[256];    /* MAX_DIACR from keyboard.h */
+};
+#define KDGKBDIACRUC    0x4BFA  /* read kernel accent table - UCS */
+#define KDSKBDIACRUC    0x4BFB  /* write kernel accent table - UCS */
+
+struct kbkeycode {
+       unsigned int scancode, keycode;
+};
+#define KDGETKEYCODE   0x4B4C  /* read kernel keycode table entry */
+#define KDSETKEYCODE   0x4B4D  /* write kernel keycode table entry */
+
+#define KDSIGACCEPT    0x4B4E  /* accept kbd generated signals */
+
+struct kbd_repeat {
+       int delay;      /* in msec; <= 0: don't change */
+       int period;     /* in msec; <= 0: don't change */
+                       /* earlier this field was misnamed "rate" */
+};
+
+#define KDKBDREP        0x4B52  /* set keyboard delay/repeat rate;
+                                * actually used values are returned */
+
+#define KDFONTOP       0x4B72  /* font operations */
+
+struct console_font_op {
+       unsigned int op;        /* operation code KD_FONT_OP_* */
+       unsigned int flags;     /* KD_FONT_FLAG_* */
+       unsigned int width, height;     /* font size */
+       unsigned int charcount;
+       unsigned char *data;    /* font data with height fixed to 32 */
+};
+
+struct console_font {
+       unsigned int width, height;     /* font size */
+       unsigned int charcount;
+       unsigned char *data;    /* font data with height fixed to 32 */
+};
+
+#define KD_FONT_OP_SET         0       /* Set font */
+#define KD_FONT_OP_GET         1       /* Get font */
+#define KD_FONT_OP_SET_DEFAULT 2       /* Set font to default, data points to name / NULL */
+#define KD_FONT_OP_COPY                3       /* Copy from another console */
+
+#define KD_FONT_FLAG_DONT_RECALC       1       /* Don't recalculate hw charcell size [compat] */
+
+/* note: 0x4B00-0x4B4E all have had a value at some time;
+   don't reuse for the time being */
+/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */
+
+#endif /* _LINUX_KD_H */
diff --git a/lib/libdss-include/linux/kdev_t.h b/lib/libdss-include/linux/kdev_t.h
new file mode 100644 (file)
index 0000000..3f10017
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _LINUX_KDEV_T_H
+#define _LINUX_KDEV_T_H
+
+/*
+Some programs want their definitions of MAJOR and MINOR and MKDEV
+from the kernel sources. These must be the externally visible ones.
+*/
+#define MAJOR(dev)     ((dev)>>8)
+#define MINOR(dev)     ((dev) & 0xff)
+#define MKDEV(ma,mi)   ((ma)<<8 | (mi))
+#endif /* _LINUX_KDEV_T_H */
diff --git a/lib/libdss-include/linux/kernel-page-flags.h b/lib/libdss-include/linux/kernel-page-flags.h
new file mode 100644 (file)
index 0000000..a4c6e2c
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef LINUX_KERNEL_PAGE_FLAGS_H
+#define LINUX_KERNEL_PAGE_FLAGS_H
+
+/*
+ * Stable page flag bits exported to user space
+ */
+
+#define KPF_LOCKED             0
+#define KPF_ERROR              1
+#define KPF_REFERENCED         2
+#define KPF_UPTODATE           3
+#define KPF_DIRTY              4
+#define KPF_LRU                        5
+#define KPF_ACTIVE             6
+#define KPF_SLAB               7
+#define KPF_WRITEBACK          8
+#define KPF_RECLAIM            9
+#define KPF_BUDDY              10
+
+/* 11-20: new additions in 2.6.31 */
+#define KPF_MMAP               11
+#define KPF_ANON               12
+#define KPF_SWAPCACHE          13
+#define KPF_SWAPBACKED         14
+#define KPF_COMPOUND_HEAD      15
+#define KPF_COMPOUND_TAIL      16
+#define KPF_HUGE               17
+#define KPF_UNEVICTABLE                18
+#define KPF_HWPOISON           19
+#define KPF_NOPAGE             20
+
+#define KPF_KSM                        21
+#define KPF_THP                        22
+#define KPF_BALLOON            23
+#define KPF_ZERO_PAGE          24
+#define KPF_IDLE               25
+
+
+#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
diff --git a/lib/libdss-include/linux/kernel.h b/lib/libdss-include/linux/kernel.h
new file mode 100644 (file)
index 0000000..642d1e9
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_KERNEL_H
+#define _LINUX_KERNEL_H
+
+#include <linux/sysinfo.h>
+
+/*
+ * 'kernel.h' contains some often-used function prototypes etc
+ */
+#define __ALIGN_KERNEL(x, a)           __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+#define __ALIGN_KERNEL_MASK(x, mask)   (((x) + (mask)) & ~(mask))
+
+
+#endif /* _LINUX_KERNEL_H */
diff --git a/lib/libdss-include/linux/kernelcapi.h b/lib/libdss-include/linux/kernelcapi.h
new file mode 100644 (file)
index 0000000..7b6e7b1
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * $Id: kernelcapi.h,v 1.8.6.2 2001/02/07 11:31:31 kai Exp $
+ * 
+ * Kernel CAPI 2.0 Interface for Linux
+ * 
+ * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
+ * 
+ */
+
+#ifndef __KERNELCAPI_H__
+#define __KERNELCAPI_H__
+
+#define CAPI_MAXAPPL   240     /* maximum number of applications  */
+#define CAPI_MAXCONTR  32      /* maximum number of controller    */
+#define CAPI_MAXDATAWINDOW     8
+
+
+typedef struct kcapi_flagdef {
+       int contr;
+       int flag;
+} kcapi_flagdef;
+
+typedef struct kcapi_carddef {
+       char            driver[32];
+       unsigned int    port;
+       unsigned        irq;
+       unsigned int    membase;
+       int             cardnr;
+} kcapi_carddef;
+
+/* new ioctls >= 10 */
+#define KCAPI_CMD_TRACE                10
+#define KCAPI_CMD_ADDCARD      11      /* OBSOLETE */
+
+/* 
+ * flag > 2 => trace also data
+ * flag & 1 => show trace
+ */
+#define KCAPI_TRACE_OFF                        0
+#define KCAPI_TRACE_SHORT_NO_DATA      1
+#define KCAPI_TRACE_FULL_NO_DATA       2
+#define KCAPI_TRACE_SHORT              3
+#define KCAPI_TRACE_FULL               4
+
+
+
+#endif /* __KERNELCAPI_H__ */
diff --git a/lib/libdss-include/linux/kexec.h b/lib/libdss-include/linux/kexec.h
new file mode 100644 (file)
index 0000000..99fcbf0
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef LINUX_KEXEC_H
+#define LINUX_KEXEC_H
+
+/* kexec system call -  It loads the new kernel to boot into.
+ * kexec does not sync, or unmount filesystems so if you need
+ * that to happen you need to do that yourself.
+ */
+
+#include <linux/types.h>
+
+/* kexec flags for different usage scenarios */
+#define KEXEC_ON_CRASH         0x00000001
+#define KEXEC_PRESERVE_CONTEXT 0x00000002
+#define KEXEC_ARCH_MASK                0xffff0000
+
+/*
+ * Kexec file load interface flags.
+ * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image.
+ * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image.
+ * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd
+ *                           fd field.
+ */
+#define KEXEC_FILE_UNLOAD      0x00000001
+#define KEXEC_FILE_ON_CRASH    0x00000002
+#define KEXEC_FILE_NO_INITRAMFS        0x00000004
+
+/* These values match the ELF architecture values.
+ * Unless there is a good reason that should continue to be the case.
+ */
+#define KEXEC_ARCH_DEFAULT ( 0 << 16)
+#define KEXEC_ARCH_386     ( 3 << 16)
+#define KEXEC_ARCH_68K     ( 4 << 16)
+#define KEXEC_ARCH_X86_64  (62 << 16)
+#define KEXEC_ARCH_PPC     (20 << 16)
+#define KEXEC_ARCH_PPC64   (21 << 16)
+#define KEXEC_ARCH_IA_64   (50 << 16)
+#define KEXEC_ARCH_ARM     (40 << 16)
+#define KEXEC_ARCH_S390    (22 << 16)
+#define KEXEC_ARCH_SH      (42 << 16)
+#define KEXEC_ARCH_MIPS_LE (10 << 16)
+#define KEXEC_ARCH_MIPS    ( 8 << 16)
+
+/* The artificial cap on the number of segments passed to kexec_load. */
+#define KEXEC_SEGMENT_MAX 16
+
+/*
+ * This structure is used to hold the arguments that are used when
+ * loading  kernel binaries.
+ */
+struct kexec_segment {
+       const void *buf;
+       size_t bufsz;
+       const void *mem;
+       size_t memsz;
+};
+
+
+#endif /* LINUX_KEXEC_H */
diff --git a/lib/libdss-include/linux/keyboard.h b/lib/libdss-include/linux/keyboard.h
new file mode 100644 (file)
index 0000000..b4be860
--- /dev/null
@@ -0,0 +1,443 @@
+#ifndef __LINUX_KEYBOARD_H
+#define __LINUX_KEYBOARD_H
+
+#include <linux/wait.h>
+
+#define KG_SHIFT       0
+#define KG_CTRL                2
+#define KG_ALT         3
+#define KG_ALTGR       1
+#define KG_SHIFTL      4
+#define KG_KANASHIFT   4
+#define KG_SHIFTR      5
+#define KG_CTRLL       6
+#define KG_CTRLR       7
+#define KG_CAPSSHIFT   8
+
+#define NR_SHIFT       9
+
+#define NR_KEYS                256
+#define MAX_NR_KEYMAPS 256
+/* This means 128Kb if all keymaps are allocated. Only the superuser
+       may increase the number of keymaps beyond MAX_NR_OF_USER_KEYMAPS. */
+#define MAX_NR_OF_USER_KEYMAPS 256     /* should be at least 7 */
+
+
+#define MAX_NR_FUNC    256     /* max nr of strings assigned to keys */
+
+#define KT_LATIN       0       /* we depend on this being zero */
+#define KT_LETTER      11      /* symbol that can be acted upon by CapsLock */
+#define KT_FN          1
+#define KT_SPEC                2
+#define KT_PAD         3
+#define KT_DEAD                4
+#define KT_CONS                5
+#define KT_CUR         6
+#define KT_SHIFT       7
+#define KT_META                8
+#define KT_ASCII       9
+#define KT_LOCK                10
+#define KT_SLOCK       12
+#define KT_DEAD2       13
+#define KT_BRL         14
+
+#define K(t,v)         (((t)<<8)|(v))
+#define KTYP(x)                ((x) >> 8)
+#define KVAL(x)                ((x) & 0xff)
+
+#define K_F1           K(KT_FN,0)
+#define K_F2           K(KT_FN,1)
+#define K_F3           K(KT_FN,2)
+#define K_F4           K(KT_FN,3)
+#define K_F5           K(KT_FN,4)
+#define K_F6           K(KT_FN,5)
+#define K_F7           K(KT_FN,6)
+#define K_F8           K(KT_FN,7)
+#define K_F9           K(KT_FN,8)
+#define K_F10          K(KT_FN,9)
+#define K_F11          K(KT_FN,10)
+#define K_F12          K(KT_FN,11)
+#define K_F13          K(KT_FN,12)
+#define K_F14          K(KT_FN,13)
+#define K_F15          K(KT_FN,14)
+#define K_F16          K(KT_FN,15)
+#define K_F17          K(KT_FN,16)
+#define K_F18          K(KT_FN,17)
+#define K_F19          K(KT_FN,18)
+#define K_F20          K(KT_FN,19)
+#define K_FIND         K(KT_FN,20)
+#define K_INSERT       K(KT_FN,21)
+#define K_REMOVE       K(KT_FN,22)
+#define K_SELECT       K(KT_FN,23)
+#define K_PGUP         K(KT_FN,24) /* PGUP is a synonym for PRIOR */
+#define K_PGDN         K(KT_FN,25) /* PGDN is a synonym for NEXT */
+#define K_MACRO                K(KT_FN,26)
+#define K_HELP         K(KT_FN,27)
+#define K_DO           K(KT_FN,28)
+#define K_PAUSE                K(KT_FN,29)
+#define K_F21          K(KT_FN,30)
+#define K_F22          K(KT_FN,31)
+#define K_F23          K(KT_FN,32)
+#define K_F24          K(KT_FN,33)
+#define K_F25          K(KT_FN,34)
+#define K_F26          K(KT_FN,35)
+#define K_F27          K(KT_FN,36)
+#define K_F28          K(KT_FN,37)
+#define K_F29          K(KT_FN,38)
+#define K_F30          K(KT_FN,39)
+#define K_F31          K(KT_FN,40)
+#define K_F32          K(KT_FN,41)
+#define K_F33          K(KT_FN,42)
+#define K_F34          K(KT_FN,43)
+#define K_F35          K(KT_FN,44)
+#define K_F36          K(KT_FN,45)
+#define K_F37          K(KT_FN,46)
+#define K_F38          K(KT_FN,47)
+#define K_F39          K(KT_FN,48)
+#define K_F40          K(KT_FN,49)
+#define K_F41          K(KT_FN,50)
+#define K_F42          K(KT_FN,51)
+#define K_F43          K(KT_FN,52)
+#define K_F44          K(KT_FN,53)
+#define K_F45          K(KT_FN,54)
+#define K_F46          K(KT_FN,55)
+#define K_F47          K(KT_FN,56)
+#define K_F48          K(KT_FN,57)
+#define K_F49          K(KT_FN,58)
+#define K_F50          K(KT_FN,59)
+#define K_F51          K(KT_FN,60)
+#define K_F52          K(KT_FN,61)
+#define K_F53          K(KT_FN,62)
+#define K_F54          K(KT_FN,63)
+#define K_F55          K(KT_FN,64)
+#define K_F56          K(KT_FN,65)
+#define K_F57          K(KT_FN,66)
+#define K_F58          K(KT_FN,67)
+#define K_F59          K(KT_FN,68)
+#define K_F60          K(KT_FN,69)
+#define K_F61          K(KT_FN,70)
+#define K_F62          K(KT_FN,71)
+#define K_F63          K(KT_FN,72)
+#define K_F64          K(KT_FN,73)
+#define K_F65          K(KT_FN,74)
+#define K_F66          K(KT_FN,75)
+#define K_F67          K(KT_FN,76)
+#define K_F68          K(KT_FN,77)
+#define K_F69          K(KT_FN,78)
+#define K_F70          K(KT_FN,79)
+#define K_F71          K(KT_FN,80)
+#define K_F72          K(KT_FN,81)
+#define K_F73          K(KT_FN,82)
+#define K_F74          K(KT_FN,83)
+#define K_F75          K(KT_FN,84)
+#define K_F76          K(KT_FN,85)
+#define K_F77          K(KT_FN,86)
+#define K_F78          K(KT_FN,87)
+#define K_F79          K(KT_FN,88)
+#define K_F80          K(KT_FN,89)
+#define K_F81          K(KT_FN,90)
+#define K_F82          K(KT_FN,91)
+#define K_F83          K(KT_FN,92)
+#define K_F84          K(KT_FN,93)
+#define K_F85          K(KT_FN,94)
+#define K_F86          K(KT_FN,95)
+#define K_F87          K(KT_FN,96)
+#define K_F88          K(KT_FN,97)
+#define K_F89          K(KT_FN,98)
+#define K_F90          K(KT_FN,99)
+#define K_F91          K(KT_FN,100)
+#define K_F92          K(KT_FN,101)
+#define K_F93          K(KT_FN,102)
+#define K_F94          K(KT_FN,103)
+#define K_F95          K(KT_FN,104)
+#define K_F96          K(KT_FN,105)
+#define K_F97          K(KT_FN,106)
+#define K_F98          K(KT_FN,107)
+#define K_F99          K(KT_FN,108)
+#define K_F100         K(KT_FN,109)
+#define K_F101         K(KT_FN,110)
+#define K_F102         K(KT_FN,111)
+#define K_F103         K(KT_FN,112)
+#define K_F104         K(KT_FN,113)
+#define K_F105         K(KT_FN,114)
+#define K_F106         K(KT_FN,115)
+#define K_F107         K(KT_FN,116)
+#define K_F108         K(KT_FN,117)
+#define K_F109         K(KT_FN,118)
+#define K_F110         K(KT_FN,119)
+#define K_F111         K(KT_FN,120)
+#define K_F112         K(KT_FN,121)
+#define K_F113         K(KT_FN,122)
+#define K_F114         K(KT_FN,123)
+#define K_F115         K(KT_FN,124)
+#define K_F116         K(KT_FN,125)
+#define K_F117         K(KT_FN,126)
+#define K_F118         K(KT_FN,127)
+#define K_F119         K(KT_FN,128)
+#define K_F120         K(KT_FN,129)
+#define K_F121         K(KT_FN,130)
+#define K_F122         K(KT_FN,131)
+#define K_F123         K(KT_FN,132)
+#define K_F124         K(KT_FN,133)
+#define K_F125         K(KT_FN,134)
+#define K_F126         K(KT_FN,135)
+#define K_F127         K(KT_FN,136)
+#define K_F128         K(KT_FN,137)
+#define K_F129         K(KT_FN,138)
+#define K_F130         K(KT_FN,139)
+#define K_F131         K(KT_FN,140)
+#define K_F132         K(KT_FN,141)
+#define K_F133         K(KT_FN,142)
+#define K_F134         K(KT_FN,143)
+#define K_F135         K(KT_FN,144)
+#define K_F136         K(KT_FN,145)
+#define K_F137         K(KT_FN,146)
+#define K_F138         K(KT_FN,147)
+#define K_F139         K(KT_FN,148)
+#define K_F140         K(KT_FN,149)
+#define K_F141         K(KT_FN,150)
+#define K_F142         K(KT_FN,151)
+#define K_F143         K(KT_FN,152)
+#define K_F144         K(KT_FN,153)
+#define K_F145         K(KT_FN,154)
+#define K_F146         K(KT_FN,155)
+#define K_F147         K(KT_FN,156)
+#define K_F148         K(KT_FN,157)
+#define K_F149         K(KT_FN,158)
+#define K_F150         K(KT_FN,159)
+#define K_F151         K(KT_FN,160)
+#define K_F152         K(KT_FN,161)
+#define K_F153         K(KT_FN,162)
+#define K_F154         K(KT_FN,163)
+#define K_F155         K(KT_FN,164)
+#define K_F156         K(KT_FN,165)
+#define K_F157         K(KT_FN,166)
+#define K_F158         K(KT_FN,167)
+#define K_F159         K(KT_FN,168)
+#define K_F160         K(KT_FN,169)
+#define K_F161         K(KT_FN,170)
+#define K_F162         K(KT_FN,171)
+#define K_F163         K(KT_FN,172)
+#define K_F164         K(KT_FN,173)
+#define K_F165         K(KT_FN,174)
+#define K_F166         K(KT_FN,175)
+#define K_F167         K(KT_FN,176)
+#define K_F168         K(KT_FN,177)
+#define K_F169         K(KT_FN,178)
+#define K_F170         K(KT_FN,179)
+#define K_F171         K(KT_FN,180)
+#define K_F172         K(KT_FN,181)
+#define K_F173         K(KT_FN,182)
+#define K_F174         K(KT_FN,183)
+#define K_F175         K(KT_FN,184)
+#define K_F176         K(KT_FN,185)
+#define K_F177         K(KT_FN,186)
+#define K_F178         K(KT_FN,187)
+#define K_F179         K(KT_FN,188)
+#define K_F180         K(KT_FN,189)
+#define K_F181         K(KT_FN,190)
+#define K_F182         K(KT_FN,191)
+#define K_F183         K(KT_FN,192)
+#define K_F184         K(KT_FN,193)
+#define K_F185         K(KT_FN,194)
+#define K_F186         K(KT_FN,195)
+#define K_F187         K(KT_FN,196)
+#define K_F188         K(KT_FN,197)
+#define K_F189         K(KT_FN,198)
+#define K_F190         K(KT_FN,199)
+#define K_F191         K(KT_FN,200)
+#define K_F192         K(KT_FN,201)
+#define K_F193         K(KT_FN,202)
+#define K_F194         K(KT_FN,203)
+#define K_F195         K(KT_FN,204)
+#define K_F196         K(KT_FN,205)
+#define K_F197         K(KT_FN,206)
+#define K_F198         K(KT_FN,207)
+#define K_F199         K(KT_FN,208)
+#define K_F200         K(KT_FN,209)
+#define K_F201         K(KT_FN,210)
+#define K_F202         K(KT_FN,211)
+#define K_F203         K(KT_FN,212)
+#define K_F204         K(KT_FN,213)
+#define K_F205         K(KT_FN,214)
+#define K_F206         K(KT_FN,215)
+#define K_F207         K(KT_FN,216)
+#define K_F208         K(KT_FN,217)
+#define K_F209         K(KT_FN,218)
+#define K_F210         K(KT_FN,219)
+#define K_F211         K(KT_FN,220)
+#define K_F212         K(KT_FN,221)
+#define K_F213         K(KT_FN,222)
+#define K_F214         K(KT_FN,223)
+#define K_F215         K(KT_FN,224)
+#define K_F216         K(KT_FN,225)
+#define K_F217         K(KT_FN,226)
+#define K_F218         K(KT_FN,227)
+#define K_F219         K(KT_FN,228)
+#define K_F220         K(KT_FN,229)
+#define K_F221         K(KT_FN,230)
+#define K_F222         K(KT_FN,231)
+#define K_F223         K(KT_FN,232)
+#define K_F224         K(KT_FN,233)
+#define K_F225         K(KT_FN,234)
+#define K_F226         K(KT_FN,235)
+#define K_F227         K(KT_FN,236)
+#define K_F228         K(KT_FN,237)
+#define K_F229         K(KT_FN,238)
+#define K_F230         K(KT_FN,239)
+#define K_F231         K(KT_FN,240)
+#define K_F232         K(KT_FN,241)
+#define K_F233         K(KT_FN,242)
+#define K_F234         K(KT_FN,243)
+#define K_F235         K(KT_FN,244)
+#define K_F236         K(KT_FN,245)
+#define K_F237         K(KT_FN,246)
+#define K_F238         K(KT_FN,247)
+#define K_F239         K(KT_FN,248)
+#define K_F240         K(KT_FN,249)
+#define K_F241         K(KT_FN,250)
+#define K_F242         K(KT_FN,251)
+#define K_F243         K(KT_FN,252)
+#define K_F244         K(KT_FN,253)
+#define K_F245         K(KT_FN,254)
+#define K_UNDO         K(KT_FN,255)
+
+
+#define K_HOLE         K(KT_SPEC,0)
+#define K_ENTER                K(KT_SPEC,1)
+#define K_SH_REGS      K(KT_SPEC,2)
+#define K_SH_MEM       K(KT_SPEC,3)
+#define K_SH_STAT      K(KT_SPEC,4)
+#define K_BREAK                K(KT_SPEC,5)
+#define K_CONS         K(KT_SPEC,6)
+#define K_CAPS         K(KT_SPEC,7)
+#define K_NUM          K(KT_SPEC,8)
+#define K_HOLD         K(KT_SPEC,9)
+#define K_SCROLLFORW   K(KT_SPEC,10)
+#define K_SCROLLBACK   K(KT_SPEC,11)
+#define K_BOOT         K(KT_SPEC,12)
+#define K_CAPSON       K(KT_SPEC,13)
+#define K_COMPOSE      K(KT_SPEC,14)
+#define K_SAK          K(KT_SPEC,15)
+#define K_DECRCONSOLE  K(KT_SPEC,16)
+#define K_INCRCONSOLE  K(KT_SPEC,17)
+#define K_SPAWNCONSOLE K(KT_SPEC,18)
+#define K_BARENUMLOCK  K(KT_SPEC,19)
+
+#define K_ALLOCATED    K(KT_SPEC,126) /* dynamically allocated keymap */
+#define K_NOSUCHMAP    K(KT_SPEC,127) /* returned by KDGKBENT */
+
+#define K_P0           K(KT_PAD,0)
+#define K_P1           K(KT_PAD,1)
+#define K_P2           K(KT_PAD,2)
+#define K_P3           K(KT_PAD,3)
+#define K_P4           K(KT_PAD,4)
+#define K_P5           K(KT_PAD,5)
+#define K_P6           K(KT_PAD,6)
+#define K_P7           K(KT_PAD,7)
+#define K_P8           K(KT_PAD,8)
+#define K_P9           K(KT_PAD,9)
+#define K_PPLUS                K(KT_PAD,10)    /* key-pad plus */
+#define K_PMINUS       K(KT_PAD,11)    /* key-pad minus */
+#define K_PSTAR                K(KT_PAD,12)    /* key-pad asterisk (star) */
+#define K_PSLASH       K(KT_PAD,13)    /* key-pad slash */
+#define K_PENTER       K(KT_PAD,14)    /* key-pad enter */
+#define K_PCOMMA       K(KT_PAD,15)    /* key-pad comma: kludge... */
+#define K_PDOT         K(KT_PAD,16)    /* key-pad dot (period): kludge... */
+#define K_PPLUSMINUS   K(KT_PAD,17)    /* key-pad plus/minus */
+#define K_PPARENL      K(KT_PAD,18)    /* key-pad left parenthesis */
+#define K_PPARENR      K(KT_PAD,19)    /* key-pad right parenthesis */
+
+#define NR_PAD         20
+
+#define K_DGRAVE       K(KT_DEAD,0)
+#define K_DACUTE       K(KT_DEAD,1)
+#define K_DCIRCM       K(KT_DEAD,2)
+#define K_DTILDE       K(KT_DEAD,3)
+#define K_DDIERE       K(KT_DEAD,4)
+#define K_DCEDIL       K(KT_DEAD,5)
+
+#define NR_DEAD                6
+
+#define K_DOWN         K(KT_CUR,0)
+#define K_LEFT         K(KT_CUR,1)
+#define K_RIGHT                K(KT_CUR,2)
+#define K_UP           K(KT_CUR,3)
+
+#define K_SHIFT                K(KT_SHIFT,KG_SHIFT)
+#define K_CTRL         K(KT_SHIFT,KG_CTRL)
+#define K_ALT          K(KT_SHIFT,KG_ALT)
+#define K_ALTGR                K(KT_SHIFT,KG_ALTGR)
+#define K_SHIFTL       K(KT_SHIFT,KG_SHIFTL)
+#define K_SHIFTR       K(KT_SHIFT,KG_SHIFTR)
+#define K_CTRLL                K(KT_SHIFT,KG_CTRLL)
+#define K_CTRLR                K(KT_SHIFT,KG_CTRLR)
+#define K_CAPSSHIFT    K(KT_SHIFT,KG_CAPSSHIFT)
+
+#define K_ASC0         K(KT_ASCII,0)
+#define K_ASC1         K(KT_ASCII,1)
+#define K_ASC2         K(KT_ASCII,2)
+#define K_ASC3         K(KT_ASCII,3)
+#define K_ASC4         K(KT_ASCII,4)
+#define K_ASC5         K(KT_ASCII,5)
+#define K_ASC6         K(KT_ASCII,6)
+#define K_ASC7         K(KT_ASCII,7)
+#define K_ASC8         K(KT_ASCII,8)
+#define K_ASC9         K(KT_ASCII,9)
+#define K_HEX0         K(KT_ASCII,10)
+#define K_HEX1         K(KT_ASCII,11)
+#define K_HEX2         K(KT_ASCII,12)
+#define K_HEX3         K(KT_ASCII,13)
+#define K_HEX4         K(KT_ASCII,14)
+#define K_HEX5         K(KT_ASCII,15)
+#define K_HEX6         K(KT_ASCII,16)
+#define K_HEX7         K(KT_ASCII,17)
+#define K_HEX8         K(KT_ASCII,18)
+#define K_HEX9         K(KT_ASCII,19)
+#define K_HEXa         K(KT_ASCII,20)
+#define K_HEXb         K(KT_ASCII,21)
+#define K_HEXc         K(KT_ASCII,22)
+#define K_HEXd         K(KT_ASCII,23)
+#define K_HEXe         K(KT_ASCII,24)
+#define K_HEXf         K(KT_ASCII,25)
+
+#define NR_ASCII       26
+
+#define K_SHIFTLOCK    K(KT_LOCK,KG_SHIFT)
+#define K_CTRLLOCK     K(KT_LOCK,KG_CTRL)
+#define K_ALTLOCK      K(KT_LOCK,KG_ALT)
+#define K_ALTGRLOCK    K(KT_LOCK,KG_ALTGR)
+#define K_SHIFTLLOCK   K(KT_LOCK,KG_SHIFTL)
+#define K_SHIFTRLOCK   K(KT_LOCK,KG_SHIFTR)
+#define K_CTRLLLOCK    K(KT_LOCK,KG_CTRLL)
+#define K_CTRLRLOCK    K(KT_LOCK,KG_CTRLR)
+#define K_CAPSSHIFTLOCK        K(KT_LOCK,KG_CAPSSHIFT)
+
+#define K_SHIFT_SLOCK  K(KT_SLOCK,KG_SHIFT)
+#define K_CTRL_SLOCK   K(KT_SLOCK,KG_CTRL)
+#define K_ALT_SLOCK    K(KT_SLOCK,KG_ALT)
+#define K_ALTGR_SLOCK  K(KT_SLOCK,KG_ALTGR)
+#define K_SHIFTL_SLOCK K(KT_SLOCK,KG_SHIFTL)
+#define K_SHIFTR_SLOCK K(KT_SLOCK,KG_SHIFTR)
+#define K_CTRLL_SLOCK  K(KT_SLOCK,KG_CTRLL)
+#define K_CTRLR_SLOCK  K(KT_SLOCK,KG_CTRLR)
+#define K_CAPSSHIFT_SLOCK      K(KT_SLOCK,KG_CAPSSHIFT)
+
+#define NR_LOCK                9
+
+#define K_BRL_BLANK     K(KT_BRL, 0)
+#define K_BRL_DOT1      K(KT_BRL, 1)
+#define K_BRL_DOT2      K(KT_BRL, 2)
+#define K_BRL_DOT3      K(KT_BRL, 3)
+#define K_BRL_DOT4      K(KT_BRL, 4)
+#define K_BRL_DOT5      K(KT_BRL, 5)
+#define K_BRL_DOT6      K(KT_BRL, 6)
+#define K_BRL_DOT7      K(KT_BRL, 7)
+#define K_BRL_DOT8      K(KT_BRL, 8)
+#define K_BRL_DOT9      K(KT_BRL, 9)
+#define K_BRL_DOT10     K(KT_BRL, 10)
+
+#define NR_BRL         11
+
+#define MAX_DIACR      256
+#endif /* __LINUX_KEYBOARD_H */
diff --git a/lib/libdss-include/linux/keyctl.h b/lib/libdss-include/linux/keyctl.h
new file mode 100644 (file)
index 0000000..840cb99
--- /dev/null
@@ -0,0 +1,61 @@
+/* keyctl.h: keyctl command IDs
+ *
+ * Copyright (C) 2004, 2008 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_KEYCTL_H
+#define _LINUX_KEYCTL_H
+
+/* special process keyring shortcut IDs */
+#define KEY_SPEC_THREAD_KEYRING                -1      /* - key ID for thread-specific keyring */
+#define KEY_SPEC_PROCESS_KEYRING       -2      /* - key ID for process-specific keyring */
+#define KEY_SPEC_SESSION_KEYRING       -3      /* - key ID for session-specific keyring */
+#define KEY_SPEC_USER_KEYRING          -4      /* - key ID for UID-specific keyring */
+#define KEY_SPEC_USER_SESSION_KEYRING  -5      /* - key ID for UID-session keyring */
+#define KEY_SPEC_GROUP_KEYRING         -6      /* - key ID for GID-specific keyring */
+#define KEY_SPEC_REQKEY_AUTH_KEY       -7      /* - key ID for assumed request_key auth key */
+#define KEY_SPEC_REQUESTOR_KEYRING     -8      /* - key ID for request_key() dest keyring */
+
+/* request-key default keyrings */
+#define KEY_REQKEY_DEFL_NO_CHANGE              -1
+#define KEY_REQKEY_DEFL_DEFAULT                        0
+#define KEY_REQKEY_DEFL_THREAD_KEYRING         1
+#define KEY_REQKEY_DEFL_PROCESS_KEYRING                2
+#define KEY_REQKEY_DEFL_SESSION_KEYRING                3
+#define KEY_REQKEY_DEFL_USER_KEYRING           4
+#define KEY_REQKEY_DEFL_USER_SESSION_KEYRING   5
+#define KEY_REQKEY_DEFL_GROUP_KEYRING          6
+#define KEY_REQKEY_DEFL_REQUESTOR_KEYRING      7
+
+/* keyctl commands */
+#define KEYCTL_GET_KEYRING_ID          0       /* ask for a keyring's ID */
+#define KEYCTL_JOIN_SESSION_KEYRING    1       /* join or start named session keyring */
+#define KEYCTL_UPDATE                  2       /* update a key */
+#define KEYCTL_REVOKE                  3       /* revoke a key */
+#define KEYCTL_CHOWN                   4       /* set ownership of a key */
+#define KEYCTL_SETPERM                 5       /* set perms on a key */
+#define KEYCTL_DESCRIBE                        6       /* describe a key */
+#define KEYCTL_CLEAR                   7       /* clear contents of a keyring */
+#define KEYCTL_LINK                    8       /* link a key into a keyring */
+#define KEYCTL_UNLINK                  9       /* unlink a key from a keyring */
+#define KEYCTL_SEARCH                  10      /* search for a key in a keyring */
+#define KEYCTL_READ                    11      /* read a key or keyring's contents */
+#define KEYCTL_INSTANTIATE             12      /* instantiate a partially constructed key */
+#define KEYCTL_NEGATE                  13      /* negate a partially constructed key */
+#define KEYCTL_SET_REQKEY_KEYRING      14      /* set default request-key keyring */
+#define KEYCTL_SET_TIMEOUT             15      /* set key timeout */
+#define KEYCTL_ASSUME_AUTHORITY                16      /* assume request_key() authorisation */
+#define KEYCTL_GET_SECURITY            17      /* get key security label */
+#define KEYCTL_SESSION_TO_PARENT       18      /* apply session keyring to parent process */
+#define KEYCTL_REJECT                  19      /* reject a partially constructed key */
+#define KEYCTL_INSTANTIATE_IOV         20      /* instantiate a partially constructed key */
+#define KEYCTL_INVALIDATE              21      /* invalidate a key */
+#define KEYCTL_GET_PERSISTENT          22      /* get a user's persistent keyring */
+
+#endif /*  _LINUX_KEYCTL_H */
diff --git a/lib/libdss-include/linux/kvm.h b/lib/libdss-include/linux/kvm.h
new file mode 100644 (file)
index 0000000..dcc410e
--- /dev/null
@@ -0,0 +1,1272 @@
+#ifndef __LINUX_KVM_H
+#define __LINUX_KVM_H
+
+/*
+ * Userspace interface for /dev/kvm - kernel based virtual machine
+ *
+ * Note: you must update KVM_API_VERSION if you change this interface.
+ */
+
+#include <linux/types.h>
+
+#include <linux/ioctl.h>
+#include <asm/kvm.h>
+
+#define KVM_API_VERSION 12
+
+/* *** Deprecated interfaces *** */
+
+#define KVM_TRC_SHIFT           16
+
+#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
+#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
+
+#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
+#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
+#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
+
+#define KVM_TRC_HEAD_SIZE       12
+#define KVM_TRC_CYCLE_SIZE      8
+#define KVM_TRC_EXTRA_MAX       7
+
+#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
+#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
+#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
+#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
+#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
+#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
+#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
+#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
+#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
+#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
+#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
+#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
+#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
+#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
+#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
+#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
+#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
+#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
+#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
+#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
+#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
+#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
+#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
+#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
+
+struct kvm_user_trace_setup {
+       __u32 buf_size;
+       __u32 buf_nr;
+};
+
+#define __KVM_DEPRECATED_MAIN_W_0x06 \
+       _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
+#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
+#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
+
+#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
+
+struct kvm_breakpoint {
+       __u32 enabled;
+       __u32 padding;
+       __u64 address;
+};
+
+struct kvm_debug_guest {
+       __u32 enabled;
+       __u32 pad;
+       struct kvm_breakpoint breakpoints[4];
+       __u32 singlestep;
+};
+
+#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
+
+/* *** End of deprecated interfaces *** */
+
+
+/* for KVM_CREATE_MEMORY_REGION */
+struct kvm_memory_region {
+       __u32 slot;
+       __u32 flags;
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+};
+
+/* for KVM_SET_USER_MEMORY_REGION */
+struct kvm_userspace_memory_region {
+       __u32 slot;
+       __u32 flags;
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+       __u64 userspace_addr; /* start of the userspace allocated memory */
+};
+
+/*
+ * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace,
+ * other bits are reserved for kvm internal use which are defined in
+ * include/linux/kvm_host.h.
+ */
+#define KVM_MEM_LOG_DIRTY_PAGES        (1UL << 0)
+#define KVM_MEM_READONLY       (1UL << 1)
+
+/* for KVM_IRQ_LINE */
+struct kvm_irq_level {
+       /*
+        * ACPI gsi notion of irq.
+        * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
+        * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
+        * For ARM: See Documentation/virtual/kvm/api.txt
+        */
+       union {
+               __u32 irq;
+               __s32 status;
+       };
+       __u32 level;
+};
+
+
+struct kvm_irqchip {
+       __u32 chip_id;
+       __u32 pad;
+        union {
+               char dummy[512];  /* reserving space */
+#ifdef __KVM_HAVE_PIT
+               struct kvm_pic_state pic;
+#endif
+#ifdef __KVM_HAVE_IOAPIC
+               struct kvm_ioapic_state ioapic;
+#endif
+       } chip;
+};
+
+/* for KVM_CREATE_PIT2 */
+struct kvm_pit_config {
+       __u32 flags;
+       __u32 pad[15];
+};
+
+#define KVM_PIT_SPEAKER_DUMMY     1
+
+struct kvm_s390_skeys {
+       __u64 start_gfn;
+       __u64 count;
+       __u64 skeydata_addr;
+       __u32 flags;
+       __u32 reserved[9];
+};
+#define KVM_S390_GET_SKEYS_NONE   1
+#define KVM_S390_SKEYS_MAX        1048576
+
+#define KVM_EXIT_UNKNOWN          0
+#define KVM_EXIT_EXCEPTION        1
+#define KVM_EXIT_IO               2
+#define KVM_EXIT_HYPERCALL        3
+#define KVM_EXIT_DEBUG            4
+#define KVM_EXIT_HLT              5
+#define KVM_EXIT_MMIO             6
+#define KVM_EXIT_IRQ_WINDOW_OPEN  7
+#define KVM_EXIT_SHUTDOWN         8
+#define KVM_EXIT_FAIL_ENTRY       9
+#define KVM_EXIT_INTR             10
+#define KVM_EXIT_SET_TPR          11
+#define KVM_EXIT_TPR_ACCESS       12
+#define KVM_EXIT_S390_SIEIC       13
+#define KVM_EXIT_S390_RESET       14
+#define KVM_EXIT_DCR              15 /* deprecated */
+#define KVM_EXIT_NMI              16
+#define KVM_EXIT_INTERNAL_ERROR   17
+#define KVM_EXIT_OSI              18
+#define KVM_EXIT_PAPR_HCALL      19
+#define KVM_EXIT_S390_UCONTROL   20
+#define KVM_EXIT_WATCHDOG         21
+#define KVM_EXIT_S390_TSCH        22
+#define KVM_EXIT_EPR              23
+#define KVM_EXIT_SYSTEM_EVENT     24
+#define KVM_EXIT_S390_STSI        25
+#define KVM_EXIT_IOAPIC_EOI       26
+
+/* For KVM_EXIT_INTERNAL_ERROR */
+/* Emulate instruction failed. */
+#define KVM_INTERNAL_ERROR_EMULATION   1
+/* Encounter unexpected simultaneous exceptions. */
+#define KVM_INTERNAL_ERROR_SIMUL_EX    2
+/* Encounter unexpected vm-exit due to delivery event. */
+#define KVM_INTERNAL_ERROR_DELIVERY_EV 3
+
+/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
+struct kvm_run {
+       /* in */
+       __u8 request_interrupt_window;
+       __u8 padding1[7];
+
+       /* out */
+       __u32 exit_reason;
+       __u8 ready_for_interrupt_injection;
+       __u8 if_flag;
+       __u16 flags;
+
+       /* in (pre_kvm_run), out (post_kvm_run) */
+       __u64 cr8;
+       __u64 apic_base;
+
+#ifdef __KVM_S390
+       /* the processor status word for s390 */
+       __u64 psw_mask; /* psw upper half */
+       __u64 psw_addr; /* psw lower half */
+#endif
+       union {
+               /* KVM_EXIT_UNKNOWN */
+               struct {
+                       __u64 hardware_exit_reason;
+               } hw;
+               /* KVM_EXIT_FAIL_ENTRY */
+               struct {
+                       __u64 hardware_entry_failure_reason;
+               } fail_entry;
+               /* KVM_EXIT_EXCEPTION */
+               struct {
+                       __u32 exception;
+                       __u32 error_code;
+               } ex;
+               /* KVM_EXIT_IO */
+               struct {
+#define KVM_EXIT_IO_IN  0
+#define KVM_EXIT_IO_OUT 1
+                       __u8 direction;
+                       __u8 size; /* bytes */
+                       __u16 port;
+                       __u32 count;
+                       __u64 data_offset; /* relative to kvm_run start */
+               } io;
+               /* KVM_EXIT_DEBUG */
+               struct {
+                       struct kvm_debug_exit_arch arch;
+               } debug;
+               /* KVM_EXIT_MMIO */
+               struct {
+                       __u64 phys_addr;
+                       __u8  data[8];
+                       __u32 len;
+                       __u8  is_write;
+               } mmio;
+               /* KVM_EXIT_HYPERCALL */
+               struct {
+                       __u64 nr;
+                       __u64 args[6];
+                       __u64 ret;
+                       __u32 longmode;
+                       __u32 pad;
+               } hypercall;
+               /* KVM_EXIT_TPR_ACCESS */
+               struct {
+                       __u64 rip;
+                       __u32 is_write;
+                       __u32 pad;
+               } tpr_access;
+               /* KVM_EXIT_S390_SIEIC */
+               struct {
+                       __u8 icptcode;
+                       __u16 ipa;
+                       __u32 ipb;
+               } s390_sieic;
+               /* KVM_EXIT_S390_RESET */
+#define KVM_S390_RESET_POR       1
+#define KVM_S390_RESET_CLEAR     2
+#define KVM_S390_RESET_SUBSYSTEM 4
+#define KVM_S390_RESET_CPU_INIT  8
+#define KVM_S390_RESET_IPL       16
+               __u64 s390_reset_flags;
+               /* KVM_EXIT_S390_UCONTROL */
+               struct {
+                       __u64 trans_exc_code;
+                       __u32 pgm_code;
+               } s390_ucontrol;
+               /* KVM_EXIT_DCR (deprecated) */
+               struct {
+                       __u32 dcrn;
+                       __u32 data;
+                       __u8  is_write;
+               } dcr;
+               /* KVM_EXIT_INTERNAL_ERROR */
+               struct {
+                       __u32 suberror;
+                       /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
+                       __u32 ndata;
+                       __u64 data[16];
+               } internal;
+               /* KVM_EXIT_OSI */
+               struct {
+                       __u64 gprs[32];
+               } osi;
+               /* KVM_EXIT_PAPR_HCALL */
+               struct {
+                       __u64 nr;
+                       __u64 ret;
+                       __u64 args[9];
+               } papr_hcall;
+               /* KVM_EXIT_S390_TSCH */
+               struct {
+                       __u16 subchannel_id;
+                       __u16 subchannel_nr;
+                       __u32 io_int_parm;
+                       __u32 io_int_word;
+                       __u32 ipb;
+                       __u8 dequeued;
+               } s390_tsch;
+               /* KVM_EXIT_EPR */
+               struct {
+                       __u32 epr;
+               } epr;
+               /* KVM_EXIT_SYSTEM_EVENT */
+               struct {
+#define KVM_SYSTEM_EVENT_SHUTDOWN       1
+#define KVM_SYSTEM_EVENT_RESET          2
+#define KVM_SYSTEM_EVENT_CRASH          3
+                       __u32 type;
+                       __u64 flags;
+               } system_event;
+               /* KVM_EXIT_S390_STSI */
+               struct {
+                       __u64 addr;
+                       __u8 ar;
+                       __u8 reserved;
+                       __u8 fc;
+                       __u8 sel1;
+                       __u16 sel2;
+               } s390_stsi;
+               /* KVM_EXIT_IOAPIC_EOI */
+               struct {
+                       __u8 vector;
+               } eoi;
+               /* Fix the size of the union. */
+               char padding[256];
+       };
+
+       /*
+        * shared registers between kvm and userspace.
+        * kvm_valid_regs specifies the register classes set by the host
+        * kvm_dirty_regs specified the register classes dirtied by userspace
+        * struct kvm_sync_regs is architecture specific, as well as the
+        * bits for kvm_valid_regs and kvm_dirty_regs
+        */
+       __u64 kvm_valid_regs;
+       __u64 kvm_dirty_regs;
+       union {
+               struct kvm_sync_regs regs;
+               char padding[2048];
+       } s;
+};
+
+/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
+
+struct kvm_coalesced_mmio_zone {
+       __u64 addr;
+       __u32 size;
+       __u32 pad;
+};
+
+struct kvm_coalesced_mmio {
+       __u64 phys_addr;
+       __u32 len;
+       __u32 pad;
+       __u8  data[8];
+};
+
+struct kvm_coalesced_mmio_ring {
+       __u32 first, last;
+       struct kvm_coalesced_mmio coalesced_mmio[0];
+};
+
+#define KVM_COALESCED_MMIO_MAX \
+       ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
+        sizeof(struct kvm_coalesced_mmio))
+
+/* for KVM_TRANSLATE */
+struct kvm_translation {
+       /* in */
+       __u64 linear_address;
+
+       /* out */
+       __u64 physical_address;
+       __u8  valid;
+       __u8  writeable;
+       __u8  usermode;
+       __u8  pad[5];
+};
+
+/* for KVM_S390_MEM_OP */
+struct kvm_s390_mem_op {
+       /* in */
+       __u64 gaddr;            /* the guest address */
+       __u64 flags;            /* flags */
+       __u32 size;             /* amount of bytes */
+       __u32 op;               /* type of operation */
+       __u64 buf;              /* buffer in userspace */
+       __u8 ar;                /* the access register number */
+       __u8 reserved[31];      /* should be set to 0 */
+};
+/* types for kvm_s390_mem_op->op */
+#define KVM_S390_MEMOP_LOGICAL_READ    0
+#define KVM_S390_MEMOP_LOGICAL_WRITE   1
+/* flags for kvm_s390_mem_op->flags */
+#define KVM_S390_MEMOP_F_CHECK_ONLY            (1ULL << 0)
+#define KVM_S390_MEMOP_F_INJECT_EXCEPTION      (1ULL << 1)
+
+/* for KVM_INTERRUPT */
+struct kvm_interrupt {
+       /* in */
+       __u32 irq;
+};
+
+/* for KVM_GET_DIRTY_LOG */
+struct kvm_dirty_log {
+       __u32 slot;
+       __u32 padding1;
+       union {
+               void *dirty_bitmap; /* one bit per page */
+               __u64 padding2;
+       };
+};
+
+/* for KVM_SET_SIGNAL_MASK */
+struct kvm_signal_mask {
+       __u32 len;
+       __u8  sigset[0];
+};
+
+/* for KVM_TPR_ACCESS_REPORTING */
+struct kvm_tpr_access_ctl {
+       __u32 enabled;
+       __u32 flags;
+       __u32 reserved[8];
+};
+
+/* for KVM_SET_VAPIC_ADDR */
+struct kvm_vapic_addr {
+       __u64 vapic_addr;
+};
+
+/* for KVM_SET_MP_STATE */
+
+/* not all states are valid on all architectures */
+#define KVM_MP_STATE_RUNNABLE          0
+#define KVM_MP_STATE_UNINITIALIZED     1
+#define KVM_MP_STATE_INIT_RECEIVED     2
+#define KVM_MP_STATE_HALTED            3
+#define KVM_MP_STATE_SIPI_RECEIVED     4
+#define KVM_MP_STATE_STOPPED           5
+#define KVM_MP_STATE_CHECK_STOP        6
+#define KVM_MP_STATE_OPERATING         7
+#define KVM_MP_STATE_LOAD              8
+
+struct kvm_mp_state {
+       __u32 mp_state;
+};
+
+struct kvm_s390_psw {
+       __u64 mask;
+       __u64 addr;
+};
+
+/* valid values for type in kvm_s390_interrupt */
+#define KVM_S390_SIGP_STOP             0xfffe0000u
+#define KVM_S390_PROGRAM_INT           0xfffe0001u
+#define KVM_S390_SIGP_SET_PREFIX       0xfffe0002u
+#define KVM_S390_RESTART               0xfffe0003u
+#define KVM_S390_INT_PFAULT_INIT       0xfffe0004u
+#define KVM_S390_INT_PFAULT_DONE       0xfffe0005u
+#define KVM_S390_MCHK                  0xfffe1000u
+#define KVM_S390_INT_CLOCK_COMP                0xffff1004u
+#define KVM_S390_INT_CPU_TIMER         0xffff1005u
+#define KVM_S390_INT_VIRTIO            0xffff2603u
+#define KVM_S390_INT_SERVICE           0xffff2401u
+#define KVM_S390_INT_EMERGENCY         0xffff1201u
+#define KVM_S390_INT_EXTERNAL_CALL     0xffff1202u
+/* Anything below 0xfffe0000u is taken by INT_IO */
+#define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
+       (((schid)) |                           \
+        ((ssid) << 16) |                      \
+        ((cssid) << 18) |                     \
+        ((ai) << 26))
+#define KVM_S390_INT_IO_MIN            0x00000000u
+#define KVM_S390_INT_IO_MAX            0xfffdffffu
+#define KVM_S390_INT_IO_AI_MASK                0x04000000u
+
+
+struct kvm_s390_interrupt {
+       __u32 type;
+       __u32 parm;
+       __u64 parm64;
+};
+
+struct kvm_s390_io_info {
+       __u16 subchannel_id;
+       __u16 subchannel_nr;
+       __u32 io_int_parm;
+       __u32 io_int_word;
+};
+
+struct kvm_s390_ext_info {
+       __u32 ext_params;
+       __u32 pad;
+       __u64 ext_params2;
+};
+
+struct kvm_s390_pgm_info {
+       __u64 trans_exc_code;
+       __u64 mon_code;
+       __u64 per_address;
+       __u32 data_exc_code;
+       __u16 code;
+       __u16 mon_class_nr;
+       __u8 per_code;
+       __u8 per_atmid;
+       __u8 exc_access_id;
+       __u8 per_access_id;
+       __u8 op_access_id;
+       __u8 pad[3];
+};
+
+struct kvm_s390_prefix_info {
+       __u32 address;
+};
+
+struct kvm_s390_extcall_info {
+       __u16 code;
+};
+
+struct kvm_s390_emerg_info {
+       __u16 code;
+};
+
+#define KVM_S390_STOP_FLAG_STORE_STATUS        0x01
+struct kvm_s390_stop_info {
+       __u32 flags;
+};
+
+struct kvm_s390_mchk_info {
+       __u64 cr14;
+       __u64 mcic;
+       __u64 failing_storage_address;
+       __u32 ext_damage_code;
+       __u32 pad;
+       __u8 fixed_logout[16];
+};
+
+struct kvm_s390_irq {
+       __u64 type;
+       union {
+               struct kvm_s390_io_info io;
+               struct kvm_s390_ext_info ext;
+               struct kvm_s390_pgm_info pgm;
+               struct kvm_s390_emerg_info emerg;
+               struct kvm_s390_extcall_info extcall;
+               struct kvm_s390_prefix_info prefix;
+               struct kvm_s390_stop_info stop;
+               struct kvm_s390_mchk_info mchk;
+               char reserved[64];
+       } u;
+};
+
+struct kvm_s390_irq_state {
+       __u64 buf;
+       __u32 flags;
+       __u32 len;
+       __u32 reserved[4];
+};
+
+/* for KVM_SET_GUEST_DEBUG */
+
+#define KVM_GUESTDBG_ENABLE            0x00000001
+#define KVM_GUESTDBG_SINGLESTEP                0x00000002
+
+struct kvm_guest_debug {
+       __u32 control;
+       __u32 pad;
+       struct kvm_guest_debug_arch arch;
+};
+
+enum {
+       kvm_ioeventfd_flag_nr_datamatch,
+       kvm_ioeventfd_flag_nr_pio,
+       kvm_ioeventfd_flag_nr_deassign,
+       kvm_ioeventfd_flag_nr_virtio_ccw_notify,
+       kvm_ioeventfd_flag_nr_fast_mmio,
+       kvm_ioeventfd_flag_nr_max,
+};
+
+#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
+#define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
+#define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
+#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
+       (1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
+
+#define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
+
+struct kvm_ioeventfd {
+       __u64 datamatch;
+       __u64 addr;        /* legal pio/mmio address */
+       __u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
+       __s32 fd;
+       __u32 flags;
+       __u8  pad[36];
+};
+
+/* for KVM_ENABLE_CAP */
+struct kvm_enable_cap {
+       /* in */
+       __u32 cap;
+       __u32 flags;
+       __u64 args[4];
+       __u8  pad[64];
+};
+
+/* for KVM_PPC_GET_PVINFO */
+struct kvm_ppc_pvinfo {
+       /* out */
+       __u32 flags;
+       __u32 hcall[4];
+       __u8  pad[108];
+};
+
+/* for KVM_PPC_GET_SMMU_INFO */
+#define KVM_PPC_PAGE_SIZES_MAX_SZ      8
+
+struct kvm_ppc_one_page_size {
+       __u32 page_shift;       /* Page shift (or 0) */
+       __u32 pte_enc;          /* Encoding in the HPTE (>>12) */
+};
+
+struct kvm_ppc_one_seg_page_size {
+       __u32 page_shift;       /* Base page shift of segment (or 0) */
+       __u32 slb_enc;          /* SLB encoding for BookS */
+       struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
+};
+
+#define KVM_PPC_PAGE_SIZES_REAL                0x00000001
+#define KVM_PPC_1T_SEGMENTS            0x00000002
+
+struct kvm_ppc_smmu_info {
+       __u64 flags;
+       __u32 slb_size;
+       __u32 pad;
+       struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
+};
+
+#define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)
+
+#define KVMIO 0xAE
+
+/* machine type bits, to be used as argument to KVM_CREATE_VM */
+#define KVM_VM_S390_UCONTROL   1
+
+/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
+#define KVM_VM_PPC_HV 1
+#define KVM_VM_PPC_PR 2
+
+#define KVM_S390_SIE_PAGE_OFFSET 1
+
+/*
+ * ioctls for /dev/kvm fds:
+ */
+#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
+#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
+#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
+
+#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
+/*
+ * Check if a kvm extension is available.  Argument is extension number,
+ * return is 1 (yes) or 0 (no, sorry).
+ */
+#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
+/*
+ * Get size for mmap(vcpu_fd)
+ */
+#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
+#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
+#define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
+#define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
+#define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
+#define KVM_GET_EMULATED_CPUID   _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
+
+/*
+ * Extension capability list.
+ */
+#define KVM_CAP_IRQCHIP          0
+#define KVM_CAP_HLT      1
+#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
+#define KVM_CAP_USER_MEMORY 3
+#define KVM_CAP_SET_TSS_ADDR 4
+#define KVM_CAP_VAPIC 6
+#define KVM_CAP_EXT_CPUID 7
+#define KVM_CAP_CLOCKSOURCE 8
+#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
+#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
+#define KVM_CAP_PIT 11
+#define KVM_CAP_NOP_IO_DELAY 12
+#define KVM_CAP_PV_MMU 13
+#define KVM_CAP_MP_STATE 14
+#define KVM_CAP_COALESCED_MMIO 15
+#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
+#define KVM_CAP_IOMMU 18
+/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
+#define KVM_CAP_USER_NMI 22
+#ifdef __KVM_HAVE_GUEST_DEBUG
+#define KVM_CAP_SET_GUEST_DEBUG 23
+#endif
+#ifdef __KVM_HAVE_PIT
+#define KVM_CAP_REINJECT_CONTROL 24
+#endif
+#define KVM_CAP_IRQ_ROUTING 25
+#define KVM_CAP_IRQ_INJECT_STATUS 26
+#define KVM_CAP_ASSIGN_DEV_IRQ 29
+/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
+#ifdef __KVM_HAVE_MCE
+#define KVM_CAP_MCE 31
+#endif
+#define KVM_CAP_IRQFD 32
+#ifdef __KVM_HAVE_PIT
+#define KVM_CAP_PIT2 33
+#endif
+#define KVM_CAP_SET_BOOT_CPU_ID 34
+#ifdef __KVM_HAVE_PIT_STATE2
+#define KVM_CAP_PIT_STATE2 35
+#endif
+#define KVM_CAP_IOEVENTFD 36
+#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
+#ifdef __KVM_HAVE_XEN_HVM
+#define KVM_CAP_XEN_HVM 38
+#endif
+#define KVM_CAP_ADJUST_CLOCK 39
+#define KVM_CAP_INTERNAL_ERROR_DATA 40
+#ifdef __KVM_HAVE_VCPU_EVENTS
+#define KVM_CAP_VCPU_EVENTS 41
+#endif
+#define KVM_CAP_S390_PSW 42
+#define KVM_CAP_PPC_SEGSTATE 43
+#define KVM_CAP_HYPERV 44
+#define KVM_CAP_HYPERV_VAPIC 45
+#define KVM_CAP_HYPERV_SPIN 46
+#define KVM_CAP_PCI_SEGMENT 47
+#define KVM_CAP_PPC_PAIRED_SINGLES 48
+#define KVM_CAP_INTR_SHADOW 49
+#ifdef __KVM_HAVE_DEBUGREGS
+#define KVM_CAP_DEBUGREGS 50
+#endif
+#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
+#define KVM_CAP_PPC_OSI 52
+#define KVM_CAP_PPC_UNSET_IRQ 53
+#define KVM_CAP_ENABLE_CAP 54
+#ifdef __KVM_HAVE_XSAVE
+#define KVM_CAP_XSAVE 55
+#endif
+#ifdef __KVM_HAVE_XCRS
+#define KVM_CAP_XCRS 56
+#endif
+#define KVM_CAP_PPC_GET_PVINFO 57
+#define KVM_CAP_PPC_IRQ_LEVEL 58
+#define KVM_CAP_ASYNC_PF 59
+#define KVM_CAP_TSC_CONTROL 60
+#define KVM_CAP_GET_TSC_KHZ 61
+#define KVM_CAP_PPC_BOOKE_SREGS 62
+#define KVM_CAP_SPAPR_TCE 63
+#define KVM_CAP_PPC_SMT 64
+#define KVM_CAP_PPC_RMA        65
+#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
+#define KVM_CAP_PPC_HIOR 67
+#define KVM_CAP_PPC_PAPR 68
+#define KVM_CAP_SW_TLB 69
+#define KVM_CAP_ONE_REG 70
+#define KVM_CAP_S390_GMAP 71
+#define KVM_CAP_TSC_DEADLINE_TIMER 72
+#define KVM_CAP_S390_UCONTROL 73
+#define KVM_CAP_SYNC_REGS 74
+#define KVM_CAP_PCI_2_3 75
+#define KVM_CAP_KVMCLOCK_CTRL 76
+#define KVM_CAP_SIGNAL_MSI 77
+#define KVM_CAP_PPC_GET_SMMU_INFO 78
+#define KVM_CAP_S390_COW 79
+#define KVM_CAP_PPC_ALLOC_HTAB 80
+#define KVM_CAP_READONLY_MEM 81
+#define KVM_CAP_IRQFD_RESAMPLE 82
+#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
+#define KVM_CAP_PPC_HTAB_FD 84
+#define KVM_CAP_S390_CSS_SUPPORT 85
+#define KVM_CAP_PPC_EPR 86
+#define KVM_CAP_ARM_PSCI 87
+#define KVM_CAP_ARM_SET_DEVICE_ADDR 88
+#define KVM_CAP_DEVICE_CTRL 89
+#define KVM_CAP_IRQ_MPIC 90
+#define KVM_CAP_PPC_RTAS 91
+#define KVM_CAP_IRQ_XICS 92
+#define KVM_CAP_ARM_EL1_32BIT 93
+#define KVM_CAP_SPAPR_MULTITCE 94
+#define KVM_CAP_EXT_EMUL_CPUID 95
+#define KVM_CAP_HYPERV_TIME 96
+#define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
+#define KVM_CAP_ENABLE_CAP_VM 98
+#define KVM_CAP_S390_IRQCHIP 99
+#define KVM_CAP_IOEVENTFD_NO_LENGTH 100
+#define KVM_CAP_VM_ATTRIBUTES 101
+#define KVM_CAP_ARM_PSCI_0_2 102
+#define KVM_CAP_PPC_FIXUP_HCALL 103
+#define KVM_CAP_PPC_ENABLE_HCALL 104
+#define KVM_CAP_CHECK_EXTENSION_VM 105
+#define KVM_CAP_S390_USER_SIGP 106
+#define KVM_CAP_S390_VECTOR_REGISTERS 107
+#define KVM_CAP_S390_MEM_OP 108
+#define KVM_CAP_S390_USER_STSI 109
+#define KVM_CAP_S390_SKEYS 110
+#define KVM_CAP_MIPS_FPU 111
+#define KVM_CAP_MIPS_MSA 112
+#define KVM_CAP_S390_INJECT_IRQ 113
+#define KVM_CAP_S390_IRQ_STATE 114
+#define KVM_CAP_PPC_HWRNG 115
+#define KVM_CAP_DISABLE_QUIRKS 116
+#define KVM_CAP_X86_SMM 117
+#define KVM_CAP_MULTI_ADDRESS_SPACE 118
+#define KVM_CAP_GUEST_DEBUG_HW_BPS 119
+#define KVM_CAP_GUEST_DEBUG_HW_WPS 120
+#define KVM_CAP_SPLIT_IRQCHIP 121
+#define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
+
+#ifdef KVM_CAP_IRQ_ROUTING
+
+struct kvm_irq_routing_irqchip {
+       __u32 irqchip;
+       __u32 pin;
+};
+
+struct kvm_irq_routing_msi {
+       __u32 address_lo;
+       __u32 address_hi;
+       __u32 data;
+       __u32 pad;
+};
+
+struct kvm_irq_routing_s390_adapter {
+       __u64 ind_addr;
+       __u64 summary_addr;
+       __u64 ind_offset;
+       __u32 summary_offset;
+       __u32 adapter_id;
+};
+
+/* gsi routing entry types */
+#define KVM_IRQ_ROUTING_IRQCHIP 1
+#define KVM_IRQ_ROUTING_MSI 2
+#define KVM_IRQ_ROUTING_S390_ADAPTER 3
+
+struct kvm_irq_routing_entry {
+       __u32 gsi;
+       __u32 type;
+       __u32 flags;
+       __u32 pad;
+       union {
+               struct kvm_irq_routing_irqchip irqchip;
+               struct kvm_irq_routing_msi msi;
+               struct kvm_irq_routing_s390_adapter adapter;
+               __u32 pad[8];
+       } u;
+};
+
+struct kvm_irq_routing {
+       __u32 nr;
+       __u32 flags;
+       struct kvm_irq_routing_entry entries[0];
+};
+
+#endif
+
+#ifdef KVM_CAP_MCE
+/* x86 MCE */
+struct kvm_x86_mce {
+       __u64 status;
+       __u64 addr;
+       __u64 misc;
+       __u64 mcg_status;
+       __u8 bank;
+       __u8 pad1[7];
+       __u64 pad2[3];
+};
+#endif
+
+#ifdef KVM_CAP_XEN_HVM
+struct kvm_xen_hvm_config {
+       __u32 flags;
+       __u32 msr;
+       __u64 blob_addr_32;
+       __u64 blob_addr_64;
+       __u8 blob_size_32;
+       __u8 blob_size_64;
+       __u8 pad2[30];
+};
+#endif
+
+#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
+/*
+ * Available with KVM_CAP_IRQFD_RESAMPLE
+ *
+ * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
+ * the irqfd to operate in resampling mode for level triggered interrupt
+ * emulation.  See Documentation/virtual/kvm/api.txt.
+ */
+#define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
+
+struct kvm_irqfd {
+       __u32 fd;
+       __u32 gsi;
+       __u32 flags;
+       __u32 resamplefd;
+       __u8  pad[16];
+};
+
+struct kvm_clock_data {
+       __u64 clock;
+       __u32 flags;
+       __u32 pad[9];
+};
+
+#define KVM_MMU_FSL_BOOKE_NOHV         0
+#define KVM_MMU_FSL_BOOKE_HV           1
+
+struct kvm_config_tlb {
+       __u64 params;
+       __u64 array;
+       __u32 mmu_type;
+       __u32 array_len;
+};
+
+struct kvm_dirty_tlb {
+       __u64 bitmap;
+       __u32 num_dirty;
+};
+
+/* Available with KVM_CAP_ONE_REG */
+
+#define KVM_REG_ARCH_MASK      0xff00000000000000ULL
+#define KVM_REG_GENERIC                0x0000000000000000ULL
+
+/*
+ * Architecture specific registers are to be defined in arch headers and
+ * ORed with the arch identifier.
+ */
+#define KVM_REG_PPC            0x1000000000000000ULL
+#define KVM_REG_X86            0x2000000000000000ULL
+#define KVM_REG_IA64           0x3000000000000000ULL
+#define KVM_REG_ARM            0x4000000000000000ULL
+#define KVM_REG_S390           0x5000000000000000ULL
+#define KVM_REG_ARM64          0x6000000000000000ULL
+#define KVM_REG_MIPS           0x7000000000000000ULL
+
+#define KVM_REG_SIZE_SHIFT     52
+#define KVM_REG_SIZE_MASK      0x00f0000000000000ULL
+#define KVM_REG_SIZE_U8                0x0000000000000000ULL
+#define KVM_REG_SIZE_U16       0x0010000000000000ULL
+#define KVM_REG_SIZE_U32       0x0020000000000000ULL
+#define KVM_REG_SIZE_U64       0x0030000000000000ULL
+#define KVM_REG_SIZE_U128      0x0040000000000000ULL
+#define KVM_REG_SIZE_U256      0x0050000000000000ULL
+#define KVM_REG_SIZE_U512      0x0060000000000000ULL
+#define KVM_REG_SIZE_U1024     0x0070000000000000ULL
+
+struct kvm_reg_list {
+       __u64 n; /* number of regs */
+       __u64 reg[0];
+};
+
+struct kvm_one_reg {
+       __u64 id;
+       __u64 addr;
+};
+
+struct kvm_msi {
+       __u32 address_lo;
+       __u32 address_hi;
+       __u32 data;
+       __u32 flags;
+       __u8  pad[16];
+};
+
+struct kvm_arm_device_addr {
+       __u64 id;
+       __u64 addr;
+};
+
+/*
+ * Device control API, available with KVM_CAP_DEVICE_CTRL
+ */
+#define KVM_CREATE_DEVICE_TEST         1
+
+struct kvm_create_device {
+       __u32   type;   /* in: KVM_DEV_TYPE_xxx */
+       __u32   fd;     /* out: device handle */
+       __u32   flags;  /* in: KVM_CREATE_DEVICE_xxx */
+};
+
+struct kvm_device_attr {
+       __u32   flags;          /* no flags currently defined */
+       __u32   group;          /* device-defined */
+       __u64   attr;           /* group-defined */
+       __u64   addr;           /* userspace address of attr data */
+};
+
+#define  KVM_DEV_VFIO_GROUP                    1
+#define   KVM_DEV_VFIO_GROUP_ADD                       1
+#define   KVM_DEV_VFIO_GROUP_DEL                       2
+
+enum kvm_device_type {
+       KVM_DEV_TYPE_FSL_MPIC_20        = 1,
+#define KVM_DEV_TYPE_FSL_MPIC_20       KVM_DEV_TYPE_FSL_MPIC_20
+       KVM_DEV_TYPE_FSL_MPIC_42,
+#define KVM_DEV_TYPE_FSL_MPIC_42       KVM_DEV_TYPE_FSL_MPIC_42
+       KVM_DEV_TYPE_XICS,
+#define KVM_DEV_TYPE_XICS              KVM_DEV_TYPE_XICS
+       KVM_DEV_TYPE_VFIO,
+#define KVM_DEV_TYPE_VFIO              KVM_DEV_TYPE_VFIO
+       KVM_DEV_TYPE_ARM_VGIC_V2,
+#define KVM_DEV_TYPE_ARM_VGIC_V2       KVM_DEV_TYPE_ARM_VGIC_V2
+       KVM_DEV_TYPE_FLIC,
+#define KVM_DEV_TYPE_FLIC              KVM_DEV_TYPE_FLIC
+       KVM_DEV_TYPE_ARM_VGIC_V3,
+#define KVM_DEV_TYPE_ARM_VGIC_V3       KVM_DEV_TYPE_ARM_VGIC_V3
+       KVM_DEV_TYPE_MAX,
+};
+
+/*
+ * ioctls for VM fds
+ */
+#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
+/*
+ * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
+ * a vcpu fd.
+ */
+#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
+#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
+/* KVM_SET_MEMORY_ALIAS is obsolete: */
+#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
+#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
+#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
+#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
+                                       struct kvm_userspace_memory_region)
+#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
+#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
+
+/* enable ucontrol for s390 */
+struct kvm_s390_ucas_mapping {
+       __u64 user_addr;
+       __u64 vcpu_addr;
+       __u64 length;
+};
+#define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
+#define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
+#define KVM_S390_VCPU_FAULT     _IOW(KVMIO, 0x52, unsigned long)
+
+/* Device model IOC */
+#define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
+#define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
+#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
+#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
+#define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
+#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
+#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
+#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
+#define KVM_REGISTER_COALESCED_MMIO \
+                       _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
+#define KVM_UNREGISTER_COALESCED_MMIO \
+                       _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
+#define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
+                                      struct kvm_assigned_pci_dev)
+#define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
+/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
+#define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
+#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
+#define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
+#define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
+                                      struct kvm_assigned_pci_dev)
+#define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
+                                      struct kvm_assigned_msix_nr)
+#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
+                                      struct kvm_assigned_msix_entry)
+#define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
+#define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
+#define KVM_CREATE_PIT2                  _IOW(KVMIO,  0x77, struct kvm_pit_config)
+#define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
+#define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
+#define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
+#define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
+#define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
+/* Available with KVM_CAP_PIT_STATE2 */
+#define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
+#define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
+/* Available with KVM_CAP_PPC_GET_PVINFO */
+#define KVM_PPC_GET_PVINFO       _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
+/* Available with KVM_CAP_TSC_CONTROL */
+#define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
+#define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
+/* Available with KVM_CAP_PCI_2_3 */
+#define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
+                                      struct kvm_assigned_pci_dev)
+/* Available with KVM_CAP_SIGNAL_MSI */
+#define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
+/* Available with KVM_CAP_PPC_GET_SMMU_INFO */
+#define KVM_PPC_GET_SMMU_INFO    _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
+/* Available with KVM_CAP_PPC_ALLOC_HTAB */
+#define KVM_PPC_ALLOCATE_HTAB    _IOWR(KVMIO, 0xa7, __u32)
+#define KVM_CREATE_SPAPR_TCE     _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
+/* Available with KVM_CAP_RMA */
+#define KVM_ALLOCATE_RMA         _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
+/* Available with KVM_CAP_PPC_HTAB_FD */
+#define KVM_PPC_GET_HTAB_FD      _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
+/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
+#define KVM_ARM_SET_DEVICE_ADDR          _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
+/* Available with KVM_CAP_PPC_RTAS */
+#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
+
+/* ioctl for vm fd */
+#define KVM_CREATE_DEVICE        _IOWR(KVMIO,  0xe0, struct kvm_create_device)
+
+/* ioctls for fds returned by KVM_CREATE_DEVICE */
+#define KVM_SET_DEVICE_ATTR      _IOW(KVMIO,  0xe1, struct kvm_device_attr)
+#define KVM_GET_DEVICE_ATTR      _IOW(KVMIO,  0xe2, struct kvm_device_attr)
+#define KVM_HAS_DEVICE_ATTR      _IOW(KVMIO,  0xe3, struct kvm_device_attr)
+
+/*
+ * ioctls for vcpu fds
+ */
+#define KVM_RUN                   _IO(KVMIO,   0x80)
+#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
+#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
+#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
+#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
+#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
+#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
+/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
+#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
+#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
+#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
+#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
+#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
+#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
+#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
+#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
+#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
+#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
+#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
+/* Available with KVM_CAP_VAPIC */
+#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
+/* Available with KVM_CAP_VAPIC */
+#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
+/* valid for virtual machine (for floating interrupt)_and_ vcpu */
+#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
+/* store status for s390 */
+#define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
+#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
+#define KVM_S390_STORE_STATUS    _IOW(KVMIO,  0x95, unsigned long)
+/* initial ipl psw for s390 */
+#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
+/* initial reset for s390 */
+#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
+#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
+#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
+/* Available with KVM_CAP_USER_NMI */
+#define KVM_NMI                   _IO(KVMIO,   0x9a)
+/* Available with KVM_CAP_SET_GUEST_DEBUG */
+#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
+/* MCE for x86 */
+#define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
+#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
+#define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
+/* Available with KVM_CAP_VCPU_EVENTS */
+#define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
+#define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
+/* Available with KVM_CAP_DEBUGREGS */
+#define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
+#define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
+/*
+ * vcpu version available with KVM_ENABLE_CAP
+ * vm version available with KVM_CAP_ENABLE_CAP_VM
+ */
+#define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
+/* Available with KVM_CAP_XSAVE */
+#define KVM_GET_XSAVE            _IOR(KVMIO,  0xa4, struct kvm_xsave)
+#define KVM_SET_XSAVE            _IOW(KVMIO,  0xa5, struct kvm_xsave)
+/* Available with KVM_CAP_XCRS */
+#define KVM_GET_XCRS             _IOR(KVMIO,  0xa6, struct kvm_xcrs)
+#define KVM_SET_XCRS             _IOW(KVMIO,  0xa7, struct kvm_xcrs)
+/* Available with KVM_CAP_SW_TLB */
+#define KVM_DIRTY_TLB            _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
+/* Available with KVM_CAP_ONE_REG */
+#define KVM_GET_ONE_REG                  _IOW(KVMIO,  0xab, struct kvm_one_reg)
+#define KVM_SET_ONE_REG                  _IOW(KVMIO,  0xac, struct kvm_one_reg)
+/* VM is being stopped by host */
+#define KVM_KVMCLOCK_CTRL        _IO(KVMIO,   0xad)
+#define KVM_ARM_VCPU_INIT        _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
+#define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
+#define KVM_GET_REG_LIST         _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
+/* Available with KVM_CAP_S390_MEM_OP */
+#define KVM_S390_MEM_OP                  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
+/* Available with KVM_CAP_S390_SKEYS */
+#define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
+#define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
+/* Available with KVM_CAP_S390_INJECT_IRQ */
+#define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
+/* Available with KVM_CAP_S390_IRQ_STATE */
+#define KVM_S390_SET_IRQ_STATE   _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
+#define KVM_S390_GET_IRQ_STATE   _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
+/* Available with KVM_CAP_X86_SMM */
+#define KVM_SMI                   _IO(KVMIO,   0xb7)
+
+#define KVM_DEV_ASSIGN_ENABLE_IOMMU    (1 << 0)
+#define KVM_DEV_ASSIGN_PCI_2_3         (1 << 1)
+#define KVM_DEV_ASSIGN_MASK_INTX       (1 << 2)
+
+struct kvm_assigned_pci_dev {
+       __u32 assigned_dev_id;
+       __u32 busnr;
+       __u32 devfn;
+       __u32 flags;
+       __u32 segnr;
+       union {
+               __u32 reserved[11];
+       };
+};
+
+#define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
+#define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
+#define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
+
+#define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
+#define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
+#define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
+
+#define KVM_DEV_IRQ_HOST_MASK   0x00ff
+#define KVM_DEV_IRQ_GUEST_MASK   0xff00
+
+struct kvm_assigned_irq {
+       __u32 assigned_dev_id;
+       __u32 host_irq; /* ignored (legacy field) */
+       __u32 guest_irq;
+       __u32 flags;
+       union {
+               __u32 reserved[12];
+       };
+};
+
+struct kvm_assigned_msix_nr {
+       __u32 assigned_dev_id;
+       __u16 entry_nr;
+       __u16 padding;
+};
+
+#define KVM_MAX_MSIX_PER_DEV           256
+struct kvm_assigned_msix_entry {
+       __u32 assigned_dev_id;
+       __u32 gsi;
+       __u16 entry; /* The index of entry in the MSI-X table */
+       __u16 padding[3];
+};
+
+#endif /* __LINUX_KVM_H */
diff --git a/lib/libdss-include/linux/l2tp.h b/lib/libdss-include/linux/l2tp.h
new file mode 100644 (file)
index 0000000..5b0e36d
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * L2TP-over-IP socket for L2TPv3.
+ *
+ * Author: James Chapman <jchapman@katalix.com>
+ */
+
+#ifndef _LINUX_L2TP_H_
+#define _LINUX_L2TP_H_
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <netinet/in.h>
+
+#define IPPROTO_L2TP           115
+
+/**
+ * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets
+ * @l2tp_family:  address family number AF_L2TPIP.
+ * @l2tp_addr:    protocol specific address information
+ * @l2tp_conn_id: connection id of tunnel
+ */
+#define __SOCK_SIZE__  16              /* sizeof(struct sockaddr)      */
+struct sockaddr_l2tpip {
+       /* The first fields must match struct sockaddr_in */
+       __kernel_sa_family_t l2tp_family; /* AF_INET */
+       __be16          l2tp_unused;    /* INET port number (unused) */
+       struct in_addr  l2tp_addr;      /* Internet address */
+
+       __u32           l2tp_conn_id;   /* Connection ID of tunnel */
+
+       /* Pad to size of `struct sockaddr'. */
+       unsigned char   __pad[sizeof(struct sockaddr) -
+                             sizeof(__kernel_sa_family_t) -
+                             sizeof(__be16) - sizeof(struct in_addr) -
+                             sizeof(__u32)];
+};
+
+/**
+ * struct sockaddr_l2tpip6 - the sockaddr structure for L2TP-over-IPv6 sockets
+ * @l2tp_family:  address family number AF_L2TPIP.
+ * @l2tp_addr:    protocol specific address information
+ * @l2tp_conn_id: connection id of tunnel
+ */
+struct sockaddr_l2tpip6 {
+       /* The first fields must match struct sockaddr_in6 */
+       __kernel_sa_family_t l2tp_family; /* AF_INET6 */
+       __be16          l2tp_unused;    /* INET port number (unused) */
+       __be32          l2tp_flowinfo;  /* IPv6 flow information */
+       struct in6_addr l2tp_addr;      /* IPv6 address */
+       __u32           l2tp_scope_id;  /* scope id (new in RFC2553) */
+       __u32           l2tp_conn_id;   /* Connection ID of tunnel */
+};
+
+/*****************************************************************************
+ *  NETLINK_GENERIC netlink family.
+ *****************************************************************************/
+
+/*
+ * Commands.
+ * Valid TLVs of each command are:-
+ * TUNNEL_CREATE       - CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid
+ * TUNNEL_DELETE       - CONN_ID
+ * TUNNEL_MODIFY       - CONN_ID, udpcsum
+ * TUNNEL_GETSTATS     - CONN_ID, (stats)
+ * TUNNEL_GET          - CONN_ID, (...)
+ * SESSION_CREATE      - SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec
+ * SESSION_DELETE      - SESSION_ID
+ * SESSION_MODIFY      - SESSION_ID, data_seq
+ * SESSION_GET         - SESSION_ID, (...)
+ * SESSION_GETSTATS    - SESSION_ID, (stats)
+ *
+ */
+enum {
+       L2TP_CMD_NOOP,
+       L2TP_CMD_TUNNEL_CREATE,
+       L2TP_CMD_TUNNEL_DELETE,
+       L2TP_CMD_TUNNEL_MODIFY,
+       L2TP_CMD_TUNNEL_GET,
+       L2TP_CMD_SESSION_CREATE,
+       L2TP_CMD_SESSION_DELETE,
+       L2TP_CMD_SESSION_MODIFY,
+       L2TP_CMD_SESSION_GET,
+       __L2TP_CMD_MAX,
+};
+
+#define L2TP_CMD_MAX                   (__L2TP_CMD_MAX - 1)
+
+/*
+ * ATTR types defined for L2TP
+ */
+enum {
+       L2TP_ATTR_NONE,                 /* no data */
+       L2TP_ATTR_PW_TYPE,              /* u16, enum l2tp_pwtype */
+       L2TP_ATTR_ENCAP_TYPE,           /* u16, enum l2tp_encap_type */
+       L2TP_ATTR_OFFSET,               /* u16 */
+       L2TP_ATTR_DATA_SEQ,             /* u16 */
+       L2TP_ATTR_L2SPEC_TYPE,          /* u8, enum l2tp_l2spec_type */
+       L2TP_ATTR_L2SPEC_LEN,           /* u8, enum l2tp_l2spec_type */
+       L2TP_ATTR_PROTO_VERSION,        /* u8 */
+       L2TP_ATTR_IFNAME,               /* string */
+       L2TP_ATTR_CONN_ID,              /* u32 */
+       L2TP_ATTR_PEER_CONN_ID,         /* u32 */
+       L2TP_ATTR_SESSION_ID,           /* u32 */
+       L2TP_ATTR_PEER_SESSION_ID,      /* u32 */
+       L2TP_ATTR_UDP_CSUM,             /* u8 */
+       L2TP_ATTR_VLAN_ID,              /* u16 */
+       L2TP_ATTR_COOKIE,               /* 0, 4 or 8 bytes */
+       L2TP_ATTR_PEER_COOKIE,          /* 0, 4 or 8 bytes */
+       L2TP_ATTR_DEBUG,                /* u32 */
+       L2TP_ATTR_RECV_SEQ,             /* u8 */
+       L2TP_ATTR_SEND_SEQ,             /* u8 */
+       L2TP_ATTR_LNS_MODE,             /* u8 */
+       L2TP_ATTR_USING_IPSEC,          /* u8 */
+       L2TP_ATTR_RECV_TIMEOUT,         /* msec */
+       L2TP_ATTR_FD,                   /* int */
+       L2TP_ATTR_IP_SADDR,             /* u32 */
+       L2TP_ATTR_IP_DADDR,             /* u32 */
+       L2TP_ATTR_UDP_SPORT,            /* u16 */
+       L2TP_ATTR_UDP_DPORT,            /* u16 */
+       L2TP_ATTR_MTU,                  /* u16 */
+       L2TP_ATTR_MRU,                  /* u16 */
+       L2TP_ATTR_STATS,                /* nested */
+       L2TP_ATTR_IP6_SADDR,            /* struct in6_addr */
+       L2TP_ATTR_IP6_DADDR,            /* struct in6_addr */
+       L2TP_ATTR_UDP_ZERO_CSUM6_TX,    /* u8 */
+       L2TP_ATTR_UDP_ZERO_CSUM6_RX,    /* u8 */
+       __L2TP_ATTR_MAX,
+};
+
+#define L2TP_ATTR_MAX                  (__L2TP_ATTR_MAX - 1)
+
+/* Nested in L2TP_ATTR_STATS */
+enum {
+       L2TP_ATTR_STATS_NONE,           /* no data */
+       L2TP_ATTR_TX_PACKETS,           /* u64 */
+       L2TP_ATTR_TX_BYTES,             /* u64 */
+       L2TP_ATTR_TX_ERRORS,            /* u64 */
+       L2TP_ATTR_RX_PACKETS,           /* u64 */
+       L2TP_ATTR_RX_BYTES,             /* u64 */
+       L2TP_ATTR_RX_SEQ_DISCARDS,      /* u64 */
+       L2TP_ATTR_RX_OOS_PACKETS,       /* u64 */
+       L2TP_ATTR_RX_ERRORS,            /* u64 */
+       __L2TP_ATTR_STATS_MAX,
+};
+
+#define L2TP_ATTR_STATS_MAX            (__L2TP_ATTR_STATS_MAX - 1)
+
+enum l2tp_pwtype {
+       L2TP_PWTYPE_NONE = 0x0000,
+       L2TP_PWTYPE_ETH_VLAN = 0x0004,
+       L2TP_PWTYPE_ETH = 0x0005,
+       L2TP_PWTYPE_PPP = 0x0007,
+       L2TP_PWTYPE_PPP_AC = 0x0008,
+       L2TP_PWTYPE_IP = 0x000b,
+       __L2TP_PWTYPE_MAX
+};
+
+enum l2tp_l2spec_type {
+       L2TP_L2SPECTYPE_NONE,
+       L2TP_L2SPECTYPE_DEFAULT,
+};
+
+enum l2tp_encap_type {
+       L2TP_ENCAPTYPE_UDP,
+       L2TP_ENCAPTYPE_IP,
+};
+
+enum l2tp_seqmode {
+       L2TP_SEQ_NONE = 0,
+       L2TP_SEQ_IP = 1,
+       L2TP_SEQ_ALL = 2,
+};
+
+/*
+ * NETLINK_GENERIC related info
+ */
+#define L2TP_GENL_NAME         "l2tp"
+#define L2TP_GENL_VERSION      0x1
+#define L2TP_GENL_MCGROUP       "l2tp"
+
+#endif /* _LINUX_L2TP_H_ */
diff --git a/lib/libdss-include/linux/libc-compat.h b/lib/libdss-include/linux/libc-compat.h
new file mode 100644 (file)
index 0000000..9bed5b6
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Compatibility interface for userspace libc header coordination:
+ *
+ * Define compatibility macros that are used to control the inclusion or
+ * exclusion of UAPI structures and definitions in coordination with another
+ * userspace C library.
+ *
+ * This header is intended to solve the problem of UAPI definitions that
+ * conflict with userspace definitions. If a UAPI header has such conflicting
+ * definitions then the solution is as follows:
+ *
+ * * Synchronize the UAPI header and the libc headers so either one can be
+ *   used and such that the ABI is preserved. If this is not possible then
+ *   no simple compatibility interface exists (you need to write translating
+ *   wrappers and rename things) and you can't use this interface.
+ *
+ * Then follow this process:
+ *
+ * (a) Include libc-compat.h in the UAPI header.
+ *      e.g. #include <linux/libc-compat.h>
+ *     This include must be as early as possible.
+ *
+ * (b) In libc-compat.h add enough code to detect that the comflicting
+ *     userspace libc header has been included first.
+ *
+ * (c) If the userspace libc header has been included first define a set of
+ *     guard macros of the form __UAPI_DEF_FOO and set their values to 1, else
+ *     set their values to 0.
+ *
+ * (d) Back in the UAPI header with the conflicting definitions, guard the
+ *     definitions with:
+ *     #if __UAPI_DEF_FOO
+ *       ...
+ *     #endif
+ *
+ * This fixes the situation where the linux headers are included *after* the
+ * libc headers. To fix the problem with the inclusion in the other order the
+ * userspace libc headers must be fixed like this:
+ *
+ * * For all definitions that conflict with kernel definitions wrap those
+ *   defines in the following:
+ *   #if !__UAPI_DEF_FOO
+ *     ...
+ *   #endif
+ *
+ * This prevents the redefinition of a construct already defined by the kernel.
+ */
+#ifndef _LIBC_COMPAT_H
+#define _LIBC_COMPAT_H
+
+/* We have included glibc headers... */
+#if defined(__GLIBC__)
+
+/* Coordinate with glibc netinet/in.h header. */
+#if defined(_NETINET_IN_H)
+
+/* GLIBC headers included first so don't define anything
+ * that would already be defined. */
+#define __UAPI_DEF_IN_ADDR             0
+#define __UAPI_DEF_IN_IPPROTO          0
+#define __UAPI_DEF_IN_PKTINFO          0
+#define __UAPI_DEF_IP_MREQ             0
+#define __UAPI_DEF_SOCKADDR_IN         0
+#define __UAPI_DEF_IN_CLASS            0
+
+#define __UAPI_DEF_IN6_ADDR            0
+/* The exception is the in6_addr macros which must be defined
+ * if the glibc code didn't define them. This guard matches
+ * the guard in glibc/inet/netinet/in.h which defines the
+ * additional in6_addr macros e.g. s6_addr16, and s6_addr32. */
+#if defined(__USE_MISC) || defined (__USE_GNU)
+#define __UAPI_DEF_IN6_ADDR_ALT                0
+#else
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#endif
+#define __UAPI_DEF_SOCKADDR_IN6                0
+#define __UAPI_DEF_IPV6_MREQ           0
+#define __UAPI_DEF_IPPROTO_V6          0
+#define __UAPI_DEF_IPV6_OPTIONS                0
+#define __UAPI_DEF_IN6_PKTINFO         0
+#define __UAPI_DEF_IP6_MTUINFO         0
+
+#else
+
+/* Linux headers included first, and we must define everything
+ * we need. The expectation is that glibc will check the
+ * __UAPI_DEF_* defines and adjust appropriately. */
+#define __UAPI_DEF_IN_ADDR             1
+#define __UAPI_DEF_IN_IPPROTO          1
+#define __UAPI_DEF_IN_PKTINFO          1
+#define __UAPI_DEF_IP_MREQ             1
+#define __UAPI_DEF_SOCKADDR_IN         1
+#define __UAPI_DEF_IN_CLASS            1
+
+#define __UAPI_DEF_IN6_ADDR            1
+/* We unconditionally define the in6_addr macros and glibc must
+ * coordinate. */
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#define __UAPI_DEF_SOCKADDR_IN6                1
+#define __UAPI_DEF_IPV6_MREQ           1
+#define __UAPI_DEF_IPPROTO_V6          1
+#define __UAPI_DEF_IPV6_OPTIONS                1
+#define __UAPI_DEF_IN6_PKTINFO         1
+#define __UAPI_DEF_IP6_MTUINFO         1
+
+#endif /* _NETINET_IN_H */
+
+/* Definitions for xattr.h */
+#if defined(_SYS_XATTR_H)
+#define __UAPI_DEF_XATTR               0
+#else
+#define __UAPI_DEF_XATTR               1
+#endif
+
+/* If we did not see any headers from any supported C libraries,
+ * or we are being included in the kernel, then define everything
+ * that we need. */
+#else /* !defined(__GLIBC__) */
+
+/* Definitions for in.h */
+#define __UAPI_DEF_IN_ADDR             1
+#define __UAPI_DEF_IN_IPPROTO          1
+#define __UAPI_DEF_IN_PKTINFO          1
+#define __UAPI_DEF_IP_MREQ             1
+#define __UAPI_DEF_SOCKADDR_IN         1
+#define __UAPI_DEF_IN_CLASS            1
+
+/* Definitions for in6.h */
+#define __UAPI_DEF_IN6_ADDR            1
+#define __UAPI_DEF_IN6_ADDR_ALT                1
+#define __UAPI_DEF_SOCKADDR_IN6                1
+#define __UAPI_DEF_IPV6_MREQ           1
+#define __UAPI_DEF_IPPROTO_V6          1
+#define __UAPI_DEF_IPV6_OPTIONS                1
+#define __UAPI_DEF_IN6_PKTINFO         1
+#define __UAPI_DEF_IP6_MTUINFO         1
+
+/* Definitions for xattr.h */
+#define __UAPI_DEF_XATTR               1
+
+#endif /* __GLIBC__ */
+
+#endif /* _LIBC_COMPAT_H */
diff --git a/lib/libdss-include/linux/limits.h b/lib/libdss-include/linux/limits.h
new file mode 100644 (file)
index 0000000..2d0f941
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_LIMITS_H
+#define _LINUX_LIMITS_H
+
+#define NR_OPEN                1024
+
+#define NGROUPS_MAX    65536   /* supplemental group IDs are available */
+#define ARG_MAX       131072   /* # bytes of args + environ for exec() */
+#define LINK_MAX         127   /* # links a file may have */
+#define MAX_CANON        255   /* size of the canonical input queue */
+#define MAX_INPUT        255   /* size of the type-ahead buffer */
+#define NAME_MAX         255   /* # chars in a file name */
+#define PATH_MAX        4096   /* # chars in a path name including nul */
+#define PIPE_BUF        4096   /* # bytes in atomic write to a pipe */
+#define XATTR_NAME_MAX   255   /* # chars in an extended attribute name */
+#define XATTR_SIZE_MAX 65536   /* size of an extended attribute value (64k) */
+#define XATTR_LIST_MAX 65536   /* size of extended attribute namelist (64k) */
+
+#define RTSIG_MAX        32
+
+#endif
diff --git a/lib/libdss-include/linux/llc.h b/lib/libdss-include/linux/llc.h
new file mode 100644 (file)
index 0000000..ff895d1
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * IEEE 802.2 User Interface SAPs for Linux, data structures and indicators.
+ *
+ * Copyright (c) 2001 by Jay Schulist <jschlst@samba.org>
+ *
+ * This program can be redistributed or modified under the terms of the
+ * GNU General Public License as published by the Free Software Foundation.
+ * This program is distributed without any warranty or implied warranty
+ * of merchantability or fitness for a particular purpose.
+ *
+ * See the GNU General Public License for more details.
+ */
+#ifndef __LINUX_LLC_H
+#define __LINUX_LLC_H
+
+#include <linux/socket.h>
+
+#define __LLC_SOCK_SIZE__ 16   /* sizeof(sockaddr_llc), word align. */
+struct sockaddr_llc {
+       __kernel_sa_family_t sllc_family; /* AF_LLC */
+       __kernel_sa_family_t sllc_arphrd; /* ARPHRD_ETHER */
+       unsigned char   sllc_test;
+       unsigned char   sllc_xid;
+       unsigned char   sllc_ua;        /* UA data, only for SOCK_STREAM. */
+       unsigned char   sllc_sap;
+       unsigned char   sllc_mac[IFHWADDRLEN];
+       unsigned char   __pad[__LLC_SOCK_SIZE__ -
+                             sizeof(__kernel_sa_family_t) * 2 -
+                             sizeof(unsigned char) * 4 - IFHWADDRLEN];
+};
+
+/* sockopt definitions. */
+enum llc_sockopts {
+       LLC_OPT_UNKNOWN = 0,
+       LLC_OPT_RETRY,          /* max retrans attempts. */
+       LLC_OPT_SIZE,           /* max PDU size (octets). */
+       LLC_OPT_ACK_TMR_EXP,    /* ack expire time (secs). */
+       LLC_OPT_P_TMR_EXP,      /* pf cycle expire time (secs). */
+       LLC_OPT_REJ_TMR_EXP,    /* rej sent expire time (secs). */
+       LLC_OPT_BUSY_TMR_EXP,   /* busy state expire time (secs). */
+       LLC_OPT_TX_WIN,         /* tx window size. */
+       LLC_OPT_RX_WIN,         /* rx window size. */
+       LLC_OPT_PKTINFO,        /* ancillary packet information. */
+       LLC_OPT_MAX
+};
+
+#define LLC_OPT_MAX_RETRY       100
+#define LLC_OPT_MAX_SIZE       4196
+#define LLC_OPT_MAX_WIN                 127
+#define LLC_OPT_MAX_ACK_TMR_EXP          60
+#define LLC_OPT_MAX_P_TMR_EXP    60
+#define LLC_OPT_MAX_REJ_TMR_EXP          60
+#define LLC_OPT_MAX_BUSY_TMR_EXP  60
+
+/* LLC SAP types. */
+#define LLC_SAP_NULL   0x00            /* NULL SAP.                    */
+#define LLC_SAP_LLC    0x02            /* LLC Sublayer Management.     */
+#define LLC_SAP_SNA    0x04            /* SNA Path Control.            */
+#define LLC_SAP_PNM    0x0E            /* Proway Network Management.   */      
+#define LLC_SAP_IP     0x06            /* TCP/IP.                      */
+#define LLC_SAP_BSPAN  0x42            /* Bridge Spanning Tree Proto   */
+#define LLC_SAP_MMS    0x4E            /* Manufacturing Message Srv.   */
+#define LLC_SAP_8208   0x7E            /* ISO 8208                     */
+#define LLC_SAP_3COM   0x80            /* 3COM.                        */
+#define LLC_SAP_PRO    0x8E            /* Proway Active Station List   */
+#define LLC_SAP_SNAP   0xAA            /* SNAP.                        */
+#define LLC_SAP_BANYAN 0xBC            /* Banyan.                      */
+#define LLC_SAP_IPX    0xE0            /* IPX/SPX.                     */
+#define LLC_SAP_NETBEUI        0xF0            /* NetBEUI.                     */
+#define LLC_SAP_LANMGR 0xF4            /* LanManager.                  */
+#define LLC_SAP_IMPL   0xF8            /* IMPL                         */
+#define LLC_SAP_DISC   0xFC            /* Discovery                    */
+#define LLC_SAP_OSI    0xFE            /* OSI Network Layers.          */
+#define LLC_SAP_LAR    0xDC            /* LAN Address Resolution       */
+#define LLC_SAP_RM     0xD4            /* Resource Management          */
+#define LLC_SAP_GLOBAL 0xFF            /* Global SAP.                  */
+
+struct llc_pktinfo {
+       int lpi_ifindex;
+       unsigned char lpi_sap;
+       unsigned char lpi_mac[IFHWADDRLEN];
+};
+
+#endif /* __LINUX_LLC_H */
diff --git a/lib/libdss-include/linux/loop.h b/lib/libdss-include/linux/loop.h
new file mode 100644 (file)
index 0000000..50b4ec8
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * include/linux/loop.h
+ *
+ * Written by Theodore Ts'o, 3/29/93.
+ *
+ * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
+ * permitted under the GNU General Public License.
+ */
+#ifndef _LINUX_LOOP_H
+#define _LINUX_LOOP_H
+
+
+#define LO_NAME_SIZE   64
+#define LO_KEY_SIZE    32
+
+
+/*
+ * Loop flags
+ */
+enum {
+       LO_FLAGS_READ_ONLY      = 1,
+       LO_FLAGS_AUTOCLEAR      = 4,
+       LO_FLAGS_PARTSCAN       = 8,
+       LO_FLAGS_DIRECT_IO      = 16,
+};
+
+#include <asm/posix_types.h>   /* for __kernel_old_dev_t */
+#include <linux/types.h>       /* for __u64 */
+
+/* Backwards compatibility version */
+struct loop_info {
+       int                lo_number;           /* ioctl r/o */
+       __kernel_old_dev_t lo_device;           /* ioctl r/o */
+       unsigned long      lo_inode;            /* ioctl r/o */
+       __kernel_old_dev_t lo_rdevice;          /* ioctl r/o */
+       int                lo_offset;
+       int                lo_encrypt_type;
+       int                lo_encrypt_key_size;         /* ioctl w/o */
+       int                lo_flags;                    /* ioctl r/o */
+       char               lo_name[LO_NAME_SIZE];
+       unsigned char      lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
+       unsigned long      lo_init[2];
+       char               reserved[4];
+};
+
+struct loop_info64 {
+       __u64              lo_device;                   /* ioctl r/o */
+       __u64              lo_inode;                    /* ioctl r/o */
+       __u64              lo_rdevice;                  /* ioctl r/o */
+       __u64              lo_offset;
+       __u64              lo_sizelimit;/* bytes, 0 == max available */
+       __u32              lo_number;                   /* ioctl r/o */
+       __u32              lo_encrypt_type;
+       __u32              lo_encrypt_key_size;         /* ioctl w/o */
+       __u32              lo_flags;                    /* ioctl r/o */
+       __u8               lo_file_name[LO_NAME_SIZE];
+       __u8               lo_crypt_name[LO_NAME_SIZE];
+       __u8               lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
+       __u64              lo_init[2];
+};
+
+/*
+ * Loop filter types
+ */
+
+#define LO_CRYPT_NONE          0
+#define LO_CRYPT_XOR           1
+#define LO_CRYPT_DES           2
+#define LO_CRYPT_FISH2         3    /* Twofish encryption */
+#define LO_CRYPT_BLOW          4
+#define LO_CRYPT_CAST128       5
+#define LO_CRYPT_IDEA          6
+#define LO_CRYPT_DUMMY         9
+#define LO_CRYPT_SKIPJACK      10
+#define LO_CRYPT_CRYPTOAPI     18
+#define MAX_LO_CRYPT           20
+
+/*
+ * IOCTL commands --- we will commandeer 0x4C ('L')
+ */
+
+#define LOOP_SET_FD            0x4C00
+#define LOOP_CLR_FD            0x4C01
+#define LOOP_SET_STATUS                0x4C02
+#define LOOP_GET_STATUS                0x4C03
+#define LOOP_SET_STATUS64      0x4C04
+#define LOOP_GET_STATUS64      0x4C05
+#define LOOP_CHANGE_FD         0x4C06
+#define LOOP_SET_CAPACITY      0x4C07
+#define LOOP_SET_DIRECT_IO     0x4C08
+
+/* /dev/loop-control interface */
+#define LOOP_CTL_ADD           0x4C80
+#define LOOP_CTL_REMOVE                0x4C81
+#define LOOP_CTL_GET_FREE      0x4C82
+#endif /* _LINUX_LOOP_H */
diff --git a/lib/libdss-include/linux/lp.h b/lib/libdss-include/linux/lp.h
new file mode 100644 (file)
index 0000000..3226e65
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * usr/include/linux/lp.h c.1991-1992 James Wiegand
+ * many modifications copyright (C) 1992 Michael K. Johnson
+ * Interrupt support added 1993 Nigel Gamble
+ * Removed 8255 status defines from inside __KERNEL__ Marcelo Tosatti 
+ */
+#ifndef _LINUX_LP_H
+#define _LINUX_LP_H
+
+
+/*
+ * Per POSIX guidelines, this module reserves the LP and lp prefixes
+ * These are the lp_table[minor].flags flags...
+ */
+#define LP_EXIST 0x0001
+#define LP_SELEC 0x0002
+#define LP_BUSY         0x0004
+#define LP_BUSY_BIT_POS 2
+#define LP_OFFL         0x0008
+#define LP_NOPA  0x0010
+#define LP_ERR   0x0020
+#define LP_ABORT 0x0040
+#define LP_CAREFUL 0x0080 /* obsoleted -arca */
+#define LP_ABORTOPEN 0x0100
+
+#define LP_TRUST_IRQ_  0x0200 /* obsolete */
+#define LP_NO_REVERSE  0x0400 /* No reverse mode available. */
+#define LP_DATA_AVAIL  0x0800 /* Data is available. */
+
+/* 
+ * bit defines for 8255 status port
+ * base + 1
+ * accessed with LP_S(minor), which gets the byte...
+ */
+#define LP_PBUSY       0x80  /* inverted input, active high */
+#define LP_PACK                0x40  /* unchanged input, active low */
+#define LP_POUTPA      0x20  /* unchanged input, active high */
+#define LP_PSELECD     0x10  /* unchanged input, active high */
+#define LP_PERRORP     0x08  /* unchanged input, active low */
+
+/* timeout for each character.  This is relative to bus cycles -- it
+ * is the count in a busy loop.  THIS IS THE VALUE TO CHANGE if you
+ * have extremely slow printing, or if the machine seems to slow down
+ * a lot when you print.  If you have slow printing, increase this
+ * number and recompile, and if your system gets bogged down, decrease
+ * this number.  This can be changed with the tunelp(8) command as well.
+ */
+
+#define LP_INIT_CHAR 1000
+
+/* The parallel port specs apparently say that there needs to be
+ * a .5usec wait before and after the strobe.
+ */
+
+#define LP_INIT_WAIT 1
+
+/* This is the amount of time that the driver waits for the printer to
+ * catch up when the printer's buffer appears to be filled.  If you
+ * want to tune this and have a fast printer (i.e. HPIIIP), decrease
+ * this number, and if you have a slow printer, increase this number.
+ * This is in hundredths of a second, the default 2 being .05 second.
+ * Or use the tunelp(8) command, which is especially nice if you want
+ * change back and forth between character and graphics printing, which
+ * are wildly different...
+ */
+
+#define LP_INIT_TIME 2
+
+/* IOCTL numbers */
+#define LPCHAR   0x0601  /* corresponds to LP_INIT_CHAR */
+#define LPTIME   0x0602  /* corresponds to LP_INIT_TIME */
+#define LPABORT  0x0604  /* call with TRUE arg to abort on error,
+                           FALSE to retry.  Default is retry.  */
+#define LPSETIRQ 0x0605  /* call with new IRQ number,
+                           or 0 for polling (no IRQ) */
+#define LPGETIRQ 0x0606  /* get the current IRQ number */
+#define LPWAIT   0x0608  /* corresponds to LP_INIT_WAIT */
+/* NOTE: LPCAREFUL is obsoleted and it' s always the default right now -arca */
+#define LPCAREFUL   0x0609  /* call with TRUE arg to require out-of-paper, off-
+                           line, and error indicators good on all writes,
+                           FALSE to ignore them.  Default is ignore. */
+#define LPABORTOPEN 0x060a  /* call with TRUE arg to abort open() on error,
+                           FALSE to ignore error.  Default is ignore.  */
+#define LPGETSTATUS 0x060b  /* return LP_S(minor) */
+#define LPRESET     0x060c  /* reset printer */
+#ifdef LP_STATS
+#define LPGETSTATS  0x060d  /* get statistics (struct lp_stats) */
+#endif
+#define LPGETFLAGS  0x060e  /* get status flags */
+#define LPSETTIMEOUT 0x060f /* set parport timeout */
+
+/* timeout for printk'ing a timeout, in jiffies (100ths of a second).
+   This is also used for re-checking error conditions if LP_ABORT is
+   not set.  This is the default behavior. */
+
+#define LP_TIMEOUT_INTERRUPT   (60 * HZ)
+#define LP_TIMEOUT_POLLED      (10 * HZ)
+
+
+#endif /* _LINUX_LP_H */
diff --git a/lib/libdss-include/linux/lwtunnel.h b/lib/libdss-include/linux/lwtunnel.h
new file mode 100644 (file)
index 0000000..1d2f4f6
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef _LWTUNNEL_H_
+#define _LWTUNNEL_H_
+
+#include <linux/types.h>
+
+enum lwtunnel_encap_types {
+       LWTUNNEL_ENCAP_NONE,
+       LWTUNNEL_ENCAP_MPLS,
+       LWTUNNEL_ENCAP_IP,
+       LWTUNNEL_ENCAP_ILA,
+       LWTUNNEL_ENCAP_IP6,
+       __LWTUNNEL_ENCAP_MAX,
+};
+
+#define LWTUNNEL_ENCAP_MAX (__LWTUNNEL_ENCAP_MAX - 1)
+
+enum lwtunnel_ip_t {
+       LWTUNNEL_IP_UNSPEC,
+       LWTUNNEL_IP_ID,
+       LWTUNNEL_IP_DST,
+       LWTUNNEL_IP_SRC,
+       LWTUNNEL_IP_TTL,
+       LWTUNNEL_IP_TOS,
+       LWTUNNEL_IP_FLAGS,
+       __LWTUNNEL_IP_MAX,
+};
+
+#define LWTUNNEL_IP_MAX (__LWTUNNEL_IP_MAX - 1)
+
+enum lwtunnel_ip6_t {
+       LWTUNNEL_IP6_UNSPEC,
+       LWTUNNEL_IP6_ID,
+       LWTUNNEL_IP6_DST,
+       LWTUNNEL_IP6_SRC,
+       LWTUNNEL_IP6_HOPLIMIT,
+       LWTUNNEL_IP6_TC,
+       LWTUNNEL_IP6_FLAGS,
+       __LWTUNNEL_IP6_MAX,
+};
+
+#define LWTUNNEL_IP6_MAX (__LWTUNNEL_IP6_MAX - 1)
+
+#endif /* _LWTUNNEL_H_ */
diff --git a/lib/libdss-include/linux/magic.h b/lib/libdss-include/linux/magic.h
new file mode 100644 (file)
index 0000000..accb036
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef __LINUX_MAGIC_H__
+#define __LINUX_MAGIC_H__
+
+#define ADFS_SUPER_MAGIC       0xadf5
+#define AFFS_SUPER_MAGIC       0xadff
+#define AFS_SUPER_MAGIC                0x5346414F
+#define AUTOFS_SUPER_MAGIC     0x0187
+#define CODA_SUPER_MAGIC       0x73757245
+#define CRAMFS_MAGIC           0x28cd3d45      /* some random number */
+#define CRAMFS_MAGIC_WEND      0x453dcd28      /* magic number with the wrong endianess */
+#define DEBUGFS_MAGIC          0x64626720
+#define SECURITYFS_MAGIC       0x73636673
+#define SELINUX_MAGIC          0xf97cff8c
+#define SMACK_MAGIC            0x43415d53      /* "SMAC" */
+#define RAMFS_MAGIC            0x858458f6      /* some random number */
+#define TMPFS_MAGIC            0x01021994
+#define HUGETLBFS_MAGIC        0x958458f6      /* some random number */
+#define SQUASHFS_MAGIC         0x73717368
+#define ECRYPTFS_SUPER_MAGIC   0xf15f
+#define EFS_SUPER_MAGIC                0x414A53
+#define EXT2_SUPER_MAGIC       0xEF53
+#define EXT3_SUPER_MAGIC       0xEF53
+#define XENFS_SUPER_MAGIC      0xabba1974
+#define EXT4_SUPER_MAGIC       0xEF53
+#define BTRFS_SUPER_MAGIC      0x9123683E
+#define NILFS_SUPER_MAGIC      0x3434
+#define F2FS_SUPER_MAGIC       0xF2F52010
+#define HPFS_SUPER_MAGIC       0xf995e849
+#define ISOFS_SUPER_MAGIC      0x9660
+#define JFFS2_SUPER_MAGIC      0x72b6
+#define PSTOREFS_MAGIC         0x6165676C
+#define EFIVARFS_MAGIC         0xde5e81e4
+#define HOSTFS_SUPER_MAGIC     0x00c0ffee
+
+#define MINIX_SUPER_MAGIC      0x137F          /* minix v1 fs, 14 char names */
+#define MINIX_SUPER_MAGIC2     0x138F          /* minix v1 fs, 30 char names */
+#define MINIX2_SUPER_MAGIC     0x2468          /* minix v2 fs, 14 char names */
+#define MINIX2_SUPER_MAGIC2    0x2478          /* minix v2 fs, 30 char names */
+#define MINIX3_SUPER_MAGIC     0x4d5a          /* minix v3 fs, 60 char names */
+
+#define MSDOS_SUPER_MAGIC      0x4d44          /* MD */
+#define NCP_SUPER_MAGIC                0x564c          /* Guess, what 0x564c is :-) */
+#define NFS_SUPER_MAGIC                0x6969
+#define OPENPROM_SUPER_MAGIC   0x9fa1
+#define QNX4_SUPER_MAGIC       0x002f          /* qnx4 fs detection */
+#define QNX6_SUPER_MAGIC       0x68191122      /* qnx6 fs detection */
+
+#define REISERFS_SUPER_MAGIC   0x52654973      /* used by gcc */
+                                       /* used by file system utilities that
+                                          look at the superblock, etc.  */
+#define REISERFS_SUPER_MAGIC_STRING    "ReIsErFs"
+#define REISER2FS_SUPER_MAGIC_STRING   "ReIsEr2Fs"
+#define REISER2FS_JR_SUPER_MAGIC_STRING        "ReIsEr3Fs"
+
+#define SMB_SUPER_MAGIC                0x517B
+#define CGROUP_SUPER_MAGIC     0x27e0eb
+
+
+#define STACK_END_MAGIC                0x57AC6E9D
+
+#define TRACEFS_MAGIC          0x74726163
+
+#define V9FS_MAGIC             0x01021997
+
+#define BDEVFS_MAGIC            0x62646576
+#define BINFMTFS_MAGIC          0x42494e4d
+#define DEVPTS_SUPER_MAGIC     0x1cd1
+#define FUTEXFS_SUPER_MAGIC    0xBAD1DEA
+#define PIPEFS_MAGIC            0x50495045
+#define PROC_SUPER_MAGIC       0x9fa0
+#define SOCKFS_MAGIC           0x534F434B
+#define SYSFS_MAGIC            0x62656572
+#define USBDEVICE_SUPER_MAGIC  0x9fa2
+#define MTD_INODE_FS_MAGIC      0x11307854
+#define ANON_INODE_FS_MAGIC    0x09041934
+#define BTRFS_TEST_MAGIC       0x73727279
+#define NSFS_MAGIC             0x6e736673
+#define BPF_FS_MAGIC           0xcafe4a11
+
+#endif /* __LINUX_MAGIC_H__ */
diff --git a/lib/libdss-include/linux/major.h b/lib/libdss-include/linux/major.h
new file mode 100644 (file)
index 0000000..620252e
--- /dev/null
@@ -0,0 +1,179 @@
+#ifndef _LINUX_MAJOR_H
+#define _LINUX_MAJOR_H
+
+/*
+ * This file has definitions for major device numbers.
+ * For the device number assignments, see Documentation/devices.txt.
+ */
+
+#define UNNAMED_MAJOR          0
+#define MEM_MAJOR              1
+#define RAMDISK_MAJOR          1
+#define FLOPPY_MAJOR           2
+#define PTY_MASTER_MAJOR       2
+#define IDE0_MAJOR             3
+#define HD_MAJOR               IDE0_MAJOR
+#define PTY_SLAVE_MAJOR                3
+#define TTY_MAJOR              4
+#define TTYAUX_MAJOR           5
+#define LP_MAJOR               6
+#define VCS_MAJOR              7
+#define LOOP_MAJOR             7
+#define SCSI_DISK0_MAJOR       8
+#define SCSI_TAPE_MAJOR                9
+#define MD_MAJOR               9
+#define MISC_MAJOR             10
+#define SCSI_CDROM_MAJOR       11
+#define MUX_MAJOR              11      /* PA-RISC only */
+#define XT_DISK_MAJOR          13
+#define INPUT_MAJOR            13
+#define SOUND_MAJOR            14
+#define CDU31A_CDROM_MAJOR     15
+#define JOYSTICK_MAJOR         15
+#define GOLDSTAR_CDROM_MAJOR   16
+#define OPTICS_CDROM_MAJOR     17
+#define SANYO_CDROM_MAJOR      18
+#define CYCLADES_MAJOR         19
+#define CYCLADESAUX_MAJOR      20
+#define MITSUMI_X_CDROM_MAJOR  20
+#define MFM_ACORN_MAJOR                21      /* ARM Linux /dev/mfm */
+#define SCSI_GENERIC_MAJOR     21
+#define IDE1_MAJOR             22
+#define DIGICU_MAJOR           22
+#define DIGI_MAJOR             23
+#define MITSUMI_CDROM_MAJOR    23
+#define CDU535_CDROM_MAJOR     24
+#define STL_SERIALMAJOR                24
+#define MATSUSHITA_CDROM_MAJOR 25
+#define STL_CALLOUTMAJOR       25
+#define MATSUSHITA_CDROM2_MAJOR        26
+#define QIC117_TAPE_MAJOR      27
+#define MATSUSHITA_CDROM3_MAJOR        27
+#define MATSUSHITA_CDROM4_MAJOR        28
+#define STL_SIOMEMMAJOR                28
+#define ACSI_MAJOR             28
+#define AZTECH_CDROM_MAJOR     29
+#define FB_MAJOR               29   /* /dev/fb* framebuffers */
+#define MTD_BLOCK_MAJOR                31
+#define CM206_CDROM_MAJOR      32
+#define IDE2_MAJOR             33
+#define IDE3_MAJOR             34
+#define Z8530_MAJOR            34
+#define XPRAM_MAJOR            35   /* Expanded storage on S/390: "slow ram"*/
+#define NETLINK_MAJOR          36
+#define PS2ESDI_MAJOR          36
+#define IDETAPE_MAJOR          37
+#define Z2RAM_MAJOR            37
+#define APBLOCK_MAJOR          38   /* AP1000 Block device */
+#define DDV_MAJOR              39   /* AP1000 DDV block device */
+#define NBD_MAJOR              43   /* Network block device    */
+#define RISCOM8_NORMAL_MAJOR   48
+#define DAC960_MAJOR           48   /* 48..55 */
+#define RISCOM8_CALLOUT_MAJOR  49
+#define MKISS_MAJOR            55
+#define DSP56K_MAJOR           55   /* DSP56001 processor device */
+
+#define IDE4_MAJOR             56
+#define IDE5_MAJOR             57
+
+#define SCSI_DISK1_MAJOR       65
+#define SCSI_DISK2_MAJOR       66
+#define SCSI_DISK3_MAJOR       67
+#define SCSI_DISK4_MAJOR       68
+#define SCSI_DISK5_MAJOR       69
+#define SCSI_DISK6_MAJOR       70
+#define SCSI_DISK7_MAJOR       71
+
+#define COMPAQ_SMART2_MAJOR    72
+#define COMPAQ_SMART2_MAJOR1   73
+#define COMPAQ_SMART2_MAJOR2   74
+#define COMPAQ_SMART2_MAJOR3   75
+#define COMPAQ_SMART2_MAJOR4   76
+#define COMPAQ_SMART2_MAJOR5   77
+#define COMPAQ_SMART2_MAJOR6   78
+#define COMPAQ_SMART2_MAJOR7   79
+
+#define SPECIALIX_NORMAL_MAJOR 75
+#define SPECIALIX_CALLOUT_MAJOR        76
+
+#define AURORA_MAJOR           79
+
+#define I2O_MAJOR              80      /* 80->87 */
+
+#define SHMIQ_MAJOR            85   /* Linux/mips, SGI /dev/shmiq */
+#define SCSI_CHANGER_MAJOR      86
+
+#define IDE6_MAJOR             88
+#define IDE7_MAJOR             89
+#define IDE8_MAJOR             90
+#define MTD_CHAR_MAJOR         90
+#define IDE9_MAJOR             91
+
+#define DASD_MAJOR             94
+
+#define MDISK_MAJOR            95
+
+#define UBD_MAJOR              98
+
+#define PP_MAJOR               99
+#define JSFD_MAJOR             99
+
+#define PHONE_MAJOR            100
+
+#define COMPAQ_CISS_MAJOR      104
+#define COMPAQ_CISS_MAJOR1     105
+#define COMPAQ_CISS_MAJOR2      106
+#define COMPAQ_CISS_MAJOR3      107
+#define COMPAQ_CISS_MAJOR4      108
+#define COMPAQ_CISS_MAJOR5      109
+#define COMPAQ_CISS_MAJOR6      110
+#define COMPAQ_CISS_MAJOR7      111
+
+#define VIODASD_MAJOR          112
+#define VIOCD_MAJOR            113
+
+#define ATARAID_MAJOR          114
+
+#define SCSI_DISK8_MAJOR       128
+#define SCSI_DISK9_MAJOR       129
+#define SCSI_DISK10_MAJOR      130
+#define SCSI_DISK11_MAJOR      131
+#define SCSI_DISK12_MAJOR      132
+#define SCSI_DISK13_MAJOR      133
+#define SCSI_DISK14_MAJOR      134
+#define SCSI_DISK15_MAJOR      135
+
+#define UNIX98_PTY_MASTER_MAJOR        128
+#define UNIX98_PTY_MAJOR_COUNT 8
+#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
+
+#define DRBD_MAJOR             147
+#define RTF_MAJOR              150
+#define RAW_MAJOR              162
+
+#define USB_ACM_MAJOR          166
+#define USB_ACM_AUX_MAJOR      167
+#define USB_CHAR_MAJOR         180
+
+#define MMC_BLOCK_MAJOR                179
+
+#define VXVM_MAJOR             199     /* VERITAS volume i/o driver    */
+#define VXSPEC_MAJOR           200     /* VERITAS volume config driver */
+#define VXDMP_MAJOR            201     /* VERITAS volume multipath driver */
+
+#define XENVBD_MAJOR           202     /* Xen virtual block device */
+
+#define MSR_MAJOR              202
+#define CPUID_MAJOR            203
+
+#define OSST_MAJOR             206     /* OnStream-SCx0 SCSI tape */
+
+#define IBM_TTY3270_MAJOR      227
+#define IBM_FS3270_MAJOR       228
+
+#define VIOTAPE_MAJOR          230
+
+#define BLOCK_EXT_MAJOR                259
+#define SCSI_OSD_MAJOR         260     /* open-osd's OSD scsi device */
+
+#endif
diff --git a/lib/libdss-include/linux/map_to_7segment.h b/lib/libdss-include/linux/map_to_7segment.h
new file mode 100644 (file)
index 0000000..12d62a5
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef MAP_TO_7SEGMENT_H
+#define MAP_TO_7SEGMENT_H
+
+/* This file provides translation primitives and tables for the conversion
+ * of (ASCII) characters to a 7-segments notation.
+ *
+ * The 7 segment's wikipedia notation below is used as standard.
+ * See: http://en.wikipedia.org/wiki/Seven_segment_display
+ *
+ * Notation:   +-a-+
+ *             f   b
+ *             +-g-+
+ *             e   c
+ *             +-d-+
+ *
+ * Usage:
+ *
+ *   Register a map variable, and fill it with a character set:
+ *     static SEG7_DEFAULT_MAP(map_seg7);
+ *
+ *
+ *   Then use for conversion:
+ *     seg7 = map_to_seg7(&map_seg7, some_char);
+ *     ...
+ *
+ * In device drivers it is recommended, if required, to make the char map
+ * accessible via the sysfs interface using the following scheme:
+ *
+ * static ssize_t show_map(struct device *dev, char *buf) {
+ *     memcpy(buf, &map_seg7, sizeof(map_seg7));
+ *     return sizeof(map_seg7);
+ * }
+ * static ssize_t store_map(struct device *dev, const char *buf, size_t cnt) {
+ *     if(cnt != sizeof(map_seg7))
+ *             return -EINVAL;
+ *     memcpy(&map_seg7, buf, cnt);
+ *     return cnt;
+ * }
+ * static DEVICE_ATTR(map_seg7, PERMS_RW, show_map, store_map);
+ *
+ * History:
+ * 2005-05-31  RFC linux-kernel@vger.kernel.org
+ */
+#include <linux/errno.h>
+
+
+#define BIT_SEG7_A             0
+#define BIT_SEG7_B             1
+#define BIT_SEG7_C             2
+#define BIT_SEG7_D             3
+#define BIT_SEG7_E             4
+#define BIT_SEG7_F             5
+#define BIT_SEG7_G             6
+#define BIT_SEG7_RESERVED      7
+
+struct seg7_conversion_map {
+       unsigned char   table[128];
+};
+
+static __inline__ int map_to_seg7(struct seg7_conversion_map *map, int c)
+{
+       return c >= 0 && c < sizeof(map->table) ? map->table[c] : -EINVAL;
+}
+
+#define SEG7_CONVERSION_MAP(_name, _map)       \
+       struct seg7_conversion_map _name = { .table = { _map } }
+
+/*
+ * It is recommended to use a facility that allows user space to redefine
+ * custom character sets for LCD devices. Please use a sysfs interface
+ * as described above.
+ */
+#define MAP_TO_SEG7_SYSFS_FILE "map_seg7"
+
+/*******************************************************************************
+ * ASCII conversion table
+ ******************************************************************************/
+
+#define _SEG7(l,a,b,c,d,e,f,g) \
+      (        a<<BIT_SEG7_A | b<<BIT_SEG7_B | c<<BIT_SEG7_C | d<<BIT_SEG7_D | \
+       e<<BIT_SEG7_E | f<<BIT_SEG7_F | g<<BIT_SEG7_G )
+
+#define _MAP_0_32_ASCII_SEG7_NON_PRINTABLE     \
+       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+
+#define _MAP_33_47_ASCII_SEG7_SYMBOL           \
+ _SEG7('!',0,0,0,0,1,1,0), _SEG7('"',0,1,0,0,0,1,0), _SEG7('#',0,1,1,0,1,1,0),\
+ _SEG7('$',1,0,1,1,0,1,1), _SEG7('%',0,0,1,0,0,1,0), _SEG7('&',1,0,1,1,1,1,1),\
+ _SEG7('\'',0,0,0,0,0,1,0),_SEG7('(',1,0,0,1,1,1,0), _SEG7(')',1,1,1,1,0,0,0),\
+ _SEG7('*',0,1,1,0,1,1,1), _SEG7('+',0,1,1,0,0,0,1), _SEG7(',',0,0,0,0,1,0,0),\
+ _SEG7('-',0,0,0,0,0,0,1), _SEG7('.',0,0,0,0,1,0,0), _SEG7('/',0,1,0,0,1,0,1),
+
+#define _MAP_48_57_ASCII_SEG7_NUMERIC          \
+ _SEG7('0',1,1,1,1,1,1,0), _SEG7('1',0,1,1,0,0,0,0), _SEG7('2',1,1,0,1,1,0,1),\
+ _SEG7('3',1,1,1,1,0,0,1), _SEG7('4',0,1,1,0,0,1,1), _SEG7('5',1,0,1,1,0,1,1),\
+ _SEG7('6',1,0,1,1,1,1,1), _SEG7('7',1,1,1,0,0,0,0), _SEG7('8',1,1,1,1,1,1,1),\
+ _SEG7('9',1,1,1,1,0,1,1),
+
+#define _MAP_58_64_ASCII_SEG7_SYMBOL           \
+ _SEG7(':',0,0,0,1,0,0,1), _SEG7(';',0,0,0,1,0,0,1), _SEG7('<',1,0,0,0,0,1,1),\
+ _SEG7('=',0,0,0,1,0,0,1), _SEG7('>',1,1,0,0,0,0,1), _SEG7('?',1,1,1,0,0,1,0),\
+ _SEG7('@',1,1,0,1,1,1,1),
+
+#define _MAP_65_90_ASCII_SEG7_ALPHA_UPPR       \
+ _SEG7('A',1,1,1,0,1,1,1), _SEG7('B',1,1,1,1,1,1,1), _SEG7('C',1,0,0,1,1,1,0),\
+ _SEG7('D',1,1,1,1,1,1,0), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
+ _SEG7('G',1,1,1,1,0,1,1), _SEG7('H',0,1,1,0,1,1,1), _SEG7('I',0,1,1,0,0,0,0),\
+ _SEG7('J',0,1,1,1,0,0,0), _SEG7('K',0,1,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
+ _SEG7('M',1,1,1,0,1,1,0), _SEG7('N',1,1,1,0,1,1,0), _SEG7('O',1,1,1,1,1,1,0),\
+ _SEG7('P',1,1,0,0,1,1,1), _SEG7('Q',1,1,1,1,1,1,0), _SEG7('R',1,1,1,0,1,1,1),\
+ _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('U',0,1,1,1,1,1,0),\
+ _SEG7('V',0,1,1,1,1,1,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
+ _SEG7('Y',0,1,1,0,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
+
+#define _MAP_91_96_ASCII_SEG7_SYMBOL           \
+ _SEG7('[',1,0,0,1,1,1,0), _SEG7('\\',0,0,1,0,0,1,1),_SEG7(']',1,1,1,1,0,0,0),\
+ _SEG7('^',1,1,0,0,0,1,0), _SEG7('_',0,0,0,1,0,0,0), _SEG7('`',0,1,0,0,0,0,0),
+
+#define _MAP_97_122_ASCII_SEG7_ALPHA_LOWER     \
+ _SEG7('A',1,1,1,0,1,1,1), _SEG7('b',0,0,1,1,1,1,1), _SEG7('c',0,0,0,1,1,0,1),\
+ _SEG7('d',0,1,1,1,1,0,1), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\
+ _SEG7('G',1,1,1,1,0,1,1), _SEG7('h',0,0,1,0,1,1,1), _SEG7('i',0,0,1,0,0,0,0),\
+ _SEG7('j',0,0,1,1,0,0,0), _SEG7('k',0,0,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\
+ _SEG7('M',1,1,1,0,1,1,0), _SEG7('n',0,0,1,0,1,0,1), _SEG7('o',0,0,1,1,1,0,1),\
+ _SEG7('P',1,1,0,0,1,1,1), _SEG7('q',1,1,1,0,0,1,1), _SEG7('r',0,0,0,0,1,0,1),\
+ _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('u',0,0,1,1,1,0,0),\
+ _SEG7('v',0,0,1,1,1,0,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\
+ _SEG7('y',0,1,1,1,0,1,1), _SEG7('Z',1,1,0,1,1,0,1),
+
+#define _MAP_123_126_ASCII_SEG7_SYMBOL         \
+ _SEG7('{',1,0,0,1,1,1,0), _SEG7('|',0,0,0,0,1,1,0), _SEG7('}',1,1,1,1,0,0,0),\
+ _SEG7('~',1,0,0,0,0,0,0),
+
+/* Maps */
+
+/* This set tries to map as close as possible to the visible characteristics
+ * of the ASCII symbol, lowercase and uppercase letters may differ in
+ * presentation on the display.
+ */
+#define MAP_ASCII7SEG_ALPHANUM                 \
+       _MAP_0_32_ASCII_SEG7_NON_PRINTABLE      \
+       _MAP_33_47_ASCII_SEG7_SYMBOL            \
+       _MAP_48_57_ASCII_SEG7_NUMERIC           \
+       _MAP_58_64_ASCII_SEG7_SYMBOL            \
+       _MAP_65_90_ASCII_SEG7_ALPHA_UPPR        \
+       _MAP_91_96_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_123_126_ASCII_SEG7_SYMBOL
+
+/* This set tries to map as close as possible to the symbolic characteristics
+ * of the ASCII character for maximum discrimination.
+ * For now this means all alpha chars are in lower case representations.
+ * (This for example facilitates the use of hex numbers with uppercase input.)
+ */
+#define MAP_ASCII7SEG_ALPHANUM_LC                      \
+       _MAP_0_32_ASCII_SEG7_NON_PRINTABLE      \
+       _MAP_33_47_ASCII_SEG7_SYMBOL            \
+       _MAP_48_57_ASCII_SEG7_NUMERIC           \
+       _MAP_58_64_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_91_96_ASCII_SEG7_SYMBOL            \
+       _MAP_97_122_ASCII_SEG7_ALPHA_LOWER      \
+       _MAP_123_126_ASCII_SEG7_SYMBOL
+
+#define SEG7_DEFAULT_MAP(_name)                \
+       SEG7_CONVERSION_MAP(_name,MAP_ASCII7SEG_ALPHANUM)
+
+#endif /* MAP_TO_7SEGMENT_H */
+
diff --git a/lib/libdss-include/linux/matroxfb.h b/lib/libdss-include/linux/matroxfb.h
new file mode 100644 (file)
index 0000000..8c22a89
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef __LINUX_MATROXFB_H__
+#define __LINUX_MATROXFB_H__
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+#include <linux/videodev2.h>
+#include <linux/fb.h>
+
+struct matroxioc_output_mode {
+       __u32   output;         /* which output */
+#define MATROXFB_OUTPUT_PRIMARY                0x0000
+#define MATROXFB_OUTPUT_SECONDARY      0x0001
+#define MATROXFB_OUTPUT_DFP            0x0002
+       __u32   mode;           /* which mode */
+#define MATROXFB_OUTPUT_MODE_PAL       0x0001
+#define MATROXFB_OUTPUT_MODE_NTSC      0x0002
+#define MATROXFB_OUTPUT_MODE_MONITOR   0x0080
+};
+#define MATROXFB_SET_OUTPUT_MODE       _IOW('n',0xFA,size_t)
+#define MATROXFB_GET_OUTPUT_MODE       _IOWR('n',0xFA,size_t)
+
+/* bitfield */
+#define MATROXFB_OUTPUT_CONN_PRIMARY   (1 << MATROXFB_OUTPUT_PRIMARY)
+#define MATROXFB_OUTPUT_CONN_SECONDARY (1 << MATROXFB_OUTPUT_SECONDARY)
+#define MATROXFB_OUTPUT_CONN_DFP       (1 << MATROXFB_OUTPUT_DFP)
+/* connect these outputs to this framebuffer */
+#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,size_t)
+/* which outputs are connected to this framebuffer */
+#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,size_t)
+/* which outputs are available for this framebuffer */
+#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,size_t)
+/* which outputs exist on this framebuffer */
+#define MATROXFB_GET_ALL_OUTPUTS       _IOR('n',0xFB,size_t)
+
+enum matroxfb_ctrl_id {
+  MATROXFB_CID_TESTOUT  = V4L2_CID_PRIVATE_BASE,
+  MATROXFB_CID_DEFLICKER,
+  MATROXFB_CID_LAST
+};
+
+#endif
+
diff --git a/lib/libdss-include/linux/mdio.h b/lib/libdss-include/linux/mdio.h
new file mode 100644 (file)
index 0000000..57672dd
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * linux/mdio.h: definitions for MDIO (clause 45) transceivers
+ * Copyright 2006-2009 Solarflare Communications Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation, incorporated herein by reference.
+ */
+
+#ifndef __LINUX_MDIO_H__
+#define __LINUX_MDIO_H__
+
+#include <linux/types.h>
+#include <linux/mii.h>
+
+/* MDIO Manageable Devices (MMDs). */
+#define MDIO_MMD_PMAPMD                1       /* Physical Medium Attachment/
+                                        * Physical Medium Dependent */
+#define MDIO_MMD_WIS           2       /* WAN Interface Sublayer */
+#define MDIO_MMD_PCS           3       /* Physical Coding Sublayer */
+#define MDIO_MMD_PHYXS         4       /* PHY Extender Sublayer */
+#define MDIO_MMD_DTEXS         5       /* DTE Extender Sublayer */
+#define MDIO_MMD_TC            6       /* Transmission Convergence */
+#define MDIO_MMD_AN            7       /* Auto-Negotiation */
+#define MDIO_MMD_C22EXT                29      /* Clause 22 extension */
+#define MDIO_MMD_VEND1         30      /* Vendor specific 1 */
+#define MDIO_MMD_VEND2         31      /* Vendor specific 2 */
+
+/* Generic MDIO registers. */
+#define MDIO_CTRL1             MII_BMCR
+#define MDIO_STAT1             MII_BMSR
+#define MDIO_DEVID1            MII_PHYSID1
+#define MDIO_DEVID2            MII_PHYSID2
+#define MDIO_SPEED             4       /* Speed ability */
+#define MDIO_DEVS1             5       /* Devices in package */
+#define MDIO_DEVS2             6
+#define MDIO_CTRL2             7       /* 10G control 2 */
+#define MDIO_STAT2             8       /* 10G status 2 */
+#define MDIO_PMA_TXDIS         9       /* 10G PMA/PMD transmit disable */
+#define MDIO_PMA_RXDET         10      /* 10G PMA/PMD receive signal detect */
+#define MDIO_PMA_EXTABLE       11      /* 10G PMA/PMD extended ability */
+#define MDIO_PKGID1            14      /* Package identifier */
+#define MDIO_PKGID2            15
+#define MDIO_AN_ADVERTISE      16      /* AN advertising (base page) */
+#define MDIO_AN_LPA            19      /* AN LP abilities (base page) */
+#define MDIO_PCS_EEE_ABLE      20      /* EEE Capability register */
+#define MDIO_PCS_EEE_WK_ERR    22      /* EEE wake error counter */
+#define MDIO_PHYXS_LNSTAT      24      /* PHY XGXS lane state */
+#define MDIO_AN_EEE_ADV                60      /* EEE advertisement */
+#define MDIO_AN_EEE_LPABLE     61      /* EEE link partner ability */
+
+/* Media-dependent registers. */
+#define MDIO_PMA_10GBT_SWAPPOL 130     /* 10GBASE-T pair swap & polarity */
+#define MDIO_PMA_10GBT_TXPWR   131     /* 10GBASE-T TX power control */
+#define MDIO_PMA_10GBT_SNR     133     /* 10GBASE-T SNR margin, lane A.
+                                        * Lanes B-D are numbered 134-136. */
+#define MDIO_PMA_10GBR_FECABLE 170     /* 10GBASE-R FEC ability */
+#define MDIO_PCS_10GBX_STAT1   24      /* 10GBASE-X PCS status 1 */
+#define MDIO_PCS_10GBRT_STAT1  32      /* 10GBASE-R/-T PCS status 1 */
+#define MDIO_PCS_10GBRT_STAT2  33      /* 10GBASE-R/-T PCS status 2 */
+#define MDIO_AN_10GBT_CTRL     32      /* 10GBASE-T auto-negotiation control */
+#define MDIO_AN_10GBT_STAT     33      /* 10GBASE-T auto-negotiation status */
+
+/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */
+#define MDIO_PMA_LASI_RXCTRL   0x9000  /* RX_ALARM control */
+#define MDIO_PMA_LASI_TXCTRL   0x9001  /* TX_ALARM control */
+#define MDIO_PMA_LASI_CTRL     0x9002  /* LASI control */
+#define MDIO_PMA_LASI_RXSTAT   0x9003  /* RX_ALARM status */
+#define MDIO_PMA_LASI_TXSTAT   0x9004  /* TX_ALARM status */
+#define MDIO_PMA_LASI_STAT     0x9005  /* LASI status */
+
+/* Control register 1. */
+/* Enable extended speed selection */
+#define MDIO_CTRL1_SPEEDSELEXT         (BMCR_SPEED1000 | BMCR_SPEED100)
+/* All speed selection bits */
+#define MDIO_CTRL1_SPEEDSEL            (MDIO_CTRL1_SPEEDSELEXT | 0x003c)
+#define MDIO_CTRL1_FULLDPLX            BMCR_FULLDPLX
+#define MDIO_CTRL1_LPOWER              BMCR_PDOWN
+#define MDIO_CTRL1_RESET               BMCR_RESET
+#define MDIO_PMA_CTRL1_LOOPBACK                0x0001
+#define MDIO_PMA_CTRL1_SPEED1000       BMCR_SPEED1000
+#define MDIO_PMA_CTRL1_SPEED100                BMCR_SPEED100
+#define MDIO_PCS_CTRL1_LOOPBACK                BMCR_LOOPBACK
+#define MDIO_PHYXS_CTRL1_LOOPBACK      BMCR_LOOPBACK
+#define MDIO_AN_CTRL1_RESTART          BMCR_ANRESTART
+#define MDIO_AN_CTRL1_ENABLE           BMCR_ANENABLE
+#define MDIO_AN_CTRL1_XNP              0x2000  /* Enable extended next page */
+#define MDIO_PCS_CTRL1_CLKSTOP_EN      0x400   /* Stop the clock during LPI */
+
+/* 10 Gb/s */
+#define MDIO_CTRL1_SPEED10G            (MDIO_CTRL1_SPEEDSELEXT | 0x00)
+/* 10PASS-TS/2BASE-TL */
+#define MDIO_CTRL1_SPEED10P2B          (MDIO_CTRL1_SPEEDSELEXT | 0x04)
+
+/* Status register 1. */
+#define MDIO_STAT1_LPOWERABLE          0x0002  /* Low-power ability */
+#define MDIO_STAT1_LSTATUS             BMSR_LSTATUS
+#define MDIO_STAT1_FAULT               0x0080  /* Fault */
+#define MDIO_AN_STAT1_LPABLE           0x0001  /* Link partner AN ability */
+#define MDIO_AN_STAT1_ABLE             BMSR_ANEGCAPABLE
+#define MDIO_AN_STAT1_RFAULT           BMSR_RFAULT
+#define MDIO_AN_STAT1_COMPLETE         BMSR_ANEGCOMPLETE
+#define MDIO_AN_STAT1_PAGE             0x0040  /* Page received */
+#define MDIO_AN_STAT1_XNP              0x0080  /* Extended next page status */
+
+/* Speed register. */
+#define MDIO_SPEED_10G                 0x0001  /* 10G capable */
+#define MDIO_PMA_SPEED_2B              0x0002  /* 2BASE-TL capable */
+#define MDIO_PMA_SPEED_10P             0x0004  /* 10PASS-TS capable */
+#define MDIO_PMA_SPEED_1000            0x0010  /* 1000M capable */
+#define MDIO_PMA_SPEED_100             0x0020  /* 100M capable */
+#define MDIO_PMA_SPEED_10              0x0040  /* 10M capable */
+#define MDIO_PCS_SPEED_10P2B           0x0002  /* 10PASS-TS/2BASE-TL capable */
+
+/* Device present registers. */
+#define MDIO_DEVS_PRESENT(devad)       (1 << (devad))
+#define MDIO_DEVS_PMAPMD               MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD)
+#define MDIO_DEVS_WIS                  MDIO_DEVS_PRESENT(MDIO_MMD_WIS)
+#define MDIO_DEVS_PCS                  MDIO_DEVS_PRESENT(MDIO_MMD_PCS)
+#define MDIO_DEVS_PHYXS                        MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS)
+#define MDIO_DEVS_DTEXS                        MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS)
+#define MDIO_DEVS_TC                   MDIO_DEVS_PRESENT(MDIO_MMD_TC)
+#define MDIO_DEVS_AN                   MDIO_DEVS_PRESENT(MDIO_MMD_AN)
+#define MDIO_DEVS_C22EXT               MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT)
+
+/* Control register 2. */
+#define MDIO_PMA_CTRL2_TYPE            0x000f  /* PMA/PMD type selection */
+#define MDIO_PMA_CTRL2_10GBCX4         0x0000  /* 10GBASE-CX4 type */
+#define MDIO_PMA_CTRL2_10GBEW          0x0001  /* 10GBASE-EW type */
+#define MDIO_PMA_CTRL2_10GBLW          0x0002  /* 10GBASE-LW type */
+#define MDIO_PMA_CTRL2_10GBSW          0x0003  /* 10GBASE-SW type */
+#define MDIO_PMA_CTRL2_10GBLX4         0x0004  /* 10GBASE-LX4 type */
+#define MDIO_PMA_CTRL2_10GBER          0x0005  /* 10GBASE-ER type */
+#define MDIO_PMA_CTRL2_10GBLR          0x0006  /* 10GBASE-LR type */
+#define MDIO_PMA_CTRL2_10GBSR          0x0007  /* 10GBASE-SR type */
+#define MDIO_PMA_CTRL2_10GBLRM         0x0008  /* 10GBASE-LRM type */
+#define MDIO_PMA_CTRL2_10GBT           0x0009  /* 10GBASE-T type */
+#define MDIO_PMA_CTRL2_10GBKX4         0x000a  /* 10GBASE-KX4 type */
+#define MDIO_PMA_CTRL2_10GBKR          0x000b  /* 10GBASE-KR type */
+#define MDIO_PMA_CTRL2_1000BT          0x000c  /* 1000BASE-T type */
+#define MDIO_PMA_CTRL2_1000BKX         0x000d  /* 1000BASE-KX type */
+#define MDIO_PMA_CTRL2_100BTX          0x000e  /* 100BASE-TX type */
+#define MDIO_PMA_CTRL2_10BT            0x000f  /* 10BASE-T type */
+#define MDIO_PCS_CTRL2_TYPE            0x0003  /* PCS type selection */
+#define MDIO_PCS_CTRL2_10GBR           0x0000  /* 10GBASE-R type */
+#define MDIO_PCS_CTRL2_10GBX           0x0001  /* 10GBASE-X type */
+#define MDIO_PCS_CTRL2_10GBW           0x0002  /* 10GBASE-W type */
+#define MDIO_PCS_CTRL2_10GBT           0x0003  /* 10GBASE-T type */
+
+/* Status register 2. */
+#define MDIO_STAT2_RXFAULT             0x0400  /* Receive fault */
+#define MDIO_STAT2_TXFAULT             0x0800  /* Transmit fault */
+#define MDIO_STAT2_DEVPRST             0xc000  /* Device present */
+#define MDIO_STAT2_DEVPRST_VAL         0x8000  /* Device present value */
+#define MDIO_PMA_STAT2_LBABLE          0x0001  /* PMA loopback ability */
+#define MDIO_PMA_STAT2_10GBEW          0x0002  /* 10GBASE-EW ability */
+#define MDIO_PMA_STAT2_10GBLW          0x0004  /* 10GBASE-LW ability */
+#define MDIO_PMA_STAT2_10GBSW          0x0008  /* 10GBASE-SW ability */
+#define MDIO_PMA_STAT2_10GBLX4         0x0010  /* 10GBASE-LX4 ability */
+#define MDIO_PMA_STAT2_10GBER          0x0020  /* 10GBASE-ER ability */
+#define MDIO_PMA_STAT2_10GBLR          0x0040  /* 10GBASE-LR ability */
+#define MDIO_PMA_STAT2_10GBSR          0x0080  /* 10GBASE-SR ability */
+#define MDIO_PMD_STAT2_TXDISAB         0x0100  /* PMD TX disable ability */
+#define MDIO_PMA_STAT2_EXTABLE         0x0200  /* Extended abilities */
+#define MDIO_PMA_STAT2_RXFLTABLE       0x1000  /* Receive fault ability */
+#define MDIO_PMA_STAT2_TXFLTABLE       0x2000  /* Transmit fault ability */
+#define MDIO_PCS_STAT2_10GBR           0x0001  /* 10GBASE-R capable */
+#define MDIO_PCS_STAT2_10GBX           0x0002  /* 10GBASE-X capable */
+#define MDIO_PCS_STAT2_10GBW           0x0004  /* 10GBASE-W capable */
+#define MDIO_PCS_STAT2_RXFLTABLE       0x1000  /* Receive fault ability */
+#define MDIO_PCS_STAT2_TXFLTABLE       0x2000  /* Transmit fault ability */
+
+/* Transmit disable register. */
+#define MDIO_PMD_TXDIS_GLOBAL          0x0001  /* Global PMD TX disable */
+#define MDIO_PMD_TXDIS_0               0x0002  /* PMD TX disable 0 */
+#define MDIO_PMD_TXDIS_1               0x0004  /* PMD TX disable 1 */
+#define MDIO_PMD_TXDIS_2               0x0008  /* PMD TX disable 2 */
+#define MDIO_PMD_TXDIS_3               0x0010  /* PMD TX disable 3 */
+
+/* Receive signal detect register. */
+#define MDIO_PMD_RXDET_GLOBAL          0x0001  /* Global PMD RX signal detect */
+#define MDIO_PMD_RXDET_0               0x0002  /* PMD RX signal detect 0 */
+#define MDIO_PMD_RXDET_1               0x0004  /* PMD RX signal detect 1 */
+#define MDIO_PMD_RXDET_2               0x0008  /* PMD RX signal detect 2 */
+#define MDIO_PMD_RXDET_3               0x0010  /* PMD RX signal detect 3 */
+
+/* Extended abilities register. */
+#define MDIO_PMA_EXTABLE_10GCX4                0x0001  /* 10GBASE-CX4 ability */
+#define MDIO_PMA_EXTABLE_10GBLRM       0x0002  /* 10GBASE-LRM ability */
+#define MDIO_PMA_EXTABLE_10GBT         0x0004  /* 10GBASE-T ability */
+#define MDIO_PMA_EXTABLE_10GBKX4       0x0008  /* 10GBASE-KX4 ability */
+#define MDIO_PMA_EXTABLE_10GBKR                0x0010  /* 10GBASE-KR ability */
+#define MDIO_PMA_EXTABLE_1000BT                0x0020  /* 1000BASE-T ability */
+#define MDIO_PMA_EXTABLE_1000BKX       0x0040  /* 1000BASE-KX ability */
+#define MDIO_PMA_EXTABLE_100BTX                0x0080  /* 100BASE-TX ability */
+#define MDIO_PMA_EXTABLE_10BT          0x0100  /* 10BASE-T ability */
+
+/* PHY XGXS lane state register. */
+#define MDIO_PHYXS_LNSTAT_SYNC0                0x0001
+#define MDIO_PHYXS_LNSTAT_SYNC1                0x0002
+#define MDIO_PHYXS_LNSTAT_SYNC2                0x0004
+#define MDIO_PHYXS_LNSTAT_SYNC3                0x0008
+#define MDIO_PHYXS_LNSTAT_ALIGN                0x1000
+
+/* PMA 10GBASE-T pair swap & polarity */
+#define MDIO_PMA_10GBT_SWAPPOL_ABNX    0x0001  /* Pair A/B uncrossed */
+#define MDIO_PMA_10GBT_SWAPPOL_CDNX    0x0002  /* Pair C/D uncrossed */
+#define MDIO_PMA_10GBT_SWAPPOL_AREV    0x0100  /* Pair A polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_BREV    0x0200  /* Pair B polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_CREV    0x0400  /* Pair C polarity reversed */
+#define MDIO_PMA_10GBT_SWAPPOL_DREV    0x0800  /* Pair D polarity reversed */
+
+/* PMA 10GBASE-T TX power register. */
+#define MDIO_PMA_10GBT_TXPWR_SHORT     0x0001  /* Short-reach mode */
+
+/* PMA 10GBASE-T SNR registers. */
+/* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */
+#define MDIO_PMA_10GBT_SNR_BIAS                0x8000
+#define MDIO_PMA_10GBT_SNR_MAX         127
+
+/* PMA 10GBASE-R FEC ability register. */
+#define MDIO_PMA_10GBR_FECABLE_ABLE    0x0001  /* FEC ability */
+#define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002  /* FEC error indic. ability */
+
+/* PCS 10GBASE-R/-T status register 1. */
+#define MDIO_PCS_10GBRT_STAT1_BLKLK    0x0001  /* Block lock attained */
+
+/* PCS 10GBASE-R/-T status register 2. */
+#define MDIO_PCS_10GBRT_STAT2_ERR      0x00ff
+#define MDIO_PCS_10GBRT_STAT2_BER      0x3f00
+
+/* AN 10GBASE-T control register. */
+#define MDIO_AN_10GBT_CTRL_ADV10G      0x1000  /* Advertise 10GBASE-T */
+
+/* AN 10GBASE-T status register. */
+#define MDIO_AN_10GBT_STAT_LPTRR       0x0200  /* LP training reset req. */
+#define MDIO_AN_10GBT_STAT_LPLTABLE    0x0400  /* LP loop timing ability */
+#define MDIO_AN_10GBT_STAT_LP10G       0x0800  /* LP is 10GBT capable */
+#define MDIO_AN_10GBT_STAT_REMOK       0x1000  /* Remote OK */
+#define MDIO_AN_10GBT_STAT_LOCOK       0x2000  /* Local OK */
+#define MDIO_AN_10GBT_STAT_MS          0x4000  /* Master/slave config */
+#define MDIO_AN_10GBT_STAT_MSFLT       0x8000  /* Master/slave config fault */
+
+/* EEE Supported/Advertisement/LP Advertisement registers.
+ *
+ * EEE capability Register (3.20), Advertisement (7.60) and
+ * Link partner ability (7.61) registers have and can use the same identical
+ * bit masks.
+ */
+#define MDIO_AN_EEE_ADV_100TX  0x0002  /* Advertise 100TX EEE cap */
+#define MDIO_AN_EEE_ADV_1000T  0x0004  /* Advertise 1000T EEE cap */
+/* Note: the two defines above can be potentially used by the user-land
+ * and cannot remove them now.
+ * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros
+ * using the previous ones (that can be considered obsolete).
+ */
+#define MDIO_EEE_100TX         MDIO_AN_EEE_ADV_100TX   /* 100TX EEE cap */
+#define MDIO_EEE_1000T         MDIO_AN_EEE_ADV_1000T   /* 1000T EEE cap */
+#define MDIO_EEE_10GT          0x0008  /* 10GT EEE cap */
+#define MDIO_EEE_1000KX                0x0010  /* 1000KX EEE cap */
+#define MDIO_EEE_10GKX4                0x0020  /* 10G KX4 EEE cap */
+#define MDIO_EEE_10GKR         0x0040  /* 10G KR EEE cap */
+
+/* LASI RX_ALARM control/status registers. */
+#define MDIO_PMA_LASI_RX_PHYXSLFLT     0x0001  /* PHY XS RX local fault */
+#define MDIO_PMA_LASI_RX_PCSLFLT       0x0008  /* PCS RX local fault */
+#define MDIO_PMA_LASI_RX_PMALFLT       0x0010  /* PMA/PMD RX local fault */
+#define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020  /* RX optical power fault */
+#define MDIO_PMA_LASI_RX_WISLFLT       0x0200  /* WIS local fault */
+
+/* LASI TX_ALARM control/status registers. */
+#define MDIO_PMA_LASI_TX_PHYXSLFLT     0x0001  /* PHY XS TX local fault */
+#define MDIO_PMA_LASI_TX_PCSLFLT       0x0008  /* PCS TX local fault */
+#define MDIO_PMA_LASI_TX_PMALFLT       0x0010  /* PMA/PMD TX local fault */
+#define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080  /* Laser output power fault */
+#define MDIO_PMA_LASI_TX_LASERTEMPFLT  0x0100  /* Laser temperature fault */
+#define MDIO_PMA_LASI_TX_LASERBICURRFLT        0x0200  /* Laser bias current fault */
+
+/* LASI control/status registers. */
+#define MDIO_PMA_LASI_LSALARM          0x0001  /* LS_ALARM enable/status */
+#define MDIO_PMA_LASI_TXALARM          0x0002  /* TX_ALARM enable/status */
+#define MDIO_PMA_LASI_RXALARM          0x0004  /* RX_ALARM enable/status */
+
+/* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */
+
+#define MDIO_PHY_ID_C45                        0x8000
+#define MDIO_PHY_ID_PRTAD              0x03e0
+#define MDIO_PHY_ID_DEVAD              0x001f
+#define MDIO_PHY_ID_C45_MASK                                           \
+       (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD)
+
+static __inline__ __u16 mdio_phy_id_c45(int prtad, int devad)
+{
+       return MDIO_PHY_ID_C45 | (prtad << 5) | devad;
+}
+
+#endif /* __LINUX_MDIO_H__ */
diff --git a/lib/libdss-include/linux/media-bus-format.h b/lib/libdss-include/linux/media-bus-format.h
new file mode 100644 (file)
index 0000000..190d491
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Media Bus API header
+ *
+ * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_MEDIA_BUS_FORMAT_H
+#define __LINUX_MEDIA_BUS_FORMAT_H
+
+/*
+ * These bus formats uniquely identify data formats on the data bus. Format 0
+ * is reserved, MEDIA_BUS_FMT_FIXED shall be used by host-client pairs, where
+ * the data format is fixed. Additionally, "2X8" means that one pixel is
+ * transferred in two 8-bit samples, "BE" or "LE" specify in which order those
+ * samples are transferred over the bus: "LE" means that the least significant
+ * bits are transferred first, "BE" means that the most significant bits are
+ * transferred first, and "PADHI" and "PADLO" define which bits - low or high,
+ * in the incomplete high byte, are filled with padding bits.
+ *
+ * The bus formats are grouped by type, bus_width, bits per component, samples
+ * per pixel and order of subsamples. Numerical values are sorted using generic
+ * numerical sort order (8 thus comes before 10).
+ *
+ * As their value can't change when a new bus format is inserted in the
+ * enumeration, the bus formats are explicitly given a numerical value. The next
+ * free values for each category are listed below, update them when inserting
+ * new pixel codes.
+ */
+
+#define MEDIA_BUS_FMT_FIXED                    0x0001
+
+/* RGB - next is       0x1018 */
+#define MEDIA_BUS_FMT_RGB444_1X12              0x1016
+#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE      0x1001
+#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE      0x1002
+#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE      0x1003
+#define MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE      0x1004
+#define MEDIA_BUS_FMT_RGB565_1X16              0x1017
+#define MEDIA_BUS_FMT_BGR565_2X8_BE            0x1005
+#define MEDIA_BUS_FMT_BGR565_2X8_LE            0x1006
+#define MEDIA_BUS_FMT_RGB565_2X8_BE            0x1007
+#define MEDIA_BUS_FMT_RGB565_2X8_LE            0x1008
+#define MEDIA_BUS_FMT_RGB666_1X18              0x1009
+#define MEDIA_BUS_FMT_RBG888_1X24              0x100e
+#define MEDIA_BUS_FMT_RGB666_1X24_CPADHI       0x1015
+#define MEDIA_BUS_FMT_RGB666_1X7X3_SPWG                0x1010
+#define MEDIA_BUS_FMT_BGR888_1X24              0x1013
+#define MEDIA_BUS_FMT_GBR888_1X24              0x1014
+#define MEDIA_BUS_FMT_RGB888_1X24              0x100a
+#define MEDIA_BUS_FMT_RGB888_2X12_BE           0x100b
+#define MEDIA_BUS_FMT_RGB888_2X12_LE           0x100c
+#define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG                0x1011
+#define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA       0x1012
+#define MEDIA_BUS_FMT_ARGB8888_1X32            0x100d
+#define MEDIA_BUS_FMT_RGB888_1X32_PADHI                0x100f
+
+/* YUV (including grey) - next is      0x2026 */
+#define MEDIA_BUS_FMT_Y8_1X8                   0x2001
+#define MEDIA_BUS_FMT_UV8_1X8                  0x2015
+#define MEDIA_BUS_FMT_UYVY8_1_5X8              0x2002
+#define MEDIA_BUS_FMT_VYUY8_1_5X8              0x2003
+#define MEDIA_BUS_FMT_YUYV8_1_5X8              0x2004
+#define MEDIA_BUS_FMT_YVYU8_1_5X8              0x2005
+#define MEDIA_BUS_FMT_UYVY8_2X8                        0x2006
+#define MEDIA_BUS_FMT_VYUY8_2X8                        0x2007
+#define MEDIA_BUS_FMT_YUYV8_2X8                        0x2008
+#define MEDIA_BUS_FMT_YVYU8_2X8                        0x2009
+#define MEDIA_BUS_FMT_Y10_1X10                 0x200a
+#define MEDIA_BUS_FMT_UYVY10_2X10              0x2018
+#define MEDIA_BUS_FMT_VYUY10_2X10              0x2019
+#define MEDIA_BUS_FMT_YUYV10_2X10              0x200b
+#define MEDIA_BUS_FMT_YVYU10_2X10              0x200c
+#define MEDIA_BUS_FMT_Y12_1X12                 0x2013
+#define MEDIA_BUS_FMT_UYVY12_2X12              0x201c
+#define MEDIA_BUS_FMT_VYUY12_2X12              0x201d
+#define MEDIA_BUS_FMT_YUYV12_2X12              0x201e
+#define MEDIA_BUS_FMT_YVYU12_2X12              0x201f
+#define MEDIA_BUS_FMT_UYVY8_1X16               0x200f
+#define MEDIA_BUS_FMT_VYUY8_1X16               0x2010
+#define MEDIA_BUS_FMT_YUYV8_1X16               0x2011
+#define MEDIA_BUS_FMT_YVYU8_1X16               0x2012
+#define MEDIA_BUS_FMT_YDYUYDYV8_1X16           0x2014
+#define MEDIA_BUS_FMT_UYVY10_1X20              0x201a
+#define MEDIA_BUS_FMT_VYUY10_1X20              0x201b
+#define MEDIA_BUS_FMT_YUYV10_1X20              0x200d
+#define MEDIA_BUS_FMT_YVYU10_1X20              0x200e
+#define MEDIA_BUS_FMT_VUY8_1X24                        0x2024
+#define MEDIA_BUS_FMT_YUV8_1X24                        0x2025
+#define MEDIA_BUS_FMT_UYVY12_1X24              0x2020
+#define MEDIA_BUS_FMT_VYUY12_1X24              0x2021
+#define MEDIA_BUS_FMT_YUYV12_1X24              0x2022
+#define MEDIA_BUS_FMT_YVYU12_1X24              0x2023
+#define MEDIA_BUS_FMT_YUV10_1X30               0x2016
+#define MEDIA_BUS_FMT_AYUV8_1X32               0x2017
+
+/* Bayer - next is     0x3019 */
+#define MEDIA_BUS_FMT_SBGGR8_1X8               0x3001
+#define MEDIA_BUS_FMT_SGBRG8_1X8               0x3013
+#define MEDIA_BUS_FMT_SGRBG8_1X8               0x3002
+#define MEDIA_BUS_FMT_SRGGB8_1X8               0x3014
+#define MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8                0x3015
+#define MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8                0x3016
+#define MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8                0x3017
+#define MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8                0x3018
+#define MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8                0x300b
+#define MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8                0x300c
+#define MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8                0x3009
+#define MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8                0x300d
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE     0x3003
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE     0x3004
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_BE     0x3005
+#define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_LE     0x3006
+#define MEDIA_BUS_FMT_SBGGR10_1X10             0x3007
+#define MEDIA_BUS_FMT_SGBRG10_1X10             0x300e
+#define MEDIA_BUS_FMT_SGRBG10_1X10             0x300a
+#define MEDIA_BUS_FMT_SRGGB10_1X10             0x300f
+#define MEDIA_BUS_FMT_SBGGR12_1X12             0x3008
+#define MEDIA_BUS_FMT_SGBRG12_1X12             0x3010
+#define MEDIA_BUS_FMT_SGRBG12_1X12             0x3011
+#define MEDIA_BUS_FMT_SRGGB12_1X12             0x3012
+
+/* JPEG compressed formats - next is   0x4002 */
+#define MEDIA_BUS_FMT_JPEG_1X8                 0x4001
+
+/* Vendor specific formats - next is   0x5002 */
+
+/* S5C73M3 sensor specific interleaved UYVY and JPEG */
+#define MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8                0x5001
+
+/* HSV - next is       0x6002 */
+#define MEDIA_BUS_FMT_AHSV8888_1X32            0x6001
+
+#endif /* __LINUX_MEDIA_BUS_FORMAT_H */
diff --git a/lib/libdss-include/linux/media.h b/lib/libdss-include/linux/media.h
new file mode 100644 (file)
index 0000000..83ef6a2
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Multimedia device API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_MEDIA_H
+#define __LINUX_MEDIA_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/version.h>
+
+#define MEDIA_API_VERSION      KERNEL_VERSION(0, 1, 0)
+
+struct media_device_info {
+       char driver[16];
+       char model[32];
+       char serial[40];
+       char bus_info[32];
+       __u32 media_version;
+       __u32 hw_revision;
+       __u32 driver_version;
+       __u32 reserved[31];
+};
+
+#define MEDIA_ENT_ID_FLAG_NEXT         (1 << 31)
+
+#define MEDIA_ENT_TYPE_SHIFT           16
+#define MEDIA_ENT_TYPE_MASK            0x00ff0000
+#define MEDIA_ENT_SUBTYPE_MASK         0x0000ffff
+
+#define MEDIA_ENT_T_DEVNODE            (1 << MEDIA_ENT_TYPE_SHIFT)
+#define MEDIA_ENT_T_DEVNODE_V4L                (MEDIA_ENT_T_DEVNODE + 1)
+#define MEDIA_ENT_T_DEVNODE_FB         (MEDIA_ENT_T_DEVNODE + 2)
+#define MEDIA_ENT_T_DEVNODE_ALSA       (MEDIA_ENT_T_DEVNODE + 3)
+#define MEDIA_ENT_T_DEVNODE_DVB_FE     (MEDIA_ENT_T_DEVNODE + 4)
+#define MEDIA_ENT_T_DEVNODE_DVB_DEMUX  (MEDIA_ENT_T_DEVNODE + 5)
+#define MEDIA_ENT_T_DEVNODE_DVB_DVR    (MEDIA_ENT_T_DEVNODE + 6)
+#define MEDIA_ENT_T_DEVNODE_DVB_CA     (MEDIA_ENT_T_DEVNODE + 7)
+#define MEDIA_ENT_T_DEVNODE_DVB_NET    (MEDIA_ENT_T_DEVNODE + 8)
+
+/* Legacy symbol. Use it to avoid userspace compilation breakages */
+#define MEDIA_ENT_T_DEVNODE_DVB                MEDIA_ENT_T_DEVNODE_DVB_FE
+
+#define MEDIA_ENT_T_V4L2_SUBDEV                (2 << MEDIA_ENT_TYPE_SHIFT)
+#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR (MEDIA_ENT_T_V4L2_SUBDEV + 1)
+#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH  (MEDIA_ENT_T_V4L2_SUBDEV + 2)
+#define MEDIA_ENT_T_V4L2_SUBDEV_LENS   (MEDIA_ENT_T_V4L2_SUBDEV + 3)
+/* A converter of analogue video to its digital representation. */
+#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER        (MEDIA_ENT_T_V4L2_SUBDEV + 4)
+
+#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER  (MEDIA_ENT_T_V4L2_SUBDEV + 5)
+
+#define MEDIA_ENT_FL_DEFAULT           (1 << 0)
+
+struct media_entity_desc {
+       __u32 id;
+       char name[32];
+       __u32 type;
+       __u32 revision;
+       __u32 flags;
+       __u32 group_id;
+       __u16 pads;
+       __u16 links;
+
+       __u32 reserved[4];
+
+       union {
+               /* Node specifications */
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } dev;
+
+#if 1
+               /*
+                * TODO: this shouldn't have been added without
+                * actual drivers that use this. When the first real driver
+                * appears that sets this information, special attention
+                * should be given whether this information is 1) enough, and
+                * 2) can deal with udev rules that rename devices. The struct
+                * dev would not be sufficient for this since that does not
+                * contain the subdevice information. In addition, struct dev
+                * can only refer to a single device, and not to multiple (e.g.
+                * pcm and mixer devices).
+                *
+                * So for now mark this as a to do.
+                */
+               struct {
+                       __u32 card;
+                       __u32 device;
+                       __u32 subdevice;
+               } alsa;
+#endif
+
+#if 1
+               /*
+                * DEPRECATED: previous node specifications. Kept just to
+                * avoid breaking compilation, but media_entity_desc.dev
+                * should be used instead. In particular, alsa and dvb
+                * fields below are wrong: for all devnodes, there should
+                * be just major/minor inside the struct, as this is enough
+                * to represent any devnode, no matter what type.
+                */
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } v4l;
+               struct {
+                       __u32 major;
+                       __u32 minor;
+               } fb;
+               int dvb;
+#endif
+
+               /* Sub-device specifications */
+               /* Nothing needed yet */
+               __u8 raw[184];
+       };
+};
+
+#define MEDIA_PAD_FL_SINK              (1 << 0)
+#define MEDIA_PAD_FL_SOURCE            (1 << 1)
+#define MEDIA_PAD_FL_MUST_CONNECT      (1 << 2)
+
+struct media_pad_desc {
+       __u32 entity;           /* entity ID */
+       __u16 index;            /* pad index */
+       __u32 flags;            /* pad flags */
+       __u32 reserved[2];
+};
+
+#define MEDIA_LNK_FL_ENABLED           (1 << 0)
+#define MEDIA_LNK_FL_IMMUTABLE         (1 << 1)
+#define MEDIA_LNK_FL_DYNAMIC           (1 << 2)
+
+struct media_link_desc {
+       struct media_pad_desc source;
+       struct media_pad_desc sink;
+       __u32 flags;
+       __u32 reserved[2];
+};
+
+struct media_links_enum {
+       __u32 entity;
+       /* Should have enough room for pads elements */
+       struct media_pad_desc *pads;
+       /* Should have enough room for links elements */
+       struct media_link_desc *links;
+       __u32 reserved[4];
+};
+
+#define MEDIA_IOC_DEVICE_INFO          _IOWR('|', 0x00, struct media_device_info)
+#define MEDIA_IOC_ENUM_ENTITIES                _IOWR('|', 0x01, struct media_entity_desc)
+#define MEDIA_IOC_ENUM_LINKS           _IOWR('|', 0x02, struct media_links_enum)
+#define MEDIA_IOC_SETUP_LINK           _IOWR('|', 0x03, struct media_link_desc)
+
+#endif /* __LINUX_MEDIA_H */
diff --git a/lib/libdss-include/linux/mei.h b/lib/libdss-include/linux/mei.h
new file mode 100644 (file)
index 0000000..7c3b64f
--- /dev/null
@@ -0,0 +1,129 @@
+/******************************************************************************
+ * Intel Management Engine Interface (Intel MEI) Linux driver
+ * Intel MEI Interface Header
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
+ * USA
+ *
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * Contact Information:
+ *     Intel Corporation.
+ *     linux-mei@linux.intel.com
+ *     http://www.intel.com
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  * Neither the name Intel Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+#ifndef _LINUX_MEI_H
+#define _LINUX_MEI_H
+
+#include <linux/uuid.h>
+
+/*
+ * This IOCTL is used to associate the current file descriptor with a
+ * FW Client (given by UUID). This opens a communication channel
+ * between a host client and a FW client. From this point every read and write
+ * will communicate with the associated FW client.
+ * Only in close() (file_operation release()) the communication between
+ * the clients is disconnected
+ *
+ * The IOCTL argument is a struct with a union that contains
+ * the input parameter and the output parameter for this IOCTL.
+ *
+ * The input parameter is UUID of the FW Client.
+ * The output parameter is the properties of the FW client
+ * (FW protocol version and max message size).
+ *
+ */
+#define IOCTL_MEI_CONNECT_CLIENT \
+       _IOWR('H' , 0x01, struct mei_connect_client_data)
+
+/*
+ * Intel MEI client information struct
+ */
+struct mei_client {
+       __u32 max_msg_length;
+       __u8 protocol_version;
+       __u8 reserved[3];
+};
+
+/*
+ * IOCTL Connect Client Data structure
+ */
+struct mei_connect_client_data {
+       union {
+               uuid_le in_client_uuid;
+               struct mei_client out_client_properties;
+       };
+};
+
+/**
+ * DOC: set and unset event notification for a connected client
+ *
+ * The IOCTL argument is 1 for enabling event notification and 0 for
+ * disabling the service
+ * Return:  -EOPNOTSUPP if the devices doesn't support the feature
+ */
+#define IOCTL_MEI_NOTIFY_SET _IOW('H', 0x02, __u32)
+
+/**
+ * DOC: retrieve notification
+ *
+ * The IOCTL output argument is 1 if an event was is pending and 0 otherwise
+ * the ioctl has to be called in order to acknowledge pending event
+ *
+ * Return:  -EOPNOTSUPP if the devices doesn't support the feature
+ */
+#define IOCTL_MEI_NOTIFY_GET _IOR('H', 0x03, __u32)
+
+#endif /* _LINUX_MEI_H  */
diff --git a/lib/libdss-include/linux/membarrier.h b/lib/libdss-include/linux/membarrier.h
new file mode 100644 (file)
index 0000000..2af9dde
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _LINUX_MEMBARRIER_H
+#define _LINUX_MEMBARRIER_H
+
+/*
+ * linux/membarrier.h
+ *
+ * membarrier system call API
+ *
+ * Copyright (c) 2010, 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * enum membarrier_cmd - membarrier system call command
+ * @MEMBARRIER_CMD_QUERY:   Query the set of supported commands. It returns
+ *                          a bitmask of valid commands.
+ * @MEMBARRIER_CMD_SHARED:  Execute a memory barrier on all running threads.
+ *                          Upon return from system call, the caller thread
+ *                          is ensured that all running threads have passed
+ *                          through a state where all memory accesses to
+ *                          user-space addresses match program order between
+ *                          entry to and return from the system call
+ *                          (non-running threads are de facto in such a
+ *                          state). This covers threads from all processes
+ *                          running on the system. This command returns 0.
+ *
+ * Command to be passed to the membarrier system call. The commands need to
+ * be a single bit each, except for MEMBARRIER_CMD_QUERY which is assigned to
+ * the value 0.
+ */
+enum membarrier_cmd {
+       MEMBARRIER_CMD_QUERY = 0,
+       MEMBARRIER_CMD_SHARED = (1 << 0),
+};
+
+#endif /* _LINUX_MEMBARRIER_H */
diff --git a/lib/libdss-include/linux/memfd.h b/lib/libdss-include/linux/memfd.h
new file mode 100644 (file)
index 0000000..6632b15
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _LINUX_MEMFD_H
+#define _LINUX_MEMFD_H
+
+/* flags for memfd_create(2) (unsigned int) */
+#define MFD_CLOEXEC            0x0001U
+#define MFD_ALLOW_SEALING      0x0002U
+
+#endif /* _LINUX_MEMFD_H */
diff --git a/lib/libdss-include/linux/mempolicy.h b/lib/libdss-include/linux/mempolicy.h
new file mode 100644 (file)
index 0000000..de2651f
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * NUMA memory policies for Linux.
+ * Copyright 2003,2004 Andi Kleen SuSE Labs
+ */
+#ifndef _LINUX_MEMPOLICY_H
+#define _LINUX_MEMPOLICY_H
+
+#include <linux/errno.h>
+
+
+/*
+ * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are
+ * passed by the user to either set_mempolicy() or mbind() in an 'int' actual.
+ * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags.
+ */
+
+/* Policies */
+enum {
+       MPOL_DEFAULT,
+       MPOL_PREFERRED,
+       MPOL_BIND,
+       MPOL_INTERLEAVE,
+       MPOL_LOCAL,
+       MPOL_MAX,       /* always last member of enum */
+};
+
+enum mpol_rebind_step {
+       MPOL_REBIND_ONCE,       /* do rebind work at once(not by two step) */
+       MPOL_REBIND_STEP1,      /* first step(set all the newly nodes) */
+       MPOL_REBIND_STEP2,      /* second step(clean all the disallowed nodes)*/
+       MPOL_REBIND_NSTEP,
+};
+
+/* Flags for set_mempolicy */
+#define MPOL_F_STATIC_NODES    (1 << 15)
+#define MPOL_F_RELATIVE_NODES  (1 << 14)
+
+/*
+ * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to
+ * either set_mempolicy() or mbind().
+ */
+#define MPOL_MODE_FLAGS        (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES)
+
+/* Flags for get_mempolicy */
+#define MPOL_F_NODE    (1<<0)  /* return next IL mode instead of node mask */
+#define MPOL_F_ADDR    (1<<1)  /* look up vma using address */
+#define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */
+
+/* Flags for mbind */
+#define MPOL_MF_STRICT (1<<0)  /* Verify existing pages in the mapping */
+#define MPOL_MF_MOVE    (1<<1) /* Move pages owned by this process to conform
+                                  to policy */
+#define MPOL_MF_MOVE_ALL (1<<2)        /* Move every page to conform to policy */
+#define MPOL_MF_LAZY    (1<<3) /* Modifies '_MOVE:  lazy migrate on fault */
+#define MPOL_MF_INTERNAL (1<<4)        /* Internal flags start here */
+
+#define MPOL_MF_VALID  (MPOL_MF_STRICT   |     \
+                        MPOL_MF_MOVE     |     \
+                        MPOL_MF_MOVE_ALL)
+
+/*
+ * Internal flags that share the struct mempolicy flags word with
+ * "mode flags".  These flags are allocated from bit 0 up, as they
+ * are never OR'ed into the mode in mempolicy API arguments.
+ */
+#define MPOL_F_SHARED  (1 << 0)        /* identify shared policies */
+#define MPOL_F_LOCAL   (1 << 1)        /* preferred local allocation */
+#define MPOL_F_REBINDING (1 << 2)      /* identify policies in rebinding */
+#define MPOL_F_MOF     (1 << 3) /* this policy wants migrate on fault */
+#define MPOL_F_MORON   (1 << 4) /* Migrate On protnone Reference On Node */
+
+
+#endif /* _LINUX_MEMPOLICY_H */
diff --git a/lib/libdss-include/linux/meye.h b/lib/libdss-include/linux/meye.h
new file mode 100644 (file)
index 0000000..8ff50fe
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Motion Eye video4linux driver for Sony Vaio PictureBook
+ *
+ * Copyright (C) 2001-2003 Stelian Pop <stelian@popies.net>
+ *
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ *
+ * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
+ *
+ * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras.
+ *
+ * Some parts borrowed from various video4linux drivers, especially
+ * bttv-driver.c and zoran.c, see original files for credits.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _MEYE_H_
+#define _MEYE_H_
+
+/****************************************************************************/
+/* Private API for handling mjpeg capture / playback.                       */
+/****************************************************************************/
+
+struct meye_params {
+       unsigned char subsample;
+       unsigned char quality;
+       unsigned char sharpness;
+       unsigned char agc;
+       unsigned char picture;
+       unsigned char framerate;
+};
+
+/* query the extended parameters */
+#define MEYEIOC_G_PARAMS       _IOR ('v', BASE_VIDIOC_PRIVATE+0, struct meye_params)
+/* set the extended parameters */
+#define MEYEIOC_S_PARAMS       _IOW ('v', BASE_VIDIOC_PRIVATE+1, struct meye_params)
+/* queue a buffer for mjpeg capture */
+#define MEYEIOC_QBUF_CAPT      _IOW ('v', BASE_VIDIOC_PRIVATE+2, int)
+/* sync a previously queued mjpeg buffer */
+#define MEYEIOC_SYNC           _IOWR('v', BASE_VIDIOC_PRIVATE+3, int)
+/* get a still uncompressed snapshot */
+#define MEYEIOC_STILLCAPT      _IO  ('v', BASE_VIDIOC_PRIVATE+4)
+/* get a jpeg compressed snapshot */
+#define MEYEIOC_STILLJCAPT     _IOR ('v', BASE_VIDIOC_PRIVATE+5, int)
+
+/* V4L2 private controls */
+#define V4L2_CID_MEYE_AGC              (V4L2_CID_USER_MEYE_BASE + 0)
+#define V4L2_CID_MEYE_PICTURE          (V4L2_CID_USER_MEYE_BASE + 1)
+#define V4L2_CID_MEYE_FRAMERATE                (V4L2_CID_USER_MEYE_BASE + 2)
+
+#endif
diff --git a/lib/libdss-include/linux/mic_common.h b/lib/libdss-include/linux/mic_common.h
new file mode 100644 (file)
index 0000000..667263a
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * Copyright(c) 2013 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * The full GNU General Public License is included in this distribution in
+ * the file called "COPYING".
+ *
+ * Intel MIC driver.
+ *
+ */
+#ifndef __MIC_COMMON_H_
+#define __MIC_COMMON_H_
+
+#include <linux/virtio_ring.h>
+
+#define __mic_align(a, x) (((a) + (x) - 1) & ~((x) - 1))
+
+/**
+ * struct mic_device_desc: Virtio device information shared between the
+ * virtio driver and userspace backend
+ *
+ * @type: Device type: console/network/disk etc.  Type 0/-1 terminates.
+ * @num_vq: Number of virtqueues.
+ * @feature_len: Number of bytes of feature bits.  Multiply by 2: one for
+   host features and one for guest acknowledgements.
+ * @config_len: Number of bytes of the config array after virtqueues.
+ * @status: A status byte, written by the Guest.
+ * @config: Start of the following variable length config.
+ */
+struct mic_device_desc {
+       __s8 type;
+       __u8 num_vq;
+       __u8 feature_len;
+       __u8 config_len;
+       __u8 status;
+       __le64 config[0];
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_device_ctrl: Per virtio device information in the device page
+ * used internally by the host and card side drivers.
+ *
+ * @vdev: Used for storing MIC vdev information by the guest.
+ * @config_change: Set to 1 by host when a config change is requested.
+ * @vdev_reset: Set to 1 by guest to indicate virtio device has been reset.
+ * @guest_ack: Set to 1 by guest to ack a command.
+ * @host_ack: Set to 1 by host to ack a command.
+ * @used_address_updated: Set to 1 by guest when the used address should be
+ * updated.
+ * @c2h_vdev_db: The doorbell number to be used by guest. Set by host.
+ * @h2c_vdev_db: The doorbell number to be used by host. Set by guest.
+ */
+struct mic_device_ctrl {
+       __le64 vdev;
+       __u8 config_change;
+       __u8 vdev_reset;
+       __u8 guest_ack;
+       __u8 host_ack;
+       __u8 used_address_updated;
+       __s8 c2h_vdev_db;
+       __s8 h2c_vdev_db;
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_bootparam: Virtio device independent information in device page
+ *
+ * @magic: A magic value used by the card to ensure it can see the host
+ * @h2c_config_db: Host to Card Virtio config doorbell set by card
+ * @node_id: Unique id of the node
+ * @h2c_scif_db - Host to card SCIF doorbell set by card
+ * @c2h_scif_db - Card to host SCIF doorbell set by host
+ * @scif_host_dma_addr - SCIF host queue pair DMA address
+ * @scif_card_dma_addr - SCIF card queue pair DMA address
+ */
+struct mic_bootparam {
+       __le32 magic;
+       __s8 h2c_config_db;
+       __u8 node_id;
+       __u8 h2c_scif_db;
+       __u8 c2h_scif_db;
+       __u64 scif_host_dma_addr;
+       __u64 scif_card_dma_addr;
+} __attribute__ ((aligned(8)));
+
+/**
+ * struct mic_device_page: High level representation of the device page
+ *
+ * @bootparam: The bootparam structure is used for sharing information and
+ * status updates between MIC host and card drivers.
+ * @desc: Array of MIC virtio device descriptors.
+ */
+struct mic_device_page {
+       struct mic_bootparam bootparam;
+       struct mic_device_desc desc[0];
+};
+/**
+ * struct mic_vqconfig: This is how we expect the device configuration field
+ * for a virtqueue to be laid out in config space.
+ *
+ * @address: Guest/MIC physical address of the virtio ring
+ * (avail and desc rings)
+ * @used_address: Guest/MIC physical address of the used ring
+ * @num: The number of entries in the virtio_ring
+ */
+struct mic_vqconfig {
+       __le64 address;
+       __le64 used_address;
+       __le16 num;
+} __attribute__ ((aligned(8)));
+
+/*
+ * The alignment to use between consumer and producer parts of vring.
+ * This is pagesize for historical reasons.
+ */
+#define MIC_VIRTIO_RING_ALIGN          4096
+
+#define MIC_MAX_VRINGS                 4
+#define MIC_VRING_ENTRIES              128
+
+/*
+ * Max vring entries (power of 2) to ensure desc and avail rings
+ * fit in a single page
+ */
+#define MIC_MAX_VRING_ENTRIES          128
+
+/**
+ * Max size of the desc block in bytes: includes:
+ *     - struct mic_device_desc
+ *     - struct mic_vqconfig (num_vq of these)
+ *     - host and guest features
+ *     - virtio device config space
+ */
+#define MIC_MAX_DESC_BLK_SIZE          256
+
+/**
+ * struct _mic_vring_info - Host vring info exposed to userspace backend
+ * for the avail index and magic for the card.
+ *
+ * @avail_idx: host avail idx
+ * @magic: A magic debug cookie.
+ */
+struct _mic_vring_info {
+       __u16 avail_idx;
+       __le32 magic;
+};
+
+/**
+ * struct mic_vring - Vring information.
+ *
+ * @vr: The virtio ring.
+ * @info: Host vring information exposed to the userspace backend for the
+ * avail index and magic for the card.
+ * @va: The va for the buffer allocated for vr and info.
+ * @len: The length of the buffer required for allocating vr and info.
+ */
+struct mic_vring {
+       struct vring vr;
+       struct _mic_vring_info *info;
+       void *va;
+       int len;
+};
+
+#define mic_aligned_desc_size(d) __mic_align(mic_desc_size(d), 8)
+
+#ifndef INTEL_MIC_CARD
+static __inline__ unsigned mic_desc_size(const struct mic_device_desc *desc)
+{
+       return sizeof(*desc) + desc->num_vq * sizeof(struct mic_vqconfig)
+               + desc->feature_len * 2 + desc->config_len;
+}
+
+static __inline__ struct mic_vqconfig *
+mic_vq_config(const struct mic_device_desc *desc)
+{
+       return (struct mic_vqconfig *)(desc + 1);
+}
+
+static __inline__ __u8 *mic_vq_features(const struct mic_device_desc *desc)
+{
+       return (__u8 *)(mic_vq_config(desc) + desc->num_vq);
+}
+
+static __inline__ __u8 *mic_vq_configspace(const struct mic_device_desc *desc)
+{
+       return mic_vq_features(desc) + desc->feature_len * 2;
+}
+static __inline__ unsigned mic_total_desc_size(struct mic_device_desc *desc)
+{
+       return mic_aligned_desc_size(desc) + sizeof(struct mic_device_ctrl);
+}
+#endif
+
+/* Device page size */
+#define MIC_DP_SIZE 4096
+
+#define MIC_MAGIC 0xc0ffee00
+
+/**
+ * enum mic_states - MIC states.
+ */
+enum mic_states {
+       MIC_READY = 0,
+       MIC_BOOTING,
+       MIC_ONLINE,
+       MIC_SHUTTING_DOWN,
+       MIC_RESETTING,
+       MIC_RESET_FAILED,
+       MIC_LAST
+};
+
+/**
+ * enum mic_status - MIC status reported by card after
+ * a host or card initiated shutdown or a card crash.
+ */
+enum mic_status {
+       MIC_NOP = 0,
+       MIC_CRASHED,
+       MIC_HALTED,
+       MIC_POWER_OFF,
+       MIC_RESTART,
+       MIC_STATUS_LAST
+};
+
+#endif
diff --git a/lib/libdss-include/linux/mic_ioctl.h b/lib/libdss-include/linux/mic_ioctl.h
new file mode 100644 (file)
index 0000000..a0d7ce6
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * Copyright(c) 2013 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * The full GNU General Public License is included in this distribution in
+ * the file called "COPYING".
+ *
+ * Intel MIC Host driver.
+ *
+ */
+#ifndef _MIC_IOCTL_H_
+#define _MIC_IOCTL_H_
+
+#include <linux/types.h>
+
+/*
+ * mic_copy - MIC virtio descriptor copy.
+ *
+ * @iov: An array of IOVEC structures containing user space buffers.
+ * @iovcnt: Number of IOVEC structures in iov.
+ * @vr_idx: The vring index.
+ * @update_used: A non zero value results in used index being updated.
+ * @out_len: The aggregate of the total length written to or read from
+ *     the virtio device.
+ */
+struct mic_copy_desc {
+       struct iovec *iov;
+       __u32 iovcnt;
+       __u8 vr_idx;
+       __u8 update_used;
+       __u32 out_len;
+};
+
+/*
+ * Add a new virtio device
+ * The (struct mic_device_desc *) pointer points to a device page entry
+ *     for the virtio device consisting of:
+ *     - struct mic_device_desc
+ *     - struct mic_vqconfig (num_vq of these)
+ *     - host and guest features
+ *     - virtio device config space
+ * The total size referenced by the pointer should equal the size returned
+ * by desc_size() in mic_common.h
+ */
+#define MIC_VIRTIO_ADD_DEVICE _IOWR('s', 1, struct mic_device_desc *)
+
+/*
+ * Copy the number of entries in the iovec and update the used index
+ * if requested by the user.
+ */
+#define MIC_VIRTIO_COPY_DESC   _IOWR('s', 2, struct mic_copy_desc *)
+
+/*
+ * Notify virtio device of a config change
+ * The (__u8 *) pointer points to config space values for the device
+ * as they should be written into the device page. The total size
+ * referenced by the pointer should equal the config_len field of struct
+ * mic_device_desc.
+ */
+#define MIC_VIRTIO_CONFIG_CHANGE _IOWR('s', 5, __u8 *)
+
+#endif
diff --git a/lib/libdss-include/linux/mii.h b/lib/libdss-include/linux/mii.h
new file mode 100644 (file)
index 0000000..c75eea1
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * linux/mii.h: definitions for MII-compatible transceivers
+ * Originally drivers/net/sunhme.h.
+ *
+ * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com)
+ */
+
+#ifndef __LINUX_MII_H__
+#define __LINUX_MII_H__
+
+#include <linux/types.h>
+#include <linux/ethtool.h>
+
+/* Generic MII registers. */
+#define MII_BMCR               0x00    /* Basic mode control register */
+#define MII_BMSR               0x01    /* Basic mode status register  */
+#define MII_PHYSID1            0x02    /* PHYS ID 1                   */
+#define MII_PHYSID2            0x03    /* PHYS ID 2                   */
+#define MII_ADVERTISE          0x04    /* Advertisement control reg   */
+#define MII_LPA                        0x05    /* Link partner ability reg    */
+#define MII_EXPANSION          0x06    /* Expansion register          */
+#define MII_CTRL1000           0x09    /* 1000BASE-T control          */
+#define MII_STAT1000           0x0a    /* 1000BASE-T status           */
+#define        MII_MMD_CTRL            0x0d    /* MMD Access Control Register */
+#define        MII_MMD_DATA            0x0e    /* MMD Access Data Register */
+#define MII_ESTATUS            0x0f    /* Extended Status             */
+#define MII_DCOUNTER           0x12    /* Disconnect counter          */
+#define MII_FCSCOUNTER         0x13    /* False carrier counter       */
+#define MII_NWAYTEST           0x14    /* N-way auto-neg test reg     */
+#define MII_RERRCOUNTER                0x15    /* Receive error counter       */
+#define MII_SREVISION          0x16    /* Silicon revision            */
+#define MII_RESV1              0x17    /* Reserved...                 */
+#define MII_LBRERROR           0x18    /* Lpback, rx, bypass error    */
+#define MII_PHYADDR            0x19    /* PHY address                 */
+#define MII_RESV2              0x1a    /* Reserved...                 */
+#define MII_TPISTATUS          0x1b    /* TPI status for 10mbps       */
+#define MII_NCONFIG            0x1c    /* Network interface config    */
+
+/* Basic mode control register. */
+#define BMCR_RESV              0x003f  /* Unused...                   */
+#define BMCR_SPEED1000         0x0040  /* MSB of Speed (1000)         */
+#define BMCR_CTST              0x0080  /* Collision test              */
+#define BMCR_FULLDPLX          0x0100  /* Full duplex                 */
+#define BMCR_ANRESTART         0x0200  /* Auto negotiation restart    */
+#define BMCR_ISOLATE           0x0400  /* Isolate data paths from MII */
+#define BMCR_PDOWN             0x0800  /* Enable low power state      */
+#define BMCR_ANENABLE          0x1000  /* Enable auto negotiation     */
+#define BMCR_SPEED100          0x2000  /* Select 100Mbps              */
+#define BMCR_LOOPBACK          0x4000  /* TXD loopback bits           */
+#define BMCR_RESET             0x8000  /* Reset to default state      */
+
+/* Basic mode status register. */
+#define BMSR_ERCAP             0x0001  /* Ext-reg capability          */
+#define BMSR_JCD               0x0002  /* Jabber detected             */
+#define BMSR_LSTATUS           0x0004  /* Link status                 */
+#define BMSR_ANEGCAPABLE       0x0008  /* Able to do auto-negotiation */
+#define BMSR_RFAULT            0x0010  /* Remote fault detected       */
+#define BMSR_ANEGCOMPLETE      0x0020  /* Auto-negotiation complete   */
+#define BMSR_RESV              0x00c0  /* Unused...                   */
+#define BMSR_ESTATEN           0x0100  /* Extended Status in R15      */
+#define BMSR_100HALF2          0x0200  /* Can do 100BASE-T2 HDX       */
+#define BMSR_100FULL2          0x0400  /* Can do 100BASE-T2 FDX       */
+#define BMSR_10HALF            0x0800  /* Can do 10mbps, half-duplex  */
+#define BMSR_10FULL            0x1000  /* Can do 10mbps, full-duplex  */
+#define BMSR_100HALF           0x2000  /* Can do 100mbps, half-duplex */
+#define BMSR_100FULL           0x4000  /* Can do 100mbps, full-duplex */
+#define BMSR_100BASE4          0x8000  /* Can do 100mbps, 4k packets  */
+
+/* Advertisement control register. */
+#define ADVERTISE_SLCT         0x001f  /* Selector bits               */
+#define ADVERTISE_CSMA         0x0001  /* Only selector supported     */
+#define ADVERTISE_10HALF       0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_1000XFULL    0x0020  /* Try for 1000BASE-X full-duplex */
+#define ADVERTISE_10FULL       0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_1000XHALF    0x0040  /* Try for 1000BASE-X half-duplex */
+#define ADVERTISE_100HALF      0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_1000XPAUSE   0x0080  /* Try for 1000BASE-X pause    */
+#define ADVERTISE_100FULL      0x0100  /* Try for 100mbps full-duplex */
+#define ADVERTISE_1000XPSE_ASYM        0x0100  /* Try for 1000BASE-X asym pause */
+#define ADVERTISE_100BASE4     0x0200  /* Try for 100mbps 4k packets  */
+#define ADVERTISE_PAUSE_CAP    0x0400  /* Try for pause               */
+#define ADVERTISE_PAUSE_ASYM   0x0800  /* Try for asymetric pause     */
+#define ADVERTISE_RESV         0x1000  /* Unused...                   */
+#define ADVERTISE_RFAULT       0x2000  /* Say we can detect faults    */
+#define ADVERTISE_LPACK                0x4000  /* Ack link partners response  */
+#define ADVERTISE_NPAGE                0x8000  /* Next page bit               */
+
+#define ADVERTISE_FULL         (ADVERTISE_100FULL | ADVERTISE_10FULL | \
+                                 ADVERTISE_CSMA)
+#define ADVERTISE_ALL          (ADVERTISE_10HALF | ADVERTISE_10FULL | \
+                                 ADVERTISE_100HALF | ADVERTISE_100FULL)
+
+/* Link partner ability register. */
+#define LPA_SLCT               0x001f  /* Same as advertise selector  */
+#define LPA_10HALF             0x0020  /* Can do 10mbps half-duplex   */
+#define LPA_1000XFULL          0x0020  /* Can do 1000BASE-X full-duplex */
+#define LPA_10FULL             0x0040  /* Can do 10mbps full-duplex   */
+#define LPA_1000XHALF          0x0040  /* Can do 1000BASE-X half-duplex */
+#define LPA_100HALF            0x0080  /* Can do 100mbps half-duplex  */
+#define LPA_1000XPAUSE         0x0080  /* Can do 1000BASE-X pause     */
+#define LPA_100FULL            0x0100  /* Can do 100mbps full-duplex  */
+#define LPA_1000XPAUSE_ASYM    0x0100  /* Can do 1000BASE-X pause asym*/
+#define LPA_100BASE4           0x0200  /* Can do 100mbps 4k packets   */
+#define LPA_PAUSE_CAP          0x0400  /* Can pause                   */
+#define LPA_PAUSE_ASYM         0x0800  /* Can pause asymetrically     */
+#define LPA_RESV               0x1000  /* Unused...                   */
+#define LPA_RFAULT             0x2000  /* Link partner faulted        */
+#define LPA_LPACK              0x4000  /* Link partner acked us       */
+#define LPA_NPAGE              0x8000  /* Next page bit               */
+
+#define LPA_DUPLEX             (LPA_10FULL | LPA_100FULL)
+#define LPA_100                        (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
+
+/* Expansion register for auto-negotiation. */
+#define EXPANSION_NWAY         0x0001  /* Can do N-way auto-nego      */
+#define EXPANSION_LCWP         0x0002  /* Got new RX page code word   */
+#define EXPANSION_ENABLENPAGE  0x0004  /* This enables npage words    */
+#define EXPANSION_NPCAPABLE    0x0008  /* Link partner supports npage */
+#define EXPANSION_MFAULTS      0x0010  /* Multiple faults detected    */
+#define EXPANSION_RESV         0xffe0  /* Unused...                   */
+
+#define ESTATUS_1000_TFULL     0x2000  /* Can do 1000BT Full          */
+#define ESTATUS_1000_THALF     0x1000  /* Can do 1000BT Half          */
+
+/* N-way test register. */
+#define NWAYTEST_RESV1         0x00ff  /* Unused...                   */
+#define NWAYTEST_LOOPBACK      0x0100  /* Enable loopback for N-way   */
+#define NWAYTEST_RESV2         0xfe00  /* Unused...                   */
+
+/* 1000BASE-T Control register */
+#define ADVERTISE_1000FULL     0x0200  /* Advertise 1000BASE-T full duplex */
+#define ADVERTISE_1000HALF     0x0100  /* Advertise 1000BASE-T half duplex */
+#define CTL1000_AS_MASTER      0x0800
+#define CTL1000_ENABLE_MASTER  0x1000
+
+/* 1000BASE-T Status register */
+#define LPA_1000LOCALRXOK      0x2000  /* Link partner local receiver status */
+#define LPA_1000REMRXOK                0x1000  /* Link partner remote receiver status */
+#define LPA_1000FULL           0x0800  /* Link partner 1000BASE-T full duplex */
+#define LPA_1000HALF           0x0400  /* Link partner 1000BASE-T half duplex */
+
+/* Flow control flags */
+#define FLOW_CTRL_TX           0x01
+#define FLOW_CTRL_RX           0x02
+
+/* MMD Access Control register fields */
+#define MII_MMD_CTRL_DEVAD_MASK        0x1f    /* Mask MMD DEVAD*/
+#define MII_MMD_CTRL_ADDR      0x0000  /* Address */
+#define MII_MMD_CTRL_NOINCR    0x4000  /* no post increment */
+#define MII_MMD_CTRL_INCR_RDWT 0x8000  /* post increment on reads & writes */
+#define MII_MMD_CTRL_INCR_ON_WT        0xC000  /* post increment on writes only */
+
+/* This structure is used in all SIOCxMIIxxx ioctl calls */
+struct mii_ioctl_data {
+       __u16           phy_id;
+       __u16           reg_num;
+       __u16           val_in;
+       __u16           val_out;
+};
+
+#endif /* __LINUX_MII_H__ */
diff --git a/lib/libdss-include/linux/minix_fs.h b/lib/libdss-include/linux/minix_fs.h
new file mode 100644 (file)
index 0000000..13fe09e
--- /dev/null
@@ -0,0 +1,106 @@
+#ifndef _LINUX_MINIX_FS_H
+#define _LINUX_MINIX_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ * The minix filesystem constants/structures
+ */
+
+/*
+ * Thanks to Kees J Bot for sending me the definitions of the new
+ * minix filesystem (aka V2) with bigger inodes and 32-bit block
+ * pointers.
+ */
+
+#define MINIX_ROOT_INO 1
+
+/* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
+#define MINIX_LINK_MAX 250
+#define MINIX2_LINK_MAX        65530
+
+#define MINIX_I_MAP_SLOTS      8
+#define MINIX_Z_MAP_SLOTS      64
+#define MINIX_VALID_FS         0x0001          /* Clean fs. */
+#define MINIX_ERROR_FS         0x0002          /* fs has errors. */
+
+#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
+
+/*
+ * This is the original minix inode layout on disk.
+ * Note the 8-bit gid and atime and ctime.
+ */
+struct minix_inode {
+       __u16 i_mode;
+       __u16 i_uid;
+       __u32 i_size;
+       __u32 i_time;
+       __u8  i_gid;
+       __u8  i_nlinks;
+       __u16 i_zone[9];
+};
+
+/*
+ * The new minix inode has all the time entries, as well as
+ * long block numbers and a third indirect block (7+1+1+1
+ * instead of 7+1+1). Also, some previously 8-bit values are
+ * now 16-bit. The inode is now 64 bytes instead of 32.
+ */
+struct minix2_inode {
+       __u16 i_mode;
+       __u16 i_nlinks;
+       __u16 i_uid;
+       __u16 i_gid;
+       __u32 i_size;
+       __u32 i_atime;
+       __u32 i_mtime;
+       __u32 i_ctime;
+       __u32 i_zone[10];
+};
+
+/*
+ * minix super-block data on disk
+ */
+struct minix_super_block {
+       __u16 s_ninodes;
+       __u16 s_nzones;
+       __u16 s_imap_blocks;
+       __u16 s_zmap_blocks;
+       __u16 s_firstdatazone;
+       __u16 s_log_zone_size;
+       __u32 s_max_size;
+       __u16 s_magic;
+       __u16 s_state;
+       __u32 s_zones;
+};
+
+/*
+ * V3 minix super-block data on disk
+ */
+struct minix3_super_block {
+       __u32 s_ninodes;
+       __u16 s_pad0;
+       __u16 s_imap_blocks;
+       __u16 s_zmap_blocks;
+       __u16 s_firstdatazone;
+       __u16 s_log_zone_size;
+       __u16 s_pad1;
+       __u32 s_max_size;
+       __u32 s_zones;
+       __u16 s_magic;
+       __u16 s_pad2;
+       __u16 s_blocksize;
+       __u8  s_disk_version;
+};
+
+struct minix_dir_entry {
+       __u16 inode;
+       char name[0];
+};
+
+struct minix3_dir_entry {
+       __u32 inode;
+       char name[0];
+};
+#endif
diff --git a/lib/libdss-include/linux/mman.h b/lib/libdss-include/linux/mman.h
new file mode 100644 (file)
index 0000000..36b3004
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_MMAN_H
+#define _LINUX_MMAN_H
+
+#include <asm/mman.h>
+
+#define MREMAP_MAYMOVE 1
+#define MREMAP_FIXED   2
+
+#define OVERCOMMIT_GUESS               0
+#define OVERCOMMIT_ALWAYS              1
+#define OVERCOMMIT_NEVER               2
+
+#endif /* _LINUX_MMAN_H */
diff --git a/lib/libdss-include/linux/mmc/ioctl.h b/lib/libdss-include/linux/mmc/ioctl.h
new file mode 100644 (file)
index 0000000..7e385b8
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef LINUX_MMC_IOCTL_H
+#define LINUX_MMC_IOCTL_H
+
+#include <linux/types.h>
+
+struct mmc_ioc_cmd {
+       /* Implies direction of data.  true = write, false = read */
+       int write_flag;
+
+       /* Application-specific command.  true = precede with CMD55 */
+       int is_acmd;
+
+       __u32 opcode;
+       __u32 arg;
+       __u32 response[4];  /* CMD response */
+       unsigned int flags;
+       unsigned int blksz;
+       unsigned int blocks;
+
+       /*
+        * Sleep at least postsleep_min_us useconds, and at most
+        * postsleep_max_us useconds *after* issuing command.  Needed for
+        * some read commands for which cards have no other way of indicating
+        * they're ready for the next command (i.e. there is no equivalent of
+        * a "busy" indicator for read operations).
+        */
+       unsigned int postsleep_min_us;
+       unsigned int postsleep_max_us;
+
+       /*
+        * Override driver-computed timeouts.  Note the difference in units!
+        */
+       unsigned int data_timeout_ns;
+       unsigned int cmd_timeout_ms;
+
+       /*
+        * For 64-bit machines, the next member, ``__u64 data_ptr``, wants to
+        * be 8-byte aligned.  Make sure this struct is the same size when
+        * built for 32-bit.
+        */
+       __u32 __pad;
+
+       /* DAT buffer */
+       __u64 data_ptr;
+};
+#define mmc_ioc_cmd_set_data(ic, ptr) ic.data_ptr = (__u64)(unsigned long) ptr
+
+/**
+ * struct mmc_ioc_multi_cmd - multi command information
+ * @num_of_cmds: Number of commands to send. Must be equal to or less than
+ *     MMC_IOC_MAX_CMDS.
+ * @cmds: Array of commands with length equal to 'num_of_cmds'
+ */
+struct mmc_ioc_multi_cmd {
+       __u64 num_of_cmds;
+       struct mmc_ioc_cmd cmds[0];
+};
+
+#define MMC_IOC_CMD _IOWR(MMC_BLOCK_MAJOR, 0, struct mmc_ioc_cmd)
+/*
+ * MMC_IOC_MULTI_CMD: Used to send an array of MMC commands described by
+ *     the structure mmc_ioc_multi_cmd. The MMC driver will issue all
+ *     commands in array in sequence to card.
+ */
+#define MMC_IOC_MULTI_CMD _IOWR(MMC_BLOCK_MAJOR, 1, struct mmc_ioc_multi_cmd)
+/*
+ * Since this ioctl is only meant to enhance (and not replace) normal access
+ * to the mmc bus device, an upper data transfer limit of MMC_IOC_MAX_BYTES
+ * is enforced per ioctl call.  For larger data transfers, use the normal
+ * block device operations.
+ */
+#define MMC_IOC_MAX_BYTES  (512L * 256)
+#define MMC_IOC_MAX_CMDS    255
+#endif /* LINUX_MMC_IOCTL_H */
diff --git a/lib/libdss-include/linux/mmtimer.h b/lib/libdss-include/linux/mmtimer.h
new file mode 100644 (file)
index 0000000..884cabf
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Intel Multimedia Timer device interface
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (c) 2001-2004 Silicon Graphics, Inc.  All rights reserved.
+ *
+ * This file should define an interface compatible with the IA-PC Multimedia
+ * Timers Draft Specification (rev. 0.97) from Intel.  Note that some
+ * hardware may not be able to safely export its registers to userspace,
+ * so the ioctl interface should support all necessary functionality.
+ *
+ * 11/01/01 - jbarnes - initial revision
+ * 9/10/04 - Christoph Lameter - remove interrupt support
+ * 9/17/04 - jbarnes - remove test program, move some #defines to the driver
+ */
+
+#ifndef _LINUX_MMTIMER_H
+#define _LINUX_MMTIMER_H
+
+/*
+ * Breakdown of the ioctl's available.  An 'optional' next to the command
+ * indicates that supporting this command is optional, while 'required'
+ * commands must be implemented if conformance is desired.
+ *
+ * MMTIMER_GETOFFSET - optional
+ *   Should return the offset (relative to the start of the page where the
+ *   registers are mapped) for the counter in question.
+ *
+ * MMTIMER_GETRES - required
+ *   The resolution of the clock in femto (10^-15) seconds
+ *
+ * MMTIMER_GETFREQ - required
+ *   Frequency of the clock in Hz
+ *
+ * MMTIMER_GETBITS - required
+ *   Number of bits in the clock's counter
+ *
+ * MMTIMER_MMAPAVAIL - required
+ *   Returns nonzero if the registers can be mmap'd into userspace, 0 otherwise
+ *
+ * MMTIMER_GETCOUNTER - required
+ *   Gets the current value in the counter
+ */
+#define MMTIMER_IOCTL_BASE 'm'
+
+#define MMTIMER_GETOFFSET _IO(MMTIMER_IOCTL_BASE, 0)
+#define MMTIMER_GETRES _IOR(MMTIMER_IOCTL_BASE, 1, unsigned long)
+#define MMTIMER_GETFREQ _IOR(MMTIMER_IOCTL_BASE, 2, unsigned long)
+#define MMTIMER_GETBITS _IO(MMTIMER_IOCTL_BASE, 4)
+#define MMTIMER_MMAPAVAIL _IO(MMTIMER_IOCTL_BASE, 6)
+#define MMTIMER_GETCOUNTER _IOR(MMTIMER_IOCTL_BASE, 9, unsigned long)
+
+#endif /* _LINUX_MMTIMER_H */
diff --git a/lib/libdss-include/linux/mpls.h b/lib/libdss-include/linux/mpls.h
new file mode 100644 (file)
index 0000000..a14b54b
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _MPLS_H
+#define _MPLS_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/* Reference: RFC 5462, RFC 3032
+ *
+ *  0                   1                   2                   3
+ *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                Label                  | TC  |S|       TTL     |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *     Label:  Label Value, 20 bits
+ *     TC:     Traffic Class field, 3 bits
+ *     S:      Bottom of Stack, 1 bit
+ *     TTL:    Time to Live, 8 bits
+ */
+
+struct mpls_label {
+       __be32 entry;
+};
+
+#define MPLS_LS_LABEL_MASK      0xFFFFF000
+#define MPLS_LS_LABEL_SHIFT     12
+#define MPLS_LS_TC_MASK         0x00000E00
+#define MPLS_LS_TC_SHIFT        9
+#define MPLS_LS_S_MASK          0x00000100
+#define MPLS_LS_S_SHIFT         8
+#define MPLS_LS_TTL_MASK        0x000000FF
+#define MPLS_LS_TTL_SHIFT       0
+
+/* Reserved labels */
+#define MPLS_LABEL_IPV4NULL            0 /* RFC3032 */
+#define MPLS_LABEL_RTALERT             1 /* RFC3032 */
+#define MPLS_LABEL_IPV6NULL            2 /* RFC3032 */
+#define MPLS_LABEL_IMPLNULL            3 /* RFC3032 */
+#define MPLS_LABEL_ENTROPY             7 /* RFC6790 */
+#define MPLS_LABEL_GAL                 13 /* RFC5586 */
+#define MPLS_LABEL_OAMALERT            14 /* RFC3429 */
+#define MPLS_LABEL_EXTENSION           15 /* RFC7274 */
+
+#define MPLS_LABEL_FIRST_UNRESERVED    16 /* RFC3032 */
+
+#endif /* _MPLS_H */
diff --git a/lib/libdss-include/linux/mpls_iptunnel.h b/lib/libdss-include/linux/mpls_iptunnel.h
new file mode 100644 (file)
index 0000000..4132c3c
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *     mpls tunnel api
+ *
+ *     Authors:
+ *             Roopa Prabhu <roopa@cumulusnetworks.com>
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_MPLS_IPTUNNEL_H
+#define _LINUX_MPLS_IPTUNNEL_H
+
+/* MPLS tunnel attributes
+ * [RTA_ENCAP] = {
+ *     [MPLS_IPTUNNEL_DST]
+ * }
+ */
+enum {
+       MPLS_IPTUNNEL_UNSPEC,
+       MPLS_IPTUNNEL_DST,
+       __MPLS_IPTUNNEL_MAX,
+};
+#define MPLS_IPTUNNEL_MAX (__MPLS_IPTUNNEL_MAX - 1)
+
+#endif /* _LINUX_MPLS_IPTUNNEL_H */
diff --git a/lib/libdss-include/linux/mqueue.h b/lib/libdss-include/linux/mqueue.h
new file mode 100644 (file)
index 0000000..d0a2b8e
--- /dev/null
@@ -0,0 +1,53 @@
+/* Copyright (C) 2003 Krzysztof Benedyczak & Michal Wronski
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   It is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this software; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _LINUX_MQUEUE_H
+#define _LINUX_MQUEUE_H
+
+#define MQ_PRIO_MAX    32768
+/* per-uid limit of kernel memory used by mqueue, in bytes */
+#define MQ_BYTES_MAX   819200
+
+struct mq_attr {
+       __kernel_long_t mq_flags;       /* message queue flags                  */
+       __kernel_long_t mq_maxmsg;      /* maximum number of messages           */
+       __kernel_long_t mq_msgsize;     /* maximum message size                 */
+       __kernel_long_t mq_curmsgs;     /* number of messages currently queued  */
+       __kernel_long_t __reserved[4];  /* ignored for input, zeroed for output */
+};
+
+/*
+ * SIGEV_THREAD implementation:
+ * SIGEV_THREAD must be implemented in user space. If SIGEV_THREAD is passed
+ * to mq_notify, then
+ * - sigev_signo must be the file descriptor of an AF_NETLINK socket. It's not
+ *   necessary that the socket is bound.
+ * - sigev_value.sival_ptr must point to a cookie that is NOTIFY_COOKIE_LEN
+ *   bytes long.
+ * If the notification is triggered, then the cookie is sent to the netlink
+ * socket. The last byte of the cookie is replaced with the NOTIFY_?? codes:
+ * NOTIFY_WOKENUP if the notification got triggered, NOTIFY_REMOVED if it was
+ * removed, either due to a close() on the message queue fd or due to a
+ * mq_notify() that removed the notification.
+ */
+#define NOTIFY_NONE    0
+#define NOTIFY_WOKENUP 1
+#define NOTIFY_REMOVED 2
+
+#define NOTIFY_COOKIE_LEN      32
+
+#endif
diff --git a/lib/libdss-include/linux/mroute.h b/lib/libdss-include/linux/mroute.h
new file mode 100644 (file)
index 0000000..ef12aa4
--- /dev/null
@@ -0,0 +1,146 @@
+#ifndef __LINUX_MROUTE_H
+#define __LINUX_MROUTE_H
+
+#include <linux/sockios.h>
+#include <linux/types.h>
+
+/*
+ *     Based on the MROUTING 3.5 defines primarily to keep
+ *     source compatibility with BSD.
+ *
+ *     See the mrouted code for the original history.
+ *
+ *      Protocol Independent Multicast (PIM) data structures included
+ *      Carlos Picoto (cap@di.fc.ul.pt)
+ *
+ */
+
+#define MRT_BASE       200
+#define MRT_INIT       (MRT_BASE)      /* Activate the kernel mroute code      */
+#define MRT_DONE       (MRT_BASE+1)    /* Shutdown the kernel mroute           */
+#define MRT_ADD_VIF    (MRT_BASE+2)    /* Add a virtual interface              */
+#define MRT_DEL_VIF    (MRT_BASE+3)    /* Delete a virtual interface           */
+#define MRT_ADD_MFC    (MRT_BASE+4)    /* Add a multicast forwarding entry     */
+#define MRT_DEL_MFC    (MRT_BASE+5)    /* Delete a multicast forwarding entry  */
+#define MRT_VERSION    (MRT_BASE+6)    /* Get the kernel multicast version     */
+#define MRT_ASSERT     (MRT_BASE+7)    /* Activate PIM assert mode             */
+#define MRT_PIM                (MRT_BASE+8)    /* enable PIM code                      */
+#define MRT_TABLE      (MRT_BASE+9)    /* Specify mroute table ID              */
+#define MRT_ADD_MFC_PROXY      (MRT_BASE+10)   /* Add a (*,*|G) mfc entry      */
+#define MRT_DEL_MFC_PROXY      (MRT_BASE+11)   /* Del a (*,*|G) mfc entry      */
+#define MRT_MAX                (MRT_BASE+11)
+
+#define SIOCGETVIFCNT  SIOCPROTOPRIVATE        /* IP protocol privates */
+#define SIOCGETSGCNT   (SIOCPROTOPRIVATE+1)
+#define SIOCGETRPF     (SIOCPROTOPRIVATE+2)
+
+#define MAXVIFS                32      
+typedef unsigned long vifbitmap_t;     /* User mode code depends on this lot */
+typedef unsigned short vifi_t;
+#define ALL_VIFS       ((vifi_t)(-1))
+
+/*
+ *     Same idea as select
+ */
+#define VIFM_SET(n,m)  ((m)|=(1<<(n)))
+#define VIFM_CLR(n,m)  ((m)&=~(1<<(n)))
+#define VIFM_ISSET(n,m)        ((m)&(1<<(n)))
+#define VIFM_CLRALL(m) ((m)=0)
+#define VIFM_COPY(mfrom,mto)   ((mto)=(mfrom))
+#define VIFM_SAME(m1,m2)       ((m1)==(m2))
+
+/*
+ *     Passed by mrouted for an MRT_ADD_VIF - again we use the
+ *     mrouted 3.6 structures for compatibility
+ */
+struct vifctl {
+       vifi_t  vifc_vifi;              /* Index of VIF */
+       unsigned char vifc_flags;       /* VIFF_ flags */
+       unsigned char vifc_threshold;   /* ttl limit */
+       unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
+       union {
+               struct in_addr vifc_lcl_addr;     /* Local interface address */
+               int            vifc_lcl_ifindex;  /* Local interface index   */
+       };
+       struct in_addr vifc_rmt_addr;   /* IPIP tunnel addr */
+};
+
+#define VIFF_TUNNEL            0x1     /* IPIP tunnel */
+#define VIFF_SRCRT             0x2     /* NI */
+#define VIFF_REGISTER          0x4     /* register vif */
+#define VIFF_USE_IFINDEX       0x8     /* use vifc_lcl_ifindex instead of
+                                          vifc_lcl_addr to find an interface */
+
+/*
+ *     Cache manipulation structures for mrouted and PIMd
+ */
+struct mfcctl {
+       struct in_addr mfcc_origin;             /* Origin of mcast      */
+       struct in_addr mfcc_mcastgrp;           /* Group in question    */
+       vifi_t  mfcc_parent;                    /* Where it arrived     */
+       unsigned char mfcc_ttls[MAXVIFS];       /* Where it is going    */
+       unsigned int mfcc_pkt_cnt;              /* pkt count for src-grp */
+       unsigned int mfcc_byte_cnt;
+       unsigned int mfcc_wrong_if;
+       int          mfcc_expire;
+};
+
+/* 
+ *     Group count retrieval for mrouted
+ */
+struct sioc_sg_req {
+       struct in_addr src;
+       struct in_addr grp;
+       unsigned long pktcnt;
+       unsigned long bytecnt;
+       unsigned long wrong_if;
+};
+
+/*
+ *     To get vif packet counts
+ */
+
+struct sioc_vif_req {
+       vifi_t  vifi;           /* Which iface */
+       unsigned long icount;   /* In packets */
+       unsigned long ocount;   /* Out packets */
+       unsigned long ibytes;   /* In bytes */
+       unsigned long obytes;   /* Out bytes */
+};
+
+/*
+ *     This is the format the mroute daemon expects to see IGMP control
+ *     data. Magically happens to be like an IP packet as per the original
+ */
+struct igmpmsg {
+       __u32 unused1,unused2;
+       unsigned char im_msgtype;               /* What is this */
+       unsigned char im_mbz;                   /* Must be zero */
+       unsigned char im_vif;                   /* Interface (this ought to be a vifi_t!) */
+       unsigned char unused3;
+       struct in_addr im_src,im_dst;
+};
+
+/*
+ *     That's all usermode folks
+ */
+
+
+
+#define MFC_ASSERT_THRESH (3*HZ)               /* Maximal freq. of asserts */
+
+/*
+ *     Pseudo messages used by mrouted
+ */
+
+#define IGMPMSG_NOCACHE                1               /* Kern cache fill request to mrouted */
+#define IGMPMSG_WRONGVIF       2               /* For PIM assert processing (unused) */
+#define IGMPMSG_WHOLEPKT       3               /* For PIM Register processing */
+
+
+#endif /* __LINUX_MROUTE_H */
diff --git a/lib/libdss-include/linux/mroute6.h b/lib/libdss-include/linux/mroute6.h
new file mode 100644 (file)
index 0000000..72bcfa9
--- /dev/null
@@ -0,0 +1,138 @@
+#ifndef __LINUX_MROUTE6_H
+#define __LINUX_MROUTE6_H
+
+#include <linux/types.h>
+#include <linux/sockios.h>
+
+/*
+ *     Based on the MROUTING 3.5 defines primarily to keep
+ *     source compatibility with BSD.
+ *
+ *     See the pim6sd code for the original history.
+ *
+ *      Protocol Independent Multicast (PIM) data structures included
+ *      Carlos Picoto (cap@di.fc.ul.pt)
+ *
+ */
+
+#define MRT6_BASE      200
+#define MRT6_INIT      (MRT6_BASE)     /* Activate the kernel mroute code      */
+#define MRT6_DONE      (MRT6_BASE+1)   /* Shutdown the kernel mroute           */
+#define MRT6_ADD_MIF   (MRT6_BASE+2)   /* Add a virtual interface              */
+#define MRT6_DEL_MIF   (MRT6_BASE+3)   /* Delete a virtual interface           */
+#define MRT6_ADD_MFC   (MRT6_BASE+4)   /* Add a multicast forwarding entry     */
+#define MRT6_DEL_MFC   (MRT6_BASE+5)   /* Delete a multicast forwarding entry  */
+#define MRT6_VERSION   (MRT6_BASE+6)   /* Get the kernel multicast version     */
+#define MRT6_ASSERT    (MRT6_BASE+7)   /* Activate PIM assert mode             */
+#define MRT6_PIM       (MRT6_BASE+8)   /* enable PIM code                      */
+#define MRT6_TABLE     (MRT6_BASE+9)   /* Specify mroute table ID              */
+#define MRT6_ADD_MFC_PROXY     (MRT6_BASE+10)  /* Add a (*,*|G) mfc entry      */
+#define MRT6_DEL_MFC_PROXY     (MRT6_BASE+11)  /* Del a (*,*|G) mfc entry      */
+#define MRT6_MAX       (MRT6_BASE+11)
+
+#define SIOCGETMIFCNT_IN6      SIOCPROTOPRIVATE        /* IP protocol privates */
+#define SIOCGETSGCNT_IN6       (SIOCPROTOPRIVATE+1)
+#define SIOCGETRPF     (SIOCPROTOPRIVATE+2)
+
+#define MAXMIFS                32
+typedef unsigned long mifbitmap_t;     /* User mode code depends on this lot */
+typedef unsigned short mifi_t;
+#define ALL_MIFS       ((mifi_t)(-1))
+
+#ifndef IF_SETSIZE
+#define IF_SETSIZE     256
+#endif
+
+typedef        __u32           if_mask;
+#define NIFBITS (sizeof(if_mask) * 8)        /* bits per mask */
+
+#if !defined(DIV_ROUND_UP)
+#define        DIV_ROUND_UP(x,y)       (((x) + ((y) - 1)) / (y))
+#endif
+
+typedef struct if_set {
+       if_mask ifs_bits[DIV_ROUND_UP(IF_SETSIZE, NIFBITS)];
+} if_set;
+
+#define IF_SET(n, p)    ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS)))
+#define IF_CLR(n, p)    ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS)))
+#define IF_ISSET(n, p)  ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS)))
+#define IF_COPY(f, t)   bcopy(f, t, sizeof(*(f)))
+#define IF_ZERO(p)      bzero(p, sizeof(*(p)))
+
+/*
+ *     Passed by mrouted for an MRT_ADD_MIF - again we use the
+ *     mrouted 3.6 structures for compatibility
+ */
+
+struct mif6ctl {
+       mifi_t  mif6c_mifi;             /* Index of MIF */
+       unsigned char mif6c_flags;      /* MIFF_ flags */
+       unsigned char vifc_threshold;   /* ttl limit */
+       __u16    mif6c_pifi;            /* the index of the physical IF */
+       unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
+};
+
+#define MIFF_REGISTER  0x1     /* register vif */
+
+/*
+ *     Cache manipulation structures for mrouted and PIMd
+ */
+
+struct mf6cctl {
+       struct sockaddr_in6 mf6cc_origin;               /* Origin of mcast      */
+       struct sockaddr_in6 mf6cc_mcastgrp;             /* Group in question    */
+       mifi_t  mf6cc_parent;                   /* Where it arrived     */
+       struct if_set mf6cc_ifset;              /* Where it is going */
+};
+
+/*
+ *     Group count retrieval for pim6sd
+ */
+
+struct sioc_sg_req6 {
+       struct sockaddr_in6 src;
+       struct sockaddr_in6 grp;
+       unsigned long pktcnt;
+       unsigned long bytecnt;
+       unsigned long wrong_if;
+};
+
+/*
+ *     To get vif packet counts
+ */
+
+struct sioc_mif_req6 {
+       mifi_t  mifi;           /* Which iface */
+       unsigned long icount;   /* In packets */
+       unsigned long ocount;   /* Out packets */
+       unsigned long ibytes;   /* In bytes */
+       unsigned long obytes;   /* Out bytes */
+};
+
+/*
+ *     That's all usermode folks
+ */
+
+
+
+/*
+ * Structure used to communicate from kernel to multicast router.
+ * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{}
+ * used for IPv4 implementation). This is because this structure will be passed via an
+ * IPv6 raw socket, on which an application will only receiver the payload i.e the data after
+ * the IPv6 header and all the extension headers. (See section 3 of RFC 3542)
+ */
+
+struct mrt6msg {
+#define MRT6MSG_NOCACHE                1
+#define MRT6MSG_WRONGMIF       2
+#define MRT6MSG_WHOLEPKT       3               /* used for use level encap */
+       __u8            im6_mbz;                /* must be zero            */
+       __u8            im6_msgtype;            /* what type of message    */
+       __u16           im6_mif;                /* mif rec'd on            */
+       __u32           im6_pad;                /* padding for 64 bit arch */
+       struct in6_addr im6_src, im6_dst;
+};
+
+#endif /* __LINUX_MROUTE6_H */
diff --git a/lib/libdss-include/linux/msdos_fs.h b/lib/libdss-include/linux/msdos_fs.h
new file mode 100644 (file)
index 0000000..983d3a6
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef _LINUX_MSDOS_FS_H
+#define _LINUX_MSDOS_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+#include <asm/byteorder.h>
+
+/*
+ * The MS-DOS filesystem constants/structures
+ */
+
+#define SECTOR_SIZE    512             /* sector size (bytes) */
+#define SECTOR_BITS    9               /* log2(SECTOR_SIZE) */
+#define MSDOS_DPB      (MSDOS_DPS)     /* dir entries per block */
+#define MSDOS_DPB_BITS 4               /* log2(MSDOS_DPB) */
+#define MSDOS_DPS      (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
+#define MSDOS_DPS_BITS 4               /* log2(MSDOS_DPS) */
+#define MSDOS_LONGNAME 256             /* maximum name length */
+#define CF_LE_W(v)     le16_to_cpu(v)
+#define CF_LE_L(v)     le32_to_cpu(v)
+#define CT_LE_W(v)     cpu_to_le16(v)
+#define CT_LE_L(v)     cpu_to_le32(v)
+
+#define MSDOS_ROOT_INO  1      /* The root inode number */
+#define MSDOS_FSINFO_INO 2     /* Used for managing the FSINFO block */
+
+#define MSDOS_DIR_BITS 5       /* log2(sizeof(struct msdos_dir_entry)) */
+
+/* directory limit */
+#define FAT_MAX_DIR_ENTRIES    (65536)
+#define FAT_MAX_DIR_SIZE       (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS)
+
+#define ATTR_NONE      0       /* no attribute bits */
+#define ATTR_RO                1       /* read-only */
+#define ATTR_HIDDEN    2       /* hidden */
+#define ATTR_SYS       4       /* system */
+#define ATTR_VOLUME    8       /* volume label */
+#define ATTR_DIR       16      /* directory */
+#define ATTR_ARCH      32      /* archived */
+
+/* attribute bits that are copied "as is" */
+#define ATTR_UNUSED    (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN)
+/* bits that are used by the Windows 95/Windows NT extended FAT */
+#define ATTR_EXT       (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
+
+#define CASE_LOWER_BASE        8       /* base is lower case */
+#define CASE_LOWER_EXT 16      /* extension is lower case */
+
+#define DELETED_FLAG   0xe5    /* marks file as deleted when in name[0] */
+#define IS_FREE(n)     (!*(n) || *(n) == DELETED_FLAG)
+
+#define FAT_LFN_LEN    255     /* maximum long name length */
+#define MSDOS_NAME     11      /* maximum name length */
+#define MSDOS_SLOTS    21      /* max # of slots for short and long names */
+#define MSDOS_DOT      ".          "   /* ".", padded to MSDOS_NAME chars */
+#define MSDOS_DOTDOT   "..         "   /* "..", padded to MSDOS_NAME chars */
+
+#define FAT_FIRST_ENT(s, x)    ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \
+       MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x))
+
+/* start of data cluster's entry (number of reserved clusters) */
+#define FAT_START_ENT  2
+
+/* maximum number of clusters */
+#define MAX_FAT12      0xFF4
+#define MAX_FAT16      0xFFF4
+#define MAX_FAT32      0x0FFFFFF6
+#define MAX_FAT(s)     (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \
+       MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12)
+
+/* bad cluster mark */
+#define BAD_FAT12      0xFF7
+#define BAD_FAT16      0xFFF7
+#define BAD_FAT32      0x0FFFFFF7
+
+/* standard EOF */
+#define EOF_FAT12      0xFFF
+#define EOF_FAT16      0xFFFF
+#define EOF_FAT32      0x0FFFFFFF
+
+#define FAT_ENT_FREE   (0)
+#define FAT_ENT_BAD    (BAD_FAT32)
+#define FAT_ENT_EOF    (EOF_FAT32)
+
+#define FAT_FSINFO_SIG1        0x41615252
+#define FAT_FSINFO_SIG2        0x61417272
+#define IS_FSINFO(x)   (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \
+                        && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2)
+
+#define FAT_STATE_DIRTY 0x01
+
+struct __fat_dirent {
+       long            d_ino;
+       __kernel_off_t  d_off;
+       unsigned short  d_reclen;
+       char            d_name[256]; /* We must not include limits.h! */
+};
+
+/*
+ * ioctl commands
+ */
+#define VFAT_IOCTL_READDIR_BOTH                _IOR('r', 1, struct __fat_dirent[2])
+#define VFAT_IOCTL_READDIR_SHORT       _IOR('r', 2, struct __fat_dirent[2])
+/* <linux/videotext.h> has used 0x72 ('r') in collision, so skip a few */
+#define FAT_IOCTL_GET_ATTRIBUTES       _IOR('r', 0x10, __u32)
+#define FAT_IOCTL_SET_ATTRIBUTES       _IOW('r', 0x11, __u32)
+/*Android kernel has used 0x12, so we use 0x13*/
+#define FAT_IOCTL_GET_VOLUME_ID                _IOR('r', 0x13, __u32)
+
+struct fat_boot_sector {
+       __u8    ignored[3];     /* Boot strap short or near jump */
+       __u8    system_id[8];   /* Name - can be used to special case
+                                  partition manager volumes */
+       __u8    sector_size[2]; /* bytes per logical sector */
+       __u8    sec_per_clus;   /* sectors/cluster */
+       __le16  reserved;       /* reserved sectors */
+       __u8    fats;           /* number of FATs */
+       __u8    dir_entries[2]; /* root directory entries */
+       __u8    sectors[2];     /* number of sectors */
+       __u8    media;          /* media code */
+       __le16  fat_length;     /* sectors/FAT */
+       __le16  secs_track;     /* sectors per track */
+       __le16  heads;          /* number of heads */
+       __le32  hidden;         /* hidden sectors (unused) */
+       __le32  total_sect;     /* number of sectors (if sectors == 0) */
+
+       union {
+               struct {
+                       /*  Extended BPB Fields for FAT16 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       __u8    signature;  /* extended boot signature */
+                       __u8    vol_id[4];      /* volume ID */
+                       __u8    vol_label[11];  /* volume label */
+                       __u8    fs_type[8];             /* file system type */
+                       /* other fields are not added here */
+               } fat16;
+
+               struct {
+                       /* only used by FAT32 */
+                       __le32  length;         /* sectors/FAT */
+                       __le16  flags;          /* bit 8: fat mirroring,
+                                                  low 4: active fat */
+                       __u8    version[2];     /* major, minor filesystem
+                                                  version */
+                       __le32  root_cluster;   /* first cluster in
+                                                  root directory */
+                       __le16  info_sector;    /* filesystem info sector */
+                       __le16  backup_boot;    /* backup boot sector */
+                       __le16  reserved2[6];   /* Unused */
+                       /* Extended BPB Fields for FAT32 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       __u8    signature;  /* extended boot signature */
+                       __u8    vol_id[4];      /* volume ID */
+                       __u8    vol_label[11];  /* volume label */
+                       __u8    fs_type[8];             /* file system type */
+                       /* other fields are not added here */
+               } fat32;
+       };
+};
+
+struct fat_boot_fsinfo {
+       __le32   signature1;    /* 0x41615252L */
+       __le32   reserved1[120];        /* Nothing as far as I can tell */
+       __le32   signature2;    /* 0x61417272L */
+       __le32   free_clusters; /* Free cluster count.  -1 if unknown */
+       __le32   next_cluster;  /* Most recently allocated cluster */
+       __le32   reserved2[4];
+};
+
+struct msdos_dir_entry {
+       __u8    name[MSDOS_NAME];/* name and extension */
+       __u8    attr;           /* attribute bits */
+       __u8    lcase;          /* Case for base and extension */
+       __u8    ctime_cs;       /* Creation time, centiseconds (0-199) */
+       __le16  ctime;          /* Creation time */
+       __le16  cdate;          /* Creation date */
+       __le16  adate;          /* Last access date */
+       __le16  starthi;        /* High 16 bits of cluster in FAT32 */
+       __le16  time,date,start;/* time, date and first cluster */
+       __le32  size;           /* file size (in bytes) */
+};
+
+/* Up to 13 characters of the name */
+struct msdos_dir_slot {
+       __u8    id;             /* sequence number for slot */
+       __u8    name0_4[10];    /* first 5 characters in name */
+       __u8    attr;           /* attribute byte */
+       __u8    reserved;       /* always 0 */
+       __u8    alias_checksum; /* checksum for 8.3 alias */
+       __u8    name5_10[12];   /* 6 more characters in name */
+       __le16   start;         /* starting cluster number, 0 in long slots */
+       __u8    name11_12[4];   /* last 2 characters in name */
+};
+
+#endif /* _LINUX_MSDOS_FS_H */
diff --git a/lib/libdss-include/linux/msg.h b/lib/libdss-include/linux/msg.h
new file mode 100644 (file)
index 0000000..5844b04
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef _LINUX_MSG_H
+#define _LINUX_MSG_H
+
+#include <linux/ipc.h>
+
+/* ipcs ctl commands */
+#define MSG_STAT 11
+#define MSG_INFO 12
+
+/* msgrcv options */
+#define MSG_NOERROR     010000  /* no error if message is too big */
+#define MSG_EXCEPT      020000  /* recv any msg except of specified type.*/
+#define MSG_COPY        040000  /* copy (not remove) all queue messages */
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct msqid_ds {
+       struct ipc_perm msg_perm;
+       struct msg *msg_first;          /* first message on queue,unused  */
+       struct msg *msg_last;           /* last message in queue,unused */
+       __kernel_time_t msg_stime;      /* last msgsnd time */
+       __kernel_time_t msg_rtime;      /* last msgrcv time */
+       __kernel_time_t msg_ctime;      /* last change time */
+       unsigned long  msg_lcbytes;     /* Reuse junk fields for 32 bit */
+       unsigned long  msg_lqbytes;     /* ditto */
+       unsigned short msg_cbytes;      /* current number of bytes on queue */
+       unsigned short msg_qnum;        /* number of messages in queue */
+       unsigned short msg_qbytes;      /* max number of bytes on queue */
+       __kernel_ipc_pid_t msg_lspid;   /* pid of last msgsnd */
+       __kernel_ipc_pid_t msg_lrpid;   /* last receive pid */
+};
+
+/* Include the definition of msqid64_ds */
+#include <asm/msgbuf.h>
+
+/* message buffer for msgsnd and msgrcv calls */
+struct msgbuf {
+       __kernel_long_t mtype;          /* type of message */
+       char mtext[1];                  /* message text */
+};
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo {
+       int msgpool;
+       int msgmap; 
+       int msgmax; 
+       int msgmnb; 
+       int msgmni; 
+       int msgssz; 
+       int msgtql; 
+       unsigned short  msgseg; 
+};
+
+/*
+ * MSGMNI, MSGMAX and MSGMNB are default values which can be
+ * modified by sysctl.
+ *
+ * MSGMNI is the upper limit for the number of messages queues per
+ * namespace.
+ * It has been chosen to be as large possible without facilitating
+ * scenarios where userspace causes overflows when adjusting the limits via
+ * operations of the form retrieve current limit; add X; update limit".
+ *
+ * MSGMNB is the default size of a new message queue. Non-root tasks can
+ * decrease the size with msgctl(IPC_SET), root tasks
+ * (actually: CAP_SYS_RESOURCE) can both increase and decrease the queue
+ * size. The optimal value is application dependent.
+ * 16384 is used because it was always used (since 0.99.10)
+ *
+ * MAXMAX is the maximum size of an individual message, it's a global
+ * (per-namespace) limit that applies for all message queues.
+ * It's set to 1/2 of MSGMNB, to ensure that at least two messages fit into
+ * the queue. This is also an arbitrary choice (since 2.6.0).
+ */
+
+#define MSGMNI 32000   /* <= IPCMNI */     /* max # of msg queue identifiers */
+#define MSGMAX  8192   /* <= INT_MAX */   /* max size of message (bytes) */
+#define MSGMNB 16384   /* <= INT_MAX */   /* default max size of a message queue */
+
+/* unused */
+#define MSGPOOL (MSGMNI * MSGMNB / 1024) /* size in kbytes of message pool */
+#define MSGTQL  MSGMNB            /* number of system message headers */
+#define MSGMAP  MSGMNB            /* number of entries in message map */
+#define MSGSSZ  16                /* message segment size */
+#define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) /* max no. of segments */
+#define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff)
+
+
+#endif /* _LINUX_MSG_H */
diff --git a/lib/libdss-include/linux/mtio.h b/lib/libdss-include/linux/mtio.h
new file mode 100644 (file)
index 0000000..18543e2
--- /dev/null
@@ -0,0 +1,208 @@
+/* 
+ * linux/mtio.h header file for Linux. Written by H. Bergman
+ *
+ * Modified for special ioctls provided by zftape in September 1997
+ * by C.-J. Heine.
+ */
+
+#ifndef _LINUX_MTIO_H
+#define _LINUX_MTIO_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * Structures and definitions for mag tape io control commands
+ */
+
+/* structure for MTIOCTOP - mag tape op command */
+struct mtop {
+       short   mt_op;          /* operations defined below */
+       int     mt_count;       /* how many of them */
+};
+
+/* Magnetic Tape operations [Not all operations supported by all drivers]: */
+#define MTRESET 0      /* +reset drive in case of problems */
+#define MTFSF  1       /* forward space over FileMark,
+                        * position at first record of next file 
+                        */
+#define MTBSF  2       /* backward space FileMark (position before FM) */
+#define MTFSR  3       /* forward space record */
+#define MTBSR  4       /* backward space record */
+#define MTWEOF 5       /* write an end-of-file record (mark) */
+#define MTREW  6       /* rewind */
+#define MTOFFL 7       /* rewind and put the drive offline (eject?) */
+#define MTNOP  8       /* no op, set status only (read with MTIOCGET) */
+#define MTRETEN 9      /* retension tape */
+#define MTBSFM 10      /* +backward space FileMark, position at FM */
+#define MTFSFM  11     /* +forward space FileMark, position at FM */
+#define MTEOM  12      /* goto end of recorded media (for appending files).
+                        * MTEOM positions after the last FM, ready for
+                        * appending another file.
+                        */
+#define MTERASE 13     /* erase tape -- be careful! */
+
+#define MTRAS1  14     /* run self test 1 (nondestructive) */
+#define MTRAS2 15      /* run self test 2 (destructive) */
+#define MTRAS3  16     /* reserved for self test 3 */
+
+#define MTSETBLK 20    /* set block length (SCSI) */
+#define MTSETDENSITY 21        /* set tape density (SCSI) */
+#define MTSEEK 22      /* seek to block (Tandberg, etc.) */
+#define MTTELL 23      /* tell block (Tandberg, etc.) */
+#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
+                       /* ordinary buffered operation with code 1 */
+#define MTFSS  25      /* space forward over setmarks */
+#define MTBSS  26      /* space backward over setmarks */
+#define MTWSM  27      /* write setmarks */
+
+#define MTLOCK  28     /* lock the drive door */
+#define MTUNLOCK 29    /* unlock the drive door */
+#define MTLOAD  30     /* execute the SCSI load command */
+#define MTUNLOAD 31    /* execute the SCSI unload command */
+#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */
+#define MTSETPART 33   /* Change the active tape partition */
+#define MTMKPART  34   /* Format the tape with one or two partitions */
+#define MTWEOFI        35      /* write an end-of-file record (mark) in immediate mode */
+
+/* structure for MTIOCGET - mag tape get status command */
+
+struct mtget {
+       long    mt_type;        /* type of magtape device */
+       long    mt_resid;       /* residual count: (not sure)
+                                *      number of bytes ignored, or
+                                *      number of files not skipped, or
+                                *      number of records not skipped.
+                                */
+       /* the following registers are device dependent */
+       long    mt_dsreg;       /* status register */
+       long    mt_gstat;       /* generic (device independent) status */
+       long    mt_erreg;       /* error register */
+       /* The next two fields are not always used */
+       __kernel_daddr_t mt_fileno;     /* number of current file on tape */
+       __kernel_daddr_t mt_blkno;      /* current block number */
+};
+
+
+
+/*
+ * Constants for mt_type. Not all of these are supported,
+ * and these are not all of the ones that are supported.
+ */
+#define MT_ISUNKNOWN           0x01
+#define MT_ISQIC02             0x02    /* Generic QIC-02 tape streamer */
+#define MT_ISWT5150            0x03    /* Wangtek 5150EQ, QIC-150, QIC-02 */
+#define MT_ISARCHIVE_5945L2    0x04    /* Archive 5945L-2, QIC-24, QIC-02? */
+#define MT_ISCMSJ500           0x05    /* CMS Jumbo 500 (QIC-02?) */
+#define MT_ISTDC3610           0x06    /* Tandberg 6310, QIC-24 */
+#define MT_ISARCHIVE_VP60I     0x07    /* Archive VP60i, QIC-02 */
+#define MT_ISARCHIVE_2150L     0x08    /* Archive Viper 2150L */
+#define MT_ISARCHIVE_2060L     0x09    /* Archive Viper 2060L */
+#define MT_ISARCHIVESC499      0x0A    /* Archive SC-499 QIC-36 controller */
+#define MT_ISQIC02_ALL_FEATURES        0x0F    /* Generic QIC-02 with all features */
+#define MT_ISWT5099EEN24       0x11    /* Wangtek 5099-een24, 60MB, QIC-24 */
+#define MT_ISTEAC_MT2ST                0x12    /* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
+#define MT_ISEVEREX_FT40A      0x32    /* Everex FT40A (QIC-40) */
+#define MT_ISDDS1              0x51    /* DDS device without partitions */
+#define MT_ISDDS2              0x52    /* DDS device with partitions */
+#define MT_ISONSTREAM_SC        0x61   /* OnStream SCSI tape drives (SC-x0)
+                                         and SCSI emulated (DI, DP, USB) */
+#define MT_ISSCSI1             0x71    /* Generic ANSI SCSI-1 tape unit */
+#define MT_ISSCSI2             0x72    /* Generic ANSI SCSI-2 tape unit */
+
+/* QIC-40/80/3010/3020 ftape supported drives.
+ * 20bit vendor ID + 0x800000 (see ftape-vendors.h)
+ */
+#define MT_ISFTAPE_UNKNOWN     0x800000 /* obsolete */
+#define MT_ISFTAPE_FLAG        0x800000
+
+
+/* structure for MTIOCPOS - mag tape get position command */
+
+struct mtpos {
+       long    mt_blkno;       /* current block number */
+};
+
+
+/* mag tape io control commands */
+#define        MTIOCTOP        _IOW('m', 1, struct mtop)       /* do a mag tape op */
+#define        MTIOCGET        _IOR('m', 2, struct mtget)      /* get tape status */
+#define        MTIOCPOS        _IOR('m', 3, struct mtpos)      /* get tape position */
+
+
+/* Generic Mag Tape (device independent) status macros for examining
+ * mt_gstat -- HP-UX compatible.
+ * There is room for more generic status bits here, but I don't
+ * know which of them are reserved. At least three or so should
+ * be added to make this really useful.
+ */
+#define GMT_EOF(x)              ((x) & 0x80000000)
+#define GMT_BOT(x)              ((x) & 0x40000000)
+#define GMT_EOT(x)              ((x) & 0x20000000)
+#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
+#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
+#define GMT_WR_PROT(x)          ((x) & 0x04000000)
+/* #define GMT_ ?              ((x) & 0x02000000) */
+#define GMT_ONLINE(x)           ((x) & 0x01000000)
+#define GMT_D_6250(x)           ((x) & 0x00800000)
+#define GMT_D_1600(x)           ((x) & 0x00400000)
+#define GMT_D_800(x)            ((x) & 0x00200000)
+/* #define GMT_ ?              ((x) & 0x00100000) */
+/* #define GMT_ ?              ((x) & 0x00080000) */
+#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* door open (no tape) */
+/* #define GMT_ ?              ((x) & 0x00020000) */
+#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* immediate report mode */
+#define GMT_CLN(x)              ((x) & 0x00008000)  /* cleaning requested */
+/* 15 generic status bits unused */
+
+
+/* SCSI-tape specific definitions */
+/* Bitfield shifts in the status  */
+#define MT_ST_BLKSIZE_SHIFT    0
+#define MT_ST_BLKSIZE_MASK     0xffffff
+#define MT_ST_DENSITY_SHIFT    24
+#define MT_ST_DENSITY_MASK     0xff000000
+
+#define MT_ST_SOFTERR_SHIFT    0
+#define MT_ST_SOFTERR_MASK     0xffff
+
+/* Bitfields for the MTSETDRVBUFFER ioctl */
+#define MT_ST_OPTIONS          0xf0000000
+#define MT_ST_BOOLEANS         0x10000000
+#define MT_ST_SETBOOLEANS      0x30000000
+#define MT_ST_CLEARBOOLEANS    0x40000000
+#define MT_ST_WRITE_THRESHOLD  0x20000000
+#define MT_ST_DEF_BLKSIZE      0x50000000
+#define MT_ST_DEF_OPTIONS      0x60000000
+#define MT_ST_TIMEOUTS         0x70000000
+#define MT_ST_SET_TIMEOUT      (MT_ST_TIMEOUTS | 0x000000)
+#define MT_ST_SET_LONG_TIMEOUT (MT_ST_TIMEOUTS | 0x100000)
+#define MT_ST_SET_CLN          0x80000000
+
+#define MT_ST_BUFFER_WRITES    0x1
+#define MT_ST_ASYNC_WRITES     0x2
+#define MT_ST_READ_AHEAD       0x4
+#define MT_ST_DEBUGGING                0x8
+#define MT_ST_TWO_FM           0x10
+#define MT_ST_FAST_MTEOM       0x20
+#define MT_ST_AUTO_LOCK                0x40
+#define MT_ST_DEF_WRITES       0x80
+#define MT_ST_CAN_BSR          0x100
+#define MT_ST_NO_BLKLIMS       0x200
+#define MT_ST_CAN_PARTITIONS    0x400
+#define MT_ST_SCSI2LOGICAL      0x800
+#define MT_ST_SYSV              0x1000
+#define MT_ST_NOWAIT            0x2000
+#define MT_ST_SILI             0x4000
+#define MT_ST_NOWAIT_EOF       0x8000
+
+/* The mode parameters to be controlled. Parameter chosen with bits 20-28 */
+#define MT_ST_CLEAR_DEFAULT    0xfffff
+#define MT_ST_DEF_DENSITY      (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION  (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER    (MT_ST_DEF_OPTIONS | 0x300000)
+
+/* The offset for the arguments for the special HP changer load command. */
+#define MT_ST_HPLOADER_OFFSET 10000
+
+#endif /* _LINUX_MTIO_H */
diff --git a/lib/libdss-include/linux/n_r3964.h b/lib/libdss-include/linux/n_r3964.h
new file mode 100644 (file)
index 0000000..168a0f9
--- /dev/null
@@ -0,0 +1,98 @@
+/* r3964 linediscipline for linux
+ *
+ * -----------------------------------------------------------
+ * Copyright by
+ * Philips Automation Projects
+ * Kassel (Germany)
+ * -----------------------------------------------------------
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License, incorporated herein by reference.
+ *
+ * Author:
+ * L. Haag
+ *
+ * $Log: r3964.h,v $
+ * Revision 1.4  2005/12/21 19:54:24  Kurt Huwig <kurt huwig de>
+ * Fixed HZ usage on 2.6 kernels
+ * Removed unnecessary include
+ *
+ * Revision 1.3  2001/03/18 13:02:24  dwmw2
+ * Fix timer usage, use spinlocks properly.
+ *
+ * Revision 1.2  2001/03/18 12:53:15  dwmw2
+ * Merge changes in 2.4.2
+ *
+ * Revision 1.1.1.1  1998/10/13 16:43:14  dwmw2
+ * This'll screw the version control
+ *
+ * Revision 1.6  1998/09/30 00:40:38  dwmw2
+ * Updated to use kernel's N_R3964 if available
+ *
+ * Revision 1.4  1998/04/02 20:29:44  lhaag
+ * select, blocking, ...
+ *
+ * Revision 1.3  1998/02/12 18:58:43  root
+ * fixed some memory leaks
+ * calculation of checksum characters
+ *
+ * Revision 1.2  1998/02/07 13:03:17  root
+ * ioctl read_telegram
+ *
+ * Revision 1.1  1998/02/06 19:19:43  root
+ * Initial revision
+ *
+ *
+ */
+
+#ifndef __LINUX_N_R3964_H__
+#define __LINUX_N_R3964_H__
+
+/* line disciplines for r3964 protocol */
+
+
+/*
+ * Ioctl-commands
+ */
+
+#define R3964_ENABLE_SIGNALS      0x5301
+#define R3964_SETPRIORITY         0x5302
+#define R3964_USE_BCC             0x5303
+#define R3964_READ_TELEGRAM       0x5304
+
+/* Options for R3964_SETPRIORITY */
+#define R3964_MASTER   0
+#define R3964_SLAVE    1
+
+/* Options for R3964_ENABLE_SIGNALS */
+#define R3964_SIG_ACK   0x0001
+#define R3964_SIG_DATA  0x0002
+#define R3964_SIG_ALL   0x000f
+#define R3964_SIG_NONE  0x0000
+#define R3964_USE_SIGIO 0x1000
+
+/*
+ * r3964 operation states:
+ */
+
+/* types for msg_id: */
+enum {R3964_MSG_ACK=1, R3964_MSG_DATA };
+
+#define R3964_MAX_MSG_COUNT 32
+
+/* error codes for client messages */
+#define R3964_OK 0        /* no error. */
+#define R3964_TX_FAIL -1  /* transmission error, block NOT sent */
+#define R3964_OVERFLOW -2 /* msg queue overflow */
+
+/* the client gets this struct when calling read(fd,...): */
+struct r3964_client_message {
+         int     msg_id;
+         int     arg;
+         int     error_code;
+};
+
+#define R3964_MTU      256
+
+
+
+#endif /* __LINUX_N_R3964_H__ */
diff --git a/lib/libdss-include/linux/nbd.h b/lib/libdss-include/linux/nbd.h
new file mode 100644 (file)
index 0000000..c8cca35
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
+ * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
+ *            Made nbd_end_request() use the io_request_lock
+ * 2001 Copyright (C) Steven Whitehouse
+ *            New nbd_end_request() for compatibility with new linux block
+ *            layer code.
+ * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
+ *            Removed unneeded blksize_bits field from nbd_device struct.
+ *            Cleanup PARANOIA usage & code.
+ * 2004/02/19 Paul Clements
+ *            Removed PARANOIA, plus various cleanup and comments
+ */
+
+#ifndef LINUX_NBD_H
+#define LINUX_NBD_H
+
+#include <linux/types.h>
+
+#define NBD_SET_SOCK   _IO( 0xab, 0 )
+#define NBD_SET_BLKSIZE        _IO( 0xab, 1 )
+#define NBD_SET_SIZE   _IO( 0xab, 2 )
+#define NBD_DO_IT      _IO( 0xab, 3 )
+#define NBD_CLEAR_SOCK _IO( 0xab, 4 )
+#define NBD_CLEAR_QUE  _IO( 0xab, 5 )
+#define NBD_PRINT_DEBUG        _IO( 0xab, 6 )
+#define NBD_SET_SIZE_BLOCKS    _IO( 0xab, 7 )
+#define NBD_DISCONNECT  _IO( 0xab, 8 )
+#define NBD_SET_TIMEOUT _IO( 0xab, 9 )
+#define NBD_SET_FLAGS   _IO( 0xab, 10)
+
+enum {
+       NBD_CMD_READ = 0,
+       NBD_CMD_WRITE = 1,
+       NBD_CMD_DISC = 2,
+       NBD_CMD_FLUSH = 3,
+       NBD_CMD_TRIM = 4
+};
+
+/* values for flags field */
+#define NBD_FLAG_HAS_FLAGS    (1 << 0) /* nbd-server supports flags */
+#define NBD_FLAG_READ_ONLY    (1 << 1) /* device is read-only */
+#define NBD_FLAG_SEND_FLUSH   (1 << 2) /* can flush writeback cache */
+/* there is a gap here to match userspace */
+#define NBD_FLAG_SEND_TRIM    (1 << 5) /* send trim/discard */
+
+/* userspace doesn't need the nbd_device structure */
+
+/* These are sent over the network in the request/reply magic fields */
+
+#define NBD_REQUEST_MAGIC 0x25609513
+#define NBD_REPLY_MAGIC 0x67446698
+/* Do *not* use magics: 0x12560953 0x96744668. */
+
+/*
+ * This is the packet used for communication between client and
+ * server. All data are in network byte order.
+ */
+struct nbd_request {
+       __be32 magic;
+       __be32 type;    /* == READ || == WRITE  */
+       char handle[8];
+       __be64 from;
+       __be32 len;
+} __attribute__((packed));
+
+/*
+ * This is the reply packet that nbd-server sends back to the client after
+ * it has completed an I/O request (or an error occurs).
+ */
+struct nbd_reply {
+       __be32 magic;
+       __be32 error;           /* 0 = ok, else error   */
+       char handle[8];         /* handle you got from request  */
+};
+#endif /* LINUX_NBD_H */
diff --git a/lib/libdss-include/linux/ncp.h b/lib/libdss-include/linux/ncp.h
new file mode 100644 (file)
index 0000000..4482ad7
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ *  ncp.h
+ *
+ *  Copyright (C) 1995 by Volker Lendecke
+ *  Modified for sparc by J.F. Chadima
+ *  Modified for __constant_ntoh by Frank A. Vorstenbosch
+ *
+ */
+
+#ifndef _LINUX_NCP_H
+#define _LINUX_NCP_H
+
+#include <linux/types.h>
+
+#define NCP_PTYPE                (0x11)
+#define NCP_PORT                 (0x0451)
+
+#define NCP_ALLOC_SLOT_REQUEST   (0x1111)
+#define NCP_REQUEST              (0x2222)
+#define NCP_DEALLOC_SLOT_REQUEST (0x5555)
+
+struct ncp_request_header {
+       __u16 type;
+       __u8 sequence;
+       __u8 conn_low;
+       __u8 task;
+       __u8 conn_high;
+       __u8 function;
+       __u8 data[0];
+} __attribute__((packed));
+
+#define NCP_REPLY                (0x3333)
+#define NCP_WATCHDOG            (0x3E3E)
+#define NCP_POSITIVE_ACK         (0x9999)
+
+struct ncp_reply_header {
+       __u16 type;
+       __u8 sequence;
+       __u8 conn_low;
+       __u8 task;
+       __u8 conn_high;
+       __u8 completion_code;
+       __u8 connection_state;
+       __u8 data[0];
+} __attribute__((packed));
+
+#define NCP_VOLNAME_LEN (16)
+#define NCP_NUMBER_OF_VOLUMES (256)
+struct ncp_volume_info {
+       __u32 total_blocks;
+       __u32 free_blocks;
+       __u32 purgeable_blocks;
+       __u32 not_yet_purgeable_blocks;
+       __u32 total_dir_entries;
+       __u32 available_dir_entries;
+       __u8 sectors_per_block;
+       char volume_name[NCP_VOLNAME_LEN + 1];
+};
+
+#define AR_READ      (cpu_to_le16(1))
+#define AR_WRITE     (cpu_to_le16(2))
+#define AR_EXCLUSIVE (cpu_to_le16(0x20))
+
+#define NCP_FILE_ID_LEN 6
+
+/* Defines for Name Spaces */
+#define NW_NS_DOS     0
+#define NW_NS_MAC     1
+#define NW_NS_NFS     2
+#define NW_NS_FTAM    3
+#define NW_NS_OS2     4
+
+/*  Defines for ReturnInformationMask */
+#define RIM_NAME             (cpu_to_le32(1))
+#define RIM_SPACE_ALLOCATED   (cpu_to_le32(2))
+#define RIM_ATTRIBUTES       (cpu_to_le32(4))
+#define RIM_DATA_SIZE        (cpu_to_le32(8))
+#define RIM_TOTAL_SIZE       (cpu_to_le32(0x10))
+#define RIM_EXT_ATTR_INFO     (cpu_to_le32(0x20))
+#define RIM_ARCHIVE          (cpu_to_le32(0x40))
+#define RIM_MODIFY           (cpu_to_le32(0x80))
+#define RIM_CREATION         (cpu_to_le32(0x100))
+#define RIM_OWNING_NAMESPACE  (cpu_to_le32(0x200))
+#define RIM_DIRECTORY        (cpu_to_le32(0x400))
+#define RIM_RIGHTS           (cpu_to_le32(0x800))
+#define RIM_ALL              (cpu_to_le32(0xFFF))
+#define RIM_COMPRESSED_INFO   (cpu_to_le32(0x80000000))
+
+/* Defines for NSInfoBitMask */
+#define NSIBM_NFS_NAME         0x0001
+#define NSIBM_NFS_MODE         0x0002
+#define NSIBM_NFS_GID          0x0004
+#define NSIBM_NFS_NLINKS       0x0008
+#define NSIBM_NFS_RDEV         0x0010
+#define NSIBM_NFS_LINK         0x0020
+#define NSIBM_NFS_CREATED      0x0040
+#define NSIBM_NFS_UID          0x0080
+#define NSIBM_NFS_ACSFLAG      0x0100
+#define NSIBM_NFS_MYFLAG       0x0200
+
+/* open/create modes */
+#define OC_MODE_OPEN     0x01
+#define OC_MODE_TRUNCATE  0x02
+#define OC_MODE_REPLACE   0x02
+#define OC_MODE_CREATE   0x08
+
+/* open/create results */
+#define OC_ACTION_NONE    0x00
+#define OC_ACTION_OPEN    0x01
+#define OC_ACTION_CREATE   0x02
+#define OC_ACTION_TRUNCATE 0x04
+#define OC_ACTION_REPLACE  0x04
+
+/* access rights attributes */
+#ifndef AR_READ_ONLY
+#define AR_READ_ONLY      0x0001
+#define AR_WRITE_ONLY     0x0002
+#define AR_DENY_READ      0x0004
+#define AR_DENY_WRITE     0x0008
+#define AR_COMPATIBILITY   0x0010
+#define AR_WRITE_THROUGH   0x0040
+#define AR_OPEN_COMPRESSED 0x0100
+#endif
+
+struct nw_nfs_info {
+       __u32 mode;
+       __u32 rdev;
+};
+
+struct nw_info_struct {
+       __u32 spaceAlloc;
+       __le32 attributes;
+       __u16 flags;
+       __le32 dataStreamSize;
+       __le32 totalStreamSize;
+       __u16 numberOfStreams;
+       __le16 creationTime;
+       __le16 creationDate;
+       __u32 creatorID;
+       __le16 modifyTime;
+       __le16 modifyDate;
+       __u32 modifierID;
+       __le16 lastAccessDate;
+       __u16 archiveTime;
+       __u16 archiveDate;
+       __u32 archiverID;
+       __u16 inheritedRightsMask;
+       __le32 dirEntNum;
+       __le32 DosDirNum;
+       __u32 volNumber;
+       __u32 EADataSize;
+       __u32 EAKeyCount;
+       __u32 EAKeySize;
+       __u32 NSCreator;
+       __u8 nameLen;
+       __u8 entryName[256];
+       /* libncp may depend on there being nothing after entryName */
+} __attribute__((packed));
+
+/* modify mask - use with MODIFY_DOS_INFO structure */
+#define DM_ATTRIBUTES            (cpu_to_le32(0x02))
+#define DM_CREATE_DATE           (cpu_to_le32(0x04))
+#define DM_CREATE_TIME           (cpu_to_le32(0x08))
+#define DM_CREATOR_ID            (cpu_to_le32(0x10))
+#define DM_ARCHIVE_DATE          (cpu_to_le32(0x20))
+#define DM_ARCHIVE_TIME          (cpu_to_le32(0x40))
+#define DM_ARCHIVER_ID           (cpu_to_le32(0x80))
+#define DM_MODIFY_DATE           (cpu_to_le32(0x0100))
+#define DM_MODIFY_TIME           (cpu_to_le32(0x0200))
+#define DM_MODIFIER_ID           (cpu_to_le32(0x0400))
+#define DM_LAST_ACCESS_DATE      (cpu_to_le32(0x0800))
+#define DM_INHERITED_RIGHTS_MASK  (cpu_to_le32(0x1000))
+#define DM_MAXIMUM_SPACE         (cpu_to_le32(0x2000))
+
+struct nw_modify_dos_info {
+       __le32 attributes;
+       __le16 creationDate;
+       __le16 creationTime;
+       __u32 creatorID;
+       __le16 modifyDate;
+       __le16 modifyTime;
+       __u32 modifierID;
+       __u16 archiveDate;
+       __u16 archiveTime;
+       __u32 archiverID;
+       __le16 lastAccessDate;
+       __u16 inheritanceGrantMask;
+       __u16 inheritanceRevokeMask;
+       __u32 maximumSpace;
+} __attribute__((packed));
+
+struct nw_search_sequence {
+       __u8 volNumber;
+       __u32 dirBase;
+       __u32 sequence;
+} __attribute__((packed));
+
+#endif                         /* _LINUX_NCP_H */
diff --git a/lib/libdss-include/linux/ncp_fs.h b/lib/libdss-include/linux/ncp_fs.h
new file mode 100644 (file)
index 0000000..9b84469
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ *  ncp_fs.h
+ *
+ *  Copyright (C) 1995, 1996 by Volker Lendecke
+ *
+ */
+
+#ifndef _LINUX_NCP_FS_H
+#define _LINUX_NCP_FS_H
+
+#include <linux/fs.h>
+#include <linux/in.h>
+#include <linux/types.h>
+#include <linux/magic.h>
+
+#include <linux/ipx.h>
+#include <linux/ncp_no.h>
+
+/*
+ * ioctl commands
+ */
+
+struct ncp_ioctl_request {
+       unsigned int function;
+       unsigned int size;
+       char *data;
+};
+
+struct ncp_fs_info {
+       int version;
+       struct sockaddr_ipx addr;
+       __kernel_uid_t mounted_uid;
+       int connection;         /* Connection number the server assigned us */
+       int buffer_size;        /* The negotiated buffer size, to be
+                                  used for read/write requests! */
+
+       int volume_number;
+       __le32 directory_id;
+};
+
+struct ncp_fs_info_v2 {
+       int version;
+       unsigned long mounted_uid;
+       unsigned int connection;
+       unsigned int buffer_size;
+
+       unsigned int volume_number;
+       __le32 directory_id;
+
+       __u32 dummy1;
+       __u32 dummy2;
+       __u32 dummy3;
+};
+
+struct ncp_sign_init
+{
+       char sign_root[8];
+       char sign_last[16];
+};
+
+struct ncp_lock_ioctl
+{
+#define NCP_LOCK_LOG   0
+#define NCP_LOCK_SH    1
+#define NCP_LOCK_EX    2
+#define NCP_LOCK_CLEAR 256
+       int             cmd;
+       int             origin;
+       unsigned int    offset;
+       unsigned int    length;
+#define NCP_LOCK_DEFAULT_TIMEOUT       18
+#define NCP_LOCK_MAX_TIMEOUT           180
+       int             timeout;
+};
+
+struct ncp_setroot_ioctl
+{
+       int             volNumber;
+       int             namespace;
+       __le32          dirEntNum;
+};
+
+struct ncp_objectname_ioctl
+{
+#define NCP_AUTH_NONE  0x00
+#define NCP_AUTH_BIND  0x31
+#define NCP_AUTH_NDS   0x32
+       int             auth_type;
+       size_t          object_name_len;
+       void *  object_name;    /* a userspace data, in most cases user name */
+};
+
+struct ncp_privatedata_ioctl
+{
+       size_t          len;
+       void *  data;           /* ~1000 for NDS */
+};
+
+/* NLS charsets by ioctl */
+#define NCP_IOCSNAME_LEN 20
+struct ncp_nls_ioctl
+{
+       unsigned char codepage[NCP_IOCSNAME_LEN+1];
+       unsigned char iocharset[NCP_IOCSNAME_LEN+1];
+};
+
+#define        NCP_IOC_NCPREQUEST              _IOR('n', 1, struct ncp_ioctl_request)
+#define        NCP_IOC_GETMOUNTUID             _IOW('n', 2, __kernel_old_uid_t)
+#define NCP_IOC_GETMOUNTUID2           _IOW('n', 2, unsigned long)
+
+#define NCP_IOC_CONN_LOGGED_IN          _IO('n', 3)
+
+#define NCP_GET_FS_INFO_VERSION    (1)
+#define NCP_IOC_GET_FS_INFO             _IOWR('n', 4, struct ncp_fs_info)
+#define NCP_GET_FS_INFO_VERSION_V2 (2)
+#define NCP_IOC_GET_FS_INFO_V2         _IOWR('n', 4, struct ncp_fs_info_v2)
+
+#define NCP_IOC_SIGN_INIT              _IOR('n', 5, struct ncp_sign_init)
+#define NCP_IOC_SIGN_WANTED            _IOR('n', 6, int)
+#define NCP_IOC_SET_SIGN_WANTED                _IOW('n', 6, int)
+
+#define NCP_IOC_LOCKUNLOCK             _IOR('n', 7, struct ncp_lock_ioctl)
+
+#define NCP_IOC_GETROOT                        _IOW('n', 8, struct ncp_setroot_ioctl)
+#define NCP_IOC_SETROOT                        _IOR('n', 8, struct ncp_setroot_ioctl)
+
+#define NCP_IOC_GETOBJECTNAME          _IOWR('n', 9, struct ncp_objectname_ioctl)
+#define NCP_IOC_SETOBJECTNAME          _IOR('n', 9, struct ncp_objectname_ioctl)
+#define NCP_IOC_GETPRIVATEDATA         _IOWR('n', 10, struct ncp_privatedata_ioctl)
+#define NCP_IOC_SETPRIVATEDATA         _IOR('n', 10, struct ncp_privatedata_ioctl)
+
+#define NCP_IOC_GETCHARSETS            _IOWR('n', 11, struct ncp_nls_ioctl)
+#define NCP_IOC_SETCHARSETS            _IOR('n', 11, struct ncp_nls_ioctl)
+
+#define NCP_IOC_GETDENTRYTTL           _IOW('n', 12, __u32)
+#define NCP_IOC_SETDENTRYTTL           _IOR('n', 12, __u32)
+
+/*
+ * The packet size to allocate. One page should be enough.
+ */
+#define NCP_PACKET_SIZE 4070
+
+#define NCP_MAXPATHLEN 255
+#define NCP_MAXNAMELEN 14
+
+#endif                         /* _LINUX_NCP_FS_H */
diff --git a/lib/libdss-include/linux/ncp_mount.h b/lib/libdss-include/linux/ncp_mount.h
new file mode 100644 (file)
index 0000000..dfcbea2
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ *  ncp_mount.h
+ *
+ *  Copyright (C) 1995, 1996 by Volker Lendecke
+ *
+ */
+
+#ifndef _LINUX_NCP_MOUNT_H
+#define _LINUX_NCP_MOUNT_H
+
+#include <linux/types.h>
+#include <linux/ncp.h>
+
+#define NCP_MOUNT_VERSION 3    /* Binary */
+
+/* Values for flags */
+#define NCP_MOUNT_SOFT         0x0001
+#define NCP_MOUNT_INTR         0x0002
+#define NCP_MOUNT_STRONG       0x0004  /* enable delete/rename of r/o files */
+#define NCP_MOUNT_NO_OS2       0x0008  /* do not use OS/2 (LONG) namespace */
+#define NCP_MOUNT_NO_NFS       0x0010  /* do not use NFS namespace */
+#define NCP_MOUNT_EXTRAS       0x0020
+#define NCP_MOUNT_SYMLINKS     0x0040  /* enable symlinks */
+#define NCP_MOUNT_NFS_EXTRAS   0x0080  /* Enable use of NFS NS meta-info */
+
+struct ncp_mount_data {
+       int version;
+       unsigned int ncp_fd;    /* The socket to the ncp port */
+       __kernel_uid_t mounted_uid;     /* Who may umount() this filesystem? */
+       __kernel_pid_t wdog_pid;                /* Who cares for our watchdog packets? */
+
+       unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
+       unsigned int time_out;  /* How long should I wait after
+                                  sending a NCP request? */
+       unsigned int retry_count;       /* And how often should I retry? */
+       unsigned int flags;
+
+       __kernel_uid_t uid;
+       __kernel_gid_t gid;
+       __kernel_mode_t file_mode;
+       __kernel_mode_t dir_mode;
+};
+
+#define NCP_MOUNT_VERSION_V4   (4)     /* Binary or text */
+
+struct ncp_mount_data_v4 {
+       int version;
+       unsigned long flags;    /* NCP_MOUNT_* flags */
+       /* MIPS uses long __kernel_uid_t, but... */
+       /* we neever pass -1, so it is safe */
+       unsigned long mounted_uid;      /* Who may umount() this filesystem? */
+       /* MIPS uses long __kernel_pid_t */
+       long wdog_pid;          /* Who cares for our watchdog packets? */
+
+       unsigned int ncp_fd;    /* The socket to the ncp port */
+       unsigned int time_out;  /* How long should I wait after
+                                  sending a NCP request? */
+       unsigned int retry_count;       /* And how often should I retry? */
+
+       /* MIPS uses long __kernel_uid_t... */
+       /* we never pass -1, so it is safe */
+       unsigned long uid;
+       unsigned long gid;
+       /* MIPS uses unsigned long __kernel_mode_t */
+       unsigned long file_mode;
+       unsigned long dir_mode;
+};
+
+#define NCP_MOUNT_VERSION_V5   (5)     /* Text only */
+
+#endif
diff --git a/lib/libdss-include/linux/ncp_no.h b/lib/libdss-include/linux/ncp_no.h
new file mode 100644 (file)
index 0000000..cddaa48
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _NCP_NO
+#define _NCP_NO
+
+/* these define the attribute byte as seen by NCP */
+#define aRONLY                 (__cpu_to_le32(1))
+#define aHIDDEN                        (__cpu_to_le32(2))
+#define aSYSTEM                        (__cpu_to_le32(4))
+#define aEXECUTE               (__cpu_to_le32(8))
+#define aDIR                   (__cpu_to_le32(0x10))
+#define aARCH                  (__cpu_to_le32(0x20))
+#define aSHARED                        (__cpu_to_le32(0x80))
+#define aDONTSUBALLOCATE       (__cpu_to_le32(1L<<11))
+#define aTRANSACTIONAL         (__cpu_to_le32(1L<<12))
+#define aPURGE                 (__cpu_to_le32(1L<<16))
+#define aRENAMEINHIBIT         (__cpu_to_le32(1L<<17))
+#define aDELETEINHIBIT         (__cpu_to_le32(1L<<18))
+#define aDONTCOMPRESS          (__cpu_to_le32(1L<<27))
+
+#endif /* _NCP_NO */
diff --git a/lib/libdss-include/linux/ndctl.h b/lib/libdss-include/linux/ndctl.h
new file mode 100644 (file)
index 0000000..076cc92
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2014-2015, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ */
+#ifndef __NDCTL_H__
+#define __NDCTL_H__
+
+#include <linux/types.h>
+
+struct nd_cmd_smart {
+       __u32 status;
+       __u8 data[128];
+} __attribute__((packed));
+
+struct nd_cmd_smart_threshold {
+       __u32 status;
+       __u8 data[8];
+} __attribute__((packed));
+
+struct nd_cmd_dimm_flags {
+       __u32 status;
+       __u32 flags;
+} __attribute__((packed));
+
+struct nd_cmd_get_config_size {
+       __u32 status;
+       __u32 config_size;
+       __u32 max_xfer;
+} __attribute__((packed));
+
+struct nd_cmd_get_config_data_hdr {
+       __u32 in_offset;
+       __u32 in_length;
+       __u32 status;
+       __u8 out_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_set_config_hdr {
+       __u32 in_offset;
+       __u32 in_length;
+       __u8 in_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_vendor_hdr {
+       __u32 opcode;
+       __u32 in_length;
+       __u8 in_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_vendor_tail {
+       __u32 status;
+       __u32 out_length;
+       __u8 out_buf[0];
+} __attribute__((packed));
+
+struct nd_cmd_ars_cap {
+       __u64 address;
+       __u64 length;
+       __u32 status;
+       __u32 max_ars_out;
+} __attribute__((packed));
+
+struct nd_cmd_ars_start {
+       __u64 address;
+       __u64 length;
+       __u16 type;
+       __u8 reserved[6];
+       __u32 status;
+} __attribute__((packed));
+
+struct nd_cmd_ars_status {
+       __u32 status;
+       __u32 out_length;
+       __u64 address;
+       __u64 length;
+       __u16 type;
+       __u32 num_records;
+       struct nd_ars_record {
+               __u32 handle;
+               __u32 flags;
+               __u64 err_address;
+               __u64 length;
+       } __attribute__((packed)) records[0];
+} __attribute__((packed));
+
+enum {
+       ND_CMD_IMPLEMENTED = 0,
+
+       /* bus commands */
+       ND_CMD_ARS_CAP = 1,
+       ND_CMD_ARS_START = 2,
+       ND_CMD_ARS_STATUS = 3,
+
+       /* per-dimm commands */
+       ND_CMD_SMART = 1,
+       ND_CMD_SMART_THRESHOLD = 2,
+       ND_CMD_DIMM_FLAGS = 3,
+       ND_CMD_GET_CONFIG_SIZE = 4,
+       ND_CMD_GET_CONFIG_DATA = 5,
+       ND_CMD_SET_CONFIG_DATA = 6,
+       ND_CMD_VENDOR_EFFECT_LOG_SIZE = 7,
+       ND_CMD_VENDOR_EFFECT_LOG = 8,
+       ND_CMD_VENDOR = 9,
+};
+
+enum {
+       ND_ARS_VOLATILE = 1,
+       ND_ARS_PERSISTENT = 2,
+};
+
+static __inline__ const char *nvdimm_bus_cmd_name(unsigned cmd)
+{
+       static const char * const names[] = {
+               [ND_CMD_ARS_CAP] = "ars_cap",
+               [ND_CMD_ARS_START] = "ars_start",
+               [ND_CMD_ARS_STATUS] = "ars_status",
+       };
+
+       if (cmd < ARRAY_SIZE(names) && names[cmd])
+               return names[cmd];
+       return "unknown";
+}
+
+static __inline__ const char *nvdimm_cmd_name(unsigned cmd)
+{
+       static const char * const names[] = {
+               [ND_CMD_SMART] = "smart",
+               [ND_CMD_SMART_THRESHOLD] = "smart_thresh",
+               [ND_CMD_DIMM_FLAGS] = "flags",
+               [ND_CMD_GET_CONFIG_SIZE] = "get_size",
+               [ND_CMD_GET_CONFIG_DATA] = "get_data",
+               [ND_CMD_SET_CONFIG_DATA] = "set_data",
+               [ND_CMD_VENDOR_EFFECT_LOG_SIZE] = "effect_size",
+               [ND_CMD_VENDOR_EFFECT_LOG] = "effect_log",
+               [ND_CMD_VENDOR] = "vendor",
+       };
+
+       if (cmd < ARRAY_SIZE(names) && names[cmd])
+               return names[cmd];
+       return "unknown";
+}
+
+#define ND_IOCTL 'N'
+
+#define ND_IOCTL_SMART                 _IOWR(ND_IOCTL, ND_CMD_SMART,\
+                                       struct nd_cmd_smart)
+
+#define ND_IOCTL_SMART_THRESHOLD       _IOWR(ND_IOCTL, ND_CMD_SMART_THRESHOLD,\
+                                       struct nd_cmd_smart_threshold)
+
+#define ND_IOCTL_DIMM_FLAGS            _IOWR(ND_IOCTL, ND_CMD_DIMM_FLAGS,\
+                                       struct nd_cmd_dimm_flags)
+
+#define ND_IOCTL_GET_CONFIG_SIZE       _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_SIZE,\
+                                       struct nd_cmd_get_config_size)
+
+#define ND_IOCTL_GET_CONFIG_DATA       _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_DATA,\
+                                       struct nd_cmd_get_config_data_hdr)
+
+#define ND_IOCTL_SET_CONFIG_DATA       _IOWR(ND_IOCTL, ND_CMD_SET_CONFIG_DATA,\
+                                       struct nd_cmd_set_config_hdr)
+
+#define ND_IOCTL_VENDOR                        _IOWR(ND_IOCTL, ND_CMD_VENDOR,\
+                                       struct nd_cmd_vendor_hdr)
+
+#define ND_IOCTL_ARS_CAP               _IOWR(ND_IOCTL, ND_CMD_ARS_CAP,\
+                                       struct nd_cmd_ars_cap)
+
+#define ND_IOCTL_ARS_START             _IOWR(ND_IOCTL, ND_CMD_ARS_START,\
+                                       struct nd_cmd_ars_start)
+
+#define ND_IOCTL_ARS_STATUS            _IOWR(ND_IOCTL, ND_CMD_ARS_STATUS,\
+                                       struct nd_cmd_ars_status)
+
+#define ND_DEVICE_DIMM 1            /* nd_dimm: container for "config data" */
+#define ND_DEVICE_REGION_PMEM 2     /* nd_region: (parent of PMEM namespaces) */
+#define ND_DEVICE_REGION_BLK 3      /* nd_region: (parent of BLK namespaces) */
+#define ND_DEVICE_NAMESPACE_IO 4    /* legacy persistent memory */
+#define ND_DEVICE_NAMESPACE_PMEM 5  /* PMEM namespace (may alias with BLK) */
+#define ND_DEVICE_NAMESPACE_BLK 6   /* BLK namespace (may alias with PMEM) */
+
+enum nd_driver_flags {
+       ND_DRIVER_DIMM            = 1 << ND_DEVICE_DIMM,
+       ND_DRIVER_REGION_PMEM     = 1 << ND_DEVICE_REGION_PMEM,
+       ND_DRIVER_REGION_BLK      = 1 << ND_DEVICE_REGION_BLK,
+       ND_DRIVER_NAMESPACE_IO    = 1 << ND_DEVICE_NAMESPACE_IO,
+       ND_DRIVER_NAMESPACE_PMEM  = 1 << ND_DEVICE_NAMESPACE_PMEM,
+       ND_DRIVER_NAMESPACE_BLK   = 1 << ND_DEVICE_NAMESPACE_BLK,
+};
+
+enum {
+       ND_MIN_NAMESPACE_SIZE = 0x00400000,
+};
+
+enum ars_masks {
+       ARS_STATUS_MASK = 0x0000FFFF,
+       ARS_EXT_STATUS_SHIFT = 16,
+};
+#endif /* __NDCTL_H__ */
diff --git a/lib/libdss-include/linux/neighbour.h b/lib/libdss-include/linux/neighbour.h
new file mode 100644 (file)
index 0000000..788655b
--- /dev/null
@@ -0,0 +1,167 @@
+#ifndef __LINUX_NEIGHBOUR_H
+#define __LINUX_NEIGHBOUR_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct ndmsg {
+       __u8            ndm_family;
+       __u8            ndm_pad1;
+       __u16           ndm_pad2;
+       __s32           ndm_ifindex;
+       __u16           ndm_state;
+       __u8            ndm_flags;
+       __u8            ndm_type;
+};
+
+enum {
+       NDA_UNSPEC,
+       NDA_DST,
+       NDA_LLADDR,
+       NDA_CACHEINFO,
+       NDA_PROBES,
+       NDA_VLAN,
+       NDA_PORT,
+       NDA_VNI,
+       NDA_IFINDEX,
+       NDA_MASTER,
+       NDA_LINK_NETNSID,
+       __NDA_MAX
+};
+
+#define NDA_MAX (__NDA_MAX - 1)
+
+/*
+ *     Neighbor Cache Entry Flags
+ */
+
+#define NTF_USE                0x01
+#define NTF_SELF       0x02
+#define NTF_MASTER     0x04
+#define NTF_PROXY      0x08    /* == ATF_PUBL */
+#define NTF_EXT_LEARNED        0x10
+#define NTF_ROUTER     0x80
+
+/*
+ *     Neighbor Cache Entry States.
+ */
+
+#define NUD_INCOMPLETE 0x01
+#define NUD_REACHABLE  0x02
+#define NUD_STALE      0x04
+#define NUD_DELAY      0x08
+#define NUD_PROBE      0x10
+#define NUD_FAILED     0x20
+
+/* Dummy states */
+#define NUD_NOARP      0x40
+#define NUD_PERMANENT  0x80
+#define NUD_NONE       0x00
+
+/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change
+   and make no address resolution or NUD.
+   NUD_PERMANENT also cannot be deleted by garbage collectors.
+ */
+
+struct nda_cacheinfo {
+       __u32           ndm_confirmed;
+       __u32           ndm_used;
+       __u32           ndm_updated;
+       __u32           ndm_refcnt;
+};
+
+/*****************************************************************
+ *             Neighbour tables specific messages.
+ *
+ * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
+ * NLM_F_DUMP flag set. Every neighbour table configuration is
+ * spread over multiple messages to avoid running into message
+ * size limits on systems with many interfaces. The first message
+ * in the sequence transports all not device specific data such as
+ * statistics, configuration, and the default parameter set.
+ * This message is followed by 0..n messages carrying device
+ * specific parameter sets.
+ * Although the ordering should be sufficient, NDTA_NAME can be
+ * used to identify sequences. The initial message can be identified
+ * by checking for NDTA_CONFIG. The device specific messages do
+ * not contain this TLV but have NDTPA_IFINDEX set to the
+ * corresponding interface index.
+ *
+ * To change neighbour table attributes, send RTM_SETNEIGHTBL
+ * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
+ * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
+ * otherwise. Device specific parameter sets can be changed by
+ * setting NDTPA_IFINDEX to the interface index of the corresponding
+ * device.
+ ****/
+
+struct ndt_stats {
+       __u64           ndts_allocs;
+       __u64           ndts_destroys;
+       __u64           ndts_hash_grows;
+       __u64           ndts_res_failed;
+       __u64           ndts_lookups;
+       __u64           ndts_hits;
+       __u64           ndts_rcv_probes_mcast;
+       __u64           ndts_rcv_probes_ucast;
+       __u64           ndts_periodic_gc_runs;
+       __u64           ndts_forced_gc_runs;
+       __u64           ndts_table_fulls;
+};
+
+enum {
+       NDTPA_UNSPEC,
+       NDTPA_IFINDEX,                  /* u32, unchangeable */
+       NDTPA_REFCNT,                   /* u32, read-only */
+       NDTPA_REACHABLE_TIME,           /* u64, read-only, msecs */
+       NDTPA_BASE_REACHABLE_TIME,      /* u64, msecs */
+       NDTPA_RETRANS_TIME,             /* u64, msecs */
+       NDTPA_GC_STALETIME,             /* u64, msecs */
+       NDTPA_DELAY_PROBE_TIME,         /* u64, msecs */
+       NDTPA_QUEUE_LEN,                /* u32 */
+       NDTPA_APP_PROBES,               /* u32 */
+       NDTPA_UCAST_PROBES,             /* u32 */
+       NDTPA_MCAST_PROBES,             /* u32 */
+       NDTPA_ANYCAST_DELAY,            /* u64, msecs */
+       NDTPA_PROXY_DELAY,              /* u64, msecs */
+       NDTPA_PROXY_QLEN,               /* u32 */
+       NDTPA_LOCKTIME,                 /* u64, msecs */
+       NDTPA_QUEUE_LENBYTES,           /* u32 */
+       NDTPA_MCAST_REPROBES,           /* u32 */
+       __NDTPA_MAX
+};
+#define NDTPA_MAX (__NDTPA_MAX - 1)
+
+struct ndtmsg {
+       __u8            ndtm_family;
+       __u8            ndtm_pad1;
+       __u16           ndtm_pad2;
+};
+
+struct ndt_config {
+       __u16           ndtc_key_len;
+       __u16           ndtc_entry_size;
+       __u32           ndtc_entries;
+       __u32           ndtc_last_flush;        /* delta to now in msecs */
+       __u32           ndtc_last_rand;         /* delta to now in msecs */
+       __u32           ndtc_hash_rnd;
+       __u32           ndtc_hash_mask;
+       __u32           ndtc_hash_chain_gc;
+       __u32           ndtc_proxy_qlen;
+};
+
+enum {
+       NDTA_UNSPEC,
+       NDTA_NAME,                      /* char *, unchangeable */
+       NDTA_THRESH1,                   /* u32 */
+       NDTA_THRESH2,                   /* u32 */
+       NDTA_THRESH3,                   /* u32 */
+       NDTA_CONFIG,                    /* struct ndt_config, read-only */
+       NDTA_PARMS,                     /* nested TLV NDTPA_* */
+       NDTA_STATS,                     /* struct ndt_stats, read-only */
+       NDTA_GC_INTERVAL,               /* u64, msecs */
+       __NDTA_MAX
+};
+#define NDTA_MAX (__NDTA_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/net.h b/lib/libdss-include/linux/net.h
new file mode 100644 (file)
index 0000000..24eaec3
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * NET         An implementation of the SOCKET network access protocol.
+ *             This is the master header file for the Linux NET layer,
+ *             or, in plain English: the networking handling part of the
+ *             kernel.
+ *
+ * Version:    @(#)net.h       1.0.3   05/25/93
+ *
+ * Authors:    Orest Zborowski, <obz@Kodak.COM>
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_NET_H
+#define _LINUX_NET_H
+
+#include <linux/socket.h>
+#include <asm/socket.h>
+
+#define NPROTO         AF_MAX
+
+#define SYS_SOCKET     1               /* sys_socket(2)                */
+#define SYS_BIND       2               /* sys_bind(2)                  */
+#define SYS_CONNECT    3               /* sys_connect(2)               */
+#define SYS_LISTEN     4               /* sys_listen(2)                */
+#define SYS_ACCEPT     5               /* sys_accept(2)                */
+#define SYS_GETSOCKNAME        6               /* sys_getsockname(2)           */
+#define SYS_GETPEERNAME        7               /* sys_getpeername(2)           */
+#define SYS_SOCKETPAIR 8               /* sys_socketpair(2)            */
+#define SYS_SEND       9               /* sys_send(2)                  */
+#define SYS_RECV       10              /* sys_recv(2)                  */
+#define SYS_SENDTO     11              /* sys_sendto(2)                */
+#define SYS_RECVFROM   12              /* sys_recvfrom(2)              */
+#define SYS_SHUTDOWN   13              /* sys_shutdown(2)              */
+#define SYS_SETSOCKOPT 14              /* sys_setsockopt(2)            */
+#define SYS_GETSOCKOPT 15              /* sys_getsockopt(2)            */
+#define SYS_SENDMSG    16              /* sys_sendmsg(2)               */
+#define SYS_RECVMSG    17              /* sys_recvmsg(2)               */
+#define SYS_ACCEPT4    18              /* sys_accept4(2)               */
+#define SYS_RECVMMSG   19              /* sys_recvmmsg(2)              */
+#define SYS_SENDMMSG   20              /* sys_sendmmsg(2)              */
+
+typedef enum {
+       SS_FREE = 0,                    /* not allocated                */
+       SS_UNCONNECTED,                 /* unconnected to any socket    */
+       SS_CONNECTING,                  /* in process of connecting     */
+       SS_CONNECTED,                   /* connected to socket          */
+       SS_DISCONNECTING                /* in process of disconnecting  */
+} socket_state;
+
+#define __SO_ACCEPTCON (1 << 16)       /* performed a listen           */
+
+#endif /* _LINUX_NET_H */
diff --git a/lib/libdss-include/linux/net_dropmon.h b/lib/libdss-include/linux/net_dropmon.h
new file mode 100644 (file)
index 0000000..2a73946
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef __NET_DROPMON_H
+#define __NET_DROPMON_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct net_dm_drop_point {
+       __u8 pc[8];
+       __u32 count;
+};
+
+#define is_drop_point_hw(x) do {\
+       int ____i, ____j;\
+       for (____i = 0; ____i < 8; i ____i++)\
+               ____j |= x[____i];\
+       ____j;\
+} while (0)
+
+#define NET_DM_CFG_VERSION  0
+#define NET_DM_CFG_ALERT_COUNT  1
+#define NET_DM_CFG_ALERT_DELAY 2
+#define NET_DM_CFG_MAX 3
+
+struct net_dm_config_entry {
+       __u32 type;
+       __u64 data __attribute__((aligned(8)));
+};
+
+struct net_dm_config_msg {
+       __u32 entries;
+       struct net_dm_config_entry options[0];
+};
+
+struct net_dm_alert_msg {
+       __u32 entries;
+       struct net_dm_drop_point points[0];
+};
+
+struct net_dm_user_msg {
+       union {
+               struct net_dm_config_msg user;
+               struct net_dm_alert_msg alert;
+       } u;
+};
+
+
+/* These are the netlink message types for this protocol */
+
+enum {
+       NET_DM_CMD_UNSPEC = 0,
+       NET_DM_CMD_ALERT,
+       NET_DM_CMD_CONFIG,
+       NET_DM_CMD_START,
+       NET_DM_CMD_STOP,
+       _NET_DM_CMD_MAX,
+};
+
+#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1)
+
+/*
+ * Our group identifiers
+ */
+#define NET_DM_GRP_ALERT 1
+#endif
diff --git a/lib/libdss-include/linux/net_namespace.h b/lib/libdss-include/linux/net_namespace.h
new file mode 100644 (file)
index 0000000..9a92b7e
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (c) 2015 6WIND S.A.
+ * Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+#ifndef _LINUX_NET_NAMESPACE_H_
+#define _LINUX_NET_NAMESPACE_H_
+
+/* Attributes of RTM_NEWNSID/RTM_GETNSID messages */
+enum {
+       NETNSA_NONE,
+#define NETNSA_NSID_NOT_ASSIGNED -1
+       NETNSA_NSID,
+       NETNSA_PID,
+       NETNSA_FD,
+       __NETNSA_MAX,
+};
+
+#define NETNSA_MAX             (__NETNSA_MAX - 1)
+
+#endif /* _LINUX_NET_NAMESPACE_H_ */
diff --git a/lib/libdss-include/linux/net_tstamp.h b/lib/libdss-include/linux/net_tstamp.h
new file mode 100644 (file)
index 0000000..6d1abea
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Userspace API for hardware time stamping of network packets
+ *
+ * Copyright (C) 2008,2009 Intel Corporation
+ * Author: Patrick Ohly <patrick.ohly@intel.com>
+ *
+ */
+
+#ifndef _NET_TIMESTAMPING_H
+#define _NET_TIMESTAMPING_H
+
+#include <linux/socket.h>   /* for SO_TIMESTAMPING */
+
+/* SO_TIMESTAMPING gets an integer bit field comprised of these values */
+enum {
+       SOF_TIMESTAMPING_TX_HARDWARE = (1<<0),
+       SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1),
+       SOF_TIMESTAMPING_RX_HARDWARE = (1<<2),
+       SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3),
+       SOF_TIMESTAMPING_SOFTWARE = (1<<4),
+       SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5),
+       SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6),
+       SOF_TIMESTAMPING_OPT_ID = (1<<7),
+       SOF_TIMESTAMPING_TX_SCHED = (1<<8),
+       SOF_TIMESTAMPING_TX_ACK = (1<<9),
+       SOF_TIMESTAMPING_OPT_CMSG = (1<<10),
+       SOF_TIMESTAMPING_OPT_TSONLY = (1<<11),
+
+       SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_TSONLY,
+       SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) |
+                                SOF_TIMESTAMPING_LAST
+};
+
+/**
+ * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
+ *
+ * @flags:     no flags defined right now, must be zero for %SIOCSHWTSTAMP
+ * @tx_type:   one of HWTSTAMP_TX_*
+ * @rx_filter: one of HWTSTAMP_FILTER_*
+ *
+ * %SIOCGHWTSTAMP and %SIOCSHWTSTAMP expect a &struct ifreq with a
+ * ifr_data pointer to this structure.  For %SIOCSHWTSTAMP, if the
+ * driver or hardware does not support the requested @rx_filter value,
+ * the driver may use a more general filter mode.  In this case
+ * @rx_filter will indicate the actual mode on return.
+ */
+struct hwtstamp_config {
+       int flags;
+       int tx_type;
+       int rx_filter;
+};
+
+/* possible values for hwtstamp_config->tx_type */
+enum hwtstamp_tx_types {
+       /*
+        * No outgoing packet will need hardware time stamping;
+        * should a packet arrive which asks for it, no hardware
+        * time stamping will be done.
+        */
+       HWTSTAMP_TX_OFF,
+
+       /*
+        * Enables hardware time stamping for outgoing packets;
+        * the sender of the packet decides which are to be
+        * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE
+        * before sending the packet.
+        */
+       HWTSTAMP_TX_ON,
+
+       /*
+        * Enables time stamping for outgoing packets just as
+        * HWTSTAMP_TX_ON does, but also enables time stamp insertion
+        * directly into Sync packets. In this case, transmitted Sync
+        * packets will not received a time stamp via the socket error
+        * queue.
+        */
+       HWTSTAMP_TX_ONESTEP_SYNC,
+};
+
+/* possible values for hwtstamp_config->rx_filter */
+enum hwtstamp_rx_filters {
+       /* time stamp no incoming packet at all */
+       HWTSTAMP_FILTER_NONE,
+
+       /* time stamp any incoming packet */
+       HWTSTAMP_FILTER_ALL,
+
+       /* return value: time stamp all packets requested plus some others */
+       HWTSTAMP_FILTER_SOME,
+
+       /* PTP v1, UDP, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
+       /* PTP v1, UDP, Sync packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_SYNC,
+       /* PTP v1, UDP, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ,
+       /* PTP v2, UDP, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_EVENT,
+       /* PTP v2, UDP, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_SYNC,
+       /* PTP v2, UDP, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ,
+
+       /* 802.AS1, Ethernet, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_EVENT,
+       /* 802.AS1, Ethernet, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_SYNC,
+       /* 802.AS1, Ethernet, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ,
+
+       /* PTP v2/802.AS1, any layer, any kind of event packet */
+       HWTSTAMP_FILTER_PTP_V2_EVENT,
+       /* PTP v2/802.AS1, any layer, Sync packet */
+       HWTSTAMP_FILTER_PTP_V2_SYNC,
+       /* PTP v2/802.AS1, any layer, Delay_req packet */
+       HWTSTAMP_FILTER_PTP_V2_DELAY_REQ,
+};
+
+#endif /* _NET_TIMESTAMPING_H */
diff --git a/lib/libdss-include/linux/netconf.h b/lib/libdss-include/linux/netconf.h
new file mode 100644 (file)
index 0000000..7210fe4
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _LINUX_NETCONF_H_
+#define _LINUX_NETCONF_H_
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+struct netconfmsg {
+       __u8    ncm_family;
+};
+
+enum {
+       NETCONFA_UNSPEC,
+       NETCONFA_IFINDEX,
+       NETCONFA_FORWARDING,
+       NETCONFA_RP_FILTER,
+       NETCONFA_MC_FORWARDING,
+       NETCONFA_PROXY_NEIGH,
+       NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
+       __NETCONFA_MAX
+};
+#define NETCONFA_MAX   (__NETCONFA_MAX - 1)
+
+#define NETCONFA_IFINDEX_ALL           -1
+#define NETCONFA_IFINDEX_DEFAULT       -2
+
+#endif /* _LINUX_NETCONF_H_ */
diff --git a/lib/libdss-include/linux/netdevice.h b/lib/libdss-include/linux/netdevice.h
new file mode 100644 (file)
index 0000000..66fceb4
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the Interfaces handler.
+ *
+ * Version:    @(#)dev.h       1.0.10  08/12/93
+ *
+ * Authors:    Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *             Corey Minyard <wf-rch!minyard@relay.EU.net>
+ *             Donald J. Becker, <becker@cesdis.gsfc.nasa.gov>
+ *             Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *             Bjorn Ekwall. <bj0rn@blox.se>
+ *              Pekka Riikonen <priikone@poseidon.pspt.fi>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ *             Moved to /usr/include/linux for NET3
+ */
+#ifndef _LINUX_NETDEVICE_H
+#define _LINUX_NETDEVICE_H
+
+#include <linux/if.h>
+#include <linux/if_ether.h>
+#include <linux/if_packet.h>
+#include <linux/if_link.h>
+
+
+#define MAX_ADDR_LEN   32              /* Largest hardware address length */
+
+/* Initial net device group. All devices belong to group 0 by default. */
+#define INIT_NETDEV_GROUP      0
+
+
+/* interface name assignment types (sysfs name_assign_type attribute) */
+#define NET_NAME_UNKNOWN       0       /* unknown origin (not exposed to userspace) */
+#define NET_NAME_ENUM          1       /* enumerated by kernel */
+#define NET_NAME_PREDICTABLE   2       /* predictably named by the kernel */
+#define NET_NAME_USER          3       /* provided by user-space */
+#define NET_NAME_RENAMED       4       /* renamed by user-space */
+
+/* Media selection options. */
+enum {
+        IF_PORT_UNKNOWN = 0,
+        IF_PORT_10BASE2,
+        IF_PORT_10BASET,
+        IF_PORT_AUI,
+        IF_PORT_100BASET,
+        IF_PORT_100BASETX,
+        IF_PORT_100BASEFX
+};
+
+/* hardware address assignment types */
+#define NET_ADDR_PERM          0       /* address is permanent (default) */
+#define NET_ADDR_RANDOM                1       /* address is generated randomly */
+#define NET_ADDR_STOLEN                2       /* address is stolen from other device */
+#define NET_ADDR_SET           3       /* address is set using
+                                        * dev_set_mac_address() */
+
+#endif /* _LINUX_NETDEVICE_H */
diff --git a/lib/libdss-include/linux/netfilter.h b/lib/libdss-include/linux/netfilter.h
new file mode 100644 (file)
index 0000000..b71b4c9
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef __LINUX_NETFILTER_H
+#define __LINUX_NETFILTER_H
+
+#include <linux/types.h>
+
+#include <linux/sysctl.h>
+#include <linux/in.h>
+#include <linux/in6.h>
+
+/* Responses from hook functions. */
+#define NF_DROP 0
+#define NF_ACCEPT 1
+#define NF_STOLEN 2
+#define NF_QUEUE 3
+#define NF_REPEAT 4
+#define NF_STOP 5
+#define NF_MAX_VERDICT NF_STOP
+
+/* we overload the higher bits for encoding auxiliary data such as the queue
+ * number or errno values. Not nice, but better than additional function
+ * arguments. */
+#define NF_VERDICT_MASK 0x000000ff
+
+/* extra verdict flags have mask 0x0000ff00 */
+#define NF_VERDICT_FLAG_QUEUE_BYPASS   0x00008000
+
+/* queue number (NF_QUEUE) or errno (NF_DROP) */
+#define NF_VERDICT_QMASK 0xffff0000
+#define NF_VERDICT_QBITS 16
+
+#define NF_QUEUE_NR(x) ((((x) << 16) & NF_VERDICT_QMASK) | NF_QUEUE)
+
+#define NF_DROP_ERR(x) (((-x) << 16) | NF_DROP)
+
+/* only for userspace compatibility */
+/* Generic cache responses from hook functions.
+   <= 0x2000 is used for protocol-flags. */
+#define NFC_UNKNOWN 0x4000
+#define NFC_ALTERED 0x8000
+
+/* NF_VERDICT_BITS should be 8 now, but userspace might break if this changes */
+#define NF_VERDICT_BITS 16
+
+enum nf_inet_hooks {
+       NF_INET_PRE_ROUTING,
+       NF_INET_LOCAL_IN,
+       NF_INET_FORWARD,
+       NF_INET_LOCAL_OUT,
+       NF_INET_POST_ROUTING,
+       NF_INET_NUMHOOKS
+};
+
+enum nf_dev_hooks {
+       NF_NETDEV_INGRESS,
+       NF_NETDEV_NUMHOOKS
+};
+
+enum {
+       NFPROTO_UNSPEC =  0,
+       NFPROTO_INET   =  1,
+       NFPROTO_IPV4   =  2,
+       NFPROTO_ARP    =  3,
+       NFPROTO_NETDEV =  5,
+       NFPROTO_BRIDGE =  7,
+       NFPROTO_IPV6   = 10,
+       NFPROTO_DECNET = 12,
+       NFPROTO_NUMPROTO,
+};
+
+union nf_inet_addr {
+       __u32           all[4];
+       __be32          ip;
+       __be32          ip6[4];
+       struct in_addr  in;
+       struct in6_addr in6;
+};
+
+#endif /* __LINUX_NETFILTER_H */
diff --git a/lib/libdss-include/linux/netfilter/ipset/ip_set.h b/lib/libdss-include/linux/netfilter/ipset/ip_set.h
new file mode 100644 (file)
index 0000000..ec5af15
--- /dev/null
@@ -0,0 +1,303 @@
+/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
+ *                         Patrick Schaaf <bof@bof.de>
+ *                         Martin Josefsson <gandalf@wlug.westbo.se>
+ * Copyright (C) 2003-2011 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef _IP_SET_H
+#define _IP_SET_H
+
+#include <linux/types.h>
+
+/* The protocol version */
+#define IPSET_PROTOCOL         6
+
+/* The max length of strings including NUL: set and type identifiers */
+#define IPSET_MAXNAMELEN       32
+
+/* The maximum permissible comment length we will accept over netlink */
+#define IPSET_MAX_COMMENT_SIZE 255
+
+/* Message types and commands */
+enum ipset_cmd {
+       IPSET_CMD_NONE,
+       IPSET_CMD_PROTOCOL,     /* 1: Return protocol version */
+       IPSET_CMD_CREATE,       /* 2: Create a new (empty) set */
+       IPSET_CMD_DESTROY,      /* 3: Destroy a (empty) set */
+       IPSET_CMD_FLUSH,        /* 4: Remove all elements from a set */
+       IPSET_CMD_RENAME,       /* 5: Rename a set */
+       IPSET_CMD_SWAP,         /* 6: Swap two sets */
+       IPSET_CMD_LIST,         /* 7: List sets */
+       IPSET_CMD_SAVE,         /* 8: Save sets */
+       IPSET_CMD_ADD,          /* 9: Add an element to a set */
+       IPSET_CMD_DEL,          /* 10: Delete an element from a set */
+       IPSET_CMD_TEST,         /* 11: Test an element in a set */
+       IPSET_CMD_HEADER,       /* 12: Get set header data only */
+       IPSET_CMD_TYPE,         /* 13: Get set type */
+       IPSET_MSG_MAX,          /* Netlink message commands */
+
+       /* Commands in userspace: */
+       IPSET_CMD_RESTORE = IPSET_MSG_MAX, /* 14: Enter restore mode */
+       IPSET_CMD_HELP,         /* 15: Get help */
+       IPSET_CMD_VERSION,      /* 16: Get program version */
+       IPSET_CMD_QUIT,         /* 17: Quit from interactive mode */
+
+       IPSET_CMD_MAX,
+
+       IPSET_CMD_COMMIT = IPSET_CMD_MAX, /* 18: Commit buffered commands */
+};
+
+/* Attributes at command level */
+enum {
+       IPSET_ATTR_UNSPEC,
+       IPSET_ATTR_PROTOCOL,    /* 1: Protocol version */
+       IPSET_ATTR_SETNAME,     /* 2: Name of the set */
+       IPSET_ATTR_TYPENAME,    /* 3: Typename */
+       IPSET_ATTR_SETNAME2 = IPSET_ATTR_TYPENAME, /* Setname at rename/swap */
+       IPSET_ATTR_REVISION,    /* 4: Settype revision */
+       IPSET_ATTR_FAMILY,      /* 5: Settype family */
+       IPSET_ATTR_FLAGS,       /* 6: Flags at command level */
+       IPSET_ATTR_DATA,        /* 7: Nested attributes */
+       IPSET_ATTR_ADT,         /* 8: Multiple data containers */
+       IPSET_ATTR_LINENO,      /* 9: Restore lineno */
+       IPSET_ATTR_PROTOCOL_MIN, /* 10: Minimal supported version number */
+       IPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN, /* type rev min */
+       __IPSET_ATTR_CMD_MAX,
+};
+#define IPSET_ATTR_CMD_MAX     (__IPSET_ATTR_CMD_MAX - 1)
+
+/* CADT specific attributes */
+enum {
+       IPSET_ATTR_IP = IPSET_ATTR_UNSPEC + 1,
+       IPSET_ATTR_IP_FROM = IPSET_ATTR_IP,
+       IPSET_ATTR_IP_TO,       /* 2 */
+       IPSET_ATTR_CIDR,        /* 3 */
+       IPSET_ATTR_PORT,        /* 4 */
+       IPSET_ATTR_PORT_FROM = IPSET_ATTR_PORT,
+       IPSET_ATTR_PORT_TO,     /* 5 */
+       IPSET_ATTR_TIMEOUT,     /* 6 */
+       IPSET_ATTR_PROTO,       /* 7 */
+       IPSET_ATTR_CADT_FLAGS,  /* 8 */
+       IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO,     /* 9 */
+       IPSET_ATTR_MARK,        /* 10 */
+       IPSET_ATTR_MARKMASK,    /* 11 */
+       /* Reserve empty slots */
+       IPSET_ATTR_CADT_MAX = 16,
+       /* Create-only specific attributes */
+       IPSET_ATTR_GC,
+       IPSET_ATTR_HASHSIZE,
+       IPSET_ATTR_MAXELEM,
+       IPSET_ATTR_NETMASK,
+       IPSET_ATTR_PROBES,
+       IPSET_ATTR_RESIZE,
+       IPSET_ATTR_SIZE,
+       /* Kernel-only */
+       IPSET_ATTR_ELEMENTS,
+       IPSET_ATTR_REFERENCES,
+       IPSET_ATTR_MEMSIZE,
+
+       __IPSET_ATTR_CREATE_MAX,
+};
+#define IPSET_ATTR_CREATE_MAX  (__IPSET_ATTR_CREATE_MAX - 1)
+
+/* ADT specific attributes */
+enum {
+       IPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + 1,
+       IPSET_ATTR_NAME,
+       IPSET_ATTR_NAMEREF,
+       IPSET_ATTR_IP2,
+       IPSET_ATTR_CIDR2,
+       IPSET_ATTR_IP2_TO,
+       IPSET_ATTR_IFACE,
+       IPSET_ATTR_BYTES,
+       IPSET_ATTR_PACKETS,
+       IPSET_ATTR_COMMENT,
+       IPSET_ATTR_SKBMARK,
+       IPSET_ATTR_SKBPRIO,
+       IPSET_ATTR_SKBQUEUE,
+       __IPSET_ATTR_ADT_MAX,
+};
+#define IPSET_ATTR_ADT_MAX     (__IPSET_ATTR_ADT_MAX - 1)
+
+/* IP specific attributes */
+enum {
+       IPSET_ATTR_IPADDR_IPV4 = IPSET_ATTR_UNSPEC + 1,
+       IPSET_ATTR_IPADDR_IPV6,
+       __IPSET_ATTR_IPADDR_MAX,
+};
+#define IPSET_ATTR_IPADDR_MAX  (__IPSET_ATTR_IPADDR_MAX - 1)
+
+/* Error codes */
+enum ipset_errno {
+       IPSET_ERR_PRIVATE = 4096,
+       IPSET_ERR_PROTOCOL,
+       IPSET_ERR_FIND_TYPE,
+       IPSET_ERR_MAX_SETS,
+       IPSET_ERR_BUSY,
+       IPSET_ERR_EXIST_SETNAME2,
+       IPSET_ERR_TYPE_MISMATCH,
+       IPSET_ERR_EXIST,
+       IPSET_ERR_INVALID_CIDR,
+       IPSET_ERR_INVALID_NETMASK,
+       IPSET_ERR_INVALID_FAMILY,
+       IPSET_ERR_TIMEOUT,
+       IPSET_ERR_REFERENCED,
+       IPSET_ERR_IPADDR_IPV4,
+       IPSET_ERR_IPADDR_IPV6,
+       IPSET_ERR_COUNTER,
+       IPSET_ERR_COMMENT,
+       IPSET_ERR_INVALID_MARKMASK,
+       IPSET_ERR_SKBINFO,
+
+       /* Type specific error codes */
+       IPSET_ERR_TYPE_SPECIFIC = 4352,
+};
+
+/* Flags at command level or match/target flags, lower half of cmdattrs*/
+enum ipset_cmd_flags {
+       IPSET_FLAG_BIT_EXIST    = 0,
+       IPSET_FLAG_EXIST        = (1 << IPSET_FLAG_BIT_EXIST),
+       IPSET_FLAG_BIT_LIST_SETNAME = 1,
+       IPSET_FLAG_LIST_SETNAME = (1 << IPSET_FLAG_BIT_LIST_SETNAME),
+       IPSET_FLAG_BIT_LIST_HEADER = 2,
+       IPSET_FLAG_LIST_HEADER  = (1 << IPSET_FLAG_BIT_LIST_HEADER),
+       IPSET_FLAG_BIT_SKIP_COUNTER_UPDATE = 3,
+       IPSET_FLAG_SKIP_COUNTER_UPDATE =
+               (1 << IPSET_FLAG_BIT_SKIP_COUNTER_UPDATE),
+       IPSET_FLAG_BIT_SKIP_SUBCOUNTER_UPDATE = 4,
+       IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE =
+               (1 << IPSET_FLAG_BIT_SKIP_SUBCOUNTER_UPDATE),
+       IPSET_FLAG_BIT_MATCH_COUNTERS = 5,
+       IPSET_FLAG_MATCH_COUNTERS = (1 << IPSET_FLAG_BIT_MATCH_COUNTERS),
+       IPSET_FLAG_BIT_RETURN_NOMATCH = 7,
+       IPSET_FLAG_RETURN_NOMATCH = (1 << IPSET_FLAG_BIT_RETURN_NOMATCH),
+       IPSET_FLAG_BIT_MAP_SKBMARK = 8,
+       IPSET_FLAG_MAP_SKBMARK = (1 << IPSET_FLAG_BIT_MAP_SKBMARK),
+       IPSET_FLAG_BIT_MAP_SKBPRIO = 9,
+       IPSET_FLAG_MAP_SKBPRIO = (1 << IPSET_FLAG_BIT_MAP_SKBPRIO),
+       IPSET_FLAG_BIT_MAP_SKBQUEUE = 10,
+       IPSET_FLAG_MAP_SKBQUEUE = (1 << IPSET_FLAG_BIT_MAP_SKBQUEUE),
+       IPSET_FLAG_CMD_MAX = 15,
+};
+
+/* Flags at CADT attribute level, upper half of cmdattrs */
+enum ipset_cadt_flags {
+       IPSET_FLAG_BIT_BEFORE   = 0,
+       IPSET_FLAG_BEFORE       = (1 << IPSET_FLAG_BIT_BEFORE),
+       IPSET_FLAG_BIT_PHYSDEV  = 1,
+       IPSET_FLAG_PHYSDEV      = (1 << IPSET_FLAG_BIT_PHYSDEV),
+       IPSET_FLAG_BIT_NOMATCH  = 2,
+       IPSET_FLAG_NOMATCH      = (1 << IPSET_FLAG_BIT_NOMATCH),
+       IPSET_FLAG_BIT_WITH_COUNTERS = 3,
+       IPSET_FLAG_WITH_COUNTERS = (1 << IPSET_FLAG_BIT_WITH_COUNTERS),
+       IPSET_FLAG_BIT_WITH_COMMENT = 4,
+       IPSET_FLAG_WITH_COMMENT = (1 << IPSET_FLAG_BIT_WITH_COMMENT),
+       IPSET_FLAG_BIT_WITH_FORCEADD = 5,
+       IPSET_FLAG_WITH_FORCEADD = (1 << IPSET_FLAG_BIT_WITH_FORCEADD),
+       IPSET_FLAG_BIT_WITH_SKBINFO = 6,
+       IPSET_FLAG_WITH_SKBINFO = (1 << IPSET_FLAG_BIT_WITH_SKBINFO),
+       IPSET_FLAG_CADT_MAX     = 15,
+};
+
+/* The flag bits which correspond to the non-extension create flags */
+enum ipset_create_flags {
+       IPSET_CREATE_FLAG_BIT_FORCEADD = 0,
+       IPSET_CREATE_FLAG_FORCEADD = (1 << IPSET_CREATE_FLAG_BIT_FORCEADD),
+       IPSET_CREATE_FLAG_BIT_MAX = 7,
+};
+
+/* Commands with settype-specific attributes */
+enum ipset_adt {
+       IPSET_ADD,
+       IPSET_DEL,
+       IPSET_TEST,
+       IPSET_ADT_MAX,
+       IPSET_CREATE = IPSET_ADT_MAX,
+       IPSET_CADT_MAX,
+};
+
+/* Sets are identified by an index in kernel space. Tweak with ip_set_id_t
+ * and IPSET_INVALID_ID if you want to increase the max number of sets.
+ */
+typedef __u16 ip_set_id_t;
+
+#define IPSET_INVALID_ID               65535
+
+enum ip_set_dim {
+       IPSET_DIM_ZERO = 0,
+       IPSET_DIM_ONE,
+       IPSET_DIM_TWO,
+       IPSET_DIM_THREE,
+       /* Max dimension in elements.
+        * If changed, new revision of iptables match/target is required.
+        */
+       IPSET_DIM_MAX = 6,
+       /* Backward compatibility: set match revision 2 */
+       IPSET_BIT_RETURN_NOMATCH = 7,
+};
+
+/* Option flags for kernel operations */
+enum ip_set_kopt {
+       IPSET_INV_MATCH = (1 << IPSET_DIM_ZERO),
+       IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE),
+       IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO),
+       IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE),
+       IPSET_RETURN_NOMATCH = (1 << IPSET_BIT_RETURN_NOMATCH),
+};
+
+enum {
+       IPSET_COUNTER_NONE = 0,
+       IPSET_COUNTER_EQ,
+       IPSET_COUNTER_NE,
+       IPSET_COUNTER_LT,
+       IPSET_COUNTER_GT,
+};
+
+/* Backward compatibility for set match v3 */
+struct ip_set_counter_match0 {
+       __u8 op;
+       __u64 value;
+};
+
+struct ip_set_counter_match {
+       __aligned_u64 value;
+       __u8 op;
+};
+
+/* Interface to iptables/ip6tables */
+
+#define SO_IP_SET              83
+
+union ip_set_name_index {
+       char name[IPSET_MAXNAMELEN];
+       ip_set_id_t index;
+};
+
+#define IP_SET_OP_GET_BYNAME   0x00000006      /* Get set index by name */
+struct ip_set_req_get_set {
+       unsigned int op;
+       unsigned int version;
+       union ip_set_name_index set;
+};
+
+#define IP_SET_OP_GET_BYINDEX  0x00000007      /* Get set name by index */
+/* Uses ip_set_req_get_set */
+
+#define IP_SET_OP_GET_FNAME    0x00000008      /* Get set index and family */
+struct ip_set_req_get_set_family {
+       unsigned int op;
+       unsigned int version;
+       unsigned int family;
+       union ip_set_name_index set;
+};
+
+#define IP_SET_OP_VERSION      0x00000100      /* Ask kernel version */
+struct ip_set_req_version {
+       unsigned int op;
+       unsigned int version;
+};
+
+#endif /* _IP_SET_H */
diff --git a/lib/libdss-include/linux/netfilter/ipset/ip_set_bitmap.h b/lib/libdss-include/linux/netfilter/ipset/ip_set_bitmap.h
new file mode 100644 (file)
index 0000000..061a28e
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __IP_SET_BITMAP_H
+#define __IP_SET_BITMAP_H
+
+/* Bitmap type specific error codes */
+enum {
+       /* The element is out of the range of the set */
+       IPSET_ERR_BITMAP_RANGE = IPSET_ERR_TYPE_SPECIFIC,
+       /* The range exceeds the size limit of the set type */
+       IPSET_ERR_BITMAP_RANGE_SIZE,
+};
+
+
+#endif /* __IP_SET_BITMAP_H */
diff --git a/lib/libdss-include/linux/netfilter/ipset/ip_set_hash.h b/lib/libdss-include/linux/netfilter/ipset/ip_set_hash.h
new file mode 100644 (file)
index 0000000..34ac6ce
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __IP_SET_HASH_H
+#define __IP_SET_HASH_H
+
+/* Hash type specific error codes */
+enum {
+       /* Hash is full */
+       IPSET_ERR_HASH_FULL = IPSET_ERR_TYPE_SPECIFIC,
+       /* Null-valued element */
+       IPSET_ERR_HASH_ELEM,
+       /* Invalid protocol */
+       IPSET_ERR_INVALID_PROTO,
+       /* Protocol missing but must be specified */
+       IPSET_ERR_MISSING_PROTO,
+       /* Range not supported */
+       IPSET_ERR_HASH_RANGE_UNSUPPORTED,
+       /* Invalid range */
+       IPSET_ERR_HASH_RANGE,
+};
+
+
+#endif /* __IP_SET_HASH_H */
diff --git a/lib/libdss-include/linux/netfilter/ipset/ip_set_list.h b/lib/libdss-include/linux/netfilter/ipset/ip_set_list.h
new file mode 100644 (file)
index 0000000..75e6175
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __IP_SET_LIST_H
+#define __IP_SET_LIST_H
+
+/* List type specific error codes */
+enum {
+       /* Set name to be added/deleted/tested does not exist. */
+       IPSET_ERR_NAME = IPSET_ERR_TYPE_SPECIFIC,
+       /* list:set type is not permitted to add */
+       IPSET_ERR_LOOP,
+       /* Missing reference set */
+       IPSET_ERR_BEFORE,
+       /* Reference set does not exist */
+       IPSET_ERR_NAMEREF,
+       /* Set is full */
+       IPSET_ERR_LIST_FULL,
+       /* Reference set is not added to the set */
+       IPSET_ERR_REF_EXIST,
+};
+
+
+#endif /* __IP_SET_LIST_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_conntrack_common.h b/lib/libdss-include/linux/netfilter/nf_conntrack_common.h
new file mode 100644 (file)
index 0000000..10b51fc
--- /dev/null
@@ -0,0 +1,123 @@
+#ifndef _NF_CONNTRACK_COMMON_H
+#define _NF_CONNTRACK_COMMON_H
+/* Connection state tracking for netfilter.  This is separated from,
+   but required by, the NAT layer; it can also be used by an iptables
+   extension. */
+enum ip_conntrack_info {
+       /* Part of an established connection (either direction). */
+       IP_CT_ESTABLISHED,
+
+       /* Like NEW, but related to an existing connection, or ICMP error
+          (in either direction). */
+       IP_CT_RELATED,
+
+       /* Started a new connection to track (only
+           IP_CT_DIR_ORIGINAL); may be a retransmission. */
+       IP_CT_NEW,
+
+       /* >= this indicates reply direction */
+       IP_CT_IS_REPLY,
+
+       IP_CT_ESTABLISHED_REPLY = IP_CT_ESTABLISHED + IP_CT_IS_REPLY,
+       IP_CT_RELATED_REPLY = IP_CT_RELATED + IP_CT_IS_REPLY,
+       IP_CT_NEW_REPLY = IP_CT_NEW + IP_CT_IS_REPLY,   
+       /* Number of distinct IP_CT types (no NEW in reply dirn). */
+       IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1
+};
+
+#define NF_CT_STATE_INVALID_BIT                        (1 << 0)
+#define NF_CT_STATE_BIT(ctinfo)                        (1 << ((ctinfo) % IP_CT_IS_REPLY + 1))
+#define NF_CT_STATE_UNTRACKED_BIT              (1 << (IP_CT_NUMBER + 1))
+
+/* Bitset representing status of connection. */
+enum ip_conntrack_status {
+       /* It's an expected connection: bit 0 set.  This bit never changed */
+       IPS_EXPECTED_BIT = 0,
+       IPS_EXPECTED = (1 << IPS_EXPECTED_BIT),
+
+       /* We've seen packets both ways: bit 1 set.  Can be set, not unset. */
+       IPS_SEEN_REPLY_BIT = 1,
+       IPS_SEEN_REPLY = (1 << IPS_SEEN_REPLY_BIT),
+
+       /* Conntrack should never be early-expired. */
+       IPS_ASSURED_BIT = 2,
+       IPS_ASSURED = (1 << IPS_ASSURED_BIT),
+
+       /* Connection is confirmed: originating packet has left box */
+       IPS_CONFIRMED_BIT = 3,
+       IPS_CONFIRMED = (1 << IPS_CONFIRMED_BIT),
+
+       /* Connection needs src nat in orig dir.  This bit never changed. */
+       IPS_SRC_NAT_BIT = 4,
+       IPS_SRC_NAT = (1 << IPS_SRC_NAT_BIT),
+
+       /* Connection needs dst nat in orig dir.  This bit never changed. */
+       IPS_DST_NAT_BIT = 5,
+       IPS_DST_NAT = (1 << IPS_DST_NAT_BIT),
+
+       /* Both together. */
+       IPS_NAT_MASK = (IPS_DST_NAT | IPS_SRC_NAT),
+
+       /* Connection needs TCP sequence adjusted. */
+       IPS_SEQ_ADJUST_BIT = 6,
+       IPS_SEQ_ADJUST = (1 << IPS_SEQ_ADJUST_BIT),
+
+       /* NAT initialization bits. */
+       IPS_SRC_NAT_DONE_BIT = 7,
+       IPS_SRC_NAT_DONE = (1 << IPS_SRC_NAT_DONE_BIT),
+
+       IPS_DST_NAT_DONE_BIT = 8,
+       IPS_DST_NAT_DONE = (1 << IPS_DST_NAT_DONE_BIT),
+
+       /* Both together */
+       IPS_NAT_DONE_MASK = (IPS_DST_NAT_DONE | IPS_SRC_NAT_DONE),
+
+       /* Connection is dying (removed from lists), can not be unset. */
+       IPS_DYING_BIT = 9,
+       IPS_DYING = (1 << IPS_DYING_BIT),
+
+       /* Connection has fixed timeout. */
+       IPS_FIXED_TIMEOUT_BIT = 10,
+       IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT),
+
+       /* Conntrack is a template */
+       IPS_TEMPLATE_BIT = 11,
+       IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT),
+
+       /* Conntrack is a fake untracked entry */
+       IPS_UNTRACKED_BIT = 12,
+       IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
+
+       /* Conntrack got a helper explicitly attached via CT target. */
+       IPS_HELPER_BIT = 13,
+       IPS_HELPER = (1 << IPS_HELPER_BIT),
+};
+
+/* Connection tracking event types */
+enum ip_conntrack_events {
+       IPCT_NEW,               /* new conntrack */
+       IPCT_RELATED,           /* related conntrack */
+       IPCT_DESTROY,           /* destroyed conntrack */
+       IPCT_REPLY,             /* connection has seen two-way traffic */
+       IPCT_ASSURED,           /* connection status has changed to assured */
+       IPCT_PROTOINFO,         /* protocol information has changed */
+       IPCT_HELPER,            /* new helper has been set */
+       IPCT_MARK,              /* new mark has been set */
+       IPCT_SEQADJ,            /* sequence adjustment has changed */
+       IPCT_NATSEQADJ = IPCT_SEQADJ,
+       IPCT_SECMARK,           /* new security mark has been set */
+       IPCT_LABEL,             /* new connlabel has been set */
+};
+
+enum ip_conntrack_expect_events {
+       IPEXP_NEW,              /* new expectation */
+       IPEXP_DESTROY,          /* destroyed expectation */
+};
+
+/* expectation flags */
+#define NF_CT_EXPECT_PERMANENT         0x1
+#define NF_CT_EXPECT_INACTIVE          0x2
+#define NF_CT_EXPECT_USERSPACE         0x4
+
+
+#endif /* _NF_CONNTRACK_COMMON_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_conntrack_ftp.h b/lib/libdss-include/linux/netfilter/nf_conntrack_ftp.h
new file mode 100644 (file)
index 0000000..a222fac
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _NF_CONNTRACK_FTP_H
+#define _NF_CONNTRACK_FTP_H
+/* FTP tracking. */
+
+/* This enum is exposed to userspace */
+enum nf_ct_ftp_type {
+       /* PORT command from client */
+       NF_CT_FTP_PORT,
+       /* PASV response from server */
+       NF_CT_FTP_PASV,
+       /* EPRT command from client */
+       NF_CT_FTP_EPRT,
+       /* EPSV response from server */
+       NF_CT_FTP_EPSV,
+};
+
+
+#endif /* _NF_CONNTRACK_FTP_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_conntrack_sctp.h b/lib/libdss-include/linux/netfilter/nf_conntrack_sctp.h
new file mode 100644 (file)
index 0000000..ed4e776
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _NF_CONNTRACK_SCTP_H
+#define _NF_CONNTRACK_SCTP_H
+/* SCTP tracking. */
+
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+enum sctp_conntrack {
+       SCTP_CONNTRACK_NONE,
+       SCTP_CONNTRACK_CLOSED,
+       SCTP_CONNTRACK_COOKIE_WAIT,
+       SCTP_CONNTRACK_COOKIE_ECHOED,
+       SCTP_CONNTRACK_ESTABLISHED,
+       SCTP_CONNTRACK_SHUTDOWN_SENT,
+       SCTP_CONNTRACK_SHUTDOWN_RECD,
+       SCTP_CONNTRACK_SHUTDOWN_ACK_SENT,
+       SCTP_CONNTRACK_HEARTBEAT_SENT,
+       SCTP_CONNTRACK_HEARTBEAT_ACKED,
+       SCTP_CONNTRACK_MAX
+};
+
+struct ip_ct_sctp {
+       enum sctp_conntrack state;
+
+       __be32 vtag[IP_CT_DIR_MAX];
+};
+
+#endif /* _NF_CONNTRACK_SCTP_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_conntrack_tcp.h b/lib/libdss-include/linux/netfilter/nf_conntrack_tcp.h
new file mode 100644 (file)
index 0000000..c3ffd0c
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _NF_CONNTRACK_TCP_H
+#define _NF_CONNTRACK_TCP_H
+/* TCP tracking. */
+
+#include <linux/types.h>
+
+/* This is exposed to userspace (ctnetlink) */
+enum tcp_conntrack {
+       TCP_CONNTRACK_NONE,
+       TCP_CONNTRACK_SYN_SENT,
+       TCP_CONNTRACK_SYN_RECV,
+       TCP_CONNTRACK_ESTABLISHED,
+       TCP_CONNTRACK_FIN_WAIT,
+       TCP_CONNTRACK_CLOSE_WAIT,
+       TCP_CONNTRACK_LAST_ACK,
+       TCP_CONNTRACK_TIME_WAIT,
+       TCP_CONNTRACK_CLOSE,
+       TCP_CONNTRACK_LISTEN,   /* obsolete */
+#define TCP_CONNTRACK_SYN_SENT2        TCP_CONNTRACK_LISTEN
+       TCP_CONNTRACK_MAX,
+       TCP_CONNTRACK_IGNORE,
+       TCP_CONNTRACK_RETRANS,
+       TCP_CONNTRACK_UNACK,
+       TCP_CONNTRACK_TIMEOUT_MAX
+};
+
+/* Window scaling is advertised by the sender */
+#define IP_CT_TCP_FLAG_WINDOW_SCALE            0x01
+
+/* SACK is permitted by the sender */
+#define IP_CT_TCP_FLAG_SACK_PERM               0x02
+
+/* This sender sent FIN first */
+#define IP_CT_TCP_FLAG_CLOSE_INIT              0x04
+
+/* Be liberal in window checking */
+#define IP_CT_TCP_FLAG_BE_LIBERAL              0x08
+
+/* Has unacknowledged data */
+#define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED     0x10
+
+/* The field td_maxack has been set */
+#define IP_CT_TCP_FLAG_MAXACK_SET              0x20
+
+/* Marks possibility for expected RFC5961 challenge ACK */
+#define IP_CT_EXP_CHALLENGE_ACK                0x40
+
+struct nf_ct_tcp_flags {
+       __u8 flags;
+       __u8 mask;
+};
+
+
+#endif /* _NF_CONNTRACK_TCP_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_conntrack_tuple_common.h b/lib/libdss-include/linux/netfilter/nf_conntrack_tuple_common.h
new file mode 100644 (file)
index 0000000..2f6bbc5
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _NF_CONNTRACK_TUPLE_COMMON_H
+#define _NF_CONNTRACK_TUPLE_COMMON_H
+
+enum ip_conntrack_dir {
+       IP_CT_DIR_ORIGINAL,
+       IP_CT_DIR_REPLY,
+       IP_CT_DIR_MAX
+};
+
+/* The protocol-specific manipulable parts of the tuple: always in
+ * network order
+ */
+union nf_conntrack_man_proto {
+       /* Add other protocols here. */
+       __be16 all;
+
+       struct {
+               __be16 port;
+       } tcp;
+       struct {
+               __be16 port;
+       } udp;
+       struct {
+               __be16 id;
+       } icmp;
+       struct {
+               __be16 port;
+       } dccp;
+       struct {
+               __be16 port;
+       } sctp;
+       struct {
+               __be16 key;     /* GRE key is 32bit, PPtP only uses 16bit */
+       } gre;
+};
+
+#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
+
+#endif /* _NF_CONNTRACK_TUPLE_COMMON_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_nat.h b/lib/libdss-include/linux/netfilter/nf_nat.h
new file mode 100644 (file)
index 0000000..0880781
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _NETFILTER_NF_NAT_H
+#define _NETFILTER_NF_NAT_H
+
+#include <linux/netfilter.h>
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+#define NF_NAT_RANGE_MAP_IPS                   (1 << 0)
+#define NF_NAT_RANGE_PROTO_SPECIFIED           (1 << 1)
+#define NF_NAT_RANGE_PROTO_RANDOM              (1 << 2)
+#define NF_NAT_RANGE_PERSISTENT                        (1 << 3)
+#define NF_NAT_RANGE_PROTO_RANDOM_FULLY                (1 << 4)
+
+#define NF_NAT_RANGE_PROTO_RANDOM_ALL          \
+       (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
+
+#define NF_NAT_RANGE_MASK                                      \
+       (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED |  \
+        NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT |  \
+        NF_NAT_RANGE_PROTO_RANDOM_FULLY)
+
+struct nf_nat_ipv4_range {
+       unsigned int                    flags;
+       __be32                          min_ip;
+       __be32                          max_ip;
+       union nf_conntrack_man_proto    min;
+       union nf_conntrack_man_proto    max;
+};
+
+struct nf_nat_ipv4_multi_range_compat {
+       unsigned int                    rangesize;
+       struct nf_nat_ipv4_range        range[1];
+};
+
+struct nf_nat_range {
+       unsigned int                    flags;
+       union nf_inet_addr              min_addr;
+       union nf_inet_addr              max_addr;
+       union nf_conntrack_man_proto    min_proto;
+       union nf_conntrack_man_proto    max_proto;
+};
+
+#endif /* _NETFILTER_NF_NAT_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_tables.h b/lib/libdss-include/linux/netfilter/nf_tables.h
new file mode 100644 (file)
index 0000000..d8c8a7c
--- /dev/null
@@ -0,0 +1,973 @@
+#ifndef _LINUX_NF_TABLES_H
+#define _LINUX_NF_TABLES_H
+
+#define NFT_TABLE_MAXNAMELEN   32
+#define NFT_CHAIN_MAXNAMELEN   32
+#define NFT_USERDATA_MAXLEN    256
+
+/**
+ * enum nft_registers - nf_tables registers
+ *
+ * nf_tables used to have five registers: a verdict register and four data
+ * registers of size 16. The data registers have been changed to 16 registers
+ * of size 4. For compatibility reasons, the NFT_REG_[1-4] registers still
+ * map to areas of size 16, the 4 byte registers are addressed using
+ * NFT_REG32_00 - NFT_REG32_15.
+ */
+enum nft_registers {
+       NFT_REG_VERDICT,
+       NFT_REG_1,
+       NFT_REG_2,
+       NFT_REG_3,
+       NFT_REG_4,
+       __NFT_REG_MAX,
+
+       NFT_REG32_00    = 8,
+       MFT_REG32_01,
+       NFT_REG32_02,
+       NFT_REG32_03,
+       NFT_REG32_04,
+       NFT_REG32_05,
+       NFT_REG32_06,
+       NFT_REG32_07,
+       NFT_REG32_08,
+       NFT_REG32_09,
+       NFT_REG32_10,
+       NFT_REG32_11,
+       NFT_REG32_12,
+       NFT_REG32_13,
+       NFT_REG32_14,
+       NFT_REG32_15,
+};
+#define NFT_REG_MAX    (__NFT_REG_MAX - 1)
+
+#define NFT_REG_SIZE   16
+#define NFT_REG32_SIZE 4
+
+/**
+ * enum nft_verdicts - nf_tables internal verdicts
+ *
+ * @NFT_CONTINUE: continue evaluation of the current rule
+ * @NFT_BREAK: terminate evaluation of the current rule
+ * @NFT_JUMP: push the current chain on the jump stack and jump to a chain
+ * @NFT_GOTO: jump to a chain without pushing the current chain on the jump stack
+ * @NFT_RETURN: return to the topmost chain on the jump stack
+ *
+ * The nf_tables verdicts share their numeric space with the netfilter verdicts.
+ */
+enum nft_verdicts {
+       NFT_CONTINUE    = -1,
+       NFT_BREAK       = -2,
+       NFT_JUMP        = -3,
+       NFT_GOTO        = -4,
+       NFT_RETURN      = -5,
+};
+
+/**
+ * enum nf_tables_msg_types - nf_tables netlink message types
+ *
+ * @NFT_MSG_NEWTABLE: create a new table (enum nft_table_attributes)
+ * @NFT_MSG_GETTABLE: get a table (enum nft_table_attributes)
+ * @NFT_MSG_DELTABLE: delete a table (enum nft_table_attributes)
+ * @NFT_MSG_NEWCHAIN: create a new chain (enum nft_chain_attributes)
+ * @NFT_MSG_GETCHAIN: get a chain (enum nft_chain_attributes)
+ * @NFT_MSG_DELCHAIN: delete a chain (enum nft_chain_attributes)
+ * @NFT_MSG_NEWRULE: create a new rule (enum nft_rule_attributes)
+ * @NFT_MSG_GETRULE: get a rule (enum nft_rule_attributes)
+ * @NFT_MSG_DELRULE: delete a rule (enum nft_rule_attributes)
+ * @NFT_MSG_NEWSET: create a new set (enum nft_set_attributes)
+ * @NFT_MSG_GETSET: get a set (enum nft_set_attributes)
+ * @NFT_MSG_DELSET: delete a set (enum nft_set_attributes)
+ * @NFT_MSG_NEWSETELEM: create a new set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_GETSETELEM: get a set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_DELSETELEM: delete a set element (enum nft_set_elem_attributes)
+ * @NFT_MSG_NEWGEN: announce a new generation, only for events (enum nft_gen_attributes)
+ * @NFT_MSG_GETGEN: get the rule-set generation (enum nft_gen_attributes)
+ */
+enum nf_tables_msg_types {
+       NFT_MSG_NEWTABLE,
+       NFT_MSG_GETTABLE,
+       NFT_MSG_DELTABLE,
+       NFT_MSG_NEWCHAIN,
+       NFT_MSG_GETCHAIN,
+       NFT_MSG_DELCHAIN,
+       NFT_MSG_NEWRULE,
+       NFT_MSG_GETRULE,
+       NFT_MSG_DELRULE,
+       NFT_MSG_NEWSET,
+       NFT_MSG_GETSET,
+       NFT_MSG_DELSET,
+       NFT_MSG_NEWSETELEM,
+       NFT_MSG_GETSETELEM,
+       NFT_MSG_DELSETELEM,
+       NFT_MSG_NEWGEN,
+       NFT_MSG_GETGEN,
+       NFT_MSG_MAX,
+};
+
+/**
+ * enum nft_list_attributes - nf_tables generic list netlink attributes
+ *
+ * @NFTA_LIST_ELEM: list element (NLA_NESTED)
+ */
+enum nft_list_attributes {
+       NFTA_LIST_UNPEC,
+       NFTA_LIST_ELEM,
+       __NFTA_LIST_MAX
+};
+#define NFTA_LIST_MAX          (__NFTA_LIST_MAX - 1)
+
+/**
+ * enum nft_hook_attributes - nf_tables netfilter hook netlink attributes
+ *
+ * @NFTA_HOOK_HOOKNUM: netfilter hook number (NLA_U32)
+ * @NFTA_HOOK_PRIORITY: netfilter hook priority (NLA_U32)
+ * @NFTA_HOOK_DEV: netdevice name (NLA_STRING)
+ */
+enum nft_hook_attributes {
+       NFTA_HOOK_UNSPEC,
+       NFTA_HOOK_HOOKNUM,
+       NFTA_HOOK_PRIORITY,
+       NFTA_HOOK_DEV,
+       __NFTA_HOOK_MAX
+};
+#define NFTA_HOOK_MAX          (__NFTA_HOOK_MAX - 1)
+
+/**
+ * enum nft_table_flags - nf_tables table flags
+ *
+ * @NFT_TABLE_F_DORMANT: this table is not active
+ */
+enum nft_table_flags {
+       NFT_TABLE_F_DORMANT     = 0x1,
+};
+
+/**
+ * enum nft_table_attributes - nf_tables table netlink attributes
+ *
+ * @NFTA_TABLE_NAME: name of the table (NLA_STRING)
+ * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32)
+ * @NFTA_TABLE_USE: number of chains in this table (NLA_U32)
+ */
+enum nft_table_attributes {
+       NFTA_TABLE_UNSPEC,
+       NFTA_TABLE_NAME,
+       NFTA_TABLE_FLAGS,
+       NFTA_TABLE_USE,
+       __NFTA_TABLE_MAX
+};
+#define NFTA_TABLE_MAX         (__NFTA_TABLE_MAX - 1)
+
+/**
+ * enum nft_chain_attributes - nf_tables chain netlink attributes
+ *
+ * @NFTA_CHAIN_TABLE: name of the table containing the chain (NLA_STRING)
+ * @NFTA_CHAIN_HANDLE: numeric handle of the chain (NLA_U64)
+ * @NFTA_CHAIN_NAME: name of the chain (NLA_STRING)
+ * @NFTA_CHAIN_HOOK: hook specification for basechains (NLA_NESTED: nft_hook_attributes)
+ * @NFTA_CHAIN_POLICY: numeric policy of the chain (NLA_U32)
+ * @NFTA_CHAIN_USE: number of references to this chain (NLA_U32)
+ * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
+ * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes)
+ */
+enum nft_chain_attributes {
+       NFTA_CHAIN_UNSPEC,
+       NFTA_CHAIN_TABLE,
+       NFTA_CHAIN_HANDLE,
+       NFTA_CHAIN_NAME,
+       NFTA_CHAIN_HOOK,
+       NFTA_CHAIN_POLICY,
+       NFTA_CHAIN_USE,
+       NFTA_CHAIN_TYPE,
+       NFTA_CHAIN_COUNTERS,
+       __NFTA_CHAIN_MAX
+};
+#define NFTA_CHAIN_MAX         (__NFTA_CHAIN_MAX - 1)
+
+/**
+ * enum nft_rule_attributes - nf_tables rule netlink attributes
+ *
+ * @NFTA_RULE_TABLE: name of the table containing the rule (NLA_STRING)
+ * @NFTA_RULE_CHAIN: name of the chain containing the rule (NLA_STRING)
+ * @NFTA_RULE_HANDLE: numeric handle of the rule (NLA_U64)
+ * @NFTA_RULE_EXPRESSIONS: list of expressions (NLA_NESTED: nft_expr_attributes)
+ * @NFTA_RULE_COMPAT: compatibility specifications of the rule (NLA_NESTED: nft_rule_compat_attributes)
+ * @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64)
+ * @NFTA_RULE_USERDATA: user data (NLA_BINARY, NFT_USERDATA_MAXLEN)
+ */
+enum nft_rule_attributes {
+       NFTA_RULE_UNSPEC,
+       NFTA_RULE_TABLE,
+       NFTA_RULE_CHAIN,
+       NFTA_RULE_HANDLE,
+       NFTA_RULE_EXPRESSIONS,
+       NFTA_RULE_COMPAT,
+       NFTA_RULE_POSITION,
+       NFTA_RULE_USERDATA,
+       __NFTA_RULE_MAX
+};
+#define NFTA_RULE_MAX          (__NFTA_RULE_MAX - 1)
+
+/**
+ * enum nft_rule_compat_flags - nf_tables rule compat flags
+ *
+ * @NFT_RULE_COMPAT_F_INV: invert the check result
+ */
+enum nft_rule_compat_flags {
+       NFT_RULE_COMPAT_F_INV   = (1 << 1),
+       NFT_RULE_COMPAT_F_MASK  = NFT_RULE_COMPAT_F_INV,
+};
+
+/**
+ * enum nft_rule_compat_attributes - nf_tables rule compat attributes
+ *
+ * @NFTA_RULE_COMPAT_PROTO: numerice value of handled protocol (NLA_U32)
+ * @NFTA_RULE_COMPAT_FLAGS: bitmask of enum nft_rule_compat_flags (NLA_U32)
+ */
+enum nft_rule_compat_attributes {
+       NFTA_RULE_COMPAT_UNSPEC,
+       NFTA_RULE_COMPAT_PROTO,
+       NFTA_RULE_COMPAT_FLAGS,
+       __NFTA_RULE_COMPAT_MAX
+};
+#define NFTA_RULE_COMPAT_MAX   (__NFTA_RULE_COMPAT_MAX - 1)
+
+/**
+ * enum nft_set_flags - nf_tables set flags
+ *
+ * @NFT_SET_ANONYMOUS: name allocation, automatic cleanup on unlink
+ * @NFT_SET_CONSTANT: set contents may not change while bound
+ * @NFT_SET_INTERVAL: set contains intervals
+ * @NFT_SET_MAP: set is used as a dictionary
+ * @NFT_SET_TIMEOUT: set uses timeouts
+ * @NFT_SET_EVAL: set contains expressions for evaluation
+ */
+enum nft_set_flags {
+       NFT_SET_ANONYMOUS               = 0x1,
+       NFT_SET_CONSTANT                = 0x2,
+       NFT_SET_INTERVAL                = 0x4,
+       NFT_SET_MAP                     = 0x8,
+       NFT_SET_TIMEOUT                 = 0x10,
+       NFT_SET_EVAL                    = 0x20,
+};
+
+/**
+ * enum nft_set_policies - set selection policy
+ *
+ * @NFT_SET_POL_PERFORMANCE: prefer high performance over low memory use
+ * @NFT_SET_POL_MEMORY: prefer low memory use over high performance
+ */
+enum nft_set_policies {
+       NFT_SET_POL_PERFORMANCE,
+       NFT_SET_POL_MEMORY,
+};
+
+/**
+ * enum nft_set_desc_attributes - set element description
+ *
+ * @NFTA_SET_DESC_SIZE: number of elements in set (NLA_U32)
+ */
+enum nft_set_desc_attributes {
+       NFTA_SET_DESC_UNSPEC,
+       NFTA_SET_DESC_SIZE,
+       __NFTA_SET_DESC_MAX
+};
+#define NFTA_SET_DESC_MAX      (__NFTA_SET_DESC_MAX - 1)
+
+/**
+ * enum nft_set_attributes - nf_tables set netlink attributes
+ *
+ * @NFTA_SET_TABLE: table name (NLA_STRING)
+ * @NFTA_SET_NAME: set name (NLA_STRING)
+ * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32)
+ * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32)
+ * @NFTA_SET_KEY_LEN: key data length (NLA_U32)
+ * @NFTA_SET_DATA_TYPE: mapping data type (NLA_U32)
+ * @NFTA_SET_DATA_LEN: mapping data length (NLA_U32)
+ * @NFTA_SET_POLICY: selection policy (NLA_U32)
+ * @NFTA_SET_DESC: set description (NLA_NESTED)
+ * @NFTA_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ * @NFTA_SET_TIMEOUT: default timeout value (NLA_U64)
+ * @NFTA_SET_GC_INTERVAL: garbage collection interval (NLA_U32)
+ */
+enum nft_set_attributes {
+       NFTA_SET_UNSPEC,
+       NFTA_SET_TABLE,
+       NFTA_SET_NAME,
+       NFTA_SET_FLAGS,
+       NFTA_SET_KEY_TYPE,
+       NFTA_SET_KEY_LEN,
+       NFTA_SET_DATA_TYPE,
+       NFTA_SET_DATA_LEN,
+       NFTA_SET_POLICY,
+       NFTA_SET_DESC,
+       NFTA_SET_ID,
+       NFTA_SET_TIMEOUT,
+       NFTA_SET_GC_INTERVAL,
+       __NFTA_SET_MAX
+};
+#define NFTA_SET_MAX           (__NFTA_SET_MAX - 1)
+
+/**
+ * enum nft_set_elem_flags - nf_tables set element flags
+ *
+ * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
+ */
+enum nft_set_elem_flags {
+       NFT_SET_ELEM_INTERVAL_END       = 0x1,
+};
+
+/**
+ * enum nft_set_elem_attributes - nf_tables set element netlink attributes
+ *
+ * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data)
+ * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes)
+ * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32)
+ * @NFTA_SET_ELEM_TIMEOUT: timeout value (NLA_U64)
+ * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64)
+ * @NFTA_SET_ELEM_USERDATA: user data (NLA_BINARY)
+ * @NFTA_SET_ELEM_EXPR: expression (NLA_NESTED: nft_expr_attributes)
+ */
+enum nft_set_elem_attributes {
+       NFTA_SET_ELEM_UNSPEC,
+       NFTA_SET_ELEM_KEY,
+       NFTA_SET_ELEM_DATA,
+       NFTA_SET_ELEM_FLAGS,
+       NFTA_SET_ELEM_TIMEOUT,
+       NFTA_SET_ELEM_EXPIRATION,
+       NFTA_SET_ELEM_USERDATA,
+       NFTA_SET_ELEM_EXPR,
+       __NFTA_SET_ELEM_MAX
+};
+#define NFTA_SET_ELEM_MAX      (__NFTA_SET_ELEM_MAX - 1)
+
+/**
+ * enum nft_set_elem_list_attributes - nf_tables set element list netlink attributes
+ *
+ * @NFTA_SET_ELEM_LIST_TABLE: table of the set to be changed (NLA_STRING)
+ * @NFTA_SET_ELEM_LIST_SET: name of the set to be changed (NLA_STRING)
+ * @NFTA_SET_ELEM_LIST_ELEMENTS: list of set elements (NLA_NESTED: nft_set_elem_attributes)
+ * @NFTA_SET_ELEM_LIST_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ */
+enum nft_set_elem_list_attributes {
+       NFTA_SET_ELEM_LIST_UNSPEC,
+       NFTA_SET_ELEM_LIST_TABLE,
+       NFTA_SET_ELEM_LIST_SET,
+       NFTA_SET_ELEM_LIST_ELEMENTS,
+       NFTA_SET_ELEM_LIST_SET_ID,
+       __NFTA_SET_ELEM_LIST_MAX
+};
+#define NFTA_SET_ELEM_LIST_MAX (__NFTA_SET_ELEM_LIST_MAX - 1)
+
+/**
+ * enum nft_data_types - nf_tables data types
+ *
+ * @NFT_DATA_VALUE: generic data
+ * @NFT_DATA_VERDICT: netfilter verdict
+ *
+ * The type of data is usually determined by the kernel directly and is not
+ * explicitly specified by userspace. The only difference are sets, where
+ * userspace specifies the key and mapping data types.
+ *
+ * The values 0xffffff00-0xffffffff are reserved for internally used types.
+ * The remaining range can be freely used by userspace to encode types, all
+ * values are equivalent to NFT_DATA_VALUE.
+ */
+enum nft_data_types {
+       NFT_DATA_VALUE,
+       NFT_DATA_VERDICT        = 0xffffff00U,
+};
+
+#define NFT_DATA_RESERVED_MASK 0xffffff00U
+
+/**
+ * enum nft_data_attributes - nf_tables data netlink attributes
+ *
+ * @NFTA_DATA_VALUE: generic data (NLA_BINARY)
+ * @NFTA_DATA_VERDICT: nf_tables verdict (NLA_NESTED: nft_verdict_attributes)
+ */
+enum nft_data_attributes {
+       NFTA_DATA_UNSPEC,
+       NFTA_DATA_VALUE,
+       NFTA_DATA_VERDICT,
+       __NFTA_DATA_MAX
+};
+#define NFTA_DATA_MAX          (__NFTA_DATA_MAX - 1)
+
+/* Maximum length of a value */
+#define NFT_DATA_VALUE_MAXLEN  64
+
+/**
+ * enum nft_verdict_attributes - nf_tables verdict netlink attributes
+ *
+ * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts)
+ * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING)
+ */
+enum nft_verdict_attributes {
+       NFTA_VERDICT_UNSPEC,
+       NFTA_VERDICT_CODE,
+       NFTA_VERDICT_CHAIN,
+       __NFTA_VERDICT_MAX
+};
+#define NFTA_VERDICT_MAX       (__NFTA_VERDICT_MAX - 1)
+
+/**
+ * enum nft_expr_attributes - nf_tables expression netlink attributes
+ *
+ * @NFTA_EXPR_NAME: name of the expression type (NLA_STRING)
+ * @NFTA_EXPR_DATA: type specific data (NLA_NESTED)
+ */
+enum nft_expr_attributes {
+       NFTA_EXPR_UNSPEC,
+       NFTA_EXPR_NAME,
+       NFTA_EXPR_DATA,
+       __NFTA_EXPR_MAX
+};
+#define NFTA_EXPR_MAX          (__NFTA_EXPR_MAX - 1)
+
+/**
+ * enum nft_immediate_attributes - nf_tables immediate expression netlink attributes
+ *
+ * @NFTA_IMMEDIATE_DREG: destination register to load data into (NLA_U32)
+ * @NFTA_IMMEDIATE_DATA: data to load (NLA_NESTED: nft_data_attributes)
+ */
+enum nft_immediate_attributes {
+       NFTA_IMMEDIATE_UNSPEC,
+       NFTA_IMMEDIATE_DREG,
+       NFTA_IMMEDIATE_DATA,
+       __NFTA_IMMEDIATE_MAX
+};
+#define NFTA_IMMEDIATE_MAX     (__NFTA_IMMEDIATE_MAX - 1)
+
+/**
+ * enum nft_bitwise_attributes - nf_tables bitwise expression netlink attributes
+ *
+ * @NFTA_BITWISE_SREG: source register (NLA_U32: nft_registers)
+ * @NFTA_BITWISE_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_BITWISE_LEN: length of operands (NLA_U32)
+ * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)
+ * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)
+ *
+ * The bitwise expression performs the following operation:
+ *
+ * dreg = (sreg & mask) ^ xor
+ *
+ * which allow to express all bitwise operations:
+ *
+ *             mask    xor
+ * NOT:                1       1
+ * OR:         0       x
+ * XOR:                1       x
+ * AND:                x       0
+ */
+enum nft_bitwise_attributes {
+       NFTA_BITWISE_UNSPEC,
+       NFTA_BITWISE_SREG,
+       NFTA_BITWISE_DREG,
+       NFTA_BITWISE_LEN,
+       NFTA_BITWISE_MASK,
+       NFTA_BITWISE_XOR,
+       __NFTA_BITWISE_MAX
+};
+#define NFTA_BITWISE_MAX       (__NFTA_BITWISE_MAX - 1)
+
+/**
+ * enum nft_byteorder_ops - nf_tables byteorder operators
+ *
+ * @NFT_BYTEORDER_NTOH: network to host operator
+ * @NFT_BYTEORDER_HTON: host to network opertaor
+ */
+enum nft_byteorder_ops {
+       NFT_BYTEORDER_NTOH,
+       NFT_BYTEORDER_HTON,
+};
+
+/**
+ * enum nft_byteorder_attributes - nf_tables byteorder expression netlink attributes
+ *
+ * @NFTA_BYTEORDER_SREG: source register (NLA_U32: nft_registers)
+ * @NFTA_BYTEORDER_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_BYTEORDER_OP: operator (NLA_U32: enum nft_byteorder_ops)
+ * @NFTA_BYTEORDER_LEN: length of the data (NLA_U32)
+ * @NFTA_BYTEORDER_SIZE: data size in bytes (NLA_U32: 2 or 4)
+ */
+enum nft_byteorder_attributes {
+       NFTA_BYTEORDER_UNSPEC,
+       NFTA_BYTEORDER_SREG,
+       NFTA_BYTEORDER_DREG,
+       NFTA_BYTEORDER_OP,
+       NFTA_BYTEORDER_LEN,
+       NFTA_BYTEORDER_SIZE,
+       __NFTA_BYTEORDER_MAX
+};
+#define NFTA_BYTEORDER_MAX     (__NFTA_BYTEORDER_MAX - 1)
+
+/**
+ * enum nft_cmp_ops - nf_tables relational operator
+ *
+ * @NFT_CMP_EQ: equal
+ * @NFT_CMP_NEQ: not equal
+ * @NFT_CMP_LT: less than
+ * @NFT_CMP_LTE: less than or equal to
+ * @NFT_CMP_GT: greater than
+ * @NFT_CMP_GTE: greater than or equal to
+ */
+enum nft_cmp_ops {
+       NFT_CMP_EQ,
+       NFT_CMP_NEQ,
+       NFT_CMP_LT,
+       NFT_CMP_LTE,
+       NFT_CMP_GT,
+       NFT_CMP_GTE,
+};
+
+/**
+ * enum nft_cmp_attributes - nf_tables cmp expression netlink attributes
+ *
+ * @NFTA_CMP_SREG: source register of data to compare (NLA_U32: nft_registers)
+ * @NFTA_CMP_OP: cmp operation (NLA_U32: nft_cmp_ops)
+ * @NFTA_CMP_DATA: data to compare against (NLA_NESTED: nft_data_attributes)
+ */
+enum nft_cmp_attributes {
+       NFTA_CMP_UNSPEC,
+       NFTA_CMP_SREG,
+       NFTA_CMP_OP,
+       NFTA_CMP_DATA,
+       __NFTA_CMP_MAX
+};
+#define NFTA_CMP_MAX           (__NFTA_CMP_MAX - 1)
+
+/**
+ * enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes
+ *
+ * @NFTA_LOOKUP_SET: name of the set where to look for (NLA_STRING)
+ * @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers)
+ * @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_LOOKUP_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
+ */
+enum nft_lookup_attributes {
+       NFTA_LOOKUP_UNSPEC,
+       NFTA_LOOKUP_SET,
+       NFTA_LOOKUP_SREG,
+       NFTA_LOOKUP_DREG,
+       NFTA_LOOKUP_SET_ID,
+       __NFTA_LOOKUP_MAX
+};
+#define NFTA_LOOKUP_MAX                (__NFTA_LOOKUP_MAX - 1)
+
+enum nft_dynset_ops {
+       NFT_DYNSET_OP_ADD,
+       NFT_DYNSET_OP_UPDATE,
+};
+
+/**
+ * enum nft_dynset_attributes - dynset expression attributes
+ *
+ * @NFTA_DYNSET_SET_NAME: name of set the to add data to (NLA_STRING)
+ * @NFTA_DYNSET_SET_ID: uniquely identifier of the set in the transaction (NLA_U32)
+ * @NFTA_DYNSET_OP: operation (NLA_U32)
+ * @NFTA_DYNSET_SREG_KEY: source register of the key (NLA_U32)
+ * @NFTA_DYNSET_SREG_DATA: source register of the data (NLA_U32)
+ * @NFTA_DYNSET_TIMEOUT: timeout value for the new element (NLA_U64)
+ * @NFTA_DYNSET_EXPR: expression (NLA_NESTED: nft_expr_attributes)
+ */
+enum nft_dynset_attributes {
+       NFTA_DYNSET_UNSPEC,
+       NFTA_DYNSET_SET_NAME,
+       NFTA_DYNSET_SET_ID,
+       NFTA_DYNSET_OP,
+       NFTA_DYNSET_SREG_KEY,
+       NFTA_DYNSET_SREG_DATA,
+       NFTA_DYNSET_TIMEOUT,
+       NFTA_DYNSET_EXPR,
+       __NFTA_DYNSET_MAX,
+};
+#define NFTA_DYNSET_MAX                (__NFTA_DYNSET_MAX - 1)
+
+/**
+ * enum nft_payload_bases - nf_tables payload expression offset bases
+ *
+ * @NFT_PAYLOAD_LL_HEADER: link layer header
+ * @NFT_PAYLOAD_NETWORK_HEADER: network header
+ * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header
+ */
+enum nft_payload_bases {
+       NFT_PAYLOAD_LL_HEADER,
+       NFT_PAYLOAD_NETWORK_HEADER,
+       NFT_PAYLOAD_TRANSPORT_HEADER,
+};
+
+/**
+ * enum nft_payload_attributes - nf_tables payload expression netlink attributes
+ *
+ * @NFTA_PAYLOAD_DREG: destination register to load data into (NLA_U32: nft_registers)
+ * @NFTA_PAYLOAD_BASE: payload base (NLA_U32: nft_payload_bases)
+ * @NFTA_PAYLOAD_OFFSET: payload offset relative to base (NLA_U32)
+ * @NFTA_PAYLOAD_LEN: payload length (NLA_U32)
+ */
+enum nft_payload_attributes {
+       NFTA_PAYLOAD_UNSPEC,
+       NFTA_PAYLOAD_DREG,
+       NFTA_PAYLOAD_BASE,
+       NFTA_PAYLOAD_OFFSET,
+       NFTA_PAYLOAD_LEN,
+       __NFTA_PAYLOAD_MAX
+};
+#define NFTA_PAYLOAD_MAX       (__NFTA_PAYLOAD_MAX - 1)
+
+/**
+ * enum nft_exthdr_attributes - nf_tables IPv6 extension header expression netlink attributes
+ *
+ * @NFTA_EXTHDR_DREG: destination register (NLA_U32: nft_registers)
+ * @NFTA_EXTHDR_TYPE: extension header type (NLA_U8)
+ * @NFTA_EXTHDR_OFFSET: extension header offset (NLA_U32)
+ * @NFTA_EXTHDR_LEN: extension header length (NLA_U32)
+ */
+enum nft_exthdr_attributes {
+       NFTA_EXTHDR_UNSPEC,
+       NFTA_EXTHDR_DREG,
+       NFTA_EXTHDR_TYPE,
+       NFTA_EXTHDR_OFFSET,
+       NFTA_EXTHDR_LEN,
+       __NFTA_EXTHDR_MAX
+};
+#define NFTA_EXTHDR_MAX                (__NFTA_EXTHDR_MAX - 1)
+
+/**
+ * enum nft_meta_keys - nf_tables meta expression keys
+ *
+ * @NFT_META_LEN: packet length (skb->len)
+ * @NFT_META_PROTOCOL: packet ethertype protocol (skb->protocol), invalid in OUTPUT
+ * @NFT_META_PRIORITY: packet priority (skb->priority)
+ * @NFT_META_MARK: packet mark (skb->mark)
+ * @NFT_META_IIF: packet input interface index (dev->ifindex)
+ * @NFT_META_OIF: packet output interface index (dev->ifindex)
+ * @NFT_META_IIFNAME: packet input interface name (dev->name)
+ * @NFT_META_OIFNAME: packet output interface name (dev->name)
+ * @NFT_META_IIFTYPE: packet input interface type (dev->type)
+ * @NFT_META_OIFTYPE: packet output interface type (dev->type)
+ * @NFT_META_SKUID: originating socket UID (fsuid)
+ * @NFT_META_SKGID: originating socket GID (fsgid)
+ * @NFT_META_NFTRACE: packet nftrace bit
+ * @NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid)
+ * @NFT_META_SECMARK: packet secmark (skb->secmark)
+ * @NFT_META_NFPROTO: netfilter protocol
+ * @NFT_META_L4PROTO: layer 4 protocol number
+ * @NFT_META_BRI_IIFNAME: packet input bridge interface name
+ * @NFT_META_BRI_OIFNAME: packet output bridge interface name
+ * @NFT_META_PKTTYPE: packet type (skb->pkt_type), special handling for loopback
+ * @NFT_META_CPU: cpu id through smp_processor_id()
+ * @NFT_META_IIFGROUP: packet input interface group
+ * @NFT_META_OIFGROUP: packet output interface group
+ * @NFT_META_CGROUP: socket control group (skb->sk->sk_classid)
+ */
+enum nft_meta_keys {
+       NFT_META_LEN,
+       NFT_META_PROTOCOL,
+       NFT_META_PRIORITY,
+       NFT_META_MARK,
+       NFT_META_IIF,
+       NFT_META_OIF,
+       NFT_META_IIFNAME,
+       NFT_META_OIFNAME,
+       NFT_META_IIFTYPE,
+       NFT_META_OIFTYPE,
+       NFT_META_SKUID,
+       NFT_META_SKGID,
+       NFT_META_NFTRACE,
+       NFT_META_RTCLASSID,
+       NFT_META_SECMARK,
+       NFT_META_NFPROTO,
+       NFT_META_L4PROTO,
+       NFT_META_BRI_IIFNAME,
+       NFT_META_BRI_OIFNAME,
+       NFT_META_PKTTYPE,
+       NFT_META_CPU,
+       NFT_META_IIFGROUP,
+       NFT_META_OIFGROUP,
+       NFT_META_CGROUP,
+};
+
+/**
+ * enum nft_meta_attributes - nf_tables meta expression netlink attributes
+ *
+ * @NFTA_META_DREG: destination register (NLA_U32)
+ * @NFTA_META_KEY: meta data item to load (NLA_U32: nft_meta_keys)
+ * @NFTA_META_SREG: source register (NLA_U32)
+ */
+enum nft_meta_attributes {
+       NFTA_META_UNSPEC,
+       NFTA_META_DREG,
+       NFTA_META_KEY,
+       NFTA_META_SREG,
+       __NFTA_META_MAX
+};
+#define NFTA_META_MAX          (__NFTA_META_MAX - 1)
+
+/**
+ * enum nft_ct_keys - nf_tables ct expression keys
+ *
+ * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info)
+ * @NFT_CT_DIRECTION: conntrack direction (enum ip_conntrack_dir)
+ * @NFT_CT_STATUS: conntrack status (bitmask of enum ip_conntrack_status)
+ * @NFT_CT_MARK: conntrack mark value
+ * @NFT_CT_SECMARK: conntrack secmark value
+ * @NFT_CT_EXPIRATION: relative conntrack expiration time in ms
+ * @NFT_CT_HELPER: connection tracking helper assigned to conntrack
+ * @NFT_CT_L3PROTOCOL: conntrack layer 3 protocol
+ * @NFT_CT_SRC: conntrack layer 3 protocol source (IPv4/IPv6 address)
+ * @NFT_CT_DST: conntrack layer 3 protocol destination (IPv4/IPv6 address)
+ * @NFT_CT_PROTOCOL: conntrack layer 4 protocol
+ * @NFT_CT_PROTO_SRC: conntrack layer 4 protocol source
+ * @NFT_CT_PROTO_DST: conntrack layer 4 protocol destination
+ */
+enum nft_ct_keys {
+       NFT_CT_STATE,
+       NFT_CT_DIRECTION,
+       NFT_CT_STATUS,
+       NFT_CT_MARK,
+       NFT_CT_SECMARK,
+       NFT_CT_EXPIRATION,
+       NFT_CT_HELPER,
+       NFT_CT_L3PROTOCOL,
+       NFT_CT_SRC,
+       NFT_CT_DST,
+       NFT_CT_PROTOCOL,
+       NFT_CT_PROTO_SRC,
+       NFT_CT_PROTO_DST,
+       NFT_CT_LABELS,
+};
+
+/**
+ * enum nft_ct_attributes - nf_tables ct expression netlink attributes
+ *
+ * @NFTA_CT_DREG: destination register (NLA_U32)
+ * @NFTA_CT_KEY: conntrack data item to load (NLA_U32: nft_ct_keys)
+ * @NFTA_CT_DIRECTION: direction in case of directional keys (NLA_U8)
+ * @NFTA_CT_SREG: source register (NLA_U32)
+ */
+enum nft_ct_attributes {
+       NFTA_CT_UNSPEC,
+       NFTA_CT_DREG,
+       NFTA_CT_KEY,
+       NFTA_CT_DIRECTION,
+       NFTA_CT_SREG,
+       __NFTA_CT_MAX
+};
+#define NFTA_CT_MAX            (__NFTA_CT_MAX - 1)
+
+enum nft_limit_type {
+       NFT_LIMIT_PKTS,
+       NFT_LIMIT_PKT_BYTES
+};
+
+/**
+ * enum nft_limit_attributes - nf_tables limit expression netlink attributes
+ *
+ * @NFTA_LIMIT_RATE: refill rate (NLA_U64)
+ * @NFTA_LIMIT_UNIT: refill unit (NLA_U64)
+ * @NFTA_LIMIT_BURST: burst (NLA_U32)
+ * @NFTA_LIMIT_TYPE: type of limit (NLA_U32: enum nft_limit_type)
+ */
+enum nft_limit_attributes {
+       NFTA_LIMIT_UNSPEC,
+       NFTA_LIMIT_RATE,
+       NFTA_LIMIT_UNIT,
+       NFTA_LIMIT_BURST,
+       NFTA_LIMIT_TYPE,
+       __NFTA_LIMIT_MAX
+};
+#define NFTA_LIMIT_MAX         (__NFTA_LIMIT_MAX - 1)
+
+/**
+ * enum nft_counter_attributes - nf_tables counter expression netlink attributes
+ *
+ * @NFTA_COUNTER_BYTES: number of bytes (NLA_U64)
+ * @NFTA_COUNTER_PACKETS: number of packets (NLA_U64)
+ */
+enum nft_counter_attributes {
+       NFTA_COUNTER_UNSPEC,
+       NFTA_COUNTER_BYTES,
+       NFTA_COUNTER_PACKETS,
+       __NFTA_COUNTER_MAX
+};
+#define NFTA_COUNTER_MAX       (__NFTA_COUNTER_MAX - 1)
+
+/**
+ * enum nft_log_attributes - nf_tables log expression netlink attributes
+ *
+ * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32)
+ * @NFTA_LOG_PREFIX: prefix to prepend to log messages (NLA_STRING)
+ * @NFTA_LOG_SNAPLEN: length of payload to include in netlink message (NLA_U32)
+ * @NFTA_LOG_QTHRESHOLD: queue threshold (NLA_U32)
+ * @NFTA_LOG_LEVEL: log level (NLA_U32)
+ * @NFTA_LOG_FLAGS: logging flags (NLA_U32)
+ */
+enum nft_log_attributes {
+       NFTA_LOG_UNSPEC,
+       NFTA_LOG_GROUP,
+       NFTA_LOG_PREFIX,
+       NFTA_LOG_SNAPLEN,
+       NFTA_LOG_QTHRESHOLD,
+       NFTA_LOG_LEVEL,
+       NFTA_LOG_FLAGS,
+       __NFTA_LOG_MAX
+};
+#define NFTA_LOG_MAX           (__NFTA_LOG_MAX - 1)
+
+/**
+ * enum nft_queue_attributes - nf_tables queue expression netlink attributes
+ *
+ * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16)
+ * @NFTA_QUEUE_TOTAL: number of queues to load balance packets on (NLA_U16)
+ * @NFTA_QUEUE_FLAGS: various flags (NLA_U16)
+ */
+enum nft_queue_attributes {
+       NFTA_QUEUE_UNSPEC,
+       NFTA_QUEUE_NUM,
+       NFTA_QUEUE_TOTAL,
+       NFTA_QUEUE_FLAGS,
+       __NFTA_QUEUE_MAX
+};
+#define NFTA_QUEUE_MAX         (__NFTA_QUEUE_MAX - 1)
+
+#define NFT_QUEUE_FLAG_BYPASS          0x01 /* for compatibility with v2 */
+#define NFT_QUEUE_FLAG_CPU_FANOUT      0x02 /* use current CPU (no hashing) */
+#define NFT_QUEUE_FLAG_MASK            0x03
+
+/**
+ * enum nft_reject_types - nf_tables reject expression reject types
+ *
+ * @NFT_REJECT_ICMP_UNREACH: reject using ICMP unreachable
+ * @NFT_REJECT_TCP_RST: reject using TCP RST
+ * @NFT_REJECT_ICMPX_UNREACH: abstracted ICMP unreachable for bridge and inet
+ */
+enum nft_reject_types {
+       NFT_REJECT_ICMP_UNREACH,
+       NFT_REJECT_TCP_RST,
+       NFT_REJECT_ICMPX_UNREACH,
+};
+
+/**
+ * enum nft_reject_code - Generic reject codes for IPv4/IPv6
+ *
+ * @NFT_REJECT_ICMPX_NO_ROUTE: no route to host / network unreachable
+ * @NFT_REJECT_ICMPX_PORT_UNREACH: port unreachable
+ * @NFT_REJECT_ICMPX_HOST_UNREACH: host unreachable
+ * @NFT_REJECT_ICMPX_ADMIN_PROHIBITED: administratively prohibited
+ *
+ * These codes are mapped to real ICMP and ICMPv6 codes.
+ */
+enum nft_reject_inet_code {
+       NFT_REJECT_ICMPX_NO_ROUTE       = 0,
+       NFT_REJECT_ICMPX_PORT_UNREACH,
+       NFT_REJECT_ICMPX_HOST_UNREACH,
+       NFT_REJECT_ICMPX_ADMIN_PROHIBITED,
+       __NFT_REJECT_ICMPX_MAX
+};
+#define NFT_REJECT_ICMPX_MAX   (__NFT_REJECT_ICMPX_MAX - 1)
+
+/**
+ * enum nft_reject_attributes - nf_tables reject expression netlink attributes
+ *
+ * @NFTA_REJECT_TYPE: packet type to use (NLA_U32: nft_reject_types)
+ * @NFTA_REJECT_ICMP_CODE: ICMP code to use (NLA_U8)
+ */
+enum nft_reject_attributes {
+       NFTA_REJECT_UNSPEC,
+       NFTA_REJECT_TYPE,
+       NFTA_REJECT_ICMP_CODE,
+       __NFTA_REJECT_MAX
+};
+#define NFTA_REJECT_MAX                (__NFTA_REJECT_MAX - 1)
+
+/**
+ * enum nft_nat_types - nf_tables nat expression NAT types
+ *
+ * @NFT_NAT_SNAT: source NAT
+ * @NFT_NAT_DNAT: destination NAT
+ */
+enum nft_nat_types {
+       NFT_NAT_SNAT,
+       NFT_NAT_DNAT,
+};
+
+/**
+ * enum nft_nat_attributes - nf_tables nat expression netlink attributes
+ *
+ * @NFTA_NAT_TYPE: NAT type (NLA_U32: nft_nat_types)
+ * @NFTA_NAT_FAMILY: NAT family (NLA_U32)
+ * @NFTA_NAT_REG_ADDR_MIN: source register of address range start (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_ADDR_MAX: source register of address range end (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
+ * @NFTA_NAT_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
+ * @NFTA_NAT_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_nat_attributes {
+       NFTA_NAT_UNSPEC,
+       NFTA_NAT_TYPE,
+       NFTA_NAT_FAMILY,
+       NFTA_NAT_REG_ADDR_MIN,
+       NFTA_NAT_REG_ADDR_MAX,
+       NFTA_NAT_REG_PROTO_MIN,
+       NFTA_NAT_REG_PROTO_MAX,
+       NFTA_NAT_FLAGS,
+       __NFTA_NAT_MAX
+};
+#define NFTA_NAT_MAX           (__NFTA_NAT_MAX - 1)
+
+/**
+ * enum nft_masq_attributes - nf_tables masquerade expression attributes
+ *
+ * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_masq_attributes {
+       NFTA_MASQ_UNSPEC,
+       NFTA_MASQ_FLAGS,
+       __NFTA_MASQ_MAX
+};
+#define NFTA_MASQ_MAX          (__NFTA_MASQ_MAX - 1)
+
+/**
+ * enum nft_redir_attributes - nf_tables redirect expression netlink attributes
+ *
+ * @NFTA_REDIR_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
+ * @NFTA_REDIR_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
+ * @NFTA_REDIR_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
+ */
+enum nft_redir_attributes {
+       NFTA_REDIR_UNSPEC,
+       NFTA_REDIR_REG_PROTO_MIN,
+       NFTA_REDIR_REG_PROTO_MAX,
+       NFTA_REDIR_FLAGS,
+       __NFTA_REDIR_MAX
+};
+#define NFTA_REDIR_MAX         (__NFTA_REDIR_MAX - 1)
+
+/**
+ * enum nft_dup_attributes - nf_tables dup expression netlink attributes
+ *
+ * @NFTA_DUP_SREG_ADDR: source register of address (NLA_U32: nft_registers)
+ * @NFTA_DUP_SREG_DEV: source register of output interface (NLA_U32: nft_register)
+ */
+enum nft_dup_attributes {
+       NFTA_DUP_UNSPEC,
+       NFTA_DUP_SREG_ADDR,
+       NFTA_DUP_SREG_DEV,
+       __NFTA_DUP_MAX
+};
+#define NFTA_DUP_MAX           (__NFTA_DUP_MAX - 1)
+
+/**
+ * enum nft_gen_attributes - nf_tables ruleset generation attributes
+ *
+ * @NFTA_GEN_ID: Ruleset generation ID (NLA_U32)
+ */
+enum nft_gen_attributes {
+       NFTA_GEN_UNSPEC,
+       NFTA_GEN_ID,
+       __NFTA_GEN_MAX
+};
+#define NFTA_GEN_MAX           (__NFTA_GEN_MAX - 1)
+
+#endif /* _LINUX_NF_TABLES_H */
diff --git a/lib/libdss-include/linux/netfilter/nf_tables_compat.h b/lib/libdss-include/linux/netfilter/nf_tables_compat.h
new file mode 100644 (file)
index 0000000..8310f5f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef _NFT_COMPAT_NFNETLINK_H_
+#define _NFT_COMPAT_NFNETLINK_H_
+
+enum nft_target_attributes {
+       NFTA_TARGET_UNSPEC,
+       NFTA_TARGET_NAME,
+       NFTA_TARGET_REV,
+       NFTA_TARGET_INFO,
+       __NFTA_TARGET_MAX
+};
+#define NFTA_TARGET_MAX                (__NFTA_TARGET_MAX - 1)
+
+enum nft_match_attributes {
+       NFTA_MATCH_UNSPEC,
+       NFTA_MATCH_NAME,
+       NFTA_MATCH_REV,
+       NFTA_MATCH_INFO,
+       __NFTA_MATCH_MAX
+};
+#define NFTA_MATCH_MAX         (__NFTA_MATCH_MAX - 1)
+
+#define NFT_COMPAT_NAME_MAX    32
+
+enum {
+       NFNL_MSG_COMPAT_GET,
+       NFNL_MSG_COMPAT_MAX
+};
+
+enum {
+       NFTA_COMPAT_UNSPEC = 0,
+       NFTA_COMPAT_NAME,
+       NFTA_COMPAT_REV,
+       NFTA_COMPAT_TYPE,
+       __NFTA_COMPAT_MAX,
+};
+#define NFTA_COMPAT_MAX (__NFTA_COMPAT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink.h b/lib/libdss-include/linux/netfilter/nfnetlink.h
new file mode 100644 (file)
index 0000000..c755646
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _NFNETLINK_H
+#define _NFNETLINK_H
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink_compat.h>
+
+enum nfnetlink_groups {
+       NFNLGRP_NONE,
+#define NFNLGRP_NONE                   NFNLGRP_NONE
+       NFNLGRP_CONNTRACK_NEW,
+#define NFNLGRP_CONNTRACK_NEW          NFNLGRP_CONNTRACK_NEW
+       NFNLGRP_CONNTRACK_UPDATE,
+#define NFNLGRP_CONNTRACK_UPDATE       NFNLGRP_CONNTRACK_UPDATE
+       NFNLGRP_CONNTRACK_DESTROY,
+#define NFNLGRP_CONNTRACK_DESTROY      NFNLGRP_CONNTRACK_DESTROY
+       NFNLGRP_CONNTRACK_EXP_NEW,
+#define        NFNLGRP_CONNTRACK_EXP_NEW       NFNLGRP_CONNTRACK_EXP_NEW
+       NFNLGRP_CONNTRACK_EXP_UPDATE,
+#define NFNLGRP_CONNTRACK_EXP_UPDATE   NFNLGRP_CONNTRACK_EXP_UPDATE
+       NFNLGRP_CONNTRACK_EXP_DESTROY,
+#define NFNLGRP_CONNTRACK_EXP_DESTROY  NFNLGRP_CONNTRACK_EXP_DESTROY
+       NFNLGRP_NFTABLES,
+#define NFNLGRP_NFTABLES                NFNLGRP_NFTABLES
+       NFNLGRP_ACCT_QUOTA,
+#define NFNLGRP_ACCT_QUOTA             NFNLGRP_ACCT_QUOTA
+       __NFNLGRP_MAX,
+};
+#define NFNLGRP_MAX    (__NFNLGRP_MAX - 1)
+
+/* General form of address family dependent message.
+ */
+struct nfgenmsg {
+       __u8  nfgen_family;             /* AF_xxx */
+       __u8  version;          /* nfnetlink version */
+       __be16    res_id;               /* resource id */
+};
+
+#define NFNETLINK_V0   0
+
+/* netfilter netlink message types are split in two pieces:
+ * 8 bit subsystem, 8bit operation.
+ */
+
+#define NFNL_SUBSYS_ID(x)      ((x & 0xff00) >> 8)
+#define NFNL_MSG_TYPE(x)       (x & 0x00ff)
+
+/* No enum here, otherwise __stringify() trick of MODULE_ALIAS_NFNL_SUBSYS()
+ * won't work anymore */
+#define NFNL_SUBSYS_NONE               0
+#define NFNL_SUBSYS_CTNETLINK          1
+#define NFNL_SUBSYS_CTNETLINK_EXP      2
+#define NFNL_SUBSYS_QUEUE              3
+#define NFNL_SUBSYS_ULOG               4
+#define NFNL_SUBSYS_OSF                        5
+#define NFNL_SUBSYS_IPSET              6
+#define NFNL_SUBSYS_ACCT               7
+#define NFNL_SUBSYS_CTNETLINK_TIMEOUT  8
+#define NFNL_SUBSYS_CTHELPER           9
+#define NFNL_SUBSYS_NFTABLES           10
+#define NFNL_SUBSYS_NFT_COMPAT         11
+#define NFNL_SUBSYS_COUNT              12
+
+/* Reserved control nfnetlink messages */
+#define NFNL_MSG_BATCH_BEGIN           NLMSG_MIN_TYPE
+#define NFNL_MSG_BATCH_END             NLMSG_MIN_TYPE+1
+
+#endif /* _NFNETLINK_H */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_acct.h b/lib/libdss-include/linux/netfilter/nfnetlink_acct.h
new file mode 100644 (file)
index 0000000..98b6286
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _NFNL_ACCT_H_
+#define _NFNL_ACCT_H_
+
+#ifndef NFACCT_NAME_MAX
+#define NFACCT_NAME_MAX                32
+#endif
+
+enum nfnl_acct_msg_types {
+       NFNL_MSG_ACCT_NEW,
+       NFNL_MSG_ACCT_GET,
+       NFNL_MSG_ACCT_GET_CTRZERO,
+       NFNL_MSG_ACCT_DEL,
+       NFNL_MSG_ACCT_OVERQUOTA,
+       NFNL_MSG_ACCT_MAX
+};
+
+enum nfnl_acct_flags {
+       NFACCT_F_QUOTA_PKTS     = (1 << 0),
+       NFACCT_F_QUOTA_BYTES    = (1 << 1),
+       NFACCT_F_OVERQUOTA      = (1 << 2), /* can't be set from userspace */
+};
+
+enum nfnl_acct_type {
+       NFACCT_UNSPEC,
+       NFACCT_NAME,
+       NFACCT_PKTS,
+       NFACCT_BYTES,
+       NFACCT_USE,
+       NFACCT_FLAGS,
+       NFACCT_QUOTA,
+       NFACCT_FILTER,
+       __NFACCT_MAX
+};
+#define NFACCT_MAX (__NFACCT_MAX - 1)
+
+enum nfnl_attr_filter_type {
+       NFACCT_FILTER_UNSPEC,
+       NFACCT_FILTER_MASK,
+       NFACCT_FILTER_VALUE,
+       __NFACCT_FILTER_MAX
+};
+#define NFACCT_FILTER_MAX (__NFACCT_FILTER_MAX - 1)
+
+#endif /* _NFNL_ACCT_H_ */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_compat.h b/lib/libdss-include/linux/netfilter/nfnetlink_compat.h
new file mode 100644 (file)
index 0000000..74b9e55
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _NFNETLINK_COMPAT_H
+#define _NFNETLINK_COMPAT_H
+
+#include <linux/types.h>
+
+/* Old nfnetlink macros for userspace */
+
+/* nfnetlink groups: Up to 32 maximum */
+#define NF_NETLINK_CONNTRACK_NEW               0x00000001
+#define NF_NETLINK_CONNTRACK_UPDATE            0x00000002
+#define NF_NETLINK_CONNTRACK_DESTROY           0x00000004
+#define NF_NETLINK_CONNTRACK_EXP_NEW           0x00000008
+#define NF_NETLINK_CONNTRACK_EXP_UPDATE                0x00000010
+#define NF_NETLINK_CONNTRACK_EXP_DESTROY       0x00000020
+
+/* Generic structure for encapsulation optional netfilter information.
+ * It is reminiscent of sockaddr, but with sa_family replaced
+ * with attribute type.
+ * ! This should someday be put somewhere generic as now rtnetlink and
+ * ! nfnetlink use the same attributes methods. - J. Schulist.
+ */
+
+struct nfattr {
+       __u16 nfa_len;
+       __u16 nfa_type; /* we use 15 bits for the type, and the highest
+                                * bit to indicate whether the payload is nested */
+};
+
+/* FIXME: Apart from NFNL_NFA_NESTED shamelessly copy and pasted from
+ * rtnetlink.h, it's time to put this in a generic file */
+
+#define NFNL_NFA_NEST  0x8000
+#define NFA_TYPE(attr)         ((attr)->nfa_type & 0x7fff)
+
+#define NFA_ALIGNTO     4
+#define NFA_ALIGN(len) (((len) + NFA_ALIGNTO - 1) & ~(NFA_ALIGNTO - 1))
+#define NFA_OK(nfa,len)        ((len) > 0 && (nfa)->nfa_len >= sizeof(struct nfattr) \
+       && (nfa)->nfa_len <= (len))
+#define NFA_NEXT(nfa,attrlen)  ((attrlen) -= NFA_ALIGN((nfa)->nfa_len), \
+       (struct nfattr *)(((char *)(nfa)) + NFA_ALIGN((nfa)->nfa_len)))
+#define NFA_LENGTH(len)        (NFA_ALIGN(sizeof(struct nfattr)) + (len))
+#define NFA_SPACE(len) NFA_ALIGN(NFA_LENGTH(len))
+#define NFA_DATA(nfa)   ((void *)(((char *)(nfa)) + NFA_LENGTH(0)))
+#define NFA_PAYLOAD(nfa) ((int)((nfa)->nfa_len) - NFA_LENGTH(0))
+#define NFA_NEST(skb, type) \
+({     struct nfattr *__start = (struct nfattr *)skb_tail_pointer(skb); \
+       NFA_PUT(skb, (NFNL_NFA_NEST | type), 0, NULL); \
+       __start;  })
+#define NFA_NEST_END(skb, start) \
+({      (start)->nfa_len = skb_tail_pointer(skb) - (unsigned char *)(start); \
+        (skb)->len; })
+#define NFA_NEST_CANCEL(skb, start) \
+({      if (start) \
+                skb_trim(skb, (unsigned char *) (start) - (skb)->data); \
+        -1; })
+
+#define NFM_NFA(n)      ((struct nfattr *)(((char *)(n)) \
+        + NLMSG_ALIGN(sizeof(struct nfgenmsg))))
+#define NFM_PAYLOAD(n)  NLMSG_PAYLOAD(n, sizeof(struct nfgenmsg))
+
+#endif /* _NFNETLINK_COMPAT_H */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_conntrack.h b/lib/libdss-include/linux/netfilter/nfnetlink_conntrack.h
new file mode 100644 (file)
index 0000000..c1a4e14
--- /dev/null
@@ -0,0 +1,264 @@
+#ifndef _IPCONNTRACK_NETLINK_H
+#define _IPCONNTRACK_NETLINK_H
+#include <linux/netfilter/nfnetlink.h>
+
+enum cntl_msg_types {
+       IPCTNL_MSG_CT_NEW,
+       IPCTNL_MSG_CT_GET,
+       IPCTNL_MSG_CT_DELETE,
+       IPCTNL_MSG_CT_GET_CTRZERO,
+       IPCTNL_MSG_CT_GET_STATS_CPU,
+       IPCTNL_MSG_CT_GET_STATS,
+       IPCTNL_MSG_CT_GET_DYING,
+       IPCTNL_MSG_CT_GET_UNCONFIRMED,
+
+       IPCTNL_MSG_MAX
+};
+
+enum ctnl_exp_msg_types {
+       IPCTNL_MSG_EXP_NEW,
+       IPCTNL_MSG_EXP_GET,
+       IPCTNL_MSG_EXP_DELETE,
+       IPCTNL_MSG_EXP_GET_STATS_CPU,
+
+       IPCTNL_MSG_EXP_MAX
+};
+
+
+enum ctattr_type {
+       CTA_UNSPEC,
+       CTA_TUPLE_ORIG,
+       CTA_TUPLE_REPLY,
+       CTA_STATUS,
+       CTA_PROTOINFO,
+       CTA_HELP,
+       CTA_NAT_SRC,
+#define CTA_NAT        CTA_NAT_SRC     /* backwards compatibility */
+       CTA_TIMEOUT,
+       CTA_MARK,
+       CTA_COUNTERS_ORIG,
+       CTA_COUNTERS_REPLY,
+       CTA_USE,
+       CTA_ID,
+       CTA_NAT_DST,
+       CTA_TUPLE_MASTER,
+       CTA_SEQ_ADJ_ORIG,
+       CTA_NAT_SEQ_ADJ_ORIG    = CTA_SEQ_ADJ_ORIG,
+       CTA_SEQ_ADJ_REPLY,
+       CTA_NAT_SEQ_ADJ_REPLY   = CTA_SEQ_ADJ_REPLY,
+       CTA_SECMARK,            /* obsolete */
+       CTA_ZONE,
+       CTA_SECCTX,
+       CTA_TIMESTAMP,
+       CTA_MARK_MASK,
+       CTA_LABELS,
+       CTA_LABELS_MASK,
+       __CTA_MAX
+};
+#define CTA_MAX (__CTA_MAX - 1)
+
+enum ctattr_tuple {
+       CTA_TUPLE_UNSPEC,
+       CTA_TUPLE_IP,
+       CTA_TUPLE_PROTO,
+       CTA_TUPLE_ZONE,
+       __CTA_TUPLE_MAX
+};
+#define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1)
+
+enum ctattr_ip {
+       CTA_IP_UNSPEC,
+       CTA_IP_V4_SRC,
+       CTA_IP_V4_DST,
+       CTA_IP_V6_SRC,
+       CTA_IP_V6_DST,
+       __CTA_IP_MAX
+};
+#define CTA_IP_MAX (__CTA_IP_MAX - 1)
+
+enum ctattr_l4proto {
+       CTA_PROTO_UNSPEC,
+       CTA_PROTO_NUM,
+       CTA_PROTO_SRC_PORT,
+       CTA_PROTO_DST_PORT,
+       CTA_PROTO_ICMP_ID,
+       CTA_PROTO_ICMP_TYPE,
+       CTA_PROTO_ICMP_CODE,
+       CTA_PROTO_ICMPV6_ID,
+       CTA_PROTO_ICMPV6_TYPE,
+       CTA_PROTO_ICMPV6_CODE,
+       __CTA_PROTO_MAX
+};
+#define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1)
+
+enum ctattr_protoinfo {
+       CTA_PROTOINFO_UNSPEC,
+       CTA_PROTOINFO_TCP,
+       CTA_PROTOINFO_DCCP,
+       CTA_PROTOINFO_SCTP,
+       __CTA_PROTOINFO_MAX
+};
+#define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
+
+enum ctattr_protoinfo_tcp {
+       CTA_PROTOINFO_TCP_UNSPEC,
+       CTA_PROTOINFO_TCP_STATE,
+       CTA_PROTOINFO_TCP_WSCALE_ORIGINAL,
+       CTA_PROTOINFO_TCP_WSCALE_REPLY,
+       CTA_PROTOINFO_TCP_FLAGS_ORIGINAL,
+       CTA_PROTOINFO_TCP_FLAGS_REPLY,
+       __CTA_PROTOINFO_TCP_MAX
+};
+#define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
+
+enum ctattr_protoinfo_dccp {
+       CTA_PROTOINFO_DCCP_UNSPEC,
+       CTA_PROTOINFO_DCCP_STATE,
+       CTA_PROTOINFO_DCCP_ROLE,
+       CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ,
+       __CTA_PROTOINFO_DCCP_MAX,
+};
+#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1)
+
+enum ctattr_protoinfo_sctp {
+       CTA_PROTOINFO_SCTP_UNSPEC,
+       CTA_PROTOINFO_SCTP_STATE,
+       CTA_PROTOINFO_SCTP_VTAG_ORIGINAL,
+       CTA_PROTOINFO_SCTP_VTAG_REPLY,
+       __CTA_PROTOINFO_SCTP_MAX
+};
+#define CTA_PROTOINFO_SCTP_MAX (__CTA_PROTOINFO_SCTP_MAX - 1)
+
+enum ctattr_counters {
+       CTA_COUNTERS_UNSPEC,
+       CTA_COUNTERS_PACKETS,           /* 64bit counters */
+       CTA_COUNTERS_BYTES,             /* 64bit counters */
+       CTA_COUNTERS32_PACKETS,         /* old 32bit counters, unused */
+       CTA_COUNTERS32_BYTES,           /* old 32bit counters, unused */
+       __CTA_COUNTERS_MAX
+};
+#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
+
+enum ctattr_tstamp {
+       CTA_TIMESTAMP_UNSPEC,
+       CTA_TIMESTAMP_START,
+       CTA_TIMESTAMP_STOP,
+       __CTA_TIMESTAMP_MAX
+};
+#define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1)
+
+enum ctattr_nat {
+       CTA_NAT_UNSPEC,
+       CTA_NAT_V4_MINIP,
+#define CTA_NAT_MINIP CTA_NAT_V4_MINIP
+       CTA_NAT_V4_MAXIP,
+#define CTA_NAT_MAXIP CTA_NAT_V4_MAXIP
+       CTA_NAT_PROTO,
+       CTA_NAT_V6_MINIP,
+       CTA_NAT_V6_MAXIP,
+       __CTA_NAT_MAX
+};
+#define CTA_NAT_MAX (__CTA_NAT_MAX - 1)
+
+enum ctattr_protonat {
+       CTA_PROTONAT_UNSPEC,
+       CTA_PROTONAT_PORT_MIN,
+       CTA_PROTONAT_PORT_MAX,
+       __CTA_PROTONAT_MAX
+};
+#define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1)
+
+enum ctattr_seqadj {
+       CTA_SEQADJ_UNSPEC,
+       CTA_SEQADJ_CORRECTION_POS,
+       CTA_SEQADJ_OFFSET_BEFORE,
+       CTA_SEQADJ_OFFSET_AFTER,
+       __CTA_SEQADJ_MAX
+};
+#define CTA_SEQADJ_MAX (__CTA_SEQADJ_MAX - 1)
+
+enum ctattr_natseq {
+       CTA_NAT_SEQ_UNSPEC,
+       CTA_NAT_SEQ_CORRECTION_POS,
+       CTA_NAT_SEQ_OFFSET_BEFORE,
+       CTA_NAT_SEQ_OFFSET_AFTER,
+       __CTA_NAT_SEQ_MAX
+};
+#define CTA_NAT_SEQ_MAX (__CTA_NAT_SEQ_MAX - 1)
+
+enum ctattr_expect {
+       CTA_EXPECT_UNSPEC,
+       CTA_EXPECT_MASTER,
+       CTA_EXPECT_TUPLE,
+       CTA_EXPECT_MASK,
+       CTA_EXPECT_TIMEOUT,
+       CTA_EXPECT_ID,
+       CTA_EXPECT_HELP_NAME,
+       CTA_EXPECT_ZONE,
+       CTA_EXPECT_FLAGS,
+       CTA_EXPECT_CLASS,
+       CTA_EXPECT_NAT,
+       CTA_EXPECT_FN,
+       __CTA_EXPECT_MAX
+};
+#define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1)
+
+enum ctattr_expect_nat {
+       CTA_EXPECT_NAT_UNSPEC,
+       CTA_EXPECT_NAT_DIR,
+       CTA_EXPECT_NAT_TUPLE,
+       __CTA_EXPECT_NAT_MAX
+};
+#define CTA_EXPECT_NAT_MAX (__CTA_EXPECT_NAT_MAX - 1)
+
+enum ctattr_help {
+       CTA_HELP_UNSPEC,
+       CTA_HELP_NAME,
+       CTA_HELP_INFO,
+       __CTA_HELP_MAX
+};
+#define CTA_HELP_MAX (__CTA_HELP_MAX - 1)
+
+enum ctattr_secctx {
+       CTA_SECCTX_UNSPEC,
+       CTA_SECCTX_NAME,
+       __CTA_SECCTX_MAX
+};
+#define CTA_SECCTX_MAX (__CTA_SECCTX_MAX - 1)
+
+enum ctattr_stats_cpu {
+       CTA_STATS_UNSPEC,
+       CTA_STATS_SEARCHED,
+       CTA_STATS_FOUND,
+       CTA_STATS_NEW,
+       CTA_STATS_INVALID,
+       CTA_STATS_IGNORE,
+       CTA_STATS_DELETE,
+       CTA_STATS_DELETE_LIST,
+       CTA_STATS_INSERT,
+       CTA_STATS_INSERT_FAILED,
+       CTA_STATS_DROP,
+       CTA_STATS_EARLY_DROP,
+       CTA_STATS_ERROR,
+       CTA_STATS_SEARCH_RESTART,
+       __CTA_STATS_MAX,
+};
+#define CTA_STATS_MAX (__CTA_STATS_MAX - 1)
+
+enum ctattr_stats_global {
+       CTA_STATS_GLOBAL_UNSPEC,
+       CTA_STATS_GLOBAL_ENTRIES,
+       __CTA_STATS_GLOBAL_MAX,
+};
+#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1)
+
+enum ctattr_expect_stats {
+       CTA_STATS_EXP_UNSPEC,
+       CTA_STATS_EXP_NEW,
+       CTA_STATS_EXP_CREATE,
+       CTA_STATS_EXP_DELETE,
+       __CTA_STATS_EXP_MAX,
+};
+#define CTA_STATS_EXP_MAX (__CTA_STATS_EXP_MAX - 1)
+
+#endif /* _IPCONNTRACK_NETLINK_H */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_cthelper.h b/lib/libdss-include/linux/netfilter/nfnetlink_cthelper.h
new file mode 100644 (file)
index 0000000..33659f6
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef _NFNL_CTHELPER_H_
+#define _NFNL_CTHELPER_H_
+
+#define NFCT_HELPER_STATUS_DISABLED    0
+#define NFCT_HELPER_STATUS_ENABLED     1
+
+enum nfnl_acct_msg_types {
+       NFNL_MSG_CTHELPER_NEW,
+       NFNL_MSG_CTHELPER_GET,
+       NFNL_MSG_CTHELPER_DEL,
+       NFNL_MSG_CTHELPER_MAX
+};
+
+enum nfnl_cthelper_type {
+       NFCTH_UNSPEC,
+       NFCTH_NAME,
+       NFCTH_TUPLE,
+       NFCTH_QUEUE_NUM,
+       NFCTH_POLICY,
+       NFCTH_PRIV_DATA_LEN,
+       NFCTH_STATUS,
+       __NFCTH_MAX
+};
+#define NFCTH_MAX (__NFCTH_MAX - 1)
+
+enum nfnl_cthelper_policy_type {
+       NFCTH_POLICY_SET_UNSPEC,
+       NFCTH_POLICY_SET_NUM,
+       NFCTH_POLICY_SET,
+       NFCTH_POLICY_SET1       = NFCTH_POLICY_SET,
+       NFCTH_POLICY_SET2,
+       NFCTH_POLICY_SET3,
+       NFCTH_POLICY_SET4,
+       __NFCTH_POLICY_SET_MAX
+};
+#define NFCTH_POLICY_SET_MAX (__NFCTH_POLICY_SET_MAX - 1)
+
+enum nfnl_cthelper_pol_type {
+       NFCTH_POLICY_UNSPEC,
+       NFCTH_POLICY_NAME,
+       NFCTH_POLICY_EXPECT_MAX,
+       NFCTH_POLICY_EXPECT_TIMEOUT,
+       __NFCTH_POLICY_MAX
+};
+#define NFCTH_POLICY_MAX (__NFCTH_POLICY_MAX - 1)
+
+enum nfnl_cthelper_tuple_type {
+       NFCTH_TUPLE_UNSPEC,
+       NFCTH_TUPLE_L3PROTONUM,
+       NFCTH_TUPLE_L4PROTONUM,
+       __NFCTH_TUPLE_MAX,
+};
+#define NFCTH_TUPLE_MAX (__NFCTH_TUPLE_MAX - 1)
+
+#endif /* _NFNL_CTHELPER_H */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_cttimeout.h b/lib/libdss-include/linux/netfilter/nfnetlink_cttimeout.h
new file mode 100644 (file)
index 0000000..f2c10dc
--- /dev/null
@@ -0,0 +1,118 @@
+#ifndef _CTTIMEOUT_NETLINK_H
+#define _CTTIMEOUT_NETLINK_H
+#include <linux/netfilter/nfnetlink.h>
+
+enum ctnl_timeout_msg_types {
+       IPCTNL_MSG_TIMEOUT_NEW,
+       IPCTNL_MSG_TIMEOUT_GET,
+       IPCTNL_MSG_TIMEOUT_DELETE,
+       IPCTNL_MSG_TIMEOUT_DEFAULT_SET,
+       IPCTNL_MSG_TIMEOUT_DEFAULT_GET,
+
+       IPCTNL_MSG_TIMEOUT_MAX
+};
+
+enum ctattr_timeout {
+       CTA_TIMEOUT_UNSPEC,
+       CTA_TIMEOUT_NAME,
+       CTA_TIMEOUT_L3PROTO,
+       CTA_TIMEOUT_L4PROTO,
+       CTA_TIMEOUT_DATA,
+       CTA_TIMEOUT_USE,
+       __CTA_TIMEOUT_MAX
+};
+#define CTA_TIMEOUT_MAX (__CTA_TIMEOUT_MAX - 1)
+
+enum ctattr_timeout_generic {
+       CTA_TIMEOUT_GENERIC_UNSPEC,
+       CTA_TIMEOUT_GENERIC_TIMEOUT,
+       __CTA_TIMEOUT_GENERIC_MAX
+};
+#define CTA_TIMEOUT_GENERIC_MAX (__CTA_TIMEOUT_GENERIC_MAX - 1)
+
+enum ctattr_timeout_tcp {
+       CTA_TIMEOUT_TCP_UNSPEC,
+       CTA_TIMEOUT_TCP_SYN_SENT,
+       CTA_TIMEOUT_TCP_SYN_RECV,
+       CTA_TIMEOUT_TCP_ESTABLISHED,
+       CTA_TIMEOUT_TCP_FIN_WAIT,
+       CTA_TIMEOUT_TCP_CLOSE_WAIT,
+       CTA_TIMEOUT_TCP_LAST_ACK,
+       CTA_TIMEOUT_TCP_TIME_WAIT,
+       CTA_TIMEOUT_TCP_CLOSE,
+       CTA_TIMEOUT_TCP_SYN_SENT2,
+       CTA_TIMEOUT_TCP_RETRANS,
+       CTA_TIMEOUT_TCP_UNACK,
+       __CTA_TIMEOUT_TCP_MAX
+};
+#define CTA_TIMEOUT_TCP_MAX (__CTA_TIMEOUT_TCP_MAX - 1)
+
+enum ctattr_timeout_udp {
+       CTA_TIMEOUT_UDP_UNSPEC,
+       CTA_TIMEOUT_UDP_UNREPLIED,
+       CTA_TIMEOUT_UDP_REPLIED,
+       __CTA_TIMEOUT_UDP_MAX
+};
+#define CTA_TIMEOUT_UDP_MAX (__CTA_TIMEOUT_UDP_MAX - 1)
+
+enum ctattr_timeout_udplite {
+       CTA_TIMEOUT_UDPLITE_UNSPEC,
+       CTA_TIMEOUT_UDPLITE_UNREPLIED,
+       CTA_TIMEOUT_UDPLITE_REPLIED,
+       __CTA_TIMEOUT_UDPLITE_MAX
+};
+#define CTA_TIMEOUT_UDPLITE_MAX (__CTA_TIMEOUT_UDPLITE_MAX - 1)
+
+enum ctattr_timeout_icmp {
+       CTA_TIMEOUT_ICMP_UNSPEC,
+       CTA_TIMEOUT_ICMP_TIMEOUT,
+       __CTA_TIMEOUT_ICMP_MAX
+};
+#define CTA_TIMEOUT_ICMP_MAX (__CTA_TIMEOUT_ICMP_MAX - 1)
+
+enum ctattr_timeout_dccp {
+       CTA_TIMEOUT_DCCP_UNSPEC,
+       CTA_TIMEOUT_DCCP_REQUEST,
+       CTA_TIMEOUT_DCCP_RESPOND,
+       CTA_TIMEOUT_DCCP_PARTOPEN,
+       CTA_TIMEOUT_DCCP_OPEN,
+       CTA_TIMEOUT_DCCP_CLOSEREQ,
+       CTA_TIMEOUT_DCCP_CLOSING,
+       CTA_TIMEOUT_DCCP_TIMEWAIT,
+       __CTA_TIMEOUT_DCCP_MAX
+};
+#define CTA_TIMEOUT_DCCP_MAX (__CTA_TIMEOUT_DCCP_MAX - 1)
+
+enum ctattr_timeout_sctp {
+       CTA_TIMEOUT_SCTP_UNSPEC,
+       CTA_TIMEOUT_SCTP_CLOSED,
+       CTA_TIMEOUT_SCTP_COOKIE_WAIT,
+       CTA_TIMEOUT_SCTP_COOKIE_ECHOED,
+       CTA_TIMEOUT_SCTP_ESTABLISHED,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_SENT,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_RECD,
+       CTA_TIMEOUT_SCTP_SHUTDOWN_ACK_SENT,
+       CTA_TIMEOUT_SCTP_HEARTBEAT_SENT,
+       CTA_TIMEOUT_SCTP_HEARTBEAT_ACKED,
+       __CTA_TIMEOUT_SCTP_MAX
+};
+#define CTA_TIMEOUT_SCTP_MAX (__CTA_TIMEOUT_SCTP_MAX - 1)
+
+enum ctattr_timeout_icmpv6 {
+       CTA_TIMEOUT_ICMPV6_UNSPEC,
+       CTA_TIMEOUT_ICMPV6_TIMEOUT,
+       __CTA_TIMEOUT_ICMPV6_MAX
+};
+#define CTA_TIMEOUT_ICMPV6_MAX (__CTA_TIMEOUT_ICMPV6_MAX - 1)
+
+enum ctattr_timeout_gre {
+       CTA_TIMEOUT_GRE_UNSPEC,
+       CTA_TIMEOUT_GRE_UNREPLIED,
+       CTA_TIMEOUT_GRE_REPLIED,
+       __CTA_TIMEOUT_GRE_MAX
+};
+#define CTA_TIMEOUT_GRE_MAX (__CTA_TIMEOUT_GRE_MAX - 1)
+
+#define CTNL_TIMEOUT_NAME_MAX  32
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_log.h b/lib/libdss-include/linux/netfilter/nfnetlink_log.h
new file mode 100644 (file)
index 0000000..fb21f0c
--- /dev/null
@@ -0,0 +1,100 @@
+#ifndef _NFNETLINK_LOG_H
+#define _NFNETLINK_LOG_H
+
+/* This file describes the netlink messages (i.e. 'protocol packets'),
+ * and not any kind of function definitions.  It is shared between kernel and
+ * userspace.  Don't put kernel specific stuff in here */
+
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink.h>
+
+enum nfulnl_msg_types {
+       NFULNL_MSG_PACKET,              /* packet from kernel to userspace */
+       NFULNL_MSG_CONFIG,              /* connect to a particular queue */
+
+       NFULNL_MSG_MAX
+};
+
+struct nfulnl_msg_packet_hdr {
+       __be16          hw_protocol;    /* hw protocol (network order) */
+       __u8    hook;           /* netfilter hook */
+       __u8    _pad;
+};
+
+struct nfulnl_msg_packet_hw {
+       __be16          hw_addrlen;
+       __u16   _pad;
+       __u8    hw_addr[8];
+};
+
+struct nfulnl_msg_packet_timestamp {
+       __aligned_be64  sec;
+       __aligned_be64  usec;
+};
+
+enum nfulnl_attr_type {
+       NFULA_UNSPEC,
+       NFULA_PACKET_HDR,
+       NFULA_MARK,                     /* __u32 nfmark */
+       NFULA_TIMESTAMP,                /* nfulnl_msg_packet_timestamp */
+       NFULA_IFINDEX_INDEV,            /* __u32 ifindex */
+       NFULA_IFINDEX_OUTDEV,           /* __u32 ifindex */
+       NFULA_IFINDEX_PHYSINDEV,        /* __u32 ifindex */
+       NFULA_IFINDEX_PHYSOUTDEV,       /* __u32 ifindex */
+       NFULA_HWADDR,                   /* nfulnl_msg_packet_hw */
+       NFULA_PAYLOAD,                  /* opaque data payload */
+       NFULA_PREFIX,                   /* string prefix */
+       NFULA_UID,                      /* user id of socket */
+       NFULA_SEQ,                      /* instance-local sequence number */
+       NFULA_SEQ_GLOBAL,               /* global sequence number */
+       NFULA_GID,                      /* group id of socket */
+       NFULA_HWTYPE,                   /* hardware type */
+       NFULA_HWHEADER,                 /* hardware header */
+       NFULA_HWLEN,                    /* hardware header length */
+       NFULA_CT,                       /* nf_conntrack_netlink.h */
+       NFULA_CT_INFO,                  /* enum ip_conntrack_info */
+
+       __NFULA_MAX
+};
+#define NFULA_MAX (__NFULA_MAX - 1)
+
+enum nfulnl_msg_config_cmds {
+       NFULNL_CFG_CMD_NONE,
+       NFULNL_CFG_CMD_BIND,
+       NFULNL_CFG_CMD_UNBIND,
+       NFULNL_CFG_CMD_PF_BIND,
+       NFULNL_CFG_CMD_PF_UNBIND,
+};
+
+struct nfulnl_msg_config_cmd {
+       __u8    command;        /* nfulnl_msg_config_cmds */
+} __attribute__ ((packed));
+
+struct nfulnl_msg_config_mode {
+       __be32          copy_range;
+       __u8    copy_mode;
+       __u8    _pad;
+} __attribute__ ((packed));
+
+enum nfulnl_attr_config {
+       NFULA_CFG_UNSPEC,
+       NFULA_CFG_CMD,                  /* nfulnl_msg_config_cmd */
+       NFULA_CFG_MODE,                 /* nfulnl_msg_config_mode */
+       NFULA_CFG_NLBUFSIZ,             /* __u32 buffer size */
+       NFULA_CFG_TIMEOUT,              /* __u32 in 1/100 s */
+       NFULA_CFG_QTHRESH,              /* __u32 */
+       NFULA_CFG_FLAGS,                /* __u16 */
+       __NFULA_CFG_MAX
+};
+#define NFULA_CFG_MAX (__NFULA_CFG_MAX -1)
+
+#define NFULNL_COPY_NONE       0x00
+#define NFULNL_COPY_META       0x01
+#define NFULNL_COPY_PACKET     0x02
+/* 0xff is reserved, don't use it for new copy modes. */
+
+#define NFULNL_CFG_F_SEQ       0x0001
+#define NFULNL_CFG_F_SEQ_GLOBAL        0x0002
+#define NFULNL_CFG_F_CONNTRACK 0x0004
+
+#endif /* _NFNETLINK_LOG_H */
diff --git a/lib/libdss-include/linux/netfilter/nfnetlink_queue.h b/lib/libdss-include/linux/netfilter/nfnetlink_queue.h
new file mode 100644 (file)
index 0000000..b67a853
--- /dev/null
@@ -0,0 +1,117 @@
+#ifndef _NFNETLINK_QUEUE_H
+#define _NFNETLINK_QUEUE_H
+
+#include <linux/types.h>
+#include <linux/netfilter/nfnetlink.h>
+
+enum nfqnl_msg_types {
+       NFQNL_MSG_PACKET,               /* packet from kernel to userspace */
+       NFQNL_MSG_VERDICT,              /* verdict from userspace to kernel */
+       NFQNL_MSG_CONFIG,               /* connect to a particular queue */
+       NFQNL_MSG_VERDICT_BATCH,        /* batchv from userspace to kernel */
+
+       NFQNL_MSG_MAX
+};
+
+struct nfqnl_msg_packet_hdr {
+       __be32          packet_id;      /* unique ID of packet in queue */
+       __be16          hw_protocol;    /* hw protocol (network order) */
+       __u8    hook;           /* netfilter hook */
+} __attribute__ ((packed));
+
+struct nfqnl_msg_packet_hw {
+       __be16          hw_addrlen;
+       __u16   _pad;
+       __u8    hw_addr[8];
+};
+
+struct nfqnl_msg_packet_timestamp {
+       __aligned_be64  sec;
+       __aligned_be64  usec;
+};
+
+enum nfqnl_attr_type {
+       NFQA_UNSPEC,
+       NFQA_PACKET_HDR,
+       NFQA_VERDICT_HDR,               /* nfqnl_msg_verdict_hrd */
+       NFQA_MARK,                      /* __u32 nfmark */
+       NFQA_TIMESTAMP,                 /* nfqnl_msg_packet_timestamp */
+       NFQA_IFINDEX_INDEV,             /* __u32 ifindex */
+       NFQA_IFINDEX_OUTDEV,            /* __u32 ifindex */
+       NFQA_IFINDEX_PHYSINDEV,         /* __u32 ifindex */
+       NFQA_IFINDEX_PHYSOUTDEV,        /* __u32 ifindex */
+       NFQA_HWADDR,                    /* nfqnl_msg_packet_hw */
+       NFQA_PAYLOAD,                   /* opaque data payload */
+       NFQA_CT,                        /* nf_conntrack_netlink.h */
+       NFQA_CT_INFO,                   /* enum ip_conntrack_info */
+       NFQA_CAP_LEN,                   /* __u32 length of captured packet */
+       NFQA_SKB_INFO,                  /* __u32 skb meta information */
+       NFQA_EXP,                       /* nf_conntrack_netlink.h */
+       NFQA_UID,                       /* __u32 sk uid */
+       NFQA_GID,                       /* __u32 sk gid */
+       NFQA_SECCTX,                    /* security context string */
+
+       __NFQA_MAX
+};
+#define NFQA_MAX (__NFQA_MAX - 1)
+
+struct nfqnl_msg_verdict_hdr {
+       __be32 verdict;
+       __be32 id;
+};
+
+
+enum nfqnl_msg_config_cmds {
+       NFQNL_CFG_CMD_NONE,
+       NFQNL_CFG_CMD_BIND,
+       NFQNL_CFG_CMD_UNBIND,
+       NFQNL_CFG_CMD_PF_BIND,
+       NFQNL_CFG_CMD_PF_UNBIND,
+};
+
+struct nfqnl_msg_config_cmd {
+       __u8    command;        /* nfqnl_msg_config_cmds */
+       __u8    _pad;
+       __be16          pf;             /* AF_xxx for PF_[UN]BIND */
+};
+
+enum nfqnl_config_mode {
+       NFQNL_COPY_NONE,
+       NFQNL_COPY_META,
+       NFQNL_COPY_PACKET,
+};
+
+struct nfqnl_msg_config_params {
+       __be32          copy_range;
+       __u8    copy_mode;      /* enum nfqnl_config_mode */
+} __attribute__ ((packed));
+
+
+enum nfqnl_attr_config {
+       NFQA_CFG_UNSPEC,
+       NFQA_CFG_CMD,                   /* nfqnl_msg_config_cmd */
+       NFQA_CFG_PARAMS,                /* nfqnl_msg_config_params */
+       NFQA_CFG_QUEUE_MAXLEN,          /* __u32 */
+       NFQA_CFG_MASK,                  /* identify which flags to change */
+       NFQA_CFG_FLAGS,                 /* value of these flags (__u32) */
+       __NFQA_CFG_MAX
+};
+#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1)
+
+/* Flags for NFQA_CFG_FLAGS */
+#define NFQA_CFG_F_FAIL_OPEN                   (1 << 0)
+#define NFQA_CFG_F_CONNTRACK                   (1 << 1)
+#define NFQA_CFG_F_GSO                         (1 << 2)
+#define NFQA_CFG_F_UID_GID                     (1 << 3)
+#define NFQA_CFG_F_SECCTX                      (1 << 4)
+#define NFQA_CFG_F_MAX                         (1 << 5)
+
+/* flags for NFQA_SKB_INFO */
+/* packet appears to have wrong checksums, but they are ok */
+#define NFQA_SKB_CSUMNOTREADY (1 << 0)
+/* packet is GSO (i.e., exceeds device mtu) */
+#define NFQA_SKB_GSO (1 << 1)
+/* csum not validated (incoming device doesn't support hw checksum, etc.) */
+#define NFQA_SKB_CSUM_NOTVERIFIED (1 << 2)
+
+#endif /* _NFNETLINK_QUEUE_H */
diff --git a/lib/libdss-include/linux/netfilter/x_tables.h b/lib/libdss-include/linux/netfilter/x_tables.h
new file mode 100644 (file)
index 0000000..4120970
--- /dev/null
@@ -0,0 +1,185 @@
+#ifndef _X_TABLES_H
+#define _X_TABLES_H
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+#define XT_FUNCTION_MAXNAMELEN 30
+#define XT_EXTENSION_MAXNAMELEN 29
+#define XT_TABLE_MAXNAMELEN 32
+
+struct xt_entry_match {
+       union {
+               struct {
+                       __u16 match_size;
+
+                       /* Used by userspace */
+                       char name[XT_EXTENSION_MAXNAMELEN];
+                       __u8 revision;
+               } user;
+               struct {
+                       __u16 match_size;
+
+                       /* Used inside the kernel */
+                       struct xt_match *match;
+               } kernel;
+
+               /* Total length */
+               __u16 match_size;
+       } u;
+
+       unsigned char data[0];
+};
+
+struct xt_entry_target {
+       union {
+               struct {
+                       __u16 target_size;
+
+                       /* Used by userspace */
+                       char name[XT_EXTENSION_MAXNAMELEN];
+                       __u8 revision;
+               } user;
+               struct {
+                       __u16 target_size;
+
+                       /* Used inside the kernel */
+                       struct xt_target *target;
+               } kernel;
+
+               /* Total length */
+               __u16 target_size;
+       } u;
+
+       unsigned char data[0];
+};
+
+#define XT_TARGET_INIT(__name, __size)                                        \
+{                                                                             \
+       .target.u.user = {                                                     \
+               .target_size    = XT_ALIGN(__size),                            \
+               .name           = __name,                                      \
+       },                                                                     \
+}
+
+struct xt_standard_target {
+       struct xt_entry_target target;
+       int verdict;
+};
+
+struct xt_error_target {
+       struct xt_entry_target target;
+       char errorname[XT_FUNCTION_MAXNAMELEN];
+};
+
+/* The argument to IPT_SO_GET_REVISION_*.  Returns highest revision
+ * kernel supports, if >= revision. */
+struct xt_get_revision {
+       char name[XT_EXTENSION_MAXNAMELEN];
+       __u8 revision;
+};
+
+/* CONTINUE verdict for targets */
+#define XT_CONTINUE 0xFFFFFFFF
+
+/* For standard target */
+#define XT_RETURN (-NF_REPEAT - 1)
+
+/* this is a dummy structure to find out the alignment requirement for a struct
+ * containing all the fundamental data types that are used in ipt_entry,
+ * ip6t_entry and arpt_entry.  This sucks, and it is a hack.  It will be my
+ * personal pleasure to remove it -HW
+ */
+struct _xt_align {
+       __u8 u8;
+       __u16 u16;
+       __u32 u32;
+       __u64 u64;
+};
+
+#define XT_ALIGN(s) __ALIGN_KERNEL((s), __alignof__(struct _xt_align))
+
+/* Standard return verdict, or do jump. */
+#define XT_STANDARD_TARGET ""
+/* Error verdict. */
+#define XT_ERROR_TARGET "ERROR"
+
+#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
+#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
+
+struct xt_counters {
+       __u64 pcnt, bcnt;                       /* Packet and byte counters */
+};
+
+/* The argument to IPT_SO_ADD_COUNTERS. */
+struct xt_counters_info {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       unsigned int num_counters;
+
+       /* The counters (actually `number' of these). */
+       struct xt_counters counters[0];
+};
+
+#define XT_INV_PROTO           0x40    /* Invert the sense of PROTO. */
+
+/* fn returns 0 to continue iteration */
+#define XT_MATCH_ITERATE(type, e, fn, args...)                 \
+({                                                             \
+       unsigned int __i;                                       \
+       int __ret = 0;                                          \
+       struct xt_entry_match *__m;                             \
+                                                               \
+       for (__i = sizeof(type);                                \
+            __i < (e)->target_offset;                          \
+            __i += __m->u.match_size) {                        \
+               __m = (void *)e + __i;                          \
+                                                               \
+               __ret = fn(__m , ## args);                      \
+               if (__ret != 0)                                 \
+                       break;                                  \
+       }                                                       \
+       __ret;                                                  \
+})
+
+/* fn returns 0 to continue iteration */
+#define XT_ENTRY_ITERATE_CONTINUE(type, entries, size, n, fn, args...) \
+({                                                             \
+       unsigned int __i, __n;                                  \
+       int __ret = 0;                                          \
+       type *__entry;                                          \
+                                                               \
+       for (__i = 0, __n = 0; __i < (size);                    \
+            __i += __entry->next_offset, __n++) {              \
+               __entry = (void *)(entries) + __i;              \
+               if (__n < n)                                    \
+                       continue;                               \
+                                                               \
+               __ret = fn(__entry , ## args);                  \
+               if (__ret != 0)                                 \
+                       break;                                  \
+       }                                                       \
+       __ret;                                                  \
+})
+
+/* fn returns 0 to continue iteration */
+#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \
+       XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args)
+
+
+/* pos is normally a struct ipt_entry/ip6t_entry/etc. */
+#define xt_entry_foreach(pos, ehead, esize) \
+       for ((pos) = (typeof(pos))(ehead); \
+            (pos) < (typeof(pos))((char *)(ehead) + (esize)); \
+            (pos) = (typeof(pos))((char *)(pos) + (pos)->next_offset))
+
+/* can only be xt_entry_match, so no use of typeof here */
+#define xt_ematch_foreach(pos, entry) \
+       for ((pos) = (struct xt_entry_match *)entry->elems; \
+            (pos) < (struct xt_entry_match *)((char *)(entry) + \
+                    (entry)->target_offset); \
+            (pos) = (struct xt_entry_match *)((char *)(pos) + \
+                    (pos)->u.match_size))
+
+
+#endif /* _X_TABLES_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_AUDIT.h b/lib/libdss-include/linux/netfilter/xt_AUDIT.h
new file mode 100644 (file)
index 0000000..38751d2
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Header file for iptables xt_AUDIT target
+ *
+ * (C) 2010-2011 Thomas Graf <tgraf@redhat.com>
+ * (C) 2010-2011 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _XT_AUDIT_TARGET_H
+#define _XT_AUDIT_TARGET_H
+
+#include <linux/types.h>
+
+enum {
+       XT_AUDIT_TYPE_ACCEPT = 0,
+       XT_AUDIT_TYPE_DROP,
+       XT_AUDIT_TYPE_REJECT,
+       __XT_AUDIT_TYPE_MAX,
+};
+
+#define XT_AUDIT_TYPE_MAX (__XT_AUDIT_TYPE_MAX - 1)
+
+struct xt_audit_info {
+       __u8 type; /* XT_AUDIT_TYPE_* */
+};
+
+#endif /* _XT_AUDIT_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_CHECKSUM.h b/lib/libdss-include/linux/netfilter/xt_CHECKSUM.h
new file mode 100644 (file)
index 0000000..9a2e466
--- /dev/null
@@ -0,0 +1,20 @@
+/* Header file for iptables ipt_CHECKSUM target
+ *
+ * (C) 2002 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2010 Red Hat Inc
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+*/
+#ifndef _XT_CHECKSUM_TARGET_H
+#define _XT_CHECKSUM_TARGET_H
+
+#include <linux/types.h>
+
+#define XT_CHECKSUM_OP_FILL    0x01    /* fill in checksum in IP header */
+
+struct xt_CHECKSUM_info {
+       __u8 operation; /* bitset of operations */
+};
+
+#endif /* _XT_CHECKSUM_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_CLASSIFY.h b/lib/libdss-include/linux/netfilter/xt_CLASSIFY.h
new file mode 100644 (file)
index 0000000..a813bf1
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _XT_CLASSIFY_H
+#define _XT_CLASSIFY_H
+
+#include <linux/types.h>
+
+struct xt_classify_target_info {
+       __u32 priority;
+};
+
+#endif /*_XT_CLASSIFY_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_CONNMARK.h b/lib/libdss-include/linux/netfilter/xt_CONNMARK.h
new file mode 100644 (file)
index 0000000..2f2e48e
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _XT_CONNMARK_H_target
+#define _XT_CONNMARK_H_target
+
+#include <linux/netfilter/xt_connmark.h>
+
+#endif /*_XT_CONNMARK_H_target*/
diff --git a/lib/libdss-include/linux/netfilter/xt_CONNSECMARK.h b/lib/libdss-include/linux/netfilter/xt_CONNSECMARK.h
new file mode 100644 (file)
index 0000000..b973ff8
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_CONNSECMARK_H_target
+#define _XT_CONNSECMARK_H_target
+
+#include <linux/types.h>
+
+enum {
+       CONNSECMARK_SAVE = 1,
+       CONNSECMARK_RESTORE,
+};
+
+struct xt_connsecmark_target_info {
+       __u8 mode;
+};
+
+#endif /*_XT_CONNSECMARK_H_target */
diff --git a/lib/libdss-include/linux/netfilter/xt_CT.h b/lib/libdss-include/linux/netfilter/xt_CT.h
new file mode 100644 (file)
index 0000000..9e52041
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _XT_CT_H
+#define _XT_CT_H
+
+#include <linux/types.h>
+
+enum {
+       XT_CT_NOTRACK           = 1 << 0,
+       XT_CT_NOTRACK_ALIAS     = 1 << 1,
+       XT_CT_ZONE_DIR_ORIG     = 1 << 2,
+       XT_CT_ZONE_DIR_REPL     = 1 << 3,
+       XT_CT_ZONE_MARK         = 1 << 4,
+
+       XT_CT_MASK              = XT_CT_NOTRACK | XT_CT_NOTRACK_ALIAS |
+                                 XT_CT_ZONE_DIR_ORIG | XT_CT_ZONE_DIR_REPL |
+                                 XT_CT_ZONE_MARK,
+};
+
+struct xt_ct_target_info {
+       __u16 flags;
+       __u16 zone;
+       __u32 ct_events;
+       __u32 exp_events;
+       char helper[16];
+
+       /* Used internally by the kernel */
+       struct nf_conn  *ct __attribute__((aligned(8)));
+};
+
+struct xt_ct_target_info_v1 {
+       __u16 flags;
+       __u16 zone;
+       __u32 ct_events;
+       __u32 exp_events;
+       char helper[16];
+       char timeout[32];
+
+       /* Used internally by the kernel */
+       struct nf_conn  *ct __attribute__((aligned(8)));
+};
+
+#endif /* _XT_CT_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_DSCP.h b/lib/libdss-include/linux/netfilter/xt_DSCP.h
new file mode 100644 (file)
index 0000000..648e0b3
--- /dev/null
@@ -0,0 +1,26 @@
+/* x_tables module for setting the IPv4/IPv6 DSCP field
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
+ * This software is distributed under GNU GPL v2, 1991
+ *
+ * See RFC2474 for a description of the DSCP field within the IP Header.
+ *
+ * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
+*/
+#ifndef _XT_DSCP_TARGET_H
+#define _XT_DSCP_TARGET_H
+#include <linux/netfilter/xt_dscp.h>
+#include <linux/types.h>
+
+/* target info */
+struct xt_DSCP_info {
+       __u8 dscp;
+};
+
+struct xt_tos_target_info {
+       __u8 tos_value;
+       __u8 tos_mask;
+};
+
+#endif /* _XT_DSCP_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_HMARK.h b/lib/libdss-include/linux/netfilter/xt_HMARK.h
new file mode 100644 (file)
index 0000000..826fc58
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef XT_HMARK_H_
+#define XT_HMARK_H_
+
+#include <linux/types.h>
+
+enum {
+       XT_HMARK_SADDR_MASK,
+       XT_HMARK_DADDR_MASK,
+       XT_HMARK_SPI,
+       XT_HMARK_SPI_MASK,
+       XT_HMARK_SPORT,
+       XT_HMARK_DPORT,
+       XT_HMARK_SPORT_MASK,
+       XT_HMARK_DPORT_MASK,
+       XT_HMARK_PROTO_MASK,
+       XT_HMARK_RND,
+       XT_HMARK_MODULUS,
+       XT_HMARK_OFFSET,
+       XT_HMARK_CT,
+       XT_HMARK_METHOD_L3,
+       XT_HMARK_METHOD_L3_4,
+};
+#define XT_HMARK_FLAG(flag)    (1 << flag)
+
+union hmark_ports {
+       struct {
+               __u16   src;
+               __u16   dst;
+       } p16;
+       struct {
+               __be16  src;
+               __be16  dst;
+       } b16;
+       __u32   v32;
+       __be32  b32;
+};
+
+struct xt_hmark_info {
+       union nf_inet_addr      src_mask;
+       union nf_inet_addr      dst_mask;
+       union hmark_ports       port_mask;
+       union hmark_ports       port_set;
+       __u32                   flags;
+       __u16                   proto_mask;
+       __u32                   hashrnd;
+       __u32                   hmodulus;
+       __u32                   hoffset;        /* Mark offset to start from */
+};
+
+#endif /* XT_HMARK_H_ */
diff --git a/lib/libdss-include/linux/netfilter/xt_IDLETIMER.h b/lib/libdss-include/linux/netfilter/xt_IDLETIMER.h
new file mode 100644 (file)
index 0000000..208ae93
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * linux/include/linux/netfilter/xt_IDLETIMER.h
+ *
+ * Header file for Xtables timer target module.
+ *
+ * Copyright (C) 2004, 2010 Nokia Corporation
+ * Written by Timo Teras <ext-timo.teras@nokia.com>
+ *
+ * Converted to x_tables and forward-ported to 2.6.34
+ * by Luciano Coelho <luciano.coelho@nokia.com>
+ *
+ * Contact: Luciano Coelho <luciano.coelho@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _XT_IDLETIMER_H
+#define _XT_IDLETIMER_H
+
+#include <linux/types.h>
+
+#define MAX_IDLETIMER_LABEL_SIZE 28
+
+struct idletimer_tg_info {
+       __u32 timeout;
+
+       char label[MAX_IDLETIMER_LABEL_SIZE];
+
+       /* for kernel module internal use only */
+       struct idletimer_tg *timer __attribute__((aligned(8)));
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/xt_LED.h b/lib/libdss-include/linux/netfilter/xt_LED.h
new file mode 100644 (file)
index 0000000..f5509e7
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_LED_H
+#define _XT_LED_H
+
+#include <linux/types.h>
+
+struct xt_led_info {
+       char id[27];        /* Unique ID for this trigger in the LED class */
+       __u8 always_blink;  /* Blink even if the LED is already on */
+       __u32 delay;        /* Delay until LED is switched off after trigger */
+
+       /* Kernel data used in the module */
+       void *internal_data __attribute__((aligned(8)));
+};
+
+#endif /* _XT_LED_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_LOG.h b/lib/libdss-include/linux/netfilter/xt_LOG.h
new file mode 100644 (file)
index 0000000..cac0790
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_LOG_H
+#define _XT_LOG_H
+
+/* make sure not to change this without changing nf_log.h:NF_LOG_* (!) */
+#define XT_LOG_TCPSEQ          0x01    /* Log TCP sequence numbers */
+#define XT_LOG_TCPOPT          0x02    /* Log TCP options */
+#define XT_LOG_IPOPT           0x04    /* Log IP options */
+#define XT_LOG_UID             0x08    /* Log UID owning local socket */
+#define XT_LOG_NFLOG           0x10    /* Unsupported, don't reuse */
+#define XT_LOG_MACDECODE       0x20    /* Decode MAC header */
+#define XT_LOG_MASK            0x2f
+
+struct xt_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /* _XT_LOG_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_MARK.h b/lib/libdss-include/linux/netfilter/xt_MARK.h
new file mode 100644 (file)
index 0000000..41c456d
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _XT_MARK_H_target
+#define _XT_MARK_H_target
+
+#include <linux/netfilter/xt_mark.h>
+
+#endif /*_XT_MARK_H_target */
diff --git a/lib/libdss-include/linux/netfilter/xt_NFLOG.h b/lib/libdss-include/linux/netfilter/xt_NFLOG.h
new file mode 100644 (file)
index 0000000..87b5831
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _XT_NFLOG_TARGET
+#define _XT_NFLOG_TARGET
+
+#include <linux/types.h>
+
+#define XT_NFLOG_DEFAULT_GROUP         0x1
+#define XT_NFLOG_DEFAULT_THRESHOLD     0
+
+#define XT_NFLOG_MASK                  0x0
+
+struct xt_nflog_info {
+       __u32   len;
+       __u16   group;
+       __u16   threshold;
+       __u16   flags;
+       __u16   pad;
+       char            prefix[64];
+};
+
+#endif /* _XT_NFLOG_TARGET */
diff --git a/lib/libdss-include/linux/netfilter/xt_NFQUEUE.h b/lib/libdss-include/linux/netfilter/xt_NFQUEUE.h
new file mode 100644 (file)
index 0000000..8bb5fe6
--- /dev/null
@@ -0,0 +1,38 @@
+/* iptables module for using NFQUEUE mechanism
+ *
+ * (C) 2005 Harald Welte <laforge@netfilter.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+*/
+#ifndef _XT_NFQ_TARGET_H
+#define _XT_NFQ_TARGET_H
+
+#include <linux/types.h>
+
+/* target info */
+struct xt_NFQ_info {
+       __u16 queuenum;
+};
+
+struct xt_NFQ_info_v1 {
+       __u16 queuenum;
+       __u16 queues_total;
+};
+
+struct xt_NFQ_info_v2 {
+       __u16 queuenum;
+       __u16 queues_total;
+       __u16 bypass;
+};
+
+struct xt_NFQ_info_v3 {
+       __u16 queuenum;
+       __u16 queues_total;
+       __u16 flags;
+#define NFQ_FLAG_BYPASS                0x01 /* for compatibility with v2 */
+#define NFQ_FLAG_CPU_FANOUT    0x02 /* use current CPU (no hashing) */
+#define NFQ_FLAG_MASK          0x03
+};
+
+#endif /* _XT_NFQ_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_RATEEST.h b/lib/libdss-include/linux/netfilter/xt_RATEEST.h
new file mode 100644 (file)
index 0000000..6605e20
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_RATEEST_TARGET_H
+#define _XT_RATEEST_TARGET_H
+
+#include <linux/types.h>
+
+struct xt_rateest_target_info {
+       char                    name[IFNAMSIZ];
+       __s8                    interval;
+       __u8            ewma_log;
+
+       /* Used internally by the kernel */
+       struct xt_rateest       *est __attribute__((aligned(8)));
+};
+
+#endif /* _XT_RATEEST_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_SECMARK.h b/lib/libdss-include/linux/netfilter/xt_SECMARK.h
new file mode 100644 (file)
index 0000000..989092b
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _XT_SECMARK_H_target
+#define _XT_SECMARK_H_target
+
+#include <linux/types.h>
+
+/*
+ * This is intended for use by various security subsystems (but not
+ * at the same time).
+ *
+ * 'mode' refers to the specific security subsystem which the
+ * packets are being marked for.
+ */
+#define SECMARK_MODE_SEL       0x01            /* SELinux */
+#define SECMARK_SECCTX_MAX     256
+
+struct xt_secmark_target_info {
+       __u8 mode;
+       __u32 secid;
+       char secctx[SECMARK_SECCTX_MAX];
+};
+
+#endif /*_XT_SECMARK_H_target */
diff --git a/lib/libdss-include/linux/netfilter/xt_TCPMSS.h b/lib/libdss-include/linux/netfilter/xt_TCPMSS.h
new file mode 100644 (file)
index 0000000..9a6960a
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_TCPMSS_H
+#define _XT_TCPMSS_H
+
+#include <linux/types.h>
+
+struct xt_tcpmss_info {
+       __u16 mss;
+};
+
+#define XT_TCPMSS_CLAMP_PMTU 0xffff
+
+#endif /* _XT_TCPMSS_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_TCPOPTSTRIP.h b/lib/libdss-include/linux/netfilter/xt_TCPOPTSTRIP.h
new file mode 100644 (file)
index 0000000..7157318
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_TCPOPTSTRIP_H
+#define _XT_TCPOPTSTRIP_H
+
+#include <linux/types.h>
+
+#define tcpoptstrip_set_bit(bmap, idx) \
+       (bmap[(idx) >> 5] |= 1U << (idx & 31))
+#define tcpoptstrip_test_bit(bmap, idx) \
+       (((1U << (idx & 31)) & bmap[(idx) >> 5]) != 0)
+
+struct xt_tcpoptstrip_target_info {
+       __u32 strip_bmap[8];
+};
+
+#endif /* _XT_TCPOPTSTRIP_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_TEE.h b/lib/libdss-include/linux/netfilter/xt_TEE.h
new file mode 100644 (file)
index 0000000..5c21d5c
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_TEE_TARGET_H
+#define _XT_TEE_TARGET_H
+
+struct xt_tee_tginfo {
+       union nf_inet_addr gw;
+       char oif[16];
+
+       /* used internally by the kernel */
+       struct xt_tee_priv *priv __attribute__((aligned(8)));
+};
+
+#endif /* _XT_TEE_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_TPROXY.h b/lib/libdss-include/linux/netfilter/xt_TPROXY.h
new file mode 100644 (file)
index 0000000..902043c
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _XT_TPROXY_H
+#define _XT_TPROXY_H
+
+#include <linux/types.h>
+
+/* TPROXY target is capable of marking the packet to perform
+ * redirection. We can get rid of that whenever we get support for
+ * mutliple targets in the same rule. */
+struct xt_tproxy_target_info {
+       __u32 mark_mask;
+       __u32 mark_value;
+       __be32 laddr;
+       __be16 lport;
+};
+
+struct xt_tproxy_target_info_v1 {
+       __u32 mark_mask;
+       __u32 mark_value;
+       union nf_inet_addr laddr;
+       __be16 lport;
+};
+
+#endif /* _XT_TPROXY_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_addrtype.h b/lib/libdss-include/linux/netfilter/xt_addrtype.h
new file mode 100644 (file)
index 0000000..b156baa
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _XT_ADDRTYPE_H
+#define _XT_ADDRTYPE_H
+
+#include <linux/types.h>
+
+enum {
+       XT_ADDRTYPE_INVERT_SOURCE       = 0x0001,
+       XT_ADDRTYPE_INVERT_DEST         = 0x0002,
+       XT_ADDRTYPE_LIMIT_IFACE_IN      = 0x0004,
+       XT_ADDRTYPE_LIMIT_IFACE_OUT     = 0x0008,
+};
+
+
+/* rtn_type enum values from rtnetlink.h, but shifted */
+enum {
+       XT_ADDRTYPE_UNSPEC = 1 << 0,
+       XT_ADDRTYPE_UNICAST = 1 << 1,   /* 1 << RTN_UNICAST */
+       XT_ADDRTYPE_LOCAL  = 1 << 2,    /* 1 << RTN_LOCAL, etc */
+       XT_ADDRTYPE_BROADCAST = 1 << 3,
+       XT_ADDRTYPE_ANYCAST = 1 << 4,
+       XT_ADDRTYPE_MULTICAST = 1 << 5,
+       XT_ADDRTYPE_BLACKHOLE = 1 << 6,
+       XT_ADDRTYPE_UNREACHABLE = 1 << 7,
+       XT_ADDRTYPE_PROHIBIT = 1 << 8,
+       XT_ADDRTYPE_THROW = 1 << 9,
+       XT_ADDRTYPE_NAT = 1 << 10,
+       XT_ADDRTYPE_XRESOLVE = 1 << 11,
+};
+
+struct xt_addrtype_info_v1 {
+       __u16   source;         /* source-type mask */
+       __u16   dest;           /* dest-type mask */
+       __u32   flags;
+};
+
+/* revision 0 */
+struct xt_addrtype_info {
+       __u16   source;         /* source-type mask */
+       __u16   dest;           /* dest-type mask */
+       __u32   invert_source;
+       __u32   invert_dest;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/xt_bpf.h b/lib/libdss-include/linux/netfilter/xt_bpf.h
new file mode 100644 (file)
index 0000000..1fad2c2
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_BPF_H
+#define _XT_BPF_H
+
+#include <linux/filter.h>
+#include <linux/types.h>
+
+#define XT_BPF_MAX_NUM_INSTR   64
+
+struct bpf_prog;
+
+struct xt_bpf_info {
+       __u16 bpf_program_num_elem;
+       struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
+
+       /* only used in the kernel */
+       struct bpf_prog *filter __attribute__((aligned(8)));
+};
+
+#endif /*_XT_BPF_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_cgroup.h b/lib/libdss-include/linux/netfilter/xt_cgroup.h
new file mode 100644 (file)
index 0000000..943d3a0
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_CGROUP_H
+#define _XT_CGROUP_H
+
+#include <linux/types.h>
+
+struct xt_cgroup_info {
+       __u32 id;
+       __u32 invert;
+};
+
+#endif /* _XT_CGROUP_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_cluster.h b/lib/libdss-include/linux/netfilter/xt_cluster.h
new file mode 100644 (file)
index 0000000..9b883c8
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _XT_CLUSTER_MATCH_H
+#define _XT_CLUSTER_MATCH_H
+
+#include <linux/types.h>
+
+enum xt_cluster_flags {
+       XT_CLUSTER_F_INV        = (1 << 0)
+};
+
+struct xt_cluster_match_info {
+       __u32 total_nodes;
+       __u32 node_mask;
+       __u32 hash_seed;
+       __u32 flags;
+};
+
+#define XT_CLUSTER_NODES_MAX   32
+
+#endif /* _XT_CLUSTER_MATCH_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_comment.h b/lib/libdss-include/linux/netfilter/xt_comment.h
new file mode 100644 (file)
index 0000000..0ea5e79
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _XT_COMMENT_H
+#define _XT_COMMENT_H
+
+#define XT_MAX_COMMENT_LEN 256
+
+struct xt_comment_info {
+       char comment[XT_MAX_COMMENT_LEN];
+};
+
+#endif /* XT_COMMENT_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_connbytes.h b/lib/libdss-include/linux/netfilter/xt_connbytes.h
new file mode 100644 (file)
index 0000000..f1d6c15
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _XT_CONNBYTES_H
+#define _XT_CONNBYTES_H
+
+#include <linux/types.h>
+
+enum xt_connbytes_what {
+       XT_CONNBYTES_PKTS,
+       XT_CONNBYTES_BYTES,
+       XT_CONNBYTES_AVGPKT,
+};
+
+enum xt_connbytes_direction {
+       XT_CONNBYTES_DIR_ORIGINAL,
+       XT_CONNBYTES_DIR_REPLY,
+       XT_CONNBYTES_DIR_BOTH,
+};
+
+struct xt_connbytes_info {
+       struct {
+               __aligned_u64 from;     /* count to be matched */
+               __aligned_u64 to;       /* count to be matched */
+       } count;
+       __u8 what;              /* ipt_connbytes_what */
+       __u8 direction; /* ipt_connbytes_direction */
+};
+#endif
diff --git a/lib/libdss-include/linux/netfilter/xt_connlabel.h b/lib/libdss-include/linux/netfilter/xt_connlabel.h
new file mode 100644 (file)
index 0000000..c4bc9ee
--- /dev/null
@@ -0,0 +1,12 @@
+#include <linux/types.h>
+
+#define XT_CONNLABEL_MAXBIT 127
+enum xt_connlabel_mtopts {
+       XT_CONNLABEL_OP_INVERT = 1 << 0,
+       XT_CONNLABEL_OP_SET    = 1 << 1,
+};
+
+struct xt_connlabel_mtinfo {
+       __u16 bit;
+       __u16 options;
+};
diff --git a/lib/libdss-include/linux/netfilter/xt_connlimit.h b/lib/libdss-include/linux/netfilter/xt_connlimit.h
new file mode 100644 (file)
index 0000000..cdcc117
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _XT_CONNLIMIT_H
+#define _XT_CONNLIMIT_H
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+struct xt_connlimit_data;
+
+enum {
+       XT_CONNLIMIT_INVERT = 1 << 0,
+       XT_CONNLIMIT_DADDR  = 1 << 1,
+};
+
+struct xt_connlimit_info {
+       union {
+               union nf_inet_addr mask;
+               union {
+                       __be32 v4_mask;
+                       __be32 v6_mask[4];
+               };
+       };
+       unsigned int limit;
+       /* revision 1 */
+       __u32 flags;
+
+       /* Used internally by the kernel */
+       struct xt_connlimit_data *data __attribute__((aligned(8)));
+};
+
+#endif /* _XT_CONNLIMIT_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_connmark.h b/lib/libdss-include/linux/netfilter/xt_connmark.h
new file mode 100644 (file)
index 0000000..efc17a8
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _XT_CONNMARK_H
+#define _XT_CONNMARK_H
+
+#include <linux/types.h>
+
+/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
+ * by Henrik Nordstrom <hno@marasystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+enum {
+       XT_CONNMARK_SET = 0,
+       XT_CONNMARK_SAVE,
+       XT_CONNMARK_RESTORE
+};
+
+struct xt_connmark_tginfo1 {
+       __u32 ctmark, ctmask, nfmask;
+       __u8 mode;
+};
+
+struct xt_connmark_mtinfo1 {
+       __u32 mark, mask;
+       __u8 invert;
+};
+
+#endif /*_XT_CONNMARK_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_conntrack.h b/lib/libdss-include/linux/netfilter/xt_conntrack.h
new file mode 100644 (file)
index 0000000..e5bd308
--- /dev/null
@@ -0,0 +1,78 @@
+/* Header file for kernel module to match connection tracking information.
+ * GPL (C) 2001  Marc Boucher (marc@mbsi.ca).
+ */
+
+#ifndef _XT_CONNTRACK_H
+#define _XT_CONNTRACK_H
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+#include <linux/netfilter/nf_conntrack_tuple_common.h>
+
+#define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
+#define XT_CONNTRACK_STATE_INVALID (1 << 0)
+
+#define XT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1))
+#define XT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2))
+#define XT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3))
+
+/* flags, invflags: */
+enum {
+       XT_CONNTRACK_STATE        = 1 << 0,
+       XT_CONNTRACK_PROTO        = 1 << 1,
+       XT_CONNTRACK_ORIGSRC      = 1 << 2,
+       XT_CONNTRACK_ORIGDST      = 1 << 3,
+       XT_CONNTRACK_REPLSRC      = 1 << 4,
+       XT_CONNTRACK_REPLDST      = 1 << 5,
+       XT_CONNTRACK_STATUS       = 1 << 6,
+       XT_CONNTRACK_EXPIRES      = 1 << 7,
+       XT_CONNTRACK_ORIGSRC_PORT = 1 << 8,
+       XT_CONNTRACK_ORIGDST_PORT = 1 << 9,
+       XT_CONNTRACK_REPLSRC_PORT = 1 << 10,
+       XT_CONNTRACK_REPLDST_PORT = 1 << 11,
+       XT_CONNTRACK_DIRECTION    = 1 << 12,
+       XT_CONNTRACK_STATE_ALIAS  = 1 << 13,
+};
+
+struct xt_conntrack_mtinfo1 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __be16 origsrc_port, origdst_port;
+       __be16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u8 state_mask, status_mask;
+};
+
+struct xt_conntrack_mtinfo2 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __be16 origsrc_port, origdst_port;
+       __be16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u16 state_mask, status_mask;
+};
+
+struct xt_conntrack_mtinfo3 {
+       union nf_inet_addr origsrc_addr, origsrc_mask;
+       union nf_inet_addr origdst_addr, origdst_mask;
+       union nf_inet_addr replsrc_addr, replsrc_mask;
+       union nf_inet_addr repldst_addr, repldst_mask;
+       __u32 expires_min, expires_max;
+       __u16 l4proto;
+       __u16 origsrc_port, origdst_port;
+       __u16 replsrc_port, repldst_port;
+       __u16 match_flags, invert_flags;
+       __u16 state_mask, status_mask;
+       __u16 origsrc_port_high, origdst_port_high;
+       __u16 replsrc_port_high, repldst_port_high;
+};
+
+#endif /*_XT_CONNTRACK_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_cpu.h b/lib/libdss-include/linux/netfilter/xt_cpu.h
new file mode 100644 (file)
index 0000000..93c7f11
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_CPU_H
+#define _XT_CPU_H
+
+#include <linux/types.h>
+
+struct xt_cpu_info {
+       __u32   cpu;
+       __u32   invert;
+};
+
+#endif /*_XT_CPU_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_dccp.h b/lib/libdss-include/linux/netfilter/xt_dccp.h
new file mode 100644 (file)
index 0000000..a579e1b
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _XT_DCCP_H_
+#define _XT_DCCP_H_
+
+#include <linux/types.h>
+
+#define XT_DCCP_SRC_PORTS              0x01
+#define XT_DCCP_DEST_PORTS             0x02
+#define XT_DCCP_TYPE                   0x04
+#define XT_DCCP_OPTION                 0x08
+
+#define XT_DCCP_VALID_FLAGS            0x0f
+
+struct xt_dccp_info {
+       __u16 dpts[2];  /* Min, Max */
+       __u16 spts[2];  /* Min, Max */
+
+       __u16 flags;
+       __u16 invflags;
+
+       __u16 typemask;
+       __u8 option;
+};
+
+#endif /* _XT_DCCP_H_ */
+
diff --git a/lib/libdss-include/linux/netfilter/xt_devgroup.h b/lib/libdss-include/linux/netfilter/xt_devgroup.h
new file mode 100644 (file)
index 0000000..1babde0
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _XT_DEVGROUP_H
+#define _XT_DEVGROUP_H
+
+#include <linux/types.h>
+
+enum xt_devgroup_flags {
+       XT_DEVGROUP_MATCH_SRC   = 0x1,
+       XT_DEVGROUP_INVERT_SRC  = 0x2,
+       XT_DEVGROUP_MATCH_DST   = 0x4,
+       XT_DEVGROUP_INVERT_DST  = 0x8,
+};
+
+struct xt_devgroup_info {
+       __u32   flags;
+       __u32   src_group;
+       __u32   src_mask;
+       __u32   dst_group;
+       __u32   dst_mask;
+};
+
+#endif /* _XT_DEVGROUP_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_dscp.h b/lib/libdss-include/linux/netfilter/xt_dscp.h
new file mode 100644 (file)
index 0000000..15f8932
--- /dev/null
@@ -0,0 +1,31 @@
+/* x_tables module for matching the IPv4/IPv6 DSCP field
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ * This software is distributed under GNU GPL v2, 1991
+ *
+ * See RFC2474 for a description of the DSCP field within the IP Header.
+ *
+ * xt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp
+*/
+#ifndef _XT_DSCP_H
+#define _XT_DSCP_H
+
+#include <linux/types.h>
+
+#define XT_DSCP_MASK   0xfc    /* 11111100 */
+#define XT_DSCP_SHIFT  2
+#define XT_DSCP_MAX    0x3f    /* 00111111 */
+
+/* match info */
+struct xt_dscp_info {
+       __u8 dscp;
+       __u8 invert;
+};
+
+struct xt_tos_match_info {
+       __u8 tos_mask;
+       __u8 tos_value;
+       __u8 invert;
+};
+
+#endif /* _XT_DSCP_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_ecn.h b/lib/libdss-include/linux/netfilter/xt_ecn.h
new file mode 100644 (file)
index 0000000..7158fca
--- /dev/null
@@ -0,0 +1,35 @@
+/* iptables module for matching the ECN header in IPv4 and TCP header
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+ * ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
+*/
+#ifndef _XT_ECN_H
+#define _XT_ECN_H
+
+#include <linux/types.h>
+#include <linux/netfilter/xt_dscp.h>
+
+#define XT_ECN_IP_MASK (~XT_DSCP_MASK)
+
+#define XT_ECN_OP_MATCH_IP     0x01
+#define XT_ECN_OP_MATCH_ECE    0x10
+#define XT_ECN_OP_MATCH_CWR    0x20
+
+#define XT_ECN_OP_MATCH_MASK   0xce
+
+/* match info */
+struct xt_ecn_info {
+       __u8 operation;
+       __u8 invert;
+       __u8 ip_ect;
+       union {
+               struct {
+                       __u8 ect;
+               } tcp;
+       } proto;
+};
+
+#endif /* _XT_ECN_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_esp.h b/lib/libdss-include/linux/netfilter/xt_esp.h
new file mode 100644 (file)
index 0000000..ee68824
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_ESP_H
+#define _XT_ESP_H
+
+#include <linux/types.h>
+
+struct xt_esp {
+       __u32 spis[2];  /* Security Parameter Index */
+       __u8  invflags; /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct xt_esp. */
+#define XT_ESP_INV_SPI 0x01    /* Invert the sense of spi. */
+#define XT_ESP_INV_MASK        0x01    /* All possible flags. */
+
+#endif /*_XT_ESP_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_hashlimit.h b/lib/libdss-include/linux/netfilter/xt_hashlimit.h
new file mode 100644 (file)
index 0000000..33511b7
--- /dev/null
@@ -0,0 +1,73 @@
+#ifndef _XT_HASHLIMIT_H
+#define _XT_HASHLIMIT_H
+
+#include <linux/types.h>
+
+/* timings are in milliseconds. */
+#define XT_HASHLIMIT_SCALE 10000
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+ * seconds, or one packet every 59 hours.
+ */
+
+/* packet length accounting is done in 16-byte steps */
+#define XT_HASHLIMIT_BYTE_SHIFT 4
+
+/* details of this structure hidden by the implementation */
+struct xt_hashlimit_htable;
+
+enum {
+       XT_HASHLIMIT_HASH_DIP = 1 << 0,
+       XT_HASHLIMIT_HASH_DPT = 1 << 1,
+       XT_HASHLIMIT_HASH_SIP = 1 << 2,
+       XT_HASHLIMIT_HASH_SPT = 1 << 3,
+       XT_HASHLIMIT_INVERT   = 1 << 4,
+       XT_HASHLIMIT_BYTES    = 1 << 5,
+};
+
+struct hashlimit_cfg {
+       __u32 mode;       /* bitmask of XT_HASHLIMIT_HASH_* */
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* user specified */
+       __u32 size;             /* how many buckets */
+       __u32 max;              /* max number of entries */
+       __u32 gc_interval;      /* gc interval */
+       __u32 expire;   /* when do entries expire? */
+};
+
+struct xt_hashlimit_info {
+       char name [IFNAMSIZ];           /* name */
+       struct hashlimit_cfg cfg;
+
+       /* Used internally by the kernel */
+       struct xt_hashlimit_htable *hinfo;
+       union {
+               void *ptr;
+               struct xt_hashlimit_info *master;
+       } u;
+};
+
+struct hashlimit_cfg1 {
+       __u32 mode;       /* bitmask of XT_HASHLIMIT_HASH_* */
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* user specified */
+       __u32 size;             /* how many buckets */
+       __u32 max;              /* max number of entries */
+       __u32 gc_interval;      /* gc interval */
+       __u32 expire;   /* when do entries expire? */
+
+       __u8 srcmask, dstmask;
+};
+
+struct xt_hashlimit_mtinfo1 {
+       char name[IFNAMSIZ];
+       struct hashlimit_cfg1 cfg;
+
+       /* Used internally by the kernel */
+       struct xt_hashlimit_htable *hinfo __attribute__((aligned(8)));
+};
+
+#endif /* _XT_HASHLIMIT_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_helper.h b/lib/libdss-include/linux/netfilter/xt_helper.h
new file mode 100644 (file)
index 0000000..6b42763
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_HELPER_H
+#define _XT_HELPER_H
+
+struct xt_helper_info {
+       int invert;
+       char name[30];
+};
+#endif /* _XT_HELPER_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_ipcomp.h b/lib/libdss-include/linux/netfilter/xt_ipcomp.h
new file mode 100644 (file)
index 0000000..45c7e40
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _XT_IPCOMP_H
+#define _XT_IPCOMP_H
+
+#include <linux/types.h>
+
+struct xt_ipcomp {
+       __u32 spis[2];  /* Security Parameter Index */
+       __u8 invflags;  /* Inverse flags */
+       __u8 hdrres;    /* Test of the Reserved Filed */
+};
+
+/* Values for "invflags" field in struct xt_ipcomp. */
+#define XT_IPCOMP_INV_SPI      0x01    /* Invert the sense of spi. */
+#define XT_IPCOMP_INV_MASK     0x01    /* All possible flags. */
+
+#endif /*_XT_IPCOMP_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_iprange.h b/lib/libdss-include/linux/netfilter/xt_iprange.h
new file mode 100644 (file)
index 0000000..25fd7cf
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _LINUX_NETFILTER_XT_IPRANGE_H
+#define _LINUX_NETFILTER_XT_IPRANGE_H 1
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+enum {
+       IPRANGE_SRC     = 1 << 0,       /* match source IP address */
+       IPRANGE_DST     = 1 << 1,       /* match destination IP address */
+       IPRANGE_SRC_INV = 1 << 4,       /* negate the condition */
+       IPRANGE_DST_INV = 1 << 5,       /* -"- */
+};
+
+struct xt_iprange_mtinfo {
+       union nf_inet_addr src_min, src_max;
+       union nf_inet_addr dst_min, dst_max;
+       __u8 flags;
+};
+
+#endif /* _LINUX_NETFILTER_XT_IPRANGE_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_ipvs.h b/lib/libdss-include/linux/netfilter/xt_ipvs.h
new file mode 100644 (file)
index 0000000..eff34ac
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_IPVS_H
+#define _XT_IPVS_H
+
+#include <linux/types.h>
+
+enum {
+       XT_IPVS_IPVS_PROPERTY = 1 << 0, /* all other options imply this one */
+       XT_IPVS_PROTO =         1 << 1,
+       XT_IPVS_VADDR =         1 << 2,
+       XT_IPVS_VPORT =         1 << 3,
+       XT_IPVS_DIR =           1 << 4,
+       XT_IPVS_METHOD =        1 << 5,
+       XT_IPVS_VPORTCTL =      1 << 6,
+       XT_IPVS_MASK =          (1 << 7) - 1,
+       XT_IPVS_ONCE_MASK =     XT_IPVS_MASK & ~XT_IPVS_IPVS_PROPERTY
+};
+
+struct xt_ipvs_mtinfo {
+       union nf_inet_addr      vaddr, vmask;
+       __be16                  vport;
+       __u8                    l4proto;
+       __u8                    fwd_method;
+       __be16                  vportctl;
+
+       __u8                    invert;
+       __u8                    bitmask;
+};
+
+#endif /* _XT_IPVS_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_l2tp.h b/lib/libdss-include/linux/netfilter/xt_l2tp.h
new file mode 100644 (file)
index 0000000..7dccfa0
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef _LINUX_NETFILTER_XT_L2TP_H
+#define _LINUX_NETFILTER_XT_L2TP_H
+
+#include <linux/types.h>
+
+enum xt_l2tp_type {
+       XT_L2TP_TYPE_CONTROL,
+       XT_L2TP_TYPE_DATA,
+};
+
+/* L2TP matching stuff */
+struct xt_l2tp_info {
+       __u32 tid;                      /* tunnel id */
+       __u32 sid;                      /* session id */
+       __u8 version;                   /* L2TP protocol version */
+       __u8 type;                      /* L2TP packet type */
+       __u8 flags;                     /* which fields to match */
+};
+
+enum {
+       XT_L2TP_TID     = (1 << 0),     /* match L2TP tunnel id */
+       XT_L2TP_SID     = (1 << 1),     /* match L2TP session id */
+       XT_L2TP_VERSION = (1 << 2),     /* match L2TP protocol version */
+       XT_L2TP_TYPE    = (1 << 3),     /* match L2TP packet type */
+};
+
+#endif /* _LINUX_NETFILTER_XT_L2TP_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_length.h b/lib/libdss-include/linux/netfilter/xt_length.h
new file mode 100644 (file)
index 0000000..b82ed7c
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_LENGTH_H
+#define _XT_LENGTH_H
+
+#include <linux/types.h>
+
+struct xt_length_info {
+    __u16      min, max;
+    __u8       invert;
+};
+
+#endif /*_XT_LENGTH_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_limit.h b/lib/libdss-include/linux/netfilter/xt_limit.h
new file mode 100644 (file)
index 0000000..bb47fc4
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _XT_RATE_H
+#define _XT_RATE_H
+
+#include <linux/types.h>
+
+/* timings are in milliseconds. */
+#define XT_LIMIT_SCALE 10000
+
+struct xt_limit_priv;
+
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+   seconds, or one every 59 hours. */
+struct xt_rateinfo {
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* Used internally by the kernel */
+       unsigned long prev; /* moved to xt_limit_priv */
+       __u32 credit; /* moved to xt_limit_priv */
+       __u32 credit_cap, cost;
+
+       struct xt_limit_priv *master;
+};
+#endif /*_XT_RATE_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_mac.h b/lib/libdss-include/linux/netfilter/xt_mac.h
new file mode 100644 (file)
index 0000000..b892cdc
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_MAC_H
+#define _XT_MAC_H
+
+struct xt_mac_info {
+    unsigned char srcaddr[ETH_ALEN];
+    int invert;
+};
+#endif /*_XT_MAC_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_mark.h b/lib/libdss-include/linux/netfilter/xt_mark.h
new file mode 100644 (file)
index 0000000..ecadc40
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _XT_MARK_H
+#define _XT_MARK_H
+
+#include <linux/types.h>
+
+struct xt_mark_tginfo2 {
+       __u32 mark, mask;
+};
+
+struct xt_mark_mtinfo1 {
+       __u32 mark, mask;
+       __u8 invert;
+};
+
+#endif /*_XT_MARK_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_multiport.h b/lib/libdss-include/linux/netfilter/xt_multiport.h
new file mode 100644 (file)
index 0000000..5b7e72d
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_MULTIPORT_H
+#define _XT_MULTIPORT_H
+
+#include <linux/types.h>
+
+enum xt_multiport_flags {
+       XT_MULTIPORT_SOURCE,
+       XT_MULTIPORT_DESTINATION,
+       XT_MULTIPORT_EITHER
+};
+
+#define XT_MULTI_PORTS 15
+
+/* Must fit inside union xt_matchinfo: 16 bytes */
+struct xt_multiport {
+       __u8 flags;                             /* Type of comparison */
+       __u8 count;                             /* Number of ports */
+       __u16 ports[XT_MULTI_PORTS];    /* Ports */
+};
+
+struct xt_multiport_v1 {
+       __u8 flags;                             /* Type of comparison */
+       __u8 count;                             /* Number of ports */
+       __u16 ports[XT_MULTI_PORTS];    /* Ports */
+       __u8 pflags[XT_MULTI_PORTS];    /* Port flags */
+       __u8 invert;                    /* Invert flag */
+};
+
+#endif /*_XT_MULTIPORT_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_nfacct.h b/lib/libdss-include/linux/netfilter/xt_nfacct.h
new file mode 100644 (file)
index 0000000..3e19c8a
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _XT_NFACCT_MATCH_H
+#define _XT_NFACCT_MATCH_H
+
+#include <linux/netfilter/nfnetlink_acct.h>
+
+struct nf_acct;
+
+struct xt_nfacct_match_info {
+       char            name[NFACCT_NAME_MAX];
+       struct nf_acct  *nfacct;
+};
+
+#endif /* _XT_NFACCT_MATCH_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_osf.h b/lib/libdss-include/linux/netfilter/xt_osf.h
new file mode 100644 (file)
index 0000000..5d66cae
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2003+ Evgeniy Polyakov <johnpol@2ka.mxt.ru>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _XT_OSF_H
+#define _XT_OSF_H
+
+#include <linux/types.h>
+
+#define MAXGENRELEN            32
+
+#define XT_OSF_GENRE           (1<<0)
+#define        XT_OSF_TTL              (1<<1)
+#define XT_OSF_LOG             (1<<2)
+#define XT_OSF_INVERT          (1<<3)
+
+#define XT_OSF_LOGLEVEL_ALL    0       /* log all matched fingerprints */
+#define XT_OSF_LOGLEVEL_FIRST  1       /* log only the first matced fingerprint */
+#define XT_OSF_LOGLEVEL_ALL_KNOWN      2 /* do not log unknown packets */
+
+#define XT_OSF_TTL_TRUE                0       /* True ip and fingerprint TTL comparison */
+#define XT_OSF_TTL_LESS                1       /* Check if ip TTL is less than fingerprint one */
+#define XT_OSF_TTL_NOCHECK     2       /* Do not compare ip and fingerprint TTL at all */
+
+struct xt_osf_info {
+       char                    genre[MAXGENRELEN];
+       __u32                   len;
+       __u32                   flags;
+       __u32                   loglevel;
+       __u32                   ttl;
+};
+
+/*
+ * Wildcard MSS (kind of).
+ * It is used to implement a state machine for the different wildcard values
+ * of the MSS and window sizes.
+ */
+struct xt_osf_wc {
+       __u32                   wc;
+       __u32                   val;
+};
+
+/*
+ * This struct represents IANA options
+ * http://www.iana.org/assignments/tcp-parameters
+ */
+struct xt_osf_opt {
+       __u16                   kind, length;
+       struct xt_osf_wc        wc;
+};
+
+struct xt_osf_user_finger {
+       struct xt_osf_wc        wss;
+
+       __u8                    ttl, df;
+       __u16                   ss, mss;
+       __u16                   opt_num;
+
+       char                    genre[MAXGENRELEN];
+       char                    version[MAXGENRELEN];
+       char                    subtype[MAXGENRELEN];
+
+       /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */
+       struct xt_osf_opt       opt[MAX_IPOPTLEN];
+};
+
+struct xt_osf_nlmsg {
+       struct xt_osf_user_finger       f;
+       struct iphdr            ip;
+       struct tcphdr           tcp;
+};
+
+/* Defines for IANA option kinds */
+
+enum iana_options {
+       OSFOPT_EOL = 0,         /* End of options */
+       OSFOPT_NOP,             /* NOP */
+       OSFOPT_MSS,             /* Maximum segment size */
+       OSFOPT_WSO,             /* Window scale option */
+       OSFOPT_SACKP,           /* SACK permitted */
+       OSFOPT_SACK,            /* SACK */
+       OSFOPT_ECHO,
+       OSFOPT_ECHOREPLY,
+       OSFOPT_TS,              /* Timestamp option */
+       OSFOPT_POCP,            /* Partial Order Connection Permitted */
+       OSFOPT_POSP,            /* Partial Order Service Profile */
+
+       /* Others are not used in the current OSF */
+       OSFOPT_EMPTY = 255,
+};
+
+/*
+ * Initial window size option state machine: multiple of mss, mtu or
+ * plain numeric value. Can also be made as plain numeric value which
+ * is not a multiple of specified value.
+ */
+enum xt_osf_window_size_options {
+       OSF_WSS_PLAIN   = 0,
+       OSF_WSS_MSS,
+       OSF_WSS_MTU,
+       OSF_WSS_MODULO,
+       OSF_WSS_MAX,
+};
+
+/*
+ * Add/remove fingerprint from the kernel.
+ */
+enum xt_osf_msg_types {
+       OSF_MSG_ADD,
+       OSF_MSG_REMOVE,
+       OSF_MSG_MAX,
+};
+
+enum xt_osf_attr_type {
+       OSF_ATTR_UNSPEC,
+       OSF_ATTR_FINGER,
+       OSF_ATTR_MAX,
+};
+
+#endif                         /* _XT_OSF_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_owner.h b/lib/libdss-include/linux/netfilter/xt_owner.h
new file mode 100644 (file)
index 0000000..2081761
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _XT_OWNER_MATCH_H
+#define _XT_OWNER_MATCH_H
+
+#include <linux/types.h>
+
+enum {
+       XT_OWNER_UID    = 1 << 0,
+       XT_OWNER_GID    = 1 << 1,
+       XT_OWNER_SOCKET = 1 << 2,
+};
+
+struct xt_owner_match_info {
+       __u32 uid_min, uid_max;
+       __u32 gid_min, gid_max;
+       __u8 match, invert;
+};
+
+#endif /* _XT_OWNER_MATCH_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_physdev.h b/lib/libdss-include/linux/netfilter/xt_physdev.h
new file mode 100644 (file)
index 0000000..8ab7eb7
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _XT_PHYSDEV_H
+#define _XT_PHYSDEV_H
+
+#include <linux/types.h>
+
+
+#define XT_PHYSDEV_OP_IN               0x01
+#define XT_PHYSDEV_OP_OUT              0x02
+#define XT_PHYSDEV_OP_BRIDGED          0x04
+#define XT_PHYSDEV_OP_ISIN             0x08
+#define XT_PHYSDEV_OP_ISOUT            0x10
+#define XT_PHYSDEV_OP_MASK             (0x20 - 1)
+
+struct xt_physdev_info {
+       char physindev[IFNAMSIZ];
+       char in_mask[IFNAMSIZ];
+       char physoutdev[IFNAMSIZ];
+       char out_mask[IFNAMSIZ];
+       __u8 invert;
+       __u8 bitmask;
+};
+
+#endif /* _XT_PHYSDEV_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_pkttype.h b/lib/libdss-include/linux/netfilter/xt_pkttype.h
new file mode 100644 (file)
index 0000000..f265cf5
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _XT_PKTTYPE_H
+#define _XT_PKTTYPE_H
+
+struct xt_pkttype_info {
+       int     pkttype;
+       int     invert;
+};
+#endif /*_XT_PKTTYPE_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_policy.h b/lib/libdss-include/linux/netfilter/xt_policy.h
new file mode 100644 (file)
index 0000000..d246eac
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef _XT_POLICY_H
+#define _XT_POLICY_H
+
+#include <linux/types.h>
+
+#define XT_POLICY_MAX_ELEM     4
+
+enum xt_policy_flags {
+       XT_POLICY_MATCH_IN      = 0x1,
+       XT_POLICY_MATCH_OUT     = 0x2,
+       XT_POLICY_MATCH_NONE    = 0x4,
+       XT_POLICY_MATCH_STRICT  = 0x8,
+};
+
+enum xt_policy_modes {
+       XT_POLICY_MODE_TRANSPORT,
+       XT_POLICY_MODE_TUNNEL
+};
+
+struct xt_policy_spec {
+       __u8    saddr:1,
+                       daddr:1,
+                       proto:1,
+                       mode:1,
+                       spi:1,
+                       reqid:1;
+};
+
+union xt_policy_addr {
+       struct in_addr  a4;
+       struct in6_addr a6;
+};
+
+struct xt_policy_elem {
+       union {
+               struct {
+                       union xt_policy_addr saddr;
+                       union xt_policy_addr smask;
+                       union xt_policy_addr daddr;
+                       union xt_policy_addr dmask;
+               };
+       };
+       __be32                  spi;
+       __u32           reqid;
+       __u8            proto;
+       __u8            mode;
+
+       struct xt_policy_spec   match;
+       struct xt_policy_spec   invert;
+};
+
+struct xt_policy_info {
+       struct xt_policy_elem pol[XT_POLICY_MAX_ELEM];
+       __u16 flags;
+       __u16 len;
+};
+
+#endif /* _XT_POLICY_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_quota.h b/lib/libdss-include/linux/netfilter/xt_quota.h
new file mode 100644 (file)
index 0000000..9314723
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _XT_QUOTA_H
+#define _XT_QUOTA_H
+
+#include <linux/types.h>
+
+enum xt_quota_flags {
+       XT_QUOTA_INVERT         = 0x1,
+};
+#define XT_QUOTA_MASK          0x1
+
+struct xt_quota_priv;
+
+struct xt_quota_info {
+       __u32 flags;
+       __u32 pad;
+       __aligned_u64 quota;
+
+       /* Used internally by the kernel */
+       struct xt_quota_priv    *master;
+};
+
+#endif /* _XT_QUOTA_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_rateest.h b/lib/libdss-include/linux/netfilter/xt_rateest.h
new file mode 100644 (file)
index 0000000..d40a619
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _XT_RATEEST_MATCH_H
+#define _XT_RATEEST_MATCH_H
+
+#include <linux/types.h>
+
+enum xt_rateest_match_flags {
+       XT_RATEEST_MATCH_INVERT = 1<<0,
+       XT_RATEEST_MATCH_ABS    = 1<<1,
+       XT_RATEEST_MATCH_REL    = 1<<2,
+       XT_RATEEST_MATCH_DELTA  = 1<<3,
+       XT_RATEEST_MATCH_BPS    = 1<<4,
+       XT_RATEEST_MATCH_PPS    = 1<<5,
+};
+
+enum xt_rateest_match_mode {
+       XT_RATEEST_MATCH_NONE,
+       XT_RATEEST_MATCH_EQ,
+       XT_RATEEST_MATCH_LT,
+       XT_RATEEST_MATCH_GT,
+};
+
+struct xt_rateest_match_info {
+       char                    name1[IFNAMSIZ];
+       char                    name2[IFNAMSIZ];
+       __u16           flags;
+       __u16           mode;
+       __u32           bps1;
+       __u32           pps1;
+       __u32           bps2;
+       __u32           pps2;
+
+       /* Used internally by the kernel */
+       struct xt_rateest       *est1 __attribute__((aligned(8)));
+       struct xt_rateest       *est2 __attribute__((aligned(8)));
+};
+
+#endif /* _XT_RATEEST_MATCH_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_realm.h b/lib/libdss-include/linux/netfilter/xt_realm.h
new file mode 100644 (file)
index 0000000..d4a82ee
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_REALM_H
+#define _XT_REALM_H
+
+#include <linux/types.h>
+
+struct xt_realm_info {
+       __u32 id;
+       __u32 mask;
+       __u8 invert;
+};
+
+#endif /* _XT_REALM_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_recent.h b/lib/libdss-include/linux/netfilter/xt_recent.h
new file mode 100644 (file)
index 0000000..6ef36c1
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_NETFILTER_XT_RECENT_H
+#define _LINUX_NETFILTER_XT_RECENT_H 1
+
+#include <linux/types.h>
+
+enum {
+       XT_RECENT_CHECK    = 1 << 0,
+       XT_RECENT_SET      = 1 << 1,
+       XT_RECENT_UPDATE   = 1 << 2,
+       XT_RECENT_REMOVE   = 1 << 3,
+       XT_RECENT_TTL      = 1 << 4,
+       XT_RECENT_REAP     = 1 << 5,
+
+       XT_RECENT_SOURCE   = 0,
+       XT_RECENT_DEST     = 1,
+
+       XT_RECENT_NAME_LEN = 200,
+};
+
+/* Only allowed with --rcheck and --update */
+#define XT_RECENT_MODIFIERS (XT_RECENT_TTL|XT_RECENT_REAP)
+
+#define XT_RECENT_VALID_FLAGS (XT_RECENT_CHECK|XT_RECENT_SET|XT_RECENT_UPDATE|\
+                              XT_RECENT_REMOVE|XT_RECENT_TTL|XT_RECENT_REAP)
+
+struct xt_recent_mtinfo {
+       __u32 seconds;
+       __u32 hit_count;
+       __u8 check_set;
+       __u8 invert;
+       char name[XT_RECENT_NAME_LEN];
+       __u8 side;
+};
+
+struct xt_recent_mtinfo_v1 {
+       __u32 seconds;
+       __u32 hit_count;
+       __u8 check_set;
+       __u8 invert;
+       char name[XT_RECENT_NAME_LEN];
+       __u8 side;
+       union nf_inet_addr mask;
+};
+
+#endif /* _LINUX_NETFILTER_XT_RECENT_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_rpfilter.h b/lib/libdss-include/linux/netfilter/xt_rpfilter.h
new file mode 100644 (file)
index 0000000..672b605
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _XT_RPATH_H
+#define _XT_RPATH_H
+
+#include <linux/types.h>
+
+enum {
+       XT_RPFILTER_LOOSE = 1 << 0,
+       XT_RPFILTER_VALID_MARK = 1 << 1,
+       XT_RPFILTER_ACCEPT_LOCAL = 1 << 2,
+       XT_RPFILTER_INVERT = 1 << 3,
+};
+
+struct xt_rpfilter_info {
+       __u8 flags;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/xt_sctp.h b/lib/libdss-include/linux/netfilter/xt_sctp.h
new file mode 100644 (file)
index 0000000..a501e61
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef _XT_SCTP_H_
+#define _XT_SCTP_H_
+
+#include <linux/types.h>
+
+#define XT_SCTP_SRC_PORTS              0x01
+#define XT_SCTP_DEST_PORTS             0x02
+#define XT_SCTP_CHUNK_TYPES            0x04
+
+#define XT_SCTP_VALID_FLAGS            0x07
+
+struct xt_sctp_flag_info {
+       __u8 chunktype;
+       __u8 flag;
+       __u8 flag_mask;
+};
+
+#define XT_NUM_SCTP_FLAGS      4
+
+struct xt_sctp_info {
+       __u16 dpts[2];  /* Min, Max */
+       __u16 spts[2];  /* Min, Max */
+
+       __u32 chunkmap[256 / sizeof (__u32)];  /* Bit mask of chunks to be matched according to RFC 2960 */
+
+#define SCTP_CHUNK_MATCH_ANY   0x01  /* Match if any of the chunk types are present */
+#define SCTP_CHUNK_MATCH_ALL   0x02  /* Match if all of the chunk types are present */
+#define SCTP_CHUNK_MATCH_ONLY  0x04  /* Match if these are the only chunk types present */
+
+       __u32 chunk_match_type;
+       struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS];
+       int flag_count;
+
+       __u32 flags;
+       __u32 invflags;
+};
+
+#define bytes(type) (sizeof(type) * 8)
+
+#define SCTP_CHUNKMAP_SET(chunkmap, type)              \
+       do {                                            \
+               (chunkmap)[type / bytes(__u32)] |=      \
+                       1 << (type % bytes(__u32));     \
+       } while (0)
+
+#define SCTP_CHUNKMAP_CLEAR(chunkmap, type)                    \
+       do {                                                    \
+               (chunkmap)[type / bytes(__u32)] &=              \
+                       ~(1 << (type % bytes(__u32)));  \
+       } while (0)
+
+#define SCTP_CHUNKMAP_IS_SET(chunkmap, type)                   \
+({                                                             \
+       ((chunkmap)[type / bytes (__u32)] &             \
+               (1 << (type % bytes (__u32)))) ? 1: 0;  \
+})
+
+#define SCTP_CHUNKMAP_RESET(chunkmap) \
+       memset((chunkmap), 0, sizeof(chunkmap))
+
+#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
+       memset((chunkmap), ~0U, sizeof(chunkmap))
+
+#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
+       memcpy((destmap), (srcmap), sizeof(srcmap))
+
+#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
+       __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap))
+static __inline__ bool
+__sctp_chunkmap_is_clear(const __u32 *chunkmap, unsigned int n)
+{
+       unsigned int i;
+       for (i = 0; i < n; ++i)
+               if (chunkmap[i])
+                       return false;
+       return true;
+}
+
+#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
+       __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap))
+static __inline__ bool
+__sctp_chunkmap_is_all_set(const __u32 *chunkmap, unsigned int n)
+{
+       unsigned int i;
+       for (i = 0; i < n; ++i)
+               if (chunkmap[i] != ~0U)
+                       return false;
+       return true;
+}
+
+#endif /* _XT_SCTP_H_ */
+
diff --git a/lib/libdss-include/linux/netfilter/xt_set.h b/lib/libdss-include/linux/netfilter/xt_set.h
new file mode 100644 (file)
index 0000000..d4e0234
--- /dev/null
@@ -0,0 +1,93 @@
+#ifndef _XT_SET_H
+#define _XT_SET_H
+
+#include <linux/types.h>
+#include <linux/netfilter/ipset/ip_set.h>
+
+/* Revision 0 interface: backward compatible with netfilter/iptables */
+
+/*
+ * Option flags for kernel operations (xt_set_info_v0)
+ */
+#define IPSET_SRC              0x01    /* Source match/add */
+#define IPSET_DST              0x02    /* Destination match/add */
+#define IPSET_MATCH_INV                0x04    /* Inverse matching */
+
+struct xt_set_info_v0 {
+       ip_set_id_t index;
+       union {
+               __u32 flags[IPSET_DIM_MAX + 1];
+               struct {
+                       __u32 __flags[IPSET_DIM_MAX];
+                       __u8 dim;
+                       __u8 flags;
+               } compat;
+       } u;
+};
+
+/* match and target infos */
+struct xt_set_info_match_v0 {
+       struct xt_set_info_v0 match_set;
+};
+
+struct xt_set_info_target_v0 {
+       struct xt_set_info_v0 add_set;
+       struct xt_set_info_v0 del_set;
+};
+
+/* Revision 1  match and target */
+
+struct xt_set_info {
+       ip_set_id_t index;
+       __u8 dim;
+       __u8 flags;
+};
+
+/* match and target infos */
+struct xt_set_info_match_v1 {
+       struct xt_set_info match_set;
+};
+
+struct xt_set_info_target_v1 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+};
+
+/* Revision 2 target */
+
+struct xt_set_info_target_v2 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+       __u32 flags;
+       __u32 timeout;
+};
+
+/* Revision 3 match */
+
+struct xt_set_info_match_v3 {
+       struct xt_set_info match_set;
+       struct ip_set_counter_match0 packets;
+       struct ip_set_counter_match0 bytes;
+       __u32 flags;
+};
+
+/* Revision 3 target */
+
+struct xt_set_info_target_v3 {
+       struct xt_set_info add_set;
+       struct xt_set_info del_set;
+       struct xt_set_info map_set;
+       __u32 flags;
+       __u32 timeout;
+};
+
+/* Revision 4 match */
+
+struct xt_set_info_match_v4 {
+       struct xt_set_info match_set;
+       struct ip_set_counter_match packets;
+       struct ip_set_counter_match bytes;
+       __u32 flags;
+};
+
+#endif /*_XT_SET_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_socket.h b/lib/libdss-include/linux/netfilter/xt_socket.h
new file mode 100644 (file)
index 0000000..87644f8
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _XT_SOCKET_H
+#define _XT_SOCKET_H
+
+#include <linux/types.h>
+
+enum {
+       XT_SOCKET_TRANSPARENT = 1 << 0,
+       XT_SOCKET_NOWILDCARD = 1 << 1,
+       XT_SOCKET_RESTORESKMARK = 1 << 2,
+};
+
+struct xt_socket_mtinfo1 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V1 XT_SOCKET_TRANSPARENT
+
+struct xt_socket_mtinfo2 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V2 (XT_SOCKET_TRANSPARENT | XT_SOCKET_NOWILDCARD)
+
+struct xt_socket_mtinfo3 {
+       __u8 flags;
+};
+#define XT_SOCKET_FLAGS_V3 (XT_SOCKET_TRANSPARENT \
+                          | XT_SOCKET_NOWILDCARD \
+                          | XT_SOCKET_RESTORESKMARK)
+
+#endif /* _XT_SOCKET_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_state.h b/lib/libdss-include/linux/netfilter/xt_state.h
new file mode 100644 (file)
index 0000000..7b32de8
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _XT_STATE_H
+#define _XT_STATE_H
+
+#define XT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
+#define XT_STATE_INVALID (1 << 0)
+
+#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1))
+
+struct xt_state_info {
+       unsigned int statemask;
+};
+#endif /*_XT_STATE_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_statistic.h b/lib/libdss-include/linux/netfilter/xt_statistic.h
new file mode 100644 (file)
index 0000000..4e983ef
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _XT_STATISTIC_H
+#define _XT_STATISTIC_H
+
+#include <linux/types.h>
+
+enum xt_statistic_mode {
+       XT_STATISTIC_MODE_RANDOM,
+       XT_STATISTIC_MODE_NTH,
+       __XT_STATISTIC_MODE_MAX
+};
+#define XT_STATISTIC_MODE_MAX (__XT_STATISTIC_MODE_MAX - 1)
+
+enum xt_statistic_flags {
+       XT_STATISTIC_INVERT             = 0x1,
+};
+#define XT_STATISTIC_MASK              0x1
+
+struct xt_statistic_priv;
+
+struct xt_statistic_info {
+       __u16                   mode;
+       __u16                   flags;
+       union {
+               struct {
+                       __u32   probability;
+               } random;
+               struct {
+                       __u32   every;
+                       __u32   packet;
+                       __u32   count; /* unused */
+               } nth;
+       } u;
+       struct xt_statistic_priv *master __attribute__((aligned(8)));
+};
+
+#endif /* _XT_STATISTIC_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_string.h b/lib/libdss-include/linux/netfilter/xt_string.h
new file mode 100644 (file)
index 0000000..235347c
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef _XT_STRING_H
+#define _XT_STRING_H
+
+#include <linux/types.h>
+
+#define XT_STRING_MAX_PATTERN_SIZE 128
+#define XT_STRING_MAX_ALGO_NAME_SIZE 16
+
+enum {
+       XT_STRING_FLAG_INVERT           = 0x01,
+       XT_STRING_FLAG_IGNORECASE       = 0x02
+};
+
+struct xt_string_info {
+       __u16 from_offset;
+       __u16 to_offset;
+       char      algo[XT_STRING_MAX_ALGO_NAME_SIZE];
+       char      pattern[XT_STRING_MAX_PATTERN_SIZE];
+       __u8  patlen;
+       union {
+               struct {
+                       __u8  invert;
+               } v0;
+
+               struct {
+                       __u8  flags;
+               } v1;
+       } u;
+
+       /* Used internally by the kernel */
+       struct ts_config __attribute__((aligned(8))) *config;
+};
+
+#endif /*_XT_STRING_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_tcpmss.h b/lib/libdss-include/linux/netfilter/xt_tcpmss.h
new file mode 100644 (file)
index 0000000..fbac56b
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _XT_TCPMSS_MATCH_H
+#define _XT_TCPMSS_MATCH_H
+
+#include <linux/types.h>
+
+struct xt_tcpmss_match_info {
+    __u16 mss_min, mss_max;
+    __u8 invert;
+};
+
+#endif /*_XT_TCPMSS_MATCH_H*/
diff --git a/lib/libdss-include/linux/netfilter/xt_tcpudp.h b/lib/libdss-include/linux/netfilter/xt_tcpudp.h
new file mode 100644 (file)
index 0000000..38aa7b3
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _XT_TCPUDP_H
+#define _XT_TCPUDP_H
+
+#include <linux/types.h>
+
+/* TCP matching stuff */
+struct xt_tcp {
+       __u16 spts[2];                  /* Source port range. */
+       __u16 dpts[2];                  /* Destination port range. */
+       __u8 option;                    /* TCP Option iff non-zero*/
+       __u8 flg_mask;                  /* TCP flags mask byte */
+       __u8 flg_cmp;                   /* TCP flags compare byte */
+       __u8 invflags;                  /* Inverse flags */
+};
+
+/* Values for "inv" field in struct ipt_tcp. */
+#define XT_TCP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
+#define XT_TCP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
+#define XT_TCP_INV_FLAGS       0x04    /* Invert the sense of TCP flags. */
+#define XT_TCP_INV_OPTION      0x08    /* Invert the sense of option test. */
+#define XT_TCP_INV_MASK                0x0F    /* All possible flags. */
+
+/* UDP matching stuff */
+struct xt_udp {
+       __u16 spts[2];                  /* Source port range. */
+       __u16 dpts[2];                  /* Destination port range. */
+       __u8 invflags;                  /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct ipt_udp. */
+#define XT_UDP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
+#define XT_UDP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
+#define XT_UDP_INV_MASK        0x03    /* All possible flags. */
+
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter/xt_time.h b/lib/libdss-include/linux/netfilter/xt_time.h
new file mode 100644 (file)
index 0000000..0958860
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _XT_TIME_H
+#define _XT_TIME_H 1
+
+#include <linux/types.h>
+
+struct xt_time_info {
+       __u32 date_start;
+       __u32 date_stop;
+       __u32 daytime_start;
+       __u32 daytime_stop;
+       __u32 monthdays_match;
+       __u8 weekdays_match;
+       __u8 flags;
+};
+
+enum {
+       /* Match against local time (instead of UTC) */
+       XT_TIME_LOCAL_TZ = 1 << 0,
+
+       /* treat timestart > timestop (e.g. 23:00-01:00) as single period */
+       XT_TIME_CONTIGUOUS = 1 << 1,
+
+       /* Shortcuts */
+       XT_TIME_ALL_MONTHDAYS = 0xFFFFFFFE,
+       XT_TIME_ALL_WEEKDAYS  = 0xFE,
+       XT_TIME_MIN_DAYTIME   = 0,
+       XT_TIME_MAX_DAYTIME   = 24 * 60 * 60 - 1,
+};
+
+#define XT_TIME_ALL_FLAGS (XT_TIME_LOCAL_TZ|XT_TIME_CONTIGUOUS)
+
+#endif /* _XT_TIME_H */
diff --git a/lib/libdss-include/linux/netfilter/xt_u32.h b/lib/libdss-include/linux/netfilter/xt_u32.h
new file mode 100644 (file)
index 0000000..04d1bfe
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _XT_U32_H
+#define _XT_U32_H 1
+
+#include <linux/types.h>
+
+enum xt_u32_ops {
+       XT_U32_AND,
+       XT_U32_LEFTSH,
+       XT_U32_RIGHTSH,
+       XT_U32_AT,
+};
+
+struct xt_u32_location_element {
+       __u32 number;
+       __u8 nextop;
+};
+
+struct xt_u32_value_element {
+       __u32 min;
+       __u32 max;
+};
+
+/*
+ * Any way to allow for an arbitrary number of elements?
+ * For now, I settle with a limit of 10 each.
+ */
+#define XT_U32_MAXSIZE 10
+
+struct xt_u32_test {
+       struct xt_u32_location_element location[XT_U32_MAXSIZE+1];
+       struct xt_u32_value_element value[XT_U32_MAXSIZE+1];
+       __u8 nnums;
+       __u8 nvalues;
+};
+
+struct xt_u32 {
+       struct xt_u32_test tests[XT_U32_MAXSIZE+1];
+       __u8 ntests;
+       __u8 invert;
+};
+
+#endif /* _XT_U32_H */
diff --git a/lib/libdss-include/linux/netfilter_arp.h b/lib/libdss-include/linux/netfilter_arp.h
new file mode 100644 (file)
index 0000000..92bc6dd
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_ARP_NETFILTER_H
+#define __LINUX_ARP_NETFILTER_H
+
+/* ARP-specific defines for netfilter.
+ * (C)2002 Rusty Russell IBM -- This code is GPL.
+ */
+
+#include <linux/netfilter.h>
+
+/* There is no PF_ARP. */
+#define NF_ARP         0
+
+/* ARP Hooks */
+#define NF_ARP_IN      0
+#define NF_ARP_OUT     1
+#define NF_ARP_FORWARD 2
+#define NF_ARP_NUMHOOKS        3
+
+#endif /* __LINUX_ARP_NETFILTER_H */
diff --git a/lib/libdss-include/linux/netfilter_arp/arp_tables.h b/lib/libdss-include/linux/netfilter_arp/arp_tables.h
new file mode 100644 (file)
index 0000000..bb1ec64
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ *     Format of an ARP firewall descriptor
+ *
+ *     src, tgt, src_mask, tgt_mask, arpop, arpop_mask are always stored in
+ *     network byte order.
+ *     flags are stored in host byte order (of course).
+ */
+
+#ifndef _ARPTABLES_H
+#define _ARPTABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_arp.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define arpt_entry_target xt_entry_target
+#define arpt_standard_target xt_standard_target
+#define arpt_error_target xt_error_target
+#define ARPT_CONTINUE XT_CONTINUE
+#define ARPT_RETURN XT_RETURN
+#define arpt_counters_info xt_counters_info
+#define arpt_counters xt_counters
+#define ARPT_STANDARD_TARGET XT_STANDARD_TARGET
+#define ARPT_ERROR_TARGET XT_ERROR_TARGET
+#define ARPT_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct arpt_entry, entries, size, fn, ## args)
+
+#define ARPT_DEV_ADDR_LEN_MAX 16
+
+struct arpt_devaddr_info {
+       char addr[ARPT_DEV_ADDR_LEN_MAX];
+       char mask[ARPT_DEV_ADDR_LEN_MAX];
+};
+
+/* Yes, Virginia, you have to zero the padding. */
+struct arpt_arp {
+       /* Source and target IP addr */
+       struct in_addr src, tgt;
+       /* Mask for src and target IP addr */
+       struct in_addr smsk, tmsk;
+
+       /* Device hw address length, src+target device addresses */
+       __u8 arhln, arhln_mask;
+       struct arpt_devaddr_info src_devaddr;
+       struct arpt_devaddr_info tgt_devaddr;
+
+       /* ARP operation code. */
+       __be16 arpop, arpop_mask;
+
+       /* ARP hardware address and protocol address format. */
+       __be16 arhrd, arhrd_mask;
+       __be16 arpro, arpro_mask;
+
+       /* The protocol address length is only accepted if it is 4
+        * so there is no use in offering a way to do filtering on it.
+        */
+
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u16 invflags;
+};
+
+/* Values for "flag" field in struct arpt_ip (general arp structure).
+ * No flags defined yet.
+ */
+#define ARPT_F_MASK            0x00    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct arpt_arp. */
+#define ARPT_INV_VIA_IN                0x0001  /* Invert the sense of IN IFACE. */
+#define ARPT_INV_VIA_OUT       0x0002  /* Invert the sense of OUT IFACE */
+#define ARPT_INV_SRCIP         0x0004  /* Invert the sense of SRC IP. */
+#define ARPT_INV_TGTIP         0x0008  /* Invert the sense of TGT IP. */
+#define ARPT_INV_SRCDEVADDR    0x0010  /* Invert the sense of SRC DEV ADDR. */
+#define ARPT_INV_TGTDEVADDR    0x0020  /* Invert the sense of TGT DEV ADDR. */
+#define ARPT_INV_ARPOP         0x0040  /* Invert the sense of ARP OP. */
+#define ARPT_INV_ARPHRD                0x0080  /* Invert the sense of ARP HRD. */
+#define ARPT_INV_ARPPRO                0x0100  /* Invert the sense of ARP PRO. */
+#define ARPT_INV_ARPHLN                0x0200  /* Invert the sense of ARP HLN. */
+#define ARPT_INV_MASK          0x03FF  /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general ARP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct arpt_entry
+{
+       struct arpt_arp arp;
+
+       /* Size of arpt_entry + matches */
+       __u16 target_offset;
+       /* Size of arpt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use a raw
+ * socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in.h before adding new number here.
+ */
+#define ARPT_BASE_CTL          96
+
+#define ARPT_SO_SET_REPLACE            (ARPT_BASE_CTL)
+#define ARPT_SO_SET_ADD_COUNTERS       (ARPT_BASE_CTL + 1)
+#define ARPT_SO_SET_MAX                        ARPT_SO_SET_ADD_COUNTERS
+
+#define ARPT_SO_GET_INFO               (ARPT_BASE_CTL)
+#define ARPT_SO_GET_ENTRIES            (ARPT_BASE_CTL + 1)
+/* #define ARPT_SO_GET_REVISION_MATCH  (APRT_BASE_CTL + 2) */
+#define ARPT_SO_GET_REVISION_TARGET    (ARPT_BASE_CTL + 3)
+#define ARPT_SO_GET_MAX                        (ARPT_SO_GET_REVISION_TARGET)
+
+/* The argument to ARPT_SO_GET_INFO */
+struct arpt_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_ARP_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_ARP_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to ARPT_SO_SET_REPLACE. */
+struct arpt_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_ARP_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_ARP_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct arpt_entry entries[0];
+};
+
+/* The argument to ARPT_SO_GET_ENTRIES. */
+struct arpt_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct arpt_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *arpt_get_target(struct arpt_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+#endif /* _ARPTABLES_H */
diff --git a/lib/libdss-include/linux/netfilter_arp/arpt_mangle.h b/lib/libdss-include/linux/netfilter_arp/arpt_mangle.h
new file mode 100644 (file)
index 0000000..8c2b16a
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _ARPT_MANGLE_H
+#define _ARPT_MANGLE_H
+#include <linux/netfilter_arp/arp_tables.h>
+
+#define ARPT_MANGLE_ADDR_LEN_MAX sizeof(struct in_addr)
+struct arpt_mangle
+{
+       char src_devaddr[ARPT_DEV_ADDR_LEN_MAX];
+       char tgt_devaddr[ARPT_DEV_ADDR_LEN_MAX];
+       union {
+               struct in_addr src_ip;
+       } u_s;
+       union {
+               struct in_addr tgt_ip;
+       } u_t;
+       __u8 flags;
+       int target;
+};
+
+#define ARPT_MANGLE_SDEV 0x01
+#define ARPT_MANGLE_TDEV 0x02
+#define ARPT_MANGLE_SIP 0x04
+#define ARPT_MANGLE_TIP 0x08
+#define ARPT_MANGLE_MASK 0x0f
+
+#endif /* _ARPT_MANGLE_H */
diff --git a/lib/libdss-include/linux/netfilter_bridge.h b/lib/libdss-include/linux/netfilter_bridge.h
new file mode 100644 (file)
index 0000000..c4dbfd9
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_BRIDGE_NETFILTER_H
+#define __LINUX_BRIDGE_NETFILTER_H
+
+/* bridge-specific defines for netfilter. 
+ */
+
+#include <linux/netfilter.h>
+#include <linux/if_ether.h>
+#include <linux/if_vlan.h>
+#include <linux/if_pppox.h>
+
+/* Bridge Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_BR_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_BR_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_BR_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_BR_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_BR_POST_ROUTING     4
+/* Not really a hook, but used for the ebtables broute table */
+#define NF_BR_BROUTING         5
+#define NF_BR_NUMHOOKS         6
+
+#endif /* __LINUX_BRIDGE_NETFILTER_H */
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_802_3.h b/lib/libdss-include/linux/netfilter_bridge/ebt_802_3.h
new file mode 100644 (file)
index 0000000..70028c1
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef __LINUX_BRIDGE_EBT_802_3_H
+#define __LINUX_BRIDGE_EBT_802_3_H
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+#define EBT_802_3_SAP 0x01
+#define EBT_802_3_TYPE 0x02
+
+#define EBT_802_3_MATCH "802_3"
+
+/*
+ * If frame has DSAP/SSAP value 0xaa you must check the SNAP type
+ * to discover what kind of packet we're carrying. 
+ */
+#define CHECK_TYPE 0xaa
+
+/*
+ * Control field may be one or two bytes.  If the first byte has
+ * the value 0x03 then the entire length is one byte, otherwise it is two.
+ * One byte controls are used in Unnumbered Information frames.
+ * Two byte controls are used in Numbered Information frames.
+ */
+#define IS_UI 0x03
+
+#define EBT_802_3_MASK (EBT_802_3_SAP | EBT_802_3_TYPE | EBT_802_3)
+
+/* ui has one byte ctrl, ni has two */
+struct hdr_ui {
+       __u8 dsap;
+       __u8 ssap;
+       __u8 ctrl;
+       __u8 orig[3];
+       __be16 type;
+};
+
+struct hdr_ni {
+       __u8 dsap;
+       __u8 ssap;
+       __be16 ctrl;
+       __u8  orig[3];
+       __be16 type;
+};
+
+struct ebt_802_3_hdr {
+       __u8  daddr[ETH_ALEN];
+       __u8  saddr[ETH_ALEN];
+       __be16 len;
+       union {
+               struct hdr_ui ui;
+               struct hdr_ni ni;
+       } llc;
+};
+
+
+struct ebt_802_3_info {
+       __u8  sap;
+       __be16 type;
+       __u8  bitmask;
+       __u8  invflags;
+};
+
+#endif /* __LINUX_BRIDGE_EBT_802_3_H */
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_among.h b/lib/libdss-include/linux/netfilter_bridge/ebt_among.h
new file mode 100644 (file)
index 0000000..bd4e3ad
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef __LINUX_BRIDGE_EBT_AMONG_H
+#define __LINUX_BRIDGE_EBT_AMONG_H
+
+#include <linux/types.h>
+
+#define EBT_AMONG_DST 0x01
+#define EBT_AMONG_SRC 0x02
+
+/* Grzegorz Borowiak <grzes@gnu.univ.gda.pl> 2003
+ * 
+ * Write-once-read-many hash table, used for checking if a given
+ * MAC address belongs to a set or not and possibly for checking
+ * if it is related with a given IPv4 address.
+ *
+ * The hash value of an address is its last byte.
+ * 
+ * In real-world ethernet addresses, values of the last byte are
+ * evenly distributed and there is no need to consider other bytes.
+ * It would only slow the routines down.
+ *
+ * For MAC address comparison speedup reasons, we introduce a trick.
+ * MAC address is mapped onto an array of two 32-bit integers.
+ * This pair of integers is compared with MAC addresses in the
+ * hash table, which are stored also in form of pairs of integers
+ * (in `cmp' array). This is quick as it requires only two elementary
+ * number comparisons in worst case. Further, we take advantage of
+ * fact that entropy of 3 last bytes of address is larger than entropy
+ * of 3 first bytes. So first we compare 4 last bytes of addresses and
+ * if they are the same we compare 2 first.
+ *
+ * Yes, it is a memory overhead, but in 2003 AD, who cares?
+ */
+
+struct ebt_mac_wormhash_tuple {
+       __u32 cmp[2];
+       __be32 ip;
+};
+
+struct ebt_mac_wormhash {
+       int table[257];
+       int poolsize;
+       struct ebt_mac_wormhash_tuple pool[0];
+};
+
+#define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \
+               + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0)
+
+struct ebt_among_info {
+       int wh_dst_ofs;
+       int wh_src_ofs;
+       int bitmask;
+};
+
+#define EBT_AMONG_DST_NEG 0x1
+#define EBT_AMONG_SRC_NEG 0x2
+
+#define ebt_among_wh_dst(x) ((x)->wh_dst_ofs ? \
+       (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_dst_ofs) : NULL)
+#define ebt_among_wh_src(x) ((x)->wh_src_ofs ? \
+       (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_src_ofs) : NULL)
+
+#define EBT_AMONG_MATCH "among"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_arp.h b/lib/libdss-include/linux/netfilter_bridge/ebt_arp.h
new file mode 100644 (file)
index 0000000..522f3e4
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __LINUX_BRIDGE_EBT_ARP_H
+#define __LINUX_BRIDGE_EBT_ARP_H
+
+#include <linux/types.h>
+
+#define EBT_ARP_OPCODE 0x01
+#define EBT_ARP_HTYPE 0x02
+#define EBT_ARP_PTYPE 0x04
+#define EBT_ARP_SRC_IP 0x08
+#define EBT_ARP_DST_IP 0x10
+#define EBT_ARP_SRC_MAC 0x20
+#define EBT_ARP_DST_MAC 0x40
+#define EBT_ARP_GRAT 0x80
+#define EBT_ARP_MASK (EBT_ARP_OPCODE | EBT_ARP_HTYPE | EBT_ARP_PTYPE | \
+   EBT_ARP_SRC_IP | EBT_ARP_DST_IP | EBT_ARP_SRC_MAC | EBT_ARP_DST_MAC | \
+   EBT_ARP_GRAT)
+#define EBT_ARP_MATCH "arp"
+
+struct ebt_arp_info
+{
+       __be16 htype;
+       __be16 ptype;
+       __be16 opcode;
+       __be32 saddr;
+       __be32 smsk;
+       __be32 daddr;
+       __be32 dmsk;
+       unsigned char smaddr[ETH_ALEN];
+       unsigned char smmsk[ETH_ALEN];
+       unsigned char dmaddr[ETH_ALEN];
+       unsigned char dmmsk[ETH_ALEN];
+       __u8  bitmask;
+       __u8  invflags;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_arpreply.h b/lib/libdss-include/linux/netfilter_bridge/ebt_arpreply.h
new file mode 100644 (file)
index 0000000..7e77896
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H
+#define __LINUX_BRIDGE_EBT_ARPREPLY_H
+
+struct ebt_arpreply_info {
+       unsigned char mac[ETH_ALEN];
+       int target;
+};
+#define EBT_ARPREPLY_TARGET "arpreply"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_ip.h b/lib/libdss-include/linux/netfilter_bridge/ebt_ip.h
new file mode 100644 (file)
index 0000000..c4bbc41
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *  ebt_ip
+ *
+ *     Authors:
+ *     Bart De Schuymer <bart.de.schuymer@pandora.be>
+ *
+ *  April, 2002
+ *
+ *  Changes:
+ *    added ip-sport and ip-dport
+ *    Innominate Security Technologies AG <mhopf@innominate.com>
+ *    September, 2002
+ */
+
+#ifndef __LINUX_BRIDGE_EBT_IP_H
+#define __LINUX_BRIDGE_EBT_IP_H
+
+#include <linux/types.h>
+
+#define EBT_IP_SOURCE 0x01
+#define EBT_IP_DEST 0x02
+#define EBT_IP_TOS 0x04
+#define EBT_IP_PROTO 0x08
+#define EBT_IP_SPORT 0x10
+#define EBT_IP_DPORT 0x20
+#define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO |\
+ EBT_IP_SPORT | EBT_IP_DPORT )
+#define EBT_IP_MATCH "ip"
+
+/* the same values are used for the invflags */
+struct ebt_ip_info {
+       __be32 saddr;
+       __be32 daddr;
+       __be32 smsk;
+       __be32 dmsk;
+       __u8  tos;
+       __u8  protocol;
+       __u8  bitmask;
+       __u8  invflags;
+       __u16 sport[2];
+       __u16 dport[2];
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_ip6.h b/lib/libdss-include/linux/netfilter_bridge/ebt_ip6.h
new file mode 100644 (file)
index 0000000..42b8896
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *  ebt_ip6
+ *
+ *     Authors:
+ * Kuo-Lang Tseng <kuo-lang.tseng@intel.com>
+ * Manohar Castelino <manohar.r.castelino@intel.com>
+ *
+ *  Jan 11, 2008
+ *
+ */
+
+#ifndef __LINUX_BRIDGE_EBT_IP6_H
+#define __LINUX_BRIDGE_EBT_IP6_H
+
+#include <linux/types.h>
+
+#define EBT_IP6_SOURCE 0x01
+#define EBT_IP6_DEST 0x02
+#define EBT_IP6_TCLASS 0x04
+#define EBT_IP6_PROTO 0x08
+#define EBT_IP6_SPORT 0x10
+#define EBT_IP6_DPORT 0x20
+#define EBT_IP6_ICMP6 0x40
+
+#define EBT_IP6_MASK (EBT_IP6_SOURCE | EBT_IP6_DEST | EBT_IP6_TCLASS |\
+                     EBT_IP6_PROTO | EBT_IP6_SPORT | EBT_IP6_DPORT | \
+                     EBT_IP6_ICMP6)
+#define EBT_IP6_MATCH "ip6"
+
+/* the same values are used for the invflags */
+struct ebt_ip6_info {
+       struct in6_addr saddr;
+       struct in6_addr daddr;
+       struct in6_addr smsk;
+       struct in6_addr dmsk;
+       __u8  tclass;
+       __u8  protocol;
+       __u8  bitmask;
+       __u8  invflags;
+       union {
+               __u16 sport[2];
+               __u8 icmpv6_type[2];
+       };
+       union {
+               __u16 dport[2];
+               __u8 icmpv6_code[2];
+       };
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_limit.h b/lib/libdss-include/linux/netfilter_bridge/ebt_limit.h
new file mode 100644 (file)
index 0000000..66d80b3
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef __LINUX_BRIDGE_EBT_LIMIT_H
+#define __LINUX_BRIDGE_EBT_LIMIT_H
+
+#include <linux/types.h>
+
+#define EBT_LIMIT_MATCH "limit"
+
+/* timings are in milliseconds. */
+#define EBT_LIMIT_SCALE 10000
+
+/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
+   seconds, or one every 59 hours. */
+
+struct ebt_limit_info {
+       __u32 avg;    /* Average secs between packets * scale */
+       __u32 burst;  /* Period multiplier for upper limit. */
+
+       /* Used internally by the kernel */
+       unsigned long prev;
+       __u32 credit;
+       __u32 credit_cap, cost;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_log.h b/lib/libdss-include/linux/netfilter_bridge/ebt_log.h
new file mode 100644 (file)
index 0000000..7e7f1d1
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __LINUX_BRIDGE_EBT_LOG_H
+#define __LINUX_BRIDGE_EBT_LOG_H
+
+#include <linux/types.h>
+
+#define EBT_LOG_IP 0x01 /* if the frame is made by ip, log the ip information */
+#define EBT_LOG_ARP 0x02
+#define EBT_LOG_NFLOG 0x04
+#define EBT_LOG_IP6 0x08
+#define EBT_LOG_MASK (EBT_LOG_IP | EBT_LOG_ARP | EBT_LOG_IP6)
+#define EBT_LOG_PREFIX_SIZE 30
+#define EBT_LOG_WATCHER "log"
+
+struct ebt_log_info {
+       __u8 loglevel;
+       __u8 prefix[EBT_LOG_PREFIX_SIZE];
+       __u32 bitmask;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_mark_m.h b/lib/libdss-include/linux/netfilter_bridge/ebt_mark_m.h
new file mode 100644 (file)
index 0000000..410f9e5
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __LINUX_BRIDGE_EBT_MARK_M_H
+#define __LINUX_BRIDGE_EBT_MARK_M_H
+
+#include <linux/types.h>
+
+#define EBT_MARK_AND 0x01
+#define EBT_MARK_OR 0x02
+#define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR)
+struct ebt_mark_m_info {
+       unsigned long mark, mask;
+       __u8 invert;
+       __u8 bitmask;
+};
+#define EBT_MARK_MATCH "mark_m"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_mark_t.h b/lib/libdss-include/linux/netfilter_bridge/ebt_mark_t.h
new file mode 100644 (file)
index 0000000..7d5a268
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __LINUX_BRIDGE_EBT_MARK_T_H
+#define __LINUX_BRIDGE_EBT_MARK_T_H
+
+/* The target member is reused for adding new actions, the
+ * value of the real target is -1 to -NUM_STANDARD_TARGETS.
+ * For backward compatibility, the 4 lsb (2 would be enough,
+ * but let's play it safe) are kept to designate this target.
+ * The remaining bits designate the action. By making the set
+ * action 0xfffffff0, the result will look ok for older
+ * versions. [September 2006] */
+#define MARK_SET_VALUE (0xfffffff0)
+#define MARK_OR_VALUE  (0xffffffe0)
+#define MARK_AND_VALUE (0xffffffd0)
+#define MARK_XOR_VALUE (0xffffffc0)
+
+struct ebt_mark_t_info {
+       unsigned long mark;
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_MARK_TARGET "mark"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_nat.h b/lib/libdss-include/linux/netfilter_bridge/ebt_nat.h
new file mode 100644 (file)
index 0000000..5e74e3b
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __LINUX_BRIDGE_EBT_NAT_H
+#define __LINUX_BRIDGE_EBT_NAT_H
+
+#define NAT_ARP_BIT  (0x00000010)
+struct ebt_nat_info {
+       unsigned char mac[ETH_ALEN];
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_SNAT_TARGET "snat"
+#define EBT_DNAT_TARGET "dnat"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_nflog.h b/lib/libdss-include/linux/netfilter_bridge/ebt_nflog.h
new file mode 100644 (file)
index 0000000..df829fc
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef __LINUX_BRIDGE_EBT_NFLOG_H
+#define __LINUX_BRIDGE_EBT_NFLOG_H
+
+#include <linux/types.h>
+
+#define EBT_NFLOG_MASK 0x0
+
+#define EBT_NFLOG_PREFIX_SIZE 64
+#define EBT_NFLOG_WATCHER "nflog"
+
+#define EBT_NFLOG_DEFAULT_GROUP                0x1
+#define EBT_NFLOG_DEFAULT_THRESHOLD    1
+
+struct ebt_nflog_info {
+       __u32 len;
+       __u16 group;
+       __u16 threshold;
+       __u16 flags;
+       __u16 pad;
+       char prefix[EBT_NFLOG_PREFIX_SIZE];
+};
+
+#endif                         /* __LINUX_BRIDGE_EBT_NFLOG_H */
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_pkttype.h b/lib/libdss-include/linux/netfilter_bridge/ebt_pkttype.h
new file mode 100644 (file)
index 0000000..c241bad
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H
+#define __LINUX_BRIDGE_EBT_PKTTYPE_H
+
+#include <linux/types.h>
+
+struct ebt_pkttype_info {
+       __u8 pkt_type;
+       __u8 invert;
+};
+#define EBT_PKTTYPE_MATCH "pkttype"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_redirect.h b/lib/libdss-include/linux/netfilter_bridge/ebt_redirect.h
new file mode 100644 (file)
index 0000000..dd9622c
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __LINUX_BRIDGE_EBT_REDIRECT_H
+#define __LINUX_BRIDGE_EBT_REDIRECT_H
+
+struct ebt_redirect_info {
+       /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */
+       int target;
+};
+#define EBT_REDIRECT_TARGET "redirect"
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_stp.h b/lib/libdss-include/linux/netfilter_bridge/ebt_stp.h
new file mode 100644 (file)
index 0000000..1025b9f
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef __LINUX_BRIDGE_EBT_STP_H
+#define __LINUX_BRIDGE_EBT_STP_H
+
+#include <linux/types.h>
+
+#define EBT_STP_TYPE           0x0001
+
+#define EBT_STP_FLAGS          0x0002
+#define EBT_STP_ROOTPRIO       0x0004
+#define EBT_STP_ROOTADDR       0x0008
+#define EBT_STP_ROOTCOST       0x0010
+#define EBT_STP_SENDERPRIO     0x0020
+#define EBT_STP_SENDERADDR     0x0040
+#define EBT_STP_PORT           0x0080
+#define EBT_STP_MSGAGE         0x0100
+#define EBT_STP_MAXAGE         0x0200
+#define EBT_STP_HELLOTIME      0x0400
+#define EBT_STP_FWDD           0x0800
+
+#define EBT_STP_MASK           0x0fff
+#define EBT_STP_CONFIG_MASK    0x0ffe
+
+#define EBT_STP_MATCH "stp"
+
+struct ebt_stp_config_info {
+       __u8 flags;
+       __u16 root_priol, root_priou;
+       char root_addr[6], root_addrmsk[6];
+       __u32 root_costl, root_costu;
+       __u16 sender_priol, sender_priou;
+       char sender_addr[6], sender_addrmsk[6];
+       __u16 portl, portu;
+       __u16 msg_agel, msg_ageu;
+       __u16 max_agel, max_ageu;
+       __u16 hello_timel, hello_timeu;
+       __u16 forward_delayl, forward_delayu;
+};
+
+struct ebt_stp_info {
+       __u8 type;
+       struct ebt_stp_config_info config;
+       __u16 bitmask;
+       __u16 invflags;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebt_vlan.h b/lib/libdss-include/linux/netfilter_bridge/ebt_vlan.h
new file mode 100644 (file)
index 0000000..967d1d5
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __LINUX_BRIDGE_EBT_VLAN_H
+#define __LINUX_BRIDGE_EBT_VLAN_H
+
+#include <linux/types.h>
+
+#define EBT_VLAN_ID    0x01
+#define EBT_VLAN_PRIO  0x02
+#define EBT_VLAN_ENCAP 0x04
+#define EBT_VLAN_MASK (EBT_VLAN_ID | EBT_VLAN_PRIO | EBT_VLAN_ENCAP)
+#define EBT_VLAN_MATCH "vlan"
+
+struct ebt_vlan_info {
+       __u16 id;               /* VLAN ID {1-4095} */
+       __u8 prio;              /* VLAN User Priority {0-7} */
+       __be16 encap;           /* VLAN Encapsulated frame code {0-65535} */
+       __u8 bitmask;           /* Args bitmask bit 1=1 - ID arg,
+                                  bit 2=1 User-Priority arg, bit 3=1 encap*/
+       __u8 invflags;          /* Inverse bitmask  bit 1=1 - inversed ID arg, 
+                                  bit 2=1 - inversed Pirority arg */
+};
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_bridge/ebtables.h b/lib/libdss-include/linux/netfilter_bridge/ebtables.h
new file mode 100644 (file)
index 0000000..0524374
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+ *  ebtables
+ *
+ *     Authors:
+ *     Bart De Schuymer                <bdschuym@pandora.be>
+ *
+ *  ebtables.c,v 2.0, April, 2002
+ *
+ *  This code is strongly inspired by the iptables code which is
+ *  Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling
+ */
+
+#ifndef __LINUX_BRIDGE_EFF_H
+#define __LINUX_BRIDGE_EFF_H
+#include <linux/netfilter_bridge.h>
+
+#define EBT_TABLE_MAXNAMELEN 32
+#define EBT_CHAIN_MAXNAMELEN EBT_TABLE_MAXNAMELEN
+#define EBT_FUNCTION_MAXNAMELEN EBT_TABLE_MAXNAMELEN
+
+/* verdicts >0 are "branches" */
+#define EBT_ACCEPT   -1
+#define EBT_DROP     -2
+#define EBT_CONTINUE -3
+#define EBT_RETURN   -4
+#define NUM_STANDARD_TARGETS   4
+/* ebtables target modules store the verdict inside an int. We can
+ * reclaim a part of this int for backwards compatible extensions.
+ * The 4 lsb are more than enough to store the verdict. */
+#define EBT_VERDICT_BITS 0x0000000F
+
+struct xt_match;
+struct xt_target;
+
+struct ebt_counter {
+       uint64_t pcnt;
+       uint64_t bcnt;
+};
+
+struct ebt_replace {
+       char name[EBT_TABLE_MAXNAMELEN];
+       unsigned int valid_hooks;
+       /* nr of rules in the table */
+       unsigned int nentries;
+       /* total size of the entries */
+       unsigned int entries_size;
+       /* start of the chains */
+       struct ebt_entries *hook_entry[NF_BR_NUMHOOKS];
+       /* nr of counters userspace expects back */
+       unsigned int num_counters;
+       /* where the kernel will put the old counters */
+       struct ebt_counter *counters;
+       char *entries;
+};
+
+struct ebt_replace_kernel {
+       char name[EBT_TABLE_MAXNAMELEN];
+       unsigned int valid_hooks;
+       /* nr of rules in the table */
+       unsigned int nentries;
+       /* total size of the entries */
+       unsigned int entries_size;
+       /* start of the chains */
+       struct ebt_entries *hook_entry[NF_BR_NUMHOOKS];
+       /* nr of counters userspace expects back */
+       unsigned int num_counters;
+       /* where the kernel will put the old counters */
+       struct ebt_counter *counters;
+       char *entries;
+};
+
+struct ebt_entries {
+       /* this field is always set to zero
+        * See EBT_ENTRY_OR_ENTRIES.
+        * Must be same size as ebt_entry.bitmask */
+       unsigned int distinguisher;
+       /* the chain name */
+       char name[EBT_CHAIN_MAXNAMELEN];
+       /* counter offset for this chain */
+       unsigned int counter_offset;
+       /* one standard (accept, drop, return) per hook */
+       int policy;
+       /* nr. of entries */
+       unsigned int nentries;
+       /* entry list */
+       char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+/* used for the bitmask of struct ebt_entry */
+
+/* This is a hack to make a difference between an ebt_entry struct and an
+ * ebt_entries struct when traversing the entries from start to end.
+ * Using this simplifies the code a lot, while still being able to use
+ * ebt_entries.
+ * Contrary, iptables doesn't use something like ebt_entries and therefore uses
+ * different techniques for naming the policy and such. So, iptables doesn't
+ * need a hack like this.
+ */
+#define EBT_ENTRY_OR_ENTRIES 0x01
+/* these are the normal masks */
+#define EBT_NOPROTO 0x02
+#define EBT_802_3 0x04
+#define EBT_SOURCEMAC 0x08
+#define EBT_DESTMAC 0x10
+#define EBT_F_MASK (EBT_NOPROTO | EBT_802_3 | EBT_SOURCEMAC | EBT_DESTMAC \
+   | EBT_ENTRY_OR_ENTRIES)
+
+#define EBT_IPROTO 0x01
+#define EBT_IIN 0x02
+#define EBT_IOUT 0x04
+#define EBT_ISOURCE 0x8
+#define EBT_IDEST 0x10
+#define EBT_ILOGICALIN 0x20
+#define EBT_ILOGICALOUT 0x40
+#define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \
+   | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST)
+
+struct ebt_entry_match {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_match *match;
+       } u;
+       /* size of data */
+       unsigned int match_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+struct ebt_entry_watcher {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_target *watcher;
+       } u;
+       /* size of data */
+       unsigned int watcher_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+struct ebt_entry_target {
+       union {
+               char name[EBT_FUNCTION_MAXNAMELEN];
+               struct xt_target *target;
+       } u;
+       /* size of data */
+       unsigned int target_size;
+       unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+#define EBT_STANDARD_TARGET "standard"
+struct ebt_standard_target {
+       struct ebt_entry_target target;
+       int verdict;
+};
+
+/* one entry */
+struct ebt_entry {
+       /* this needs to be the first field */
+       unsigned int bitmask;
+       unsigned int invflags;
+       __be16 ethproto;
+       /* the physical in-dev */
+       char in[IFNAMSIZ];
+       /* the logical in-dev */
+       char logical_in[IFNAMSIZ];
+       /* the physical out-dev */
+       char out[IFNAMSIZ];
+       /* the logical out-dev */
+       char logical_out[IFNAMSIZ];
+       unsigned char sourcemac[ETH_ALEN];
+       unsigned char sourcemsk[ETH_ALEN];
+       unsigned char destmac[ETH_ALEN];
+       unsigned char destmsk[ETH_ALEN];
+       /* sizeof ebt_entry + matches */
+       unsigned int watchers_offset;
+       /* sizeof ebt_entry + matches + watchers */
+       unsigned int target_offset;
+       /* sizeof ebt_entry + matches + watchers + target */
+       unsigned int next_offset;
+       unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
+};
+
+/* {g,s}etsockopt numbers */
+#define EBT_BASE_CTL            128
+
+#define EBT_SO_SET_ENTRIES      (EBT_BASE_CTL)
+#define EBT_SO_SET_COUNTERS     (EBT_SO_SET_ENTRIES+1)
+#define EBT_SO_SET_MAX          (EBT_SO_SET_COUNTERS+1)
+
+#define EBT_SO_GET_INFO         (EBT_BASE_CTL)
+#define EBT_SO_GET_ENTRIES      (EBT_SO_GET_INFO+1)
+#define EBT_SO_GET_INIT_INFO    (EBT_SO_GET_ENTRIES+1)
+#define EBT_SO_GET_INIT_ENTRIES (EBT_SO_GET_INIT_INFO+1)
+#define EBT_SO_GET_MAX          (EBT_SO_GET_INIT_ENTRIES+1)
+
+
+/* blatently stolen from ip_tables.h
+ * fn returns 0 to continue iteration */
+#define EBT_MATCH_ITERATE(e, fn, args...)                   \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry_match *__match;                    \
+                                                           \
+       for (__i = sizeof(struct ebt_entry);                \
+            __i < (e)->watchers_offset;                    \
+            __i += __match->match_size +                   \
+            sizeof(struct ebt_entry_match)) {              \
+               __match = (void *)(e) + __i;                \
+                                                           \
+               __ret = fn(__match , ## args);              \
+               if (__ret != 0)                             \
+                       break;                              \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (e)->watchers_offset)            \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#define EBT_WATCHER_ITERATE(e, fn, args...)                 \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry_watcher *__watcher;                \
+                                                           \
+       for (__i = e->watchers_offset;                      \
+            __i < (e)->target_offset;                      \
+            __i += __watcher->watcher_size +               \
+            sizeof(struct ebt_entry_watcher)) {            \
+               __watcher = (void *)(e) + __i;              \
+                                                           \
+               __ret = fn(__watcher , ## args);            \
+               if (__ret != 0)                             \
+                       break;                              \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (e)->target_offset)              \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#define EBT_ENTRY_ITERATE(entries, size, fn, args...)       \
+({                                                          \
+       unsigned int __i;                                   \
+       int __ret = 0;                                      \
+       struct ebt_entry *__entry;                          \
+                                                           \
+       for (__i = 0; __i < (size);) {                      \
+               __entry = (void *)(entries) + __i;          \
+               __ret = fn(__entry , ## args);              \
+               if (__ret != 0)                             \
+                       break;                              \
+               if (__entry->bitmask != 0)                  \
+                       __i += __entry->next_offset;        \
+               else                                        \
+                       __i += sizeof(struct ebt_entries);  \
+       }                                                   \
+       if (__ret == 0) {                                   \
+               if (__i != (size))                          \
+                       __ret = -EINVAL;                    \
+       }                                                   \
+       __ret;                                              \
+})
+
+#endif /* __LINUX_BRIDGE_EFF_H */
diff --git a/lib/libdss-include/linux/netfilter_decnet.h b/lib/libdss-include/linux/netfilter_decnet.h
new file mode 100644 (file)
index 0000000..f1e80a9
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef __LINUX_DECNET_NETFILTER_H
+#define __LINUX_DECNET_NETFILTER_H
+
+/* DECnet-specific defines for netfilter. 
+ * This file (C) Steve Whitehouse 1999 derived from the
+ * ipv4 netfilter header file which is
+ * (C)1998 Rusty Russell -- This code is GPL.
+ */
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_DN_SRC             0x0001
+/* Dest IP address. */
+#define NFC_DN_DST             0x0002
+/* Input device. */
+#define NFC_DN_IF_IN           0x0004
+/* Output device. */
+#define NFC_DN_IF_OUT          0x0008
+
+/* DECnet Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_DN_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_DN_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_DN_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_DN_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_DN_POST_ROUTING     4
+/* Input Hello Packets */
+#define NF_DN_HELLO            5
+/* Input Routing Packets */
+#define NF_DN_ROUTE            6
+#define NF_DN_NUMHOOKS         7
+
+enum nf_dn_hook_priorities {
+       NF_DN_PRI_FIRST = INT_MIN,
+       NF_DN_PRI_CONNTRACK = -200,
+       NF_DN_PRI_MANGLE = -150,
+       NF_DN_PRI_NAT_DST = -100,
+       NF_DN_PRI_FILTER = 0,
+       NF_DN_PRI_NAT_SRC = 100,
+       NF_DN_PRI_DNRTMSG = 200,
+       NF_DN_PRI_LAST = INT_MAX,
+};
+
+struct nf_dn_rtmsg {
+       int nfdn_ifindex;
+};
+
+#define NFDN_RTMSG(r) ((unsigned char *)(r) + NLMSG_ALIGN(sizeof(struct nf_dn_rtmsg)))
+
+/* backwards compatibility for userspace */
+#define DNRMG_L1_GROUP 0x01
+#define DNRMG_L2_GROUP 0x02
+
+enum {
+       DNRNG_NLGRP_NONE,
+#define DNRNG_NLGRP_NONE       DNRNG_NLGRP_NONE
+       DNRNG_NLGRP_L1,
+#define DNRNG_NLGRP_L1         DNRNG_NLGRP_L1
+       DNRNG_NLGRP_L2,
+#define DNRNG_NLGRP_L2         DNRNG_NLGRP_L2
+       __DNRNG_NLGRP_MAX
+};
+#define DNRNG_NLGRP_MAX        (__DNRNG_NLGRP_MAX - 1)
+
+#endif /*__LINUX_DECNET_NETFILTER_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv4.h b/lib/libdss-include/linux/netfilter_ipv4.h
new file mode 100644 (file)
index 0000000..a5f4dc7
--- /dev/null
@@ -0,0 +1,79 @@
+/* IPv4-specific defines for netfilter. 
+ * (C)1998 Rusty Russell -- This code is GPL.
+ */
+#ifndef __LINUX_IP_NETFILTER_H
+#define __LINUX_IP_NETFILTER_H
+
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_IP_SRC             0x0001
+/* Dest IP address. */
+#define NFC_IP_DST             0x0002
+/* Input device. */
+#define NFC_IP_IF_IN           0x0004
+/* Output device. */
+#define NFC_IP_IF_OUT          0x0008
+/* TOS. */
+#define NFC_IP_TOS             0x0010
+/* Protocol. */
+#define NFC_IP_PROTO           0x0020
+/* IP options. */
+#define NFC_IP_OPTIONS         0x0040
+/* Frag & flags. */
+#define NFC_IP_FRAG            0x0080
+
+/* Per-protocol information: only matters if proto match. */
+/* TCP flags. */
+#define NFC_IP_TCPFLAGS                0x0100
+/* Source port. */
+#define NFC_IP_SRC_PT          0x0200
+/* Dest port. */
+#define NFC_IP_DST_PT          0x0400
+/* Something else about the proto */
+#define NFC_IP_PROTO_UNKNOWN   0x2000
+
+/* IP Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_IP_PRE_ROUTING      0
+/* If the packet is destined for this box. */
+#define NF_IP_LOCAL_IN         1
+/* If the packet is destined for another interface. */
+#define NF_IP_FORWARD          2
+/* Packets coming from a local process. */
+#define NF_IP_LOCAL_OUT                3
+/* Packets about to hit the wire. */
+#define NF_IP_POST_ROUTING     4
+#define NF_IP_NUMHOOKS         5
+
+enum nf_ip_hook_priorities {
+       NF_IP_PRI_FIRST = INT_MIN,
+       NF_IP_PRI_CONNTRACK_DEFRAG = -400,
+       NF_IP_PRI_RAW = -300,
+       NF_IP_PRI_SELINUX_FIRST = -225,
+       NF_IP_PRI_CONNTRACK = -200,
+       NF_IP_PRI_MANGLE = -150,
+       NF_IP_PRI_NAT_DST = -100,
+       NF_IP_PRI_FILTER = 0,
+       NF_IP_PRI_SECURITY = 50,
+       NF_IP_PRI_NAT_SRC = 100,
+       NF_IP_PRI_SELINUX_LAST = 225,
+       NF_IP_PRI_CONNTRACK_HELPER = 300,
+       NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
+       NF_IP_PRI_LAST = INT_MAX,
+};
+
+/* Arguments for setsockopt SOL_IP: */
+/* 2.0 firewalling went from 64 through 71 (and +256, +512, etc). */
+/* 2.2 firewalling (+ masq) went from 64 through 76 */
+/* 2.4 firewalling went 64 through 67. */
+#define SO_ORIGINAL_DST 80
+
+
+#endif /* __LINUX_IP_NETFILTER_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ip_tables.h b/lib/libdss-include/linux/netfilter_ipv4/ip_tables.h
new file mode 100644 (file)
index 0000000..38542b4
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * 25-Jul-1998 Major changes to allow for ip chain table
+ *
+ * 3-Jan-2000 Named tables to allow packet selection for different uses.
+ */
+
+/*
+ *     Format of an IP firewall descriptor
+ *
+ *     src, dst, src_mask, dst_mask are always stored in network byte order.
+ *     flags are stored in host byte order (of course).
+ *     Port numbers are stored in HOST byte order.
+ */
+
+#ifndef _IPTABLES_H
+#define _IPTABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_ipv4.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define ipt_match xt_match
+#define ipt_target xt_target
+#define ipt_table xt_table
+#define ipt_get_revision xt_get_revision
+#define ipt_entry_match xt_entry_match
+#define ipt_entry_target xt_entry_target
+#define ipt_standard_target xt_standard_target
+#define ipt_error_target xt_error_target
+#define ipt_counters xt_counters
+#define IPT_CONTINUE XT_CONTINUE
+#define IPT_RETURN XT_RETURN
+
+/* This group is older than old (iptables < v1.4.0-rc1~89) */
+#include <linux/netfilter/xt_tcpudp.h>
+#define ipt_udp xt_udp
+#define ipt_tcp xt_tcp
+#define IPT_TCP_INV_SRCPT      XT_TCP_INV_SRCPT
+#define IPT_TCP_INV_DSTPT      XT_TCP_INV_DSTPT
+#define IPT_TCP_INV_FLAGS      XT_TCP_INV_FLAGS
+#define IPT_TCP_INV_OPTION     XT_TCP_INV_OPTION
+#define IPT_TCP_INV_MASK       XT_TCP_INV_MASK
+#define IPT_UDP_INV_SRCPT      XT_UDP_INV_SRCPT
+#define IPT_UDP_INV_DSTPT      XT_UDP_INV_DSTPT
+#define IPT_UDP_INV_MASK       XT_UDP_INV_MASK
+
+/* The argument to IPT_SO_ADD_COUNTERS. */
+#define ipt_counters_info xt_counters_info
+/* Standard return verdict, or do jump. */
+#define IPT_STANDARD_TARGET XT_STANDARD_TARGET
+/* Error verdict. */
+#define IPT_ERROR_TARGET XT_ERROR_TARGET
+
+/* fn returns 0 to continue iteration */
+#define IPT_MATCH_ITERATE(e, fn, args...) \
+       XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
+
+/* fn returns 0 to continue iteration */
+#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
+
+/* Yes, Virginia, you have to zero the padding. */
+struct ipt_ip {
+       /* Source and destination IP addr */
+       struct in_addr src, dst;
+       /* Mask for src and dest IP addr */
+       struct in_addr smsk, dmsk;
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Protocol, 0 = ANY */
+       __u16 proto;
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u8 invflags;
+};
+
+/* Values for "flag" field in struct ipt_ip (general ip structure). */
+#define IPT_F_FRAG             0x01    /* Set if rule is a fragment rule */
+#define IPT_F_GOTO             0x02    /* Set if jump is a goto */
+#define IPT_F_MASK             0x03    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct ipt_ip. */
+#define IPT_INV_VIA_IN         0x01    /* Invert the sense of IN IFACE. */
+#define IPT_INV_VIA_OUT                0x02    /* Invert the sense of OUT IFACE */
+#define IPT_INV_TOS            0x04    /* Invert the sense of TOS. */
+#define IPT_INV_SRCIP          0x08    /* Invert the sense of SRC IP. */
+#define IPT_INV_DSTIP          0x10    /* Invert the sense of DST OP. */
+#define IPT_INV_FRAG           0x20    /* Invert the sense of FRAG. */
+#define IPT_INV_PROTO          XT_INV_PROTO
+#define IPT_INV_MASK           0x7F    /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general IP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct ipt_entry {
+       struct ipt_ip ip;
+
+       /* Mark with fields that we care about. */
+       unsigned int nfcache;
+
+       /* Size of ipt_entry + matches */
+       __u16 target_offset;
+       /* Size of ipt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use a raw
+ * socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in.h before adding new number here.
+ */
+#define IPT_BASE_CTL           64
+
+#define IPT_SO_SET_REPLACE     (IPT_BASE_CTL)
+#define IPT_SO_SET_ADD_COUNTERS        (IPT_BASE_CTL + 1)
+#define IPT_SO_SET_MAX         IPT_SO_SET_ADD_COUNTERS
+
+#define IPT_SO_GET_INFO                        (IPT_BASE_CTL)
+#define IPT_SO_GET_ENTRIES             (IPT_BASE_CTL + 1)
+#define IPT_SO_GET_REVISION_MATCH      (IPT_BASE_CTL + 2)
+#define IPT_SO_GET_REVISION_TARGET     (IPT_BASE_CTL + 3)
+#define IPT_SO_GET_MAX                 IPT_SO_GET_REVISION_TARGET
+
+/* ICMP matching stuff */
+struct ipt_icmp {
+       __u8 type;                              /* type to match */
+       __u8 code[2];                           /* range of code */
+       __u8 invflags;                          /* Inverse flags */
+};
+
+/* Values for "inv" field for struct ipt_icmp. */
+#define IPT_ICMP_INV   0x01    /* Invert the sense of type/code test */
+
+/* The argument to IPT_SO_GET_INFO */
+struct ipt_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to IPT_SO_SET_REPLACE. */
+struct ipt_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct ipt_entry entries[0];
+};
+
+/* The argument to IPT_SO_GET_ENTRIES. */
+struct ipt_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct ipt_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *
+ipt_get_target(struct ipt_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+#endif /* _IPTABLES_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_CLUSTERIP.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
new file mode 100644 (file)
index 0000000..eac0f65
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _IPT_CLUSTERIP_H_target
+#define _IPT_CLUSTERIP_H_target
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+enum clusterip_hashmode {
+    CLUSTERIP_HASHMODE_SIP = 0,
+    CLUSTERIP_HASHMODE_SIP_SPT,
+    CLUSTERIP_HASHMODE_SIP_SPT_DPT,
+};
+
+#define CLUSTERIP_HASHMODE_MAX CLUSTERIP_HASHMODE_SIP_SPT_DPT
+
+#define CLUSTERIP_MAX_NODES 16
+
+#define CLUSTERIP_FLAG_NEW 0x00000001
+
+struct clusterip_config;
+
+struct ipt_clusterip_tgt_info {
+
+       __u32 flags;
+
+       /* only relevant for new ones */
+       __u8 clustermac[ETH_ALEN];
+       __u16 num_total_nodes;
+       __u16 num_local_nodes;
+       __u16 local_nodes[CLUSTERIP_MAX_NODES];
+       __u32 hash_mode;
+       __u32 hash_initval;
+
+       /* Used internally by the kernel */
+       struct clusterip_config *config;
+};
+
+#endif /*_IPT_CLUSTERIP_H_target*/
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_ECN.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_ECN.h
new file mode 100644 (file)
index 0000000..bb88d53
--- /dev/null
@@ -0,0 +1,33 @@
+/* Header file for iptables ipt_ECN target
+ *
+ * (C) 2002 by Harald Welte <laforge@gnumonks.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ * 
+ * ipt_ECN.h,v 1.3 2002/05/29 12:17:40 laforge Exp
+*/
+#ifndef _IPT_ECN_TARGET_H
+#define _IPT_ECN_TARGET_H
+
+#include <linux/types.h>
+#include <linux/netfilter/xt_DSCP.h>
+
+#define IPT_ECN_IP_MASK        (~XT_DSCP_MASK)
+
+#define IPT_ECN_OP_SET_IP      0x01    /* set ECN bits of IPv4 header */
+#define IPT_ECN_OP_SET_ECE     0x10    /* set ECE bit of TCP header */
+#define IPT_ECN_OP_SET_CWR     0x20    /* set CWR bit of TCP header */
+
+#define IPT_ECN_OP_MASK                0xce
+
+struct ipt_ECN_info {
+       __u8 operation; /* bitset of operations */
+       __u8 ip_ect;    /* ECT codepoint of IPv4 header, pre-shifted */
+       union {
+               struct {
+                       __u8 ece:1, cwr:1; /* TCP ECT bits */
+               } tcp;
+       } proto;
+};
+
+#endif /* _IPT_ECN_TARGET_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_LOG.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_LOG.h
new file mode 100644 (file)
index 0000000..5d81520
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _IPT_LOG_H
+#define _IPT_LOG_H
+
+#warning "Please update iptables, this file will be removed soon!"
+
+/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
+#define IPT_LOG_TCPSEQ         0x01    /* Log TCP sequence numbers */
+#define IPT_LOG_TCPOPT         0x02    /* Log TCP options */
+#define IPT_LOG_IPOPT          0x04    /* Log IP options */
+#define IPT_LOG_UID            0x08    /* Log UID owning local socket */
+#define IPT_LOG_NFLOG          0x10    /* Unsupported, don't reuse */
+#define IPT_LOG_MACDECODE      0x20    /* Decode MAC header */
+#define IPT_LOG_MASK           0x2f
+
+struct ipt_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /*_IPT_LOG_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_REJECT.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_REJECT.h
new file mode 100644 (file)
index 0000000..4293a1a
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _IPT_REJECT_H
+#define _IPT_REJECT_H
+
+enum ipt_reject_with {
+       IPT_ICMP_NET_UNREACHABLE,
+       IPT_ICMP_HOST_UNREACHABLE,
+       IPT_ICMP_PROT_UNREACHABLE,
+       IPT_ICMP_PORT_UNREACHABLE,
+       IPT_ICMP_ECHOREPLY,
+       IPT_ICMP_NET_PROHIBITED,
+       IPT_ICMP_HOST_PROHIBITED,
+       IPT_TCP_RESET,
+       IPT_ICMP_ADMIN_PROHIBITED
+};
+
+struct ipt_reject_info {
+       enum ipt_reject_with with;      /* reject type */
+};
+
+#endif /*_IPT_REJECT_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_TTL.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_TTL.h
new file mode 100644 (file)
index 0000000..f6ac169
--- /dev/null
@@ -0,0 +1,23 @@
+/* TTL modification module for IP tables
+ * (C) 2000 by Harald Welte <laforge@netfilter.org> */
+
+#ifndef _IPT_TTL_H
+#define _IPT_TTL_H
+
+#include <linux/types.h>
+
+enum {
+       IPT_TTL_SET = 0,
+       IPT_TTL_INC,
+       IPT_TTL_DEC
+};
+
+#define IPT_TTL_MAXMODE        IPT_TTL_DEC
+
+struct ipt_TTL_info {
+       __u8    mode;
+       __u8    ttl;
+};
+
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_ah.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_ah.h
new file mode 100644 (file)
index 0000000..4e02bb0
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _IPT_AH_H
+#define _IPT_AH_H
+
+#include <linux/types.h>
+
+struct ipt_ah {
+       __u32 spis[2];                  /* Security Parameter Index */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+
+
+/* Values for "invflags" field in struct ipt_ah. */
+#define IPT_AH_INV_SPI         0x01    /* Invert the sense of spi. */
+#define IPT_AH_INV_MASK        0x01    /* All possible flags. */
+
+#endif /*_IPT_AH_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_ecn.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_ecn.h
new file mode 100644 (file)
index 0000000..0e0c063
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _IPT_ECN_H
+#define _IPT_ECN_H
+
+#include <linux/netfilter/xt_ecn.h>
+#define ipt_ecn_info xt_ecn_info
+
+enum {
+       IPT_ECN_IP_MASK       = XT_ECN_IP_MASK,
+       IPT_ECN_OP_MATCH_IP   = XT_ECN_OP_MATCH_IP,
+       IPT_ECN_OP_MATCH_ECE  = XT_ECN_OP_MATCH_ECE,
+       IPT_ECN_OP_MATCH_CWR  = XT_ECN_OP_MATCH_CWR,
+       IPT_ECN_OP_MATCH_MASK = XT_ECN_OP_MATCH_MASK,
+};
+
+#endif /* IPT_ECN_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv4/ipt_ttl.h b/lib/libdss-include/linux/netfilter_ipv4/ipt_ttl.h
new file mode 100644 (file)
index 0000000..37bee44
--- /dev/null
@@ -0,0 +1,23 @@
+/* IP tables module for matching the value of the TTL
+ * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
+
+#ifndef _IPT_TTL_H
+#define _IPT_TTL_H
+
+#include <linux/types.h>
+
+enum {
+       IPT_TTL_EQ = 0,         /* equals */
+       IPT_TTL_NE,             /* not equals */
+       IPT_TTL_LT,             /* less than */
+       IPT_TTL_GT,             /* greater than */
+};
+
+
+struct ipt_ttl_info {
+       __u8    mode;
+       __u8    ttl;
+};
+
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_ipv6.h b/lib/libdss-include/linux/netfilter_ipv6.h
new file mode 100644 (file)
index 0000000..8483d1d
--- /dev/null
@@ -0,0 +1,77 @@
+/* IPv6-specific defines for netfilter. 
+ * (C)1998 Rusty Russell -- This code is GPL.
+ * (C)1999 David Jeffery
+ *   this header was blatantly ripped from netfilter_ipv4.h 
+ *   it's amazing what adding a bunch of 6s can do =8^)
+ */
+#ifndef __LINUX_IP6_NETFILTER_H
+#define __LINUX_IP6_NETFILTER_H
+
+
+#include <linux/netfilter.h>
+
+/* only for userspace compatibility */
+
+#include <limits.h> /* for INT_MIN, INT_MAX */
+
+/* IP Cache bits. */
+/* Src IP address. */
+#define NFC_IP6_SRC              0x0001
+/* Dest IP address. */
+#define NFC_IP6_DST              0x0002
+/* Input device. */
+#define NFC_IP6_IF_IN            0x0004
+/* Output device. */
+#define NFC_IP6_IF_OUT           0x0008
+/* TOS. */
+#define NFC_IP6_TOS              0x0010
+/* Protocol. */
+#define NFC_IP6_PROTO            0x0020
+/* IP options. */
+#define NFC_IP6_OPTIONS          0x0040
+/* Frag & flags. */
+#define NFC_IP6_FRAG             0x0080
+
+
+/* Per-protocol information: only matters if proto match. */
+/* TCP flags. */
+#define NFC_IP6_TCPFLAGS         0x0100
+/* Source port. */
+#define NFC_IP6_SRC_PT           0x0200
+/* Dest port. */
+#define NFC_IP6_DST_PT           0x0400
+/* Something else about the proto */
+#define NFC_IP6_PROTO_UNKNOWN    0x2000
+
+/* IP6 Hooks */
+/* After promisc drops, checksum checks. */
+#define NF_IP6_PRE_ROUTING     0
+/* If the packet is destined for this box. */
+#define NF_IP6_LOCAL_IN                1
+/* If the packet is destined for another interface. */
+#define NF_IP6_FORWARD         2
+/* Packets coming from a local process. */
+#define NF_IP6_LOCAL_OUT               3
+/* Packets about to hit the wire. */
+#define NF_IP6_POST_ROUTING    4
+#define NF_IP6_NUMHOOKS                5
+
+
+enum nf_ip6_hook_priorities {
+       NF_IP6_PRI_FIRST = INT_MIN,
+       NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
+       NF_IP6_PRI_RAW = -300,
+       NF_IP6_PRI_SELINUX_FIRST = -225,
+       NF_IP6_PRI_CONNTRACK = -200,
+       NF_IP6_PRI_MANGLE = -150,
+       NF_IP6_PRI_NAT_DST = -100,
+       NF_IP6_PRI_FILTER = 0,
+       NF_IP6_PRI_SECURITY = 50,
+       NF_IP6_PRI_NAT_SRC = 100,
+       NF_IP6_PRI_SELINUX_LAST = 225,
+       NF_IP6_PRI_CONNTRACK_HELPER = 300,
+       NF_IP6_PRI_LAST = INT_MAX,
+};
+
+
+#endif /* __LINUX_IP6_NETFILTER_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6_tables.h b/lib/libdss-include/linux/netfilter_ipv6/ip6_tables.h
new file mode 100644 (file)
index 0000000..640a1d0
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * 25-Jul-1998 Major changes to allow for ip chain table
+ *
+ * 3-Jan-2000 Named tables to allow packet selection for different uses.
+ */
+
+/*
+ *     Format of an IP6 firewall descriptor
+ *
+ *     src, dst, src_mask, dst_mask are always stored in network byte order.
+ *     flags are stored in host byte order (of course).
+ *     Port numbers are stored in HOST byte order.
+ */
+
+#ifndef _IP6_TABLES_H
+#define _IP6_TABLES_H
+
+#include <linux/types.h>
+
+#include <linux/netfilter_ipv6.h>
+
+#include <linux/netfilter/x_tables.h>
+
+#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+#define ip6t_match xt_match
+#define ip6t_target xt_target
+#define ip6t_table xt_table
+#define ip6t_get_revision xt_get_revision
+#define ip6t_entry_match xt_entry_match
+#define ip6t_entry_target xt_entry_target
+#define ip6t_standard_target xt_standard_target
+#define ip6t_error_target xt_error_target
+#define ip6t_counters xt_counters
+#define IP6T_CONTINUE XT_CONTINUE
+#define IP6T_RETURN XT_RETURN
+
+/* Pre-iptables-1.4.0 */
+#include <linux/netfilter/xt_tcpudp.h>
+#define ip6t_tcp xt_tcp
+#define ip6t_udp xt_udp
+#define IP6T_TCP_INV_SRCPT     XT_TCP_INV_SRCPT
+#define IP6T_TCP_INV_DSTPT     XT_TCP_INV_DSTPT
+#define IP6T_TCP_INV_FLAGS     XT_TCP_INV_FLAGS
+#define IP6T_TCP_INV_OPTION    XT_TCP_INV_OPTION
+#define IP6T_TCP_INV_MASK      XT_TCP_INV_MASK
+#define IP6T_UDP_INV_SRCPT     XT_UDP_INV_SRCPT
+#define IP6T_UDP_INV_DSTPT     XT_UDP_INV_DSTPT
+#define IP6T_UDP_INV_MASK      XT_UDP_INV_MASK
+
+#define ip6t_counters_info xt_counters_info
+#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET
+#define IP6T_ERROR_TARGET XT_ERROR_TARGET
+#define IP6T_MATCH_ITERATE(e, fn, args...) \
+       XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args)
+#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
+       XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args)
+
+/* Yes, Virginia, you have to zero the padding. */
+struct ip6t_ip6 {
+       /* Source and destination IP6 addr */
+       struct in6_addr src, dst;               
+       /* Mask for src and dest IP6 addr */
+       struct in6_addr smsk, dmsk;
+       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
+       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
+
+       /* Upper protocol number
+        * - The allowed value is 0 (any) or protocol number of last parsable
+        *   header, which is 50 (ESP), 59 (No Next Header), 135 (MH), or
+        *   the non IPv6 extension headers.
+        * - The protocol numbers of IPv6 extension headers except of ESP and
+        *   MH do not match any packets.
+        * - You also need to set IP6T_FLAGS_PROTO to "flags" to check protocol.
+        */
+       __u16 proto;
+       /* TOS to match iff flags & IP6T_F_TOS */
+       __u8 tos;
+
+       /* Flags word */
+       __u8 flags;
+       /* Inverse flags */
+       __u8 invflags;
+};
+
+/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
+#define IP6T_F_PROTO           0x01    /* Set if rule cares about upper 
+                                          protocols */
+#define IP6T_F_TOS             0x02    /* Match the TOS. */
+#define IP6T_F_GOTO            0x04    /* Set if jump is a goto */
+#define IP6T_F_MASK            0x07    /* All possible flag bits mask. */
+
+/* Values for "inv" field in struct ip6t_ip6. */
+#define IP6T_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
+#define IP6T_INV_VIA_OUT               0x02    /* Invert the sense of OUT IFACE */
+#define IP6T_INV_TOS           0x04    /* Invert the sense of TOS. */
+#define IP6T_INV_SRCIP         0x08    /* Invert the sense of SRC IP. */
+#define IP6T_INV_DSTIP         0x10    /* Invert the sense of DST OP. */
+#define IP6T_INV_FRAG          0x20    /* Invert the sense of FRAG. */
+#define IP6T_INV_PROTO         XT_INV_PROTO
+#define IP6T_INV_MASK          0x7F    /* All possible flag bits mask. */
+
+/* This structure defines each of the firewall rules.  Consists of 3
+   parts which are 1) general IP header stuff 2) match specific
+   stuff 3) the target to perform if the rule matches */
+struct ip6t_entry {
+       struct ip6t_ip6 ipv6;
+
+       /* Mark with fields that we care about. */
+       unsigned int nfcache;
+
+       /* Size of ipt_entry + matches */
+       __u16 target_offset;
+       /* Size of ipt_entry + matches + target */
+       __u16 next_offset;
+
+       /* Back pointer */
+       unsigned int comefrom;
+
+       /* Packet and byte counters. */
+       struct xt_counters counters;
+
+       /* The matches (if any), then the target. */
+       unsigned char elems[0];
+};
+
+/* Standard entry */
+struct ip6t_standard {
+       struct ip6t_entry entry;
+       struct xt_standard_target target;
+};
+
+struct ip6t_error {
+       struct ip6t_entry entry;
+       struct xt_error_target target;
+};
+
+#define IP6T_ENTRY_INIT(__size)                                                       \
+{                                                                             \
+       .target_offset  = sizeof(struct ip6t_entry),                           \
+       .next_offset    = (__size),                                            \
+}
+
+#define IP6T_STANDARD_INIT(__verdict)                                         \
+{                                                                             \
+       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_standard)),       \
+       .target         = XT_TARGET_INIT(XT_STANDARD_TARGET,                   \
+                                        sizeof(struct xt_standard_target)),   \
+       .target.verdict = -(__verdict) - 1,                                    \
+}
+
+#define IP6T_ERROR_INIT                                                               \
+{                                                                             \
+       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_error)),          \
+       .target         = XT_TARGET_INIT(XT_ERROR_TARGET,                      \
+                                        sizeof(struct xt_error_target)),      \
+       .target.errorname = "ERROR",                                           \
+}
+
+/*
+ * New IP firewall options for [gs]etsockopt at the RAW IP level.
+ * Unlike BSD Linux inherits IP options so you don't have to use
+ * a raw socket for this. Instead we check rights in the calls.
+ *
+ * ATTENTION: check linux/in6.h before adding new number here.
+ */
+#define IP6T_BASE_CTL                  64
+
+#define IP6T_SO_SET_REPLACE            (IP6T_BASE_CTL)
+#define IP6T_SO_SET_ADD_COUNTERS       (IP6T_BASE_CTL + 1)
+#define IP6T_SO_SET_MAX                        IP6T_SO_SET_ADD_COUNTERS
+
+#define IP6T_SO_GET_INFO               (IP6T_BASE_CTL)
+#define IP6T_SO_GET_ENTRIES            (IP6T_BASE_CTL + 1)
+#define IP6T_SO_GET_REVISION_MATCH     (IP6T_BASE_CTL + 4)
+#define IP6T_SO_GET_REVISION_TARGET    (IP6T_BASE_CTL + 5)
+#define IP6T_SO_GET_MAX                        IP6T_SO_GET_REVISION_TARGET
+
+/* obtain original address if REDIRECT'd connection */
+#define IP6T_SO_ORIGINAL_DST            80
+
+/* ICMP matching stuff */
+struct ip6t_icmp {
+       __u8 type;                              /* type to match */
+       __u8 code[2];                           /* range of code */
+       __u8 invflags;                          /* Inverse flags */
+};
+
+/* Values for "inv" field for struct ipt_icmp. */
+#define IP6T_ICMP_INV  0x01    /* Invert the sense of type/code test */
+
+/* The argument to IP6T_SO_GET_INFO */
+struct ip6t_getinfo {
+       /* Which table: caller fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Kernel fills these in. */
+       /* Which hook entry points are valid: bitmask */
+       unsigned int valid_hooks;
+
+       /* Hook entry points: one per netfilter hook. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Size of entries. */
+       unsigned int size;
+};
+
+/* The argument to IP6T_SO_SET_REPLACE. */
+struct ip6t_replace {
+       /* Which table. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* Which hook entry points are valid: bitmask.  You can't
+           change this. */
+       unsigned int valid_hooks;
+
+       /* Number of entries */
+       unsigned int num_entries;
+
+       /* Total size of new entries */
+       unsigned int size;
+
+       /* Hook entry points. */
+       unsigned int hook_entry[NF_INET_NUMHOOKS];
+
+       /* Underflow points. */
+       unsigned int underflow[NF_INET_NUMHOOKS];
+
+       /* Information about old entries: */
+       /* Number of counters (must be equal to current number of entries). */
+       unsigned int num_counters;
+       /* The old entries' counters. */
+       struct xt_counters *counters;
+
+       /* The entries (hang off end: not really an array). */
+       struct ip6t_entry entries[0];
+};
+
+/* The argument to IP6T_SO_GET_ENTRIES. */
+struct ip6t_get_entries {
+       /* Which table: user fills this in. */
+       char name[XT_TABLE_MAXNAMELEN];
+
+       /* User fills this in: total entry size. */
+       unsigned int size;
+
+       /* The entries. */
+       struct ip6t_entry entrytable[0];
+};
+
+/* Helper functions */
+static __inline__ struct xt_entry_target *
+ip6t_get_target(struct ip6t_entry *e)
+{
+       return (void *)e + e->target_offset;
+}
+
+/*
+ *     Main firewall chains definitions and global var's definitions.
+ */
+
+#endif /* _IP6_TABLES_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_HL.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_HL.h
new file mode 100644 (file)
index 0000000..ebd8ead
--- /dev/null
@@ -0,0 +1,24 @@
+/* Hop Limit modification module for ip6tables
+ * Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ * Based on HW's TTL module */
+
+#ifndef _IP6T_HL_H
+#define _IP6T_HL_H
+
+#include <linux/types.h>
+
+enum {
+       IP6T_HL_SET = 0,
+       IP6T_HL_INC,
+       IP6T_HL_DEC
+};
+
+#define IP6T_HL_MAXMODE        IP6T_HL_DEC
+
+struct ip6t_HL_info {
+       __u8    mode;
+       __u8    hop_limit;
+};
+
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_LOG.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_LOG.h
new file mode 100644 (file)
index 0000000..3dd0bc4
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _IP6T_LOG_H
+#define _IP6T_LOG_H
+
+#warning "Please update iptables, this file will be removed soon!"
+
+/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
+#define IP6T_LOG_TCPSEQ                0x01    /* Log TCP sequence numbers */
+#define IP6T_LOG_TCPOPT                0x02    /* Log TCP options */
+#define IP6T_LOG_IPOPT         0x04    /* Log IP options */
+#define IP6T_LOG_UID           0x08    /* Log UID owning local socket */
+#define IP6T_LOG_NFLOG         0x10    /* Unsupported, don't use */
+#define IP6T_LOG_MACDECODE     0x20    /* Decode MAC header */
+#define IP6T_LOG_MASK          0x2f
+
+struct ip6t_log_info {
+       unsigned char level;
+       unsigned char logflags;
+       char prefix[30];
+};
+
+#endif /*_IPT_LOG_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_NPT.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_NPT.h
new file mode 100644 (file)
index 0000000..f763355
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __NETFILTER_IP6T_NPT
+#define __NETFILTER_IP6T_NPT
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+
+struct ip6t_npt_tginfo {
+       union nf_inet_addr      src_pfx;
+       union nf_inet_addr      dst_pfx;
+       __u8                    src_pfx_len;
+       __u8                    dst_pfx_len;
+       /* Used internally by the kernel */
+       __sum16                 adjustment;
+};
+
+#endif /* __NETFILTER_IP6T_NPT */
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_REJECT.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_REJECT.h
new file mode 100644 (file)
index 0000000..cd2e940
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _IP6T_REJECT_H
+#define _IP6T_REJECT_H
+
+#include <linux/types.h>
+
+enum ip6t_reject_with {
+       IP6T_ICMP6_NO_ROUTE,
+       IP6T_ICMP6_ADM_PROHIBITED,
+       IP6T_ICMP6_NOT_NEIGHBOUR,
+       IP6T_ICMP6_ADDR_UNREACH,
+       IP6T_ICMP6_PORT_UNREACH,
+       IP6T_ICMP6_ECHOREPLY,
+       IP6T_TCP_RESET,
+       IP6T_ICMP6_POLICY_FAIL,
+       IP6T_ICMP6_REJECT_ROUTE
+};
+
+struct ip6t_reject_info {
+       __u32   with;   /* reject type */
+};
+
+#endif /*_IP6T_REJECT_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_ah.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_ah.h
new file mode 100644 (file)
index 0000000..5da2b65
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _IP6T_AH_H
+#define _IP6T_AH_H
+
+#include <linux/types.h>
+
+struct ip6t_ah {
+       __u32 spis[2];                  /* Security Parameter Index */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  hdrres;                   /* Test of the Reserved Filed */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+#define IP6T_AH_SPI 0x01
+#define IP6T_AH_LEN 0x02
+#define IP6T_AH_RES 0x04
+
+/* Values for "invflags" field in struct ip6t_ah. */
+#define IP6T_AH_INV_SPI                0x01    /* Invert the sense of spi. */
+#define IP6T_AH_INV_LEN                0x02    /* Invert the sense of length. */
+#define IP6T_AH_INV_MASK       0x03    /* All possible flags. */
+
+#endif /*_IP6T_AH_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_frag.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_frag.h
new file mode 100644 (file)
index 0000000..dfd8bc2
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _IP6T_FRAG_H
+#define _IP6T_FRAG_H
+
+#include <linux/types.h>
+
+struct ip6t_frag {
+       __u32 ids[2];                   /* Identification range */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  flags;                    /* Flags */
+       __u8  invflags;                 /* Inverse flags */
+};
+
+#define IP6T_FRAG_IDS          0x01
+#define IP6T_FRAG_LEN          0x02
+#define IP6T_FRAG_RES          0x04
+#define IP6T_FRAG_FST          0x08
+#define IP6T_FRAG_MF           0x10
+#define IP6T_FRAG_NMF                  0x20
+
+/* Values for "invflags" field in struct ip6t_frag. */
+#define IP6T_FRAG_INV_IDS      0x01    /* Invert the sense of ids. */
+#define IP6T_FRAG_INV_LEN      0x02    /* Invert the sense of length. */
+#define IP6T_FRAG_INV_MASK     0x03    /* All possible flags. */
+
+#endif /*_IP6T_FRAG_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_hl.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_hl.h
new file mode 100644 (file)
index 0000000..6e76dbc
--- /dev/null
@@ -0,0 +1,24 @@
+/* ip6tables module for matching the Hop Limit value
+ * Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ * Based on HW's ttl module */
+
+#ifndef _IP6T_HL_H
+#define _IP6T_HL_H
+
+#include <linux/types.h>
+
+enum {
+       IP6T_HL_EQ = 0,         /* equals */
+       IP6T_HL_NE,             /* not equals */
+       IP6T_HL_LT,             /* less than */
+       IP6T_HL_GT,             /* greater than */
+};
+
+
+struct ip6t_hl_info {
+       __u8    mode;
+       __u8    hop_limit;
+};
+
+
+#endif
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_ipv6header.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_ipv6header.h
new file mode 100644 (file)
index 0000000..efae3a2
--- /dev/null
@@ -0,0 +1,28 @@
+/* ipv6header match - matches IPv6 packets based
+on whether they contain certain headers */
+
+/* Original idea: Brad Chapman 
+ * Rewritten by: Andras Kis-Szabo <kisza@sch.bme.hu> */
+
+
+#ifndef __IPV6HEADER_H
+#define __IPV6HEADER_H
+
+#include <linux/types.h>
+
+struct ip6t_ipv6header_info {
+       __u8 matchflags;
+       __u8 invflags;
+       __u8 modeflag;
+};
+
+#define MASK_HOPOPTS    128
+#define MASK_DSTOPTS    64
+#define MASK_ROUTING    32
+#define MASK_FRAGMENT   16
+#define MASK_AH         8
+#define MASK_ESP        4
+#define MASK_NONE       2
+#define MASK_PROTO      1
+
+#endif /* __IPV6HEADER_H */
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_mh.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_mh.h
new file mode 100644 (file)
index 0000000..a7729a5
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _IP6T_MH_H
+#define _IP6T_MH_H
+
+#include <linux/types.h>
+
+/* MH matching stuff */
+struct ip6t_mh {
+       __u8 types[2];  /* MH type range */
+       __u8 invflags;  /* Inverse flags */
+};
+
+/* Values for "invflags" field in struct ip6t_mh. */
+#define IP6T_MH_INV_TYPE       0x01    /* Invert the sense of type. */
+#define IP6T_MH_INV_MASK       0x01    /* All possible flags. */
+
+#endif /*_IP6T_MH_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_opts.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_opts.h
new file mode 100644 (file)
index 0000000..17d419a
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _IP6T_OPTS_H
+#define _IP6T_OPTS_H
+
+#include <linux/types.h>
+
+#define IP6T_OPTS_OPTSNR 16
+
+struct ip6t_opts {
+       __u32 hdrlen;                   /* Header Length */
+       __u8 flags;                             /*  */
+       __u8 invflags;                  /* Inverse flags */
+       __u16 opts[IP6T_OPTS_OPTSNR];   /* opts */
+       __u8 optsnr;                    /* Nr of OPts */
+};
+
+#define IP6T_OPTS_LEN          0x01
+#define IP6T_OPTS_OPTS                 0x02
+#define IP6T_OPTS_NSTRICT      0x04
+
+/* Values for "invflags" field in struct ip6t_rt. */
+#define IP6T_OPTS_INV_LEN      0x01    /* Invert the sense of length. */
+#define IP6T_OPTS_INV_MASK     0x01    /* All possible flags. */
+
+#endif /*_IP6T_OPTS_H*/
diff --git a/lib/libdss-include/linux/netfilter_ipv6/ip6t_rt.h b/lib/libdss-include/linux/netfilter_ipv6/ip6t_rt.h
new file mode 100644 (file)
index 0000000..7605a5f
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _IP6T_RT_H
+#define _IP6T_RT_H
+
+#include <linux/types.h>
+/*#include <linux/in6.h>*/
+
+#define IP6T_RT_HOPS 16
+
+struct ip6t_rt {
+       __u32 rt_type;                  /* Routing Type */
+       __u32 segsleft[2];                      /* Segments Left */
+       __u32 hdrlen;                   /* Header Length */
+       __u8  flags;                    /*  */
+       __u8  invflags;                 /* Inverse flags */
+       struct in6_addr addrs[IP6T_RT_HOPS];    /* Hops */
+       __u8 addrnr;                    /* Nr of Addresses */
+};
+
+#define IP6T_RT_TYP            0x01
+#define IP6T_RT_SGS            0x02
+#define IP6T_RT_LEN            0x04
+#define IP6T_RT_RES            0x08
+#define IP6T_RT_FST_MASK       0x30
+#define IP6T_RT_FST            0x10
+#define IP6T_RT_FST_NSTRICT    0x20
+
+/* Values for "invflags" field in struct ip6t_rt. */
+#define IP6T_RT_INV_TYP                0x01    /* Invert the sense of type. */
+#define IP6T_RT_INV_SGS                0x02    /* Invert the sense of Segments. */
+#define IP6T_RT_INV_LEN                0x04    /* Invert the sense of length. */
+#define IP6T_RT_INV_MASK       0x07    /* All possible flags. */
+
+#endif /*_IP6T_RT_H*/
diff --git a/lib/libdss-include/linux/netlink.h b/lib/libdss-include/linux/netlink.h
new file mode 100644 (file)
index 0000000..8a7ca5c
--- /dev/null
@@ -0,0 +1,189 @@
+#ifndef __LINUX_NETLINK_H
+#define __LINUX_NETLINK_H
+
+#include <linux/kernel.h>
+#include <linux/socket.h> /* for __kernel_sa_family_t */
+#include <linux/types.h>
+
+#define NETLINK_ROUTE          0       /* Routing/device hook                          */
+#define NETLINK_UNUSED         1       /* Unused number                                */
+#define NETLINK_USERSOCK       2       /* Reserved for user mode socket protocols      */
+#define NETLINK_FIREWALL       3       /* Unused number, formerly ip_queue             */
+#define NETLINK_SOCK_DIAG      4       /* socket monitoring                            */
+#define NETLINK_NFLOG          5       /* netfilter/iptables ULOG */
+#define NETLINK_XFRM           6       /* ipsec */
+#define NETLINK_SELINUX                7       /* SELinux event notifications */
+#define NETLINK_ISCSI          8       /* Open-iSCSI */
+#define NETLINK_AUDIT          9       /* auditing */
+#define NETLINK_FIB_LOOKUP     10      
+#define NETLINK_CONNECTOR      11
+#define NETLINK_NETFILTER      12      /* netfilter subsystem */
+#define NETLINK_IP6_FW         13
+#define NETLINK_DNRTMSG                14      /* DECnet routing messages */
+#define NETLINK_KOBJECT_UEVENT 15      /* Kernel messages to userspace */
+#define NETLINK_GENERIC                16
+/* leave room for NETLINK_DM (DM Events) */
+#define NETLINK_SCSITRANSPORT  18      /* SCSI Transports */
+#define NETLINK_ECRYPTFS       19
+#define NETLINK_RDMA           20
+#define NETLINK_CRYPTO         21      /* Crypto layer */
+
+#define NETLINK_INET_DIAG      NETLINK_SOCK_DIAG
+
+#define MAX_LINKS 32           
+
+struct sockaddr_nl {
+       __kernel_sa_family_t    nl_family;      /* AF_NETLINK   */
+       unsigned short  nl_pad;         /* zero         */
+       __u32           nl_pid;         /* port ID      */
+               __u32           nl_groups;      /* multicast groups mask */
+};
+
+struct nlmsghdr {
+       __u32           nlmsg_len;      /* Length of message including header */
+       __u16           nlmsg_type;     /* Message content */
+       __u16           nlmsg_flags;    /* Additional flags */
+       __u32           nlmsg_seq;      /* Sequence number */
+       __u32           nlmsg_pid;      /* Sending process port ID */
+};
+
+/* Flags values */
+
+#define NLM_F_REQUEST          1       /* It is request message.       */
+#define NLM_F_MULTI            2       /* Multipart message, terminated by NLMSG_DONE */
+#define NLM_F_ACK              4       /* Reply with ack, with zero or error code */
+#define NLM_F_ECHO             8       /* Echo this request            */
+#define NLM_F_DUMP_INTR                16      /* Dump was inconsistent due to sequence change */
+#define NLM_F_DUMP_FILTERED    32      /* Dump was filtered as requested */
+
+/* Modifiers to GET request */
+#define NLM_F_ROOT     0x100   /* specify tree root    */
+#define NLM_F_MATCH    0x200   /* return all matching  */
+#define NLM_F_ATOMIC   0x400   /* atomic GET           */
+#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
+
+/* Modifiers to NEW request */
+#define NLM_F_REPLACE  0x100   /* Override existing            */
+#define NLM_F_EXCL     0x200   /* Do not touch, if it exists   */
+#define NLM_F_CREATE   0x400   /* Create, if it does not exist */
+#define NLM_F_APPEND   0x800   /* Add to end of list           */
+
+/*
+   4.4BSD ADD          NLM_F_CREATE|NLM_F_EXCL
+   4.4BSD CHANGE       NLM_F_REPLACE
+
+   True CHANGE         NLM_F_CREATE|NLM_F_REPLACE
+   Append              NLM_F_CREATE
+   Check               NLM_F_EXCL
+ */
+
+#define NLMSG_ALIGNTO  4U
+#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
+#define NLMSG_HDRLEN    ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
+#define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN)
+#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
+#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
+#define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
+                                 (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
+#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len <= (len))
+#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
+
+#define NLMSG_NOOP             0x1     /* Nothing.             */
+#define NLMSG_ERROR            0x2     /* Error                */
+#define NLMSG_DONE             0x3     /* End of a dump        */
+#define NLMSG_OVERRUN          0x4     /* Data lost            */
+
+#define NLMSG_MIN_TYPE         0x10    /* < 0x10: reserved control messages */
+
+struct nlmsgerr {
+       int             error;
+       struct nlmsghdr msg;
+};
+
+#define NETLINK_ADD_MEMBERSHIP         1
+#define NETLINK_DROP_MEMBERSHIP                2
+#define NETLINK_PKTINFO                        3
+#define NETLINK_BROADCAST_ERROR                4
+#define NETLINK_NO_ENOBUFS             5
+#define NETLINK_RX_RING                        6
+#define NETLINK_TX_RING                        7
+#define NETLINK_LISTEN_ALL_NSID                8
+#define NETLINK_LIST_MEMBERSHIPS       9
+#define NETLINK_CAP_ACK                        10
+
+struct nl_pktinfo {
+       __u32   group;
+};
+
+struct nl_mmap_req {
+       unsigned int    nm_block_size;
+       unsigned int    nm_block_nr;
+       unsigned int    nm_frame_size;
+       unsigned int    nm_frame_nr;
+};
+
+struct nl_mmap_hdr {
+       unsigned int    nm_status;
+       unsigned int    nm_len;
+       __u32           nm_group;
+       /* credentials */
+       __u32           nm_pid;
+       __u32           nm_uid;
+       __u32           nm_gid;
+};
+
+enum nl_mmap_status {
+       NL_MMAP_STATUS_UNUSED,
+       NL_MMAP_STATUS_RESERVED,
+       NL_MMAP_STATUS_VALID,
+       NL_MMAP_STATUS_COPY,
+       NL_MMAP_STATUS_SKIP,
+};
+
+#define NL_MMAP_MSG_ALIGNMENT          NLMSG_ALIGNTO
+#define NL_MMAP_MSG_ALIGN(sz)          __ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
+#define NL_MMAP_HDRLEN                 NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
+
+#define NET_MAJOR 36           /* Major 36 is reserved for networking                                          */
+
+enum {
+       NETLINK_UNCONNECTED = 0,
+       NETLINK_CONNECTED,
+};
+
+/*
+ *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ * |        Header       | Pad |     Payload       | Pad |
+ * |   (struct nlattr)   | ing |                   | ing |
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ *  <-------------- nlattr->nla_len -------------->
+ */
+
+struct nlattr {
+       __u16           nla_len;
+       __u16           nla_type;
+};
+
+/*
+ * nla_type (16 bits)
+ * +---+---+-------------------------------+
+ * | N | O | Attribute Type                |
+ * +---+---+-------------------------------+
+ * N := Carries nested attributes
+ * O := Payload stored in network byte order
+ *
+ * Note: The N and O flag are mutually exclusive.
+ */
+#define NLA_F_NESTED           (1 << 15)
+#define NLA_F_NET_BYTEORDER    (1 << 14)
+#define NLA_TYPE_MASK          ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
+
+#define NLA_ALIGNTO            4
+#define NLA_ALIGN(len)         (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
+#define NLA_HDRLEN             ((int) NLA_ALIGN(sizeof(struct nlattr)))
+
+
+#endif /* __LINUX_NETLINK_H */
diff --git a/lib/libdss-include/linux/netlink_diag.h b/lib/libdss-include/linux/netlink_diag.h
new file mode 100644 (file)
index 0000000..f2159d3
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __NETLINK_DIAG_H__
+#define __NETLINK_DIAG_H__
+
+#include <linux/types.h>
+
+struct netlink_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   ndiag_ino;
+       __u32   ndiag_show;
+       __u32   ndiag_cookie[2];
+};
+
+struct netlink_diag_msg {
+       __u8    ndiag_family;
+       __u8    ndiag_type;
+       __u8    ndiag_protocol;
+       __u8    ndiag_state;
+
+       __u32   ndiag_portid;
+       __u32   ndiag_dst_portid;
+       __u32   ndiag_dst_group;
+       __u32   ndiag_ino;
+       __u32   ndiag_cookie[2];
+};
+
+struct netlink_diag_ring {
+       __u32   ndr_block_size;
+       __u32   ndr_block_nr;
+       __u32   ndr_frame_size;
+       __u32   ndr_frame_nr;
+};
+
+enum {
+       /* NETLINK_DIAG_NONE, standard nl API requires this attribute!  */
+       NETLINK_DIAG_MEMINFO,
+       NETLINK_DIAG_GROUPS,
+       NETLINK_DIAG_RX_RING,
+       NETLINK_DIAG_TX_RING,
+
+       __NETLINK_DIAG_MAX,
+};
+
+#define NETLINK_DIAG_MAX (__NETLINK_DIAG_MAX - 1)
+
+#define NDIAG_PROTO_ALL                ((__u8) ~0)
+
+#define NDIAG_SHOW_MEMINFO     0x00000001 /* show memory info of a socket */
+#define NDIAG_SHOW_GROUPS      0x00000002 /* show groups of a netlink socket */
+#define NDIAG_SHOW_RING_CFG    0x00000004 /* show ring configuration */
+
+#endif
diff --git a/lib/libdss-include/linux/netrom.h b/lib/libdss-include/linux/netrom.h
new file mode 100644 (file)
index 0000000..af7313c
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * These are the public elements of the Linux kernel NET/ROM implementation.
+ * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
+ * definition of the ax25_address structure.
+ */
+
+#ifndef        NETROM_KERNEL_H
+#define        NETROM_KERNEL_H
+
+#include <linux/ax25.h>
+
+#define NETROM_MTU     236
+
+#define NETROM_T1      1
+#define NETROM_T2      2
+#define NETROM_N2      3
+#define        NETROM_T4       6
+#define        NETROM_IDLE     7
+
+#define        SIOCNRDECOBS            (SIOCPROTOPRIVATE+2)
+
+struct nr_route_struct {
+#define        NETROM_NEIGH    0
+#define        NETROM_NODE     1
+       int             type;
+       ax25_address    callsign;
+       char            device[16];
+       unsigned int    quality;
+       char            mnemonic[7];
+       ax25_address    neighbour;
+       unsigned int    obs_count;
+       unsigned int    ndigis;
+       ax25_address    digipeaters[AX25_MAX_DIGIS];
+};
+
+#endif
diff --git a/lib/libdss-include/linux/nfc.h b/lib/libdss-include/linux/nfc.h
new file mode 100644 (file)
index 0000000..399f39f
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2011 Instituto Nokia de Tecnologia
+ *
+ * Authors:
+ *    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
+ *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef __LINUX_NFC_H
+#define __LINUX_NFC_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+#define NFC_GENL_NAME "nfc"
+#define NFC_GENL_VERSION 1
+
+#define NFC_GENL_MCAST_EVENT_NAME "events"
+
+/**
+ * enum nfc_commands - supported nfc commands
+ *
+ * @NFC_CMD_UNSPEC: unspecified command
+ *
+ * @NFC_CMD_GET_DEVICE: request information about a device (requires
+ *     %NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices
+ * @NFC_CMD_DEV_UP: turn on the nfc device
+ *     (requires %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_DEV_DOWN: turn off the nfc device
+ *     (requires %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_START_POLL: start polling for targets using the given protocols
+ *     (requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS)
+ * @NFC_CMD_STOP_POLL: stop polling for targets (requires
+ *     %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires
+ *     %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found
+ *     (it sends %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred
+ *     (it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and
+ *     %NFC_ATTR_PROTOCOLS)
+ * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed
+ *     (it sends %NFC_ATTR_DEVICE_INDEX)
+ * @NFC_EVENT_TM_ACTIVATED: event emitted when the adapter is activated in
+ *      target mode.
+ * @NFC_EVENT_DEVICE_DEACTIVATED: event emitted when the adapter is deactivated
+ *      from target mode.
+ * @NFC_CMD_LLC_GET_PARAMS: request LTO, RW, and MIUX parameters for a device
+ * @NFC_CMD_LLC_SET_PARAMS: set one or more of LTO, RW, and MIUX parameters for
+ *     a device. LTO must be set before the link is up otherwise -EINPROGRESS
+ *     is returned. RW and MIUX can be set at anytime and will be passed in
+ *     subsequent CONNECT and CC messages.
+ *     If one of the passed parameters is wrong none is set and -EINVAL is
+ *     returned.
+ * @NFC_CMD_ENABLE_SE: Enable the physical link to a specific secure element.
+ *     Once enabled a secure element will handle card emulation mode, i.e.
+ *     starting a poll from a device which has a secure element enabled means
+ *     we want to do SE based card emulation.
+ * @NFC_CMD_DISABLE_SE: Disable the physical link to a specific secure element.
+ * @NFC_CMD_FW_DOWNLOAD: Request to Load/flash firmware, or event to inform
+ *     that some firmware was loaded
+ * @NFC_EVENT_SE_ADDED: Event emitted when a new secure element is discovered.
+ *     This typically will be sent whenever a new NFC controller with either
+ *     an embedded SE or an UICC one connected to it through SWP.
+ * @NFC_EVENT_SE_REMOVED: Event emitted when a secure element is removed from
+ *     the system, as a consequence of e.g. an NFC controller being unplugged.
+ * @NFC_EVENT_SE_CONNECTIVITY: This event is emitted whenever a secure element
+ *     is requesting connectivity access. For example a UICC SE may need to
+ *     talk with a sleeping modem and will notify this need by sending this
+ *     event. It is then up to userspace to decide if it will wake the modem
+ *     up or not.
+ * @NFC_EVENT_SE_TRANSACTION: This event is sent when an application running on
+ *     a specific SE notifies us about the end of a transaction. The parameter
+ *     for this event is the application ID (AID).
+ * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller.
+ * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element.
+ * @NFC_CMD_ACTIVATE_TARGET: Request NFC controller to reactivate target.
+ * @NFC_CMD_VENDOR: Vendor specific command, to be implemented directly
+ *     from the driver in order to support hardware specific operations.
+ */
+enum nfc_commands {
+       NFC_CMD_UNSPEC,
+       NFC_CMD_GET_DEVICE,
+       NFC_CMD_DEV_UP,
+       NFC_CMD_DEV_DOWN,
+       NFC_CMD_DEP_LINK_UP,
+       NFC_CMD_DEP_LINK_DOWN,
+       NFC_CMD_START_POLL,
+       NFC_CMD_STOP_POLL,
+       NFC_CMD_GET_TARGET,
+       NFC_EVENT_TARGETS_FOUND,
+       NFC_EVENT_DEVICE_ADDED,
+       NFC_EVENT_DEVICE_REMOVED,
+       NFC_EVENT_TARGET_LOST,
+       NFC_EVENT_TM_ACTIVATED,
+       NFC_EVENT_TM_DEACTIVATED,
+       NFC_CMD_LLC_GET_PARAMS,
+       NFC_CMD_LLC_SET_PARAMS,
+       NFC_CMD_ENABLE_SE,
+       NFC_CMD_DISABLE_SE,
+       NFC_CMD_LLC_SDREQ,
+       NFC_EVENT_LLC_SDRES,
+       NFC_CMD_FW_DOWNLOAD,
+       NFC_EVENT_SE_ADDED,
+       NFC_EVENT_SE_REMOVED,
+       NFC_EVENT_SE_CONNECTIVITY,
+       NFC_EVENT_SE_TRANSACTION,
+       NFC_CMD_GET_SE,
+       NFC_CMD_SE_IO,
+       NFC_CMD_ACTIVATE_TARGET,
+       NFC_CMD_VENDOR,
+/* private: internal use only */
+       __NFC_CMD_AFTER_LAST
+};
+#define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1)
+
+/**
+ * enum nfc_attrs - supported nfc attributes
+ *
+ * @NFC_ATTR_UNSPEC: unspecified attribute
+ *
+ * @NFC_ATTR_DEVICE_INDEX: index of nfc device
+ * @NFC_ATTR_DEVICE_NAME: device name, max 8 chars
+ * @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from
+ *     NFC_PROTO_*_MASK constants
+ * @NFC_ATTR_TARGET_INDEX: index of the nfc target
+ * @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID
+ * @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the
+ *     target is not NFC-Forum compliant)
+ * @NFC_ATTR_TARGET_NFCID1: NFC-A targets identifier, max 10 bytes
+ * @NFC_ATTR_TARGET_SENSB_RES: NFC-B targets extra information, max 12 bytes
+ * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes
+ * @NFC_ATTR_COMM_MODE: Passive or active mode
+ * @NFC_ATTR_RF_MODE: Initiator or target
+ * @NFC_ATTR_IM_PROTOCOLS: Initiator mode protocols to poll for
+ * @NFC_ATTR_TM_PROTOCOLS: Target mode protocols to listen for
+ * @NFC_ATTR_LLC_PARAM_LTO: Link TimeOut parameter
+ * @NFC_ATTR_LLC_PARAM_RW: Receive Window size parameter
+ * @NFC_ATTR_LLC_PARAM_MIUX: MIU eXtension parameter
+ * @NFC_ATTR_SE: Available Secure Elements
+ * @NFC_ATTR_FIRMWARE_NAME: Free format firmware version
+ * @NFC_ATTR_SE_INDEX: Secure element index
+ * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED)
+ * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status
+ * @NFC_ATTR_APDU: Secure element APDU
+ * @NFC_ATTR_TARGET_ISO15693_DSFID: ISO 15693 Data Storage Format Identifier
+ * @NFC_ATTR_TARGET_ISO15693_UID: ISO 15693 Unique Identifier
+ * @NFC_ATTR_SE_PARAMS: Parameters data from an evt_transaction
+ * @NFC_ATTR_VENDOR_ID: NFC manufacturer unique ID, typically an OUI
+ * @NFC_ATTR_VENDOR_SUBCMD: Vendor specific sub command
+ * @NFC_ATTR_VENDOR_DATA: Vendor specific data, to be optionally passed
+ *     to a vendor specific command implementation
+ */
+enum nfc_attrs {
+       NFC_ATTR_UNSPEC,
+       NFC_ATTR_DEVICE_INDEX,
+       NFC_ATTR_DEVICE_NAME,
+       NFC_ATTR_PROTOCOLS,
+       NFC_ATTR_TARGET_INDEX,
+       NFC_ATTR_TARGET_SENS_RES,
+       NFC_ATTR_TARGET_SEL_RES,
+       NFC_ATTR_TARGET_NFCID1,
+       NFC_ATTR_TARGET_SENSB_RES,
+       NFC_ATTR_TARGET_SENSF_RES,
+       NFC_ATTR_COMM_MODE,
+       NFC_ATTR_RF_MODE,
+       NFC_ATTR_DEVICE_POWERED,
+       NFC_ATTR_IM_PROTOCOLS,
+       NFC_ATTR_TM_PROTOCOLS,
+       NFC_ATTR_LLC_PARAM_LTO,
+       NFC_ATTR_LLC_PARAM_RW,
+       NFC_ATTR_LLC_PARAM_MIUX,
+       NFC_ATTR_SE,
+       NFC_ATTR_LLC_SDP,
+       NFC_ATTR_FIRMWARE_NAME,
+       NFC_ATTR_SE_INDEX,
+       NFC_ATTR_SE_TYPE,
+       NFC_ATTR_SE_AID,
+       NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS,
+       NFC_ATTR_SE_APDU,
+       NFC_ATTR_TARGET_ISO15693_DSFID,
+       NFC_ATTR_TARGET_ISO15693_UID,
+       NFC_ATTR_SE_PARAMS,
+       NFC_ATTR_VENDOR_ID,
+       NFC_ATTR_VENDOR_SUBCMD,
+       NFC_ATTR_VENDOR_DATA,
+/* private: internal use only */
+       __NFC_ATTR_AFTER_LAST
+};
+#define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1)
+
+enum nfc_sdp_attr {
+       NFC_SDP_ATTR_UNSPEC,
+       NFC_SDP_ATTR_URI,
+       NFC_SDP_ATTR_SAP,
+/* private: internal use only */
+       __NFC_SDP_ATTR_AFTER_LAST
+};
+#define NFC_SDP_ATTR_MAX (__NFC_SDP_ATTR_AFTER_LAST - 1)
+
+#define NFC_DEVICE_NAME_MAXSIZE                8
+#define NFC_NFCID1_MAXSIZE             10
+#define NFC_NFCID2_MAXSIZE             8
+#define NFC_NFCID3_MAXSIZE             10
+#define NFC_SENSB_RES_MAXSIZE          12
+#define NFC_SENSF_RES_MAXSIZE          18
+#define NFC_ATR_REQ_MAXSIZE            64
+#define NFC_ATR_RES_MAXSIZE            64
+#define NFC_ATR_REQ_GB_MAXSIZE         48
+#define NFC_ATR_RES_GB_MAXSIZE         47
+#define NFC_GB_MAXSIZE                 48
+#define NFC_FIRMWARE_NAME_MAXSIZE      32
+#define NFC_ISO15693_UID_MAXSIZE       8
+
+/* NFC protocols */
+#define NFC_PROTO_JEWEL                1
+#define NFC_PROTO_MIFARE       2
+#define NFC_PROTO_FELICA       3
+#define NFC_PROTO_ISO14443     4
+#define NFC_PROTO_NFC_DEP      5
+#define NFC_PROTO_ISO14443_B   6
+#define NFC_PROTO_ISO15693     7
+
+#define NFC_PROTO_MAX          8
+
+/* NFC communication modes */
+#define NFC_COMM_ACTIVE  0
+#define NFC_COMM_PASSIVE 1
+
+/* NFC RF modes */
+#define NFC_RF_INITIATOR 0
+#define NFC_RF_TARGET    1
+#define NFC_RF_NONE      2
+
+/* NFC protocols masks used in bitsets */
+#define NFC_PROTO_JEWEL_MASK      (1 << NFC_PROTO_JEWEL)
+#define NFC_PROTO_MIFARE_MASK     (1 << NFC_PROTO_MIFARE)
+#define NFC_PROTO_FELICA_MASK    (1 << NFC_PROTO_FELICA)
+#define NFC_PROTO_ISO14443_MASK          (1 << NFC_PROTO_ISO14443)
+#define NFC_PROTO_NFC_DEP_MASK   (1 << NFC_PROTO_NFC_DEP)
+#define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B)
+#define NFC_PROTO_ISO15693_MASK          (1 << NFC_PROTO_ISO15693)
+
+/* NFC Secure Elements */
+#define NFC_SE_UICC     0x1
+#define NFC_SE_EMBEDDED 0x2
+
+#define NFC_SE_DISABLED 0x0
+#define NFC_SE_ENABLED  0x1
+
+struct sockaddr_nfc {
+       sa_family_t sa_family;
+       __u32 dev_idx;
+       __u32 target_idx;
+       __u32 nfc_protocol;
+};
+
+#define NFC_LLCP_MAX_SERVICE_NAME 63
+struct sockaddr_nfc_llcp {
+       sa_family_t sa_family;
+       __u32 dev_idx;
+       __u32 target_idx;
+       __u32 nfc_protocol;
+       __u8 dsap; /* Destination SAP, if known */
+       __u8 ssap; /* Source SAP to be bound to */
+       char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */;
+       size_t service_name_len;
+};
+
+/* NFC socket protocols */
+#define NFC_SOCKPROTO_RAW      0
+#define NFC_SOCKPROTO_LLCP     1
+#define NFC_SOCKPROTO_MAX      2
+
+#define NFC_HEADER_SIZE 1
+
+/**
+ * Pseudo-header info for raw socket packets
+ * First byte is the adapter index
+ * Second byte contains flags
+ *  - 0x01 - Direction (0=RX, 1=TX)
+ *  - 0x02-0x04 - Payload type (000=LLCP, 001=NCI, 010=HCI, 011=Digital,
+ *                              100=Proprietary)
+ *  - 0x05-0x80 - Reserved
+ **/
+#define NFC_RAW_HEADER_SIZE    2
+#define NFC_DIRECTION_RX               0x00
+#define NFC_DIRECTION_TX               0x01
+
+#define RAW_PAYLOAD_LLCP 0
+#define RAW_PAYLOAD_NCI        1
+#define RAW_PAYLOAD_HCI        2
+#define RAW_PAYLOAD_DIGITAL    3
+#define RAW_PAYLOAD_PROPRIETARY        4
+
+/* socket option names */
+#define NFC_LLCP_RW            0
+#define NFC_LLCP_MIUX          1
+#define NFC_LLCP_REMOTE_MIU    2
+#define NFC_LLCP_REMOTE_LTO    3
+#define NFC_LLCP_REMOTE_RW     4
+
+#endif /*__LINUX_NFC_H */
diff --git a/lib/libdss-include/linux/nfs.h b/lib/libdss-include/linux/nfs.h
new file mode 100644 (file)
index 0000000..85a16dd
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * NFS protocol definitions
+ *
+ * This file contains constants mostly for Version 2 of the protocol,
+ * but also has a couple of NFSv3 bits in (notably the error codes).
+ */
+#ifndef _LINUX_NFS_H
+#define _LINUX_NFS_H
+
+#include <linux/types.h>
+
+#define NFS_PROGRAM    100003
+#define NFS_PORT       2049
+#define NFS_MAXDATA    8192
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN  255
+#define NFS_MAXGROUPS  16
+#define NFS_FHSIZE     32
+#define NFS_COOKIESIZE 4
+#define NFS_FIFO_DEV   (-1)
+#define NFSMODE_FMT    0170000
+#define NFSMODE_DIR    0040000
+#define NFSMODE_CHR    0020000
+#define NFSMODE_BLK    0060000
+#define NFSMODE_REG    0100000
+#define NFSMODE_LNK    0120000
+#define NFSMODE_SOCK   0140000
+#define NFSMODE_FIFO   0010000
+
+#define NFS_MNT_PROGRAM                100005
+#define NFS_MNT_VERSION                1
+#define NFS_MNT3_VERSION       3
+
+#define NFS_PIPE_DIRNAME "nfs"
+
+/*
+ * NFS stats. The good thing with these values is that NFSv3 errors are
+ * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which
+ * no-one uses anyway), so we can happily mix code as long as we make sure
+ * no NFSv3 errors are returned to NFSv2 clients.
+ * Error codes that have a `--' in the v2 column are not part of the
+ * standard, but seem to be widely used nevertheless.
+ */
+ enum nfs_stat {
+       NFS_OK = 0,                     /* v2 v3 v4 */
+       NFSERR_PERM = 1,                /* v2 v3 v4 */
+       NFSERR_NOENT = 2,               /* v2 v3 v4 */
+       NFSERR_IO = 5,                  /* v2 v3 v4 */
+       NFSERR_NXIO = 6,                /* v2 v3 v4 */
+       NFSERR_EAGAIN = 11,             /* v2 v3 */
+       NFSERR_ACCES = 13,              /* v2 v3 v4 */
+       NFSERR_EXIST = 17,              /* v2 v3 v4 */
+       NFSERR_XDEV = 18,               /*    v3 v4 */
+       NFSERR_NODEV = 19,              /* v2 v3 v4 */
+       NFSERR_NOTDIR = 20,             /* v2 v3 v4 */
+       NFSERR_ISDIR = 21,              /* v2 v3 v4 */
+       NFSERR_INVAL = 22,              /* v2 v3 v4 */
+       NFSERR_FBIG = 27,               /* v2 v3 v4 */
+       NFSERR_NOSPC = 28,              /* v2 v3 v4 */
+       NFSERR_ROFS = 30,               /* v2 v3 v4 */
+       NFSERR_MLINK = 31,              /*    v3 v4 */
+       NFSERR_OPNOTSUPP = 45,          /* v2 v3 */
+       NFSERR_NAMETOOLONG = 63,        /* v2 v3 v4 */
+       NFSERR_NOTEMPTY = 66,           /* v2 v3 v4 */
+       NFSERR_DQUOT = 69,              /* v2 v3 v4 */
+       NFSERR_STALE = 70,              /* v2 v3 v4 */
+       NFSERR_REMOTE = 71,             /* v2 v3 */
+       NFSERR_WFLUSH = 99,             /* v2    */
+       NFSERR_BADHANDLE = 10001,       /*    v3 v4 */
+       NFSERR_NOT_SYNC = 10002,        /*    v3 */
+       NFSERR_BAD_COOKIE = 10003,      /*    v3 v4 */
+       NFSERR_NOTSUPP = 10004,         /*    v3 v4 */
+       NFSERR_TOOSMALL = 10005,        /*    v3 v4 */
+       NFSERR_SERVERFAULT = 10006,     /*    v3 v4 */
+       NFSERR_BADTYPE = 10007,         /*    v3 v4 */
+       NFSERR_JUKEBOX = 10008,         /*    v3 v4 */
+       NFSERR_SAME = 10009,            /*       v4 */
+       NFSERR_DENIED = 10010,          /*       v4 */
+       NFSERR_EXPIRED = 10011,         /*       v4 */
+       NFSERR_LOCKED = 10012,          /*       v4 */
+       NFSERR_GRACE = 10013,           /*       v4 */
+       NFSERR_FHEXPIRED = 10014,       /*       v4 */
+       NFSERR_SHARE_DENIED = 10015,    /*       v4 */
+       NFSERR_WRONGSEC = 10016,        /*       v4 */
+       NFSERR_CLID_INUSE = 10017,      /*       v4 */
+       NFSERR_RESOURCE = 10018,        /*       v4 */
+       NFSERR_MOVED = 10019,           /*       v4 */
+       NFSERR_NOFILEHANDLE = 10020,    /*       v4 */
+       NFSERR_MINOR_VERS_MISMATCH = 10021,   /* v4 */
+       NFSERR_STALE_CLIENTID = 10022,  /*       v4 */
+       NFSERR_STALE_STATEID = 10023,   /*       v4 */
+       NFSERR_OLD_STATEID = 10024,     /*       v4 */
+       NFSERR_BAD_STATEID = 10025,     /*       v4 */  
+       NFSERR_BAD_SEQID = 10026,       /*       v4 */
+       NFSERR_NOT_SAME = 10027,        /*       v4 */
+       NFSERR_LOCK_RANGE = 10028,      /*       v4 */
+       NFSERR_SYMLINK = 10029,         /*       v4 */
+       NFSERR_RESTOREFH = 10030,       /*       v4 */
+       NFSERR_LEASE_MOVED = 10031,     /*       v4 */
+       NFSERR_ATTRNOTSUPP = 10032,     /*       v4 */
+       NFSERR_NO_GRACE = 10033,        /*       v4 */
+       NFSERR_RECLAIM_BAD = 10034,     /*       v4 */
+       NFSERR_RECLAIM_CONFLICT = 10035,/*       v4 */
+       NFSERR_BAD_XDR = 10036,         /*       v4 */
+       NFSERR_LOCKS_HELD = 10037,      /*       v4 */
+       NFSERR_OPENMODE = 10038,       /*       v4 */
+       NFSERR_BADOWNER = 10039,       /*       v4 */
+       NFSERR_BADCHAR = 10040,        /*       v4 */
+       NFSERR_BADNAME = 10041,        /*       v4 */
+       NFSERR_BAD_RANGE = 10042,      /*       v4 */
+       NFSERR_LOCK_NOTSUPP = 10043,   /*       v4 */
+       NFSERR_OP_ILLEGAL = 10044,     /*       v4 */
+       NFSERR_DEADLOCK = 10045,       /*       v4 */
+       NFSERR_FILE_OPEN = 10046,      /*       v4 */
+       NFSERR_ADMIN_REVOKED = 10047,  /*       v4 */
+       NFSERR_CB_PATH_DOWN = 10048,   /*       v4 */
+};
+
+/* NFSv2 file types - beware, these are not the same in NFSv3 */
+
+enum nfs_ftype {
+       NFNON = 0,
+       NFREG = 1,
+       NFDIR = 2,
+       NFBLK = 3,
+       NFCHR = 4,
+       NFLNK = 5,
+       NFSOCK = 6,
+       NFBAD = 7,
+       NFFIFO = 8
+};
+
+#endif /* _LINUX_NFS_H */
diff --git a/lib/libdss-include/linux/nfs2.h b/lib/libdss-include/linux/nfs2.h
new file mode 100644 (file)
index 0000000..fde24b3
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * NFS protocol definitions
+ *
+ * This file contains constants for Version 2 of the protocol.
+ */
+#ifndef _LINUX_NFS2_H
+#define _LINUX_NFS2_H
+
+#define NFS2_PORT      2049
+#define NFS2_MAXDATA   8192
+#define NFS2_MAXPATHLEN        1024
+#define NFS2_MAXNAMLEN 255
+#define NFS2_MAXGROUPS 16
+#define NFS2_FHSIZE    32
+#define NFS2_COOKIESIZE        4
+#define NFS2_FIFO_DEV  (-1)
+#define NFS2MODE_FMT   0170000
+#define NFS2MODE_DIR   0040000
+#define NFS2MODE_CHR   0020000
+#define NFS2MODE_BLK   0060000
+#define NFS2MODE_REG   0100000
+#define NFS2MODE_LNK   0120000
+#define NFS2MODE_SOCK  0140000
+#define NFS2MODE_FIFO  0010000
+
+
+/* NFSv2 file types - beware, these are not the same in NFSv3 */
+enum nfs2_ftype {
+       NF2NON = 0,
+       NF2REG = 1,
+       NF2DIR = 2,
+       NF2BLK = 3,
+       NF2CHR = 4,
+       NF2LNK = 5,
+       NF2SOCK = 6,
+       NF2BAD = 7,
+       NF2FIFO = 8
+};
+
+struct nfs2_fh {
+       char                    data[NFS2_FHSIZE];
+};
+
+/*
+ * Procedure numbers for NFSv2
+ */
+#define NFS2_VERSION           2
+#define NFSPROC_NULL           0
+#define NFSPROC_GETATTR                1
+#define NFSPROC_SETATTR                2
+#define NFSPROC_ROOT           3
+#define NFSPROC_LOOKUP         4
+#define NFSPROC_READLINK       5
+#define NFSPROC_READ           6
+#define NFSPROC_WRITECACHE     7
+#define NFSPROC_WRITE          8
+#define NFSPROC_CREATE         9
+#define NFSPROC_REMOVE         10
+#define NFSPROC_RENAME         11
+#define NFSPROC_LINK           12
+#define NFSPROC_SYMLINK                13
+#define NFSPROC_MKDIR          14
+#define NFSPROC_RMDIR          15
+#define NFSPROC_READDIR                16
+#define NFSPROC_STATFS         17
+
+#endif /* _LINUX_NFS2_H */
diff --git a/lib/libdss-include/linux/nfs3.h b/lib/libdss-include/linux/nfs3.h
new file mode 100644 (file)
index 0000000..bacfe41
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * NFSv3 protocol definitions
+ */
+#ifndef _LINUX_NFS3_H
+#define _LINUX_NFS3_H
+
+#define NFS3_PORT              2049
+#define NFS3_MAXDATA           32768
+#define NFS3_MAXPATHLEN                PATH_MAX
+#define NFS3_MAXNAMLEN         NAME_MAX
+#define NFS3_MAXGROUPS         16
+#define NFS3_FHSIZE            64
+#define NFS3_COOKIESIZE                4
+#define NFS3_CREATEVERFSIZE    8
+#define NFS3_COOKIEVERFSIZE    8
+#define NFS3_WRITEVERFSIZE     8
+#define NFS3_FIFO_DEV          (-1)
+#define NFS3MODE_FMT           0170000
+#define NFS3MODE_DIR           0040000
+#define NFS3MODE_CHR           0020000
+#define NFS3MODE_BLK           0060000
+#define NFS3MODE_REG           0100000
+#define NFS3MODE_LNK           0120000
+#define NFS3MODE_SOCK          0140000
+#define NFS3MODE_FIFO          0010000
+
+/* Flags for access() call */
+#define NFS3_ACCESS_READ       0x0001
+#define NFS3_ACCESS_LOOKUP     0x0002
+#define NFS3_ACCESS_MODIFY     0x0004
+#define NFS3_ACCESS_EXTEND     0x0008
+#define NFS3_ACCESS_DELETE     0x0010
+#define NFS3_ACCESS_EXECUTE    0x0020
+#define NFS3_ACCESS_FULL       0x003f
+
+/* Flags for create mode */
+enum nfs3_createmode {
+       NFS3_CREATE_UNCHECKED = 0,
+       NFS3_CREATE_GUARDED = 1,
+       NFS3_CREATE_EXCLUSIVE = 2
+};
+
+/* NFSv3 file system properties */
+#define NFS3_FSF_LINK          0x0001
+#define NFS3_FSF_SYMLINK       0x0002
+#define NFS3_FSF_HOMOGENEOUS   0x0008
+#define NFS3_FSF_CANSETTIME    0x0010
+/* Some shorthands. See fs/nfsd/nfs3proc.c */
+#define NFS3_FSF_DEFAULT       0x001B
+#define NFS3_FSF_BILLYBOY      0x0018
+#define NFS3_FSF_READONLY      0x0008
+
+enum nfs3_ftype {
+       NF3NON  = 0,
+       NF3REG  = 1,
+       NF3DIR  = 2,
+       NF3BLK  = 3,
+       NF3CHR  = 4,
+       NF3LNK  = 5,
+       NF3SOCK = 6,
+       NF3FIFO = 7,    /* changed from NFSv2 (was 8) */
+       NF3BAD  = 8
+};
+
+struct nfs3_fh {
+       unsigned short size;
+       unsigned char  data[NFS3_FHSIZE];
+};
+
+#define NFS3_VERSION           3
+#define NFS3PROC_NULL          0
+#define NFS3PROC_GETATTR       1
+#define NFS3PROC_SETATTR       2
+#define NFS3PROC_LOOKUP                3
+#define NFS3PROC_ACCESS                4
+#define NFS3PROC_READLINK      5
+#define NFS3PROC_READ          6
+#define NFS3PROC_WRITE         7
+#define NFS3PROC_CREATE                8
+#define NFS3PROC_MKDIR         9
+#define NFS3PROC_SYMLINK       10
+#define NFS3PROC_MKNOD         11
+#define NFS3PROC_REMOVE                12
+#define NFS3PROC_RMDIR         13
+#define NFS3PROC_RENAME                14
+#define NFS3PROC_LINK          15
+#define NFS3PROC_READDIR       16
+#define NFS3PROC_READDIRPLUS   17
+#define NFS3PROC_FSSTAT                18
+#define NFS3PROC_FSINFO                19
+#define NFS3PROC_PATHCONF      20
+#define NFS3PROC_COMMIT                21
+
+#define NFS_MNT3_VERSION       3
+
+#endif /* _LINUX_NFS3_H */
diff --git a/lib/libdss-include/linux/nfs4.h b/lib/libdss-include/linux/nfs4.h
new file mode 100644 (file)
index 0000000..5ab38ab
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ *  include/linux/nfs4.h
+ *
+ *  NFSv4 protocol definitions.
+ *
+ *  Copyright (c) 2002 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Kendrick Smith <kmsmith@umich.edu>
+ *  Andy Adamson   <andros@umich.edu>
+ */
+
+#ifndef _LINUX_NFS4_H
+#define _LINUX_NFS4_H
+
+#include <linux/types.h>
+
+#define NFS4_BITMAP_SIZE       3
+#define NFS4_VERIFIER_SIZE     8
+#define NFS4_STATEID_SEQID_SIZE 4
+#define NFS4_STATEID_OTHER_SIZE 12
+#define NFS4_STATEID_SIZE      (NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE)
+#define NFS4_FHSIZE            128
+#define NFS4_MAXPATHLEN                PATH_MAX
+#define NFS4_MAXNAMLEN         NAME_MAX
+#define NFS4_OPAQUE_LIMIT      1024
+#define NFS4_MAX_SESSIONID_LEN 16
+
+#define NFS4_ACCESS_READ        0x0001
+#define NFS4_ACCESS_LOOKUP      0x0002
+#define NFS4_ACCESS_MODIFY      0x0004
+#define NFS4_ACCESS_EXTEND      0x0008
+#define NFS4_ACCESS_DELETE      0x0010
+#define NFS4_ACCESS_EXECUTE     0x0020
+
+#define NFS4_FH_PERSISTENT             0x0000
+#define NFS4_FH_NOEXPIRE_WITH_OPEN     0x0001
+#define NFS4_FH_VOLATILE_ANY           0x0002
+#define NFS4_FH_VOL_MIGRATION          0x0004
+#define NFS4_FH_VOL_RENAME             0x0008
+
+#define NFS4_OPEN_RESULT_CONFIRM 0x0002
+#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
+
+#define NFS4_SHARE_ACCESS_MASK 0x000F
+#define NFS4_SHARE_ACCESS_READ 0x0001
+#define NFS4_SHARE_ACCESS_WRITE        0x0002
+#define NFS4_SHARE_ACCESS_BOTH 0x0003
+#define NFS4_SHARE_DENY_READ   0x0001
+#define NFS4_SHARE_DENY_WRITE  0x0002
+#define NFS4_SHARE_DENY_BOTH   0x0003
+
+/* nfs41 */
+#define NFS4_SHARE_WANT_MASK           0xFF00
+#define NFS4_SHARE_WANT_NO_PREFERENCE  0x0000
+#define NFS4_SHARE_WANT_READ_DELEG     0x0100
+#define NFS4_SHARE_WANT_WRITE_DELEG    0x0200
+#define NFS4_SHARE_WANT_ANY_DELEG      0x0300
+#define NFS4_SHARE_WANT_NO_DELEG       0x0400
+#define NFS4_SHARE_WANT_CANCEL         0x0500
+
+#define NFS4_SHARE_WHEN_MASK           0xF0000
+#define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL       0x10000
+#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED         0x20000
+
+#define NFS4_CDFC4_FORE        0x1
+#define NFS4_CDFC4_BACK 0x2
+#define NFS4_CDFC4_BOTH 0x3
+#define NFS4_CDFC4_FORE_OR_BOTH 0x3
+#define NFS4_CDFC4_BACK_OR_BOTH 0x7
+
+#define NFS4_CDFS4_FORE 0x1
+#define NFS4_CDFS4_BACK 0x2
+#define NFS4_CDFS4_BOTH 0x3
+
+#define NFS4_SET_TO_SERVER_TIME        0
+#define NFS4_SET_TO_CLIENT_TIME        1
+
+#define NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE 0
+#define NFS4_ACE_ACCESS_DENIED_ACE_TYPE  1
+#define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE   2
+#define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE   3
+
+#define ACL4_SUPPORT_ALLOW_ACL 0x01
+#define ACL4_SUPPORT_DENY_ACL  0x02
+#define ACL4_SUPPORT_AUDIT_ACL 0x04
+#define ACL4_SUPPORT_ALARM_ACL 0x08
+
+#define NFS4_ACL_AUTO_INHERIT 0x00000001
+#define NFS4_ACL_PROTECTED    0x00000002
+#define NFS4_ACL_DEFAULTED    0x00000004
+
+#define NFS4_ACE_FILE_INHERIT_ACE             0x00000001
+#define NFS4_ACE_DIRECTORY_INHERIT_ACE        0x00000002
+#define NFS4_ACE_NO_PROPAGATE_INHERIT_ACE     0x00000004
+#define NFS4_ACE_INHERIT_ONLY_ACE             0x00000008
+#define NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG   0x00000010
+#define NFS4_ACE_FAILED_ACCESS_ACE_FLAG       0x00000020
+#define NFS4_ACE_IDENTIFIER_GROUP             0x00000040
+#define NFS4_ACE_INHERITED_ACE                0x00000080
+
+#define NFS4_ACE_READ_DATA                    0x00000001
+#define NFS4_ACE_LIST_DIRECTORY               0x00000001
+#define NFS4_ACE_WRITE_DATA                   0x00000002
+#define NFS4_ACE_ADD_FILE                     0x00000002
+#define NFS4_ACE_APPEND_DATA                  0x00000004
+#define NFS4_ACE_ADD_SUBDIRECTORY             0x00000004
+#define NFS4_ACE_READ_NAMED_ATTRS             0x00000008
+#define NFS4_ACE_WRITE_NAMED_ATTRS            0x00000010
+#define NFS4_ACE_EXECUTE                      0x00000020
+#define NFS4_ACE_DELETE_CHILD                 0x00000040
+#define NFS4_ACE_READ_ATTRIBUTES              0x00000080
+#define NFS4_ACE_WRITE_ATTRIBUTES             0x00000100
+#define NFS4_ACE_WRITE_RETENTION              0x00000200
+#define NFS4_ACE_WRITE_RETENTION_HOLD         0x00000400
+#define NFS4_ACE_DELETE                       0x00010000
+#define NFS4_ACE_READ_ACL                     0x00020000
+#define NFS4_ACE_WRITE_ACL                    0x00040000
+#define NFS4_ACE_WRITE_OWNER                  0x00080000
+#define NFS4_ACE_SYNCHRONIZE                  0x00100000
+#define NFS4_ACE_GENERIC_READ                 0x00120081
+#define NFS4_ACE_GENERIC_WRITE                0x00160106
+#define NFS4_ACE_GENERIC_EXECUTE              0x001200A0
+#define NFS4_ACE_MASK_ALL                     0x001F01FF
+
+#define EXCHGID4_FLAG_SUPP_MOVED_REFER         0x00000001
+#define EXCHGID4_FLAG_SUPP_MOVED_MIGR          0x00000002
+#define EXCHGID4_FLAG_BIND_PRINC_STATEID       0x00000100
+
+#define EXCHGID4_FLAG_USE_NON_PNFS             0x00010000
+#define EXCHGID4_FLAG_USE_PNFS_MDS             0x00020000
+#define EXCHGID4_FLAG_USE_PNFS_DS              0x00040000
+#define EXCHGID4_FLAG_MASK_PNFS                        0x00070000
+
+#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A      0x40000000
+#define EXCHGID4_FLAG_CONFIRMED_R              0x80000000
+/*
+ * Since the validity of these bits depends on whether
+ * they're set in the argument or response, have separate
+ * invalid flag masks for arg (_A) and resp (_R).
+ */
+#define EXCHGID4_FLAG_MASK_A                   0x40070103
+#define EXCHGID4_FLAG_MASK_R                   0x80070103
+
+#define SEQ4_STATUS_CB_PATH_DOWN               0x00000001
+#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING   0x00000002
+#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED    0x00000004
+#define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED  0x00000008
+#define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010
+#define SEQ4_STATUS_ADMIN_STATE_REVOKED                0x00000020
+#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED   0x00000040
+#define SEQ4_STATUS_LEASE_MOVED                        0x00000080
+#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED     0x00000100
+#define SEQ4_STATUS_CB_PATH_DOWN_SESSION       0x00000200
+#define SEQ4_STATUS_BACKCHANNEL_FAULT          0x00000400
+
+#define NFS4_SECINFO_STYLE4_CURRENT_FH 0
+#define NFS4_SECINFO_STYLE4_PARENT     1
+
+#define NFS4_MAX_UINT64        (~(__u64)0)
+
+/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
+ * If a compound requires more operations, adjust NFS4_MAX_OPS accordingly.
+ */
+#define NFS4_MAX_OPS   8
+
+/* Our NFS4 client back channel server only wants the cb_sequene and the
+ * actual operation per compound
+ */
+#define NFS4_MAX_BACK_CHANNEL_OPS 2
+
+#endif /* _LINUX_NFS4_H */
+
+/*
+ * Local variables:
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/lib/libdss-include/linux/nfs4_mount.h b/lib/libdss-include/linux/nfs4_mount.h
new file mode 100644 (file)
index 0000000..f4ff32d
--- /dev/null
@@ -0,0 +1,71 @@
+#ifndef _LINUX_NFS4_MOUNT_H
+#define _LINUX_NFS4_MOUNT_H
+
+/*
+ *  linux/include/linux/nfs4_mount.h
+ *
+ *  Copyright (C) 2002  Trond Myklebust
+ *
+ *  structure passed from user-space to kernel-space during an nfsv4 mount
+ */
+
+/*
+ * WARNING!  Do not delete or change the order of these fields.  If
+ * a new field is required then add it to the end.  The version field
+ * tracks which fields are present.  This will ensure some measure of
+ * mount-to-kernel version compatibility.  Some of these aren't used yet
+ * but here they are anyway.
+ */
+#define NFS4_MOUNT_VERSION     1
+
+struct nfs_string {
+       unsigned int len;
+       const char * data;
+};
+
+struct nfs4_mount_data {
+       int version;                            /* 1 */
+       int flags;                              /* 1 */
+       int rsize;                              /* 1 */
+       int wsize;                              /* 1 */
+       int timeo;                              /* 1 */
+       int retrans;                            /* 1 */
+       int acregmin;                           /* 1 */
+       int acregmax;                           /* 1 */
+       int acdirmin;                           /* 1 */
+       int acdirmax;                           /* 1 */
+
+       /* see the definition of 'struct clientaddr4' in RFC3010 */
+       struct nfs_string client_addr;          /* 1 */
+
+       /* Mount path */
+       struct nfs_string mnt_path;             /* 1 */
+
+       /* Server details */
+       struct nfs_string hostname;             /* 1 */
+       /* Server IP address */
+       unsigned int host_addrlen;              /* 1 */
+       struct sockaddr * host_addr;    /* 1 */
+
+       /* Transport protocol to use */
+       int proto;                              /* 1 */
+
+       /* Pseudo-flavours to use for authentication. See RFC2623 */
+       int auth_flavourlen;                    /* 1 */
+       int *auth_flavours;             /* 1 */
+};
+
+/* bits in the flags field */
+/* Note: the fields that correspond to existing NFSv2/v3 mount options
+ *      should mirror the values from include/linux/nfs_mount.h
+ */
+
+#define NFS4_MOUNT_SOFT                0x0001  /* 1 */
+#define NFS4_MOUNT_INTR                0x0002  /* 1 */
+#define NFS4_MOUNT_NOCTO       0x0010  /* 1 */
+#define NFS4_MOUNT_NOAC                0x0020  /* 1 */
+#define NFS4_MOUNT_STRICTLOCK  0x1000  /* 1 */
+#define NFS4_MOUNT_UNSHARED    0x8000  /* 1 */
+#define NFS4_MOUNT_FLAGMASK    0x9033
+
+#endif
diff --git a/lib/libdss-include/linux/nfs_fs.h b/lib/libdss-include/linux/nfs_fs.h
new file mode 100644 (file)
index 0000000..99e509a
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ *  linux/include/linux/nfs_fs.h
+ *
+ *  Copyright (C) 1992  Rick Sladkey
+ *
+ *  OS-specific nfs filesystem definitions and declarations
+ */
+
+#ifndef _LINUX_NFS_FS_H
+#define _LINUX_NFS_FS_H
+
+#include <linux/magic.h>
+
+/* Default timeout values */
+#define NFS_DEF_UDP_TIMEO      (11)
+#define NFS_DEF_UDP_RETRANS    (3)
+#define NFS_DEF_TCP_TIMEO      (600)
+#define NFS_DEF_TCP_RETRANS    (2)
+
+#define NFS_MAX_UDP_TIMEOUT    (60*HZ)
+#define NFS_MAX_TCP_TIMEOUT    (600*HZ)
+
+#define NFS_DEF_ACREGMIN       (3)
+#define NFS_DEF_ACREGMAX       (60)
+#define NFS_DEF_ACDIRMIN       (30)
+#define NFS_DEF_ACDIRMAX       (60)
+
+/*
+ * When flushing a cluster of dirty pages, there can be different
+ * strategies:
+ */
+#define FLUSH_SYNC             1       /* file being synced, or contention */
+#define FLUSH_STABLE           4       /* commit to stable storage */
+#define FLUSH_LOWPRI           8       /* low priority background flush */
+#define FLUSH_HIGHPRI          16      /* high priority memory reclaim flush */
+#define FLUSH_COND_STABLE      32      /* conditional stable write - only stable
+                                        * if everything fits in one RPC */
+
+
+/*
+ * NFS debug flags
+ */
+#define NFSDBG_VFS             0x0001
+#define NFSDBG_DIRCACHE                0x0002
+#define NFSDBG_LOOKUPCACHE     0x0004
+#define NFSDBG_PAGECACHE       0x0008
+#define NFSDBG_PROC            0x0010
+#define NFSDBG_XDR             0x0020
+#define NFSDBG_FILE            0x0040
+#define NFSDBG_ROOT            0x0080
+#define NFSDBG_CALLBACK                0x0100
+#define NFSDBG_CLIENT          0x0200
+#define NFSDBG_MOUNT           0x0400
+#define NFSDBG_FSCACHE         0x0800
+#define NFSDBG_PNFS            0x1000
+#define NFSDBG_PNFS_LD         0x2000
+#define NFSDBG_STATE           0x4000
+#define NFSDBG_ALL             0xFFFF
+
+
+#endif /* _LINUX_NFS_FS_H */
diff --git a/lib/libdss-include/linux/nfs_idmap.h b/lib/libdss-include/linux/nfs_idmap.h
new file mode 100644 (file)
index 0000000..1296067
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * include/uapi/linux/nfs_idmap.h
+ *
+ *  UID and GID to name mapping for clients.
+ *
+ *  Copyright (c) 2002 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Marius Aamodt Eriksen <marius@umich.edu>
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the University nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef NFS_IDMAP_H
+#define NFS_IDMAP_H
+
+#include <linux/types.h>
+
+/* XXX from bits/utmp.h  */
+#define IDMAP_NAMESZ  128
+
+#define IDMAP_TYPE_USER  0
+#define IDMAP_TYPE_GROUP 1
+
+#define IDMAP_CONV_IDTONAME 0
+#define IDMAP_CONV_NAMETOID 1
+
+#define IDMAP_STATUS_INVALIDMSG 0x01
+#define IDMAP_STATUS_AGAIN      0x02
+#define IDMAP_STATUS_LOOKUPFAIL 0x04
+#define IDMAP_STATUS_SUCCESS    0x08
+
+struct idmap_msg {
+       __u8  im_type;
+       __u8  im_conv;
+       char  im_name[IDMAP_NAMESZ];
+       __u32 im_id;
+       __u8  im_status;
+};
+
+
+#endif /* NFS_IDMAP_H */
diff --git a/lib/libdss-include/linux/nfs_mount.h b/lib/libdss-include/linux/nfs_mount.h
new file mode 100644 (file)
index 0000000..64b0f22
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef _LINUX_NFS_MOUNT_H
+#define _LINUX_NFS_MOUNT_H
+
+/*
+ *  linux/include/linux/nfs_mount.h
+ *
+ *  Copyright (C) 1992  Rick Sladkey
+ *
+ *  structure passed from user-space to kernel-space during an nfs mount
+ */
+#include <linux/in.h>
+#include <linux/nfs.h>
+#include <linux/nfs2.h>
+#include <linux/nfs3.h>
+
+/*
+ * WARNING!  Do not delete or change the order of these fields.  If
+ * a new field is required then add it to the end.  The version field
+ * tracks which fields are present.  This will ensure some measure of
+ * mount-to-kernel version compatibility.  Some of these aren't used yet
+ * but here they are anyway.
+ */
+#define NFS_MOUNT_VERSION      6
+#define NFS_MAX_CONTEXT_LEN    256
+
+struct nfs_mount_data {
+       int             version;                /* 1 */
+       int             fd;                     /* 1 */
+       struct nfs2_fh  old_root;               /* 1 */
+       int             flags;                  /* 1 */
+       int             rsize;                  /* 1 */
+       int             wsize;                  /* 1 */
+       int             timeo;                  /* 1 */
+       int             retrans;                /* 1 */
+       int             acregmin;               /* 1 */
+       int             acregmax;               /* 1 */
+       int             acdirmin;               /* 1 */
+       int             acdirmax;               /* 1 */
+       struct sockaddr_in addr;                /* 1 */
+       char            hostname[NFS_MAXNAMLEN + 1];            /* 1 */
+       int             namlen;                 /* 2 */
+       unsigned int    bsize;                  /* 3 */
+       struct nfs3_fh  root;                   /* 4 */
+       int             pseudoflavor;           /* 5 */
+       char            context[NFS_MAX_CONTEXT_LEN + 1];       /* 6 */
+};
+
+/* bits in the flags field visible to user space */
+
+#define NFS_MOUNT_SOFT         0x0001  /* 1 */
+#define NFS_MOUNT_INTR         0x0002  /* 1 */ /* now unused, but ABI */
+#define NFS_MOUNT_SECURE       0x0004  /* 1 */
+#define NFS_MOUNT_POSIX                0x0008  /* 1 */
+#define NFS_MOUNT_NOCTO                0x0010  /* 1 */
+#define NFS_MOUNT_NOAC         0x0020  /* 1 */
+#define NFS_MOUNT_TCP          0x0040  /* 2 */
+#define NFS_MOUNT_VER3         0x0080  /* 3 */
+#define NFS_MOUNT_KERBEROS     0x0100  /* 3 */
+#define NFS_MOUNT_NONLM                0x0200  /* 3 */
+#define NFS_MOUNT_BROKEN_SUID  0x0400  /* 4 */
+#define NFS_MOUNT_NOACL                0x0800  /* 4 */
+#define NFS_MOUNT_STRICTLOCK   0x1000  /* reserved for NFSv4 */
+#define NFS_MOUNT_SECFLAVOUR   0x2000  /* 5 non-text parsed mount data only */
+#define NFS_MOUNT_NORDIRPLUS   0x4000  /* 5 */
+#define NFS_MOUNT_UNSHARED     0x8000  /* 5 */
+#define NFS_MOUNT_FLAGMASK     0xFFFF
+
+/* The following are for internal use only */
+#define NFS_MOUNT_LOOKUP_CACHE_NONEG   0x10000
+#define NFS_MOUNT_LOOKUP_CACHE_NONE    0x20000
+#define NFS_MOUNT_NORESVPORT           0x40000
+#define NFS_MOUNT_LEGACY_INTERFACE     0x80000
+
+#define NFS_MOUNT_LOCAL_FLOCK  0x100000
+#define NFS_MOUNT_LOCAL_FCNTL  0x200000
+
+#endif
diff --git a/lib/libdss-include/linux/nfsacl.h b/lib/libdss-include/linux/nfsacl.h
new file mode 100644 (file)
index 0000000..67b3763
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * File: linux/nfsacl.h
+ *
+ * (C) 2003 Andreas Gruenbacher <agruen@suse.de>
+ */
+#ifndef __LINUX_NFSACL_H
+#define __LINUX_NFSACL_H
+
+#define NFS_ACL_PROGRAM        100227
+
+#define ACLPROC2_GETACL                1
+#define ACLPROC2_SETACL                2
+#define ACLPROC2_GETATTR       3
+#define ACLPROC2_ACCESS                4
+
+#define ACLPROC3_GETACL                1
+#define ACLPROC3_SETACL                2
+
+
+/* Flags for the getacl/setacl mode */
+#define NFS_ACL                        0x0001
+#define NFS_ACLCNT             0x0002
+#define NFS_DFACL              0x0004
+#define NFS_DFACLCNT           0x0008
+#define NFS_ACL_MASK           0x000f
+
+/* Flag for Default ACL entries */
+#define NFS_ACL_DEFAULT                0x1000
+
+#endif /* __LINUX_NFSACL_H */
diff --git a/lib/libdss-include/linux/nfsd/cld.h b/lib/libdss-include/linux/nfsd/cld.h
new file mode 100644 (file)
index 0000000..f14a9ab
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Upcall description for nfsdcld communication
+ *
+ * Copyright (c) 2012 Red Hat, Inc.
+ * Author(s): Jeff Layton <jlayton@redhat.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _NFSD_CLD_H
+#define _NFSD_CLD_H
+
+/* latest upcall version available */
+#define CLD_UPCALL_VERSION 1
+
+/* defined by RFC3530 */
+#define NFS4_OPAQUE_LIMIT 1024
+
+enum cld_command {
+       Cld_Create,             /* create a record for this cm_id */
+       Cld_Remove,             /* remove record of this cm_id */
+       Cld_Check,              /* is this cm_id allowed? */
+       Cld_GraceDone,          /* grace period is complete */
+};
+
+/* representation of long-form NFSv4 client ID */
+struct cld_name {
+       uint16_t        cn_len;                         /* length of cm_id */
+       unsigned char   cn_id[NFS4_OPAQUE_LIMIT];       /* client-provided */
+} __attribute__((packed));
+
+/* message struct for communication with userspace */
+struct cld_msg {
+       uint8_t         cm_vers;                /* upcall version */
+       uint8_t         cm_cmd;                 /* upcall command */
+       int16_t         cm_status;              /* return code */
+       uint32_t        cm_xid;                 /* transaction id */
+       union {
+               int64_t         cm_gracetime;   /* grace period start time */
+               struct cld_name cm_name;
+       } __attribute__((packed)) cm_u;
+} __attribute__((packed));
+
+#endif /* !_NFSD_CLD_H */
diff --git a/lib/libdss-include/linux/nfsd/debug.h b/lib/libdss-include/linux/nfsd/debug.h
new file mode 100644 (file)
index 0000000..6b1f912
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * linux/include/linux/nfsd/debug.h
+ *
+ * Debugging-related stuff for nfsd
+ *
+ * Copyright (C) 1995 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef LINUX_NFSD_DEBUG_H
+#define LINUX_NFSD_DEBUG_H
+
+#include <linux/sunrpc/debug.h>
+
+/*
+ * knfsd debug flags
+ */
+#define NFSDDBG_SOCK           0x0001
+#define NFSDDBG_FH             0x0002
+#define NFSDDBG_EXPORT         0x0004
+#define NFSDDBG_SVC            0x0008
+#define NFSDDBG_PROC           0x0010
+#define NFSDDBG_FILEOP         0x0020
+#define NFSDDBG_AUTH           0x0040
+#define NFSDDBG_REPCACHE       0x0080
+#define NFSDDBG_XDR            0x0100
+#define NFSDDBG_LOCKD          0x0200
+#define NFSDDBG_PNFS           0x0400
+#define NFSDDBG_ALL            0x7FFF
+#define NFSDDBG_NOCHANGE       0xFFFF
+
+
+
+#endif /* LINUX_NFSD_DEBUG_H */
diff --git a/lib/libdss-include/linux/nfsd/export.h b/lib/libdss-include/linux/nfsd/export.h
new file mode 100644 (file)
index 0000000..407d25c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * include/linux/nfsd/export.h
+ * 
+ * Public declarations for NFS exports. The definitions for the
+ * syscall interface are in nfsctl.h
+ *
+ * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef NFSD_EXPORT_H
+#define NFSD_EXPORT_H
+
+# include <linux/types.h>
+
+/*
+ * Important limits for the exports stuff.
+ */
+#define NFSCLNT_IDMAX          1024
+#define NFSCLNT_ADDRMAX                16
+#define NFSCLNT_KEYMAX         32
+
+/*
+ * Export flags.
+ *
+ * Please update the expflags[] array in fs/nfsd/export.c when adding
+ * a new flag.
+ */
+#define NFSEXP_READONLY                0x0001
+#define NFSEXP_INSECURE_PORT   0x0002
+#define NFSEXP_ROOTSQUASH      0x0004
+#define NFSEXP_ALLSQUASH       0x0008
+#define NFSEXP_ASYNC           0x0010
+#define NFSEXP_GATHERED_WRITES 0x0020
+#define NFSEXP_NOREADDIRPLUS    0x0040
+/* 80 100 currently unused */
+#define NFSEXP_NOHIDE          0x0200
+#define NFSEXP_NOSUBTREECHECK  0x0400
+#define        NFSEXP_NOAUTHNLM        0x0800          /* Don't authenticate NLM requests - just trust */
+#define NFSEXP_MSNFS           0x1000  /* do silly things that MS clients expect; no longer supported */
+#define NFSEXP_FSID            0x2000
+#define        NFSEXP_CROSSMOUNT       0x4000
+#define        NFSEXP_NOACL            0x8000  /* reserved for possible ACL related use */
+/*
+ * The NFSEXP_V4ROOT flag causes the kernel to give access only to NFSv4
+ * clients, and only to the single directory that is the root of the
+ * export; further lookup and readdir operations are treated as if every
+ * subdirectory was a mountpoint, and ignored if they are not themselves
+ * exported.  This is used by nfsd and mountd to construct the NFSv4
+ * pseudofilesystem, which provides access only to paths leading to each
+ * exported filesystem.
+ */
+#define        NFSEXP_V4ROOT           0x10000
+#define NFSEXP_PNFS            0x20000
+
+/* All flags that we claim to support.  (Note we don't support NOACL.) */
+#define NFSEXP_ALLFLAGS                0x3FE7F
+
+/* The flags that may vary depending on security flavor: */
+#define NFSEXP_SECINFO_FLAGS   (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
+                                       | NFSEXP_ALLSQUASH \
+                                       | NFSEXP_INSECURE_PORT)
+
+
+#endif /* NFSD_EXPORT_H */
diff --git a/lib/libdss-include/linux/nfsd/nfsfh.h b/lib/libdss-include/linux/nfsd/nfsfh.h
new file mode 100644 (file)
index 0000000..beb05e9
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * This file describes the layout of the file handles as passed
+ * over the wire.
+ *
+ * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef _LINUX_NFSD_FH_H
+#define _LINUX_NFSD_FH_H
+
+#include <linux/types.h>
+#include <linux/nfs.h>
+#include <linux/nfs2.h>
+#include <linux/nfs3.h>
+#include <linux/nfs4.h>
+
+/*
+ * This is the old "dentry style" Linux NFSv2 file handle.
+ *
+ * The xino and xdev fields are currently used to transport the
+ * ino/dev of the exported inode.
+ */
+struct nfs_fhbase_old {
+       __u32           fb_dcookie;     /* dentry cookie - always 0xfeebbaca */
+       __u32           fb_ino;         /* our inode number */
+       __u32           fb_dirino;      /* dir inode number, 0 for directories */
+       __u32           fb_dev;         /* our device */
+       __u32           fb_xdev;
+       __u32           fb_xino;
+       __u32           fb_generation;
+};
+
+/*
+ * This is the new flexible, extensible style NFSv2/v3/v4 file handle.
+ * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000
+ *
+ * The file handle starts with a sequence of four-byte words.
+ * The first word contains a version number (1) and three descriptor bytes
+ * that tell how the remaining 3 variable length fields should be handled.
+ * These three bytes are auth_type, fsid_type and fileid_type.
+ *
+ * All four-byte values are in host-byte-order.
+ *
+ * The auth_type field is deprecated and must be set to 0.
+ *
+ * The fsid_type identifies how the filesystem (or export point) is
+ *    encoded.
+ *  Current values:
+ *     0  - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
+ *        NOTE: we cannot use the kdev_t device id value, because kdev_t.h
+ *              says we mustn't.  We must break it up and reassemble.
+ *     1  - 4 byte user specified identifier
+ *     2  - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
+ *     3  - 4 byte device id, encoded for user-space, 4 byte inode number
+ *     4  - 4 byte inode number and 4 byte uuid
+ *     5  - 8 byte uuid
+ *     6  - 16 byte uuid
+ *     7  - 8 byte inode number and 16 byte uuid
+ *
+ * The fileid_type identified how the file within the filesystem is encoded.
+ *   The values for this field are filesystem specific, exccept that
+ *   filesystems must not use the values '0' or '0xff'. 'See enum fid_type'
+ *   in include/linux/exportfs.h for currently registered values.
+ */
+struct nfs_fhbase_new {
+       __u8            fb_version;     /* == 1, even => nfs_fhbase_old */
+       __u8            fb_auth_type;
+       __u8            fb_fsid_type;
+       __u8            fb_fileid_type;
+       __u32           fb_auth[1];
+/*     __u32           fb_fsid[0]; floating */
+/*     __u32           fb_fileid[0]; floating */
+};
+
+struct knfsd_fh {
+       unsigned int    fh_size;        /* significant for NFSv3.
+                                        * Points to the current size while building
+                                        * a new file handle
+                                        */
+       union {
+               struct nfs_fhbase_old   fh_old;
+               __u32                   fh_pad[NFS4_FHSIZE/4];
+               struct nfs_fhbase_new   fh_new;
+       } fh_base;
+};
+
+#define ofh_dcookie            fh_base.fh_old.fb_dcookie
+#define ofh_ino                        fh_base.fh_old.fb_ino
+#define ofh_dirino             fh_base.fh_old.fb_dirino
+#define ofh_dev                        fh_base.fh_old.fb_dev
+#define ofh_xdev               fh_base.fh_old.fb_xdev
+#define ofh_xino               fh_base.fh_old.fb_xino
+#define ofh_generation         fh_base.fh_old.fb_generation
+
+#define        fh_version              fh_base.fh_new.fb_version
+#define        fh_fsid_type            fh_base.fh_new.fb_fsid_type
+#define        fh_auth_type            fh_base.fh_new.fb_auth_type
+#define        fh_fileid_type          fh_base.fh_new.fb_fileid_type
+#define        fh_fsid                 fh_base.fh_new.fb_auth
+
+/* Do not use, provided for userspace compatiblity. */
+#define        fh_auth                 fh_base.fh_new.fb_auth
+
+#endif /* _LINUX_NFSD_FH_H */
diff --git a/lib/libdss-include/linux/nfsd/stats.h b/lib/libdss-include/linux/nfsd/stats.h
new file mode 100644 (file)
index 0000000..b7024e8
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * linux/include/linux/nfsd/stats.h
+ *
+ * Statistics for NFS server.
+ *
+ * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef LINUX_NFSD_STATS_H
+#define LINUX_NFSD_STATS_H
+
+#include <linux/nfs4.h>
+
+/* thread usage wraps very million seconds (approx one fortnight) */
+#define        NFSD_USAGE_WRAP (HZ*1000000)
+
+#endif /* LINUX_NFSD_STATS_H */
diff --git a/lib/libdss-include/linux/nl80211.h b/lib/libdss-include/linux/nl80211.h
new file mode 100644 (file)
index 0000000..1f0b4cf
--- /dev/null
@@ -0,0 +1,4647 @@
+#ifndef __LINUX_NL80211_H
+#define __LINUX_NL80211_H
+/*
+ * 802.11 netlink interface public header
+ *
+ * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
+ * Copyright 2008 Michael Wu <flamingice@sourmilk.net>
+ * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com>
+ * Copyright 2008 Michael Buesch <m@bues.ch>
+ * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>
+ * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
+ * Copyright 2008 Colin McCabe <colin@cozybit.com>
+ * Copyright 2015      Intel Deutschland GmbH
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/*
+ * This header file defines the userspace API to the wireless stack. Please
+ * be careful not to break things - i.e. don't move anything around or so
+ * unless you can demonstrate that it breaks neither API nor ABI.
+ *
+ * Additions to the API should be accompanied by actual implementations in
+ * an upstream driver, so that example implementations exist in case there
+ * are ever concerns about the precise semantics of the API or changes are
+ * needed, and to ensure that code for dead (no longer implemented) API
+ * can actually be identified and removed.
+ * Nonetheless, semantics should also be documented carefully in this file.
+ */
+
+#include <linux/types.h>
+
+#define NL80211_GENL_NAME "nl80211"
+
+#define NL80211_MULTICAST_GROUP_CONFIG         "config"
+#define NL80211_MULTICAST_GROUP_SCAN           "scan"
+#define NL80211_MULTICAST_GROUP_REG            "regulatory"
+#define NL80211_MULTICAST_GROUP_MLME           "mlme"
+#define NL80211_MULTICAST_GROUP_VENDOR         "vendor"
+#define NL80211_MULTICAST_GROUP_TESTMODE       "testmode"
+
+/**
+ * DOC: Station handling
+ *
+ * Stations are added per interface, but a special case exists with VLAN
+ * interfaces. When a station is bound to an AP interface, it may be moved
+ * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN).
+ * The station is still assumed to belong to the AP interface it was added
+ * to.
+ *
+ * Station handling varies per interface type and depending on the driver's
+ * capabilities.
+ *
+ * For drivers supporting TDLS with external setup (WIPHY_FLAG_SUPPORTS_TDLS
+ * and WIPHY_FLAG_TDLS_EXTERNAL_SETUP), the station lifetime is as follows:
+ *  - a setup station entry is added, not yet authorized, without any rate
+ *    or capability information, this just exists to avoid race conditions
+ *  - when the TDLS setup is done, a single NL80211_CMD_SET_STATION is valid
+ *    to add rate and capability information to the station and at the same
+ *    time mark it authorized.
+ *  - %NL80211_TDLS_ENABLE_LINK is then used
+ *  - after this, the only valid operation is to remove it by tearing down
+ *    the TDLS link (%NL80211_TDLS_DISABLE_LINK)
+ *
+ * TODO: need more info for other interface types
+ */
+
+/**
+ * DOC: Frame transmission/registration support
+ *
+ * Frame transmission and registration support exists to allow userspace
+ * management entities such as wpa_supplicant react to management frames
+ * that are not being handled by the kernel. This includes, for example,
+ * certain classes of action frames that cannot be handled in the kernel
+ * for various reasons.
+ *
+ * Frame registration is done on a per-interface basis and registrations
+ * cannot be removed other than by closing the socket. It is possible to
+ * specify a registration filter to register, for example, only for a
+ * certain type of action frame. In particular with action frames, those
+ * that userspace registers for will not be returned as unhandled by the
+ * driver, so that the registered application has to take responsibility
+ * for doing that.
+ *
+ * The type of frame that can be registered for is also dependent on the
+ * driver and interface type. The frame types are advertised in wiphy
+ * attributes so applications know what to expect.
+ *
+ * NOTE: When an interface changes type while registrations are active,
+ *       these registrations are ignored until the interface type is
+ *       changed again. This means that changing the interface type can
+ *       lead to a situation that couldn't otherwise be produced, but
+ *       any such registrations will be dormant in the sense that they
+ *       will not be serviced, i.e. they will not receive any frames.
+ *
+ * Frame transmission allows userspace to send for example the required
+ * responses to action frames. It is subject to some sanity checking,
+ * but many frames can be transmitted. When a frame was transmitted, its
+ * status is indicated to the sending socket.
+ *
+ * For more technical details, see the corresponding command descriptions
+ * below.
+ */
+
+/**
+ * DOC: Virtual interface / concurrency capabilities
+ *
+ * Some devices are able to operate with virtual MACs, they can have
+ * more than one virtual interface. The capability handling for this
+ * is a bit complex though, as there may be a number of restrictions
+ * on the types of concurrency that are supported.
+ *
+ * To start with, each device supports the interface types listed in
+ * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the
+ * types there no concurrency is implied.
+ *
+ * Once concurrency is desired, more attributes must be observed:
+ * To start with, since some interface types are purely managed in
+ * software, like the AP-VLAN type in mac80211 for example, there's
+ * an additional list of these, they can be added at any time and
+ * are only restricted by some semantic restrictions (e.g. AP-VLAN
+ * cannot be added without a corresponding AP interface). This list
+ * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute.
+ *
+ * Further, the list of supported combinations is exported. This is
+ * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically,
+ * it exports a list of "groups", and at any point in time the
+ * interfaces that are currently active must fall into any one of
+ * the advertised groups. Within each group, there are restrictions
+ * on the number of interfaces of different types that are supported
+ * and also the number of different channels, along with potentially
+ * some other restrictions. See &enum nl80211_if_combination_attrs.
+ *
+ * All together, these attributes define the concurrency of virtual
+ * interfaces that a given device supports.
+ */
+
+/**
+ * DOC: packet coalesce support
+ *
+ * In most cases, host that receives IPv4 and IPv6 multicast/broadcast
+ * packets does not do anything with these packets. Therefore the
+ * reception of these unwanted packets causes unnecessary processing
+ * and power consumption.
+ *
+ * Packet coalesce feature helps to reduce number of received interrupts
+ * to host by buffering these packets in firmware/hardware for some
+ * predefined time. Received interrupt will be generated when one of the
+ * following events occur.
+ * a) Expiration of hardware timer whose expiration time is set to maximum
+ * coalescing delay of matching coalesce rule.
+ * b) Coalescing buffer in hardware reaches it's limit.
+ * c) Packet doesn't match any of the configured coalesce rules.
+ *
+ * User needs to configure following parameters for creating a coalesce
+ * rule.
+ * a) Maximum coalescing delay
+ * b) List of packet patterns which needs to be matched
+ * c) Condition for coalescence. pattern 'match' or 'no match'
+ * Multiple such rules can be created.
+ */
+
+/**
+ * enum nl80211_commands - supported nl80211 commands
+ *
+ * @NL80211_CMD_UNSPEC: unspecified command to catch errors
+ *
+ * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request
+ *     to get a list of all present wiphys.
+ * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or
+ *     %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME,
+ *     %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ (and the
+ *     attributes determining the channel width; this is used for setting
+ *     monitor mode channel),  %NL80211_ATTR_WIPHY_RETRY_SHORT,
+ *     %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD,
+ *     and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD.
+ *     However, for setting the channel, see %NL80211_CMD_SET_CHANNEL
+ *     instead, the support here is for backward compatibility only.
+ * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
+ *     or rename notification. Has attributes %NL80211_ATTR_WIPHY and
+ *     %NL80211_ATTR_WIPHY_NAME.
+ * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes
+ *     %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME.
+ *
+ * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration;
+ *     either a dump request for all interfaces or a specific get with a
+ *     single %NL80211_ATTR_IFINDEX is supported.
+ * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE.
+ * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response
+ *     to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX,
+ *     %NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also
+ *     be sent from userspace to request creation of a new virtual interface,
+ *     then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and
+ *     %NL80211_ATTR_IFNAME.
+ * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from
+ *     userspace to request deletion of a virtual interface, then requires
+ *     attribute %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
+ *     by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
+ * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
+ *     %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
+ * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
+ *     %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER,
+ *     and %NL80211_ATTR_KEY_SEQ attributes.
+ * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
+ *     or %NL80211_ATTR_MAC.
+ *
+ * @NL80211_CMD_GET_BEACON: (not used)
+ * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface
+ *     using the %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL
+ *     attributes. For drivers that generate the beacon and probe responses
+ *     internally, the following attributes must be provided: %NL80211_ATTR_IE,
+ *     %NL80211_ATTR_IE_PROBE_RESP and %NL80211_ATTR_IE_ASSOC_RESP.
+ * @NL80211_CMD_START_AP: Start AP operation on an AP interface, parameters
+ *     are like for %NL80211_CMD_SET_BEACON, and additionally parameters that
+ *     do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL,
+ *     %NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID,
+ *     %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE,
+ *     %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
+ *     %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
+ *     %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
+ *     %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
+ *     The channel to use can be set on the interface or be given using the
+ *     %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width.
+ * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
+ * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface
+ * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP
+ *
+ * @NL80211_CMD_GET_STATION: Get station attributes for station identified by
+ *     %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_STATION: Set station attributes for station identified by
+ *     %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the
+ *     the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC
+ *     or, if no MAC address given, all stations, on the interface identified
+ *     by %NL80211_ATTR_IFINDEX. %NL80211_ATTR_MGMT_SUBTYPE and
+ *     %NL80211_ATTR_REASON_CODE can optionally be used to specify which type
+ *     of disconnection indication should be sent to the station
+ *     (Deauthentication or Disassociation frame and reason code for that
+ *     frame).
+ *
+ * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_MPATH:  Set mesh path attributes for mesh path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by
+ *     %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP.
+ * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by
+ *     %NL80211_ATTR_MAC.
+ * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the
+ *     the interface identified by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC
+ *     or, if no MAC address given, all mesh paths, on the interface identified
+ *     by %NL80211_ATTR_IFINDEX.
+ * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by
+ *     %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set
+ *     regulatory domain. If %NL80211_ATTR_WIPHY is specified and the device
+ *     has a private regulatory domain, it will be returned. Otherwise, the
+ *     global regdomain will be returned.
+ *     A device will have a private regulatory domain if it uses the
+ *     regulatory_hint() API. Even when a private regdomain is used the channel
+ *     information will still be mended according to further hints from
+ *     the regulatory core to help with compliance. A dump version of this API
+ *     is now available which will returns the global regdomain as well as
+ *     all private regdomains of present wiphys (for those that have it).
+ *     If a wiphy is self-managed (%NL80211_ATTR_WIPHY_SELF_MANAGED_REG), then
+ *     its private regdomain is the only valid one for it. The regulatory
+ *     core is not used to help with compliance in this case.
+ * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command
+ *     after being queried by the kernel. CRDA replies by sending a regulatory
+ *     domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our
+ *     current alpha2 if it found a match. It also provides
+ *     NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each
+ *     regulatory rule is a nested set of attributes  given by
+ *     %NL80211_ATTR_REG_RULE_FREQ_[START|END] and
+ *     %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP.
+ * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain
+ *     to the specified ISO/IEC 3166-1 alpha2 country code. The core will
+ *     store this as a valid request and then query userspace for it.
+ *
+ * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the
+ *     interface identified by %NL80211_ATTR_IFINDEX
+ *
+ * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the
+ *      interface identified by %NL80211_ATTR_IFINDEX
+ *
+ * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
+ *     interface is identified with %NL80211_ATTR_IFINDEX and the management
+ *     frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be
+ *     added to the end of the specified management frame is specified with
+ *     %NL80211_ATTR_IE. If the command succeeds, the requested data will be
+ *     added to all specified management frames generated by
+ *     kernel/firmware/driver.
+ *     Note: This command has been removed and it is only reserved at this
+ *     point to avoid re-using existing command number. The functionality this
+ *     command was planned for has been provided with cleaner design with the
+ *     option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN,
+ *     NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE,
+ *     NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE.
+ *
+ * @NL80211_CMD_GET_SCAN: get scan results
+ * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters
+ *     %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the
+ *     probe requests at CCK rate or not.
+ * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to
+ *     NL80211_CMD_GET_SCAN and on the "scan" multicast group)
+ * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
+ *     partial scan results may be available
+ *
+ * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain
+ *     intervals and certain number of cycles, as specified by
+ *     %NL80211_ATTR_SCHED_SCAN_PLANS. If %NL80211_ATTR_SCHED_SCAN_PLANS is
+ *     not specified and only %NL80211_ATTR_SCHED_SCAN_INTERVAL is specified,
+ *     scheduled scan will run in an infinite loop with the specified interval.
+ *     These attributes are mutually exculsive,
+ *     i.e. NL80211_ATTR_SCHED_SCAN_INTERVAL must not be passed if
+ *     NL80211_ATTR_SCHED_SCAN_PLANS is defined.
+ *     If for some reason scheduled scan is aborted by the driver, all scan
+ *     plans are canceled (including scan plans that did not start yet).
+ *     Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS)
+ *     are passed, they are used in the probe requests.  For
+ *     broadcast, a broadcast SSID must be passed (ie. an empty
+ *     string).  If no SSID is passed, no probe requests are sent and
+ *     a passive scan is performed.  %NL80211_ATTR_SCAN_FREQUENCIES,
+ *     if passed, define which channels should be scanned; if not
+ *     passed, all channels allowed for the current regulatory domain
+ *     are used.  Extra IEs can also be passed from the userspace by
+ *     using the %NL80211_ATTR_IE attribute.  The first cycle of the
+ *     scheduled scan can be delayed by %NL80211_ATTR_SCHED_SCAN_DELAY
+ *     is supplied.
+ * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if
+ *     scheduled scan is not running. The caller may assume that as soon
+ *     as the call returns, it is safe to start a new scheduled scan again.
+ * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan
+ *     results available.
+ * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has
+ *     stopped.  The driver may issue this event at any time during a
+ *     scheduled scan.  One reason for stopping the scan is if the hardware
+ *     does not support starting an association or a normal scan while running
+ *     a scheduled scan.  This event is also sent when the
+ *     %NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface
+ *     is brought down while a scheduled scan was running.
+ *
+ * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation
+ *      or noise level
+ * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
+ *     NL80211_CMD_GET_SURVEY and on the "scan" multicast group)
+ *
+ * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC
+ *     (for the BSSID) and %NL80211_ATTR_PMKID.
+ * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC
+ *     (for the BSSID) and %NL80211_ATTR_PMKID.
+ * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries.
+ *
+ * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
+ *     has been changed and provides details of the request information
+ *     that caused the change such as who initiated the regulatory request
+ *     (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx
+ *     (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if
+ *     the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or
+ *     %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain
+ *     set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is
+ *     %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
+ *     to (%NL80211_ATTR_REG_ALPHA2).
+ * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon
+ *     has been found while world roaming thus enabling active scan or
+ *     any mode of operation that initiates TX (beacons) on a channel
+ *     where we would not have been able to do either before. As an example
+ *     if you are world roaming (regulatory domain set to world or if your
+ *     driver is using a custom world roaming regulatory domain) and while
+ *     doing a passive scan on the 5 GHz band you find an AP there (if not
+ *     on a DFS channel) you will now be able to actively scan for that AP
+ *     or use AP mode on your card on that same channel. Note that this will
+ *     never be used for channels 1-11 on the 2 GHz band as they are always
+ *     enabled world wide. This beacon hint is only sent if your device had
+ *     either disabled active scanning or beaconing on a channel. We send to
+ *     userspace the wiphy on which we removed a restriction from
+ *     (%NL80211_ATTR_WIPHY) and the channel on which this occurred
+ *     before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER)
+ *     the beacon hint was processed.
+ *
+ * @NL80211_CMD_AUTHENTICATE: authentication request and notification.
+ *     This command is used both as a command (request to authenticate) and
+ *     as an event on the "mlme" multicast group indicating completion of the
+ *     authentication process.
+ *     When used as a command, %NL80211_ATTR_IFINDEX is used to identify the
+ *     interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and
+ *     BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify
+ *     the SSID (mainly for association, but is included in authentication
+ *     request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used
+ *     to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE
+ *     is used to specify the authentication type. %NL80211_ATTR_IE is used to
+ *     define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs)
+ *     to be added to the frame.
+ *     When used as an event, this reports reception of an Authentication
+ *     frame in station and IBSS modes when the local MLME processed the
+ *     frame, i.e., it was for the local STA and was received in correct
+ *     state. This is similar to MLME-AUTHENTICATE.confirm primitive in the
+ *     MLME SAP interface (kernel providing MLME, userspace SME). The
+ *     included %NL80211_ATTR_FRAME attribute contains the management frame
+ *     (including both the header and frame body, but not FCS). This event is
+ *     also used to indicate if the authentication attempt timed out. In that
+ *     case the %NL80211_ATTR_FRAME attribute is replaced with a
+ *     %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which
+ *     pending authentication timed out).
+ * @NL80211_CMD_ASSOCIATE: association request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Association and Reassociation
+ *     (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request,
+ *     MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives).
+ * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to
+ *     MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication
+ *     primitives).
+ * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like
+ *     NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to
+ *     MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives).
+ *
+ * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael
+ *     MIC (part of TKIP) failure; sent on the "mlme" multicast group; the
+ *     event includes %NL80211_ATTR_MAC to describe the source MAC address of
+ *     the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key
+ *     type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and
+ *     %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this
+ *     event matches with MLME-MICHAELMICFAILURE.indication() primitive
+ *
+ * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a
+ *     FREQ attribute (for the initial frequency if no peer can be found)
+ *     and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those
+ *     should be fixed rather than automatically determined. Can only be
+ *     executed on a network interface that is UP, and fixed BSSID/FREQ
+ *     may be rejected. Another optional parameter is the beacon interval,
+ *     given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not
+ *     given defaults to 100 TU (102.4ms).
+ * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is
+ *     determined by the network interface.
+ *
+ * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute
+ *     to identify the device, and the TESTDATA blob attribute to pass through
+ *     to the driver.
+ *
+ * @NL80211_CMD_CONNECT: connection request and notification; this command
+ *     requests to connect to a specified network but without separating
+ *     auth and assoc steps. For this, you need to specify the SSID in a
+ *     %NL80211_ATTR_SSID attribute, and can optionally specify the association
+ *     IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,
+ *     %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,
+ *     %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
+ *     %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and
+ *     %NL80211_ATTR_WIPHY_FREQ_HINT.
+ *     If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are
+ *     restrictions on BSS selection, i.e., they effectively prevent roaming
+ *     within the ESS. %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT
+ *     can be included to provide a recommendation of the initial BSS while
+ *     allowing the driver to roam to other BSSes within the ESS and also to
+ *     ignore this recommendation if the indicated BSS is not ideal. Only one
+ *     set of BSSID,frequency parameters is used (i.e., either the enforcing
+ *     %NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict
+ *     %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT).
+ *     Background scan period can optionally be
+ *     specified in %NL80211_ATTR_BG_SCAN_PERIOD,
+ *     if not specified default background scan configuration
+ *     in driver is used and if period value is 0, bg scan will be disabled.
+ *     This attribute is ignored if driver does not support roam scan.
+ *     It is also sent as an event, with the BSSID and response IEs when the
+ *     connection is established or failed to be established. This can be
+ *     determined by the STATUS_CODE attribute.
+ * @NL80211_CMD_ROAM: request that the card roam (currently not implemented),
+ *     sent as an event when the card/driver roamed by itself.
+ * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify
+ *     userspace that a connection was dropped by the AP or due to other
+ *     reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and
+ *     %NL80211_ATTR_REASON_CODE attributes are used.
+ *
+ * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices
+ *     associated with this wiphy must be down and will follow.
+ *
+ * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified
+ *     channel for the specified amount of time. This can be used to do
+ *     off-channel operations like transmit a Public Action frame and wait for
+ *     a response while being associated to an AP on another channel.
+ *     %NL80211_ATTR_IFINDEX is used to specify which interface (and thus
+ *     radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the
+ *     frequency for the operation.
+ *     %NL80211_ATTR_DURATION is used to specify the duration in milliseconds
+ *     to remain on the channel. This command is also used as an event to
+ *     notify when the requested duration starts (it may take a while for the
+ *     driver to schedule this time due to other concurrent needs for the
+ *     radio).
+ *     When called, this operation returns a cookie (%NL80211_ATTR_COOKIE)
+ *     that will be included with any events pertaining to this request;
+ *     the cookie is also used to cancel the request.
+ * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a
+ *     pending remain-on-channel duration if the desired operation has been
+ *     completed prior to expiration of the originally requested duration.
+ *     %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the
+ *     radio. The %NL80211_ATTR_COOKIE attribute must be given as well to
+ *     uniquely identify the request.
+ *     This command is also used as an event to notify when a requested
+ *     remain-on-channel duration has expired.
+ *
+ * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX
+ *     rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface
+ *     and @NL80211_ATTR_TX_RATES the set of allowed rates.
+ *
+ * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames
+ *     (via @NL80211_CMD_FRAME) for processing in userspace. This command
+ *     requires an interface index, a frame type attribute (optional for
+ *     backward compatibility reasons, if not given assumes action frames)
+ *     and a match attribute containing the first few bytes of the frame
+ *     that should match, e.g. a single byte for only a category match or
+ *     four bytes for vendor frames including the OUI. The registration
+ *     cannot be dropped, but is removed automatically when the netlink
+ *     socket is closed. Multiple registrations can be made.
+ * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for
+ *     backward compatibility
+ * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This
+ *     command is used both as a request to transmit a management frame and
+ *     as an event indicating reception of a frame that was not processed in
+ *     kernel code, but is for us (i.e., which may need to be processed in a
+ *     user space application). %NL80211_ATTR_FRAME is used to specify the
+ *     frame contents (including header). %NL80211_ATTR_WIPHY_FREQ is used
+ *     to indicate on which channel the frame is to be transmitted or was
+ *     received. If this channel is not the current channel (remain-on-channel
+ *     or the operational channel) the device will switch to the given channel
+ *     and transmit the frame, optionally waiting for a response for the time
+ *     specified using %NL80211_ATTR_DURATION. When called, this operation
+ *     returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the
+ *     TX status event pertaining to the TX request.
+ *     %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the
+ *     management frames at CCK rate or not in 2GHz band.
+ *     %NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA
+ *     counters which will be updated to the current value. This attribute
+ *     is used during CSA period.
+ * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
+ *     command may be used with the corresponding cookie to cancel the wait
+ *     time if it is known that it is no longer necessary.
+ * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility.
+ * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame
+ *     transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
+ *     the TX command and %NL80211_ATTR_FRAME includes the contents of the
+ *     frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
+ *     the frame.
+ * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
+ *     backward compatibility.
+ *
+ * @NL80211_CMD_SET_POWER_SAVE: Set powersave, using %NL80211_ATTR_PS_STATE
+ * @NL80211_CMD_GET_POWER_SAVE: Get powersave status in %NL80211_ATTR_PS_STATE
+ *
+ * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command
+ *     is used to configure connection quality monitoring notification trigger
+ *     levels.
+ * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This
+ *     command is used as an event to indicate the that a trigger level was
+ *     reached.
+ * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ
+ *     and the attributes determining channel width) the given interface
+ *     (identifed by %NL80211_ATTR_IFINDEX) shall operate on.
+ *     In case multiple channels are supported by the device, the mechanism
+ *     with which it switches channels is implementation-defined.
+ *     When a monitor interface is given, it can only switch channel while
+ *     no other interfaces are operating to avoid disturbing the operation
+ *     of any other interfaces, and other interfaces will again take
+ *     precedence when they are used.
+ *
+ * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
+ *
+ * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial
+ *     mesh config parameters may be given.
+ * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the
+ *     network is determined by the network interface.
+ *
+ * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
+ *     notification. This event is used to indicate that an unprotected
+ *     deauthentication frame was dropped when MFP is in use.
+ * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
+ *     notification. This event is used to indicate that an unprotected
+ *     disassociation frame was dropped when MFP is in use.
+ *
+ * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a
+ *      beacon or probe response from a compatible mesh peer.  This is only
+ *      sent while no station information (sta_info) exists for the new peer
+ *      candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH,
+ *      @NL80211_MESH_SETUP_USERSPACE_AMPE, or
+ *      @NL80211_MESH_SETUP_USERSPACE_MPM is set.  On reception of this
+ *      notification, userspace may decide to create a new station
+ *      (@NL80211_CMD_NEW_STATION).  To stop this notification from
+ *      reoccurring, the userspace authentication daemon may want to create the
+ *      new station with the AUTHENTICATED flag unset and maybe change it later
+ *      depending on the authentication result.
+ *
+ * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings.
+ * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings.
+ *     Since wireless is more complex than wired ethernet, it supports
+ *     various triggers. These triggers can be configured through this
+ *     command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For
+ *     more background information, see
+ *     http://wireless.kernel.org/en/users/Documentation/WoWLAN.
+ *     The @NL80211_CMD_SET_WOWLAN command can also be used as a notification
+ *     from the driver reporting the wakeup reason. In this case, the
+ *     @NL80211_ATTR_WOWLAN_TRIGGERS attribute will contain the reason
+ *     for the wakeup, if it was caused by wireless. If it is not present
+ *     in the wakeup notification, the wireless device didn't cause the
+ *     wakeup but reports that it was woken up.
+ *
+ * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver
+ *     the necessary information for supporting GTK rekey offload. This
+ *     feature is typically used during WoWLAN. The configuration data
+ *     is contained in %NL80211_ATTR_REKEY_DATA (which is nested and
+ *     contains the data in sub-attributes). After rekeying happened,
+ *     this command may also be sent by the driver as an MLME event to
+ *     inform userspace of the new replay counter.
+ *
+ * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace
+ *     of PMKSA caching dandidates.
+ *
+ * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup).
+ *     In addition, this can be used as an event to request userspace to take
+ *     actions on TDLS links (set up a new link or tear down an existing one).
+ *     In such events, %NL80211_ATTR_TDLS_OPERATION indicates the requested
+ *     operation, %NL80211_ATTR_MAC contains the peer MAC address, and
+ *     %NL80211_ATTR_REASON_CODE the reason code to be used (only with
+ *     %NL80211_TDLS_TEARDOWN).
+ * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. The
+ *     %NL80211_ATTR_TDLS_ACTION attribute determines the type of frame to be
+ *     sent. Public Action codes (802.11-2012 8.1.5.1) will be sent as
+ *     802.11 management frames, while TDLS action codes (802.11-2012
+ *     8.5.13.1) will be encapsulated and sent as data frames. The currently
+ *     supported Public Action code is %WLAN_PUB_ACTION_TDLS_DISCOVER_RES
+ *     and the currently supported TDLS actions codes are given in
+ *     &enum ieee80211_tdls_actioncode.
+ *
+ * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP
+ *     (or GO) interface (i.e. hostapd) to ask for unexpected frames to
+ *     implement sending deauth to stations that send unexpected class 3
+ *     frames. Also used as the event sent by the kernel when such a frame
+ *     is received.
+ *     For the event, the %NL80211_ATTR_MAC attribute carries the TA and
+ *     other attributes like the interface index are present.
+ *     If used as the command it must have an interface index and you can
+ *     only unsubscribe from the event by closing the socket. Subscription
+ *     is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events.
+ *
+ * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the
+ *     associated station identified by %NL80211_ATTR_MAC sent a 4addr frame
+ *     and wasn't already in a 4-addr VLAN. The event will be sent similarly
+ *     to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener.
+ *
+ * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface
+ *     by sending a null data frame to it and reporting when the frame is
+ *     acknowleged. This is used to allow timing out inactive clients. Uses
+ *     %NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a
+ *     direct reply with an %NL80211_ATTR_COOKIE that is later used to match
+ *     up the event with the request. The event includes the same data and
+ *     has %NL80211_ATTR_ACK set if the frame was ACKed.
+ *
+ * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from
+ *     other BSSes when any interfaces are in AP mode. This helps implement
+ *     OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME
+ *     messages. Note that per PHY only one application may register.
+ *
+ * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether
+ *      No Acknowledgement Policy should be applied.
+ *
+ * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels
+ *     independently of the userspace SME, send this event indicating
+ *     %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ and the
+ *     attributes determining channel width.  This indication may also be
+ *     sent when a remotely-initiated switch (e.g., when a STA receives a CSA
+ *     from the remote AP) is completed;
+ *
+ * @NL80211_CMD_CH_SWITCH_STARTED_NOTIFY: Notify that a channel switch
+ *     has been started on an interface, regardless of the initiator
+ *     (ie. whether it was requested from a remote device or
+ *     initiated on our own).  It indicates that
+ *     %NL80211_ATTR_IFINDEX will be on %NL80211_ATTR_WIPHY_FREQ
+ *     after %NL80211_ATTR_CH_SWITCH_COUNT TBTT's.  The userspace may
+ *     decide to react to this indication by requesting other
+ *     interfaces to change channel as well.
+ *
+ * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by
+ *     its %NL80211_ATTR_WDEV identifier. It must have been created with
+ *     %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the
+ *     P2P Device can be used for P2P operations, e.g. remain-on-channel and
+ *     public action frame TX.
+ * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by
+ *     its %NL80211_ATTR_WDEV identifier.
+ *
+ * @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to
+ *     notify userspace that AP has rejected the connection request from a
+ *     station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON
+ *     is used for this.
+ *
+ * @NL80211_CMD_SET_MCAST_RATE: Change the rate used to send multicast frames
+ *     for IBSS or MESH vif.
+ *
+ * @NL80211_CMD_SET_MAC_ACL: sets ACL for MAC address based access control.
+ *     This is to be used with the drivers advertising the support of MAC
+ *     address based access control. List of MAC addresses is passed in
+ *     %NL80211_ATTR_MAC_ADDRS and ACL policy is passed in
+ *     %NL80211_ATTR_ACL_POLICY. Driver will enable ACL with this list, if it
+ *     is not already done. The new list will replace any existing list. Driver
+ *     will clear its ACL when the list of MAC addresses passed is empty. This
+ *     command is used in AP/P2P GO mode. Driver has to make sure to clear its
+ *     ACL list during %NL80211_CMD_STOP_AP.
+ *
+ * @NL80211_CMD_RADAR_DETECT: Start a Channel availability check (CAC). Once
+ *     a radar is detected or the channel availability scan (CAC) has finished
+ *     or was aborted, or a radar was detected, usermode will be notified with
+ *     this event. This command is also used to notify userspace about radars
+ *     while operating on this channel.
+ *     %NL80211_ATTR_RADAR_EVENT is used to inform about the type of the
+ *     event.
+ *
+ * @NL80211_CMD_GET_PROTOCOL_FEATURES: Get global nl80211 protocol features,
+ *     i.e. features for the nl80211 protocol rather than device features.
+ *     Returns the features in the %NL80211_ATTR_PROTOCOL_FEATURES bitmap.
+ *
+ * @NL80211_CMD_UPDATE_FT_IES: Pass down the most up-to-date Fast Transition
+ *     Information Element to the WLAN driver
+ *
+ * @NL80211_CMD_FT_EVENT: Send a Fast transition event from the WLAN driver
+ *     to the supplicant. This will carry the target AP's MAC address along
+ *     with the relevant Information Elements. This event is used to report
+ *     received FT IEs (MDIE, FTIE, RSN IE, TIE, RICIE).
+ *
+ * @NL80211_CMD_CRIT_PROTOCOL_START: Indicates user-space will start running
+ *     a critical protocol that needs more reliability in the connection to
+ *     complete.
+ *
+ * @NL80211_CMD_CRIT_PROTOCOL_STOP: Indicates the connection reliability can
+ *     return back to normal.
+ *
+ * @NL80211_CMD_GET_COALESCE: Get currently supported coalesce rules.
+ * @NL80211_CMD_SET_COALESCE: Configure coalesce rules or clear existing rules.
+ *
+ * @NL80211_CMD_CHANNEL_SWITCH: Perform a channel switch by announcing the
+ *     the new channel information (Channel Switch Announcement - CSA)
+ *     in the beacon for some time (as defined in the
+ *     %NL80211_ATTR_CH_SWITCH_COUNT parameter) and then change to the
+ *     new channel. Userspace provides the new channel information (using
+ *     %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel
+ *     width). %NL80211_ATTR_CH_SWITCH_BLOCK_TX may be supplied to inform
+ *     other station that transmission must be blocked until the channel
+ *     switch is complete.
+ *
+ * @NL80211_CMD_VENDOR: Vendor-specified command/event. The command is specified
+ *     by the %NL80211_ATTR_VENDOR_ID attribute and a sub-command in
+ *     %NL80211_ATTR_VENDOR_SUBCMD. Parameter(s) can be transported in
+ *     %NL80211_ATTR_VENDOR_DATA.
+ *     For feature advertisement, the %NL80211_ATTR_VENDOR_DATA attribute is
+ *     used in the wiphy data as a nested attribute containing descriptions
+ *     (&struct nl80211_vendor_cmd_info) of the supported vendor commands.
+ *     This may also be sent as an event with the same attributes.
+ *
+ * @NL80211_CMD_SET_QOS_MAP: Set Interworking QoS mapping for IP DSCP values.
+ *     The QoS mapping information is included in %NL80211_ATTR_QOS_MAP. If
+ *     that attribute is not included, QoS mapping is disabled. Since this
+ *     QoS mapping is relevant for IP packets, it is only valid during an
+ *     association. This is cleared on disassociation and AP restart.
+ *
+ * @NL80211_CMD_ADD_TX_TS: Ask the kernel to add a traffic stream for the given
+ *     %NL80211_ATTR_TSID and %NL80211_ATTR_MAC with %NL80211_ATTR_USER_PRIO
+ *     and %NL80211_ATTR_ADMITTED_TIME parameters.
+ *     Note that the action frame handshake with the AP shall be handled by
+ *     userspace via the normal management RX/TX framework, this only sets
+ *     up the TX TS in the driver/device.
+ *     If the admitted time attribute is not added then the request just checks
+ *     if a subsequent setup could be successful, the intent is to use this to
+ *     avoid setting up a session with the AP when local restrictions would
+ *     make that impossible. However, the subsequent "real" setup may still
+ *     fail even if the check was successful.
+ * @NL80211_CMD_DEL_TX_TS: Remove an existing TS with the %NL80211_ATTR_TSID
+ *     and %NL80211_ATTR_MAC parameters. It isn't necessary to call this
+ *     before removing a station entry entirely, or before disassociating
+ *     or similar, cleanup will happen in the driver/device in this case.
+ *
+ * @NL80211_CMD_GET_MPP: Get mesh path attributes for mesh proxy path to
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
+ *
+ * @NL80211_CMD_JOIN_OCB: Join the OCB network. The center frequency and
+ *     bandwidth of a channel must be given.
+ * @NL80211_CMD_LEAVE_OCB: Leave the OCB network -- no special arguments, the
+ *     network is determined by the network interface.
+ *
+ * @NL80211_CMD_TDLS_CHANNEL_SWITCH: Start channel-switching with a TDLS peer,
+ *     identified by the %NL80211_ATTR_MAC parameter. A target channel is
+ *     provided via %NL80211_ATTR_WIPHY_FREQ and other attributes determining
+ *     channel width/type. The target operating class is given via
+ *     %NL80211_ATTR_OPER_CLASS.
+ *     The driver is responsible for continually initiating channel-switching
+ *     operations and returning to the base channel for communication with the
+ *     AP.
+ * @NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH: Stop channel-switching with a TDLS
+ *     peer given by %NL80211_ATTR_MAC. Both peers must be on the base channel
+ *     when this command completes.
+ *
+ * @NL80211_CMD_WIPHY_REG_CHANGE: Similar to %NL80211_CMD_REG_CHANGE, but used
+ *     as an event to indicate changes for devices with wiphy-specific regdom
+ *     management.
+ *
+ * @NL80211_CMD_MAX: highest used command number
+ * @__NL80211_CMD_AFTER_LAST: internal use
+ */
+enum nl80211_commands {
+/* don't change the order or add anything between, this is ABI! */
+       NL80211_CMD_UNSPEC,
+
+       NL80211_CMD_GET_WIPHY,          /* can dump */
+       NL80211_CMD_SET_WIPHY,
+       NL80211_CMD_NEW_WIPHY,
+       NL80211_CMD_DEL_WIPHY,
+
+       NL80211_CMD_GET_INTERFACE,      /* can dump */
+       NL80211_CMD_SET_INTERFACE,
+       NL80211_CMD_NEW_INTERFACE,
+       NL80211_CMD_DEL_INTERFACE,
+
+       NL80211_CMD_GET_KEY,
+       NL80211_CMD_SET_KEY,
+       NL80211_CMD_NEW_KEY,
+       NL80211_CMD_DEL_KEY,
+
+       NL80211_CMD_GET_BEACON,
+       NL80211_CMD_SET_BEACON,
+       NL80211_CMD_START_AP,
+       NL80211_CMD_NEW_BEACON = NL80211_CMD_START_AP,
+       NL80211_CMD_STOP_AP,
+       NL80211_CMD_DEL_BEACON = NL80211_CMD_STOP_AP,
+
+       NL80211_CMD_GET_STATION,
+       NL80211_CMD_SET_STATION,
+       NL80211_CMD_NEW_STATION,
+       NL80211_CMD_DEL_STATION,
+
+       NL80211_CMD_GET_MPATH,
+       NL80211_CMD_SET_MPATH,
+       NL80211_CMD_NEW_MPATH,
+       NL80211_CMD_DEL_MPATH,
+
+       NL80211_CMD_SET_BSS,
+
+       NL80211_CMD_SET_REG,
+       NL80211_CMD_REQ_SET_REG,
+
+       NL80211_CMD_GET_MESH_CONFIG,
+       NL80211_CMD_SET_MESH_CONFIG,
+
+       NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */,
+
+       NL80211_CMD_GET_REG,
+
+       NL80211_CMD_GET_SCAN,
+       NL80211_CMD_TRIGGER_SCAN,
+       NL80211_CMD_NEW_SCAN_RESULTS,
+       NL80211_CMD_SCAN_ABORTED,
+
+       NL80211_CMD_REG_CHANGE,
+
+       NL80211_CMD_AUTHENTICATE,
+       NL80211_CMD_ASSOCIATE,
+       NL80211_CMD_DEAUTHENTICATE,
+       NL80211_CMD_DISASSOCIATE,
+
+       NL80211_CMD_MICHAEL_MIC_FAILURE,
+
+       NL80211_CMD_REG_BEACON_HINT,
+
+       NL80211_CMD_JOIN_IBSS,
+       NL80211_CMD_LEAVE_IBSS,
+
+       NL80211_CMD_TESTMODE,
+
+       NL80211_CMD_CONNECT,
+       NL80211_CMD_ROAM,
+       NL80211_CMD_DISCONNECT,
+
+       NL80211_CMD_SET_WIPHY_NETNS,
+
+       NL80211_CMD_GET_SURVEY,
+       NL80211_CMD_NEW_SURVEY_RESULTS,
+
+       NL80211_CMD_SET_PMKSA,
+       NL80211_CMD_DEL_PMKSA,
+       NL80211_CMD_FLUSH_PMKSA,
+
+       NL80211_CMD_REMAIN_ON_CHANNEL,
+       NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
+
+       NL80211_CMD_SET_TX_BITRATE_MASK,
+
+       NL80211_CMD_REGISTER_FRAME,
+       NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME,
+       NL80211_CMD_FRAME,
+       NL80211_CMD_ACTION = NL80211_CMD_FRAME,
+       NL80211_CMD_FRAME_TX_STATUS,
+       NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS,
+
+       NL80211_CMD_SET_POWER_SAVE,
+       NL80211_CMD_GET_POWER_SAVE,
+
+       NL80211_CMD_SET_CQM,
+       NL80211_CMD_NOTIFY_CQM,
+
+       NL80211_CMD_SET_CHANNEL,
+       NL80211_CMD_SET_WDS_PEER,
+
+       NL80211_CMD_FRAME_WAIT_CANCEL,
+
+       NL80211_CMD_JOIN_MESH,
+       NL80211_CMD_LEAVE_MESH,
+
+       NL80211_CMD_UNPROT_DEAUTHENTICATE,
+       NL80211_CMD_UNPROT_DISASSOCIATE,
+
+       NL80211_CMD_NEW_PEER_CANDIDATE,
+
+       NL80211_CMD_GET_WOWLAN,
+       NL80211_CMD_SET_WOWLAN,
+
+       NL80211_CMD_START_SCHED_SCAN,
+       NL80211_CMD_STOP_SCHED_SCAN,
+       NL80211_CMD_SCHED_SCAN_RESULTS,
+       NL80211_CMD_SCHED_SCAN_STOPPED,
+
+       NL80211_CMD_SET_REKEY_OFFLOAD,
+
+       NL80211_CMD_PMKSA_CANDIDATE,
+
+       NL80211_CMD_TDLS_OPER,
+       NL80211_CMD_TDLS_MGMT,
+
+       NL80211_CMD_UNEXPECTED_FRAME,
+
+       NL80211_CMD_PROBE_CLIENT,
+
+       NL80211_CMD_REGISTER_BEACONS,
+
+       NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
+
+       NL80211_CMD_SET_NOACK_MAP,
+
+       NL80211_CMD_CH_SWITCH_NOTIFY,
+
+       NL80211_CMD_START_P2P_DEVICE,
+       NL80211_CMD_STOP_P2P_DEVICE,
+
+       NL80211_CMD_CONN_FAILED,
+
+       NL80211_CMD_SET_MCAST_RATE,
+
+       NL80211_CMD_SET_MAC_ACL,
+
+       NL80211_CMD_RADAR_DETECT,
+
+       NL80211_CMD_GET_PROTOCOL_FEATURES,
+
+       NL80211_CMD_UPDATE_FT_IES,
+       NL80211_CMD_FT_EVENT,
+
+       NL80211_CMD_CRIT_PROTOCOL_START,
+       NL80211_CMD_CRIT_PROTOCOL_STOP,
+
+       NL80211_CMD_GET_COALESCE,
+       NL80211_CMD_SET_COALESCE,
+
+       NL80211_CMD_CHANNEL_SWITCH,
+
+       NL80211_CMD_VENDOR,
+
+       NL80211_CMD_SET_QOS_MAP,
+
+       NL80211_CMD_ADD_TX_TS,
+       NL80211_CMD_DEL_TX_TS,
+
+       NL80211_CMD_GET_MPP,
+
+       NL80211_CMD_JOIN_OCB,
+       NL80211_CMD_LEAVE_OCB,
+
+       NL80211_CMD_CH_SWITCH_STARTED_NOTIFY,
+
+       NL80211_CMD_TDLS_CHANNEL_SWITCH,
+       NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
+
+       NL80211_CMD_WIPHY_REG_CHANGE,
+
+       /* add new commands above here */
+
+       /* used to define NL80211_CMD_MAX below */
+       __NL80211_CMD_AFTER_LAST,
+       NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
+};
+
+/*
+ * Allow user space programs to use #ifdef on new commands by defining them
+ * here
+ */
+#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
+#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
+#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE
+#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE
+#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE
+#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE
+#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
+#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
+
+#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
+
+/* source-level API compatibility */
+#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
+#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
+#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE
+
+/**
+ * enum nl80211_attrs - nl80211 netlink attributes
+ *
+ * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors
+ *
+ * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf.
+ *     /sys/class/ieee80211/<phyname>/index
+ * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming)
+ * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters
+ * @NL80211_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz,
+ *     defines the channel together with the (deprecated)
+ *     %NL80211_ATTR_WIPHY_CHANNEL_TYPE attribute or the attributes
+ *     %NL80211_ATTR_CHANNEL_WIDTH and if needed %NL80211_ATTR_CENTER_FREQ1
+ *     and %NL80211_ATTR_CENTER_FREQ2
+ * @NL80211_ATTR_CHANNEL_WIDTH: u32 attribute containing one of the values
+ *     of &enum nl80211_chan_width, describing the channel width. See the
+ *     documentation of the enum for more information.
+ * @NL80211_ATTR_CENTER_FREQ1: Center frequency of the first part of the
+ *     channel, used for anything but 20 MHz bandwidth
+ * @NL80211_ATTR_CENTER_FREQ2: Center frequency of the second part of the
+ *     channel, used only for 80+80 MHz bandwidth
+ * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ
+ *     if HT20 or HT40 are to be used (i.e., HT disabled if not included):
+ *     NL80211_CHAN_NO_HT = HT not allowed (i.e., same as not including
+ *             this attribute)
+ *     NL80211_CHAN_HT20 = HT20 only
+ *     NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel
+ *     NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel
+ *     This attribute is now deprecated.
+ * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is
+ *     less than or equal to the RTS threshold; allowed range: 1..255;
+ *     dot11ShortRetryLimit; u8
+ * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is
+ *     greater than the RTS threshold; allowed range: 1..255;
+ *     dot11ShortLongLimit; u8
+ * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum
+ *     length in octets for frames; allowed range: 256..8000, disable
+ *     fragmentation with (u32)-1; dot11FragmentationThreshold; u32
+ * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length
+ *     larger than or equal to this use RTS/CTS handshake); allowed range:
+ *     0..65536, disable with (u32)-1; dot11RTSThreshold; u32
+ * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11
+ *     section 7.3.2.9; dot11CoverageClass; u8
+ *
+ * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on
+ * @NL80211_ATTR_IFNAME: network interface name
+ * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
+ *
+ * @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices
+ *     that don't have a netdev (u64)
+ *
+ * @NL80211_ATTR_MAC: MAC address (various uses)
+ *
+ * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of
+ *     16 bytes encryption key followed by 8 bytes each for TX and RX MIC
+ *     keys
+ * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3)
+ * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
+ *     section 7.3.2.25.1, e.g. 0x000FAC04)
+ * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
+ *     CCMP keys, each six bytes in little endian
+ * @NL80211_ATTR_KEY_DEFAULT: Flag attribute indicating the key is default key
+ * @NL80211_ATTR_KEY_DEFAULT_MGMT: Flag attribute indicating the key is the
+ *     default management key
+ * @NL80211_ATTR_CIPHER_SUITES_PAIRWISE: For crypto settings for connect or
+ *     other commands, indicates which pairwise cipher suites are used
+ * @NL80211_ATTR_CIPHER_SUITE_GROUP: For crypto settings for connect or
+ *     other commands, indicates which group cipher suite is used
+ *
+ * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU
+ * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing
+ * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE
+ * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE
+ *
+ * @NL80211_ATTR_STA_AID: Association ID for the station (u16)
+ * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of
+ *     &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2)
+ * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by
+ *     IEEE 802.11 7.3.1.6 (u16).
+ * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported
+ *     rates as defined by IEEE 802.11 7.3.2.2 but without the length
+ *     restriction (at most %NL80211_MAX_SUPP_RATES).
+ * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station
+ *     to, or the AP interface the station was originally added to to.
+ * @NL80211_ATTR_STA_INFO: information about a station, part of station info
+ *     given for %NL80211_CMD_GET_STATION, nested attribute containing
+ *     info as possible, see &enum nl80211_sta_info.
+ *
+ * @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands,
+ *     consisting of a nested array.
+ *
+ * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes).
+ * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link
+ *     (see &enum nl80211_plink_action).
+ * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path.
+ * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path
+ *     info given for %NL80211_CMD_GET_MPATH, nested attribute described at
+ *     &enum nl80211_mpath_info.
+ *
+ * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of
+ *      &enum nl80211_mntr_flags.
+ *
+ * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the
+ *     current regulatory domain should be set to or is already set to.
+ *     For example, 'CR', for Costa Rica. This attribute is used by the kernel
+ *     to query the CRDA to retrieve one regulatory domain. This attribute can
+ *     also be used by userspace to query the kernel for the currently set
+ *     regulatory domain. We chose an alpha2 as that is also used by the
+ *     IEEE-802.11 country information element to identify a country.
+ *     Users can also simply ask the wireless core to set regulatory domain
+ *     to a specific alpha2.
+ * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory
+ *     rules.
+ *
+ * @NL80211_ATTR_BSS_CTS_PROT: whether CTS protection is enabled (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_SHORT_PREAMBLE: whether short preamble is enabled
+ *     (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled
+ *     (u8, 0 or 1)
+ * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic
+ *     rates in format defined by IEEE 802.11 7.3.2.2 but without the length
+ *     restriction (at most %NL80211_MAX_SUPP_RATES).
+ *
+ * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from
+ *     association request when used with NL80211_CMD_NEW_STATION)
+ *
+ * @NL80211_ATTR_SUPPORTED_IFTYPES: nested attribute containing all
+ *     supported interface types, each a flag attribute with the number
+ *     of the interface mode.
+ *
+ * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for
+ *     %NL80211_CMD_SET_MGMT_EXTRA_IE.
+ *
+ * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with
+ *     %NL80211_CMD_SET_MGMT_EXTRA_IE).
+ *
+ * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with
+ *     a single scan request, a wiphy attribute.
+ * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can
+ *     scan with a single scheduled scan request, a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements
+ *     that can be added to a scan request
+ * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information
+ *     elements that can be added to a scheduled scan request
+ * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be
+ *     used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute.
+ *
+ * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz)
+ * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive
+ *     scanning and include a zero-length SSID (wildcard) for wildcard scan
+ * @NL80211_ATTR_BSS: scan result BSS
+ *
+ * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain
+ *     currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_*
+ * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently
+ *     set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
+ *
+ * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies
+ *     an array of command numbers (i.e. a mapping index to command number)
+ *     that the driver for the given wiphy supports.
+ *
+ * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header
+ *     and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and
+ *     NL80211_CMD_ASSOCIATE events
+ * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets)
+ * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type,
+ *     represented as a u32
+ * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and
+ *     %NL80211_CMD_DISASSOCIATE, u16
+ *
+ * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as
+ *     a u32
+ *
+ * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _before_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
+ * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _after_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
+ *
+ * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported
+ *     cipher suites
+ *
+ * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look
+ *     for other networks on different channels
+ *
+ * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this
+ *     is used, e.g., with %NL80211_CMD_AUTHENTICATE event
+ *
+ * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is
+ *     used for the association (&enum nl80211_mfp, represented as a u32);
+ *     this attribute can be used
+ *     with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests
+ *
+ * @NL80211_ATTR_STA_FLAGS2: Attribute containing a
+ *     &struct nl80211_sta_flag_update.
+ *
+ * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls
+ *     IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in
+ *     station mode. If the flag is included in %NL80211_CMD_ASSOCIATE
+ *     request, the driver will assume that the port is unauthorized until
+ *     authorized by user space. Otherwise, port is marked authorized by
+ *     default in station mode.
+ * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the
+ *     ethertype that will be used for key negotiation. It can be
+ *     specified with the associate and connect commands. If it is not
+ *     specified, the value defaults to 0x888E (PAE, 802.1X). This
+ *     attribute is also used as a flag in the wiphy information to
+ *     indicate that protocols other than PAE are supported.
+ * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with
+ *     %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom
+ *     ethertype frames used for key negotiation must not be encrypted.
+ *
+ * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.
+ *     We recommend using nested, driver-specific attributes within this.
+ *
+ * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT
+ *     event was due to the AP disconnecting the station, and not due to
+ *     a local disconnect request.
+ * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT
+ *     event (u16)
+ * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating
+ *     that protected APs should be used. This is also used with NEW_BEACON to
+ *     indicate that the BSS is to use protection.
+ *
+ * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON
+ *     to indicate which unicast key ciphers will be used with the connection
+ *     (an array of u32).
+ * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which group key cipher will be used with the connection (a
+ *     u32).
+ * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which WPA version(s) the AP we want to associate with is using
+ *     (a u32 with flags from &enum nl80211_wpa_versions).
+ * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
+ *     indicate which key management algorithm(s) to use (an array of u32).
+ *
+ * @NL80211_ATTR_REQ_IE: (Re)association request information elements as
+ *     sent out by the card, for ROAM and successful CONNECT events.
+ * @NL80211_ATTR_RESP_IE: (Re)association response information elements as
+ *     sent by peer, for ROAM and successful CONNECT events.
+ *
+ * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE
+ *     commands to specify using a reassociate frame
+ *
+ * @NL80211_ATTR_KEY: key information in a nested attribute with
+ *     %NL80211_KEY_* sub-attributes
+ * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect()
+ *     and join_ibss(), key information is in a nested attribute each
+ *     with %NL80211_KEY_* sub-attributes
+ *
+ * @NL80211_ATTR_PID: Process ID of a network namespace.
+ *
+ * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for
+ *     dumps. This number increases whenever the object list being
+ *     dumped changes, and as such userspace can verify that it has
+ *     obtained a complete and consistent snapshot by verifying that
+ *     all dump messages contain the same generation number. If it
+ *     changed then the list changed and the dump should be repeated
+ *     completely from scratch.
+ *
+ * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface
+ *
+ * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of
+ *      the survey response for %NL80211_CMD_GET_SURVEY, nested attribute
+ *      containing info as possible, see &enum survey_info.
+ *
+ * @NL80211_ATTR_PMKID: PMK material for PMKSA caching.
+ * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can
+ *     cache, a wiphy attribute.
+ *
+ * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
+ * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that
+ *     specifies the maximum duration that can be requested with the
+ *     remain-on-channel operation, in milliseconds, u32.
+ *
+ * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
+ *
+ * @NL80211_ATTR_TX_RATES: Nested set of attributes
+ *     (enum nl80211_tx_rate_attributes) describing TX rates per band. The
+ *     enum nl80211_band value is used as the index (nla_type() of the nested
+ *     data. If a band is not included, it will be configured to allow all
+ *     rates based on negotiated supported rates information. This attribute
+ *     is used with %NL80211_CMD_SET_TX_BITRATE_MASK.
+ *
+ * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
+ *     at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME.
+ * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the
+ *     @NL80211_CMD_REGISTER_FRAME command.
+ * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a
+ *     nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing
+ *     information about which frame types can be transmitted with
+ *     %NL80211_CMD_FRAME.
+ * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a
+ *     nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing
+ *     information about which frame types can be registered for RX.
+ *
+ * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was
+ *     acknowledged by the recipient.
+ *
+ * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values.
+ *
+ * @NL80211_ATTR_CQM: connection quality monitor configuration in a
+ *     nested attribute with %NL80211_ATTR_CQM_* sub-attributes.
+ *
+ * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command
+ *     is requesting a local authentication/association state change without
+ *     invoking actual management frame exchange. This can be used with
+ *     NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE,
+ *     NL80211_CMD_DISASSOCIATE.
+ *
+ * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations
+ *     connected to this BSS.
+ *
+ * @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See
+ *      &enum nl80211_tx_power_setting for possible values.
+ * @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units.
+ *      This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING
+ *      for non-automatic settings.
+ *
+ * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly
+ *     means support for per-station GTKs.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting.
+ *     This can be used to mask out antennas which are not attached or should
+ *     not be used for transmitting. If an antenna is not selected in this
+ *     bitmap the hardware is not allowed to transmit on this antenna.
+ *
+ *     Each bit represents one antenna, starting with antenna 1 at the first
+ *     bit. Depending on which antennas are selected in the bitmap, 802.11n
+ *     drivers can derive which chainmasks to use (if all antennas belonging to
+ *     a particular chain are disabled this chain should be disabled) and if
+ *     a chain has diversity antennas wether diversity should be used or not.
+ *     HT capabilities (STBC, TX Beamforming, Antenna selection) can be
+ *     derived from the available chains after applying the antenna mask.
+ *     Non-802.11n drivers can derive wether to use diversity or not.
+ *     Drivers may reject configurations or RX/TX mask combinations they cannot
+ *     support by returning -EINVAL.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving.
+ *     This can be used to mask out antennas which are not attached or should
+ *     not be used for receiving. If an antenna is not selected in this bitmap
+ *     the hardware should not be configured to receive on this antenna.
+ *     For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available
+ *     for configuration as TX antennas via the above parameters.
+ *
+ * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available
+ *     for configuration as RX antennas via the above parameters.
+ *
+ * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS
+ *
+ * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be
+ *     transmitted on another channel when the channel given doesn't match
+ *     the current channel. If the current channel doesn't match and this
+ *     flag isn't set, the frame will be rejected. This is also used as an
+ *     nl80211 capability flag.
+ *
+ * @NL80211_ATTR_BSS_HT_OPMODE: HT operation mode (u16)
+ *
+ * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags
+ *     attributes, specifying what a key should be set as default as.
+ *     See &enum nl80211_key_default_types.
+ *
+ * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters.  These cannot be
+ *     changed once the mesh is active.
+ * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute
+ *     containing attributes from &enum nl80211_meshconf_params.
+ * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver
+ *     allows auth frames in a mesh to be passed to userspace for processing via
+ *     the @NL80211_MESH_SETUP_USERSPACE_AUTH flag.
+ * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as defined in
+ *     &enum nl80211_plink_state. Used when userspace is driving the peer link
+ *     management state machine.  @NL80211_MESH_SETUP_USERSPACE_AMPE or
+ *     @NL80211_MESH_SETUP_USERSPACE_MPM must be enabled.
+ *
+ * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy
+ *     capabilities, the supported WoWLAN triggers
+ * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to
+ *     indicate which WoW triggers should be enabled. This is also
+ *     used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN
+ *     triggers.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan
+ *     cycles, in msecs.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more
+ *     sets of attributes to match during scheduled scans.  Only BSSs
+ *     that match any of the sets will be reported.  These are
+ *     pass-thru filter rules.
+ *     For a match to succeed, the BSS must match all attributes of a
+ *     set.  Since not every hardware supports matching all types of
+ *     attributes, there is no guarantee that the reported BSSs are
+ *     fully complying with the match sets and userspace needs to be
+ *     able to ignore them by itself.
+ *     Thus, the implementation is somewhat hardware-dependent, but
+ *     this is only an optimization and the userspace application
+ *     needs to handle all the non-filtered results anyway.
+ *     If the match attributes don't make sense when combined with
+ *     the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID
+ *     is included in the probe request, but the match attributes
+ *     will never let it go through), -EINVAL may be returned.
+ *     If ommited, no filtering is done.
+ *
+ * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported
+ *     interface combinations. In each nested item, it contains attributes
+ *     defined in &enum nl80211_if_combination_attrs.
+ * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like
+ *     %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that
+ *     are managed in software: interfaces of these types aren't subject to
+ *     any restrictions in their number or combinations.
+ *
+ * @NL80211_ATTR_REKEY_DATA: nested attribute containing the information
+ *     necessary for GTK rekeying in the device, see &enum nl80211_rekey_data.
+ *
+ * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan,
+ *     nested array attribute containing an entry for each band, with the entry
+ *     being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but
+ *     without the length restriction (at most %NL80211_MAX_SUPP_RATES).
+ *
+ * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon
+ *     and Probe Response (when response to wildcard Probe Request); see
+ *     &enum nl80211_hidden_ssid, represented as a u32
+ *
+ * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame.
+ *     This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to
+ *     provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the
+ *     driver (or firmware) replies to Probe Request frames.
+ * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association
+ *     Response frames. This is used with %NL80211_CMD_NEW_BEACON and
+ *     %NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into
+ *     (Re)Association Response frames when the driver (or firmware) replies to
+ *     (Re)Association Request frames.
+ *
+ * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration
+ *     of the station, see &enum nl80211_sta_wme_attr.
+ * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working
+ *     as AP.
+ *
+ * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of
+ *     roaming to another AP in the same ESS if the signal lever is low.
+ *
+ * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching
+ *     candidate information, see &enum nl80211_pmksa_candidate_attr.
+ *
+ * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not
+ *     for management frames transmission. In order to avoid p2p probe/action
+ *     frames are being transmitted at CCK rate in 2GHz band, the user space
+ *     applications use this attribute.
+ *     This attribute is used with %NL80211_CMD_TRIGGER_SCAN and
+ *     %NL80211_CMD_FRAME commands.
+ *
+ * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup
+ *     request, link setup confirm, link teardown, etc.). Values are
+ *     described in the TDLS (802.11z) specification.
+ * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a
+ *     TDLS conversation between two devices.
+ * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see
+ *     &enum nl80211_tdls_operation, represented as a u8.
+ * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate
+ *     as a TDLS peer sta.
+ * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown
+ *     procedures should be performed by sending TDLS packets via
+ *     %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
+ *     used for asking the driver to perform a TDLS operation.
+ *
+ * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices
+ *     that have AP support to indicate that they have the AP SME integrated
+ *     with support for the features listed in this attribute, see
+ *     &enum nl80211_ap_sme_features.
+ *
+ * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells
+ *     the driver to not wait for an acknowledgement. Note that due to this,
+ *     it will also not give a status callback nor return a cookie. This is
+ *     mostly useful for probe responses to save airtime.
+ *
+ * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from
+ *     &enum nl80211_feature_flags and is advertised in wiphy information.
+ * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe
+ *     requests while operating in AP-mode.
+ *     This attribute holds a bitmap of the supported protocols for
+ *     offloading (see &enum nl80211_probe_resp_offload_support_attr).
+ *
+ * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
+ *     probe-response frame. The DA field in the 802.11 header is zero-ed out,
+ *     to be filled by the FW.
+ * @NL80211_ATTR_DISABLE_HT:  Force HT capable interfaces to disable
+ *      this feature.  Currently, only supported in mac80211 drivers.
+ * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
+ *      ATTR_HT_CAPABILITY to which attention should be paid.
+ *      Currently, only mac80211 NICs support this feature.
+ *      The values that may be configured are:
+ *       MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40
+ *       AMPDU density and AMPDU factor.
+ *      All values are treated as suggestions and may be ignored
+ *      by the driver as required.  The actual values may be seen in
+ *      the station debugfs ht_caps file.
+ *
+ * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
+ *    abides to when initiating radiation on DFS channels. A country maps
+ *    to one DFS region.
+ *
+ * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of
+ *      up to 16 TIDs.
+ *
+ * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be
+ *     used by the drivers which has MLME in firmware and does not have support
+ *     to report per station tx/rx activity to free up the staion entry from
+ *     the list. This needs to be used when the driver advertises the
+ *     capability to timeout the stations.
+ *
+ * @NL80211_ATTR_RX_SIGNAL_DBM: signal strength in dBm (as a 32-bit int);
+ *     this attribute is (depending on the driver capabilities) added to
+ *     received frames indicated with %NL80211_CMD_FRAME.
+ *
+ * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds
+ *      or 0 to disable background scan.
+ *
+ * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from
+ *     userspace. If unset it is assumed the hint comes directly from
+ *     a user. If set code could specify exactly what type of source
+ *     was used to provide the hint. For the different types of
+ *     allowed user regulatory hints see nl80211_user_reg_hint_type.
+ *
+ * @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected
+ *     the connection request from a station. nl80211_connect_failed_reason
+ *     enum has different reasons of connection failure.
+ *
+ * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts
+ *     with the Authentication transaction sequence number field.
+ *
+ * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from
+ *     association request when used with NL80211_CMD_NEW_STATION)
+ *
+ * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32)
+ *
+ * @NL80211_ATTR_P2P_CTWINDOW: P2P GO Client Traffic Window (u8), used with
+ *     the START_AP and SET_BSS commands
+ * @NL80211_ATTR_P2P_OPPPS: P2P GO opportunistic PS (u8), used with the
+ *     START_AP and SET_BSS commands. This can have the values 0 or 1;
+ *     if not given in START_AP 0 is assumed, if not given in SET_BSS
+ *     no change is made.
+ *
+ * @NL80211_ATTR_LOCAL_MESH_POWER_MODE: local mesh STA link-specific power mode
+ *     defined in &enum nl80211_mesh_power_mode.
+ *
+ * @NL80211_ATTR_ACL_POLICY: ACL policy, see &enum nl80211_acl_policy,
+ *     carried in a u32 attribute
+ *
+ * @NL80211_ATTR_MAC_ADDRS: Array of nested MAC addresses, used for
+ *     MAC ACL.
+ *
+ * @NL80211_ATTR_MAC_ACL_MAX: u32 attribute to advertise the maximum
+ *     number of MAC addresses that a device can support for MAC
+ *     ACL.
+ *
+ * @NL80211_ATTR_RADAR_EVENT: Type of radar event for notification to userspace,
+ *     contains a value of enum nl80211_radar_event (u32).
+ *
+ * @NL80211_ATTR_EXT_CAPA: 802.11 extended capabilities that the kernel driver
+ *     has and handles. The format is the same as the IE contents. See
+ *     802.11-2012 8.4.2.29 for more information.
+ * @NL80211_ATTR_EXT_CAPA_MASK: Extended capabilities that the kernel driver
+ *     has set in the %NL80211_ATTR_EXT_CAPA value, for multibit fields.
+ *
+ * @NL80211_ATTR_STA_CAPABILITY: Station capabilities (u16) are advertised to
+ *     the driver, e.g., to enable TDLS power save (PU-APSD).
+ *
+ * @NL80211_ATTR_STA_EXT_CAPABILITY: Station extended capabilities are
+ *     advertised to the driver, e.g., to enable TDLS off channel operations
+ *     and PU-APSD.
+ *
+ * @NL80211_ATTR_PROTOCOL_FEATURES: global nl80211 feature flags, see
+ *     &enum nl80211_protocol_features, the attribute is a u32.
+ *
+ * @NL80211_ATTR_SPLIT_WIPHY_DUMP: flag attribute, userspace supports
+ *     receiving the data for a single wiphy split across multiple
+ *     messages, given with wiphy dump message
+ *
+ * @NL80211_ATTR_MDID: Mobility Domain Identifier
+ *
+ * @NL80211_ATTR_IE_RIC: Resource Information Container Information
+ *     Element
+ *
+ * @NL80211_ATTR_CRIT_PROT_ID: critical protocol identifier requiring increased
+ *     reliability, see &enum nl80211_crit_proto_id (u16).
+ * @NL80211_ATTR_MAX_CRIT_PROT_DURATION: duration in milliseconds in which
+ *      the connection should have increased reliability (u16).
+ *
+ * @NL80211_ATTR_PEER_AID: Association ID for the peer TDLS station (u16).
+ *     This is similar to @NL80211_ATTR_STA_AID but with a difference of being
+ *     allowed to be used with the first @NL80211_CMD_SET_STATION command to
+ *     update a TDLS peer STA entry.
+ *
+ * @NL80211_ATTR_COALESCE_RULE: Coalesce rule information.
+ *
+ * @NL80211_ATTR_CH_SWITCH_COUNT: u32 attribute specifying the number of TBTT's
+ *     until the channel switch event.
+ * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
+ *     must be blocked on the current channel (before the channel switch
+ *     operation).
+ * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
+ *     for the time while performing a channel switch.
+ * @NL80211_ATTR_CSA_C_OFF_BEACON: An array of offsets (u16) to the channel
+ *     switch counters in the beacons tail (%NL80211_ATTR_BEACON_TAIL).
+ * @NL80211_ATTR_CSA_C_OFF_PRESP: An array of offsets (u16) to the channel
+ *     switch counters in the probe response (%NL80211_ATTR_PROBE_RESP).
+ *
+ * @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32.
+ *     As specified in the &enum nl80211_rxmgmt_flags.
+ *
+ * @NL80211_ATTR_STA_SUPPORTED_CHANNELS: array of supported channels.
+ *
+ * @NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES: array of supported
+ *      supported operating classes.
+ *
+ * @NL80211_ATTR_HANDLE_DFS: A flag indicating whether user space
+ *     controls DFS operation in IBSS mode. If the flag is included in
+ *     %NL80211_CMD_JOIN_IBSS request, the driver will allow use of DFS
+ *     channels and reports radar events to userspace. Userspace is required
+ *     to react to radar events, e.g. initiate a channel switch or leave the
+ *     IBSS network.
+ *
+ * @NL80211_ATTR_SUPPORT_5_MHZ: A flag indicating that the device supports
+ *     5 MHz channel bandwidth.
+ * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports
+ *     10 MHz channel bandwidth.
+ *
+ * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode
+ *     Notification Element based on association request when used with
+ *     %NL80211_CMD_NEW_STATION; u8 attribute.
+ *
+ * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if
+ *     %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet)
+ * @NL80211_ATTR_VENDOR_SUBCMD: vendor sub-command
+ * @NL80211_ATTR_VENDOR_DATA: data for the vendor command, if any; this
+ *     attribute is also used for vendor command feature advertisement
+ * @NL80211_ATTR_VENDOR_EVENTS: used for event list advertising in the wiphy
+ *     info, containing a nested array of possible events
+ *
+ * @NL80211_ATTR_QOS_MAP: IP DSCP mapping for Interworking QoS mapping. This
+ *     data is in the format defined for the payload of the QoS Map Set element
+ *     in IEEE Std 802.11-2012, 8.4.2.97.
+ *
+ * @NL80211_ATTR_MAC_HINT: MAC address recommendation as initial BSS
+ * @NL80211_ATTR_WIPHY_FREQ_HINT: frequency of the recommended initial BSS
+ *
+ * @NL80211_ATTR_MAX_AP_ASSOC_STA: Device attribute that indicates how many
+ *     associated stations are supported in AP mode (including P2P GO); u32.
+ *     Since drivers may not have a fixed limit on the maximum number (e.g.,
+ *     other concurrent operations may affect this), drivers are allowed to
+ *     advertise values that cannot always be met. In such cases, an attempt
+ *     to add a new station entry with @NL80211_CMD_NEW_STATION may fail.
+ *
+ * @NL80211_ATTR_CSA_C_OFFSETS_TX: An array of csa counter offsets (u16) which
+ *     should be updated when the frame is transmitted.
+ * @NL80211_ATTR_MAX_CSA_COUNTERS: U8 attribute used to advertise the maximum
+ *     supported number of csa counters.
+ *
+ * @NL80211_ATTR_TDLS_PEER_CAPABILITY: flags for TDLS peer capabilities, u32.
+ *     As specified in the &enum nl80211_tdls_peer_capability.
+ *
+ * @NL80211_ATTR_SOCKET_OWNER: Flag attribute, if set during interface
+ *     creation then the new interface will be owned by the netlink socket
+ *     that created it and will be destroyed when the socket is closed.
+ *     If set during scheduled scan start then the new scan req will be
+ *     owned by the netlink socket that created it and the scheduled scan will
+ *     be stopped when the socket is closed.
+ *     If set during configuration of regulatory indoor operation then the
+ *     regulatory indoor configuration would be owned by the netlink socket
+ *     that configured the indoor setting, and the indoor operation would be
+ *     cleared when the socket is closed.
+ *
+ * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
+ *     the TDLS link initiator.
+ *
+ * @NL80211_ATTR_USE_RRM: flag for indicating whether the current connection
+ *     shall support Radio Resource Measurements (11k). This attribute can be
+ *     used with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests.
+ *     User space applications are expected to use this flag only if the
+ *     underlying device supports these minimal RRM features:
+ *             %NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES,
+ *             %NL80211_FEATURE_QUIET,
+ *     If this flag is used, driver must add the Power Capabilities IE to the
+ *     association request. In addition, it must also set the RRM capability
+ *     flag in the association request's Capability Info field.
+ *
+ * @NL80211_ATTR_WIPHY_DYN_ACK: flag attribute used to enable ACK timeout
+ *     estimation algorithm (dynack). In order to activate dynack
+ *     %NL80211_FEATURE_ACKTO_ESTIMATION feature flag must be set by lower
+ *     drivers to indicate dynack capability. Dynack is automatically disabled
+ *     setting valid value for coverage class.
+ *
+ * @NL80211_ATTR_TSID: a TSID value (u8 attribute)
+ * @NL80211_ATTR_USER_PRIO: user priority value (u8 attribute)
+ * @NL80211_ATTR_ADMITTED_TIME: admitted time in units of 32 microseconds
+ *     (per second) (u16 attribute)
+ *
+ * @NL80211_ATTR_SMPS_MODE: SMPS mode to use (ap mode). see
+ *     &enum nl80211_smps_mode.
+ *
+ * @NL80211_ATTR_OPER_CLASS: operating class
+ *
+ * @NL80211_ATTR_MAC_MASK: MAC address mask
+ *
+ * @NL80211_ATTR_WIPHY_SELF_MANAGED_REG: flag attribute indicating this device
+ *     is self-managing its regulatory information and any regulatory domain
+ *     obtained from it is coming from the device's wiphy and not the global
+ *     cfg80211 regdomain.
+ *
+ * @NL80211_ATTR_EXT_FEATURES: extended feature flags contained in a byte
+ *     array. The feature flags are identified by their bit index (see &enum
+ *     nl80211_ext_feature_index). The bit index is ordered starting at the
+ *     least-significant bit of the first byte in the array, ie. bit index 0
+ *     is located at bit 0 of byte 0. bit index 25 would be located at bit 1
+ *     of byte 3 (u8 array).
+ *
+ * @NL80211_ATTR_SURVEY_RADIO_STATS: Request overall radio statistics to be
+ *     returned along with other survey data. If set, @NL80211_CMD_GET_SURVEY
+ *     may return a survey entry without a channel indicating global radio
+ *     statistics (only some values are valid and make sense.)
+ *     For devices that don't return such an entry even then, the information
+ *     should be contained in the result as the sum of the respective counters
+ *     over all channels.
+ *
+ * @NL80211_ATTR_SCHED_SCAN_DELAY: delay before the first cycle of a
+ *     scheduled scan (or a WoWLAN net-detect scan) is started, u32
+ *     in seconds.
+
+ * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device
+ *      is operating in an indoor environment.
+ *
+ * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS: maximum number of scan plans for
+ *     scheduled scan supported by the device (u32), a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL: maximum interval (in seconds) for
+ *     a scan plan (u32), a wiphy attribute.
+ * @NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS: maximum number of iterations in
+ *     a scan plan (u32), a wiphy attribute.
+ * @NL80211_ATTR_SCHED_SCAN_PLANS: a list of scan plans for scheduled scan.
+ *     Each scan plan defines the number of scan iterations and the interval
+ *     between scans. The last scan plan will always run infinitely,
+ *     thus it must not specify the number of iterations, only the interval
+ *     between scans. The scan plans are executed sequentially.
+ *     Each scan plan is a nested attribute of &enum nl80211_sched_scan_plan.
+ *
+ * @NUM_NL80211_ATTR: total number of nl80211_attrs available
+ * @NL80211_ATTR_MAX: highest attribute number currently defined
+ * @__NL80211_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_attrs {
+/* don't change the order or add anything between, this is ABI! */
+       NL80211_ATTR_UNSPEC,
+
+       NL80211_ATTR_WIPHY,
+       NL80211_ATTR_WIPHY_NAME,
+
+       NL80211_ATTR_IFINDEX,
+       NL80211_ATTR_IFNAME,
+       NL80211_ATTR_IFTYPE,
+
+       NL80211_ATTR_MAC,
+
+       NL80211_ATTR_KEY_DATA,
+       NL80211_ATTR_KEY_IDX,
+       NL80211_ATTR_KEY_CIPHER,
+       NL80211_ATTR_KEY_SEQ,
+       NL80211_ATTR_KEY_DEFAULT,
+
+       NL80211_ATTR_BEACON_INTERVAL,
+       NL80211_ATTR_DTIM_PERIOD,
+       NL80211_ATTR_BEACON_HEAD,
+       NL80211_ATTR_BEACON_TAIL,
+
+       NL80211_ATTR_STA_AID,
+       NL80211_ATTR_STA_FLAGS,
+       NL80211_ATTR_STA_LISTEN_INTERVAL,
+       NL80211_ATTR_STA_SUPPORTED_RATES,
+       NL80211_ATTR_STA_VLAN,
+       NL80211_ATTR_STA_INFO,
+
+       NL80211_ATTR_WIPHY_BANDS,
+
+       NL80211_ATTR_MNTR_FLAGS,
+
+       NL80211_ATTR_MESH_ID,
+       NL80211_ATTR_STA_PLINK_ACTION,
+       NL80211_ATTR_MPATH_NEXT_HOP,
+       NL80211_ATTR_MPATH_INFO,
+
+       NL80211_ATTR_BSS_CTS_PROT,
+       NL80211_ATTR_BSS_SHORT_PREAMBLE,
+       NL80211_ATTR_BSS_SHORT_SLOT_TIME,
+
+       NL80211_ATTR_HT_CAPABILITY,
+
+       NL80211_ATTR_SUPPORTED_IFTYPES,
+
+       NL80211_ATTR_REG_ALPHA2,
+       NL80211_ATTR_REG_RULES,
+
+       NL80211_ATTR_MESH_CONFIG,
+
+       NL80211_ATTR_BSS_BASIC_RATES,
+
+       NL80211_ATTR_WIPHY_TXQ_PARAMS,
+       NL80211_ATTR_WIPHY_FREQ,
+       NL80211_ATTR_WIPHY_CHANNEL_TYPE,
+
+       NL80211_ATTR_KEY_DEFAULT_MGMT,
+
+       NL80211_ATTR_MGMT_SUBTYPE,
+       NL80211_ATTR_IE,
+
+       NL80211_ATTR_MAX_NUM_SCAN_SSIDS,
+
+       NL80211_ATTR_SCAN_FREQUENCIES,
+       NL80211_ATTR_SCAN_SSIDS,
+       NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */
+       NL80211_ATTR_BSS,
+
+       NL80211_ATTR_REG_INITIATOR,
+       NL80211_ATTR_REG_TYPE,
+
+       NL80211_ATTR_SUPPORTED_COMMANDS,
+
+       NL80211_ATTR_FRAME,
+       NL80211_ATTR_SSID,
+       NL80211_ATTR_AUTH_TYPE,
+       NL80211_ATTR_REASON_CODE,
+
+       NL80211_ATTR_KEY_TYPE,
+
+       NL80211_ATTR_MAX_SCAN_IE_LEN,
+       NL80211_ATTR_CIPHER_SUITES,
+
+       NL80211_ATTR_FREQ_BEFORE,
+       NL80211_ATTR_FREQ_AFTER,
+
+       NL80211_ATTR_FREQ_FIXED,
+
+
+       NL80211_ATTR_WIPHY_RETRY_SHORT,
+       NL80211_ATTR_WIPHY_RETRY_LONG,
+       NL80211_ATTR_WIPHY_FRAG_THRESHOLD,
+       NL80211_ATTR_WIPHY_RTS_THRESHOLD,
+
+       NL80211_ATTR_TIMED_OUT,
+
+       NL80211_ATTR_USE_MFP,
+
+       NL80211_ATTR_STA_FLAGS2,
+
+       NL80211_ATTR_CONTROL_PORT,
+
+       NL80211_ATTR_TESTDATA,
+
+       NL80211_ATTR_PRIVACY,
+
+       NL80211_ATTR_DISCONNECTED_BY_AP,
+       NL80211_ATTR_STATUS_CODE,
+
+       NL80211_ATTR_CIPHER_SUITES_PAIRWISE,
+       NL80211_ATTR_CIPHER_SUITE_GROUP,
+       NL80211_ATTR_WPA_VERSIONS,
+       NL80211_ATTR_AKM_SUITES,
+
+       NL80211_ATTR_REQ_IE,
+       NL80211_ATTR_RESP_IE,
+
+       NL80211_ATTR_PREV_BSSID,
+
+       NL80211_ATTR_KEY,
+       NL80211_ATTR_KEYS,
+
+       NL80211_ATTR_PID,
+
+       NL80211_ATTR_4ADDR,
+
+       NL80211_ATTR_SURVEY_INFO,
+
+       NL80211_ATTR_PMKID,
+       NL80211_ATTR_MAX_NUM_PMKIDS,
+
+       NL80211_ATTR_DURATION,
+
+       NL80211_ATTR_COOKIE,
+
+       NL80211_ATTR_WIPHY_COVERAGE_CLASS,
+
+       NL80211_ATTR_TX_RATES,
+
+       NL80211_ATTR_FRAME_MATCH,
+
+       NL80211_ATTR_ACK,
+
+       NL80211_ATTR_PS_STATE,
+
+       NL80211_ATTR_CQM,
+
+       NL80211_ATTR_LOCAL_STATE_CHANGE,
+
+       NL80211_ATTR_AP_ISOLATE,
+
+       NL80211_ATTR_WIPHY_TX_POWER_SETTING,
+       NL80211_ATTR_WIPHY_TX_POWER_LEVEL,
+
+       NL80211_ATTR_TX_FRAME_TYPES,
+       NL80211_ATTR_RX_FRAME_TYPES,
+       NL80211_ATTR_FRAME_TYPE,
+
+       NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
+       NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT,
+
+       NL80211_ATTR_SUPPORT_IBSS_RSN,
+
+       NL80211_ATTR_WIPHY_ANTENNA_TX,
+       NL80211_ATTR_WIPHY_ANTENNA_RX,
+
+       NL80211_ATTR_MCAST_RATE,
+
+       NL80211_ATTR_OFFCHANNEL_TX_OK,
+
+       NL80211_ATTR_BSS_HT_OPMODE,
+
+       NL80211_ATTR_KEY_DEFAULT_TYPES,
+
+       NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
+
+       NL80211_ATTR_MESH_SETUP,
+
+       NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
+       NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX,
+
+       NL80211_ATTR_SUPPORT_MESH_AUTH,
+       NL80211_ATTR_STA_PLINK_STATE,
+
+       NL80211_ATTR_WOWLAN_TRIGGERS,
+       NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED,
+
+       NL80211_ATTR_SCHED_SCAN_INTERVAL,
+
+       NL80211_ATTR_INTERFACE_COMBINATIONS,
+       NL80211_ATTR_SOFTWARE_IFTYPES,
+
+       NL80211_ATTR_REKEY_DATA,
+
+       NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS,
+       NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN,
+
+       NL80211_ATTR_SCAN_SUPP_RATES,
+
+       NL80211_ATTR_HIDDEN_SSID,
+
+       NL80211_ATTR_IE_PROBE_RESP,
+       NL80211_ATTR_IE_ASSOC_RESP,
+
+       NL80211_ATTR_STA_WME,
+       NL80211_ATTR_SUPPORT_AP_UAPSD,
+
+       NL80211_ATTR_ROAM_SUPPORT,
+
+       NL80211_ATTR_SCHED_SCAN_MATCH,
+       NL80211_ATTR_MAX_MATCH_SETS,
+
+       NL80211_ATTR_PMKSA_CANDIDATE,
+
+       NL80211_ATTR_TX_NO_CCK_RATE,
+
+       NL80211_ATTR_TDLS_ACTION,
+       NL80211_ATTR_TDLS_DIALOG_TOKEN,
+       NL80211_ATTR_TDLS_OPERATION,
+       NL80211_ATTR_TDLS_SUPPORT,
+       NL80211_ATTR_TDLS_EXTERNAL_SETUP,
+
+       NL80211_ATTR_DEVICE_AP_SME,
+
+       NL80211_ATTR_DONT_WAIT_FOR_ACK,
+
+       NL80211_ATTR_FEATURE_FLAGS,
+
+       NL80211_ATTR_PROBE_RESP_OFFLOAD,
+
+       NL80211_ATTR_PROBE_RESP,
+
+       NL80211_ATTR_DFS_REGION,
+
+       NL80211_ATTR_DISABLE_HT,
+       NL80211_ATTR_HT_CAPABILITY_MASK,
+
+       NL80211_ATTR_NOACK_MAP,
+
+       NL80211_ATTR_INACTIVITY_TIMEOUT,
+
+       NL80211_ATTR_RX_SIGNAL_DBM,
+
+       NL80211_ATTR_BG_SCAN_PERIOD,
+
+       NL80211_ATTR_WDEV,
+
+       NL80211_ATTR_USER_REG_HINT_TYPE,
+
+       NL80211_ATTR_CONN_FAILED_REASON,
+
+       NL80211_ATTR_SAE_DATA,
+
+       NL80211_ATTR_VHT_CAPABILITY,
+
+       NL80211_ATTR_SCAN_FLAGS,
+
+       NL80211_ATTR_CHANNEL_WIDTH,
+       NL80211_ATTR_CENTER_FREQ1,
+       NL80211_ATTR_CENTER_FREQ2,
+
+       NL80211_ATTR_P2P_CTWINDOW,
+       NL80211_ATTR_P2P_OPPPS,
+
+       NL80211_ATTR_LOCAL_MESH_POWER_MODE,
+
+       NL80211_ATTR_ACL_POLICY,
+
+       NL80211_ATTR_MAC_ADDRS,
+
+       NL80211_ATTR_MAC_ACL_MAX,
+
+       NL80211_ATTR_RADAR_EVENT,
+
+       NL80211_ATTR_EXT_CAPA,
+       NL80211_ATTR_EXT_CAPA_MASK,
+
+       NL80211_ATTR_STA_CAPABILITY,
+       NL80211_ATTR_STA_EXT_CAPABILITY,
+
+       NL80211_ATTR_PROTOCOL_FEATURES,
+       NL80211_ATTR_SPLIT_WIPHY_DUMP,
+
+       NL80211_ATTR_DISABLE_VHT,
+       NL80211_ATTR_VHT_CAPABILITY_MASK,
+
+       NL80211_ATTR_MDID,
+       NL80211_ATTR_IE_RIC,
+
+       NL80211_ATTR_CRIT_PROT_ID,
+       NL80211_ATTR_MAX_CRIT_PROT_DURATION,
+
+       NL80211_ATTR_PEER_AID,
+
+       NL80211_ATTR_COALESCE_RULE,
+
+       NL80211_ATTR_CH_SWITCH_COUNT,
+       NL80211_ATTR_CH_SWITCH_BLOCK_TX,
+       NL80211_ATTR_CSA_IES,
+       NL80211_ATTR_CSA_C_OFF_BEACON,
+       NL80211_ATTR_CSA_C_OFF_PRESP,
+
+       NL80211_ATTR_RXMGMT_FLAGS,
+
+       NL80211_ATTR_STA_SUPPORTED_CHANNELS,
+
+       NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES,
+
+       NL80211_ATTR_HANDLE_DFS,
+
+       NL80211_ATTR_SUPPORT_5_MHZ,
+       NL80211_ATTR_SUPPORT_10_MHZ,
+
+       NL80211_ATTR_OPMODE_NOTIF,
+
+       NL80211_ATTR_VENDOR_ID,
+       NL80211_ATTR_VENDOR_SUBCMD,
+       NL80211_ATTR_VENDOR_DATA,
+       NL80211_ATTR_VENDOR_EVENTS,
+
+       NL80211_ATTR_QOS_MAP,
+
+       NL80211_ATTR_MAC_HINT,
+       NL80211_ATTR_WIPHY_FREQ_HINT,
+
+       NL80211_ATTR_MAX_AP_ASSOC_STA,
+
+       NL80211_ATTR_TDLS_PEER_CAPABILITY,
+
+       NL80211_ATTR_SOCKET_OWNER,
+
+       NL80211_ATTR_CSA_C_OFFSETS_TX,
+       NL80211_ATTR_MAX_CSA_COUNTERS,
+
+       NL80211_ATTR_TDLS_INITIATOR,
+
+       NL80211_ATTR_USE_RRM,
+
+       NL80211_ATTR_WIPHY_DYN_ACK,
+
+       NL80211_ATTR_TSID,
+       NL80211_ATTR_USER_PRIO,
+       NL80211_ATTR_ADMITTED_TIME,
+
+       NL80211_ATTR_SMPS_MODE,
+
+       NL80211_ATTR_OPER_CLASS,
+
+       NL80211_ATTR_MAC_MASK,
+
+       NL80211_ATTR_WIPHY_SELF_MANAGED_REG,
+
+       NL80211_ATTR_EXT_FEATURES,
+
+       NL80211_ATTR_SURVEY_RADIO_STATS,
+
+       NL80211_ATTR_NETNS_FD,
+
+       NL80211_ATTR_SCHED_SCAN_DELAY,
+
+       NL80211_ATTR_REG_INDOOR,
+
+       NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS,
+       NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL,
+       NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS,
+       NL80211_ATTR_SCHED_SCAN_PLANS,
+
+       /* add attributes here, update the policy in nl80211.c */
+
+       __NL80211_ATTR_AFTER_LAST,
+       NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
+       NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
+};
+
+/* source-level API compatibility */
+#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION
+#define        NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG
+#define NL80211_ATTR_IFACE_SOCKET_OWNER NL80211_ATTR_SOCKET_OWNER
+
+/*
+ * Allow user space programs to use #ifdef on new attributes by defining them
+ * here
+ */
+#define NL80211_CMD_CONNECT NL80211_CMD_CONNECT
+#define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY
+#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES
+#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS
+#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ
+#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE
+#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE
+#define NL80211_ATTR_IE NL80211_ATTR_IE
+#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR
+#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE
+#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME
+#define NL80211_ATTR_SSID NL80211_ATTR_SSID
+#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE
+#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE
+#define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE
+#define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP
+#define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS
+#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES
+#define NL80211_ATTR_KEY NL80211_ATTR_KEY
+#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS
+#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
+
+#define NL80211_MAX_SUPP_RATES                 32
+#define NL80211_MAX_SUPP_HT_RATES              77
+#define NL80211_MAX_SUPP_REG_RULES             64
+#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY      0
+#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY    16
+#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY    24
+#define NL80211_HT_CAPABILITY_LEN              26
+#define NL80211_VHT_CAPABILITY_LEN             12
+
+#define NL80211_MAX_NR_CIPHER_SUITES           5
+#define NL80211_MAX_NR_AKM_SUITES              2
+
+#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME     10
+
+/* default RSSI threshold for scan results if none specified. */
+#define NL80211_SCAN_RSSI_THOLD_OFF            -300
+
+#define NL80211_CQM_TXE_MAX_INTVL              1800
+
+/**
+ * enum nl80211_iftype - (virtual) interface types
+ *
+ * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides
+ * @NL80211_IFTYPE_ADHOC: independent BSS member
+ * @NL80211_IFTYPE_STATION: managed BSS member
+ * @NL80211_IFTYPE_AP: access point
+ * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces
+ *     are a bit special in that they must always be tied to a pre-existing
+ *     AP type interface.
+ * @NL80211_IFTYPE_WDS: wireless distribution interface
+ * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
+ * @NL80211_IFTYPE_MESH_POINT: mesh point
+ * @NL80211_IFTYPE_P2P_CLIENT: P2P client
+ * @NL80211_IFTYPE_P2P_GO: P2P group owner
+ * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev
+ *     and therefore can't be created in the normal ways, use the
+ *     %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
+ *     commands to create and destroy one
+ * @NL80211_IF_TYPE_OCB: Outside Context of a BSS
+ *     This mode corresponds to the MIB variable dot11OCBActivated=true
+ * @NL80211_IFTYPE_MAX: highest interface type number currently defined
+ * @NUM_NL80211_IFTYPES: number of defined interface types
+ *
+ * These values are used with the %NL80211_ATTR_IFTYPE
+ * to set the type of an interface.
+ *
+ */
+enum nl80211_iftype {
+       NL80211_IFTYPE_UNSPECIFIED,
+       NL80211_IFTYPE_ADHOC,
+       NL80211_IFTYPE_STATION,
+       NL80211_IFTYPE_AP,
+       NL80211_IFTYPE_AP_VLAN,
+       NL80211_IFTYPE_WDS,
+       NL80211_IFTYPE_MONITOR,
+       NL80211_IFTYPE_MESH_POINT,
+       NL80211_IFTYPE_P2P_CLIENT,
+       NL80211_IFTYPE_P2P_GO,
+       NL80211_IFTYPE_P2P_DEVICE,
+       NL80211_IFTYPE_OCB,
+
+       /* keep last */
+       NUM_NL80211_IFTYPES,
+       NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
+};
+
+/**
+ * enum nl80211_sta_flags - station flags
+ *
+ * Station flags. When a station is added to an AP interface, it is
+ * assumed to be already associated (and hence authenticated.)
+ *
+ * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X)
+ * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
+ *     with short barker preamble
+ * @NL80211_STA_FLAG_WME: station is WME/QoS capable
+ * @NL80211_STA_FLAG_MFP: station uses management frame protection
+ * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated
+ * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should
+ *     only be used in managed mode (even in the flags mask). Note that the
+ *     flag can't be changed, it is only valid while adding a station, and
+ *     attempts to change it will silently be ignored (rather than rejected
+ *     as errors.)
+ * @NL80211_STA_FLAG_ASSOCIATED: station is associated; used with drivers
+ *     that support %NL80211_FEATURE_FULL_AP_CLIENT_STATE to transition a
+ *     previously added station into associated state
+ * @NL80211_STA_FLAG_MAX: highest station flag number currently defined
+ * @__NL80211_STA_FLAG_AFTER_LAST: internal use
+ */
+enum nl80211_sta_flags {
+       __NL80211_STA_FLAG_INVALID,
+       NL80211_STA_FLAG_AUTHORIZED,
+       NL80211_STA_FLAG_SHORT_PREAMBLE,
+       NL80211_STA_FLAG_WME,
+       NL80211_STA_FLAG_MFP,
+       NL80211_STA_FLAG_AUTHENTICATED,
+       NL80211_STA_FLAG_TDLS_PEER,
+       NL80211_STA_FLAG_ASSOCIATED,
+
+       /* keep last */
+       __NL80211_STA_FLAG_AFTER_LAST,
+       NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1
+};
+
+#define NL80211_STA_FLAG_MAX_OLD_API   NL80211_STA_FLAG_TDLS_PEER
+
+/**
+ * struct nl80211_sta_flag_update - station flags mask/set
+ * @mask: mask of station flags to set
+ * @set: which values to set them to
+ *
+ * Both mask and set contain bits as per &enum nl80211_sta_flags.
+ */
+struct nl80211_sta_flag_update {
+       __u32 mask;
+       __u32 set;
+} __attribute__((packed));
+
+/**
+ * enum nl80211_rate_info - bitrate information
+ *
+ * These attribute types are used with %NL80211_STA_INFO_TXRATE
+ * when getting information about the bitrate of a station.
+ * There are 2 attributes for bitrate, a legacy one that represents
+ * a 16-bit value, and new one that represents a 32-bit value.
+ * If the rate value fits into 16 bit, both attributes are reported
+ * with the same value. If the rate is too high to fit into 16 bits
+ * (>6.5535Gbps) only 32-bit attribute is included.
+ * User space tools encouraged to use the 32-bit attribute and fall
+ * back to the 16-bit one for compatibility with older kernels.
+ *
+ * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s)
+ * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8)
+ * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 MHz dualchannel bitrate
+ * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval
+ * @NL80211_RATE_INFO_BITRATE32: total bitrate (u32, 100kbit/s)
+ * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined
+ * @NL80211_RATE_INFO_VHT_MCS: MCS index for VHT (u8)
+ * @NL80211_RATE_INFO_VHT_NSS: number of streams in VHT (u8)
+ * @NL80211_RATE_INFO_80_MHZ_WIDTH: 80 MHz VHT rate
+ * @NL80211_RATE_INFO_80P80_MHZ_WIDTH: unused - 80+80 is treated the
+ *     same as 160 for purposes of the bitrates
+ * @NL80211_RATE_INFO_160_MHZ_WIDTH: 160 MHz VHT rate
+ * @NL80211_RATE_INFO_10_MHZ_WIDTH: 10 MHz width - note that this is
+ *     a legacy rate and will be reported as the actual bitrate, i.e.
+ *     half the base (20 MHz) rate
+ * @NL80211_RATE_INFO_5_MHZ_WIDTH: 5 MHz width - note that this is
+ *     a legacy rate and will be reported as the actual bitrate, i.e.
+ *     a quarter of the base (20 MHz) rate
+ * @__NL80211_RATE_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_rate_info {
+       __NL80211_RATE_INFO_INVALID,
+       NL80211_RATE_INFO_BITRATE,
+       NL80211_RATE_INFO_MCS,
+       NL80211_RATE_INFO_40_MHZ_WIDTH,
+       NL80211_RATE_INFO_SHORT_GI,
+       NL80211_RATE_INFO_BITRATE32,
+       NL80211_RATE_INFO_VHT_MCS,
+       NL80211_RATE_INFO_VHT_NSS,
+       NL80211_RATE_INFO_80_MHZ_WIDTH,
+       NL80211_RATE_INFO_80P80_MHZ_WIDTH,
+       NL80211_RATE_INFO_160_MHZ_WIDTH,
+       NL80211_RATE_INFO_10_MHZ_WIDTH,
+       NL80211_RATE_INFO_5_MHZ_WIDTH,
+
+       /* keep last */
+       __NL80211_RATE_INFO_AFTER_LAST,
+       NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sta_bss_param - BSS information collected by STA
+ *
+ * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM
+ * when getting information about the bitrate of a station.
+ *
+ * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag)
+ * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE:  whether short preamble is enabled
+ *     (flag)
+ * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME:  whether short slot time is enabled
+ *     (flag)
+ * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8)
+ * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16)
+ * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined
+ * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use
+ */
+enum nl80211_sta_bss_param {
+       __NL80211_STA_BSS_PARAM_INVALID,
+       NL80211_STA_BSS_PARAM_CTS_PROT,
+       NL80211_STA_BSS_PARAM_SHORT_PREAMBLE,
+       NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME,
+       NL80211_STA_BSS_PARAM_DTIM_PERIOD,
+       NL80211_STA_BSS_PARAM_BEACON_INTERVAL,
+
+       /* keep last */
+       __NL80211_STA_BSS_PARAM_AFTER_LAST,
+       NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sta_info - station information
+ *
+ * These attribute types are used with %NL80211_ATTR_STA_INFO
+ * when getting information about a station.
+ *
+ * @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs)
+ * @NL80211_STA_INFO_RX_BYTES: total received bytes (MPDU length)
+ *     (u32, from this station)
+ * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (MPDU length)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_RX_BYTES64: total received bytes (MPDU length)
+ *     (u64, from this station)
+ * @NL80211_STA_INFO_TX_BYTES64: total transmitted bytes (MPDU length)
+ *     (u64, to this station)
+ * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)
+ * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute
+ *     containing info as possible, see &enum nl80211_rate_info
+ * @NL80211_STA_INFO_RX_PACKETS: total received packet (MSDUs and MMPDUs)
+ *     (u32, from this station)
+ * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (MSDUs and MMPDUs)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_TX_RETRIES: total retries (MPDUs) (u32, to this station)
+ * @NL80211_STA_INFO_TX_FAILED: total failed packets (MPDUs)
+ *     (u32, to this station)
+ * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm)
+ * @NL80211_STA_INFO_LLID: the station's mesh LLID
+ * @NL80211_STA_INFO_PLID: the station's mesh PLID
+ * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
+ *     (see %enum nl80211_plink_state)
+ * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
+ *     attribute, like NL80211_STA_INFO_TX_BITRATE.
+ * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute
+ *     containing info as possible, see &enum nl80211_sta_bss_param
+ * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
+ * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
+ * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
+ * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
+ * @NL80211_STA_INFO_LOCAL_PM: local mesh STA link-specific power mode
+ * @NL80211_STA_INFO_PEER_PM: peer mesh STA link-specific power mode
+ * @NL80211_STA_INFO_NONPEER_PM: neighbor mesh STA power save mode towards
+ *     non-peer STA
+ * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU
+ *     Contains a nested array of signal strength attributes (u8, dBm)
+ * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average
+ *     Same format as NL80211_STA_INFO_CHAIN_SIGNAL.
+ * @NL80211_STA_EXPECTED_THROUGHPUT: expected throughput considering also the
+ *     802.11 header (u32, kbps)
+ * @NL80211_STA_INFO_RX_DROP_MISC: RX packets dropped for unspecified reasons
+ *     (u64)
+ * @NL80211_STA_INFO_BEACON_RX: number of beacons received from this peer (u64)
+ * @NL80211_STA_INFO_BEACON_SIGNAL_AVG: signal strength average
+ *     for beacons only (u8, dBm)
+ * @NL80211_STA_INFO_TID_STATS: per-TID statistics (see &enum nl80211_tid_stats)
+ *     This is a nested attribute where each the inner attribute number is the
+ *     TID+1 and the special TID 16 (i.e. value 17) is used for non-QoS frames;
+ *     each one of those is again nested with &enum nl80211_tid_stats
+ *     attributes carrying the actual values.
+ * @__NL80211_STA_INFO_AFTER_LAST: internal
+ * @NL80211_STA_INFO_MAX: highest possible station info attribute
+ */
+enum nl80211_sta_info {
+       __NL80211_STA_INFO_INVALID,
+       NL80211_STA_INFO_INACTIVE_TIME,
+       NL80211_STA_INFO_RX_BYTES,
+       NL80211_STA_INFO_TX_BYTES,
+       NL80211_STA_INFO_LLID,
+       NL80211_STA_INFO_PLID,
+       NL80211_STA_INFO_PLINK_STATE,
+       NL80211_STA_INFO_SIGNAL,
+       NL80211_STA_INFO_TX_BITRATE,
+       NL80211_STA_INFO_RX_PACKETS,
+       NL80211_STA_INFO_TX_PACKETS,
+       NL80211_STA_INFO_TX_RETRIES,
+       NL80211_STA_INFO_TX_FAILED,
+       NL80211_STA_INFO_SIGNAL_AVG,
+       NL80211_STA_INFO_RX_BITRATE,
+       NL80211_STA_INFO_BSS_PARAM,
+       NL80211_STA_INFO_CONNECTED_TIME,
+       NL80211_STA_INFO_STA_FLAGS,
+       NL80211_STA_INFO_BEACON_LOSS,
+       NL80211_STA_INFO_T_OFFSET,
+       NL80211_STA_INFO_LOCAL_PM,
+       NL80211_STA_INFO_PEER_PM,
+       NL80211_STA_INFO_NONPEER_PM,
+       NL80211_STA_INFO_RX_BYTES64,
+       NL80211_STA_INFO_TX_BYTES64,
+       NL80211_STA_INFO_CHAIN_SIGNAL,
+       NL80211_STA_INFO_CHAIN_SIGNAL_AVG,
+       NL80211_STA_INFO_EXPECTED_THROUGHPUT,
+       NL80211_STA_INFO_RX_DROP_MISC,
+       NL80211_STA_INFO_BEACON_RX,
+       NL80211_STA_INFO_BEACON_SIGNAL_AVG,
+       NL80211_STA_INFO_TID_STATS,
+
+       /* keep last */
+       __NL80211_STA_INFO_AFTER_LAST,
+       NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_tid_stats - per TID statistics attributes
+ * @__NL80211_TID_STATS_INVALID: attribute number 0 is reserved
+ * @NL80211_TID_STATS_RX_MSDU: number of MSDUs received (u64)
+ * @NL80211_TID_STATS_TX_MSDU: number of MSDUs transmitted (or
+ *     attempted to transmit; u64)
+ * @NL80211_TID_STATS_TX_MSDU_RETRIES: number of retries for
+ *     transmitted MSDUs (not counting the first attempt; u64)
+ * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted
+ *     MSDUs (u64)
+ * @NUM_NL80211_TID_STATS: number of attributes here
+ * @NL80211_TID_STATS_MAX: highest numbered attribute here
+ */
+enum nl80211_tid_stats {
+       __NL80211_TID_STATS_INVALID,
+       NL80211_TID_STATS_RX_MSDU,
+       NL80211_TID_STATS_TX_MSDU,
+       NL80211_TID_STATS_TX_MSDU_RETRIES,
+       NL80211_TID_STATS_TX_MSDU_FAILED,
+
+       /* keep last */
+       NUM_NL80211_TID_STATS,
+       NL80211_TID_STATS_MAX = NUM_NL80211_TID_STATS - 1
+};
+
+/**
+ * enum nl80211_mpath_flags - nl80211 mesh path flags
+ *
+ * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active
+ * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running
+ * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN
+ * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set
+ * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded
+ */
+enum nl80211_mpath_flags {
+       NL80211_MPATH_FLAG_ACTIVE =     1<<0,
+       NL80211_MPATH_FLAG_RESOLVING =  1<<1,
+       NL80211_MPATH_FLAG_SN_VALID =   1<<2,
+       NL80211_MPATH_FLAG_FIXED =      1<<3,
+       NL80211_MPATH_FLAG_RESOLVED =   1<<4,
+};
+
+/**
+ * enum nl80211_mpath_info - mesh path information
+ *
+ * These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting
+ * information about a mesh path.
+ *
+ * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination
+ * @NL80211_MPATH_INFO_SN: destination sequence number
+ * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path
+ * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now
+ * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in
+ *     &enum nl80211_mpath_flags;
+ * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec
+ * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries
+ * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number
+ *     currently defind
+ * @__NL80211_MPATH_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_mpath_info {
+       __NL80211_MPATH_INFO_INVALID,
+       NL80211_MPATH_INFO_FRAME_QLEN,
+       NL80211_MPATH_INFO_SN,
+       NL80211_MPATH_INFO_METRIC,
+       NL80211_MPATH_INFO_EXPTIME,
+       NL80211_MPATH_INFO_FLAGS,
+       NL80211_MPATH_INFO_DISCOVERY_TIMEOUT,
+       NL80211_MPATH_INFO_DISCOVERY_RETRIES,
+
+       /* keep last */
+       __NL80211_MPATH_INFO_AFTER_LAST,
+       NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_band_attr - band attributes
+ * @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_BAND_ATTR_FREQS: supported frequencies in this band,
+ *     an array of nested frequency attributes
+ * @NL80211_BAND_ATTR_RATES: supported bitrates in this band,
+ *     an array of nested bitrate attributes
+ * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as
+ *     defined in 802.11n
+ * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE
+ * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n
+ * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n
+ * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as
+ *     defined in 802.11ac
+ * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE
+ * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined
+ * @__NL80211_BAND_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_band_attr {
+       __NL80211_BAND_ATTR_INVALID,
+       NL80211_BAND_ATTR_FREQS,
+       NL80211_BAND_ATTR_RATES,
+
+       NL80211_BAND_ATTR_HT_MCS_SET,
+       NL80211_BAND_ATTR_HT_CAPA,
+       NL80211_BAND_ATTR_HT_AMPDU_FACTOR,
+       NL80211_BAND_ATTR_HT_AMPDU_DENSITY,
+
+       NL80211_BAND_ATTR_VHT_MCS_SET,
+       NL80211_BAND_ATTR_VHT_CAPA,
+
+       /* keep last */
+       __NL80211_BAND_ATTR_AFTER_LAST,
+       NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
+};
+
+#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA
+
+/**
+ * enum nl80211_frequency_attr - frequency attributes
+ * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz
+ * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current
+ *     regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_NO_IR: no mechanisms that initiate radiation
+ *     are permitted on this channel, this includes sending probe
+ *     requests, or modes of operation that require beaconing.
+ * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm
+ *     (100 * dBm).
+ * @NL80211_FREQUENCY_ATTR_DFS_STATE: current state for DFS
+ *     (enum nl80211_dfs_state)
+ * @NL80211_FREQUENCY_ATTR_DFS_TIME: time in miliseconds for how long
+ *     this channel is in this DFS state.
+ * @NL80211_FREQUENCY_ATTR_NO_HT40_MINUS: HT40- isn't possible with this
+ *     channel as the control channel
+ * @NL80211_FREQUENCY_ATTR_NO_HT40_PLUS: HT40+ isn't possible with this
+ *     channel as the control channel
+ * @NL80211_FREQUENCY_ATTR_NO_80MHZ: any 80 MHz channel using this channel
+ *     as the primary or any of the secondary channels isn't possible,
+ *     this includes 80+80 channels
+ * @NL80211_FREQUENCY_ATTR_NO_160MHZ: any 160 MHz (but not 80+80) channel
+ *     using this channel as the primary or any of the secondary channels
+ *     isn't possible
+ * @NL80211_FREQUENCY_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds.
+ * @NL80211_FREQUENCY_ATTR_INDOOR_ONLY: Only indoor use is permitted on this
+ *     channel. A channel that has the INDOOR_ONLY attribute can only be
+ *     used when there is a clear assessment that the device is operating in
+ *     an indoor surroundings, i.e., it is connected to AC power (and not
+ *     through portable DC inverters) or is under the control of a master
+ *     that is acting as an AP and is connected to AC power.
+ * @NL80211_FREQUENCY_ATTR_IR_CONCURRENT: IR operation is allowed on this
+ *     channel if it's connected concurrently to a BSS on the same channel on
+ *     the 2 GHz band or to a channel in the same UNII band (on the 5 GHz
+ *     band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO or TDLS
+ *     off-channel on a channel that has the IR_CONCURRENT attribute set can be
+ *     done when there is a clear assessment that the device is operating under
+ *     the guidance of an authorized master, i.e., setting up a GO or TDLS
+ *     off-channel while the device is also connected to an AP with DFS and
+ *     radar detection on the UNII band (it is up to user-space, i.e.,
+ *     wpa_supplicant to perform the required verifications). Using this
+ *     attribute for IR is disallowed for master interfaces (IBSS, AP).
+ * @NL80211_FREQUENCY_ATTR_NO_20MHZ: 20 MHz operation is not allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed
+ *     on this channel in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
+ *     currently defined
+ * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
+ *
+ * See https://apps.fcc.gov/eas/comments/GetPublishedDocument.html?id=327&tn=528122
+ * for more information on the FCC description of the relaxations allowed
+ * by NL80211_FREQUENCY_ATTR_INDOOR_ONLY and
+ * NL80211_FREQUENCY_ATTR_IR_CONCURRENT.
+ */
+enum nl80211_frequency_attr {
+       __NL80211_FREQUENCY_ATTR_INVALID,
+       NL80211_FREQUENCY_ATTR_FREQ,
+       NL80211_FREQUENCY_ATTR_DISABLED,
+       NL80211_FREQUENCY_ATTR_NO_IR,
+       __NL80211_FREQUENCY_ATTR_NO_IBSS,
+       NL80211_FREQUENCY_ATTR_RADAR,
+       NL80211_FREQUENCY_ATTR_MAX_TX_POWER,
+       NL80211_FREQUENCY_ATTR_DFS_STATE,
+       NL80211_FREQUENCY_ATTR_DFS_TIME,
+       NL80211_FREQUENCY_ATTR_NO_HT40_MINUS,
+       NL80211_FREQUENCY_ATTR_NO_HT40_PLUS,
+       NL80211_FREQUENCY_ATTR_NO_80MHZ,
+       NL80211_FREQUENCY_ATTR_NO_160MHZ,
+       NL80211_FREQUENCY_ATTR_DFS_CAC_TIME,
+       NL80211_FREQUENCY_ATTR_INDOOR_ONLY,
+       NL80211_FREQUENCY_ATTR_IR_CONCURRENT,
+       NL80211_FREQUENCY_ATTR_NO_20MHZ,
+       NL80211_FREQUENCY_ATTR_NO_10MHZ,
+
+       /* keep last */
+       __NL80211_FREQUENCY_ATTR_AFTER_LAST,
+       NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1
+};
+
+#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER
+#define NL80211_FREQUENCY_ATTR_PASSIVE_SCAN    NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_NO_IBSS         NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_NO_IR           NL80211_FREQUENCY_ATTR_NO_IR
+#define NL80211_FREQUENCY_ATTR_GO_CONCURRENT \
+                                       NL80211_FREQUENCY_ATTR_IR_CONCURRENT
+
+/**
+ * enum nl80211_bitrate_attr - bitrate attributes
+ * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps
+ * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported
+ *     in 2.4 GHz band.
+ * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number
+ *     currently defined
+ * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_bitrate_attr {
+       __NL80211_BITRATE_ATTR_INVALID,
+       NL80211_BITRATE_ATTR_RATE,
+       NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE,
+
+       /* keep last */
+       __NL80211_BITRATE_ATTR_AFTER_LAST,
+       NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_initiator - Indicates the initiator of a reg domain request
+ * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world
+ *     regulatory domain.
+ * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the
+ *     regulatory domain.
+ * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the
+ *     wireless core it thinks its knows the regulatory domain we should be in.
+ * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
+ *     802.11 country information element with regulatory information it
+ *     thinks we should consider. cfg80211 only processes the country
+ *     code from the IE, and relies on the regulatory domain information
+ *     structure passed by userspace (CRDA) from our wireless-regdb.
+ *     If a channel is enabled but the country code indicates it should
+ *     be disabled we disable the channel and re-enable it upon disassociation.
+ */
+enum nl80211_reg_initiator {
+       NL80211_REGDOM_SET_BY_CORE,
+       NL80211_REGDOM_SET_BY_USER,
+       NL80211_REGDOM_SET_BY_DRIVER,
+       NL80211_REGDOM_SET_BY_COUNTRY_IE,
+};
+
+/**
+ * enum nl80211_reg_type - specifies the type of regulatory domain
+ * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains
+ *     to a specific country. When this is set you can count on the
+ *     ISO / IEC 3166 alpha2 country code being valid.
+ * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory
+ *     domain.
+ * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom
+ *     driver specific world regulatory domain. These do not apply system-wide
+ *     and are only applicable to the individual devices which have requested
+ *     them to be applied.
+ * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product
+ *     of an intersection between two regulatory domains -- the previously
+ *     set regulatory domain on the system and the last accepted regulatory
+ *     domain request to be processed.
+ */
+enum nl80211_reg_type {
+       NL80211_REGDOM_TYPE_COUNTRY,
+       NL80211_REGDOM_TYPE_WORLD,
+       NL80211_REGDOM_TYPE_CUSTOM_WORLD,
+       NL80211_REGDOM_TYPE_INTERSECTION,
+};
+
+/**
+ * enum nl80211_reg_rule_attr - regulatory rule attributes
+ * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional
+ *     considerations for a given frequency range. These are the
+ *     &enum nl80211_reg_rule_flags.
+ * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory
+ *     rule in KHz. This is not a center of frequency but an actual regulatory
+ *     band edge.
+ * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule
+ *     in KHz. This is not a center a frequency but an actual regulatory
+ *     band edge.
+ * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this
+ *     frequency range, in KHz.
+ * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain
+ *     for a given frequency range. The value is in mBi (100 * dBi).
+ *     If you don't have one then don't send this.
+ * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for
+ *     a given frequency range. The value is in mBm (100 * dBm).
+ * @NL80211_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds.
+ *     If not present or 0 default CAC time will be used.
+ * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number
+ *     currently defined
+ * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_reg_rule_attr {
+       __NL80211_REG_RULE_ATTR_INVALID,
+       NL80211_ATTR_REG_RULE_FLAGS,
+
+       NL80211_ATTR_FREQ_RANGE_START,
+       NL80211_ATTR_FREQ_RANGE_END,
+       NL80211_ATTR_FREQ_RANGE_MAX_BW,
+
+       NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN,
+       NL80211_ATTR_POWER_RULE_MAX_EIRP,
+
+       NL80211_ATTR_DFS_CAC_TIME,
+
+       /* keep last */
+       __NL80211_REG_RULE_ATTR_AFTER_LAST,
+       NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_sched_scan_match_attr - scheduled scan match attributes
+ * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching,
+ *     only report BSS with matching SSID.
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a
+ *     BSS in scan results. Filtering is turned off if not specified. Note that
+ *     if this attribute is in a match set of its own, then it is treated as
+ *     the default value for all matchsets with an SSID, rather than being a
+ *     matchset of its own without an RSSI filter. This is due to problems with
+ *     how this API was implemented in the past. Also, due to the same problem,
+ *     the only way to create a matchset with only an RSSI filter (with this
+ *     attribute) is if there's only a single matchset with the RSSI attribute.
+ * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
+ *     attribute number currently defined
+ * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_sched_scan_match_attr {
+       __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID,
+
+       NL80211_SCHED_SCAN_MATCH_ATTR_SSID,
+       NL80211_SCHED_SCAN_MATCH_ATTR_RSSI,
+
+       /* keep last */
+       __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST,
+       NL80211_SCHED_SCAN_MATCH_ATTR_MAX =
+               __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1
+};
+
+/* only for backward compatibility */
+#define NL80211_ATTR_SCHED_SCAN_MATCH_SSID NL80211_SCHED_SCAN_MATCH_ATTR_SSID
+
+/**
+ * enum nl80211_reg_rule_flags - regulatory rule flags
+ *
+ * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed
+ * @NL80211_RRF_NO_CCK: CCK modulation not allowed
+ * @NL80211_RRF_NO_INDOOR: indoor operation not allowed
+ * @NL80211_RRF_NO_OUTDOOR: outdoor operation not allowed
+ * @NL80211_RRF_DFS: DFS support is required to be used
+ * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links
+ * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links
+ * @NL80211_RRF_NO_IR: no mechanisms that initiate radiation are allowed,
+ *     this includes probe requests or modes of operation that require
+ *     beaconing.
+ * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated
+ *     base on contiguous rules and wider channels will be allowed to cross
+ *     multiple contiguous/overlapping frequency ranges.
+ * @NL80211_RRF_IR_CONCURRENT: See &NL80211_FREQUENCY_ATTR_IR_CONCURRENT
+ * @NL80211_RRF_NO_HT40MINUS: channels can't be used in HT40- operation
+ * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation
+ * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed
+ * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed
+ */
+enum nl80211_reg_rule_flags {
+       NL80211_RRF_NO_OFDM             = 1<<0,
+       NL80211_RRF_NO_CCK              = 1<<1,
+       NL80211_RRF_NO_INDOOR           = 1<<2,
+       NL80211_RRF_NO_OUTDOOR          = 1<<3,
+       NL80211_RRF_DFS                 = 1<<4,
+       NL80211_RRF_PTP_ONLY            = 1<<5,
+       NL80211_RRF_PTMP_ONLY           = 1<<6,
+       NL80211_RRF_NO_IR               = 1<<7,
+       __NL80211_RRF_NO_IBSS           = 1<<8,
+       NL80211_RRF_AUTO_BW             = 1<<11,
+       NL80211_RRF_IR_CONCURRENT       = 1<<12,
+       NL80211_RRF_NO_HT40MINUS        = 1<<13,
+       NL80211_RRF_NO_HT40PLUS         = 1<<14,
+       NL80211_RRF_NO_80MHZ            = 1<<15,
+       NL80211_RRF_NO_160MHZ           = 1<<16,
+};
+
+#define NL80211_RRF_PASSIVE_SCAN       NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_IBSS            NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_IR              NL80211_RRF_NO_IR
+#define NL80211_RRF_NO_HT40            (NL80211_RRF_NO_HT40MINUS |\
+                                        NL80211_RRF_NO_HT40PLUS)
+#define NL80211_RRF_GO_CONCURRENT      NL80211_RRF_IR_CONCURRENT
+
+/* For backport compatibility with older userspace */
+#define NL80211_RRF_NO_IR_ALL          (NL80211_RRF_NO_IR | __NL80211_RRF_NO_IBSS)
+
+/**
+ * enum nl80211_dfs_regions - regulatory DFS regions
+ *
+ * @NL80211_DFS_UNSET: Country has no DFS master region specified
+ * @NL80211_DFS_FCC: Country follows DFS master rules from FCC
+ * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI
+ * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec
+ */
+enum nl80211_dfs_regions {
+       NL80211_DFS_UNSET       = 0,
+       NL80211_DFS_FCC         = 1,
+       NL80211_DFS_ETSI        = 2,
+       NL80211_DFS_JP          = 3,
+};
+
+/**
+ * enum nl80211_user_reg_hint_type - type of user regulatory hint
+ *
+ * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always
+ *     assumed if the attribute is not set.
+ * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular
+ *     base station. Device drivers that have been tested to work
+ *     properly to support this type of hint can enable these hints
+ *     by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature
+ *     capability on the struct wiphy. The wireless core will
+ *     ignore all cell base station hints until at least one device
+ *     present has been registered with the wireless core that
+ *     has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a
+ *     supported feature.
+ * @NL80211_USER_REG_HINT_INDOOR: a user sent an hint indicating that the
+ *     platform is operating in an indoor environment.
+ */
+enum nl80211_user_reg_hint_type {
+       NL80211_USER_REG_HINT_USER      = 0,
+       NL80211_USER_REG_HINT_CELL_BASE = 1,
+       NL80211_USER_REG_HINT_INDOOR    = 2,
+};
+
+/**
+ * enum nl80211_survey_info - survey information
+ *
+ * These attribute types are used with %NL80211_ATTR_SURVEY_INFO
+ * when getting information about a survey.
+ *
+ * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved
+ * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel
+ * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm)
+ * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used
+ * @NL80211_SURVEY_INFO_TIME: amount of time (in ms) that the radio
+ *     was turned on (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_BUSY: amount of the time the primary
+ *     channel was sensed busy (either due to activity or energy detect)
+ * @NL80211_SURVEY_INFO_TIME_EXT_BUSY: amount of time the extension
+ *     channel was sensed busy
+ * @NL80211_SURVEY_INFO_TIME_RX: amount of time the radio spent
+ *     receiving data (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_TX: amount of time the radio spent
+ *     transmitting data (on channel or globally)
+ * @NL80211_SURVEY_INFO_TIME_SCAN: time the radio spent for scan
+ *     (on this channel or globally)
+ * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number
+ *     currently defined
+ * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
+ */
+enum nl80211_survey_info {
+       __NL80211_SURVEY_INFO_INVALID,
+       NL80211_SURVEY_INFO_FREQUENCY,
+       NL80211_SURVEY_INFO_NOISE,
+       NL80211_SURVEY_INFO_IN_USE,
+       NL80211_SURVEY_INFO_TIME,
+       NL80211_SURVEY_INFO_TIME_BUSY,
+       NL80211_SURVEY_INFO_TIME_EXT_BUSY,
+       NL80211_SURVEY_INFO_TIME_RX,
+       NL80211_SURVEY_INFO_TIME_TX,
+       NL80211_SURVEY_INFO_TIME_SCAN,
+
+       /* keep last */
+       __NL80211_SURVEY_INFO_AFTER_LAST,
+       NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1
+};
+
+/* keep old names for compatibility */
+#define NL80211_SURVEY_INFO_CHANNEL_TIME               NL80211_SURVEY_INFO_TIME
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY          NL80211_SURVEY_INFO_TIME_BUSY
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY      NL80211_SURVEY_INFO_TIME_EXT_BUSY
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_RX            NL80211_SURVEY_INFO_TIME_RX
+#define NL80211_SURVEY_INFO_CHANNEL_TIME_TX            NL80211_SURVEY_INFO_TIME_TX
+
+/**
+ * enum nl80211_mntr_flags - monitor configuration flags
+ *
+ * Monitor configuration flags.
+ *
+ * @__NL80211_MNTR_FLAG_INVALID: reserved
+ *
+ * @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS
+ * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP
+ * @NL80211_MNTR_FLAG_CONTROL: pass control frames
+ * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering
+ * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing.
+ *     overrides all other flags.
+ * @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address
+ *     and ACK incoming unicast packets.
+ *
+ * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use
+ * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag
+ */
+enum nl80211_mntr_flags {
+       __NL80211_MNTR_FLAG_INVALID,
+       NL80211_MNTR_FLAG_FCSFAIL,
+       NL80211_MNTR_FLAG_PLCPFAIL,
+       NL80211_MNTR_FLAG_CONTROL,
+       NL80211_MNTR_FLAG_OTHER_BSS,
+       NL80211_MNTR_FLAG_COOK_FRAMES,
+       NL80211_MNTR_FLAG_ACTIVE,
+
+       /* keep last */
+       __NL80211_MNTR_FLAG_AFTER_LAST,
+       NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_mesh_power_mode - mesh power save modes
+ *
+ * @NL80211_MESH_POWER_UNKNOWN: The mesh power mode of the mesh STA is
+ *     not known or has not been set yet.
+ * @NL80211_MESH_POWER_ACTIVE: Active mesh power mode. The mesh STA is
+ *     in Awake state all the time.
+ * @NL80211_MESH_POWER_LIGHT_SLEEP: Light sleep mode. The mesh STA will
+ *     alternate between Active and Doze states, but will wake up for
+ *     neighbor's beacons.
+ * @NL80211_MESH_POWER_DEEP_SLEEP: Deep sleep mode. The mesh STA will
+ *     alternate between Active and Doze states, but may not wake up
+ *     for neighbor's beacons.
+ *
+ * @__NL80211_MESH_POWER_AFTER_LAST - internal use
+ * @NL80211_MESH_POWER_MAX - highest possible power save level
+ */
+
+enum nl80211_mesh_power_mode {
+       NL80211_MESH_POWER_UNKNOWN,
+       NL80211_MESH_POWER_ACTIVE,
+       NL80211_MESH_POWER_LIGHT_SLEEP,
+       NL80211_MESH_POWER_DEEP_SLEEP,
+
+       __NL80211_MESH_POWER_AFTER_LAST,
+       NL80211_MESH_POWER_MAX = __NL80211_MESH_POWER_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_meshconf_params - mesh configuration parameters
+ *
+ * Mesh configuration parameters. These can be changed while the mesh is
+ * active.
+ *
+ * @__NL80211_MESHCONF_INVALID: internal use
+ *
+ * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in
+ *     millisecond units, used by the Peer Link Open message
+ *
+ * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in
+ *     millisecond units, used by the peer link management to close a peer link
+ *
+ * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in
+ *     millisecond units
+ *
+ * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed
+ *     on this mesh interface
+ *
+ * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link
+ *     open retries that can be sent to establish a new peer link instance in a
+ *     mesh
+ *
+ * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh
+ *     point.
+ *
+ * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically open
+ *     peer links when we detect compatible mesh peers. Disabled if
+ *     @NL80211_MESH_SETUP_USERSPACE_MPM or @NL80211_MESH_SETUP_USERSPACE_AMPE are
+ *     set.
+ *
+ * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames
+ *     containing a PREQ that an MP can send to a particular destination (path
+ *     target)
+ *
+ * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths
+ *     (in milliseconds)
+ *
+ * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait
+ *     until giving up on a path discovery (in milliseconds)
+ *
+ * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh
+ *     points receiving a PREQ shall consider the forwarding information from
+ *     the root to be valid. (TU = time unit)
+ *
+ * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in
+ *     TUs) during which an MP can send only one action frame containing a PREQ
+ *     reference element
+ *
+ * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)
+ *     that it takes for an HWMP information element to propagate across the
+ *     mesh
+ *
+ * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not
+ *
+ * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
+ *     source mesh point for path selection elements.
+ *
+ * @NL80211_MESHCONF_HWMP_RANN_INTERVAL:  The interval of time (in TUs) between
+ *     root announcements are transmitted.
+ *
+ * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has
+ *     access to a broader network beyond the MBSS.  This is done via Root
+ *     Announcement frames.
+ *
+ * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in
+ *     TUs) during which a mesh STA can send only one Action frame containing a
+ *     PERR element.
+ *
+ * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding
+ *     or forwarding entity (default is TRUE - forwarding entity)
+ *
+ * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the
+ *     threshold for average signal strength of candidate station to establish
+ *     a peer link.
+ *
+ * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors
+ *     to synchronize to for 11s default synchronization method
+ *     (see 11C.12.2.2)
+ *
+ * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode.
+ *
+ * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
+ *
+ * @NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: The time (in TUs) for
+ *     which mesh STAs receiving a proactive PREQ shall consider the forwarding
+ *     information to the root mesh STA to be valid.
+ *
+ * @NL80211_MESHCONF_HWMP_ROOT_INTERVAL: The interval of time (in TUs) between
+ *     proactive PREQs are transmitted.
+ *
+ * @NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: The minimum interval of time
+ *     (in TUs) during which a mesh STA can send only one Action frame
+ *     containing a PREQ element for root path confirmation.
+ *
+ * @NL80211_MESHCONF_POWER_MODE: Default mesh power mode for new peer links.
+ *     type &enum nl80211_mesh_power_mode (u32)
+ *
+ * @NL80211_MESHCONF_AWAKE_WINDOW: awake window duration (in TUs)
+ *
+ * @NL80211_MESHCONF_PLINK_TIMEOUT: If no tx activity is seen from a STA we've
+ *     established peering with for longer than this time (in seconds), then
+ *     remove it from the STA's list of peers. You may set this to 0 to disable
+ *     the removal of the STA. Default is 30 minutes.
+ *
+ * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_meshconf_params {
+       __NL80211_MESHCONF_INVALID,
+       NL80211_MESHCONF_RETRY_TIMEOUT,
+       NL80211_MESHCONF_CONFIRM_TIMEOUT,
+       NL80211_MESHCONF_HOLDING_TIMEOUT,
+       NL80211_MESHCONF_MAX_PEER_LINKS,
+       NL80211_MESHCONF_MAX_RETRIES,
+       NL80211_MESHCONF_TTL,
+       NL80211_MESHCONF_AUTO_OPEN_PLINKS,
+       NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES,
+       NL80211_MESHCONF_PATH_REFRESH_TIME,
+       NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT,
+       NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT,
+       NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
+       NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
+       NL80211_MESHCONF_HWMP_ROOTMODE,
+       NL80211_MESHCONF_ELEMENT_TTL,
+       NL80211_MESHCONF_HWMP_RANN_INTERVAL,
+       NL80211_MESHCONF_GATE_ANNOUNCEMENTS,
+       NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL,
+       NL80211_MESHCONF_FORWARDING,
+       NL80211_MESHCONF_RSSI_THRESHOLD,
+       NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR,
+       NL80211_MESHCONF_HT_OPMODE,
+       NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT,
+       NL80211_MESHCONF_HWMP_ROOT_INTERVAL,
+       NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL,
+       NL80211_MESHCONF_POWER_MODE,
+       NL80211_MESHCONF_AWAKE_WINDOW,
+       NL80211_MESHCONF_PLINK_TIMEOUT,
+
+       /* keep last */
+       __NL80211_MESHCONF_ATTR_AFTER_LAST,
+       NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_mesh_setup_params - mesh setup parameters
+ *
+ * Mesh setup parameters.  These are used to start/join a mesh and cannot be
+ * changed while the mesh is active.
+ *
+ * @__NL80211_MESH_SETUP_INVALID: Internal use
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a
+ *     vendor specific path selection algorithm or disable it to use the
+ *     default HWMP.
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a
+ *     vendor specific path metric or disable it to use the default Airtime
+ *     metric.
+ *
+ * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a
+ *     robust security network ie, or a vendor specific information element
+ *     that vendors will use to identify the path selection methods and
+ *     metrics in use.
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication
+ *     daemon will be authenticating mesh candidates.
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication
+ *     daemon will be securing peer link frames.  AMPE is a secured version of
+ *     Mesh Peering Management (MPM) and is implemented with the assistance of
+ *     a userspace daemon.  When this flag is set, the kernel will send peer
+ *     management frames to a userspace daemon that will implement AMPE
+ *     functionality (security capabilities selection, key confirmation, and
+ *     key management).  When the flag is unset (default), the kernel can
+ *     autonomously complete (unsecured) mesh peering without the need of a
+ *     userspace daemon.
+ *
+ * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a
+ *     vendor specific synchronization method or disable it to use the default
+ *     neighbor offset synchronization
+ *
+ * @NL80211_MESH_SETUP_USERSPACE_MPM: Enable this option if userspace will
+ *     implement an MPM which handles peer allocation and state.
+ *
+ * @NL80211_MESH_SETUP_AUTH_PROTOCOL: Inform the kernel of the authentication
+ *     method (u8, as defined in IEEE 8.4.2.100.6, e.g. 0x1 for SAE).
+ *     Default is no authentication method required.
+ *
+ * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
+ *
+ * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
+ */
+enum nl80211_mesh_setup_params {
+       __NL80211_MESH_SETUP_INVALID,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC,
+       NL80211_MESH_SETUP_IE,
+       NL80211_MESH_SETUP_USERSPACE_AUTH,
+       NL80211_MESH_SETUP_USERSPACE_AMPE,
+       NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC,
+       NL80211_MESH_SETUP_USERSPACE_MPM,
+       NL80211_MESH_SETUP_AUTH_PROTOCOL,
+
+       /* keep last */
+       __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
+       NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_txq_attr - TX queue parameter attributes
+ * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved
+ * @NL80211_TXQ_ATTR_AC: AC identifier (NL80211_AC_*)
+ * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning
+ *     disabled
+ * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form
+ *     2^n-1 in the range 1..32767]
+ * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form
+ *     2^n-1 in the range 1..32767]
+ * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255]
+ * @__NL80211_TXQ_ATTR_AFTER_LAST: Internal
+ * @NL80211_TXQ_ATTR_MAX: Maximum TXQ attribute number
+ */
+enum nl80211_txq_attr {
+       __NL80211_TXQ_ATTR_INVALID,
+       NL80211_TXQ_ATTR_AC,
+       NL80211_TXQ_ATTR_TXOP,
+       NL80211_TXQ_ATTR_CWMIN,
+       NL80211_TXQ_ATTR_CWMAX,
+       NL80211_TXQ_ATTR_AIFS,
+
+       /* keep last */
+       __NL80211_TXQ_ATTR_AFTER_LAST,
+       NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1
+};
+
+enum nl80211_ac {
+       NL80211_AC_VO,
+       NL80211_AC_VI,
+       NL80211_AC_BE,
+       NL80211_AC_BK,
+       NL80211_NUM_ACS
+};
+
+/* backward compat */
+#define NL80211_TXQ_ATTR_QUEUE NL80211_TXQ_ATTR_AC
+#define NL80211_TXQ_Q_VO       NL80211_AC_VO
+#define NL80211_TXQ_Q_VI       NL80211_AC_VI
+#define NL80211_TXQ_Q_BE       NL80211_AC_BE
+#define NL80211_TXQ_Q_BK       NL80211_AC_BK
+
+/**
+ * enum nl80211_channel_type - channel type
+ * @NL80211_CHAN_NO_HT: 20 MHz, non-HT channel
+ * @NL80211_CHAN_HT20: 20 MHz HT channel
+ * @NL80211_CHAN_HT40MINUS: HT40 channel, secondary channel
+ *     below the control channel
+ * @NL80211_CHAN_HT40PLUS: HT40 channel, secondary channel
+ *     above the control channel
+ */
+enum nl80211_channel_type {
+       NL80211_CHAN_NO_HT,
+       NL80211_CHAN_HT20,
+       NL80211_CHAN_HT40MINUS,
+       NL80211_CHAN_HT40PLUS
+};
+
+/**
+ * enum nl80211_chan_width - channel width definitions
+ *
+ * These values are used with the %NL80211_ATTR_CHANNEL_WIDTH
+ * attribute.
+ *
+ * @NL80211_CHAN_WIDTH_20_NOHT: 20 MHz, non-HT channel
+ * @NL80211_CHAN_WIDTH_20: 20 MHz HT channel
+ * @NL80211_CHAN_WIDTH_40: 40 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_80: 80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_80P80: 80+80 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     and %NL80211_ATTR_CENTER_FREQ2 attributes must be provided as well
+ * @NL80211_CHAN_WIDTH_160: 160 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
+ *     attribute must be provided as well
+ * @NL80211_CHAN_WIDTH_5: 5 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_10: 10 MHz OFDM channel
+ */
+enum nl80211_chan_width {
+       NL80211_CHAN_WIDTH_20_NOHT,
+       NL80211_CHAN_WIDTH_20,
+       NL80211_CHAN_WIDTH_40,
+       NL80211_CHAN_WIDTH_80,
+       NL80211_CHAN_WIDTH_80P80,
+       NL80211_CHAN_WIDTH_160,
+       NL80211_CHAN_WIDTH_5,
+       NL80211_CHAN_WIDTH_10,
+};
+
+/**
+ * enum nl80211_bss_scan_width - control channel width for a BSS
+ *
+ * These values are used with the %NL80211_BSS_CHAN_WIDTH attribute.
+ *
+ * @NL80211_BSS_CHAN_WIDTH_20: control channel is 20 MHz wide or compatible
+ * @NL80211_BSS_CHAN_WIDTH_10: control channel is 10 MHz wide
+ * @NL80211_BSS_CHAN_WIDTH_5: control channel is 5 MHz wide
+ */
+enum nl80211_bss_scan_width {
+       NL80211_BSS_CHAN_WIDTH_20,
+       NL80211_BSS_CHAN_WIDTH_10,
+       NL80211_BSS_CHAN_WIDTH_5,
+};
+
+/**
+ * enum nl80211_bss - netlink attributes for a BSS
+ *
+ * @__NL80211_BSS_INVALID: invalid
+ * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets)
+ * @NL80211_BSS_FREQUENCY: frequency in MHz (u32)
+ * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64)
+ *     (if @NL80211_BSS_PRESP_DATA is present then this is known to be
+ *     from a probe response, otherwise it may be from the same beacon
+ *     that the NL80211_BSS_BEACON_TSF will be from)
+ * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16)
+ * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16)
+ * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the
+ *     raw information elements from the probe response/beacon (bin);
+ *     if the %NL80211_BSS_BEACON_IES attribute is present and the data is
+ *     different then the IEs here are from a Probe Response frame; otherwise
+ *     they are from a Beacon frame.
+ *     However, if the driver does not indicate the source of the IEs, these
+ *     IEs may be from either frame subtype.
+ *     If present, the @NL80211_BSS_PRESP_DATA attribute indicates that the
+ *     data here is known to be from a probe response, without any heuristics.
+ * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon
+ *     in mBm (100 * dBm) (s32)
+ * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon
+ *     in unspecified units, scaled to 0..100 (u8)
+ * @NL80211_BSS_STATUS: status, if this BSS is "used"
+ * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms
+ * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information
+ *     elements from a Beacon frame (bin); not present if no Beacon frame has
+ *     yet been received
+ * @NL80211_BSS_CHAN_WIDTH: channel width of the control channel
+ *     (u32, enum nl80211_bss_scan_width)
+ * @NL80211_BSS_BEACON_TSF: TSF of the last received beacon (u64)
+ *     (not present if no beacon frame has been received yet)
+ * @NL80211_BSS_PRESP_DATA: the data in @NL80211_BSS_INFORMATION_ELEMENTS and
+ *     @NL80211_BSS_TSF is known to be from a probe response (flag attribute)
+ * @NL80211_BSS_LAST_SEEN_BOOTTIME: CLOCK_BOOTTIME timestamp when this entry
+ *     was last updated by a received frame. The value is expected to be
+ *     accurate to about 10ms. (u64, nanoseconds)
+ * @__NL80211_BSS_AFTER_LAST: internal
+ * @NL80211_BSS_MAX: highest BSS attribute
+ */
+enum nl80211_bss {
+       __NL80211_BSS_INVALID,
+       NL80211_BSS_BSSID,
+       NL80211_BSS_FREQUENCY,
+       NL80211_BSS_TSF,
+       NL80211_BSS_BEACON_INTERVAL,
+       NL80211_BSS_CAPABILITY,
+       NL80211_BSS_INFORMATION_ELEMENTS,
+       NL80211_BSS_SIGNAL_MBM,
+       NL80211_BSS_SIGNAL_UNSPEC,
+       NL80211_BSS_STATUS,
+       NL80211_BSS_SEEN_MS_AGO,
+       NL80211_BSS_BEACON_IES,
+       NL80211_BSS_CHAN_WIDTH,
+       NL80211_BSS_BEACON_TSF,
+       NL80211_BSS_PRESP_DATA,
+       NL80211_BSS_LAST_SEEN_BOOTTIME,
+
+       /* keep last */
+       __NL80211_BSS_AFTER_LAST,
+       NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_bss_status - BSS "status"
+ * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS.
+ *     Note that this is no longer used since cfg80211 no longer
+ *     keeps track of whether or not authentication was done with
+ *     a given BSS.
+ * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS.
+ * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS.
+ *
+ * The BSS status is a BSS attribute in scan dumps, which
+ * indicates the status the interface has wrt. this BSS.
+ */
+enum nl80211_bss_status {
+       NL80211_BSS_STATUS_AUTHENTICATED,
+       NL80211_BSS_STATUS_ASSOCIATED,
+       NL80211_BSS_STATUS_IBSS_JOINED,
+};
+
+/**
+ * enum nl80211_auth_type - AuthenticationType
+ *
+ * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication
+ * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only)
+ * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r)
+ * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP)
+ * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals
+ * @__NL80211_AUTHTYPE_NUM: internal
+ * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm
+ * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by
+ *     trying multiple times); this is invalid in netlink -- leave out
+ *     the attribute for this on CONNECT commands.
+ */
+enum nl80211_auth_type {
+       NL80211_AUTHTYPE_OPEN_SYSTEM,
+       NL80211_AUTHTYPE_SHARED_KEY,
+       NL80211_AUTHTYPE_FT,
+       NL80211_AUTHTYPE_NETWORK_EAP,
+       NL80211_AUTHTYPE_SAE,
+
+       /* keep last */
+       __NL80211_AUTHTYPE_NUM,
+       NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1,
+       NL80211_AUTHTYPE_AUTOMATIC
+};
+
+/**
+ * enum nl80211_key_type - Key Type
+ * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key
+ * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key
+ * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS)
+ * @NUM_NL80211_KEYTYPES: number of defined key types
+ */
+enum nl80211_key_type {
+       NL80211_KEYTYPE_GROUP,
+       NL80211_KEYTYPE_PAIRWISE,
+       NL80211_KEYTYPE_PEERKEY,
+
+       NUM_NL80211_KEYTYPES
+};
+
+/**
+ * enum nl80211_mfp - Management frame protection state
+ * @NL80211_MFP_NO: Management frame protection not used
+ * @NL80211_MFP_REQUIRED: Management frame protection required
+ */
+enum nl80211_mfp {
+       NL80211_MFP_NO,
+       NL80211_MFP_REQUIRED,
+};
+
+enum nl80211_wpa_versions {
+       NL80211_WPA_VERSION_1 = 1 << 0,
+       NL80211_WPA_VERSION_2 = 1 << 1,
+};
+
+/**
+ * enum nl80211_key_default_types - key default types
+ * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid
+ * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default
+ *     unicast key
+ * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default
+ *     multicast key
+ * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types
+ */
+enum nl80211_key_default_types {
+       __NL80211_KEY_DEFAULT_TYPE_INVALID,
+       NL80211_KEY_DEFAULT_TYPE_UNICAST,
+       NL80211_KEY_DEFAULT_TYPE_MULTICAST,
+
+       NUM_NL80211_KEY_DEFAULT_TYPES
+};
+
+/**
+ * enum nl80211_key_attributes - key attributes
+ * @__NL80211_KEY_INVALID: invalid
+ * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of
+ *     16 bytes encryption key followed by 8 bytes each for TX and RX MIC
+ *     keys
+ * @NL80211_KEY_IDX: key ID (u8, 0-3)
+ * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
+ *     section 7.3.2.25.1, e.g. 0x000FAC04)
+ * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
+ *     CCMP keys, each six bytes in little endian
+ * @NL80211_KEY_DEFAULT: flag indicating default key
+ * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key
+ * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not
+ *     specified the default depends on whether a MAC address was
+ *     given with the command using the key or not (u32)
+ * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
+ *     attributes, specifying what a key should be set as default as.
+ *     See &enum nl80211_key_default_types.
+ * @__NL80211_KEY_AFTER_LAST: internal
+ * @NL80211_KEY_MAX: highest key attribute
+ */
+enum nl80211_key_attributes {
+       __NL80211_KEY_INVALID,
+       NL80211_KEY_DATA,
+       NL80211_KEY_IDX,
+       NL80211_KEY_CIPHER,
+       NL80211_KEY_SEQ,
+       NL80211_KEY_DEFAULT,
+       NL80211_KEY_DEFAULT_MGMT,
+       NL80211_KEY_TYPE,
+       NL80211_KEY_DEFAULT_TYPES,
+
+       /* keep last */
+       __NL80211_KEY_AFTER_LAST,
+       NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_tx_rate_attributes - TX rate set attributes
+ * @__NL80211_TXRATE_INVALID: invalid
+ * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection
+ *     in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with
+ *     1 = 500 kbps) but without the IE length restriction (at most
+ *     %NL80211_MAX_SUPP_RATES in a single array).
+ * @NL80211_TXRATE_HT: HT (MCS) rates allowed for TX rate selection
+ *     in an array of MCS numbers.
+ * @NL80211_TXRATE_VHT: VHT rates allowed for TX rate selection,
+ *     see &struct nl80211_txrate_vht
+ * @NL80211_TXRATE_GI: configure GI, see &enum nl80211_txrate_gi
+ * @__NL80211_TXRATE_AFTER_LAST: internal
+ * @NL80211_TXRATE_MAX: highest TX rate attribute
+ */
+enum nl80211_tx_rate_attributes {
+       __NL80211_TXRATE_INVALID,
+       NL80211_TXRATE_LEGACY,
+       NL80211_TXRATE_HT,
+       NL80211_TXRATE_VHT,
+       NL80211_TXRATE_GI,
+
+       /* keep last */
+       __NL80211_TXRATE_AFTER_LAST,
+       NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1
+};
+
+#define NL80211_TXRATE_MCS NL80211_TXRATE_HT
+#define NL80211_VHT_NSS_MAX            8
+
+/**
+ * struct nl80211_txrate_vht - VHT MCS/NSS txrate bitmap
+ * @mcs: MCS bitmap table for each NSS (array index 0 for 1 stream, etc.)
+ */
+struct nl80211_txrate_vht {
+       __u16 mcs[NL80211_VHT_NSS_MAX];
+};
+
+enum nl80211_txrate_gi {
+       NL80211_TXRATE_DEFAULT_GI,
+       NL80211_TXRATE_FORCE_SGI,
+       NL80211_TXRATE_FORCE_LGI,
+};
+
+/**
+ * enum nl80211_band - Frequency band
+ * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
+ * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
+ * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
+ */
+enum nl80211_band {
+       NL80211_BAND_2GHZ,
+       NL80211_BAND_5GHZ,
+       NL80211_BAND_60GHZ,
+};
+
+/**
+ * enum nl80211_ps_state - powersave state
+ * @NL80211_PS_DISABLED: powersave is disabled
+ * @NL80211_PS_ENABLED: powersave is enabled
+ */
+enum nl80211_ps_state {
+       NL80211_PS_DISABLED,
+       NL80211_PS_ENABLED,
+};
+
+/**
+ * enum nl80211_attr_cqm - connection quality monitor attributes
+ * @__NL80211_ATTR_CQM_INVALID: invalid
+ * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies
+ *     the threshold for the RSSI level at which an event will be sent. Zero
+ *     to disable.
+ * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies
+ *     the minimum amount the RSSI level must change after an event before a
+ *     new event may be issued (to reduce effects of RSSI oscillation).
+ * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event
+ * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many
+ *     consecutive packets were not acknowledged by the peer
+ * @NL80211_ATTR_CQM_TXE_RATE: TX error rate in %. Minimum % of TX failures
+ *     during the given %NL80211_ATTR_CQM_TXE_INTVL before an
+ *     %NL80211_CMD_NOTIFY_CQM with reported %NL80211_ATTR_CQM_TXE_RATE and
+ *     %NL80211_ATTR_CQM_TXE_PKTS is generated.
+ * @NL80211_ATTR_CQM_TXE_PKTS: number of attempted packets in a given
+ *     %NL80211_ATTR_CQM_TXE_INTVL before %NL80211_ATTR_CQM_TXE_RATE is
+ *     checked.
+ * @NL80211_ATTR_CQM_TXE_INTVL: interval in seconds. Specifies the periodic
+ *     interval in which %NL80211_ATTR_CQM_TXE_PKTS and
+ *     %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an
+ *     %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting.
+ * @NL80211_ATTR_CQM_BEACON_LOSS_EVENT: flag attribute that's set in a beacon
+ *     loss event
+ * @__NL80211_ATTR_CQM_AFTER_LAST: internal
+ * @NL80211_ATTR_CQM_MAX: highest key attribute
+ */
+enum nl80211_attr_cqm {
+       __NL80211_ATTR_CQM_INVALID,
+       NL80211_ATTR_CQM_RSSI_THOLD,
+       NL80211_ATTR_CQM_RSSI_HYST,
+       NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
+       NL80211_ATTR_CQM_PKT_LOSS_EVENT,
+       NL80211_ATTR_CQM_TXE_RATE,
+       NL80211_ATTR_CQM_TXE_PKTS,
+       NL80211_ATTR_CQM_TXE_INTVL,
+       NL80211_ATTR_CQM_BEACON_LOSS_EVENT,
+
+       /* keep last */
+       __NL80211_ATTR_CQM_AFTER_LAST,
+       NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event
+ * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the
+ *      configured threshold
+ * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the
+ *      configured threshold
+ * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: (reserved, never sent)
+ */
+enum nl80211_cqm_rssi_threshold_event {
+       NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW,
+       NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH,
+       NL80211_CQM_RSSI_BEACON_LOSS_EVENT,
+};
+
+
+/**
+ * enum nl80211_tx_power_setting - TX power adjustment
+ * @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power
+ * @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter
+ * @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter
+ */
+enum nl80211_tx_power_setting {
+       NL80211_TX_POWER_AUTOMATIC,
+       NL80211_TX_POWER_LIMITED,
+       NL80211_TX_POWER_FIXED,
+};
+
+/**
+ * enum nl80211_packet_pattern_attr - packet pattern attribute
+ * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute
+ * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has
+ *     a zero bit are ignored
+ * @NL80211_PKTPAT_MASK: pattern mask, must be long enough to have
+ *     a bit for each byte in the pattern. The lowest-order bit corresponds
+ *     to the first byte of the pattern, but the bytes of the pattern are
+ *     in a little-endian-like format, i.e. the 9th byte of the pattern
+ *     corresponds to the lowest-order bit in the second byte of the mask.
+ *     For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where
+ *     xx indicates "don't care") would be represented by a pattern of
+ *     twelve zero bytes, and a mask of "0xed,0x01".
+ *     Note that the pattern matching is done as though frames were not
+ *     802.11 frames but 802.3 frames, i.e. the frame is fully unpacked
+ *     first (including SNAP header unpacking) and then matched.
+ * @NL80211_PKTPAT_OFFSET: packet offset, pattern is matched after
+ *     these fixed number of bytes of received packet
+ * @NUM_NL80211_PKTPAT: number of attributes
+ * @MAX_NL80211_PKTPAT: max attribute number
+ */
+enum nl80211_packet_pattern_attr {
+       __NL80211_PKTPAT_INVALID,
+       NL80211_PKTPAT_MASK,
+       NL80211_PKTPAT_PATTERN,
+       NL80211_PKTPAT_OFFSET,
+
+       NUM_NL80211_PKTPAT,
+       MAX_NL80211_PKTPAT = NUM_NL80211_PKTPAT - 1,
+};
+
+/**
+ * struct nl80211_pattern_support - packet pattern support information
+ * @max_patterns: maximum number of patterns supported
+ * @min_pattern_len: minimum length of each pattern
+ * @max_pattern_len: maximum length of each pattern
+ * @max_pkt_offset: maximum Rx packet offset
+ *
+ * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when
+ * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED or in
+ * %NL80211_ATTR_COALESCE_RULE_PKT_PATTERN when that is part of
+ * %NL80211_ATTR_COALESCE_RULE in the capability information given
+ * by the kernel to userspace.
+ */
+struct nl80211_pattern_support {
+       __u32 max_patterns;
+       __u32 min_pattern_len;
+       __u32 max_pattern_len;
+       __u32 max_pkt_offset;
+} __attribute__((packed));
+
+/* only for backward compatibility */
+#define __NL80211_WOWLAN_PKTPAT_INVALID __NL80211_PKTPAT_INVALID
+#define NL80211_WOWLAN_PKTPAT_MASK NL80211_PKTPAT_MASK
+#define NL80211_WOWLAN_PKTPAT_PATTERN NL80211_PKTPAT_PATTERN
+#define NL80211_WOWLAN_PKTPAT_OFFSET NL80211_PKTPAT_OFFSET
+#define NUM_NL80211_WOWLAN_PKTPAT NUM_NL80211_PKTPAT
+#define MAX_NL80211_WOWLAN_PKTPAT MAX_NL80211_PKTPAT
+#define nl80211_wowlan_pattern_support nl80211_pattern_support
+
+/**
+ * enum nl80211_wowlan_triggers - WoWLAN trigger definitions
+ * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes
+ * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put
+ *     the chip into a special state -- works best with chips that have
+ *     support for low-power operation already (flag)
+ *     Note that this mode is incompatible with all of the others, if
+ *     any others are even supported by the device.
+ * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect
+ *     is detected is implementation-specific (flag)
+ * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed
+ *     by 16 repetitions of MAC addr, anywhere in payload) (flag)
+ * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns
+ *     which are passed in an array of nested attributes, each nested attribute
+ *     defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern.
+ *     Each pattern defines a wakeup packet. Packet offset is associated with
+ *     each pattern which is used while matching the pattern. The matching is
+ *     done on the MSDU, i.e. as though the packet was an 802.3 packet, so the
+ *     pattern matching is done after the packet is converted to the MSDU.
+ *
+ *     In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute
+ *     carrying a &struct nl80211_pattern_support.
+ *
+ *     When reporting wakeup. it is a u32 attribute containing the 0-based
+ *     index of the pattern that caused the wakeup, in the patterns passed
+ *     to the kernel when configuring.
+ * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be
+ *     used when setting, used only to indicate that GTK rekeying is supported
+ *     by the device (flag)
+ * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if
+ *     done by the device) (flag)
+ * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request
+ *     packet (flag)
+ * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag)
+ * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released
+ *     (on devices that have rfkill in the device) (flag)
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211: For wakeup reporting only, contains
+ *     the 802.11 packet that caused the wakeup, e.g. a deauth frame. The frame
+ *     may be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN
+ *     attribute contains the original length.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN: Original length of the 802.11
+ *     packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211
+ *     attribute if the packet was truncated somewhere.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023: For wakeup reporting only, contains the
+ *     802.11 packet that caused the wakeup, e.g. a magic packet. The frame may
+ *     be truncated, the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN attribute
+ *     contains the original length.
+ * @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: Original length of the 802.3
+ *     packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023
+ *     attribute if the packet was truncated somewhere.
+ * @NL80211_WOWLAN_TRIG_TCP_CONNECTION: TCP connection wake, see DOC section
+ *     "TCP connection wakeup" for more details. This is a nested attribute
+ *     containing the exact information for establishing and keeping alive
+ *     the TCP connection.
+ * @NL80211_WOWLAN_TRIG_TCP_WAKEUP_MATCH: For wakeup reporting only, the
+ *     wakeup packet was received on the TCP connection
+ * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: For wakeup reporting only, the
+ *     TCP connection was lost or failed to be established
+ * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: For wakeup reporting only,
+ *     the TCP connection ran out of tokens to use for data to send to the
+ *     service
+ * @NL80211_WOWLAN_TRIG_NET_DETECT: wake up when a configured network
+ *     is detected.  This is a nested attribute that contains the
+ *     same attributes used with @NL80211_CMD_START_SCHED_SCAN.  It
+ *     specifies how the scan is performed (e.g. the interval, the
+ *     channels to scan and the initial delay) as well as the scan
+ *     results that will trigger a wake (i.e. the matchsets).  This
+ *     attribute is also sent in a response to
+ *     @NL80211_CMD_GET_WIPHY, indicating the number of match sets
+ *     supported by the driver (u32).
+ * @NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS: nested attribute
+ *     containing an array with information about what triggered the
+ *     wake up.  If no elements are present in the array, it means
+ *     that the information is not available.  If more than one
+ *     element is present, it means that more than one match
+ *     occurred.
+ *     Each element in the array is a nested attribute that contains
+ *     one optional %NL80211_ATTR_SSID attribute and one optional
+ *     %NL80211_ATTR_SCAN_FREQUENCIES attribute.  At least one of
+ *     these attributes must be present.  If
+ *     %NL80211_ATTR_SCAN_FREQUENCIES contains more than one
+ *     frequency, it means that the match occurred in more than one
+ *     channel.
+ * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers
+ * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number
+ *
+ * These nested attributes are used to configure the wakeup triggers and
+ * to report the wakeup reason(s).
+ */
+enum nl80211_wowlan_triggers {
+       __NL80211_WOWLAN_TRIG_INVALID,
+       NL80211_WOWLAN_TRIG_ANY,
+       NL80211_WOWLAN_TRIG_DISCONNECT,
+       NL80211_WOWLAN_TRIG_MAGIC_PKT,
+       NL80211_WOWLAN_TRIG_PKT_PATTERN,
+       NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED,
+       NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE,
+       NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST,
+       NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE,
+       NL80211_WOWLAN_TRIG_RFKILL_RELEASE,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023,
+       NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN,
+       NL80211_WOWLAN_TRIG_TCP_CONNECTION,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST,
+       NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS,
+       NL80211_WOWLAN_TRIG_NET_DETECT,
+       NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS,
+
+       /* keep last */
+       NUM_NL80211_WOWLAN_TRIG,
+       MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1
+};
+
+/**
+ * DOC: TCP connection wakeup
+ *
+ * Some devices can establish a TCP connection in order to be woken up by a
+ * packet coming in from outside their network segment, or behind NAT. If
+ * configured, the device will establish a TCP connection to the given
+ * service, and periodically send data to that service. The first data
+ * packet is usually transmitted after SYN/ACK, also ACKing the SYN/ACK.
+ * The data packets can optionally include a (little endian) sequence
+ * number (in the TCP payload!) that is generated by the device, and, also
+ * optionally, a token from a list of tokens. This serves as a keep-alive
+ * with the service, and for NATed connections, etc.
+ *
+ * During this keep-alive period, the server doesn't send any data to the
+ * client. When receiving data, it is compared against the wakeup pattern
+ * (and mask) and if it matches, the host is woken up. Similarly, if the
+ * connection breaks or cannot be established to start with, the host is
+ * also woken up.
+ *
+ * Developer's note: ARP offload is required for this, otherwise TCP
+ * response packets might not go through correctly.
+ */
+
+/**
+ * struct nl80211_wowlan_tcp_data_seq - WoWLAN TCP data sequence
+ * @start: starting value
+ * @offset: offset of sequence number in packet
+ * @len: length of the sequence value to write, 1 through 4
+ *
+ * Note: don't confuse with the TCP sequence number(s), this is for the
+ * keepalive packet payload. The actual value is written into the packet
+ * in little endian.
+ */
+struct nl80211_wowlan_tcp_data_seq {
+       __u32 start, offset, len;
+};
+
+/**
+ * struct nl80211_wowlan_tcp_data_token - WoWLAN TCP data token config
+ * @offset: offset of token in packet
+ * @len: length of each token
+ * @token_stream: stream of data to be used for the tokens, the length must
+ *     be a multiple of @len for this to make sense
+ */
+struct nl80211_wowlan_tcp_data_token {
+       __u32 offset, len;
+       __u8 token_stream[];
+};
+
+/**
+ * struct nl80211_wowlan_tcp_data_token_feature - data token features
+ * @min_len: minimum token length
+ * @max_len: maximum token length
+ * @bufsize: total available token buffer size (max size of @token_stream)
+ */
+struct nl80211_wowlan_tcp_data_token_feature {
+       __u32 min_len, max_len, bufsize;
+};
+
+/**
+ * enum nl80211_wowlan_tcp_attrs - WoWLAN TCP connection parameters
+ * @__NL80211_WOWLAN_TCP_INVALID: invalid number for nested attributes
+ * @NL80211_WOWLAN_TCP_SRC_IPV4: source IPv4 address (in network byte order)
+ * @NL80211_WOWLAN_TCP_DST_IPV4: destination IPv4 address
+ *     (in network byte order)
+ * @NL80211_WOWLAN_TCP_DST_MAC: destination MAC address, this is given because
+ *     route lookup when configured might be invalid by the time we suspend,
+ *     and doing a route lookup when suspending is no longer possible as it
+ *     might require ARP querying.
+ * @NL80211_WOWLAN_TCP_SRC_PORT: source port (u16); optional, if not given a
+ *     socket and port will be allocated
+ * @NL80211_WOWLAN_TCP_DST_PORT: destination port (u16)
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD: data packet payload, at least one byte.
+ *     For feature advertising, a u32 attribute holding the maximum length
+ *     of the data payload.
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: data packet sequence configuration
+ *     (if desired), a &struct nl80211_wowlan_tcp_data_seq. For feature
+ *     advertising it is just a flag
+ * @NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: data packet token configuration,
+ *     see &struct nl80211_wowlan_tcp_data_token and for advertising see
+ *     &struct nl80211_wowlan_tcp_data_token_feature.
+ * @NL80211_WOWLAN_TCP_DATA_INTERVAL: data interval in seconds, maximum
+ *     interval in feature advertising (u32)
+ * @NL80211_WOWLAN_TCP_WAKE_PAYLOAD: wake packet payload, for advertising a
+ *     u32 attribute holding the maximum length
+ * @NL80211_WOWLAN_TCP_WAKE_MASK: Wake packet payload mask, not used for
+ *     feature advertising. The mask works like @NL80211_PKTPAT_MASK
+ *     but on the TCP payload only.
+ * @NUM_NL80211_WOWLAN_TCP: number of TCP attributes
+ * @MAX_NL80211_WOWLAN_TCP: highest attribute number
+ */
+enum nl80211_wowlan_tcp_attrs {
+       __NL80211_WOWLAN_TCP_INVALID,
+       NL80211_WOWLAN_TCP_SRC_IPV4,
+       NL80211_WOWLAN_TCP_DST_IPV4,
+       NL80211_WOWLAN_TCP_DST_MAC,
+       NL80211_WOWLAN_TCP_SRC_PORT,
+       NL80211_WOWLAN_TCP_DST_PORT,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ,
+       NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN,
+       NL80211_WOWLAN_TCP_DATA_INTERVAL,
+       NL80211_WOWLAN_TCP_WAKE_PAYLOAD,
+       NL80211_WOWLAN_TCP_WAKE_MASK,
+
+       /* keep last */
+       NUM_NL80211_WOWLAN_TCP,
+       MAX_NL80211_WOWLAN_TCP = NUM_NL80211_WOWLAN_TCP - 1
+};
+
+/**
+ * struct nl80211_coalesce_rule_support - coalesce rule support information
+ * @max_rules: maximum number of rules supported
+ * @pat: packet pattern support information
+ * @max_delay: maximum supported coalescing delay in msecs
+ *
+ * This struct is carried in %NL80211_ATTR_COALESCE_RULE in the
+ * capability information given by the kernel to userspace.
+ */
+struct nl80211_coalesce_rule_support {
+       __u32 max_rules;
+       struct nl80211_pattern_support pat;
+       __u32 max_delay;
+} __attribute__((packed));
+
+/**
+ * enum nl80211_attr_coalesce_rule - coalesce rule attribute
+ * @__NL80211_COALESCE_RULE_INVALID: invalid number for nested attribute
+ * @NL80211_ATTR_COALESCE_RULE_DELAY: delay in msecs used for packet coalescing
+ * @NL80211_ATTR_COALESCE_RULE_CONDITION: condition for packet coalescence,
+ *     see &enum nl80211_coalesce_condition.
+ * @NL80211_ATTR_COALESCE_RULE_PKT_PATTERN: packet offset, pattern is matched
+ *     after these fixed number of bytes of received packet
+ * @NUM_NL80211_ATTR_COALESCE_RULE: number of attributes
+ * @NL80211_ATTR_COALESCE_RULE_MAX: max attribute number
+ */
+enum nl80211_attr_coalesce_rule {
+       __NL80211_COALESCE_RULE_INVALID,
+       NL80211_ATTR_COALESCE_RULE_DELAY,
+       NL80211_ATTR_COALESCE_RULE_CONDITION,
+       NL80211_ATTR_COALESCE_RULE_PKT_PATTERN,
+
+       /* keep last */
+       NUM_NL80211_ATTR_COALESCE_RULE,
+       NL80211_ATTR_COALESCE_RULE_MAX = NUM_NL80211_ATTR_COALESCE_RULE - 1
+};
+
+/**
+ * enum nl80211_coalesce_condition - coalesce rule conditions
+ * @NL80211_COALESCE_CONDITION_MATCH: coalaesce Rx packets when patterns
+ *     in a rule are matched.
+ * @NL80211_COALESCE_CONDITION_NO_MATCH: coalesce Rx packets when patterns
+ *     in a rule are not matched.
+ */
+enum nl80211_coalesce_condition {
+       NL80211_COALESCE_CONDITION_MATCH,
+       NL80211_COALESCE_CONDITION_NO_MATCH
+};
+
+/**
+ * enum nl80211_iface_limit_attrs - limit attributes
+ * @NL80211_IFACE_LIMIT_UNSPEC: (reserved)
+ * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that
+ *     can be chosen from this set of interface types (u32)
+ * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a
+ *     flag attribute for each interface type in this set
+ * @NUM_NL80211_IFACE_LIMIT: number of attributes
+ * @MAX_NL80211_IFACE_LIMIT: highest attribute number
+ */
+enum nl80211_iface_limit_attrs {
+       NL80211_IFACE_LIMIT_UNSPEC,
+       NL80211_IFACE_LIMIT_MAX,
+       NL80211_IFACE_LIMIT_TYPES,
+
+       /* keep last */
+       NUM_NL80211_IFACE_LIMIT,
+       MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1
+};
+
+/**
+ * enum nl80211_if_combination_attrs -- interface combination attributes
+ *
+ * @NL80211_IFACE_COMB_UNSPEC: (reserved)
+ * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits
+ *     for given interface types, see &enum nl80211_iface_limit_attrs.
+ * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of
+ *     interfaces that can be created in this group. This number doesn't
+ *     apply to interfaces purely managed in software, which are listed
+ *     in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE.
+ * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that
+ *     beacon intervals within this group must be all the same even for
+ *     infrastructure and AP/GO combinations, i.e. the GO(s) must adopt
+ *     the infrastructure network's beacon interval.
+ * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many
+ *     different channels may be used within this group.
+ * @NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: u32 attribute containing the bitmap
+ *     of supported channel widths for radar detection.
+ * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap
+ *     of supported regulatory regions for radar detection.
+ * @NUM_NL80211_IFACE_COMB: number of attributes
+ * @MAX_NL80211_IFACE_COMB: highest attribute number
+ *
+ * Examples:
+ *     limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2
+ *     => allows an AP and a STA that must match BIs
+ *
+ *     numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8
+ *     => allows 8 of AP/GO
+ *
+ *     numbers = [ #{STA} <= 2 ], channels = 2, max = 2
+ *     => allows two STAs on different channels
+ *
+ *     numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
+ *     => allows a STA plus three P2P interfaces
+ *
+ * The list of these four possiblities could completely be contained
+ * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate
+ * that any of these groups must match.
+ *
+ * "Combinations" of just a single interface will not be listed here,
+ * a single interface of any valid interface type is assumed to always
+ * be possible by itself. This means that implicitly, for each valid
+ * interface type, the following group always exists:
+ *     numbers = [ #{<type>} <= 1 ], channels = 1, max = 1
+ */
+enum nl80211_if_combination_attrs {
+       NL80211_IFACE_COMB_UNSPEC,
+       NL80211_IFACE_COMB_LIMITS,
+       NL80211_IFACE_COMB_MAXNUM,
+       NL80211_IFACE_COMB_STA_AP_BI_MATCH,
+       NL80211_IFACE_COMB_NUM_CHANNELS,
+       NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS,
+       NL80211_IFACE_COMB_RADAR_DETECT_REGIONS,
+
+       /* keep last */
+       NUM_NL80211_IFACE_COMB,
+       MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
+};
+
+
+/**
+ * enum nl80211_plink_state - state of a mesh peer link finite state machine
+ *
+ * @NL80211_PLINK_LISTEN: initial state, considered the implicit
+ *     state of non existant mesh peer links
+ * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to
+ *     this mesh peer
+ * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received
+ *     from this mesh peer
+ * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been
+ *     received from this mesh peer
+ * @NL80211_PLINK_ESTAB: mesh peer link is established
+ * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
+ * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
+ *     plink are discarded
+ * @NUM_NL80211_PLINK_STATES: number of peer link states
+ * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
+ */
+enum nl80211_plink_state {
+       NL80211_PLINK_LISTEN,
+       NL80211_PLINK_OPN_SNT,
+       NL80211_PLINK_OPN_RCVD,
+       NL80211_PLINK_CNF_RCVD,
+       NL80211_PLINK_ESTAB,
+       NL80211_PLINK_HOLDING,
+       NL80211_PLINK_BLOCKED,
+
+       /* keep last */
+       NUM_NL80211_PLINK_STATES,
+       MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1
+};
+
+/**
+ * enum nl80211_plink_action - actions to perform in mesh peers
+ *
+ * @NL80211_PLINK_ACTION_NO_ACTION: perform no action
+ * @NL80211_PLINK_ACTION_OPEN: start mesh peer link establishment
+ * @NL80211_PLINK_ACTION_BLOCK: block traffic from this mesh peer
+ * @NUM_NL80211_PLINK_ACTIONS: number of possible actions
+ */
+enum plink_actions {
+       NL80211_PLINK_ACTION_NO_ACTION,
+       NL80211_PLINK_ACTION_OPEN,
+       NL80211_PLINK_ACTION_BLOCK,
+
+       NUM_NL80211_PLINK_ACTIONS,
+};
+
+
+#define NL80211_KCK_LEN                        16
+#define NL80211_KEK_LEN                        16
+#define NL80211_REPLAY_CTR_LEN         8
+
+/**
+ * enum nl80211_rekey_data - attributes for GTK rekey offload
+ * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes
+ * @NL80211_REKEY_DATA_KEK: key encryption key (binary)
+ * @NL80211_REKEY_DATA_KCK: key confirmation key (binary)
+ * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary)
+ * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal)
+ * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal)
+ */
+enum nl80211_rekey_data {
+       __NL80211_REKEY_DATA_INVALID,
+       NL80211_REKEY_DATA_KEK,
+       NL80211_REKEY_DATA_KCK,
+       NL80211_REKEY_DATA_REPLAY_CTR,
+
+       /* keep last */
+       NUM_NL80211_REKEY_DATA,
+       MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1
+};
+
+/**
+ * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID
+ * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in
+ *     Beacon frames)
+ * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element
+ *     in Beacon frames
+ * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID
+ *     element in Beacon frames but zero out each byte in the SSID
+ */
+enum nl80211_hidden_ssid {
+       NL80211_HIDDEN_SSID_NOT_IN_USE,
+       NL80211_HIDDEN_SSID_ZERO_LEN,
+       NL80211_HIDDEN_SSID_ZERO_CONTENTS
+};
+
+/**
+ * enum nl80211_sta_wme_attr - station WME attributes
+ * @__NL80211_STA_WME_INVALID: invalid number for nested attribute
+ * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format
+ *     is the same as the AC bitmap in the QoS info field.
+ * @NL80211_STA_WME_MAX_SP: max service period. the format is the same
+ *     as the MAX_SP field in the QoS info field (but already shifted down).
+ * @__NL80211_STA_WME_AFTER_LAST: internal
+ * @NL80211_STA_WME_MAX: highest station WME attribute
+ */
+enum nl80211_sta_wme_attr {
+       __NL80211_STA_WME_INVALID,
+       NL80211_STA_WME_UAPSD_QUEUES,
+       NL80211_STA_WME_MAX_SP,
+
+       /* keep last */
+       __NL80211_STA_WME_AFTER_LAST,
+       NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates
+ * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes
+ * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher
+ *     priority)
+ * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets)
+ * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag)
+ * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes
+ *     (internal)
+ * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute
+ *     (internal)
+ */
+enum nl80211_pmksa_candidate_attr {
+       __NL80211_PMKSA_CANDIDATE_INVALID,
+       NL80211_PMKSA_CANDIDATE_INDEX,
+       NL80211_PMKSA_CANDIDATE_BSSID,
+       NL80211_PMKSA_CANDIDATE_PREAUTH,
+
+       /* keep last */
+       NUM_NL80211_PMKSA_CANDIDATE,
+       MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1
+};
+
+/**
+ * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION
+ * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request
+ * @NL80211_TDLS_SETUP: Setup TDLS link
+ * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established
+ * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link
+ * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link
+ */
+enum nl80211_tdls_operation {
+       NL80211_TDLS_DISCOVERY_REQ,
+       NL80211_TDLS_SETUP,
+       NL80211_TDLS_TEARDOWN,
+       NL80211_TDLS_ENABLE_LINK,
+       NL80211_TDLS_DISABLE_LINK,
+};
+
+/*
+ * enum nl80211_ap_sme_features - device-integrated AP features
+ * Reserved for future use, no bits are defined in
+ * NL80211_ATTR_DEVICE_AP_SME yet.
+enum nl80211_ap_sme_features {
+};
+ */
+
+/**
+ * enum nl80211_feature_flags - device/driver features
+ * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back
+ *     TX status to the socket error queue when requested with the
+ *     socket option.
+ * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates.
+ * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
+ *     the connected inactive stations in AP mode.
+ * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
+ *     to work properly to suppport receiving regulatory hints from
+ *     cellular base stations.
+ * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only
+ *     here to reserve the value for API/ABI compatibility)
+ * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of
+ *     equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station
+ *     mode
+ * @NL80211_FEATURE_LOW_PRIORITY_SCAN: This driver supports low priority scan
+ * @NL80211_FEATURE_SCAN_FLUSH: Scan flush is supported
+ * @NL80211_FEATURE_AP_SCAN: Support scanning using an AP vif
+ * @NL80211_FEATURE_VIF_TXPOWER: The driver supports per-vif TX power setting
+ * @NL80211_FEATURE_NEED_OBSS_SCAN: The driver expects userspace to perform
+ *     OBSS scans and generate 20/40 BSS coex reports. This flag is used only
+ *     for drivers implementing the CONNECT API, for AUTH/ASSOC it is implied.
+ * @NL80211_FEATURE_P2P_GO_CTWIN: P2P GO implementation supports CT Window
+ *     setting
+ * @NL80211_FEATURE_P2P_GO_OPPPS: P2P GO implementation supports opportunistic
+ *     powersave
+ * @NL80211_FEATURE_FULL_AP_CLIENT_STATE: The driver supports full state
+ *     transitions for AP clients. Without this flag (and if the driver
+ *     doesn't have the AP SME in the device) the driver supports adding
+ *     stations only when they're associated and adds them in associated
+ *     state (to later be transitioned into authorized), with this flag
+ *     they should be added before even sending the authentication reply
+ *     and then transitioned into authenticated, associated and authorized
+ *     states using station flags.
+ *     Note that even for drivers that support this, the default is to add
+ *     stations in authenticated/associated state, so to add unauthenticated
+ *     stations the authenticated/associated bits have to be set in the mask.
+ * @NL80211_FEATURE_ADVERTISE_CHAN_LIMITS: cfg80211 advertises channel limits
+ *     (HT40, VHT 80/160 MHz) if this flag is set
+ * @NL80211_FEATURE_USERSPACE_MPM: This driver supports a userspace Mesh
+ *     Peering Management entity which may be implemented by registering for
+ *     beacons or NL80211_CMD_NEW_PEER_CANDIDATE events. The mesh beacon is
+ *     still generated by the driver.
+ * @NL80211_FEATURE_ACTIVE_MONITOR: This driver supports an active monitor
+ *     interface. An active monitor interface behaves like a normal monitor
+ *     interface, but gets added to the driver. It ensures that incoming
+ *     unicast packets directed at the configured interface address get ACKed.
+ * @NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE: This driver supports dynamic
+ *     channel bandwidth change (e.g., HT 20 <-> 40 MHz channel) during the
+ *     lifetime of a BSS.
+ * @NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES: This device adds a DS Parameter
+ *     Set IE to probe requests.
+ * @NL80211_FEATURE_WFA_TPC_IE_IN_PROBES: This device adds a WFA TPC Report IE
+ *     to probe requests.
+ * @NL80211_FEATURE_QUIET: This device, in client mode, supports Quiet Period
+ *     requests sent to it by an AP.
+ * @NL80211_FEATURE_TX_POWER_INSERTION: This device is capable of inserting the
+ *     current tx power value into the TPC Report IE in the spectrum
+ *     management TPC Report action frame, and in the Radio Measurement Link
+ *     Measurement Report action frame.
+ * @NL80211_FEATURE_ACKTO_ESTIMATION: This driver supports dynamic ACK timeout
+ *     estimation (dynack). %NL80211_ATTR_WIPHY_DYN_ACK flag attribute is used
+ *     to enable dynack.
+ * @NL80211_FEATURE_STATIC_SMPS: Device supports static spatial
+ *     multiplexing powersave, ie. can turn off all but one chain
+ *     even on HT connections that should be using more chains.
+ * @NL80211_FEATURE_DYNAMIC_SMPS: Device supports dynamic spatial
+ *     multiplexing powersave, ie. can turn off all but one chain
+ *     and then wake the rest up as required after, for example,
+ *     rts/cts handshake.
+ * @NL80211_FEATURE_SUPPORTS_WMM_ADMISSION: the device supports setting up WMM
+ *     TSPEC sessions (TID aka TSID 0-7) with the %NL80211_CMD_ADD_TX_TS
+ *     command. Standard IEEE 802.11 TSPEC setup is not yet supported, it
+ *     needs to be able to handle Block-Ack agreements and other things.
+ * @NL80211_FEATURE_MAC_ON_CREATE: Device supports configuring
+ *     the vif's MAC address upon creation.
+ *     See 'macaddr' field in the vif_params (cfg80211.h).
+ * @NL80211_FEATURE_TDLS_CHANNEL_SWITCH: Driver supports channel switching when
+ *     operating as a TDLS peer.
+ * @NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR: This device/driver supports using a
+ *     random MAC address during scan (if the device is unassociated); the
+ *     %NL80211_SCAN_FLAG_RANDOM_ADDR flag may be set for scans and the MAC
+ *     address mask/value will be used.
+ * @NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR: This device/driver supports
+ *     using a random MAC address for every scan iteration during scheduled
+ *     scan (while not associated), the %NL80211_SCAN_FLAG_RANDOM_ADDR may
+ *     be set for scheduled scan and the MAC address mask/value will be used.
+ * @NL80211_FEATURE_ND_RANDOM_MAC_ADDR: This device/driver supports using a
+ *     random MAC address for every scan iteration during "net detect", i.e.
+ *     scan in unassociated WoWLAN, the %NL80211_SCAN_FLAG_RANDOM_ADDR may
+ *     be set for scheduled scan and the MAC address mask/value will be used.
+ */
+enum nl80211_feature_flags {
+       NL80211_FEATURE_SK_TX_STATUS                    = 1 << 0,
+       NL80211_FEATURE_HT_IBSS                         = 1 << 1,
+       NL80211_FEATURE_INACTIVITY_TIMER                = 1 << 2,
+       NL80211_FEATURE_CELL_BASE_REG_HINTS             = 1 << 3,
+       NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL        = 1 << 4,
+       NL80211_FEATURE_SAE                             = 1 << 5,
+       NL80211_FEATURE_LOW_PRIORITY_SCAN               = 1 << 6,
+       NL80211_FEATURE_SCAN_FLUSH                      = 1 << 7,
+       NL80211_FEATURE_AP_SCAN                         = 1 << 8,
+       NL80211_FEATURE_VIF_TXPOWER                     = 1 << 9,
+       NL80211_FEATURE_NEED_OBSS_SCAN                  = 1 << 10,
+       NL80211_FEATURE_P2P_GO_CTWIN                    = 1 << 11,
+       NL80211_FEATURE_P2P_GO_OPPPS                    = 1 << 12,
+       /* bit 13 is reserved */
+       NL80211_FEATURE_ADVERTISE_CHAN_LIMITS           = 1 << 14,
+       NL80211_FEATURE_FULL_AP_CLIENT_STATE            = 1 << 15,
+       NL80211_FEATURE_USERSPACE_MPM                   = 1 << 16,
+       NL80211_FEATURE_ACTIVE_MONITOR                  = 1 << 17,
+       NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE       = 1 << 18,
+       NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES       = 1 << 19,
+       NL80211_FEATURE_WFA_TPC_IE_IN_PROBES            = 1 << 20,
+       NL80211_FEATURE_QUIET                           = 1 << 21,
+       NL80211_FEATURE_TX_POWER_INSERTION              = 1 << 22,
+       NL80211_FEATURE_ACKTO_ESTIMATION                = 1 << 23,
+       NL80211_FEATURE_STATIC_SMPS                     = 1 << 24,
+       NL80211_FEATURE_DYNAMIC_SMPS                    = 1 << 25,
+       NL80211_FEATURE_SUPPORTS_WMM_ADMISSION          = 1 << 26,
+       NL80211_FEATURE_MAC_ON_CREATE                   = 1 << 27,
+       NL80211_FEATURE_TDLS_CHANNEL_SWITCH             = 1 << 28,
+       NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR            = 1 << 29,
+       NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR      = 1 << 30,
+       NL80211_FEATURE_ND_RANDOM_MAC_ADDR              = 1 << 31,
+};
+
+/**
+ * enum nl80211_ext_feature_index - bit index of extended features.
+ * @NL80211_EXT_FEATURE_VHT_IBSS: This driver supports IBSS with VHT datarates.
+ *
+ * @NUM_NL80211_EXT_FEATURES: number of extended features.
+ * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
+ */
+enum nl80211_ext_feature_index {
+       NL80211_EXT_FEATURE_VHT_IBSS,
+
+       /* add new features before the definition below */
+       NUM_NL80211_EXT_FEATURES,
+       MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
+};
+
+/**
+ * enum nl80211_probe_resp_offload_support_attr - optional supported
+ *     protocols for probe-response offloading by the driver/FW.
+ *     To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute.
+ *     Each enum value represents a bit in the bitmap of supported
+ *     protocols. Typically a subset of probe-requests belonging to a
+ *     supported protocol will be excluded from offload and uploaded
+ *     to the host.
+ *
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P
+ * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u
+ */
+enum nl80211_probe_resp_offload_support_attr {
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS =        1<<0,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 =       1<<1,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P =        1<<2,
+       NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U =     1<<3,
+};
+
+/**
+ * enum nl80211_connect_failed_reason - connection request failed reasons
+ * @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be
+ *     handled by the AP is reached.
+ * @NL80211_CONN_FAIL_BLOCKED_CLIENT: Connection request is rejected due to ACL.
+ */
+enum nl80211_connect_failed_reason {
+       NL80211_CONN_FAIL_MAX_CLIENTS,
+       NL80211_CONN_FAIL_BLOCKED_CLIENT,
+};
+
+/**
+ * enum nl80211_scan_flags -  scan request control flags
+ *
+ * Scan request control flags are used to control the handling
+ * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN
+ * requests.
+ *
+ * @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority
+ * @NL80211_SCAN_FLAG_FLUSH: flush cache before scanning
+ * @NL80211_SCAN_FLAG_AP: force a scan even if the interface is configured
+ *     as AP and the beaconing has already been configured. This attribute is
+ *     dangerous because will destroy stations performance as a lot of frames
+ *     will be lost while scanning off-channel, therefore it must be used only
+ *     when really needed
+ * @NL80211_SCAN_FLAG_RANDOM_ADDR: use a random MAC address for this scan (or
+ *     for scheduled scan: a different one for every scan iteration). When the
+ *     flag is set, depending on device capabilities the @NL80211_ATTR_MAC and
+ *     @NL80211_ATTR_MAC_MASK attributes may also be given in which case only
+ *     the masked bits will be preserved from the MAC address and the remainder
+ *     randomised. If the attributes are not given full randomisation (46 bits,
+ *     locally administered 1, multicast 0) is assumed.
+ *     This flag must not be requested when the feature isn't supported, check
+ *     the nl80211 feature flags for the device.
+ */
+enum nl80211_scan_flags {
+       NL80211_SCAN_FLAG_LOW_PRIORITY                  = 1<<0,
+       NL80211_SCAN_FLAG_FLUSH                         = 1<<1,
+       NL80211_SCAN_FLAG_AP                            = 1<<2,
+       NL80211_SCAN_FLAG_RANDOM_ADDR                   = 1<<3,
+};
+
+/**
+ * enum nl80211_acl_policy - access control policy
+ *
+ * Access control policy is applied on a MAC list set by
+ * %NL80211_CMD_START_AP and %NL80211_CMD_SET_MAC_ACL, to
+ * be used with %NL80211_ATTR_ACL_POLICY.
+ *
+ * @NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: Deny stations which are
+ *     listed in ACL, i.e. allow all the stations which are not listed
+ *     in ACL to authenticate.
+ * @NL80211_ACL_POLICY_DENY_UNLESS_LISTED: Allow the stations which are listed
+ *     in ACL, i.e. deny all the stations which are not listed in ACL.
+ */
+enum nl80211_acl_policy {
+       NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED,
+       NL80211_ACL_POLICY_DENY_UNLESS_LISTED,
+};
+
+/**
+ * enum nl80211_smps_mode - SMPS mode
+ *
+ * Requested SMPS mode (for AP mode)
+ *
+ * @NL80211_SMPS_OFF: SMPS off (use all antennas).
+ * @NL80211_SMPS_STATIC: static SMPS (use a single antenna)
+ * @NL80211_SMPS_DYNAMIC: dynamic smps (start with a single antenna and
+ *     turn on other antennas after CTS/RTS).
+ */
+enum nl80211_smps_mode {
+       NL80211_SMPS_OFF,
+       NL80211_SMPS_STATIC,
+       NL80211_SMPS_DYNAMIC,
+
+       __NL80211_SMPS_AFTER_LAST,
+       NL80211_SMPS_MAX = __NL80211_SMPS_AFTER_LAST - 1
+};
+
+/**
+ * enum nl80211_radar_event - type of radar event for DFS operation
+ *
+ * Type of event to be used with NL80211_ATTR_RADAR_EVENT to inform userspace
+ * about detected radars or success of the channel available check (CAC)
+ *
+ * @NL80211_RADAR_DETECTED: A radar pattern has been detected. The channel is
+ *     now unusable.
+ * @NL80211_RADAR_CAC_FINISHED: Channel Availability Check has been finished,
+ *     the channel is now available.
+ * @NL80211_RADAR_CAC_ABORTED: Channel Availability Check has been aborted, no
+ *     change to the channel status.
+ * @NL80211_RADAR_NOP_FINISHED: The Non-Occupancy Period for this channel is
+ *     over, channel becomes usable.
+ */
+enum nl80211_radar_event {
+       NL80211_RADAR_DETECTED,
+       NL80211_RADAR_CAC_FINISHED,
+       NL80211_RADAR_CAC_ABORTED,
+       NL80211_RADAR_NOP_FINISHED,
+};
+
+/**
+ * enum nl80211_dfs_state - DFS states for channels
+ *
+ * Channel states used by the DFS code.
+ *
+ * @NL80211_DFS_USABLE: The channel can be used, but channel availability
+ *     check (CAC) must be performed before using it for AP or IBSS.
+ * @NL80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it
+ *     is therefore marked as not available.
+ * @NL80211_DFS_AVAILABLE: The channel has been CAC checked and is available.
+ */
+enum nl80211_dfs_state {
+       NL80211_DFS_USABLE,
+       NL80211_DFS_UNAVAILABLE,
+       NL80211_DFS_AVAILABLE,
+};
+
+/**
+ * enum enum nl80211_protocol_features - nl80211 protocol features
+ * @NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP: nl80211 supports splitting
+ *     wiphy dumps (if requested by the application with the attribute
+ *     %NL80211_ATTR_SPLIT_WIPHY_DUMP. Also supported is filtering the
+ *     wiphy dump by %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFINDEX or
+ *     %NL80211_ATTR_WDEV.
+ */
+enum nl80211_protocol_features {
+       NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP =     1 << 0,
+};
+
+/**
+ * enum nl80211_crit_proto_id - nl80211 critical protocol identifiers
+ *
+ * @NL80211_CRIT_PROTO_UNSPEC: protocol unspecified.
+ * @NL80211_CRIT_PROTO_DHCP: BOOTP or DHCPv6 protocol.
+ * @NL80211_CRIT_PROTO_EAPOL: EAPOL protocol.
+ * @NL80211_CRIT_PROTO_APIPA: APIPA protocol.
+ * @NUM_NL80211_CRIT_PROTO: must be kept last.
+ */
+enum nl80211_crit_proto_id {
+       NL80211_CRIT_PROTO_UNSPEC,
+       NL80211_CRIT_PROTO_DHCP,
+       NL80211_CRIT_PROTO_EAPOL,
+       NL80211_CRIT_PROTO_APIPA,
+       /* add other protocols before this one */
+       NUM_NL80211_CRIT_PROTO
+};
+
+/* maximum duration for critical protocol measures */
+#define NL80211_CRIT_PROTO_MAX_DURATION                5000 /* msec */
+
+/**
+ * enum nl80211_rxmgmt_flags - flags for received management frame.
+ *
+ * Used by cfg80211_rx_mgmt()
+ *
+ * @NL80211_RXMGMT_FLAG_ANSWERED: frame was answered by device/driver.
+ */
+enum nl80211_rxmgmt_flags {
+       NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0,
+};
+
+/*
+ * If this flag is unset, the lower 24 bits are an OUI, if set
+ * a Linux nl80211 vendor ID is used (no such IDs are allocated
+ * yet, so that's not valid so far)
+ */
+#define NL80211_VENDOR_ID_IS_LINUX     0x80000000
+
+/**
+ * struct nl80211_vendor_cmd_info - vendor command data
+ * @vendor_id: If the %NL80211_VENDOR_ID_IS_LINUX flag is clear, then the
+ *     value is a 24-bit OUI; if it is set then a separately allocated ID
+ *     may be used, but no such IDs are allocated yet. New IDs should be
+ *     added to this file when needed.
+ * @subcmd: sub-command ID for the command
+ */
+struct nl80211_vendor_cmd_info {
+       __u32 vendor_id;
+       __u32 subcmd;
+};
+
+/**
+ * enum nl80211_tdls_peer_capability - TDLS peer flags.
+ *
+ * Used by tdls_mgmt() to determine which conditional elements need
+ * to be added to TDLS Setup frames.
+ *
+ * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable.
+ * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable.
+ * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable.
+ */
+enum nl80211_tdls_peer_capability {
+       NL80211_TDLS_PEER_HT = 1<<0,
+       NL80211_TDLS_PEER_VHT = 1<<1,
+       NL80211_TDLS_PEER_WMM = 1<<2,
+};
+
+/**
+ * enum nl80211_sched_scan_plan - scanning plan for scheduled scan
+ * @__NL80211_SCHED_SCAN_PLAN_INVALID: attribute number 0 is reserved
+ * @NL80211_SCHED_SCAN_PLAN_INTERVAL: interval between scan iterations. In
+ *     seconds (u32).
+ * @NL80211_SCHED_SCAN_PLAN_ITERATIONS: number of scan iterations in this
+ *     scan plan (u32). The last scan plan must not specify this attribute
+ *     because it will run infinitely. A value of zero is invalid as it will
+ *     make the scan plan meaningless.
+ * @NL80211_SCHED_SCAN_PLAN_MAX: highest scheduled scan plan attribute number
+ *     currently defined
+ * @__NL80211_SCHED_SCAN_PLAN_AFTER_LAST: internal use
+ */
+enum nl80211_sched_scan_plan {
+       __NL80211_SCHED_SCAN_PLAN_INVALID,
+       NL80211_SCHED_SCAN_PLAN_INTERVAL,
+       NL80211_SCHED_SCAN_PLAN_ITERATIONS,
+
+       /* keep last */
+       __NL80211_SCHED_SCAN_PLAN_AFTER_LAST,
+       NL80211_SCHED_SCAN_PLAN_MAX =
+               __NL80211_SCHED_SCAN_PLAN_AFTER_LAST - 1
+};
+
+#endif /* __LINUX_NL80211_H */
diff --git a/lib/libdss-include/linux/nubus.h b/lib/libdss-include/linux/nubus.h
new file mode 100644 (file)
index 0000000..60b03e4
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+  nubus.h: various definitions and prototypes for NuBus drivers to use.
+
+  Originally written by Alan Cox.
+
+  Hacked to death by C. Scott Ananian and David Huggins-Daines.
+  
+  Some of the constants in here are from the corresponding
+  NetBSD/OpenBSD header file, by Allen Briggs.  We figured out the
+  rest of them on our own. */
+
+#ifndef LINUX_NUBUS_H
+#define LINUX_NUBUS_H
+
+#include <linux/types.h>
+
+enum nubus_category {
+       NUBUS_CAT_BOARD          = 0x0001,
+       NUBUS_CAT_DISPLAY        = 0x0003,
+       NUBUS_CAT_NETWORK        = 0x0004,
+       NUBUS_CAT_COMMUNICATIONS = 0x0006,
+       NUBUS_CAT_FONT           = 0x0009,
+       NUBUS_CAT_CPU            = 0x000A,
+       /* For lack of a better name */
+       NUBUS_CAT_DUODOCK        = 0x0020
+};
+
+enum nubus_type_network {
+       NUBUS_TYPE_ETHERNET      = 0x0001,
+       NUBUS_TYPE_RS232         = 0x0002
+};
+
+enum nubus_type_display {
+       NUBUS_TYPE_VIDEO         = 0x0001
+};
+
+enum nubus_type_cpu {
+       NUBUS_TYPE_68020         = 0x0003,
+       NUBUS_TYPE_68030         = 0x0004,
+       NUBUS_TYPE_68040         = 0x0005
+};
+
+/* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots)
+ *  68030 motherboards: <10,4,0,24>
+ *  68040 motherboards: <10,5,0,24>
+ *  DuoDock Plus: <32,1,1,2>
+ *
+ *  Toby Frame Buffer card: <3,1,1,1>
+ *  RBV built-in video (IIci): <3,1,1,24>
+ *  Valkyrie built-in video (Q630): <3,1,1,46>
+ *  Macintosh Display Card: <3,1,1,25>
+ *  Sonora built-in video (P460): <3,1,1,34>
+ *  Jet framebuffer (DuoDock Plus): <3,1,1,41>
+ *
+ *  SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272>
+ *  SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271>
+ *  Apple SONIC LC-PDS Ethernet ("Apple Ethernet LC Twisted-Pair Card"): <4,1,0,281>
+ *  Sonic Systems Ethernet A-Series Card: <4,1,268,256>
+ *  Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision)
+ *   ROM on the above card: <2,1,0,0>
+ *  Cabletron ethernet card: <4,1,1,265>
+ *  Farallon ethernet card: <4,1,268,256> (identical to Sonic Systems card)
+ *  Kinetics EtherPort IIN: <4,1,259,262>
+ *  API Engineering EtherRun_LCa PDS enet card: <4,1,282,256>
+ *
+ *  Add your devices to the list!  You can obtain the "Slots" utility
+ *  from Apple's FTP site at:
+ *  ftp://dev.apple.com/devworld/Tool_Chest/Devices_-_Hardware/NuBus_Slot_Manager/
+ *
+ *  Alternately, TattleTech can be found at any Info-Mac mirror site.  
+ *  or from its distribution site: ftp://ftp.decismkr.com/dms
+ */
+
+/* DrSW: Uniquely identifies the software interface to a board.  This
+   is usually the one you want to look at when writing a driver.  It's
+   not as useful as you think, though, because as we should know by
+   now (duh), "Apple Compatible" can mean a lot of things... */
+
+/* Add known DrSW values here */
+enum nubus_drsw {
+       /* NUBUS_CAT_DISPLAY */
+       NUBUS_DRSW_APPLE        = 0x0001,
+       NUBUS_DRSW_APPLE_HIRES  = 0x0013, /* MacII HiRes card driver */
+       
+       /* NUBUS_CAT_NETWORK */
+       NUBUS_DRSW_3COM         = 0x0000,
+       NUBUS_DRSW_CABLETRON    = 0x0001,
+       NUBUS_DRSW_SONIC_LC     = 0x0001,
+       NUBUS_DRSW_KINETICS     = 0x0103,
+       NUBUS_DRSW_ASANTE       = 0x0104,
+       NUBUS_DRSW_TECHWORKS    = 0x0109,
+       NUBUS_DRSW_DAYNA        = 0x010b,
+       NUBUS_DRSW_FARALLON     = 0x010c,
+       NUBUS_DRSW_APPLE_SN     = 0x010f,
+       NUBUS_DRSW_DAYNA2       = 0x0115,
+       NUBUS_DRSW_FOCUS        = 0x011a,
+       NUBUS_DRSW_ASANTE_CS    = 0x011d, /* use asante SMC9194 driver */
+       NUBUS_DRSW_DAYNA_LC     = 0x011e,
+
+       /* NUBUS_CAT_CPU */
+       NUBUS_DRSW_NONE         = 0x0000,
+};
+
+/* DrHW: Uniquely identifies the hardware interface to a board (or at
+   least, it should...  some video cards are known to incorrectly
+   identify themselves as Toby cards) */
+
+/* Add known DrHW values here */
+enum nubus_drhw {
+       /* NUBUS_CAT_DISPLAY */
+       NUBUS_DRHW_APPLE_TFB      = 0x0001, /* Toby frame buffer card */
+       NUBUS_DRHW_APPLE_WVC      = 0x0006, /* Apple Workstation Video Card */
+       NUBUS_DRHW_SIGMA_CLRMAX   = 0x0007, /* Sigma Design ColorMax */
+       NUBUS_DRHW_APPLE_SE30     = 0x0009, /* Apple SE/30 video */
+       NUBUS_DRHW_APPLE_HRVC     = 0x0013, /* Mac II High-Res Video Card */
+       NUBUS_DRHW_APPLE_PVC      = 0x0017, /* Mac II Portrait Video Card */
+       NUBUS_DRHW_APPLE_RBV1     = 0x0018, /* IIci RBV video */
+       NUBUS_DRHW_APPLE_MDC      = 0x0019, /* Macintosh Display Card */
+       NUBUS_DRHW_APPLE_SONORA   = 0x0022, /* Sonora built-in video */
+       NUBUS_DRHW_APPLE_24AC     = 0x002b, /* Mac 24AC Video Card */
+       NUBUS_DRHW_APPLE_VALKYRIE = 0x002e,
+       NUBUS_DRHW_APPLE_JET      = 0x0029, /* Jet framebuffer (DuoDock) */
+       NUBUS_DRHW_SMAC_GFX       = 0x0105, /* SuperMac GFX */
+       NUBUS_DRHW_RASTER_CB264   = 0x013B, /* RasterOps ColorBoard 264 */
+       NUBUS_DRHW_MICRON_XCEED   = 0x0146, /* Micron Exceed color */
+       NUBUS_DRHW_RDIUS_GSC      = 0x0153, /* Radius GS/C */
+       NUBUS_DRHW_SMAC_SPEC8     = 0x017B, /* SuperMac Spectrum/8 */
+       NUBUS_DRHW_SMAC_SPEC24    = 0x017C, /* SuperMac Spectrum/24 */
+       NUBUS_DRHW_RASTER_CB364   = 0x026F, /* RasterOps ColorBoard 364 */
+       NUBUS_DRHW_RDIUS_DCGX     = 0x027C, /* Radius DirectColor/GX */
+       NUBUS_DRHW_RDIUS_PC8      = 0x0291, /* Radius PrecisionColor 8 */
+       NUBUS_DRHW_LAPIS_PCS8     = 0x0292, /* Lapis ProColorServer 8 */
+       NUBUS_DRHW_RASTER_24XLI   = 0x02A0, /* RasterOps 8/24 XLi */
+       NUBUS_DRHW_RASTER_PBPGT   = 0x02A5, /* RasterOps PaintBoard Prism GT */
+       NUBUS_DRHW_EMACH_FSX      = 0x02AE, /* E-Machines Futura SX */
+       NUBUS_DRHW_RASTER_24XLTV  = 0x02B7, /* RasterOps 24XLTV */
+       NUBUS_DRHW_SMAC_THUND24   = 0x02CB, /* SuperMac Thunder/24 */
+       NUBUS_DRHW_SMAC_THUNDLGHT = 0x03D9, /* SuperMac ThunderLight */
+       NUBUS_DRHW_RDIUS_PC24XP   = 0x0406, /* Radius PrecisionColor 24Xp */
+       NUBUS_DRHW_RDIUS_PC24X    = 0x040A, /* Radius PrecisionColor 24X */
+       NUBUS_DRHW_RDIUS_PC8XJ    = 0x040B, /* Radius PrecisionColor 8XJ */
+       
+       /* NUBUS_CAT_NETWORK */
+       NUBUS_DRHW_INTERLAN       = 0x0100,
+       NUBUS_DRHW_SMC9194        = 0x0101,
+       NUBUS_DRHW_KINETICS       = 0x0106,
+       NUBUS_DRHW_CABLETRON      = 0x0109,
+       NUBUS_DRHW_ASANTE_LC      = 0x010f,
+       NUBUS_DRHW_SONIC          = 0x0110,
+       NUBUS_DRHW_TECHWORKS      = 0x0112,
+       NUBUS_DRHW_APPLE_SONIC_NB = 0x0118,
+       NUBUS_DRHW_APPLE_SONIC_LC = 0x0119,
+       NUBUS_DRHW_FOCUS          = 0x011c,
+       NUBUS_DRHW_SONNET         = 0x011d,
+};
+
+/* Resource IDs: These are the identifiers for the various weird and
+   wonderful tidbits of information that may or may not reside in the
+   NuBus ROM directory. */
+enum nubus_res_id {
+       NUBUS_RESID_TYPE         = 0x0001,
+       NUBUS_RESID_NAME         = 0x0002,
+       NUBUS_RESID_ICON         = 0x0003,
+       NUBUS_RESID_DRVRDIR      = 0x0004,
+       NUBUS_RESID_LOADREC      = 0x0005,
+       NUBUS_RESID_BOOTREC      = 0x0006,
+       NUBUS_RESID_FLAGS        = 0x0007,
+       NUBUS_RESID_HWDEVID      = 0x0008,
+       NUBUS_RESID_MINOR_BASEOS = 0x000a,
+       NUBUS_RESID_MINOR_LENGTH = 0x000b,
+       NUBUS_RESID_MAJOR_BASEOS = 0x000c,
+       NUBUS_RESID_MAJOR_LENGTH = 0x000d,
+       NUBUS_RESID_CICN         = 0x000f,
+       NUBUS_RESID_ICL8         = 0x0010,
+       NUBUS_RESID_ICL4         = 0x0011,
+};
+
+/* Category-specific resources. */
+enum nubus_board_res_id {
+       NUBUS_RESID_BOARDID      = 0x0020,
+       NUBUS_RESID_PRAMINITDATA = 0x0021,
+       NUBUS_RESID_PRIMARYINIT  = 0x0022,
+       NUBUS_RESID_TIMEOUTCONST = 0x0023,
+       NUBUS_RESID_VENDORINFO   = 0x0024,
+       NUBUS_RESID_BOARDFLAGS   = 0x0025,
+       NUBUS_RESID_SECONDINIT   = 0x0026,
+
+       /* Not sure why Apple put these next two in here */
+       NUBUS_RESID_VIDNAMES     = 0x0041,
+       NUBUS_RESID_VIDMODES     = 0x007e
+};
+
+/* Fields within the vendor info directory */
+enum nubus_vendor_res_id {
+       NUBUS_RESID_VEND_ID     = 0x0001,
+       NUBUS_RESID_VEND_SERIAL = 0x0002,
+       NUBUS_RESID_VEND_REV    = 0x0003,
+       NUBUS_RESID_VEND_PART   = 0x0004,
+       NUBUS_RESID_VEND_DATE   = 0x0005
+};
+
+enum nubus_net_res_id {
+       NUBUS_RESID_MAC_ADDRESS  = 0x0080
+};
+
+enum nubus_cpu_res_id {
+       NUBUS_RESID_MEMINFO      = 0x0081,
+       NUBUS_RESID_ROMINFO      = 0x0082
+};
+
+enum nubus_display_res_id {
+       NUBUS_RESID_GAMMADIR    = 0x0040,
+       NUBUS_RESID_FIRSTMODE   = 0x0080,
+       NUBUS_RESID_SECONDMODE  = 0x0081,
+       NUBUS_RESID_THIRDMODE   = 0x0082,
+       NUBUS_RESID_FOURTHMODE  = 0x0083,
+       NUBUS_RESID_FIFTHMODE   = 0x0084,
+       NUBUS_RESID_SIXTHMODE   = 0x0085
+};
+
+struct nubus_dir
+{
+       unsigned char *base;
+       unsigned char *ptr;
+       int done;
+       int mask;
+};
+
+struct nubus_dirent
+{
+       unsigned char *base;
+       unsigned char type;
+       __u32 data;     /* Actually 24bits used */
+       int mask;
+};
+
+
+/* We'd like to get rid of this eventually.  Only daynaport.c uses it now. */
+static __inline__ void *nubus_slot_addr(int slot)
+{
+       return (void *)(0xF0000000|(slot<<24));
+}
+
+#endif /* LINUX_NUBUS_H */
diff --git a/lib/libdss-include/linux/nvme_ioctl.h b/lib/libdss-include/linux/nvme_ioctl.h
new file mode 100644 (file)
index 0000000..9cea1ff
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Definitions for the NVM Express ioctl interface
+ * Copyright (c) 2011-2014, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#ifndef _LINUX_NVME_IOCTL_H
+#define _LINUX_NVME_IOCTL_H
+
+#include <linux/types.h>
+
+struct nvme_user_io {
+       __u8    opcode;
+       __u8    flags;
+       __u16   control;
+       __u16   nblocks;
+       __u16   rsvd;
+       __u64   metadata;
+       __u64   addr;
+       __u64   slba;
+       __u32   dsmgmt;
+       __u32   reftag;
+       __u16   apptag;
+       __u16   appmask;
+};
+
+struct nvme_passthru_cmd {
+       __u8    opcode;
+       __u8    flags;
+       __u16   rsvd1;
+       __u32   nsid;
+       __u32   cdw2;
+       __u32   cdw3;
+       __u64   metadata;
+       __u64   addr;
+       __u32   metadata_len;
+       __u32   data_len;
+       __u32   cdw10;
+       __u32   cdw11;
+       __u32   cdw12;
+       __u32   cdw13;
+       __u32   cdw14;
+       __u32   cdw15;
+       __u32   timeout_ms;
+       __u32   result;
+};
+
+#define nvme_admin_cmd nvme_passthru_cmd
+
+#define NVME_IOCTL_ID          _IO('N', 0x40)
+#define NVME_IOCTL_ADMIN_CMD   _IOWR('N', 0x41, struct nvme_admin_cmd)
+#define NVME_IOCTL_SUBMIT_IO   _IOW('N', 0x42, struct nvme_user_io)
+#define NVME_IOCTL_IO_CMD      _IOWR('N', 0x43, struct nvme_passthru_cmd)
+#define NVME_IOCTL_RESET       _IO('N', 0x44)
+#define NVME_IOCTL_SUBSYS_RESET        _IO('N', 0x45)
+
+#endif /* _LINUX_NVME_IOCTL_H */
diff --git a/lib/libdss-include/linux/nvram.h b/lib/libdss-include/linux/nvram.h
new file mode 100644 (file)
index 0000000..a05d28a
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _LINUX_NVRAM_H
+#define _LINUX_NVRAM_H
+
+#include <linux/ioctl.h>
+
+/* /dev/nvram ioctls */
+#define NVRAM_INIT     _IO('p', 0x40) /* initialize NVRAM and set checksum */
+#define NVRAM_SETCKS   _IO('p', 0x41) /* recalculate checksum */
+
+/* for all current systems, this is where NVRAM starts */
+#define NVRAM_FIRST_BYTE    14
+/* all these functions expect an NVRAM offset, not an absolute */
+#define NVRAM_OFFSET(x)   ((x)-NVRAM_FIRST_BYTE)
+
+
+#endif /* _LINUX_NVRAM_H */
diff --git a/lib/libdss-include/linux/omap3isp.h b/lib/libdss-include/linux/omap3isp.h
new file mode 100644 (file)
index 0000000..cb3e8a5
--- /dev/null
@@ -0,0 +1,646 @@
+/*
+ * omap3isp.h
+ *
+ * TI OMAP3 ISP - User-space API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ * Copyright (C) 2009 Texas Instruments, Inc.
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef OMAP3_ISP_USER_H
+#define OMAP3_ISP_USER_H
+
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/*
+ * Private IOCTLs
+ *
+ * VIDIOC_OMAP3ISP_CCDC_CFG: Set CCDC configuration
+ * VIDIOC_OMAP3ISP_PRV_CFG: Set preview engine configuration
+ * VIDIOC_OMAP3ISP_AEWB_CFG: Set AEWB module configuration
+ * VIDIOC_OMAP3ISP_HIST_CFG: Set histogram module configuration
+ * VIDIOC_OMAP3ISP_AF_CFG: Set auto-focus module configuration
+ * VIDIOC_OMAP3ISP_STAT_REQ: Read statistics (AEWB/AF/histogram) data
+ * VIDIOC_OMAP3ISP_STAT_EN: Enable/disable a statistics module
+ */
+
+#define VIDIOC_OMAP3ISP_CCDC_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct omap3isp_ccdc_update_config)
+#define VIDIOC_OMAP3ISP_PRV_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct omap3isp_prev_update_config)
+#define VIDIOC_OMAP3ISP_AEWB_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct omap3isp_h3a_aewb_config)
+#define VIDIOC_OMAP3ISP_HIST_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config)
+#define VIDIOC_OMAP3ISP_AF_CFG \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
+#define VIDIOC_OMAP3ISP_STAT_REQ \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
+#define VIDIOC_OMAP3ISP_STAT_EN \
+       _IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
+
+/*
+ * Events
+ *
+ * V4L2_EVENT_OMAP3ISP_AEWB: AEWB statistics data ready
+ * V4L2_EVENT_OMAP3ISP_AF: AF statistics data ready
+ * V4L2_EVENT_OMAP3ISP_HIST: Histogram statistics data ready
+ */
+
+#define V4L2_EVENT_OMAP3ISP_CLASS      (V4L2_EVENT_PRIVATE_START | 0x100)
+#define V4L2_EVENT_OMAP3ISP_AEWB       (V4L2_EVENT_OMAP3ISP_CLASS | 0x1)
+#define V4L2_EVENT_OMAP3ISP_AF         (V4L2_EVENT_OMAP3ISP_CLASS | 0x2)
+#define V4L2_EVENT_OMAP3ISP_HIST       (V4L2_EVENT_OMAP3ISP_CLASS | 0x3)
+
+struct omap3isp_stat_event_status {
+       __u32 frame_number;
+       __u16 config_counter;
+       __u8 buf_err;
+};
+
+/* AE/AWB related structures and flags*/
+
+/* H3A Range Constants */
+#define OMAP3ISP_AEWB_MAX_SATURATION_LIM       1023
+#define OMAP3ISP_AEWB_MIN_WIN_H                        2
+#define OMAP3ISP_AEWB_MAX_WIN_H                        256
+#define OMAP3ISP_AEWB_MIN_WIN_W                        6
+#define OMAP3ISP_AEWB_MAX_WIN_W                        256
+#define OMAP3ISP_AEWB_MIN_WINVC                        1
+#define OMAP3ISP_AEWB_MIN_WINHC                        1
+#define OMAP3ISP_AEWB_MAX_WINVC                        128
+#define OMAP3ISP_AEWB_MAX_WINHC                        36
+#define OMAP3ISP_AEWB_MAX_WINSTART             4095
+#define OMAP3ISP_AEWB_MIN_SUB_INC              2
+#define OMAP3ISP_AEWB_MAX_SUB_INC              32
+#define OMAP3ISP_AEWB_MAX_BUF_SIZE             83600
+
+#define OMAP3ISP_AF_IIRSH_MIN                  0
+#define OMAP3ISP_AF_IIRSH_MAX                  4095
+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN 1
+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX 36
+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN   1
+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX   128
+#define OMAP3ISP_AF_PAXEL_INCREMENT_MIN                2
+#define OMAP3ISP_AF_PAXEL_INCREMENT_MAX                32
+#define OMAP3ISP_AF_PAXEL_HEIGHT_MIN           2
+#define OMAP3ISP_AF_PAXEL_HEIGHT_MAX           256
+#define OMAP3ISP_AF_PAXEL_WIDTH_MIN            16
+#define OMAP3ISP_AF_PAXEL_WIDTH_MAX            256
+#define OMAP3ISP_AF_PAXEL_HZSTART_MIN          1
+#define OMAP3ISP_AF_PAXEL_HZSTART_MAX          4095
+#define OMAP3ISP_AF_PAXEL_VTSTART_MIN          0
+#define OMAP3ISP_AF_PAXEL_VTSTART_MAX          4095
+#define OMAP3ISP_AF_THRESHOLD_MAX              255
+#define OMAP3ISP_AF_COEF_MAX                   4095
+#define OMAP3ISP_AF_PAXEL_SIZE                 48
+#define OMAP3ISP_AF_MAX_BUF_SIZE               221184
+
+/**
+ * struct omap3isp_h3a_aewb_config - AE AWB configuration reset values
+ * saturation_limit: Saturation limit.
+ * @win_height: Window Height. Range 2 - 256, even values only.
+ * @win_width: Window Width. Range 6 - 256, even values only.
+ * @ver_win_count: Vertical Window Count. Range 1 - 128.
+ * @hor_win_count: Horizontal Window Count. Range 1 - 36.
+ * @ver_win_start: Vertical Window Start. Range 0 - 4095.
+ * @hor_win_start: Horizontal Window Start. Range 0 - 4095.
+ * @blk_ver_win_start: Black Vertical Windows Start. Range 0 - 4095.
+ * @blk_win_height: Black Window Height. Range 2 - 256, even values only.
+ * @subsample_ver_inc: Subsample Vertical points increment Range 2 - 32, even
+ *                     values only.
+ * @subsample_hor_inc: Subsample Horizontal points increment Range 2 - 32, even
+ *                     values only.
+ * @alaw_enable: AEW ALAW EN flag.
+ */
+struct omap3isp_h3a_aewb_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       /* Private fields */
+       __u16 saturation_limit;
+       __u16 win_height;
+       __u16 win_width;
+       __u16 ver_win_count;
+       __u16 hor_win_count;
+       __u16 ver_win_start;
+       __u16 hor_win_start;
+       __u16 blk_ver_win_start;
+       __u16 blk_win_height;
+       __u16 subsample_ver_inc;
+       __u16 subsample_hor_inc;
+       __u8 alaw_enable;
+};
+
+/**
+ * struct omap3isp_stat_data - Statistic data sent to or received from user
+ * @ts: Timestamp of returned framestats.
+ * @buf: Pointer to pass to user.
+ * @frame_number: Frame number of requested stats.
+ * @cur_frame: Current frame number being processed.
+ * @config_counter: Number of the configuration associated with the data.
+ */
+struct omap3isp_stat_data {
+       struct timeval ts;
+       void *buf;
+       __u32 buf_size;
+       __u16 frame_number;
+       __u16 cur_frame;
+       __u16 config_counter;
+};
+
+
+/* Histogram related structs */
+
+/* Flags for number of bins */
+#define OMAP3ISP_HIST_BINS_32          0
+#define OMAP3ISP_HIST_BINS_64          1
+#define OMAP3ISP_HIST_BINS_128         2
+#define OMAP3ISP_HIST_BINS_256         3
+
+/* Number of bins * 4 colors * 4-bytes word */
+#define OMAP3ISP_HIST_MEM_SIZE_BINS(n) ((1 << ((n)+5))*4*4)
+
+#define OMAP3ISP_HIST_MEM_SIZE         1024
+#define OMAP3ISP_HIST_MIN_REGIONS      1
+#define OMAP3ISP_HIST_MAX_REGIONS      4
+#define OMAP3ISP_HIST_MAX_WB_GAIN      255
+#define OMAP3ISP_HIST_MIN_WB_GAIN      0
+#define OMAP3ISP_HIST_MAX_BIT_WIDTH    14
+#define OMAP3ISP_HIST_MIN_BIT_WIDTH    8
+#define OMAP3ISP_HIST_MAX_WG           4
+#define OMAP3ISP_HIST_MAX_BUF_SIZE     4096
+
+/* Source */
+#define OMAP3ISP_HIST_SOURCE_CCDC      0
+#define OMAP3ISP_HIST_SOURCE_MEM       1
+
+/* CFA pattern */
+#define OMAP3ISP_HIST_CFA_BAYER                0
+#define OMAP3ISP_HIST_CFA_FOVEONX3     1
+
+struct omap3isp_hist_region {
+       __u16 h_start;
+       __u16 h_end;
+       __u16 v_start;
+       __u16 v_end;
+};
+
+struct omap3isp_hist_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       __u8 num_acc_frames;    /* Num of image frames to be processed and
+                                  accumulated for each histogram frame */
+       __u16 hist_bins;        /* number of bins: 32, 64, 128, or 256 */
+       __u8 cfa;               /* BAYER or FOVEON X3 */
+       __u8 wg[OMAP3ISP_HIST_MAX_WG];  /* White Balance Gain */
+       __u8 num_regions;       /* number of regions to be configured */
+       struct omap3isp_hist_region region[OMAP3ISP_HIST_MAX_REGIONS];
+};
+
+/* Auto Focus related structs */
+
+#define OMAP3ISP_AF_NUM_COEF           11
+
+enum omap3isp_h3a_af_fvmode {
+       OMAP3ISP_AF_MODE_SUMMED = 0,
+       OMAP3ISP_AF_MODE_PEAK = 1
+};
+
+/* Red, Green, and blue pixel location in the AF windows */
+enum omap3isp_h3a_af_rgbpos {
+       OMAP3ISP_AF_GR_GB_BAYER = 0,    /* GR and GB as Bayer pattern */
+       OMAP3ISP_AF_RG_GB_BAYER = 1,    /* RG and GB as Bayer pattern */
+       OMAP3ISP_AF_GR_BG_BAYER = 2,    /* GR and BG as Bayer pattern */
+       OMAP3ISP_AF_RG_BG_BAYER = 3,    /* RG and BG as Bayer pattern */
+       OMAP3ISP_AF_GG_RB_CUSTOM = 4,   /* GG and RB as custom pattern */
+       OMAP3ISP_AF_RB_GG_CUSTOM = 5    /* RB and GG as custom pattern */
+};
+
+/* Contains the information regarding the Horizontal Median Filter */
+struct omap3isp_h3a_af_hmf {
+       __u8 enable;    /* Status of Horizontal Median Filter */
+       __u8 threshold; /* Threshold Value for Horizontal Median Filter */
+};
+
+/* Contains the information regarding the IIR Filters */
+struct omap3isp_h3a_af_iir {
+       __u16 h_start;                  /* IIR horizontal start */
+       __u16 coeff_set0[OMAP3ISP_AF_NUM_COEF]; /* Filter coefficient, set 0 */
+       __u16 coeff_set1[OMAP3ISP_AF_NUM_COEF]; /* Filter coefficient, set 1 */
+};
+
+/* Contains the information regarding the Paxels Structure in AF Engine */
+struct omap3isp_h3a_af_paxel {
+       __u16 h_start;  /* Horizontal Start Position */
+       __u16 v_start;  /* Vertical Start Position */
+       __u8 width;     /* Width of the Paxel */
+       __u8 height;    /* Height of the Paxel */
+       __u8 h_cnt;     /* Horizontal Count */
+       __u8 v_cnt;     /* vertical Count */
+       __u8 line_inc;  /* Line Increment */
+};
+
+/* Contains the parameters required for hardware set up of AF Engine */
+struct omap3isp_h3a_af_config {
+       /*
+        * Common fields.
+        * They should be the first ones and must be in the same order as in
+        * ispstat_generic_config struct.
+        */
+       __u32 buf_size;
+       __u16 config_counter;
+
+       struct omap3isp_h3a_af_hmf hmf;         /* HMF configurations */
+       struct omap3isp_h3a_af_iir iir;         /* IIR filter configurations */
+       struct omap3isp_h3a_af_paxel paxel;     /* Paxel parameters */
+       enum omap3isp_h3a_af_rgbpos rgb_pos;    /* RGB Positions */
+       enum omap3isp_h3a_af_fvmode fvmode;     /* Accumulator mode */
+       __u8 alaw_enable;                       /* AF ALAW status */
+};
+
+/* ISP CCDC structs */
+
+/* Abstraction layer CCDC configurations */
+#define OMAP3ISP_CCDC_ALAW             (1 << 0)
+#define OMAP3ISP_CCDC_LPF              (1 << 1)
+#define OMAP3ISP_CCDC_BLCLAMP          (1 << 2)
+#define OMAP3ISP_CCDC_BCOMP            (1 << 3)
+#define OMAP3ISP_CCDC_FPC              (1 << 4)
+#define OMAP3ISP_CCDC_CULL             (1 << 5)
+#define OMAP3ISP_CCDC_CONFIG_LSC       (1 << 7)
+#define OMAP3ISP_CCDC_TBL_LSC          (1 << 8)
+
+#define OMAP3ISP_RGB_MAX               3
+
+/* Enumeration constants for Alaw input width */
+enum omap3isp_alaw_ipwidth {
+       OMAP3ISP_ALAW_BIT12_3 = 0x3,
+       OMAP3ISP_ALAW_BIT11_2 = 0x4,
+       OMAP3ISP_ALAW_BIT10_1 = 0x5,
+       OMAP3ISP_ALAW_BIT9_0 = 0x6
+};
+
+/**
+ * struct omap3isp_ccdc_lsc_config - LSC configuration
+ * @offset: Table Offset of the gain table.
+ * @gain_mode_n: Vertical dimension of a paxel in LSC configuration.
+ * @gain_mode_m: Horizontal dimension of a paxel in LSC configuration.
+ * @gain_format: Gain table format.
+ * @fmtsph: Start pixel horizontal from start of the HS sync pulse.
+ * @fmtlnh: Number of pixels in horizontal direction to use for the data
+ *          reformatter.
+ * @fmtslv: Start line from start of VS sync pulse for the data reformatter.
+ * @fmtlnv: Number of lines in vertical direction for the data reformatter.
+ * @initial_x: X position, in pixels, of the first active pixel in reference
+ *             to the first active paxel. Must be an even number.
+ * @initial_y: Y position, in pixels, of the first active pixel in reference
+ *             to the first active paxel. Must be an even number.
+ * @size: Size of LSC gain table. Filled when loaded from userspace.
+ */
+struct omap3isp_ccdc_lsc_config {
+       __u16 offset;
+       __u8 gain_mode_n;
+       __u8 gain_mode_m;
+       __u8 gain_format;
+       __u16 fmtsph;
+       __u16 fmtlnh;
+       __u16 fmtslv;
+       __u16 fmtlnv;
+       __u8 initial_x;
+       __u8 initial_y;
+       __u32 size;
+};
+
+/**
+ * struct omap3isp_ccdc_bclamp - Optical & Digital black clamp subtract
+ * @obgain: Optical black average gain.
+ * @obstpixel: Start Pixel w.r.t. HS pulse in Optical black sample.
+ * @oblines: Optical Black Sample lines.
+ * @oblen: Optical Black Sample Length.
+ * @dcsubval: Digital Black Clamp subtract value.
+ */
+struct omap3isp_ccdc_bclamp {
+       __u8 obgain;
+       __u8 obstpixel;
+       __u8 oblines;
+       __u8 oblen;
+       __u16 dcsubval;
+};
+
+/**
+ * struct omap3isp_ccdc_fpc - Faulty Pixels Correction
+ * @fpnum: Number of faulty pixels to be corrected in the frame.
+ * @fpcaddr: Memory address of the FPC Table
+ */
+struct omap3isp_ccdc_fpc {
+       __u16 fpnum;
+       __u32 fpcaddr;
+};
+
+/**
+ * struct omap3isp_ccdc_blcomp - Black Level Compensation parameters
+ * @b_mg: B/Mg pixels. 2's complement. -128 to +127.
+ * @gb_g: Gb/G pixels. 2's complement. -128 to +127.
+ * @gr_cy: Gr/Cy pixels. 2's complement. -128 to +127.
+ * @r_ye: R/Ye pixels. 2's complement. -128 to +127.
+ */
+struct omap3isp_ccdc_blcomp {
+       __u8 b_mg;
+       __u8 gb_g;
+       __u8 gr_cy;
+       __u8 r_ye;
+};
+
+/**
+ * omap3isp_ccdc_culling - Culling parameters
+ * @v_pattern: Vertical culling pattern.
+ * @h_odd: Horizontal Culling pattern for odd lines.
+ * @h_even: Horizontal Culling pattern for even lines.
+ */
+struct omap3isp_ccdc_culling {
+       __u8 v_pattern;
+       __u16 h_odd;
+       __u16 h_even;
+};
+
+/**
+ * omap3isp_ccdc_update_config - CCDC configuration
+ * @update: Specifies which CCDC registers should be updated.
+ * @flag: Specifies which CCDC functions should be enabled.
+ * @alawip: Enable/Disable A-Law compression.
+ * @bclamp: Black clamp control register.
+ * @blcomp: Black level compensation value for RGrGbB Pixels. 2's complement.
+ * @fpc: Number of faulty pixels corrected in the frame, address of FPC table.
+ * @cull: Cull control register.
+ * @lsc: Pointer to LSC gain table.
+ */
+struct omap3isp_ccdc_update_config {
+       __u16 update;
+       __u16 flag;
+       enum omap3isp_alaw_ipwidth alawip;
+       struct omap3isp_ccdc_bclamp *bclamp;
+       struct omap3isp_ccdc_blcomp *blcomp;
+       struct omap3isp_ccdc_fpc *fpc;
+       struct omap3isp_ccdc_lsc_config *lsc_cfg;
+       struct omap3isp_ccdc_culling *cull;
+       __u8 *lsc;
+};
+
+/* Preview configurations */
+#define OMAP3ISP_PREV_LUMAENH          (1 << 0)
+#define OMAP3ISP_PREV_INVALAW          (1 << 1)
+#define OMAP3ISP_PREV_HRZ_MED          (1 << 2)
+#define OMAP3ISP_PREV_CFA              (1 << 3)
+#define OMAP3ISP_PREV_CHROMA_SUPP      (1 << 4)
+#define OMAP3ISP_PREV_WB               (1 << 5)
+#define OMAP3ISP_PREV_BLKADJ           (1 << 6)
+#define OMAP3ISP_PREV_RGB2RGB          (1 << 7)
+#define OMAP3ISP_PREV_COLOR_CONV       (1 << 8)
+#define OMAP3ISP_PREV_YC_LIMIT         (1 << 9)
+#define OMAP3ISP_PREV_DEFECT_COR       (1 << 10)
+/* Bit 11 was OMAP3ISP_PREV_GAMMABYPASS, now merged with OMAP3ISP_PREV_GAMMA */
+#define OMAP3ISP_PREV_DRK_FRM_CAPTURE  (1 << 12)
+#define OMAP3ISP_PREV_DRK_FRM_SUBTRACT (1 << 13)
+#define OMAP3ISP_PREV_LENS_SHADING     (1 << 14)
+#define OMAP3ISP_PREV_NF               (1 << 15)
+#define OMAP3ISP_PREV_GAMMA            (1 << 16)
+
+#define OMAP3ISP_PREV_NF_TBL_SIZE      64
+#define OMAP3ISP_PREV_CFA_TBL_SIZE     576
+#define OMAP3ISP_PREV_CFA_BLK_SIZE     (OMAP3ISP_PREV_CFA_TBL_SIZE / 4)
+#define OMAP3ISP_PREV_GAMMA_TBL_SIZE   1024
+#define OMAP3ISP_PREV_YENH_TBL_SIZE    128
+
+#define OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS  4
+
+/**
+ * struct omap3isp_prev_hmed - Horizontal Median Filter
+ * @odddist: Distance between consecutive pixels of same color in the odd line.
+ * @evendist: Distance between consecutive pixels of same color in the even
+ *            line.
+ * @thres: Horizontal median filter threshold.
+ */
+struct omap3isp_prev_hmed {
+       __u8 odddist;
+       __u8 evendist;
+       __u8 thres;
+};
+
+/*
+ * Enumeration for CFA Formats supported by preview
+ */
+enum omap3isp_cfa_fmt {
+       OMAP3ISP_CFAFMT_BAYER,
+       OMAP3ISP_CFAFMT_SONYVGA,
+       OMAP3ISP_CFAFMT_RGBFOVEON,
+       OMAP3ISP_CFAFMT_DNSPL,
+       OMAP3ISP_CFAFMT_HONEYCOMB,
+       OMAP3ISP_CFAFMT_RRGGBBFOVEON
+};
+
+/**
+ * struct omap3isp_prev_cfa - CFA Interpolation
+ * @format: CFA Format Enum value supported by preview.
+ * @gradthrs_vert: CFA Gradient Threshold - Vertical.
+ * @gradthrs_horz: CFA Gradient Threshold - Horizontal.
+ * @table: Pointer to the CFA table.
+ */
+struct omap3isp_prev_cfa {
+       enum omap3isp_cfa_fmt format;
+       __u8 gradthrs_vert;
+       __u8 gradthrs_horz;
+       __u32 table[4][OMAP3ISP_PREV_CFA_BLK_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_csup - Chrominance Suppression
+ * @gain: Gain.
+ * @thres: Threshold.
+ * @hypf_en: Flag to enable/disable the High Pass Filter.
+ */
+struct omap3isp_prev_csup {
+       __u8 gain;
+       __u8 thres;
+       __u8 hypf_en;
+};
+
+/**
+ * struct omap3isp_prev_wbal - White Balance
+ * @dgain: Digital gain (U10Q8).
+ * @coef3: White balance gain - COEF 3 (U8Q5).
+ * @coef2: White balance gain - COEF 2 (U8Q5).
+ * @coef1: White balance gain - COEF 1 (U8Q5).
+ * @coef0: White balance gain - COEF 0 (U8Q5).
+ */
+struct omap3isp_prev_wbal {
+       __u16 dgain;
+       __u8 coef3;
+       __u8 coef2;
+       __u8 coef1;
+       __u8 coef0;
+};
+
+/**
+ * struct omap3isp_prev_blkadj - Black Level Adjustment
+ * @red: Black level offset adjustment for Red in 2's complement format
+ * @green: Black level offset adjustment for Green in 2's complement format
+ * @blue: Black level offset adjustment for Blue in 2's complement format
+ */
+struct omap3isp_prev_blkadj {
+       /*Black level offset adjustment for Red in 2's complement format */
+       __u8 red;
+       /*Black level offset adjustment for Green in 2's complement format */
+       __u8 green;
+       /* Black level offset adjustment for Blue in 2's complement format */
+       __u8 blue;
+};
+
+/**
+ * struct omap3isp_prev_rgbtorgb - RGB to RGB Blending
+ * @matrix: Blending values(S12Q8 format)
+ *              [RR] [GR] [BR]
+ *              [RG] [GG] [BG]
+ *              [RB] [GB] [BB]
+ * @offset: Blending offset value for R,G,B in 2's complement integer format.
+ */
+struct omap3isp_prev_rgbtorgb {
+       __u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
+       __u16 offset[OMAP3ISP_RGB_MAX];
+};
+
+/**
+ * struct omap3isp_prev_csc - Color Space Conversion from RGB-YCbYCr
+ * @matrix: Color space conversion coefficients(S10Q8)
+ *              [CSCRY]  [CSCGY]  [CSCBY]
+ *              [CSCRCB] [CSCGCB] [CSCBCB]
+ *              [CSCRCR] [CSCGCR] [CSCBCR]
+ * @offset: CSC offset values for Y offset, CB offset and CR offset respectively
+ */
+struct omap3isp_prev_csc {
+       __u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
+       __s16 offset[OMAP3ISP_RGB_MAX];
+};
+
+/**
+ * struct omap3isp_prev_yclimit - Y, C Value Limit
+ * @minC: Minimum C value
+ * @maxC: Maximum C value
+ * @minY: Minimum Y value
+ * @maxY: Maximum Y value
+ */
+struct omap3isp_prev_yclimit {
+       __u8 minC;
+       __u8 maxC;
+       __u8 minY;
+       __u8 maxY;
+};
+
+/**
+ * struct omap3isp_prev_dcor - Defect correction
+ * @couplet_mode_en: Flag to enable or disable the couplet dc Correction in NF
+ * @detect_correct: Thresholds for correction bit 0:10 detect 16:25 correct
+ */
+struct omap3isp_prev_dcor {
+       __u8 couplet_mode_en;
+       __u32 detect_correct[OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS];
+};
+
+/**
+ * struct omap3isp_prev_nf - Noise Filter
+ * @spread: Spread value to be used in Noise Filter
+ * @table: Pointer to the Noise Filter table
+ */
+struct omap3isp_prev_nf {
+       __u8 spread;
+       __u32 table[OMAP3ISP_PREV_NF_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_gtables - Gamma correction tables
+ * @red: Array for red gamma table.
+ * @green: Array for green gamma table.
+ * @blue: Array for blue gamma table.
+ */
+struct omap3isp_prev_gtables {
+       __u32 red[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+       __u32 green[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+       __u32 blue[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_luma - Luma enhancement
+ * @table: Array for luma enhancement table.
+ */
+struct omap3isp_prev_luma {
+       __u32 table[OMAP3ISP_PREV_YENH_TBL_SIZE];
+};
+
+/**
+ * struct omap3isp_prev_update_config - Preview engine configuration (user)
+ * @update: Specifies which ISP Preview registers should be updated.
+ * @flag: Specifies which ISP Preview functions should be enabled.
+ * @shading_shift: 3bit value of shift used in shading compensation.
+ * @luma: Pointer to luma enhancement structure.
+ * @hmed: Pointer to structure containing the odd and even distance.
+ *        between the pixels in the image along with the filter threshold.
+ * @cfa: Pointer to structure containing the CFA interpolation table, CFA.
+ *       format in the image, vertical and horizontal gradient threshold.
+ * @csup: Pointer to Structure for Chrominance Suppression coefficients.
+ * @wbal: Pointer to structure for White Balance.
+ * @blkadj: Pointer to structure for Black Adjustment.
+ * @rgb2rgb: Pointer to structure for RGB to RGB Blending.
+ * @csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr.
+ * @yclimit: Pointer to structure for Y, C Value Limit.
+ * @dcor: Pointer to structure for defect correction.
+ * @nf: Pointer to structure for Noise Filter
+ * @gamma: Pointer to gamma structure.
+ */
+struct omap3isp_prev_update_config {
+       __u32 update;
+       __u32 flag;
+       __u32 shading_shift;
+       struct omap3isp_prev_luma *luma;
+       struct omap3isp_prev_hmed *hmed;
+       struct omap3isp_prev_cfa *cfa;
+       struct omap3isp_prev_csup *csup;
+       struct omap3isp_prev_wbal *wbal;
+       struct omap3isp_prev_blkadj *blkadj;
+       struct omap3isp_prev_rgbtorgb *rgb2rgb;
+       struct omap3isp_prev_csc *csc;
+       struct omap3isp_prev_yclimit *yclimit;
+       struct omap3isp_prev_dcor *dcor;
+       struct omap3isp_prev_nf *nf;
+       struct omap3isp_prev_gtables *gamma;
+};
+
+#endif /* OMAP3_ISP_USER_H */
diff --git a/lib/libdss-include/linux/omapfb.h b/lib/libdss-include/linux/omapfb.h
new file mode 100644 (file)
index 0000000..9563f61
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * File: include/linux/omapfb.h
+ *
+ * Framebuffer driver for TI OMAP boards
+ *
+ * Copyright (C) 2004 Nokia Corporation
+ * Author: Imre Deak <imre.deak@nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __LINUX_OMAPFB_H__
+#define __LINUX_OMAPFB_H__
+
+#include <linux/fb.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* IOCTL commands. */
+
+#define OMAP_IOW(num, dtype)   _IOW('O', num, dtype)
+#define OMAP_IOR(num, dtype)   _IOR('O', num, dtype)
+#define OMAP_IOWR(num, dtype)  _IOWR('O', num, dtype)
+#define OMAP_IO(num)           _IO('O', num)
+
+#define OMAPFB_MIRROR          OMAP_IOW(31, int)
+#define OMAPFB_SYNC_GFX                OMAP_IO(37)
+#define OMAPFB_VSYNC           OMAP_IO(38)
+#define OMAPFB_SET_UPDATE_MODE OMAP_IOW(40, int)
+#define OMAPFB_GET_CAPS                OMAP_IOR(42, struct omapfb_caps)
+#define OMAPFB_GET_UPDATE_MODE OMAP_IOW(43, int)
+#define OMAPFB_LCD_TEST                OMAP_IOW(45, int)
+#define OMAPFB_CTRL_TEST       OMAP_IOW(46, int)
+#define OMAPFB_UPDATE_WINDOW_OLD OMAP_IOW(47, struct omapfb_update_window_old)
+#define OMAPFB_SET_COLOR_KEY   OMAP_IOW(50, struct omapfb_color_key)
+#define OMAPFB_GET_COLOR_KEY   OMAP_IOW(51, struct omapfb_color_key)
+#define OMAPFB_SETUP_PLANE     OMAP_IOW(52, struct omapfb_plane_info)
+#define OMAPFB_QUERY_PLANE     OMAP_IOW(53, struct omapfb_plane_info)
+#define OMAPFB_UPDATE_WINDOW   OMAP_IOW(54, struct omapfb_update_window)
+#define OMAPFB_SETUP_MEM       OMAP_IOW(55, struct omapfb_mem_info)
+#define OMAPFB_QUERY_MEM       OMAP_IOW(56, struct omapfb_mem_info)
+#define OMAPFB_WAITFORVSYNC    OMAP_IO(57)
+#define OMAPFB_MEMORY_READ     OMAP_IOR(58, struct omapfb_memory_read)
+#define OMAPFB_GET_OVERLAY_COLORMODE OMAP_IOR(59, struct omapfb_ovl_colormode)
+#define OMAPFB_WAITFORGO       OMAP_IO(60)
+#define OMAPFB_GET_VRAM_INFO   OMAP_IOR(61, struct omapfb_vram_info)
+#define OMAPFB_SET_TEARSYNC    OMAP_IOW(62, struct omapfb_tearsync_info)
+#define OMAPFB_GET_DISPLAY_INFO        OMAP_IOR(63, struct omapfb_display_info)
+
+#define OMAPFB_CAPS_GENERIC_MASK       0x00000fff
+#define OMAPFB_CAPS_LCDC_MASK          0x00fff000
+#define OMAPFB_CAPS_PANEL_MASK         0xff000000
+
+#define OMAPFB_CAPS_MANUAL_UPDATE      0x00001000
+#define OMAPFB_CAPS_TEARSYNC           0x00002000
+#define OMAPFB_CAPS_PLANE_RELOCATE_MEM 0x00004000
+#define OMAPFB_CAPS_PLANE_SCALE                0x00008000
+#define OMAPFB_CAPS_WINDOW_PIXEL_DOUBLE        0x00010000
+#define OMAPFB_CAPS_WINDOW_SCALE       0x00020000
+#define OMAPFB_CAPS_WINDOW_OVERLAY     0x00040000
+#define OMAPFB_CAPS_WINDOW_ROTATE      0x00080000
+#define OMAPFB_CAPS_SET_BACKLIGHT      0x01000000
+
+/* Values from DSP must map to lower 16-bits */
+#define OMAPFB_FORMAT_MASK             0x00ff
+#define OMAPFB_FORMAT_FLAG_DOUBLE      0x0100
+#define OMAPFB_FORMAT_FLAG_TEARSYNC    0x0200
+#define OMAPFB_FORMAT_FLAG_FORCE_VSYNC 0x0400
+#define OMAPFB_FORMAT_FLAG_ENABLE_OVERLAY      0x0800
+#define OMAPFB_FORMAT_FLAG_DISABLE_OVERLAY     0x1000
+
+#define OMAPFB_MEMTYPE_SDRAM           0
+#define OMAPFB_MEMTYPE_SRAM            1
+#define OMAPFB_MEMTYPE_MAX             1
+
+#define OMAPFB_MEM_IDX_ENABLED 0x80
+#define OMAPFB_MEM_IDX_MASK    0x7f
+
+enum omapfb_color_format {
+       OMAPFB_COLOR_RGB565 = 0,
+       OMAPFB_COLOR_YUV422,
+       OMAPFB_COLOR_YUV420,
+       OMAPFB_COLOR_CLUT_8BPP,
+       OMAPFB_COLOR_CLUT_4BPP,
+       OMAPFB_COLOR_CLUT_2BPP,
+       OMAPFB_COLOR_CLUT_1BPP,
+       OMAPFB_COLOR_RGB444,
+       OMAPFB_COLOR_YUY422,
+
+       OMAPFB_COLOR_ARGB16,
+       OMAPFB_COLOR_RGB24U,    /* RGB24, 32-bit container */
+       OMAPFB_COLOR_RGB24P,    /* RGB24, 24-bit container */
+       OMAPFB_COLOR_ARGB32,
+       OMAPFB_COLOR_RGBA32,
+       OMAPFB_COLOR_RGBX32,
+};
+
+struct omapfb_update_window {
+       __u32 x, y;
+       __u32 width, height;
+       __u32 format;
+       __u32 out_x, out_y;
+       __u32 out_width, out_height;
+       __u32 reserved[8];
+};
+
+struct omapfb_update_window_old {
+       __u32 x, y;
+       __u32 width, height;
+       __u32 format;
+};
+
+enum omapfb_plane {
+       OMAPFB_PLANE_GFX = 0,
+       OMAPFB_PLANE_VID1,
+       OMAPFB_PLANE_VID2,
+};
+
+enum omapfb_channel_out {
+       OMAPFB_CHANNEL_OUT_LCD = 0,
+       OMAPFB_CHANNEL_OUT_DIGIT,
+};
+
+struct omapfb_plane_info {
+       __u32 pos_x;
+       __u32 pos_y;
+       __u8  enabled;
+       __u8  channel_out;
+       __u8  mirror;
+       __u8  mem_idx;
+       __u32 out_width;
+       __u32 out_height;
+       __u32 reserved2[12];
+};
+
+struct omapfb_mem_info {
+       __u32 size;
+       __u8  type;
+       __u8  reserved[3];
+};
+
+struct omapfb_caps {
+       __u32 ctrl;
+       __u32 plane_color;
+       __u32 wnd_color;
+};
+
+enum omapfb_color_key_type {
+       OMAPFB_COLOR_KEY_DISABLED = 0,
+       OMAPFB_COLOR_KEY_GFX_DST,
+       OMAPFB_COLOR_KEY_VID_SRC,
+};
+
+struct omapfb_color_key {
+       __u8  channel_out;
+       __u32 background;
+       __u32 trans_key;
+       __u8  key_type;
+};
+
+enum omapfb_update_mode {
+       OMAPFB_UPDATE_DISABLED = 0,
+       OMAPFB_AUTO_UPDATE,
+       OMAPFB_MANUAL_UPDATE
+};
+
+struct omapfb_memory_read {
+       __u16 x;
+       __u16 y;
+       __u16 w;
+       __u16 h;
+       size_t buffer_size;
+       void *buffer;
+};
+
+struct omapfb_ovl_colormode {
+       __u8 overlay_idx;
+       __u8 mode_idx;
+       __u32 bits_per_pixel;
+       __u32 nonstd;
+       struct fb_bitfield red;
+       struct fb_bitfield green;
+       struct fb_bitfield blue;
+       struct fb_bitfield transp;
+};
+
+struct omapfb_vram_info {
+       __u32 total;
+       __u32 free;
+       __u32 largest_free_block;
+       __u32 reserved[5];
+};
+
+struct omapfb_tearsync_info {
+       __u8 enabled;
+       __u8 reserved1[3];
+       __u16 line;
+       __u16 reserved2;
+};
+
+struct omapfb_display_info {
+       __u16 xres;
+       __u16 yres;
+       __u32 width;    /* phys width of the display in micrometers */
+       __u32 height;   /* phys height of the display in micrometers */
+       __u32 reserved[5];
+};
+
+
+#endif /* __LINUX_OMAPFB_H__ */
diff --git a/lib/libdss-include/linux/oom.h b/lib/libdss-include/linux/oom.h
new file mode 100644 (file)
index 0000000..ca6c46e
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef __INCLUDE_LINUX_OOM_H
+#define __INCLUDE_LINUX_OOM_H
+
+/*
+ * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for
+ * pid.
+ */
+#define OOM_SCORE_ADJ_MIN      (-1000)
+#define OOM_SCORE_ADJ_MAX      1000
+
+/*
+ * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy
+ * purposes.
+ */
+#define OOM_DISABLE (-17)
+/* inclusive */
+#define OOM_ADJUST_MIN (-16)
+#define OOM_ADJUST_MAX 15
+
+#endif /* __INCLUDE_LINUX_OOM_H */
diff --git a/lib/libdss-include/linux/openvswitch.h b/lib/libdss-include/linux/openvswitch.h
new file mode 100644 (file)
index 0000000..ede106e
--- /dev/null
@@ -0,0 +1,711 @@
+
+/*
+ * Copyright (c) 2007-2013 Nicira, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifndef __LINUX_OPENVSWITCH_H
+#define __LINUX_OPENVSWITCH_H 1
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/**
+ * struct ovs_header - header for OVS Generic Netlink messages.
+ * @dp_ifindex: ifindex of local port for datapath (0 to make a request not
+ * specific to a datapath).
+ *
+ * Attributes following the header are specific to a particular OVS Generic
+ * Netlink family, but all of the OVS families use this header.
+ */
+
+struct ovs_header {
+       int dp_ifindex;
+};
+
+/* Datapaths. */
+
+#define OVS_DATAPATH_FAMILY  "ovs_datapath"
+#define OVS_DATAPATH_MCGROUP "ovs_datapath"
+
+/* V2:
+ *   - API users are expected to provide OVS_DP_ATTR_USER_FEATURES
+ *     when creating the datapath.
+ */
+#define OVS_DATAPATH_VERSION 2
+
+/* First OVS datapath version to support features */
+#define OVS_DP_VER_FEATURES 2
+
+enum ovs_datapath_cmd {
+       OVS_DP_CMD_UNSPEC,
+       OVS_DP_CMD_NEW,
+       OVS_DP_CMD_DEL,
+       OVS_DP_CMD_GET,
+       OVS_DP_CMD_SET
+};
+
+/**
+ * enum ovs_datapath_attr - attributes for %OVS_DP_* commands.
+ * @OVS_DP_ATTR_NAME: Name of the network device that serves as the "local
+ * port".  This is the name of the network device whose dp_ifindex is given in
+ * the &struct ovs_header.  Always present in notifications.  Required in
+ * %OVS_DP_NEW requests.  May be used as an alternative to specifying
+ * dp_ifindex in other requests (with a dp_ifindex of 0).
+ * @OVS_DP_ATTR_UPCALL_PID: The Netlink socket in userspace that is initially
+ * set on the datapath port (for OVS_ACTION_ATTR_MISS).  Only valid on
+ * %OVS_DP_CMD_NEW requests. A value of zero indicates that upcalls should
+ * not be sent.
+ * @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the
+ * datapath.  Always present in notifications.
+ * @OVS_DP_ATTR_MEGAFLOW_STATS: Statistics about mega flow masks usage for the
+ * datapath. Always present in notifications.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_DP_* commands.
+ */
+enum ovs_datapath_attr {
+       OVS_DP_ATTR_UNSPEC,
+       OVS_DP_ATTR_NAME,               /* name of dp_ifindex netdev */
+       OVS_DP_ATTR_UPCALL_PID,         /* Netlink PID to receive upcalls */
+       OVS_DP_ATTR_STATS,              /* struct ovs_dp_stats */
+       OVS_DP_ATTR_MEGAFLOW_STATS,     /* struct ovs_dp_megaflow_stats */
+       OVS_DP_ATTR_USER_FEATURES,      /* OVS_DP_F_*  */
+       __OVS_DP_ATTR_MAX
+};
+
+#define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1)
+
+struct ovs_dp_stats {
+       __u64 n_hit;             /* Number of flow table matches. */
+       __u64 n_missed;          /* Number of flow table misses. */
+       __u64 n_lost;            /* Number of misses not sent to userspace. */
+       __u64 n_flows;           /* Number of flows present */
+};
+
+struct ovs_dp_megaflow_stats {
+       __u64 n_mask_hit;        /* Number of masks used for flow lookups. */
+       __u32 n_masks;           /* Number of masks for the datapath. */
+       __u32 pad0;              /* Pad for future expension. */
+       __u64 pad1;              /* Pad for future expension. */
+       __u64 pad2;              /* Pad for future expension. */
+};
+
+struct ovs_vport_stats {
+       __u64   rx_packets;             /* total packets received       */
+       __u64   tx_packets;             /* total packets transmitted    */
+       __u64   rx_bytes;               /* total bytes received         */
+       __u64   tx_bytes;               /* total bytes transmitted      */
+       __u64   rx_errors;              /* bad packets received         */
+       __u64   tx_errors;              /* packet transmit problems     */
+       __u64   rx_dropped;             /* no space in linux buffers    */
+       __u64   tx_dropped;             /* no space available in linux  */
+};
+
+/* Allow last Netlink attribute to be unaligned */
+#define OVS_DP_F_UNALIGNED     (1 << 0)
+
+/* Allow datapath to associate multiple Netlink PIDs to each vport */
+#define OVS_DP_F_VPORT_PIDS    (1 << 1)
+
+/* Fixed logical ports. */
+#define OVSP_LOCAL      ((__u32)0)
+
+/* Packet transfer. */
+
+#define OVS_PACKET_FAMILY "ovs_packet"
+#define OVS_PACKET_VERSION 0x1
+
+enum ovs_packet_cmd {
+       OVS_PACKET_CMD_UNSPEC,
+
+       /* Kernel-to-user notifications. */
+       OVS_PACKET_CMD_MISS,    /* Flow table miss. */
+       OVS_PACKET_CMD_ACTION,  /* OVS_ACTION_ATTR_USERSPACE action. */
+
+       /* Userspace commands. */
+       OVS_PACKET_CMD_EXECUTE  /* Apply actions to a packet. */
+};
+
+/**
+ * enum ovs_packet_attr - attributes for %OVS_PACKET_* commands.
+ * @OVS_PACKET_ATTR_PACKET: Present for all notifications.  Contains the entire
+ * packet as received, from the start of the Ethernet header onward.  For
+ * %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PACKET reflects changes made by
+ * actions preceding %OVS_ACTION_ATTR_USERSPACE, but %OVS_PACKET_ATTR_KEY is
+ * the flow key extracted from the packet as originally received.
+ * @OVS_PACKET_ATTR_KEY: Present for all notifications.  Contains the flow key
+ * extracted from the packet as nested %OVS_KEY_ATTR_* attributes.  This allows
+ * userspace to adapt its flow setup strategy by comparing its notion of the
+ * flow key against the kernel's.
+ * @OVS_PACKET_ATTR_ACTIONS: Contains actions for the packet.  Used
+ * for %OVS_PACKET_CMD_EXECUTE.  It has nested %OVS_ACTION_ATTR_* attributes.
+ * Also used in upcall when %OVS_ACTION_ATTR_USERSPACE has optional
+ * %OVS_USERSPACE_ATTR_ACTIONS attribute.
+ * @OVS_PACKET_ATTR_USERDATA: Present for an %OVS_PACKET_CMD_ACTION
+ * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
+ * %OVS_USERSPACE_ATTR_USERDATA attribute, with the same length and content
+ * specified there.
+ * @OVS_PACKET_ATTR_EGRESS_TUN_KEY: Present for an %OVS_PACKET_CMD_ACTION
+ * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
+ * %OVS_USERSPACE_ATTR_EGRESS_TUN_PORT attribute, which is sent only if the
+ * output port is actually a tunnel port. Contains the output tunnel key
+ * extracted from the packet as nested %OVS_TUNNEL_KEY_ATTR_* attributes.
+ * @OVS_PACKET_ATTR_MRU: Present for an %OVS_PACKET_CMD_ACTION and
+ * %OVS_PACKET_ATTR_USERSPACE action specify the Maximum received fragment
+ * size.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_PACKET_* commands.
+ */
+enum ovs_packet_attr {
+       OVS_PACKET_ATTR_UNSPEC,
+       OVS_PACKET_ATTR_PACKET,      /* Packet data. */
+       OVS_PACKET_ATTR_KEY,         /* Nested OVS_KEY_ATTR_* attributes. */
+       OVS_PACKET_ATTR_ACTIONS,     /* Nested OVS_ACTION_ATTR_* attributes. */
+       OVS_PACKET_ATTR_USERDATA,    /* OVS_ACTION_ATTR_USERSPACE arg. */
+       OVS_PACKET_ATTR_EGRESS_TUN_KEY,  /* Nested OVS_TUNNEL_KEY_ATTR_*
+                                           attributes. */
+       OVS_PACKET_ATTR_UNUSED1,
+       OVS_PACKET_ATTR_UNUSED2,
+       OVS_PACKET_ATTR_PROBE,      /* Packet operation is a feature probe,
+                                      error logging should be suppressed. */
+       OVS_PACKET_ATTR_MRU,        /* Maximum received IP fragment size. */
+       __OVS_PACKET_ATTR_MAX
+};
+
+#define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR_MAX - 1)
+
+/* Virtual ports. */
+
+#define OVS_VPORT_FAMILY  "ovs_vport"
+#define OVS_VPORT_MCGROUP "ovs_vport"
+#define OVS_VPORT_VERSION 0x1
+
+enum ovs_vport_cmd {
+       OVS_VPORT_CMD_UNSPEC,
+       OVS_VPORT_CMD_NEW,
+       OVS_VPORT_CMD_DEL,
+       OVS_VPORT_CMD_GET,
+       OVS_VPORT_CMD_SET
+};
+
+enum ovs_vport_type {
+       OVS_VPORT_TYPE_UNSPEC,
+       OVS_VPORT_TYPE_NETDEV,   /* network device */
+       OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */
+       OVS_VPORT_TYPE_GRE,      /* GRE tunnel. */
+       OVS_VPORT_TYPE_VXLAN,    /* VXLAN tunnel. */
+       OVS_VPORT_TYPE_GENEVE,   /* Geneve tunnel. */
+       __OVS_VPORT_TYPE_MAX
+};
+
+#define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_MAX - 1)
+
+/**
+ * enum ovs_vport_attr - attributes for %OVS_VPORT_* commands.
+ * @OVS_VPORT_ATTR_PORT_NO: 32-bit port number within datapath.
+ * @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYPE_* constant describing the type
+ * of vport.
+ * @OVS_VPORT_ATTR_NAME: Name of vport.  For a vport based on a network device
+ * this is the name of the network device.  Maximum length %IFNAMSIZ-1 bytes
+ * plus a null terminator.
+ * @OVS_VPORT_ATTR_OPTIONS: Vport-specific configuration information.
+ * @OVS_VPORT_ATTR_UPCALL_PID: The array of Netlink socket pids in userspace
+ * among which OVS_PACKET_CMD_MISS upcalls will be distributed for packets
+ * received on this port.  If this is a single-element array of value 0,
+ * upcalls should not be sent.
+ * @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_stats giving statistics for
+ * packets sent or received through the vport.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_VPORT_* commands.
+ *
+ * For %OVS_VPORT_CMD_NEW requests, the %OVS_VPORT_ATTR_TYPE and
+ * %OVS_VPORT_ATTR_NAME attributes are required.  %OVS_VPORT_ATTR_PORT_NO is
+ * optional; if not specified a free port number is automatically selected.
+ * Whether %OVS_VPORT_ATTR_OPTIONS is required or optional depends on the type
+ * of vport.
+ *
+ * For other requests, if %OVS_VPORT_ATTR_NAME is specified then it is used to
+ * look up the vport to operate on; otherwise dp_idx from the &struct
+ * ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport.
+ */
+enum ovs_vport_attr {
+       OVS_VPORT_ATTR_UNSPEC,
+       OVS_VPORT_ATTR_PORT_NO, /* u32 port number within datapath */
+       OVS_VPORT_ATTR_TYPE,    /* u32 OVS_VPORT_TYPE_* constant. */
+       OVS_VPORT_ATTR_NAME,    /* string name, up to IFNAMSIZ bytes long */
+       OVS_VPORT_ATTR_OPTIONS, /* nested attributes, varies by vport type */
+       OVS_VPORT_ATTR_UPCALL_PID, /* array of u32 Netlink socket PIDs for */
+                               /* receiving upcalls */
+       OVS_VPORT_ATTR_STATS,   /* struct ovs_vport_stats */
+       __OVS_VPORT_ATTR_MAX
+};
+
+#define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1)
+
+enum {
+       OVS_VXLAN_EXT_UNSPEC,
+       OVS_VXLAN_EXT_GBP,      /* Flag or __u32 */
+       __OVS_VXLAN_EXT_MAX,
+};
+
+#define OVS_VXLAN_EXT_MAX (__OVS_VXLAN_EXT_MAX - 1)
+
+
+/* OVS_VPORT_ATTR_OPTIONS attributes for tunnels.
+ */
+enum {
+       OVS_TUNNEL_ATTR_UNSPEC,
+       OVS_TUNNEL_ATTR_DST_PORT, /* 16-bit UDP port, used by L4 tunnels. */
+       OVS_TUNNEL_ATTR_EXTENSION,
+       __OVS_TUNNEL_ATTR_MAX
+};
+
+#define OVS_TUNNEL_ATTR_MAX (__OVS_TUNNEL_ATTR_MAX - 1)
+
+/* Flows. */
+
+#define OVS_FLOW_FAMILY  "ovs_flow"
+#define OVS_FLOW_MCGROUP "ovs_flow"
+#define OVS_FLOW_VERSION 0x1
+
+enum ovs_flow_cmd {
+       OVS_FLOW_CMD_UNSPEC,
+       OVS_FLOW_CMD_NEW,
+       OVS_FLOW_CMD_DEL,
+       OVS_FLOW_CMD_GET,
+       OVS_FLOW_CMD_SET
+};
+
+struct ovs_flow_stats {
+       __u64 n_packets;         /* Number of matched packets. */
+       __u64 n_bytes;           /* Number of matched bytes. */
+};
+
+enum ovs_key_attr {
+       OVS_KEY_ATTR_UNSPEC,
+       OVS_KEY_ATTR_ENCAP,     /* Nested set of encapsulated attributes. */
+       OVS_KEY_ATTR_PRIORITY,  /* u32 skb->priority */
+       OVS_KEY_ATTR_IN_PORT,   /* u32 OVS dp port number */
+       OVS_KEY_ATTR_ETHERNET,  /* struct ovs_key_ethernet */
+       OVS_KEY_ATTR_VLAN,      /* be16 VLAN TCI */
+       OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethernet type */
+       OVS_KEY_ATTR_IPV4,      /* struct ovs_key_ipv4 */
+       OVS_KEY_ATTR_IPV6,      /* struct ovs_key_ipv6 */
+       OVS_KEY_ATTR_TCP,       /* struct ovs_key_tcp */
+       OVS_KEY_ATTR_UDP,       /* struct ovs_key_udp */
+       OVS_KEY_ATTR_ICMP,      /* struct ovs_key_icmp */
+       OVS_KEY_ATTR_ICMPV6,    /* struct ovs_key_icmpv6 */
+       OVS_KEY_ATTR_ARP,       /* struct ovs_key_arp */
+       OVS_KEY_ATTR_ND,        /* struct ovs_key_nd */
+       OVS_KEY_ATTR_SKB_MARK,  /* u32 skb mark */
+       OVS_KEY_ATTR_TUNNEL,    /* Nested set of ovs_tunnel attributes */
+       OVS_KEY_ATTR_SCTP,      /* struct ovs_key_sctp */
+       OVS_KEY_ATTR_TCP_FLAGS, /* be16 TCP flags. */
+       OVS_KEY_ATTR_DP_HASH,      /* u32 hash value. Value 0 indicates the hash
+                                  is not computed by the datapath. */
+       OVS_KEY_ATTR_RECIRC_ID, /* u32 recirc id */
+       OVS_KEY_ATTR_MPLS,      /* array of struct ovs_key_mpls.
+                                * The implementation may restrict
+                                * the accepted length of the array. */
+       OVS_KEY_ATTR_CT_STATE,  /* u32 bitmask of OVS_CS_F_* */
+       OVS_KEY_ATTR_CT_ZONE,   /* u16 connection tracking zone. */
+       OVS_KEY_ATTR_CT_MARK,   /* u32 connection tracking mark */
+       OVS_KEY_ATTR_CT_LABELS, /* 16-octet connection tracking label */
+
+       __OVS_KEY_ATTR_MAX
+};
+
+#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
+
+enum ovs_tunnel_key_attr {
+       OVS_TUNNEL_KEY_ATTR_ID,                 /* be64 Tunnel ID */
+       OVS_TUNNEL_KEY_ATTR_IPV4_SRC,           /* be32 src IP address. */
+       OVS_TUNNEL_KEY_ATTR_IPV4_DST,           /* be32 dst IP address. */
+       OVS_TUNNEL_KEY_ATTR_TOS,                /* u8 Tunnel IP ToS. */
+       OVS_TUNNEL_KEY_ATTR_TTL,                /* u8 Tunnel IP TTL. */
+       OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT,      /* No argument, set DF. */
+       OVS_TUNNEL_KEY_ATTR_CSUM,               /* No argument. CSUM packet. */
+       OVS_TUNNEL_KEY_ATTR_OAM,                /* No argument. OAM frame.  */
+       OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS,        /* Array of Geneve options. */
+       OVS_TUNNEL_KEY_ATTR_TP_SRC,             /* be16 src Transport Port. */
+       OVS_TUNNEL_KEY_ATTR_TP_DST,             /* be16 dst Transport Port. */
+       OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS,         /* Nested OVS_VXLAN_EXT_* */
+       OVS_TUNNEL_KEY_ATTR_IPV6_SRC,           /* struct in6_addr src IPv6 address. */
+       OVS_TUNNEL_KEY_ATTR_IPV6_DST,           /* struct in6_addr dst IPv6 address. */
+       __OVS_TUNNEL_KEY_ATTR_MAX
+};
+
+#define OVS_TUNNEL_KEY_ATTR_MAX (__OVS_TUNNEL_KEY_ATTR_MAX - 1)
+
+/**
+ * enum ovs_frag_type - IPv4 and IPv6 fragment type
+ * @OVS_FRAG_TYPE_NONE: Packet is not a fragment.
+ * @OVS_FRAG_TYPE_FIRST: Packet is a fragment with offset 0.
+ * @OVS_FRAG_TYPE_LATER: Packet is a fragment with nonzero offset.
+ *
+ * Used as the @ipv4_frag in &struct ovs_key_ipv4 and as @ipv6_frag &struct
+ * ovs_key_ipv6.
+ */
+enum ovs_frag_type {
+       OVS_FRAG_TYPE_NONE,
+       OVS_FRAG_TYPE_FIRST,
+       OVS_FRAG_TYPE_LATER,
+       __OVS_FRAG_TYPE_MAX
+};
+
+#define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1)
+
+struct ovs_key_ethernet {
+       __u8     eth_src[ETH_ALEN];
+       __u8     eth_dst[ETH_ALEN];
+};
+
+struct ovs_key_mpls {
+       __be32 mpls_lse;
+};
+
+struct ovs_key_ipv4 {
+       __be32 ipv4_src;
+       __be32 ipv4_dst;
+       __u8   ipv4_proto;
+       __u8   ipv4_tos;
+       __u8   ipv4_ttl;
+       __u8   ipv4_frag;       /* One of OVS_FRAG_TYPE_*. */
+};
+
+struct ovs_key_ipv6 {
+       __be32 ipv6_src[4];
+       __be32 ipv6_dst[4];
+       __be32 ipv6_label;      /* 20-bits in least-significant bits. */
+       __u8   ipv6_proto;
+       __u8   ipv6_tclass;
+       __u8   ipv6_hlimit;
+       __u8   ipv6_frag;       /* One of OVS_FRAG_TYPE_*. */
+};
+
+struct ovs_key_tcp {
+       __be16 tcp_src;
+       __be16 tcp_dst;
+};
+
+struct ovs_key_udp {
+       __be16 udp_src;
+       __be16 udp_dst;
+};
+
+struct ovs_key_sctp {
+       __be16 sctp_src;
+       __be16 sctp_dst;
+};
+
+struct ovs_key_icmp {
+       __u8 icmp_type;
+       __u8 icmp_code;
+};
+
+struct ovs_key_icmpv6 {
+       __u8 icmpv6_type;
+       __u8 icmpv6_code;
+};
+
+struct ovs_key_arp {
+       __be32 arp_sip;
+       __be32 arp_tip;
+       __be16 arp_op;
+       __u8   arp_sha[ETH_ALEN];
+       __u8   arp_tha[ETH_ALEN];
+};
+
+struct ovs_key_nd {
+       __be32  nd_target[4];
+       __u8    nd_sll[ETH_ALEN];
+       __u8    nd_tll[ETH_ALEN];
+};
+
+#define OVS_CT_LABELS_LEN      16
+struct ovs_key_ct_labels {
+       __u8    ct_labels[OVS_CT_LABELS_LEN];
+};
+
+/* OVS_KEY_ATTR_CT_STATE flags */
+#define OVS_CS_F_NEW               0x01 /* Beginning of a new connection. */
+#define OVS_CS_F_ESTABLISHED       0x02 /* Part of an existing connection. */
+#define OVS_CS_F_RELATED           0x04 /* Related to an established
+                                        * connection. */
+#define OVS_CS_F_REPLY_DIR         0x08 /* Flow is in the reply direction. */
+#define OVS_CS_F_INVALID           0x10 /* Could not track connection. */
+#define OVS_CS_F_TRACKED           0x20 /* Conntrack has occurred. */
+
+/**
+ * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
+ * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
+ * key.  Always present in notifications.  Required for all requests (except
+ * dumps).
+ * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
+ * the actions to take for packets that match the key.  Always present in
+ * notifications.  Required for %OVS_FLOW_CMD_NEW requests, optional for
+ * %OVS_FLOW_CMD_SET requests.  An %OVS_FLOW_CMD_SET without
+ * %OVS_FLOW_ATTR_ACTIONS will not modify the actions.  To clear the actions,
+ * an %OVS_FLOW_ATTR_ACTIONS without any nested attributes must be given.
+ * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this
+ * flow.  Present in notifications if the stats would be nonzero.  Ignored in
+ * requests.
+ * @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value giving the OR'd value of all of the
+ * TCP flags seen on packets in this flow.  Only present in notifications for
+ * TCP flows, and only if it would be nonzero.  Ignored in requests.
+ * @OVS_FLOW_ATTR_USED: A 64-bit integer giving the time, in milliseconds on
+ * the system monotonic clock, at which a packet was last processed for this
+ * flow.  Only present in notifications if a packet has been processed for this
+ * flow.  Ignored in requests.
+ * @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_FLOW_CMD_SET request, clears the
+ * last-used time, accumulated TCP flags, and statistics for this flow.
+ * Otherwise ignored in requests.  Never present in notifications.
+ * @OVS_FLOW_ATTR_MASK: Nested %OVS_KEY_ATTR_* attributes specifying the
+ * mask bits for wildcarded flow match. Mask bit value '1' specifies exact
+ * match with corresponding flow key bit, while mask bit value '0' specifies
+ * a wildcarded match. Omitting attribute is treated as wildcarding all
+ * corresponding fields. Optional for all requests. If not present,
+ * all flow key bits are exact match bits.
+ * @OVS_FLOW_ATTR_UFID: A value between 1-16 octets specifying a unique
+ * identifier for the flow. Causes the flow to be indexed by this value rather
+ * than the value of the %OVS_FLOW_ATTR_KEY attribute. Optional for all
+ * requests. Present in notifications if the flow was created with this
+ * attribute.
+ * @OVS_FLOW_ATTR_UFID_FLAGS: A 32-bit value of OR'd %OVS_UFID_F_*
+ * flags that provide alternative semantics for flow installation and
+ * retrieval. Optional for all requests.
+ *
+ * These attributes follow the &struct ovs_header within the Generic Netlink
+ * payload for %OVS_FLOW_* commands.
+ */
+enum ovs_flow_attr {
+       OVS_FLOW_ATTR_UNSPEC,
+       OVS_FLOW_ATTR_KEY,       /* Sequence of OVS_KEY_ATTR_* attributes. */
+       OVS_FLOW_ATTR_ACTIONS,   /* Nested OVS_ACTION_ATTR_* attributes. */
+       OVS_FLOW_ATTR_STATS,     /* struct ovs_flow_stats. */
+       OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd TCP flags. */
+       OVS_FLOW_ATTR_USED,      /* u64 msecs last used in monotonic time. */
+       OVS_FLOW_ATTR_CLEAR,     /* Flag to clear stats, tcp_flags, used. */
+       OVS_FLOW_ATTR_MASK,      /* Sequence of OVS_KEY_ATTR_* attributes. */
+       OVS_FLOW_ATTR_PROBE,     /* Flow operation is a feature probe, error
+                                 * logging should be suppressed. */
+       OVS_FLOW_ATTR_UFID,      /* Variable length unique flow identifier. */
+       OVS_FLOW_ATTR_UFID_FLAGS,/* u32 of OVS_UFID_F_*. */
+       __OVS_FLOW_ATTR_MAX
+};
+
+#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
+
+/**
+ * Omit attributes for notifications.
+ *
+ * If a datapath request contains an %OVS_UFID_F_OMIT_* flag, then the datapath
+ * may omit the corresponding %OVS_FLOW_ATTR_* from the response.
+ */
+#define OVS_UFID_F_OMIT_KEY      (1 << 0)
+#define OVS_UFID_F_OMIT_MASK     (1 << 1)
+#define OVS_UFID_F_OMIT_ACTIONS  (1 << 2)
+
+/**
+ * enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
+ * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
+ * @OVS_ACTION_ATTR_SAMPLE.  A value of 0 samples no packets, a value of
+ * %UINT32_MAX samples all packets and intermediate values sample intermediate
+ * fractions of packets.
+ * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling event.
+ * Actions are passed as nested attributes.
+ *
+ * Executes the specified actions with the given probability on a per-packet
+ * basis.
+ */
+enum ovs_sample_attr {
+       OVS_SAMPLE_ATTR_UNSPEC,
+       OVS_SAMPLE_ATTR_PROBABILITY, /* u32 number */
+       OVS_SAMPLE_ATTR_ACTIONS,     /* Nested OVS_ACTION_ATTR_* attributes. */
+       __OVS_SAMPLE_ATTR_MAX,
+};
+
+#define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR_MAX - 1)
+
+/**
+ * enum ovs_userspace_attr - Attributes for %OVS_ACTION_ATTR_USERSPACE action.
+ * @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to which the %OVS_PACKET_CMD_ACTION
+ * message should be sent.  Required.
+ * @OVS_USERSPACE_ATTR_USERDATA: If present, its variable-length argument is
+ * copied to the %OVS_PACKET_CMD_ACTION message as %OVS_PACKET_ATTR_USERDATA.
+ * @OVS_USERSPACE_ATTR_EGRESS_TUN_PORT: If present, u32 output port to get
+ * tunnel info.
+ * @OVS_USERSPACE_ATTR_ACTIONS: If present, send actions with upcall.
+ */
+enum ovs_userspace_attr {
+       OVS_USERSPACE_ATTR_UNSPEC,
+       OVS_USERSPACE_ATTR_PID,       /* u32 Netlink PID to receive upcalls. */
+       OVS_USERSPACE_ATTR_USERDATA,  /* Optional user-specified cookie. */
+       OVS_USERSPACE_ATTR_EGRESS_TUN_PORT,  /* Optional, u32 output port
+                                             * to get tunnel info. */
+       OVS_USERSPACE_ATTR_ACTIONS,   /* Optional flag to get actions. */
+       __OVS_USERSPACE_ATTR_MAX
+};
+
+#define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPACE_ATTR_MAX - 1)
+
+/**
+ * struct ovs_action_push_mpls - %OVS_ACTION_ATTR_PUSH_MPLS action argument.
+ * @mpls_lse: MPLS label stack entry to push.
+ * @mpls_ethertype: Ethertype to set in the encapsulating ethernet frame.
+ *
+ * The only values @mpls_ethertype should ever be given are %ETH_P_MPLS_UC and
+ * %ETH_P_MPLS_MC, indicating MPLS unicast or multicast. Other are rejected.
+ */
+struct ovs_action_push_mpls {
+       __be32 mpls_lse;
+       __be16 mpls_ethertype; /* Either %ETH_P_MPLS_UC or %ETH_P_MPLS_MC */
+};
+
+/**
+ * struct ovs_action_push_vlan - %OVS_ACTION_ATTR_PUSH_VLAN action argument.
+ * @vlan_tpid: Tag protocol identifier (TPID) to push.
+ * @vlan_tci: Tag control identifier (TCI) to push.  The CFI bit must be set
+ * (but it will not be set in the 802.1Q header that is pushed).
+ *
+ * The @vlan_tpid value is typically %ETH_P_8021Q.  The only acceptable TPID
+ * values are those that the kernel module also parses as 802.1Q headers, to
+ * prevent %OVS_ACTION_ATTR_PUSH_VLAN followed by %OVS_ACTION_ATTR_POP_VLAN
+ * from having surprising results.
+ */
+struct ovs_action_push_vlan {
+       __be16 vlan_tpid;       /* 802.1Q TPID. */
+       __be16 vlan_tci;        /* 802.1Q TCI (VLAN ID and priority). */
+};
+
+/* Data path hash algorithm for computing Datapath hash.
+ *
+ * The algorithm type only specifies the fields in a flow
+ * will be used as part of the hash. Each datapath is free
+ * to use its own hash algorithm. The hash value will be
+ * opaque to the user space daemon.
+ */
+enum ovs_hash_alg {
+       OVS_HASH_ALG_L4,
+};
+
+/*
+ * struct ovs_action_hash - %OVS_ACTION_ATTR_HASH action argument.
+ * @hash_alg: Algorithm used to compute hash prior to recirculation.
+ * @hash_basis: basis used for computing hash.
+ */
+struct ovs_action_hash {
+       uint32_t  hash_alg;     /* One of ovs_hash_alg. */
+       uint32_t  hash_basis;
+};
+
+/**
+ * enum ovs_ct_attr - Attributes for %OVS_ACTION_ATTR_CT action.
+ * @OVS_CT_ATTR_COMMIT: If present, commits the connection to the conntrack
+ * table. This allows future packets for the same connection to be identified
+ * as 'established' or 'related'. The flow key for the current packet will
+ * retain the pre-commit connection state.
+ * @OVS_CT_ATTR_ZONE: u16 connection tracking zone.
+ * @OVS_CT_ATTR_MARK: u32 value followed by u32 mask. For each bit set in the
+ * mask, the corresponding bit in the value is copied to the connection
+ * tracking mark field in the connection.
+ * @OVS_CT_ATTR_LABELS: %OVS_CT_LABELS_LEN value followed by %OVS_CT_LABELS_LEN
+ * mask. For each bit set in the mask, the corresponding bit in the value is
+ * copied to the connection tracking label field in the connection.
+ * @OVS_CT_ATTR_HELPER: variable length string defining conntrack ALG.
+ */
+enum ovs_ct_attr {
+       OVS_CT_ATTR_UNSPEC,
+       OVS_CT_ATTR_COMMIT,     /* No argument, commits connection. */
+       OVS_CT_ATTR_ZONE,       /* u16 zone id. */
+       OVS_CT_ATTR_MARK,       /* mark to associate with this connection. */
+       OVS_CT_ATTR_LABELS,     /* labels to associate with this connection. */
+       OVS_CT_ATTR_HELPER,     /* netlink helper to assist detection of
+                                  related connections. */
+       __OVS_CT_ATTR_MAX
+};
+
+#define OVS_CT_ATTR_MAX (__OVS_CT_ATTR_MAX - 1)
+
+/**
+ * enum ovs_action_attr - Action types.
+ *
+ * @OVS_ACTION_ATTR_OUTPUT: Output packet to port.
+ * @OVS_ACTION_ATTR_USERSPACE: Send packet to userspace according to nested
+ * %OVS_USERSPACE_ATTR_* attributes.
+ * @OVS_ACTION_ATTR_SET: Replaces the contents of an existing header.  The
+ * single nested %OVS_KEY_ATTR_* attribute specifies a header to modify and its
+ * value.
+ * @OVS_ACTION_ATTR_SET_MASKED: Replaces the contents of an existing header.  A
+ * nested %OVS_KEY_ATTR_* attribute specifies a header to modify, its value,
+ * and a mask.  For every bit set in the mask, the corresponding bit value
+ * is copied from the value to the packet header field, rest of the bits are
+ * left unchanged.  The non-masked value bits must be passed in as zeroes.
+ * Masking is not supported for the %OVS_KEY_ATTR_TUNNEL attribute.
+ * @OVS_ACTION_ATTR_PUSH_VLAN: Push a new outermost 802.1Q header onto the
+ * packet.
+ * @OVS_ACTION_ATTR_POP_VLAN: Pop the outermost 802.1Q header off the packet.
+ * @OVS_ACTION_ATTR_SAMPLE: Probabilitically executes actions, as specified in
+ * the nested %OVS_SAMPLE_ATTR_* attributes.
+ * @OVS_ACTION_ATTR_PUSH_MPLS: Push a new MPLS label stack entry onto the
+ * top of the packets MPLS label stack.  Set the ethertype of the
+ * encapsulating frame to either %ETH_P_MPLS_UC or %ETH_P_MPLS_MC to
+ * indicate the new packet contents.
+ * @OVS_ACTION_ATTR_POP_MPLS: Pop an MPLS label stack entry off of the
+ * packet's MPLS label stack.  Set the encapsulating frame's ethertype to
+ * indicate the new packet contents. This could potentially still be
+ * %ETH_P_MPLS if the resulting MPLS label stack is not empty.  If there
+ * is no MPLS label stack, as determined by ethertype, no action is taken.
+ * @OVS_ACTION_ATTR_CT: Track the connection. Populate the conntrack-related
+ * entries in the flow key.
+ *
+ * Only a single header can be set with a single %OVS_ACTION_ATTR_SET.  Not all
+ * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
+ * type may not be changed.
+ *
+ * @OVS_ACTION_ATTR_SET_TO_MASKED: Kernel internal masked set action translated
+ * from the @OVS_ACTION_ATTR_SET.
+ */
+
+enum ovs_action_attr {
+       OVS_ACTION_ATTR_UNSPEC,
+       OVS_ACTION_ATTR_OUTPUT,       /* u32 port number. */
+       OVS_ACTION_ATTR_USERSPACE,    /* Nested OVS_USERSPACE_ATTR_*. */
+       OVS_ACTION_ATTR_SET,          /* One nested OVS_KEY_ATTR_*. */
+       OVS_ACTION_ATTR_PUSH_VLAN,    /* struct ovs_action_push_vlan. */
+       OVS_ACTION_ATTR_POP_VLAN,     /* No argument. */
+       OVS_ACTION_ATTR_SAMPLE,       /* Nested OVS_SAMPLE_ATTR_*. */
+       OVS_ACTION_ATTR_RECIRC,       /* u32 recirc_id. */
+       OVS_ACTION_ATTR_HASH,         /* struct ovs_action_hash. */
+       OVS_ACTION_ATTR_PUSH_MPLS,    /* struct ovs_action_push_mpls. */
+       OVS_ACTION_ATTR_POP_MPLS,     /* __be16 ethertype. */
+       OVS_ACTION_ATTR_SET_MASKED,   /* One nested OVS_KEY_ATTR_* including
+                                      * data immediately followed by a mask.
+                                      * The data must be zero for the unmasked
+                                      * bits. */
+       OVS_ACTION_ATTR_CT,           /* Nested OVS_CT_ATTR_* . */
+
+       __OVS_ACTION_ATTR_MAX,        /* Nothing past this will be accepted
+                                      * from userspace. */
+
+};
+
+#define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
+
+#endif /* _LINUX_OPENVSWITCH_H */
diff --git a/lib/libdss-include/linux/packet_diag.h b/lib/libdss-include/linux/packet_diag.h
new file mode 100644 (file)
index 0000000..d08c63f
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef __PACKET_DIAG_H__
+#define __PACKET_DIAG_H__
+
+#include <linux/types.h>
+
+struct packet_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   pdiag_ino;
+       __u32   pdiag_show;
+       __u32   pdiag_cookie[2];
+};
+
+#define PACKET_SHOW_INFO       0x00000001 /* Basic packet_sk information */
+#define PACKET_SHOW_MCLIST     0x00000002 /* A set of packet_diag_mclist-s */
+#define PACKET_SHOW_RING_CFG   0x00000004 /* Rings configuration parameters */
+#define PACKET_SHOW_FANOUT     0x00000008
+#define PACKET_SHOW_MEMINFO    0x00000010
+#define PACKET_SHOW_FILTER     0x00000020
+
+struct packet_diag_msg {
+       __u8    pdiag_family;
+       __u8    pdiag_type;
+       __u16   pdiag_num;
+
+       __u32   pdiag_ino;
+       __u32   pdiag_cookie[2];
+};
+
+enum {
+       /* PACKET_DIAG_NONE, standard nl API requires this attribute!  */
+       PACKET_DIAG_INFO,
+       PACKET_DIAG_MCLIST,
+       PACKET_DIAG_RX_RING,
+       PACKET_DIAG_TX_RING,
+       PACKET_DIAG_FANOUT,
+       PACKET_DIAG_UID,
+       PACKET_DIAG_MEMINFO,
+       PACKET_DIAG_FILTER,
+
+       __PACKET_DIAG_MAX,
+};
+
+#define PACKET_DIAG_MAX (__PACKET_DIAG_MAX - 1)
+
+struct packet_diag_info {
+       __u32   pdi_index;
+       __u32   pdi_version;
+       __u32   pdi_reserve;
+       __u32   pdi_copy_thresh;
+       __u32   pdi_tstamp;
+       __u32   pdi_flags;
+
+#define PDI_RUNNING    0x1
+#define PDI_AUXDATA    0x2
+#define PDI_ORIGDEV    0x4
+#define PDI_VNETHDR    0x8
+#define PDI_LOSS       0x10
+};
+
+struct packet_diag_mclist {
+       __u32   pdmc_index;
+       __u32   pdmc_count;
+       __u16   pdmc_type;
+       __u16   pdmc_alen;
+       __u8    pdmc_addr[MAX_ADDR_LEN];
+};
+
+struct packet_diag_ring {
+       __u32   pdr_block_size;
+       __u32   pdr_block_nr;
+       __u32   pdr_frame_size;
+       __u32   pdr_frame_nr;
+       __u32   pdr_retire_tmo;
+       __u32   pdr_sizeof_priv;
+       __u32   pdr_features;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/param.h b/lib/libdss-include/linux/param.h
new file mode 100644 (file)
index 0000000..092e92f
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _LINUX_PARAM_H
+#define _LINUX_PARAM_H
+
+#include <asm/param.h>
+
+#endif
diff --git a/lib/libdss-include/linux/parport.h b/lib/libdss-include/linux/parport.h
new file mode 100644 (file)
index 0000000..4cd4442
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Any part of this program may be used in documents licensed under
+ * the GNU Free Documentation License, Version 1.1 or any later version
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _PARPORT_H_
+#define _PARPORT_H_
+
+/* Start off with user-visible constants */
+
+/* Maximum of 16 ports per machine */
+#define PARPORT_MAX  16
+
+/* Magic numbers */
+#define PARPORT_IRQ_NONE  -1
+#define PARPORT_DMA_NONE  -1
+#define PARPORT_IRQ_AUTO  -2
+#define PARPORT_DMA_AUTO  -2
+#define PARPORT_DMA_NOFIFO -3
+#define PARPORT_DISABLE   -2
+#define PARPORT_IRQ_PROBEONLY -3
+#define PARPORT_IOHI_AUTO -1
+
+#define PARPORT_CONTROL_STROBE    0x1
+#define PARPORT_CONTROL_AUTOFD    0x2
+#define PARPORT_CONTROL_INIT      0x4
+#define PARPORT_CONTROL_SELECT    0x8
+
+#define PARPORT_STATUS_ERROR      0x8
+#define PARPORT_STATUS_SELECT     0x10
+#define PARPORT_STATUS_PAPEROUT   0x20
+#define PARPORT_STATUS_ACK        0x40
+#define PARPORT_STATUS_BUSY       0x80
+
+/* Type classes for Plug-and-Play probe.  */
+typedef enum {
+       PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */
+       PARPORT_CLASS_PRINTER,
+       PARPORT_CLASS_MODEM,
+       PARPORT_CLASS_NET,
+       PARPORT_CLASS_HDC,              /* Hard disk controller */
+       PARPORT_CLASS_PCMCIA,
+       PARPORT_CLASS_MEDIA,            /* Multimedia device */
+       PARPORT_CLASS_FDC,              /* Floppy disk controller */
+       PARPORT_CLASS_PORTS,
+       PARPORT_CLASS_SCANNER,
+       PARPORT_CLASS_DIGCAM,
+       PARPORT_CLASS_OTHER,            /* Anything else */
+       PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */
+       PARPORT_CLASS_SCSIADAPTER
+} parport_device_class;
+
+/* The "modes" entry in parport is a bit field representing the
+   capabilities of the hardware. */
+#define PARPORT_MODE_PCSPP     (1<<0) /* IBM PC registers available. */
+#define PARPORT_MODE_TRISTATE  (1<<1) /* Can tristate. */
+#define PARPORT_MODE_EPP       (1<<2) /* Hardware EPP. */
+#define PARPORT_MODE_ECP       (1<<3) /* Hardware ECP. */
+#define PARPORT_MODE_COMPAT    (1<<4) /* Hardware 'printer protocol'. */
+#define PARPORT_MODE_DMA       (1<<5) /* Hardware can DMA. */
+#define PARPORT_MODE_SAFEININT (1<<6) /* SPP registers accessible in IRQ. */
+
+/* IEEE1284 modes: 
+   Nibble mode, byte mode, ECP, ECPRLE and EPP are their own
+   'extensibility request' values.  Others are special.
+   'Real' ECP modes must have the IEEE1284_MODE_ECP bit set.  */
+#define IEEE1284_MODE_NIBBLE             0
+#define IEEE1284_MODE_BYTE              (1<<0)
+#define IEEE1284_MODE_COMPAT            (1<<8)
+#define IEEE1284_MODE_BECP              (1<<9) /* Bounded ECP mode */
+#define IEEE1284_MODE_ECP               (1<<4)
+#define IEEE1284_MODE_ECPRLE            (IEEE1284_MODE_ECP | (1<<5))
+#define IEEE1284_MODE_ECPSWE            (1<<10) /* Software-emulated */
+#define IEEE1284_MODE_EPP               (1<<6)
+#define IEEE1284_MODE_EPPSL             (1<<11) /* EPP 1.7 */
+#define IEEE1284_MODE_EPPSWE            (1<<12) /* Software-emulated */
+#define IEEE1284_DEVICEID               (1<<2)  /* This is a flag */
+#define IEEE1284_EXT_LINK               (1<<14) /* This flag causes the
+                                                * extensibility link to
+                                                * be requested, using
+                                                * bits 0-6. */
+
+/* For the benefit of parport_read/write, you can use these with
+ * parport_negotiate to use address operations.  They have no effect
+ * other than to make parport_read/write use address transfers. */
+#define IEEE1284_ADDR                  (1<<13) /* This is a flag */
+#define IEEE1284_DATA                   0      /* So is this */
+
+/* Flags for block transfer operations. */
+#define PARPORT_EPP_FAST               (1<<0) /* Unreliable counts. */
+#define PARPORT_W91284PIC              (1<<1) /* have a Warp9 w91284pic in the device */
+
+/* The rest is for the kernel only */
+#endif /* _PARPORT_H_ */
diff --git a/lib/libdss-include/linux/patchkey.h b/lib/libdss-include/linux/patchkey.h
new file mode 100644 (file)
index 0000000..bb28430
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * <linux/patchkey.h> -- definition of _PATCHKEY macro
+ *
+ * Copyright (C) 2005 Stuart Brady
+ *
+ * This exists because awe_voice.h defined its own _PATCHKEY and it wasn't
+ * clear whether removing this would break anything in userspace.
+ *
+ * Do not include this file directly.  Please use <sys/soundcard.h> instead.
+ * For kernel code, use <linux/soundcard.h>
+ */
+
+#ifndef _LINUX_PATCHKEY_H_INDIRECT
+#error "patchkey.h included directly"
+#endif
+
+#ifndef _LINUX_PATCHKEY_H
+#define _LINUX_PATCHKEY_H
+
+/* Endian macros. */
+#  include <endian.h>
+
+#if defined(__BYTE_ORDER)
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#    define _PATCHKEY(id) (0xfd00|id)
+#  elif __BYTE_ORDER == __LITTLE_ENDIAN
+#    define _PATCHKEY(id) ((id<<8)|0x00fd)
+#  else
+#    error "could not determine byte order"
+#  endif
+#endif
+
+#endif /* _LINUX_PATCHKEY_H */
diff --git a/lib/libdss-include/linux/pci.h b/lib/libdss-include/linux/pci.h
new file mode 100644 (file)
index 0000000..a5bb5c7
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *     pci.h
+ *
+ *     PCI defines and function prototypes
+ *     Copyright 1994, Drew Eckhardt
+ *     Copyright 1997--1999 Martin Mares <mj@ucw.cz>
+ *
+ *     For more information, please consult the following manuals (look at
+ *     http://www.pcisig.com/ for how to get them):
+ *
+ *     PCI BIOS Specification
+ *     PCI Local Bus Specification
+ *     PCI to PCI Bridge Specification
+ *     PCI System Design Guide
+ */
+
+#ifndef LINUX_PCI_H
+#define LINUX_PCI_H
+
+#include <linux/pci_regs.h>    /* The pci register defines */
+
+/*
+ * The PCI interface treats multi-function devices as independent
+ * devices.  The slot/function address of each device is encoded
+ * in a single byte as follows:
+ *
+ *     7:3 = slot
+ *     2:0 = function
+ */
+#define PCI_DEVFN(slot, func)  ((((slot) & 0x1f) << 3) | ((func) & 0x07))
+#define PCI_SLOT(devfn)                (((devfn) >> 3) & 0x1f)
+#define PCI_FUNC(devfn)                ((devfn) & 0x07)
+
+/* Ioctls for /proc/bus/pci/X/Y nodes. */
+#define PCIIOC_BASE            ('P' << 24 | 'C' << 16 | 'I' << 8)
+#define PCIIOC_CONTROLLER      (PCIIOC_BASE | 0x00)    /* Get controller for PCI device. */
+#define PCIIOC_MMAP_IS_IO      (PCIIOC_BASE | 0x01)    /* Set mmap state to I/O space. */
+#define PCIIOC_MMAP_IS_MEM     (PCIIOC_BASE | 0x02)    /* Set mmap state to MEM space. */
+#define PCIIOC_WRITE_COMBINE   (PCIIOC_BASE | 0x03)    /* Enable/disable write-combining. */
+
+#endif /* LINUX_PCI_H */
diff --git a/lib/libdss-include/linux/pci_regs.h b/lib/libdss-include/linux/pci_regs.h
new file mode 100644 (file)
index 0000000..1becea8
--- /dev/null
@@ -0,0 +1,949 @@
+/*
+ *     pci_regs.h
+ *
+ *     PCI standard defines
+ *     Copyright 1994, Drew Eckhardt
+ *     Copyright 1997--1999 Martin Mares <mj@ucw.cz>
+ *
+ *     For more information, please consult the following manuals (look at
+ *     http://www.pcisig.com/ for how to get them):
+ *
+ *     PCI BIOS Specification
+ *     PCI Local Bus Specification
+ *     PCI to PCI Bridge Specification
+ *     PCI System Design Guide
+ *
+ *     For HyperTransport information, please consult the following manuals
+ *     from http://www.hypertransport.org
+ *
+ *     The HyperTransport I/O Link Specification
+ */
+
+#ifndef LINUX_PCI_REGS_H
+#define LINUX_PCI_REGS_H
+
+/*
+ * Under PCI, each device has 256 bytes of configuration address space,
+ * of which the first 64 bytes are standardized as follows:
+ */
+#define PCI_STD_HEADER_SIZEOF  64
+#define PCI_VENDOR_ID          0x00    /* 16 bits */
+#define PCI_DEVICE_ID          0x02    /* 16 bits */
+#define PCI_COMMAND            0x04    /* 16 bits */
+#define  PCI_COMMAND_IO                0x1     /* Enable response in I/O space */
+#define  PCI_COMMAND_MEMORY    0x2     /* Enable response in Memory space */
+#define  PCI_COMMAND_MASTER    0x4     /* Enable bus mastering */
+#define  PCI_COMMAND_SPECIAL   0x8     /* Enable response to special cycles */
+#define  PCI_COMMAND_INVALIDATE        0x10    /* Use memory write and invalidate */
+#define  PCI_COMMAND_VGA_PALETTE 0x20  /* Enable palette snooping */
+#define  PCI_COMMAND_PARITY    0x40    /* Enable parity checking */
+#define  PCI_COMMAND_WAIT      0x80    /* Enable address/data stepping */
+#define  PCI_COMMAND_SERR      0x100   /* Enable SERR */
+#define  PCI_COMMAND_FAST_BACK 0x200   /* Enable back-to-back writes */
+#define  PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
+
+#define PCI_STATUS             0x06    /* 16 bits */
+#define  PCI_STATUS_INTERRUPT  0x08    /* Interrupt status */
+#define  PCI_STATUS_CAP_LIST   0x10    /* Support Capability List */
+#define  PCI_STATUS_66MHZ      0x20    /* Support 66 MHz PCI 2.1 bus */
+#define  PCI_STATUS_UDF                0x40    /* Support User Definable Features [obsolete] */
+#define  PCI_STATUS_FAST_BACK  0x80    /* Accept fast-back to back */
+#define  PCI_STATUS_PARITY     0x100   /* Detected parity error */
+#define  PCI_STATUS_DEVSEL_MASK        0x600   /* DEVSEL timing */
+#define  PCI_STATUS_DEVSEL_FAST                0x000
+#define  PCI_STATUS_DEVSEL_MEDIUM      0x200
+#define  PCI_STATUS_DEVSEL_SLOW                0x400
+#define  PCI_STATUS_SIG_TARGET_ABORT   0x800 /* Set on target abort */
+#define  PCI_STATUS_REC_TARGET_ABORT   0x1000 /* Master ack of " */
+#define  PCI_STATUS_REC_MASTER_ABORT   0x2000 /* Set on master abort */
+#define  PCI_STATUS_SIG_SYSTEM_ERROR   0x4000 /* Set when we drive SERR */
+#define  PCI_STATUS_DETECTED_PARITY    0x8000 /* Set on parity error */
+
+#define PCI_CLASS_REVISION     0x08    /* High 24 bits are class, low 8 revision */
+#define PCI_REVISION_ID                0x08    /* Revision ID */
+#define PCI_CLASS_PROG         0x09    /* Reg. Level Programming Interface */
+#define PCI_CLASS_DEVICE       0x0a    /* Device class */
+
+#define PCI_CACHE_LINE_SIZE    0x0c    /* 8 bits */
+#define PCI_LATENCY_TIMER      0x0d    /* 8 bits */
+#define PCI_HEADER_TYPE                0x0e    /* 8 bits */
+#define  PCI_HEADER_TYPE_NORMAL                0
+#define  PCI_HEADER_TYPE_BRIDGE                1
+#define  PCI_HEADER_TYPE_CARDBUS       2
+
+#define PCI_BIST               0x0f    /* 8 bits */
+#define  PCI_BIST_CODE_MASK    0x0f    /* Return result */
+#define  PCI_BIST_START                0x40    /* 1 to start BIST, 2 secs or less */
+#define  PCI_BIST_CAPABLE      0x80    /* 1 if BIST capable */
+
+/*
+ * Base addresses specify locations in memory or I/O space.
+ * Decoded size can be determined by writing a value of
+ * 0xffffffff to the register, and reading it back.  Only
+ * 1 bits are decoded.
+ */
+#define PCI_BASE_ADDRESS_0     0x10    /* 32 bits */
+#define PCI_BASE_ADDRESS_1     0x14    /* 32 bits [htype 0,1 only] */
+#define PCI_BASE_ADDRESS_2     0x18    /* 32 bits [htype 0 only] */
+#define PCI_BASE_ADDRESS_3     0x1c    /* 32 bits */
+#define PCI_BASE_ADDRESS_4     0x20    /* 32 bits */
+#define PCI_BASE_ADDRESS_5     0x24    /* 32 bits */
+#define  PCI_BASE_ADDRESS_SPACE                0x01    /* 0 = memory, 1 = I/O */
+#define  PCI_BASE_ADDRESS_SPACE_IO     0x01
+#define  PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
+#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK        0x06
+#define  PCI_BASE_ADDRESS_MEM_TYPE_32  0x00    /* 32 bit address */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_1M  0x02    /* Below 1M [obsolete] */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_64  0x04    /* 64 bit address */
+#define  PCI_BASE_ADDRESS_MEM_PREFETCH 0x08    /* prefetchable? */
+#define  PCI_BASE_ADDRESS_MEM_MASK     (~0x0fUL)
+#define  PCI_BASE_ADDRESS_IO_MASK      (~0x03UL)
+/* bit 1 is reserved if address_space = 1 */
+
+/* Header type 0 (normal devices) */
+#define PCI_CARDBUS_CIS                0x28
+#define PCI_SUBSYSTEM_VENDOR_ID        0x2c
+#define PCI_SUBSYSTEM_ID       0x2e
+#define PCI_ROM_ADDRESS                0x30    /* Bits 31..11 are address, 10..1 reserved */
+#define  PCI_ROM_ADDRESS_ENABLE        0x01
+#define PCI_ROM_ADDRESS_MASK   (~0x7ffUL)
+
+#define PCI_CAPABILITY_LIST    0x34    /* Offset of first capability list entry */
+
+/* 0x35-0x3b are reserved */
+#define PCI_INTERRUPT_LINE     0x3c    /* 8 bits */
+#define PCI_INTERRUPT_PIN      0x3d    /* 8 bits */
+#define PCI_MIN_GNT            0x3e    /* 8 bits */
+#define PCI_MAX_LAT            0x3f    /* 8 bits */
+
+/* Header type 1 (PCI-to-PCI bridges) */
+#define PCI_PRIMARY_BUS                0x18    /* Primary bus number */
+#define PCI_SECONDARY_BUS      0x19    /* Secondary bus number */
+#define PCI_SUBORDINATE_BUS    0x1a    /* Highest bus number behind the bridge */
+#define PCI_SEC_LATENCY_TIMER  0x1b    /* Latency timer for secondary interface */
+#define PCI_IO_BASE            0x1c    /* I/O range behind the bridge */
+#define PCI_IO_LIMIT           0x1d
+#define  PCI_IO_RANGE_TYPE_MASK        0x0fUL  /* I/O bridging type */
+#define  PCI_IO_RANGE_TYPE_16  0x00
+#define  PCI_IO_RANGE_TYPE_32  0x01
+#define  PCI_IO_RANGE_MASK     (~0x0fUL) /* Standard 4K I/O windows */
+#define  PCI_IO_1K_RANGE_MASK  (~0x03UL) /* Intel 1K I/O windows */
+#define PCI_SEC_STATUS         0x1e    /* Secondary status register, only bit 14 used */
+#define PCI_MEMORY_BASE                0x20    /* Memory range behind */
+#define PCI_MEMORY_LIMIT       0x22
+#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
+#define  PCI_MEMORY_RANGE_MASK (~0x0fUL)
+#define PCI_PREF_MEMORY_BASE   0x24    /* Prefetchable memory range behind */
+#define PCI_PREF_MEMORY_LIMIT  0x26
+#define  PCI_PREF_RANGE_TYPE_MASK 0x0fUL
+#define  PCI_PREF_RANGE_TYPE_32        0x00
+#define  PCI_PREF_RANGE_TYPE_64        0x01
+#define  PCI_PREF_RANGE_MASK   (~0x0fUL)
+#define PCI_PREF_BASE_UPPER32  0x28    /* Upper half of prefetchable memory range */
+#define PCI_PREF_LIMIT_UPPER32 0x2c
+#define PCI_IO_BASE_UPPER16    0x30    /* Upper half of I/O addresses */
+#define PCI_IO_LIMIT_UPPER16   0x32
+/* 0x34 same as for htype 0 */
+/* 0x35-0x3b is reserved */
+#define PCI_ROM_ADDRESS1       0x38    /* Same as PCI_ROM_ADDRESS, but for htype 1 */
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_BRIDGE_CONTROL     0x3e
+#define  PCI_BRIDGE_CTL_PARITY 0x01    /* Enable parity detection on secondary interface */
+#define  PCI_BRIDGE_CTL_SERR   0x02    /* The same for SERR forwarding */
+#define  PCI_BRIDGE_CTL_ISA    0x04    /* Enable ISA mode */
+#define  PCI_BRIDGE_CTL_VGA    0x08    /* Forward VGA addresses */
+#define  PCI_BRIDGE_CTL_MASTER_ABORT   0x20  /* Report master aborts */
+#define  PCI_BRIDGE_CTL_BUS_RESET      0x40    /* Secondary bus reset */
+#define  PCI_BRIDGE_CTL_FAST_BACK      0x80    /* Fast Back2Back enabled on secondary interface */
+
+/* Header type 2 (CardBus bridges) */
+#define PCI_CB_CAPABILITY_LIST 0x14
+/* 0x15 reserved */
+#define PCI_CB_SEC_STATUS      0x16    /* Secondary status */
+#define PCI_CB_PRIMARY_BUS     0x18    /* PCI bus number */
+#define PCI_CB_CARD_BUS                0x19    /* CardBus bus number */
+#define PCI_CB_SUBORDINATE_BUS 0x1a    /* Subordinate bus number */
+#define PCI_CB_LATENCY_TIMER   0x1b    /* CardBus latency timer */
+#define PCI_CB_MEMORY_BASE_0   0x1c
+#define PCI_CB_MEMORY_LIMIT_0  0x20
+#define PCI_CB_MEMORY_BASE_1   0x24
+#define PCI_CB_MEMORY_LIMIT_1  0x28
+#define PCI_CB_IO_BASE_0       0x2c
+#define PCI_CB_IO_BASE_0_HI    0x2e
+#define PCI_CB_IO_LIMIT_0      0x30
+#define PCI_CB_IO_LIMIT_0_HI   0x32
+#define PCI_CB_IO_BASE_1       0x34
+#define PCI_CB_IO_BASE_1_HI    0x36
+#define PCI_CB_IO_LIMIT_1      0x38
+#define PCI_CB_IO_LIMIT_1_HI   0x3a
+#define  PCI_CB_IO_RANGE_MASK  (~0x03UL)
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_CB_BRIDGE_CONTROL  0x3e
+#define  PCI_CB_BRIDGE_CTL_PARITY      0x01    /* Similar to standard bridge control register */
+#define  PCI_CB_BRIDGE_CTL_SERR                0x02
+#define  PCI_CB_BRIDGE_CTL_ISA         0x04
+#define  PCI_CB_BRIDGE_CTL_VGA         0x08
+#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT        0x20
+#define  PCI_CB_BRIDGE_CTL_CB_RESET    0x40    /* CardBus reset */
+#define  PCI_CB_BRIDGE_CTL_16BIT_INT   0x80    /* Enable interrupt for 16-bit cards */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
+#define  PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
+#define PCI_CB_SUBSYSTEM_VENDOR_ID     0x40
+#define PCI_CB_SUBSYSTEM_ID            0x42
+#define PCI_CB_LEGACY_MODE_BASE                0x44    /* 16-bit PC Card legacy mode base address (ExCa) */
+/* 0x48-0x7f reserved */
+
+/* Capability lists */
+
+#define PCI_CAP_LIST_ID                0       /* Capability ID */
+#define  PCI_CAP_ID_PM         0x01    /* Power Management */
+#define  PCI_CAP_ID_AGP                0x02    /* Accelerated Graphics Port */
+#define  PCI_CAP_ID_VPD                0x03    /* Vital Product Data */
+#define  PCI_CAP_ID_SLOTID     0x04    /* Slot Identification */
+#define  PCI_CAP_ID_MSI                0x05    /* Message Signalled Interrupts */
+#define  PCI_CAP_ID_CHSWP      0x06    /* CompactPCI HotSwap */
+#define  PCI_CAP_ID_PCIX       0x07    /* PCI-X */
+#define  PCI_CAP_ID_HT         0x08    /* HyperTransport */
+#define  PCI_CAP_ID_VNDR       0x09    /* Vendor-Specific */
+#define  PCI_CAP_ID_DBG                0x0A    /* Debug port */
+#define  PCI_CAP_ID_CCRC       0x0B    /* CompactPCI Central Resource Control */
+#define  PCI_CAP_ID_SHPC       0x0C    /* PCI Standard Hot-Plug Controller */
+#define  PCI_CAP_ID_SSVID      0x0D    /* Bridge subsystem vendor/device ID */
+#define  PCI_CAP_ID_AGP3       0x0E    /* AGP Target PCI-PCI bridge */
+#define  PCI_CAP_ID_SECDEV     0x0F    /* Secure Device */
+#define  PCI_CAP_ID_EXP                0x10    /* PCI Express */
+#define  PCI_CAP_ID_MSIX       0x11    /* MSI-X */
+#define  PCI_CAP_ID_SATA       0x12    /* SATA Data/Index Conf. */
+#define  PCI_CAP_ID_AF         0x13    /* PCI Advanced Features */
+#define  PCI_CAP_ID_EA         0x14    /* PCI Enhanced Allocation */
+#define  PCI_CAP_ID_MAX                PCI_CAP_ID_EA
+#define PCI_CAP_LIST_NEXT      1       /* Next capability in the list */
+#define PCI_CAP_FLAGS          2       /* Capability defined flags (16 bits) */
+#define PCI_CAP_SIZEOF         4
+
+/* Power Management Registers */
+
+#define PCI_PM_PMC             2       /* PM Capabilities Register */
+#define  PCI_PM_CAP_VER_MASK   0x0007  /* Version */
+#define  PCI_PM_CAP_PME_CLOCK  0x0008  /* PME clock required */
+#define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */
+#define  PCI_PM_CAP_DSI                0x0020  /* Device specific initialization */
+#define  PCI_PM_CAP_AUX_POWER  0x01C0  /* Auxiliary power support mask */
+#define  PCI_PM_CAP_D1         0x0200  /* D1 power state support */
+#define  PCI_PM_CAP_D2         0x0400  /* D2 power state support */
+#define  PCI_PM_CAP_PME                0x0800  /* PME pin supported */
+#define  PCI_PM_CAP_PME_MASK   0xF800  /* PME Mask of all supported states */
+#define  PCI_PM_CAP_PME_D0     0x0800  /* PME# from D0 */
+#define  PCI_PM_CAP_PME_D1     0x1000  /* PME# from D1 */
+#define  PCI_PM_CAP_PME_D2     0x2000  /* PME# from D2 */
+#define  PCI_PM_CAP_PME_D3     0x4000  /* PME# from D3 (hot) */
+#define  PCI_PM_CAP_PME_D3cold 0x8000  /* PME# from D3 (cold) */
+#define  PCI_PM_CAP_PME_SHIFT  11      /* Start of the PME Mask in PMC */
+#define PCI_PM_CTRL            4       /* PM control and status register */
+#define  PCI_PM_CTRL_STATE_MASK        0x0003  /* Current power state (D0 to D3) */
+#define  PCI_PM_CTRL_NO_SOFT_RESET     0x0008  /* No reset for D3hot->D0 */
+#define  PCI_PM_CTRL_PME_ENABLE        0x0100  /* PME pin enable */
+#define  PCI_PM_CTRL_DATA_SEL_MASK     0x1e00  /* Data select (??) */
+#define  PCI_PM_CTRL_DATA_SCALE_MASK   0x6000  /* Data scale (??) */
+#define  PCI_PM_CTRL_PME_STATUS        0x8000  /* PME pin status */
+#define PCI_PM_PPB_EXTENSIONS  6       /* PPB support extensions (??) */
+#define  PCI_PM_PPB_B2_B3      0x40    /* Stop clock when in D3hot (??) */
+#define  PCI_PM_BPCC_ENABLE    0x80    /* Bus power/clock control enable (??) */
+#define PCI_PM_DATA_REGISTER   7       /* (??) */
+#define PCI_PM_SIZEOF          8
+
+/* AGP registers */
+
+#define PCI_AGP_VERSION                2       /* BCD version number */
+#define PCI_AGP_RFU            3       /* Rest of capability flags */
+#define PCI_AGP_STATUS         4       /* Status register */
+#define  PCI_AGP_STATUS_RQ_MASK        0xff000000      /* Maximum number of requests - 1 */
+#define  PCI_AGP_STATUS_SBA    0x0200  /* Sideband addressing supported */
+#define  PCI_AGP_STATUS_64BIT  0x0020  /* 64-bit addressing supported */
+#define  PCI_AGP_STATUS_FW     0x0010  /* FW transfers supported */
+#define  PCI_AGP_STATUS_RATE4  0x0004  /* 4x transfer rate supported */
+#define  PCI_AGP_STATUS_RATE2  0x0002  /* 2x transfer rate supported */
+#define  PCI_AGP_STATUS_RATE1  0x0001  /* 1x transfer rate supported */
+#define PCI_AGP_COMMAND                8       /* Control register */
+#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */
+#define  PCI_AGP_COMMAND_SBA   0x0200  /* Sideband addressing enabled */
+#define  PCI_AGP_COMMAND_AGP   0x0100  /* Allow processing of AGP transactions */
+#define  PCI_AGP_COMMAND_64BIT 0x0020  /* Allow processing of 64-bit addresses */
+#define  PCI_AGP_COMMAND_FW    0x0010  /* Force FW transfers */
+#define  PCI_AGP_COMMAND_RATE4 0x0004  /* Use 4x rate */
+#define  PCI_AGP_COMMAND_RATE2 0x0002  /* Use 2x rate */
+#define  PCI_AGP_COMMAND_RATE1 0x0001  /* Use 1x rate */
+#define PCI_AGP_SIZEOF         12
+
+/* Vital Product Data */
+
+#define PCI_VPD_ADDR           2       /* Address to access (15 bits!) */
+#define  PCI_VPD_ADDR_MASK     0x7fff  /* Address mask */
+#define  PCI_VPD_ADDR_F                0x8000  /* Write 0, 1 indicates completion */
+#define PCI_VPD_DATA           4       /* 32-bits of data returned here */
+#define PCI_CAP_VPD_SIZEOF     8
+
+/* Slot Identification */
+
+#define PCI_SID_ESR            2       /* Expansion Slot Register */
+#define  PCI_SID_ESR_NSLOTS    0x1f    /* Number of expansion slots available */
+#define  PCI_SID_ESR_FIC       0x20    /* First In Chassis Flag */
+#define PCI_SID_CHASSIS_NR     3       /* Chassis Number */
+
+/* Message Signalled Interrupts registers */
+
+#define PCI_MSI_FLAGS          2       /* Message Control */
+#define  PCI_MSI_FLAGS_ENABLE  0x0001  /* MSI feature enabled */
+#define  PCI_MSI_FLAGS_QMASK   0x000e  /* Maximum queue size available */
+#define  PCI_MSI_FLAGS_QSIZE   0x0070  /* Message queue size configured */
+#define  PCI_MSI_FLAGS_64BIT   0x0080  /* 64-bit addresses allowed */
+#define  PCI_MSI_FLAGS_MASKBIT 0x0100  /* Per-vector masking capable */
+#define PCI_MSI_RFU            3       /* Rest of capability flags */
+#define PCI_MSI_ADDRESS_LO     4       /* Lower 32 bits */
+#define PCI_MSI_ADDRESS_HI     8       /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
+#define PCI_MSI_DATA_32                8       /* 16 bits of data for 32-bit devices */
+#define PCI_MSI_MASK_32                12      /* Mask bits register for 32-bit devices */
+#define PCI_MSI_PENDING_32     16      /* Pending intrs for 32-bit devices */
+#define PCI_MSI_DATA_64                12      /* 16 bits of data for 64-bit devices */
+#define PCI_MSI_MASK_64                16      /* Mask bits register for 64-bit devices */
+#define PCI_MSI_PENDING_64     20      /* Pending intrs for 64-bit devices */
+
+/* MSI-X registers */
+#define PCI_MSIX_FLAGS         2       /* Message Control */
+#define  PCI_MSIX_FLAGS_QSIZE  0x07FF  /* Table size */
+#define  PCI_MSIX_FLAGS_MASKALL        0x4000  /* Mask all vectors for this function */
+#define  PCI_MSIX_FLAGS_ENABLE 0x8000  /* MSI-X enable */
+#define PCI_MSIX_TABLE         4       /* Table offset */
+#define  PCI_MSIX_TABLE_BIR    0x00000007 /* BAR index */
+#define  PCI_MSIX_TABLE_OFFSET 0xfffffff8 /* Offset into specified BAR */
+#define PCI_MSIX_PBA           8       /* Pending Bit Array offset */
+#define  PCI_MSIX_PBA_BIR      0x00000007 /* BAR index */
+#define  PCI_MSIX_PBA_OFFSET   0xfffffff8 /* Offset into specified BAR */
+#define PCI_MSIX_FLAGS_BIRMASK PCI_MSIX_PBA_BIR /* deprecated */
+#define PCI_CAP_MSIX_SIZEOF    12      /* size of MSIX registers */
+
+/* MSI-X Table entry format */
+#define PCI_MSIX_ENTRY_SIZE            16
+#define  PCI_MSIX_ENTRY_LOWER_ADDR     0
+#define  PCI_MSIX_ENTRY_UPPER_ADDR     4
+#define  PCI_MSIX_ENTRY_DATA           8
+#define  PCI_MSIX_ENTRY_VECTOR_CTRL    12
+#define   PCI_MSIX_ENTRY_CTRL_MASKBIT  1
+
+/* CompactPCI Hotswap Register */
+
+#define PCI_CHSWP_CSR          2       /* Control and Status Register */
+#define  PCI_CHSWP_DHA         0x01    /* Device Hiding Arm */
+#define  PCI_CHSWP_EIM         0x02    /* ENUM# Signal Mask */
+#define  PCI_CHSWP_PIE         0x04    /* Pending Insert or Extract */
+#define  PCI_CHSWP_LOO         0x08    /* LED On / Off */
+#define  PCI_CHSWP_PI          0x30    /* Programming Interface */
+#define  PCI_CHSWP_EXT         0x40    /* ENUM# status - extraction */
+#define  PCI_CHSWP_INS         0x80    /* ENUM# status - insertion */
+
+/* PCI Advanced Feature registers */
+
+#define PCI_AF_LENGTH          2
+#define PCI_AF_CAP             3
+#define  PCI_AF_CAP_TP         0x01
+#define  PCI_AF_CAP_FLR                0x02
+#define PCI_AF_CTRL            4
+#define  PCI_AF_CTRL_FLR       0x01
+#define PCI_AF_STATUS          5
+#define  PCI_AF_STATUS_TP      0x01
+#define PCI_CAP_AF_SIZEOF      6       /* size of AF registers */
+
+/* PCI Enhanced Allocation registers */
+
+#define PCI_EA_NUM_ENT         2       /* Number of Capability Entries */
+#define  PCI_EA_NUM_ENT_MASK   0x3f    /* Num Entries Mask */
+#define PCI_EA_FIRST_ENT       4       /* First EA Entry in List */
+#define PCI_EA_FIRST_ENT_BRIDGE        8       /* First EA Entry for Bridges */
+#define  PCI_EA_ES             0x00000007 /* Entry Size */
+#define  PCI_EA_BEI            0x000000f0 /* BAR Equivalent Indicator */
+/* 0-5 map to BARs 0-5 respectively */
+#define   PCI_EA_BEI_BAR0              0
+#define   PCI_EA_BEI_BAR5              5
+#define   PCI_EA_BEI_BRIDGE            6       /* Resource behind bridge */
+#define   PCI_EA_BEI_ENI               7       /* Equivalent Not Indicated */
+#define   PCI_EA_BEI_ROM               8       /* Expansion ROM */
+/* 9-14 map to VF BARs 0-5 respectively */
+#define   PCI_EA_BEI_VF_BAR0           9
+#define   PCI_EA_BEI_VF_BAR5           14
+#define   PCI_EA_BEI_RESERVED          15      /* Reserved - Treat like ENI */
+#define  PCI_EA_PP             0x0000ff00      /* Primary Properties */
+#define  PCI_EA_SP             0x00ff0000      /* Secondary Properties */
+#define   PCI_EA_P_MEM                 0x00    /* Non-Prefetch Memory */
+#define   PCI_EA_P_MEM_PREFETCH                0x01    /* Prefetchable Memory */
+#define   PCI_EA_P_IO                  0x02    /* I/O Space */
+#define   PCI_EA_P_VF_MEM_PREFETCH     0x03    /* VF Prefetchable Memory */
+#define   PCI_EA_P_VF_MEM              0x04    /* VF Non-Prefetch Memory */
+#define   PCI_EA_P_BRIDGE_MEM          0x05    /* Bridge Non-Prefetch Memory */
+#define   PCI_EA_P_BRIDGE_MEM_PREFETCH 0x06    /* Bridge Prefetchable Memory */
+#define   PCI_EA_P_BRIDGE_IO           0x07    /* Bridge I/O Space */
+/* 0x08-0xfc reserved */
+#define   PCI_EA_P_MEM_RESERVED                0xfd    /* Reserved Memory */
+#define   PCI_EA_P_IO_RESERVED         0xfe    /* Reserved I/O Space */
+#define   PCI_EA_P_UNAVAILABLE         0xff    /* Entry Unavailable */
+#define  PCI_EA_WRITABLE       0x40000000      /* Writable: 1 = RW, 0 = HwInit */
+#define  PCI_EA_ENABLE         0x80000000      /* Enable for this entry */
+#define PCI_EA_BASE            4               /* Base Address Offset */
+#define PCI_EA_MAX_OFFSET      8               /* MaxOffset (resource length) */
+/* bit 0 is reserved */
+#define  PCI_EA_IS_64          0x00000002      /* 64-bit field flag */
+#define  PCI_EA_FIELD_MASK     0xfffffffc      /* For Base & Max Offset */
+
+/* PCI-X registers (Type 0 (non-bridge) devices) */
+
+#define PCI_X_CMD              2       /* Modes & Features */
+#define  PCI_X_CMD_DPERR_E     0x0001  /* Data Parity Error Recovery Enable */
+#define  PCI_X_CMD_ERO         0x0002  /* Enable Relaxed Ordering */
+#define  PCI_X_CMD_READ_512    0x0000  /* 512 byte maximum read byte count */
+#define  PCI_X_CMD_READ_1K     0x0004  /* 1Kbyte maximum read byte count */
+#define  PCI_X_CMD_READ_2K     0x0008  /* 2Kbyte maximum read byte count */
+#define  PCI_X_CMD_READ_4K     0x000c  /* 4Kbyte maximum read byte count */
+#define  PCI_X_CMD_MAX_READ    0x000c  /* Max Memory Read Byte Count */
+                               /* Max # of outstanding split transactions */
+#define  PCI_X_CMD_SPLIT_1     0x0000  /* Max 1 */
+#define  PCI_X_CMD_SPLIT_2     0x0010  /* Max 2 */
+#define  PCI_X_CMD_SPLIT_3     0x0020  /* Max 3 */
+#define  PCI_X_CMD_SPLIT_4     0x0030  /* Max 4 */
+#define  PCI_X_CMD_SPLIT_8     0x0040  /* Max 8 */
+#define  PCI_X_CMD_SPLIT_12    0x0050  /* Max 12 */
+#define  PCI_X_CMD_SPLIT_16    0x0060  /* Max 16 */
+#define  PCI_X_CMD_SPLIT_32    0x0070  /* Max 32 */
+#define  PCI_X_CMD_MAX_SPLIT   0x0070  /* Max Outstanding Split Transactions */
+#define  PCI_X_CMD_VERSION(x)  (((x) >> 12) & 3) /* Version */
+#define PCI_X_STATUS           4       /* PCI-X capabilities */
+#define  PCI_X_STATUS_DEVFN    0x000000ff      /* A copy of devfn */
+#define  PCI_X_STATUS_BUS      0x0000ff00      /* A copy of bus nr */
+#define  PCI_X_STATUS_64BIT    0x00010000      /* 64-bit device */
+#define  PCI_X_STATUS_133MHZ   0x00020000      /* 133 MHz capable */
+#define  PCI_X_STATUS_SPL_DISC 0x00040000      /* Split Completion Discarded */
+#define  PCI_X_STATUS_UNX_SPL  0x00080000      /* Unexpected Split Completion */
+#define  PCI_X_STATUS_COMPLEX  0x00100000      /* Device Complexity */
+#define  PCI_X_STATUS_MAX_READ 0x00600000      /* Designed Max Memory Read Count */
+#define  PCI_X_STATUS_MAX_SPLIT        0x03800000      /* Designed Max Outstanding Split Transactions */
+#define  PCI_X_STATUS_MAX_CUM  0x1c000000      /* Designed Max Cumulative Read Size */
+#define  PCI_X_STATUS_SPL_ERR  0x20000000      /* Rcvd Split Completion Error Msg */
+#define  PCI_X_STATUS_266MHZ   0x40000000      /* 266 MHz capable */
+#define  PCI_X_STATUS_533MHZ   0x80000000      /* 533 MHz capable */
+#define PCI_X_ECC_CSR          8       /* ECC control and status */
+#define PCI_CAP_PCIX_SIZEOF_V0 8       /* size of registers for Version 0 */
+#define PCI_CAP_PCIX_SIZEOF_V1 24      /* size for Version 1 */
+#define PCI_CAP_PCIX_SIZEOF_V2 PCI_CAP_PCIX_SIZEOF_V1  /* Same for v2 */
+
+/* PCI-X registers (Type 1 (bridge) devices) */
+
+#define PCI_X_BRIDGE_SSTATUS   2       /* Secondary Status */
+#define  PCI_X_SSTATUS_64BIT   0x0001  /* Secondary AD interface is 64 bits */
+#define  PCI_X_SSTATUS_133MHZ  0x0002  /* 133 MHz capable */
+#define  PCI_X_SSTATUS_FREQ    0x03c0  /* Secondary Bus Mode and Frequency */
+#define  PCI_X_SSTATUS_VERS    0x3000  /* PCI-X Capability Version */
+#define  PCI_X_SSTATUS_V1      0x1000  /* Mode 2, not Mode 1 */
+#define  PCI_X_SSTATUS_V2      0x2000  /* Mode 1 or Modes 1 and 2 */
+#define  PCI_X_SSTATUS_266MHZ  0x4000  /* 266 MHz capable */
+#define  PCI_X_SSTATUS_533MHZ  0x8000  /* 533 MHz capable */
+#define PCI_X_BRIDGE_STATUS    4       /* Bridge Status */
+
+/* PCI Bridge Subsystem ID registers */
+
+#define PCI_SSVID_VENDOR_ID     4      /* PCI Bridge subsystem vendor ID */
+#define PCI_SSVID_DEVICE_ID     6      /* PCI Bridge subsystem device ID */
+
+/* PCI Express capability registers */
+
+#define PCI_EXP_FLAGS          2       /* Capabilities register */
+#define PCI_EXP_FLAGS_VERS     0x000f  /* Capability version */
+#define PCI_EXP_FLAGS_TYPE     0x00f0  /* Device/Port type */
+#define  PCI_EXP_TYPE_ENDPOINT 0x0     /* Express Endpoint */
+#define  PCI_EXP_TYPE_LEG_END  0x1     /* Legacy Endpoint */
+#define  PCI_EXP_TYPE_ROOT_PORT 0x4    /* Root Port */
+#define  PCI_EXP_TYPE_UPSTREAM 0x5     /* Upstream Port */
+#define  PCI_EXP_TYPE_DOWNSTREAM 0x6   /* Downstream Port */
+#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7   /* PCIe to PCI/PCI-X Bridge */
+#define  PCI_EXP_TYPE_PCIE_BRIDGE 0x8  /* PCI/PCI-X to PCIe Bridge */
+#define  PCI_EXP_TYPE_RC_END   0x9     /* Root Complex Integrated Endpoint */
+#define  PCI_EXP_TYPE_RC_EC    0xa     /* Root Complex Event Collector */
+#define PCI_EXP_FLAGS_SLOT     0x0100  /* Slot implemented */
+#define PCI_EXP_FLAGS_IRQ      0x3e00  /* Interrupt message number */
+#define PCI_EXP_DEVCAP         4       /* Device capabilities */
+#define  PCI_EXP_DEVCAP_PAYLOAD        0x00000007 /* Max_Payload_Size */
+#define  PCI_EXP_DEVCAP_PHANTOM        0x00000018 /* Phantom functions */
+#define  PCI_EXP_DEVCAP_EXT_TAG        0x00000020 /* Extended tags */
+#define  PCI_EXP_DEVCAP_L0S    0x000001c0 /* L0s Acceptable Latency */
+#define  PCI_EXP_DEVCAP_L1     0x00000e00 /* L1 Acceptable Latency */
+#define  PCI_EXP_DEVCAP_ATN_BUT        0x00001000 /* Attention Button Present */
+#define  PCI_EXP_DEVCAP_ATN_IND        0x00002000 /* Attention Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_IND        0x00004000 /* Power Indicator Present */
+#define  PCI_EXP_DEVCAP_RBER   0x00008000 /* Role-Based Error Reporting */
+#define  PCI_EXP_DEVCAP_PWR_VAL        0x03fc0000 /* Slot Power Limit Value */
+#define  PCI_EXP_DEVCAP_PWR_SCL        0x0c000000 /* Slot Power Limit Scale */
+#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
+#define PCI_EXP_DEVCTL         8       /* Device Control */
+#define  PCI_EXP_DEVCTL_CERE   0x0001  /* Correctable Error Reporting En. */
+#define  PCI_EXP_DEVCTL_NFERE  0x0002  /* Non-Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_FERE   0x0004  /* Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_URRE   0x0008  /* Unsupported Request Reporting En. */
+#define  PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
+#define  PCI_EXP_DEVCTL_PAYLOAD        0x00e0  /* Max_Payload_Size */
+#define  PCI_EXP_DEVCTL_EXT_TAG        0x0100  /* Extended Tag Field Enable */
+#define  PCI_EXP_DEVCTL_PHANTOM        0x0200  /* Phantom Functions Enable */
+#define  PCI_EXP_DEVCTL_AUX_PME        0x0400  /* Auxiliary Power PM Enable */
+#define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
+#define  PCI_EXP_DEVCTL_READRQ 0x7000  /* Max_Read_Request_Size */
+#define  PCI_EXP_DEVCTL_READRQ_128B  0x0000 /* 128 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_256B  0x1000 /* 256 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_512B  0x2000 /* 512 Bytes */
+#define  PCI_EXP_DEVCTL_READRQ_1024B 0x3000 /* 1024 Bytes */
+#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
+#define PCI_EXP_DEVSTA         10      /* Device Status */
+#define  PCI_EXP_DEVSTA_CED    0x0001  /* Correctable Error Detected */
+#define  PCI_EXP_DEVSTA_NFED   0x0002  /* Non-Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_FED    0x0004  /* Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_URD    0x0008  /* Unsupported Request Detected */
+#define  PCI_EXP_DEVSTA_AUXPD  0x0010  /* AUX Power Detected */
+#define  PCI_EXP_DEVSTA_TRPND  0x0020  /* Transactions Pending */
+#define PCI_EXP_LNKCAP         12      /* Link Capabilities */
+#define  PCI_EXP_LNKCAP_SLS    0x0000000f /* Supported Link Speeds */
+#define  PCI_EXP_LNKCAP_SLS_2_5GB 0x00000001 /* LNKCAP2 SLS Vector bit 0 */
+#define  PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002 /* LNKCAP2 SLS Vector bit 1 */
+#define  PCI_EXP_LNKCAP_MLW    0x000003f0 /* Maximum Link Width */
+#define  PCI_EXP_LNKCAP_ASPMS  0x00000c00 /* ASPM Support */
+#define  PCI_EXP_LNKCAP_L0SEL  0x00007000 /* L0s Exit Latency */
+#define  PCI_EXP_LNKCAP_L1EL   0x00038000 /* L1 Exit Latency */
+#define  PCI_EXP_LNKCAP_CLKPM  0x00040000 /* Clock Power Management */
+#define  PCI_EXP_LNKCAP_SDERC  0x00080000 /* Surprise Down Error Reporting Capable */
+#define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link Active Reporting Capable */
+#define  PCI_EXP_LNKCAP_LBNC   0x00200000 /* Link Bandwidth Notification Capability */
+#define  PCI_EXP_LNKCAP_PN     0xff000000 /* Port Number */
+#define PCI_EXP_LNKCTL         16      /* Link Control */
+#define  PCI_EXP_LNKCTL_ASPMC  0x0003  /* ASPM Control */
+#define  PCI_EXP_LNKCTL_ASPM_L0S 0x0001        /* L0s Enable */
+#define  PCI_EXP_LNKCTL_ASPM_L1  0x0002        /* L1 Enable */
+#define  PCI_EXP_LNKCTL_RCB    0x0008  /* Read Completion Boundary */
+#define  PCI_EXP_LNKCTL_LD     0x0010  /* Link Disable */
+#define  PCI_EXP_LNKCTL_RL     0x0020  /* Retrain Link */
+#define  PCI_EXP_LNKCTL_CCC    0x0040  /* Common Clock Configuration */
+#define  PCI_EXP_LNKCTL_ES     0x0080  /* Extended Synch */
+#define  PCI_EXP_LNKCTL_CLKREQ_EN 0x0100 /* Enable clkreq */
+#define  PCI_EXP_LNKCTL_HAWD   0x0200  /* Hardware Autonomous Width Disable */
+#define  PCI_EXP_LNKCTL_LBMIE  0x0400  /* Link Bandwidth Management Interrupt Enable */
+#define  PCI_EXP_LNKCTL_LABIE  0x0800  /* Link Autonomous Bandwidth Interrupt Enable */
+#define PCI_EXP_LNKSTA         18      /* Link Status */
+#define  PCI_EXP_LNKSTA_CLS    0x000f  /* Current Link Speed */
+#define  PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */
+#define  PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */
+#define  PCI_EXP_LNKSTA_CLS_8_0GB 0x0003 /* Current Link Speed 8.0GT/s */
+#define  PCI_EXP_LNKSTA_NLW    0x03f0  /* Negotiated Link Width */
+#define  PCI_EXP_LNKSTA_NLW_X1 0x0010  /* Current Link Width x1 */
+#define  PCI_EXP_LNKSTA_NLW_X2 0x0020  /* Current Link Width x2 */
+#define  PCI_EXP_LNKSTA_NLW_X4 0x0040  /* Current Link Width x4 */
+#define  PCI_EXP_LNKSTA_NLW_X8 0x0080  /* Current Link Width x8 */
+#define  PCI_EXP_LNKSTA_NLW_SHIFT 4    /* start of NLW mask in link status */
+#define  PCI_EXP_LNKSTA_LT     0x0800  /* Link Training */
+#define  PCI_EXP_LNKSTA_SLC    0x1000  /* Slot Clock Configuration */
+#define  PCI_EXP_LNKSTA_DLLLA  0x2000  /* Data Link Layer Link Active */
+#define  PCI_EXP_LNKSTA_LBMS   0x4000  /* Link Bandwidth Management Status */
+#define  PCI_EXP_LNKSTA_LABS   0x8000  /* Link Autonomous Bandwidth Status */
+#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V1 20      /* v1 endpoints end here */
+#define PCI_EXP_SLTCAP         20      /* Slot Capabilities */
+#define  PCI_EXP_SLTCAP_ABP    0x00000001 /* Attention Button Present */
+#define  PCI_EXP_SLTCAP_PCP    0x00000002 /* Power Controller Present */
+#define  PCI_EXP_SLTCAP_MRLSP  0x00000004 /* MRL Sensor Present */
+#define  PCI_EXP_SLTCAP_AIP    0x00000008 /* Attention Indicator Present */
+#define  PCI_EXP_SLTCAP_PIP    0x00000010 /* Power Indicator Present */
+#define  PCI_EXP_SLTCAP_HPS    0x00000020 /* Hot-Plug Surprise */
+#define  PCI_EXP_SLTCAP_HPC    0x00000040 /* Hot-Plug Capable */
+#define  PCI_EXP_SLTCAP_SPLV   0x00007f80 /* Slot Power Limit Value */
+#define  PCI_EXP_SLTCAP_SPLS   0x00018000 /* Slot Power Limit Scale */
+#define  PCI_EXP_SLTCAP_EIP    0x00020000 /* Electromechanical Interlock Present */
+#define  PCI_EXP_SLTCAP_NCCS   0x00040000 /* No Command Completed Support */
+#define  PCI_EXP_SLTCAP_PSN    0xfff80000 /* Physical Slot Number */
+#define PCI_EXP_SLTCTL         24      /* Slot Control */
+#define  PCI_EXP_SLTCTL_ABPE   0x0001  /* Attention Button Pressed Enable */
+#define  PCI_EXP_SLTCTL_PFDE   0x0002  /* Power Fault Detected Enable */
+#define  PCI_EXP_SLTCTL_MRLSCE 0x0004  /* MRL Sensor Changed Enable */
+#define  PCI_EXP_SLTCTL_PDCE   0x0008  /* Presence Detect Changed Enable */
+#define  PCI_EXP_SLTCTL_CCIE   0x0010  /* Command Completed Interrupt Enable */
+#define  PCI_EXP_SLTCTL_HPIE   0x0020  /* Hot-Plug Interrupt Enable */
+#define  PCI_EXP_SLTCTL_AIC    0x00c0  /* Attention Indicator Control */
+#define  PCI_EXP_SLTCTL_ATTN_IND_ON    0x0040 /* Attention Indicator on */
+#define  PCI_EXP_SLTCTL_ATTN_IND_BLINK 0x0080 /* Attention Indicator blinking */
+#define  PCI_EXP_SLTCTL_ATTN_IND_OFF   0x00c0 /* Attention Indicator off */
+#define  PCI_EXP_SLTCTL_PIC    0x0300  /* Power Indicator Control */
+#define  PCI_EXP_SLTCTL_PWR_IND_ON     0x0100 /* Power Indicator on */
+#define  PCI_EXP_SLTCTL_PWR_IND_BLINK  0x0200 /* Power Indicator blinking */
+#define  PCI_EXP_SLTCTL_PWR_IND_OFF    0x0300 /* Power Indicator off */
+#define  PCI_EXP_SLTCTL_PCC    0x0400  /* Power Controller Control */
+#define  PCI_EXP_SLTCTL_PWR_ON         0x0000 /* Power On */
+#define  PCI_EXP_SLTCTL_PWR_OFF        0x0400 /* Power Off */
+#define  PCI_EXP_SLTCTL_EIC    0x0800  /* Electromechanical Interlock Control */
+#define  PCI_EXP_SLTCTL_DLLSCE 0x1000  /* Data Link Layer State Changed Enable */
+#define PCI_EXP_SLTSTA         26      /* Slot Status */
+#define  PCI_EXP_SLTSTA_ABP    0x0001  /* Attention Button Pressed */
+#define  PCI_EXP_SLTSTA_PFD    0x0002  /* Power Fault Detected */
+#define  PCI_EXP_SLTSTA_MRLSC  0x0004  /* MRL Sensor Changed */
+#define  PCI_EXP_SLTSTA_PDC    0x0008  /* Presence Detect Changed */
+#define  PCI_EXP_SLTSTA_CC     0x0010  /* Command Completed */
+#define  PCI_EXP_SLTSTA_MRLSS  0x0020  /* MRL Sensor State */
+#define  PCI_EXP_SLTSTA_PDS    0x0040  /* Presence Detect State */
+#define  PCI_EXP_SLTSTA_EIS    0x0080  /* Electromechanical Interlock Status */
+#define  PCI_EXP_SLTSTA_DLLSC  0x0100  /* Data Link Layer State Changed */
+#define PCI_EXP_RTCTL          28      /* Root Control */
+#define  PCI_EXP_RTCTL_SECEE   0x0001  /* System Error on Correctable Error */
+#define  PCI_EXP_RTCTL_SENFEE  0x0002  /* System Error on Non-Fatal Error */
+#define  PCI_EXP_RTCTL_SEFEE   0x0004  /* System Error on Fatal Error */
+#define  PCI_EXP_RTCTL_PMEIE   0x0008  /* PME Interrupt Enable */
+#define  PCI_EXP_RTCTL_CRSSVE  0x0010  /* CRS Software Visibility Enable */
+#define PCI_EXP_RTCAP          30      /* Root Capabilities */
+#define  PCI_EXP_RTCAP_CRSVIS  0x0001  /* CRS Software Visibility capability */
+#define PCI_EXP_RTSTA          32      /* Root Status */
+#define PCI_EXP_RTSTA_PME      0x00010000 /* PME status */
+#define PCI_EXP_RTSTA_PENDING  0x00020000 /* PME pending */
+/*
+ * The Device Capabilities 2, Device Status 2, Device Control 2,
+ * Link Capabilities 2, Link Status 2, Link Control 2,
+ * Slot Capabilities 2, Slot Status 2, and Slot Control 2 registers
+ * are only present on devices with PCIe Capability version 2.
+ * Use pcie_capability_read_word() and similar interfaces to use them
+ * safely.
+ */
+#define PCI_EXP_DEVCAP2                36      /* Device Capabilities 2 */
+#define  PCI_EXP_DEVCAP2_ARI           0x00000020 /* Alternative Routing-ID */
+#define  PCI_EXP_DEVCAP2_LTR           0x00000800 /* Latency tolerance reporting */
+#define  PCI_EXP_DEVCAP2_OBFF_MASK     0x000c0000 /* OBFF support mechanism */
+#define  PCI_EXP_DEVCAP2_OBFF_MSG      0x00040000 /* New message signaling */
+#define  PCI_EXP_DEVCAP2_OBFF_WAKE     0x00080000 /* Re-use WAKE# for OBFF */
+#define PCI_EXP_DEVCTL2                40      /* Device Control 2 */
+#define  PCI_EXP_DEVCTL2_COMP_TIMEOUT  0x000f  /* Completion Timeout Value */
+#define  PCI_EXP_DEVCTL2_ARI           0x0020  /* Alternative Routing-ID */
+#define  PCI_EXP_DEVCTL2_IDO_REQ_EN    0x0100  /* Allow IDO for requests */
+#define  PCI_EXP_DEVCTL2_IDO_CMP_EN    0x0200  /* Allow IDO for completions */
+#define  PCI_EXP_DEVCTL2_LTR_EN                0x0400  /* Enable LTR mechanism */
+#define  PCI_EXP_DEVCTL2_OBFF_MSGA_EN  0x2000  /* Enable OBFF Message type A */
+#define  PCI_EXP_DEVCTL2_OBFF_MSGB_EN  0x4000  /* Enable OBFF Message type B */
+#define  PCI_EXP_DEVCTL2_OBFF_WAKE_EN  0x6000  /* OBFF using WAKE# signaling */
+#define PCI_EXP_DEVSTA2                42      /* Device Status 2 */
+#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 44      /* v2 endpoints end here */
+#define PCI_EXP_LNKCAP2                44      /* Link Capabilities 2 */
+#define  PCI_EXP_LNKCAP2_SLS_2_5GB     0x00000002 /* Supported Speed 2.5GT/s */
+#define  PCI_EXP_LNKCAP2_SLS_5_0GB     0x00000004 /* Supported Speed 5.0GT/s */
+#define  PCI_EXP_LNKCAP2_SLS_8_0GB     0x00000008 /* Supported Speed 8.0GT/s */
+#define  PCI_EXP_LNKCAP2_CROSSLINK     0x00000100 /* Crosslink supported */
+#define PCI_EXP_LNKCTL2                48      /* Link Control 2 */
+#define PCI_EXP_LNKSTA2                50      /* Link Status 2 */
+#define PCI_EXP_SLTCAP2                52      /* Slot Capabilities 2 */
+#define PCI_EXP_SLTCTL2                56      /* Slot Control 2 */
+#define PCI_EXP_SLTSTA2                58      /* Slot Status 2 */
+
+/* Extended Capabilities (PCI-X 2.0 and Express) */
+#define PCI_EXT_CAP_ID(header)         (header & 0x0000ffff)
+#define PCI_EXT_CAP_VER(header)                ((header >> 16) & 0xf)
+#define PCI_EXT_CAP_NEXT(header)       ((header >> 20) & 0xffc)
+
+#define PCI_EXT_CAP_ID_ERR     0x01    /* Advanced Error Reporting */
+#define PCI_EXT_CAP_ID_VC      0x02    /* Virtual Channel Capability */
+#define PCI_EXT_CAP_ID_DSN     0x03    /* Device Serial Number */
+#define PCI_EXT_CAP_ID_PWR     0x04    /* Power Budgeting */
+#define PCI_EXT_CAP_ID_RCLD    0x05    /* Root Complex Link Declaration */
+#define PCI_EXT_CAP_ID_RCILC   0x06    /* Root Complex Internal Link Control */
+#define PCI_EXT_CAP_ID_RCEC    0x07    /* Root Complex Event Collector */
+#define PCI_EXT_CAP_ID_MFVC    0x08    /* Multi-Function VC Capability */
+#define PCI_EXT_CAP_ID_VC9     0x09    /* same as _VC */
+#define PCI_EXT_CAP_ID_RCRB    0x0A    /* Root Complex RB? */
+#define PCI_EXT_CAP_ID_VNDR    0x0B    /* Vendor-Specific */
+#define PCI_EXT_CAP_ID_CAC     0x0C    /* Config Access - obsolete */
+#define PCI_EXT_CAP_ID_ACS     0x0D    /* Access Control Services */
+#define PCI_EXT_CAP_ID_ARI     0x0E    /* Alternate Routing ID */
+#define PCI_EXT_CAP_ID_ATS     0x0F    /* Address Translation Services */
+#define PCI_EXT_CAP_ID_SRIOV   0x10    /* Single Root I/O Virtualization */
+#define PCI_EXT_CAP_ID_MRIOV   0x11    /* Multi Root I/O Virtualization */
+#define PCI_EXT_CAP_ID_MCAST   0x12    /* Multicast */
+#define PCI_EXT_CAP_ID_PRI     0x13    /* Page Request Interface */
+#define PCI_EXT_CAP_ID_AMD_XXX 0x14    /* Reserved for AMD */
+#define PCI_EXT_CAP_ID_REBAR   0x15    /* Resizable BAR */
+#define PCI_EXT_CAP_ID_DPA     0x16    /* Dynamic Power Allocation */
+#define PCI_EXT_CAP_ID_TPH     0x17    /* TPH Requester */
+#define PCI_EXT_CAP_ID_LTR     0x18    /* Latency Tolerance Reporting */
+#define PCI_EXT_CAP_ID_SECPCI  0x19    /* Secondary PCIe Capability */
+#define PCI_EXT_CAP_ID_PMUX    0x1A    /* Protocol Multiplexing */
+#define PCI_EXT_CAP_ID_PASID   0x1B    /* Process Address Space ID */
+#define PCI_EXT_CAP_ID_MAX     PCI_EXT_CAP_ID_PASID
+
+#define PCI_EXT_CAP_DSN_SIZEOF 12
+#define PCI_EXT_CAP_MCAST_ENDPOINT_SIZEOF 40
+
+/* Advanced Error Reporting */
+#define PCI_ERR_UNCOR_STATUS   4       /* Uncorrectable Error Status */
+#define  PCI_ERR_UNC_UND       0x00000001      /* Undefined */
+#define  PCI_ERR_UNC_DLP       0x00000010      /* Data Link Protocol */
+#define  PCI_ERR_UNC_SURPDN    0x00000020      /* Surprise Down */
+#define  PCI_ERR_UNC_POISON_TLP        0x00001000      /* Poisoned TLP */
+#define  PCI_ERR_UNC_FCP       0x00002000      /* Flow Control Protocol */
+#define  PCI_ERR_UNC_COMP_TIME 0x00004000      /* Completion Timeout */
+#define  PCI_ERR_UNC_COMP_ABORT        0x00008000      /* Completer Abort */
+#define  PCI_ERR_UNC_UNX_COMP  0x00010000      /* Unexpected Completion */
+#define  PCI_ERR_UNC_RX_OVER   0x00020000      /* Receiver Overflow */
+#define  PCI_ERR_UNC_MALF_TLP  0x00040000      /* Malformed TLP */
+#define  PCI_ERR_UNC_ECRC      0x00080000      /* ECRC Error Status */
+#define  PCI_ERR_UNC_UNSUP     0x00100000      /* Unsupported Request */
+#define  PCI_ERR_UNC_ACSV      0x00200000      /* ACS Violation */
+#define  PCI_ERR_UNC_INTN      0x00400000      /* internal error */
+#define  PCI_ERR_UNC_MCBTLP    0x00800000      /* MC blocked TLP */
+#define  PCI_ERR_UNC_ATOMEG    0x01000000      /* Atomic egress blocked */
+#define  PCI_ERR_UNC_TLPPRE    0x02000000      /* TLP prefix blocked */
+#define PCI_ERR_UNCOR_MASK     8       /* Uncorrectable Error Mask */
+       /* Same bits as above */
+#define PCI_ERR_UNCOR_SEVER    12      /* Uncorrectable Error Severity */
+       /* Same bits as above */
+#define PCI_ERR_COR_STATUS     16      /* Correctable Error Status */
+#define  PCI_ERR_COR_RCVR      0x00000001      /* Receiver Error Status */
+#define  PCI_ERR_COR_BAD_TLP   0x00000040      /* Bad TLP Status */
+#define  PCI_ERR_COR_BAD_DLLP  0x00000080      /* Bad DLLP Status */
+#define  PCI_ERR_COR_REP_ROLL  0x00000100      /* REPLAY_NUM Rollover */
+#define  PCI_ERR_COR_REP_TIMER 0x00001000      /* Replay Timer Timeout */
+#define  PCI_ERR_COR_ADV_NFAT  0x00002000      /* Advisory Non-Fatal */
+#define  PCI_ERR_COR_INTERNAL  0x00004000      /* Corrected Internal */
+#define  PCI_ERR_COR_LOG_OVER  0x00008000      /* Header Log Overflow */
+#define PCI_ERR_COR_MASK       20      /* Correctable Error Mask */
+       /* Same bits as above */
+#define PCI_ERR_CAP            24      /* Advanced Error Capabilities */
+#define  PCI_ERR_CAP_FEP(x)    ((x) & 31)      /* First Error Pointer */
+#define  PCI_ERR_CAP_ECRC_GENC 0x00000020      /* ECRC Generation Capable */
+#define  PCI_ERR_CAP_ECRC_GENE 0x00000040      /* ECRC Generation Enable */
+#define  PCI_ERR_CAP_ECRC_CHKC 0x00000080      /* ECRC Check Capable */
+#define  PCI_ERR_CAP_ECRC_CHKE 0x00000100      /* ECRC Check Enable */
+#define PCI_ERR_HEADER_LOG     28      /* Header Log Register (16 bytes) */
+#define PCI_ERR_ROOT_COMMAND   44      /* Root Error Command */
+/* Correctable Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_COR_EN                0x00000001
+/* Non-fatal Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_NONFATAL_EN   0x00000002
+/* Fatal Err Reporting Enable */
+#define PCI_ERR_ROOT_CMD_FATAL_EN      0x00000004
+#define PCI_ERR_ROOT_STATUS    48
+#define PCI_ERR_ROOT_COR_RCV           0x00000001      /* ERR_COR Received */
+/* Multi ERR_COR Received */
+#define PCI_ERR_ROOT_MULTI_COR_RCV     0x00000002
+/* ERR_FATAL/NONFATAL Received */
+#define PCI_ERR_ROOT_UNCOR_RCV         0x00000004
+/* Multi ERR_FATAL/NONFATAL Received */
+#define PCI_ERR_ROOT_MULTI_UNCOR_RCV   0x00000008
+#define PCI_ERR_ROOT_FIRST_FATAL       0x00000010      /* First Fatal */
+#define PCI_ERR_ROOT_NONFATAL_RCV      0x00000020      /* Non-Fatal Received */
+#define PCI_ERR_ROOT_FATAL_RCV         0x00000040      /* Fatal Received */
+#define PCI_ERR_ROOT_ERR_SRC   52      /* Error Source Identification */
+
+/* Virtual Channel */
+#define PCI_VC_PORT_CAP1       4
+#define  PCI_VC_CAP1_EVCC      0x00000007      /* extended VC count */
+#define  PCI_VC_CAP1_LPEVCC    0x00000070      /* low prio extended VC count */
+#define  PCI_VC_CAP1_ARB_SIZE  0x00000c00
+#define PCI_VC_PORT_CAP2       8
+#define  PCI_VC_CAP2_32_PHASE          0x00000002
+#define  PCI_VC_CAP2_64_PHASE          0x00000004
+#define  PCI_VC_CAP2_128_PHASE         0x00000008
+#define  PCI_VC_CAP2_ARB_OFF           0xff000000
+#define PCI_VC_PORT_CTRL       12
+#define  PCI_VC_PORT_CTRL_LOAD_TABLE   0x00000001
+#define PCI_VC_PORT_STATUS     14
+#define  PCI_VC_PORT_STATUS_TABLE      0x00000001
+#define PCI_VC_RES_CAP         16
+#define  PCI_VC_RES_CAP_32_PHASE       0x00000002
+#define  PCI_VC_RES_CAP_64_PHASE       0x00000004
+#define  PCI_VC_RES_CAP_128_PHASE      0x00000008
+#define  PCI_VC_RES_CAP_128_PHASE_TB   0x00000010
+#define  PCI_VC_RES_CAP_256_PHASE      0x00000020
+#define  PCI_VC_RES_CAP_ARB_OFF                0xff000000
+#define PCI_VC_RES_CTRL                20
+#define  PCI_VC_RES_CTRL_LOAD_TABLE    0x00010000
+#define  PCI_VC_RES_CTRL_ARB_SELECT    0x000e0000
+#define  PCI_VC_RES_CTRL_ID            0x07000000
+#define  PCI_VC_RES_CTRL_ENABLE                0x80000000
+#define PCI_VC_RES_STATUS      26
+#define  PCI_VC_RES_STATUS_TABLE       0x00000001
+#define  PCI_VC_RES_STATUS_NEGO                0x00000002
+#define PCI_CAP_VC_BASE_SIZEOF         0x10
+#define PCI_CAP_VC_PER_VC_SIZEOF       0x0C
+
+/* Power Budgeting */
+#define PCI_PWR_DSR            4       /* Data Select Register */
+#define PCI_PWR_DATA           8       /* Data Register */
+#define  PCI_PWR_DATA_BASE(x)  ((x) & 0xff)        /* Base Power */
+#define  PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3)    /* Data Scale */
+#define  PCI_PWR_DATA_PM_SUB(x)        (((x) >> 10) & 7)   /* PM Sub State */
+#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
+#define  PCI_PWR_DATA_TYPE(x)  (((x) >> 15) & 7)   /* Type */
+#define  PCI_PWR_DATA_RAIL(x)  (((x) >> 18) & 7)   /* Power Rail */
+#define PCI_PWR_CAP            12      /* Capability */
+#define  PCI_PWR_CAP_BUDGET(x) ((x) & 1)       /* Included in system budget */
+#define PCI_EXT_CAP_PWR_SIZEOF 16
+
+/* Vendor-Specific (VSEC, PCI_EXT_CAP_ID_VNDR) */
+#define PCI_VNDR_HEADER                4       /* Vendor-Specific Header */
+#define  PCI_VNDR_HEADER_ID(x) ((x) & 0xffff)
+#define  PCI_VNDR_HEADER_REV(x)        (((x) >> 16) & 0xf)
+#define  PCI_VNDR_HEADER_LEN(x)        (((x) >> 20) & 0xfff)
+
+/*
+ * HyperTransport sub capability types
+ *
+ * Unfortunately there are both 3 bit and 5 bit capability types defined
+ * in the HT spec, catering for that is a little messy. You probably don't
+ * want to use these directly, just use pci_find_ht_capability() and it
+ * will do the right thing for you.
+ */
+#define HT_3BIT_CAP_MASK       0xE0
+#define HT_CAPTYPE_SLAVE       0x00    /* Slave/Primary link configuration */
+#define HT_CAPTYPE_HOST                0x20    /* Host/Secondary link configuration */
+
+#define HT_5BIT_CAP_MASK       0xF8
+#define HT_CAPTYPE_IRQ         0x80    /* IRQ Configuration */
+#define HT_CAPTYPE_REMAPPING_40        0xA0    /* 40 bit address remapping */
+#define HT_CAPTYPE_REMAPPING_64 0xA2   /* 64 bit address remapping */
+#define HT_CAPTYPE_UNITID_CLUMP        0x90    /* Unit ID clumping */
+#define HT_CAPTYPE_EXTCONF     0x98    /* Extended Configuration Space Access */
+#define HT_CAPTYPE_MSI_MAPPING 0xA8    /* MSI Mapping Capability */
+#define  HT_MSI_FLAGS          0x02            /* Offset to flags */
+#define  HT_MSI_FLAGS_ENABLE   0x1             /* Mapping enable */
+#define  HT_MSI_FLAGS_FIXED    0x2             /* Fixed mapping only */
+#define  HT_MSI_FIXED_ADDR     0x00000000FEE00000ULL   /* Fixed addr */
+#define  HT_MSI_ADDR_LO                0x04            /* Offset to low addr bits */
+#define  HT_MSI_ADDR_LO_MASK   0xFFF00000      /* Low address bit mask */
+#define  HT_MSI_ADDR_HI                0x08            /* Offset to high addr bits */
+#define HT_CAPTYPE_DIRECT_ROUTE        0xB0    /* Direct routing configuration */
+#define HT_CAPTYPE_VCSET       0xB8    /* Virtual Channel configuration */
+#define HT_CAPTYPE_ERROR_RETRY 0xC0    /* Retry on error configuration */
+#define HT_CAPTYPE_GEN3                0xD0    /* Generation 3 HyperTransport configuration */
+#define HT_CAPTYPE_PM          0xE0    /* HyperTransport power management configuration */
+#define HT_CAP_SIZEOF_LONG     28      /* slave & primary */
+#define HT_CAP_SIZEOF_SHORT    24      /* host & secondary */
+
+/* Alternative Routing-ID Interpretation */
+#define PCI_ARI_CAP            0x04    /* ARI Capability Register */
+#define  PCI_ARI_CAP_MFVC      0x0001  /* MFVC Function Groups Capability */
+#define  PCI_ARI_CAP_ACS       0x0002  /* ACS Function Groups Capability */
+#define  PCI_ARI_CAP_NFN(x)    (((x) >> 8) & 0xff) /* Next Function Number */
+#define PCI_ARI_CTRL           0x06    /* ARI Control Register */
+#define  PCI_ARI_CTRL_MFVC     0x0001  /* MFVC Function Groups Enable */
+#define  PCI_ARI_CTRL_ACS      0x0002  /* ACS Function Groups Enable */
+#define  PCI_ARI_CTRL_FG(x)    (((x) >> 4) & 7) /* Function Group */
+#define PCI_EXT_CAP_ARI_SIZEOF 8
+
+/* Address Translation Service */
+#define PCI_ATS_CAP            0x04    /* ATS Capability Register */
+#define  PCI_ATS_CAP_QDEP(x)   ((x) & 0x1f)    /* Invalidate Queue Depth */
+#define  PCI_ATS_MAX_QDEP      32      /* Max Invalidate Queue Depth */
+#define PCI_ATS_CTRL           0x06    /* ATS Control Register */
+#define  PCI_ATS_CTRL_ENABLE   0x8000  /* ATS Enable */
+#define  PCI_ATS_CTRL_STU(x)   ((x) & 0x1f)    /* Smallest Translation Unit */
+#define  PCI_ATS_MIN_STU       12      /* shift of minimum STU block */
+#define PCI_EXT_CAP_ATS_SIZEOF 8
+
+/* Page Request Interface */
+#define PCI_PRI_CTRL           0x04    /* PRI control register */
+#define  PCI_PRI_CTRL_ENABLE   0x01    /* Enable */
+#define  PCI_PRI_CTRL_RESET    0x02    /* Reset */
+#define PCI_PRI_STATUS         0x06    /* PRI status register */
+#define  PCI_PRI_STATUS_RF     0x001   /* Response Failure */
+#define  PCI_PRI_STATUS_UPRGI  0x002   /* Unexpected PRG index */
+#define  PCI_PRI_STATUS_STOPPED        0x100   /* PRI Stopped */
+#define PCI_PRI_MAX_REQ                0x08    /* PRI max reqs supported */
+#define PCI_PRI_ALLOC_REQ      0x0c    /* PRI max reqs allowed */
+#define PCI_EXT_CAP_PRI_SIZEOF 16
+
+/* Process Address Space ID */
+#define PCI_PASID_CAP          0x04    /* PASID feature register */
+#define  PCI_PASID_CAP_EXEC    0x02    /* Exec permissions Supported */
+#define  PCI_PASID_CAP_PRIV    0x04    /* Privilege Mode Supported */
+#define PCI_PASID_CTRL         0x06    /* PASID control register */
+#define  PCI_PASID_CTRL_ENABLE 0x01    /* Enable bit */
+#define  PCI_PASID_CTRL_EXEC   0x02    /* Exec permissions Enable */
+#define  PCI_PASID_CTRL_PRIV   0x04    /* Privilege Mode Enable */
+#define PCI_EXT_CAP_PASID_SIZEOF       8
+
+/* Single Root I/O Virtualization */
+#define PCI_SRIOV_CAP          0x04    /* SR-IOV Capabilities */
+#define  PCI_SRIOV_CAP_VFM     0x01    /* VF Migration Capable */
+#define  PCI_SRIOV_CAP_INTR(x) ((x) >> 21) /* Interrupt Message Number */
+#define PCI_SRIOV_CTRL         0x08    /* SR-IOV Control */
+#define  PCI_SRIOV_CTRL_VFE    0x01    /* VF Enable */
+#define  PCI_SRIOV_CTRL_VFM    0x02    /* VF Migration Enable */
+#define  PCI_SRIOV_CTRL_INTR   0x04    /* VF Migration Interrupt Enable */
+#define  PCI_SRIOV_CTRL_MSE    0x08    /* VF Memory Space Enable */
+#define  PCI_SRIOV_CTRL_ARI    0x10    /* ARI Capable Hierarchy */
+#define PCI_SRIOV_STATUS       0x0a    /* SR-IOV Status */
+#define  PCI_SRIOV_STATUS_VFM  0x01    /* VF Migration Status */
+#define PCI_SRIOV_INITIAL_VF   0x0c    /* Initial VFs */
+#define PCI_SRIOV_TOTAL_VF     0x0e    /* Total VFs */
+#define PCI_SRIOV_NUM_VF       0x10    /* Number of VFs */
+#define PCI_SRIOV_FUNC_LINK    0x12    /* Function Dependency Link */
+#define PCI_SRIOV_VF_OFFSET    0x14    /* First VF Offset */
+#define PCI_SRIOV_VF_STRIDE    0x16    /* Following VF Stride */
+#define PCI_SRIOV_VF_DID       0x1a    /* VF Device ID */
+#define PCI_SRIOV_SUP_PGSIZE   0x1c    /* Supported Page Sizes */
+#define PCI_SRIOV_SYS_PGSIZE   0x20    /* System Page Size */
+#define PCI_SRIOV_BAR          0x24    /* VF BAR0 */
+#define  PCI_SRIOV_NUM_BARS    6       /* Number of VF BARs */
+#define PCI_SRIOV_VFM          0x3c    /* VF Migration State Array Offset*/
+#define  PCI_SRIOV_VFM_BIR(x)  ((x) & 7)       /* State BIR */
+#define  PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7)    /* State Offset */
+#define  PCI_SRIOV_VFM_UA      0x0     /* Inactive.Unavailable */
+#define  PCI_SRIOV_VFM_MI      0x1     /* Dormant.MigrateIn */
+#define  PCI_SRIOV_VFM_MO      0x2     /* Active.MigrateOut */
+#define  PCI_SRIOV_VFM_AV      0x3     /* Active.Available */
+#define PCI_EXT_CAP_SRIOV_SIZEOF 64
+
+#define PCI_LTR_MAX_SNOOP_LAT  0x4
+#define PCI_LTR_MAX_NOSNOOP_LAT        0x6
+#define  PCI_LTR_VALUE_MASK    0x000003ff
+#define  PCI_LTR_SCALE_MASK    0x00001c00
+#define  PCI_LTR_SCALE_SHIFT   10
+#define PCI_EXT_CAP_LTR_SIZEOF 8
+
+/* Access Control Service */
+#define PCI_ACS_CAP            0x04    /* ACS Capability Register */
+#define  PCI_ACS_SV            0x01    /* Source Validation */
+#define  PCI_ACS_TB            0x02    /* Translation Blocking */
+#define  PCI_ACS_RR            0x04    /* P2P Request Redirect */
+#define  PCI_ACS_CR            0x08    /* P2P Completion Redirect */
+#define  PCI_ACS_UF            0x10    /* Upstream Forwarding */
+#define  PCI_ACS_EC            0x20    /* P2P Egress Control */
+#define  PCI_ACS_DT            0x40    /* Direct Translated P2P */
+#define PCI_ACS_EGRESS_BITS    0x05    /* ACS Egress Control Vector Size */
+#define PCI_ACS_CTRL           0x06    /* ACS Control Register */
+#define PCI_ACS_EGRESS_CTL_V   0x08    /* ACS Egress Control Vector */
+
+#define PCI_VSEC_HDR           4       /* extended cap - vendor-specific */
+#define  PCI_VSEC_HDR_LEN_SHIFT        20      /* shift for length field */
+
+/* SATA capability */
+#define PCI_SATA_REGS          4       /* SATA REGs specifier */
+#define  PCI_SATA_REGS_MASK    0xF     /* location - BAR#/inline */
+#define  PCI_SATA_REGS_INLINE  0xF     /* REGS in config space */
+#define PCI_SATA_SIZEOF_SHORT  8
+#define PCI_SATA_SIZEOF_LONG   16
+
+/* Resizable BARs */
+#define PCI_REBAR_CTRL         8       /* control register */
+#define  PCI_REBAR_CTRL_NBAR_MASK      (7 << 5)        /* mask for # bars */
+#define  PCI_REBAR_CTRL_NBAR_SHIFT     5       /* shift for # bars */
+
+/* Dynamic Power Allocation */
+#define PCI_DPA_CAP            4       /* capability register */
+#define  PCI_DPA_CAP_SUBSTATE_MASK     0x1F    /* # substates - 1 */
+#define PCI_DPA_BASE_SIZEOF    16      /* size with 0 substates */
+
+/* TPH Requester */
+#define PCI_TPH_CAP            4       /* capability register */
+#define  PCI_TPH_CAP_LOC_MASK  0x600   /* location mask */
+#define   PCI_TPH_LOC_NONE     0x000   /* no location */
+#define   PCI_TPH_LOC_CAP      0x200   /* in capability */
+#define   PCI_TPH_LOC_MSIX     0x400   /* in MSI-X */
+#define PCI_TPH_CAP_ST_MASK    0x07FF0000      /* st table mask */
+#define PCI_TPH_CAP_ST_SHIFT   16      /* st table shift */
+#define PCI_TPH_BASE_SIZEOF    12      /* size with no st table */
+
+#endif /* LINUX_PCI_REGS_H */
diff --git a/lib/libdss-include/linux/perf_event.h b/lib/libdss-include/linux/perf_event.h
new file mode 100644 (file)
index 0000000..42b9195
--- /dev/null
@@ -0,0 +1,970 @@
+/*
+ * Performance events:
+ *
+ *    Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de>
+ *    Copyright (C) 2008-2011, Red Hat, Inc., Ingo Molnar
+ *    Copyright (C) 2008-2011, Red Hat, Inc., Peter Zijlstra
+ *
+ * Data type definitions, declarations, prototypes.
+ *
+ *    Started by: Thomas Gleixner and Ingo Molnar
+ *
+ * For licencing details see kernel-base/COPYING
+ */
+#ifndef _LINUX_PERF_EVENT_H
+#define _LINUX_PERF_EVENT_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <asm/byteorder.h>
+
+/*
+ * User-space ABI bits:
+ */
+
+/*
+ * attr.type
+ */
+enum perf_type_id {
+       PERF_TYPE_HARDWARE                      = 0,
+       PERF_TYPE_SOFTWARE                      = 1,
+       PERF_TYPE_TRACEPOINT                    = 2,
+       PERF_TYPE_HW_CACHE                      = 3,
+       PERF_TYPE_RAW                           = 4,
+       PERF_TYPE_BREAKPOINT                    = 5,
+
+       PERF_TYPE_MAX,                          /* non-ABI */
+};
+
+/*
+ * Generalized performance event event_id types, used by the
+ * attr.event_id parameter of the sys_perf_event_open()
+ * syscall:
+ */
+enum perf_hw_id {
+       /*
+        * Common hardware events, generalized by the kernel:
+        */
+       PERF_COUNT_HW_CPU_CYCLES                = 0,
+       PERF_COUNT_HW_INSTRUCTIONS              = 1,
+       PERF_COUNT_HW_CACHE_REFERENCES          = 2,
+       PERF_COUNT_HW_CACHE_MISSES              = 3,
+       PERF_COUNT_HW_BRANCH_INSTRUCTIONS       = 4,
+       PERF_COUNT_HW_BRANCH_MISSES             = 5,
+       PERF_COUNT_HW_BUS_CYCLES                = 6,
+       PERF_COUNT_HW_STALLED_CYCLES_FRONTEND   = 7,
+       PERF_COUNT_HW_STALLED_CYCLES_BACKEND    = 8,
+       PERF_COUNT_HW_REF_CPU_CYCLES            = 9,
+
+       PERF_COUNT_HW_MAX,                      /* non-ABI */
+};
+
+/*
+ * Generalized hardware cache events:
+ *
+ *       { L1-D, L1-I, LLC, ITLB, DTLB, BPU, NODE } x
+ *       { read, write, prefetch } x
+ *       { accesses, misses }
+ */
+enum perf_hw_cache_id {
+       PERF_COUNT_HW_CACHE_L1D                 = 0,
+       PERF_COUNT_HW_CACHE_L1I                 = 1,
+       PERF_COUNT_HW_CACHE_LL                  = 2,
+       PERF_COUNT_HW_CACHE_DTLB                = 3,
+       PERF_COUNT_HW_CACHE_ITLB                = 4,
+       PERF_COUNT_HW_CACHE_BPU                 = 5,
+       PERF_COUNT_HW_CACHE_NODE                = 6,
+
+       PERF_COUNT_HW_CACHE_MAX,                /* non-ABI */
+};
+
+enum perf_hw_cache_op_id {
+       PERF_COUNT_HW_CACHE_OP_READ             = 0,
+       PERF_COUNT_HW_CACHE_OP_WRITE            = 1,
+       PERF_COUNT_HW_CACHE_OP_PREFETCH         = 2,
+
+       PERF_COUNT_HW_CACHE_OP_MAX,             /* non-ABI */
+};
+
+enum perf_hw_cache_op_result_id {
+       PERF_COUNT_HW_CACHE_RESULT_ACCESS       = 0,
+       PERF_COUNT_HW_CACHE_RESULT_MISS         = 1,
+
+       PERF_COUNT_HW_CACHE_RESULT_MAX,         /* non-ABI */
+};
+
+/*
+ * Special "software" events provided by the kernel, even if the hardware
+ * does not support performance events. These events measure various
+ * physical and sw events of the kernel (and allow the profiling of them as
+ * well):
+ */
+enum perf_sw_ids {
+       PERF_COUNT_SW_CPU_CLOCK                 = 0,
+       PERF_COUNT_SW_TASK_CLOCK                = 1,
+       PERF_COUNT_SW_PAGE_FAULTS               = 2,
+       PERF_COUNT_SW_CONTEXT_SWITCHES          = 3,
+       PERF_COUNT_SW_CPU_MIGRATIONS            = 4,
+       PERF_COUNT_SW_PAGE_FAULTS_MIN           = 5,
+       PERF_COUNT_SW_PAGE_FAULTS_MAJ           = 6,
+       PERF_COUNT_SW_ALIGNMENT_FAULTS          = 7,
+       PERF_COUNT_SW_EMULATION_FAULTS          = 8,
+       PERF_COUNT_SW_DUMMY                     = 9,
+       PERF_COUNT_SW_BPF_OUTPUT                = 10,
+
+       PERF_COUNT_SW_MAX,                      /* non-ABI */
+};
+
+/*
+ * Bits that can be set in attr.sample_type to request information
+ * in the overflow packets.
+ */
+enum perf_event_sample_format {
+       PERF_SAMPLE_IP                          = 1U << 0,
+       PERF_SAMPLE_TID                         = 1U << 1,
+       PERF_SAMPLE_TIME                        = 1U << 2,
+       PERF_SAMPLE_ADDR                        = 1U << 3,
+       PERF_SAMPLE_READ                        = 1U << 4,
+       PERF_SAMPLE_CALLCHAIN                   = 1U << 5,
+       PERF_SAMPLE_ID                          = 1U << 6,
+       PERF_SAMPLE_CPU                         = 1U << 7,
+       PERF_SAMPLE_PERIOD                      = 1U << 8,
+       PERF_SAMPLE_STREAM_ID                   = 1U << 9,
+       PERF_SAMPLE_RAW                         = 1U << 10,
+       PERF_SAMPLE_BRANCH_STACK                = 1U << 11,
+       PERF_SAMPLE_REGS_USER                   = 1U << 12,
+       PERF_SAMPLE_STACK_USER                  = 1U << 13,
+       PERF_SAMPLE_WEIGHT                      = 1U << 14,
+       PERF_SAMPLE_DATA_SRC                    = 1U << 15,
+       PERF_SAMPLE_IDENTIFIER                  = 1U << 16,
+       PERF_SAMPLE_TRANSACTION                 = 1U << 17,
+       PERF_SAMPLE_REGS_INTR                   = 1U << 18,
+
+       PERF_SAMPLE_MAX = 1U << 19,             /* non-ABI */
+};
+
+/*
+ * values to program into branch_sample_type when PERF_SAMPLE_BRANCH is set
+ *
+ * If the user does not pass priv level information via branch_sample_type,
+ * the kernel uses the event's priv level. Branch and event priv levels do
+ * not have to match. Branch priv level is checked for permissions.
+ *
+ * The branch types can be combined, however BRANCH_ANY covers all types
+ * of branches and therefore it supersedes all the other types.
+ */
+enum perf_branch_sample_type_shift {
+       PERF_SAMPLE_BRANCH_USER_SHIFT           = 0, /* user branches */
+       PERF_SAMPLE_BRANCH_KERNEL_SHIFT         = 1, /* kernel branches */
+       PERF_SAMPLE_BRANCH_HV_SHIFT             = 2, /* hypervisor branches */
+
+       PERF_SAMPLE_BRANCH_ANY_SHIFT            = 3, /* any branch types */
+       PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT       = 4, /* any call branch */
+       PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT     = 5, /* any return branch */
+       PERF_SAMPLE_BRANCH_IND_CALL_SHIFT       = 6, /* indirect calls */
+       PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT       = 7, /* transaction aborts */
+       PERF_SAMPLE_BRANCH_IN_TX_SHIFT          = 8, /* in transaction */
+       PERF_SAMPLE_BRANCH_NO_TX_SHIFT          = 9, /* not in transaction */
+       PERF_SAMPLE_BRANCH_COND_SHIFT           = 10, /* conditional branches */
+
+       PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT     = 11, /* call/ret stack */
+       PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT       = 12, /* indirect jumps */
+       PERF_SAMPLE_BRANCH_CALL_SHIFT           = 13, /* direct call */
+
+       PERF_SAMPLE_BRANCH_MAX_SHIFT            /* non-ABI */
+};
+
+enum perf_branch_sample_type {
+       PERF_SAMPLE_BRANCH_USER         = 1U << PERF_SAMPLE_BRANCH_USER_SHIFT,
+       PERF_SAMPLE_BRANCH_KERNEL       = 1U << PERF_SAMPLE_BRANCH_KERNEL_SHIFT,
+       PERF_SAMPLE_BRANCH_HV           = 1U << PERF_SAMPLE_BRANCH_HV_SHIFT,
+
+       PERF_SAMPLE_BRANCH_ANY          = 1U << PERF_SAMPLE_BRANCH_ANY_SHIFT,
+       PERF_SAMPLE_BRANCH_ANY_CALL     = 1U << PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT,
+       PERF_SAMPLE_BRANCH_ANY_RETURN   = 1U << PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT,
+       PERF_SAMPLE_BRANCH_IND_CALL     = 1U << PERF_SAMPLE_BRANCH_IND_CALL_SHIFT,
+       PERF_SAMPLE_BRANCH_ABORT_TX     = 1U << PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_IN_TX        = 1U << PERF_SAMPLE_BRANCH_IN_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_NO_TX        = 1U << PERF_SAMPLE_BRANCH_NO_TX_SHIFT,
+       PERF_SAMPLE_BRANCH_COND         = 1U << PERF_SAMPLE_BRANCH_COND_SHIFT,
+
+       PERF_SAMPLE_BRANCH_CALL_STACK   = 1U << PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT,
+       PERF_SAMPLE_BRANCH_IND_JUMP     = 1U << PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT,
+       PERF_SAMPLE_BRANCH_CALL         = 1U << PERF_SAMPLE_BRANCH_CALL_SHIFT,
+
+       PERF_SAMPLE_BRANCH_MAX          = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
+};
+
+#define PERF_SAMPLE_BRANCH_PLM_ALL \
+       (PERF_SAMPLE_BRANCH_USER|\
+        PERF_SAMPLE_BRANCH_KERNEL|\
+        PERF_SAMPLE_BRANCH_HV)
+
+/*
+ * Values to determine ABI of the registers dump.
+ */
+enum perf_sample_regs_abi {
+       PERF_SAMPLE_REGS_ABI_NONE       = 0,
+       PERF_SAMPLE_REGS_ABI_32         = 1,
+       PERF_SAMPLE_REGS_ABI_64         = 2,
+};
+
+/*
+ * Values for the memory transaction event qualifier, mostly for
+ * abort events. Multiple bits can be set.
+ */
+enum {
+       PERF_TXN_ELISION        = (1 << 0), /* From elision */
+       PERF_TXN_TRANSACTION    = (1 << 1), /* From transaction */
+       PERF_TXN_SYNC           = (1 << 2), /* Instruction is related */
+       PERF_TXN_ASYNC          = (1 << 3), /* Instruction not related */
+       PERF_TXN_RETRY          = (1 << 4), /* Retry possible */
+       PERF_TXN_CONFLICT       = (1 << 5), /* Conflict abort */
+       PERF_TXN_CAPACITY_WRITE = (1 << 6), /* Capacity write abort */
+       PERF_TXN_CAPACITY_READ  = (1 << 7), /* Capacity read abort */
+
+       PERF_TXN_MAX            = (1 << 8), /* non-ABI */
+
+       /* bits 32..63 are reserved for the abort code */
+
+       PERF_TXN_ABORT_MASK  = (0xffffffffULL << 32),
+       PERF_TXN_ABORT_SHIFT = 32,
+};
+
+/*
+ * The format of the data returned by read() on a perf event fd,
+ * as specified by attr.read_format:
+ *
+ * struct read_format {
+ *     { u64           value;
+ *       { u64         time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED
+ *       { u64         time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING
+ *       { u64         id;           } && PERF_FORMAT_ID
+ *     } && !PERF_FORMAT_GROUP
+ *
+ *     { u64           nr;
+ *       { u64         time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED
+ *       { u64         time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING
+ *       { u64         value;
+ *         { u64       id;           } && PERF_FORMAT_ID
+ *       }             cntr[nr];
+ *     } && PERF_FORMAT_GROUP
+ * };
+ */
+enum perf_event_read_format {
+       PERF_FORMAT_TOTAL_TIME_ENABLED          = 1U << 0,
+       PERF_FORMAT_TOTAL_TIME_RUNNING          = 1U << 1,
+       PERF_FORMAT_ID                          = 1U << 2,
+       PERF_FORMAT_GROUP                       = 1U << 3,
+
+       PERF_FORMAT_MAX = 1U << 4,              /* non-ABI */
+};
+
+#define PERF_ATTR_SIZE_VER0    64      /* sizeof first published struct */
+#define PERF_ATTR_SIZE_VER1    72      /* add: config2 */
+#define PERF_ATTR_SIZE_VER2    80      /* add: branch_sample_type */
+#define PERF_ATTR_SIZE_VER3    96      /* add: sample_regs_user */
+                                       /* add: sample_stack_user */
+#define PERF_ATTR_SIZE_VER4    104     /* add: sample_regs_intr */
+#define PERF_ATTR_SIZE_VER5    112     /* add: aux_watermark */
+
+/*
+ * Hardware event_id to monitor via a performance monitoring event:
+ */
+struct perf_event_attr {
+
+       /*
+        * Major type: hardware/software/tracepoint/etc.
+        */
+       __u32                   type;
+
+       /*
+        * Size of the attr structure, for fwd/bwd compat.
+        */
+       __u32                   size;
+
+       /*
+        * Type specific configuration information.
+        */
+       __u64                   config;
+
+       union {
+               __u64           sample_period;
+               __u64           sample_freq;
+       };
+
+       __u64                   sample_type;
+       __u64                   read_format;
+
+       __u64                   disabled       :  1, /* off by default        */
+                               inherit        :  1, /* children inherit it   */
+                               pinned         :  1, /* must always be on PMU */
+                               exclusive      :  1, /* only group on PMU     */
+                               exclude_user   :  1, /* don't count user      */
+                               exclude_kernel :  1, /* ditto kernel          */
+                               exclude_hv     :  1, /* ditto hypervisor      */
+                               exclude_idle   :  1, /* don't count when idle */
+                               mmap           :  1, /* include mmap data     */
+                               comm           :  1, /* include comm data     */
+                               freq           :  1, /* use freq, not period  */
+                               inherit_stat   :  1, /* per task counts       */
+                               enable_on_exec :  1, /* next exec enables     */
+                               task           :  1, /* trace fork/exit       */
+                               watermark      :  1, /* wakeup_watermark      */
+                               /*
+                                * precise_ip:
+                                *
+                                *  0 - SAMPLE_IP can have arbitrary skid
+                                *  1 - SAMPLE_IP must have constant skid
+                                *  2 - SAMPLE_IP requested to have 0 skid
+                                *  3 - SAMPLE_IP must have 0 skid
+                                *
+                                *  See also PERF_RECORD_MISC_EXACT_IP
+                                */
+                               precise_ip     :  2, /* skid constraint       */
+                               mmap_data      :  1, /* non-exec mmap data    */
+                               sample_id_all  :  1, /* sample_type all events */
+
+                               exclude_host   :  1, /* don't count in host   */
+                               exclude_guest  :  1, /* don't count in guest  */
+
+                               exclude_callchain_kernel : 1, /* exclude kernel callchains */
+                               exclude_callchain_user   : 1, /* exclude user callchains */
+                               mmap2          :  1, /* include mmap with inode data     */
+                               comm_exec      :  1, /* flag comm events that are due to an exec */
+                               use_clockid    :  1, /* use @clockid for time fields */
+                               context_switch :  1, /* context switch data */
+                               __reserved_1   : 37;
+
+       union {
+               __u32           wakeup_events;    /* wakeup every n events */
+               __u32           wakeup_watermark; /* bytes before wakeup   */
+       };
+
+       __u32                   bp_type;
+       union {
+               __u64           bp_addr;
+               __u64           config1; /* extension of config */
+       };
+       union {
+               __u64           bp_len;
+               __u64           config2; /* extension of config1 */
+       };
+       __u64   branch_sample_type; /* enum perf_branch_sample_type */
+
+       /*
+        * Defines set of user regs to dump on samples.
+        * See asm/perf_regs.h for details.
+        */
+       __u64   sample_regs_user;
+
+       /*
+        * Defines size of the user stack to dump on samples.
+        */
+       __u32   sample_stack_user;
+
+       __s32   clockid;
+       /*
+        * Defines set of regs to dump for each sample
+        * state captured on:
+        *  - precise = 0: PMU interrupt
+        *  - precise > 0: sampled instruction
+        *
+        * See asm/perf_regs.h for details.
+        */
+       __u64   sample_regs_intr;
+
+       /*
+        * Wakeup watermark for AUX area
+        */
+       __u32   aux_watermark;
+       __u32   __reserved_2;   /* align to __u64 */
+};
+
+#define perf_flags(attr)       (*(&(attr)->read_format + 1))
+
+/*
+ * Ioctls that can be done on a perf event fd:
+ */
+#define PERF_EVENT_IOC_ENABLE          _IO ('$', 0)
+#define PERF_EVENT_IOC_DISABLE         _IO ('$', 1)
+#define PERF_EVENT_IOC_REFRESH         _IO ('$', 2)
+#define PERF_EVENT_IOC_RESET           _IO ('$', 3)
+#define PERF_EVENT_IOC_PERIOD          _IOW('$', 4, __u64)
+#define PERF_EVENT_IOC_SET_OUTPUT      _IO ('$', 5)
+#define PERF_EVENT_IOC_SET_FILTER      _IOW('$', 6, char *)
+#define PERF_EVENT_IOC_ID              _IOR('$', 7, __u64 *)
+#define PERF_EVENT_IOC_SET_BPF         _IOW('$', 8, __u32)
+
+enum perf_event_ioc_flags {
+       PERF_IOC_FLAG_GROUP             = 1U << 0,
+};
+
+/*
+ * Structure of the page that can be mapped via mmap
+ */
+struct perf_event_mmap_page {
+       __u32   version;                /* version number of this structure */
+       __u32   compat_version;         /* lowest version this is compat with */
+
+       /*
+        * Bits needed to read the hw events in user-space.
+        *
+        *   u32 seq, time_mult, time_shift, index, width;
+        *   u64 count, enabled, running;
+        *   u64 cyc, time_offset;
+        *   s64 pmc = 0;
+        *
+        *   do {
+        *     seq = pc->lock;
+        *     barrier()
+        *
+        *     enabled = pc->time_enabled;
+        *     running = pc->time_running;
+        *
+        *     if (pc->cap_usr_time && enabled != running) {
+        *       cyc = rdtsc();
+        *       time_offset = pc->time_offset;
+        *       time_mult   = pc->time_mult;
+        *       time_shift  = pc->time_shift;
+        *     }
+        *
+        *     index = pc->index;
+        *     count = pc->offset;
+        *     if (pc->cap_user_rdpmc && index) {
+        *       width = pc->pmc_width;
+        *       pmc = rdpmc(index - 1);
+        *     }
+        *
+        *     barrier();
+        *   } while (pc->lock != seq);
+        *
+        * NOTE: for obvious reason this only works on self-monitoring
+        *       processes.
+        */
+       __u32   lock;                   /* seqlock for synchronization */
+       __u32   index;                  /* hardware event identifier */
+       __s64   offset;                 /* add to hardware event value */
+       __u64   time_enabled;           /* time event active */
+       __u64   time_running;           /* time event on cpu */
+       union {
+               __u64   capabilities;
+               struct {
+                       __u64   cap_bit0                : 1, /* Always 0, deprecated, see commit 860f085b74e9 */
+                               cap_bit0_is_deprecated  : 1, /* Always 1, signals that bit 0 is zero */
+
+                               cap_user_rdpmc          : 1, /* The RDPMC instruction can be used to read counts */
+                               cap_user_time           : 1, /* The time_* fields are used */
+                               cap_user_time_zero      : 1, /* The time_zero field is used */
+                               cap_____res             : 59;
+               };
+       };
+
+       /*
+        * If cap_user_rdpmc this field provides the bit-width of the value
+        * read using the rdpmc() or equivalent instruction. This can be used
+        * to sign extend the result like:
+        *
+        *   pmc <<= 64 - width;
+        *   pmc >>= 64 - width; // signed shift right
+        *   count += pmc;
+        */
+       __u16   pmc_width;
+
+       /*
+        * If cap_usr_time the below fields can be used to compute the time
+        * delta since time_enabled (in ns) using rdtsc or similar.
+        *
+        *   u64 quot, rem;
+        *   u64 delta;
+        *
+        *   quot = (cyc >> time_shift);
+        *   rem = cyc & (((u64)1 << time_shift) - 1);
+        *   delta = time_offset + quot * time_mult +
+        *              ((rem * time_mult) >> time_shift);
+        *
+        * Where time_offset,time_mult,time_shift and cyc are read in the
+        * seqcount loop described above. This delta can then be added to
+        * enabled and possible running (if index), improving the scaling:
+        *
+        *   enabled += delta;
+        *   if (index)
+        *     running += delta;
+        *
+        *   quot = count / running;
+        *   rem  = count % running;
+        *   count = quot * enabled + (rem * enabled) / running;
+        */
+       __u16   time_shift;
+       __u32   time_mult;
+       __u64   time_offset;
+       /*
+        * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated
+        * from sample timestamps.
+        *
+        *   time = timestamp - time_zero;
+        *   quot = time / time_mult;
+        *   rem  = time % time_mult;
+        *   cyc = (quot << time_shift) + (rem << time_shift) / time_mult;
+        *
+        * And vice versa:
+        *
+        *   quot = cyc >> time_shift;
+        *   rem  = cyc & (((u64)1 << time_shift) - 1);
+        *   timestamp = time_zero + quot * time_mult +
+        *               ((rem * time_mult) >> time_shift);
+        */
+       __u64   time_zero;
+       __u32   size;                   /* Header size up to __reserved[] fields. */
+
+               /*
+                * Hole for extension of the self monitor capabilities
+                */
+
+       __u8    __reserved[118*8+4];    /* align to 1k. */
+
+       /*
+        * Control data for the mmap() data buffer.
+        *
+        * User-space reading the @data_head value should issue an smp_rmb(),
+        * after reading this value.
+        *
+        * When the mapping is PROT_WRITE the @data_tail value should be
+        * written by userspace to reflect the last read data, after issueing
+        * an smp_mb() to separate the data read from the ->data_tail store.
+        * In this case the kernel will not over-write unread data.
+        *
+        * See perf_output_put_handle() for the data ordering.
+        *
+        * data_{offset,size} indicate the location and size of the perf record
+        * buffer within the mmapped area.
+        */
+       __u64   data_head;              /* head in the data section */
+       __u64   data_tail;              /* user-space written tail */
+       __u64   data_offset;            /* where the buffer starts */
+       __u64   data_size;              /* data buffer size */
+
+       /*
+        * AUX area is defined by aux_{offset,size} fields that should be set
+        * by the userspace, so that
+        *
+        *   aux_offset >= data_offset + data_size
+        *
+        * prior to mmap()ing it. Size of the mmap()ed area should be aux_size.
+        *
+        * Ring buffer pointers aux_{head,tail} have the same semantics as
+        * data_{head,tail} and same ordering rules apply.
+        */
+       __u64   aux_head;
+       __u64   aux_tail;
+       __u64   aux_offset;
+       __u64   aux_size;
+};
+
+#define PERF_RECORD_MISC_CPUMODE_MASK          (7 << 0)
+#define PERF_RECORD_MISC_CPUMODE_UNKNOWN       (0 << 0)
+#define PERF_RECORD_MISC_KERNEL                        (1 << 0)
+#define PERF_RECORD_MISC_USER                  (2 << 0)
+#define PERF_RECORD_MISC_HYPERVISOR            (3 << 0)
+#define PERF_RECORD_MISC_GUEST_KERNEL          (4 << 0)
+#define PERF_RECORD_MISC_GUEST_USER            (5 << 0)
+
+/*
+ * Indicates that /proc/PID/maps parsing are truncated by time out.
+ */
+#define PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT        (1 << 12)
+/*
+ * PERF_RECORD_MISC_MMAP_DATA and PERF_RECORD_MISC_COMM_EXEC are used on
+ * different events so can reuse the same bit position.
+ * Ditto PERF_RECORD_MISC_SWITCH_OUT.
+ */
+#define PERF_RECORD_MISC_MMAP_DATA             (1 << 13)
+#define PERF_RECORD_MISC_COMM_EXEC             (1 << 13)
+#define PERF_RECORD_MISC_SWITCH_OUT            (1 << 13)
+/*
+ * Indicates that the content of PERF_SAMPLE_IP points to
+ * the actual instruction that triggered the event. See also
+ * perf_event_attr::precise_ip.
+ */
+#define PERF_RECORD_MISC_EXACT_IP              (1 << 14)
+/*
+ * Reserve the last bit to indicate some extended misc field
+ */
+#define PERF_RECORD_MISC_EXT_RESERVED          (1 << 15)
+
+struct perf_event_header {
+       __u32   type;
+       __u16   misc;
+       __u16   size;
+};
+
+enum perf_event_type {
+
+       /*
+        * If perf_event_attr.sample_id_all is set then all event types will
+        * have the sample_type selected fields related to where/when
+        * (identity) an event took place (TID, TIME, ID, STREAM_ID, CPU,
+        * IDENTIFIER) described in PERF_RECORD_SAMPLE below, it will be stashed
+        * just after the perf_event_header and the fields already present for
+        * the existing fields, i.e. at the end of the payload. That way a newer
+        * perf.data file will be supported by older perf tools, with these new
+        * optional fields being ignored.
+        *
+        * struct sample_id {
+        *      { u32                   pid, tid; } && PERF_SAMPLE_TID
+        *      { u64                   time;     } && PERF_SAMPLE_TIME
+        *      { u64                   id;       } && PERF_SAMPLE_ID
+        *      { u64                   stream_id;} && PERF_SAMPLE_STREAM_ID
+        *      { u32                   cpu, res; } && PERF_SAMPLE_CPU
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
+        * } && perf_event_attr::sample_id_all
+        *
+        * Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.  The
+        * advantage of PERF_SAMPLE_IDENTIFIER is that its position is fixed
+        * relative to header.size.
+        */
+
+       /*
+        * The MMAP events record the PROT_EXEC mappings so that we can
+        * correlate userspace IPs to code. They have the following structure:
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      u64                             addr;
+        *      u64                             len;
+        *      u64                             pgoff;
+        *      char                            filename[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_MMAP                        = 1,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u64                             id;
+        *      u64                             lost;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_LOST                        = 2,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      char                            comm[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_COMM                        = 3,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, ppid;
+        *      u32                             tid, ptid;
+        *      u64                             time;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_EXIT                        = 4,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u64                             time;
+        *      u64                             id;
+        *      u64                             stream_id;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_THROTTLE                    = 5,
+       PERF_RECORD_UNTHROTTLE                  = 6,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, ppid;
+        *      u32                             tid, ptid;
+        *      u64                             time;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_FORK                        = 7,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid, tid;
+        *
+        *      struct read_format              values;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_READ                        = 8,
+
+       /*
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      #
+        *      # Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.
+        *      # The advantage of PERF_SAMPLE_IDENTIFIER is that its position
+        *      # is fixed relative to header.
+        *      #
+        *
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
+        *      { u64                   ip;       } && PERF_SAMPLE_IP
+        *      { u32                   pid, tid; } && PERF_SAMPLE_TID
+        *      { u64                   time;     } && PERF_SAMPLE_TIME
+        *      { u64                   addr;     } && PERF_SAMPLE_ADDR
+        *      { u64                   id;       } && PERF_SAMPLE_ID
+        *      { u64                   stream_id;} && PERF_SAMPLE_STREAM_ID
+        *      { u32                   cpu, res; } && PERF_SAMPLE_CPU
+        *      { u64                   period;   } && PERF_SAMPLE_PERIOD
+        *
+        *      { struct read_format    values;   } && PERF_SAMPLE_READ
+        *
+        *      { u64                   nr,
+        *        u64                   ips[nr];  } && PERF_SAMPLE_CALLCHAIN
+        *
+        *      #
+        *      # The RAW record below is opaque data wrt the ABI
+        *      #
+        *      # That is, the ABI doesn't make any promises wrt to
+        *      # the stability of its content, it may vary depending
+        *      # on event, hardware, kernel version and phase of
+        *      # the moon.
+        *      #
+        *      # In other words, PERF_SAMPLE_RAW contents are not an ABI.
+        *      #
+        *
+        *      { u32                   size;
+        *        char                  data[size];}&& PERF_SAMPLE_RAW
+        *
+        *      { u64                   nr;
+        *        { u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK
+        *
+        *      { u64                   abi; # enum perf_sample_regs_abi
+        *        u64                   regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER
+        *
+        *      { u64                   size;
+        *        char                  data[size];
+        *        u64                   dyn_size; } && PERF_SAMPLE_STACK_USER
+        *
+        *      { u64                   weight;   } && PERF_SAMPLE_WEIGHT
+        *      { u64                   data_src; } && PERF_SAMPLE_DATA_SRC
+        *      { u64                   transaction; } && PERF_SAMPLE_TRANSACTION
+        *      { u64                   abi; # enum perf_sample_regs_abi
+        *        u64                   regs[weight(mask)]; } && PERF_SAMPLE_REGS_INTR
+        * };
+        */
+       PERF_RECORD_SAMPLE                      = 9,
+
+       /*
+        * The MMAP2 records are an augmented version of MMAP, they add
+        * maj, min, ino numbers to be used to uniquely identify each mapping
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u32                             pid, tid;
+        *      u64                             addr;
+        *      u64                             len;
+        *      u64                             pgoff;
+        *      u32                             maj;
+        *      u32                             min;
+        *      u64                             ino;
+        *      u64                             ino_generation;
+        *      u32                             prot, flags;
+        *      char                            filename[];
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_MMAP2                       = 10,
+
+       /*
+        * Records that new data landed in the AUX buffer part.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u64                             aux_offset;
+        *      u64                             aux_size;
+        *      u64                             flags;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_AUX                         = 11,
+
+       /*
+        * Indicates that instruction trace has started
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             pid;
+        *      u32                             tid;
+        * };
+        */
+       PERF_RECORD_ITRACE_START                = 12,
+
+       /*
+        * Records the dropped/lost sample number.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *
+        *      u64                             lost;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_LOST_SAMPLES                = 13,
+
+       /*
+        * Records a context switch in or out (flagged by
+        * PERF_RECORD_MISC_SWITCH_OUT). See also
+        * PERF_RECORD_SWITCH_CPU_WIDE.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_SWITCH                      = 14,
+
+       /*
+        * CPU-wide version of PERF_RECORD_SWITCH with next_prev_pid and
+        * next_prev_tid that are the next (switching out) or previous
+        * (switching in) pid/tid.
+        *
+        * struct {
+        *      struct perf_event_header        header;
+        *      u32                             next_prev_pid;
+        *      u32                             next_prev_tid;
+        *      struct sample_id                sample_id;
+        * };
+        */
+       PERF_RECORD_SWITCH_CPU_WIDE             = 15,
+
+       PERF_RECORD_MAX,                        /* non-ABI */
+};
+
+#define PERF_MAX_STACK_DEPTH           127
+
+enum perf_callchain_context {
+       PERF_CONTEXT_HV                 = (__u64)-32,
+       PERF_CONTEXT_KERNEL             = (__u64)-128,
+       PERF_CONTEXT_USER               = (__u64)-512,
+
+       PERF_CONTEXT_GUEST              = (__u64)-2048,
+       PERF_CONTEXT_GUEST_KERNEL       = (__u64)-2176,
+       PERF_CONTEXT_GUEST_USER         = (__u64)-2560,
+
+       PERF_CONTEXT_MAX                = (__u64)-4095,
+};
+
+/**
+ * PERF_RECORD_AUX::flags bits
+ */
+#define PERF_AUX_FLAG_TRUNCATED                0x01    /* record was truncated to fit */
+#define PERF_AUX_FLAG_OVERWRITE                0x02    /* snapshot from overwrite mode */
+
+#define PERF_FLAG_FD_NO_GROUP          (1UL << 0)
+#define PERF_FLAG_FD_OUTPUT            (1UL << 1)
+#define PERF_FLAG_PID_CGROUP           (1UL << 2) /* pid=cgroup id, per-cpu mode only */
+#define PERF_FLAG_FD_CLOEXEC           (1UL << 3) /* O_CLOEXEC */
+
+union perf_mem_data_src {
+       __u64 val;
+       struct {
+               __u64   mem_op:5,       /* type of opcode */
+                       mem_lvl:14,     /* memory hierarchy level */
+                       mem_snoop:5,    /* snoop mode */
+                       mem_lock:2,     /* lock instr */
+                       mem_dtlb:7,     /* tlb access */
+                       mem_rsvd:31;
+       };
+};
+
+/* type of opcode (load/store/prefetch,code) */
+#define PERF_MEM_OP_NA         0x01 /* not available */
+#define PERF_MEM_OP_LOAD       0x02 /* load instruction */
+#define PERF_MEM_OP_STORE      0x04 /* store instruction */
+#define PERF_MEM_OP_PFETCH     0x08 /* prefetch */
+#define PERF_MEM_OP_EXEC       0x10 /* code (execution) */
+#define PERF_MEM_OP_SHIFT      0
+
+/* memory hierarchy (memory level, hit or miss) */
+#define PERF_MEM_LVL_NA                0x01  /* not available */
+#define PERF_MEM_LVL_HIT       0x02  /* hit level */
+#define PERF_MEM_LVL_MISS      0x04  /* miss level  */
+#define PERF_MEM_LVL_L1                0x08  /* L1 */
+#define PERF_MEM_LVL_LFB       0x10  /* Line Fill Buffer */
+#define PERF_MEM_LVL_L2                0x20  /* L2 */
+#define PERF_MEM_LVL_L3                0x40  /* L3 */
+#define PERF_MEM_LVL_LOC_RAM   0x80  /* Local DRAM */
+#define PERF_MEM_LVL_REM_RAM1  0x100 /* Remote DRAM (1 hop) */
+#define PERF_MEM_LVL_REM_RAM2  0x200 /* Remote DRAM (2 hops) */
+#define PERF_MEM_LVL_REM_CCE1  0x400 /* Remote Cache (1 hop) */
+#define PERF_MEM_LVL_REM_CCE2  0x800 /* Remote Cache (2 hops) */
+#define PERF_MEM_LVL_IO                0x1000 /* I/O memory */
+#define PERF_MEM_LVL_UNC       0x2000 /* Uncached memory */
+#define PERF_MEM_LVL_SHIFT     5
+
+/* snoop mode */
+#define PERF_MEM_SNOOP_NA      0x01 /* not available */
+#define PERF_MEM_SNOOP_NONE    0x02 /* no snoop */
+#define PERF_MEM_SNOOP_HIT     0x04 /* snoop hit */
+#define PERF_MEM_SNOOP_MISS    0x08 /* snoop miss */
+#define PERF_MEM_SNOOP_HITM    0x10 /* snoop hit modified */
+#define PERF_MEM_SNOOP_SHIFT   19
+
+/* locked instruction */
+#define PERF_MEM_LOCK_NA       0x01 /* not available */
+#define PERF_MEM_LOCK_LOCKED   0x02 /* locked transaction */
+#define PERF_MEM_LOCK_SHIFT    24
+
+/* TLB access */
+#define PERF_MEM_TLB_NA                0x01 /* not available */
+#define PERF_MEM_TLB_HIT       0x02 /* hit level */
+#define PERF_MEM_TLB_MISS      0x04 /* miss level */
+#define PERF_MEM_TLB_L1                0x08 /* L1 */
+#define PERF_MEM_TLB_L2                0x10 /* L2 */
+#define PERF_MEM_TLB_WK                0x20 /* Hardware Walker*/
+#define PERF_MEM_TLB_OS                0x40 /* OS fault handler */
+#define PERF_MEM_TLB_SHIFT     26
+
+#define PERF_MEM_S(a, s) \
+       (((__u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT)
+
+/*
+ * single taken branch record layout:
+ *
+ *      from: source instruction (may not always be a branch insn)
+ *        to: branch target
+ *   mispred: branch target was mispredicted
+ * predicted: branch target was predicted
+ *
+ * support for mispred, predicted is optional. In case it
+ * is not supported mispred = predicted = 0.
+ *
+ *     in_tx: running in a hardware transaction
+ *     abort: aborting a hardware transaction
+ *    cycles: cycles from last branch (or 0 if not supported)
+ */
+struct perf_branch_entry {
+       __u64   from;
+       __u64   to;
+       __u64   mispred:1,  /* target mispredicted */
+               predicted:1,/* target predicted */
+               in_tx:1,    /* in transaction */
+               abort:1,    /* transaction abort */
+               cycles:16,  /* cycle count to last branch */
+               reserved:44;
+};
+
+#endif /* _LINUX_PERF_EVENT_H */
diff --git a/lib/libdss-include/linux/personality.h b/lib/libdss-include/linux/personality.h
new file mode 100644 (file)
index 0000000..9971703
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _LINUX_PERSONALITY_H
+#define _LINUX_PERSONALITY_H
+
+
+/*
+ * Flags for bug emulation.
+ *
+ * These occupy the top three bytes.
+ */
+enum {
+       UNAME26 =               0x0020000,
+       ADDR_NO_RANDOMIZE =     0x0040000,      /* disable randomization of VA space */
+       FDPIC_FUNCPTRS =        0x0080000,      /* userspace function ptrs point to descriptors
+                                                * (signal handling)
+                                                */
+       MMAP_PAGE_ZERO =        0x0100000,
+       ADDR_COMPAT_LAYOUT =    0x0200000,
+       READ_IMPLIES_EXEC =     0x0400000,
+       ADDR_LIMIT_32BIT =      0x0800000,
+       SHORT_INODE =           0x1000000,
+       WHOLE_SECONDS =         0x2000000,
+       STICKY_TIMEOUTS =       0x4000000,
+       ADDR_LIMIT_3GB =        0x8000000,
+};
+
+/*
+ * Security-relevant compatibility flags that must be
+ * cleared upon setuid or setgid exec:
+ */
+#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC  | \
+                           ADDR_NO_RANDOMIZE  | \
+                           ADDR_COMPAT_LAYOUT | \
+                           MMAP_PAGE_ZERO)
+
+/*
+ * Personality types.
+ *
+ * These go in the low byte.  Avoid using the top bit, it will
+ * conflict with error returns.
+ */
+enum {
+       PER_LINUX =             0x0000,
+       PER_LINUX_32BIT =       0x0000 | ADDR_LIMIT_32BIT,
+       PER_LINUX_FDPIC =       0x0000 | FDPIC_FUNCPTRS,
+       PER_SVR4 =              0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_SVR3 =              0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_SCOSVR3 =           0x0003 | STICKY_TIMEOUTS |
+                                        WHOLE_SECONDS | SHORT_INODE,
+       PER_OSR5 =              0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+       PER_WYSEV386 =          0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_ISCR4 =             0x0005 | STICKY_TIMEOUTS,
+       PER_BSD =               0x0006,
+       PER_SUNOS =             0x0006 | STICKY_TIMEOUTS,
+       PER_XENIX =             0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_LINUX32 =           0x0008,
+       PER_LINUX32_3GB =       0x0008 | ADDR_LIMIT_3GB,
+       PER_IRIX32 =            0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */
+       PER_IRIXN32 =           0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */
+       PER_IRIX64 =            0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */
+       PER_RISCOS =            0x000c,
+       PER_SOLARIS =           0x000d | STICKY_TIMEOUTS,
+       PER_UW7 =               0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_OSF4 =              0x000f,                  /* OSF/1 v4 */
+       PER_HPUX =              0x0010,
+       PER_MASK =              0x00ff,
+};
+
+
+#endif /* _LINUX_PERSONALITY_H */
diff --git a/lib/libdss-include/linux/pfkeyv2.h b/lib/libdss-include/linux/pfkeyv2.h
new file mode 100644 (file)
index 0000000..ada7f01
--- /dev/null
@@ -0,0 +1,383 @@
+/* PF_KEY user interface, this is defined by rfc2367 so
+ * do not make arbitrary modifications or else this header
+ * file will not be compliant.
+ */
+
+#ifndef _LINUX_PFKEY2_H
+#define _LINUX_PFKEY2_H
+
+#include <linux/types.h>
+
+#define PF_KEY_V2              2
+#define PFKEYV2_REVISION       199806L
+
+struct sadb_msg {
+       __u8            sadb_msg_version;
+       __u8            sadb_msg_type;
+       __u8            sadb_msg_errno;
+       __u8            sadb_msg_satype;
+       __u16   sadb_msg_len;
+       __u16   sadb_msg_reserved;
+       __u32   sadb_msg_seq;
+       __u32   sadb_msg_pid;
+} __attribute__((packed));
+/* sizeof(struct sadb_msg) == 16 */
+
+struct sadb_ext {
+       __u16   sadb_ext_len;
+       __u16   sadb_ext_type;
+} __attribute__((packed));
+/* sizeof(struct sadb_ext) == 4 */
+
+struct sadb_sa {
+       __u16   sadb_sa_len;
+       __u16   sadb_sa_exttype;
+       __be32          sadb_sa_spi;
+       __u8            sadb_sa_replay;
+       __u8            sadb_sa_state;
+       __u8            sadb_sa_auth;
+       __u8            sadb_sa_encrypt;
+       __u32   sadb_sa_flags;
+} __attribute__((packed));
+/* sizeof(struct sadb_sa) == 16 */
+
+struct sadb_lifetime {
+       __u16   sadb_lifetime_len;
+       __u16   sadb_lifetime_exttype;
+       __u32   sadb_lifetime_allocations;
+       __u64   sadb_lifetime_bytes;
+       __u64   sadb_lifetime_addtime;
+       __u64   sadb_lifetime_usetime;
+} __attribute__((packed));
+/* sizeof(struct sadb_lifetime) == 32 */
+
+struct sadb_address {
+       __u16   sadb_address_len;
+       __u16   sadb_address_exttype;
+       __u8            sadb_address_proto;
+       __u8            sadb_address_prefixlen;
+       __u16   sadb_address_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_address) == 8 */
+
+struct sadb_key {
+       __u16   sadb_key_len;
+       __u16   sadb_key_exttype;
+       __u16   sadb_key_bits;
+       __u16   sadb_key_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_key) == 8 */
+
+struct sadb_ident {
+       __u16   sadb_ident_len;
+       __u16   sadb_ident_exttype;
+       __u16   sadb_ident_type;
+       __u16   sadb_ident_reserved;
+       __u64   sadb_ident_id;
+} __attribute__((packed));
+/* sizeof(struct sadb_ident) == 16 */
+
+struct sadb_sens {
+       __u16   sadb_sens_len;
+       __u16   sadb_sens_exttype;
+       __u32   sadb_sens_dpd;
+       __u8            sadb_sens_sens_level;
+       __u8            sadb_sens_sens_len;
+       __u8            sadb_sens_integ_level;
+       __u8            sadb_sens_integ_len;
+       __u32   sadb_sens_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_sens) == 16 */
+
+/* followed by:
+       __u64   sadb_sens_bitmap[sens_len];
+       __u64   sadb_integ_bitmap[integ_len];  */
+
+struct sadb_prop {
+       __u16   sadb_prop_len;
+       __u16   sadb_prop_exttype;
+       __u8            sadb_prop_replay;
+       __u8            sadb_prop_reserved[3];
+} __attribute__((packed));
+/* sizeof(struct sadb_prop) == 8 */
+
+/* followed by:
+       struct sadb_comb sadb_combs[(sadb_prop_len +
+               sizeof(__u64) - sizeof(struct sadb_prop)) /
+               sizeof(struct sadb_comb)]; */
+
+struct sadb_comb {
+       __u8            sadb_comb_auth;
+       __u8            sadb_comb_encrypt;
+       __u16   sadb_comb_flags;
+       __u16   sadb_comb_auth_minbits;
+       __u16   sadb_comb_auth_maxbits;
+       __u16   sadb_comb_encrypt_minbits;
+       __u16   sadb_comb_encrypt_maxbits;
+       __u32   sadb_comb_reserved;
+       __u32   sadb_comb_soft_allocations;
+       __u32   sadb_comb_hard_allocations;
+       __u64   sadb_comb_soft_bytes;
+       __u64   sadb_comb_hard_bytes;
+       __u64   sadb_comb_soft_addtime;
+       __u64   sadb_comb_hard_addtime;
+       __u64   sadb_comb_soft_usetime;
+       __u64   sadb_comb_hard_usetime;
+} __attribute__((packed));
+/* sizeof(struct sadb_comb) == 72 */
+
+struct sadb_supported {
+       __u16   sadb_supported_len;
+       __u16   sadb_supported_exttype;
+       __u32   sadb_supported_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_supported) == 8 */
+
+/* followed by:
+       struct sadb_alg sadb_algs[(sadb_supported_len +
+               sizeof(__u64) - sizeof(struct sadb_supported)) /
+               sizeof(struct sadb_alg)]; */
+
+struct sadb_alg {
+       __u8            sadb_alg_id;
+       __u8            sadb_alg_ivlen;
+       __u16   sadb_alg_minbits;
+       __u16   sadb_alg_maxbits;
+       __u16   sadb_alg_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_alg) == 8 */
+
+struct sadb_spirange {
+       __u16   sadb_spirange_len;
+       __u16   sadb_spirange_exttype;
+       __u32   sadb_spirange_min;
+       __u32   sadb_spirange_max;
+       __u32   sadb_spirange_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_spirange) == 16 */
+
+struct sadb_x_kmprivate {
+       __u16   sadb_x_kmprivate_len;
+       __u16   sadb_x_kmprivate_exttype;
+       __u32   sadb_x_kmprivate_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_kmprivate) == 8 */
+
+struct sadb_x_sa2 {
+       __u16   sadb_x_sa2_len;
+       __u16   sadb_x_sa2_exttype;
+       __u8            sadb_x_sa2_mode;
+       __u8            sadb_x_sa2_reserved1;
+       __u16   sadb_x_sa2_reserved2;
+       __u32   sadb_x_sa2_sequence;
+       __u32   sadb_x_sa2_reqid;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_sa2) == 16 */
+
+struct sadb_x_policy {
+       __u16   sadb_x_policy_len;
+       __u16   sadb_x_policy_exttype;
+       __u16   sadb_x_policy_type;
+       __u8            sadb_x_policy_dir;
+       __u8            sadb_x_policy_reserved;
+       __u32   sadb_x_policy_id;
+       __u32   sadb_x_policy_priority;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_policy) == 16 */
+
+struct sadb_x_ipsecrequest {
+       __u16   sadb_x_ipsecrequest_len;
+       __u16   sadb_x_ipsecrequest_proto;
+       __u8            sadb_x_ipsecrequest_mode;
+       __u8            sadb_x_ipsecrequest_level;
+       __u16   sadb_x_ipsecrequest_reserved1;
+       __u32   sadb_x_ipsecrequest_reqid;
+       __u32   sadb_x_ipsecrequest_reserved2;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_ipsecrequest) == 16 */
+
+/* This defines the TYPE of Nat Traversal in use.  Currently only one
+ * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06
+ */
+struct sadb_x_nat_t_type {
+       __u16   sadb_x_nat_t_type_len;
+       __u16   sadb_x_nat_t_type_exttype;
+       __u8            sadb_x_nat_t_type_type;
+       __u8            sadb_x_nat_t_type_reserved[3];
+} __attribute__((packed));
+/* sizeof(struct sadb_x_nat_t_type) == 8 */
+
+/* Pass a NAT Traversal port (Source or Dest port) */
+struct sadb_x_nat_t_port {
+       __u16   sadb_x_nat_t_port_len;
+       __u16   sadb_x_nat_t_port_exttype;
+       __be16          sadb_x_nat_t_port_port;
+       __u16   sadb_x_nat_t_port_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_nat_t_port) == 8 */
+
+/* Generic LSM security context */
+struct sadb_x_sec_ctx {
+       __u16   sadb_x_sec_len;
+       __u16   sadb_x_sec_exttype;
+       __u8            sadb_x_ctx_alg;  /* LSMs: e.g., selinux == 1 */
+       __u8            sadb_x_ctx_doi;
+       __u16   sadb_x_ctx_len;
+} __attribute__((packed));
+/* sizeof(struct sadb_sec_ctx) = 8 */
+
+/* Used by MIGRATE to pass addresses IKE will use to perform
+ * negotiation with the peer */
+struct sadb_x_kmaddress {
+       __u16   sadb_x_kmaddress_len;
+       __u16   sadb_x_kmaddress_exttype;
+       __u32   sadb_x_kmaddress_reserved;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_kmaddress) == 8 */
+
+/* To specify the SA dump filter */
+struct sadb_x_filter {
+       __u16   sadb_x_filter_len;
+       __u16   sadb_x_filter_exttype;
+       __u32   sadb_x_filter_saddr[4];
+       __u32   sadb_x_filter_daddr[4];
+       __u16   sadb_x_filter_family;
+       __u8    sadb_x_filter_splen;
+       __u8    sadb_x_filter_dplen;
+} __attribute__((packed));
+/* sizeof(struct sadb_x_filter) == 40 */
+
+/* Message types */
+#define SADB_RESERVED          0
+#define SADB_GETSPI            1
+#define SADB_UPDATE            2
+#define SADB_ADD               3
+#define SADB_DELETE            4
+#define SADB_GET               5
+#define SADB_ACQUIRE           6
+#define SADB_REGISTER          7
+#define SADB_EXPIRE            8
+#define SADB_FLUSH             9
+#define SADB_DUMP              10
+#define SADB_X_PROMISC         11
+#define SADB_X_PCHANGE         12
+#define SADB_X_SPDUPDATE       13
+#define SADB_X_SPDADD          14
+#define SADB_X_SPDDELETE       15
+#define SADB_X_SPDGET          16
+#define SADB_X_SPDACQUIRE      17
+#define SADB_X_SPDDUMP         18
+#define SADB_X_SPDFLUSH                19
+#define SADB_X_SPDSETIDX       20
+#define SADB_X_SPDEXPIRE       21
+#define SADB_X_SPDDELETE2      22
+#define SADB_X_NAT_T_NEW_MAPPING       23
+#define SADB_X_MIGRATE         24
+#define SADB_MAX               24
+
+/* Security Association flags */
+#define SADB_SAFLAGS_PFS       1
+#define SADB_SAFLAGS_NOPMTUDISC        0x20000000
+#define SADB_SAFLAGS_DECAP_DSCP        0x40000000
+#define SADB_SAFLAGS_NOECN     0x80000000
+
+/* Security Association states */
+#define SADB_SASTATE_LARVAL    0
+#define SADB_SASTATE_MATURE    1
+#define SADB_SASTATE_DYING     2
+#define SADB_SASTATE_DEAD      3
+#define SADB_SASTATE_MAX       3
+
+/* Security Association types */
+#define SADB_SATYPE_UNSPEC     0
+#define SADB_SATYPE_AH         2
+#define SADB_SATYPE_ESP                3
+#define SADB_SATYPE_RSVP       5
+#define SADB_SATYPE_OSPFV2     6
+#define SADB_SATYPE_RIPV2      7
+#define SADB_SATYPE_MIP                8
+#define SADB_X_SATYPE_IPCOMP   9
+#define SADB_SATYPE_MAX                9
+
+/* Authentication algorithms */
+#define SADB_AALG_NONE                 0
+#define SADB_AALG_MD5HMAC              2
+#define SADB_AALG_SHA1HMAC             3
+#define SADB_X_AALG_SHA2_256HMAC       5
+#define SADB_X_AALG_SHA2_384HMAC       6
+#define SADB_X_AALG_SHA2_512HMAC       7
+#define SADB_X_AALG_RIPEMD160HMAC      8
+#define SADB_X_AALG_AES_XCBC_MAC       9
+#define SADB_X_AALG_NULL               251     /* kame */
+#define SADB_AALG_MAX                  251
+
+/* Encryption algorithms */
+#define SADB_EALG_NONE                 0
+#define SADB_EALG_DESCBC               2
+#define SADB_EALG_3DESCBC              3
+#define SADB_X_EALG_CASTCBC            6
+#define SADB_X_EALG_BLOWFISHCBC                7
+#define SADB_EALG_NULL                 11
+#define SADB_X_EALG_AESCBC             12
+#define SADB_X_EALG_AESCTR             13
+#define SADB_X_EALG_AES_CCM_ICV8       14
+#define SADB_X_EALG_AES_CCM_ICV12      15
+#define SADB_X_EALG_AES_CCM_ICV16      16
+#define SADB_X_EALG_AES_GCM_ICV8       18
+#define SADB_X_EALG_AES_GCM_ICV12      19
+#define SADB_X_EALG_AES_GCM_ICV16      20
+#define SADB_X_EALG_CAMELLIACBC                22
+#define SADB_X_EALG_NULL_AES_GMAC      23
+#define SADB_EALG_MAX                   253 /* last EALG */
+/* private allocations should use 249-255 (RFC2407) */
+#define SADB_X_EALG_SERPENTCBC  252     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
+#define SADB_X_EALG_TWOFISHCBC  253     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
+
+/* Compression algorithms */
+#define SADB_X_CALG_NONE               0
+#define SADB_X_CALG_OUI                        1
+#define SADB_X_CALG_DEFLATE            2
+#define SADB_X_CALG_LZS                        3
+#define SADB_X_CALG_LZJH               4
+#define SADB_X_CALG_MAX                        4
+
+/* Extension Header values */
+#define SADB_EXT_RESERVED              0
+#define SADB_EXT_SA                    1
+#define SADB_EXT_LIFETIME_CURRENT      2
+#define SADB_EXT_LIFETIME_HARD         3
+#define SADB_EXT_LIFETIME_SOFT         4
+#define SADB_EXT_ADDRESS_SRC           5
+#define SADB_EXT_ADDRESS_DST           6
+#define SADB_EXT_ADDRESS_PROXY         7
+#define SADB_EXT_KEY_AUTH              8
+#define SADB_EXT_KEY_ENCRYPT           9
+#define SADB_EXT_IDENTITY_SRC          10
+#define SADB_EXT_IDENTITY_DST          11
+#define SADB_EXT_SENSITIVITY           12
+#define SADB_EXT_PROPOSAL              13
+#define SADB_EXT_SUPPORTED_AUTH                14
+#define SADB_EXT_SUPPORTED_ENCRYPT     15
+#define SADB_EXT_SPIRANGE              16
+#define SADB_X_EXT_KMPRIVATE           17
+#define SADB_X_EXT_POLICY              18
+#define SADB_X_EXT_SA2                 19
+/* The next four entries are for setting up NAT Traversal */
+#define SADB_X_EXT_NAT_T_TYPE          20
+#define SADB_X_EXT_NAT_T_SPORT         21
+#define SADB_X_EXT_NAT_T_DPORT         22
+#define SADB_X_EXT_NAT_T_OA            23
+#define SADB_X_EXT_SEC_CTX             24
+/* Used with MIGRATE to pass @ to IKE for negotiation */
+#define SADB_X_EXT_KMADDRESS           25
+#define SADB_X_EXT_FILTER              26
+#define SADB_EXT_MAX                   26
+
+/* Identity Extension values */
+#define SADB_IDENTTYPE_RESERVED        0
+#define SADB_IDENTTYPE_PREFIX  1
+#define SADB_IDENTTYPE_FQDN    2
+#define SADB_IDENTTYPE_USERFQDN        3
+#define SADB_IDENTTYPE_MAX     3
+
+#endif /* !(_LINUX_PFKEY2_H) */
diff --git a/lib/libdss-include/linux/pg.h b/lib/libdss-include/linux/pg.h
new file mode 100644 (file)
index 0000000..db994bb
--- /dev/null
@@ -0,0 +1,63 @@
+/*     pg.h (c) 1998  Grant R. Guenther <grant@torque.net>
+                      Under the terms of the GNU General Public License
+
+
+       pg.h defines the user interface to the generic ATAPI packet
+        command driver for parallel port ATAPI devices (pg). The
+       driver is loosely modelled after the generic SCSI driver, sg,
+       although the actual interface is different.
+
+       The pg driver provides a simple character device interface for
+        sending ATAPI commands to a device.  With the exception of the
+       ATAPI reset operation, all operations are performed by a pair
+        of read and write operations to the appropriate /dev/pgN device.
+       A write operation delivers a command and any outbound data in
+        a single buffer.  Normally, the write will succeed unless the
+        device is offline or malfunctioning, or there is already another
+       command pending.  If the write succeeds, it should be followed
+        immediately by a read operation, to obtain any returned data and
+        status information.  A read will fail if there is no operation
+        in progress.
+
+       As a special case, the device can be reset with a write operation,
+        and in this case, no following read is expected, or permitted.
+
+       There are no ioctl() operations.  Any single operation
+       may transfer at most PG_MAX_DATA bytes.  Note that the driver must
+        copy the data through an internal buffer.  In keeping with all
+       current ATAPI devices, command packets are assumed to be exactly
+       12 bytes in length.
+
+       To permit future changes to this interface, the headers in the
+       read and write buffers contain a single character "magic" flag.
+        Currently this flag must be the character "P".
+
+*/
+
+#define PG_MAGIC       'P'
+#define PG_RESET       'Z'
+#define PG_COMMAND     'C'
+
+#define PG_MAX_DATA    32768
+
+struct pg_write_hdr {
+
+       char    magic;          /* == PG_MAGIC */
+       char    func;           /* PG_RESET or PG_COMMAND */
+       int     dlen;           /* number of bytes expected to transfer */
+       int     timeout;        /* number of seconds before timeout */
+       char    packet[12];     /* packet command */
+
+};
+
+struct pg_read_hdr {
+
+       char    magic;          /* == PG_MAGIC */
+       char    scsi;           /* "scsi" status == sense key */
+       int     dlen;           /* size of device transfer request */
+       int     duration;       /* time in seconds command took */
+       char    pad[12];        /* not used */
+
+};
+
+/* end of pg.h */
diff --git a/lib/libdss-include/linux/phantom.h b/lib/libdss-include/linux/phantom.h
new file mode 100644 (file)
index 0000000..94dd664
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ *  Copyright (C) 2005-2007 Jiri Slaby <jirislaby@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ */
+
+#ifndef __PHANTOM_H
+#define __PHANTOM_H
+
+#include <linux/types.h>
+
+/* PHN_(G/S)ET_REG param */
+struct phm_reg {
+       __u32 reg;
+       __u32 value;
+};
+
+/* PHN_(G/S)ET_REGS param */
+struct phm_regs {
+       __u32 count;
+       __u32 mask;
+       __u32 values[8];
+};
+
+#define PH_IOC_MAGIC           'p'
+#define PHN_GET_REG            _IOWR(PH_IOC_MAGIC, 0, struct phm_reg *)
+#define PHN_SET_REG            _IOW(PH_IOC_MAGIC, 1, struct phm_reg *)
+#define PHN_GET_REGS           _IOWR(PH_IOC_MAGIC, 2, struct phm_regs *)
+#define PHN_SET_REGS           _IOW(PH_IOC_MAGIC, 3, struct phm_regs *)
+/* this ioctl tells the driver, that the caller is not OpenHaptics and might
+ * use improved registers update (no more phantom switchoffs when using
+ * libphantom) */
+#define PHN_NOT_OH             _IO(PH_IOC_MAGIC, 4)
+#define PHN_GETREG             _IOWR(PH_IOC_MAGIC, 5, struct phm_reg)
+#define PHN_SETREG             _IOW(PH_IOC_MAGIC, 6, struct phm_reg)
+#define PHN_GETREGS            _IOWR(PH_IOC_MAGIC, 7, struct phm_regs)
+#define PHN_SETREGS            _IOW(PH_IOC_MAGIC, 8, struct phm_regs)
+
+#define PHN_CONTROL            0x6     /* control byte in iaddr space */
+#define PHN_CTL_AMP            0x1     /*   switch after torques change */
+#define PHN_CTL_BUT            0x2     /*   is button switched */
+#define PHN_CTL_IRQ            0x10    /*   is irq enabled */
+
+#define PHN_ZERO_FORCE         2048    /* zero torque on motor */
+
+#endif
diff --git a/lib/libdss-include/linux/phonet.h b/lib/libdss-include/linux/phonet.h
new file mode 100644 (file)
index 0000000..7d663d5
--- /dev/null
@@ -0,0 +1,185 @@
+/**
+ * file phonet.h
+ *
+ * Phonet sockets kernel interface
+ *
+ * Copyright (C) 2008 Nokia Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef LINUX_PHONET_H
+#define LINUX_PHONET_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+/* Automatic protocol selection */
+#define PN_PROTO_TRANSPORT     0
+/* Phonet datagram socket */
+#define PN_PROTO_PHONET                1
+/* Phonet pipe */
+#define PN_PROTO_PIPE          2
+#define PHONET_NPROTO          3
+
+/* Socket options for SOL_PNPIPE level */
+#define PNPIPE_ENCAP           1
+#define PNPIPE_IFINDEX         2
+#define PNPIPE_HANDLE          3
+#define PNPIPE_INITSTATE       4
+
+#define PNADDR_ANY             0
+#define PNADDR_BROADCAST       0xFC
+#define PNPORT_RESOURCE_ROUTING        0
+
+/* Values for PNPIPE_ENCAP option */
+#define PNPIPE_ENCAP_NONE      0
+#define PNPIPE_ENCAP_IP                1
+
+/* ioctls */
+#define SIOCPNGETOBJECT                (SIOCPROTOPRIVATE + 0)
+#define SIOCPNENABLEPIPE       (SIOCPROTOPRIVATE + 13)
+#define SIOCPNADDRESOURCE      (SIOCPROTOPRIVATE + 14)
+#define SIOCPNDELRESOURCE      (SIOCPROTOPRIVATE + 15)
+
+/* Phonet protocol header */
+struct phonethdr {
+       __u8    pn_rdev;
+       __u8    pn_sdev;
+       __u8    pn_res;
+       __be16  pn_length;
+       __u8    pn_robj;
+       __u8    pn_sobj;
+} __attribute__((packed));
+
+/* Common Phonet payload header */
+struct phonetmsg {
+       __u8    pn_trans_id;    /* transaction ID */
+       __u8    pn_msg_id;      /* message type */
+       union {
+               struct {
+                       __u8    pn_submsg_id;   /* message subtype */
+                       __u8    pn_data[5];
+               } base;
+               struct {
+                       __u16   pn_e_res_id;    /* extended resource ID */
+                       __u8    pn_e_submsg_id; /* message subtype */
+                       __u8    pn_e_data[3];
+               } ext;
+       } pn_msg_u;
+};
+#define PN_COMMON_MESSAGE      0xF0
+#define PN_COMMGR              0x10
+#define PN_PREFIX              0xE0 /* resource for extended messages */
+#define pn_submsg_id           pn_msg_u.base.pn_submsg_id
+#define pn_e_submsg_id         pn_msg_u.ext.pn_e_submsg_id
+#define pn_e_res_id            pn_msg_u.ext.pn_e_res_id
+#define pn_data                        pn_msg_u.base.pn_data
+#define pn_e_data              pn_msg_u.ext.pn_e_data
+
+/* data for unreachable errors */
+#define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP    0x01
+#define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP  0x14
+#define pn_orig_msg_id         pn_data[0]
+#define pn_status              pn_data[1]
+#define pn_e_orig_msg_id       pn_e_data[0]
+#define pn_e_status            pn_e_data[1]
+
+/* Phonet socket address structure */
+struct sockaddr_pn {
+       __kernel_sa_family_t spn_family;
+       __u8 spn_obj;
+       __u8 spn_dev;
+       __u8 spn_resource;
+       __u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3];
+} __attribute__((packed));
+
+/* Well known address */
+#define PN_DEV_PC      0x10
+
+static __inline__ __u16 pn_object(__u8 addr, __u16 port)
+{
+       return (addr << 8) | (port & 0x3ff);
+}
+
+static __inline__ __u8 pn_obj(__u16 handle)
+{
+       return handle & 0xff;
+}
+
+static __inline__ __u8 pn_dev(__u16 handle)
+{
+       return handle >> 8;
+}
+
+static __inline__ __u16 pn_port(__u16 handle)
+{
+       return handle & 0x3ff;
+}
+
+static __inline__ __u8 pn_addr(__u16 handle)
+{
+       return (handle >> 8) & 0xfc;
+}
+
+static __inline__ void pn_sockaddr_set_addr(struct sockaddr_pn *spn, __u8 addr)
+{
+       spn->spn_dev &= 0x03;
+       spn->spn_dev |= addr & 0xfc;
+}
+
+static __inline__ void pn_sockaddr_set_port(struct sockaddr_pn *spn, __u16 port)
+{
+       spn->spn_dev &= 0xfc;
+       spn->spn_dev |= (port >> 8) & 0x03;
+       spn->spn_obj = port & 0xff;
+}
+
+static __inline__ void pn_sockaddr_set_object(struct sockaddr_pn *spn,
+                                               __u16 handle)
+{
+       spn->spn_dev = pn_dev(handle);
+       spn->spn_obj = pn_obj(handle);
+}
+
+static __inline__ void pn_sockaddr_set_resource(struct sockaddr_pn *spn,
+                                               __u8 resource)
+{
+       spn->spn_resource = resource;
+}
+
+static __inline__ __u8 pn_sockaddr_get_addr(const struct sockaddr_pn *spn)
+{
+       return spn->spn_dev & 0xfc;
+}
+
+static __inline__ __u16 pn_sockaddr_get_port(const struct sockaddr_pn *spn)
+{
+       return ((spn->spn_dev & 0x03) << 8) | spn->spn_obj;
+}
+
+static __inline__ __u16 pn_sockaddr_get_object(const struct sockaddr_pn *spn)
+{
+       return pn_object(spn->spn_dev, spn->spn_obj);
+}
+
+static __inline__ __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn)
+{
+       return spn->spn_resource;
+}
+
+/* Phonet device ioctl requests */
+
+#endif /* LINUX_PHONET_H */
diff --git a/lib/libdss-include/linux/pkt_cls.h b/lib/libdss-include/linux/pkt_cls.h
new file mode 100644 (file)
index 0000000..a323146
--- /dev/null
@@ -0,0 +1,448 @@
+#ifndef __LINUX_PKT_CLS_H
+#define __LINUX_PKT_CLS_H
+
+#include <linux/types.h>
+#include <linux/pkt_sched.h>
+
+
+/* Action attributes */
+enum {
+       TCA_ACT_UNSPEC,
+       TCA_ACT_KIND,
+       TCA_ACT_OPTIONS,
+       TCA_ACT_INDEX,
+       TCA_ACT_STATS,
+       __TCA_ACT_MAX
+};
+
+#define TCA_ACT_MAX __TCA_ACT_MAX
+#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
+#define TCA_ACT_MAX_PRIO 32
+#define TCA_ACT_BIND   1
+#define TCA_ACT_NOBIND 0
+#define TCA_ACT_UNBIND 1
+#define TCA_ACT_NOUNBIND       0
+#define TCA_ACT_REPLACE                1
+#define TCA_ACT_NOREPLACE      0
+
+#define TC_ACT_UNSPEC  (-1)
+#define TC_ACT_OK              0
+#define TC_ACT_RECLASSIFY      1
+#define TC_ACT_SHOT            2
+#define TC_ACT_PIPE            3
+#define TC_ACT_STOLEN          4
+#define TC_ACT_QUEUED          5
+#define TC_ACT_REPEAT          6
+#define TC_ACT_REDIRECT                7
+#define TC_ACT_JUMP            0x10000000
+
+/* Action type identifiers*/
+enum {
+       TCA_ID_UNSPEC=0,
+       TCA_ID_POLICE=1,
+       /* other actions go here */
+       __TCA_ID_MAX=255
+};
+
+#define TCA_ID_MAX __TCA_ID_MAX
+
+struct tc_police {
+       __u32                   index;
+       int                     action;
+#define TC_POLICE_UNSPEC       TC_ACT_UNSPEC
+#define TC_POLICE_OK           TC_ACT_OK
+#define TC_POLICE_RECLASSIFY   TC_ACT_RECLASSIFY
+#define TC_POLICE_SHOT         TC_ACT_SHOT
+#define TC_POLICE_PIPE         TC_ACT_PIPE
+
+       __u32                   limit;
+       __u32                   burst;
+       __u32                   mtu;
+       struct tc_ratespec      rate;
+       struct tc_ratespec      peakrate;
+       int                     refcnt;
+       int                     bindcnt;
+       __u32                   capab;
+};
+
+struct tcf_t {
+       __u64   install;
+       __u64   lastuse;
+       __u64   expires;
+};
+
+struct tc_cnt {
+       int                   refcnt; 
+       int                   bindcnt;
+};
+
+#define tc_gen \
+       __u32                 index; \
+       __u32                 capab; \
+       int                   action; \
+       int                   refcnt; \
+       int                   bindcnt
+
+enum {
+       TCA_POLICE_UNSPEC,
+       TCA_POLICE_TBF,
+       TCA_POLICE_RATE,
+       TCA_POLICE_PEAKRATE,
+       TCA_POLICE_AVRATE,
+       TCA_POLICE_RESULT,
+       __TCA_POLICE_MAX
+#define TCA_POLICE_RESULT TCA_POLICE_RESULT
+};
+
+#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
+
+/* U32 filters */
+
+#define TC_U32_HTID(h) ((h)&0xFFF00000)
+#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
+#define TC_U32_HASH(h) (((h)>>12)&0xFF)
+#define TC_U32_NODE(h) ((h)&0xFFF)
+#define TC_U32_KEY(h) ((h)&0xFFFFF)
+#define TC_U32_UNSPEC  0
+#define TC_U32_ROOT    (0xFFF00000)
+
+enum {
+       TCA_U32_UNSPEC,
+       TCA_U32_CLASSID,
+       TCA_U32_HASH,
+       TCA_U32_LINK,
+       TCA_U32_DIVISOR,
+       TCA_U32_SEL,
+       TCA_U32_POLICE,
+       TCA_U32_ACT,   
+       TCA_U32_INDEV,
+       TCA_U32_PCNT,
+       TCA_U32_MARK,
+       __TCA_U32_MAX
+};
+
+#define TCA_U32_MAX (__TCA_U32_MAX - 1)
+
+struct tc_u32_key {
+       __be32          mask;
+       __be32          val;
+       int             off;
+       int             offmask;
+};
+
+struct tc_u32_sel {
+       unsigned char           flags;
+       unsigned char           offshift;
+       unsigned char           nkeys;
+
+       __be16                  offmask;
+       __u16                   off;
+       short                   offoff;
+
+       short                   hoff;
+       __be32                  hmask;
+       struct tc_u32_key       keys[0];
+};
+
+struct tc_u32_mark {
+       __u32           val;
+       __u32           mask;
+       __u32           success;
+};
+
+struct tc_u32_pcnt {
+       __u64 rcnt;
+       __u64 rhit;
+       __u64 kcnts[0];
+};
+
+/* Flags */
+
+#define TC_U32_TERMINAL                1
+#define TC_U32_OFFSET          2
+#define TC_U32_VAROFFSET       4
+#define TC_U32_EAT             8
+
+#define TC_U32_MAXDEPTH 8
+
+
+/* RSVP filter */
+
+enum {
+       TCA_RSVP_UNSPEC,
+       TCA_RSVP_CLASSID,
+       TCA_RSVP_DST,
+       TCA_RSVP_SRC,
+       TCA_RSVP_PINFO,
+       TCA_RSVP_POLICE,
+       TCA_RSVP_ACT,
+       __TCA_RSVP_MAX
+};
+
+#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
+
+struct tc_rsvp_gpi {
+       __u32   key;
+       __u32   mask;
+       int     offset;
+};
+
+struct tc_rsvp_pinfo {
+       struct tc_rsvp_gpi dpi;
+       struct tc_rsvp_gpi spi;
+       __u8    protocol;
+       __u8    tunnelid;
+       __u8    tunnelhdr;
+       __u8    pad;
+};
+
+/* ROUTE filter */
+
+enum {
+       TCA_ROUTE4_UNSPEC,
+       TCA_ROUTE4_CLASSID,
+       TCA_ROUTE4_TO,
+       TCA_ROUTE4_FROM,
+       TCA_ROUTE4_IIF,
+       TCA_ROUTE4_POLICE,
+       TCA_ROUTE4_ACT,
+       __TCA_ROUTE4_MAX
+};
+
+#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
+
+
+/* FW filter */
+
+enum {
+       TCA_FW_UNSPEC,
+       TCA_FW_CLASSID,
+       TCA_FW_POLICE,
+       TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
+       TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
+       TCA_FW_MASK,
+       __TCA_FW_MAX
+};
+
+#define TCA_FW_MAX (__TCA_FW_MAX - 1)
+
+/* TC index filter */
+
+enum {
+       TCA_TCINDEX_UNSPEC,
+       TCA_TCINDEX_HASH,
+       TCA_TCINDEX_MASK,
+       TCA_TCINDEX_SHIFT,
+       TCA_TCINDEX_FALL_THROUGH,
+       TCA_TCINDEX_CLASSID,
+       TCA_TCINDEX_POLICE,
+       TCA_TCINDEX_ACT,
+       __TCA_TCINDEX_MAX
+};
+
+#define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
+
+/* Flow filter */
+
+enum {
+       FLOW_KEY_SRC,
+       FLOW_KEY_DST,
+       FLOW_KEY_PROTO,
+       FLOW_KEY_PROTO_SRC,
+       FLOW_KEY_PROTO_DST,
+       FLOW_KEY_IIF,
+       FLOW_KEY_PRIORITY,
+       FLOW_KEY_MARK,
+       FLOW_KEY_NFCT,
+       FLOW_KEY_NFCT_SRC,
+       FLOW_KEY_NFCT_DST,
+       FLOW_KEY_NFCT_PROTO_SRC,
+       FLOW_KEY_NFCT_PROTO_DST,
+       FLOW_KEY_RTCLASSID,
+       FLOW_KEY_SKUID,
+       FLOW_KEY_SKGID,
+       FLOW_KEY_VLAN_TAG,
+       FLOW_KEY_RXHASH,
+       __FLOW_KEY_MAX,
+};
+
+#define FLOW_KEY_MAX   (__FLOW_KEY_MAX - 1)
+
+enum {
+       FLOW_MODE_MAP,
+       FLOW_MODE_HASH,
+};
+
+enum {
+       TCA_FLOW_UNSPEC,
+       TCA_FLOW_KEYS,
+       TCA_FLOW_MODE,
+       TCA_FLOW_BASECLASS,
+       TCA_FLOW_RSHIFT,
+       TCA_FLOW_ADDEND,
+       TCA_FLOW_MASK,
+       TCA_FLOW_XOR,
+       TCA_FLOW_DIVISOR,
+       TCA_FLOW_ACT,
+       TCA_FLOW_POLICE,
+       TCA_FLOW_EMATCHES,
+       TCA_FLOW_PERTURB,
+       __TCA_FLOW_MAX
+};
+
+#define TCA_FLOW_MAX   (__TCA_FLOW_MAX - 1)
+
+/* Basic filter */
+
+enum {
+       TCA_BASIC_UNSPEC,
+       TCA_BASIC_CLASSID,
+       TCA_BASIC_EMATCHES,
+       TCA_BASIC_ACT,
+       TCA_BASIC_POLICE,
+       __TCA_BASIC_MAX
+};
+
+#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
+
+
+/* Cgroup classifier */
+
+enum {
+       TCA_CGROUP_UNSPEC,
+       TCA_CGROUP_ACT,
+       TCA_CGROUP_POLICE,
+       TCA_CGROUP_EMATCHES,
+       __TCA_CGROUP_MAX,
+};
+
+#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
+
+/* BPF classifier */
+
+#define TCA_BPF_FLAG_ACT_DIRECT                (1 << 0)
+
+enum {
+       TCA_BPF_UNSPEC,
+       TCA_BPF_ACT,
+       TCA_BPF_POLICE,
+       TCA_BPF_CLASSID,
+       TCA_BPF_OPS_LEN,
+       TCA_BPF_OPS,
+       TCA_BPF_FD,
+       TCA_BPF_NAME,
+       TCA_BPF_FLAGS,
+       __TCA_BPF_MAX,
+};
+
+#define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
+
+/* Flower classifier */
+
+enum {
+       TCA_FLOWER_UNSPEC,
+       TCA_FLOWER_CLASSID,
+       TCA_FLOWER_INDEV,
+       TCA_FLOWER_ACT,
+       TCA_FLOWER_KEY_ETH_DST,         /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_DST_MASK,    /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_SRC,         /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_SRC_MASK,    /* ETH_ALEN */
+       TCA_FLOWER_KEY_ETH_TYPE,        /* be16 */
+       TCA_FLOWER_KEY_IP_PROTO,        /* u8 */
+       TCA_FLOWER_KEY_IPV4_SRC,        /* be32 */
+       TCA_FLOWER_KEY_IPV4_SRC_MASK,   /* be32 */
+       TCA_FLOWER_KEY_IPV4_DST,        /* be32 */
+       TCA_FLOWER_KEY_IPV4_DST_MASK,   /* be32 */
+       TCA_FLOWER_KEY_IPV6_SRC,        /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_SRC_MASK,   /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_DST,        /* struct in6_addr */
+       TCA_FLOWER_KEY_IPV6_DST_MASK,   /* struct in6_addr */
+       TCA_FLOWER_KEY_TCP_SRC,         /* be16 */
+       TCA_FLOWER_KEY_TCP_DST,         /* be16 */
+       TCA_FLOWER_KEY_UDP_SRC,         /* be16 */
+       TCA_FLOWER_KEY_UDP_DST,         /* be16 */
+       __TCA_FLOWER_MAX,
+};
+
+#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
+
+/* Extended Matches */
+
+struct tcf_ematch_tree_hdr {
+       __u16           nmatches;
+       __u16           progid;
+};
+
+enum {
+       TCA_EMATCH_TREE_UNSPEC,
+       TCA_EMATCH_TREE_HDR,
+       TCA_EMATCH_TREE_LIST,
+       __TCA_EMATCH_TREE_MAX
+};
+#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
+
+struct tcf_ematch_hdr {
+       __u16           matchid;
+       __u16           kind;
+       __u16           flags;
+       __u16           pad; /* currently unused */
+};
+
+/*  0                   1
+ *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
+ * +-----------------------+-+-+---+
+ * |         Unused        |S|I| R |
+ * +-----------------------+-+-+---+
+ *
+ * R(2) ::= relation to next ematch
+ *          where: 0 0 END (last ematch)
+ *                 0 1 AND
+ *                 1 0 OR
+ *                 1 1 Unused (invalid)
+ * I(1) ::= invert result
+ * S(1) ::= simple payload
+ */
+#define TCF_EM_REL_END 0
+#define TCF_EM_REL_AND (1<<0)
+#define TCF_EM_REL_OR  (1<<1)
+#define TCF_EM_INVERT  (1<<2)
+#define TCF_EM_SIMPLE  (1<<3)
+
+#define TCF_EM_REL_MASK        3
+#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
+
+enum {
+       TCF_LAYER_LINK,
+       TCF_LAYER_NETWORK,
+       TCF_LAYER_TRANSPORT,
+       __TCF_LAYER_MAX
+};
+#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
+
+/* Ematch type assignments
+ *   1..32767          Reserved for ematches inside kernel tree
+ *   32768..65535      Free to use, not reliable
+ */
+#define        TCF_EM_CONTAINER        0
+#define        TCF_EM_CMP              1
+#define        TCF_EM_NBYTE            2
+#define        TCF_EM_U32              3
+#define        TCF_EM_META             4
+#define        TCF_EM_TEXT             5
+#define        TCF_EM_VLAN             6
+#define        TCF_EM_CANID            7
+#define        TCF_EM_IPSET            8
+#define        TCF_EM_MAX              8
+
+enum {
+       TCF_EM_PROG_TC
+};
+
+enum {
+       TCF_EM_OPND_EQ,
+       TCF_EM_OPND_GT,
+       TCF_EM_OPND_LT
+};
+
+#endif
diff --git a/lib/libdss-include/linux/pkt_sched.h b/lib/libdss-include/linux/pkt_sched.h
new file mode 100644 (file)
index 0000000..8d2530d
--- /dev/null
@@ -0,0 +1,853 @@
+#ifndef __LINUX_PKT_SCHED_H
+#define __LINUX_PKT_SCHED_H
+
+#include <linux/types.h>
+
+/* Logical priority bands not depending on specific packet scheduler.
+   Every scheduler will map them to real traffic classes, if it has
+   no more precise mechanism to classify packets.
+
+   These numbers have no special meaning, though their coincidence
+   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
+   preferred full anarchy inspired by diffserv group.
+
+   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
+   class, actually, as rule it will be handled with more care than
+   filler or even bulk.
+ */
+
+#define TC_PRIO_BESTEFFORT             0
+#define TC_PRIO_FILLER                 1
+#define TC_PRIO_BULK                   2
+#define TC_PRIO_INTERACTIVE_BULK       4
+#define TC_PRIO_INTERACTIVE            6
+#define TC_PRIO_CONTROL                        7
+
+#define TC_PRIO_MAX                    15
+
+/* Generic queue statistics, available for all the elements.
+   Particular schedulers may have also their private records.
+ */
+
+struct tc_stats {
+       __u64   bytes;                  /* Number of enqueued bytes */
+       __u32   packets;                /* Number of enqueued packets   */
+       __u32   drops;                  /* Packets dropped because of lack of resources */
+       __u32   overlimits;             /* Number of throttle events when this
+                                        * flow goes out of allocated bandwidth */
+       __u32   bps;                    /* Current flow byte rate */
+       __u32   pps;                    /* Current flow packet rate */
+       __u32   qlen;
+       __u32   backlog;
+};
+
+struct tc_estimator {
+       signed char     interval;
+       unsigned char   ewma_log;
+};
+
+/* "Handles"
+   ---------
+
+    All the traffic control objects have 32bit identifiers, or "handles".
+
+    They can be considered as opaque numbers from user API viewpoint,
+    but actually they always consist of two fields: major and
+    minor numbers, which are interpreted by kernel specially,
+    that may be used by applications, though not recommended.
+
+    F.e. qdisc handles always have minor number equal to zero,
+    classes (or flows) have major equal to parent qdisc major, and
+    minor uniquely identifying class inside qdisc.
+
+    Macros to manipulate handles:
+ */
+
+#define TC_H_MAJ_MASK (0xFFFF0000U)
+#define TC_H_MIN_MASK (0x0000FFFFU)
+#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
+#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
+#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
+
+#define TC_H_UNSPEC    (0U)
+#define TC_H_ROOT      (0xFFFFFFFFU)
+#define TC_H_INGRESS    (0xFFFFFFF1U)
+
+/* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
+enum tc_link_layer {
+       TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
+       TC_LINKLAYER_ETHERNET,
+       TC_LINKLAYER_ATM,
+};
+#define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
+
+struct tc_ratespec {
+       unsigned char   cell_log;
+       __u8            linklayer; /* lower 4 bits */
+       unsigned short  overhead;
+       short           cell_align;
+       unsigned short  mpu;
+       __u32           rate;
+};
+
+#define TC_RTAB_SIZE   1024
+
+struct tc_sizespec {
+       unsigned char   cell_log;
+       unsigned char   size_log;
+       short           cell_align;
+       int             overhead;
+       unsigned int    linklayer;
+       unsigned int    mpu;
+       unsigned int    mtu;
+       unsigned int    tsize;
+};
+
+enum {
+       TCA_STAB_UNSPEC,
+       TCA_STAB_BASE,
+       TCA_STAB_DATA,
+       __TCA_STAB_MAX
+};
+
+#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
+
+/* FIFO section */
+
+struct tc_fifo_qopt {
+       __u32   limit;  /* Queue length: bytes for bfifo, packets for pfifo */
+};
+
+/* PRIO section */
+
+#define TCQ_PRIO_BANDS 16
+#define TCQ_MIN_PRIO_BANDS 2
+
+struct tc_prio_qopt {
+       int     bands;                  /* Number of bands */
+       __u8    priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
+};
+
+/* MULTIQ section */
+
+struct tc_multiq_qopt {
+       __u16   bands;                  /* Number of bands */
+       __u16   max_bands;              /* Maximum number of queues */
+};
+
+/* PLUG section */
+
+#define TCQ_PLUG_BUFFER                0
+#define TCQ_PLUG_RELEASE_ONE           1
+#define TCQ_PLUG_RELEASE_INDEFINITE    2
+#define TCQ_PLUG_LIMIT                 3
+
+struct tc_plug_qopt {
+       /* TCQ_PLUG_BUFFER: Inset a plug into the queue and
+        *  buffer any incoming packets
+        * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
+        *   to beginning of the next plug.
+        * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
+        *   Stop buffering packets until the next TCQ_PLUG_BUFFER
+        *   command is received (just act as a pass-thru queue).
+        * TCQ_PLUG_LIMIT: Increase/decrease queue size
+        */
+       int             action;
+       __u32           limit;
+};
+
+/* TBF section */
+
+struct tc_tbf_qopt {
+       struct tc_ratespec rate;
+       struct tc_ratespec peakrate;
+       __u32           limit;
+       __u32           buffer;
+       __u32           mtu;
+};
+
+enum {
+       TCA_TBF_UNSPEC,
+       TCA_TBF_PARMS,
+       TCA_TBF_RTAB,
+       TCA_TBF_PTAB,
+       TCA_TBF_RATE64,
+       TCA_TBF_PRATE64,
+       TCA_TBF_BURST,
+       TCA_TBF_PBURST,
+       __TCA_TBF_MAX,
+};
+
+#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
+
+
+/* TEQL section */
+
+/* TEQL does not require any parameters */
+
+/* SFQ section */
+
+struct tc_sfq_qopt {
+       unsigned        quantum;        /* Bytes per round allocated to flow */
+       int             perturb_period; /* Period of hash perturbation */
+       __u32           limit;          /* Maximal packets in queue */
+       unsigned        divisor;        /* Hash divisor  */
+       unsigned        flows;          /* Maximal number of flows  */
+};
+
+struct tc_sfqred_stats {
+       __u32           prob_drop;      /* Early drops, below max threshold */
+       __u32           forced_drop;    /* Early drops, after max threshold */
+       __u32           prob_mark;      /* Marked packets, below max threshold */
+       __u32           forced_mark;    /* Marked packets, after max threshold */
+       __u32           prob_mark_head; /* Marked packets, below max threshold */
+       __u32           forced_mark_head;/* Marked packets, after max threshold */
+};
+
+struct tc_sfq_qopt_v1 {
+       struct tc_sfq_qopt v0;
+       unsigned int    depth;          /* max number of packets per flow */
+       unsigned int    headdrop;
+/* SFQRED parameters */
+       __u32           limit;          /* HARD maximal flow queue length (bytes) */
+       __u32           qth_min;        /* Min average length threshold (bytes) */
+       __u32           qth_max;        /* Max average length threshold (bytes) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;
+       __u32           max_P;          /* probability, high resolution */
+/* SFQRED stats */
+       struct tc_sfqred_stats stats;
+};
+
+
+struct tc_sfq_xstats {
+       __s32           allot;
+};
+
+/* RED section */
+
+enum {
+       TCA_RED_UNSPEC,
+       TCA_RED_PARMS,
+       TCA_RED_STAB,
+       TCA_RED_MAX_P,
+       __TCA_RED_MAX,
+};
+
+#define TCA_RED_MAX (__TCA_RED_MAX - 1)
+
+struct tc_red_qopt {
+       __u32           limit;          /* HARD maximal queue length (bytes)    */
+       __u32           qth_min;        /* Min average length threshold (bytes) */
+       __u32           qth_max;        /* Max average length threshold (bytes) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;
+#define TC_RED_ECN             1
+#define TC_RED_HARDDROP                2
+#define TC_RED_ADAPTATIVE      4
+};
+
+struct tc_red_xstats {
+       __u32           early;          /* Early drops */
+       __u32           pdrop;          /* Drops due to queue limits */
+       __u32           other;          /* Drops due to drop() calls */
+       __u32           marked;         /* Marked packets */
+};
+
+/* GRED section */
+
+#define MAX_DPs 16
+
+enum {
+       TCA_GRED_UNSPEC,
+       TCA_GRED_PARMS,
+       TCA_GRED_STAB,
+       TCA_GRED_DPS,
+       TCA_GRED_MAX_P,
+       TCA_GRED_LIMIT,
+       __TCA_GRED_MAX,
+};
+
+#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
+
+struct tc_gred_qopt {
+       __u32           limit;        /* HARD maximal queue length (bytes)    */
+       __u32           qth_min;      /* Min average length threshold (bytes) */
+       __u32           qth_max;      /* Max average length threshold (bytes) */
+       __u32           DP;           /* up to 2^32 DPs */
+       __u32           backlog;
+       __u32           qave;
+       __u32           forced;
+       __u32           early;
+       __u32           other;
+       __u32           pdrop;
+       __u8            Wlog;         /* log(W)               */
+       __u8            Plog;         /* log(P_max/(qth_max-qth_min)) */
+       __u8            Scell_log;    /* cell size for idle damping */
+       __u8            prio;         /* prio of this VQ */
+       __u32           packets;
+       __u32           bytesin;
+};
+
+/* gred setup */
+struct tc_gred_sopt {
+       __u32           DPs;
+       __u32           def_DP;
+       __u8            grio;
+       __u8            flags;
+       __u16           pad1;
+};
+
+/* CHOKe section */
+
+enum {
+       TCA_CHOKE_UNSPEC,
+       TCA_CHOKE_PARMS,
+       TCA_CHOKE_STAB,
+       TCA_CHOKE_MAX_P,
+       __TCA_CHOKE_MAX,
+};
+
+#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
+
+struct tc_choke_qopt {
+       __u32           limit;          /* Hard queue length (packets)  */
+       __u32           qth_min;        /* Min average threshold (packets) */
+       __u32           qth_max;        /* Max average threshold (packets) */
+       unsigned char   Wlog;           /* log(W)               */
+       unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
+       unsigned char   Scell_log;      /* cell size for idle damping */
+       unsigned char   flags;          /* see RED flags */
+};
+
+struct tc_choke_xstats {
+       __u32           early;          /* Early drops */
+       __u32           pdrop;          /* Drops due to queue limits */
+       __u32           other;          /* Drops due to drop() calls */
+       __u32           marked;         /* Marked packets */
+       __u32           matched;        /* Drops due to flow match */
+};
+
+/* HTB section */
+#define TC_HTB_NUMPRIO         8
+#define TC_HTB_MAXDEPTH                8
+#define TC_HTB_PROTOVER                3 /* the same as HTB and TC's major */
+
+struct tc_htb_opt {
+       struct tc_ratespec      rate;
+       struct tc_ratespec      ceil;
+       __u32   buffer;
+       __u32   cbuffer;
+       __u32   quantum;
+       __u32   level;          /* out only */
+       __u32   prio;
+};
+struct tc_htb_glob {
+       __u32 version;          /* to match HTB/TC */
+       __u32 rate2quantum;     /* bps->quantum divisor */
+       __u32 defcls;           /* default class number */
+       __u32 debug;            /* debug flags */
+
+       /* stats */
+       __u32 direct_pkts; /* count of non shaped packets */
+};
+enum {
+       TCA_HTB_UNSPEC,
+       TCA_HTB_PARMS,
+       TCA_HTB_INIT,
+       TCA_HTB_CTAB,
+       TCA_HTB_RTAB,
+       TCA_HTB_DIRECT_QLEN,
+       TCA_HTB_RATE64,
+       TCA_HTB_CEIL64,
+       __TCA_HTB_MAX,
+};
+
+#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
+
+struct tc_htb_xstats {
+       __u32 lends;
+       __u32 borrows;
+       __u32 giants;   /* too big packets (rate will not be accurate) */
+       __u32 tokens;
+       __u32 ctokens;
+};
+
+/* HFSC section */
+
+struct tc_hfsc_qopt {
+       __u16   defcls;         /* default class */
+};
+
+struct tc_service_curve {
+       __u32   m1;             /* slope of the first segment in bps */
+       __u32   d;              /* x-projection of the first segment in us */
+       __u32   m2;             /* slope of the second segment in bps */
+};
+
+struct tc_hfsc_stats {
+       __u64   work;           /* total work done */
+       __u64   rtwork;         /* work done by real-time criteria */
+       __u32   period;         /* current period */
+       __u32   level;          /* class level in hierarchy */
+};
+
+enum {
+       TCA_HFSC_UNSPEC,
+       TCA_HFSC_RSC,
+       TCA_HFSC_FSC,
+       TCA_HFSC_USC,
+       __TCA_HFSC_MAX,
+};
+
+#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
+
+
+/* CBQ section */
+
+#define TC_CBQ_MAXPRIO         8
+#define TC_CBQ_MAXLEVEL                8
+#define TC_CBQ_DEF_EWMA                5
+
+struct tc_cbq_lssopt {
+       unsigned char   change;
+       unsigned char   flags;
+#define TCF_CBQ_LSS_BOUNDED    1
+#define TCF_CBQ_LSS_ISOLATED   2
+       unsigned char   ewma_log;
+       unsigned char   level;
+#define TCF_CBQ_LSS_FLAGS      1
+#define TCF_CBQ_LSS_EWMA       2
+#define TCF_CBQ_LSS_MAXIDLE    4
+#define TCF_CBQ_LSS_MINIDLE    8
+#define TCF_CBQ_LSS_OFFTIME    0x10
+#define TCF_CBQ_LSS_AVPKT      0x20
+       __u32           maxidle;
+       __u32           minidle;
+       __u32           offtime;
+       __u32           avpkt;
+};
+
+struct tc_cbq_wrropt {
+       unsigned char   flags;
+       unsigned char   priority;
+       unsigned char   cpriority;
+       unsigned char   __reserved;
+       __u32           allot;
+       __u32           weight;
+};
+
+struct tc_cbq_ovl {
+       unsigned char   strategy;
+#define        TC_CBQ_OVL_CLASSIC      0
+#define        TC_CBQ_OVL_DELAY        1
+#define        TC_CBQ_OVL_LOWPRIO      2
+#define        TC_CBQ_OVL_DROP         3
+#define        TC_CBQ_OVL_RCLASSIC     4
+       unsigned char   priority2;
+       __u16           pad;
+       __u32           penalty;
+};
+
+struct tc_cbq_police {
+       unsigned char   police;
+       unsigned char   __res1;
+       unsigned short  __res2;
+};
+
+struct tc_cbq_fopt {
+       __u32           split;
+       __u32           defmap;
+       __u32           defchange;
+};
+
+struct tc_cbq_xstats {
+       __u32           borrows;
+       __u32           overactions;
+       __s32           avgidle;
+       __s32           undertime;
+};
+
+enum {
+       TCA_CBQ_UNSPEC,
+       TCA_CBQ_LSSOPT,
+       TCA_CBQ_WRROPT,
+       TCA_CBQ_FOPT,
+       TCA_CBQ_OVL_STRATEGY,
+       TCA_CBQ_RATE,
+       TCA_CBQ_RTAB,
+       TCA_CBQ_POLICE,
+       __TCA_CBQ_MAX,
+};
+
+#define TCA_CBQ_MAX    (__TCA_CBQ_MAX - 1)
+
+/* dsmark section */
+
+enum {
+       TCA_DSMARK_UNSPEC,
+       TCA_DSMARK_INDICES,
+       TCA_DSMARK_DEFAULT_INDEX,
+       TCA_DSMARK_SET_TC_INDEX,
+       TCA_DSMARK_MASK,
+       TCA_DSMARK_VALUE,
+       __TCA_DSMARK_MAX,
+};
+
+#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
+
+/* ATM  section */
+
+enum {
+       TCA_ATM_UNSPEC,
+       TCA_ATM_FD,             /* file/socket descriptor */
+       TCA_ATM_PTR,            /* pointer to descriptor - later */
+       TCA_ATM_HDR,            /* LL header */
+       TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
+       TCA_ATM_ADDR,           /* PVC address (for output only) */
+       TCA_ATM_STATE,          /* VC state (ATM_VS_*; for output only) */
+       __TCA_ATM_MAX,
+};
+
+#define TCA_ATM_MAX    (__TCA_ATM_MAX - 1)
+
+/* Network emulator */
+
+enum {
+       TCA_NETEM_UNSPEC,
+       TCA_NETEM_CORR,
+       TCA_NETEM_DELAY_DIST,
+       TCA_NETEM_REORDER,
+       TCA_NETEM_CORRUPT,
+       TCA_NETEM_LOSS,
+       TCA_NETEM_RATE,
+       TCA_NETEM_ECN,
+       TCA_NETEM_RATE64,
+       __TCA_NETEM_MAX,
+};
+
+#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
+
+struct tc_netem_qopt {
+       __u32   latency;        /* added delay (us) */
+       __u32   limit;          /* fifo limit (packets) */
+       __u32   loss;           /* random packet loss (0=none ~0=100%) */
+       __u32   gap;            /* re-ordering gap (0 for none) */
+       __u32   duplicate;      /* random packet dup  (0=none ~0=100%) */
+       __u32   jitter;         /* random jitter in latency (us) */
+};
+
+struct tc_netem_corr {
+       __u32   delay_corr;     /* delay correlation */
+       __u32   loss_corr;      /* packet loss correlation */
+       __u32   dup_corr;       /* duplicate correlation  */
+};
+
+struct tc_netem_reorder {
+       __u32   probability;
+       __u32   correlation;
+};
+
+struct tc_netem_corrupt {
+       __u32   probability;
+       __u32   correlation;
+};
+
+struct tc_netem_rate {
+       __u32   rate;   /* byte/s */
+       __s32   packet_overhead;
+       __u32   cell_size;
+       __s32   cell_overhead;
+};
+
+enum {
+       NETEM_LOSS_UNSPEC,
+       NETEM_LOSS_GI,          /* General Intuitive - 4 state model */
+       NETEM_LOSS_GE,          /* Gilbert Elliot models */
+       __NETEM_LOSS_MAX
+};
+#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
+
+/* State transition probabilities for 4 state model */
+struct tc_netem_gimodel {
+       __u32   p13;
+       __u32   p31;
+       __u32   p32;
+       __u32   p14;
+       __u32   p23;
+};
+
+/* Gilbert-Elliot models */
+struct tc_netem_gemodel {
+       __u32 p;
+       __u32 r;
+       __u32 h;
+       __u32 k1;
+};
+
+#define NETEM_DIST_SCALE       8192
+#define NETEM_DIST_MAX         16384
+
+/* DRR */
+
+enum {
+       TCA_DRR_UNSPEC,
+       TCA_DRR_QUANTUM,
+       __TCA_DRR_MAX
+};
+
+#define TCA_DRR_MAX    (__TCA_DRR_MAX - 1)
+
+struct tc_drr_stats {
+       __u32   deficit;
+};
+
+/* MQPRIO */
+#define TC_QOPT_BITMASK 15
+#define TC_QOPT_MAX_QUEUE 16
+
+struct tc_mqprio_qopt {
+       __u8    num_tc;
+       __u8    prio_tc_map[TC_QOPT_BITMASK + 1];
+       __u8    hw;
+       __u16   count[TC_QOPT_MAX_QUEUE];
+       __u16   offset[TC_QOPT_MAX_QUEUE];
+};
+
+/* SFB */
+
+enum {
+       TCA_SFB_UNSPEC,
+       TCA_SFB_PARMS,
+       __TCA_SFB_MAX,
+};
+
+#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
+
+/*
+ * Note: increment, decrement are Q0.16 fixed-point values.
+ */
+struct tc_sfb_qopt {
+       __u32 rehash_interval;  /* delay between hash move, in ms */
+       __u32 warmup_time;      /* double buffering warmup time in ms (warmup_time < rehash_interval) */
+       __u32 max;              /* max len of qlen_min */
+       __u32 bin_size;         /* maximum queue length per bin */
+       __u32 increment;        /* probability increment, (d1 in Blue) */
+       __u32 decrement;        /* probability decrement, (d2 in Blue) */
+       __u32 limit;            /* max SFB queue length */
+       __u32 penalty_rate;     /* inelastic flows are rate limited to 'rate' pps */
+       __u32 penalty_burst;
+};
+
+struct tc_sfb_xstats {
+       __u32 earlydrop;
+       __u32 penaltydrop;
+       __u32 bucketdrop;
+       __u32 queuedrop;
+       __u32 childdrop; /* drops in child qdisc */
+       __u32 marked;
+       __u32 maxqlen;
+       __u32 maxprob;
+       __u32 avgprob;
+};
+
+#define SFB_MAX_PROB 0xFFFF
+
+/* QFQ */
+enum {
+       TCA_QFQ_UNSPEC,
+       TCA_QFQ_WEIGHT,
+       TCA_QFQ_LMAX,
+       __TCA_QFQ_MAX
+};
+
+#define TCA_QFQ_MAX    (__TCA_QFQ_MAX - 1)
+
+struct tc_qfq_stats {
+       __u32 weight;
+       __u32 lmax;
+};
+
+/* CODEL */
+
+enum {
+       TCA_CODEL_UNSPEC,
+       TCA_CODEL_TARGET,
+       TCA_CODEL_LIMIT,
+       TCA_CODEL_INTERVAL,
+       TCA_CODEL_ECN,
+       TCA_CODEL_CE_THRESHOLD,
+       __TCA_CODEL_MAX
+};
+
+#define TCA_CODEL_MAX  (__TCA_CODEL_MAX - 1)
+
+struct tc_codel_xstats {
+       __u32   maxpacket; /* largest packet we've seen so far */
+       __u32   count;     /* how many drops we've done since the last time we
+                           * entered dropping state
+                           */
+       __u32   lastcount; /* count at entry to dropping state */
+       __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
+       __s32   drop_next; /* time to drop next packet */
+       __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
+       __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
+       __u32   dropping;  /* are we in dropping state ? */
+       __u32   ce_mark;   /* number of CE marked packets because of ce_threshold */
+};
+
+/* FQ_CODEL */
+
+enum {
+       TCA_FQ_CODEL_UNSPEC,
+       TCA_FQ_CODEL_TARGET,
+       TCA_FQ_CODEL_LIMIT,
+       TCA_FQ_CODEL_INTERVAL,
+       TCA_FQ_CODEL_ECN,
+       TCA_FQ_CODEL_FLOWS,
+       TCA_FQ_CODEL_QUANTUM,
+       TCA_FQ_CODEL_CE_THRESHOLD,
+       __TCA_FQ_CODEL_MAX
+};
+
+#define TCA_FQ_CODEL_MAX       (__TCA_FQ_CODEL_MAX - 1)
+
+enum {
+       TCA_FQ_CODEL_XSTATS_QDISC,
+       TCA_FQ_CODEL_XSTATS_CLASS,
+};
+
+struct tc_fq_codel_qd_stats {
+       __u32   maxpacket;      /* largest packet we've seen so far */
+       __u32   drop_overlimit; /* number of time max qdisc
+                                * packet limit was hit
+                                */
+       __u32   ecn_mark;       /* number of packets we ECN marked
+                                * instead of being dropped
+                                */
+       __u32   new_flow_count; /* number of time packets
+                                * created a 'new flow'
+                                */
+       __u32   new_flows_len;  /* count of flows in new list */
+       __u32   old_flows_len;  /* count of flows in old list */
+       __u32   ce_mark;        /* packets above ce_threshold */
+};
+
+struct tc_fq_codel_cl_stats {
+       __s32   deficit;
+       __u32   ldelay;         /* in-queue delay seen by most recently
+                                * dequeued packet
+                                */
+       __u32   count;
+       __u32   lastcount;
+       __u32   dropping;
+       __s32   drop_next;
+};
+
+struct tc_fq_codel_xstats {
+       __u32   type;
+       union {
+               struct tc_fq_codel_qd_stats qdisc_stats;
+               struct tc_fq_codel_cl_stats class_stats;
+       };
+};
+
+/* FQ */
+
+enum {
+       TCA_FQ_UNSPEC,
+
+       TCA_FQ_PLIMIT,          /* limit of total number of packets in queue */
+
+       TCA_FQ_FLOW_PLIMIT,     /* limit of packets per flow */
+
+       TCA_FQ_QUANTUM,         /* RR quantum */
+
+       TCA_FQ_INITIAL_QUANTUM,         /* RR quantum for new flow */
+
+       TCA_FQ_RATE_ENABLE,     /* enable/disable rate limiting */
+
+       TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
+
+       TCA_FQ_FLOW_MAX_RATE,   /* per flow max rate */
+
+       TCA_FQ_BUCKETS_LOG,     /* log2(number of buckets) */
+
+       TCA_FQ_FLOW_REFILL_DELAY,       /* flow credit refill delay in usec */
+
+       TCA_FQ_ORPHAN_MASK,     /* mask applied to orphaned skb hashes */
+
+       __TCA_FQ_MAX
+};
+
+#define TCA_FQ_MAX     (__TCA_FQ_MAX - 1)
+
+struct tc_fq_qd_stats {
+       __u64   gc_flows;
+       __u64   highprio_packets;
+       __u64   tcp_retrans;
+       __u64   throttled;
+       __u64   flows_plimit;
+       __u64   pkts_too_long;
+       __u64   allocation_errors;
+       __s64   time_next_delayed_flow;
+       __u32   flows;
+       __u32   inactive_flows;
+       __u32   throttled_flows;
+       __u32   pad;
+};
+
+/* Heavy-Hitter Filter */
+
+enum {
+       TCA_HHF_UNSPEC,
+       TCA_HHF_BACKLOG_LIMIT,
+       TCA_HHF_QUANTUM,
+       TCA_HHF_HH_FLOWS_LIMIT,
+       TCA_HHF_RESET_TIMEOUT,
+       TCA_HHF_ADMIT_BYTES,
+       TCA_HHF_EVICT_TIMEOUT,
+       TCA_HHF_NON_HH_WEIGHT,
+       __TCA_HHF_MAX
+};
+
+#define TCA_HHF_MAX    (__TCA_HHF_MAX - 1)
+
+struct tc_hhf_xstats {
+       __u32   drop_overlimit; /* number of times max qdisc packet limit
+                                * was hit
+                                */
+       __u32   hh_overlimit;   /* number of times max heavy-hitters was hit */
+       __u32   hh_tot_count;   /* number of captured heavy-hitters so far */
+       __u32   hh_cur_count;   /* number of current heavy-hitters */
+};
+
+/* PIE */
+enum {
+       TCA_PIE_UNSPEC,
+       TCA_PIE_TARGET,
+       TCA_PIE_LIMIT,
+       TCA_PIE_TUPDATE,
+       TCA_PIE_ALPHA,
+       TCA_PIE_BETA,
+       TCA_PIE_ECN,
+       TCA_PIE_BYTEMODE,
+       __TCA_PIE_MAX
+};
+#define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
+
+struct tc_pie_xstats {
+       __u32 prob;             /* current probability */
+       __u32 delay;            /* current delay in ms */
+       __u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */
+       __u32 packets_in;       /* total number of packets enqueued */
+       __u32 dropped;          /* packets dropped due to pie_action */
+       __u32 overlimit;        /* dropped due to lack of space in queue */
+       __u32 maxq;             /* maximum queue size */
+       __u32 ecn_mark;         /* packets marked with ecn*/
+};
+#endif
diff --git a/lib/libdss-include/linux/pktcdvd.h b/lib/libdss-include/linux/pktcdvd.h
new file mode 100644 (file)
index 0000000..7c31eb7
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2000 Jens Axboe <axboe@suse.de>
+ * Copyright (C) 2001-2004 Peter Osterlund <petero2@telia.com>
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * Packet writing layer for ATAPI and SCSI CD-R, CD-RW, DVD-R, and
+ * DVD-RW devices.
+ *
+ */
+#ifndef __PKTCDVD_H
+#define __PKTCDVD_H
+
+#include <linux/types.h>
+
+/*
+ * 1 for normal debug messages, 2 is very verbose. 0 to turn it off.
+ */
+#define PACKET_DEBUG           1
+
+#define        MAX_WRITERS             8
+
+#define PKT_RB_POOL_SIZE       512
+
+/*
+ * How long we should hold a non-full packet before starting data gathering.
+ */
+#define PACKET_WAIT_TIME       (HZ * 5 / 1000)
+
+/*
+ * use drive write caching -- we need deferred error handling to be
+ * able to successfully recover with this option (drive will return good
+ * status as soon as the cdb is validated).
+ */
+#if defined(CONFIG_CDROM_PKTCDVD_WCACHE)
+#define USE_WCACHING           1
+#else
+#define USE_WCACHING           0
+#endif
+
+/*
+ * No user-servicable parts beyond this point ->
+ */
+
+/*
+ * device types
+ */
+#define PACKET_CDR             1
+#define        PACKET_CDRW             2
+#define PACKET_DVDR            3
+#define PACKET_DVDRW           4
+
+/*
+ * flags
+ */
+#define PACKET_WRITABLE                1       /* pd is writable */
+#define PACKET_NWA_VALID       2       /* next writable address valid */
+#define PACKET_LRA_VALID       3       /* last recorded address valid */
+#define PACKET_MERGE_SEGS      4       /* perform segment merging to keep */
+                                       /* underlying cdrom device happy */
+
+/*
+ * Disc status -- from READ_DISC_INFO
+ */
+#define PACKET_DISC_EMPTY      0
+#define PACKET_DISC_INCOMPLETE 1
+#define PACKET_DISC_COMPLETE   2
+#define PACKET_DISC_OTHER      3
+
+/*
+ * write type, and corresponding data block type
+ */
+#define PACKET_MODE1           1
+#define PACKET_MODE2           2
+#define PACKET_BLOCK_MODE1     8
+#define PACKET_BLOCK_MODE2     10
+
+/*
+ * Last session/border status
+ */
+#define PACKET_SESSION_EMPTY           0
+#define PACKET_SESSION_INCOMPLETE      1
+#define PACKET_SESSION_RESERVED                2
+#define PACKET_SESSION_COMPLETE                3
+
+#define PACKET_MCN                     "4a656e734178626f65323030300000"
+
+#undef PACKET_USE_LS
+
+#define PKT_CTRL_CMD_SETUP     0
+#define PKT_CTRL_CMD_TEARDOWN  1
+#define PKT_CTRL_CMD_STATUS    2
+
+struct pkt_ctrl_command {
+       __u32 command;                          /* in: Setup, teardown, status */
+       __u32 dev_index;                        /* in/out: Device index */
+       __u32 dev;                              /* in/out: Device nr for cdrw device */
+       __u32 pkt_dev;                          /* in/out: Device nr for packet device */
+       __u32 num_devices;                      /* out: Largest device index + 1 */
+       __u32 padding;                          /* Not used */
+};
+
+/*
+ * packet ioctls
+ */
+#define PACKET_IOCTL_MAGIC     ('X')
+#define PACKET_CTRL_CMD                _IOWR(PACKET_IOCTL_MAGIC, 1, struct pkt_ctrl_command)
+
+
+#endif /* __PKTCDVD_H */
diff --git a/lib/libdss-include/linux/pmu.h b/lib/libdss-include/linux/pmu.h
new file mode 100644 (file)
index 0000000..12eccb4
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Definitions for talking to the PMU.  The PMU is a microcontroller
+ * which controls battery charging and system power on PowerBook 3400
+ * and 2400 models as well as the RTC and various other things.
+ *
+ * Copyright (C) 1998 Paul Mackerras.
+ */
+
+#ifndef _LINUX_PMU_H
+#define _LINUX_PMU_H
+
+#define PMU_DRIVER_VERSION     2
+
+/*
+ * PMU commands
+ */
+#define PMU_POWER_CTRL0                0x10    /* control power of some devices */
+#define PMU_POWER_CTRL         0x11    /* control power of some devices */
+#define PMU_ADB_CMD            0x20    /* send ADB packet */
+#define PMU_ADB_POLL_OFF       0x21    /* disable ADB auto-poll */
+#define PMU_WRITE_NVRAM                0x33    /* write non-volatile RAM */
+#define PMU_READ_NVRAM         0x3b    /* read non-volatile RAM */
+#define PMU_SET_RTC            0x30    /* set real-time clock */
+#define PMU_READ_RTC           0x38    /* read real-time clock */
+#define PMU_SET_VOLBUTTON      0x40    /* set volume up/down position */
+#define PMU_BACKLIGHT_BRIGHT   0x41    /* set backlight brightness */
+#define PMU_GET_VOLBUTTON      0x48    /* get volume up/down position */
+#define PMU_PCEJECT            0x4c    /* eject PC-card from slot */
+#define PMU_BATTERY_STATE      0x6b    /* report battery state etc. */
+#define PMU_SMART_BATTERY_STATE        0x6f    /* report battery state (new way) */
+#define PMU_SET_INTR_MASK      0x70    /* set PMU interrupt mask */
+#define PMU_INT_ACK            0x78    /* read interrupt bits */
+#define PMU_SHUTDOWN           0x7e    /* turn power off */
+#define PMU_CPU_SPEED          0x7d    /* control CPU speed on some models */
+#define PMU_SLEEP              0x7f    /* put CPU to sleep */
+#define PMU_POWER_EVENTS       0x8f    /* Send power-event commands to PMU */
+#define PMU_I2C_CMD            0x9a    /* I2C operations */
+#define PMU_RESET              0xd0    /* reset CPU */
+#define PMU_GET_BRIGHTBUTTON   0xd9    /* report brightness up/down pos */
+#define PMU_GET_COVER          0xdc    /* report cover open/closed */
+#define PMU_SYSTEM_READY       0xdf    /* tell PMU we are awake */
+#define PMU_GET_VERSION                0xea    /* read the PMU version */
+
+/* Bits to use with the PMU_POWER_CTRL0 command */
+#define PMU_POW0_ON            0x80    /* OR this to power ON the device */
+#define PMU_POW0_OFF           0x00    /* leave bit 7 to 0 to power it OFF */
+#define PMU_POW0_HARD_DRIVE    0x04    /* Hard drive power (on wallstreet/lombard ?) */
+
+/* Bits to use with the PMU_POWER_CTRL command */
+#define PMU_POW_ON             0x80    /* OR this to power ON the device */
+#define PMU_POW_OFF            0x00    /* leave bit 7 to 0 to power it OFF */
+#define PMU_POW_BACKLIGHT      0x01    /* backlight power */
+#define PMU_POW_CHARGER                0x02    /* battery charger power */
+#define PMU_POW_IRLED          0x04    /* IR led power (on wallstreet) */
+#define PMU_POW_MEDIABAY       0x08    /* media bay power (wallstreet/lombard ?) */
+
+/* Bits in PMU interrupt and interrupt mask bytes */
+#define PMU_INT_PCEJECT                0x04    /* PC-card eject buttons */
+#define PMU_INT_SNDBRT         0x08    /* sound/brightness up/down buttons */
+#define PMU_INT_ADB            0x10    /* ADB autopoll or reply data */
+#define PMU_INT_BATTERY                0x20    /* Battery state change */
+#define PMU_INT_ENVIRONMENT    0x40    /* Environment interrupts */
+#define PMU_INT_TICK           0x80    /* 1-second tick interrupt */
+
+/* Other bits in PMU interrupt valid when PMU_INT_ADB is set */
+#define PMU_INT_ADB_AUTO       0x04    /* ADB autopoll, when PMU_INT_ADB */
+#define PMU_INT_WAITING_CHARGER        0x01    /* ??? */
+#define PMU_INT_AUTO_SRQ_POLL  0x02    /* ??? */
+
+/* Bits in the environement message (either obtained via PMU_GET_COVER,
+ * or via PMU_INT_ENVIRONMENT on core99 */
+#define PMU_ENV_LID_CLOSED     0x01    /* The lid is closed */
+
+/* I2C related definitions */
+#define PMU_I2C_MODE_SIMPLE    0
+#define PMU_I2C_MODE_STDSUB    1
+#define PMU_I2C_MODE_COMBINED  2
+
+#define PMU_I2C_BUS_STATUS     0
+#define PMU_I2C_BUS_SYSCLK     1
+#define PMU_I2C_BUS_POWER      2
+
+#define PMU_I2C_STATUS_OK      0
+#define PMU_I2C_STATUS_DATAREAD        1
+#define PMU_I2C_STATUS_BUSY    0xfe
+
+
+/* Kind of PMU (model) */
+enum {
+       PMU_UNKNOWN,
+       PMU_OHARE_BASED,        /* 2400, 3400, 3500 (old G3 powerbook) */
+       PMU_HEATHROW_BASED,     /* PowerBook G3 series */
+       PMU_PADDINGTON_BASED,   /* 1999 PowerBook G3 */
+       PMU_KEYLARGO_BASED,     /* Core99 motherboard (PMU99) */
+       PMU_68K_V1,             /* 68K PMU, version 1 */
+       PMU_68K_V2,             /* 68K PMU, version 2 */
+};
+
+/* PMU PMU_POWER_EVENTS commands */
+enum {
+       PMU_PWR_GET_POWERUP_EVENTS      = 0x00,
+       PMU_PWR_SET_POWERUP_EVENTS      = 0x01,
+       PMU_PWR_CLR_POWERUP_EVENTS      = 0x02,
+       PMU_PWR_GET_WAKEUP_EVENTS       = 0x03,
+       PMU_PWR_SET_WAKEUP_EVENTS       = 0x04,
+       PMU_PWR_CLR_WAKEUP_EVENTS       = 0x05,
+};
+
+/* Power events wakeup bits */
+enum {
+       PMU_PWR_WAKEUP_KEY              = 0x01, /* Wake on key press */
+       PMU_PWR_WAKEUP_AC_INSERT        = 0x02, /* Wake on AC adapter plug */
+       PMU_PWR_WAKEUP_AC_CHANGE        = 0x04,
+       PMU_PWR_WAKEUP_LID_OPEN         = 0x08,
+       PMU_PWR_WAKEUP_RING             = 0x10,
+};
+       
+/*
+ * Ioctl commands for the /dev/pmu device
+ */
+#include <linux/ioctl.h>
+
+/* no param */
+#define PMU_IOC_SLEEP          _IO('B', 0)
+/* out param: u32*     backlight value: 0 to 15 */
+#define PMU_IOC_GET_BACKLIGHT  _IOR('B', 1, size_t)
+/* in param: u32       backlight value: 0 to 15 */
+#define PMU_IOC_SET_BACKLIGHT  _IOW('B', 2, size_t)
+/* out param: u32*     PMU model */
+#define PMU_IOC_GET_MODEL      _IOR('B', 3, size_t)
+/* out param: u32*     has_adb: 0 or 1 */
+#define PMU_IOC_HAS_ADB                _IOR('B', 4, size_t) 
+/* out param: u32*     can_sleep: 0 or 1 */
+#define PMU_IOC_CAN_SLEEP      _IOR('B', 5, size_t) 
+/* no param, but historically was _IOR('B', 6, 0), meaning 4 bytes */
+#define PMU_IOC_GRAB_BACKLIGHT _IOR('B', 6, size_t) 
+
+
+#endif /* _LINUX_PMU_H */
diff --git a/lib/libdss-include/linux/poll.h b/lib/libdss-include/linux/poll.h
new file mode 100644 (file)
index 0000000..2001fed
--- /dev/null
@@ -0,0 +1 @@
+#include <asm/poll.h>
diff --git a/lib/libdss-include/linux/posix_types.h b/lib/libdss-include/linux/posix_types.h
new file mode 100644 (file)
index 0000000..988f76e
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _LINUX_POSIX_TYPES_H
+#define _LINUX_POSIX_TYPES_H
+
+#include <linux/stddef.h>
+
+/*
+ * This allows for 1024 file descriptors: if NR_OPEN is ever grown
+ * beyond that you'll have to change this too. But 1024 fd's seem to be
+ * enough even for such "real" unices like OSF/1, so hopefully this is
+ * one limit that doesn't have to be changed [again].
+ *
+ * Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in
+ * <sys/time.h> (and thus <linux/time.h>) - but this is a more logical
+ * place for them. Solved by having dummy defines in <sys/time.h>.
+ */
+
+/*
+ * This macro may have been defined in <gnu/types.h>. But we always
+ * use the one here.
+ */
+#undef __FD_SETSIZE
+#define __FD_SETSIZE   1024
+
+typedef struct {
+       unsigned long fds_bits[__FD_SETSIZE / (8 * sizeof(long))];
+} __kernel_fd_set;
+
+/* Type of a signal handler.  */
+typedef void (*__kernel_sighandler_t)(int);
+
+/* Type of a SYSV IPC key.  */
+typedef int __kernel_key_t;
+typedef int __kernel_mqd_t;
+
+#include <asm/posix_types.h>
+
+#endif /* _LINUX_POSIX_TYPES_H */
diff --git a/lib/libdss-include/linux/ppdev.h b/lib/libdss-include/linux/ppdev.h
new file mode 100644 (file)
index 0000000..dc18c5d
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * linux/include/linux/ppdev.h
+ *
+ * User-space parallel port device driver (header file).
+ *
+ * Copyright (C) 1998-9 Tim Waugh <tim@cyberelk.demon.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Added PPGETTIME/PPSETTIME, Fred Barnes, 1999
+ * Added PPGETMODES/PPGETMODE/PPGETPHASE, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001
+ */
+
+#define PP_IOCTL       'p'
+
+/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
+#define PPSETMODE      _IOW(PP_IOCTL, 0x80, int)
+
+/* Read status */
+#define PPRSTATUS      _IOR(PP_IOCTL, 0x81, unsigned char)
+#define PPWSTATUS      OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
+
+/* Read/write control */
+#define PPRCONTROL     _IOR(PP_IOCTL, 0x83, unsigned char)
+#define PPWCONTROL     _IOW(PP_IOCTL, 0x84, unsigned char)
+
+struct ppdev_frob_struct {
+       unsigned char mask;
+       unsigned char val;
+};
+#define PPFCONTROL      _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct)
+
+/* Read/write data */
+#define PPRDATA                _IOR(PP_IOCTL, 0x85, unsigned char)
+#define PPWDATA                _IOW(PP_IOCTL, 0x86, unsigned char)
+
+/* Read/write econtrol (not used) */
+#define PPRECONTROL    OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char)
+#define PPWECONTROL    OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char)
+
+/* Read/write FIFO (not used) */
+#define PPRFIFO                OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char)
+#define PPWFIFO                OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char)
+
+/* Claim the port to start using it */
+#define PPCLAIM                _IO(PP_IOCTL, 0x8b)
+
+/* Release the port when you aren't using it */
+#define PPRELEASE      _IO(PP_IOCTL, 0x8c)
+
+/* Yield the port (release it if another driver is waiting,
+ * then reclaim) */
+#define PPYIELD                _IO(PP_IOCTL, 0x8d)
+
+/* Register device exclusively (must be before PPCLAIM). */
+#define PPEXCL         _IO(PP_IOCTL, 0x8f)
+
+/* Data line direction: non-zero for input mode. */
+#define PPDATADIR      _IOW(PP_IOCTL, 0x90, int)
+
+/* Negotiate a particular IEEE 1284 mode. */
+#define PPNEGOT                _IOW(PP_IOCTL, 0x91, int)
+
+/* Set control lines when an interrupt occurs. */
+#define PPWCTLONIRQ    _IOW(PP_IOCTL, 0x92, unsigned char)
+
+/* Clear (and return) interrupt count. */
+#define PPCLRIRQ       _IOR(PP_IOCTL, 0x93, int)
+
+/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
+#define PPSETPHASE     _IOW(PP_IOCTL, 0x94, int)
+
+/* Set and get port timeout (struct timeval's) */
+#define PPGETTIME      _IOR(PP_IOCTL, 0x95, struct timeval)
+#define PPSETTIME      _IOW(PP_IOCTL, 0x96, struct timeval)
+
+/* Get available modes (what the hardware can do) */
+#define PPGETMODES     _IOR(PP_IOCTL, 0x97, unsigned int)
+
+/* Get the current mode and phaze */
+#define PPGETMODE      _IOR(PP_IOCTL, 0x98, int)
+#define PPGETPHASE     _IOR(PP_IOCTL, 0x99, int)
+
+/* get/set flags */
+#define PPGETFLAGS     _IOR(PP_IOCTL, 0x9a, int)
+#define PPSETFLAGS     _IOW(PP_IOCTL, 0x9b, int)
+
+/* flags visible to the world */
+#define PP_FASTWRITE   (1<<2)
+#define PP_FASTREAD    (1<<3)
+#define PP_W91284PIC   (1<<4)
+
+/* only masks user-visible flags */
+#define PP_FLAGMASK    (PP_FASTWRITE | PP_FASTREAD | PP_W91284PIC)
+
+
diff --git a/lib/libdss-include/linux/ppp-comp.h b/lib/libdss-include/linux/ppp-comp.h
new file mode 100644 (file)
index 0000000..e16dead
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * ppp-comp.h - Definitions for doing PPP packet compression.
+ *
+ * Copyright 1994-1998 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#ifndef _NET_PPP_COMP_H
+#define _NET_PPP_COMP_H
+
+
+/*
+ * CCP codes.
+ */
+
+#define CCP_CONFREQ    1
+#define CCP_CONFACK    2
+#define CCP_TERMREQ    5
+#define CCP_TERMACK    6
+#define CCP_RESETREQ   14
+#define CCP_RESETACK   15
+
+/*
+ * Max # bytes for a CCP option
+ */
+
+#define CCP_MAX_OPTION_LENGTH  32
+
+/*
+ * Parts of a CCP packet.
+ */
+
+#define CCP_CODE(dp)           ((dp)[0])
+#define CCP_ID(dp)             ((dp)[1])
+#define CCP_LENGTH(dp)         (((dp)[2] << 8) + (dp)[3])
+#define CCP_HDRLEN             4
+
+#define CCP_OPT_CODE(dp)       ((dp)[0])
+#define CCP_OPT_LENGTH(dp)     ((dp)[1])
+#define CCP_OPT_MINLEN         2
+
+/*
+ * Definitions for BSD-Compress.
+ */
+
+#define CI_BSD_COMPRESS                21      /* config. option for BSD-Compress */
+#define CILEN_BSD_COMPRESS     3       /* length of config. option */
+
+/* Macros for handling the 3rd byte of the BSD-Compress config option. */
+#define BSD_NBITS(x)           ((x) & 0x1F)    /* number of bits requested */
+#define BSD_VERSION(x)         ((x) >> 5)      /* version of option format */
+#define BSD_CURRENT_VERSION    1               /* current version number */
+#define BSD_MAKE_OPT(v, n)     (((v) << 5) | (n))
+
+#define BSD_MIN_BITS           9       /* smallest code size supported */
+#define BSD_MAX_BITS           15      /* largest code size supported */
+
+/*
+ * Definitions for Deflate.
+ */
+
+#define CI_DEFLATE             26      /* config option for Deflate */
+#define CI_DEFLATE_DRAFT       24      /* value used in original draft RFC */
+#define CILEN_DEFLATE          4       /* length of its config option */
+
+#define DEFLATE_MIN_SIZE       9
+#define DEFLATE_MAX_SIZE       15
+#define DEFLATE_METHOD_VAL     8
+#define DEFLATE_SIZE(x)                (((x) >> 4) + 8)
+#define DEFLATE_METHOD(x)      ((x) & 0x0F)
+#define DEFLATE_MAKE_OPT(w)    ((((w) - 8) << 4) + DEFLATE_METHOD_VAL)
+#define DEFLATE_CHK_SEQUENCE   0
+
+/*
+ * Definitions for MPPE.
+ */
+
+#define CI_MPPE                18      /* config option for MPPE */
+#define CILEN_MPPE              6      /* length of config option */
+
+/*
+ * Definitions for other, as yet unsupported, compression methods.
+ */
+
+#define CI_PREDICTOR_1         1       /* config option for Predictor-1 */
+#define CILEN_PREDICTOR_1      2       /* length of its config option */
+#define CI_PREDICTOR_2         2       /* config option for Predictor-2 */
+#define CILEN_PREDICTOR_2      2       /* length of its config option */
+
+
+#endif /* _NET_PPP_COMP_H */
diff --git a/lib/libdss-include/linux/ppp-ioctl.h b/lib/libdss-include/linux/ppp-ioctl.h
new file mode 100644 (file)
index 0000000..62ccaa6
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * ppp-ioctl.h - PPP ioctl definitions.
+ *
+ * Copyright 1999-2002 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#ifndef _PPP_IOCTL_H
+#define _PPP_IOCTL_H
+
+#include <linux/types.h>
+
+#include <linux/ppp_defs.h>
+
+/*
+ * Bit definitions for flags argument to PPPIOCGFLAGS/PPPIOCSFLAGS.
+ */
+#define SC_COMP_PROT   0x00000001      /* protocol compression (output) */
+#define SC_COMP_AC     0x00000002      /* header compression (output) */
+#define        SC_COMP_TCP     0x00000004      /* TCP (VJ) compression (output) */
+#define SC_NO_TCP_CCID 0x00000008      /* disable VJ connection-id comp. */
+#define SC_REJ_COMP_AC 0x00000010      /* reject adrs/ctrl comp. on input */
+#define SC_REJ_COMP_TCP        0x00000020      /* reject TCP (VJ) comp. on input */
+#define SC_CCP_OPEN    0x00000040      /* Look at CCP packets */
+#define SC_CCP_UP      0x00000080      /* May send/recv compressed packets */
+#define SC_ENABLE_IP   0x00000100      /* IP packets may be exchanged */
+#define SC_LOOP_TRAFFIC        0x00000200      /* send traffic to pppd */
+#define SC_MULTILINK   0x00000400      /* do multilink encapsulation */
+#define SC_MP_SHORTSEQ 0x00000800      /* use short MP sequence numbers */
+#define SC_COMP_RUN    0x00001000      /* compressor has been inited */
+#define SC_DECOMP_RUN  0x00002000      /* decompressor has been inited */
+#define SC_MP_XSHORTSEQ        0x00004000      /* transmit short MP seq numbers */
+#define SC_DEBUG       0x00010000      /* enable debug messages */
+#define SC_LOG_INPKT   0x00020000      /* log contents of good pkts recvd */
+#define SC_LOG_OUTPKT  0x00040000      /* log contents of pkts sent */
+#define SC_LOG_RAWIN   0x00080000      /* log all chars received */
+#define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
+#define        SC_SYNC         0x00200000      /* synchronous serial mode */
+#define        SC_MUST_COMP    0x00400000      /* no uncompressed packets may be sent or received */
+#define        SC_MASK         0x0f600fff      /* bits that user can change */
+
+/* state bits */
+#define SC_XMIT_BUSY   0x10000000      /* (used by isdn_ppp?) */
+#define SC_RCV_ODDP    0x08000000      /* have rcvd char with odd parity */
+#define SC_RCV_EVNP    0x04000000      /* have rcvd char with even parity */
+#define SC_RCV_B7_1    0x02000000      /* have rcvd char with bit 7 = 1 */
+#define SC_RCV_B7_0    0x01000000      /* have rcvd char with bit 7 = 0 */
+#define SC_DC_FERROR   0x00800000      /* fatal decomp error detected */
+#define SC_DC_ERROR    0x00400000      /* non-fatal decomp error detected */
+
+/* Used with PPPIOCGNPMODE/PPPIOCSNPMODE */
+struct npioctl {
+       int             protocol;       /* PPP protocol, e.g. PPP_IP */
+       enum NPmode     mode;
+};
+
+/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
+struct ppp_option_data {
+       __u8    *ptr;
+       __u32   length;
+       int     transmit;
+};
+
+/* For PPPIOCGL2TPSTATS */
+struct pppol2tp_ioc_stats {
+       __u16           tunnel_id;      /* redundant */
+       __u16           session_id;     /* if zero, get tunnel stats */
+       __u32           using_ipsec:1;  /* valid only for session_id == 0 */
+       __aligned_u64   tx_packets;
+       __aligned_u64   tx_bytes;
+       __aligned_u64   tx_errors;
+       __aligned_u64   rx_packets;
+       __aligned_u64   rx_bytes;
+       __aligned_u64   rx_seq_discards;
+       __aligned_u64   rx_oos_packets;
+       __aligned_u64   rx_errors;
+};
+
+/*
+ * Ioctl definitions.
+ */
+
+#define        PPPIOCGFLAGS    _IOR('t', 90, int)      /* get configuration flags */
+#define        PPPIOCSFLAGS    _IOW('t', 89, int)      /* set configuration flags */
+#define        PPPIOCGASYNCMAP _IOR('t', 88, int)      /* get async map */
+#define        PPPIOCSASYNCMAP _IOW('t', 87, int)      /* set async map */
+#define        PPPIOCGUNIT     _IOR('t', 86, int)      /* get ppp unit number */
+#define        PPPIOCGRASYNCMAP _IOR('t', 85, int)     /* get receive async map */
+#define        PPPIOCSRASYNCMAP _IOW('t', 84, int)     /* set receive async map */
+#define        PPPIOCGMRU      _IOR('t', 83, int)      /* get max receive unit */
+#define        PPPIOCSMRU      _IOW('t', 82, int)      /* set max receive unit */
+#define        PPPIOCSMAXCID   _IOW('t', 81, int)      /* set VJ max slot ID */
+#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
+#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
+#define PPPIOCXFERUNIT _IO('t', 78)            /* transfer PPP unit */
+#define PPPIOCSCOMPRESS        _IOW('t', 77, struct ppp_option_data)
+#define PPPIOCGNPMODE  _IOWR('t', 76, struct npioctl) /* get NP mode */
+#define PPPIOCSNPMODE  _IOW('t', 75, struct npioctl)  /* set NP mode */
+#define PPPIOCSPASS    _IOW('t', 71, struct sock_fprog) /* set pass filter */
+#define PPPIOCSACTIVE  _IOW('t', 70, struct sock_fprog) /* set active filt */
+#define PPPIOCGDEBUG   _IOR('t', 65, int)      /* Read debug level */
+#define PPPIOCSDEBUG   _IOW('t', 64, int)      /* Set debug level */
+#define PPPIOCGIDLE    _IOR('t', 63, struct ppp_idle) /* get idle time */
+#define PPPIOCNEWUNIT  _IOWR('t', 62, int)     /* create new ppp unit */
+#define PPPIOCATTACH   _IOW('t', 61, int)      /* attach to ppp unit */
+#define PPPIOCDETACH   _IOW('t', 60, int)      /* detach from ppp unit/chan */
+#define PPPIOCSMRRU    _IOW('t', 59, int)      /* set multilink MRU */
+#define PPPIOCCONNECT  _IOW('t', 58, int)      /* connect channel to unit */
+#define PPPIOCDISCONN  _IO('t', 57)            /* disconnect channel */
+#define PPPIOCATTCHAN  _IOW('t', 56, int)      /* attach to ppp channel */
+#define PPPIOCGCHAN    _IOR('t', 55, int)      /* get ppp channel number */
+#define PPPIOCGL2TPSTATS _IOR('t', 54, struct pppol2tp_ioc_stats)
+
+#define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0)
+#define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)   /* NEVER change this!! */
+#define SIOCGPPPCSTATS  (SIOCDEVPRIVATE + 2)
+
+#endif /* _PPP_IOCTL_H */
diff --git a/lib/libdss-include/linux/ppp_defs.h b/lib/libdss-include/linux/ppp_defs.h
new file mode 100644 (file)
index 0000000..096dd5c
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * ppp_defs.h - PPP definitions.
+ *
+ * Copyright 1994-2000 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+#include <linux/types.h>
+
+#ifndef _PPP_DEFS_H_
+#define _PPP_DEFS_H_
+
+/*
+ * The basic PPP frame.
+ */
+#define PPP_HDRLEN     4       /* octets for standard ppp header */
+#define PPP_FCSLEN     2       /* octets for FCS */
+#define PPP_MRU                1500    /* default MRU = max length of info field */
+
+#define PPP_ADDRESS(p) (((__u8 *)(p))[0])
+#define PPP_CONTROL(p) (((__u8 *)(p))[1])
+#define PPP_PROTOCOL(p)        ((((__u8 *)(p))[2] << 8) + ((__u8 *)(p))[3])
+
+/*
+ * Significant octet values.
+ */
+#define        PPP_ALLSTATIONS 0xff    /* All-Stations broadcast address */
+#define        PPP_UI          0x03    /* Unnumbered Information */
+#define        PPP_FLAG        0x7e    /* Flag Sequence */
+#define        PPP_ESCAPE      0x7d    /* Asynchronous Control Escape */
+#define        PPP_TRANS       0x20    /* Asynchronous transparency modifier */
+
+/*
+ * Protocol field values.
+ */
+#define PPP_IP         0x21    /* Internet Protocol */
+#define PPP_AT         0x29    /* AppleTalk Protocol */
+#define PPP_IPX                0x2b    /* IPX protocol */
+#define        PPP_VJC_COMP    0x2d    /* VJ compressed TCP */
+#define        PPP_VJC_UNCOMP  0x2f    /* VJ uncompressed TCP */
+#define PPP_MP         0x3d    /* Multilink protocol */
+#define PPP_IPV6       0x57    /* Internet Protocol Version 6 */
+#define PPP_COMPFRAG   0xfb    /* fragment compressed below bundle */
+#define PPP_COMP       0xfd    /* compressed packet */
+#define PPP_MPLS_UC    0x0281  /* Multi Protocol Label Switching - Unicast */
+#define PPP_MPLS_MC    0x0283  /* Multi Protocol Label Switching - Multicast */
+#define PPP_IPCP       0x8021  /* IP Control Protocol */
+#define PPP_ATCP       0x8029  /* AppleTalk Control Protocol */
+#define PPP_IPXCP      0x802b  /* IPX Control Protocol */
+#define PPP_IPV6CP     0x8057  /* IPv6 Control Protocol */
+#define PPP_CCPFRAG    0x80fb  /* CCP at link level (below MP bundle) */
+#define PPP_CCP                0x80fd  /* Compression Control Protocol */
+#define PPP_MPLSCP     0x80fd  /* MPLS Control Protocol */
+#define PPP_LCP                0xc021  /* Link Control Protocol */
+#define PPP_PAP                0xc023  /* Password Authentication Protocol */
+#define PPP_LQR                0xc025  /* Link Quality Report protocol */
+#define PPP_CHAP       0xc223  /* Cryptographic Handshake Auth. Protocol */
+#define PPP_CBCP       0xc029  /* Callback Control Protocol */
+
+/*
+ * Values for FCS calculations.
+ */
+
+#define PPP_INITFCS    0xffff  /* Initial FCS value */
+#define PPP_GOODFCS    0xf0b8  /* Good final FCS value */
+
+
+/*
+ * Extended asyncmap - allows any character to be escaped.
+ */
+
+typedef __u32          ext_accm[8];
+
+/*
+ * What to do with network protocol (NP) packets.
+ */
+enum NPmode {
+    NPMODE_PASS,               /* pass the packet through */
+    NPMODE_DROP,               /* silently drop the packet */
+    NPMODE_ERROR,              /* return an error */
+    NPMODE_QUEUE               /* save it up for later. */
+};
+
+/*
+ * Statistics for LQRP and pppstats
+ */
+struct pppstat {
+    __u32      ppp_discards;   /* # frames discarded */
+
+    __u32      ppp_ibytes;     /* bytes received */
+    __u32      ppp_ioctects;   /* bytes received not in error */
+    __u32      ppp_ipackets;   /* packets received */
+    __u32      ppp_ierrors;    /* receive errors */
+    __u32      ppp_ilqrs;      /* # LQR frames received */
+
+    __u32      ppp_obytes;     /* raw bytes sent */
+    __u32      ppp_ooctects;   /* frame bytes sent */
+    __u32      ppp_opackets;   /* packets sent */
+    __u32      ppp_oerrors;    /* transmit errors */ 
+    __u32      ppp_olqrs;      /* # LQR frames sent */
+};
+
+struct vjstat {
+    __u32      vjs_packets;    /* outbound packets */
+    __u32      vjs_compressed; /* outbound compressed packets */
+    __u32      vjs_searches;   /* searches for connection state */
+    __u32      vjs_misses;     /* times couldn't find conn. state */
+    __u32      vjs_uncompressedin; /* inbound uncompressed packets */
+    __u32      vjs_compressedin;   /* inbound compressed packets */
+    __u32      vjs_errorin;    /* inbound unknown type packets */
+    __u32      vjs_tossed;     /* inbound packets tossed because of error */
+};
+
+struct compstat {
+    __u32      unc_bytes;      /* total uncompressed bytes */
+    __u32      unc_packets;    /* total uncompressed packets */
+    __u32      comp_bytes;     /* compressed bytes */
+    __u32      comp_packets;   /* compressed packets */
+    __u32      inc_bytes;      /* incompressible bytes */
+    __u32      inc_packets;    /* incompressible packets */
+
+    /* the compression ratio is defined as in_count / bytes_out */
+    __u32       in_count;      /* Bytes received */
+    __u32       bytes_out;     /* Bytes transmitted */
+
+    double     ratio;          /* not computed in kernel. */
+};
+
+struct ppp_stats {
+    struct pppstat     p;      /* basic PPP statistics */
+    struct vjstat      vj;     /* VJ header compression statistics */
+};
+
+struct ppp_comp_stats {
+    struct compstat    c;      /* packet compression statistics */
+    struct compstat    d;      /* packet decompression statistics */
+};
+
+/*
+ * The following structure records the time in seconds since
+ * the last NP packet was sent or received.
+ */
+struct ppp_idle {
+    __kernel_time_t xmit_idle; /* time since last NP packet sent */
+    __kernel_time_t recv_idle; /* time since last NP packet received */
+};
+
+#endif /* _PPP_DEFS_H_ */
diff --git a/lib/libdss-include/linux/pps.h b/lib/libdss-include/linux/pps.h
new file mode 100644 (file)
index 0000000..a9bb1d9
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * PPS API header
+ *
+ * Copyright (C) 2005-2009   Rodolfo Giometti <giometti@linux.it>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef _PPS_H_
+#define _PPS_H_
+
+#include <linux/types.h>
+
+#define PPS_VERSION            "5.3.6"
+#define PPS_MAX_SOURCES                16              /* should be enough... */
+
+/* Implementation note: the logical states ``assert'' and ``clear''
+ * are implemented in terms of the chip register, i.e. ``assert''
+ * means the bit is set.  */
+
+/*
+ * 3.2 New data structures
+ */
+
+#define PPS_API_VERS_1         1
+#define PPS_API_VERS           PPS_API_VERS_1  /* we use API version 1 */
+#define PPS_MAX_NAME_LEN       32
+
+/* 32-bit vs. 64-bit compatibility.
+ *
+ * 0n i386, the alignment of a uint64_t is only 4 bytes, while on most other
+ * architectures it's 8 bytes. On i386, there will be no padding between the
+ * two consecutive 'struct pps_ktime' members of struct pps_kinfo and struct
+ * pps_kparams. But on most platforms there will be padding to ensure correct
+ * alignment.
+ *
+ * The simple fix is probably to add an explicit padding.
+ *                                                     [David Woodhouse]
+ */
+struct pps_ktime {
+       __s64 sec;
+       __s32 nsec;
+       __u32 flags;
+};
+#define PPS_TIME_INVALID       (1<<0)  /* used to specify timeout==NULL */
+
+struct pps_kinfo {
+       __u32 assert_sequence;          /* seq. num. of assert event */
+       __u32 clear_sequence;           /* seq. num. of clear event */
+       struct pps_ktime assert_tu;     /* time of assert event */
+       struct pps_ktime clear_tu;      /* time of clear event */
+       int current_mode;               /* current mode bits */
+};
+
+struct pps_kparams {
+       int api_version;                /* API version # */
+       int mode;                       /* mode bits */
+       struct pps_ktime assert_off_tu; /* offset compensation for assert */
+       struct pps_ktime clear_off_tu;  /* offset compensation for clear */
+};
+
+/*
+ * 3.3 Mode bit definitions
+ */
+
+/* Device/implementation parameters */
+#define PPS_CAPTUREASSERT      0x01    /* capture assert events */
+#define PPS_CAPTURECLEAR       0x02    /* capture clear events */
+#define PPS_CAPTUREBOTH                0x03    /* capture assert and clear events */
+
+#define PPS_OFFSETASSERT       0x10    /* apply compensation for assert ev. */
+#define PPS_OFFSETCLEAR                0x20    /* apply compensation for clear ev. */
+
+#define PPS_CANWAIT            0x100   /* can we wait for an event? */
+#define PPS_CANPOLL            0x200   /* bit reserved for future use */
+
+/* Kernel actions */
+#define PPS_ECHOASSERT         0x40    /* feed back assert event to output */
+#define PPS_ECHOCLEAR          0x80    /* feed back clear event to output */
+
+/* Timestamp formats */
+#define PPS_TSFMT_TSPEC                0x1000  /* select timespec format */
+#define PPS_TSFMT_NTPFP                0x2000  /* select NTP format */
+
+/*
+ * 3.4.4 New functions: disciplining the kernel timebase
+ */
+
+/* Kernel consumers */
+#define PPS_KC_HARDPPS         0       /* hardpps() (or equivalent) */
+#define PPS_KC_HARDPPS_PLL     1       /* hardpps() constrained to
+                                          use a phase-locked loop */
+#define PPS_KC_HARDPPS_FLL     2       /* hardpps() constrained to
+                                          use a frequency-locked loop */
+/*
+ * Here begins the implementation-specific part!
+ */
+
+struct pps_fdata {
+       struct pps_kinfo info;
+       struct pps_ktime timeout;
+};
+
+struct pps_bind_args {
+       int tsformat;   /* format of time stamps */
+       int edge;       /* selected event type */
+       int consumer;   /* selected kernel consumer */
+};
+
+#include <linux/ioctl.h>
+
+#define PPS_GETPARAMS          _IOR('p', 0xa1, struct pps_kparams *)
+#define PPS_SETPARAMS          _IOW('p', 0xa2, struct pps_kparams *)
+#define PPS_GETCAP             _IOR('p', 0xa3, int *)
+#define PPS_FETCH              _IOWR('p', 0xa4, struct pps_fdata *)
+#define PPS_KC_BIND            _IOW('p', 0xa5, struct pps_bind_args *)
+
+#endif /* _PPS_H_ */
diff --git a/lib/libdss-include/linux/prctl.h b/lib/libdss-include/linux/prctl.h
new file mode 100644 (file)
index 0000000..a8d0759
--- /dev/null
@@ -0,0 +1,200 @@
+#ifndef _LINUX_PRCTL_H
+#define _LINUX_PRCTL_H
+
+#include <linux/types.h>
+
+/* Values to pass as first argument to prctl() */
+
+#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */
+#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
+
+/* Get/set current->mm->dumpable */
+#define PR_GET_DUMPABLE   3
+#define PR_SET_DUMPABLE   4
+
+/* Get/set unaligned access control bits (if meaningful) */
+#define PR_GET_UNALIGN   5
+#define PR_SET_UNALIGN   6
+# define PR_UNALIGN_NOPRINT    1       /* silently fix up unaligned user accesses */
+# define PR_UNALIGN_SIGBUS     2       /* generate SIGBUS on unaligned user access */
+
+/* Get/set whether or not to drop capabilities on setuid() away from
+ * uid 0 (as per security/commoncap.c) */
+#define PR_GET_KEEPCAPS   7
+#define PR_SET_KEEPCAPS   8
+
+/* Get/set floating-point emulation control bits (if meaningful) */
+#define PR_GET_FPEMU  9
+#define PR_SET_FPEMU 10
+# define PR_FPEMU_NOPRINT      1       /* silently emulate fp operations accesses */
+# define PR_FPEMU_SIGFPE       2       /* don't emulate fp operations, send SIGFPE instead */
+
+/* Get/set floating-point exception mode (if meaningful) */
+#define PR_GET_FPEXC   11
+#define PR_SET_FPEXC   12
+# define PR_FP_EXC_SW_ENABLE   0x80    /* Use FPEXC for FP exception enables */
+# define PR_FP_EXC_DIV         0x010000        /* floating point divide by zero */
+# define PR_FP_EXC_OVF         0x020000        /* floating point overflow */
+# define PR_FP_EXC_UND         0x040000        /* floating point underflow */
+# define PR_FP_EXC_RES         0x080000        /* floating point inexact result */
+# define PR_FP_EXC_INV         0x100000        /* floating point invalid operation */
+# define PR_FP_EXC_DISABLED    0       /* FP exceptions disabled */
+# define PR_FP_EXC_NONRECOV    1       /* async non-recoverable exc. mode */
+# define PR_FP_EXC_ASYNC       2       /* async recoverable exception mode */
+# define PR_FP_EXC_PRECISE     3       /* precise exception mode */
+
+/* Get/set whether we use statistical process timing or accurate timestamp
+ * based process timing */
+#define PR_GET_TIMING   13
+#define PR_SET_TIMING   14
+# define PR_TIMING_STATISTICAL  0       /* Normal, traditional,
+                                                   statistical process timing */
+# define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
+                                                   process timing */
+
+#define PR_SET_NAME    15              /* Set process name */
+#define PR_GET_NAME    16              /* Get process name */
+
+/* Get/set process endian */
+#define PR_GET_ENDIAN  19
+#define PR_SET_ENDIAN  20
+# define PR_ENDIAN_BIG         0
+# define PR_ENDIAN_LITTLE      1       /* True little endian mode */
+# define PR_ENDIAN_PPC_LITTLE  2       /* "PowerPC" pseudo little endian */
+
+/* Get/set process seccomp mode */
+#define PR_GET_SECCOMP 21
+#define PR_SET_SECCOMP 22
+
+/* Get/set the capability bounding set (as per security/commoncap.c) */
+#define PR_CAPBSET_READ 23
+#define PR_CAPBSET_DROP 24
+
+/* Get/set the process' ability to use the timestamp counter instruction */
+#define PR_GET_TSC 25
+#define PR_SET_TSC 26
+# define PR_TSC_ENABLE         1       /* allow the use of the timestamp counter */
+# define PR_TSC_SIGSEGV                2       /* throw a SIGSEGV instead of reading the TSC */
+
+/* Get/set securebits (as per security/commoncap.c) */
+#define PR_GET_SECUREBITS 27
+#define PR_SET_SECUREBITS 28
+
+/*
+ * Get/set the timerslack as used by poll/select/nanosleep
+ * A value of 0 means "use default"
+ */
+#define PR_SET_TIMERSLACK 29
+#define PR_GET_TIMERSLACK 30
+
+#define PR_TASK_PERF_EVENTS_DISABLE            31
+#define PR_TASK_PERF_EVENTS_ENABLE             32
+
+/*
+ * Set early/late kill mode for hwpoison memory corruption.
+ * This influences when the process gets killed on a memory corruption.
+ */
+#define PR_MCE_KILL    33
+# define PR_MCE_KILL_CLEAR   0
+# define PR_MCE_KILL_SET     1
+
+# define PR_MCE_KILL_LATE    0
+# define PR_MCE_KILL_EARLY   1
+# define PR_MCE_KILL_DEFAULT 2
+
+#define PR_MCE_KILL_GET 34
+
+/*
+ * Tune up process memory map specifics.
+ */
+#define PR_SET_MM              35
+# define PR_SET_MM_START_CODE          1
+# define PR_SET_MM_END_CODE            2
+# define PR_SET_MM_START_DATA          3
+# define PR_SET_MM_END_DATA            4
+# define PR_SET_MM_START_STACK         5
+# define PR_SET_MM_START_BRK           6
+# define PR_SET_MM_BRK                 7
+# define PR_SET_MM_ARG_START           8
+# define PR_SET_MM_ARG_END             9
+# define PR_SET_MM_ENV_START           10
+# define PR_SET_MM_ENV_END             11
+# define PR_SET_MM_AUXV                        12
+# define PR_SET_MM_EXE_FILE            13
+# define PR_SET_MM_MAP                 14
+# define PR_SET_MM_MAP_SIZE            15
+
+/*
+ * This structure provides new memory descriptor
+ * map which mostly modifies /proc/pid/stat[m]
+ * output for a task. This mostly done in a
+ * sake of checkpoint/restore functionality.
+ */
+struct prctl_mm_map {
+       __u64   start_code;             /* code section bounds */
+       __u64   end_code;
+       __u64   start_data;             /* data section bounds */
+       __u64   end_data;
+       __u64   start_brk;              /* heap for brk() syscall */
+       __u64   brk;
+       __u64   start_stack;            /* stack starts at */
+       __u64   arg_start;              /* command line arguments bounds */
+       __u64   arg_end;
+       __u64   env_start;              /* environment variables bounds */
+       __u64   env_end;
+       __u64   *auxv;                  /* auxiliary vector */
+       __u32   auxv_size;              /* vector size */
+       __u32   exe_fd;                 /* /proc/$pid/exe link file */
+};
+
+/*
+ * Set specific pid that is allowed to ptrace the current task.
+ * A value of 0 mean "no process".
+ */
+#define PR_SET_PTRACER 0x59616d61
+# define PR_SET_PTRACER_ANY ((unsigned long)-1)
+
+#define PR_SET_CHILD_SUBREAPER 36
+#define PR_GET_CHILD_SUBREAPER 37
+
+/*
+ * If no_new_privs is set, then operations that grant new privileges (i.e.
+ * execve) will either fail or not grant them.  This affects suid/sgid,
+ * file capabilities, and LSMs.
+ *
+ * Operations that merely manipulate or drop existing privileges (setresuid,
+ * capset, etc.) will still work.  Drop those privileges if you want them gone.
+ *
+ * Changing LSM security domain is considered a new privilege.  So, for example,
+ * asking selinux for a specific new context (e.g. with runcon) will result
+ * in execve returning -EPERM.
+ *
+ * See Documentation/prctl/no_new_privs.txt for more details.
+ */
+#define PR_SET_NO_NEW_PRIVS    38
+#define PR_GET_NO_NEW_PRIVS    39
+
+#define PR_GET_TID_ADDRESS     40
+
+#define PR_SET_THP_DISABLE     41
+#define PR_GET_THP_DISABLE     42
+
+/*
+ * Tell the kernel to start/stop helping userspace manage bounds tables.
+ */
+#define PR_MPX_ENABLE_MANAGEMENT  43
+#define PR_MPX_DISABLE_MANAGEMENT 44
+
+#define PR_SET_FP_MODE         45
+#define PR_GET_FP_MODE         46
+# define PR_FP_MODE_FR         (1 << 0)        /* 64b FP registers */
+# define PR_FP_MODE_FRE                (1 << 1)        /* 32b compatibility */
+
+/* Control the ambient capability set */
+#define PR_CAP_AMBIENT                 47
+# define PR_CAP_AMBIENT_IS_SET         1
+# define PR_CAP_AMBIENT_RAISE          2
+# define PR_CAP_AMBIENT_LOWER          3
+# define PR_CAP_AMBIENT_CLEAR_ALL      4
+
+#endif /* _LINUX_PRCTL_H */
diff --git a/lib/libdss-include/linux/psci.h b/lib/libdss-include/linux/psci.h
new file mode 100644 (file)
index 0000000..08d443f
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * ARM Power State and Coordination Interface (PSCI) header
+ *
+ * This header holds common PSCI defines and macros shared
+ * by: ARM kernel, ARM64 kernel, KVM ARM/ARM64 and user space.
+ *
+ * Copyright (C) 2014 Linaro Ltd.
+ * Author: Anup Patel <anup.patel@linaro.org>
+ */
+
+#ifndef _LINUX_PSCI_H
+#define _LINUX_PSCI_H
+
+/*
+ * PSCI v0.1 interface
+ *
+ * The PSCI v0.1 function numbers are implementation defined.
+ *
+ * Only PSCI return values such as: SUCCESS, NOT_SUPPORTED,
+ * INVALID_PARAMS, and DENIED defined below are applicable
+ * to PSCI v0.1.
+ */
+
+/* PSCI v0.2 interface */
+#define PSCI_0_2_FN_BASE                       0x84000000
+#define PSCI_0_2_FN(n)                         (PSCI_0_2_FN_BASE + (n))
+#define PSCI_0_2_64BIT                         0x40000000
+#define PSCI_0_2_FN64_BASE                     \
+                                       (PSCI_0_2_FN_BASE + PSCI_0_2_64BIT)
+#define PSCI_0_2_FN64(n)                       (PSCI_0_2_FN64_BASE + (n))
+
+#define PSCI_0_2_FN_PSCI_VERSION               PSCI_0_2_FN(0)
+#define PSCI_0_2_FN_CPU_SUSPEND                        PSCI_0_2_FN(1)
+#define PSCI_0_2_FN_CPU_OFF                    PSCI_0_2_FN(2)
+#define PSCI_0_2_FN_CPU_ON                     PSCI_0_2_FN(3)
+#define PSCI_0_2_FN_AFFINITY_INFO              PSCI_0_2_FN(4)
+#define PSCI_0_2_FN_MIGRATE                    PSCI_0_2_FN(5)
+#define PSCI_0_2_FN_MIGRATE_INFO_TYPE          PSCI_0_2_FN(6)
+#define PSCI_0_2_FN_MIGRATE_INFO_UP_CPU                PSCI_0_2_FN(7)
+#define PSCI_0_2_FN_SYSTEM_OFF                 PSCI_0_2_FN(8)
+#define PSCI_0_2_FN_SYSTEM_RESET               PSCI_0_2_FN(9)
+
+#define PSCI_0_2_FN64_CPU_SUSPEND              PSCI_0_2_FN64(1)
+#define PSCI_0_2_FN64_CPU_ON                   PSCI_0_2_FN64(3)
+#define PSCI_0_2_FN64_AFFINITY_INFO            PSCI_0_2_FN64(4)
+#define PSCI_0_2_FN64_MIGRATE                  PSCI_0_2_FN64(5)
+#define PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU      PSCI_0_2_FN64(7)
+
+#define PSCI_1_0_FN_PSCI_FEATURES              PSCI_0_2_FN(10)
+#define PSCI_1_0_FN_SYSTEM_SUSPEND             PSCI_0_2_FN(14)
+
+#define PSCI_1_0_FN64_SYSTEM_SUSPEND           PSCI_0_2_FN64(14)
+
+/* PSCI v0.2 power state encoding for CPU_SUSPEND function */
+#define PSCI_0_2_POWER_STATE_ID_MASK           0xffff
+#define PSCI_0_2_POWER_STATE_ID_SHIFT          0
+#define PSCI_0_2_POWER_STATE_TYPE_SHIFT                16
+#define PSCI_0_2_POWER_STATE_TYPE_MASK         \
+                               (0x1 << PSCI_0_2_POWER_STATE_TYPE_SHIFT)
+#define PSCI_0_2_POWER_STATE_AFFL_SHIFT                24
+#define PSCI_0_2_POWER_STATE_AFFL_MASK         \
+                               (0x3 << PSCI_0_2_POWER_STATE_AFFL_SHIFT)
+
+/* PSCI extended power state encoding for CPU_SUSPEND function */
+#define PSCI_1_0_EXT_POWER_STATE_ID_MASK       0xfffffff
+#define PSCI_1_0_EXT_POWER_STATE_ID_SHIFT      0
+#define PSCI_1_0_EXT_POWER_STATE_TYPE_SHIFT    30
+#define PSCI_1_0_EXT_POWER_STATE_TYPE_MASK     \
+                               (0x1 << PSCI_1_0_EXT_POWER_STATE_TYPE_SHIFT)
+
+/* PSCI v0.2 affinity level state returned by AFFINITY_INFO */
+#define PSCI_0_2_AFFINITY_LEVEL_ON             0
+#define PSCI_0_2_AFFINITY_LEVEL_OFF            1
+#define PSCI_0_2_AFFINITY_LEVEL_ON_PENDING     2
+
+/* PSCI v0.2 multicore support in Trusted OS returned by MIGRATE_INFO_TYPE */
+#define PSCI_0_2_TOS_UP_MIGRATE                        0
+#define PSCI_0_2_TOS_UP_NO_MIGRATE             1
+#define PSCI_0_2_TOS_MP                                2
+
+/* PSCI version decoding (independent of PSCI version) */
+#define PSCI_VERSION_MAJOR_SHIFT               16
+#define PSCI_VERSION_MINOR_MASK                        \
+               ((1U << PSCI_VERSION_MAJOR_SHIFT) - 1)
+#define PSCI_VERSION_MAJOR_MASK                        ~PSCI_VERSION_MINOR_MASK
+#define PSCI_VERSION_MAJOR(ver)                        \
+               (((ver) & PSCI_VERSION_MAJOR_MASK) >> PSCI_VERSION_MAJOR_SHIFT)
+#define PSCI_VERSION_MINOR(ver)                        \
+               ((ver) & PSCI_VERSION_MINOR_MASK)
+
+/* PSCI features decoding (>=1.0) */
+#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT 1
+#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK  \
+                       (0x1 << PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT)
+
+/* PSCI return values (inclusive of all PSCI versions) */
+#define PSCI_RET_SUCCESS                       0
+#define PSCI_RET_NOT_SUPPORTED                 -1
+#define PSCI_RET_INVALID_PARAMS                        -2
+#define PSCI_RET_DENIED                                -3
+#define PSCI_RET_ALREADY_ON                    -4
+#define PSCI_RET_ON_PENDING                    -5
+#define PSCI_RET_INTERNAL_FAILURE              -6
+#define PSCI_RET_NOT_PRESENT                   -7
+#define PSCI_RET_DISABLED                      -8
+#define PSCI_RET_INVALID_ADDRESS               -9
+
+#endif /* _LINUX_PSCI_H */
diff --git a/lib/libdss-include/linux/ptp_clock.h b/lib/libdss-include/linux/ptp_clock.h
new file mode 100644 (file)
index 0000000..ac6dded
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * PTP 1588 clock support - user space interface
+ *
+ * Copyright (C) 2010 OMICRON electronics GmbH
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _PTP_CLOCK_H_
+#define _PTP_CLOCK_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* PTP_xxx bits, for the flags field within the request structures. */
+#define PTP_ENABLE_FEATURE (1<<0)
+#define PTP_RISING_EDGE    (1<<1)
+#define PTP_FALLING_EDGE   (1<<2)
+
+/*
+ * struct ptp_clock_time - represents a time value
+ *
+ * The sign of the seconds field applies to the whole value. The
+ * nanoseconds field is always unsigned. The reserved field is
+ * included for sub-nanosecond resolution, should the demand for
+ * this ever appear.
+ *
+ */
+struct ptp_clock_time {
+       __s64 sec;  /* seconds */
+       __u32 nsec; /* nanoseconds */
+       __u32 reserved;
+};
+
+struct ptp_clock_caps {
+       int max_adj;   /* Maximum frequency adjustment in parts per billon. */
+       int n_alarm;   /* Number of programmable alarms. */
+       int n_ext_ts;  /* Number of external time stamp channels. */
+       int n_per_out; /* Number of programmable periodic signals. */
+       int pps;       /* Whether the clock supports a PPS callback. */
+       int n_pins;    /* Number of input/output pins. */
+       /* Whether the clock supports precise system-device cross timestamps */
+       int cross_timestamping;
+       int rsv[13];   /* Reserved for future use. */
+};
+
+struct ptp_extts_request {
+       unsigned int index;  /* Which channel to configure. */
+       unsigned int flags;  /* Bit field for PTP_xxx flags. */
+       unsigned int rsv[2]; /* Reserved for future use. */
+};
+
+struct ptp_perout_request {
+       struct ptp_clock_time start;  /* Absolute start time. */
+       struct ptp_clock_time period; /* Desired period, zero means disable. */
+       unsigned int index;           /* Which channel to configure. */
+       unsigned int flags;           /* Reserved for future use. */
+       unsigned int rsv[4];          /* Reserved for future use. */
+};
+
+#define PTP_MAX_SAMPLES 25 /* Maximum allowed offset measurement samples. */
+
+struct ptp_sys_offset {
+       unsigned int n_samples; /* Desired number of measurements. */
+       unsigned int rsv[3];    /* Reserved for future use. */
+       /*
+        * Array of interleaved system/phc time stamps. The kernel
+        * will provide 2*n_samples + 1 time stamps, with the last
+        * one as a system time stamp.
+        */
+       struct ptp_clock_time ts[2 * PTP_MAX_SAMPLES + 1];
+};
+
+struct ptp_sys_offset_precise {
+       struct ptp_clock_time device;
+       struct ptp_clock_time sys_realtime;
+       struct ptp_clock_time sys_monoraw;
+       unsigned int rsv[4];    /* Reserved for future use. */
+};
+
+enum ptp_pin_function {
+       PTP_PF_NONE,
+       PTP_PF_EXTTS,
+       PTP_PF_PEROUT,
+       PTP_PF_PHYSYNC,
+};
+
+struct ptp_pin_desc {
+       /*
+        * Hardware specific human readable pin name. This field is
+        * set by the kernel during the PTP_PIN_GETFUNC ioctl and is
+        * ignored for the PTP_PIN_SETFUNC ioctl.
+        */
+       char name[64];
+       /*
+        * Pin index in the range of zero to ptp_clock_caps.n_pins - 1.
+        */
+       unsigned int index;
+       /*
+        * Which of the PTP_PF_xxx functions to use on this pin.
+        */
+       unsigned int func;
+       /*
+        * The specific channel to use for this function.
+        * This corresponds to the 'index' field of the
+        * PTP_EXTTS_REQUEST and PTP_PEROUT_REQUEST ioctls.
+        */
+       unsigned int chan;
+       /*
+        * Reserved for future use.
+        */
+       unsigned int rsv[5];
+};
+
+#define PTP_CLK_MAGIC '='
+
+#define PTP_CLOCK_GETCAPS  _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps)
+#define PTP_EXTTS_REQUEST  _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request)
+#define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request)
+#define PTP_ENABLE_PPS     _IOW(PTP_CLK_MAGIC, 4, int)
+#define PTP_SYS_OFFSET     _IOW(PTP_CLK_MAGIC, 5, struct ptp_sys_offset)
+#define PTP_PIN_GETFUNC    _IOWR(PTP_CLK_MAGIC, 6, struct ptp_pin_desc)
+#define PTP_PIN_SETFUNC    _IOW(PTP_CLK_MAGIC, 7, struct ptp_pin_desc)
+#define PTP_SYS_OFFSET_PRECISE \
+       _IOWR(PTP_CLK_MAGIC, 8, struct ptp_sys_offset_precise)
+
+struct ptp_extts_event {
+       struct ptp_clock_time t; /* Time event occured. */
+       unsigned int index;      /* Which channel produced the event. */
+       unsigned int flags;      /* Reserved for future use. */
+       unsigned int rsv[2];     /* Reserved for future use. */
+};
+
+#endif
diff --git a/lib/libdss-include/linux/ptrace.h b/lib/libdss-include/linux/ptrace.h
new file mode 100644 (file)
index 0000000..73b0338
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef _LINUX_PTRACE_H
+#define _LINUX_PTRACE_H
+/* ptrace.h */
+/* structs and defines to help the user use the ptrace system call. */
+
+/* has the defines to get at the registers. */
+
+#include <linux/types.h>
+
+#define PTRACE_TRACEME            0
+#define PTRACE_PEEKTEXT                   1
+#define PTRACE_PEEKDATA                   2
+#define PTRACE_PEEKUSR            3
+#define PTRACE_POKETEXT                   4
+#define PTRACE_POKEDATA                   5
+#define PTRACE_POKEUSR            6
+#define PTRACE_CONT               7
+#define PTRACE_KILL               8
+#define PTRACE_SINGLESTEP         9
+
+#define PTRACE_ATTACH            16
+#define PTRACE_DETACH            17
+
+#define PTRACE_SYSCALL           24
+
+/* 0x4200-0x4300 are reserved for architecture-independent additions.  */
+#define PTRACE_SETOPTIONS      0x4200
+#define PTRACE_GETEVENTMSG     0x4201
+#define PTRACE_GETSIGINFO      0x4202
+#define PTRACE_SETSIGINFO      0x4203
+
+/*
+ * Generic ptrace interface that exports the architecture specific regsets
+ * using the corresponding NT_* types (which are also used in the core dump).
+ * Please note that the NT_PRSTATUS note type in a core dump contains a full
+ * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the
+ * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the
+ * other user_regset flavors, the user_regset layout and the ELF core dump note
+ * payload are exactly the same layout.
+ *
+ * This interface usage is as follows:
+ *     struct iovec iov = { buf, len};
+ *
+ *     ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov);
+ *
+ * On the successful completion, iov.len will be updated by the kernel,
+ * specifying how much the kernel has written/read to/from the user's iov.buf.
+ */
+#define PTRACE_GETREGSET       0x4204
+#define PTRACE_SETREGSET       0x4205
+
+#define PTRACE_SEIZE           0x4206
+#define PTRACE_INTERRUPT       0x4207
+#define PTRACE_LISTEN          0x4208
+
+#define PTRACE_PEEKSIGINFO     0x4209
+
+struct ptrace_peeksiginfo_args {
+       __u64 off;      /* from which siginfo to start */
+       __u32 flags;
+       __s32 nr;       /* how may siginfos to take */
+};
+
+#define PTRACE_GETSIGMASK      0x420a
+#define PTRACE_SETSIGMASK      0x420b
+
+#define PTRACE_SECCOMP_GET_FILTER      0x420c
+
+/* Read signals from a shared (process wide) queue */
+#define PTRACE_PEEKSIGINFO_SHARED      (1 << 0)
+
+/* Wait extended result codes for the above trace options.  */
+#define PTRACE_EVENT_FORK      1
+#define PTRACE_EVENT_VFORK     2
+#define PTRACE_EVENT_CLONE     3
+#define PTRACE_EVENT_EXEC      4
+#define PTRACE_EVENT_VFORK_DONE        5
+#define PTRACE_EVENT_EXIT      6
+#define PTRACE_EVENT_SECCOMP   7
+/* Extended result codes which enabled by means other than options.  */
+#define PTRACE_EVENT_STOP      128
+
+/* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */
+#define PTRACE_O_TRACESYSGOOD  1
+#define PTRACE_O_TRACEFORK     (1 << PTRACE_EVENT_FORK)
+#define PTRACE_O_TRACEVFORK    (1 << PTRACE_EVENT_VFORK)
+#define PTRACE_O_TRACECLONE    (1 << PTRACE_EVENT_CLONE)
+#define PTRACE_O_TRACEEXEC     (1 << PTRACE_EVENT_EXEC)
+#define PTRACE_O_TRACEVFORKDONE        (1 << PTRACE_EVENT_VFORK_DONE)
+#define PTRACE_O_TRACEEXIT     (1 << PTRACE_EVENT_EXIT)
+#define PTRACE_O_TRACESECCOMP  (1 << PTRACE_EVENT_SECCOMP)
+
+/* eventless options */
+#define PTRACE_O_EXITKILL              (1 << 20)
+#define PTRACE_O_SUSPEND_SECCOMP       (1 << 21)
+
+#define PTRACE_O_MASK          (\
+       0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP)
+
+#include <asm/ptrace.h>
+
+
+#endif /* _LINUX_PTRACE_H */
diff --git a/lib/libdss-include/linux/qnx4_fs.h b/lib/libdss-include/linux/qnx4_fs.h
new file mode 100644 (file)
index 0000000..8b9aee1
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ *  Name                         : qnx4_fs.h
+ *  Author                       : Richard Frowijn
+ *  Function                     : qnx4 global filesystem definitions
+ *  History                      : 23-03-1998 created
+ */
+#ifndef _LINUX_QNX4_FS_H
+#define _LINUX_QNX4_FS_H
+
+#include <linux/types.h>
+#include <linux/qnxtypes.h>
+#include <linux/magic.h>
+
+#define QNX4_ROOT_INO 1
+
+#define QNX4_MAX_XTNTS_PER_XBLK        60
+/* for di_status */
+#define QNX4_FILE_USED          0x01
+#define QNX4_FILE_MODIFIED      0x02
+#define QNX4_FILE_BUSY          0x04
+#define QNX4_FILE_LINK          0x08
+#define QNX4_FILE_INODE         0x10
+#define QNX4_FILE_FSYSCLEAN     0x20
+
+#define QNX4_I_MAP_SLOTS       8
+#define QNX4_Z_MAP_SLOTS       64
+#define QNX4_VALID_FS          0x0001  /* Clean fs. */
+#define QNX4_ERROR_FS          0x0002  /* fs has errors. */
+#define QNX4_BLOCK_SIZE         0x200  /* blocksize of 512 bytes */
+#define QNX4_BLOCK_SIZE_BITS    9      /* blocksize shift */
+#define QNX4_DIR_ENTRY_SIZE     0x040  /* dir entry size of 64 bytes */
+#define QNX4_DIR_ENTRY_SIZE_BITS 6     /* dir entry size shift */
+#define QNX4_XBLK_ENTRY_SIZE    0x200  /* xblk entry size */
+#define QNX4_INODES_PER_BLOCK   0x08   /* 512 / 64 */
+
+/* for filenames */
+#define QNX4_SHORT_NAME_MAX    16
+#define QNX4_NAME_MAX          48
+
+/*
+ * This is the original qnx4 inode layout on disk.
+ */
+struct qnx4_inode_entry {
+       char            di_fname[QNX4_SHORT_NAME_MAX];
+       qnx4_off_t      di_size;
+       qnx4_xtnt_t     di_first_xtnt;
+       __le32          di_xblk;
+       __le32          di_ftime;
+       __le32          di_mtime;
+       __le32          di_atime;
+       __le32          di_ctime;
+       qnx4_nxtnt_t    di_num_xtnts;
+       qnx4_mode_t     di_mode;
+       qnx4_muid_t     di_uid;
+       qnx4_mgid_t     di_gid;
+       qnx4_nlink_t    di_nlink;
+       __u8            di_zero[4];
+       qnx4_ftype_t    di_type;
+       __u8            di_status;
+};
+
+struct qnx4_link_info {
+       char            dl_fname[QNX4_NAME_MAX];
+       __le32          dl_inode_blk;
+       __u8            dl_inode_ndx;
+       __u8            dl_spare[10];
+       __u8            dl_status;
+};
+
+struct qnx4_xblk {
+       __le32          xblk_next_xblk;
+       __le32          xblk_prev_xblk;
+       __u8            xblk_num_xtnts;
+       __u8            xblk_spare[3];
+       __le32          xblk_num_blocks;
+       qnx4_xtnt_t     xblk_xtnts[QNX4_MAX_XTNTS_PER_XBLK];
+       char            xblk_signature[8];
+       qnx4_xtnt_t     xblk_first_xtnt;
+};
+
+struct qnx4_super_block {
+       struct qnx4_inode_entry RootDir;
+       struct qnx4_inode_entry Inode;
+       struct qnx4_inode_entry Boot;
+       struct qnx4_inode_entry AltBoot;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/qnxtypes.h b/lib/libdss-include/linux/qnxtypes.h
new file mode 100644 (file)
index 0000000..bebbe5c
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Name                         : qnxtypes.h
+ *  Author                       : Richard Frowijn
+ *  Function                     : standard qnx types
+ *  History                      : 22-03-1998 created
+ *
+ */
+
+#ifndef _QNX4TYPES_H
+#define _QNX4TYPES_H
+
+#include <linux/types.h>
+
+typedef __le16 qnx4_nxtnt_t;
+typedef __u8  qnx4_ftype_t;
+
+typedef struct {
+       __le32 xtnt_blk;
+       __le32 xtnt_size;
+} qnx4_xtnt_t;
+
+typedef __le16 qnx4_mode_t;
+typedef __le16 qnx4_muid_t;
+typedef __le16 qnx4_mgid_t;
+typedef __le32 qnx4_off_t;
+typedef __le16 qnx4_nlink_t;
+
+#endif
diff --git a/lib/libdss-include/linux/quota.h b/lib/libdss-include/linux/quota.h
new file mode 100644 (file)
index 0000000..0695307
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Robert Elz at The University of Melbourne.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_QUOTA_
+#define _LINUX_QUOTA_
+
+#include <linux/errno.h>
+#include <linux/types.h>
+
+#define __DQUOT_VERSION__      "dquot_6.6.0"
+
+#define MAXQUOTAS 3
+#define USRQUOTA  0            /* element used for user quotas */
+#define GRPQUOTA  1            /* element used for group quotas */
+#define PRJQUOTA  2            /* element used for project quotas */
+
+/*
+ * Definitions for the default names of the quotas files.
+ */
+#define INITQFNAMES { \
+       "user",    /* USRQUOTA */ \
+       "group",   /* GRPQUOTA */ \
+       "project", /* PRJQUOTA */ \
+       "undefined", \
+};
+
+/*
+ * Command definitions for the 'quotactl' system call.
+ * The commands are broken into a main command defined below
+ * and a subcommand that is used to convey the type of
+ * quota that is being manipulated (see above).
+ */
+#define SUBCMDMASK  0x00ff
+#define SUBCMDSHIFT 8
+#define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
+
+#define Q_SYNC     0x800001    /* sync disk copy of a filesystems quotas */
+#define Q_QUOTAON  0x800002    /* turn quotas on */
+#define Q_QUOTAOFF 0x800003    /* turn quotas off */
+#define Q_GETFMT   0x800004    /* get quota format used on given filesystem */
+#define Q_GETINFO  0x800005    /* get information about quota files */
+#define Q_SETINFO  0x800006    /* set information about quota files */
+#define Q_GETQUOTA 0x800007    /* get user quota structure */
+#define Q_SETQUOTA 0x800008    /* set user quota structure */
+
+/* Quota format type IDs */
+#define        QFMT_VFS_OLD 1
+#define        QFMT_VFS_V0 2
+#define QFMT_OCFS2 3
+#define        QFMT_VFS_V1 4
+
+/* Size of block in which space limits are passed through the quota
+ * interface */
+#define QIF_DQBLKSIZE_BITS 10
+#define QIF_DQBLKSIZE (1 << QIF_DQBLKSIZE_BITS)
+
+/*
+ * Quota structure used for communication with userspace via quotactl
+ * Following flags are used to specify which fields are valid
+ */
+enum {
+       QIF_BLIMITS_B = 0,
+       QIF_SPACE_B,
+       QIF_ILIMITS_B,
+       QIF_INODES_B,
+       QIF_BTIME_B,
+       QIF_ITIME_B,
+};
+
+#define QIF_BLIMITS    (1 << QIF_BLIMITS_B)
+#define QIF_SPACE      (1 << QIF_SPACE_B)
+#define QIF_ILIMITS    (1 << QIF_ILIMITS_B)
+#define QIF_INODES     (1 << QIF_INODES_B)
+#define QIF_BTIME      (1 << QIF_BTIME_B)
+#define QIF_ITIME      (1 << QIF_ITIME_B)
+#define QIF_LIMITS     (QIF_BLIMITS | QIF_ILIMITS)
+#define QIF_USAGE      (QIF_SPACE | QIF_INODES)
+#define QIF_TIMES      (QIF_BTIME | QIF_ITIME)
+#define QIF_ALL                (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
+
+struct if_dqblk {
+       __u64 dqb_bhardlimit;
+       __u64 dqb_bsoftlimit;
+       __u64 dqb_curspace;
+       __u64 dqb_ihardlimit;
+       __u64 dqb_isoftlimit;
+       __u64 dqb_curinodes;
+       __u64 dqb_btime;
+       __u64 dqb_itime;
+       __u32 dqb_valid;
+};
+
+/*
+ * Structure used for setting quota information about file via quotactl
+ * Following flags are used to specify which fields are valid
+ */
+#define IIF_BGRACE     1
+#define IIF_IGRACE     2
+#define IIF_FLAGS      4
+#define IIF_ALL                (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
+
+enum {
+       DQF_ROOT_SQUASH_B = 0,
+       DQF_SYS_FILE_B = 16,
+       /* Kernel internal flags invisible to userspace */
+       DQF_PRIVATE
+};
+
+/* Root squash enabled (for v1 quota format) */
+#define DQF_ROOT_SQUASH        (1 << DQF_ROOT_SQUASH_B)
+/* Quota stored in a system file */
+#define DQF_SYS_FILE   (1 << DQF_SYS_FILE_B)
+
+struct if_dqinfo {
+       __u64 dqi_bgrace;
+       __u64 dqi_igrace;
+       __u32 dqi_flags;        /* DFQ_* */
+       __u32 dqi_valid;
+};
+
+/*
+ * Definitions for quota netlink interface
+ */
+#define QUOTA_NL_NOWARN 0
+#define QUOTA_NL_IHARDWARN 1           /* Inode hardlimit reached */
+#define QUOTA_NL_ISOFTLONGWARN 2       /* Inode grace time expired */
+#define QUOTA_NL_ISOFTWARN 3           /* Inode softlimit reached */
+#define QUOTA_NL_BHARDWARN 4           /* Block hardlimit reached */
+#define QUOTA_NL_BSOFTLONGWARN 5       /* Block grace time expired */
+#define QUOTA_NL_BSOFTWARN 6           /* Block softlimit reached */
+#define QUOTA_NL_IHARDBELOW 7          /* Usage got below inode hardlimit */
+#define QUOTA_NL_ISOFTBELOW 8          /* Usage got below inode softlimit */
+#define QUOTA_NL_BHARDBELOW 9          /* Usage got below block hardlimit */
+#define QUOTA_NL_BSOFTBELOW 10         /* Usage got below block softlimit */
+
+enum {
+       QUOTA_NL_C_UNSPEC,
+       QUOTA_NL_C_WARNING,
+       __QUOTA_NL_C_MAX,
+};
+#define QUOTA_NL_C_MAX (__QUOTA_NL_C_MAX - 1)
+
+enum {
+       QUOTA_NL_A_UNSPEC,
+       QUOTA_NL_A_QTYPE,
+       QUOTA_NL_A_EXCESS_ID,
+       QUOTA_NL_A_WARNING,
+       QUOTA_NL_A_DEV_MAJOR,
+       QUOTA_NL_A_DEV_MINOR,
+       QUOTA_NL_A_CAUSED_ID,
+       __QUOTA_NL_A_MAX,
+};
+#define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1)
+
+
+#endif /* _LINUX_QUOTA_ */
diff --git a/lib/libdss-include/linux/radeonfb.h b/lib/libdss-include/linux/radeonfb.h
new file mode 100644 (file)
index 0000000..8c4bbde
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __LINUX_RADEONFB_H__
+#define __LINUX_RADEONFB_H__
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+
+#define ATY_RADEON_LCD_ON      0x00000001
+#define ATY_RADEON_CRT_ON      0x00000002
+
+
+#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, size_t)
+#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, size_t)
+
+#endif
+
diff --git a/lib/libdss-include/linux/raid/md_p.h b/lib/libdss-include/linux/raid/md_p.h
new file mode 100644 (file)
index 0000000..e956671
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+   md_p.h : physical layout of Linux RAID devices
+          Copyright (C) 1996-98 Ingo Molnar, Gadi Oxman
+         
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+   
+   You should have received a copy of the GNU General Public License
+   (for example /usr/src/linux/COPYING); if not, write to the Free
+   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#ifndef _MD_P_H
+#define _MD_P_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+
+/*
+ * RAID superblock.
+ *
+ * The RAID superblock maintains some statistics on each RAID configuration.
+ * Each real device in the RAID set contains it near the end of the device.
+ * Some of the ideas are copied from the ext2fs implementation.
+ *
+ * We currently use 4096 bytes as follows:
+ *
+ *     word offset     function
+ *
+ *        0  -    31   Constant generic RAID device information.
+ *        32  -    63   Generic state information.
+ *       64  -   127   Personality specific information.
+ *      128  -   511   12 32-words descriptors of the disks in the raid set.
+ *      512  -   911   Reserved.
+ *      912  -  1023   Disk specific descriptor.
+ */
+
+/*
+ * If x is the real device size in bytes, we return an apparent size of:
+ *
+ *     y = (x & ~(MD_RESERVED_BYTES - 1)) - MD_RESERVED_BYTES
+ *
+ * and place the 4kB superblock at offset y.
+ */
+#define MD_RESERVED_BYTES              (64 * 1024)
+#define MD_RESERVED_SECTORS            (MD_RESERVED_BYTES / 512)
+
+#define MD_NEW_SIZE_SECTORS(x)         ((x & ~(MD_RESERVED_SECTORS - 1)) - MD_RESERVED_SECTORS)
+
+#define MD_SB_BYTES                    4096
+#define MD_SB_WORDS                    (MD_SB_BYTES / 4)
+#define MD_SB_SECTORS                  (MD_SB_BYTES / 512)
+
+/*
+ * The following are counted in 32-bit words
+ */
+#define        MD_SB_GENERIC_OFFSET            0
+#define MD_SB_PERSONALITY_OFFSET       64
+#define MD_SB_DISKS_OFFSET             128
+#define MD_SB_DESCRIPTOR_OFFSET                992
+
+#define MD_SB_GENERIC_CONSTANT_WORDS   32
+#define MD_SB_GENERIC_STATE_WORDS      32
+#define MD_SB_GENERIC_WORDS            (MD_SB_GENERIC_CONSTANT_WORDS + MD_SB_GENERIC_STATE_WORDS)
+#define MD_SB_PERSONALITY_WORDS                64
+#define MD_SB_DESCRIPTOR_WORDS         32
+#define MD_SB_DISKS                    27
+#define MD_SB_DISKS_WORDS              (MD_SB_DISKS*MD_SB_DESCRIPTOR_WORDS)
+#define MD_SB_RESERVED_WORDS           (1024 - MD_SB_GENERIC_WORDS - MD_SB_PERSONALITY_WORDS - MD_SB_DISKS_WORDS - MD_SB_DESCRIPTOR_WORDS)
+#define MD_SB_EQUAL_WORDS              (MD_SB_GENERIC_WORDS + MD_SB_PERSONALITY_WORDS + MD_SB_DISKS_WORDS)
+
+/*
+ * Device "operational" state bits
+ */
+#define MD_DISK_FAULTY         0 /* disk is faulty / operational */
+#define MD_DISK_ACTIVE         1 /* disk is running or spare disk */
+#define MD_DISK_SYNC           2 /* disk is in sync with the raid set */
+#define MD_DISK_REMOVED                3 /* disk is in sync with the raid set */
+#define MD_DISK_CLUSTER_ADD     4 /* Initiate a disk add across the cluster
+                                  * For clustered enviroments only.
+                                  */
+#define MD_DISK_CANDIDATE      5 /* disk is added as spare (local) until confirmed
+                                  * For clustered enviroments only.
+                                  */
+
+#define        MD_DISK_WRITEMOSTLY     9 /* disk is "write-mostly" is RAID1 config.
+                                  * read requests will only be sent here in
+                                  * dire need
+                                  */
+#define MD_DISK_JOURNAL                18 /* disk is used as the write journal in RAID-5/6 */
+
+#define MD_DISK_ROLE_SPARE     0xffff
+#define MD_DISK_ROLE_FAULTY    0xfffe
+#define MD_DISK_ROLE_JOURNAL   0xfffd
+#define MD_DISK_ROLE_MAX       0xff00 /* max value of regular disk role */
+
+typedef struct mdp_device_descriptor_s {
+       __u32 number;           /* 0 Device number in the entire set          */
+       __u32 major;            /* 1 Device major number                      */
+       __u32 minor;            /* 2 Device minor number                      */
+       __u32 raid_disk;        /* 3 The role of the device in the raid set   */
+       __u32 state;            /* 4 Operational state                        */
+       __u32 reserved[MD_SB_DESCRIPTOR_WORDS - 5];
+} mdp_disk_t;
+
+#define MD_SB_MAGIC            0xa92b4efc
+
+/*
+ * Superblock state bits
+ */
+#define MD_SB_CLEAN            0
+#define MD_SB_ERRORS           1
+
+#define        MD_SB_CLUSTERED         5 /* MD is clustered */
+#define        MD_SB_BITMAP_PRESENT    8 /* bitmap may be present nearby */
+
+/*
+ * Notes:
+ * - if an array is being reshaped (restriped) in order to change the
+ *   the number of active devices in the array, 'raid_disks' will be
+ *   the larger of the old and new numbers.  'delta_disks' will
+ *   be the "new - old".  So if +ve, raid_disks is the new value, and
+ *   "raid_disks-delta_disks" is the old.  If -ve, raid_disks is the
+ *   old value and "raid_disks+delta_disks" is the new (smaller) value.
+ */
+
+
+typedef struct mdp_superblock_s {
+       /*
+        * Constant generic information
+        */
+       __u32 md_magic;         /*  0 MD identifier                           */
+       __u32 major_version;    /*  1 major version to which the set conforms */
+       __u32 minor_version;    /*  2 minor version ...                       */
+       __u32 patch_version;    /*  3 patchlevel version ...                  */
+       __u32 gvalid_words;     /*  4 Number of used words in this section    */
+       __u32 set_uuid0;        /*  5 Raid set identifier                     */
+       __u32 ctime;            /*  6 Creation time                           */
+       __u32 level;            /*  7 Raid personality                        */
+       __u32 size;             /*  8 Apparent size of each individual disk   */
+       __u32 nr_disks;         /*  9 total disks in the raid set             */
+       __u32 raid_disks;       /* 10 disks in a fully functional raid set    */
+       __u32 md_minor;         /* 11 preferred MD minor device number        */
+       __u32 not_persistent;   /* 12 does it have a persistent superblock    */
+       __u32 set_uuid1;        /* 13 Raid set identifier #2                  */
+       __u32 set_uuid2;        /* 14 Raid set identifier #3                  */
+       __u32 set_uuid3;        /* 15 Raid set identifier #4                  */
+       __u32 gstate_creserved[MD_SB_GENERIC_CONSTANT_WORDS - 16];
+
+       /*
+        * Generic state information
+        */
+       __u32 utime;            /*  0 Superblock update time                  */
+       __u32 state;            /*  1 State bits (clean, ...)                 */
+       __u32 active_disks;     /*  2 Number of currently active disks        */
+       __u32 working_disks;    /*  3 Number of working disks                 */
+       __u32 failed_disks;     /*  4 Number of failed disks                  */
+       __u32 spare_disks;      /*  5 Number of spare disks                   */
+       __u32 sb_csum;          /*  6 checksum of the whole superblock        */
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
+       __u32 events_hi;        /*  7 high-order of superblock update count   */
+       __u32 events_lo;        /*  8 low-order of superblock update count    */
+       __u32 cp_events_hi;     /*  9 high-order of checkpoint update count   */
+       __u32 cp_events_lo;     /* 10 low-order of checkpoint update count    */
+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
+       __u32 events_lo;        /*  7 low-order of superblock update count    */
+       __u32 events_hi;        /*  8 high-order of superblock update count   */
+       __u32 cp_events_lo;     /*  9 low-order of checkpoint update count    */
+       __u32 cp_events_hi;     /* 10 high-order of checkpoint update count   */
+#else
+#error unspecified endianness
+#endif
+       __u32 recovery_cp;      /* 11 recovery checkpoint sector count        */
+       /* There are only valid for minor_version > 90 */
+       __u64 reshape_position; /* 12,13 next address in array-space for reshape */
+       __u32 new_level;        /* 14 new level we are reshaping to           */
+       __u32 delta_disks;      /* 15 change in number of raid_disks          */
+       __u32 new_layout;       /* 16 new layout                              */
+       __u32 new_chunk;        /* 17 new chunk size (bytes)                  */
+       __u32 gstate_sreserved[MD_SB_GENERIC_STATE_WORDS - 18];
+
+       /*
+        * Personality information
+        */
+       __u32 layout;           /*  0 the array's physical layout             */
+       __u32 chunk_size;       /*  1 chunk size in bytes                     */
+       __u32 root_pv;          /*  2 LV root PV */
+       __u32 root_block;       /*  3 LV root block */
+       __u32 pstate_reserved[MD_SB_PERSONALITY_WORDS - 4];
+
+       /*
+        * Disks information
+        */
+       mdp_disk_t disks[MD_SB_DISKS];
+
+       /*
+        * Reserved
+        */
+       __u32 reserved[MD_SB_RESERVED_WORDS];
+
+       /*
+        * Active descriptor
+        */
+       mdp_disk_t this_disk;
+
+} mdp_super_t;
+
+static __inline__ __u64 md_event(mdp_super_t *sb) {
+       __u64 ev = sb->events_hi;
+       return (ev<<32)| sb->events_lo;
+}
+
+#define MD_SUPERBLOCK_1_TIME_SEC_MASK ((1ULL<<40) - 1)
+
+/*
+ * The version-1 superblock :
+ * All numeric fields are little-endian.
+ *
+ * total size: 256 bytes plus 2 per device.
+ *  1K allows 384 devices.
+ */
+struct mdp_superblock_1 {
+       /* constant array information - 128 bytes */
+       __le32  magic;          /* MD_SB_MAGIC: 0xa92b4efc - little endian */
+       __le32  major_version;  /* 1 */
+       __le32  feature_map;    /* bit 0 set if 'bitmap_offset' is meaningful */
+       __le32  pad0;           /* always set to 0 when writing */
+
+       __u8    set_uuid[16];   /* user-space generated. */
+       char    set_name[32];   /* set and interpreted by user-space */
+
+       __le64  ctime;          /* lo 40 bits are seconds, top 24 are microseconds or 0*/
+       __le32  level;          /* -4 (multipath), -1 (linear), 0,1,4,5 */
+       __le32  layout;         /* only for raid5 and raid10 currently */
+       __le64  size;           /* used size of component devices, in 512byte sectors */
+
+       __le32  chunksize;      /* in 512byte sectors */
+       __le32  raid_disks;
+       __le32  bitmap_offset;  /* sectors after start of superblock that bitmap starts
+                                * NOTE: signed, so bitmap can be before superblock
+                                * only meaningful of feature_map[0] is set.
+                                */
+
+       /* These are only valid with feature bit '4' */
+       __le32  new_level;      /* new level we are reshaping to                */
+       __le64  reshape_position;       /* next address in array-space for reshape */
+       __le32  delta_disks;    /* change in number of raid_disks               */
+       __le32  new_layout;     /* new layout                                   */
+       __le32  new_chunk;      /* new chunk size (512byte sectors)             */
+       __le32  new_offset;     /* signed number to add to data_offset in new
+                                * layout.  0 == no-change.  This can be
+                                * different on each device in the array.
+                                */
+
+       /* constant this-device information - 64 bytes */
+       __le64  data_offset;    /* sector start of data, often 0 */
+       __le64  data_size;      /* sectors in this device that can be used for data */
+       __le64  super_offset;   /* sector start of this superblock */
+       union {
+               __le64  recovery_offset;/* sectors before this offset (from data_offset) have been recovered */
+               __le64  journal_tail;/* journal tail of journal device (from data_offset) */
+       };
+       __le32  dev_number;     /* permanent identifier of this  device - not role in raid */
+       __le32  cnt_corrected_read; /* number of read errors that were corrected by re-writing */
+       __u8    device_uuid[16]; /* user-space setable, ignored by kernel */
+       __u8    devflags;       /* per-device flags.  Only one defined...*/
+#define        WriteMostly1    1       /* mask for writemostly flag in above */
+       /* Bad block log.  If there are any bad blocks the feature flag is set.
+        * If offset and size are non-zero, that space is reserved and available
+        */
+       __u8    bblog_shift;    /* shift from sectors to block size */
+       __le16  bblog_size;     /* number of sectors reserved for list */
+       __le32  bblog_offset;   /* sector offset from superblock to bblog,
+                                * signed - not unsigned */
+
+       /* array state information - 64 bytes */
+       __le64  utime;          /* 40 bits second, 24 bits microseconds */
+       __le64  events;         /* incremented when superblock updated */
+       __le64  resync_offset;  /* data before this offset (from data_offset) known to be in sync */
+       __le32  sb_csum;        /* checksum up to devs[max_dev] */
+       __le32  max_dev;        /* size of devs[] array to consider */
+       __u8    pad3[64-32];    /* set to 0 when writing */
+
+       /* device state information. Indexed by dev_number.
+        * 2 bytes per device
+        * Note there are no per-device state flags. State information is rolled
+        * into the 'roles' value.  If a device is spare or faulty, then it doesn't
+        * have a meaningful role.
+        */
+       __le16  dev_roles[0];   /* role in array, or 0xffff for a spare, or 0xfffe for faulty */
+};
+
+/* feature_map bits */
+#define MD_FEATURE_BITMAP_OFFSET       1
+#define        MD_FEATURE_RECOVERY_OFFSET      2 /* recovery_offset is present and
+                                          * must be honoured
+                                          */
+#define        MD_FEATURE_RESHAPE_ACTIVE       4
+#define        MD_FEATURE_BAD_BLOCKS           8 /* badblock list is not empty */
+#define        MD_FEATURE_REPLACEMENT          16 /* This device is replacing an
+                                           * active device with same 'role'.
+                                           * 'recovery_offset' is also set.
+                                           */
+#define        MD_FEATURE_RESHAPE_BACKWARDS    32 /* Reshape doesn't change number
+                                           * of devices, but is going
+                                           * backwards anyway.
+                                           */
+#define        MD_FEATURE_NEW_OFFSET           64 /* new_offset must be honoured */
+#define        MD_FEATURE_RECOVERY_BITMAP      128 /* recovery that is happening
+                                            * is guided by bitmap.
+                                            */
+#define MD_FEATURE_CLUSTERED           256 /* clustered MD */
+#define        MD_FEATURE_JOURNAL              512 /* support write cache */
+#define        MD_FEATURE_ALL                  (MD_FEATURE_BITMAP_OFFSET       \
+                                       |MD_FEATURE_RECOVERY_OFFSET     \
+                                       |MD_FEATURE_RESHAPE_ACTIVE      \
+                                       |MD_FEATURE_BAD_BLOCKS          \
+                                       |MD_FEATURE_REPLACEMENT         \
+                                       |MD_FEATURE_RESHAPE_BACKWARDS   \
+                                       |MD_FEATURE_NEW_OFFSET          \
+                                       |MD_FEATURE_RECOVERY_BITMAP     \
+                                       |MD_FEATURE_CLUSTERED           \
+                                       |MD_FEATURE_JOURNAL             \
+                                       )
+
+struct r5l_payload_header {
+       __le16 type;
+       __le16 flags;
+} __attribute__ ((__packed__));
+
+enum r5l_payload_type {
+       R5LOG_PAYLOAD_DATA = 0,
+       R5LOG_PAYLOAD_PARITY = 1,
+       R5LOG_PAYLOAD_FLUSH = 2,
+};
+
+struct r5l_payload_data_parity {
+       struct r5l_payload_header header;
+       __le32 size;            /* sector. data/parity size. each 4k
+                                * has a checksum */
+       __le64 location;        /* sector. For data, it's raid sector. For
+                                * parity, it's stripe sector */
+       __le32 checksum[];
+} __attribute__ ((__packed__));
+
+enum r5l_payload_data_parity_flag {
+       R5LOG_PAYLOAD_FLAG_DISCARD = 1, /* payload is discard */
+       /*
+        * RESHAPED/RESHAPING is only set when there is reshape activity. Note,
+        * both data/parity of a stripe should have the same flag set
+        *
+        * RESHAPED: reshape is running, and this stripe finished reshape
+        * RESHAPING: reshape is running, and this stripe isn't reshaped
+        */
+       R5LOG_PAYLOAD_FLAG_RESHAPED = 2,
+       R5LOG_PAYLOAD_FLAG_RESHAPING = 3,
+};
+
+struct r5l_payload_flush {
+       struct r5l_payload_header header;
+       __le32 size; /* flush_stripes size, bytes */
+       __le64 flush_stripes[];
+} __attribute__ ((__packed__));
+
+enum r5l_payload_flush_flag {
+       R5LOG_PAYLOAD_FLAG_FLUSH_STRIPE = 1, /* data represents whole stripe */
+};
+
+struct r5l_meta_block {
+       __le32 magic;
+       __le32 checksum;
+       __u8 version;
+       __u8 __zero_pading_1;
+       __le16 __zero_pading_2;
+       __le32 meta_size; /* whole size of the block */
+
+       __le64 seq;
+       __le64 position; /* sector, start from rdev->data_offset, current position */
+       struct r5l_payload_header payloads[];
+} __attribute__ ((__packed__));
+
+#define R5LOG_VERSION 0x1
+#define R5LOG_MAGIC 0x6433c509
+#endif
diff --git a/lib/libdss-include/linux/raid/md_u.h b/lib/libdss-include/linux/raid/md_u.h
new file mode 100644 (file)
index 0000000..162e12d
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+   md_u.h : user <=> kernel API between Linux raidtools and RAID drivers
+          Copyright (C) 1998 Ingo Molnar
+         
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+   
+   You should have received a copy of the GNU General Public License
+   (for example /usr/src/linux/COPYING); if not, write to the Free
+   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#ifndef _MD_U_H
+#define _MD_U_H
+
+/*
+ * Different major versions are not compatible.
+ * Different minor versions are only downward compatible.
+ * Different patchlevel versions are downward and upward compatible.
+ */
+#define MD_MAJOR_VERSION                0
+#define MD_MINOR_VERSION                90
+/*
+ * MD_PATCHLEVEL_VERSION indicates kernel functionality.
+ * >=1 means different superblock formats are selectable using SET_ARRAY_INFO
+ *     and major_version/minor_version accordingly
+ * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT
+ *     in the super status byte
+ * >=3 means that bitmap superblock version 4 is supported, which uses
+ *     little-ending representation rather than host-endian
+ */
+#define MD_PATCHLEVEL_VERSION           3
+
+/* ioctls */
+
+/* status */
+#define RAID_VERSION           _IOR (MD_MAJOR, 0x10, mdu_version_t)
+#define GET_ARRAY_INFO         _IOR (MD_MAJOR, 0x11, mdu_array_info_t)
+#define GET_DISK_INFO          _IOR (MD_MAJOR, 0x12, mdu_disk_info_t)
+#define RAID_AUTORUN           _IO (MD_MAJOR, 0x14)
+#define GET_BITMAP_FILE                _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t)
+
+/* configuration */
+#define CLEAR_ARRAY            _IO (MD_MAJOR, 0x20)
+#define ADD_NEW_DISK           _IOW (MD_MAJOR, 0x21, mdu_disk_info_t)
+#define HOT_REMOVE_DISK                _IO (MD_MAJOR, 0x22)
+#define SET_ARRAY_INFO         _IOW (MD_MAJOR, 0x23, mdu_array_info_t)
+#define SET_DISK_INFO          _IO (MD_MAJOR, 0x24)
+#define WRITE_RAID_INFO                _IO (MD_MAJOR, 0x25)
+#define UNPROTECT_ARRAY                _IO (MD_MAJOR, 0x26)
+#define PROTECT_ARRAY          _IO (MD_MAJOR, 0x27)
+#define HOT_ADD_DISK           _IO (MD_MAJOR, 0x28)
+#define SET_DISK_FAULTY                _IO (MD_MAJOR, 0x29)
+#define HOT_GENERATE_ERROR     _IO (MD_MAJOR, 0x2a)
+#define SET_BITMAP_FILE                _IOW (MD_MAJOR, 0x2b, int)
+
+/* usage */
+#define RUN_ARRAY              _IOW (MD_MAJOR, 0x30, mdu_param_t)
+/*  0x31 was START_ARRAY  */
+#define STOP_ARRAY             _IO (MD_MAJOR, 0x32)
+#define STOP_ARRAY_RO          _IO (MD_MAJOR, 0x33)
+#define RESTART_ARRAY_RW       _IO (MD_MAJOR, 0x34)
+#define CLUSTERED_DISK_NACK    _IO (MD_MAJOR, 0x35)
+
+/* 63 partitions with the alternate major number (mdp) */
+#define MdpMinorShift 6
+
+typedef struct mdu_version_s {
+       int major;
+       int minor;
+       int patchlevel;
+} mdu_version_t;
+
+typedef struct mdu_array_info_s {
+       /*
+        * Generic constant information
+        */
+       int major_version;
+       int minor_version;
+       int patch_version;
+       int ctime;
+       int level;
+       int size;
+       int nr_disks;
+       int raid_disks;
+       int md_minor;
+       int not_persistent;
+
+       /*
+        * Generic state information
+        */
+       int utime;              /*  0 Superblock update time                  */
+       int state;              /*  1 State bits (clean, ...)                 */
+       int active_disks;       /*  2 Number of currently active disks        */
+       int working_disks;      /*  3 Number of working disks                 */
+       int failed_disks;       /*  4 Number of failed disks                  */
+       int spare_disks;        /*  5 Number of spare disks                   */
+
+       /*
+        * Personality information
+        */
+       int layout;             /*  0 the array's physical layout             */
+       int chunk_size; /*  1 chunk size in bytes                     */
+
+} mdu_array_info_t;
+
+/* non-obvious values for 'level' */
+#define        LEVEL_MULTIPATH         (-4)
+#define        LEVEL_LINEAR            (-1)
+#define        LEVEL_FAULTY            (-5)
+
+/* we need a value for 'no level specified' and 0
+ * means 'raid0', so we need something else.  This is
+ * for internal use only
+ */
+#define        LEVEL_NONE              (-1000000)
+
+typedef struct mdu_disk_info_s {
+       /*
+        * configuration/status of one particular disk
+        */
+       int number;
+       int major;
+       int minor;
+       int raid_disk;
+       int state;
+
+} mdu_disk_info_t;
+
+typedef struct mdu_start_info_s {
+       /*
+        * configuration/status of one particular disk
+        */
+       int major;
+       int minor;
+       int raid_disk;
+       int state;
+
+} mdu_start_info_t;
+
+typedef struct mdu_bitmap_file_s
+{
+       char pathname[4096];
+} mdu_bitmap_file_t;
+
+typedef struct mdu_param_s
+{
+       int                     personality;    /* 1,2,3,4 */
+       int                     chunk_size;     /* in bytes */
+       int                     max_fault;      /* unused for now */
+} mdu_param_t;
+
+#endif /* _MD_U_H */
diff --git a/lib/libdss-include/linux/random.h b/lib/libdss-include/linux/random.h
new file mode 100644 (file)
index 0000000..1f166ce
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * include/linux/random.h
+ *
+ * Include file for the random number generator.
+ */
+
+#ifndef _LINUX_RANDOM_H
+#define _LINUX_RANDOM_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#include <linux/irqnr.h>
+
+/* ioctl()'s for the random number generator */
+
+/* Get the entropy count. */
+#define RNDGETENTCNT   _IOR( 'R', 0x00, int )
+
+/* Add to (or subtract from) the entropy count.  (Superuser only.) */
+#define RNDADDTOENTCNT _IOW( 'R', 0x01, int )
+
+/* Get the contents of the entropy pool.  (Superuser only.) */
+#define RNDGETPOOL     _IOR( 'R', 0x02, int [2] )
+
+/* 
+ * Write bytes into the entropy pool and add to the entropy count.
+ * (Superuser only.)
+ */
+#define RNDADDENTROPY  _IOW( 'R', 0x03, int [2] )
+
+/* Clear entropy count to 0.  (Superuser only.) */
+#define RNDZAPENTCNT   _IO( 'R', 0x04 )
+
+/* Clear the entropy pool and associated counters.  (Superuser only.) */
+#define RNDCLEARPOOL   _IO( 'R', 0x06 )
+
+struct rand_pool_info {
+       int     entropy_count;
+       int     buf_size;
+       __u32   buf[0];
+};
+
+/*
+ * Flags for getrandom(2)
+ *
+ * GRND_NONBLOCK       Don't block and return EAGAIN instead
+ * GRND_RANDOM         Use the /dev/random pool instead of /dev/urandom
+ */
+#define GRND_NONBLOCK  0x0001
+#define GRND_RANDOM    0x0002
+
+#endif /* _LINUX_RANDOM_H */
diff --git a/lib/libdss-include/linux/raw.h b/lib/libdss-include/linux/raw.h
new file mode 100644 (file)
index 0000000..62d543e
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef __LINUX_RAW_H
+#define __LINUX_RAW_H
+
+#include <linux/types.h>
+
+#define RAW_SETBIND    _IO( 0xac, 0 )
+#define RAW_GETBIND    _IO( 0xac, 1 )
+
+struct raw_config_request 
+{
+       int     raw_minor;
+       __u64   block_major;
+       __u64   block_minor;
+};
+
+#define MAX_RAW_MINORS CONFIG_MAX_RAW_DEVS
+
+#endif /* __LINUX_RAW_H */
diff --git a/lib/libdss-include/linux/rds.h b/lib/libdss-include/linux/rds.h
new file mode 100644 (file)
index 0000000..0f9265c
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * Copyright (c) 2008 Oracle.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifndef _LINUX_RDS_H
+#define _LINUX_RDS_H
+
+#include <linux/types.h>
+
+#define RDS_IB_ABI_VERSION             0x301
+
+#define        SOL_RDS         276
+
+/*
+ * setsockopt/getsockopt for SOL_RDS
+ */
+#define RDS_CANCEL_SENT_TO             1
+#define RDS_GET_MR                     2
+#define RDS_FREE_MR                    3
+/* deprecated: RDS_BARRIER 4 */
+#define RDS_RECVERR                    5
+#define RDS_CONG_MONITOR               6
+#define RDS_GET_MR_FOR_DEST            7
+#define SO_RDS_TRANSPORT               8
+
+/* supported values for SO_RDS_TRANSPORT */
+#define        RDS_TRANS_IB    0
+#define        RDS_TRANS_IWARP 1
+#define        RDS_TRANS_TCP   2
+#define RDS_TRANS_COUNT        3
+#define        RDS_TRANS_NONE  (~0)
+
+/*
+ * Control message types for SOL_RDS.
+ *
+ * CMSG_RDMA_ARGS (sendmsg)
+ *     Request a RDMA transfer to/from the specified
+ *     memory ranges.
+ *     The cmsg_data is a struct rds_rdma_args.
+ * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg)
+ *     Kernel informs application about intended
+ *     source/destination of a RDMA transfer
+ * RDS_CMSG_RDMA_MAP (sendmsg)
+ *     Application asks kernel to map the given
+ *     memory range into a IB MR, and send the
+ *     R_Key along in an RDS extension header.
+ *     The cmsg_data is a struct rds_get_mr_args,
+ *     the same as for the GET_MR setsockopt.
+ * RDS_CMSG_RDMA_STATUS (recvmsg)
+ *     Returns the status of a completed RDMA operation.
+ */
+#define RDS_CMSG_RDMA_ARGS             1
+#define RDS_CMSG_RDMA_DEST             2
+#define RDS_CMSG_RDMA_MAP              3
+#define RDS_CMSG_RDMA_STATUS           4
+#define RDS_CMSG_CONG_UPDATE           5
+#define RDS_CMSG_ATOMIC_FADD           6
+#define RDS_CMSG_ATOMIC_CSWP           7
+#define RDS_CMSG_MASKED_ATOMIC_FADD    8
+#define RDS_CMSG_MASKED_ATOMIC_CSWP    9
+
+#define RDS_INFO_FIRST                 10000
+#define RDS_INFO_COUNTERS              10000
+#define RDS_INFO_CONNECTIONS           10001
+/* 10002 aka RDS_INFO_FLOWS is deprecated */
+#define RDS_INFO_SEND_MESSAGES         10003
+#define RDS_INFO_RETRANS_MESSAGES       10004
+#define RDS_INFO_RECV_MESSAGES          10005
+#define RDS_INFO_SOCKETS                10006
+#define RDS_INFO_TCP_SOCKETS            10007
+#define RDS_INFO_IB_CONNECTIONS                10008
+#define RDS_INFO_CONNECTION_STATS      10009
+#define RDS_INFO_IWARP_CONNECTIONS     10010
+#define RDS_INFO_LAST                  10010
+
+struct rds_info_counter {
+       uint8_t name[32];
+       uint64_t        value;
+} __attribute__((packed));
+
+#define RDS_INFO_CONNECTION_FLAG_SENDING       0x01
+#define RDS_INFO_CONNECTION_FLAG_CONNECTING    0x02
+#define RDS_INFO_CONNECTION_FLAG_CONNECTED     0x04
+
+#define TRANSNAMSIZ    16
+
+struct rds_info_connection {
+       uint64_t        next_tx_seq;
+       uint64_t        next_rx_seq;
+       __be32          laddr;
+       __be32          faddr;
+       uint8_t transport[TRANSNAMSIZ];         /* null term ascii */
+       uint8_t flags;
+} __attribute__((packed));
+
+#define RDS_INFO_MESSAGE_FLAG_ACK               0x01
+#define RDS_INFO_MESSAGE_FLAG_FAST_ACK          0x02
+
+struct rds_info_message {
+       uint64_t        seq;
+       uint32_t        len;
+       __be32          laddr;
+       __be32          faddr;
+       __be16          lport;
+       __be16          fport;
+       uint8_t flags;
+} __attribute__((packed));
+
+struct rds_info_socket {
+       uint32_t        sndbuf;
+       __be32          bound_addr;
+       __be32          connected_addr;
+       __be16          bound_port;
+       __be16          connected_port;
+       uint32_t        rcvbuf;
+       uint64_t        inum;
+} __attribute__((packed));
+
+struct rds_info_tcp_socket {
+       __be32          local_addr;
+       __be16          local_port;
+       __be32          peer_addr;
+       __be16          peer_port;
+       uint64_t       hdr_rem;
+       uint64_t       data_rem;
+       uint32_t       last_sent_nxt;
+       uint32_t       last_expected_una;
+       uint32_t       last_seen_una;
+} __attribute__((packed));
+
+#define RDS_IB_GID_LEN 16
+struct rds_info_rdma_connection {
+       __be32          src_addr;
+       __be32          dst_addr;
+       uint8_t         src_gid[RDS_IB_GID_LEN];
+       uint8_t         dst_gid[RDS_IB_GID_LEN];
+
+       uint32_t        max_send_wr;
+       uint32_t        max_recv_wr;
+       uint32_t        max_send_sge;
+       uint32_t        rdma_mr_max;
+       uint32_t        rdma_mr_size;
+};
+
+/*
+ * Congestion monitoring.
+ * Congestion control in RDS happens at the host connection
+ * level by exchanging a bitmap marking congested ports.
+ * By default, a process sleeping in poll() is always woken
+ * up when the congestion map is updated.
+ * With explicit monitoring, an application can have more
+ * fine-grained control.
+ * The application installs a 64bit mask value in the socket,
+ * where each bit corresponds to a group of ports.
+ * When a congestion update arrives, RDS checks the set of
+ * ports that are now uncongested against the list bit mask
+ * installed in the socket, and if they overlap, we queue a
+ * cong_notification on the socket.
+ *
+ * To install the congestion monitor bitmask, use RDS_CONG_MONITOR
+ * with the 64bit mask.
+ * Congestion updates are received via RDS_CMSG_CONG_UPDATE
+ * control messages.
+ *
+ * The correspondence between bits and ports is
+ *     1 << (portnum % 64)
+ */
+#define RDS_CONG_MONITOR_SIZE  64
+#define RDS_CONG_MONITOR_BIT(port)  (((unsigned int) port) % RDS_CONG_MONITOR_SIZE)
+#define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port))
+
+/*
+ * RDMA related types
+ */
+
+/*
+ * This encapsulates a remote memory location.
+ * In the current implementation, it contains the R_Key
+ * of the remote memory region, and the offset into it
+ * (so that the application does not have to worry about
+ * alignment).
+ */
+typedef uint64_t       rds_rdma_cookie_t;
+
+struct rds_iovec {
+       uint64_t        addr;
+       uint64_t        bytes;
+};
+
+struct rds_get_mr_args {
+       struct rds_iovec vec;
+       uint64_t        cookie_addr;
+       uint64_t        flags;
+};
+
+struct rds_get_mr_for_dest_args {
+       struct sockaddr_storage dest_addr;
+       struct rds_iovec        vec;
+       uint64_t                cookie_addr;
+       uint64_t                flags;
+};
+
+struct rds_free_mr_args {
+       rds_rdma_cookie_t cookie;
+       uint64_t        flags;
+};
+
+struct rds_rdma_args {
+       rds_rdma_cookie_t cookie;
+       struct rds_iovec remote_vec;
+       uint64_t        local_vec_addr;
+       uint64_t        nr_local;
+       uint64_t        flags;
+       uint64_t        user_token;
+};
+
+struct rds_atomic_args {
+       rds_rdma_cookie_t cookie;
+       uint64_t        local_addr;
+       uint64_t        remote_addr;
+       union {
+               struct {
+                       uint64_t        compare;
+                       uint64_t        swap;
+               } cswp;
+               struct {
+                       uint64_t        add;
+               } fadd;
+               struct {
+                       uint64_t        compare;
+                       uint64_t        swap;
+                       uint64_t        compare_mask;
+                       uint64_t        swap_mask;
+               } m_cswp;
+               struct {
+                       uint64_t        add;
+                       uint64_t        nocarry_mask;
+               } m_fadd;
+       };
+       uint64_t        flags;
+       uint64_t        user_token;
+};
+
+struct rds_rdma_notify {
+       uint64_t        user_token;
+       int32_t         status;
+};
+
+#define RDS_RDMA_SUCCESS       0
+#define RDS_RDMA_REMOTE_ERROR  1
+#define RDS_RDMA_CANCELED      2
+#define RDS_RDMA_DROPPED       3
+#define RDS_RDMA_OTHER_ERROR   4
+
+/*
+ * Common set of flags for all RDMA related structs
+ */
+#define RDS_RDMA_READWRITE     0x0001
+#define RDS_RDMA_FENCE         0x0002  /* use FENCE for immediate send */
+#define RDS_RDMA_INVALIDATE    0x0004  /* invalidate R_Key after freeing MR */
+#define RDS_RDMA_USE_ONCE      0x0008  /* free MR after use */
+#define RDS_RDMA_DONTWAIT      0x0010  /* Don't wait in SET_BARRIER */
+#define RDS_RDMA_NOTIFY_ME     0x0020  /* Notify when operation completes */
+#define RDS_RDMA_SILENT                0x0040  /* Do not interrupt remote */
+
+#endif /* IB_RDS_H */
diff --git a/lib/libdss-include/linux/reboot.h b/lib/libdss-include/linux/reboot.h
new file mode 100644 (file)
index 0000000..aa33674
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_REBOOT_H
+#define _LINUX_REBOOT_H
+
+/*
+ * Magic values required to use _reboot() system call.
+ */
+
+#define        LINUX_REBOOT_MAGIC1     0xfee1dead
+#define        LINUX_REBOOT_MAGIC2     672274793
+#define        LINUX_REBOOT_MAGIC2A    85072278
+#define        LINUX_REBOOT_MAGIC2B    369367448
+#define        LINUX_REBOOT_MAGIC2C    537993216
+
+
+/*
+ * Commands accepted by the _reboot() system call.
+ *
+ * RESTART     Restart system using default command and mode.
+ * HALT        Stop OS and give system control to ROM monitor, if any.
+ * CAD_ON      Ctrl-Alt-Del sequence causes RESTART command.
+ * CAD_OFF     Ctrl-Alt-Del sequence sends SIGINT to init task.
+ * POWER_OFF   Stop OS and remove all power from system, if possible.
+ * RESTART2    Restart system using given command string.
+ * SW_SUSPEND  Suspend system using software suspend if compiled in.
+ * KEXEC       Restart system using a previously loaded Linux kernel
+ */
+
+#define        LINUX_REBOOT_CMD_RESTART        0x01234567
+#define        LINUX_REBOOT_CMD_HALT           0xCDEF0123
+#define        LINUX_REBOOT_CMD_CAD_ON         0x89ABCDEF
+#define        LINUX_REBOOT_CMD_CAD_OFF        0x00000000
+#define        LINUX_REBOOT_CMD_POWER_OFF      0x4321FEDC
+#define        LINUX_REBOOT_CMD_RESTART2       0xA1B2C3D4
+#define        LINUX_REBOOT_CMD_SW_SUSPEND     0xD000FCE2
+#define        LINUX_REBOOT_CMD_KEXEC          0x45584543
+
+
+
+#endif /* _LINUX_REBOOT_H */
diff --git a/lib/libdss-include/linux/reiserfs_fs.h b/lib/libdss-include/linux/reiserfs_fs.h
new file mode 100644 (file)
index 0000000..ea3700c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details
+ */
+#ifndef _LINUX_REISER_FS_H
+#define _LINUX_REISER_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/*
+ *  include/linux/reiser_fs.h
+ *
+ *  Reiser File System constants and structures
+ *
+ */
+
+/* ioctl's command */
+#define REISERFS_IOC_UNPACK            _IOW(0xCD,1,long)
+/* define following flags to be the same as in ext2, so that chattr(1),
+   lsattr(1) will work with us. */
+#define REISERFS_IOC_GETFLAGS          FS_IOC_GETFLAGS
+#define REISERFS_IOC_SETFLAGS          FS_IOC_SETFLAGS
+#define REISERFS_IOC_GETVERSION                FS_IOC_GETVERSION
+#define REISERFS_IOC_SETVERSION                FS_IOC_SETVERSION
+
+#endif                         /* _LINUX_REISER_FS_H */
diff --git a/lib/libdss-include/linux/reiserfs_xattr.h b/lib/libdss-include/linux/reiserfs_xattr.h
new file mode 100644 (file)
index 0000000..38fdd64
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+  File: linux/reiserfs_xattr.h
+*/
+
+#ifndef _LINUX_REISERFS_XATTR_H
+#define _LINUX_REISERFS_XATTR_H
+
+#include <linux/types.h>
+
+/* Magic value in header */
+#define REISERFS_XATTR_MAGIC 0x52465841        /* "RFXA" */
+
+struct reiserfs_xattr_header {
+       __le32 h_magic;         /* magic number for identification */
+       __le32 h_hash;          /* hash of the value */
+};
+
+struct reiserfs_security_handle {
+       const char *name;
+       void *value;
+       size_t length;
+};
+
+#endif  /*  _LINUX_REISERFS_XATTR_H  */
diff --git a/lib/libdss-include/linux/resource.h b/lib/libdss-include/linux/resource.h
new file mode 100644 (file)
index 0000000..5e036db
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef _LINUX_RESOURCE_H
+#define _LINUX_RESOURCE_H
+
+#include <linux/time.h>
+#include <linux/types.h>
+
+/*
+ * Resource control/accounting header file for linux
+ */
+
+/*
+ * Definition of struct rusage taken from BSD 4.3 Reno
+ * 
+ * We don't support all of these yet, but we might as well have them....
+ * Otherwise, each time we add new items, programs which depend on this
+ * structure will lose.  This reduces the chances of that happening.
+ */
+#define        RUSAGE_SELF     0
+#define        RUSAGE_CHILDREN (-1)
+#define RUSAGE_BOTH    (-2)            /* sys_wait4() uses this */
+#define        RUSAGE_THREAD   1               /* only the calling thread */
+
+struct rusage {
+       struct timeval ru_utime;        /* user time used */
+       struct timeval ru_stime;        /* system time used */
+       __kernel_long_t ru_maxrss;      /* maximum resident set size */
+       __kernel_long_t ru_ixrss;       /* integral shared memory size */
+       __kernel_long_t ru_idrss;       /* integral unshared data size */
+       __kernel_long_t ru_isrss;       /* integral unshared stack size */
+       __kernel_long_t ru_minflt;      /* page reclaims */
+       __kernel_long_t ru_majflt;      /* page faults */
+       __kernel_long_t ru_nswap;       /* swaps */
+       __kernel_long_t ru_inblock;     /* block input operations */
+       __kernel_long_t ru_oublock;     /* block output operations */
+       __kernel_long_t ru_msgsnd;      /* messages sent */
+       __kernel_long_t ru_msgrcv;      /* messages received */
+       __kernel_long_t ru_nsignals;    /* signals received */
+       __kernel_long_t ru_nvcsw;       /* voluntary context switches */
+       __kernel_long_t ru_nivcsw;      /* involuntary " */
+};
+
+struct rlimit {
+       __kernel_ulong_t        rlim_cur;
+       __kernel_ulong_t        rlim_max;
+};
+
+#define RLIM64_INFINITY                (~0ULL)
+
+struct rlimit64 {
+       __u64 rlim_cur;
+       __u64 rlim_max;
+};
+
+#define        PRIO_MIN        (-20)
+#define        PRIO_MAX        20
+
+#define        PRIO_PROCESS    0
+#define        PRIO_PGRP       1
+#define        PRIO_USER       2
+
+/*
+ * Limit the stack by to some sane default: root can always
+ * increase this limit if needed..  8MB seems reasonable.
+ */
+#define _STK_LIM       (8*1024*1024)
+
+/*
+ * GPG2 wants 64kB of mlocked memory, to make sure pass phrases
+ * and other sensitive information are never written to disk.
+ */
+#define MLOCK_LIMIT    ((PAGE_SIZE > 64*1024) ? PAGE_SIZE : 64*1024)
+
+/*
+ * Due to binary compatibility, the actual resource numbers
+ * may be different for different linux versions..
+ */
+#include <asm/resource.h>
+
+
+#endif /* _LINUX_RESOURCE_H */
diff --git a/lib/libdss-include/linux/rfkill.h b/lib/libdss-include/linux/rfkill.h
new file mode 100644 (file)
index 0000000..557cde2
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2006 - 2007 Ivo van Doorn
+ * Copyright (C) 2007 Dmitry Torokhov
+ * Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef __RFKILL_H
+#define __RFKILL_H
+
+
+#include <linux/types.h>
+
+/* define userspace visible states */
+#define RFKILL_STATE_SOFT_BLOCKED      0
+#define RFKILL_STATE_UNBLOCKED         1
+#define RFKILL_STATE_HARD_BLOCKED      2
+
+/**
+ * enum rfkill_type - type of rfkill switch.
+ *
+ * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type)
+ * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device.
+ * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device.
+ * @RFKILL_TYPE_UWB: switch is on a ultra wideband device.
+ * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device.
+ * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device.
+ * @RFKILL_TYPE_GPS: switch is on a GPS device.
+ * @RFKILL_TYPE_FM: switch is on a FM radio device.
+ * @RFKILL_TYPE_NFC: switch is on an NFC device.
+ * @NUM_RFKILL_TYPES: number of defined rfkill types
+ */
+enum rfkill_type {
+       RFKILL_TYPE_ALL = 0,
+       RFKILL_TYPE_WLAN,
+       RFKILL_TYPE_BLUETOOTH,
+       RFKILL_TYPE_UWB,
+       RFKILL_TYPE_WIMAX,
+       RFKILL_TYPE_WWAN,
+       RFKILL_TYPE_GPS,
+       RFKILL_TYPE_FM,
+       RFKILL_TYPE_NFC,
+       NUM_RFKILL_TYPES,
+};
+
+/**
+ * enum rfkill_operation - operation types
+ * @RFKILL_OP_ADD: a device was added
+ * @RFKILL_OP_DEL: a device was removed
+ * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device
+ * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all)
+ */
+enum rfkill_operation {
+       RFKILL_OP_ADD = 0,
+       RFKILL_OP_DEL,
+       RFKILL_OP_CHANGE,
+       RFKILL_OP_CHANGE_ALL,
+};
+
+/**
+ * struct rfkill_event - events for userspace on /dev/rfkill
+ * @idx: index of dev rfkill
+ * @type: type of the rfkill struct
+ * @op: operation code
+ * @hard: hard state (0/1)
+ * @soft: soft state (0/1)
+ *
+ * Structure used for userspace communication on /dev/rfkill,
+ * used for events from the kernel and control to the kernel.
+ */
+struct rfkill_event {
+       __u32 idx;
+       __u8  type;
+       __u8  op;
+       __u8  soft, hard;
+} __attribute__((packed));
+
+/*
+ * We are planning to be backward and forward compatible with changes
+ * to the event struct, by adding new, optional, members at the end.
+ * When reading an event (whether the kernel from userspace or vice
+ * versa) we need to accept anything that's at least as large as the
+ * version 1 event size, but might be able to accept other sizes in
+ * the future.
+ *
+ * One exception is the kernel -- we already have two event sizes in
+ * that we've made the 'hard' member optional since our only option
+ * is to ignore it anyway.
+ */
+#define RFKILL_EVENT_SIZE_V1   8
+
+/* ioctl for turning off rfkill-input (if present) */
+#define RFKILL_IOC_MAGIC       'R'
+#define RFKILL_IOC_NOINPUT     1
+#define RFKILL_IOCTL_NOINPUT   _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT)
+
+/* and that's all userspace gets */
+
+#endif /* __RFKILL_H */
diff --git a/lib/libdss-include/linux/romfs_fs.h b/lib/libdss-include/linux/romfs_fs.h
new file mode 100644 (file)
index 0000000..5f57f93
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef __LINUX_ROMFS_FS_H
+#define __LINUX_ROMFS_FS_H
+
+#include <linux/types.h>
+#include <linux/fs.h>
+
+/* The basic structures of the romfs filesystem */
+
+#define ROMBSIZE BLOCK_SIZE
+#define ROMBSBITS BLOCK_SIZE_BITS
+#define ROMBMASK (ROMBSIZE-1)
+#define ROMFS_MAGIC 0x7275
+
+#define ROMFS_MAXFN 128
+
+#define __mkw(h,l) (((h)&0x00ff)<< 8|((l)&0x00ff))
+#define __mkl(h,l) (((h)&0xffff)<<16|((l)&0xffff))
+#define __mk4(a,b,c,d) cpu_to_be32(__mkl(__mkw(a,b),__mkw(c,d)))
+#define ROMSB_WORD0 __mk4('-','r','o','m')
+#define ROMSB_WORD1 __mk4('1','f','s','-')
+
+/* On-disk "super block" */
+
+struct romfs_super_block {
+       __be32 word0;
+       __be32 word1;
+       __be32 size;
+       __be32 checksum;
+       char name[0];           /* volume name */
+};
+
+/* On disk inode */
+
+struct romfs_inode {
+       __be32 next;            /* low 4 bits see ROMFH_ */
+       __be32 spec;
+       __be32 size;
+       __be32 checksum;
+       char name[0];
+};
+
+#define ROMFH_TYPE 7
+#define ROMFH_HRD 0
+#define ROMFH_DIR 1
+#define ROMFH_REG 2
+#define ROMFH_SYM 3
+#define ROMFH_BLK 4
+#define ROMFH_CHR 5
+#define ROMFH_SCK 6
+#define ROMFH_FIF 7
+#define ROMFH_EXEC 8
+
+/* Alignment */
+
+#define ROMFH_SIZE 16
+#define ROMFH_PAD (ROMFH_SIZE-1)
+#define ROMFH_MASK (~ROMFH_PAD)
+
+#endif
diff --git a/lib/libdss-include/linux/rose.h b/lib/libdss-include/linux/rose.h
new file mode 100644 (file)
index 0000000..1fcfe95
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * These are the public elements of the Linux kernel Rose implementation.
+ * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
+ * definition of the ax25_address structure.
+ */
+
+#ifndef        ROSE_KERNEL_H
+#define        ROSE_KERNEL_H
+
+#include <linux/socket.h>
+#include <linux/ax25.h>
+
+#define ROSE_MTU       251
+
+#define ROSE_MAX_DIGIS 6
+
+#define        ROSE_DEFER      1
+#define ROSE_T1                2
+#define        ROSE_T2         3
+#define        ROSE_T3         4
+#define        ROSE_IDLE       5
+#define        ROSE_QBITINCL   6
+#define        ROSE_HOLDBACK   7
+
+#define        SIOCRSGCAUSE            (SIOCPROTOPRIVATE+0)
+#define        SIOCRSSCAUSE            (SIOCPROTOPRIVATE+1)
+#define        SIOCRSL2CALL            (SIOCPROTOPRIVATE+2)
+#define        SIOCRSSL2CALL           (SIOCPROTOPRIVATE+2)
+#define        SIOCRSACCEPT            (SIOCPROTOPRIVATE+3)
+#define        SIOCRSCLRRT             (SIOCPROTOPRIVATE+4)
+#define        SIOCRSGL2CALL           (SIOCPROTOPRIVATE+5)
+#define        SIOCRSGFACILITIES       (SIOCPROTOPRIVATE+6)
+
+#define        ROSE_DTE_ORIGINATED     0x00
+#define        ROSE_NUMBER_BUSY        0x01
+#define        ROSE_INVALID_FACILITY   0x03
+#define        ROSE_NETWORK_CONGESTION 0x05
+#define        ROSE_OUT_OF_ORDER       0x09
+#define        ROSE_ACCESS_BARRED      0x0B
+#define        ROSE_NOT_OBTAINABLE     0x0D
+#define        ROSE_REMOTE_PROCEDURE   0x11
+#define        ROSE_LOCAL_PROCEDURE    0x13
+#define        ROSE_SHIP_ABSENT        0x39
+
+typedef struct {
+       char            rose_addr[5];
+} rose_address;
+
+struct sockaddr_rose {
+       __kernel_sa_family_t srose_family;
+       rose_address    srose_addr;
+       ax25_address    srose_call;
+       int             srose_ndigis;
+       ax25_address    srose_digi;
+};
+
+struct full_sockaddr_rose {
+       __kernel_sa_family_t srose_family;
+       rose_address    srose_addr;
+       ax25_address    srose_call;
+       unsigned int    srose_ndigis;
+       ax25_address    srose_digis[ROSE_MAX_DIGIS];
+};
+
+struct rose_route_struct {
+       rose_address    address;
+       unsigned short  mask;
+       ax25_address    neighbour;
+       char            device[16];
+       unsigned char   ndigis;
+       ax25_address    digipeaters[AX25_MAX_DIGIS];
+};
+
+struct rose_cause_struct {
+       unsigned char   cause;
+       unsigned char   diagnostic;
+};
+
+struct rose_facilities_struct {
+       rose_address    source_addr,   dest_addr;
+       ax25_address    source_call,   dest_call;
+       unsigned char   source_ndigis, dest_ndigis;
+       ax25_address    source_digis[ROSE_MAX_DIGIS];
+       ax25_address    dest_digis[ROSE_MAX_DIGIS];
+       unsigned int    rand;
+       rose_address    fail_addr;
+       ax25_address    fail_call;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/route.h b/lib/libdss-include/linux/route.h
new file mode 100644 (file)
index 0000000..11abf54
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the IP router interface.
+ *
+ * Version:    @(#)route.h     1.0.3   05/27/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
+ *             for the purposes of compatibility only.
+ *
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ * Changes:
+ *              Mike McLagan    :       Routing by source
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_ROUTE_H
+#define _LINUX_ROUTE_H
+
+#include <linux/if.h>
+
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry {
+       unsigned long   rt_pad1;
+       struct sockaddr rt_dst;         /* target address               */
+       struct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */
+       struct sockaddr rt_genmask;     /* target network mask (IP)     */
+       unsigned short  rt_flags;
+       short           rt_pad2;
+       unsigned long   rt_pad3;
+       void            *rt_pad4;
+       short           rt_metric;      /* +1 for binary compatibility! */
+       char *rt_dev;   /* forcing the device at add    */
+       unsigned long   rt_mtu;         /* per route MTU/Window         */
+#define rt_mss rt_mtu                  /* Compatibility :-(            */
+       unsigned long   rt_window;      /* Window clamping              */
+       unsigned short  rt_irtt;        /* Initial RTT                  */
+};
+
+
+#define        RTF_UP          0x0001          /* route usable                 */
+#define        RTF_GATEWAY     0x0002          /* destination is a gateway     */
+#define        RTF_HOST        0x0004          /* host entry (net otherwise)   */
+#define RTF_REINSTATE  0x0008          /* reinstate route after tmout  */
+#define        RTF_DYNAMIC     0x0010          /* created dyn. (by redirect)   */
+#define        RTF_MODIFIED    0x0020          /* modified dyn. (by redirect)  */
+#define RTF_MTU                0x0040          /* specific MTU for this route  */
+#define RTF_MSS                RTF_MTU         /* Compatibility :-(            */
+#define RTF_WINDOW     0x0080          /* per route window clamping    */
+#define RTF_IRTT       0x0100          /* Initial round trip time      */
+#define RTF_REJECT     0x0200          /* Reject route                 */
+
+/*
+ *     <linux/ipv6_route.h> uses RTF values >= 64k
+ */
+
+
+
+#endif /* _LINUX_ROUTE_H */
+
diff --git a/lib/libdss-include/linux/rtc.h b/lib/libdss-include/linux/rtc.h
new file mode 100644 (file)
index 0000000..cebd172
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Generic RTC interface.
+ * This version contains the part of the user interface to the Real Time Clock
+ * service. It is used with both the legacy mc146818 and also  EFI
+ * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out
+ * from <linux/mc146818rtc.h> to this file for 2.4 kernels.
+ *
+ * Copyright (C) 1999 Hewlett-Packard Co.
+ * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com>
+ */
+#ifndef _LINUX_RTC_H_
+#define _LINUX_RTC_H_
+
+/*
+ * The struct used to pass data via the following ioctl. Similar to the
+ * struct tm in <time.h>, but it needs to be here so that the kernel
+ * source is self contained, allowing cross-compiles, etc. etc.
+ */
+
+struct rtc_time {
+       int tm_sec;
+       int tm_min;
+       int tm_hour;
+       int tm_mday;
+       int tm_mon;
+       int tm_year;
+       int tm_wday;
+       int tm_yday;
+       int tm_isdst;
+};
+
+/*
+ * This data structure is inspired by the EFI (v0.92) wakeup
+ * alarm API.
+ */
+struct rtc_wkalrm {
+       unsigned char enabled;  /* 0 = alarm disabled, 1 = alarm enabled */
+       unsigned char pending;  /* 0 = alarm not pending, 1 = alarm pending */
+       struct rtc_time time;   /* time the alarm is set to */
+};
+
+/*
+ * Data structure to control PLL correction some better RTC feature
+ * pll_value is used to get or set current value of correction,
+ * the rest of the struct is used to query HW capabilities.
+ * This is modeled after the RTC used in Q40/Q60 computers but
+ * should be sufficiently flexible for other devices
+ *
+ * +ve pll_value means clock will run faster by
+ *   pll_value*pll_posmult/pll_clock
+ * -ve pll_value means clock will run slower by
+ *   pll_value*pll_negmult/pll_clock
+ */
+
+struct rtc_pll_info {
+       int pll_ctrl;       /* placeholder for fancier control */
+       int pll_value;      /* get/set correction value */
+       int pll_max;        /* max +ve (faster) adjustment value */
+       int pll_min;        /* max -ve (slower) adjustment value */
+       int pll_posmult;    /* factor for +ve correction */
+       int pll_negmult;    /* factor for -ve correction */
+       long pll_clock;     /* base PLL frequency */
+};
+
+/*
+ * ioctl calls that are permitted to the /dev/rtc interface, if
+ * any of the RTC drivers are enabled.
+ */
+
+#define RTC_AIE_ON     _IO('p', 0x01)  /* Alarm int. enable on         */
+#define RTC_AIE_OFF    _IO('p', 0x02)  /* ... off                      */
+#define RTC_UIE_ON     _IO('p', 0x03)  /* Update int. enable on        */
+#define RTC_UIE_OFF    _IO('p', 0x04)  /* ... off                      */
+#define RTC_PIE_ON     _IO('p', 0x05)  /* Periodic int. enable on      */
+#define RTC_PIE_OFF    _IO('p', 0x06)  /* ... off                      */
+#define RTC_WIE_ON     _IO('p', 0x0f)  /* Watchdog int. enable on      */
+#define RTC_WIE_OFF    _IO('p', 0x10)  /* ... off                      */
+
+#define RTC_ALM_SET    _IOW('p', 0x07, struct rtc_time) /* Set alarm time  */
+#define RTC_ALM_READ   _IOR('p', 0x08, struct rtc_time) /* Read alarm time */
+#define RTC_RD_TIME    _IOR('p', 0x09, struct rtc_time) /* Read RTC time   */
+#define RTC_SET_TIME   _IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */
+#define RTC_IRQP_READ  _IOR('p', 0x0b, unsigned long)   /* Read IRQ rate   */
+#define RTC_IRQP_SET   _IOW('p', 0x0c, unsigned long)   /* Set IRQ rate    */
+#define RTC_EPOCH_READ _IOR('p', 0x0d, unsigned long)   /* Read epoch      */
+#define RTC_EPOCH_SET  _IOW('p', 0x0e, unsigned long)   /* Set epoch       */
+
+#define RTC_WKALM_SET  _IOW('p', 0x0f, struct rtc_wkalrm)/* Set wakeup alarm*/
+#define RTC_WKALM_RD   _IOR('p', 0x10, struct rtc_wkalrm)/* Get wakeup alarm*/
+
+#define RTC_PLL_GET    _IOR('p', 0x11, struct rtc_pll_info)  /* Get PLL correction */
+#define RTC_PLL_SET    _IOW('p', 0x12, struct rtc_pll_info)  /* Set PLL correction */
+
+#define RTC_VL_READ    _IOR('p', 0x13, int)    /* Voltage low detector */
+#define RTC_VL_CLR     _IO('p', 0x14)          /* Clear voltage low information */
+
+/* interrupt flags */
+#define RTC_IRQF 0x80  /* Any of the following is active */
+#define RTC_PF 0x40    /* Periodic interrupt */
+#define RTC_AF 0x20    /* Alarm interrupt */
+#define RTC_UF 0x10    /* Update interrupt for 1Hz RTC */
+
+
+#define RTC_MAX_FREQ   8192
+
+
+#endif /* _LINUX_RTC_H_ */
diff --git a/lib/libdss-include/linux/rtnetlink.h b/lib/libdss-include/linux/rtnetlink.h
new file mode 100644 (file)
index 0000000..18c543a
--- /dev/null
@@ -0,0 +1,674 @@
+#ifndef __LINUX_RTNETLINK_H
+#define __LINUX_RTNETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+#include <linux/if_link.h>
+#include <linux/if_addr.h>
+#include <linux/neighbour.h>
+
+/* rtnetlink families. Values up to 127 are reserved for real address
+ * families, values above 128 may be used arbitrarily.
+ */
+#define RTNL_FAMILY_IPMR               128
+#define RTNL_FAMILY_IP6MR              129
+#define RTNL_FAMILY_MAX                        129
+
+/****
+ *             Routing/neighbour discovery messages.
+ ****/
+
+/* Types of messages */
+
+enum {
+       RTM_BASE        = 16,
+#define RTM_BASE       RTM_BASE
+
+       RTM_NEWLINK     = 16,
+#define RTM_NEWLINK    RTM_NEWLINK
+       RTM_DELLINK,
+#define RTM_DELLINK    RTM_DELLINK
+       RTM_GETLINK,
+#define RTM_GETLINK    RTM_GETLINK
+       RTM_SETLINK,
+#define RTM_SETLINK    RTM_SETLINK
+
+       RTM_NEWADDR     = 20,
+#define RTM_NEWADDR    RTM_NEWADDR
+       RTM_DELADDR,
+#define RTM_DELADDR    RTM_DELADDR
+       RTM_GETADDR,
+#define RTM_GETADDR    RTM_GETADDR
+
+       RTM_NEWROUTE    = 24,
+#define RTM_NEWROUTE   RTM_NEWROUTE
+       RTM_DELROUTE,
+#define RTM_DELROUTE   RTM_DELROUTE
+       RTM_GETROUTE,
+#define RTM_GETROUTE   RTM_GETROUTE
+
+       RTM_NEWNEIGH    = 28,
+#define RTM_NEWNEIGH   RTM_NEWNEIGH
+       RTM_DELNEIGH,
+#define RTM_DELNEIGH   RTM_DELNEIGH
+       RTM_GETNEIGH,
+#define RTM_GETNEIGH   RTM_GETNEIGH
+
+       RTM_NEWRULE     = 32,
+#define RTM_NEWRULE    RTM_NEWRULE
+       RTM_DELRULE,
+#define RTM_DELRULE    RTM_DELRULE
+       RTM_GETRULE,
+#define RTM_GETRULE    RTM_GETRULE
+
+       RTM_NEWQDISC    = 36,
+#define RTM_NEWQDISC   RTM_NEWQDISC
+       RTM_DELQDISC,
+#define RTM_DELQDISC   RTM_DELQDISC
+       RTM_GETQDISC,
+#define RTM_GETQDISC   RTM_GETQDISC
+
+       RTM_NEWTCLASS   = 40,
+#define RTM_NEWTCLASS  RTM_NEWTCLASS
+       RTM_DELTCLASS,
+#define RTM_DELTCLASS  RTM_DELTCLASS
+       RTM_GETTCLASS,
+#define RTM_GETTCLASS  RTM_GETTCLASS
+
+       RTM_NEWTFILTER  = 44,
+#define RTM_NEWTFILTER RTM_NEWTFILTER
+       RTM_DELTFILTER,
+#define RTM_DELTFILTER RTM_DELTFILTER
+       RTM_GETTFILTER,
+#define RTM_GETTFILTER RTM_GETTFILTER
+
+       RTM_NEWACTION   = 48,
+#define RTM_NEWACTION   RTM_NEWACTION
+       RTM_DELACTION,
+#define RTM_DELACTION   RTM_DELACTION
+       RTM_GETACTION,
+#define RTM_GETACTION   RTM_GETACTION
+
+       RTM_NEWPREFIX   = 52,
+#define RTM_NEWPREFIX  RTM_NEWPREFIX
+
+       RTM_GETMULTICAST = 58,
+#define RTM_GETMULTICAST RTM_GETMULTICAST
+
+       RTM_GETANYCAST  = 62,
+#define RTM_GETANYCAST RTM_GETANYCAST
+
+       RTM_NEWNEIGHTBL = 64,
+#define RTM_NEWNEIGHTBL        RTM_NEWNEIGHTBL
+       RTM_GETNEIGHTBL = 66,
+#define RTM_GETNEIGHTBL        RTM_GETNEIGHTBL
+       RTM_SETNEIGHTBL,
+#define RTM_SETNEIGHTBL        RTM_SETNEIGHTBL
+
+       RTM_NEWNDUSEROPT = 68,
+#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
+
+       RTM_NEWADDRLABEL = 72,
+#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
+       RTM_DELADDRLABEL,
+#define RTM_DELADDRLABEL RTM_DELADDRLABEL
+       RTM_GETADDRLABEL,
+#define RTM_GETADDRLABEL RTM_GETADDRLABEL
+
+       RTM_GETDCB = 78,
+#define RTM_GETDCB RTM_GETDCB
+       RTM_SETDCB,
+#define RTM_SETDCB RTM_SETDCB
+
+       RTM_NEWNETCONF = 80,
+#define RTM_NEWNETCONF RTM_NEWNETCONF
+       RTM_GETNETCONF = 82,
+#define RTM_GETNETCONF RTM_GETNETCONF
+
+       RTM_NEWMDB = 84,
+#define RTM_NEWMDB RTM_NEWMDB
+       RTM_DELMDB = 85,
+#define RTM_DELMDB RTM_DELMDB
+       RTM_GETMDB = 86,
+#define RTM_GETMDB RTM_GETMDB
+
+       RTM_NEWNSID = 88,
+#define RTM_NEWNSID RTM_NEWNSID
+       RTM_DELNSID = 89,
+#define RTM_DELNSID RTM_DELNSID
+       RTM_GETNSID = 90,
+#define RTM_GETNSID RTM_GETNSID
+
+       __RTM_MAX,
+#define RTM_MAX                (((__RTM_MAX + 3) & ~3) - 1)
+};
+
+#define RTM_NR_MSGTYPES        (RTM_MAX + 1 - RTM_BASE)
+#define RTM_NR_FAMILIES        (RTM_NR_MSGTYPES >> 2)
+#define RTM_FAM(cmd)   (((cmd) - RTM_BASE) >> 2)
+
+/* 
+   Generic structure for encapsulation of optional route information.
+   It is reminiscent of sockaddr, but with sa_family replaced
+   with attribute type.
+ */
+
+struct rtattr {
+       unsigned short  rta_len;
+       unsigned short  rta_type;
+};
+
+/* Macros to handle rtattributes */
+
+#define RTA_ALIGNTO    4U
+#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
+#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
+                        (rta)->rta_len >= sizeof(struct rtattr) && \
+                        (rta)->rta_len <= (len))
+#define RTA_NEXT(rta,attrlen)  ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
+                                (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
+#define RTA_LENGTH(len)        (RTA_ALIGN(sizeof(struct rtattr)) + (len))
+#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
+#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
+#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
+
+
+
+
+/******************************************************************************
+ *             Definitions used in routing table administration.
+ ****/
+
+struct rtmsg {
+       unsigned char           rtm_family;
+       unsigned char           rtm_dst_len;
+       unsigned char           rtm_src_len;
+       unsigned char           rtm_tos;
+
+       unsigned char           rtm_table;      /* Routing table id */
+       unsigned char           rtm_protocol;   /* Routing protocol; see below  */
+       unsigned char           rtm_scope;      /* See below */ 
+       unsigned char           rtm_type;       /* See below    */
+
+       unsigned                rtm_flags;
+};
+
+/* rtm_type */
+
+enum {
+       RTN_UNSPEC,
+       RTN_UNICAST,            /* Gateway or direct route      */
+       RTN_LOCAL,              /* Accept locally               */
+       RTN_BROADCAST,          /* Accept locally as broadcast,
+                                  send as broadcast */
+       RTN_ANYCAST,            /* Accept locally as broadcast,
+                                  but send as unicast */
+       RTN_MULTICAST,          /* Multicast route              */
+       RTN_BLACKHOLE,          /* Drop                         */
+       RTN_UNREACHABLE,        /* Destination is unreachable   */
+       RTN_PROHIBIT,           /* Administratively prohibited  */
+       RTN_THROW,              /* Not in this table            */
+       RTN_NAT,                /* Translate this address       */
+       RTN_XRESOLVE,           /* Use external resolver        */
+       __RTN_MAX
+};
+
+#define RTN_MAX (__RTN_MAX - 1)
+
+
+/* rtm_protocol */
+
+#define RTPROT_UNSPEC  0
+#define RTPROT_REDIRECT        1       /* Route installed by ICMP redirects;
+                                  not used by current IPv4 */
+#define RTPROT_KERNEL  2       /* Route installed by kernel            */
+#define RTPROT_BOOT    3       /* Route installed during boot          */
+#define RTPROT_STATIC  4       /* Route installed by administrator     */
+
+/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
+   they are just passed from user and back as is.
+   It will be used by hypothetical multiple routing daemons.
+   Note that protocol values should be standardized in order to
+   avoid conflicts.
+ */
+
+#define RTPROT_GATED   8       /* Apparently, GateD */
+#define RTPROT_RA      9       /* RDISC/ND router advertisements */
+#define RTPROT_MRT     10      /* Merit MRT */
+#define RTPROT_ZEBRA   11      /* Zebra */
+#define RTPROT_BIRD    12      /* BIRD */
+#define RTPROT_DNROUTED        13      /* DECnet routing daemon */
+#define RTPROT_XORP    14      /* XORP */
+#define RTPROT_NTK     15      /* Netsukuku */
+#define RTPROT_DHCP    16      /* DHCP client */
+#define RTPROT_MROUTED 17      /* Multicast daemon */
+#define RTPROT_BABEL   42      /* Babel daemon */
+
+/* rtm_scope
+
+   Really it is not scope, but sort of distance to the destination.
+   NOWHERE are reserved for not existing destinations, HOST is our
+   local addresses, LINK are destinations, located on directly attached
+   link and UNIVERSE is everywhere in the Universe.
+
+   Intermediate values are also possible f.e. interior routes
+   could be assigned a value between UNIVERSE and LINK.
+*/
+
+enum rt_scope_t {
+       RT_SCOPE_UNIVERSE=0,
+/* User defined values  */
+       RT_SCOPE_SITE=200,
+       RT_SCOPE_LINK=253,
+       RT_SCOPE_HOST=254,
+       RT_SCOPE_NOWHERE=255
+};
+
+/* rtm_flags */
+
+#define RTM_F_NOTIFY           0x100   /* Notify user of route change  */
+#define RTM_F_CLONED           0x200   /* This route is cloned         */
+#define RTM_F_EQUALIZE         0x400   /* Multipath equalizer: NI      */
+#define RTM_F_PREFIX           0x800   /* Prefix addresses             */
+#define RTM_F_LOOKUP_TABLE     0x1000  /* set rtm_table to FIB lookup result */
+
+/* Reserved table identifiers */
+
+enum rt_class_t {
+       RT_TABLE_UNSPEC=0,
+/* User defined values */
+       RT_TABLE_COMPAT=252,
+       RT_TABLE_DEFAULT=253,
+       RT_TABLE_MAIN=254,
+       RT_TABLE_LOCAL=255,
+       RT_TABLE_MAX=0xFFFFFFFF
+};
+
+
+/* Routing message attributes */
+
+enum rtattr_type_t {
+       RTA_UNSPEC,
+       RTA_DST,
+       RTA_SRC,
+       RTA_IIF,
+       RTA_OIF,
+       RTA_GATEWAY,
+       RTA_PRIORITY,
+       RTA_PREFSRC,
+       RTA_METRICS,
+       RTA_MULTIPATH,
+       RTA_PROTOINFO, /* no longer used */
+       RTA_FLOW,
+       RTA_CACHEINFO,
+       RTA_SESSION, /* no longer used */
+       RTA_MP_ALGO, /* no longer used */
+       RTA_TABLE,
+       RTA_MARK,
+       RTA_MFC_STATS,
+       RTA_VIA,
+       RTA_NEWDST,
+       RTA_PREF,
+       RTA_ENCAP_TYPE,
+       RTA_ENCAP,
+       __RTA_MAX
+};
+
+#define RTA_MAX (__RTA_MAX - 1)
+
+#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
+#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
+
+/* RTM_MULTIPATH --- array of struct rtnexthop.
+ *
+ * "struct rtnexthop" describes all necessary nexthop information,
+ * i.e. parameters of path to a destination via this nexthop.
+ *
+ * At the moment it is impossible to set different prefsrc, mtu, window
+ * and rtt for different paths from multipath.
+ */
+
+struct rtnexthop {
+       unsigned short          rtnh_len;
+       unsigned char           rtnh_flags;
+       unsigned char           rtnh_hops;
+       int                     rtnh_ifindex;
+};
+
+/* rtnh_flags */
+
+#define RTNH_F_DEAD            1       /* Nexthop is dead (used by multipath)  */
+#define RTNH_F_PERVASIVE       2       /* Do recursive gateway lookup  */
+#define RTNH_F_ONLINK          4       /* Gateway is forced on link    */
+#define RTNH_F_OFFLOAD         8       /* offloaded route */
+#define RTNH_F_LINKDOWN                16      /* carrier-down on nexthop */
+
+#define RTNH_COMPARE_MASK      (RTNH_F_DEAD | RTNH_F_LINKDOWN)
+
+/* Macros to handle hexthops */
+
+#define RTNH_ALIGNTO   4
+#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
+#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
+                          ((int)(rtnh)->rtnh_len) <= (len))
+#define RTNH_NEXT(rtnh)        ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
+#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
+#define RTNH_SPACE(len)        RTNH_ALIGN(RTNH_LENGTH(len))
+#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
+
+/* RTA_VIA */
+struct rtvia {
+       __kernel_sa_family_t    rtvia_family;
+       __u8                    rtvia_addr[0];
+};
+
+/* RTM_CACHEINFO */
+
+struct rta_cacheinfo {
+       __u32   rta_clntref;
+       __u32   rta_lastuse;
+       __s32   rta_expires;
+       __u32   rta_error;
+       __u32   rta_used;
+
+#define RTNETLINK_HAVE_PEERINFO 1
+       __u32   rta_id;
+       __u32   rta_ts;
+       __u32   rta_tsage;
+};
+
+/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
+
+enum {
+       RTAX_UNSPEC,
+#define RTAX_UNSPEC RTAX_UNSPEC
+       RTAX_LOCK,
+#define RTAX_LOCK RTAX_LOCK
+       RTAX_MTU,
+#define RTAX_MTU RTAX_MTU
+       RTAX_WINDOW,
+#define RTAX_WINDOW RTAX_WINDOW
+       RTAX_RTT,
+#define RTAX_RTT RTAX_RTT
+       RTAX_RTTVAR,
+#define RTAX_RTTVAR RTAX_RTTVAR
+       RTAX_SSTHRESH,
+#define RTAX_SSTHRESH RTAX_SSTHRESH
+       RTAX_CWND,
+#define RTAX_CWND RTAX_CWND
+       RTAX_ADVMSS,
+#define RTAX_ADVMSS RTAX_ADVMSS
+       RTAX_REORDERING,
+#define RTAX_REORDERING RTAX_REORDERING
+       RTAX_HOPLIMIT,
+#define RTAX_HOPLIMIT RTAX_HOPLIMIT
+       RTAX_INITCWND,
+#define RTAX_INITCWND RTAX_INITCWND
+       RTAX_FEATURES,
+#define RTAX_FEATURES RTAX_FEATURES
+       RTAX_RTO_MIN,
+#define RTAX_RTO_MIN RTAX_RTO_MIN
+       RTAX_INITRWND,
+#define RTAX_INITRWND RTAX_INITRWND
+       RTAX_QUICKACK,
+#define RTAX_QUICKACK RTAX_QUICKACK
+       RTAX_CC_ALGO,
+#define RTAX_CC_ALGO RTAX_CC_ALGO
+       __RTAX_MAX
+};
+
+#define RTAX_MAX (__RTAX_MAX - 1)
+
+#define RTAX_FEATURE_ECN       (1 << 0)
+#define RTAX_FEATURE_SACK      (1 << 1)
+#define RTAX_FEATURE_TIMESTAMP (1 << 2)
+#define RTAX_FEATURE_ALLFRAG   (1 << 3)
+
+#define RTAX_FEATURE_MASK      (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
+                                RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
+
+struct rta_session {
+       __u8    proto;
+       __u8    pad1;
+       __u16   pad2;
+
+       union {
+               struct {
+                       __u16   sport;
+                       __u16   dport;
+               } ports;
+
+               struct {
+                       __u8    type;
+                       __u8    code;
+                       __u16   ident;
+               } icmpt;
+
+               __u32           spi;
+       } u;
+};
+
+struct rta_mfc_stats {
+       __u64   mfcs_packets;
+       __u64   mfcs_bytes;
+       __u64   mfcs_wrong_if;
+};
+
+/****
+ *             General form of address family dependent message.
+ ****/
+
+struct rtgenmsg {
+       unsigned char           rtgen_family;
+};
+
+/*****************************************************************
+ *             Link layer specific messages.
+ ****/
+
+/* struct ifinfomsg
+ * passes link level specific information, not dependent
+ * on network protocol.
+ */
+
+struct ifinfomsg {
+       unsigned char   ifi_family;
+       unsigned char   __ifi_pad;
+       unsigned short  ifi_type;               /* ARPHRD_* */
+       int             ifi_index;              /* Link index   */
+       unsigned        ifi_flags;              /* IFF_* flags  */
+       unsigned        ifi_change;             /* IFF_* change mask */
+};
+
+/********************************************************************
+ *             prefix information 
+ ****/
+
+struct prefixmsg {
+       unsigned char   prefix_family;
+       unsigned char   prefix_pad1;
+       unsigned short  prefix_pad2;
+       int             prefix_ifindex;
+       unsigned char   prefix_type;
+       unsigned char   prefix_len;
+       unsigned char   prefix_flags;
+       unsigned char   prefix_pad3;
+};
+
+enum 
+{
+       PREFIX_UNSPEC,
+       PREFIX_ADDRESS,
+       PREFIX_CACHEINFO,
+       __PREFIX_MAX
+};
+
+#define PREFIX_MAX     (__PREFIX_MAX - 1)
+
+struct prefix_cacheinfo {
+       __u32   preferred_time;
+       __u32   valid_time;
+};
+
+
+/*****************************************************************
+ *             Traffic control messages.
+ ****/
+
+struct tcmsg {
+       unsigned char   tcm_family;
+       unsigned char   tcm__pad1;
+       unsigned short  tcm__pad2;
+       int             tcm_ifindex;
+       __u32           tcm_handle;
+       __u32           tcm_parent;
+       __u32           tcm_info;
+};
+
+enum {
+       TCA_UNSPEC,
+       TCA_KIND,
+       TCA_OPTIONS,
+       TCA_STATS,
+       TCA_XSTATS,
+       TCA_RATE,
+       TCA_FCNT,
+       TCA_STATS2,
+       TCA_STAB,
+       __TCA_MAX
+};
+
+#define TCA_MAX (__TCA_MAX - 1)
+
+#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
+#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
+
+/********************************************************************
+ *             Neighbor Discovery userland options
+ ****/
+
+struct nduseroptmsg {
+       unsigned char   nduseropt_family;
+       unsigned char   nduseropt_pad1;
+       unsigned short  nduseropt_opts_len;     /* Total length of options */
+       int             nduseropt_ifindex;
+       __u8            nduseropt_icmp_type;
+       __u8            nduseropt_icmp_code;
+       unsigned short  nduseropt_pad2;
+       unsigned int    nduseropt_pad3;
+       /* Followed by one or more ND options */
+};
+
+enum {
+       NDUSEROPT_UNSPEC,
+       NDUSEROPT_SRCADDR,
+       __NDUSEROPT_MAX
+};
+
+#define NDUSEROPT_MAX  (__NDUSEROPT_MAX - 1)
+
+/* RTnetlink multicast groups - backwards compatibility for userspace */
+#define RTMGRP_LINK            1
+#define RTMGRP_NOTIFY          2
+#define RTMGRP_NEIGH           4
+#define RTMGRP_TC              8
+
+#define RTMGRP_IPV4_IFADDR     0x10
+#define RTMGRP_IPV4_MROUTE     0x20
+#define RTMGRP_IPV4_ROUTE      0x40
+#define RTMGRP_IPV4_RULE       0x80
+
+#define RTMGRP_IPV6_IFADDR     0x100
+#define RTMGRP_IPV6_MROUTE     0x200
+#define RTMGRP_IPV6_ROUTE      0x400
+#define RTMGRP_IPV6_IFINFO     0x800
+
+#define RTMGRP_DECnet_IFADDR    0x1000
+#define RTMGRP_DECnet_ROUTE     0x4000
+
+#define RTMGRP_IPV6_PREFIX     0x20000
+
+/* RTnetlink multicast groups */
+enum rtnetlink_groups {
+       RTNLGRP_NONE,
+#define RTNLGRP_NONE           RTNLGRP_NONE
+       RTNLGRP_LINK,
+#define RTNLGRP_LINK           RTNLGRP_LINK
+       RTNLGRP_NOTIFY,
+#define RTNLGRP_NOTIFY         RTNLGRP_NOTIFY
+       RTNLGRP_NEIGH,
+#define RTNLGRP_NEIGH          RTNLGRP_NEIGH
+       RTNLGRP_TC,
+#define RTNLGRP_TC             RTNLGRP_TC
+       RTNLGRP_IPV4_IFADDR,
+#define RTNLGRP_IPV4_IFADDR    RTNLGRP_IPV4_IFADDR
+       RTNLGRP_IPV4_MROUTE,
+#define        RTNLGRP_IPV4_MROUTE     RTNLGRP_IPV4_MROUTE
+       RTNLGRP_IPV4_ROUTE,
+#define RTNLGRP_IPV4_ROUTE     RTNLGRP_IPV4_ROUTE
+       RTNLGRP_IPV4_RULE,
+#define RTNLGRP_IPV4_RULE      RTNLGRP_IPV4_RULE
+       RTNLGRP_IPV6_IFADDR,
+#define RTNLGRP_IPV6_IFADDR    RTNLGRP_IPV6_IFADDR
+       RTNLGRP_IPV6_MROUTE,
+#define RTNLGRP_IPV6_MROUTE    RTNLGRP_IPV6_MROUTE
+       RTNLGRP_IPV6_ROUTE,
+#define RTNLGRP_IPV6_ROUTE     RTNLGRP_IPV6_ROUTE
+       RTNLGRP_IPV6_IFINFO,
+#define RTNLGRP_IPV6_IFINFO    RTNLGRP_IPV6_IFINFO
+       RTNLGRP_DECnet_IFADDR,
+#define RTNLGRP_DECnet_IFADDR  RTNLGRP_DECnet_IFADDR
+       RTNLGRP_NOP2,
+       RTNLGRP_DECnet_ROUTE,
+#define RTNLGRP_DECnet_ROUTE   RTNLGRP_DECnet_ROUTE
+       RTNLGRP_DECnet_RULE,
+#define RTNLGRP_DECnet_RULE    RTNLGRP_DECnet_RULE
+       RTNLGRP_NOP4,
+       RTNLGRP_IPV6_PREFIX,
+#define RTNLGRP_IPV6_PREFIX    RTNLGRP_IPV6_PREFIX
+       RTNLGRP_IPV6_RULE,
+#define RTNLGRP_IPV6_RULE      RTNLGRP_IPV6_RULE
+       RTNLGRP_ND_USEROPT,
+#define RTNLGRP_ND_USEROPT     RTNLGRP_ND_USEROPT
+       RTNLGRP_PHONET_IFADDR,
+#define RTNLGRP_PHONET_IFADDR  RTNLGRP_PHONET_IFADDR
+       RTNLGRP_PHONET_ROUTE,
+#define RTNLGRP_PHONET_ROUTE   RTNLGRP_PHONET_ROUTE
+       RTNLGRP_DCB,
+#define RTNLGRP_DCB            RTNLGRP_DCB
+       RTNLGRP_IPV4_NETCONF,
+#define RTNLGRP_IPV4_NETCONF   RTNLGRP_IPV4_NETCONF
+       RTNLGRP_IPV6_NETCONF,
+#define RTNLGRP_IPV6_NETCONF   RTNLGRP_IPV6_NETCONF
+       RTNLGRP_MDB,
+#define RTNLGRP_MDB            RTNLGRP_MDB
+       RTNLGRP_MPLS_ROUTE,
+#define RTNLGRP_MPLS_ROUTE     RTNLGRP_MPLS_ROUTE
+       RTNLGRP_NSID,
+#define RTNLGRP_NSID           RTNLGRP_NSID
+       __RTNLGRP_MAX
+};
+#define RTNLGRP_MAX    (__RTNLGRP_MAX - 1)
+
+/* TC action piece */
+struct tcamsg {
+       unsigned char   tca_family;
+       unsigned char   tca__pad1;
+       unsigned short  tca__pad2;
+};
+#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
+#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
+#define TCA_ACT_TAB 1 /* attr type must be >=1 */      
+#define TCAA_MAX 1
+
+/* New extended info filters for IFLA_EXT_MASK */
+#define RTEXT_FILTER_VF                (1 << 0)
+#define RTEXT_FILTER_BRVLAN    (1 << 1)
+#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2)
+#define        RTEXT_FILTER_SKIP_STATS (1 << 3)
+
+/* End of information exported to user level */
+
+
+
+#endif /* __LINUX_RTNETLINK_H */
diff --git a/lib/libdss-include/linux/scc.h b/lib/libdss-include/linux/scc.h
new file mode 100644 (file)
index 0000000..73c0cb2
--- /dev/null
@@ -0,0 +1,172 @@
+/* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */
+
+#ifndef _SCC_H
+#define _SCC_H
+
+
+/* selection of hardware types */
+
+#define PA0HZP         0x00    /* hardware type for PA0HZP SCC card and compatible */
+#define EAGLE          0x01    /* hardware type for EAGLE card */
+#define PC100          0x02    /* hardware type for PC100 card */
+#define PRIMUS         0x04    /* hardware type for PRIMUS-PC (DG9BL) card */
+#define DRSI           0x08    /* hardware type for DRSI PC*Packet card */
+#define BAYCOM         0x10    /* hardware type for BayCom (U)SCC */
+
+/* DEV ioctl() commands */
+
+enum SCC_ioctl_cmds {
+       SIOCSCCRESERVED = SIOCDEVPRIVATE,
+       SIOCSCCCFG,
+       SIOCSCCINI,
+       SIOCSCCCHANINI,
+       SIOCSCCSMEM,
+       SIOCSCCGKISS,
+       SIOCSCCSKISS,
+       SIOCSCCGSTAT,
+       SIOCSCCCAL
+};
+
+/* Device parameter control (from WAMPES) */
+
+enum L1_params {
+       PARAM_DATA,
+       PARAM_TXDELAY,
+       PARAM_PERSIST,
+       PARAM_SLOTTIME,
+       PARAM_TXTAIL,
+       PARAM_FULLDUP,
+       PARAM_SOFTDCD,          /* was: PARAM_HW */
+       PARAM_MUTE,             /* ??? */
+       PARAM_DTR,
+       PARAM_RTS,
+       PARAM_SPEED,
+       PARAM_ENDDELAY,         /* ??? */
+       PARAM_GROUP,
+       PARAM_IDLE,
+       PARAM_MIN,
+       PARAM_MAXKEY,
+       PARAM_WAIT,
+       PARAM_MAXDEFER,
+       PARAM_TX,
+       PARAM_HWEVENT = 31,
+       PARAM_RETURN = 255      /* reset kiss mode */
+};
+
+/* fulldup parameter */
+
+enum FULLDUP_modes {
+       KISS_DUPLEX_HALF,       /* normal CSMA operation */
+       KISS_DUPLEX_FULL,       /* fullduplex, key down trx after transmission */
+       KISS_DUPLEX_LINK,       /* fullduplex, key down trx after 'idletime' sec */
+       KISS_DUPLEX_OPTIMA      /* fullduplex, let the protocol layer control the hw */
+};
+
+/* misc. parameters */
+
+#define TIMER_OFF      65535U  /* to switch off timers */
+#define NO_SUCH_PARAM  65534U  /* param not implemented */
+
+/* HWEVENT parameter */
+
+enum HWEVENT_opts {
+       HWEV_DCD_ON,
+       HWEV_DCD_OFF,
+       HWEV_ALL_SENT
+};
+
+/* channel grouping */
+
+#define RXGROUP                0100    /* if set, only tx when all channels clear */
+#define TXGROUP                0200    /* if set, don't transmit simultaneously */
+
+/* Tx/Rx clock sources */
+
+enum CLOCK_sources {
+       CLK_DPLL,       /* normal halfduplex operation */
+       CLK_EXTERNAL,   /* external clocking (G3RUH/DF9IC modems) */
+       CLK_DIVIDER,    /* Rx = DPLL, Tx = divider (fullduplex with */
+                       /* modems without clock regeneration */
+       CLK_BRG         /* experimental fullduplex mode with DPLL/BRG for */
+                       /* MODEMs without clock recovery */
+};
+
+/* Tx state */
+
+enum TX_state {
+       TXS_IDLE,       /* Transmitter off, no data pending */
+       TXS_BUSY,       /* waiting for permission to send / tailtime */
+       TXS_ACTIVE,     /* Transmitter on, sending data */
+       TXS_NEWFRAME,   /* reset CRC and send (next) frame */
+       TXS_IDLE2,      /* Transmitter on, no data pending */
+       TXS_WAIT,       /* Waiting for Mintime to expire */
+       TXS_TIMEOUT     /* We had a transmission timeout */
+};
+
+typedef unsigned long io_port; /* type definition for an 'io port address' */
+
+/* SCC statistical information */
+
+struct scc_stat {
+        long rxints;            /* Receiver interrupts */
+        long txints;            /* Transmitter interrupts */
+        long exints;            /* External/status interrupts */
+        long spints;            /* Special receiver interrupts */
+
+        long txframes;          /* Packets sent */
+        long rxframes;          /* Number of Frames Actually Received */
+        long rxerrs;            /* CRC Errors */
+        long txerrs;           /* KISS errors */
+        
+       unsigned int nospace;   /* "Out of buffers" */
+       unsigned int rx_over;   /* Receiver Overruns */
+       unsigned int tx_under;  /* Transmitter Underruns */
+
+       unsigned int tx_state;  /* Transmitter state */
+       int tx_queued;          /* tx frames enqueued */
+
+       unsigned int maxqueue;  /* allocated tx_buffers */
+       unsigned int bufsize;   /* used buffersize */
+};
+
+struct scc_modem {
+       long speed;             /* Line speed, bps */
+       char clocksrc;          /* 0 = DPLL, 1 = external, 2 = divider */
+       char nrz;               /* NRZ instead of NRZI */       
+};
+
+struct scc_kiss_cmd {
+       int      command;       /* one of the KISS-Commands defined above */
+       unsigned param;         /* KISS-Param */
+};
+
+struct scc_hw_config {
+       io_port data_a;         /* data port channel A */
+       io_port ctrl_a;         /* control port channel A */
+       io_port data_b;         /* data port channel B */
+       io_port ctrl_b;         /* control port channel B */
+       io_port vector_latch;   /* INTACK-Latch (#) */
+       io_port special;        /* special function port */
+
+       int     irq;            /* irq */
+       long    clock;          /* clock */
+       char    option;         /* command for function port */
+
+       char brand;             /* hardware type */
+       char escc;              /* use ext. features of a 8580/85180/85280 */
+};
+
+/* (#) only one INTACK latch allowed. */
+
+
+struct scc_mem_config {
+       unsigned int dummy;
+       unsigned int bufsize;
+};
+
+struct scc_calibrate {
+       unsigned int time;
+       unsigned char pattern;
+};
+
+#endif /* _SCC_H */
diff --git a/lib/libdss-include/linux/sched.h b/lib/libdss-include/linux/sched.h
new file mode 100644 (file)
index 0000000..2d1e6e0
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _LINUX_SCHED_H
+#define _LINUX_SCHED_H
+
+/*
+ * cloning flags:
+ */
+#define CSIGNAL                0x000000ff      /* signal mask to be sent at exit */
+#define CLONE_VM       0x00000100      /* set if VM shared between processes */
+#define CLONE_FS       0x00000200      /* set if fs info shared between processes */
+#define CLONE_FILES    0x00000400      /* set if open files shared between processes */
+#define CLONE_SIGHAND  0x00000800      /* set if signal handlers and blocked signals shared */
+#define CLONE_PTRACE   0x00002000      /* set if we want to let tracing continue on the child too */
+#define CLONE_VFORK    0x00004000      /* set if the parent wants the child to wake it up on mm_release */
+#define CLONE_PARENT   0x00008000      /* set if we want to have the same parent as the cloner */
+#define CLONE_THREAD   0x00010000      /* Same thread group? */
+#define CLONE_NEWNS    0x00020000      /* New mount namespace group */
+#define CLONE_SYSVSEM  0x00040000      /* share system V SEM_UNDO semantics */
+#define CLONE_SETTLS   0x00080000      /* create a new TLS for the child */
+#define CLONE_PARENT_SETTID    0x00100000      /* set the TID in the parent */
+#define CLONE_CHILD_CLEARTID   0x00200000      /* clear the TID in the child */
+#define CLONE_DETACHED         0x00400000      /* Unused, ignored */
+#define CLONE_UNTRACED         0x00800000      /* set if the tracing process can't force CLONE_PTRACE on this clone */
+#define CLONE_CHILD_SETTID     0x01000000      /* set the TID in the child */
+#define CLONE_NEWCGROUP                0x02000000      /* New cgroup namespace */
+#define CLONE_NEWUTS           0x04000000      /* New utsname namespace */
+#define CLONE_NEWIPC           0x08000000      /* New ipc namespace */
+#define CLONE_NEWUSER          0x10000000      /* New user namespace */
+#define CLONE_NEWPID           0x20000000      /* New pid namespace */
+#define CLONE_NEWNET           0x40000000      /* New network namespace */
+#define CLONE_IO               0x80000000      /* Clone io context */
+
+/*
+ * Scheduling policies
+ */
+#define SCHED_NORMAL           0
+#define SCHED_FIFO             1
+#define SCHED_RR               2
+#define SCHED_BATCH            3
+/* SCHED_ISO: reserved but not implemented yet */
+#define SCHED_IDLE             5
+#define SCHED_DEADLINE         6
+
+/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
+#define SCHED_RESET_ON_FORK     0x40000000
+
+/*
+ * For the sched_{set,get}attr() calls
+ */
+#define SCHED_FLAG_RESET_ON_FORK       0x01
+
+#endif /* _LINUX_SCHED_H */
diff --git a/lib/libdss-include/linux/scif_ioctl.h b/lib/libdss-include/linux/scif_ioctl.h
new file mode 100644 (file)
index 0000000..d904891
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Intel MIC Platform Software Stack (MPSS)
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2014 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2014 Intel Corporation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Intel SCIF driver.
+ *
+ */
+/*
+ * -----------------------------------------
+ * SCIF IOCTL interface information
+ * -----------------------------------------
+ */
+#ifndef SCIF_IOCTL_H
+#define SCIF_IOCTL_H
+
+#include <linux/types.h>
+
+/**
+ * struct scif_port_id - SCIF port information
+ * @node:      node on which port resides
+ * @port:      local port number
+ */
+struct scif_port_id {
+       __u16 node;
+       __u16 port;
+};
+
+/**
+ * struct scifioctl_connect - used for SCIF_CONNECT IOCTL
+ * @self:      used to read back the assigned port_id
+ * @peer:      destination node and port to connect to
+ */
+struct scifioctl_connect {
+       struct scif_port_id     self;
+       struct scif_port_id     peer;
+};
+
+/**
+ * struct scifioctl_accept - used for SCIF_ACCEPTREQ IOCTL
+ * @flags:     flags
+ * @peer:      global id of peer endpoint
+ * @endpt:     new connected endpoint descriptor
+ */
+struct scifioctl_accept {
+       __s32                   flags;
+       struct scif_port_id     peer;
+       __u64                   endpt;
+};
+
+/**
+ * struct scifioctl_msg - used for SCIF_SEND/SCIF_RECV IOCTL
+ * @msg:       message buffer address
+ * @len:       message length
+ * @flags:     flags
+ * @out_len:   number of bytes sent/received
+ */
+struct scifioctl_msg {
+       __u64   msg;
+       __s32   len;
+       __s32   flags;
+       __s32   out_len;
+};
+
+/**
+ * struct scifioctl_reg - used for SCIF_REG IOCTL
+ * @addr:      starting virtual address
+ * @len:       length of range
+ * @offset:    offset of window
+ * @prot:      read/write protection
+ * @flags:     flags
+ * @out_offset:        offset returned
+ */
+struct scifioctl_reg {
+       __u64           addr;
+       __u64           len;
+       __s64           offset;
+       __s32           prot;
+       __s32           flags;
+       __s64           out_offset;
+};
+
+/**
+ * struct scifioctl_unreg - used for SCIF_UNREG IOCTL
+ * @offset:    start of range to unregister
+ * @len:       length of range to unregister
+ */
+struct scifioctl_unreg {
+       __s64           offset;
+       __u64           len;
+};
+
+/**
+ * struct scifioctl_copy - used for SCIF DMA copy IOCTLs
+ *
+ * @loffset:   offset in local registered address space to/from
+ *             which to copy
+ * @len:       length of range to copy
+ * @roffset:   offset in remote registered address space to/from
+ *             which to copy
+ * @addr:      user virtual address to/from which to copy
+ * @flags:     flags
+ *
+ * This structure is used for SCIF_READFROM, SCIF_WRITETO, SCIF_VREADFROM
+ * and SCIF_VREADFROM IOCTL's.
+ */
+struct scifioctl_copy {
+       __s64           loffset;
+       __u64           len;
+       __s64           roffset;
+       __u64           addr;
+       __s32           flags;
+};
+
+/**
+ * struct scifioctl_fence_mark  - used for SCIF_FENCE_MARK IOCTL
+ * @flags:     flags
+ * @mark:      fence handle which is a pointer to a __s32
+ */
+struct scifioctl_fence_mark {
+       __s32   flags;
+       __u64   mark;
+};
+
+/**
+ * struct scifioctl_fence_signal - used for SCIF_FENCE_SIGNAL IOCTL
+ * @loff:      local offset
+ * @lval:      value to write to loffset
+ * @roff:      remote offset
+ * @rval:      value to write to roffset
+ * @flags:     flags
+ */
+struct scifioctl_fence_signal {
+       __s64           loff;
+       __u64           lval;
+       __s64           roff;
+       __u64           rval;
+       __s32           flags;
+};
+
+/**
+ * struct scifioctl_node_ids - used for SCIF_GET_NODEIDS IOCTL
+ * @nodes:     pointer to an array of node_ids
+ * @self:      ID of the current node
+ * @len:       length of array
+ */
+struct scifioctl_node_ids {
+       __u64   nodes;
+       __u64   self;
+       __s32   len;
+};
+
+#define SCIF_BIND              _IOWR('s', 1, __u64)
+#define SCIF_LISTEN            _IOW('s', 2, __s32)
+#define SCIF_CONNECT           _IOWR('s', 3, struct scifioctl_connect)
+#define SCIF_ACCEPTREQ         _IOWR('s', 4, struct scifioctl_accept)
+#define SCIF_ACCEPTREG         _IOWR('s', 5, __u64)
+#define SCIF_SEND              _IOWR('s', 6, struct scifioctl_msg)
+#define SCIF_RECV              _IOWR('s', 7, struct scifioctl_msg)
+#define SCIF_REG               _IOWR('s', 8, struct scifioctl_reg)
+#define SCIF_UNREG             _IOWR('s', 9, struct scifioctl_unreg)
+#define SCIF_READFROM          _IOWR('s', 10, struct scifioctl_copy)
+#define SCIF_WRITETO           _IOWR('s', 11, struct scifioctl_copy)
+#define SCIF_VREADFROM         _IOWR('s', 12, struct scifioctl_copy)
+#define SCIF_VWRITETO          _IOWR('s', 13, struct scifioctl_copy)
+#define SCIF_GET_NODEIDS       _IOWR('s', 14, struct scifioctl_node_ids)
+#define SCIF_FENCE_MARK                _IOWR('s', 15, struct scifioctl_fence_mark)
+#define SCIF_FENCE_WAIT                _IOWR('s', 16, __s32)
+#define SCIF_FENCE_SIGNAL      _IOWR('s', 17, struct scifioctl_fence_signal)
+
+#endif /* SCIF_IOCTL_H */
diff --git a/lib/libdss-include/linux/screen_info.h b/lib/libdss-include/linux/screen_info.h
new file mode 100644 (file)
index 0000000..5dc1a0a
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _SCREEN_INFO_H
+#define _SCREEN_INFO_H
+
+#include <linux/types.h>
+
+/*
+ * These are set up by the setup-routine at boot-time:
+ */
+
+struct screen_info {
+       __u8  orig_x;           /* 0x00 */
+       __u8  orig_y;           /* 0x01 */
+       __u16 ext_mem_k;        /* 0x02 */
+       __u16 orig_video_page;  /* 0x04 */
+       __u8  orig_video_mode;  /* 0x06 */
+       __u8  orig_video_cols;  /* 0x07 */
+       __u8  flags;            /* 0x08 */
+       __u8  unused2;          /* 0x09 */
+       __u16 orig_video_ega_bx;/* 0x0a */
+       __u16 unused3;          /* 0x0c */
+       __u8  orig_video_lines; /* 0x0e */
+       __u8  orig_video_isVGA; /* 0x0f */
+       __u16 orig_video_points;/* 0x10 */
+
+       /* VESA graphic mode -- linear frame buffer */
+       __u16 lfb_width;        /* 0x12 */
+       __u16 lfb_height;       /* 0x14 */
+       __u16 lfb_depth;        /* 0x16 */
+       __u32 lfb_base;         /* 0x18 */
+       __u32 lfb_size;         /* 0x1c */
+       __u16 cl_magic, cl_offset; /* 0x20 */
+       __u16 lfb_linelength;   /* 0x24 */
+       __u8  red_size;         /* 0x26 */
+       __u8  red_pos;          /* 0x27 */
+       __u8  green_size;       /* 0x28 */
+       __u8  green_pos;        /* 0x29 */
+       __u8  blue_size;        /* 0x2a */
+       __u8  blue_pos;         /* 0x2b */
+       __u8  rsvd_size;        /* 0x2c */
+       __u8  rsvd_pos;         /* 0x2d */
+       __u16 vesapm_seg;       /* 0x2e */
+       __u16 vesapm_off;       /* 0x30 */
+       __u16 pages;            /* 0x32 */
+       __u16 vesa_attributes;  /* 0x34 */
+       __u32 capabilities;     /* 0x36 */
+       __u32 ext_lfb_base;     /* 0x3a */
+       __u8  _reserved[2];     /* 0x3e */
+} __attribute__((packed));
+
+#define VIDEO_TYPE_MDA         0x10    /* Monochrome Text Display      */
+#define VIDEO_TYPE_CGA         0x11    /* CGA Display                  */
+#define VIDEO_TYPE_EGAM                0x20    /* EGA/VGA in Monochrome Mode   */
+#define VIDEO_TYPE_EGAC                0x21    /* EGA in Color Mode            */
+#define VIDEO_TYPE_VGAC                0x22    /* VGA+ in Color Mode           */
+#define VIDEO_TYPE_VLFB                0x23    /* VESA VGA in graphic mode     */
+
+#define VIDEO_TYPE_PICA_S3     0x30    /* ACER PICA-61 local S3 video  */
+#define VIDEO_TYPE_MIPS_G364   0x31    /* MIPS Magnum 4000 G364 video  */
+#define VIDEO_TYPE_SGI          0x33    /* Various SGI graphics hardware */
+
+#define VIDEO_TYPE_TGAC                0x40    /* DEC TGA */
+
+#define VIDEO_TYPE_SUN          0x50    /* Sun frame buffer. */
+#define VIDEO_TYPE_SUNPCI       0x51    /* Sun PCI based frame buffer. */
+
+#define VIDEO_TYPE_PMAC                0x60    /* PowerMacintosh frame buffer. */
+
+#define VIDEO_TYPE_EFI         0x70    /* EFI graphic mode             */
+
+#define VIDEO_FLAGS_NOCURSOR   (1 << 0) /* The video mode has no cursor set */
+
+#define VIDEO_CAPABILITY_SKIP_QUIRKS   (1 << 0)
+#define VIDEO_CAPABILITY_64BIT_BASE    (1 << 1)        /* Frame buffer base is 64-bit */
+
+#endif /* _SCREEN_INFO_H */
diff --git a/lib/libdss-include/linux/sctp.h b/lib/libdss-include/linux/sctp.h
new file mode 100644 (file)
index 0000000..b9bcc0e
--- /dev/null
@@ -0,0 +1,899 @@
+/* SCTP kernel implementation
+ * (C) Copyright IBM Corp. 2001, 2004
+ * Copyright (c) 1999-2000 Cisco, Inc.
+ * Copyright (c) 1999-2001 Motorola, Inc.
+ * Copyright (c) 2002 Intel Corp.
+ *
+ * This file is part of the SCTP kernel implementation
+ *
+ * This header represents the structures and constants needed to support
+ * the SCTP Extension to the Sockets API.
+ *
+ * This SCTP implementation is free software;
+ * you can redistribute it and/or modify it under the terms of
+ * the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This SCTP implementation is distributed in the hope that it
+ * will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ *                 ************************
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU CC; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Please send any bug reports or fixes you make to the
+ * email address(es):
+ *    lksctp developers <linux-sctp@vger.kernel.org>
+ *
+ * Or submit a bug report through the following website:
+ *    http://www.sf.net/projects/lksctp
+ *
+ * Written or modified by:
+ *    La Monte H.P. Yarroll    <piggy@acm.org>
+ *    R. Stewart               <randall@sctp.chicago.il.us>
+ *    K. Morneau               <kmorneau@cisco.com>
+ *    Q. Xie                   <qxie1@email.mot.com>
+ *    Karl Knutson             <karl@athena.chicago.il.us>
+ *    Jon Grimm                <jgrimm@us.ibm.com>
+ *    Daisy Chang              <daisyc@us.ibm.com>
+ *    Ryan Layer               <rmlayer@us.ibm.com>
+ *    Ardelle Fan              <ardelle.fan@intel.com>
+ *    Sridhar Samudrala        <sri@us.ibm.com>
+ *    Inaky Perez-Gonzalez     <inaky.gonzalez@intel.com>
+ *    Vlad Yasevich            <vladislav.yasevich@hp.com>
+ *
+ * Any bugs reported given to us we will try to fix... any fixes shared will
+ * be incorporated into the next SCTP release.
+ */
+
+#ifndef _SCTP_H
+#define _SCTP_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+typedef __s32 sctp_assoc_t;
+
+/* The following symbols come from the Sockets API Extensions for
+ * SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
+ */
+#define SCTP_RTOINFO   0
+#define SCTP_ASSOCINFO  1
+#define SCTP_INITMSG   2
+#define SCTP_NODELAY   3               /* Get/set nodelay option. */
+#define SCTP_AUTOCLOSE 4
+#define SCTP_SET_PEER_PRIMARY_ADDR 5
+#define SCTP_PRIMARY_ADDR      6
+#define SCTP_ADAPTATION_LAYER  7
+#define SCTP_DISABLE_FRAGMENTS 8
+#define SCTP_PEER_ADDR_PARAMS  9
+#define SCTP_DEFAULT_SEND_PARAM        10
+#define SCTP_EVENTS    11
+#define SCTP_I_WANT_MAPPED_V4_ADDR 12  /* Turn on/off mapped v4 addresses  */
+#define SCTP_MAXSEG    13              /* Get/set maximum fragment. */
+#define SCTP_STATUS    14
+#define SCTP_GET_PEER_ADDR_INFO        15
+#define SCTP_DELAYED_ACK_TIME  16
+#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
+#define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
+#define SCTP_CONTEXT   17
+#define SCTP_FRAGMENT_INTERLEAVE       18
+#define SCTP_PARTIAL_DELIVERY_POINT    19 /* Set/Get partial delivery point */
+#define SCTP_MAX_BURST 20              /* Set/Get max burst */
+#define SCTP_AUTH_CHUNK        21      /* Set only: add a chunk type to authenticate */
+#define SCTP_HMAC_IDENT        22
+#define SCTP_AUTH_KEY  23
+#define SCTP_AUTH_ACTIVE_KEY   24
+#define SCTP_AUTH_DELETE_KEY   25
+#define SCTP_PEER_AUTH_CHUNKS  26      /* Read only */
+#define SCTP_LOCAL_AUTH_CHUNKS 27      /* Read only */
+#define SCTP_GET_ASSOC_NUMBER  28      /* Read only */
+#define SCTP_GET_ASSOC_ID_LIST 29      /* Read only */
+#define SCTP_AUTO_ASCONF       30
+#define SCTP_PEER_ADDR_THLDS   31
+#define SCTP_RECVRCVINFO       32
+#define SCTP_RECVNXTINFO       33
+#define SCTP_DEFAULT_SNDINFO   34
+
+/* Internal Socket Options. Some of the sctp library functions are
+ * implemented using these socket options.
+ */
+#define SCTP_SOCKOPT_BINDX_ADD 100     /* BINDX requests for adding addrs */
+#define SCTP_SOCKOPT_BINDX_REM 101     /* BINDX requests for removing addrs. */
+#define SCTP_SOCKOPT_PEELOFF   102     /* peel off association. */
+/* Options 104-106 are deprecated and removed. Do not use this space */
+#define SCTP_SOCKOPT_CONNECTX_OLD      107     /* CONNECTX old requests. */
+#define SCTP_GET_PEER_ADDRS    108             /* Get all peer address. */
+#define SCTP_GET_LOCAL_ADDRS   109             /* Get all local address. */
+#define SCTP_SOCKOPT_CONNECTX  110             /* CONNECTX requests. */
+#define SCTP_SOCKOPT_CONNECTX3 111     /* CONNECTX requests (updated) */
+#define SCTP_GET_ASSOC_STATS   112     /* Read only */
+
+/* These are bit fields for msghdr->msg_flags.  See section 5.1.  */
+/* On user space Linux, these live in <bits/socket.h> as an enum.  */
+enum sctp_msg_flags {
+       MSG_NOTIFICATION = 0x8000,
+#define MSG_NOTIFICATION MSG_NOTIFICATION
+};
+
+/* 5.3.1 SCTP Initiation Structure (SCTP_INIT)
+ *
+ *   This cmsghdr structure provides information for initializing new
+ *   SCTP associations with sendmsg().  The SCTP_INITMSG socket option
+ *   uses this same data structure.  This structure is not used for
+ *   recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   ----------------------
+ *   IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
+ */
+struct sctp_initmsg {
+       __u16 sinit_num_ostreams;
+       __u16 sinit_max_instreams;
+       __u16 sinit_max_attempts;
+       __u16 sinit_max_init_timeo;
+};
+
+/* 5.3.2 SCTP Header Information Structure (SCTP_SNDRCV)
+ *
+ *   This cmsghdr structure specifies SCTP options for sendmsg() and
+ *   describes SCTP header information about a received message through
+ *   recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   ----------------------
+ *   IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
+ */
+struct sctp_sndrcvinfo {
+       __u16 sinfo_stream;
+       __u16 sinfo_ssn;
+       __u16 sinfo_flags;
+       __u32 sinfo_ppid;
+       __u32 sinfo_context;
+       __u32 sinfo_timetolive;
+       __u32 sinfo_tsn;
+       __u32 sinfo_cumtsn;
+       sctp_assoc_t sinfo_assoc_id;
+};
+
+/* 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
+ *
+ *   This cmsghdr structure specifies SCTP options for sendmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_SNDINFO   struct sctp_sndinfo
+ */
+struct sctp_sndinfo {
+       __u16 snd_sid;
+       __u16 snd_flags;
+       __u32 snd_ppid;
+       __u32 snd_context;
+       sctp_assoc_t snd_assoc_id;
+};
+
+/* 5.3.5 SCTP Receive Information Structure (SCTP_RCVINFO)
+ *
+ *   This cmsghdr structure describes SCTP receive information
+ *   about a received message through recvmsg().
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_RCVINFO   struct sctp_rcvinfo
+ */
+struct sctp_rcvinfo {
+       __u16 rcv_sid;
+       __u16 rcv_ssn;
+       __u16 rcv_flags;
+       __u32 rcv_ppid;
+       __u32 rcv_tsn;
+       __u32 rcv_cumtsn;
+       __u32 rcv_context;
+       sctp_assoc_t rcv_assoc_id;
+};
+
+/* 5.3.6 SCTP Next Receive Information Structure (SCTP_NXTINFO)
+ *
+ *   This cmsghdr structure describes SCTP receive information
+ *   of the next message that will be delivered through recvmsg()
+ *   if this information is already available when delivering
+ *   the current message.
+ *
+ *   cmsg_level    cmsg_type      cmsg_data[]
+ *   ------------  ------------   -------------------
+ *   IPPROTO_SCTP  SCTP_NXTINFO   struct sctp_nxtinfo
+ */
+struct sctp_nxtinfo {
+       __u16 nxt_sid;
+       __u16 nxt_flags;
+       __u32 nxt_ppid;
+       __u32 nxt_length;
+       sctp_assoc_t nxt_assoc_id;
+};
+
+/*
+ *  sinfo_flags: 16 bits (unsigned integer)
+ *
+ *   This field may contain any of the following flags and is composed of
+ *   a bitwise OR of these values.
+ */
+enum sctp_sinfo_flags {
+       SCTP_UNORDERED          = (1 << 0), /* Send/receive message unordered. */
+       SCTP_ADDR_OVER          = (1 << 1), /* Override the primary destination. */
+       SCTP_ABORT              = (1 << 2), /* Send an ABORT message to the peer. */
+       SCTP_SACK_IMMEDIATELY   = (1 << 3), /* SACK should be sent without delay. */
+       SCTP_NOTIFICATION       = MSG_NOTIFICATION, /* Next message is not user msg but notification. */
+       SCTP_EOF                = MSG_FIN,  /* Initiate graceful shutdown process. */
+};
+
+typedef union {
+       __u8                    raw;
+       struct sctp_initmsg     init;
+       struct sctp_sndrcvinfo  sndrcv;
+} sctp_cmsg_data_t;
+
+/* These are cmsg_types.  */
+typedef enum sctp_cmsg_type {
+       SCTP_INIT,              /* 5.2.1 SCTP Initiation Structure */
+#define SCTP_INIT      SCTP_INIT
+       SCTP_SNDRCV,            /* 5.2.2 SCTP Header Information Structure */
+#define SCTP_SNDRCV    SCTP_SNDRCV
+       SCTP_SNDINFO,           /* 5.3.4 SCTP Send Information Structure */
+#define SCTP_SNDINFO   SCTP_SNDINFO
+       SCTP_RCVINFO,           /* 5.3.5 SCTP Receive Information Structure */
+#define SCTP_RCVINFO   SCTP_RCVINFO
+       SCTP_NXTINFO,           /* 5.3.6 SCTP Next Receive Information Structure */
+#define SCTP_NXTINFO   SCTP_NXTINFO
+} sctp_cmsg_t;
+
+/*
+ * 5.3.1.1 SCTP_ASSOC_CHANGE
+ *
+ *   Communication notifications inform the ULP that an SCTP association
+ *   has either begun or ended. The identifier for a new association is
+ *   provided by this notificaion. The notification information has the
+ *   following format:
+ *
+ */
+struct sctp_assoc_change {
+       __u16 sac_type;
+       __u16 sac_flags;
+       __u32 sac_length;
+       __u16 sac_state;
+       __u16 sac_error;
+       __u16 sac_outbound_streams;
+       __u16 sac_inbound_streams;
+       sctp_assoc_t sac_assoc_id;
+       __u8 sac_info[0];
+};
+
+/*
+ *   sac_state: 32 bits (signed integer)
+ *
+ *   This field holds one of a number of values that communicate the
+ *   event that happened to the association.  They include:
+ *
+ *   Note:  The following state names deviate from the API draft as
+ *   the names clash too easily with other kernel symbols.
+ */
+enum sctp_sac_state {
+       SCTP_COMM_UP,
+       SCTP_COMM_LOST,
+       SCTP_RESTART,
+       SCTP_SHUTDOWN_COMP,
+       SCTP_CANT_STR_ASSOC,
+};
+
+/*
+ * 5.3.1.2 SCTP_PEER_ADDR_CHANGE
+ *
+ *   When a destination address on a multi-homed peer encounters a change
+ *   an interface details event is sent.  The information has the
+ *   following structure:
+ */
+struct sctp_paddr_change {
+       __u16 spc_type;
+       __u16 spc_flags;
+       __u32 spc_length;
+       struct sockaddr_storage spc_aaddr;
+       int spc_state;
+       int spc_error;
+       sctp_assoc_t spc_assoc_id;
+} __attribute__((packed, aligned(4)));
+
+/*
+ *    spc_state:  32 bits (signed integer)
+ *
+ *   This field holds one of a number of values that communicate the
+ *   event that happened to the address.  They include:
+ */
+enum sctp_spc_state {
+       SCTP_ADDR_AVAILABLE,
+       SCTP_ADDR_UNREACHABLE,
+       SCTP_ADDR_REMOVED,
+       SCTP_ADDR_ADDED,
+       SCTP_ADDR_MADE_PRIM,
+       SCTP_ADDR_CONFIRMED,
+};
+
+
+/*
+ * 5.3.1.3 SCTP_REMOTE_ERROR
+ *
+ *   A remote peer may send an Operational Error message to its peer.
+ *   This message indicates a variety of error conditions on an
+ *   association. The entire error TLV as it appears on the wire is
+ *   included in a SCTP_REMOTE_ERROR event.  Please refer to the SCTP
+ *   specification [SCTP] and any extensions for a list of possible
+ *   error formats. SCTP error TLVs have the format:
+ */
+struct sctp_remote_error {
+       __u16 sre_type;
+       __u16 sre_flags;
+       __u32 sre_length;
+       __u16 sre_error;
+       sctp_assoc_t sre_assoc_id;
+       __u8 sre_data[0];
+};
+
+
+/*
+ * 5.3.1.4 SCTP_SEND_FAILED
+ *
+ *   If SCTP cannot deliver a message it may return the message as a
+ *   notification.
+ */
+struct sctp_send_failed {
+       __u16 ssf_type;
+       __u16 ssf_flags;
+       __u32 ssf_length;
+       __u32 ssf_error;
+       struct sctp_sndrcvinfo ssf_info;
+       sctp_assoc_t ssf_assoc_id;
+       __u8 ssf_data[0];
+};
+
+/*
+ *   ssf_flags: 16 bits (unsigned integer)
+ *
+ *   The flag value will take one of the following values
+ *
+ *   SCTP_DATA_UNSENT  - Indicates that the data was never put on
+ *                       the wire.
+ *
+ *   SCTP_DATA_SENT    - Indicates that the data was put on the wire.
+ *                       Note that this does not necessarily mean that the
+ *                       data was (or was not) successfully delivered.
+ */
+enum sctp_ssf_flags {
+       SCTP_DATA_UNSENT,
+       SCTP_DATA_SENT,
+};
+
+/*
+ * 5.3.1.5 SCTP_SHUTDOWN_EVENT
+ *
+ *   When a peer sends a SHUTDOWN, SCTP delivers this notification to
+ *   inform the application that it should cease sending data.
+ */
+struct sctp_shutdown_event {
+       __u16 sse_type;
+       __u16 sse_flags;
+       __u32 sse_length;
+       sctp_assoc_t sse_assoc_id;
+};
+
+/*
+ * 5.3.1.6 SCTP_ADAPTATION_INDICATION
+ *
+ *   When a peer sends a Adaptation Layer Indication parameter , SCTP
+ *   delivers this notification to inform the application
+ *   that of the peers requested adaptation layer.
+ */
+struct sctp_adaptation_event {
+       __u16 sai_type;
+       __u16 sai_flags;
+       __u32 sai_length;
+       __u32 sai_adaptation_ind;
+       sctp_assoc_t sai_assoc_id;
+};
+
+/*
+ * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT
+ *
+ *   When a receiver is engaged in a partial delivery of a
+ *   message this notification will be used to indicate
+ *   various events.
+ */
+struct sctp_pdapi_event {
+       __u16 pdapi_type;
+       __u16 pdapi_flags;
+       __u32 pdapi_length;
+       __u32 pdapi_indication;
+       sctp_assoc_t pdapi_assoc_id;
+};
+
+enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
+
+/*
+ * 5.3.1.8.  SCTP_AUTHENTICATION_EVENT
+ *
+ *  When a receiver is using authentication this message will provide
+ *  notifications regarding new keys being made active as well as errors.
+ */
+struct sctp_authkey_event {
+       __u16 auth_type;
+       __u16 auth_flags;
+       __u32 auth_length;
+       __u16 auth_keynumber;
+       __u16 auth_altkeynumber;
+       __u32 auth_indication;
+       sctp_assoc_t auth_assoc_id;
+};
+
+enum { SCTP_AUTH_NEWKEY = 0, };
+
+/*
+ * 6.1.9. SCTP_SENDER_DRY_EVENT
+ *
+ * When the SCTP stack has no more user data to send or retransmit, this
+ * notification is given to the user. Also, at the time when a user app
+ * subscribes to this event, if there is no data to be sent or
+ * retransmit, the stack will immediately send up this notification.
+ */
+struct sctp_sender_dry_event {
+       __u16 sender_dry_type;
+       __u16 sender_dry_flags;
+       __u32 sender_dry_length;
+       sctp_assoc_t sender_dry_assoc_id;
+};
+
+/*
+ * Described in Section 7.3
+ *   Ancillary Data and Notification Interest Options
+ */
+struct sctp_event_subscribe {
+       __u8 sctp_data_io_event;
+       __u8 sctp_association_event;
+       __u8 sctp_address_event;
+       __u8 sctp_send_failure_event;
+       __u8 sctp_peer_error_event;
+       __u8 sctp_shutdown_event;
+       __u8 sctp_partial_delivery_event;
+       __u8 sctp_adaptation_layer_event;
+       __u8 sctp_authentication_event;
+       __u8 sctp_sender_dry_event;
+};
+
+/*
+ * 5.3.1 SCTP Notification Structure
+ *
+ *   The notification structure is defined as the union of all
+ *   notification types.
+ *
+ */
+union sctp_notification {
+       struct {
+               __u16 sn_type;             /* Notification type. */
+               __u16 sn_flags;
+               __u32 sn_length;
+       } sn_header;
+       struct sctp_assoc_change sn_assoc_change;
+       struct sctp_paddr_change sn_paddr_change;
+       struct sctp_remote_error sn_remote_error;
+       struct sctp_send_failed sn_send_failed;
+       struct sctp_shutdown_event sn_shutdown_event;
+       struct sctp_adaptation_event sn_adaptation_event;
+       struct sctp_pdapi_event sn_pdapi_event;
+       struct sctp_authkey_event sn_authkey_event;
+       struct sctp_sender_dry_event sn_sender_dry_event;
+};
+
+/* Section 5.3.1
+ * All standard values for sn_type flags are greater than 2^15.
+ * Values from 2^15 and down are reserved.
+ */
+
+enum sctp_sn_type {
+       SCTP_SN_TYPE_BASE     = (1<<15),
+       SCTP_ASSOC_CHANGE,
+#define SCTP_ASSOC_CHANGE              SCTP_ASSOC_CHANGE
+       SCTP_PEER_ADDR_CHANGE,
+#define SCTP_PEER_ADDR_CHANGE          SCTP_PEER_ADDR_CHANGE
+       SCTP_SEND_FAILED,
+#define SCTP_SEND_FAILED               SCTP_SEND_FAILED
+       SCTP_REMOTE_ERROR,
+#define SCTP_REMOTE_ERROR              SCTP_REMOTE_ERROR
+       SCTP_SHUTDOWN_EVENT,
+#define SCTP_SHUTDOWN_EVENT            SCTP_SHUTDOWN_EVENT
+       SCTP_PARTIAL_DELIVERY_EVENT,
+#define SCTP_PARTIAL_DELIVERY_EVENT    SCTP_PARTIAL_DELIVERY_EVENT
+       SCTP_ADAPTATION_INDICATION,
+#define SCTP_ADAPTATION_INDICATION     SCTP_ADAPTATION_INDICATION
+       SCTP_AUTHENTICATION_EVENT,
+#define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_EVENT
+       SCTP_SENDER_DRY_EVENT,
+#define SCTP_SENDER_DRY_EVENT          SCTP_SENDER_DRY_EVENT
+};
+
+/* Notification error codes used to fill up the error fields in some
+ * notifications.
+ * SCTP_PEER_ADDRESS_CHAGE     : spc_error
+ * SCTP_ASSOC_CHANGE           : sac_error
+ * These names should be potentially included in the draft 04 of the SCTP
+ * sockets API specification.
+ */
+typedef enum sctp_sn_error {
+       SCTP_FAILED_THRESHOLD,
+       SCTP_RECEIVED_SACK,
+       SCTP_HEARTBEAT_SUCCESS,
+       SCTP_RESPONSE_TO_USER_REQ,
+       SCTP_INTERNAL_ERROR,
+       SCTP_SHUTDOWN_GUARD_EXPIRES,
+       SCTP_PEER_FAULTY,
+} sctp_sn_error_t;
+
+/*
+ * 7.1.1 Retransmission Timeout Parameters (SCTP_RTOINFO)
+ *
+ *   The protocol parameters used to initialize and bound retransmission
+ *   timeout (RTO) are tunable.  See [SCTP] for more information on how
+ *   these parameters are used in RTO calculation.
+ */
+struct sctp_rtoinfo {
+       sctp_assoc_t    srto_assoc_id;
+       __u32           srto_initial;
+       __u32           srto_max;
+       __u32           srto_min;
+};
+
+/*
+ * 7.1.2 Association Parameters (SCTP_ASSOCINFO)
+ *
+ *   This option is used to both examine and set various association and
+ *   endpoint parameters.
+ */
+struct sctp_assocparams {
+       sctp_assoc_t    sasoc_assoc_id;
+       __u16           sasoc_asocmaxrxt;
+       __u16           sasoc_number_peer_destinations;
+       __u32           sasoc_peer_rwnd;
+       __u32           sasoc_local_rwnd;
+       __u32           sasoc_cookie_life;
+};
+
+/*
+ * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
+ *
+ *  Requests that the peer mark the enclosed address as the association
+ *  primary. The enclosed address must be one of the association's
+ *  locally bound addresses. The following structure is used to make a
+ *   set primary request:
+ */
+struct sctp_setpeerprim {
+       sctp_assoc_t            sspp_assoc_id;
+       struct sockaddr_storage sspp_addr;
+} __attribute__((packed, aligned(4)));
+
+/*
+ * 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
+ *
+ *  Requests that the local SCTP stack use the enclosed peer address as
+ *  the association primary. The enclosed address must be one of the
+ *  association peer's addresses. The following structure is used to
+ *  make a set peer primary request:
+ */
+struct sctp_prim {
+       sctp_assoc_t            ssp_assoc_id;
+       struct sockaddr_storage ssp_addr;
+} __attribute__((packed, aligned(4)));
+
+/* For backward compatibility use, define the old name too */
+#define sctp_setprim   sctp_prim
+
+/*
+ * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
+ *
+ * Requests that the local endpoint set the specified Adaptation Layer
+ * Indication parameter for all future INIT and INIT-ACK exchanges.
+ */
+struct sctp_setadaptation {
+       __u32   ssb_adaptation_ind;
+};
+
+/*
+ * 7.1.13 Peer Address Parameters  (SCTP_PEER_ADDR_PARAMS)
+ *
+ *   Applications can enable or disable heartbeats for any peer address
+ *   of an association, modify an address's heartbeat interval, force a
+ *   heartbeat to be sent immediately, and adjust the address's maximum
+ *   number of retransmissions sent before an address is considered
+ *   unreachable. The following structure is used to access and modify an
+ *   address's parameters:
+ */
+enum  sctp_spp_flags {
+       SPP_HB_ENABLE = 1<<0,           /*Enable heartbeats*/
+       SPP_HB_DISABLE = 1<<1,          /*Disable heartbeats*/
+       SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
+       SPP_HB_DEMAND = 1<<2,           /*Send heartbeat immediately*/
+       SPP_PMTUD_ENABLE = 1<<3,        /*Enable PMTU discovery*/
+       SPP_PMTUD_DISABLE = 1<<4,       /*Disable PMTU discovery*/
+       SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
+       SPP_SACKDELAY_ENABLE = 1<<5,    /*Enable SACK*/
+       SPP_SACKDELAY_DISABLE = 1<<6,   /*Disable SACK*/
+       SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
+       SPP_HB_TIME_IS_ZERO = 1<<7,     /* Set HB delay to 0 */
+};
+
+struct sctp_paddrparams {
+       sctp_assoc_t            spp_assoc_id;
+       struct sockaddr_storage spp_address;
+       __u32                   spp_hbinterval;
+       __u16                   spp_pathmaxrxt;
+       __u32                   spp_pathmtu;
+       __u32                   spp_sackdelay;
+       __u32                   spp_flags;
+} __attribute__((packed, aligned(4)));
+
+/*
+ * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
+ *
+ * This set option adds a chunk type that the user is requesting to be
+ * received only in an authenticated way.  Changes to the list of chunks
+ * will only effect future associations on the socket.
+ */
+struct sctp_authchunk {
+       __u8            sauth_chunk;
+};
+
+/*
+ * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
+ *
+ * This option gets or sets the list of HMAC algorithms that the local
+ * endpoint requires the peer to use.
+ */
+/* This here is only used by user space as is. It might not be a good idea
+ * to export/reveal the whole structure with reserved fields etc.
+ */
+enum {
+       SCTP_AUTH_HMAC_ID_SHA1 = 1,
+       SCTP_AUTH_HMAC_ID_SHA256 = 3,
+};
+
+struct sctp_hmacalgo {
+       __u32           shmac_num_idents;
+       __u16           shmac_idents[];
+};
+
+/* Sadly, user and kernel space have different names for
+ * this structure member, so this is to not break anything.
+ */
+#define shmac_number_of_idents shmac_num_idents
+
+/*
+ * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
+ *
+ * This option will set a shared secret key which is used to build an
+ * association shared key.
+ */
+struct sctp_authkey {
+       sctp_assoc_t    sca_assoc_id;
+       __u16           sca_keynumber;
+       __u16           sca_keylength;
+       __u8            sca_key[];
+};
+
+/*
+ * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
+ *
+ * This option will get or set the active shared key to be used to build
+ * the association shared key.
+ */
+
+struct sctp_authkeyid {
+       sctp_assoc_t    scact_assoc_id;
+       __u16           scact_keynumber;
+};
+
+
+/*
+ * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
+ *
+ * This option will effect the way delayed acks are performed.  This
+ * option allows you to get or set the delayed ack time, in
+ * milliseconds.  It also allows changing the delayed ack frequency.
+ * Changing the frequency to 1 disables the delayed sack algorithm.  If
+ * the assoc_id is 0, then this sets or gets the endpoints default
+ * values.  If the assoc_id field is non-zero, then the set or get
+ * effects the specified association for the one to many model (the
+ * assoc_id field is ignored by the one to one model).  Note that if
+ * sack_delay or sack_freq are 0 when setting this option, then the
+ * current values will remain unchanged.
+ */
+struct sctp_sack_info {
+       sctp_assoc_t    sack_assoc_id;
+       uint32_t        sack_delay;
+       uint32_t        sack_freq;
+};
+
+struct sctp_assoc_value {
+    sctp_assoc_t            assoc_id;
+    uint32_t                assoc_value;
+};
+
+/*
+ * 7.2.2 Peer Address Information
+ *
+ *   Applications can retrieve information about a specific peer address
+ *   of an association, including its reachability state, congestion
+ *   window, and retransmission timer values.  This information is
+ *   read-only. The following structure is used to access this
+ *   information:
+ */
+struct sctp_paddrinfo {
+       sctp_assoc_t            spinfo_assoc_id;
+       struct sockaddr_storage spinfo_address;
+       __s32                   spinfo_state;
+       __u32                   spinfo_cwnd;
+       __u32                   spinfo_srtt;
+       __u32                   spinfo_rto;
+       __u32                   spinfo_mtu;
+} __attribute__((packed, aligned(4)));
+
+/* Peer addresses's state. */
+/* UNKNOWN: Peer address passed by the upper layer in sendmsg or connect[x]
+ * calls.
+ * UNCONFIRMED: Peer address received in INIT/INIT-ACK address parameters.
+ *              Not yet confirmed by a heartbeat and not available for data
+ *             transfers.
+ * ACTIVE : Peer address confirmed, active and available for data transfers.
+ * INACTIVE: Peer address inactive and not available for data transfers.
+ */
+enum sctp_spinfo_state {
+       SCTP_INACTIVE,
+       SCTP_PF,
+       SCTP_ACTIVE,
+       SCTP_UNCONFIRMED,
+       SCTP_UNKNOWN = 0xffff  /* Value used for transport state unknown */
+};
+
+/*
+ * 7.2.1 Association Status (SCTP_STATUS)
+ *
+ *   Applications can retrieve current status information about an
+ *   association, including association state, peer receiver window size,
+ *   number of unacked data chunks, and number of data chunks pending
+ *   receipt.  This information is read-only.  The following structure is
+ *   used to access this information:
+ */
+struct sctp_status {
+       sctp_assoc_t            sstat_assoc_id;
+       __s32                   sstat_state;
+       __u32                   sstat_rwnd;
+       __u16                   sstat_unackdata;
+       __u16                   sstat_penddata;
+       __u16                   sstat_instrms;
+       __u16                   sstat_outstrms;
+       __u32                   sstat_fragmentation_point;
+       struct sctp_paddrinfo   sstat_primary;
+};
+
+/*
+ * 7.2.3.  Get the list of chunks the peer requires to be authenticated
+ *         (SCTP_PEER_AUTH_CHUNKS)
+ *
+ * This option gets a list of chunks for a specified association that
+ * the peer requires to be received authenticated only.
+ */
+struct sctp_authchunks {
+       sctp_assoc_t    gauth_assoc_id;
+       __u32           gauth_number_of_chunks;
+       uint8_t         gauth_chunks[];
+};
+
+/* The broken spelling has been released already in lksctp-tools header,
+ * so don't break anyone, now that it's fixed.
+ */
+#define guth_number_of_chunks  gauth_number_of_chunks
+
+/* Association states.  */
+enum sctp_sstat_state {
+       SCTP_EMPTY                = 0,
+       SCTP_CLOSED               = 1,
+       SCTP_COOKIE_WAIT          = 2,
+       SCTP_COOKIE_ECHOED        = 3,
+       SCTP_ESTABLISHED          = 4,
+       SCTP_SHUTDOWN_PENDING     = 5,
+       SCTP_SHUTDOWN_SENT        = 6,
+       SCTP_SHUTDOWN_RECEIVED    = 7,
+       SCTP_SHUTDOWN_ACK_SENT    = 8,
+};
+
+/*
+ * 8.2.6. Get the Current Identifiers of Associations
+ *        (SCTP_GET_ASSOC_ID_LIST)
+ *
+ * This option gets the current list of SCTP association identifiers of
+ * the SCTP associations handled by a one-to-many style socket.
+ */
+struct sctp_assoc_ids {
+       __u32           gaids_number_of_ids;
+       sctp_assoc_t    gaids_assoc_id[];
+};
+
+/*
+ * 8.3, 8.5 get all peer/local addresses in an association.
+ * This parameter struct is used by SCTP_GET_PEER_ADDRS and
+ * SCTP_GET_LOCAL_ADDRS socket options used internally to implement
+ * sctp_getpaddrs() and sctp_getladdrs() API.
+ */
+struct sctp_getaddrs_old {
+       sctp_assoc_t            assoc_id;
+       int                     addr_num;
+       struct sockaddr         *addrs;
+};
+
+struct sctp_getaddrs {
+       sctp_assoc_t            assoc_id; /*input*/
+       __u32                   addr_num; /*output*/
+       __u8                    addrs[0]; /*output, variable size*/
+};
+
+/* A socket user request obtained via SCTP_GET_ASSOC_STATS that retrieves
+ * association stats. All stats are counts except sas_maxrto and
+ * sas_obs_rto_ipaddr. maxrto is the max observed rto + transport since
+ * the last call. Will return 0 when RTO was not update since last call
+ */
+struct sctp_assoc_stats {
+       sctp_assoc_t    sas_assoc_id;    /* Input */
+                                        /* Transport of observed max RTO */
+       struct sockaddr_storage sas_obs_rto_ipaddr;
+       __u64           sas_maxrto;      /* Maximum Observed RTO for period */
+       __u64           sas_isacks;      /* SACKs received */
+       __u64           sas_osacks;      /* SACKs sent */
+       __u64           sas_opackets;    /* Packets sent */
+       __u64           sas_ipackets;    /* Packets received */
+       __u64           sas_rtxchunks;   /* Retransmitted Chunks */
+       __u64           sas_outofseqtsns;/* TSN received > next expected */
+       __u64           sas_idupchunks;  /* Dups received (ordered+unordered) */
+       __u64           sas_gapcnt;      /* Gap Acknowledgements Received */
+       __u64           sas_ouodchunks;  /* Unordered data chunks sent */
+       __u64           sas_iuodchunks;  /* Unordered data chunks received */
+       __u64           sas_oodchunks;   /* Ordered data chunks sent */
+       __u64           sas_iodchunks;   /* Ordered data chunks received */
+       __u64           sas_octrlchunks; /* Control chunks sent */
+       __u64           sas_ictrlchunks; /* Control chunks received */
+};
+
+/*
+ * 8.1 sctp_bindx()
+ *
+ * The flags parameter is formed from the bitwise OR of zero or more of the
+ * following currently defined flags:
+ */
+#define SCTP_BINDX_ADD_ADDR 0x01
+#define SCTP_BINDX_REM_ADDR 0x02
+
+/* This is the structure that is passed as an argument(optval) to
+ * getsockopt(SCTP_SOCKOPT_PEELOFF).
+ */
+typedef struct {
+       sctp_assoc_t associd;
+       int sd;
+} sctp_peeloff_arg_t;
+
+/*
+ *  Peer Address Thresholds socket option
+ */
+struct sctp_paddrthlds {
+       sctp_assoc_t spt_assoc_id;
+       struct sockaddr_storage spt_address;
+       __u16 spt_pathmaxrxt;
+       __u16 spt_pathpfthld;
+};
+
+#endif /* _SCTP_H */
diff --git a/lib/libdss-include/linux/sdla.h b/lib/libdss-include/linux/sdla.h
new file mode 100644 (file)
index 0000000..0760ba4
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the Frame relay interface.
+ *
+ * Version:    @(#)if_ifrad.h  0.20    13 Apr 96
+ *
+ * Author:     Mike McLagan <mike.mclagan@linux.org>
+ *
+ * Changes:
+ *             0.15    Mike McLagan    Structure packing
+ *
+ *             0.20    Mike McLagan    New flags for S508 buffer handling
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+
+#ifndef SDLA_H
+#define SDLA_H
+
+/* adapter type */
+#define SDLA_TYPES
+#define SDLA_S502A                     5020
+#define SDLA_S502E                     5021
+#define SDLA_S503                      5030
+#define SDLA_S507                      5070
+#define SDLA_S508                      5080
+#define SDLA_S509                      5090
+#define SDLA_UNKNOWN                   -1
+
+/* port selection flags for the S508 */
+#define SDLA_S508_PORT_V35             0x00
+#define SDLA_S508_PORT_RS232           0x02
+
+/* Z80 CPU speeds */
+#define SDLA_CPU_3M                    0x00
+#define SDLA_CPU_5M                    0x01
+#define SDLA_CPU_7M                    0x02
+#define SDLA_CPU_8M                    0x03
+#define SDLA_CPU_10M                   0x04
+#define SDLA_CPU_16M                   0x05
+#define SDLA_CPU_12M                   0x06
+
+/* some private IOCTLs */
+#define SDLA_IDENTIFY                  (FRAD_LAST_IOCTL + 1)
+#define SDLA_CPUSPEED                  (FRAD_LAST_IOCTL + 2)
+#define SDLA_PROTOCOL                  (FRAD_LAST_IOCTL + 3)
+
+#define SDLA_CLEARMEM                  (FRAD_LAST_IOCTL + 4)
+#define SDLA_WRITEMEM                  (FRAD_LAST_IOCTL + 5)
+#define SDLA_READMEM                   (FRAD_LAST_IOCTL + 6)
+
+struct sdla_mem {
+   int  addr;
+   int  len;
+   void *data;
+};
+
+#define SDLA_START                     (FRAD_LAST_IOCTL + 7)
+#define SDLA_STOP                      (FRAD_LAST_IOCTL + 8)
+
+/* some offsets in the Z80's memory space */
+#define SDLA_NMIADDR                   0x0000
+#define SDLA_CONF_ADDR                 0x0010
+#define SDLA_S502A_NMIADDR             0x0066
+#define SDLA_CODE_BASEADDR             0x0100
+#define SDLA_WINDOW_SIZE               0x2000
+#define SDLA_ADDR_MASK                 0x1FFF
+
+/* largest handleable block of data */
+#define SDLA_MAX_DATA                  4080
+#define SDLA_MAX_MTU                   4072    /* MAX_DATA - sizeof(fradhdr) */
+#define SDLA_MAX_DLCI                  24
+
+/* this should be the same as frad_conf */
+struct sdla_conf {
+   short station;
+   short config;
+   short kbaud;
+   short clocking;
+   short max_frm;
+   short T391;
+   short T392;
+   short N391;
+   short N392;
+   short N393;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd;
+};
+
+/* this should be the same as dlci_conf */
+struct sdla_dlci_conf {
+   short config;
+   short CIR_fwd;
+   short Bc_fwd;
+   short Be_fwd;
+   short CIR_bwd;
+   short Bc_bwd;
+   short Be_bwd; 
+   short Tc_fwd;
+   short Tc_bwd;
+   short Tf_max;
+   short Tb_max;
+};
+
+
+#endif /* SDLA_H */
diff --git a/lib/libdss-include/linux/seccomp.h b/lib/libdss-include/linux/seccomp.h
new file mode 100644 (file)
index 0000000..2f4c2e9
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _LINUX_SECCOMP_H
+#define _LINUX_SECCOMP_H
+
+
+#include <linux/types.h>
+
+
+/* Valid values for seccomp.mode and prctl(PR_SET_SECCOMP, <mode>) */
+#define SECCOMP_MODE_DISABLED  0 /* seccomp is not in use. */
+#define SECCOMP_MODE_STRICT    1 /* uses hard-coded filter. */
+#define SECCOMP_MODE_FILTER    2 /* uses user-supplied filter. */
+
+/* Valid operations for seccomp syscall. */
+#define SECCOMP_SET_MODE_STRICT        0
+#define SECCOMP_SET_MODE_FILTER        1
+
+/* Valid flags for SECCOMP_SET_MODE_FILTER */
+#define SECCOMP_FILTER_FLAG_TSYNC      1
+
+/*
+ * All BPF programs must return a 32-bit value.
+ * The bottom 16-bits are for optional return data.
+ * The upper 16-bits are ordered from least permissive values to most.
+ *
+ * The ordering ensures that a min_t() over composed return values always
+ * selects the least permissive choice.
+ */
+#define SECCOMP_RET_KILL       0x00000000U /* kill the task immediately */
+#define SECCOMP_RET_TRAP       0x00030000U /* disallow and force a SIGSYS */
+#define SECCOMP_RET_ERRNO      0x00050000U /* returns an errno */
+#define SECCOMP_RET_TRACE      0x7ff00000U /* pass to a tracer or disallow */
+#define SECCOMP_RET_ALLOW      0x7fff0000U /* allow */
+
+/* Masks for the return value sections. */
+#define SECCOMP_RET_ACTION     0x7fff0000U
+#define SECCOMP_RET_DATA       0x0000ffffU
+
+/**
+ * struct seccomp_data - the format the BPF program executes over.
+ * @nr: the system call number
+ * @arch: indicates system call convention as an AUDIT_ARCH_* value
+ *        as defined in <linux/audit.h>.
+ * @instruction_pointer: at the time of the system call.
+ * @args: up to 6 system call arguments always stored as 64-bit values
+ *        regardless of the architecture.
+ */
+struct seccomp_data {
+       int nr;
+       __u32 arch;
+       __u64 instruction_pointer;
+       __u64 args[6];
+};
+
+#endif /* _LINUX_SECCOMP_H */
diff --git a/lib/libdss-include/linux/securebits.h b/lib/libdss-include/linux/securebits.h
new file mode 100644 (file)
index 0000000..57a1811
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _LINUX_SECUREBITS_H
+#define _LINUX_SECUREBITS_H
+
+/* Each securesetting is implemented using two bits. One bit specifies
+   whether the setting is on or off. The other bit specify whether the
+   setting is locked or not. A setting which is locked cannot be
+   changed from user-level. */
+#define issecure_mask(X)       (1 << (X))
+
+#define SECUREBITS_DEFAULT 0x00000000
+
+/* When set UID 0 has no special privileges. When unset, we support
+   inheritance of root-permissions and suid-root executable under
+   compatibility mode. We raise the effective and inheritable bitmasks
+   *of the executable file* if the effective uid of the new process is
+   0. If the real uid is 0, we raise the effective (legacy) bit of the
+   executable file. */
+#define SECURE_NOROOT                  0
+#define SECURE_NOROOT_LOCKED           1  /* make bit-0 immutable */
+
+#define SECBIT_NOROOT          (issecure_mask(SECURE_NOROOT))
+#define SECBIT_NOROOT_LOCKED   (issecure_mask(SECURE_NOROOT_LOCKED))
+
+/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
+   When unset, to provide compatiblility with old programs relying on
+   set*uid to gain/lose privilege, transitions to/from uid 0 cause
+   capabilities to be gained/lost. */
+#define SECURE_NO_SETUID_FIXUP         2
+#define SECURE_NO_SETUID_FIXUP_LOCKED  3  /* make bit-2 immutable */
+
+#define SECBIT_NO_SETUID_FIXUP (issecure_mask(SECURE_NO_SETUID_FIXUP))
+#define SECBIT_NO_SETUID_FIXUP_LOCKED \
+                       (issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
+
+/* When set, a process can retain its capabilities even after
+   transitioning to a non-root user (the set-uid fixup suppressed by
+   bit 2). Bit-4 is cleared when a process calls exec(); setting both
+   bit 4 and 5 will create a barrier through exec that no exec()'d
+   child can use this feature again. */
+#define SECURE_KEEP_CAPS               4
+#define SECURE_KEEP_CAPS_LOCKED                5  /* make bit-4 immutable */
+
+#define SECBIT_KEEP_CAPS       (issecure_mask(SECURE_KEEP_CAPS))
+#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
+
+/* When set, a process cannot add new capabilities to its ambient set. */
+#define SECURE_NO_CAP_AMBIENT_RAISE            6
+#define SECURE_NO_CAP_AMBIENT_RAISE_LOCKED     7  /* make bit-6 immutable */
+
+#define SECBIT_NO_CAP_AMBIENT_RAISE (issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
+#define SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED \
+                       (issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE_LOCKED))
+
+#define SECURE_ALL_BITS                (issecure_mask(SECURE_NOROOT) | \
+                                issecure_mask(SECURE_NO_SETUID_FIXUP) | \
+                                issecure_mask(SECURE_KEEP_CAPS) | \
+                                issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
+#define SECURE_ALL_LOCKS       (SECURE_ALL_BITS << 1)
+
+#endif /* _LINUX_SECUREBITS_H */
diff --git a/lib/libdss-include/linux/selinux_netlink.h b/lib/libdss-include/linux/selinux_netlink.h
new file mode 100644 (file)
index 0000000..7a9bf6a
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Netlink event notifications for SELinux.
+ *
+ * Author: James Morris <jmorris@redhat.com>
+ *
+ * Copyright (C) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ */
+#ifndef _LINUX_SELINUX_NETLINK_H
+#define _LINUX_SELINUX_NETLINK_H
+
+#include <linux/types.h>
+
+/* Message types. */
+#define SELNL_MSG_BASE 0x10
+enum {
+       SELNL_MSG_SETENFORCE = SELNL_MSG_BASE,
+       SELNL_MSG_POLICYLOAD,
+       SELNL_MSG_MAX
+};
+
+/* Multicast groups - backwards compatiblility for userspace */
+#define SELNL_GRP_NONE         0x00000000
+#define SELNL_GRP_AVC          0x00000001      /* AVC notifications */
+#define SELNL_GRP_ALL          0xffffffff
+
+enum selinux_nlgroups {
+       SELNLGRP_NONE,
+#define SELNLGRP_NONE  SELNLGRP_NONE
+       SELNLGRP_AVC,
+#define SELNLGRP_AVC   SELNLGRP_AVC
+       __SELNLGRP_MAX
+};
+#define SELNLGRP_MAX   (__SELNLGRP_MAX - 1)
+
+/* Message structures */
+struct selnl_msg_setenforce {
+       __s32           val;
+};
+
+struct selnl_msg_policyload {
+       __u32   seqno;
+};
+
+#endif /* _LINUX_SELINUX_NETLINK_H */
diff --git a/lib/libdss-include/linux/sem.h b/lib/libdss-include/linux/sem.h
new file mode 100644 (file)
index 0000000..b605950
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef _LINUX_SEM_H
+#define _LINUX_SEM_H
+
+#include <linux/ipc.h>
+
+/* semop flags */
+#define SEM_UNDO        0x1000  /* undo the operation on exit */
+
+/* semctl Command Definitions. */
+#define GETPID  11       /* get sempid */
+#define GETVAL  12       /* get semval */
+#define GETALL  13       /* get all semval's */
+#define GETNCNT 14       /* get semncnt */
+#define GETZCNT 15       /* get semzcnt */
+#define SETVAL  16       /* set semval */
+#define SETALL  17       /* set all semval's */
+
+/* ipcs ctl cmds */
+#define SEM_STAT 18
+#define SEM_INFO 19
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct semid_ds {
+       struct ipc_perm sem_perm;               /* permissions .. see ipc.h */
+       __kernel_time_t sem_otime;              /* last semop time */
+       __kernel_time_t sem_ctime;              /* last change time */
+       struct sem      *sem_base;              /* ptr to first semaphore in array */
+       struct sem_queue *sem_pending;          /* pending operations to be processed */
+       struct sem_queue **sem_pending_last;    /* last pending operation */
+       struct sem_undo *undo;                  /* undo requests on this array */
+       unsigned short  sem_nsems;              /* no. of semaphores in array */
+};
+
+/* Include the definition of semid64_ds */
+#include <asm/sembuf.h>
+
+/* semop system calls takes an array of these. */
+struct sembuf {
+       unsigned short  sem_num;        /* semaphore index in array */
+       short           sem_op;         /* semaphore operation */
+       short           sem_flg;        /* operation flags */
+};
+
+/* arg for semctl system calls. */
+union semun {
+       int val;                        /* value for SETVAL */
+       struct semid_ds *buf;   /* buffer for IPC_STAT & IPC_SET */
+       unsigned short *array;  /* array for GETALL & SETALL */
+       struct seminfo *__buf;  /* buffer for IPC_INFO */
+       void *__pad;
+};
+
+struct  seminfo {
+       int semmap;
+       int semmni;
+       int semmns;
+       int semmnu;
+       int semmsl;
+       int semopm;
+       int semume;
+       int semusz;
+       int semvmx;
+       int semaem;
+};
+
+/*
+ * SEMMNI, SEMMSL and SEMMNS are default values which can be
+ * modified by sysctl.
+ * The values has been chosen to be larger than necessary for any
+ * known configuration.
+ *
+ * SEMOPM should not be increased beyond 1000, otherwise there is the
+ * risk that semop()/semtimedop() fails due to kernel memory fragmentation when
+ * allocating the sop array.
+ */
+
+
+#define SEMMNI  32000           /* <= IPCMNI  max # of semaphore identifiers */
+#define SEMMSL  32000           /* <= INT_MAX max num of semaphores per id */
+#define SEMMNS  (SEMMNI*SEMMSL) /* <= INT_MAX max # of semaphores in system */
+#define SEMOPM  500            /* <= 1 000 max num of ops per semop call */
+#define SEMVMX  32767           /* <= 32767 semaphore maximum value */
+#define SEMAEM  SEMVMX          /* adjust on exit max value */
+
+/* unused */
+#define SEMUME  SEMOPM          /* max num of undo entries per process */
+#define SEMMNU  SEMMNS          /* num of undo structures system wide */
+#define SEMMAP  SEMMNS          /* # of entries in semaphore map */
+#define SEMUSZ  20             /* sizeof struct sem_undo */
+
+
+#endif /* _LINUX_SEM_H */
diff --git a/lib/libdss-include/linux/serial.h b/lib/libdss-include/linux/serial.h
new file mode 100644 (file)
index 0000000..1e0531d
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * include/linux/serial.h
+ *
+ * Copyright (C) 1992 by Theodore Ts'o.
+ * 
+ * Redistribution of this file is permitted under the terms of the GNU 
+ * Public License (GPL)
+ */
+
+#ifndef _LINUX_SERIAL_H
+#define _LINUX_SERIAL_H
+
+#include <linux/types.h>
+
+#include <linux/tty_flags.h>
+
+
+struct serial_struct {
+       int     type;
+       int     line;
+       unsigned int    port;
+       int     irq;
+       int     flags;
+       int     xmit_fifo_size;
+       int     custom_divisor;
+       int     baud_base;
+       unsigned short  close_delay;
+       char    io_type;
+       char    reserved_char[1];
+       int     hub6;
+       unsigned short  closing_wait; /* time to wait before closing */
+       unsigned short  closing_wait2; /* no longer used... */
+       unsigned char   *iomem_base;
+       unsigned short  iomem_reg_shift;
+       unsigned int    port_high;
+       unsigned long   iomap_base;     /* cookie passed into ioremap */
+};
+
+/*
+ * For the close wait times, 0 means wait forever for serial port to
+ * flush its output.  65535 means don't wait at all.
+ */
+#define ASYNC_CLOSING_WAIT_INF 0
+#define ASYNC_CLOSING_WAIT_NONE        65535
+
+/*
+ * These are the supported serial types.
+ */
+#define PORT_UNKNOWN   0
+#define PORT_8250      1
+#define PORT_16450     2
+#define PORT_16550     3
+#define PORT_16550A    4
+#define PORT_CIRRUS     5      /* usurped by cyclades.c */
+#define PORT_16650     6
+#define PORT_16650V2   7
+#define PORT_16750     8
+#define PORT_STARTECH  9       /* usurped by cyclades.c */
+#define PORT_16C950    10      /* Oxford Semiconductor */
+#define PORT_16654     11
+#define PORT_16850     12
+#define PORT_RSA       13      /* RSA-DV II/S card */
+#define PORT_MAX       13
+
+#define SERIAL_IO_PORT 0
+#define SERIAL_IO_HUB6 1
+#define SERIAL_IO_MEM  2
+#define SERIAL_IO_MEM32          3
+#define SERIAL_IO_AU     4
+#define SERIAL_IO_TSI    5
+#define SERIAL_IO_MEM32BE 6
+
+#define UART_CLEAR_FIFO                0x01
+#define UART_USE_FIFO          0x02
+#define UART_STARTECH          0x04
+#define UART_NATSEMI           0x08
+
+
+/*
+ * Multiport serial configuration structure --- external structure
+ */
+struct serial_multiport_struct {
+       int             irq;
+       int             port1;
+       unsigned char   mask1, match1;
+       int             port2;
+       unsigned char   mask2, match2;
+       int             port3;
+       unsigned char   mask3, match3;
+       int             port4;
+       unsigned char   mask4, match4;
+       int             port_monitor;
+       int     reserved[32];
+};
+
+/*
+ * Serial input interrupt line counters -- external structure
+ * Four lines can interrupt: CTS, DSR, RI, DCD
+ */
+struct serial_icounter_struct {
+       int cts, dsr, rng, dcd;
+       int rx, tx;
+       int frame, overrun, parity, brk;
+       int buf_overrun;
+       int reserved[9];
+};
+
+/*
+ * Serial interface for controlling RS485 settings on chips with suitable
+ * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
+ * platform. The set function returns the new state, with any unsupported bits
+ * reverted appropriately.
+ */
+
+struct serial_rs485 {
+       __u32   flags;                  /* RS485 feature flags */
+#define SER_RS485_ENABLED              (1 << 0)        /* If enabled */
+#define SER_RS485_RTS_ON_SEND          (1 << 1)        /* Logical level for
+                                                          RTS pin when
+                                                          sending */
+#define SER_RS485_RTS_AFTER_SEND       (1 << 2)        /* Logical level for
+                                                          RTS pin after sent*/
+#define SER_RS485_RX_DURING_TX         (1 << 4)
+       __u32   delay_rts_before_send;  /* Delay before send (milliseconds) */
+       __u32   delay_rts_after_send;   /* Delay after send (milliseconds) */
+       __u32   padding[5];             /* Memory is cheap, new structs
+                                          are a royal PITA .. */
+};
+
+#endif /* _LINUX_SERIAL_H */
diff --git a/lib/libdss-include/linux/serial_core.h b/lib/libdss-include/linux/serial_core.h
new file mode 100644 (file)
index 0000000..dd0f071
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ *  linux/drivers/char/serial_core.h
+ *
+ *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef LINUX_SERIAL_CORE_H
+#define LINUX_SERIAL_CORE_H
+
+#include <linux/serial.h>
+
+/*
+ * The type definitions.  These are from Ted Ts'o's serial.h
+ */
+#define PORT_UNKNOWN   0
+#define PORT_8250      1
+#define PORT_16450     2
+#define PORT_16550     3
+#define PORT_16550A    4
+#define PORT_CIRRUS    5
+#define PORT_16650     6
+#define PORT_16650V2   7
+#define PORT_16750     8
+#define PORT_STARTECH  9
+#define PORT_16C950    10
+#define PORT_16654     11
+#define PORT_16850     12
+#define PORT_RSA       13
+#define PORT_NS16550A  14
+#define PORT_XSCALE    15
+#define PORT_RM9000    16      /* PMC-Sierra RM9xxx internal UART */
+#define PORT_OCTEON    17      /* Cavium OCTEON internal UART */
+#define PORT_AR7       18      /* Texas Instruments AR7 internal UART */
+#define PORT_U6_16550A 19      /* ST-Ericsson U6xxx internal UART */
+#define PORT_TEGRA     20      /* NVIDIA Tegra internal UART */
+#define PORT_XR17D15X  21      /* Exar XR17D15x UART */
+#define PORT_LPC3220   22      /* NXP LPC32xx SoC "Standard" UART */
+#define PORT_8250_CIR  23      /* CIR infrared port, has its own driver */
+#define PORT_XR17V35X  24      /* Exar XR17V35x UARTs */
+#define PORT_BRCM_TRUMANAGE    25
+#define PORT_ALTR_16550_F32 26 /* Altera 16550 UART with 32 FIFOs */
+#define PORT_ALTR_16550_F64 27 /* Altera 16550 UART with 64 FIFOs */
+#define PORT_ALTR_16550_F128 28 /* Altera 16550 UART with 128 FIFOs */
+#define PORT_RT2880    29      /* Ralink RT2880 internal UART */
+#define PORT_16550A_FSL64 30   /* Freescale 16550 UART with 64 FIFOs */
+#define PORT_MAX_8250  30      /* max port ID */
+
+/*
+ * ARM specific type numbers.  These are not currently guaranteed
+ * to be implemented, and will change in the future.  These are
+ * separate so any additions to the old serial.c that occur before
+ * we are merged can be easily merged here.
+ */
+#define PORT_PXA       31
+#define PORT_AMBA      32
+#define PORT_CLPS711X  33
+#define PORT_SA1100    34
+#define PORT_UART00    35
+#define PORT_21285     37
+
+/* Sparc type numbers.  */
+#define PORT_SUNZILOG  38
+#define PORT_SUNSAB    39
+
+/* DEC */
+#define PORT_DZ                46
+#define PORT_ZS                47
+
+/* Parisc type numbers. */
+#define PORT_MUX       48
+
+/* Atmel AT91 / AT32 SoC */
+#define PORT_ATMEL     49
+
+/* Macintosh Zilog type numbers */
+#define PORT_MAC_ZILOG 50      /* m68k : not yet implemented */
+#define PORT_PMAC_ZILOG        51
+
+/* SH-SCI */
+#define PORT_SCI       52
+#define PORT_SCIF      53
+#define PORT_IRDA      54
+
+/* Samsung S3C2410 SoC and derivatives thereof */
+#define PORT_S3C2410    55
+
+/* SGI IP22 aka Indy / Challenge S / Indigo 2 */
+#define PORT_IP22ZILOG 56
+
+/* Sharp LH7a40x -- an ARM9 SoC series */
+#define PORT_LH7A40X   57
+
+/* PPC CPM type number */
+#define PORT_CPM        58
+
+/* MPC52xx (and MPC512x) type numbers */
+#define PORT_MPC52xx   59
+
+/* IBM icom */
+#define PORT_ICOM      60
+
+/* Samsung S3C2440 SoC */
+#define PORT_S3C2440   61
+
+/* Motorola i.MX SoC */
+#define PORT_IMX       62
+
+/* Marvell MPSC */
+#define PORT_MPSC      63
+
+/* TXX9 type number */
+#define PORT_TXX9      64
+
+/* NEC VR4100 series SIU/DSIU */
+#define PORT_VR41XX_SIU                65
+#define PORT_VR41XX_DSIU       66
+
+/* Samsung S3C2400 SoC */
+#define PORT_S3C2400   67
+
+/* M32R SIO */
+#define PORT_M32R_SIO  68
+
+/*Digi jsm */
+#define PORT_JSM        69
+
+#define PORT_PNX8XXX   70
+
+/* Hilscher netx */
+#define PORT_NETX      71
+
+/* SUN4V Hypervisor Console */
+#define PORT_SUNHV     72
+
+#define PORT_S3C2412   73
+
+/* Xilinx uartlite */
+#define PORT_UARTLITE  74
+
+/* Blackfin bf5xx */
+#define PORT_BFIN      75
+
+/* Micrel KS8695 */
+#define PORT_KS8695    76
+
+/* Broadcom SB1250, etc. SOC */
+#define PORT_SB1250_DUART      77
+
+/* Freescale ColdFire */
+#define PORT_MCF       78
+
+/* Blackfin SPORT */
+#define PORT_BFIN_SPORT                79
+
+/* MN10300 on-chip UART numbers */
+#define PORT_MN10300           80
+#define PORT_MN10300_CTS       81
+
+#define PORT_SC26XX    82
+
+/* SH-SCI */
+#define PORT_SCIFA     83
+
+#define PORT_S3C6400   84
+
+/* NWPSERIAL */
+#define PORT_NWPSERIAL 85
+
+/* MAX3100 */
+#define PORT_MAX3100    86
+
+/* Timberdale UART */
+#define PORT_TIMBUART  87
+
+/* Qualcomm MSM SoCs */
+#define PORT_MSM       88
+
+/* BCM63xx family SoCs */
+#define PORT_BCM63XX   89
+
+/* Aeroflex Gaisler GRLIB APBUART */
+#define PORT_APBUART    90
+
+/* Altera UARTs */
+#define PORT_ALTERA_JTAGUART   91
+#define PORT_ALTERA_UART       92
+
+/* SH-SCI */
+#define PORT_SCIFB     93
+
+/* MAX310X */
+#define PORT_MAX310X   94
+
+/* High Speed UART for Medfield */
+#define PORT_MFD       95
+
+/* TI OMAP-UART */
+#define PORT_OMAP      96
+
+/* VIA VT8500 SoC */
+#define PORT_VT8500    97
+
+/* Cadence (Xilinx Zynq) UART */
+#define PORT_XUARTPS   98
+
+/* Atheros AR933X SoC */
+#define PORT_AR933X    99
+
+/* Energy Micro efm32 SoC */
+#define PORT_EFMUART   100
+
+/* ARC (Synopsys) on-chip UART */
+#define PORT_ARC       101
+
+/* Rocketport EXPRESS/INFINITY */
+#define PORT_RP2       102
+
+/* Freescale lpuart */
+#define PORT_LPUART    103
+
+/* SH-SCI */
+#define PORT_HSCIF     104
+
+/* ST ASC type numbers */
+#define PORT_ASC       105
+
+/* Tilera TILE-Gx UART */
+#define PORT_TILEGX    106
+
+/* MEN 16z135 UART */
+#define PORT_MEN_Z135  107
+
+/* SC16IS74xx */
+#define PORT_SC16IS7XX   108
+
+/* MESON */
+#define PORT_MESON     109
+
+/* Conexant Digicolor */
+#define PORT_DIGICOLOR 110
+
+/* SPRD SERIAL  */
+#define PORT_SPRD      111
+
+/* Cris v10 / v32 SoC */
+#define PORT_CRIS      112
+
+/* STM32 USART */
+#define PORT_STM32     113
+
+#endif /* LINUX_SERIAL_CORE_H */
diff --git a/lib/libdss-include/linux/serial_reg.h b/lib/libdss-include/linux/serial_reg.h
new file mode 100644 (file)
index 0000000..1e5ac4e
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * include/linux/serial_reg.h
+ *
+ * Copyright (C) 1992, 1994 by Theodore Ts'o.
+ * 
+ * Redistribution of this file is permitted under the terms of the GNU 
+ * Public License (GPL)
+ * 
+ * These are the UART port assignments, expressed as offsets from the base
+ * register.  These assignments should hold for any serial port based on
+ * a 8250, 16450, or 16550(A).
+ */
+
+#ifndef _LINUX_SERIAL_REG_H
+#define _LINUX_SERIAL_REG_H
+
+/*
+ * DLAB=0
+ */
+#define UART_RX                0       /* In:  Receive buffer */
+#define UART_TX                0       /* Out: Transmit buffer */
+
+#define UART_IER       1       /* Out: Interrupt Enable Register */
+#define UART_IER_MSI           0x08 /* Enable Modem status interrupt */
+#define UART_IER_RLSI          0x04 /* Enable receiver line status interrupt */
+#define UART_IER_THRI          0x02 /* Enable Transmitter holding register int. */
+#define UART_IER_RDI           0x01 /* Enable receiver data interrupt */
+/*
+ * Sleep mode for ST16650 and TI16750.  For the ST16650, EFR[4]=1
+ */
+#define UART_IERX_SLEEP                0x10 /* Enable sleep mode */
+
+#define UART_IIR       2       /* In:  Interrupt ID Register */
+#define UART_IIR_NO_INT                0x01 /* No interrupts pending */
+#define UART_IIR_ID            0x0e /* Mask for the interrupt ID */
+#define UART_IIR_MSI           0x00 /* Modem status interrupt */
+#define UART_IIR_THRI          0x02 /* Transmitter holding register empty */
+#define UART_IIR_RDI           0x04 /* Receiver data interrupt */
+#define UART_IIR_RLSI          0x06 /* Receiver line status interrupt */
+
+#define UART_IIR_BUSY          0x07 /* DesignWare APB Busy Detect */
+
+#define UART_IIR_RX_TIMEOUT    0x0c /* OMAP RX Timeout interrupt */
+#define UART_IIR_XOFF          0x10 /* OMAP XOFF/Special Character */
+#define UART_IIR_CTS_RTS_DSR   0x20 /* OMAP CTS/RTS/DSR Change */
+
+#define UART_FCR       2       /* Out: FIFO Control Register */
+#define UART_FCR_ENABLE_FIFO   0x01 /* Enable the FIFO */
+#define UART_FCR_CLEAR_RCVR    0x02 /* Clear the RCVR FIFO */
+#define UART_FCR_CLEAR_XMIT    0x04 /* Clear the XMIT FIFO */
+#define UART_FCR_DMA_SELECT    0x08 /* For DMA applications */
+/*
+ * Note: The FIFO trigger levels are chip specific:
+ *     RX:76 = 00  01  10  11  TX:54 = 00  01  10  11
+ * PC16550D:    1   4   8  14          xx  xx  xx  xx
+ * TI16C550A:   1   4   8  14          xx  xx  xx  xx
+ * TI16C550C:   1   4   8  14          xx  xx  xx  xx
+ * ST16C550:    1   4   8  14          xx  xx  xx  xx
+ * ST16C650:    8  16  24  28          16   8  24  30  PORT_16650V2
+ * NS16C552:    1   4   8  14          xx  xx  xx  xx
+ * ST16C654:    8  16  56  60           8  16  32  56  PORT_16654
+ * TI16C750:    1  16  32  56          xx  xx  xx  xx  PORT_16750
+ * TI16C752:    8  16  56  60           8  16  32  56
+ * Tegra:       1   4   8  14          16   8   4   1  PORT_TEGRA
+ */
+#define UART_FCR_R_TRIG_00     0x00
+#define UART_FCR_R_TRIG_01     0x40
+#define UART_FCR_R_TRIG_10     0x80
+#define UART_FCR_R_TRIG_11     0xc0
+#define UART_FCR_T_TRIG_00     0x00
+#define UART_FCR_T_TRIG_01     0x10
+#define UART_FCR_T_TRIG_10     0x20
+#define UART_FCR_T_TRIG_11     0x30
+
+#define UART_FCR_TRIGGER_MASK  0xC0 /* Mask for the FIFO trigger range */
+#define UART_FCR_TRIGGER_1     0x00 /* Mask for trigger set at 1 */
+#define UART_FCR_TRIGGER_4     0x40 /* Mask for trigger set at 4 */
+#define UART_FCR_TRIGGER_8     0x80 /* Mask for trigger set at 8 */
+#define UART_FCR_TRIGGER_14    0xC0 /* Mask for trigger set at 14 */
+/* 16650 definitions */
+#define UART_FCR6_R_TRIGGER_8  0x00 /* Mask for receive trigger set at 1 */
+#define UART_FCR6_R_TRIGGER_16 0x40 /* Mask for receive trigger set at 4 */
+#define UART_FCR6_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 8 */
+#define UART_FCR6_R_TRIGGER_28 0xC0 /* Mask for receive trigger set at 14 */
+#define UART_FCR6_T_TRIGGER_16 0x00 /* Mask for transmit trigger set at 16 */
+#define UART_FCR6_T_TRIGGER_8  0x10 /* Mask for transmit trigger set at 8 */
+#define UART_FCR6_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */
+#define UART_FCR6_T_TRIGGER_30 0x30 /* Mask for transmit trigger set at 30 */
+#define UART_FCR7_64BYTE       0x20 /* Go into 64 byte mode (TI16C750 and
+                                       some Freescale UARTs) */
+
+#define UART_FCR_R_TRIG_SHIFT          6
+#define UART_FCR_R_TRIG_BITS(x)                \
+       (((x) & UART_FCR_TRIGGER_MASK) >> UART_FCR_R_TRIG_SHIFT)
+#define UART_FCR_R_TRIG_MAX_STATE      4
+
+#define UART_LCR       3       /* Out: Line Control Register */
+/*
+ * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting 
+ * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits.
+ */
+#define UART_LCR_DLAB          0x80 /* Divisor latch access bit */
+#define UART_LCR_SBC           0x40 /* Set break control */
+#define UART_LCR_SPAR          0x20 /* Stick parity (?) */
+#define UART_LCR_EPAR          0x10 /* Even parity select */
+#define UART_LCR_PARITY                0x08 /* Parity Enable */
+#define UART_LCR_STOP          0x04 /* Stop bits: 0=1 bit, 1=2 bits */
+#define UART_LCR_WLEN5         0x00 /* Wordlength: 5 bits */
+#define UART_LCR_WLEN6         0x01 /* Wordlength: 6 bits */
+#define UART_LCR_WLEN7         0x02 /* Wordlength: 7 bits */
+#define UART_LCR_WLEN8         0x03 /* Wordlength: 8 bits */
+
+/*
+ * Access to some registers depends on register access / configuration
+ * mode.
+ */
+#define UART_LCR_CONF_MODE_A   UART_LCR_DLAB   /* Configutation mode A */
+#define UART_LCR_CONF_MODE_B   0xBF            /* Configutation mode B */
+
+#define UART_MCR       4       /* Out: Modem Control Register */
+#define UART_MCR_CLKSEL                0x80 /* Divide clock by 4 (TI16C752, EFR[4]=1) */
+#define UART_MCR_TCRTLR                0x40 /* Access TCR/TLR (TI16C752, EFR[4]=1) */
+#define UART_MCR_XONANY                0x20 /* Enable Xon Any (TI16C752, EFR[4]=1) */
+#define UART_MCR_AFE           0x20 /* Enable auto-RTS/CTS (TI16C550C/TI16C750) */
+#define UART_MCR_LOOP          0x10 /* Enable loopback test mode */
+#define UART_MCR_OUT2          0x08 /* Out2 complement */
+#define UART_MCR_OUT1          0x04 /* Out1 complement */
+#define UART_MCR_RTS           0x02 /* RTS complement */
+#define UART_MCR_DTR           0x01 /* DTR complement */
+
+#define UART_LSR       5       /* In:  Line Status Register */
+#define UART_LSR_FIFOE         0x80 /* Fifo error */
+#define UART_LSR_TEMT          0x40 /* Transmitter empty */
+#define UART_LSR_THRE          0x20 /* Transmit-hold-register empty */
+#define UART_LSR_BI            0x10 /* Break interrupt indicator */
+#define UART_LSR_FE            0x08 /* Frame error indicator */
+#define UART_LSR_PE            0x04 /* Parity error indicator */
+#define UART_LSR_OE            0x02 /* Overrun error indicator */
+#define UART_LSR_DR            0x01 /* Receiver data ready */
+#define UART_LSR_BRK_ERROR_BITS        0x1E /* BI, FE, PE, OE bits */
+
+#define UART_MSR       6       /* In:  Modem Status Register */
+#define UART_MSR_DCD           0x80 /* Data Carrier Detect */
+#define UART_MSR_RI            0x40 /* Ring Indicator */
+#define UART_MSR_DSR           0x20 /* Data Set Ready */
+#define UART_MSR_CTS           0x10 /* Clear to Send */
+#define UART_MSR_DDCD          0x08 /* Delta DCD */
+#define UART_MSR_TERI          0x04 /* Trailing edge ring indicator */
+#define UART_MSR_DDSR          0x02 /* Delta DSR */
+#define UART_MSR_DCTS          0x01 /* Delta CTS */
+#define UART_MSR_ANY_DELTA     0x0F /* Any of the delta bits! */
+
+#define UART_SCR       7       /* I/O: Scratch Register */
+
+/*
+ * DLAB=1
+ */
+#define UART_DLL       0       /* Out: Divisor Latch Low */
+#define UART_DLM       1       /* Out: Divisor Latch High */
+
+/*
+ * LCR=0xBF (or DLAB=1 for 16C660)
+ */
+#define UART_EFR       2       /* I/O: Extended Features Register */
+#define UART_XR_EFR    9       /* I/O: Extended Features Register (XR17D15x) */
+#define UART_EFR_CTS           0x80 /* CTS flow control */
+#define UART_EFR_RTS           0x40 /* RTS flow control */
+#define UART_EFR_SCD           0x20 /* Special character detect */
+#define UART_EFR_ECB           0x10 /* Enhanced control bit */
+/*
+ * the low four bits control software flow control
+ */
+
+/*
+ * LCR=0xBF, TI16C752, ST16650, ST16650A, ST16654
+ */
+#define UART_XON1      4       /* I/O: Xon character 1 */
+#define UART_XON2      5       /* I/O: Xon character 2 */
+#define UART_XOFF1     6       /* I/O: Xoff character 1 */
+#define UART_XOFF2     7       /* I/O: Xoff character 2 */
+
+/*
+ * EFR[4]=1 MCR[6]=1, TI16C752
+ */
+#define UART_TI752_TCR 6       /* I/O: transmission control register */
+#define UART_TI752_TLR 7       /* I/O: trigger level register */
+
+/*
+ * LCR=0xBF, XR16C85x
+ */
+#define UART_TRG       0       /* FCTR bit 7 selects Rx or Tx
+                                * In: Fifo count
+                                * Out: Fifo custom trigger levels */
+/*
+ * These are the definitions for the Programmable Trigger Register
+ */
+#define UART_TRG_1             0x01
+#define UART_TRG_4             0x04
+#define UART_TRG_8             0x08
+#define UART_TRG_16            0x10
+#define UART_TRG_32            0x20
+#define UART_TRG_64            0x40
+#define UART_TRG_96            0x60
+#define UART_TRG_120           0x78
+#define UART_TRG_128           0x80
+
+#define UART_FCTR      1       /* Feature Control Register */
+#define UART_FCTR_RTS_NODELAY  0x00  /* RTS flow control delay */
+#define UART_FCTR_RTS_4DELAY   0x01
+#define UART_FCTR_RTS_6DELAY   0x02
+#define UART_FCTR_RTS_8DELAY   0x03
+#define UART_FCTR_IRDA         0x04  /* IrDa data encode select */
+#define UART_FCTR_TX_INT       0x08  /* Tx interrupt type select */
+#define UART_FCTR_TRGA         0x00  /* Tx/Rx 550 trigger table select */
+#define UART_FCTR_TRGB         0x10  /* Tx/Rx 650 trigger table select */
+#define UART_FCTR_TRGC         0x20  /* Tx/Rx 654 trigger table select */
+#define UART_FCTR_TRGD         0x30  /* Tx/Rx 850 programmable trigger select */
+#define UART_FCTR_SCR_SWAP     0x40  /* Scratch pad register swap */
+#define UART_FCTR_RX           0x00  /* Programmable trigger mode select */
+#define UART_FCTR_TX           0x80  /* Programmable trigger mode select */
+
+/*
+ * LCR=0xBF, FCTR[6]=1
+ */
+#define UART_EMSR      7       /* Extended Mode Select Register */
+#define UART_EMSR_FIFO_COUNT   0x01  /* Rx/Tx select */
+#define UART_EMSR_ALT_COUNT    0x02  /* Alternating count select */
+
+/*
+ * The Intel XScale on-chip UARTs define these bits
+ */
+#define UART_IER_DMAE  0x80    /* DMA Requests Enable */
+#define UART_IER_UUE   0x40    /* UART Unit Enable */
+#define UART_IER_NRZE  0x20    /* NRZ coding Enable */
+#define UART_IER_RTOIE 0x10    /* Receiver Time Out Interrupt Enable */
+
+#define UART_IIR_TOD   0x08    /* Character Timeout Indication Detected */
+
+#define UART_FCR_PXAR1 0x00    /* receive FIFO threshold = 1 */
+#define UART_FCR_PXAR8 0x40    /* receive FIFO threshold = 8 */
+#define UART_FCR_PXAR16        0x80    /* receive FIFO threshold = 16 */
+#define UART_FCR_PXAR32        0xc0    /* receive FIFO threshold = 32 */
+
+/*
+ * These register definitions are for the 16C950
+ */
+#define UART_ASR       0x01    /* Additional Status Register */
+#define UART_RFL       0x03    /* Receiver FIFO level */
+#define UART_TFL       0x04    /* Transmitter FIFO level */
+#define UART_ICR       0x05    /* Index Control Register */
+
+/* The 16950 ICR registers */
+#define UART_ACR       0x00    /* Additional Control Register */
+#define UART_CPR       0x01    /* Clock Prescalar Register */
+#define UART_TCR       0x02    /* Times Clock Register */
+#define UART_CKS       0x03    /* Clock Select Register */
+#define UART_TTL       0x04    /* Transmitter Interrupt Trigger Level */
+#define UART_RTL       0x05    /* Receiver Interrupt Trigger Level */
+#define UART_FCL       0x06    /* Flow Control Level Lower */
+#define UART_FCH       0x07    /* Flow Control Level Higher */
+#define UART_ID1       0x08    /* ID #1 */
+#define UART_ID2       0x09    /* ID #2 */
+#define UART_ID3       0x0A    /* ID #3 */
+#define UART_REV       0x0B    /* Revision */
+#define UART_CSR       0x0C    /* Channel Software Reset */
+#define UART_NMR       0x0D    /* Nine-bit Mode Register */
+#define UART_CTR       0xFF
+
+/*
+ * The 16C950 Additional Control Register
+ */
+#define UART_ACR_RXDIS 0x01    /* Receiver disable */
+#define UART_ACR_TXDIS 0x02    /* Transmitter disable */
+#define UART_ACR_DSRFC 0x04    /* DSR Flow Control */
+#define UART_ACR_TLENB 0x20    /* 950 trigger levels enable */
+#define UART_ACR_ICRRD 0x40    /* ICR Read enable */
+#define UART_ACR_ASREN 0x80    /* Additional status enable */
+
+
+
+/*
+ * These definitions are for the RSA-DV II/S card, from
+ *
+ * Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
+ */
+
+#define UART_RSA_BASE (-8)
+
+#define UART_RSA_MSR ((UART_RSA_BASE) + 0) /* I/O: Mode Select Register */
+
+#define UART_RSA_MSR_SWAP (1 << 0) /* Swap low/high 8 bytes in I/O port addr */
+#define UART_RSA_MSR_FIFO (1 << 2) /* Enable the external FIFO */
+#define UART_RSA_MSR_FLOW (1 << 3) /* Enable the auto RTS/CTS flow control */
+#define UART_RSA_MSR_ITYP (1 << 4) /* Level (1) / Edge triger (0) */
+
+#define UART_RSA_IER ((UART_RSA_BASE) + 1) /* I/O: Interrupt Enable Register */
+
+#define UART_RSA_IER_Rx_FIFO_H (1 << 0) /* Enable Rx FIFO half full int. */
+#define UART_RSA_IER_Tx_FIFO_H (1 << 1) /* Enable Tx FIFO half full int. */
+#define UART_RSA_IER_Tx_FIFO_E (1 << 2) /* Enable Tx FIFO empty int. */
+#define UART_RSA_IER_Rx_TOUT (1 << 3) /* Enable char receive timeout int */
+#define UART_RSA_IER_TIMER (1 << 4) /* Enable timer interrupt */
+
+#define UART_RSA_SRR ((UART_RSA_BASE) + 2) /* IN: Status Read Register */
+
+#define UART_RSA_SRR_Tx_FIFO_NEMP (1 << 0) /* Tx FIFO is not empty (1) */
+#define UART_RSA_SRR_Tx_FIFO_NHFL (1 << 1) /* Tx FIFO is not half full (1) */
+#define UART_RSA_SRR_Tx_FIFO_NFUL (1 << 2) /* Tx FIFO is not full (1) */
+#define UART_RSA_SRR_Rx_FIFO_NEMP (1 << 3) /* Rx FIFO is not empty (1) */
+#define UART_RSA_SRR_Rx_FIFO_NHFL (1 << 4) /* Rx FIFO is not half full (1) */
+#define UART_RSA_SRR_Rx_FIFO_NFUL (1 << 5) /* Rx FIFO is not full (1) */
+#define UART_RSA_SRR_Rx_TOUT (1 << 6) /* Character reception timeout occurred (1) */
+#define UART_RSA_SRR_TIMER (1 << 7) /* Timer interrupt occurred */
+
+#define UART_RSA_FRR ((UART_RSA_BASE) + 2) /* OUT: FIFO Reset Register */
+
+#define UART_RSA_TIVSR ((UART_RSA_BASE) + 3) /* I/O: Timer Interval Value Set Register */
+
+#define UART_RSA_TCR ((UART_RSA_BASE) + 4) /* OUT: Timer Control Register */
+
+#define UART_RSA_TCR_SWITCH (1 << 0) /* Timer on */
+
+/*
+ * The RSA DSV/II board has two fixed clock frequencies.  One is the
+ * standard rate, and the other is 8 times faster.
+ */
+#define SERIAL_RSA_BAUD_BASE (921600)
+#define SERIAL_RSA_BAUD_BASE_LO (SERIAL_RSA_BAUD_BASE / 8)
+
+/*
+ * Extra serial register definitions for the internal UARTs
+ * in TI OMAP processors.
+ */
+#define OMAP1_UART1_BASE       0xfffb0000
+#define OMAP1_UART2_BASE       0xfffb0800
+#define OMAP1_UART3_BASE       0xfffb9800
+#define UART_OMAP_MDR1         0x08    /* Mode definition register */
+#define UART_OMAP_MDR2         0x09    /* Mode definition register 2 */
+#define UART_OMAP_SCR          0x10    /* Supplementary control register */
+#define UART_OMAP_SSR          0x11    /* Supplementary status register */
+#define UART_OMAP_EBLR         0x12    /* BOF length register */
+#define UART_OMAP_OSC_12M_SEL  0x13    /* OMAP1510 12MHz osc select */
+#define UART_OMAP_MVER         0x14    /* Module version register */
+#define UART_OMAP_SYSC         0x15    /* System configuration register */
+#define UART_OMAP_SYSS         0x16    /* System status register */
+#define UART_OMAP_WER          0x17    /* Wake-up enable register */
+#define UART_OMAP_TX_LVL       0x1a    /* TX FIFO level register */
+
+/*
+ * These are the definitions for the MDR1 register
+ */
+#define UART_OMAP_MDR1_16X_MODE                0x00    /* UART 16x mode */
+#define UART_OMAP_MDR1_SIR_MODE                0x01    /* SIR mode */
+#define UART_OMAP_MDR1_16X_ABAUD_MODE  0x02    /* UART 16x auto-baud */
+#define UART_OMAP_MDR1_13X_MODE                0x03    /* UART 13x mode */
+#define UART_OMAP_MDR1_MIR_MODE                0x04    /* MIR mode */
+#define UART_OMAP_MDR1_FIR_MODE                0x05    /* FIR mode */
+#define UART_OMAP_MDR1_CIR_MODE                0x06    /* CIR mode */
+#define UART_OMAP_MDR1_DISABLE         0x07    /* Disable (default state) */
+
+/*
+ * These are definitions for the Exar XR17V35X and XR17(C|D)15X
+ */
+#define UART_EXAR_8XMODE       0x88    /* 8X sampling rate select */
+#define UART_EXAR_SLEEP                0x8b    /* Sleep mode */
+#define UART_EXAR_DVID         0x8d    /* Device identification */
+
+#define UART_EXAR_FCTR         0x08    /* Feature Control Register */
+#define UART_FCTR_EXAR_IRDA    0x08    /* IrDa data encode select */
+#define UART_FCTR_EXAR_485     0x10    /* Auto 485 half duplex dir ctl */
+#define UART_FCTR_EXAR_TRGA    0x00    /* FIFO trigger table A */
+#define UART_FCTR_EXAR_TRGB    0x60    /* FIFO trigger table B */
+#define UART_FCTR_EXAR_TRGC    0x80    /* FIFO trigger table C */
+#define UART_FCTR_EXAR_TRGD    0xc0    /* FIFO trigger table D programmable */
+
+#define UART_EXAR_TXTRG                0x0a    /* Tx FIFO trigger level write-only */
+#define UART_EXAR_RXTRG                0x0b    /* Rx FIFO trigger level write-only */
+
+#endif /* _LINUX_SERIAL_REG_H */
+
diff --git a/lib/libdss-include/linux/serio.h b/lib/libdss-include/linux/serio.h
new file mode 100644 (file)
index 0000000..c13f49c
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 1999-2002 Vojtech Pavlik
+*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _SERIO_H
+#define _SERIO_H
+
+
+#include <linux/ioctl.h>
+
+#define SPIOCSTYPE     _IOW('q', 0x01, unsigned long)
+
+
+/*
+ * bit masks for use in "interrupt" flags (3rd argument)
+ */
+#define SERIO_TIMEOUT  1
+#define SERIO_PARITY   2
+#define SERIO_FRAME    4
+
+/*
+ * Serio types
+ */
+#define SERIO_XT       0x00
+#define SERIO_8042     0x01
+#define SERIO_RS232    0x02
+#define SERIO_HIL_MLC  0x03
+#define SERIO_PS_PSTHRU        0x05
+#define SERIO_8042_XL  0x06
+
+/*
+ * Serio protocols
+ */
+#define SERIO_UNKNOWN  0x00
+#define SERIO_MSC      0x01
+#define SERIO_SUN      0x02
+#define SERIO_MS       0x03
+#define SERIO_MP       0x04
+#define SERIO_MZ       0x05
+#define SERIO_MZP      0x06
+#define SERIO_MZPP     0x07
+#define SERIO_VSXXXAA  0x08
+#define SERIO_SUNKBD   0x10
+#define SERIO_WARRIOR  0x18
+#define SERIO_SPACEORB 0x19
+#define SERIO_MAGELLAN 0x1a
+#define SERIO_SPACEBALL        0x1b
+#define SERIO_GUNZE    0x1c
+#define SERIO_IFORCE   0x1d
+#define SERIO_STINGER  0x1e
+#define SERIO_NEWTON   0x1f
+#define SERIO_STOWAWAY 0x20
+#define SERIO_H3600    0x21
+#define SERIO_PS2SER   0x22
+#define SERIO_TWIDKBD  0x23
+#define SERIO_TWIDJOY  0x24
+#define SERIO_HIL      0x25
+#define SERIO_SNES232  0x26
+#define SERIO_SEMTECH  0x27
+#define SERIO_LKKBD    0x28
+#define SERIO_ELO      0x29
+#define SERIO_MICROTOUCH       0x30
+#define SERIO_PENMOUNT 0x31
+#define SERIO_TOUCHRIGHT       0x32
+#define SERIO_TOUCHWIN 0x33
+#define SERIO_TAOSEVM  0x34
+#define SERIO_FUJITSU  0x35
+#define SERIO_ZHENHUA  0x36
+#define SERIO_INEXIO   0x37
+#define SERIO_TOUCHIT213       0x38
+#define SERIO_W8001    0x39
+#define SERIO_DYNAPRO  0x3a
+#define SERIO_HAMPSHIRE        0x3b
+#define SERIO_PS2MULT  0x3c
+#define SERIO_TSC40    0x3d
+#define SERIO_WACOM_IV 0x3e
+
+#endif /* _SERIO_H */
diff --git a/lib/libdss-include/linux/shm.h b/lib/libdss-include/linux/shm.h
new file mode 100644 (file)
index 0000000..18dac98
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef _LINUX_SHM_H_
+#define _LINUX_SHM_H_
+
+#include <linux/ipc.h>
+#include <linux/errno.h>
+#include <unistd.h>
+
+/*
+ * SHMMNI, SHMMAX and SHMALL are default upper limits which can be
+ * modified by sysctl. The SHMMAX and SHMALL values have been chosen to
+ * be as large possible without facilitating scenarios where userspace
+ * causes overflows when adjusting the limits via operations of the form
+ * "retrieve current limit; add X; update limit". It is therefore not
+ * advised to make SHMMAX and SHMALL any larger. These limits are
+ * suitable for both 32 and 64-bit systems.
+ */
+#define SHMMIN 1                        /* min shared seg size (bytes) */
+#define SHMMNI 4096                     /* max num of segs system wide */
+#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */
+#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */
+#define SHMSEG SHMMNI                   /* max shared segs per process */
+
+/* Obsolete, used only for backwards compatibility and libc5 compiles */
+struct shmid_ds {
+       struct ipc_perm         shm_perm;       /* operation perms */
+       int                     shm_segsz;      /* size of segment (bytes) */
+       __kernel_time_t         shm_atime;      /* last attach time */
+       __kernel_time_t         shm_dtime;      /* last detach time */
+       __kernel_time_t         shm_ctime;      /* last change time */
+       __kernel_ipc_pid_t      shm_cpid;       /* pid of creator */
+       __kernel_ipc_pid_t      shm_lpid;       /* pid of last operator */
+       unsigned short          shm_nattch;     /* no. of current attaches */
+       unsigned short          shm_unused;     /* compatibility */
+       void                    *shm_unused2;   /* ditto - used by DIPC */
+       void                    *shm_unused3;   /* unused */
+};
+
+/* Include the definition of shmid64_ds and shminfo64 */
+#include <asm/shmbuf.h>
+
+/* permission flag for shmget */
+#define SHM_R          0400    /* or S_IRUGO from <linux/stat.h> */
+#define SHM_W          0200    /* or S_IWUGO from <linux/stat.h> */
+
+/* mode for attach */
+#define        SHM_RDONLY      010000  /* read-only access */
+#define        SHM_RND         020000  /* round attach address to SHMLBA boundary */
+#define        SHM_REMAP       040000  /* take-over region on attach */
+#define        SHM_EXEC        0100000 /* execution access */
+
+/* super user shmctl commands */
+#define SHM_LOCK       11
+#define SHM_UNLOCK     12
+
+/* ipcs ctl commands */
+#define SHM_STAT       13
+#define SHM_INFO       14
+
+/* Obsolete, used only for backwards compatibility */
+struct shminfo {
+       int shmmax;
+       int shmmin;
+       int shmmni;
+       int shmseg;
+       int shmall;
+};
+
+struct shm_info {
+       int used_ids;
+       __kernel_ulong_t shm_tot;       /* total allocated shm */
+       __kernel_ulong_t shm_rss;       /* total resident shm */
+       __kernel_ulong_t shm_swp;       /* total swapped shm */
+       __kernel_ulong_t swap_attempts;
+       __kernel_ulong_t swap_successes;
+};
+
+
+#endif /* _LINUX_SHM_H_ */
diff --git a/lib/libdss-include/linux/signal.h b/lib/libdss-include/linux/signal.h
new file mode 100644 (file)
index 0000000..94dc2e6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _LINUX_SIGNAL_H
+#define _LINUX_SIGNAL_H
+
+#include <asm/signal.h>
+#include <asm/siginfo.h>
+
+#define SS_ONSTACK     1
+#define SS_DISABLE     2
+
+#endif /* _LINUX_SIGNAL_H */
diff --git a/lib/libdss-include/linux/signalfd.h b/lib/libdss-include/linux/signalfd.h
new file mode 100644 (file)
index 0000000..90e689a
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *  include/linux/signalfd.h
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#ifndef _LINUX_SIGNALFD_H
+#define _LINUX_SIGNALFD_H
+
+#include <linux/types.h>
+/* For O_CLOEXEC and O_NONBLOCK */
+#include <linux/fcntl.h>
+
+/* Flags for signalfd4.  */
+#define SFD_CLOEXEC O_CLOEXEC
+#define SFD_NONBLOCK O_NONBLOCK
+
+struct signalfd_siginfo {
+       __u32 ssi_signo;
+       __s32 ssi_errno;
+       __s32 ssi_code;
+       __u32 ssi_pid;
+       __u32 ssi_uid;
+       __s32 ssi_fd;
+       __u32 ssi_tid;
+       __u32 ssi_band;
+       __u32 ssi_overrun;
+       __u32 ssi_trapno;
+       __s32 ssi_status;
+       __s32 ssi_int;
+       __u64 ssi_ptr;
+       __u64 ssi_utime;
+       __u64 ssi_stime;
+       __u64 ssi_addr;
+       __u16 ssi_addr_lsb;
+
+       /*
+        * Pad strcture to 128 bytes. Remember to update the
+        * pad size when you add new members. We use a fixed
+        * size structure to avoid compatibility problems with
+        * future versions, and we leave extra space for additional
+        * members. We use fixed size members because this strcture
+        * comes out of a read(2) and we really don't want to have
+        * a compat on read(2).
+        */
+       __u8 __pad[46];
+};
+
+
+
+#endif /* _LINUX_SIGNALFD_H */
diff --git a/lib/libdss-include/linux/smiapp.h b/lib/libdss-include/linux/smiapp.h
new file mode 100644 (file)
index 0000000..53938f4
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * include/uapi/linux/smiapp.h
+ *
+ * Generic driver for SMIA/SMIA++ compliant camera modules
+ *
+ * Copyright (C) 2014 Intel Corporation
+ * Contact: Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef __UAPI_LINUX_SMIAPP_H_
+#define __UAPI_LINUX_SMIAPP_H_
+
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_DISABLED                 0
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_SOLID_COLOUR             1
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_COLOUR_BARS              2
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_COLOUR_BARS_GREY         3
+#define V4L2_SMIAPP_TEST_PATTERN_MODE_PN9                      4
+
+#endif /* __UAPI_LINUX_SMIAPP_H_ */
diff --git a/lib/libdss-include/linux/snmp.h b/lib/libdss-include/linux/snmp.h
new file mode 100644 (file)
index 0000000..25a9ad8
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+ * Definitions for MIBs
+ *
+ * Author: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
+ */
+
+#ifndef _LINUX_SNMP_H
+#define _LINUX_SNMP_H
+
+/* ipstats mib definitions */
+/*
+ * RFC 1213:  MIB-II
+ * RFC 2011 (updates 1213):  SNMPv2-MIB-IP
+ * RFC 2863:  Interfaces Group MIB
+ * RFC 2465:  IPv6 MIB: General Group
+ * draft-ietf-ipv6-rfc2011-update-10.txt: MIB for IP: IP Statistics Tables
+ */
+enum
+{
+       IPSTATS_MIB_NUM = 0,
+/* frequently written fields in fast path, kept in same cache line */
+       IPSTATS_MIB_INPKTS,                     /* InReceives */
+       IPSTATS_MIB_INOCTETS,                   /* InOctets */
+       IPSTATS_MIB_INDELIVERS,                 /* InDelivers */
+       IPSTATS_MIB_OUTFORWDATAGRAMS,           /* OutForwDatagrams */
+       IPSTATS_MIB_OUTPKTS,                    /* OutRequests */
+       IPSTATS_MIB_OUTOCTETS,                  /* OutOctets */
+/* other fields */
+       IPSTATS_MIB_INHDRERRORS,                /* InHdrErrors */
+       IPSTATS_MIB_INTOOBIGERRORS,             /* InTooBigErrors */
+       IPSTATS_MIB_INNOROUTES,                 /* InNoRoutes */
+       IPSTATS_MIB_INADDRERRORS,               /* InAddrErrors */
+       IPSTATS_MIB_INUNKNOWNPROTOS,            /* InUnknownProtos */
+       IPSTATS_MIB_INTRUNCATEDPKTS,            /* InTruncatedPkts */
+       IPSTATS_MIB_INDISCARDS,                 /* InDiscards */
+       IPSTATS_MIB_OUTDISCARDS,                /* OutDiscards */
+       IPSTATS_MIB_OUTNOROUTES,                /* OutNoRoutes */
+       IPSTATS_MIB_REASMTIMEOUT,               /* ReasmTimeout */
+       IPSTATS_MIB_REASMREQDS,                 /* ReasmReqds */
+       IPSTATS_MIB_REASMOKS,                   /* ReasmOKs */
+       IPSTATS_MIB_REASMFAILS,                 /* ReasmFails */
+       IPSTATS_MIB_FRAGOKS,                    /* FragOKs */
+       IPSTATS_MIB_FRAGFAILS,                  /* FragFails */
+       IPSTATS_MIB_FRAGCREATES,                /* FragCreates */
+       IPSTATS_MIB_INMCASTPKTS,                /* InMcastPkts */
+       IPSTATS_MIB_OUTMCASTPKTS,               /* OutMcastPkts */
+       IPSTATS_MIB_INBCASTPKTS,                /* InBcastPkts */
+       IPSTATS_MIB_OUTBCASTPKTS,               /* OutBcastPkts */
+       IPSTATS_MIB_INMCASTOCTETS,              /* InMcastOctets */
+       IPSTATS_MIB_OUTMCASTOCTETS,             /* OutMcastOctets */
+       IPSTATS_MIB_INBCASTOCTETS,              /* InBcastOctets */
+       IPSTATS_MIB_OUTBCASTOCTETS,             /* OutBcastOctets */
+       IPSTATS_MIB_CSUMERRORS,                 /* InCsumErrors */
+       IPSTATS_MIB_NOECTPKTS,                  /* InNoECTPkts */
+       IPSTATS_MIB_ECT1PKTS,                   /* InECT1Pkts */
+       IPSTATS_MIB_ECT0PKTS,                   /* InECT0Pkts */
+       IPSTATS_MIB_CEPKTS,                     /* InCEPkts */
+       __IPSTATS_MIB_MAX
+};
+
+/* icmp mib definitions */
+/*
+ * RFC 1213:  MIB-II ICMP Group
+ * RFC 2011 (updates 1213):  SNMPv2 MIB for IP: ICMP group
+ */
+enum
+{
+       ICMP_MIB_NUM = 0,
+       ICMP_MIB_INMSGS,                        /* InMsgs */
+       ICMP_MIB_INERRORS,                      /* InErrors */
+       ICMP_MIB_INDESTUNREACHS,                /* InDestUnreachs */
+       ICMP_MIB_INTIMEEXCDS,                   /* InTimeExcds */
+       ICMP_MIB_INPARMPROBS,                   /* InParmProbs */
+       ICMP_MIB_INSRCQUENCHS,                  /* InSrcQuenchs */
+       ICMP_MIB_INREDIRECTS,                   /* InRedirects */
+       ICMP_MIB_INECHOS,                       /* InEchos */
+       ICMP_MIB_INECHOREPS,                    /* InEchoReps */
+       ICMP_MIB_INTIMESTAMPS,                  /* InTimestamps */
+       ICMP_MIB_INTIMESTAMPREPS,               /* InTimestampReps */
+       ICMP_MIB_INADDRMASKS,                   /* InAddrMasks */
+       ICMP_MIB_INADDRMASKREPS,                /* InAddrMaskReps */
+       ICMP_MIB_OUTMSGS,                       /* OutMsgs */
+       ICMP_MIB_OUTERRORS,                     /* OutErrors */
+       ICMP_MIB_OUTDESTUNREACHS,               /* OutDestUnreachs */
+       ICMP_MIB_OUTTIMEEXCDS,                  /* OutTimeExcds */
+       ICMP_MIB_OUTPARMPROBS,                  /* OutParmProbs */
+       ICMP_MIB_OUTSRCQUENCHS,                 /* OutSrcQuenchs */
+       ICMP_MIB_OUTREDIRECTS,                  /* OutRedirects */
+       ICMP_MIB_OUTECHOS,                      /* OutEchos */
+       ICMP_MIB_OUTECHOREPS,                   /* OutEchoReps */
+       ICMP_MIB_OUTTIMESTAMPS,                 /* OutTimestamps */
+       ICMP_MIB_OUTTIMESTAMPREPS,              /* OutTimestampReps */
+       ICMP_MIB_OUTADDRMASKS,                  /* OutAddrMasks */
+       ICMP_MIB_OUTADDRMASKREPS,               /* OutAddrMaskReps */
+       ICMP_MIB_CSUMERRORS,                    /* InCsumErrors */
+       __ICMP_MIB_MAX
+};
+
+#define __ICMPMSG_MIB_MAX 512  /* Out+In for all 8-bit ICMP types */
+
+/* icmp6 mib definitions */
+/*
+ * RFC 2466:  ICMPv6-MIB
+ */
+enum
+{
+       ICMP6_MIB_NUM = 0,
+       ICMP6_MIB_INMSGS,                       /* InMsgs */
+       ICMP6_MIB_INERRORS,                     /* InErrors */
+       ICMP6_MIB_OUTMSGS,                      /* OutMsgs */
+       ICMP6_MIB_OUTERRORS,                    /* OutErrors */
+       ICMP6_MIB_CSUMERRORS,                   /* InCsumErrors */
+       __ICMP6_MIB_MAX
+};
+
+#define __ICMP6MSG_MIB_MAX 512 /* Out+In for all 8-bit ICMPv6 types */
+
+/* tcp mib definitions */
+/*
+ * RFC 1213:  MIB-II TCP group
+ * RFC 2012 (updates 1213):  SNMPv2-MIB-TCP
+ */
+enum
+{
+       TCP_MIB_NUM = 0,
+       TCP_MIB_RTOALGORITHM,                   /* RtoAlgorithm */
+       TCP_MIB_RTOMIN,                         /* RtoMin */
+       TCP_MIB_RTOMAX,                         /* RtoMax */
+       TCP_MIB_MAXCONN,                        /* MaxConn */
+       TCP_MIB_ACTIVEOPENS,                    /* ActiveOpens */
+       TCP_MIB_PASSIVEOPENS,                   /* PassiveOpens */
+       TCP_MIB_ATTEMPTFAILS,                   /* AttemptFails */
+       TCP_MIB_ESTABRESETS,                    /* EstabResets */
+       TCP_MIB_CURRESTAB,                      /* CurrEstab */
+       TCP_MIB_INSEGS,                         /* InSegs */
+       TCP_MIB_OUTSEGS,                        /* OutSegs */
+       TCP_MIB_RETRANSSEGS,                    /* RetransSegs */
+       TCP_MIB_INERRS,                         /* InErrs */
+       TCP_MIB_OUTRSTS,                        /* OutRsts */
+       TCP_MIB_CSUMERRORS,                     /* InCsumErrors */
+       __TCP_MIB_MAX
+};
+
+/* udp mib definitions */
+/*
+ * RFC 1213:  MIB-II UDP group
+ * RFC 2013 (updates 1213):  SNMPv2-MIB-UDP
+ */
+enum
+{
+       UDP_MIB_NUM = 0,
+       UDP_MIB_INDATAGRAMS,                    /* InDatagrams */
+       UDP_MIB_NOPORTS,                        /* NoPorts */
+       UDP_MIB_INERRORS,                       /* InErrors */
+       UDP_MIB_OUTDATAGRAMS,                   /* OutDatagrams */
+       UDP_MIB_RCVBUFERRORS,                   /* RcvbufErrors */
+       UDP_MIB_SNDBUFERRORS,                   /* SndbufErrors */
+       UDP_MIB_CSUMERRORS,                     /* InCsumErrors */
+       UDP_MIB_IGNOREDMULTI,                   /* IgnoredMulti */
+       __UDP_MIB_MAX
+};
+
+/* linux mib definitions */
+enum
+{
+       LINUX_MIB_NUM = 0,
+       LINUX_MIB_SYNCOOKIESSENT,               /* SyncookiesSent */
+       LINUX_MIB_SYNCOOKIESRECV,               /* SyncookiesRecv */
+       LINUX_MIB_SYNCOOKIESFAILED,             /* SyncookiesFailed */
+       LINUX_MIB_EMBRYONICRSTS,                /* EmbryonicRsts */
+       LINUX_MIB_PRUNECALLED,                  /* PruneCalled */
+       LINUX_MIB_RCVPRUNED,                    /* RcvPruned */
+       LINUX_MIB_OFOPRUNED,                    /* OfoPruned */
+       LINUX_MIB_OUTOFWINDOWICMPS,             /* OutOfWindowIcmps */
+       LINUX_MIB_LOCKDROPPEDICMPS,             /* LockDroppedIcmps */
+       LINUX_MIB_ARPFILTER,                    /* ArpFilter */
+       LINUX_MIB_TIMEWAITED,                   /* TimeWaited */
+       LINUX_MIB_TIMEWAITRECYCLED,             /* TimeWaitRecycled */
+       LINUX_MIB_TIMEWAITKILLED,               /* TimeWaitKilled */
+       LINUX_MIB_PAWSPASSIVEREJECTED,          /* PAWSPassiveRejected */
+       LINUX_MIB_PAWSACTIVEREJECTED,           /* PAWSActiveRejected */
+       LINUX_MIB_PAWSESTABREJECTED,            /* PAWSEstabRejected */
+       LINUX_MIB_DELAYEDACKS,                  /* DelayedACKs */
+       LINUX_MIB_DELAYEDACKLOCKED,             /* DelayedACKLocked */
+       LINUX_MIB_DELAYEDACKLOST,               /* DelayedACKLost */
+       LINUX_MIB_LISTENOVERFLOWS,              /* ListenOverflows */
+       LINUX_MIB_LISTENDROPS,                  /* ListenDrops */
+       LINUX_MIB_TCPPREQUEUED,                 /* TCPPrequeued */
+       LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG,     /* TCPDirectCopyFromBacklog */
+       LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE,    /* TCPDirectCopyFromPrequeue */
+       LINUX_MIB_TCPPREQUEUEDROPPED,           /* TCPPrequeueDropped */
+       LINUX_MIB_TCPHPHITS,                    /* TCPHPHits */
+       LINUX_MIB_TCPHPHITSTOUSER,              /* TCPHPHitsToUser */
+       LINUX_MIB_TCPPUREACKS,                  /* TCPPureAcks */
+       LINUX_MIB_TCPHPACKS,                    /* TCPHPAcks */
+       LINUX_MIB_TCPRENORECOVERY,              /* TCPRenoRecovery */
+       LINUX_MIB_TCPSACKRECOVERY,              /* TCPSackRecovery */
+       LINUX_MIB_TCPSACKRENEGING,              /* TCPSACKReneging */
+       LINUX_MIB_TCPFACKREORDER,               /* TCPFACKReorder */
+       LINUX_MIB_TCPSACKREORDER,               /* TCPSACKReorder */
+       LINUX_MIB_TCPRENOREORDER,               /* TCPRenoReorder */
+       LINUX_MIB_TCPTSREORDER,                 /* TCPTSReorder */
+       LINUX_MIB_TCPFULLUNDO,                  /* TCPFullUndo */
+       LINUX_MIB_TCPPARTIALUNDO,               /* TCPPartialUndo */
+       LINUX_MIB_TCPDSACKUNDO,                 /* TCPDSACKUndo */
+       LINUX_MIB_TCPLOSSUNDO,                  /* TCPLossUndo */
+       LINUX_MIB_TCPLOSTRETRANSMIT,            /* TCPLostRetransmit */
+       LINUX_MIB_TCPRENOFAILURES,              /* TCPRenoFailures */
+       LINUX_MIB_TCPSACKFAILURES,              /* TCPSackFailures */
+       LINUX_MIB_TCPLOSSFAILURES,              /* TCPLossFailures */
+       LINUX_MIB_TCPFASTRETRANS,               /* TCPFastRetrans */
+       LINUX_MIB_TCPFORWARDRETRANS,            /* TCPForwardRetrans */
+       LINUX_MIB_TCPSLOWSTARTRETRANS,          /* TCPSlowStartRetrans */
+       LINUX_MIB_TCPTIMEOUTS,                  /* TCPTimeouts */
+       LINUX_MIB_TCPLOSSPROBES,                /* TCPLossProbes */
+       LINUX_MIB_TCPLOSSPROBERECOVERY,         /* TCPLossProbeRecovery */
+       LINUX_MIB_TCPRENORECOVERYFAIL,          /* TCPRenoRecoveryFail */
+       LINUX_MIB_TCPSACKRECOVERYFAIL,          /* TCPSackRecoveryFail */
+       LINUX_MIB_TCPSCHEDULERFAILED,           /* TCPSchedulerFailed */
+       LINUX_MIB_TCPRCVCOLLAPSED,              /* TCPRcvCollapsed */
+       LINUX_MIB_TCPDSACKOLDSENT,              /* TCPDSACKOldSent */
+       LINUX_MIB_TCPDSACKOFOSENT,              /* TCPDSACKOfoSent */
+       LINUX_MIB_TCPDSACKRECV,                 /* TCPDSACKRecv */
+       LINUX_MIB_TCPDSACKOFORECV,              /* TCPDSACKOfoRecv */
+       LINUX_MIB_TCPABORTONDATA,               /* TCPAbortOnData */
+       LINUX_MIB_TCPABORTONCLOSE,              /* TCPAbortOnClose */
+       LINUX_MIB_TCPABORTONMEMORY,             /* TCPAbortOnMemory */
+       LINUX_MIB_TCPABORTONTIMEOUT,            /* TCPAbortOnTimeout */
+       LINUX_MIB_TCPABORTONLINGER,             /* TCPAbortOnLinger */
+       LINUX_MIB_TCPABORTFAILED,               /* TCPAbortFailed */
+       LINUX_MIB_TCPMEMORYPRESSURES,           /* TCPMemoryPressures */
+       LINUX_MIB_TCPSACKDISCARD,               /* TCPSACKDiscard */
+       LINUX_MIB_TCPDSACKIGNOREDOLD,           /* TCPSACKIgnoredOld */
+       LINUX_MIB_TCPDSACKIGNOREDNOUNDO,        /* TCPSACKIgnoredNoUndo */
+       LINUX_MIB_TCPSPURIOUSRTOS,              /* TCPSpuriousRTOs */
+       LINUX_MIB_TCPMD5NOTFOUND,               /* TCPMD5NotFound */
+       LINUX_MIB_TCPMD5UNEXPECTED,             /* TCPMD5Unexpected */
+       LINUX_MIB_SACKSHIFTED,
+       LINUX_MIB_SACKMERGED,
+       LINUX_MIB_SACKSHIFTFALLBACK,
+       LINUX_MIB_TCPBACKLOGDROP,
+       LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */
+       LINUX_MIB_TCPDEFERACCEPTDROP,
+       LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */
+       LINUX_MIB_TCPTIMEWAITOVERFLOW,          /* TCPTimeWaitOverflow */
+       LINUX_MIB_TCPREQQFULLDOCOOKIES,         /* TCPReqQFullDoCookies */
+       LINUX_MIB_TCPREQQFULLDROP,              /* TCPReqQFullDrop */
+       LINUX_MIB_TCPRETRANSFAIL,               /* TCPRetransFail */
+       LINUX_MIB_TCPRCVCOALESCE,               /* TCPRcvCoalesce */
+       LINUX_MIB_TCPOFOQUEUE,                  /* TCPOFOQueue */
+       LINUX_MIB_TCPOFODROP,                   /* TCPOFODrop */
+       LINUX_MIB_TCPOFOMERGE,                  /* TCPOFOMerge */
+       LINUX_MIB_TCPCHALLENGEACK,              /* TCPChallengeACK */
+       LINUX_MIB_TCPSYNCHALLENGE,              /* TCPSYNChallenge */
+       LINUX_MIB_TCPFASTOPENACTIVE,            /* TCPFastOpenActive */
+       LINUX_MIB_TCPFASTOPENACTIVEFAIL,        /* TCPFastOpenActiveFail */
+       LINUX_MIB_TCPFASTOPENPASSIVE,           /* TCPFastOpenPassive*/
+       LINUX_MIB_TCPFASTOPENPASSIVEFAIL,       /* TCPFastOpenPassiveFail */
+       LINUX_MIB_TCPFASTOPENLISTENOVERFLOW,    /* TCPFastOpenListenOverflow */
+       LINUX_MIB_TCPFASTOPENCOOKIEREQD,        /* TCPFastOpenCookieReqd */
+       LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES, /* TCPSpuriousRtxHostQueues */
+       LINUX_MIB_BUSYPOLLRXPACKETS,            /* BusyPollRxPackets */
+       LINUX_MIB_TCPAUTOCORKING,               /* TCPAutoCorking */
+       LINUX_MIB_TCPFROMZEROWINDOWADV,         /* TCPFromZeroWindowAdv */
+       LINUX_MIB_TCPTOZEROWINDOWADV,           /* TCPToZeroWindowAdv */
+       LINUX_MIB_TCPWANTZEROWINDOWADV,         /* TCPWantZeroWindowAdv */
+       LINUX_MIB_TCPSYNRETRANS,                /* TCPSynRetrans */
+       LINUX_MIB_TCPORIGDATASENT,              /* TCPOrigDataSent */
+       LINUX_MIB_TCPHYSTARTTRAINDETECT,        /* TCPHystartTrainDetect */
+       LINUX_MIB_TCPHYSTARTTRAINCWND,          /* TCPHystartTrainCwnd */
+       LINUX_MIB_TCPHYSTARTDELAYDETECT,        /* TCPHystartDelayDetect */
+       LINUX_MIB_TCPHYSTARTDELAYCWND,          /* TCPHystartDelayCwnd */
+       LINUX_MIB_TCPACKSKIPPEDSYNRECV,         /* TCPACKSkippedSynRecv */
+       LINUX_MIB_TCPACKSKIPPEDPAWS,            /* TCPACKSkippedPAWS */
+       LINUX_MIB_TCPACKSKIPPEDSEQ,             /* TCPACKSkippedSeq */
+       LINUX_MIB_TCPACKSKIPPEDFINWAIT2,        /* TCPACKSkippedFinWait2 */
+       LINUX_MIB_TCPACKSKIPPEDTIMEWAIT,        /* TCPACKSkippedTimeWait */
+       LINUX_MIB_TCPACKSKIPPEDCHALLENGE,       /* TCPACKSkippedChallenge */
+       LINUX_MIB_TCPWINPROBE,                  /* TCPWinProbe */
+       LINUX_MIB_TCPKEEPALIVE,                 /* TCPKeepAlive */
+       LINUX_MIB_TCPMTUPFAIL,                  /* TCPMTUPFail */
+       LINUX_MIB_TCPMTUPSUCCESS,               /* TCPMTUPSuccess */
+       __LINUX_MIB_MAX
+};
+
+/* linux Xfrm mib definitions */
+enum
+{
+       LINUX_MIB_XFRMNUM = 0,
+       LINUX_MIB_XFRMINERROR,                  /* XfrmInError */
+       LINUX_MIB_XFRMINBUFFERERROR,            /* XfrmInBufferError */
+       LINUX_MIB_XFRMINHDRERROR,               /* XfrmInHdrError */
+       LINUX_MIB_XFRMINNOSTATES,               /* XfrmInNoStates */
+       LINUX_MIB_XFRMINSTATEPROTOERROR,        /* XfrmInStateProtoError */
+       LINUX_MIB_XFRMINSTATEMODEERROR,         /* XfrmInStateModeError */
+       LINUX_MIB_XFRMINSTATESEQERROR,          /* XfrmInStateSeqError */
+       LINUX_MIB_XFRMINSTATEEXPIRED,           /* XfrmInStateExpired */
+       LINUX_MIB_XFRMINSTATEMISMATCH,          /* XfrmInStateMismatch */
+       LINUX_MIB_XFRMINSTATEINVALID,           /* XfrmInStateInvalid */
+       LINUX_MIB_XFRMINTMPLMISMATCH,           /* XfrmInTmplMismatch */
+       LINUX_MIB_XFRMINNOPOLS,                 /* XfrmInNoPols */
+       LINUX_MIB_XFRMINPOLBLOCK,               /* XfrmInPolBlock */
+       LINUX_MIB_XFRMINPOLERROR,               /* XfrmInPolError */
+       LINUX_MIB_XFRMOUTERROR,                 /* XfrmOutError */
+       LINUX_MIB_XFRMOUTBUNDLEGENERROR,        /* XfrmOutBundleGenError */
+       LINUX_MIB_XFRMOUTBUNDLECHECKERROR,      /* XfrmOutBundleCheckError */
+       LINUX_MIB_XFRMOUTNOSTATES,              /* XfrmOutNoStates */
+       LINUX_MIB_XFRMOUTSTATEPROTOERROR,       /* XfrmOutStateProtoError */
+       LINUX_MIB_XFRMOUTSTATEMODEERROR,        /* XfrmOutStateModeError */
+       LINUX_MIB_XFRMOUTSTATESEQERROR,         /* XfrmOutStateSeqError */
+       LINUX_MIB_XFRMOUTSTATEEXPIRED,          /* XfrmOutStateExpired */
+       LINUX_MIB_XFRMOUTPOLBLOCK,              /* XfrmOutPolBlock */
+       LINUX_MIB_XFRMOUTPOLDEAD,               /* XfrmOutPolDead */
+       LINUX_MIB_XFRMOUTPOLERROR,              /* XfrmOutPolError */
+       LINUX_MIB_XFRMFWDHDRERROR,              /* XfrmFwdHdrError*/
+       LINUX_MIB_XFRMOUTSTATEINVALID,          /* XfrmOutStateInvalid */
+       LINUX_MIB_XFRMACQUIREERROR,             /* XfrmAcquireError */
+       __LINUX_MIB_XFRMMAX
+};
+
+#endif /* _LINUX_SNMP_H */
diff --git a/lib/libdss-include/linux/sock_diag.h b/lib/libdss-include/linux/sock_diag.h
new file mode 100644 (file)
index 0000000..024e1f4
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __SOCK_DIAG_H__
+#define __SOCK_DIAG_H__
+
+#include <linux/types.h>
+
+#define SOCK_DIAG_BY_FAMILY 20
+
+struct sock_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+};
+
+enum {
+       SK_MEMINFO_RMEM_ALLOC,
+       SK_MEMINFO_RCVBUF,
+       SK_MEMINFO_WMEM_ALLOC,
+       SK_MEMINFO_SNDBUF,
+       SK_MEMINFO_FWD_ALLOC,
+       SK_MEMINFO_WMEM_QUEUED,
+       SK_MEMINFO_OPTMEM,
+       SK_MEMINFO_BACKLOG,
+
+       SK_MEMINFO_VARS,
+};
+
+enum sknetlink_groups {
+       SKNLGRP_NONE,
+       SKNLGRP_INET_TCP_DESTROY,
+       SKNLGRP_INET_UDP_DESTROY,
+       SKNLGRP_INET6_TCP_DESTROY,
+       SKNLGRP_INET6_UDP_DESTROY,
+       __SKNLGRP_MAX,
+};
+#define SKNLGRP_MAX    (__SKNLGRP_MAX - 1)
+
+#endif /* __SOCK_DIAG_H__ */
diff --git a/lib/libdss-include/linux/socket.h b/lib/libdss-include/linux/socket.h
new file mode 100644 (file)
index 0000000..8c1e501
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _LINUX_SOCKET_H
+#define _LINUX_SOCKET_H
+
+/*
+ * Desired design of maximum size and alignment (see RFC2553)
+ */
+#define _K_SS_MAXSIZE  128     /* Implementation specific max size */
+#define _K_SS_ALIGNSIZE        (__alignof__ (struct sockaddr *))
+                               /* Implementation specific desired alignment */
+
+typedef unsigned short __kernel_sa_family_t;
+
+struct __kernel_sockaddr_storage {
+       __kernel_sa_family_t    ss_family;              /* address family */
+       /* Following field(s) are implementation specific */
+       char            __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
+                               /* space to achieve desired size, */
+                               /* _SS_MAXSIZE value minus size of ss_family */
+} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));  /* force desired alignment */
+
+#endif /* _LINUX_SOCKET_H */
diff --git a/lib/libdss-include/linux/sockios.h b/lib/libdss-include/linux/sockios.h
new file mode 100644 (file)
index 0000000..e888b1a
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions of the socket-level I/O control calls.
+ *
+ * Version:    @(#)sockios.h   1.0.2   03/09/93
+ *
+ * Authors:    Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_SOCKIOS_H
+#define _LINUX_SOCKIOS_H
+
+#include <asm/sockios.h>
+
+/* Linux-specific socket ioctls */
+#define SIOCINQ                FIONREAD
+#define SIOCOUTQ       TIOCOUTQ        /* output queue size (not sent + not acked) */
+
+/* Routing table calls. */
+#define SIOCADDRT      0x890B          /* add routing table entry      */
+#define SIOCDELRT      0x890C          /* delete routing table entry   */
+#define SIOCRTMSG      0x890D          /* call to routing system       */
+
+/* Socket configuration controls. */
+#define SIOCGIFNAME    0x8910          /* get iface name               */
+#define SIOCSIFLINK    0x8911          /* set iface channel            */
+#define SIOCGIFCONF    0x8912          /* get iface list               */
+#define SIOCGIFFLAGS   0x8913          /* get flags                    */
+#define SIOCSIFFLAGS   0x8914          /* set flags                    */
+#define SIOCGIFADDR    0x8915          /* get PA address               */
+#define SIOCSIFADDR    0x8916          /* set PA address               */
+#define SIOCGIFDSTADDR 0x8917          /* get remote PA address        */
+#define SIOCSIFDSTADDR 0x8918          /* set remote PA address        */
+#define SIOCGIFBRDADDR 0x8919          /* get broadcast PA address     */
+#define SIOCSIFBRDADDR 0x891a          /* set broadcast PA address     */
+#define SIOCGIFNETMASK 0x891b          /* get network PA mask          */
+#define SIOCSIFNETMASK 0x891c          /* set network PA mask          */
+#define SIOCGIFMETRIC  0x891d          /* get metric                   */
+#define SIOCSIFMETRIC  0x891e          /* set metric                   */
+#define SIOCGIFMEM     0x891f          /* get memory address (BSD)     */
+#define SIOCSIFMEM     0x8920          /* set memory address (BSD)     */
+#define SIOCGIFMTU     0x8921          /* get MTU size                 */
+#define SIOCSIFMTU     0x8922          /* set MTU size                 */
+#define SIOCSIFNAME    0x8923          /* set interface name */
+#define        SIOCSIFHWADDR   0x8924          /* set hardware address         */
+#define SIOCGIFENCAP   0x8925          /* get/set encapsulations       */
+#define SIOCSIFENCAP   0x8926          
+#define SIOCGIFHWADDR  0x8927          /* Get hardware address         */
+#define SIOCGIFSLAVE   0x8929          /* Driver slaving support       */
+#define SIOCSIFSLAVE   0x8930
+#define SIOCADDMULTI   0x8931          /* Multicast address lists      */
+#define SIOCDELMULTI   0x8932
+#define SIOCGIFINDEX   0x8933          /* name -> if_index mapping     */
+#define SIOGIFINDEX    SIOCGIFINDEX    /* misprint compatibility :-)   */
+#define SIOCSIFPFLAGS  0x8934          /* set/get extended flags set   */
+#define SIOCGIFPFLAGS  0x8935
+#define SIOCDIFADDR    0x8936          /* delete PA address            */
+#define        SIOCSIFHWBROADCAST      0x8937  /* set hardware broadcast addr  */
+#define SIOCGIFCOUNT   0x8938          /* get number of devices */
+
+#define SIOCGIFBR      0x8940          /* Bridging support             */
+#define SIOCSIFBR      0x8941          /* Set bridging options         */
+
+#define SIOCGIFTXQLEN  0x8942          /* Get the tx queue length      */
+#define SIOCSIFTXQLEN  0x8943          /* Set the tx queue length      */
+
+/* SIOCGIFDIVERT was:  0x8944          Frame diversion support */
+/* SIOCSIFDIVERT was:  0x8945          Set frame diversion options */
+
+#define SIOCETHTOOL    0x8946          /* Ethtool interface            */
+
+#define SIOCGMIIPHY    0x8947          /* Get address of MII PHY in use. */
+#define SIOCGMIIREG    0x8948          /* Read MII PHY register.       */
+#define SIOCSMIIREG    0x8949          /* Write MII PHY register.      */
+
+#define SIOCWANDEV     0x894A          /* get/set netdev parameters    */
+
+#define SIOCOUTQNSD    0x894B          /* output queue size (not sent only) */
+
+/* ARP cache control calls. */
+                   /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
+#define SIOCDARP       0x8953          /* delete ARP table entry       */
+#define SIOCGARP       0x8954          /* get ARP table entry          */
+#define SIOCSARP       0x8955          /* set ARP table entry          */
+
+/* RARP cache control calls. */
+#define SIOCDRARP      0x8960          /* delete RARP table entry      */
+#define SIOCGRARP      0x8961          /* get RARP table entry         */
+#define SIOCSRARP      0x8962          /* set RARP table entry         */
+
+/* Driver configuration calls */
+
+#define SIOCGIFMAP     0x8970          /* Get device parameters        */
+#define SIOCSIFMAP     0x8971          /* Set device parameters        */
+
+/* DLCI configuration calls */
+
+#define SIOCADDDLCI    0x8980          /* Create new DLCI device       */
+#define SIOCDELDLCI    0x8981          /* Delete DLCI device           */
+
+#define SIOCGIFVLAN    0x8982          /* 802.1Q VLAN support          */
+#define SIOCSIFVLAN    0x8983          /* Set 802.1Q VLAN options      */
+
+/* bonding calls */
+
+#define SIOCBONDENSLAVE        0x8990          /* enslave a device to the bond */
+#define SIOCBONDRELEASE 0x8991         /* release a slave from the bond*/
+#define SIOCBONDSETHWADDR      0x8992  /* set the hw addr of the bond  */
+#define SIOCBONDSLAVEINFOQUERY 0x8993   /* rtn info about slave state   */
+#define SIOCBONDINFOQUERY      0x8994  /* rtn info about bond state    */
+#define SIOCBONDCHANGEACTIVE   0x8995   /* update to a new active slave */
+                       
+/* bridge calls */
+#define SIOCBRADDBR     0x89a0         /* create new bridge device     */
+#define SIOCBRDELBR     0x89a1         /* remove bridge device         */
+#define SIOCBRADDIF    0x89a2          /* add interface to bridge      */
+#define SIOCBRDELIF    0x89a3          /* remove interface from bridge */
+
+/* hardware time stamping: parameters in linux/net_tstamp.h */
+#define SIOCSHWTSTAMP  0x89b0          /* set and get config           */
+#define SIOCGHWTSTAMP  0x89b1          /* get config                   */
+
+/* Device private ioctl calls */
+
+/*
+ *     These 16 ioctls are available to devices via the do_ioctl() device
+ *     vector. Each device should include this file and redefine these names
+ *     as their own. Because these are device dependent it is a good idea
+ *     _NOT_ to issue them to random objects and hope.
+ *
+ *     THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM
+ */
+#define SIOCDEVPRIVATE 0x89F0  /* to 89FF */
+
+/*
+ *     These 16 ioctl calls are protocol private
+ */
+#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
+#endif /* _LINUX_SOCKIOS_H */
diff --git a/lib/libdss-include/linux/sonet.h b/lib/libdss-include/linux/sonet.h
new file mode 100644 (file)
index 0000000..77c834a
--- /dev/null
@@ -0,0 +1,60 @@
+/* sonet.h - SONET/SHD physical layer control */
+/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
+
+#ifndef LINUX_SONET_H
+#define LINUX_SONET_H
+
+#define __SONET_ITEMS \
+    __HANDLE_ITEM(section_bip);        /* section parity errors (B1) */ \
+    __HANDLE_ITEM(line_bip);           /* line parity errors (B2) */ \
+    __HANDLE_ITEM(path_bip);           /* path parity errors (B3) */ \
+    __HANDLE_ITEM(line_febe);          /* line parity errors at remote */ \
+    __HANDLE_ITEM(path_febe);          /* path parity errors at remote */ \
+    __HANDLE_ITEM(corr_hcs);           /* correctable header errors */ \
+    __HANDLE_ITEM(uncorr_hcs);         /* uncorrectable header errors */ \
+    __HANDLE_ITEM(tx_cells);           /* cells sent */ \
+    __HANDLE_ITEM(rx_cells);           /* cells received */
+
+struct sonet_stats {
+#define __HANDLE_ITEM(i) int i
+       __SONET_ITEMS
+#undef __HANDLE_ITEM
+} __attribute__ ((packed));
+
+
+#define SONET_GETSTAT  _IOR('a',ATMIOC_PHYTYP,struct sonet_stats)
+                                       /* get statistics */
+#define SONET_GETSTATZ _IOR('a',ATMIOC_PHYTYP+1,struct sonet_stats)
+                                       /* ... and zero counters */
+#define SONET_SETDIAG  _IOWR('a',ATMIOC_PHYTYP+2,int)
+                                       /* set error insertion */
+#define SONET_CLRDIAG  _IOWR('a',ATMIOC_PHYTYP+3,int)
+                                       /* clear error insertion */
+#define SONET_GETDIAG  _IOR('a',ATMIOC_PHYTYP+4,int)
+                                       /* query error insertion */
+#define SONET_SETFRAMING _IOW('a',ATMIOC_PHYTYP+5,int)
+                                       /* set framing mode (SONET/SDH) */
+#define SONET_GETFRAMING _IOR('a',ATMIOC_PHYTYP+6,int)
+                                       /* get framing mode */
+#define SONET_GETFRSENSE _IOR('a',ATMIOC_PHYTYP+7, \
+  unsigned char[SONET_FRSENSE_SIZE])   /* get framing sense information */
+
+#define SONET_INS_SBIP   1             /* section BIP */
+#define SONET_INS_LBIP   2             /* line BIP */
+#define SONET_INS_PBIP   4             /* path BIP */
+#define SONET_INS_FRAME          8             /* out of frame */
+#define SONET_INS_LOS   16             /* set line to zero */
+#define SONET_INS_LAIS  32             /* line alarm indication signal */
+#define SONET_INS_PAIS  64             /* path alarm indication signal */
+#define SONET_INS_HCS  128             /* insert HCS error */
+
+#define SONET_FRAME_SONET 0            /* SONET STS-3 framing */
+#define SONET_FRAME_SDH   1            /* SDH STM-1 framing */
+
+#define SONET_FRSENSE_SIZE 6           /* C1[3],H1[3] (0xff for unknown) */
+
+
+
+#endif /* LINUX_SONET_H */
diff --git a/lib/libdss-include/linux/sonypi.h b/lib/libdss-include/linux/sonypi.h
new file mode 100644 (file)
index 0000000..1c0a25f
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Sony Programmable I/O Control Device driver for VAIO
+ *
+ * Copyright (C) 2001-2005 Stelian Pop <stelian@popies.net>
+ *
+ * Copyright (C) 2005 Narayanan R S <nars@kadamba.org>
+
+ * Copyright (C) 2001-2002 Alcôve <www.alcove.com>
+ *
+ * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au>
+ *
+ * Copyright (C) 2001 Junichi Morita <jun1m@mars.dti.ne.jp>
+ *
+ * Copyright (C) 2000 Takaya Kinjo <t-kinjo@tc4.so-net.ne.jp>
+ *
+ * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com>
+ *
+ * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef _SONYPI_H_
+#define _SONYPI_H_
+
+#include <linux/types.h>
+
+/* events the user application reading /dev/sonypi can use */
+
+#define SONYPI_EVENT_IGNORE                     0
+#define SONYPI_EVENT_JOGDIAL_DOWN               1
+#define SONYPI_EVENT_JOGDIAL_UP                         2
+#define SONYPI_EVENT_JOGDIAL_DOWN_PRESSED       3
+#define SONYPI_EVENT_JOGDIAL_UP_PRESSED                 4
+#define SONYPI_EVENT_JOGDIAL_PRESSED            5
+#define SONYPI_EVENT_JOGDIAL_RELEASED           6      /* obsolete */
+#define SONYPI_EVENT_CAPTURE_PRESSED            7
+#define SONYPI_EVENT_CAPTURE_RELEASED           8      /* obsolete */
+#define SONYPI_EVENT_CAPTURE_PARTIALPRESSED     9
+#define SONYPI_EVENT_CAPTURE_PARTIALRELEASED   10
+#define SONYPI_EVENT_FNKEY_ESC                 11
+#define SONYPI_EVENT_FNKEY_F1                  12
+#define SONYPI_EVENT_FNKEY_F2                  13
+#define SONYPI_EVENT_FNKEY_F3                  14
+#define SONYPI_EVENT_FNKEY_F4                  15
+#define SONYPI_EVENT_FNKEY_F5                  16
+#define SONYPI_EVENT_FNKEY_F6                  17
+#define SONYPI_EVENT_FNKEY_F7                  18
+#define SONYPI_EVENT_FNKEY_F8                  19
+#define SONYPI_EVENT_FNKEY_F9                  20
+#define SONYPI_EVENT_FNKEY_F10                 21
+#define SONYPI_EVENT_FNKEY_F11                 22
+#define SONYPI_EVENT_FNKEY_F12                 23
+#define SONYPI_EVENT_FNKEY_1                   24
+#define SONYPI_EVENT_FNKEY_2                   25
+#define SONYPI_EVENT_FNKEY_D                   26
+#define SONYPI_EVENT_FNKEY_E                   27
+#define SONYPI_EVENT_FNKEY_F                   28
+#define SONYPI_EVENT_FNKEY_S                   29
+#define SONYPI_EVENT_FNKEY_B                   30
+#define SONYPI_EVENT_BLUETOOTH_PRESSED         31
+#define SONYPI_EVENT_PKEY_P1                   32
+#define SONYPI_EVENT_PKEY_P2                   33
+#define SONYPI_EVENT_PKEY_P3                   34
+#define SONYPI_EVENT_BACK_PRESSED              35
+#define SONYPI_EVENT_LID_CLOSED                        36
+#define SONYPI_EVENT_LID_OPENED                        37
+#define SONYPI_EVENT_BLUETOOTH_ON              38
+#define SONYPI_EVENT_BLUETOOTH_OFF             39
+#define SONYPI_EVENT_HELP_PRESSED              40
+#define SONYPI_EVENT_FNKEY_ONLY                        41
+#define SONYPI_EVENT_JOGDIAL_FAST_DOWN         42
+#define SONYPI_EVENT_JOGDIAL_FAST_UP           43
+#define SONYPI_EVENT_JOGDIAL_FAST_DOWN_PRESSED 44
+#define SONYPI_EVENT_JOGDIAL_FAST_UP_PRESSED   45
+#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN                46
+#define SONYPI_EVENT_JOGDIAL_VFAST_UP          47
+#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN_PRESSED        48
+#define SONYPI_EVENT_JOGDIAL_VFAST_UP_PRESSED  49
+#define SONYPI_EVENT_ZOOM_PRESSED              50
+#define SONYPI_EVENT_THUMBPHRASE_PRESSED       51
+#define SONYPI_EVENT_MEYE_FACE                 52
+#define SONYPI_EVENT_MEYE_OPPOSITE             53
+#define SONYPI_EVENT_MEMORYSTICK_INSERT                54
+#define SONYPI_EVENT_MEMORYSTICK_EJECT         55
+#define SONYPI_EVENT_ANYBUTTON_RELEASED                56
+#define SONYPI_EVENT_BATTERY_INSERT            57
+#define SONYPI_EVENT_BATTERY_REMOVE            58
+#define SONYPI_EVENT_FNKEY_RELEASED            59
+#define SONYPI_EVENT_WIRELESS_ON               60
+#define SONYPI_EVENT_WIRELESS_OFF              61
+#define SONYPI_EVENT_ZOOM_IN_PRESSED           62
+#define SONYPI_EVENT_ZOOM_OUT_PRESSED          63
+#define SONYPI_EVENT_CD_EJECT_PRESSED          64
+#define SONYPI_EVENT_MODEKEY_PRESSED           65
+#define SONYPI_EVENT_PKEY_P4                   66
+#define SONYPI_EVENT_PKEY_P5                   67
+#define SONYPI_EVENT_SETTINGKEY_PRESSED                68
+#define SONYPI_EVENT_VOLUME_INC_PRESSED                69
+#define SONYPI_EVENT_VOLUME_DEC_PRESSED                70
+#define SONYPI_EVENT_BRIGHTNESS_PRESSED                71
+#define SONYPI_EVENT_MEDIA_PRESSED             72
+#define SONYPI_EVENT_VENDOR_PRESSED            73
+
+/* get/set brightness */
+#define SONYPI_IOCGBRT         _IOR('v', 0, __u8)
+#define SONYPI_IOCSBRT         _IOW('v', 0, __u8)
+
+/* get battery full capacity/remaining capacity */
+#define SONYPI_IOCGBAT1CAP     _IOR('v', 2, __u16)
+#define SONYPI_IOCGBAT1REM     _IOR('v', 3, __u16)
+#define SONYPI_IOCGBAT2CAP     _IOR('v', 4, __u16)
+#define SONYPI_IOCGBAT2REM     _IOR('v', 5, __u16)
+
+/* get battery flags: battery1/battery2/ac adapter present */
+#define SONYPI_BFLAGS_B1       0x01
+#define SONYPI_BFLAGS_B2       0x02
+#define SONYPI_BFLAGS_AC       0x04
+#define SONYPI_IOCGBATFLAGS    _IOR('v', 7, __u8)
+
+/* get/set bluetooth subsystem state on/off */
+#define SONYPI_IOCGBLUE                _IOR('v', 8, __u8)
+#define SONYPI_IOCSBLUE                _IOW('v', 9, __u8)
+
+/* get/set fan state on/off */
+#define SONYPI_IOCGFAN         _IOR('v', 10, __u8)
+#define SONYPI_IOCSFAN         _IOW('v', 11, __u8)
+
+/* get temperature (C) */
+#define SONYPI_IOCGTEMP                _IOR('v', 12, __u8)
+
+
+#endif /* _SONYPI_H_ */
diff --git a/lib/libdss-include/linux/sound.h b/lib/libdss-include/linux/sound.h
new file mode 100644 (file)
index 0000000..a1d0682
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _LINUX_SOUND_H
+#define _LINUX_SOUND_H
+
+/*
+ * Minor numbers for the sound driver.
+ */
+
+#include <linux/fs.h>
+
+#define SND_DEV_CTL            0       /* Control port /dev/mixer */
+#define SND_DEV_SEQ            1       /* Sequencer output /dev/sequencer (FM
+                                               synthesizer and MIDI output) */
+#define SND_DEV_MIDIN          2       /* Raw midi access */
+#define SND_DEV_DSP            3       /* Digitized voice /dev/dsp */
+#define SND_DEV_AUDIO          4       /* Sparc compatible /dev/audio */
+#define SND_DEV_DSP16          5       /* Like /dev/dsp but 16 bits/sample */
+/* #define SND_DEV_STATUS      6 */    /* /dev/sndstat (obsolete) */
+#define SND_DEV_UNUSED         6
+#define SND_DEV_AWFM           7       /* Reserved */
+#define SND_DEV_SEQ2           8       /* /dev/sequencer, level 2 interface */
+/* #define SND_DEV_SNDPROC     9 */    /* /dev/sndproc for programmable devices (not used) */
+/* #define SND_DEV_DMMIDI      9 */
+#define SND_DEV_SYNTH          9       /* Raw synth access /dev/synth (same as /dev/dmfm) */
+#define SND_DEV_DMFM           10      /* Raw synth access /dev/dmfm */
+#define SND_DEV_UNKNOWN11      11
+#define SND_DEV_ADSP           12      /* Like /dev/dsp (obsolete) */
+#define SND_DEV_AMIDI          13      /* Like /dev/midi (obsolete) */
+#define SND_DEV_ADMMIDI                14      /* Like /dev/dmmidi (onsolete) */
+
+
+#endif /* _LINUX_SOUND_H */
diff --git a/lib/libdss-include/linux/soundcard.h b/lib/libdss-include/linux/soundcard.h
new file mode 100644 (file)
index 0000000..c5abf86
--- /dev/null
@@ -0,0 +1,1276 @@
+/*
+ * Copyright by Hannu Savolainen 1993-1997
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer. 2.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef SOUNDCARD_H
+#define SOUNDCARD_H
+
+
+/*
+ * OSS interface version. With versions earlier than 3.6 this value is
+ * an integer with value less than 361. In versions 3.6 and later
+ * it's a six digit hexadecimal value. For example value
+ * of 0x030600 represents OSS version 3.6.0.
+ * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
+ * the currently active driver.
+ */
+#define SOUND_VERSION  0x030802
+#define OPEN_SOUND_SYSTEM
+
+/* In Linux we need to be prepared for cross compiling */
+#include <linux/ioctl.h>
+
+/* Endian macros. */
+#  include <endian.h>
+
+/*
+ *     Supported card ID numbers (Should be somewhere else?)
+ */
+
+#define SNDCARD_ADLIB          1
+#define SNDCARD_SB             2
+#define SNDCARD_PAS            3
+#define SNDCARD_GUS            4
+#define SNDCARD_MPU401         5
+#define SNDCARD_SB16           6
+#define SNDCARD_SB16MIDI       7
+#define SNDCARD_UART6850       8
+#define SNDCARD_GUS16          9
+#define SNDCARD_MSS            10
+#define SNDCARD_PSS            11
+#define SNDCARD_SSCAPE         12
+#define SNDCARD_PSS_MPU        13
+#define SNDCARD_PSS_MSS        14
+#define SNDCARD_SSCAPE_MSS     15
+#define SNDCARD_TRXPRO         16
+#define SNDCARD_TRXPRO_SB      17
+#define SNDCARD_TRXPRO_MPU     18
+#define SNDCARD_MAD16          19
+#define SNDCARD_MAD16_MPU      20
+#define SNDCARD_CS4232         21
+#define SNDCARD_CS4232_MPU     22
+#define SNDCARD_MAUI           23
+#define SNDCARD_PSEUDO_MSS     24
+#define SNDCARD_GUSPNP         25
+#define SNDCARD_UART401                26
+/* Sound card numbers 27 to N are reserved. Don't add more numbers here. */
+
+/***********************************
+ * IOCTL Commands for /dev/sequencer
+ */
+
+#ifndef _SIOWR
+#if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
+/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
+#define        SIOCPARM_MASK   IOCPARM_MASK
+#define        SIOC_VOID       IOC_VOID
+#define        SIOC_OUT        IOC_OUT
+#define        SIOC_IN         IOC_IN
+#define        SIOC_INOUT      IOC_INOUT
+#define _SIOC_SIZE     _IOC_SIZE
+#define _SIOC_DIR      _IOC_DIR
+#define _SIOC_NONE     _IOC_NONE
+#define _SIOC_READ     _IOC_READ
+#define _SIOC_WRITE    _IOC_WRITE
+#define        _SIO            _IO
+#define        _SIOR           _IOR
+#define        _SIOW           _IOW
+#define        _SIOWR          _IOWR
+#else
+
+/* Ioctl's have the command encoded in the lower word,
+ * and the size of any in or out parameters in the upper
+ * word.  The high 2 bits of the upper word are used
+ * to encode the in/out status of the parameter; for now
+ * we restrict parameters to at most 8191 bytes.
+ */
+/* #define     SIOCTYPE                (0xff<<8) */
+#define        SIOCPARM_MASK   0x1fff          /* parameters must be < 8192 bytes */
+#define        SIOC_VOID       0x00000000      /* no parameters */
+#define        SIOC_OUT        0x20000000      /* copy out parameters */
+#define        SIOC_IN         0x40000000      /* copy in parameters */
+#define        SIOC_INOUT      (SIOC_IN|SIOC_OUT)
+/* the 0x20000000 is so we can distinguish new ioctl's from old */
+#define        _SIO(x,y)       ((int)(SIOC_VOID|(x<<8)|y))
+#define        _SIOR(x,y,t)    ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define        _SIOW(x,y,t)    ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+/* this should be _SIORW, but stdio got there first */
+#define        _SIOWR(x,y,t)   ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define _SIOC_SIZE(x)  ((x>>16)&SIOCPARM_MASK) 
+#define _SIOC_DIR(x)   (x & 0xf0000000)
+#define _SIOC_NONE     SIOC_VOID
+#define _SIOC_READ     SIOC_OUT
+#define _SIOC_WRITE    SIOC_IN
+#  endif /* _IOWR */
+#endif  /* !_SIOWR */
+
+#define SNDCTL_SEQ_RESET               _SIO  ('Q', 0)
+#define SNDCTL_SEQ_SYNC                        _SIO  ('Q', 1)
+#define SNDCTL_SYNTH_INFO              _SIOWR('Q', 2, struct synth_info)
+#define SNDCTL_SEQ_CTRLRATE            _SIOWR('Q', 3, int)     /* Set/get timer resolution (HZ) */
+#define SNDCTL_SEQ_GETOUTCOUNT         _SIOR ('Q', 4, int)
+#define SNDCTL_SEQ_GETINCOUNT          _SIOR ('Q', 5, int)
+#define SNDCTL_SEQ_PERCMODE            _SIOW ('Q', 6, int)
+#define SNDCTL_FM_LOAD_INSTR           _SIOW ('Q', 7, struct sbi_instrument)   /* Obsolete. Don't use!!!!!! */
+#define SNDCTL_SEQ_TESTMIDI            _SIOW ('Q', 8, int)
+#define SNDCTL_SEQ_RESETSAMPLES                _SIOW ('Q', 9, int)
+#define SNDCTL_SEQ_NRSYNTHS            _SIOR ('Q',10, int)
+#define SNDCTL_SEQ_NRMIDIS             _SIOR ('Q',11, int)
+#define SNDCTL_MIDI_INFO               _SIOWR('Q',12, struct midi_info)
+#define SNDCTL_SEQ_THRESHOLD           _SIOW ('Q',13, int)
+#define SNDCTL_SYNTH_MEMAVL            _SIOWR('Q',14, int)     /* in=dev#, out=memsize */
+#define SNDCTL_FM_4OP_ENABLE           _SIOW ('Q',15, int)     /* in=dev# */
+#define SNDCTL_SEQ_PANIC               _SIO  ('Q',17)
+#define SNDCTL_SEQ_OUTOFBAND           _SIOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SEQ_GETTIME             _SIOR ('Q',19, int)
+#define SNDCTL_SYNTH_ID                        _SIOWR('Q',20, struct synth_info)
+#define SNDCTL_SYNTH_CONTROL           _SIOWR('Q',21, struct synth_control)
+#define SNDCTL_SYNTH_REMOVESAMPLE      _SIOWR('Q',22, struct remove_sample)
+
+typedef struct synth_control
+{
+       int devno;      /* Synthesizer # */
+       char data[4000]; /* Device spesific command/data record */
+}synth_control;
+
+typedef struct remove_sample
+{
+       int devno;      /* Synthesizer # */
+       int bankno;     /* MIDI bank # (0=General MIDI) */
+       int instrno;    /* MIDI instrument number */
+} remove_sample;
+
+typedef struct seq_event_rec {
+               unsigned char arr[8];
+} seq_event_rec;
+
+#define SNDCTL_TMR_TIMEBASE            _SIOWR('T', 1, int)
+#define SNDCTL_TMR_START               _SIO  ('T', 2)
+#define SNDCTL_TMR_STOP                        _SIO  ('T', 3)
+#define SNDCTL_TMR_CONTINUE            _SIO  ('T', 4)
+#define SNDCTL_TMR_TEMPO               _SIOWR('T', 5, int)
+#define SNDCTL_TMR_SOURCE              _SIOWR('T', 6, int)
+#      define TMR_INTERNAL             0x00000001
+#      define TMR_EXTERNAL             0x00000002
+#              define TMR_MODE_MIDI    0x00000010
+#              define TMR_MODE_FSK     0x00000020
+#              define TMR_MODE_CLS     0x00000040
+#              define TMR_MODE_SMPTE   0x00000080
+#define SNDCTL_TMR_METRONOME           _SIOW ('T', 7, int)
+#define SNDCTL_TMR_SELECT              _SIOW ('T', 8, int)
+
+/*
+ * Some big endian/little endian handling macros
+ */
+
+#define _LINUX_PATCHKEY_H_INDIRECT
+#include <linux/patchkey.h>
+#undef _LINUX_PATCHKEY_H_INDIRECT
+
+# if defined(__BYTE_ORDER)
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#    define AFMT_S16_NE AFMT_S16_BE
+#  elif __BYTE_ORDER == __LITTLE_ENDIAN
+#    define AFMT_S16_NE AFMT_S16_LE
+#  else
+#    error "could not determine byte order"
+#  endif
+# endif
+
+/*
+ *     Sample loading mechanism for internal synthesizers (/dev/sequencer)
+ *     The following patch_info structure has been designed to support
+ *     Gravis UltraSound. It tries to be universal format for uploading
+ *     sample based patches but is probably too limited.
+ *
+ *      (PBD) As Hannu guessed, the GUS structure is too limited for 
+ *      the WaveFront, but this is the right place for a constant definition.
+ */
+
+struct patch_info {
+               unsigned short key;             /* Use WAVE_PATCH here */
+#define WAVE_PATCH        _PATCHKEY(0x04)
+#define GUS_PATCH         WAVE_PATCH
+#define WAVEFRONT_PATCH    _PATCHKEY(0x06)
+
+               short device_no;        /* Synthesizer number */
+               short instr_no;         /* Midi pgm# */
+
+               unsigned int mode;
+/*
+ * The least significant byte has the same format than the GUS .PAT
+ * files
+ */
+#define WAVE_16_BITS   0x01    /* bit 0 = 8 or 16 bit wave data. */
+#define WAVE_UNSIGNED  0x02    /* bit 1 = Signed - Unsigned data. */
+#define WAVE_LOOPING   0x04    /* bit 2 = looping enabled-1. */
+#define WAVE_BIDIR_LOOP        0x08    /* bit 3 = Set is bidirectional looping. */
+#define WAVE_LOOP_BACK 0x10    /* bit 4 = Set is looping backward. */
+#define WAVE_SUSTAIN_ON        0x20    /* bit 5 = Turn sustaining on. (Env. pts. 3)*/
+#define WAVE_ENVELOPES 0x40    /* bit 6 = Enable envelopes - 1 */
+#define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
+                               /*      (use the env_rate/env_offs fields). */
+/* Linux specific bits */
+#define WAVE_VIBRATO   0x00010000      /* The vibrato info is valid */
+#define WAVE_TREMOLO   0x00020000      /* The tremolo info is valid */
+#define WAVE_SCALE     0x00040000      /* The scaling info is valid */
+#define WAVE_FRACTIONS 0x00080000      /* Fraction information is valid */
+/* Reserved bits */
+#define WAVE_ROM       0x40000000      /* For future use */
+#define WAVE_MULAW     0x20000000      /* For future use */
+/* Other bits must be zeroed */
+
+               int len;        /* Size of the wave data in bytes */
+               int loop_start, loop_end; /* Byte offsets from the beginning */
+
+/* 
+ * The base_freq and base_note fields are used when computing the
+ * playback speed for a note. The base_note defines the tone frequency
+ * which is heard if the sample is played using the base_freq as the
+ * playback speed.
+ *
+ * The low_note and high_note fields define the minimum and maximum note
+ * frequencies for which this sample is valid. It is possible to define
+ * more than one samples for an instrument number at the same time. The
+ * low_note and high_note fields are used to select the most suitable one.
+ *
+ * The fields base_note, high_note and low_note should contain
+ * the note frequency multiplied by 1000. For example value for the
+ * middle A is 440*1000.
+ */
+
+               unsigned int base_freq;
+               unsigned int base_note;
+               unsigned int high_note;
+               unsigned int low_note;
+               int panning;    /* -128=left, 127=right */
+               int detuning;
+
+/*     New fields introduced in version 1.99.5 */
+
+       /* Envelope. Enabled by mode bit WAVE_ENVELOPES */
+               unsigned char   env_rate[ 6 ];   /* GUS HW ramping rate */
+               unsigned char   env_offset[ 6 ]; /* 255 == 100% */
+
+       /* 
+        * The tremolo, vibrato and scale info are not supported yet.
+        * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
+        * WAVE_SCALE
+        */
+
+               unsigned char   tremolo_sweep;
+               unsigned char   tremolo_rate;
+               unsigned char   tremolo_depth;
+       
+               unsigned char   vibrato_sweep;
+               unsigned char   vibrato_rate;
+               unsigned char   vibrato_depth;
+
+               int             scale_frequency;
+               unsigned int    scale_factor;           /* from 0 to 2048 or 0 to 2 */
+       
+               int             volume;
+               int             fractions;
+               int             reserved1;
+               int             spare[2];
+               char data[1];   /* The waveform data starts here */
+       };
+
+struct sysex_info {
+               short key;              /* Use SYSEX_PATCH or MAUI_PATCH here */
+#define SYSEX_PATCH    _PATCHKEY(0x05)
+#define MAUI_PATCH     _PATCHKEY(0x06)
+               short device_no;        /* Synthesizer number */
+               int len;        /* Size of the sysex data in bytes */
+               unsigned char data[1];  /* Sysex data starts here */
+       };
+
+/*
+ * /dev/sequencer input events.
+ *
+ * The data written to the /dev/sequencer is a stream of events. Events
+ * are records of 4 or 8 bytes. The first byte defines the size. 
+ * Any number of events can be written with a write call. There
+ * is a set of macros for sending these events. Use these macros if you
+ * want to maximize portability of your program.
+ *
+ * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
+ * (All input events are currently 4 bytes long. Be prepared to support
+ * 8 byte events also. If you receive any event having first byte >= 128,
+ * it's a 8 byte event.
+ *
+ * The events are documented at the end of this file.
+ *
+ * Normal events (4 bytes)
+ * There is also a 8 byte version of most of the 4 byte events. The
+ * 8 byte one is recommended.
+ */
+#define SEQ_NOTEOFF            0
+#define SEQ_FMNOTEOFF          SEQ_NOTEOFF     /* Just old name */
+#define SEQ_NOTEON             1
+#define        SEQ_FMNOTEON            SEQ_NOTEON
+#define SEQ_WAIT               TMR_WAIT_ABS
+#define SEQ_PGMCHANGE          3
+#define SEQ_FMPGMCHANGE                SEQ_PGMCHANGE
+#define SEQ_SYNCTIMER          TMR_START
+#define SEQ_MIDIPUTC           5
+#define SEQ_DRUMON             6       /*** OBSOLETE ***/
+#define SEQ_DRUMOFF            7       /*** OBSOLETE ***/
+#define SEQ_ECHO               TMR_ECHO        /* For synching programs with output */
+#define SEQ_AFTERTOUCH         9
+#define SEQ_CONTROLLER         10
+
+/*******************************************
+ *     Midi controller numbers
+ *******************************************
+ * Controllers 0 to 31 (0x00 to 0x1f) and
+ * 32 to 63 (0x20 to 0x3f) are continuous
+ * controllers.
+ * In the MIDI 1.0 these controllers are sent using
+ * two messages. Controller numbers 0 to 31 are used
+ * to send the MSB and the controller numbers 32 to 63
+ * are for the LSB. Note that just 7 bits are used in MIDI bytes.
+ */
+
+#define           CTL_BANK_SELECT              0x00
+#define           CTL_MODWHEEL                 0x01
+#define    CTL_BREATH                  0x02
+/*             undefined               0x03 */
+#define    CTL_FOOT                    0x04
+#define    CTL_PORTAMENTO_TIME         0x05
+#define    CTL_DATA_ENTRY              0x06
+#define    CTL_MAIN_VOLUME             0x07
+#define    CTL_BALANCE                 0x08
+/*             undefined               0x09 */
+#define    CTL_PAN                     0x0a
+#define    CTL_EXPRESSION              0x0b
+/*             undefined               0x0c */
+/*             undefined               0x0d */
+/*             undefined               0x0e */
+/*             undefined               0x0f */
+#define    CTL_GENERAL_PURPOSE1        0x10
+#define    CTL_GENERAL_PURPOSE2        0x11
+#define    CTL_GENERAL_PURPOSE3        0x12
+#define    CTL_GENERAL_PURPOSE4        0x13
+/*             undefined               0x14 - 0x1f */
+
+/*             undefined               0x20 */
+/* The controller numbers 0x21 to 0x3f are reserved for the */
+/* least significant bytes of the controllers 0x00 to 0x1f. */
+/* These controllers are not recognised by the driver. */
+
+/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
+/* 0=OFF and 127=ON (intermediate values are possible) */
+#define    CTL_DAMPER_PEDAL            0x40
+#define    CTL_SUSTAIN                 0x40    /* Alias */
+#define    CTL_HOLD                    0x40    /* Alias */
+#define    CTL_PORTAMENTO              0x41
+#define    CTL_SOSTENUTO               0x42
+#define    CTL_SOFT_PEDAL              0x43
+/*             undefined               0x44 */
+#define    CTL_HOLD2                   0x45
+/*             undefined               0x46 - 0x4f */
+
+#define    CTL_GENERAL_PURPOSE5        0x50
+#define    CTL_GENERAL_PURPOSE6        0x51
+#define    CTL_GENERAL_PURPOSE7        0x52
+#define    CTL_GENERAL_PURPOSE8        0x53
+/*             undefined               0x54 - 0x5a */
+#define    CTL_EXT_EFF_DEPTH           0x5b
+#define    CTL_TREMOLO_DEPTH           0x5c
+#define    CTL_CHORUS_DEPTH            0x5d
+#define    CTL_DETUNE_DEPTH            0x5e
+#define    CTL_CELESTE_DEPTH           0x5e    /* Alias for the above one */
+#define    CTL_PHASER_DEPTH            0x5f
+#define    CTL_DATA_INCREMENT          0x60
+#define    CTL_DATA_DECREMENT          0x61
+#define    CTL_NONREG_PARM_NUM_LSB     0x62
+#define    CTL_NONREG_PARM_NUM_MSB     0x63
+#define    CTL_REGIST_PARM_NUM_LSB     0x64
+#define    CTL_REGIST_PARM_NUM_MSB     0x65
+/*             undefined               0x66 - 0x78 */
+/*             reserved                0x79 - 0x7f */
+
+/* Pseudo controllers (not midi compatible) */
+#define    CTRL_PITCH_BENDER           255
+#define    CTRL_PITCH_BENDER_RANGE     254
+#define    CTRL_EXPRESSION             253     /* Obsolete */
+#define    CTRL_MAIN_VOLUME            252     /* Obsolete */
+#define SEQ_BALANCE            11
+#define SEQ_VOLMODE             12
+
+/*
+ * Volume mode decides how volumes are used
+ */
+
+#define VOL_METHOD_ADAGIO      1
+#define VOL_METHOD_LINEAR      2
+
+/*
+ * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
+ *      input events.
+ */
+
+/*
+ * Event codes 0xf0 to 0xfc are reserved for future extensions.
+ */
+
+#define SEQ_FULLSIZE           0xfd    /* Long events */
+/*
+ *     SEQ_FULLSIZE events are used for loading patches/samples to the
+ *     synthesizer devices. These events are passed directly to the driver
+ *     of the associated synthesizer device. There is no limit to the size
+ *     of the extended events. These events are not queued but executed
+ *     immediately when the write() is called (execution can take several
+ *     seconds of time). 
+ *
+ *     When a SEQ_FULLSIZE message is written to the device, it must
+ *     be written using exactly one write() call. Other events cannot
+ *     be mixed to the same write.
+ *     
+ *     For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the 
+ *     /dev/sequencer. Don't write other data together with the instrument structure
+ *     Set the key field of the structure to FM_PATCH. The device field is used to
+ *     route the patch to the corresponding device.
+ *
+ *     For wave table use struct patch_info. Initialize the key field
+ *      to WAVE_PATCH.
+ */
+#define SEQ_PRIVATE            0xfe    /* Low level HW dependent events (8 bytes) */
+#define SEQ_EXTENDED           0xff    /* Extended events (8 bytes) OBSOLETE */
+
+/*
+ * Record for FM patches
+ */
+
+typedef unsigned char sbi_instr_data[32];
+
+struct sbi_instrument {
+               unsigned short  key;    /* FM_PATCH or OPL3_PATCH */
+#define FM_PATCH       _PATCHKEY(0x01)
+#define OPL3_PATCH     _PATCHKEY(0x03)
+               short           device;         /*      Synth# (0-4)    */
+               int             channel;        /*      Program# to be initialized      */
+               sbi_instr_data  operators;      /*      Register settings for operator cells (.SBI format)      */
+       };
+
+struct synth_info {    /* Read only */
+               char    name[30];
+               int     device;         /* 0-N. INITIALIZE BEFORE CALLING */
+               int     synth_type;
+#define SYNTH_TYPE_FM                  0
+#define SYNTH_TYPE_SAMPLE              1
+#define SYNTH_TYPE_MIDI                        2       /* Midi interface */
+
+               int     synth_subtype;
+#define FM_TYPE_ADLIB                  0x00
+#define FM_TYPE_OPL3                   0x01
+#define MIDI_TYPE_MPU401               0x401
+
+#define SAMPLE_TYPE_BASIC              0x10
+#define SAMPLE_TYPE_GUS                        SAMPLE_TYPE_BASIC
+#define SAMPLE_TYPE_WAVEFRONT           0x11
+
+               int     perc_mode;      /* No longer supported */
+               int     nr_voices;
+               int     nr_drums;       /* Obsolete field */
+               int     instr_bank_size;
+               unsigned int    capabilities;   
+#define SYNTH_CAP_PERCMODE             0x00000001 /* No longer used */
+#define SYNTH_CAP_OPL3                 0x00000002 /* Set if OPL3 supported */
+#define SYNTH_CAP_INPUT                        0x00000004 /* Input (MIDI) device */
+               int     dummies[19];    /* Reserve space */
+       };
+
+struct sound_timer_info {
+               char name[32];
+               int caps;
+       };
+
+#define MIDI_CAP_MPU401                1               /* MPU-401 intelligent mode */
+
+struct midi_info {
+               char            name[30];
+               int             device;         /* 0-N. INITIALIZE BEFORE CALLING */
+               unsigned int    capabilities;   /* To be defined later */
+               int             dev_type;
+               int             dummies[18];    /* Reserve space */
+       };
+
+/********************************************
+ * ioctl commands for the /dev/midi##
+ */
+typedef struct {
+               unsigned char cmd;
+               char nr_args, nr_returns;
+               unsigned char data[30];
+       } mpu_command_rec;
+
+#define SNDCTL_MIDI_PRETIME            _SIOWR('m', 0, int)
+#define SNDCTL_MIDI_MPUMODE            _SIOWR('m', 1, int)
+#define SNDCTL_MIDI_MPUCMD             _SIOWR('m', 2, mpu_command_rec)
+
+/********************************************
+ * IOCTL commands for /dev/dsp and /dev/audio
+ */
+
+#define SNDCTL_DSP_RESET               _SIO  ('P', 0)
+#define SNDCTL_DSP_SYNC                        _SIO  ('P', 1)
+#define SNDCTL_DSP_SPEED               _SIOWR('P', 2, int)
+#define SNDCTL_DSP_STEREO              _SIOWR('P', 3, int)
+#define SNDCTL_DSP_GETBLKSIZE          _SIOWR('P', 4, int)
+#define SNDCTL_DSP_SAMPLESIZE          SNDCTL_DSP_SETFMT
+#define SNDCTL_DSP_CHANNELS            _SIOWR('P', 6, int)
+#define SOUND_PCM_WRITE_CHANNELS       SNDCTL_DSP_CHANNELS
+#define SOUND_PCM_WRITE_FILTER         _SIOWR('P', 7, int)
+#define SNDCTL_DSP_POST                        _SIO  ('P', 8)
+#define SNDCTL_DSP_SUBDIVIDE           _SIOWR('P', 9, int)
+#define SNDCTL_DSP_SETFRAGMENT         _SIOWR('P',10, int)
+
+/*     Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
+#define SNDCTL_DSP_GETFMTS             _SIOR ('P',11, int) /* Returns a mask */
+#define SNDCTL_DSP_SETFMT              _SIOWR('P',5, int) /* Selects ONE fmt*/
+#      define AFMT_QUERY               0x00000000      /* Return current fmt */
+#      define AFMT_MU_LAW              0x00000001
+#      define AFMT_A_LAW               0x00000002
+#      define AFMT_IMA_ADPCM           0x00000004
+#      define AFMT_U8                  0x00000008
+#      define AFMT_S16_LE              0x00000010      /* Little endian signed 16*/
+#      define AFMT_S16_BE              0x00000020      /* Big endian signed 16 */
+#      define AFMT_S8                  0x00000040
+#      define AFMT_U16_LE              0x00000080      /* Little endian U16 */
+#      define AFMT_U16_BE              0x00000100      /* Big endian U16 */
+#      define AFMT_MPEG                0x00000200      /* MPEG (2) audio */
+#      define AFMT_AC3         0x00000400      /* Dolby Digital AC3 */
+
+/*
+ * Buffer status queries.
+ */
+typedef struct audio_buf_info {
+                       int fragments;  /* # of available fragments (partially usend ones not counted) */
+                       int fragstotal; /* Total # of fragments allocated */
+                       int fragsize;   /* Size of a fragment in bytes */
+
+                       int bytes;      /* Available space in bytes (includes partially used fragments) */
+                       /* Note! 'bytes' could be more than fragments*fragsize */
+               } audio_buf_info;
+
+#define SNDCTL_DSP_GETOSPACE           _SIOR ('P',12, audio_buf_info)
+#define SNDCTL_DSP_GETISPACE           _SIOR ('P',13, audio_buf_info)
+#define SNDCTL_DSP_NONBLOCK            _SIO  ('P',14)
+#define SNDCTL_DSP_GETCAPS             _SIOR ('P',15, int)
+#      define DSP_CAP_REVISION         0x000000ff      /* Bits for revision level (0 to 255) */
+#      define DSP_CAP_DUPLEX           0x00000100      /* Full duplex record/playback */
+#      define DSP_CAP_REALTIME         0x00000200      /* Real time capability */
+#      define DSP_CAP_BATCH            0x00000400      /* Device has some kind of */
+                                                       /* internal buffers which may */
+                                                       /* cause some delays and */
+                                                       /* decrease precision of timing */
+#      define DSP_CAP_COPROC           0x00000800      /* Has a coprocessor */
+                                                       /* Sometimes it's a DSP */
+                                                       /* but usually not */
+#      define DSP_CAP_TRIGGER          0x00001000      /* Supports SETTRIGGER */
+#      define DSP_CAP_MMAP             0x00002000      /* Supports mmap() */
+#      define DSP_CAP_MULTI            0x00004000      /* support multiple open */
+#      define DSP_CAP_BIND             0x00008000      /* channel binding to front/rear/cneter/lfe */
+
+
+#define SNDCTL_DSP_GETTRIGGER          _SIOR ('P',16, int)
+#define SNDCTL_DSP_SETTRIGGER          _SIOW ('P',16, int)
+#      define PCM_ENABLE_INPUT         0x00000001
+#      define PCM_ENABLE_OUTPUT                0x00000002
+
+typedef struct count_info {
+               int bytes;      /* Total # of bytes processed */
+               int blocks;     /* # of fragment transitions since last time */
+               int ptr;        /* Current DMA pointer value */
+       } count_info;
+
+#define SNDCTL_DSP_GETIPTR             _SIOR ('P',17, count_info)
+#define SNDCTL_DSP_GETOPTR             _SIOR ('P',18, count_info)
+
+typedef struct buffmem_desc {
+               unsigned *buffer;
+               int size;
+       } buffmem_desc;
+#define SNDCTL_DSP_MAPINBUF            _SIOR ('P', 19, buffmem_desc)
+#define SNDCTL_DSP_MAPOUTBUF           _SIOR ('P', 20, buffmem_desc)
+#define SNDCTL_DSP_SETSYNCRO           _SIO  ('P', 21)
+#define SNDCTL_DSP_SETDUPLEX           _SIO  ('P', 22)
+#define SNDCTL_DSP_GETODELAY           _SIOR ('P', 23, int)
+
+#define SNDCTL_DSP_GETCHANNELMASK              _SIOWR('P', 64, int)
+#define SNDCTL_DSP_BIND_CHANNEL                _SIOWR('P', 65, int)
+#      define DSP_BIND_QUERY           0x00000000
+#      define DSP_BIND_FRONT           0x00000001
+#      define DSP_BIND_SURR            0x00000002
+#      define DSP_BIND_CENTER_LFE      0x00000004
+#      define DSP_BIND_HANDSET         0x00000008
+#      define DSP_BIND_MIC             0x00000010
+#      define DSP_BIND_MODEM1          0x00000020
+#      define DSP_BIND_MODEM2          0x00000040
+#      define DSP_BIND_I2S             0x00000080
+#      define DSP_BIND_SPDIF           0x00000100
+
+#define SNDCTL_DSP_SETSPDIF            _SIOW ('P', 66, int)
+#define SNDCTL_DSP_GETSPDIF            _SIOR ('P', 67, int)
+#      define SPDIF_PRO        0x0001
+#      define SPDIF_N_AUD      0x0002
+#      define SPDIF_COPY       0x0004
+#      define SPDIF_PRE        0x0008
+#      define SPDIF_CC         0x07f0
+#      define SPDIF_L          0x0800
+#      define SPDIF_DRS        0x4000
+#      define SPDIF_V          0x8000
+
+/*
+ * Application's profile defines the way how playback underrun situations should be handled.
+ * 
+ *     APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
+ *     playback buffer whenever an underrun occurs. This consumes some time
+ *     prevents looping the existing buffer.
+ *     APF_CPUINTENS is intended to be set by CPU intensive applications which
+ *     are likely to run out of time occasionally. In this mode the buffer cleanup is
+ *     disabled which saves CPU time but also let's the previous buffer content to
+ *     be played during the "pause" after the underrun.
+ */
+#define SNDCTL_DSP_PROFILE             _SIOW ('P', 23, int)
+#define          APF_NORMAL    0       /* Normal applications */
+#define          APF_NETWORK   1       /* Underruns probably caused by an "external" delay */
+#define   APF_CPUINTENS 2      /* Underruns probably caused by "overheating" the CPU */
+
+#define SOUND_PCM_READ_RATE            _SIOR ('P', 2, int)
+#define SOUND_PCM_READ_CHANNELS                _SIOR ('P', 6, int)
+#define SOUND_PCM_READ_BITS            _SIOR ('P', 5, int)
+#define SOUND_PCM_READ_FILTER          _SIOR ('P', 7, int)
+
+/* Some alias names */
+#define SOUND_PCM_WRITE_BITS           SNDCTL_DSP_SETFMT
+#define SOUND_PCM_WRITE_RATE           SNDCTL_DSP_SPEED
+#define SOUND_PCM_POST                 SNDCTL_DSP_POST
+#define SOUND_PCM_RESET                        SNDCTL_DSP_RESET
+#define SOUND_PCM_SYNC                 SNDCTL_DSP_SYNC
+#define SOUND_PCM_SUBDIVIDE            SNDCTL_DSP_SUBDIVIDE
+#define SOUND_PCM_SETFRAGMENT          SNDCTL_DSP_SETFRAGMENT
+#define SOUND_PCM_GETFMTS              SNDCTL_DSP_GETFMTS
+#define SOUND_PCM_SETFMT               SNDCTL_DSP_SETFMT
+#define SOUND_PCM_GETOSPACE            SNDCTL_DSP_GETOSPACE
+#define SOUND_PCM_GETISPACE            SNDCTL_DSP_GETISPACE
+#define SOUND_PCM_NONBLOCK             SNDCTL_DSP_NONBLOCK
+#define SOUND_PCM_GETCAPS              SNDCTL_DSP_GETCAPS
+#define SOUND_PCM_GETTRIGGER           SNDCTL_DSP_GETTRIGGER
+#define SOUND_PCM_SETTRIGGER           SNDCTL_DSP_SETTRIGGER
+#define SOUND_PCM_SETSYNCRO            SNDCTL_DSP_SETSYNCRO
+#define SOUND_PCM_GETIPTR              SNDCTL_DSP_GETIPTR
+#define SOUND_PCM_GETOPTR              SNDCTL_DSP_GETOPTR
+#define SOUND_PCM_MAPINBUF             SNDCTL_DSP_MAPINBUF
+#define SOUND_PCM_MAPOUTBUF            SNDCTL_DSP_MAPOUTBUF
+
+/*
+ * ioctl calls to be used in communication with coprocessors and
+ * DSP chips.
+ */
+
+typedef struct copr_buffer {
+               int command;    /* Set to 0 if not used */
+               int flags;
+#define CPF_NONE               0x0000
+#define CPF_FIRST              0x0001  /* First block */
+#define CPF_LAST               0x0002  /* Last block */
+               int len;
+               int offs;       /* If required by the device (0 if not used) */
+
+               unsigned char data[4000]; /* NOTE! 4000 is not 4k */
+       } copr_buffer;
+
+typedef struct copr_debug_buf {
+               int command;    /* Used internally. Set to 0 */
+               int parm1;
+               int parm2;
+               int flags;      
+               int len;        /* Length of data in bytes */
+       } copr_debug_buf;
+
+typedef struct copr_msg {
+               int len;
+               unsigned char data[4000];
+       } copr_msg;
+
+#define SNDCTL_COPR_RESET             _SIO  ('C',  0)
+#define SNDCTL_COPR_LOAD             _SIOWR('C',  1, copr_buffer)
+#define SNDCTL_COPR_RDATA            _SIOWR('C',  2, copr_debug_buf)
+#define SNDCTL_COPR_RCODE            _SIOWR('C',  3, copr_debug_buf)
+#define SNDCTL_COPR_WDATA            _SIOW ('C',  4, copr_debug_buf)
+#define SNDCTL_COPR_WCODE            _SIOW ('C',  5, copr_debug_buf)
+#define SNDCTL_COPR_RUN                      _SIOWR('C',  6, copr_debug_buf)
+#define SNDCTL_COPR_HALT             _SIOWR('C',  7, copr_debug_buf)
+#define SNDCTL_COPR_SENDMSG          _SIOWR('C',  8, copr_msg)
+#define SNDCTL_COPR_RCVMSG           _SIOR ('C',  9, copr_msg)
+
+/*********************************************
+ * IOCTL commands for /dev/mixer
+ */
+       
+/* 
+ * Mixer devices
+ *
+ * There can be up to 20 different analog mixer channels. The
+ * SOUND_MIXER_NRDEVICES gives the currently supported maximum. 
+ * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
+ * the devices supported by the particular mixer.
+ */
+
+#define SOUND_MIXER_NRDEVICES  25
+#define SOUND_MIXER_VOLUME     0
+#define SOUND_MIXER_BASS       1
+#define SOUND_MIXER_TREBLE     2
+#define SOUND_MIXER_SYNTH      3
+#define SOUND_MIXER_PCM                4
+#define SOUND_MIXER_SPEAKER    5
+#define SOUND_MIXER_LINE       6
+#define SOUND_MIXER_MIC                7
+#define SOUND_MIXER_CD         8
+#define SOUND_MIXER_IMIX       9       /*  Recording monitor  */
+#define SOUND_MIXER_ALTPCM     10
+#define SOUND_MIXER_RECLEV     11      /* Recording level */
+#define SOUND_MIXER_IGAIN      12      /* Input gain */
+#define SOUND_MIXER_OGAIN      13      /* Output gain */
+/* 
+ * The AD1848 codec and compatibles have three line level inputs
+ * (line, aux1 and aux2). Since each card manufacturer have assigned
+ * different meanings to these inputs, it's inpractical to assign
+ * specific meanings (line, cd, synth etc.) to them.
+ */
+#define SOUND_MIXER_LINE1      14      /* Input source 1  (aux1) */
+#define SOUND_MIXER_LINE2      15      /* Input source 2  (aux2) */
+#define SOUND_MIXER_LINE3      16      /* Input source 3  (line) */
+#define SOUND_MIXER_DIGITAL1   17      /* Digital (input) 1 */
+#define SOUND_MIXER_DIGITAL2   18      /* Digital (input) 2 */
+#define SOUND_MIXER_DIGITAL3   19      /* Digital (input) 3 */
+#define SOUND_MIXER_PHONEIN    20      /* Phone input */
+#define SOUND_MIXER_PHONEOUT   21      /* Phone output */
+#define SOUND_MIXER_VIDEO      22      /* Video/TV (audio) in */
+#define SOUND_MIXER_RADIO      23      /* Radio in */
+#define SOUND_MIXER_MONITOR    24      /* Monitor (usually mic) volume */
+
+/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
+/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
+#define SOUND_ONOFF_MIN                28
+#define SOUND_ONOFF_MAX                30
+
+/* Note!       Number 31 cannot be used since the sign bit is reserved */
+#define SOUND_MIXER_NONE       31
+
+/*
+ * The following unsupported macros are no longer functional.
+ * Use SOUND_MIXER_PRIVATE# macros in future.
+ */
+#define SOUND_MIXER_ENHANCE    SOUND_MIXER_NONE
+#define SOUND_MIXER_MUTE       SOUND_MIXER_NONE
+#define SOUND_MIXER_LOUD       SOUND_MIXER_NONE
+
+
+#define SOUND_DEVICE_LABELS    {"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \
+                                "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "Rec  ", "IGain", "OGain", \
+                                "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
+                                "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
+
+#define SOUND_DEVICE_NAMES     {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
+                                "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
+                                "line1", "line2", "line3", "dig1", "dig2", "dig3", \
+                                "phin", "phout", "video", "radio", "monitor"}
+
+/*     Device bitmask identifiers      */
+
+#define SOUND_MIXER_RECSRC     0xff    /* Arg contains a bit for each recording source */
+#define SOUND_MIXER_DEVMASK    0xfe    /* Arg contains a bit for each supported device */
+#define SOUND_MIXER_RECMASK    0xfd    /* Arg contains a bit for each supported recording source */
+#define SOUND_MIXER_CAPS       0xfc
+#      define SOUND_CAP_EXCL_INPUT     0x00000001      /* Only one recording source at a time */
+#define SOUND_MIXER_STEREODEVS 0xfb    /* Mixer channels supporting stereo */
+#define SOUND_MIXER_OUTSRC     0xfa    /* Arg contains a bit for each input source to output */
+#define SOUND_MIXER_OUTMASK    0xf9    /* Arg contains a bit for each supported input source to output */
+
+/*     Device mask bits        */
+
+#define SOUND_MASK_VOLUME      (1 << SOUND_MIXER_VOLUME)
+#define SOUND_MASK_BASS                (1 << SOUND_MIXER_BASS)
+#define SOUND_MASK_TREBLE      (1 << SOUND_MIXER_TREBLE)
+#define SOUND_MASK_SYNTH       (1 << SOUND_MIXER_SYNTH)
+#define SOUND_MASK_PCM         (1 << SOUND_MIXER_PCM)
+#define SOUND_MASK_SPEAKER     (1 << SOUND_MIXER_SPEAKER)
+#define SOUND_MASK_LINE                (1 << SOUND_MIXER_LINE)
+#define SOUND_MASK_MIC         (1 << SOUND_MIXER_MIC)
+#define SOUND_MASK_CD          (1 << SOUND_MIXER_CD)
+#define SOUND_MASK_IMIX                (1 << SOUND_MIXER_IMIX)
+#define SOUND_MASK_ALTPCM      (1 << SOUND_MIXER_ALTPCM)
+#define SOUND_MASK_RECLEV      (1 << SOUND_MIXER_RECLEV)
+#define SOUND_MASK_IGAIN       (1 << SOUND_MIXER_IGAIN)
+#define SOUND_MASK_OGAIN       (1 << SOUND_MIXER_OGAIN)
+#define SOUND_MASK_LINE1       (1 << SOUND_MIXER_LINE1)
+#define SOUND_MASK_LINE2       (1 << SOUND_MIXER_LINE2)
+#define SOUND_MASK_LINE3       (1 << SOUND_MIXER_LINE3)
+#define SOUND_MASK_DIGITAL1    (1 << SOUND_MIXER_DIGITAL1)
+#define SOUND_MASK_DIGITAL2    (1 << SOUND_MIXER_DIGITAL2)
+#define SOUND_MASK_DIGITAL3    (1 << SOUND_MIXER_DIGITAL3)
+#define SOUND_MASK_PHONEIN     (1 << SOUND_MIXER_PHONEIN)
+#define SOUND_MASK_PHONEOUT    (1 << SOUND_MIXER_PHONEOUT)
+#define SOUND_MASK_RADIO       (1 << SOUND_MIXER_RADIO)
+#define SOUND_MASK_VIDEO       (1 << SOUND_MIXER_VIDEO)
+#define SOUND_MASK_MONITOR     (1 << SOUND_MIXER_MONITOR)
+
+/* Obsolete macros */
+#define SOUND_MASK_MUTE                (1 << SOUND_MIXER_MUTE)
+#define SOUND_MASK_ENHANCE     (1 << SOUND_MIXER_ENHANCE)
+#define SOUND_MASK_LOUD                (1 << SOUND_MIXER_LOUD)
+
+#define MIXER_READ(dev)                _SIOR('M', dev, int)
+#define SOUND_MIXER_READ_VOLUME                MIXER_READ(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_READ_BASS          MIXER_READ(SOUND_MIXER_BASS)
+#define SOUND_MIXER_READ_TREBLE                MIXER_READ(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_READ_SYNTH         MIXER_READ(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_READ_PCM           MIXER_READ(SOUND_MIXER_PCM)
+#define SOUND_MIXER_READ_SPEAKER       MIXER_READ(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_READ_LINE          MIXER_READ(SOUND_MIXER_LINE)
+#define SOUND_MIXER_READ_MIC           MIXER_READ(SOUND_MIXER_MIC)
+#define SOUND_MIXER_READ_CD            MIXER_READ(SOUND_MIXER_CD)
+#define SOUND_MIXER_READ_IMIX          MIXER_READ(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_READ_ALTPCM                MIXER_READ(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_READ_RECLEV                MIXER_READ(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_READ_IGAIN         MIXER_READ(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_READ_OGAIN         MIXER_READ(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_READ_LINE1         MIXER_READ(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_READ_LINE2         MIXER_READ(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_READ_LINE3         MIXER_READ(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_READ_MUTE          MIXER_READ(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_READ_ENHANCE       MIXER_READ(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_READ_LOUD          MIXER_READ(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_READ_RECSRC                MIXER_READ(SOUND_MIXER_RECSRC)
+#define SOUND_MIXER_READ_DEVMASK       MIXER_READ(SOUND_MIXER_DEVMASK)
+#define SOUND_MIXER_READ_RECMASK       MIXER_READ(SOUND_MIXER_RECMASK)
+#define SOUND_MIXER_READ_STEREODEVS    MIXER_READ(SOUND_MIXER_STEREODEVS)
+#define SOUND_MIXER_READ_CAPS          MIXER_READ(SOUND_MIXER_CAPS)
+
+#define MIXER_WRITE(dev)               _SIOWR('M', dev, int)
+#define SOUND_MIXER_WRITE_VOLUME       MIXER_WRITE(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_WRITE_BASS         MIXER_WRITE(SOUND_MIXER_BASS)
+#define SOUND_MIXER_WRITE_TREBLE       MIXER_WRITE(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_WRITE_SYNTH                MIXER_WRITE(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_WRITE_PCM          MIXER_WRITE(SOUND_MIXER_PCM)
+#define SOUND_MIXER_WRITE_SPEAKER      MIXER_WRITE(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_WRITE_LINE         MIXER_WRITE(SOUND_MIXER_LINE)
+#define SOUND_MIXER_WRITE_MIC          MIXER_WRITE(SOUND_MIXER_MIC)
+#define SOUND_MIXER_WRITE_CD           MIXER_WRITE(SOUND_MIXER_CD)
+#define SOUND_MIXER_WRITE_IMIX         MIXER_WRITE(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_WRITE_ALTPCM       MIXER_WRITE(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_WRITE_RECLEV       MIXER_WRITE(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_WRITE_IGAIN                MIXER_WRITE(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_WRITE_OGAIN                MIXER_WRITE(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_WRITE_LINE1                MIXER_WRITE(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_WRITE_LINE2                MIXER_WRITE(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_WRITE_LINE3                MIXER_WRITE(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_WRITE_MUTE         MIXER_WRITE(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_WRITE_ENHANCE      MIXER_WRITE(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_WRITE_LOUD         MIXER_WRITE(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_WRITE_RECSRC       MIXER_WRITE(SOUND_MIXER_RECSRC)
+
+typedef struct mixer_info
+{
+  char id[16];
+  char name[32];
+  int  modify_counter;
+  int fillers[10];
+} mixer_info;
+
+typedef struct _old_mixer_info /* Obsolete */
+{
+  char id[16];
+  char name[32];
+} _old_mixer_info;
+
+#define SOUND_MIXER_INFO               _SIOR ('M', 101, mixer_info)
+#define SOUND_OLD_MIXER_INFO           _SIOR ('M', 101, _old_mixer_info)
+
+/*
+ * A mechanism for accessing "proprietary" mixer features. This method
+ * permits passing 128 bytes of arbitrary data between a mixer application
+ * and the mixer driver. Interpretation of the record is defined by
+ * the particular mixer driver.
+ */
+typedef unsigned char mixer_record[128];
+
+#define SOUND_MIXER_ACCESS             _SIOWR('M', 102, mixer_record)
+
+/*
+ * Two ioctls for special souncard function
+ */
+#define SOUND_MIXER_AGC  _SIOWR('M', 103, int)
+#define SOUND_MIXER_3DSE  _SIOWR('M', 104, int)
+
+/*
+ * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
+ * These features can be used when accessing device specific features.
+ */
+#define SOUND_MIXER_PRIVATE1           _SIOWR('M', 111, int)
+#define SOUND_MIXER_PRIVATE2           _SIOWR('M', 112, int)
+#define SOUND_MIXER_PRIVATE3           _SIOWR('M', 113, int)
+#define SOUND_MIXER_PRIVATE4           _SIOWR('M', 114, int)
+#define SOUND_MIXER_PRIVATE5           _SIOWR('M', 115, int)
+
+/*
+ * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
+ * for querying current mixer settings from the driver and for loading
+ * default volume settings _prior_ activating the mixer (loading
+ * doesn't affect current state of the mixer hardware). These calls
+ * are for internal use only.
+ */
+
+typedef struct mixer_vol_table {
+  int num;     /* Index to volume table */
+  char name[32];
+  int levels[32];
+} mixer_vol_table;
+
+#define SOUND_MIXER_GETLEVELS          _SIOWR('M', 116, mixer_vol_table)
+#define SOUND_MIXER_SETLEVELS          _SIOWR('M', 117, mixer_vol_table)
+
+/* 
+ * An ioctl for identifying the driver version. It will return value
+ * of the SOUND_VERSION macro used when compiling the driver.
+ * This call was introduced in OSS version 3.6 and it will not work
+ * with earlier versions (returns EINVAL).
+ */
+#define OSS_GETVERSION                 _SIOR ('M', 118, int)
+
+/*
+ * Level 2 event types for /dev/sequencer
+ */
+
+/*
+ * The 4 most significant bits of byte 0 specify the class of
+ * the event: 
+ *
+ *     0x8X = system level events,
+ *     0x9X = device/port specific events, event[1] = device/port,
+ *             The last 4 bits give the subtype:
+ *                     0x02    = Channel event (event[3] = chn).
+ *                     0x01    = note event (event[4] = note).
+ *                     (0x01 is not used alone but always with bit 0x02).
+ *            event[2] = MIDI message code (0x80=note off etc.)
+ *
+ */
+
+#define EV_SEQ_LOCAL           0x80
+#define EV_TIMING              0x81
+#define EV_CHN_COMMON          0x92
+#define EV_CHN_VOICE           0x93
+#define EV_SYSEX               0x94
+/*
+ * Event types 200 to 220 are reserved for application use.
+ * These numbers will not be used by the driver.
+ */
+
+/*
+ * Events for event type EV_CHN_VOICE
+ */
+
+#define MIDI_NOTEOFF           0x80
+#define MIDI_NOTEON            0x90
+#define MIDI_KEY_PRESSURE      0xA0
+
+/*
+ * Events for event type EV_CHN_COMMON
+ */
+
+#define MIDI_CTL_CHANGE                0xB0
+#define MIDI_PGM_CHANGE                0xC0
+#define MIDI_CHN_PRESSURE      0xD0
+#define MIDI_PITCH_BEND                0xE0
+
+#define MIDI_SYSTEM_PREFIX     0xF0
+
+/*
+ * Timer event types
+ */
+#define TMR_WAIT_REL           1       /* Time relative to the prev time */
+#define TMR_WAIT_ABS           2       /* Absolute time since TMR_START */
+#define TMR_STOP               3
+#define TMR_START              4
+#define TMR_CONTINUE           5
+#define TMR_TEMPO              6
+#define TMR_ECHO               8
+#define TMR_CLOCK              9       /* MIDI clock */
+#define TMR_SPP                        10      /* Song position pointer */
+#define TMR_TIMESIG            11      /* Time signature */
+
+/*
+ *     Local event types
+ */
+#define LOCL_STARTAUDIO                1
+
+/*
+ *     Some convenience macros to simplify programming of the
+ *     /dev/sequencer interface
+ *
+ *     This is a legacy interface for applications written against
+ *     the OSSlib-3.8 style interface. It is no longer possible
+ *     to actually link against OSSlib with this header, but we
+ *     still provide these macros for programs using them.
+ *
+ *     If you want to use OSSlib, it is recommended that you get
+ *     the GPL version of OSS-4.x and build against that version
+ *     of the header.
+ *
+ *     We redefine the extern keyword so that make headers_check
+ *     does not complain about SEQ_USE_EXTBUF.
+ */
+#define SEQ_DECLAREBUF()               SEQ_USE_EXTBUF()
+
+void seqbuf_dump(void);        /* This function must be provided by programs */
+
+#define SEQ_PM_DEFINES int __foo_bar___
+
+#define SEQ_LOAD_GMINSTR(dev, instr)
+#define SEQ_LOAD_GMDRUM(dev, drum)
+
+#define _SEQ_EXTERN extern
+#define SEQ_USE_EXTBUF() \
+               _SEQ_EXTERN unsigned char _seqbuf[]; \
+               _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr
+
+#ifndef USE_SIMPLE_MACROS
+/* Sample seqbuf_dump() implementation:
+ *
+ *     SEQ_DEFINEBUF (2048);   -- Defines a buffer for 2048 bytes
+ *
+ *     int seqfd;              -- The file descriptor for /dev/sequencer.
+ *
+ *     void
+ *     seqbuf_dump ()
+ *     {
+ *       if (_seqbufptr)
+ *         if (write (seqfd, _seqbuf, _seqbufptr) == -1)
+ *           {
+ *             perror ("write /dev/sequencer");
+ *             exit (-1);
+ *           }
+ *       _seqbufptr = 0;
+ *     }
+ */
+
+#define SEQ_DEFINEBUF(len)             unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
+#define _SEQ_NEEDBUF(len)              if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
+#define _SEQ_ADVBUF(len)               _seqbufptr += len
+#define SEQ_DUMPBUF                    seqbuf_dump
+#else
+/*
+ * This variation of the sequencer macros is used just to format one event
+ * using fixed buffer.
+ * 
+ * The program using the macro library must define the following macros before
+ * using this library.
+ *
+ * #define _seqbuf              name of the buffer (unsigned char[]) 
+ * #define _SEQ_ADVBUF(len)     If the applic needs to know the exact
+ *                              size of the event, this macro can be used.
+ *                              Otherwise this must be defined as empty.
+ * #define _seqbufptr           Define the name of index variable or 0 if
+ *                              not required. 
+ */
+#define _SEQ_NEEDBUF(len)      /* empty */
+#endif
+
+#define SEQ_VOLUME_MODE(dev, mode)     {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                                       _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
+                                       _seqbuf[_seqbufptr+2] = (dev);\
+                                       _seqbuf[_seqbufptr+3] = (mode);\
+                                       _seqbuf[_seqbufptr+4] = 0;\
+                                       _seqbuf[_seqbufptr+5] = 0;\
+                                       _seqbuf[_seqbufptr+6] = 0;\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+
+/*
+ * Midi voice messages
+ */
+
+#define _CHN_VOICE(dev, event, chn, note, parm) \
+                                       {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       _seqbuf[_seqbufptr+2] = (event);\
+                                       _seqbuf[_seqbufptr+3] = (chn);\
+                                       _seqbuf[_seqbufptr+4] = (note);\
+                                       _seqbuf[_seqbufptr+5] = (parm);\
+                                       _seqbuf[_seqbufptr+6] = (0);\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_START_NOTE(dev, chn, note, vol) \
+               _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
+
+#define SEQ_STOP_NOTE(dev, chn, note, vol) \
+               _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
+
+#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
+               _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
+
+/*
+ * Midi channel messages
+ */
+
+#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
+                                       {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       _seqbuf[_seqbufptr+2] = (event);\
+                                       _seqbuf[_seqbufptr+3] = (chn);\
+                                       _seqbuf[_seqbufptr+4] = (p1);\
+                                       _seqbuf[_seqbufptr+5] = (p2);\
+                                       *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
+                                       _SEQ_ADVBUF(8);}
+/*
+ * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
+ * sending any MIDI bytes but it's absolutely not possible. Trying to do
+ * so _will_ cause problems with MPU401 intelligent mode).
+ *
+ * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be 
+ * sent by calling SEQ_SYSEX() several times (there must be no other events
+ * between them). First sysex fragment must have 0xf0 in the first byte
+ * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
+ * between these sysex start and end markers cannot be larger than 0x7f. Also
+ * lengths of each fragments (except the last one) must be 6.
+ *
+ * Breaking the above rules may work with some MIDI ports but is likely to
+ * cause fatal problems with some other devices (such as MPU401).
+ */
+#define SEQ_SYSEX(dev, buf, len) \
+                                       {int ii, ll=(len); \
+                                        unsigned char *bufp=buf;\
+                                        if (ll>6)ll=6;\
+                                       _SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = EV_SYSEX;\
+                                       _seqbuf[_seqbufptr+1] = (dev);\
+                                       for(ii=0;ii<ll;ii++)\
+                                          _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
+                                       for(ii=ll;ii<6;ii++)\
+                                          _seqbuf[_seqbufptr+ii+2] = 0xff;\
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
+               _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
+
+#define SEQ_SET_PATCH SEQ_PGM_CHANGE
+#define SEQ_PGM_CHANGE(dev, chn, patch) \
+               _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
+
+#define SEQ_CONTROL(dev, chn, controller, value) \
+               _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
+
+#define SEQ_BENDER(dev, chn, value) \
+               _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
+
+
+#define SEQ_V2_X_CONTROL(dev, voice, controller, value)        {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                                       _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
+                                       _seqbuf[_seqbufptr+2] = (dev);\
+                                       _seqbuf[_seqbufptr+3] = (voice);\
+                                       _seqbuf[_seqbufptr+4] = (controller);\
+                                       _seqbuf[_seqbufptr+5] = ((value)&0xff);\
+                                       _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
+                                       _seqbuf[_seqbufptr+7] = 0;\
+                                       _SEQ_ADVBUF(8);}
+/*
+ * The following 5 macros are incorrectly implemented and obsolete.
+ * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
+ */
+#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
+#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
+#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
+#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
+#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
+
+/*
+ * Timing and synchronization macros
+ */
+
+#define _TIMER_EVENT(ev, parm)         {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr+0] = EV_TIMING; \
+                                       _seqbuf[_seqbufptr+1] = (ev); \
+                                       _seqbuf[_seqbufptr+2] = 0;\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_START_TIMER()              _TIMER_EVENT(TMR_START, 0)
+#define SEQ_STOP_TIMER()               _TIMER_EVENT(TMR_STOP, 0)
+#define SEQ_CONTINUE_TIMER()           _TIMER_EVENT(TMR_CONTINUE, 0)
+#define SEQ_WAIT_TIME(ticks)           _TIMER_EVENT(TMR_WAIT_ABS, ticks)
+#define SEQ_DELTA_TIME(ticks)          _TIMER_EVENT(TMR_WAIT_REL, ticks)
+#define SEQ_ECHO_BACK(key)             _TIMER_EVENT(TMR_ECHO, key)
+#define SEQ_SET_TEMPO(value)           _TIMER_EVENT(TMR_TEMPO, value)
+#define SEQ_SONGPOS(pos)               _TIMER_EVENT(TMR_SPP, pos)
+#define SEQ_TIME_SIGNATURE(sig)                _TIMER_EVENT(TMR_TIMESIG, sig)
+
+/*
+ * Local control events
+ */
+
+#define _LOCAL_EVENT(ev, parm)         {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
+                                       _seqbuf[_seqbufptr+1] = (ev); \
+                                       _seqbuf[_seqbufptr+2] = 0;\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_PLAYAUDIO(devmask)         _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
+/*
+ * Events for the level 1 interface only 
+ */
+
+#define SEQ_MIDIOUT(device, byte)      {_SEQ_NEEDBUF(4);\
+                                       _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
+                                       _seqbuf[_seqbufptr+1] = (byte);\
+                                       _seqbuf[_seqbufptr+2] = (device);\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       _SEQ_ADVBUF(4);}
+
+/*
+ * Patch loading.
+ */
+#define SEQ_WRPATCH(patchx, len) \
+               {if (_seqbufptr) SEQ_DUMPBUF();\
+                if (write(seqfd, (char*)(patchx), len)==-1) \
+                   perror("Write patch: /dev/sequencer");}
+#define SEQ_WRPATCH2(patchx, len) \
+               (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
+
+#endif /* SOUNDCARD_H */
diff --git a/lib/libdss-include/linux/spi/spidev.h b/lib/libdss-include/linux/spi/spidev.h
new file mode 100644 (file)
index 0000000..dd5f21e
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * include/linux/spi/spidev.h
+ *
+ * Copyright (C) 2006 SWAPP
+ *     Andrea Paterniani <a.paterniani@swapp-eng.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+  */
+
+#ifndef SPIDEV_H
+#define SPIDEV_H
+
+#include <linux/types.h>
+
+/* User space versions of kernel symbols for SPI clocking modes,
+ * matching <linux/spi/spi.h>
+ */
+
+#define SPI_CPHA               0x01
+#define SPI_CPOL               0x02
+
+#define SPI_MODE_0             (0|0)
+#define SPI_MODE_1             (0|SPI_CPHA)
+#define SPI_MODE_2             (SPI_CPOL|0)
+#define SPI_MODE_3             (SPI_CPOL|SPI_CPHA)
+
+#define SPI_CS_HIGH            0x04
+#define SPI_LSB_FIRST          0x08
+#define SPI_3WIRE              0x10
+#define SPI_LOOP               0x20
+#define SPI_NO_CS              0x40
+#define SPI_READY              0x80
+#define SPI_TX_DUAL            0x100
+#define SPI_TX_QUAD            0x200
+#define SPI_RX_DUAL            0x400
+#define SPI_RX_QUAD            0x800
+
+/*---------------------------------------------------------------------------*/
+
+/* IOCTL commands */
+
+#define SPI_IOC_MAGIC                  'k'
+
+/**
+ * struct spi_ioc_transfer - describes a single SPI transfer
+ * @tx_buf: Holds pointer to userspace buffer with transmit data, or null.
+ *     If no data is provided, zeroes are shifted out.
+ * @rx_buf: Holds pointer to userspace buffer for receive data, or null.
+ * @len: Length of tx and rx buffers, in bytes.
+ * @speed_hz: Temporary override of the device's bitrate.
+ * @bits_per_word: Temporary override of the device's wordsize.
+ * @delay_usecs: If nonzero, how long to delay after the last bit transfer
+ *     before optionally deselecting the device before the next transfer.
+ * @cs_change: True to deselect device before starting the next transfer.
+ *
+ * This structure is mapped directly to the kernel spi_transfer structure;
+ * the fields have the same meanings, except of course that the pointers
+ * are in a different address space (and may be of different sizes in some
+ * cases, such as 32-bit i386 userspace over a 64-bit x86_64 kernel).
+ * Zero-initialize the structure, including currently unused fields, to
+ * accommodate potential future updates.
+ *
+ * SPI_IOC_MESSAGE gives userspace the equivalent of kernel spi_sync().
+ * Pass it an array of related transfers, they'll execute together.
+ * Each transfer may be half duplex (either direction) or full duplex.
+ *
+ *     struct spi_ioc_transfer mesg[4];
+ *     ...
+ *     status = ioctl(fd, SPI_IOC_MESSAGE(4), mesg);
+ *
+ * So for example one transfer might send a nine bit command (right aligned
+ * in a 16-bit word), the next could read a block of 8-bit data before
+ * terminating that command by temporarily deselecting the chip; the next
+ * could send a different nine bit command (re-selecting the chip), and the
+ * last transfer might write some register values.
+ */
+struct spi_ioc_transfer {
+       __u64           tx_buf;
+       __u64           rx_buf;
+
+       __u32           len;
+       __u32           speed_hz;
+
+       __u16           delay_usecs;
+       __u8            bits_per_word;
+       __u8            cs_change;
+       __u8            tx_nbits;
+       __u8            rx_nbits;
+       __u16           pad;
+
+       /* If the contents of 'struct spi_ioc_transfer' ever change
+        * incompatibly, then the ioctl number (currently 0) must change;
+        * ioctls with constant size fields get a bit more in the way of
+        * error checking than ones (like this) where that field varies.
+        *
+        * NOTE: struct layout is the same in 64bit and 32bit userspace.
+        */
+};
+
+/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
+#define SPI_MSGSIZE(N) \
+       ((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
+               ? ((N)*(sizeof (struct spi_ioc_transfer))) : 0)
+#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])
+
+
+/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) (limited to 8 bits) */
+#define SPI_IOC_RD_MODE                        _IOR(SPI_IOC_MAGIC, 1, __u8)
+#define SPI_IOC_WR_MODE                        _IOW(SPI_IOC_MAGIC, 1, __u8)
+
+/* Read / Write SPI bit justification */
+#define SPI_IOC_RD_LSB_FIRST           _IOR(SPI_IOC_MAGIC, 2, __u8)
+#define SPI_IOC_WR_LSB_FIRST           _IOW(SPI_IOC_MAGIC, 2, __u8)
+
+/* Read / Write SPI device word length (1..N) */
+#define SPI_IOC_RD_BITS_PER_WORD       _IOR(SPI_IOC_MAGIC, 3, __u8)
+#define SPI_IOC_WR_BITS_PER_WORD       _IOW(SPI_IOC_MAGIC, 3, __u8)
+
+/* Read / Write SPI device default max speed hz */
+#define SPI_IOC_RD_MAX_SPEED_HZ                _IOR(SPI_IOC_MAGIC, 4, __u32)
+#define SPI_IOC_WR_MAX_SPEED_HZ                _IOW(SPI_IOC_MAGIC, 4, __u32)
+
+/* Read / Write of the SPI mode field */
+#define SPI_IOC_RD_MODE32              _IOR(SPI_IOC_MAGIC, 5, __u32)
+#define SPI_IOC_WR_MODE32              _IOW(SPI_IOC_MAGIC, 5, __u32)
+
+
+
+#endif /* SPIDEV_H */
diff --git a/lib/libdss-include/linux/stat.h b/lib/libdss-include/linux/stat.h
new file mode 100644 (file)
index 0000000..b014ce4
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_STAT_H
+#define _LINUX_STAT_H
+
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
+#define S_IFMT  00170000
+#define S_IFSOCK 0140000
+#define S_IFLNK         0120000
+#define S_IFREG  0100000
+#define S_IFBLK  0060000
+#define S_IFDIR  0040000
+#define S_IFCHR  0020000
+#define S_IFIFO  0010000
+#define S_ISUID  0004000
+#define S_ISGID  0002000
+#define S_ISVTX  0001000
+
+#define S_ISLNK(m)     (((m) & S_IFMT) == S_IFLNK)
+#define S_ISREG(m)     (((m) & S_IFMT) == S_IFREG)
+#define S_ISDIR(m)     (((m) & S_IFMT) == S_IFDIR)
+#define S_ISCHR(m)     (((m) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(m)     (((m) & S_IFMT) == S_IFBLK)
+#define S_ISFIFO(m)    (((m) & S_IFMT) == S_IFIFO)
+#define S_ISSOCK(m)    (((m) & S_IFMT) == S_IFSOCK)
+
+#define S_IRWXU 00700
+#define S_IRUSR 00400
+#define S_IWUSR 00200
+#define S_IXUSR 00100
+
+#define S_IRWXG 00070
+#define S_IRGRP 00040
+#define S_IWGRP 00020
+#define S_IXGRP 00010
+
+#define S_IRWXO 00007
+#define S_IROTH 00004
+#define S_IWOTH 00002
+#define S_IXOTH 00001
+
+#endif
+
+
+#endif /* _LINUX_STAT_H */
diff --git a/lib/libdss-include/linux/stddef.h b/lib/libdss-include/linux/stddef.h
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/lib/libdss-include/linux/string.h b/lib/libdss-include/linux/string.h
new file mode 100644 (file)
index 0000000..d7ed844
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef _LINUX_STRING_H_
+#define _LINUX_STRING_H_
+
+/* We don't want strings.h stuff being used by user stuff by accident */
+
+#include <string.h>
+#endif /* _LINUX_STRING_H_ */
diff --git a/lib/libdss-include/linux/sunrpc/debug.h b/lib/libdss-include/linux/sunrpc/debug.h
new file mode 100644 (file)
index 0000000..4ead318
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * linux/include/linux/sunrpc/debug.h
+ *
+ * Debugging support for sunrpc module
+ *
+ * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef _LINUX_SUNRPC_DEBUG_H_
+#define _LINUX_SUNRPC_DEBUG_H_
+
+/*
+ * RPC debug facilities
+ */
+#define RPCDBG_XPRT            0x0001
+#define RPCDBG_CALL            0x0002
+#define RPCDBG_DEBUG           0x0004
+#define RPCDBG_NFS             0x0008
+#define RPCDBG_AUTH            0x0010
+#define RPCDBG_BIND            0x0020
+#define RPCDBG_SCHED           0x0040
+#define RPCDBG_TRANS           0x0080
+#define RPCDBG_SVCXPRT         0x0100
+#define RPCDBG_SVCDSP          0x0200
+#define RPCDBG_MISC            0x0400
+#define RPCDBG_CACHE           0x0800
+#define RPCDBG_ALL             0x7fff
+
+
+/*
+ * Declarations for the sysctl debug interface, which allows to read or
+ * change the debug flags for rpc, nfs, nfsd, and lockd. Since the sunrpc
+ * module currently registers its sysctl table dynamically, the sysctl path
+ * for module FOO is <CTL_SUNRPC, CTL_FOODEBUG>.
+ */
+
+enum {
+       CTL_RPCDEBUG = 1,
+       CTL_NFSDEBUG,
+       CTL_NFSDDEBUG,
+       CTL_NLMDEBUG,
+       CTL_SLOTTABLE_UDP,
+       CTL_SLOTTABLE_TCP,
+       CTL_MIN_RESVPORT,
+       CTL_MAX_RESVPORT,
+};
+
+#endif /* _LINUX_SUNRPC_DEBUG_H_ */
diff --git a/lib/libdss-include/linux/suspend_ioctls.h b/lib/libdss-include/linux/suspend_ioctls.h
new file mode 100644 (file)
index 0000000..0b30382
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _LINUX_SUSPEND_IOCTLS_H
+#define _LINUX_SUSPEND_IOCTLS_H
+
+#include <linux/types.h>
+/*
+ * This structure is used to pass the values needed for the identification
+ * of the resume swap area from a user space to the kernel via the
+ * SNAPSHOT_SET_SWAP_AREA ioctl
+ */
+struct resume_swap_area {
+       __kernel_loff_t offset;
+       __u32 dev;
+} __attribute__((packed));
+
+#define SNAPSHOT_IOC_MAGIC     '3'
+#define SNAPSHOT_FREEZE                        _IO(SNAPSHOT_IOC_MAGIC, 1)
+#define SNAPSHOT_UNFREEZE              _IO(SNAPSHOT_IOC_MAGIC, 2)
+#define SNAPSHOT_ATOMIC_RESTORE                _IO(SNAPSHOT_IOC_MAGIC, 4)
+#define SNAPSHOT_FREE                  _IO(SNAPSHOT_IOC_MAGIC, 5)
+#define SNAPSHOT_FREE_SWAP_PAGES       _IO(SNAPSHOT_IOC_MAGIC, 9)
+#define SNAPSHOT_S2RAM                 _IO(SNAPSHOT_IOC_MAGIC, 11)
+#define SNAPSHOT_SET_SWAP_AREA         _IOW(SNAPSHOT_IOC_MAGIC, 13, \
+                                                       struct resume_swap_area)
+#define SNAPSHOT_GET_IMAGE_SIZE                _IOR(SNAPSHOT_IOC_MAGIC, 14, __kernel_loff_t)
+#define SNAPSHOT_PLATFORM_SUPPORT      _IO(SNAPSHOT_IOC_MAGIC, 15)
+#define SNAPSHOT_POWER_OFF             _IO(SNAPSHOT_IOC_MAGIC, 16)
+#define SNAPSHOT_CREATE_IMAGE          _IOW(SNAPSHOT_IOC_MAGIC, 17, int)
+#define SNAPSHOT_PREF_IMAGE_SIZE       _IO(SNAPSHOT_IOC_MAGIC, 18)
+#define SNAPSHOT_AVAIL_SWAP_SIZE       _IOR(SNAPSHOT_IOC_MAGIC, 19, __kernel_loff_t)
+#define SNAPSHOT_ALLOC_SWAP_PAGE       _IOR(SNAPSHOT_IOC_MAGIC, 20, __kernel_loff_t)
+#define SNAPSHOT_IOC_MAXNR     20
+
+#endif /* _LINUX_SUSPEND_IOCTLS_H */
diff --git a/lib/libdss-include/linux/swab.h b/lib/libdss-include/linux/swab.h
new file mode 100644 (file)
index 0000000..13a943c
--- /dev/null
@@ -0,0 +1,288 @@
+#ifndef _LINUX_SWAB_H
+#define _LINUX_SWAB_H
+
+#include <linux/types.h>
+
+#include <asm/swab.h>
+
+/*
+ * casts are necessary for constants, because we never know how for sure
+ * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way.
+ */
+#define ___constant_swab16(x) ((__u16)(                                \
+       (((__u16)(x) & (__u16)0x00ffU) << 8) |                  \
+       (((__u16)(x) & (__u16)0xff00U) >> 8)))
+
+#define ___constant_swab32(x) ((__u32)(                                \
+       (((__u32)(x) & (__u32)0x000000ffUL) << 24) |            \
+       (((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |            \
+       (((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |            \
+       (((__u32)(x) & (__u32)0xff000000UL) >> 24)))
+
+#define ___constant_swab64(x) ((__u64)(                                \
+       (((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) |   \
+       (((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) |   \
+       (((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) |   \
+       (((__u64)(x) & (__u64)0x00000000ff000000ULL) <<  8) |   \
+       (((__u64)(x) & (__u64)0x000000ff00000000ULL) >>  8) |   \
+       (((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) |   \
+       (((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) |   \
+       (((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56)))
+
+#define ___constant_swahw32(x) ((__u32)(                       \
+       (((__u32)(x) & (__u32)0x0000ffffUL) << 16) |            \
+       (((__u32)(x) & (__u32)0xffff0000UL) >> 16)))
+
+#define ___constant_swahb32(x) ((__u32)(                       \
+       (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) |             \
+       (((__u32)(x) & (__u32)0xff00ff00UL) >> 8)))
+
+/*
+ * Implement the following as inlines, but define the interface using
+ * macros to allow constant folding when possible:
+ * ___swab16, ___swab32, ___swab64, ___swahw32, ___swahb32
+ */
+
+static __inline__  __u16 __fswab16(__u16 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP16__
+       return __builtin_bswap16(val);
+#elif defined (__arch_swab16)
+       return __arch_swab16(val);
+#else
+       return ___constant_swab16(val);
+#endif
+}
+
+static __inline__  __u32 __fswab32(__u32 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP32__
+       return __builtin_bswap32(val);
+#elif defined(__arch_swab32)
+       return __arch_swab32(val);
+#else
+       return ___constant_swab32(val);
+#endif
+}
+
+static __inline__  __u64 __fswab64(__u64 val)
+{
+#ifdef __HAVE_BUILTIN_BSWAP64__
+       return __builtin_bswap64(val);
+#elif defined (__arch_swab64)
+       return __arch_swab64(val);
+#elif defined(__SWAB_64_THRU_32__)
+       __u32 h = val >> 32;
+       __u32 l = val & ((1ULL << 32) - 1);
+       return (((__u64)__fswab32(l)) << 32) | ((__u64)(__fswab32(h)));
+#else
+       return ___constant_swab64(val);
+#endif
+}
+
+static __inline__  __u32 __fswahw32(__u32 val)
+{
+#ifdef __arch_swahw32
+       return __arch_swahw32(val);
+#else
+       return ___constant_swahw32(val);
+#endif
+}
+
+static __inline__  __u32 __fswahb32(__u32 val)
+{
+#ifdef __arch_swahb32
+       return __arch_swahb32(val);
+#else
+       return ___constant_swahb32(val);
+#endif
+}
+
+/**
+ * __swab16 - return a byteswapped 16-bit value
+ * @x: value to byteswap
+ */
+#define __swab16(x)                            \
+       (__builtin_constant_p((__u16)(x)) ?     \
+       ___constant_swab16(x) :                 \
+       __fswab16(x))
+
+/**
+ * __swab32 - return a byteswapped 32-bit value
+ * @x: value to byteswap
+ */
+#define __swab32(x)                            \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swab32(x) :                 \
+       __fswab32(x))
+
+/**
+ * __swab64 - return a byteswapped 64-bit value
+ * @x: value to byteswap
+ */
+#define __swab64(x)                            \
+       (__builtin_constant_p((__u64)(x)) ?     \
+       ___constant_swab64(x) :                 \
+       __fswab64(x))
+
+/**
+ * __swahw32 - return a word-swapped 32-bit value
+ * @x: value to wordswap
+ *
+ * __swahw32(0x12340000) is 0x00001234
+ */
+#define __swahw32(x)                           \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swahw32(x) :                \
+       __fswahw32(x))
+
+/**
+ * __swahb32 - return a high and low byte-swapped 32-bit value
+ * @x: value to byteswap
+ *
+ * __swahb32(0x12345678) is 0x34127856
+ */
+#define __swahb32(x)                           \
+       (__builtin_constant_p((__u32)(x)) ?     \
+       ___constant_swahb32(x) :                \
+       __fswahb32(x))
+
+/**
+ * __swab16p - return a byteswapped 16-bit value from a pointer
+ * @p: pointer to a naturally-aligned 16-bit value
+ */
+static __inline__ __u16 __swab16p(const __u16 *p)
+{
+#ifdef __arch_swab16p
+       return __arch_swab16p(p);
+#else
+       return __swab16(*p);
+#endif
+}
+
+/**
+ * __swab32p - return a byteswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ */
+static __inline__ __u32 __swab32p(const __u32 *p)
+{
+#ifdef __arch_swab32p
+       return __arch_swab32p(p);
+#else
+       return __swab32(*p);
+#endif
+}
+
+/**
+ * __swab64p - return a byteswapped 64-bit value from a pointer
+ * @p: pointer to a naturally-aligned 64-bit value
+ */
+static __inline__ __u64 __swab64p(const __u64 *p)
+{
+#ifdef __arch_swab64p
+       return __arch_swab64p(p);
+#else
+       return __swab64(*p);
+#endif
+}
+
+/**
+ * __swahw32p - return a wordswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahw32() for details of wordswapping.
+ */
+static __inline__ __u32 __swahw32p(const __u32 *p)
+{
+#ifdef __arch_swahw32p
+       return __arch_swahw32p(p);
+#else
+       return __swahw32(*p);
+#endif
+}
+
+/**
+ * __swahb32p - return a high and low byteswapped 32-bit value from a pointer
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahb32() for details of high/low byteswapping.
+ */
+static __inline__ __u32 __swahb32p(const __u32 *p)
+{
+#ifdef __arch_swahb32p
+       return __arch_swahb32p(p);
+#else
+       return __swahb32(*p);
+#endif
+}
+
+/**
+ * __swab16s - byteswap a 16-bit value in-place
+ * @p: pointer to a naturally-aligned 16-bit value
+ */
+static __inline__ void __swab16s(__u16 *p)
+{
+#ifdef __arch_swab16s
+       __arch_swab16s(p);
+#else
+       *p = __swab16p(p);
+#endif
+}
+/**
+ * __swab32s - byteswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ */
+static __inline__ void __swab32s(__u32 *p)
+{
+#ifdef __arch_swab32s
+       __arch_swab32s(p);
+#else
+       *p = __swab32p(p);
+#endif
+}
+
+/**
+ * __swab64s - byteswap a 64-bit value in-place
+ * @p: pointer to a naturally-aligned 64-bit value
+ */
+static __inline__ void __swab64s(__u64 *p)
+{
+#ifdef __arch_swab64s
+       __arch_swab64s(p);
+#else
+       *p = __swab64p(p);
+#endif
+}
+
+/**
+ * __swahw32s - wordswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahw32() for details of wordswapping
+ */
+static __inline__ void __swahw32s(__u32 *p)
+{
+#ifdef __arch_swahw32s
+       __arch_swahw32s(p);
+#else
+       *p = __swahw32p(p);
+#endif
+}
+
+/**
+ * __swahb32s - high and low byteswap a 32-bit value in-place
+ * @p: pointer to a naturally-aligned 32-bit value
+ *
+ * See __swahb32() for details of high and low byte swapping
+ */
+static __inline__ void __swahb32s(__u32 *p)
+{
+#ifdef __arch_swahb32s
+       __arch_swahb32s(p);
+#else
+       *p = __swahb32p(p);
+#endif
+}
+
+
+#endif /* _LINUX_SWAB_H */
diff --git a/lib/libdss-include/linux/synclink.h b/lib/libdss-include/linux/synclink.h
new file mode 100644 (file)
index 0000000..0818434
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * SyncLink Multiprotocol Serial Adapter Driver
+ *
+ * $Id: synclink.h,v 3.14 2006/07/17 20:15:43 paulkf Exp $
+ *
+ * Copyright (C) 1998-2000 by Microgate Corporation
+ *
+ * Redistribution of this file is permitted under
+ * the terms of the GNU Public License (GPL)
+ */
+
+#ifndef _SYNCLINK_H_
+#define _SYNCLINK_H_
+#define SYNCLINK_H_VERSION 3.6
+
+#include <linux/types.h>
+
+#define BIT0   0x0001
+#define BIT1   0x0002
+#define BIT2   0x0004
+#define BIT3   0x0008
+#define BIT4   0x0010
+#define BIT5   0x0020
+#define BIT6   0x0040
+#define BIT7   0x0080
+#define BIT8   0x0100
+#define BIT9   0x0200
+#define BIT10  0x0400
+#define BIT11  0x0800
+#define BIT12  0x1000
+#define BIT13  0x2000
+#define BIT14  0x4000
+#define BIT15  0x8000
+#define BIT16  0x00010000
+#define BIT17  0x00020000
+#define BIT18  0x00040000
+#define BIT19  0x00080000
+#define BIT20  0x00100000
+#define BIT21  0x00200000
+#define BIT22  0x00400000
+#define BIT23  0x00800000
+#define BIT24  0x01000000
+#define BIT25  0x02000000
+#define BIT26  0x04000000
+#define BIT27  0x08000000
+#define BIT28  0x10000000
+#define BIT29  0x20000000
+#define BIT30  0x40000000
+#define BIT31  0x80000000
+
+
+#define HDLC_MAX_FRAME_SIZE    65535
+#define MAX_ASYNC_TRANSMIT     4096
+#define MAX_ASYNC_BUFFER_SIZE  4096
+
+#define ASYNC_PARITY_NONE              0
+#define ASYNC_PARITY_EVEN              1
+#define ASYNC_PARITY_ODD               2
+#define ASYNC_PARITY_SPACE             3
+
+#define HDLC_FLAG_UNDERRUN_ABORT7      0x0000
+#define HDLC_FLAG_UNDERRUN_ABORT15     0x0001
+#define HDLC_FLAG_UNDERRUN_FLAG                0x0002
+#define HDLC_FLAG_UNDERRUN_CRC         0x0004
+#define HDLC_FLAG_SHARE_ZERO           0x0010
+#define HDLC_FLAG_AUTO_CTS             0x0020
+#define HDLC_FLAG_AUTO_DCD             0x0040
+#define HDLC_FLAG_AUTO_RTS             0x0080
+#define HDLC_FLAG_RXC_DPLL             0x0100
+#define HDLC_FLAG_RXC_BRG              0x0200
+#define HDLC_FLAG_RXC_TXCPIN           0x8000
+#define HDLC_FLAG_RXC_RXCPIN           0x0000
+#define HDLC_FLAG_TXC_DPLL             0x0400
+#define HDLC_FLAG_TXC_BRG              0x0800
+#define HDLC_FLAG_TXC_TXCPIN           0x0000
+#define HDLC_FLAG_TXC_RXCPIN           0x0008
+#define HDLC_FLAG_DPLL_DIV8            0x1000
+#define HDLC_FLAG_DPLL_DIV16           0x2000
+#define HDLC_FLAG_DPLL_DIV32           0x0000
+#define HDLC_FLAG_HDLC_LOOPMODE                0x4000
+
+#define HDLC_CRC_NONE                  0
+#define HDLC_CRC_16_CCITT              1
+#define HDLC_CRC_32_CCITT              2
+#define HDLC_CRC_MASK                  0x00ff
+#define HDLC_CRC_RETURN_EX             0x8000
+
+#define RX_OK                          0
+#define RX_CRC_ERROR                   1
+
+#define HDLC_TXIDLE_FLAGS              0
+#define HDLC_TXIDLE_ALT_ZEROS_ONES     1
+#define HDLC_TXIDLE_ZEROS              2
+#define HDLC_TXIDLE_ONES               3
+#define HDLC_TXIDLE_ALT_MARK_SPACE     4
+#define HDLC_TXIDLE_SPACE              5
+#define HDLC_TXIDLE_MARK               6
+#define HDLC_TXIDLE_CUSTOM_8            0x10000000
+#define HDLC_TXIDLE_CUSTOM_16           0x20000000
+
+#define HDLC_ENCODING_NRZ                      0
+#define HDLC_ENCODING_NRZB                     1
+#define HDLC_ENCODING_NRZI_MARK                        2
+#define HDLC_ENCODING_NRZI_SPACE               3
+#define HDLC_ENCODING_NRZI                     HDLC_ENCODING_NRZI_SPACE
+#define HDLC_ENCODING_BIPHASE_MARK             4
+#define HDLC_ENCODING_BIPHASE_SPACE            5
+#define HDLC_ENCODING_BIPHASE_LEVEL            6
+#define HDLC_ENCODING_DIFF_BIPHASE_LEVEL       7
+
+#define HDLC_PREAMBLE_LENGTH_8BITS     0
+#define HDLC_PREAMBLE_LENGTH_16BITS    1
+#define HDLC_PREAMBLE_LENGTH_32BITS    2
+#define HDLC_PREAMBLE_LENGTH_64BITS    3
+
+#define HDLC_PREAMBLE_PATTERN_NONE     0
+#define HDLC_PREAMBLE_PATTERN_ZEROS    1
+#define HDLC_PREAMBLE_PATTERN_FLAGS    2
+#define HDLC_PREAMBLE_PATTERN_10       3
+#define HDLC_PREAMBLE_PATTERN_01       4
+#define HDLC_PREAMBLE_PATTERN_ONES     5
+
+#define MGSL_MODE_ASYNC                1
+#define MGSL_MODE_HDLC         2
+#define MGSL_MODE_MONOSYNC     3
+#define MGSL_MODE_BISYNC       4
+#define MGSL_MODE_RAW          6
+#define MGSL_MODE_BASE_CLOCK    7
+#define MGSL_MODE_XSYNC         8
+
+#define MGSL_BUS_TYPE_ISA      1
+#define MGSL_BUS_TYPE_EISA     2
+#define MGSL_BUS_TYPE_PCI      5
+
+#define MGSL_INTERFACE_MASK     0xf
+#define MGSL_INTERFACE_DISABLE  0
+#define MGSL_INTERFACE_RS232    1
+#define MGSL_INTERFACE_V35      2
+#define MGSL_INTERFACE_RS422    3
+#define MGSL_INTERFACE_RTS_EN   0x10
+#define MGSL_INTERFACE_LL       0x20
+#define MGSL_INTERFACE_RL       0x40
+#define MGSL_INTERFACE_MSB_FIRST 0x80
+
+typedef struct _MGSL_PARAMS
+{
+       /* Common */
+
+       unsigned long   mode;           /* Asynchronous or HDLC */
+       unsigned char   loopback;       /* internal loopback mode */
+
+       /* HDLC Only */
+
+       unsigned short  flags;
+       unsigned char   encoding;       /* NRZ, NRZI, etc. */
+       unsigned long   clock_speed;    /* external clock speed in bits per second */
+       unsigned char   addr_filter;    /* receive HDLC address filter, 0xFF = disable */
+       unsigned short  crc_type;       /* None, CRC16-CCITT, or CRC32-CCITT */
+       unsigned char   preamble_length;
+       unsigned char   preamble;
+
+       /* Async Only */
+
+       unsigned long   data_rate;      /* bits per second */
+       unsigned char   data_bits;      /* 7 or 8 data bits */
+       unsigned char   stop_bits;      /* 1 or 2 stop bits */
+       unsigned char   parity;         /* none, even, or odd */
+
+} MGSL_PARAMS, *PMGSL_PARAMS;
+
+#define MICROGATE_VENDOR_ID 0x13c0
+#define SYNCLINK_DEVICE_ID 0x0010
+#define MGSCC_DEVICE_ID 0x0020
+#define SYNCLINK_SCA_DEVICE_ID 0x0030
+#define SYNCLINK_GT_DEVICE_ID 0x0070
+#define SYNCLINK_GT4_DEVICE_ID 0x0080
+#define SYNCLINK_AC_DEVICE_ID  0x0090
+#define SYNCLINK_GT2_DEVICE_ID 0x00A0
+#define MGSL_MAX_SERIAL_NUMBER 30
+
+/*
+** device diagnostics status
+*/
+
+#define DiagStatus_OK                          0
+#define DiagStatus_AddressFailure              1
+#define DiagStatus_AddressConflict             2
+#define DiagStatus_IrqFailure                  3
+#define DiagStatus_IrqConflict                 4
+#define DiagStatus_DmaFailure                  5
+#define DiagStatus_DmaConflict                 6
+#define DiagStatus_PciAdapterNotFound          7
+#define DiagStatus_CantAssignPciResources      8
+#define DiagStatus_CantAssignPciMemAddr                9
+#define DiagStatus_CantAssignPciIoAddr         10
+#define DiagStatus_CantAssignPciIrq            11
+#define DiagStatus_MemoryError                 12
+
+#define SerialSignal_DCD            0x01     /* Data Carrier Detect */
+#define SerialSignal_TXD            0x02     /* Transmit Data */
+#define SerialSignal_RI             0x04     /* Ring Indicator */
+#define SerialSignal_RXD            0x08     /* Receive Data */
+#define SerialSignal_CTS            0x10     /* Clear to Send */
+#define SerialSignal_RTS            0x20     /* Request to Send */
+#define SerialSignal_DSR            0x40     /* Data Set Ready */
+#define SerialSignal_DTR            0x80     /* Data Terminal Ready */
+
+
+/*
+ * Counters of the input lines (CTS, DSR, RI, CD) interrupts
+ */
+struct mgsl_icount {
+       __u32   cts, dsr, rng, dcd, tx, rx;
+       __u32   frame, parity, overrun, brk;
+       __u32   buf_overrun;
+       __u32   txok;
+       __u32   txunder;
+       __u32   txabort;
+       __u32   txtimeout;
+       __u32   rxshort;
+       __u32   rxlong;
+       __u32   rxabort;
+       __u32   rxover;
+       __u32   rxcrc;
+       __u32   rxok;
+       __u32   exithunt;
+       __u32   rxidle;
+};
+
+struct gpio_desc {
+       __u32 state;
+       __u32 smask;
+       __u32 dir;
+       __u32 dmask;
+};
+
+#define DEBUG_LEVEL_DATA       1
+#define DEBUG_LEVEL_ERROR      2
+#define DEBUG_LEVEL_INFO       3
+#define DEBUG_LEVEL_BH         4
+#define DEBUG_LEVEL_ISR                5
+
+/*
+** Event bit flags for use with MgslWaitEvent
+*/
+
+#define MgslEvent_DsrActive    0x0001
+#define MgslEvent_DsrInactive  0x0002
+#define MgslEvent_Dsr          0x0003
+#define MgslEvent_CtsActive    0x0004
+#define MgslEvent_CtsInactive  0x0008
+#define MgslEvent_Cts          0x000c
+#define MgslEvent_DcdActive    0x0010
+#define MgslEvent_DcdInactive  0x0020
+#define MgslEvent_Dcd          0x0030
+#define MgslEvent_RiActive     0x0040
+#define MgslEvent_RiInactive   0x0080
+#define MgslEvent_Ri           0x00c0
+#define MgslEvent_ExitHuntMode 0x0100
+#define MgslEvent_IdleReceived 0x0200
+
+/* Private IOCTL codes:
+ *
+ * MGSL_IOCSPARAMS     set MGSL_PARAMS structure values
+ * MGSL_IOCGPARAMS     get current MGSL_PARAMS structure values
+ * MGSL_IOCSTXIDLE     set current transmit idle mode
+ * MGSL_IOCGTXIDLE     get current transmit idle mode
+ * MGSL_IOCTXENABLE    enable or disable transmitter
+ * MGSL_IOCRXENABLE    enable or disable receiver
+ * MGSL_IOCTXABORT     abort transmitting frame (HDLC)
+ * MGSL_IOCGSTATS      return current statistics
+ * MGSL_IOCWAITEVENT   wait for specified event to occur
+ * MGSL_LOOPTXDONE     transmit in HDLC LoopMode done
+ * MGSL_IOCSIF          set the serial interface type
+ * MGSL_IOCGIF          get the serial interface type
+ */
+#define MGSL_MAGIC_IOC 'm'
+#define MGSL_IOCSPARAMS                _IOW(MGSL_MAGIC_IOC,0,struct _MGSL_PARAMS)
+#define MGSL_IOCGPARAMS                _IOR(MGSL_MAGIC_IOC,1,struct _MGSL_PARAMS)
+#define MGSL_IOCSTXIDLE                _IO(MGSL_MAGIC_IOC,2)
+#define MGSL_IOCGTXIDLE                _IO(MGSL_MAGIC_IOC,3)
+#define MGSL_IOCTXENABLE       _IO(MGSL_MAGIC_IOC,4)
+#define MGSL_IOCRXENABLE       _IO(MGSL_MAGIC_IOC,5)
+#define MGSL_IOCTXABORT                _IO(MGSL_MAGIC_IOC,6)
+#define MGSL_IOCGSTATS         _IO(MGSL_MAGIC_IOC,7)
+#define MGSL_IOCWAITEVENT      _IOWR(MGSL_MAGIC_IOC,8,int)
+#define MGSL_IOCCLRMODCOUNT    _IO(MGSL_MAGIC_IOC,15)
+#define MGSL_IOCLOOPTXDONE     _IO(MGSL_MAGIC_IOC,9)
+#define MGSL_IOCSIF            _IO(MGSL_MAGIC_IOC,10)
+#define MGSL_IOCGIF            _IO(MGSL_MAGIC_IOC,11)
+#define MGSL_IOCSGPIO          _IOW(MGSL_MAGIC_IOC,16,struct gpio_desc)
+#define MGSL_IOCGGPIO          _IOR(MGSL_MAGIC_IOC,17,struct gpio_desc)
+#define MGSL_IOCWAITGPIO       _IOWR(MGSL_MAGIC_IOC,18,struct gpio_desc)
+#define MGSL_IOCSXSYNC         _IO(MGSL_MAGIC_IOC, 19)
+#define MGSL_IOCGXSYNC         _IO(MGSL_MAGIC_IOC, 20)
+#define MGSL_IOCSXCTRL         _IO(MGSL_MAGIC_IOC, 21)
+#define MGSL_IOCGXCTRL         _IO(MGSL_MAGIC_IOC, 22)
+
+
+#endif /* _SYNCLINK_H_ */
diff --git a/lib/libdss-include/linux/sysctl.h b/lib/libdss-include/linux/sysctl.h
new file mode 100644 (file)
index 0000000..af4d004
--- /dev/null
@@ -0,0 +1,934 @@
+/*
+ * sysctl.h: General linux system control interface
+ *
+ * Begun 24 March 1995, Stephen Tweedie
+ *
+ ****************************************************************
+ ****************************************************************
+ **
+ **  WARNING:
+ **  The values in this file are exported to user space via 
+ **  the sysctl() binary interface.  Do *NOT* change the
+ **  numbering of any existing values here, and do not change
+ **  any numbers within any one set of values.  If you have to
+ **  redefine an existing interface, use a new number for it.
+ **  The kernel will then return -ENOTDIR to any application using
+ **  the old binary interface.
+ **
+ ****************************************************************
+ ****************************************************************
+ */
+
+#ifndef _LINUX_SYSCTL_H
+#define _LINUX_SYSCTL_H
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+
+struct completion;
+
+#define CTL_MAXNAME 10         /* how many path components do we allow in a
+                                  call to sysctl?   In other words, what is
+                                  the largest acceptable value for the nlen
+                                  member of a struct __sysctl_args to have? */
+
+struct __sysctl_args {
+       int *name;
+       int nlen;
+       void *oldval;
+       size_t *oldlenp;
+       void *newval;
+       size_t newlen;
+       unsigned long __unused[4];
+};
+
+/* Define sysctl names first */
+
+/* Top-level names: */
+
+enum
+{
+       CTL_KERN=1,             /* General kernel info and control */
+       CTL_VM=2,               /* VM management */
+       CTL_NET=3,              /* Networking */
+       CTL_PROC=4,             /* removal breaks strace(1) compilation */
+       CTL_FS=5,               /* Filesystems */
+       CTL_DEBUG=6,            /* Debugging */
+       CTL_DEV=7,              /* Devices */
+       CTL_BUS=8,              /* Busses */
+       CTL_ABI=9,              /* Binary emulation */
+       CTL_CPU=10,             /* CPU stuff (speed scaling, etc) */
+       CTL_ARLAN=254,          /* arlan wireless driver */
+       CTL_S390DBF=5677,       /* s390 debug */
+       CTL_SUNRPC=7249,        /* sunrpc debug */
+       CTL_PM=9899,            /* frv power management */
+       CTL_FRV=9898,           /* frv specific sysctls */
+};
+
+/* CTL_BUS names: */
+enum
+{
+       CTL_BUS_ISA=1           /* ISA */
+};
+
+/* /proc/sys/fs/inotify/ */
+enum
+{
+       INOTIFY_MAX_USER_INSTANCES=1,   /* max instances per user */
+       INOTIFY_MAX_USER_WATCHES=2,     /* max watches per user */
+       INOTIFY_MAX_QUEUED_EVENTS=3     /* max queued events per instance */
+};
+
+/* CTL_KERN names: */
+enum
+{
+       KERN_OSTYPE=1,          /* string: system version */
+       KERN_OSRELEASE=2,       /* string: system release */
+       KERN_OSREV=3,           /* int: system revision */
+       KERN_VERSION=4,         /* string: compile time info */
+       KERN_SECUREMASK=5,      /* struct: maximum rights mask */
+       KERN_PROF=6,            /* table: profiling information */
+       KERN_NODENAME=7,        /* string: hostname */
+       KERN_DOMAINNAME=8,      /* string: domainname */
+
+       KERN_PANIC=15,          /* int: panic timeout */
+       KERN_REALROOTDEV=16,    /* real root device to mount after initrd */
+
+       KERN_SPARC_REBOOT=21,   /* reboot command on Sparc */
+       KERN_CTLALTDEL=22,      /* int: allow ctl-alt-del to reboot */
+       KERN_PRINTK=23,         /* struct: control printk logging parameters */
+       KERN_NAMETRANS=24,      /* Name translation */
+       KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */
+       KERN_PPC_ZEROPAGED=26,  /* turn idle page zeroing on/off on PPC */
+       KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */
+       KERN_MODPROBE=28,       /* string: modprobe path */
+       KERN_SG_BIG_BUFF=29,    /* int: sg driver reserved buffer size */
+       KERN_ACCT=30,           /* BSD process accounting parameters */
+       KERN_PPC_L2CR=31,       /* l2cr register on PPC */
+
+       KERN_RTSIGNR=32,        /* Number of rt sigs queued */
+       KERN_RTSIGMAX=33,       /* Max queuable */
+       
+       KERN_SHMMAX=34,         /* long: Maximum shared memory segment */
+       KERN_MSGMAX=35,         /* int: Maximum size of a messege */
+       KERN_MSGMNB=36,         /* int: Maximum message queue size */
+       KERN_MSGPOOL=37,        /* int: Maximum system message pool size */
+       KERN_SYSRQ=38,          /* int: Sysreq enable */
+       KERN_MAX_THREADS=39,    /* int: Maximum nr of threads in the system */
+       KERN_RANDOM=40,         /* Random driver */
+       KERN_SHMALL=41,         /* int: Maximum size of shared memory */
+       KERN_MSGMNI=42,         /* int: msg queue identifiers */
+       KERN_SEM=43,            /* struct: sysv semaphore limits */
+       KERN_SPARC_STOP_A=44,   /* int: Sparc Stop-A enable */
+       KERN_SHMMNI=45,         /* int: shm array identifiers */
+       KERN_OVERFLOWUID=46,    /* int: overflow UID */
+       KERN_OVERFLOWGID=47,    /* int: overflow GID */
+       KERN_SHMPATH=48,        /* string: path to shm fs */
+       KERN_HOTPLUG=49,        /* string: path to uevent helper (deprecated) */
+       KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */
+       KERN_S390_USER_DEBUG_LOGGING=51,  /* int: dumps of user faults */
+       KERN_CORE_USES_PID=52,          /* int: use core or core.%pid */
+       KERN_TAINTED=53,        /* int: various kernel tainted flags */
+       KERN_CADPID=54,         /* int: PID of the process to notify on CAD */
+       KERN_PIDMAX=55,         /* int: PID # limit */
+       KERN_CORE_PATTERN=56,   /* string: pattern for core-file names */
+       KERN_PANIC_ON_OOPS=57,  /* int: whether we will panic on an oops */
+       KERN_HPPA_PWRSW=58,     /* int: hppa soft-power enable */
+       KERN_HPPA_UNALIGNED=59, /* int: hppa unaligned-trap enable */
+       KERN_PRINTK_RATELIMIT=60, /* int: tune printk ratelimiting */
+       KERN_PRINTK_RATELIMIT_BURST=61, /* int: tune printk ratelimiting */
+       KERN_PTY=62,            /* dir: pty driver */
+       KERN_NGROUPS_MAX=63,    /* int: NGROUPS_MAX */
+       KERN_SPARC_SCONS_PWROFF=64, /* int: serial console power-off halt */
+       KERN_HZ_TIMER=65,       /* int: hz timer on or off */
+       KERN_UNKNOWN_NMI_PANIC=66, /* int: unknown nmi panic flag */
+       KERN_BOOTLOADER_TYPE=67, /* int: boot loader type */
+       KERN_RANDOMIZE=68, /* int: randomize virtual address space */
+       KERN_SETUID_DUMPABLE=69, /* int: behaviour of dumps for setuid core */
+       KERN_SPIN_RETRY=70,     /* int: number of spinlock retries */
+       KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */
+       KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */
+       KERN_COMPAT_LOG=73,     /* int: print compat layer  messages */
+       KERN_MAX_LOCK_DEPTH=74, /* int: rtmutex's maximum lock depth */
+       KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */
+       KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */
+       KERN_PANIC_ON_WARN=77, /* int: call panic() in WARN() functions */
+};
+
+
+
+/* CTL_VM names: */
+enum
+{
+       VM_UNUSED1=1,           /* was: struct: Set vm swapping control */
+       VM_UNUSED2=2,           /* was; int: Linear or sqrt() swapout for hogs */
+       VM_UNUSED3=3,           /* was: struct: Set free page thresholds */
+       VM_UNUSED4=4,           /* Spare */
+       VM_OVERCOMMIT_MEMORY=5, /* Turn off the virtual memory safety limit */
+       VM_UNUSED5=6,           /* was: struct: Set buffer memory thresholds */
+       VM_UNUSED7=7,           /* was: struct: Set cache memory thresholds */
+       VM_UNUSED8=8,           /* was: struct: Control kswapd behaviour */
+       VM_UNUSED9=9,           /* was: struct: Set page table cache parameters */
+       VM_PAGE_CLUSTER=10,     /* int: set number of pages to swap together */
+       VM_DIRTY_BACKGROUND=11, /* dirty_background_ratio */
+       VM_DIRTY_RATIO=12,      /* dirty_ratio */
+       VM_DIRTY_WB_CS=13,      /* dirty_writeback_centisecs */
+       VM_DIRTY_EXPIRE_CS=14,  /* dirty_expire_centisecs */
+       VM_NR_PDFLUSH_THREADS=15, /* nr_pdflush_threads */
+       VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */
+       VM_PAGEBUF=17,          /* struct: Control pagebuf parameters */
+       VM_HUGETLB_PAGES=18,    /* int: Number of available Huge Pages */
+       VM_SWAPPINESS=19,       /* Tendency to steal mapped memory */
+       VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */
+       VM_MIN_FREE_KBYTES=21,  /* Minimum free kilobytes to maintain */
+       VM_MAX_MAP_COUNT=22,    /* int: Maximum number of mmaps/address-space */
+       VM_LAPTOP_MODE=23,      /* vm laptop mode */
+       VM_BLOCK_DUMP=24,       /* block dump mode */
+       VM_HUGETLB_GROUP=25,    /* permitted hugetlb group */
+       VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */
+       VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */
+       VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */
+       VM_DROP_PAGECACHE=29,   /* int: nuke lots of pagecache */
+       VM_PERCPU_PAGELIST_FRACTION=30,/* int: fraction of pages in each percpu_pagelist */
+       VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */
+       VM_MIN_UNMAPPED=32,     /* Set min percent of unmapped pages */
+       VM_PANIC_ON_OOM=33,     /* panic at out-of-memory */
+       VM_VDSO_ENABLED=34,     /* map VDSO into new processes? */
+       VM_MIN_SLAB=35,          /* Percent pages ignored by zone reclaim */
+};
+
+
+/* CTL_NET names: */
+enum
+{
+       NET_CORE=1,
+       NET_ETHER=2,
+       NET_802=3,
+       NET_UNIX=4,
+       NET_IPV4=5,
+       NET_IPX=6,
+       NET_ATALK=7,
+       NET_NETROM=8,
+       NET_AX25=9,
+       NET_BRIDGE=10,
+       NET_ROSE=11,
+       NET_IPV6=12,
+       NET_X25=13,
+       NET_TR=14,
+       NET_DECNET=15,
+       NET_ECONET=16,
+       NET_SCTP=17,
+       NET_LLC=18,
+       NET_NETFILTER=19,
+       NET_DCCP=20,
+       NET_IRDA=412,
+};
+
+/* /proc/sys/kernel/random */
+enum
+{
+       RANDOM_POOLSIZE=1,
+       RANDOM_ENTROPY_COUNT=2,
+       RANDOM_READ_THRESH=3,
+       RANDOM_WRITE_THRESH=4,
+       RANDOM_BOOT_ID=5,
+       RANDOM_UUID=6
+};
+
+/* /proc/sys/kernel/pty */
+enum
+{
+       PTY_MAX=1,
+       PTY_NR=2
+};
+
+/* /proc/sys/bus/isa */
+enum
+{
+       BUS_ISA_MEM_BASE=1,
+       BUS_ISA_PORT_BASE=2,
+       BUS_ISA_PORT_SHIFT=3
+};
+
+/* /proc/sys/net/core */
+enum
+{
+       NET_CORE_WMEM_MAX=1,
+       NET_CORE_RMEM_MAX=2,
+       NET_CORE_WMEM_DEFAULT=3,
+       NET_CORE_RMEM_DEFAULT=4,
+/* was NET_CORE_DESTROY_DELAY */
+       NET_CORE_MAX_BACKLOG=6,
+       NET_CORE_FASTROUTE=7,
+       NET_CORE_MSG_COST=8,
+       NET_CORE_MSG_BURST=9,
+       NET_CORE_OPTMEM_MAX=10,
+       NET_CORE_HOT_LIST_LENGTH=11,
+       NET_CORE_DIVERT_VERSION=12,
+       NET_CORE_NO_CONG_THRESH=13,
+       NET_CORE_NO_CONG=14,
+       NET_CORE_LO_CONG=15,
+       NET_CORE_MOD_CONG=16,
+       NET_CORE_DEV_WEIGHT=17,
+       NET_CORE_SOMAXCONN=18,
+       NET_CORE_BUDGET=19,
+       NET_CORE_AEVENT_ETIME=20,
+       NET_CORE_AEVENT_RSEQTH=21,
+       NET_CORE_WARNINGS=22,
+};
+
+/* /proc/sys/net/ethernet */
+
+/* /proc/sys/net/802 */
+
+/* /proc/sys/net/unix */
+
+enum
+{
+       NET_UNIX_DESTROY_DELAY=1,
+       NET_UNIX_DELETE_DELAY=2,
+       NET_UNIX_MAX_DGRAM_QLEN=3,
+};
+
+/* /proc/sys/net/netfilter */
+enum
+{
+       NET_NF_CONNTRACK_MAX=1,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
+       NET_NF_CONNTRACK_UDP_TIMEOUT=10,
+       NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
+       NET_NF_CONNTRACK_ICMP_TIMEOUT=12,
+       NET_NF_CONNTRACK_GENERIC_TIMEOUT=13,
+       NET_NF_CONNTRACK_BUCKETS=14,
+       NET_NF_CONNTRACK_LOG_INVALID=15,
+       NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
+       NET_NF_CONNTRACK_TCP_LOOSE=17,
+       NET_NF_CONNTRACK_TCP_BE_LIBERAL=18,
+       NET_NF_CONNTRACK_TCP_MAX_RETRANS=19,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
+       NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
+       NET_NF_CONNTRACK_COUNT=27,
+       NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28,
+       NET_NF_CONNTRACK_FRAG6_TIMEOUT=29,
+       NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30,
+       NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31,
+       NET_NF_CONNTRACK_CHECKSUM=32,
+};
+
+/* /proc/sys/net/ipv4 */
+enum
+{
+       /* v2.0 compatibile variables */
+       NET_IPV4_FORWARD=8,
+       NET_IPV4_DYNADDR=9,
+
+       NET_IPV4_CONF=16,
+       NET_IPV4_NEIGH=17,
+       NET_IPV4_ROUTE=18,
+       NET_IPV4_FIB_HASH=19,
+       NET_IPV4_NETFILTER=20,
+
+       NET_IPV4_TCP_TIMESTAMPS=33,
+       NET_IPV4_TCP_WINDOW_SCALING=34,
+       NET_IPV4_TCP_SACK=35,
+       NET_IPV4_TCP_RETRANS_COLLAPSE=36,
+       NET_IPV4_DEFAULT_TTL=37,
+       NET_IPV4_AUTOCONFIG=38,
+       NET_IPV4_NO_PMTU_DISC=39,
+       NET_IPV4_TCP_SYN_RETRIES=40,
+       NET_IPV4_IPFRAG_HIGH_THRESH=41,
+       NET_IPV4_IPFRAG_LOW_THRESH=42,
+       NET_IPV4_IPFRAG_TIME=43,
+       NET_IPV4_TCP_MAX_KA_PROBES=44,
+       NET_IPV4_TCP_KEEPALIVE_TIME=45,
+       NET_IPV4_TCP_KEEPALIVE_PROBES=46,
+       NET_IPV4_TCP_RETRIES1=47,
+       NET_IPV4_TCP_RETRIES2=48,
+       NET_IPV4_TCP_FIN_TIMEOUT=49,
+       NET_IPV4_IP_MASQ_DEBUG=50,
+       NET_TCP_SYNCOOKIES=51,
+       NET_TCP_STDURG=52,
+       NET_TCP_RFC1337=53,
+       NET_TCP_SYN_TAILDROP=54,
+       NET_TCP_MAX_SYN_BACKLOG=55,
+       NET_IPV4_LOCAL_PORT_RANGE=56,
+       NET_IPV4_ICMP_ECHO_IGNORE_ALL=57,
+       NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58,
+       NET_IPV4_ICMP_SOURCEQUENCH_RATE=59,
+       NET_IPV4_ICMP_DESTUNREACH_RATE=60,
+       NET_IPV4_ICMP_TIMEEXCEED_RATE=61,
+       NET_IPV4_ICMP_PARAMPROB_RATE=62,
+       NET_IPV4_ICMP_ECHOREPLY_RATE=63,
+       NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64,
+       NET_IPV4_IGMP_MAX_MEMBERSHIPS=65,
+       NET_TCP_TW_RECYCLE=66,
+       NET_IPV4_ALWAYS_DEFRAG=67,
+       NET_IPV4_TCP_KEEPALIVE_INTVL=68,
+       NET_IPV4_INET_PEER_THRESHOLD=69,
+       NET_IPV4_INET_PEER_MINTTL=70,
+       NET_IPV4_INET_PEER_MAXTTL=71,
+       NET_IPV4_INET_PEER_GC_MINTIME=72,
+       NET_IPV4_INET_PEER_GC_MAXTIME=73,
+       NET_TCP_ORPHAN_RETRIES=74,
+       NET_TCP_ABORT_ON_OVERFLOW=75,
+       NET_TCP_SYNACK_RETRIES=76,
+       NET_TCP_MAX_ORPHANS=77,
+       NET_TCP_MAX_TW_BUCKETS=78,
+       NET_TCP_FACK=79,
+       NET_TCP_REORDERING=80,
+       NET_TCP_ECN=81,
+       NET_TCP_DSACK=82,
+       NET_TCP_MEM=83,
+       NET_TCP_WMEM=84,
+       NET_TCP_RMEM=85,
+       NET_TCP_APP_WIN=86,
+       NET_TCP_ADV_WIN_SCALE=87,
+       NET_IPV4_NONLOCAL_BIND=88,
+       NET_IPV4_ICMP_RATELIMIT=89,
+       NET_IPV4_ICMP_RATEMASK=90,
+       NET_TCP_TW_REUSE=91,
+       NET_TCP_FRTO=92,
+       NET_TCP_LOW_LATENCY=93,
+       NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
+       NET_IPV4_IGMP_MAX_MSF=96,
+       NET_TCP_NO_METRICS_SAVE=97,
+       NET_TCP_DEFAULT_WIN_SCALE=105,
+       NET_TCP_MODERATE_RCVBUF=106,
+       NET_TCP_TSO_WIN_DIVISOR=107,
+       NET_TCP_BIC_BETA=108,
+       NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
+       NET_TCP_CONG_CONTROL=110,
+       NET_TCP_ABC=111,
+       NET_IPV4_IPFRAG_MAX_DIST=112,
+       NET_TCP_MTU_PROBING=113,
+       NET_TCP_BASE_MSS=114,
+       NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115,
+       NET_TCP_DMA_COPYBREAK=116,
+       NET_TCP_SLOW_START_AFTER_IDLE=117,
+       NET_CIPSOV4_CACHE_ENABLE=118,
+       NET_CIPSOV4_CACHE_BUCKET_SIZE=119,
+       NET_CIPSOV4_RBM_OPTFMT=120,
+       NET_CIPSOV4_RBM_STRICTVALID=121,
+       NET_TCP_AVAIL_CONG_CONTROL=122,
+       NET_TCP_ALLOWED_CONG_CONTROL=123,
+       NET_TCP_MAX_SSTHRESH=124,
+       NET_TCP_FRTO_RESPONSE=125,
+};
+
+enum {
+       NET_IPV4_ROUTE_FLUSH=1,
+       NET_IPV4_ROUTE_MIN_DELAY=2, /* obsolete since 2.6.25 */
+       NET_IPV4_ROUTE_MAX_DELAY=3, /* obsolete since 2.6.25 */
+       NET_IPV4_ROUTE_GC_THRESH=4,
+       NET_IPV4_ROUTE_MAX_SIZE=5,
+       NET_IPV4_ROUTE_GC_MIN_INTERVAL=6,
+       NET_IPV4_ROUTE_GC_TIMEOUT=7,
+       NET_IPV4_ROUTE_GC_INTERVAL=8, /* obsolete since 2.6.38 */
+       NET_IPV4_ROUTE_REDIRECT_LOAD=9,
+       NET_IPV4_ROUTE_REDIRECT_NUMBER=10,
+       NET_IPV4_ROUTE_REDIRECT_SILENCE=11,
+       NET_IPV4_ROUTE_ERROR_COST=12,
+       NET_IPV4_ROUTE_ERROR_BURST=13,
+       NET_IPV4_ROUTE_GC_ELASTICITY=14,
+       NET_IPV4_ROUTE_MTU_EXPIRES=15,
+       NET_IPV4_ROUTE_MIN_PMTU=16,
+       NET_IPV4_ROUTE_MIN_ADVMSS=17,
+       NET_IPV4_ROUTE_SECRET_INTERVAL=18,
+       NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
+};
+
+enum
+{
+       NET_PROTO_CONF_ALL=-2,
+       NET_PROTO_CONF_DEFAULT=-3
+
+       /* And device ifindices ... */
+};
+
+enum
+{
+       NET_IPV4_CONF_FORWARDING=1,
+       NET_IPV4_CONF_MC_FORWARDING=2,
+       NET_IPV4_CONF_PROXY_ARP=3,
+       NET_IPV4_CONF_ACCEPT_REDIRECTS=4,
+       NET_IPV4_CONF_SECURE_REDIRECTS=5,
+       NET_IPV4_CONF_SEND_REDIRECTS=6,
+       NET_IPV4_CONF_SHARED_MEDIA=7,
+       NET_IPV4_CONF_RP_FILTER=8,
+       NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
+       NET_IPV4_CONF_BOOTP_RELAY=10,
+       NET_IPV4_CONF_LOG_MARTIANS=11,
+       NET_IPV4_CONF_TAG=12,
+       NET_IPV4_CONF_ARPFILTER=13,
+       NET_IPV4_CONF_MEDIUM_ID=14,
+       NET_IPV4_CONF_NOXFRM=15,
+       NET_IPV4_CONF_NOPOLICY=16,
+       NET_IPV4_CONF_FORCE_IGMP_VERSION=17,
+       NET_IPV4_CONF_ARP_ANNOUNCE=18,
+       NET_IPV4_CONF_ARP_IGNORE=19,
+       NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
+       NET_IPV4_CONF_ARP_ACCEPT=21,
+       NET_IPV4_CONF_ARP_NOTIFY=22,
+};
+
+/* /proc/sys/net/ipv4/netfilter */
+enum
+{
+       NET_IPV4_NF_CONNTRACK_MAX=1,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
+       NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10,
+       NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
+       NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12,
+       NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13,
+       NET_IPV4_NF_CONNTRACK_BUCKETS=14,
+       NET_IPV4_NF_CONNTRACK_LOG_INVALID=15,
+       NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
+       NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17,
+       NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18,
+       NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
+       NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
+       NET_IPV4_NF_CONNTRACK_COUNT=27,
+       NET_IPV4_NF_CONNTRACK_CHECKSUM=28,
+};
+/* /proc/sys/net/ipv6 */
+enum {
+       NET_IPV6_CONF=16,
+       NET_IPV6_NEIGH=17,
+       NET_IPV6_ROUTE=18,
+       NET_IPV6_ICMP=19,
+       NET_IPV6_BINDV6ONLY=20,
+       NET_IPV6_IP6FRAG_HIGH_THRESH=21,
+       NET_IPV6_IP6FRAG_LOW_THRESH=22,
+       NET_IPV6_IP6FRAG_TIME=23,
+       NET_IPV6_IP6FRAG_SECRET_INTERVAL=24,
+       NET_IPV6_MLD_MAX_MSF=25,
+};
+
+enum {
+       NET_IPV6_ROUTE_FLUSH=1,
+       NET_IPV6_ROUTE_GC_THRESH=2,
+       NET_IPV6_ROUTE_MAX_SIZE=3,
+       NET_IPV6_ROUTE_GC_MIN_INTERVAL=4,
+       NET_IPV6_ROUTE_GC_TIMEOUT=5,
+       NET_IPV6_ROUTE_GC_INTERVAL=6,
+       NET_IPV6_ROUTE_GC_ELASTICITY=7,
+       NET_IPV6_ROUTE_MTU_EXPIRES=8,
+       NET_IPV6_ROUTE_MIN_ADVMSS=9,
+       NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10
+};
+
+enum {
+       NET_IPV6_FORWARDING=1,
+       NET_IPV6_HOP_LIMIT=2,
+       NET_IPV6_MTU=3,
+       NET_IPV6_ACCEPT_RA=4,
+       NET_IPV6_ACCEPT_REDIRECTS=5,
+       NET_IPV6_AUTOCONF=6,
+       NET_IPV6_DAD_TRANSMITS=7,
+       NET_IPV6_RTR_SOLICITS=8,
+       NET_IPV6_RTR_SOLICIT_INTERVAL=9,
+       NET_IPV6_RTR_SOLICIT_DELAY=10,
+       NET_IPV6_USE_TEMPADDR=11,
+       NET_IPV6_TEMP_VALID_LFT=12,
+       NET_IPV6_TEMP_PREFERED_LFT=13,
+       NET_IPV6_REGEN_MAX_RETRY=14,
+       NET_IPV6_MAX_DESYNC_FACTOR=15,
+       NET_IPV6_MAX_ADDRESSES=16,
+       NET_IPV6_FORCE_MLD_VERSION=17,
+       NET_IPV6_ACCEPT_RA_DEFRTR=18,
+       NET_IPV6_ACCEPT_RA_PINFO=19,
+       NET_IPV6_ACCEPT_RA_RTR_PREF=20,
+       NET_IPV6_RTR_PROBE_INTERVAL=21,
+       NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
+       NET_IPV6_PROXY_NDP=23,
+       NET_IPV6_ACCEPT_SOURCE_ROUTE=25,
+       NET_IPV6_ACCEPT_RA_FROM_LOCAL=26,
+       __NET_IPV6_MAX
+};
+
+/* /proc/sys/net/ipv6/icmp */
+enum {
+       NET_IPV6_ICMP_RATELIMIT=1
+};
+
+/* /proc/sys/net/<protocol>/neigh/<dev> */
+enum {
+       NET_NEIGH_MCAST_SOLICIT=1,
+       NET_NEIGH_UCAST_SOLICIT=2,
+       NET_NEIGH_APP_SOLICIT=3,
+       NET_NEIGH_RETRANS_TIME=4,
+       NET_NEIGH_REACHABLE_TIME=5,
+       NET_NEIGH_DELAY_PROBE_TIME=6,
+       NET_NEIGH_GC_STALE_TIME=7,
+       NET_NEIGH_UNRES_QLEN=8,
+       NET_NEIGH_PROXY_QLEN=9,
+       NET_NEIGH_ANYCAST_DELAY=10,
+       NET_NEIGH_PROXY_DELAY=11,
+       NET_NEIGH_LOCKTIME=12,
+       NET_NEIGH_GC_INTERVAL=13,
+       NET_NEIGH_GC_THRESH1=14,
+       NET_NEIGH_GC_THRESH2=15,
+       NET_NEIGH_GC_THRESH3=16,
+       NET_NEIGH_RETRANS_TIME_MS=17,
+       NET_NEIGH_REACHABLE_TIME_MS=18,
+};
+
+/* /proc/sys/net/dccp */
+enum {
+       NET_DCCP_DEFAULT=1,
+};
+
+/* /proc/sys/net/ipx */
+enum {
+       NET_IPX_PPROP_BROADCASTING=1,
+       NET_IPX_FORWARDING=2
+};
+
+/* /proc/sys/net/llc */
+enum {
+       NET_LLC2=1,
+       NET_LLC_STATION=2,
+};
+
+/* /proc/sys/net/llc/llc2 */
+enum {
+       NET_LLC2_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/station */
+enum {
+       NET_LLC_STATION_ACK_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/llc2/timeout */
+enum {
+       NET_LLC2_ACK_TIMEOUT=1,
+       NET_LLC2_P_TIMEOUT=2,
+       NET_LLC2_REJ_TIMEOUT=3,
+       NET_LLC2_BUSY_TIMEOUT=4,
+};
+
+/* /proc/sys/net/appletalk */
+enum {
+       NET_ATALK_AARP_EXPIRY_TIME=1,
+       NET_ATALK_AARP_TICK_TIME=2,
+       NET_ATALK_AARP_RETRANSMIT_LIMIT=3,
+       NET_ATALK_AARP_RESOLVE_TIME=4
+};
+
+
+/* /proc/sys/net/netrom */
+enum {
+       NET_NETROM_DEFAULT_PATH_QUALITY=1,
+       NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2,
+       NET_NETROM_NETWORK_TTL_INITIALISER=3,
+       NET_NETROM_TRANSPORT_TIMEOUT=4,
+       NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5,
+       NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6,
+       NET_NETROM_TRANSPORT_BUSY_DELAY=7,
+       NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8,
+       NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9,
+       NET_NETROM_ROUTING_CONTROL=10,
+       NET_NETROM_LINK_FAILS_COUNT=11,
+       NET_NETROM_RESET=12
+};
+
+/* /proc/sys/net/ax25 */
+enum {
+       NET_AX25_IP_DEFAULT_MODE=1,
+       NET_AX25_DEFAULT_MODE=2,
+       NET_AX25_BACKOFF_TYPE=3,
+       NET_AX25_CONNECT_MODE=4,
+       NET_AX25_STANDARD_WINDOW=5,
+       NET_AX25_EXTENDED_WINDOW=6,
+       NET_AX25_T1_TIMEOUT=7,
+       NET_AX25_T2_TIMEOUT=8,
+       NET_AX25_T3_TIMEOUT=9,
+       NET_AX25_IDLE_TIMEOUT=10,
+       NET_AX25_N2=11,
+       NET_AX25_PACLEN=12,
+       NET_AX25_PROTOCOL=13,
+       NET_AX25_DAMA_SLAVE_TIMEOUT=14
+};
+
+/* /proc/sys/net/rose */
+enum {
+       NET_ROSE_RESTART_REQUEST_TIMEOUT=1,
+       NET_ROSE_CALL_REQUEST_TIMEOUT=2,
+       NET_ROSE_RESET_REQUEST_TIMEOUT=3,
+       NET_ROSE_CLEAR_REQUEST_TIMEOUT=4,
+       NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5,
+       NET_ROSE_ROUTING_CONTROL=6,
+       NET_ROSE_LINK_FAIL_TIMEOUT=7,
+       NET_ROSE_MAX_VCS=8,
+       NET_ROSE_WINDOW_SIZE=9,
+       NET_ROSE_NO_ACTIVITY_TIMEOUT=10
+};
+
+/* /proc/sys/net/x25 */
+enum {
+       NET_X25_RESTART_REQUEST_TIMEOUT=1,
+       NET_X25_CALL_REQUEST_TIMEOUT=2,
+       NET_X25_RESET_REQUEST_TIMEOUT=3,
+       NET_X25_CLEAR_REQUEST_TIMEOUT=4,
+       NET_X25_ACK_HOLD_BACK_TIMEOUT=5,
+       NET_X25_FORWARD=6
+};
+
+/* /proc/sys/net/token-ring */
+enum
+{
+       NET_TR_RIF_TIMEOUT=1
+};
+
+/* /proc/sys/net/decnet/ */
+enum {
+       NET_DECNET_NODE_TYPE = 1,
+       NET_DECNET_NODE_ADDRESS = 2,
+       NET_DECNET_NODE_NAME = 3,
+       NET_DECNET_DEFAULT_DEVICE = 4,
+       NET_DECNET_TIME_WAIT = 5,
+       NET_DECNET_DN_COUNT = 6,
+       NET_DECNET_DI_COUNT = 7,
+       NET_DECNET_DR_COUNT = 8,
+       NET_DECNET_DST_GC_INTERVAL = 9,
+       NET_DECNET_CONF = 10,
+       NET_DECNET_NO_FC_MAX_CWND = 11,
+       NET_DECNET_MEM = 12,
+       NET_DECNET_RMEM = 13,
+       NET_DECNET_WMEM = 14,
+       NET_DECNET_DEBUG_LEVEL = 255
+};
+
+/* /proc/sys/net/decnet/conf/<dev> */
+enum {
+       NET_DECNET_CONF_LOOPBACK = -2,
+       NET_DECNET_CONF_DDCMP = -3,
+       NET_DECNET_CONF_PPP = -4,
+       NET_DECNET_CONF_X25 = -5,
+       NET_DECNET_CONF_GRE = -6,
+       NET_DECNET_CONF_ETHER = -7
+
+       /* ... and ifindex of devices */
+};
+
+/* /proc/sys/net/decnet/conf/<dev>/ */
+enum {
+       NET_DECNET_CONF_DEV_PRIORITY = 1,
+       NET_DECNET_CONF_DEV_T1 = 2,
+       NET_DECNET_CONF_DEV_T2 = 3,
+       NET_DECNET_CONF_DEV_T3 = 4,
+       NET_DECNET_CONF_DEV_FORWARDING = 5,
+       NET_DECNET_CONF_DEV_BLKSIZE = 6,
+       NET_DECNET_CONF_DEV_STATE = 7
+};
+
+/* /proc/sys/net/sctp */
+enum {
+       NET_SCTP_RTO_INITIAL = 1,
+       NET_SCTP_RTO_MIN     = 2,
+       NET_SCTP_RTO_MAX     = 3,
+       NET_SCTP_RTO_ALPHA   = 4,
+       NET_SCTP_RTO_BETA    = 5,
+       NET_SCTP_VALID_COOKIE_LIFE       =  6,
+       NET_SCTP_ASSOCIATION_MAX_RETRANS =  7,
+       NET_SCTP_PATH_MAX_RETRANS        =  8,
+       NET_SCTP_MAX_INIT_RETRANSMITS    =  9,
+       NET_SCTP_HB_INTERVAL             = 10,
+       NET_SCTP_PRESERVE_ENABLE         = 11,
+       NET_SCTP_MAX_BURST               = 12,
+       NET_SCTP_ADDIP_ENABLE            = 13,
+       NET_SCTP_PRSCTP_ENABLE           = 14,
+       NET_SCTP_SNDBUF_POLICY           = 15,
+       NET_SCTP_SACK_TIMEOUT            = 16,
+       NET_SCTP_RCVBUF_POLICY           = 17,
+};
+
+/* /proc/sys/net/bridge */
+enum {
+       NET_BRIDGE_NF_CALL_ARPTABLES = 1,
+       NET_BRIDGE_NF_CALL_IPTABLES = 2,
+       NET_BRIDGE_NF_CALL_IP6TABLES = 3,
+       NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4,
+       NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5,
+};
+
+/* proc/sys/net/irda */
+enum {
+       NET_IRDA_DISCOVERY=1,
+       NET_IRDA_DEVNAME=2,
+       NET_IRDA_DEBUG=3,
+       NET_IRDA_FAST_POLL=4,
+       NET_IRDA_DISCOVERY_SLOTS=5,
+       NET_IRDA_DISCOVERY_TIMEOUT=6,
+       NET_IRDA_SLOT_TIMEOUT=7,
+       NET_IRDA_MAX_BAUD_RATE=8,
+       NET_IRDA_MIN_TX_TURN_TIME=9,
+       NET_IRDA_MAX_TX_DATA_SIZE=10,
+       NET_IRDA_MAX_TX_WINDOW=11,
+       NET_IRDA_MAX_NOREPLY_TIME=12,
+       NET_IRDA_WARN_NOREPLY_TIME=13,
+       NET_IRDA_LAP_KEEPALIVE_TIME=14,
+};
+
+
+/* CTL_FS names: */
+enum
+{
+       FS_NRINODE=1,   /* int:current number of allocated inodes */
+       FS_STATINODE=2,
+       FS_MAXINODE=3,  /* int:maximum number of inodes that can be allocated */
+       FS_NRDQUOT=4,   /* int:current number of allocated dquots */
+       FS_MAXDQUOT=5,  /* int:maximum number of dquots that can be allocated */
+       FS_NRFILE=6,    /* int:current number of allocated filedescriptors */
+       FS_MAXFILE=7,   /* int:maximum number of filedescriptors that can be allocated */
+       FS_DENTRY=8,
+       FS_NRSUPER=9,   /* int:current number of allocated super_blocks */
+       FS_MAXSUPER=10, /* int:maximum number of super_blocks that can be allocated */
+       FS_OVERFLOWUID=11,      /* int: overflow UID */
+       FS_OVERFLOWGID=12,      /* int: overflow GID */
+       FS_LEASES=13,   /* int: leases enabled */
+       FS_DIR_NOTIFY=14,       /* int: directory notification enabled */
+       FS_LEASE_TIME=15,       /* int: maximum time to wait for a lease break */
+       FS_DQSTATS=16,  /* disc quota usage statistics and control */
+       FS_XFS=17,      /* struct: control xfs parameters */
+       FS_AIO_NR=18,   /* current system-wide number of aio requests */
+       FS_AIO_MAX_NR=19,       /* system-wide maximum number of aio requests */
+       FS_INOTIFY=20,  /* inotify submenu */
+       FS_OCFS2=988,   /* ocfs2 */
+};
+
+/* /proc/sys/fs/quota/ */
+enum {
+       FS_DQ_LOOKUPS = 1,
+       FS_DQ_DROPS = 2,
+       FS_DQ_READS = 3,
+       FS_DQ_WRITES = 4,
+       FS_DQ_CACHE_HITS = 5,
+       FS_DQ_ALLOCATED = 6,
+       FS_DQ_FREE = 7,
+       FS_DQ_SYNCS = 8,
+       FS_DQ_WARNINGS = 9,
+};
+
+/* CTL_DEBUG names: */
+
+/* CTL_DEV names: */
+enum {
+       DEV_CDROM=1,
+       DEV_HWMON=2,
+       DEV_PARPORT=3,
+       DEV_RAID=4,
+       DEV_MAC_HID=5,
+       DEV_SCSI=6,
+       DEV_IPMI=7,
+};
+
+/* /proc/sys/dev/cdrom */
+enum {
+       DEV_CDROM_INFO=1,
+       DEV_CDROM_AUTOCLOSE=2,
+       DEV_CDROM_AUTOEJECT=3,
+       DEV_CDROM_DEBUG=4,
+       DEV_CDROM_LOCK=5,
+       DEV_CDROM_CHECK_MEDIA=6
+};
+
+/* /proc/sys/dev/parport */
+enum {
+       DEV_PARPORT_DEFAULT=-3
+};
+
+/* /proc/sys/dev/raid */
+enum {
+       DEV_RAID_SPEED_LIMIT_MIN=1,
+       DEV_RAID_SPEED_LIMIT_MAX=2
+};
+
+/* /proc/sys/dev/parport/default */
+enum {
+       DEV_PARPORT_DEFAULT_TIMESLICE=1,
+       DEV_PARPORT_DEFAULT_SPINTIME=2
+};
+
+/* /proc/sys/dev/parport/parport n */
+enum {
+       DEV_PARPORT_SPINTIME=1,
+       DEV_PARPORT_BASE_ADDR=2,
+       DEV_PARPORT_IRQ=3,
+       DEV_PARPORT_DMA=4,
+       DEV_PARPORT_MODES=5,
+       DEV_PARPORT_DEVICES=6,
+       DEV_PARPORT_AUTOPROBE=16
+};
+
+/* /proc/sys/dev/parport/parport n/devices/ */
+enum {
+       DEV_PARPORT_DEVICES_ACTIVE=-3,
+};
+
+/* /proc/sys/dev/parport/parport n/devices/device n */
+enum {
+       DEV_PARPORT_DEVICE_TIMESLICE=1,
+};
+
+/* /proc/sys/dev/mac_hid */
+enum {
+       DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
+       DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
+       DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
+       DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
+       DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
+       DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
+};
+
+/* /proc/sys/dev/scsi */
+enum {
+       DEV_SCSI_LOGGING_LEVEL=1,
+};
+
+/* /proc/sys/dev/ipmi */
+enum {
+       DEV_IPMI_POWEROFF_POWERCYCLE=1,
+};
+
+/* /proc/sys/abi */
+enum
+{
+       ABI_DEFHANDLER_COFF=1,  /* default handler for coff binaries */
+       ABI_DEFHANDLER_ELF=2,   /* default handler for ELF binaries */
+       ABI_DEFHANDLER_LCALL7=3,/* default handler for procs using lcall7 */
+       ABI_DEFHANDLER_LIBCSO=4,/* default handler for an libc.so ELF interp */
+       ABI_TRACE=5,            /* tracing flags */
+       ABI_FAKE_UTSNAME=6,     /* fake target utsname information */
+};
+
+
+#endif /* _LINUX_SYSCTL_H */
diff --git a/lib/libdss-include/linux/sysinfo.h b/lib/libdss-include/linux/sysinfo.h
new file mode 100644 (file)
index 0000000..934335a
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef _LINUX_SYSINFO_H
+#define _LINUX_SYSINFO_H
+
+#include <linux/types.h>
+
+#define SI_LOAD_SHIFT  16
+struct sysinfo {
+       __kernel_long_t uptime;         /* Seconds since boot */
+       __kernel_ulong_t loads[3];      /* 1, 5, and 15 minute load averages */
+       __kernel_ulong_t totalram;      /* Total usable main memory size */
+       __kernel_ulong_t freeram;       /* Available memory size */
+       __kernel_ulong_t sharedram;     /* Amount of shared memory */
+       __kernel_ulong_t bufferram;     /* Memory used by buffers */
+       __kernel_ulong_t totalswap;     /* Total swap space size */
+       __kernel_ulong_t freeswap;      /* swap space still available */
+       __u16 procs;                    /* Number of current processes */
+       __u16 pad;                      /* Explicit padding for m68k */
+       __kernel_ulong_t totalhigh;     /* Total high memory size */
+       __kernel_ulong_t freehigh;      /* Available high memory size */
+       __u32 mem_unit;                 /* Memory unit size in bytes */
+       char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];   /* Padding: libc5 uses this.. */
+};
+
+#endif /* _LINUX_SYSINFO_H */
diff --git a/lib/libdss-include/linux/target_core_user.h b/lib/libdss-include/linux/target_core_user.h
new file mode 100644 (file)
index 0000000..94b1eff
--- /dev/null
@@ -0,0 +1,144 @@
+#ifndef __TARGET_CORE_USER_H
+#define __TARGET_CORE_USER_H
+
+/* This header will be used by application too */
+
+#include <linux/types.h>
+#include <linux/uio.h>
+
+#define TCMU_VERSION "2.0"
+
+/*
+ * Ring Design
+ * -----------
+ *
+ * The mmaped area is divided into three parts:
+ * 1) The mailbox (struct tcmu_mailbox, below)
+ * 2) The command ring
+ * 3) Everything beyond the command ring (data)
+ *
+ * The mailbox tells userspace the offset of the command ring from the
+ * start of the shared memory region, and how big the command ring is.
+ *
+ * The kernel passes SCSI commands to userspace by putting a struct
+ * tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking
+ * userspace via uio's interrupt mechanism.
+ *
+ * tcmu_cmd_entry contains a header. If the header type is PAD,
+ * userspace should skip hdr->length bytes (mod cmdr_size) to find the
+ * next cmd_entry.
+ *
+ * Otherwise, the entry will contain offsets into the mmaped area that
+ * contain the cdb and data buffers -- the latter accessible via the
+ * iov array. iov addresses are also offsets into the shared area.
+ *
+ * When userspace is completed handling the command, set
+ * entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate,
+ * and also set mailbox->cmd_tail equal to the old cmd_tail plus
+ * hdr->length, mod cmdr_size. If cmd_tail doesn't equal cmd_head, it
+ * should process the next packet the same way, and so on.
+ */
+
+#define TCMU_MAILBOX_VERSION 2
+#define ALIGN_SIZE 64 /* Should be enough for most CPUs */
+
+struct tcmu_mailbox {
+       __u16 version;
+       __u16 flags;
+       __u32 cmdr_off;
+       __u32 cmdr_size;
+
+       __u32 cmd_head;
+
+       /* Updated by user. On its own cacheline */
+       __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE)));
+
+} __attribute__((packed));
+
+enum tcmu_opcode {
+       TCMU_OP_PAD = 0,
+       TCMU_OP_CMD,
+};
+
+/*
+ * Only a few opcodes, and length is 8-byte aligned, so use low bits for opcode.
+ */
+struct tcmu_cmd_entry_hdr {
+       __u32 len_op;
+       __u16 cmd_id;
+       __u8 kflags;
+#define TCMU_UFLAG_UNKNOWN_OP 0x1
+       __u8 uflags;
+
+} __attribute__((packed));
+
+#define TCMU_OP_MASK 0x7
+
+static __inline__ enum tcmu_opcode tcmu_hdr_get_op(__u32 len_op)
+{
+       return len_op & TCMU_OP_MASK;
+}
+
+static __inline__ void tcmu_hdr_set_op(__u32 *len_op, enum tcmu_opcode op)
+{
+       *len_op &= ~TCMU_OP_MASK;
+       *len_op |= (op & TCMU_OP_MASK);
+}
+
+static __inline__ __u32 tcmu_hdr_get_len(__u32 len_op)
+{
+       return len_op & ~TCMU_OP_MASK;
+}
+
+static __inline__ void tcmu_hdr_set_len(__u32 *len_op, __u32 len)
+{
+       *len_op &= TCMU_OP_MASK;
+       *len_op |= len;
+}
+
+/* Currently the same as SCSI_SENSE_BUFFERSIZE */
+#define TCMU_SENSE_BUFFERSIZE 96
+
+struct tcmu_cmd_entry {
+       struct tcmu_cmd_entry_hdr hdr;
+
+       union {
+               struct {
+                       uint32_t iov_cnt;
+                       uint32_t iov_bidi_cnt;
+                       uint32_t iov_dif_cnt;
+                       uint64_t cdb_off;
+                       uint64_t __pad1;
+                       uint64_t __pad2;
+                       struct iovec iov[0];
+               } req;
+               struct {
+                       uint8_t scsi_status;
+                       uint8_t __pad1;
+                       uint16_t __pad2;
+                       uint32_t __pad3;
+                       char sense_buffer[TCMU_SENSE_BUFFERSIZE];
+               } rsp;
+       };
+
+} __attribute__((packed));
+
+#define TCMU_OP_ALIGN_SIZE sizeof(uint64_t)
+
+enum tcmu_genl_cmd {
+       TCMU_CMD_UNSPEC,
+       TCMU_CMD_ADDED_DEVICE,
+       TCMU_CMD_REMOVED_DEVICE,
+       __TCMU_CMD_MAX,
+};
+#define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1)
+
+enum tcmu_genl_attr {
+       TCMU_ATTR_UNSPEC,
+       TCMU_ATTR_DEVICE,
+       TCMU_ATTR_MINOR,
+       __TCMU_ATTR_MAX,
+};
+#define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/taskstats.h b/lib/libdss-include/linux/taskstats.h
new file mode 100644 (file)
index 0000000..2466e55
--- /dev/null
@@ -0,0 +1,213 @@
+/* taskstats.h - exporting per-task statistics
+ *
+ * Copyright (C) Shailabh Nagar, IBM Corp. 2006
+ *           (C) Balbir Singh,   IBM Corp. 2006
+ *           (C) Jay Lan,        SGI, 2006
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _LINUX_TASKSTATS_H
+#define _LINUX_TASKSTATS_H
+
+#include <linux/types.h>
+
+/* Format for per-task data returned to userland when
+ *     - a task exits
+ *     - listener requests stats for a task
+ *
+ * The struct is versioned. Newer versions should only add fields to
+ * the bottom of the struct to maintain backward compatibility.
+ *
+ *
+ * To add new fields
+ *     a) bump up TASKSTATS_VERSION
+ *     b) add comment indicating new version number at end of struct
+ *     c) add new fields after version comment; maintain 64-bit alignment
+ */
+
+
+#define TASKSTATS_VERSION      8
+#define TS_COMM_LEN            32      /* should be >= TASK_COMM_LEN
+                                        * in linux/sched.h */
+
+struct taskstats {
+
+       /* The version number of this struct. This field is always set to
+        * TAKSTATS_VERSION, which is defined in <linux/taskstats.h>.
+        * Each time the struct is changed, the value should be incremented.
+        */
+       __u16   version;
+       __u32   ac_exitcode;            /* Exit status */
+
+       /* The accounting flags of a task as defined in <linux/acct.h>
+        * Defined values are AFORK, ASU, ACOMPAT, ACORE, and AXSIG.
+        */
+       __u8    ac_flag;                /* Record flags */
+       __u8    ac_nice;                /* task_nice */
+
+       /* Delay accounting fields start
+        *
+        * All values, until comment "Delay accounting fields end" are
+        * available only if delay accounting is enabled, even though the last
+        * few fields are not delays
+        *
+        * xxx_count is the number of delay values recorded
+        * xxx_delay_total is the corresponding cumulative delay in nanoseconds
+        *
+        * xxx_delay_total wraps around to zero on overflow
+        * xxx_count incremented regardless of overflow
+        */
+
+       /* Delay waiting for cpu, while runnable
+        * count, delay_total NOT updated atomically
+        */
+       __u64   cpu_count __attribute__((aligned(8)));
+       __u64   cpu_delay_total;
+
+       /* Following four fields atomically updated using task->delays->lock */
+
+       /* Delay waiting for synchronous block I/O to complete
+        * does not account for delays in I/O submission
+        */
+       __u64   blkio_count;
+       __u64   blkio_delay_total;
+
+       /* Delay waiting for page fault I/O (swap in only) */
+       __u64   swapin_count;
+       __u64   swapin_delay_total;
+
+       /* cpu "wall-clock" running time
+        * On some architectures, value will adjust for cpu time stolen
+        * from the kernel in involuntary waits due to virtualization.
+        * Value is cumulative, in nanoseconds, without a corresponding count
+        * and wraps around to zero silently on overflow
+        */
+       __u64   cpu_run_real_total;
+
+       /* cpu "virtual" running time
+        * Uses time intervals seen by the kernel i.e. no adjustment
+        * for kernel's involuntary waits due to virtualization.
+        * Value is cumulative, in nanoseconds, without a corresponding count
+        * and wraps around to zero silently on overflow
+        */
+       __u64   cpu_run_virtual_total;
+       /* Delay accounting fields end */
+       /* version 1 ends here */
+
+       /* Basic Accounting Fields start */
+       char    ac_comm[TS_COMM_LEN];   /* Command name */
+       __u8    ac_sched __attribute__((aligned(8)));
+                                       /* Scheduling discipline */
+       __u8    ac_pad[3];
+       __u32   ac_uid __attribute__((aligned(8)));
+                                       /* User ID */
+       __u32   ac_gid;                 /* Group ID */
+       __u32   ac_pid;                 /* Process ID */
+       __u32   ac_ppid;                /* Parent process ID */
+       __u32   ac_btime;               /* Begin time [sec since 1970] */
+       __u64   ac_etime __attribute__((aligned(8)));
+                                       /* Elapsed time [usec] */
+       __u64   ac_utime;               /* User CPU time [usec] */
+       __u64   ac_stime;               /* SYstem CPU time [usec] */
+       __u64   ac_minflt;              /* Minor Page Fault Count */
+       __u64   ac_majflt;              /* Major Page Fault Count */
+       /* Basic Accounting Fields end */
+
+       /* Extended accounting fields start */
+       /* Accumulated RSS usage in duration of a task, in MBytes-usecs.
+        * The current rss usage is added to this counter every time
+        * a tick is charged to a task's system time. So, at the end we
+        * will have memory usage multiplied by system time. Thus an
+        * average usage per system time unit can be calculated.
+        */
+       __u64   coremem;                /* accumulated RSS usage in MB-usec */
+       /* Accumulated virtual memory usage in duration of a task.
+        * Same as acct_rss_mem1 above except that we keep track of VM usage.
+        */
+       __u64   virtmem;                /* accumulated VM  usage in MB-usec */
+
+       /* High watermark of RSS and virtual memory usage in duration of
+        * a task, in KBytes.
+        */
+       __u64   hiwater_rss;            /* High-watermark of RSS usage, in KB */
+       __u64   hiwater_vm;             /* High-water VM usage, in KB */
+
+       /* The following four fields are I/O statistics of a task. */
+       __u64   read_char;              /* bytes read */
+       __u64   write_char;             /* bytes written */
+       __u64   read_syscalls;          /* read syscalls */
+       __u64   write_syscalls;         /* write syscalls */
+       /* Extended accounting fields end */
+
+#define TASKSTATS_HAS_IO_ACCOUNTING
+       /* Per-task storage I/O accounting starts */
+       __u64   read_bytes;             /* bytes of read I/O */
+       __u64   write_bytes;            /* bytes of write I/O */
+       __u64   cancelled_write_bytes;  /* bytes of cancelled write I/O */
+
+       __u64  nvcsw;                   /* voluntary_ctxt_switches */
+       __u64  nivcsw;                  /* nonvoluntary_ctxt_switches */
+
+       /* time accounting for SMT machines */
+       __u64   ac_utimescaled;         /* utime scaled on frequency etc */
+       __u64   ac_stimescaled;         /* stime scaled on frequency etc */
+       __u64   cpu_scaled_run_real_total; /* scaled cpu_run_real_total */
+
+       /* Delay waiting for memory reclaim */
+       __u64   freepages_count;
+       __u64   freepages_delay_total;
+};
+
+
+/*
+ * Commands sent from userspace
+ * Not versioned. New commands should only be inserted at the enum's end
+ * prior to __TASKSTATS_CMD_MAX
+ */
+
+enum {
+       TASKSTATS_CMD_UNSPEC = 0,       /* Reserved */
+       TASKSTATS_CMD_GET,              /* user->kernel request/get-response */
+       TASKSTATS_CMD_NEW,              /* kernel->user event */
+       __TASKSTATS_CMD_MAX,
+};
+
+#define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1)
+
+enum {
+       TASKSTATS_TYPE_UNSPEC = 0,      /* Reserved */
+       TASKSTATS_TYPE_PID,             /* Process id */
+       TASKSTATS_TYPE_TGID,            /* Thread group id */
+       TASKSTATS_TYPE_STATS,           /* taskstats structure */
+       TASKSTATS_TYPE_AGGR_PID,        /* contains pid + stats */
+       TASKSTATS_TYPE_AGGR_TGID,       /* contains tgid + stats */
+       TASKSTATS_TYPE_NULL,            /* contains nothing */
+       __TASKSTATS_TYPE_MAX,
+};
+
+#define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1)
+
+enum {
+       TASKSTATS_CMD_ATTR_UNSPEC = 0,
+       TASKSTATS_CMD_ATTR_PID,
+       TASKSTATS_CMD_ATTR_TGID,
+       TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
+       TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
+       __TASKSTATS_CMD_ATTR_MAX,
+};
+
+#define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1)
+
+/* NETLINK_GENERIC related info */
+
+#define TASKSTATS_GENL_NAME    "TASKSTATS"
+#define TASKSTATS_GENL_VERSION 0x1
+
+#endif /* _LINUX_TASKSTATS_H */
diff --git a/lib/libdss-include/linux/tc_act/tc_bpf.h b/lib/libdss-include/linux/tc_act/tc_bpf.h
new file mode 100644 (file)
index 0000000..07f17cc
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_BPF_H
+#define __LINUX_TC_BPF_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_BPF 13
+
+struct tc_act_bpf {
+       tc_gen;
+};
+
+enum {
+       TCA_ACT_BPF_UNSPEC,
+       TCA_ACT_BPF_TM,
+       TCA_ACT_BPF_PARMS,
+       TCA_ACT_BPF_OPS_LEN,
+       TCA_ACT_BPF_OPS,
+       TCA_ACT_BPF_FD,
+       TCA_ACT_BPF_NAME,
+       __TCA_ACT_BPF_MAX,
+};
+#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_connmark.h b/lib/libdss-include/linux/tc_act/tc_connmark.h
new file mode 100644 (file)
index 0000000..994b097
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __UAPI_TC_CONNMARK_H
+#define __UAPI_TC_CONNMARK_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_CONNMARK 14
+
+struct tc_connmark {
+       tc_gen;
+       __u16 zone;
+};
+
+enum {
+       TCA_CONNMARK_UNSPEC,
+       TCA_CONNMARK_PARMS,
+       TCA_CONNMARK_TM,
+       __TCA_CONNMARK_MAX
+};
+#define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_csum.h b/lib/libdss-include/linux/tc_act/tc_csum.h
new file mode 100644 (file)
index 0000000..a047c49
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef __LINUX_TC_CSUM_H
+#define __LINUX_TC_CSUM_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_CSUM 16
+
+enum {
+       TCA_CSUM_UNSPEC,
+       TCA_CSUM_PARMS,
+       TCA_CSUM_TM,
+       __TCA_CSUM_MAX
+};
+#define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1)
+
+enum {
+       TCA_CSUM_UPDATE_FLAG_IPV4HDR = 1,
+       TCA_CSUM_UPDATE_FLAG_ICMP    = 2,
+       TCA_CSUM_UPDATE_FLAG_IGMP    = 4,
+       TCA_CSUM_UPDATE_FLAG_TCP     = 8,
+       TCA_CSUM_UPDATE_FLAG_UDP     = 16,
+       TCA_CSUM_UPDATE_FLAG_UDPLITE = 32
+};
+
+struct tc_csum {
+       tc_gen;
+
+       __u32 update_flags;
+};
+
+#endif /* __LINUX_TC_CSUM_H */
diff --git a/lib/libdss-include/linux/tc_act/tc_defact.h b/lib/libdss-include/linux/tc_act/tc_defact.h
new file mode 100644 (file)
index 0000000..17dddb4
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_TC_DEF_H
+#define __LINUX_TC_DEF_H
+
+#include <linux/pkt_cls.h>
+
+struct tc_defact {
+       tc_gen;
+};
+
+enum {
+       TCA_DEF_UNSPEC,
+       TCA_DEF_TM,
+       TCA_DEF_PARMS,
+       TCA_DEF_DATA,
+       __TCA_DEF_MAX
+};
+#define TCA_DEF_MAX (__TCA_DEF_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_gact.h b/lib/libdss-include/linux/tc_act/tc_gact.h
new file mode 100644 (file)
index 0000000..f7bf94e
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef __LINUX_TC_GACT_H
+#define __LINUX_TC_GACT_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_GACT 5
+struct tc_gact {
+       tc_gen;
+
+};
+
+struct tc_gact_p {
+#define PGACT_NONE              0
+#define PGACT_NETRAND           1
+#define PGACT_DETERM            2
+#define MAX_RAND                (PGACT_DETERM + 1 )
+       __u16                 ptype;
+       __u16                 pval;
+       int                   paction;
+};
+enum {
+       TCA_GACT_UNSPEC,
+       TCA_GACT_TM,
+       TCA_GACT_PARMS,
+       TCA_GACT_PROB,
+       __TCA_GACT_MAX
+};
+#define TCA_GACT_MAX (__TCA_GACT_MAX - 1)
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_ipt.h b/lib/libdss-include/linux/tc_act/tc_ipt.h
new file mode 100644 (file)
index 0000000..130aaad
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __LINUX_TC_IPT_H
+#define __LINUX_TC_IPT_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_IPT 6
+#define TCA_ACT_XT 10
+
+enum {
+       TCA_IPT_UNSPEC,
+       TCA_IPT_TABLE,
+       TCA_IPT_HOOK,
+       TCA_IPT_INDEX,
+       TCA_IPT_CNT,
+       TCA_IPT_TM,
+       TCA_IPT_TARG,
+       __TCA_IPT_MAX
+};
+#define TCA_IPT_MAX (__TCA_IPT_MAX - 1)
+                                                                                
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_mirred.h b/lib/libdss-include/linux/tc_act/tc_mirred.h
new file mode 100644 (file)
index 0000000..7561750
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_TC_MIR_H
+#define __LINUX_TC_MIR_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_MIRRED 8
+#define TCA_EGRESS_REDIR 1  /* packet redirect to EGRESS*/
+#define TCA_EGRESS_MIRROR 2 /* mirror packet to EGRESS */
+#define TCA_INGRESS_REDIR 3  /* packet redirect to INGRESS*/
+#define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */
+                                                                                
+struct tc_mirred {
+       tc_gen;
+       int                     eaction;   /* one of IN/EGRESS_MIRROR/REDIR */
+       __u32                   ifindex;  /* ifindex of egress port */
+};
+                                                                                
+enum {
+       TCA_MIRRED_UNSPEC,
+       TCA_MIRRED_TM,
+       TCA_MIRRED_PARMS,
+       __TCA_MIRRED_MAX
+};
+#define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1)
+                                                                                
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_nat.h b/lib/libdss-include/linux/tc_act/tc_nat.h
new file mode 100644 (file)
index 0000000..6663aeb
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef __LINUX_TC_NAT_H
+#define __LINUX_TC_NAT_H
+
+#include <linux/pkt_cls.h>
+#include <linux/types.h>
+
+#define TCA_ACT_NAT 9
+
+enum {
+       TCA_NAT_UNSPEC,
+       TCA_NAT_PARMS,
+       TCA_NAT_TM,
+       __TCA_NAT_MAX
+};
+#define TCA_NAT_MAX (__TCA_NAT_MAX - 1)
+
+#define TCA_NAT_FLAG_EGRESS 1
+
+struct tc_nat {
+       tc_gen;
+       __be32 old_addr;
+       __be32 new_addr;
+       __be32 mask;
+       __u32 flags;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_pedit.h b/lib/libdss-include/linux/tc_act/tc_pedit.h
new file mode 100644 (file)
index 0000000..716cfab
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __LINUX_TC_PED_H
+#define __LINUX_TC_PED_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_PEDIT 7
+
+enum {
+       TCA_PEDIT_UNSPEC,
+       TCA_PEDIT_TM,
+       TCA_PEDIT_PARMS,
+       __TCA_PEDIT_MAX
+};
+#define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1)
+                                                                                
+struct tc_pedit_key {
+       __u32           mask;  /* AND */
+       __u32           val;   /*XOR */
+       __u32           off;  /*offset */
+       __u32           at;
+       __u32           offmask;
+       __u32           shift;
+};
+                                                                                
+struct tc_pedit_sel {
+       tc_gen;
+       unsigned char           nkeys;
+       unsigned char           flags;
+       struct tc_pedit_key     keys[0];
+};
+#define tc_pedit tc_pedit_sel
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_skbedit.h b/lib/libdss-include/linux/tc_act/tc_skbedit.h
new file mode 100644 (file)
index 0000000..7a2e910
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2008, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Author: Alexander Duyck <alexander.h.duyck@intel.com>
+ */
+
+#ifndef __LINUX_TC_SKBEDIT_H
+#define __LINUX_TC_SKBEDIT_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_SKBEDIT 11
+
+#define SKBEDIT_F_PRIORITY             0x1
+#define SKBEDIT_F_QUEUE_MAPPING                0x2
+#define SKBEDIT_F_MARK                 0x4
+
+struct tc_skbedit {
+       tc_gen;
+};
+
+enum {
+       TCA_SKBEDIT_UNSPEC,
+       TCA_SKBEDIT_TM,
+       TCA_SKBEDIT_PARMS,
+       TCA_SKBEDIT_PRIORITY,
+       TCA_SKBEDIT_QUEUE_MAPPING,
+       TCA_SKBEDIT_MARK,
+       __TCA_SKBEDIT_MAX
+};
+#define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/tc_act/tc_vlan.h b/lib/libdss-include/linux/tc_act/tc_vlan.h
new file mode 100644 (file)
index 0000000..f7b8d44
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_VLAN_H
+#define __LINUX_TC_VLAN_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_VLAN 12
+
+#define TCA_VLAN_ACT_POP       1
+#define TCA_VLAN_ACT_PUSH      2
+
+struct tc_vlan {
+       tc_gen;
+       int v_action;
+};
+
+enum {
+       TCA_VLAN_UNSPEC,
+       TCA_VLAN_TM,
+       TCA_VLAN_PARMS,
+       TCA_VLAN_PUSH_VLAN_ID,
+       TCA_VLAN_PUSH_VLAN_PROTOCOL,
+       __TCA_VLAN_MAX,
+};
+#define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1)
+
+#endif
diff --git a/lib/libdss-include/linux/tc_ematch/tc_em_cmp.h b/lib/libdss-include/linux/tc_ematch/tc_em_cmp.h
new file mode 100644 (file)
index 0000000..f34bb1b
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __LINUX_TC_EM_CMP_H
+#define __LINUX_TC_EM_CMP_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+struct tcf_em_cmp {
+       __u32           val;
+       __u32           mask;
+       __u16           off;
+       __u8            align:4;
+       __u8            flags:4;
+       __u8            layer:4;
+       __u8            opnd:4;
+};
+
+enum {
+       TCF_EM_ALIGN_U8  = 1,
+       TCF_EM_ALIGN_U16 = 2,
+       TCF_EM_ALIGN_U32 = 4
+};
+
+#define TCF_EM_CMP_TRANS       1
+
+#endif
diff --git a/lib/libdss-include/linux/tc_ematch/tc_em_meta.h b/lib/libdss-include/linux/tc_ematch/tc_em_meta.h
new file mode 100644 (file)
index 0000000..b11f8ce
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef __LINUX_TC_EM_META_H
+#define __LINUX_TC_EM_META_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+enum {
+       TCA_EM_META_UNSPEC,
+       TCA_EM_META_HDR,
+       TCA_EM_META_LVALUE,
+       TCA_EM_META_RVALUE,
+       __TCA_EM_META_MAX
+};
+#define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1)
+
+struct tcf_meta_val {
+       __u16                   kind;
+       __u8                    shift;
+       __u8                    op;
+};
+
+#define TCF_META_TYPE_MASK     (0xf << 12)
+#define TCF_META_TYPE(kind)    (((kind) & TCF_META_TYPE_MASK) >> 12)
+#define TCF_META_ID_MASK       0x7ff
+#define TCF_META_ID(kind)      ((kind) & TCF_META_ID_MASK)
+
+enum {
+       TCF_META_TYPE_VAR,
+       TCF_META_TYPE_INT,
+       __TCF_META_TYPE_MAX
+};
+#define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1)
+
+enum {
+       TCF_META_ID_VALUE,
+       TCF_META_ID_RANDOM,
+       TCF_META_ID_LOADAVG_0,
+       TCF_META_ID_LOADAVG_1,
+       TCF_META_ID_LOADAVG_2,
+       TCF_META_ID_DEV,
+       TCF_META_ID_PRIORITY,
+       TCF_META_ID_PROTOCOL,
+       TCF_META_ID_PKTTYPE,
+       TCF_META_ID_PKTLEN,
+       TCF_META_ID_DATALEN,
+       TCF_META_ID_MACLEN,
+       TCF_META_ID_NFMARK,
+       TCF_META_ID_TCINDEX,
+       TCF_META_ID_RTCLASSID,
+       TCF_META_ID_RTIIF,
+       TCF_META_ID_SK_FAMILY,
+       TCF_META_ID_SK_STATE,
+       TCF_META_ID_SK_REUSE,
+       TCF_META_ID_SK_BOUND_IF,
+       TCF_META_ID_SK_REFCNT,
+       TCF_META_ID_SK_SHUTDOWN,
+       TCF_META_ID_SK_PROTO,
+       TCF_META_ID_SK_TYPE,
+       TCF_META_ID_SK_RCVBUF,
+       TCF_META_ID_SK_RMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_ALLOC,
+       TCF_META_ID_SK_OMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_QUEUED,
+       TCF_META_ID_SK_RCV_QLEN,
+       TCF_META_ID_SK_SND_QLEN,
+       TCF_META_ID_SK_ERR_QLEN,
+       TCF_META_ID_SK_FORWARD_ALLOCS,
+       TCF_META_ID_SK_SNDBUF,
+       TCF_META_ID_SK_ALLOCS,
+       __TCF_META_ID_SK_ROUTE_CAPS,    /* unimplemented but in ABI already */
+       TCF_META_ID_SK_HASH,
+       TCF_META_ID_SK_LINGERTIME,
+       TCF_META_ID_SK_ACK_BACKLOG,
+       TCF_META_ID_SK_MAX_ACK_BACKLOG,
+       TCF_META_ID_SK_PRIO,
+       TCF_META_ID_SK_RCVLOWAT,
+       TCF_META_ID_SK_RCVTIMEO,
+       TCF_META_ID_SK_SNDTIMEO,
+       TCF_META_ID_SK_SENDMSG_OFF,
+       TCF_META_ID_SK_WRITE_PENDING,
+       TCF_META_ID_VLAN_TAG,
+       TCF_META_ID_RXHASH,
+       __TCF_META_ID_MAX
+};
+#define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
+
+struct tcf_meta_hdr {
+       struct tcf_meta_val     left;
+       struct tcf_meta_val     right;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/tc_ematch/tc_em_nbyte.h b/lib/libdss-include/linux/tc_ematch/tc_em_nbyte.h
new file mode 100644 (file)
index 0000000..7172cfb
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __LINUX_TC_EM_NBYTE_H
+#define __LINUX_TC_EM_NBYTE_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+struct tcf_em_nbyte {
+       __u16           off;
+       __u16           len:12;
+       __u8            layer:4;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/tc_ematch/tc_em_text.h b/lib/libdss-include/linux/tc_ematch/tc_em_text.h
new file mode 100644 (file)
index 0000000..5aac404
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __LINUX_TC_EM_TEXT_H
+#define __LINUX_TC_EM_TEXT_H
+
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+
+#define TC_EM_TEXT_ALGOSIZ     16
+
+struct tcf_em_text {
+       char            algo[TC_EM_TEXT_ALGOSIZ];
+       __u16           from_offset;
+       __u16           to_offset;
+       __u16           pattern_len;
+       __u8            from_layer:4;
+       __u8            to_layer:4;
+       __u8            pad;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/tcp.h b/lib/libdss-include/linux/tcp.h
new file mode 100644 (file)
index 0000000..1e9b4a6
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the TCP protocol.
+ *
+ * Version:    @(#)tcp.h       1.0.2   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_TCP_H
+#define _LINUX_TCP_H
+
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include <linux/socket.h>
+
+struct tcphdr {
+       __be16  source;
+       __be16  dest;
+       __be32  seq;
+       __be32  ack_seq;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+       __u16   res1:4,
+               doff:4,
+               fin:1,
+               syn:1,
+               rst:1,
+               psh:1,
+               ack:1,
+               urg:1,
+               ece:1,
+               cwr:1;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+       __u16   doff:4,
+               res1:4,
+               cwr:1,
+               ece:1,
+               urg:1,
+               ack:1,
+               psh:1,
+               rst:1,
+               syn:1,
+               fin:1;
+#else
+#error "Adjust your <asm/byteorder.h> defines"
+#endif 
+       __be16  window;
+       __sum16 check;
+       __be16  urg_ptr;
+};
+
+/*
+ *     The union cast uses a gcc extension to avoid aliasing problems
+ *  (union is compatible to any of its members)
+ *  This means this part of the code is -fstrict-aliasing safe now.
+ */
+union tcp_word_hdr { 
+       struct tcphdr hdr;
+       __be32            words[5];
+}; 
+
+#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
+
+enum { 
+       TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000),
+       TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000),
+       TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000),
+       TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000),
+       TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000),
+       TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000),
+       TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000),
+       TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000),
+       TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000),
+       TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000)
+}; 
+
+/*
+ * TCP general constants
+ */
+#define TCP_MSS_DEFAULT                 536U   /* IPv4 (RFC1122, RFC2581) */
+#define TCP_MSS_DESIRED                1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
+
+/* TCP socket options */
+#define TCP_NODELAY            1       /* Turn off Nagle's algorithm. */
+#define TCP_MAXSEG             2       /* Limit MSS */
+#define TCP_CORK               3       /* Never send partially complete segments */
+#define TCP_KEEPIDLE           4       /* Start keeplives after this period */
+#define TCP_KEEPINTVL          5       /* Interval between keepalives */
+#define TCP_KEEPCNT            6       /* Number of keepalives before death */
+#define TCP_SYNCNT             7       /* Number of SYN retransmits */
+#define TCP_LINGER2            8       /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT       9       /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP       10      /* Bound advertised window */
+#define TCP_INFO               11      /* Information about this connection. */
+#define TCP_QUICKACK           12      /* Block/reenable quick acks */
+#define TCP_CONGESTION         13      /* Congestion control algorithm */
+#define TCP_MD5SIG             14      /* TCP MD5 Signature (RFC2385) */
+#define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
+#define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */
+#define TCP_USER_TIMEOUT       18      /* How long for loss retry before timeout */
+#define TCP_REPAIR             19      /* TCP sock is under repair right now */
+#define TCP_REPAIR_QUEUE       20
+#define TCP_QUEUE_SEQ          21
+#define TCP_REPAIR_OPTIONS     22
+#define TCP_FASTOPEN           23      /* Enable FastOpen on listeners */
+#define TCP_TIMESTAMP          24
+#define TCP_NOTSENT_LOWAT      25      /* limit number of unsent bytes in write queue */
+#define TCP_CC_INFO            26      /* Get Congestion Control (optional) info */
+#define TCP_SAVE_SYN           27      /* Record SYN headers for new connections */
+#define TCP_SAVED_SYN          28      /* Get SYN headers recorded for connection */
+
+struct tcp_repair_opt {
+       __u32   opt_code;
+       __u32   opt_val;
+};
+
+enum {
+       TCP_NO_QUEUE,
+       TCP_RECV_QUEUE,
+       TCP_SEND_QUEUE,
+       TCP_QUEUES_NR,
+};
+
+/* for TCP_INFO socket option */
+#define TCPI_OPT_TIMESTAMPS    1
+#define TCPI_OPT_SACK          2
+#define TCPI_OPT_WSCALE                4
+#define TCPI_OPT_ECN           8 /* ECN was negociated at TCP session init */
+#define TCPI_OPT_ECN_SEEN      16 /* we received at least one packet with ECT */
+#define TCPI_OPT_SYN_DATA      32 /* SYN-ACK acked data in SYN sent or rcvd */
+
+enum tcp_ca_state {
+       TCP_CA_Open = 0,
+#define TCPF_CA_Open   (1<<TCP_CA_Open)
+       TCP_CA_Disorder = 1,
+#define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
+       TCP_CA_CWR = 2,
+#define TCPF_CA_CWR    (1<<TCP_CA_CWR)
+       TCP_CA_Recovery = 3,
+#define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
+       TCP_CA_Loss = 4
+#define TCPF_CA_Loss   (1<<TCP_CA_Loss)
+};
+
+struct tcp_info {
+       __u8    tcpi_state;
+       __u8    tcpi_ca_state;
+       __u8    tcpi_retransmits;
+       __u8    tcpi_probes;
+       __u8    tcpi_backoff;
+       __u8    tcpi_options;
+       __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
+
+       __u32   tcpi_rto;
+       __u32   tcpi_ato;
+       __u32   tcpi_snd_mss;
+       __u32   tcpi_rcv_mss;
+
+       __u32   tcpi_unacked;
+       __u32   tcpi_sacked;
+       __u32   tcpi_lost;
+       __u32   tcpi_retrans;
+       __u32   tcpi_fackets;
+
+       /* Times. */
+       __u32   tcpi_last_data_sent;
+       __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
+       __u32   tcpi_last_data_recv;
+       __u32   tcpi_last_ack_recv;
+
+       /* Metrics. */
+       __u32   tcpi_pmtu;
+       __u32   tcpi_rcv_ssthresh;
+       __u32   tcpi_rtt;
+       __u32   tcpi_rttvar;
+       __u32   tcpi_snd_ssthresh;
+       __u32   tcpi_snd_cwnd;
+       __u32   tcpi_advmss;
+       __u32   tcpi_reordering;
+
+       __u32   tcpi_rcv_rtt;
+       __u32   tcpi_rcv_space;
+
+       __u32   tcpi_total_retrans;
+
+       __u64   tcpi_pacing_rate;
+       __u64   tcpi_max_pacing_rate;
+       __u64   tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
+       __u64   tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */
+       __u32   tcpi_segs_out;       /* RFC4898 tcpEStatsPerfSegsOut */
+       __u32   tcpi_segs_in;        /* RFC4898 tcpEStatsPerfSegsIn */
+};
+
+/* for TCP_MD5SIG socket option */
+#define TCP_MD5SIG_MAXKEYLEN   80
+
+struct tcp_md5sig {
+       struct __kernel_sockaddr_storage tcpm_addr;     /* address associated */
+       __u16   __tcpm_pad1;                            /* zero */
+       __u16   tcpm_keylen;                            /* key length */
+       __u32   __tcpm_pad2;                            /* zero */
+       __u8    tcpm_key[TCP_MD5SIG_MAXKEYLEN];         /* key (binary) */
+};
+
+#endif /* _LINUX_TCP_H */
diff --git a/lib/libdss-include/linux/tcp_metrics.h b/lib/libdss-include/linux/tcp_metrics.h
new file mode 100644 (file)
index 0000000..9353392
--- /dev/null
@@ -0,0 +1,59 @@
+/* tcp_metrics.h - TCP Metrics Interface */
+
+#ifndef _LINUX_TCP_METRICS_H
+#define _LINUX_TCP_METRICS_H
+
+#include <linux/types.h>
+
+/* NETLINK_GENERIC related info
+ */
+#define TCP_METRICS_GENL_NAME          "tcp_metrics"
+#define TCP_METRICS_GENL_VERSION       0x1
+
+enum tcp_metric_index {
+       TCP_METRIC_RTT,         /* in ms units */
+       TCP_METRIC_RTTVAR,      /* in ms units */
+       TCP_METRIC_SSTHRESH,
+       TCP_METRIC_CWND,
+       TCP_METRIC_REORDERING,
+
+       TCP_METRIC_RTT_US,      /* in usec units */
+       TCP_METRIC_RTTVAR_US,   /* in usec units */
+
+       /* Always last.  */
+       __TCP_METRIC_MAX,
+};
+
+#define TCP_METRIC_MAX (__TCP_METRIC_MAX - 1)
+
+enum {
+       TCP_METRICS_ATTR_UNSPEC,
+       TCP_METRICS_ATTR_ADDR_IPV4,             /* u32 */
+       TCP_METRICS_ATTR_ADDR_IPV6,             /* binary */
+       TCP_METRICS_ATTR_AGE,                   /* msecs */
+       TCP_METRICS_ATTR_TW_TSVAL,              /* u32, raw, rcv tsval */
+       TCP_METRICS_ATTR_TW_TS_STAMP,           /* s32, sec age */
+       TCP_METRICS_ATTR_VALS,                  /* nested +1, u32 */
+       TCP_METRICS_ATTR_FOPEN_MSS,             /* u16 */
+       TCP_METRICS_ATTR_FOPEN_SYN_DROPS,       /* u16, count of drops */
+       TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS,     /* msecs age */
+       TCP_METRICS_ATTR_FOPEN_COOKIE,          /* binary */
+       TCP_METRICS_ATTR_SADDR_IPV4,            /* u32 */
+       TCP_METRICS_ATTR_SADDR_IPV6,            /* binary */
+
+       __TCP_METRICS_ATTR_MAX,
+};
+
+#define TCP_METRICS_ATTR_MAX   (__TCP_METRICS_ATTR_MAX - 1)
+
+enum {
+       TCP_METRICS_CMD_UNSPEC,
+       TCP_METRICS_CMD_GET,
+       TCP_METRICS_CMD_DEL,
+
+       __TCP_METRICS_CMD_MAX,
+};
+
+#define TCP_METRICS_CMD_MAX    (__TCP_METRICS_CMD_MAX - 1)
+
+#endif /* _LINUX_TCP_METRICS_H */
diff --git a/lib/libdss-include/linux/telephony.h b/lib/libdss-include/linux/telephony.h
new file mode 100644 (file)
index 0000000..f63afe3
--- /dev/null
@@ -0,0 +1,262 @@
+/******************************************************************************
+ *
+ *             telephony.h
+ *
+ *             Basic Linux Telephony Interface
+ *
+ *             (c) Copyright 1999-2001 Quicknet Technologies, Inc.
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ *
+ *    Authors:       Ed Okerson, <eokerson@quicknet.net>
+ *                   Greg Herlein, <gherlein@quicknet.net>
+ *
+ *    Contributors:  Alan Cox, <alan@lxorguk.ukuu.org.uk>
+ *                   David W. Erhart, <derhart@quicknet.net>
+ *
+ * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
+ * TECHNOLOGIES, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION
+ * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ *****************************************************************************/
+
+#ifndef TELEPHONY_H
+#define TELEPHONY_H
+
+#define TELEPHONY_VERSION 3013
+
+#define PHONE_VENDOR_IXJ          1
+#define PHONE_VENDOR_QUICKNET    PHONE_VENDOR_IXJ
+#define PHONE_VENDOR_VOICETRONIX  2
+#define PHONE_VENDOR_ACULAB       3
+#define PHONE_VENDOR_DIGI         4
+#define PHONE_VENDOR_FRANKLIN     5
+
+/******************************************************************************
+ *  Vendor Summary Information Area
+ *
+ *  Quicknet Technologies, Inc. - makes low density analog telephony cards
+ *    with audio compression, POTS and PSTN interfaces (www.quicknet.net)
+ *
+ *  (other vendors following this API shuld add a short description of
+ *  the telephony products they support under Linux)
+ *
+ *****************************************************************************/
+#define QTI_PHONEJACK          100
+#define QTI_LINEJACK           300
+#define QTI_PHONEJACK_LITE     400
+#define QTI_PHONEJACK_PCI      500
+#define QTI_PHONECARD          600
+
+/******************************************************************************
+*
+* The capabilities ioctls can inform you of the capabilities of each phone
+* device installed in your system.  The PHONECTL_CAPABILITIES ioctl
+* returns an integer value indicating the number of capabilities the   
+* device has.  The PHONECTL_CAPABILITIES_LIST will fill an array of 
+* capability structs with all of its capabilities.  The
+* PHONECTL_CAPABILITIES_CHECK takes a single capability struct and returns
+* a TRUE if the device has that capability, otherwise it returns false.
+* 
+******************************************************************************/
+typedef enum {
+       vendor = 0,
+       device,
+       port,
+       codec,
+       dsp
+} phone_cap;
+
+struct phone_capability {
+       char desc[80];
+       phone_cap captype;
+       int cap;
+       int handle;
+};
+
+typedef enum {
+       pots = 0,
+       pstn,
+       handset,
+       speaker
+} phone_ports;
+
+#define PHONE_CAPABILITIES              _IO  ('q', 0x80)
+#define PHONE_CAPABILITIES_LIST         _IOR ('q', 0x81, struct phone_capability *)
+#define PHONE_CAPABILITIES_CHECK        _IOW ('q', 0x82, struct phone_capability *)
+
+typedef struct {
+        char month[3];
+        char day[3];
+        char hour[3];
+        char min[3];
+        int numlen;
+        char number[11];
+        int namelen;
+        char name[80];
+} PHONE_CID;
+#define PHONE_RING                     _IO  ('q', 0x83)
+#define PHONE_HOOKSTATE                        _IO  ('q', 0x84)
+#define PHONE_MAXRINGS                 _IOW ('q', 0x85, char)
+#define PHONE_RING_CADENCE             _IOW ('q', 0x86, short)
+#define OLD_PHONE_RING_START            _IO  ('q', 0x87)
+#define PHONE_RING_START               _IOW ('q', 0x87, PHONE_CID *)
+#define PHONE_RING_STOP                        _IO  ('q', 0x88)
+
+#define USA_RING_CADENCE        0xC0C0
+
+#define PHONE_REC_CODEC                        _IOW ('q', 0x89, int)
+#define PHONE_REC_START                        _IO  ('q', 0x8A)
+#define PHONE_REC_STOP                 _IO  ('q', 0x8B)
+#define PHONE_REC_DEPTH                        _IOW ('q', 0x8C, int)
+#define PHONE_FRAME                    _IOW ('q', 0x8D, int)
+#define PHONE_REC_VOLUME               _IOW ('q', 0x8E, int)
+#define PHONE_REC_VOLUME_LINEAR                _IOW ('q', 0xDB, int)
+#define PHONE_REC_LEVEL                        _IO  ('q', 0x8F)
+
+#define PHONE_PLAY_CODEC               _IOW ('q', 0x90, int)
+#define PHONE_PLAY_START               _IO  ('q', 0x91)
+#define PHONE_PLAY_STOP                        _IO  ('q', 0x92)
+#define PHONE_PLAY_DEPTH               _IOW ('q', 0x93, int)
+#define PHONE_PLAY_VOLUME              _IOW ('q', 0x94, int)
+#define PHONE_PLAY_VOLUME_LINEAR       _IOW ('q', 0xDC, int)
+#define PHONE_PLAY_LEVEL               _IO  ('q', 0x95)
+#define PHONE_DTMF_READY               _IOR ('q', 0x96, int)
+#define PHONE_GET_DTMF                 _IOR ('q', 0x97, int)
+#define PHONE_GET_DTMF_ASCII           _IOR ('q', 0x98, int)
+#define PHONE_DTMF_OOB                 _IOW ('q', 0x99, int)
+#define PHONE_EXCEPTION                        _IOR ('q', 0x9A, int)
+#define PHONE_PLAY_TONE                        _IOW ('q', 0x9B, char)
+#define PHONE_SET_TONE_ON_TIME         _IOW ('q', 0x9C, int)
+#define PHONE_SET_TONE_OFF_TIME                _IOW ('q', 0x9D, int)
+#define PHONE_GET_TONE_ON_TIME         _IO  ('q', 0x9E)
+#define PHONE_GET_TONE_OFF_TIME                _IO  ('q', 0x9F)
+#define PHONE_GET_TONE_STATE           _IO  ('q', 0xA0)
+#define PHONE_BUSY                     _IO  ('q', 0xA1)
+#define PHONE_RINGBACK                 _IO  ('q', 0xA2)
+#define PHONE_DIALTONE                 _IO  ('q', 0xA3)
+#define PHONE_CPT_STOP                 _IO  ('q', 0xA4)
+
+#define PHONE_PSTN_SET_STATE           _IOW ('q', 0xA4, int)
+#define PHONE_PSTN_GET_STATE           _IO  ('q', 0xA5)
+
+#define PSTN_ON_HOOK           0
+#define PSTN_RINGING           1
+#define PSTN_OFF_HOOK          2
+#define PSTN_PULSE_DIAL                3
+
+/******************************************************************************
+* 
+* The wink duration is tunable with this ioctl.  The default wink duration  
+* is 320ms.  You do not need to use this ioctl if you do not require a
+* different wink duration.
+* 
+******************************************************************************/
+#define PHONE_WINK_DURATION            _IOW ('q', 0xA6, int)
+#define PHONE_WINK                     _IOW ('q', 0xAA, int)
+
+/******************************************************************************
+* 
+*  Codec Definitions
+* 
+******************************************************************************/
+typedef enum {
+       G723_63 = 1,
+       G723_53 = 2,
+       TS85 = 3,
+       TS48 = 4,
+       TS41 = 5,
+       G728 = 6,
+       G729 = 7,
+       ULAW = 8,
+       ALAW = 9,
+       LINEAR16 = 10,
+       LINEAR8 = 11,
+       WSS = 12,
+       G729B = 13
+} phone_codec;
+
+struct phone_codec_data
+{
+        phone_codec type;
+        unsigned short buf_min, buf_opt, buf_max;
+};
+
+#define PHONE_QUERY_CODEC               _IOWR ('q', 0xA7, struct phone_codec_data *)
+#define PHONE_PSTN_LINETEST             _IO ('q', 0xA8)
+
+/******************************************************************************
+* 
+* This controls the VAD/CNG functionality of G.723.1.  The driver will
+* always pass full size frames, any unused bytes will be padded with zeros,
+* and frames passed to the driver should also be padded with zeros.  The
+* frame type is encoded in the least significant two bits of the first
+* WORD of the frame as follows:
+*
+* bits 1-0     Frame Type      Data Rate               Significant Words
+* 00           0               G.723.1 6.3             12
+* 01           1               G.723.1 5.3             10
+* 10           2               VAD/CNG                  2
+* 11           3               Repeat last CNG          2 bits
+* 
+******************************************************************************/
+#define PHONE_VAD                      _IOW ('q', 0xA9, int)
+
+
+/******************************************************************************
+*
+* The exception structure allows us to multiplex multiple events onto the
+* select() exception set.  If any of these flags are set select() will
+* return with a positive indication on the exception set.  The dtmf_ready
+* bit indicates if there is data waiting in the DTMF buffer.  The
+* hookstate bit is set if there is a change in hookstate status, it does not
+* indicate the current state of the hookswitch.  The pstn_ring bit
+* indicates that the DAA on a LineJACK card has detected ring voltage on
+* the PSTN port.  The caller_id bit indicates that caller_id data has been
+* received and is available.  The pstn_wink bit indicates that the DAA on
+* the LineJACK has received a wink from the telco switch.  The f0, f1, f2
+* and f3 bits indicate that the filter has been triggered by detecting the
+* frequency programmed into that filter.
+*
+* The remaining bits should be set to zero. They will become defined over time
+* for other interface cards and their needs.
+*
+******************************************************************************/
+struct phone_except
+{
+       unsigned int dtmf_ready:1;
+       unsigned int hookstate:1;
+       unsigned int pstn_ring:1;
+       unsigned int caller_id:1;
+       unsigned int pstn_wink:1;
+       unsigned int f0:1;
+       unsigned int f1:1;
+       unsigned int f2:1;
+       unsigned int f3:1;
+       unsigned int flash:1;
+       unsigned int fc0:1;
+       unsigned int fc1:1;
+       unsigned int fc2:1;
+       unsigned int fc3:1;
+       unsigned int reserved:18;
+};
+
+union telephony_exception {
+       struct phone_except bits;
+       unsigned int bytes;
+};
+
+
+#endif         /* TELEPHONY_H */
+
diff --git a/lib/libdss-include/linux/termios.h b/lib/libdss-include/linux/termios.h
new file mode 100644 (file)
index 0000000..2acd0c1
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _LINUX_TERMIOS_H
+#define _LINUX_TERMIOS_H
+
+#include <linux/types.h>
+#include <asm/termios.h>
+
+#define NFF    5
+
+struct termiox
+{
+       __u16   x_hflag;
+       __u16   x_cflag;
+       __u16   x_rflag[NFF];
+       __u16   x_sflag;
+};
+
+#define        RTSXOFF         0x0001          /* RTS flow control on input */
+#define        CTSXON          0x0002          /* CTS flow control on output */
+#define        DTRXOFF         0x0004          /* DTR flow control on input */
+#define DSRXON         0x0008          /* DCD flow control on output */
+
+#endif
diff --git a/lib/libdss-include/linux/thermal.h b/lib/libdss-include/linux/thermal.h
new file mode 100644 (file)
index 0000000..7843937
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef _LINUX_THERMAL_H
+#define _LINUX_THERMAL_H
+
+#define THERMAL_NAME_LENGTH    20
+
+/* Adding event notification support elements */
+#define THERMAL_GENL_FAMILY_NAME                "thermal_event"
+#define THERMAL_GENL_VERSION                    0x01
+#define THERMAL_GENL_MCAST_GROUP_NAME           "thermal_mc_grp"
+
+/* Events supported by Thermal Netlink */
+enum events {
+       THERMAL_AUX0,
+       THERMAL_AUX1,
+       THERMAL_CRITICAL,
+       THERMAL_DEV_FAULT,
+};
+
+/* attributes of thermal_genl_family */
+enum {
+       THERMAL_GENL_ATTR_UNSPEC,
+       THERMAL_GENL_ATTR_EVENT,
+       __THERMAL_GENL_ATTR_MAX,
+};
+#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
+
+/* commands supported by the thermal_genl_family */
+enum {
+       THERMAL_GENL_CMD_UNSPEC,
+       THERMAL_GENL_CMD_EVENT,
+       __THERMAL_GENL_CMD_MAX,
+};
+#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
+
+#endif /* _LINUX_THERMAL_H */
diff --git a/lib/libdss-include/linux/time.h b/lib/libdss-include/linux/time.h
new file mode 100644 (file)
index 0000000..3d7a29d
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _LINUX_TIME_H
+#define _LINUX_TIME_H
+
+#include <linux/types.h>
+
+
+#ifndef _STRUCT_TIMESPEC
+#define _STRUCT_TIMESPEC
+struct timespec {
+       __kernel_time_t tv_sec;                 /* seconds */
+       long            tv_nsec;                /* nanoseconds */
+};
+#endif
+
+struct timeval {
+       __kernel_time_t         tv_sec;         /* seconds */
+       __kernel_suseconds_t    tv_usec;        /* microseconds */
+};
+
+struct timezone {
+       int     tz_minuteswest; /* minutes west of Greenwich */
+       int     tz_dsttime;     /* type of dst correction */
+};
+
+
+/*
+ * Names of the interval timers, and structure
+ * defining a timer setting:
+ */
+#define        ITIMER_REAL             0
+#define        ITIMER_VIRTUAL          1
+#define        ITIMER_PROF             2
+
+struct itimerspec {
+       struct timespec it_interval;    /* timer period */
+       struct timespec it_value;       /* timer expiration */
+};
+
+struct itimerval {
+       struct timeval it_interval;     /* timer interval */
+       struct timeval it_value;        /* current value */
+};
+
+/*
+ * The IDs of the various system clocks (for POSIX.1b interval timers):
+ */
+#define CLOCK_REALTIME                 0
+#define CLOCK_MONOTONIC                        1
+#define CLOCK_PROCESS_CPUTIME_ID       2
+#define CLOCK_THREAD_CPUTIME_ID                3
+#define CLOCK_MONOTONIC_RAW            4
+#define CLOCK_REALTIME_COARSE          5
+#define CLOCK_MONOTONIC_COARSE         6
+#define CLOCK_BOOTTIME                 7
+#define CLOCK_REALTIME_ALARM           8
+#define CLOCK_BOOTTIME_ALARM           9
+#define CLOCK_SGI_CYCLE                        10      /* Hardware specific */
+#define CLOCK_TAI                      11
+
+#define MAX_CLOCKS                     16
+#define CLOCKS_MASK                    (CLOCK_REALTIME | CLOCK_MONOTONIC)
+#define CLOCKS_MONO                    CLOCK_MONOTONIC
+
+/*
+ * The various flags for setting POSIX.1b interval timers:
+ */
+#define TIMER_ABSTIME                  0x01
+
+#endif /* _LINUX_TIME_H */
diff --git a/lib/libdss-include/linux/times.h b/lib/libdss-include/linux/times.h
new file mode 100644 (file)
index 0000000..87b6261
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_TIMES_H
+#define _LINUX_TIMES_H
+
+#include <linux/types.h>
+
+struct tms {
+       __kernel_clock_t tms_utime;
+       __kernel_clock_t tms_stime;
+       __kernel_clock_t tms_cutime;
+       __kernel_clock_t tms_cstime;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/timex.h b/lib/libdss-include/linux/timex.h
new file mode 100644 (file)
index 0000000..9249c77
--- /dev/null
@@ -0,0 +1,164 @@
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) David L. Mills 1993                                         *
+ *                                                                           *
+ * Permission to use, copy, modify, and distribute this software and its     *
+ * documentation for any purpose and without fee is hereby granted, provided *
+ * that the above copyright notice appears in all copies and that both the   *
+ * copyright notice and this permission notice appear in supporting          *
+ * documentation, and that the name University of Delaware not be used in    *
+ * advertising or publicity pertaining to distribution of the software       *
+ * without specific, written prior permission.  The University of Delaware   *
+ * makes no representations about the suitability this software for any      *
+ * purpose.  It is provided "as is" without express or implied warranty.     *
+ *                                                                           *
+ *****************************************************************************/
+
+/*
+ * Modification history timex.h
+ *
+ * 29 Dec 97   Russell King
+ *     Moved CLOCK_TICK_RATE, CLOCK_TICK_FACTOR and FINETUNE to asm/timex.h
+ *     for ARM machines
+ *
+ *  9 Jan 97    Adrian Sun
+ *      Shifted LATCH define to allow access to alpha machines.
+ *
+ * 26 Sep 94   David L. Mills
+ *     Added defines for hybrid phase/frequency-lock loop.
+ *
+ * 19 Mar 94   David L. Mills
+ *     Moved defines from kernel routines to header file and added new
+ *     defines for PPS phase-lock loop.
+ *
+ * 20 Feb 94   David L. Mills
+ *     Revised status codes and structures for external clock and PPS
+ *     signal discipline.
+ *
+ * 28 Nov 93   David L. Mills
+ *     Adjusted parameters to improve stability and increase poll
+ *     interval.
+ *
+ * 17 Sep 93    David L. Mills
+ *      Created file $NTP/include/sys/timex.h
+ * 07 Oct 93    Torsten Duwe
+ *      Derived linux/timex.h
+ * 1995-08-13    Torsten Duwe
+ *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
+ * 1997-08-30    Ulrich Windl
+ *      Added new constant NTP_PHASE_LIMIT
+ * 2004-08-12    Christoph Lameter
+ *      Reworked time interpolation logic
+ */
+#ifndef _LINUX_TIMEX_H
+#define _LINUX_TIMEX_H
+
+#include <linux/time.h>
+
+#define NTP_API                4       /* NTP API version */
+
+/*
+ * syscall interface - used (mainly by NTP daemon)
+ * to discipline kernel clock oscillator
+ */
+struct timex {
+       unsigned int modes;     /* mode selector */
+       __kernel_long_t offset; /* time offset (usec) */
+       __kernel_long_t freq;   /* frequency offset (scaled ppm) */
+       __kernel_long_t maxerror;/* maximum error (usec) */
+       __kernel_long_t esterror;/* estimated error (usec) */
+       int status;             /* clock command/status */
+       __kernel_long_t constant;/* pll time constant */
+       __kernel_long_t precision;/* clock precision (usec) (read only) */
+       __kernel_long_t tolerance;/* clock frequency tolerance (ppm)
+                                  * (read only)
+                                  */
+       struct timeval time;    /* (read only, except for ADJ_SETOFFSET) */
+       __kernel_long_t tick;   /* (modified) usecs between clock ticks */
+
+       __kernel_long_t ppsfreq;/* pps frequency (scaled ppm) (ro) */
+       __kernel_long_t jitter; /* pps jitter (us) (ro) */
+       int shift;              /* interval duration (s) (shift) (ro) */
+       __kernel_long_t stabil;            /* pps stability (scaled ppm) (ro) */
+       __kernel_long_t jitcnt; /* jitter limit exceeded (ro) */
+       __kernel_long_t calcnt; /* calibration intervals (ro) */
+       __kernel_long_t errcnt; /* calibration errors (ro) */
+       __kernel_long_t stbcnt; /* stability limit exceeded (ro) */
+
+       int tai;                /* TAI offset (ro) */
+
+       int  :32; int  :32; int  :32; int  :32;
+       int  :32; int  :32; int  :32; int  :32;
+       int  :32; int  :32; int  :32;
+};
+
+/*
+ * Mode codes (timex.mode)
+ */
+#define ADJ_OFFSET             0x0001  /* time offset */
+#define ADJ_FREQUENCY          0x0002  /* frequency offset */
+#define ADJ_MAXERROR           0x0004  /* maximum time error */
+#define ADJ_ESTERROR           0x0008  /* estimated time error */
+#define ADJ_STATUS             0x0010  /* clock status */
+#define ADJ_TIMECONST          0x0020  /* pll time constant */
+#define ADJ_TAI                        0x0080  /* set TAI offset */
+#define ADJ_SETOFFSET          0x0100  /* add 'time' to current time */
+#define ADJ_MICRO              0x1000  /* select microsecond resolution */
+#define ADJ_NANO               0x2000  /* select nanosecond resolution */
+#define ADJ_TICK               0x4000  /* tick value */
+
+#define ADJ_OFFSET_SINGLESHOT  0x8001  /* old-fashioned adjtime */
+#define ADJ_OFFSET_SS_READ     0xa001  /* read-only adjtime */
+
+/* NTP userland likes the MOD_ prefix better */
+#define MOD_OFFSET     ADJ_OFFSET
+#define MOD_FREQUENCY  ADJ_FREQUENCY
+#define MOD_MAXERROR   ADJ_MAXERROR
+#define MOD_ESTERROR   ADJ_ESTERROR
+#define MOD_STATUS     ADJ_STATUS
+#define MOD_TIMECONST  ADJ_TIMECONST
+#define MOD_TAI        ADJ_TAI
+#define MOD_MICRO      ADJ_MICRO
+#define MOD_NANO       ADJ_NANO
+
+
+/*
+ * Status codes (timex.status)
+ */
+#define STA_PLL                0x0001  /* enable PLL updates (rw) */
+#define STA_PPSFREQ    0x0002  /* enable PPS freq discipline (rw) */
+#define STA_PPSTIME    0x0004  /* enable PPS time discipline (rw) */
+#define STA_FLL                0x0008  /* select frequency-lock mode (rw) */
+
+#define STA_INS                0x0010  /* insert leap (rw) */
+#define STA_DEL                0x0020  /* delete leap (rw) */
+#define STA_UNSYNC     0x0040  /* clock unsynchronized (rw) */
+#define STA_FREQHOLD   0x0080  /* hold frequency (rw) */
+
+#define STA_PPSSIGNAL  0x0100  /* PPS signal present (ro) */
+#define STA_PPSJITTER  0x0200  /* PPS signal jitter exceeded (ro) */
+#define STA_PPSWANDER  0x0400  /* PPS signal wander exceeded (ro) */
+#define STA_PPSERROR   0x0800  /* PPS signal calibration error (ro) */
+
+#define STA_CLOCKERR   0x1000  /* clock hardware fault (ro) */
+#define STA_NANO       0x2000  /* resolution (0 = us, 1 = ns) (ro) */
+#define STA_MODE       0x4000  /* mode (0 = PLL, 1 = FLL) (ro) */
+#define STA_CLK                0x8000  /* clock source (0 = A, 1 = B) (ro) */
+
+/* read-only bits */
+#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
+       STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
+
+/*
+ * Clock states (time_state)
+ */
+#define TIME_OK                0       /* clock synchronized, no leap second */
+#define TIME_INS       1       /* insert leap second */
+#define TIME_DEL       2       /* delete leap second */
+#define TIME_OOP       3       /* leap second in progress */
+#define TIME_WAIT      4       /* leap second has occurred */
+#define TIME_ERROR     5       /* clock not synchronized */
+#define TIME_BAD       TIME_ERROR /* bw compat */
+
+
+#endif /* _LINUX_TIMEX_H */
diff --git a/lib/libdss-include/linux/tiocl.h b/lib/libdss-include/linux/tiocl.h
new file mode 100644 (file)
index 0000000..4756862
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_TIOCL_H
+#define _LINUX_TIOCL_H
+
+#define TIOCL_SETSEL   2       /* set a selection */
+#define        TIOCL_SELCHAR   0       /* select characters */
+#define        TIOCL_SELWORD   1       /* select whole words */
+#define        TIOCL_SELLINE   2       /* select whole lines */
+#define        TIOCL_SELPOINTER        3       /* show the pointer */
+#define        TIOCL_SELCLEAR  4       /* clear visibility of selection */
+#define        TIOCL_SELMOUSEREPORT    16      /* report beginning of selection */
+#define        TIOCL_SELBUTTONMASK     15      /* button mask for report */
+/* selection extent */
+struct tiocl_selection {
+       unsigned short xs;      /* X start */
+       unsigned short ys;      /* Y start */
+       unsigned short xe;      /* X end */
+       unsigned short ye;      /* Y end */
+       unsigned short sel_mode;        /* selection mode */
+};
+
+#define TIOCL_PASTESEL 3       /* paste previous selection */
+#define TIOCL_UNBLANKSCREEN    4       /* unblank screen */
+
+#define TIOCL_SELLOADLUT       5
+       /* set characters to be considered alphabetic when selecting */
+       /* u32[8] bit array, 4 bytes-aligned with type */
+
+/* these two don't return a value: they write it back in the type */
+#define TIOCL_GETSHIFTSTATE    6       /* write shift state */
+#define TIOCL_GETMOUSEREPORTING        7       /* write whether mouse event are reported */
+#define TIOCL_SETVESABLANK     10      /* set vesa blanking mode */
+#define TIOCL_SETKMSGREDIRECT  11      /* restrict kernel messages to a vt */
+#define TIOCL_GETFGCONSOLE     12      /* get foreground vt */
+#define TIOCL_SCROLLCONSOLE    13      /* scroll console */
+#define TIOCL_BLANKSCREEN      14      /* keep screen blank even if a key is pressed */
+#define TIOCL_BLANKEDSCREEN    15      /* return which vt was blanked */
+#define TIOCL_GETKMSGREDIRECT  17      /* get the vt the kernel messages are restricted to */
+
+#endif /* _LINUX_TIOCL_H */
diff --git a/lib/libdss-include/linux/tipc.h b/lib/libdss-include/linux/tipc.h
new file mode 100644 (file)
index 0000000..ebd3b63
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * include/uapi/linux/tipc.h: Header for TIPC socket interface
+ *
+ * Copyright (c) 2003-2006, Ericsson AB
+ * Copyright (c) 2005, 2010-2011, Wind River Systems
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_H_
+#define _LINUX_TIPC_H_
+
+#include <linux/types.h>
+#include <linux/sockios.h>
+
+/*
+ * TIPC addressing primitives
+ */
+
+struct tipc_portid {
+       __u32 ref;
+       __u32 node;
+};
+
+struct tipc_name {
+       __u32 type;
+       __u32 instance;
+};
+
+struct tipc_name_seq {
+       __u32 type;
+       __u32 lower;
+       __u32 upper;
+};
+
+static __inline__ __u32 tipc_addr(unsigned int zone,
+                             unsigned int cluster,
+                             unsigned int node)
+{
+       return (zone << 24) | (cluster << 12) | node;
+}
+
+static __inline__ unsigned int tipc_zone(__u32 addr)
+{
+       return addr >> 24;
+}
+
+static __inline__ unsigned int tipc_cluster(__u32 addr)
+{
+       return (addr >> 12) & 0xfff;
+}
+
+static __inline__ unsigned int tipc_node(__u32 addr)
+{
+       return addr & 0xfff;
+}
+
+/*
+ * Application-accessible port name types
+ */
+
+#define TIPC_CFG_SRV           0       /* configuration service name type */
+#define TIPC_TOP_SRV           1       /* topology service name type */
+#define TIPC_LINK_STATE                2       /* link state name type */
+#define TIPC_RESERVED_TYPES    64      /* lowest user-publishable name type */
+
+/*
+ * Publication scopes when binding port names and port name sequences
+ */
+
+#define TIPC_ZONE_SCOPE                1
+#define TIPC_CLUSTER_SCOPE     2
+#define TIPC_NODE_SCOPE                3
+
+/*
+ * Limiting values for messages
+ */
+
+#define TIPC_MAX_USER_MSG_SIZE 66000U
+
+/*
+ * Message importance levels
+ */
+
+#define TIPC_LOW_IMPORTANCE            0
+#define TIPC_MEDIUM_IMPORTANCE         1
+#define TIPC_HIGH_IMPORTANCE           2
+#define TIPC_CRITICAL_IMPORTANCE       3
+
+/*
+ * Msg rejection/connection shutdown reasons
+ */
+
+#define TIPC_OK                        0
+#define TIPC_ERR_NO_NAME       1
+#define TIPC_ERR_NO_PORT       2
+#define TIPC_ERR_NO_NODE       3
+#define TIPC_ERR_OVERLOAD      4
+#define TIPC_CONN_SHUTDOWN     5
+
+/*
+ * TIPC topology subscription service definitions
+ */
+
+#define TIPC_SUB_PORTS         0x01    /* filter for port availability */
+#define TIPC_SUB_SERVICE       0x02    /* filter for service availability */
+#define TIPC_SUB_CANCEL                0x04    /* cancel a subscription */
+
+#define TIPC_WAIT_FOREVER      (~0)    /* timeout for permanent subscription */
+
+struct tipc_subscr {
+       struct tipc_name_seq seq;       /* name sequence of interest */
+       __u32 timeout;                  /* subscription duration (in ms) */
+       __u32 filter;                   /* bitmask of filter options */
+       char usr_handle[8];             /* available for subscriber use */
+};
+
+#define TIPC_PUBLISHED         1       /* publication event */
+#define TIPC_WITHDRAWN         2       /* withdraw event */
+#define TIPC_SUBSCR_TIMEOUT    3       /* subscription timeout event */
+
+struct tipc_event {
+       __u32 event;                    /* event type */
+       __u32 found_lower;              /* matching name seq instances */
+       __u32 found_upper;              /*    "      "    "     "      */
+       struct tipc_portid port;        /* associated port */
+       struct tipc_subscr s;           /* associated subscription */
+};
+
+/*
+ * Socket API
+ */
+
+#ifndef AF_TIPC
+#define AF_TIPC                30
+#endif
+
+#ifndef PF_TIPC
+#define PF_TIPC                AF_TIPC
+#endif
+
+#ifndef SOL_TIPC
+#define SOL_TIPC       271
+#endif
+
+#define TIPC_ADDR_NAMESEQ      1
+#define TIPC_ADDR_MCAST                1
+#define TIPC_ADDR_NAME         2
+#define TIPC_ADDR_ID           3
+
+struct sockaddr_tipc {
+       unsigned short family;
+       unsigned char  addrtype;
+       signed   char  scope;
+       union {
+               struct tipc_portid id;
+               struct tipc_name_seq nameseq;
+               struct {
+                       struct tipc_name name;
+                       __u32 domain;
+               } name;
+       } addr;
+};
+
+/*
+ * Ancillary data objects supported by recvmsg()
+ */
+
+#define TIPC_ERRINFO   1       /* error info */
+#define TIPC_RETDATA   2       /* returned data */
+#define TIPC_DESTNAME  3       /* destination name */
+
+/*
+ * TIPC-specific socket option values
+ */
+
+#define TIPC_IMPORTANCE                127     /* Default: TIPC_LOW_IMPORTANCE */
+#define TIPC_SRC_DROPPABLE     128     /* Default: based on socket type */
+#define TIPC_DEST_DROPPABLE    129     /* Default: based on socket type */
+#define TIPC_CONN_TIMEOUT      130     /* Default: 8000 (ms)  */
+#define TIPC_NODE_RECVQ_DEPTH  131     /* Default: none (read only) */
+#define TIPC_SOCK_RECVQ_DEPTH  132     /* Default: none (read only) */
+
+/*
+ * Maximum sizes of TIPC bearer-related names (including terminating NULL)
+ * The string formatting for each name element is:
+ * media: media
+ * interface: media:interface name
+ * link: Z.C.N:interface-Z.C.N:interface
+ *
+ */
+
+#define TIPC_MAX_MEDIA_NAME    16
+#define TIPC_MAX_IF_NAME       16
+#define TIPC_MAX_BEARER_NAME   32
+#define TIPC_MAX_LINK_NAME     60
+
+#define SIOCGETLINKNAME                SIOCPROTOPRIVATE
+
+struct tipc_sioc_ln_req {
+       __u32 peer;
+       __u32 bearer_id;
+       char linkname[TIPC_MAX_LINK_NAME];
+};
+#endif
diff --git a/lib/libdss-include/linux/tipc_config.h b/lib/libdss-include/linux/tipc_config.h
new file mode 100644 (file)
index 0000000..89f667c
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+ * include/uapi/linux/tipc_config.h: Header for TIPC configuration interface
+ *
+ * Copyright (c) 2003-2006, Ericsson AB
+ * Copyright (c) 2005-2007, 2010-2011, Wind River Systems
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_CONFIG_H_
+#define _LINUX_TIPC_CONFIG_H_
+
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/tipc.h>
+#include <asm/byteorder.h>
+
+#include <arpa/inet.h> /* for ntohs etc. */
+
+/*
+ * Configuration
+ *
+ * All configuration management messaging involves sending a request message
+ * to the TIPC configuration service on a node, which sends a reply message
+ * back.  (In the future multi-message replies may be supported.)
+ *
+ * Both request and reply messages consist of a transport header and payload.
+ * The transport header contains info about the desired operation;
+ * the payload consists of zero or more type/length/value (TLV) items
+ * which specify parameters or results for the operation.
+ *
+ * For many operations, the request and reply messages have a fixed number
+ * of TLVs (usually zero or one); however, some reply messages may return
+ * a variable number of TLVs.  A failed request is denoted by the presence
+ * of an "error string" TLV in the reply message instead of the TLV(s) the
+ * reply should contain if the request succeeds.
+ */
+
+/*
+ * Public commands:
+ * May be issued by any process.
+ * Accepted by own node, or by remote node only if remote management enabled.
+ */
+
+#define  TIPC_CMD_NOOP              0x0000    /* tx none, rx none */
+#define  TIPC_CMD_GET_NODES         0x0001    /* tx net_addr, rx node_info(s) */
+#define  TIPC_CMD_GET_MEDIA_NAMES   0x0002    /* tx none, rx media_name(s) */
+#define  TIPC_CMD_GET_BEARER_NAMES  0x0003    /* tx none, rx bearer_name(s) */
+#define  TIPC_CMD_GET_LINKS         0x0004    /* tx net_addr, rx link_info(s) */
+#define  TIPC_CMD_SHOW_NAME_TABLE   0x0005    /* tx name_tbl_query, rx ultra_string */
+#define  TIPC_CMD_SHOW_PORTS        0x0006    /* tx none, rx ultra_string */
+#define  TIPC_CMD_SHOW_LINK_STATS   0x000B    /* tx link_name, rx ultra_string */
+#define  TIPC_CMD_SHOW_STATS        0x000F    /* tx unsigned, rx ultra_string */
+
+/*
+ * Protected commands:
+ * May only be issued by "network administration capable" process.
+ * Accepted by own node, or by remote node only if remote management enabled
+ * and this node is zone manager.
+ */
+
+#define  TIPC_CMD_GET_REMOTE_MNG    0x4003    /* tx none, rx unsigned */
+#define  TIPC_CMD_GET_MAX_PORTS     0x4004    /* tx none, rx unsigned */
+#define  TIPC_CMD_GET_MAX_PUBL      0x4005    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_SUBSCR    0x4006    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_ZONES     0x4007    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_CLUSTERS  0x4008    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_NODES     0x4009    /* obsoleted */
+#define  TIPC_CMD_GET_MAX_SLAVES    0x400A    /* obsoleted */
+#define  TIPC_CMD_GET_NETID         0x400B    /* tx none, rx unsigned */
+
+#define  TIPC_CMD_ENABLE_BEARER     0x4101    /* tx bearer_config, rx none */
+#define  TIPC_CMD_DISABLE_BEARER    0x4102    /* tx bearer_name, rx none */
+#define  TIPC_CMD_SET_LINK_TOL      0x4107    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LINK_PRI      0x4108    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LINK_WINDOW   0x4109    /* tx link_config, rx none */
+#define  TIPC_CMD_SET_LOG_SIZE      0x410A    /* obsoleted */
+#define  TIPC_CMD_DUMP_LOG          0x410B    /* obsoleted */
+#define  TIPC_CMD_RESET_LINK_STATS  0x410C    /* tx link_name, rx none */
+
+/*
+ * Private commands:
+ * May only be issued by "network administration capable" process.
+ * Accepted by own node only; cannot be used on a remote node.
+ */
+
+#define  TIPC_CMD_SET_NODE_ADDR     0x8001    /* tx net_addr, rx none */
+#define  TIPC_CMD_SET_REMOTE_MNG    0x8003    /* tx unsigned, rx none */
+#define  TIPC_CMD_SET_MAX_PORTS     0x8004    /* tx unsigned, rx none */
+#define  TIPC_CMD_SET_MAX_PUBL      0x8005    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_SUBSCR    0x8006    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_ZONES     0x8007    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_CLUSTERS  0x8008    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_NODES     0x8009    /* obsoleted */
+#define  TIPC_CMD_SET_MAX_SLAVES    0x800A    /* obsoleted */
+#define  TIPC_CMD_SET_NETID         0x800B    /* tx unsigned, rx none */
+
+/*
+ * Reserved commands:
+ * May not be issued by any process.
+ * Used internally by TIPC.
+ */
+
+#define  TIPC_CMD_NOT_NET_ADMIN     0xC001    /* tx none, rx none */
+
+/*
+ * TLV types defined for TIPC
+ */
+
+#define TIPC_TLV_NONE          0       /* no TLV present */
+#define TIPC_TLV_VOID          1       /* empty TLV (0 data bytes)*/
+#define TIPC_TLV_UNSIGNED      2       /* 32-bit integer */
+#define TIPC_TLV_STRING                3       /* char[128] (max) */
+#define TIPC_TLV_LARGE_STRING  4       /* char[2048] (max) */
+#define TIPC_TLV_ULTRA_STRING  5       /* char[32768] (max) */
+
+#define TIPC_TLV_ERROR_STRING  16      /* char[128] containing "error code" */
+#define TIPC_TLV_NET_ADDR      17      /* 32-bit integer denoting <Z.C.N> */
+#define TIPC_TLV_MEDIA_NAME    18      /* char[TIPC_MAX_MEDIA_NAME] */
+#define TIPC_TLV_BEARER_NAME   19      /* char[TIPC_MAX_BEARER_NAME] */
+#define TIPC_TLV_LINK_NAME     20      /* char[TIPC_MAX_LINK_NAME] */
+#define TIPC_TLV_NODE_INFO     21      /* struct tipc_node_info */
+#define TIPC_TLV_LINK_INFO     22      /* struct tipc_link_info */
+#define TIPC_TLV_BEARER_CONFIG 23      /* struct tipc_bearer_config */
+#define TIPC_TLV_LINK_CONFIG   24      /* struct tipc_link_config */
+#define TIPC_TLV_NAME_TBL_QUERY        25      /* struct tipc_name_table_query */
+#define TIPC_TLV_PORT_REF      26      /* 32-bit port reference */
+
+/*
+ * Link priority limits (min, default, max, media default)
+ */
+
+#define TIPC_MIN_LINK_PRI      0
+#define TIPC_DEF_LINK_PRI      10
+#define TIPC_MAX_LINK_PRI      31
+#define TIPC_MEDIA_LINK_PRI    (TIPC_MAX_LINK_PRI + 1)
+
+/*
+ * Link tolerance limits (min, default, max), in ms
+ */
+
+#define TIPC_MIN_LINK_TOL 50
+#define TIPC_DEF_LINK_TOL 1500
+#define TIPC_MAX_LINK_TOL 30000
+
+#if (TIPC_MIN_LINK_TOL < 16)
+#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
+#endif
+
+/*
+ * Link window limits (min, default, max), in packets
+ */
+
+#define TIPC_MIN_LINK_WIN 16
+#define TIPC_DEF_LINK_WIN 50
+#define TIPC_MAX_LINK_WIN 8191
+
+
+struct tipc_node_info {
+       __be32 addr;                    /* network address of node */
+       __be32 up;                      /* 0=down, 1= up */
+};
+
+struct tipc_link_info {
+       __be32 dest;                    /* network address of peer node */
+       __be32 up;                      /* 0=down, 1=up */
+       char str[TIPC_MAX_LINK_NAME];   /* link name */
+};
+
+struct tipc_bearer_config {
+       __be32 priority;                /* Range [1,31]. Override per link  */
+       __be32 disc_domain;             /* <Z.C.N> describing desired nodes */
+       char name[TIPC_MAX_BEARER_NAME];
+};
+
+struct tipc_link_config {
+       __be32 value;
+       char name[TIPC_MAX_LINK_NAME];
+};
+
+#define TIPC_NTQ_ALLTYPES 0x80000000
+
+struct tipc_name_table_query {
+       __be32 depth;   /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */
+       __be32 type;    /* {t,l,u} info ignored if high bit of "depth" is set */
+       __be32 lowbound; /* (i.e. displays all entries of name table) */
+       __be32 upbound;
+};
+
+/*
+ * The error string TLV is a null-terminated string describing the cause
+ * of the request failure.  To simplify error processing (and to save space)
+ * the first character of the string can be a special error code character
+ * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason.
+ */
+
+#define TIPC_CFG_TLV_ERROR      "\x80"  /* request contains incorrect TLV(s) */
+#define TIPC_CFG_NOT_NET_ADMIN  "\x81" /* must be network administrator */
+#define TIPC_CFG_NOT_ZONE_MSTR "\x82"  /* must be zone master */
+#define TIPC_CFG_NO_REMOTE     "\x83"  /* remote management not enabled */
+#define TIPC_CFG_NOT_SUPPORTED  "\x84" /* request is not supported by TIPC */
+#define TIPC_CFG_INVALID_VALUE  "\x85"  /* request has invalid argument value */
+
+/*
+ * A TLV consists of a descriptor, followed by the TLV value.
+ * TLV descriptor fields are stored in network byte order;
+ * TLV values must also be stored in network byte order (where applicable).
+ * TLV descriptors must be aligned to addresses which are multiple of 4,
+ * so up to 3 bytes of padding may exist at the end of the TLV value area.
+ * There must not be any padding between the TLV descriptor and its value.
+ */
+
+struct tlv_desc {
+       __be16 tlv_len;         /* TLV length (descriptor + value) */
+       __be16 tlv_type;                /* TLV identifier */
+};
+
+#define TLV_ALIGNTO 4
+
+#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1))
+#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))
+#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))
+#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))
+
+static __inline__ int TLV_OK(const void *tlv, __u16 space)
+{
+       /*
+        * Would also like to check that "tlv" is a multiple of 4,
+        * but don't know how to do this in a portable way.
+        * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler
+        *   won't allow binary "&" with a pointer.
+        * - Tried casting "tlv" to integer type, but causes warning about size
+        *   mismatch when pointer is bigger than chosen type (int, long, ...).
+        */
+
+       return (space >= TLV_SPACE(0)) &&
+               (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space);
+}
+
+static __inline__ int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)
+{
+       return TLV_OK(tlv, space) &&
+               (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type);
+}
+
+static __inline__ int TLV_GET_LEN(struct tlv_desc *tlv)
+{
+       return ntohs(tlv->tlv_len);
+}
+
+static __inline__ void TLV_SET_LEN(struct tlv_desc *tlv, __u16 len)
+{
+       tlv->tlv_len = htons(len);
+}
+
+static __inline__ int TLV_CHECK_TYPE(struct tlv_desc *tlv,  __u16 type)
+{
+       return (ntohs(tlv->tlv_type) == type);
+}
+
+static __inline__ void TLV_SET_TYPE(struct tlv_desc *tlv, __u16 type)
+{
+       tlv->tlv_type = htons(type);
+}
+
+static __inline__ int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
+{
+       struct tlv_desc *tlv_ptr;
+       int tlv_len;
+
+       tlv_len = TLV_LENGTH(len);
+       tlv_ptr = (struct tlv_desc *)tlv;
+       tlv_ptr->tlv_type = htons(type);
+       tlv_ptr->tlv_len  = htons(tlv_len);
+       if (len && data)
+               memcpy(TLV_DATA(tlv_ptr), data, tlv_len);
+       return TLV_SPACE(len);
+}
+
+/*
+ * A TLV list descriptor simplifies processing of messages
+ * containing multiple TLVs.
+ */
+
+struct tlv_list_desc {
+       struct tlv_desc *tlv_ptr;       /* ptr to current TLV */
+       __u32 tlv_space;                /* # bytes from curr TLV to list end */
+};
+
+static __inline__ void TLV_LIST_INIT(struct tlv_list_desc *list,
+                                void *data, __u32 space)
+{
+       list->tlv_ptr = (struct tlv_desc *)data;
+       list->tlv_space = space;
+}
+
+static __inline__ int TLV_LIST_EMPTY(struct tlv_list_desc *list)
+{
+       return (list->tlv_space == 0);
+}
+
+static __inline__ int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type)
+{
+       return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type);
+}
+
+static __inline__ void *TLV_LIST_DATA(struct tlv_list_desc *list)
+{
+       return TLV_DATA(list->tlv_ptr);
+}
+
+static __inline__ void TLV_LIST_STEP(struct tlv_list_desc *list)
+{
+       __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len));
+
+       list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space);
+       list->tlv_space -= tlv_space;
+}
+
+/*
+ * Configuration messages exchanged via NETLINK_GENERIC use the following
+ * family id, name, version and command.
+ */
+#define TIPC_GENL_NAME         "TIPC"
+#define TIPC_GENL_VERSION      0x1
+#define TIPC_GENL_CMD          0x1
+
+/*
+ * TIPC specific header used in NETLINK_GENERIC requests.
+ */
+struct tipc_genlmsghdr {
+       __u32 dest;             /* Destination address */
+       __u16 cmd;              /* Command */
+       __u16 reserved;         /* Unused */
+};
+
+#define TIPC_GENL_HDRLEN       NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr))
+
+/*
+ * Configuration messages exchanged via TIPC sockets use the TIPC configuration
+ * message header, which is defined below.  This structure is analogous
+ * to the Netlink message header, but fields are stored in network byte order
+ * and no padding is permitted between the header and the message data
+ * that follows.
+ */
+
+struct tipc_cfg_msg_hdr {
+       __be32 tcm_len;         /* Message length (including header) */
+       __be16 tcm_type;        /* Command type */
+       __be16 tcm_flags;       /* Additional flags */
+       char  tcm_reserved[8];  /* Unused */
+};
+
+#define TCM_F_REQUEST  0x1     /* Flag: Request message */
+#define TCM_F_MORE     0x2     /* Flag: Message to be continued */
+
+#define TCM_ALIGN(datalen)  (((datalen)+3) & ~3)
+#define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen)
+#define TCM_SPACE(datalen)  (TCM_ALIGN(TCM_LENGTH(datalen)))
+#define TCM_DATA(tcm_hdr)   ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0)))
+
+static __inline__ int TCM_SET(void *msg, __u16 cmd, __u16 flags,
+                         void *data, __u16 data_len)
+{
+       struct tipc_cfg_msg_hdr *tcm_hdr;
+       int msg_len;
+
+       msg_len = TCM_LENGTH(data_len);
+       tcm_hdr = (struct tipc_cfg_msg_hdr *)msg;
+       tcm_hdr->tcm_len   = htonl(msg_len);
+       tcm_hdr->tcm_type  = htons(cmd);
+       tcm_hdr->tcm_flags = htons(flags);
+       if (data_len && data)
+               memcpy(TCM_DATA(msg), data, data_len);
+       return TCM_SPACE(data_len);
+}
+
+#endif
diff --git a/lib/libdss-include/linux/tipc_netlink.h b/lib/libdss-include/linux/tipc_netlink.h
new file mode 100644 (file)
index 0000000..d4c8f14
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2014, Ericsson AB
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_TIPC_NETLINK_H_
+#define _LINUX_TIPC_NETLINK_H_
+
+#define TIPC_GENL_V2_NAME      "TIPCv2"
+#define TIPC_GENL_V2_VERSION   0x1
+
+/* Netlink commands */
+enum {
+       TIPC_NL_UNSPEC,
+       TIPC_NL_LEGACY,
+       TIPC_NL_BEARER_DISABLE,
+       TIPC_NL_BEARER_ENABLE,
+       TIPC_NL_BEARER_GET,
+       TIPC_NL_BEARER_SET,
+       TIPC_NL_SOCK_GET,
+       TIPC_NL_PUBL_GET,
+       TIPC_NL_LINK_GET,
+       TIPC_NL_LINK_SET,
+       TIPC_NL_LINK_RESET_STATS,
+       TIPC_NL_MEDIA_GET,
+       TIPC_NL_MEDIA_SET,
+       TIPC_NL_NODE_GET,
+       TIPC_NL_NET_GET,
+       TIPC_NL_NET_SET,
+       TIPC_NL_NAME_TABLE_GET,
+
+       __TIPC_NL_CMD_MAX,
+       TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
+};
+
+/* Top level netlink attributes */
+enum {
+       TIPC_NLA_UNSPEC,
+       TIPC_NLA_BEARER,                /* nest */
+       TIPC_NLA_SOCK,                  /* nest */
+       TIPC_NLA_PUBL,                  /* nest */
+       TIPC_NLA_LINK,                  /* nest */
+       TIPC_NLA_MEDIA,                 /* nest */
+       TIPC_NLA_NODE,                  /* nest */
+       TIPC_NLA_NET,                   /* nest */
+       TIPC_NLA_NAME_TABLE,            /* nest */
+
+       __TIPC_NLA_MAX,
+       TIPC_NLA_MAX = __TIPC_NLA_MAX - 1
+};
+
+/* Bearer info */
+enum {
+       TIPC_NLA_BEARER_UNSPEC,
+       TIPC_NLA_BEARER_NAME,           /* string */
+       TIPC_NLA_BEARER_PROP,           /* nest */
+       TIPC_NLA_BEARER_DOMAIN,         /* u32 */
+       TIPC_NLA_BEARER_UDP_OPTS,       /* nest */
+
+       __TIPC_NLA_BEARER_MAX,
+       TIPC_NLA_BEARER_MAX = __TIPC_NLA_BEARER_MAX - 1
+};
+
+enum {
+       TIPC_NLA_UDP_UNSPEC,
+       TIPC_NLA_UDP_LOCAL,             /* sockaddr_storage */
+       TIPC_NLA_UDP_REMOTE,            /* sockaddr_storage */
+
+       __TIPC_NLA_UDP_MAX,
+       TIPC_NLA_UDP_MAX = __TIPC_NLA_UDP_MAX - 1
+};
+/* Socket info */
+enum {
+       TIPC_NLA_SOCK_UNSPEC,
+       TIPC_NLA_SOCK_ADDR,             /* u32 */
+       TIPC_NLA_SOCK_REF,              /* u32 */
+       TIPC_NLA_SOCK_CON,              /* nest */
+       TIPC_NLA_SOCK_HAS_PUBL,         /* flag */
+
+       __TIPC_NLA_SOCK_MAX,
+       TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
+};
+
+/* Link info */
+enum {
+       TIPC_NLA_LINK_UNSPEC,
+       TIPC_NLA_LINK_NAME,             /* string */
+       TIPC_NLA_LINK_DEST,             /* u32 */
+       TIPC_NLA_LINK_MTU,              /* u32 */
+       TIPC_NLA_LINK_BROADCAST,        /* flag */
+       TIPC_NLA_LINK_UP,               /* flag */
+       TIPC_NLA_LINK_ACTIVE,           /* flag */
+       TIPC_NLA_LINK_PROP,             /* nest */
+       TIPC_NLA_LINK_STATS,            /* nest */
+       TIPC_NLA_LINK_RX,               /* u32 */
+       TIPC_NLA_LINK_TX,               /* u32 */
+
+       __TIPC_NLA_LINK_MAX,
+       TIPC_NLA_LINK_MAX = __TIPC_NLA_LINK_MAX - 1
+};
+
+/* Media info */
+enum {
+       TIPC_NLA_MEDIA_UNSPEC,
+       TIPC_NLA_MEDIA_NAME,            /* string */
+       TIPC_NLA_MEDIA_PROP,            /* nest */
+
+       __TIPC_NLA_MEDIA_MAX,
+       TIPC_NLA_MEDIA_MAX = __TIPC_NLA_MEDIA_MAX - 1
+};
+
+/* Node info */
+enum {
+       TIPC_NLA_NODE_UNSPEC,
+       TIPC_NLA_NODE_ADDR,             /* u32 */
+       TIPC_NLA_NODE_UP,               /* flag */
+
+       __TIPC_NLA_NODE_MAX,
+       TIPC_NLA_NODE_MAX = __TIPC_NLA_NODE_MAX - 1
+};
+
+/* Net info */
+enum {
+       TIPC_NLA_NET_UNSPEC,
+       TIPC_NLA_NET_ID,                /* u32 */
+       TIPC_NLA_NET_ADDR,              /* u32 */
+
+       __TIPC_NLA_NET_MAX,
+       TIPC_NLA_NET_MAX = __TIPC_NLA_NET_MAX - 1
+};
+
+/* Name table info */
+enum {
+       TIPC_NLA_NAME_TABLE_UNSPEC,
+       TIPC_NLA_NAME_TABLE_PUBL,       /* nest */
+
+       __TIPC_NLA_NAME_TABLE_MAX,
+       TIPC_NLA_NAME_TABLE_MAX = __TIPC_NLA_NAME_TABLE_MAX - 1
+};
+
+/* Publication info */
+enum {
+       TIPC_NLA_PUBL_UNSPEC,
+
+       TIPC_NLA_PUBL_TYPE,             /* u32 */
+       TIPC_NLA_PUBL_LOWER,            /* u32 */
+       TIPC_NLA_PUBL_UPPER,            /* u32 */
+       TIPC_NLA_PUBL_SCOPE,            /* u32 */
+       TIPC_NLA_PUBL_NODE,             /* u32 */
+       TIPC_NLA_PUBL_REF,              /* u32 */
+       TIPC_NLA_PUBL_KEY,              /* u32 */
+
+       __TIPC_NLA_PUBL_MAX,
+       TIPC_NLA_PUBL_MAX = __TIPC_NLA_PUBL_MAX - 1
+};
+
+/* Nest, connection info */
+enum {
+       TIPC_NLA_CON_UNSPEC,
+
+       TIPC_NLA_CON_FLAG,              /* flag */
+       TIPC_NLA_CON_NODE,              /* u32 */
+       TIPC_NLA_CON_SOCK,              /* u32 */
+       TIPC_NLA_CON_TYPE,              /* u32 */
+       TIPC_NLA_CON_INST,              /* u32 */
+
+       __TIPC_NLA_CON_MAX,
+       TIPC_NLA_CON_MAX = __TIPC_NLA_CON_MAX - 1
+};
+
+/* Nest, link propreties. Valid for link, media and bearer */
+enum {
+       TIPC_NLA_PROP_UNSPEC,
+
+       TIPC_NLA_PROP_PRIO,             /* u32 */
+       TIPC_NLA_PROP_TOL,              /* u32 */
+       TIPC_NLA_PROP_WIN,              /* u32 */
+
+       __TIPC_NLA_PROP_MAX,
+       TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
+};
+
+/* Nest, statistics info */
+enum {
+       TIPC_NLA_STATS_UNSPEC,
+
+       TIPC_NLA_STATS_RX_INFO,         /* u32 */
+       TIPC_NLA_STATS_RX_FRAGMENTS,    /* u32 */
+       TIPC_NLA_STATS_RX_FRAGMENTED,   /* u32 */
+       TIPC_NLA_STATS_RX_BUNDLES,      /* u32 */
+       TIPC_NLA_STATS_RX_BUNDLED,      /* u32 */
+       TIPC_NLA_STATS_TX_INFO,         /* u32 */
+       TIPC_NLA_STATS_TX_FRAGMENTS,    /* u32 */
+       TIPC_NLA_STATS_TX_FRAGMENTED,   /* u32 */
+       TIPC_NLA_STATS_TX_BUNDLES,      /* u32 */
+       TIPC_NLA_STATS_TX_BUNDLED,      /* u32 */
+       TIPC_NLA_STATS_MSG_PROF_TOT,    /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_CNT,     /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_TOT,     /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P0,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P1,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P2,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P3,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P4,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P5,      /* u32 */
+       TIPC_NLA_STATS_MSG_LEN_P6,      /* u32 */
+       TIPC_NLA_STATS_RX_STATES,       /* u32 */
+       TIPC_NLA_STATS_RX_PROBES,       /* u32 */
+       TIPC_NLA_STATS_RX_NACKS,        /* u32 */
+       TIPC_NLA_STATS_RX_DEFERRED,     /* u32 */
+       TIPC_NLA_STATS_TX_STATES,       /* u32 */
+       TIPC_NLA_STATS_TX_PROBES,       /* u32 */
+       TIPC_NLA_STATS_TX_NACKS,        /* u32 */
+       TIPC_NLA_STATS_TX_ACKS,         /* u32 */
+       TIPC_NLA_STATS_RETRANSMITTED,   /* u32 */
+       TIPC_NLA_STATS_DUPLICATES,      /* u32 */
+       TIPC_NLA_STATS_LINK_CONGS,      /* u32 */
+       TIPC_NLA_STATS_MAX_QUEUE,       /* u32 */
+       TIPC_NLA_STATS_AVG_QUEUE,       /* u32 */
+
+       __TIPC_NLA_STATS_MAX,
+       TIPC_NLA_STATS_MAX = __TIPC_NLA_STATS_MAX - 1
+};
+
+#endif
diff --git a/lib/libdss-include/linux/toshiba.h b/lib/libdss-include/linux/toshiba.h
new file mode 100644 (file)
index 0000000..42f2f11
--- /dev/null
@@ -0,0 +1,63 @@
+/* toshiba.h -- Linux driver for accessing the SMM on Toshiba laptops 
+ *
+ * Copyright (c) 1996-2000  Jonathan A. Buzzard (jonathan@buzzard.org.uk)
+ * Copyright (c) 2015  Azael Avalos <coproscefalo@gmail.com>
+ *
+ * Thanks to Juergen Heinzl <juergen@monocerus.demon.co.uk> for the pointers
+ * on making sure the structure is aligned and packed.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_TOSHIBA_H
+#define _LINUX_TOSHIBA_H
+
+/*
+ * Toshiba modules paths
+ */
+
+#define TOSH_PROC              "/proc/toshiba"
+#define TOSH_DEVICE            "/dev/toshiba"
+#define TOSHIBA_ACPI_PROC      "/proc/acpi/toshiba"
+#define TOSHIBA_ACPI_DEVICE    "/dev/toshiba_acpi"
+
+/*
+ * Toshiba SMM structure
+ */
+
+typedef struct {
+       unsigned int eax;
+       unsigned int ebx __attribute__ ((packed));
+       unsigned int ecx __attribute__ ((packed));
+       unsigned int edx __attribute__ ((packed));
+       unsigned int esi __attribute__ ((packed));
+       unsigned int edi __attribute__ ((packed));
+} SMMRegisters;
+
+/*
+ * IOCTLs (0x90 - 0x91)
+ */
+
+#define TOSH_SMM               _IOWR('t', 0x90, SMMRegisters)
+/*
+ * Convenience toshiba_acpi command.
+ *
+ * The System Configuration Interface (SCI) is opened/closed internally
+ * to avoid userspace of buggy BIOSes.
+ *
+ * The toshiba_acpi module checks whether the eax register is set with
+ * SCI_GET (0xf300) or SCI_SET (0xf400), returning -EINVAL if not.
+ */
+#define TOSHIBA_ACPI_SCI       _IOWR('t', 0x91, SMMRegisters)
+
+
+#endif /* _LINUX_TOSHIBA_H */
diff --git a/lib/libdss-include/linux/tty.h b/lib/libdss-include/linux/tty.h
new file mode 100644 (file)
index 0000000..31156e5
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _LINUX_TTY_H
+#define _LINUX_TTY_H
+
+/*
+ * 'tty.h' defines some structures used by tty_io.c and some defines.
+ */
+
+#define NR_LDISCS              30
+
+/* line disciplines */
+#define N_TTY          0
+#define N_SLIP         1
+#define N_MOUSE                2
+#define N_PPP          3
+#define N_STRIP                4
+#define N_AX25         5
+#define N_X25          6       /* X.25 async */
+#define N_6PACK                7
+#define N_MASC         8       /* Reserved for Mobitex module <kaz@cafe.net> */
+#define N_R3964                9       /* Reserved for Simatic R3964 module */
+#define N_PROFIBUS_FDL 10      /* Reserved for Profibus */
+#define N_IRDA         11      /* Linux IrDa - http://irda.sourceforge.net/ */
+#define N_SMSBLOCK     12      /* SMS block mode - for talking to GSM data */
+                               /* cards about SMS messages */
+#define N_HDLC         13      /* synchronous HDLC */
+#define N_SYNC_PPP     14      /* synchronous PPP */
+#define N_HCI          15      /* Bluetooth HCI UART */
+#define N_GIGASET_M101 16      /* Siemens Gigaset M101 serial DECT adapter */
+#define N_SLCAN                17      /* Serial / USB serial CAN Adaptors */
+#define N_PPS          18      /* Pulse per Second */
+#define N_V253         19      /* Codec control over voice modem */
+#define N_CAIF         20      /* CAIF protocol for talking to modems */
+#define N_GSM0710      21      /* GSM 0710 Mux */
+#define N_TI_WL                22      /* for TI's WL BT, FM, GPS combo chips */
+#define N_TRACESINK    23      /* Trace data routing for MIPI P1149.7 */
+#define N_TRACEROUTER  24      /* Trace data routing for MIPI P1149.7 */
+#define N_NCI          25      /* NFC NCI UART */
+
+#endif /* _LINUX_TTY_H */
diff --git a/lib/libdss-include/linux/tty_flags.h b/lib/libdss-include/linux/tty_flags.h
new file mode 100644 (file)
index 0000000..072e41e
--- /dev/null
@@ -0,0 +1,85 @@
+#ifndef _LINUX_TTY_FLAGS_H
+#define _LINUX_TTY_FLAGS_H
+
+/*
+ * Definitions for async_struct (and serial_struct) flags field also
+ * shared by the tty_port flags structures.
+ *
+ * Define ASYNCB_* for convenient use with {test,set,clear}_bit.
+ *
+ * Bits [0..ASYNCB_LAST_USER] are userspace defined/visible/changeable
+ * [x] in the bit comments indicates the flag is defunct and no longer used.
+ */
+#define ASYNCB_HUP_NOTIFY       0 /* Notify getty on hangups and closes
+                                   * on the callout port */
+#define ASYNCB_FOURPORT                 1 /* Set OU1, OUT2 per AST Fourport settings */
+#define ASYNCB_SAK              2 /* Secure Attention Key (Orange book) */
+#define ASYNCB_SPLIT_TERMIOS    3 /* [x] Separate termios for dialin/callout */
+#define ASYNCB_SPD_HI           4 /* Use 57600 instead of 38400 bps */
+#define ASYNCB_SPD_VHI          5 /* Use 115200 instead of 38400 bps */
+#define ASYNCB_SKIP_TEST        6 /* Skip UART test during autoconfiguration */
+#define ASYNCB_AUTO_IRQ                 7 /* Do automatic IRQ during
+                                   * autoconfiguration */
+#define ASYNCB_SESSION_LOCKOUT  8 /* [x] Lock out cua opens based on session */
+#define ASYNCB_PGRP_LOCKOUT     9 /* [x] Lock out cua opens based on pgrp */
+#define ASYNCB_CALLOUT_NOHUP   10 /* [x] Don't do hangups for cua device */
+#define ASYNCB_HARDPPS_CD      11 /* Call hardpps when CD goes high  */
+#define ASYNCB_SPD_SHI         12 /* Use 230400 instead of 38400 bps */
+#define ASYNCB_LOW_LATENCY     13 /* Request low latency behaviour */
+#define ASYNCB_BUGGY_UART      14 /* This is a buggy UART, skip some safety
+                                   * checks.  Note: can be dangerous! */
+#define ASYNCB_AUTOPROBE       15 /* [x] Port was autoprobed by PCI/PNP code */
+#define ASYNCB_MAGIC_MULTIPLIER        16 /* Use special CLK or divisor */
+#define ASYNCB_LAST_USER       16
+
+/* Internal flags used only by kernel */
+#define ASYNCB_INITIALIZED     31 /* Serial port was initialized */
+#define ASYNCB_SUSPENDED       30 /* Serial port is suspended */
+#define ASYNCB_NORMAL_ACTIVE   29 /* Normal device is active */
+#define ASYNCB_BOOT_AUTOCONF   28 /* Autoconfigure port on bootup */
+#define ASYNCB_CLOSING         27 /* Serial port is closing */
+#define ASYNCB_CTS_FLOW                26 /* Do CTS flow control */
+#define ASYNCB_CHECK_CD                25 /* i.e., CLOCAL */
+#define ASYNCB_SHARE_IRQ       24 /* for multifunction cards, no longer used */
+#define ASYNCB_CONS_FLOW       23 /* flow control for console  */
+#define ASYNCB_FIRST_KERNEL    22
+
+#define ASYNC_HUP_NOTIFY       (1U << ASYNCB_HUP_NOTIFY)
+#define ASYNC_SUSPENDED                (1U << ASYNCB_SUSPENDED)
+#define ASYNC_FOURPORT         (1U << ASYNCB_FOURPORT)
+#define ASYNC_SAK              (1U << ASYNCB_SAK)
+#define ASYNC_SPLIT_TERMIOS    (1U << ASYNCB_SPLIT_TERMIOS)
+#define ASYNC_SPD_HI           (1U << ASYNCB_SPD_HI)
+#define ASYNC_SPD_VHI          (1U << ASYNCB_SPD_VHI)
+#define ASYNC_SKIP_TEST                (1U << ASYNCB_SKIP_TEST)
+#define ASYNC_AUTO_IRQ         (1U << ASYNCB_AUTO_IRQ)
+#define ASYNC_SESSION_LOCKOUT  (1U << ASYNCB_SESSION_LOCKOUT)
+#define ASYNC_PGRP_LOCKOUT     (1U << ASYNCB_PGRP_LOCKOUT)
+#define ASYNC_CALLOUT_NOHUP    (1U << ASYNCB_CALLOUT_NOHUP)
+#define ASYNC_HARDPPS_CD       (1U << ASYNCB_HARDPPS_CD)
+#define ASYNC_SPD_SHI          (1U << ASYNCB_SPD_SHI)
+#define ASYNC_LOW_LATENCY      (1U << ASYNCB_LOW_LATENCY)
+#define ASYNC_BUGGY_UART       (1U << ASYNCB_BUGGY_UART)
+#define ASYNC_AUTOPROBE                (1U << ASYNCB_AUTOPROBE)
+#define ASYNC_MAGIC_MULTIPLIER (1U << ASYNCB_MAGIC_MULTIPLIER)
+
+#define ASYNC_FLAGS            ((1U << (ASYNCB_LAST_USER + 1)) - 1)
+#define ASYNC_DEPRECATED       (ASYNC_SESSION_LOCKOUT | ASYNC_PGRP_LOCKOUT | \
+               ASYNC_CALLOUT_NOHUP | ASYNC_AUTOPROBE)
+#define ASYNC_USR_MASK         (ASYNC_SPD_MASK|ASYNC_CALLOUT_NOHUP| \
+               ASYNC_LOW_LATENCY)
+#define ASYNC_SPD_CUST         (ASYNC_SPD_HI|ASYNC_SPD_VHI)
+#define ASYNC_SPD_WARP         (ASYNC_SPD_HI|ASYNC_SPD_SHI)
+#define ASYNC_SPD_MASK         (ASYNC_SPD_HI|ASYNC_SPD_VHI|ASYNC_SPD_SHI)
+
+#define ASYNC_INITIALIZED      (1U << ASYNCB_INITIALIZED)
+#define ASYNC_NORMAL_ACTIVE    (1U << ASYNCB_NORMAL_ACTIVE)
+#define ASYNC_BOOT_AUTOCONF    (1U << ASYNCB_BOOT_AUTOCONF)
+#define ASYNC_CLOSING          (1U << ASYNCB_CLOSING)
+#define ASYNC_CTS_FLOW         (1U << ASYNCB_CTS_FLOW)
+#define ASYNC_CHECK_CD         (1U << ASYNCB_CHECK_CD)
+#define ASYNC_SHARE_IRQ                (1U << ASYNCB_SHARE_IRQ)
+#define ASYNC_CONS_FLOW                (1U << ASYNCB_CONS_FLOW)
+#define ASYNC_INTERNAL_FLAGS   (~((1U << ASYNCB_FIRST_KERNEL) - 1))
+
+#endif
diff --git a/lib/libdss-include/linux/types.h b/lib/libdss-include/linux/types.h
new file mode 100644 (file)
index 0000000..23ea78f
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef _LINUX_TYPES_H
+#define _LINUX_TYPES_H
+
+#include <asm/types.h>
+
+#ifndef __ASSEMBLY__
+
+#include <linux/posix_types.h>
+
+
+/*
+ * Below are truly Linux-specific types that should never collide with
+ * any application/library that wants linux/types.h.
+ */
+
+#ifdef __CHECKER__
+#define __bitwise__ __attribute__((bitwise))
+#else
+#define __bitwise__
+#endif
+#ifdef __CHECK_ENDIAN__
+#define __bitwise __bitwise__
+#else
+#define __bitwise
+#endif
+
+typedef __u16 __bitwise __le16;
+typedef __u16 __bitwise __be16;
+typedef __u32 __bitwise __le32;
+typedef __u32 __bitwise __be32;
+typedef __u64 __bitwise __le64;
+typedef __u64 __bitwise __be64;
+
+typedef __u16 __bitwise __sum16;
+typedef __u32 __bitwise __wsum;
+
+/*
+ * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid
+ * common 32/64-bit compat problems.
+ * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other
+ * architectures) and to 8-byte boundaries on 64-bit architectures.  The new
+ * aligned_64 type enforces 8-byte alignment so that structs containing
+ * aligned_64 values have the same alignment on 32-bit and 64-bit architectures.
+ * No conversions are necessary between 32-bit user-space and a 64-bit kernel.
+ */
+#define __aligned_u64 __u64 __attribute__((aligned(8)))
+#define __aligned_be64 __be64 __attribute__((aligned(8)))
+#define __aligned_le64 __le64 __attribute__((aligned(8)))
+
+#endif /*  __ASSEMBLY__ */
+#endif /* _LINUX_TYPES_H */
diff --git a/lib/libdss-include/linux/udf_fs_i.h b/lib/libdss-include/linux/udf_fs_i.h
new file mode 100644 (file)
index 0000000..3536965
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * udf_fs_i.h
+ *
+ * This file is intended for the Linux kernel/module. 
+ *
+ * COPYRIGHT
+ *     This file is distributed under the terms of the GNU General Public
+ *     License (GPL). Copies of the GPL can be obtained from:
+ *             ftp://prep.ai.mit.edu/pub/gnu/GPL
+ *     Each contributing author retains all rights to their own work.
+ */
+#ifndef _UDF_FS_I_H
+#define _UDF_FS_I_H 1
+
+/* exported IOCTLs, we have 'l', 0x40-0x7f */
+#define UDF_GETEASIZE   _IOR('l', 0x40, int)
+#define UDF_GETEABLOCK  _IOR('l', 0x41, void *)
+#define UDF_GETVOLIDENT _IOR('l', 0x42, void *)
+#define UDF_RELOCATE_BLOCKS _IOWR('l', 0x43, long)
+
+#endif /* _UDF_FS_I_H */
diff --git a/lib/libdss-include/linux/udp.h b/lib/libdss-include/linux/udp.h
new file mode 100644 (file)
index 0000000..ab05413
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Definitions for the UDP protocol.
+ *
+ * Version:    @(#)udp.h       1.0.2   04/28/93
+ *
+ * Author:     Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_UDP_H
+#define _LINUX_UDP_H
+
+#include <linux/types.h>
+
+struct udphdr {
+       __be16  source;
+       __be16  dest;
+       __be16  len;
+       __sum16 check;
+};
+
+/* UDP socket options */
+#define UDP_CORK       1       /* Never send partially complete segments */
+#define UDP_ENCAP      100     /* Set the socket to accept encapsulated packets */
+#define UDP_NO_CHECK6_TX 101   /* Disable sending checksum for UDP6X */
+#define UDP_NO_CHECK6_RX 102   /* Disable accpeting checksum for UDP6 */
+
+/* UDP encapsulation types */
+#define UDP_ENCAP_ESPINUDP_NON_IKE     1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
+#define UDP_ENCAP_ESPINUDP     2 /* draft-ietf-ipsec-udp-encaps-06 */
+#define UDP_ENCAP_L2TPINUDP    3 /* rfc2661 */
+
+
+#endif /* _LINUX_UDP_H */
diff --git a/lib/libdss-include/linux/uhid.h b/lib/libdss-include/linux/uhid.h
new file mode 100644 (file)
index 0000000..0ef73d4
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef __UHID_H_
+#define __UHID_H_
+
+/*
+ * User-space I/O driver support for HID subsystem
+ * Copyright (c) 2012 David Herrmann
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ */
+
+/*
+ * Public header for user-space communication. We try to keep every structure
+ * aligned but to be safe we also use __attribute__((__packed__)). Therefore,
+ * the communication should be ABI compatible even between architectures.
+ */
+
+#include <linux/input.h>
+#include <linux/types.h>
+#include <linux/hid.h>
+
+enum uhid_event_type {
+       __UHID_LEGACY_CREATE,
+       UHID_DESTROY,
+       UHID_START,
+       UHID_STOP,
+       UHID_OPEN,
+       UHID_CLOSE,
+       UHID_OUTPUT,
+       __UHID_LEGACY_OUTPUT_EV,
+       __UHID_LEGACY_INPUT,
+       UHID_GET_REPORT,
+       UHID_GET_REPORT_REPLY,
+       UHID_CREATE2,
+       UHID_INPUT2,
+       UHID_SET_REPORT,
+       UHID_SET_REPORT_REPLY,
+};
+
+struct uhid_create2_req {
+       __u8 name[128];
+       __u8 phys[64];
+       __u8 uniq[64];
+       __u16 rd_size;
+       __u16 bus;
+       __u32 vendor;
+       __u32 product;
+       __u32 version;
+       __u32 country;
+       __u8 rd_data[HID_MAX_DESCRIPTOR_SIZE];
+} __attribute__((__packed__));
+
+enum uhid_dev_flag {
+       UHID_DEV_NUMBERED_FEATURE_REPORTS                       = (1ULL << 0),
+       UHID_DEV_NUMBERED_OUTPUT_REPORTS                        = (1ULL << 1),
+       UHID_DEV_NUMBERED_INPUT_REPORTS                         = (1ULL << 2),
+};
+
+struct uhid_start_req {
+       __u64 dev_flags;
+};
+
+#define UHID_DATA_MAX 4096
+
+enum uhid_report_type {
+       UHID_FEATURE_REPORT,
+       UHID_OUTPUT_REPORT,
+       UHID_INPUT_REPORT,
+};
+
+struct uhid_input2_req {
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_output_req {
+       __u8 data[UHID_DATA_MAX];
+       __u16 size;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+struct uhid_get_report_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+struct uhid_get_report_reply_req {
+       __u32 id;
+       __u16 err;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_set_report_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+struct uhid_set_report_reply_req {
+       __u32 id;
+       __u16 err;
+} __attribute__((__packed__));
+
+/*
+ * Compat Layer
+ * All these commands and requests are obsolete. You should avoid using them in
+ * new code. We support them for backwards-compatibility, but you might not get
+ * access to new feature in case you use them.
+ */
+
+enum uhid_legacy_event_type {
+       UHID_CREATE                     = __UHID_LEGACY_CREATE,
+       UHID_OUTPUT_EV                  = __UHID_LEGACY_OUTPUT_EV,
+       UHID_INPUT                      = __UHID_LEGACY_INPUT,
+       UHID_FEATURE                    = UHID_GET_REPORT,
+       UHID_FEATURE_ANSWER             = UHID_GET_REPORT_REPLY,
+};
+
+/* Obsolete! Use UHID_CREATE2. */
+struct uhid_create_req {
+       __u8 name[128];
+       __u8 phys[64];
+       __u8 uniq[64];
+       __u8 *rd_data;
+       __u16 rd_size;
+
+       __u16 bus;
+       __u32 vendor;
+       __u32 product;
+       __u32 version;
+       __u32 country;
+} __attribute__((__packed__));
+
+/* Obsolete! Use UHID_INPUT2. */
+struct uhid_input_req {
+       __u8 data[UHID_DATA_MAX];
+       __u16 size;
+} __attribute__((__packed__));
+
+/* Obsolete! Kernel uses UHID_OUTPUT exclusively now. */
+struct uhid_output_ev_req {
+       __u16 type;
+       __u16 code;
+       __s32 value;
+} __attribute__((__packed__));
+
+/* Obsolete! Kernel uses ABI compatible UHID_GET_REPORT. */
+struct uhid_feature_req {
+       __u32 id;
+       __u8 rnum;
+       __u8 rtype;
+} __attribute__((__packed__));
+
+/* Obsolete! Use ABI compatible UHID_GET_REPORT_REPLY. */
+struct uhid_feature_answer_req {
+       __u32 id;
+       __u16 err;
+       __u16 size;
+       __u8 data[UHID_DATA_MAX];
+} __attribute__((__packed__));
+
+/*
+ * UHID Events
+ * All UHID events from and to the kernel are encoded as "struct uhid_event".
+ * The "type" field contains a UHID_* type identifier. All payload depends on
+ * that type and can be accessed via ev->u.XYZ accordingly.
+ * If user-space writes short events, they're extended with 0s by the kernel. If
+ * the kernel writes short events, user-space shall extend them with 0s.
+ */
+
+struct uhid_event {
+       __u32 type;
+
+       union {
+               struct uhid_create_req create;
+               struct uhid_input_req input;
+               struct uhid_output_req output;
+               struct uhid_output_ev_req output_ev;
+               struct uhid_feature_req feature;
+               struct uhid_get_report_req get_report;
+               struct uhid_feature_answer_req feature_answer;
+               struct uhid_get_report_reply_req get_report_reply;
+               struct uhid_create2_req create2;
+               struct uhid_input2_req input2;
+               struct uhid_set_report_req set_report;
+               struct uhid_set_report_reply_req set_report_reply;
+               struct uhid_start_req start;
+       } u;
+} __attribute__((__packed__));
+
+#endif /* __UHID_H_ */
diff --git a/lib/libdss-include/linux/uinput.h b/lib/libdss-include/linux/uinput.h
new file mode 100644 (file)
index 0000000..5eaad8a
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ *  User level driver support for input subsystem
+ *
+ * Heavily based on evdev.c by Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
+ *
+ * Changes/Revisions:
+ *     0.4     01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
+ *             - add UI_GET_SYSNAME ioctl
+ *     0.3     24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
+ *             - update ff support for the changes in kernel interface
+ *             - add UINPUT_VERSION
+ *     0.2     16/10/2004 (Micah Dowty <micah@navi.cx>)
+ *             - added force feedback support
+ *             - added UI_SET_PHYS
+ *     0.1     20/06/2002
+ *             - first public version
+ */
+#ifndef __UINPUT_H_
+#define __UINPUT_H_
+
+#include <linux/types.h>
+#include <linux/input.h>
+
+#define UINPUT_VERSION         4
+
+
+struct uinput_ff_upload {
+       __u32                   request_id;
+       __s32                   retval;
+       struct ff_effect        effect;
+       struct ff_effect        old;
+};
+
+struct uinput_ff_erase {
+       __u32                   request_id;
+       __s32                   retval;
+       __u32                   effect_id;
+};
+
+/* ioctl */
+#define UINPUT_IOCTL_BASE      'U'
+#define UI_DEV_CREATE          _IO(UINPUT_IOCTL_BASE, 1)
+#define UI_DEV_DESTROY         _IO(UINPUT_IOCTL_BASE, 2)
+
+#define UI_SET_EVBIT           _IOW(UINPUT_IOCTL_BASE, 100, int)
+#define UI_SET_KEYBIT          _IOW(UINPUT_IOCTL_BASE, 101, int)
+#define UI_SET_RELBIT          _IOW(UINPUT_IOCTL_BASE, 102, int)
+#define UI_SET_ABSBIT          _IOW(UINPUT_IOCTL_BASE, 103, int)
+#define UI_SET_MSCBIT          _IOW(UINPUT_IOCTL_BASE, 104, int)
+#define UI_SET_LEDBIT          _IOW(UINPUT_IOCTL_BASE, 105, int)
+#define UI_SET_SNDBIT          _IOW(UINPUT_IOCTL_BASE, 106, int)
+#define UI_SET_FFBIT           _IOW(UINPUT_IOCTL_BASE, 107, int)
+#define UI_SET_PHYS            _IOW(UINPUT_IOCTL_BASE, 108, char*)
+#define UI_SET_SWBIT           _IOW(UINPUT_IOCTL_BASE, 109, int)
+#define UI_SET_PROPBIT         _IOW(UINPUT_IOCTL_BASE, 110, int)
+
+#define UI_BEGIN_FF_UPLOAD     _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload)
+#define UI_END_FF_UPLOAD       _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload)
+#define UI_BEGIN_FF_ERASE      _IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase)
+#define UI_END_FF_ERASE                _IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase)
+
+/**
+ * UI_GET_SYSNAME - get the sysfs name of the created uinput device
+ *
+ * @return the sysfs name of the created virtual input device.
+ * The complete sysfs path is then /sys/devices/virtual/input/--NAME--
+ * Usually, it is in the form "inputN"
+ */
+#define UI_GET_SYSNAME(len)    _IOC(_IOC_READ, UINPUT_IOCTL_BASE, 44, len)
+
+/**
+ * UI_GET_VERSION - Return version of uinput protocol
+ *
+ * This writes uinput protocol version implemented by the kernel into
+ * the integer pointed to by the ioctl argument. The protocol version
+ * is hard-coded in the kernel and is independent of the uinput device.
+ */
+#define UI_GET_VERSION         _IOR(UINPUT_IOCTL_BASE, 45, unsigned int)
+
+/*
+ * To write a force-feedback-capable driver, the upload_effect
+ * and erase_effect callbacks in input_dev must be implemented.
+ * The uinput driver will generate a fake input event when one of
+ * these callbacks are invoked. The userspace code then uses
+ * ioctls to retrieve additional parameters and send the return code.
+ * The callback blocks until this return code is sent.
+ *
+ * The described callback mechanism is only used if ff_effects_max
+ * is set.
+ *
+ * To implement upload_effect():
+ *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_UPLOAD.
+ *      A request ID will be given in 'value'.
+ *   2. Allocate a uinput_ff_upload struct, fill in request_id with
+ *      the 'value' from the EV_UINPUT event.
+ *   3. Issue a UI_BEGIN_FF_UPLOAD ioctl, giving it the
+ *      uinput_ff_upload struct. It will be filled in with the
+ *      ff_effects passed to upload_effect().
+ *   4. Perform the effect upload, and place a return code back into
+        the uinput_ff_upload struct.
+ *   5. Issue a UI_END_FF_UPLOAD ioctl, also giving it the
+ *      uinput_ff_upload_effect struct. This will complete execution
+ *      of our upload_effect() handler.
+ *
+ * To implement erase_effect():
+ *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_ERASE.
+ *      A request ID will be given in 'value'.
+ *   2. Allocate a uinput_ff_erase struct, fill in request_id with
+ *      the 'value' from the EV_UINPUT event.
+ *   3. Issue a UI_BEGIN_FF_ERASE ioctl, giving it the
+ *      uinput_ff_erase struct. It will be filled in with the
+ *      effect ID passed to erase_effect().
+ *   4. Perform the effect erasure, and place a return code back
+ *      into the uinput_ff_erase struct.
+ *   5. Issue a UI_END_FF_ERASE ioctl, also giving it the
+ *      uinput_ff_erase_effect struct. This will complete execution
+ *      of our erase_effect() handler.
+ */
+
+/*
+ * This is the new event type, used only by uinput.
+ * 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value'
+ * is the unique request ID. This number was picked
+ * arbitrarily, above EV_MAX (since the input system
+ * never sees it) but in the range of a 16-bit int.
+ */
+#define EV_UINPUT              0x0101
+#define UI_FF_UPLOAD           1
+#define UI_FF_ERASE            2
+
+#define UINPUT_MAX_NAME_SIZE   80
+struct uinput_user_dev {
+       char name[UINPUT_MAX_NAME_SIZE];
+       struct input_id id;
+       __u32 ff_effects_max;
+       __s32 absmax[ABS_CNT];
+       __s32 absmin[ABS_CNT];
+       __s32 absfuzz[ABS_CNT];
+       __s32 absflat[ABS_CNT];
+};
+#endif /* __UINPUT_H_ */
diff --git a/lib/libdss-include/linux/uio.h b/lib/libdss-include/linux/uio.h
new file mode 100644 (file)
index 0000000..d0978de
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ *     Berkeley style UIO structures   -       Alan Cox 1994.
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef __LINUX_UIO_H
+#define __LINUX_UIO_H
+
+
+#include <linux/types.h>
+
+
+struct iovec
+{
+       void *iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
+       __kernel_size_t iov_len; /* Must be size_t (1003.1g) */
+};
+
+/*
+ *     UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1)
+ */
+#define UIO_FASTIOV    8
+#define UIO_MAXIOV     1024
+
+
+#endif /* __LINUX_UIO_H */
diff --git a/lib/libdss-include/linux/ultrasound.h b/lib/libdss-include/linux/ultrasound.h
new file mode 100644 (file)
index 0000000..71339dc
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef _ULTRASOUND_H_
+#define _ULTRASOUND_H_
+/*
+ *     ultrasound.h - Macros for programming the Gravis Ultrasound
+ *                     These macros are extremely device dependent
+ *                     and not portable.
+ */
+/*
+ * Copyright (C) by Hannu Savolainen 1993-1997
+ *
+ * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
+ * Version 2 (June 1991). See the "COPYING" file distributed with this software
+ * for more info.
+ */
+
+
+/*
+ *     Private events for Gravis Ultrasound (GUS)
+ *
+ *     Format:
+ *             byte 0          - SEQ_PRIVATE (0xfe)
+ *             byte 1          - Synthesizer device number (0-N)
+ *             byte 2          - Command (see below)
+ *             byte 3          - Voice number (0-31)
+ *             bytes 4 and 5   - parameter P1 (unsigned short)
+ *             bytes 6 and 7   - parameter P2 (unsigned short)
+ *
+ *     Commands:
+ *             Each command affects one voice defined in byte 3.
+ *             Unused parameters (P1 and/or P2 *MUST* be initialized to zero).
+ *             _GUS_NUMVOICES  - Sets max. number of concurrent voices (P1=14-31, default 16)
+ *             _GUS_VOICESAMPLE- ************ OBSOLETE *************
+ *             _GUS_VOICEON    - Starts voice (P1=voice mode)
+ *             _GUS_VOICEOFF   - Stops voice (no parameters)
+ *             _GUS_VOICEFADE  - Stops the voice smoothly.
+ *             _GUS_VOICEMODE  - Alters the voice mode, don't start or stop voice (P1=voice mode)
+ *             _GUS_VOICEBALA  - Sets voice balance (P1, 0=left, 7=middle and 15=right, default 7)
+ *             _GUS_VOICEFREQ  - Sets voice (sample) playback frequency (P1=Hz)
+ *             _GUS_VOICEVOL   - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off)
+ *             _GUS_VOICEVOL2  - Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off)
+ *                               (Like GUS_VOICEVOL but doesn't change the hw
+ *                               volume. It just updates volume in the voice table).
+ *
+ *             _GUS_RAMPRANGE  - Sets limits for volume ramping (P1=low volume, P2=high volume)
+ *             _GUS_RAMPRATE   - Sets the speed for volume ramping (P1=scale, P2=rate)
+ *             _GUS_RAMPMODE   - Sets the volume ramping mode (P1=ramping mode)
+ *             _GUS_RAMPON     - Starts volume ramping (no parameters)
+ *             _GUS_RAMPOFF    - Stops volume ramping (no parameters)
+ *             _GUS_VOLUME_SCALE - Changes the volume calculation constants
+ *                               for all voices.
+ */
+
+#define _GUS_NUMVOICES         0x00
+#define _GUS_VOICESAMPLE       0x01    /* OBSOLETE */
+#define _GUS_VOICEON           0x02
+#define _GUS_VOICEOFF          0x03
+#define _GUS_VOICEMODE         0x04
+#define _GUS_VOICEBALA         0x05
+#define _GUS_VOICEFREQ         0x06
+#define _GUS_VOICEVOL          0x07
+#define _GUS_RAMPRANGE         0x08
+#define _GUS_RAMPRATE          0x09
+#define _GUS_RAMPMODE          0x0a
+#define _GUS_RAMPON            0x0b
+#define _GUS_RAMPOFF           0x0c
+#define _GUS_VOICEFADE         0x0d
+#define _GUS_VOLUME_SCALE      0x0e
+#define _GUS_VOICEVOL2         0x0f
+#define _GUS_VOICE_POS         0x10
+
+/*
+ *     GUS API macros
+ */
+
+#define _GUS_CMD(chn, voice, cmd, p1, p2) \
+                                       {_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = SEQ_PRIVATE;\
+                                       _seqbuf[_seqbufptr+1] = (chn); _seqbuf[_seqbufptr+2] = cmd;\
+                                       _seqbuf[_seqbufptr+3] = voice;\
+                                       *(unsigned short*)&_seqbuf[_seqbufptr+4] = p1;\
+                                       *(unsigned short*)&_seqbuf[_seqbufptr+6] = p2;\
+                                       _SEQ_ADVBUF(8);}
+
+#define GUS_NUMVOICES(chn, p1)                 _GUS_CMD(chn, 0, _GUS_NUMVOICES, (p1), 0)
+#define GUS_VOICESAMPLE(chn, voice, p1)                _GUS_CMD(chn, voice, _GUS_VOICESAMPLE, (p1), 0) /* OBSOLETE */
+#define GUS_VOICEON(chn, voice, p1)            _GUS_CMD(chn, voice, _GUS_VOICEON, (p1), 0)
+#define GUS_VOICEOFF(chn, voice)               _GUS_CMD(chn, voice, _GUS_VOICEOFF, 0, 0)
+#define GUS_VOICEFADE(chn, voice)              _GUS_CMD(chn, voice, _GUS_VOICEFADE, 0, 0)
+#define GUS_VOICEMODE(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEMODE, (p1), 0)
+#define GUS_VOICEBALA(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEBALA, (p1), 0)
+#define GUS_VOICEFREQ(chn, voice, p)           _GUS_CMD(chn, voice, _GUS_VOICEFREQ, \
+                                                       (p) & 0xffff, ((p) >> 16) & 0xffff)
+#define GUS_VOICEVOL(chn, voice, p1)           _GUS_CMD(chn, voice, _GUS_VOICEVOL, (p1), 0)
+#define GUS_VOICEVOL2(chn, voice, p1)          _GUS_CMD(chn, voice, _GUS_VOICEVOL2, (p1), 0)
+#define GUS_RAMPRANGE(chn, voice, low, high)   _GUS_CMD(chn, voice, _GUS_RAMPRANGE, (low), (high))
+#define GUS_RAMPRATE(chn, voice, p1, p2)       _GUS_CMD(chn, voice, _GUS_RAMPRATE, (p1), (p2))
+#define GUS_RAMPMODE(chn, voice, p1)           _GUS_CMD(chn, voice, _GUS_RAMPMODE, (p1), 0)
+#define GUS_RAMPON(chn, voice, p1)             _GUS_CMD(chn, voice, _GUS_RAMPON, (p1), 0)
+#define GUS_RAMPOFF(chn, voice)                        _GUS_CMD(chn, voice, _GUS_RAMPOFF, 0, 0)
+#define GUS_VOLUME_SCALE(chn, voice, p1, p2)   _GUS_CMD(chn, voice, _GUS_VOLUME_SCALE, (p1), (p2))
+#define GUS_VOICE_POS(chn, voice, p)           _GUS_CMD(chn, voice, _GUS_VOICE_POS, \
+                                                       (p) & 0xffff, ((p) >> 16) & 0xffff)
+
+#endif
diff --git a/lib/libdss-include/linux/un.h b/lib/libdss-include/linux/un.h
new file mode 100644 (file)
index 0000000..3ed3e46
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _LINUX_UN_H
+#define _LINUX_UN_H
+
+#include <linux/socket.h>
+
+#define UNIX_PATH_MAX  108
+
+struct sockaddr_un {
+       __kernel_sa_family_t sun_family; /* AF_UNIX */
+       char sun_path[UNIX_PATH_MAX];   /* pathname */
+};
+
+#endif /* _LINUX_UN_H */
diff --git a/lib/libdss-include/linux/unistd.h b/lib/libdss-include/linux/unistd.h
new file mode 100644 (file)
index 0000000..aa8d5b5
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef _LINUX_UNISTD_H_
+#define _LINUX_UNISTD_H_
+
+/*
+ * Include machine specific syscall numbers
+ */
+#include <asm/unistd.h>
+
+#endif /* _LINUX_UNISTD_H_ */
diff --git a/lib/libdss-include/linux/unix_diag.h b/lib/libdss-include/linux/unix_diag.h
new file mode 100644 (file)
index 0000000..1eb0b8d
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef __UNIX_DIAG_H__
+#define __UNIX_DIAG_H__
+
+#include <linux/types.h>
+
+struct unix_diag_req {
+       __u8    sdiag_family;
+       __u8    sdiag_protocol;
+       __u16   pad;
+       __u32   udiag_states;
+       __u32   udiag_ino;
+       __u32   udiag_show;
+       __u32   udiag_cookie[2];
+};
+
+#define UDIAG_SHOW_NAME                0x00000001      /* show name (not path) */
+#define UDIAG_SHOW_VFS         0x00000002      /* show VFS inode info */
+#define UDIAG_SHOW_PEER                0x00000004      /* show peer socket info */
+#define UDIAG_SHOW_ICONS       0x00000008      /* show pending connections */
+#define UDIAG_SHOW_RQLEN       0x00000010      /* show skb receive queue len */
+#define UDIAG_SHOW_MEMINFO     0x00000020      /* show memory info of a socket */
+
+struct unix_diag_msg {
+       __u8    udiag_family;
+       __u8    udiag_type;
+       __u8    udiag_state;
+       __u8    pad;
+
+       __u32   udiag_ino;
+       __u32   udiag_cookie[2];
+};
+
+enum {
+       /* UNIX_DIAG_NONE, standard nl API requires this attribute!  */
+       UNIX_DIAG_NAME,
+       UNIX_DIAG_VFS,
+       UNIX_DIAG_PEER,
+       UNIX_DIAG_ICONS,
+       UNIX_DIAG_RQLEN,
+       UNIX_DIAG_MEMINFO,
+       UNIX_DIAG_SHUTDOWN,
+
+       __UNIX_DIAG_MAX,
+};
+
+#define UNIX_DIAG_MAX (__UNIX_DIAG_MAX - 1)
+
+struct unix_diag_vfs {
+       __u32   udiag_vfs_ino;
+       __u32   udiag_vfs_dev;
+};
+
+struct unix_diag_rqlen {
+       __u32   udiag_rqueue;
+       __u32   udiag_wqueue;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/usb/audio.h b/lib/libdss-include/linux/usb/audio.h
new file mode 100644 (file)
index 0000000..210f2f5
--- /dev/null
@@ -0,0 +1,547 @@
+/*
+ * <linux/usb/audio.h> -- USB Audio definitions.
+ *
+ * Copyright (C) 2006 Thumtronics Pty Ltd.
+ * Developed for Thumtronics by Grey Innovation
+ * Ben Williamson <ben.williamson@greyinnovation.com>
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License ("GPL") version 2, as published by the Free Software Foundation.
+ *
+ * This file holds USB constants and structures defined
+ * by the USB Device Class Definition for Audio Devices.
+ * Comments below reference relevant sections of that document:
+ *
+ * http://www.usb.org/developers/devclass_docs/audio10.pdf
+ *
+ * Types and defines in this file are either specific to version 1.0 of
+ * this standard or common for newer versions.
+ */
+
+#ifndef __LINUX_USB_AUDIO_H
+#define __LINUX_USB_AUDIO_H
+
+#include <linux/types.h>
+
+/* bInterfaceProtocol values to denote the version of the standard used */
+#define UAC_VERSION_1                  0x00
+#define UAC_VERSION_2                  0x20
+
+/* A.2 Audio Interface Subclass Codes */
+#define USB_SUBCLASS_AUDIOCONTROL      0x01
+#define USB_SUBCLASS_AUDIOSTREAMING    0x02
+#define USB_SUBCLASS_MIDISTREAMING     0x03
+
+/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */
+#define UAC_HEADER                     0x01
+#define UAC_INPUT_TERMINAL             0x02
+#define UAC_OUTPUT_TERMINAL            0x03
+#define UAC_MIXER_UNIT                 0x04
+#define UAC_SELECTOR_UNIT              0x05
+#define UAC_FEATURE_UNIT               0x06
+#define UAC1_PROCESSING_UNIT           0x07
+#define UAC1_EXTENSION_UNIT            0x08
+
+/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */
+#define UAC_AS_GENERAL                 0x01
+#define UAC_FORMAT_TYPE                        0x02
+#define UAC_FORMAT_SPECIFIC            0x03
+
+/* A.7 Processing Unit Process Types */
+#define UAC_PROCESS_UNDEFINED          0x00
+#define UAC_PROCESS_UP_DOWNMIX         0x01
+#define UAC_PROCESS_DOLBY_PROLOGIC     0x02
+#define UAC_PROCESS_STEREO_EXTENDER    0x03
+#define UAC_PROCESS_REVERB             0x04
+#define UAC_PROCESS_CHORUS             0x05
+#define UAC_PROCESS_DYN_RANGE_COMP     0x06
+
+/* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */
+#define UAC_EP_GENERAL                 0x01
+
+/* A.9 Audio Class-Specific Request Codes */
+#define UAC_SET_                       0x00
+#define UAC_GET_                       0x80
+
+#define UAC__CUR                       0x1
+#define UAC__MIN                       0x2
+#define UAC__MAX                       0x3
+#define UAC__RES                       0x4
+#define UAC__MEM                       0x5
+
+#define UAC_SET_CUR                    (UAC_SET_ | UAC__CUR)
+#define UAC_GET_CUR                    (UAC_GET_ | UAC__CUR)
+#define UAC_SET_MIN                    (UAC_SET_ | UAC__MIN)
+#define UAC_GET_MIN                    (UAC_GET_ | UAC__MIN)
+#define UAC_SET_MAX                    (UAC_SET_ | UAC__MAX)
+#define UAC_GET_MAX                    (UAC_GET_ | UAC__MAX)
+#define UAC_SET_RES                    (UAC_SET_ | UAC__RES)
+#define UAC_GET_RES                    (UAC_GET_ | UAC__RES)
+#define UAC_SET_MEM                    (UAC_SET_ | UAC__MEM)
+#define UAC_GET_MEM                    (UAC_GET_ | UAC__MEM)
+
+#define UAC_GET_STAT                   0xff
+
+/* A.10 Control Selector Codes */
+
+/* A.10.1 Terminal Control Selectors */
+#define UAC_TERM_COPY_PROTECT          0x01
+
+/* A.10.2 Feature Unit Control Selectors */
+#define UAC_FU_MUTE                    0x01
+#define UAC_FU_VOLUME                  0x02
+#define UAC_FU_BASS                    0x03
+#define UAC_FU_MID                     0x04
+#define UAC_FU_TREBLE                  0x05
+#define UAC_FU_GRAPHIC_EQUALIZER       0x06
+#define UAC_FU_AUTOMATIC_GAIN          0x07
+#define UAC_FU_DELAY                   0x08
+#define UAC_FU_BASS_BOOST              0x09
+#define UAC_FU_LOUDNESS                        0x0a
+
+#define UAC_CONTROL_BIT(CS)    (1 << ((CS) - 1))
+
+/* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */
+#define UAC_UD_ENABLE                  0x01
+#define UAC_UD_MODE_SELECT             0x02
+
+/* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */
+#define UAC_DP_ENABLE                  0x01
+#define UAC_DP_MODE_SELECT             0x02
+
+/* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */
+#define UAC_3D_ENABLE                  0x01
+#define UAC_3D_SPACE                   0x02
+
+/* A.10.3.4 Reverberation Processing Unit Control Selectors */
+#define UAC_REVERB_ENABLE              0x01
+#define UAC_REVERB_LEVEL               0x02
+#define UAC_REVERB_TIME                        0x03
+#define UAC_REVERB_FEEDBACK            0x04
+
+/* A.10.3.5 Chorus Processing Unit Control Selectors */
+#define UAC_CHORUS_ENABLE              0x01
+#define UAC_CHORUS_LEVEL               0x02
+#define UAC_CHORUS_RATE                        0x03
+#define UAC_CHORUS_DEPTH               0x04
+
+/* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */
+#define UAC_DCR_ENABLE                 0x01
+#define UAC_DCR_RATE                   0x02
+#define UAC_DCR_MAXAMPL                        0x03
+#define UAC_DCR_THRESHOLD              0x04
+#define UAC_DCR_ATTACK_TIME            0x05
+#define UAC_DCR_RELEASE_TIME           0x06
+
+/* A.10.4 Extension Unit Control Selectors */
+#define UAC_XU_ENABLE                  0x01
+
+/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */
+#define UAC_MS_HEADER                  0x01
+#define UAC_MIDI_IN_JACK               0x02
+#define UAC_MIDI_OUT_JACK              0x03
+
+/* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */
+#define UAC_MS_GENERAL                 0x01
+
+/* Terminals - 2.1 USB Terminal Types */
+#define UAC_TERMINAL_UNDEFINED         0x100
+#define UAC_TERMINAL_STREAMING         0x101
+#define UAC_TERMINAL_VENDOR_SPEC       0x1FF
+
+/* Terminal Control Selectors */
+/* 4.3.2  Class-Specific AC Interface Descriptor */
+struct uac1_ac_header_descriptor {
+       __u8  bLength;                  /* 8 + n */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* UAC_MS_HEADER */
+       __le16 bcdADC;                  /* 0x0100 */
+       __le16 wTotalLength;            /* includes Unit and Terminal desc. */
+       __u8  bInCollection;            /* n */
+       __u8  baInterfaceNr[];          /* [n] */
+} __attribute__ ((packed));
+
+#define UAC_DT_AC_HEADER_SIZE(n)       (8 + (n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n)                    \
+struct uac1_ac_header_descriptor_##n {                 \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __le16 bcdADC;                                          \
+       __le16 wTotalLength;                                    \
+       __u8  bInCollection;                                    \
+       __u8  baInterfaceNr[n];                                 \
+} __attribute__ ((packed))
+
+/* 4.3.2.1 Input Terminal Descriptor */
+struct uac_input_terminal_descriptor {
+       __u8  bLength;                  /* in bytes: 12 */
+       __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
+       __u8  bDescriptorSubtype;       /* INPUT_TERMINAL descriptor subtype */
+       __u8  bTerminalID;              /* Constant uniquely terminal ID */
+       __le16 wTerminalType;           /* USB Audio Terminal Types */
+       __u8  bAssocTerminal;           /* ID of the Output Terminal associated */
+       __u8  bNrChannels;              /* Number of logical output channels */
+       __le16 wChannelConfig;
+       __u8  iChannelNames;
+       __u8  iTerminal;
+} __attribute__ ((packed));
+
+#define UAC_DT_INPUT_TERMINAL_SIZE                     12
+
+/* Terminals - 2.2 Input Terminal Types */
+#define UAC_INPUT_TERMINAL_UNDEFINED                   0x200
+#define UAC_INPUT_TERMINAL_MICROPHONE                  0x201
+#define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE          0x202
+#define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE         0x203
+#define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE         0x204
+#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY            0x205
+#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY       0x206
+
+/* Terminals - control selectors */
+
+#define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL           0x01
+
+/* 4.3.2.2 Output Terminal Descriptor */
+struct uac1_output_terminal_descriptor {
+       __u8  bLength;                  /* in bytes: 9 */
+       __u8  bDescriptorType;          /* CS_INTERFACE descriptor type */
+       __u8  bDescriptorSubtype;       /* OUTPUT_TERMINAL descriptor subtype */
+       __u8  bTerminalID;              /* Constant uniquely terminal ID */
+       __le16 wTerminalType;           /* USB Audio Terminal Types */
+       __u8  bAssocTerminal;           /* ID of the Input Terminal associated */
+       __u8  bSourceID;                /* ID of the connected Unit or Terminal*/
+       __u8  iTerminal;
+} __attribute__ ((packed));
+
+#define UAC_DT_OUTPUT_TERMINAL_SIZE                    9
+
+/* Terminals - 2.3 Output Terminal Types */
+#define UAC_OUTPUT_TERMINAL_UNDEFINED                  0x300
+#define UAC_OUTPUT_TERMINAL_SPEAKER                    0x301
+#define UAC_OUTPUT_TERMINAL_HEADPHONES                 0x302
+#define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303
+#define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER            0x304
+#define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER               0x305
+#define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER      0x306
+#define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER   0x307
+
+/* Set bControlSize = 2 as default setting */
+#define UAC_DT_FEATURE_UNIT_SIZE(ch)           (7 + ((ch) + 1) * 2)
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch)                        \
+struct uac_feature_unit_descriptor_##ch {                      \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bUnitID;                                          \
+       __u8  bSourceID;                                        \
+       __u8  bControlSize;                                     \
+       __le16 bmaControls[ch + 1];                             \
+       __u8  iFeature;                                         \
+} __attribute__ ((packed))
+
+/* 4.3.2.3 Mixer Unit Descriptor */
+struct uac_mixer_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc)
+{
+       return desc->baSourceID[desc->bNrInPins];
+}
+
+static __inline__ __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc,
+                                                 int protocol)
+{
+       if (protocol == UAC_VERSION_1)
+               return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
+                       desc->baSourceID[desc->bNrInPins + 1];
+       else
+               return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
+                       (desc->baSourceID[desc->bNrInPins + 3] << 16) |
+                       (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
+                       (desc->baSourceID[desc->bNrInPins + 1]);
+}
+
+static __inline__ __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc,
+                                               int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 3] :
+               desc->baSourceID[desc->bNrInPins + 5];
+}
+
+static __inline__ __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc,
+                                             int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               &desc->baSourceID[desc->bNrInPins + 4] :
+               &desc->baSourceID[desc->bNrInPins + 6];
+}
+
+static __inline__ __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.4 Selector Unit Descriptor */
+struct uac_selector_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUintID;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.5 Feature Unit Descriptor */
+struct uac_feature_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u8 bSourceID;
+       __u8 bControlSize;
+       __u8 bmaControls[0]; /* variable length */
+} __attribute__((packed));
+
+static __inline__ __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc)
+{
+       __u8 *raw = (__u8 *) desc;
+       return raw[desc->bLength - 1];
+}
+
+/* 4.3.2.6 Processing Unit Descriptors */
+struct uac_processing_unit_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bUnitID;
+       __u16 wProcessType;
+       __u8 bNrInPins;
+       __u8 baSourceID[];
+} __attribute__ ((packed));
+
+static __inline__ __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc)
+{
+       return desc->baSourceID[desc->bNrInPins];
+}
+
+static __inline__ __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc,
+                                                      int protocol)
+{
+       if (protocol == UAC_VERSION_1)
+               return (desc->baSourceID[desc->bNrInPins + 2] << 8) |
+                       desc->baSourceID[desc->bNrInPins + 1];
+       else
+               return  (desc->baSourceID[desc->bNrInPins + 4] << 24) |
+                       (desc->baSourceID[desc->bNrInPins + 3] << 16) |
+                       (desc->baSourceID[desc->bNrInPins + 2] << 8)  |
+                       (desc->baSourceID[desc->bNrInPins + 1]);
+}
+
+static __inline__ __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc,
+                                                    int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 3] :
+               desc->baSourceID[desc->bNrInPins + 5];
+}
+
+static __inline__ __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc,
+                                                   int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               desc->baSourceID[desc->bNrInPins + 4] :
+               desc->baSourceID[desc->bNrInPins + 6];
+}
+
+static __inline__ __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc,
+                                                  int protocol)
+{
+       return (protocol == UAC_VERSION_1) ?
+               &desc->baSourceID[desc->bNrInPins + 5] :
+               &desc->baSourceID[desc->bNrInPins + 7];
+}
+
+static __inline__ __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc,
+                                                  int protocol)
+{
+       __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
+       return *(uac_processing_unit_bmControls(desc, protocol)
+                       + control_size);
+}
+
+static __inline__ __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc,
+                                                int protocol)
+{
+       __u8 control_size = uac_processing_unit_bControlSize(desc, protocol);
+       return uac_processing_unit_bmControls(desc, protocol)
+                       + control_size + 1;
+}
+
+/* 4.5.2 Class-Specific AS Interface Descriptor */
+struct uac1_as_header_descriptor {
+       __u8  bLength;                  /* in bytes: 7 */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* AS_GENERAL */
+       __u8  bTerminalLink;            /* Terminal ID of connected Terminal */
+       __u8  bDelay;                   /* Delay introduced by the data path */
+       __le16 wFormatTag;              /* The Audio Data Format */
+} __attribute__ ((packed));
+
+#define UAC_DT_AS_HEADER_SIZE          7
+
+/* Formats - A.1.1 Audio Data Format Type I Codes */
+#define UAC_FORMAT_TYPE_I_UNDEFINED    0x0
+#define UAC_FORMAT_TYPE_I_PCM          0x1
+#define UAC_FORMAT_TYPE_I_PCM8         0x2
+#define UAC_FORMAT_TYPE_I_IEEE_FLOAT   0x3
+#define UAC_FORMAT_TYPE_I_ALAW         0x4
+#define UAC_FORMAT_TYPE_I_MULAW                0x5
+
+struct uac_format_type_i_continuous_descriptor {
+       __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
+       __u8  bFormatType;              /* FORMAT_TYPE_1 */
+       __u8  bNrChannels;              /* physical channels in the stream */
+       __u8  bSubframeSize;            /* */
+       __u8  bBitResolution;
+       __u8  bSamFreqType;
+       __u8  tLowerSamFreq[3];
+       __u8  tUpperSamFreq[3];
+} __attribute__ ((packed));
+
+#define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14
+
+struct uac_format_type_i_discrete_descriptor {
+       __u8  bLength;                  /* in bytes: 8 + (ns * 3) */
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* FORMAT_TYPE */
+       __u8  bFormatType;              /* FORMAT_TYPE_1 */
+       __u8  bNrChannels;              /* physical channels in the stream */
+       __u8  bSubframeSize;            /* */
+       __u8  bBitResolution;
+       __u8  bSamFreqType;
+       __u8  tSamFreq[][3];
+} __attribute__ ((packed));
+
+#define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n)             \
+struct uac_format_type_i_discrete_descriptor_##n {             \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bFormatType;                                      \
+       __u8  bNrChannels;                                      \
+       __u8  bSubframeSize;                                    \
+       __u8  bBitResolution;                                   \
+       __u8  bSamFreqType;                                     \
+       __u8  tSamFreq[n][3];                                   \
+} __attribute__ ((packed))
+
+#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n)        (8 + (n * 3))
+
+struct uac_format_type_i_ext_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __u8 bSubslotSize;
+       __u8 bBitResolution;
+       __u8 bHeaderLength;
+       __u8 bControlSize;
+       __u8 bSideBandProtocol;
+} __attribute__((packed));
+
+/* Formats - Audio Data Format Type I Codes */
+
+#define UAC_FORMAT_TYPE_II_MPEG        0x1001
+#define UAC_FORMAT_TYPE_II_AC3 0x1002
+
+struct uac_format_type_ii_discrete_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __le16 wMaxBitRate;
+       __le16 wSamplesPerFrame;
+       __u8 bSamFreqType;
+       __u8 tSamFreq[][3];
+} __attribute__((packed));
+
+struct uac_format_type_ii_ext_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDescriptorSubtype;
+       __u8 bFormatType;
+       __u16 wMaxBitRate;
+       __u16 wSamplesPerFrame;
+       __u8 bHeaderLength;
+       __u8 bSideBandProtocol;
+} __attribute__((packed));
+
+/* type III */
+#define UAC_FORMAT_TYPE_III_IEC1937_AC3        0x2001
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1       0x2002
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT        0x2003
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT  0x2004
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS    0x2005
+#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS   0x2006
+
+/* Formats - A.2 Format Type Codes */
+#define UAC_FORMAT_TYPE_UNDEFINED      0x0
+#define UAC_FORMAT_TYPE_I              0x1
+#define UAC_FORMAT_TYPE_II             0x2
+#define UAC_FORMAT_TYPE_III            0x3
+#define UAC_EXT_FORMAT_TYPE_I          0x81
+#define UAC_EXT_FORMAT_TYPE_II         0x82
+#define UAC_EXT_FORMAT_TYPE_III                0x83
+
+struct uac_iso_endpoint_descriptor {
+       __u8  bLength;                  /* in bytes: 7 */
+       __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
+       __u8  bDescriptorSubtype;       /* EP_GENERAL */
+       __u8  bmAttributes;
+       __u8  bLockDelayUnits;
+       __le16 wLockDelay;
+} __attribute__((packed));
+#define UAC_ISO_ENDPOINT_DESC_SIZE     7
+
+#define UAC_EP_CS_ATTR_SAMPLE_RATE     0x01
+#define UAC_EP_CS_ATTR_PITCH_CONTROL   0x02
+#define UAC_EP_CS_ATTR_FILL_MAX                0x80
+
+/* status word format (3.7.1.1) */
+
+#define UAC1_STATUS_TYPE_ORIG_MASK             0x0f
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF 0x0
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF  0x1
+#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP  0x2
+
+#define UAC1_STATUS_TYPE_IRQ_PENDING           (1 << 7)
+#define UAC1_STATUS_TYPE_MEM_CHANGED           (1 << 6)
+
+struct uac1_status_word {
+       __u8 bStatusType;
+       __u8 bOriginator;
+} __attribute__((packed));
+
+
+#endif /* __LINUX_USB_AUDIO_H */
diff --git a/lib/libdss-include/linux/usb/cdc-wdm.h b/lib/libdss-include/linux/usb/cdc-wdm.h
new file mode 100644 (file)
index 0000000..a794493
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * USB CDC Device Management userspace API definitions
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_USB_CDC_WDM_H
+#define __LINUX_USB_CDC_WDM_H
+
+#include <linux/types.h>
+
+/*
+ * This IOCTL is used to retrieve the wMaxCommand for the device,
+ * defining the message limit for both reading and writing.
+ *
+ * For CDC WDM functions this will be the wMaxCommand field of the
+ * Device Management Functional Descriptor.
+ */
+#define IOCTL_WDM_MAX_COMMAND _IOR('H', 0xA0, __u16)
+
+#endif /* __LINUX_USB_CDC_WDM_H */
diff --git a/lib/libdss-include/linux/usb/cdc.h b/lib/libdss-include/linux/usb/cdc.h
new file mode 100644 (file)
index 0000000..e2bc417
--- /dev/null
@@ -0,0 +1,447 @@
+/*
+ * USB Communications Device Class (CDC) definitions
+ *
+ * CDC says how to talk to lots of different types of network adapters,
+ * notably ethernet adapters and various modems.  It's used mostly with
+ * firmware based USB peripherals.
+ */
+
+#ifndef __UAPI_LINUX_USB_CDC_H
+#define __UAPI_LINUX_USB_CDC_H
+
+#include <linux/types.h>
+
+#define USB_CDC_SUBCLASS_ACM                   0x02
+#define USB_CDC_SUBCLASS_ETHERNET              0x06
+#define USB_CDC_SUBCLASS_WHCM                  0x08
+#define USB_CDC_SUBCLASS_DMM                   0x09
+#define USB_CDC_SUBCLASS_MDLM                  0x0a
+#define USB_CDC_SUBCLASS_OBEX                  0x0b
+#define USB_CDC_SUBCLASS_EEM                   0x0c
+#define USB_CDC_SUBCLASS_NCM                   0x0d
+#define USB_CDC_SUBCLASS_MBIM                  0x0e
+
+#define USB_CDC_PROTO_NONE                     0
+
+#define USB_CDC_ACM_PROTO_AT_V25TER            1
+#define USB_CDC_ACM_PROTO_AT_PCCA101           2
+#define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE      3
+#define USB_CDC_ACM_PROTO_AT_GSM               4
+#define USB_CDC_ACM_PROTO_AT_3G                        5
+#define USB_CDC_ACM_PROTO_AT_CDMA              6
+#define USB_CDC_ACM_PROTO_VENDOR               0xff
+
+#define USB_CDC_PROTO_EEM                      7
+
+#define USB_CDC_NCM_PROTO_NTB                  1
+#define USB_CDC_MBIM_PROTO_NTB                 2
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific descriptors ... there are a couple dozen of them
+ */
+
+#define USB_CDC_HEADER_TYPE            0x00    /* header_desc */
+#define USB_CDC_CALL_MANAGEMENT_TYPE   0x01    /* call_mgmt_descriptor */
+#define USB_CDC_ACM_TYPE               0x02    /* acm_descriptor */
+#define USB_CDC_UNION_TYPE             0x06    /* union_desc */
+#define USB_CDC_COUNTRY_TYPE           0x07
+#define USB_CDC_NETWORK_TERMINAL_TYPE  0x0a    /* network_terminal_desc */
+#define USB_CDC_ETHERNET_TYPE          0x0f    /* ether_desc */
+#define USB_CDC_WHCM_TYPE              0x11
+#define USB_CDC_MDLM_TYPE              0x12    /* mdlm_desc */
+#define USB_CDC_MDLM_DETAIL_TYPE       0x13    /* mdlm_detail_desc */
+#define USB_CDC_DMM_TYPE               0x14
+#define USB_CDC_OBEX_TYPE              0x15
+#define USB_CDC_NCM_TYPE               0x1a
+#define USB_CDC_MBIM_TYPE              0x1b
+#define USB_CDC_MBIM_EXTENDED_TYPE     0x1c
+
+/* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
+struct usb_cdc_header_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdCDC;
+} __attribute__ ((packed));
+
+/* "Call Management Descriptor" from CDC spec  5.2.3.2 */
+struct usb_cdc_call_mgmt_descriptor {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bmCapabilities;
+#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT                0x01
+#define USB_CDC_CALL_MGMT_CAP_DATA_INTF                0x02
+
+       __u8    bDataInterface;
+} __attribute__ ((packed));
+
+/* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
+struct usb_cdc_acm_descriptor {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bmCapabilities;
+} __attribute__ ((packed));
+
+/* capabilities from 5.2.3.3 */
+
+#define USB_CDC_COMM_FEATURE   0x01
+#define USB_CDC_CAP_LINE       0x02
+#define USB_CDC_CAP_BRK                0x04
+#define USB_CDC_CAP_NOTIFY     0x08
+
+/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
+struct usb_cdc_union_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bMasterInterface0;
+       __u8    bSlaveInterface0;
+       /* ... and there could be other slave interfaces */
+} __attribute__ ((packed));
+
+/* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
+struct usb_cdc_country_functional_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    iCountryCodeRelDate;
+       __le16  wCountyCode0;
+       /* ... and there can be a lot of country codes */
+} __attribute__ ((packed));
+
+/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
+struct usb_cdc_network_terminal_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    bEntityId;
+       __u8    iName;
+       __u8    bChannelIndex;
+       __u8    bPhysicalInterface;
+} __attribute__ ((packed));
+
+/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
+struct usb_cdc_ether_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __u8    iMACAddress;
+       __le32  bmEthernetStatistics;
+       __le16  wMaxSegmentSize;
+       __le16  wNumberMCFilters;
+       __u8    bNumberPowerFilters;
+} __attribute__ ((packed));
+
+/* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
+struct usb_cdc_dmm_desc {
+       __u8    bFunctionLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubtype;
+       __u16   bcdVersion;
+       __le16  wMaxCommand;
+} __attribute__ ((packed));
+
+/* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
+struct usb_cdc_mdlm_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdVersion;
+       __u8    bGUID[16];
+} __attribute__ ((packed));
+
+/* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
+struct usb_cdc_mdlm_detail_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       /* type is associated with mdlm_desc.bGUID */
+       __u8    bGuidDescriptorType;
+       __u8    bDetailData[0];
+} __attribute__ ((packed));
+
+/* "OBEX Control Model Functional Descriptor" */
+struct usb_cdc_obex_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdVersion;
+} __attribute__ ((packed));
+
+/* "NCM Control Model Functional Descriptor" */
+struct usb_cdc_ncm_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdNcmVersion;
+       __u8    bmNetworkCapabilities;
+} __attribute__ ((packed));
+
+/* "MBIM Control Model Functional Descriptor" */
+struct usb_cdc_mbim_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdMBIMVersion;
+       __le16  wMaxControlMessage;
+       __u8    bNumberFilters;
+       __u8    bMaxFilterSize;
+       __le16  wMaxSegmentSize;
+       __u8    bmNetworkCapabilities;
+} __attribute__ ((packed));
+
+/* "MBIM Extended Functional Descriptor" from CDC MBIM spec 1.0 errata-1 */
+struct usb_cdc_mbim_extended_desc {
+       __u8    bLength;
+       __u8    bDescriptorType;
+       __u8    bDescriptorSubType;
+
+       __le16  bcdMBIMExtendedVersion;
+       __u8    bMaxOutstandingCommandMessages;
+       __le16  wMTU;
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific Control Requests (6.2)
+ *
+ * section 3.6.2.1 table 4 has the ACM profile, for modems.
+ * section 3.8.2 table 10 has the ethernet profile.
+ *
+ * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
+ * heavily dependent on the encapsulated (proprietary) command mechanism.
+ */
+
+#define USB_CDC_SEND_ENCAPSULATED_COMMAND      0x00
+#define USB_CDC_GET_ENCAPSULATED_RESPONSE      0x01
+#define USB_CDC_REQ_SET_LINE_CODING            0x20
+#define USB_CDC_REQ_GET_LINE_CODING            0x21
+#define USB_CDC_REQ_SET_CONTROL_LINE_STATE     0x22
+#define USB_CDC_REQ_SEND_BREAK                 0x23
+#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40
+#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41
+#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42
+#define USB_CDC_SET_ETHERNET_PACKET_FILTER     0x43
+#define USB_CDC_GET_ETHERNET_STATISTIC         0x44
+#define USB_CDC_GET_NTB_PARAMETERS             0x80
+#define USB_CDC_GET_NET_ADDRESS                        0x81
+#define USB_CDC_SET_NET_ADDRESS                        0x82
+#define USB_CDC_GET_NTB_FORMAT                 0x83
+#define USB_CDC_SET_NTB_FORMAT                 0x84
+#define USB_CDC_GET_NTB_INPUT_SIZE             0x85
+#define USB_CDC_SET_NTB_INPUT_SIZE             0x86
+#define USB_CDC_GET_MAX_DATAGRAM_SIZE          0x87
+#define USB_CDC_SET_MAX_DATAGRAM_SIZE          0x88
+#define USB_CDC_GET_CRC_MODE                   0x89
+#define USB_CDC_SET_CRC_MODE                   0x8a
+
+/* Line Coding Structure from CDC spec 6.2.13 */
+struct usb_cdc_line_coding {
+       __le32  dwDTERate;
+       __u8    bCharFormat;
+#define USB_CDC_1_STOP_BITS                    0
+#define USB_CDC_1_5_STOP_BITS                  1
+#define USB_CDC_2_STOP_BITS                    2
+
+       __u8    bParityType;
+#define USB_CDC_NO_PARITY                      0
+#define USB_CDC_ODD_PARITY                     1
+#define USB_CDC_EVEN_PARITY                    2
+#define USB_CDC_MARK_PARITY                    3
+#define USB_CDC_SPACE_PARITY                   4
+
+       __u8    bDataBits;
+} __attribute__ ((packed));
+
+/* table 62; bits in multicast filter */
+#define        USB_CDC_PACKET_TYPE_PROMISCUOUS         (1 << 0)
+#define        USB_CDC_PACKET_TYPE_ALL_MULTICAST       (1 << 1) /* no filter */
+#define        USB_CDC_PACKET_TYPE_DIRECTED            (1 << 2)
+#define        USB_CDC_PACKET_TYPE_BROADCAST           (1 << 3)
+#define        USB_CDC_PACKET_TYPE_MULTICAST           (1 << 4) /* filtered */
+
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class-Specific Notifications (6.3) sent by interrupt transfers
+ *
+ * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
+ * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
+ * RNDIS also defines its own bit-incompatible notifications
+ */
+
+#define USB_CDC_NOTIFY_NETWORK_CONNECTION      0x00
+#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE      0x01
+#define USB_CDC_NOTIFY_SERIAL_STATE            0x20
+#define USB_CDC_NOTIFY_SPEED_CHANGE            0x2a
+
+struct usb_cdc_notification {
+       __u8    bmRequestType;
+       __u8    bNotificationType;
+       __le16  wValue;
+       __le16  wIndex;
+       __le16  wLength;
+} __attribute__ ((packed));
+
+struct usb_cdc_speed_change {
+       __le32  DLBitRRate;     /* contains the downlink bit rate (IN pipe) */
+       __le32  ULBitRate;      /* contains the uplink bit rate (OUT pipe) */
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Class Specific structures and constants
+ *
+ * CDC NCM NTB parameters structure, CDC NCM subclass 6.2.1
+ *
+ */
+
+struct usb_cdc_ncm_ntb_parameters {
+       __le16  wLength;
+       __le16  bmNtbFormatsSupported;
+       __le32  dwNtbInMaxSize;
+       __le16  wNdpInDivisor;
+       __le16  wNdpInPayloadRemainder;
+       __le16  wNdpInAlignment;
+       __le16  wPadding1;
+       __le32  dwNtbOutMaxSize;
+       __le16  wNdpOutDivisor;
+       __le16  wNdpOutPayloadRemainder;
+       __le16  wNdpOutAlignment;
+       __le16  wNtbOutMaxDatagrams;
+} __attribute__ ((packed));
+
+/*
+ * CDC NCM transfer headers, CDC NCM subclass 3.2
+ */
+
+#define USB_CDC_NCM_NTH16_SIGN         0x484D434E /* NCMH */
+#define USB_CDC_NCM_NTH32_SIGN         0x686D636E /* ncmh */
+
+struct usb_cdc_ncm_nth16 {
+       __le32  dwSignature;
+       __le16  wHeaderLength;
+       __le16  wSequence;
+       __le16  wBlockLength;
+       __le16  wNdpIndex;
+} __attribute__ ((packed));
+
+struct usb_cdc_ncm_nth32 {
+       __le32  dwSignature;
+       __le16  wHeaderLength;
+       __le16  wSequence;
+       __le32  dwBlockLength;
+       __le32  dwNdpIndex;
+} __attribute__ ((packed));
+
+/*
+ * CDC NCM datagram pointers, CDC NCM subclass 3.3
+ */
+
+#define USB_CDC_NCM_NDP16_CRC_SIGN     0x314D434E /* NCM1 */
+#define USB_CDC_NCM_NDP16_NOCRC_SIGN   0x304D434E /* NCM0 */
+#define USB_CDC_NCM_NDP32_CRC_SIGN     0x316D636E /* ncm1 */
+#define USB_CDC_NCM_NDP32_NOCRC_SIGN   0x306D636E /* ncm0 */
+
+#define USB_CDC_MBIM_NDP16_IPS_SIGN     0x00535049 /* IPS<sessionID> : IPS0 for now */
+#define USB_CDC_MBIM_NDP32_IPS_SIGN     0x00737069 /* ips<sessionID> : ips0 for now */
+#define USB_CDC_MBIM_NDP16_DSS_SIGN     0x00535344 /* DSS<sessionID> */
+#define USB_CDC_MBIM_NDP32_DSS_SIGN     0x00737364 /* dss<sessionID> */
+
+/* 16-bit NCM Datagram Pointer Entry */
+struct usb_cdc_ncm_dpe16 {
+       __le16  wDatagramIndex;
+       __le16  wDatagramLength;
+} __attribute__((__packed__));
+
+/* 16-bit NCM Datagram Pointer Table */
+struct usb_cdc_ncm_ndp16 {
+       __le32  dwSignature;
+       __le16  wLength;
+       __le16  wNextNdpIndex;
+       struct  usb_cdc_ncm_dpe16 dpe16[0];
+} __attribute__ ((packed));
+
+/* 32-bit NCM Datagram Pointer Entry */
+struct usb_cdc_ncm_dpe32 {
+       __le32  dwDatagramIndex;
+       __le32  dwDatagramLength;
+} __attribute__((__packed__));
+
+/* 32-bit NCM Datagram Pointer Table */
+struct usb_cdc_ncm_ndp32 {
+       __le32  dwSignature;
+       __le16  wLength;
+       __le16  wReserved6;
+       __le32  dwNextNdpIndex;
+       __le32  dwReserved12;
+       struct  usb_cdc_ncm_dpe32 dpe32[0];
+} __attribute__ ((packed));
+
+/* CDC NCM subclass 3.2.1 and 3.2.2 */
+#define USB_CDC_NCM_NDP16_INDEX_MIN                    0x000C
+#define USB_CDC_NCM_NDP32_INDEX_MIN                    0x0010
+
+/* CDC NCM subclass 3.3.3 Datagram Formatting */
+#define USB_CDC_NCM_DATAGRAM_FORMAT_CRC                        0x30
+#define USB_CDC_NCM_DATAGRAM_FORMAT_NOCRC              0X31
+
+/* CDC NCM subclass 4.2 NCM Communications Interface Protocol Code */
+#define USB_CDC_NCM_PROTO_CODE_NO_ENCAP_COMMANDS       0x00
+#define USB_CDC_NCM_PROTO_CODE_EXTERN_PROTO            0xFE
+
+/* CDC NCM subclass 5.2.1 NCM Functional Descriptor, bmNetworkCapabilities */
+#define USB_CDC_NCM_NCAP_ETH_FILTER                    (1 << 0)
+#define USB_CDC_NCM_NCAP_NET_ADDRESS                   (1 << 1)
+#define USB_CDC_NCM_NCAP_ENCAP_COMMAND                 (1 << 2)
+#define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE             (1 << 3)
+#define USB_CDC_NCM_NCAP_CRC_MODE                      (1 << 4)
+#define        USB_CDC_NCM_NCAP_NTB_INPUT_SIZE                 (1 << 5)
+
+/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
+#define USB_CDC_NCM_NTB16_SUPPORTED                    (1 << 0)
+#define USB_CDC_NCM_NTB32_SUPPORTED                    (1 << 1)
+
+/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
+#define USB_CDC_NCM_NDP_ALIGN_MIN_SIZE                 0x04
+#define USB_CDC_NCM_NTB_MAX_LENGTH                     0x1C
+
+/* CDC NCM subclass 6.2.5 SetNtbFormat */
+#define USB_CDC_NCM_NTB16_FORMAT                       0x00
+#define USB_CDC_NCM_NTB32_FORMAT                       0x01
+
+/* CDC NCM subclass 6.2.7 SetNtbInputSize */
+#define USB_CDC_NCM_NTB_MIN_IN_SIZE                    2048
+#define USB_CDC_NCM_NTB_MIN_OUT_SIZE                   2048
+
+/* NTB Input Size Structure */
+struct usb_cdc_ncm_ndp_input_size {
+       __le32  dwNtbInMaxSize;
+       __le16  wNtbInMaxDatagrams;
+       __le16  wReserved;
+} __attribute__ ((packed));
+
+/* CDC NCM subclass 6.2.11 SetCrcMode */
+#define USB_CDC_NCM_CRC_NOT_APPENDED                   0x00
+#define USB_CDC_NCM_CRC_APPENDED                       0x01
+
+#endif /* __UAPI_LINUX_USB_CDC_H */
diff --git a/lib/libdss-include/linux/usb/ch11.h b/lib/libdss-include/linux/usb/ch11.h
new file mode 100644 (file)
index 0000000..361297e
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * This file holds Hub protocol constants and data structures that are
+ * defined in chapter 11 (Hub Specification) of the USB 2.0 specification.
+ *
+ * It is used/shared between the USB core, the HCDs and couple of other USB
+ * drivers.
+ */
+
+#ifndef __LINUX_CH11_H
+#define __LINUX_CH11_H
+
+#include <linux/types.h>       /* __u8 etc */
+
+/* This is arbitrary.
+ * From USB 2.0 spec Table 11-13, offset 7, a hub can
+ * have up to 255 ports. The most yet reported is 10.
+ *
+ * Current Wireless USB host hardware (Intel i1480 for example) allows
+ * up to 22 devices to connect. Upcoming hardware might raise that
+ * limit. Because the arrays need to add a bit for hub status data, we
+ * use 31, so plus one evens out to four bytes.
+ */
+#define USB_MAXCHILDREN                31
+
+/*
+ * Hub request types
+ */
+
+#define USB_RT_HUB     (USB_TYPE_CLASS | USB_RECIP_DEVICE)
+#define USB_RT_PORT    (USB_TYPE_CLASS | USB_RECIP_OTHER)
+
+/*
+ * Port status type for GetPortStatus requests added in USB 3.1
+ * See USB 3.1 spec Table 10-12
+ */
+#define HUB_PORT_STATUS                0
+#define HUB_PORT_PD_STATUS     1
+#define HUB_EXT_PORT_STATUS    2
+
+/*
+ * Hub class requests
+ * See USB 2.0 spec Table 11-16
+ */
+#define HUB_CLEAR_TT_BUFFER    8
+#define HUB_RESET_TT           9
+#define HUB_GET_TT_STATE       10
+#define HUB_STOP_TT            11
+
+/*
+ * Hub class additional requests defined by USB 3.0 spec
+ * See USB 3.0 spec Table 10-6
+ */
+#define HUB_SET_DEPTH          12
+#define HUB_GET_PORT_ERR_COUNT 13
+
+/*
+ * Hub Class feature numbers
+ * See USB 2.0 spec Table 11-17
+ */
+#define C_HUB_LOCAL_POWER      0
+#define C_HUB_OVER_CURRENT     1
+
+/*
+ * Port feature numbers
+ * See USB 2.0 spec Table 11-17
+ */
+#define USB_PORT_FEAT_CONNECTION       0
+#define USB_PORT_FEAT_ENABLE           1
+#define USB_PORT_FEAT_SUSPEND          2       /* L2 suspend */
+#define USB_PORT_FEAT_OVER_CURRENT     3
+#define USB_PORT_FEAT_RESET            4
+#define USB_PORT_FEAT_L1               5       /* L1 suspend */
+#define USB_PORT_FEAT_POWER            8
+#define USB_PORT_FEAT_LOWSPEED         9       /* Should never be used */
+#define USB_PORT_FEAT_C_CONNECTION     16
+#define USB_PORT_FEAT_C_ENABLE         17
+#define USB_PORT_FEAT_C_SUSPEND                18
+#define USB_PORT_FEAT_C_OVER_CURRENT   19
+#define USB_PORT_FEAT_C_RESET          20
+#define USB_PORT_FEAT_TEST              21
+#define USB_PORT_FEAT_INDICATOR         22
+#define USB_PORT_FEAT_C_PORT_L1         23
+
+/*
+ * Port feature selectors added by USB 3.0 spec.
+ * See USB 3.0 spec Table 10-7
+ */
+#define USB_PORT_FEAT_LINK_STATE               5
+#define USB_PORT_FEAT_U1_TIMEOUT               23
+#define USB_PORT_FEAT_U2_TIMEOUT               24
+#define USB_PORT_FEAT_C_PORT_LINK_STATE                25
+#define USB_PORT_FEAT_C_PORT_CONFIG_ERROR      26
+#define USB_PORT_FEAT_REMOTE_WAKE_MASK         27
+#define USB_PORT_FEAT_BH_PORT_RESET            28
+#define USB_PORT_FEAT_C_BH_PORT_RESET          29
+#define USB_PORT_FEAT_FORCE_LINKPM_ACCEPT      30
+
+#define USB_PORT_LPM_TIMEOUT(p)                        (((p) & 0xff) << 8)
+
+/* USB 3.0 hub remote wake mask bits, see table 10-14 */
+#define USB_PORT_FEAT_REMOTE_WAKE_CONNECT      (1 << 8)
+#define USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT   (1 << 9)
+#define USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT (1 << 10)
+
+/*
+ * Hub Status and Hub Change results
+ * See USB 2.0 spec Table 11-19 and Table 11-20
+ * USB 3.1 extends the port status request and may return 4 additional bytes.
+ * See USB 3.1 spec section 10.16.2.6 Table 10-12 and 10-15
+ */
+struct usb_port_status {
+       __le16 wPortStatus;
+       __le16 wPortChange;
+       __le32 dwExtPortStatus;
+} __attribute__ ((packed));
+
+/*
+ * wPortStatus bit field
+ * See USB 2.0 spec Table 11-21
+ */
+#define USB_PORT_STAT_CONNECTION       0x0001
+#define USB_PORT_STAT_ENABLE           0x0002
+#define USB_PORT_STAT_SUSPEND          0x0004
+#define USB_PORT_STAT_OVERCURRENT      0x0008
+#define USB_PORT_STAT_RESET            0x0010
+#define USB_PORT_STAT_L1               0x0020
+/* bits 6 to 7 are reserved */
+#define USB_PORT_STAT_POWER            0x0100
+#define USB_PORT_STAT_LOW_SPEED                0x0200
+#define USB_PORT_STAT_HIGH_SPEED        0x0400
+#define USB_PORT_STAT_TEST              0x0800
+#define USB_PORT_STAT_INDICATOR         0x1000
+/* bits 13 to 15 are reserved */
+
+/*
+ * Additions to wPortStatus bit field from USB 3.0
+ * See USB 3.0 spec Table 10-10
+ */
+#define USB_PORT_STAT_LINK_STATE       0x01e0
+#define USB_SS_PORT_STAT_POWER         0x0200
+#define USB_SS_PORT_STAT_SPEED         0x1c00
+#define USB_PORT_STAT_SPEED_5GBPS      0x0000
+/* Valid only if port is enabled */
+/* Bits that are the same from USB 2.0 */
+#define USB_SS_PORT_STAT_MASK (USB_PORT_STAT_CONNECTION |          \
+                               USB_PORT_STAT_ENABLE |      \
+                               USB_PORT_STAT_OVERCURRENT | \
+                               USB_PORT_STAT_RESET)
+
+/*
+ * Definitions for PORT_LINK_STATE values
+ * (bits 5-8) in wPortStatus
+ */
+#define USB_SS_PORT_LS_U0              0x0000
+#define USB_SS_PORT_LS_U1              0x0020
+#define USB_SS_PORT_LS_U2              0x0040
+#define USB_SS_PORT_LS_U3              0x0060
+#define USB_SS_PORT_LS_SS_DISABLED     0x0080
+#define USB_SS_PORT_LS_RX_DETECT       0x00a0
+#define USB_SS_PORT_LS_SS_INACTIVE     0x00c0
+#define USB_SS_PORT_LS_POLLING         0x00e0
+#define USB_SS_PORT_LS_RECOVERY                0x0100
+#define USB_SS_PORT_LS_HOT_RESET       0x0120
+#define USB_SS_PORT_LS_COMP_MOD                0x0140
+#define USB_SS_PORT_LS_LOOPBACK                0x0160
+
+/*
+ * wPortChange bit field
+ * See USB 2.0 spec Table 11-22 and USB 2.0 LPM ECN Table-4.10
+ * Bits 0 to 5 shown, bits 6 to 15 are reserved
+ */
+#define USB_PORT_STAT_C_CONNECTION     0x0001
+#define USB_PORT_STAT_C_ENABLE         0x0002
+#define USB_PORT_STAT_C_SUSPEND                0x0004
+#define USB_PORT_STAT_C_OVERCURRENT    0x0008
+#define USB_PORT_STAT_C_RESET          0x0010
+#define USB_PORT_STAT_C_L1             0x0020
+/*
+ * USB 3.0 wPortChange bit fields
+ * See USB 3.0 spec Table 10-11
+ */
+#define USB_PORT_STAT_C_BH_RESET       0x0020
+#define USB_PORT_STAT_C_LINK_STATE     0x0040
+#define USB_PORT_STAT_C_CONFIG_ERROR   0x0080
+
+/*
+ * USB 3.1 dwExtPortStatus field masks
+ * See USB 3.1 spec 10.16.2.6.3 Table 10-15
+ */
+
+#define USB_EXT_PORT_STAT_RX_SPEED_ID  0x0000000f
+#define USB_EXT_PORT_STAT_TX_SPEED_ID  0x000000f0
+#define USB_EXT_PORT_STAT_RX_LANES     0x00000f00
+#define USB_EXT_PORT_STAT_TX_LANES     0x0000f000
+
+/*
+ * wHubCharacteristics (masks)
+ * See USB 2.0 spec Table 11-13, offset 3
+ */
+#define HUB_CHAR_LPSM          0x0003 /* Logical Power Switching Mode mask */
+#define HUB_CHAR_COMMON_LPSM   0x0000 /* All ports power control at once */
+#define HUB_CHAR_INDV_PORT_LPSM        0x0001 /* per-port power control */
+#define HUB_CHAR_NO_LPSM       0x0002 /* no power switching */
+
+#define HUB_CHAR_COMPOUND      0x0004 /* hub is part of a compound device */
+
+#define HUB_CHAR_OCPM          0x0018 /* Over-Current Protection Mode mask */
+#define HUB_CHAR_COMMON_OCPM   0x0000 /* All ports Over-Current reporting */
+#define HUB_CHAR_INDV_PORT_OCPM        0x0008 /* per-port Over-current reporting */
+#define HUB_CHAR_NO_OCPM       0x0010 /* No Over-current Protection support */
+
+#define HUB_CHAR_TTTT          0x0060 /* TT Think Time mask */
+#define HUB_CHAR_PORTIND       0x0080 /* per-port indicators (LEDs) */
+
+struct usb_hub_status {
+       __le16 wHubStatus;
+       __le16 wHubChange;
+} __attribute__ ((packed));
+
+/*
+ * Hub Status & Hub Change bit masks
+ * See USB 2.0 spec Table 11-19 and Table 11-20
+ * Bits 0 and 1 for wHubStatus and wHubChange
+ * Bits 2 to 15 are reserved for both
+ */
+#define HUB_STATUS_LOCAL_POWER 0x0001
+#define HUB_STATUS_OVERCURRENT 0x0002
+#define HUB_CHANGE_LOCAL_POWER 0x0001
+#define HUB_CHANGE_OVERCURRENT 0x0002
+
+
+/*
+ * Hub descriptor
+ * See USB 2.0 spec Table 11-13
+ */
+
+#define USB_DT_HUB                     (USB_TYPE_CLASS | 0x09)
+#define USB_DT_SS_HUB                  (USB_TYPE_CLASS | 0x0a)
+#define USB_DT_HUB_NONVAR_SIZE         7
+#define USB_DT_SS_HUB_SIZE              12
+
+/*
+ * Hub Device descriptor
+ * USB Hub class device protocols
+ */
+
+#define USB_HUB_PR_FS          0 /* Full speed hub */
+#define USB_HUB_PR_HS_NO_TT    0 /* Hi-speed hub without TT */
+#define USB_HUB_PR_HS_SINGLE_TT        1 /* Hi-speed hub with single TT */
+#define USB_HUB_PR_HS_MULTI_TT 2 /* Hi-speed hub with multiple TT */
+#define USB_HUB_PR_SS          3 /* Super speed hub */
+
+struct usb_hub_descriptor {
+       __u8  bDescLength;
+       __u8  bDescriptorType;
+       __u8  bNbrPorts;
+       __le16 wHubCharacteristics;
+       __u8  bPwrOn2PwrGood;
+       __u8  bHubContrCurrent;
+
+       /* 2.0 and 3.0 hubs differ here */
+       union {
+               struct {
+                       /* add 1 bit for hub status change; round to bytes */
+                       __u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
+                       __u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
+               }  __attribute__ ((packed)) hs;
+
+               struct {
+                       __u8 bHubHdrDecLat;
+                       __le16 wHubDelay;
+                       __le16 DeviceRemovable;
+               }  __attribute__ ((packed)) ss;
+       } u;
+} __attribute__ ((packed));
+
+/* port indicator status selectors, tables 11-7 and 11-25 */
+#define HUB_LED_AUTO   0
+#define HUB_LED_AMBER  1
+#define HUB_LED_GREEN  2
+#define HUB_LED_OFF    3
+
+enum hub_led_mode {
+       INDICATOR_AUTO = 0,
+       INDICATOR_CYCLE,
+       /* software blinks for attention:  software, hardware, reserved */
+       INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF,
+       INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF,
+       INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF
+} __attribute__ ((packed));
+
+/* Transaction Translator Think Times, in bits */
+#define HUB_TTTT_8_BITS                0x00
+#define HUB_TTTT_16_BITS       0x20
+#define HUB_TTTT_24_BITS       0x40
+#define HUB_TTTT_32_BITS       0x60
+
+#endif /* __LINUX_CH11_H */
diff --git a/lib/libdss-include/linux/usb/ch9.h b/lib/libdss-include/linux/usb/ch9.h
new file mode 100644 (file)
index 0000000..135736b
--- /dev/null
@@ -0,0 +1,1069 @@
+/*
+ * This file holds USB constants and structures that are needed for
+ * USB device APIs.  These are used by the USB device model, which is
+ * defined in chapter 9 of the USB 2.0 specification and in the
+ * Wireless USB 1.0 (spread around).  Linux has several APIs in C that
+ * need these:
+ *
+ * - the master/host side Linux-USB kernel driver API;
+ * - the "usbfs" user space API; and
+ * - the Linux "gadget" slave/device/peripheral side driver API.
+ *
+ * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
+ * act either as a USB master/host or as a USB slave/device.  That means
+ * the master and slave side APIs benefit from working well together.
+ *
+ * There's also "Wireless USB", using low power short range radios for
+ * peripheral interconnection but otherwise building on the USB framework.
+ *
+ * Note all descriptors are declared '__attribute__((packed))' so that:
+ *
+ * [a] they never get padded, either internally (USB spec writers
+ *     probably handled that) or externally;
+ *
+ * [b] so that accessing bigger-than-a-bytes fields will never
+ *     generate bus errors on any platform, even when the location of
+ *     its descriptor inside a bundle isn't "naturally aligned", and
+ *
+ * [c] for consistency, removing all doubt even when it appears to
+ *     someone that the two other points are non-issues for that
+ *     particular descriptor type.
+ */
+
+#ifndef __LINUX_USB_CH9_H
+#define __LINUX_USB_CH9_H
+
+#include <linux/types.h>       /* __u8 etc */
+#include <asm/byteorder.h>     /* le16_to_cpu */
+
+/*-------------------------------------------------------------------------*/
+
+/* CONTROL REQUEST SUPPORT */
+
+/*
+ * USB directions
+ *
+ * This bit flag is used in endpoint descriptors' bEndpointAddress field.
+ * It's also one of three fields in control requests bRequestType.
+ */
+#define USB_DIR_OUT                    0               /* to device */
+#define USB_DIR_IN                     0x80            /* to host */
+
+/*
+ * USB types, the second of three bRequestType fields
+ */
+#define USB_TYPE_MASK                  (0x03 << 5)
+#define USB_TYPE_STANDARD              (0x00 << 5)
+#define USB_TYPE_CLASS                 (0x01 << 5)
+#define USB_TYPE_VENDOR                        (0x02 << 5)
+#define USB_TYPE_RESERVED              (0x03 << 5)
+
+/*
+ * USB recipients, the third of three bRequestType fields
+ */
+#define USB_RECIP_MASK                 0x1f
+#define USB_RECIP_DEVICE               0x00
+#define USB_RECIP_INTERFACE            0x01
+#define USB_RECIP_ENDPOINT             0x02
+#define USB_RECIP_OTHER                        0x03
+/* From Wireless USB 1.0 */
+#define USB_RECIP_PORT                 0x04
+#define USB_RECIP_RPIPE                0x05
+
+/*
+ * Standard requests, for the bRequest field of a SETUP packet.
+ *
+ * These are qualified by the bRequestType field, so that for example
+ * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
+ * by a GET_STATUS request.
+ */
+#define USB_REQ_GET_STATUS             0x00
+#define USB_REQ_CLEAR_FEATURE          0x01
+#define USB_REQ_SET_FEATURE            0x03
+#define USB_REQ_SET_ADDRESS            0x05
+#define USB_REQ_GET_DESCRIPTOR         0x06
+#define USB_REQ_SET_DESCRIPTOR         0x07
+#define USB_REQ_GET_CONFIGURATION      0x08
+#define USB_REQ_SET_CONFIGURATION      0x09
+#define USB_REQ_GET_INTERFACE          0x0A
+#define USB_REQ_SET_INTERFACE          0x0B
+#define USB_REQ_SYNCH_FRAME            0x0C
+#define USB_REQ_SET_SEL                        0x30
+#define USB_REQ_SET_ISOCH_DELAY                0x31
+
+#define USB_REQ_SET_ENCRYPTION         0x0D    /* Wireless USB */
+#define USB_REQ_GET_ENCRYPTION         0x0E
+#define USB_REQ_RPIPE_ABORT            0x0E
+#define USB_REQ_SET_HANDSHAKE          0x0F
+#define USB_REQ_RPIPE_RESET            0x0F
+#define USB_REQ_GET_HANDSHAKE          0x10
+#define USB_REQ_SET_CONNECTION         0x11
+#define USB_REQ_SET_SECURITY_DATA      0x12
+#define USB_REQ_GET_SECURITY_DATA      0x13
+#define USB_REQ_SET_WUSB_DATA          0x14
+#define USB_REQ_LOOPBACK_DATA_WRITE    0x15
+#define USB_REQ_LOOPBACK_DATA_READ     0x16
+#define USB_REQ_SET_INTERFACE_DS       0x17
+
+/* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command,
+ * used by hubs to put ports into a new L1 suspend state, except that it
+ * forgot to define its number ...
+ */
+
+/*
+ * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
+ * are read as a bit array returned by USB_REQ_GET_STATUS.  (So there
+ * are at most sixteen features of each type.)  Hubs may also support a
+ * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend.
+ */
+#define USB_DEVICE_SELF_POWERED                0       /* (read only) */
+#define USB_DEVICE_REMOTE_WAKEUP       1       /* dev may initiate wakeup */
+#define USB_DEVICE_TEST_MODE           2       /* (wired high speed only) */
+#define USB_DEVICE_BATTERY             2       /* (wireless) */
+#define USB_DEVICE_B_HNP_ENABLE                3       /* (otg) dev may initiate HNP */
+#define USB_DEVICE_WUSB_DEVICE         3       /* (wireless)*/
+#define USB_DEVICE_A_HNP_SUPPORT       4       /* (otg) RH port supports HNP */
+#define USB_DEVICE_A_ALT_HNP_SUPPORT   5       /* (otg) other RH port does */
+#define USB_DEVICE_DEBUG_MODE          6       /* (special devices only) */
+
+/*
+ * Test Mode Selectors
+ * See USB 2.0 spec Table 9-7
+ */
+#define        TEST_J          1
+#define        TEST_K          2
+#define        TEST_SE0_NAK    3
+#define        TEST_PACKET     4
+#define        TEST_FORCE_EN   5
+
+/*
+ * New Feature Selectors as added by USB 3.0
+ * See USB 3.0 spec Table 9-7
+ */
+#define USB_DEVICE_U1_ENABLE   48      /* dev may initiate U1 transition */
+#define USB_DEVICE_U2_ENABLE   49      /* dev may initiate U2 transition */
+#define USB_DEVICE_LTM_ENABLE  50      /* dev may send LTM */
+#define USB_INTRF_FUNC_SUSPEND 0       /* function suspend */
+
+#define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00
+/*
+ * Suspend Options, Table 9-8 USB 3.0 spec
+ */
+#define USB_INTRF_FUNC_SUSPEND_LP      (1 << (8 + 0))
+#define USB_INTRF_FUNC_SUSPEND_RW      (1 << (8 + 1))
+
+/*
+ * Interface status, Figure 9-5 USB 3.0 spec
+ */
+#define USB_INTRF_STAT_FUNC_RW_CAP     1
+#define USB_INTRF_STAT_FUNC_RW         2
+
+#define USB_ENDPOINT_HALT              0       /* IN/OUT will STALL */
+
+/* Bit array elements as returned by the USB_REQ_GET_STATUS request. */
+#define USB_DEV_STAT_U1_ENABLED                2       /* transition into U1 state */
+#define USB_DEV_STAT_U2_ENABLED                3       /* transition into U2 state */
+#define USB_DEV_STAT_LTM_ENABLED       4       /* Latency tolerance messages */
+
+/**
+ * struct usb_ctrlrequest - SETUP data for a USB device control request
+ * @bRequestType: matches the USB bmRequestType field
+ * @bRequest: matches the USB bRequest field
+ * @wValue: matches the USB wValue field (le16 byte order)
+ * @wIndex: matches the USB wIndex field (le16 byte order)
+ * @wLength: matches the USB wLength field (le16 byte order)
+ *
+ * This structure is used to send control requests to a USB device.  It matches
+ * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the
+ * USB spec for a fuller description of the different fields, and what they are
+ * used for.
+ *
+ * Note that the driver for any interface can issue control requests.
+ * For most devices, interfaces don't coordinate with each other, so
+ * such requests may be made at any time.
+ */
+struct usb_ctrlrequest {
+       __u8 bRequestType;
+       __u8 bRequest;
+       __le16 wValue;
+       __le16 wIndex;
+       __le16 wLength;
+} __attribute__ ((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
+ * (rarely) accepted by SET_DESCRIPTOR.
+ *
+ * Note that all multi-byte values here are encoded in little endian
+ * byte order "on the wire".  Within the kernel and when exposed
+ * through the Linux-USB APIs, they are not converted to cpu byte
+ * order; it is the responsibility of the client code to do this.
+ * The single exception is when device and configuration descriptors (but
+ * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
+ * in this case the fields are converted to host endianness by the kernel.
+ */
+
+/*
+ * Descriptor types ... USB 2.0 spec table 9.5
+ */
+#define USB_DT_DEVICE                  0x01
+#define USB_DT_CONFIG                  0x02
+#define USB_DT_STRING                  0x03
+#define USB_DT_INTERFACE               0x04
+#define USB_DT_ENDPOINT                        0x05
+#define USB_DT_DEVICE_QUALIFIER                0x06
+#define USB_DT_OTHER_SPEED_CONFIG      0x07
+#define USB_DT_INTERFACE_POWER         0x08
+/* these are from a minor usb 2.0 revision (ECN) */
+#define USB_DT_OTG                     0x09
+#define USB_DT_DEBUG                   0x0a
+#define USB_DT_INTERFACE_ASSOCIATION   0x0b
+/* these are from the Wireless USB spec */
+#define USB_DT_SECURITY                        0x0c
+#define USB_DT_KEY                     0x0d
+#define USB_DT_ENCRYPTION_TYPE         0x0e
+#define USB_DT_BOS                     0x0f
+#define USB_DT_DEVICE_CAPABILITY       0x10
+#define USB_DT_WIRELESS_ENDPOINT_COMP  0x11
+#define USB_DT_WIRE_ADAPTER            0x21
+#define USB_DT_RPIPE                   0x22
+#define USB_DT_CS_RADIO_CONTROL                0x23
+/* From the T10 UAS specification */
+#define USB_DT_PIPE_USAGE              0x24
+/* From the USB 3.0 spec */
+#define        USB_DT_SS_ENDPOINT_COMP         0x30
+/* From the USB 3.1 spec */
+#define        USB_DT_SSP_ISOC_ENDPOINT_COMP   0x31
+
+/* Conventional codes for class-specific descriptors.  The convention is
+ * defined in the USB "Common Class" Spec (3.11).  Individual class specs
+ * are authoritative for their usage, not the "common class" writeup.
+ */
+#define USB_DT_CS_DEVICE               (USB_TYPE_CLASS | USB_DT_DEVICE)
+#define USB_DT_CS_CONFIG               (USB_TYPE_CLASS | USB_DT_CONFIG)
+#define USB_DT_CS_STRING               (USB_TYPE_CLASS | USB_DT_STRING)
+#define USB_DT_CS_INTERFACE            (USB_TYPE_CLASS | USB_DT_INTERFACE)
+#define USB_DT_CS_ENDPOINT             (USB_TYPE_CLASS | USB_DT_ENDPOINT)
+
+/* All standard descriptors have these 2 fields at the beginning */
+struct usb_descriptor_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE: Device descriptor */
+struct usb_device_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 bcdUSB;
+       __u8  bDeviceClass;
+       __u8  bDeviceSubClass;
+       __u8  bDeviceProtocol;
+       __u8  bMaxPacketSize0;
+       __le16 idVendor;
+       __le16 idProduct;
+       __le16 bcdDevice;
+       __u8  iManufacturer;
+       __u8  iProduct;
+       __u8  iSerialNumber;
+       __u8  bNumConfigurations;
+} __attribute__ ((packed));
+
+#define USB_DT_DEVICE_SIZE             18
+
+
+/*
+ * Device and/or Interface Class codes
+ * as found in bDeviceClass or bInterfaceClass
+ * and defined by www.usb.org documents
+ */
+#define USB_CLASS_PER_INTERFACE                0       /* for DeviceClass */
+#define USB_CLASS_AUDIO                        1
+#define USB_CLASS_COMM                 2
+#define USB_CLASS_HID                  3
+#define USB_CLASS_PHYSICAL             5
+#define USB_CLASS_STILL_IMAGE          6
+#define USB_CLASS_PRINTER              7
+#define USB_CLASS_MASS_STORAGE         8
+#define USB_CLASS_HUB                  9
+#define USB_CLASS_CDC_DATA             0x0a
+#define USB_CLASS_CSCID                        0x0b    /* chip+ smart card */
+#define USB_CLASS_CONTENT_SEC          0x0d    /* content security */
+#define USB_CLASS_VIDEO                        0x0e
+#define USB_CLASS_WIRELESS_CONTROLLER  0xe0
+#define USB_CLASS_MISC                 0xef
+#define USB_CLASS_APP_SPEC             0xfe
+#define USB_CLASS_VENDOR_SPEC          0xff
+
+#define USB_SUBCLASS_VENDOR_SPEC       0xff
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_CONFIG: Configuration descriptor information.
+ *
+ * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
+ * descriptor type is different.  Highspeed-capable devices can look
+ * different depending on what speed they're currently running.  Only
+ * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
+ * descriptors.
+ */
+struct usb_config_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumInterfaces;
+       __u8  bConfigurationValue;
+       __u8  iConfiguration;
+       __u8  bmAttributes;
+       __u8  bMaxPower;
+} __attribute__ ((packed));
+
+#define USB_DT_CONFIG_SIZE             9
+
+/* from config descriptor bmAttributes */
+#define USB_CONFIG_ATT_ONE             (1 << 7)        /* must be set */
+#define USB_CONFIG_ATT_SELFPOWER       (1 << 6)        /* self powered */
+#define USB_CONFIG_ATT_WAKEUP          (1 << 5)        /* can wakeup */
+#define USB_CONFIG_ATT_BATTERY         (1 << 4)        /* battery powered */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_STRING: String descriptor */
+struct usb_string_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wData[1];                /* UTF-16LE encoded */
+} __attribute__ ((packed));
+
+/* note that "string" zero is special, it holds language codes that
+ * the device supports, not Unicode characters.
+ */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_INTERFACE: Interface descriptor */
+struct usb_interface_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bInterfaceNumber;
+       __u8  bAlternateSetting;
+       __u8  bNumEndpoints;
+       __u8  bInterfaceClass;
+       __u8  bInterfaceSubClass;
+       __u8  bInterfaceProtocol;
+       __u8  iInterface;
+} __attribute__ ((packed));
+
+#define USB_DT_INTERFACE_SIZE          9
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_ENDPOINT: Endpoint descriptor */
+struct usb_endpoint_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEndpointAddress;
+       __u8  bmAttributes;
+       __le16 wMaxPacketSize;
+       __u8  bInterval;
+
+       /* NOTE:  these two are _only_ in audio endpoints. */
+       /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
+       __u8  bRefresh;
+       __u8  bSynchAddress;
+} __attribute__ ((packed));
+
+#define USB_DT_ENDPOINT_SIZE           7
+#define USB_DT_ENDPOINT_AUDIO_SIZE     9       /* Audio extension */
+
+
+/*
+ * Endpoints
+ */
+#define USB_ENDPOINT_NUMBER_MASK       0x0f    /* in bEndpointAddress */
+#define USB_ENDPOINT_DIR_MASK          0x80
+
+#define USB_ENDPOINT_XFERTYPE_MASK     0x03    /* in bmAttributes */
+#define USB_ENDPOINT_XFER_CONTROL      0
+#define USB_ENDPOINT_XFER_ISOC         1
+#define USB_ENDPOINT_XFER_BULK         2
+#define USB_ENDPOINT_XFER_INT          3
+#define USB_ENDPOINT_MAX_ADJUSTABLE    0x80
+
+/* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */
+#define USB_ENDPOINT_INTRTYPE          0x30
+#define USB_ENDPOINT_INTR_PERIODIC     (0 << 4)
+#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4)
+
+#define USB_ENDPOINT_SYNCTYPE          0x0c
+#define USB_ENDPOINT_SYNC_NONE         (0 << 2)
+#define USB_ENDPOINT_SYNC_ASYNC                (1 << 2)
+#define USB_ENDPOINT_SYNC_ADAPTIVE     (2 << 2)
+#define USB_ENDPOINT_SYNC_SYNC         (3 << 2)
+
+#define USB_ENDPOINT_USAGE_MASK                0x30
+#define USB_ENDPOINT_USAGE_DATA                0x00
+#define USB_ENDPOINT_USAGE_FEEDBACK    0x10
+#define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20    /* Implicit feedback Data endpoint */
+
+/*-------------------------------------------------------------------------*/
+
+/**
+ * usb_endpoint_num - get the endpoint's number
+ * @epd: endpoint to be checked
+ *
+ * Returns @epd's number: 0 to 15.
+ */
+static __inline__ int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
+}
+
+/**
+ * usb_endpoint_type - get the endpoint's transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according
+ * to @epd's transfer type.
+ */
+static __inline__ int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+}
+
+/**
+ * usb_endpoint_dir_in - check if the endpoint has IN direction
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type IN, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
+}
+
+/**
+ * usb_endpoint_dir_out - check if the endpoint has OUT direction
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type OUT, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_dir_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
+}
+
+/**
+ * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type bulk, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_xfer_bulk(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_BULK);
+}
+
+/**
+ * usb_endpoint_xfer_control - check if the endpoint has control transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type control, otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_xfer_control(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_CONTROL);
+}
+
+/**
+ * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type interrupt, otherwise it returns
+ * false.
+ */
+static __inline__ int usb_endpoint_xfer_int(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_INT);
+}
+
+/**
+ * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint is of type isochronous, otherwise it returns
+ * false.
+ */
+static __inline__ int usb_endpoint_xfer_isoc(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_ISOC);
+}
+
+/**
+ * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has bulk transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_bulk_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has bulk transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_bulk_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has interrupt transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_int_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has interrupt transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_int_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has isochronous transfer type and IN direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_isoc_in(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd);
+}
+
+/**
+ * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
+ * @epd: endpoint to be checked
+ *
+ * Returns true if the endpoint has isochronous transfer type and OUT direction,
+ * otherwise it returns false.
+ */
+static __inline__ int usb_endpoint_is_isoc_out(
+                               const struct usb_endpoint_descriptor *epd)
+{
+       return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd);
+}
+
+/**
+ * usb_endpoint_maxp - get endpoint's max packet size
+ * @epd: endpoint to be checked
+ *
+ * Returns @epd's max packet
+ */
+static __inline__ int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
+{
+       return __le16_to_cpu(epd->wMaxPacketSize);
+}
+
+static __inline__ int usb_endpoint_interrupt_type(
+               const struct usb_endpoint_descriptor *epd)
+{
+       return epd->bmAttributes & USB_ENDPOINT_INTRTYPE;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SSP_ISOC_ENDPOINT_COMP: SuperSpeedPlus Isochronous Endpoint Companion
+ * descriptor
+ */
+struct usb_ssp_isoc_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __le16 wReseved;
+       __le32 dwBytesPerInterval;
+} __attribute__ ((packed));
+
+#define USB_DT_SSP_ISOC_EP_COMP_SIZE           8
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */
+struct usb_ss_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bMaxBurst;
+       __u8  bmAttributes;
+       __le16 wBytesPerInterval;
+} __attribute__ ((packed));
+
+#define USB_DT_SS_EP_COMP_SIZE         6
+
+/* Bits 4:0 of bmAttributes if this is a bulk endpoint */
+static __inline__ int
+usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp)
+{
+       int             max_streams;
+
+       if (!comp)
+               return 0;
+
+       max_streams = comp->bmAttributes & 0x1f;
+
+       if (!max_streams)
+               return 0;
+
+       max_streams = 1 << max_streams;
+
+       return max_streams;
+}
+
+/* Bits 1:0 of bmAttributes if this is an isoc endpoint */
+#define USB_SS_MULT(p)                 (1 + ((p) & 0x3))
+/* Bit 7 of bmAttributes if a SSP isoc endpoint companion descriptor exists */
+#define USB_SS_SSP_ISOC_COMP(p)                ((p) & (1 << 7))
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
+struct usb_qualifier_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 bcdUSB;
+       __u8  bDeviceClass;
+       __u8  bDeviceSubClass;
+       __u8  bDeviceProtocol;
+       __u8  bMaxPacketSize0;
+       __u8  bNumConfigurations;
+       __u8  bRESERVED;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_OTG (from OTG 1.0a supplement) */
+struct usb_otg_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bmAttributes;     /* support for HNP, SRP, etc */
+} __attribute__ ((packed));
+
+/* USB_DT_OTG (from OTG 2.0 supplement) */
+struct usb_otg20_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bmAttributes;     /* support for HNP, SRP and ADP, etc */
+       __le16 bcdOTG;          /* OTG and EH supplement release number
+                                * in binary-coded decimal(i.e. 2.0 is 0200H)
+                                */
+} __attribute__ ((packed));
+
+/* from usb_otg_descriptor.bmAttributes */
+#define USB_OTG_SRP            (1 << 0)
+#define USB_OTG_HNP            (1 << 1)        /* swap host/device roles */
+#define USB_OTG_ADP            (1 << 2)        /* support ADP */
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEBUG:  for special highspeed devices, replacing serial console */
+struct usb_debug_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       /* bulk endpoints with 8 byte maxpacket */
+       __u8  bDebugInEndpoint;
+       __u8  bDebugOutEndpoint;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */
+struct usb_interface_assoc_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bFirstInterface;
+       __u8  bInterfaceCount;
+       __u8  bFunctionClass;
+       __u8  bFunctionSubClass;
+       __u8  bFunctionProtocol;
+       __u8  iFunction;
+} __attribute__ ((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_SECURITY:  group of wireless security descriptors, including
+ * encryption types available for setting up a CC/association.
+ */
+struct usb_security_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumEncryptionTypes;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_KEY:  used with {GET,SET}_SECURITY_DATA; only public keys
+ * may be retrieved.
+ */
+struct usb_key_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  tTKID[3];
+       __u8  bReserved;
+       __u8  bKeyData[0];
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_ENCRYPTION_TYPE:  bundled in DT_SECURITY groups */
+struct usb_encryption_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEncryptionType;
+#define        USB_ENC_TYPE_UNSECURE           0
+#define        USB_ENC_TYPE_WIRED              1       /* non-wireless mode */
+#define        USB_ENC_TYPE_CCM_1              2       /* aes128/cbc session */
+#define        USB_ENC_TYPE_RSA_1              3       /* rsa3072/sha1 auth */
+       __u8  bEncryptionValue;         /* use in SET_ENCRYPTION */
+       __u8  bAuthKeyIndex;
+} __attribute__((packed));
+
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_BOS:  group of device-level capabilities */
+struct usb_bos_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __le16 wTotalLength;
+       __u8  bNumDeviceCaps;
+} __attribute__((packed));
+
+#define USB_DT_BOS_SIZE                5
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_DEVICE_CAPABILITY:  grouped with BOS */
+struct usb_dev_cap_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+} __attribute__((packed));
+
+#define        USB_CAP_TYPE_WIRELESS_USB       1
+
+struct usb_wireless_cap_descriptor {   /* Ultra Wide Band */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+
+       __u8  bmAttributes;
+#define        USB_WIRELESS_P2P_DRD            (1 << 1)
+#define        USB_WIRELESS_BEACON_MASK        (3 << 2)
+#define        USB_WIRELESS_BEACON_SELF        (1 << 2)
+#define        USB_WIRELESS_BEACON_DIRECTED    (2 << 2)
+#define        USB_WIRELESS_BEACON_NONE        (3 << 2)
+       __le16 wPHYRates;       /* bit rates, Mbps */
+#define        USB_WIRELESS_PHY_53             (1 << 0)        /* always set */
+#define        USB_WIRELESS_PHY_80             (1 << 1)
+#define        USB_WIRELESS_PHY_107            (1 << 2)        /* always set */
+#define        USB_WIRELESS_PHY_160            (1 << 3)
+#define        USB_WIRELESS_PHY_200            (1 << 4)        /* always set */
+#define        USB_WIRELESS_PHY_320            (1 << 5)
+#define        USB_WIRELESS_PHY_400            (1 << 6)
+#define        USB_WIRELESS_PHY_480            (1 << 7)
+       __u8  bmTFITXPowerInfo; /* TFI power levels */
+       __u8  bmFFITXPowerInfo; /* FFI power levels */
+       __le16 bmBandGroup;
+       __u8  bReserved;
+} __attribute__((packed));
+
+/* USB 2.0 Extension descriptor */
+#define        USB_CAP_TYPE_EXT                2
+
+struct usb_ext_cap_descriptor {                /* Link Power Management */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __le32 bmAttributes;
+#define USB_LPM_SUPPORT                        (1 << 1)        /* supports LPM */
+#define USB_BESL_SUPPORT               (1 << 2)        /* supports BESL */
+#define USB_BESL_BASELINE_VALID                (1 << 3)        /* Baseline BESL valid*/
+#define USB_BESL_DEEP_VALID            (1 << 4)        /* Deep BESL valid */
+#define USB_GET_BESL_BASELINE(p)       (((p) & (0xf << 8)) >> 8)
+#define USB_GET_BESL_DEEP(p)           (((p) & (0xf << 12)) >> 12)
+} __attribute__((packed));
+
+#define USB_DT_USB_EXT_CAP_SIZE        7
+
+/*
+ * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB
+ * specific device level capabilities
+ */
+#define                USB_SS_CAP_TYPE         3
+struct usb_ss_cap_descriptor {         /* Link Power Management */
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bmAttributes;
+#define USB_LTM_SUPPORT                        (1 << 1) /* supports LTM */
+       __le16 wSpeedSupported;
+#define USB_LOW_SPEED_OPERATION                (1)      /* Low speed operation */
+#define USB_FULL_SPEED_OPERATION       (1 << 1) /* Full speed operation */
+#define USB_HIGH_SPEED_OPERATION       (1 << 2) /* High speed operation */
+#define USB_5GBPS_OPERATION            (1 << 3) /* Operation at 5Gbps */
+       __u8  bFunctionalitySupport;
+       __u8  bU1devExitLat;
+       __le16 bU2DevExitLat;
+} __attribute__((packed));
+
+#define USB_DT_USB_SS_CAP_SIZE 10
+
+/*
+ * Container ID Capability descriptor: Defines the instance unique ID used to
+ * identify the instance across all operating modes
+ */
+#define        CONTAINER_ID_TYPE       4
+struct usb_ss_container_id_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bReserved;
+       __u8  ContainerID[16]; /* 128-bit number */
+} __attribute__((packed));
+
+#define USB_DT_USB_SS_CONTN_ID_SIZE    20
+
+/*
+ * SuperSpeed Plus USB Capability descriptor: Defines the set of
+ * SuperSpeed Plus USB specific device level capabilities
+ */
+#define        USB_SSP_CAP_TYPE        0xa
+struct usb_ssp_cap_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+       __u8  bReserved;
+       __le32 bmAttributes;
+#define USB_SSP_SUBLINK_SPEED_ATTRIBS  (0x1f << 0) /* sublink speed entries */
+#define USB_SSP_SUBLINK_SPEED_IDS      (0xf << 5)  /* speed ID entries */
+       __u16  wFunctionalitySupport;
+#define USB_SSP_MIN_SUBLINK_SPEED_ATTRIBUTE_ID (0xf)
+#define USB_SSP_MIN_RX_LANE_COUNT              (0xf << 8)
+#define USB_SSP_MIN_TX_LANE_COUNT              (0xf << 12)
+       __le16 wReserved;
+       __le32 bmSublinkSpeedAttr[1]; /* list of sublink speed attrib entries */
+#define USB_SSP_SUBLINK_SPEED_SSID     (0xf)           /* sublink speed ID */
+#define USB_SSP_SUBLINK_SPEED_LSE      (0x3 << 4)      /* Lanespeed exponent */
+#define USB_SSP_SUBLINK_SPEED_ST       (0x3 << 6)      /* Sublink type */
+#define USB_SSP_SUBLINK_SPEED_RSVD     (0x3f << 8)     /* Reserved */
+#define USB_SSP_SUBLINK_SPEED_LP       (0x3 << 14)     /* Link protocol */
+#define USB_SSP_SUBLINK_SPEED_LSM      (0xff << 16)    /* Lanespeed mantissa */
+} __attribute__((packed));
+
+/*
+ * Precision time measurement capability descriptor: advertised by devices and
+ * hubs that support PTM
+ */
+#define        USB_PTM_CAP_TYPE        0xb
+struct usb_ptm_cap_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType;
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_DT_WIRELESS_ENDPOINT_COMP:  companion descriptor associated with
+ * each endpoint descriptor for a wireless device
+ */
+struct usb_wireless_ep_comp_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bMaxBurst;
+       __u8  bMaxSequence;
+       __le16 wMaxStreamDelay;
+       __le16 wOverTheAirPacketSize;
+       __u8  bOverTheAirInterval;
+       __u8  bmCompAttributes;
+#define USB_ENDPOINT_SWITCH_MASK       0x03    /* in bmCompAttributes */
+#define USB_ENDPOINT_SWITCH_NO         0
+#define USB_ENDPOINT_SWITCH_SWITCH     1
+#define USB_ENDPOINT_SWITCH_SCALE      2
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless
+ * host and a device for connection set up, mutual authentication, and
+ * exchanging short lived session keys.  The handshake depends on a CC.
+ */
+struct usb_handshake {
+       __u8 bMessageNumber;
+       __u8 bStatus;
+       __u8 tTKID[3];
+       __u8 bReserved;
+       __u8 CDID[16];
+       __u8 nonce[16];
+       __u8 MIC[8];
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC).
+ * A CC may also be set up using non-wireless secure channels (including
+ * wired USB!), and some devices may support CCs with multiple hosts.
+ */
+struct usb_connection_context {
+       __u8 CHID[16];          /* persistent host id */
+       __u8 CDID[16];          /* device id (unique w/in host context) */
+       __u8 CK[16];            /* connection key */
+} __attribute__((packed));
+
+/*-------------------------------------------------------------------------*/
+
+/* USB 2.0 defines three speeds, here's how Linux identifies them */
+
+enum usb_device_speed {
+       USB_SPEED_UNKNOWN = 0,                  /* enumerating */
+       USB_SPEED_LOW, USB_SPEED_FULL,          /* usb 1.1 */
+       USB_SPEED_HIGH,                         /* usb 2.0 */
+       USB_SPEED_WIRELESS,                     /* wireless (usb 2.5) */
+       USB_SPEED_SUPER,                        /* usb 3.0 */
+       USB_SPEED_SUPER_PLUS,                   /* usb 3.1 */
+};
+
+
+enum usb_device_state {
+       /* NOTATTACHED isn't in the USB spec, and this state acts
+        * the same as ATTACHED ... but it's clearer this way.
+        */
+       USB_STATE_NOTATTACHED = 0,
+
+       /* chapter 9 and authentication (wireless) device states */
+       USB_STATE_ATTACHED,
+       USB_STATE_POWERED,                      /* wired */
+       USB_STATE_RECONNECTING,                 /* auth */
+       USB_STATE_UNAUTHENTICATED,              /* auth */
+       USB_STATE_DEFAULT,                      /* limited function */
+       USB_STATE_ADDRESS,
+       USB_STATE_CONFIGURED,                   /* most functions */
+
+       USB_STATE_SUSPENDED
+
+       /* NOTE:  there are actually four different SUSPENDED
+        * states, returning to POWERED, DEFAULT, ADDRESS, or
+        * CONFIGURED respectively when SOF tokens flow again.
+        * At this level there's no difference between L1 and L2
+        * suspend states.  (L2 being original USB 1.1 suspend.)
+        */
+};
+
+enum usb3_link_state {
+       USB3_LPM_U0 = 0,
+       USB3_LPM_U1,
+       USB3_LPM_U2,
+       USB3_LPM_U3
+};
+
+/*
+ * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1.
+ * 0xff means the parent hub will accept transitions to U1, but will not
+ * initiate a transition.
+ *
+ * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to
+ * U1 after that many microseconds.  Timeouts of 0x80 to 0xFE are reserved
+ * values.
+ *
+ * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2.
+ * 0xff means the parent hub will accept transitions to U2, but will not
+ * initiate a transition.
+ *
+ * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to
+ * U2 after N*256 microseconds.  Therefore a U2 timeout value of 0x1 means a U2
+ * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means
+ * 65.024ms.
+ */
+#define USB3_LPM_DISABLED              0x0
+#define USB3_LPM_U1_MAX_TIMEOUT                0x7F
+#define USB3_LPM_U2_MAX_TIMEOUT                0xFE
+#define USB3_LPM_DEVICE_INITIATED      0xFF
+
+struct usb_set_sel_req {
+       __u8    u1_sel;
+       __u8    u1_pel;
+       __le16  u2_sel;
+       __le16  u2_pel;
+} __attribute__ ((packed));
+
+/*
+ * The Set System Exit Latency control transfer provides one byte each for
+ * U1 SEL and U1 PEL, so the max exit latency is 0xFF.  U2 SEL and U2 PEL each
+ * are two bytes long.
+ */
+#define USB3_LPM_MAX_U1_SEL_PEL                0xFF
+#define USB3_LPM_MAX_U2_SEL_PEL                0xFFFF
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * As per USB compliance update, a device that is actively drawing
+ * more than 100mA from USB must report itself as bus-powered in
+ * the GetStatus(DEVICE) call.
+ * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34
+ */
+#define USB_SELF_POWER_VBUS_MAX_DRAW           100
+
+#endif /* __LINUX_USB_CH9_H */
diff --git a/lib/libdss-include/linux/usb/functionfs.h b/lib/libdss-include/linux/usb/functionfs.h
new file mode 100644 (file)
index 0000000..3585d3c
--- /dev/null
@@ -0,0 +1,286 @@
+#ifndef __LINUX_FUNCTIONFS_H__
+#define __LINUX_FUNCTIONFS_H__
+
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#include <linux/usb/ch9.h>
+
+
+enum {
+       FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
+       FUNCTIONFS_STRINGS_MAGIC = 2,
+       FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
+};
+
+enum functionfs_flags {
+       FUNCTIONFS_HAS_FS_DESC = 1,
+       FUNCTIONFS_HAS_HS_DESC = 2,
+       FUNCTIONFS_HAS_SS_DESC = 4,
+       FUNCTIONFS_HAS_MS_OS_DESC = 8,
+       FUNCTIONFS_VIRTUAL_ADDR = 16,
+       FUNCTIONFS_EVENTFD = 32,
+};
+
+/* Descriptor of an non-audio endpoint */
+struct usb_endpoint_descriptor_no_audio {
+       __u8  bLength;
+       __u8  bDescriptorType;
+
+       __u8  bEndpointAddress;
+       __u8  bmAttributes;
+       __le16 wMaxPacketSize;
+       __u8  bInterval;
+} __attribute__((packed));
+
+struct usb_functionfs_descs_head_v2 {
+       __le32 magic;
+       __le32 length;
+       __le32 flags;
+       /*
+        * __le32 fs_count, hs_count, fs_count; must be included manually in
+        * the structure taking flags into consideration.
+        */
+} __attribute__((packed));
+
+/* Legacy format, deprecated as of 3.14. */
+struct usb_functionfs_descs_head {
+       __le32 magic;
+       __le32 length;
+       __le32 fs_count;
+       __le32 hs_count;
+} __attribute__((packed, deprecated));
+
+/* MS OS Descriptor header */
+struct usb_os_desc_header {
+       __u8    interface;
+       __le32  dwLength;
+       __le16  bcdVersion;
+       __le16  wIndex;
+       union {
+               struct {
+                       __u8    bCount;
+                       __u8    Reserved;
+               };
+               __le16  wCount;
+       };
+} __attribute__((packed));
+
+struct usb_ext_compat_desc {
+       __u8    bFirstInterfaceNumber;
+       __u8    Reserved1;
+       __u8    CompatibleID[8];
+       __u8    SubCompatibleID[8];
+       __u8    Reserved2[6];
+};
+
+struct usb_ext_prop_desc {
+       __le32  dwSize;
+       __le32  dwPropertyDataType;
+       __le16  wPropertyNameLength;
+} __attribute__((packed));
+
+
+/*
+ * Descriptors format:
+ *
+ * | off | name      | type         | description                          |
+ * |-----+-----------+--------------+--------------------------------------|
+ * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC_V2      |
+ * |   4 | length    | LE32         | length of the whole data chunk       |
+ * |   8 | flags     | LE32         | combination of functionfs_flags      |
+ * |     | fs_count  | LE32         | number of full-speed descriptors     |
+ * |     | hs_count  | LE32         | number of high-speed descriptors     |
+ * |     | ss_count  | LE32         | number of super-speed descriptors    |
+ * |     | os_count  | LE32         | number of MS OS descriptors          |
+ * |     | fs_descrs | Descriptor[] | list of full-speed descriptors       |
+ * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
+ * |     | ss_descrs | Descriptor[] | list of super-speed descriptors      |
+ * |     | os_descrs | OSDesc[]     | list of MS OS descriptors            |
+ *
+ * Depending on which flags are set, various fields may be missing in the
+ * structure.  Any flags that are not recognised cause the whole block to be
+ * rejected with -ENOSYS.
+ *
+ * Legacy descriptors format (deprecated as of 3.14):
+ *
+ * | off | name      | type         | description                          |
+ * |-----+-----------+--------------+--------------------------------------|
+ * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC         |
+ * |   4 | length    | LE32         | length of the whole data chunk       |
+ * |   8 | fs_count  | LE32         | number of full-speed descriptors     |
+ * |  12 | hs_count  | LE32         | number of high-speed descriptors     |
+ * |  16 | fs_descrs | Descriptor[] | list of full-speed descriptors       |
+ * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |
+ *
+ * All numbers must be in little endian order.
+ *
+ * Descriptor[] is an array of valid USB descriptors which have the following
+ * format:
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | bLength         | U8   | length of the descriptor |
+ * |   1 | bDescriptorType | U8   | descriptor type          |
+ * |   2 | payload         |      | descriptor's payload     |
+ *
+ * OSDesc[] is an array of valid MS OS Feature Descriptors which have one of
+ * the following formats:
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | inteface        | U8   | related interface number |
+ * |   1 | dwLength        | U32  | length of the descriptor |
+ * |   5 | bcdVersion      | U16  | currently supported: 1   |
+ * |   7 | wIndex          | U16  | currently supported: 4   |
+ * |   9 | bCount          | U8   | number of ext. compat.   |
+ * |  10 | Reserved        | U8   | 0                        |
+ * |  11 | ExtCompat[]     |      | list of ext. compat. d.  |
+ *
+ * | off | name            | type | description              |
+ * |-----+-----------------+------+--------------------------|
+ * |   0 | inteface        | U8   | related interface number |
+ * |   1 | dwLength        | U32  | length of the descriptor |
+ * |   5 | bcdVersion      | U16  | currently supported: 1   |
+ * |   7 | wIndex          | U16  | currently supported: 5   |
+ * |   9 | wCount          | U16  | number of ext. compat.   |
+ * |  11 | ExtProp[]       |      | list of ext. prop. d.    |
+ *
+ * ExtCompat[] is an array of valid Extended Compatiblity descriptors
+ * which have the following format:
+ *
+ * | off | name                  | type | description                         |
+ * |-----+-----------------------+------+-------------------------------------|
+ * |   0 | bFirstInterfaceNumber | U8   | index of the interface or of the 1st|
+ * |     |                       |      | interface in an IAD group           |
+ * |   1 | Reserved              | U8   | 0                                   |
+ * |   2 | CompatibleID          | U8[8]| compatible ID string                |
+ * |  10 | SubCompatibleID       | U8[8]| subcompatible ID string             |
+ * |  18 | Reserved              | U8[6]| 0                                   |
+ *
+ * ExtProp[] is an array of valid Extended Properties descriptors
+ * which have the following format:
+ *
+ * | off | name                  | type | description                         |
+ * |-----+-----------------------+------+-------------------------------------|
+ * |   0 | dwSize                | U32  | length of the descriptor            |
+ * |   4 | dwPropertyDataType    | U32  | 1..7                                |
+ * |   8 | wPropertyNameLength   | U16  | bPropertyName length (NL)           |
+ * |  10 | bPropertyName         |U8[NL]| name of this property               |
+ * |10+NL| dwPropertyDataLength  | U32  | bPropertyData length (DL)           |
+ * |14+NL| bProperty             |U8[DL]| payload of this property            |
+ */
+
+struct usb_functionfs_strings_head {
+       __le32 magic;
+       __le32 length;
+       __le32 str_count;
+       __le32 lang_count;
+} __attribute__((packed));
+
+/*
+ * Strings format:
+ *
+ * | off | name       | type                  | description                |
+ * |-----+------------+-----------------------+----------------------------|
+ * |   0 | magic      | LE32                  | FUNCTIONFS_STRINGS_MAGIC   |
+ * |   4 | length     | LE32                  | length of the data chunk   |
+ * |   8 | str_count  | LE32                  | number of strings          |
+ * |  12 | lang_count | LE32                  | number of languages        |
+ * |  16 | stringtab  | StringTab[lang_count] | table of strings per lang  |
+ *
+ * For each language there is one stringtab entry (ie. there are lang_count
+ * stringtab entires).  Each StringTab has following format:
+ *
+ * | off | name    | type              | description                        |
+ * |-----+---------+-------------------+------------------------------------|
+ * |   0 | lang    | LE16              | language code                      |
+ * |   2 | strings | String[str_count] | array of strings in given language |
+ *
+ * For each string there is one strings entry (ie. there are str_count
+ * string entries).  Each String is a NUL terminated string encoded in
+ * UTF-8.
+ */
+
+
+
+/*
+ * Events are delivered on the ep0 file descriptor, when the user mode driver
+ * reads from this file descriptor after writing the descriptors.  Don't
+ * stop polling this descriptor.
+ */
+
+enum usb_functionfs_event_type {
+       FUNCTIONFS_BIND,
+       FUNCTIONFS_UNBIND,
+
+       FUNCTIONFS_ENABLE,
+       FUNCTIONFS_DISABLE,
+
+       FUNCTIONFS_SETUP,
+
+       FUNCTIONFS_SUSPEND,
+       FUNCTIONFS_RESUME
+};
+
+/* NOTE:  this structure must stay the same size and layout on
+ * both 32-bit and 64-bit kernels.
+ */
+struct usb_functionfs_event {
+       union {
+               /* SETUP: packet; DATA phase i/o precedes next event
+                *(setup.bmRequestType & USB_DIR_IN) flags direction */
+               struct usb_ctrlrequest  setup;
+       } __attribute__((packed)) u;
+
+       /* enum usb_functionfs_event_type */
+       __u8                            type;
+       __u8                            _pad[3];
+} __attribute__((packed));
+
+
+/* Endpoint ioctls */
+/* The same as in gadgetfs */
+
+/* IN transfers may be reported to the gadget driver as complete
+ *     when the fifo is loaded, before the host reads the data;
+ * OUT transfers may be reported to the host's "client" driver as
+ *     complete when they're sitting in the FIFO unread.
+ * THIS returns how many bytes are "unclaimed" in the endpoint fifo
+ * (needed for precise fault handling, when the hardware allows it)
+ */
+#define        FUNCTIONFS_FIFO_STATUS  _IO('g', 1)
+
+/* discards any unclaimed data in the fifo. */
+#define        FUNCTIONFS_FIFO_FLUSH   _IO('g', 2)
+
+/* resets endpoint halt+toggle; used to implement set_interface.
+ * some hardware (like pxa2xx) can't support this.
+ */
+#define        FUNCTIONFS_CLEAR_HALT   _IO('g', 3)
+
+/* Specific for functionfs */
+
+/*
+ * Returns reverse mapping of an interface.  Called on EP0.  If there
+ * is no such interface returns -EDOM.  If function is not active
+ * returns -ENODEV.
+ */
+#define        FUNCTIONFS_INTERFACE_REVMAP     _IO('g', 128)
+
+/*
+ * Returns real bEndpointAddress of an endpoint.  If function is not
+ * active returns -ENODEV.
+ */
+#define        FUNCTIONFS_ENDPOINT_REVMAP      _IO('g', 129)
+
+/*
+ * Returns endpoint descriptor. If function is not active returns -ENODEV.
+ */
+#define        FUNCTIONFS_ENDPOINT_DESC        _IOR('g', 130, \
+                                            struct usb_endpoint_descriptor)
+
+
+
+#endif /* __LINUX_FUNCTIONFS_H__ */
diff --git a/lib/libdss-include/linux/usb/g_printer.h b/lib/libdss-include/linux/usb/g_printer.h
new file mode 100644 (file)
index 0000000..6178fde
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * g_printer.h -- Header file for USB Printer gadget driver
+ *
+ * Copyright (C) 2007 Craig W. Nadler
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_USB_G_PRINTER_H
+#define __LINUX_USB_G_PRINTER_H
+
+#define PRINTER_NOT_ERROR      0x08
+#define PRINTER_SELECTED       0x10
+#define PRINTER_PAPER_EMPTY    0x20
+
+/* The 'g' code is also used by gadgetfs ioctl requests.
+ * Don't add any colliding codes to either driver, and keep
+ * them in unique ranges (size 0x20 for now).
+ */
+#define GADGET_GET_PRINTER_STATUS      _IOR('g', 0x21, unsigned char)
+#define GADGET_SET_PRINTER_STATUS      _IOWR('g', 0x22, unsigned char)
+
+#endif /* __LINUX_USB_G_PRINTER_H */
diff --git a/lib/libdss-include/linux/usb/gadgetfs.h b/lib/libdss-include/linux/usb/gadgetfs.h
new file mode 100644 (file)
index 0000000..0bb12e0
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Filesystem based user-mode API to USB Gadget controller hardware
+ *
+ * Other than ep0 operations, most things are done by read() and write()
+ * on endpoint files found in one directory.  They are configured by
+ * writing descriptors, and then may be used for normal stream style
+ * i/o requests.  When ep0 is configured, the device can enumerate;
+ * when it's closed, the device disconnects from usb.  Operations on
+ * ep0 require ioctl() operations.
+ *
+ * Configuration and device descriptors get written to /dev/gadget/$CHIP,
+ * which may then be used to read usb_gadgetfs_event structs.  The driver
+ * may activate endpoints as it handles SET_CONFIGURATION setup events,
+ * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT
+ * then performing data transfers by reading or writing.
+ */
+
+#ifndef __LINUX_USB_GADGETFS_H
+#define __LINUX_USB_GADGETFS_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#include <linux/usb/ch9.h>
+
+/*
+ * Events are delivered on the ep0 file descriptor, when the user mode driver
+ * reads from this file descriptor after writing the descriptors.  Don't
+ * stop polling this descriptor.
+ */
+
+enum usb_gadgetfs_event_type {
+       GADGETFS_NOP = 0,
+
+       GADGETFS_CONNECT,
+       GADGETFS_DISCONNECT,
+       GADGETFS_SETUP,
+       GADGETFS_SUSPEND,
+       /* and likely more ! */
+};
+
+/* NOTE:  this structure must stay the same size and layout on
+ * both 32-bit and 64-bit kernels.
+ */
+struct usb_gadgetfs_event {
+       union {
+               /* NOP, DISCONNECT, SUSPEND: nothing
+                * ... some hardware can't report disconnection
+                */
+
+               /* CONNECT: just the speed */
+               enum usb_device_speed   speed;
+
+               /* SETUP: packet; DATA phase i/o precedes next event
+                *(setup.bmRequestType & USB_DIR_IN) flags direction
+                * ... includes SET_CONFIGURATION, SET_INTERFACE
+                */
+               struct usb_ctrlrequest  setup;
+       } u;
+       enum usb_gadgetfs_event_type    type;
+};
+
+
+/* The 'g' code is also used by printer gadget ioctl requests.
+ * Don't add any colliding codes to either driver, and keep
+ * them in unique ranges (size 0x20 for now).
+ */
+
+/* endpoint ioctls */
+
+/* IN transfers may be reported to the gadget driver as complete
+ *     when the fifo is loaded, before the host reads the data;
+ * OUT transfers may be reported to the host's "client" driver as
+ *     complete when they're sitting in the FIFO unread.
+ * THIS returns how many bytes are "unclaimed" in the endpoint fifo
+ * (needed for precise fault handling, when the hardware allows it)
+ */
+#define        GADGETFS_FIFO_STATUS    _IO('g', 1)
+
+/* discards any unclaimed data in the fifo. */
+#define        GADGETFS_FIFO_FLUSH     _IO('g', 2)
+
+/* resets endpoint halt+toggle; used to implement set_interface.
+ * some hardware (like pxa2xx) can't support this.
+ */
+#define        GADGETFS_CLEAR_HALT     _IO('g', 3)
+
+#endif /* __LINUX_USB_GADGETFS_H */
diff --git a/lib/libdss-include/linux/usb/midi.h b/lib/libdss-include/linux/usb/midi.h
new file mode 100644 (file)
index 0000000..c8c52e3
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * <linux/usb/midi.h> -- USB MIDI definitions.
+ *
+ * Copyright (C) 2006 Thumtronics Pty Ltd.
+ * Developed for Thumtronics by Grey Innovation
+ * Ben Williamson <ben.williamson@greyinnovation.com>
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * License ("GPL") version 2, as published by the Free Software Foundation.
+ *
+ * This file holds USB constants and structures defined
+ * by the USB Device Class Definition for MIDI Devices.
+ * Comments below reference relevant sections of that document:
+ *
+ * http://www.usb.org/developers/devclass_docs/midi10.pdf
+ */
+
+#ifndef __LINUX_USB_MIDI_H
+#define __LINUX_USB_MIDI_H
+
+#include <linux/types.h>
+
+/* A.1  MS Class-Specific Interface Descriptor Subtypes */
+#define USB_MS_HEADER          0x01
+#define USB_MS_MIDI_IN_JACK    0x02
+#define USB_MS_MIDI_OUT_JACK   0x03
+#define USB_MS_ELEMENT         0x04
+
+/* A.2  MS Class-Specific Endpoint Descriptor Subtypes */
+#define USB_MS_GENERAL         0x01
+
+/* A.3  MS MIDI IN and OUT Jack Types */
+#define USB_MS_EMBEDDED                0x01
+#define USB_MS_EXTERNAL                0x02
+
+/* 6.1.2.1  Class-Specific MS Interface Header Descriptor */
+struct usb_ms_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubtype;
+       __le16 bcdMSC;
+       __le16 wTotalLength;
+} __attribute__ ((packed));
+
+#define USB_DT_MS_HEADER_SIZE  7
+
+/* 6.1.2.2  MIDI IN Jack Descriptor */
+struct usb_midi_in_jack_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* USB_MS_MIDI_IN_JACK */
+       __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
+       __u8  bJackID;
+       __u8  iJack;
+} __attribute__ ((packed));
+
+#define USB_DT_MIDI_IN_SIZE    6
+
+struct usb_midi_source_pin {
+       __u8  baSourceID;
+       __u8  baSourcePin;
+} __attribute__ ((packed));
+
+/* 6.1.2.3  MIDI OUT Jack Descriptor */
+struct usb_midi_out_jack_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;          /* USB_DT_CS_INTERFACE */
+       __u8  bDescriptorSubtype;       /* USB_MS_MIDI_OUT_JACK */
+       __u8  bJackType;                /* USB_MS_EMBEDDED/EXTERNAL */
+       __u8  bJackID;
+       __u8  bNrInputPins;             /* p */
+       struct usb_midi_source_pin pins[]; /* [p] */
+       /*__u8  iJack;  -- omitted due to variable-sized pins[] */
+} __attribute__ ((packed));
+
+#define USB_DT_MIDI_OUT_SIZE(p)        (7 + 2 * (p))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p)                        \
+struct usb_midi_out_jack_descriptor_##p {                      \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bJackType;                                        \
+       __u8  bJackID;                                          \
+       __u8  bNrInputPins;                                     \
+       struct usb_midi_source_pin pins[p];                     \
+       __u8  iJack;                                            \
+} __attribute__ ((packed))
+
+/* 6.2.2  Class-Specific MS Bulk Data Endpoint Descriptor */
+struct usb_ms_endpoint_descriptor {
+       __u8  bLength;                  /* 4+n */
+       __u8  bDescriptorType;          /* USB_DT_CS_ENDPOINT */
+       __u8  bDescriptorSubtype;       /* USB_MS_GENERAL */
+       __u8  bNumEmbMIDIJack;          /* n */
+       __u8  baAssocJackID[];          /* [n] */
+} __attribute__ ((packed));
+
+#define USB_DT_MS_ENDPOINT_SIZE(n)     (4 + (n))
+
+/* As above, but more useful for defining your own descriptors: */
+#define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n)                  \
+struct usb_ms_endpoint_descriptor_##n {                                \
+       __u8  bLength;                                          \
+       __u8  bDescriptorType;                                  \
+       __u8  bDescriptorSubtype;                               \
+       __u8  bNumEmbMIDIJack;                                  \
+       __u8  baAssocJackID[n];                                 \
+} __attribute__ ((packed))
+
+#endif /* __LINUX_USB_MIDI_H */
diff --git a/lib/libdss-include/linux/usb/tmc.h b/lib/libdss-include/linux/usb/tmc.h
new file mode 100644 (file)
index 0000000..c045ae1
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
+ * Copyright (C) 2008 Novell, Inc.
+ * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
+ *
+ * This file holds USB constants defined by the USB Device Class
+ * Definition for Test and Measurement devices published by the USB-IF.
+ *
+ * It also has the ioctl definitions for the usbtmc kernel driver that
+ * userspace needs to know about.
+ */
+
+#ifndef __LINUX_USB_TMC_H
+#define __LINUX_USB_TMC_H
+
+/* USB TMC status values */
+#define USBTMC_STATUS_SUCCESS                          0x01
+#define USBTMC_STATUS_PENDING                          0x02
+#define USBTMC_STATUS_FAILED                           0x80
+#define USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS         0x81
+#define USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS            0x82
+#define USBTMC_STATUS_SPLIT_IN_PROGRESS                        0x83
+
+/* USB TMC requests values */
+#define USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT         1
+#define USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS     2
+#define USBTMC_REQUEST_INITIATE_ABORT_BULK_IN          3
+#define USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS      4
+#define USBTMC_REQUEST_INITIATE_CLEAR                  5
+#define USBTMC_REQUEST_CHECK_CLEAR_STATUS              6
+#define USBTMC_REQUEST_GET_CAPABILITIES                        7
+#define USBTMC_REQUEST_INDICATOR_PULSE                 64
+
+/* Request values for USBTMC driver's ioctl entry point */
+#define USBTMC_IOC_NR                  91
+#define USBTMC_IOCTL_INDICATOR_PULSE   _IO(USBTMC_IOC_NR, 1)
+#define USBTMC_IOCTL_CLEAR             _IO(USBTMC_IOC_NR, 2)
+#define USBTMC_IOCTL_ABORT_BULK_OUT    _IO(USBTMC_IOC_NR, 3)
+#define USBTMC_IOCTL_ABORT_BULK_IN     _IO(USBTMC_IOC_NR, 4)
+#define USBTMC_IOCTL_CLEAR_OUT_HALT    _IO(USBTMC_IOC_NR, 6)
+#define USBTMC_IOCTL_CLEAR_IN_HALT     _IO(USBTMC_IOC_NR, 7)
+
+#endif
diff --git a/lib/libdss-include/linux/usb/video.h b/lib/libdss-include/linux/usb/video.h
new file mode 100644 (file)
index 0000000..3b3b95e
--- /dev/null
@@ -0,0 +1,568 @@
+/*
+ * USB Video Class definitions.
+ *
+ * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be>
+ *
+ * This file holds USB constants and structures defined by the USB Device
+ * Class Definition for Video Devices. Unless otherwise stated, comments
+ * below reference relevant sections of the USB Video Class 1.1 specification
+ * available at
+ *
+ * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
+ */
+
+#ifndef __LINUX_USB_VIDEO_H
+#define __LINUX_USB_VIDEO_H
+
+#include <linux/types.h>
+
+/* --------------------------------------------------------------------------
+ * UVC constants
+ */
+
+/* A.2. Video Interface Subclass Codes */
+#define UVC_SC_UNDEFINED                               0x00
+#define UVC_SC_VIDEOCONTROL                            0x01
+#define UVC_SC_VIDEOSTREAMING                          0x02
+#define UVC_SC_VIDEO_INTERFACE_COLLECTION              0x03
+
+/* A.3. Video Interface Protocol Codes */
+#define UVC_PC_PROTOCOL_UNDEFINED                      0x00
+
+/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
+#define UVC_VC_DESCRIPTOR_UNDEFINED                    0x00
+#define UVC_VC_HEADER                                  0x01
+#define UVC_VC_INPUT_TERMINAL                          0x02
+#define UVC_VC_OUTPUT_TERMINAL                         0x03
+#define UVC_VC_SELECTOR_UNIT                           0x04
+#define UVC_VC_PROCESSING_UNIT                         0x05
+#define UVC_VC_EXTENSION_UNIT                          0x06
+
+/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */
+#define UVC_VS_UNDEFINED                               0x00
+#define UVC_VS_INPUT_HEADER                            0x01
+#define UVC_VS_OUTPUT_HEADER                           0x02
+#define UVC_VS_STILL_IMAGE_FRAME                       0x03
+#define UVC_VS_FORMAT_UNCOMPRESSED                     0x04
+#define UVC_VS_FRAME_UNCOMPRESSED                      0x05
+#define UVC_VS_FORMAT_MJPEG                            0x06
+#define UVC_VS_FRAME_MJPEG                             0x07
+#define UVC_VS_FORMAT_MPEG2TS                          0x0a
+#define UVC_VS_FORMAT_DV                               0x0c
+#define UVC_VS_COLORFORMAT                             0x0d
+#define UVC_VS_FORMAT_FRAME_BASED                      0x10
+#define UVC_VS_FRAME_FRAME_BASED                       0x11
+#define UVC_VS_FORMAT_STREAM_BASED                     0x12
+
+/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */
+#define UVC_EP_UNDEFINED                               0x00
+#define UVC_EP_GENERAL                                 0x01
+#define UVC_EP_ENDPOINT                                        0x02
+#define UVC_EP_INTERRUPT                               0x03
+
+/* A.8. Video Class-Specific Request Codes */
+#define UVC_RC_UNDEFINED                               0x00
+#define UVC_SET_CUR                                    0x01
+#define UVC_GET_CUR                                    0x81
+#define UVC_GET_MIN                                    0x82
+#define UVC_GET_MAX                                    0x83
+#define UVC_GET_RES                                    0x84
+#define UVC_GET_LEN                                    0x85
+#define UVC_GET_INFO                                   0x86
+#define UVC_GET_DEF                                    0x87
+
+/* A.9.1. VideoControl Interface Control Selectors */
+#define UVC_VC_CONTROL_UNDEFINED                       0x00
+#define UVC_VC_VIDEO_POWER_MODE_CONTROL                        0x01
+#define UVC_VC_REQUEST_ERROR_CODE_CONTROL              0x02
+
+/* A.9.2. Terminal Control Selectors */
+#define UVC_TE_CONTROL_UNDEFINED                       0x00
+
+/* A.9.3. Selector Unit Control Selectors */
+#define UVC_SU_CONTROL_UNDEFINED                       0x00
+#define UVC_SU_INPUT_SELECT_CONTROL                    0x01
+
+/* A.9.4. Camera Terminal Control Selectors */
+#define UVC_CT_CONTROL_UNDEFINED                       0x00
+#define UVC_CT_SCANNING_MODE_CONTROL                   0x01
+#define UVC_CT_AE_MODE_CONTROL                         0x02
+#define UVC_CT_AE_PRIORITY_CONTROL                     0x03
+#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL          0x04
+#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL          0x05
+#define UVC_CT_FOCUS_ABSOLUTE_CONTROL                  0x06
+#define UVC_CT_FOCUS_RELATIVE_CONTROL                  0x07
+#define UVC_CT_FOCUS_AUTO_CONTROL                      0x08
+#define UVC_CT_IRIS_ABSOLUTE_CONTROL                   0x09
+#define UVC_CT_IRIS_RELATIVE_CONTROL                   0x0a
+#define UVC_CT_ZOOM_ABSOLUTE_CONTROL                   0x0b
+#define UVC_CT_ZOOM_RELATIVE_CONTROL                   0x0c
+#define UVC_CT_PANTILT_ABSOLUTE_CONTROL                        0x0d
+#define UVC_CT_PANTILT_RELATIVE_CONTROL                        0x0e
+#define UVC_CT_ROLL_ABSOLUTE_CONTROL                   0x0f
+#define UVC_CT_ROLL_RELATIVE_CONTROL                   0x10
+#define UVC_CT_PRIVACY_CONTROL                         0x11
+
+/* A.9.5. Processing Unit Control Selectors */
+#define UVC_PU_CONTROL_UNDEFINED                       0x00
+#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL          0x01
+#define UVC_PU_BRIGHTNESS_CONTROL                      0x02
+#define UVC_PU_CONTRAST_CONTROL                                0x03
+#define UVC_PU_GAIN_CONTROL                            0x04
+#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL            0x05
+#define UVC_PU_HUE_CONTROL                             0x06
+#define UVC_PU_SATURATION_CONTROL                      0x07
+#define UVC_PU_SHARPNESS_CONTROL                       0x08
+#define UVC_PU_GAMMA_CONTROL                           0x09
+#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL       0x0a
+#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL  0x0b
+#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL         0x0c
+#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL    0x0d
+#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL              0x0e
+#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL                0x0f
+#define UVC_PU_HUE_AUTO_CONTROL                                0x10
+#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL           0x11
+#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL              0x12
+
+/* A.9.7. VideoStreaming Interface Control Selectors */
+#define UVC_VS_CONTROL_UNDEFINED                       0x00
+#define UVC_VS_PROBE_CONTROL                           0x01
+#define UVC_VS_COMMIT_CONTROL                          0x02
+#define UVC_VS_STILL_PROBE_CONTROL                     0x03
+#define UVC_VS_STILL_COMMIT_CONTROL                    0x04
+#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL             0x05
+#define UVC_VS_STREAM_ERROR_CODE_CONTROL               0x06
+#define UVC_VS_GENERATE_KEY_FRAME_CONTROL              0x07
+#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL            0x08
+#define UVC_VS_SYNC_DELAY_CONTROL                      0x09
+
+/* B.1. USB Terminal Types */
+#define UVC_TT_VENDOR_SPECIFIC                         0x0100
+#define UVC_TT_STREAMING                               0x0101
+
+/* B.2. Input Terminal Types */
+#define UVC_ITT_VENDOR_SPECIFIC                                0x0200
+#define UVC_ITT_CAMERA                                 0x0201
+#define UVC_ITT_MEDIA_TRANSPORT_INPUT                  0x0202
+
+/* B.3. Output Terminal Types */
+#define UVC_OTT_VENDOR_SPECIFIC                                0x0300
+#define UVC_OTT_DISPLAY                                        0x0301
+#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT                 0x0302
+
+/* B.4. External Terminal Types */
+#define UVC_EXTERNAL_VENDOR_SPECIFIC                   0x0400
+#define UVC_COMPOSITE_CONNECTOR                                0x0401
+#define UVC_SVIDEO_CONNECTOR                           0x0402
+#define UVC_COMPONENT_CONNECTOR                                0x0403
+
+/* 2.4.2.2. Status Packet Type */
+#define UVC_STATUS_TYPE_CONTROL                                1
+#define UVC_STATUS_TYPE_STREAMING                      2
+
+/* 2.4.3.3. Payload Header Information */
+#define UVC_STREAM_EOH                                 (1 << 7)
+#define UVC_STREAM_ERR                                 (1 << 6)
+#define UVC_STREAM_STI                                 (1 << 5)
+#define UVC_STREAM_RES                                 (1 << 4)
+#define UVC_STREAM_SCR                                 (1 << 3)
+#define UVC_STREAM_PTS                                 (1 << 2)
+#define UVC_STREAM_EOF                                 (1 << 1)
+#define UVC_STREAM_FID                                 (1 << 0)
+
+/* 4.1.2. Control Capabilities */
+#define UVC_CONTROL_CAP_GET                            (1 << 0)
+#define UVC_CONTROL_CAP_SET                            (1 << 1)
+#define UVC_CONTROL_CAP_DISABLED                       (1 << 2)
+#define UVC_CONTROL_CAP_AUTOUPDATE                     (1 << 3)
+#define UVC_CONTROL_CAP_ASYNCHRONOUS                   (1 << 4)
+
+/* ------------------------------------------------------------------------
+ * UVC structures
+ */
+
+/* All UVC descriptors have these 3 fields at the beginning */
+struct uvc_descriptor_header {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+} __attribute__((packed));
+
+/* 3.7.2. Video Control Interface Header Descriptor */
+struct uvc_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u16 bcdUVC;
+       __u16 wTotalLength;
+       __u32 dwClockFrequency;
+       __u8  bInCollection;
+       __u8  baInterfaceNr[];
+} __attribute__((__packed__));
+
+#define UVC_DT_HEADER_SIZE(n)                          (12+(n))
+
+#define UVC_HEADER_DESCRIPTOR(n) \
+       uvc_header_descriptor_##n
+
+#define DECLARE_UVC_HEADER_DESCRIPTOR(n)               \
+struct UVC_HEADER_DESCRIPTOR(n) {                      \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u16 bcdUVC;                                   \
+       __u16 wTotalLength;                             \
+       __u32 dwClockFrequency;                         \
+       __u8  bInCollection;                            \
+       __u8  baInterfaceNr[n];                         \
+} __attribute__ ((packed))
+
+/* 3.7.2.1. Input Terminal Descriptor */
+struct uvc_input_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+} __attribute__((__packed__));
+
+#define UVC_DT_INPUT_TERMINAL_SIZE                     8
+
+/* 3.7.2.2. Output Terminal Descriptor */
+struct uvc_output_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  bSourceID;
+       __u8  iTerminal;
+} __attribute__((__packed__));
+
+#define UVC_DT_OUTPUT_TERMINAL_SIZE                    9
+
+/* 3.7.2.3. Camera Terminal Descriptor */
+struct uvc_camera_terminal_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bTerminalID;
+       __u16 wTerminalType;
+       __u8  bAssocTerminal;
+       __u8  iTerminal;
+       __u16 wObjectiveFocalLengthMin;
+       __u16 wObjectiveFocalLengthMax;
+       __u16 wOcularFocalLength;
+       __u8  bControlSize;
+       __u8  bmControls[3];
+} __attribute__((__packed__));
+
+#define UVC_DT_CAMERA_TERMINAL_SIZE(n)                 (15+(n))
+
+/* 3.7.2.4. Selector Unit Descriptor */
+struct uvc_selector_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  bNrInPins;
+       __u8  baSourceID[0];
+       __u8  iSelector;
+} __attribute__((__packed__));
+
+#define UVC_DT_SELECTOR_UNIT_SIZE(n)                   (6+(n))
+
+#define UVC_SELECTOR_UNIT_DESCRIPTOR(n)        \
+       uvc_selector_unit_descriptor_##n
+
+#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n)        \
+struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) {               \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bUnitID;                                  \
+       __u8  bNrInPins;                                \
+       __u8  baSourceID[n];                            \
+       __u8  iSelector;                                \
+} __attribute__ ((packed))
+
+/* 3.7.2.5. Processing Unit Descriptor */
+struct uvc_processing_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  bSourceID;
+       __u16 wMaxMultiplier;
+       __u8  bControlSize;
+       __u8  bmControls[2];
+       __u8  iProcessing;
+} __attribute__((__packed__));
+
+#define UVC_DT_PROCESSING_UNIT_SIZE(n)                 (9+(n))
+
+/* 3.7.2.6. Extension Unit Descriptor */
+struct uvc_extension_unit_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bUnitID;
+       __u8  guidExtensionCode[16];
+       __u8  bNumControls;
+       __u8  bNrInPins;
+       __u8  baSourceID[0];
+       __u8  bControlSize;
+       __u8  bmControls[0];
+       __u8  iExtension;
+} __attribute__((__packed__));
+
+#define UVC_DT_EXTENSION_UNIT_SIZE(p, n)               (24+(p)+(n))
+
+#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \
+       uvc_extension_unit_descriptor_##p_##n
+
+#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n)    \
+struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) {           \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bUnitID;                                  \
+       __u8  guidExtensionCode[16];                    \
+       __u8  bNumControls;                             \
+       __u8  bNrInPins;                                \
+       __u8  baSourceID[p];                            \
+       __u8  bControlSize;                             \
+       __u8  bmControls[n];                            \
+       __u8  iExtension;                               \
+} __attribute__ ((packed))
+
+/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */
+struct uvc_control_endpoint_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u16 wMaxTransferSize;
+} __attribute__((__packed__));
+
+#define UVC_DT_CONTROL_ENDPOINT_SIZE                   5
+
+/* 3.9.2.1. Input Header Descriptor */
+struct uvc_input_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bNumFormats;
+       __u16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bmInfo;
+       __u8  bTerminalLink;
+       __u8  bStillCaptureMethod;
+       __u8  bTriggerSupport;
+       __u8  bTriggerUsage;
+       __u8  bControlSize;
+       __u8  bmaControls[];
+} __attribute__((__packed__));
+
+#define UVC_DT_INPUT_HEADER_SIZE(n, p)                 (13+(n*p))
+
+#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \
+       uvc_input_header_descriptor_##n_##p
+
+#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p)      \
+struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) {             \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bNumFormats;                              \
+       __u16 wTotalLength;                             \
+       __u8  bEndpointAddress;                         \
+       __u8  bmInfo;                                   \
+       __u8  bTerminalLink;                            \
+       __u8  bStillCaptureMethod;                      \
+       __u8  bTriggerSupport;                          \
+       __u8  bTriggerUsage;                            \
+       __u8  bControlSize;                             \
+       __u8  bmaControls[p][n];                        \
+} __attribute__ ((packed))
+
+/* 3.9.2.2. Output Header Descriptor */
+struct uvc_output_header_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bNumFormats;
+       __u16 wTotalLength;
+       __u8  bEndpointAddress;
+       __u8  bTerminalLink;
+       __u8  bControlSize;
+       __u8  bmaControls[];
+} __attribute__((__packed__));
+
+#define UVC_DT_OUTPUT_HEADER_SIZE(n, p)                        (9+(n*p))
+
+#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \
+       uvc_output_header_descriptor_##n_##p
+
+#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p)     \
+struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) {            \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bNumFormats;                              \
+       __u16 wTotalLength;                             \
+       __u8  bEndpointAddress;                         \
+       __u8  bTerminalLink;                            \
+       __u8  bControlSize;                             \
+       __u8  bmaControls[p][n];                        \
+} __attribute__ ((packed))
+
+/* 3.9.2.6. Color matching descriptor */
+struct uvc_color_matching_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bColorPrimaries;
+       __u8  bTransferCharacteristics;
+       __u8  bMatrixCoefficients;
+} __attribute__((__packed__));
+
+#define UVC_DT_COLOR_MATCHING_SIZE                     6
+
+/* 4.3.1.1. Video Probe and Commit Controls */
+struct uvc_streaming_control {
+       __u16 bmHint;
+       __u8  bFormatIndex;
+       __u8  bFrameIndex;
+       __u32 dwFrameInterval;
+       __u16 wKeyFrameRate;
+       __u16 wPFrameRate;
+       __u16 wCompQuality;
+       __u16 wCompWindowSize;
+       __u16 wDelay;
+       __u32 dwMaxVideoFrameSize;
+       __u32 dwMaxPayloadTransferSize;
+       __u32 dwClockFrequency;
+       __u8  bmFramingInfo;
+       __u8  bPreferedVersion;
+       __u8  bMinVersion;
+       __u8  bMaxVersion;
+} __attribute__((__packed__));
+
+/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */
+struct uvc_format_uncompressed {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFormatIndex;
+       __u8  bNumFrameDescriptors;
+       __u8  guidFormat[16];
+       __u8  bBitsPerPixel;
+       __u8  bDefaultFrameIndex;
+       __u8  bAspectRatioX;
+       __u8  bAspectRatioY;
+       __u8  bmInterfaceFlags;
+       __u8  bCopyProtect;
+} __attribute__((__packed__));
+
+#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE                        27
+
+/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */
+struct uvc_frame_uncompressed {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFrameIndex;
+       __u8  bmCapabilities;
+       __u16 wWidth;
+       __u16 wHeight;
+       __u32 dwMinBitRate;
+       __u32 dwMaxBitRate;
+       __u32 dwMaxVideoFrameBufferSize;
+       __u32 dwDefaultFrameInterval;
+       __u8  bFrameIntervalType;
+       __u32 dwFrameInterval[];
+} __attribute__((__packed__));
+
+#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n)              (26+4*(n))
+
+#define UVC_FRAME_UNCOMPRESSED(n) \
+       uvc_frame_uncompressed_##n
+
+#define DECLARE_UVC_FRAME_UNCOMPRESSED(n)              \
+struct UVC_FRAME_UNCOMPRESSED(n) {                     \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bFrameIndex;                              \
+       __u8  bmCapabilities;                           \
+       __u16 wWidth;                                   \
+       __u16 wHeight;                                  \
+       __u32 dwMinBitRate;                             \
+       __u32 dwMaxBitRate;                             \
+       __u32 dwMaxVideoFrameBufferSize;                \
+       __u32 dwDefaultFrameInterval;                   \
+       __u8  bFrameIntervalType;                       \
+       __u32 dwFrameInterval[n];                       \
+} __attribute__ ((packed))
+
+/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */
+struct uvc_format_mjpeg {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFormatIndex;
+       __u8  bNumFrameDescriptors;
+       __u8  bmFlags;
+       __u8  bDefaultFrameIndex;
+       __u8  bAspectRatioX;
+       __u8  bAspectRatioY;
+       __u8  bmInterfaceFlags;
+       __u8  bCopyProtect;
+} __attribute__((__packed__));
+
+#define UVC_DT_FORMAT_MJPEG_SIZE                       11
+
+/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */
+struct uvc_frame_mjpeg {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDescriptorSubType;
+       __u8  bFrameIndex;
+       __u8  bmCapabilities;
+       __u16 wWidth;
+       __u16 wHeight;
+       __u32 dwMinBitRate;
+       __u32 dwMaxBitRate;
+       __u32 dwMaxVideoFrameBufferSize;
+       __u32 dwDefaultFrameInterval;
+       __u8  bFrameIntervalType;
+       __u32 dwFrameInterval[];
+} __attribute__((__packed__));
+
+#define UVC_DT_FRAME_MJPEG_SIZE(n)                     (26+4*(n))
+
+#define UVC_FRAME_MJPEG(n) \
+       uvc_frame_mjpeg_##n
+
+#define DECLARE_UVC_FRAME_MJPEG(n)                     \
+struct UVC_FRAME_MJPEG(n) {                            \
+       __u8  bLength;                                  \
+       __u8  bDescriptorType;                          \
+       __u8  bDescriptorSubType;                       \
+       __u8  bFrameIndex;                              \
+       __u8  bmCapabilities;                           \
+       __u16 wWidth;                                   \
+       __u16 wHeight;                                  \
+       __u32 dwMinBitRate;                             \
+       __u32 dwMaxBitRate;                             \
+       __u32 dwMaxVideoFrameBufferSize;                \
+       __u32 dwDefaultFrameInterval;                   \
+       __u8  bFrameIntervalType;                       \
+       __u32 dwFrameInterval[n];                       \
+} __attribute__ ((packed))
+
+#endif /* __LINUX_USB_VIDEO_H */
+
diff --git a/lib/libdss-include/linux/usbdevice_fs.h b/lib/libdss-include/linux/usbdevice_fs.h
new file mode 100644 (file)
index 0000000..3c0e300
--- /dev/null
@@ -0,0 +1,191 @@
+/*****************************************************************************/
+
+/*
+ *     usbdevice_fs.h  --  USB device file system.
+ *
+ *     Copyright (C) 2000
+ *          Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  History:
+ *   0.1  04.01.2000  Created
+ */
+
+/*****************************************************************************/
+
+#ifndef _LINUX_USBDEVICE_FS_H
+#define _LINUX_USBDEVICE_FS_H
+
+#include <linux/types.h>
+#include <linux/magic.h>
+
+/* --------------------------------------------------------------------- */
+
+/* usbdevfs ioctl codes */
+
+struct usbdevfs_ctrltransfer {
+       __u8 bRequestType;
+       __u8 bRequest;
+       __u16 wValue;
+       __u16 wIndex;
+       __u16 wLength;
+       __u32 timeout;  /* in milliseconds */
+       void *data;
+};
+
+struct usbdevfs_bulktransfer {
+       unsigned int ep;
+       unsigned int len;
+       unsigned int timeout; /* in milliseconds */
+       void *data;
+};
+
+struct usbdevfs_setinterface {
+       unsigned int interface;
+       unsigned int altsetting;
+};
+
+struct usbdevfs_disconnectsignal {
+       unsigned int signr;
+       void *context;
+};
+
+#define USBDEVFS_MAXDRIVERNAME 255
+
+struct usbdevfs_getdriver {
+       unsigned int interface;
+       char driver[USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct usbdevfs_connectinfo {
+       unsigned int devnum;
+       unsigned char slow;
+};
+
+#define USBDEVFS_URB_SHORT_NOT_OK      0x01
+#define USBDEVFS_URB_ISO_ASAP          0x02
+#define USBDEVFS_URB_BULK_CONTINUATION 0x04
+#define USBDEVFS_URB_NO_FSBR           0x20
+#define USBDEVFS_URB_ZERO_PACKET       0x40
+#define USBDEVFS_URB_NO_INTERRUPT      0x80
+
+#define USBDEVFS_URB_TYPE_ISO             0
+#define USBDEVFS_URB_TYPE_INTERRUPT       1
+#define USBDEVFS_URB_TYPE_CONTROL         2
+#define USBDEVFS_URB_TYPE_BULK            3
+
+struct usbdevfs_iso_packet_desc {
+       unsigned int length;
+       unsigned int actual_length;
+       unsigned int status;
+};
+
+struct usbdevfs_urb {
+       unsigned char type;
+       unsigned char endpoint;
+       int status;
+       unsigned int flags;
+       void *buffer;
+       int buffer_length;
+       int actual_length;
+       int start_frame;
+       union {
+               int number_of_packets;  /* Only used for isoc urbs */
+               unsigned int stream_id; /* Only used with bulk streams */
+       };
+       int error_count;
+       unsigned int signr;     /* signal to be sent on completion,
+                                 or 0 if none should be sent. */
+       void *usercontext;
+       struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+};
+
+/* ioctls for talking directly to drivers */
+struct usbdevfs_ioctl {
+       int     ifno;           /* interface 0..N ; negative numbers reserved */
+       int     ioctl_code;     /* MUST encode size + direction of data so the
+                                * macros in <asm/ioctl.h> give correct values */
+       void *data;     /* param buffer (in, or out) */
+};
+
+/* You can do most things with hubs just through control messages,
+ * except find out what device connects to what port. */
+struct usbdevfs_hub_portinfo {
+       char nports;            /* number of downstream ports in this hub */
+       char port [127];        /* e.g. port 3 connects to device 27 */
+};
+
+/* System and bus capability flags */
+#define USBDEVFS_CAP_ZERO_PACKET               0x01
+#define USBDEVFS_CAP_BULK_CONTINUATION         0x02
+#define USBDEVFS_CAP_NO_PACKET_SIZE_LIM                0x04
+#define USBDEVFS_CAP_BULK_SCATTER_GATHER       0x08
+#define USBDEVFS_CAP_REAP_AFTER_DISCONNECT     0x10
+
+/* USBDEVFS_DISCONNECT_CLAIM flags & struct */
+
+/* disconnect-and-claim if the driver matches the driver field */
+#define USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER    0x01
+/* disconnect-and-claim except when the driver matches the driver field */
+#define USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER        0x02
+
+struct usbdevfs_disconnect_claim {
+       unsigned int interface;
+       unsigned int flags;
+       char driver[USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct usbdevfs_streams {
+       unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */
+       unsigned int num_eps;
+       unsigned char eps[0];
+};
+
+#define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer)
+#define USBDEVFS_CONTROL32           _IOWR('U', 0, struct usbdevfs_ctrltransfer32)
+#define USBDEVFS_BULK              _IOWR('U', 2, struct usbdevfs_bulktransfer)
+#define USBDEVFS_BULK32              _IOWR('U', 2, struct usbdevfs_bulktransfer32)
+#define USBDEVFS_RESETEP           _IOR('U', 3, unsigned int)
+#define USBDEVFS_SETINTERFACE      _IOR('U', 4, struct usbdevfs_setinterface)
+#define USBDEVFS_SETCONFIGURATION  _IOR('U', 5, unsigned int)
+#define USBDEVFS_GETDRIVER         _IOW('U', 8, struct usbdevfs_getdriver)
+#define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb)
+#define USBDEVFS_SUBMITURB32       _IOR('U', 10, struct usbdevfs_urb32)
+#define USBDEVFS_DISCARDURB        _IO('U', 11)
+#define USBDEVFS_REAPURB           _IOW('U', 12, void *)
+#define USBDEVFS_REAPURB32         _IOW('U', 12, __u32)
+#define USBDEVFS_REAPURBNDELAY     _IOW('U', 13, void *)
+#define USBDEVFS_REAPURBNDELAY32   _IOW('U', 13, __u32)
+#define USBDEVFS_DISCSIGNAL        _IOR('U', 14, struct usbdevfs_disconnectsignal)
+#define USBDEVFS_DISCSIGNAL32      _IOR('U', 14, struct usbdevfs_disconnectsignal32)
+#define USBDEVFS_CLAIMINTERFACE    _IOR('U', 15, unsigned int)
+#define USBDEVFS_RELEASEINTERFACE  _IOR('U', 16, unsigned int)
+#define USBDEVFS_CONNECTINFO       _IOW('U', 17, struct usbdevfs_connectinfo)
+#define USBDEVFS_IOCTL             _IOWR('U', 18, struct usbdevfs_ioctl)
+#define USBDEVFS_IOCTL32           _IOWR('U', 18, struct usbdevfs_ioctl32)
+#define USBDEVFS_HUB_PORTINFO      _IOR('U', 19, struct usbdevfs_hub_portinfo)
+#define USBDEVFS_RESET             _IO('U', 20)
+#define USBDEVFS_CLEAR_HALT        _IOR('U', 21, unsigned int)
+#define USBDEVFS_DISCONNECT        _IO('U', 22)
+#define USBDEVFS_CONNECT           _IO('U', 23)
+#define USBDEVFS_CLAIM_PORT        _IOR('U', 24, unsigned int)
+#define USBDEVFS_RELEASE_PORT      _IOR('U', 25, unsigned int)
+#define USBDEVFS_GET_CAPABILITIES  _IOR('U', 26, __u32)
+#define USBDEVFS_DISCONNECT_CLAIM  _IOR('U', 27, struct usbdevfs_disconnect_claim)
+#define USBDEVFS_ALLOC_STREAMS     _IOR('U', 28, struct usbdevfs_streams)
+#define USBDEVFS_FREE_STREAMS      _IOR('U', 29, struct usbdevfs_streams)
+
+#endif /* _LINUX_USBDEVICE_FS_H */
diff --git a/lib/libdss-include/linux/usbip.h b/lib/libdss-include/linux/usbip.h
new file mode 100644 (file)
index 0000000..8d4f9a3
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ *     usbip.h
+ *
+ *     USBIP uapi defines and function prototypes etc.
+*/
+
+#ifndef _LINUX_USBIP_H
+#define _LINUX_USBIP_H
+
+/* usbip device status - exported in usbip device sysfs status */
+enum usbip_device_status {
+       /* sdev is available. */
+       SDEV_ST_AVAILABLE = 0x01,
+       /* sdev is now used. */
+       SDEV_ST_USED,
+       /* sdev is unusable because of a fatal error. */
+       SDEV_ST_ERROR,
+
+       /* vdev does not connect a remote device. */
+       VDEV_ST_NULL,
+       /* vdev is used, but the USB address is not assigned yet */
+       VDEV_ST_NOTASSIGNED,
+       VDEV_ST_USED,
+       VDEV_ST_ERROR
+};
+#endif /* _LINUX_USBIP_H */
diff --git a/lib/libdss-include/linux/userfaultfd.h b/lib/libdss-include/linux/userfaultfd.h
new file mode 100644 (file)
index 0000000..19e8453
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ *  include/linux/userfaultfd.h
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
+ *  Copyright (C) 2015  Red Hat, Inc.
+ *
+ */
+
+#ifndef _LINUX_USERFAULTFD_H
+#define _LINUX_USERFAULTFD_H
+
+#include <linux/types.h>
+
+#define UFFD_API ((__u64)0xAA)
+/*
+ * After implementing the respective features it will become:
+ * #define UFFD_API_FEATURES (UFFD_FEATURE_PAGEFAULT_FLAG_WP | \
+ *                           UFFD_FEATURE_EVENT_FORK)
+ */
+#define UFFD_API_FEATURES (0)
+#define UFFD_API_IOCTLS                                \
+       ((__u64)1 << _UFFDIO_REGISTER |         \
+        (__u64)1 << _UFFDIO_UNREGISTER |       \
+        (__u64)1 << _UFFDIO_API)
+#define UFFD_API_RANGE_IOCTLS                  \
+       ((__u64)1 << _UFFDIO_WAKE |             \
+        (__u64)1 << _UFFDIO_COPY |             \
+        (__u64)1 << _UFFDIO_ZEROPAGE)
+
+/*
+ * Valid ioctl command number range with this API is from 0x00 to
+ * 0x3F.  UFFDIO_API is the fixed number, everything else can be
+ * changed by implementing a different UFFD_API. If sticking to the
+ * same UFFD_API more ioctl can be added and userland will be aware of
+ * which ioctl the running kernel implements through the ioctl command
+ * bitmask written by the UFFDIO_API.
+ */
+#define _UFFDIO_REGISTER               (0x00)
+#define _UFFDIO_UNREGISTER             (0x01)
+#define _UFFDIO_WAKE                   (0x02)
+#define _UFFDIO_COPY                   (0x03)
+#define _UFFDIO_ZEROPAGE               (0x04)
+#define _UFFDIO_API                    (0x3F)
+
+/* userfaultfd ioctl ids */
+#define UFFDIO 0xAA
+#define UFFDIO_API             _IOWR(UFFDIO, _UFFDIO_API,      \
+                                     struct uffdio_api)
+#define UFFDIO_REGISTER                _IOWR(UFFDIO, _UFFDIO_REGISTER, \
+                                     struct uffdio_register)
+#define UFFDIO_UNREGISTER      _IOR(UFFDIO, _UFFDIO_UNREGISTER,        \
+                                    struct uffdio_range)
+#define UFFDIO_WAKE            _IOR(UFFDIO, _UFFDIO_WAKE,      \
+                                    struct uffdio_range)
+#define UFFDIO_COPY            _IOWR(UFFDIO, _UFFDIO_COPY,     \
+                                     struct uffdio_copy)
+#define UFFDIO_ZEROPAGE                _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, \
+                                     struct uffdio_zeropage)
+
+/* read() structure */
+struct uffd_msg {
+       __u8    event;
+
+       __u8    reserved1;
+       __u16   reserved2;
+       __u32   reserved3;
+
+       union {
+               struct {
+                       __u64   flags;
+                       __u64   address;
+               } pagefault;
+
+               struct {
+                       /* unused reserved fields */
+                       __u64   reserved1;
+                       __u64   reserved2;
+                       __u64   reserved3;
+               } reserved;
+       } arg;
+} __attribute__((packed));
+
+/*
+ * Start at 0x12 and not at 0 to be more strict against bugs.
+ */
+#define UFFD_EVENT_PAGEFAULT   0x12
+#if 0 /* not available yet */
+#define UFFD_EVENT_FORK                0x13
+#endif
+
+/* flags for UFFD_EVENT_PAGEFAULT */
+#define UFFD_PAGEFAULT_FLAG_WRITE      (1<<0)  /* If this was a write fault */
+#define UFFD_PAGEFAULT_FLAG_WP         (1<<1)  /* If reason is VM_UFFD_WP */
+
+struct uffdio_api {
+       /* userland asks for an API number and the features to enable */
+       __u64 api;
+       /*
+        * Kernel answers below with the all available features for
+        * the API, this notifies userland of which events and/or
+        * which flags for each event are enabled in the current
+        * kernel.
+        *
+        * Note: UFFD_EVENT_PAGEFAULT and UFFD_PAGEFAULT_FLAG_WRITE
+        * are to be considered implicitly always enabled in all kernels as
+        * long as the uffdio_api.api requested matches UFFD_API.
+        */
+#if 0 /* not available yet */
+#define UFFD_FEATURE_PAGEFAULT_FLAG_WP         (1<<0)
+#define UFFD_FEATURE_EVENT_FORK                        (1<<1)
+#endif
+       __u64 features;
+
+       __u64 ioctls;
+};
+
+struct uffdio_range {
+       __u64 start;
+       __u64 len;
+};
+
+struct uffdio_register {
+       struct uffdio_range range;
+#define UFFDIO_REGISTER_MODE_MISSING   ((__u64)1<<0)
+#define UFFDIO_REGISTER_MODE_WP                ((__u64)1<<1)
+       __u64 mode;
+
+       /*
+        * kernel answers which ioctl commands are available for the
+        * range, keep at the end as the last 8 bytes aren't read.
+        */
+       __u64 ioctls;
+};
+
+struct uffdio_copy {
+       __u64 dst;
+       __u64 src;
+       __u64 len;
+       /*
+        * There will be a wrprotection flag later that allows to map
+        * pages wrprotected on the fly. And such a flag will be
+        * available if the wrprotection ioctl are implemented for the
+        * range according to the uffdio_register.ioctls.
+        */
+#define UFFDIO_COPY_MODE_DONTWAKE              ((__u64)1<<0)
+       __u64 mode;
+
+       /*
+        * "copy" is written by the ioctl and must be at the end: the
+        * copy_from_user will not read the last 8 bytes.
+        */
+       __s64 copy;
+};
+
+struct uffdio_zeropage {
+       struct uffdio_range range;
+#define UFFDIO_ZEROPAGE_MODE_DONTWAKE          ((__u64)1<<0)
+       __u64 mode;
+
+       /*
+        * "zeropage" is written by the ioctl and must be at the end:
+        * the copy_from_user will not read the last 8 bytes.
+        */
+       __s64 zeropage;
+};
+
+#endif /* _LINUX_USERFAULTFD_H */
diff --git a/lib/libdss-include/linux/utime.h b/lib/libdss-include/linux/utime.h
new file mode 100644 (file)
index 0000000..5cdf673
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _LINUX_UTIME_H
+#define _LINUX_UTIME_H
+
+#include <linux/types.h>
+
+struct utimbuf {
+       __kernel_time_t actime;
+       __kernel_time_t modtime;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/utsname.h b/lib/libdss-include/linux/utsname.h
new file mode 100644 (file)
index 0000000..6387d45
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef _LINUX_UTSNAME_H
+#define _LINUX_UTSNAME_H
+
+#define __OLD_UTS_LEN 8
+
+struct oldold_utsname {
+       char sysname[9];
+       char nodename[9];
+       char release[9];
+       char version[9];
+       char machine[9];
+};
+
+#define __NEW_UTS_LEN 64
+
+struct old_utsname {
+       char sysname[65];
+       char nodename[65];
+       char release[65];
+       char version[65];
+       char machine[65];
+};
+
+struct new_utsname {
+       char sysname[__NEW_UTS_LEN + 1];
+       char nodename[__NEW_UTS_LEN + 1];
+       char release[__NEW_UTS_LEN + 1];
+       char version[__NEW_UTS_LEN + 1];
+       char machine[__NEW_UTS_LEN + 1];
+       char domainname[__NEW_UTS_LEN + 1];
+};
+
+
+#endif /* _LINUX_UTSNAME_H */
diff --git a/lib/libdss-include/linux/uuid.h b/lib/libdss-include/linux/uuid.h
new file mode 100644 (file)
index 0000000..af891a3
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * UUID/GUID definition
+ *
+ * Copyright (C) 2010, Intel Corp.
+ *     Huang Ying <ying.huang@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LINUX_UUID_H_
+#define _LINUX_UUID_H_
+
+#include <linux/types.h>
+#include <linux/string.h>
+
+typedef struct {
+       __u8 b[16];
+} uuid_le;
+
+typedef struct {
+       __u8 b[16];
+} uuid_be;
+
+#define UUID_LE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)               \
+((uuid_le)                                                             \
+{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
+   (b) & 0xff, ((b) >> 8) & 0xff,                                      \
+   (c) & 0xff, ((c) >> 8) & 0xff,                                      \
+   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
+
+#define UUID_BE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)               \
+((uuid_be)                                                             \
+{{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \
+   ((b) >> 8) & 0xff, (b) & 0xff,                                      \
+   ((c) >> 8) & 0xff, (c) & 0xff,                                      \
+   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
+
+#define NULL_UUID_LE                                                   \
+       UUID_LE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,     \
+               0x00, 0x00, 0x00, 0x00)
+
+#define NULL_UUID_BE                                                   \
+       UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,     \
+               0x00, 0x00, 0x00, 0x00)
+
+
+#endif /* _LINUX_UUID_H_ */
diff --git a/lib/libdss-include/linux/uvcvideo.h b/lib/libdss-include/linux/uvcvideo.h
new file mode 100644 (file)
index 0000000..faff40e
--- /dev/null
@@ -0,0 +1,70 @@
+#ifndef __LINUX_UVCVIDEO_H_
+#define __LINUX_UVCVIDEO_H_
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/*
+ * Dynamic controls
+ */
+
+/* Data types for UVC control data */
+#define UVC_CTRL_DATA_TYPE_RAW         0
+#define UVC_CTRL_DATA_TYPE_SIGNED      1
+#define UVC_CTRL_DATA_TYPE_UNSIGNED    2
+#define UVC_CTRL_DATA_TYPE_BOOLEAN     3
+#define UVC_CTRL_DATA_TYPE_ENUM                4
+#define UVC_CTRL_DATA_TYPE_BITMASK     5
+
+/* Control flags */
+#define UVC_CTRL_FLAG_SET_CUR          (1 << 0)
+#define UVC_CTRL_FLAG_GET_CUR          (1 << 1)
+#define UVC_CTRL_FLAG_GET_MIN          (1 << 2)
+#define UVC_CTRL_FLAG_GET_MAX          (1 << 3)
+#define UVC_CTRL_FLAG_GET_RES          (1 << 4)
+#define UVC_CTRL_FLAG_GET_DEF          (1 << 5)
+/* Control should be saved at suspend and restored at resume. */
+#define UVC_CTRL_FLAG_RESTORE          (1 << 6)
+/* Control can be updated by the camera. */
+#define UVC_CTRL_FLAG_AUTO_UPDATE      (1 << 7)
+
+#define UVC_CTRL_FLAG_GET_RANGE \
+       (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
+        UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \
+        UVC_CTRL_FLAG_GET_DEF)
+
+struct uvc_menu_info {
+       __u32 value;
+       __u8 name[32];
+};
+
+struct uvc_xu_control_mapping {
+       __u32 id;
+       __u8 name[32];
+       __u8 entity[16];
+       __u8 selector;
+
+       __u8 size;
+       __u8 offset;
+       __u32 v4l2_type;
+       __u32 data_type;
+
+       struct uvc_menu_info *menu_info;
+       __u32 menu_count;
+
+       __u32 reserved[4];
+};
+
+struct uvc_xu_control_query {
+       __u8 unit;
+       __u8 selector;
+       __u8 query;             /* Video Class-Specific Request Code, */
+                               /* defined in linux/usb/video.h A.8.  */
+       __u16 size;
+       __u8 *data;
+};
+
+#define UVCIOC_CTRL_MAP                _IOWR('u', 0x20, struct uvc_xu_control_mapping)
+#define UVCIOC_CTRL_QUERY      _IOWR('u', 0x21, struct uvc_xu_control_query)
+
+#endif
diff --git a/lib/libdss-include/linux/v4l2-common.h b/lib/libdss-include/linux/v4l2-common.h
new file mode 100644 (file)
index 0000000..1527398
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * include/linux/v4l2-common.h
+ *
+ * Common V4L2 and V4L2 subdev definitions.
+ *
+ * Users are advised to #include this file either through videodev2.h
+ * (V4L2) or through v4l2-subdev.h (V4L2 subdev) rather than to refer
+ * to this file directly.
+ *
+ * Copyright (C) 2012 Nokia Corporation
+ * Contact: Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef __V4L2_COMMON__
+#define __V4L2_COMMON__
+
+#include <linux/types.h>
+
+/*
+ *
+ * Selection interface definitions
+ *
+ */
+
+/* Current cropping area */
+#define V4L2_SEL_TGT_CROP              0x0000
+/* Default cropping area */
+#define V4L2_SEL_TGT_CROP_DEFAULT      0x0001
+/* Cropping bounds */
+#define V4L2_SEL_TGT_CROP_BOUNDS       0x0002
+/* Native frame size */
+#define V4L2_SEL_TGT_NATIVE_SIZE       0x0003
+/* Current composing area */
+#define V4L2_SEL_TGT_COMPOSE           0x0100
+/* Default composing area */
+#define V4L2_SEL_TGT_COMPOSE_DEFAULT   0x0101
+/* Composing bounds */
+#define V4L2_SEL_TGT_COMPOSE_BOUNDS    0x0102
+/* Current composing area plus all padding pixels */
+#define V4L2_SEL_TGT_COMPOSE_PADDED    0x0103
+
+/* Backward compatibility target definitions --- to be removed. */
+#define V4L2_SEL_TGT_CROP_ACTIVE       V4L2_SEL_TGT_CROP
+#define V4L2_SEL_TGT_COMPOSE_ACTIVE    V4L2_SEL_TGT_COMPOSE
+#define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL        V4L2_SEL_TGT_CROP
+#define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
+#define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS        V4L2_SEL_TGT_CROP_BOUNDS
+#define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS
+
+/* Selection flags */
+#define V4L2_SEL_FLAG_GE               (1 << 0)
+#define V4L2_SEL_FLAG_LE               (1 << 1)
+#define V4L2_SEL_FLAG_KEEP_CONFIG      (1 << 2)
+
+/* Backward compatibility flag definitions --- to be removed. */
+#define V4L2_SUBDEV_SEL_FLAG_SIZE_GE   V4L2_SEL_FLAG_GE
+#define V4L2_SUBDEV_SEL_FLAG_SIZE_LE   V4L2_SEL_FLAG_LE
+#define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG
+
+struct v4l2_edid {
+       __u32 pad;
+       __u32 start_block;
+       __u32 blocks;
+       __u32 reserved[5];
+       __u8  *edid;
+};
+
+#endif /* __V4L2_COMMON__ */
diff --git a/lib/libdss-include/linux/v4l2-controls.h b/lib/libdss-include/linux/v4l2-controls.h
new file mode 100644 (file)
index 0000000..1bdce50
--- /dev/null
@@ -0,0 +1,964 @@
+/*
+ *  Video for Linux Two controls header file
+ *
+ *  Copyright (C) 1999-2012 the contributors
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  Alternatively you can redistribute this file under the terms of the
+ *  BSD license as stated below:
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *  3. The names of its contributors may not be used to endorse or promote
+ *     products derived from this software without specific prior written
+ *     permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The contents of this header was split off from videodev2.h. All control
+ *  definitions should be added to this header, which is included by
+ *  videodev2.h.
+ */
+
+#ifndef __LINUX_V4L2_CONTROLS_H
+#define __LINUX_V4L2_CONTROLS_H
+
+/* Control classes */
+#define V4L2_CTRL_CLASS_USER           0x00980000      /* Old-style 'user' controls */
+#define V4L2_CTRL_CLASS_MPEG           0x00990000      /* MPEG-compression controls */
+#define V4L2_CTRL_CLASS_CAMERA         0x009a0000      /* Camera class controls */
+#define V4L2_CTRL_CLASS_FM_TX          0x009b0000      /* FM Modulator controls */
+#define V4L2_CTRL_CLASS_FLASH          0x009c0000      /* Camera flash controls */
+#define V4L2_CTRL_CLASS_JPEG           0x009d0000      /* JPEG-compression controls */
+#define V4L2_CTRL_CLASS_IMAGE_SOURCE   0x009e0000      /* Image source controls */
+#define V4L2_CTRL_CLASS_IMAGE_PROC     0x009f0000      /* Image processing controls */
+#define V4L2_CTRL_CLASS_DV             0x00a00000      /* Digital Video controls */
+#define V4L2_CTRL_CLASS_FM_RX          0x00a10000      /* FM Receiver controls */
+#define V4L2_CTRL_CLASS_RF_TUNER       0x00a20000      /* RF tuner controls */
+#define V4L2_CTRL_CLASS_DETECT         0x00a30000      /* Detection controls */
+
+/* User-class control IDs */
+
+#define V4L2_CID_BASE                  (V4L2_CTRL_CLASS_USER | 0x900)
+#define V4L2_CID_USER_BASE             V4L2_CID_BASE
+#define V4L2_CID_USER_CLASS            (V4L2_CTRL_CLASS_USER | 1)
+#define V4L2_CID_BRIGHTNESS            (V4L2_CID_BASE+0)
+#define V4L2_CID_CONTRAST              (V4L2_CID_BASE+1)
+#define V4L2_CID_SATURATION            (V4L2_CID_BASE+2)
+#define V4L2_CID_HUE                   (V4L2_CID_BASE+3)
+#define V4L2_CID_AUDIO_VOLUME          (V4L2_CID_BASE+5)
+#define V4L2_CID_AUDIO_BALANCE         (V4L2_CID_BASE+6)
+#define V4L2_CID_AUDIO_BASS            (V4L2_CID_BASE+7)
+#define V4L2_CID_AUDIO_TREBLE          (V4L2_CID_BASE+8)
+#define V4L2_CID_AUDIO_MUTE            (V4L2_CID_BASE+9)
+#define V4L2_CID_AUDIO_LOUDNESS                (V4L2_CID_BASE+10)
+#define V4L2_CID_BLACK_LEVEL           (V4L2_CID_BASE+11) /* Deprecated */
+#define V4L2_CID_AUTO_WHITE_BALANCE    (V4L2_CID_BASE+12)
+#define V4L2_CID_DO_WHITE_BALANCE      (V4L2_CID_BASE+13)
+#define V4L2_CID_RED_BALANCE           (V4L2_CID_BASE+14)
+#define V4L2_CID_BLUE_BALANCE          (V4L2_CID_BASE+15)
+#define V4L2_CID_GAMMA                 (V4L2_CID_BASE+16)
+#define V4L2_CID_WHITENESS             (V4L2_CID_GAMMA) /* Deprecated */
+#define V4L2_CID_EXPOSURE              (V4L2_CID_BASE+17)
+#define V4L2_CID_AUTOGAIN              (V4L2_CID_BASE+18)
+#define V4L2_CID_GAIN                  (V4L2_CID_BASE+19)
+#define V4L2_CID_HFLIP                 (V4L2_CID_BASE+20)
+#define V4L2_CID_VFLIP                 (V4L2_CID_BASE+21)
+
+#define V4L2_CID_POWER_LINE_FREQUENCY  (V4L2_CID_BASE+24)
+enum v4l2_power_line_frequency {
+       V4L2_CID_POWER_LINE_FREQUENCY_DISABLED  = 0,
+       V4L2_CID_POWER_LINE_FREQUENCY_50HZ      = 1,
+       V4L2_CID_POWER_LINE_FREQUENCY_60HZ      = 2,
+       V4L2_CID_POWER_LINE_FREQUENCY_AUTO      = 3,
+};
+#define V4L2_CID_HUE_AUTO                      (V4L2_CID_BASE+25)
+#define V4L2_CID_WHITE_BALANCE_TEMPERATURE     (V4L2_CID_BASE+26)
+#define V4L2_CID_SHARPNESS                     (V4L2_CID_BASE+27)
+#define V4L2_CID_BACKLIGHT_COMPENSATION        (V4L2_CID_BASE+28)
+#define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
+#define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
+#define V4L2_CID_COLORFX                       (V4L2_CID_BASE+31)
+enum v4l2_colorfx {
+       V4L2_COLORFX_NONE                       = 0,
+       V4L2_COLORFX_BW                         = 1,
+       V4L2_COLORFX_SEPIA                      = 2,
+       V4L2_COLORFX_NEGATIVE                   = 3,
+       V4L2_COLORFX_EMBOSS                     = 4,
+       V4L2_COLORFX_SKETCH                     = 5,
+       V4L2_COLORFX_SKY_BLUE                   = 6,
+       V4L2_COLORFX_GRASS_GREEN                = 7,
+       V4L2_COLORFX_SKIN_WHITEN                = 8,
+       V4L2_COLORFX_VIVID                      = 9,
+       V4L2_COLORFX_AQUA                       = 10,
+       V4L2_COLORFX_ART_FREEZE                 = 11,
+       V4L2_COLORFX_SILHOUETTE                 = 12,
+       V4L2_COLORFX_SOLARIZATION               = 13,
+       V4L2_COLORFX_ANTIQUE                    = 14,
+       V4L2_COLORFX_SET_CBCR                   = 15,
+};
+#define V4L2_CID_AUTOBRIGHTNESS                        (V4L2_CID_BASE+32)
+#define V4L2_CID_BAND_STOP_FILTER              (V4L2_CID_BASE+33)
+
+#define V4L2_CID_ROTATE                                (V4L2_CID_BASE+34)
+#define V4L2_CID_BG_COLOR                      (V4L2_CID_BASE+35)
+
+#define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
+
+#define V4L2_CID_ILLUMINATORS_1                        (V4L2_CID_BASE+37)
+#define V4L2_CID_ILLUMINATORS_2                        (V4L2_CID_BASE+38)
+
+#define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE       (V4L2_CID_BASE+39)
+#define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT                (V4L2_CID_BASE+40)
+
+#define V4L2_CID_ALPHA_COMPONENT               (V4L2_CID_BASE+41)
+#define V4L2_CID_COLORFX_CBCR                  (V4L2_CID_BASE+42)
+
+/* last CID + 1 */
+#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43)
+
+/* USER-class private control IDs */
+
+/* The base for the meye driver controls. See linux/meye.h for the list
+ * of controls. We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_MEYE_BASE                        (V4L2_CID_USER_BASE + 0x1000)
+
+/* The base for the bttv driver controls.
+ * We reserve 32 controls for this driver. */
+#define V4L2_CID_USER_BTTV_BASE                        (V4L2_CID_USER_BASE + 0x1010)
+
+
+/* The base for the s2255 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_S2255_BASE               (V4L2_CID_USER_BASE + 0x1030)
+
+/* The base for the si476x driver controls. See include/media/si476x.h for the list
+ * of controls. Total of 16 controls is reserved for this driver */
+#define V4L2_CID_USER_SI476X_BASE              (V4L2_CID_USER_BASE + 0x1040)
+
+/* The base for the TI VPE driver controls. Total of 16 controls is reserved for
+ * this driver */
+#define V4L2_CID_USER_TI_VPE_BASE              (V4L2_CID_USER_BASE + 0x1050)
+
+/* The base for the saa7134 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_SAA7134_BASE             (V4L2_CID_USER_BASE + 0x1060)
+
+/* The base for the adv7180 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_ADV7180_BASE             (V4L2_CID_USER_BASE + 0x1070)
+
+/* The base for the tc358743 driver controls.
+ * We reserve 16 controls for this driver. */
+#define V4L2_CID_USER_TC358743_BASE            (V4L2_CID_USER_BASE + 0x1080)
+
+/* MPEG-class control IDs */
+/* The MPEG controls are applicable to all codec controls
+ * and the 'MPEG' part of the define is historical */
+
+#define V4L2_CID_MPEG_BASE                     (V4L2_CTRL_CLASS_MPEG | 0x900)
+#define V4L2_CID_MPEG_CLASS                    (V4L2_CTRL_CLASS_MPEG | 1)
+
+/*  MPEG streams, specific to multiplexed streams */
+#define V4L2_CID_MPEG_STREAM_TYPE              (V4L2_CID_MPEG_BASE+0)
+enum v4l2_mpeg_stream_type {
+       V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
+};
+#define V4L2_CID_MPEG_STREAM_PID_PMT           (V4L2_CID_MPEG_BASE+1)
+#define V4L2_CID_MPEG_STREAM_PID_AUDIO                 (V4L2_CID_MPEG_BASE+2)
+#define V4L2_CID_MPEG_STREAM_PID_VIDEO                 (V4L2_CID_MPEG_BASE+3)
+#define V4L2_CID_MPEG_STREAM_PID_PCR           (V4L2_CID_MPEG_BASE+4)
+#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO      (V4L2_CID_MPEG_BASE+5)
+#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO      (V4L2_CID_MPEG_BASE+6)
+#define V4L2_CID_MPEG_STREAM_VBI_FMT           (V4L2_CID_MPEG_BASE+7)
+enum v4l2_mpeg_stream_vbi_fmt {
+       V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
+       V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
+};
+
+/*  MPEG audio controls specific to multiplexed streams  */
+#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ      (V4L2_CID_MPEG_BASE+100)
+enum v4l2_mpeg_audio_sampling_freq {
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
+};
+#define V4L2_CID_MPEG_AUDIO_ENCODING           (V4L2_CID_MPEG_BASE+101)
+enum v4l2_mpeg_audio_encoding {
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
+       V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
+       V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
+};
+#define V4L2_CID_MPEG_AUDIO_L1_BITRATE                 (V4L2_CID_MPEG_BASE+102)
+enum v4l2_mpeg_audio_l1_bitrate {
+       V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
+       V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
+       V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
+       V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
+       V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
+       V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
+       V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
+       V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
+       V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
+       V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
+       V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
+       V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
+       V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_L2_BITRATE                 (V4L2_CID_MPEG_BASE+103)
+enum v4l2_mpeg_audio_l2_bitrate {
+       V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
+       V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
+       V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
+       V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
+       V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
+       V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
+       V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
+       V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
+       V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
+       V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
+       V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
+       V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
+       V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_L3_BITRATE                 (V4L2_CID_MPEG_BASE+104)
+enum v4l2_mpeg_audio_l3_bitrate {
+       V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
+       V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
+       V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
+       V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
+       V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
+       V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
+       V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
+       V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
+       V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
+       V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
+       V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
+       V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
+       V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE               (V4L2_CID_MPEG_BASE+105)
+enum v4l2_mpeg_audio_mode {
+       V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
+       V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
+       V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
+       V4L2_MPEG_AUDIO_MODE_MONO         = 3,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION     (V4L2_CID_MPEG_BASE+106)
+enum v4l2_mpeg_audio_mode_extension {
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
+};
+#define V4L2_CID_MPEG_AUDIO_EMPHASIS           (V4L2_CID_MPEG_BASE+107)
+enum v4l2_mpeg_audio_emphasis {
+       V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
+       V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
+       V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
+};
+#define V4L2_CID_MPEG_AUDIO_CRC                (V4L2_CID_MPEG_BASE+108)
+enum v4l2_mpeg_audio_crc {
+       V4L2_MPEG_AUDIO_CRC_NONE  = 0,
+       V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
+};
+#define V4L2_CID_MPEG_AUDIO_MUTE               (V4L2_CID_MPEG_BASE+109)
+#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE                (V4L2_CID_MPEG_BASE+110)
+#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE                (V4L2_CID_MPEG_BASE+111)
+enum v4l2_mpeg_audio_ac3_bitrate {
+       V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
+       V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
+};
+#define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK       (V4L2_CID_MPEG_BASE+112)
+enum v4l2_mpeg_audio_dec_playback {
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO           = 0,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO         = 1,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT           = 2,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT          = 3,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO           = 4,
+       V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
+};
+#define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113)
+
+/*  MPEG video controls specific to multiplexed streams */
+#define V4L2_CID_MPEG_VIDEO_ENCODING           (V4L2_CID_MPEG_BASE+200)
+enum v4l2_mpeg_video_encoding {
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_ASPECT             (V4L2_CID_MPEG_BASE+201)
+enum v4l2_mpeg_video_aspect {
+       V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
+       V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
+       V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
+       V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_B_FRAMES           (V4L2_CID_MPEG_BASE+202)
+#define V4L2_CID_MPEG_VIDEO_GOP_SIZE           (V4L2_CID_MPEG_BASE+203)
+#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE        (V4L2_CID_MPEG_BASE+204)
+#define V4L2_CID_MPEG_VIDEO_PULLDOWN           (V4L2_CID_MPEG_BASE+205)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE       (V4L2_CID_MPEG_BASE+206)
+enum v4l2_mpeg_video_bitrate_mode {
+       V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
+       V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_BITRATE            (V4L2_CID_MPEG_BASE+207)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK       (V4L2_CID_MPEG_BASE+208)
+#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
+#define V4L2_CID_MPEG_VIDEO_MUTE               (V4L2_CID_MPEG_BASE+210)
+#define V4L2_CID_MPEG_VIDEO_MUTE_YUV           (V4L2_CID_MPEG_BASE+211)
+#define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE            (V4L2_CID_MPEG_BASE+212)
+#define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER       (V4L2_CID_MPEG_BASE+213)
+#define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB            (V4L2_CID_MPEG_BASE+214)
+#define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE                    (V4L2_CID_MPEG_BASE+215)
+#define V4L2_CID_MPEG_VIDEO_HEADER_MODE                                (V4L2_CID_MPEG_BASE+216)
+enum v4l2_mpeg_video_header_mode {
+       V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE                    = 0,
+       V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME       = 1,
+
+};
+#define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC                        (V4L2_CID_MPEG_BASE+217)
+#define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE               (V4L2_CID_MPEG_BASE+218)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES      (V4L2_CID_MPEG_BASE+219)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB         (V4L2_CID_MPEG_BASE+220)
+#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE           (V4L2_CID_MPEG_BASE+221)
+enum v4l2_mpeg_video_multi_slice_mode {
+       V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE         = 0,
+       V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB          = 1,
+       V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES       = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_VBV_SIZE                   (V4L2_CID_MPEG_BASE+222)
+#define V4L2_CID_MPEG_VIDEO_DEC_PTS                    (V4L2_CID_MPEG_BASE+223)
+#define V4L2_CID_MPEG_VIDEO_DEC_FRAME                  (V4L2_CID_MPEG_BASE+224)
+#define V4L2_CID_MPEG_VIDEO_VBV_DELAY                  (V4L2_CID_MPEG_BASE+225)
+#define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER          (V4L2_CID_MPEG_BASE+226)
+#define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE          (V4L2_CID_MPEG_BASE+227)
+#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE          (V4L2_CID_MPEG_BASE+228)
+
+#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP            (V4L2_CID_MPEG_BASE+300)
+#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP            (V4L2_CID_MPEG_BASE+301)
+#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP            (V4L2_CID_MPEG_BASE+302)
+#define V4L2_CID_MPEG_VIDEO_H263_MIN_QP                        (V4L2_CID_MPEG_BASE+303)
+#define V4L2_CID_MPEG_VIDEO_H263_MAX_QP                        (V4L2_CID_MPEG_BASE+304)
+#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP            (V4L2_CID_MPEG_BASE+350)
+#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP            (V4L2_CID_MPEG_BASE+351)
+#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP            (V4L2_CID_MPEG_BASE+352)
+#define V4L2_CID_MPEG_VIDEO_H264_MIN_QP                        (V4L2_CID_MPEG_BASE+353)
+#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP                        (V4L2_CID_MPEG_BASE+354)
+#define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM         (V4L2_CID_MPEG_BASE+355)
+#define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE              (V4L2_CID_MPEG_BASE+356)
+#define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE          (V4L2_CID_MPEG_BASE+357)
+enum v4l2_mpeg_video_h264_entropy_mode {
+       V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC = 0,
+       V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD              (V4L2_CID_MPEG_BASE+358)
+#define V4L2_CID_MPEG_VIDEO_H264_LEVEL                 (V4L2_CID_MPEG_BASE+359)
+enum v4l2_mpeg_video_h264_level {
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_0  = 0,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1B   = 1,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_1  = 2,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_2  = 3,
+       V4L2_MPEG_VIDEO_H264_LEVEL_1_3  = 4,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_0  = 5,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_1  = 6,
+       V4L2_MPEG_VIDEO_H264_LEVEL_2_2  = 7,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_0  = 8,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_1  = 9,
+       V4L2_MPEG_VIDEO_H264_LEVEL_3_2  = 10,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_0  = 11,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_1  = 12,
+       V4L2_MPEG_VIDEO_H264_LEVEL_4_2  = 13,
+       V4L2_MPEG_VIDEO_H264_LEVEL_5_0  = 14,
+       V4L2_MPEG_VIDEO_H264_LEVEL_5_1  = 15,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA     (V4L2_CID_MPEG_BASE+360)
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA      (V4L2_CID_MPEG_BASE+361)
+#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE      (V4L2_CID_MPEG_BASE+362)
+enum v4l2_mpeg_video_h264_loop_filter_mode {
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED                           = 0,
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED                          = 1,
+       V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY        = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_PROFILE               (V4L2_CID_MPEG_BASE+363)
+enum v4l2_mpeg_video_h264_profile {
+       V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE                   = 0,
+       V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE       = 1,
+       V4L2_MPEG_VIDEO_H264_PROFILE_MAIN                       = 2,
+       V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED                   = 3,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH                       = 4,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10                    = 5,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422                   = 6,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE        = 7,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA              = 8,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA             = 9,
+       V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA             = 10,
+       V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA            = 11,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE          = 12,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH              = 13,
+       V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA        = 14,
+       V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH                = 15,
+       V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH             = 16,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT    (V4L2_CID_MPEG_BASE+364)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH     (V4L2_CID_MPEG_BASE+365)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE                (V4L2_CID_MPEG_BASE+366)
+#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC           (V4L2_CID_MPEG_BASE+367)
+enum v4l2_mpeg_video_h264_vui_sar_idc {
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED    = 0,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1            = 1,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11          = 2,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11          = 3,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11          = 4,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33          = 5,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11          = 6,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11          = 7,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11          = 8,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33          = 9,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11          = 10,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11          = 11,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33          = 12,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99         = 13,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3            = 14,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2            = 15,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1            = 16,
+       V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED       = 17,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING             (V4L2_CID_MPEG_BASE+368)
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0                (V4L2_CID_MPEG_BASE+369)
+#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE       (V4L2_CID_MPEG_BASE+370)
+enum v4l2_mpeg_video_h264_sei_fp_arrangement_type {
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD       = 0,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN             = 1,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW                = 2,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE       = 3,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM         = 4,
+       V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL           = 5,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO                   (V4L2_CID_MPEG_BASE+371)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE          (V4L2_CID_MPEG_BASE+372)
+enum v4l2_mpeg_video_h264_fmo_map_type {
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES            = 0,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES              = 1,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER     = 2,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT                       = 3,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN                   = 4,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN                     = 5,
+       V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT                      = 6,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP       (V4L2_CID_MPEG_BASE+373)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION  (V4L2_CID_MPEG_BASE+374)
+enum v4l2_mpeg_video_h264_fmo_change_dir {
+       V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT       = 0,
+       V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT        = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE       (V4L2_CID_MPEG_BASE+375)
+#define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH                (V4L2_CID_MPEG_BASE+376)
+#define V4L2_CID_MPEG_VIDEO_H264_ASO                   (V4L2_CID_MPEG_BASE+377)
+#define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER       (V4L2_CID_MPEG_BASE+378)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING           (V4L2_CID_MPEG_BASE+379)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE      (V4L2_CID_MPEG_BASE+380)
+enum v4l2_mpeg_video_h264_hierarchical_coding_type {
+       V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B      = 0,
+       V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P      = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER     (V4L2_CID_MPEG_BASE+381)
+#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP  (V4L2_CID_MPEG_BASE+382)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP   (V4L2_CID_MPEG_BASE+400)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP   (V4L2_CID_MPEG_BASE+401)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP   (V4L2_CID_MPEG_BASE+402)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP       (V4L2_CID_MPEG_BASE+403)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP       (V4L2_CID_MPEG_BASE+404)
+#define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL                (V4L2_CID_MPEG_BASE+405)
+enum v4l2_mpeg_video_mpeg4_level {
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_0   = 0,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B  = 1,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_1   = 2,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_2   = 3,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_3   = 4,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B  = 5,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_4   = 6,
+       V4L2_MPEG_VIDEO_MPEG4_LEVEL_5   = 7,
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE      (V4L2_CID_MPEG_BASE+406)
+enum v4l2_mpeg_video_mpeg4_profile {
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE                            = 0,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE                   = 1,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE                              = 2,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE                   = 3,
+       V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY        = 4,
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL         (V4L2_CID_MPEG_BASE+407)
+
+/*  Control IDs for VP8 streams
+ *  Although VP8 is not part of MPEG we add these controls to the MPEG class
+ *  as that class is already handling other video compression standards
+ */
+#define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS         (V4L2_CID_MPEG_BASE+500)
+enum v4l2_vp8_num_partitions {
+       V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION     = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS    = 1,
+       V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS    = 2,
+       V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS    = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4                (V4L2_CID_MPEG_BASE+501)
+#define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES         (V4L2_CID_MPEG_BASE+502)
+enum v4l2_vp8_num_ref_frames {
+       V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME     = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME     = 1,
+       V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME     = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL           (V4L2_CID_MPEG_BASE+503)
+#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS       (V4L2_CID_MPEG_BASE+504)
+#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD        (V4L2_CID_MPEG_BASE+505)
+#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL       (V4L2_CID_MPEG_BASE+506)
+enum v4l2_vp8_golden_frame_sel {
+       V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV           = 0,
+       V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD     = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP                 (V4L2_CID_MPEG_BASE+507)
+#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP                 (V4L2_CID_MPEG_BASE+508)
+#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP             (V4L2_CID_MPEG_BASE+509)
+#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP             (V4L2_CID_MPEG_BASE+510)
+#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE                        (V4L2_CID_MPEG_BASE+511)
+
+/*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
+#define V4L2_CID_MPEG_CX2341X_BASE                             (V4L2_CTRL_CLASS_MPEG | 0x1000)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE        (V4L2_CID_MPEG_CX2341X_BASE+0)
+enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER             (V4L2_CID_MPEG_CX2341X_BASE+1)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE   (V4L2_CID_MPEG_CX2341X_BASE+2)
+enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE         (V4L2_CID_MPEG_CX2341X_BASE+3)
+enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE       (V4L2_CID_MPEG_CX2341X_BASE+4)
+enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER            (V4L2_CID_MPEG_CX2341X_BASE+5)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE                 (V4L2_CID_MPEG_CX2341X_BASE+6)
+enum v4l2_mpeg_cx2341x_video_median_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  (V4L2_CID_MPEG_CX2341X_BASE+7)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP     (V4L2_CID_MPEG_CX2341X_BASE+8)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM        (V4L2_CID_MPEG_CX2341X_BASE+9)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP   (V4L2_CID_MPEG_CX2341X_BASE+10)
+#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS        (V4L2_CID_MPEG_CX2341X_BASE+11)
+
+/*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
+#define V4L2_CID_MPEG_MFC51_BASE                               (V4L2_CTRL_CLASS_MPEG | 0x1100)
+
+#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY           (V4L2_CID_MPEG_MFC51_BASE+0)
+#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE    (V4L2_CID_MPEG_MFC51_BASE+1)
+#define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE                      (V4L2_CID_MPEG_MFC51_BASE+2)
+enum v4l2_mpeg_mfc51_video_frame_skip_mode {
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED          = 0,
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT       = 1,
+       V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT         = 2,
+};
+#define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE                     (V4L2_CID_MPEG_MFC51_BASE+3)
+enum v4l2_mpeg_mfc51_video_force_frame_type {
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED         = 0,
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME          = 1,
+       V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED        = 2,
+};
+#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING                              (V4L2_CID_MPEG_MFC51_BASE+4)
+#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV                          (V4L2_CID_MPEG_MFC51_BASE+5)
+#define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT                  (V4L2_CID_MPEG_MFC51_BASE+6)
+#define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF                    (V4L2_CID_MPEG_MFC51_BASE+7)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY            (V4L2_CID_MPEG_MFC51_BASE+50)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK                        (V4L2_CID_MPEG_MFC51_BASE+51)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH              (V4L2_CID_MPEG_MFC51_BASE+52)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC              (V4L2_CID_MPEG_MFC51_BASE+53)
+#define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P               (V4L2_CID_MPEG_MFC51_BASE+54)
+
+
+/*  Camera class control IDs */
+
+#define V4L2_CID_CAMERA_CLASS_BASE     (V4L2_CTRL_CLASS_CAMERA | 0x900)
+#define V4L2_CID_CAMERA_CLASS          (V4L2_CTRL_CLASS_CAMERA | 1)
+
+#define V4L2_CID_EXPOSURE_AUTO                 (V4L2_CID_CAMERA_CLASS_BASE+1)
+enum  v4l2_exposure_auto_type {
+       V4L2_EXPOSURE_AUTO = 0,
+       V4L2_EXPOSURE_MANUAL = 1,
+       V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
+       V4L2_EXPOSURE_APERTURE_PRIORITY = 3
+};
+#define V4L2_CID_EXPOSURE_ABSOLUTE             (V4L2_CID_CAMERA_CLASS_BASE+2)
+#define V4L2_CID_EXPOSURE_AUTO_PRIORITY                (V4L2_CID_CAMERA_CLASS_BASE+3)
+
+#define V4L2_CID_PAN_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+4)
+#define V4L2_CID_TILT_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+5)
+#define V4L2_CID_PAN_RESET                     (V4L2_CID_CAMERA_CLASS_BASE+6)
+#define V4L2_CID_TILT_RESET                    (V4L2_CID_CAMERA_CLASS_BASE+7)
+
+#define V4L2_CID_PAN_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+8)
+#define V4L2_CID_TILT_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+9)
+
+#define V4L2_CID_FOCUS_ABSOLUTE                        (V4L2_CID_CAMERA_CLASS_BASE+10)
+#define V4L2_CID_FOCUS_RELATIVE                        (V4L2_CID_CAMERA_CLASS_BASE+11)
+#define V4L2_CID_FOCUS_AUTO                    (V4L2_CID_CAMERA_CLASS_BASE+12)
+
+#define V4L2_CID_ZOOM_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+13)
+#define V4L2_CID_ZOOM_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+14)
+#define V4L2_CID_ZOOM_CONTINUOUS               (V4L2_CID_CAMERA_CLASS_BASE+15)
+
+#define V4L2_CID_PRIVACY                       (V4L2_CID_CAMERA_CLASS_BASE+16)
+
+#define V4L2_CID_IRIS_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+17)
+#define V4L2_CID_IRIS_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+18)
+
+#define V4L2_CID_AUTO_EXPOSURE_BIAS            (V4L2_CID_CAMERA_CLASS_BASE+19)
+
+#define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE   (V4L2_CID_CAMERA_CLASS_BASE+20)
+enum v4l2_auto_n_preset_white_balance {
+       V4L2_WHITE_BALANCE_MANUAL               = 0,
+       V4L2_WHITE_BALANCE_AUTO                 = 1,
+       V4L2_WHITE_BALANCE_INCANDESCENT         = 2,
+       V4L2_WHITE_BALANCE_FLUORESCENT          = 3,
+       V4L2_WHITE_BALANCE_FLUORESCENT_H        = 4,
+       V4L2_WHITE_BALANCE_HORIZON              = 5,
+       V4L2_WHITE_BALANCE_DAYLIGHT             = 6,
+       V4L2_WHITE_BALANCE_FLASH                = 7,
+       V4L2_WHITE_BALANCE_CLOUDY               = 8,
+       V4L2_WHITE_BALANCE_SHADE                = 9,
+};
+
+#define V4L2_CID_WIDE_DYNAMIC_RANGE            (V4L2_CID_CAMERA_CLASS_BASE+21)
+#define V4L2_CID_IMAGE_STABILIZATION           (V4L2_CID_CAMERA_CLASS_BASE+22)
+
+#define V4L2_CID_ISO_SENSITIVITY               (V4L2_CID_CAMERA_CLASS_BASE+23)
+#define V4L2_CID_ISO_SENSITIVITY_AUTO          (V4L2_CID_CAMERA_CLASS_BASE+24)
+enum v4l2_iso_sensitivity_auto_type {
+       V4L2_ISO_SENSITIVITY_MANUAL             = 0,
+       V4L2_ISO_SENSITIVITY_AUTO               = 1,
+};
+
+#define V4L2_CID_EXPOSURE_METERING             (V4L2_CID_CAMERA_CLASS_BASE+25)
+enum v4l2_exposure_metering {
+       V4L2_EXPOSURE_METERING_AVERAGE          = 0,
+       V4L2_EXPOSURE_METERING_CENTER_WEIGHTED  = 1,
+       V4L2_EXPOSURE_METERING_SPOT             = 2,
+       V4L2_EXPOSURE_METERING_MATRIX           = 3,
+};
+
+#define V4L2_CID_SCENE_MODE                    (V4L2_CID_CAMERA_CLASS_BASE+26)
+enum v4l2_scene_mode {
+       V4L2_SCENE_MODE_NONE                    = 0,
+       V4L2_SCENE_MODE_BACKLIGHT               = 1,
+       V4L2_SCENE_MODE_BEACH_SNOW              = 2,
+       V4L2_SCENE_MODE_CANDLE_LIGHT            = 3,
+       V4L2_SCENE_MODE_DAWN_DUSK               = 4,
+       V4L2_SCENE_MODE_FALL_COLORS             = 5,
+       V4L2_SCENE_MODE_FIREWORKS               = 6,
+       V4L2_SCENE_MODE_LANDSCAPE               = 7,
+       V4L2_SCENE_MODE_NIGHT                   = 8,
+       V4L2_SCENE_MODE_PARTY_INDOOR            = 9,
+       V4L2_SCENE_MODE_PORTRAIT                = 10,
+       V4L2_SCENE_MODE_SPORTS                  = 11,
+       V4L2_SCENE_MODE_SUNSET                  = 12,
+       V4L2_SCENE_MODE_TEXT                    = 13,
+};
+
+#define V4L2_CID_3A_LOCK                       (V4L2_CID_CAMERA_CLASS_BASE+27)
+#define V4L2_LOCK_EXPOSURE                     (1 << 0)
+#define V4L2_LOCK_WHITE_BALANCE                        (1 << 1)
+#define V4L2_LOCK_FOCUS                                (1 << 2)
+
+#define V4L2_CID_AUTO_FOCUS_START              (V4L2_CID_CAMERA_CLASS_BASE+28)
+#define V4L2_CID_AUTO_FOCUS_STOP               (V4L2_CID_CAMERA_CLASS_BASE+29)
+#define V4L2_CID_AUTO_FOCUS_STATUS             (V4L2_CID_CAMERA_CLASS_BASE+30)
+#define V4L2_AUTO_FOCUS_STATUS_IDLE            (0 << 0)
+#define V4L2_AUTO_FOCUS_STATUS_BUSY            (1 << 0)
+#define V4L2_AUTO_FOCUS_STATUS_REACHED         (1 << 1)
+#define V4L2_AUTO_FOCUS_STATUS_FAILED          (1 << 2)
+
+#define V4L2_CID_AUTO_FOCUS_RANGE              (V4L2_CID_CAMERA_CLASS_BASE+31)
+enum v4l2_auto_focus_range {
+       V4L2_AUTO_FOCUS_RANGE_AUTO              = 0,
+       V4L2_AUTO_FOCUS_RANGE_NORMAL            = 1,
+       V4L2_AUTO_FOCUS_RANGE_MACRO             = 2,
+       V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
+};
+
+#define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
+
+/* FM Modulator class control IDs */
+
+#define V4L2_CID_FM_TX_CLASS_BASE              (V4L2_CTRL_CLASS_FM_TX | 0x900)
+#define V4L2_CID_FM_TX_CLASS                   (V4L2_CTRL_CLASS_FM_TX | 1)
+
+#define V4L2_CID_RDS_TX_DEVIATION              (V4L2_CID_FM_TX_CLASS_BASE + 1)
+#define V4L2_CID_RDS_TX_PI                     (V4L2_CID_FM_TX_CLASS_BASE + 2)
+#define V4L2_CID_RDS_TX_PTY                    (V4L2_CID_FM_TX_CLASS_BASE + 3)
+#define V4L2_CID_RDS_TX_PS_NAME                        (V4L2_CID_FM_TX_CLASS_BASE + 5)
+#define V4L2_CID_RDS_TX_RADIO_TEXT             (V4L2_CID_FM_TX_CLASS_BASE + 6)
+#define V4L2_CID_RDS_TX_MONO_STEREO            (V4L2_CID_FM_TX_CLASS_BASE + 7)
+#define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD                (V4L2_CID_FM_TX_CLASS_BASE + 8)
+#define V4L2_CID_RDS_TX_COMPRESSED             (V4L2_CID_FM_TX_CLASS_BASE + 9)
+#define V4L2_CID_RDS_TX_DYNAMIC_PTY            (V4L2_CID_FM_TX_CLASS_BASE + 10)
+#define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT   (V4L2_CID_FM_TX_CLASS_BASE + 11)
+#define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM                (V4L2_CID_FM_TX_CLASS_BASE + 12)
+#define V4L2_CID_RDS_TX_MUSIC_SPEECH           (V4L2_CID_FM_TX_CLASS_BASE + 13)
+#define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE       (V4L2_CID_FM_TX_CLASS_BASE + 14)
+#define V4L2_CID_RDS_TX_ALT_FREQS              (V4L2_CID_FM_TX_CLASS_BASE + 15)
+
+#define V4L2_CID_AUDIO_LIMITER_ENABLED         (V4L2_CID_FM_TX_CLASS_BASE + 64)
+#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME    (V4L2_CID_FM_TX_CLASS_BASE + 65)
+#define V4L2_CID_AUDIO_LIMITER_DEVIATION       (V4L2_CID_FM_TX_CLASS_BASE + 66)
+
+#define V4L2_CID_AUDIO_COMPRESSION_ENABLED     (V4L2_CID_FM_TX_CLASS_BASE + 80)
+#define V4L2_CID_AUDIO_COMPRESSION_GAIN                (V4L2_CID_FM_TX_CLASS_BASE + 81)
+#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD   (V4L2_CID_FM_TX_CLASS_BASE + 82)
+#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83)
+#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME        (V4L2_CID_FM_TX_CLASS_BASE + 84)
+
+#define V4L2_CID_PILOT_TONE_ENABLED            (V4L2_CID_FM_TX_CLASS_BASE + 96)
+#define V4L2_CID_PILOT_TONE_DEVIATION          (V4L2_CID_FM_TX_CLASS_BASE + 97)
+#define V4L2_CID_PILOT_TONE_FREQUENCY          (V4L2_CID_FM_TX_CLASS_BASE + 98)
+
+#define V4L2_CID_TUNE_PREEMPHASIS              (V4L2_CID_FM_TX_CLASS_BASE + 112)
+enum v4l2_preemphasis {
+       V4L2_PREEMPHASIS_DISABLED       = 0,
+       V4L2_PREEMPHASIS_50_uS          = 1,
+       V4L2_PREEMPHASIS_75_uS          = 2,
+};
+#define V4L2_CID_TUNE_POWER_LEVEL              (V4L2_CID_FM_TX_CLASS_BASE + 113)
+#define V4L2_CID_TUNE_ANTENNA_CAPACITOR                (V4L2_CID_FM_TX_CLASS_BASE + 114)
+
+
+/* Flash and privacy (indicator) light controls */
+
+#define V4L2_CID_FLASH_CLASS_BASE              (V4L2_CTRL_CLASS_FLASH | 0x900)
+#define V4L2_CID_FLASH_CLASS                   (V4L2_CTRL_CLASS_FLASH | 1)
+
+#define V4L2_CID_FLASH_LED_MODE                        (V4L2_CID_FLASH_CLASS_BASE + 1)
+enum v4l2_flash_led_mode {
+       V4L2_FLASH_LED_MODE_NONE,
+       V4L2_FLASH_LED_MODE_FLASH,
+       V4L2_FLASH_LED_MODE_TORCH,
+};
+
+#define V4L2_CID_FLASH_STROBE_SOURCE           (V4L2_CID_FLASH_CLASS_BASE + 2)
+enum v4l2_flash_strobe_source {
+       V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
+       V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
+};
+
+#define V4L2_CID_FLASH_STROBE                  (V4L2_CID_FLASH_CLASS_BASE + 3)
+#define V4L2_CID_FLASH_STROBE_STOP             (V4L2_CID_FLASH_CLASS_BASE + 4)
+#define V4L2_CID_FLASH_STROBE_STATUS           (V4L2_CID_FLASH_CLASS_BASE + 5)
+
+#define V4L2_CID_FLASH_TIMEOUT                 (V4L2_CID_FLASH_CLASS_BASE + 6)
+#define V4L2_CID_FLASH_INTENSITY               (V4L2_CID_FLASH_CLASS_BASE + 7)
+#define V4L2_CID_FLASH_TORCH_INTENSITY         (V4L2_CID_FLASH_CLASS_BASE + 8)
+#define V4L2_CID_FLASH_INDICATOR_INTENSITY     (V4L2_CID_FLASH_CLASS_BASE + 9)
+
+#define V4L2_CID_FLASH_FAULT                   (V4L2_CID_FLASH_CLASS_BASE + 10)
+#define V4L2_FLASH_FAULT_OVER_VOLTAGE          (1 << 0)
+#define V4L2_FLASH_FAULT_TIMEOUT               (1 << 1)
+#define V4L2_FLASH_FAULT_OVER_TEMPERATURE      (1 << 2)
+#define V4L2_FLASH_FAULT_SHORT_CIRCUIT         (1 << 3)
+#define V4L2_FLASH_FAULT_OVER_CURRENT          (1 << 4)
+#define V4L2_FLASH_FAULT_INDICATOR             (1 << 5)
+#define V4L2_FLASH_FAULT_UNDER_VOLTAGE         (1 << 6)
+#define V4L2_FLASH_FAULT_INPUT_VOLTAGE         (1 << 7)
+#define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE  (1 << 8)
+
+#define V4L2_CID_FLASH_CHARGE                  (V4L2_CID_FLASH_CLASS_BASE + 11)
+#define V4L2_CID_FLASH_READY                   (V4L2_CID_FLASH_CLASS_BASE + 12)
+
+
+/* JPEG-class control IDs */
+
+#define V4L2_CID_JPEG_CLASS_BASE               (V4L2_CTRL_CLASS_JPEG | 0x900)
+#define V4L2_CID_JPEG_CLASS                    (V4L2_CTRL_CLASS_JPEG | 1)
+
+#define        V4L2_CID_JPEG_CHROMA_SUBSAMPLING        (V4L2_CID_JPEG_CLASS_BASE + 1)
+enum v4l2_jpeg_chroma_subsampling {
+       V4L2_JPEG_CHROMA_SUBSAMPLING_444        = 0,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_422        = 1,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_420        = 2,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_411        = 3,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_410        = 4,
+       V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY       = 5,
+};
+#define        V4L2_CID_JPEG_RESTART_INTERVAL          (V4L2_CID_JPEG_CLASS_BASE + 2)
+#define        V4L2_CID_JPEG_COMPRESSION_QUALITY       (V4L2_CID_JPEG_CLASS_BASE + 3)
+
+#define        V4L2_CID_JPEG_ACTIVE_MARKER             (V4L2_CID_JPEG_CLASS_BASE + 4)
+#define        V4L2_JPEG_ACTIVE_MARKER_APP0            (1 << 0)
+#define        V4L2_JPEG_ACTIVE_MARKER_APP1            (1 << 1)
+#define        V4L2_JPEG_ACTIVE_MARKER_COM             (1 << 16)
+#define        V4L2_JPEG_ACTIVE_MARKER_DQT             (1 << 17)
+#define        V4L2_JPEG_ACTIVE_MARKER_DHT             (1 << 18)
+
+
+/* Image source controls */
+#define V4L2_CID_IMAGE_SOURCE_CLASS_BASE       (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
+#define V4L2_CID_IMAGE_SOURCE_CLASS            (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)
+
+#define V4L2_CID_VBLANK                                (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
+#define V4L2_CID_HBLANK                                (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
+#define V4L2_CID_ANALOGUE_GAIN                 (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
+#define V4L2_CID_TEST_PATTERN_RED              (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
+#define V4L2_CID_TEST_PATTERN_GREENR           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
+#define V4L2_CID_TEST_PATTERN_BLUE             (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
+#define V4L2_CID_TEST_PATTERN_GREENB           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+
+
+/* Image processing controls */
+
+#define V4L2_CID_IMAGE_PROC_CLASS_BASE         (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
+#define V4L2_CID_IMAGE_PROC_CLASS              (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
+
+#define V4L2_CID_LINK_FREQ                     (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
+#define V4L2_CID_PIXEL_RATE                    (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
+#define V4L2_CID_TEST_PATTERN                  (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
+
+
+/*  DV-class control IDs defined by V4L2 */
+#define V4L2_CID_DV_CLASS_BASE                 (V4L2_CTRL_CLASS_DV | 0x900)
+#define V4L2_CID_DV_CLASS                      (V4L2_CTRL_CLASS_DV | 1)
+
+#define        V4L2_CID_DV_TX_HOTPLUG                  (V4L2_CID_DV_CLASS_BASE + 1)
+#define        V4L2_CID_DV_TX_RXSENSE                  (V4L2_CID_DV_CLASS_BASE + 2)
+#define        V4L2_CID_DV_TX_EDID_PRESENT             (V4L2_CID_DV_CLASS_BASE + 3)
+#define        V4L2_CID_DV_TX_MODE                     (V4L2_CID_DV_CLASS_BASE + 4)
+enum v4l2_dv_tx_mode {
+       V4L2_DV_TX_MODE_DVI_D   = 0,
+       V4L2_DV_TX_MODE_HDMI    = 1,
+};
+#define V4L2_CID_DV_TX_RGB_RANGE               (V4L2_CID_DV_CLASS_BASE + 5)
+enum v4l2_dv_rgb_range {
+       V4L2_DV_RGB_RANGE_AUTO    = 0,
+       V4L2_DV_RGB_RANGE_LIMITED = 1,
+       V4L2_DV_RGB_RANGE_FULL    = 2,
+};
+
+#define        V4L2_CID_DV_RX_POWER_PRESENT            (V4L2_CID_DV_CLASS_BASE + 100)
+#define V4L2_CID_DV_RX_RGB_RANGE               (V4L2_CID_DV_CLASS_BASE + 101)
+
+#define V4L2_CID_FM_RX_CLASS_BASE              (V4L2_CTRL_CLASS_FM_RX | 0x900)
+#define V4L2_CID_FM_RX_CLASS                   (V4L2_CTRL_CLASS_FM_RX | 1)
+
+#define V4L2_CID_TUNE_DEEMPHASIS               (V4L2_CID_FM_RX_CLASS_BASE + 1)
+enum v4l2_deemphasis {
+       V4L2_DEEMPHASIS_DISABLED        = V4L2_PREEMPHASIS_DISABLED,
+       V4L2_DEEMPHASIS_50_uS           = V4L2_PREEMPHASIS_50_uS,
+       V4L2_DEEMPHASIS_75_uS           = V4L2_PREEMPHASIS_75_uS,
+};
+
+#define V4L2_CID_RDS_RECEPTION                 (V4L2_CID_FM_RX_CLASS_BASE + 2)
+#define V4L2_CID_RDS_RX_PTY                    (V4L2_CID_FM_RX_CLASS_BASE + 3)
+#define V4L2_CID_RDS_RX_PS_NAME                        (V4L2_CID_FM_RX_CLASS_BASE + 4)
+#define V4L2_CID_RDS_RX_RADIO_TEXT             (V4L2_CID_FM_RX_CLASS_BASE + 5)
+#define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT   (V4L2_CID_FM_RX_CLASS_BASE + 6)
+#define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM                (V4L2_CID_FM_RX_CLASS_BASE + 7)
+#define V4L2_CID_RDS_RX_MUSIC_SPEECH           (V4L2_CID_FM_RX_CLASS_BASE + 8)
+
+#define V4L2_CID_RF_TUNER_CLASS_BASE           (V4L2_CTRL_CLASS_RF_TUNER | 0x900)
+#define V4L2_CID_RF_TUNER_CLASS                        (V4L2_CTRL_CLASS_RF_TUNER | 1)
+
+#define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO       (V4L2_CID_RF_TUNER_CLASS_BASE + 11)
+#define V4L2_CID_RF_TUNER_BANDWIDTH            (V4L2_CID_RF_TUNER_CLASS_BASE + 12)
+#define V4L2_CID_RF_TUNER_RF_GAIN              (V4L2_CID_RF_TUNER_CLASS_BASE + 32)
+#define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO                (V4L2_CID_RF_TUNER_CLASS_BASE + 41)
+#define V4L2_CID_RF_TUNER_LNA_GAIN             (V4L2_CID_RF_TUNER_CLASS_BASE + 42)
+#define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO      (V4L2_CID_RF_TUNER_CLASS_BASE + 51)
+#define V4L2_CID_RF_TUNER_MIXER_GAIN           (V4L2_CID_RF_TUNER_CLASS_BASE + 52)
+#define V4L2_CID_RF_TUNER_IF_GAIN_AUTO         (V4L2_CID_RF_TUNER_CLASS_BASE + 61)
+#define V4L2_CID_RF_TUNER_IF_GAIN              (V4L2_CID_RF_TUNER_CLASS_BASE + 62)
+#define V4L2_CID_RF_TUNER_PLL_LOCK                     (V4L2_CID_RF_TUNER_CLASS_BASE + 91)
+
+
+/*  Detection-class control IDs defined by V4L2 */
+#define V4L2_CID_DETECT_CLASS_BASE             (V4L2_CTRL_CLASS_DETECT | 0x900)
+#define V4L2_CID_DETECT_CLASS                  (V4L2_CTRL_CLASS_DETECT | 1)
+
+#define V4L2_CID_DETECT_MD_MODE                        (V4L2_CID_DETECT_CLASS_BASE + 1)
+enum v4l2_detect_md_mode {
+       V4L2_DETECT_MD_MODE_DISABLED            = 0,
+       V4L2_DETECT_MD_MODE_GLOBAL              = 1,
+       V4L2_DETECT_MD_MODE_THRESHOLD_GRID      = 2,
+       V4L2_DETECT_MD_MODE_REGION_GRID         = 3,
+};
+#define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD    (V4L2_CID_DETECT_CLASS_BASE + 2)
+#define V4L2_CID_DETECT_MD_THRESHOLD_GRID      (V4L2_CID_DETECT_CLASS_BASE + 3)
+#define V4L2_CID_DETECT_MD_REGION_GRID         (V4L2_CID_DETECT_CLASS_BASE + 4)
+
+#endif
diff --git a/lib/libdss-include/linux/v4l2-dv-timings.h b/lib/libdss-include/linux/v4l2-dv-timings.h
new file mode 100644 (file)
index 0000000..c039f1d
--- /dev/null
@@ -0,0 +1,927 @@
+/*
+ * V4L2 DV timings header.
+ *
+ * Copyright (C) 2012  Hans Verkuil <hans.verkuil@cisco.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef _V4L2_DV_TIMINGS_H
+#define _V4L2_DV_TIMINGS_H
+
+#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6))
+/* Sadly gcc versions older than 4.6 have a bug in how they initialize
+   anonymous unions where they require additional curly brackets.
+   This violates the C1x standard. This workaround adds the curly brackets
+   if needed. */
+#define V4L2_INIT_BT_TIMINGS(_width, args...) \
+       { .bt = { _width , ## args } }
+#else
+#define V4L2_INIT_BT_TIMINGS(_width, args...) \
+       .bt = { _width , ## args }
+#endif
+
+/* CEA-861-E timings (i.e. standard HDTV timings) */
+
+#define V4L2_DV_BT_CEA_640X480P59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               25175000, 16, 96, 48, 10, 2, 33, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, 0) \
+}
+
+/* Note: these are the nominal timings, for HDMI links this format is typically
+ * double-clocked to meet the minimum pixelclock requirements.  */
+#define V4L2_DV_BT_CEA_720X480I59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 480, 1, 0, \
+               13500000, 19, 62, 57, 4, 3, 15, 4, 3, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_720X480P59_94 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \
+               27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+/* Note: these are the nominal timings, for HDMI links this format is typically
+ * double-clocked to meet the minimum pixelclock requirements.  */
+#define V4L2_DV_BT_CEA_720X576I50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 576, 1, 0, \
+               13500000, 12, 63, 69, 2, 3, 19, 2, 3, 20, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_720X576P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \
+               27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               59400000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1280X720P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 720, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080I50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080I60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | \
+               V4L2_DV_FL_HALF_LINE | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_1920X1080P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_3840X2160P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P24 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P25 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P30 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P50 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+#define V4L2_DV_BT_CEA_4096X2160P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_CEA861, \
+               V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_IS_CE_VIDEO) \
+}
+
+
+/* VESA Discrete Monitor Timings as per version 1.0, revision 12 */
+
+#define V4L2_DV_BT_DMT_640X350P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 350, 0, V4L2_DV_HSYNC_POS_POL, \
+               31500000, 32, 64, 96, 32, 3, 60, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X400P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 400, 0, V4L2_DV_VSYNC_POS_POL, \
+               31500000, 32, 64, 96, 1, 3, 41, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_720X400P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(720, 400, 0, V4L2_DV_VSYNC_POS_POL, \
+               35500000, 36, 72, 108, 1, 3, 42, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* VGA resolutions */
+#define V4L2_DV_BT_DMT_640X480P60 V4L2_DV_BT_CEA_640X480P59_94
+
+#define V4L2_DV_BT_DMT_640X480P72 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               31500000, 24, 40, 128, 9, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X480P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               31500000, 16, 64, 120, 1, 3, 16, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_640X480P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \
+               36000000, 56, 56, 80, 1, 3, 25, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* SVGA resolutions */
+#define V4L2_DV_BT_DMT_800X600P56 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               36000000, 24, 72, 128, 1, 2, 22, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               40000000, 40, 128, 88, 1, 4, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P72 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               50000000, 56, 120, 64, 37, 6, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               49500000, 16, 80, 160, 1, 3, 21, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               56250000, 32, 64, 152, 1, 3, 27, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_800X600P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(800, 600, 0, V4L2_DV_HSYNC_POS_POL, \
+               73250000, 48, 32, 80, 3, 4, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_848X480P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(848, 480, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               33750000, 16, 112, 112, 6, 8, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768I43 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 1, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               44900000, 8, 176, 56, 0, 4, 20, 0, 4, 21, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+/* XGA resolutions */
+#define V4L2_DV_BT_DMT_1024X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \
+               65000000, 24, 136, 160, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P70 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \
+               75000000, 24, 136, 144, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               78750000, 16, 96, 176, 1, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               94500000, 48, 96, 208, 1, 3, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1024X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1024, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               115500000, 48, 32, 80, 3, 4, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* XGA+ resolution */
+#define V4L2_DV_BT_DMT_1152X864P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1152, 864, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 64, 128, 256, 1, 3, 32, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X720P60 V4L2_DV_BT_CEA_1280X720P60
+
+/* WXGA resolutions */
+#define V4L2_DV_BT_DMT_1280X768P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               68250000, 48, 32, 80, 3, 7, 12, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               79500000, 64, 128, 192, 3, 7, 20, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               102250000, 80, 128, 208, 3, 7, 27, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \
+               117500000, 80, 136, 216, 3, 7, 31, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               140250000, 48, 32, 80, 3, 7, 35, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \
+               71000000, 48, 32, 80, 3, 6, 14, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               83500000, 72, 128, 200, 3, 6, 22, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               106500000, 80, 128, 208, 3, 6, 29, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \
+               122500000, 80, 136, 216, 3, 6, 34, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X800P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \
+               146250000, 48, 32, 80, 3, 6, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 96, 112, 312, 1, 3, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               148500000, 64, 160, 224, 1, 3, 47, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X960P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 960, 0, V4L2_DV_HSYNC_POS_POL, \
+               175500000, 48, 32, 80, 3, 4, 50, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* SXGA resolutions */
+#define V4L2_DV_BT_DMT_1280X1024P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 48, 112, 248, 1, 3, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               135000000, 16, 144, 248, 1, 3, 38, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               157500000, 64, 160, 224, 1, 3, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1280X1024P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1280, 1024, 0, V4L2_DV_HSYNC_POS_POL, \
+               187250000, 48, 32, 80, 3, 7, 50, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1360X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1360, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               85500000, 64, 112, 256, 3, 6, 18, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1360X768P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1360, 768, 0, V4L2_DV_HSYNC_POS_POL, \
+               148250000, 48, 32, 80, 3, 5, 37, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1366X768P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1366, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1366X768P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1366, 768, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               72000000, 14, 56, 64, 1, 3, 28, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* SXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1400X1050P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               101000000, 48, 32, 80, 3, 4, 23, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               121750000, 88, 144, 232, 3, 4, 32, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               156000000, 104, 144, 248, 3, 4, 42, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               179500000, 104, 152, 256, 3, 4, 48, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1400X1050P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               208000000, 48, 32, 80, 3, 4, 55, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1440X900P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \
+               88750000, 48, 32, 80, 3, 6, 17, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               106500000, 80, 152, 232, 3, 6, 25, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               136750000, 96, 152, 248, 3, 6, 33, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \
+               157000000, 104, 152, 256, 3, 6, 39, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1440X900P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \
+               182750000, 48, 32, 80, 3, 6, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1600X900P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 900, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               108000000, 24, 80, 96, 1, 3, 96, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* UXGA resolutions */
+#define V4L2_DV_BT_DMT_1600X1200P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               162000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P65 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               175500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P70 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               189000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               202500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               229500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1600X1200P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1600, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               268250000, 48, 32, 80, 3, 4, 64, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WSXGA+ resolutions */
+#define V4L2_DV_BT_DMT_1680X1050P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               119000000, 48, 32, 80, 3, 6, 21, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               146250000, 104, 176, 280, 3, 6, 30, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               187000000, 120, 176, 296, 3, 6, 40, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \
+               214750000, 128, 176, 304, 3, 6, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1680X1050P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \
+               245500000, 48, 32, 80, 3, 6, 53, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \
+               204750000, 128, 200, 328, 1, 3, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \
+               261000000, 96, 216, 352, 1, 3, 69, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1792X1344P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_HSYNC_POS_POL, \
+               333250000, 48, 32, 80, 3, 4, 72, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \
+               218250000, 96, 224, 352, 1, 3, 43, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \
+               288000000, 128, 224, 352, 1, 3, 104, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1856X1392P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_HSYNC_POS_POL, \
+               356500000, 48, 32, 80, 3, 4, 75, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1080P60 V4L2_DV_BT_CEA_1920X1080P60
+
+/* WUXGA resolutions */
+#define V4L2_DV_BT_DMT_1920X1200P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               154000000, 48, 32, 80, 3, 6, 26, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               193250000, 136, 200, 336, 3, 6, 36, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               245250000, 136, 208, 344, 3, 6, 46, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \
+               281250000, 144, 208, 352, 3, 6, 53, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1200P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \
+               317000000, 48, 32, 80, 3, 6, 62, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \
+               234000000, 128, 208, 344, 1, 3, 56, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \
+               297000000, 144, 224, 352, 1, 3, 56, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_1920X1440P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_HSYNC_POS_POL, \
+               380500000, 48, 32, 80, 3, 4, 78, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_2048X1152P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2048, 1152, 0, \
+               V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \
+               162000000, 26, 80, 96, 1, 3, 44, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* WQXGA resolutions */
+#define V4L2_DV_BT_DMT_2560X1600P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \
+               268500000, 48, 32, 80, 3, 6, 37, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P60 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               348500000, 192, 280, 472, 3, 6, 49, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P75 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               443250000, 208, 280, 488, 3, 6, 63, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P85 { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \
+               505250000, 208, 280, 488, 3, 6, 73, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \
+}
+
+#define V4L2_DV_BT_DMT_2560X1600P120_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \
+               552750000, 48, 32, 80, 3, 6, 85, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+/* 4K resolutions */
+#define V4L2_DV_BT_DMT_4096X2160P60_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               556744000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#define V4L2_DV_BT_DMT_4096X2160P59_94_RB { \
+       .type = V4L2_DV_BT_656_1120, \
+       V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
+               556188000, 8, 32, 40, 48, 8, 6, 0, 0, 0, \
+               V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \
+               V4L2_DV_FL_REDUCED_BLANKING) \
+}
+
+#endif
diff --git a/lib/libdss-include/linux/v4l2-mediabus.h b/lib/libdss-include/linux/v4l2-mediabus.h
new file mode 100644 (file)
index 0000000..dbacc51
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Media Bus API header
+ *
+ * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_V4L2_MEDIABUS_H
+#define __LINUX_V4L2_MEDIABUS_H
+
+#include <linux/media-bus-format.h>
+#include <linux/types.h>
+#include <linux/videodev2.h>
+
+/**
+ * struct v4l2_mbus_framefmt - frame format on the media bus
+ * @width:     frame width
+ * @height:    frame height
+ * @code:      data format code (from enum v4l2_mbus_pixelcode)
+ * @field:     used interlacing type (from enum v4l2_field)
+ * @colorspace:        colorspace of the data (from enum v4l2_colorspace)
+ * @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
+ * @quantization: quantization of the data (from enum v4l2_quantization)
+ * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func)
+ */
+struct v4l2_mbus_framefmt {
+       __u32                   width;
+       __u32                   height;
+       __u32                   code;
+       __u32                   field;
+       __u32                   colorspace;
+       __u16                   ycbcr_enc;
+       __u16                   quantization;
+       __u16                   xfer_func;
+       __u16                   reserved[11];
+};
+
+/*
+ * enum v4l2_mbus_pixelcode and its definitions are now deprecated, and
+ * MEDIA_BUS_FMT_ definitions (defined in media-bus-format.h) should be
+ * used instead.
+ *
+ * New defines should only be added to media-bus-format.h. The
+ * v4l2_mbus_pixelcode enum is frozen.
+ */
+
+#define V4L2_MBUS_FROM_MEDIA_BUS_FMT(name)     \
+       V4L2_MBUS_FMT_ ## name = MEDIA_BUS_FMT_ ## name
+
+enum v4l2_mbus_pixelcode {
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(FIXED),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB444_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB555_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(BGR565_2X8_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB565_2X8_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB666_1X18),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(RGB888_2X12_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(ARGB8888_1X32),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UV8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1_5X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_2X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_2X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(Y12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YDYUYDYV8_1X16),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU10_1X20),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUV10_1X30),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(AYUV8_1X32),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_2X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(UYVY12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(VYUY12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YUYV12_1X24),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(YVYU12_1X24),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_ALAW8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_DPCM8_1X8),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADHI_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_BE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_2X8_PADLO_LE),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB10_1X10),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SBGGR12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGBRG12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SGRBG12_1X12),
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(SRGGB12_1X12),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(JPEG_1X8),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(S5C_UYVY_JPEG_1X8),
+
+       V4L2_MBUS_FROM_MEDIA_BUS_FMT(AHSV8888_1X32),
+};
+
+#endif
diff --git a/lib/libdss-include/linux/v4l2-subdev.h b/lib/libdss-include/linux/v4l2-subdev.h
new file mode 100644 (file)
index 0000000..dbce2b5
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * V4L2 subdev userspace API
+ *
+ * Copyright (C) 2010 Nokia Corporation
+ *
+ * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *          Sakari Ailus <sakari.ailus@iki.fi>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __LINUX_V4L2_SUBDEV_H
+#define __LINUX_V4L2_SUBDEV_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/v4l2-common.h>
+#include <linux/v4l2-mediabus.h>
+
+/**
+ * enum v4l2_subdev_format_whence - Media bus format type
+ * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
+ * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
+ */
+enum v4l2_subdev_format_whence {
+       V4L2_SUBDEV_FORMAT_TRY = 0,
+       V4L2_SUBDEV_FORMAT_ACTIVE = 1,
+};
+
+/**
+ * struct v4l2_subdev_format - Pad-level media bus format
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ * @pad: pad number, as reported by the media API
+ * @format: media bus format (format code and frame size)
+ */
+struct v4l2_subdev_format {
+       __u32 which;
+       __u32 pad;
+       struct v4l2_mbus_framefmt format;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_crop - Pad-level crop settings
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ * @pad: pad number, as reported by the media API
+ * @rect: pad crop rectangle boundaries
+ */
+struct v4l2_subdev_crop {
+       __u32 which;
+       __u32 pad;
+       struct v4l2_rect rect;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: format index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_mbus_code_enum {
+       __u32 pad;
+       __u32 index;
+       __u32 code;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: format index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_frame_size_enum {
+       __u32 index;
+       __u32 pad;
+       __u32 code;
+       __u32 min_width;
+       __u32 max_width;
+       __u32 min_height;
+       __u32 max_height;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_frame_interval - Pad-level frame rate
+ * @pad: pad number, as reported by the media API
+ * @interval: frame interval in seconds
+ */
+struct v4l2_subdev_frame_interval {
+       __u32 pad;
+       struct v4l2_fract interval;
+       __u32 reserved[9];
+};
+
+/**
+ * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
+ * @pad: pad number, as reported by the media API
+ * @index: frame interval index during enumeration
+ * @code: format code (MEDIA_BUS_FMT_ definitions)
+ * @width: frame width in pixels
+ * @height: frame height in pixels
+ * @interval: frame interval in seconds
+ * @which: format type (from enum v4l2_subdev_format_whence)
+ */
+struct v4l2_subdev_frame_interval_enum {
+       __u32 index;
+       __u32 pad;
+       __u32 code;
+       __u32 width;
+       __u32 height;
+       struct v4l2_fract interval;
+       __u32 which;
+       __u32 reserved[8];
+};
+
+/**
+ * struct v4l2_subdev_selection - selection info
+ *
+ * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY
+ * @pad: pad number, as reported by the media API
+ * @target: Selection target, used to choose one of possible rectangles,
+ *         defined in v4l2-common.h; V4L2_SEL_TGT_* .
+ * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
+ * @r: coordinates of the selection window
+ * @reserved: for future use, set to zero for now
+ *
+ * Hardware may use multiple helper windows to process a video stream.
+ * The structure is used to exchange this selection areas between
+ * an application and a driver.
+ */
+struct v4l2_subdev_selection {
+       __u32 which;
+       __u32 pad;
+       __u32 target;
+       __u32 flags;
+       struct v4l2_rect r;
+       __u32 reserved[8];
+};
+
+/* Backwards compatibility define --- to be removed */
+#define v4l2_subdev_edid v4l2_edid
+
+#define VIDIOC_SUBDEV_G_FMT                    _IOWR('V',  4, struct v4l2_subdev_format)
+#define VIDIOC_SUBDEV_S_FMT                    _IOWR('V',  5, struct v4l2_subdev_format)
+#define VIDIOC_SUBDEV_G_FRAME_INTERVAL         _IOWR('V', 21, struct v4l2_subdev_frame_interval)
+#define VIDIOC_SUBDEV_S_FRAME_INTERVAL         _IOWR('V', 22, struct v4l2_subdev_frame_interval)
+#define VIDIOC_SUBDEV_ENUM_MBUS_CODE           _IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
+#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE          _IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
+#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL      _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
+#define VIDIOC_SUBDEV_G_CROP                   _IOWR('V', 59, struct v4l2_subdev_crop)
+#define VIDIOC_SUBDEV_S_CROP                   _IOWR('V', 60, struct v4l2_subdev_crop)
+#define VIDIOC_SUBDEV_G_SELECTION              _IOWR('V', 61, struct v4l2_subdev_selection)
+#define VIDIOC_SUBDEV_S_SELECTION              _IOWR('V', 62, struct v4l2_subdev_selection)
+/* The following ioctls are identical to the ioctls in videodev2.h */
+#define VIDIOC_SUBDEV_G_EDID                   _IOWR('V', 40, struct v4l2_edid)
+#define VIDIOC_SUBDEV_S_EDID                   _IOWR('V', 41, struct v4l2_edid)
+#define VIDIOC_SUBDEV_S_DV_TIMINGS             _IOWR('V', 87, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_G_DV_TIMINGS             _IOWR('V', 88, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_ENUM_DV_TIMINGS          _IOWR('V', 98, struct v4l2_enum_dv_timings)
+#define VIDIOC_SUBDEV_QUERY_DV_TIMINGS         _IOR('V', 99, struct v4l2_dv_timings)
+#define VIDIOC_SUBDEV_DV_TIMINGS_CAP           _IOWR('V', 100, struct v4l2_dv_timings_cap)
+
+#endif
diff --git a/lib/libdss-include/linux/version.h b/lib/libdss-include/linux/version.h
new file mode 100644 (file)
index 0000000..6653169
--- /dev/null
@@ -0,0 +1,2 @@
+#define LINUX_VERSION_CODE 263174
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/lib/libdss-include/linux/veth.h b/lib/libdss-include/linux/veth.h
new file mode 100644 (file)
index 0000000..3354c1e
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __NET_VETH_H_
+#define __NET_VETH_H_
+
+enum {
+       VETH_INFO_UNSPEC,
+       VETH_INFO_PEER,
+
+       __VETH_INFO_MAX
+#define VETH_INFO_MAX  (__VETH_INFO_MAX - 1)
+};
+
+#endif
diff --git a/lib/libdss-include/linux/vfio.h b/lib/libdss-include/linux/vfio.h
new file mode 100644 (file)
index 0000000..aa276bc
--- /dev/null
@@ -0,0 +1,594 @@
+/*
+ * VFIO API definition
+ *
+ * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
+ *     Author: Alex Williamson <alex.williamson@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef VFIO_H
+#define VFIO_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define VFIO_API_VERSION       0
+
+
+/* Kernel & User level defines for VFIO IOCTLs. */
+
+/* Extensions */
+
+#define VFIO_TYPE1_IOMMU               1
+#define VFIO_SPAPR_TCE_IOMMU           2
+#define VFIO_TYPE1v2_IOMMU             3
+/*
+ * IOMMU enforces DMA cache coherence (ex. PCIe NoSnoop stripping).  This
+ * capability is subject to change as groups are added or removed.
+ */
+#define VFIO_DMA_CC_IOMMU              4
+
+/* Check if EEH is supported */
+#define VFIO_EEH                       5
+
+/* Two-stage IOMMU */
+#define VFIO_TYPE1_NESTING_IOMMU       6       /* Implies v2 */
+
+#define VFIO_SPAPR_TCE_v2_IOMMU                7
+
+/*
+ * The IOCTL interface is designed for extensibility by embedding the
+ * structure length (argsz) and flags into structures passed between
+ * kernel and userspace.  We therefore use the _IO() macro for these
+ * defines to avoid implicitly embedding a size into the ioctl request.
+ * As structure fields are added, argsz will increase to match and flag
+ * bits will be defined to indicate additional fields with valid data.
+ * It's *always* the caller's responsibility to indicate the size of
+ * the structure passed by setting argsz appropriately.
+ */
+
+#define VFIO_TYPE      (';')
+#define VFIO_BASE      100
+
+/* -------- IOCTLs for VFIO file descriptor (/dev/vfio/vfio) -------- */
+
+/**
+ * VFIO_GET_API_VERSION - _IO(VFIO_TYPE, VFIO_BASE + 0)
+ *
+ * Report the version of the VFIO API.  This allows us to bump the entire
+ * API version should we later need to add or change features in incompatible
+ * ways.
+ * Return: VFIO_API_VERSION
+ * Availability: Always
+ */
+#define VFIO_GET_API_VERSION           _IO(VFIO_TYPE, VFIO_BASE + 0)
+
+/**
+ * VFIO_CHECK_EXTENSION - _IOW(VFIO_TYPE, VFIO_BASE + 1, __u32)
+ *
+ * Check whether an extension is supported.
+ * Return: 0 if not supported, 1 (or some other positive integer) if supported.
+ * Availability: Always
+ */
+#define VFIO_CHECK_EXTENSION           _IO(VFIO_TYPE, VFIO_BASE + 1)
+
+/**
+ * VFIO_SET_IOMMU - _IOW(VFIO_TYPE, VFIO_BASE + 2, __s32)
+ *
+ * Set the iommu to the given type.  The type must be supported by an
+ * iommu driver as verified by calling CHECK_EXTENSION using the same
+ * type.  A group must be set to this file descriptor before this
+ * ioctl is available.  The IOMMU interfaces enabled by this call are
+ * specific to the value set.
+ * Return: 0 on success, -errno on failure
+ * Availability: When VFIO group attached
+ */
+#define VFIO_SET_IOMMU                 _IO(VFIO_TYPE, VFIO_BASE + 2)
+
+/* -------- IOCTLs for GROUP file descriptors (/dev/vfio/$GROUP) -------- */
+
+/**
+ * VFIO_GROUP_GET_STATUS - _IOR(VFIO_TYPE, VFIO_BASE + 3,
+ *                                             struct vfio_group_status)
+ *
+ * Retrieve information about the group.  Fills in provided
+ * struct vfio_group_info.  Caller sets argsz.
+ * Return: 0 on succes, -errno on failure.
+ * Availability: Always
+ */
+struct vfio_group_status {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_GROUP_FLAGS_VIABLE                (1 << 0)
+#define VFIO_GROUP_FLAGS_CONTAINER_SET (1 << 1)
+};
+#define VFIO_GROUP_GET_STATUS          _IO(VFIO_TYPE, VFIO_BASE + 3)
+
+/**
+ * VFIO_GROUP_SET_CONTAINER - _IOW(VFIO_TYPE, VFIO_BASE + 4, __s32)
+ *
+ * Set the container for the VFIO group to the open VFIO file
+ * descriptor provided.  Groups may only belong to a single
+ * container.  Containers may, at their discretion, support multiple
+ * groups.  Only when a container is set are all of the interfaces
+ * of the VFIO file descriptor and the VFIO group file descriptor
+ * available to the user.
+ * Return: 0 on success, -errno on failure.
+ * Availability: Always
+ */
+#define VFIO_GROUP_SET_CONTAINER       _IO(VFIO_TYPE, VFIO_BASE + 4)
+
+/**
+ * VFIO_GROUP_UNSET_CONTAINER - _IO(VFIO_TYPE, VFIO_BASE + 5)
+ *
+ * Remove the group from the attached container.  This is the
+ * opposite of the SET_CONTAINER call and returns the group to
+ * an initial state.  All device file descriptors must be released
+ * prior to calling this interface.  When removing the last group
+ * from a container, the IOMMU will be disabled and all state lost,
+ * effectively also returning the VFIO file descriptor to an initial
+ * state.
+ * Return: 0 on success, -errno on failure.
+ * Availability: When attached to container
+ */
+#define VFIO_GROUP_UNSET_CONTAINER     _IO(VFIO_TYPE, VFIO_BASE + 5)
+
+/**
+ * VFIO_GROUP_GET_DEVICE_FD - _IOW(VFIO_TYPE, VFIO_BASE + 6, char)
+ *
+ * Return a new file descriptor for the device object described by
+ * the provided string.  The string should match a device listed in
+ * the devices subdirectory of the IOMMU group sysfs entry.  The
+ * group containing the device must already be added to this context.
+ * Return: new file descriptor on success, -errno on failure.
+ * Availability: When attached to container
+ */
+#define VFIO_GROUP_GET_DEVICE_FD       _IO(VFIO_TYPE, VFIO_BASE + 6)
+
+/* --------------- IOCTLs for DEVICE file descriptors --------------- */
+
+/**
+ * VFIO_DEVICE_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 7,
+ *                                             struct vfio_device_info)
+ *
+ * Retrieve information about the device.  Fills in provided
+ * struct vfio_device_info.  Caller sets argsz.
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_device_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_DEVICE_FLAGS_RESET        (1 << 0)        /* Device supports reset */
+#define VFIO_DEVICE_FLAGS_PCI  (1 << 1)        /* vfio-pci device */
+#define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)    /* vfio-platform device */
+#define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)       /* vfio-amba device */
+       __u32   num_regions;    /* Max region index + 1 */
+       __u32   num_irqs;       /* Max IRQ index + 1 */
+};
+#define VFIO_DEVICE_GET_INFO           _IO(VFIO_TYPE, VFIO_BASE + 7)
+
+/**
+ * VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8,
+ *                                    struct vfio_region_info)
+ *
+ * Retrieve information about a device region.  Caller provides
+ * struct vfio_region_info with index value set.  Caller sets argsz.
+ * Implementation of region mapping is bus driver specific.  This is
+ * intended to describe MMIO, I/O port, as well as bus specific
+ * regions (ex. PCI config space).  Zero sized regions may be used
+ * to describe unimplemented regions (ex. unimplemented PCI BARs).
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_region_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_REGION_INFO_FLAG_READ     (1 << 0) /* Region supports read */
+#define VFIO_REGION_INFO_FLAG_WRITE    (1 << 1) /* Region supports write */
+#define VFIO_REGION_INFO_FLAG_MMAP     (1 << 2) /* Region supports mmap */
+       __u32   index;          /* Region index */
+       __u32   resv;           /* Reserved for alignment */
+       __u64   size;           /* Region size (bytes) */
+       __u64   offset;         /* Region offset from start of device fd */
+};
+#define VFIO_DEVICE_GET_REGION_INFO    _IO(VFIO_TYPE, VFIO_BASE + 8)
+
+/**
+ * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9,
+ *                                 struct vfio_irq_info)
+ *
+ * Retrieve information about a device IRQ.  Caller provides
+ * struct vfio_irq_info with index value set.  Caller sets argsz.
+ * Implementation of IRQ mapping is bus driver specific.  Indexes
+ * using multiple IRQs are primarily intended to support MSI-like
+ * interrupt blocks.  Zero count irq blocks may be used to describe
+ * unimplemented interrupt types.
+ *
+ * The EVENTFD flag indicates the interrupt index supports eventfd based
+ * signaling.
+ *
+ * The MASKABLE flags indicates the index supports MASK and UNMASK
+ * actions described below.
+ *
+ * AUTOMASKED indicates that after signaling, the interrupt line is
+ * automatically masked by VFIO and the user needs to unmask the line
+ * to receive new interrupts.  This is primarily intended to distinguish
+ * level triggered interrupts.
+ *
+ * The NORESIZE flag indicates that the interrupt lines within the index
+ * are setup as a set and new subindexes cannot be enabled without first
+ * disabling the entire index.  This is used for interrupts like PCI MSI
+ * and MSI-X where the driver may only use a subset of the available
+ * indexes, but VFIO needs to enable a specific number of vectors
+ * upfront.  In the case of MSI-X, where the user can enable MSI-X and
+ * then add and unmask vectors, it's up to userspace to make the decision
+ * whether to allocate the maximum supported number of vectors or tear
+ * down setup and incrementally increase the vectors as each is enabled.
+ */
+struct vfio_irq_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IRQ_INFO_EVENTFD          (1 << 0)
+#define VFIO_IRQ_INFO_MASKABLE         (1 << 1)
+#define VFIO_IRQ_INFO_AUTOMASKED       (1 << 2)
+#define VFIO_IRQ_INFO_NORESIZE         (1 << 3)
+       __u32   index;          /* IRQ index */
+       __u32   count;          /* Number of IRQs within this index */
+};
+#define VFIO_DEVICE_GET_IRQ_INFO       _IO(VFIO_TYPE, VFIO_BASE + 9)
+
+/**
+ * VFIO_DEVICE_SET_IRQS - _IOW(VFIO_TYPE, VFIO_BASE + 10, struct vfio_irq_set)
+ *
+ * Set signaling, masking, and unmasking of interrupts.  Caller provides
+ * struct vfio_irq_set with all fields set.  'start' and 'count' indicate
+ * the range of subindexes being specified.
+ *
+ * The DATA flags specify the type of data provided.  If DATA_NONE, the
+ * operation performs the specified action immediately on the specified
+ * interrupt(s).  For example, to unmask AUTOMASKED interrupt [0,0]:
+ * flags = (DATA_NONE|ACTION_UNMASK), index = 0, start = 0, count = 1.
+ *
+ * DATA_BOOL allows sparse support for the same on arrays of interrupts.
+ * For example, to mask interrupts [0,1] and [0,3] (but not [0,2]):
+ * flags = (DATA_BOOL|ACTION_MASK), index = 0, start = 1, count = 3,
+ * data = {1,0,1}
+ *
+ * DATA_EVENTFD binds the specified ACTION to the provided __s32 eventfd.
+ * A value of -1 can be used to either de-assign interrupts if already
+ * assigned or skip un-assigned interrupts.  For example, to set an eventfd
+ * to be trigger for interrupts [0,0] and [0,2]:
+ * flags = (DATA_EVENTFD|ACTION_TRIGGER), index = 0, start = 0, count = 3,
+ * data = {fd1, -1, fd2}
+ * If index [0,1] is previously set, two count = 1 ioctls calls would be
+ * required to set [0,0] and [0,2] without changing [0,1].
+ *
+ * Once a signaling mechanism is set, DATA_BOOL or DATA_NONE can be used
+ * with ACTION_TRIGGER to perform kernel level interrupt loopback testing
+ * from userspace (ie. simulate hardware triggering).
+ *
+ * Setting of an event triggering mechanism to userspace for ACTION_TRIGGER
+ * enables the interrupt index for the device.  Individual subindex interrupts
+ * can be disabled using the -1 value for DATA_EVENTFD or the index can be
+ * disabled as a whole with: flags = (DATA_NONE|ACTION_TRIGGER), count = 0.
+ *
+ * Note that ACTION_[UN]MASK specify user->kernel signaling (irqfds) while
+ * ACTION_TRIGGER specifies kernel->user signaling.
+ */
+struct vfio_irq_set {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IRQ_SET_DATA_NONE         (1 << 0) /* Data not present */
+#define VFIO_IRQ_SET_DATA_BOOL         (1 << 1) /* Data is bool (u8) */
+#define VFIO_IRQ_SET_DATA_EVENTFD      (1 << 2) /* Data is eventfd (s32) */
+#define VFIO_IRQ_SET_ACTION_MASK       (1 << 3) /* Mask interrupt */
+#define VFIO_IRQ_SET_ACTION_UNMASK     (1 << 4) /* Unmask interrupt */
+#define VFIO_IRQ_SET_ACTION_TRIGGER    (1 << 5) /* Trigger interrupt */
+       __u32   index;
+       __u32   start;
+       __u32   count;
+       __u8    data[];
+};
+#define VFIO_DEVICE_SET_IRQS           _IO(VFIO_TYPE, VFIO_BASE + 10)
+
+#define VFIO_IRQ_SET_DATA_TYPE_MASK    (VFIO_IRQ_SET_DATA_NONE | \
+                                        VFIO_IRQ_SET_DATA_BOOL | \
+                                        VFIO_IRQ_SET_DATA_EVENTFD)
+#define VFIO_IRQ_SET_ACTION_TYPE_MASK  (VFIO_IRQ_SET_ACTION_MASK | \
+                                        VFIO_IRQ_SET_ACTION_UNMASK | \
+                                        VFIO_IRQ_SET_ACTION_TRIGGER)
+/**
+ * VFIO_DEVICE_RESET - _IO(VFIO_TYPE, VFIO_BASE + 11)
+ *
+ * Reset a device.
+ */
+#define VFIO_DEVICE_RESET              _IO(VFIO_TYPE, VFIO_BASE + 11)
+
+/*
+ * The VFIO-PCI bus driver makes use of the following fixed region and
+ * IRQ index mapping.  Unimplemented regions return a size of zero.
+ * Unimplemented IRQ types return a count of zero.
+ */
+
+enum {
+       VFIO_PCI_BAR0_REGION_INDEX,
+       VFIO_PCI_BAR1_REGION_INDEX,
+       VFIO_PCI_BAR2_REGION_INDEX,
+       VFIO_PCI_BAR3_REGION_INDEX,
+       VFIO_PCI_BAR4_REGION_INDEX,
+       VFIO_PCI_BAR5_REGION_INDEX,
+       VFIO_PCI_ROM_REGION_INDEX,
+       VFIO_PCI_CONFIG_REGION_INDEX,
+       /*
+        * Expose VGA regions defined for PCI base class 03, subclass 00.
+        * This includes I/O port ranges 0x3b0 to 0x3bb and 0x3c0 to 0x3df
+        * as well as the MMIO range 0xa0000 to 0xbffff.  Each implemented
+        * range is found at it's identity mapped offset from the region
+        * offset, for example 0x3b0 is region_info.offset + 0x3b0.  Areas
+        * between described ranges are unimplemented.
+        */
+       VFIO_PCI_VGA_REGION_INDEX,
+       VFIO_PCI_NUM_REGIONS
+};
+
+enum {
+       VFIO_PCI_INTX_IRQ_INDEX,
+       VFIO_PCI_MSI_IRQ_INDEX,
+       VFIO_PCI_MSIX_IRQ_INDEX,
+       VFIO_PCI_ERR_IRQ_INDEX,
+       VFIO_PCI_REQ_IRQ_INDEX,
+       VFIO_PCI_NUM_IRQS
+};
+
+/**
+ * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IORW(VFIO_TYPE, VFIO_BASE + 12,
+ *                                           struct vfio_pci_hot_reset_info)
+ *
+ * Return: 0 on success, -errno on failure:
+ *     -enospc = insufficient buffer, -enodev = unsupported for device.
+ */
+struct vfio_pci_dependent_device {
+       __u32   group_id;
+       __u16   segment;
+       __u8    bus;
+       __u8    devfn; /* Use PCI_SLOT/PCI_FUNC */
+};
+
+struct vfio_pci_hot_reset_info {
+       __u32   argsz;
+       __u32   flags;
+       __u32   count;
+       struct vfio_pci_dependent_device        devices[];
+};
+
+#define VFIO_DEVICE_GET_PCI_HOT_RESET_INFO     _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/**
+ * VFIO_DEVICE_PCI_HOT_RESET - _IOW(VFIO_TYPE, VFIO_BASE + 13,
+ *                                 struct vfio_pci_hot_reset)
+ *
+ * Return: 0 on success, -errno on failure.
+ */
+struct vfio_pci_hot_reset {
+       __u32   argsz;
+       __u32   flags;
+       __u32   count;
+       __s32   group_fds[];
+};
+
+#define VFIO_DEVICE_PCI_HOT_RESET      _IO(VFIO_TYPE, VFIO_BASE + 13)
+
+/* -------- API for Type1 VFIO IOMMU -------- */
+
+/**
+ * VFIO_IOMMU_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 12, struct vfio_iommu_info)
+ *
+ * Retrieve information about the IOMMU object. Fills in provided
+ * struct vfio_iommu_info. Caller sets argsz.
+ *
+ * XXX Should we do these by CHECK_EXTENSION too?
+ */
+struct vfio_iommu_type1_info {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_IOMMU_INFO_PGSIZES (1 << 0)       /* supported page sizes info */
+       __u64   iova_pgsizes;           /* Bitmap of supported page sizes */
+};
+
+#define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/**
+ * VFIO_IOMMU_MAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 13, struct vfio_dma_map)
+ *
+ * Map process virtual addresses to IO virtual addresses using the
+ * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required.
+ */
+struct vfio_iommu_type1_dma_map {
+       __u32   argsz;
+       __u32   flags;
+#define VFIO_DMA_MAP_FLAG_READ (1 << 0)                /* readable from device */
+#define VFIO_DMA_MAP_FLAG_WRITE (1 << 1)       /* writable from device */
+       __u64   vaddr;                          /* Process virtual address */
+       __u64   iova;                           /* IO virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+
+#define VFIO_IOMMU_MAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 13)
+
+/**
+ * VFIO_IOMMU_UNMAP_DMA - _IOWR(VFIO_TYPE, VFIO_BASE + 14,
+ *                                                     struct vfio_dma_unmap)
+ *
+ * Unmap IO virtual addresses using the provided struct vfio_dma_unmap.
+ * Caller sets argsz.  The actual unmapped size is returned in the size
+ * field.  No guarantee is made to the user that arbitrary unmaps of iova
+ * or size different from those used in the original mapping call will
+ * succeed.
+ */
+struct vfio_iommu_type1_dma_unmap {
+       __u32   argsz;
+       __u32   flags;
+       __u64   iova;                           /* IO virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+
+#define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14)
+
+/*
+ * IOCTLs to enable/disable IOMMU container usage.
+ * No parameters are supported.
+ */
+#define VFIO_IOMMU_ENABLE      _IO(VFIO_TYPE, VFIO_BASE + 15)
+#define VFIO_IOMMU_DISABLE     _IO(VFIO_TYPE, VFIO_BASE + 16)
+
+/* -------- Additional API for SPAPR TCE (Server POWERPC) IOMMU -------- */
+
+/*
+ * The SPAPR TCE DDW info struct provides the information about
+ * the details of Dynamic DMA window capability.
+ *
+ * @pgsizes contains a page size bitmask, 4K/64K/16M are supported.
+ * @max_dynamic_windows_supported tells the maximum number of windows
+ * which the platform can create.
+ * @levels tells the maximum number of levels in multi-level IOMMU tables;
+ * this allows splitting a table into smaller chunks which reduces
+ * the amount of physically contiguous memory required for the table.
+ */
+struct vfio_iommu_spapr_tce_ddw_info {
+       __u64 pgsizes;                  /* Bitmap of supported page sizes */
+       __u32 max_dynamic_windows_supported;
+       __u32 levels;
+};
+
+/*
+ * The SPAPR TCE info struct provides the information about the PCI bus
+ * address ranges available for DMA, these values are programmed into
+ * the hardware so the guest has to know that information.
+ *
+ * The DMA 32 bit window start is an absolute PCI bus address.
+ * The IOVA address passed via map/unmap ioctls are absolute PCI bus
+ * addresses too so the window works as a filter rather than an offset
+ * for IOVA addresses.
+ *
+ * Flags supported:
+ * - VFIO_IOMMU_SPAPR_INFO_DDW: informs the userspace that dynamic DMA windows
+ *   (DDW) support is present. @ddw is only supported when DDW is present.
+ */
+struct vfio_iommu_spapr_tce_info {
+       __u32 argsz;
+       __u32 flags;
+#define VFIO_IOMMU_SPAPR_INFO_DDW      (1 << 0)        /* DDW supported */
+       __u32 dma32_window_start;       /* 32 bit window start (bytes) */
+       __u32 dma32_window_size;        /* 32 bit window size (bytes) */
+       struct vfio_iommu_spapr_tce_ddw_info ddw;
+};
+
+#define VFIO_IOMMU_SPAPR_TCE_GET_INFO  _IO(VFIO_TYPE, VFIO_BASE + 12)
+
+/*
+ * EEH PE operation struct provides ways to:
+ * - enable/disable EEH functionality;
+ * - unfreeze IO/DMA for frozen PE;
+ * - read PE state;
+ * - reset PE;
+ * - configure PE;
+ * - inject EEH error.
+ */
+struct vfio_eeh_pe_err {
+       __u32 type;
+       __u32 func;
+       __u64 addr;
+       __u64 mask;
+};
+
+struct vfio_eeh_pe_op {
+       __u32 argsz;
+       __u32 flags;
+       __u32 op;
+       union {
+               struct vfio_eeh_pe_err err;
+       };
+};
+
+#define VFIO_EEH_PE_DISABLE            0       /* Disable EEH functionality */
+#define VFIO_EEH_PE_ENABLE             1       /* Enable EEH functionality  */
+#define VFIO_EEH_PE_UNFREEZE_IO                2       /* Enable IO for frozen PE   */
+#define VFIO_EEH_PE_UNFREEZE_DMA       3       /* Enable DMA for frozen PE  */
+#define VFIO_EEH_PE_GET_STATE          4       /* PE state retrieval        */
+#define  VFIO_EEH_PE_STATE_NORMAL      0       /* PE in functional state    */
+#define  VFIO_EEH_PE_STATE_RESET       1       /* PE reset in progress      */
+#define  VFIO_EEH_PE_STATE_STOPPED     2       /* Stopped DMA and IO        */
+#define  VFIO_EEH_PE_STATE_STOPPED_DMA 4       /* Stopped DMA only          */
+#define  VFIO_EEH_PE_STATE_UNAVAIL     5       /* State unavailable         */
+#define VFIO_EEH_PE_RESET_DEACTIVATE   5       /* Deassert PE reset         */
+#define VFIO_EEH_PE_RESET_HOT          6       /* Assert hot reset          */
+#define VFIO_EEH_PE_RESET_FUNDAMENTAL  7       /* Assert fundamental reset  */
+#define VFIO_EEH_PE_CONFIGURE          8       /* PE configuration          */
+#define VFIO_EEH_PE_INJECT_ERR         9       /* Inject EEH error          */
+
+#define VFIO_EEH_PE_OP                 _IO(VFIO_TYPE, VFIO_BASE + 21)
+
+/**
+ * VFIO_IOMMU_SPAPR_REGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 17, struct vfio_iommu_spapr_register_memory)
+ *
+ * Registers user space memory where DMA is allowed. It pins
+ * user pages and does the locked memory accounting so
+ * subsequent VFIO_IOMMU_MAP_DMA/VFIO_IOMMU_UNMAP_DMA calls
+ * get faster.
+ */
+struct vfio_iommu_spapr_register_memory {
+       __u32   argsz;
+       __u32   flags;
+       __u64   vaddr;                          /* Process virtual address */
+       __u64   size;                           /* Size of mapping (bytes) */
+};
+#define VFIO_IOMMU_SPAPR_REGISTER_MEMORY       _IO(VFIO_TYPE, VFIO_BASE + 17)
+
+/**
+ * VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 18, struct vfio_iommu_spapr_register_memory)
+ *
+ * Unregisters user space memory registered with
+ * VFIO_IOMMU_SPAPR_REGISTER_MEMORY.
+ * Uses vfio_iommu_spapr_register_memory for parameters.
+ */
+#define VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY     _IO(VFIO_TYPE, VFIO_BASE + 18)
+
+/**
+ * VFIO_IOMMU_SPAPR_TCE_CREATE - _IOWR(VFIO_TYPE, VFIO_BASE + 19, struct vfio_iommu_spapr_tce_create)
+ *
+ * Creates an additional TCE table and programs it (sets a new DMA window)
+ * to every IOMMU group in the container. It receives page shift, window
+ * size and number of levels in the TCE table being created.
+ *
+ * It allocates and returns an offset on a PCI bus of the new DMA window.
+ */
+struct vfio_iommu_spapr_tce_create {
+       __u32 argsz;
+       __u32 flags;
+       /* in */
+       __u32 page_shift;
+       __u64 window_size;
+       __u32 levels;
+       /* out */
+       __u64 start_addr;
+};
+#define VFIO_IOMMU_SPAPR_TCE_CREATE    _IO(VFIO_TYPE, VFIO_BASE + 19)
+
+/**
+ * VFIO_IOMMU_SPAPR_TCE_REMOVE - _IOW(VFIO_TYPE, VFIO_BASE + 20, struct vfio_iommu_spapr_tce_remove)
+ *
+ * Unprograms a TCE table from all groups in the container and destroys it.
+ * It receives a PCI bus offset as a window id.
+ */
+struct vfio_iommu_spapr_tce_remove {
+       __u32 argsz;
+       __u32 flags;
+       /* in */
+       __u64 start_addr;
+};
+#define VFIO_IOMMU_SPAPR_TCE_REMOVE    _IO(VFIO_TYPE, VFIO_BASE + 20)
+
+/* ***************************************************************** */
+
+#endif /* VFIO_H */
diff --git a/lib/libdss-include/linux/vhost.h b/lib/libdss-include/linux/vhost.h
new file mode 100644 (file)
index 0000000..ead86db
--- /dev/null
@@ -0,0 +1,172 @@
+#ifndef _LINUX_VHOST_H
+#define _LINUX_VHOST_H
+/* Userspace interface for in-kernel virtio accelerators. */
+
+/* vhost is used to reduce the number of system calls involved in virtio.
+ *
+ * Existing virtio net code is used in the guest without modification.
+ *
+ * This header includes interface used by userspace hypervisor for
+ * device configuration.
+ */
+
+#include <linux/types.h>
+
+#include <linux/ioctl.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_ring.h>
+
+struct vhost_vring_state {
+       unsigned int index;
+       unsigned int num;
+};
+
+struct vhost_vring_file {
+       unsigned int index;
+       int fd; /* Pass -1 to unbind from file. */
+
+};
+
+struct vhost_vring_addr {
+       unsigned int index;
+       /* Option flags. */
+       unsigned int flags;
+       /* Flag values: */
+       /* Whether log address is valid. If set enables logging. */
+#define VHOST_VRING_F_LOG 0
+
+       /* Start of array of descriptors (virtually contiguous) */
+       __u64 desc_user_addr;
+       /* Used structure address. Must be 32 bit aligned */
+       __u64 used_user_addr;
+       /* Available structure address. Must be 16 bit aligned */
+       __u64 avail_user_addr;
+       /* Logging support. */
+       /* Log writes to used structure, at offset calculated from specified
+        * address. Address must be 32 bit aligned. */
+       __u64 log_guest_addr;
+};
+
+struct vhost_memory_region {
+       __u64 guest_phys_addr;
+       __u64 memory_size; /* bytes */
+       __u64 userspace_addr;
+       __u64 flags_padding; /* No flags are currently specified. */
+};
+
+/* All region addresses and sizes must be 4K aligned. */
+#define VHOST_PAGE_SIZE 0x1000
+
+struct vhost_memory {
+       __u32 nregions;
+       __u32 padding;
+       struct vhost_memory_region regions[0];
+};
+
+/* ioctls */
+
+#define VHOST_VIRTIO 0xAF
+
+/* Features bitmask for forward compatibility.  Transport bits are used for
+ * vhost specific features. */
+#define VHOST_GET_FEATURES     _IOR(VHOST_VIRTIO, 0x00, __u64)
+#define VHOST_SET_FEATURES     _IOW(VHOST_VIRTIO, 0x00, __u64)
+
+/* Set current process as the (exclusive) owner of this file descriptor.  This
+ * must be called before any other vhost command.  Further calls to
+ * VHOST_OWNER_SET fail until VHOST_OWNER_RESET is called. */
+#define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01)
+/* Give up ownership, and reset the device to default values.
+ * Allows subsequent call to VHOST_OWNER_SET to succeed. */
+#define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02)
+
+/* Set up/modify memory layout */
+#define VHOST_SET_MEM_TABLE    _IOW(VHOST_VIRTIO, 0x03, struct vhost_memory)
+
+/* Write logging setup. */
+/* Memory writes can optionally be logged by setting bit at an offset
+ * (calculated from the physical address) from specified log base.
+ * The bit is set using an atomic 32 bit operation. */
+/* Set base address for logging. */
+#define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64)
+/* Specify an eventfd file descriptor to signal on log write. */
+#define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int)
+
+/* Ring setup. */
+/* Set number of descriptors in ring. This parameter can not
+ * be modified while ring is running (bound to a device). */
+#define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state)
+/* Set addresses for the ring. */
+#define VHOST_SET_VRING_ADDR _IOW(VHOST_VIRTIO, 0x11, struct vhost_vring_addr)
+/* Base value where queue looks for available descriptors */
+#define VHOST_SET_VRING_BASE _IOW(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
+/* Get accessor: reads index, writes value in num */
+#define VHOST_GET_VRING_BASE _IOWR(VHOST_VIRTIO, 0x12, struct vhost_vring_state)
+
+/* Set the vring byte order in num. Valid values are VHOST_VRING_LITTLE_ENDIAN
+ * or VHOST_VRING_BIG_ENDIAN (other values return -EINVAL).
+ * The byte order cannot be changed while the device is active: trying to do so
+ * returns -EBUSY.
+ * This is a legacy only API that is simply ignored when VIRTIO_F_VERSION_1 is
+ * set.
+ * Not all kernel configurations support this ioctl, but all configurations that
+ * support SET also support GET.
+ */
+#define VHOST_VRING_LITTLE_ENDIAN 0
+#define VHOST_VRING_BIG_ENDIAN 1
+#define VHOST_SET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x13, struct vhost_vring_state)
+#define VHOST_GET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x14, struct vhost_vring_state)
+
+/* The following ioctls use eventfd file descriptors to signal and poll
+ * for events. */
+
+/* Set eventfd to poll for added buffers */
+#define VHOST_SET_VRING_KICK _IOW(VHOST_VIRTIO, 0x20, struct vhost_vring_file)
+/* Set eventfd to signal when buffers have beed used */
+#define VHOST_SET_VRING_CALL _IOW(VHOST_VIRTIO, 0x21, struct vhost_vring_file)
+/* Set eventfd to signal an error */
+#define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file)
+
+/* VHOST_NET specific defines */
+
+/* Attach virtio net ring to a raw socket, or tap device.
+ * The socket must be already bound to an ethernet device, this device will be
+ * used for transmit.  Pass fd -1 to unbind from the socket and the transmit
+ * device.  This can be used to stop the ring (e.g. for migration). */
+#define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file)
+
+/* Feature bits */
+/* Log all write descriptors. Can be changed while device is active. */
+#define VHOST_F_LOG_ALL 26
+/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */
+#define VHOST_NET_F_VIRTIO_NET_HDR 27
+
+/* VHOST_SCSI specific definitions */
+
+/*
+ * Used by QEMU userspace to ensure a consistent vhost-scsi ABI.
+ *
+ * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate +
+ *            RFC-v2 vhost-scsi userspace.  Add GET_ABI_VERSION ioctl usage
+ * ABI Rev 1: January 2013. Ignore vhost_tpgt filed in struct vhost_scsi_target.
+ *            All the targets under vhost_wwpn can be seen and used by guset.
+ */
+
+#define VHOST_SCSI_ABI_VERSION 1
+
+struct vhost_scsi_target {
+       int abi_version;
+       char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */
+       unsigned short vhost_tpgt;
+       unsigned short reserved;
+};
+
+#define VHOST_SCSI_SET_ENDPOINT _IOW(VHOST_VIRTIO, 0x40, struct vhost_scsi_target)
+#define VHOST_SCSI_CLEAR_ENDPOINT _IOW(VHOST_VIRTIO, 0x41, struct vhost_scsi_target)
+/* Changing this breaks userspace. */
+#define VHOST_SCSI_GET_ABI_VERSION _IOW(VHOST_VIRTIO, 0x42, int)
+/* Set and get the events missed flag */
+#define VHOST_SCSI_SET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x43, __u32)
+#define VHOST_SCSI_GET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x44, __u32)
+
+#endif
diff --git a/lib/libdss-include/linux/videodev2.h b/lib/libdss-include/linux/videodev2.h
new file mode 100644 (file)
index 0000000..efa5432
--- /dev/null
@@ -0,0 +1,2295 @@
+/*
+ *  Video for Linux Two header file
+ *
+ *  Copyright (C) 1999-2012 the contributors
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  Alternatively you can redistribute this file under the terms of the
+ *  BSD license as stated below:
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *  3. The names of its contributors may not be used to endorse or promote
+ *     products derived from this software without specific prior written
+ *     permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *     Header file for v4l or V4L2 drivers and applications
+ * with public API.
+ * All kernel-specific stuff were moved to media/v4l2-dev.h, so
+ * no #if __KERNEL tests are allowed here
+ *
+ *     See http://linuxtv.org for more info
+ *
+ *     Author: Bill Dirks <bill@thedirks.org>
+ *             Justin Schoeman
+ *              Hans Verkuil <hverkuil@xs4all.nl>
+ *             et al.
+ */
+#ifndef __LINUX_VIDEODEV2_H
+#define __LINUX_VIDEODEV2_H
+
+#include <sys/time.h>
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/v4l2-common.h>
+#include <linux/v4l2-controls.h>
+
+/*
+ * Common stuff for both V4L1 and V4L2
+ * Moved from videodev.h
+ */
+#define VIDEO_MAX_FRAME               32
+#define VIDEO_MAX_PLANES               8
+
+/*
+ *     M I S C E L L A N E O U S
+ */
+
+/*  Four-character-code (FOURCC) */
+#define v4l2_fourcc(a, b, c, d)\
+       ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
+#define v4l2_fourcc_be(a, b, c, d)     (v4l2_fourcc(a, b, c, d) | (1 << 31))
+
+/*
+ *     E N U M S
+ */
+enum v4l2_field {
+       V4L2_FIELD_ANY           = 0, /* driver can choose from none,
+                                        top, bottom, interlaced
+                                        depending on whatever it thinks
+                                        is approximate ... */
+       V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
+       V4L2_FIELD_TOP           = 2, /* top field only */
+       V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
+       V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
+       V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
+                                        buffer, top-bottom order */
+       V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
+       V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
+                                        separate buffers */
+       V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
+                                        first and the top field is
+                                        transmitted first */
+       V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
+                                        first and the bottom field is
+                                        transmitted first */
+};
+#define V4L2_FIELD_HAS_TOP(field)      \
+       ((field) == V4L2_FIELD_TOP      ||\
+        (field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB   ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_BOTTOM(field)   \
+       ((field) == V4L2_FIELD_BOTTOM   ||\
+        (field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB   ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_BOTH(field)     \
+       ((field) == V4L2_FIELD_INTERLACED ||\
+        (field) == V4L2_FIELD_INTERLACED_TB ||\
+        (field) == V4L2_FIELD_INTERLACED_BT ||\
+        (field) == V4L2_FIELD_SEQ_TB ||\
+        (field) == V4L2_FIELD_SEQ_BT)
+#define V4L2_FIELD_HAS_T_OR_B(field)   \
+       ((field) == V4L2_FIELD_BOTTOM ||\
+        (field) == V4L2_FIELD_TOP ||\
+        (field) == V4L2_FIELD_ALTERNATE)
+
+enum v4l2_buf_type {
+       V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
+       V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
+       V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
+       V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
+       V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
+       V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
+       V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
+#if 1
+       /* Experimental */
+       V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
+#endif
+       V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
+       V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
+       V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
+       V4L2_BUF_TYPE_SDR_OUTPUT           = 12,
+       /* Deprecated, do not use */
+       V4L2_BUF_TYPE_PRIVATE              = 0x80,
+};
+
+#define V4L2_TYPE_IS_MULTIPLANAR(type)                 \
+       ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE   \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
+
+#define V4L2_TYPE_IS_OUTPUT(type)                              \
+       ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT                   \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE         \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY               \
+        || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY        \
+        || (type) == V4L2_BUF_TYPE_VBI_OUTPUT                  \
+        || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT           \
+        || (type) == V4L2_BUF_TYPE_SDR_OUTPUT)
+
+enum v4l2_tuner_type {
+       V4L2_TUNER_RADIO             = 1,
+       V4L2_TUNER_ANALOG_TV         = 2,
+       V4L2_TUNER_DIGITAL_TV        = 3,
+       V4L2_TUNER_SDR               = 4,
+       V4L2_TUNER_RF                = 5,
+};
+
+/* Deprecated, do not use */
+#define V4L2_TUNER_ADC  V4L2_TUNER_SDR
+
+enum v4l2_memory {
+       V4L2_MEMORY_MMAP             = 1,
+       V4L2_MEMORY_USERPTR          = 2,
+       V4L2_MEMORY_OVERLAY          = 3,
+       V4L2_MEMORY_DMABUF           = 4,
+};
+
+/* see also http://vektor.theorem.ca/graphics/ycbcr/ */
+enum v4l2_colorspace {
+       /*
+        * Default colorspace, i.e. let the driver figure it out.
+        * Can only be used with video capture.
+        */
+       V4L2_COLORSPACE_DEFAULT       = 0,
+
+       /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
+       V4L2_COLORSPACE_SMPTE170M     = 1,
+
+       /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
+       V4L2_COLORSPACE_SMPTE240M     = 2,
+
+       /* Rec.709: used for HDTV */
+       V4L2_COLORSPACE_REC709        = 3,
+
+       /*
+        * Deprecated, do not use. No driver will ever return this. This was
+        * based on a misunderstanding of the bt878 datasheet.
+        */
+       V4L2_COLORSPACE_BT878         = 4,
+
+       /*
+        * NTSC 1953 colorspace. This only makes sense when dealing with
+        * really, really old NTSC recordings. Superseded by SMPTE 170M.
+        */
+       V4L2_COLORSPACE_470_SYSTEM_M  = 5,
+
+       /*
+        * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
+        * dealing with really old PAL/SECAM recordings. Superseded by
+        * SMPTE 170M.
+        */
+       V4L2_COLORSPACE_470_SYSTEM_BG = 6,
+
+       /*
+        * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
+        * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
+        */
+       V4L2_COLORSPACE_JPEG          = 7,
+
+       /* For RGB colorspaces such as produces by most webcams. */
+       V4L2_COLORSPACE_SRGB          = 8,
+
+       /* AdobeRGB colorspace */
+       V4L2_COLORSPACE_ADOBERGB      = 9,
+
+       /* BT.2020 colorspace, used for UHDTV. */
+       V4L2_COLORSPACE_BT2020        = 10,
+
+       /* Raw colorspace: for RAW unprocessed images */
+       V4L2_COLORSPACE_RAW           = 11,
+
+       /* DCI-P3 colorspace, used by cinema projectors */
+       V4L2_COLORSPACE_DCI_P3        = 12,
+};
+
+/*
+ * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
+ * This depends on whether this is a SDTV image (use SMPTE 170M), an
+ * HDTV image (use Rec. 709), or something else (use sRGB).
+ */
+#define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
+       ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
+        ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
+
+enum v4l2_xfer_func {
+       /*
+        * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
+        * for the various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
+        * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
+        *
+        * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
+        *
+        * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
+        *
+        * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
+        *
+        * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
+        */
+       V4L2_XFER_FUNC_DEFAULT     = 0,
+       V4L2_XFER_FUNC_709         = 1,
+       V4L2_XFER_FUNC_SRGB        = 2,
+       V4L2_XFER_FUNC_ADOBERGB    = 3,
+       V4L2_XFER_FUNC_SMPTE240M   = 4,
+       V4L2_XFER_FUNC_NONE        = 5,
+       V4L2_XFER_FUNC_DCI_P3      = 6,
+       V4L2_XFER_FUNC_SMPTE2084   = 7,
+};
+
+/*
+ * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
+       ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
+        ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
+         ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
+          ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
+           ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
+            V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
+
+enum v4l2_ycbcr_encoding {
+       /*
+        * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
+        * various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and
+        * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
+        *
+        * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
+        *
+        * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC
+        *
+        * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
+        */
+       V4L2_YCBCR_ENC_DEFAULT        = 0,
+
+       /* ITU-R 601 -- SDTV */
+       V4L2_YCBCR_ENC_601            = 1,
+
+       /* Rec. 709 -- HDTV */
+       V4L2_YCBCR_ENC_709            = 2,
+
+       /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
+       V4L2_YCBCR_ENC_XV601          = 3,
+
+       /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
+       V4L2_YCBCR_ENC_XV709          = 4,
+
+       /* sYCC (Y'CbCr encoding of sRGB) */
+       V4L2_YCBCR_ENC_SYCC           = 5,
+
+       /* BT.2020 Non-constant Luminance Y'CbCr */
+       V4L2_YCBCR_ENC_BT2020         = 6,
+
+       /* BT.2020 Constant Luminance Y'CbcCrc */
+       V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
+
+       /* SMPTE 240M -- Obsolete HDTV */
+       V4L2_YCBCR_ENC_SMPTE240M      = 8,
+};
+
+/*
+ * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
+       (((colsp) == V4L2_COLORSPACE_REC709 || \
+         (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
+        ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
+         ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
+          V4L2_YCBCR_ENC_601)))
+
+enum v4l2_quantization {
+       /*
+        * The default for R'G'B' quantization is always full range, except
+        * for the BT2020 colorspace. For Y'CbCr the quantization is always
+        * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709:
+        * those are full range.
+        */
+       V4L2_QUANTIZATION_DEFAULT     = 0,
+       V4L2_QUANTIZATION_FULL_RANGE  = 1,
+       V4L2_QUANTIZATION_LIM_RANGE   = 2,
+};
+
+/*
+ * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
+ * This depends on whether the image is RGB or not, the colorspace and the
+ * Y'CbCr encoding.
+ */
+#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc) \
+       (((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : \
+        (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \
+         (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ? \
+        V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
+
+enum v4l2_priority {
+       V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
+       V4L2_PRIORITY_BACKGROUND  = 1,
+       V4L2_PRIORITY_INTERACTIVE = 2,
+       V4L2_PRIORITY_RECORD      = 3,
+       V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
+};
+
+struct v4l2_rect {
+       __s32   left;
+       __s32   top;
+       __u32   width;
+       __u32   height;
+};
+
+struct v4l2_fract {
+       __u32   numerator;
+       __u32   denominator;
+};
+
+/**
+  * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
+  *
+  * @driver:      name of the driver module (e.g. "bttv")
+  * @card:        name of the card (e.g. "Hauppauge WinTV")
+  * @bus_info:    name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
+  * @version:     KERNEL_VERSION
+  * @capabilities: capabilities of the physical device as a whole
+  * @device_caps:  capabilities accessed via this particular device (node)
+  * @reserved:    reserved fields for future extensions
+  */
+struct v4l2_capability {
+       __u8    driver[16];
+       __u8    card[32];
+       __u8    bus_info[32];
+       __u32   version;
+       __u32   capabilities;
+       __u32   device_caps;
+       __u32   reserved[3];
+};
+
+/* Values for 'capabilities' field */
+#define V4L2_CAP_VIDEO_CAPTURE         0x00000001  /* Is a video capture device */
+#define V4L2_CAP_VIDEO_OUTPUT          0x00000002  /* Is a video output device */
+#define V4L2_CAP_VIDEO_OVERLAY         0x00000004  /* Can do video overlay */
+#define V4L2_CAP_VBI_CAPTURE           0x00000010  /* Is a raw VBI capture device */
+#define V4L2_CAP_VBI_OUTPUT            0x00000020  /* Is a raw VBI output device */
+#define V4L2_CAP_SLICED_VBI_CAPTURE    0x00000040  /* Is a sliced VBI capture device */
+#define V4L2_CAP_SLICED_VBI_OUTPUT     0x00000080  /* Is a sliced VBI output device */
+#define V4L2_CAP_RDS_CAPTURE           0x00000100  /* RDS data capture */
+#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY  0x00000200  /* Can do video output overlay */
+#define V4L2_CAP_HW_FREQ_SEEK          0x00000400  /* Can do hardware frequency seek  */
+#define V4L2_CAP_RDS_OUTPUT            0x00000800  /* Is an RDS encoder */
+
+/* Is a video capture device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_CAPTURE_MPLANE  0x00001000
+/* Is a video output device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_OUTPUT_MPLANE   0x00002000
+/* Is a video mem-to-mem device that supports multiplanar formats */
+#define V4L2_CAP_VIDEO_M2M_MPLANE      0x00004000
+/* Is a video mem-to-mem device */
+#define V4L2_CAP_VIDEO_M2M             0x00008000
+
+#define V4L2_CAP_TUNER                 0x00010000  /* has a tuner */
+#define V4L2_CAP_AUDIO                 0x00020000  /* has audio support */
+#define V4L2_CAP_RADIO                 0x00040000  /* is a radio device */
+#define V4L2_CAP_MODULATOR             0x00080000  /* has a modulator */
+
+#define V4L2_CAP_SDR_CAPTURE           0x00100000  /* Is a SDR capture device */
+#define V4L2_CAP_EXT_PIX_FORMAT                0x00200000  /* Supports the extended pixel format */
+#define V4L2_CAP_SDR_OUTPUT            0x00400000  /* Is a SDR output device */
+
+#define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
+#define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
+#define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
+
+#define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
+
+/*
+ *     V I D E O   I M A G E   F O R M A T
+ */
+struct v4l2_pix_format {
+       __u32                   width;
+       __u32                   height;
+       __u32                   pixelformat;
+       __u32                   field;          /* enum v4l2_field */
+       __u32                   bytesperline;   /* for padding, zero if unused */
+       __u32                   sizeimage;
+       __u32                   colorspace;     /* enum v4l2_colorspace */
+       __u32                   priv;           /* private data, depends on pixelformat */
+       __u32                   flags;          /* format flags (V4L2_PIX_FMT_FLAG_*) */
+       __u32                   ycbcr_enc;      /* enum v4l2_ycbcr_encoding */
+       __u32                   quantization;   /* enum v4l2_quantization */
+       __u32                   xfer_func;      /* enum v4l2_xfer_func */
+};
+
+/*      Pixel format         FOURCC                          depth  Description  */
+
+/* RGB formats */
+#define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
+#define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
+#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
+#define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
+#define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
+#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
+#define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
+#define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
+#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
+#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
+#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
+#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
+#define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6    */
+#define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
+#define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
+#define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
+#define V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
+#define V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
+#define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
+#define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
+#define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
+
+/* Grey formats */
+#define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
+#define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
+#define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
+#define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
+#define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
+#define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
+#define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
+
+/* Grey bit-packed formats */
+#define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
+
+/* Palette formats */
+#define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
+
+/* Chrominance formats */
+#define V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
+
+/* Luminance+Chrominance formats */
+#define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
+#define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
+#define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
+#define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
+#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
+#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
+#define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
+#define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
+#define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
+#define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
+#define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
+#define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
+#define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
+#define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
+#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
+#define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
+
+/* two planes -- one Y, one Cr + Cb interleaved  */
+#define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
+#define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
+#define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
+#define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
+#define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
+#define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
+
+/* two non contiguous planes - one Y, one Cr + Cb interleaved  */
+#define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
+#define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
+#define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
+#define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
+#define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
+#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
+
+/* three non contiguous planes - Y, Cb, Cr */
+#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
+#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
+
+/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
+#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
+#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
+       /* 10bit raw bayer packed, 5 bytes for every 4 pixels */
+#define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
+#define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
+#define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
+#define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
+       /* 10bit raw bayer a-law compressed to 8 bits */
+#define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
+#define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
+#define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
+#define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
+       /* 10bit raw bayer DPCM compressed to 8 bits */
+#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
+#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
+#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
+#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
+#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
+#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
+
+/* compressed formats */
+#define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
+#define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
+#define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
+#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
+#define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
+#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
+#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
+#define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
+#define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
+#define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
+#define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
+#define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
+#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
+#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
+#define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
+
+/*  Vendor-specific formats   */
+#define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
+#define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
+#define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
+#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
+#define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
+#define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
+#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
+#define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
+#define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
+#define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
+#define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
+#define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
+#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
+#define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
+#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
+#define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
+#define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
+#define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
+#define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
+#define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
+#define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
+#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
+#define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
+#define V4L2_PIX_FMT_JPGL      v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
+#define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
+#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
+#define V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
+#define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
+#define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
+
+/* SDR formats - used only for Software Defined Radio devices */
+#define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
+#define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
+#define V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
+#define V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
+#define V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
+
+/* priv field value to indicates that subsequent fields are valid. */
+#define V4L2_PIX_FMT_PRIV_MAGIC                0xfeedcafe
+
+/* Flags */
+#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
+
+/*
+ *     F O R M A T   E N U M E R A T I O N
+ */
+struct v4l2_fmtdesc {
+       __u32               index;             /* Format number      */
+       __u32               type;              /* enum v4l2_buf_type */
+       __u32               flags;
+       __u8                description[32];   /* Description string */
+       __u32               pixelformat;       /* Format fourcc      */
+       __u32               reserved[4];
+};
+
+#define V4L2_FMT_FLAG_COMPRESSED 0x0001
+#define V4L2_FMT_FLAG_EMULATED   0x0002
+
+#if 1
+       /* Experimental Frame Size and frame rate enumeration */
+/*
+ *     F R A M E   S I Z E   E N U M E R A T I O N
+ */
+enum v4l2_frmsizetypes {
+       V4L2_FRMSIZE_TYPE_DISCRETE      = 1,
+       V4L2_FRMSIZE_TYPE_CONTINUOUS    = 2,
+       V4L2_FRMSIZE_TYPE_STEPWISE      = 3,
+};
+
+struct v4l2_frmsize_discrete {
+       __u32                   width;          /* Frame width [pixel] */
+       __u32                   height;         /* Frame height [pixel] */
+};
+
+struct v4l2_frmsize_stepwise {
+       __u32                   min_width;      /* Minimum frame width [pixel] */
+       __u32                   max_width;      /* Maximum frame width [pixel] */
+       __u32                   step_width;     /* Frame width step size [pixel] */
+       __u32                   min_height;     /* Minimum frame height [pixel] */
+       __u32                   max_height;     /* Maximum frame height [pixel] */
+       __u32                   step_height;    /* Frame height step size [pixel] */
+};
+
+struct v4l2_frmsizeenum {
+       __u32                   index;          /* Frame size number */
+       __u32                   pixel_format;   /* Pixel format */
+       __u32                   type;           /* Frame size type the device supports. */
+
+       union {                                 /* Frame size */
+               struct v4l2_frmsize_discrete    discrete;
+               struct v4l2_frmsize_stepwise    stepwise;
+       };
+
+       __u32   reserved[2];                    /* Reserved space for future use */
+};
+
+/*
+ *     F R A M E   R A T E   E N U M E R A T I O N
+ */
+enum v4l2_frmivaltypes {
+       V4L2_FRMIVAL_TYPE_DISCRETE      = 1,
+       V4L2_FRMIVAL_TYPE_CONTINUOUS    = 2,
+       V4L2_FRMIVAL_TYPE_STEPWISE      = 3,
+};
+
+struct v4l2_frmival_stepwise {
+       struct v4l2_fract       min;            /* Minimum frame interval [s] */
+       struct v4l2_fract       max;            /* Maximum frame interval [s] */
+       struct v4l2_fract       step;           /* Frame interval step size [s] */
+};
+
+struct v4l2_frmivalenum {
+       __u32                   index;          /* Frame format index */
+       __u32                   pixel_format;   /* Pixel format */
+       __u32                   width;          /* Frame width */
+       __u32                   height;         /* Frame height */
+       __u32                   type;           /* Frame interval type the device supports. */
+
+       union {                                 /* Frame interval */
+               struct v4l2_fract               discrete;
+               struct v4l2_frmival_stepwise    stepwise;
+       };
+
+       __u32   reserved[2];                    /* Reserved space for future use */
+};
+#endif
+
+/*
+ *     T I M E C O D E
+ */
+struct v4l2_timecode {
+       __u32   type;
+       __u32   flags;
+       __u8    frames;
+       __u8    seconds;
+       __u8    minutes;
+       __u8    hours;
+       __u8    userbits[4];
+};
+
+/*  Type  */
+#define V4L2_TC_TYPE_24FPS             1
+#define V4L2_TC_TYPE_25FPS             2
+#define V4L2_TC_TYPE_30FPS             3
+#define V4L2_TC_TYPE_50FPS             4
+#define V4L2_TC_TYPE_60FPS             5
+
+/*  Flags  */
+#define V4L2_TC_FLAG_DROPFRAME         0x0001 /* "drop-frame" mode */
+#define V4L2_TC_FLAG_COLORFRAME                0x0002
+#define V4L2_TC_USERBITS_field         0x000C
+#define V4L2_TC_USERBITS_USERDEFINED   0x0000
+#define V4L2_TC_USERBITS_8BITCHARS     0x0008
+/* The above is based on SMPTE timecodes */
+
+struct v4l2_jpegcompression {
+       int quality;
+
+       int  APPn;              /* Number of APP segment to be written,
+                                * must be 0..15 */
+       int  APP_len;           /* Length of data in JPEG APPn segment */
+       char APP_data[60];      /* Data in the JPEG APPn segment. */
+
+       int  COM_len;           /* Length of data in JPEG COM segment */
+       char COM_data[60];      /* Data in JPEG COM segment */
+
+       __u32 jpeg_markers;     /* Which markers should go into the JPEG
+                                * output. Unless you exactly know what
+                                * you do, leave them untouched.
+                                * Including less markers will make the
+                                * resulting code smaller, but there will
+                                * be fewer applications which can read it.
+                                * The presence of the APP and COM marker
+                                * is influenced by APP_len and COM_len
+                                * ONLY, not by this property! */
+
+#define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
+#define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
+#define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
+#define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
+#define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
+                                       * always use APP0 */
+};
+
+/*
+ *     M E M O R Y - M A P P I N G   B U F F E R S
+ */
+struct v4l2_requestbuffers {
+       __u32                   count;
+       __u32                   type;           /* enum v4l2_buf_type */
+       __u32                   memory;         /* enum v4l2_memory */
+       __u32                   reserved[2];
+};
+
+/**
+ * struct v4l2_plane - plane info for multi-planar buffers
+ * @bytesused:         number of bytes occupied by data in the plane (payload)
+ * @length:            size of this plane (NOT the payload) in bytes
+ * @mem_offset:                when memory in the associated struct v4l2_buffer is
+ *                     V4L2_MEMORY_MMAP, equals the offset from the start of
+ *                     the device memory for this plane (or is a "cookie" that
+ *                     should be passed to mmap() called on the video node)
+ * @userptr:           when memory is V4L2_MEMORY_USERPTR, a userspace pointer
+ *                     pointing to this plane
+ * @fd:                        when memory is V4L2_MEMORY_DMABUF, a userspace file
+ *                     descriptor associated with this plane
+ * @data_offset:       offset in the plane to the start of data; usually 0,
+ *                     unless there is a header in front of the data
+ *
+ * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
+ * with two planes can have one plane for Y, and another for interleaved CbCr
+ * components. Each plane can reside in a separate memory buffer, or even in
+ * a completely separate memory node (e.g. in embedded devices).
+ */
+struct v4l2_plane {
+       __u32                   bytesused;
+       __u32                   length;
+       union {
+               __u32           mem_offset;
+               unsigned long   userptr;
+               __s32           fd;
+       } m;
+       __u32                   data_offset;
+       __u32                   reserved[11];
+};
+
+/**
+ * struct v4l2_buffer - video buffer info
+ * @index:     id number of the buffer
+ * @type:      enum v4l2_buf_type; buffer type (type == *_MPLANE for
+ *             multiplanar buffers);
+ * @bytesused: number of bytes occupied by data in the buffer (payload);
+ *             unused (set to 0) for multiplanar buffers
+ * @flags:     buffer informational flags
+ * @field:     enum v4l2_field; field order of the image in the buffer
+ * @timestamp: frame timestamp
+ * @timecode:  frame timecode
+ * @sequence:  sequence count of this frame
+ * @memory:    enum v4l2_memory; the method, in which the actual video data is
+ *             passed
+ * @offset:    for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
+ *             offset from the start of the device memory for this plane,
+ *             (or a "cookie" that should be passed to mmap() as offset)
+ * @userptr:   for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
+ *             a userspace pointer pointing to this buffer
+ * @fd:                for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
+ *             a userspace file descriptor associated with this buffer
+ * @planes:    for multiplanar buffers; userspace pointer to the array of plane
+ *             info structs for this buffer
+ * @length:    size in bytes of the buffer (NOT its payload) for single-plane
+ *             buffers (when type != *_MPLANE); number of elements in the
+ *             planes array for multi-plane buffers
+ *
+ * Contains data exchanged by application and driver using one of the Streaming
+ * I/O methods.
+ */
+struct v4l2_buffer {
+       __u32                   index;
+       __u32                   type;
+       __u32                   bytesused;
+       __u32                   flags;
+       __u32                   field;
+       struct timeval          timestamp;
+       struct v4l2_timecode    timecode;
+       __u32                   sequence;
+
+       /* memory location */
+       __u32                   memory;
+       union {
+               __u32           offset;
+               unsigned long   userptr;
+               struct v4l2_plane *planes;
+               __s32           fd;
+       } m;
+       __u32                   length;
+       __u32                   reserved2;
+       __u32                   reserved;
+};
+
+/*  Flags for 'flags' field */
+/* Buffer is mapped (flag) */
+#define V4L2_BUF_FLAG_MAPPED                   0x00000001
+/* Buffer is queued for processing */
+#define V4L2_BUF_FLAG_QUEUED                   0x00000002
+/* Buffer is ready */
+#define V4L2_BUF_FLAG_DONE                     0x00000004
+/* Image is a keyframe (I-frame) */
+#define V4L2_BUF_FLAG_KEYFRAME                 0x00000008
+/* Image is a P-frame */
+#define V4L2_BUF_FLAG_PFRAME                   0x00000010
+/* Image is a B-frame */
+#define V4L2_BUF_FLAG_BFRAME                   0x00000020
+/* Buffer is ready, but the data contained within is corrupted. */
+#define V4L2_BUF_FLAG_ERROR                    0x00000040
+/* timecode field is valid */
+#define V4L2_BUF_FLAG_TIMECODE                 0x00000100
+/* Buffer is prepared for queuing */
+#define V4L2_BUF_FLAG_PREPARED                 0x00000400
+/* Cache handling flags */
+#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE      0x00000800
+#define V4L2_BUF_FLAG_NO_CACHE_CLEAN           0x00001000
+/* Timestamp type */
+#define V4L2_BUF_FLAG_TIMESTAMP_MASK           0x0000e000
+#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN                0x00000000
+#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC      0x00002000
+#define V4L2_BUF_FLAG_TIMESTAMP_COPY           0x00004000
+/* Timestamp sources. */
+#define V4L2_BUF_FLAG_TSTAMP_SRC_MASK          0x00070000
+#define V4L2_BUF_FLAG_TSTAMP_SRC_EOF           0x00000000
+#define V4L2_BUF_FLAG_TSTAMP_SRC_SOE           0x00010000
+/* mem2mem encoder/decoder */
+#define V4L2_BUF_FLAG_LAST                     0x00100000
+
+/**
+ * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
+ *
+ * @index:     id number of the buffer
+ * @type:      enum v4l2_buf_type; buffer type (type == *_MPLANE for
+ *             multiplanar buffers);
+ * @plane:     index of the plane to be exported, 0 for single plane queues
+ * @flags:     flags for newly created file, currently only O_CLOEXEC is
+ *             supported, refer to manual of open syscall for more details
+ * @fd:                file descriptor associated with DMABUF (set by driver)
+ *
+ * Contains data used for exporting a video buffer as DMABUF file descriptor.
+ * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
+ * (identical to the cookie used to mmap() the buffer to userspace). All
+ * reserved fields must be set to zero. The field reserved0 is expected to
+ * become a structure 'type' allowing an alternative layout of the structure
+ * content. Therefore this field should not be used for any other extensions.
+ */
+struct v4l2_exportbuffer {
+       __u32           type; /* enum v4l2_buf_type */
+       __u32           index;
+       __u32           plane;
+       __u32           flags;
+       __s32           fd;
+       __u32           reserved[11];
+};
+
+/*
+ *     O V E R L A Y   P R E V I E W
+ */
+struct v4l2_framebuffer {
+       __u32                   capability;
+       __u32                   flags;
+/* FIXME: in theory we should pass something like PCI device + memory
+ * region + offset instead of some physical address */
+       void                    *base;
+       struct {
+               __u32           width;
+               __u32           height;
+               __u32           pixelformat;
+               __u32           field;          /* enum v4l2_field */
+               __u32           bytesperline;   /* for padding, zero if unused */
+               __u32           sizeimage;
+               __u32           colorspace;     /* enum v4l2_colorspace */
+               __u32           priv;           /* reserved field, set to 0 */
+       } fmt;
+};
+/*  Flags for the 'capability' field. Read only */
+#define V4L2_FBUF_CAP_EXTERNOVERLAY    0x0001
+#define V4L2_FBUF_CAP_CHROMAKEY                0x0002
+#define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
+#define V4L2_FBUF_CAP_BITMAP_CLIPPING  0x0008
+#define V4L2_FBUF_CAP_LOCAL_ALPHA      0x0010
+#define V4L2_FBUF_CAP_GLOBAL_ALPHA     0x0020
+#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA  0x0040
+#define V4L2_FBUF_CAP_SRC_CHROMAKEY    0x0080
+/*  Flags for the 'flags' field. */
+#define V4L2_FBUF_FLAG_PRIMARY         0x0001
+#define V4L2_FBUF_FLAG_OVERLAY         0x0002
+#define V4L2_FBUF_FLAG_CHROMAKEY       0x0004
+#define V4L2_FBUF_FLAG_LOCAL_ALPHA     0x0008
+#define V4L2_FBUF_FLAG_GLOBAL_ALPHA    0x0010
+#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
+#define V4L2_FBUF_FLAG_SRC_CHROMAKEY   0x0040
+
+struct v4l2_clip {
+       struct v4l2_rect        c;
+       struct v4l2_clip        *next;
+};
+
+struct v4l2_window {
+       struct v4l2_rect        w;
+       __u32                   field;   /* enum v4l2_field */
+       __u32                   chromakey;
+       struct v4l2_clip        *clips;
+       __u32                   clipcount;
+       void                    *bitmap;
+       __u8                    global_alpha;
+};
+
+/*
+ *     C A P T U R E   P A R A M E T E R S
+ */
+struct v4l2_captureparm {
+       __u32              capability;    /*  Supported modes */
+       __u32              capturemode;   /*  Current mode */
+       struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
+       __u32              extendedmode;  /*  Driver-specific extensions */
+       __u32              readbuffers;   /*  # of buffers for read */
+       __u32              reserved[4];
+};
+
+/*  Flags for 'capability' and 'capturemode' fields */
+#define V4L2_MODE_HIGHQUALITY  0x0001  /*  High quality imaging mode */
+#define V4L2_CAP_TIMEPERFRAME  0x1000  /*  timeperframe field is supported */
+
+struct v4l2_outputparm {
+       __u32              capability;   /*  Supported modes */
+       __u32              outputmode;   /*  Current mode */
+       struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
+       __u32              extendedmode; /*  Driver-specific extensions */
+       __u32              writebuffers; /*  # of buffers for write */
+       __u32              reserved[4];
+};
+
+/*
+ *     I N P U T   I M A G E   C R O P P I N G
+ */
+struct v4l2_cropcap {
+       __u32                   type;   /* enum v4l2_buf_type */
+       struct v4l2_rect        bounds;
+       struct v4l2_rect        defrect;
+       struct v4l2_fract       pixelaspect;
+};
+
+struct v4l2_crop {
+       __u32                   type;   /* enum v4l2_buf_type */
+       struct v4l2_rect        c;
+};
+
+/**
+ * struct v4l2_selection - selection info
+ * @type:      buffer type (do not use *_MPLANE types)
+ * @target:    Selection target, used to choose one of possible rectangles;
+ *             defined in v4l2-common.h; V4L2_SEL_TGT_* .
+ * @flags:     constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
+ * @r:         coordinates of selection window
+ * @reserved:  for future use, rounds structure size to 64 bytes, set to zero
+ *
+ * Hardware may use multiple helper windows to process a video stream.
+ * The structure is used to exchange this selection areas between
+ * an application and a driver.
+ */
+struct v4l2_selection {
+       __u32                   type;
+       __u32                   target;
+       __u32                   flags;
+       struct v4l2_rect        r;
+       __u32                   reserved[9];
+};
+
+
+/*
+ *      A N A L O G   V I D E O   S T A N D A R D
+ */
+
+typedef __u64 v4l2_std_id;
+
+/* one bit for each */
+#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
+#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
+#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
+#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
+#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
+#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
+#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
+#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
+
+#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
+#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
+#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
+#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
+
+#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)      /* BTSC */
+#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)      /* EIA-J */
+#define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
+#define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)      /* FM A2 */
+
+#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
+#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
+#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
+#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
+#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
+#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
+#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
+#define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
+
+/* ATSC/HDTV */
+#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
+#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
+
+/* FIXME:
+   Although std_id is 64 bits, there is an issue on PPC32 architecture that
+   makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
+   this value to 32 bits.
+   As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
+   it should work fine. However, if needed to add more than two standards,
+   v4l2-common.c should be fixed.
+ */
+
+/*
+ * Some macros to merge video standards in order to make live easier for the
+ * drivers and V4L2 applications
+ */
+
+/*
+ * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
+ * Missing here.
+ */
+#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M       |\
+                                V4L2_STD_NTSC_M_JP     |\
+                                V4L2_STD_NTSC_M_KR)
+/* Secam macros */
+#define V4L2_STD_SECAM_DK              (V4L2_STD_SECAM_D       |\
+                                V4L2_STD_SECAM_K       |\
+                                V4L2_STD_SECAM_K1)
+/* All Secam Standards */
+#define V4L2_STD_SECAM         (V4L2_STD_SECAM_B       |\
+                                V4L2_STD_SECAM_G       |\
+                                V4L2_STD_SECAM_H       |\
+                                V4L2_STD_SECAM_DK      |\
+                                V4L2_STD_SECAM_L       |\
+                                V4L2_STD_SECAM_LC)
+/* PAL macros */
+#define V4L2_STD_PAL_BG                (V4L2_STD_PAL_B         |\
+                                V4L2_STD_PAL_B1        |\
+                                V4L2_STD_PAL_G)
+#define V4L2_STD_PAL_DK                (V4L2_STD_PAL_D         |\
+                                V4L2_STD_PAL_D1        |\
+                                V4L2_STD_PAL_K)
+/*
+ * "Common" PAL - This macro is there to be compatible with the old
+ * V4L1 concept of "PAL": /BGDKHI.
+ * Several PAL standards are missing here: /M, /N and /Nc
+ */
+#define V4L2_STD_PAL           (V4L2_STD_PAL_BG        |\
+                                V4L2_STD_PAL_DK        |\
+                                V4L2_STD_PAL_H         |\
+                                V4L2_STD_PAL_I)
+/* Chroma "agnostic" standards */
+#define V4L2_STD_B             (V4L2_STD_PAL_B         |\
+                                V4L2_STD_PAL_B1        |\
+                                V4L2_STD_SECAM_B)
+#define V4L2_STD_G             (V4L2_STD_PAL_G         |\
+                                V4L2_STD_SECAM_G)
+#define V4L2_STD_H             (V4L2_STD_PAL_H         |\
+                                V4L2_STD_SECAM_H)
+#define V4L2_STD_L             (V4L2_STD_SECAM_L       |\
+                                V4L2_STD_SECAM_LC)
+#define V4L2_STD_GH            (V4L2_STD_G             |\
+                                V4L2_STD_H)
+#define V4L2_STD_DK            (V4L2_STD_PAL_DK        |\
+                                V4L2_STD_SECAM_DK)
+#define V4L2_STD_BG            (V4L2_STD_B             |\
+                                V4L2_STD_G)
+#define V4L2_STD_MN            (V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc        |\
+                                V4L2_STD_NTSC)
+
+/* Standards where MTS/BTSC stereo could be found */
+#define V4L2_STD_MTS           (V4L2_STD_NTSC_M        |\
+                                V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc)
+
+/* Standards for Countries with 60Hz Line frequency */
+#define V4L2_STD_525_60                (V4L2_STD_PAL_M         |\
+                                V4L2_STD_PAL_60        |\
+                                V4L2_STD_NTSC          |\
+                                V4L2_STD_NTSC_443)
+/* Standards for Countries with 50Hz Line frequency */
+#define V4L2_STD_625_50                (V4L2_STD_PAL           |\
+                                V4L2_STD_PAL_N         |\
+                                V4L2_STD_PAL_Nc        |\
+                                V4L2_STD_SECAM)
+
+#define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
+                                V4L2_STD_ATSC_16_VSB)
+/* Macros with none and all analog standards */
+#define V4L2_STD_UNKNOWN        0
+#define V4L2_STD_ALL            (V4L2_STD_525_60       |\
+                                V4L2_STD_625_50)
+
+struct v4l2_standard {
+       __u32                index;
+       v4l2_std_id          id;
+       __u8                 name[24];
+       struct v4l2_fract    frameperiod; /* Frames, not fields */
+       __u32                framelines;
+       __u32                reserved[4];
+};
+
+/*
+ *     D V     B T     T I M I N G S
+ */
+
+/** struct v4l2_bt_timings - BT.656/BT.1120 timing data
+ * @width:     total width of the active video in pixels
+ * @height:    total height of the active video in lines
+ * @interlaced:        Interlaced or progressive
+ * @polarities:        Positive or negative polarities
+ * @pixelclock:        Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @hfrontporch:Horizontal front porch in pixels
+ * @hsync:     Horizontal Sync length in pixels
+ * @hbackporch:        Horizontal back porch in pixels
+ * @vfrontporch:Vertical front porch in lines
+ * @vsync:     Vertical Sync length in lines
+ * @vbackporch:        Vertical back porch in lines
+ * @il_vfrontporch:Vertical front porch for the even field
+ *             (aka field 2) of interlaced field formats
+ * @il_vsync:  Vertical Sync length for the even field
+ *             (aka field 2) of interlaced field formats
+ * @il_vbackporch:Vertical back porch for the even field
+ *             (aka field 2) of interlaced field formats
+ * @standards: Standards the timing belongs to
+ * @flags:     Flags
+ * @reserved:  Reserved fields, must be zeroed.
+ *
+ * A note regarding vertical interlaced timings: height refers to the total
+ * height of the active video frame (= two fields). The blanking timings refer
+ * to the blanking of each field. So the height of the total frame is
+ * calculated as follows:
+ *
+ * tot_height = height + vfrontporch + vsync + vbackporch +
+ *                       il_vfrontporch + il_vsync + il_vbackporch
+ *
+ * The active height of each field is height / 2.
+ */
+struct v4l2_bt_timings {
+       __u32   width;
+       __u32   height;
+       __u32   interlaced;
+       __u32   polarities;
+       __u64   pixelclock;
+       __u32   hfrontporch;
+       __u32   hsync;
+       __u32   hbackporch;
+       __u32   vfrontporch;
+       __u32   vsync;
+       __u32   vbackporch;
+       __u32   il_vfrontporch;
+       __u32   il_vsync;
+       __u32   il_vbackporch;
+       __u32   standards;
+       __u32   flags;
+       __u32   reserved[14];
+} __attribute__ ((packed));
+
+/* Interlaced or progressive format */
+#define        V4L2_DV_PROGRESSIVE     0
+#define        V4L2_DV_INTERLACED      1
+
+/* Polarities. If bit is not set, it is assumed to be negative polarity */
+#define V4L2_DV_VSYNC_POS_POL  0x00000001
+#define V4L2_DV_HSYNC_POS_POL  0x00000002
+
+/* Timings standards */
+#define V4L2_DV_BT_STD_CEA861  (1 << 0)  /* CEA-861 Digital TV Profile */
+#define V4L2_DV_BT_STD_DMT     (1 << 1)  /* VESA Discrete Monitor Timings */
+#define V4L2_DV_BT_STD_CVT     (1 << 2)  /* VESA Coordinated Video Timings */
+#define V4L2_DV_BT_STD_GTF     (1 << 3)  /* VESA Generalized Timings Formula */
+
+/* Flags */
+
+/* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
+   GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
+   intervals are reduced, allowing a higher resolution over the same
+   bandwidth. This is a read-only flag. */
+#define V4L2_DV_FL_REDUCED_BLANKING            (1 << 0)
+/* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
+   of six. These formats can be optionally played at 1 / 1.001 speed.
+   This is a read-only flag. */
+#define V4L2_DV_FL_CAN_REDUCE_FPS              (1 << 1)
+/* CEA-861 specific: only valid for video transmitters, the flag is cleared
+   by receivers.
+   If the framerate of the format is a multiple of six, then the pixelclock
+   used to set up the transmitter is divided by 1.001 to make it compatible
+   with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
+   29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
+   such frequencies, then the flag will also be cleared. */
+#define V4L2_DV_FL_REDUCED_FPS                 (1 << 2)
+/* Specific to interlaced formats: if set, then field 1 is really one half-line
+   longer and field 2 is really one half-line shorter, so each field has
+   exactly the same number of half-lines. Whether half-lines can be detected
+   or used depends on the hardware. */
+#define V4L2_DV_FL_HALF_LINE                   (1 << 3)
+/* If set, then this is a Consumer Electronics (CE) video format. Such formats
+ * differ from other formats (commonly called IT formats) in that if RGB
+ * encoding is used then by default the RGB values use limited range (i.e.
+ * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
+ * except for the 640x480 format are CE formats. */
+#define V4L2_DV_FL_IS_CE_VIDEO                 (1 << 4)
+
+/* A few useful defines to calculate the total blanking and frame sizes */
+#define V4L2_DV_BT_BLANKING_WIDTH(bt) \
+       ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
+#define V4L2_DV_BT_FRAME_WIDTH(bt) \
+       ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
+#define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
+       ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
+        (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
+#define V4L2_DV_BT_FRAME_HEIGHT(bt) \
+       ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
+
+/** struct v4l2_dv_timings - DV timings
+ * @type:      the type of the timings
+ * @bt:        BT656/1120 timings
+ */
+struct v4l2_dv_timings {
+       __u32 type;
+       union {
+               struct v4l2_bt_timings  bt;
+               __u32   reserved[32];
+       };
+} __attribute__ ((packed));
+
+/* Values for the type field */
+#define V4L2_DV_BT_656_1120    0       /* BT.656/1120 timing type */
+
+
+/** struct v4l2_enum_dv_timings - DV timings enumeration
+ * @index:     enumeration index
+ * @pad:       the pad number for which to enumerate timings (used with
+ *             v4l-subdev nodes only)
+ * @reserved:  must be zeroed
+ * @timings:   the timings for the given index
+ */
+struct v4l2_enum_dv_timings {
+       __u32 index;
+       __u32 pad;
+       __u32 reserved[2];
+       struct v4l2_dv_timings timings;
+};
+
+/** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
+ * @min_width:         width in pixels
+ * @max_width:         width in pixels
+ * @min_height:                height in lines
+ * @max_height:                height in lines
+ * @min_pixelclock:    Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @max_pixelclock:    Pixel clock in HZ. Ex. 74.25MHz->74250000
+ * @standards:         Supported standards
+ * @capabilities:      Supported capabilities
+ * @reserved:          Must be zeroed
+ */
+struct v4l2_bt_timings_cap {
+       __u32   min_width;
+       __u32   max_width;
+       __u32   min_height;
+       __u32   max_height;
+       __u64   min_pixelclock;
+       __u64   max_pixelclock;
+       __u32   standards;
+       __u32   capabilities;
+       __u32   reserved[16];
+} __attribute__ ((packed));
+
+/* Supports interlaced formats */
+#define V4L2_DV_BT_CAP_INTERLACED      (1 << 0)
+/* Supports progressive formats */
+#define V4L2_DV_BT_CAP_PROGRESSIVE     (1 << 1)
+/* Supports CVT/GTF reduced blanking */
+#define V4L2_DV_BT_CAP_REDUCED_BLANKING        (1 << 2)
+/* Supports custom formats */
+#define V4L2_DV_BT_CAP_CUSTOM          (1 << 3)
+
+/** struct v4l2_dv_timings_cap - DV timings capabilities
+ * @type:      the type of the timings (same as in struct v4l2_dv_timings)
+ * @pad:       the pad number for which to query capabilities (used with
+ *             v4l-subdev nodes only)
+ * @bt:                the BT656/1120 timings capabilities
+ */
+struct v4l2_dv_timings_cap {
+       __u32 type;
+       __u32 pad;
+       __u32 reserved[2];
+       union {
+               struct v4l2_bt_timings_cap bt;
+               __u32 raw_data[32];
+       };
+};
+
+
+/*
+ *     V I D E O   I N P U T S
+ */
+struct v4l2_input {
+       __u32        index;             /*  Which input */
+       __u8         name[32];          /*  Label */
+       __u32        type;              /*  Type of input */
+       __u32        audioset;          /*  Associated audios (bitfield) */
+       __u32        tuner;             /*  enum v4l2_tuner_type */
+       v4l2_std_id  std;
+       __u32        status;
+       __u32        capabilities;
+       __u32        reserved[3];
+};
+
+/*  Values for the 'type' field */
+#define V4L2_INPUT_TYPE_TUNER          1
+#define V4L2_INPUT_TYPE_CAMERA         2
+
+/* field 'status' - general */
+#define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
+#define V4L2_IN_ST_NO_SIGNAL   0x00000002
+#define V4L2_IN_ST_NO_COLOR    0x00000004
+
+/* field 'status' - sensor orientation */
+/* If sensor is mounted upside down set both bits */
+#define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
+#define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
+
+/* field 'status' - analog */
+#define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
+#define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
+
+/* field 'status' - digital */
+#define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
+#define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
+#define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
+
+/* field 'status' - VCR and set-top box */
+#define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
+#define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
+#define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
+
+/* capabilities flags */
+#define V4L2_IN_CAP_DV_TIMINGS         0x00000002 /* Supports S_DV_TIMINGS */
+#define V4L2_IN_CAP_CUSTOM_TIMINGS     V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
+#define V4L2_IN_CAP_STD                        0x00000004 /* Supports S_STD */
+#define V4L2_IN_CAP_NATIVE_SIZE                0x00000008 /* Supports setting native size */
+
+/*
+ *     V I D E O   O U T P U T S
+ */
+struct v4l2_output {
+       __u32        index;             /*  Which output */
+       __u8         name[32];          /*  Label */
+       __u32        type;              /*  Type of output */
+       __u32        audioset;          /*  Associated audios (bitfield) */
+       __u32        modulator;         /*  Associated modulator */
+       v4l2_std_id  std;
+       __u32        capabilities;
+       __u32        reserved[3];
+};
+/*  Values for the 'type' field */
+#define V4L2_OUTPUT_TYPE_MODULATOR             1
+#define V4L2_OUTPUT_TYPE_ANALOG                        2
+#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY      3
+
+/* capabilities flags */
+#define V4L2_OUT_CAP_DV_TIMINGS                0x00000002 /* Supports S_DV_TIMINGS */
+#define V4L2_OUT_CAP_CUSTOM_TIMINGS    V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
+#define V4L2_OUT_CAP_STD               0x00000004 /* Supports S_STD */
+#define V4L2_OUT_CAP_NATIVE_SIZE       0x00000008 /* Supports setting native size */
+
+/*
+ *     C O N T R O L S
+ */
+struct v4l2_control {
+       __u32                id;
+       __s32                value;
+};
+
+struct v4l2_ext_control {
+       __u32 id;
+       __u32 size;
+       __u32 reserved2[1];
+       union {
+               __s32 value;
+               __s64 value64;
+               char *string;
+               __u8 *p_u8;
+               __u16 *p_u16;
+               __u32 *p_u32;
+               void *ptr;
+       };
+} __attribute__ ((packed));
+
+struct v4l2_ext_controls {
+       __u32 ctrl_class;
+       __u32 count;
+       __u32 error_idx;
+       __u32 reserved[2];
+       struct v4l2_ext_control *controls;
+};
+
+#define V4L2_CTRL_ID_MASK                (0x0fffffff)
+#define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
+#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
+#define V4L2_CTRL_MAX_DIMS       (4)
+
+enum v4l2_ctrl_type {
+       V4L2_CTRL_TYPE_INTEGER       = 1,
+       V4L2_CTRL_TYPE_BOOLEAN       = 2,
+       V4L2_CTRL_TYPE_MENU          = 3,
+       V4L2_CTRL_TYPE_BUTTON        = 4,
+       V4L2_CTRL_TYPE_INTEGER64     = 5,
+       V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
+       V4L2_CTRL_TYPE_STRING        = 7,
+       V4L2_CTRL_TYPE_BITMASK       = 8,
+       V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
+
+       /* Compound types are >= 0x0100 */
+       V4L2_CTRL_COMPOUND_TYPES     = 0x0100,
+       V4L2_CTRL_TYPE_U8            = 0x0100,
+       V4L2_CTRL_TYPE_U16           = 0x0101,
+       V4L2_CTRL_TYPE_U32           = 0x0102,
+};
+
+/*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
+struct v4l2_queryctrl {
+       __u32                id;
+       __u32                type;      /* enum v4l2_ctrl_type */
+       __u8                 name[32];  /* Whatever */
+       __s32                minimum;   /* Note signedness */
+       __s32                maximum;
+       __s32                step;
+       __s32                default_value;
+       __u32                flags;
+       __u32                reserved[2];
+};
+
+/*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
+struct v4l2_query_ext_ctrl {
+       __u32                id;
+       __u32                type;
+       char                 name[32];
+       __s64                minimum;
+       __s64                maximum;
+       __u64                step;
+       __s64                default_value;
+       __u32                flags;
+       __u32                elem_size;
+       __u32                elems;
+       __u32                nr_of_dims;
+       __u32                dims[V4L2_CTRL_MAX_DIMS];
+       __u32                reserved[32];
+};
+
+/*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
+struct v4l2_querymenu {
+       __u32           id;
+       __u32           index;
+       union {
+               __u8    name[32];       /* Whatever */
+               __s64   value;
+       };
+       __u32           reserved;
+} __attribute__ ((packed));
+
+/*  Control flags  */
+#define V4L2_CTRL_FLAG_DISABLED                0x0001
+#define V4L2_CTRL_FLAG_GRABBED         0x0002
+#define V4L2_CTRL_FLAG_READ_ONLY       0x0004
+#define V4L2_CTRL_FLAG_UPDATE          0x0008
+#define V4L2_CTRL_FLAG_INACTIVE        0x0010
+#define V4L2_CTRL_FLAG_SLIDER          0x0020
+#define V4L2_CTRL_FLAG_WRITE_ONLY      0x0040
+#define V4L2_CTRL_FLAG_VOLATILE                0x0080
+#define V4L2_CTRL_FLAG_HAS_PAYLOAD     0x0100
+#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE        0x0200
+
+/*  Query flags, to be ORed with the control ID */
+#define V4L2_CTRL_FLAG_NEXT_CTRL       0x80000000
+#define V4L2_CTRL_FLAG_NEXT_COMPOUND   0x40000000
+
+/*  User-class control IDs defined by V4L2 */
+#define V4L2_CID_MAX_CTRLS             1024
+/*  IDs reserved for driver specific controls */
+#define V4L2_CID_PRIVATE_BASE          0x08000000
+
+
+/*
+ *     T U N I N G
+ */
+struct v4l2_tuner {
+       __u32                   index;
+       __u8                    name[32];
+       __u32                   type;   /* enum v4l2_tuner_type */
+       __u32                   capability;
+       __u32                   rangelow;
+       __u32                   rangehigh;
+       __u32                   rxsubchans;
+       __u32                   audmode;
+       __s32                   signal;
+       __s32                   afc;
+       __u32                   reserved[4];
+};
+
+struct v4l2_modulator {
+       __u32                   index;
+       __u8                    name[32];
+       __u32                   capability;
+       __u32                   rangelow;
+       __u32                   rangehigh;
+       __u32                   txsubchans;
+       __u32                   type;   /* enum v4l2_tuner_type */
+       __u32                   reserved[3];
+};
+
+/*  Flags for the 'capability' field */
+#define V4L2_TUNER_CAP_LOW             0x0001
+#define V4L2_TUNER_CAP_NORM            0x0002
+#define V4L2_TUNER_CAP_HWSEEK_BOUNDED  0x0004
+#define V4L2_TUNER_CAP_HWSEEK_WRAP     0x0008
+#define V4L2_TUNER_CAP_STEREO          0x0010
+#define V4L2_TUNER_CAP_LANG2           0x0020
+#define V4L2_TUNER_CAP_SAP             0x0020
+#define V4L2_TUNER_CAP_LANG1           0x0040
+#define V4L2_TUNER_CAP_RDS             0x0080
+#define V4L2_TUNER_CAP_RDS_BLOCK_IO    0x0100
+#define V4L2_TUNER_CAP_RDS_CONTROLS    0x0200
+#define V4L2_TUNER_CAP_FREQ_BANDS      0x0400
+#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
+#define V4L2_TUNER_CAP_1HZ             0x1000
+
+/*  Flags for the 'rxsubchans' field */
+#define V4L2_TUNER_SUB_MONO            0x0001
+#define V4L2_TUNER_SUB_STEREO          0x0002
+#define V4L2_TUNER_SUB_LANG2           0x0004
+#define V4L2_TUNER_SUB_SAP             0x0004
+#define V4L2_TUNER_SUB_LANG1           0x0008
+#define V4L2_TUNER_SUB_RDS             0x0010
+
+/*  Values for the 'audmode' field */
+#define V4L2_TUNER_MODE_MONO           0x0000
+#define V4L2_TUNER_MODE_STEREO         0x0001
+#define V4L2_TUNER_MODE_LANG2          0x0002
+#define V4L2_TUNER_MODE_SAP            0x0002
+#define V4L2_TUNER_MODE_LANG1          0x0003
+#define V4L2_TUNER_MODE_LANG1_LANG2    0x0004
+
+struct v4l2_frequency {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   frequency;
+       __u32   reserved[8];
+};
+
+#define V4L2_BAND_MODULATION_VSB       (1 << 1)
+#define V4L2_BAND_MODULATION_FM                (1 << 2)
+#define V4L2_BAND_MODULATION_AM                (1 << 3)
+
+struct v4l2_frequency_band {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   index;
+       __u32   capability;
+       __u32   rangelow;
+       __u32   rangehigh;
+       __u32   modulation;
+       __u32   reserved[9];
+};
+
+struct v4l2_hw_freq_seek {
+       __u32   tuner;
+       __u32   type;   /* enum v4l2_tuner_type */
+       __u32   seek_upward;
+       __u32   wrap_around;
+       __u32   spacing;
+       __u32   rangelow;
+       __u32   rangehigh;
+       __u32   reserved[5];
+};
+
+/*
+ *     R D S
+ */
+
+struct v4l2_rds_data {
+       __u8    lsb;
+       __u8    msb;
+       __u8    block;
+} __attribute__ ((packed));
+
+#define V4L2_RDS_BLOCK_MSK      0x7
+#define V4L2_RDS_BLOCK_A        0
+#define V4L2_RDS_BLOCK_B        1
+#define V4L2_RDS_BLOCK_C        2
+#define V4L2_RDS_BLOCK_D        3
+#define V4L2_RDS_BLOCK_C_ALT    4
+#define V4L2_RDS_BLOCK_INVALID          7
+
+#define V4L2_RDS_BLOCK_CORRECTED 0x40
+#define V4L2_RDS_BLOCK_ERROR    0x80
+
+/*
+ *     A U D I O
+ */
+struct v4l2_audio {
+       __u32   index;
+       __u8    name[32];
+       __u32   capability;
+       __u32   mode;
+       __u32   reserved[2];
+};
+
+/*  Flags for the 'capability' field */
+#define V4L2_AUDCAP_STEREO             0x00001
+#define V4L2_AUDCAP_AVL                        0x00002
+
+/*  Flags for the 'mode' field */
+#define V4L2_AUDMODE_AVL               0x00001
+
+struct v4l2_audioout {
+       __u32   index;
+       __u8    name[32];
+       __u32   capability;
+       __u32   mode;
+       __u32   reserved[2];
+};
+
+/*
+ *     M P E G   S E R V I C E S
+ *
+ *     NOTE: EXPERIMENTAL API
+ */
+#if 1
+#define V4L2_ENC_IDX_FRAME_I    (0)
+#define V4L2_ENC_IDX_FRAME_P    (1)
+#define V4L2_ENC_IDX_FRAME_B    (2)
+#define V4L2_ENC_IDX_FRAME_MASK (0xf)
+
+struct v4l2_enc_idx_entry {
+       __u64 offset;
+       __u64 pts;
+       __u32 length;
+       __u32 flags;
+       __u32 reserved[2];
+};
+
+#define V4L2_ENC_IDX_ENTRIES (64)
+struct v4l2_enc_idx {
+       __u32 entries;
+       __u32 entries_cap;
+       __u32 reserved[4];
+       struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
+};
+
+
+#define V4L2_ENC_CMD_START      (0)
+#define V4L2_ENC_CMD_STOP       (1)
+#define V4L2_ENC_CMD_PAUSE      (2)
+#define V4L2_ENC_CMD_RESUME     (3)
+
+/* Flags for V4L2_ENC_CMD_STOP */
+#define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
+
+struct v4l2_encoder_cmd {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u32 data[8];
+               } raw;
+       };
+};
+
+/* Decoder commands */
+#define V4L2_DEC_CMD_START       (0)
+#define V4L2_DEC_CMD_STOP        (1)
+#define V4L2_DEC_CMD_PAUSE       (2)
+#define V4L2_DEC_CMD_RESUME      (3)
+
+/* Flags for V4L2_DEC_CMD_START */
+#define V4L2_DEC_CMD_START_MUTE_AUDIO  (1 << 0)
+
+/* Flags for V4L2_DEC_CMD_PAUSE */
+#define V4L2_DEC_CMD_PAUSE_TO_BLACK    (1 << 0)
+
+/* Flags for V4L2_DEC_CMD_STOP */
+#define V4L2_DEC_CMD_STOP_TO_BLACK     (1 << 0)
+#define V4L2_DEC_CMD_STOP_IMMEDIATELY  (1 << 1)
+
+/* Play format requirements (returned by the driver): */
+
+/* The decoder has no special format requirements */
+#define V4L2_DEC_START_FMT_NONE                (0)
+/* The decoder requires full GOPs */
+#define V4L2_DEC_START_FMT_GOP         (1)
+
+/* The structure must be zeroed before use by the application
+   This ensures it can be extended safely in the future. */
+struct v4l2_decoder_cmd {
+       __u32 cmd;
+       __u32 flags;
+       union {
+               struct {
+                       __u64 pts;
+               } stop;
+
+               struct {
+                       /* 0 or 1000 specifies normal speed,
+                          1 specifies forward single stepping,
+                          -1 specifies backward single stepping,
+                          >1: playback at speed/1000 of the normal speed,
+                          <-1: reverse playback at (-speed/1000) of the normal speed. */
+                       __s32 speed;
+                       __u32 format;
+               } start;
+
+               struct {
+                       __u32 data[16];
+               } raw;
+       };
+};
+#endif
+
+
+/*
+ *     D A T A   S E R V I C E S   ( V B I )
+ *
+ *     Data services API by Michael Schimek
+ */
+
+/* Raw VBI */
+struct v4l2_vbi_format {
+       __u32   sampling_rate;          /* in 1 Hz */
+       __u32   offset;
+       __u32   samples_per_line;
+       __u32   sample_format;          /* V4L2_PIX_FMT_* */
+       __s32   start[2];
+       __u32   count[2];
+       __u32   flags;                  /* V4L2_VBI_* */
+       __u32   reserved[2];            /* must be zero */
+};
+
+/*  VBI flags  */
+#define V4L2_VBI_UNSYNC                (1 << 0)
+#define V4L2_VBI_INTERLACED    (1 << 1)
+
+/* ITU-R start lines for each field */
+#define V4L2_VBI_ITU_525_F1_START (1)
+#define V4L2_VBI_ITU_525_F2_START (264)
+#define V4L2_VBI_ITU_625_F1_START (1)
+#define V4L2_VBI_ITU_625_F2_START (314)
+
+/* Sliced VBI
+ *
+ *    This implements is a proposal V4L2 API to allow SLICED VBI
+ * required for some hardware encoders. It should change without
+ * notice in the definitive implementation.
+ */
+
+struct v4l2_sliced_vbi_format {
+       __u16   service_set;
+       /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
+          service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
+                                (equals frame lines 313-336 for 625 line video
+                                 standards, 263-286 for 525 line standards) */
+       __u16   service_lines[2][24];
+       __u32   io_size;
+       __u32   reserved[2];            /* must be zero */
+};
+
+/* Teletext World System Teletext
+   (WST), defined on ITU-R BT.653-2 */
+#define V4L2_SLICED_TELETEXT_B          (0x0001)
+/* Video Program System, defined on ETS 300 231*/
+#define V4L2_SLICED_VPS                 (0x0400)
+/* Closed Caption, defined on EIA-608 */
+#define V4L2_SLICED_CAPTION_525         (0x1000)
+/* Wide Screen System, defined on ITU-R BT1119.1 */
+#define V4L2_SLICED_WSS_625             (0x4000)
+
+#define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
+#define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
+
+struct v4l2_sliced_vbi_cap {
+       __u16   service_set;
+       /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
+          service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
+                                (equals frame lines 313-336 for 625 line video
+                                 standards, 263-286 for 525 line standards) */
+       __u16   service_lines[2][24];
+       __u32   type;           /* enum v4l2_buf_type */
+       __u32   reserved[3];    /* must be 0 */
+};
+
+struct v4l2_sliced_vbi_data {
+       __u32   id;
+       __u32   field;          /* 0: first field, 1: second field */
+       __u32   line;           /* 1-23 */
+       __u32   reserved;       /* must be 0 */
+       __u8    data[48];
+};
+
+/*
+ * Sliced VBI data inserted into MPEG Streams
+ */
+
+/*
+ * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
+ *
+ * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
+ * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
+ * data
+ *
+ * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
+ * definitions are not included here.  See the MPEG-2 specifications for details
+ * on these headers.
+ */
+
+/* Line type IDs */
+#define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
+#define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
+#define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
+#define V4L2_MPEG_VBI_IVTV_VPS            (7)
+
+struct v4l2_mpeg_vbi_itv0_line {
+       __u8 id;        /* One of V4L2_MPEG_VBI_IVTV_* above */
+       __u8 data[42];  /* Sliced VBI data for the line */
+} __attribute__ ((packed));
+
+struct v4l2_mpeg_vbi_itv0 {
+       __le32 linemask[2]; /* Bitmasks of VBI service lines present */
+       struct v4l2_mpeg_vbi_itv0_line line[35];
+} __attribute__ ((packed));
+
+struct v4l2_mpeg_vbi_ITV0 {
+       struct v4l2_mpeg_vbi_itv0_line line[36];
+} __attribute__ ((packed));
+
+#define V4L2_MPEG_VBI_IVTV_MAGIC0      "itv0"
+#define V4L2_MPEG_VBI_IVTV_MAGIC1      "ITV0"
+
+struct v4l2_mpeg_vbi_fmt_ivtv {
+       __u8 magic[4];
+       union {
+               struct v4l2_mpeg_vbi_itv0 itv0;
+               struct v4l2_mpeg_vbi_ITV0 ITV0;
+       };
+} __attribute__ ((packed));
+
+/*
+ *     A G G R E G A T E   S T R U C T U R E S
+ */
+
+/**
+ * struct v4l2_plane_pix_format - additional, per-plane format definition
+ * @sizeimage:         maximum size in bytes required for data, for which
+ *                     this plane will be used
+ * @bytesperline:      distance in bytes between the leftmost pixels in two
+ *                     adjacent lines
+ */
+struct v4l2_plane_pix_format {
+       __u32           sizeimage;
+       __u32           bytesperline;
+       __u16           reserved[6];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_pix_format_mplane - multiplanar format definition
+ * @width:             image width in pixels
+ * @height:            image height in pixels
+ * @pixelformat:       little endian four character code (fourcc)
+ * @field:             enum v4l2_field; field order (for interlaced video)
+ * @colorspace:                enum v4l2_colorspace; supplemental to pixelformat
+ * @plane_fmt:         per-plane information
+ * @num_planes:                number of planes for this format
+ * @flags:             format flags (V4L2_PIX_FMT_FLAG_*)
+ * @ycbcr_enc:         enum v4l2_ycbcr_encoding, Y'CbCr encoding
+ * @quantization:      enum v4l2_quantization, colorspace quantization
+ * @xfer_func:         enum v4l2_xfer_func, colorspace transfer function
+ */
+struct v4l2_pix_format_mplane {
+       __u32                           width;
+       __u32                           height;
+       __u32                           pixelformat;
+       __u32                           field;
+       __u32                           colorspace;
+
+       struct v4l2_plane_pix_format    plane_fmt[VIDEO_MAX_PLANES];
+       __u8                            num_planes;
+       __u8                            flags;
+       __u8                            ycbcr_enc;
+       __u8                            quantization;
+       __u8                            xfer_func;
+       __u8                            reserved[7];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_sdr_format - SDR format definition
+ * @pixelformat:       little endian four character code (fourcc)
+ * @buffersize:                maximum size in bytes required for data
+ */
+struct v4l2_sdr_format {
+       __u32                           pixelformat;
+       __u32                           buffersize;
+       __u8                            reserved[24];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_format - stream data format
+ * @type:      enum v4l2_buf_type; type of the data stream
+ * @pix:       definition of an image format
+ * @pix_mp:    definition of a multiplanar image format
+ * @win:       definition of an overlaid image
+ * @vbi:       raw VBI capture or output parameters
+ * @sliced:    sliced VBI capture or output parameters
+ * @raw_data:  placeholder for future extensions and custom formats
+ */
+struct v4l2_format {
+       __u32    type;
+       union {
+               struct v4l2_pix_format          pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
+               struct v4l2_pix_format_mplane   pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
+               struct v4l2_window              win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
+               struct v4l2_vbi_format          vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
+               struct v4l2_sliced_vbi_format   sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
+               struct v4l2_sdr_format          sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */
+               __u8    raw_data[200];                   /* user-defined */
+       } fmt;
+};
+
+/*     Stream type-dependent parameters
+ */
+struct v4l2_streamparm {
+       __u32    type;                  /* enum v4l2_buf_type */
+       union {
+               struct v4l2_captureparm capture;
+               struct v4l2_outputparm  output;
+               __u8    raw_data[200];  /* user-defined */
+       } parm;
+};
+
+/*
+ *     E V E N T S
+ */
+
+#define V4L2_EVENT_ALL                         0
+#define V4L2_EVENT_VSYNC                       1
+#define V4L2_EVENT_EOS                         2
+#define V4L2_EVENT_CTRL                                3
+#define V4L2_EVENT_FRAME_SYNC                  4
+#define V4L2_EVENT_SOURCE_CHANGE               5
+#define V4L2_EVENT_MOTION_DET                  6
+#define V4L2_EVENT_PRIVATE_START               0x08000000
+
+/* Payload for V4L2_EVENT_VSYNC */
+struct v4l2_event_vsync {
+       /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
+       __u8 field;
+} __attribute__ ((packed));
+
+/* Payload for V4L2_EVENT_CTRL */
+#define V4L2_EVENT_CTRL_CH_VALUE               (1 << 0)
+#define V4L2_EVENT_CTRL_CH_FLAGS               (1 << 1)
+#define V4L2_EVENT_CTRL_CH_RANGE               (1 << 2)
+
+struct v4l2_event_ctrl {
+       __u32 changes;
+       __u32 type;
+       union {
+               __s32 value;
+               __s64 value64;
+       };
+       __u32 flags;
+       __s32 minimum;
+       __s32 maximum;
+       __s32 step;
+       __s32 default_value;
+};
+
+struct v4l2_event_frame_sync {
+       __u32 frame_sequence;
+};
+
+#define V4L2_EVENT_SRC_CH_RESOLUTION           (1 << 0)
+
+struct v4l2_event_src_change {
+       __u32 changes;
+};
+
+#define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ        (1 << 0)
+
+/**
+ * struct v4l2_event_motion_det - motion detection event
+ * @flags:             if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
+ *                     frame_sequence field is valid.
+ * @frame_sequence:    the frame sequence number associated with this event.
+ * @region_mask:       which regions detected motion.
+ */
+struct v4l2_event_motion_det {
+       __u32 flags;
+       __u32 frame_sequence;
+       __u32 region_mask;
+};
+
+struct v4l2_event {
+       __u32                           type;
+       union {
+               struct v4l2_event_vsync         vsync;
+               struct v4l2_event_ctrl          ctrl;
+               struct v4l2_event_frame_sync    frame_sync;
+               struct v4l2_event_src_change    src_change;
+               struct v4l2_event_motion_det    motion_det;
+               __u8                            data[64];
+       } u;
+       __u32                           pending;
+       __u32                           sequence;
+       struct timespec                 timestamp;
+       __u32                           id;
+       __u32                           reserved[8];
+};
+
+#define V4L2_EVENT_SUB_FL_SEND_INITIAL         (1 << 0)
+#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK       (1 << 1)
+
+struct v4l2_event_subscription {
+       __u32                           type;
+       __u32                           id;
+       __u32                           flags;
+       __u32                           reserved[5];
+};
+
+/*
+ *     A D V A N C E D   D E B U G G I N G
+ *
+ *     NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
+ *     FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
+ */
+
+/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
+
+#define V4L2_CHIP_MATCH_BRIDGE      0  /* Match against chip ID on the bridge (0 for the bridge) */
+#define V4L2_CHIP_MATCH_SUBDEV      4  /* Match against subdev index */
+
+/* The following four defines are no longer in use */
+#define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
+#define V4L2_CHIP_MATCH_I2C_DRIVER  1  /* Match against I2C driver name */
+#define V4L2_CHIP_MATCH_I2C_ADDR    2  /* Match against I2C 7-bit address */
+#define V4L2_CHIP_MATCH_AC97        3  /* Match against ancillary AC97 chip */
+
+struct v4l2_dbg_match {
+       __u32 type; /* Match type */
+       union {     /* Match this chip, meaning determined by type */
+               __u32 addr;
+               char name[32];
+       };
+} __attribute__ ((packed));
+
+struct v4l2_dbg_register {
+       struct v4l2_dbg_match match;
+       __u32 size;     /* register size in bytes */
+       __u64 reg;
+       __u64 val;
+} __attribute__ ((packed));
+
+#define V4L2_CHIP_FL_READABLE (1 << 0)
+#define V4L2_CHIP_FL_WRITABLE (1 << 1)
+
+/* VIDIOC_DBG_G_CHIP_INFO */
+struct v4l2_dbg_chip_info {
+       struct v4l2_dbg_match match;
+       char name[32];
+       __u32 flags;
+       __u32 reserved[32];
+} __attribute__ ((packed));
+
+/**
+ * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
+ * @index:     on return, index of the first created buffer
+ * @count:     entry: number of requested buffers,
+ *             return: number of created buffers
+ * @memory:    enum v4l2_memory; buffer memory type
+ * @format:    frame format, for which buffers are requested
+ * @reserved:  future extensions
+ */
+struct v4l2_create_buffers {
+       __u32                   index;
+       __u32                   count;
+       __u32                   memory;
+       struct v4l2_format      format;
+       __u32                   reserved[8];
+};
+
+/*
+ *     I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
+ *
+ */
+#define VIDIOC_QUERYCAP                 _IOR('V',  0, struct v4l2_capability)
+#define VIDIOC_RESERVED                  _IO('V',  1)
+#define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
+#define VIDIOC_G_FMT           _IOWR('V',  4, struct v4l2_format)
+#define VIDIOC_S_FMT           _IOWR('V',  5, struct v4l2_format)
+#define VIDIOC_REQBUFS         _IOWR('V',  8, struct v4l2_requestbuffers)
+#define VIDIOC_QUERYBUF                _IOWR('V',  9, struct v4l2_buffer)
+#define VIDIOC_G_FBUF           _IOR('V', 10, struct v4l2_framebuffer)
+#define VIDIOC_S_FBUF           _IOW('V', 11, struct v4l2_framebuffer)
+#define VIDIOC_OVERLAY          _IOW('V', 14, int)
+#define VIDIOC_QBUF            _IOWR('V', 15, struct v4l2_buffer)
+#define VIDIOC_EXPBUF          _IOWR('V', 16, struct v4l2_exportbuffer)
+#define VIDIOC_DQBUF           _IOWR('V', 17, struct v4l2_buffer)
+#define VIDIOC_STREAMON                 _IOW('V', 18, int)
+#define VIDIOC_STREAMOFF        _IOW('V', 19, int)
+#define VIDIOC_G_PARM          _IOWR('V', 21, struct v4l2_streamparm)
+#define VIDIOC_S_PARM          _IOWR('V', 22, struct v4l2_streamparm)
+#define VIDIOC_G_STD            _IOR('V', 23, v4l2_std_id)
+#define VIDIOC_S_STD            _IOW('V', 24, v4l2_std_id)
+#define VIDIOC_ENUMSTD         _IOWR('V', 25, struct v4l2_standard)
+#define VIDIOC_ENUMINPUT       _IOWR('V', 26, struct v4l2_input)
+#define VIDIOC_G_CTRL          _IOWR('V', 27, struct v4l2_control)
+#define VIDIOC_S_CTRL          _IOWR('V', 28, struct v4l2_control)
+#define VIDIOC_G_TUNER         _IOWR('V', 29, struct v4l2_tuner)
+#define VIDIOC_S_TUNER          _IOW('V', 30, struct v4l2_tuner)
+#define VIDIOC_G_AUDIO          _IOR('V', 33, struct v4l2_audio)
+#define VIDIOC_S_AUDIO          _IOW('V', 34, struct v4l2_audio)
+#define VIDIOC_QUERYCTRL       _IOWR('V', 36, struct v4l2_queryctrl)
+#define VIDIOC_QUERYMENU       _IOWR('V', 37, struct v4l2_querymenu)
+#define VIDIOC_G_INPUT          _IOR('V', 38, int)
+#define VIDIOC_S_INPUT         _IOWR('V', 39, int)
+#define VIDIOC_G_EDID          _IOWR('V', 40, struct v4l2_edid)
+#define VIDIOC_S_EDID          _IOWR('V', 41, struct v4l2_edid)
+#define VIDIOC_G_OUTPUT                 _IOR('V', 46, int)
+#define VIDIOC_S_OUTPUT                _IOWR('V', 47, int)
+#define VIDIOC_ENUMOUTPUT      _IOWR('V', 48, struct v4l2_output)
+#define VIDIOC_G_AUDOUT                 _IOR('V', 49, struct v4l2_audioout)
+#define VIDIOC_S_AUDOUT                 _IOW('V', 50, struct v4l2_audioout)
+#define VIDIOC_G_MODULATOR     _IOWR('V', 54, struct v4l2_modulator)
+#define VIDIOC_S_MODULATOR      _IOW('V', 55, struct v4l2_modulator)
+#define VIDIOC_G_FREQUENCY     _IOWR('V', 56, struct v4l2_frequency)
+#define VIDIOC_S_FREQUENCY      _IOW('V', 57, struct v4l2_frequency)
+#define VIDIOC_CROPCAP         _IOWR('V', 58, struct v4l2_cropcap)
+#define VIDIOC_G_CROP          _IOWR('V', 59, struct v4l2_crop)
+#define VIDIOC_S_CROP           _IOW('V', 60, struct v4l2_crop)
+#define VIDIOC_G_JPEGCOMP       _IOR('V', 61, struct v4l2_jpegcompression)
+#define VIDIOC_S_JPEGCOMP       _IOW('V', 62, struct v4l2_jpegcompression)
+#define VIDIOC_QUERYSTD         _IOR('V', 63, v4l2_std_id)
+#define VIDIOC_TRY_FMT         _IOWR('V', 64, struct v4l2_format)
+#define VIDIOC_ENUMAUDIO       _IOWR('V', 65, struct v4l2_audio)
+#define VIDIOC_ENUMAUDOUT      _IOWR('V', 66, struct v4l2_audioout)
+#define VIDIOC_G_PRIORITY       _IOR('V', 67, __u32) /* enum v4l2_priority */
+#define VIDIOC_S_PRIORITY       _IOW('V', 68, __u32) /* enum v4l2_priority */
+#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
+#define VIDIOC_LOG_STATUS         _IO('V', 70)
+#define VIDIOC_G_EXT_CTRLS     _IOWR('V', 71, struct v4l2_ext_controls)
+#define VIDIOC_S_EXT_CTRLS     _IOWR('V', 72, struct v4l2_ext_controls)
+#define VIDIOC_TRY_EXT_CTRLS   _IOWR('V', 73, struct v4l2_ext_controls)
+#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
+#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
+#define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
+#define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
+#define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
+
+/* Experimental, meant for debugging, testing and internal use.
+   Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
+   You must be root to use these ioctls. Never use these in applications! */
+#define        VIDIOC_DBG_S_REGISTER    _IOW('V', 79, struct v4l2_dbg_register)
+#define        VIDIOC_DBG_G_REGISTER   _IOWR('V', 80, struct v4l2_dbg_register)
+
+#define VIDIOC_S_HW_FREQ_SEEK   _IOW('V', 82, struct v4l2_hw_freq_seek)
+
+#define        VIDIOC_S_DV_TIMINGS     _IOWR('V', 87, struct v4l2_dv_timings)
+#define        VIDIOC_G_DV_TIMINGS     _IOWR('V', 88, struct v4l2_dv_timings)
+#define        VIDIOC_DQEVENT           _IOR('V', 89, struct v4l2_event)
+#define        VIDIOC_SUBSCRIBE_EVENT   _IOW('V', 90, struct v4l2_event_subscription)
+#define        VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
+
+/* Experimental, the below two ioctls may change over the next couple of kernel
+   versions */
+#define VIDIOC_CREATE_BUFS     _IOWR('V', 92, struct v4l2_create_buffers)
+#define VIDIOC_PREPARE_BUF     _IOWR('V', 93, struct v4l2_buffer)
+
+/* Experimental selection API */
+#define VIDIOC_G_SELECTION     _IOWR('V', 94, struct v4l2_selection)
+#define VIDIOC_S_SELECTION     _IOWR('V', 95, struct v4l2_selection)
+
+/* Experimental, these two ioctls may change over the next couple of kernel
+   versions. */
+#define VIDIOC_DECODER_CMD     _IOWR('V', 96, struct v4l2_decoder_cmd)
+#define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
+
+/* Experimental, these three ioctls may change over the next couple of kernel
+   versions. */
+#define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
+#define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
+#define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
+
+/* Experimental, this ioctl may change over the next couple of kernel
+   versions. */
+#define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band)
+
+/* Experimental, meant for debugging, testing and internal use.
+   Never use these in applications! */
+#define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
+
+#define VIDIOC_QUERY_EXT_CTRL  _IOWR('V', 103, struct v4l2_query_ext_ctrl)
+
+/* Reminder: when adding new ioctls please add support for them to
+   drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
+
+#define BASE_VIDIOC_PRIVATE    192             /* 192-255 are private */
+
+#endif /* __LINUX_VIDEODEV2_H */
diff --git a/lib/libdss-include/linux/virtio_9p.h b/lib/libdss-include/linux/virtio_9p.h
new file mode 100644 (file)
index 0000000..277c4ad
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _LINUX_VIRTIO_9P_H
+#define _LINUX_VIRTIO_9P_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* The feature bitmap for virtio 9P */
+
+/* The mount point is specified in a config variable */
+#define VIRTIO_9P_MOUNT_TAG 0
+
+struct virtio_9p_config {
+       /* length of the tag name */
+       __u16 tag_len;
+       /* non-NULL terminated tag name */
+       __u8 tag[0];
+} __attribute__((packed));
+
+#endif /* _LINUX_VIRTIO_9P_H */
diff --git a/lib/libdss-include/linux/virtio_balloon.h b/lib/libdss-include/linux/virtio_balloon.h
new file mode 100644 (file)
index 0000000..d7f1cbc
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef _LINUX_VIRTIO_BALLOON_H
+#define _LINUX_VIRTIO_BALLOON_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* The feature bitmap for virtio balloon */
+#define VIRTIO_BALLOON_F_MUST_TELL_HOST        0 /* Tell before reclaiming pages */
+#define VIRTIO_BALLOON_F_STATS_VQ      1 /* Memory Stats virtqueue */
+#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM        2 /* Deflate balloon on OOM */
+
+/* Size of a PFN in the balloon interface. */
+#define VIRTIO_BALLOON_PFN_SHIFT 12
+
+struct virtio_balloon_config {
+       /* Number of pages host wants Guest to give up. */
+       __u32 num_pages;
+       /* Number of pages we've actually got in balloon. */
+       __u32 actual;
+};
+
+#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
+#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
+#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
+#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
+#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
+#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
+#define VIRTIO_BALLOON_S_NR       6
+
+/*
+ * Memory statistics structure.
+ * Driver fills an array of these structures and passes to device.
+ *
+ * NOTE: fields are laid out in a way that would make compiler add padding
+ * between and after fields, so we have to use compiler-specific attributes to
+ * pack it, to disable this padding. This also often causes compiler to
+ * generate suboptimal code.
+ *
+ * We maintain this statistics structure format for backwards compatibility,
+ * but don't follow this example.
+ *
+ * If implementing a similar structure, do something like the below instead:
+ *     struct virtio_balloon_stat {
+ *         __virtio16 tag;
+ *         __u8 reserved[6];
+ *         __virtio64 val;
+ *     };
+ *
+ * In other words, add explicit reserved fields to align field and
+ * structure boundaries at field size, avoiding compiler padding
+ * without the packed attribute.
+ */
+struct virtio_balloon_stat {
+       __virtio16 tag;
+       __virtio64 val;
+} __attribute__((packed));
+
+#endif /* _LINUX_VIRTIO_BALLOON_H */
diff --git a/lib/libdss-include/linux/virtio_blk.h b/lib/libdss-include/linux/virtio_blk.h
new file mode 100644 (file)
index 0000000..c7c60d2
--- /dev/null
@@ -0,0 +1,147 @@
+#ifndef _LINUX_VIRTIO_BLK_H
+#define _LINUX_VIRTIO_BLK_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_types.h>
+
+/* Feature bits */
+#define VIRTIO_BLK_F_SIZE_MAX  1       /* Indicates maximum segment size */
+#define VIRTIO_BLK_F_SEG_MAX   2       /* Indicates maximum # of segments */
+#define VIRTIO_BLK_F_GEOMETRY  4       /* Legacy geometry available  */
+#define VIRTIO_BLK_F_RO                5       /* Disk is read-only */
+#define VIRTIO_BLK_F_BLK_SIZE  6       /* Block size of disk is available*/
+#define VIRTIO_BLK_F_TOPOLOGY  10      /* Topology information is available */
+#define VIRTIO_BLK_F_MQ                12      /* support more than one vq */
+
+/* Legacy feature bits */
+#ifndef VIRTIO_BLK_NO_LEGACY
+#define VIRTIO_BLK_F_BARRIER   0       /* Does host support barriers? */
+#define VIRTIO_BLK_F_SCSI      7       /* Supports scsi command passthru */
+#define VIRTIO_BLK_F_WCE       9       /* Writeback mode enabled after reset */
+#define VIRTIO_BLK_F_CONFIG_WCE        11      /* Writeback mode available in config */
+/* Old (deprecated) name for VIRTIO_BLK_F_WCE. */
+#define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+#define VIRTIO_BLK_ID_BYTES    20      /* ID string length */
+
+struct virtio_blk_config {
+       /* The capacity (in 512-byte sectors). */
+       __u64 capacity;
+       /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
+       __u32 size_max;
+       /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
+       __u32 seg_max;
+       /* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */
+       struct virtio_blk_geometry {
+               __u16 cylinders;
+               __u8 heads;
+               __u8 sectors;
+       } geometry;
+
+       /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
+       __u32 blk_size;
+
+       /* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY  */
+       /* exponent for physical block per logical block. */
+       __u8 physical_block_exp;
+       /* alignment offset in logical blocks. */
+       __u8 alignment_offset;
+       /* minimum I/O size without performance penalty in logical blocks. */
+       __u16 min_io_size;
+       /* optimal sustained I/O size in logical blocks. */
+       __u32 opt_io_size;
+
+       /* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */
+       __u8 wce;
+       __u8 unused;
+
+       /* number of vqs, only available when VIRTIO_BLK_F_MQ is set */
+       __u16 num_queues;
+} __attribute__((packed));
+
+/*
+ * Command types
+ *
+ * Usage is a bit tricky as some bits are used as flags and some are not.
+ *
+ * Rules:
+ *   VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or
+ *   VIRTIO_BLK_T_BARRIER.  VIRTIO_BLK_T_FLUSH is a command of its own
+ *   and may not be combined with any of the other flags.
+ */
+
+/* These two define direction. */
+#define VIRTIO_BLK_T_IN                0
+#define VIRTIO_BLK_T_OUT       1
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* This bit says it's a scsi command, not an actual read or write. */
+#define VIRTIO_BLK_T_SCSI_CMD  2
+#endif /* VIRTIO_BLK_NO_LEGACY */
+
+/* Cache flush command */
+#define VIRTIO_BLK_T_FLUSH     4
+
+/* Get device ID command */
+#define VIRTIO_BLK_T_GET_ID    8
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* Barrier before this op. */
+#define VIRTIO_BLK_T_BARRIER   0x80000000
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/*
+ * This comes first in the read scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated,
+ * this is the first element of the read scatter-gather list.
+ */
+struct virtio_blk_outhdr {
+       /* VIRTIO_BLK_T* */
+       __virtio32 type;
+       /* io priority. */
+       __virtio32 ioprio;
+       /* Sector (ie. 512 byte offset) */
+       __virtio64 sector;
+};
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+struct virtio_scsi_inhdr {
+       __virtio32 errors;
+       __virtio32 data_len;
+       __virtio32 sense_len;
+       __virtio32 residual;
+};
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/* And this is the final byte of the write scatter-gather list. */
+#define VIRTIO_BLK_S_OK                0
+#define VIRTIO_BLK_S_IOERR     1
+#define VIRTIO_BLK_S_UNSUPP    2
+#endif /* _LINUX_VIRTIO_BLK_H */
diff --git a/lib/libdss-include/linux/virtio_config.h b/lib/libdss-include/linux/virtio_config.h
new file mode 100644 (file)
index 0000000..a11101e
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _LINUX_VIRTIO_CONFIG_H
+#define _LINUX_VIRTIO_CONFIG_H
+/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+/* Virtio devices use a standardized configuration space to define their
+ * features and pass configuration information, but each implementation can
+ * store and access that space differently. */
+#include <linux/types.h>
+
+/* Status byte for guest to report progress, and synchronize features. */
+/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE    1
+/* We have found a driver for the device. */
+#define VIRTIO_CONFIG_S_DRIVER         2
+/* Driver has used its parts of the config, and is happy */
+#define VIRTIO_CONFIG_S_DRIVER_OK      4
+/* Driver has finished configuring features */
+#define VIRTIO_CONFIG_S_FEATURES_OK    8
+/* We've given up on this device. */
+#define VIRTIO_CONFIG_S_FAILED         0x80
+
+/* Some virtio feature bits (currently bits 28 through 32) are reserved for the
+ * transport being used (eg. virtio_ring), the rest are per-device feature
+ * bits. */
+#define VIRTIO_TRANSPORT_F_START       28
+#define VIRTIO_TRANSPORT_F_END         33
+
+#ifndef VIRTIO_CONFIG_NO_LEGACY
+/* Do we get callbacks when the ring is completely used, even if we've
+ * suppressed them? */
+#define VIRTIO_F_NOTIFY_ON_EMPTY       24
+
+/* Can the device handle any descriptor layout? */
+#define VIRTIO_F_ANY_LAYOUT            27
+#endif /* VIRTIO_CONFIG_NO_LEGACY */
+
+/* v1.0 compliant. */
+#define VIRTIO_F_VERSION_1             32
+
+#endif /* _LINUX_VIRTIO_CONFIG_H */
diff --git a/lib/libdss-include/linux/virtio_console.h b/lib/libdss-include/linux/virtio_console.h
new file mode 100644 (file)
index 0000000..b0be04f
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers:
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) Red Hat, Inc., 2009, 2010, 2011
+ * Copyright (C) Amit Shah <amit.shah@redhat.com>, 2009, 2010, 2011
+ */
+#ifndef _LINUX_VIRTIO_CONSOLE_H
+#define _LINUX_VIRTIO_CONSOLE_H
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+/* Feature bits */
+#define VIRTIO_CONSOLE_F_SIZE  0       /* Does host provide console size? */
+#define VIRTIO_CONSOLE_F_MULTIPORT 1   /* Does host provide multiple ports? */
+#define VIRTIO_CONSOLE_F_EMERG_WRITE 2 /* Does host support emergency write? */
+
+#define VIRTIO_CONSOLE_BAD_ID          (~(__u32)0)
+
+struct virtio_console_config {
+       /* colums of the screens */
+       __u16 cols;
+       /* rows of the screens */
+       __u16 rows;
+       /* max. number of ports this device can hold */
+       __u32 max_nr_ports;
+       /* emergency write register */
+       __u32 emerg_wr;
+} __attribute__((packed));
+
+/*
+ * A message that's passed between the Host and the Guest for a
+ * particular port.
+ */
+struct virtio_console_control {
+       __virtio32 id;          /* Port number */
+       __virtio16 event;       /* The kind of control event (see below) */
+       __virtio16 value;       /* Extra information for the key */
+};
+
+/* Some events for control messages */
+#define VIRTIO_CONSOLE_DEVICE_READY    0
+#define VIRTIO_CONSOLE_PORT_ADD                1
+#define VIRTIO_CONSOLE_PORT_REMOVE     2
+#define VIRTIO_CONSOLE_PORT_READY      3
+#define VIRTIO_CONSOLE_CONSOLE_PORT    4
+#define VIRTIO_CONSOLE_RESIZE          5
+#define VIRTIO_CONSOLE_PORT_OPEN       6
+#define VIRTIO_CONSOLE_PORT_NAME       7
+
+
+#endif /* _LINUX_VIRTIO_CONSOLE_H */
diff --git a/lib/libdss-include/linux/virtio_gpu.h b/lib/libdss-include/linux/virtio_gpu.h
new file mode 100644 (file)
index 0000000..7a63faa
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Virtio GPU Device
+ *
+ * Copyright Red Hat, Inc. 2013-2014
+ *
+ * Authors:
+ *     Dave Airlie <airlied@redhat.com>
+ *     Gerd Hoffmann <kraxel@redhat.com>
+ *
+ * This header is BSD licensed so anyone can use the definitions
+ * to implement compatible drivers/servers:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef VIRTIO_GPU_HW_H
+#define VIRTIO_GPU_HW_H
+
+#include <linux/types.h>
+
+#define VIRTIO_GPU_F_VIRGL 0
+
+enum virtio_gpu_ctrl_type {
+       VIRTIO_GPU_UNDEFINED = 0,
+
+       /* 2d commands */
+       VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
+       VIRTIO_GPU_CMD_RESOURCE_CREATE_2D,
+       VIRTIO_GPU_CMD_RESOURCE_UNREF,
+       VIRTIO_GPU_CMD_SET_SCANOUT,
+       VIRTIO_GPU_CMD_RESOURCE_FLUSH,
+       VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D,
+       VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING,
+       VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
+       VIRTIO_GPU_CMD_GET_CAPSET_INFO,
+       VIRTIO_GPU_CMD_GET_CAPSET,
+
+       /* 3d commands */
+       VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
+       VIRTIO_GPU_CMD_CTX_DESTROY,
+       VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE,
+       VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE,
+       VIRTIO_GPU_CMD_RESOURCE_CREATE_3D,
+       VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
+       VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
+       VIRTIO_GPU_CMD_SUBMIT_3D,
+
+       /* cursor commands */
+       VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
+       VIRTIO_GPU_CMD_MOVE_CURSOR,
+
+       /* success responses */
+       VIRTIO_GPU_RESP_OK_NODATA = 0x1100,
+       VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
+       VIRTIO_GPU_RESP_OK_CAPSET_INFO,
+       VIRTIO_GPU_RESP_OK_CAPSET,
+
+       /* error responses */
+       VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
+       VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY,
+       VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID,
+       VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER,
+};
+
+#define VIRTIO_GPU_FLAG_FENCE (1 << 0)
+
+struct virtio_gpu_ctrl_hdr {
+       __le32 type;
+       __le32 flags;
+       __le64 fence_id;
+       __le32 ctx_id;
+       __le32 padding;
+};
+
+/* data passed in the cursor vq */
+
+struct virtio_gpu_cursor_pos {
+       __le32 scanout_id;
+       __le32 x;
+       __le32 y;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_UPDATE_CURSOR, VIRTIO_GPU_CMD_MOVE_CURSOR */
+struct virtio_gpu_update_cursor {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_cursor_pos pos;  /* update & move */
+       __le32 resource_id;           /* update only */
+       __le32 hot_x;                 /* update only */
+       __le32 hot_y;                 /* update only */
+       __le32 padding;
+};
+
+/* data passed in the control vq, 2d related */
+
+struct virtio_gpu_rect {
+       __le32 x;
+       __le32 y;
+       __le32 width;
+       __le32 height;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_UNREF */
+struct virtio_gpu_resource_unref {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: create a 2d resource with a format */
+struct virtio_gpu_resource_create_2d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 format;
+       __le32 width;
+       __le32 height;
+};
+
+/* VIRTIO_GPU_CMD_SET_SCANOUT */
+struct virtio_gpu_set_scanout {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le32 scanout_id;
+       __le32 resource_id;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_FLUSH */
+struct virtio_gpu_resource_flush {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: simple transfer to_host */
+struct virtio_gpu_transfer_to_host_2d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_rect r;
+       __le64 offset;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+struct virtio_gpu_mem_entry {
+       __le64 addr;
+       __le32 length;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING */
+struct virtio_gpu_resource_attach_backing {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 nr_entries;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */
+struct virtio_gpu_resource_detach_backing {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_RESP_OK_DISPLAY_INFO */
+#define VIRTIO_GPU_MAX_SCANOUTS 16
+struct virtio_gpu_resp_display_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_display_one {
+               struct virtio_gpu_rect r;
+               __le32 enabled;
+               __le32 flags;
+       } pmodes[VIRTIO_GPU_MAX_SCANOUTS];
+};
+
+/* data passed in the control vq, 3d related */
+
+struct virtio_gpu_box {
+       __le32 x, y, z;
+       __le32 w, h, d;
+};
+
+/* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D */
+struct virtio_gpu_transfer_host_3d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       struct virtio_gpu_box box;
+       __le64 offset;
+       __le32 resource_id;
+       __le32 level;
+       __le32 stride;
+       __le32 layer_stride;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_CREATE_3D */
+#define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0)
+struct virtio_gpu_resource_create_3d {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 target;
+       __le32 format;
+       __le32 bind;
+       __le32 width;
+       __le32 height;
+       __le32 depth;
+       __le32 array_size;
+       __le32 last_level;
+       __le32 nr_samples;
+       __le32 flags;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_CTX_CREATE */
+struct virtio_gpu_ctx_create {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 nlen;
+       __le32 padding;
+       char debug_name[64];
+};
+
+/* VIRTIO_GPU_CMD_CTX_DESTROY */
+struct virtio_gpu_ctx_destroy {
+       struct virtio_gpu_ctrl_hdr hdr;
+};
+
+/* VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE */
+struct virtio_gpu_ctx_resource {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 resource_id;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_SUBMIT_3D */
+struct virtio_gpu_cmd_submit {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 size;
+       __le32 padding;
+};
+
+#define VIRTIO_GPU_CAPSET_VIRGL 1
+
+/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
+struct virtio_gpu_get_capset_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_index;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_RESP_OK_CAPSET_INFO */
+struct virtio_gpu_resp_capset_info {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_id;
+       __le32 capset_max_version;
+       __le32 capset_max_size;
+       __le32 padding;
+};
+
+/* VIRTIO_GPU_CMD_GET_CAPSET */
+struct virtio_gpu_get_capset {
+       struct virtio_gpu_ctrl_hdr hdr;
+       __le32 capset_id;
+       __le32 capset_version;
+};
+
+/* VIRTIO_GPU_RESP_OK_CAPSET */
+struct virtio_gpu_resp_capset {
+       struct virtio_gpu_ctrl_hdr hdr;
+       uint8_t capset_data[];
+};
+
+#define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
+
+struct virtio_gpu_config {
+       __u32 events_read;
+       __u32 events_clear;
+       __u32 num_scanouts;
+       __u32 num_capsets;
+};
+
+/* simple formats for fbcon/X use */
+enum virtio_gpu_formats {
+       VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM  = 1,
+       VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM  = 2,
+       VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM  = 3,
+       VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM  = 4,
+
+       VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM  = 67,
+       VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM  = 68,
+
+       VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM  = 121,
+       VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM  = 134,
+};
+
+#endif
diff --git a/lib/libdss-include/linux/virtio_ids.h b/lib/libdss-include/linux/virtio_ids.h
new file mode 100644 (file)
index 0000000..77925f5
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _LINUX_VIRTIO_IDS_H
+#define _LINUX_VIRTIO_IDS_H
+/*
+ * Virtio IDs
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+#define VIRTIO_ID_NET          1 /* virtio net */
+#define VIRTIO_ID_BLOCK                2 /* virtio block */
+#define VIRTIO_ID_CONSOLE      3 /* virtio console */
+#define VIRTIO_ID_RNG          4 /* virtio rng */
+#define VIRTIO_ID_BALLOON      5 /* virtio balloon */
+#define VIRTIO_ID_RPMSG                7 /* virtio remote processor messaging */
+#define VIRTIO_ID_SCSI         8 /* virtio scsi */
+#define VIRTIO_ID_9P           9 /* 9p virtio console */
+#define VIRTIO_ID_RPROC_SERIAL 11 /* virtio remoteproc serial link */
+#define VIRTIO_ID_CAIF        12 /* Virtio caif */
+#define VIRTIO_ID_GPU          16 /* virtio GPU */
+#define VIRTIO_ID_INPUT        18 /* virtio input */
+
+#endif /* _LINUX_VIRTIO_IDS_H */
diff --git a/lib/libdss-include/linux/virtio_input.h b/lib/libdss-include/linux/virtio_input.h
new file mode 100644 (file)
index 0000000..a7fe5c8
--- /dev/null
@@ -0,0 +1,76 @@
+#ifndef _LINUX_VIRTIO_INPUT_H
+#define _LINUX_VIRTIO_INPUT_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+#include <linux/types.h>
+
+enum virtio_input_config_select {
+       VIRTIO_INPUT_CFG_UNSET      = 0x00,
+       VIRTIO_INPUT_CFG_ID_NAME    = 0x01,
+       VIRTIO_INPUT_CFG_ID_SERIAL  = 0x02,
+       VIRTIO_INPUT_CFG_ID_DEVIDS  = 0x03,
+       VIRTIO_INPUT_CFG_PROP_BITS  = 0x10,
+       VIRTIO_INPUT_CFG_EV_BITS    = 0x11,
+       VIRTIO_INPUT_CFG_ABS_INFO   = 0x12,
+};
+
+struct virtio_input_absinfo {
+       __u32 min;
+       __u32 max;
+       __u32 fuzz;
+       __u32 flat;
+       __u32 res;
+};
+
+struct virtio_input_devids {
+       __u16 bustype;
+       __u16 vendor;
+       __u16 product;
+       __u16 version;
+};
+
+struct virtio_input_config {
+       __u8    select;
+       __u8    subsel;
+       __u8    size;
+       __u8    reserved[5];
+       union {
+               char string[128];
+               __u8 bitmap[128];
+               struct virtio_input_absinfo abs;
+               struct virtio_input_devids ids;
+       } u;
+};
+
+struct virtio_input_event {
+       __le16 type;
+       __le16 code;
+       __le32 value;
+};
+
+#endif /* _LINUX_VIRTIO_INPUT_H */
diff --git a/lib/libdss-include/linux/virtio_net.h b/lib/libdss-include/linux/virtio_net.h
new file mode 100644 (file)
index 0000000..ec32293
--- /dev/null
@@ -0,0 +1,245 @@
+#ifndef _LINUX_VIRTIO_NET_H
+#define _LINUX_VIRTIO_NET_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include <linux/types.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+#include <linux/virtio_types.h>
+#include <linux/if_ether.h>
+
+/* The feature bitmap for virtio net */
+#define VIRTIO_NET_F_CSUM      0       /* Host handles pkts w/ partial csum */
+#define VIRTIO_NET_F_GUEST_CSUM        1       /* Guest handles pkts w/ partial csum */
+#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Dynamic offload configuration. */
+#define VIRTIO_NET_F_MAC       5       /* Host has given MAC address. */
+#define VIRTIO_NET_F_GUEST_TSO4        7       /* Guest can handle TSOv4 in. */
+#define VIRTIO_NET_F_GUEST_TSO6        8       /* Guest can handle TSOv6 in. */
+#define VIRTIO_NET_F_GUEST_ECN 9       /* Guest can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_GUEST_UFO 10      /* Guest can handle UFO in. */
+#define VIRTIO_NET_F_HOST_TSO4 11      /* Host can handle TSOv4 in. */
+#define VIRTIO_NET_F_HOST_TSO6 12      /* Host can handle TSOv6 in. */
+#define VIRTIO_NET_F_HOST_ECN  13      /* Host can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_HOST_UFO  14      /* Host can handle UFO in. */
+#define VIRTIO_NET_F_MRG_RXBUF 15      /* Host can merge receive buffers. */
+#define VIRTIO_NET_F_STATUS    16      /* virtio_net_config.status available */
+#define VIRTIO_NET_F_CTRL_VQ   17      /* Control channel available */
+#define VIRTIO_NET_F_CTRL_RX   18      /* Control channel RX mode support */
+#define VIRTIO_NET_F_CTRL_VLAN 19      /* Control channel VLAN filtering */
+#define VIRTIO_NET_F_CTRL_RX_EXTRA 20  /* Extra RX mode control support */
+#define VIRTIO_NET_F_GUEST_ANNOUNCE 21 /* Guest can announce device on the
+                                        * network */
+#define VIRTIO_NET_F_MQ        22      /* Device supports Receive Flow
+                                        * Steering */
+#define VIRTIO_NET_F_CTRL_MAC_ADDR 23  /* Set MAC address */
+
+#ifndef VIRTIO_NET_NO_LEGACY
+#define VIRTIO_NET_F_GSO       6       /* Host handles pkts w/ any GSO type */
+#endif /* VIRTIO_NET_NO_LEGACY */
+
+#define VIRTIO_NET_S_LINK_UP   1       /* Link is up */
+#define VIRTIO_NET_S_ANNOUNCE  2       /* Announcement is needed */
+
+struct virtio_net_config {
+       /* The config defining mac address (if VIRTIO_NET_F_MAC) */
+       __u8 mac[ETH_ALEN];
+       /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
+       __u16 status;
+       /* Maximum number of each of transmit and receive queues;
+        * see VIRTIO_NET_F_MQ and VIRTIO_NET_CTRL_MQ.
+        * Legal values are between 1 and 0x8000
+        */
+       __u16 max_virtqueue_pairs;
+} __attribute__((packed));
+
+/*
+ * This header comes first in the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header.
+ *
+ * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf,
+ * only flattened.
+ */
+struct virtio_net_hdr_v1 {
+#define VIRTIO_NET_HDR_F_NEEDS_CSUM    1       /* Use csum_start, csum_offset */
+#define VIRTIO_NET_HDR_F_DATA_VALID    2       /* Csum is valid */
+       __u8 flags;
+#define VIRTIO_NET_HDR_GSO_NONE                0       /* Not a GSO frame */
+#define VIRTIO_NET_HDR_GSO_TCPV4       1       /* GSO frame, IPv4 TCP (TSO) */
+#define VIRTIO_NET_HDR_GSO_UDP         3       /* GSO frame, IPv4 UDP (UFO) */
+#define VIRTIO_NET_HDR_GSO_TCPV6       4       /* GSO frame, IPv6 TCP */
+#define VIRTIO_NET_HDR_GSO_ECN         0x80    /* TCP has ECN set */
+       __u8 gso_type;
+       __virtio16 hdr_len;     /* Ethernet + IP + tcp/udp hdrs */
+       __virtio16 gso_size;    /* Bytes to append to hdr_len per frame */
+       __virtio16 csum_start;  /* Position to start checksumming from */
+       __virtio16 csum_offset; /* Offset after that to place checksum */
+       __virtio16 num_buffers; /* Number of merged rx buffers */
+};
+
+#ifndef VIRTIO_NET_NO_LEGACY
+/* This header comes first in the scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
+ * be the first element of the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header. */
+struct virtio_net_hdr {
+       /* See VIRTIO_NET_HDR_F_* */
+       __u8 flags;
+       /* See VIRTIO_NET_HDR_GSO_* */
+       __u8 gso_type;
+       __virtio16 hdr_len;             /* Ethernet + IP + tcp/udp hdrs */
+       __virtio16 gso_size;            /* Bytes to append to hdr_len per frame */
+       __virtio16 csum_start;  /* Position to start checksumming from */
+       __virtio16 csum_offset; /* Offset after that to place checksum */
+};
+
+/* This is the version of the header to use when the MRG_RXBUF
+ * feature has been negotiated. */
+struct virtio_net_hdr_mrg_rxbuf {
+       struct virtio_net_hdr hdr;
+       __virtio16 num_buffers; /* Number of merged rx buffers */
+};
+#endif /* ...VIRTIO_NET_NO_LEGACY */
+
+/*
+ * Control virtqueue data structures
+ *
+ * The control virtqueue expects a header in the first sg entry
+ * and an ack/status response in the last entry.  Data for the
+ * command goes in between.
+ */
+struct virtio_net_ctrl_hdr {
+       __u8 class;
+       __u8 cmd;
+} __attribute__((packed));
+
+typedef __u8 virtio_net_ctrl_ack;
+
+#define VIRTIO_NET_OK     0
+#define VIRTIO_NET_ERR    1
+
+/*
+ * Control the RX mode, ie. promisucous, allmulti, etc...
+ * All commands require an "out" sg entry containing a 1 byte
+ * state value, zero = disable, non-zero = enable.  Commands
+ * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
+ * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
+ */
+#define VIRTIO_NET_CTRL_RX    0
+ #define VIRTIO_NET_CTRL_RX_PROMISC      0
+ #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
+ #define VIRTIO_NET_CTRL_RX_ALLUNI       2
+ #define VIRTIO_NET_CTRL_RX_NOMULTI      3
+ #define VIRTIO_NET_CTRL_RX_NOUNI        4
+ #define VIRTIO_NET_CTRL_RX_NOBCAST      5
+
+/*
+ * Control the MAC
+ *
+ * The MAC filter table is managed by the hypervisor, the guest should
+ * assume the size is infinite.  Filtering should be considered
+ * non-perfect, ie. based on hypervisor resources, the guest may
+ * received packets from sources not specified in the filter list.
+ *
+ * In addition to the class/cmd header, the TABLE_SET command requires
+ * two out scatterlists.  Each contains a 4 byte count of entries followed
+ * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
+ * first sg list contains unicast addresses, the second is for multicast.
+ * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
+ * is available.
+ *
+ * The ADDR_SET command requests one out scatterlist, it contains a
+ * 6 bytes MAC address. This functionality is present if the
+ * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
+ */
+struct virtio_net_ctrl_mac {
+       __virtio32 entries;
+       __u8 macs[][ETH_ALEN];
+} __attribute__((packed));
+
+#define VIRTIO_NET_CTRL_MAC    1
+ #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
+ #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+
+/*
+ * Control VLAN filtering
+ *
+ * The VLAN filter table is controlled via a simple ADD/DEL interface.
+ * VLAN IDs not added may be filterd by the hypervisor.  Del is the
+ * opposite of add.  Both commands expect an out entry containing a 2
+ * byte VLAN ID.  VLAN filterting is available with the
+ * VIRTIO_NET_F_CTRL_VLAN feature bit.
+ */
+#define VIRTIO_NET_CTRL_VLAN       2
+ #define VIRTIO_NET_CTRL_VLAN_ADD             0
+ #define VIRTIO_NET_CTRL_VLAN_DEL             1
+
+/*
+ * Control link announce acknowledgement
+ *
+ * The command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that
+ * driver has recevied the notification; device would clear the
+ * VIRTIO_NET_S_ANNOUNCE bit in the status field after it receives
+ * this command.
+ */
+#define VIRTIO_NET_CTRL_ANNOUNCE       3
+ #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
+
+/*
+ * Control Receive Flow Steering
+ *
+ * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
+ * enables Receive Flow Steering, specifying the number of the transmit and
+ * receive queues that will be used. After the command is consumed and acked by
+ * the device, the device will not steer new packets on receive virtqueues
+ * other than specified nor read from transmit virtqueues other than specified.
+ * Accordingly, driver should not transmit new packets  on virtqueues other than
+ * specified.
+ */
+struct virtio_net_ctrl_mq {
+       __virtio16 virtqueue_pairs;
+};
+
+#define VIRTIO_NET_CTRL_MQ   4
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
+
+/*
+ * Control network offloads
+ *
+ * Reconfigures the network offloads that Guest can handle.
+ *
+ * Available with the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS feature bit.
+ *
+ * Command data format matches the feature bit mask exactly.
+ *
+ * See VIRTIO_NET_F_GUEST_* for the list of offloads
+ * that can be enabled/disabled.
+ */
+#define VIRTIO_NET_CTRL_GUEST_OFFLOADS   5
+#define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET        0
+
+#endif /* _LINUX_VIRTIO_NET_H */
diff --git a/lib/libdss-include/linux/virtio_pci.h b/lib/libdss-include/linux/virtio_pci.h
new file mode 100644 (file)
index 0000000..90007a1
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * Virtio PCI driver
+ *
+ * This module allows virtio devices to be used over a virtual PCI device.
+ * This can be used with QEMU based VMMs like KVM or Xen.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors:
+ *  Anthony Liguori  <aliguori@us.ibm.com>
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_PCI_H
+#define _LINUX_VIRTIO_PCI_H
+
+#include <linux/types.h>
+
+#ifndef VIRTIO_PCI_NO_LEGACY
+
+/* A 32-bit r/o bitmask of the features supported by the host */
+#define VIRTIO_PCI_HOST_FEATURES       0
+
+/* A 32-bit r/w bitmask of features activated by the guest */
+#define VIRTIO_PCI_GUEST_FEATURES      4
+
+/* A 32-bit r/w PFN for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_PFN           8
+
+/* A 16-bit r/o queue size for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_NUM           12
+
+/* A 16-bit r/w queue selector */
+#define VIRTIO_PCI_QUEUE_SEL           14
+
+/* A 16-bit r/w queue notifier */
+#define VIRTIO_PCI_QUEUE_NOTIFY                16
+
+/* An 8-bit device status register.  */
+#define VIRTIO_PCI_STATUS              18
+
+/* An 8-bit r/o interrupt status register.  Reading the value will return the
+ * current contents of the ISR and will also clear it.  This is effectively
+ * a read-and-acknowledge. */
+#define VIRTIO_PCI_ISR                 19
+
+/* MSI-X registers: only enabled if MSI-X is enabled. */
+/* A 16-bit vector for configuration changes. */
+#define VIRTIO_MSI_CONFIG_VECTOR        20
+/* A 16-bit vector for selected queue notifications. */
+#define VIRTIO_MSI_QUEUE_VECTOR         22
+
+/* The remaining space is defined by each driver as the per-driver
+ * configuration space */
+#define VIRTIO_PCI_CONFIG_OFF(msix_enabled)    ((msix_enabled) ? 24 : 20)
+/* Deprecated: please use VIRTIO_PCI_CONFIG_OFF instead */
+#define VIRTIO_PCI_CONFIG(dev) VIRTIO_PCI_CONFIG_OFF((dev)->msix_enabled)
+
+/* Virtio ABI version, this must match exactly */
+#define VIRTIO_PCI_ABI_VERSION         0
+
+/* How many bits to shift physical queue address written to QUEUE_PFN.
+ * 12 is historical, and due to x86 page size. */
+#define VIRTIO_PCI_QUEUE_ADDR_SHIFT    12
+
+/* The alignment to use between consumer and producer parts of vring.
+ * x86 pagesize again. */
+#define VIRTIO_PCI_VRING_ALIGN         4096
+
+#endif /* VIRTIO_PCI_NO_LEGACY */
+
+/* The bit of the ISR which indicates a device configuration change. */
+#define VIRTIO_PCI_ISR_CONFIG          0x2
+/* Vector value used to disable MSI for queue */
+#define VIRTIO_MSI_NO_VECTOR            0xffff
+
+#ifndef VIRTIO_PCI_NO_MODERN
+
+/* IDs for different capabilities.  Must all exist. */
+
+/* Common configuration */
+#define VIRTIO_PCI_CAP_COMMON_CFG      1
+/* Notifications */
+#define VIRTIO_PCI_CAP_NOTIFY_CFG      2
+/* ISR access */
+#define VIRTIO_PCI_CAP_ISR_CFG         3
+/* Device specific configuration */
+#define VIRTIO_PCI_CAP_DEVICE_CFG      4
+/* PCI configuration access */
+#define VIRTIO_PCI_CAP_PCI_CFG         5
+
+/* This is the PCI capability header: */
+struct virtio_pci_cap {
+       __u8 cap_vndr;          /* Generic PCI field: PCI_CAP_ID_VNDR */
+       __u8 cap_next;          /* Generic PCI field: next ptr. */
+       __u8 cap_len;           /* Generic PCI field: capability length */
+       __u8 cfg_type;          /* Identifies the structure. */
+       __u8 bar;               /* Where to find it. */
+       __u8 padding[3];        /* Pad to full dword. */
+       __le32 offset;          /* Offset within bar. */
+       __le32 length;          /* Length of the structure, in bytes. */
+};
+
+struct virtio_pci_notify_cap {
+       struct virtio_pci_cap cap;
+       __le32 notify_off_multiplier;   /* Multiplier for queue_notify_off. */
+};
+
+/* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */
+struct virtio_pci_common_cfg {
+       /* About the whole device. */
+       __le32 device_feature_select;   /* read-write */
+       __le32 device_feature;          /* read-only */
+       __le32 guest_feature_select;    /* read-write */
+       __le32 guest_feature;           /* read-write */
+       __le16 msix_config;             /* read-write */
+       __le16 num_queues;              /* read-only */
+       __u8 device_status;             /* read-write */
+       __u8 config_generation;         /* read-only */
+
+       /* About a specific virtqueue. */
+       __le16 queue_select;            /* read-write */
+       __le16 queue_size;              /* read-write, power of 2. */
+       __le16 queue_msix_vector;       /* read-write */
+       __le16 queue_enable;            /* read-write */
+       __le16 queue_notify_off;        /* read-only */
+       __le32 queue_desc_lo;           /* read-write */
+       __le32 queue_desc_hi;           /* read-write */
+       __le32 queue_avail_lo;          /* read-write */
+       __le32 queue_avail_hi;          /* read-write */
+       __le32 queue_used_lo;           /* read-write */
+       __le32 queue_used_hi;           /* read-write */
+};
+
+/* Fields in VIRTIO_PCI_CAP_PCI_CFG: */
+struct virtio_pci_cfg_cap {
+       struct virtio_pci_cap cap;
+       __u8 pci_cfg_data[4]; /* Data for BAR access. */
+};
+
+/* Macro versions of offsets for the Old Timers! */
+#define VIRTIO_PCI_CAP_VNDR            0
+#define VIRTIO_PCI_CAP_NEXT            1
+#define VIRTIO_PCI_CAP_LEN             2
+#define VIRTIO_PCI_CAP_CFG_TYPE                3
+#define VIRTIO_PCI_CAP_BAR             4
+#define VIRTIO_PCI_CAP_OFFSET          8
+#define VIRTIO_PCI_CAP_LENGTH          12
+
+#define VIRTIO_PCI_NOTIFY_CAP_MULT     16
+
+#define VIRTIO_PCI_COMMON_DFSELECT     0
+#define VIRTIO_PCI_COMMON_DF           4
+#define VIRTIO_PCI_COMMON_GFSELECT     8
+#define VIRTIO_PCI_COMMON_GF           12
+#define VIRTIO_PCI_COMMON_MSIX         16
+#define VIRTIO_PCI_COMMON_NUMQ         18
+#define VIRTIO_PCI_COMMON_STATUS       20
+#define VIRTIO_PCI_COMMON_CFGGENERATION        21
+#define VIRTIO_PCI_COMMON_Q_SELECT     22
+#define VIRTIO_PCI_COMMON_Q_SIZE       24
+#define VIRTIO_PCI_COMMON_Q_MSIX       26
+#define VIRTIO_PCI_COMMON_Q_ENABLE     28
+#define VIRTIO_PCI_COMMON_Q_NOFF       30
+#define VIRTIO_PCI_COMMON_Q_DESCLO     32
+#define VIRTIO_PCI_COMMON_Q_DESCHI     36
+#define VIRTIO_PCI_COMMON_Q_AVAILLO    40
+#define VIRTIO_PCI_COMMON_Q_AVAILHI    44
+#define VIRTIO_PCI_COMMON_Q_USEDLO     48
+#define VIRTIO_PCI_COMMON_Q_USEDHI     52
+
+#endif /* VIRTIO_PCI_NO_MODERN */
+
+#endif
diff --git a/lib/libdss-include/linux/virtio_ring.h b/lib/libdss-include/linux/virtio_ring.h
new file mode 100644 (file)
index 0000000..4bdc90c
--- /dev/null
@@ -0,0 +1,172 @@
+#ifndef _LINUX_VIRTIO_RING_H
+#define _LINUX_VIRTIO_RING_H
+/* An interface for efficient virtio implementation, currently for use by KVM
+ * and lguest, but hopefully others soon.  Do NOT change this since it will
+ * break existing servers and clients.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright Rusty Russell IBM Corporation 2007. */
+#include <stdint.h>
+#include <linux/types.h>
+#include <linux/virtio_types.h>
+
+/* This marks a buffer as continuing via the next field. */
+#define VRING_DESC_F_NEXT      1
+/* This marks a buffer as write-only (otherwise read-only). */
+#define VRING_DESC_F_WRITE     2
+/* This means the buffer contains a list of buffer descriptors. */
+#define VRING_DESC_F_INDIRECT  4
+
+/* The Host uses this in used->flags to advise the Guest: don't kick me when
+ * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest
+ * will still kick if it's out of buffers. */
+#define VRING_USED_F_NO_NOTIFY 1
+/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
+ * when you consume a buffer.  It's unreliable, so it's simply an
+ * optimization.  */
+#define VRING_AVAIL_F_NO_INTERRUPT     1
+
+/* We support indirect buffer descriptors */
+#define VIRTIO_RING_F_INDIRECT_DESC    28
+
+/* The Guest publishes the used index for which it expects an interrupt
+ * at the end of the avail ring. Host should ignore the avail->flags field. */
+/* The Host publishes the avail index for which it expects a kick
+ * at the end of the used ring. Guest should ignore the used->flags field. */
+#define VIRTIO_RING_F_EVENT_IDX                29
+
+/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */
+struct vring_desc {
+       /* Address (guest-physical). */
+       __virtio64 addr;
+       /* Length. */
+       __virtio32 len;
+       /* The flags as indicated above. */
+       __virtio16 flags;
+       /* We chain unused descriptors via this, too */
+       __virtio16 next;
+};
+
+struct vring_avail {
+       __virtio16 flags;
+       __virtio16 idx;
+       __virtio16 ring[];
+};
+
+/* u32 is used here for ids for padding reasons. */
+struct vring_used_elem {
+       /* Index of start of used descriptor chain. */
+       __virtio32 id;
+       /* Total length of the descriptor chain which was used (written to) */
+       __virtio32 len;
+};
+
+struct vring_used {
+       __virtio16 flags;
+       __virtio16 idx;
+       struct vring_used_elem ring[];
+};
+
+struct vring {
+       unsigned int num;
+
+       struct vring_desc *desc;
+
+       struct vring_avail *avail;
+
+       struct vring_used *used;
+};
+
+/* Alignment requirements for vring elements.
+ * When using pre-virtio 1.0 layout, these fall out naturally.
+ */
+#define VRING_AVAIL_ALIGN_SIZE 2
+#define VRING_USED_ALIGN_SIZE 4
+#define VRING_DESC_ALIGN_SIZE 16
+
+/* The standard layout for the ring is a continuous chunk of memory which looks
+ * like this.  We assume num is a power of 2.
+ *
+ * struct vring
+ * {
+ *     // The actual descriptors (16 bytes each)
+ *     struct vring_desc desc[num];
+ *
+ *     // A ring of available descriptor heads with free-running index.
+ *     __virtio16 avail_flags;
+ *     __virtio16 avail_idx;
+ *     __virtio16 available[num];
+ *     __virtio16 used_event_idx;
+ *
+ *     // Padding to the next align boundary.
+ *     char pad[];
+ *
+ *     // A ring of used descriptor heads with free-running index.
+ *     __virtio16 used_flags;
+ *     __virtio16 used_idx;
+ *     struct vring_used_elem used[num];
+ *     __virtio16 avail_event_idx;
+ * };
+ */
+/* We publish the used event index at the end of the available ring, and vice
+ * versa. They are at the end for backwards compatibility. */
+#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
+#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num])
+
+static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p,
+                             unsigned long align)
+{
+       vr->num = num;
+       vr->desc = p;
+       vr->avail = p + num*sizeof(struct vring_desc);
+       vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
+               + align-1) & ~(align - 1));
+}
+
+static __inline__ unsigned vring_size(unsigned int num, unsigned long align)
+{
+       return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num)
+                + align - 1) & ~(align - 1))
+               + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num;
+}
+
+/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
+/* Assuming a given event_idx value from the other side, if
+ * we have just incremented index from old to new_idx,
+ * should we trigger an event? */
+static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)
+{
+       /* Note: Xen has similar logic for notification hold-off
+        * in include/xen/interface/io/ring.h with req_event and req_prod
+        * corresponding to event_idx + 1 and new_idx respectively.
+        * Note also that req_event and req_prod in Xen start at 1,
+        * event indexes in virtio start at 0. */
+       return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);
+}
+
+#endif /* _LINUX_VIRTIO_RING_H */
diff --git a/lib/libdss-include/linux/virtio_rng.h b/lib/libdss-include/linux/virtio_rng.h
new file mode 100644 (file)
index 0000000..c4d5de8
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _LINUX_VIRTIO_RNG_H
+#define _LINUX_VIRTIO_RNG_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers. */
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
+
+#endif /* _LINUX_VIRTIO_RNG_H */
diff --git a/lib/libdss-include/linux/virtio_scsi.h b/lib/libdss-include/linux/virtio_scsi.h
new file mode 100644 (file)
index 0000000..cc18ef8
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_SCSI_H
+#define _LINUX_VIRTIO_SCSI_H
+
+#include <linux/virtio_types.h>
+
+/* Default values of the CDB and sense data size configuration fields */
+#define VIRTIO_SCSI_CDB_DEFAULT_SIZE   32
+#define VIRTIO_SCSI_SENSE_DEFAULT_SIZE 96
+
+#ifndef VIRTIO_SCSI_CDB_SIZE
+#define VIRTIO_SCSI_CDB_SIZE VIRTIO_SCSI_CDB_DEFAULT_SIZE
+#endif
+#ifndef VIRTIO_SCSI_SENSE_SIZE
+#define VIRTIO_SCSI_SENSE_SIZE VIRTIO_SCSI_SENSE_DEFAULT_SIZE
+#endif
+
+/* SCSI command request, followed by data-out */
+struct virtio_scsi_cmd_req {
+       __u8 lun[8];            /* Logical Unit Number */
+       __virtio64 tag;         /* Command identifier */
+       __u8 task_attr;         /* Task attribute */
+       __u8 prio;              /* SAM command priority field */
+       __u8 crn;
+       __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
+} __attribute__((packed));
+
+/* SCSI command request, followed by protection information */
+struct virtio_scsi_cmd_req_pi {
+       __u8 lun[8];            /* Logical Unit Number */
+       __virtio64 tag;         /* Command identifier */
+       __u8 task_attr;         /* Task attribute */
+       __u8 prio;              /* SAM command priority field */
+       __u8 crn;
+       __virtio32 pi_bytesout; /* DataOUT PI Number of bytes */
+       __virtio32 pi_bytesin;          /* DataIN PI Number of bytes */
+       __u8 cdb[VIRTIO_SCSI_CDB_SIZE];
+} __attribute__((packed));
+
+/* Response, followed by sense data and data-in */
+struct virtio_scsi_cmd_resp {
+       __virtio32 sense_len;           /* Sense data length */
+       __virtio32 resid;               /* Residual bytes in data buffer */
+       __virtio16 status_qualifier;    /* Status qualifier */
+       __u8 status;            /* Command completion status */
+       __u8 response;          /* Response values */
+       __u8 sense[VIRTIO_SCSI_SENSE_SIZE];
+} __attribute__((packed));
+
+/* Task Management Request */
+struct virtio_scsi_ctrl_tmf_req {
+       __virtio32 type;
+       __virtio32 subtype;
+       __u8 lun[8];
+       __virtio64 tag;
+} __attribute__((packed));
+
+struct virtio_scsi_ctrl_tmf_resp {
+       __u8 response;
+} __attribute__((packed));
+
+/* Asynchronous notification query/subscription */
+struct virtio_scsi_ctrl_an_req {
+       __virtio32 type;
+       __u8 lun[8];
+       __virtio32 event_requested;
+} __attribute__((packed));
+
+struct virtio_scsi_ctrl_an_resp {
+       __virtio32 event_actual;
+       __u8 response;
+} __attribute__((packed));
+
+struct virtio_scsi_event {
+       __virtio32 event;
+       __u8 lun[8];
+       __virtio32 reason;
+} __attribute__((packed));
+
+struct virtio_scsi_config {
+       __u32 num_queues;
+       __u32 seg_max;
+       __u32 max_sectors;
+       __u32 cmd_per_lun;
+       __u32 event_info_size;
+       __u32 sense_size;
+       __u32 cdb_size;
+       __u16 max_channel;
+       __u16 max_target;
+       __u32 max_lun;
+} __attribute__((packed));
+
+/* Feature Bits */
+#define VIRTIO_SCSI_F_INOUT                    0
+#define VIRTIO_SCSI_F_HOTPLUG                  1
+#define VIRTIO_SCSI_F_CHANGE                   2
+#define VIRTIO_SCSI_F_T10_PI                   3
+
+/* Response codes */
+#define VIRTIO_SCSI_S_OK                       0
+#define VIRTIO_SCSI_S_OVERRUN                  1
+#define VIRTIO_SCSI_S_ABORTED                  2
+#define VIRTIO_SCSI_S_BAD_TARGET               3
+#define VIRTIO_SCSI_S_RESET                    4
+#define VIRTIO_SCSI_S_BUSY                     5
+#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
+#define VIRTIO_SCSI_S_TARGET_FAILURE           7
+#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
+#define VIRTIO_SCSI_S_FAILURE                  9
+#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
+#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
+#define VIRTIO_SCSI_S_INCORRECT_LUN            12
+
+/* Controlq type codes.  */
+#define VIRTIO_SCSI_T_TMF                      0
+#define VIRTIO_SCSI_T_AN_QUERY                 1
+#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
+
+/* Valid TMF subtypes.  */
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
+#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
+#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
+#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
+#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
+
+/* Events.  */
+#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
+#define VIRTIO_SCSI_T_NO_EVENT                 0
+#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
+#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
+#define VIRTIO_SCSI_T_PARAM_CHANGE             3
+
+/* Reasons of transport reset event */
+#define VIRTIO_SCSI_EVT_RESET_HARD             0
+#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
+#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
+
+#define VIRTIO_SCSI_S_SIMPLE                   0
+#define VIRTIO_SCSI_S_ORDERED                  1
+#define VIRTIO_SCSI_S_HEAD                     2
+#define VIRTIO_SCSI_S_ACA                      3
+
+
+#endif /* _LINUX_VIRTIO_SCSI_H */
diff --git a/lib/libdss-include/linux/virtio_types.h b/lib/libdss-include/linux/virtio_types.h
new file mode 100644 (file)
index 0000000..6162bdf
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _LINUX_VIRTIO_TYPES_H
+#define _LINUX_VIRTIO_TYPES_H
+/* Type definitions for virtio implementations.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ */
+#include <linux/types.h>
+
+/*
+ * __virtio{16,32,64} have the following meaning:
+ * - __u{16,32,64} for virtio devices in legacy mode, accessed in native endian
+ * - __le{16,32,64} for standard-compliant virtio devices
+ */
+
+typedef __u16 __bitwise__ __virtio16;
+typedef __u32 __bitwise__ __virtio32;
+typedef __u64 __bitwise__ __virtio64;
+
+#endif /* _LINUX_VIRTIO_TYPES_H */
diff --git a/lib/libdss-include/linux/vm_sockets.h b/lib/libdss-include/linux/vm_sockets.h
new file mode 100644 (file)
index 0000000..5216014
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * VMware vSockets Driver
+ *
+ * Copyright (C) 2007-2013 VMware, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation version 2 and no later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#ifndef _VM_SOCKETS_H
+#define _VM_SOCKETS_H
+
+#include <linux/socket.h>
+
+/* Option name for STREAM socket buffer size.  Use as the option name in
+ * setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
+ * specifies the size of the buffer underlying a vSockets STREAM socket.
+ * Value is clamped to the MIN and MAX.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_SIZE 0
+
+/* Option name for STREAM socket minimum buffer size.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
+ * specifies the minimum size allowed for the buffer underlying a vSockets
+ * STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_MIN_SIZE 1
+
+/* Option name for STREAM socket maximum buffer size.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get an unsigned long long
+ * that specifies the maximum size allowed for the buffer underlying a
+ * vSockets STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_BUFFER_MAX_SIZE 2
+
+/* Option name for socket peer's host-specific VM ID.  Use as the option name
+ * in getsockopt(3) to get a host-specific identifier for the peer endpoint's
+ * VM.  The identifier is a signed integer.
+ * Only available for hypervisor endpoints.
+ */
+
+#define SO_VM_SOCKETS_PEER_HOST_VM_ID 3
+
+/* Option name for determining if a socket is trusted.  Use as the option name
+ * in getsockopt(3) to determine if a socket is trusted.  The value is a
+ * signed integer.
+ */
+
+#define SO_VM_SOCKETS_TRUSTED 5
+
+/* Option name for STREAM socket connection timeout.  Use as the option name
+ * in setsockopt(3) or getsockopt(3) to set or get the connection
+ * timeout for a STREAM socket.
+ */
+
+#define SO_VM_SOCKETS_CONNECT_TIMEOUT 6
+
+/* Option name for using non-blocking send/receive.  Use as the option name
+ * for setsockopt(3) or getsockopt(3) to set or get the non-blocking
+ * transmit/receive flag for a STREAM socket.  This flag determines whether
+ * send() and recv() can be called in non-blocking contexts for the given
+ * socket.  The value is a signed integer.
+ *
+ * This option is only relevant to kernel endpoints, where descheduling the
+ * thread of execution is not allowed, for example, while holding a spinlock.
+ * It is not to be confused with conventional non-blocking socket operations.
+ *
+ * Only available for hypervisor endpoints.
+ */
+
+#define SO_VM_SOCKETS_NONBLOCK_TXRX 7
+
+/* The vSocket equivalent of INADDR_ANY.  This works for the svm_cid field of
+ * sockaddr_vm and indicates the context ID of the current endpoint.
+ */
+
+#define VMADDR_CID_ANY -1U
+
+/* Bind to any available port.  Works for the svm_port field of
+ * sockaddr_vm.
+ */
+
+#define VMADDR_PORT_ANY -1U
+
+/* Use this as the destination CID in an address when referring to the
+ * hypervisor.  VMCI relies on it being 0, but this would be useful for other
+ * transports too.
+ */
+
+#define VMADDR_CID_HYPERVISOR 0
+
+/* This CID is specific to VMCI and can be considered reserved (even VMCI
+ * doesn't use it anymore, it's a legacy value from an older release).
+ */
+
+#define VMADDR_CID_RESERVED 1
+
+/* Use this as the destination CID in an address when referring to the host
+ * (any process other than the hypervisor).  VMCI relies on it being 2, but
+ * this would be useful for other transports too.
+ */
+
+#define VMADDR_CID_HOST 2
+
+/* Invalid vSockets version. */
+
+#define VM_SOCKETS_INVALID_VERSION -1U
+
+/* The epoch (first) component of the vSockets version.  A single byte
+ * representing the epoch component of the vSockets version.
+ */
+
+#define VM_SOCKETS_VERSION_EPOCH(_v) (((_v) & 0xFF000000) >> 24)
+
+/* The major (second) component of the vSockets version.   A single byte
+ * representing the major component of the vSockets version.  Typically
+ * changes for every major release of a product.
+ */
+
+#define VM_SOCKETS_VERSION_MAJOR(_v) (((_v) & 0x00FF0000) >> 16)
+
+/* The minor (third) component of the vSockets version.  Two bytes representing
+ * the minor component of the vSockets version.
+ */
+
+#define VM_SOCKETS_VERSION_MINOR(_v) (((_v) & 0x0000FFFF))
+
+/* Address structure for vSockets.   The address family should be set to
+ * AF_VSOCK.  The structure members should all align on their natural
+ * boundaries without resorting to compiler packing directives.  The total size
+ * of this structure should be exactly the same as that of struct sockaddr.
+ */
+
+struct sockaddr_vm {
+       __kernel_sa_family_t svm_family;
+       unsigned short svm_reserved1;
+       unsigned int svm_port;
+       unsigned int svm_cid;
+       unsigned char svm_zero[sizeof(struct sockaddr) -
+                              sizeof(sa_family_t) -
+                              sizeof(unsigned short) -
+                              sizeof(unsigned int) - sizeof(unsigned int)];
+};
+
+#define IOCTL_VM_SOCKETS_GET_LOCAL_CID         _IO(7, 0xb9)
+
+#endif /* _VM_SOCKETS_H */
diff --git a/lib/libdss-include/linux/vt.h b/lib/libdss-include/linux/vt.h
new file mode 100644 (file)
index 0000000..7ffa11f
--- /dev/null
@@ -0,0 +1,87 @@
+#ifndef _LINUX_VT_H
+#define _LINUX_VT_H
+
+
+/*
+ * These constants are also useful for user-level apps (e.g., VC
+ * resizing).
+ */
+#define MIN_NR_CONSOLES 1       /* must be at least 1 */
+#define MAX_NR_CONSOLES        63      /* serial lines start at 64 */
+#define MAX_NR_USER_CONSOLES 63        /* must be root to allocate above this */
+               /* Note: the ioctl VT_GETSTATE does not work for
+                  consoles 16 and higher (since it returns a short) */
+
+/* 0x56 is 'V', to avoid collision with termios and kd */
+
+#define VT_OPENQRY     0x5600  /* find available vt */
+
+struct vt_mode {
+       char mode;              /* vt mode */
+       char waitv;             /* if set, hang on writes if not active */
+       short relsig;           /* signal to raise on release req */
+       short acqsig;           /* signal to raise on acquisition */
+       short frsig;            /* unused (set to 0) */
+};
+#define VT_GETMODE     0x5601  /* get mode of active vt */
+#define VT_SETMODE     0x5602  /* set mode of active vt */
+#define                VT_AUTO         0x00    /* auto vt switching */
+#define                VT_PROCESS      0x01    /* process controls switching */
+#define                VT_ACKACQ       0x02    /* acknowledge switch */
+
+struct vt_stat {
+       unsigned short v_active;        /* active vt */
+       unsigned short v_signal;        /* signal to send */
+       unsigned short v_state;         /* vt bitmask */
+};
+#define VT_GETSTATE    0x5603  /* get global vt state info */
+#define VT_SENDSIG     0x5604  /* signal to send to bitmask of vts */
+
+#define VT_RELDISP     0x5605  /* release display */
+
+#define VT_ACTIVATE    0x5606  /* make vt active */
+#define VT_WAITACTIVE  0x5607  /* wait for vt active */
+#define VT_DISALLOCATE 0x5608  /* free memory associated to vt */
+
+struct vt_sizes {
+       unsigned short v_rows;          /* number of rows */
+       unsigned short v_cols;          /* number of columns */
+       unsigned short v_scrollsize;    /* number of lines of scrollback */
+};
+#define VT_RESIZE      0x5609  /* set kernel's idea of screensize */
+
+struct vt_consize {
+       unsigned short v_rows;  /* number of rows */
+       unsigned short v_cols;  /* number of columns */
+       unsigned short v_vlin;  /* number of pixel rows on screen */
+       unsigned short v_clin;  /* number of pixel rows per character */
+       unsigned short v_vcol;  /* number of pixel columns on screen */
+       unsigned short v_ccol;  /* number of pixel columns per character */
+};
+#define VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */
+#define VT_LOCKSWITCH   0x560B  /* disallow vt switching */
+#define VT_UNLOCKSWITCH 0x560C  /* allow vt switching */
+#define VT_GETHIFONTMASK 0x560D  /* return hi font mask */
+
+struct vt_event {
+       unsigned int event;
+#define VT_EVENT_SWITCH                0x0001  /* Console switch */
+#define VT_EVENT_BLANK         0x0002  /* Screen blank */
+#define VT_EVENT_UNBLANK       0x0004  /* Screen unblank */
+#define VT_EVENT_RESIZE                0x0008  /* Resize display */
+#define VT_MAX_EVENT           0x000F
+       unsigned int oldev;             /* Old console */
+       unsigned int newev;             /* New console (if changing) */
+       unsigned int pad[4];            /* Padding for expansion */
+};
+
+#define VT_WAITEVENT   0x560E  /* Wait for an event */
+
+struct vt_setactivate {
+       unsigned int console;
+       struct vt_mode mode;
+};
+
+#define VT_SETACTIVATE 0x560F  /* Activate and set the mode of a console */
+
+#endif /* _LINUX_VT_H */
diff --git a/lib/libdss-include/linux/wait.h b/lib/libdss-include/linux/wait.h
new file mode 100644 (file)
index 0000000..bb88233
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _LINUX_WAIT_H
+#define _LINUX_WAIT_H
+
+#define WNOHANG                0x00000001
+#define WUNTRACED      0x00000002
+#define WSTOPPED       WUNTRACED
+#define WEXITED                0x00000004
+#define WCONTINUED     0x00000008
+#define WNOWAIT                0x01000000      /* Don't reap, just poll status.  */
+
+#define __WNOTHREAD    0x20000000      /* Don't wait on children of other threads in this group */
+#define __WALL         0x40000000      /* Wait on all children, regardless of type */
+#define __WCLONE       0x80000000      /* Wait only on non-SIGCHLD children */
+
+/* First argument to waitid: */
+#define P_ALL          0
+#define P_PID          1
+#define P_PGID         2
+
+
+#endif /* _LINUX_WAIT_H */
diff --git a/lib/libdss-include/linux/wanrouter.h b/lib/libdss-include/linux/wanrouter.h
new file mode 100644 (file)
index 0000000..cc61950
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * wanrouter.h Legacy declarations kept around until X25 is removed
+ */
+
+#ifndef _ROUTER_H
+#define _ROUTER_H
+
+/* 'state' defines */
+enum wan_states
+{
+       WAN_UNCONFIGURED,       /* link/channel is not configured */
+       WAN_DISCONNECTED,       /* link/channel is disconnected */
+       WAN_CONNECTING,         /* connection is in progress */
+       WAN_CONNECTED           /* link/channel is operational */
+};
+
+#endif /* _ROUTER_H */
diff --git a/lib/libdss-include/linux/watchdog.h b/lib/libdss-include/linux/watchdog.h
new file mode 100644 (file)
index 0000000..a89ed11
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ *     Generic watchdog defines. Derived from..
+ *
+ * Berkshire PC Watchdog Defines
+ * by Ken Hollis <khollis@bitgate.com>
+ *
+ */
+
+#ifndef _LINUX_WATCHDOG_H
+#define _LINUX_WATCHDOG_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+#define        WATCHDOG_IOCTL_BASE     'W'
+
+struct watchdog_info {
+       __u32 options;          /* Options the card/driver supports */
+       __u32 firmware_version; /* Firmware version of the card */
+       __u8  identity[32];     /* Identity of the board */
+};
+
+#define        WDIOC_GETSUPPORT        _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)
+#define        WDIOC_GETSTATUS         _IOR(WATCHDOG_IOCTL_BASE, 1, int)
+#define        WDIOC_GETBOOTSTATUS     _IOR(WATCHDOG_IOCTL_BASE, 2, int)
+#define        WDIOC_GETTEMP           _IOR(WATCHDOG_IOCTL_BASE, 3, int)
+#define        WDIOC_SETOPTIONS        _IOR(WATCHDOG_IOCTL_BASE, 4, int)
+#define        WDIOC_KEEPALIVE         _IOR(WATCHDOG_IOCTL_BASE, 5, int)
+#define        WDIOC_SETTIMEOUT        _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
+#define        WDIOC_GETTIMEOUT        _IOR(WATCHDOG_IOCTL_BASE, 7, int)
+#define        WDIOC_SETPRETIMEOUT     _IOWR(WATCHDOG_IOCTL_BASE, 8, int)
+#define        WDIOC_GETPRETIMEOUT     _IOR(WATCHDOG_IOCTL_BASE, 9, int)
+#define        WDIOC_GETTIMELEFT       _IOR(WATCHDOG_IOCTL_BASE, 10, int)
+
+#define        WDIOF_UNKNOWN           -1      /* Unknown flag error */
+#define        WDIOS_UNKNOWN           -1      /* Unknown status error */
+
+#define        WDIOF_OVERHEAT          0x0001  /* Reset due to CPU overheat */
+#define        WDIOF_FANFAULT          0x0002  /* Fan failed */
+#define        WDIOF_EXTERN1           0x0004  /* External relay 1 */
+#define        WDIOF_EXTERN2           0x0008  /* External relay 2 */
+#define        WDIOF_POWERUNDER        0x0010  /* Power bad/power fault */
+#define        WDIOF_CARDRESET         0x0020  /* Card previously reset the CPU */
+#define        WDIOF_POWEROVER         0x0040  /* Power over voltage */
+#define        WDIOF_SETTIMEOUT        0x0080  /* Set timeout (in seconds) */
+#define        WDIOF_MAGICCLOSE        0x0100  /* Supports magic close char */
+#define        WDIOF_PRETIMEOUT        0x0200  /* Pretimeout (in seconds), get/set */
+#define        WDIOF_ALARMONLY         0x0400  /* Watchdog triggers a management or
+                                          other external alarm not a reboot */
+#define        WDIOF_KEEPALIVEPING     0x8000  /* Keep alive ping reply */
+
+#define        WDIOS_DISABLECARD       0x0001  /* Turn off the watchdog timer */
+#define        WDIOS_ENABLECARD        0x0002  /* Turn on the watchdog timer */
+#define        WDIOS_TEMPPANIC         0x0004  /* Kernel panic on temperature trip */
+
+
+#endif /* _LINUX_WATCHDOG_H */
diff --git a/lib/libdss-include/linux/wimax.h b/lib/libdss-include/linux/wimax.h
new file mode 100644 (file)
index 0000000..9f6b77a
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+ * Linux WiMax
+ * API for user space
+ *
+ *
+ * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *   * Neither the name of Intel Corporation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Intel Corporation <linux-wimax@intel.com>
+ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
+ *  - Initial implementation
+ *
+ *
+ * This file declares the user/kernel protocol that is spoken over
+ * Generic Netlink, as well as any type declaration that is to be used
+ * by kernel and user space.
+ *
+ * It is intended for user space to clone it verbatim to use it as a
+ * primary reference for definitions.
+ *
+ * Stuff intended for kernel usage as well as full protocol and stack
+ * documentation is rooted in include/net/wimax.h.
+ */
+
+#ifndef __LINUX__WIMAX_H__
+#define __LINUX__WIMAX_H__
+
+#include <linux/types.h>
+
+enum {
+       /**
+        * Version of the interface (unsigned decimal, MMm, max 25.5)
+        * M - Major: change if removing or modifying an existing call.
+        * m - minor: change when adding a new call
+        */
+       WIMAX_GNL_VERSION = 01,
+       /* Generic NetLink attributes */
+       WIMAX_GNL_ATTR_INVALID = 0x00,
+       WIMAX_GNL_ATTR_MAX = 10,
+};
+
+
+/*
+ * Generic NetLink operations
+ *
+ * Most of these map to an API call; _OP_ stands for operation, _RP_
+ * for reply and _RE_ for report (aka: signal).
+ */
+enum {
+       WIMAX_GNL_OP_MSG_FROM_USER,     /* User to kernel message */
+       WIMAX_GNL_OP_MSG_TO_USER,       /* Kernel to user message */
+       WIMAX_GNL_OP_RFKILL,    /* Run wimax_rfkill() */
+       WIMAX_GNL_OP_RESET,     /* Run wimax_rfkill() */
+       WIMAX_GNL_RE_STATE_CHANGE,      /* Report: status change */
+       WIMAX_GNL_OP_STATE_GET,         /* Request for current state */
+};
+
+
+/* Message from user / to user */
+enum {
+       WIMAX_GNL_MSG_IFIDX = 1,
+       WIMAX_GNL_MSG_PIPE_NAME,
+       WIMAX_GNL_MSG_DATA,
+};
+
+
+/*
+ * wimax_rfkill()
+ *
+ * The state of the radio (ON/OFF) is mapped to the rfkill subsystem's
+ * switch state (DISABLED/ENABLED).
+ */
+enum wimax_rf_state {
+       WIMAX_RF_OFF = 0,       /* Radio is off, rfkill on/enabled */
+       WIMAX_RF_ON = 1,        /* Radio is on, rfkill off/disabled */
+       WIMAX_RF_QUERY = 2,
+};
+
+/* Attributes */
+enum {
+       WIMAX_GNL_RFKILL_IFIDX = 1,
+       WIMAX_GNL_RFKILL_STATE,
+};
+
+
+/* Attributes for wimax_reset() */
+enum {
+       WIMAX_GNL_RESET_IFIDX = 1,
+};
+
+/* Attributes for wimax_state_get() */
+enum {
+       WIMAX_GNL_STGET_IFIDX = 1,
+};
+
+/*
+ * Attributes for the Report State Change
+ *
+ * For now we just have the old and new states; new attributes might
+ * be added later on.
+ */
+enum {
+       WIMAX_GNL_STCH_IFIDX = 1,
+       WIMAX_GNL_STCH_STATE_OLD,
+       WIMAX_GNL_STCH_STATE_NEW,
+};
+
+
+/**
+ * enum wimax_st - The different states of a WiMAX device
+ * @__WIMAX_ST_NULL: The device structure has been allocated and zeroed,
+ *     but still wimax_dev_add() hasn't been called. There is no state.
+ *
+ * @WIMAX_ST_DOWN: The device has been registered with the WiMAX and
+ *     networking stacks, but it is not initialized (normally that is
+ *     done with 'ifconfig DEV up' [or equivalent], which can upload
+ *     firmware and enable communications with the device).
+ *     In this state, the device is powered down and using as less
+ *     power as possible.
+ *     This state is the default after a call to wimax_dev_add(). It
+ *     is ok to have drivers move directly to %WIMAX_ST_UNINITIALIZED
+ *     or %WIMAX_ST_RADIO_OFF in _probe() after the call to
+ *     wimax_dev_add().
+ *     It is recommended that the driver leaves this state when
+ *     calling 'ifconfig DEV up' and enters it back on 'ifconfig DEV
+ *     down'.
+ *
+ * @__WIMAX_ST_QUIESCING: The device is being torn down, so no API
+ *     operations are allowed to proceed except the ones needed to
+ *     complete the device clean up process.
+ *
+ * @WIMAX_ST_UNINITIALIZED: [optional] Communication with the device
+ *     is setup, but the device still requires some configuration
+ *     before being operational.
+ *     Some WiMAX API calls might work.
+ *
+ * @WIMAX_ST_RADIO_OFF: The device is fully up; radio is off (wether
+ *     by hardware or software switches).
+ *     It is recommended to always leave the device in this state
+ *     after initialization.
+ *
+ * @WIMAX_ST_READY: The device is fully up and radio is on.
+ *
+ * @WIMAX_ST_SCANNING: [optional] The device has been instructed to
+ *     scan. In this state, the device cannot be actively connected to
+ *     a network.
+ *
+ * @WIMAX_ST_CONNECTING: The device is connecting to a network. This
+ *     state exists because in some devices, the connect process can
+ *     include a number of negotiations between user space, kernel
+ *     space and the device. User space needs to know what the device
+ *     is doing. If the connect sequence in a device is atomic and
+ *     fast, the device can transition directly to CONNECTED
+ *
+ * @WIMAX_ST_CONNECTED: The device is connected to a network.
+ *
+ * @__WIMAX_ST_INVALID: This is an invalid state used to mark the
+ *     maximum numeric value of states.
+ *
+ * Description:
+ *
+ * Transitions from one state to another one are atomic and can only
+ * be caused in kernel space with wimax_state_change(). To read the
+ * state, use wimax_state_get().
+ *
+ * States starting with __ are internal and shall not be used or
+ * referred to by drivers or userspace. They look ugly, but that's the
+ * point -- if any use is made non-internal to the stack, it is easier
+ * to catch on review.
+ *
+ * All API operations [with well defined exceptions] will take the
+ * device mutex before starting and then check the state. If the state
+ * is %__WIMAX_ST_NULL, %WIMAX_ST_DOWN, %WIMAX_ST_UNINITIALIZED or
+ * %__WIMAX_ST_QUIESCING, it will drop the lock and quit with
+ * -%EINVAL, -%ENOMEDIUM, -%ENOTCONN or -%ESHUTDOWN.
+ *
+ * The order of the definitions is important, so we can do numerical
+ * comparisons (eg: < %WIMAX_ST_RADIO_OFF means the device is not ready
+ * to operate).
+ */
+/*
+ * The allowed state transitions are described in the table below
+ * (states in rows can go to states in columns where there is an X):
+ *
+ *                                  UNINI   RADIO READY SCAN CONNEC CONNEC
+ *             NULL DOWN QUIESCING TIALIZED  OFF        NING  TING   TED
+ * NULL         -    x
+ * DOWN              -      x        x       x
+ * QUIESCING         x      -
+ * UNINITIALIZED            x        -       x
+ * RADIO_OFF                x                -     x
+ * READY                    x                x     -     x     x      x
+ * SCANNING                 x                x     x     -     x      x
+ * CONNECTING               x                x     x     x     -      x
+ * CONNECTED                x                x     x                  -
+ *
+ * This table not available in kernel-doc because the formatting messes it up.
+ */
+ enum wimax_st {
+       __WIMAX_ST_NULL = 0,
+       WIMAX_ST_DOWN,
+       __WIMAX_ST_QUIESCING,
+       WIMAX_ST_UNINITIALIZED,
+       WIMAX_ST_RADIO_OFF,
+       WIMAX_ST_READY,
+       WIMAX_ST_SCANNING,
+       WIMAX_ST_CONNECTING,
+       WIMAX_ST_CONNECTED,
+       __WIMAX_ST_INVALID                      /* Always keep last */
+};
+
+
+#endif /* #ifndef __LINUX__WIMAX_H__ */
diff --git a/lib/libdss-include/linux/wimax/i2400m.h b/lib/libdss-include/linux/wimax/i2400m.h
new file mode 100644 (file)
index 0000000..fd198bc
--- /dev/null
@@ -0,0 +1,572 @@
+/*
+ * Intel Wireless WiMax Connection 2400m
+ * Host-Device protocol interface definitions
+ *
+ *
+ * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *   * Neither the name of Intel Corporation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Intel Corporation <linux-wimax@intel.com>
+ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
+ *  - Initial implementation
+ *
+ *
+ * This header defines the data structures and constants used to
+ * communicate with the device.
+ *
+ * BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL
+ *
+ * The firmware upload protocol is quite simple and only requires a
+ * handful of commands. See drivers/net/wimax/i2400m/fw.c for more
+ * details.
+ *
+ * The BCF data structure is for the firmware file header.
+ *
+ *
+ * THE DATA / CONTROL PROTOCOL
+ *
+ * This is the normal protocol spoken with the device once the
+ * firmware is uploaded. It transports data payloads and control
+ * messages back and forth.
+ *
+ * It consists 'messages' that pack one or more payloads each. The
+ * format is described in detail in drivers/net/wimax/i2400m/rx.c and
+ * tx.c.
+ *
+ *
+ * THE L3L4 PROTOCOL
+ *
+ * The term L3L4 refers to Layer 3 (the device), Layer 4 (the
+ * driver/host software).
+ *
+ * This is the control protocol used by the host to control the i2400m
+ * device (scan, connect, disconnect...). This is sent to / received
+ * as control frames. These frames consist of a header and zero or
+ * more TLVs with information. We call each control frame a "message".
+ *
+ * Each message is composed of:
+ *
+ * HEADER
+ * [TLV0 + PAYLOAD0]
+ * [TLV1 + PAYLOAD1]
+ * [...]
+ * [TLVN + PAYLOADN]
+ *
+ * The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are
+ * defined by a TLV structure (Type Length Value) which is a 'header'
+ * (struct i2400m_tlv_hdr) and then the payload.
+ *
+ * All integers are represented as Little Endian.
+ *
+ * - REQUESTS AND EVENTS
+ *
+ * The requests can be clasified as follows:
+ *
+ *   COMMAND:  implies a request from the host to the device requesting
+ *             an action being performed. The device will reply with a
+ *             message (with the same type as the command), status and
+ *             no (TLV) payload. Execution of a command might cause
+ *             events (of different type) to be sent later on as
+ *             device's state changes.
+ *
+ *   GET/SET:  similar to COMMAND, but will not cause other
+ *             EVENTs. The reply, in the case of GET, will contain
+ *             TLVs with the requested information.
+ *
+ *   EVENT:    asynchronous messages sent from the device, maybe as a
+ *             consequence of previous COMMANDs but disassociated from
+ *             them.
+ *
+ * Only one request might be pending at the same time (ie: don't
+ * parallelize nor post another GET request before the previous
+ * COMMAND has been acknowledged with it's corresponding reply by the
+ * device).
+ *
+ * The different requests and their formats are described below:
+ *
+ *  I2400M_MT_*   Message types
+ *  I2400M_MS_*   Message status (for replies, events)
+ *  i2400m_tlv_*  TLVs
+ *
+ * data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the
+ * operation.
+ */
+
+#ifndef __LINUX__WIMAX__I2400M_H__
+#define __LINUX__WIMAX__I2400M_H__
+
+#include <linux/types.h>
+#include <linux/if_ether.h>
+
+/*
+ * Host Device Interface (HDI) common to all busses
+ */
+
+/* Boot-mode (firmware upload mode) commands */
+
+/* Header for the firmware file */
+struct i2400m_bcf_hdr {
+       __le32 module_type;
+       __le32 header_len;
+       __le32 header_version;
+       __le32 module_id;
+       __le32 module_vendor;
+       __le32 date;            /* BCD YYYMMDD */
+       __le32 size;            /* in dwords */
+       __le32 key_size;        /* in dwords */
+       __le32 modulus_size;    /* in dwords */
+       __le32 exponent_size;   /* in dwords */
+       __u8 reserved[88];
+} __attribute__ ((packed));
+
+/* Boot mode opcodes */
+enum i2400m_brh_opcode {
+       I2400M_BRH_READ = 1,
+       I2400M_BRH_WRITE = 2,
+       I2400M_BRH_JUMP = 3,
+       I2400M_BRH_SIGNED_JUMP = 8,
+       I2400M_BRH_HASH_PAYLOAD_ONLY = 9,
+};
+
+/* Boot mode command masks and stuff */
+enum i2400m_brh {
+       I2400M_BRH_SIGNATURE = 0xcbbc0000,
+       I2400M_BRH_SIGNATURE_MASK = 0xffff0000,
+       I2400M_BRH_SIGNATURE_SHIFT = 16,
+       I2400M_BRH_OPCODE_MASK = 0x0000000f,
+       I2400M_BRH_RESPONSE_MASK = 0x000000f0,
+       I2400M_BRH_RESPONSE_SHIFT = 4,
+       I2400M_BRH_DIRECT_ACCESS = 0x00000400,
+       I2400M_BRH_RESPONSE_REQUIRED = 0x00000200,
+       I2400M_BRH_USE_CHECKSUM = 0x00000100,
+};
+
+
+/**
+ * i2400m_bootrom_header - Header for a boot-mode command
+ *
+ * @cmd: the above command descriptor
+ * @target_addr: where on the device memory should the action be performed.
+ * @data_size: for read/write, amount of data to be read/written
+ * @block_checksum: checksum value (if applicable)
+ * @payload: the beginning of data attached to this header
+ */
+struct i2400m_bootrom_header {
+       __le32 command;         /* Compose with enum i2400_brh */
+       __le32 target_addr;
+       __le32 data_size;
+       __le32 block_checksum;
+       char payload[0];
+} __attribute__ ((packed));
+
+
+/*
+ * Data / control protocol
+ */
+
+/* Packet types for the host-device interface */
+enum i2400m_pt {
+       I2400M_PT_DATA = 0,
+       I2400M_PT_CTRL,
+       I2400M_PT_TRACE,        /* For device debug */
+       I2400M_PT_RESET_WARM,   /* device reset */
+       I2400M_PT_RESET_COLD,   /* USB[transport] reset, like reconnect */
+       I2400M_PT_EDATA,        /* Extended RX data */
+       I2400M_PT_ILLEGAL
+};
+
+
+/*
+ * Payload for a data packet
+ *
+ * This is prefixed to each and every outgoing DATA type.
+ */
+struct i2400m_pl_data_hdr {
+       __le32 reserved;
+} __attribute__((packed));
+
+
+/*
+ * Payload for an extended data packet
+ *
+ * New in fw v1.4
+ *
+ * @reorder: if this payload has to be reorder or not (and how)
+ * @cs: the type of data in the packet, as defined per (802.16e
+ *     T11.13.19.1). Currently only 2 (IPv4 packet) supported.
+ *
+ * This is prefixed to each and every INCOMING DATA packet.
+ */
+struct i2400m_pl_edata_hdr {
+       __le32 reorder;         /* bits defined in i2400m_ro */
+       __u8 cs;
+       __u8 reserved[11];
+} __attribute__((packed));
+
+enum i2400m_cs {
+       I2400M_CS_IPV4_0 = 0,
+       I2400M_CS_IPV4 = 2,
+};
+
+enum i2400m_ro {
+       I2400M_RO_NEEDED     = 0x01,
+       I2400M_RO_TYPE       = 0x03,
+       I2400M_RO_TYPE_SHIFT = 1,
+       I2400M_RO_CIN        = 0x0f,
+       I2400M_RO_CIN_SHIFT  = 4,
+       I2400M_RO_FBN        = 0x07ff,
+       I2400M_RO_FBN_SHIFT  = 8,
+       I2400M_RO_SN         = 0x07ff,
+       I2400M_RO_SN_SHIFT   = 21,
+};
+
+enum i2400m_ro_type {
+       I2400M_RO_TYPE_RESET = 0,
+       I2400M_RO_TYPE_PACKET,
+       I2400M_RO_TYPE_WS,
+       I2400M_RO_TYPE_PACKET_WS,
+};
+
+
+/* Misc constants */
+enum {
+       I2400M_PL_ALIGN = 16,   /* Payload data size alignment */
+       I2400M_PL_SIZE_MAX = 0x3EFF,
+       I2400M_MAX_PLS_IN_MSG = 60,
+       /* protocol barkers: sync sequences; for notifications they
+        * are sent in groups of four. */
+       I2400M_H2D_PREVIEW_BARKER = 0xcafe900d,
+       I2400M_COLD_RESET_BARKER = 0xc01dc01d,
+       I2400M_WARM_RESET_BARKER = 0x50f750f7,
+       I2400M_NBOOT_BARKER = 0xdeadbeef,
+       I2400M_SBOOT_BARKER = 0x0ff1c1a1,
+       I2400M_SBOOT_BARKER_6050 = 0x80000001,
+       I2400M_ACK_BARKER = 0xfeedbabe,
+       I2400M_D2H_MSG_BARKER = 0xbeefbabe,
+};
+
+
+/*
+ * Hardware payload descriptor
+ *
+ * Bitfields encoded in a struct to enforce typing semantics.
+ *
+ * Look in rx.c and tx.c for a full description of the format.
+ */
+struct i2400m_pld {
+       __le32 val;
+} __attribute__ ((packed));
+
+#define I2400M_PLD_SIZE_MASK 0x00003fff
+#define I2400M_PLD_TYPE_SHIFT 16
+#define I2400M_PLD_TYPE_MASK 0x000f0000
+
+/*
+ * Header for a TX message or RX message
+ *
+ * @barker: preamble
+ * @size: used for management of the FIFO queue buffer; before
+ *     sending, this is converted to be a real preamble. This
+ *     indicates the real size of the TX message that starts at this
+ *     point. If the highest bit is set, then this message is to be
+ *     skipped.
+ * @sequence: sequence number of this message
+ * @offset: offset where the message itself starts -- see the comments
+ *     in the file header about message header and payload descriptor
+ *     alignment.
+ * @num_pls: number of payloads in this message
+ * @padding: amount of padding bytes at the end of the message to make
+ *           it be of block-size aligned
+ *
+ * Look in rx.c and tx.c for a full description of the format.
+ */
+struct i2400m_msg_hdr {
+       union {
+               __le32 barker;
+               __u32 size;     /* same size type as barker!! */
+       };
+       union {
+               __le32 sequence;
+               __u32 offset;   /* same size type as barker!! */
+       };
+       __le16 num_pls;
+       __le16 rsv1;
+       __le16 padding;
+       __le16 rsv2;
+       struct i2400m_pld pld[0];
+} __attribute__ ((packed));
+
+
+
+/*
+ * L3/L4 control protocol
+ */
+
+enum {
+       /* Interface version */
+       I2400M_L3L4_VERSION             = 0x0100,
+};
+
+/* Message types */
+enum i2400m_mt {
+       I2400M_MT_RESERVED              = 0x0000,
+       I2400M_MT_INVALID               = 0xffff,
+       I2400M_MT_REPORT_MASK           = 0x8000,
+
+       I2400M_MT_GET_SCAN_RESULT       = 0x4202,
+       I2400M_MT_SET_SCAN_PARAM        = 0x4402,
+       I2400M_MT_CMD_RF_CONTROL        = 0x4602,
+       I2400M_MT_CMD_SCAN              = 0x4603,
+       I2400M_MT_CMD_CONNECT           = 0x4604,
+       I2400M_MT_CMD_DISCONNECT        = 0x4605,
+       I2400M_MT_CMD_EXIT_IDLE         = 0x4606,
+       I2400M_MT_GET_LM_VERSION        = 0x5201,
+       I2400M_MT_GET_DEVICE_INFO       = 0x5202,
+       I2400M_MT_GET_LINK_STATUS       = 0x5203,
+       I2400M_MT_GET_STATISTICS        = 0x5204,
+       I2400M_MT_GET_STATE             = 0x5205,
+       I2400M_MT_GET_MEDIA_STATUS      = 0x5206,
+       I2400M_MT_SET_INIT_CONFIG       = 0x5404,
+       I2400M_MT_CMD_INIT              = 0x5601,
+       I2400M_MT_CMD_TERMINATE         = 0x5602,
+       I2400M_MT_CMD_MODE_OF_OP        = 0x5603,
+       I2400M_MT_CMD_RESET_DEVICE      = 0x5604,
+       I2400M_MT_CMD_MONITOR_CONTROL   = 0x5605,
+       I2400M_MT_CMD_ENTER_POWERSAVE   = 0x5606,
+       I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201,
+       I2400M_MT_SET_EAP_SUCCESS       = 0x6402,
+       I2400M_MT_SET_EAP_FAIL          = 0x6403,
+       I2400M_MT_SET_EAP_KEY           = 0x6404,
+       I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602,
+       I2400M_MT_REPORT_SCAN_RESULT    = 0xc002,
+       I2400M_MT_REPORT_STATE          = 0xd002,
+       I2400M_MT_REPORT_POWERSAVE_READY = 0xd005,
+       I2400M_MT_REPORT_EAP_REQUEST    = 0xe002,
+       I2400M_MT_REPORT_EAP_RESTART    = 0xe003,
+       I2400M_MT_REPORT_ALT_ACCEPT     = 0xe004,
+       I2400M_MT_REPORT_KEY_REQUEST    = 0xe005,
+};
+
+
+/*
+ * Message Ack Status codes
+ *
+ * When a message is replied-to, this status is reported.
+ */
+enum i2400m_ms {
+       I2400M_MS_DONE_OK                  = 0,
+       I2400M_MS_DONE_IN_PROGRESS         = 1,
+       I2400M_MS_INVALID_OP               = 2,
+       I2400M_MS_BAD_STATE                = 3,
+       I2400M_MS_ILLEGAL_VALUE            = 4,
+       I2400M_MS_MISSING_PARAMS           = 5,
+       I2400M_MS_VERSION_ERROR            = 6,
+       I2400M_MS_ACCESSIBILITY_ERROR      = 7,
+       I2400M_MS_BUSY                     = 8,
+       I2400M_MS_CORRUPTED_TLV            = 9,
+       I2400M_MS_UNINITIALIZED            = 10,
+       I2400M_MS_UNKNOWN_ERROR            = 11,
+       I2400M_MS_PRODUCTION_ERROR         = 12,
+       I2400M_MS_NO_RF                    = 13,
+       I2400M_MS_NOT_READY_FOR_POWERSAVE  = 14,
+       I2400M_MS_THERMAL_CRITICAL         = 15,
+       I2400M_MS_MAX
+};
+
+
+/**
+ * i2400m_tlv - enumeration of the different types of TLVs
+ *
+ * TLVs stand for type-length-value and are the header for a payload
+ * composed of almost anything. Each payload has a type assigned
+ * and a length.
+ */
+enum i2400m_tlv {
+       I2400M_TLV_L4_MESSAGE_VERSIONS = 129,
+       I2400M_TLV_SYSTEM_STATE = 141,
+       I2400M_TLV_MEDIA_STATUS = 161,
+       I2400M_TLV_RF_OPERATION = 162,
+       I2400M_TLV_RF_STATUS = 163,
+       I2400M_TLV_DEVICE_RESET_TYPE = 132,
+       I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601,
+       I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611,
+       I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614,
+       I2400M_TLV_CONFIG_DL_HOST_REORDER = 615,
+};
+
+
+struct i2400m_tlv_hdr {
+       __le16 type;
+       __le16 length;          /* payload's */
+       __u8   pl[0];
+} __attribute__((packed));
+
+
+struct i2400m_l3l4_hdr {
+       __le16 type;
+       __le16 length;          /* payload's */
+       __le16 version;
+       __le16 resv1;
+       __le16 status;
+       __le16 resv2;
+       struct i2400m_tlv_hdr pl[0];
+} __attribute__((packed));
+
+
+/**
+ * i2400m_system_state - different states of the device
+ */
+enum i2400m_system_state {
+       I2400M_SS_UNINITIALIZED = 1,
+       I2400M_SS_INIT,
+       I2400M_SS_READY,
+       I2400M_SS_SCAN,
+       I2400M_SS_STANDBY,
+       I2400M_SS_CONNECTING,
+       I2400M_SS_WIMAX_CONNECTED,
+       I2400M_SS_DATA_PATH_CONNECTED,
+       I2400M_SS_IDLE,
+       I2400M_SS_DISCONNECTING,
+       I2400M_SS_OUT_OF_ZONE,
+       I2400M_SS_SLEEPACTIVE,
+       I2400M_SS_PRODUCTION,
+       I2400M_SS_CONFIG,
+       I2400M_SS_RF_OFF,
+       I2400M_SS_RF_SHUTDOWN,
+       I2400M_SS_DEVICE_DISCONNECT,
+       I2400M_SS_MAX,
+};
+
+
+/**
+ * i2400m_tlv_system_state - report on the state of the system
+ *
+ * @state: see enum i2400m_system_state
+ */
+struct i2400m_tlv_system_state {
+       struct i2400m_tlv_hdr hdr;
+       __le32 state;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_l4_message_versions {
+       struct i2400m_tlv_hdr hdr;
+       __le16 major;
+       __le16 minor;
+       __le16 branch;
+       __le16 reserved;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_detailed_device_info {
+       struct i2400m_tlv_hdr hdr;
+       __u8 reserved1[400];
+       __u8 mac_address[ETH_ALEN];
+       __u8 reserved2[2];
+} __attribute__((packed));
+
+
+enum i2400m_rf_switch_status {
+       I2400M_RF_SWITCH_ON = 1,
+       I2400M_RF_SWITCH_OFF = 2,
+};
+
+struct i2400m_tlv_rf_switches_status {
+       struct i2400m_tlv_hdr hdr;
+       __u8 sw_rf_switch;      /* 1 ON, 2 OFF */
+       __u8 hw_rf_switch;      /* 1 ON, 2 OFF */
+       __u8 reserved[2];
+} __attribute__((packed));
+
+
+enum {
+       i2400m_rf_operation_on = 1,
+       i2400m_rf_operation_off = 2
+};
+
+struct i2400m_tlv_rf_operation {
+       struct i2400m_tlv_hdr hdr;
+       __le32 status;  /* 1 ON, 2 OFF */
+} __attribute__((packed));
+
+
+enum i2400m_tlv_reset_type {
+       I2400M_RESET_TYPE_COLD = 1,
+       I2400M_RESET_TYPE_WARM
+};
+
+struct i2400m_tlv_device_reset_type {
+       struct i2400m_tlv_hdr hdr;
+       __le32 reset_type;
+} __attribute__((packed));
+
+
+struct i2400m_tlv_config_idle_parameters {
+       struct i2400m_tlv_hdr hdr;
+       __le32 idle_timeout;    /* 100 to 300000 ms [5min], 100 increments
+                                * 0 disabled */
+       __le32 idle_paging_interval;    /* frames */
+} __attribute__((packed));
+
+
+enum i2400m_media_status {
+       I2400M_MEDIA_STATUS_LINK_UP = 1,
+       I2400M_MEDIA_STATUS_LINK_DOWN,
+       I2400M_MEDIA_STATUS_LINK_RENEW,
+};
+
+struct i2400m_tlv_media_status {
+       struct i2400m_tlv_hdr hdr;
+       __le32 media_status;
+} __attribute__((packed));
+
+
+/* New in v1.4 */
+struct i2400m_tlv_config_idle_timeout {
+       struct i2400m_tlv_hdr hdr;
+       __le32 timeout; /* 100 to 300000 ms [5min], 100 increments
+                        * 0 disabled */
+} __attribute__((packed));
+
+/* New in v1.4 -- for backward compat, will be removed */
+struct i2400m_tlv_config_d2h_data_format {
+       struct i2400m_tlv_hdr hdr;
+       __u8 format;            /* 0 old format, 1 enhanced */
+       __u8 reserved[3];
+} __attribute__((packed));
+
+/* New in v1.4 */
+struct i2400m_tlv_config_dl_host_reorder {
+       struct i2400m_tlv_hdr hdr;
+       __u8 reorder;           /* 0 disabled, 1 enabled */
+       __u8 reserved[3];
+} __attribute__((packed));
+
+
+#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */
diff --git a/lib/libdss-include/linux/wireless.h b/lib/libdss-include/linux/wireless.h
new file mode 100644 (file)
index 0000000..ad9839f
--- /dev/null
@@ -0,0 +1,1128 @@
+/*
+ * This file define a set of standard wireless extensions
+ *
+ * Version :   22      16.3.07
+ *
+ * Authors :   Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved.
+ */
+
+#ifndef _LINUX_WIRELESS_H
+#define _LINUX_WIRELESS_H
+
+/************************** DOCUMENTATION **************************/
+/*
+ * Initial APIs (1996 -> onward) :
+ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+ * The entry /proc/net/wireless give statistics and information on the
+ * driver.
+ * This is better than having each driver having its entry because
+ * its centralised and we may remove the driver module safely.
+ *
+ * Ioctl are used to configure the driver and issue commands.  This is
+ * better than command line options of insmod because we may want to
+ * change dynamically (while the driver is running) some parameters.
+ *
+ * The ioctl mechanimsm are copied from standard devices ioctl.
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+ *     # net/core/dev.c (two place + add include)
+ *     # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+ *     # net/core/dev.c (two other places)
+ *     # include/linux/netdevice.h (one place)
+ *     # include/linux/proc_fs.h (one place)
+ *
+ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+ *     # include/net/iw_handler.h
+ *
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ *     # net/core/wireless.c
+ *
+ * Wireless Events (2002 -> onward) :
+ * --------------------------------
+ * Events are defined at the end of this file, and implemented in :
+ *     # net/core/wireless.c
+ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+ *
+ * These wireless extensions are not magic : each driver has to provide
+ * support for them...
+ *
+ * IMPORTANT NOTE : As everything in the kernel, this is very much a
+ * work in progress. Contact me if you have ideas of improvements...
+ */
+
+/***************************** INCLUDES *****************************/
+
+#include <linux/types.h>               /* for __u* and __s* typedefs */
+#include <linux/socket.h>              /* for "struct sockaddr" et al  */
+#include <linux/if.h>                  /* for IFNAMSIZ and co... */
+
+/***************************** VERSION *****************************/
+/*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+#define WIRELESS_EXT   22
+
+/*
+ * Changes :
+ *
+ * V2 to V3
+ * --------
+ *     Alan Cox start some incompatibles changes. I've integrated a bit more.
+ *     - Encryption renamed to Encode to avoid US regulation problems
+ *     - Frequency changed from float to struct to avoid problems on old 386
+ *
+ * V3 to V4
+ * --------
+ *     - Add sensitivity
+ *
+ * V4 to V5
+ * --------
+ *     - Missing encoding definitions in range
+ *     - Access points stuff
+ *
+ * V5 to V6
+ * --------
+ *     - 802.11 support (ESSID ioctls)
+ *
+ * V6 to V7
+ * --------
+ *     - define IW_ESSID_MAX_SIZE and IW_MAX_AP
+ *
+ * V7 to V8
+ * --------
+ *     - Changed my e-mail address
+ *     - More 802.11 support (nickname, rate, rts, frag)
+ *     - List index in frequencies
+ *
+ * V8 to V9
+ * --------
+ *     - Support for 'mode of operation' (ad-hoc, managed...)
+ *     - Support for unicast and multicast power saving
+ *     - Change encoding to support larger tokens (>64 bits)
+ *     - Updated iw_params (disable, flags) and use it for NWID
+ *     - Extracted iw_point from iwreq for clarity
+ *
+ * V9 to V10
+ * ---------
+ *     - Add PM capability to range structure
+ *     - Add PM modifier : MAX/MIN/RELATIVE
+ *     - Add encoding option : IW_ENCODE_NOKEY
+ *     - Add TxPower ioctls (work like TxRate)
+ *
+ * V10 to V11
+ * ----------
+ *     - Add WE version in range (help backward/forward compatibility)
+ *     - Add retry ioctls (work like PM)
+ *
+ * V11 to V12
+ * ----------
+ *     - Add SIOCSIWSTATS to get /proc/net/wireless programatically
+ *     - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ *     - Add new statistics (frag, retry, beacon)
+ *     - Add average quality (for user space calibration)
+ *
+ * V12 to V13
+ * ----------
+ *     - Document creation of new driver API.
+ *     - Extract union iwreq_data from struct iwreq (for new driver API).
+ *     - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ *
+ * V13 to V14
+ * ----------
+ *     - Wireless Events support : define struct iw_event
+ *     - Define additional specific event numbers
+ *     - Add "addr" and "param" fields in union iwreq_data
+ *     - AP scanning stuff (SIOCSIWSCAN and friends)
+ *
+ * V14 to V15
+ * ----------
+ *     - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
+ *     - Make struct iw_freq signed (both m & e), add explicit padding
+ *     - Add IWEVCUSTOM for driver specific event/scanning token
+ *     - Add IW_MAX_GET_SPY for driver returning a lot of addresses
+ *     - Add IW_TXPOW_RANGE for range of Tx Powers
+ *     - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
+ *     - Add IW_MODE_MONITOR for passive monitor
+ *
+ * V15 to V16
+ * ----------
+ *     - Increase the number of bitrates in iw_range to 32 (for 802.11g)
+ *     - Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
+ *     - Reshuffle struct iw_range for increases, add filler
+ *     - Increase IW_MAX_AP to 64 for driver returning a lot of addresses
+ *     - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
+ *     - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
+ *     - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
+ *
+ * V16 to V17
+ * ----------
+ *     - Add flags to frequency -> auto/fixed
+ *     - Document (struct iw_quality *)->updated, add new flags (INVALID)
+ *     - Wireless Event capability in struct iw_range
+ *     - Add support for relative TxPower (yick !)
+ *
+ * V17 to V18 (From Jouni Malinen <j@w1.fi>)
+ * ----------
+ *     - Add support for WPA/WPA2
+ *     - Add extended encoding configuration (SIOCSIWENCODEEXT and
+ *       SIOCGIWENCODEEXT)
+ *     - Add SIOCSIWGENIE/SIOCGIWGENIE
+ *     - Add SIOCSIWMLME
+ *     - Add SIOCSIWPMKSA
+ *     - Add struct iw_range bit field for supported encoding capabilities
+ *     - Add optional scan request parameters for SIOCSIWSCAN
+ *     - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA
+ *       related parameters (extensible up to 4096 parameter values)
+ *     - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
+ *       IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
+ *
+ * V18 to V19
+ * ----------
+ *     - Remove (struct iw_point *)->pointer from events and streams
+ *     - Remove header includes to help user space
+ *     - Increase IW_ENCODING_TOKEN_MAX from 32 to 64
+ *     - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros
+ *     - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM
+ *     - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros
+ *
+ * V19 to V20
+ * ----------
+ *     - RtNetlink requests support (SET/GET)
+ *
+ * V20 to V21
+ * ----------
+ *     - Remove (struct net_device *)->get_wireless_stats()
+ *     - Change length in ESSID and NICK to strlen() instead of strlen()+1
+ *     - Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers
+ *     - Power/Retry relative values no longer * 100000
+ *     - Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI
+ *
+ * V21 to V22
+ * ----------
+ *     - Prevent leaking of kernel space in stream on 64 bits.
+ */
+
+/**************************** CONSTANTS ****************************/
+
+/* -------------------------- IOCTL LIST -------------------------- */
+
+/* Wireless Identification */
+#define SIOCSIWCOMMIT  0x8B00          /* Commit pending changes to driver */
+#define SIOCGIWNAME    0x8B01          /* get name == wireless protocol */
+/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
+ * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
+ * Don't put the name of your driver there, it's useless. */
+
+/* Basic operations */
+#define SIOCSIWNWID    0x8B02          /* set network id (pre-802.11) */
+#define SIOCGIWNWID    0x8B03          /* get network id (the cell) */
+#define SIOCSIWFREQ    0x8B04          /* set channel/frequency (Hz) */
+#define SIOCGIWFREQ    0x8B05          /* get channel/frequency (Hz) */
+#define SIOCSIWMODE    0x8B06          /* set operation mode */
+#define SIOCGIWMODE    0x8B07          /* get operation mode */
+#define SIOCSIWSENS    0x8B08          /* set sensitivity (dBm) */
+#define SIOCGIWSENS    0x8B09          /* get sensitivity (dBm) */
+
+/* Informative stuff */
+#define SIOCSIWRANGE   0x8B0A          /* Unused */
+#define SIOCGIWRANGE   0x8B0B          /* Get range of parameters */
+#define SIOCSIWPRIV    0x8B0C          /* Unused */
+#define SIOCGIWPRIV    0x8B0D          /* get private ioctl interface info */
+#define SIOCSIWSTATS   0x8B0E          /* Unused */
+#define SIOCGIWSTATS   0x8B0F          /* Get /proc/net/wireless stats */
+/* SIOCGIWSTATS is strictly used between user space and the kernel, and
+ * is never passed to the driver (i.e. the driver will never see it). */
+
+/* Spy support (statistics per MAC address - used for Mobile IP support) */
+#define SIOCSIWSPY     0x8B10          /* set spy addresses */
+#define SIOCGIWSPY     0x8B11          /* get spy info (quality of link) */
+#define SIOCSIWTHRSPY  0x8B12          /* set spy threshold (spy event) */
+#define SIOCGIWTHRSPY  0x8B13          /* get spy threshold */
+
+/* Access Point manipulation */
+#define SIOCSIWAP      0x8B14          /* set access point MAC addresses */
+#define SIOCGIWAP      0x8B15          /* get access point MAC addresses */
+#define SIOCGIWAPLIST  0x8B17          /* Deprecated in favor of scanning */
+#define SIOCSIWSCAN    0x8B18          /* trigger scanning (list cells) */
+#define SIOCGIWSCAN    0x8B19          /* get scanning results */
+
+/* 802.11 specific support */
+#define SIOCSIWESSID   0x8B1A          /* set ESSID (network name) */
+#define SIOCGIWESSID   0x8B1B          /* get ESSID */
+#define SIOCSIWNICKN   0x8B1C          /* set node name/nickname */
+#define SIOCGIWNICKN   0x8B1D          /* get node name/nickname */
+/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+ * point to a string in user space, like it is done for RANGE... */
+
+/* Other parameters useful in 802.11 and some other devices */
+#define SIOCSIWRATE    0x8B20          /* set default bit rate (bps) */
+#define SIOCGIWRATE    0x8B21          /* get default bit rate (bps) */
+#define SIOCSIWRTS     0x8B22          /* set RTS/CTS threshold (bytes) */
+#define SIOCGIWRTS     0x8B23          /* get RTS/CTS threshold (bytes) */
+#define SIOCSIWFRAG    0x8B24          /* set fragmentation thr (bytes) */
+#define SIOCGIWFRAG    0x8B25          /* get fragmentation thr (bytes) */
+#define SIOCSIWTXPOW   0x8B26          /* set transmit power (dBm) */
+#define SIOCGIWTXPOW   0x8B27          /* get transmit power (dBm) */
+#define SIOCSIWRETRY   0x8B28          /* set retry limits and lifetime */
+#define SIOCGIWRETRY   0x8B29          /* get retry limits and lifetime */
+
+/* Encoding stuff (scrambling, hardware security, WEP...) */
+#define SIOCSIWENCODE  0x8B2A          /* set encoding token & mode */
+#define SIOCGIWENCODE  0x8B2B          /* get encoding token & mode */
+/* Power saving stuff (power management, unicast and multicast) */
+#define SIOCSIWPOWER   0x8B2C          /* set Power Management settings */
+#define SIOCGIWPOWER   0x8B2D          /* get Power Management settings */
+
+/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM).
+ * This ioctl uses struct iw_point and data buffer that includes IE id and len
+ * fields. More than one IE may be included in the request. Setting the generic
+ * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers
+ * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers
+ * are required to report the used IE as a wireless event, e.g., when
+ * associating with an AP. */
+#define SIOCSIWGENIE   0x8B30          /* set generic IE */
+#define SIOCGIWGENIE   0x8B31          /* get generic IE */
+
+/* WPA : IEEE 802.11 MLME requests */
+#define SIOCSIWMLME    0x8B16          /* request MLME operation; uses
+                                        * struct iw_mlme */
+/* WPA : Authentication mode parameters */
+#define SIOCSIWAUTH    0x8B32          /* set authentication mode params */
+#define SIOCGIWAUTH    0x8B33          /* get authentication mode params */
+
+/* WPA : Extended version of encoding configuration */
+#define SIOCSIWENCODEEXT 0x8B34                /* set encoding token & mode */
+#define SIOCGIWENCODEEXT 0x8B35                /* get encoding token & mode */
+
+/* WPA2 : PMKSA cache management */
+#define SIOCSIWPMKSA   0x8B36          /* PMKSA cache operation */
+
+/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
+
+/* These 32 ioctl are wireless device private, for 16 commands.
+ * Each driver is free to use them for whatever purpose it chooses,
+ * however the driver *must* export the description of those ioctls
+ * with SIOCGIWPRIV and *must* use arguments as defined below.
+ * If you don't follow those rules, DaveM is going to hate you (reason :
+ * it make mixed 32/64bit operation impossible).
+ */
+#define SIOCIWFIRSTPRIV        0x8BE0
+#define SIOCIWLASTPRIV 0x8BFF
+/* Previously, we were using SIOCDEVPRIVATE, but we now have our
+ * separate range because of collisions with other tools such as
+ * 'mii-tool'.
+ * We now have 32 commands, so a bit more space ;-).
+ * Also, all 'even' commands are only usable by root and don't return the
+ * content of ifr/iwr to user (but you are not obliged to use the set/get
+ * convention, just use every other two command). More details in iwpriv.c.
+ * And I repeat : you are not forced to use them with iwpriv, but you
+ * must be compliant with it.
+ */
+
+/* ------------------------- IOCTL STUFF ------------------------- */
+
+/* The first and the last (range) */
+#define SIOCIWFIRST    0x8B00
+#define SIOCIWLAST     SIOCIWLASTPRIV          /* 0x8BFF */
+#define IW_IOCTL_IDX(cmd)      ((cmd) - SIOCIWFIRST)
+#define IW_HANDLER(id, func)                   \
+       [IW_IOCTL_IDX(id)] = func
+
+/* Odd : get (world access), even : set (root access) */
+#define IW_IS_SET(cmd) (!((cmd) & 0x1))
+#define IW_IS_GET(cmd) ((cmd) & 0x1)
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/* Those are *NOT* ioctls, do not issue request on them !!! */
+/* Most events use the same identifier as ioctl requests */
+
+#define IWEVTXDROP     0x8C00          /* Packet dropped to excessive retry */
+#define IWEVQUAL       0x8C01          /* Quality part of statistics (scan) */
+#define IWEVCUSTOM     0x8C02          /* Driver specific ascii string */
+#define IWEVREGISTERED 0x8C03          /* Discovered a new node (AP mode) */
+#define IWEVEXPIRED    0x8C04          /* Expired a node (AP mode) */
+#define IWEVGENIE      0x8C05          /* Generic IE (WPA, RSN, WMM, ..)
+                                        * (scan results); This includes id and
+                                        * length fields. One IWEVGENIE may
+                                        * contain more than one IE. Scan
+                                        * results may contain one or more
+                                        * IWEVGENIE events. */
+#define IWEVMICHAELMICFAILURE 0x8C06   /* Michael MIC failure
+                                        * (struct iw_michaelmicfailure)
+                                        */
+#define IWEVASSOCREQIE 0x8C07          /* IEs used in (Re)Association Request.
+                                        * The data includes id and length
+                                        * fields and may contain more than one
+                                        * IE. This event is required in
+                                        * Managed mode if the driver
+                                        * generates its own WPA/RSN IE. This
+                                        * should be sent just before
+                                        * IWEVREGISTERED event for the
+                                        * association. */
+#define IWEVASSOCRESPIE        0x8C08          /* IEs used in (Re)Association
+                                        * Response. The data includes id and
+                                        * length fields and may contain more
+                                        * than one IE. This may be sent
+                                        * between IWEVASSOCREQIE and
+                                        * IWEVREGISTERED events for the
+                                        * association. */
+#define IWEVPMKIDCAND  0x8C09          /* PMKID candidate for RSN
+                                        * pre-authentication
+                                        * (struct iw_pmkid_cand) */
+
+#define IWEVFIRST      0x8C00
+#define IW_EVENT_IDX(cmd)      ((cmd) - IWEVFIRST)
+
+/* ------------------------- PRIVATE INFO ------------------------- */
+/*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+ * the interface (name, type of data) for its private ioctl.
+ * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
+ */
+
+#define IW_PRIV_TYPE_MASK      0x7000  /* Type of arguments */
+#define IW_PRIV_TYPE_NONE      0x0000
+#define IW_PRIV_TYPE_BYTE      0x1000  /* Char as number */
+#define IW_PRIV_TYPE_CHAR      0x2000  /* Char as character */
+#define IW_PRIV_TYPE_INT       0x4000  /* 32 bits int */
+#define IW_PRIV_TYPE_FLOAT     0x5000  /* struct iw_freq */
+#define IW_PRIV_TYPE_ADDR      0x6000  /* struct sockaddr */
+
+#define IW_PRIV_SIZE_FIXED     0x0800  /* Variable or fixed number of args */
+
+#define IW_PRIV_SIZE_MASK      0x07FF  /* Max number of those args */
+
+/*
+ * Note : if the number of args is fixed and the size < 16 octets,
+ * instead of passing a pointer we will put args in the iwreq struct...
+ */
+
+/* ----------------------- OTHER CONSTANTS ----------------------- */
+
+/* Maximum frequencies in the range struct */
+#define IW_MAX_FREQUENCIES     32
+/* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+/* Maximum bit rates in the range struct */
+#define IW_MAX_BITRATES                32
+
+/* Maximum tx powers in the range struct */
+#define IW_MAX_TXPOWER         8
+/* Note : if you more than 8 TXPowers, just set the max and min or
+ * a few of them in the struct iw_range. */
+
+/* Maximum of address that you may set with SPY */
+#define IW_MAX_SPY             8
+
+/* Maximum of address that you may get in the
+   list of access points in range */
+#define IW_MAX_AP              64
+
+/* Maximum size of the ESSID and NICKN strings */
+#define IW_ESSID_MAX_SIZE      32
+
+/* Modes of operation */
+#define IW_MODE_AUTO   0       /* Let the driver decides */
+#define IW_MODE_ADHOC  1       /* Single cell network */
+#define IW_MODE_INFRA  2       /* Multi cell network, roaming, ... */
+#define IW_MODE_MASTER 3       /* Synchronisation master or Access Point */
+#define IW_MODE_REPEAT 4       /* Wireless Repeater (forwarder) */
+#define IW_MODE_SECOND 5       /* Secondary master/repeater (backup) */
+#define IW_MODE_MONITOR        6       /* Passive monitor (listen only) */
+#define IW_MODE_MESH   7       /* Mesh (IEEE 802.11s) network */
+
+/* Statistics flags (bitmask in updated) */
+#define IW_QUAL_QUAL_UPDATED   0x01    /* Value was updated since last read */
+#define IW_QUAL_LEVEL_UPDATED  0x02
+#define IW_QUAL_NOISE_UPDATED  0x04
+#define IW_QUAL_ALL_UPDATED    0x07
+#define IW_QUAL_DBM            0x08    /* Level + Noise are dBm */
+#define IW_QUAL_QUAL_INVALID   0x10    /* Driver doesn't provide value */
+#define IW_QUAL_LEVEL_INVALID  0x20
+#define IW_QUAL_NOISE_INVALID  0x40
+#define IW_QUAL_RCPI           0x80    /* Level + Noise are 802.11k RCPI */
+#define IW_QUAL_ALL_INVALID    0x70
+
+/* Frequency flags */
+#define IW_FREQ_AUTO           0x00    /* Let the driver decides */
+#define IW_FREQ_FIXED          0x01    /* Force a specific value */
+
+/* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+#define IW_MAX_ENCODING_SIZES  8
+
+/* Maximum size of the encoding token in bytes */
+#define IW_ENCODING_TOKEN_MAX  64      /* 512 bits (for now) */
+
+/* Flags for encoding (along with the token) */
+#define IW_ENCODE_INDEX                0x00FF  /* Token index (if needed) */
+#define IW_ENCODE_FLAGS                0xFF00  /* Flags defined below */
+#define IW_ENCODE_MODE         0xF000  /* Modes defined below */
+#define IW_ENCODE_DISABLED     0x8000  /* Encoding disabled */
+#define IW_ENCODE_ENABLED      0x0000  /* Encoding enabled */
+#define IW_ENCODE_RESTRICTED   0x4000  /* Refuse non-encoded packets */
+#define IW_ENCODE_OPEN         0x2000  /* Accept non-encoded packets */
+#define IW_ENCODE_NOKEY                0x0800  /* Key is write only, so not present */
+#define IW_ENCODE_TEMP         0x0400  /* Temporary key */
+
+/* Power management flags available (along with the value, if any) */
+#define IW_POWER_ON            0x0000  /* No details... */
+#define IW_POWER_TYPE          0xF000  /* Type of parameter */
+#define IW_POWER_PERIOD                0x1000  /* Value is a period/duration of  */
+#define IW_POWER_TIMEOUT       0x2000  /* Value is a timeout (to go asleep) */
+#define IW_POWER_MODE          0x0F00  /* Power Management mode */
+#define IW_POWER_UNICAST_R     0x0100  /* Receive only unicast messages */
+#define IW_POWER_MULTICAST_R   0x0200  /* Receive only multicast messages */
+#define IW_POWER_ALL_R         0x0300  /* Receive all messages though PM */
+#define IW_POWER_FORCE_S       0x0400  /* Force PM procedure for sending unicast */
+#define IW_POWER_REPEATER      0x0800  /* Repeat broadcast messages in PM period */
+#define IW_POWER_MODIFIER      0x000F  /* Modify a parameter */
+#define IW_POWER_MIN           0x0001  /* Value is a minimum  */
+#define IW_POWER_MAX           0x0002  /* Value is a maximum */
+#define IW_POWER_RELATIVE      0x0004  /* Value is not in seconds/ms/us */
+
+/* Transmit Power flags available */
+#define IW_TXPOW_TYPE          0x00FF  /* Type of value */
+#define IW_TXPOW_DBM           0x0000  /* Value is in dBm */
+#define IW_TXPOW_MWATT         0x0001  /* Value is in mW */
+#define IW_TXPOW_RELATIVE      0x0002  /* Value is in arbitrary units */
+#define IW_TXPOW_RANGE         0x1000  /* Range of value between min/max */
+
+/* Retry limits and lifetime flags available */
+#define IW_RETRY_ON            0x0000  /* No details... */
+#define IW_RETRY_TYPE          0xF000  /* Type of parameter */
+#define IW_RETRY_LIMIT         0x1000  /* Maximum number of retries*/
+#define IW_RETRY_LIFETIME      0x2000  /* Maximum duration of retries in us */
+#define IW_RETRY_MODIFIER      0x00FF  /* Modify a parameter */
+#define IW_RETRY_MIN           0x0001  /* Value is a minimum  */
+#define IW_RETRY_MAX           0x0002  /* Value is a maximum */
+#define IW_RETRY_RELATIVE      0x0004  /* Value is not in seconds/ms/us */
+#define IW_RETRY_SHORT         0x0010  /* Value is for short packets  */
+#define IW_RETRY_LONG          0x0020  /* Value is for long packets */
+
+/* Scanning request flags */
+#define IW_SCAN_DEFAULT                0x0000  /* Default scan of the driver */
+#define IW_SCAN_ALL_ESSID      0x0001  /* Scan all ESSIDs */
+#define IW_SCAN_THIS_ESSID     0x0002  /* Scan only this ESSID */
+#define IW_SCAN_ALL_FREQ       0x0004  /* Scan all Frequencies */
+#define IW_SCAN_THIS_FREQ      0x0008  /* Scan only this Frequency */
+#define IW_SCAN_ALL_MODE       0x0010  /* Scan all Modes */
+#define IW_SCAN_THIS_MODE      0x0020  /* Scan only this Mode */
+#define IW_SCAN_ALL_RATE       0x0040  /* Scan all Bit-Rates */
+#define IW_SCAN_THIS_RATE      0x0080  /* Scan only this Bit-Rate */
+/* struct iw_scan_req scan_type */
+#define IW_SCAN_TYPE_ACTIVE 0
+#define IW_SCAN_TYPE_PASSIVE 1
+/* Maximum size of returned data */
+#define IW_SCAN_MAX_DATA       4096    /* In bytes */
+
+/* Scan capability flags - in (struct iw_range *)->scan_capa */
+#define IW_SCAN_CAPA_NONE              0x00
+#define IW_SCAN_CAPA_ESSID             0x01
+#define IW_SCAN_CAPA_BSSID             0x02
+#define IW_SCAN_CAPA_CHANNEL   0x04
+#define IW_SCAN_CAPA_MODE              0x08
+#define IW_SCAN_CAPA_RATE              0x10
+#define IW_SCAN_CAPA_TYPE              0x20
+#define IW_SCAN_CAPA_TIME              0x40
+
+/* Max number of char in custom event - use multiple of them if needed */
+#define IW_CUSTOM_MAX          256     /* In bytes */
+
+/* Generic information element */
+#define IW_GENERIC_IE_MAX      1024
+
+/* MLME requests (SIOCSIWMLME / struct iw_mlme) */
+#define IW_MLME_DEAUTH         0
+#define IW_MLME_DISASSOC       1
+#define IW_MLME_AUTH           2
+#define IW_MLME_ASSOC          3
+
+/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */
+#define IW_AUTH_INDEX          0x0FFF
+#define IW_AUTH_FLAGS          0xF000
+/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095)
+ * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the
+ * parameter that is being set/get to; value will be read/written to
+ * struct iw_param value field) */
+#define IW_AUTH_WPA_VERSION            0
+#define IW_AUTH_CIPHER_PAIRWISE                1
+#define IW_AUTH_CIPHER_GROUP           2
+#define IW_AUTH_KEY_MGMT               3
+#define IW_AUTH_TKIP_COUNTERMEASURES   4
+#define IW_AUTH_DROP_UNENCRYPTED       5
+#define IW_AUTH_80211_AUTH_ALG         6
+#define IW_AUTH_WPA_ENABLED            7
+#define IW_AUTH_RX_UNENCRYPTED_EAPOL   8
+#define IW_AUTH_ROAMING_CONTROL                9
+#define IW_AUTH_PRIVACY_INVOKED                10
+#define IW_AUTH_CIPHER_GROUP_MGMT      11
+#define IW_AUTH_MFP                    12
+
+/* IW_AUTH_WPA_VERSION values (bit field) */
+#define IW_AUTH_WPA_VERSION_DISABLED   0x00000001
+#define IW_AUTH_WPA_VERSION_WPA                0x00000002
+#define IW_AUTH_WPA_VERSION_WPA2       0x00000004
+
+/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT
+ * values (bit field) */
+#define IW_AUTH_CIPHER_NONE    0x00000001
+#define IW_AUTH_CIPHER_WEP40   0x00000002
+#define IW_AUTH_CIPHER_TKIP    0x00000004
+#define IW_AUTH_CIPHER_CCMP    0x00000008
+#define IW_AUTH_CIPHER_WEP104  0x00000010
+#define IW_AUTH_CIPHER_AES_CMAC        0x00000020
+
+/* IW_AUTH_KEY_MGMT values (bit field) */
+#define IW_AUTH_KEY_MGMT_802_1X        1
+#define IW_AUTH_KEY_MGMT_PSK   2
+
+/* IW_AUTH_80211_AUTH_ALG values (bit field) */
+#define IW_AUTH_ALG_OPEN_SYSTEM        0x00000001
+#define IW_AUTH_ALG_SHARED_KEY 0x00000002
+#define IW_AUTH_ALG_LEAP       0x00000004
+
+/* IW_AUTH_ROAMING_CONTROL values */
+#define IW_AUTH_ROAMING_ENABLE 0       /* driver/firmware based roaming */
+#define IW_AUTH_ROAMING_DISABLE        1       /* user space program used for roaming
+                                        * control */
+
+/* IW_AUTH_MFP (management frame protection) values */
+#define IW_AUTH_MFP_DISABLED   0       /* MFP disabled */
+#define IW_AUTH_MFP_OPTIONAL   1       /* MFP optional */
+#define IW_AUTH_MFP_REQUIRED   2       /* MFP required */
+
+/* SIOCSIWENCODEEXT definitions */
+#define IW_ENCODE_SEQ_MAX_SIZE 8
+/* struct iw_encode_ext ->alg */
+#define IW_ENCODE_ALG_NONE     0
+#define IW_ENCODE_ALG_WEP      1
+#define IW_ENCODE_ALG_TKIP     2
+#define IW_ENCODE_ALG_CCMP     3
+#define IW_ENCODE_ALG_PMK      4
+#define IW_ENCODE_ALG_AES_CMAC 5
+/* struct iw_encode_ext ->ext_flags */
+#define IW_ENCODE_EXT_TX_SEQ_VALID     0x00000001
+#define IW_ENCODE_EXT_RX_SEQ_VALID     0x00000002
+#define IW_ENCODE_EXT_GROUP_KEY                0x00000004
+#define IW_ENCODE_EXT_SET_TX_KEY       0x00000008
+
+/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */
+#define IW_MICFAILURE_KEY_ID   0x00000003 /* Key ID 0..3 */
+#define IW_MICFAILURE_GROUP    0x00000004
+#define IW_MICFAILURE_PAIRWISE 0x00000008
+#define IW_MICFAILURE_STAKEY   0x00000010
+#define IW_MICFAILURE_COUNT    0x00000060 /* 1 or 2 (0 = count not supported)
+                                           */
+
+/* Bit field values for enc_capa in struct iw_range */
+#define IW_ENC_CAPA_WPA                0x00000001
+#define IW_ENC_CAPA_WPA2       0x00000002
+#define IW_ENC_CAPA_CIPHER_TKIP        0x00000004
+#define IW_ENC_CAPA_CIPHER_CCMP        0x00000008
+#define IW_ENC_CAPA_4WAY_HANDSHAKE     0x00000010
+
+/* Event capability macros - in (struct iw_range *)->event_capa
+ * Because we have more than 32 possible events, we use an array of
+ * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
+#define IW_EVENT_CAPA_BASE(cmd)                ((cmd >= SIOCIWFIRSTPRIV) ? \
+                                        (cmd - SIOCIWFIRSTPRIV + 0x60) : \
+                                        (cmd - SIOCIWFIRST))
+#define IW_EVENT_CAPA_INDEX(cmd)       (IW_EVENT_CAPA_BASE(cmd) >> 5)
+#define IW_EVENT_CAPA_MASK(cmd)                (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F))
+/* Event capability constants - event autogenerated by the kernel
+ * This list is valid for most 802.11 devices, customise as needed... */
+#define IW_EVENT_CAPA_K_0      (IW_EVENT_CAPA_MASK(0x8B04) | \
+                                IW_EVENT_CAPA_MASK(0x8B06) | \
+                                IW_EVENT_CAPA_MASK(0x8B1A))
+#define IW_EVENT_CAPA_K_1      (IW_EVENT_CAPA_MASK(0x8B2A))
+/* "Easy" macro to set events in iw_range (less efficient) */
+#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd))
+#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; }
+
+
+/****************************** TYPES ******************************/
+
+/* --------------------------- SUBTYPES --------------------------- */
+/*
+ *     Generic format for most parameters that fit in an int
+ */
+struct iw_param
+{
+  __s32                value;          /* The value of the parameter itself */
+  __u8         fixed;          /* Hardware should not use auto select */
+  __u8         disabled;       /* Disable the feature */
+  __u16                flags;          /* Various specifc flags (if any) */
+};
+
+/*
+ *     For all data larger than 16 octets, we need to use a
+ *     pointer to memory allocated in user space.
+ */
+struct iw_point
+{
+  void *pointer;       /* Pointer to the data  (in user space) */
+  __u16                length;         /* number of fields or size in bytes */
+  __u16                flags;          /* Optional params */
+};
+
+
+/*
+ *     A frequency
+ *     For numbers lower than 10^9, we encode the number in 'm' and
+ *     set 'e' to 0
+ *     For number greater than 10^9, we divide it by the lowest power
+ *     of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
+ *     The power of 10 is in 'e', the result of the division is in 'm'.
+ */
+struct iw_freq
+{
+       __s32           m;              /* Mantissa */
+       __s16           e;              /* Exponent */
+       __u8            i;              /* List index (when in range struct) */
+       __u8            flags;          /* Flags (fixed/auto) */
+};
+
+/*
+ *     Quality of the link
+ */
+struct iw_quality
+{
+       __u8            qual;           /* link quality (%retries, SNR,
+                                          %missed beacons or better...) */
+       __u8            level;          /* signal level (dBm) */
+       __u8            noise;          /* noise level (dBm) */
+       __u8            updated;        /* Flags to know if updated */
+};
+
+/*
+ *     Packet discarded in the wireless adapter due to
+ *     "wireless" specific problems...
+ *     Note : the list of counter and statistics in net_device_stats
+ *     is already pretty exhaustive, and you should use that first.
+ *     This is only additional stats...
+ */
+struct iw_discarded
+{
+       __u32           nwid;           /* Rx : Wrong nwid/essid */
+       __u32           code;           /* Rx : Unable to code/decode (WEP) */
+       __u32           fragment;       /* Rx : Can't perform MAC reassembly */
+       __u32           retries;        /* Tx : Max MAC retries num reached */
+       __u32           misc;           /* Others cases */
+};
+
+/*
+ *     Packet/Time period missed in the wireless adapter due to
+ *     "wireless" specific problems...
+ */
+struct iw_missed
+{
+       __u32           beacon;         /* Missed beacons/superframe */
+};
+
+/*
+ *     Quality range (for spy threshold)
+ */
+struct iw_thrspy
+{
+       struct sockaddr         addr;           /* Source address (hw/mac) */
+       struct iw_quality       qual;           /* Quality of the link */
+       struct iw_quality       low;            /* Low threshold */
+       struct iw_quality       high;           /* High threshold */
+};
+
+/*
+ *     Optional data for scan request
+ *
+ *     Note: these optional parameters are controlling parameters for the
+ *     scanning behavior, these do not apply to getting scan results
+ *     (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and
+ *     provide a merged results with all BSSes even if the previous scan
+ *     request limited scanning to a subset, e.g., by specifying an SSID.
+ *     Especially, scan results are required to include an entry for the
+ *     current BSS if the driver is in Managed mode and associated with an AP.
+ */
+struct iw_scan_req
+{
+       __u8            scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
+       __u8            essid_len;
+       __u8            num_channels; /* num entries in channel_list;
+                                      * 0 = scan all allowed channels */
+       __u8            flags; /* reserved as padding; use zero, this may
+                               * be used in the future for adding flags
+                               * to request different scan behavior */
+       struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
+                               * individual address of a specific BSS */
+
+       /*
+        * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using
+        * the current ESSID. This allows scan requests for specific ESSID
+        * without having to change the current ESSID and potentially breaking
+        * the current association.
+        */
+       __u8            essid[IW_ESSID_MAX_SIZE];
+
+       /*
+        * Optional parameters for changing the default scanning behavior.
+        * These are based on the MLME-SCAN.request from IEEE Std 802.11.
+        * TU is 1.024 ms. If these are set to 0, driver is expected to use
+        * reasonable default values. min_channel_time defines the time that
+        * will be used to wait for the first reply on each channel. If no
+        * replies are received, next channel will be scanned after this. If
+        * replies are received, total time waited on the channel is defined by
+        * max_channel_time.
+        */
+       __u32           min_channel_time; /* in TU */
+       __u32           max_channel_time; /* in TU */
+
+       struct iw_freq  channel_list[IW_MAX_FREQUENCIES];
+};
+
+/* ------------------------- WPA SUPPORT ------------------------- */
+
+/*
+ *     Extended data structure for get/set encoding (this is used with
+ *     SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_*
+ *     flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and
+ *     only the data contents changes (key data -> this structure, including
+ *     key data).
+ *
+ *     If the new key is the first group key, it will be set as the default
+ *     TX key. Otherwise, default TX key index is only changed if
+ *     IW_ENCODE_EXT_SET_TX_KEY flag is set.
+ *
+ *     Key will be changed with SIOCSIWENCODEEXT in all cases except for
+ *     special "change TX key index" operation which is indicated by setting
+ *     key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY.
+ *
+ *     tx_seq/rx_seq are only used when respective
+ *     IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal
+ *     TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start
+ *     TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally
+ *     used only by an Authenticator (AP or an IBSS station) to get the
+ *     current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and
+ *     RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for
+ *     debugging/testing.
+ */
+struct iw_encode_ext
+{
+       __u32           ext_flags; /* IW_ENCODE_EXT_* */
+       __u8            tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+       __u8            rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+       struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
+                              * (group) keys or unicast address for
+                              * individual keys */
+       __u16           alg; /* IW_ENCODE_ALG_* */
+       __u16           key_len;
+       __u8            key[0];
+};
+
+/* SIOCSIWMLME data */
+struct iw_mlme
+{
+       __u16           cmd; /* IW_MLME_* */
+       __u16           reason_code;
+       struct sockaddr addr;
+};
+
+/* SIOCSIWPMKSA data */
+#define IW_PMKSA_ADD           1
+#define IW_PMKSA_REMOVE                2
+#define IW_PMKSA_FLUSH         3
+
+#define IW_PMKID_LEN   16
+
+struct iw_pmksa
+{
+       __u32           cmd; /* IW_PMKSA_* */
+       struct sockaddr bssid;
+       __u8            pmkid[IW_PMKID_LEN];
+};
+
+/* IWEVMICHAELMICFAILURE data */
+struct iw_michaelmicfailure
+{
+       __u32           flags;
+       struct sockaddr src_addr;
+       __u8            tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
+};
+
+/* IWEVPMKIDCAND data */
+#define IW_PMKID_CAND_PREAUTH  0x00000001 /* RNS pre-authentication enabled */
+struct iw_pmkid_cand
+{
+       __u32           flags; /* IW_PMKID_CAND_* */
+       __u32           index; /* the smaller the index, the higher the
+                               * priority */
+       struct sockaddr bssid;
+};
+
+/* ------------------------ WIRELESS STATS ------------------------ */
+/*
+ * Wireless statistics (used for /proc/net/wireless)
+ */
+struct iw_statistics
+{
+       __u16           status;         /* Status
+                                        * - device dependent for now */
+
+       struct iw_quality       qual;           /* Quality of the link
+                                                * (instant/mean/max) */
+       struct iw_discarded     discard;        /* Packet discarded counts */
+       struct iw_missed        miss;           /* Packet missed counts */
+};
+
+/* ------------------------ IOCTL REQUEST ------------------------ */
+/*
+ * This structure defines the payload of an ioctl, and is used 
+ * below.
+ *
+ * Note that this structure should fit on the memory footprint
+ * of iwreq (which is the same as ifreq), which mean a max size of
+ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
+ * You should check this when increasing the structures defined
+ * above in this file...
+ */
+union  iwreq_data
+{
+       /* Config - generic */
+       char            name[IFNAMSIZ];
+       /* Name : used to verify the presence of  wireless extensions.
+        * Name of the protocol/provider... */
+
+       struct iw_point essid;          /* Extended network name */
+       struct iw_param nwid;           /* network id (or domain - the cell) */
+       struct iw_freq  freq;           /* frequency or channel :
+                                        * 0-1000 = channel
+                                        * > 1000 = frequency in Hz */
+
+       struct iw_param sens;           /* signal level threshold */
+       struct iw_param bitrate;        /* default bit rate */
+       struct iw_param txpower;        /* default transmit power */
+       struct iw_param rts;            /* RTS threshold threshold */
+       struct iw_param frag;           /* Fragmentation threshold */
+       __u32           mode;           /* Operation mode */
+       struct iw_param retry;          /* Retry limits & lifetime */
+
+       struct iw_point encoding;       /* Encoding stuff : tokens */
+       struct iw_param power;          /* PM duration/timeout */
+       struct iw_quality qual;         /* Quality part of statistics */
+
+       struct sockaddr ap_addr;        /* Access point address */
+       struct sockaddr addr;           /* Destination address (hw/mac) */
+
+       struct iw_param param;          /* Other small parameters */
+       struct iw_point data;           /* Other large parameters */
+};
+
+/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+ * Do I need to remind you about structure size (32 octets) ?
+ */
+struct iwreq 
+{
+       union
+       {
+               char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "eth0" */
+       } ifr_ifrn;
+
+       /* Data part (defined just above) */
+       union   iwreq_data      u;
+};
+
+/* -------------------------- IOCTL DATA -------------------------- */
+/*
+ *     For those ioctl which want to exchange mode data that what could
+ *     fit in the above structure...
+ */
+
+/*
+ *     Range of parameters
+ */
+
+struct iw_range
+{
+       /* Informative stuff (to choose between different interface) */
+       __u32           throughput;     /* To give an idea... */
+       /* In theory this value should be the maximum benchmarked
+        * TCP/IP throughput, because with most of these devices the
+        * bit rate is meaningless (overhead an co) to estimate how
+        * fast the connection will go and pick the fastest one.
+        * I suggest people to play with Netperf or any benchmark...
+        */
+
+       /* NWID (or domain id) */
+       __u32           min_nwid;       /* Minimal NWID we are able to set */
+       __u32           max_nwid;       /* Maximal NWID we are able to set */
+
+       /* Old Frequency (backward compat - moved lower ) */
+       __u16           old_num_channels;
+       __u8            old_num_frequency;
+
+       /* Scan capabilities */
+       __u8            scan_capa;      /* IW_SCAN_CAPA_* bit field */
+
+       /* Wireless event capability bitmasks */
+       __u32           event_capa[6];
+
+       /* signal level threshold range */
+       __s32           sensitivity;
+
+       /* Quality of link & SNR stuff */
+       /* Quality range (link, level, noise)
+        * If the quality is absolute, it will be in the range [0 ; max_qual],
+        * if the quality is dBm, it will be in the range [max_qual ; 0].
+        * Don't forget that we use 8 bit arithmetics... */
+       struct iw_quality       max_qual;       /* Quality of the link */
+       /* This should contain the average/typical values of the quality
+        * indicator. This should be the threshold between a "good" and
+        * a "bad" link (example : monitor going from green to orange).
+        * Currently, user space apps like quality monitors don't have any
+        * way to calibrate the measurement. With this, they can split
+        * the range between 0 and max_qual in different quality level
+        * (using a geometric subdivision centered on the average).
+        * I expect that people doing the user space apps will feedback
+        * us on which value we need to put in each driver... */
+       struct iw_quality       avg_qual;       /* Quality of the link */
+
+       /* Rates */
+       __u8            num_bitrates;   /* Number of entries in the list */
+       __s32           bitrate[IW_MAX_BITRATES];       /* list, in bps */
+
+       /* RTS threshold */
+       __s32           min_rts;        /* Minimal RTS threshold */
+       __s32           max_rts;        /* Maximal RTS threshold */
+
+       /* Frag threshold */
+       __s32           min_frag;       /* Minimal frag threshold */
+       __s32           max_frag;       /* Maximal frag threshold */
+
+       /* Power Management duration & timeout */
+       __s32           min_pmp;        /* Minimal PM period */
+       __s32           max_pmp;        /* Maximal PM period */
+       __s32           min_pmt;        /* Minimal PM timeout */
+       __s32           max_pmt;        /* Maximal PM timeout */
+       __u16           pmp_flags;      /* How to decode max/min PM period */
+       __u16           pmt_flags;      /* How to decode max/min PM timeout */
+       __u16           pm_capa;        /* What PM options are supported */
+
+       /* Encoder stuff */
+       __u16   encoding_size[IW_MAX_ENCODING_SIZES];   /* Different token sizes */
+       __u8    num_encoding_sizes;     /* Number of entry in the list */
+       __u8    max_encoding_tokens;    /* Max number of tokens */
+       /* For drivers that need a "login/passwd" form */
+       __u8    encoding_login_index;   /* token index for login token */
+
+       /* Transmit power */
+       __u16           txpower_capa;   /* What options are supported */
+       __u8            num_txpower;    /* Number of entries in the list */
+       __s32           txpower[IW_MAX_TXPOWER];        /* list, in bps */
+
+       /* Wireless Extension version info */
+       __u8            we_version_compiled;    /* Must be WIRELESS_EXT */
+       __u8            we_version_source;      /* Last update of source */
+
+       /* Retry limits and lifetime */
+       __u16           retry_capa;     /* What retry options are supported */
+       __u16           retry_flags;    /* How to decode max/min retry limit */
+       __u16           r_time_flags;   /* How to decode max/min retry life */
+       __s32           min_retry;      /* Minimal number of retries */
+       __s32           max_retry;      /* Maximal number of retries */
+       __s32           min_r_time;     /* Minimal retry lifetime */
+       __s32           max_r_time;     /* Maximal retry lifetime */
+
+       /* Frequency */
+       __u16           num_channels;   /* Number of channels [0; num - 1] */
+       __u8            num_frequency;  /* Number of entry in the list */
+       struct iw_freq  freq[IW_MAX_FREQUENCIES];       /* list */
+       /* Note : this frequency list doesn't need to fit channel numbers,
+        * because each entry contain its channel index */
+
+       __u32           enc_capa;       /* IW_ENC_CAPA_* bit field */
+};
+
+/*
+ * Private ioctl interface information
+ */
+struct iw_priv_args
+{
+       __u32           cmd;            /* Number of the ioctl to issue */
+       __u16           set_args;       /* Type and number of args */
+       __u16           get_args;       /* Type and number of args */
+       char            name[IFNAMSIZ]; /* Name of the extension */
+};
+
+/* ----------------------- WIRELESS EVENTS ----------------------- */
+/*
+ * Wireless events are carried through the rtnetlink socket to user
+ * space. They are encapsulated in the IFLA_WIRELESS field of
+ * a RTM_NEWLINK message.
+ */
+
+/*
+ * A Wireless Event. Contains basically the same data as the ioctl...
+ */
+struct iw_event
+{
+       __u16           len;                    /* Real length of this stuff */
+       __u16           cmd;                    /* Wireless IOCTL */
+       union iwreq_data        u;              /* IOCTL fixed payload */
+};
+
+/* Size of the Event prefix (including padding and alignement junk) */
+#define IW_EV_LCP_LEN  (sizeof(struct iw_event) - sizeof(union iwreq_data))
+/* Size of the various events */
+#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
+#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
+#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
+#define IW_EV_PARAM_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
+
+/* iw_point events are special. First, the payload (extra data) come at
+ * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second,
+ * we omit the pointer, so start at an offset. */
+#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \
+                         (char *) NULL)
+#define IW_EV_POINT_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_point) - \
+                        IW_EV_POINT_OFF)
+
+
+/* Size of the Event prefix when packed in stream */
+#define IW_EV_LCP_PK_LEN       (4)
+/* Size of the various events when packed in stream */
+#define IW_EV_CHAR_PK_LEN      (IW_EV_LCP_PK_LEN + IFNAMSIZ)
+#define IW_EV_UINT_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(__u32))
+#define IW_EV_FREQ_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct iw_freq))
+#define IW_EV_PARAM_PK_LEN     (IW_EV_LCP_PK_LEN + sizeof(struct iw_param))
+#define IW_EV_ADDR_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct sockaddr))
+#define IW_EV_QUAL_PK_LEN      (IW_EV_LCP_PK_LEN + sizeof(struct iw_quality))
+#define IW_EV_POINT_PK_LEN     (IW_EV_LCP_PK_LEN + 4)
+
+#endif /* _LINUX_WIRELESS_H */
diff --git a/lib/libdss-include/linux/x25.h b/lib/libdss-include/linux/x25.h
new file mode 100644 (file)
index 0000000..810cce6
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * These are the public elements of the Linux kernel X.25 implementation.
+ *
+ *     History
+ *     mar/20/00       Daniela Squassoni Disabling/enabling of facilities 
+ *                                       negotiation.
+ *     apr/02/05       Shaun Pereira Selective sub address matching with
+ *                                     call user data
+ */
+
+#ifndef        X25_KERNEL_H
+#define        X25_KERNEL_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+
+#define        SIOCX25GSUBSCRIP        (SIOCPROTOPRIVATE + 0)
+#define        SIOCX25SSUBSCRIP        (SIOCPROTOPRIVATE + 1)
+#define        SIOCX25GFACILITIES      (SIOCPROTOPRIVATE + 2)
+#define        SIOCX25SFACILITIES      (SIOCPROTOPRIVATE + 3)
+#define        SIOCX25GCALLUSERDATA    (SIOCPROTOPRIVATE + 4)
+#define        SIOCX25SCALLUSERDATA    (SIOCPROTOPRIVATE + 5)
+#define        SIOCX25GCAUSEDIAG       (SIOCPROTOPRIVATE + 6)
+#define SIOCX25SCUDMATCHLEN    (SIOCPROTOPRIVATE + 7)
+#define SIOCX25CALLACCPTAPPRV   (SIOCPROTOPRIVATE + 8)
+#define SIOCX25SENDCALLACCPT    (SIOCPROTOPRIVATE + 9)
+#define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10)
+#define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11)
+#define SIOCX25SCAUSEDIAG      (SIOCPROTOPRIVATE + 12)
+
+/*
+ *     Values for {get,set}sockopt.
+ */
+#define        X25_QBITINCL            1
+
+/*
+ *     X.25 Packet Size values.
+ */
+#define        X25_PS16                4
+#define        X25_PS32                5
+#define        X25_PS64                6
+#define        X25_PS128               7
+#define        X25_PS256               8
+#define        X25_PS512               9
+#define        X25_PS1024              10
+#define        X25_PS2048              11
+#define        X25_PS4096              12
+
+/*
+ * An X.121 address, it is held as ASCII text, null terminated, up to 15
+ * digits and a null terminator.
+ */
+struct x25_address {
+       char x25_addr[16];
+};
+
+/*
+ *     Linux X.25 Address structure, used for bind, and connect mostly.
+ */
+struct sockaddr_x25 {
+       __kernel_sa_family_t sx25_family;       /* Must be AF_X25 */
+       struct x25_address sx25_addr;           /* X.121 Address */
+};
+
+/*
+ *     DTE/DCE subscription options.
+ *
+ *      As this is missing lots of options, user should expect major
+ *     changes of this structure in 2.5.x which might break compatibilty.
+ *      The somewhat ugly dimension 200-sizeof() is needed to maintain
+ *     backward compatibility.
+ */
+struct x25_subscrip_struct {
+       char device[200-sizeof(unsigned long)];
+       unsigned long   global_facil_mask;      /* 0 to disable negotiation */
+       unsigned int    extended;
+};
+
+/* values for above global_facil_mask */
+
+#define        X25_MASK_REVERSE        0x01    
+#define        X25_MASK_THROUGHPUT     0x02
+#define        X25_MASK_PACKET_SIZE    0x04
+#define        X25_MASK_WINDOW_SIZE    0x08
+
+#define X25_MASK_CALLING_AE 0x10
+#define X25_MASK_CALLED_AE 0x20
+
+
+/*
+ *     Routing table control structure.
+ */
+struct x25_route_struct {
+       struct x25_address address;
+       unsigned int       sigdigits;
+       char               device[200];
+};
+
+/*
+ *     Facilities structure.
+ */
+struct x25_facilities {
+       unsigned int    winsize_in, winsize_out;
+       unsigned int    pacsize_in, pacsize_out;
+       unsigned int    throughput;
+       unsigned int    reverse;
+};
+
+/*
+* ITU DTE facilities
+* Only the called and calling address
+* extension are currently implemented.
+* The rest are in place to avoid the struct
+* changing size if someone needs them later
+*/
+
+struct x25_dte_facilities {
+       __u16 delay_cumul;
+       __u16 delay_target;
+       __u16 delay_max;
+       __u8 min_throughput;
+       __u8 expedited;
+       __u8 calling_len;
+       __u8 called_len;
+       __u8 calling_ae[20];
+       __u8 called_ae[20];
+};
+
+/*
+ *     Call User Data structure.
+ */
+struct x25_calluserdata {
+       unsigned int    cudlength;
+       unsigned char   cuddata[128];
+};
+
+/*
+ *     Call clearing Cause and Diagnostic structure.
+ */
+struct x25_causediag {
+       unsigned char   cause;
+       unsigned char   diagnostic;
+};
+
+/*
+ *     Further optional call user data match length selection
+ */
+struct x25_subaddr {
+       unsigned int cudmatchlength;
+};
+
+#endif
diff --git a/lib/libdss-include/linux/xattr.h b/lib/libdss-include/linux/xattr.h
new file mode 100644 (file)
index 0000000..2634d03
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+  File: linux/xattr.h
+
+  Extended attributes handling.
+
+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
+  Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
+  Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
+*/
+
+#include <linux/libc-compat.h>
+
+#ifndef _LINUX_XATTR_H
+#define _LINUX_XATTR_H
+
+#if __UAPI_DEF_XATTR
+#define __USE_KERNEL_XATTR_DEFS
+
+#define XATTR_CREATE   0x1     /* set value, fail if attr already exists */
+#define XATTR_REPLACE  0x2     /* set value, fail if attr does not exist */
+#endif
+
+/* Namespaces */
+#define XATTR_OS2_PREFIX "os2."
+#define XATTR_OS2_PREFIX_LEN (sizeof(XATTR_OS2_PREFIX) - 1)
+
+#define XATTR_MAC_OSX_PREFIX "osx."
+#define XATTR_MAC_OSX_PREFIX_LEN (sizeof(XATTR_MAC_OSX_PREFIX) - 1)
+
+#define XATTR_BTRFS_PREFIX "btrfs."
+#define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1)
+
+#define XATTR_SECURITY_PREFIX  "security."
+#define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1)
+
+#define XATTR_SYSTEM_PREFIX "system."
+#define XATTR_SYSTEM_PREFIX_LEN (sizeof(XATTR_SYSTEM_PREFIX) - 1)
+
+#define XATTR_TRUSTED_PREFIX "trusted."
+#define XATTR_TRUSTED_PREFIX_LEN (sizeof(XATTR_TRUSTED_PREFIX) - 1)
+
+#define XATTR_USER_PREFIX "user."
+#define XATTR_USER_PREFIX_LEN (sizeof(XATTR_USER_PREFIX) - 1)
+
+/* Security namespace */
+#define XATTR_EVM_SUFFIX "evm"
+#define XATTR_NAME_EVM XATTR_SECURITY_PREFIX XATTR_EVM_SUFFIX
+
+#define XATTR_IMA_SUFFIX "ima"
+#define XATTR_NAME_IMA XATTR_SECURITY_PREFIX XATTR_IMA_SUFFIX
+
+#define XATTR_SELINUX_SUFFIX "selinux"
+#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX
+
+#define XATTR_SMACK_SUFFIX "SMACK64"
+#define XATTR_SMACK_IPIN "SMACK64IPIN"
+#define XATTR_SMACK_IPOUT "SMACK64IPOUT"
+#define XATTR_SMACK_EXEC "SMACK64EXEC"
+#define XATTR_SMACK_TRANSMUTE "SMACK64TRANSMUTE"
+#define XATTR_SMACK_MMAP "SMACK64MMAP"
+#define XATTR_NAME_SMACK XATTR_SECURITY_PREFIX XATTR_SMACK_SUFFIX
+#define XATTR_NAME_SMACKIPIN   XATTR_SECURITY_PREFIX XATTR_SMACK_IPIN
+#define XATTR_NAME_SMACKIPOUT  XATTR_SECURITY_PREFIX XATTR_SMACK_IPOUT
+#define XATTR_NAME_SMACKEXEC   XATTR_SECURITY_PREFIX XATTR_SMACK_EXEC
+#define XATTR_NAME_SMACKTRANSMUTE XATTR_SECURITY_PREFIX XATTR_SMACK_TRANSMUTE
+#define XATTR_NAME_SMACKMMAP XATTR_SECURITY_PREFIX XATTR_SMACK_MMAP
+
+#define XATTR_CAPS_SUFFIX "capability"
+#define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX
+
+#define XATTR_POSIX_ACL_ACCESS  "posix_acl_access"
+#define XATTR_NAME_POSIX_ACL_ACCESS XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_ACCESS
+#define XATTR_POSIX_ACL_DEFAULT  "posix_acl_default"
+#define XATTR_NAME_POSIX_ACL_DEFAULT XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_DEFAULT
+
+
+#endif /* _LINUX_XATTR_H */
diff --git a/lib/libdss-include/linux/xfrm.h b/lib/libdss-include/linux/xfrm.h
new file mode 100644 (file)
index 0000000..b8f5451
--- /dev/null
@@ -0,0 +1,526 @@
+#ifndef _LINUX_XFRM_H
+#define _LINUX_XFRM_H
+
+#include <linux/in6.h>
+#include <linux/types.h>
+
+/* All of the structures in this file may not change size as they are
+ * passed into the kernel from userspace via netlink sockets.
+ */
+
+/* Structure to encapsulate addresses. I do not want to use
+ * "standard" structure. My apologies.
+ */
+typedef union {
+       __be32          a4;
+       __be32          a6[4];
+       struct in6_addr in6;
+} xfrm_address_t;
+
+/* Ident of a specific xfrm_state. It is used on input to lookup
+ * the state by (spi,daddr,ah/esp) or to store information about
+ * spi, protocol and tunnel address on output.
+ */
+struct xfrm_id {
+       xfrm_address_t  daddr;
+       __be32          spi;
+       __u8            proto;
+};
+
+struct xfrm_sec_ctx {
+       __u8    ctx_doi;
+       __u8    ctx_alg;
+       __u16   ctx_len;
+       __u32   ctx_sid;
+       char    ctx_str[0];
+};
+
+/* Security Context Domains of Interpretation */
+#define XFRM_SC_DOI_RESERVED 0
+#define XFRM_SC_DOI_LSM 1
+
+/* Security Context Algorithms */
+#define XFRM_SC_ALG_RESERVED 0
+#define XFRM_SC_ALG_SELINUX 1
+
+/* Selector, used as selector both on policy rules (SPD) and SAs. */
+
+struct xfrm_selector {
+       xfrm_address_t  daddr;
+       xfrm_address_t  saddr;
+       __be16  dport;
+       __be16  dport_mask;
+       __be16  sport;
+       __be16  sport_mask;
+       __u16   family;
+       __u8    prefixlen_d;
+       __u8    prefixlen_s;
+       __u8    proto;
+       int     ifindex;
+       __kernel_uid32_t        user;
+};
+
+#define XFRM_INF (~(__u64)0)
+
+struct xfrm_lifetime_cfg {
+       __u64   soft_byte_limit;
+       __u64   hard_byte_limit;
+       __u64   soft_packet_limit;
+       __u64   hard_packet_limit;
+       __u64   soft_add_expires_seconds;
+       __u64   hard_add_expires_seconds;
+       __u64   soft_use_expires_seconds;
+       __u64   hard_use_expires_seconds;
+};
+
+struct xfrm_lifetime_cur {
+       __u64   bytes;
+       __u64   packets;
+       __u64   add_time;
+       __u64   use_time;
+};
+
+struct xfrm_replay_state {
+       __u32   oseq;
+       __u32   seq;
+       __u32   bitmap;
+};
+
+#define XFRMA_REPLAY_ESN_MAX   4096
+
+struct xfrm_replay_state_esn {
+       unsigned int    bmp_len;
+       __u32           oseq;
+       __u32           seq;
+       __u32           oseq_hi;
+       __u32           seq_hi;
+       __u32           replay_window;
+       __u32           bmp[0];
+};
+
+struct xfrm_algo {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_algo_auth {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       unsigned int    alg_trunc_len;  /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_algo_aead {
+       char            alg_name[64];
+       unsigned int    alg_key_len;    /* in bits */
+       unsigned int    alg_icv_len;    /* in bits */
+       char            alg_key[0];
+};
+
+struct xfrm_stats {
+       __u32   replay_window;
+       __u32   replay;
+       __u32   integrity_failed;
+};
+
+enum {
+       XFRM_POLICY_TYPE_MAIN   = 0,
+       XFRM_POLICY_TYPE_SUB    = 1,
+       XFRM_POLICY_TYPE_MAX    = 2,
+       XFRM_POLICY_TYPE_ANY    = 255
+};
+
+enum {
+       XFRM_POLICY_IN  = 0,
+       XFRM_POLICY_OUT = 1,
+       XFRM_POLICY_FWD = 2,
+       XFRM_POLICY_MASK = 3,
+       XFRM_POLICY_MAX = 3
+};
+
+enum {
+       XFRM_SHARE_ANY,         /* No limitations */
+       XFRM_SHARE_SESSION,     /* For this session only */
+       XFRM_SHARE_USER,        /* For this user only */
+       XFRM_SHARE_UNIQUE       /* Use once */
+};
+
+#define XFRM_MODE_TRANSPORT 0
+#define XFRM_MODE_TUNNEL 1
+#define XFRM_MODE_ROUTEOPTIMIZATION 2
+#define XFRM_MODE_IN_TRIGGER 3
+#define XFRM_MODE_BEET 4
+#define XFRM_MODE_MAX 5
+
+/* Netlink configuration messages.  */
+enum {
+       XFRM_MSG_BASE = 0x10,
+
+       XFRM_MSG_NEWSA = 0x10,
+#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
+       XFRM_MSG_DELSA,
+#define XFRM_MSG_DELSA XFRM_MSG_DELSA
+       XFRM_MSG_GETSA,
+#define XFRM_MSG_GETSA XFRM_MSG_GETSA
+
+       XFRM_MSG_NEWPOLICY,
+#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
+       XFRM_MSG_DELPOLICY,
+#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
+       XFRM_MSG_GETPOLICY,
+#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
+
+       XFRM_MSG_ALLOCSPI,
+#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
+       XFRM_MSG_ACQUIRE,
+#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
+       XFRM_MSG_EXPIRE,
+#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
+
+       XFRM_MSG_UPDPOLICY,
+#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
+       XFRM_MSG_UPDSA,
+#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
+
+       XFRM_MSG_POLEXPIRE,
+#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
+
+       XFRM_MSG_FLUSHSA,
+#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
+       XFRM_MSG_FLUSHPOLICY,
+#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
+
+       XFRM_MSG_NEWAE,
+#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
+       XFRM_MSG_GETAE,
+#define XFRM_MSG_GETAE XFRM_MSG_GETAE
+
+       XFRM_MSG_REPORT,
+#define XFRM_MSG_REPORT XFRM_MSG_REPORT
+
+       XFRM_MSG_MIGRATE,
+#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
+
+       XFRM_MSG_NEWSADINFO,
+#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
+       XFRM_MSG_GETSADINFO,
+#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
+
+       XFRM_MSG_NEWSPDINFO,
+#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
+       XFRM_MSG_GETSPDINFO,
+#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
+
+       XFRM_MSG_MAPPING,
+#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
+       __XFRM_MSG_MAX
+};
+#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
+
+#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
+
+/*
+ * Generic LSM security context for comunicating to user space
+ * NOTE: Same format as sadb_x_sec_ctx
+ */
+struct xfrm_user_sec_ctx {
+       __u16                   len;
+       __u16                   exttype;
+       __u8                    ctx_alg;  /* LSMs: e.g., selinux == 1 */
+       __u8                    ctx_doi;
+       __u16                   ctx_len;
+};
+
+struct xfrm_user_tmpl {
+       struct xfrm_id          id;
+       __u16                   family;
+       xfrm_address_t          saddr;
+       __u32                   reqid;
+       __u8                    mode;
+       __u8                    share;
+       __u8                    optional;
+       __u32                   aalgos;
+       __u32                   ealgos;
+       __u32                   calgos;
+};
+
+struct xfrm_encap_tmpl {
+       __u16           encap_type;
+       __be16          encap_sport;
+       __be16          encap_dport;
+       xfrm_address_t  encap_oa;
+};
+
+/* AEVENT flags  */
+enum xfrm_ae_ftype_t {
+       XFRM_AE_UNSPEC,
+       XFRM_AE_RTHR=1, /* replay threshold*/
+       XFRM_AE_RVAL=2, /* replay value */
+       XFRM_AE_LVAL=4, /* lifetime value */
+       XFRM_AE_ETHR=8, /* expiry timer threshold */
+       XFRM_AE_CR=16, /* Event cause is replay update */
+       XFRM_AE_CE=32, /* Event cause is timer expiry */
+       XFRM_AE_CU=64, /* Event cause is policy update */
+       __XFRM_AE_MAX
+
+#define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
+};
+
+struct xfrm_userpolicy_type {
+       __u8            type;
+       __u16           reserved1;
+       __u8            reserved2;
+};
+
+/* Netlink message attributes.  */
+enum xfrm_attr_type_t {
+       XFRMA_UNSPEC,
+       XFRMA_ALG_AUTH,         /* struct xfrm_algo */
+       XFRMA_ALG_CRYPT,        /* struct xfrm_algo */
+       XFRMA_ALG_COMP,         /* struct xfrm_algo */
+       XFRMA_ENCAP,            /* struct xfrm_algo + struct xfrm_encap_tmpl */
+       XFRMA_TMPL,             /* 1 or more struct xfrm_user_tmpl */
+       XFRMA_SA,               /* struct xfrm_usersa_info  */
+       XFRMA_POLICY,           /*struct xfrm_userpolicy_info */
+       XFRMA_SEC_CTX,          /* struct xfrm_sec_ctx */
+       XFRMA_LTIME_VAL,
+       XFRMA_REPLAY_VAL,
+       XFRMA_REPLAY_THRESH,
+       XFRMA_ETIMER_THRESH,
+       XFRMA_SRCADDR,          /* xfrm_address_t */
+       XFRMA_COADDR,           /* xfrm_address_t */
+       XFRMA_LASTUSED,         /* unsigned long  */
+       XFRMA_POLICY_TYPE,      /* struct xfrm_userpolicy_type */
+       XFRMA_MIGRATE,
+       XFRMA_ALG_AEAD,         /* struct xfrm_algo_aead */
+       XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */
+       XFRMA_ALG_AUTH_TRUNC,   /* struct xfrm_algo_auth */
+       XFRMA_MARK,             /* struct xfrm_mark */
+       XFRMA_TFCPAD,           /* __u32 */
+       XFRMA_REPLAY_ESN_VAL,   /* struct xfrm_replay_esn */
+       XFRMA_SA_EXTRA_FLAGS,   /* __u32 */
+       XFRMA_PROTO,            /* __u8 */
+       XFRMA_ADDRESS_FILTER,   /* struct xfrm_address_filter */
+       __XFRMA_MAX
+
+#define XFRMA_MAX (__XFRMA_MAX - 1)
+};
+
+struct xfrm_mark {
+       __u32           v; /* value */
+       __u32           m; /* mask */
+};
+
+enum xfrm_sadattr_type_t {
+       XFRMA_SAD_UNSPEC,
+       XFRMA_SAD_CNT,
+       XFRMA_SAD_HINFO,
+       __XFRMA_SAD_MAX
+
+#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
+};
+
+struct xfrmu_sadhinfo {
+       __u32 sadhcnt; /* current hash bkts */
+       __u32 sadhmcnt; /* max allowed hash bkts */
+};
+
+enum xfrm_spdattr_type_t {
+       XFRMA_SPD_UNSPEC,
+       XFRMA_SPD_INFO,
+       XFRMA_SPD_HINFO,
+       XFRMA_SPD_IPV4_HTHRESH,
+       XFRMA_SPD_IPV6_HTHRESH,
+       __XFRMA_SPD_MAX
+
+#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
+};
+
+struct xfrmu_spdinfo {
+       __u32 incnt;
+       __u32 outcnt;
+       __u32 fwdcnt;
+       __u32 inscnt;
+       __u32 outscnt;
+       __u32 fwdscnt;
+};
+
+struct xfrmu_spdhinfo {
+       __u32 spdhcnt;
+       __u32 spdhmcnt;
+};
+
+struct xfrmu_spdhthresh {
+       __u8 lbits;
+       __u8 rbits;
+};
+
+struct xfrm_usersa_info {
+       struct xfrm_selector            sel;
+       struct xfrm_id                  id;
+       xfrm_address_t                  saddr;
+       struct xfrm_lifetime_cfg        lft;
+       struct xfrm_lifetime_cur        curlft;
+       struct xfrm_stats               stats;
+       __u32                           seq;
+       __u32                           reqid;
+       __u16                           family;
+       __u8                            mode;           /* XFRM_MODE_xxx */
+       __u8                            replay_window;
+       __u8                            flags;
+#define XFRM_STATE_NOECN       1
+#define XFRM_STATE_DECAP_DSCP  2
+#define XFRM_STATE_NOPMTUDISC  4
+#define XFRM_STATE_WILDRECV    8
+#define XFRM_STATE_ICMP                16
+#define XFRM_STATE_AF_UNSPEC   32
+#define XFRM_STATE_ALIGN4      64
+#define XFRM_STATE_ESN         128
+};
+
+#define XFRM_SA_XFLAG_DONT_ENCAP_DSCP  1
+
+struct xfrm_usersa_id {
+       xfrm_address_t                  daddr;
+       __be32                          spi;
+       __u16                           family;
+       __u8                            proto;
+};
+
+struct xfrm_aevent_id {
+       struct xfrm_usersa_id           sa_id;
+       xfrm_address_t                  saddr;
+       __u32                           flags;
+       __u32                           reqid;
+};
+
+struct xfrm_userspi_info {
+       struct xfrm_usersa_info         info;
+       __u32                           min;
+       __u32                           max;
+};
+
+struct xfrm_userpolicy_info {
+       struct xfrm_selector            sel;
+       struct xfrm_lifetime_cfg        lft;
+       struct xfrm_lifetime_cur        curlft;
+       __u32                           priority;
+       __u32                           index;
+       __u8                            dir;
+       __u8                            action;
+#define XFRM_POLICY_ALLOW      0
+#define XFRM_POLICY_BLOCK      1
+       __u8                            flags;
+#define XFRM_POLICY_LOCALOK    1       /* Allow user to override global policy */
+       /* Automatically expand selector to include matching ICMP payloads. */
+#define XFRM_POLICY_ICMP       2
+       __u8                            share;
+};
+
+struct xfrm_userpolicy_id {
+       struct xfrm_selector            sel;
+       __u32                           index;
+       __u8                            dir;
+};
+
+struct xfrm_user_acquire {
+       struct xfrm_id                  id;
+       xfrm_address_t                  saddr;
+       struct xfrm_selector            sel;
+       struct xfrm_userpolicy_info     policy;
+       __u32                           aalgos;
+       __u32                           ealgos;
+       __u32                           calgos;
+       __u32                           seq;
+};
+
+struct xfrm_user_expire {
+       struct xfrm_usersa_info         state;
+       __u8                            hard;
+};
+
+struct xfrm_user_polexpire {
+       struct xfrm_userpolicy_info     pol;
+       __u8                            hard;
+};
+
+struct xfrm_usersa_flush {
+       __u8                            proto;
+};
+
+struct xfrm_user_report {
+       __u8                            proto;
+       struct xfrm_selector            sel;
+};
+
+/* Used by MIGRATE to pass addresses IKE should use to perform
+ * SA negotiation with the peer */
+struct xfrm_user_kmaddress {
+       xfrm_address_t                  local;
+       xfrm_address_t                  remote;
+       __u32                           reserved;
+       __u16                           family;
+};
+
+struct xfrm_user_migrate {
+       xfrm_address_t                  old_daddr;
+       xfrm_address_t                  old_saddr;
+       xfrm_address_t                  new_daddr;
+       xfrm_address_t                  new_saddr;
+       __u8                            proto;
+       __u8                            mode;
+       __u16                           reserved;
+       __u32                           reqid;
+       __u16                           old_family;
+       __u16                           new_family;
+};
+
+struct xfrm_user_mapping {
+       struct xfrm_usersa_id           id;
+       __u32                           reqid;
+       xfrm_address_t                  old_saddr;
+       xfrm_address_t                  new_saddr;
+       __be16                          old_sport;
+       __be16                          new_sport;
+};
+
+struct xfrm_address_filter {
+       xfrm_address_t                  saddr;
+       xfrm_address_t                  daddr;
+       __u16                           family;
+       __u8                            splen;
+       __u8                            dplen;
+};
+
+/* backwards compatibility for userspace */
+#define XFRMGRP_ACQUIRE                1
+#define XFRMGRP_EXPIRE         2
+#define XFRMGRP_SA             4
+#define XFRMGRP_POLICY         8
+#define XFRMGRP_REPORT         0x20
+
+enum xfrm_nlgroups {
+       XFRMNLGRP_NONE,
+#define XFRMNLGRP_NONE         XFRMNLGRP_NONE
+       XFRMNLGRP_ACQUIRE,
+#define XFRMNLGRP_ACQUIRE      XFRMNLGRP_ACQUIRE
+       XFRMNLGRP_EXPIRE,
+#define XFRMNLGRP_EXPIRE       XFRMNLGRP_EXPIRE
+       XFRMNLGRP_SA,
+#define XFRMNLGRP_SA           XFRMNLGRP_SA
+       XFRMNLGRP_POLICY,
+#define XFRMNLGRP_POLICY       XFRMNLGRP_POLICY
+       XFRMNLGRP_AEVENTS,
+#define XFRMNLGRP_AEVENTS      XFRMNLGRP_AEVENTS
+       XFRMNLGRP_REPORT,
+#define XFRMNLGRP_REPORT       XFRMNLGRP_REPORT
+       XFRMNLGRP_MIGRATE,
+#define XFRMNLGRP_MIGRATE      XFRMNLGRP_MIGRATE
+       XFRMNLGRP_MAPPING,
+#define XFRMNLGRP_MAPPING      XFRMNLGRP_MAPPING
+       __XFRMNLGRP_MAX
+};
+#define XFRMNLGRP_MAX  (__XFRMNLGRP_MAX - 1)
+
+#endif /* _LINUX_XFRM_H */
diff --git a/lib/libdss-include/linux/xilinx-v4l2-controls.h b/lib/libdss-include/linux/xilinx-v4l2-controls.h
new file mode 100644 (file)
index 0000000..fb495b9
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Xilinx Controls Header
+ *
+ * Copyright (C) 2013-2015 Ideas on Board
+ * Copyright (C) 2013-2015 Xilinx, Inc.
+ *
+ * Contacts: Hyun Kwon <hyun.kwon@xilinx.com>
+ *           Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __UAPI_XILINX_V4L2_CONTROLS_H__
+#define __UAPI_XILINX_V4L2_CONTROLS_H__
+
+#include <linux/v4l2-controls.h>
+
+#define V4L2_CID_XILINX_OFFSET 0xc000
+#define V4L2_CID_XILINX_BASE   (V4L2_CID_USER_BASE + V4L2_CID_XILINX_OFFSET)
+
+/*
+ * Private Controls for Xilinx Video IPs
+ */
+
+/*
+ * Xilinx TPG Video IP
+ */
+
+#define V4L2_CID_XILINX_TPG                    (V4L2_CID_USER_BASE + 0xc000)
+
+/* Draw cross hairs */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIRS                (V4L2_CID_XILINX_TPG + 1)
+/* Enable a moving box */
+#define V4L2_CID_XILINX_TPG_MOVING_BOX         (V4L2_CID_XILINX_TPG + 2)
+/* Mask out a color component */
+#define V4L2_CID_XILINX_TPG_COLOR_MASK         (V4L2_CID_XILINX_TPG + 3)
+/* Enable a stuck pixel feature */
+#define V4L2_CID_XILINX_TPG_STUCK_PIXEL                (V4L2_CID_XILINX_TPG + 4)
+/* Enable a noisy output */
+#define V4L2_CID_XILINX_TPG_NOISE              (V4L2_CID_XILINX_TPG + 5)
+/* Enable the motion feature */
+#define V4L2_CID_XILINX_TPG_MOTION             (V4L2_CID_XILINX_TPG + 6)
+/* Configure the motion speed of moving patterns */
+#define V4L2_CID_XILINX_TPG_MOTION_SPEED       (V4L2_CID_XILINX_TPG + 7)
+/* The row of horizontal cross hair location */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIR_ROW     (V4L2_CID_XILINX_TPG + 8)
+/* The colum of vertical cross hair location */
+#define V4L2_CID_XILINX_TPG_CROSS_HAIR_COLUMN  (V4L2_CID_XILINX_TPG + 9)
+/* Set starting point of sine wave for horizontal component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_START   (V4L2_CID_XILINX_TPG + 10)
+/* Set speed of the horizontal component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_HOR_SPEED   (V4L2_CID_XILINX_TPG + 11)
+/* Set starting point of sine wave for vertical component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_VER_START   (V4L2_CID_XILINX_TPG + 12)
+/* Set speed of the vertical component */
+#define V4L2_CID_XILINX_TPG_ZPLATE_VER_SPEED   (V4L2_CID_XILINX_TPG + 13)
+/* Moving box size */
+#define V4L2_CID_XILINX_TPG_BOX_SIZE           (V4L2_CID_XILINX_TPG + 14)
+/* Moving box color */
+#define V4L2_CID_XILINX_TPG_BOX_COLOR          (V4L2_CID_XILINX_TPG + 15)
+/* Upper limit count of generated stuck pixels */
+#define V4L2_CID_XILINX_TPG_STUCK_PIXEL_THRESH (V4L2_CID_XILINX_TPG + 16)
+/* Noise level */
+#define V4L2_CID_XILINX_TPG_NOISE_GAIN         (V4L2_CID_XILINX_TPG + 17)
+
+#endif /* __UAPI_XILINX_V4L2_CONTROLS_H__ */
diff --git a/lib/libdss-include/linux/zorro.h b/lib/libdss-include/linux/zorro.h
new file mode 100644 (file)
index 0000000..2a26edf
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions
+ *
+ *  Copyright (C) 1995--2003 Geert Uytterhoeven
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License.  See the file COPYING in the main directory of this archive
+ *  for more details.
+ */
+
+#ifndef _LINUX_ZORRO_H
+#define _LINUX_ZORRO_H
+
+#include <linux/types.h>
+
+
+    /*
+     *  Each Zorro board has a 32-bit ID of the form
+     *
+     *      mmmmmmmmmmmmmmmmppppppppeeeeeeee
+     *
+     *  with
+     *
+     *      mmmmmmmmmmmmmmmm   16-bit Manufacturer ID (assigned by CBM (sigh))
+     *      pppppppp           8-bit Product ID (assigned by manufacturer)
+     *      eeeeeeee           8-bit Extended Product ID (currently only used
+     *                         for some GVP boards)
+     */
+
+
+#define ZORRO_MANUF(id)                ((id) >> 16)
+#define ZORRO_PROD(id)         (((id) >> 8) & 0xff)
+#define ZORRO_EPC(id)          ((id) & 0xff)
+
+#define ZORRO_ID(manuf, prod, epc) \
+       ((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc))
+
+typedef __u32 zorro_id;
+
+
+/* Include the ID list */
+#include <linux/zorro_ids.h>
+
+
+    /*
+     *  GVP identifies most of its products through the 'extended product code'
+     *  (epc). The epc has to be ANDed with the GVP_PRODMASK before the
+     *  identification.
+     */
+
+#define GVP_PRODMASK           (0xf8)
+#define GVP_SCSICLKMASK                (0x01)
+
+enum GVP_flags {
+       GVP_IO                  = 0x01,
+       GVP_ACCEL               = 0x02,
+       GVP_SCSI                = 0x04,
+       GVP_24BITDMA            = 0x08,
+       GVP_25BITDMA            = 0x10,
+       GVP_NOBANK              = 0x20,
+       GVP_14MHZ               = 0x40,
+};
+
+
+struct Node {
+       __be32 ln_Succ;         /* Pointer to next (successor) */
+       __be32 ln_Pred;         /* Pointer to previous (predecessor) */
+       __u8   ln_Type;
+       __s8   ln_Pri;          /* Priority, for sorting */
+       __be32 ln_Name;         /* ID string, null terminated */
+} __attribute__((packed));
+
+struct ExpansionRom {
+       /* -First 16 bytes of the expansion ROM */
+       __u8   er_Type;         /* Board type, size and flags */
+       __u8   er_Product;      /* Product number, assigned by manufacturer */
+       __u8   er_Flags;                /* Flags */
+       __u8   er_Reserved03;   /* Must be zero ($ff inverted) */
+       __be16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */
+       __be32 er_SerialNumber; /* Available for use by manufacturer */
+       __be16 er_InitDiagVec;  /* Offset to optional "DiagArea" structure */
+       __u8   er_Reserved0c;
+       __u8   er_Reserved0d;
+       __u8   er_Reserved0e;
+       __u8   er_Reserved0f;
+} __attribute__((packed));
+
+/* er_Type board type bits */
+#define ERT_TYPEMASK   0xc0
+#define ERT_ZORROII    0xc0
+#define ERT_ZORROIII   0x80
+
+/* other bits defined in er_Type */
+#define ERTB_MEMLIST   5               /* Link RAM into free memory list */
+#define ERTF_MEMLIST   (1<<5)
+
+struct ConfigDev {
+       struct Node     cd_Node;
+       __u8            cd_Flags;       /* (read/write) */
+       __u8            cd_Pad;         /* reserved */
+       struct ExpansionRom cd_Rom;     /* copy of board's expansion ROM */
+       __be32          cd_BoardAddr;   /* where in memory the board was placed */
+       __be32          cd_BoardSize;   /* size of board in bytes */
+       __be16          cd_SlotAddr;    /* which slot number (PRIVATE) */
+       __be16          cd_SlotSize;    /* number of slots (PRIVATE) */
+       __be32          cd_Driver;      /* pointer to node of driver */
+       __be32          cd_NextCD;      /* linked list of drivers to config */
+       __be32          cd_Unused[4];   /* for whatever the driver wants */
+} __attribute__((packed));
+
+#define ZORRO_NUM_AUTO         16
+
+#endif /* _LINUX_ZORRO_H */
diff --git a/lib/libdss-include/linux/zorro_ids.h b/lib/libdss-include/linux/zorro_ids.h
new file mode 100644 (file)
index 0000000..74bc53b
--- /dev/null
@@ -0,0 +1,552 @@
+/*
+ *  Zorro board IDs
+ *
+ *  Please keep sorted.
+ */
+
+
+#define ZORRO_MANUF_PACIFIC_PERIPHERALS                                0x00D3
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SE_2000_A500           ZORRO_ID(PACIFIC_PERIPHERALS, 0x00, 0)
+#define  ZORRO_PROD_PACIFIC_PERIPHERALS_SCSI                   ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA_2                         0x0100
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE                   ZORRO_ID(MACROSYSTEMS_USA_2, 0x13, 0)
+
+#define ZORRO_MANUF_KUPKE_1                                    0x00DD
+#define  ZORRO_PROD_KUPKE_GOLEM_RAM_BOX_2MB                    ZORRO_ID(KUPKE_1, 0x00, 0)
+
+#define ZORRO_MANUF_MEMPHIS                                    0x0100
+#define  ZORRO_PROD_MEMPHIS_STORMBRINGER                       ZORRO_ID(MEMPHIS, 0x00, 0)
+
+#define ZORRO_MANUF_3_STATE                                    0x0200
+#define  ZORRO_PROD_3_STATE_MEGAMIX_2000                       ZORRO_ID(3_STATE, 0x02, 0)
+
+#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG                     0x0201
+#define  ZORRO_PROD_CBM_A2088_A2286                            ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x01, 0)
+#define  ZORRO_PROD_CBM_A2286                                  ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x02, 0)
+#define  ZORRO_PROD_CBM_A4091_1                                        ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2386SX_1                              ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x67, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1                   0x0202
+#define  ZORRO_PROD_CBM_A2090A                                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x01, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_1                           ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x02, 0)
+#define  ZORRO_PROD_CBM_A590_A2091_2                           ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x03, 0)
+#define  ZORRO_PROD_CBM_A2090B                                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x04, 0)
+#define  ZORRO_PROD_CBM_A2060                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x09, 0)
+#define  ZORRO_PROD_CBM_A590_A2052_A2058_A2091                 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x0A, 0)
+#define  ZORRO_PROD_CBM_A560_RAM                               ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x20, 0)
+#define  ZORRO_PROD_CBM_A2232_PROTOTYPE                                ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x45, 0)
+#define  ZORRO_PROD_CBM_A2232                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x46, 0)
+#define  ZORRO_PROD_CBM_A2620                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x50, 0)
+#define  ZORRO_PROD_CBM_A2630                                  ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x51, 0)
+#define  ZORRO_PROD_CBM_A4091_2                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x54, 0)
+#define  ZORRO_PROD_CBM_A2065_1                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x5A, 0)
+#define  ZORRO_PROD_CBM_ROMULATOR                              ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x60, 0)
+#define  ZORRO_PROD_CBM_A3000_TEST_FIXTURE                     ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x61, 0)
+#define  ZORRO_PROD_CBM_A2386SX_2                              ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x67, 0)
+#define  ZORRO_PROD_CBM_A2065_2                                        ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0)
+
+#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_2                   0x0203
+#define  ZORRO_PROD_CBM_A2090A_CM                              ZORRO_ID(COMMODORE_WEST_CHESTER_2, 0x03, 0)
+
+#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2      0x02F4
+#define  ZORRO_PROD_PPS_EXP8000                                        ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2, 0x02, 0)
+
+#define ZORRO_MANUF_KOLFF_COMPUTER_SUPPLIES                    0x02FF
+#define  ZORRO_PROD_KCS_POWER_PC_BOARD                         ZORRO_ID(KOLFF_COMPUTER_SUPPLIES, 0x00, 0)
+
+#define ZORRO_MANUF_CARDCO_1                                   0x03EC
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_1                       ZORRO_ID(CARDCO_1, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_1                             ZORRO_ID(CARDCO_1, 0x0C, 0)
+#define  ZORRO_PROD_CARDCO_ESCORT                              ZORRO_ID(CARDCO_1, 0x0E, 0)
+#define  ZORRO_PROD_CARDCO_A2410                               ZORRO_ID(CARDCO_1, 0xF5, 0)
+
+#define ZORRO_MANUF_A_SQUARED                                  0x03ED
+#define  ZORRO_PROD_A_SQUARED_LIVE_2000                                ZORRO_ID(A_SQUARED, 0x01, 0)
+
+#define ZORRO_MANUF_COMSPEC_COMMUNICATIONS                     0x03EE
+#define  ZORRO_PROD_COMSPEC_COMMUNICATIONS_AX2000              ZORRO_ID(COMSPEC_COMMUNICATIONS, 0x01, 0)
+
+#define ZORRO_MANUF_ANAKIN_RESEARCH                            0x03F1
+#define  ZORRO_PROD_ANAKIN_RESEARCH_EASYL                      ZORRO_ID(ANAKIN_RESEARCH, 0x01, 0)
+
+#define ZORRO_MANUF_MICROBOTICS                                        0x03F2
+#define  ZORRO_PROD_MICROBOTICS_STARBOARD_II                   ZORRO_ID(MICROBOTICS, 0x00, 0)
+#define  ZORRO_PROD_MICROBOTICS_STARDRIVE                      ZORRO_ID(MICROBOTICS, 0x02, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_A                         ZORRO_ID(MICROBOTICS, 0x03, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_UP_Z                         ZORRO_ID(MICROBOTICS, 0x04, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA_RAM                      ZORRO_ID(MICROBOTICS, 0x20, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR_RAM                     ZORRO_ID(MICROBOTICS, 0x40, 0)
+#define  ZORRO_PROD_MICROBOTICS_8_STAR                         ZORRO_ID(MICROBOTICS, 0x41, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_RAM_32                     ZORRO_ID(MICROBOTICS, 0x44, 0)
+#define  ZORRO_PROD_MICROBOTICS_VXL_68030                      ZORRO_ID(MICROBOTICS, 0x45, 0)
+#define  ZORRO_PROD_MICROBOTICS_DELTA                          ZORRO_ID(MICROBOTICS, 0x60, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z_RAM             ZORRO_ID(MICROBOTICS, 0x81, 0)
+#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_1               ZORRO_ID(MICROBOTICS, 0x96, 0)
+#define  ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_2               ZORRO_ID(MICROBOTICS, 0x9E, 0)
+#define  ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z                 ZORRO_ID(MICROBOTICS, 0xC1, 0)
+
+#define ZORRO_MANUF_ACCESS_ASSOCIATES_ALEGRA                   0x03F4
+
+#define ZORRO_MANUF_EXPANSION_TECHNOLOGIES                     0x03F6
+
+#define ZORRO_MANUF_ASDG                                       0x03FF
+#define  ZORRO_PROD_ASDG_MEMORY_1                              ZORRO_ID(ASDG, 0x01, 0)
+#define  ZORRO_PROD_ASDG_MEMORY_2                              ZORRO_ID(ASDG, 0x02, 0)
+#define  ZORRO_PROD_ASDG_EB920_LAN_ROVER                       ZORRO_ID(ASDG, 0xFE, 0)
+#define  ZORRO_PROD_ASDG_GPIB_DUALIEEE488_TWIN_X               ZORRO_ID(ASDG, 0xFF, 0)
+
+#define ZORRO_MANUF_IMTRONICS_1                                        0x0404
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_1                 ZORRO_ID(IMTRONICS_1, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_2                 ZORRO_ID(IMTRONICS_1, 0x57, 0)
+
+#define ZORRO_MANUF_CBM_UNIVERSITY_OF_LOWELL                   0x0406
+#define  ZORRO_PROD_CBM_A2410                                  ZORRO_ID(CBM_UNIVERSITY_OF_LOWELL, 0x00, 0)
+
+#define ZORRO_MANUF_AMERISTAR                                  0x041D
+#define  ZORRO_PROD_AMERISTAR_A2065                            ZORRO_ID(AMERISTAR, 0x01, 0)
+#define  ZORRO_PROD_AMERISTAR_A560                             ZORRO_ID(AMERISTAR, 0x09, 0)
+#define  ZORRO_PROD_AMERISTAR_A4066                            ZORRO_ID(AMERISTAR, 0x0A, 0)
+
+#define ZORRO_MANUF_SUPRA                                      0x0420
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_4x4                       ZORRO_ID(SUPRA, 0x01, 0)
+#define  ZORRO_PROD_SUPRA_1000_RAM                             ZORRO_ID(SUPRA, 0x02, 0)
+#define  ZORRO_PROD_SUPRA_2000_DMA                             ZORRO_ID(SUPRA, 0x03, 0)
+#define  ZORRO_PROD_SUPRA_500                                  ZORRO_ID(SUPRA, 0x05, 0)
+#define  ZORRO_PROD_SUPRA_500_SCSI                             ZORRO_ID(SUPRA, 0x08, 0)
+#define  ZORRO_PROD_SUPRA_500XP_2000_RAM                       ZORRO_ID(SUPRA, 0x09, 0)
+#define  ZORRO_PROD_SUPRA_500RX_2000_RAM                       ZORRO_ID(SUPRA, 0x0A, 0)
+#define  ZORRO_PROD_SUPRA_2400ZI                               ZORRO_ID(SUPRA, 0x0B, 0)
+#define  ZORRO_PROD_SUPRA_500XP_SUPRADRIVE_WORDSYNC            ZORRO_ID(SUPRA, 0x0C, 0)
+#define  ZORRO_PROD_SUPRA_SUPRADRIVE_WORDSYNC_II               ZORRO_ID(SUPRA, 0x0D, 0)
+#define  ZORRO_PROD_SUPRA_2400ZIPLUS                           ZORRO_ID(SUPRA, 0x10, 0)
+
+#define ZORRO_MANUF_COMPUTER_SYSTEMS_ASSOCIATES                        0x0422
+#define  ZORRO_PROD_CSA_MAGNUM                                 ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x11, 0)
+#define  ZORRO_PROD_CSA_12_GAUGE                               ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x15, 0)
+
+#define ZORRO_MANUF_MARC_MICHAEL_GROTH                         0x0439
+
+#define ZORRO_MANUF_M_TECH                                     0x0502
+#define  ZORRO_PROD_MTEC_AT500_1                               ZORRO_ID(M_TECH, 0x03, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_1                    0x06E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_1, 0x08, 0)
+
+#define ZORRO_MANUF_BYTEBOX                                    0x07DA
+#define  ZORRO_PROD_BYTEBOX_A500                               ZORRO_ID(BYTEBOX, 0x00, 0)
+
+#define ZORRO_MANUF_DKB_POWER_COMPUTING                                0x07DC
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_SECUREKEY              ZORRO_ID(DKB_POWER_COMPUTING, 0x09, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_3128               ZORRO_ID(DKB_POWER_COMPUTING, 0x0E, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_RAPID_FIRE             ZORRO_ID(DKB_POWER_COMPUTING, 0x0F, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_DKM_1202               ZORRO_ID(DKB_POWER_COMPUTING, 0x10, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030 ZORRO_ID(DKB_POWER_COMPUTING, 0x12, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_1         ZORRO_ID(DKB_POWER_COMPUTING, 0x17, 0)
+#define  ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_2         ZORRO_ID(DKB_POWER_COMPUTING, 0xFF, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2                    0x07E1
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_4K                     ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x01, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_2                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x02, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_3                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x03, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_1                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x08, 0)
+#define  ZORRO_PROD_GVP_IMPACT_3001_RAM                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_1                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0A, 0)
+#define  ZORRO_PROD_GVP_EPC_BASE                               ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_1                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x20)
+#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_1                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x30)
+#define  ZORRO_PROD_GVP_A1291                                  ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x40)
+#define  ZORRO_PROD_GVP_COMBO_030_R4                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x60)
+#define  ZORRO_PROD_GVP_COMBO_030_R4_SCSI                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70)
+#define  ZORRO_PROD_GVP_PHONEPAK                               ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x78)
+#define  ZORRO_PROD_GVP_IO_EXTENDER                            ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x98)
+#define  ZORRO_PROD_GVP_GFORCE_030                             ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xa0)
+#define  ZORRO_PROD_GVP_GFORCE_030_SCSI                                ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0)
+#define  ZORRO_PROD_GVP_A530                                   ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xc0)
+#define  ZORRO_PROD_GVP_A530_SCSI                              ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xe0)
+#define  ZORRO_PROD_GVP_COMBO_030_R3_SCSI                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf0)
+#define  ZORRO_PROD_GVP_SERIES_II                              ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf8)
+#define  ZORRO_PROD_GVP_IMPACT_3001_IDE_2                      ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)
+/*#define  ZORRO_PROD_GVP_A2000_030                            ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+/*#define  ZORRO_PROD_GVP_GFORCE_040_SCSI_2                    ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/
+#define  ZORRO_PROD_GVP_GFORCE_040_060                         ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0)
+#define  ZORRO_PROD_GVP_IMPACT_VISION_24                       ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x20, 0)
+#define  ZORRO_PROD_GVP_GFORCE_040_2                           ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0xFF, 0)
+
+#define ZORRO_MANUF_CALIFORNIA_ACCESS_SYNERGY                  0x07E5
+#define  ZORRO_PROD_CALIFORNIA_ACCESS_SYNERGY_MALIBU           ZORRO_ID(CALIFORNIA_ACCESS_SYNERGY, 0x01, 0)
+
+#define ZORRO_MANUF_XETEC                                      0x07E6
+#define  ZORRO_PROD_XETEC_FASTCARD                             ZORRO_ID(XETEC, 0x01, 0)
+#define  ZORRO_PROD_XETEC_FASTCARD_RAM                         ZORRO_ID(XETEC, 0x02, 0)
+#define  ZORRO_PROD_XETEC_FASTCARD_PLUS                                ZORRO_ID(XETEC, 0x03, 0)
+
+#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS                0x07EA
+#define  ZORRO_PROD_PPS_MERCURY                                        ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x00, 0)
+#define  ZORRO_PROD_PPS_A3000_68040                            ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_PPS_A2000_68040                            ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x69, 0)
+#define  ZORRO_PROD_PPS_ZEUS                                   ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x96, 0)
+#define  ZORRO_PROD_PPS_A500_68040                             ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0xBB, 0)
+
+#define ZORRO_MANUF_XEBEC                                      0x07EC
+
+#define ZORRO_MANUF_SPIRIT_TECHNOLOGY                          0x07F2
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN1000           ZORRO_ID(SPIRIT_TECHNOLOGY, 0x01, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN500            ZORRO_ID(SPIRIT_TECHNOLOGY, 0x02, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_SIN500                   ZORRO_ID(SPIRIT_TECHNOLOGY, 0x03, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_HDA_506                  ZORRO_ID(SPIRIT_TECHNOLOGY, 0x04, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_AX_S                     ZORRO_ID(SPIRIT_TECHNOLOGY, 0x05, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_OCTABYTE                 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x06, 0)
+#define  ZORRO_PROD_SPIRIT_TECHNOLOGY_INMATE                   ZORRO_ID(SPIRIT_TECHNOLOGY, 0x08, 0)
+
+#define ZORRO_MANUF_SPIRIT_TECHNOLOGY_2                                0x07F3
+
+#define ZORRO_MANUF_BSC_ALFADATA_1                             0x07FE
+#define  ZORRO_PROD_BSC_ALF_3_1                                        ZORRO_ID(BSC_ALFADATA_1, 0x03, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_2                             0x0801
+#define  ZORRO_PROD_BSC_ALF_2_1                                        ZORRO_ID(BSC_ALFADATA_2, 0x01, 0)
+#define  ZORRO_PROD_BSC_ALF_2_2                                        ZORRO_ID(BSC_ALFADATA_2, 0x02, 0)
+#define  ZORRO_PROD_BSC_ALF_3_2                                        ZORRO_ID(BSC_ALFADATA_2, 0x03, 0)
+
+#define ZORRO_MANUF_CARDCO_2                                   0x0802
+#define  ZORRO_PROD_CARDCO_KRONOS_2000_2                       ZORRO_ID(CARDCO_2, 0x04, 0)
+#define  ZORRO_PROD_CARDCO_A1000_2                             ZORRO_ID(CARDCO_2, 0x0C, 0)
+
+#define ZORRO_MANUF_JOCHHEIM                                   0x0804
+#define  ZORRO_PROD_JOCHHEIM_RAM                               ZORRO_ID(JOCHHEIM, 0x01, 0)
+
+#define ZORRO_MANUF_CHECKPOINT_TECHNOLOGIES                    0x0807
+#define  ZORRO_PROD_CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION    ZORRO_ID(CHECKPOINT_TECHNOLOGIES, 0x00, 0)
+
+#define ZORRO_MANUF_EDOTRONIK                                  0x0810
+#define  ZORRO_PROD_EDOTRONIK_IEEE_488                         ZORRO_ID(EDOTRONIK, 0x01, 0)
+#define  ZORRO_PROD_EDOTRONIK_8032                             ZORRO_ID(EDOTRONIK, 0x02, 0)
+#define  ZORRO_PROD_EDOTRONIK_MULTISERIAL                      ZORRO_ID(EDOTRONIK, 0x03, 0)
+#define  ZORRO_PROD_EDOTRONIK_VIDEODIGITIZER                   ZORRO_ID(EDOTRONIK, 0x04, 0)
+#define  ZORRO_PROD_EDOTRONIK_PARALLEL_IO                      ZORRO_ID(EDOTRONIK, 0x05, 0)
+#define  ZORRO_PROD_EDOTRONIK_PIC_PROTOYPING                   ZORRO_ID(EDOTRONIK, 0x06, 0)
+#define  ZORRO_PROD_EDOTRONIK_ADC                              ZORRO_ID(EDOTRONIK, 0x07, 0)
+#define  ZORRO_PROD_EDOTRONIK_VME                              ZORRO_ID(EDOTRONIK, 0x08, 0)
+#define  ZORRO_PROD_EDOTRONIK_DSP96000                         ZORRO_ID(EDOTRONIK, 0x09, 0)
+
+#define ZORRO_MANUF_NES_INC                                    0x0813
+#define  ZORRO_PROD_NES_INC_RAM                                        ZORRO_ID(NES_INC, 0x00, 0)
+
+#define ZORRO_MANUF_ICD                                                0x0817
+#define  ZORRO_PROD_ICD_ADVANTAGE_2000_SCSI                    ZORRO_ID(ICD, 0x01, 0)
+#define  ZORRO_PROD_ICD_ADVANTAGE_IDE                          ZORRO_ID(ICD, 0x03, 0)
+#define  ZORRO_PROD_ICD_ADVANTAGE_2080_RAM                     ZORRO_ID(ICD, 0x04, 0)
+
+#define ZORRO_MANUF_KUPKE_2                                    0x0819
+#define  ZORRO_PROD_KUPKE_OMTI                                 ZORRO_ID(KUPKE_2, 0x01, 0)
+#define  ZORRO_PROD_KUPKE_SCSI_II                              ZORRO_ID(KUPKE_2, 0x02, 0)
+#define  ZORRO_PROD_KUPKE_GOLEM_BOX                            ZORRO_ID(KUPKE_2, 0x03, 0)
+#define  ZORRO_PROD_KUPKE_030_882                              ZORRO_ID(KUPKE_2, 0x04, 0)
+#define  ZORRO_PROD_KUPKE_SCSI_AT                              ZORRO_ID(KUPKE_2, 0x05, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_3                    0x081D
+#define  ZORRO_PROD_GVP_A2000_RAM8                             ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x09, 0)
+#define  ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_2                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x0A, 0)
+
+#define ZORRO_MANUF_INTERWORKS_NETWORK                         0x081E
+
+#define ZORRO_MANUF_HARDITAL_SYNTHESIS                         0x0820
+#define  ZORRO_PROD_HARDITAL_SYNTHESIS_TQM_68030_68882         ZORRO_ID(HARDITAL_SYNTHESIS, 0x14, 0)
+
+#define ZORRO_MANUF_APPLIED_ENGINEERING                                0x0828
+#define  ZORRO_PROD_APPLIED_ENGINEERING_DL2000                 ZORRO_ID(APPLIED_ENGINEERING, 0x10, 0)
+#define  ZORRO_PROD_APPLIED_ENGINEERING_RAM_WORKS              ZORRO_ID(APPLIED_ENGINEERING, 0xE0, 0)
+
+#define ZORRO_MANUF_BSC_ALFADATA_3                             0x082C
+#define  ZORRO_PROD_BSC_OKTAGON_2008                           ZORRO_ID(BSC_ALFADATA_3, 0x05, 0)
+#define  ZORRO_PROD_BSC_TANDEM_AT_2008_508                     ZORRO_ID(BSC_ALFADATA_3, 0x06, 0)
+#define  ZORRO_PROD_BSC_ALFA_RAM_1200                          ZORRO_ID(BSC_ALFADATA_3, 0x07, 0)
+#define  ZORRO_PROD_BSC_OKTAGON_2008_RAM                       ZORRO_ID(BSC_ALFADATA_3, 0x08, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_I                            ZORRO_ID(BSC_ALFADATA_3, 0x10, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_II                           ZORRO_ID(BSC_ALFADATA_3, 0x11, 0)
+#define  ZORRO_PROD_BSC_MULTIFACE_III                          ZORRO_ID(BSC_ALFADATA_3, 0x12, 0)
+#define  ZORRO_PROD_BSC_FRAMEMASTER_II                         ZORRO_ID(BSC_ALFADATA_3, 0x20, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_RAM                           ZORRO_ID(BSC_ALFADATA_3, 0x21, 0)
+#define  ZORRO_PROD_BSC_GRAFFITI_REG                           ZORRO_ID(BSC_ALFADATA_3, 0x22, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD                                ZORRO_ID(BSC_ALFADATA_3, 0x40, 0)
+#define  ZORRO_PROD_BSC_ISDN_MASTERCARD_II                     ZORRO_ID(BSC_ALFADATA_3, 0x41, 0)
+
+#define ZORRO_MANUF_PHOENIX                                    0x0835
+#define  ZORRO_PROD_PHOENIX_ST506                              ZORRO_ID(PHOENIX, 0x21, 0)
+#define  ZORRO_PROD_PHOENIX_SCSI                               ZORRO_ID(PHOENIX, 0x22, 0)
+#define  ZORRO_PROD_PHOENIX_RAM                                        ZORRO_ID(PHOENIX, 0xBE, 0)
+
+#define ZORRO_MANUF_ADVANCED_STORAGE_SYSTEMS                   0x0836
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS             ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM         ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x08, 0)
+
+#define ZORRO_MANUF_IMPULSE                                    0x0838
+#define  ZORRO_PROD_IMPULSE_FIRECRACKER_24                     ZORRO_ID(IMPULSE, 0x00, 0)
+
+#define ZORRO_MANUF_IVS                                                0x0840
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_2                                ZORRO_ID(IVS, 0x02, 0)
+#define  ZORRO_PROD_IVS_GRANDSLAM_PIC_1                                ZORRO_ID(IVS, 0x04, 0)
+#define  ZORRO_PROD_IVS_OVERDRIVE                              ZORRO_ID(IVS, 0x10, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_CLASSIC                      ZORRO_ID(IVS, 0x30, 0)
+#define  ZORRO_PROD_IVS_TRUMPCARD_PRO_GRANDSLAM                        ZORRO_ID(IVS, 0x34, 0)
+#define  ZORRO_PROD_IVS_META_4                                 ZORRO_ID(IVS, 0x40, 0)
+#define  ZORRO_PROD_IVS_WAVETOOLS                              ZORRO_ID(IVS, 0xBF, 0)
+#define  ZORRO_PROD_IVS_VECTOR_1                               ZORRO_ID(IVS, 0xF3, 0)
+#define  ZORRO_PROD_IVS_VECTOR_2                               ZORRO_ID(IVS, 0xF4, 0)
+
+#define ZORRO_MANUF_VECTOR_1                                   0x0841
+#define  ZORRO_PROD_VECTOR_CONNECTION_1                                ZORRO_ID(VECTOR_1, 0xE3, 0)
+
+#define ZORRO_MANUF_XPERT_PRODEV                               0x0845
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_RAM                   ZORRO_ID(XPERT_PRODEV, 0x01, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_VISIONA_REG                   ZORRO_ID(XPERT_PRODEV, 0x02, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_RAM                    ZORRO_ID(XPERT_PRODEV, 0x03, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_1                  ZORRO_ID(XPERT_PRODEV, 0x04, 0)
+#define  ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_2                  ZORRO_ID(XPERT_PRODEV, 0xC9, 0)
+
+#define ZORRO_MANUF_HYDRA_SYSTEMS                              0x0849
+#define  ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET                     ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0)
+
+#define ZORRO_MANUF_SUNRIZE_INDUSTRIES                         0x084F
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD1012                  ZORRO_ID(SUNRIZE_INDUSTRIES, 0x01, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_AD516                   ZORRO_ID(SUNRIZE_INDUSTRIES, 0x02, 0)
+#define  ZORRO_PROD_SUNRIZE_INDUSTRIES_DD512                   ZORRO_ID(SUNRIZE_INDUSTRIES, 0x03, 0)
+
+#define ZORRO_MANUF_TRICERATOPS                                        0x0850
+#define  ZORRO_PROD_TRICERATOPS_MULTI_IO                       ZORRO_ID(TRICERATOPS, 0x01, 0)
+
+#define ZORRO_MANUF_APPLIED_MAGIC                              0x0851
+#define  ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER                 ZORRO_ID(APPLIED_MAGIC, 0x01, 0)
+#define  ZORRO_PROD_APPLIED_MAGIC_DIGITAL_BROADCASTER          ZORRO_ID(APPLIED_MAGIC, 0x06, 0)
+
+#define ZORRO_MANUF_GFX_BASE                                   0x085E
+#define  ZORRO_PROD_GFX_BASE_GDA_1_VRAM                                ZORRO_ID(GFX_BASE, 0x00, 0)
+#define  ZORRO_PROD_GFX_BASE_GDA_1                             ZORRO_ID(GFX_BASE, 0x01, 0)
+
+#define ZORRO_MANUF_ROCTEC                                     0x0860
+#define  ZORRO_PROD_ROCTEC_RH_800C                             ZORRO_ID(ROCTEC, 0x01, 0)
+#define  ZORRO_PROD_ROCTEC_RH_800C_RAM                         ZORRO_ID(ROCTEC, 0x01, 0)
+
+#define ZORRO_MANUF_KATO                                       0x0861
+#define  ZORRO_PROD_KATO_MELODY                                        ZORRO_ID(KATO, 0x80, 0)
+/* ID clash!! */
+#define ZORRO_MANUF_HELFRICH_1                                 0x0861
+#define  ZORRO_PROD_HELFRICH_RAINBOW_II                                ZORRO_ID(HELFRICH_1, 0x20, 0)
+#define  ZORRO_PROD_HELFRICH_RAINBOW_III                       ZORRO_ID(HELFRICH_1, 0x21, 0)
+
+#define ZORRO_MANUF_ATLANTIS                                   0x0862
+
+#define ZORRO_MANUF_PROTAR                                     0x0864
+
+#define ZORRO_MANUF_ACS                                                0x0865
+
+#define ZORRO_MANUF_SOFTWARE_RESULTS_ENTERPRISES               0x0866
+#define  ZORRO_PROD_SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS        ZORRO_ID(SOFTWARE_RESULTS_ENTERPRISES, 0x01, 0)
+
+#define ZORRO_MANUF_MASOBOSHI                                  0x086D
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_SC201                        ZORRO_ID(MASOBOSHI, 0x03, 0)
+#define  ZORRO_PROD_MASOBOSHI_MASTER_CARD_MC702                        ZORRO_ID(MASOBOSHI, 0x04, 0)
+#define  ZORRO_PROD_MASOBOSHI_MVD_819                          ZORRO_ID(MASOBOSHI, 0x07, 0)
+
+#define ZORRO_MANUF_MAINHATTAN_DATA                            0x086F
+#define  ZORRO_PROD_MAINHATTAN_DATA_IDE                                ZORRO_ID(MAINHATTAN_DATA, 0x01, 0)
+
+#define ZORRO_MANUF_VILLAGE_TRONIC                             0x0877
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_RAM                  ZORRO_ID(VILLAGE_TRONIC, 0x01, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_REG                  ZORRO_ID(VILLAGE_TRONIC, 0x02, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_DOMINO_16M_PROTOTYPE                ZORRO_ID(VILLAGE_TRONIC, 0x03, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM      ZORRO_ID(VILLAGE_TRONIC, 0x0B, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG      ZORRO_ID(VILLAGE_TRONIC, 0x0C, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_SEGMENTED_MODE   ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM1          ZORRO_ID(VILLAGE_TRONIC, 0x15, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM2          ZORRO_ID(VILLAGE_TRONIC, 0x16, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG           ZORRO_ID(VILLAGE_TRONIC, 0x17, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3               ZORRO_ID(VILLAGE_TRONIC, 0x18, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE                     ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0)
+#define  ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2                    ZORRO_ID(VILLAGE_TRONIC, 0xCA, 0)
+
+#define ZORRO_MANUF_UTILITIES_UNLIMITED                                0x087B
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE         ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0)
+#define  ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE2                ZORRO_ID(UTILITIES_UNLIMITED, 0x20, 0)
+
+#define ZORRO_MANUF_AMITRIX                                    0x0880
+#define  ZORRO_PROD_AMITRIX_MULTI_IO                           ZORRO_ID(AMITRIX, 0x01, 0)
+#define  ZORRO_PROD_AMITRIX_CD_RAM                             ZORRO_ID(AMITRIX, 0x02, 0)
+
+#define ZORRO_MANUF_ARMAX                                      0x0885
+#define  ZORRO_PROD_ARMAX_OMNIBUS                              ZORRO_ID(ARMAX, 0x00, 0)
+
+#define ZORRO_MANUF_ZEUS                                       0x088D
+#define  ZORRO_PROD_ZEUS_SPIDER                                        ZORRO_ID(ZEUS, 0x04, 0)
+
+#define ZORRO_MANUF_NEWTEK                                     0x088F
+#define  ZORRO_PROD_NEWTEK_VIDEOTOASTER                                ZORRO_ID(NEWTEK, 0x00, 0)
+
+#define ZORRO_MANUF_M_TECH_GERMANY                             0x0890
+#define  ZORRO_PROD_MTEC_AT500_2                               ZORRO_ID(M_TECH_GERMANY, 0x01, 0)
+#define  ZORRO_PROD_MTEC_68030                                 ZORRO_ID(M_TECH_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MTEC_68020I                                        ZORRO_ID(M_TECH_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MTEC_A1200_T68030_RTC                      ZORRO_ID(M_TECH_GERMANY, 0x20, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530               ZORRO_ID(M_TECH_GERMANY, 0x21, 0)
+#define  ZORRO_PROD_MTEC_8_MB_RAM                              ZORRO_ID(M_TECH_GERMANY, 0x22, 0)
+#define  ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE      ZORRO_ID(M_TECH_GERMANY, 0x24, 0)
+
+#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4                    0x0891
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0)
+#define  ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG                 ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0)
+
+#define ZORRO_MANUF_APOLLO_1                                   0x0892
+#define  ZORRO_PROD_APOLLO_A1200                               ZORRO_ID(APOLLO_1, 0x01, 0)
+
+#define ZORRO_MANUF_HELFRICH_2                                 0x0893
+#define  ZORRO_PROD_HELFRICH_PICCOLO_RAM                       ZORRO_ID(HELFRICH_2, 0x05, 0)
+#define  ZORRO_PROD_HELFRICH_PICCOLO_REG                       ZORRO_ID(HELFRICH_2, 0x06, 0)
+#define  ZORRO_PROD_HELFRICH_PEGGY_PLUS_MPEG                   ZORRO_ID(HELFRICH_2, 0x07, 0)
+#define  ZORRO_PROD_HELFRICH_VIDEOCRUNCHER                     ZORRO_ID(HELFRICH_2, 0x08, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_RAM                          ZORRO_ID(HELFRICH_2, 0x0A, 0)
+#define  ZORRO_PROD_HELFRICH_SD64_REG                          ZORRO_ID(HELFRICH_2, 0x0B, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_USA                           0x089B
+#define  ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx              ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0)
+
+#define ZORRO_MANUF_ELBOX_COMPUTER                             0x089E
+#define  ZORRO_PROD_ELBOX_COMPUTER_1200_4                      ZORRO_ID(ELBOX_COMPUTER, 0x06, 0)
+
+#define ZORRO_MANUF_HARMS_PROFESSIONAL                         0x0A00
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_030_PLUS                        ZORRO_ID(HARMS_PROFESSIONAL, 0x10, 0)
+#define  ZORRO_PROD_HARMS_PROFESSIONAL_3500                    ZORRO_ID(HARMS_PROFESSIONAL, 0xD0, 0)
+
+#define ZORRO_MANUF_MICRONIK                                   0x0A50
+#define  ZORRO_PROD_MICRONIK_RCA_120                           ZORRO_ID(MICRONIK, 0x0A, 0)
+
+#define ZORRO_MANUF_MICRONIK2                                  0x0F0F
+#define  ZORRO_PROD_MICRONIK2_Z3I                              ZORRO_ID(MICRONIK2, 0x01, 0)
+
+#define ZORRO_MANUF_MEGAMICRO                                  0x1000
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500                                ZORRO_ID(MEGAMICRO, 0x03, 0)
+#define  ZORRO_PROD_MEGAMICRO_SCRAM_500_RAM                    ZORRO_ID(MEGAMICRO, 0x04, 0)
+
+#define ZORRO_MANUF_IMTRONICS_2                                        0x1028
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_3                 ZORRO_ID(IMTRONICS_2, 0x39, 0)
+#define  ZORRO_PROD_IMTRONICS_HURRICANE_2800_4                 ZORRO_ID(IMTRONICS_2, 0x57, 0)
+
+/* unofficial ID */
+#define ZORRO_MANUF_INDIVIDUAL_COMPUTERS                       0x1212
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA                        ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x00, 0)
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF                        ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x17, 0)
+#define  ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL             ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x2A, 0)
+
+#define ZORRO_MANUF_KUPKE_3                                    0x1248
+#define  ZORRO_PROD_KUPKE_GOLEM_HD_3000                                ZORRO_ID(KUPKE_3, 0x01, 0)
+
+#define ZORRO_MANUF_ITH                                                0x1388
+#define  ZORRO_PROD_ITH_ISDN_MASTER_II                         ZORRO_ID(ITH, 0x01, 0)
+
+#define ZORRO_MANUF_VMC                                                0x1389
+#define  ZORRO_PROD_VMC_ISDN_BLASTER_Z2                                ZORRO_ID(VMC, 0x01, 0)
+#define  ZORRO_PROD_VMC_HYPERCOM_4                             ZORRO_ID(VMC, 0x02, 0)
+
+#define ZORRO_MANUF_INFORMATION                                        0x157C
+#define  ZORRO_PROD_INFORMATION_ISDN_ENGINE_I                  ZORRO_ID(INFORMATION, 0x64, 0)
+
+#define ZORRO_MANUF_VORTEX                                     0x2017
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80386SX                 ZORRO_ID(VORTEX, 0x07, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_RAM                     ZORRO_ID(VORTEX, 0x08, 0)
+#define  ZORRO_PROD_VORTEX_GOLDEN_GATE_80486                   ZORRO_ID(VORTEX, 0x09, 0)
+
+#define ZORRO_MANUF_EXPANSION_SYSTEMS                          0x2062
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX         ZORRO_ID(EXPANSION_SYSTEMS, 0x01, 0)
+#define  ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM     ZORRO_ID(EXPANSION_SYSTEMS, 0x02, 0)
+
+#define ZORRO_MANUF_READYSOFT                                  0x2100
+#define  ZORRO_PROD_READYSOFT_AMAX_II_IV                       ZORRO_ID(READYSOFT, 0x01, 0)
+
+#define ZORRO_MANUF_PHASE5                                     0x2140
+#define  ZORRO_PROD_PHASE5_BLIZZARD_RAM                                ZORRO_ID(PHASE5, 0x01, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD                            ZORRO_ID(PHASE5, 0x02, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_IV                    ZORRO_ID(PHASE5, 0x06, 0)
+#define  ZORRO_PROD_PHASE5_FASTLANE_Z3_RAM                     ZORRO_ID(PHASE5, 0x0A, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060        ZORRO_ID(PHASE5, 0x0B, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM            ZORRO_ID(PHASE5, 0x0C, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230                       ZORRO_ID(PHASE5, 0x0D, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260               ZORRO_ID(PHASE5, 0x11, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_2060                       ZORRO_ID(PHASE5, 0x18, 0)
+#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_II                    ZORRO_ID(PHASE5, 0x19, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64                       ZORRO_ID(PHASE5, 0x22, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE          ZORRO_ID(PHASE5, 0x32, 0)
+#define  ZORRO_PROD_PHASE5_CYBERVISION64_3D                    ZORRO_ID(PHASE5, 0x43, 0)
+#define  ZORRO_PROD_PHASE5_CYBERSTORM_MK_III                   ZORRO_ID(PHASE5, 0x64, 0)
+#define  ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS                  ZORRO_ID(PHASE5, 0x6e, 0)
+
+#define ZORRO_MANUF_DPS                                                0x2169
+#define  ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER            ZORRO_ID(DPS, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_2                                   0x2200
+#define  ZORRO_PROD_APOLLO_A620_68020_1                                ZORRO_ID(APOLLO_2, 0x00, 0)
+#define  ZORRO_PROD_APOLLO_A620_68020_2                                ZORRO_ID(APOLLO_2, 0x01, 0)
+
+#define ZORRO_MANUF_APOLLO_3                                   0x2222
+#define  ZORRO_PROD_APOLLO_AT_APOLLO                           ZORRO_ID(APOLLO_3, 0x22, 0)
+#define  ZORRO_PROD_APOLLO_1230_1240_1260_2030_4040_4060       ZORRO_ID(APOLLO_3, 0x23, 0)
+
+#define ZORRO_MANUF_PETSOFF_LP                                 0x38A5
+#define  ZORRO_PROD_PETSOFF_LP_DELFINA                         ZORRO_ID(PETSOFF_LP, 0x00, 0)
+#define  ZORRO_PROD_PETSOFF_LP_DELFINA_LITE                    ZORRO_ID(PETSOFF_LP, 0x01, 0)
+
+#define ZORRO_MANUF_UWE_GERLACH                                        0x3FF7
+#define  ZORRO_PROD_UWE_GERLACH_RAM_ROM                                ZORRO_ID(UWE_GERLACH, 0xd4, 0)
+
+#define ZORRO_MANUF_ACT                                                0x4231
+#define  ZORRO_PROD_ACT_PRELUDE                                        ZORRO_ID(ACT, 0x01, 0)
+
+#define ZORRO_MANUF_MACROSYSTEMS_GERMANY                       0x4754
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO                       ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB                          ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MAESTRO_PRO                   ZORRO_ID(MACROSYSTEMS_GERMANY, 0x05, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA                                ZORRO_ID(MACROSYSTEMS_GERMANY, 0x06, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_MULTI_EVOLUTION               ZORRO_ID(MACROSYSTEMS_GERMANY, 0x08, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_TOCCATA                       ZORRO_ID(MACROSYSTEMS_GERMANY, 0x0C, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_RETINA_Z3                     ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_VLAB_MOTION                   ZORRO_ID(MACROSYSTEMS_GERMANY, 0x12, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_ALTAIS                                ZORRO_ID(MACROSYSTEMS_GERMANY, 0x13, 0)
+#define  ZORRO_PROD_MACROSYSTEMS_FALCON_040                    ZORRO_ID(MACROSYSTEMS_GERMANY, 0xFD, 0)
+
+#define ZORRO_MANUF_COMBITEC                                   0x6766
+
+#define ZORRO_MANUF_SKI_PERIPHERALS                            0x8000
+#define  ZORRO_PROD_SKI_PERIPHERALS_MAST_FIREBALL              ZORRO_ID(SKI_PERIPHERALS, 0x08, 0)
+#define  ZORRO_PROD_SKI_PERIPHERALS_SCSI_DUAL_SERIAL           ZORRO_ID(SKI_PERIPHERALS, 0x80, 0)
+
+#define ZORRO_MANUF_REIS_WARE_2                                        0xA9AD
+#define  ZORRO_PROD_REIS_WARE_SCAN_KING                                ZORRO_ID(REIS_WARE_2, 0x11, 0)
+
+#define ZORRO_MANUF_CAMERON                                    0xAA01
+#define  ZORRO_PROD_CAMERON_PERSONAL_A4                                ZORRO_ID(CAMERON, 0x10, 0)
+
+#define ZORRO_MANUF_REIS_WARE                                  0xAA11
+#define  ZORRO_PROD_REIS_WARE_HANDYSCANNER                     ZORRO_ID(REIS_WARE, 0x11, 0)
+
+#define ZORRO_MANUF_PHOENIX_2                                  0xB5A8
+#define  ZORRO_PROD_PHOENIX_ST506_2                            ZORRO_ID(PHOENIX_2, 0x21, 0)
+#define  ZORRO_PROD_PHOENIX_SCSI_2                             ZORRO_ID(PHOENIX_2, 0x22, 0)
+#define  ZORRO_PROD_PHOENIX_RAM_2                              ZORRO_ID(PHOENIX_2, 0xBE, 0)
+
+#define ZORRO_MANUF_COMBITEC_2                                 0xC008
+#define  ZORRO_PROD_COMBITEC_HD                                        ZORRO_ID(COMBITEC_2, 0x2A, 0)
+#define  ZORRO_PROD_COMBITEC_SRAM                              ZORRO_ID(COMBITEC_2, 0x2B, 0)
+
+
+    /*
+     *  Test and illegal Manufacturer IDs.
+     */
+
+#define ZORRO_MANUF_HACKER                                     0x07DB
+#define  ZORRO_PROD_GENERAL_PROTOTYPE                          ZORRO_ID(HACKER, 0x00, 0)
+#define  ZORRO_PROD_HACKER_SCSI                                        ZORRO_ID(HACKER, 0x01, 0)
+#define  ZORRO_PROD_RESOURCE_MANAGEMENT_FORCE_QUICKNET_QN2000  ZORRO_ID(HACKER, 0x02, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_2                                ZORRO_ID(HACKER, 0xE0, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_3                                ZORRO_ID(HACKER, 0xE1, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_4                                ZORRO_ID(HACKER, 0xE2, 0)
+#define  ZORRO_PROD_VECTOR_CONNECTION_5                                ZORRO_ID(HACKER, 0xE3, 0)
diff --git a/lib/libdss-include/locale.h b/lib/libdss-include/locale.h
new file mode 100644 (file)
index 0000000..2f85c6c
--- /dev/null
@@ -0,0 +1,207 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.11 Localization     <locale.h>
+ */
+
+#ifndef        _LOCALE_H
+#define        _LOCALE_H       1
+
+#include <features.h>
+
+#define __need_NULL
+#include <stddef.h>
+#include <bits/locale.h>
+
+__BEGIN_DECLS
+
+/* These are the possibilities for the first argument to setlocale.
+   The code assumes that the lowest LC_* symbol has the value zero.  */
+#define LC_CTYPE          __LC_CTYPE
+#define LC_NUMERIC        __LC_NUMERIC
+#define LC_TIME           __LC_TIME
+#define LC_COLLATE        __LC_COLLATE
+#define LC_MONETARY       __LC_MONETARY
+#define LC_MESSAGES       __LC_MESSAGES
+#define        LC_ALL            __LC_ALL
+#define LC_PAPER         __LC_PAPER
+#define LC_NAME                  __LC_NAME
+#define LC_ADDRESS       __LC_ADDRESS
+#define LC_TELEPHONE     __LC_TELEPHONE
+#define LC_MEASUREMENT   __LC_MEASUREMENT
+#define LC_IDENTIFICATION __LC_IDENTIFICATION
+
+
+__BEGIN_NAMESPACE_STD
+
+/* Structure giving information about numeric and monetary notation.  */
+struct lconv
+{
+  /* Numeric (non-monetary) information.  */
+
+  char *decimal_point;         /* Decimal point character.  */
+  char *thousands_sep;         /* Thousands separator.  */
+  /* Each element is the number of digits in each group;
+     elements with higher indices are farther left.
+     An element with value CHAR_MAX means that no further grouping is done.
+     An element with value 0 means that the previous element is used
+     for all groups farther left.  */
+  char *grouping;
+
+  /* Monetary information.  */
+
+  /* First three chars are a currency symbol from ISO 4217.
+     Fourth char is the separator.  Fifth char is '\0'.  */
+  char *int_curr_symbol;
+  char *currency_symbol;       /* Local currency symbol.  */
+  char *mon_decimal_point;     /* Decimal point character.  */
+  char *mon_thousands_sep;     /* Thousands separator.  */
+  char *mon_grouping;          /* Like `grouping' element (above).  */
+  char *positive_sign;         /* Sign for positive values.  */
+  char *negative_sign;         /* Sign for negative values.  */
+  char int_frac_digits;                /* Int'l fractional digits.  */
+  char frac_digits;            /* Local fractional digits.  */
+  /* 1 if currency_symbol precedes a positive value, 0 if succeeds.  */
+  char p_cs_precedes;
+  /* 1 iff a space separates currency_symbol from a positive value.  */
+  char p_sep_by_space;
+  /* 1 if currency_symbol precedes a negative value, 0 if succeeds.  */
+  char n_cs_precedes;
+  /* 1 iff a space separates currency_symbol from a negative value.  */
+  char n_sep_by_space;
+  /* Positive and negative sign positions:
+     0 Parentheses surround the quantity and currency_symbol.
+     1 The sign string precedes the quantity and currency_symbol.
+     2 The sign string follows the quantity and currency_symbol.
+     3 The sign string immediately precedes the currency_symbol.
+     4 The sign string immediately follows the currency_symbol.  */
+  char p_sign_posn;
+  char n_sign_posn;
+#ifdef __USE_ISOC99
+  /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds.  */
+  char int_p_cs_precedes;
+  /* 1 iff a space separates int_curr_symbol from a positive value.  */
+  char int_p_sep_by_space;
+  /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds.  */
+  char int_n_cs_precedes;
+  /* 1 iff a space separates int_curr_symbol from a negative value.  */
+  char int_n_sep_by_space;
+  /* Positive and negative sign positions:
+     0 Parentheses surround the quantity and int_curr_symbol.
+     1 The sign string precedes the quantity and int_curr_symbol.
+     2 The sign string follows the quantity and int_curr_symbol.
+     3 The sign string immediately precedes the int_curr_symbol.
+     4 The sign string immediately follows the int_curr_symbol.  */
+  char int_p_sign_posn;
+  char int_n_sign_posn;
+#else
+  char __int_p_cs_precedes;
+  char __int_p_sep_by_space;
+  char __int_n_cs_precedes;
+  char __int_n_sep_by_space;
+  char __int_p_sign_posn;
+  char __int_n_sign_posn;
+#endif
+};
+
+
+/* Set and/or return the current locale.  */
+extern char *setlocale (int __category, const char *__locale) __THROW;
+
+/* Return the numeric/monetary information for the current locale.  */
+extern struct lconv *localeconv (void) __THROW;
+
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_XOPEN2K8
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Get locale datatype definition.  */
+# include <xlocale.h>
+
+/* Return a reference to a data structure representing a set of locale
+   datasets.  Unlike for the CATEGORY parameter for `setlocale' the
+   CATEGORY_MASK parameter here uses a single bit for each category,
+   made by OR'ing together LC_*_MASK bits above.  */
+extern __locale_t newlocale (int __category_mask, const char *__locale,
+                            __locale_t __base) __THROW;
+
+/* These are the bits that can be set in the CATEGORY_MASK argument to
+   `newlocale'.  In the GNU implementation, LC_FOO_MASK has the value
+   of (1 << LC_FOO), but this is not a part of the interface that
+   callers can assume will be true.  */
+# define LC_CTYPE_MASK         (1 << __LC_CTYPE)
+# define LC_NUMERIC_MASK       (1 << __LC_NUMERIC)
+# define LC_TIME_MASK          (1 << __LC_TIME)
+# define LC_COLLATE_MASK       (1 << __LC_COLLATE)
+# define LC_MONETARY_MASK      (1 << __LC_MONETARY)
+# define LC_MESSAGES_MASK      (1 << __LC_MESSAGES)
+# define LC_PAPER_MASK         (1 << __LC_PAPER)
+# define LC_NAME_MASK          (1 << __LC_NAME)
+# define LC_ADDRESS_MASK       (1 << __LC_ADDRESS)
+# define LC_TELEPHONE_MASK     (1 << __LC_TELEPHONE)
+# define LC_MEASUREMENT_MASK   (1 << __LC_MEASUREMENT)
+# define LC_IDENTIFICATION_MASK        (1 << __LC_IDENTIFICATION)
+# define LC_ALL_MASK           (LC_CTYPE_MASK \
+                                | LC_NUMERIC_MASK \
+                                | LC_TIME_MASK \
+                                | LC_COLLATE_MASK \
+                                | LC_MONETARY_MASK \
+                                | LC_MESSAGES_MASK \
+                                | LC_PAPER_MASK \
+                                | LC_NAME_MASK \
+                                | LC_ADDRESS_MASK \
+                                | LC_TELEPHONE_MASK \
+                                | LC_MEASUREMENT_MASK \
+                                | LC_IDENTIFICATION_MASK \
+                                )
+
+/* Return a duplicate of the set of locale in DATASET.  All usage
+   counters are increased if necessary.  */
+extern __locale_t duplocale (__locale_t __dataset) __THROW;
+
+/* Free the data associated with a locale dataset previously returned
+   by a call to `setlocale_r'.  */
+extern void freelocale (__locale_t __dataset) __THROW;
+
+/* Switch the current thread's locale to DATASET.
+   If DATASET is null, instead just return the current setting.
+   The special value LC_GLOBAL_LOCALE is the initial setting
+   for all threads and can also be installed any time, meaning
+   the thread uses the global settings controlled by `setlocale'.  */
+extern __locale_t uselocale (__locale_t __dataset) __THROW;
+
+/* This value can be passed to `uselocale' and may be returned by it.
+   Passing this value to any other function has undefined behavior.  */
+# define LC_GLOBAL_LOCALE      ((__locale_t) -1L)
+
+#endif
+
+__END_DECLS
+
+#endif /* locale.h  */
diff --git a/lib/libdss-include/malloc.h b/lib/libdss-include/malloc.h
new file mode 100644 (file)
index 0000000..f65e18a
--- /dev/null
@@ -0,0 +1,171 @@
+/* Prototypes and definition for malloc implementation.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MALLOC_H
+#define _MALLOC_H 1
+
+#include <features.h>
+#include <stddef.h>
+#include <stdio.h>
+
+#ifdef _LIBC
+# define __MALLOC_HOOK_VOLATILE
+# define __MALLOC_DEPRECATED
+#else
+# define __MALLOC_HOOK_VOLATILE volatile
+# define __MALLOC_DEPRECATED __attribute_deprecated__
+#endif
+
+
+__BEGIN_DECLS
+
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t __nmemb, size_t __size)
+__THROW __attribute_malloc__ __wur;
+
+/* Re-allocate the previously allocated block in __ptr, making the new
+   block SIZE bytes long.  */
+/* __attribute_malloc__ is not used, because if realloc returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *realloc (void *__ptr, size_t __size)
+__THROW __attribute_warn_unused_result__;
+
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *__ptr) __THROW;
+
+/* Free a block allocated by `calloc'. */
+extern void cfree (void *__ptr) __THROW;
+
+/* Allocate SIZE bytes allocated to ALIGNMENT bytes.  */
+extern void *memalign (size_t __alignment, size_t __size)
+__THROW __attribute_malloc__ __wur;
+
+/* Allocate SIZE bytes on a page boundary.  */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Equivalent to valloc(minimum-page-that-holds(n)), that is, round up
+   __size to nearest pagesize. */
+extern void *pvalloc (size_t __size) __THROW __attribute_malloc__ __wur;
+
+/* Underlying allocation function; successive calls should return
+   contiguous pieces of memory.  */
+extern void *(*__morecore) (ptrdiff_t __size);
+
+/* Default value of `__morecore'.  */
+extern void *__default_morecore (ptrdiff_t __size)
+__THROW __attribute_malloc__;
+
+/* SVID2/XPG mallinfo structure */
+
+struct mallinfo
+{
+  int arena;    /* non-mmapped space allocated from system */
+  int ordblks;  /* number of free chunks */
+  int smblks;   /* number of fastbin blocks */
+  int hblks;    /* number of mmapped regions */
+  int hblkhd;   /* space in mmapped regions */
+  int usmblks;  /* maximum total allocated space */
+  int fsmblks;  /* space available in freed fastbin blocks */
+  int uordblks; /* total allocated space */
+  int fordblks; /* total free space */
+  int keepcost; /* top-most, releasable (via malloc_trim) space */
+};
+
+/* Returns a copy of the updated current mallinfo. */
+extern struct mallinfo mallinfo (void) __THROW;
+
+/* SVID2/XPG mallopt options */
+#ifndef M_MXFAST
+# define M_MXFAST  1    /* maximum request size for "fastbins" */
+#endif
+#ifndef M_NLBLKS
+# define M_NLBLKS  2    /* UNUSED in this malloc */
+#endif
+#ifndef M_GRAIN
+# define M_GRAIN   3    /* UNUSED in this malloc */
+#endif
+#ifndef M_KEEP
+# define M_KEEP    4    /* UNUSED in this malloc */
+#endif
+
+/* mallopt options that actually do something */
+#define M_TRIM_THRESHOLD    -1
+#define M_TOP_PAD           -2
+#define M_MMAP_THRESHOLD    -3
+#define M_MMAP_MAX          -4
+#define M_CHECK_ACTION      -5
+#define M_PERTURB           -6
+#define M_ARENA_TEST        -7
+#define M_ARENA_MAX         -8
+
+/* General SVID/XPG interface to tunable parameters. */
+extern int mallopt (int __param, int __val) __THROW;
+
+/* Release all but __pad bytes of freed top-most memory back to the
+   system. Return 1 if successful, else 0. */
+extern int malloc_trim (size_t __pad) __THROW;
+
+/* Report the number of usable allocated bytes associated with allocated
+   chunk __ptr. */
+extern size_t malloc_usable_size (void *__ptr) __THROW;
+
+/* Prints brief summary statistics on stderr. */
+extern void malloc_stats (void) __THROW;
+
+/* Output information about state of allocator to stream FP.  */
+extern int malloc_info (int __options, FILE *__fp) __THROW;
+
+/* Record the state of all malloc variables in an opaque data structure. */
+extern void *malloc_get_state (void) __THROW;
+
+/* Restore the state of all malloc variables from data obtained with
+   malloc_get_state(). */
+extern int malloc_set_state (void *__ptr) __THROW;
+
+/* Called once when malloc is initialized; redefining this variable in
+   the application provides the preferred way to set up the hook
+   pointers. */
+extern void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void)
+__MALLOC_DEPRECATED;
+/* Hooks for debugging and user-defined versions. */
+extern void (*__MALLOC_HOOK_VOLATILE __free_hook) (void *__ptr,
+                                                   const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __malloc_hook)(size_t __size,
+                                                     const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __realloc_hook)(void *__ptr,
+                                                      size_t __size,
+                                                      const void *)
+__MALLOC_DEPRECATED;
+extern void *(*__MALLOC_HOOK_VOLATILE __memalign_hook)(size_t __alignment,
+                                                       size_t __size,
+                                                       const void *)
+__MALLOC_DEPRECATED;
+extern void (*__MALLOC_HOOK_VOLATILE __after_morecore_hook) (void);
+
+/* Activate a standard set of debugging hooks. */
+extern void __malloc_check_init (void) __THROW __MALLOC_DEPRECATED;
+
+
+__END_DECLS
+#endif /* malloc.h */
diff --git a/lib/libdss-include/math.h b/lib/libdss-include/math.h
new file mode 100644 (file)
index 0000000..4724b10
--- /dev/null
@@ -0,0 +1,537 @@
+/* Declarations for math functions.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.12 Mathematics      <math.h>
+ */
+
+#ifndef        _MATH_H
+#define        _MATH_H 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get machine-dependent vector math functions declarations.  */
+#include <bits/math-vector.h>
+
+/* Get machine-dependent HUGE_VAL value (returned on overflow).
+   On all IEEE754 machines, this is +Infinity.  */
+#include <bits/huge_val.h>
+#ifdef __USE_ISOC99
+# include <bits/huge_valf.h>
+# include <bits/huge_vall.h>
+
+/* Get machine-dependent INFINITY value.  */
+# include <bits/inf.h>
+
+/* Get machine-dependent NAN value (returned for some domain errors).  */
+# include <bits/nan.h>
+#endif /* __USE_ISOC99 */
+
+/* Get general and ISO C99 specific information.  */
+#include <bits/mathdef.h>
+
+/* The file <bits/mathcalls.h> contains the prototypes for all the
+   actual math functions.  These macros are used for those prototypes,
+   so we can easily declare each function as both `name' and `__name',
+   and can declare the float versions `namef' and `__namef'.  */
+
+#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function)
+
+#define __MATHCALL_VEC(function, suffix, args)         \
+  __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \
+  __MATHCALL (function, suffix, args)
+
+#define __MATHDECL_VEC(type, function,suffix, args) \
+  __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \
+  __MATHDECL(type, function,suffix, args)
+
+#define __MATHCALL(function,suffix, args)      \
+  __MATHDECL (_Mdouble_,function,suffix, args)
+#define __MATHDECL(type, function,suffix, args) \
+  __MATHDECL_1(type, function,suffix, args); \
+  __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
+#define __MATHCALLX(function,suffix, args, attrib)     \
+  __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
+#define __MATHDECLX(type, function,suffix, args, attrib) \
+  __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
+  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
+#define __MATHDECL_1(type, function,suffix, args) \
+  extern type __MATH_PRECNAME(function,suffix) args __THROW
+
+#define _Mdouble_              double
+#define __MATH_PRECNAME(name,r)        __CONCAT(name,r)
+#define __MATH_DECLARING_DOUBLE  1
+#define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
+#define _Mdouble_END_NAMESPACE   __END_NAMESPACE_STD
+#include <bits/mathcalls.h>
+#undef _Mdouble_
+#undef _Mdouble_BEGIN_NAMESPACE
+#undef _Mdouble_END_NAMESPACE
+#undef __MATH_PRECNAME
+#undef __MATH_DECLARING_DOUBLE
+
+#ifdef __USE_ISOC99
+
+
+/* Include the file of declarations again, this time using `float'
+   instead of `double' and appending f to each function name.  */
+
+# ifndef _Mfloat_
+#  define _Mfloat_             float
+# endif
+# define _Mdouble_             _Mfloat_
+# define __MATH_PRECNAME(name,r) name##f##r
+# define __MATH_DECLARING_DOUBLE  0
+# define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
+# define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
+# include <bits/mathcalls.h>
+# undef        _Mdouble_
+# undef _Mdouble_BEGIN_NAMESPACE
+# undef _Mdouble_END_NAMESPACE
+# undef        __MATH_PRECNAME
+# undef __MATH_DECLARING_DOUBLE
+
+# if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC) \
+     || defined __LDBL_COMPAT \
+     || defined _LIBC_TEST
+#  ifdef __LDBL_COMPAT
+
+#   ifdef __USE_ISOC99
+extern float __nldbl_nexttowardf (float __x, long double __y)
+                                 __THROW __attribute__ ((__const__));
+#    ifdef __REDIRECT_NTH
+extern float __REDIRECT_NTH (nexttowardf, (float __x, long double __y),
+                            __nldbl_nexttowardf)
+     __attribute__ ((__const__));
+extern double __REDIRECT_NTH (nexttoward, (double __x, long double __y),
+                             nextafter) __attribute__ ((__const__));
+extern long double __REDIRECT_NTH (nexttowardl,
+                                  (long double __x, long double __y),
+                                  nextafter) __attribute__ ((__const__));
+#    endif
+#   endif
+
+#   undef __MATHDECL_1
+#   define __MATHDECL_2(type, function,suffix, args, alias) \
+  extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix), \
+                            args, alias)
+#   define __MATHDECL_1(type, function,suffix, args) \
+  __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix))
+#  endif
+
+/* Include the file of declarations again, this time using `long double'
+   instead of `double' and appending l to each function name.  */
+
+#  ifndef _Mlong_double_
+#   define _Mlong_double_      long double
+#  endif
+#  define _Mdouble_            _Mlong_double_
+#  define __MATH_PRECNAME(name,r) name##l##r
+#  define __MATH_DECLARING_DOUBLE  0
+#  define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
+#  define _Mdouble_END_NAMESPACE   __END_NAMESPACE_C99
+#  define __MATH_DECLARE_LDOUBLE   1
+#  include <bits/mathcalls.h>
+#  undef _Mdouble_
+#  undef _Mdouble_BEGIN_NAMESPACE
+#  undef _Mdouble_END_NAMESPACE
+#  undef __MATH_PRECNAME
+#  undef __MATH_DECLARING_DOUBLE
+
+# endif /* !(__NO_LONG_DOUBLE_MATH && _LIBC) || __LDBL_COMPAT */
+
+#endif /* Use ISO C99.  */
+#undef __MATHDECL_1
+#undef __MATHDECL
+#undef __MATHCALL
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* This variable is used by `gamma' and `lgamma'.  */
+extern int signgam;
+#endif
+
+
+/* ISO C99 defines some generic macros which work on any data type.  */
+#ifdef __USE_ISOC99
+
+/* Get the architecture specific values describing the floating-point
+   evaluation.  The following symbols will get defined:
+
+    float_t    floating-point type at least as wide as `float' used
+               to evaluate `float' expressions
+    double_t   floating-point type at least as wide as `double' used
+               to evaluate `double' expressions
+
+    FLT_EVAL_METHOD
+               Defined to
+                 0     if `float_t' is `float' and `double_t' is `double'
+                 1     if `float_t' and `double_t' are `double'
+                 2     if `float_t' and `double_t' are `long double'
+                 else  `float_t' and `double_t' are unspecified
+
+    INFINITY   representation of the infinity value of type `float'
+
+    FP_FAST_FMA
+    FP_FAST_FMAF
+    FP_FAST_FMAL
+               If defined it indicates that the `fma' function
+               generally executes about as fast as a multiply and an add.
+               This macro is defined only iff the `fma' function is
+               implemented directly with a hardware multiply-add instructions.
+
+    FP_ILOGB0  Expands to a value returned by `ilogb (0.0)'.
+    FP_ILOGBNAN        Expands to a value returned by `ilogb (NAN)'.
+
+    DECIMAL_DIG        Number of decimal digits supported by conversion between
+               decimal and all internal floating-point formats.
+
+*/
+
+/* All floating-point numbers can be put in one of these categories.  */
+enum
+  {
+    FP_NAN =
+# define FP_NAN 0
+      FP_NAN,
+    FP_INFINITE =
+# define FP_INFINITE 1
+      FP_INFINITE,
+    FP_ZERO =
+# define FP_ZERO 2
+      FP_ZERO,
+    FP_SUBNORMAL =
+# define FP_SUBNORMAL 3
+      FP_SUBNORMAL,
+    FP_NORMAL =
+# define FP_NORMAL 4
+      FP_NORMAL
+  };
+
+/* GCC bug 66462 means we cannot use the math builtins with -fsignaling-nan,
+   so disable builtins if this is enabled.  When fixed in a newer GCC,
+   the __SUPPORT_SNAN__ check may be skipped for those versions.  */
+
+/* Return number of classification appropriate for X.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__                        \
+     && !defined __OPTIMIZE_SIZE__
+#  define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE,           \
+     FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define fpclassify(x) \
+     (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
+# else
+#  define fpclassify(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __fpclassifyf (x)                                                    \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __fpclassify (x) : __fpclassifyl (x))
+# endif
+
+/* Return nonzero value if sign of X is negative.  */
+# if __GNUC_PREREQ (4,0)
+#  define signbit(x) \
+     (sizeof (x) == sizeof (float)                                            \
+      ? __builtin_signbitf (x)                                                        \
+      : sizeof (x) == sizeof (double)                                         \
+      ? __builtin_signbit (x) : __builtin_signbitl (x))
+# else
+#  ifdef __NO_LONG_DOUBLE_MATH
+#   define signbit(x) \
+     (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
+#  else
+#   define signbit(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __signbitf (x)                                                       \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __signbit (x) : __signbitl (x))
+#  endif
+# endif
+
+/* Return nonzero value if X is not +-Inf or NaN.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isfinite(x) __builtin_isfinite (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isfinite(x) \
+     (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
+# else
+#  define isfinite(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __finitef (x)                                                        \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __finite (x) : __finitel (x))
+# endif
+
+/* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isnormal(x) __builtin_isnormal (x)
+# else
+#  define isnormal(x) (fpclassify (x) == FP_NORMAL)
+# endif
+
+/* Return nonzero value if X is a NaN.  We could use `fpclassify' but
+   we already have this functions `__isnan' and it is faster.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isnan(x) __builtin_isnan (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isnan(x) \
+     (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
+# else
+#  define isnan(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __isnanf (x)                                                         \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __isnan (x) : __isnanl (x))
+# endif
+
+/* Return nonzero value if X is positive or negative infinity.  */
+# if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__
+#  define isinf(x) __builtin_isinf_sign (x)
+# elif defined __NO_LONG_DOUBLE_MATH
+#  define isinf(x) \
+     (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
+# else
+#  define isinf(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __isinff (x)                                                         \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __isinf (x) : __isinfl (x))
+# endif
+
+/* Bitmasks for the math_errhandling macro.  */
+# define MATH_ERRNO    1       /* errno set by math functions.  */
+# define MATH_ERREXCEPT        2       /* Exceptions raised by math functions.  */
+
+/* By default all functions support both errno and exception handling.
+   In gcc's fast math mode and if inline functions are defined this
+   might not be true.  */
+# ifndef __FAST_MATH__
+#  define math_errhandling     (MATH_ERRNO | MATH_ERREXCEPT)
+# endif
+
+#endif /* Use ISO C99.  */
+
+#ifdef __USE_GNU
+/* Return nonzero value if X is a signaling NaN.  */
+# ifdef __NO_LONG_DOUBLE_MATH
+#  define issignaling(x) \
+     (sizeof (x) == sizeof (float) ? __issignalingf (x) : __issignaling (x))
+# else
+#  define issignaling(x) \
+     (sizeof (x) == sizeof (float)                                           \
+      ? __issignalingf (x)                                                   \
+      : sizeof (x) == sizeof (double)                                        \
+      ? __issignaling (x) : __issignalingl (x))
+# endif
+#endif /* Use GNU.  */
+
+#ifdef __USE_MISC
+/* Support for various different standard error handling behaviors.  */
+typedef enum
+{
+  _IEEE_ = -1, /* According to IEEE 754/IEEE 854.  */
+  _SVID_,      /* According to System V, release 4.  */
+  _XOPEN_,     /* Nowadays also Unix98.  */
+  _POSIX_,
+  _ISOC_       /* Actually this is ISO C99.  */
+} _LIB_VERSION_TYPE;
+
+/* This variable can be changed at run-time to any of the values above to
+   affect floating point error handling behavior (it may also be necessary
+   to change the hardware FPU exception settings).  */
+extern _LIB_VERSION_TYPE _LIB_VERSION;
+#endif
+
+
+#ifdef __USE_MISC
+/* In SVID error handling, `matherr' is called with this description
+   of the exceptional condition.
+
+   We have a problem when using C++ since `exception' is a reserved
+   name in C++.  */
+# ifdef __cplusplus
+struct __exception
+# else
+struct exception
+# endif
+  {
+    int type;
+    char *name;
+    double arg1;
+    double arg2;
+    double retval;
+  };
+
+# ifdef __cplusplus
+extern int matherr (struct __exception *__exc) throw ();
+# else
+extern int matherr (struct exception *__exc);
+# endif
+
+# define X_TLOSS       1.41484755040568800000e+16
+
+/* Types of exceptions in the `type' field.  */
+# define DOMAIN                1
+# define SING          2
+# define OVERFLOW      3
+# define UNDERFLOW     4
+# define TLOSS         5
+# define PLOSS         6
+
+/* SVID mode specifies returning this large value instead of infinity.  */
+# define HUGE          3.40282347e+38F
+
+#else  /* !Misc.  */
+
+# ifdef __USE_XOPEN
+/* X/Open wants another strange constant.  */
+#  define MAXFLOAT     3.40282347e+38F
+# endif
+
+#endif /* Misc.  */
+
+
+/* Some useful constants.  */
+#if defined __USE_MISC || defined __USE_XOPEN
+# define M_E           2.7182818284590452354   /* e */
+# define M_LOG2E       1.4426950408889634074   /* log_2 e */
+# define M_LOG10E      0.43429448190325182765  /* log_10 e */
+# define M_LN2         0.69314718055994530942  /* log_e 2 */
+# define M_LN10                2.30258509299404568402  /* log_e 10 */
+# define M_PI          3.14159265358979323846  /* pi */
+# define M_PI_2                1.57079632679489661923  /* pi/2 */
+# define M_PI_4                0.78539816339744830962  /* pi/4 */
+# define M_1_PI                0.31830988618379067154  /* 1/pi */
+# define M_2_PI                0.63661977236758134308  /* 2/pi */
+# define M_2_SQRTPI    1.12837916709551257390  /* 2/sqrt(pi) */
+# define M_SQRT2       1.41421356237309504880  /* sqrt(2) */
+# define M_SQRT1_2     0.70710678118654752440  /* 1/sqrt(2) */
+#endif
+
+/* The above constants are not adequate for computation using `long double's.
+   Therefore we provide as an extension constants with similar names as a
+   GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
+#ifdef __USE_GNU
+# define M_El          2.718281828459045235360287471352662498L /* e */
+# define M_LOG2El      1.442695040888963407359924681001892137L /* log_2 e */
+# define M_LOG10El     0.434294481903251827651128918916605082L /* log_10 e */
+# define M_LN2l                0.693147180559945309417232121458176568L /* log_e 2 */
+# define M_LN10l       2.302585092994045684017991454684364208L /* log_e 10 */
+# define M_PIl         3.141592653589793238462643383279502884L /* pi */
+# define M_PI_2l       1.570796326794896619231321691639751442L /* pi/2 */
+# define M_PI_4l       0.785398163397448309615660845819875721L /* pi/4 */
+# define M_1_PIl       0.318309886183790671537767526745028724L /* 1/pi */
+# define M_2_PIl       0.636619772367581343075535053490057448L /* 2/pi */
+# define M_2_SQRTPIl   1.128379167095512573896158903121545172L /* 2/sqrt(pi) */
+# define M_SQRT2l      1.414213562373095048801688724209698079L /* sqrt(2) */
+# define M_SQRT1_2l    0.707106781186547524400844362104849039L /* 1/sqrt(2) */
+#endif
+
+
+/* When compiling in strict ISO C compatible mode we must not use the
+   inline functions since they, among other things, do not set the
+   `errno' variable correctly.  */
+#if defined __STRICT_ANSI__ && !defined __NO_MATH_INLINES
+# define __NO_MATH_INLINES     1
+#endif
+
+#if defined __USE_ISOC99 && __GNUC_PREREQ(2,97)
+/* ISO C99 defines some macros to compare number while taking care for
+   unordered numbers.  Many FPUs provide special instructions to support
+   these operations.  Generic support in GCC for these as builtins went
+   in before 3.0.0, but not all cpus added their patterns.  We define
+   versions that use the builtins here, and <bits/mathinline.h> will
+   undef/redefine as appropriate for the specific GCC version in use.  */
+# define isgreater(x, y)       __builtin_isgreater(x, y)
+# define isgreaterequal(x, y)  __builtin_isgreaterequal(x, y)
+# define isless(x, y)          __builtin_isless(x, y)
+# define islessequal(x, y)     __builtin_islessequal(x, y)
+# define islessgreater(x, y)   __builtin_islessgreater(x, y)
+# define isunordered(u, v)     __builtin_isunordered(u, v)
+#endif
+
+/* Get machine-dependent inline versions (if there are any).  */
+#ifdef __USE_EXTERN_INLINES
+# include <bits/mathinline.h>
+#endif
+
+/* Define special entry points to use when the compiler got told to
+   only expect finite results.  */
+#if defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0
+# include <bits/math-finite.h>
+#endif
+
+#ifdef __USE_ISOC99
+/* If we've still got undefined comparison macros, provide defaults.  */
+
+/* Return nonzero value if X is greater than Y.  */
+# ifndef isgreater
+#  define isgreater(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x > __y; }))
+# endif
+
+/* Return nonzero value if X is greater than or equal to Y.  */
+# ifndef isgreaterequal
+#  define isgreaterequal(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x >= __y; }))
+# endif
+
+/* Return nonzero value if X is less than Y.  */
+# ifndef isless
+#  define isless(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x < __y; }))
+# endif
+
+/* Return nonzero value if X is less than or equal to Y.  */
+# ifndef islessequal
+#  define islessequal(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && __x <= __y; }))
+# endif
+
+/* Return nonzero value if either X is less than Y or Y is less than X.  */
+# ifndef islessgreater
+#  define islessgreater(x, y) \
+  (__extension__                                                             \
+   ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y);                              \
+      !isunordered (__x, __y) && (__x < __y || __y < __x); }))
+# endif
+
+/* Return nonzero value if arguments are unordered.  */
+# ifndef isunordered
+#  define isunordered(u, v) \
+  (__extension__                                                             \
+   ({ __typeof__(u) __u = (u); __typeof__(v) __v = (v);                              \
+      fpclassify (__u) == FP_NAN || fpclassify (__v) == FP_NAN; }))
+# endif
+
+#endif
+
+__END_DECLS
+
+
+#endif /* math.h  */
diff --git a/lib/libdss-include/mcheck.h b/lib/libdss-include/mcheck.h
new file mode 100644 (file)
index 0000000..416fcd6
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MCHECK_H
+#define _MCHECK_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Return values for `mprobe': these are the kinds of inconsistencies that
+   `mcheck' enables detection of.  */
+enum mcheck_status
+{
+  MCHECK_DISABLED = -1,         /* Consistency checking is not turned on.  */
+  MCHECK_OK,                    /* Block is fine.  */
+  MCHECK_FREE,                  /* Block freed twice.  */
+  MCHECK_HEAD,                  /* Memory before the block was clobbered.  */
+  MCHECK_TAIL                   /* Memory after the block was clobbered.  */
+};
+
+
+/* Activate a standard collection of debugging hooks.  This must be called
+   before `malloc' is ever called.  ABORTFUNC is called with an error code
+   (see enum above) when an inconsistency is detected.  If ABORTFUNC is
+   null, the standard function prints on stderr and then calls `abort'.  */
+extern int mcheck (void (*__abortfunc)(enum mcheck_status)) __THROW;
+
+/* Similar to `mcheck' but performs checks for all block whenever one of
+   the memory handling functions is called.  This can be very slow.  */
+extern int mcheck_pedantic (void (*__abortfunc)(enum mcheck_status)) __THROW;
+
+/* Force check of all blocks now.  */
+extern void mcheck_check_all (void);
+
+/* Check for aberrations in a particular malloc'd block.  You must have
+   called `mcheck' already.  These are the same checks that `mcheck' does
+   when you free or reallocate a block.  */
+extern enum mcheck_status mprobe (void *__ptr) __THROW;
+
+/* Activate a standard collection of tracing hooks.  */
+extern void mtrace (void) __THROW;
+extern void muntrace (void) __THROW;
+
+__END_DECLS
+#endif /* mcheck.h */
diff --git a/lib/libdss-include/memory.h b/lib/libdss-include/memory.h
new file mode 100644 (file)
index 0000000..10ecaa2
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * SVID
+ */
+
+#ifndef        _MEMORY_H
+#define        _MEMORY_H       1
+
+#include <features.h>
+
+
+#ifndef        _STRING_H
+# include <string.h>
+#endif /* string.h  */
+
+
+#endif /* memory.h  */
diff --git a/lib/libdss-include/misc/cxl.h b/lib/libdss-include/misc/cxl.h
new file mode 100644 (file)
index 0000000..94126f7
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2014 IBM Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _MISC_CXL_H
+#define _MISC_CXL_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+
+struct cxl_ioctl_start_work {
+       __u64 flags;
+       __u64 work_element_descriptor;
+       __u64 amr;
+       __s16 num_interrupts;
+       __s16 reserved1;
+       __s32 reserved2;
+       __u64 reserved3;
+       __u64 reserved4;
+       __u64 reserved5;
+       __u64 reserved6;
+};
+
+#define CXL_START_WORK_AMR             0x0000000000000001ULL
+#define CXL_START_WORK_NUM_IRQS                0x0000000000000002ULL
+#define CXL_START_WORK_ERR_FF          0x0000000000000004ULL
+#define CXL_START_WORK_ALL             (CXL_START_WORK_AMR |\
+                                        CXL_START_WORK_NUM_IRQS |\
+                                        CXL_START_WORK_ERR_FF)
+
+
+/* Possible modes that an afu can be in */
+#define CXL_MODE_DEDICATED   0x1
+#define CXL_MODE_DIRECTED    0x2
+
+/* possible flags for the cxl_afu_id flags field */
+#define CXL_AFUID_FLAG_SLAVE    0x1  /* In directed-mode afu is in slave mode */
+
+struct cxl_afu_id {
+       __u64 flags;     /* One of CXL_AFUID_FLAG_X */
+       __u32 card_id;
+       __u32 afu_offset;
+       __u32 afu_mode;  /* one of the CXL_MODE_X */
+       __u32 reserved1;
+       __u64 reserved2;
+       __u64 reserved3;
+       __u64 reserved4;
+       __u64 reserved5;
+       __u64 reserved6;
+};
+
+/* ioctl numbers */
+#define CXL_MAGIC 0xCA
+#define CXL_IOCTL_START_WORK           _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)
+#define CXL_IOCTL_GET_PROCESS_ELEMENT  _IOR(CXL_MAGIC, 0x01, __u32)
+#define CXL_IOCTL_GET_AFU_ID            _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id)
+
+#define CXL_READ_MIN_SIZE 0x1000 /* 4K */
+
+/* Events from read() */
+enum cxl_event_type {
+       CXL_EVENT_RESERVED      = 0,
+       CXL_EVENT_AFU_INTERRUPT = 1,
+       CXL_EVENT_DATA_STORAGE  = 2,
+       CXL_EVENT_AFU_ERROR     = 3,
+};
+
+struct cxl_event_header {
+       __u16 type;
+       __u16 size;
+       __u16 process_element;
+       __u16 reserved1;
+};
+
+struct cxl_event_afu_interrupt {
+       __u16 flags;
+       __u16 irq; /* Raised AFU interrupt number */
+       __u32 reserved1;
+};
+
+struct cxl_event_data_storage {
+       __u16 flags;
+       __u16 reserved1;
+       __u32 reserved2;
+       __u64 addr;
+       __u64 dsisr;
+       __u64 reserved3;
+};
+
+struct cxl_event_afu_error {
+       __u16 flags;
+       __u16 reserved1;
+       __u32 reserved2;
+       __u64 error;
+};
+
+struct cxl_event {
+       struct cxl_event_header header;
+       union {
+               struct cxl_event_afu_interrupt irq;
+               struct cxl_event_data_storage fault;
+               struct cxl_event_afu_error afu_error;
+       };
+};
+
+#endif /* _MISC_CXL_H */
diff --git a/lib/libdss-include/mntent.h b/lib/libdss-include/mntent.h
new file mode 100644 (file)
index 0000000..43c083b
--- /dev/null
@@ -0,0 +1,97 @@
+/* Utilities for reading/writing fstab, mtab, etc.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _MNTENT_H
+#define        _MNTENT_H       1
+
+#include <features.h>
+#define __need_FILE
+#include <stdio.h>
+#include <paths.h>
+
+
+/* File listing canonical interesting mount points.  */
+#define        MNTTAB          _PATH_MNTTAB    /* Deprecated alias.  */
+
+/* File listing currently active mount points.  */
+#define        MOUNTED         _PATH_MOUNTED   /* Deprecated alias.  */
+
+
+/* General filesystem types.  */
+#define MNTTYPE_IGNORE "ignore"        /* Ignore this entry.  */
+#define MNTTYPE_NFS    "nfs"           /* Network file system.  */
+#define MNTTYPE_SWAP   "swap"          /* Swap device.  */
+
+
+/* Generic mount options.  */
+#define MNTOPT_DEFAULTS        "defaults"      /* Use all default options.  */
+#define MNTOPT_RO      "ro"            /* Read only.  */
+#define MNTOPT_RW      "rw"            /* Read/write.  */
+#define MNTOPT_SUID    "suid"          /* Set uid allowed.  */
+#define MNTOPT_NOSUID  "nosuid"        /* No set uid allowed.  */
+#define MNTOPT_NOAUTO  "noauto"        /* Do not auto mount.  */
+
+
+__BEGIN_DECLS
+
+/* Structure describing a mount table entry.  */
+struct mntent
+  {
+    char *mnt_fsname;          /* Device or server for filesystem.  */
+    char *mnt_dir;             /* Directory mounted on.  */
+    char *mnt_type;            /* Type of filesystem: ufs, nfs, etc.  */
+    char *mnt_opts;            /* Comma-separated options for fs.  */
+    int mnt_freq;              /* Dump frequency (in days).  */
+    int mnt_passno;            /* Pass number for `fsck'.  */
+  };
+
+
+/* Prepare to begin reading and/or writing mount table entries from the
+   beginning of FILE.  MODE is as for `fopen'.  */
+extern FILE *setmntent (const char *__file, const char *__mode) __THROW;
+
+/* Read one mount table entry from STREAM.  Returns a pointer to storage
+   reused on the next call, or null for EOF or error (use feof/ferror to
+   check).  */
+extern struct mntent *getmntent (FILE *__stream) __THROW;
+
+#ifdef __USE_MISC
+/* Reentrant version of the above function.  */
+extern struct mntent *getmntent_r (FILE *__restrict __stream,
+                                  struct mntent *__restrict __result,
+                                  char *__restrict __buffer,
+                                  int __bufsize) __THROW;
+#endif
+
+/* Write the mount table entry described by MNT to STREAM.
+   Return zero on success, nonzero on failure.  */
+extern int addmntent (FILE *__restrict __stream,
+                     const struct mntent *__restrict __mnt) __THROW;
+
+/* Close a stream opened with `setmntent'.  */
+extern int endmntent (FILE *__stream) __THROW;
+
+/* Search MNT->mnt_opts for an option matching OPT.
+   Returns the address of the substring, or null if none found.  */
+extern char *hasmntopt (const struct mntent *__mnt,
+                       const char *__opt) __THROW;
+
+
+__END_DECLS
+
+#endif /* mntent.h */
diff --git a/lib/libdss-include/monetary.h b/lib/libdss-include/monetary.h
new file mode 100644 (file)
index 0000000..1fe9d6b
--- /dev/null
@@ -0,0 +1,58 @@
+/* Header file for monetary value formatting functions.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _MONETARY_H
+#define        _MONETARY_H     1
+
+#include <features.h>
+
+/* Get needed types.  */
+#define __need_size_t
+#include <stddef.h>
+#include <bits/types.h>
+
+#ifndef        __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+/* Formatting a monetary value according to the current locale.  */
+extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
+                       const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (3, 4);
+
+#ifdef __USE_XOPEN2K8
+# include <xlocale.h>
+
+/* Formatting a monetary value according to the given locale.  */
+extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
+                         __locale_t __loc,
+                         const char *__restrict __format, ...)
+     __THROW __attribute_format_strfmon__ (4, 5);
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/monetary-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* monetary.h */
diff --git a/lib/libdss-include/mqueue.h b/lib/libdss-include/mqueue.h
new file mode 100644 (file)
index 0000000..9700cdc
--- /dev/null
@@ -0,0 +1,100 @@
+/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MQUEUE_H
+#define _MQUEUE_H      1
+
+#include <features.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#define __need_sigevent_t
+#include <bits/siginfo.h>
+#define __need_timespec
+#include <time.h>
+/* Get the definition of mqd_t and struct mq_attr.  */
+#include <bits/mqueue.h>
+
+__BEGIN_DECLS
+
+/* Establish connection between a process and a message queue NAME and
+   return message queue descriptor or (mqd_t) -1 on error.  OFLAG determines
+   the type of access used.  If O_CREAT is on OFLAG, the third argument is
+   taken as a `mode_t', the mode of the created message queue, and the fourth
+   argument is taken as `struct mq_attr *', pointer to message queue
+   attributes.  If the fourth argument is NULL, default attributes are
+   used.  */
+extern mqd_t mq_open (const char *__name, int __oflag, ...)
+  __THROW __nonnull ((1));
+
+/* Removes the association between message queue descriptor MQDES and its
+   message queue.  */
+extern int mq_close (mqd_t __mqdes) __THROW;
+
+/* Query status and attributes of message queue MQDES.  */
+extern int mq_getattr (mqd_t __mqdes, struct mq_attr *__mqstat)
+  __THROW __nonnull ((2));
+
+/* Set attributes associated with message queue MQDES and if OMQSTAT is
+   not NULL also query its old attributes.  */
+extern int mq_setattr (mqd_t __mqdes,
+                      const struct mq_attr *__restrict __mqstat,
+                      struct mq_attr *__restrict __omqstat)
+  __THROW __nonnull ((2));
+
+/* Remove message queue named NAME.  */
+extern int mq_unlink (const char *__name) __THROW __nonnull ((1));
+
+/* Register notification issued upon message arrival to an empty
+   message queue MQDES.  */
+extern int mq_notify (mqd_t __mqdes, const struct sigevent *__notification)
+     __THROW;
+
+/* Receive the oldest from highest priority messages in message queue
+   MQDES.  */
+extern ssize_t mq_receive (mqd_t __mqdes, char *__msg_ptr, size_t __msg_len,
+                          unsigned int *__msg_prio) __nonnull ((2));
+
+/* Add message pointed by MSG_PTR to message queue MQDES.  */
+extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
+                   unsigned int __msg_prio) __nonnull ((2));
+
+#ifdef __USE_XOPEN2K
+/* Receive the oldest from highest priority messages in message queue
+   MQDES, stop waiting if ABS_TIMEOUT expires.  */
+extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
+                               size_t __msg_len,
+                               unsigned int *__restrict __msg_prio,
+                               const struct timespec *__restrict __abs_timeout)
+  __nonnull ((2, 5));
+
+/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
+   on full message queue if ABS_TIMEOUT expires.  */
+extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr,
+                        size_t __msg_len, unsigned int __msg_prio,
+                        const struct timespec *__abs_timeout)
+  __nonnull ((2, 5));
+#endif
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \
+    && defined __va_arg_pack_len
+# include <bits/mqueue2.h>
+#endif
+
+__END_DECLS
+
+#endif /* mqueue.h */
diff --git a/lib/libdss-include/mtd/inftl-user.h b/lib/libdss-include/mtd/inftl-user.h
new file mode 100644 (file)
index 0000000..8376bd1
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Parts of INFTL headers shared with userspace
+ *
+ */
+
+#ifndef __MTD_INFTL_USER_H__
+#define __MTD_INFTL_USER_H__
+
+#include <linux/types.h>
+
+#define        OSAK_VERSION    0x5120
+#define        PERCENTUSED     98
+
+#define        SECTORSIZE      512
+
+/* Block Control Information */
+
+struct inftl_bci {
+       __u8 ECCsig[6];
+       __u8 Status;
+       __u8 Status1;
+} __attribute__((packed));
+
+struct inftl_unithead1 {
+       __u16 virtualUnitNo;
+       __u16 prevUnitNo;
+       __u8 ANAC;
+       __u8 NACs;
+       __u8 parityPerField;
+       __u8 discarded;
+} __attribute__((packed));
+
+struct inftl_unithead2 {
+       __u8 parityPerField;
+       __u8 ANAC;
+       __u16 prevUnitNo;
+       __u16 virtualUnitNo;
+       __u8 NACs;
+       __u8 discarded;
+} __attribute__((packed));
+
+struct inftl_unittail {
+       __u8 Reserved[4];
+       __u16 EraseMark;
+       __u16 EraseMark1;
+} __attribute__((packed));
+
+union inftl_uci {
+       struct inftl_unithead1 a;
+       struct inftl_unithead2 b;
+       struct inftl_unittail c;
+};
+
+struct inftl_oob {
+       struct inftl_bci b;
+       union inftl_uci u;
+};
+
+
+/* INFTL Media Header */
+
+struct INFTLPartition {
+       __u32 virtualUnits;
+       __u32 firstUnit;
+       __u32 lastUnit;
+       __u32 flags;
+       __u32 spareUnits;
+       __u32 Reserved0;
+       __u32 Reserved1;
+} __attribute__((packed));
+
+struct INFTLMediaHeader {
+       char bootRecordID[8];
+       __u32 NoOfBootImageBlocks;
+       __u32 NoOfBinaryPartitions;
+       __u32 NoOfBDTLPartitions;
+       __u32 BlockMultiplierBits;
+       __u32 FormatFlags;
+       __u32 OsakVersion;
+       __u32 PercentUsed;
+       struct INFTLPartition Partitions[4];
+} __attribute__((packed));
+
+/* Partition flag types */
+#define        INFTL_BINARY    0x20000000
+#define        INFTL_BDTL      0x40000000
+#define        INFTL_LAST      0x80000000
+
+#endif /* __MTD_INFTL_USER_H__ */
+
+
diff --git a/lib/libdss-include/mtd/mtd-abi.h b/lib/libdss-include/mtd/mtd-abi.h
new file mode 100644 (file)
index 0000000..20444f3
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org> et al.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_ABI_H__
+#define __MTD_ABI_H__
+
+#include <linux/types.h>
+
+struct erase_info_user {
+       __u32 start;
+       __u32 length;
+};
+
+struct erase_info_user64 {
+       __u64 start;
+       __u64 length;
+};
+
+struct mtd_oob_buf {
+       __u32 start;
+       __u32 length;
+       unsigned char *ptr;
+};
+
+struct mtd_oob_buf64 {
+       __u64 start;
+       __u32 pad;
+       __u32 length;
+       __u64 usr_ptr;
+};
+
+/**
+ * MTD operation modes
+ *
+ * @MTD_OPS_PLACE_OOB: OOB data are placed at the given offset (default)
+ * @MTD_OPS_AUTO_OOB:  OOB data are automatically placed at the free areas
+ *                     which are defined by the internal ecclayout
+ * @MTD_OPS_RAW:       data are transferred as-is, with no error correction;
+ *                     this mode implies %MTD_OPS_PLACE_OOB
+ *
+ * These modes can be passed to ioctl(MEMWRITE) and are also used internally.
+ * See notes on "MTD file modes" for discussion on %MTD_OPS_RAW vs.
+ * %MTD_FILE_MODE_RAW.
+ */
+enum {
+       MTD_OPS_PLACE_OOB = 0,
+       MTD_OPS_AUTO_OOB = 1,
+       MTD_OPS_RAW = 2,
+};
+
+/**
+ * struct mtd_write_req - data structure for requesting a write operation
+ *
+ * @start:     start address
+ * @len:       length of data buffer
+ * @ooblen:    length of OOB buffer
+ * @usr_data:  user-provided data buffer
+ * @usr_oob:   user-provided OOB buffer
+ * @mode:      MTD mode (see "MTD operation modes")
+ * @padding:   reserved, must be set to 0
+ *
+ * This structure supports ioctl(MEMWRITE) operations, allowing data and/or OOB
+ * writes in various modes. To write to OOB-only, set @usr_data == NULL, and to
+ * write data-only, set @usr_oob == NULL. However, setting both @usr_data and
+ * @usr_oob to NULL is not allowed.
+ */
+struct mtd_write_req {
+       __u64 start;
+       __u64 len;
+       __u64 ooblen;
+       __u64 usr_data;
+       __u64 usr_oob;
+       __u8 mode;
+       __u8 padding[7];
+};
+
+#define MTD_ABSENT             0
+#define MTD_RAM                        1
+#define MTD_ROM                        2
+#define MTD_NORFLASH           3
+#define MTD_NANDFLASH          4       /* SLC NAND */
+#define MTD_DATAFLASH          6
+#define MTD_UBIVOLUME          7
+#define MTD_MLCNANDFLASH       8       /* MLC NAND (including TLC) */
+
+#define MTD_WRITEABLE          0x400   /* Device is writeable */
+#define MTD_BIT_WRITEABLE      0x800   /* Single bits can be flipped */
+#define MTD_NO_ERASE           0x1000  /* No erase necessary */
+#define MTD_POWERUP_LOCK       0x2000  /* Always locked after reset */
+
+/* Some common devices / combinations of capabilities */
+#define MTD_CAP_ROM            0
+#define MTD_CAP_RAM            (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
+#define MTD_CAP_NORFLASH       (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
+#define MTD_CAP_NANDFLASH      (MTD_WRITEABLE)
+#define MTD_CAP_NVRAM          (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
+
+/* Obsolete ECC byte placement modes (used with obsolete MEMGETOOBSEL) */
+#define MTD_NANDECC_OFF                0       // Switch off ECC (Not recommended)
+#define MTD_NANDECC_PLACE      1       // Use the given placement in the structure (YAFFS1 legacy mode)
+#define MTD_NANDECC_AUTOPLACE  2       // Use the default placement scheme
+#define MTD_NANDECC_PLACEONLY  3       // Use the given placement in the structure (Do not store ecc result on read)
+#define MTD_NANDECC_AUTOPL_USR         4       // Use the given autoplacement scheme rather than using the default
+
+/* OTP mode selection */
+#define MTD_OTP_OFF            0
+#define MTD_OTP_FACTORY                1
+#define MTD_OTP_USER           2
+
+struct mtd_info_user {
+       __u8 type;
+       __u32 flags;
+       __u32 size;     /* Total size of the MTD */
+       __u32 erasesize;
+       __u32 writesize;
+       __u32 oobsize;  /* Amount of OOB data per block (e.g. 16) */
+       __u64 padding;  /* Old obsolete field; do not use */
+};
+
+struct region_info_user {
+       __u32 offset;           /* At which this region starts,
+                                * from the beginning of the MTD */
+       __u32 erasesize;        /* For this region */
+       __u32 numblocks;        /* Number of blocks in this region */
+       __u32 regionindex;
+};
+
+struct otp_info {
+       __u32 start;
+       __u32 length;
+       __u32 locked;
+};
+
+/*
+ * Note, the following ioctl existed in the past and was removed:
+ * #define MEMSETOOBSEL           _IOW('M', 9, struct nand_oobinfo)
+ * Try to avoid adding a new ioctl with the same ioctl number.
+ */
+
+/* Get basic MTD characteristics info (better to use sysfs) */
+#define MEMGETINFO             _IOR('M', 1, struct mtd_info_user)
+/* Erase segment of MTD */
+#define MEMERASE               _IOW('M', 2, struct erase_info_user)
+/* Write out-of-band data from MTD */
+#define MEMWRITEOOB            _IOWR('M', 3, struct mtd_oob_buf)
+/* Read out-of-band data from MTD */
+#define MEMREADOOB             _IOWR('M', 4, struct mtd_oob_buf)
+/* Lock a chip (for MTD that supports it) */
+#define MEMLOCK                        _IOW('M', 5, struct erase_info_user)
+/* Unlock a chip (for MTD that supports it) */
+#define MEMUNLOCK              _IOW('M', 6, struct erase_info_user)
+/* Get the number of different erase regions */
+#define MEMGETREGIONCOUNT      _IOR('M', 7, int)
+/* Get information about the erase region for a specific index */
+#define MEMGETREGIONINFO       _IOWR('M', 8, struct region_info_user)
+/* Get info about OOB modes (e.g., RAW, PLACE, AUTO) - legacy interface */
+#define MEMGETOOBSEL           _IOR('M', 10, struct nand_oobinfo)
+/* Check if an eraseblock is bad */
+#define MEMGETBADBLOCK         _IOW('M', 11, __kernel_loff_t)
+/* Mark an eraseblock as bad */
+#define MEMSETBADBLOCK         _IOW('M', 12, __kernel_loff_t)
+/* Set OTP (One-Time Programmable) mode (factory vs. user) */
+#define OTPSELECT              _IOR('M', 13, int)
+/* Get number of OTP (One-Time Programmable) regions */
+#define OTPGETREGIONCOUNT      _IOW('M', 14, int)
+/* Get all OTP (One-Time Programmable) info about MTD */
+#define OTPGETREGIONINFO       _IOW('M', 15, struct otp_info)
+/* Lock a given range of user data (must be in mode %MTD_FILE_MODE_OTP_USER) */
+#define OTPLOCK                        _IOR('M', 16, struct otp_info)
+/* Get ECC layout (deprecated) */
+#define ECCGETLAYOUT           _IOR('M', 17, struct nand_ecclayout_user)
+/* Get statistics about corrected/uncorrected errors */
+#define ECCGETSTATS            _IOR('M', 18, struct mtd_ecc_stats)
+/* Set MTD mode on a per-file-descriptor basis (see "MTD file modes") */
+#define MTDFILEMODE            _IO('M', 19)
+/* Erase segment of MTD (supports 64-bit address) */
+#define MEMERASE64             _IOW('M', 20, struct erase_info_user64)
+/* Write data to OOB (64-bit version) */
+#define MEMWRITEOOB64          _IOWR('M', 21, struct mtd_oob_buf64)
+/* Read data from OOB (64-bit version) */
+#define MEMREADOOB64           _IOWR('M', 22, struct mtd_oob_buf64)
+/* Check if chip is locked (for MTD that supports it) */
+#define MEMISLOCKED            _IOR('M', 23, struct erase_info_user)
+/*
+ * Most generic write interface; can write in-band and/or out-of-band in various
+ * modes (see "struct mtd_write_req"). This ioctl is not supported for flashes
+ * without OOB, e.g., NOR flash.
+ */
+#define MEMWRITE               _IOWR('M', 24, struct mtd_write_req)
+
+/*
+ * Obsolete legacy interface. Keep it in order not to break userspace
+ * interfaces
+ */
+struct nand_oobinfo {
+       __u32 useecc;
+       __u32 eccbytes;
+       __u32 oobfree[8][2];
+       __u32 eccpos[32];
+};
+
+struct nand_oobfree {
+       __u32 offset;
+       __u32 length;
+};
+
+#define MTD_MAX_OOBFREE_ENTRIES        8
+#define MTD_MAX_ECCPOS_ENTRIES 64
+/*
+ * OBSOLETE: ECC layout control structure. Exported to user-space via ioctl
+ * ECCGETLAYOUT for backwards compatbility and should not be mistaken as a
+ * complete set of ECC information. The ioctl truncates the larger internal
+ * structure to retain binary compatibility with the static declaration of the
+ * ioctl. Note that the "MTD_MAX_..._ENTRIES" macros represent the max size of
+ * the user struct, not the MAX size of the internal struct nand_ecclayout.
+ */
+struct nand_ecclayout_user {
+       __u32 eccbytes;
+       __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES];
+       __u32 oobavail;
+       struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
+};
+
+/**
+ * struct mtd_ecc_stats - error correction stats
+ *
+ * @corrected: number of corrected bits
+ * @failed:    number of uncorrectable errors
+ * @badblocks: number of bad blocks in this partition
+ * @bbtblocks: number of blocks reserved for bad block tables
+ */
+struct mtd_ecc_stats {
+       __u32 corrected;
+       __u32 failed;
+       __u32 badblocks;
+       __u32 bbtblocks;
+};
+
+/*
+ * MTD file modes - for read/write access to MTD
+ *
+ * @MTD_FILE_MODE_NORMAL:      OTP disabled, ECC enabled
+ * @MTD_FILE_MODE_OTP_FACTORY: OTP enabled in factory mode
+ * @MTD_FILE_MODE_OTP_USER:    OTP enabled in user mode
+ * @MTD_FILE_MODE_RAW:         OTP disabled, ECC disabled
+ *
+ * These modes can be set via ioctl(MTDFILEMODE). The mode mode will be retained
+ * separately for each open file descriptor.
+ *
+ * Note: %MTD_FILE_MODE_RAW provides the same functionality as %MTD_OPS_RAW -
+ * raw access to the flash, without error correction or autoplacement schemes.
+ * Wherever possible, the MTD_OPS_* mode will override the MTD_FILE_MODE_* mode
+ * (e.g., when using ioctl(MEMWRITE)), but in some cases, the MTD_FILE_MODE is
+ * used out of necessity (e.g., `write()', ioctl(MEMWRITEOOB64)).
+ */
+enum mtd_file_modes {
+       MTD_FILE_MODE_NORMAL = MTD_OTP_OFF,
+       MTD_FILE_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
+       MTD_FILE_MODE_OTP_USER = MTD_OTP_USER,
+       MTD_FILE_MODE_RAW,
+};
+
+static __inline__ int mtd_type_is_nand_user(const struct mtd_info_user *mtd)
+{
+       return mtd->type == MTD_NANDFLASH || mtd->type == MTD_MLCNANDFLASH;
+}
+
+#endif /* __MTD_ABI_H__ */
diff --git a/lib/libdss-include/mtd/mtd-user.h b/lib/libdss-include/mtd/mtd-user.h
new file mode 100644 (file)
index 0000000..e71d555
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_USER_H__
+#define __MTD_USER_H__
+
+/* This file is blessed for inclusion by userspace */
+#include <mtd/mtd-abi.h>
+
+typedef struct mtd_info_user mtd_info_t;
+typedef struct erase_info_user erase_info_t;
+typedef struct region_info_user region_info_t;
+typedef struct nand_oobinfo nand_oobinfo_t;
+typedef struct nand_ecclayout_user nand_ecclayout_t;
+
+#endif /* __MTD_USER_H__ */
diff --git a/lib/libdss-include/mtd/nftl-user.h b/lib/libdss-include/mtd/nftl-user.h
new file mode 100644 (file)
index 0000000..bdeabd8
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright © 1999-2010 David Woodhouse <dwmw2@infradead.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __MTD_NFTL_USER_H__
+#define __MTD_NFTL_USER_H__
+
+#include <linux/types.h>
+
+/* Block Control Information */
+
+struct nftl_bci {
+       unsigned char ECCSig[6];
+       __u8 Status;
+       __u8 Status1;
+}__attribute__((packed));
+
+/* Unit Control Information */
+
+struct nftl_uci0 {
+       __u16 VirtUnitNum;
+       __u16 ReplUnitNum;
+       __u16 SpareVirtUnitNum;
+       __u16 SpareReplUnitNum;
+} __attribute__((packed));
+
+struct nftl_uci1 {
+       __u32 WearInfo;
+       __u16 EraseMark;
+       __u16 EraseMark1;
+} __attribute__((packed));
+
+struct nftl_uci2 {
+        __u16 FoldMark;
+        __u16 FoldMark1;
+       __u32 unused;
+} __attribute__((packed));
+
+union nftl_uci {
+       struct nftl_uci0 a;
+       struct nftl_uci1 b;
+       struct nftl_uci2 c;
+};
+
+struct nftl_oob {
+       struct nftl_bci b;
+       union nftl_uci u;
+};
+
+/* NFTL Media Header */
+
+struct NFTLMediaHeader {
+       char DataOrgID[6];
+       __u16 NumEraseUnits;
+       __u16 FirstPhysicalEUN;
+       __u32 FormattedSize;
+       unsigned char UnitSizeFactor;
+} __attribute__((packed));
+
+#define MAX_ERASE_ZONES (8192 - 512)
+
+#define ERASE_MARK 0x3c69
+#define SECTOR_FREE 0xff
+#define SECTOR_USED 0x55
+#define SECTOR_IGNORE 0x11
+#define SECTOR_DELETED 0x00
+
+#define FOLD_MARK_IN_PROGRESS 0x5555
+
+#define ZONE_GOOD 0xff
+#define ZONE_BAD_ORIGINAL 0
+#define ZONE_BAD_MARKED 7
+
+
+#endif /* __MTD_NFTL_USER_H__ */
diff --git a/lib/libdss-include/mtd/ubi-user.h b/lib/libdss-include/mtd/ubi-user.h
new file mode 100644 (file)
index 0000000..275ebd8
--- /dev/null
@@ -0,0 +1,445 @@
+/*
+ * Copyright © International Business Machines Corp., 2006
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Artem Bityutskiy (Битюцкий Артём)
+ */
+
+#ifndef __UBI_USER_H__
+#define __UBI_USER_H__
+
+#include <linux/types.h>
+
+/*
+ * UBI device creation (the same as MTD device attachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * MTD devices may be attached using %UBI_IOCATT ioctl command of the UBI
+ * control device. The caller has to properly fill and pass
+ * &struct ubi_attach_req object - UBI will attach the MTD device specified in
+ * the request and return the newly created UBI device number as the ioctl
+ * return value.
+ *
+ * UBI device deletion (the same as MTD device detachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * An UBI device maybe deleted with %UBI_IOCDET ioctl command of the UBI
+ * control device.
+ *
+ * UBI volume creation
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
+ * device. A &struct ubi_mkvol_req object has to be properly filled and a
+ * pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume deletion
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
+ * device should be used. A pointer to the 32-bit volume ID hast to be passed
+ * to the ioctl.
+ *
+ * UBI volume re-size
+ * ~~~~~~~~~~~~~~~~~~
+ *
+ * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
+ * device should be used. A &struct ubi_rsvol_req object has to be properly
+ * filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volumes re-name
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
+ * of the UBI character device should be used. A &struct ubi_rnvol_req object
+ * has to be properly filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume update
+ * ~~~~~~~~~~~~~~~~~
+ *
+ * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
+ * corresponding UBI volume character device. A pointer to a 64-bit update
+ * size should be passed to the ioctl. After this, UBI expects user to write
+ * this number of bytes to the volume character device. The update is finished
+ * when the claimed number of bytes is passed. So, the volume update sequence
+ * is something like:
+ *
+ * fd = open("/dev/my_volume");
+ * ioctl(fd, UBI_IOCVOLUP, &image_size);
+ * write(fd, buf, image_size);
+ * close(fd);
+ *
+ * Logical eraseblock erase
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
+ * corresponding UBI volume character device should be used. This command
+ * unmaps the requested logical eraseblock, makes sure the corresponding
+ * physical eraseblock is successfully erased, and returns.
+ *
+ * Atomic logical eraseblock change
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
+ * ioctl command of the corresponding UBI volume character device. A pointer to
+ * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
+ * user is expected to write the requested amount of bytes (similarly to what
+ * should be done in case of the "volume update" ioctl).
+ *
+ * Logical eraseblock map
+ * ~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
+ * ioctl command should be used. A pointer to a &struct ubi_map_req object is
+ * expected to be passed. The ioctl maps the requested logical eraseblock to
+ * a physical eraseblock and returns.  Only non-mapped logical eraseblocks can
+ * be mapped. If the logical eraseblock specified in the request is already
+ * mapped to a physical eraseblock, the ioctl fails and returns error.
+ *
+ * Logical eraseblock unmap
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
+ * ioctl command should be used. The ioctl unmaps the logical eraseblocks,
+ * schedules corresponding physical eraseblock for erasure, and returns. Unlike
+ * the "LEB erase" command, it does not wait for the physical eraseblock being
+ * erased. Note, the side effect of this is that if an unclean reboot happens
+ * after the unmap ioctl returns, you may find the LEB mapped again to the same
+ * physical eraseblock after the UBI is run again.
+ *
+ * Check if logical eraseblock is mapped
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To check if a logical eraseblock is mapped to a physical eraseblock, the
+ * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
+ * not mapped, and %1 if it is mapped.
+ *
+ * Set an UBI volume property
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To set an UBI volume property the %UBI_IOCSETPROP ioctl command should be
+ * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be
+ * passed. The object describes which property should be set, and to which value
+ * it should be set.
+ *
+ * Block devices on UBI volumes
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To create a R/O block device on top of an UBI volume the %UBI_IOCVOLCRBLK
+ * should be used. A pointer to a &struct ubi_blkcreate_req object is expected
+ * to be passed, which is not used and reserved for future usage.
+ *
+ * Conversely, to remove a block device the %UBI_IOCVOLRMBLK should be used,
+ * which takes no arguments.
+ */
+
+/*
+ * When a new UBI volume or UBI device is created, users may either specify the
+ * volume/device number they want to create or to let UBI automatically assign
+ * the number using these constants.
+ */
+#define UBI_VOL_NUM_AUTO (-1)
+#define UBI_DEV_NUM_AUTO (-1)
+
+/* Maximum volume name length */
+#define UBI_MAX_VOLUME_NAME 127
+
+/* ioctl commands of UBI character devices */
+
+#define UBI_IOC_MAGIC 'o'
+
+/* Create an UBI volume */
+#define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req)
+/* Remove an UBI volume */
+#define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32)
+/* Re-size an UBI volume */
+#define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req)
+/* Re-name volumes */
+#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
+
+/* ioctl commands of the UBI control character device */
+
+#define UBI_CTRL_IOC_MAGIC 'o'
+
+/* Attach an MTD device */
+#define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req)
+/* Detach an MTD device */
+#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32)
+
+/* ioctl commands of UBI volume character devices */
+
+#define UBI_VOL_IOC_MAGIC 'O'
+
+/* Start UBI volume update
+ * Note: This actually takes a pointer (__s64*), but we can't change
+ *       that without breaking the ABI on 32bit systems
+ */
+#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64)
+/* LEB erasure command, used for debugging, disabled by default */
+#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32)
+/* Atomic LEB change command */
+#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32)
+/* Map LEB command */
+#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
+/* Unmap LEB command */
+#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32)
+/* Check if LEB is mapped command */
+#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32)
+/* Set an UBI volume property */
+#define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \
+                              struct ubi_set_vol_prop_req)
+/* Create a R/O block device on top of an UBI volume */
+#define UBI_IOCVOLCRBLK _IOW(UBI_VOL_IOC_MAGIC, 7, struct ubi_blkcreate_req)
+/* Remove the R/O block device */
+#define UBI_IOCVOLRMBLK _IO(UBI_VOL_IOC_MAGIC, 8)
+
+/* Maximum MTD device name length supported by UBI */
+#define MAX_UBI_MTD_NAME_LEN 127
+
+/* Maximum amount of UBI volumes that can be re-named at one go */
+#define UBI_MAX_RNVOL 32
+
+/*
+ * UBI volume type constants.
+ *
+ * @UBI_DYNAMIC_VOLUME: dynamic volume
+ * @UBI_STATIC_VOLUME:  static volume
+ */
+enum {
+       UBI_DYNAMIC_VOLUME = 3,
+       UBI_STATIC_VOLUME  = 4,
+};
+
+/*
+ * UBI set volume property ioctl constants.
+ *
+ * @UBI_VOL_PROP_DIRECT_WRITE: allow (any non-zero value) or disallow (value 0)
+ *                             user to directly write and erase individual
+ *                             eraseblocks on dynamic volumes
+ */
+enum {
+       UBI_VOL_PROP_DIRECT_WRITE = 1,
+};
+
+/**
+ * struct ubi_attach_req - attach MTD device request.
+ * @ubi_num: UBI device number to create
+ * @mtd_num: MTD device number to attach
+ * @vid_hdr_offset: VID header offset (use defaults if %0)
+ * @max_beb_per1024: maximum expected number of bad PEB per 1024 PEBs
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * This data structure is used to specify MTD device UBI has to attach and the
+ * parameters it has to use. The number which should be assigned to the new UBI
+ * device is passed in @ubi_num. UBI may automatically assign the number if
+ * @UBI_DEV_NUM_AUTO is passed. In this case, the device number is returned in
+ * @ubi_num.
+ *
+ * Most applications should pass %0 in @vid_hdr_offset to make UBI use default
+ * offset of the VID header within physical eraseblocks. The default offset is
+ * the next min. I/O unit after the EC header. For example, it will be offset
+ * 512 in case of a 512 bytes page NAND flash with no sub-page support. Or
+ * it will be 512 in case of a 2KiB page NAND flash with 4 512-byte sub-pages.
+ *
+ * But in rare cases, if this optimizes things, the VID header may be placed to
+ * a different offset. For example, the boot-loader might do things faster if
+ * the VID header sits at the end of the first 2KiB NAND page with 4 sub-pages.
+ * As the boot-loader would not normally need to read EC headers (unless it
+ * needs UBI in RW mode), it might be faster to calculate ECC. This is weird
+ * example, but it real-life example. So, in this example, @vid_hdr_offer would
+ * be 2KiB-64 bytes = 1984. Note, that this position is not even 512-bytes
+ * aligned, which is OK, as UBI is clever enough to realize this is 4th
+ * sub-page of the first page and add needed padding.
+ *
+ * The @max_beb_per1024 is the maximum amount of bad PEBs UBI expects on the
+ * UBI device per 1024 eraseblocks.  This value is often given in an other form
+ * in the NAND datasheet (min NVB i.e. minimal number of valid blocks). The
+ * maximum expected bad eraseblocks per 1024 is then:
+ *    1024 * (1 - MinNVB / MaxNVB)
+ * Which gives 20 for most NAND devices.  This limit is used in order to derive
+ * amount of eraseblock UBI reserves for handling new bad blocks. If the device
+ * has more bad eraseblocks than this limit, UBI does not reserve any physical
+ * eraseblocks for new bad eraseblocks, but attempts to use available
+ * eraseblocks (if any). The accepted range is 0-768. If 0 is given, the
+ * default kernel value of %CONFIG_MTD_UBI_BEB_LIMIT will be used.
+ */
+struct ubi_attach_req {
+       __s32 ubi_num;
+       __s32 mtd_num;
+       __s32 vid_hdr_offset;
+       __s16 max_beb_per1024;
+       __s8 padding[10];
+};
+
+/**
+ * struct ubi_mkvol_req - volume description data structure used in
+ *                        volume creation requests.
+ * @vol_id: volume number
+ * @alignment: volume alignment
+ * @bytes: volume size in bytes
+ * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME)
+ * @padding1: reserved for future, not used, has to be zeroed
+ * @name_len: volume name length
+ * @padding2: reserved for future, not used, has to be zeroed
+ * @name: volume name
+ *
+ * This structure is used by user-space programs when creating new volumes. The
+ * @used_bytes field is only necessary when creating static volumes.
+ *
+ * The @alignment field specifies the required alignment of the volume logical
+ * eraseblock. This means, that the size of logical eraseblocks will be aligned
+ * to this number, i.e.,
+ *     (UBI device logical eraseblock size) mod (@alignment) = 0.
+ *
+ * To put it differently, the logical eraseblock of this volume may be slightly
+ * shortened in order to make it properly aligned. The alignment has to be
+ * multiple of the flash minimal input/output unit, or %1 to utilize the entire
+ * available space of logical eraseblocks.
+ *
+ * The @alignment field may be useful, for example, when one wants to maintain
+ * a block device on top of an UBI volume. In this case, it is desirable to fit
+ * an integer number of blocks in logical eraseblocks of this UBI volume. With
+ * alignment it is possible to update this volume using plane UBI volume image
+ * BLOBs, without caring about how to properly align them.
+ */
+struct ubi_mkvol_req {
+       __s32 vol_id;
+       __s32 alignment;
+       __s64 bytes;
+       __s8 vol_type;
+       __s8 padding1;
+       __s16 name_len;
+       __s8 padding2[4];
+       char name[UBI_MAX_VOLUME_NAME + 1];
+} __attribute__((packed));
+
+/**
+ * struct ubi_rsvol_req - a data structure used in volume re-size requests.
+ * @vol_id: ID of the volume to re-size
+ * @bytes: new size of the volume in bytes
+ *
+ * Re-sizing is possible for both dynamic and static volumes. But while dynamic
+ * volumes may be re-sized arbitrarily, static volumes cannot be made to be
+ * smaller than the number of bytes they bear. To arbitrarily shrink a static
+ * volume, it must be wiped out first (by means of volume update operation with
+ * zero number of bytes).
+ */
+struct ubi_rsvol_req {
+       __s64 bytes;
+       __s32 vol_id;
+} __attribute__((packed));
+
+/**
+ * struct ubi_rnvol_req - volumes re-name request.
+ * @count: count of volumes to re-name
+ * @padding1:  reserved for future, not used, has to be zeroed
+ * @vol_id: ID of the volume to re-name
+ * @name_len: name length
+ * @padding2:  reserved for future, not used, has to be zeroed
+ * @name: new volume name
+ *
+ * UBI allows to re-name up to %32 volumes at one go. The count of volumes to
+ * re-name is specified in the @count field. The ID of the volumes to re-name
+ * and the new names are specified in the @vol_id and @name fields.
+ *
+ * The UBI volume re-name operation is atomic, which means that should power cut
+ * happen, the volumes will have either old name or new name. So the possible
+ * use-cases of this command is atomic upgrade. Indeed, to upgrade, say, volumes
+ * A and B one may create temporary volumes %A1 and %B1 with the new contents,
+ * then atomically re-name A1->A and B1->B, in which case old %A and %B will
+ * be removed.
+ *
+ * If it is not desirable to remove old A and B, the re-name request has to
+ * contain 4 entries: A1->A, A->A1, B1->B, B->B1, in which case old A1 and B1
+ * become A and B, and old A and B will become A1 and B1.
+ *
+ * It is also OK to request: A1->A, A1->X, B1->B, B->Y, in which case old A1
+ * and B1 become A and B, and old A and B become X and Y.
+ *
+ * In other words, in case of re-naming into an existing volume name, the
+ * existing volume is removed, unless it is re-named as well at the same
+ * re-name request.
+ */
+struct ubi_rnvol_req {
+       __s32 count;
+       __s8 padding1[12];
+       struct {
+               __s32 vol_id;
+               __s16 name_len;
+               __s8  padding2[2];
+               char    name[UBI_MAX_VOLUME_NAME + 1];
+       } ents[UBI_MAX_RNVOL];
+} __attribute__((packed));
+
+/**
+ * struct ubi_leb_change_req - a data structure used in atomic LEB change
+ *                             requests.
+ * @lnum: logical eraseblock number to change
+ * @bytes: how many bytes will be written to the logical eraseblock
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * The @dtype field used to inform UBI about what kind of data will be written
+ * to the LEB: long term (value 1), short term (value 2), unknown (value 3).
+ * UBI tried to pick a PEB with lower erase counter for short term data and a
+ * PEB with higher erase counter for long term data. But this was not really
+ * used because users usually do not know this and could easily mislead UBI. We
+ * removed this feature in May 2012. UBI currently just ignores the @dtype
+ * field. But for better compatibility with older kernels it is recommended to
+ * set @dtype to 3 (unknown).
+ */
+struct ubi_leb_change_req {
+       __s32 lnum;
+       __s32 bytes;
+       __s8  dtype; /* obsolete, do not use! */
+       __s8  padding[7];
+} __attribute__((packed));
+
+/**
+ * struct ubi_map_req - a data structure used in map LEB requests.
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @lnum: logical eraseblock number to unmap
+ * @padding: reserved for future, not used, has to be zeroed
+ */
+struct ubi_map_req {
+       __s32 lnum;
+       __s8  dtype; /* obsolete, do not use! */
+       __s8  padding[3];
+} __attribute__((packed));
+
+
+/**
+ * struct ubi_set_vol_prop_req - a data structure used to set an UBI volume
+ *                               property.
+ * @property: property to set (%UBI_VOL_PROP_DIRECT_WRITE)
+ * @padding: reserved for future, not used, has to be zeroed
+ * @value: value to set
+ */
+struct ubi_set_vol_prop_req {
+       __u8  property;
+       __u8  padding[7];
+       __u64 value;
+}  __attribute__((packed));
+
+/**
+ * struct ubi_blkcreate_req - a data structure used in block creation requests.
+ * @padding: reserved for future, not used, has to be zeroed
+ */
+struct ubi_blkcreate_req {
+       __s8  padding[128];
+}  __attribute__((packed));
+
+#endif /* __UBI_USER_H__ */
diff --git a/lib/libdss-include/net/ethernet.h b/lib/libdss-include/net/ethernet.h
new file mode 100644 (file)
index 0000000..3160e93
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the FreeBSD version of this file. Curiously, that file
+   lacks a copyright in the header. */
+
+#ifndef __NET_ETHERNET_H
+#define __NET_ETHERNET_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <linux/if_ether.h>     /* IEEE 802.3 Ethernet constants */
+
+__BEGIN_DECLS
+
+/* This is a name for the 48 bit ethernet address available on many
+   systems.  */
+struct ether_addr
+{
+  u_int8_t ether_addr_octet[ETH_ALEN];
+} __attribute__ ((__packed__));
+
+/* 10Mb/s ethernet header */
+struct ether_header
+{
+  u_int8_t  ether_dhost[ETH_ALEN];     /* destination eth addr */
+  u_int8_t  ether_shost[ETH_ALEN];     /* source ether addr    */
+  u_int16_t ether_type;                        /* packet type ID field */
+} __attribute__ ((__packed__));
+
+/* Ethernet protocol ID's */
+#define        ETHERTYPE_PUP           0x0200          /* Xerox PUP */
+#define ETHERTYPE_SPRITE       0x0500          /* Sprite */
+#define        ETHERTYPE_IP            0x0800          /* IP */
+#define        ETHERTYPE_ARP           0x0806          /* Address resolution */
+#define        ETHERTYPE_REVARP        0x8035          /* Reverse ARP */
+#define ETHERTYPE_AT           0x809B          /* AppleTalk protocol */
+#define ETHERTYPE_AARP         0x80F3          /* AppleTalk ARP */
+#define        ETHERTYPE_VLAN          0x8100          /* IEEE 802.1Q VLAN tagging */
+#define ETHERTYPE_IPX          0x8137          /* IPX */
+#define        ETHERTYPE_IPV6          0x86dd          /* IP protocol version 6 */
+#define ETHERTYPE_LOOPBACK     0x9000          /* used to test interfaces */
+
+
+#define        ETHER_ADDR_LEN  ETH_ALEN                 /* size of ethernet addr */
+#define        ETHER_TYPE_LEN  2                        /* bytes in type field */
+#define        ETHER_CRC_LEN   4                        /* bytes in CRC field */
+#define        ETHER_HDR_LEN   ETH_HLEN                 /* total octets in header */
+#define        ETHER_MIN_LEN   (ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */
+#define        ETHER_MAX_LEN   (ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length */
+
+/* make sure ethenet length is valid */
+#define        ETHER_IS_VALID_LEN(foo) \
+       ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
+
+/*
+ * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
+ * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
+ * by an ETHER type (as given above) and then the (variable-length) header.
+ */
+#define        ETHERTYPE_TRAIL         0x1000          /* Trailer packet */
+#define        ETHERTYPE_NTRAILER      16
+
+#define        ETHERMTU        ETH_DATA_LEN
+#define        ETHERMIN        (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
+
+__END_DECLS
+
+#endif /* net/ethernet.h */
diff --git a/lib/libdss-include/net/if.h b/lib/libdss-include/net/if.h
new file mode 100644 (file)
index 0000000..bbc2094
--- /dev/null
@@ -0,0 +1,204 @@
+/* net/if.h -- declarations for inquiring about network interfaces
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_H
+#define _NET_IF_H      1
+
+#include <features.h>
+
+#ifdef __USE_MISC
+# include <sys/types.h>
+# include <sys/socket.h>
+#endif
+
+
+/* Length of interface name.  */
+#define IF_NAMESIZE    16
+
+struct if_nameindex
+  {
+    unsigned int if_index;     /* 1, 2, ... */
+    char *if_name;             /* null terminated name: "eth0", ... */
+  };
+
+
+#ifdef __USE_MISC
+/* Standard interface flags. */
+enum
+  {
+    IFF_UP = 0x1,              /* Interface is up.  */
+# define IFF_UP        IFF_UP
+    IFF_BROADCAST = 0x2,       /* Broadcast address valid.  */
+# define IFF_BROADCAST IFF_BROADCAST
+    IFF_DEBUG = 0x4,           /* Turn on debugging.  */
+# define IFF_DEBUG     IFF_DEBUG
+    IFF_LOOPBACK = 0x8,                /* Is a loopback net.  */
+# define IFF_LOOPBACK  IFF_LOOPBACK
+    IFF_POINTOPOINT = 0x10,    /* Interface is point-to-point link.  */
+# define IFF_POINTOPOINT IFF_POINTOPOINT
+    IFF_NOTRAILERS = 0x20,     /* Avoid use of trailers.  */
+# define IFF_NOTRAILERS        IFF_NOTRAILERS
+    IFF_RUNNING = 0x40,                /* Resources allocated.  */
+# define IFF_RUNNING   IFF_RUNNING
+    IFF_NOARP = 0x80,          /* No address resolution protocol.  */
+# define IFF_NOARP     IFF_NOARP
+    IFF_PROMISC = 0x100,       /* Receive all packets.  */
+# define IFF_PROMISC   IFF_PROMISC
+
+    /* Not supported */
+    IFF_ALLMULTI = 0x200,      /* Receive all multicast packets.  */
+# define IFF_ALLMULTI  IFF_ALLMULTI
+
+    IFF_MASTER = 0x400,                /* Master of a load balancer.  */
+# define IFF_MASTER    IFF_MASTER
+    IFF_SLAVE = 0x800,         /* Slave of a load balancer.  */
+# define IFF_SLAVE     IFF_SLAVE
+
+    IFF_MULTICAST = 0x1000,    /* Supports multicast.  */
+# define IFF_MULTICAST IFF_MULTICAST
+
+    IFF_PORTSEL = 0x2000,      /* Can set media type.  */
+# define IFF_PORTSEL   IFF_PORTSEL
+    IFF_AUTOMEDIA = 0x4000,    /* Auto media select active.  */
+# define IFF_AUTOMEDIA IFF_AUTOMEDIA
+    IFF_DYNAMIC = 0x8000       /* Dialup device with changing addresses.  */
+# define IFF_DYNAMIC   IFF_DYNAMIC
+  };
+
+/* The ifaddr structure contains information about one address of an
+   interface.  They are maintained by the different address families,
+   are allocated and attached when an address is set, and are linked
+   together so all addresses for an interface can be located.  */
+
+struct ifaddr
+  {
+    struct sockaddr ifa_addr;  /* Address of interface.  */
+    union
+      {
+       struct sockaddr ifu_broadaddr;
+       struct sockaddr ifu_dstaddr;
+      } ifa_ifu;
+    struct iface *ifa_ifp;     /* Back-pointer to interface.  */
+    struct ifaddr *ifa_next;   /* Next address for interface.  */
+  };
+
+# define ifa_broadaddr ifa_ifu.ifu_broadaddr   /* broadcast address    */
+# define ifa_dstaddr   ifa_ifu.ifu_dstaddr     /* other end of link    */
+
+/* Device mapping structure. I'd just gone off and designed a
+   beautiful scheme using only loadable modules with arguments for
+   driver options and along come the PCMCIA people 8)
+
+   Ah well. The get() side of this is good for WDSETUP, and it'll be
+   handy for debugging things. The set side is fine for now and being
+   very small might be worth keeping for clean configuration.  */
+
+struct ifmap
+  {
+    unsigned long int mem_start;
+    unsigned long int mem_end;
+    unsigned short int base_addr;
+    unsigned char irq;
+    unsigned char dma;
+    unsigned char port;
+    /* 3 bytes spare */
+  };
+
+/* Interface request structure used for socket ioctl's.  All interface
+   ioctl's must have parameter definitions which begin with ifr_name.
+   The remainder may be interface specific.  */
+
+struct ifreq
+  {
+# define IFHWADDRLEN   6
+# define IFNAMSIZ      IF_NAMESIZE
+    union
+      {
+       char ifrn_name[IFNAMSIZ];       /* Interface name, e.g. "en0".  */
+      } ifr_ifrn;
+
+    union
+      {
+       struct sockaddr ifru_addr;
+       struct sockaddr ifru_dstaddr;
+       struct sockaddr ifru_broadaddr;
+       struct sockaddr ifru_netmask;
+       struct sockaddr ifru_hwaddr;
+       short int ifru_flags;
+       int ifru_ivalue;
+       int ifru_mtu;
+       struct ifmap ifru_map;
+       char ifru_slave[IFNAMSIZ];      /* Just fits the size */
+       char ifru_newname[IFNAMSIZ];
+       __caddr_t ifru_data;
+      } ifr_ifru;
+  };
+# define ifr_name      ifr_ifrn.ifrn_name      /* interface name       */
+# define ifr_hwaddr    ifr_ifru.ifru_hwaddr    /* MAC address          */
+# define ifr_addr      ifr_ifru.ifru_addr      /* address              */
+# define ifr_dstaddr   ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
+# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address    */
+# define ifr_netmask   ifr_ifru.ifru_netmask   /* interface net mask   */
+# define ifr_flags     ifr_ifru.ifru_flags     /* flags                */
+# define ifr_metric    ifr_ifru.ifru_ivalue    /* metric               */
+# define ifr_mtu       ifr_ifru.ifru_mtu       /* mtu                  */
+# define ifr_map       ifr_ifru.ifru_map       /* device map           */
+# define ifr_slave     ifr_ifru.ifru_slave     /* slave device         */
+# define ifr_data      ifr_ifru.ifru_data      /* for use by interface */
+# define ifr_ifindex   ifr_ifru.ifru_ivalue    /* interface index      */
+# define ifr_bandwidth ifr_ifru.ifru_ivalue    /* link bandwidth       */
+# define ifr_qlen      ifr_ifru.ifru_ivalue    /* queue length         */
+# define ifr_newname   ifr_ifru.ifru_newname   /* New name             */
+# define _IOT_ifreq    _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
+# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
+# define _IOT_ifreq_int        _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
+
+
+/* Structure used in SIOCGIFCONF request.  Used to retrieve interface
+   configuration for machine (useful for programs which must know all
+   networks accessible).  */
+
+struct ifconf
+  {
+    int        ifc_len;                        /* Size of buffer.  */
+    union
+      {
+       __caddr_t ifcu_buf;
+       struct ifreq *ifcu_req;
+      } ifc_ifcu;
+  };
+# define ifc_buf       ifc_ifcu.ifcu_buf       /* Buffer address.  */
+# define ifc_req       ifc_ifcu.ifcu_req       /* Array of structures.  */
+# define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
+#endif /* Misc.  */
+
+__BEGIN_DECLS
+
+/* Convert an interface name to an index, and vice versa.  */
+extern unsigned int if_nametoindex (const char *__ifname) __THROW;
+extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW;
+
+/* Return a list of all interfaces and their indices.  */
+extern struct if_nameindex *if_nameindex (void) __THROW;
+
+/* Free the data returned from if_nameindex.  */
+extern void if_freenameindex (struct if_nameindex *__ptr) __THROW;
+
+__END_DECLS
+
+#endif /* net/if.h */
diff --git a/lib/libdss-include/net/if_arp.h b/lib/libdss-include/net/if_arp.h
new file mode 100644 (file)
index 0000000..1b3f1d3
--- /dev/null
@@ -0,0 +1,183 @@
+/* Definitions for Address Resolution Protocol.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_IF_ARP_H
+
+#define _NET_IF_ARP_H 1
+#include <sys/cdefs.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+__BEGIN_DECLS
+
+/* Some internals from deep down in the kernel.  */
+#define MAX_ADDR_LEN   7
+
+
+/* This structure defines an ethernet arp header.  */
+
+/* ARP protocol opcodes. */
+#define        ARPOP_REQUEST   1               /* ARP request.  */
+#define        ARPOP_REPLY     2               /* ARP reply.  */
+#define        ARPOP_RREQUEST  3               /* RARP request.  */
+#define        ARPOP_RREPLY    4               /* RARP reply.  */
+#define        ARPOP_InREQUEST 8               /* InARP request.  */
+#define        ARPOP_InREPLY   9               /* InARP reply.  */
+#define        ARPOP_NAK       10              /* (ATM)ARP NAK.  */
+
+/* See RFC 826 for protocol description.  ARP packets are variable
+   in size; the arphdr structure defines the fixed-length portion.
+   Protocol type values are the same as those for 10 Mb/s Ethernet.
+   It is followed by the variable-sized fields ar_sha, arp_spa,
+   arp_tha and arp_tpa in that order, according to the lengths
+   specified.  Field names used correspond to RFC 826.  */
+
+struct arphdr
+  {
+    unsigned short int ar_hrd;         /* Format of hardware address.  */
+    unsigned short int ar_pro;         /* Format of protocol address.  */
+    unsigned char ar_hln;              /* Length of hardware address.  */
+    unsigned char ar_pln;              /* Length of protocol address.  */
+    unsigned short int ar_op;          /* ARP opcode (command).  */
+#if 0
+    /* Ethernet looks like this : This bit is variable sized
+       however...  */
+    unsigned char __ar_sha[ETH_ALEN];  /* Sender hardware address.  */
+    unsigned char __ar_sip[4];         /* Sender IP address.  */
+    unsigned char __ar_tha[ETH_ALEN];  /* Target hardware address.  */
+    unsigned char __ar_tip[4];         /* Target IP address.  */
+#endif
+  };
+
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM  0               /* From KA9Q: NET/ROM pseudo. */
+#define ARPHRD_ETHER   1               /* Ethernet 10/100Mbps.  */
+#define        ARPHRD_EETHER   2               /* Experimental Ethernet.  */
+#define        ARPHRD_AX25     3               /* AX.25 Level 2.  */
+#define        ARPHRD_PRONET   4               /* PROnet token ring.  */
+#define        ARPHRD_CHAOS    5               /* Chaosnet.  */
+#define        ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB.  */
+#define        ARPHRD_ARCNET   7               /* ARCnet.  */
+#define        ARPHRD_APPLETLK 8               /* APPLEtalk.  */
+#define        ARPHRD_DLCI     15              /* Frame Relay DLCI.  */
+#define        ARPHRD_ATM      19              /* ATM.  */
+#define        ARPHRD_METRICOM 23              /* Metricom STRIP (new IANA id).  */
+#define ARPHRD_IEEE1394        24              /* IEEE 1394 IPv4 - RFC 2734.  */
+#define ARPHRD_EUI64           27              /* EUI-64.  */
+#define ARPHRD_INFINIBAND      32              /* InfiniBand.  */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP    256
+#define ARPHRD_CSLIP   257
+#define ARPHRD_SLIP6   258
+#define ARPHRD_CSLIP6  259
+#define ARPHRD_RSRVD   260             /* Notional KISS type.  */
+#define ARPHRD_ADAPT   264
+#define ARPHRD_ROSE    270
+#define ARPHRD_X25     271             /* CCITT X.25.  */
+#define ARPHRD_HWX25   272             /* Boards with X.25 in firmware.  */
+#define ARPHRD_PPP     512
+#define ARPHRD_CISCO   513             /* Cisco HDLC.  */
+#define ARPHRD_HDLC    ARPHRD_CISCO
+#define ARPHRD_LAPB    516             /* LAPB.  */
+#define ARPHRD_DDCMP   517             /* Digital's DDCMP.  */
+#define        ARPHRD_RAWHDLC  518             /* Raw HDLC.  */
+
+#define ARPHRD_TUNNEL  768             /* IPIP tunnel.  */
+#define ARPHRD_TUNNEL6 769             /* IPIP6 tunnel.  */
+#define ARPHRD_FRAD    770             /* Frame Relay Access Device.  */
+#define ARPHRD_SKIP    771             /* SKIP vif.  */
+#define ARPHRD_LOOPBACK        772             /* Loopback device.  */
+#define ARPHRD_LOCALTLK 773            /* Localtalk device.  */
+#define ARPHRD_FDDI    774             /* Fiber Distributed Data Interface. */
+#define ARPHRD_BIF     775             /* AP1000 BIF.  */
+#define ARPHRD_SIT     776             /* sit0 device - IPv6-in-IPv4.  */
+#define ARPHRD_IPDDP   777             /* IP-in-DDP tunnel.  */
+#define ARPHRD_IPGRE   778             /* GRE over IP.  */
+#define ARPHRD_PIMREG  779             /* PIMSM register interface.  */
+#define ARPHRD_HIPPI   780             /* High Performance Parallel I'face. */
+#define ARPHRD_ASH     781             /* (Nexus Electronics) Ash.  */
+#define ARPHRD_ECONET  782             /* Acorn Econet.  */
+#define ARPHRD_IRDA    783             /* Linux-IrDA.  */
+#define ARPHRD_FCPP    784             /* Point to point fibrechanel.  */
+#define ARPHRD_FCAL    785             /* Fibrechanel arbitrated loop.  */
+#define ARPHRD_FCPL    786             /* Fibrechanel public loop.  */
+#define ARPHRD_FCFABRIC 787            /* Fibrechanel fabric.  */
+#define ARPHRD_IEEE802_TR 800          /* Magic type ident for TR.  */
+#define ARPHRD_IEEE80211 801           /* IEEE 802.11.  */
+#define ARPHRD_IEEE80211_PRISM 802     /* IEEE 802.11 + Prism2 header.  */
+#define ARPHRD_IEEE80211_RADIOTAP 803  /* IEEE 802.11 + radiotap header.  */
+#define ARPHRD_IEEE802154 804          /* IEEE 802.15.4 header.  */
+#define ARPHRD_IEEE802154_PHY 805      /* IEEE 802.15.4 PHY header.  */
+
+#define ARPHRD_VOID      0xFFFF        /* Void type, nothing is known.  */
+#define ARPHRD_NONE      0xFFFE        /* Zero header length.  */
+
+
+/* ARP ioctl request.  */
+struct arpreq
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+    char arp_dev[16];
+  };
+
+struct arpreq_old
+  {
+    struct sockaddr arp_pa;            /* Protocol address.  */
+    struct sockaddr arp_ha;            /* Hardware address.  */
+    int arp_flags;                     /* Flags.  */
+    struct sockaddr arp_netmask;       /* Netmask (only for proxy arps).  */
+  };
+
+/* ARP Flag values.  */
+#define ATF_COM                0x02            /* Completed entry (ha valid).  */
+#define        ATF_PERM        0x04            /* Permanent entry.  */
+#define        ATF_PUBL        0x08            /* Publish entry.  */
+#define        ATF_USETRAILERS 0x10            /* Has requested trailers.  */
+#define ATF_NETMASK     0x20            /* Want to use a netmask (only
+                                          for proxy entries).  */
+#define ATF_DONTPUB    0x40            /* Don't answer this addresses.  */
+#define ATF_MAGIC      0x80            /* Automatically added entry.  */
+
+
+/* Support for the user space arp daemon, arpd.  */
+#define ARPD_UPDATE    0x01
+#define ARPD_LOOKUP    0x02
+#define ARPD_FLUSH     0x03
+
+struct arpd_request
+  {
+    unsigned short int req;            /* Request type.  */
+    u_int32_t ip;                      /* IP address of entry.  */
+    unsigned long int dev;             /* Device entry is tied to.  */
+    unsigned long int stamp;
+    unsigned long int updated;
+    unsigned char ha[MAX_ADDR_LEN];    /* Hardware address.  */
+  };
+
+__END_DECLS
+
+#endif /* net/if_arp.h */
diff --git a/lib/libdss-include/net/if_packet.h b/lib/libdss-include/net/if_packet.h
new file mode 100644 (file)
index 0000000..67f9f98
--- /dev/null
@@ -0,0 +1,36 @@
+/* Definitions for use with Linux SOCK_PACKET sockets.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __IF_PACKET_H
+#define __IF_PACKET_H
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+/* This is the SOCK_PACKET address structure as used in Linux 2.0.
+   From Linux 2.1 the AF_PACKET interface is preferred and you should
+   consider using it in place of this one.  */
+
+struct sockaddr_pkt
+  {
+    __SOCKADDR_COMMON (spkt_);
+    unsigned char spkt_device[14];
+    unsigned short spkt_protocol;
+  };
+
+#endif
diff --git a/lib/libdss-include/net/if_ppp.h b/lib/libdss-include/net/if_ppp.h
new file mode 100644 (file)
index 0000000..1b1c3ea
--- /dev/null
@@ -0,0 +1,169 @@
+/*     From: if_ppp.h,v 1.3 1995/06/12 11:36:50 paulus Exp */
+
+/*
+ * if_ppp.h - Point-to-Point Protocol definitions.
+ *
+ * Copyright (c) 1989 Carnegie Mellon University.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ *  ==FILEVERSION 960926==
+ *
+ *  NOTE TO MAINTAINERS:
+ *     If you modify this file at all, please set the above date.
+ *     if_ppp.h is shipped with a PPP distribution as well as with the kernel;
+ *     if everyone increases the FILEVERSION number above, then scripts
+ *     can do the right thing when deciding whether to install a new if_ppp.h
+ *     file.  Don't change the format of that line otherwise, so the
+ *     installation script can recognize it.
+ */
+
+
+#ifndef __NET_IF_PPP_H
+#define __NET_IF_PPP_H 1
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <net/ppp_defs.h>
+
+__BEGIN_DECLS
+
+/*
+ * Packet sizes
+ */
+
+#define        PPP_MTU         1500    /* Default MTU (size of Info field) */
+#define PPP_MAXMRU     65000   /* Largest MRU we allow */
+#define PPP_VERSION    "2.2.0"
+#define PPP_MAGIC      0x5002  /* Magic value for the ppp structure */
+#define PROTO_IPX      0x002b  /* protocol numbers */
+#define PROTO_DNA_RT    0x0027  /* DNA Routing */
+
+
+/*
+ * Bit definitions for flags.
+ */
+
+#define SC_COMP_PROT   0x00000001      /* protocol compression (output) */
+#define SC_COMP_AC     0x00000002      /* header compression (output) */
+#define        SC_COMP_TCP     0x00000004      /* TCP (VJ) compression (output) */
+#define SC_NO_TCP_CCID 0x00000008      /* disable VJ connection-id comp. */
+#define SC_REJ_COMP_AC 0x00000010      /* reject adrs/ctrl comp. on input */
+#define SC_REJ_COMP_TCP        0x00000020      /* reject TCP (VJ) comp. on input */
+#define SC_CCP_OPEN    0x00000040      /* Look at CCP packets */
+#define SC_CCP_UP      0x00000080      /* May send/recv compressed packets */
+#define SC_ENABLE_IP   0x00000100      /* IP packets may be exchanged */
+#define SC_COMP_RUN    0x00001000      /* compressor has been inited */
+#define SC_DECOMP_RUN  0x00002000      /* decompressor has been inited */
+#define SC_DEBUG       0x00010000      /* enable debug messages */
+#define SC_LOG_INPKT   0x00020000      /* log contents of good pkts recvd */
+#define SC_LOG_OUTPKT  0x00040000      /* log contents of pkts sent */
+#define SC_LOG_RAWIN   0x00080000      /* log all chars received */
+#define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
+#define        SC_MASK         0x0fE0ffff      /* bits that user can change */
+
+/* state bits */
+#define        SC_ESCAPED      0x80000000      /* saw a PPP_ESCAPE */
+#define        SC_FLUSH        0x40000000      /* flush input until next PPP_FLAG */
+#define SC_VJ_RESET    0x20000000      /* Need to reset the VJ decompressor */
+#define SC_XMIT_BUSY   0x10000000      /* ppp_write_wakeup is active */
+#define SC_RCV_ODDP    0x08000000      /* have rcvd char with odd parity */
+#define SC_RCV_EVNP    0x04000000      /* have rcvd char with even parity */
+#define SC_RCV_B7_1    0x02000000      /* have rcvd char with bit 7 = 1 */
+#define SC_RCV_B7_0    0x01000000      /* have rcvd char with bit 7 = 0 */
+#define SC_DC_FERROR   0x00800000      /* fatal decomp error detected */
+#define SC_DC_ERROR    0x00400000      /* non-fatal decomp error detected */
+
+/*
+ * Ioctl definitions.
+ */
+
+struct npioctl {
+    int                protocol;       /* PPP protocol, e.g. PPP_IP */
+    enum NPmode        mode;
+};
+
+/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
+struct ppp_option_data {
+       u_int8_t  *ptr;
+       u_int32_t length;
+       int       transmit;
+};
+
+struct ifpppstatsreq {
+  struct ifreq    b;
+  struct ppp_stats stats;                      /* statistic information */
+};
+
+struct ifpppcstatsreq {
+  struct ifreq         b;
+  struct ppp_comp_stats stats;
+};
+
+#define ifr__name       b.ifr_ifrn.ifrn_name
+#define stats_ptr       b.ifr_ifru.ifru_data
+
+/*
+ * Ioctl definitions.
+ */
+
+#define        PPPIOCGFLAGS    _IOR('t', 90, int)      /* get configuration flags */
+#define        PPPIOCSFLAGS    _IOW('t', 89, int)      /* set configuration flags */
+#define        PPPIOCGASYNCMAP _IOR('t', 88, int)      /* get async map */
+#define        PPPIOCSASYNCMAP _IOW('t', 87, int)      /* set async map */
+#define        PPPIOCGUNIT     _IOR('t', 86, int)      /* get ppp unit number */
+#define        PPPIOCGRASYNCMAP _IOR('t', 85, int)     /* get receive async map */
+#define        PPPIOCSRASYNCMAP _IOW('t', 84, int)     /* set receive async map */
+#define        PPPIOCGMRU      _IOR('t', 83, int)      /* get max receive unit */
+#define        PPPIOCSMRU      _IOW('t', 82, int)      /* set max receive unit */
+#define        PPPIOCSMAXCID   _IOW('t', 81, int)      /* set VJ max slot ID */
+#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
+#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
+#define PPPIOCXFERUNIT _IO('t', 78)            /* transfer PPP unit */
+#define PPPIOCSCOMPRESS        _IOW('t', 77, struct ppp_option_data)
+#define PPPIOCGNPMODE  _IOWR('t', 76, struct npioctl) /* get NP mode */
+#define PPPIOCSNPMODE  _IOW('t', 75, struct npioctl)  /* set NP mode */
+#define PPPIOCGDEBUG   _IOR('t', 65, int)      /* Read debug level */
+#define PPPIOCSDEBUG   _IOW('t', 64, int)      /* Set debug level */
+#define PPPIOCGIDLE    _IOR('t', 63, struct ppp_idle) /* get idle time */
+
+#define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0)
+#define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)  /* NEVER change this!! */
+#define SIOCGPPPCSTATS  (SIOCDEVPRIVATE + 2)
+
+#if !defined(ifr_mtu)
+#define ifr_mtu        ifr_ifru.ifru_metric
+#endif
+
+__END_DECLS
+
+#endif /* net/if_ppp.h */
diff --git a/lib/libdss-include/net/if_shaper.h b/lib/libdss-include/net/if_shaper.h
new file mode 100644 (file)
index 0000000..956ad62
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_SHAPER_H
+#define _NET_IF_SHAPER_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+
+__BEGIN_DECLS
+
+#define SHAPER_QLEN    10
+/*
+ *     This is a bit speed dependant (read it shouldnt be a constant!)
+ *
+ *     5 is about right for 28.8 upwards. Below that double for every
+ *     halving of speed or so. - ie about 20 for 9600 baud.
+ */
+#define SHAPER_LATENCY (5 * HZ)
+#define SHAPER_MAXSLIP 2
+#define SHAPER_BURST   (HZ / 50)       /* Good for >128K then */
+
+#define SHAPER_SET_DEV         0x0001
+#define SHAPER_SET_SPEED       0x0002
+#define SHAPER_GET_DEV         0x0003
+#define SHAPER_GET_SPEED       0x0004
+
+struct shaperconf
+{
+  u_int16_t ss_cmd;
+  union
+  {
+    char ssu_name[14];
+    u_int32_t ssu_speed;
+  } ss_u;
+#define ss_speed ss_u.ssu_speed
+#define ss_name ss_u.ssu_name
+};
+
+__END_DECLS
+
+#endif /* net/if_shaper.h */
diff --git a/lib/libdss-include/net/if_slip.h b/lib/libdss-include/net/if_slip.h
new file mode 100644 (file)
index 0000000..25856d0
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NET_IF_SLIP_H
+#define _NET_IF_SLIP_H 1
+
+/* We can use the kernel header.  */
+#include <linux/if_slip.h>
+
+#endif /* net/if_slip.h.  */
diff --git a/lib/libdss-include/net/ppp-comp.h b/lib/libdss-include/net/ppp-comp.h
new file mode 100644 (file)
index 0000000..4a992d5
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ppp-comp.h>
diff --git a/lib/libdss-include/net/ppp_defs.h b/lib/libdss-include/net/ppp_defs.h
new file mode 100644 (file)
index 0000000..f8924c4
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _NET_PPP_DEFS_H
+#define _NET_PPP_DEFS_H 1
+
+#define __need_time_t
+#include <time.h>
+
+#include <asm/types.h>
+#include <linux/ppp_defs.h>
+
+#endif /* net/ppp_defs.h */
diff --git a/lib/libdss-include/net/route.h b/lib/libdss-include/net/route.h
new file mode 100644 (file)
index 0000000..11d21c6
--- /dev/null
@@ -0,0 +1,144 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Based on the 4.4BSD and Linux version of this file.  */
+
+#ifndef _NET_ROUTE_H
+#define _NET_ROUTE_H   1
+
+#include <features.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <bits/wordsize.h>
+
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry
+  {
+    unsigned long int rt_pad1;
+    struct sockaddr rt_dst;            /* Target address.  */
+    struct sockaddr rt_gateway;                /* Gateway addr (RTF_GATEWAY).  */
+    struct sockaddr rt_genmask;                /* Target network mask (IP).  */
+    unsigned short int rt_flags;
+    short int rt_pad2;
+    unsigned long int rt_pad3;
+    unsigned char rt_tos;
+    unsigned char rt_class;
+#if __WORDSIZE == 64
+    short int rt_pad4[3];
+#else
+    short int rt_pad4;
+#endif
+    short int rt_metric;               /* +1 for binary compatibility!  */
+    char *rt_dev;                      /* Forcing the device at add.  */
+    unsigned long int rt_mtu;          /* Per route MTU/Window.  */
+    unsigned long int rt_window;       /* Window clamping.  */
+    unsigned short int rt_irtt;                /* Initial RTT.  */
+  };
+/* Compatibility hack.  */
+#define rt_mss rt_mtu
+
+
+struct in6_rtmsg
+  {
+    struct in6_addr rtmsg_dst;
+    struct in6_addr rtmsg_src;
+    struct in6_addr rtmsg_gateway;
+    u_int32_t rtmsg_type;
+    u_int16_t rtmsg_dst_len;
+    u_int16_t rtmsg_src_len;
+    u_int32_t rtmsg_metric;
+    unsigned long int rtmsg_info;
+    u_int32_t rtmsg_flags;
+    int rtmsg_ifindex;
+  };
+
+
+#define        RTF_UP          0x0001          /* Route usable.  */
+#define        RTF_GATEWAY     0x0002          /* Destination is a gateway.  */
+
+#define        RTF_HOST        0x0004          /* Host entry (net otherwise).  */
+#define RTF_REINSTATE  0x0008          /* Reinstate route after timeout.  */
+#define        RTF_DYNAMIC     0x0010          /* Created dyn. (by redirect).  */
+#define        RTF_MODIFIED    0x0020          /* Modified dyn. (by redirect).  */
+#define RTF_MTU                0x0040          /* Specific MTU for this route.  */
+#define RTF_MSS                RTF_MTU         /* Compatibility.  */
+#define RTF_WINDOW     0x0080          /* Per route window clamping.  */
+#define RTF_IRTT       0x0100          /* Initial round trip time.  */
+#define RTF_REJECT     0x0200          /* Reject route.  */
+#define        RTF_STATIC      0x0400          /* Manually injected route.  */
+#define        RTF_XRESOLVE    0x0800          /* External resolver.  */
+#define RTF_NOFORWARD   0x1000         /* Forwarding inhibited.  */
+#define RTF_THROW      0x2000          /* Go to next class.  */
+#define RTF_NOPMTUDISC  0x4000         /* Do not send packets with DF.  */
+
+/* for IPv6 */
+#define RTF_DEFAULT    0x00010000      /* default - learned via ND     */
+#define RTF_ALLONLINK  0x00020000      /* fallback, no routers on link */
+#define RTF_ADDRCONF   0x00040000      /* addrconf route - RA          */
+
+#define RTF_LINKRT     0x00100000      /* link specific - device match */
+#define RTF_NONEXTHOP  0x00200000      /* route with no nexthop        */
+
+#define RTF_CACHE      0x01000000      /* cache entry                  */
+#define RTF_FLOW       0x02000000      /* flow significant route       */
+#define RTF_POLICY     0x04000000      /* policy route                 */
+
+#define RTCF_VALVE     0x00200000
+#define RTCF_MASQ      0x00400000
+#define RTCF_NAT       0x00800000
+#define RTCF_DOREDIRECT 0x01000000
+#define RTCF_LOG       0x02000000
+#define RTCF_DIRECTSRC 0x04000000
+
+#define RTF_LOCAL      0x80000000
+#define RTF_INTERFACE  0x40000000
+#define RTF_MULTICAST  0x20000000
+#define RTF_BROADCAST  0x10000000
+#define RTF_NAT                0x08000000
+
+#define RTF_ADDRCLASSMASK      0xF8000000
+#define RT_ADDRCLASS(flags)    ((__u_int32_t) flags >> 23)
+
+#define RT_TOS(tos)            ((tos) & IPTOS_TOS_MASK)
+
+#define RT_LOCALADDR(flags)    ((flags & RTF_ADDRCLASSMASK) \
+                                == (RTF_LOCAL|RTF_INTERFACE))
+
+#define RT_CLASS_UNSPEC                0
+#define RT_CLASS_DEFAULT       253
+
+#define RT_CLASS_MAIN          254
+#define RT_CLASS_LOCAL         255
+#define RT_CLASS_MAX           255
+
+
+#define RTMSG_ACK              NLMSG_ACK
+#define RTMSG_OVERRUN          NLMSG_OVERRUN
+
+#define RTMSG_NEWDEVICE                0x11
+#define RTMSG_DELDEVICE                0x12
+#define RTMSG_NEWROUTE         0x21
+#define RTMSG_DELROUTE         0x22
+#define RTMSG_NEWRULE          0x31
+#define RTMSG_DELRULE          0x32
+#define RTMSG_CONTROL          0x40
+
+#define RTMSG_AR_FAILED                0x51    /* Address Resolution failed.  */
+
+#endif /* net/route.h */
diff --git a/lib/libdss-include/netash/ash.h b/lib/libdss-include/netash/ash.h
new file mode 100644 (file)
index 0000000..2ce600d
--- /dev/null
@@ -0,0 +1,39 @@
+/* Definitions for use with Linux AF_ASH sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETASH_ASH_H
+#define _NETASH_ASH_H  1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+struct sockaddr_ash
+  {
+    __SOCKADDR_COMMON (sash_);         /* Common data: address family etc.  */
+    int sash_ifindex;                  /* Interface to use.  */
+    unsigned char sash_channel;                /* Realtime or control.  */
+    unsigned int sash_plen;
+    unsigned char sash_prefix[16];
+  };
+
+/* Values for `channel' member.  */
+#define ASH_CHANNEL_ANY                0
+#define ASH_CHANNEL_CONTROL    1
+#define ASH_CHANNEL_REALTIME   2
+
+#endif /* netash/ash.h */
diff --git a/lib/libdss-include/netatalk/at.h b/lib/libdss-include/netatalk/at.h
new file mode 100644 (file)
index 0000000..34945d8
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETATALK_AT_H
+#define _NETATALK_AT_H 1
+
+#include <asm/types.h>
+#include <bits/sockaddr.h>
+#include <linux/atalk.h>
+#include <sys/socket.h>
+
+#define SOL_ATALK       258     /* sockopt level for atalk */
+
+#endif /* netatalk/at.h */
diff --git a/lib/libdss-include/netax25/ax25.h b/lib/libdss-include/netax25/ax25.h
new file mode 100644 (file)
index 0000000..13883a0
--- /dev/null
@@ -0,0 +1,170 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETAX25_AX25_H
+#define _NETAX25_AX25_H        1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+/* Setsockoptions(2) level.  Thanks to BSD these must match IPPROTO_xxx.  */
+#define SOL_AX25       257
+
+/* AX.25 flags: */
+#define AX25_WINDOW    1
+#define AX25_T1                2
+#define AX25_T2                5
+#define AX25_T3                4
+#define AX25_N2                3
+#define AX25_BACKOFF   6
+#define AX25_EXTSEQ    7
+#define AX25_PIDINCL   8
+#define AX25_IDLE      9
+#define        AX25_PACLEN     10
+#define AX25_IPMAXQUEUE 11
+#define AX25_IAMDIGI   12
+#define AX25_KILL      99
+
+/* AX.25 socket ioctls: */
+#define SIOCAX25GETUID         (SIOCPROTOPRIVATE)
+#define SIOCAX25ADDUID         (SIOCPROTOPRIVATE+1)
+#define SIOCAX25DELUID         (SIOCPROTOPRIVATE+2)
+#define SIOCAX25NOUID          (SIOCPROTOPRIVATE+3)
+#define SIOCAX25BPQADDR                (SIOCPROTOPRIVATE+4)
+#define SIOCAX25GETPARMS       (SIOCPROTOPRIVATE+5)
+#define SIOCAX25SETPARMS       (SIOCPROTOPRIVATE+6)
+#define SIOCAX25OPTRT          (SIOCPROTOPRIVATE+7)
+#define SIOCAX25CTLCON         (SIOCPROTOPRIVATE+8)
+#define SIOCAX25GETINFO                (SIOCPROTOPRIVATE+9)
+#define SIOCAX25ADDFWD         (SIOCPROTOPRIVATE+10)
+#define SIOCAX25DELFWD         (SIOCPROTOPRIVATE+11)
+
+/* unknown: */
+#define AX25_NOUID_DEFAULT     0
+#define AX25_NOUID_BLOCK       1
+#define AX25_SET_RT_IPMODE     2
+
+/* Digipeating flags: */
+#define AX25_DIGI_INBAND       0x01    /* Allow digipeating within port */
+#define AX25_DIGI_XBAND                0x02    /* Allow digipeating across ports */
+
+/* Maximim number of digipeaters: */
+#define AX25_MAX_DIGIS 8
+
+
+typedef struct
+  {
+    char ax25_call[7];         /* 6 call + SSID (shifted ascii) */
+  }
+ax25_address;
+
+struct sockaddr_ax25
+  {
+    sa_family_t sax25_family;
+    ax25_address sax25_call;
+    int sax25_ndigis;
+  };
+
+/*
+ * The sockaddr struct with the digipeater adresses:
+ */
+struct full_sockaddr_ax25
+  {
+    struct sockaddr_ax25 fsa_ax25;
+    ax25_address fsa_digipeater[AX25_MAX_DIGIS];
+  };
+#define sax25_uid      sax25_ndigis
+
+struct ax25_routes_struct
+  {
+    ax25_address port_addr;
+    ax25_address dest_addr;
+    unsigned char digi_count;
+    ax25_address digi_addr[AX25_MAX_DIGIS];
+  };
+
+/* The AX.25 ioctl structure: */
+struct ax25_ctl_struct
+  {
+    ax25_address port_addr;
+    ax25_address source_addr;
+    ax25_address dest_addr;
+    unsigned int cmd;
+    unsigned long arg;
+    unsigned char digi_count;
+    ax25_address digi_addr[AX25_MAX_DIGIS];
+  };
+
+struct ax25_info_struct
+  {
+    unsigned int  n2, n2count;
+    unsigned int t1, t1timer;
+    unsigned int t2, t2timer;
+    unsigned int t3, t3timer;
+    unsigned int idle, idletimer;
+    unsigned int state;
+    unsigned int rcv_q, snd_q;
+  };
+
+struct ax25_fwd_struct
+  {
+    ax25_address port_from;
+    ax25_address port_to;
+  };
+
+/* AX.25 route structure: */
+struct ax25_route_opt_struct
+  {
+    ax25_address port_addr;
+    ax25_address dest_addr;
+    int cmd;
+    int arg;
+  };
+
+/* AX.25 BPQ stuff: */
+struct ax25_bpqaddr_struct
+  {
+    char dev[16];
+    ax25_address addr;
+  };
+
+/* Definitions for the AX.25 `values' fields: */
+#define        AX25_VALUES_IPDEFMODE   0       /* 'D'=DG 'V'=VC */
+#define        AX25_VALUES_AXDEFMODE   1       /* 8=Normal 128=Extended Seq Nos */
+#define        AX25_VALUES_NETROM      2       /* Allow NET/ROM  - 0=No 1=Yes */
+#define        AX25_VALUES_TEXT        3       /* Allow PID=Text - 0=No 1=Yes */
+#define        AX25_VALUES_BACKOFF     4       /* 'E'=Exponential 'L'=Linear */
+#define        AX25_VALUES_CONMODE     5       /* Allow connected modes - 0=No 1=Yes */
+#define        AX25_VALUES_WINDOW      6       /* Default window size for standard AX.25 */
+#define        AX25_VALUES_EWINDOW     7       /* Default window size for extended AX.25 */
+#define        AX25_VALUES_T1          8       /* Default T1 timeout value */
+#define        AX25_VALUES_T2          9       /* Default T2 timeout value */
+#define        AX25_VALUES_T3          10      /* Default T3 timeout value */
+#define        AX25_VALUES_N2          11      /* Default N2 value */
+#define        AX25_VALUES_DIGI        12      /* Digipeat mode */
+#define AX25_VALUES_IDLE       13      /* mode vc idle timer */
+#define AX25_VALUES_PACLEN     14      /* AX.25 MTU */
+#define AX25_VALUES_IPMAXQUEUE  15     /* Maximum number of buffers enqueued */
+#define        AX25_MAX_VALUES         20
+
+struct ax25_parms_struct
+  {
+    ax25_address port_addr;
+    unsigned short values[AX25_MAX_VALUES];
+  };
+
+#endif /* netax25/ax25.h */
diff --git a/lib/libdss-include/netdb.h b/lib/libdss-include/netdb.h
new file mode 100644 (file)
index 0000000..3aba530
--- /dev/null
@@ -0,0 +1,715 @@
+  /* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* All data returned by the network data base library are supplied in
+   host order and returned in network order (suitable for use in
+   system calls).  */
+
+#ifndef        _NETDB_H
+#define        _NETDB_H        1
+
+#include <features.h>
+
+#include <netinet/in.h>
+#include <stdint.h>
+#ifdef __USE_MISC
+/* This is necessary to make this include file properly replace the
+   Sun version.  */
+# include <rpc/netdb.h>
+#endif
+
+#ifdef __USE_GNU
+# define __need_sigevent_t
+# include <bits/siginfo.h>
+# define __need_timespec
+# include <time.h>
+#endif
+
+#include <bits/netdb.h>
+
+/* Absolute file name for network data base files.  */
+#define        _PATH_HEQUIV            "/etc/hosts.equiv"
+#define        _PATH_HOSTS             "/etc/hosts"
+#define        _PATH_NETWORKS          "/etc/networks"
+#define        _PATH_NSSWITCH_CONF     "/etc/nsswitch.conf"
+#define        _PATH_PROTOCOLS         "/etc/protocols"
+#define        _PATH_SERVICES          "/etc/services"
+
+
+__BEGIN_DECLS
+
+#if defined __USE_MISC || !defined __USE_XOPEN2K8
+/* Error status for non-reentrant lookup functions.
+   We use a macro to access always the thread-specific `h_errno' variable.  */
+# define h_errno (*__h_errno_location ())
+
+/* Function to get address of global `h_errno' variable.  */
+extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
+
+
+/* Possible values left in `h_errno'.  */
+# define HOST_NOT_FOUND        1       /* Authoritative Answer Host not found.  */
+# define TRY_AGAIN     2       /* Non-Authoritative Host not found,
+                                  or SERVERFAIL.  */
+# define NO_RECOVERY   3       /* Non recoverable errors, FORMERR, REFUSED,
+                                  NOTIMP.  */
+# define NO_DATA       4       /* Valid name, no data record of requested
+                                  type.  */
+#endif
+#ifdef __USE_MISC
+# define NETDB_INTERNAL        -1      /* See errno.  */
+# define NETDB_SUCCESS 0       /* No problem.  */
+# define NO_ADDRESS    NO_DATA /* No address, look for MX record.  */
+#endif
+
+#if defined __USE_XOPEN2K || defined __USE_XOPEN_EXTENDED
+/* Highest reserved Internet port number.  */
+# define IPPORT_RESERVED       1024
+#endif
+
+#ifdef __USE_GNU
+/* Scope delimiter for getaddrinfo(), getnameinfo().  */
+# define SCOPE_DELIMITER       '%'
+#endif
+
+#ifdef __USE_MISC
+/* Print error indicated by `h_errno' variable on standard error.  STR
+   if non-null is printed before the error string.  */
+extern void herror (const char *__str) __THROW;
+
+/* Return string associated with error ERR_NUM.  */
+extern const char *hstrerror (int __err_num) __THROW;
+#endif
+
+
+/* Description of data base entry for a single host.  */
+struct hostent
+{
+  char *h_name;                        /* Official name of host.  */
+  char **h_aliases;            /* Alias list.  */
+  int h_addrtype;              /* Host address type.  */
+  int h_length;                        /* Length of address.  */
+  char **h_addr_list;          /* List of addresses from name server.  */
+#ifdef __USE_MISC
+# define       h_addr  h_addr_list[0] /* Address, for backward compatibility.*/
+#endif
+};
+
+/* Open host data base files and mark them as staying open even after
+   a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void sethostent (int __stay_open);
+
+/* Close host data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endhostent (void);
+
+/* Get next entry from host data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostent (void);
+
+/* Return entry from host data base which address match ADDR with
+   length LEN and type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
+                                     int __type);
+
+/* Return entry from host data base for host with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Return entry from host data base for host with NAME.  AF must be
+   set to the address type which is `AF_INET' for IPv4 or `AF_INET6'
+   for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct hostent *gethostbyname2 (const char *__name, int __af);
+
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int gethostent_r (struct hostent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct hostent **__restrict __result,
+                        int *__restrict __h_errnop);
+
+extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
+                           int __type,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname_r (const char *__restrict __name,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname2_r (const char *__restrict __name, int __af,
+                            struct hostent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct hostent **__restrict __result,
+                            int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Open network data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setnetent (int __stay_open);
+
+/* Close network data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endnetent (void);
+
+/* Get next entry from network data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetent (void);
+
+/* Return entry from network data base which address match NET and
+   type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyaddr (uint32_t __net, int __type);
+
+/* Return entry from network data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getnetent_r (struct netent *__restrict __result_buf,
+                       char *__restrict __buf, size_t __buflen,
+                       struct netent **__restrict __result,
+                       int *__restrict __h_errnop);
+
+extern int getnetbyaddr_r (uint32_t __net, int __type,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+
+extern int getnetbyname_r (const char *__restrict __name,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct servent
+{
+  char *s_name;                        /* Official service name.  */
+  char **s_aliases;            /* Alias list.  */
+  int s_port;                  /* Port number.  */
+  char *s_proto;               /* Protocol to use.  */
+};
+
+/* Open service data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setservent (int __stay_open);
+
+/* Close service data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endservent (void);
+
+/* Get next entry from service data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservent (void);
+
+/* Return entry from network data base for network with NAME and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyname (const char *__name, const char *__proto);
+
+/* Return entry from service data base which matches port PORT and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyport (int __port, const char *__proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getservent_r (struct servent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct servent **__restrict __result);
+
+extern int getservbyname_r (const char *__restrict __name,
+                           const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+
+extern int getservbyport_r (int __port, const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct protoent
+{
+  char *p_name;                        /* Official protocol name.  */
+  char **p_aliases;            /* Alias list.  */
+  int p_proto;                 /* Protocol number.  */
+};
+
+/* Open protocol data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setprotoent (int __stay_open);
+
+/* Close protocol data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endprotoent (void);
+
+/* Get next entry from protocol data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotoent (void);
+
+/* Return entry from protocol data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobyname (const char *__name);
+
+/* Return entry from protocol data base which number is PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobynumber (int __proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getprotoent_r (struct protoent *__restrict __result_buf,
+                         char *__restrict __buf, size_t __buflen,
+                         struct protoent **__restrict __result);
+
+extern int getprotobyname_r (const char *__restrict __name,
+                            struct protoent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct protoent **__restrict __result);
+
+extern int getprotobynumber_r (int __proto,
+                              struct protoent *__restrict __result_buf,
+                              char *__restrict __buf, size_t __buflen,
+                              struct protoent **__restrict __result);
+
+
+/* Establish network group NETGROUP for enumeration.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int setnetgrent (const char *__netgroup);
+
+/* Free all space allocated by previous `setnetgrent' call.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endnetgrent (void);
+
+/* Get next member of netgroup established by last `setnetgrent' call
+   and return pointers to elements in HOSTP, USERP, and DOMAINP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent (char **__restrict __hostp,
+                       char **__restrict __userp,
+                       char **__restrict __domainp);
+
+
+/* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN).
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int innetgr (const char *__netgroup, const char *__host,
+                   const char *__user, const char *__domain);
+
+/* Reentrant version of `getnetgrent' where result is placed in BUFFER.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent_r (char **__restrict __hostp,
+                         char **__restrict __userp,
+                         char **__restrict __domainp,
+                         char *__restrict __buffer, size_t __buflen);
+#endif /* misc */
+
+
+#ifdef __USE_MISC
+/* Call `rshd' at port RPORT on remote machine *AHOST to execute CMD.
+   The local user is LOCUSER, on the remote machine the command is
+   executed as REMUSER.  In *FD2P the descriptor to the socket for the
+   connection is returned.  The caller must have the right to use a
+   reserved port.  When the function returns *AHOST contains the
+   official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
+                const char *__restrict __locuser,
+                const char *__restrict __remuser,
+                const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
+                   const char *__restrict __locuser,
+                   const char *__restrict __remuser,
+                   const char *__restrict __cmd, int *__restrict __fd2p,
+                   sa_family_t __af);
+
+/* Call `rexecd' at port RPORT on remote machine *AHOST to execute
+   CMD.  The process runs at the remote machine using the ID of user
+   NAME whose cleartext password is PASSWD.  In *FD2P the descriptor
+   to the socket for the connection is returned.  When the function
+   returns *AHOST contains the official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec (char **__restrict __ahost, int __rport,
+                 const char *__restrict __name,
+                 const char *__restrict __pass,
+                 const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec_af (char **__restrict __ahost, int __rport,
+                    const char *__restrict __name,
+                    const char *__restrict __pass,
+                    const char *__restrict __cmd, int *__restrict __fd2p,
+                    sa_family_t __af);
+
+/* Check whether user REMUSER on system RHOST is allowed to login as LOCUSER.
+   If SUSER is not zero the user tries to become superuser.  Return 0 if
+   it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok (const char *__rhost, int __suser,
+                   const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok_af (const char *__rhost, int __suser,
+                      const char *__remuser, const char *__locuser,
+                      sa_family_t __af);
+
+/* Check whether user REMUSER on system indicated by IPv4 address
+   RADDR is allowed to login as LOCUSER.  Non-IPv4 (e.g., IPv6) are
+   not supported.  If SUSER is not zero the user tries to become
+   superuser.  Return 0 if it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok (uint32_t __raddr, int __suser,
+                    const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the pfamiliy if the address
+   pointed to by RADDR is determined by the value of AF.  It therefore
+   can be used for IPv6
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok_af (const void *__raddr, int __suser,
+                       const char *__remuser, const char *__locuser,
+                       sa_family_t __af);
+
+/* Try to allocate reserved port, returning a descriptor for a socket opened
+   at this port or -1 if unsuccessful.  The search for an available port
+   will start at ALPORT and continues with lower numbers.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport (int *__alport);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport_af (int *__alport, sa_family_t __af);
+#endif
+
+
+/* Extension from POSIX.1:2001.  */
+#ifdef __USE_XOPEN2K
+/* Structure to contain information about address of a service provider.  */
+struct addrinfo
+{
+  int ai_flags;                        /* Input flags.  */
+  int ai_family;               /* Protocol family for socket.  */
+  int ai_socktype;             /* Socket type.  */
+  int ai_protocol;             /* Protocol for socket.  */
+  socklen_t ai_addrlen;                /* Length of socket address.  */
+  struct sockaddr *ai_addr;    /* Socket address for socket.  */
+  char *ai_canonname;          /* Canonical name for service location.  */
+  struct addrinfo *ai_next;    /* Pointer to next in list.  */
+};
+
+# ifdef __USE_GNU
+/* Structure used as control block for asynchronous lookup.  */
+struct gaicb
+{
+  const char *ar_name;         /* Name to look up.  */
+  const char *ar_service;      /* Service name.  */
+  const struct addrinfo *ar_request; /* Additional request specification.  */
+  struct addrinfo *ar_result;  /* Pointer to result.  */
+  /* The following are internal elements.  */
+  int __return;
+  int __glibc_reserved[5];
+};
+
+/* Lookup mode.  */
+#  define GAI_WAIT     0
+#  define GAI_NOWAIT   1
+# endif
+
+/* Possible values for `ai_flags' field in `addrinfo' structure.  */
+# define AI_PASSIVE    0x0001  /* Socket address is intended for `bind'.  */
+# define AI_CANONNAME  0x0002  /* Request for canonical name.  */
+# define AI_NUMERICHOST        0x0004  /* Don't use name resolution.  */
+# define AI_V4MAPPED   0x0008  /* IPv4 mapped addresses are acceptable.  */
+# define AI_ALL                0x0010  /* Return IPv4 mapped and IPv6 addresses.  */
+# define AI_ADDRCONFIG 0x0020  /* Use configuration of this host to choose
+                                  returned address type..  */
+# ifdef __USE_GNU
+#  define AI_IDN       0x0040  /* IDN encode input (assuming it is encoded
+                                  in the current locale's character set)
+                                  before looking it up. */
+#  define AI_CANONIDN  0x0080  /* Translate canonical name from IDN format. */
+#  define AI_IDN_ALLOW_UNASSIGNED 0x0100 /* Don't reject unassigned Unicode
+                                           code points.  */
+#  define AI_IDN_USE_STD3_ASCII_RULES 0x0200 /* Validate strings according to
+                                               STD3 rules.  */
+# endif
+# define AI_NUMERICSERV        0x0400  /* Don't use name resolution.  */
+
+/* Error values for `getaddrinfo' function.  */
+# define EAI_BADFLAGS    -1    /* Invalid value for `ai_flags' field.  */
+# define EAI_NONAME      -2    /* NAME or SERVICE is unknown.  */
+# define EAI_AGAIN       -3    /* Temporary failure in name resolution.  */
+# define EAI_FAIL        -4    /* Non-recoverable failure in name res.  */
+# define EAI_FAMILY      -6    /* `ai_family' not supported.  */
+# define EAI_SOCKTYPE    -7    /* `ai_socktype' not supported.  */
+# define EAI_SERVICE     -8    /* SERVICE not supported for `ai_socktype'.  */
+# define EAI_MEMORY      -10   /* Memory allocation failure.  */
+# define EAI_SYSTEM      -11   /* System error returned in `errno'.  */
+# define EAI_OVERFLOW    -12   /* Argument buffer overflow.  */
+# ifdef __USE_GNU
+#  define EAI_NODATA     -5    /* No address associated with NAME.  */
+#  define EAI_ADDRFAMILY  -9   /* Address family for NAME not supported.  */
+#  define EAI_INPROGRESS  -100 /* Processing request in progress.  */
+#  define EAI_CANCELED   -101  /* Request canceled.  */
+#  define EAI_NOTCANCELED -102 /* Request not canceled.  */
+#  define EAI_ALLDONE    -103  /* All requests done.  */
+#  define EAI_INTR       -104  /* Interrupted by a signal.  */
+#  define EAI_IDN_ENCODE  -105 /* IDN encoding failed.  */
+# endif
+
+# ifdef __USE_MISC
+#  define NI_MAXHOST      1025
+#  define NI_MAXSERV      32
+# endif
+
+# define NI_NUMERICHOST        1       /* Don't try to look up hostname.  */
+# define NI_NUMERICSERV 2      /* Don't convert port number to name.  */
+# define NI_NOFQDN     4       /* Only return nodename portion.  */
+# define NI_NAMEREQD   8       /* Don't return numeric addresses.  */
+# define NI_DGRAM      16      /* Look up UDP service rather than TCP.  */
+# ifdef __USE_GNU
+#  define NI_IDN       32      /* Convert name from IDN format.  */
+#  define NI_IDN_ALLOW_UNASSIGNED 64 /* Don't reject unassigned Unicode
+                                       code points.  */
+#  define NI_IDN_USE_STD3_ASCII_RULES 128 /* Validate strings according to
+                                            STD3 rules.  */
+# endif
+
+/* Translate name of a service location and/or a service name to set of
+   socket addresses.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getaddrinfo (const char *__restrict __name,
+                       const char *__restrict __service,
+                       const struct addrinfo *__restrict __req,
+                       struct addrinfo **__restrict __pai);
+
+/* Free `addrinfo' structure AI including associated storage.  */
+extern void freeaddrinfo (struct addrinfo *__ai) __THROW;
+
+/* Convert error return from getaddrinfo() to a string.  */
+extern const char *gai_strerror (int __ecode) __THROW;
+
+/* Translate a socket address to a location and service name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getnameinfo (const struct sockaddr *__restrict __sa,
+                       socklen_t __salen, char *__restrict __host,
+                       socklen_t __hostlen, char *__restrict __serv,
+                       socklen_t __servlen, int __flags);
+#endif /* POSIX */
+
+#ifdef __USE_GNU
+/* Enqueue ENT requests from the LIST.  If MODE is GAI_WAIT wait until all
+   requests are handled.  If WAIT is GAI_NOWAIT return immediately after
+   queueing the requests and signal completion according to SIG.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
+                         int __ent, struct sigevent *__restrict __sig);
+
+/* Suspend execution of the thread until at least one of the ENT requests
+   in LIST is handled.  If TIMEOUT is not a null pointer it specifies the
+   longest time the function keeps waiting before returning with an error.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int gai_suspend (const struct gaicb *const __list[], int __ent,
+                       const struct timespec *__timeout);
+
+/* Get the error status of the request REQ.  */
+extern int gai_error (struct gaicb *__req) __THROW;
+
+/* Cancel the requests associated with GAICBP.  */
+extern int gai_cancel (struct gaicb *__gaicbp) __THROW;
+#endif /* GNU */
+
+__END_DECLS
+
+#endif /* netdb.h */
diff --git a/lib/libdss-include/neteconet/ec.h b/lib/libdss-include/neteconet/ec.h
new file mode 100644 (file)
index 0000000..990f935
--- /dev/null
@@ -0,0 +1,51 @@
+/* Definitions for use with Linux AF_ECONET sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETECONET_EC_H
+#define _NETECONET_EC_H        1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+struct ec_addr
+  {
+    unsigned char station;             /* Station number.  */
+    unsigned char net;                 /* Network number.  */
+  };
+
+struct sockaddr_ec
+  {
+    __SOCKADDR_COMMON (sec_);
+    unsigned char port;                        /* Port number.  */
+    unsigned char cb;                  /* Control/flag byte.  */
+    unsigned char type;                        /* Type of message.  */
+    struct ec_addr addr;
+    unsigned long cookie;
+  };
+
+#define ECTYPE_PACKET_RECEIVED         0       /* Packet received */
+#define ECTYPE_TRANSMIT_STATUS         0x10    /* Transmit completed */
+
+#define ECTYPE_TRANSMIT_OK             1
+#define ECTYPE_TRANSMIT_NOT_LISTENING  2
+#define ECTYPE_TRANSMIT_NET_ERROR      3
+#define ECTYPE_TRANSMIT_NO_CLOCK       4
+#define ECTYPE_TRANSMIT_LINE_JAMMED    5
+#define ECTYPE_TRANSMIT_NOT_PRESENT    6
+
+#endif
diff --git a/lib/libdss-include/netinet/ether.h b/lib/libdss-include/netinet/ether.h
new file mode 100644 (file)
index 0000000..3dff523
--- /dev/null
@@ -0,0 +1,53 @@
+/* Functions for storing Ethernet addresses in ASCII and mapping to hostnames.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_ETHER_H
+#define _NETINET_ETHER_H       1
+
+#include <features.h>
+
+/* Get definition of `struct ether_addr'.  */
+#include <netinet/if_ether.h>
+
+__BEGIN_DECLS
+
+/* Convert 48 bit Ethernet ADDRess to ASCII.  */
+extern char *ether_ntoa (const struct ether_addr *__addr) __THROW;
+extern char *ether_ntoa_r (const struct ether_addr *__addr, char *__buf)
+     __THROW;
+
+/* Convert ASCII string S to 48 bit Ethernet address.  */
+extern struct ether_addr *ether_aton (const char *__asc) __THROW;
+extern struct ether_addr *ether_aton_r (const char *__asc,
+                                       struct ether_addr *__addr) __THROW;
+
+/* Map 48 bit Ethernet number ADDR to HOSTNAME.  */
+extern int ether_ntohost (char *__hostname, const struct ether_addr *__addr)
+     __THROW;
+
+/* Map HOSTNAME to 48 bit Ethernet address.  */
+extern int ether_hostton (const char *__hostname, struct ether_addr *__addr)
+     __THROW;
+
+/* Scan LINE and set ADDR and HOSTNAME.  */
+extern int ether_line (const char *__line, struct ether_addr *__addr,
+                      char *__hostname) __THROW;
+
+__END_DECLS
+
+#endif /* netinet/ether.h */
diff --git a/lib/libdss-include/netinet/icmp6.h b/lib/libdss-include/netinet/icmp6.h
new file mode 100644 (file)
index 0000000..b7a9637
--- /dev/null
@@ -0,0 +1,345 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_ICMP6_H
+#define _NETINET_ICMP6_H 1
+
+#include <inttypes.h>
+#include <string.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#define ICMP6_FILTER 1
+
+#define ICMP6_FILTER_BLOCK             1
+#define ICMP6_FILTER_PASS              2
+#define ICMP6_FILTER_BLOCKOTHERS       3
+#define ICMP6_FILTER_PASSONLY          4
+
+struct icmp6_filter
+  {
+    uint32_t icmp6_filt[8];
+  };
+
+struct icmp6_hdr
+  {
+    uint8_t     icmp6_type;   /* type field */
+    uint8_t     icmp6_code;   /* code field */
+    uint16_t    icmp6_cksum;  /* checksum field */
+    union
+      {
+       uint32_t  icmp6_un_data32[1]; /* type-specific field */
+       uint16_t  icmp6_un_data16[2]; /* type-specific field */
+       uint8_t   icmp6_un_data8[4];  /* type-specific field */
+      } icmp6_dataun;
+  };
+
+#define icmp6_data32    icmp6_dataun.icmp6_un_data32
+#define icmp6_data16    icmp6_dataun.icmp6_un_data16
+#define icmp6_data8     icmp6_dataun.icmp6_un_data8
+#define icmp6_pptr      icmp6_data32[0]  /* parameter prob */
+#define icmp6_mtu       icmp6_data32[0]  /* packet too big */
+#define icmp6_id        icmp6_data16[0]  /* echo request/reply */
+#define icmp6_seq       icmp6_data16[1]  /* echo request/reply */
+#define icmp6_maxdelay  icmp6_data16[0]  /* mcast group membership */
+
+#define ICMP6_DST_UNREACH             1
+#define ICMP6_PACKET_TOO_BIG          2
+#define ICMP6_TIME_EXCEEDED           3
+#define ICMP6_PARAM_PROB              4
+
+#define ICMP6_INFOMSG_MASK  0x80    /* all informational messages */
+
+#define ICMP6_ECHO_REQUEST          128
+#define ICMP6_ECHO_REPLY            129
+#define MLD_LISTENER_QUERY          130
+#define MLD_LISTENER_REPORT         131
+#define MLD_LISTENER_REDUCTION      132
+
+#define ICMP6_DST_UNREACH_NOROUTE     0 /* no route to destination */
+#define ICMP6_DST_UNREACH_ADMIN       1 /* communication with destination */
+                                        /* administratively prohibited */
+#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */
+#define ICMP6_DST_UNREACH_ADDR        3 /* address unreachable */
+#define ICMP6_DST_UNREACH_NOPORT      4 /* bad port */
+
+#define ICMP6_TIME_EXCEED_TRANSIT     0 /* Hop Limit == 0 in transit */
+#define ICMP6_TIME_EXCEED_REASSEMBLY  1 /* Reassembly time out */
+
+#define ICMP6_PARAMPROB_HEADER        0 /* erroneous header field */
+#define ICMP6_PARAMPROB_NEXTHEADER    1 /* unrecognized Next Header */
+#define ICMP6_PARAMPROB_OPTION        2 /* unrecognized IPv6 option */
+
+#define ICMP6_FILTER_WILLPASS(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+
+#define ICMP6_FILTER_WILLBLOCK(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+
+#define ICMP6_FILTER_SETPASS(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))))
+
+#define ICMP6_FILTER_SETBLOCK(type, filterp) \
+       ((((filterp)->icmp6_filt[(type) >> 5]) |=  (1 << ((type) & 31))))
+
+#define ICMP6_FILTER_SETPASSALL(filterp) \
+       memset (filterp, 0, sizeof (struct icmp6_filter));
+
+#define ICMP6_FILTER_SETBLOCKALL(filterp) \
+       memset (filterp, 0xFF, sizeof (struct icmp6_filter));
+
+#define ND_ROUTER_SOLICIT           133
+#define ND_ROUTER_ADVERT            134
+#define ND_NEIGHBOR_SOLICIT         135
+#define ND_NEIGHBOR_ADVERT          136
+#define ND_REDIRECT                 137
+
+struct nd_router_solicit      /* router solicitation */
+  {
+    struct icmp6_hdr  nd_rs_hdr;
+    /* could be followed by options */
+  };
+
+#define nd_rs_type               nd_rs_hdr.icmp6_type
+#define nd_rs_code               nd_rs_hdr.icmp6_code
+#define nd_rs_cksum              nd_rs_hdr.icmp6_cksum
+#define nd_rs_reserved           nd_rs_hdr.icmp6_data32[0]
+
+struct nd_router_advert       /* router advertisement */
+  {
+    struct icmp6_hdr  nd_ra_hdr;
+    uint32_t   nd_ra_reachable;   /* reachable time */
+    uint32_t   nd_ra_retransmit;  /* retransmit timer */
+    /* could be followed by options */
+  };
+
+#define nd_ra_type               nd_ra_hdr.icmp6_type
+#define nd_ra_code               nd_ra_hdr.icmp6_code
+#define nd_ra_cksum              nd_ra_hdr.icmp6_cksum
+#define nd_ra_curhoplimit        nd_ra_hdr.icmp6_data8[0]
+#define nd_ra_flags_reserved     nd_ra_hdr.icmp6_data8[1]
+#define ND_RA_FLAG_MANAGED       0x80
+#define ND_RA_FLAG_OTHER         0x40
+#define ND_RA_FLAG_HOME_AGENT    0x20
+#define nd_ra_router_lifetime    nd_ra_hdr.icmp6_data16[1]
+
+struct nd_neighbor_solicit    /* neighbor solicitation */
+  {
+    struct icmp6_hdr  nd_ns_hdr;
+    struct in6_addr   nd_ns_target; /* target address */
+    /* could be followed by options */
+  };
+
+#define nd_ns_type               nd_ns_hdr.icmp6_type
+#define nd_ns_code               nd_ns_hdr.icmp6_code
+#define nd_ns_cksum              nd_ns_hdr.icmp6_cksum
+#define nd_ns_reserved           nd_ns_hdr.icmp6_data32[0]
+
+struct nd_neighbor_advert     /* neighbor advertisement */
+  {
+    struct icmp6_hdr  nd_na_hdr;
+    struct in6_addr   nd_na_target; /* target address */
+    /* could be followed by options */
+  };
+
+#define nd_na_type               nd_na_hdr.icmp6_type
+#define nd_na_code               nd_na_hdr.icmp6_code
+#define nd_na_cksum              nd_na_hdr.icmp6_cksum
+#define nd_na_flags_reserved     nd_na_hdr.icmp6_data32[0]
+#if     BYTE_ORDER == BIG_ENDIAN
+#define ND_NA_FLAG_ROUTER        0x80000000
+#define ND_NA_FLAG_SOLICITED     0x40000000
+#define ND_NA_FLAG_OVERRIDE      0x20000000
+#else   /* BYTE_ORDER == LITTLE_ENDIAN */
+#define ND_NA_FLAG_ROUTER        0x00000080
+#define ND_NA_FLAG_SOLICITED     0x00000040
+#define ND_NA_FLAG_OVERRIDE      0x00000020
+#endif
+
+struct nd_redirect            /* redirect */
+  {
+    struct icmp6_hdr  nd_rd_hdr;
+    struct in6_addr   nd_rd_target; /* target address */
+    struct in6_addr   nd_rd_dst;    /* destination address */
+    /* could be followed by options */
+  };
+
+#define nd_rd_type               nd_rd_hdr.icmp6_type
+#define nd_rd_code               nd_rd_hdr.icmp6_code
+#define nd_rd_cksum              nd_rd_hdr.icmp6_cksum
+#define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]
+
+struct nd_opt_hdr             /* Neighbor discovery option header */
+  {
+    uint8_t  nd_opt_type;
+    uint8_t  nd_opt_len;        /* in units of 8 octets */
+    /* followed by option specific data */
+  };
+
+#define ND_OPT_SOURCE_LINKADDR         1
+#define ND_OPT_TARGET_LINKADDR         2
+#define ND_OPT_PREFIX_INFORMATION      3
+#define ND_OPT_REDIRECTED_HEADER       4
+#define ND_OPT_MTU                     5
+#define ND_OPT_RTR_ADV_INTERVAL                7
+#define ND_OPT_HOME_AGENT_INFO         8
+
+struct nd_opt_prefix_info     /* prefix information */
+  {
+    uint8_t   nd_opt_pi_type;
+    uint8_t   nd_opt_pi_len;
+    uint8_t   nd_opt_pi_prefix_len;
+    uint8_t   nd_opt_pi_flags_reserved;
+    uint32_t  nd_opt_pi_valid_time;
+    uint32_t  nd_opt_pi_preferred_time;
+    uint32_t  nd_opt_pi_reserved2;
+    struct in6_addr  nd_opt_pi_prefix;
+  };
+
+#define ND_OPT_PI_FLAG_ONLINK  0x80
+#define ND_OPT_PI_FLAG_AUTO    0x40
+#define ND_OPT_PI_FLAG_RADDR   0x20
+
+struct nd_opt_rd_hdr          /* redirected header */
+  {
+    uint8_t   nd_opt_rh_type;
+    uint8_t   nd_opt_rh_len;
+    uint16_t  nd_opt_rh_reserved1;
+    uint32_t  nd_opt_rh_reserved2;
+    /* followed by IP header and data */
+  };
+
+struct nd_opt_mtu             /* MTU option */
+  {
+    uint8_t   nd_opt_mtu_type;
+    uint8_t   nd_opt_mtu_len;
+    uint16_t  nd_opt_mtu_reserved;
+    uint32_t  nd_opt_mtu_mtu;
+  };
+
+struct mld_hdr
+  {
+    struct icmp6_hdr    mld_icmp6_hdr;
+    struct in6_addr     mld_addr; /* multicast address */
+  };
+
+#define mld_type        mld_icmp6_hdr.icmp6_type
+#define mld_code        mld_icmp6_hdr.icmp6_code
+#define mld_cksum       mld_icmp6_hdr.icmp6_cksum
+#define mld_maxdelay    mld_icmp6_hdr.icmp6_data16[0]
+#define mld_reserved    mld_icmp6_hdr.icmp6_data16[1]
+
+#define ICMP6_ROUTER_RENUMBERING    138
+
+struct icmp6_router_renum    /* router renumbering header */
+  {
+    struct icmp6_hdr    rr_hdr;
+    uint8_t             rr_segnum;
+    uint8_t             rr_flags;
+    uint16_t            rr_maxdelay;
+    uint32_t            rr_reserved;
+  };
+
+#define rr_type                rr_hdr.icmp6_type
+#define rr_code         rr_hdr.icmp6_code
+#define rr_cksum        rr_hdr.icmp6_cksum
+#define rr_seqnum       rr_hdr.icmp6_data32[0]
+
+/* Router renumbering flags */
+#define ICMP6_RR_FLAGS_TEST             0x80
+#define ICMP6_RR_FLAGS_REQRESULT        0x40
+#define ICMP6_RR_FLAGS_FORCEAPPLY       0x20
+#define ICMP6_RR_FLAGS_SPECSITE         0x10
+#define ICMP6_RR_FLAGS_PREVDONE         0x08
+
+struct rr_pco_match    /* match prefix part */
+  {
+    uint8_t             rpm_code;
+    uint8_t             rpm_len;
+    uint8_t             rpm_ordinal;
+    uint8_t             rpm_matchlen;
+    uint8_t             rpm_minlen;
+    uint8_t             rpm_maxlen;
+    uint16_t            rpm_reserved;
+    struct in6_addr     rpm_prefix;
+  };
+
+/* PCO code values */
+#define RPM_PCO_ADD             1
+#define RPM_PCO_CHANGE          2
+#define RPM_PCO_SETGLOBAL       3
+
+struct rr_pco_use      /* use prefix part */
+  {
+    uint8_t             rpu_uselen;
+    uint8_t             rpu_keeplen;
+    uint8_t             rpu_ramask;
+    uint8_t             rpu_raflags;
+    uint32_t            rpu_vltime;
+    uint32_t            rpu_pltime;
+    uint32_t            rpu_flags;
+    struct in6_addr     rpu_prefix;
+  };
+
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK  0x20
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO    0x10
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000
+# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000
+#elif BYTE_ORDER == LITTLE_ENDIAN
+# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80
+# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40
+#endif
+
+struct rr_result       /* router renumbering result message */
+  {
+    uint16_t            rrr_flags;
+    uint8_t             rrr_ordinal;
+    uint8_t             rrr_matchedlen;
+    uint32_t            rrr_ifid;
+    struct in6_addr     rrr_prefix;
+  };
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define ICMP6_RR_RESULT_FLAGS_OOB       0x0002
+# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001
+#elif BYTE_ORDER == LITTLE_ENDIAN
+# define ICMP6_RR_RESULT_FLAGS_OOB       0x0200
+# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100
+#endif
+
+/* Mobile IPv6 extension: Advertisement Interval.  */
+struct nd_opt_adv_interval
+  {
+    uint8_t   nd_opt_adv_interval_type;
+    uint8_t   nd_opt_adv_interval_len;
+    uint16_t  nd_opt_adv_interval_reserved;
+    uint32_t  nd_opt_adv_interval_ival;
+  };
+
+/* Mobile IPv6 extension: Home Agent Info.  */
+struct nd_opt_home_agent_info
+  {
+    uint8_t   nd_opt_home_agent_info_type;
+    uint8_t   nd_opt_home_agent_info_len;
+    uint16_t  nd_opt_home_agent_info_reserved;
+    uint16_t  nd_opt_home_agent_info_preference;
+    uint16_t  nd_opt_home_agent_info_lifetime;
+  };
+
+#endif /* netinet/icmpv6.h */
diff --git a/lib/libdss-include/netinet/if_ether.h b/lib/libdss-include/netinet/if_ether.h
new file mode 100644 (file)
index 0000000..e9ed137
--- /dev/null
@@ -0,0 +1,104 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IF_ETHER_H
+
+#define __NETINET_IF_ETHER_H   1
+#include <features.h>
+#include <sys/types.h>
+
+/* Get definitions from kernel header file.  */
+#include <linux/if_ether.h>
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)if_ether.h  8.3 (Berkeley) 5/2/95
+ *     $FreeBSD$
+ */
+
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+
+__BEGIN_DECLS
+/*
+ * Ethernet Address Resolution Protocol.
+ *
+ * See RFC 826 for protocol description.  Structure below is adapted
+ * to resolving internet addresses.  Field names used correspond to
+ * RFC 826.
+ */
+struct ether_arp {
+       struct  arphdr ea_hdr;          /* fixed-size header */
+       u_int8_t arp_sha[ETH_ALEN];     /* sender hardware address */
+       u_int8_t arp_spa[4];            /* sender protocol address */
+       u_int8_t arp_tha[ETH_ALEN];     /* target hardware address */
+       u_int8_t arp_tpa[4];            /* target protocol address */
+};
+#define        arp_hrd ea_hdr.ar_hrd
+#define        arp_pro ea_hdr.ar_pro
+#define        arp_hln ea_hdr.ar_hln
+#define        arp_pln ea_hdr.ar_pln
+#define        arp_op  ea_hdr.ar_op
+
+/*
+ * Macro to map an IP multicast address to an Ethernet multicast address.
+ * The high-order 25 bits of the Ethernet address are statically assigned,
+ * and the low-order 23 bits are taken from the low end of the IP address.
+ */
+#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \
+       /* struct in_addr *ipaddr; */ \
+       /* u_char enaddr[ETH_ALEN];        */ \
+{ \
+       (enaddr)[0] = 0x01; \
+       (enaddr)[1] = 0x00; \
+       (enaddr)[2] = 0x5e; \
+       (enaddr)[3] = ((u_int8_t *)ipaddr)[1] & 0x7f; \
+       (enaddr)[4] = ((u_int8_t *)ipaddr)[2]; \
+       (enaddr)[5] = ((u_int8_t *)ipaddr)[3]; \
+}
+
+__END_DECLS
+#endif /* __USE_MISC */
+
+#endif /* netinet/if_ether.h */
diff --git a/lib/libdss-include/netinet/if_fddi.h b/lib/libdss-include/netinet/if_fddi.h
new file mode 100644 (file)
index 0000000..6e0ab37
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IF_FDDI_H
+#define        _NETINET_IF_FDDI_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <asm/types.h>
+
+#include <linux/if_fddi.h>
+
+#ifdef __USE_MISC
+
+struct fddi_header {
+  u_int8_t fddi_fc;                    /* Frame Control (FC) value */
+  u_int8_t fddi_dhost[FDDI_K_ALEN];    /* Destination host */
+  u_int8_t fddi_shost[FDDI_K_ALEN];    /* Source host */
+};
+#endif
+
+#endif /* netinet/if_fddi.h */
diff --git a/lib/libdss-include/netinet/if_tr.h b/lib/libdss-include/netinet/if_tr.h
new file mode 100644 (file)
index 0000000..c203d11
--- /dev/null
@@ -0,0 +1,110 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IF_TR_H
+#define        _NETINET_IF_TR_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+/* IEEE 802.5 Token-Ring magic constants.  The frame sizes omit the preamble
+   and FCS/CRC (frame check sequence). */
+#define TR_ALEN                6               /* Octets in one token-ring addr */
+#define TR_HLEN        (sizeof (struct trh_hdr) + sizeof (struct trllc))
+#define AC             0x10
+#define LLC_FRAME      0x40
+
+/* LLC and SNAP constants */
+#define EXTENDED_SAP   0xAA
+#define UI_CMD         0x03
+
+/* This is an Token-Ring frame header. */
+struct trh_hdr
+{
+  u_int8_t  ac;                        /* access control field */
+  u_int8_t  fc;                        /* frame control field */
+  u_int8_t  daddr[TR_ALEN];    /* destination address */
+  u_int8_t  saddr[TR_ALEN];    /* source address */
+  u_int16_t rcf;               /* route control field */
+  u_int16_t rseg[8];           /* routing registers */
+};
+
+/* This is an Token-Ring LLC structure */
+struct trllc
+{
+  u_int8_t  dsap;              /* destination SAP */
+  u_int8_t  ssap;              /* source SAP */
+  u_int8_t  llc;               /* LLC control field */
+  u_int8_t  protid[3];         /* protocol id */
+  u_int16_t ethertype;         /* ether type field */
+};
+
+/* Token-Ring statistics collection data. */
+struct tr_statistics
+{
+  unsigned long rx_packets;     /* total packets received      */
+  unsigned long tx_packets;    /* total packets transmitted    */
+  unsigned long rx_bytes;      /* total bytes received         */
+  unsigned long tx_bytes;      /* total bytes transmitted      */
+  unsigned long rx_errors;     /* bad packets received         */
+  unsigned long tx_errors;     /* packet transmit problems     */
+  unsigned long rx_dropped;    /* no space in linux buffers    */
+  unsigned long tx_dropped;    /* no space available in linux  */
+  unsigned long multicast;     /* multicast packets received   */
+  unsigned long transmit_collision;
+
+  /* detailed Token-Ring errors. See IBM Token-Ring Network
+     Architecture for more info */
+
+  unsigned long line_errors;
+  unsigned long internal_errors;
+  unsigned long burst_errors;
+  unsigned long A_C_errors;
+  unsigned long abort_delimiters;
+  unsigned long lost_frames;
+  unsigned long recv_congest_count;
+  unsigned long frame_copied_errors;
+  unsigned long frequency_errors;
+  unsigned long token_errors;
+  unsigned long dummy1;
+};
+
+/* source routing stuff */
+#define TR_RII                         0x80
+#define TR_RCF_DIR_BIT                 0x80
+#define TR_RCF_LEN_MASK        0x1f00
+#define TR_RCF_BROADCAST       0x8000  /* all-routes broadcast */
+#define TR_RCF_LIMITED_BROADCAST 0xC000        /* single-route broadcast */
+#define TR_RCF_FRAME2K                 0x20
+#define TR_RCF_BROADCAST_MASK  0xC000
+#define TR_MAXRIFLEN           18
+
+#ifdef __USE_MISC
+
+struct trn_hdr
+{
+  u_int8_t trn_ac;                /* access control field */
+  u_int8_t trn_fc;                /* field control field */
+  u_int8_t trn_dhost[TR_ALEN];    /* destination host */
+  u_int8_t trn_shost[TR_ALEN];    /* source host */
+  u_int16_t trn_rcf;              /* route control field */
+  u_int16_t trn_rseg[8];          /* routing registers */
+};
+
+#endif
+
+#endif /* netinet/if_tr.h */
diff --git a/lib/libdss-include/netinet/igmp.h b/lib/libdss-include/netinet/igmp.h
new file mode 100644 (file)
index 0000000..fc7599e
--- /dev/null
@@ -0,0 +1,125 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IGMP_H
+#define        _NETINET_IGMP_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#ifdef __USE_MISC
+
+#include <netinet/in.h>
+
+__BEGIN_DECLS
+
+/*
+ * Copyright (c) 1988 Stephen Deering.
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Stephen Deering of Stanford University.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)igmp.h      8.1 (Berkeley) 6/10/93
+ *     $FreeBSD$
+ */
+
+struct igmp {
+  u_int8_t igmp_type;             /* IGMP type */
+  u_int8_t igmp_code;             /* routing code */
+  u_int16_t igmp_cksum;           /* checksum */
+  struct in_addr igmp_group;      /* group address */
+};
+
+#define IGMP_MINLEN                    8
+
+/*
+ * Message types, including version number.
+ */
+#define IGMP_MEMBERSHIP_QUERY          0x11    /* membership query         */
+#define IGMP_V1_MEMBERSHIP_REPORT      0x12    /* Ver. 1 membership report */
+#define IGMP_V2_MEMBERSHIP_REPORT      0x16    /* Ver. 2 membership report */
+#define IGMP_V2_LEAVE_GROUP            0x17    /* Leave-group message      */
+
+#define IGMP_DVMRP                     0x13    /* DVMRP routing message    */
+#define IGMP_PIM                       0x14    /* PIM routing message      */
+#define IGMP_TRACE                     0x15
+
+#define IGMP_MTRACE_RESP               0x1e    /* traceroute resp.(to sender)*/
+#define IGMP_MTRACE                    0x1f    /* mcast traceroute messages  */
+
+#define IGMP_MAX_HOST_REPORT_DELAY     10      /* max delay for response to     */
+                                               /*  query (in seconds) according */
+                                               /*  to RFC1112                   */
+#define IGMP_TIMER_SCALE               10      /* denotes that the igmp code field */
+                                               /* specifies time in 10th of seconds*/
+
+/*
+ * States for the IGMP v2 state table.
+ */
+#define IGMP_DELAYING_MEMBER   1
+#define IGMP_IDLE_MEMBER       2
+#define IGMP_LAZY_MEMBER       3
+#define IGMP_SLEEPING_MEMBER   4
+#define IGMP_AWAKENING_MEMBER  5
+
+/*
+ * States for IGMP router version cache.
+ */
+#define IGMP_v1_ROUTER         1
+#define IGMP_v2_ROUTER         2
+
+/*
+ * The following four defininitions are for backwards compatibility.
+ * They should be removed as soon as all applications are updated to
+ * use the new constant names.
+ */
+#define IGMP_HOST_MEMBERSHIP_QUERY     IGMP_MEMBERSHIP_QUERY
+#define IGMP_HOST_MEMBERSHIP_REPORT    IGMP_V1_MEMBERSHIP_REPORT
+#define IGMP_HOST_NEW_MEMBERSHIP_REPORT        IGMP_V2_MEMBERSHIP_REPORT
+#define IGMP_HOST_LEAVE_MESSAGE                IGMP_V2_LEAVE_GROUP
+
+__END_DECLS
+
+#endif
+
+#endif /* netinet/igmp.h */
diff --git a/lib/libdss-include/netinet/in.h b/lib/libdss-include/netinet/in.h
new file mode 100644 (file)
index 0000000..6122ab5
--- /dev/null
@@ -0,0 +1,633 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _NETINET_IN_H
+#define        _NETINET_IN_H   1
+
+#include <features.h>
+#include <stdint.h>
+#include <sys/socket.h>
+#include <bits/types.h>
+
+
+__BEGIN_DECLS
+
+/* Internet address.  */
+typedef uint32_t in_addr_t;
+struct in_addr
+  {
+    in_addr_t s_addr;
+  };
+
+/* Get system-specific definitions.  */
+#include <bits/in.h>
+
+/* Standard well-defined IP protocols.  */
+enum
+  {
+    IPPROTO_IP = 0,       /* Dummy protocol for TCP.  */
+#define IPPROTO_IP             IPPROTO_IP
+    IPPROTO_ICMP = 1,     /* Internet Control Message Protocol.  */
+#define IPPROTO_ICMP           IPPROTO_ICMP
+    IPPROTO_IGMP = 2,     /* Internet Group Management Protocol. */
+#define IPPROTO_IGMP           IPPROTO_IGMP
+    IPPROTO_IPIP = 4,     /* IPIP tunnels (older KA9Q tunnels use 94).  */
+#define IPPROTO_IPIP           IPPROTO_IPIP
+    IPPROTO_TCP = 6,      /* Transmission Control Protocol.  */
+#define IPPROTO_TCP            IPPROTO_TCP
+    IPPROTO_EGP = 8,      /* Exterior Gateway Protocol.  */
+#define IPPROTO_EGP            IPPROTO_EGP
+    IPPROTO_PUP = 12,     /* PUP protocol.  */
+#define IPPROTO_PUP            IPPROTO_PUP
+    IPPROTO_UDP = 17,     /* User Datagram Protocol.  */
+#define IPPROTO_UDP            IPPROTO_UDP
+    IPPROTO_IDP = 22,     /* XNS IDP protocol.  */
+#define IPPROTO_IDP            IPPROTO_IDP
+    IPPROTO_TP = 29,      /* SO Transport Protocol Class 4.  */
+#define IPPROTO_TP             IPPROTO_TP
+    IPPROTO_DCCP = 33,    /* Datagram Congestion Control Protocol.  */
+#define IPPROTO_DCCP           IPPROTO_DCCP
+    IPPROTO_IPV6 = 41,     /* IPv6 header.  */
+#define IPPROTO_IPV6           IPPROTO_IPV6
+    IPPROTO_RSVP = 46,    /* Reservation Protocol.  */
+#define IPPROTO_RSVP           IPPROTO_RSVP
+    IPPROTO_GRE = 47,     /* General Routing Encapsulation.  */
+#define IPPROTO_GRE            IPPROTO_GRE
+    IPPROTO_ESP = 50,      /* encapsulating security payload.  */
+#define IPPROTO_ESP            IPPROTO_ESP
+    IPPROTO_AH = 51,       /* authentication header.  */
+#define IPPROTO_AH             IPPROTO_AH
+    IPPROTO_MTP = 92,     /* Multicast Transport Protocol.  */
+#define IPPROTO_MTP            IPPROTO_MTP
+    IPPROTO_BEETPH = 94,   /* IP option pseudo header for BEET.  */
+#define IPPROTO_BEETPH         IPPROTO_BEETPH
+    IPPROTO_ENCAP = 98,           /* Encapsulation Header.  */
+#define IPPROTO_ENCAP          IPPROTO_ENCAP
+    IPPROTO_PIM = 103,    /* Protocol Independent Multicast.  */
+#define IPPROTO_PIM            IPPROTO_PIM
+    IPPROTO_COMP = 108,           /* Compression Header Protocol.  */
+#define IPPROTO_COMP           IPPROTO_COMP
+    IPPROTO_SCTP = 132,           /* Stream Control Transmission Protocol.  */
+#define IPPROTO_SCTP           IPPROTO_SCTP
+    IPPROTO_UDPLITE = 136, /* UDP-Lite protocol.  */
+#define IPPROTO_UDPLITE                IPPROTO_UDPLITE
+    IPPROTO_MPLS = 137,    /* MPLS in IP.  */
+#define IPPROTO_MPLS           IPPROTO_MPLS
+    IPPROTO_RAW = 255,    /* Raw IP packets.  */
+#define IPPROTO_RAW            IPPROTO_RAW
+    IPPROTO_MAX
+  };
+
+/* If __USE_KERNEL_IPV6_DEFS is defined then the user has included the kernel
+   network headers first and we should use those ABI-identical definitions
+   instead of our own.  */
+#ifndef __USE_KERNEL_IPV6_DEFS
+enum
+  {
+    IPPROTO_HOPOPTS = 0,   /* IPv6 Hop-by-Hop options.  */
+#define IPPROTO_HOPOPTS                IPPROTO_HOPOPTS
+    IPPROTO_ROUTING = 43,  /* IPv6 routing header.  */
+#define IPPROTO_ROUTING                IPPROTO_ROUTING
+    IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header.  */
+#define IPPROTO_FRAGMENT       IPPROTO_FRAGMENT
+    IPPROTO_ICMPV6 = 58,   /* ICMPv6.  */
+#define IPPROTO_ICMPV6         IPPROTO_ICMPV6
+    IPPROTO_NONE = 59,     /* IPv6 no next header.  */
+#define IPPROTO_NONE           IPPROTO_NONE
+    IPPROTO_DSTOPTS = 60,  /* IPv6 destination options.  */
+#define IPPROTO_DSTOPTS                IPPROTO_DSTOPTS
+    IPPROTO_MH = 135       /* IPv6 mobility header.  */
+#define IPPROTO_MH             IPPROTO_MH
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+/* Type to represent a port.  */
+typedef uint16_t in_port_t;
+
+/* Standard well-known ports.  */
+enum
+  {
+    IPPORT_ECHO = 7,           /* Echo service.  */
+    IPPORT_DISCARD = 9,                /* Discard transmissions service.  */
+    IPPORT_SYSTAT = 11,                /* System status service.  */
+    IPPORT_DAYTIME = 13,       /* Time of day service.  */
+    IPPORT_NETSTAT = 15,       /* Network status service.  */
+    IPPORT_FTP = 21,           /* File Transfer Protocol.  */
+    IPPORT_TELNET = 23,                /* Telnet protocol.  */
+    IPPORT_SMTP = 25,          /* Simple Mail Transfer Protocol.  */
+    IPPORT_TIMESERVER = 37,    /* Timeserver service.  */
+    IPPORT_NAMESERVER = 42,    /* Domain Name Service.  */
+    IPPORT_WHOIS = 43,         /* Internet Whois service.  */
+    IPPORT_MTP = 57,
+
+    IPPORT_TFTP = 69,          /* Trivial File Transfer Protocol.  */
+    IPPORT_RJE = 77,
+    IPPORT_FINGER = 79,                /* Finger service.  */
+    IPPORT_TTYLINK = 87,
+    IPPORT_SUPDUP = 95,                /* SUPDUP protocol.  */
+
+
+    IPPORT_EXECSERVER = 512,   /* execd service.  */
+    IPPORT_LOGINSERVER = 513,  /* rlogind service.  */
+    IPPORT_CMDSERVER = 514,
+    IPPORT_EFSSERVER = 520,
+
+    /* UDP ports.  */
+    IPPORT_BIFFUDP = 512,
+    IPPORT_WHOSERVER = 513,
+    IPPORT_ROUTESERVER = 520,
+
+    /* Ports less than this value are reserved for privileged processes.  */
+    IPPORT_RESERVED = 1024,
+
+    /* Ports greater this value are reserved for (non-privileged) servers.  */
+    IPPORT_USERRESERVED = 5000
+  };
+
+/* Definitions of the bits in an Internet address integer.
+
+   On subnets, host and network parts are found according to
+   the subnet mask, not these masks.  */
+
+#define        IN_CLASSA(a)            ((((in_addr_t)(a)) & 0x80000000) == 0)
+#define        IN_CLASSA_NET           0xff000000
+#define        IN_CLASSA_NSHIFT        24
+#define        IN_CLASSA_HOST          (0xffffffff & ~IN_CLASSA_NET)
+#define        IN_CLASSA_MAX           128
+
+#define        IN_CLASSB(a)            ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000)
+#define        IN_CLASSB_NET           0xffff0000
+#define        IN_CLASSB_NSHIFT        16
+#define        IN_CLASSB_HOST          (0xffffffff & ~IN_CLASSB_NET)
+#define        IN_CLASSB_MAX           65536
+
+#define        IN_CLASSC(a)            ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000)
+#define        IN_CLASSC_NET           0xffffff00
+#define        IN_CLASSC_NSHIFT        8
+#define        IN_CLASSC_HOST          (0xffffffff & ~IN_CLASSC_NET)
+
+#define        IN_CLASSD(a)            ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000)
+#define        IN_MULTICAST(a)         IN_CLASSD(a)
+
+#define        IN_EXPERIMENTAL(a)      ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000)
+#define        IN_BADCLASS(a)          ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000)
+
+/* Address to accept any incoming messages.  */
+#define        INADDR_ANY              ((in_addr_t) 0x00000000)
+/* Address to send to all hosts.  */
+#define        INADDR_BROADCAST        ((in_addr_t) 0xffffffff)
+/* Address indicating an error return.  */
+#define        INADDR_NONE             ((in_addr_t) 0xffffffff)
+
+/* Network number for local host loopback.  */
+#define        IN_LOOPBACKNET          127
+/* Address to loopback in software to local host.  */
+#ifndef INADDR_LOOPBACK
+# define INADDR_LOOPBACK       ((in_addr_t) 0x7f000001) /* Inet 127.0.0.1.  */
+#endif
+
+/* Defines for Multicast INADDR.  */
+#define INADDR_UNSPEC_GROUP    ((in_addr_t) 0xe0000000) /* 224.0.0.0 */
+#define INADDR_ALLHOSTS_GROUP  ((in_addr_t) 0xe0000001) /* 224.0.0.1 */
+#define INADDR_ALLRTRS_GROUP    ((in_addr_t) 0xe0000002) /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* IPv6 address */
+struct in6_addr
+  {
+    union
+      {
+       uint8_t __u6_addr8[16];
+#ifdef __USE_MISC
+       uint16_t __u6_addr16[8];
+       uint32_t __u6_addr32[4];
+#endif
+      } __in6_u;
+#define s6_addr                        __in6_u.__u6_addr8
+#ifdef __USE_MISC
+# define s6_addr16             __in6_u.__u6_addr16
+# define s6_addr32             __in6_u.__u6_addr32
+#endif
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+extern const struct in6_addr in6addr_any;        /* :: */
+extern const struct in6_addr in6addr_loopback;   /* ::1 */
+#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+
+/* Structure describing an Internet socket address.  */
+struct sockaddr_in
+  {
+    __SOCKADDR_COMMON (sin_);
+    in_port_t sin_port;                        /* Port number.  */
+    struct in_addr sin_addr;           /* Internet address.  */
+
+    /* Pad to size of `struct sockaddr'.  */
+    unsigned char sin_zero[sizeof (struct sockaddr) -
+                          __SOCKADDR_COMMON_SIZE -
+                          sizeof (in_port_t) -
+                          sizeof (struct in_addr)];
+  };
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* Ditto, for IPv6.  */
+struct sockaddr_in6
+  {
+    __SOCKADDR_COMMON (sin6_);
+    in_port_t sin6_port;       /* Transport layer port # */
+    uint32_t sin6_flowinfo;    /* IPv6 flow information */
+    struct in6_addr sin6_addr; /* IPv6 address */
+    uint32_t sin6_scope_id;    /* IPv6 scope-id */
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+#ifdef __USE_MISC
+/* IPv4 multicast request.  */
+struct ip_mreq
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imr_interface;
+  };
+
+struct ip_mreq_source
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imr_multiaddr;
+
+    /* IP address of source.  */
+    struct in_addr imr_interface;
+
+    /* IP address of interface.  */
+    struct in_addr imr_sourceaddr;
+  };
+#endif
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* Likewise, for IPv6.  */
+struct ipv6_mreq
+  {
+    /* IPv6 multicast address of group */
+    struct in6_addr ipv6mr_multiaddr;
+
+    /* local interface */
+    unsigned int ipv6mr_interface;
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+#ifdef __USE_MISC
+/* Multicast group request.  */
+struct group_req
+  {
+    /* Interface index.  */
+    uint32_t gr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gr_group;
+  };
+
+struct group_source_req
+  {
+    /* Interface index.  */
+    uint32_t gsr_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gsr_group;
+
+    /* Source address.  */
+    struct sockaddr_storage gsr_source;
+  };
+
+
+/* Full-state filter operations.  */
+struct ip_msfilter
+  {
+    /* IP multicast address of group.  */
+    struct in_addr imsf_multiaddr;
+
+    /* Local IP address of interface.  */
+    struct in_addr imsf_interface;
+
+    /* Filter mode.  */
+    uint32_t imsf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t imsf_numsrc;
+    /* Source addresses.  */
+    struct in_addr imsf_slist[1];
+  };
+
+#define IP_MSFILTER_SIZE(numsrc) (sizeof (struct ip_msfilter) \
+                                 - sizeof (struct in_addr)                   \
+                                 + (numsrc) * sizeof (struct in_addr))
+
+struct group_filter
+  {
+    /* Interface index.  */
+    uint32_t gf_interface;
+
+    /* Group address.  */
+    struct sockaddr_storage gf_group;
+
+    /* Filter mode.  */
+    uint32_t gf_fmode;
+
+    /* Number of source addresses.  */
+    uint32_t gf_numsrc;
+    /* Source addresses.  */
+    struct sockaddr_storage gf_slist[1];
+};
+
+#define GROUP_FILTER_SIZE(numsrc) (sizeof (struct group_filter) \
+                                  - sizeof (struct sockaddr_storage)         \
+                                  + ((numsrc)                                \
+                                     * sizeof (struct sockaddr_storage)))
+#endif
+
+/* Functions to convert between host and network byte order.
+
+   Please note that these functions normally take `unsigned long int' or
+   `unsigned short int' values as arguments and also return them.  But
+   this was a short-sighted decision since on different systems the types
+   may have different representations but the values are always the same.  */
+
+extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__ ((__const__));
+extern uint16_t ntohs (uint16_t __netshort)
+     __THROW __attribute__ ((__const__));
+extern uint32_t htonl (uint32_t __hostlong)
+     __THROW __attribute__ ((__const__));
+extern uint16_t htons (uint16_t __hostshort)
+     __THROW __attribute__ ((__const__));
+
+#include <endian.h>
+
+/* Get machine dependent optimized versions of byte swapping functions.  */
+#include <bits/byteswap.h>
+
+#ifdef __OPTIMIZE__
+/* We can optimize calls to the conversion functions.  Either nothing has
+   to be done or we are using directly the byte-swapping functions which
+   often can be inlined.  */
+# if __BYTE_ORDER == __BIG_ENDIAN
+/* The host byte order is the same as network byte order,
+   so these functions are all just identity.  */
+# define ntohl(x)      (x)
+# define ntohs(x)      (x)
+# define htonl(x)      (x)
+# define htons(x)      (x)
+# else
+#  if __BYTE_ORDER == __LITTLE_ENDIAN
+#   define ntohl(x)    __bswap_32 (x)
+#   define ntohs(x)    __bswap_16 (x)
+#   define htonl(x)    __bswap_32 (x)
+#   define htons(x)    __bswap_16 (x)
+#  endif
+# endif
+#endif
+
+#ifdef __GNUC__
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && __a->s6_addr32[3] == 0; }))
+
+# define IN6_IS_ADDR_LOOPBACK(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && __a->s6_addr32[3] == htonl (1); }))
+
+# define IN6_IS_ADDR_LINKLOCAL(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfe800000); }))
+
+# define IN6_IS_ADDR_SITELOCAL(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfec00000); }))
+
+# define IN6_IS_ADDR_V4MAPPED(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == htonl (0xffff); }))
+
+# define IN6_IS_ADDR_V4COMPAT(a) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      __a->s6_addr32[0] == 0                                                 \
+      && __a->s6_addr32[1] == 0                                                      \
+      && __a->s6_addr32[2] == 0                                                      \
+      && ntohl (__a->s6_addr32[3]) > 1; }))
+
+# define IN6_ARE_ADDR_EQUAL(a,b) \
+  (__extension__                                                             \
+   ({ const struct in6_addr *__a = (const struct in6_addr *) (a);            \
+      const struct in6_addr *__b = (const struct in6_addr *) (b);            \
+      __a->s6_addr32[0] == __b->s6_addr32[0]                                 \
+      && __a->s6_addr32[1] == __b->s6_addr32[1]                                      \
+      && __a->s6_addr32[2] == __b->s6_addr32[2]                                      \
+      && __a->s6_addr32[3] == __b->s6_addr32[3]; }))
+#else
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
+       (((const uint32_t *) (a))[0] == 0                                     \
+        && ((const uint32_t *) (a))[1] == 0                                  \
+        && ((const uint32_t *) (a))[2] == 0                                  \
+        && ((const uint32_t *) (a))[3] == 0)
+
+# define IN6_IS_ADDR_LOOPBACK(a) \
+       (((const uint32_t *) (a))[0] == 0                                     \
+        && ((const uint32_t *) (a))[1] == 0                                  \
+        && ((const uint32_t *) (a))[2] == 0                                  \
+        && ((const uint32_t *) (a))[3] == htonl (1))
+
+# define IN6_IS_ADDR_LINKLOCAL(a) \
+       ((((const uint32_t *) (a))[0] & htonl (0xffc00000))                   \
+        == htonl (0xfe800000))
+
+# define IN6_IS_ADDR_SITELOCAL(a) \
+       ((((const uint32_t *) (a))[0] & htonl (0xffc00000))                   \
+        == htonl (0xfec00000))
+
+# define IN6_IS_ADDR_V4MAPPED(a) \
+       ((((const uint32_t *) (a))[0] == 0)                                   \
+        && (((const uint32_t *) (a))[1] == 0)                                \
+        && (((const uint32_t *) (a))[2] == htonl (0xffff)))
+
+# define IN6_IS_ADDR_V4COMPAT(a) \
+       ((((const uint32_t *) (a))[0] == 0)                                   \
+        && (((const uint32_t *) (a))[1] == 0)                                \
+        && (((const uint32_t *) (a))[2] == 0)                                \
+        && (ntohl (((const uint32_t *) (a))[3]) > 1))
+
+# define IN6_ARE_ADDR_EQUAL(a,b) \
+       ((((const uint32_t *) (a))[0] == ((const uint32_t *) (b))[0])         \
+        && (((const uint32_t *) (a))[1] == ((const uint32_t *) (b))[1])      \
+        && (((const uint32_t *) (a))[2] == ((const uint32_t *) (b))[2])      \
+        && (((const uint32_t *) (a))[3] == ((const uint32_t *) (b))[3]))
+#endif
+
+#define IN6_IS_ADDR_MULTICAST(a) (((const uint8_t *) (a))[0] == 0xff)
+
+#ifdef __USE_MISC
+/* Bind socket to a privileged IP port.  */
+extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __THROW;
+
+/* The IPv6 version of this function.  */
+extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
+     __THROW;
+#endif
+
+
+#define IN6_IS_ADDR_MC_NODELOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(a) \
+       (IN6_IS_ADDR_MULTICAST(a)                                             \
+        && ((((const uint8_t *) (a))[1] & 0xf) == 0xe))
+
+
+#ifdef __USE_GNU
+struct cmsghdr;                        /* Forward declaration.  */
+
+#ifndef __USE_KERNEL_IPV6_DEFS
+/* IPv6 packet information.  */
+struct in6_pktinfo
+  {
+    struct in6_addr ipi6_addr; /* src/dst IPv6 address */
+    unsigned int ipi6_ifindex; /* send/recv interface index */
+  };
+
+/* IPv6 MTU information.  */
+struct ip6_mtuinfo
+  {
+    struct sockaddr_in6 ip6m_addr; /* dst address including zone ID */
+    uint32_t ip6m_mtu;            /* path MTU in host byte order */
+  };
+#endif /* !__USE_KERNEL_IPV6_DEFS */
+
+/* Obsolete hop-by-hop and Destination Options Processing (RFC 2292).  */
+extern int inet6_option_space (int __nbytes)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
+                             int __type) __THROW __attribute_deprecated__;
+extern int inet6_option_append (struct cmsghdr *__cmsg,
+                               const uint8_t *__typep, int __multx,
+                               int __plusy) __THROW __attribute_deprecated__;
+extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
+                                   int __multx, int __plusy)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_next (const struct cmsghdr *__cmsg,
+                             uint8_t **__tptrp)
+     __THROW __attribute_deprecated__;
+extern int inet6_option_find (const struct cmsghdr *__cmsg,
+                             uint8_t **__tptrp, int __type)
+     __THROW __attribute_deprecated__;
+
+
+/* Hop-by-Hop and Destination Options Processing (RFC 3542).  */
+extern int inet6_opt_init (void *__extbuf, socklen_t __extlen) __THROW;
+extern int inet6_opt_append (void *__extbuf, socklen_t __extlen, int __offset,
+                            uint8_t __type, socklen_t __len, uint8_t __align,
+                            void **__databufp) __THROW;
+extern int inet6_opt_finish (void *__extbuf, socklen_t __extlen, int __offset)
+     __THROW;
+extern int inet6_opt_set_val (void *__databuf, int __offset, void *__val,
+                             socklen_t __vallen) __THROW;
+extern int inet6_opt_next (void *__extbuf, socklen_t __extlen, int __offset,
+                          uint8_t *__typep, socklen_t *__lenp,
+                          void **__databufp) __THROW;
+extern int inet6_opt_find (void *__extbuf, socklen_t __extlen, int __offset,
+                          uint8_t __type, socklen_t *__lenp,
+                          void **__databufp) __THROW;
+extern int inet6_opt_get_val (void *__databuf, int __offset, void *__val,
+                             socklen_t __vallen) __THROW;
+
+
+/* Routing Header Option (RFC 3542).  */
+extern socklen_t inet6_rth_space (int __type, int __segments) __THROW;
+extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type,
+                            int __segments) __THROW;
+extern int inet6_rth_add (void *__bp, const struct in6_addr *__addr) __THROW;
+extern int inet6_rth_reverse (const void *__in, void *__out) __THROW;
+extern int inet6_rth_segments (const void *__bp) __THROW;
+extern struct in6_addr *inet6_rth_getaddr (const void *__bp, int __index)
+     __THROW;
+
+
+/* Multicast source filter support.  */
+
+/* Get IPv4 source filter.  */
+extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
+                               struct in_addr __group, uint32_t *__fmode,
+                               uint32_t *__numsrc, struct in_addr *__slist)
+     __THROW;
+
+/* Set IPv4 source filter.  */
+extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
+                               struct in_addr __group, uint32_t __fmode,
+                               uint32_t __numsrc,
+                               const struct in_addr *__slist)
+     __THROW;
+
+
+/* Get source filter.  */
+extern int getsourcefilter (int __s, uint32_t __interface_addr,
+                           const struct sockaddr *__group,
+                           socklen_t __grouplen, uint32_t *__fmode,
+                           uint32_t *__numsrc,
+                           struct sockaddr_storage *__slist) __THROW;
+
+/* Set source filter.  */
+extern int setsourcefilter (int __s, uint32_t __interface_addr,
+                           const struct sockaddr *__group,
+                           socklen_t __grouplen, uint32_t __fmode,
+                           uint32_t __numsrc,
+                           const struct sockaddr_storage *__slist) __THROW;
+#endif /* use GNU */
+
+__END_DECLS
+
+#endif /* netinet/in.h */
diff --git a/lib/libdss-include/netinet/in_systm.h b/lib/libdss-include/netinet/in_systm.h
new file mode 100644 (file)
index 0000000..41704ee
--- /dev/null
@@ -0,0 +1,40 @@
+/* System specific type definitions for networking code.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IN_SYSTM_H
+#define _NETINET_IN_SYSTM_H 1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/*
+ * Network order versions of various data types. Unfortunately, BSD
+ * assumes specific sizes for shorts (16 bit) and longs (32 bit) which
+ * don't hold in general. As a consequence, the network order versions
+ * may not reflect the actual size of the native data types.
+ */
+
+typedef u_int16_t n_short;      /* short as received from the net */
+typedef u_int32_t n_long;       /* long as received from the net  */
+typedef u_int32_t n_time;       /* ms since 00:00 GMT, byte rev   */
+
+__END_DECLS
+
+#endif /* netinet/in_systm.h */
diff --git a/lib/libdss-include/netinet/ip.h b/lib/libdss-include/netinet/ip.h
new file mode 100644 (file)
index 0000000..557a460
--- /dev/null
@@ -0,0 +1,302 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IP_H
+#define __NETINET_IP_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+#include <netinet/in.h>
+
+__BEGIN_DECLS
+
+struct timestamp
+  {
+    u_int8_t len;
+    u_int8_t ptr;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int flags:4;
+    unsigned int overflow:4;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int overflow:4;
+    unsigned int flags:4;
+#else
+# error        "Please fix <bits/endian.h>"
+#endif
+    u_int32_t data[9];
+  };
+
+struct iphdr
+  {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ihl:4;
+    unsigned int version:4;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int version:4;
+    unsigned int ihl:4;
+#else
+# error        "Please fix <bits/endian.h>"
+#endif
+    u_int8_t tos;
+    u_int16_t tot_len;
+    u_int16_t id;
+    u_int16_t frag_off;
+    u_int8_t ttl;
+    u_int8_t protocol;
+    u_int16_t check;
+    u_int32_t saddr;
+    u_int32_t daddr;
+    /*The options start here. */
+  };
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip.h        8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Definitions for internet protocol version 4.
+ * Per RFC 791, September 1981.
+ */
+
+/*
+ * Structure of an internet header, naked of options.
+ */
+struct ip
+  {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ip_hl:4;              /* header length */
+    unsigned int ip_v:4;               /* version */
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int ip_v:4;               /* version */
+    unsigned int ip_hl:4;              /* header length */
+#endif
+    u_int8_t ip_tos;                   /* type of service */
+    u_short ip_len;                    /* total length */
+    u_short ip_id;                     /* identification */
+    u_short ip_off;                    /* fragment offset field */
+#define        IP_RF 0x8000                    /* reserved fragment flag */
+#define        IP_DF 0x4000                    /* dont fragment flag */
+#define        IP_MF 0x2000                    /* more fragments flag */
+#define        IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
+    u_int8_t ip_ttl;                   /* time to live */
+    u_int8_t ip_p;                     /* protocol */
+    u_short ip_sum;                    /* checksum */
+    struct in_addr ip_src, ip_dst;     /* source and dest address */
+  };
+
+/*
+ * Time stamp option structure.
+ */
+struct ip_timestamp
+  {
+    u_int8_t ipt_code;                 /* IPOPT_TS */
+    u_int8_t ipt_len;                  /* size of structure (variable) */
+    u_int8_t ipt_ptr;                  /* index of current entry */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+    unsigned int ipt_flg:4;            /* flags, see below */
+    unsigned int ipt_oflw:4;           /* overflow counter */
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned int ipt_oflw:4;           /* overflow counter */
+    unsigned int ipt_flg:4;            /* flags, see below */
+#endif
+    u_int32_t data[9];
+  };
+#endif /* __USE_MISC */
+
+#define        IPVERSION       4               /* IP version number */
+#define        IP_MAXPACKET    65535           /* maximum packet size */
+
+/*
+ * Definitions for Explicit Congestion Notification (ECN)
+ *
+ * Taken from RFC-3168, Section 5.
+ */
+
+#define        IPTOS_ECN_MASK          0x03
+#define        IPTOS_ECN(x)            ((x) & IPTOS_ECN_MASK)
+#define        IPTOS_ECN_NOT_ECT       0x00
+#define        IPTOS_ECN_ECT1          0x01
+#define        IPTOS_ECN_ECT0          0x02
+#define        IPTOS_ECN_CE            0x03
+
+/*
+ * Definitions for IP differentiated services code points (DSCP)
+ *
+ * Taken from RFC-2597, Section 6 and RFC-2598, Section 2.3.
+ */
+
+#define        IPTOS_DSCP_MASK         0xfc
+#define        IPTOS_DSCP(x)           ((x) & IPTOS_DSCP_MASK)
+#define        IPTOS_DSCP_AF11         0x28
+#define        IPTOS_DSCP_AF12         0x30
+#define        IPTOS_DSCP_AF13         0x38
+#define        IPTOS_DSCP_AF21         0x48
+#define        IPTOS_DSCP_AF22         0x50
+#define        IPTOS_DSCP_AF23         0x58
+#define        IPTOS_DSCP_AF31         0x68
+#define        IPTOS_DSCP_AF32         0x70
+#define        IPTOS_DSCP_AF33         0x78
+#define        IPTOS_DSCP_AF41         0x88
+#define        IPTOS_DSCP_AF42         0x90
+#define        IPTOS_DSCP_AF43         0x98
+#define        IPTOS_DSCP_EF           0xb8
+
+/*
+ * In RFC 2474, Section 4.2.2.1, the Class Selector Codepoints subsume
+ * the old ToS Precedence values.
+ */
+
+#define        IPTOS_CLASS_MASK                0xe0
+#define        IPTOS_CLASS(class)              ((class) & IPTOS_CLASS_MASK)
+#define        IPTOS_CLASS_CS0                 0x00
+#define        IPTOS_CLASS_CS1                 0x20
+#define        IPTOS_CLASS_CS2                 0x40
+#define        IPTOS_CLASS_CS3                 0x60
+#define        IPTOS_CLASS_CS4                 0x80
+#define        IPTOS_CLASS_CS5                 0xa0
+#define        IPTOS_CLASS_CS6                 0xc0
+#define        IPTOS_CLASS_CS7                 0xe0
+
+#define        IPTOS_CLASS_DEFAULT             IPTOS_CLASS_CS0
+
+/*
+ * Definitions for IP type of service (ip_tos) [deprecated; use DSCP
+ * and CS definitions above instead.]
+ */
+#define        IPTOS_TOS_MASK          0x1E
+#define        IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)
+#define        IPTOS_LOWDELAY          0x10
+#define        IPTOS_THROUGHPUT        0x08
+#define        IPTOS_RELIABILITY       0x04
+#define        IPTOS_LOWCOST           0x02
+#define        IPTOS_MINCOST           IPTOS_LOWCOST
+
+/*
+ * Definitions for IP precedence (also in ip_tos) [also deprecated.]
+ */
+#define        IPTOS_PREC_MASK                 IPTOS_CLASS_MASK
+#define        IPTOS_PREC(tos)                 IPTOS_CLASS(tos)
+#define        IPTOS_PREC_NETCONTROL           IPTOS_CLASS_CS7
+#define        IPTOS_PREC_INTERNETCONTROL      IPTOS_CLASS_CS6
+#define        IPTOS_PREC_CRITIC_ECP           IPTOS_CLASS_CS5
+#define        IPTOS_PREC_FLASHOVERRIDE        IPTOS_CLASS_CS4
+#define        IPTOS_PREC_FLASH                IPTOS_CLASS_CS3
+#define        IPTOS_PREC_IMMEDIATE            IPTOS_CLASS_CS2
+#define        IPTOS_PREC_PRIORITY             IPTOS_CLASS_CS1
+#define        IPTOS_PREC_ROUTINE              IPTOS_CLASS_CS0
+
+/*
+ * Definitions for options.
+ */
+#define        IPOPT_COPY              0x80
+#define        IPOPT_CLASS_MASK        0x60
+#define        IPOPT_NUMBER_MASK       0x1f
+
+#define        IPOPT_COPIED(o)         ((o) & IPOPT_COPY)
+#define        IPOPT_CLASS(o)          ((o) & IPOPT_CLASS_MASK)
+#define        IPOPT_NUMBER(o)         ((o) & IPOPT_NUMBER_MASK)
+
+#define        IPOPT_CONTROL           0x00
+#define        IPOPT_RESERVED1         0x20
+#define        IPOPT_DEBMEAS           0x40
+#define        IPOPT_MEASUREMENT       IPOPT_DEBMEAS
+#define        IPOPT_RESERVED2         0x60
+
+#define        IPOPT_EOL               0               /* end of option list */
+#define        IPOPT_END               IPOPT_EOL
+#define        IPOPT_NOP               1               /* no operation */
+#define        IPOPT_NOOP              IPOPT_NOP
+
+#define        IPOPT_RR                7               /* record packet route */
+#define        IPOPT_TS                68              /* timestamp */
+#define        IPOPT_TIMESTAMP         IPOPT_TS
+#define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
+#define        IPOPT_SEC               IPOPT_SECURITY
+#define        IPOPT_LSRR              131             /* loose source route */
+#define        IPOPT_SATID             136             /* satnet id */
+#define        IPOPT_SID               IPOPT_SATID
+#define        IPOPT_SSRR              137             /* strict source route */
+#define        IPOPT_RA                148             /* router alert */
+
+/*
+ * Offsets to fields in options other than EOL and NOP.
+ */
+#define        IPOPT_OPTVAL            0               /* option ID */
+#define        IPOPT_OLEN              1               /* option length */
+#define        IPOPT_OFFSET            2               /* offset within option */
+#define        IPOPT_MINOFF            4               /* min value of above */
+
+#define        MAX_IPOPTLEN            40
+
+/* flag bits for ipt_flg */
+#define        IPOPT_TS_TSONLY         0               /* timestamps only */
+#define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define        IPOPT_TS_PRESPEC        3               /* specified modules only */
+
+/* bits for security (not byte swapped) */
+#define        IPOPT_SECUR_UNCLASS     0x0000
+#define        IPOPT_SECUR_CONFID      0xf135
+#define        IPOPT_SECUR_EFTO        0x789a
+#define        IPOPT_SECUR_MMMM        0xbc4d
+#define        IPOPT_SECUR_RESTR       0xaf13
+#define        IPOPT_SECUR_SECRET      0xd788
+#define        IPOPT_SECUR_TOPSECRET   0x6bc5
+
+/*
+ * Internet implementation parameters.
+ */
+#define        MAXTTL          255             /* maximum time to live (seconds) */
+#define        IPDEFTTL        64              /* default ttl, from RFC 1340 */
+#define        IPFRAGTTL       60              /* time to live for frags, slowhz */
+#define        IPTTLDEC        1               /* subtracted when forwarding */
+
+#define        IP_MSS          576             /* default maximum segment size */
+
+__END_DECLS
+
+#endif /* netinet/ip.h */
diff --git a/lib/libdss-include/netinet/ip6.h b/lib/libdss-include/netinet/ip6.h
new file mode 100644 (file)
index 0000000..929d4b5
--- /dev/null
@@ -0,0 +1,188 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETINET_IP6_H
+#define _NETINET_IP6_H 1
+
+#include <inttypes.h>
+#include <netinet/in.h>
+
+struct ip6_hdr
+  {
+    union
+      {
+       struct ip6_hdrctl
+         {
+           uint32_t ip6_un1_flow;   /* 4 bits version, 8 bits TC,
+                                       20 bits flow-ID */
+           uint16_t ip6_un1_plen;   /* payload length */
+           uint8_t  ip6_un1_nxt;    /* next header */
+           uint8_t  ip6_un1_hlim;   /* hop limit */
+         } ip6_un1;
+       uint8_t ip6_un2_vfc;       /* 4 bits version, top 4 bits tclass */
+      } ip6_ctlun;
+    struct in6_addr ip6_src;      /* source address */
+    struct in6_addr ip6_dst;      /* destination address */
+  };
+
+#define ip6_vfc   ip6_ctlun.ip6_un2_vfc
+#define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+/* Generic extension header.  */
+struct ip6_ext
+  {
+    uint8_t  ip6e_nxt;         /* next header.  */
+    uint8_t  ip6e_len;         /* length in units of 8 octets.  */
+  };
+
+/* Hop-by-Hop options header.  */
+struct ip6_hbh
+  {
+    uint8_t  ip6h_nxt;         /* next header.  */
+    uint8_t  ip6h_len;         /* length in units of 8 octets.  */
+    /* followed by options */
+  };
+
+/* Destination options header */
+struct ip6_dest
+  {
+    uint8_t  ip6d_nxt;         /* next header */
+    uint8_t  ip6d_len;         /* length in units of 8 octets */
+    /* followed by options */
+  };
+
+/* Routing header */
+struct ip6_rthdr
+  {
+    uint8_t  ip6r_nxt;         /* next header */
+    uint8_t  ip6r_len;         /* length in units of 8 octets */
+    uint8_t  ip6r_type;                /* routing type */
+    uint8_t  ip6r_segleft;     /* segments left */
+    /* followed by routing type specific data */
+  };
+
+/* Type 0 Routing header */
+struct ip6_rthdr0
+  {
+    uint8_t  ip6r0_nxt;                /* next header */
+    uint8_t  ip6r0_len;                /* length in units of 8 octets */
+    uint8_t  ip6r0_type;       /* always zero */
+    uint8_t  ip6r0_segleft;    /* segments left */
+    uint8_t  ip6r0_reserved;   /* reserved field */
+    uint8_t  ip6r0_slmap[3];   /* strict/loose bit map */
+    /* followed by up to 127 struct in6_addr */
+    struct in6_addr ip6r0_addr[0];
+  };
+
+/* Fragment header */
+struct ip6_frag
+  {
+    uint8_t   ip6f_nxt;                /* next header */
+    uint8_t   ip6f_reserved;   /* reserved field */
+    uint16_t  ip6f_offlg;      /* offset, reserved, and flag */
+    uint32_t  ip6f_ident;      /* identification */
+  };
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define IP6F_OFF_MASK       0xfff8  /* mask out offset from _offlg */
+# define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */
+# define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */
+#else   /* BYTE_ORDER == LITTLE_ENDIAN */
+# define IP6F_OFF_MASK       0xf8ff  /* mask out offset from _offlg */
+# define IP6F_RESERVED_MASK  0x0600  /* reserved bits in ip6f_offlg */
+# define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */
+#endif
+
+/* IPv6 options */
+struct ip6_opt
+  {
+    uint8_t  ip6o_type;
+    uint8_t  ip6o_len;
+  };
+
+/* The high-order 3 bits of the option type define the behavior
+ * when processing an unknown option and whether or not the option
+ * content changes in flight.
+ */
+#define IP6OPT_TYPE(o)         ((o) & 0xc0)
+#define IP6OPT_TYPE_SKIP       0x00
+#define IP6OPT_TYPE_DISCARD    0x40
+#define IP6OPT_TYPE_FORCEICMP  0x80
+#define IP6OPT_TYPE_ICMP       0xc0
+#define IP6OPT_TYPE_MUTABLE    0x20
+
+/* Special option types for padding.  */
+#define IP6OPT_PAD1    0
+#define IP6OPT_PADN    1
+
+#define IP6OPT_JUMBO           0xc2
+#define IP6OPT_NSAP_ADDR       0xc3
+#define IP6OPT_TUNNEL_LIMIT    0x04
+#define IP6OPT_ROUTER_ALERT    0x05
+
+/* Jumbo Payload Option */
+struct ip6_opt_jumbo
+  {
+    uint8_t  ip6oj_type;
+    uint8_t  ip6oj_len;
+    uint8_t  ip6oj_jumbo_len[4];
+  };
+#define IP6OPT_JUMBO_LEN       6
+
+/* NSAP Address Option */
+struct ip6_opt_nsap
+  {
+    uint8_t  ip6on_type;
+    uint8_t  ip6on_len;
+    uint8_t  ip6on_src_nsap_len;
+    uint8_t  ip6on_dst_nsap_len;
+      /* followed by source NSAP */
+      /* followed by destination NSAP */
+  };
+
+/* Tunnel Limit Option */
+struct ip6_opt_tunnel
+  {
+    uint8_t  ip6ot_type;
+    uint8_t  ip6ot_len;
+    uint8_t  ip6ot_encap_limit;
+  };
+
+/* Router Alert Option */
+struct ip6_opt_router
+  {
+    uint8_t  ip6or_type;
+    uint8_t  ip6or_len;
+    uint8_t  ip6or_value[2];
+  };
+
+/* Router alert values (in network byte order) */
+#if BYTE_ORDER == BIG_ENDIAN
+# define IP6_ALERT_MLD 0x0000
+# define IP6_ALERT_RSVP        0x0001
+# define IP6_ALERT_AN  0x0002
+#else /* BYTE_ORDER == LITTLE_ENDING */
+# define IP6_ALERT_MLD 0x0000
+# define IP6_ALERT_RSVP        0x0100
+# define IP6_ALERT_AN  0x0200
+#endif
+
+#endif /* netinet/ip6.h */
diff --git a/lib/libdss-include/netinet/ip_icmp.h b/lib/libdss-include/netinet/ip_icmp.h
new file mode 100644 (file)
index 0000000..4f7c1b1
--- /dev/null
@@ -0,0 +1,282 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETINET_IP_ICMP_H
+#define __NETINET_IP_ICMP_H    1
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+struct icmphdr
+{
+  u_int8_t type;               /* message type */
+  u_int8_t code;               /* type sub-code */
+  u_int16_t checksum;
+  union
+  {
+    struct
+    {
+      u_int16_t        id;
+      u_int16_t        sequence;
+    } echo;                    /* echo datagram */
+    u_int32_t  gateway;        /* gateway address */
+    struct
+    {
+      u_int16_t        __glibc_reserved;
+      u_int16_t        mtu;
+    } frag;                    /* path mtu discovery */
+  } un;
+};
+
+#define ICMP_ECHOREPLY         0       /* Echo Reply                   */
+#define ICMP_DEST_UNREACH      3       /* Destination Unreachable      */
+#define ICMP_SOURCE_QUENCH     4       /* Source Quench                */
+#define ICMP_REDIRECT          5       /* Redirect (change route)      */
+#define ICMP_ECHO              8       /* Echo Request                 */
+#define ICMP_TIME_EXCEEDED     11      /* Time Exceeded                */
+#define ICMP_PARAMETERPROB     12      /* Parameter Problem            */
+#define ICMP_TIMESTAMP         13      /* Timestamp Request            */
+#define ICMP_TIMESTAMPREPLY    14      /* Timestamp Reply              */
+#define ICMP_INFO_REQUEST      15      /* Information Request          */
+#define ICMP_INFO_REPLY                16      /* Information Reply            */
+#define ICMP_ADDRESS           17      /* Address Mask Request         */
+#define ICMP_ADDRESSREPLY      18      /* Address Mask Reply           */
+#define NR_ICMP_TYPES          18
+
+
+/* Codes for UNREACH. */
+#define ICMP_NET_UNREACH       0       /* Network Unreachable          */
+#define ICMP_HOST_UNREACH      1       /* Host Unreachable             */
+#define ICMP_PROT_UNREACH      2       /* Protocol Unreachable         */
+#define ICMP_PORT_UNREACH      3       /* Port Unreachable             */
+#define ICMP_FRAG_NEEDED       4       /* Fragmentation Needed/DF set  */
+#define ICMP_SR_FAILED         5       /* Source Route failed          */
+#define ICMP_NET_UNKNOWN       6
+#define ICMP_HOST_UNKNOWN      7
+#define ICMP_HOST_ISOLATED     8
+#define ICMP_NET_ANO           9
+#define ICMP_HOST_ANO          10
+#define ICMP_NET_UNR_TOS       11
+#define ICMP_HOST_UNR_TOS      12
+#define ICMP_PKT_FILTERED      13      /* Packet filtered */
+#define ICMP_PREC_VIOLATION    14      /* Precedence violation */
+#define ICMP_PREC_CUTOFF       15      /* Precedence cut off */
+#define NR_ICMP_UNREACH                15      /* instead of hardcoding immediate value */
+
+/* Codes for REDIRECT. */
+#define ICMP_REDIR_NET         0       /* Redirect Net                 */
+#define ICMP_REDIR_HOST                1       /* Redirect Host                */
+#define ICMP_REDIR_NETTOS      2       /* Redirect Net for TOS         */
+#define ICMP_REDIR_HOSTTOS     3       /* Redirect Host for TOS        */
+
+/* Codes for TIME_EXCEEDED. */
+#define ICMP_EXC_TTL           0       /* TTL count exceeded           */
+#define ICMP_EXC_FRAGTIME      1       /* Fragment Reass time exceeded */
+
+
+#ifdef __USE_MISC
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
+ */
+
+#include <netinet/in.h>
+#include <netinet/ip.h>
+
+/*
+ * Internal of an ICMP Router Advertisement
+ */
+struct icmp_ra_addr
+{
+  u_int32_t ira_addr;
+  u_int32_t ira_preference;
+};
+
+struct icmp
+{
+  u_int8_t  icmp_type; /* type of message, see below */
+  u_int8_t  icmp_code; /* type sub code */
+  u_int16_t icmp_cksum;        /* ones complement checksum of struct */
+  union
+  {
+    u_char ih_pptr;            /* ICMP_PARAMPROB */
+    struct in_addr ih_gwaddr;  /* gateway address */
+    struct ih_idseq            /* echo datagram */
+    {
+      u_int16_t icd_id;
+      u_int16_t icd_seq;
+    } ih_idseq;
+    u_int32_t ih_void;
+
+    /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
+    struct ih_pmtu
+    {
+      u_int16_t ipm_void;
+      u_int16_t ipm_nextmtu;
+    } ih_pmtu;
+
+    struct ih_rtradv
+    {
+      u_int8_t irt_num_addrs;
+      u_int8_t irt_wpa;
+      u_int16_t irt_lifetime;
+    } ih_rtradv;
+  } icmp_hun;
+#define        icmp_pptr       icmp_hun.ih_pptr
+#define        icmp_gwaddr     icmp_hun.ih_gwaddr
+#define        icmp_id         icmp_hun.ih_idseq.icd_id
+#define        icmp_seq        icmp_hun.ih_idseq.icd_seq
+#define        icmp_void       icmp_hun.ih_void
+#define        icmp_pmvoid     icmp_hun.ih_pmtu.ipm_void
+#define        icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
+#define        icmp_num_addrs  icmp_hun.ih_rtradv.irt_num_addrs
+#define        icmp_wpa        icmp_hun.ih_rtradv.irt_wpa
+#define        icmp_lifetime   icmp_hun.ih_rtradv.irt_lifetime
+  union
+  {
+    struct
+    {
+      u_int32_t its_otime;
+      u_int32_t its_rtime;
+      u_int32_t its_ttime;
+    } id_ts;
+    struct
+    {
+      struct ip idi_ip;
+      /* options and then 64 bits of data */
+    } id_ip;
+    struct icmp_ra_addr id_radv;
+    u_int32_t   id_mask;
+    u_int8_t    id_data[1];
+  } icmp_dun;
+#define        icmp_otime      icmp_dun.id_ts.its_otime
+#define        icmp_rtime      icmp_dun.id_ts.its_rtime
+#define        icmp_ttime      icmp_dun.id_ts.its_ttime
+#define        icmp_ip         icmp_dun.id_ip.idi_ip
+#define        icmp_radv       icmp_dun.id_radv
+#define        icmp_mask       icmp_dun.id_mask
+#define        icmp_data       icmp_dun.id_data
+};
+
+/*
+ * Lower bounds on packet lengths for various types.
+ * For the error advice packets must first insure that the
+ * packet is large enough to contain the returned ip header.
+ * Only then can we do the check to see if 64 bits of packet
+ * data have been returned, since we need to check the returned
+ * ip header length.
+ */
+#define        ICMP_MINLEN     8                               /* abs minimum */
+#define        ICMP_TSLEN      (8 + 3 * sizeof (n_time))       /* timestamp */
+#define        ICMP_MASKLEN    12                              /* address mask */
+#define        ICMP_ADVLENMIN  (8 + sizeof (struct ip) + 8)    /* min */
+#ifndef _IP_VHL
+#define        ICMP_ADVLEN(p)  (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
+       /* N.B.: must separately check that ip_hl >= 5 */
+#else
+#define        ICMP_ADVLEN(p)  (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
+       /* N.B.: must separately check that header length >= 5 */
+#endif
+
+/* Definition of type and code fields. */
+/* defined above: ICMP_ECHOREPLY, ICMP_REDIRECT, ICMP_ECHO */
+#define        ICMP_UNREACH            3               /* dest unreachable, codes: */
+#define        ICMP_SOURCEQUENCH       4               /* packet lost, slow down */
+#define        ICMP_ROUTERADVERT       9               /* router advertisement */
+#define        ICMP_ROUTERSOLICIT      10              /* router solicitation */
+#define        ICMP_TIMXCEED           11              /* time exceeded, code: */
+#define        ICMP_PARAMPROB          12              /* ip header bad */
+#define        ICMP_TSTAMP             13              /* timestamp request */
+#define        ICMP_TSTAMPREPLY        14              /* timestamp reply */
+#define        ICMP_IREQ               15              /* information request */
+#define        ICMP_IREQREPLY          16              /* information reply */
+#define        ICMP_MASKREQ            17              /* address mask request */
+#define        ICMP_MASKREPLY          18              /* address mask reply */
+
+#define        ICMP_MAXTYPE            18
+
+/* UNREACH codes */
+#define        ICMP_UNREACH_NET                0       /* bad net */
+#define        ICMP_UNREACH_HOST               1       /* bad host */
+#define        ICMP_UNREACH_PROTOCOL           2       /* bad protocol */
+#define        ICMP_UNREACH_PORT               3       /* bad port */
+#define        ICMP_UNREACH_NEEDFRAG           4       /* IP_DF caused drop */
+#define        ICMP_UNREACH_SRCFAIL            5       /* src route failed */
+#define        ICMP_UNREACH_NET_UNKNOWN        6       /* unknown net */
+#define        ICMP_UNREACH_HOST_UNKNOWN       7       /* unknown host */
+#define        ICMP_UNREACH_ISOLATED           8       /* src host isolated */
+#define        ICMP_UNREACH_NET_PROHIB         9       /* net denied */
+#define        ICMP_UNREACH_HOST_PROHIB        10      /* host denied */
+#define        ICMP_UNREACH_TOSNET             11      /* bad tos for net */
+#define        ICMP_UNREACH_TOSHOST            12      /* bad tos for host */
+#define        ICMP_UNREACH_FILTER_PROHIB      13      /* admin prohib */
+#define        ICMP_UNREACH_HOST_PRECEDENCE    14      /* host prec vio. */
+#define        ICMP_UNREACH_PRECEDENCE_CUTOFF  15      /* prec cutoff */
+
+/* REDIRECT codes */
+#define        ICMP_REDIRECT_NET       0               /* for network */
+#define        ICMP_REDIRECT_HOST      1               /* for host */
+#define        ICMP_REDIRECT_TOSNET    2               /* for tos and net */
+#define        ICMP_REDIRECT_TOSHOST   3               /* for tos and host */
+
+/* TIMEXCEED codes */
+#define        ICMP_TIMXCEED_INTRANS   0               /* ttl==0 in transit */
+#define        ICMP_TIMXCEED_REASS     1               /* ttl==0 in reass */
+
+/* PARAMPROB code */
+#define        ICMP_PARAMPROB_OPTABSENT 1              /* req. opt. absent */
+
+#define        ICMP_INFOTYPE(type) \
+       ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
+       (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
+       (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
+       (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
+       (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
+
+#endif /* __USE_MISC */
+
+__END_DECLS
+
+#endif /* netinet/ip_icmp.h */
diff --git a/lib/libdss-include/netinet/tcp.h b/lib/libdss-include/netinet/tcp.h
new file mode 100644 (file)
index 0000000..3918bca
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)tcp.h       8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET_TCP_H
+#define _NETINET_TCP_H 1
+
+#include <features.h>
+
+/*
+ * User-settable options (used with setsockopt).
+ */
+#define        TCP_NODELAY              1  /* Don't delay send to coalesce packets  */
+#define        TCP_MAXSEG               2  /* Set maximum segment size  */
+#define TCP_CORK                3  /* Control sending of partial frames  */
+#define TCP_KEEPIDLE            4  /* Start keeplives after this period */
+#define TCP_KEEPINTVL           5  /* Interval between keepalives */
+#define TCP_KEEPCNT             6  /* Number of keepalives before death */
+#define TCP_SYNCNT              7  /* Number of SYN retransmits */
+#define TCP_LINGER2             8  /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT        9  /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP        10 /* Bound advertised window */
+#define TCP_INFO                11 /* Information about this connection. */
+#define        TCP_QUICKACK             12 /* Bock/reenable quick ACKs.  */
+#define TCP_CONGESTION          13 /* Congestion control algorithm.  */
+#define TCP_MD5SIG              14 /* TCP MD5 Signature (RFC2385) */
+#define TCP_COOKIE_TRANSACTIONS         15 /* TCP Cookie Transactions */
+#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/
+#define TCP_THIN_DUPACK                 17 /* Fast retrans. after 1 dupack */
+#define TCP_USER_TIMEOUT        18 /* How long for loss retry before timeout */
+#define TCP_REPAIR              19 /* TCP sock is under repair right now */
+#define TCP_REPAIR_QUEUE        20 /* Set TCP queue to repair */
+#define TCP_QUEUE_SEQ           21 /* Set sequence number of repaired queue. */
+#define TCP_REPAIR_OPTIONS      22 /* Repair TCP connection options */
+#define TCP_FASTOPEN            23 /* Enable FastOpen on listeners */
+#define TCP_TIMESTAMP           24 /* TCP time stamp */
+#define TCP_NOTSENT_LOWAT       25 /* Limit number of unsent bytes in
+                                      write queue.  */
+#define TCP_CC_INFO             26 /* Get Congestion Control
+                                      (optional) info.  */
+#define TCP_SAVE_SYN            27 /* Record SYN headers for new
+                                      connections.  */
+#define TCP_SAVED_SYN           28 /* Get SYN headers recorded for
+                                      connection.  */
+
+#ifdef __USE_MISC
+# include <sys/types.h>
+# include <sys/socket.h>
+
+typedef        u_int32_t tcp_seq;
+/*
+ * TCP header.
+ * Per RFC 793, September, 1981.
+ */
+struct tcphdr
+  {
+    __extension__ union
+    {
+      struct
+      {
+       u_int16_t th_sport;             /* source port */
+       u_int16_t th_dport;             /* destination port */
+       tcp_seq th_seq;         /* sequence number */
+       tcp_seq th_ack;         /* acknowledgement number */
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+       u_int8_t th_x2:4;               /* (unused) */
+       u_int8_t th_off:4;              /* data offset */
+# endif
+# if __BYTE_ORDER == __BIG_ENDIAN
+       u_int8_t th_off:4;              /* data offset */
+       u_int8_t th_x2:4;               /* (unused) */
+# endif
+       u_int8_t th_flags;
+# define TH_FIN        0x01
+# define TH_SYN        0x02
+# define TH_RST        0x04
+# define TH_PUSH       0x08
+# define TH_ACK        0x10
+# define TH_URG        0x20
+       u_int16_t th_win;               /* window */
+       u_int16_t th_sum;               /* checksum */
+       u_int16_t th_urp;               /* urgent pointer */
+      };
+      struct
+      {
+       u_int16_t source;
+       u_int16_t dest;
+       u_int32_t seq;
+       u_int32_t ack_seq;
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+       u_int16_t res1:4;
+       u_int16_t doff:4;
+       u_int16_t fin:1;
+       u_int16_t syn:1;
+       u_int16_t rst:1;
+       u_int16_t psh:1;
+       u_int16_t ack:1;
+       u_int16_t urg:1;
+       u_int16_t res2:2;
+# elif __BYTE_ORDER == __BIG_ENDIAN
+       u_int16_t doff:4;
+       u_int16_t res1:4;
+       u_int16_t res2:2;
+       u_int16_t urg:1;
+       u_int16_t ack:1;
+       u_int16_t psh:1;
+       u_int16_t rst:1;
+       u_int16_t syn:1;
+       u_int16_t fin:1;
+# else
+#  error "Adjust your <bits/endian.h> defines"
+# endif
+       u_int16_t window;
+       u_int16_t check;
+       u_int16_t urg_ptr;
+      };
+    };
+};
+
+enum
+{
+  TCP_ESTABLISHED = 1,
+  TCP_SYN_SENT,
+  TCP_SYN_RECV,
+  TCP_FIN_WAIT1,
+  TCP_FIN_WAIT2,
+  TCP_TIME_WAIT,
+  TCP_CLOSE,
+  TCP_CLOSE_WAIT,
+  TCP_LAST_ACK,
+  TCP_LISTEN,
+  TCP_CLOSING   /* now a valid state */
+};
+
+# define TCPOPT_EOL            0
+# define TCPOPT_NOP            1
+# define TCPOPT_MAXSEG         2
+# define TCPOLEN_MAXSEG                4
+# define TCPOPT_WINDOW         3
+# define TCPOLEN_WINDOW                3
+# define TCPOPT_SACK_PERMITTED 4               /* Experimental */
+# define TCPOLEN_SACK_PERMITTED        2
+# define TCPOPT_SACK           5               /* Experimental */
+# define TCPOPT_TIMESTAMP      8
+# define TCPOLEN_TIMESTAMP     10
+# define TCPOLEN_TSTAMP_APPA   (TCPOLEN_TIMESTAMP+2) /* appendix A */
+
+# define TCPOPT_TSTAMP_HDR     \
+    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
+
+/*
+ * Default maximum segment size for TCP.
+ * With an IP MSS of 576, this is 536,
+ * but 512 is probably more convenient.
+ * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
+ */
+# define TCP_MSS       512
+
+# define TCP_MAXWIN    65535   /* largest value for (unscaled) window */
+
+# define TCP_MAX_WINSHIFT      14      /* maximum window shift */
+
+# define SOL_TCP               6       /* TCP level */
+
+
+# define TCPI_OPT_TIMESTAMPS   1
+# define TCPI_OPT_SACK         2
+# define TCPI_OPT_WSCALE       4
+# define TCPI_OPT_ECN          8  /* ECN was negociated at TCP session init */
+# define TCPI_OPT_ECN_SEEN     16 /* we received at least one packet with ECT */
+# define TCPI_OPT_SYN_DATA     32 /* SYN-ACK acked data in SYN sent or rcvd */
+
+/* Values for tcpi_state.  */
+enum tcp_ca_state
+{
+  TCP_CA_Open = 0,
+  TCP_CA_Disorder = 1,
+  TCP_CA_CWR = 2,
+  TCP_CA_Recovery = 3,
+  TCP_CA_Loss = 4
+};
+
+struct tcp_info
+{
+  u_int8_t     tcpi_state;
+  u_int8_t     tcpi_ca_state;
+  u_int8_t     tcpi_retransmits;
+  u_int8_t     tcpi_probes;
+  u_int8_t     tcpi_backoff;
+  u_int8_t     tcpi_options;
+  u_int8_t     tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
+
+  u_int32_t    tcpi_rto;
+  u_int32_t    tcpi_ato;
+  u_int32_t    tcpi_snd_mss;
+  u_int32_t    tcpi_rcv_mss;
+
+  u_int32_t    tcpi_unacked;
+  u_int32_t    tcpi_sacked;
+  u_int32_t    tcpi_lost;
+  u_int32_t    tcpi_retrans;
+  u_int32_t    tcpi_fackets;
+
+  /* Times. */
+  u_int32_t    tcpi_last_data_sent;
+  u_int32_t    tcpi_last_ack_sent;     /* Not remembered, sorry.  */
+  u_int32_t    tcpi_last_data_recv;
+  u_int32_t    tcpi_last_ack_recv;
+
+  /* Metrics. */
+  u_int32_t    tcpi_pmtu;
+  u_int32_t    tcpi_rcv_ssthresh;
+  u_int32_t    tcpi_rtt;
+  u_int32_t    tcpi_rttvar;
+  u_int32_t    tcpi_snd_ssthresh;
+  u_int32_t    tcpi_snd_cwnd;
+  u_int32_t    tcpi_advmss;
+  u_int32_t    tcpi_reordering;
+
+  u_int32_t    tcpi_rcv_rtt;
+  u_int32_t    tcpi_rcv_space;
+
+  u_int32_t    tcpi_total_retrans;
+};
+
+
+/* For TCP_MD5SIG socket option.  */
+#define TCP_MD5SIG_MAXKEYLEN   80
+
+struct tcp_md5sig
+{
+  struct sockaddr_storage tcpm_addr;           /* Address associated.  */
+  u_int16_t    __tcpm_pad1;                    /* Zero.  */
+  u_int16_t    tcpm_keylen;                    /* Key length.  */
+  u_int32_t    __tcpm_pad2;                    /* Zero.  */
+  u_int8_t     tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* Key (binary).  */
+};
+
+/* For socket repair options.  */
+struct tcp_repair_opt
+{
+  u_int32_t    opt_code;
+  u_int32_t    opt_val;
+};
+
+/* Queue to repair, for TCP_REPAIR_QUEUE.  */
+enum
+{
+  TCP_NO_QUEUE,
+  TCP_RECV_QUEUE,
+  TCP_SEND_QUEUE,
+  TCP_QUEUES_NR,
+};
+
+/* For cookie transactions socket options.  */
+#define TCP_COOKIE_MIN         8               /*  64-bits */
+#define TCP_COOKIE_MAX         16              /* 128-bits */
+#define TCP_COOKIE_PAIR_SIZE   (2*TCP_COOKIE_MAX)
+
+/* Flags for both getsockopt and setsockopt */
+#define TCP_COOKIE_IN_ALWAYS   (1 << 0)        /* Discard SYN without cookie */
+#define TCP_COOKIE_OUT_NEVER   (1 << 1)        /* Prohibit outgoing cookies,
+                                                * supercedes everything. */
+
+/* Flags for getsockopt */
+#define TCP_S_DATA_IN          (1 << 2)        /* Was data received? */
+#define TCP_S_DATA_OUT         (1 << 3)        /* Was data sent? */
+
+#define TCP_MSS_DEFAULT                 536U   /* IPv4 (RFC1122, RFC2581) */
+#define TCP_MSS_DESIRED                1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
+
+struct tcp_cookie_transactions
+{
+  u_int16_t    tcpct_flags;
+  u_int8_t     __tcpct_pad1;
+  u_int8_t     tcpct_cookie_desired;
+  u_int16_t    tcpct_s_data_desired;
+  u_int16_t    tcpct_used;
+  u_int8_t     tcpct_value[TCP_MSS_DEFAULT];
+};
+
+#endif /* Misc.  */
+
+#endif /* netinet/tcp.h */
diff --git a/lib/libdss-include/netinet/udp.h b/lib/libdss-include/netinet/udp.h
new file mode 100644 (file)
index 0000000..bcc3213
--- /dev/null
@@ -0,0 +1,93 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * Copyright (C) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __NETINET_UDP_H
+#define __NETINET_UDP_H    1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+/* UDP header as specified by RFC 768, August 1980. */
+
+struct udphdr
+{
+  __extension__ union
+  {
+    struct
+    {
+      u_int16_t uh_sport;              /* source port */
+      u_int16_t uh_dport;              /* destination port */
+      u_int16_t uh_ulen;               /* udp length */
+      u_int16_t uh_sum;                /* udp checksum */
+    };
+    struct
+    {
+      u_int16_t source;
+      u_int16_t dest;
+      u_int16_t len;
+      u_int16_t check;
+    };
+  };
+};
+
+/* UDP socket options */
+#define UDP_CORK       1       /* Never send partially complete segments.  */
+#define UDP_ENCAP      100     /* Set the socket to accept
+                                  encapsulated packets.  */
+#define UDP_NO_CHECK6_TX 101   /* Disable sending checksum for UDP
+                                  over IPv6.  */
+#define UDP_NO_CHECK6_RX 102   /* Disable accepting checksum for UDP
+                                  over IPv6.  */
+
+/* UDP encapsulation types */
+#define UDP_ENCAP_ESPINUDP_NON_IKE 1   /* draft-ietf-ipsec-nat-t-ike-00/01 */
+#define UDP_ENCAP_ESPINUDP     2       /* draft-ietf-ipsec-udp-encaps-06 */
+#define UDP_ENCAP_L2TPINUDP    3       /* rfc2661 */
+
+#define SOL_UDP            17      /* sockopt level for UDP */
+
+#endif /* netinet/udp.h */
diff --git a/lib/libdss-include/netipx/ipx.h b/lib/libdss-include/netipx/ipx.h
new file mode 100644 (file)
index 0000000..855ab99
--- /dev/null
@@ -0,0 +1,112 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETIPX_IPX_H
+#define __NETIPX_IPX_H 1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+#define SOL_IPX    256          /* sockopt level */
+
+#define IPX_TYPE        1
+#define IPX_NODE_LEN   6
+#define IPX_MTU                576
+
+struct sockaddr_ipx
+  {
+    sa_family_t sipx_family;
+    u_int16_t sipx_port;
+    u_int32_t sipx_network;
+    unsigned char sipx_node[IPX_NODE_LEN];
+    u_int8_t sipx_type;
+    unsigned char sipx_zero;   /* 16 byte fill */
+  };
+
+/*
+ *     So we can fit the extra info for SIOCSIFADDR into the address nicely
+ */
+
+#define sipx_special   sipx_port
+#define sipx_action    sipx_zero
+#define IPX_DLTITF     0
+#define IPX_CRTITF     1
+
+typedef struct ipx_route_definition
+  {
+    unsigned long ipx_network;
+    unsigned long ipx_router_network;
+    unsigned char ipx_router_node[IPX_NODE_LEN];
+  }
+ipx_route_definition;
+
+typedef struct ipx_interface_definition
+  {
+    unsigned long ipx_network;
+    unsigned char ipx_device[16];
+    unsigned char ipx_dlink_type;
+#define IPX_FRAME_NONE         0
+#define IPX_FRAME_SNAP         1
+#define IPX_FRAME_8022         2
+#define IPX_FRAME_ETHERII      3
+#define IPX_FRAME_8023         4
+#define IPX_FRAME_TR_8022      5
+    unsigned char ipx_special;
+#define IPX_SPECIAL_NONE       0
+#define IPX_PRIMARY            1
+#define IPX_INTERNAL           2
+    unsigned char ipx_node[IPX_NODE_LEN];
+  }
+ipx_interface_definition;
+
+typedef struct ipx_config_data
+  {
+    unsigned char ipxcfg_auto_select_primary;
+    unsigned char ipxcfg_auto_create_interfaces;
+  }
+ipx_config_data;
+
+/*
+ * OLD Route Definition for backward compatibility.
+ */
+
+struct ipx_route_def
+  {
+    unsigned long ipx_network;
+    unsigned long ipx_router_network;
+#define IPX_ROUTE_NO_ROUTER    0
+    unsigned char ipx_router_node[IPX_NODE_LEN];
+    unsigned char ipx_device[16];
+    unsigned short ipx_flags;
+#define IPX_RT_SNAP            8
+#define IPX_RT_8022            4
+#define IPX_RT_BLUEBOOK                2
+#define IPX_RT_ROUTED          1
+  };
+
+#define SIOCAIPXITFCRT         (SIOCPROTOPRIVATE)
+#define SIOCAIPXPRISLT         (SIOCPROTOPRIVATE + 1)
+#define SIOCIPXCFGDATA         (SIOCPROTOPRIVATE + 2)
+#define SIOCIPXNCPCONN         (SIOCPROTOPRIVATE + 3)
+
+__END_DECLS
+
+#endif /* netipx/ipx.h */
diff --git a/lib/libdss-include/netiucv/iucv.h b/lib/libdss-include/netiucv/iucv.h
new file mode 100644 (file)
index 0000000..13cfe98
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETIUCV_IUCV_H
+#define __NETIUCV_IUCV_H       1
+
+#include <features.h>
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+struct sockaddr_iucv
+  {
+    __SOCKADDR_COMMON (siucv_);
+    unsigned short     siucv_port;             /* Reserved */
+    unsigned int       siucv_addr;             /* Reserved */
+    char               siucv_nodeid[8];        /* Reserved */
+    char               siucv_user_id[8];       /* Guest User Id */
+    char               siucv_name[8];          /* Application Name */
+  };
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/netpacket/packet.h b/lib/libdss-include/netpacket/packet.h
new file mode 100644 (file)
index 0000000..52b67df
--- /dev/null
@@ -0,0 +1,80 @@
+/* Definitions for use with Linux AF_PACKET sockets.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __NETPACKET_PACKET_H
+#define __NETPACKET_PACKET_H   1
+
+struct sockaddr_ll
+  {
+    unsigned short int sll_family;
+    unsigned short int sll_protocol;
+    int sll_ifindex;
+    unsigned short int sll_hatype;
+    unsigned char sll_pkttype;
+    unsigned char sll_halen;
+    unsigned char sll_addr[8];
+  };
+
+/* Packet types.  */
+
+#define PACKET_HOST            0               /* To us.  */
+#define PACKET_BROADCAST       1               /* To all.  */
+#define PACKET_MULTICAST       2               /* To group.  */
+#define PACKET_OTHERHOST       3               /* To someone else.  */
+#define PACKET_OUTGOING                4               /* Originated by us . */
+#define PACKET_LOOPBACK                5
+#define PACKET_FASTROUTE       6
+
+/* Packet socket options.  */
+
+#define PACKET_ADD_MEMBERSHIP          1
+#define PACKET_DROP_MEMBERSHIP         2
+#define        PACKET_RECV_OUTPUT              3
+#define        PACKET_RX_RING                  5
+#define        PACKET_STATISTICS               6
+#define        PACKET_COPY_THRESH              7
+#define        PACKET_AUXDATA                  8
+#define        PACKET_ORIGDEV                  9
+#define        PACKET_VERSION                  10
+#define        PACKET_HDRLEN                   11
+#define        PACKET_RESERVE                  12
+#define        PACKET_TX_RING                  13
+#define        PACKET_LOSS                     14
+#define        PACKET_VNET_HDR                 15
+#define        PACKET_TX_TIMESTAMP             16
+#define        PACKET_TIMESTAMP                17
+#define        PACKET_FANOUT                   18
+#define        PACKET_TX_HAS_OFF               19
+#define        PACKET_QDISC_BYPASS             20
+#define        PACKET_ROLLOVER_STATS           21
+#define        PACKET_FANOUT_DATA              22
+
+struct packet_mreq
+  {
+    int mr_ifindex;
+    unsigned short int mr_type;
+    unsigned short int mr_alen;
+    unsigned char mr_address[8];
+  };
+
+#define PACKET_MR_MULTICAST    0
+#define PACKET_MR_PROMISC      1
+#define PACKET_MR_ALLMULTI     2
+#define PACKET_MR_UNICAST      3
+
+#endif /* netpacket/packet.h */
diff --git a/lib/libdss-include/netrom/netrom.h b/lib/libdss-include/netrom/netrom.h
new file mode 100644 (file)
index 0000000..4d544ad
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NETROM_NETROM_H
+#define _NETROM_NETROM_H       1
+
+#include <netax25/ax25.h>
+
+/* Setsockoptions(2) level.  Thanks to BSD these must match IPPROTO_xxx.  */
+#define SOL_NETROM     259
+
+/* NetRom control values: */
+#define NETROM_T1      1
+#define NETROM_T2      2
+#define NETROM_N2      3
+#define NETROM_PACLEN  5
+#define        NETROM_T4       6
+#define NETROM_IDLE    7
+
+#define NETROM_KILL    99
+
+/* Type of route: */
+#define NETROM_NEIGH    0
+#define NETROM_NODE     1
+
+struct nr_route_struct
+  {
+    int type;
+    ax25_address callsign;
+    char device[16];
+    unsigned int quality;
+    char mnemonic[7];
+    ax25_address neighbour;
+    unsigned int obs_count;
+    unsigned int ndigis;
+    ax25_address digipeaters[AX25_MAX_DIGIS];
+  };
+
+/* NetRom socket ioctls: */
+#define        SIOCNRGETPARMS          (SIOCPROTOPRIVATE+0)
+#define        SIOCNRSETPARMS          (SIOCPROTOPRIVATE+1)
+#define        SIOCNRDECOBS            (SIOCPROTOPRIVATE+2)
+#define        SIOCNRRTCTL             (SIOCPROTOPRIVATE+3)
+#define        SIOCNRCTLCON            (SIOCPROTOPRIVATE+4)
+
+/* NetRom parameter structure: */
+struct nr_parms_struct
+  {
+    unsigned int quality;
+    unsigned int obs_count;
+    unsigned int ttl;
+    unsigned int timeout;
+    unsigned int ack_delay;
+    unsigned int busy_delay;
+    unsigned int tries;
+    unsigned int window;
+    unsigned int paclen;
+  };
+
+/* NetRom control structure: */
+struct nr_ctl_struct
+  {
+    unsigned char index;
+    unsigned char id;
+    unsigned int cmd;
+    unsigned long arg;
+  };
+
+#endif /* netrom/netrom.h */
diff --git a/lib/libdss-include/netrose/rose.h b/lib/libdss-include/netrose/rose.h
new file mode 100644 (file)
index 0000000..3cb7f84
--- /dev/null
@@ -0,0 +1,115 @@
+/* Definitions for Rose packet radio address family.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* What follows is copied from the 2.1.93 <linux/rose.h>.  */
+
+#ifndef _NETROSE_ROSE_H
+#define _NETROSE_ROSE_H 1
+
+/* Socket level values.  */
+#define SOL_ROSE        260
+
+
+/* These are the public elements of the Linux kernel Rose
+   implementation.  For kernel AX.25 see the file ax25.h. This file
+   requires ax25.h for the definition of the ax25_address structure.  */
+#define ROSE_MTU       251
+
+#define ROSE_MAX_DIGIS 6
+
+#define        ROSE_DEFER      1
+#define        ROSE_T1         2
+#define        ROSE_T2         3
+#define        ROSE_T3         4
+#define        ROSE_IDLE       5
+#define        ROSE_QBITINCL   6
+#define        ROSE_HOLDBACK   7
+
+#define        SIOCRSGCAUSE            (SIOCPROTOPRIVATE + 0)
+#define        SIOCRSSCAUSE            (SIOCPROTOPRIVATE + 1)
+#define        SIOCRSL2CALL            (SIOCPROTOPRIVATE + 2)
+#define        SIOCRSSL2CALL           (SIOCPROTOPRIVATE + 2)
+#define        SIOCRSACCEPT            (SIOCPROTOPRIVATE + 3)
+#define        SIOCRSCLRRT             (SIOCPROTOPRIVATE + 4)
+#define        SIOCRSGL2CALL           (SIOCPROTOPRIVATE + 5)
+#define        SIOCRSGFACILITIES       (SIOCPROTOPRIVATE + 6)
+
+#define        ROSE_DTE_ORIGINATED     0x00
+#define        ROSE_NUMBER_BUSY        0x01
+#define        ROSE_INVALID_FACILITY   0x03
+#define        ROSE_NETWORK_CONGESTION 0x05
+#define        ROSE_OUT_OF_ORDER       0x09
+#define        ROSE_ACCESS_BARRED      0x0B
+#define        ROSE_NOT_OBTAINABLE     0x0D
+#define        ROSE_REMOTE_PROCEDURE   0x11
+#define        ROSE_LOCAL_PROCEDURE    0x13
+#define        ROSE_SHIP_ABSENT        0x39
+
+
+typedef struct
+{
+  char rose_addr[5];
+} rose_address;
+
+struct sockaddr_rose
+{
+  sa_family_t srose_family;
+  rose_address srose_addr;
+  ax25_address srose_call;
+  int srose_ndigis;
+  ax25_address srose_digi;
+};
+
+struct full_sockaddr_rose
+{
+  sa_family_t srose_family;
+  rose_address srose_addr;
+  ax25_address srose_call;
+  unsigned int srose_ndigis;
+  ax25_address srose_digis[ROSE_MAX_DIGIS];
+};
+
+struct rose_route_struct
+{
+  rose_address address;
+  unsigned short int mask;
+  ax25_address neighbour;
+  char device[16];
+  unsigned char        ndigis;
+  ax25_address digipeaters[AX25_MAX_DIGIS];
+};
+
+struct rose_cause_struct
+{
+  unsigned char        cause;
+  unsigned char        diagnostic;
+};
+
+struct rose_facilities_struct
+{
+  rose_address source_addr,   dest_addr;
+  ax25_address source_call,   dest_call;
+  unsigned char source_ndigis, dest_ndigis;
+  ax25_address source_digis[ROSE_MAX_DIGIS];
+  ax25_address dest_digis[ROSE_MAX_DIGIS];
+  unsigned int rand;
+  rose_address fail_addr;
+  ax25_address fail_call;
+};
+
+#endif /* netrose/rose.h */
diff --git a/lib/libdss-include/nfs/nfs.h b/lib/libdss-include/nfs/nfs.h
new file mode 100644 (file)
index 0000000..61e4b65
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/nfs.h>
diff --git a/lib/libdss-include/nl_types.h b/lib/libdss-include/nl_types.h
new file mode 100644 (file)
index 0000000..202603f
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NL_TYPES_H
+#define _NL_TYPES_H 1
+
+#include <features.h>
+
+/* The default message set used by the gencat program.  */
+#define NL_SETD 1
+
+/* Value for FLAG parameter of `catgets' to say we want XPG4 compliance.  */
+#define NL_CAT_LOCALE 1
+
+
+__BEGIN_DECLS
+
+/* Message catalog descriptor type.  */
+typedef void *nl_catd;
+
+/* Type used by `nl_langinfo'.  */
+typedef int nl_item;
+
+/* Open message catalog for later use, returning descriptor.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern nl_catd catopen (const char *__cat_name, int __flag) __nonnull ((1));
+
+/* Return translation with NUMBER in SET of CATALOG; if not found
+   return STRING.  */
+extern char *catgets (nl_catd __catalog, int __set, int __number,
+                     const char *__string) __THROW __nonnull ((1));
+
+/* Close message CATALOG.  */
+extern int catclose (nl_catd __catalog) __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* nl_types.h  */
diff --git a/lib/libdss-include/nss.h b/lib/libdss-include/nss.h
new file mode 100644 (file)
index 0000000..e0681b2
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define interface to NSS.  This is meant for the interface functions
+   and for implementors of new services.  */
+
+#ifndef _NSS_H
+#define _NSS_H 1
+
+#include <features.h>
+#include <stdint.h>
+
+
+__BEGIN_DECLS
+
+/* Possible results of lookup using a nss_* function.  */
+enum nss_status
+{
+  NSS_STATUS_TRYAGAIN = -2,
+  NSS_STATUS_UNAVAIL,
+  NSS_STATUS_NOTFOUND,
+  NSS_STATUS_SUCCESS,
+  NSS_STATUS_RETURN
+};
+
+
+/* Data structure used for the 'gethostbyname4_r' function.  */
+struct gaih_addrtuple
+  {
+    struct gaih_addrtuple *next;
+    char *name;
+    int family;
+    uint32_t addr[4];
+    uint32_t scopeid;
+  };
+
+
+/* Overwrite service selection for database DBNAME using specification
+   in STRING.
+   This function should only be used by system programs which have to
+   work around non-existing services (e.e., while booting).
+   Attention: Using this function repeatedly will slowly eat up the
+   whole memory since previous selection data cannot be freed.  */
+extern int __nss_configure_lookup (const char *__dbname,
+                                  const char *__string) __THROW;
+
+__END_DECLS
+
+#endif /* nss.h */
diff --git a/lib/libdss-include/obstack.h b/lib/libdss-include/obstack.h
new file mode 100644 (file)
index 0000000..5716202
--- /dev/null
@@ -0,0 +1,515 @@
+/* obstack.h - object stack macros
+   Copyright (C) 1988-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Summary:
+
+   All the apparent functions defined here are macros. The idea
+   is that you would use these pre-tested macros to solve a
+   very specific set of problems, and they would run fast.
+   Caution: no side-effects in arguments please!! They may be
+   evaluated MANY times!!
+
+   These macros operate a stack of objects.  Each object starts life
+   small, and may grow to maturity.  (Consider building a word syllable
+   by syllable.)  An object can move while it is growing.  Once it has
+   been "finished" it never changes address again.  So the "top of the
+   stack" is typically an immature growing object, while the rest of the
+   stack is of mature, fixed size and fixed address objects.
+
+   These routines grab large chunks of memory, using a function you
+   supply, called 'obstack_chunk_alloc'.  On occasion, they free chunks,
+   by calling 'obstack_chunk_free'.  You must define them and declare
+   them before using any obstack macros.
+
+   Each independent stack is represented by a 'struct obstack'.
+   Each of the obstack macros expects a pointer to such a structure
+   as the first argument.
+
+   One motivation for this package is the problem of growing char strings
+   in symbol tables.  Unless you are "fascist pig with a read-only mind"
+   --Gosper's immortal quote from HAKMEM item 154, out of context--you
+   would not like to put any arbitrary upper limit on the length of your
+   symbols.
+
+   In practice this often means you will build many short symbols and a
+   few long symbols.  At the time you are reading a symbol you don't know
+   how long it is.  One traditional method is to read a symbol into a
+   buffer, realloc()ating the buffer every time you try to read a symbol
+   that is longer than the buffer.  This is beaut, but you still will
+   want to copy the symbol from the buffer to a more permanent
+   symbol-table entry say about half the time.
+
+   With obstacks, you can work differently.  Use one obstack for all symbol
+   names.  As you read a symbol, grow the name in the obstack gradually.
+   When the name is complete, finalize it.  Then, if the symbol exists already,
+   free the newly read name.
+
+   The way we do this is to take a large chunk, allocating memory from
+   low addresses.  When you want to build a symbol in the chunk you just
+   add chars above the current "high water mark" in the chunk.  When you
+   have finished adding chars, because you got to the end of the symbol,
+   you know how long the chars are, and you can create a new object.
+   Mostly the chars will not burst over the highest address of the chunk,
+   because you would typically expect a chunk to be (say) 100 times as
+   long as an average object.
+
+   In case that isn't clear, when we have enough chars to make up
+   the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+   so we just point to it where it lies.  No moving of chars is
+   needed and this is the second win: potentially long strings need
+   never be explicitly shuffled. Once an object is formed, it does not
+   change its address during its lifetime.
+
+   When the chars burst over a chunk boundary, we allocate a larger
+   chunk, and then copy the partly formed object from the end of the old
+   chunk to the beginning of the new larger chunk.  We then carry on
+   accreting characters to the end of the object as we normally would.
+
+   A special macro is provided to add a single char at a time to a
+   growing object.  This allows the use of register variables, which
+   break the ordinary 'growth' macro.
+
+   Summary:
+       We allocate large chunks.
+       We carve out one object at a time from the current chunk.
+       Once carved, an object never moves.
+       We are free to append data of any size to the currently
+         growing object.
+       Exactly one object is growing in an obstack at any one time.
+       You can run one obstack per control block.
+       You may have as many control blocks as you dare.
+       Because of the way we do it, you can "unwind" an obstack
+         back to a previous state. (You may remove objects much
+         as you would with a stack.)
+ */
+
+
+/* Don't do the contents of this file more than once.  */
+
+#ifndef _OBSTACK_H
+#define _OBSTACK_H 1
+
+/* We need the type of a pointer subtraction.  If __PTRDIFF_TYPE__ is
+   defined, as with GNU C, use that; that way we don't pollute the
+   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
+   and use ptrdiff_t.  */
+
+#ifdef __PTRDIFF_TYPE__
+# define PTR_INT_TYPE __PTRDIFF_TYPE__
+#else
+# include <stddef.h>
+# define PTR_INT_TYPE ptrdiff_t
+#endif
+
+/* If B is the base of an object addressed by P, return the result of
+   aligning P to the next multiple of A + 1.  B and P must be of type
+   char *.  A + 1 must be a power of 2.  */
+
+#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
+
+/* Similar to _BPTR_ALIGN (B, P, A), except optimize the common case
+   where pointers can be converted to integers, aligned as integers,
+   and converted back again.  If PTR_INT_TYPE is narrower than a
+   pointer (e.g., the AS/400), play it safe and compute the alignment
+   relative to B.  Otherwise, use the faster strategy of computing the
+   alignment relative to 0.  */
+
+#define __PTR_ALIGN(B, P, A)                                                 \
+  __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
+               P, A)
+
+#include <string.h>
+
+#ifndef __attribute_pure__
+# define __attribute_pure__ _GL_ATTRIBUTE_PURE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _obstack_chunk           /* Lives at front of each chunk. */
+{
+  char *limit;                  /* 1 past end of this chunk */
+  struct _obstack_chunk *prev;  /* address of prior chunk or NULL */
+  char contents[4];             /* objects begin here */
+};
+
+struct obstack          /* control current object in current chunk */
+{
+  long chunk_size;              /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
+  char *object_base;            /* address of object we are building */
+  char *next_free;              /* where to add next char to current object */
+  char *chunk_limit;            /* address of char after current chunk */
+  union
+  {
+    PTR_INT_TYPE tempint;
+    void *tempptr;
+  } temp;                       /* Temporary for some macros.  */
+  int alignment_mask;           /* Mask of alignment for each object. */
+  /* These prototypes vary based on 'use_extra_arg', and we use
+     casts to the prototypeless function type in all assignments,
+     but having prototypes here quiets -Wstrict-prototypes.  */
+  struct _obstack_chunk *(*chunkfun) (void *, long);
+  void (*freefun) (void *, struct _obstack_chunk *);
+  void *extra_arg;              /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg : 1;     /* chunk alloc/dealloc funcs take extra arg */
+  unsigned maybe_empty_object : 1; /* There is a possibility that the current
+                                     chunk contains a zero-length object.  This
+                                     prevents freeing the chunk if we allocate
+                                     a bigger chunk to replace it. */
+  unsigned alloc_failed : 1;      /* No longer used, as we now call the failed
+                                    handler on error, but retained for binary
+                                    compatibility.  */
+};
+
+/* Declare the external functions we use; they are in obstack.c.  */
+
+extern void _obstack_newchunk (struct obstack *, int);
+extern int _obstack_begin (struct obstack *, int, int,
+                          void *(*)(long), void (*)(void *));
+extern int _obstack_begin_1 (struct obstack *, int, int,
+                            void *(*)(void *, long),
+                            void (*)(void *, void *), void *);
+extern int _obstack_memory_used (struct obstack *) __attribute_pure__;
+
+/* The default name of the function for freeing a chunk is 'obstack_free',
+   but gnulib users can override this by defining '__obstack_free'.  */
+#ifndef __obstack_free
+# define __obstack_free obstack_free
+#endif
+extern void __obstack_free (struct obstack *, void *);
+
+
+/* Error handler called when 'obstack_chunk_alloc' failed to allocate
+   more memory.  This can be set to a user defined function which
+   should either abort gracefully or use longjump - but shouldn't
+   return.  The default action is to print a message and abort.  */
+extern void (*obstack_alloc_failed_handler) (void);
+
+/* Exit value used when 'print_and_abort' is used.  */
+extern int obstack_exit_failure;
+
+/* Pointer to beginning of object being allocated or to be allocated next.
+   Note that this might not be the final address of the object
+   because a new chunk might be needed to hold the final size.  */
+
+#define obstack_base(h) ((void *) (h)->object_base)
+
+/* Size for allocating ordinary chunks.  */
+
+#define obstack_chunk_size(h) ((h)->chunk_size)
+
+/* Pointer to next byte not yet allocated in current chunk.  */
+
+#define obstack_next_free(h)    ((h)->next_free)
+
+/* Mask specifying low bits that should be clear in address of an object.  */
+
+#define obstack_alignment_mask(h) ((h)->alignment_mask)
+
+/* To prevent prototype warnings provide complete argument list.  */
+#define obstack_init(h)                                                              \
+  _obstack_begin ((h), 0, 0,                                                 \
+                 (void *(*)(long))obstack_chunk_alloc,                       \
+                 (void (*)(void *))obstack_chunk_free)
+
+#define obstack_begin(h, size)                                               \
+  _obstack_begin ((h), (size), 0,                                            \
+                 (void *(*)(long))obstack_chunk_alloc,                       \
+                 (void (*)(void *))obstack_chunk_free)
+
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
+  _obstack_begin ((h), (size), (alignment),                                  \
+                 (void *(*)(long))(chunkfun),                                \
+                 (void (*)(void *))(freefun))
+
+#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+  _obstack_begin_1 ((h), (size), (alignment),                                \
+                   (void *(*)(void *, long))(chunkfun),                      \
+                   (void (*)(void *, void *))(freefun), (arg))
+
+#define obstack_chunkfun(h, newchunkfun) \
+  ((h)->chunkfun = (struct _obstack_chunk *(*)(void *, long))(newchunkfun))
+
+#define obstack_freefun(h, newfreefun) \
+  ((h)->freefun = (void (*)(void *, struct _obstack_chunk *))(newfreefun))
+
+#define obstack_1grow_fast(h, achar) (*((h)->next_free)++ = (achar))
+
+#define obstack_blank_fast(h, n) ((h)->next_free += (n))
+
+#define obstack_memory_used(h) _obstack_memory_used (h)
+
+#if defined __GNUC__
+# if ! (2 < __GNUC__ + (8 <= __GNUC_MINOR__))
+#  define __extension__
+# endif
+
+/* For GNU C, if not -traditional,
+   we can define these macros to compute all args only once
+   without using a global variable.
+   Also, we can avoid using the 'temp' slot, to make faster code.  */
+
+# define obstack_object_size(OBSTACK)                                        \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (unsigned) (__o->next_free - __o->object_base); })
+
+# define obstack_room(OBSTACK)                                               \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (unsigned) (__o->chunk_limit - __o->next_free); })
+
+# define obstack_make_room(OBSTACK, length)                                  \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->chunk_limit - __o->next_free < __len)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       (void) 0; })
+
+# define obstack_empty_p(OBSTACK)                                            \
+  __extension__                                                                      \
+    ({ struct obstack const *__o = (OBSTACK);                                \
+       (__o->chunk->prev == 0                                                \
+       && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,                \
+                                         __o->chunk->contents,               \
+                                         __o->alignment_mask)); })
+
+# define obstack_grow(OBSTACK, where, length)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->next_free + __len > __o->chunk_limit)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       memcpy (__o->next_free, where, __len);                                \
+       __o->next_free += __len;                                                      \
+       (void) 0; })
+
+# define obstack_grow0(OBSTACK, where, length)                               \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->next_free + __len + 1 > __o->chunk_limit)                    \
+        _obstack_newchunk (__o, __len + 1);                                  \
+       memcpy (__o->next_free, where, __len);                                \
+       __o->next_free += __len;                                                      \
+       *(__o->next_free)++ = 0;                                                      \
+       (void) 0; })
+
+# define obstack_1grow(OBSTACK, datum)                                       \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + 1 > __o->chunk_limit)                            \
+        _obstack_newchunk (__o, 1);                                          \
+       obstack_1grow_fast (__o, datum);                                              \
+       (void) 0; })
+
+/* These assume that the obstack alignment is good enough for pointers
+   or ints, and that the data added so far to the current object
+   shares that much alignment.  */
+
+# define obstack_ptr_grow(OBSTACK, datum)                                    \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + sizeof (void *) > __o->chunk_limit)                      \
+        _obstack_newchunk (__o, sizeof (void *));                            \
+       obstack_ptr_grow_fast (__o, datum); })                                \
+
+# define obstack_int_grow(OBSTACK, datum)                                    \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       if (__o->next_free + sizeof (int) > __o->chunk_limit)                 \
+        _obstack_newchunk (__o, sizeof (int));                               \
+       obstack_int_grow_fast (__o, datum); })
+
+# define obstack_ptr_grow_fast(OBSTACK, aptr)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__p1 = __o1->next_free;                                         \
+       *(const void **) __p1 = (aptr);                                       \
+       __o1->next_free += sizeof (const void *);                             \
+       (void) 0; })
+
+# define obstack_int_grow_fast(OBSTACK, aint)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__p1 = __o1->next_free;                                         \
+       *(int *) __p1 = (aint);                                               \
+       __o1->next_free += sizeof (int);                                              \
+       (void) 0; })
+
+# define obstack_blank(OBSTACK, length)                                              \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       int __len = (length);                                                 \
+       if (__o->chunk_limit - __o->next_free < __len)                        \
+        _obstack_newchunk (__o, __len);                                      \
+       obstack_blank_fast (__o, __len);                                              \
+       (void) 0; })
+
+# define obstack_alloc(OBSTACK, length)                                              \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_blank (__h, (length));                                        \
+       obstack_finish (__h); })
+
+# define obstack_copy(OBSTACK, where, length)                                \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_grow (__h, (where), (length));                                \
+       obstack_finish (__h); })
+
+# define obstack_copy0(OBSTACK, where, length)                               \
+  __extension__                                                                      \
+    ({ struct obstack *__h = (OBSTACK);                                              \
+       obstack_grow0 (__h, (where), (length));                               \
+       obstack_finish (__h); })
+
+/* The local variable is named __o1 to avoid a name conflict
+   when obstack_blank is called.  */
+# define obstack_finish(OBSTACK)                                             \
+  __extension__                                                                      \
+    ({ struct obstack *__o1 = (OBSTACK);                                     \
+       void *__value = (void *) __o1->object_base;                           \
+       if (__o1->next_free == __value)                                       \
+        __o1->maybe_empty_object = 1;                                        \
+       __o1->next_free                                                       \
+        = __PTR_ALIGN (__o1->object_base, __o1->next_free,                   \
+                       __o1->alignment_mask);                                \
+       if (__o1->next_free - (char *) __o1->chunk                            \
+          > __o1->chunk_limit - (char *) __o1->chunk)                        \
+        __o1->next_free = __o1->chunk_limit;                                 \
+       __o1->object_base = __o1->next_free;                                  \
+       __value; })
+
+# define obstack_free(OBSTACK, OBJ)                                          \
+  __extension__                                                                      \
+    ({ struct obstack *__o = (OBSTACK);                                              \
+       void *__obj = (OBJ);                                                  \
+       if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit)  \
+        __o->next_free = __o->object_base = (char *) __obj;                  \
+       else (__obstack_free) (__o, __obj); })
+
+#else /* not __GNUC__ */
+
+# define obstack_object_size(h) \
+  (unsigned) ((h)->next_free - (h)->object_base)
+
+# define obstack_room(h)                                                     \
+  (unsigned) ((h)->chunk_limit - (h)->next_free)
+
+# define obstack_empty_p(h) \
+  ((h)->chunk->prev == 0                                                     \
+   && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,                    \
+                                    (h)->chunk->contents,                    \
+                                    (h)->alignment_mask))
+
+/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
+   so that we can avoid having void expressions
+   in the arms of the conditional expression.
+   Casting the third operand to void was tried before,
+   but some compilers won't accept it.  */
+
+# define obstack_make_room(h, length)                                        \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
+
+# define obstack_grow(h, where, length)                                              \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),                   \
+   memcpy ((h)->next_free, where, (h)->temp.tempint),                        \
+   (h)->next_free += (h)->temp.tempint)
+
+# define obstack_grow0(h, where, length)                                     \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)                      \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),               \
+   memcpy ((h)->next_free, where, (h)->temp.tempint),                        \
+   (h)->next_free += (h)->temp.tempint,                                              \
+   *((h)->next_free)++ = 0)
+
+# define obstack_1grow(h, datum)                                             \
+  ((((h)->next_free + 1 > (h)->chunk_limit)                                  \
+    ? (_obstack_newchunk ((h), 1), 0) : 0),                                  \
+   obstack_1grow_fast (h, datum))
+
+# define obstack_ptr_grow(h, datum)                                          \
+  ((((h)->next_free + sizeof (char *) > (h)->chunk_limit)                    \
+    ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),                    \
+   obstack_ptr_grow_fast (h, datum))
+
+# define obstack_int_grow(h, datum)                                          \
+  ((((h)->next_free + sizeof (int) > (h)->chunk_limit)                       \
+    ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                       \
+   obstack_int_grow_fast (h, datum))
+
+# define obstack_ptr_grow_fast(h, aptr)                                              \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+
+# define obstack_int_grow_fast(h, aint)                                              \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
+
+# define obstack_blank(h, length)                                            \
+  ((h)->temp.tempint = (length),                                             \
+   (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)                  \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),                   \
+   obstack_blank_fast (h, (h)->temp.tempint))
+
+# define obstack_alloc(h, length)                                            \
+  (obstack_blank ((h), (length)), obstack_finish ((h)))
+
+# define obstack_copy(h, where, length)                                              \
+  (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_copy0(h, where, length)                                     \
+  (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_finish(h)                                                   \
+  (((h)->next_free == (h)->object_base                                       \
+    ? (((h)->maybe_empty_object = 1), 0)                                     \
+    : 0),                                                                    \
+   (h)->temp.tempptr = (h)->object_base,                                     \
+   (h)->next_free                                                            \
+     = __PTR_ALIGN ((h)->object_base, (h)->next_free,                        \
+                   (h)->alignment_mask),                                     \
+   (((h)->next_free - (char *) (h)->chunk                                    \
+     > (h)->chunk_limit - (char *) (h)->chunk)                               \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),                               \
+   (h)->object_base = (h)->next_free,                                        \
+   (h)->temp.tempptr)
+
+# define obstack_free(h, obj)                                                \
+  ((h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,                 \
+   ((((h)->temp.tempint > 0                                                  \
+      && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))        \
+    ? (void) ((h)->next_free = (h)->object_base                                      \
+             = (h)->temp.tempint + (char *) (h)->chunk)                      \
+    : (__obstack_free) (h, (h)->temp.tempint + (char *) (h)->chunk)))
+
+#endif /* not __GNUC__ */
+
+#ifdef __cplusplus
+}       /* C++ */
+#endif
+
+#endif /* obstack.h */
diff --git a/lib/libdss-include/paths.h b/lib/libdss-include/paths.h
new file mode 100644 (file)
index 0000000..c764e20
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)paths.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PATHS_H_
+#define        _PATHS_H_
+
+/* Default search path. */
+#define        _PATH_DEFPATH   "/usr/bin:/bin"
+/* All standard utilities path. */
+#define        _PATH_STDPATH \
+       "/usr/bin:/bin:/usr/sbin:/sbin"
+
+#define        _PATH_BSHELL    "/bin/sh"
+#define        _PATH_CONSOLE   "/dev/console"
+#define        _PATH_CSHELL    "/bin/csh"
+#define        _PATH_DEVDB     "/var/run/dev.db"
+#define        _PATH_DEVNULL   "/dev/null"
+#define        _PATH_DRUM      "/dev/drum"
+#define        _PATH_GSHADOW   "/etc/gshadow"
+#define        _PATH_KLOG      "/proc/kmsg"
+#define        _PATH_KMEM      "/dev/kmem"
+#define        _PATH_LASTLOG   "/var/log/lastlog"
+#define        _PATH_MAILDIR   "/var/mail"
+#define        _PATH_MAN       "/usr/share/man"
+#define        _PATH_MEM       "/dev/mem"
+#define        _PATH_MNTTAB    "/etc/fstab"
+#define        _PATH_MOUNTED   "/etc/mtab"
+#define        _PATH_NOLOGIN   "/etc/nologin"
+#define        _PATH_PRESERVE  "/var/lib"
+#define        _PATH_RWHODIR   "/var/spool/rwho"
+#define        _PATH_SENDMAIL  "/usr/sbin/sendmail"
+#define        _PATH_SHADOW    "/etc/shadow"
+#define        _PATH_SHELLS    "/etc/shells"
+#define        _PATH_TTY       "/dev/tty"
+#define        _PATH_UNIX      "/boot/vmlinux"
+#define        _PATH_UTMP      "/var/run/utmp"
+#define        _PATH_VI        "/usr/bin/vi"
+#define        _PATH_WTMP      "/var/log/wtmp"
+
+/* Provide trailing slash, since mostly used for building pathnames. */
+#define        _PATH_DEV       "/dev/"
+#define        _PATH_TMP       "/tmp/"
+#define        _PATH_VARDB     "/var/lib/misc/"
+#define        _PATH_VARRUN    "/var/run/"
+#define        _PATH_VARTMP    "/var/tmp/"
+
+#endif /* !_PATHS_H_ */
diff --git a/lib/libdss-include/poll.h b/lib/libdss-include/poll.h
new file mode 100644 (file)
index 0000000..06fb41a
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/poll.h>
diff --git a/lib/libdss-include/printf.h b/lib/libdss-include/printf.h
new file mode 100644 (file)
index 0000000..d731216
--- /dev/null
@@ -0,0 +1,188 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _PRINTF_H
+
+#define        _PRINTF_H       1
+#include <features.h>
+
+__BEGIN_DECLS
+
+#define        __need_FILE
+#include <stdio.h>
+#define        __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+#include <stdarg.h>
+
+
+struct printf_info
+{
+  int prec;                    /* Precision.  */
+  int width;                   /* Width.  */
+  wchar_t spec;                        /* Format letter.  */
+  unsigned int is_long_double:1;/* L flag.  */
+  unsigned int is_short:1;     /* h flag.  */
+  unsigned int is_long:1;      /* l flag.  */
+  unsigned int alt:1;          /* # flag.  */
+  unsigned int space:1;                /* Space flag.  */
+  unsigned int left:1;         /* - flag.  */
+  unsigned int showsign:1;     /* + flag.  */
+  unsigned int group:1;                /* ' flag.  */
+  unsigned int extra:1;                /* For special use.  */
+  unsigned int is_char:1;      /* hh flag.  */
+  unsigned int wide:1;         /* Nonzero for wide character streams.  */
+  unsigned int i18n:1;         /* I flag.  */
+  unsigned int __pad:4;                /* Unused so far.  */
+  unsigned short int user;     /* Bits for user-installed modifiers.  */
+  wchar_t pad;                 /* Padding character.  */
+};
+
+
+/* Type of a printf specifier-handler function.
+   STREAM is the FILE on which to write output.
+   INFO gives information about the format specification.
+   ARGS is a vector of pointers to the argument data;
+   the number of pointers will be the number returned
+   by the associated arginfo function for the same INFO.
+
+   The function should return the number of characters written,
+   or -1 for errors.  */
+
+typedef int printf_function (FILE *__stream,
+                            const struct printf_info *__info,
+                            const void *const *__args);
+
+/* Type of a printf specifier-arginfo function.
+   INFO gives information about the format specification.
+   N, ARGTYPES, *SIZE has to contain the size of the parameter for
+   user-defined types, and return value are as for parse_printf_format
+   except that -1 should be returned if the handler cannot handle
+   this case.  This allows to partially overwrite the functionality
+   of existing format specifiers.  */
+
+typedef int printf_arginfo_size_function (const struct printf_info *__info,
+                                         size_t __n, int *__argtypes,
+                                         int *__size);
+
+/* Old version of 'printf_arginfo_function' without a SIZE parameter.  */
+
+typedef int printf_arginfo_function (const struct printf_info *__info,
+                                    size_t __n, int *__argtypes);
+
+/* Type of a function to get a value of a user-defined from the
+   variable argument list.  */
+typedef void printf_va_arg_function (void *__mem, va_list *__ap);
+
+
+/* Register FUNC to be called to format SPEC specifiers; ARGINFO must be
+   specified to determine how many arguments a SPEC conversion requires and
+   what their types are.  */
+
+extern int register_printf_specifier (int __spec, printf_function __func,
+                                     printf_arginfo_size_function __arginfo)
+  __THROW;
+
+
+/* Obsolete interface similar to register_printf_specifier.  It can only
+   handle basic data types because the ARGINFO callback does not return
+   information on the size of the user-defined type.  */
+
+extern int register_printf_function (int __spec, printf_function __func,
+                                    printf_arginfo_function __arginfo)
+  __THROW __attribute_deprecated__;
+
+
+/* Register a new modifier character sequence.  If the call succeeds
+   it returns a positive value representing the bit set in the USER
+   field in 'struct printf_info'.  */
+
+extern int register_printf_modifier (const wchar_t *__str) __wur __THROW;
+
+
+/* Register variable argument handler for user type.  The return value
+   is to be used in ARGINFO functions to signal the use of the
+   type.  */
+extern int register_printf_type (printf_va_arg_function __fct) __wur __THROW;
+
+
+/* Parse FMT, and fill in N elements of ARGTYPES with the
+   types needed for the conversions FMT specifies.  Returns
+   the number of arguments required by FMT.
+
+   The ARGINFO function registered with a user-defined format is passed a
+   `struct printf_info' describing the format spec being parsed.  A width
+   or precision of INT_MIN means a `*' was used to indicate that the
+   width/precision will come from an arg.  The function should fill in the
+   array it is passed with the types of the arguments it wants, and return
+   the number of arguments it wants.  */
+
+extern size_t parse_printf_format (const char *__restrict __fmt, size_t __n,
+                                  int *__restrict __argtypes) __THROW;
+
+
+/* Codes returned by `parse_printf_format' for basic types.
+
+   These values cover all the standard format specifications.
+   Users can reserve new values after PA_LAST for their own types
+   using 'register_printf_type'.  */
+
+enum
+{                              /* C type: */
+  PA_INT,                      /* int */
+  PA_CHAR,                     /* int, cast to char */
+  PA_WCHAR,                    /* wide char */
+  PA_STRING,                   /* const char *, a '\0'-terminated string */
+  PA_WSTRING,                  /* const wchar_t *, wide character string */
+  PA_POINTER,                  /* void * */
+  PA_FLOAT,                    /* float */
+  PA_DOUBLE,                   /* double */
+  PA_LAST
+};
+
+/* Flag bits that can be set in a type returned by `parse_printf_format'.  */
+#define        PA_FLAG_MASK            0xff00
+#define        PA_FLAG_LONG_LONG       (1 << 8)
+#define        PA_FLAG_LONG_DOUBLE     PA_FLAG_LONG_LONG
+#define        PA_FLAG_LONG            (1 << 9)
+#define        PA_FLAG_SHORT           (1 << 10)
+#define        PA_FLAG_PTR             (1 << 11)
+
+
+
+/* Function which can be registered as `printf'-handlers.  */
+
+/* Print floating point value using using abbreviations for the orders
+   of magnitude used for numbers ('k' for kilo, 'm' for mega etc).  If
+   the format specifier is a uppercase character powers of 1000 are
+   used.  Otherwise powers of 1024.  */
+extern int printf_size (FILE *__restrict __fp,
+                       const struct printf_info *__info,
+                       const void *const *__restrict __args) __THROW;
+
+/* This is the appropriate argument information function for `printf_size'.  */
+extern int printf_size_info (const struct printf_info *__restrict
+                            __info, size_t __n, int *__restrict __argtypes)
+     __THROW;
+
+#ifdef __LDBL_COMPAT
+# include <bits/printf-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* printf.h  */
diff --git a/lib/libdss-include/protocols/routed.h b/lib/libdss-include/protocols/routed.h
new file mode 100644 (file)
index 0000000..befd865
--- /dev/null
@@ -0,0 +1,101 @@
+/*-
+ * Copyright (c) 1983, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)routed.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_ROUTED_H
+#define        _PROTOCOLS_ROUTED_H 1
+
+#include <sys/socket.h>
+/*
+ * Routing Information Protocol
+ *
+ * Derived from Xerox NS Routing Information Protocol
+ * by changing 32-bit net numbers to sockaddr's and
+ * padding stuff to 32-bit boundaries.
+ */
+#define        RIPVERSION      1
+
+struct netinfo {
+       struct  sockaddr rip_dst;       /* destination net/host */
+       int     rip_metric;             /* cost of route */
+};
+
+struct rip {
+       u_char  rip_cmd;                /* request/response */
+       u_char  rip_vers;               /* protocol version # */
+       u_char  rip_res1[2];            /* pad to 32-bit boundary */
+       union {
+               struct  netinfo ru_nets[1];     /* variable length... */
+               char    ru_tracefile[1];        /* ditto ... */
+       } ripun;
+#define        rip_nets        ripun.ru_nets
+#define        rip_tracefile   ripun.ru_tracefile
+};
+
+/*
+ * Packet types.
+ */
+#define        RIPCMD_REQUEST          1       /* want info */
+#define        RIPCMD_RESPONSE         2       /* responding to request */
+#define        RIPCMD_TRACEON          3       /* turn tracing on */
+#define        RIPCMD_TRACEOFF         4       /* turn it off */
+
+#define        RIPCMD_MAX              5
+#ifdef RIPCMDS
+char *ripcmds[RIPCMD_MAX] =
+  { "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF" };
+#endif
+
+#define        HOPCNT_INFINITY         16      /* per Xerox NS */
+#define        MAXPACKETSIZE           512     /* max broadcast size */
+
+/*
+ * Timer values used in managing the routing table.
+ * Complete tables are broadcast every SUPPLY_INTERVAL seconds.
+ * If changes occur between updates, dynamic updates containing only changes
+ * may be sent.  When these are sent, a timer is set for a random value
+ * between MIN_WAITTIME and MAX_WAITTIME, and no additional dynamic updates
+ * are sent until the timer expires.
+ *
+ * Every update of a routing entry forces an entry's timer to be reset.
+ * After EXPIRE_TIME without updates, the entry is marked invalid,
+ * but held onto until GARBAGE_TIME so that others may
+ * see it "be deleted".
+ */
+#define        TIMER_RATE              30      /* alarm clocks every 30 seconds */
+
+#define        SUPPLY_INTERVAL         30      /* time to supply tables */
+#define        MIN_WAITTIME            2       /* min. interval to broadcast changes */
+#define        MAX_WAITTIME            5       /* max. time to delay changes */
+
+#define        EXPIRE_TIME             180     /* time to mark entry invalid */
+#define        GARBAGE_TIME            240     /* time to garbage collect */
+
+#endif /* protocols/routed.h */
diff --git a/lib/libdss-include/protocols/rwhod.h b/lib/libdss-include/protocols/rwhod.h
new file mode 100644 (file)
index 0000000..446d6f9
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)rwhod.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_RWHOD_H
+#define        _PROTOCOLS_RWHOD_H 1
+
+#include <sys/types.h>
+
+/*
+ * rwho protocol packet format.
+ */
+struct outmp {
+       char    out_line[8];            /* tty name */
+       char    out_name[8];            /* user id */
+       int32_t out_time;               /* time on */
+};
+
+struct whod {
+       char    wd_vers;                /* protocol version # */
+       char    wd_type;                /* packet type, see below */
+       char    wd_pad[2];
+       int     wd_sendtime;            /* time stamp by sender */
+       int     wd_recvtime;            /* time stamp applied by receiver */
+       char    wd_hostname[32];        /* hosts's name */
+       int     wd_loadav[3];           /* load average as in uptime */
+       int     wd_boottime;            /* time system booted */
+       struct  whoent {
+               struct  outmp we_utmp;  /* active tty info */
+               int     we_idle;        /* tty idle time */
+       } wd_we[1024 / sizeof (struct whoent)];
+};
+
+#define        WHODVERSION     1
+#define        WHODTYPE_STATUS 1               /* host status */
+
+/* We used to define _PATH_RWHODIR here but it's now in <paths.h>.  */
+#include <paths.h>
+
+#endif /* protocols/rwhod.h */
diff --git a/lib/libdss-include/protocols/talkd.h b/lib/libdss-include/protocols/talkd.h
new file mode 100644 (file)
index 0000000..a8f33b1
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)talkd.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _PROTOCOLS_TALKD_H
+#define        _PROTOCOLS_TALKD_H 1
+
+/*
+ * This describes the protocol used by the talk server and clients.
+ *
+ * The talk server acts a repository of invitations, responding to
+ * requests by clients wishing to rendezvous for the purpose of
+ * holding a conversation.  In normal operation, a client, the caller,
+ * initiates a rendezvous by sending a CTL_MSG to the server of
+ * type LOOK_UP.  This causes the server to search its invitation
+ * tables to check if an invitation currently exists for the caller
+ * (to speak to the callee specified in the message).  If the lookup
+ * fails, the caller then sends an ANNOUNCE message causing the server
+ * to broadcast an announcement on the callee's login ports requesting
+ * contact.  When the callee responds, the local server uses the
+ * recorded invitation to respond with the appropriate rendezvous
+ * address and the caller and callee client programs establish a
+ * stream connection through which the conversation takes place.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+/*
+ * Client->server request message format.
+ */
+typedef struct {
+       u_char  vers;           /* protocol version */
+       u_char  type;           /* request type, see below */
+       u_char  answer;         /* not used */
+       u_char  pad;
+       u_int32_t id_num;       /* message id */
+       struct  osockaddr addr;         /* old (4.3) style */
+       struct  osockaddr ctl_addr;     /* old (4.3) style */
+       int32_t pid;            /* caller's process id */
+#define        NAME_SIZE       12
+       char    l_name[NAME_SIZE];/* caller's name */
+       char    r_name[NAME_SIZE];/* callee's name */
+#define        TTY_SIZE        16
+       char    r_tty[TTY_SIZE];/* callee's tty name */
+} CTL_MSG;
+
+/*
+ * Server->client response message format.
+ */
+typedef struct {
+       u_char  vers;           /* protocol version */
+       u_char  type;           /* type of request message, see below */
+       u_char  answer;         /* response to request message, see below */
+       u_char  pad;
+       u_int32_t id_num;       /* message id */
+       struct  osockaddr addr; /* address for establishing conversation */
+} CTL_RESPONSE;
+
+#define        TALK_VERSION    1               /* protocol version */
+
+/* message type values */
+#define LEAVE_INVITE   0       /* leave invitation with server */
+#define LOOK_UP                1       /* check for invitation by callee */
+#define DELETE         2       /* delete invitation by caller */
+#define ANNOUNCE       3       /* announce invitation by caller */
+
+/* answer values */
+#define SUCCESS                0       /* operation completed properly */
+#define NOT_HERE       1       /* callee not logged in */
+#define FAILED         2       /* operation failed for unexplained reason */
+#define MACHINE_UNKNOWN        3       /* caller's machine name unknown */
+#define PERMISSION_DENIED 4    /* callee's tty doesn't permit announce */
+#define UNKNOWN_REQUEST        5       /* request has invalid type value */
+#define        BADVERSION      6       /* request has invalid protocol version */
+#define        BADADDR         7       /* request has invalid addr value */
+#define        BADCTLADDR      8       /* request has invalid ctl_addr value */
+
+/*
+ * Operational parameters.
+ */
+#define MAX_LIFE       60      /* max time daemon saves invitations */
+/* RING_WAIT should be 10's of seconds less than MAX_LIFE */
+#define RING_WAIT      30      /* time to wait before resending invitation */
+
+#endif /* protocols/talkd.h */
diff --git a/lib/libdss-include/protocols/timed.h b/lib/libdss-include/protocols/timed.h
new file mode 100644 (file)
index 0000000..b5d4702
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)timed.h     8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _PROTOCOLS_TIMED_H
+#define        _PROTOCOLS_TIMED_H 1
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+/*
+ * Time Synchronization Protocol
+ */
+
+#define        TSPVERSION      1
+#define ANYADDR        NULL
+#define MAXHOSTNAMELEN 64
+
+struct tsp {
+       u_char  tsp_type;
+       u_char  tsp_vers;
+       u_short tsp_seq;
+       union {
+               struct timeval tspu_time;
+               char tspu_hopcnt;
+       } tsp_u;
+       char tsp_name[MAXHOSTNAMELEN];
+};
+
+#define        tsp_time        tsp_u.tspu_time
+#define        tsp_hopcnt      tsp_u.tspu_hopcnt
+
+/*
+ * Command types.
+ */
+#define        TSP_ANY                 0       /* match any types */
+#define        TSP_ADJTIME             1       /* send adjtime */
+#define        TSP_ACK                 2       /* generic acknowledgement */
+#define        TSP_MASTERREQ           3       /* ask for master's name */
+#define        TSP_MASTERACK           4       /* acknowledge master request */
+#define        TSP_SETTIME             5       /* send network time */
+#define        TSP_MASTERUP            6       /* inform slaves that master is up */
+#define        TSP_SLAVEUP             7       /* slave is up but not polled */
+#define        TSP_ELECTION            8       /* advance candidature for master */
+#define        TSP_ACCEPT              9       /* support candidature of master */
+#define        TSP_REFUSE              10      /* reject candidature of master */
+#define        TSP_CONFLICT            11      /* two or more masters present */
+#define        TSP_RESOLVE             12      /* masters' conflict resolution */
+#define        TSP_QUIT                13      /* reject candidature if master is up */
+#define        TSP_DATE                14      /* reset the time (date command) */
+#define        TSP_DATEREQ             15      /* remote request to reset the time */
+#define        TSP_DATEACK             16      /* acknowledge time setting  */
+#define        TSP_TRACEON             17      /* turn tracing on */
+#define        TSP_TRACEOFF            18      /* turn tracing off */
+#define        TSP_MSITE               19      /* find out master's site */
+#define        TSP_MSITEREQ            20      /* remote master's site request */
+#define        TSP_TEST                21      /* for testing election algo */
+#define        TSP_SETDATE             22      /* New from date command */
+#define        TSP_SETDATEREQ          23      /* New remote for above */
+#define        TSP_LOOP                24      /* loop detection packet */
+
+#define        TSPTYPENUMBER           25
+
+#ifdef TSPTYPES
+char *tsptype[TSPTYPENUMBER] =
+  { "ANY", "ADJTIME", "ACK", "MASTERREQ", "MASTERACK", "SETTIME", "MASTERUP",
+  "SLAVEUP", "ELECTION", "ACCEPT", "REFUSE", "CONFLICT", "RESOLVE", "QUIT",
+  "DATE", "DATEREQ", "DATEACK", "TRACEON", "TRACEOFF", "MSITE", "MSITEREQ",
+  "TEST", "SETDATE", "SETDATEREQ", "LOOP" };
+#endif
+
+#endif /* protocols/timed.h */
diff --git a/lib/libdss-include/pthread.h b/lib/libdss-include/pthread.h
new file mode 100644 (file)
index 0000000..fd0894e
--- /dev/null
@@ -0,0 +1,1161 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PTHREAD_H
+#define _PTHREAD_H     1
+
+#include <features.h>
+#include <endian.h>
+#include <sched.h>
+#include <time.h>
+
+#include <bits/pthreadtypes.h>
+#include <bits/setjmp.h>
+#include <bits/wordsize.h>
+
+
+/* Detach state.  */
+enum
+{
+  PTHREAD_CREATE_JOINABLE,
+#define PTHREAD_CREATE_JOINABLE        PTHREAD_CREATE_JOINABLE
+  PTHREAD_CREATE_DETACHED
+#define PTHREAD_CREATE_DETACHED        PTHREAD_CREATE_DETACHED
+};
+
+
+/* Mutex types.  */
+enum
+{
+  PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_ADAPTIVE_NP
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+  ,
+  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+#endif
+#ifdef __USE_GNU
+  /* For compatibility.  */
+  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
+#endif
+};
+
+
+#ifdef __USE_XOPEN2K
+/* Robust mutex or not flags.  */
+enum
+{
+  PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_ROBUST,
+  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
+};
+#endif
+
+
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+/* Mutex protocols.  */
+enum
+{
+  PTHREAD_PRIO_NONE,
+  PTHREAD_PRIO_INHERIT,
+  PTHREAD_PRIO_PROTECT
+};
+#endif
+
+
+#ifdef __PTHREAD_MUTEX_HAVE_PREV
+# define PTHREAD_MUTEX_INITIALIZER \
+  { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
+# ifdef __USE_GNU
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+
+# endif
+#else
+# define PTHREAD_MUTEX_INITIALIZER \
+  { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } }
+# ifdef __USE_GNU
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } }
+
+# endif
+#endif
+
+
+/* Read-write lock types.  */
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+enum
+{
+  PTHREAD_RWLOCK_PREFER_READER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
+  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
+};
+
+/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t
+   has the shared field.  All 64-bit architectures have the shared field
+   in pthread_rwlock_t.  */
+#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+# if __WORDSIZE == 64
+#  define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1
+# endif
+#endif
+
+/* Read-write lock initializers.  */
+# define PTHREAD_RWLOCK_INITIALIZER \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
+# ifdef __USE_GNU
+#  ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0,                                             \
+       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+#  else
+#   if __BYTE_ORDER == __LITTLE_ENDIAN
+#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \
+      0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
+#   else
+#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\
+      0 } }
+#   endif
+#  endif
+# endif
+#endif  /* Unix98 or XOpen2K */
+
+
+/* Scheduler inheritance.  */
+enum
+{
+  PTHREAD_INHERIT_SCHED,
+#define PTHREAD_INHERIT_SCHED   PTHREAD_INHERIT_SCHED
+  PTHREAD_EXPLICIT_SCHED
+#define PTHREAD_EXPLICIT_SCHED  PTHREAD_EXPLICIT_SCHED
+};
+
+
+/* Scope handling.  */
+enum
+{
+  PTHREAD_SCOPE_SYSTEM,
+#define PTHREAD_SCOPE_SYSTEM    PTHREAD_SCOPE_SYSTEM
+  PTHREAD_SCOPE_PROCESS
+#define PTHREAD_SCOPE_PROCESS   PTHREAD_SCOPE_PROCESS
+};
+
+
+/* Process shared or private flag.  */
+enum
+{
+  PTHREAD_PROCESS_PRIVATE,
+#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
+  PTHREAD_PROCESS_SHARED
+#define PTHREAD_PROCESS_SHARED  PTHREAD_PROCESS_SHARED
+};
+
+
+
+/* Conditional variable handling.  */
+#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
+
+
+/* Cleanup buffers */
+struct _pthread_cleanup_buffer
+{
+  void (*__routine) (void *);             /* Function to call.  */
+  void *__arg;                            /* Its argument.  */
+  int __canceltype;                       /* Saved cancellation type. */
+  struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions.  */
+};
+
+/* Cancellation */
+enum
+{
+  PTHREAD_CANCEL_ENABLE,
+#define PTHREAD_CANCEL_ENABLE   PTHREAD_CANCEL_ENABLE
+  PTHREAD_CANCEL_DISABLE
+#define PTHREAD_CANCEL_DISABLE  PTHREAD_CANCEL_DISABLE
+};
+enum
+{
+  PTHREAD_CANCEL_DEFERRED,
+#define PTHREAD_CANCEL_DEFERRED        PTHREAD_CANCEL_DEFERRED
+  PTHREAD_CANCEL_ASYNCHRONOUS
+#define PTHREAD_CANCEL_ASYNCHRONOUS    PTHREAD_CANCEL_ASYNCHRONOUS
+};
+#define PTHREAD_CANCELED ((void *) -1)
+
+
+/* Single execution handling.  */
+#define PTHREAD_ONCE_INIT 0
+
+
+#ifdef __USE_XOPEN2K
+/* Value returned by 'pthread_barrier_wait' for one of the threads after
+   the required number of threads have called this function.
+   -1 is distinct from 0 and all errno constants */
+# define PTHREAD_BARRIER_SERIAL_THREAD -1
+#endif
+
+
+__BEGIN_DECLS
+
+/* Create a new thread, starting with execution of START-ROUTINE
+   getting passed ARG.  Creation attributed come from ATTR.  The new
+   handle is stored in *NEWTHREAD.  */
+extern int pthread_create (pthread_t *__restrict __newthread,
+                          const pthread_attr_t *__restrict __attr,
+                          void *(*__start_routine) (void *),
+                          void *__restrict __arg) __THROWNL __nonnull ((1, 3));
+
+/* Terminate calling thread.
+
+   The registered cleanup handlers are called via exception handling
+   so we cannot mark this function with __THROW.*/
+extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
+
+/* Make calling thread wait for termination of the thread TH.  The
+   exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN
+   is not NULL.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_join (pthread_t __th, void **__thread_return);
+
+#ifdef __USE_GNU
+/* Check whether thread TH has terminated.  If yes return the status of
+   the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
+extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
+
+/* Make calling thread wait for termination of the thread TH, but only
+   until TIMEOUT.  The exit status of the thread is stored in
+   *THREAD_RETURN, if THREAD_RETURN is not NULL.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
+                                const struct timespec *__abstime);
+#endif
+
+/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN.
+   The resources of TH will therefore be freed immediately when it
+   terminates, instead of waiting for another thread to perform PTHREAD_JOIN
+   on it.  */
+extern int pthread_detach (pthread_t __th) __THROW;
+
+
+/* Obtain the identifier of the current thread.  */
+extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__));
+
+/* Compare two thread identifiers.  */
+extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
+  __THROW __attribute__ ((__const__));
+
+
+/* Thread attribute handling.  */
+
+/* Initialize thread attribute *ATTR with default attributes
+   (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER,
+    no user-provided stack).  */
+extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1));
+
+/* Destroy thread attribute *ATTR.  */
+extern int pthread_attr_destroy (pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get detach state attribute.  */
+extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+                                       int *__detachstate)
+     __THROW __nonnull ((1, 2));
+
+/* Set detach state attribute.  */
+extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
+                                       int __detachstate)
+     __THROW __nonnull ((1));
+
+
+/* Get the size of the guard area created for stack overflow protection.  */
+extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
+                                     size_t *__guardsize)
+     __THROW __nonnull ((1, 2));
+
+/* Set the size of the guard area created for stack overflow protection.  */
+extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
+                                     size_t __guardsize)
+     __THROW __nonnull ((1));
+
+
+/* Return in *PARAM the scheduling parameters of *ATTR.  */
+extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
+                                      struct sched_param *__restrict __param)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM.  */
+extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+                                      const struct sched_param *__restrict
+                                      __param) __THROW __nonnull ((1, 2));
+
+/* Return in *POLICY the scheduling policy of *ATTR.  */
+extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+                                       __attr, int *__restrict __policy)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling policy in *ATTR according to POLICY.  */
+extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
+     __THROW __nonnull ((1));
+
+/* Return in *INHERIT the scheduling inheritance mode of *ATTR.  */
+extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+                                        __attr, int *__restrict __inherit)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling inheritance mode in *ATTR according to INHERIT.  */
+extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
+                                        int __inherit)
+     __THROW __nonnull ((1));
+
+
+/* Return in *SCOPE the scheduling contention scope of *ATTR.  */
+extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+                                 int *__restrict __scope)
+     __THROW __nonnull ((1, 2));
+
+/* Set scheduling contention scope in *ATTR according to SCOPE.  */
+extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
+     __THROW __nonnull ((1));
+
+/* Return the previously set address for the stack.  */
+extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+                                     __attr, void **__restrict __stackaddr)
+     __THROW __nonnull ((1, 2)) __attribute_deprecated__;
+
+/* Set the starting address of the stack of the thread to be created.
+   Depending on whether the stack grows up or down the value must either
+   be higher or lower than all the address in the memory block.  The
+   minimal size of the block must be PTHREAD_STACK_MIN.  */
+extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
+                                     void *__stackaddr)
+     __THROW __nonnull ((1)) __attribute_deprecated__;
+
+/* Return the currently used minimal stack size.  */
+extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+                                     __attr, size_t *__restrict __stacksize)
+     __THROW __nonnull ((1, 2));
+
+/* Add information about the minimum stack size needed for the thread
+   to be started.  This size must never be less than PTHREAD_STACK_MIN
+   and must also not exceed the system limits.  */
+extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
+                                     size_t __stacksize)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Return the previously set address for the stack.  */
+extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+                                 void **__restrict __stackaddr,
+                                 size_t *__restrict __stacksize)
+     __THROW __nonnull ((1, 2, 3));
+
+/* The following two interfaces are intended to replace the last two.  They
+   require setting the address as well as the size since only setting the
+   address will make the implementation on some architectures impossible.  */
+extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
+                                 size_t __stacksize) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_GNU
+/* Thread created with attribute ATTR will be limited to run only on
+   the processors represented in CPUSET.  */
+extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
+                                       size_t __cpusetsize,
+                                       const cpu_set_t *__cpuset)
+     __THROW __nonnull ((1, 3));
+
+/* Get bit set in CPUSET representing the processors threads created with
+   ATTR can run on.  */
+extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
+                                       size_t __cpusetsize,
+                                       cpu_set_t *__cpuset)
+     __THROW __nonnull ((1, 3));
+
+/* Get the default attributes used by pthread_create in this process.  */
+extern int pthread_getattr_default_np (pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Set the default attributes to be used by pthread_create in this
+   process.  */
+extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Initialize thread attribute *ATTR with attributes corresponding to the
+   already running thread TH.  It shall be called on uninitialized ATTR
+   and destroyed with pthread_attr_destroy when no longer needed.  */
+extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Functions for scheduling control.  */
+
+/* Set the scheduling parameters for TARGET_THREAD according to POLICY
+   and *PARAM.  */
+extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+                                 const struct sched_param *__param)
+     __THROW __nonnull ((3));
+
+/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
+extern int pthread_getschedparam (pthread_t __target_thread,
+                                 int *__restrict __policy,
+                                 struct sched_param *__restrict __param)
+     __THROW __nonnull ((2, 3));
+
+/* Set the scheduling priority for TARGET_THREAD.  */
+extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
+     __THROW;
+
+
+#ifdef __USE_GNU
+/* Get thread name visible in the kernel and its interfaces.  */
+extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
+                              size_t __buflen)
+     __THROW __nonnull ((2));
+
+/* Set thread name visible in the kernel and its interfaces.  */
+extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
+     __THROW __nonnull ((2));
+#endif
+
+
+#ifdef __USE_UNIX98
+/* Determine level of concurrency.  */
+extern int pthread_getconcurrency (void) __THROW;
+
+/* Set new concurrency level to LEVEL.  */
+extern int pthread_setconcurrency (int __level) __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Yield the processor to another thread or process.
+   This function is similar to the POSIX `sched_yield' function but
+   might be differently implemented in the case of a m-on-n thread
+   implementation.  */
+extern int pthread_yield (void) __THROW;
+
+
+/* Limit specified thread TH to run only on the processors represented
+   in CPUSET.  */
+extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
+                                  const cpu_set_t *__cpuset)
+     __THROW __nonnull ((3));
+
+/* Get bit set in CPUSET representing the processors TH can run on.  */
+extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
+                                  cpu_set_t *__cpuset)
+     __THROW __nonnull ((3));
+#endif
+
+
+/* Functions for handling initialization.  */
+
+/* Guarantee that the initialization function INIT_ROUTINE will be called
+   only once, even if pthread_once is executed several times with the
+   same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or
+   extern variable initialized to PTHREAD_ONCE_INIT.
+
+   The initialization functions might throw exception which is why
+   this function is not marked with __THROW.  */
+extern int pthread_once (pthread_once_t *__once_control,
+                        void (*__init_routine) (void)) __nonnull ((1, 2));
+
+
+/* Functions for handling cancellation.
+
+   Note that these functions are explicitly not marked to not throw an
+   exception in C++ code.  If cancellation is implemented by unwinding
+   this is necessary to have the compiler generate the unwind information.  */
+
+/* Set cancelability state of current thread to STATE, returning old
+   state in *OLDSTATE if OLDSTATE is not NULL.  */
+extern int pthread_setcancelstate (int __state, int *__oldstate);
+
+/* Set cancellation state of current thread to TYPE, returning the old
+   type in *OLDTYPE if OLDTYPE is not NULL.  */
+extern int pthread_setcanceltype (int __type, int *__oldtype);
+
+/* Cancel THREAD immediately or at the next possibility.  */
+extern int pthread_cancel (pthread_t __th);
+
+/* Test for pending cancellation for the current thread and terminate
+   the thread as per pthread_exit(PTHREAD_CANCELED) if it has been
+   cancelled.  */
+extern void pthread_testcancel (void);
+
+
+/* Cancellation handling with integration into exception handling.  */
+
+typedef struct
+{
+  struct
+  {
+    __jmp_buf __cancel_jmp_buf;
+    int __mask_was_saved;
+  } __cancel_jmp_buf[1];
+  void *__pad[4];
+} __pthread_unwind_buf_t __attribute__ ((__aligned__));
+
+/* No special attributes by default.  */
+#ifndef __cleanup_fct_attribute
+# define __cleanup_fct_attribute
+#endif
+
+
+/* Structure to hold the cleanup handler information.  */
+struct __pthread_cleanup_frame
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+};
+
+#if defined __GNUC__ && defined __EXCEPTIONS
+# ifdef __cplusplus
+/* Class to handle cancellation handler invocation.  */
+class __pthread_cleanup_class
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+
+ public:
+  __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
+    : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
+  ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
+  void __setdoit (int __newval) { __do_it = __newval; }
+  void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
+                                          &__cancel_type); }
+  void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
+};
+
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+#  define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    __pthread_cleanup_class __clframe (routine, arg)
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+#  define pthread_cleanup_pop(execute) \
+    __clframe.__setdoit (execute);                                           \
+  } while (0)
+
+#  ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#   define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    __pthread_cleanup_class __clframe (routine, arg);                        \
+    __clframe.__defer ()
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#   define pthread_cleanup_pop_restore_np(execute) \
+    __clframe.__restore ();                                                  \
+    __clframe.__setdoit (execute);                                           \
+  } while (0)
+#  endif
+# else
+/* Function called to call the cleanup handler.  As an extern inline
+   function the compiler is free to decide inlining the change when
+   needed or fall back on the copy which must exist somewhere
+   else.  */
+__extern_inline void
+__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
+{
+  if (__frame->__do_it)
+    __frame->__cancel_routine (__frame->__cancel_arg);
+}
+
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+#  define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    struct __pthread_cleanup_frame __clframe                                 \
+      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))                      \
+      = { .__cancel_routine = (routine), .__cancel_arg = (arg),                      \
+         .__do_it = 1 };
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+#  define pthread_cleanup_pop(execute) \
+    __clframe.__do_it = (execute);                                           \
+  } while (0)
+
+#  ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#   define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    struct __pthread_cleanup_frame __clframe                                 \
+      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))                      \
+      = { .__cancel_routine = (routine), .__cancel_arg = (arg),                      \
+         .__do_it = 1 };                                                     \
+    (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,                   \
+                                 &__clframe.__cancel_type)
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#   define pthread_cleanup_pop_restore_np(execute) \
+    (void) pthread_setcanceltype (__clframe.__cancel_type, NULL);            \
+    __clframe.__do_it = (execute);                                           \
+  } while (0)
+#  endif
+# endif
+#else
+/* Install a cleanup handler: ROUTINE will be called with arguments ARG
+   when the thread is canceled or calls pthread_exit.  ROUTINE will also
+   be called with arguments ARG when the matching pthread_cleanup_pop
+   is executed with non-zero EXECUTE argument.
+
+   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
+   be used in matching pairs at the same nesting level of braces.  */
+# define pthread_cleanup_push(routine, arg) \
+  do {                                                                       \
+    __pthread_unwind_buf_t __cancel_buf;                                     \
+    void (*__cancel_routine) (void *) = (routine);                           \
+    void *__cancel_arg = (arg);                                                      \
+    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
+                                       __cancel_buf.__cancel_jmp_buf, 0);    \
+    if (__glibc_unlikely (__not_first_call))                                 \
+      {                                                                              \
+       __cancel_routine (__cancel_arg);                                      \
+       __pthread_unwind_next (&__cancel_buf);                                \
+       /* NOTREACHED */                                                      \
+      }                                                                              \
+                                                                             \
+    __pthread_register_cancel (&__cancel_buf);                               \
+    do {
+extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute;
+
+/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
+   If EXECUTE is non-zero, the handler function is called. */
+# define pthread_cleanup_pop(execute) \
+      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
+    } while (0);                                                             \
+    __pthread_unregister_cancel (&__cancel_buf);                             \
+    if (execute)                                                             \
+      __cancel_routine (__cancel_arg);                                       \
+  } while (0)
+extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
+  __cleanup_fct_attribute;
+
+# ifdef __USE_GNU
+/* Install a cleanup handler as pthread_cleanup_push does, but also
+   saves the current cancellation type and sets it to deferred
+   cancellation.  */
+#  define pthread_cleanup_push_defer_np(routine, arg) \
+  do {                                                                       \
+    __pthread_unwind_buf_t __cancel_buf;                                     \
+    void (*__cancel_routine) (void *) = (routine);                           \
+    void *__cancel_arg = (arg);                                                      \
+    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
+                                       __cancel_buf.__cancel_jmp_buf, 0);    \
+    if (__glibc_unlikely (__not_first_call))                                 \
+      {                                                                              \
+       __cancel_routine (__cancel_arg);                                      \
+       __pthread_unwind_next (&__cancel_buf);                                \
+       /* NOTREACHED */                                                      \
+      }                                                                              \
+                                                                             \
+    __pthread_register_cancel_defer (&__cancel_buf);                         \
+    do {
+extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute;
+
+/* Remove a cleanup handler as pthread_cleanup_pop does, but also
+   restores the cancellation type that was in effect when the matching
+   pthread_cleanup_push_defer was called.  */
+#  define pthread_cleanup_pop_restore_np(execute) \
+      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
+    } while (0);                                                             \
+    __pthread_unregister_cancel_restore (&__cancel_buf);                     \
+    if (execute)                                                             \
+      __cancel_routine (__cancel_arg);                                       \
+  } while (0)
+extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
+  __cleanup_fct_attribute;
+# endif
+
+/* Internal interface to initiate cleanup.  */
+extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
+     __cleanup_fct_attribute __attribute__ ((__noreturn__))
+# ifndef SHARED
+     __attribute__ ((__weak__))
+# endif
+     ;
+#endif
+
+/* Function used in the macros.  */
+struct __jmp_buf_tag;
+extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL;
+
+
+/* Mutex handling.  */
+
+/* Initialize a mutex.  */
+extern int pthread_mutex_init (pthread_mutex_t *__mutex,
+                              const pthread_mutexattr_t *__mutexattr)
+     __THROW __nonnull ((1));
+
+/* Destroy a mutex.  */
+extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+
+/* Try locking a mutex.  */
+extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+/* Lock a mutex.  */
+extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Wait until lock becomes available, or specified time passes. */
+extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+                                   const struct timespec *__restrict
+                                   __abstime) __THROWNL __nonnull ((1, 2));
+#endif
+
+/* Unlock a mutex.  */
+extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
+     __THROWNL __nonnull ((1));
+
+
+/* Get the priority ceiling of MUTEX.  */
+extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
+                                        __restrict __mutex,
+                                        int *__restrict __prioceiling)
+     __THROW __nonnull ((1, 2));
+
+/* Set the priority ceiling of MUTEX to PRIOCEILING, return old
+   priority ceiling value in *OLD_CEILING.  */
+extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
+                                        int __prioceiling,
+                                        int *__restrict __old_ceiling)
+     __THROW __nonnull ((1, 3));
+
+
+#ifdef __USE_XOPEN2K8
+/* Declare the state protected by MUTEX as consistent.  */
+extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+# ifdef __USE_GNU
+extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
+     __THROW __nonnull ((1));
+# endif
+#endif
+
+
+/* Functions for handling mutex attributes.  */
+
+/* Initialize mutex attribute object ATTR with default attributes
+   (kind is PTHREAD_MUTEX_TIMED_NP).  */
+extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy mutex attribute object ATTR.  */
+extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+                                        __restrict __attr,
+                                        int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
+                                        int __pshared)
+     __THROW __nonnull ((1));
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* Return in *KIND the mutex kind attribute in *ATTR.  */
+extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+                                     __attr, int *__restrict __kind)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL,
+   PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or
+   PTHREAD_MUTEX_DEFAULT).  */
+extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
+     __THROW __nonnull ((1));
+#endif
+
+/* Return in *PROTOCOL the mutex protocol attribute in *ATTR.  */
+extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __protocol)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either
+   PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT).  */
+extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
+                                         int __protocol)
+     __THROW __nonnull ((1));
+
+/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR.  */
+extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
+                                            __restrict __attr,
+                                            int *__restrict __prioceiling)
+     __THROW __nonnull ((1, 2));
+
+/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING.  */
+extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
+                                            int __prioceiling)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Get the robustness flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
+                                       int *__robustness)
+     __THROW __nonnull ((1, 2));
+# ifdef __USE_GNU
+extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
+                                          int *__robustness)
+     __THROW __nonnull ((1, 2));
+# endif
+
+/* Set the robustness flag of the mutex attribute ATTR.  */
+extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
+                                       int __robustness)
+     __THROW __nonnull ((1));
+# ifdef __USE_GNU
+extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
+                                          int __robustness)
+     __THROW __nonnull ((1));
+# endif
+#endif
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Functions for handling read-write locks.  */
+
+/* Initialize read-write lock RWLOCK using attributes ATTR, or use
+   the default values if later is NULL.  */
+extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+                               const pthread_rwlockattr_t *__restrict
+                               __attr) __THROW __nonnull ((1));
+
+/* Destroy read-write lock RWLOCK.  */
+extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
+     __THROW __nonnull ((1));
+
+/* Acquire read lock for RWLOCK.  */
+extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+/* Try to acquire read lock for RWLOCK.  */
+extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
+  __THROWNL __nonnull ((1));
+
+# ifdef __USE_XOPEN2K
+/* Try to acquire read lock for RWLOCK or return after specfied time.  */
+extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+                                      const struct timespec *__restrict
+                                      __abstime) __THROWNL __nonnull ((1, 2));
+# endif
+
+/* Acquire write lock for RWLOCK.  */
+extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+/* Try to acquire write lock for RWLOCK.  */
+extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+# ifdef __USE_XOPEN2K
+/* Try to acquire write lock for RWLOCK or return after specfied time.  */
+extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+                                      const struct timespec *__restrict
+                                      __abstime) __THROWNL __nonnull ((1, 2));
+# endif
+
+/* Unlock RWLOCK.  */
+extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
+     __THROWNL __nonnull ((1));
+
+
+/* Functions for handling read-write lock attributes.  */
+
+/* Initialize attribute object ATTR with default values.  */
+extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy attribute object ATTR.  */
+extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Return current setting of process-shared attribute of ATTR in PSHARED.  */
+extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set process-shared attribute of ATTR to PSHARED.  */
+extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
+                                         int __pshared)
+     __THROW __nonnull ((1));
+
+/* Return current setting of reader/writer preference.  */
+extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
+                                         __restrict __attr,
+                                         int *__restrict __pref)
+     __THROW __nonnull ((1, 2));
+
+/* Set reader/write preference.  */
+extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
+                                         int __pref) __THROW __nonnull ((1));
+#endif
+
+
+/* Functions for handling conditional variables.  */
+
+/* Initialize condition variable COND using attributes ATTR, or use
+   the default values if later is NULL.  */
+extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+                             const pthread_condattr_t *__restrict __cond_attr)
+     __THROW __nonnull ((1));
+
+/* Destroy condition variable COND.  */
+extern int pthread_cond_destroy (pthread_cond_t *__cond)
+     __THROW __nonnull ((1));
+
+/* Wake up one thread waiting for condition variable COND.  */
+extern int pthread_cond_signal (pthread_cond_t *__cond)
+     __THROWNL __nonnull ((1));
+
+/* Wake up all threads waiting for condition variables COND.  */
+extern int pthread_cond_broadcast (pthread_cond_t *__cond)
+     __THROWNL __nonnull ((1));
+
+/* Wait for condition variable COND to be signaled or broadcast.
+   MUTEX is assumed to be locked before.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+                             pthread_mutex_t *__restrict __mutex)
+     __nonnull ((1, 2));
+
+/* Wait for condition variable COND to be signaled or broadcast until
+   ABSTIME.  MUTEX is assumed to be locked before.  ABSTIME is an
+   absolute time specification; zero is the beginning of the epoch
+   (00:00:00 GMT, January 1, 1970).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+                                  pthread_mutex_t *__restrict __mutex,
+                                  const struct timespec *__restrict __abstime)
+     __nonnull ((1, 2, 3));
+
+/* Functions for handling condition variable attributes.  */
+
+/* Initialize condition variable attribute ATTR.  */
+extern int pthread_condattr_init (pthread_condattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy condition variable attribute ATTR.  */
+extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the condition variable attribute ATTR.  */
+extern int pthread_condattr_getpshared (const pthread_condattr_t *
+                                       __restrict __attr,
+                                       int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the condition variable attribute ATTR.  */
+extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
+                                       int __pshared) __THROW __nonnull ((1));
+
+#ifdef __USE_XOPEN2K
+/* Get the clock selected for the condition variable attribute ATTR.  */
+extern int pthread_condattr_getclock (const pthread_condattr_t *
+                                     __restrict __attr,
+                                     __clockid_t *__restrict __clock_id)
+     __THROW __nonnull ((1, 2));
+
+/* Set the clock selected for the condition variable attribute ATTR.  */
+extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
+                                     __clockid_t __clock_id)
+     __THROW __nonnull ((1));
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* Functions to handle spinlocks.  */
+
+/* Initialize the spinlock LOCK.  If PSHARED is nonzero the spinlock can
+   be shared between different processes.  */
+extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+     __THROW __nonnull ((1));
+
+/* Destroy the spinlock LOCK.  */
+extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
+     __THROW __nonnull ((1));
+
+/* Wait until spinlock LOCK is retrieved.  */
+extern int pthread_spin_lock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+/* Try to lock spinlock LOCK.  */
+extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+/* Release spinlock LOCK.  */
+extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
+     __THROWNL __nonnull ((1));
+
+
+/* Functions to handle barriers.  */
+
+/* Initialize BARRIER with the attributes in ATTR.  The barrier is
+   opened when COUNT waiters arrived.  */
+extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+                                const pthread_barrierattr_t *__restrict
+                                __attr, unsigned int __count)
+     __THROW __nonnull ((1));
+
+/* Destroy a previously dynamically initialized barrier BARRIER.  */
+extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
+     __THROW __nonnull ((1));
+
+/* Wait on barrier BARRIER.  */
+extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
+     __THROWNL __nonnull ((1));
+
+
+/* Initialize barrier attribute ATTR.  */
+extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Destroy previously dynamically initialized barrier attribute ATTR.  */
+extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Get the process-shared flag of the barrier attribute ATTR.  */
+extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+                                          __restrict __attr,
+                                          int *__restrict __pshared)
+     __THROW __nonnull ((1, 2));
+
+/* Set the process-shared flag of the barrier attribute ATTR.  */
+extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
+                                          int __pshared)
+     __THROW __nonnull ((1));
+#endif
+
+
+/* Functions for handling thread-specific data.  */
+
+/* Create a key value identifying a location in the thread-specific
+   data area.  Each thread maintains a distinct thread-specific data
+   area.  DESTR_FUNCTION, if non-NULL, is called with the value
+   associated to that key when the key is destroyed.
+   DESTR_FUNCTION is not called if the value associated is NULL when
+   the key is destroyed.  */
+extern int pthread_key_create (pthread_key_t *__key,
+                              void (*__destr_function) (void *))
+     __THROW __nonnull ((1));
+
+/* Destroy KEY.  */
+extern int pthread_key_delete (pthread_key_t __key) __THROW;
+
+/* Return current value of the thread-specific data slot identified by KEY.  */
+extern void *pthread_getspecific (pthread_key_t __key) __THROW;
+
+/* Store POINTER in the thread-specific data slot identified by KEY. */
+extern int pthread_setspecific (pthread_key_t __key,
+                               const void *__pointer) __THROW ;
+
+
+#ifdef __USE_XOPEN2K
+/* Get ID of CPU-time clock for thread THREAD_ID.  */
+extern int pthread_getcpuclockid (pthread_t __thread_id,
+                                 __clockid_t *__clock_id)
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Install handlers to be called when a new process is created with FORK.
+   The PREPARE handler is called in the parent process just before performing
+   FORK. The PARENT handler is called in the parent process just after FORK.
+   The CHILD handler is called in the child process.  Each of the three
+   handlers can be NULL, meaning that no handler needs to be called at that
+   point.
+   PTHREAD_ATFORK can be called several times, in which case the PREPARE
+   handlers are called in LIFO order (last added with PTHREAD_ATFORK,
+   first called before FORK), and the PARENT and CHILD handlers are called
+   in FIFO (first added, first called).  */
+
+extern int pthread_atfork (void (*__prepare) (void),
+                          void (*__parent) (void),
+                          void (*__child) (void)) __THROW;
+
+
+#ifdef __USE_EXTERN_INLINES
+/* Optimizations.  */
+__extern_inline int
+__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2))
+{
+  return __thread1 == __thread2;
+}
+#endif
+
+__END_DECLS
+
+#endif /* pthread.h */
diff --git a/lib/libdss-include/pty.h b/lib/libdss-include/pty.h
new file mode 100644 (file)
index 0000000..e466144
--- /dev/null
@@ -0,0 +1,48 @@
+/* Functions for pseudo TTY handling.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PTY_H
+#define _PTY_H 1
+
+#include <features.h>
+
+struct termios;
+struct winsize;
+
+#include <termios.h>
+#include <sys/ioctl.h>
+
+
+__BEGIN_DECLS
+
+/* Create pseudo tty master slave pair with NAME and set terminal
+   attributes according to TERMP and WINP and return handles for both
+   ends in AMASTER and ASLAVE.  */
+extern int openpty (int *__amaster, int *__aslave, char *__name,
+                   const struct termios *__termp,
+                   const struct winsize *__winp) __THROW;
+
+/* Create child process and establish the slave pseudo terminal as the
+   child's controlling terminal.  */
+extern int forkpty (int *__amaster, char *__name,
+                   const struct termios *__termp,
+                   const struct winsize *__winp) __THROW;
+
+__END_DECLS
+
+#endif /* pty.h */
diff --git a/lib/libdss-include/pwd.h b/lib/libdss-include/pwd.h
new file mode 100644 (file)
index 0000000..07455e7
--- /dev/null
@@ -0,0 +1,189 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 9.2.2 User Database Access      <pwd.h>
+ */
+
+#ifndef        _PWD_H
+#define        _PWD_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif
+
+/* The passwd structure.  */
+struct passwd
+{
+  char *pw_name;               /* Username.  */
+  char *pw_passwd;             /* Password.  */
+  __uid_t pw_uid;              /* User ID.  */
+  __gid_t pw_gid;              /* Group ID.  */
+  char *pw_gecos;              /* Real name.  */
+  char *pw_dir;                        /* Home directory.  */
+  char *pw_shell;              /* Shell program.  */
+};
+
+
+#ifdef __USE_MISC
+# define __need_FILE
+# include <stdio.h>
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Rewind the password-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setpwent (void);
+
+/* Close the password-file stream.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endpwent (void);
+
+/* Read an entry from the password-file stream, opening it if necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwent (void);
+#endif
+
+#ifdef __USE_MISC
+/* Read an entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct passwd *fgetpwent (FILE *__stream) __nonnull ((1));
+
+/* Write the given entry onto the given stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putpwent (const struct passwd *__restrict __p,
+                    FILE *__restrict __f);
+#endif
+
+/* Search for an entry with a matching user ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwuid (__uid_t __uid);
+
+/* Search for an entry with a matching username.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct passwd *getpwnam (const char *__name) __nonnull ((1));
+
+#ifdef __USE_POSIX
+
+# ifdef __USE_MISC
+/* Reasonable value for the buffer sized used in the reentrant
+   functions below.  But better use `sysconf'.  */
+#  define NSS_BUFLEN_PASSWD    1024
+# endif
+
+/* Reentrant versions of some of the functions above.
+
+   PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
+
+# ifdef __USE_MISC
+/* This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getpwent_r (struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((1, 2, 4));
+# endif
+
+extern int getpwuid_r (__uid_t __uid,
+                      struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((2, 3, 5));
+
+extern int getpwnam_r (const char *__restrict __name,
+                      struct passwd *__restrict __resultbuf,
+                      char *__restrict __buffer, size_t __buflen,
+                      struct passwd **__restrict __result)
+                      __nonnull ((1, 2, 3, 5));
+
+
+# ifdef        __USE_MISC
+/* Read an entry from STREAM.  This function is not standardized and
+   probably never will.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetpwent_r (FILE *__restrict __stream,
+                       struct passwd *__restrict __resultbuf,
+                       char *__restrict __buffer, size_t __buflen,
+                       struct passwd **__restrict __result)
+                       __nonnull ((1, 2, 3, 5));
+# endif
+
+#endif /* POSIX or reentrant */
+
+#ifdef __USE_GNU
+/* Re-construct the password-file line for the given uid
+   in the given buffer.  This knows the format that the caller
+   will expect, but this need not be the format of the password file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getpw (__uid_t __uid, char *__buffer);
+#endif
+
+__END_DECLS
+
+#endif /* pwd.h  */
diff --git a/lib/libdss-include/rdma/hfi/hfi1_user.h b/lib/libdss-include/rdma/hfi/hfi1_user.h
new file mode 100644 (file)
index 0000000..fa77d9a
--- /dev/null
@@ -0,0 +1,427 @@
+/*
+ *
+ * This file is provided under a dual BSD/GPLv2 license.  When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2015 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2015 Intel Corporation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *  - Neither the name of Intel Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * This file contains defines, structures, etc. that are used
+ * to communicate between kernel and user code.
+ */
+
+#ifndef _LINUX__HFI1_USER_H
+#define _LINUX__HFI1_USER_H
+
+#include <linux/types.h>
+
+/*
+ * This version number is given to the driver by the user code during
+ * initialization in the spu_userversion field of hfi1_user_info, so
+ * the driver can check for compatibility with user code.
+ *
+ * The major version changes when data structures change in an incompatible
+ * way. The driver must be the same for initialization to succeed.
+ */
+#define HFI1_USER_SWMAJOR 4
+
+/*
+ * Minor version differences are always compatible
+ * a within a major version, however if user software is larger
+ * than driver software, some new features and/or structure fields
+ * may not be implemented; the user code must deal with this if it
+ * cares, or it must abort after initialization reports the difference.
+ */
+#define HFI1_USER_SWMINOR 0
+
+/*
+ * Set of HW and driver capability/feature bits.
+ * These bit values are used to configure enabled/disabled HW and
+ * driver features. The same set of bits are communicated to user
+ * space.
+ */
+#define HFI1_CAP_DMA_RTAIL        (1UL <<  0) /* Use DMA'ed RTail value */
+#define HFI1_CAP_SDMA             (1UL <<  1) /* Enable SDMA support */
+#define HFI1_CAP_SDMA_AHG         (1UL <<  2) /* Enable SDMA AHG support */
+#define HFI1_CAP_EXTENDED_PSN     (1UL <<  3) /* Enable Extended PSN support */
+#define HFI1_CAP_HDRSUPP          (1UL <<  4) /* Enable Header Suppression */
+/* 1UL << 5 unused */
+#define HFI1_CAP_USE_SDMA_HEAD    (1UL <<  6) /* DMA Hdr Q tail vs. use CSR */
+#define HFI1_CAP_MULTI_PKT_EGR    (1UL <<  7) /* Enable multi-packet Egr buffs*/
+#define HFI1_CAP_NODROP_RHQ_FULL  (1UL <<  8) /* Don't drop on Hdr Q full */
+#define HFI1_CAP_NODROP_EGR_FULL  (1UL <<  9) /* Don't drop on EGR buffs full */
+#define HFI1_CAP_TID_UNMAP        (1UL << 10) /* Enable Expected TID caching */
+#define HFI1_CAP_PRINT_UNIMPL     (1UL << 11) /* Show for unimplemented feats */
+#define HFI1_CAP_ALLOW_PERM_JKEY  (1UL << 12) /* Allow use of permissive JKEY */
+#define HFI1_CAP_NO_INTEGRITY     (1UL << 13) /* Enable ctxt integrity checks */
+#define HFI1_CAP_PKEY_CHECK       (1UL << 14) /* Enable ctxt PKey checking */
+#define HFI1_CAP_STATIC_RATE_CTRL (1UL << 15) /* Allow PBC.StaticRateControl */
+/* 1UL << 16 unused */
+#define HFI1_CAP_SDMA_HEAD_CHECK  (1UL << 17) /* SDMA head checking */
+#define HFI1_CAP_EARLY_CREDIT_RETURN (1UL << 18) /* early credit return */
+
+#define HFI1_RCVHDR_ENTSIZE_2    (1UL << 0)
+#define HFI1_RCVHDR_ENTSIZE_16   (1UL << 1)
+#define HFI1_RCVDHR_ENTSIZE_32   (1UL << 2)
+
+/*
+ * If the unit is specified via open, HFI choice is fixed.  If port is
+ * specified, it's also fixed.  Otherwise we try to spread contexts
+ * across ports and HFIs, using different algorithms.  WITHIN is
+ * the old default, prior to this mechanism.
+ */
+#define HFI1_ALG_ACROSS 0 /* round robin contexts across HFIs, then
+                         * ports; this is the default */
+#define HFI1_ALG_WITHIN 1 /* use all contexts on an HFI (round robin
+                         * active ports within), then next HFI */
+#define HFI1_ALG_COUNT  2 /* number of algorithm choices */
+
+
+/* User commands. */
+#define HFI1_CMD_ASSIGN_CTXT     1     /* allocate HFI and context */
+#define HFI1_CMD_CTXT_INFO       2     /* find out what resources we got */
+#define HFI1_CMD_USER_INFO       3     /* set up userspace */
+#define HFI1_CMD_TID_UPDATE      4     /* update expected TID entries */
+#define HFI1_CMD_TID_FREE        5     /* free expected TID entries */
+#define HFI1_CMD_CREDIT_UPD      6     /* force an update of PIO credit */
+#define HFI1_CMD_SDMA_STATUS_UPD 7       /* force update of SDMA status ring */
+
+#define HFI1_CMD_RECV_CTRL       8     /* control receipt of packets */
+#define HFI1_CMD_POLL_TYPE       9     /* set the kind of polling we want */
+#define HFI1_CMD_ACK_EVENT       10    /* ack & clear user status bits */
+#define HFI1_CMD_SET_PKEY        11      /* set context's pkey */
+#define HFI1_CMD_CTXT_RESET      12      /* reset context's HW send context */
+/* separate EPROM commands from normal PSM commands */
+#define HFI1_CMD_EP_INFO         64      /* read EPROM device ID */
+#define HFI1_CMD_EP_ERASE_CHIP   65      /* erase whole EPROM */
+#define HFI1_CMD_EP_ERASE_P0     66      /* erase EPROM partition 0 */
+#define HFI1_CMD_EP_ERASE_P1     67      /* erase EPROM partition 1 */
+#define HFI1_CMD_EP_READ_P0      68      /* read EPROM partition 0 */
+#define HFI1_CMD_EP_READ_P1      69      /* read EPROM partition 1 */
+#define HFI1_CMD_EP_WRITE_P0     70      /* write EPROM partition 0 */
+#define HFI1_CMD_EP_WRITE_P1     71      /* write EPROM partition 1 */
+
+#define _HFI1_EVENT_FROZEN_BIT       0
+#define _HFI1_EVENT_LINKDOWN_BIT     1
+#define _HFI1_EVENT_LID_CHANGE_BIT   2
+#define _HFI1_EVENT_LMC_CHANGE_BIT   3
+#define _HFI1_EVENT_SL2VL_CHANGE_BIT 4
+#define _HFI1_MAX_EVENT_BIT _HFI1_EVENT_SL2VL_CHANGE_BIT
+
+#define HFI1_EVENT_FROZEN                (1UL << _HFI1_EVENT_FROZEN_BIT)
+#define HFI1_EVENT_LINKDOWN_BIT                (1UL << _HFI1_EVENT_LINKDOWN_BIT)
+#define HFI1_EVENT_LID_CHANGE_BIT      (1UL << _HFI1_EVENT_LID_CHANGE_BIT)
+#define HFI1_EVENT_LMC_CHANGE_BIT      (1UL << _HFI1_EVENT_LMC_CHANGE_BIT)
+#define HFI1_EVENT_SL2VL_CHANGE_BIT    (1UL << _HFI1_EVENT_SL2VL_CHANGE_BIT)
+
+/*
+ * These are the status bits readable (in ASCII form, 64bit value)
+ * from the "status" sysfs file.  For binary compatibility, values
+ * must remain as is; removed states can be reused for different
+ * purposes.
+ */
+#define HFI1_STATUS_INITTED       0x1    /* basic initialization done */
+/* Chip has been found and initialized */
+#define HFI1_STATUS_CHIP_PRESENT 0x20
+/* IB link is at ACTIVE, usable for data traffic */
+#define HFI1_STATUS_IB_READY     0x40
+/* link is configured, LID, MTU, etc. have been set */
+#define HFI1_STATUS_IB_CONF      0x80
+/* A Fatal hardware error has occurred. */
+#define HFI1_STATUS_HWERROR     0x200
+
+/*
+ * Number of supported shared contexts.
+ * This is the maximum number of software contexts that can share
+ * a hardware send/receive context.
+ */
+#define HFI1_MAX_SHARED_CTXTS 8
+
+/*
+ * Poll types
+ */
+#define HFI1_POLL_TYPE_ANYRCV     0x0
+#define HFI1_POLL_TYPE_URGENT     0x1
+
+/*
+ * This structure is passed to the driver to tell it where
+ * user code buffers are, sizes, etc.   The offsets and sizes of the
+ * fields must remain unchanged, for binary compatibility.  It can
+ * be extended, if userversion is changed so user code can tell, if needed
+ */
+struct hfi1_user_info {
+       /*
+        * version of user software, to detect compatibility issues.
+        * Should be set to HFI1_USER_SWVERSION.
+        */
+       __u32 userversion;
+       __u16 pad;
+       /* HFI selection algorithm, if unit has not selected */
+       __u16 hfi1_alg;
+       /*
+        * If two or more processes wish to share a context, each process
+        * must set the subcontext_cnt and subcontext_id to the same
+        * values.  The only restriction on the subcontext_id is that
+        * it be unique for a given node.
+        */
+       __u16 subctxt_cnt;
+       __u16 subctxt_id;
+       /* 128bit UUID passed in by PSM. */
+       __u8 uuid[16];
+};
+
+struct hfi1_ctxt_info {
+       __u64 runtime_flags;    /* chip/drv runtime flags (HFI1_CAP_*) */
+       __u32 rcvegr_size;      /* size of each eager buffer */
+       __u16 num_active;       /* number of active units */
+       __u16 unit;             /* unit (chip) assigned to caller */
+       __u16 ctxt;             /* ctxt on unit assigned to caller */
+       __u16 subctxt;          /* subctxt on unit assigned to caller */
+       __u16 rcvtids;          /* number of Rcv TIDs for this context */
+       __u16 credits;          /* number of PIO credits for this context */
+       __u16 numa_node;        /* NUMA node of the assigned device */
+       __u16 rec_cpu;          /* cpu # for affinity (0xffff if none) */
+       __u16 send_ctxt;        /* send context in use by this user context */
+       __u16 egrtids;          /* number of RcvArray entries for Eager Rcvs */
+       __u16 rcvhdrq_cnt;      /* number of RcvHdrQ entries */
+       __u16 rcvhdrq_entsize;  /* size (in bytes) for each RcvHdrQ entry */
+       __u16 sdma_ring_size;   /* number of entries in SDMA request ring */
+};
+
+struct hfi1_tid_info {
+       /* virtual address of first page in transfer */
+       __u64 vaddr;
+       /* pointer to tid array. this array is big enough */
+       __u64 tidlist;
+       /* number of tids programmed by this request */
+       __u32 tidcnt;
+       /* length of transfer buffer programmed by this request */
+       __u32 length;
+       /*
+        * pointer to bitmap of TIDs used for this call;
+        * checked for being large enough at open
+        */
+       __u64 tidmap;
+};
+
+struct hfi1_cmd {
+       __u32 type;        /* command type */
+       __u32 len;         /* length of struct pointed to by add */
+       __u64 addr;        /* pointer to user structure */
+};
+
+enum hfi1_sdma_comp_state {
+       FREE = 0,
+       QUEUED,
+       COMPLETE,
+       ERROR
+};
+
+/*
+ * SDMA completion ring entry
+ */
+struct hfi1_sdma_comp_entry {
+       __u32 status;
+       __u32 errcode;
+};
+
+/*
+ * Device status and notifications from driver to user-space.
+ */
+struct hfi1_status {
+       __u64 dev;      /* device/hw status bits */
+       __u64 port;     /* port state and status bits */
+       char freezemsg[0];
+};
+
+/*
+ * This structure is returned by the driver immediately after
+ * open to get implementation-specific info, and info specific to this
+ * instance.
+ *
+ * This struct must have explicit pad fields where type sizes
+ * may result in different alignments between 32 and 64 bit
+ * programs, since the 64 bit * bit kernel requires the user code
+ * to have matching offsets
+ */
+struct hfi1_base_info {
+       /* version of hardware, for feature checking. */
+       __u32 hw_version;
+       /* version of software, for feature checking. */
+       __u32 sw_version;
+       /* Job key */
+       __u16 jkey;
+       __u16 padding1;
+       /*
+        * The special QP (queue pair) value that identifies PSM
+        * protocol packet from standard IB packets.
+        */
+       __u32 bthqp;
+       /* PIO credit return address, */
+       __u64 sc_credits_addr;
+       /*
+        * Base address of write-only pio buffers for this process.
+        * Each buffer has sendpio_credits*64 bytes.
+        */
+       __u64 pio_bufbase_sop;
+       /*
+        * Base address of write-only pio buffers for this process.
+        * Each buffer has sendpio_credits*64 bytes.
+        */
+       __u64 pio_bufbase;
+       /* address where receive buffer queue is mapped into */
+       __u64 rcvhdr_bufbase;
+       /* base address of Eager receive buffers. */
+       __u64 rcvegr_bufbase;
+       /* base address of SDMA completion ring */
+       __u64 sdma_comp_bufbase;
+       /*
+        * User register base for init code, not to be used directly by
+        * protocol or applications.  Always maps real chip register space.
+        * the register addresses are:
+        * ur_rcvhdrhead, ur_rcvhdrtail, ur_rcvegrhead, ur_rcvegrtail,
+        * ur_rcvtidflow
+        */
+       __u64 user_regbase;
+       /* notification events */
+       __u64 events_bufbase;
+       /* status page */
+       __u64 status_bufbase;
+       /* rcvhdrtail update */
+       __u64 rcvhdrtail_base;
+       /*
+        * shared memory pages for subctxts if ctxt is shared; these cover
+        * all the processes in the group sharing a single context.
+        * all have enough space for the num_subcontexts value on this job.
+        */
+       __u64 subctxt_uregbase;
+       __u64 subctxt_rcvegrbuf;
+       __u64 subctxt_rcvhdrbuf;
+};
+
+enum sdma_req_opcode {
+       EXPECTED = 0,
+       EAGER
+};
+
+#define HFI1_SDMA_REQ_VERSION_MASK 0xF
+#define HFI1_SDMA_REQ_VERSION_SHIFT 0x0
+#define HFI1_SDMA_REQ_OPCODE_MASK 0xF
+#define HFI1_SDMA_REQ_OPCODE_SHIFT 0x4
+#define HFI1_SDMA_REQ_IOVCNT_MASK 0xFF
+#define HFI1_SDMA_REQ_IOVCNT_SHIFT 0x8
+
+struct sdma_req_info {
+       /*
+        * bits 0-3 - version (currently unused)
+        * bits 4-7 - opcode (enum sdma_req_opcode)
+        * bits 8-15 - io vector count
+        */
+       __u16 ctrl;
+       /*
+        * Number of fragments contained in this request.
+        * User-space has already computed how many
+        * fragment-sized packet the user buffer will be
+        * split into.
+        */
+       __u16 npkts;
+       /*
+        * Size of each fragment the user buffer will be
+        * split into.
+        */
+       __u16 fragsize;
+       /*
+        * Index of the slot in the SDMA completion ring
+        * this request should be using. User-space is
+        * in charge of managing its own ring.
+        */
+       __u16 comp_idx;
+} __attribute__((packed));
+
+/*
+ * SW KDETH header.
+ * swdata is SW defined portion.
+ */
+struct hfi1_kdeth_header {
+       __le32 ver_tid_offset;
+       __le16 jkey;
+       __le16 hcrc;
+       __le32 swdata[7];
+} __attribute__((packed));
+
+/*
+ * Structure describing the headers that User space uses. The
+ * structure above is a subset of this one.
+ */
+struct hfi1_pkt_header {
+       __le16 pbc[4];
+       __be16 lrh[4];
+       __be32 bth[3];
+       struct hfi1_kdeth_header kdeth;
+} __attribute__((packed));
+
+
+/*
+ * The list of usermode accessible registers.
+ */
+enum hfi1_ureg {
+       /* (RO)  DMA RcvHdr to be used next. */
+       ur_rcvhdrtail = 0,
+       /* (RW)  RcvHdr entry to be processed next by host. */
+       ur_rcvhdrhead = 1,
+       /* (RO)  Index of next Eager index to use. */
+       ur_rcvegrindextail = 2,
+       /* (RW)  Eager TID to be processed next */
+       ur_rcvegrindexhead = 3,
+       /* (RO)  Receive Eager Offset Tail */
+       ur_rcvegroffsettail = 4,
+       /* For internal use only; max register number. */
+       ur_maxreg,
+       /* (RW)  Receive TID flow table */
+       ur_rcvtidflowtable = 256
+};
+
+#endif /* _LINIUX__HFI1_USER_H */
diff --git a/lib/libdss-include/rdma/ib_user_cm.h b/lib/libdss-include/rdma/ib_user_cm.h
new file mode 100644 (file)
index 0000000..f79014a
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_CM_H
+#define IB_USER_CM_H
+
+#include <linux/types.h>
+#include <rdma/ib_user_sa.h>
+
+#define IB_USER_CM_ABI_VERSION 5
+
+enum {
+       IB_USER_CM_CMD_CREATE_ID,
+       IB_USER_CM_CMD_DESTROY_ID,
+       IB_USER_CM_CMD_ATTR_ID,
+
+       IB_USER_CM_CMD_LISTEN,
+       IB_USER_CM_CMD_NOTIFY,
+
+       IB_USER_CM_CMD_SEND_REQ,
+       IB_USER_CM_CMD_SEND_REP,
+       IB_USER_CM_CMD_SEND_RTU,
+       IB_USER_CM_CMD_SEND_DREQ,
+       IB_USER_CM_CMD_SEND_DREP,
+       IB_USER_CM_CMD_SEND_REJ,
+       IB_USER_CM_CMD_SEND_MRA,
+       IB_USER_CM_CMD_SEND_LAP,
+       IB_USER_CM_CMD_SEND_APR,
+       IB_USER_CM_CMD_SEND_SIDR_REQ,
+       IB_USER_CM_CMD_SEND_SIDR_REP,
+
+       IB_USER_CM_CMD_EVENT,
+       IB_USER_CM_CMD_INIT_QP_ATTR,
+};
+/*
+ * command ABI structures.
+ */
+struct ib_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct ib_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+};
+
+struct ib_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct ib_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct ib_ucm_attr_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_attr_id_resp {
+       __be64 service_id;
+       __be64 service_mask;
+       __be32 local_id;
+       __be32 remote_id;
+};
+
+struct ib_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct ib_ucm_listen {
+       __be64 service_id;
+       __be64 service_mask;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct ib_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct ib_ucm_private_data {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_req {
+       __u32 id;
+       __u32 qpn;
+       __u32 qp_type;
+       __u32 psn;
+       __be64 sid;
+       __u64 data;
+       __u64 primary_path;
+       __u64 alternate_path;
+       __u8  len;
+       __u8  peer_to_peer;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  remote_cm_response_timeout;
+       __u8  flow_control;
+       __u8  local_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  max_cm_retries;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rep {
+       __u64 uid;
+       __u64 data;
+       __u32 id;
+       __u32 qpn;
+       __u32 psn;
+       __u8  len;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_info {
+       __u32 id;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_mra {
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  timeout;
+       __u8  reserved[2];
+};
+
+struct ib_ucm_lap {
+       __u64 path;
+       __u64 data;
+       __u32 id;
+       __u8  len;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_sidr_req {
+       __u32 id;
+       __u32 timeout;
+       __be64 sid;
+       __u64 data;
+       __u64 path;
+       __u16 reserved_pkey;
+       __u8  len;
+       __u8  max_cm_retries;
+       __u8  reserved[4];
+};
+
+struct ib_ucm_sidr_rep {
+       __u32 id;
+       __u32 qpn;
+       __u32 qkey;
+       __u32 status;
+       __u64 info;
+       __u64 data;
+       __u8  info_len;
+       __u8  data_len;
+       __u8  reserved[6];
+};
+/*
+ * event notification ABI structures.
+ */
+struct ib_ucm_event_get {
+       __u64 response;
+       __u64 data;
+       __u64 info;
+       __u8  data_len;
+       __u8  info_len;
+       __u8  reserved[6];
+};
+
+struct ib_ucm_req_event_resp {
+       struct ib_user_path_rec primary_path;
+       struct ib_user_path_rec alternate_path;
+       __be64                 remote_ca_guid;
+       __u32                  remote_qkey;
+       __u32                  remote_qpn;
+       __u32                  qp_type;
+       __u32                  starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  local_cm_response_timeout;
+       __u8  flow_control;
+       __u8  remote_cm_response_timeout;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  port;
+       __u8  reserved[7];
+};
+
+struct ib_ucm_rep_event_resp {
+       __be64 remote_ca_guid;
+       __u32 remote_qkey;
+       __u32 remote_qpn;
+       __u32 starting_psn;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  target_ack_delay;
+       __u8  failover_accepted;
+       __u8  flow_control;
+       __u8  rnr_retry_count;
+       __u8  srq;
+       __u8  reserved[5];
+};
+
+struct ib_ucm_rej_event_resp {
+       __u32 reason;
+       /* ari in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_mra_event_resp {
+       __u8  timeout;
+       __u8  reserved[3];
+};
+
+struct ib_ucm_lap_event_resp {
+       struct ib_user_path_rec path;
+};
+
+struct ib_ucm_apr_event_resp {
+       __u32 status;
+       /* apr info in ib_ucm_event_get info field. */
+};
+
+struct ib_ucm_sidr_req_event_resp {
+       __u16 pkey;
+       __u8  port;
+       __u8  reserved;
+};
+
+struct ib_ucm_sidr_rep_event_resp {
+       __u32 status;
+       __u32 qkey;
+       __u32 qpn;
+       /* info in ib_ucm_event_get info field. */
+};
+
+#define IB_UCM_PRES_DATA      0x01
+#define IB_UCM_PRES_INFO      0x02
+#define IB_UCM_PRES_PRIMARY   0x04
+#define IB_UCM_PRES_ALTERNATE 0x08
+
+struct ib_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 present;
+       __u32 reserved;
+       union {
+               struct ib_ucm_req_event_resp req_resp;
+               struct ib_ucm_rep_event_resp rep_resp;
+               struct ib_ucm_rej_event_resp rej_resp;
+               struct ib_ucm_mra_event_resp mra_resp;
+               struct ib_ucm_lap_event_resp lap_resp;
+               struct ib_ucm_apr_event_resp apr_resp;
+
+               struct ib_ucm_sidr_req_event_resp sidr_req_resp;
+               struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
+
+               __u32                             send_status;
+       } u;
+};
+
+#endif /* IB_USER_CM_H */
diff --git a/lib/libdss-include/rdma/ib_user_mad.h b/lib/libdss-include/rdma/ib_user_mad.h
new file mode 100644 (file)
index 0000000..09f809f
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_MAD_H
+#define IB_USER_MAD_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_MAD_ABI_VERSION        5
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ */
+
+/**
+ * ib_user_mad_hdr_old - Old version of MAD packet header without pkey_index
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ */
+struct ib_user_mad_hdr_old {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+};
+
+/**
+ * ib_user_mad_hdr - MAD packet header
+ *   This layout allows specifying/receiving the P_Key index.  To use
+ *   this capability, an application must call the
+ *   IB_USER_MAD_ENABLE_PKEY ioctl on the user MAD file handle before
+ *   any other actions with the file handle.
+ * @id - ID of agent MAD received with/to be sent with
+ * @status - 0 on successful receive, ETIMEDOUT if no response
+ *   received (transaction ID in data[] will be set to TID of original
+ *   request) (ignored on send)
+ * @timeout_ms - Milliseconds to wait for response (unset on receive)
+ * @retries - Number of automatic retries to attempt
+ * @qpn - Remote QP number received from/to be sent to
+ * @qkey - Remote Q_Key to be sent with (unset on receive)
+ * @lid - Remote lid received from/to be sent to
+ * @sl - Service level received with/to be sent with
+ * @path_bits - Local path bits received with/to be sent with
+ * @grh_present - If set, GRH was received/should be sent
+ * @gid_index - Local GID index to send with (unset on receive)
+ * @hop_limit - Hop limit in GRH
+ * @traffic_class - Traffic class in GRH
+ * @gid - Remote GID in GRH
+ * @flow_label - Flow label in GRH
+ * @pkey_index - P_Key index
+ */
+struct ib_user_mad_hdr {
+       __u32   id;
+       __u32   status;
+       __u32   timeout_ms;
+       __u32   retries;
+       __u32   length;
+       __be32  qpn;
+       __be32  qkey;
+       __be16  lid;
+       __u8    sl;
+       __u8    path_bits;
+       __u8    grh_present;
+       __u8    gid_index;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    gid[16];
+       __be32  flow_label;
+       __u16   pkey_index;
+       __u8    reserved[6];
+};
+
+/**
+ * ib_user_mad - MAD packet
+ * @hdr - MAD packet header
+ * @data - Contents of MAD
+ *
+ */
+struct ib_user_mad {
+       struct ib_user_mad_hdr hdr;
+       __u64   data[0];
+};
+
+/*
+ * Earlier versions of this interface definition declared the
+ * method_mask[] member as an array of __u32 but treated it as a
+ * bitmap made up of longs in the kernel.  This ambiguity meant that
+ * 32-bit big-endian applications that can run on both 32-bit and
+ * 64-bit kernels had no consistent ABI to rely on, and 64-bit
+ * big-endian applications that treated method_mask as being made up
+ * of 32-bit words would have their bitmap misinterpreted.
+ *
+ * To clear up this confusion, we change the declaration of
+ * method_mask[] to use unsigned long and handle the conversion from
+ * 32-bit userspace to 64-bit kernel for big-endian systems in the
+ * compat_ioctl method.  Unfortunately, to keep the structure layout
+ * the same, we need the method_mask[] array to be aligned only to 4
+ * bytes even when long is 64 bits, which forces us into this ugly
+ * typedef.
+ */
+typedef unsigned long __attribute__((aligned(4))) packed_ulong;
+#define IB_USER_MAD_LONGS_PER_METHOD_MASK (128 / (8 * sizeof (long)))
+
+/**
+ * ib_user_mad_reg_req - MAD registration request
+ * @id - Set by the kernel; used to identify agent in future requests.
+ * @qpn - Queue pair number; must be 0 or 1.
+ * @method_mask - The caller will receive unsolicited MADs for any method
+ *   where @method_mask = 1.
+ * @mgmt_class - Indicates which management class of MADs should be receive
+ *   by the caller.  This field is only required if the user wishes to
+ *   receive unsolicited MADs, otherwise it should be 0.
+ * @mgmt_class_version - Indicates which version of MADs for the given
+ *   management class to receive.
+ * @oui: Indicates IEEE OUI when mgmt_class is a vendor class
+ *   in the range from 0x30 to 0x4f. Otherwise not used.
+ * @rmpp_version: If set, indicates the RMPP version used.
+ *
+ */
+struct ib_user_mad_reg_req {
+       __u32   id;
+       packed_ulong method_mask[IB_USER_MAD_LONGS_PER_METHOD_MASK];
+       __u8    qpn;
+       __u8    mgmt_class;
+       __u8    mgmt_class_version;
+       __u8    oui[3];
+       __u8    rmpp_version;
+};
+
+/**
+ * ib_user_mad_reg_req2 - MAD registration request
+ *
+ * @id                 - Set by the _kernel_; used by userspace to identify the
+ *                       registered agent in future requests.
+ * @qpn                - Queue pair number; must be 0 or 1.
+ * @mgmt_class         - Indicates which management class of MADs should be
+ *                       receive by the caller.  This field is only required if
+ *                       the user wishes to receive unsolicited MADs, otherwise
+ *                       it should be 0.
+ * @mgmt_class_version - Indicates which version of MADs for the given
+ *                       management class to receive.
+ * @res                - Ignored.
+ * @flags              - additional registration flags; Must be in the set of
+ *                       flags defined in IB_USER_MAD_REG_FLAGS_CAP
+ * @method_mask        - The caller wishes to receive unsolicited MADs for the
+ *                       methods whose bit(s) is(are) set.
+ * @oui                - Indicates IEEE OUI to use when mgmt_class is a vendor
+ *                       class in the range from 0x30 to 0x4f. Otherwise not
+ *                       used.
+ * @rmpp_version       - If set, indicates the RMPP version to use.
+ */
+enum {
+       IB_USER_MAD_USER_RMPP = (1 << 0),
+};
+#define IB_USER_MAD_REG_FLAGS_CAP (IB_USER_MAD_USER_RMPP)
+struct ib_user_mad_reg_req2 {
+       __u32   id;
+       __u32   qpn;
+       __u8    mgmt_class;
+       __u8    mgmt_class_version;
+       __u16   res;
+       __u32   flags;
+       __u64   method_mask[2];
+       __u32   oui;
+       __u8    rmpp_version;
+       __u8    reserved[3];
+};
+
+#define IB_IOCTL_MAGIC         0x1b
+
+#define IB_USER_MAD_REGISTER_AGENT     _IOWR(IB_IOCTL_MAGIC, 1, \
+                                             struct ib_user_mad_reg_req)
+
+#define IB_USER_MAD_UNREGISTER_AGENT   _IOW(IB_IOCTL_MAGIC, 2, __u32)
+
+#define IB_USER_MAD_ENABLE_PKEY                _IO(IB_IOCTL_MAGIC, 3)
+
+#define IB_USER_MAD_REGISTER_AGENT2     _IOWR(IB_IOCTL_MAGIC, 4, \
+                                             struct ib_user_mad_reg_req2)
+
+#endif /* IB_USER_MAD_H */
diff --git a/lib/libdss-include/rdma/ib_user_sa.h b/lib/libdss-include/rdma/ib_user_sa.h
new file mode 100644 (file)
index 0000000..cfc7c9b
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_SA_H
+#define IB_USER_SA_H
+
+#include <linux/types.h>
+
+enum {
+       IB_PATH_GMP             = 1,
+       IB_PATH_PRIMARY         = (1<<1),
+       IB_PATH_ALTERNATE       = (1<<2),
+       IB_PATH_OUTBOUND        = (1<<3),
+       IB_PATH_INBOUND         = (1<<4),
+       IB_PATH_INBOUND_REVERSE = (1<<5),
+       IB_PATH_BIDIRECTIONAL   = IB_PATH_OUTBOUND | IB_PATH_INBOUND_REVERSE
+};
+
+struct ib_path_rec_data {
+       __u32   flags;
+       __u32   reserved;
+       __u32   path_rec[16];
+};
+
+struct ib_user_path_rec {
+       __u8    dgid[16];
+       __u8    sgid[16];
+       __be16  dlid;
+       __be16  slid;
+       __u32   raw_traffic;
+       __be32  flow_label;
+       __u32   reversible;
+       __u32   mtu;
+       __be16  pkey;
+       __u8    hop_limit;
+       __u8    traffic_class;
+       __u8    numb_path;
+       __u8    sl;
+       __u8    mtu_selector;
+       __u8    rate_selector;
+       __u8    rate;
+       __u8    packet_life_time_selector;
+       __u8    packet_life_time;
+       __u8    preference;
+};
+
+#endif /* IB_USER_SA_H */
diff --git a/lib/libdss-include/rdma/ib_user_verbs.h b/lib/libdss-include/rdma/ib_user_verbs.h
new file mode 100644 (file)
index 0000000..8126c14
--- /dev/null
@@ -0,0 +1,948 @@
+/*
+ * Copyright (c) 2005 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
+ * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
+ * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef IB_USER_VERBS_H
+#define IB_USER_VERBS_H
+
+#include <linux/types.h>
+
+/*
+ * Increment this value if any changes that break userspace ABI
+ * compatibility are made.
+ */
+#define IB_USER_VERBS_ABI_VERSION      6
+#define IB_USER_VERBS_CMD_THRESHOLD    50
+
+enum {
+       IB_USER_VERBS_CMD_GET_CONTEXT,
+       IB_USER_VERBS_CMD_QUERY_DEVICE,
+       IB_USER_VERBS_CMD_QUERY_PORT,
+       IB_USER_VERBS_CMD_ALLOC_PD,
+       IB_USER_VERBS_CMD_DEALLOC_PD,
+       IB_USER_VERBS_CMD_CREATE_AH,
+       IB_USER_VERBS_CMD_MODIFY_AH,
+       IB_USER_VERBS_CMD_QUERY_AH,
+       IB_USER_VERBS_CMD_DESTROY_AH,
+       IB_USER_VERBS_CMD_REG_MR,
+       IB_USER_VERBS_CMD_REG_SMR,
+       IB_USER_VERBS_CMD_REREG_MR,
+       IB_USER_VERBS_CMD_QUERY_MR,
+       IB_USER_VERBS_CMD_DEREG_MR,
+       IB_USER_VERBS_CMD_ALLOC_MW,
+       IB_USER_VERBS_CMD_BIND_MW,
+       IB_USER_VERBS_CMD_DEALLOC_MW,
+       IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
+       IB_USER_VERBS_CMD_CREATE_CQ,
+       IB_USER_VERBS_CMD_RESIZE_CQ,
+       IB_USER_VERBS_CMD_DESTROY_CQ,
+       IB_USER_VERBS_CMD_POLL_CQ,
+       IB_USER_VERBS_CMD_PEEK_CQ,
+       IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
+       IB_USER_VERBS_CMD_CREATE_QP,
+       IB_USER_VERBS_CMD_QUERY_QP,
+       IB_USER_VERBS_CMD_MODIFY_QP,
+       IB_USER_VERBS_CMD_DESTROY_QP,
+       IB_USER_VERBS_CMD_POST_SEND,
+       IB_USER_VERBS_CMD_POST_RECV,
+       IB_USER_VERBS_CMD_ATTACH_MCAST,
+       IB_USER_VERBS_CMD_DETACH_MCAST,
+       IB_USER_VERBS_CMD_CREATE_SRQ,
+       IB_USER_VERBS_CMD_MODIFY_SRQ,
+       IB_USER_VERBS_CMD_QUERY_SRQ,
+       IB_USER_VERBS_CMD_DESTROY_SRQ,
+       IB_USER_VERBS_CMD_POST_SRQ_RECV,
+       IB_USER_VERBS_CMD_OPEN_XRCD,
+       IB_USER_VERBS_CMD_CLOSE_XRCD,
+       IB_USER_VERBS_CMD_CREATE_XSRQ,
+       IB_USER_VERBS_CMD_OPEN_QP,
+};
+
+enum {
+       IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,
+       IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,
+       IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,
+       IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
+       IB_USER_VERBS_EX_CMD_DESTROY_FLOW,
+};
+
+/*
+ * Make sure that all structs defined in this file remain laid out so
+ * that they pack the same way on 32-bit and 64-bit architectures (to
+ * avoid incompatibility between 32-bit userspace and 64-bit kernels).
+ * Specifically:
+ *  - Do not use pointer types -- pass pointers in __u64 instead.
+ *  - Make sure that any structure larger than 4 bytes is padded to a
+ *    multiple of 8 bytes.  Otherwise the structure size will be
+ *    different between 32-bit and 64-bit architectures.
+ */
+
+struct ib_uverbs_async_event_desc {
+       __u64 element;
+       __u32 event_type;       /* enum ib_event_type */
+       __u32 reserved;
+};
+
+struct ib_uverbs_comp_event_desc {
+       __u64 cq_handle;
+};
+
+/*
+ * All commands from userspace should start with a __u32 command field
+ * followed by __u16 in_words and out_words fields (which give the
+ * length of the command block and response buffer if any in 32-bit
+ * words).  The kernel driver will read these fields first and read
+ * the rest of the command struct based on these value.
+ */
+
+#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
+#define IB_USER_VERBS_CMD_FLAGS_MASK 0xff000000u
+#define IB_USER_VERBS_CMD_FLAGS_SHIFT 24
+
+#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80
+
+struct ib_uverbs_cmd_hdr {
+       __u32 command;
+       __u16 in_words;
+       __u16 out_words;
+};
+
+struct ib_uverbs_ex_cmd_hdr {
+       __u64 response;
+       __u16 provider_in_words;
+       __u16 provider_out_words;
+       __u32 cmd_hdr_reserved;
+};
+
+struct ib_uverbs_get_context {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_get_context_resp {
+       __u32 async_fd;
+       __u32 num_comp_vectors;
+};
+
+struct ib_uverbs_query_device {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_device_resp {
+       __u64 fw_ver;
+       __be64 node_guid;
+       __be64 sys_image_guid;
+       __u64 max_mr_size;
+       __u64 page_size_cap;
+       __u32 vendor_id;
+       __u32 vendor_part_id;
+       __u32 hw_ver;
+       __u32 max_qp;
+       __u32 max_qp_wr;
+       __u32 device_cap_flags;
+       __u32 max_sge;
+       __u32 max_sge_rd;
+       __u32 max_cq;
+       __u32 max_cqe;
+       __u32 max_mr;
+       __u32 max_pd;
+       __u32 max_qp_rd_atom;
+       __u32 max_ee_rd_atom;
+       __u32 max_res_rd_atom;
+       __u32 max_qp_init_rd_atom;
+       __u32 max_ee_init_rd_atom;
+       __u32 atomic_cap;
+       __u32 max_ee;
+       __u32 max_rdd;
+       __u32 max_mw;
+       __u32 max_raw_ipv6_qp;
+       __u32 max_raw_ethy_qp;
+       __u32 max_mcast_grp;
+       __u32 max_mcast_qp_attach;
+       __u32 max_total_mcast_qp_attach;
+       __u32 max_ah;
+       __u32 max_fmr;
+       __u32 max_map_per_fmr;
+       __u32 max_srq;
+       __u32 max_srq_wr;
+       __u32 max_srq_sge;
+       __u16 max_pkeys;
+       __u8  local_ca_ack_delay;
+       __u8  phys_port_cnt;
+       __u8  reserved[4];
+};
+
+struct ib_uverbs_ex_query_device {
+       __u32 comp_mask;
+       __u32 reserved;
+};
+
+struct ib_uverbs_odp_caps {
+       __u64 general_caps;
+       struct {
+               __u32 rc_odp_caps;
+               __u32 uc_odp_caps;
+               __u32 ud_odp_caps;
+       } per_transport_caps;
+       __u32 reserved;
+};
+
+struct ib_uverbs_ex_query_device_resp {
+       struct ib_uverbs_query_device_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+       struct ib_uverbs_odp_caps odp_caps;
+       __u64 timestamp_mask;
+       __u64 hca_core_clock; /* in KHZ */
+};
+
+struct ib_uverbs_query_port {
+       __u64 response;
+       __u8  port_num;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_port_resp {
+       __u32 port_cap_flags;
+       __u32 max_msg_sz;
+       __u32 bad_pkey_cntr;
+       __u32 qkey_viol_cntr;
+       __u32 gid_tbl_len;
+       __u16 pkey_tbl_len;
+       __u16 lid;
+       __u16 sm_lid;
+       __u8  state;
+       __u8  max_mtu;
+       __u8  active_mtu;
+       __u8  lmc;
+       __u8  max_vl_num;
+       __u8  sm_sl;
+       __u8  subnet_timeout;
+       __u8  init_type_reply;
+       __u8  active_width;
+       __u8  active_speed;
+       __u8  phys_state;
+       __u8  link_layer;
+       __u8  reserved[2];
+};
+
+struct ib_uverbs_alloc_pd {
+       __u64 response;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_alloc_pd_resp {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_dealloc_pd {
+       __u32 pd_handle;
+};
+
+struct ib_uverbs_open_xrcd {
+       __u64 response;
+       __u32 fd;
+       __u32 oflags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_open_xrcd_resp {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_close_xrcd {
+       __u32 xrcd_handle;
+};
+
+struct ib_uverbs_reg_mr {
+       __u64 response;
+       __u64 start;
+       __u64 length;
+       __u64 hca_va;
+       __u32 pd_handle;
+       __u32 access_flags;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_reg_mr_resp {
+       __u32 mr_handle;
+       __u32 lkey;
+       __u32 rkey;
+};
+
+struct ib_uverbs_rereg_mr {
+       __u64 response;
+       __u32 mr_handle;
+       __u32 flags;
+       __u64 start;
+       __u64 length;
+       __u64 hca_va;
+       __u32 pd_handle;
+       __u32 access_flags;
+};
+
+struct ib_uverbs_rereg_mr_resp {
+       __u32 lkey;
+       __u32 rkey;
+};
+
+struct ib_uverbs_dereg_mr {
+       __u32 mr_handle;
+};
+
+struct ib_uverbs_alloc_mw {
+       __u64 response;
+       __u32 pd_handle;
+       __u8  mw_type;
+       __u8  reserved[3];
+};
+
+struct ib_uverbs_alloc_mw_resp {
+       __u32 mw_handle;
+       __u32 rkey;
+};
+
+struct ib_uverbs_dealloc_mw {
+       __u32 mw_handle;
+};
+
+struct ib_uverbs_create_comp_channel {
+       __u64 response;
+};
+
+struct ib_uverbs_create_comp_channel_resp {
+       __u32 fd;
+};
+
+struct ib_uverbs_create_cq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 cqe;
+       __u32 comp_vector;
+       __s32 comp_channel;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_ex_create_cq {
+       __u64 user_handle;
+       __u32 cqe;
+       __u32 comp_vector;
+       __s32 comp_channel;
+       __u32 comp_mask;
+       __u32 flags;
+       __u32 reserved;
+};
+
+struct ib_uverbs_create_cq_resp {
+       __u32 cq_handle;
+       __u32 cqe;
+};
+
+struct ib_uverbs_ex_create_cq_resp {
+       struct ib_uverbs_create_cq_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+};
+
+struct ib_uverbs_resize_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 cqe;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_resize_cq_resp {
+       __u32 cqe;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_poll_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 ne;
+};
+
+struct ib_uverbs_wc {
+       __u64 wr_id;
+       __u32 status;
+       __u32 opcode;
+       __u32 vendor_err;
+       __u32 byte_len;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       __u32 qp_num;
+       __u32 src_qp;
+       __u32 wc_flags;
+       __u16 pkey_index;
+       __u16 slid;
+       __u8 sl;
+       __u8 dlid_path_bits;
+       __u8 port_num;
+       __u8 reserved;
+};
+
+struct ib_uverbs_poll_cq_resp {
+       __u32 count;
+       __u32 reserved;
+       struct ib_uverbs_wc wc[0];
+};
+
+struct ib_uverbs_req_notify_cq {
+       __u32 cq_handle;
+       __u32 solicited_only;
+};
+
+struct ib_uverbs_destroy_cq {
+       __u64 response;
+       __u32 cq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_cq_resp {
+       __u32 comp_events_reported;
+       __u32 async_events_reported;
+};
+
+struct ib_uverbs_global_route {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  reserved;
+};
+
+struct ib_uverbs_ah_attr {
+       struct ib_uverbs_global_route grh;
+       __u16 dlid;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+       __u8  reserved;
+};
+
+struct ib_uverbs_qp_attr {
+       __u32   qp_attr_mask;
+       __u32   qp_state;
+       __u32   cur_qp_state;
+       __u32   path_mtu;
+       __u32   path_mig_state;
+       __u32   qkey;
+       __u32   rq_psn;
+       __u32   sq_psn;
+       __u32   dest_qp_num;
+       __u32   qp_access_flags;
+
+       struct ib_uverbs_ah_attr ah_attr;
+       struct ib_uverbs_ah_attr alt_ah_attr;
+
+       /* ib_qp_cap */
+       __u32   max_send_wr;
+       __u32   max_recv_wr;
+       __u32   max_send_sge;
+       __u32   max_recv_sge;
+       __u32   max_inline_data;
+
+       __u16   pkey_index;
+       __u16   alt_pkey_index;
+       __u8    en_sqd_async_notify;
+       __u8    sq_draining;
+       __u8    max_rd_atomic;
+       __u8    max_dest_rd_atomic;
+       __u8    min_rnr_timer;
+       __u8    port_num;
+       __u8    timeout;
+       __u8    retry_cnt;
+       __u8    rnr_retry;
+       __u8    alt_port_num;
+       __u8    alt_timeout;
+       __u8    reserved[5];
+};
+
+struct ib_uverbs_create_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 send_cq_handle;
+       __u32 recv_cq_handle;
+       __u32 srq_handle;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u8  sq_sig_all;
+       __u8  qp_type;
+       __u8  is_srq;
+       __u8  reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_ex_create_qp {
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 send_cq_handle;
+       __u32 recv_cq_handle;
+       __u32 srq_handle;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u8  sq_sig_all;
+       __u8  qp_type;
+       __u8  is_srq;
+       __u8 reserved;
+       __u32 comp_mask;
+       __u32 create_flags;
+};
+
+struct ib_uverbs_open_qp {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 qpn;
+       __u8  qp_type;
+       __u8  reserved[7];
+       __u64 driver_data[0];
+};
+
+/* also used for open response */
+struct ib_uverbs_create_qp_resp {
+       __u32 qp_handle;
+       __u32 qpn;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 reserved;
+};
+
+struct ib_uverbs_ex_create_qp_resp {
+       struct ib_uverbs_create_qp_resp base;
+       __u32 comp_mask;
+       __u32 response_length;
+};
+
+/*
+ * This struct needs to remain a multiple of 8 bytes to keep the
+ * alignment of the modify QP parameters.
+ */
+struct ib_uverbs_qp_dest {
+       __u8  dgid[16];
+       __u32 flow_label;
+       __u16 dlid;
+       __u16 reserved;
+       __u8  sgid_index;
+       __u8  hop_limit;
+       __u8  traffic_class;
+       __u8  sl;
+       __u8  src_path_bits;
+       __u8  static_rate;
+       __u8  is_global;
+       __u8  port_num;
+};
+
+struct ib_uverbs_query_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_qp_resp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 max_send_wr;
+       __u32 max_recv_wr;
+       __u32 max_send_sge;
+       __u32 max_recv_sge;
+       __u32 max_inline_data;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  sq_draining;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  sq_sig_all;
+       __u8  reserved[5];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp {
+       struct ib_uverbs_qp_dest dest;
+       struct ib_uverbs_qp_dest alt_dest;
+       __u32 qp_handle;
+       __u32 attr_mask;
+       __u32 qkey;
+       __u32 rq_psn;
+       __u32 sq_psn;
+       __u32 dest_qp_num;
+       __u32 qp_access_flags;
+       __u16 pkey_index;
+       __u16 alt_pkey_index;
+       __u8  qp_state;
+       __u8  cur_qp_state;
+       __u8  path_mtu;
+       __u8  path_mig_state;
+       __u8  en_sqd_async_notify;
+       __u8  max_rd_atomic;
+       __u8  max_dest_rd_atomic;
+       __u8  min_rnr_timer;
+       __u8  port_num;
+       __u8  timeout;
+       __u8  retry_cnt;
+       __u8  rnr_retry;
+       __u8  alt_port_num;
+       __u8  alt_timeout;
+       __u8  reserved[2];
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_modify_qp_resp {
+};
+
+struct ib_uverbs_destroy_qp {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_qp_resp {
+       __u32 events_reported;
+};
+
+/*
+ * The ib_uverbs_sge structure isn't used anywhere, since we assume
+ * the ib_sge structure is packed the same way on 32-bit and 64-bit
+ * architectures in both kernel and user space.  It's just here to
+ * document the ABI.
+ */
+struct ib_uverbs_sge {
+       __u64 addr;
+       __u32 length;
+       __u32 lkey;
+};
+
+struct ib_uverbs_send_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 opcode;
+       __u32 send_flags;
+       union {
+               __u32 imm_data;
+               __u32 invalidate_rkey;
+       } ex;
+       union {
+               struct {
+                       __u64 remote_addr;
+                       __u32 rkey;
+                       __u32 reserved;
+               } rdma;
+               struct {
+                       __u64 remote_addr;
+                       __u64 compare_add;
+                       __u64 swap;
+                       __u32 rkey;
+                       __u32 reserved;
+               } atomic;
+               struct {
+                       __u32 ah;
+                       __u32 remote_qpn;
+                       __u32 remote_qkey;
+                       __u32 reserved;
+               } ud;
+       } wr;
+};
+
+struct ib_uverbs_post_send {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_send_wr send_wr[0];
+};
+
+struct ib_uverbs_post_send_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_recv_wr {
+       __u64 wr_id;
+       __u32 num_sge;
+       __u32 reserved;
+};
+
+struct ib_uverbs_post_recv {
+       __u64 response;
+       __u32 qp_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv_wr[0];
+};
+
+struct ib_uverbs_post_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_post_srq_recv {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 wr_count;
+       __u32 sge_count;
+       __u32 wqe_size;
+       struct ib_uverbs_recv_wr recv[0];
+};
+
+struct ib_uverbs_post_srq_recv_resp {
+       __u32 bad_wr;
+};
+
+struct ib_uverbs_create_ah {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 reserved;
+       struct ib_uverbs_ah_attr attr;
+};
+
+struct ib_uverbs_create_ah_resp {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_destroy_ah {
+       __u32 ah_handle;
+};
+
+struct ib_uverbs_attach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_detach_mcast {
+       __u8  gid[16];
+       __u32 qp_handle;
+       __u16 mlid;
+       __u16 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_flow_spec_hdr {
+       __u32 type;
+       __u16 size;
+       __u16 reserved;
+       /* followed by flow_spec */
+       __u64 flow_spec_data[0];
+};
+
+struct ib_uverbs_flow_eth_filter {
+       __u8  dst_mac[6];
+       __u8  src_mac[6];
+       __be16 ether_type;
+       __be16 vlan_tag;
+};
+
+struct ib_uverbs_flow_spec_eth {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_eth_filter val;
+       struct ib_uverbs_flow_eth_filter mask;
+};
+
+struct ib_uverbs_flow_ipv4_filter {
+       __be32 src_ip;
+       __be32 dst_ip;
+};
+
+struct ib_uverbs_flow_spec_ipv4 {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_ipv4_filter val;
+       struct ib_uverbs_flow_ipv4_filter mask;
+};
+
+struct ib_uverbs_flow_tcp_udp_filter {
+       __be16 dst_port;
+       __be16 src_port;
+};
+
+struct ib_uverbs_flow_spec_tcp_udp {
+       union {
+               struct ib_uverbs_flow_spec_hdr hdr;
+               struct {
+                       __u32 type;
+                       __u16 size;
+                       __u16 reserved;
+               };
+       };
+       struct ib_uverbs_flow_tcp_udp_filter val;
+       struct ib_uverbs_flow_tcp_udp_filter mask;
+};
+
+struct ib_uverbs_flow_attr {
+       __u32 type;
+       __u16 size;
+       __u16 priority;
+       __u8  num_of_specs;
+       __u8  reserved[2];
+       __u8  port;
+       __u32 flags;
+       /* Following are the optional layers according to user request
+        * struct ib_flow_spec_xxx
+        * struct ib_flow_spec_yyy
+        */
+       struct ib_uverbs_flow_spec_hdr flow_specs[0];
+};
+
+struct ib_uverbs_create_flow  {
+       __u32 comp_mask;
+       __u32 qp_handle;
+       struct ib_uverbs_flow_attr flow_attr;
+};
+
+struct ib_uverbs_create_flow_resp {
+       __u32 comp_mask;
+       __u32 flow_handle;
+};
+
+struct ib_uverbs_destroy_flow  {
+       __u32 comp_mask;
+       __u32 flow_handle;
+};
+
+struct ib_uverbs_create_srq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_xsrq {
+       __u64 response;
+       __u64 user_handle;
+       __u32 srq_type;
+       __u32 pd_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+       __u32 xrcd_handle;
+       __u32 cq_handle;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_create_srq_resp {
+       __u32 srq_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srqn;
+};
+
+struct ib_uverbs_modify_srq {
+       __u32 srq_handle;
+       __u32 attr_mask;
+       __u32 max_wr;
+       __u32 srq_limit;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+       __u64 driver_data[0];
+};
+
+struct ib_uverbs_query_srq_resp {
+       __u32 max_wr;
+       __u32 max_sge;
+       __u32 srq_limit;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq {
+       __u64 response;
+       __u32 srq_handle;
+       __u32 reserved;
+};
+
+struct ib_uverbs_destroy_srq_resp {
+       __u32 events_reported;
+};
+
+#endif /* IB_USER_VERBS_H */
diff --git a/lib/libdss-include/rdma/rdma_netlink.h b/lib/libdss-include/rdma/rdma_netlink.h
new file mode 100644 (file)
index 0000000..3eb9347
--- /dev/null
@@ -0,0 +1,214 @@
+#ifndef _RDMA_NETLINK_H
+#define _RDMA_NETLINK_H
+
+#include <linux/types.h>
+
+enum {
+       RDMA_NL_RDMA_CM = 1,
+       RDMA_NL_NES,
+       RDMA_NL_C4IW,
+       RDMA_NL_LS,     /* RDMA Local Services */
+       RDMA_NL_NUM_CLIENTS
+};
+
+enum {
+       RDMA_NL_GROUP_CM = 1,
+       RDMA_NL_GROUP_IWPM,
+       RDMA_NL_GROUP_LS,
+       RDMA_NL_NUM_GROUPS
+};
+
+#define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
+#define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
+#define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
+
+enum {
+       RDMA_NL_RDMA_CM_ID_STATS = 0,
+       RDMA_NL_RDMA_CM_NUM_OPS
+};
+
+enum {
+       RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1,
+       RDMA_NL_RDMA_CM_ATTR_DST_ADDR,
+       RDMA_NL_RDMA_CM_NUM_ATTR,
+};
+
+/* iwarp port mapper op-codes */
+enum {
+       RDMA_NL_IWPM_REG_PID = 0,
+       RDMA_NL_IWPM_ADD_MAPPING,
+       RDMA_NL_IWPM_QUERY_MAPPING,
+       RDMA_NL_IWPM_REMOVE_MAPPING,
+       RDMA_NL_IWPM_REMOTE_INFO,
+       RDMA_NL_IWPM_HANDLE_ERR,
+       RDMA_NL_IWPM_MAPINFO,
+       RDMA_NL_IWPM_MAPINFO_NUM,
+       RDMA_NL_IWPM_NUM_OPS
+};
+
+struct rdma_cm_id_stats {
+       __u32   qp_num;
+       __u32   bound_dev_if;
+       __u32   port_space;
+       __s32   pid;
+       __u8    cm_state;
+       __u8    node_type;
+       __u8    port_num;
+       __u8    qp_type;
+};
+
+enum {
+       IWPM_NLA_REG_PID_UNSPEC = 0,
+       IWPM_NLA_REG_PID_SEQ,
+       IWPM_NLA_REG_IF_NAME,
+       IWPM_NLA_REG_IBDEV_NAME,
+       IWPM_NLA_REG_ULIB_NAME,
+       IWPM_NLA_REG_PID_MAX
+};
+
+enum {
+       IWPM_NLA_RREG_PID_UNSPEC = 0,
+       IWPM_NLA_RREG_PID_SEQ,
+       IWPM_NLA_RREG_IBDEV_NAME,
+       IWPM_NLA_RREG_ULIB_NAME,
+       IWPM_NLA_RREG_ULIB_VER,
+       IWPM_NLA_RREG_PID_ERR,
+       IWPM_NLA_RREG_PID_MAX
+
+};
+
+enum {
+       IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0,
+       IWPM_NLA_MANAGE_MAPPING_SEQ,
+       IWPM_NLA_MANAGE_ADDR,
+       IWPM_NLA_MANAGE_MAPPED_LOC_ADDR,
+       IWPM_NLA_RMANAGE_MAPPING_ERR,
+       IWPM_NLA_RMANAGE_MAPPING_MAX
+};
+
+#define IWPM_NLA_MANAGE_MAPPING_MAX 3
+#define IWPM_NLA_QUERY_MAPPING_MAX  4
+#define IWPM_NLA_MAPINFO_SEND_MAX   3
+
+enum {
+       IWPM_NLA_QUERY_MAPPING_UNSPEC = 0,
+       IWPM_NLA_QUERY_MAPPING_SEQ,
+       IWPM_NLA_QUERY_LOCAL_ADDR,
+       IWPM_NLA_QUERY_REMOTE_ADDR,
+       IWPM_NLA_RQUERY_MAPPED_LOC_ADDR,
+       IWPM_NLA_RQUERY_MAPPED_REM_ADDR,
+       IWPM_NLA_RQUERY_MAPPING_ERR,
+       IWPM_NLA_RQUERY_MAPPING_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_REQ_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_ULIB_NAME,
+       IWPM_NLA_MAPINFO_ULIB_VER,
+       IWPM_NLA_MAPINFO_REQ_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_LOCAL_ADDR,
+       IWPM_NLA_MAPINFO_MAPPED_ADDR,
+       IWPM_NLA_MAPINFO_MAX
+};
+
+enum {
+       IWPM_NLA_MAPINFO_NUM_UNSPEC = 0,
+       IWPM_NLA_MAPINFO_SEQ,
+       IWPM_NLA_MAPINFO_SEND_NUM,
+       IWPM_NLA_MAPINFO_ACK_NUM,
+       IWPM_NLA_MAPINFO_NUM_MAX
+};
+
+enum {
+       IWPM_NLA_ERR_UNSPEC = 0,
+       IWPM_NLA_ERR_SEQ,
+       IWPM_NLA_ERR_CODE,
+       IWPM_NLA_ERR_MAX
+};
+
+/*
+ * Local service operations:
+ *   RESOLVE - The client requests the local service to resolve a path.
+ *   SET_TIMEOUT - The local service requests the client to set the timeout.
+ */
+enum {
+       RDMA_NL_LS_OP_RESOLVE = 0,
+       RDMA_NL_LS_OP_SET_TIMEOUT,
+       RDMA_NL_LS_NUM_OPS
+};
+
+/* Local service netlink message flags */
+#define RDMA_NL_LS_F_ERR       0x0100  /* Failed response */
+
+/*
+ * Local service resolve operation family header.
+ * The layout for the resolve operation:
+ *    nlmsg header
+ *    family header
+ *    attributes
+ */
+
+/*
+ * Local service path use:
+ * Specify how the path(s) will be used.
+ *   ALL - For connected CM operation (6 pathrecords)
+ *   UNIDIRECTIONAL - For unidirectional UD (1 pathrecord)
+ *   GMP - For miscellaneous GMP like operation (at least 1 reversible
+ *         pathrecord)
+ */
+enum {
+       LS_RESOLVE_PATH_USE_ALL = 0,
+       LS_RESOLVE_PATH_USE_UNIDIRECTIONAL,
+       LS_RESOLVE_PATH_USE_GMP,
+       LS_RESOLVE_PATH_USE_MAX
+};
+
+#define LS_DEVICE_NAME_MAX 64
+
+struct rdma_ls_resolve_header {
+       __u8 device_name[LS_DEVICE_NAME_MAX];
+       __u8 port_num;
+       __u8 path_use;
+};
+
+/* Local service attribute type */
+#define RDMA_NLA_F_MANDATORY   (1 << 13)
+#define RDMA_NLA_TYPE_MASK     (~(NLA_F_NESTED | NLA_F_NET_BYTEORDER | \
+                                 RDMA_NLA_F_MANDATORY))
+
+/*
+ * Local service attributes:
+ *   Attr Name       Size                       Byte order
+ *   -----------------------------------------------------
+ *   PATH_RECORD     struct ib_path_rec_data
+ *   TIMEOUT         u32                        cpu
+ *   SERVICE_ID      u64                        cpu
+ *   DGID            u8[16]                     BE
+ *   SGID            u8[16]                     BE
+ *   TCLASS          u8
+ *   PKEY            u16                        cpu
+ *   QOS_CLASS       u16                        cpu
+ */
+enum {
+       LS_NLA_TYPE_UNSPEC = 0,
+       LS_NLA_TYPE_PATH_RECORD,
+       LS_NLA_TYPE_TIMEOUT,
+       LS_NLA_TYPE_SERVICE_ID,
+       LS_NLA_TYPE_DGID,
+       LS_NLA_TYPE_SGID,
+       LS_NLA_TYPE_TCLASS,
+       LS_NLA_TYPE_PKEY,
+       LS_NLA_TYPE_QOS_CLASS,
+       LS_NLA_TYPE_MAX
+};
+
+/* Local service DGID/SGID attribute: big endian */
+struct rdma_nla_ls_gid {
+       __u8            gid[16];
+};
+
+#endif /* _RDMA_NETLINK_H */
diff --git a/lib/libdss-include/rdma/rdma_user_cm.h b/lib/libdss-include/rdma/rdma_user_cm.h
new file mode 100644 (file)
index 0000000..3066718
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+ * Copyright (c) 2005-2006 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef RDMA_USER_CM_H
+#define RDMA_USER_CM_H
+
+#include <linux/types.h>
+#include <linux/socket.h>
+#include <linux/in6.h>
+#include <rdma/ib_user_verbs.h>
+#include <rdma/ib_user_sa.h>
+
+#define RDMA_USER_CM_ABI_VERSION       4
+
+#define RDMA_MAX_PRIVATE_DATA          256
+
+enum {
+       RDMA_USER_CM_CMD_CREATE_ID,
+       RDMA_USER_CM_CMD_DESTROY_ID,
+       RDMA_USER_CM_CMD_BIND_IP,
+       RDMA_USER_CM_CMD_RESOLVE_IP,
+       RDMA_USER_CM_CMD_RESOLVE_ROUTE,
+       RDMA_USER_CM_CMD_QUERY_ROUTE,
+       RDMA_USER_CM_CMD_CONNECT,
+       RDMA_USER_CM_CMD_LISTEN,
+       RDMA_USER_CM_CMD_ACCEPT,
+       RDMA_USER_CM_CMD_REJECT,
+       RDMA_USER_CM_CMD_DISCONNECT,
+       RDMA_USER_CM_CMD_INIT_QP_ATTR,
+       RDMA_USER_CM_CMD_GET_EVENT,
+       RDMA_USER_CM_CMD_GET_OPTION,
+       RDMA_USER_CM_CMD_SET_OPTION,
+       RDMA_USER_CM_CMD_NOTIFY,
+       RDMA_USER_CM_CMD_JOIN_IP_MCAST,
+       RDMA_USER_CM_CMD_LEAVE_MCAST,
+       RDMA_USER_CM_CMD_MIGRATE_ID,
+       RDMA_USER_CM_CMD_QUERY,
+       RDMA_USER_CM_CMD_BIND,
+       RDMA_USER_CM_CMD_RESOLVE_ADDR,
+       RDMA_USER_CM_CMD_JOIN_MCAST
+};
+
+/*
+ * command ABI structures.
+ */
+struct rdma_ucm_cmd_hdr {
+       __u32 cmd;
+       __u16 in;
+       __u16 out;
+};
+
+struct rdma_ucm_create_id {
+       __u64 uid;
+       __u64 response;
+       __u16 ps;
+       __u8  qp_type;
+       __u8  reserved[5];
+};
+
+struct rdma_ucm_create_id_resp {
+       __u32 id;
+};
+
+struct rdma_ucm_destroy_id {
+       __u64 response;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_destroy_id_resp {
+       __u32 events_reported;
+};
+
+struct rdma_ucm_bind_ip {
+       __u64 response;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_bind {
+       __u32 id;
+       __u16 addr_size;
+       __u16 reserved;
+       struct sockaddr_storage addr;
+};
+
+struct rdma_ucm_resolve_ip {
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+struct rdma_ucm_resolve_addr {
+       __u32 id;
+       __u32 timeout_ms;
+       __u16 src_size;
+       __u16 dst_size;
+       __u32 reserved;
+       struct sockaddr_storage src_addr;
+       struct sockaddr_storage dst_addr;
+};
+
+struct rdma_ucm_resolve_route {
+       __u32 id;
+       __u32 timeout_ms;
+};
+
+enum {
+       RDMA_USER_CM_QUERY_ADDR,
+       RDMA_USER_CM_QUERY_PATH,
+       RDMA_USER_CM_QUERY_GID
+};
+
+struct rdma_ucm_query {
+       __u64 response;
+       __u32 id;
+       __u32 option;
+};
+
+struct rdma_ucm_query_route_resp {
+       __u64 node_guid;
+       struct ib_user_path_rec ib_route[2];
+       struct sockaddr_in6 src_addr;
+       struct sockaddr_in6 dst_addr;
+       __u32 num_paths;
+       __u8 port_num;
+       __u8 reserved[3];
+};
+
+struct rdma_ucm_query_addr_resp {
+       __u64 node_guid;
+       __u8  port_num;
+       __u8  reserved;
+       __u16 pkey;
+       __u16 src_size;
+       __u16 dst_size;
+       struct sockaddr_storage src_addr;
+       struct sockaddr_storage dst_addr;
+};
+
+struct rdma_ucm_query_path_resp {
+       __u32 num_paths;
+       __u32 reserved;
+       struct ib_path_rec_data path_data[0];
+};
+
+struct rdma_ucm_conn_param {
+       __u32 qp_num;
+       __u32 qkey;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  srq;
+       __u8  responder_resources;
+       __u8  initiator_depth;
+       __u8  flow_control;
+       __u8  retry_count;
+       __u8  rnr_retry_count;
+       __u8  valid;
+};
+
+struct rdma_ucm_ud_param {
+       __u32 qp_num;
+       __u32 qkey;
+       struct ib_uverbs_ah_attr ah_attr;
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+       __u8  private_data_len;
+       __u8  reserved[7];
+};
+
+struct rdma_ucm_connect {
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_listen {
+       __u32 id;
+       __u32 backlog;
+};
+
+struct rdma_ucm_accept {
+       __u64 uid;
+       struct rdma_ucm_conn_param conn_param;
+       __u32 id;
+       __u32 reserved;
+};
+
+struct rdma_ucm_reject {
+       __u32 id;
+       __u8  private_data_len;
+       __u8  reserved[3];
+       __u8  private_data[RDMA_MAX_PRIVATE_DATA];
+};
+
+struct rdma_ucm_disconnect {
+       __u32 id;
+};
+
+struct rdma_ucm_init_qp_attr {
+       __u64 response;
+       __u32 id;
+       __u32 qp_state;
+};
+
+struct rdma_ucm_notify {
+       __u32 id;
+       __u32 event;
+};
+
+struct rdma_ucm_join_ip_mcast {
+       __u64 response;         /* rdma_ucm_create_id_resp */
+       __u64 uid;
+       struct sockaddr_in6 addr;
+       __u32 id;
+};
+
+struct rdma_ucm_join_mcast {
+       __u64 response;         /* rdma_ucma_create_id_resp */
+       __u64 uid;
+       __u32 id;
+       __u16 addr_size;
+       __u16 reserved;
+       struct sockaddr_storage addr;
+};
+
+struct rdma_ucm_get_event {
+       __u64 response;
+};
+
+struct rdma_ucm_event_resp {
+       __u64 uid;
+       __u32 id;
+       __u32 event;
+       __u32 status;
+       union {
+               struct rdma_ucm_conn_param conn;
+               struct rdma_ucm_ud_param   ud;
+       } param;
+};
+
+/* Option levels */
+enum {
+       RDMA_OPTION_ID          = 0,
+       RDMA_OPTION_IB          = 1
+};
+
+/* Option details */
+enum {
+       RDMA_OPTION_ID_TOS       = 0,
+       RDMA_OPTION_ID_REUSEADDR = 1,
+       RDMA_OPTION_ID_AFONLY    = 2,
+       RDMA_OPTION_IB_PATH      = 1
+};
+
+struct rdma_ucm_set_option {
+       __u64 optval;
+       __u32 id;
+       __u32 level;
+       __u32 optname;
+       __u32 optlen;
+};
+
+struct rdma_ucm_migrate_id {
+       __u64 response;
+       __u32 id;
+       __u32 fd;
+};
+
+struct rdma_ucm_migrate_resp {
+       __u32 events_reported;
+};
+
+#endif /* RDMA_USER_CM_H */
diff --git a/lib/libdss-include/re_comp.h b/lib/libdss-include/re_comp.h
new file mode 100644 (file)
index 0000000..1537125
--- /dev/null
@@ -0,0 +1,25 @@
+/*  Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RE_COMP_H
+#define _RE_COMP_H     1
+
+/* This is only a wrapper around the <regex.h> file.  XPG4.2 mentions
+   this name.  */
+#include <regex.h>
+
+#endif /* re_comp.h */
diff --git a/lib/libdss-include/regex.h b/lib/libdss-include/regex.h
new file mode 100644 (file)
index 0000000..90f0851
--- /dev/null
@@ -0,0 +1,581 @@
+/* Definitions for data structures and routines for the regular
+   expression library.
+   Copyright (C) 1985, 1989-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+#include <sys/types.h>
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+#ifdef __USE_GNU
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+       ^  is an anchor if it is at the beginning of a regular
+          expression or after an open-group or an alternation operator;
+       $  is an anchor if it is at the end of a regular expression, or
+          before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+# define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+# define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+   a string of ordinary characters.  For example, the ERE 'a{1' is
+   treated as 'a\{1'.  */
+# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
+   for ^, because it is difficult to scan the regex backwards to find
+   whether ^ should be special.  */
+# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
+
+/* If this bit is set, then \{ cannot be first in an bre or
+   immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
+
+/* If this bit is set, then no_sub will be set to 1 during
+   re_compile_pattern.  */
+# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
+#endif
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+#ifdef __USE_GNU
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_CHAR_CLASSES                                                   \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS            \
+    | RE_INVALID_INTERVAL_ORD)                                         \
+   & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS                          \
+      | RE_CONTEXT_INVALID_OPS ))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS                             \
+   | RE_INVALID_INTERVAL_ORD)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                    \
+   | RE_INVALID_INTERVAL_ORD)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+\f
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+# ifdef RE_DUP_MAX
+#  undef RE_DUP_MAX
+# endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+# define RE_DUP_MAX (0x7fff)
+#endif
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+/* Use PMATCH[0] to delimit the start and end of the search in the
+   buffer.  */
+#define REG_STARTEND (1 << 2)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K
+  REG_ENOSYS = -1,     /* This will never happen for this implementation.  */
+#endif
+
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Inalid collating element.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN          /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+\f
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   and `translate' can be set.  After the pattern has been compiled,
+   the fields `re_nsub', `not_bol' and `not_eol' are available.  All
+   other fields are private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+# define __RE_TRANSLATE_TYPE unsigned char *
+# ifdef __USE_GNU
+#  define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE
+# endif
+#endif
+
+#ifdef __USE_GNU
+# define __REPB_PREFIX(name) name
+#else
+# define __REPB_PREFIX(name) __##name
+#endif
+
+struct re_pattern_buffer
+{
+  /* Space that holds the compiled pattern.  It is declared as
+     `unsigned char *' because its elements are sometimes used as
+     array indexes.  */
+  unsigned char *__REPB_PREFIX(buffer);
+
+  /* Number of bytes to which `buffer' points.  */
+  unsigned long int __REPB_PREFIX(allocated);
+
+  /* Number of bytes actually used in `buffer'.  */
+  unsigned long int __REPB_PREFIX(used);
+
+  /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t __REPB_PREFIX(syntax);
+
+  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the
+     fastmap, if there is one, to skip over impossible starting points
+     for matches.  */
+  char *__REPB_PREFIX(fastmap);
+
+  /* Either a translate table to apply to all characters before
+     comparing them, or zero for no translation.  The translation is
+     applied to a pattern when it is compiled and to a string when it
+     is matched.  */
+  __RE_TRANSLATE_TYPE __REPB_PREFIX(translate);
+
+  /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+  /* Zero if this pattern cannot match the empty string, one else.
+     Well, in truth it's used only in `re_search_2', to see whether or
+     not we should use the fastmap, so we don't set this absolutely
+     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */
+  unsigned __REPB_PREFIX(can_be_null) : 1;
+
+  /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+     for `max (RE_NREGS, re_nsub + 1)' groups.
+     If REGS_REALLOCATE, reallocate space if necessary.
+     If REGS_FIXED, use what's there.  */
+#ifdef __USE_GNU
+# define REGS_UNALLOCATED 0
+# define REGS_REALLOCATE 1
+# define REGS_FIXED 2
+#endif
+  unsigned __REPB_PREFIX(regs_allocated) : 2;
+
+  /* Set to zero when `regex_compile' compiles a pattern; set to one
+     by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned __REPB_PREFIX(fastmap_accurate) : 1;
+
+  /* If set, `re_match_2' does not return information about
+     subexpressions.  */
+  unsigned __REPB_PREFIX(no_sub) : 1;
+
+  /* If set, a beginning-of-line anchor doesn't match at the beginning
+     of the string.  */
+  unsigned __REPB_PREFIX(not_bol) : 1;
+
+  /* Similarly for an end-of-line anchor.  */
+  unsigned __REPB_PREFIX(not_eol) : 1;
+
+  /* If true, an anchor at a newline matches.  */
+  unsigned __REPB_PREFIX(newline_anchor) : 1;
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* Type for byte offsets within the string.  POSIX mandates this.  */
+typedef int regoff_t;
+
+
+#ifdef __USE_GNU
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+# ifndef RE_NREGS
+#  define RE_NREGS 30
+# endif
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+#ifdef __USE_GNU
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.
+
+   To free the allocated storage, you must call `regfree' on BUFFER.
+   Note that the translate table must either have been initialised by
+   `regcomp', with a malloc'ed value, or set to NULL before calling
+   `regfree'.  */
+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
+                                      struct re_pattern_buffer *__buffer);
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern int re_search (struct re_pattern_buffer *__buffer, const char *__string,
+                     int __length, int __start, int __range,
+                     struct re_registers *__regs);
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern int re_search_2 (struct re_pattern_buffer *__buffer,
+                       const char *__string1, int __length1,
+                       const char *__string2, int __length2, int __start,
+                       int __range, struct re_registers *__regs, int __stop);
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern int re_match (struct re_pattern_buffer *__buffer, const char *__string,
+                    int __length, int __start, struct re_registers *__regs);
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern int re_match_2 (struct re_pattern_buffer *__buffer,
+                      const char *__string1, int __length1,
+                      const char *__string2, int __length2, int __start,
+                      struct re_registers *__regs, int __stop);
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers (struct re_pattern_buffer *__buffer,
+                             struct re_registers *__regs,
+                             unsigned int __num_regs,
+                             regoff_t *__starts, regoff_t *__ends);
+#endif /* Use GNU */
+
+#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC)
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  */
+#ifndef __restrict_arr
+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
+     && !defined __GNUG__
+#  define __restrict_arr __restrict
+# else
+#  define __restrict_arr
+# endif
+#endif
+
+/* POSIX compatibility.  */
+extern int regcomp (regex_t *__restrict __preg,
+                   const char *__restrict __pattern,
+                   int __cflags);
+
+extern int regexec (const regex_t *__restrict __preg,
+                   const char *__restrict __string, size_t __nmatch,
+                   regmatch_t __pmatch[__restrict_arr],
+                   int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t *__restrict __preg,
+                       char *__restrict __errbuf, size_t __errbuf_size);
+
+extern void regfree (regex_t *__preg);
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
diff --git a/lib/libdss-include/regexp.h b/lib/libdss-include/regexp.h
new file mode 100644 (file)
index 0000000..6d3bc30
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _REGEXP_H
+#define _REGEXP_H      1
+
+/* The contents of this header file were originally standardized in
+   the Single Unix Specification, Issue 3 (1992).  In Issue 4 (1994)
+   the header was marked as TO BE WITHDRAWN, and new applications
+   were encouraged to use <regex.h> instead.  It was officially
+   withdrawn from the standard in Issue 6 (aka POSIX.1-2001).
+
+   The GNU C Library provided this header through version 2.22. */
+
+#error "The GNU C Library no longer implements <regexp.h>."
+#error "Please update your code to use <regex.h> instead (no trailing 'p')."
+
+#endif /* regexp.h */
diff --git a/lib/libdss-include/resolv.h b/lib/libdss-include/resolv.h
new file mode 100644 (file)
index 0000000..53c3bba
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * Copyright (c) 1983, 1987, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     @(#)resolv.h    8.1 (Berkeley) 6/2/93
+ *     $BINDId: resolv.h,v 8.31 2000/03/30 20:16:50 vixie Exp $
+ */
+
+#ifndef _RESOLV_H_
+
+/* These headers are needed for types used in the `struct res_state'
+   declaration.  */
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#ifndef __need_res_state
+# define _RESOLV_H_
+
+# include <sys/param.h>
+# include <sys/cdefs.h>
+# include <stdio.h>
+# include <arpa/nameser.h>
+#endif
+
+#ifndef __res_state_defined
+# define __res_state_defined
+
+typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
+       res_sendhookact;
+
+typedef res_sendhookact (*res_send_qhook) (struct sockaddr_in * const *__ns,
+                                          const u_char **__query,
+                                          int *__querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+typedef res_sendhookact (*res_send_rhook) (const struct sockaddr_in *__ns,
+                                          const u_char *__query,
+                                          int __querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+/*
+ * Global defines and variables for resolver stub.
+ */
+# define MAXNS                 3       /* max # name servers we'll track */
+# define MAXDFLSRCH            3       /* # default domain levels to try */
+# define MAXDNSRCH             6       /* max # domains in search path */
+# define LOCALDOMAINPARTS      2       /* min levels in name that is "local" */
+
+# define RES_TIMEOUT           5       /* min. seconds between retries */
+# define MAXRESOLVSORT         10      /* number of net to sort on */
+# define RES_MAXNDOTS          15      /* should reflect bit field size */
+# define RES_MAXRETRANS                30      /* only for resolv.conf/RES_OPTIONS */
+# define RES_MAXRETRY          5       /* only for resolv.conf/RES_OPTIONS */
+# define RES_DFLRETRY          2       /* Default #/tries. */
+# define RES_MAXTIME           65535   /* Infinity, in milliseconds. */
+
+struct __res_state {
+       int     retrans;                /* retransmition time interval */
+       int     retry;                  /* number of times to retransmit */
+       u_long  options;                /* option flags - see below. */
+       int     nscount;                /* number of name servers */
+       struct sockaddr_in
+               nsaddr_list[MAXNS];     /* address of name server */
+# define nsaddr        nsaddr_list[0]          /* for backward compatibility */
+       u_short id;                     /* current message id */
+       /* 2 byte hole here.  */
+       char    *dnsrch[MAXDNSRCH+1];   /* components of domain to search */
+       char    defdname[256];          /* default domain (deprecated) */
+       u_long  pfcode;                 /* RES_PRF_ flags - see below. */
+       unsigned ndots:4;               /* threshold for initial abs. query */
+       unsigned nsort:4;               /* number of elements in sort_list[] */
+       unsigned ipv6_unavail:1;        /* connecting to IPv6 server failed */
+       unsigned unused:23;
+       struct {
+               struct in_addr  addr;
+               u_int32_t       mask;
+       } sort_list[MAXRESOLVSORT];
+       /* 4 byte hole here on 64-bit architectures.  */
+       res_send_qhook qhook;           /* query hook */
+       res_send_rhook rhook;           /* response hook */
+       int     res_h_errno;            /* last one set for this context */
+       int     _vcsock;                /* PRIVATE: for res_send VC i/o */
+       u_int   _flags;                 /* PRIVATE: see below */
+       /* 4 byte hole here on 64-bit architectures.  */
+       union {
+               char    pad[52];        /* On an i386 this means 512b total. */
+               struct {
+                       u_int16_t               nscount;
+                       u_int16_t               nsmap[MAXNS];
+                       int                     nssocks[MAXNS];
+                       u_int16_t               nscount6;
+                       u_int16_t               nsinit;
+                       struct sockaddr_in6     *nsaddrs[MAXNS];
+#ifdef _LIBC
+                       unsigned long long int  initstamp
+                         __attribute__((packed));
+#else
+                       unsigned int            _initstamp[2];
+#endif
+               } _ext;
+       } _u;
+};
+
+typedef struct __res_state *res_state;
+# undef __need_res_state
+#endif
+
+#ifdef _RESOLV_H_
+/*
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__RES > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your resolver
+ * is new enough to contain a certain feature.
+ */
+
+#define        __RES   19991006
+
+/*
+ * Resolver configuration file.
+ * Normally not present, but may contain the address of the
+ * inital name server(s) to query and the domain search list.
+ */
+
+#ifndef _PATH_RESCONF
+#define _PATH_RESCONF        "/etc/resolv.conf"
+#endif
+
+struct res_sym {
+       int     number;         /* Identifying number, like T_MX */
+       char *  name;           /* Its symbolic name, like "MX" */
+       char *  humanname;      /* Its fun name, like "mail exchanger" */
+};
+
+/*
+ * Resolver flags (used to be discrete per-module statics ints).
+ */
+#define        RES_F_VC        0x00000001      /* socket is TCP */
+#define        RES_F_CONN      0x00000002      /* socket is connected */
+#define RES_F_EDNS0ERR 0x00000004      /* EDNS0 caused errors */
+
+/* res_findzonecut() options */
+#define        RES_EXHAUSTIVE  0x00000001      /* always do all queries */
+
+/*
+ * Resolver options (keep these in synch with res_debug.c, please)
+ */
+#define RES_INIT       0x00000001      /* address initialized */
+#define RES_DEBUG      0x00000002      /* print debug messages */
+#define RES_AAONLY     0x00000004      /* authoritative answers only (!IMPL)*/
+#define RES_USEVC      0x00000008      /* use virtual circuit */
+#define RES_PRIMARY    0x00000010      /* query primary server only (!IMPL) */
+#define RES_IGNTC      0x00000020      /* ignore trucation errors */
+#define RES_RECURSE    0x00000040      /* recursion desired */
+#define RES_DEFNAMES   0x00000080      /* use default domain name */
+#define RES_STAYOPEN   0x00000100      /* Keep TCP socket open */
+#define RES_DNSRCH     0x00000200      /* search up local domain tree */
+#define        RES_INSECURE1   0x00000400      /* type 1 security disabled */
+#define        RES_INSECURE2   0x00000800      /* type 2 security disabled */
+#define        RES_NOALIASES   0x00001000      /* shuts off HOSTALIASES feature */
+#define        RES_USE_INET6   0x00002000      /* use/map IPv6 in gethostbyname() */
+#define RES_ROTATE     0x00004000      /* rotate ns list after each query */
+#define        RES_NOCHECKNAME 0x00008000      /* do not check names for sanity (!IMPL) */
+#define        RES_KEEPTSIG    0x00010000      /* do not strip TSIG records */
+#define        RES_BLAST       0x00020000      /* blast all recursive servers */
+#define RES_USEBSTRING 0x00040000      /* IPv6 reverse lookup with byte
+                                          strings */
+#define RES_NOIP6DOTINT        0x00080000      /* Do not use .ip6.int in IPv6
+                                          reverse lookup */
+#define RES_USE_EDNS0  0x00100000      /* Use EDNS0.  */
+#define RES_SNGLKUP    0x00200000      /* one outstanding request at a time */
+#define RES_SNGLKUPREOP        0x00400000      /* -"-, but open new socket for each
+                                          request */
+#define RES_USE_DNSSEC 0x00800000      /* use DNSSEC using OK bit in OPT */
+#define RES_NOTLDQUERY 0x01000000      /* Do not look up unqualified name
+                                          as a TLD.  */
+
+#define RES_DEFAULT    (RES_RECURSE|RES_DEFNAMES|RES_DNSRCH|RES_NOIP6DOTINT)
+
+/*
+ * Resolver "pfcode" values.  Used by dig.
+ */
+#define RES_PRF_STATS  0x00000001
+#define RES_PRF_UPDATE 0x00000002
+#define RES_PRF_CLASS   0x00000004
+#define RES_PRF_CMD    0x00000008
+#define RES_PRF_QUES   0x00000010
+#define RES_PRF_ANS    0x00000020
+#define RES_PRF_AUTH   0x00000040
+#define RES_PRF_ADD    0x00000080
+#define RES_PRF_HEAD1  0x00000100
+#define RES_PRF_HEAD2  0x00000200
+#define RES_PRF_TTLID  0x00000400
+#define RES_PRF_HEADX  0x00000800
+#define RES_PRF_QUERY  0x00001000
+#define RES_PRF_REPLY  0x00002000
+#define RES_PRF_INIT   0x00004000
+/*                     0x00008000      */
+
+/* Things involving an internal (static) resolver context. */
+__BEGIN_DECLS
+extern struct __res_state *__res_state(void) __attribute__ ((__const__));
+__END_DECLS
+#define _res (*__res_state())
+
+#ifndef __BIND_NOSTATIC
+#define fp_nquery              __fp_nquery
+#define fp_query               __fp_query
+#define hostalias              __hostalias
+#define p_query                        __p_query
+#define res_close              __res_close
+#define res_init               __res_init
+#define res_isourserver                __res_isourserver
+#define res_mkquery            __res_mkquery
+#define res_query              __res_query
+#define res_querydomain                __res_querydomain
+#define res_search             __res_search
+#define res_send               __res_send
+
+__BEGIN_DECLS
+void           fp_nquery (const u_char *, int, FILE *) __THROW;
+void           fp_query (const u_char *, FILE *) __THROW;
+const char *   hostalias (const char *) __THROW;
+void           p_query (const u_char *) __THROW;
+void           res_close (void) __THROW;
+int            res_init (void) __THROW;
+int            res_isourserver (const struct sockaddr_in *) __THROW;
+int            res_mkquery (int, const char *, int, int, const u_char *,
+                            int, const u_char *, u_char *, int) __THROW;
+int            res_query (const char *, int, int, u_char *, int) __THROW;
+int            res_querydomain (const char *, const char *, int, int,
+                                u_char *, int) __THROW;
+int            res_search (const char *, int, int, u_char *, int) __THROW;
+int            res_send (const u_char *, int, u_char *, int) __THROW;
+__END_DECLS
+#endif
+
+#define b64_ntop               __b64_ntop
+#define b64_pton               __b64_pton
+#define dn_comp                        __dn_comp
+#define dn_count_labels                __dn_count_labels
+#define dn_expand              __dn_expand
+#define dn_skipname            __dn_skipname
+#define fp_resstat             __fp_resstat
+#define loc_aton               __loc_aton
+#define loc_ntoa               __loc_ntoa
+#define p_cdname               __p_cdname
+#define p_cdnname              __p_cdnname
+#define p_class                        __p_class
+#define p_fqname               __p_fqname
+#define p_fqnname              __p_fqnname
+#define p_option               __p_option
+#define p_secstodate           __p_secstodate
+#define p_section              __p_section
+#define p_time                 __p_time
+#define p_type                 __p_type
+#define p_rcode                        __p_rcode
+#define putlong                        __putlong
+#define putshort               __putshort
+#define res_dnok               __res_dnok
+#define res_hnok               __res_hnok
+#define res_hostalias          __res_hostalias
+#define res_mailok             __res_mailok
+#define res_nameinquery                __res_nameinquery
+#define res_nclose             __res_nclose
+#define res_ninit              __res_ninit
+#define res_nmkquery           __res_nmkquery
+#define res_npquery            __res_npquery
+#define res_nquery             __res_nquery
+#define res_nquerydomain       __res_nquerydomain
+#define res_nsearch            __res_nsearch
+#define res_nsend              __res_nsend
+#define res_nisourserver       __res_nisourserver
+#define res_ownok              __res_ownok
+#define res_queriesmatch       __res_queriesmatch
+#define res_randomid           __res_randomid
+#define sym_ntop               __sym_ntop
+#define sym_ntos               __sym_ntos
+#define sym_ston               __sym_ston
+__BEGIN_DECLS
+int            res_hnok (const char *) __THROW;
+int            res_ownok (const char *) __THROW;
+int            res_mailok (const char *) __THROW;
+int            res_dnok (const char *) __THROW;
+int            sym_ston (const struct res_sym *, const char *, int *) __THROW;
+const char *   sym_ntos (const struct res_sym *, int, int *) __THROW;
+const char *   sym_ntop (const struct res_sym *, int, int *) __THROW;
+int            b64_ntop (u_char const *, size_t, char *, size_t) __THROW;
+int            b64_pton (char const *, u_char *, size_t) __THROW;
+int            loc_aton (const char *__ascii, u_char *__binary) __THROW;
+const char *   loc_ntoa (const u_char *__binary, char *__ascii) __THROW;
+int            dn_skipname (const u_char *, const u_char *) __THROW;
+void           putlong (u_int32_t, u_char *) __THROW;
+void           putshort (u_int16_t, u_char *) __THROW;
+const char *   p_class (int) __THROW;
+const char *   p_time (u_int32_t) __THROW;
+const char *   p_type (int) __THROW;
+const char *   p_rcode (int) __THROW;
+const u_char * p_cdnname (const u_char *, const u_char *, int, FILE *)
+     __THROW;
+const u_char * p_cdname (const u_char *, const u_char *, FILE *) __THROW;
+const u_char * p_fqnname (const u_char *__cp, const u_char *__msg,
+                          int, char *, int) __THROW;
+const u_char * p_fqname (const u_char *, const u_char *, FILE *) __THROW;
+const char *   p_option (u_long __option) __THROW;
+char *         p_secstodate (u_long) __THROW;
+int            dn_count_labels (const char *) __THROW;
+int            dn_comp (const char *, u_char *, int, u_char **, u_char **)
+     __THROW;
+int            dn_expand (const u_char *, const u_char *, const u_char *,
+                          char *, int) __THROW;
+u_int          res_randomid (void) __THROW;
+int            res_nameinquery (const char *, int, int,
+                                const u_char *, const u_char *) __THROW;
+int            res_queriesmatch (const u_char *, const u_char *,
+                                 const u_char *, const u_char *) __THROW;
+const char *   p_section (int __section, int __opcode) __THROW;
+/* Things involving a resolver context. */
+int            res_ninit (res_state) __THROW;
+int            res_nisourserver (const res_state,
+                                 const struct sockaddr_in *) __THROW;
+void           fp_resstat (const res_state, FILE *) __THROW;
+void           res_npquery (const res_state, const u_char *, int, FILE *)
+     __THROW;
+const char *   res_hostalias (const res_state, const char *, char *, size_t)
+     __THROW;
+int            res_nquery (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nsearch (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nquerydomain (res_state, const char *, const char *, int,
+                                 int, u_char *, int) __THROW;
+int            res_nmkquery (res_state, int, const char *, int, int,
+                             const u_char *, int, const u_char *, u_char *,
+                             int) __THROW;
+int            res_nsend (res_state, const u_char *, int, u_char *, int)
+     __THROW;
+void           res_nclose (res_state) __THROW;
+__END_DECLS
+#endif
+
+#endif /* !_RESOLV_H_ */
diff --git a/lib/libdss-include/rpc/auth.h b/lib/libdss-include/rpc/auth.h
new file mode 100644 (file)
index 0000000..b25dcfc
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * auth.h, Authentication interface.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The data structures are completely opaque to the client.  The client
+ * is required to pass a AUTH * to routines that create rpc
+ * "sessions".
+ */
+
+#ifndef _RPC_AUTH_H
+
+#define _RPC_AUTH_H    1
+#include <features.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+#define MAX_AUTH_BYTES 400
+#define MAXNETNAMELEN  255     /* maximum length of network user's name */
+
+/*
+ * Status returned from authentication check
+ */
+enum auth_stat {
+       AUTH_OK=0,
+       /*
+        * failed at remote end
+        */
+       AUTH_BADCRED=1,                 /* bogus credentials (seal broken) */
+       AUTH_REJECTEDCRED=2,            /* client should begin new session */
+       AUTH_BADVERF=3,                 /* bogus verifier (seal broken) */
+       AUTH_REJECTEDVERF=4,            /* verifier expired or was replayed */
+       AUTH_TOOWEAK=5,                 /* rejected due to security reasons */
+       /*
+        * failed locally
+       */
+       AUTH_INVALIDRESP=6,             /* bogus response verifier */
+       AUTH_FAILED=7                   /* some unknown reason */
+};
+
+union des_block {
+       struct {
+               u_int32_t high;
+               u_int32_t low;
+       } key;
+       char c[8];
+};
+typedef union des_block des_block;
+extern bool_t xdr_des_block (XDR *__xdrs, des_block *__blkp) __THROW;
+
+/*
+ * Authentication info.  Opaque to client.
+ */
+struct opaque_auth {
+       enum_t  oa_flavor;              /* flavor of auth */
+       caddr_t oa_base;                /* address of more auth stuff */
+       u_int   oa_length;              /* not to exceed MAX_AUTH_BYTES */
+};
+
+/*
+ * Auth handle, interface to client side authenticators.
+ */
+typedef struct AUTH AUTH;
+struct AUTH {
+  struct opaque_auth ah_cred;
+  struct opaque_auth ah_verf;
+  union des_block ah_key;
+  struct auth_ops {
+    void (*ah_nextverf) (AUTH *);
+    int  (*ah_marshal) (AUTH *, XDR *);                /* nextverf & serialize */
+    int  (*ah_validate) (AUTH *, struct opaque_auth *);
+                                               /* validate verifier */
+    int  (*ah_refresh) (AUTH *);               /* refresh credentials */
+    void (*ah_destroy) (AUTH *);               /* destroy this structure */
+  } *ah_ops;
+  caddr_t ah_private;
+};
+
+
+/*
+ * Authentication ops.
+ * The ops and the auth handle provide the interface to the authenticators.
+ *
+ * AUTH        *auth;
+ * XDR *xdrs;
+ * struct opaque_auth verf;
+ */
+#define AUTH_NEXTVERF(auth)            \
+               ((*((auth)->ah_ops->ah_nextverf))(auth))
+#define auth_nextverf(auth)            \
+               ((*((auth)->ah_ops->ah_nextverf))(auth))
+
+#define AUTH_MARSHALL(auth, xdrs)      \
+               ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+#define auth_marshall(auth, xdrs)      \
+               ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+
+#define AUTH_VALIDATE(auth, verfp)     \
+               ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+#define auth_validate(auth, verfp)     \
+               ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+
+#define AUTH_REFRESH(auth)             \
+               ((*((auth)->ah_ops->ah_refresh))(auth))
+#define auth_refresh(auth)             \
+               ((*((auth)->ah_ops->ah_refresh))(auth))
+
+#define AUTH_DESTROY(auth)             \
+               ((*((auth)->ah_ops->ah_destroy))(auth))
+#define auth_destroy(auth)             \
+               ((*((auth)->ah_ops->ah_destroy))(auth))
+
+
+extern struct opaque_auth _null_auth;
+
+
+/*
+ * These are the various implementations of client side authenticators.
+ */
+
+/*
+ * Unix style authentication
+ * AUTH *authunix_create(machname, uid, gid, len, aup_gids)
+ *     char *machname;
+ *     int uid;
+ *     int gid;
+ *     int len;
+ *     int *aup_gids;
+ */
+extern AUTH *authunix_create (char *__machname, __uid_t __uid, __gid_t __gid,
+                             int __len, __gid_t *__aup_gids);
+extern AUTH *authunix_create_default (void);
+extern AUTH *authnone_create (void) __THROW;
+extern AUTH *authdes_create (const char *__servername, u_int __window,
+                            struct sockaddr *__syncaddr, des_block *__ckey)
+     __THROW;
+extern AUTH *authdes_pk_create (const char *, netobj *, u_int,
+                               struct sockaddr *, des_block *) __THROW;
+
+
+#define AUTH_NONE      0               /* no authentication */
+#define        AUTH_NULL       0               /* backward compatibility */
+#define        AUTH_SYS        1               /* unix style (uid, gids) */
+#define        AUTH_UNIX       AUTH_SYS
+#define        AUTH_SHORT      2               /* short hand unix style */
+#define AUTH_DES       3               /* des style (encrypted timestamps) */
+#define AUTH_DH                AUTH_DES        /* Diffie-Hellman (this is DES) */
+#define AUTH_KERB       4               /* kerberos style */
+
+/*
+ *  Netname manipulating functions
+ *
+ */
+extern int getnetname (char *) __THROW;
+extern int host2netname (char *, const char *, const char *) __THROW;
+extern int user2netname (char *, const uid_t, const char *) __THROW;
+extern int netname2user (const char *, uid_t *, gid_t *, int *, gid_t *)
+     __THROW;
+extern int netname2host (const char *, char *, const int) __THROW;
+
+/*
+ *
+ * These routines interface to the keyserv daemon
+ *
+ */
+extern int key_decryptsession (char *, des_block *);
+extern int key_decryptsession_pk (char *, netobj *, des_block *);
+extern int key_encryptsession (char *, des_block *);
+extern int key_encryptsession_pk (char *, netobj *, des_block *);
+extern int key_gendes (des_block *);
+extern int key_setsecret (char *);
+extern int key_secretkey_is_set (void);
+extern int key_get_conv (char *, des_block *);
+
+/*
+ * XDR an opaque authentication struct.
+ */
+extern bool_t xdr_opaque_auth (XDR *, struct opaque_auth *) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/auth.h */
diff --git a/lib/libdss-include/rpc/auth_des.h b/lib/libdss-include/rpc/auth_des.h
new file mode 100644 (file)
index 0000000..2c9f2f4
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RPC_AUTH_DES_H
+#define _RPC_AUTH_DES_H        1
+
+#include <sys/cdefs.h>
+#include <rpc/auth.h>
+
+__BEGIN_DECLS
+
+/* There are two kinds of "names": fullnames and nicknames */
+enum authdes_namekind
+  {
+    ADN_FULLNAME,
+    ADN_NICKNAME
+  };
+
+/* A fullname contains the network name of the client,
+   a conversation key and the window */
+struct authdes_fullname
+  {
+    char *name;                /* network name of client, up to MAXNETNAMELEN */
+    des_block key;     /* conversation key */
+    uint32_t window;   /* associated window */
+  };
+
+/* A credential */
+struct authdes_cred
+  {
+    enum authdes_namekind adc_namekind;
+    struct authdes_fullname adc_fullname;
+    uint32_t adc_nickname;
+  };
+
+/* A timeval replacement for !32bit platforms */
+struct rpc_timeval
+  {
+    uint32_t tv_sec;            /* Seconds.  */
+    uint32_t tv_usec;           /* Microseconds.  */
+  };
+
+/* A des authentication verifier */
+struct authdes_verf
+  {
+    union
+      {
+       struct rpc_timeval adv_ctime;   /* clear time */
+       des_block adv_xtime;            /* crypt time */
+      }
+    adv_time_u;
+    uint32_t adv_int_u;
+  };
+
+/* des authentication verifier: client variety
+
+   adv_timestamp is the current time.
+   adv_winverf is the credential window + 1.
+   Both are encrypted using the conversation key. */
+#define adv_timestamp  adv_time_u.adv_ctime
+#define adv_xtimestamp adv_time_u.adv_xtime
+#define adv_winverf    adv_int_u
+
+/* des authentication verifier: server variety
+
+   adv_timeverf is the client's timestamp + client's window
+   adv_nickname is the server's nickname for the client.
+   adv_timeverf is encrypted using the conversation key. */
+#define adv_timeverf   adv_time_u.adv_ctime
+#define adv_xtimeverf  adv_time_u.adv_xtime
+#define adv_nickname   adv_int_u
+
+/* Map a des credential into a unix cred. */
+extern int authdes_getucred (const struct authdes_cred * __adc,
+                            uid_t * __uid, gid_t * __gid,
+                            short *__grouplen, gid_t * __groups) __THROW;
+
+/* Get the public key for NAME and place it in KEY.  NAME can only be
+   up to MAXNETNAMELEN bytes long and the destination buffer KEY should
+   have HEXKEYBYTES + 1 bytes long to fit all characters from the key.  */
+extern int getpublickey (const char *__name, char *__key) __THROW;
+
+/* Get the secret key for NAME and place it in KEY.  PASSWD is used to
+   decrypt the encrypted key stored in the database.  NAME can only be
+   up to MAXNETNAMELEN bytes long and the destination buffer KEY
+   should have HEXKEYBYTES + 1 bytes long to fit all characters from
+   the key.  */
+extern int getsecretkey (const char *__name, char *__key,
+                        const char *__passwd) __THROW;
+
+extern int rtime (struct sockaddr_in *__addrp, struct rpc_timeval *__timep,
+                 struct rpc_timeval *__timeout) __THROW;
+
+__END_DECLS
+
+
+#endif /* rpc/auth_des.h */
diff --git a/lib/libdss-include/rpc/auth_unix.h b/lib/libdss-include/rpc/auth_unix.h
new file mode 100644 (file)
index 0000000..2f4ee1d
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * auth_unix.h, Protocol for UNIX style authentication parameters for RPC
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * The system is very weak.  The client uses no encryption for  it
+ * credentials and only sends null verifiers.  The server sends backs
+ * null verifiers or optionally a verifier that suggests a new short hand
+ * for the credentials.
+ */
+
+#ifndef _RPC_AUTH_UNIX_H
+#define _RPC_AUTH_UNIX_H       1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+/* The machine name is part of a credential; it may not exceed 255 bytes */
+#define MAX_MACHINE_NAME 255
+
+/* gids compose part of a credential; there may not be more than 16 of them */
+#define NGRPS 16
+
+/*
+ * Unix style credentials.
+ */
+struct authunix_parms
+  {
+    u_long aup_time;
+    char *aup_machname;
+    __uid_t aup_uid;
+    __gid_t aup_gid;
+    u_int aup_len;
+    __gid_t *aup_gids;
+  };
+
+extern bool_t xdr_authunix_parms (XDR *__xdrs, struct authunix_parms *__p)
+     __THROW;
+
+/*
+ * If a response verifier has flavor AUTH_SHORT,
+ * then the body of the response verifier encapsulates the following structure;
+ * again it is serialized in the obvious fashion.
+ */
+struct short_hand_verf
+  {
+    struct opaque_auth new_cred;
+  };
+
+__END_DECLS
+
+#endif /* rpc/auth_unix.h */
diff --git a/lib/libdss-include/rpc/clnt.h b/lib/libdss-include/rpc/clnt.h
new file mode 100644 (file)
index 0000000..f4d4a94
--- /dev/null
@@ -0,0 +1,418 @@
+/*
+ * clnt.h - Client side remote procedure call interface.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_CLNT_H
+#define _RPC_CLNT_H    1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <sys/un.h>
+
+__BEGIN_DECLS
+
+/*
+ * Rpc calls return an enum clnt_stat.  This should be looked at more,
+ * since each implementation is required to live with this (implementation
+ * independent) list of errors.
+ */
+enum clnt_stat {
+       RPC_SUCCESS=0,                  /* call succeeded */
+       /*
+        * local errors
+        */
+       RPC_CANTENCODEARGS=1,           /* can't encode arguments */
+       RPC_CANTDECODERES=2,            /* can't decode results */
+       RPC_CANTSEND=3,                 /* failure in sending call */
+       RPC_CANTRECV=4,                 /* failure in receiving result */
+       RPC_TIMEDOUT=5,                 /* call timed out */
+       /*
+        * remote errors
+        */
+       RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
+       RPC_AUTHERROR=7,                /* authentication error */
+       RPC_PROGUNAVAIL=8,              /* program not available */
+       RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
+       RPC_PROCUNAVAIL=10,             /* procedure unavailable */
+       RPC_CANTDECODEARGS=11,          /* decode arguments error */
+       RPC_SYSTEMERROR=12,             /* generic "other problem" */
+       RPC_NOBROADCAST = 21,           /* Broadcasting not supported */
+       /*
+        * callrpc & clnt_create errors
+        */
+       RPC_UNKNOWNHOST=13,             /* unknown host name */
+       RPC_UNKNOWNPROTO=17,            /* unknown protocol */
+       RPC_UNKNOWNADDR = 19,           /* Remote address unknown */
+
+       /*
+        * rpcbind errors
+        */
+       RPC_RPCBFAILURE=14,             /* portmapper failed in its call */
+#define RPC_PMAPFAILURE RPC_RPCBFAILURE
+       RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
+       RPC_N2AXLATEFAILURE = 22,       /* Name to addr translation failed */
+       /*
+        * unspecified error
+        */
+       RPC_FAILED=16,
+       RPC_INTR=18,
+       RPC_TLIERROR=20,
+       RPC_UDERROR=23,
+       /*
+        * asynchronous errors
+        */
+       RPC_INPROGRESS = 24,
+       RPC_STALERACHANDLE = 25
+};
+
+
+/*
+ * Error info.
+ */
+struct rpc_err {
+  enum clnt_stat re_status;
+  union {
+    int RE_errno;              /* related system error */
+    enum auth_stat RE_why;     /* why the auth error occurred */
+    struct {
+      u_long low;              /* lowest verion supported */
+      u_long high;             /* highest verion supported */
+    } RE_vers;
+    struct {                   /* maybe meaningful if RPC_FAILED */
+      long s1;
+      long s2;
+    } RE_lb;                   /* life boot & debugging only */
+  } ru;
+#define        re_errno        ru.RE_errno
+#define        re_why          ru.RE_why
+#define        re_vers         ru.RE_vers
+#define        re_lb           ru.RE_lb
+};
+
+
+/*
+ * Client rpc handle.
+ * Created by individual implementations, see e.g. rpc_udp.c.
+ * Client is responsible for initializing auth, see e.g. auth_none.c.
+ */
+typedef struct CLIENT CLIENT;
+struct CLIENT {
+  AUTH *cl_auth;                /* authenticator */
+  struct clnt_ops {
+    enum clnt_stat (*cl_call) (CLIENT *, u_long, xdrproc_t, caddr_t, xdrproc_t,
+                              caddr_t, struct timeval);
+                               /* call remote procedure */
+    void (*cl_abort) (void);   /* abort a call */
+    void (*cl_geterr) (CLIENT *, struct rpc_err *);
+                               /* get specific error code */
+    bool_t (*cl_freeres) (CLIENT *, xdrproc_t, caddr_t);
+                               /* frees results */
+    void (*cl_destroy) (CLIENT *); /* destroy this structure */
+    bool_t (*cl_control) (CLIENT *, int, char *);
+                               /* the ioctl() of rpc */
+  } *cl_ops;
+  caddr_t cl_private;          /* private stuff */
+};
+
+
+/*
+ * client side rpc interface ops
+ *
+ * Parameter types are:
+ *
+ */
+
+/*
+ * enum clnt_stat
+ * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
+ *     CLIENT *rh;
+ *     u_long proc;
+ *     xdrproc_t xargs;
+ *     caddr_t argsp;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ *     struct timeval timeout;
+ */
+#define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+#define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+
+/*
+ * void
+ * CLNT_ABORT(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_ABORT(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+#define        clnt_abort(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+
+/*
+ * struct rpc_err
+ * CLNT_GETERR(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_GETERR(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+#define        clnt_geterr(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+
+
+/*
+ * bool_t
+ * CLNT_FREERES(rh, xres, resp);
+ *     CLIENT *rh;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ */
+#define        CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+#define        clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+
+/*
+ * bool_t
+ * CLNT_CONTROL(cl, request, info)
+ *      CLIENT *cl;
+ *      u_int request;
+ *      char *info;
+ */
+#define        CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+#define        clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+
+/*
+ * control operations that apply to all transports
+ *
+ * Note: options marked XXX are no-ops in this implementation of RPC.
+ * The are present in TI-RPC but can't be implemented here since they
+ * depend on the presence of STREAMS/TLI, which we don't have.
+ */
+#define CLSET_TIMEOUT        1    /* set timeout (timeval) */
+#define CLGET_TIMEOUT        2    /* get timeout (timeval) */
+#define CLGET_SERVER_ADDR    3    /* get server's address (sockaddr) */
+#define CLGET_FD             6    /* get connections file descriptor */
+#define CLGET_SVC_ADDR       7    /* get server's address (netbuf)      XXX */
+#define CLSET_FD_CLOSE       8    /* close fd while clnt_destroy */
+#define CLSET_FD_NCLOSE      9    /* Do not close fd while clnt_destroy*/
+#define CLGET_XID            10   /* Get xid */
+#define CLSET_XID            11   /* Set xid */
+#define CLGET_VERS           12   /* Get version number */
+#define CLSET_VERS           13   /* Set version number */
+#define CLGET_PROG           14   /* Get program number */
+#define CLSET_PROG           15   /* Set program number */
+#define CLSET_SVC_ADDR       16   /* get server's address (netbuf)      XXX */
+#define CLSET_PUSH_TIMOD     17   /* push timod if not already present  XXX */
+#define CLSET_POP_TIMOD      18   /* pop timod                          XXX */
+/*
+ * Connectionless only control operations
+ */
+#define CLSET_RETRY_TIMEOUT    4       /* set retry timeout (timeval) */
+#define CLGET_RETRY_TIMEOUT    5       /* get retry timeout (timeval) */
+
+/*
+ * void
+ * CLNT_DESTROY(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_DESTROY(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+#define        clnt_destroy(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+
+
+/*
+ * RPCTEST is a test program which is accessible on every rpc
+ * transport/port.  It is used for testing, performance evaluation,
+ * and network administration.
+ */
+
+#define RPCTEST_PROGRAM                ((u_long)1)
+#define RPCTEST_VERSION                ((u_long)1)
+#define RPCTEST_NULL_PROC      ((u_long)2)
+#define RPCTEST_NULL_BATCH_PROC        ((u_long)3)
+
+/*
+ * By convention, procedure 0 takes null arguments and returns them
+ */
+
+#define NULLPROC ((u_long)0)
+
+/*
+ * Below are the client handle creation routines for the various
+ * implementations of client side rpc.  They can return NULL if a
+ * creation failure occurs.
+ */
+
+/*
+ * Memory based rpc (for speed check and testing)
+ * CLIENT *
+ * clntraw_create(prog, vers)
+ *     u_long prog;
+ *     u_long vers;
+ */
+extern CLIENT *clntraw_create (const u_long __prog, const u_long __vers)
+     __THROW;
+
+
+/*
+ * Generic client creation routine. Supported protocols are "udp", "tcp" and
+ * "unix"
+ * CLIENT *
+ * clnt_create(host, prog, vers, prot)
+ *     char *host;     -- hostname
+ *     u_long prog;    -- program number
+ *     u_ong vers;     -- version number
+ *     char *prot;     -- protocol
+ */
+extern CLIENT *clnt_create (const char *__host, const u_long __prog,
+                           const u_long __vers, const char *__prot)
+     __THROW;
+
+
+/*
+ * TCP based rpc
+ * CLIENT *
+ * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long prog;
+ *     u_long version;
+ *     register int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, u_long __prog,
+                              u_long __version, int *__sockp, u_int __sendsz,
+                              u_int __recvsz) __THROW;
+
+/*
+ * UDP based rpc.
+ * CLIENT *
+ * clntudp_create(raddr, program, version, wait, sockp)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait_resend;
+ *     int *sockp;
+ *
+ * Same as above, but you specify max packet sizes.
+ * CLIENT *
+ * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait_resend;
+ *     int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+extern CLIENT *clntudp_create (struct sockaddr_in *__raddr, u_long __program,
+                              u_long __version, struct timeval __wait_resend,
+                              int *__sockp) __THROW;
+extern CLIENT *clntudp_bufcreate (struct sockaddr_in *__raddr,
+                                 u_long __program, u_long __version,
+                                 struct timeval __wait_resend, int *__sockp,
+                                 u_int __sendsz, u_int __recvsz) __THROW;
+
+
+
+
+/*
+ * AF_UNIX based rpc
+ * CLIENT *
+ * clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *      struct sockaddr_un *raddr;
+ *      u_long prog;
+ *      u_long version;
+ *      register int *sockp;
+ *      u_int sendsz;
+ *      u_int recvsz;
+ */
+extern CLIENT *clntunix_create  (struct sockaddr_un *__raddr, u_long __program,
+                                u_long __version, int *__sockp,
+                                u_int __sendsz, u_int __recvsz) __THROW;
+
+
+extern int callrpc (const char *__host, const u_long __prognum,
+                   const u_long __versnum, const u_long __procnum,
+                   const xdrproc_t __inproc, const char *__in,
+                   const xdrproc_t __outproc, char *__out) __THROW;
+extern int _rpc_dtablesize (void) __THROW;
+
+/*
+ * Print why creation failed
+ */
+extern void clnt_pcreateerror (const char *__msg);     /* stderr */
+extern char *clnt_spcreateerror(const char *__msg) __THROW;    /* string */
+
+/*
+ * Like clnt_perror(), but is more verbose in its output
+ */
+extern void clnt_perrno (enum clnt_stat __num);                /* stderr */
+
+/*
+ * Print an English error message, given the client error code
+ */
+extern void clnt_perror (CLIENT *__clnt, const char *__msg);
+                                                       /* stderr */
+extern char *clnt_sperror (CLIENT *__clnt, const char *__msg) __THROW;
+                                                       /* string */
+
+/*
+ * If a creation fails, the following allows the user to figure out why.
+ */
+struct rpc_createerr {
+       enum clnt_stat cf_stat;
+       struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
+};
+
+extern struct rpc_createerr rpc_createerr;
+
+
+
+/*
+ * Copy error message to buffer.
+ */
+extern char *clnt_sperrno (enum clnt_stat __num) __THROW;      /* string */
+
+/*
+ * get the port number on the host for the rpc program,version and proto
+ */
+extern int getrpcport (const char * __host, u_long __prognum,
+                      u_long __versnum, u_int __proto) __THROW;
+
+/*
+ * get the local host's IP address without consulting
+ * name service library functions
+ */
+extern void get_myaddress (struct sockaddr_in *) __THROW;
+
+#define UDPMSGSIZE     8800    /* rpc imposed limit on udp msg size */
+#define RPCSMALLMSGSIZE        400     /* a more reasonable packet size */
+
+__END_DECLS
+
+#endif /* rpc/clnt.h */
diff --git a/lib/libdss-include/rpc/des_crypt.h b/lib/libdss-include/rpc/des_crypt.h
new file mode 100644 (file)
index 0000000..77cca3c
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * @(#)des_crypt.h     2.1 88/08/11 4.0 RPCSRC
+ *
+ * des_crypt.h, des library routine interface
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DES_CRYPT_H__
+#define __DES_CRYPT_H__ 1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#define DES_MAXDATA 8192       /* max bytes encrypted in one call */
+#define DES_DIRMASK (1 << 0)
+#define DES_ENCRYPT (0*DES_DIRMASK)    /* Encrypt */
+#define DES_DECRYPT (1*DES_DIRMASK)    /* Decrypt */
+
+
+#define DES_DEVMASK (1 << 1)
+#define        DES_HW (0*DES_DEVMASK)  /* Use hardware device */
+#define DES_SW (1*DES_DEVMASK) /* Use software device */
+
+
+#define DESERR_NONE 0  /* succeeded */
+#define DESERR_NOHWDEVICE 1    /* succeeded, but hw device not available */
+#define DESERR_HWERROR 2       /* failed, hardware/driver error */
+#define DESERR_BADPARAM 3      /* failed, bad parameter to call */
+
+#define DES_FAILED(err) \
+       ((err) > DESERR_NOHWDEVICE)
+
+/*
+ * cbc_crypt()
+ * ecb_crypt()
+ *
+ * Encrypt (or decrypt) len bytes of a buffer buf.
+ * The length must be a multiple of eight.
+ * The key should have odd parity in the low bit of each byte.
+ * ivec is the input vector, and is updated to the new one (cbc only).
+ * The mode is created by oring together the appropriate parameters.
+ * DESERR_NOHWDEVICE is returned if DES_HW was specified but
+ * there was no hardware to do it on (the data will still be
+ * encrypted though, in software).
+ */
+
+
+/*
+ * Cipher Block Chaining mode
+ */
+extern int cbc_crypt (char *__key, char *__buf, unsigned __len,
+                     unsigned __mode, char *__ivec) __THROW;
+
+/*
+ * Electronic Code Book mode
+ */
+extern int ecb_crypt (char *__key, char *__buf, unsigned __len,
+                     unsigned __mode) __THROW;
+
+/*
+ * Set des parity for a key.
+ * DES parity is odd and in the low bit of each byte
+ */
+extern void des_setparity (char *__key) __THROW;
+
+__END_DECLS
+
+#endif
diff --git a/lib/libdss-include/rpc/key_prot.h b/lib/libdss-include/rpc/key_prot.h
new file mode 100644 (file)
index 0000000..74627e6
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KEY_PROT_H_RPCGEN
+#define _KEY_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+/* Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Compiled from key_prot.x using rpcgen.
+ * DO NOT EDIT THIS FILE!
+ * This is NOT source code!
+ */
+#define PROOT 3
+#define HEXMODULUS "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
+#define HEXKEYBYTES 48
+#define KEYSIZE 192
+#define KEYBYTES 24
+#define KEYCHECKSUMSIZE 16
+
+enum keystatus {
+       KEY_SUCCESS = 0,
+       KEY_NOSECRET = 1,
+       KEY_UNKNOWN = 2,
+       KEY_SYSTEMERR = 3,
+};
+typedef enum keystatus keystatus;
+#ifdef __cplusplus
+extern "C" bool_t xdr_keystatus(XDR *, keystatus*);
+#elif __STDC__
+extern  bool_t xdr_keystatus(XDR *, keystatus*);
+#else /* Old Style C */
+bool_t xdr_keystatus();
+#endif /* Old Style C */
+
+
+typedef char keybuf[HEXKEYBYTES];
+#ifdef __cplusplus
+extern "C" bool_t xdr_keybuf(XDR *, keybuf);
+#elif __STDC__
+extern  bool_t xdr_keybuf(XDR *, keybuf);
+#else /* Old Style C */
+bool_t xdr_keybuf();
+#endif /* Old Style C */
+
+
+typedef char *netnamestr;
+#ifdef __cplusplus
+extern "C" bool_t xdr_netnamestr(XDR *, netnamestr*);
+#elif __STDC__
+extern  bool_t xdr_netnamestr(XDR *, netnamestr*);
+#else /* Old Style C */
+bool_t xdr_netnamestr();
+#endif /* Old Style C */
+
+
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+typedef struct cryptkeyarg cryptkeyarg;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyarg();
+#endif /* Old Style C */
+
+
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj remotekey;
+       des_block deskey;
+};
+typedef struct cryptkeyarg2 cryptkeyarg2;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyarg2();
+#endif /* Old Style C */
+
+
+struct cryptkeyres {
+       keystatus status;
+       union {
+               des_block deskey;
+       } cryptkeyres_u;
+};
+typedef struct cryptkeyres cryptkeyres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
+#elif __STDC__
+extern  bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
+#else /* Old Style C */
+bool_t xdr_cryptkeyres();
+#endif /* Old Style C */
+
+#define MAXGIDS 16
+
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       struct {
+               u_int gids_len;
+               u_int *gids_val;
+       } gids;
+};
+typedef struct unixcred unixcred;
+#ifdef __cplusplus
+extern "C" bool_t xdr_unixcred(XDR *, unixcred*);
+#elif __STDC__
+extern  bool_t xdr_unixcred(XDR *, unixcred*);
+#else /* Old Style C */
+bool_t xdr_unixcred();
+#endif /* Old Style C */
+
+
+struct getcredres {
+       keystatus status;
+       union {
+               unixcred cred;
+       } getcredres_u;
+};
+typedef struct getcredres getcredres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_getcredres(XDR *, getcredres*);
+#elif __STDC__
+extern  bool_t xdr_getcredres(XDR *, getcredres*);
+#else /* Old Style C */
+bool_t xdr_getcredres();
+#endif /* Old Style C */
+
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+typedef struct key_netstarg key_netstarg;
+#ifdef __cplusplus
+extern "C" bool_t xdr_key_netstarg(XDR *, key_netstarg*);
+#elif __STDC__
+extern  bool_t xdr_key_netstarg(XDR *, key_netstarg*);
+#else /* Old Style C */
+bool_t xdr_key_netstarg();
+#endif /* Old Style C */
+
+
+struct key_netstres {
+       keystatus status;
+       union {
+               key_netstarg knet;
+       } key_netstres_u;
+};
+typedef struct key_netstres key_netstres;
+#ifdef __cplusplus
+extern "C" bool_t xdr_key_netstres(XDR *, key_netstres*);
+#elif __STDC__
+extern  bool_t xdr_key_netstres(XDR *, key_netstres*);
+#else /* Old Style C */
+bool_t xdr_key_netstres();
+#endif /* Old Style C */
+
+
+#ifndef opaque
+#define opaque char
+#endif
+
+
+#define KEY_PROG ((u_long)100029)
+#define KEY_VERS ((u_long)1)
+
+#ifdef __cplusplus
+#define KEY_SET ((u_long)1)
+extern "C" keystatus * key_set_1(opaque *, CLIENT *);
+extern "C" keystatus * key_set_1_svc(opaque *, struct svc_req *);
+#define KEY_ENCRYPT ((u_long)2)
+extern "C" cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT ((u_long)3)
+extern "C" cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN ((u_long)4)
+extern "C" des_block * key_gen_1(void *, CLIENT *);
+extern "C" des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED ((u_long)5)
+extern "C" getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern "C" getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+
+#elif __STDC__
+#define KEY_SET ((u_long)1)
+extern  keystatus * key_set_1(opaque *, CLIENT *);
+extern  keystatus * key_set_1_svc(opaque *, struct svc_req *);
+#define KEY_ENCRYPT ((u_long)2)
+extern  cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT ((u_long)3)
+extern  cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN ((u_long)4)
+extern  des_block * key_gen_1(void *, CLIENT *);
+extern  des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED ((u_long)5)
+extern  getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+
+#else /* Old Style C */
+#define KEY_SET ((u_long)1)
+extern  keystatus * key_set_1();
+extern  keystatus * key_set_1_svc();
+#define KEY_ENCRYPT ((u_long)2)
+extern  cryptkeyres * key_encrypt_1();
+extern  cryptkeyres * key_encrypt_1_svc();
+#define KEY_DECRYPT ((u_long)3)
+extern  cryptkeyres * key_decrypt_1();
+extern  cryptkeyres * key_decrypt_1_svc();
+#define KEY_GEN ((u_long)4)
+extern  des_block * key_gen_1();
+extern  des_block * key_gen_1_svc();
+#define KEY_GETCRED ((u_long)5)
+extern  getcredres * key_getcred_1();
+extern  getcredres * key_getcred_1_svc();
+#endif /* Old Style C */
+#define KEY_VERS2 ((u_long)2)
+
+#ifdef __cplusplus
+extern "C" keystatus * key_set_2(opaque *, CLIENT *);
+extern "C" keystatus * key_set_2_svc(opaque *, struct svc_req *);
+extern "C" cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern "C" cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern "C" des_block * key_gen_2(void *, CLIENT *);
+extern "C" des_block * key_gen_2_svc(void *, struct svc_req *);
+extern "C" getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern "C" getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern "C" cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern "C" cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK ((u_long)7)
+extern "C" cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern "C" cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT ((u_long)8)
+extern "C" keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern "C" keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET ((u_long)9)
+extern "C" key_netstres * key_net_get_2(void *, CLIENT *);
+extern "C" key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV ((u_long)10)
+extern "C" cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
+extern "C" cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
+
+#elif __STDC__
+extern  keystatus * key_set_2(opaque *, CLIENT *);
+extern  keystatus * key_set_2_svc(opaque *, struct svc_req *);
+extern  cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  des_block * key_gen_2(void *, CLIENT *);
+extern  des_block * key_gen_2_svc(void *, struct svc_req *);
+extern  getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern  cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK ((u_long)7)
+extern  cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT ((u_long)8)
+extern  keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern  keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET ((u_long)9)
+extern  key_netstres * key_net_get_2(void *, CLIENT *);
+extern  key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV ((u_long)10)
+extern  cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
+extern  cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
+
+#else /* Old Style C */
+extern  keystatus * key_set_2();
+extern  keystatus * key_set_2_svc();
+extern  cryptkeyres * key_encrypt_2();
+extern  cryptkeyres * key_encrypt_2_svc();
+extern  cryptkeyres * key_decrypt_2();
+extern  cryptkeyres * key_decrypt_2_svc();
+extern  des_block * key_gen_2();
+extern  des_block * key_gen_2_svc();
+extern  getcredres * key_getcred_2();
+extern  getcredres * key_getcred_2_svc();
+#define KEY_ENCRYPT_PK ((u_long)6)
+extern  cryptkeyres * key_encrypt_pk_2();
+extern  cryptkeyres * key_encrypt_pk_2_svc();
+#define KEY_DECRYPT_PK ((u_long)7)
+extern  cryptkeyres * key_decrypt_pk_2();
+extern  cryptkeyres * key_decrypt_pk_2_svc();
+#define KEY_NET_PUT ((u_long)8)
+extern  keystatus * key_net_put_2();
+extern  keystatus * key_net_put_2_svc();
+#define KEY_NET_GET ((u_long)9)
+extern  key_netstres * key_net_get_2();
+extern  key_netstres * key_net_get_2_svc();
+#define KEY_GET_CONV ((u_long)10)
+extern  cryptkeyres * key_get_conv_2();
+extern  cryptkeyres * key_get_conv_2_svc();
+#endif /* Old Style C */
+
+#endif /* !_KEY_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpc/netdb.h b/lib/libdss-include/rpc/netdb.h
new file mode 100644 (file)
index 0000000..529a4ad
--- /dev/null
@@ -0,0 +1,74 @@
+/* @(#)netdb.h 2.1 88/07/29 3.9 RPCSRC */
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Cleaned up for GNU C library roland@gnu.ai.mit.edu:
+   added multiple inclusion protection and use of <sys/cdefs.h>.
+   In GNU this file is #include'd by <netdb.h>.  */
+
+#ifndef _RPC_NETDB_H
+#define _RPC_NETDB_H   1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+struct rpcent
+{
+  char *r_name;                /* Name of server for this rpc program.  */
+  char **r_aliases;    /* Alias list.  */
+  int r_number;                /* RPC program number.  */
+};
+
+extern void setrpcent (int __stayopen) __THROW;
+extern void endrpcent (void) __THROW;
+extern struct rpcent *getrpcbyname (const char *__name) __THROW;
+extern struct rpcent *getrpcbynumber (int __number) __THROW;
+extern struct rpcent *getrpcent (void) __THROW;
+
+#ifdef __USE_MISC
+extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
+                          char *__buffer, size_t __buflen,
+                          struct rpcent **__result) __THROW;
+
+extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
+                            char *__buffer, size_t __buflen,
+                            struct rpcent **__result) __THROW;
+
+extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
+                       size_t __buflen, struct rpcent **__result) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* rpc/netdb.h */
diff --git a/lib/libdss-include/rpc/pmap_clnt.h b/lib/libdss-include/rpc/pmap_clnt.h
new file mode 100644 (file)
index 0000000..1cc94b8
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * pmap_clnt.h
+ * Supplies C routines to get to portmap services.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_CLNT_H
+#define _RPC_PMAP_CLNT_H       1
+
+#include <features.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+#include <rpc/clnt.h>
+
+__BEGIN_DECLS
+
+typedef bool_t (*resultproc_t) (caddr_t __resp, struct sockaddr_in *__raddr);
+
+/*
+ * Usage:
+ *     success = pmap_set(program, version, protocol, port);
+ *     success = pmap_unset(program, version);
+ *     port = pmap_getport(address, program, version, protocol);
+ *     head = pmap_getmaps(address);
+ *     clnt_stat = pmap_rmtcall(address, program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, tout, port_ptr)
+ *             (works for udp only.)
+ *     clnt_stat = clnt_broadcast(program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, eachresult)
+ *             (like pmap_rmtcall, except the call is broadcasted to all
+ *             locally connected nets.  For each valid response received,
+ *             the procedure eachresult is called.  Its form is:
+ *     done = eachresult(resp, raddr)
+ *             bool_t done;
+ *             caddr_t resp;
+ *             struct sockaddr_in raddr;
+ *             where resp points to the results of the call and raddr is the
+ *             address if the responder to the broadcast.
+ */
+
+extern bool_t pmap_set (const u_long __program, const u_long __vers,
+                       int __protocol, u_short __port) __THROW;
+extern bool_t pmap_unset (const u_long __program, const u_long __vers)
+     __THROW;
+extern struct pmaplist *pmap_getmaps (struct sockaddr_in *__address) __THROW;
+extern enum clnt_stat pmap_rmtcall (struct sockaddr_in *__addr,
+                                   const u_long __prog,
+                                   const u_long __vers,
+                                   const u_long __proc,
+                                   xdrproc_t __xdrargs,
+                                   caddr_t __argsp, xdrproc_t __xdrres,
+                                   caddr_t __resp, struct timeval __tout,
+                                   u_long *__port_ptr) __THROW;
+extern enum clnt_stat clnt_broadcast (const u_long __prog,
+                                     const u_long __vers,
+                                     const u_long __proc, xdrproc_t __xargs,
+                                     caddr_t __argsp, xdrproc_t __xresults,
+                                     caddr_t __resultsp,
+                                     resultproc_t __eachresult) __THROW;
+extern u_short pmap_getport (struct sockaddr_in *__address,
+                            const u_long __program,
+                            const u_long __version, u_int __protocol)
+     __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_clnt.h */
diff --git a/lib/libdss-include/rpc/pmap_prot.h b/lib/libdss-include/rpc/pmap_prot.h
new file mode 100644 (file)
index 0000000..e5fd7cb
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * pmap_prot.h
+ * Protocol for the local binder service, or pmap.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_PROT_H
+#define _RPC_PMAP_PROT_H       1
+
+#include <features.h>
+
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+/* The following procedures are supported by the protocol:
+ *
+ * PMAPPROC_NULL() returns ()
+ *     takes nothing, returns nothing
+ *
+ * PMAPPROC_SET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Registers the tuple
+ *     [prog, vers, prot, port].
+ *
+ * PMAPPROC_UNSET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Un-registers pair
+ *     [prog, vers].  prot and port are ignored.
+ *
+ * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
+ *     0 is failure.  Otherwise returns the port number where the pair
+ *     [prog, vers] is registered.  It may lie!
+ *
+ * PMAPPROC_DUMP() RETURNS (struct pmaplist *)
+ *
+ * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
+ *     RETURNS (port, string<>);
+ * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc, encapsulatedargs);
+ *     Calls the procedure on the local machine.  If it is not registered,
+ *     this procedure is quite; ie it does not return error information!!!
+ *     This procedure only is supported on rpc/udp and calls via
+ *     rpc/udp.  This routine only passes null authentication parameters.
+ *     This file has no interface to xdr routines for PMAPPROC_CALLIT.
+ *
+ * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
+ */
+
+#define PMAPPORT               ((u_short)111)
+#define PMAPPROG               ((u_long)100000)
+#define PMAPVERS               ((u_long)2)
+#define PMAPVERS_PROTO         ((u_long)2)
+#define PMAPVERS_ORIG          ((u_long)1)
+#define PMAPPROC_NULL          ((u_long)0)
+#define PMAPPROC_SET           ((u_long)1)
+#define PMAPPROC_UNSET         ((u_long)2)
+#define PMAPPROC_GETPORT       ((u_long)3)
+#define PMAPPROC_DUMP          ((u_long)4)
+#define PMAPPROC_CALLIT                ((u_long)5)
+
+struct pmap {
+       long unsigned pm_prog;
+       long unsigned pm_vers;
+       long unsigned pm_prot;
+       long unsigned pm_port;
+};
+
+extern bool_t xdr_pmap (XDR *__xdrs, struct pmap *__regs) __THROW;
+
+struct pmaplist {
+       struct pmap     pml_map;
+       struct pmaplist *pml_next;
+};
+
+extern bool_t xdr_pmaplist (XDR *__xdrs, struct pmaplist **__rp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_prot.h */
diff --git a/lib/libdss-include/rpc/pmap_rmt.h b/lib/libdss-include/rpc/pmap_rmt.h
new file mode 100644 (file)
index 0000000..f868014
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Structures and XDR routines for parameters to and replies from
+ * the portmapper remote-call-service.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_PMAP_RMT_H
+#define _RPC_PMAP_RMT_H        1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+
+__BEGIN_DECLS
+
+struct rmtcallargs {
+       u_long prog, vers, proc, arglen;
+       caddr_t args_ptr;
+       xdrproc_t xdr_args;
+};
+
+extern bool_t xdr_rmtcall_args (XDR *__xdrs, struct rmtcallargs *__crp)
+     __THROW;
+
+struct rmtcallres {
+       u_long *port_ptr;
+       u_long resultslen;
+       caddr_t results_ptr;
+       xdrproc_t xdr_results;
+};
+
+extern bool_t xdr_rmtcallres (XDR *__xdrs, struct rmtcallres *__crp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/pmap_rmt.h */
diff --git a/lib/libdss-include/rpc/rpc.h b/lib/libdss-include/rpc/rpc.h
new file mode 100644 (file)
index 0000000..173a4e3
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * rpc.h, Just includes the billions of rpc header files necessary to
+ * do remote procedure calling.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_RPC_H
+#define _RPC_RPC_H 1
+
+#include <rpc/types.h>         /* some typedefs */
+#include <netinet/in.h>
+
+/* external data representation interfaces */
+#include <rpc/xdr.h>           /* generic (de)serializer */
+
+/* Client side only authentication */
+#include <rpc/auth.h>          /* generic authenticator (client side) */
+
+/* Client side (mostly) remote procedure call */
+#include <rpc/clnt.h>          /* generic rpc stuff */
+
+/* semi-private protocol headers */
+#include <rpc/rpc_msg.h>       /* protocol for rpc messages */
+#include <rpc/auth_unix.h>     /* protocol for unix style cred */
+#include <rpc/auth_des.h>      /* protocol for des style cred */
+
+/* Server side only remote procedure callee */
+#include <rpc/svc.h>           /* service manager and multiplexer */
+#include <rpc/svc_auth.h>      /* service side authenticator */
+
+/*
+ * COMMENT OUT THE NEXT INCLUDE IF RUNNING ON SUN OS OR ON A VERSION
+ * OF UNIX BASED ON NFSSRC.  These systems will already have the structures
+ * defined by <rpc/netdb.h> included in <netdb.h>.
+ */
+/* routines for parsing /etc/rpc */
+#include <rpc/netdb.h>         /* structures and routines to parse /etc/rpc */
+
+__BEGIN_DECLS
+
+/* Global variables, protected for multi-threaded applications.  */
+extern fd_set *__rpc_thread_svc_fdset (void) __attribute__ ((__const__));
+#define svc_fdset (*__rpc_thread_svc_fdset ())
+
+extern struct rpc_createerr *__rpc_thread_createerr (void)
+     __attribute__ ((__const__));
+#define get_rpc_createerr() (*__rpc_thread_createerr ())
+/* The people who "engineered" RPC should bee punished for naming the
+   data structure and the variable the same.  We cannot always define the
+   macro 'rpc_createerr' because this would prevent people from defining
+   object of type 'struct rpc_createerr'.  So we leave it up to the user
+   to select transparent replacement also of this variable.  */
+#ifdef _RPC_MT_VARS
+# define rpc_createerr (*__rpc_thread_createerr ())
+#endif
+
+extern struct pollfd **__rpc_thread_svc_pollfd (void)
+     __attribute__ ((__const__));
+#define svc_pollfd (*__rpc_thread_svc_pollfd ())
+
+extern int *__rpc_thread_svc_max_pollfd (void) __attribute__ ((__const__));
+#define svc_max_pollfd (*__rpc_thread_svc_max_pollfd ())
+
+__END_DECLS
+
+#endif /* rpc/rpc.h */
diff --git a/lib/libdss-include/rpc/rpc_des.h b/lib/libdss-include/rpc/rpc_des.h
new file mode 100644 (file)
index 0000000..4b3c426
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Generic DES driver interface
+ * Keep this file hardware independent!
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _DES_H
+#define _DES_H
+
+#include <sys/types.h>
+
+#define DES_MAXLEN     65536   /* maximum # of bytes to encrypt  */
+#define DES_QUICKLEN   16      /* maximum # of bytes to encrypt quickly */
+
+enum desdir
+  {
+    ENCRYPT, DECRYPT
+  };
+enum desmode
+  {
+    CBC, ECB
+  };
+
+/*
+ * parameters to ioctl call
+ */
+struct desparams
+  {
+    u_char des_key[8];         /* key (with low bit parity) */
+    enum desdir des_dir;       /* direction */
+    enum desmode des_mode;     /* mode */
+    u_char des_ivec[8];                /* input vector */
+    unsigned des_len;          /* number of bytes to crypt */
+    union
+      {
+       u_char UDES_data[DES_QUICKLEN];
+       u_char *UDES_buf;
+      }
+    UDES;
+#define des_data UDES.UDES_data        /* direct data here if quick */
+#define des_buf        UDES.UDES_buf   /* otherwise, pointer to data */
+  };
+
+#endif
diff --git a/lib/libdss-include/rpc/rpc_msg.h b/lib/libdss-include/rpc/rpc_msg.h
new file mode 100644 (file)
index 0000000..273b187
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * rpc_msg.h
+ * rpc message definition
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_MSG_H
+#define _RPC_MSG_H 1
+
+#include <sys/cdefs.h>
+
+#include <rpc/xdr.h>
+#include <rpc/clnt.h>
+
+#define RPC_MSG_VERSION                ((u_long) 2)
+#define RPC_SERVICE_PORT       ((u_short) 2048)
+
+__BEGIN_DECLS
+
+/*
+ * Bottom up definition of an rpc message.
+ * NOTE: call and reply use the same overall struct but
+ * different parts of unions within it.
+ */
+
+enum msg_type {
+       CALL=0,
+       REPLY=1
+};
+
+enum reply_stat {
+       MSG_ACCEPTED=0,
+       MSG_DENIED=1
+};
+
+enum accept_stat {
+       SUCCESS=0,
+       PROG_UNAVAIL=1,
+       PROG_MISMATCH=2,
+       PROC_UNAVAIL=3,
+       GARBAGE_ARGS=4,
+       SYSTEM_ERR=5
+};
+
+enum reject_stat {
+       RPC_MISMATCH=0,
+       AUTH_ERROR=1
+};
+
+/*
+ * Reply part of an rpc exchange
+ */
+
+/*
+ * Reply to an rpc request that was accepted by the server.
+ * Note: there could be an error even though the request was
+ * accepted.
+ */
+struct accepted_reply {
+       struct opaque_auth      ar_verf;
+       enum accept_stat        ar_stat;
+       union {
+               struct {
+                       u_long  low;
+                       u_long  high;
+               } AR_versions;
+               struct {
+                       caddr_t where;
+                       xdrproc_t proc;
+               } AR_results;
+               /* and many other null cases */
+       } ru;
+#define        ar_results      ru.AR_results
+#define        ar_vers         ru.AR_versions
+};
+
+/*
+ * Reply to an rpc request that was rejected by the server.
+ */
+struct rejected_reply {
+       enum reject_stat rj_stat;
+       union {
+               struct {
+                       u_long low;
+                       u_long high;
+               } RJ_versions;
+               enum auth_stat RJ_why;  /* why authentication did not work */
+       } ru;
+#define        rj_vers ru.RJ_versions
+#define        rj_why  ru.RJ_why
+};
+
+/*
+ * Body of a reply to an rpc request.
+ */
+struct reply_body {
+       enum reply_stat rp_stat;
+       union {
+               struct accepted_reply RP_ar;
+               struct rejected_reply RP_dr;
+       } ru;
+#define        rp_acpt ru.RP_ar
+#define        rp_rjct ru.RP_dr
+};
+
+/*
+ * Body of an rpc request call.
+ */
+struct call_body {
+       u_long cb_rpcvers;      /* must be equal to two */
+       u_long cb_prog;
+       u_long cb_vers;
+       u_long cb_proc;
+       struct opaque_auth cb_cred;
+       struct opaque_auth cb_verf; /* protocol specific - provided by client */
+};
+
+/*
+ * The rpc message
+ */
+struct rpc_msg {
+       u_long                  rm_xid;
+       enum msg_type           rm_direction;
+       union {
+               struct call_body RM_cmb;
+               struct reply_body RM_rmb;
+       } ru;
+#define        rm_call         ru.RM_cmb
+#define        rm_reply        ru.RM_rmb
+};
+#define        acpted_rply     ru.RM_rmb.ru.RP_ar
+#define        rjcted_rply     ru.RM_rmb.ru.RP_dr
+
+
+/*
+ * XDR routine to handle a rpc message.
+ * xdr_callmsg(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t  xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
+
+/*
+ * XDR routine to pre-serialize the static part of a rpc message.
+ * xdr_callhdr(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t  xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
+
+/*
+ * XDR routine to handle a rpc reply.
+ * xdr_replymsg(xdrs, rmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *rmsg;
+ */
+extern bool_t  xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg) __THROW;
+
+/*
+ * Fills in the error part of a reply message.
+ * _seterr_reply(msg, error)
+ *     struct rpc_msg *msg;
+ *     struct rpc_err *error;
+ */
+extern void    _seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error)
+     __THROW;
+
+__END_DECLS
+
+#endif /* rpc/rpc_msg.h */
diff --git a/lib/libdss-include/rpc/svc.h b/lib/libdss-include/rpc/svc.h
new file mode 100644 (file)
index 0000000..1879fd2
--- /dev/null
@@ -0,0 +1,336 @@
+/*
+ * svc.h, Server-side remote procedure call interface.
+ *
+ * Copyright (C) 2012-2016 Free Software Foundation, Inc.
+ * This file is part of the GNU C Library.
+ *
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * The GNU C Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the GNU C Library; if not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_SVC_H
+#define _RPC_SVC_H 1
+
+#include <features.h>
+#include <rpc/rpc_msg.h>
+
+__BEGIN_DECLS
+
+/*
+ * This interface must manage two items concerning remote procedure calling:
+ *
+ * 1) An arbitrary number of transport connections upon which rpc requests
+ * are received.  The two most notable transports are TCP and UDP;  they are
+ * created and registered by routines in svc_tcp.c and svc_udp.c, respectively;
+ * they in turn call xprt_register and xprt_unregister.
+ *
+ * 2) An arbitrary number of locally registered services.  Services are
+ * described by the following four data: program number, version number,
+ * "service dispatch" function, a transport handle, and a boolean that
+ * indicates whether or not the exported program should be registered with a
+ * local binder service;  if true the program's number and version and the
+ * port number from the transport handle are registered with the binder.
+ * These data are registered with the rpc svc system via svc_register.
+ *
+ * A service's dispatch function is called whenever an rpc request comes in
+ * on a transport.  The request's program and version numbers must match
+ * those of the registered service.  The dispatch function is passed two
+ * parameters, struct svc_req * and SVCXPRT *, defined below.
+ */
+
+enum xprt_stat {
+       XPRT_DIED,
+       XPRT_MOREREQS,
+       XPRT_IDLE
+};
+
+/*
+ * Server side transport handle
+ */
+typedef struct SVCXPRT SVCXPRT;
+struct SVCXPRT {
+  int xp_sock;
+  u_short xp_port;             /* associated port number */
+  const struct xp_ops {
+    bool_t     (*xp_recv) (SVCXPRT *__xprt, struct rpc_msg *__msg);
+                               /* receive incoming requests */
+    enum xprt_stat (*xp_stat) (SVCXPRT *__xprt);
+                               /* get transport status */
+    bool_t     (*xp_getargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
+                              caddr_t __args_ptr); /* get arguments */
+    bool_t     (*xp_reply) (SVCXPRT *__xprt, struct rpc_msg *__msg);
+                               /* send reply */
+    bool_t     (*xp_freeargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
+                               caddr_t __args_ptr);
+                               /* free mem allocated for args */
+    void       (*xp_destroy) (SVCXPRT *__xprt);
+                               /* destroy this struct */
+  } *xp_ops;
+  int          xp_addrlen;      /* length of remote address */
+  struct sockaddr_in xp_raddr;  /* remote address */
+  struct opaque_auth xp_verf;   /* raw response verifier */
+  caddr_t              xp_p1;           /* private */
+  caddr_t              xp_p2;           /* private */
+  char         xp_pad [256];   /* padding, internal use */
+};
+
+/*
+ *  Approved way of getting address of caller
+ */
+#define svc_getcaller(x) (&(x)->xp_raddr)
+
+/*
+ * Operations defined on an SVCXPRT handle
+ *
+ * SVCXPRT             *xprt;
+ * struct rpc_msg      *msg;
+ * xdrproc_t            xargs;
+ * caddr_t              argsp;
+ */
+#define SVC_RECV(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+#define svc_recv(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+
+#define SVC_STAT(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+#define svc_stat(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+
+#define SVC_GETARGS(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+#define svc_getargs(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+
+#define SVC_REPLY(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+#define svc_reply(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+
+#define SVC_FREEARGS(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+#define svc_freeargs(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+
+#define SVC_DESTROY(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+#define svc_destroy(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+
+
+/*
+ * Service request
+ */
+struct svc_req {
+  rpcprog_t rq_prog;            /* service program number */
+  rpcvers_t rq_vers;            /* service protocol version */
+  rpcproc_t rq_proc;            /* the desired procedure */
+  struct opaque_auth rq_cred;   /* raw creds from the wire */
+  caddr_t rq_clntcred;          /* read only cooked cred */
+  SVCXPRT *rq_xprt;             /* associated transport */
+};
+
+#ifndef __DISPATCH_FN_T
+#define __DISPATCH_FN_T
+typedef void (*__dispatch_fn_t) (struct svc_req*, SVCXPRT*);
+#endif
+
+/*
+ * Service registration
+ *
+ * svc_register(xprt, prog, vers, dispatch, protocol)
+ *     SVCXPRT *xprt;
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
+ *     void (*dispatch)(struct svc_req*, SVCXPRT*);
+ *     rpcprot_t protocol;  like TCP or UDP, zero means do not register
+ */
+extern bool_t svc_register (SVCXPRT *__xprt, rpcprog_t __prog,
+                           rpcvers_t __vers, __dispatch_fn_t __dispatch,
+                           rpcprot_t __protocol) __THROW;
+
+/*
+ * Service un-registration
+ *
+ * svc_unregister(prog, vers)
+ *     rpcprog_t prog;
+ *     rpcvers_t vers;
+ */
+extern void svc_unregister (rpcprog_t __prog, rpcvers_t __vers) __THROW;
+
+/*
+ * Transport registration.
+ *
+ * xprt_register(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_register (SVCXPRT *__xprt) __THROW;
+
+/*
+ * Transport un-register
+ *
+ * xprt_unregister(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_unregister (SVCXPRT *__xprt) __THROW;
+
+
+/*
+ * When the service routine is called, it must first check to see if it
+ * knows about the procedure;  if not, it should call svcerr_noproc
+ * and return.  If so, it should deserialize its arguments via
+ * SVC_GETARGS (defined above).  If the deserialization does not work,
+ * svcerr_decode should be called followed by a return.  Successful
+ * decoding of the arguments should be followed the execution of the
+ * procedure's code and a call to svc_sendreply.
+ *
+ * Also, if the service refuses to execute the procedure due to too-
+ * weak authentication parameters, svcerr_weakauth should be called.
+ * Note: do not confuse access-control failure with weak authentication!
+ *
+ * NB: In pure implementations of rpc, the caller always waits for a reply
+ * msg.  This message is sent when svc_sendreply is called.
+ * Therefore pure service implementations should always call
+ * svc_sendreply even if the function logically returns void;  use
+ * xdr.h - xdr_void for the xdr routine.  HOWEVER, tcp based rpc allows
+ * for the abuse of pure rpc via batched calling or pipelining.  In the
+ * case of a batched call, svc_sendreply should NOT be called since
+ * this would send a return message, which is what batching tries to avoid.
+ * It is the service/protocol writer's responsibility to know which calls are
+ * batched and which are not.  Warning: responding to batch calls may
+ * deadlock the caller and server processes!
+ */
+
+extern bool_t  svc_sendreply (SVCXPRT *__xprt, xdrproc_t __xdr_results,
+                              caddr_t __xdr_location) __THROW;
+
+extern void    svcerr_decode (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_weakauth (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_noproc (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_progvers (SVCXPRT *__xprt, rpcvers_t __low_vers,
+                                rpcvers_t __high_vers) __THROW;
+
+extern void    svcerr_auth (SVCXPRT *__xprt, enum auth_stat __why) __THROW;
+
+extern void    svcerr_noprog (SVCXPRT *__xprt) __THROW;
+
+extern void    svcerr_systemerr (SVCXPRT *__xprt) __THROW;
+
+/*
+ * Lowest level dispatching -OR- who owns this process anyway.
+ * Somebody has to wait for incoming requests and then call the correct
+ * service routine.  The routine svc_run does infinite waiting; i.e.,
+ * svc_run never returns.
+ * Since another (coexistent) package may wish to selectively wait for
+ * incoming calls or other events outside of the rpc architecture, the
+ * routine svc_getreq is provided.  It must be passed readfds, the
+ * "in-place" results of a select system call (see select, section 2).
+ */
+
+/*
+ * Global keeper of rpc service descriptors in use
+ * dynamic; must be inspected before each call to select
+ */
+
+extern struct pollfd *svc_pollfd;
+extern int svc_max_pollfd;
+extern fd_set svc_fdset;
+#define svc_fds svc_fdset.fds_bits[0]  /* compatibility */
+
+/*
+ * a small program implemented by the svc_rpc implementation itself;
+ * also see clnt.h for protocol numbers.
+ */
+extern void svc_getreq (int __rdfds) __THROW;
+extern void svc_getreq_common (const int __fd) __THROW;
+extern void svc_getreqset (fd_set *__readfds) __THROW;
+extern void svc_getreq_poll (struct pollfd *, const int) __THROW;
+extern void svc_exit (void) __THROW;
+extern void svc_run (void) __THROW;
+
+/*
+ * Socket to use on svcxxx_create call to get default socket
+ */
+#define        RPC_ANYSOCK     -1
+
+/*
+ * These are the existing service side transport implementations
+ */
+
+/*
+ * Memory based rpc for testing and timing.
+ */
+extern SVCXPRT *svcraw_create (void) __THROW;
+
+/*
+ * Udp based rpc.
+ */
+extern SVCXPRT *svcudp_create (int __sock) __THROW;
+extern SVCXPRT *svcudp_bufcreate (int __sock, u_int __sendsz, u_int __recvsz)
+     __THROW;
+
+/*
+ * Tcp based rpc.
+ */
+extern SVCXPRT *svctcp_create (int __sock, u_int __sendsize, u_int __recvsize)
+     __THROW;
+
+/*
+ * FD based rpc.
+ */
+extern SVCXPRT *svcfd_create (int __sock, u_int __sendsize, u_int __recvsize)
+     __THROW;
+
+/*
+ * Unix based rpc.
+ */
+extern SVCXPRT *svcunix_create (int __sock, u_int __sendsize, u_int __recvsize,
+                               char *__path) __THROW;
+
+
+__END_DECLS
+
+#endif /* rpc/svc.h */
diff --git a/lib/libdss-include/rpc/svc_auth.h b/lib/libdss-include/rpc/svc_auth.h
new file mode 100644 (file)
index 0000000..4ba2741
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * svc_auth.h, Service side of rpc authentication.
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_SVC_AUTH_H
+#define _RPC_SVC_AUTH_H        1
+
+#include <features.h>
+#include <rpc/svc.h>
+
+__BEGIN_DECLS
+
+/*
+ * Server side authenticator
+ */
+extern enum auth_stat _authenticate (struct svc_req *__rqst,
+                                    struct rpc_msg *__msg) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/svc_auth.h */
diff --git a/lib/libdss-include/rpc/types.h b/lib/libdss-include/rpc/types.h
new file mode 100644 (file)
index 0000000..beded52
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* fixincludes should not add extern "C" to this file */
+/*
+ * Rpc additions to <sys/types.h>
+ */
+#ifndef _RPC_TYPES_H
+#define _RPC_TYPES_H 1
+
+typedef int bool_t;
+typedef int enum_t;
+/* This needs to be changed to uint32_t in the future */
+typedef unsigned long rpcprog_t;
+typedef unsigned long rpcvers_t;
+typedef unsigned long rpcproc_t;
+typedef unsigned long rpcprot_t;
+typedef unsigned long rpcport_t;
+
+#define        __dontcare__    -1
+
+#ifndef FALSE
+#      define  FALSE   (0)
+#endif
+
+#ifndef TRUE
+#      define  TRUE    (1)
+#endif
+
+#ifndef NULL
+#      define  NULL 0
+#endif
+
+#include <stdlib.h>            /* For malloc decl.  */
+#define mem_alloc(bsize)       malloc(bsize)
+/*
+ * XXX: This must not use the second argument, or code in xdr_array.c needs
+ * to be modified.
+ */
+#define mem_free(ptr, bsize)   free(ptr)
+
+#ifndef makedev /* ie, we haven't already included it */
+#include <sys/types.h>
+#endif
+
+#if defined __APPLE_CC__ || defined __FreeBSD__
+# define __u_char_defined
+# define __daddr_t_defined
+#endif
+
+#ifndef __u_char_defined
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+# define __u_char_defined
+#endif
+#ifndef __daddr_t_defined
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+# define __daddr_t_defined
+#endif
+
+#include <sys/time.h>
+#include <sys/param.h>
+
+#include <netinet/in.h>
+
+#ifndef INADDR_LOOPBACK
+#define       INADDR_LOOPBACK         (u_long)0x7F000001
+#endif
+#ifndef MAXHOSTNAMELEN
+#define        MAXHOSTNAMELEN  64
+#endif
+
+#endif /* rpc/types.h */
diff --git a/lib/libdss-include/rpc/xdr.h b/lib/libdss-include/rpc/xdr.h
new file mode 100644 (file)
index 0000000..d80d8f7
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ * xdr.h, External Data Representation Serialization Routines.
+ *
+ * Copyright (c) 2010, 2012, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPC_XDR_H
+#define _RPC_XDR_H 1
+
+#include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+
+/* We need FILE.  */
+#include <stdio.h>
+
+__BEGIN_DECLS
+
+/*
+ * XDR provides a conventional way for converting between C data
+ * types and an external bit-string representation.  Library supplied
+ * routines provide for the conversion on built-in C data types.  These
+ * routines and utility routines defined here are used to help implement
+ * a type encode/decode routine for each user-defined type.
+ *
+ * Each data type provides a single procedure which takes two arguments:
+ *
+ *      bool_t
+ *      xdrproc(xdrs, argresp)
+ *              XDR *xdrs;
+ *              <type> *argresp;
+ *
+ * xdrs is an instance of a XDR handle, to which or from which the data
+ * type is to be converted.  argresp is a pointer to the structure to be
+ * converted.  The XDR handle contains an operation field which indicates
+ * which of the operations (ENCODE, DECODE * or FREE) is to be performed.
+ *
+ * XDR_DECODE may allocate space if the pointer argresp is null.  This
+ * data can be freed with the XDR_FREE operation.
+ *
+ * We write only one procedure per data type to make it easy
+ * to keep the encode and decode procedures for a data type consistent.
+ * In many cases the same code performs all operations on a user defined type,
+ * because all the hard work is done in the component type routines.
+ * decode as a series of calls on the nested data types.
+ */
+
+/*
+ * Xdr operations.  XDR_ENCODE causes the type to be encoded into the
+ * stream.  XDR_DECODE causes the type to be extracted from the stream.
+ * XDR_FREE can be used to release the space allocated by an XDR_DECODE
+ * request.
+ */
+enum xdr_op {
+  XDR_ENCODE = 0,
+  XDR_DECODE = 1,
+  XDR_FREE = 2
+};
+
+/*
+ * This is the number of bytes per unit of external data.
+ */
+#define BYTES_PER_XDR_UNIT     (4)
+/*
+ * This only works if the above is a power of 2.  But it's defined to be
+ * 4 by the appropriate RFCs.  So it will work.  And it's normally quicker
+ * than the old routine.
+ */
+#if 1
+#define RNDUP(x)  (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1))
+#else /* this is the old routine */
+#define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
+                   * BYTES_PER_XDR_UNIT)
+#endif
+
+/*
+ * The XDR handle.
+ * Contains operation which is being applied to the stream,
+ * an operations vector for the particular implementation (e.g. see xdr_mem.c),
+ * and two private fields for the use of the particular implementation.
+ */
+typedef struct XDR XDR;
+struct XDR
+  {
+    enum xdr_op x_op;          /* operation; fast additional param */
+    struct xdr_ops
+      {
+       bool_t (*x_getlong) (XDR *__xdrs, long *__lp);
+       /* get a long from underlying stream */
+       bool_t (*x_putlong) (XDR *__xdrs, const long *__lp);
+       /* put a long to " */
+       bool_t (*x_getbytes) (XDR *__xdrs, caddr_t __addr, u_int __len);
+       /* get some bytes from " */
+       bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, u_int __len);
+       /* put some bytes to " */
+       u_int (*x_getpostn) (const XDR *__xdrs);
+       /* returns bytes off from beginning */
+       bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
+       /* lets you reposition the stream */
+       int32_t *(*x_inline) (XDR *__xdrs, u_int __len);
+       /* buf quick ptr to buffered data */
+       void (*x_destroy) (XDR *__xdrs);
+       /* free privates of this xdr_stream */
+       bool_t (*x_getint32) (XDR *__xdrs, int32_t *__ip);
+       /* get a int from underlying stream */
+       bool_t (*x_putint32) (XDR *__xdrs, const int32_t *__ip);
+       /* put a int to " */
+      }
+     *x_ops;
+    caddr_t x_public;          /* users' data */
+    caddr_t x_private;         /* pointer to private data */
+    caddr_t x_base;            /* private used for position info */
+    u_int x_handy;             /* extra private word */
+  };
+
+/*
+ * A xdrproc_t exists for each data type which is to be encoded or decoded.
+ *
+ * The second argument to the xdrproc_t is a pointer to an opaque pointer.
+ * The opaque pointer generally points to a structure of the data type
+ * to be decoded.  If this pointer is 0, then the type routines should
+ * allocate dynamic storage of the appropriate size and return it.
+ * bool_t       (*xdrproc_t)(XDR *, caddr_t *);
+ */
+typedef bool_t (*xdrproc_t) (XDR *, void *,...);
+
+
+/*
+ * Operations defined on a XDR handle
+ *
+ * XDR          *xdrs;
+ * int32_t      *int32p;
+ * long         *longp;
+ * caddr_t       addr;
+ * u_int         len;
+ * u_int         pos;
+ */
+#define XDR_GETINT32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
+#define xdr_getint32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
+
+#define XDR_PUTINT32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
+#define xdr_putint32(xdrs, int32p)                      \
+       (*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
+
+#define XDR_GETLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+#define xdr_getlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+
+#define XDR_PUTLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+#define xdr_putlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+
+#define XDR_GETBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+#define xdr_getbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+
+#define XDR_PUTBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+#define xdr_putbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+
+#define XDR_GETPOS(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+#define xdr_getpos(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+
+#define XDR_SETPOS(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+#define xdr_setpos(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+
+#define        XDR_INLINE(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+#define        xdr_inline(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+
+#define        XDR_DESTROY(xdrs)                                       \
+       do {                                                    \
+               if ((xdrs)->x_ops->x_destroy)                   \
+                       (*(xdrs)->x_ops->x_destroy)(xdrs);      \
+       } while (0)
+#define        xdr_destroy(xdrs)                                       \
+       do {                                                    \
+               if ((xdrs)->x_ops->x_destroy)                   \
+                       (*(xdrs)->x_ops->x_destroy)(xdrs);      \
+       } while (0)
+
+/*
+ * Support struct for discriminated unions.
+ * You create an array of xdrdiscrim structures, terminated with
+ * an entry with a null procedure pointer.  The xdr_union routine gets
+ * the discriminant value and then searches the array of structures
+ * for a matching value.  If a match is found the associated xdr routine
+ * is called to handle that part of the union.  If there is
+ * no match, then a default routine may be called.
+ * If there is no match and no default routine it is an error.
+ */
+#define NULL_xdrproc_t ((xdrproc_t)0)
+struct xdr_discrim
+{
+  int value;
+  xdrproc_t proc;
+};
+
+/*
+ * Inline routines for fast encode/decode of primitive data types.
+ * Caveat emptor: these use single memory cycles to get the
+ * data from the underlying buffer, and will fail to operate
+ * properly if the data is not aligned.  The standard way to use these
+ * is to say:
+ *      if ((buf = XDR_INLINE(xdrs, count)) == NULL)
+ *              return (FALSE);
+ *      <<< macro calls >>>
+ * where ``count'' is the number of bytes of data occupied
+ * by the primitive data types.
+ *
+ * N.B. and frozen for all time: each data type here uses 4 bytes
+ * of external representation.
+ */
+
+#define IXDR_GET_INT32(buf)           ((int32_t)ntohl((uint32_t)*(buf)++))
+#define IXDR_PUT_INT32(buf, v)        (*(buf)++ = (int32_t)htonl((uint32_t)(v)))
+#define IXDR_GET_U_INT32(buf)         ((uint32_t)IXDR_GET_INT32(buf))
+#define IXDR_PUT_U_INT32(buf, v)      IXDR_PUT_INT32(buf, (int32_t)(v))
+
+/* WARNING: The IXDR_*_LONG defines are removed by Sun for new platforms
+ * and shouldn't be used any longer. Code which use this defines or longs
+ * in the RPC code will not work on 64bit Solaris platforms !
+ */
+#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))
+#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))
+#define IXDR_GET_U_LONG(buf)         ((u_long)IXDR_GET_LONG(buf))
+#define IXDR_PUT_U_LONG(buf, v)              IXDR_PUT_LONG(buf, (long)(v))
+
+
+#define IXDR_GET_BOOL(buf)            ((bool_t)IXDR_GET_LONG(buf))
+#define IXDR_GET_ENUM(buf, t)         ((t)IXDR_GET_LONG(buf))
+#define IXDR_GET_SHORT(buf)           ((short)IXDR_GET_LONG(buf))
+#define IXDR_GET_U_SHORT(buf)         ((u_short)IXDR_GET_LONG(buf))
+
+#define IXDR_PUT_BOOL(buf, v)         IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_ENUM(buf, v)         IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_SHORT(buf, v)        IXDR_PUT_LONG(buf, (long)(v))
+#define IXDR_PUT_U_SHORT(buf, v)      IXDR_PUT_LONG(buf, (long)(v))
+
+/*
+ * These are the "generic" xdr routines.
+ * None of these can have const applied because it's not possible to
+ * know whether the call is a read or a write to the passed parameter
+ * also, the XDR structure is always updated by some of these calls.
+ */
+extern bool_t xdr_void (void) __THROW;
+extern bool_t xdr_short (XDR *__xdrs, short *__sp) __THROW;
+extern bool_t xdr_u_short (XDR *__xdrs, u_short *__usp) __THROW;
+extern bool_t xdr_int (XDR *__xdrs, int *__ip) __THROW;
+extern bool_t xdr_u_int (XDR *__xdrs, u_int *__up) __THROW;
+extern bool_t xdr_long (XDR *__xdrs, long *__lp) __THROW;
+extern bool_t xdr_u_long (XDR *__xdrs, u_long *__ulp) __THROW;
+extern bool_t xdr_hyper (XDR *__xdrs, quad_t *__llp) __THROW;
+extern bool_t xdr_u_hyper (XDR *__xdrs, u_quad_t *__ullp) __THROW;
+extern bool_t xdr_longlong_t (XDR *__xdrs, quad_t *__llp) __THROW;
+extern bool_t xdr_u_longlong_t (XDR *__xdrs, u_quad_t *__ullp) __THROW;
+extern bool_t xdr_int8_t (XDR *__xdrs, int8_t *__ip) __THROW;
+extern bool_t xdr_uint8_t (XDR *__xdrs, uint8_t *__up) __THROW;
+extern bool_t xdr_int16_t (XDR *__xdrs, int16_t *__ip) __THROW;
+extern bool_t xdr_uint16_t (XDR *__xdrs, uint16_t *__up) __THROW;
+extern bool_t xdr_int32_t (XDR *__xdrs, int32_t *__ip) __THROW;
+extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
+extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
+extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
+extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
+extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
+extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
+extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
+extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
+                        u_int __maxsize, u_int __elsize, xdrproc_t __elproc)
+     __THROW;
+extern bool_t xdr_bytes (XDR *__xdrs, char **__cpp, u_int *__sizep,
+                        u_int __maxsize) __THROW;
+extern bool_t xdr_opaque (XDR *__xdrs, caddr_t __cp, u_int __cnt) __THROW;
+extern bool_t xdr_string (XDR *__xdrs, char **__cpp, u_int __maxsize) __THROW;
+extern bool_t xdr_union (XDR *__xdrs, enum_t *__dscmp, char *__unp,
+                        const struct xdr_discrim *__choices,
+                        xdrproc_t __dfault) __THROW;
+extern bool_t xdr_char (XDR *__xdrs, char *__cp) __THROW;
+extern bool_t xdr_u_char (XDR *__xdrs, u_char *__cp) __THROW;
+extern bool_t xdr_vector (XDR *__xdrs, char *__basep, u_int __nelem,
+                         u_int __elemsize, xdrproc_t __xdr_elem) __THROW;
+extern bool_t xdr_float (XDR *__xdrs, float *__fp) __THROW;
+extern bool_t xdr_double (XDR *__xdrs, double *__dp) __THROW;
+extern bool_t xdr_reference (XDR *__xdrs, caddr_t *__xpp, u_int __size,
+                            xdrproc_t __proc) __THROW;
+extern bool_t xdr_pointer (XDR *__xdrs, char **__objpp,
+                          u_int __obj_size, xdrproc_t __xdr_obj) __THROW;
+extern bool_t xdr_wrapstring (XDR *__xdrs, char **__cpp) __THROW;
+extern u_long xdr_sizeof (xdrproc_t, void *) __THROW;
+
+/*
+ * Common opaque bytes objects used by many rpc protocols;
+ * declared here due to commonality.
+ */
+#define MAX_NETOBJ_SZ 1024
+struct netobj
+{
+  u_int n_len;
+  char *n_bytes;
+};
+typedef struct netobj netobj;
+extern bool_t xdr_netobj (XDR *__xdrs, struct netobj *__np) __THROW;
+
+/*
+ * These are the public routines for the various implementations of
+ * xdr streams.
+ */
+
+/* XDR using memory buffers */
+extern void xdrmem_create (XDR *__xdrs, const caddr_t __addr,
+                          u_int __size, enum xdr_op __xop) __THROW;
+
+/* XDR using stdio library */
+extern void xdrstdio_create (XDR *__xdrs, FILE *__file, enum xdr_op __xop)
+     __THROW;
+
+/* XDR pseudo records for tcp */
+extern void xdrrec_create (XDR *__xdrs, u_int __sendsize,
+                          u_int __recvsize, caddr_t __tcp_handle,
+                          int (*__readit) (char *, char *, int),
+                          int (*__writeit) (char *, char *, int)) __THROW;
+
+/* make end of xdr record */
+extern bool_t xdrrec_endofrecord (XDR *__xdrs, bool_t __sendnow) __THROW;
+
+/* move to beginning of next record */
+extern bool_t xdrrec_skiprecord (XDR *__xdrs) __THROW;
+
+/* true if no more input */
+extern bool_t xdrrec_eof (XDR *__xdrs) __THROW;
+
+/* free memory buffers for xdr */
+extern void xdr_free (xdrproc_t __proc, char *__objp) __THROW;
+
+__END_DECLS
+
+#endif /* rpc/xdr.h */
diff --git a/lib/libdss-include/rpcsvc/bootparam.h b/lib/libdss-include/rpcsvc/bootparam.h
new file mode 100644 (file)
index 0000000..0351a79
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _RPCSVC_BOOTPARAM_H
+#define _RPCSVC_BOOTPARAM_H
+
+#include <rpcsvc/bootparam_prot.h>
+
+#endif  /* _RPCSVC_BOOTPARAM_H */
diff --git a/lib/libdss-include/rpcsvc/bootparam_prot.h b/lib/libdss-include/rpcsvc/bootparam_prot.h
new file mode 100644 (file)
index 0000000..fbed446
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _BOOTPARAM_PROT_H_RPCGEN
+#define _BOOTPARAM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rpc/types.h>
+#include <sys/time.h>
+#include <sys/errno.h>
+#include <nfs/nfs.h>
+#define MAX_MACHINE_NAME 255
+#define MAX_PATH_LEN 1024
+#define MAX_FILEID 32
+#define IP_ADDR_TYPE 1
+
+typedef char *bp_machine_name_t;
+
+typedef char *bp_path_t;
+
+typedef char *bp_fileid_t;
+
+struct ip_addr_t {
+       char net;
+       char host;
+       char lh;
+       char impno;
+};
+typedef struct ip_addr_t ip_addr_t;
+
+struct bp_address {
+       int address_type;
+       union {
+               ip_addr_t ip_addr;
+       } bp_address_u;
+};
+typedef struct bp_address bp_address;
+
+struct bp_whoami_arg {
+       bp_address client_address;
+};
+typedef struct bp_whoami_arg bp_whoami_arg;
+
+struct bp_whoami_res {
+       bp_machine_name_t client_name;
+       bp_machine_name_t domain_name;
+       bp_address router_address;
+};
+typedef struct bp_whoami_res bp_whoami_res;
+
+struct bp_getfile_arg {
+       bp_machine_name_t client_name;
+       bp_fileid_t file_id;
+};
+typedef struct bp_getfile_arg bp_getfile_arg;
+
+struct bp_getfile_res {
+       bp_machine_name_t server_name;
+       bp_address server_address;
+       bp_path_t server_path;
+};
+typedef struct bp_getfile_res bp_getfile_res;
+
+#define BOOTPARAMPROG 100026
+#define BOOTPARAMVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define BOOTPARAMPROC_WHOAMI 1
+extern  bp_whoami_res * bootparamproc_whoami_1(bp_whoami_arg *, CLIENT *);
+extern  bp_whoami_res * bootparamproc_whoami_1_svc(bp_whoami_arg *, struct svc_req *);
+#define BOOTPARAMPROC_GETFILE 2
+extern  bp_getfile_res * bootparamproc_getfile_1(bp_getfile_arg *, CLIENT *);
+extern  bp_getfile_res * bootparamproc_getfile_1_svc(bp_getfile_arg *, struct svc_req *);
+extern int bootparamprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define BOOTPARAMPROC_WHOAMI 1
+extern  bp_whoami_res * bootparamproc_whoami_1();
+extern  bp_whoami_res * bootparamproc_whoami_1_svc();
+#define BOOTPARAMPROC_GETFILE 2
+extern  bp_getfile_res * bootparamproc_getfile_1();
+extern  bp_getfile_res * bootparamproc_getfile_1_svc();
+extern int bootparamprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_bp_machine_name_t (XDR *, bp_machine_name_t*);
+extern  bool_t xdr_bp_path_t (XDR *, bp_path_t*);
+extern  bool_t xdr_bp_fileid_t (XDR *, bp_fileid_t*);
+extern  bool_t xdr_ip_addr_t (XDR *, ip_addr_t*);
+extern  bool_t xdr_bp_address (XDR *, bp_address*);
+extern  bool_t xdr_bp_whoami_arg (XDR *, bp_whoami_arg*);
+extern  bool_t xdr_bp_whoami_res (XDR *, bp_whoami_res*);
+extern  bool_t xdr_bp_getfile_arg (XDR *, bp_getfile_arg*);
+extern  bool_t xdr_bp_getfile_res (XDR *, bp_getfile_res*);
+
+#else /* K&R C */
+extern bool_t xdr_bp_machine_name_t ();
+extern bool_t xdr_bp_path_t ();
+extern bool_t xdr_bp_fileid_t ();
+extern bool_t xdr_ip_addr_t ();
+extern bool_t xdr_bp_address ();
+extern bool_t xdr_bp_whoami_arg ();
+extern bool_t xdr_bp_whoami_res ();
+extern bool_t xdr_bp_getfile_arg ();
+extern bool_t xdr_bp_getfile_res ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_BOOTPARAM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/bootparam_prot.x b/lib/libdss-include/rpcsvc/bootparam_prot.x
new file mode 100644 (file)
index 0000000..117e428
--- /dev/null
@@ -0,0 +1,97 @@
+/* @(#)bootparam_prot.x        2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * RPC for bootparms service.
+ * There are two procedures:
+ *   WHOAMI takes a net address and returns a client name and also a
+ *     likely net address for routing
+ *   GETFILE takes a client name and file identifier and returns the
+ *     server name, server net address and pathname for the file.
+ *   file identifiers typically include root, swap, pub and dump
+ */
+
+#ifdef RPC_HDR
+%#include <rpc/types.h>
+%#include <sys/time.h>
+%#include <sys/errno.h>
+%#include <nfs/nfs.h>
+#endif
+
+const MAX_MACHINE_NAME  = 255;
+const MAX_PATH_LEN     = 1024;
+const MAX_FILEID       = 32;
+const IP_ADDR_TYPE     = 1;
+
+typedef        string  bp_machine_name_t<MAX_MACHINE_NAME>;
+typedef        string  bp_path_t<MAX_PATH_LEN>;
+typedef        string  bp_fileid_t<MAX_FILEID>;
+
+struct ip_addr_t {
+       char    net;
+       char    host;
+       char    lh;
+       char    impno;
+};
+
+union bp_address switch (int address_type) {
+       case IP_ADDR_TYPE:
+               ip_addr_t       ip_addr;
+};
+
+struct bp_whoami_arg {
+       bp_address              client_address;
+};
+
+struct bp_whoami_res {
+       bp_machine_name_t       client_name;
+       bp_machine_name_t       domain_name;
+       bp_address              router_address;
+};
+
+struct bp_getfile_arg {
+       bp_machine_name_t       client_name;
+       bp_fileid_t             file_id;
+};
+
+struct bp_getfile_res {
+       bp_machine_name_t       server_name;
+       bp_address              server_address;
+       bp_path_t               server_path;
+};
+
+program BOOTPARAMPROG {
+       version BOOTPARAMVERS {
+               bp_whoami_res   BOOTPARAMPROC_WHOAMI(bp_whoami_arg) = 1;
+               bp_getfile_res  BOOTPARAMPROC_GETFILE(bp_getfile_arg) = 2;
+       } = 1;
+} = 100026;
diff --git a/lib/libdss-include/rpcsvc/key_prot.h b/lib/libdss-include/rpcsvc/key_prot.h
new file mode 100644 (file)
index 0000000..4fbdbf4
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KEY_PROT_H_RPCGEN
+#define _KEY_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+#pragma ident "@(#)key_prot.x  1.7     94/04/29 SMI"
+#endif
+
+/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
+
+/*
+ * Compiled from key_prot.x using rpcgen.
+ * DO NOT EDIT THIS FILE!
+ * This is NOT source code!
+ */
+#define PROOT 3
+#define HEXMODULUS "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
+#define HEXKEYBYTES 48
+#define KEYSIZE 192
+#define KEYBYTES 24
+#define KEYCHECKSUMSIZE 16
+
+enum keystatus {
+       KEY_SUCCESS = 0,
+       KEY_NOSECRET = 1,
+       KEY_UNKNOWN = 2,
+       KEY_SYSTEMERR = 3,
+};
+typedef enum keystatus keystatus;
+
+typedef char keybuf[HEXKEYBYTES];
+
+typedef char *netnamestr;
+
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+typedef struct cryptkeyarg cryptkeyarg;
+
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj remotekey;
+       des_block deskey;
+};
+typedef struct cryptkeyarg2 cryptkeyarg2;
+
+struct cryptkeyres {
+       keystatus status;
+       union {
+               des_block deskey;
+       } cryptkeyres_u;
+};
+typedef struct cryptkeyres cryptkeyres;
+#define MAXGIDS 16
+
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       struct {
+               u_int gids_len;
+               u_int *gids_val;
+       } gids;
+};
+typedef struct unixcred unixcred;
+
+struct getcredres {
+       keystatus status;
+       union {
+               unixcred cred;
+       } getcredres_u;
+};
+typedef struct getcredres getcredres;
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+typedef struct key_netstarg key_netstarg;
+
+struct key_netstres {
+       keystatus status;
+       union {
+               key_netstarg knet;
+       } key_netstres_u;
+};
+typedef struct key_netstres key_netstres;
+
+#ifndef opaque
+#define opaque char
+#endif
+
+
+#define KEY_PROG 100029
+#define KEY_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define KEY_SET 1
+extern  keystatus * key_set_1(char *, CLIENT *);
+extern  keystatus * key_set_1_svc(char *, struct svc_req *);
+#define KEY_ENCRYPT 2
+extern  cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_DECRYPT 3
+extern  cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
+#define KEY_GEN 4
+extern  des_block * key_gen_1(void *, CLIENT *);
+extern  des_block * key_gen_1_svc(void *, struct svc_req *);
+#define KEY_GETCRED 5
+extern  getcredres * key_getcred_1(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
+extern int key_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define KEY_SET 1
+extern  keystatus * key_set_1();
+extern  keystatus * key_set_1_svc();
+#define KEY_ENCRYPT 2
+extern  cryptkeyres * key_encrypt_1();
+extern  cryptkeyres * key_encrypt_1_svc();
+#define KEY_DECRYPT 3
+extern  cryptkeyres * key_decrypt_1();
+extern  cryptkeyres * key_decrypt_1_svc();
+#define KEY_GEN 4
+extern  des_block * key_gen_1();
+extern  des_block * key_gen_1_svc();
+#define KEY_GETCRED 5
+extern  getcredres * key_getcred_1();
+extern  getcredres * key_getcred_1_svc();
+extern int key_prog_1_freeresult ();
+#endif /* K&R C */
+#define KEY_VERS2 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  keystatus * key_set_2(char *, CLIENT *);
+extern  keystatus * key_set_2_svc(char *, struct svc_req *);
+extern  cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
+extern  cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
+extern  des_block * key_gen_2(void *, CLIENT *);
+extern  des_block * key_gen_2_svc(void *, struct svc_req *);
+extern  getcredres * key_getcred_2(netnamestr *, CLIENT *);
+extern  getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
+#define KEY_ENCRYPT_PK 6
+extern  cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_DECRYPT_PK 7
+extern  cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
+extern  cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
+#define KEY_NET_PUT 8
+extern  keystatus * key_net_put_2(key_netstarg *, CLIENT *);
+extern  keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
+#define KEY_NET_GET 9
+extern  key_netstres * key_net_get_2(void *, CLIENT *);
+extern  key_netstres * key_net_get_2_svc(void *, struct svc_req *);
+#define KEY_GET_CONV 10
+extern  cryptkeyres * key_get_conv_2(char *, CLIENT *);
+extern  cryptkeyres * key_get_conv_2_svc(char *, struct svc_req *);
+extern int key_prog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  keystatus * key_set_2();
+extern  keystatus * key_set_2_svc();
+extern  cryptkeyres * key_encrypt_2();
+extern  cryptkeyres * key_encrypt_2_svc();
+extern  cryptkeyres * key_decrypt_2();
+extern  cryptkeyres * key_decrypt_2_svc();
+extern  des_block * key_gen_2();
+extern  des_block * key_gen_2_svc();
+extern  getcredres * key_getcred_2();
+extern  getcredres * key_getcred_2_svc();
+#define KEY_ENCRYPT_PK 6
+extern  cryptkeyres * key_encrypt_pk_2();
+extern  cryptkeyres * key_encrypt_pk_2_svc();
+#define KEY_DECRYPT_PK 7
+extern  cryptkeyres * key_decrypt_pk_2();
+extern  cryptkeyres * key_decrypt_pk_2_svc();
+#define KEY_NET_PUT 8
+extern  keystatus * key_net_put_2();
+extern  keystatus * key_net_put_2_svc();
+#define KEY_NET_GET 9
+extern  key_netstres * key_net_get_2();
+extern  key_netstres * key_net_get_2_svc();
+#define KEY_GET_CONV 10
+extern  cryptkeyres * key_get_conv_2();
+extern  cryptkeyres * key_get_conv_2_svc();
+extern int key_prog_2_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_keystatus (XDR *, keystatus*);
+extern  bool_t xdr_keybuf (XDR *, keybuf);
+extern  bool_t xdr_netnamestr (XDR *, netnamestr*);
+extern  bool_t xdr_cryptkeyarg (XDR *, cryptkeyarg*);
+extern  bool_t xdr_cryptkeyarg2 (XDR *, cryptkeyarg2*);
+extern  bool_t xdr_cryptkeyres (XDR *, cryptkeyres*);
+extern  bool_t xdr_unixcred (XDR *, unixcred*);
+extern  bool_t xdr_getcredres (XDR *, getcredres*);
+extern  bool_t xdr_key_netstarg (XDR *, key_netstarg*);
+extern  bool_t xdr_key_netstres (XDR *, key_netstres*);
+
+#else /* K&R C */
+extern bool_t xdr_keystatus ();
+extern bool_t xdr_keybuf ();
+extern bool_t xdr_netnamestr ();
+extern bool_t xdr_cryptkeyarg ();
+extern bool_t xdr_cryptkeyarg2 ();
+extern bool_t xdr_cryptkeyres ();
+extern bool_t xdr_unixcred ();
+extern bool_t xdr_getcredres ();
+extern bool_t xdr_key_netstarg ();
+extern bool_t xdr_key_netstres ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_KEY_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/key_prot.x b/lib/libdss-include/rpcsvc/key_prot.x
new file mode 100644 (file)
index 0000000..9baf943
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+ * Key server protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The keyserver is a public key storage/encryption/decryption service
+ * The encryption method used is based on the Diffie-Hellman exponential
+ * key exchange technology.
+ *
+ * The key server is local to each machine, akin to the portmapper.
+ * Under TI-RPC, communication with the keyserver is through the
+ * loopback transport.
+ *
+ * NOTE: This .x file generates the USER level headers for the keyserver.
+ * the KERNEL level headers are created by hand as they kernel has special
+ * requirements.
+ */
+
+%#if 0
+%#pragma ident "@(#)key_prot.x 1.7     94/04/29 SMI"
+%#endif
+%
+%/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
+%
+%/*
+% * Compiled from key_prot.x using rpcgen.
+% * DO NOT EDIT THIS FILE!
+% * This is NOT source code!
+% */
+
+/*
+ * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
+ *
+ * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
+ * where p is also prime.
+ *
+ * PROOT satisfies the following two conditions:
+ * (1) (PROOT ** 2) % MODULUS != 1
+ * (2) (PROOT ** p) % MODULUS != 1
+ *
+ */
+
+const PROOT = 3;
+const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
+
+const HEXKEYBYTES = 48;                /* HEXKEYBYTES == strlen(HEXMODULUS) */
+const KEYSIZE = 192;           /* KEYSIZE == bit length of key */
+const KEYBYTES = 24;           /* byte length of key */
+
+/*
+ * The first 16 hex digits of the encrypted secret key are used as
+ * a checksum in the database.
+ */
+const KEYCHECKSUMSIZE = 16;
+
+/*
+ * status of operation
+ */
+enum keystatus {
+       KEY_SUCCESS,    /* no problems */
+       KEY_NOSECRET,   /* no secret key stored */
+       KEY_UNKNOWN,    /* unknown netname */
+       KEY_SYSTEMERR   /* system error (out of memory, encryption failure) */
+};
+
+typedef opaque keybuf[HEXKEYBYTES];    /* store key in hex */
+
+typedef string netnamestr<MAXNETNAMELEN>;
+
+/*
+ * Argument to ENCRYPT or DECRYPT
+ */
+struct cryptkeyarg {
+       netnamestr remotename;
+       des_block deskey;
+};
+
+/*
+ * Argument to ENCRYPT_PK or DECRYPT_PK
+ */
+struct cryptkeyarg2 {
+       netnamestr remotename;
+       netobj  remotekey;      /* Contains a length up to 1024 bytes */
+       des_block deskey;
+};
+
+
+/*
+ * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
+ */
+union cryptkeyres switch (keystatus status) {
+case KEY_SUCCESS:
+       des_block deskey;
+default:
+       void;
+};
+
+const MAXGIDS  = 16;   /* max number of gids in gid list */
+
+/*
+ * Unix credential
+ */
+struct unixcred {
+       u_int uid;
+       u_int gid;
+       u_int gids<MAXGIDS>;
+};
+
+/*
+ * Result returned from GETCRED
+ */
+union getcredres switch (keystatus status) {
+case KEY_SUCCESS:
+       unixcred cred;
+default:
+       void;
+};
+/*
+ * key_netstarg;
+ */
+
+struct key_netstarg {
+       keybuf st_priv_key;
+       keybuf st_pub_key;
+       netnamestr st_netname;
+};
+
+union key_netstres switch (keystatus status){
+case KEY_SUCCESS:
+       key_netstarg knet;
+default:
+       void;
+};
+
+#ifdef RPC_HDR
+%
+%#ifndef opaque
+%#define opaque char
+%#endif
+%
+#endif
+program KEY_PROG {
+       version KEY_VERS {
+
+               /*
+                * This is my secret key.
+                * Store it for me.
+                */
+               keystatus
+               KEY_SET(keybuf) = 1;
+
+               /*
+                * I want to talk to X.
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT(cryptkeyarg) = 2;
+
+               /*
+                * X just sent me a message.
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT(cryptkeyarg) = 3;
+
+               /*
+                * Generate a secure conversation key for me
+                */
+               des_block
+               KEY_GEN(void) = 4;
+
+               /*
+                * Get me the uid, gid and group-access-list associated
+                * with this netname (for kernel which cannot use NIS)
+                */
+               getcredres
+               KEY_GETCRED(netnamestr) = 5;
+       } = 1;
+       version KEY_VERS2 {
+
+               /*
+                * #######
+                * Procedures 1-5 are identical to version 1
+                * #######
+                */
+
+               /*
+                * This is my secret key.
+                * Store it for me.
+                */
+               keystatus
+               KEY_SET(keybuf) = 1;
+
+               /*
+                * I want to talk to X.
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT(cryptkeyarg) = 2;
+
+               /*
+                * X just sent me a message.
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT(cryptkeyarg) = 3;
+
+               /*
+                * Generate a secure conversation key for me
+                */
+               des_block
+               KEY_GEN(void) = 4;
+
+               /*
+                * Get me the uid, gid and group-access-list associated
+                * with this netname (for kernel which cannot use NIS)
+                */
+               getcredres
+               KEY_GETCRED(netnamestr) = 5;
+
+               /*
+                * I want to talk to X. and I know X's public key
+                * Encrypt a conversation key for me.
+                */
+               cryptkeyres
+               KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
+
+               /*
+                * X just sent me a message. and I know X's public key
+                * Decrypt the conversation key for me.
+                */
+               cryptkeyres
+               KEY_DECRYPT_PK(cryptkeyarg2) = 7;
+
+               /*
+                * Store my public key, netname and private key.
+                */
+               keystatus
+               KEY_NET_PUT(key_netstarg) = 8;
+
+               /*
+                * Retrieve my public key, netname and private key.
+                */
+               key_netstres
+               KEY_NET_GET(void) = 9;
+
+               /*
+                * Return me the conversation key that is constructed
+                * from my secret key and this publickey.
+                */
+
+               cryptkeyres
+               KEY_GET_CONV(keybuf) = 10;
+
+
+       } = 2;
+} = 100029;
diff --git a/lib/libdss-include/rpcsvc/klm_prot.h b/lib/libdss-include/rpcsvc/klm_prot.h
new file mode 100644 (file)
index 0000000..6ec281e
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _KLM_PROT_H_RPCGEN
+#define _KLM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LM_MAXSTRLEN 1024
+
+enum klm_stats {
+       klm_granted = 0,
+       klm_denied = 1,
+       klm_denied_nolocks = 2,
+       klm_working = 3,
+};
+typedef enum klm_stats klm_stats;
+
+struct klm_lock {
+       char *server_name;
+       netobj fh;
+       int pid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct klm_lock klm_lock;
+
+struct klm_holder {
+       bool_t exclusive;
+       int svid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct klm_holder klm_holder;
+
+struct klm_stat {
+       klm_stats stat;
+};
+typedef struct klm_stat klm_stat;
+
+struct klm_testrply {
+       klm_stats stat;
+       union {
+               struct klm_holder holder;
+       } klm_testrply_u;
+};
+typedef struct klm_testrply klm_testrply;
+
+struct klm_lockargs {
+       bool_t block;
+       bool_t exclusive;
+       struct klm_lock alock;
+};
+typedef struct klm_lockargs klm_lockargs;
+
+struct klm_testargs {
+       bool_t exclusive;
+       struct klm_lock alock;
+};
+typedef struct klm_testargs klm_testargs;
+
+struct klm_unlockargs {
+       struct klm_lock alock;
+};
+typedef struct klm_unlockargs klm_unlockargs;
+
+#define KLM_PROG 100020
+#define KLM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define KLM_TEST 1
+extern  klm_testrply * klm_test_1(struct klm_testargs *, CLIENT *);
+extern  klm_testrply * klm_test_1_svc(struct klm_testargs *, struct svc_req *);
+#define KLM_LOCK 2
+extern  klm_stat * klm_lock_1(struct klm_lockargs *, CLIENT *);
+extern  klm_stat * klm_lock_1_svc(struct klm_lockargs *, struct svc_req *);
+#define KLM_CANCEL 3
+extern  klm_stat * klm_cancel_1(struct klm_lockargs *, CLIENT *);
+extern  klm_stat * klm_cancel_1_svc(struct klm_lockargs *, struct svc_req *);
+#define KLM_UNLOCK 4
+extern  klm_stat * klm_unlock_1(struct klm_unlockargs *, CLIENT *);
+extern  klm_stat * klm_unlock_1_svc(struct klm_unlockargs *, struct svc_req *);
+extern int klm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define KLM_TEST 1
+extern  klm_testrply * klm_test_1();
+extern  klm_testrply * klm_test_1_svc();
+#define KLM_LOCK 2
+extern  klm_stat * klm_lock_1();
+extern  klm_stat * klm_lock_1_svc();
+#define KLM_CANCEL 3
+extern  klm_stat * klm_cancel_1();
+extern  klm_stat * klm_cancel_1_svc();
+#define KLM_UNLOCK 4
+extern  klm_stat * klm_unlock_1();
+extern  klm_stat * klm_unlock_1_svc();
+extern int klm_prog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_klm_stats (XDR *, klm_stats*);
+extern  bool_t xdr_klm_lock (XDR *, klm_lock*);
+extern  bool_t xdr_klm_holder (XDR *, klm_holder*);
+extern  bool_t xdr_klm_stat (XDR *, klm_stat*);
+extern  bool_t xdr_klm_testrply (XDR *, klm_testrply*);
+extern  bool_t xdr_klm_lockargs (XDR *, klm_lockargs*);
+extern  bool_t xdr_klm_testargs (XDR *, klm_testargs*);
+extern  bool_t xdr_klm_unlockargs (XDR *, klm_unlockargs*);
+
+#else /* K&R C */
+extern bool_t xdr_klm_stats ();
+extern bool_t xdr_klm_lock ();
+extern bool_t xdr_klm_holder ();
+extern bool_t xdr_klm_stat ();
+extern bool_t xdr_klm_testrply ();
+extern bool_t xdr_klm_lockargs ();
+extern bool_t xdr_klm_testargs ();
+extern bool_t xdr_klm_unlockargs ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_KLM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/klm_prot.x b/lib/libdss-include/rpcsvc/klm_prot.x
new file mode 100644 (file)
index 0000000..aee5b1a
--- /dev/null
@@ -0,0 +1,130 @@
+/* @(#)klm_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Kernel/lock manager protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * protocol used between the UNIX kernel (the "client") and the
+ * local lock manager.  The local lock manager is a deamon running
+ * above the kernel.
+ */
+
+const  LM_MAXSTRLEN = 1024;
+
+/*
+ * lock manager status returns
+ */
+enum klm_stats {
+       klm_granted = 0,        /* lock is granted */
+       klm_denied = 1,         /* lock is denied */
+       klm_denied_nolocks = 2, /* no lock entry available */
+       klm_working = 3         /* lock is being processed */
+};
+
+/*
+ * lock manager lock identifier
+ */
+struct klm_lock {
+       string server_name<LM_MAXSTRLEN>;
+       netobj fh;              /* a counted file handle */
+       int pid;                /* holder of the lock */
+       unsigned l_offset;      /* beginning offset of the lock */
+       unsigned l_len;         /* byte length of the lock;
+                                * zero means through end of file */
+};
+
+/*
+ * lock holder identifier
+ */
+struct klm_holder {
+       bool exclusive;         /* FALSE if shared lock */
+       int svid;               /* holder of the lock (pid) */
+       unsigned l_offset;      /* beginning offset of the lock */
+       unsigned l_len;         /* byte length of the lock;
+                                * zero means through end of file */
+};
+
+/*
+ * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
+ */
+struct klm_stat {
+       klm_stats stat;
+};
+
+/*
+ * reply to a KLM_TEST call
+ */
+union klm_testrply switch (klm_stats stat) {
+       case klm_denied:
+               struct klm_holder holder;
+       default: /* All other cases return no arguments */
+               void;
+};
+
+
+/*
+ * arguments to KLM_LOCK
+ */
+struct klm_lockargs {
+       bool block;
+       bool exclusive;
+       struct klm_lock alock;
+};
+
+/*
+ * arguments to KLM_TEST
+ */
+struct klm_testargs {
+       bool exclusive;
+       struct klm_lock alock;
+};
+
+/*
+ * arguments to KLM_UNLOCK
+ */
+struct klm_unlockargs {
+       struct klm_lock alock;
+};
+
+program KLM_PROG {
+       version KLM_VERS {
+
+               klm_testrply    KLM_TEST (struct klm_testargs) =        1;
+
+               klm_stat        KLM_LOCK (struct klm_lockargs) =        2;
+
+               klm_stat        KLM_CANCEL (struct klm_lockargs) =      3;
+               /* klm_granted=> the cancel request fails due to lock is already granted */
+               /* klm_denied=> the cancel request successfully aborts
+lock request  */
+
+               klm_stat        KLM_UNLOCK (struct klm_unlockargs) =    4;
+       } = 1;
+} = 100020;
diff --git a/lib/libdss-include/rpcsvc/mount.h b/lib/libdss-include/rpcsvc/mount.h
new file mode 100644 (file)
index 0000000..de22f29
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _MOUNT_H_RPCGEN
+#define _MOUNT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MNTPATHLEN 1024
+#define MNTNAMLEN 255
+#define FHSIZE 32
+
+typedef char fhandle[FHSIZE];
+
+struct fhstatus {
+       u_int fhs_status;
+       union {
+               fhandle fhs_fhandle;
+       } fhstatus_u;
+};
+typedef struct fhstatus fhstatus;
+
+typedef char *dirpath;
+
+typedef char *name;
+
+typedef struct mountbody *mountlist;
+
+struct mountbody {
+       name ml_hostname;
+       dirpath ml_directory;
+       mountlist ml_next;
+};
+typedef struct mountbody mountbody;
+
+typedef struct groupnode *groups;
+
+struct groupnode {
+       name gr_name;
+       groups gr_next;
+};
+typedef struct groupnode groupnode;
+
+typedef struct exportnode *exports;
+
+struct exportnode {
+       dirpath ex_dir;
+       groups ex_groups;
+       exports ex_next;
+};
+typedef struct exportnode exportnode;
+
+#define MOUNTPROG 100005
+#define MOUNTVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define MOUNTPROC_NULL 0
+extern  void * mountproc_null_1(void *, CLIENT *);
+extern  void * mountproc_null_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_MNT 1
+extern  fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
+extern  fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
+#define MOUNTPROC_DUMP 2
+extern  mountlist * mountproc_dump_1(void *, CLIENT *);
+extern  mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_UMNT 3
+extern  void * mountproc_umnt_1(dirpath *, CLIENT *);
+extern  void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
+#define MOUNTPROC_UMNTALL 4
+extern  void * mountproc_umntall_1(void *, CLIENT *);
+extern  void * mountproc_umntall_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_EXPORT 5
+extern  exports * mountproc_export_1(void *, CLIENT *);
+extern  exports * mountproc_export_1_svc(void *, struct svc_req *);
+#define MOUNTPROC_EXPORTALL 6
+extern  exports * mountproc_exportall_1(void *, CLIENT *);
+extern  exports * mountproc_exportall_1_svc(void *, struct svc_req *);
+extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define MOUNTPROC_NULL 0
+extern  void * mountproc_null_1();
+extern  void * mountproc_null_1_svc();
+#define MOUNTPROC_MNT 1
+extern  fhstatus * mountproc_mnt_1();
+extern  fhstatus * mountproc_mnt_1_svc();
+#define MOUNTPROC_DUMP 2
+extern  mountlist * mountproc_dump_1();
+extern  mountlist * mountproc_dump_1_svc();
+#define MOUNTPROC_UMNT 3
+extern  void * mountproc_umnt_1();
+extern  void * mountproc_umnt_1_svc();
+#define MOUNTPROC_UMNTALL 4
+extern  void * mountproc_umntall_1();
+extern  void * mountproc_umntall_1_svc();
+#define MOUNTPROC_EXPORT 5
+extern  exports * mountproc_export_1();
+extern  exports * mountproc_export_1_svc();
+#define MOUNTPROC_EXPORTALL 6
+extern  exports * mountproc_exportall_1();
+extern  exports * mountproc_exportall_1_svc();
+extern int mountprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_fhandle (XDR *, fhandle);
+extern  bool_t xdr_fhstatus (XDR *, fhstatus*);
+extern  bool_t xdr_dirpath (XDR *, dirpath*);
+extern  bool_t xdr_name (XDR *, name*);
+extern  bool_t xdr_mountlist (XDR *, mountlist*);
+extern  bool_t xdr_mountbody (XDR *, mountbody*);
+extern  bool_t xdr_groups (XDR *, groups*);
+extern  bool_t xdr_groupnode (XDR *, groupnode*);
+extern  bool_t xdr_exports (XDR *, exports*);
+extern  bool_t xdr_exportnode (XDR *, exportnode*);
+
+#else /* K&R C */
+extern bool_t xdr_fhandle ();
+extern bool_t xdr_fhstatus ();
+extern bool_t xdr_dirpath ();
+extern bool_t xdr_name ();
+extern bool_t xdr_mountlist ();
+extern bool_t xdr_mountbody ();
+extern bool_t xdr_groups ();
+extern bool_t xdr_groupnode ();
+extern bool_t xdr_exports ();
+extern bool_t xdr_exportnode ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_MOUNT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/mount.x b/lib/libdss-include/rpcsvc/mount.x
new file mode 100644 (file)
index 0000000..ed3b339
--- /dev/null
@@ -0,0 +1,161 @@
+/* @(#)mount.x 2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Protocol description for the mount program
+ */
+
+
+const MNTPATHLEN = 1024;       /* maximum bytes in a pathname argument */
+const MNTNAMLEN = 255;         /* maximum bytes in a name argument */
+const FHSIZE = 32;             /* size in bytes of a file handle */
+
+/*
+ * The fhandle is the file handle that the server passes to the client.
+ * All file operations are done using the file handles to refer to a file
+ * or a directory. The file handle can contain whatever information the
+ * server needs to distinguish an individual file.
+ */
+typedef opaque fhandle[FHSIZE];
+
+/*
+ * If a status of zero is returned, the call completed successfully, and
+ * a file handle for the directory follows. A non-zero status indicates
+ * some sort of error. The status corresponds with UNIX error numbers.
+ */
+union fhstatus switch (unsigned fhs_status) {
+case 0:
+       fhandle fhs_fhandle;
+default:
+       void;
+};
+
+/*
+ * The type dirpath is the pathname of a directory
+ */
+typedef string dirpath<MNTPATHLEN>;
+
+/*
+ * The type name is used for arbitrary names (hostnames, groupnames)
+ */
+typedef string name<MNTNAMLEN>;
+
+/*
+ * A list of who has what mounted
+ */
+typedef struct mountbody *mountlist;
+struct mountbody {
+       name ml_hostname;
+       dirpath ml_directory;
+       mountlist ml_next;
+};
+
+/*
+ * A list of netgroups
+ */
+typedef struct groupnode *groups;
+struct groupnode {
+       name gr_name;
+       groups gr_next;
+};
+
+/*
+ * A list of what is exported and to whom
+ */
+typedef struct exportnode *exports;
+struct exportnode {
+       dirpath ex_dir;
+       groups ex_groups;
+       exports ex_next;
+};
+
+program MOUNTPROG {
+       /*
+        * Version one of the mount protocol communicates with version two
+        * of the NFS protocol. The only connecting point is the fhandle
+        * structure, which is the same for both protocols.
+        */
+       version MOUNTVERS {
+               /*
+                * Does no work. It is made available in all RPC services
+                * to allow server response testing and timing
+                */
+               void
+               MOUNTPROC_NULL(void) = 0;
+
+               /*
+                * If fhs_status is 0, then fhs_fhandle contains the
+                * file handle for the directory. This file handle may
+                * be used in the NFS protocol. This procedure also adds
+                * a new entry to the mount list for this client mounting
+                * the directory.
+                * Unix authentication required.
+                */
+               fhstatus
+               MOUNTPROC_MNT(dirpath) = 1;
+
+               /*
+                * Returns the list of remotely mounted filesystems. The
+                * mountlist contains one entry for each hostname and
+                * directory pair.
+                */
+               mountlist
+               MOUNTPROC_DUMP(void) = 2;
+
+               /*
+                * Removes the mount list entry for the directory
+                * Unix authentication required.
+                */
+               void
+               MOUNTPROC_UMNT(dirpath) = 3;
+
+               /*
+                * Removes all of the mount list entries for this client
+                * Unix authentication required.
+                */
+               void
+               MOUNTPROC_UMNTALL(void) = 4;
+
+               /*
+                * Returns a list of all the exported filesystems, and which
+                * machines are allowed to import it.
+                */
+               exports
+               MOUNTPROC_EXPORT(void)  = 5;
+
+               /*
+                * Identical to MOUNTPROC_EXPORT above
+                */
+               exports
+               MOUNTPROC_EXPORTALL(void) = 6;
+       } = 1;
+} = 100005;
diff --git a/lib/libdss-include/rpcsvc/nfs_prot.h b/lib/libdss-include/rpcsvc/nfs_prot.h
new file mode 100644 (file)
index 0000000..6cf626a
--- /dev/null
@@ -0,0 +1,450 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _NFS_PROT_H_RPCGEN
+#define _NFS_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NFS_PORT 2049
+#define NFS_MAXDATA 8192
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN 255
+#define NFS_FHSIZE 32
+#define NFS_COOKIESIZE 4
+#define NFS_FIFO_DEV -1
+#define NFSMODE_FMT 0170000
+#define NFSMODE_DIR 0040000
+#define NFSMODE_CHR 0020000
+#define NFSMODE_BLK 0060000
+#define NFSMODE_REG 0100000
+#define NFSMODE_LNK 0120000
+#define NFSMODE_SOCK 0140000
+#define NFSMODE_FIFO 0010000
+
+enum nfsstat {
+       NFS_OK = 0,
+       NFSERR_PERM = 1,
+       NFSERR_NOENT = 2,
+       NFSERR_IO = 5,
+       NFSERR_NXIO = 6,
+       NFSERR_ACCES = 13,
+       NFSERR_EXIST = 17,
+       NFSERR_NODEV = 19,
+       NFSERR_NOTDIR = 20,
+       NFSERR_ISDIR = 21,
+       NFSERR_FBIG = 27,
+       NFSERR_NOSPC = 28,
+       NFSERR_ROFS = 30,
+       NFSERR_NAMETOOLONG = 63,
+       NFSERR_NOTEMPTY = 66,
+       NFSERR_DQUOT = 69,
+       NFSERR_STALE = 70,
+       NFSERR_WFLUSH = 99,
+};
+typedef enum nfsstat nfsstat;
+
+enum ftype {
+       NFNON = 0,
+       NFREG = 1,
+       NFDIR = 2,
+       NFBLK = 3,
+       NFCHR = 4,
+       NFLNK = 5,
+       NFSOCK = 6,
+       NFBAD = 7,
+       NFFIFO = 8,
+};
+typedef enum ftype ftype;
+
+struct nfs_fh {
+       char data[NFS_FHSIZE];
+};
+typedef struct nfs_fh nfs_fh;
+
+struct nfstime {
+       u_int seconds;
+       u_int useconds;
+};
+typedef struct nfstime nfstime;
+
+struct fattr {
+       ftype type;
+       u_int mode;
+       u_int nlink;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       u_int blocksize;
+       u_int rdev;
+       u_int blocks;
+       u_int fsid;
+       u_int fileid;
+       nfstime atime;
+       nfstime mtime;
+       nfstime ctime;
+};
+typedef struct fattr fattr;
+
+struct sattr {
+       u_int mode;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       nfstime atime;
+       nfstime mtime;
+};
+typedef struct sattr sattr;
+
+typedef char *filename;
+
+typedef char *nfspath;
+
+struct attrstat {
+       nfsstat status;
+       union {
+               fattr attributes;
+       } attrstat_u;
+};
+typedef struct attrstat attrstat;
+
+struct sattrargs {
+       nfs_fh file;
+       sattr attributes;
+};
+typedef struct sattrargs sattrargs;
+
+struct diropargs {
+       nfs_fh dir;
+       filename name;
+};
+typedef struct diropargs diropargs;
+
+struct diropokres {
+       nfs_fh file;
+       fattr attributes;
+};
+typedef struct diropokres diropokres;
+
+struct diropres {
+       nfsstat status;
+       union {
+               diropokres diropres;
+       } diropres_u;
+};
+typedef struct diropres diropres;
+
+struct readlinkres {
+       nfsstat status;
+       union {
+               nfspath data;
+       } readlinkres_u;
+};
+typedef struct readlinkres readlinkres;
+
+struct readargs {
+       nfs_fh file;
+       u_int offset;
+       u_int count;
+       u_int totalcount;
+};
+typedef struct readargs readargs;
+
+struct readokres {
+       fattr attributes;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+};
+typedef struct readokres readokres;
+
+struct readres {
+       nfsstat status;
+       union {
+               readokres reply;
+       } readres_u;
+};
+typedef struct readres readres;
+
+struct writeargs {
+       nfs_fh file;
+       u_int beginoffset;
+       u_int offset;
+       u_int totalcount;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+};
+typedef struct writeargs writeargs;
+
+struct createargs {
+       diropargs where;
+       sattr attributes;
+};
+typedef struct createargs createargs;
+
+struct renameargs {
+       diropargs from;
+       diropargs to;
+};
+typedef struct renameargs renameargs;
+
+struct linkargs {
+       nfs_fh from;
+       diropargs to;
+};
+typedef struct linkargs linkargs;
+
+struct symlinkargs {
+       diropargs from;
+       nfspath to;
+       sattr attributes;
+};
+typedef struct symlinkargs symlinkargs;
+
+typedef char nfscookie[NFS_COOKIESIZE];
+
+struct readdirargs {
+       nfs_fh dir;
+       nfscookie cookie;
+       u_int count;
+};
+typedef struct readdirargs readdirargs;
+
+struct entry {
+       u_int fileid;
+       filename name;
+       nfscookie cookie;
+       struct entry *nextentry;
+};
+typedef struct entry entry;
+
+struct dirlist {
+       entry *entries;
+       bool_t eof;
+};
+typedef struct dirlist dirlist;
+
+struct readdirres {
+       nfsstat status;
+       union {
+               dirlist reply;
+       } readdirres_u;
+};
+typedef struct readdirres readdirres;
+
+struct statfsokres {
+       u_int tsize;
+       u_int bsize;
+       u_int blocks;
+       u_int bfree;
+       u_int bavail;
+};
+typedef struct statfsokres statfsokres;
+
+struct statfsres {
+       nfsstat status;
+       union {
+               statfsokres reply;
+       } statfsres_u;
+};
+typedef struct statfsres statfsres;
+
+#define NFS_PROGRAM 100003
+#define NFS_VERSION 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NFSPROC_NULL 0
+extern  void * nfsproc_null_2(void *, CLIENT *);
+extern  void * nfsproc_null_2_svc(void *, struct svc_req *);
+#define NFSPROC_GETATTR 1
+extern  attrstat * nfsproc_getattr_2(nfs_fh *, CLIENT *);
+extern  attrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *);
+#define NFSPROC_SETATTR 2
+extern  attrstat * nfsproc_setattr_2(sattrargs *, CLIENT *);
+extern  attrstat * nfsproc_setattr_2_svc(sattrargs *, struct svc_req *);
+#define NFSPROC_ROOT 3
+extern  void * nfsproc_root_2(void *, CLIENT *);
+extern  void * nfsproc_root_2_svc(void *, struct svc_req *);
+#define NFSPROC_LOOKUP 4
+extern  diropres * nfsproc_lookup_2(diropargs *, CLIENT *);
+extern  diropres * nfsproc_lookup_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_READLINK 5
+extern  readlinkres * nfsproc_readlink_2(nfs_fh *, CLIENT *);
+extern  readlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *);
+#define NFSPROC_READ 6
+extern  readres * nfsproc_read_2(readargs *, CLIENT *);
+extern  readres * nfsproc_read_2_svc(readargs *, struct svc_req *);
+#define NFSPROC_WRITECACHE 7
+extern  void * nfsproc_writecache_2(void *, CLIENT *);
+extern  void * nfsproc_writecache_2_svc(void *, struct svc_req *);
+#define NFSPROC_WRITE 8
+extern  attrstat * nfsproc_write_2(writeargs *, CLIENT *);
+extern  attrstat * nfsproc_write_2_svc(writeargs *, struct svc_req *);
+#define NFSPROC_CREATE 9
+extern  diropres * nfsproc_create_2(createargs *, CLIENT *);
+extern  diropres * nfsproc_create_2_svc(createargs *, struct svc_req *);
+#define NFSPROC_REMOVE 10
+extern  nfsstat * nfsproc_remove_2(diropargs *, CLIENT *);
+extern  nfsstat * nfsproc_remove_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_RENAME 11
+extern  nfsstat * nfsproc_rename_2(renameargs *, CLIENT *);
+extern  nfsstat * nfsproc_rename_2_svc(renameargs *, struct svc_req *);
+#define NFSPROC_LINK 12
+extern  nfsstat * nfsproc_link_2(linkargs *, CLIENT *);
+extern  nfsstat * nfsproc_link_2_svc(linkargs *, struct svc_req *);
+#define NFSPROC_SYMLINK 13
+extern  nfsstat * nfsproc_symlink_2(symlinkargs *, CLIENT *);
+extern  nfsstat * nfsproc_symlink_2_svc(symlinkargs *, struct svc_req *);
+#define NFSPROC_MKDIR 14
+extern  diropres * nfsproc_mkdir_2(createargs *, CLIENT *);
+extern  diropres * nfsproc_mkdir_2_svc(createargs *, struct svc_req *);
+#define NFSPROC_RMDIR 15
+extern  nfsstat * nfsproc_rmdir_2(diropargs *, CLIENT *);
+extern  nfsstat * nfsproc_rmdir_2_svc(diropargs *, struct svc_req *);
+#define NFSPROC_READDIR 16
+extern  readdirres * nfsproc_readdir_2(readdirargs *, CLIENT *);
+extern  readdirres * nfsproc_readdir_2_svc(readdirargs *, struct svc_req *);
+#define NFSPROC_STATFS 17
+extern  statfsres * nfsproc_statfs_2(nfs_fh *, CLIENT *);
+extern  statfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *);
+extern int nfs_program_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NFSPROC_NULL 0
+extern  void * nfsproc_null_2();
+extern  void * nfsproc_null_2_svc();
+#define NFSPROC_GETATTR 1
+extern  attrstat * nfsproc_getattr_2();
+extern  attrstat * nfsproc_getattr_2_svc();
+#define NFSPROC_SETATTR 2
+extern  attrstat * nfsproc_setattr_2();
+extern  attrstat * nfsproc_setattr_2_svc();
+#define NFSPROC_ROOT 3
+extern  void * nfsproc_root_2();
+extern  void * nfsproc_root_2_svc();
+#define NFSPROC_LOOKUP 4
+extern  diropres * nfsproc_lookup_2();
+extern  diropres * nfsproc_lookup_2_svc();
+#define NFSPROC_READLINK 5
+extern  readlinkres * nfsproc_readlink_2();
+extern  readlinkres * nfsproc_readlink_2_svc();
+#define NFSPROC_READ 6
+extern  readres * nfsproc_read_2();
+extern  readres * nfsproc_read_2_svc();
+#define NFSPROC_WRITECACHE 7
+extern  void * nfsproc_writecache_2();
+extern  void * nfsproc_writecache_2_svc();
+#define NFSPROC_WRITE 8
+extern  attrstat * nfsproc_write_2();
+extern  attrstat * nfsproc_write_2_svc();
+#define NFSPROC_CREATE 9
+extern  diropres * nfsproc_create_2();
+extern  diropres * nfsproc_create_2_svc();
+#define NFSPROC_REMOVE 10
+extern  nfsstat * nfsproc_remove_2();
+extern  nfsstat * nfsproc_remove_2_svc();
+#define NFSPROC_RENAME 11
+extern  nfsstat * nfsproc_rename_2();
+extern  nfsstat * nfsproc_rename_2_svc();
+#define NFSPROC_LINK 12
+extern  nfsstat * nfsproc_link_2();
+extern  nfsstat * nfsproc_link_2_svc();
+#define NFSPROC_SYMLINK 13
+extern  nfsstat * nfsproc_symlink_2();
+extern  nfsstat * nfsproc_symlink_2_svc();
+#define NFSPROC_MKDIR 14
+extern  diropres * nfsproc_mkdir_2();
+extern  diropres * nfsproc_mkdir_2_svc();
+#define NFSPROC_RMDIR 15
+extern  nfsstat * nfsproc_rmdir_2();
+extern  nfsstat * nfsproc_rmdir_2_svc();
+#define NFSPROC_READDIR 16
+extern  readdirres * nfsproc_readdir_2();
+extern  readdirres * nfsproc_readdir_2_svc();
+#define NFSPROC_STATFS 17
+extern  statfsres * nfsproc_statfs_2();
+extern  statfsres * nfsproc_statfs_2_svc();
+extern int nfs_program_2_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_nfsstat (XDR *, nfsstat*);
+extern  bool_t xdr_ftype (XDR *, ftype*);
+extern  bool_t xdr_nfs_fh (XDR *, nfs_fh*);
+extern  bool_t xdr_nfstime (XDR *, nfstime*);
+extern  bool_t xdr_fattr (XDR *, fattr*);
+extern  bool_t xdr_sattr (XDR *, sattr*);
+extern  bool_t xdr_filename (XDR *, filename*);
+extern  bool_t xdr_nfspath (XDR *, nfspath*);
+extern  bool_t xdr_attrstat (XDR *, attrstat*);
+extern  bool_t xdr_sattrargs (XDR *, sattrargs*);
+extern  bool_t xdr_diropargs (XDR *, diropargs*);
+extern  bool_t xdr_diropokres (XDR *, diropokres*);
+extern  bool_t xdr_diropres (XDR *, diropres*);
+extern  bool_t xdr_readlinkres (XDR *, readlinkres*);
+extern  bool_t xdr_readargs (XDR *, readargs*);
+extern  bool_t xdr_readokres (XDR *, readokres*);
+extern  bool_t xdr_readres (XDR *, readres*);
+extern  bool_t xdr_writeargs (XDR *, writeargs*);
+extern  bool_t xdr_createargs (XDR *, createargs*);
+extern  bool_t xdr_renameargs (XDR *, renameargs*);
+extern  bool_t xdr_linkargs (XDR *, linkargs*);
+extern  bool_t xdr_symlinkargs (XDR *, symlinkargs*);
+extern  bool_t xdr_nfscookie (XDR *, nfscookie);
+extern  bool_t xdr_readdirargs (XDR *, readdirargs*);
+extern  bool_t xdr_entry (XDR *, entry*);
+extern  bool_t xdr_dirlist (XDR *, dirlist*);
+extern  bool_t xdr_readdirres (XDR *, readdirres*);
+extern  bool_t xdr_statfsokres (XDR *, statfsokres*);
+extern  bool_t xdr_statfsres (XDR *, statfsres*);
+
+#else /* K&R C */
+extern bool_t xdr_nfsstat ();
+extern bool_t xdr_ftype ();
+extern bool_t xdr_nfs_fh ();
+extern bool_t xdr_nfstime ();
+extern bool_t xdr_fattr ();
+extern bool_t xdr_sattr ();
+extern bool_t xdr_filename ();
+extern bool_t xdr_nfspath ();
+extern bool_t xdr_attrstat ();
+extern bool_t xdr_sattrargs ();
+extern bool_t xdr_diropargs ();
+extern bool_t xdr_diropokres ();
+extern bool_t xdr_diropres ();
+extern bool_t xdr_readlinkres ();
+extern bool_t xdr_readargs ();
+extern bool_t xdr_readokres ();
+extern bool_t xdr_readres ();
+extern bool_t xdr_writeargs ();
+extern bool_t xdr_createargs ();
+extern bool_t xdr_renameargs ();
+extern bool_t xdr_linkargs ();
+extern bool_t xdr_symlinkargs ();
+extern bool_t xdr_nfscookie ();
+extern bool_t xdr_readdirargs ();
+extern bool_t xdr_entry ();
+extern bool_t xdr_dirlist ();
+extern bool_t xdr_readdirres ();
+extern bool_t xdr_statfsokres ();
+extern bool_t xdr_statfsres ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_NFS_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/nfs_prot.x b/lib/libdss-include/rpcsvc/nfs_prot.x
new file mode 100644 (file)
index 0000000..ad992e2
--- /dev/null
@@ -0,0 +1,352 @@
+/* @(#)nfs_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * nfs_prot.x 1.2 87/10/12
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+const NFS_PORT          = 2049;
+const NFS_MAXDATA       = 8192;
+const NFS_MAXPATHLEN    = 1024;
+const NFS_MAXNAMLEN    = 255;
+const NFS_FHSIZE       = 32;
+const NFS_COOKIESIZE   = 4;
+const NFS_FIFO_DEV     = -1;   /* size kludge for named pipes */
+
+/*
+ * File types
+ */
+const NFSMODE_FMT  = 0170000;  /* type of file */
+const NFSMODE_DIR  = 0040000;  /* directory */
+const NFSMODE_CHR  = 0020000;  /* character special */
+const NFSMODE_BLK  = 0060000;  /* block special */
+const NFSMODE_REG  = 0100000;  /* regular */
+const NFSMODE_LNK  = 0120000;  /* symbolic link */
+const NFSMODE_SOCK = 0140000;  /* socket */
+const NFSMODE_FIFO = 0010000;  /* fifo */
+
+/*
+ * Error status
+ */
+enum nfsstat {
+       NFS_OK= 0,              /* no error */
+       NFSERR_PERM=1,          /* Not owner */
+       NFSERR_NOENT=2,         /* No such file or directory */
+       NFSERR_IO=5,            /* I/O error */
+       NFSERR_NXIO=6,          /* No such device or address */
+       NFSERR_ACCES=13,        /* Permission denied */
+       NFSERR_EXIST=17,        /* File exists */
+       NFSERR_NODEV=19,        /* No such device */
+       NFSERR_NOTDIR=20,       /* Not a directory*/
+       NFSERR_ISDIR=21,        /* Is a directory */
+       NFSERR_FBIG=27,         /* File too large */
+       NFSERR_NOSPC=28,        /* No space left on device */
+       NFSERR_ROFS=30,         /* Read-only file system */
+       NFSERR_NAMETOOLONG=63,  /* File name too long */
+       NFSERR_NOTEMPTY=66,     /* Directory not empty */
+       NFSERR_DQUOT=69,        /* Disc quota exceeded */
+       NFSERR_STALE=70,        /* Stale NFS file handle */
+       NFSERR_WFLUSH=99        /* write cache flushed */
+};
+
+/*
+ * File types
+ */
+enum ftype {
+       NFNON = 0,      /* non-file */
+       NFREG = 1,      /* regular file */
+       NFDIR = 2,      /* directory */
+       NFBLK = 3,      /* block special */
+       NFCHR = 4,      /* character special */
+       NFLNK = 5,      /* symbolic link */
+       NFSOCK = 6,     /* unix domain sockets */
+       NFBAD = 7,      /* unused */
+       NFFIFO = 8      /* named pipe */
+};
+
+/*
+ * File access handle
+ */
+struct nfs_fh {
+       opaque data[NFS_FHSIZE];
+};
+
+/*
+ * Timeval
+ */
+struct nfstime {
+       unsigned seconds;
+       unsigned useconds;
+};
+
+
+/*
+ * File attributes
+ */
+struct fattr {
+       ftype type;             /* file type */
+       unsigned mode;          /* protection mode bits */
+       unsigned nlink;         /* # hard links */
+       unsigned uid;           /* owner user id */
+       unsigned gid;           /* owner group id */
+       unsigned size;          /* file size in bytes */
+       unsigned blocksize;     /* preferred block size */
+       unsigned rdev;          /* special device # */
+       unsigned blocks;        /* Kb of disk used by file */
+       unsigned fsid;          /* device # */
+       unsigned fileid;        /* inode # */
+       nfstime atime;          /* time of last access */
+       nfstime mtime;          /* time of last modification */
+       nfstime ctime;          /* time of last change */
+};
+
+/*
+ * File attributes which can be set
+ */
+struct sattr {
+       unsigned mode;  /* protection mode bits */
+       unsigned uid;   /* owner user id */
+       unsigned gid;   /* owner group id */
+       unsigned size;  /* file size in bytes */
+       nfstime atime;  /* time of last access */
+       nfstime mtime;  /* time of last modification */
+};
+
+
+typedef string filename<NFS_MAXNAMLEN>;
+typedef string nfspath<NFS_MAXPATHLEN>;
+
+/*
+ * Reply status with file attributes
+ */
+union attrstat switch (nfsstat status) {
+case NFS_OK:
+       fattr attributes;
+default:
+       void;
+};
+
+struct sattrargs {
+       nfs_fh file;
+       sattr attributes;
+};
+
+/*
+ * Arguments for directory operations
+ */
+struct diropargs {
+       nfs_fh  dir;    /* directory file handle */
+       filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
+};
+
+struct diropokres {
+       nfs_fh file;
+       fattr attributes;
+};
+
+/*
+ * Results from directory operation
+ */
+union diropres switch (nfsstat status) {
+case NFS_OK:
+       diropokres diropres;
+default:
+       void;
+};
+
+union readlinkres switch (nfsstat status) {
+case NFS_OK:
+       nfspath data;
+default:
+       void;
+};
+
+/*
+ * Arguments to remote read
+ */
+struct readargs {
+       nfs_fh file;            /* handle for file */
+       unsigned offset;        /* byte offset in file */
+       unsigned count;         /* immediate read count */
+       unsigned totalcount;    /* total read count (from this offset)*/
+};
+
+/*
+ * Status OK portion of remote read reply
+ */
+struct readokres {
+       fattr   attributes;     /* attributes, need for pagin*/
+       opaque data<NFS_MAXDATA>;
+};
+
+union readres switch (nfsstat status) {
+case NFS_OK:
+       readokres reply;
+default:
+       void;
+};
+
+/*
+ * Arguments to remote write
+ */
+struct writeargs {
+       nfs_fh  file;           /* handle for file */
+       unsigned beginoffset;   /* beginning byte offset in file */
+       unsigned offset;        /* current byte offset in file */
+       unsigned totalcount;    /* total write count (to this offset)*/
+       opaque data<NFS_MAXDATA>;
+};
+
+struct createargs {
+       diropargs where;
+       sattr attributes;
+};
+
+struct renameargs {
+       diropargs from;
+       diropargs to;
+};
+
+struct linkargs {
+       nfs_fh from;
+       diropargs to;
+};
+
+struct symlinkargs {
+       diropargs from;
+       nfspath to;
+       sattr attributes;
+};
+
+
+typedef opaque nfscookie[NFS_COOKIESIZE];
+
+/*
+ * Arguments to readdir
+ */
+struct readdirargs {
+       nfs_fh dir;             /* directory handle */
+       nfscookie cookie;
+       unsigned count;         /* number of directory bytes to read */
+};
+
+struct entry {
+       unsigned fileid;
+       filename name;
+       nfscookie cookie;
+       entry *nextentry;
+};
+
+struct dirlist {
+       entry *entries;
+       bool eof;
+};
+
+union readdirres switch (nfsstat status) {
+case NFS_OK:
+       dirlist reply;
+default:
+       void;
+};
+
+struct statfsokres {
+       unsigned tsize; /* preferred transfer size in bytes */
+       unsigned bsize; /* fundamental file system block size */
+       unsigned blocks;        /* total blocks in file system */
+       unsigned bfree; /* free blocks in fs */
+       unsigned bavail;        /* free blocks avail to non-superuser */
+};
+
+union statfsres switch (nfsstat status) {
+case NFS_OK:
+       statfsokres reply;
+default:
+       void;
+};
+
+/*
+ * Remote file service routines
+ */
+program NFS_PROGRAM {
+       version NFS_VERSION {
+               void
+               NFSPROC_NULL(void) = 0;
+
+               attrstat
+               NFSPROC_GETATTR(nfs_fh) =       1;
+
+               attrstat
+               NFSPROC_SETATTR(sattrargs) = 2;
+
+               void
+               NFSPROC_ROOT(void) = 3;
+
+               diropres
+               NFSPROC_LOOKUP(diropargs) = 4;
+
+               readlinkres
+               NFSPROC_READLINK(nfs_fh) = 5;
+
+               readres
+               NFSPROC_READ(readargs) = 6;
+
+               void
+               NFSPROC_WRITECACHE(void) = 7;
+
+               attrstat
+               NFSPROC_WRITE(writeargs) = 8;
+
+               diropres
+               NFSPROC_CREATE(createargs) = 9;
+
+               nfsstat
+               NFSPROC_REMOVE(diropargs) = 10;
+
+               nfsstat
+               NFSPROC_RENAME(renameargs) = 11;
+
+               nfsstat
+               NFSPROC_LINK(linkargs) = 12;
+
+               nfsstat
+               NFSPROC_SYMLINK(symlinkargs) = 13;
+
+               diropres
+               NFSPROC_MKDIR(createargs) = 14;
+
+               nfsstat
+               NFSPROC_RMDIR(diropargs) = 15;
+
+               readdirres
+               NFSPROC_READDIR(readdirargs) = 16;
+
+               statfsres
+               NFSPROC_STATFS(nfs_fh) = 17;
+       } = 2;
+} = 100003;
diff --git a/lib/libdss-include/rpcsvc/nis.h b/lib/libdss-include/rpcsvc/nis.h
new file mode 100644 (file)
index 0000000..933c4d9
--- /dev/null
@@ -0,0 +1,616 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RPCSVC_NIS_H
+#define _RPCSVC_NIS_H 1
+
+#include <features.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis_tags.h>
+
+__BEGIN_DECLS
+
+/*
+ *     nis.h
+ *
+ *     This file is the main include file for NIS clients. It contains
+ *     both the client library function defines and the various data
+ *     structures used by the NIS service. It includes the file nis_tags.h
+ *     which defines the tag values. This allows the tags to change without
+ *     having to change the nis.x file.
+ *
+ *     NOTE : THIS FILE IS NOT GENERATED WITH RPCGEN ! SO YOU HAVE TO
+ *             ADD ALL THE CHANGES ON nis_*.x FILES HERE AGAIN !
+ *
+ *      I have removed all the Solaris internal structs and variables,
+ *      because they are not supported, Sun changed them between various
+ *      releases and they shouldn't be used in user programs.
+ *                                              <kukuk@suse.de>
+ */
+
+
+#ifndef __nis_object_h
+#define __nis_object_h
+
+#define NIS_MAXSTRINGLEN 255
+#define NIS_MAXNAMELEN 1024
+#define NIS_MAXATTRNAME 32
+#define NIS_MAXATTRVAL 2048
+#define NIS_MAXCOLUMNS 64
+#define NIS_MAXATTR 16
+#define NIS_MAXPATH 1024
+#define NIS_MAXREPLICAS 128
+#define NIS_MAXLINKS 16
+#define NIS_PK_NONE 0
+#define NIS_PK_DH 1
+#define NIS_PK_RSA 2
+#define NIS_PK_KERB 3
+#define NIS_PK_DHEXT 4
+
+struct nis_attr {
+       char *zattr_ndx;
+       struct {
+               u_int zattr_val_len;
+               char *zattr_val_val;
+       } zattr_val;
+};
+typedef struct nis_attr nis_attr;
+
+typedef char *nis_name;
+
+enum zotypes {
+       BOGUS_OBJ = 0,
+       NO_OBJ = 1,
+       DIRECTORY_OBJ = 2,
+       GROUP_OBJ = 3,
+       TABLE_OBJ = 4,
+       ENTRY_OBJ = 5,
+       LINK_OBJ = 6,
+       PRIVATE_OBJ = 7,
+       NIS_BOGUS_OBJ = 0,
+       NIS_NO_OBJ = 1,
+       NIS_DIRECTORY_OBJ = 2,
+       NIS_GROUP_OBJ = 3,
+       NIS_TABLE_OBJ = 4,
+       NIS_ENTRY_OBJ = 5,
+       NIS_LINK_OBJ = 6,
+       NIS_PRIVATE_OBJ = 7
+};
+typedef enum zotypes zotypes;
+
+enum nstype {
+       UNKNOWN = 0,
+       NIS = 1,
+       SUNYP = 2,
+       IVY = 3,
+       DNS = 4,
+       X500 = 5,
+       DNANS = 6,
+       XCHS = 7,
+       CDS = 8,
+};
+typedef enum nstype nstype;
+
+struct oar_mask {
+       uint32_t oa_rights;
+       zotypes oa_otype;
+};
+typedef struct oar_mask oar_mask;
+
+struct endpoint {
+       char *uaddr;
+       char *family;
+       char *proto;
+};
+typedef struct endpoint endpoint;
+
+struct nis_server {
+       nis_name name;
+       struct {
+               u_int ep_len;
+               endpoint *ep_val;
+       } ep;
+       uint32_t key_type;
+       netobj pkey;
+};
+typedef struct nis_server nis_server;
+
+struct directory_obj {
+       nis_name do_name;
+       nstype do_type;
+       struct {
+               u_int do_servers_len;
+               nis_server *do_servers_val;
+       } do_servers;
+       uint32_t do_ttl;
+       struct {
+               u_int do_armask_len;
+               oar_mask *do_armask_val;
+       } do_armask;
+};
+typedef struct directory_obj directory_obj;
+
+#define EN_BINARY 1
+#define EN_CRYPT 2
+#define EN_XDR 4
+#define EN_MODIFIED 8
+#define EN_ASN1 64
+
+struct entry_col {
+       uint32_t ec_flags;
+       struct {
+               u_int ec_value_len;
+               char *ec_value_val;
+       } ec_value;
+};
+typedef struct entry_col entry_col;
+
+struct entry_obj {
+       char *en_type;
+       struct {
+               u_int en_cols_len;
+               entry_col *en_cols_val;
+       } en_cols;
+};
+typedef struct entry_obj entry_obj;
+
+struct group_obj {
+       uint32_t gr_flags;
+       struct {
+               u_int gr_members_len;
+               nis_name *gr_members_val;
+       } gr_members;
+};
+typedef struct group_obj group_obj;
+
+struct link_obj {
+       zotypes li_rtype;
+       struct {
+               u_int li_attrs_len;
+               nis_attr *li_attrs_val;
+       } li_attrs;
+       nis_name li_name;
+};
+typedef struct link_obj link_obj;
+
+#define TA_BINARY 1
+#define TA_CRYPT 2
+#define TA_XDR 4
+#define TA_SEARCHABLE 8
+#define TA_CASE 16
+#define TA_MODIFIED 32
+#define TA_ASN1 64
+
+struct table_col {
+       char *tc_name;
+       uint32_t tc_flags;
+       uint32_t tc_rights;
+};
+typedef struct table_col table_col;
+
+struct table_obj {
+       char *ta_type;
+       int ta_maxcol;
+       u_char ta_sep;
+       struct {
+               u_int ta_cols_len;
+               table_col *ta_cols_val;
+       } ta_cols;
+       char *ta_path;
+};
+typedef struct table_obj table_obj;
+
+struct objdata {
+       zotypes zo_type;
+       union {
+               struct directory_obj di_data;
+               struct group_obj gr_data;
+               struct table_obj ta_data;
+               struct entry_obj en_data;
+               struct link_obj li_data;
+               struct {
+                       u_int po_data_len;
+                       char *po_data_val;
+               } po_data;
+       } objdata_u;
+};
+typedef struct objdata objdata;
+
+struct nis_oid {
+       uint32_t ctime;
+       uint32_t mtime;
+};
+typedef struct nis_oid nis_oid;
+
+struct nis_object {
+       nis_oid zo_oid;
+       nis_name zo_name;
+       nis_name zo_owner;
+       nis_name zo_group;
+       nis_name zo_domain;
+       uint32_t zo_access;
+       uint32_t zo_ttl;
+       objdata zo_data;
+};
+typedef struct nis_object nis_object;
+
+#endif /* if __nis_object_h */
+
+enum nis_error {
+       NIS_SUCCESS = 0,
+       NIS_S_SUCCESS = 1,
+       NIS_NOTFOUND = 2,
+       NIS_S_NOTFOUND = 3,
+       NIS_CACHEEXPIRED = 4,
+       NIS_NAMEUNREACHABLE = 5,
+       NIS_UNKNOWNOBJ = 6,
+       NIS_TRYAGAIN = 7,
+       NIS_SYSTEMERROR = 8,
+       NIS_CHAINBROKEN = 9,
+       NIS_PERMISSION = 10,
+       NIS_NOTOWNER = 11,
+       NIS_NOT_ME = 12,
+       NIS_NOMEMORY = 13,
+       NIS_NAMEEXISTS = 14,
+       NIS_NOTMASTER = 15,
+       NIS_INVALIDOBJ = 16,
+       NIS_BADNAME = 17,
+       NIS_NOCALLBACK = 18,
+       NIS_CBRESULTS = 19,
+       NIS_NOSUCHNAME = 20,
+       NIS_NOTUNIQUE = 21,
+       NIS_IBMODERROR = 22,
+       NIS_NOSUCHTABLE = 23,
+       NIS_TYPEMISMATCH = 24,
+       NIS_LINKNAMEERROR = 25,
+       NIS_PARTIAL = 26,
+       NIS_TOOMANYATTRS = 27,
+       NIS_RPCERROR = 28,
+       NIS_BADATTRIBUTE = 29,
+       NIS_NOTSEARCHABLE = 30,
+       NIS_CBERROR = 31,
+       NIS_FOREIGNNS = 32,
+       NIS_BADOBJECT = 33,
+       NIS_NOTSAMEOBJ = 34,
+       NIS_MODFAIL = 35,
+       NIS_BADREQUEST = 36,
+       NIS_NOTEMPTY = 37,
+       NIS_COLDSTART_ERR = 38,
+       NIS_RESYNC = 39,
+       NIS_FAIL = 40,
+       NIS_UNAVAIL = 41,
+       NIS_RES2BIG = 42,
+       NIS_SRVAUTH = 43,
+       NIS_CLNTAUTH = 44,
+       NIS_NOFILESPACE = 45,
+       NIS_NOPROC = 46,
+       NIS_DUMPLATER = 47,
+};
+typedef enum nis_error nis_error;
+
+struct nis_result {
+       nis_error status;
+       struct {
+               u_int objects_len;
+               nis_object *objects_val;
+       } objects;
+       netobj cookie;
+       uint32_t zticks;
+       uint32_t dticks;
+       uint32_t aticks;
+       uint32_t cticks;
+};
+typedef struct nis_result nis_result;
+
+struct ns_request {
+       nis_name ns_name;
+       struct {
+               u_int ns_object_len;
+               nis_object *ns_object_val;
+       } ns_object;
+};
+typedef struct ns_request ns_request;
+
+struct ib_request {
+       nis_name ibr_name;
+       struct {
+               u_int ibr_srch_len;
+               nis_attr *ibr_srch_val;
+       } ibr_srch;
+       uint32_t ibr_flags;
+       struct {
+               u_int ibr_obj_len;
+               nis_object *ibr_obj_val;
+       } ibr_obj;
+       struct {
+               u_int ibr_cbhost_len;
+               nis_server *ibr_cbhost_val;
+       } ibr_cbhost;
+       u_int ibr_bufsize;
+       netobj ibr_cookie;
+};
+typedef struct ib_request ib_request;
+
+struct ping_args {
+       nis_name dir;
+       uint32_t stamp;
+};
+typedef struct ping_args ping_args;
+
+enum log_entry_t {
+       LOG_NOP = 0,
+       ADD_NAME = 1,
+       REM_NAME = 2,
+       MOD_NAME_OLD = 3,
+       MOD_NAME_NEW = 4,
+       ADD_IBASE = 5,
+       REM_IBASE = 6,
+       MOD_IBASE = 7,
+       UPD_STAMP = 8,
+};
+typedef enum log_entry_t log_entry_t;
+
+struct log_entry {
+       uint32_t le_time;
+       log_entry_t le_type;
+       nis_name le_princp;
+       nis_name le_name;
+       struct {
+               u_int le_attrs_len;
+               nis_attr *le_attrs_val;
+       } le_attrs;
+       nis_object le_object;
+};
+typedef struct log_entry log_entry;
+
+struct log_result {
+       nis_error lr_status;
+       netobj lr_cookie;
+       struct {
+               u_int lr_entries_len;
+               log_entry *lr_entries_val;
+       } lr_entries;
+};
+typedef struct log_result log_result;
+
+struct cp_result {
+       nis_error cp_status;
+       uint32_t cp_zticks;
+       uint32_t cp_dticks;
+};
+typedef struct cp_result cp_result;
+
+struct nis_tag {
+       uint32_t tag_type;
+       char *tag_val;
+};
+typedef struct nis_tag nis_tag;
+
+struct nis_taglist {
+       struct {
+               u_int tags_len;
+               nis_tag *tags_val;
+       } tags;
+};
+typedef struct nis_taglist nis_taglist;
+
+struct dump_args {
+       nis_name da_dir;
+       uint32_t da_time;
+       struct {
+               u_int da_cbhost_len;
+               nis_server *da_cbhost_val;
+       } da_cbhost;
+};
+typedef struct dump_args dump_args;
+
+struct fd_args {
+       nis_name dir_name;
+       nis_name requester;
+};
+typedef struct fd_args fd_args;
+
+struct fd_result {
+       nis_error status;
+       nis_name source;
+       struct {
+               u_int dir_data_len;
+               char *dir_data_val;
+       } dir_data;
+       struct {
+               u_int signature_len;
+               char *signature_val;
+       } signature;
+};
+typedef struct fd_result fd_result;
+
+/* Generic client creating flags */
+#define ZMH_VC         1
+#define ZMH_DG         2
+#define ZMH_AUTH       4
+
+/* Testing Access rights for objects */
+
+#define NIS_READ_ACC           1
+#define NIS_MODIFY_ACC         2
+#define NIS_CREATE_ACC         4
+#define NIS_DESTROY_ACC        8
+/* Test macros. a == access rights, m == desired rights. */
+#define NIS_WORLD(a, m)        (((a) & (m)) != 0)
+#define NIS_GROUP(a, m)        (((a) & ((m) << 8)) != 0)
+#define NIS_OWNER(a, m)        (((a) & ((m) << 16)) != 0)
+#define NIS_NOBODY(a, m)       (((a) & ((m) << 24)) != 0)
+/*
+ * EOL Alert - The following non-prefixed test macros are
+ * here for backward compatibility, and will be not be present
+ * in future releases - use the NIS_*() macros above.
+ */
+#define WORLD(a, m)    (((a) & (m)) != 0)
+#define GROUP(a, m)    (((a) & ((m) << 8)) != 0)
+#define OWNER(a, m)    (((a) & ((m) << 16)) != 0)
+#define NOBODY(a, m)   (((a) & ((m) << 24)) != 0)
+
+#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
+#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
+#define WORLD_DEFAULT (NIS_READ_ACC)
+#define GROUP_DEFAULT (NIS_READ_ACC << 8)
+#define OWNER_DEFAULT ((NIS_READ_ACC + NIS_MODIFY_ACC + NIS_CREATE_ACC +\
+                       NIS_DESTROY_ACC) << 16)
+#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
+
+/* Result manipulation defines ... */
+#define NIS_RES_NUMOBJ(x)      ((x)->objects.objects_len)
+#define NIS_RES_OBJECT(x)      ((x)->objects.objects_val)
+#define NIS_RES_COOKIE(x)      ((x)->cookie)
+#define NIS_RES_STATUS(x)      ((x)->status)
+
+/* These defines make getting at the variant part of the object easier. */
+#define TA_data zo_data.objdata_u.ta_data
+#define EN_data zo_data.objdata_u.en_data
+#define DI_data zo_data.objdata_u.di_data
+#define LI_data zo_data.objdata_u.li_data
+#define GR_data zo_data.objdata_u.gr_data
+
+#define __type_of(o) ((o)->zo_data.zo_type)
+
+/* Declarations for the internal subroutines in nislib.c */
+enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
+typedef enum name_pos name_pos;
+
+/*
+ * Defines for getting at column data in entry objects. Because RPCGEN
+ * generates some rather wordy structures, we create some defines that
+ * collapse the needed keystrokes to access a particular value using
+ * these definitions they take an nis_object *, and an int and return
+ * a u_char * for Value, and an int for length.
+ */
+#define ENTRY_VAL(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
+#define ENTRY_LEN(obj, col) (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
+
+
+/* Prototypes, and extern declarations for the NIS library functions. */
+#include <rpcsvc/nislib.h>
+#endif
+
+/*
+ * nis_3.h
+ *
+ * This file contains definitions that are only of interest to the actual
+ * service daemon and client stubs. Normal users of NIS will not include
+ * this file.
+ *
+ * NOTE : This include file is automatically created by a combination
+ * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
+ * and then remake this file.
+ */
+#ifndef __nis_3_h
+#define __nis_3_h
+
+#define NIS_PROG 100300
+#define NIS_VERSION 3
+
+#define NIS_LOOKUP 1
+extern  nis_result * nis_lookup_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_lookup_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_ADD 2
+extern  nis_result * nis_add_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_add_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_MODIFY 3
+extern  nis_result * nis_modify_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_modify_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_REMOVE 4
+extern  nis_result * nis_remove_3 (ns_request *, CLIENT *) __THROW;
+extern  nis_result * nis_remove_3_svc (ns_request *, struct svc_req *) __THROW;
+#define NIS_IBLIST 5
+extern  nis_result * nis_iblist_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_iblist_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_IBADD 6
+extern  nis_result * nis_ibadd_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibadd_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_IBMODIFY 7
+extern  nis_result * nis_ibmodify_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibmodify_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBREMOVE 8
+extern  nis_result * nis_ibremove_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibremove_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBFIRST 9
+extern  nis_result * nis_ibfirst_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibfirst_3_svc (ib_request *, struct svc_req *)
+     __THROW;
+#define NIS_IBNEXT 10
+extern  nis_result * nis_ibnext_3 (ib_request *, CLIENT *) __THROW;
+extern  nis_result * nis_ibnext_3_svc (ib_request *, struct svc_req *) __THROW;
+#define NIS_FINDDIRECTORY 12
+extern  fd_result * nis_finddirectory_3 (fd_args *, CLIENT *) __THROW;
+extern  fd_result * nis_finddirectory_3_svc (fd_args *,
+                                            struct svc_req *) __THROW;
+#define NIS_STATUS 14
+extern  nis_taglist * nis_status_3 (nis_taglist *, CLIENT *) __THROW;
+extern  nis_taglist * nis_status_3_svc (nis_taglist *, struct svc_req *)
+     __THROW;
+#define NIS_DUMPLOG 15
+extern  log_result * nis_dumplog_3 (dump_args *, CLIENT *) __THROW;
+extern  log_result * nis_dumplog_3_svc (dump_args *, struct svc_req *) __THROW;
+#define NIS_DUMP 16
+extern  log_result * nis_dump_3 (dump_args *, CLIENT *) __THROW;
+extern  log_result * nis_dump_3_svc (dump_args *, struct svc_req *) __THROW;
+#define NIS_CALLBACK 17
+extern  bool_t * nis_callback_3 (netobj *, CLIENT *) __THROW;
+extern  bool_t * nis_callback_3_svc (netobj *, struct svc_req *) __THROW;
+#define NIS_CPTIME 18
+extern  uint32_t * nis_cptime_3 (nis_name *, CLIENT *) __THROW;
+extern  uint32_t * nis_cptime_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_CHECKPOINT 19
+extern  cp_result * nis_checkpoint_3 (nis_name *, CLIENT *) __THROW;
+extern  cp_result * nis_checkpoint_3_svc (nis_name *, struct svc_req *)
+     __THROW;
+#define NIS_PING 20
+extern  void * nis_ping_3 (ping_args *, CLIENT *) __THROW;
+extern  void * nis_ping_3_svc (ping_args *, struct svc_req *) __THROW;
+#define NIS_SERVSTATE 21
+extern  nis_taglist * nis_servstate_3 (nis_taglist *, CLIENT *) __THROW;
+extern  nis_taglist * nis_servstate_3_svc (nis_taglist *,
+                                          struct svc_req *) __THROW;
+#define NIS_MKDIR 22
+extern  nis_error * nis_mkdir_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_mkdir_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_RMDIR 23
+extern  nis_error * nis_rmdir_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_rmdir_3_svc (nis_name *, struct svc_req *) __THROW;
+#define NIS_UPDKEYS 24
+extern  nis_error * nis_updkeys_3 (nis_name *, CLIENT *) __THROW;
+extern  nis_error * nis_updkeys_3_svc (nis_name *, struct svc_req *) __THROW;
+
+__END_DECLS
+
+#endif /* ! _RPCSVC_NIS_H */
diff --git a/lib/libdss-include/rpcsvc/nis.x b/lib/libdss-include/rpcsvc/nis.x
new file mode 100644 (file)
index 0000000..e318af2
--- /dev/null
@@ -0,0 +1,474 @@
+%/*
+% * Copyright (c) 2010, Oracle America, Inc.
+% *
+% * Redistribution and use in source and binary forms, with or without
+% * modification, are permitted provided that the following conditions are
+% * met:
+% *
+% *     * Redistributions of source code must retain the above copyright
+% *       notice, this list of conditions and the following disclaimer.
+% *     * Redistributions in binary form must reproduce the above
+% *       copyright notice, this list of conditions and the following
+% *       disclaimer in the documentation and/or other materials
+% *       provided with the distribution.
+% *     * Neither the name of the "Oracle America, Inc." nor the names of its
+% *       contributors may be used to endorse or promote products derived
+% *       from this software without specific prior written permission.
+% *
+% *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+% *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+% *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+% *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+% *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+% *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+% *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+% *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+% *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+% *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+% *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+% */
+
+#ifdef RPC_HDR
+%/*
+% *    nis.h
+% *
+% *    This file is the main include file for NIS clients. It contains
+% *    both the client library function defines and the various data
+% *    structures used by the NIS service. It includes the file nis_tags.h
+% *    which defines the tag values. This allows the tags to change without
+% *    having to change the nis.x file.
+% *
+% *    NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
+% *           rpcgen is run on the nis.x file. Note that there is a
+% *           simple sed script to remove some unneeded lines. (See the
+% *           Makefile target nis.h)
+% *
+% */
+%#include <rpcsvc/nis_tags.h>
+#endif
+
+/* This gets stuffed into the source files. */
+#if RPC_HDR
+%#include <rpc/xdr.h>
+#endif
+
+/* Include the RPC Language description of NIS objects */
+#include "nis_object.x"
+
+/* Errors  that can be returned by the service */
+enum nis_error {
+       NIS_SUCCESS = 0,        /* A-ok, let's rock n roll      */
+       NIS_S_SUCCESS = 1,      /* Name found (maybe)           */
+       NIS_NOTFOUND = 2,       /* Name definitely not found    */
+       NIS_S_NOTFOUND = 3,     /* Name maybe not found         */
+       NIS_CACHEEXPIRED = 4,   /* Name exists but cache out of date */
+       NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */
+       NIS_UNKNOWNOBJ = 6,     /* Object type is bogus */
+       NIS_TRYAGAIN = 7,       /* I'm busy, call back */
+       NIS_SYSTEMERROR = 8,    /* Generic system error */
+       NIS_CHAINBROKEN = 9,    /* First/Next warning */
+       NIS_PERMISSION = 10,    /* Not enough permission to access */
+       NIS_NOTOWNER = 11,      /* You don't own it, sorry */
+       NIS_NOT_ME = 12,        /* I don't serve this name */
+       NIS_NOMEMORY = 13,      /* Outta VM! Help! */
+       NIS_NAMEEXISTS = 14,    /* Can't create over another name */
+       NIS_NOTMASTER = 15,     /* I'm justa secondaray, don't ask me */
+       NIS_INVALIDOBJ = 16,    /* Object is broken somehow */
+       NIS_BADNAME = 17,       /* Unparsable name */
+       NIS_NOCALLBACK = 18,    /* Couldn't talk to call back proc */
+       NIS_CBRESULTS = 19,     /* Results being called back to you */
+       NIS_NOSUCHNAME = 20,    /* Name unknown */
+       NIS_NOTUNIQUE = 21,     /* Value is not uniques (entry) */
+       NIS_IBMODERROR = 22,    /* Inf. Base. Modify error. */
+       NIS_NOSUCHTABLE = 23,   /* Name for table was wrong */
+       NIS_TYPEMISMATCH = 24,  /* Entry and table type mismatch */
+       NIS_LINKNAMEERROR = 25, /* Link points to bogus name */
+       NIS_PARTIAL = 26,       /* Partial success, found table */
+       NIS_TOOMANYATTRS = 27,  /* Too many attributes */
+       NIS_RPCERROR = 28,      /* RPC error encountered */
+       NIS_BADATTRIBUTE = 29,  /* Bad or invalid attribute */
+       NIS_NOTSEARCHABLE = 30, /* Non-searchable object searched */
+       NIS_CBERROR = 31,       /* Error during callback (svc crash) */
+       NIS_FOREIGNNS = 32,     /* Foreign Namespace */
+       NIS_BADOBJECT = 33,     /* Malformed object structure */
+       NIS_NOTSAMEOBJ = 34,    /* Object swapped during deletion */
+       NIS_MODFAIL = 35,       /* Failure during a Modify. */
+       NIS_BADREQUEST = 36,    /* Illegal query for table */
+       NIS_NOTEMPTY = 37,      /* Attempt to remove a non-empty tbl */
+       NIS_COLDSTART_ERR = 38, /* Error accesing the cold start file */
+       NIS_RESYNC = 39,        /* Transaction log too far out of date */
+       NIS_FAIL = 40,          /* NIS operation failed. */
+       NIS_UNAVAIL = 41,       /* NIS+ service is unavailable (client) */
+       NIS_RES2BIG = 42,       /* NIS+ result too big for datagram */
+       NIS_SRVAUTH = 43,       /* NIS+ server wasn't authenticated. */
+       NIS_CLNTAUTH = 44,      /* NIS+ Client wasn't authenticated. */
+       NIS_NOFILESPACE = 45,   /* NIS+ server ran out of disk space */
+       NIS_NOPROC = 46,        /* NIS+ server couldn't create new proc */
+       NIS_DUMPLATER = 47      /* NIS+ server already has dump child */
+};
+
+
+/*
+ * Structure definitions for the parameters and results of the actual
+ * NIS RPC calls.
+ *
+ * This is the standard result (in the protocol) of most of the nis
+ * requests.
+ */
+
+struct nis_result {
+       nis_error       status;         /* Status of the response */
+       nis_object      objects<>;      /* objects found          */
+       netobj          cookie;         /* Cookie Data            */
+       uint32_t        zticks;         /* server ticks           */
+       uint32_t        dticks;         /* DBM ticks.             */
+       uint32_t        aticks;         /* Cache (accel) ticks    */
+       uint32_t        cticks;         /* Client ticks           */
+};
+
+/*
+ * A Name Service request
+ * This request is used to access the name space, ns_name is the name
+ * of the object within the namespace and the object is it's value, for
+ * add/modify, a copy of the original for remove.
+ */
+
+struct ns_request {
+       nis_name        ns_name;        /* Name in the NIS name space   */
+       nis_object      ns_object<1>;   /* Optional Object (add/remove) */
+};
+
+/*
+ * An information base request
+ * This request includes the NIS name of the table we wish to search, the
+ * search criteria in the form of attribute/value pairs and an optional
+ * callback program number. If the callback program number is provided
+ * the server will send back objects one at a time, otherwise it will
+ * return them all in the response.
+ */
+
+struct ib_request {
+       nis_name        ibr_name;       /* The name of the Table        */
+       nis_attr        ibr_srch<>;     /* The search critereia         */
+       uint32_t        ibr_flags;      /* Optional flags               */
+       nis_object      ibr_obj<1>;     /* optional object (add/modify) */
+       nis_server      ibr_cbhost<1>;  /* Optional callback info       */
+       u_int           ibr_bufsize;    /* Optional first/next bufsize  */
+       netobj          ibr_cookie;     /* The first/next cookie        */
+};
+
+/*
+ * This argument to the PING call notifies the replicas that something in
+ * a directory has changed and this is it's timestamp. The replica will use
+ * the timestamp to determine if its resync operation was successful.
+ */
+struct ping_args {
+       nis_name        dir;    /* Directory that had the change */
+       uint32_t        stamp;  /* timestamp of the transaction  */
+};
+
+/*
+ * These are the type of entries that are stored in the transaction log,
+ * note that modifications will appear as two entries, for names, they have
+ * a "OLD" entry followed by a "NEW" entry. For entries in tables, there
+ * is a remove followed by an add. It is done this way so that we can read
+ * the log backwards to back out transactions and forwards to propogate
+ * updated.
+ */
+enum log_entry_t {
+       LOG_NOP = 0,
+       ADD_NAME = 1,           /* Name Added to name space               */
+       REM_NAME = 2,           /* Name removed from name space           */
+       MOD_NAME_OLD = 3,       /* Name was modified in the name space    */
+       MOD_NAME_NEW = 4,       /* Name was modified in the name space    */
+       ADD_IBASE = 5,          /* Entry added to information base        */
+       REM_IBASE = 6,          /* Entry removed from information base    */
+       MOD_IBASE = 7,          /* Entry was modified in information base */
+       UPD_STAMP = 8           /* Update timestamp (used as fenceposts)  */
+};
+
+/*
+ * This result is returned from the name service when it is requested to
+ * dump logged entries from its transaction log. Information base updates
+ * will have the name of the information base in the le_name field and
+ * a canonical set of attribute/value pairs to fully specify the entry's
+ * 'name'.
+ */
+struct log_entry {
+       uint32_t        le_time;        /* Time in seconds              */
+       log_entry_t     le_type;        /* Type of log entry            */
+       nis_name        le_princp;      /* Principal making the change  */
+       nis_name        le_name;        /* Name of table/dir involved   */
+       nis_attr        le_attrs<>;     /* List of AV pairs.            */
+       nis_object      le_object;      /* Actual object value          */
+};
+
+struct log_result {
+       nis_error       lr_status;      /* The status itself            */
+       netobj          lr_cookie;      /* Used by the dump callback    */
+       log_entry       lr_entries<>;   /* zero or more entries */
+};
+
+struct cp_result {
+       nis_error       cp_status;      /* Status of the checkpoint     */
+       uint32_t        cp_zticks;      /* Service 'ticks'              */
+       uint32_t        cp_dticks;      /* Database 'ticks'             */
+};
+
+/*
+ * This structure defines a generic NIS tag list. The taglist contains
+ * zero or tags, each of which is a type and a value. (u_int).
+ * These are used to report statistics (see tag definitions below)
+ * and to set or reset state variables.
+ */
+struct nis_tag {
+       uint32_t        tag_type;       /* Statistic tag (may vary)      */
+       string          tag_val<>;      /* Statistic value may also vary */
+};
+
+struct nis_taglist {
+       nis_tag tags<>;                 /* List of tags */
+};
+
+struct dump_args {
+       nis_name        da_dir;         /* Directory to dump    */
+       uint32_t        da_time;        /* From this timestamp  */
+       nis_server      da_cbhost<1>;   /* Callback to use.     */
+};
+
+struct fd_args {
+       nis_name        dir_name;  /* The directory we're looking for */
+       nis_name        requester; /* Host principal name for signature */
+};
+
+struct fd_result {
+       nis_error       status;         /* Status returned by function  */
+       nis_name        source;         /* Source of this answer        */
+       opaque          dir_data<>;     /* Directory Data (XDR'ed)      */
+       opaque          signature<>;    /* Signature of the source      */
+};
+
+%/*
+% * Structures used for server binding.
+% */
+struct nis_bound_endpoint {
+       endpoint ep;
+       int generation;
+       int rank;
+       uint32_t flags;
+       int hostnum;
+       int epnum;
+       nis_name uaddr;
+       endpoint cbep;
+};
+typedef struct nis_bound_endpoint nis_bound_endpoint;
+
+struct nis_bound_directory {
+       int generation;
+       int min_rank;           /* minimum rank of bound endpoints */
+       int optimal_rank;       /* best possible rank of all endpoints */
+       directory_obj dobj;
+       nis_bound_endpoint BEP<>;
+};
+typedef struct nis_bound_directory nis_bound_directory;
+%#define bep_len BEP.BEP_len
+%#define bep_val BEP.BEP_val
+
+struct nis_active_endpoint {
+       endpoint ep;
+       nis_name hostname;
+       int rank;
+       int uaddr_generation;
+       nis_name uaddr;
+       int cbep_generation;
+       endpoint cbep;
+};
+typedef struct nis_active_endpoint nis_active_endpoint;
+
+%/* defines for nis_bound_endpoint.flags */
+%#define NIS_BOUND 0x1
+%#define NIS_TRANSIENT_ERRORS 0x2
+
+program  NIS_PROG {
+
+       /* RPC Language description of the NIS+ protocol */
+       version NIS_VERSION {
+               /* The name service functions */
+               nis_result  NIS_LOOKUP(ns_request) = 1;
+               nis_result  NIS_ADD(ns_request) = 2;
+               nis_result  NIS_MODIFY(ns_request) = 3;
+               nis_result  NIS_REMOVE(ns_request) = 4;
+
+               /* The information base functions */
+               nis_result  NIS_IBLIST(ib_request) = 5;
+               nis_result  NIS_IBADD(ib_request) = 6;
+               nis_result  NIS_IBMODIFY(ib_request) = 7;
+               nis_result  NIS_IBREMOVE(ib_request) = 8;
+               nis_result  NIS_IBFIRST(ib_request) = 9;
+               nis_result  NIS_IBNEXT(ib_request) = 10;
+
+               /* NIS Administrative functions */
+               fd_result   NIS_FINDDIRECTORY(fd_args) = 12;
+
+               /* If fetch and optionally reset statistics */
+               nis_taglist  NIS_STATUS(nis_taglist) = 14;
+
+               /* Dump changes to directory since time in da_time */
+               log_result  NIS_DUMPLOG(dump_args) = 15;
+
+               /* Dump contents of directory named */
+               log_result  NIS_DUMP(dump_args) = 16;
+
+               /* Check status of callback thread */
+               bool        NIS_CALLBACK(netobj) = 17;
+
+               /* Return last update time for named dir */
+               uint32_t    NIS_CPTIME(nis_name) = 18;
+
+               /* Checkpoint directory or table named */
+               cp_result   NIS_CHECKPOINT(nis_name) = 19;
+
+               /* Send 'status changed' ping to replicates */
+               void        NIS_PING(ping_args) = 20;
+
+               /* Modify server behaviour (such as debugging) */
+               nis_taglist NIS_SERVSTATE(nis_taglist) = 21;
+
+               /* Create a Directory */
+               nis_error   NIS_MKDIR(nis_name) = 22;
+
+               /* Remove a Directory */
+               nis_error   NIS_RMDIR(nis_name) = 23;
+
+               /* Update public keys of a directory object */
+               nis_error   NIS_UPDKEYS(nis_name) = 24;
+       } = 3;
+} = 100300;
+
+/*
+ * Included below are the defines that become part of nis.h,
+ * they are technically not part of the protocol, but do define
+ * key aspects of the implementation and are therefore useful
+ * in building a conforming server or client.
+ */
+#if RPC_HDR
+%/*
+% * Generic "hash" datastructures, used by all types of hashed data.
+% */
+%struct nis_hash_data {
+%      nis_name                name;      /* NIS name of hashed item      */
+%      int                     keychain;  /* It's hash key (for pop)      */
+%      struct nis_hash_data    *next;     /* Hash collision pointer       */
+%      struct nis_hash_data    *prv_item; /* A serial, doubly linked list */
+%      struct nis_hash_data    *nxt_item; /* of items in the hash table   */
+%};
+%typedef struct nis_hash_data NIS_HASH_ITEM;
+%
+%struct nis_hash_table {
+%      NIS_HASH_ITEM   *keys[64];      /* A hash table of items           */
+%      NIS_HASH_ITEM   *first;         /* The first "item" in serial list */
+%};
+%typedef struct nis_hash_table NIS_HASH_TABLE;
+%
+%/* Structure for storing dynamically allocated static data */
+%struct nis_sdata {
+%      void    *buf;   /* Memory allocation pointer    */
+%      u_int   size;   /* Buffer size                  */
+%};
+%
+%/* Generic client creating flags */
+%#define ZMH_VC                1
+%#define ZMH_DG                2
+%#define ZMH_AUTH      4
+%
+%/* Testing Access rights for objects */
+%
+%#define NIS_READ_ACC          1
+%#define NIS_MODIFY_ACC                2
+%#define NIS_CREATE_ACC                4
+%#define NIS_DESTROY_ACC       8
+%/* Test macros. a == access rights, m == desired rights. */
+%#define NIS_WORLD(a, m)       (((a) & (m)) != 0)
+%#define NIS_GROUP(a, m)       (((a) & ((m) << 8)) != 0)
+%#define NIS_OWNER(a, m)       (((a) & ((m) << 16)) != 0)
+%#define NIS_NOBODY(a, m)      (((a) & ((m) << 24)) != 0)
+%/*
+% * EOL Alert - The following non-prefixed test macros are
+% * here for backward compatability, and will be not be present
+% * in future releases - use the NIS_*() macros above.
+% */
+%#define WORLD(a, m)   (((a) & (m)) != 0)
+%#define GROUP(a, m)   (((a) & ((m) << 8)) != 0)
+%#define OWNER(a, m)   (((a) & ((m) << 16)) != 0)
+%#define NOBODY(a, m)  (((a) & ((m) << 24)) != 0)
+%
+%#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
+%#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
+%#define WORLD_DEFAULT (NIS_READ_ACC)
+%#define GROUP_DEFAULT (NIS_READ_ACC << 8)
+%#define OWNER_DEFAULT ((NIS_READ_ACC +\
+                        NIS_MODIFY_ACC +\
+                        NIS_CREATE_ACC +\
+                        NIS_DESTROY_ACC) << 16)
+%#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
+%
+%/* Result manipulation defines ... */
+%#define NIS_RES_NUMOBJ(x)     ((x)->objects.objects_len)
+%#define NIS_RES_OBJECT(x)     ((x)->objects.objects_val)
+%#define NIS_RES_COOKIE(x)     ((x)->cookie)
+%#define NIS_RES_STATUS(x)     ((x)->status)
+%
+%/* These defines make getting at the variant part of the object easier. */
+%#define TA_data zo_data.objdata_u.ta_data
+%#define EN_data zo_data.objdata_u.en_data
+%#define DI_data zo_data.objdata_u.di_data
+%#define LI_data zo_data.objdata_u.li_data
+%#define GR_data zo_data.objdata_u.gr_data
+%
+%#define __type_of(o) ((o)->zo_data.zo_type)
+%
+%/* Declarations for the internal subroutines in nislib.c */
+%enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
+%typedef enum name_pos name_pos;
+%
+%/*
+% * Defines for getting at column data in entry objects. Because RPCGEN
+% * generates some rather wordy structures, we create some defines that
+% * collapse the needed keystrokes to access a particular value using
+% * these definitions they take an nis_object *, and an int and return
+% * a u_char * for Value, and an int for length.
+% */
+%#define ENTRY_VAL(obj, col) \
+%      (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
+%#define ENTRY_LEN(obj, col) \
+%      (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
+%
+%
+%
+%#ifdef __cplusplus
+%}
+%#endif
+%
+%/* Prototypes, and extern declarations for the NIS library functions. */
+%#include <rpcsvc/nislib.h>
+%#endif /* __NIS_RPCGEN_H */
+%/* EDIT_START */
+%
+%/*
+% * nis_3.h
+% *
+% * This file contains definitions that are only of interest to the actual
+% * service daemon and client stubs. Normal users of NIS will not include
+% * this file.
+% *
+% * NOTE : This include file is automatically created by a combination
+% * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
+% * and then remake this file.
+% */
+%#ifndef __nis_3_h
+%#define __nis_3_h
+%#ifdef __cplusplus
+%extern "C" {
+%#endif
+#endif
diff --git a/lib/libdss-include/rpcsvc/nis_callback.h b/lib/libdss-include/rpcsvc/nis_callback.h
new file mode 100644 (file)
index 0000000..6f05728
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _RPCSVC_NIS_CALLBACK_H
+#define _RPCSVC_NIS_CALLBACK_H 1
+
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
+
+__BEGIN_DECLS
+
+typedef nis_object *obj_p;
+
+struct cback_data {
+       struct {
+               u_int entries_len;
+               obj_p *entries_val;
+       } entries;
+};
+typedef struct cback_data cback_data;
+
+#define CB_PROG 100302
+#define CB_VERS 1
+
+#define CBPROC_RECEIVE 1
+extern  bool_t * cbproc_receive_1 (cback_data *, CLIENT *) __THROW;
+extern  bool_t * cbproc_receive_1_svc (cback_data *, struct svc_req *) __THROW;
+
+#define CBPROC_FINISH 2
+extern  void * cbproc_finish_1 (void *, CLIENT *) __THROW;
+extern  void * cbproc_finish_1_svc (void *, struct svc_req *) __THROW;
+
+#define CBPROC_ERROR 3
+extern  void * cbproc_error_1 (nis_error *, CLIENT *) __THROW;
+extern  void * cbproc_error_1_svc (nis_error *, struct svc_req *) __THROW;
+extern int cb_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t) __THROW;
+
+/* the xdr functions */
+
+extern  bool_t xdr_obj_p (XDR *, obj_p*) __THROW;
+extern  bool_t xdr_cback_data (XDR *, cback_data*) __THROW;
+
+__END_DECLS
+
+#endif /* !_RPCVSC_NIS_CALLBACK_H */
diff --git a/lib/libdss-include/rpcsvc/nis_callback.x b/lib/libdss-include/rpcsvc/nis_callback.x
new file mode 100644 (file)
index 0000000..0fdca9e
--- /dev/null
@@ -0,0 +1,63 @@
+%/*
+% * Copyright (c) 2010, Oracle America, Inc.
+% *
+% * Redistribution and use in source and binary forms, with or without
+% * modification, are permitted provided that the following conditions are
+% * met:
+% *
+% *     * Redistributions of source code must retain the above copyright
+% *       notice, this list of conditions and the following disclaimer.
+% *     * Redistributions in binary form must reproduce the above
+% *       copyright notice, this list of conditions and the following
+% *       disclaimer in the documentation and/or other materials
+% *       provided with the distribution.
+% *     * Neither the name of the "Oracle America, Inc." nor the names of its
+% *       contributors may be used to endorse or promote products derived
+% *       from this software without specific prior written permission.
+% *
+% *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+% *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+% *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+% *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+% *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+% *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+% *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+% *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+% *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+% *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+% *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+% */
+
+/*
+ *     nis_callback.x
+ */
+
+%#pragma ident "@(#)nis_callback.x     1.7     94/05/03"
+
+/*
+ * "@(#)zns_cback.x 1.2 90/09/10"
+ *
+ * RPCL description of the Callback Service.
+ */
+
+#ifdef RPC_HDR
+%#include <rpcsvc/nis.h>
+#endif
+#ifdef RPC_XDR
+%#include "nis_clnt.h"
+#endif
+
+typedef nis_object     *obj_p;
+
+struct cback_data {
+       obj_p           entries<>;      /* List of objects */
+};
+
+program CB_PROG {
+       version CB_VERS {
+               bool    CBPROC_RECEIVE(cback_data) = 1;
+               void    CBPROC_FINISH(void) = 2;
+               void    CBPROC_ERROR(nis_error) = 3;
+       } = 1;
+} = 100302;
diff --git a/lib/libdss-include/rpcsvc/nis_object.x b/lib/libdss-include/rpcsvc/nis_object.x
new file mode 100644 (file)
index 0000000..774b38f
--- /dev/null
@@ -0,0 +1,328 @@
+/*
+ *     nis_object.x
+ *
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+%#pragma ident "@(#)nis_object.x       1.12    97/11/19"
+
+#if RPC_HDR
+%
+%#ifndef __nis_object_h
+%#define __nis_object_h
+%
+#endif
+/*
+ *     This file defines the format for a NIS object in RPC language.
+ * It is included by the main .x file and the database access protocol
+ * file. It is common because both of them need to deal with the same
+ * type of object. Generating the actual code though is a bit messy because
+ * the nis.x file and the nis_dba.x file will generate xdr routines to
+ * encode/decode objects when only one set is needed. Such is life when
+ * one is using rpcgen.
+ *
+ * Note, the protocol doesn't specify any limits on such things as
+ * maximum name length, number of attributes, etc. These are enforced
+ * by the database backend. When you hit them you will no. Also see
+ * the db_getlimits() function for fetching the limit values.
+ *
+ */
+
+/* Some manifest constants, chosen to maximize flexibility without
+ * plugging the wire full of data.
+ */
+const NIS_MAXSTRINGLEN = 255;
+const NIS_MAXNAMELEN   = 1024;
+const NIS_MAXATTRNAME  = 32;
+const NIS_MAXATTRVAL   = 2048;
+const NIS_MAXCOLUMNS   = 64;
+const NIS_MAXATTR      = 16;
+const NIS_MAXPATH      = 1024;
+const NIS_MAXREPLICAS  = 128;
+const NIS_MAXLINKS     = 16;
+
+const NIS_PK_NONE      = 0;    /* no public key (unix/sys auth) */
+const NIS_PK_DH               = 1;     /* Public key is Diffie-Hellman type */
+const NIS_PK_RSA       = 2;    /* Public key if RSA type */
+const NIS_PK_KERB      = 3;    /* Use kerberos style authentication */
+const NIS_PK_DHEXT     = 4;    /* Extended Diffie-Hellman for RPC-GSS */
+
+/*
+ * The fundamental name type of NIS. The name may consist of two parts,
+ * the first being the fully qualified name, and the second being an
+ * optional set of attribute/value pairs.
+ */
+struct nis_attr {
+       string  zattr_ndx<>;    /* name of the index            */
+       opaque  zattr_val<>;    /* Value for the attribute.     */
+};
+
+typedef string nis_name<>;     /* The NIS name itself. */
+
+/* NIS object types are defined by the following enumeration. The numbers
+ * they use are based on the following scheme :
+ *                  0 - 1023 are reserved for Sun,
+ *             1024 - 2047 are defined to be private to a particular tree.
+ *             2048 - 4095 are defined to be user defined.
+ *             4096 - ...  are reserved for future use.
+ *
+ * EOL Alert - The non-prefixed names are present for backward
+ * compatability only, and will not exist in future releases. Use
+ * the NIS_* names for future compatability.
+ */
+
+enum zotypes {
+
+       BOGUS_OBJ       = 0,    /* Uninitialized object structure       */
+       NO_OBJ          = 1,    /* NULL object (no data)                */
+       DIRECTORY_OBJ   = 2,    /* Directory object describing domain   */
+       GROUP_OBJ       = 3,    /* Group object (a list of names)       */
+       TABLE_OBJ       = 4,    /* Table object (a database schema)     */
+       ENTRY_OBJ       = 5,    /* Entry object (a database record)     */
+       LINK_OBJ        = 6,    /* A name link.                         */
+       PRIVATE_OBJ     = 7,    /* Private object (all opaque data)     */
+
+       NIS_BOGUS_OBJ   = 0,    /* Uninitialized object structure       */
+       NIS_NO_OBJ      = 1,    /* NULL object (no data)                */
+       NIS_DIRECTORY_OBJ = 2, /* Directory object describing domain    */
+       NIS_GROUP_OBJ   = 3,    /* Group object (a list of names)       */
+       NIS_TABLE_OBJ   = 4,    /* Table object (a database schema)     */
+       NIS_ENTRY_OBJ   = 5,    /* Entry object (a database record)     */
+       NIS_LINK_OBJ    = 6,    /* A name link.                         */
+       NIS_PRIVATE_OBJ  = 7 /* Private object (all opaque data) */
+};
+
+/*
+ * The types of Name services NIS knows about. They are enumerated
+ * here. The Binder code will use this type to determine if it has
+ * a set of library routines that will access the indicated name service.
+ */
+enum nstype {
+       UNKNOWN = 0,
+       NIS = 1,        /* Nis Plus Service             */
+       SUNYP = 2,      /* Old NIS Service              */
+       IVY = 3,        /* Nis Plus Plus Service        */
+       DNS = 4,        /* Domain Name Service          */
+       X500 = 5,       /* ISO/CCCIT X.500 Service      */
+       DNANS = 6,      /* Digital DECNet Name Service  */
+       XCHS = 7,       /* Xerox ClearingHouse Service  */
+       CDS= 8
+};
+
+/*
+ * DIRECTORY - The name service object. These objects identify other name
+ * servers that are serving some portion of the name space. Each has a
+ * type associated with it. The resolver library will note whether or not
+ * is has the needed routines to access that type of service.
+ * The oarmask structure defines an access rights mask on a per object
+ * type basis for the name spaces. The only bits currently used are
+ * create and destroy. By enabling or disabling these access rights for
+ * a specific object type for a one of the accessor entities (owner,
+ * group, world) the administrator can control what types of objects
+ * may be freely added to the name space and which require the
+ * administrator's approval.
+ */
+struct oar_mask {
+       uint32_t        oa_rights;      /* Access rights mask   */
+       zotypes         oa_otype;       /* Object type          */
+};
+
+struct endpoint {
+       string          uaddr<>;
+       string          family<>;   /* Transport family (INET, OSI, etc) */
+       string          proto<>;    /* Protocol (TCP, UDP, CLNP,  etc)   */
+};
+
+/*
+ * Note: pkey is a netobj which is limited to 1024 bytes which limits the
+ * keysize to 8192 bits. This is consider to be a reasonable limit for
+ * the expected lifetime of this service.
+ */
+struct nis_server {
+       nis_name        name;           /* Principal name of the server  */
+       endpoint        ep<>;           /* Universal addr(s) for server  */
+       uint32_t        key_type;       /* Public key type               */
+       netobj          pkey;           /* server's public key           */
+};
+
+struct directory_obj {
+       nis_name   do_name;      /* Name of the directory being served   */
+       nstype     do_type;      /* one of NIS, DNS, IVY, YP, or X.500   */
+       nis_server do_servers<>; /* <0> == Primary name server           */
+       uint32_t   do_ttl;       /* Time To Live (for caches)            */
+       oar_mask   do_armask<>;  /* Create/Destroy rights by object type */
+};
+
+/*
+ * ENTRY - This is one row of data from an information base.
+ * The type value is used by the client library to convert the entry to
+ * it's internal structure representation. The Table name is a back pointer
+ * to the table where the entry is stored. This allows the client library
+ * to determine where to send a request if the client wishes to change this
+ * entry but got to it through a LINK rather than directly.
+ * If the entry is a "standalone" entry then this field is void.
+ */
+const EN_BINARY   = 1; /* Indicates value is binary data       */
+const EN_CRYPT    = 2; /* Indicates the value is encrypted     */
+const EN_XDR      = 4; /* Indicates the value is XDR encoded   */
+const EN_MODIFIED = 8; /* Indicates entry is modified. */
+const EN_ASN1     = 64;        /* Means contents use ASN.1 encoding    */
+
+struct entry_col {
+       uint32_t        ec_flags;       /* Flags for this value */
+       opaque          ec_value<>;     /* It's textual value   */
+};
+
+struct entry_obj {
+       string  en_type<>;      /* Type of entry such as "passwd" */
+       entry_col en_cols<>;    /* Value for the entry            */
+};
+
+/*
+ * GROUP - The group object contains a list of NIS principal names. Groups
+ * are used to authorize principals. Each object has a set of access rights
+ * for members of its group. Principal names in groups are in the form
+ * name.directory and recursive groups are expressed as @groupname.directory
+ */
+struct group_obj {
+       uint32_t        gr_flags;       /* Flags controlling group      */
+       nis_name        gr_members<>;   /* List of names in group       */
+};
+
+/*
+ * LINK - This is the LINK object. It is quite similar to a symbolic link
+ * in the UNIX filesystem. The attributes in the main object structure are
+ * relative to the LINK data and not what it points to (like the file system)
+ * "modify" privleges here indicate the right to modify what the link points
+ * at and not to modify that actual object pointed to by the link.
+ */
+struct link_obj {
+       zotypes  li_rtype;      /* Real type of the object      */
+       nis_attr li_attrs<>;    /* Attribute/Values for tables  */
+       nis_name li_name;       /* The object's real NIS name   */
+};
+
+/*
+ * TABLE - This is the table object. It implements a simple
+ * data base that applications and use for configuration or
+ * administration purposes. The role of the table is to group together
+ * a set of related entries. Tables are the simple database component
+ * of NIS. Like many databases, tables are logically divided into columns
+ * and rows. The columns are labeled with indexes and each ENTRY makes
+ * up a row. Rows may be addressed within the table by selecting one
+ * or more indexes, and values for those indexes. Each row which has
+ * a value for the given index that matches the desired value is returned.
+ * Within the definition of each column there is a flags variable, this
+ * variable contains flags which determine whether or not the column is
+ * searchable, contains binary data, and access rights for the entry objects
+ * column value.
+ */
+
+const TA_BINARY     = 1;       /* Means table data is binary           */
+const TA_CRYPT      = 2;       /* Means value should be encrypted      */
+const TA_XDR        = 4;       /* Means value is XDR encoded           */
+const TA_SEARCHABLE = 8;       /* Means this column is searchable      */
+const TA_CASE       = 16;      /* Means this column is Case Sensitive  */
+const TA_MODIFIED   = 32;      /* Means this columns attrs are modified*/
+const TA_ASN1       = 64;      /* Means contents use ASN.1 encoding     */
+
+struct table_col {
+       string          tc_name<64>;    /* Column Name             */
+       uint32_t        tc_flags;       /* control flags           */
+       uint32_t        tc_rights;      /* Access rights mask      */
+};
+
+struct table_obj {
+       string    ta_type<64>;   /* Table type such as "passwd" */
+       int       ta_maxcol;     /* Total number of columns     */
+       u_char    ta_sep;        /* Separator character         */
+       table_col ta_cols<>;     /* The number of table indexes */
+       string    ta_path<>;     /* A search path for this table */
+};
+
+/*
+ * This union joins together all of the currently known objects.
+ */
+union objdata switch (zotypes zo_type) {
+       case NIS_DIRECTORY_OBJ :
+               struct directory_obj di_data;
+       case NIS_GROUP_OBJ :
+               struct group_obj gr_data;
+       case NIS_TABLE_OBJ :
+               struct table_obj ta_data;
+       case NIS_ENTRY_OBJ:
+               struct entry_obj en_data;
+       case NIS_LINK_OBJ :
+               struct link_obj li_data;
+       case NIS_PRIVATE_OBJ :
+               opaque  po_data<>;
+       case NIS_NO_OBJ :
+               void;
+       case NIS_BOGUS_OBJ :
+               void;
+       default :
+               void;
+};
+
+/*
+ * This is the basic NIS object data type. It consists of a generic part
+ * which all objects contain, and a specialized part which varies depending
+ * on the type of the object. All of the specialized sections have been
+ * described above. You might have wondered why they all start with an
+ * integer size, followed by the useful data. The answer is, when the
+ * server doesn't recognize the type returned it treats it as opaque data.
+ * And the definition for opaque data is {int size; char *data;}. In this
+ * way, servers and utility routines that do not understand a given type
+ * may still pass it around. One has to be careful in setting
+ * this variable accurately, it must take into account such things as
+ * XDR padding of structures etc. The best way to set it is to note one's
+ * position in the XDR encoding stream, encode the structure, look at the
+ * new position and calculate the size.
+ */
+struct nis_oid {
+       uint32_t ctime;         /* Time of objects creation     */
+       uint32_t mtime;         /* Time of objects modification */
+};
+
+struct nis_object {
+       nis_oid  zo_oid;        /* object identity verifier.            */
+       nis_name zo_name;       /* The NIS name for this object         */
+       nis_name zo_owner;      /* NIS name of object owner.            */
+       nis_name zo_group;      /* NIS name of access group.            */
+       nis_name zo_domain;     /* The administrator for the object     */
+       uint32_t zo_access;     /* Access rights (owner, group, world)  */
+       uint32_t zo_ttl;        /* Object's time to live in seconds.    */
+       objdata  zo_data;       /* Data structure for this type         */
+};
+#if RPC_HDR
+%
+%#endif /* if __nis_object_h */
+%
+#endif
diff --git a/lib/libdss-include/rpcsvc/nis_tags.h b/lib/libdss-include/rpcsvc/nis_tags.h
new file mode 100644 (file)
index 0000000..c2dc7fd
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *     nis_tags.h
+ *
+ *     This file contains the tags and statistics definitions. It is
+ *     automatically included by nis.h
+ */
+
+#ifndef        _RPCSVC_NIS_TAGS_H
+#define        _RPCSVC_NIS_TAGS_H
+
+#if 0
+#pragma ident  "@(#)nis_tags.h 1.16    96/10/25"
+#endif
+/* from file: zns_tags.h       1.7 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define        NIS_DIR "data"
+
+/* Lookup and List function flags */
+#define        FOLLOW_LINKS    (1<<0)  /* Follow link objects                  */
+#define        FOLLOW_PATH     (1<<1)  /* Follow the path in a table           */
+#define        HARD_LOOKUP     (1<<2)  /* Block until successful               */
+#define        ALL_RESULTS     (1<<3)  /* Retrieve all results                 */
+#define        NO_CACHE        (1<<4)  /* Do not return 'cached' results       */
+#define        MASTER_ONLY     (1<<5)  /* Get value only from master server    */
+#define        EXPAND_NAME     (1<<6)  /* Expand partitially qualified names   */
+
+/* Semantic modification for table operations flags */
+#define        RETURN_RESULT   (1<<7)  /* Return resulting object to client    */
+#define        ADD_OVERWRITE   (1<<8)  /* Allow overwrites on ADD              */
+#define        REM_MULTIPLE    (1<<9)  /* Allow wildcard deletes               */
+#define        MOD_SAMEOBJ     (1<<10) /* Check modified object before write   */
+#define        ADD_RESERVED    (1<<11) /* Spare ADD semantic                   */
+#define        REM_RESERVED    (1<<12) /* Spare REM semantic                   */
+#define        MOD_EXCLUSIVE   (1<<13) /* Modify no overwrite on modified keys */
+
+/* Lookup and List function flags (continued) */
+#define        SOFT_LOOKUP     (1<<14) /* The "old default" return on failure  */
+
+/* Transport specific modifications to the operation */
+#define        USE_DGRAM       (1<<16) /* Use a datagram transport             */
+#define        NO_AUTHINFO     (1<<17) /* Don't bother attaching auth info     */
+
+/*
+ * Declarations for "standard" NIS+ tags
+ * State variable tags have values     0 - 2047
+ * Statistic tags have values          2048 - 65535
+ * User Tags have values               >2^16
+ */
+#define        TAG_DEBUG       1       /* set debug level              */
+#define        TAG_STATS       2       /* Enable/disable statistics    */
+#define        TAG_GCACHE      3       /* Flush the Group Cache        */
+#define        TAG_GCACHE_ALL  TAG_GCACHE
+#define        TAG_DCACHE      4       /* Flush the directory cache    */
+#define        TAG_DCACHE_ONE  TAG_DCACHE
+#define        TAG_OCACHE      5       /* Flush the Object Cache       */
+#define        TAG_SECURE      6       /* Set the security level       */
+#define        TAG_TCACHE_ONE  7       /* Flush the table cache        */
+#define        TAG_DCACHE_ALL  8       /* Flush entire directory cache */
+#define        TAG_TCACHE_ALL  9       /* Flush entire table cache     */
+#define        TAG_GCACHE_ONE  10      /* Flush one group object       */
+#define        TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO   */
+#define        TAG_READONLY    12      /* Set read only mode           */
+#define        TAG_READWRITE   14      /* Reset read-write mode        */
+
+#define        TAG_OPSTATS     2048    /* NIS+ operations statistics   */
+#define        TAG_THREADS     2049    /* Child process/thread status  */
+#define        TAG_HEAP        2050    /* Heap usage statistics        */
+#define        TAG_UPDATES     2051    /* Updates to this service      */
+#define        TAG_VISIBLE     2052    /* First update that isn't replicated */
+#define        TAG_S_DCACHE    2053    /* Directory cache statistics   */
+#define        TAG_S_OCACHE    2054    /* Object cache statistics      */
+#define        TAG_S_GCACHE    2055    /* Group cache statistics       */
+#define        TAG_S_STORAGE   2056    /* Group cache statistics       */
+#define        TAG_UPTIME      2057    /* Time that server has been up */
+#define        TAG_DIRLIST     2058    /* Dir served by this server    */
+#define        TAG_NISCOMPAT   2059    /* Whether supports NIS compat mode */
+#define        TAG_DNSFORWARDING 2060  /* Whether DNS forwarding supported */
+#define        TAG_SECURITY_LEVEL 2061 /* Security level of the server */
+#define        TAG_ROOTSERVER  2062    /* Whether root server          */
+
+/*
+ * Declarations for the Group object flags. Currently
+ * there are only 3.
+ */
+#define        IMPMEM_GROUPS  1        /* Implicit Membership allowed  */
+#define        RECURS_GROUPS  2        /* Recursive Groups allowed     */
+#define        NEGMEM_GROUPS  4        /* Negative Groups allowed      */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RPCSVC_NIS_TAGS_H */
diff --git a/lib/libdss-include/rpcsvc/nislib.h b/lib/libdss-include/rpcsvc/nislib.h
new file mode 100644 (file)
index 0000000..21a8e48
--- /dev/null
@@ -0,0 +1,286 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        __RPCSVC_NISLIB_H__
+#define        __RPCSVC_NISLIB_H__
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+typedef const char *const_nis_name;
+
+/* nis_names: These functions are used to locate and manipulate all NIS+
+ * objects except the NIS+ entry objects.
+ *
+ * nis_lookup (name, flags) resolves a NIS+ name and returns a copy of
+ *                          that object  from a NIS+ server.
+ *    const nis_name name: name of the object to be resolved
+ *    unsigned int flags: logically ORing zero or more flags (FOLLOW_LINKS,
+ *                          HARD_LOOKUP, [NO_CACHE], MASTER_ONLY, EXPAND_NAME)
+ *
+ * nis_add (name, obj) adds objects to the NIS+ namespace.
+ *    const nis_name name: fully qualified NIS+ name.
+ *    const nis_object *obj: object members zo_name and zo_domain will be
+ *                           constructed from name.
+ *
+ * nis_remove (name, obj) removes objects from the NIS+ namespace.
+ *    const nis_name name: fully qualified NIS+ name.
+ *    const nis_object *obj: if not NULL, it is assumed to point to a copy
+ *                           of the object being removed. In this case, if
+ *                           the object on the server does not have the same
+ *                           object identifier as the  object  being  passed,
+ *                           the operation will fail with the NIS_NOTSAMEOBJ
+ *                           error.
+ *
+ * nis_modify (name, obj) can change specific attributes of an object
+ *                        that already exists in the namespace.
+ */
+extern nis_result *nis_lookup (const_nis_name name, unsigned int flags)
+     __THROW;
+extern nis_result *nis_add (const_nis_name name, const nis_object *obj)
+     __THROW;
+extern nis_result *nis_remove (const_nis_name name,
+                              const nis_object *obj) __THROW;
+extern nis_result *nis_modify (const_nis_name name,
+                              const nis_object *obj) __THROW;
+
+/* nis_tables: These functions are used to search and modify NIS+ tables.
+ *
+ * nis_list (table_name, flags, callback(table_name, obj, userdata), userdata)
+ *           search a table in the NIS+ namespace.
+ *    const nis_name table_name: indexed name ([xx=yy],table.dir)
+ *    unsigned int flags: logically ORing one or more flags (FOLLOW_LINKS,
+ *                      [FOLLOW_PATH], HARD_LOOKUP, [ALL_RESULTS], [NO_CACHE],
+ *                      MASTER_ONLY, EXPAND_NAME, RETURN_RESULT)
+ *    callback(): callback is an optional pointer to a function that will
+ *                process the ENTRY type objects that are returned from the
+ *                search. If this pointer is NULL, then all entries that match
+ *                the search criteria are returned in the nis_result structure,
+ *                otherwise  this  function  will  be  called once for each
+ *                entry returned.
+ *    void *userdata: passed to callback function along with the returned
+ *                    entry object.
+ *
+ * nis_add_entry (table_name, obj, flags) will add the NIS+ object to the
+ *                                        NIS+ table_name.
+ *    const nis_name table_name
+ *    const nis_object *obj
+ *    unsigned int flags: 0, ADD_OVERWRITE, RETURN_RESULT
+ *
+ * nis_modify_entry (name, obj, flags) modifies an object identified by name.
+ *    const nis_name name: object identifier
+ *    const nis_object *obj: should point to an entry with the EN_MODIFIED
+ *                           flag set in each column that contains new
+ *                           information.
+ *    unsigned int flags: 0, MOD_SAMEOBJ, RETURN_RESULT
+ *
+ * nis_remove_entry (table_name, obj, flags) removes a set of entries
+ *                                 identified by table_name from the table.
+ *    const nis_name table_name: indexed NIS+ name
+ *    const nis_object *obj: if obj is non-null, it is presumed to point to
+ *                           a cached copy of the entry. When the removal is
+ *                           attempted, and the object that would be removed
+ *                           is not the same as the cached object pointed to
+ *                           by object then the operation will fail with an
+ *                           NIS_NOTSAMEOBJ error
+ *    unsigned int flags: 0, REM_MULTIPLE
+ *
+ * nis_first_entry (table_name) fetches entries from a table one at a time.
+ *    const nis_name table_name
+ *
+ * nis_next_entry (table_name, cookie) retrieves the "next" entry from a
+ *                                     table specified by table_name.
+ *    const nis_name table_name:
+ *    const netobj *cookie: The value of cookie from the nis_result structure
+ *                          form the previous call.
+ */
+extern nis_result *nis_list (const_nis_name __name, unsigned int __flags,
+                            int (*__callback)(const_nis_name __table_name,
+                                              const nis_object *__obj,
+                                              const void *__userdata),
+                            const void *__userdata) __THROW;
+extern nis_result *nis_add_entry (const_nis_name __table_name,
+                                 const nis_object *__obj,
+                                 unsigned int __flags) __THROW;
+extern nis_result *nis_modify_entry (const_nis_name __name,
+                                    const nis_object *__obj,
+                                    unsigned int __flags) __THROW;
+extern nis_result *nis_remove_entry (const_nis_name __table_name,
+                                    const nis_object *__obj,
+                                    unsigned int __flags) __THROW;
+extern nis_result *nis_first_entry (const_nis_name __table_name) __THROW;
+extern nis_result *nis_next_entry (const_nis_name __table_name,
+                                  const netobj *__cookie) __THROW;
+/*
+** nis_server
+*/
+extern nis_error nis_mkdir (const_nis_name __dirname,
+                           const nis_server *__machine) __THROW;
+extern nis_error nis_rmdir (const_nis_name __dirname,
+                           const nis_server *__machine) __THROW;
+extern nis_error nis_servstate (const nis_server *__machine,
+                               const nis_tag *__tags, int __numtags,
+                               nis_tag **__result) __THROW;
+extern nis_error nis_stats (const nis_server *__machine,
+                           const nis_tag *__tags, int __numtags,
+                           nis_tag **__result) __THROW;
+extern void nis_freetags (nis_tag *__tags, int __numtags) __THROW;
+extern nis_server **nis_getservlist (const_nis_name __dirname) __THROW;
+extern void nis_freeservlist (nis_server **__machines) __THROW;
+
+/*
+** nis_subr
+*/
+extern nis_name nis_leaf_of (const_nis_name __name) __THROW;
+extern nis_name nis_leaf_of_r (const_nis_name __name, char *__buffer,
+                              size_t __buflen) __THROW;
+extern nis_name nis_name_of (const_nis_name __name) __THROW;
+extern nis_name nis_name_of_r (const_nis_name __name, char *__buffer,
+                              size_t __buflen) __THROW;
+extern nis_name nis_domain_of (const_nis_name __name) __THROW;
+extern nis_name nis_domain_of_r (const_nis_name __name, char *__buffer,
+                                size_t __buflen) __THROW;
+extern nis_name *nis_getnames (const_nis_name __name) __THROW;
+extern void nis_freenames (nis_name *__namelist) __THROW;
+extern name_pos nis_dir_cmp (const_nis_name __n1, const_nis_name __n2) __THROW;
+extern nis_object *nis_clone_object (const nis_object *__src,
+                                    nis_object *__dest) __THROW;
+extern void nis_destroy_object (nis_object *__obj) __THROW;
+extern void nis_print_object (const nis_object *__obj) __THROW;
+
+/*
+** nis_local_names
+*/
+extern nis_name nis_local_group (void) __THROW;
+extern nis_name nis_local_directory (void) __THROW;
+extern nis_name nis_local_principal (void) __THROW;
+extern nis_name nis_local_host (void) __THROW;
+
+/*
+** nis_error
+*/
+extern const char *nis_sperrno (const nis_error __status) __THROW;
+extern void nis_perror (const nis_error __status, const char *__label) __THROW;
+extern void nis_lerror (const nis_error __status, const char *__label) __THROW;
+extern char *nis_sperror (const nis_error status, const char *__label) __THROW;
+extern char *nis_sperror_r (const nis_error __status, const char *__label,
+                           char *__buffer, size_t __buflen) __THROW;
+/*
+** nis_groups
+*/
+extern bool_t nis_ismember (const_nis_name __principal,
+                           const_nis_name __group) __THROW;
+extern nis_error nis_addmember (const_nis_name __member,
+                               const_nis_name __group) __THROW;
+extern nis_error nis_removemember (const_nis_name __member,
+                                  const_nis_name __group) __THROW;
+extern nis_error nis_creategroup (const_nis_name __group,
+                                 unsigned int __flags) __THROW;
+extern nis_error nis_destroygroup (const_nis_name __group) __THROW;
+extern void nis_print_group_entry (const_nis_name __group) __THROW;
+extern nis_error nis_verifygroup (const_nis_name __group) __THROW;
+
+/*
+** nis_ping
+*/
+extern void nis_ping (const_nis_name __dirname, uint32_t __utime,
+                     const nis_object *__dirobj) __THROW;
+extern nis_result *nis_checkpoint (const_nis_name __dirname) __THROW;
+
+/*
+** nis_print (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern void nis_print_result (const nis_result *__result) __THROW;
+extern void nis_print_rights (unsigned int __rights) __THROW;
+extern void nis_print_directory (const directory_obj *__dirobj) __THROW;
+extern void nis_print_group (const group_obj *__grpobj) __THROW;
+extern void nis_print_table (const table_obj *__tblobj) __THROW;
+extern void nis_print_link (const link_obj *__lnkobj) __THROW;
+extern void nis_print_entry (const entry_obj *__enobj) __THROW;
+
+/*
+** nis_file (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern directory_obj *readColdStartFile (void) __THROW;
+extern bool_t writeColdStartFile (const directory_obj *__dirobj) __THROW;
+extern nis_object *nis_read_obj (const char *__obj) __THROW;
+extern bool_t nis_write_obj (const char *__file, const nis_object *__obj) __THROW;
+
+/*
+** nis_clone - (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!)
+*/
+extern directory_obj *nis_clone_directory (const directory_obj *__src,
+                                          directory_obj *__dest) __THROW;
+extern nis_result *nis_clone_result (const nis_result *__src,
+                                    nis_result *__dest) __THROW;
+
+/* nis_free - nis_freeresult */
+extern void nis_freeresult (nis_result *__result) __THROW;
+/* (XXX THE FOLLOWING ARE INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
+extern void nis_free_request (ib_request *__req) __THROW;
+extern void nis_free_directory (directory_obj *__dirobj) __THROW;
+extern void nis_free_object (nis_object *__obj) __THROW;
+
+/* (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */
+extern nis_name __nis_default_owner (char *) __THROW;
+extern nis_name __nis_default_group (char *) __THROW;
+extern uint32_t __nis_default_ttl (char *) __THROW;
+extern unsigned int __nis_default_access (char *, unsigned int) __THROW;
+extern fd_result *__nis_finddirectory (directory_obj *, const_nis_name) __THROW;
+extern void __free_fdresult (fd_result *) __THROW;
+extern uint32_t __nis_hash (const void *__keyarg, size_t __len) __THROW;
+
+/* NIS+ cache locking */
+extern int __nis_lock_cache (void) __THROW;
+extern int __nis_unlock_cache (void) __THROW;
+
+/* (XXX INTERNAL FUNCTIONS, ONLY FOR rpc.nisd AND glibc !!) */
+#if defined (NIS_INTERNAL) || defined (_LIBC)
+
+struct dir_binding
+{
+  CLIENT *clnt;                  /* RPC CLIENT handle */
+  nis_server *server_val;        /* List of servers */
+  unsigned int server_len;       /* # of servers */
+  unsigned int server_used;      /* Which server we are bind in the moment ? */
+  unsigned int current_ep;       /* Which endpoint of the server are in use? */
+  unsigned int trys;             /* How many server have we tried ? */
+  unsigned int class;            /* From which class is server_val ? */
+  bool_t master_only;            /* Is only binded to the master */
+  bool_t use_auth;               /* Do we use AUTH ? */
+  bool_t use_udp;                /* Do we use UDP ? */
+  struct sockaddr_in addr;       /* Server's IP address */
+  int socket;                    /* Server's local socket */
+};
+typedef struct dir_binding dir_binding;
+
+extern nis_error __nisbind_create (dir_binding *, const nis_server *,
+                                  unsigned int, unsigned int, unsigned int,
+                                  unsigned int) __THROW;
+extern nis_error __nisbind_connect (dir_binding *) __THROW;
+extern nis_error __nisbind_next (dir_binding *) __THROW;
+extern void __nisbind_destroy (dir_binding *) __THROW;
+extern nis_error __nisfind_server (const_nis_name, int, directory_obj **,
+                                  dir_binding *, unsigned int) __THROW;
+
+#endif
+
+__END_DECLS
+
+#endif /* __RPCSVC_NISLIB_H__ */
diff --git a/lib/libdss-include/rpcsvc/nlm_prot.h b/lib/libdss-include/rpcsvc/nlm_prot.h
new file mode 100644 (file)
index 0000000..5420a6c
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _NLM_PROT_H_RPCGEN
+#define _NLM_PROT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LM_MAXSTRLEN 1024
+#define MAXNAMELEN LM_MAXSTRLEN+1
+
+enum nlm_stats {
+       nlm_granted = 0,
+       nlm_denied = 1,
+       nlm_denied_nolocks = 2,
+       nlm_blocked = 3,
+       nlm_denied_grace_period = 4,
+};
+typedef enum nlm_stats nlm_stats;
+
+struct nlm_holder {
+       bool_t exclusive;
+       int svid;
+       netobj oh;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct nlm_holder nlm_holder;
+
+struct nlm_testrply {
+       nlm_stats stat;
+       union {
+               struct nlm_holder holder;
+       } nlm_testrply_u;
+};
+typedef struct nlm_testrply nlm_testrply;
+
+struct nlm_stat {
+       nlm_stats stat;
+};
+typedef struct nlm_stat nlm_stat;
+
+struct nlm_res {
+       netobj cookie;
+       nlm_stat stat;
+};
+typedef struct nlm_res nlm_res;
+
+struct nlm_testres {
+       netobj cookie;
+       nlm_testrply stat;
+};
+typedef struct nlm_testres nlm_testres;
+
+struct nlm_lock {
+       char *caller_name;
+       netobj fh;
+       netobj oh;
+       int svid;
+       u_int l_offset;
+       u_int l_len;
+};
+typedef struct nlm_lock nlm_lock;
+
+struct nlm_lockargs {
+       netobj cookie;
+       bool_t block;
+       bool_t exclusive;
+       struct nlm_lock alock;
+       bool_t reclaim;
+       int state;
+};
+typedef struct nlm_lockargs nlm_lockargs;
+
+struct nlm_cancargs {
+       netobj cookie;
+       bool_t block;
+       bool_t exclusive;
+       struct nlm_lock alock;
+};
+typedef struct nlm_cancargs nlm_cancargs;
+
+struct nlm_testargs {
+       netobj cookie;
+       bool_t exclusive;
+       struct nlm_lock alock;
+};
+typedef struct nlm_testargs nlm_testargs;
+
+struct nlm_unlockargs {
+       netobj cookie;
+       struct nlm_lock alock;
+};
+typedef struct nlm_unlockargs nlm_unlockargs;
+/*
+ * The following enums are actually bit encoded for efficient
+ * boolean algebra.... DON'T change them.....
+ */
+
+enum fsh_mode {
+       fsm_DN = 0,
+       fsm_DR = 1,
+       fsm_DW = 2,
+       fsm_DRW = 3,
+};
+typedef enum fsh_mode fsh_mode;
+
+enum fsh_access {
+       fsa_NONE = 0,
+       fsa_R = 1,
+       fsa_W = 2,
+       fsa_RW = 3,
+};
+typedef enum fsh_access fsh_access;
+
+struct nlm_share {
+       char *caller_name;
+       netobj fh;
+       netobj oh;
+       fsh_mode mode;
+       fsh_access access;
+};
+typedef struct nlm_share nlm_share;
+
+struct nlm_shareargs {
+       netobj cookie;
+       nlm_share share;
+       bool_t reclaim;
+};
+typedef struct nlm_shareargs nlm_shareargs;
+
+struct nlm_shareres {
+       netobj cookie;
+       nlm_stats stat;
+       int sequence;
+};
+typedef struct nlm_shareres nlm_shareres;
+
+struct nlm_notify {
+       char *name;
+       long state;
+};
+typedef struct nlm_notify nlm_notify;
+
+#define NLM_PROG 100021
+#define NLM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NLM_TEST 1
+extern  nlm_testres * nlm_test_1(struct nlm_testargs *, CLIENT *);
+extern  nlm_testres * nlm_test_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_LOCK 2
+extern  nlm_res * nlm_lock_1(struct nlm_lockargs *, CLIENT *);
+extern  nlm_res * nlm_lock_1_svc(struct nlm_lockargs *, struct svc_req *);
+#define NLM_CANCEL 3
+extern  nlm_res * nlm_cancel_1(struct nlm_cancargs *, CLIENT *);
+extern  nlm_res * nlm_cancel_1_svc(struct nlm_cancargs *, struct svc_req *);
+#define NLM_UNLOCK 4
+extern  nlm_res * nlm_unlock_1(struct nlm_unlockargs *, CLIENT *);
+extern  nlm_res * nlm_unlock_1_svc(struct nlm_unlockargs *, struct svc_req *);
+#define NLM_GRANTED 5
+extern  nlm_res * nlm_granted_1(struct nlm_testargs *, CLIENT *);
+extern  nlm_res * nlm_granted_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_TEST_MSG 6
+extern  void * nlm_test_msg_1(struct nlm_testargs *, CLIENT *);
+extern  void * nlm_test_msg_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_LOCK_MSG 7
+extern  void * nlm_lock_msg_1(struct nlm_lockargs *, CLIENT *);
+extern  void * nlm_lock_msg_1_svc(struct nlm_lockargs *, struct svc_req *);
+#define NLM_CANCEL_MSG 8
+extern  void * nlm_cancel_msg_1(struct nlm_cancargs *, CLIENT *);
+extern  void * nlm_cancel_msg_1_svc(struct nlm_cancargs *, struct svc_req *);
+#define NLM_UNLOCK_MSG 9
+extern  void * nlm_unlock_msg_1(struct nlm_unlockargs *, CLIENT *);
+extern  void * nlm_unlock_msg_1_svc(struct nlm_unlockargs *, struct svc_req *);
+#define NLM_GRANTED_MSG 10
+extern  void * nlm_granted_msg_1(struct nlm_testargs *, CLIENT *);
+extern  void * nlm_granted_msg_1_svc(struct nlm_testargs *, struct svc_req *);
+#define NLM_TEST_RES 11
+extern  void * nlm_test_res_1(nlm_testres *, CLIENT *);
+extern  void * nlm_test_res_1_svc(nlm_testres *, struct svc_req *);
+#define NLM_LOCK_RES 12
+extern  void * nlm_lock_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_lock_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_CANCEL_RES 13
+extern  void * nlm_cancel_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_cancel_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_UNLOCK_RES 14
+extern  void * nlm_unlock_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_unlock_res_1_svc(nlm_res *, struct svc_req *);
+#define NLM_GRANTED_RES 15
+extern  void * nlm_granted_res_1(nlm_res *, CLIENT *);
+extern  void * nlm_granted_res_1_svc(nlm_res *, struct svc_req *);
+extern int nlm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NLM_TEST 1
+extern  nlm_testres * nlm_test_1();
+extern  nlm_testres * nlm_test_1_svc();
+#define NLM_LOCK 2
+extern  nlm_res * nlm_lock_1();
+extern  nlm_res * nlm_lock_1_svc();
+#define NLM_CANCEL 3
+extern  nlm_res * nlm_cancel_1();
+extern  nlm_res * nlm_cancel_1_svc();
+#define NLM_UNLOCK 4
+extern  nlm_res * nlm_unlock_1();
+extern  nlm_res * nlm_unlock_1_svc();
+#define NLM_GRANTED 5
+extern  nlm_res * nlm_granted_1();
+extern  nlm_res * nlm_granted_1_svc();
+#define NLM_TEST_MSG 6
+extern  void * nlm_test_msg_1();
+extern  void * nlm_test_msg_1_svc();
+#define NLM_LOCK_MSG 7
+extern  void * nlm_lock_msg_1();
+extern  void * nlm_lock_msg_1_svc();
+#define NLM_CANCEL_MSG 8
+extern  void * nlm_cancel_msg_1();
+extern  void * nlm_cancel_msg_1_svc();
+#define NLM_UNLOCK_MSG 9
+extern  void * nlm_unlock_msg_1();
+extern  void * nlm_unlock_msg_1_svc();
+#define NLM_GRANTED_MSG 10
+extern  void * nlm_granted_msg_1();
+extern  void * nlm_granted_msg_1_svc();
+#define NLM_TEST_RES 11
+extern  void * nlm_test_res_1();
+extern  void * nlm_test_res_1_svc();
+#define NLM_LOCK_RES 12
+extern  void * nlm_lock_res_1();
+extern  void * nlm_lock_res_1_svc();
+#define NLM_CANCEL_RES 13
+extern  void * nlm_cancel_res_1();
+extern  void * nlm_cancel_res_1_svc();
+#define NLM_UNLOCK_RES 14
+extern  void * nlm_unlock_res_1();
+extern  void * nlm_unlock_res_1_svc();
+#define NLM_GRANTED_RES 15
+extern  void * nlm_granted_res_1();
+extern  void * nlm_granted_res_1_svc();
+extern int nlm_prog_1_freeresult ();
+#endif /* K&R C */
+#define NLM_VERSX 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define NLM_SHARE 20
+extern  nlm_shareres * nlm_share_3(nlm_shareargs *, CLIENT *);
+extern  nlm_shareres * nlm_share_3_svc(nlm_shareargs *, struct svc_req *);
+#define NLM_UNSHARE 21
+extern  nlm_shareres * nlm_unshare_3(nlm_shareargs *, CLIENT *);
+extern  nlm_shareres * nlm_unshare_3_svc(nlm_shareargs *, struct svc_req *);
+#define NLM_NM_LOCK 22
+extern  nlm_res * nlm_nm_lock_3(nlm_lockargs *, CLIENT *);
+extern  nlm_res * nlm_nm_lock_3_svc(nlm_lockargs *, struct svc_req *);
+#define NLM_FREE_ALL 23
+extern  void * nlm_free_all_3(nlm_notify *, CLIENT *);
+extern  void * nlm_free_all_3_svc(nlm_notify *, struct svc_req *);
+extern int nlm_prog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define NLM_SHARE 20
+extern  nlm_shareres * nlm_share_3();
+extern  nlm_shareres * nlm_share_3_svc();
+#define NLM_UNSHARE 21
+extern  nlm_shareres * nlm_unshare_3();
+extern  nlm_shareres * nlm_unshare_3_svc();
+#define NLM_NM_LOCK 22
+extern  nlm_res * nlm_nm_lock_3();
+extern  nlm_res * nlm_nm_lock_3_svc();
+#define NLM_FREE_ALL 23
+extern  void * nlm_free_all_3();
+extern  void * nlm_free_all_3_svc();
+extern int nlm_prog_3_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_nlm_stats (XDR *, nlm_stats*);
+extern  bool_t xdr_nlm_holder (XDR *, nlm_holder*);
+extern  bool_t xdr_nlm_testrply (XDR *, nlm_testrply*);
+extern  bool_t xdr_nlm_stat (XDR *, nlm_stat*);
+extern  bool_t xdr_nlm_res (XDR *, nlm_res*);
+extern  bool_t xdr_nlm_testres (XDR *, nlm_testres*);
+extern  bool_t xdr_nlm_lock (XDR *, nlm_lock*);
+extern  bool_t xdr_nlm_lockargs (XDR *, nlm_lockargs*);
+extern  bool_t xdr_nlm_cancargs (XDR *, nlm_cancargs*);
+extern  bool_t xdr_nlm_testargs (XDR *, nlm_testargs*);
+extern  bool_t xdr_nlm_unlockargs (XDR *, nlm_unlockargs*);
+extern  bool_t xdr_fsh_mode (XDR *, fsh_mode*);
+extern  bool_t xdr_fsh_access (XDR *, fsh_access*);
+extern  bool_t xdr_nlm_share (XDR *, nlm_share*);
+extern  bool_t xdr_nlm_shareargs (XDR *, nlm_shareargs*);
+extern  bool_t xdr_nlm_shareres (XDR *, nlm_shareres*);
+extern  bool_t xdr_nlm_notify (XDR *, nlm_notify*);
+
+#else /* K&R C */
+extern bool_t xdr_nlm_stats ();
+extern bool_t xdr_nlm_holder ();
+extern bool_t xdr_nlm_testrply ();
+extern bool_t xdr_nlm_stat ();
+extern bool_t xdr_nlm_res ();
+extern bool_t xdr_nlm_testres ();
+extern bool_t xdr_nlm_lock ();
+extern bool_t xdr_nlm_lockargs ();
+extern bool_t xdr_nlm_cancargs ();
+extern bool_t xdr_nlm_testargs ();
+extern bool_t xdr_nlm_unlockargs ();
+extern bool_t xdr_fsh_mode ();
+extern bool_t xdr_fsh_access ();
+extern bool_t xdr_nlm_share ();
+extern bool_t xdr_nlm_shareargs ();
+extern bool_t xdr_nlm_shareres ();
+extern bool_t xdr_nlm_notify ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_NLM_PROT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/nlm_prot.x b/lib/libdss-include/rpcsvc/nlm_prot.x
new file mode 100644 (file)
index 0000000..81ff137
--- /dev/null
@@ -0,0 +1,203 @@
+/* @(#)nlm_prot.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Network lock manager protocol definition
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * protocol used between local lock manager and remote lock manager
+ */
+
+#ifdef RPC_HDR
+%#define LM_MAXSTRLEN  1024
+%#define MAXNAMELEN    LM_MAXSTRLEN+1
+#endif
+
+/*
+ * status of a call to the lock manager
+ */
+enum nlm_stats {
+       nlm_granted = 0,
+       nlm_denied = 1,
+       nlm_denied_nolocks = 2,
+       nlm_blocked = 3,
+       nlm_denied_grace_period = 4
+};
+
+struct nlm_holder {
+       bool exclusive;
+       int svid;
+       netobj oh;
+       unsigned l_offset;
+       unsigned l_len;
+};
+
+union nlm_testrply switch (nlm_stats stat) {
+       case nlm_denied:
+               struct nlm_holder holder;
+       default:
+               void;
+};
+
+struct nlm_stat {
+       nlm_stats stat;
+};
+
+struct nlm_res {
+       netobj cookie;
+       nlm_stat stat;
+};
+
+struct nlm_testres {
+       netobj cookie;
+       nlm_testrply stat;
+};
+
+struct nlm_lock {
+       string caller_name<LM_MAXSTRLEN>;
+       netobj fh;              /* identify a file */
+       netobj oh;              /* identify owner of a lock */
+       int svid;               /* generated from pid for svid */
+       unsigned l_offset;
+       unsigned l_len;
+};
+
+struct nlm_lockargs {
+       netobj cookie;
+       bool block;
+       bool exclusive;
+       struct nlm_lock alock;
+       bool reclaim;           /* used for recovering locks */
+       int state;              /* specify local status monitor state */
+};
+
+struct nlm_cancargs {
+       netobj cookie;
+       bool block;
+       bool exclusive;
+       struct nlm_lock alock;
+};
+
+struct nlm_testargs {
+       netobj cookie;
+       bool exclusive;
+       struct nlm_lock alock;
+};
+
+struct nlm_unlockargs {
+       netobj cookie;
+       struct nlm_lock alock;
+};
+
+
+#ifdef RPC_HDR
+%/*
+% * The following enums are actually bit encoded for efficient
+% * boolean algebra.... DON'T change them.....
+% */
+#endif
+enum   fsh_mode {
+       fsm_DN  = 0,    /* deny none */
+       fsm_DR  = 1,    /* deny read */
+       fsm_DW  = 2,    /* deny write */
+       fsm_DRW = 3     /* deny read/write */
+};
+
+enum   fsh_access {
+       fsa_NONE = 0,   /* for completeness */
+       fsa_R    = 1,   /* read only */
+       fsa_W    = 2,   /* write only */
+       fsa_RW   = 3    /* read/write */
+};
+
+struct nlm_share {
+       string caller_name<LM_MAXSTRLEN>;
+       netobj  fh;
+       netobj  oh;
+       fsh_mode        mode;
+       fsh_access      access;
+};
+
+struct nlm_shareargs {
+       netobj  cookie;
+       nlm_share       share;
+       bool    reclaim;
+};
+
+struct nlm_shareres {
+       netobj  cookie;
+       nlm_stats       stat;
+       int     sequence;
+};
+
+struct nlm_notify {
+       string name<MAXNAMELEN>;
+       long state;
+};
+
+/*
+ * Over-the-wire protocol used between the network lock managers
+ */
+
+program NLM_PROG {
+       version NLM_VERS {
+
+               nlm_testres     NLM_TEST(struct nlm_testargs) = 1;
+
+               nlm_res         NLM_LOCK(struct nlm_lockargs) = 2;
+
+               nlm_res         NLM_CANCEL(struct nlm_cancargs) = 3;
+               nlm_res         NLM_UNLOCK(struct nlm_unlockargs) =     4;
+
+               /*
+                * remote lock manager call-back to grant lock
+                */
+               nlm_res         NLM_GRANTED(struct nlm_testargs)= 5;
+               /*
+                * message passing style of requesting lock
+                */
+               void            NLM_TEST_MSG(struct nlm_testargs) = 6;
+               void            NLM_LOCK_MSG(struct nlm_lockargs) = 7;
+               void            NLM_CANCEL_MSG(struct nlm_cancargs) =8;
+               void            NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
+               void            NLM_GRANTED_MSG(struct nlm_testargs) = 10;
+               void            NLM_TEST_RES(nlm_testres) = 11;
+               void            NLM_LOCK_RES(nlm_res) = 12;
+               void            NLM_CANCEL_RES(nlm_res) = 13;
+               void            NLM_UNLOCK_RES(nlm_res) = 14;
+               void            NLM_GRANTED_RES(nlm_res) = 15;
+       } = 1;
+
+       version NLM_VERSX {
+               nlm_shareres    NLM_SHARE(nlm_shareargs) = 20;
+               nlm_shareres    NLM_UNSHARE(nlm_shareargs) = 21;
+               nlm_res         NLM_NM_LOCK(nlm_lockargs) = 22;
+               void            NLM_FREE_ALL(nlm_notify) = 23;
+       } = 3;
+
+} = 100021;
diff --git a/lib/libdss-include/rpcsvc/rex.h b/lib/libdss-include/rpcsvc/rex.h
new file mode 100644 (file)
index 0000000..3c80ce7
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _REX_H_RPCGEN
+#define _REX_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define STRINGSIZE 1024
+
+typedef char *rexstring;
+#define SIGINT 2
+#define REX_INTERACTIVE 1
+
+struct rex_start {
+       struct {
+               u_int rst_cmd_len;
+               rexstring *rst_cmd_val;
+       } rst_cmd;
+       rexstring rst_host;
+       rexstring rst_fsname;
+       rexstring rst_dirwithin;
+       struct {
+               u_int rst_env_len;
+               rexstring *rst_env_val;
+       } rst_env;
+       u_int rst_port0;
+       u_int rst_port1;
+       u_int rst_port2;
+       u_int rst_flags;
+};
+typedef struct rex_start rex_start;
+
+struct rex_result {
+       int rlt_stat;
+       rexstring rlt_message;
+};
+typedef struct rex_result rex_result;
+
+struct sgttyb {
+       u_int four;
+       char chars[4];
+       u_int flags;
+};
+typedef struct sgttyb sgttyb;
+#define B0 0
+#define B50 1
+#define B75 2
+#define B110 3
+#define B134 4
+#define B150 5
+#define B200 6
+#define B300 7
+#define B600 8
+#define B1200 9
+#define B1800 10
+#define B2400 11
+#define B4800 12
+#define B9600 13
+#define B19200 14
+#define B38400 15
+#define TANDEM 0x00000001
+#define CBREAK 0x00000002
+#define LCASE 0x00000004
+#define ECHO 0x00000008
+#define CRMOD 0x00000010
+#define RAW 0x00000020
+#define ODDP 0x00000040
+#define EVENP 0x00000080
+#define ANYP 0x000000c0
+#define NLDELAY 0x00000300
+#define NL0 0x00000000
+#define NL1 0x00000100
+#define NL2 0x00000200
+#define NL3 0x00000300
+#define TBDELAY 0x00000c00
+#define TAB0 0x00000000
+#define TAB1 0x00000400
+#define TAB2 0x00000800
+#define XTABS 0x00000c00
+#define CRDELAY 0x00003000
+#define CR0 0x00000000
+#define CR1 0x00001000
+#define CR2 0x00002000
+#define CR3 0x00003000
+#define VTDELAY 0x00004000
+#define FF0 0x00000000
+#define FF1 0x00004000
+#define BSDELAY 0x00008000
+#define BS0 0x00000000
+#define BS1 0x00008000
+#define CRTBS 0x00010000
+#define PRTERA 0x00020000
+#define CRTERA 0x00040000
+#define TILDE 0x00080000
+#define MDMBUF 0x00100000
+#define LITOUT 0x00200000
+#define TOSTOP 0x00400000
+#define FLUSHO 0x00800000
+#define NOHANG 0x01000000
+#define L001000 0x02000000
+#define CRTKIL 0x04000000
+#define PASS8 0x08000000
+#define CTLECH 0x10000000
+#define PENDIN 0x20000000
+#define DECCTQ 0x40000000
+#define NOFLSH 0x80000000
+
+struct tchars {
+       u_int six;
+       char chars[6];
+};
+typedef struct tchars tchars;
+
+struct ltchars {
+       u_int six;
+       char chars[6];
+       u_int mode;
+};
+typedef struct ltchars ltchars;
+
+struct rex_ttysize {
+       int ts_lines;
+       int ts_cols;
+};
+typedef struct rex_ttysize rex_ttysize;
+
+struct rex_ttymode {
+       sgttyb basic;
+       tchars more;
+       ltchars yetmore;
+       u_int andmore;
+};
+typedef struct rex_ttymode rex_ttymode;
+#define LCRTBS 0x0001
+#define LPRTERA 0x0002
+#define LCRTERA 0x0004
+#define LTILDE 0x0008
+#define LMDMBUF 0x0010
+#define LLITOUT 0x0020
+#define LTOSTOP 0x0040
+#define LFLUSHO 0x0080
+#define LNOHANG 0x0100
+#define LL001000 0x0200
+#define LCRTKIL 0x0400
+#define LPASS8 0x0800
+#define LCTLECH 0x1000
+#define LPENDIN 0x2000
+#define LDECCTQ 0x4000
+#define LNOFLSH 0x8000
+
+#define REXPROG 100017
+#define REXVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define REXPROC_START 1
+extern  rex_result * rexproc_start_1(rex_start *, CLIENT *);
+extern  rex_result * rexproc_start_1_svc(rex_start *, struct svc_req *);
+#define REXPROC_WAIT 2
+extern  rex_result * rexproc_wait_1(void *, CLIENT *);
+extern  rex_result * rexproc_wait_1_svc(void *, struct svc_req *);
+#define REXPROC_MODES 3
+extern  void * rexproc_modes_1(rex_ttymode *, CLIENT *);
+extern  void * rexproc_modes_1_svc(rex_ttymode *, struct svc_req *);
+#define REXPROC_WINCH 4
+extern  void * rexproc_winch_1(rex_ttysize *, CLIENT *);
+extern  void * rexproc_winch_1_svc(rex_ttysize *, struct svc_req *);
+#define REXPROC_SIGNAL 5
+extern  void * rexproc_signal_1(int *, CLIENT *);
+extern  void * rexproc_signal_1_svc(int *, struct svc_req *);
+extern int rexprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define REXPROC_START 1
+extern  rex_result * rexproc_start_1();
+extern  rex_result * rexproc_start_1_svc();
+#define REXPROC_WAIT 2
+extern  rex_result * rexproc_wait_1();
+extern  rex_result * rexproc_wait_1_svc();
+#define REXPROC_MODES 3
+extern  void * rexproc_modes_1();
+extern  void * rexproc_modes_1_svc();
+#define REXPROC_WINCH 4
+extern  void * rexproc_winch_1();
+extern  void * rexproc_winch_1_svc();
+#define REXPROC_SIGNAL 5
+extern  void * rexproc_signal_1();
+extern  void * rexproc_signal_1_svc();
+extern int rexprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rexstring (XDR *, rexstring*);
+extern  bool_t xdr_rex_start (XDR *, rex_start*);
+extern  bool_t xdr_rex_result (XDR *, rex_result*);
+extern  bool_t xdr_sgttyb (XDR *, sgttyb*);
+extern  bool_t xdr_tchars (XDR *, tchars*);
+extern  bool_t xdr_ltchars (XDR *, ltchars*);
+extern  bool_t xdr_rex_ttysize (XDR *, rex_ttysize*);
+extern  bool_t xdr_rex_ttymode (XDR *, rex_ttymode*);
+
+#else /* K&R C */
+extern bool_t xdr_rexstring ();
+extern bool_t xdr_rex_start ();
+extern bool_t xdr_rex_result ();
+extern bool_t xdr_sgttyb ();
+extern bool_t xdr_tchars ();
+extern bool_t xdr_ltchars ();
+extern bool_t xdr_rex_ttysize ();
+extern bool_t xdr_rex_ttymode ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_REX_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/rex.x b/lib/libdss-include/rpcsvc/rex.x
new file mode 100644 (file)
index 0000000..b5baf15
--- /dev/null
@@ -0,0 +1,229 @@
+/* @(#)rex.x   2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Remote execution (rex) protocol specification
+ */
+
+const STRINGSIZE = 1024;
+typedef string rexstring<1024>;
+
+/*
+ * values to pass to REXPROC_SIGNAL
+ */
+const SIGINT = 2;      /* interrupt */
+
+/*
+ * Values for rst_flags, below
+ */
+const REX_INTERACTIVE = 1;     /* interactive mode */
+
+struct rex_start {
+       rexstring rst_cmd<>;    /* list of command and args */
+       rexstring rst_host;     /* working directory host name */
+       rexstring rst_fsname;   /* working directory file system name */
+       rexstring rst_dirwithin;/* working directory within file system */
+       rexstring rst_env<>;    /* list of environment */
+       unsigned int rst_port0; /* port for stdin */
+       unsigned int rst_port1; /* port for stdout */
+       unsigned int rst_port2; /* port for stderr */
+       unsigned int rst_flags; /* options - see const above */
+};
+
+struct rex_result {
+       int rlt_stat;           /* integer status code */
+       rexstring rlt_message;  /* string message for human consumption */
+};
+
+
+struct sgttyb {
+       unsigned four;  /* always equals 4 */
+       opaque chars[4];
+       /* chars[0] == input speed */
+       /* chars[1] == output speed */
+       /* chars[2] == kill character */
+       /* chars[3] == erase character */
+       unsigned flags;
+};
+/* values for speeds above (baud rates)  */
+const B0  = 0;
+const B50 = 1;
+const B75 = 2;
+const B110 = 3;
+const B134 = 4;
+const B150 = 5;
+const B200 = 6;
+const B300 = 7;
+const B600 = 8;
+const B1200 = 9;
+const B1800 = 10;
+const B2400 = 11;
+const B4800 = 12;
+const B9600 = 13;
+const B19200 = 14;
+const B38400 = 15;
+
+/* values for flags above */
+const TANDEM = 0x00000001; /* send stopc on out q full */
+const CBREAK = 0x00000002; /* half-cooked mode */
+const LCASE = 0x00000004; /* simulate lower case */
+const ECHO = 0x00000008; /* echo input */
+const CRMOD = 0x00000010; /* map \r to \r\n on output */
+const RAW = 0x00000020; /* no i/o processing */
+const ODDP = 0x00000040; /* get/send odd parity */
+const EVENP = 0x00000080; /* get/send even parity */
+const ANYP = 0x000000c0; /* get any parity/send none */
+const NLDELAY = 0x00000300; /* \n delay */
+const  NL0 = 0x00000000;
+const  NL1 = 0x00000100; /* tty 37 */
+const  NL2 = 0x00000200; /* vt05 */
+const  NL3 = 0x00000300;
+const TBDELAY = 0x00000c00; /* horizontal tab delay */
+const  TAB0 = 0x00000000;
+const  TAB1 = 0x00000400; /* tty 37 */
+const  TAB2 = 0x00000800;
+const XTABS = 0x00000c00; /* expand tabs on output */
+const CRDELAY = 0x00003000; /* \r delay */
+const  CR0 = 0x00000000;
+const  CR1 = 0x00001000; /* tn 300 */
+const  CR2 = 0x00002000; /* tty 37 */
+const  CR3 = 0x00003000; /* concept 100 */
+const VTDELAY = 0x00004000; /* vertical tab delay */
+const  FF0 = 0x00000000;
+const  FF1 = 0x00004000; /* tty 37 */
+const BSDELAY = 0x00008000; /* \b delay */
+const  BS0 = 0x00000000;
+const  BS1 = 0x00008000;
+const CRTBS = 0x00010000; /* do backspacing for crt */
+const PRTERA = 0x00020000; /* \ ... / erase */
+const CRTERA = 0x00040000; /* " \b " to wipe out char */
+const TILDE = 0x00080000; /* hazeltine tilde kludge */
+const MDMBUF = 0x00100000; /* start/stop output on carrier intr */
+const LITOUT = 0x00200000; /* literal output */
+const TOSTOP = 0x00400000; /* SIGTTOU on background output */
+const FLUSHO = 0x00800000; /* flush output to terminal */
+const NOHANG = 0x01000000; /* no SIGHUP on carrier drop */
+const L001000 = 0x02000000;
+const CRTKIL = 0x04000000; /* kill line with " \b " */
+const PASS8 = 0x08000000;
+const CTLECH = 0x10000000; /* echo control chars as ^X */
+const PENDIN = 0x20000000; /* tp->t_rawq needs reread */
+const DECCTQ = 0x40000000; /* only ^Q starts after ^S */
+const NOFLSH = 0x80000000; /* no output flush on signal */
+
+struct tchars {
+       unsigned six;   /* always equals 6 */
+       opaque chars[6];
+       /* chars[0] == interrupt char */
+       /* chars[1] == quit char */
+       /* chars[2] == start output char */
+       /* chars[3] == stop output char */
+       /* chars[4] == end-of-file char */
+       /* chars[5] == input delimiter (like nl) */
+};
+
+struct ltchars {
+       unsigned six;   /* always equals 6 */
+       opaque chars[6];
+       /* chars[0] == stop process signal */
+       /* chars[1] == delayed stop process signal */
+       /* chars[2] == reprint line */
+       /* chars[3] == flush output */
+       /* chars[4] == word erase */
+       /* chars[5] == literal next character */
+       unsigned mode;
+};
+
+struct rex_ttysize {
+       int ts_lines;
+       int ts_cols;
+};
+
+struct rex_ttymode {
+    sgttyb basic;    /* standard unix tty flags */
+    tchars more; /* interrupt, kill characters, etc. */
+    ltchars yetmore; /* special Berkeley characters */
+    unsigned andmore;     /* and Berkeley modes */
+};
+
+/* values for andmore above */
+const LCRTBS = 0x0001; /* do backspacing for crt */
+const LPRTERA = 0x0002;        /* \ ... / erase */
+const LCRTERA = 0x0004;        /* " \b " to wipe out char */
+const LTILDE = 0x0008; /* hazeltine tilde kludge */
+const LMDMBUF = 0x0010;        /* start/stop output on carrier intr */
+const LLITOUT = 0x0020;        /* literal output */
+const LTOSTOP = 0x0040;        /* SIGTTOU on background output */
+const LFLUSHO = 0x0080;        /* flush output to terminal */
+const LNOHANG = 0x0100;        /* no SIGHUP on carrier drop */
+const LL001000 = 0x0200;
+const LCRTKIL = 0x0400;        /* kill line with " \b " */
+const LPASS8 = 0x0800;
+const LCTLECH = 0x1000;        /* echo control chars as ^X */
+const LPENDIN = 0x2000;        /* needs reread */
+const LDECCTQ = 0x4000;        /* only ^Q starts after ^S */
+const LNOFLSH = 0x8000;        /* no output flush on signal */
+
+program REXPROG {
+       version REXVERS {
+
+               /*
+                * Start remote execution
+                */
+               rex_result
+               REXPROC_START(rex_start) = 1;
+
+               /*
+                * Wait for remote execution to terminate
+                */
+               rex_result
+               REXPROC_WAIT(void) = 2;
+
+               /*
+                * Send tty modes
+                */
+               void
+               REXPROC_MODES(rex_ttymode) = 3;
+
+               /*
+                * Send window size change
+                */
+               void
+               REXPROC_WINCH(rex_ttysize) = 4;
+
+               /*
+                * Send other signal
+                */
+               void
+               REXPROC_SIGNAL(int) = 5;
+       } = 1;
+} = 100017;
diff --git a/lib/libdss-include/rpcsvc/rquota.h b/lib/libdss-include/rpcsvc/rquota.h
new file mode 100644 (file)
index 0000000..b506460
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RQUOTA_H_RPCGEN
+#define _RQUOTA_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RQ_PATHLEN 1024
+
+struct getquota_args {
+       char *gqa_pathp;
+       int gqa_uid;
+};
+typedef struct getquota_args getquota_args;
+
+struct rquota {
+       int rq_bsize;
+       bool_t rq_active;
+       u_int rq_bhardlimit;
+       u_int rq_bsoftlimit;
+       u_int rq_curblocks;
+       u_int rq_fhardlimit;
+       u_int rq_fsoftlimit;
+       u_int rq_curfiles;
+       u_int rq_btimeleft;
+       u_int rq_ftimeleft;
+};
+typedef struct rquota rquota;
+
+enum gqr_status {
+       Q_OK = 1,
+       Q_NOQUOTA = 2,
+       Q_EPERM = 3,
+};
+typedef enum gqr_status gqr_status;
+
+struct getquota_rslt {
+       gqr_status status;
+       union {
+               rquota gqr_rquota;
+       } getquota_rslt_u;
+};
+typedef struct getquota_rslt getquota_rslt;
+
+#define RQUOTAPROG 100011
+#define RQUOTAVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RQUOTAPROC_GETQUOTA 1
+extern  getquota_rslt * rquotaproc_getquota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getquota_1_svc(getquota_args *, struct svc_req *);
+#define RQUOTAPROC_GETACTIVEQUOTA 2
+extern  getquota_rslt * rquotaproc_getactivequota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc(getquota_args *, struct svc_req *);
+extern int rquotaprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RQUOTAPROC_GETQUOTA 1
+extern  getquota_rslt * rquotaproc_getquota_1();
+extern  getquota_rslt * rquotaproc_getquota_1_svc();
+#define RQUOTAPROC_GETACTIVEQUOTA 2
+extern  getquota_rslt * rquotaproc_getactivequota_1();
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc();
+extern int rquotaprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_getquota_args (XDR *, getquota_args*);
+extern  bool_t xdr_rquota (XDR *, rquota*);
+extern  bool_t xdr_gqr_status (XDR *, gqr_status*);
+extern  bool_t xdr_getquota_rslt (XDR *, getquota_rslt*);
+
+#else /* K&R C */
+extern bool_t xdr_getquota_args ();
+extern bool_t xdr_rquota ();
+extern bool_t xdr_gqr_status ();
+extern bool_t xdr_getquota_rslt ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RQUOTA_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/rquota.x b/lib/libdss-include/rpcsvc/rquota.x
new file mode 100644 (file)
index 0000000..c457524
--- /dev/null
@@ -0,0 +1,61 @@
+/* @(#)rquota.x        2.1 88/08/01 4.0 RPCSRC */
+/* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */
+
+/*
+ * Remote quota protocol
+ * Requires unix authentication
+ */
+
+const RQ_PATHLEN = 1024;
+
+struct getquota_args {
+       string gqa_pathp<RQ_PATHLEN>;   /* path to filesystem of interest */
+       int gqa_uid;                    /* inquire about quota for uid */
+};
+
+/*
+ * remote quota structure
+ */
+struct rquota {
+       int rq_bsize;                   /* block size for block counts */
+       bool rq_active;                 /* indicates whether quota is active */
+       unsigned int rq_bhardlimit;     /* absolute limit on disk blks alloc */
+       unsigned int rq_bsoftlimit;     /* preferred limit on disk blks */
+       unsigned int rq_curblocks;      /* current block count */
+       unsigned int rq_fhardlimit;     /* absolute limit on allocated files */
+       unsigned int rq_fsoftlimit;     /* preferred file limit */
+       unsigned int rq_curfiles;       /* current # allocated files */
+       unsigned int rq_btimeleft;      /* time left for excessive disk use */
+       unsigned int rq_ftimeleft;      /* time left for excessive files */
+};
+
+enum gqr_status {
+       Q_OK = 1,               /* quota returned */
+       Q_NOQUOTA = 2,          /* noquota for uid */
+       Q_EPERM = 3             /* no permission to access quota */
+};
+
+union getquota_rslt switch (gqr_status status) {
+case Q_OK:
+       rquota gqr_rquota;      /* valid if status == Q_OK */
+case Q_NOQUOTA:
+       void;
+case Q_EPERM:
+       void;
+};
+
+program RQUOTAPROG {
+       version RQUOTAVERS {
+               /*
+                * Get all quotas
+                */
+               getquota_rslt
+               RQUOTAPROC_GETQUOTA(getquota_args) = 1;
+
+               /*
+                * Get active quotas only
+                */
+               getquota_rslt
+               RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
+       } = 1;
+} = 100011;
diff --git a/lib/libdss-include/rpcsvc/rstat.h b/lib/libdss-include/rpcsvc/rstat.h
new file mode 100644 (file)
index 0000000..abc0ba8
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RSTAT_H_RPCGEN
+#define _RSTAT_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef FSCALE
+/*
+ * Scale factor for scaled integers used to count load averages.
+ */
+#define FSHIFT 8 /* bits to right of fixed binary point */
+#define FSCALE (1<<FSHIFT)
+
+#endif /* ndef FSCALE */
+#define CPUSTATES 4
+#define DK_NDRIVE 4
+
+struct rstat_timeval {
+       u_int tv_sec;
+       u_int tv_usec;
+};
+typedef struct rstat_timeval rstat_timeval;
+
+struct statstime {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       u_int v_swtch;
+       int avenrun[3];
+       rstat_timeval boottime;
+       rstat_timeval curtime;
+       int if_opackets;
+};
+typedef struct statstime statstime;
+
+struct statsswtch {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       u_int v_swtch;
+       u_int avenrun[3];
+       rstat_timeval boottime;
+       int if_opackets;
+};
+typedef struct statsswtch statsswtch;
+
+struct stats {
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       u_int v_pgpgin;
+       u_int v_pgpgout;
+       u_int v_pswpin;
+       u_int v_pswpout;
+       u_int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       int if_opackets;
+};
+typedef struct stats stats;
+
+#define RSTATPROG 100001
+#define RSTATVERS_TIME 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RSTATPROC_STATS 1
+extern  statstime * rstatproc_stats_3(void *, CLIENT *);
+extern  statstime * rstatproc_stats_3_svc(void *, struct svc_req *);
+#define RSTATPROC_HAVEDISK 2
+extern  u_int * rstatproc_havedisk_3(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_3_svc(void *, struct svc_req *);
+extern int rstatprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RSTATPROC_STATS 1
+extern  statstime * rstatproc_stats_3();
+extern  statstime * rstatproc_stats_3_svc();
+#define RSTATPROC_HAVEDISK 2
+extern  u_int * rstatproc_havedisk_3();
+extern  u_int * rstatproc_havedisk_3_svc();
+extern int rstatprog_3_freeresult ();
+#endif /* K&R C */
+#define RSTATVERS_SWTCH 2
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  statsswtch * rstatproc_stats_2(void *, CLIENT *);
+extern  statsswtch * rstatproc_stats_2_svc(void *, struct svc_req *);
+extern  u_int * rstatproc_havedisk_2(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_2_svc(void *, struct svc_req *);
+extern int rstatprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  statsswtch * rstatproc_stats_2();
+extern  statsswtch * rstatproc_stats_2_svc();
+extern  u_int * rstatproc_havedisk_2();
+extern  u_int * rstatproc_havedisk_2_svc();
+extern int rstatprog_2_freeresult ();
+#endif /* K&R C */
+#define RSTATVERS_ORIG 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  stats * rstatproc_stats_1(void *, CLIENT *);
+extern  stats * rstatproc_stats_1_svc(void *, struct svc_req *);
+extern  u_int * rstatproc_havedisk_1(void *, CLIENT *);
+extern  u_int * rstatproc_havedisk_1_svc(void *, struct svc_req *);
+extern int rstatprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+extern  stats * rstatproc_stats_1();
+extern  stats * rstatproc_stats_1_svc();
+extern  u_int * rstatproc_havedisk_1();
+extern  u_int * rstatproc_havedisk_1_svc();
+extern int rstatprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rstat_timeval (XDR *, rstat_timeval*);
+extern  bool_t xdr_statstime (XDR *, statstime*);
+extern  bool_t xdr_statsswtch (XDR *, statsswtch*);
+extern  bool_t xdr_stats (XDR *, stats*);
+
+#else /* K&R C */
+extern bool_t xdr_rstat_timeval ();
+extern bool_t xdr_statstime ();
+extern bool_t xdr_statsswtch ();
+extern bool_t xdr_stats ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RSTAT_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/rstat.x b/lib/libdss-include/rpcsvc/rstat.x
new file mode 100644 (file)
index 0000000..9b7b102
--- /dev/null
@@ -0,0 +1,145 @@
+/* @(#)rstat.x 2.2 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Gather statistics on remote machines
+ */
+
+#ifdef RPC_HDR
+
+%#ifndef FSCALE
+%/*
+% * Scale factor for scaled integers used to count load averages.
+% */
+%#define FSHIFT  8               /* bits to right of fixed binary point */
+%#define FSCALE  (1<<FSHIFT)
+%
+%#endif /* ndef FSCALE */
+
+#endif /* def RPC_HDR */
+
+const CPUSTATES = 4;
+const DK_NDRIVE = 4;
+
+/*
+ * GMT since 0:00, January 1, 1970
+ */
+struct rstat_timeval {
+       unsigned int tv_sec;    /* seconds */
+       unsigned int tv_usec;   /* and microseconds */
+};
+
+struct statstime {                             /* RSTATVERS_TIME */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       unsigned int v_swtch;
+       int avenrun[3];         /* scaled by FSCALE */
+       rstat_timeval boottime;
+       rstat_timeval curtime;
+       int if_opackets;
+};
+
+struct statsswtch {                    /* RSTATVERS_SWTCH */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       unsigned int v_swtch;
+       unsigned int avenrun[3];/* scaled by FSCALE */
+       rstat_timeval boottime;
+       int if_opackets;
+};
+
+struct stats {                         /* RSTATVERS_ORIG */
+       int cp_time[CPUSTATES];
+       int dk_xfer[DK_NDRIVE];
+       unsigned int v_pgpgin;  /* these are cumulative sum */
+       unsigned int v_pgpgout;
+       unsigned int v_pswpin;
+       unsigned int v_pswpout;
+       unsigned int v_intr;
+       int if_ipackets;
+       int if_ierrors;
+       int if_oerrors;
+       int if_collisions;
+       int if_opackets;
+};
+
+
+program RSTATPROG {
+       /*
+        * Newest version includes current time and context switching info
+        */
+       version RSTATVERS_TIME {
+               statstime
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 3;
+       /*
+        * Does not have current time
+        */
+       version RSTATVERS_SWTCH {
+               statsswtch
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 2;
+       /*
+        * Old version has no info about current time or context switching
+        */
+       version RSTATVERS_ORIG {
+               stats
+               RSTATPROC_STATS(void) = 1;
+
+               unsigned int
+               RSTATPROC_HAVEDISK(void) = 2;
+       } = 1;
+} = 100001;
diff --git a/lib/libdss-include/rpcsvc/rusers.h b/lib/libdss-include/rpcsvc/rusers.h
new file mode 100644 (file)
index 0000000..dc2d3b0
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RUSERS_H_RPCGEN
+#define _RUSERS_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Find out about remote users
+ */
+#define RUSERS_MAXUSERLEN 32
+#define RUSERS_MAXLINELEN 32
+#define RUSERS_MAXHOSTLEN 257
+
+struct rusers_utmp {
+       char *ut_user;
+       char *ut_line;
+       char *ut_host;
+       int ut_type;
+       int ut_time;
+       u_int ut_idle;
+};
+typedef struct rusers_utmp rusers_utmp;
+
+typedef struct {
+       u_int utmp_array_len;
+       rusers_utmp *utmp_array_val;
+} utmp_array;
+
+/*
+ * Values for ut_type field above.
+ */
+#define RUSERS_EMPTY 0
+#define RUSERS_RUN_LVL 1
+#define RUSERS_BOOT_TIME 2
+#define RUSERS_OLD_TIME 3
+#define RUSERS_NEW_TIME 4
+#define RUSERS_INIT_PROCESS 5
+#define RUSERS_LOGIN_PROCESS 6
+#define RUSERS_USER_PROCESS 7
+#define RUSERS_DEAD_PROCESS 8
+#define RUSERS_ACCOUNTING 9
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rpc/xdr.h>
+
+/*
+ * The following structures are used by version 2 of the rusersd protocol.
+ * They were not developed with rpcgen, so they do not appear as RPCL.
+ */
+
+#define RUSERSVERS_IDLE 2
+#define RUSERSVERS 3 /* current version */
+#define MAXUSERS 100
+
+/*
+ * This is the structure used in version 2 of the rusersd RPC service.
+ * It corresponds to the utmp structure for BSD systems.
+ */
+struct ru_utmp {
+ char ut_line[8]; /* tty name */
+ char ut_name[8]; /* user id */
+ char ut_host[16]; /* host name, if remote */
+ long int ut_time; /* time on */
+};
+
+struct utmparr {
+ struct ru_utmp **uta_arr;
+ int uta_cnt;
+};
+typedef struct utmparr utmparr;
+
+extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW;
+
+struct utmpidle {
+ struct ru_utmp ui_utmp;
+ unsigned int ui_idle;
+};
+
+struct utmpidlearr {
+ struct utmpidle **uia_arr;
+ int uia_cnt;
+};
+
+extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW;
+
+#ifdef __cplusplus
+}
+#endif
+
+#define RUSERSPROG 100002
+#define RUSERSVERS_3 3
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define RUSERSPROC_NUM 1
+extern  int * rusersproc_num_3(void *, CLIENT *);
+extern  int * rusersproc_num_3_svc(void *, struct svc_req *);
+#define RUSERSPROC_NAMES 2
+extern  utmp_array * rusersproc_names_3(void *, CLIENT *);
+extern  utmp_array * rusersproc_names_3_svc(void *, struct svc_req *);
+#define RUSERSPROC_ALLNAMES 3
+extern  utmp_array * rusersproc_allnames_3(void *, CLIENT *);
+extern  utmp_array * rusersproc_allnames_3_svc(void *, struct svc_req *);
+extern int rusersprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define RUSERSPROC_NUM 1
+extern  int * rusersproc_num_3();
+extern  int * rusersproc_num_3_svc();
+#define RUSERSPROC_NAMES 2
+extern  utmp_array * rusersproc_names_3();
+extern  utmp_array * rusersproc_names_3_svc();
+#define RUSERSPROC_ALLNAMES 3
+extern  utmp_array * rusersproc_allnames_3();
+extern  utmp_array * rusersproc_allnames_3_svc();
+extern int rusersprog_3_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_rusers_utmp (XDR *, rusers_utmp*);
+extern  bool_t xdr_utmp_array (XDR *, utmp_array*);
+
+#else /* K&R C */
+extern bool_t xdr_rusers_utmp ();
+extern bool_t xdr_utmp_array ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RUSERS_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/rusers.x b/lib/libdss-include/rpcsvc/rusers.x
new file mode 100644 (file)
index 0000000..5bbfe97
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+%/*
+% * Find out about remote users
+% */
+
+const RUSERS_MAXUSERLEN = 32;
+const RUSERS_MAXLINELEN = 32;
+const RUSERS_MAXHOSTLEN = 257;
+
+struct rusers_utmp {
+       string ut_user<RUSERS_MAXUSERLEN>;      /* aka ut_name */
+       string ut_line<RUSERS_MAXLINELEN>;      /* device */
+       string ut_host<RUSERS_MAXHOSTLEN>;      /* host user logged on from */
+       int ut_type;                            /* type of entry */
+       int ut_time;                            /* time entry was made */
+       unsigned int ut_idle;                   /* minutes idle */
+};
+
+typedef rusers_utmp utmp_array<>;
+
+#ifdef RPC_HDR
+%
+%/*
+% * Values for ut_type field above.
+% */
+#endif
+const  RUSERS_EMPTY = 0;
+const  RUSERS_RUN_LVL = 1;
+const  RUSERS_BOOT_TIME = 2;
+const  RUSERS_OLD_TIME = 3;
+const  RUSERS_NEW_TIME = 4;
+const  RUSERS_INIT_PROCESS = 5;
+const  RUSERS_LOGIN_PROCESS = 6;
+const  RUSERS_USER_PROCESS = 7;
+const  RUSERS_DEAD_PROCESS = 8;
+const  RUSERS_ACCOUNTING = 9;
+
+program RUSERSPROG {
+
+       version RUSERSVERS_3 {
+               int
+               RUSERSPROC_NUM(void) = 1;
+
+               utmp_array
+               RUSERSPROC_NAMES(void) = 2;
+
+               utmp_array
+               RUSERSPROC_ALLNAMES(void) = 3;
+       } = 3;
+
+} = 100002;
+
+#ifdef RPC_HDR
+%
+%
+%#ifdef        __cplusplus
+%extern "C" {
+%#endif
+%
+%#include <rpc/xdr.h>
+%
+%/*
+% * The following structures are used by version 2 of the rusersd protocol.
+% * They were not developed with rpcgen, so they do not appear as RPCL.
+% */
+%
+%#define       RUSERSVERS_IDLE 2
+%#define       RUSERSVERS 3            /* current version */
+%#define       MAXUSERS 100
+%
+%/*
+% * This is the structure used in version 2 of the rusersd RPC service.
+% * It corresponds to the utmp structure for BSD systems.
+% */
+%struct ru_utmp {
+%      char    ut_line[8];             /* tty name */
+%      char    ut_name[8];             /* user id */
+%      char    ut_host[16];            /* host name, if remote */
+%      long int ut_time;               /* time on */
+%};
+%
+%struct utmparr {
+%       struct ru_utmp **uta_arr;
+%       int uta_cnt;
+%};
+%typedef struct utmparr utmparr;
+%
+%extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW;
+%
+%struct utmpidle {
+%      struct ru_utmp ui_utmp;
+%      unsigned int ui_idle;
+%};
+%
+%struct utmpidlearr {
+%      struct utmpidle **uia_arr;
+%      int uia_cnt;
+%};
+%
+%extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW;
+%
+%#ifdef        __cplusplus
+%}
+%#endif
+#endif
+
+
+#ifdef RPC_XDR
+%bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp);
+%
+%bool_t
+%xdr_utmp (XDR *xdrs, struct ru_utmp *objp)
+%{
+%      /* Since the fields are char foo [xxx], we should not free them. */
+%      if (xdrs->x_op != XDR_FREE)
+%      {
+%              char *ptr;
+%              unsigned int size;
+%              ptr = objp->ut_line;
+%              size = sizeof (objp->ut_line);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%              ptr = objp->ut_name;
+%              size = sizeof (objp->ut_name);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%              ptr = objp->ut_host;
+%              size = sizeof (objp->ut_host);
+%              if (!xdr_bytes (xdrs, &ptr, &size, size)) {
+%                      return (FALSE);
+%              }
+%      }
+%      if (!xdr_long(xdrs, &objp->ut_time)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp);
+%
+%bool_t
+%xdr_utmpptr (XDR *xdrs, struct ru_utmp **objpp)
+%{
+%      if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
+%                         (xdrproc_t) xdr_utmp)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmparr (XDR *xdrs, struct utmparr *objp)
+%{
+%      if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
+%                     MAXUSERS, sizeof(struct ru_utmp *),
+%                     (xdrproc_t) xdr_utmpptr)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp);
+%
+%bool_t
+%xdr_utmpidle (XDR *xdrs, struct utmpidle *objp)
+%{
+%      if (!xdr_utmp(xdrs, &objp->ui_utmp)) {
+%              return (FALSE);
+%      }
+%      if (!xdr_u_int(xdrs, &objp->ui_idle)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp);
+%
+%bool_t
+%xdr_utmpidleptr (XDR *xdrs, struct utmpidle **objpp)
+%{
+%      if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
+%                         (xdrproc_t) xdr_utmpidle)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp)
+%{
+%      if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
+%                     MAXUSERS, sizeof(struct utmpidle *),
+%                     (xdrproc_t) xdr_utmpidleptr)) {
+%              return (FALSE);
+%      }
+%      return (TRUE);
+%}
+#endif
diff --git a/lib/libdss-include/rpcsvc/sm_inter.h b/lib/libdss-include/rpcsvc/sm_inter.h
new file mode 100644 (file)
index 0000000..d4bc3e1
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _SM_INTER_H_RPCGEN
+#define _SM_INTER_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SM_MAXSTRLEN 1024
+
+struct sm_name {
+       char *mon_name;
+};
+typedef struct sm_name sm_name;
+
+struct my_id {
+       char *my_name;
+       int my_prog;
+       int my_vers;
+       int my_proc;
+};
+typedef struct my_id my_id;
+
+struct mon_id {
+       char *mon_name;
+       struct my_id my_id;
+};
+typedef struct mon_id mon_id;
+
+struct mon {
+       struct mon_id mon_id;
+       char priv[16];
+};
+typedef struct mon mon;
+
+struct sm_stat {
+       int state;
+};
+typedef struct sm_stat sm_stat;
+
+enum res {
+       stat_succ = 0,
+       stat_fail = 1,
+};
+typedef enum res res;
+
+struct sm_stat_res {
+       res res_stat;
+       int state;
+};
+typedef struct sm_stat_res sm_stat_res;
+
+struct status {
+       char *mon_name;
+       int state;
+       char priv[16];
+};
+typedef struct status status;
+
+#define SM_PROG 100024
+#define SM_VERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define SM_STAT 1
+extern  struct sm_stat_res * sm_stat_1(struct sm_name *, CLIENT *);
+extern  struct sm_stat_res * sm_stat_1_svc(struct sm_name *, struct svc_req *);
+#define SM_MON 2
+extern  struct sm_stat_res * sm_mon_1(struct mon *, CLIENT *);
+extern  struct sm_stat_res * sm_mon_1_svc(struct mon *, struct svc_req *);
+#define SM_UNMON 3
+extern  struct sm_stat * sm_unmon_1(struct mon_id *, CLIENT *);
+extern  struct sm_stat * sm_unmon_1_svc(struct mon_id *, struct svc_req *);
+#define SM_UNMON_ALL 4
+extern  struct sm_stat * sm_unmon_all_1(struct my_id *, CLIENT *);
+extern  struct sm_stat * sm_unmon_all_1_svc(struct my_id *, struct svc_req *);
+#define SM_SIMU_CRASH 5
+extern  void * sm_simu_crash_1(void *, CLIENT *);
+extern  void * sm_simu_crash_1_svc(void *, struct svc_req *);
+extern int sm_prog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define SM_STAT 1
+extern  struct sm_stat_res * sm_stat_1();
+extern  struct sm_stat_res * sm_stat_1_svc();
+#define SM_MON 2
+extern  struct sm_stat_res * sm_mon_1();
+extern  struct sm_stat_res * sm_mon_1_svc();
+#define SM_UNMON 3
+extern  struct sm_stat * sm_unmon_1();
+extern  struct sm_stat * sm_unmon_1_svc();
+#define SM_UNMON_ALL 4
+extern  struct sm_stat * sm_unmon_all_1();
+extern  struct sm_stat * sm_unmon_all_1_svc();
+#define SM_SIMU_CRASH 5
+extern  void * sm_simu_crash_1();
+extern  void * sm_simu_crash_1_svc();
+extern int sm_prog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_sm_name (XDR *, sm_name*);
+extern  bool_t xdr_my_id (XDR *, my_id*);
+extern  bool_t xdr_mon_id (XDR *, mon_id*);
+extern  bool_t xdr_mon (XDR *, mon*);
+extern  bool_t xdr_sm_stat (XDR *, sm_stat*);
+extern  bool_t xdr_res (XDR *, res*);
+extern  bool_t xdr_sm_stat_res (XDR *, sm_stat_res*);
+extern  bool_t xdr_status (XDR *, status*);
+
+#else /* K&R C */
+extern bool_t xdr_sm_name ();
+extern bool_t xdr_my_id ();
+extern bool_t xdr_mon_id ();
+extern bool_t xdr_mon ();
+extern bool_t xdr_sm_stat ();
+extern bool_t xdr_res ();
+extern bool_t xdr_sm_stat_res ();
+extern bool_t xdr_status ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_SM_INTER_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/sm_inter.x b/lib/libdss-include/rpcsvc/sm_inter.x
new file mode 100644 (file)
index 0000000..767f0e0
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Status monitor protocol specification
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+program SM_PROG {
+       version SM_VERS  {
+               /* res_stat = stat_succ if status monitor agrees to monitor */
+               /* res_stat = stat_fail if status monitor cannot monitor */
+               /* if res_stat == stat_succ, state = state number of site sm_name */
+               struct sm_stat_res                       SM_STAT(struct sm_name) = 1;
+
+               /* res_stat = stat_succ if status monitor agrees to monitor */
+               /* res_stat = stat_fail if status monitor cannot monitor */
+               /* stat consists of state number of local site */
+               struct sm_stat_res                       SM_MON(struct mon) = 2;
+
+               /* stat consists of state number of local site */
+               struct sm_stat                           SM_UNMON(struct mon_id) = 3;
+
+               /* stat consists of state number of local site */
+               struct sm_stat                           SM_UNMON_ALL(struct my_id) = 4;
+
+               void                                     SM_SIMU_CRASH(void) = 5;
+
+       } = 1;
+} = 100024;
+
+const  SM_MAXSTRLEN = 1024;
+
+struct sm_name {
+       string mon_name<SM_MAXSTRLEN>;
+};
+
+struct my_id {
+       string   my_name<SM_MAXSTRLEN>;         /* name of the site initiating the monitoring request*/
+       int     my_prog;                        /* rpc program # of the requesting process */
+       int     my_vers;                        /* rpc version # of the requesting process */
+       int     my_proc;                        /* rpc procedure # of the requesting process */
+};
+
+struct mon_id {
+       string  mon_name<SM_MAXSTRLEN>;         /* name of the site to be monitored */
+       struct my_id my_id;
+};
+
+
+struct mon{
+       struct mon_id mon_id;
+       opaque priv[16];                /* private information to store at monitor for requesting process */
+};
+
+
+/*
+ * state # of status monitor monotonically increases each time
+ * status of the site changes:
+ * an even number (>= 0) indicates the site is down and
+ * an odd number (> 0) indicates the site is up;
+ */
+struct sm_stat {
+       int state;              /* state # of status monitor */
+};
+
+enum res {
+       stat_succ = 0,          /* status monitor agrees to monitor */
+       stat_fail = 1           /* status monitor cannot monitor */
+};
+
+struct sm_stat_res {
+       res res_stat;
+       int state;
+};
+
+/*
+ * structure of the status message sent back by the status monitor
+ * when monitor site status changes
+ */
+struct status {
+       string mon_name<SM_MAXSTRLEN>;
+       int state;
+       opaque priv[16];                /* stored private information */
+};
diff --git a/lib/libdss-include/rpcsvc/spray.h b/lib/libdss-include/rpcsvc/spray.h
new file mode 100644 (file)
index 0000000..b19e402
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _SPRAY_H_RPCGEN
+#define _SPRAY_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SPRAYMAX 8845
+
+struct spraytimeval {
+       u_int sec;
+       u_int usec;
+};
+typedef struct spraytimeval spraytimeval;
+
+struct spraycumul {
+       u_int counter;
+       spraytimeval clock;
+};
+typedef struct spraycumul spraycumul;
+
+typedef struct {
+       u_int sprayarr_len;
+       char *sprayarr_val;
+} sprayarr;
+
+#define SPRAYPROG 100012
+#define SPRAYVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define SPRAYPROC_SPRAY 1
+extern  void * sprayproc_spray_1(sprayarr *, CLIENT *);
+extern  void * sprayproc_spray_1_svc(sprayarr *, struct svc_req *);
+#define SPRAYPROC_GET 2
+extern  spraycumul * sprayproc_get_1(void *, CLIENT *);
+extern  spraycumul * sprayproc_get_1_svc(void *, struct svc_req *);
+#define SPRAYPROC_CLEAR 3
+extern  void * sprayproc_clear_1(void *, CLIENT *);
+extern  void * sprayproc_clear_1_svc(void *, struct svc_req *);
+extern int sprayprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define SPRAYPROC_SPRAY 1
+extern  void * sprayproc_spray_1();
+extern  void * sprayproc_spray_1_svc();
+#define SPRAYPROC_GET 2
+extern  spraycumul * sprayproc_get_1();
+extern  spraycumul * sprayproc_get_1_svc();
+#define SPRAYPROC_CLEAR 3
+extern  void * sprayproc_clear_1();
+extern  void * sprayproc_clear_1_svc();
+extern int sprayprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_spraytimeval (XDR *, spraytimeval*);
+extern  bool_t xdr_spraycumul (XDR *, spraycumul*);
+extern  bool_t xdr_sprayarr (XDR *, sprayarr*);
+
+#else /* K&R C */
+extern bool_t xdr_spraytimeval ();
+extern bool_t xdr_spraycumul ();
+extern bool_t xdr_sprayarr ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_SPRAY_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/spray.x b/lib/libdss-include/rpcsvc/spray.x
new file mode 100644 (file)
index 0000000..68b7c48
--- /dev/null
@@ -0,0 +1,84 @@
+/* @(#)spray.x 2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Spray a server with packets
+ * Useful for testing flakiness of network interfaces
+ */
+
+const SPRAYMAX = 8845; /* max amount can spray */
+
+/*
+ * GMT since 0:00, 1 January 1970
+ */
+struct spraytimeval {
+       unsigned int sec;
+       unsigned int usec;
+};
+
+/*
+ * spray statistics
+ */
+struct spraycumul {
+       unsigned int counter;
+       spraytimeval clock;
+};
+
+/*
+ * spray data
+ */
+typedef opaque sprayarr<SPRAYMAX>;
+
+program SPRAYPROG {
+       version SPRAYVERS {
+               /*
+                * Just throw away the data and increment the counter
+                * This call never returns, so the client should always
+                * time it out.
+                */
+               void
+               SPRAYPROC_SPRAY(sprayarr) = 1;
+
+               /*
+                * Get the value of the counter and elapsed time  since
+                * last CLEAR.
+                */
+               spraycumul
+               SPRAYPROC_GET(void) = 2;
+
+               /*
+                * Clear the counter and reset the elapsed time
+                */
+               void
+               SPRAYPROC_CLEAR(void) = 3;
+       } = 1;
+} = 100012;
diff --git a/lib/libdss-include/rpcsvc/yp.h b/lib/libdss-include/rpcsvc/yp.h
new file mode 100644 (file)
index 0000000..968b74c
--- /dev/null
@@ -0,0 +1,339 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __RPCSVC_YP_H__
+#define __RPCSVC_YP_H__
+
+#include <features.h>
+#include <rpc/rpc.h>
+
+#define YPMAXRECORD 1024
+#define YPMAXDOMAIN 64
+#define YPMAXMAP 64
+#define YPMAXPEER 64
+
+enum ypstat {
+       YP_TRUE = 1,
+       YP_NOMORE = 2,
+       YP_FALSE = 0,
+       YP_NOMAP = -1,
+       YP_NODOM = -2,
+       YP_NOKEY = -3,
+       YP_BADOP = -4,
+       YP_BADDB = -5,
+       YP_YPERR = -6,
+       YP_BADARGS = -7,
+       YP_VERS = -8,
+};
+typedef enum ypstat ypstat;
+
+enum ypxfrstat {
+       YPXFR_SUCC = 1,
+       YPXFR_AGE = 2,
+       YPXFR_NOMAP = -1,
+       YPXFR_NODOM = -2,
+       YPXFR_RSRC = -3,
+       YPXFR_RPC = -4,
+       YPXFR_MADDR = -5,
+       YPXFR_YPERR = -6,
+       YPXFR_BADARGS = -7,
+       YPXFR_DBM = -8,
+       YPXFR_FILE = -9,
+       YPXFR_SKEW = -10,
+       YPXFR_CLEAR = -11,
+       YPXFR_FORCE = -12,
+       YPXFR_XFRERR = -13,
+       YPXFR_REFUSED = -14,
+};
+typedef enum ypxfrstat ypxfrstat;
+
+typedef char *domainname;
+typedef char *mapname;
+typedef char *peername;
+
+typedef struct {
+  u_int keydat_len;
+  char *keydat_val;
+} keydat;
+
+typedef struct {
+  u_int valdat_len;
+  char *valdat_val;
+} valdat;
+
+struct ypmap_parms {
+  domainname domain;
+  mapname map;
+  u_int ordernum;
+  peername peer;
+};
+typedef struct ypmap_parms ypmap_parms;
+
+struct ypreq_key {
+  domainname domain;
+  mapname map;
+  keydat key;
+};
+typedef struct ypreq_key ypreq_key;
+
+struct ypreq_nokey {
+  domainname domain;
+  mapname map;
+};
+typedef struct ypreq_nokey ypreq_nokey;
+
+struct ypreq_xfr {
+  ypmap_parms map_parms;
+  u_int transid;
+  u_int prog;
+  u_int port;
+};
+typedef struct ypreq_xfr ypreq_xfr;
+
+struct ypresp_val {
+  ypstat stat;
+  valdat val;
+};
+typedef struct ypresp_val ypresp_val;
+
+struct ypresp_key_val {
+  ypstat stat;
+#ifdef STUPID_SUN_BUG
+  /* This is the form as distributed by Sun.  But even the Sun NIS
+     servers expect the values in the other order.  So their
+     implementation somehow must change the order internally.  We
+     don't want to follow this bad example since the user should be
+     able to use rpcgen on this file.  */
+  keydat key;
+  valdat val;
+#else
+  valdat val;
+  keydat key;
+#endif
+};
+typedef struct ypresp_key_val ypresp_key_val;
+
+struct ypresp_master {
+  ypstat stat;
+  peername peer;
+};
+typedef struct ypresp_master ypresp_master;
+
+struct ypresp_order {
+  ypstat stat;
+  u_int ordernum;
+};
+typedef struct ypresp_order ypresp_order;
+
+struct ypresp_all {
+  bool_t more;
+  union {
+    ypresp_key_val val;
+  } ypresp_all_u;
+};
+typedef struct ypresp_all ypresp_all;
+
+struct ypresp_xfr {
+  u_int transid;
+  ypxfrstat xfrstat;
+};
+typedef struct ypresp_xfr ypresp_xfr;
+
+struct ypmaplist {
+  mapname map;
+  struct ypmaplist *next;
+};
+typedef struct ypmaplist ypmaplist;
+
+struct ypresp_maplist {
+  ypstat stat;
+  ypmaplist *maps;
+};
+typedef struct ypresp_maplist ypresp_maplist;
+
+enum yppush_status {
+  YPPUSH_SUCC = 1,
+  YPPUSH_AGE = 2,
+  YPPUSH_NOMAP = -1,
+  YPPUSH_NODOM = -2,
+  YPPUSH_RSRC = -3,
+  YPPUSH_RPC = -4,
+  YPPUSH_MADDR = -5,
+  YPPUSH_YPERR = -6,
+  YPPUSH_BADARGS = -7,
+  YPPUSH_DBM = -8,
+  YPPUSH_FILE = -9,
+  YPPUSH_SKEW = -10,
+  YPPUSH_CLEAR = -11,
+  YPPUSH_FORCE = -12,
+  YPPUSH_XFRERR = -13,
+  YPPUSH_REFUSED = -14,
+};
+typedef enum yppush_status yppush_status;
+
+struct yppushresp_xfr {
+  u_int transid;
+  yppush_status status;
+};
+typedef struct yppushresp_xfr yppushresp_xfr;
+
+enum ypbind_resptype {
+  YPBIND_SUCC_VAL = 1,
+  YPBIND_FAIL_VAL = 2,
+};
+typedef enum ypbind_resptype ypbind_resptype;
+
+struct ypbind_binding {
+  char ypbind_binding_addr[4];
+  char ypbind_binding_port[2];
+};
+typedef struct ypbind_binding ypbind_binding;
+
+struct ypbind_resp {
+  ypbind_resptype ypbind_status;
+  union {
+    u_int ypbind_error;
+    ypbind_binding ypbind_bindinfo;
+  } ypbind_resp_u;
+};
+typedef struct ypbind_resp ypbind_resp;
+
+#define YPBIND_ERR_ERR 1
+#define YPBIND_ERR_NOSERV 2
+#define YPBIND_ERR_RESC 3
+
+struct ypbind_setdom {
+  domainname ypsetdom_domain;
+  ypbind_binding ypsetdom_binding;
+  u_int ypsetdom_vers;
+};
+typedef struct ypbind_setdom ypbind_setdom;
+
+__BEGIN_DECLS
+
+#define YPPROG 100004
+#define YPVERS 2
+
+#define YPPROC_NULL 0
+extern  void *ypproc_null_2 (void *, CLIENT *);
+extern  void *ypproc_null_2_svc (void *, struct svc_req *);
+#define YPPROC_DOMAIN 1
+extern  bool_t *ypproc_domain_2 (domainname *, CLIENT *);
+extern  bool_t *ypproc_domain_2_svc (domainname *, struct svc_req *);
+#define YPPROC_DOMAIN_NONACK 2
+extern  bool_t *ypproc_domain_nonack_2 (domainname *, CLIENT *);
+extern  bool_t *ypproc_domain_nonack_2_svc (domainname *, struct svc_req *);
+#define YPPROC_MATCH 3
+extern  ypresp_val *ypproc_match_2 (ypreq_key *, CLIENT *);
+extern  ypresp_val *ypproc_match_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_FIRST 4
+extern  ypresp_key_val *ypproc_first_2 (ypreq_key *, CLIENT *);
+extern  ypresp_key_val *ypproc_first_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_NEXT 5
+extern  ypresp_key_val *ypproc_next_2 (ypreq_key *, CLIENT *);
+extern  ypresp_key_val *ypproc_next_2_svc (ypreq_key *, struct svc_req *);
+#define YPPROC_XFR 6
+extern  ypresp_xfr *ypproc_xfr_2 (ypreq_xfr *, CLIENT *);
+extern  ypresp_xfr *ypproc_xfr_2_svc (ypreq_xfr *, struct svc_req *);
+#define YPPROC_CLEAR 7
+extern  void *ypproc_clear_2 (void *, CLIENT *);
+extern  void *ypproc_clear_2_svc (void *, struct svc_req *);
+#define YPPROC_ALL 8
+extern  ypresp_all *ypproc_all_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_all *ypproc_all_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_MASTER 9
+extern  ypresp_master *ypproc_master_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_master *ypproc_master_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_ORDER 10
+extern  ypresp_order *ypproc_order_2 (ypreq_nokey *, CLIENT *);
+extern  ypresp_order *ypproc_order_2_svc (ypreq_nokey *, struct svc_req *);
+#define YPPROC_MAPLIST 11
+extern  ypresp_maplist *ypproc_maplist_2 (domainname *, CLIENT *);
+extern  ypresp_maplist *ypproc_maplist_2_svc (domainname *, struct svc_req *);
+extern int ypprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+#define YPPUSH_XFRRESPPROG (0x40000000)
+#define YPPUSH_XFRRESPVERS 1
+
+#define YPPUSHPROC_NULL 0
+extern  void *yppushproc_null_1 (void *, CLIENT *);
+extern  void *yppushproc_null_1_svc (void *, struct svc_req *);
+#define YPPUSHPROC_XFRRESP 1
+extern  void *yppushproc_xfrresp_1 (yppushresp_xfr *, CLIENT *);
+extern  void *yppushproc_xfrresp_1_svc (yppushresp_xfr *, struct svc_req *);
+extern int yppush_xfrrespprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+#define YPBINDPROG 100007
+#define YPBINDVERS 2
+
+#define YPBINDPROC_NULL 0
+extern  void *ypbindproc_null_2 (void *, CLIENT *);
+extern  void *ypbindproc_null_2_svc (void *, struct svc_req *);
+#define YPBINDPROC_DOMAIN 1
+extern  ypbind_resp *ypbindproc_domain_2 (domainname *, CLIENT *);
+extern  ypbind_resp *ypbindproc_domain_2_svc (domainname *, struct svc_req *);
+#define YPBINDPROC_SETDOM 2
+extern  void *ypbindproc_setdom_2 (ypbind_setdom *, CLIENT *);
+extern  void *ypbindproc_setdom_2_svc (ypbind_setdom *, struct svc_req *);
+extern int ypbindprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+
+extern  bool_t xdr_ypstat (XDR *, ypstat*);
+extern  bool_t xdr_ypxfrstat (XDR *, ypxfrstat*);
+extern  bool_t xdr_domainname (XDR *, domainname*);
+extern  bool_t xdr_mapname (XDR *, mapname*);
+extern  bool_t xdr_peername (XDR *, peername*);
+extern  bool_t xdr_keydat (XDR *, keydat*);
+extern  bool_t xdr_valdat (XDR *, valdat*);
+extern  bool_t xdr_ypmap_parms (XDR *, ypmap_parms*);
+extern  bool_t xdr_ypreq_key (XDR *, ypreq_key*);
+extern  bool_t xdr_ypreq_nokey (XDR *, ypreq_nokey*);
+extern  bool_t xdr_ypreq_xfr (XDR *, ypreq_xfr*);
+extern  bool_t xdr_ypresp_val (XDR *, ypresp_val*);
+extern  bool_t xdr_ypresp_key_val (XDR *, ypresp_key_val*);
+extern  bool_t xdr_ypresp_master (XDR *, ypresp_master*);
+extern  bool_t xdr_ypresp_order (XDR *, ypresp_order*);
+extern  bool_t xdr_ypresp_all (XDR *, ypresp_all*);
+extern  bool_t xdr_ypresp_xfr (XDR *, ypresp_xfr*);
+extern  bool_t xdr_ypmaplist (XDR *, ypmaplist*);
+extern  bool_t xdr_ypresp_maplist (XDR *, ypresp_maplist*);
+extern  bool_t xdr_yppush_status (XDR *, yppush_status*);
+extern  bool_t xdr_yppushresp_xfr (XDR *, yppushresp_xfr*);
+extern  bool_t xdr_ypbind_resptype (XDR *, ypbind_resptype*);
+extern  bool_t xdr_ypbind_binding (XDR *, ypbind_binding*);
+extern  bool_t xdr_ypbind_resp (XDR *, ypbind_resp*);
+extern  bool_t xdr_ypbind_setdom (XDR *, ypbind_setdom*);
+
+__END_DECLS
+
+#endif /* !__RPCSVC_YP_H__ */
diff --git a/lib/libdss-include/rpcsvc/yp.x b/lib/libdss-include/rpcsvc/yp.x
new file mode 100644 (file)
index 0000000..269ae6f
--- /dev/null
@@ -0,0 +1,311 @@
+/* @(#)yp.x    2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Protocol description file for the Yellow Pages Service
+ */
+
+const YPMAXRECORD = 1024;
+const YPMAXDOMAIN = 64;
+const YPMAXMAP = 64;
+const YPMAXPEER = 64;
+
+
+enum ypstat {
+       YP_TRUE         =  1,
+       YP_NOMORE       =  2,
+       YP_FALSE        =  0,
+       YP_NOMAP        = -1,
+       YP_NODOM        = -2,
+       YP_NOKEY        = -3,
+       YP_BADOP        = -4,
+       YP_BADDB        = -5,
+       YP_YPERR        = -6,
+       YP_BADARGS      = -7,
+       YP_VERS         = -8
+};
+
+
+enum ypxfrstat {
+       YPXFR_SUCC      =  1,
+       YPXFR_AGE       =  2,
+       YPXFR_NOMAP     = -1,
+       YPXFR_NODOM     = -2,
+       YPXFR_RSRC      = -3,
+       YPXFR_RPC       = -4,
+       YPXFR_MADDR     = -5,
+       YPXFR_YPERR     = -6,
+       YPXFR_BADARGS   = -7,
+       YPXFR_DBM       = -8,
+       YPXFR_FILE      = -9,
+       YPXFR_SKEW      = -10,
+       YPXFR_CLEAR     = -11,
+       YPXFR_FORCE     = -12,
+       YPXFR_XFRERR    = -13,
+       YPXFR_REFUSED   = -14
+};
+
+
+typedef string domainname<YPMAXDOMAIN>;
+typedef string mapname<YPMAXMAP>;
+typedef string peername<YPMAXPEER>;
+typedef opaque keydat<YPMAXRECORD>;
+typedef opaque valdat<YPMAXRECORD>;
+
+
+struct ypmap_parms {
+       domainname domain;
+       mapname map;
+       unsigned int ordernum;
+       peername peer;
+};
+
+struct ypreq_key {
+       domainname domain;
+       mapname map;
+       keydat key;
+};
+
+struct ypreq_nokey {
+       domainname domain;
+       mapname map;
+};
+
+struct ypreq_xfr {
+       ypmap_parms map_parms;
+       unsigned int transid;
+       unsigned int prog;
+       unsigned int port;
+};
+
+
+struct ypresp_val {
+       ypstat stat;
+       valdat val;
+};
+
+struct ypresp_key_val {
+       ypstat stat;
+#ifdef STUPID_SUN_BUG
+       /* This is the form as distributed by Sun.  But even the Sun NIS
+          servers expect the values in the other order.  So their
+          implementation somehow must change the order internally.  We
+          don't want to follow this bad example since the user should be
+          able to use rpcgen on this file.  */
+       keydat key;
+       valdat val;
+#else
+       valdat val;
+       keydat key;
+#endif
+};
+
+
+struct ypresp_master {
+       ypstat stat;
+       peername peer;
+};
+
+struct ypresp_order {
+       ypstat stat;
+       unsigned int ordernum;
+};
+
+union ypresp_all switch (bool more) {
+case TRUE:
+       ypresp_key_val val;
+case FALSE:
+       void;
+};
+
+struct ypresp_xfr {
+       unsigned int transid;
+       ypxfrstat xfrstat;
+};
+
+struct ypmaplist {
+       mapname map;
+       ypmaplist *next;
+};
+
+struct ypresp_maplist {
+       ypstat stat;
+       ypmaplist *maps;
+};
+
+enum yppush_status {
+       YPPUSH_SUCC     =  1,   /* Success */
+       YPPUSH_AGE      =  2,   /* Master's version not newer */
+       YPPUSH_NOMAP    = -1,   /* Can't find server for map */
+       YPPUSH_NODOM    = -2,   /* Domain not supported */
+       YPPUSH_RSRC     = -3,   /* Local resource alloc failure */
+       YPPUSH_RPC      = -4,   /* RPC failure talking to server */
+       YPPUSH_MADDR    = -5,   /* Can't get master address */
+       YPPUSH_YPERR    = -6,   /* YP server/map db error */
+       YPPUSH_BADARGS  = -7,   /* Request arguments bad */
+       YPPUSH_DBM      = -8,   /* Local dbm operation failed */
+       YPPUSH_FILE     = -9,   /* Local file I/O operation failed */
+       YPPUSH_SKEW     = -10,  /* Map version skew during transfer */
+       YPPUSH_CLEAR    = -11,  /* Can't send "Clear" req to local ypserv */
+       YPPUSH_FORCE    = -12,  /* No local order number in map  use -f flag. */
+       YPPUSH_XFRERR   = -13,  /* ypxfr error */
+       YPPUSH_REFUSED  = -14   /* Transfer request refused by ypserv */
+};
+
+struct yppushresp_xfr {
+       unsigned transid;
+       yppush_status status;
+};
+
+/*
+ * Response structure and overall result status codes.  Success and failure
+ * represent two separate response message types.
+ */
+
+enum ypbind_resptype {
+       YPBIND_SUCC_VAL = 1,
+       YPBIND_FAIL_VAL = 2
+};
+
+struct ypbind_binding {
+    opaque ypbind_binding_addr[4]; /* In network order */
+    opaque ypbind_binding_port[2]; /* In network order */
+};
+
+union ypbind_resp switch (ypbind_resptype ypbind_status) {
+case YPBIND_FAIL_VAL:
+       unsigned ypbind_error;
+case YPBIND_SUCC_VAL:
+       ypbind_binding ypbind_bindinfo;
+};
+
+/* Detailed failure reason codes for response field ypbind_error*/
+
+const YPBIND_ERR_ERR    = 1;   /* Internal error */
+const YPBIND_ERR_NOSERV = 2;   /* No bound server for passed domain */
+const YPBIND_ERR_RESC   = 3;   /* System resource allocation failure */
+
+
+/*
+ * Request data structure for ypbind "Set domain" procedure.
+ */
+struct ypbind_setdom {
+       domainname ypsetdom_domain;
+       ypbind_binding ypsetdom_binding;
+       unsigned ypsetdom_vers;
+};
+
+
+/*
+ * YP access protocol
+ */
+program YPPROG {
+       version YPVERS {
+               void
+               YPPROC_NULL(void) = 0;
+
+               bool
+               YPPROC_DOMAIN(domainname) = 1;
+
+               bool
+               YPPROC_DOMAIN_NONACK(domainname) = 2;
+
+               ypresp_val
+               YPPROC_MATCH(ypreq_key) = 3;
+
+               ypresp_key_val
+               YPPROC_FIRST(ypreq_key) = 4;
+
+               ypresp_key_val
+               YPPROC_NEXT(ypreq_key) = 5;
+
+               ypresp_xfr
+               YPPROC_XFR(ypreq_xfr) = 6;
+
+               void
+               YPPROC_CLEAR(void) = 7;
+
+               ypresp_all
+               YPPROC_ALL(ypreq_nokey) = 8;
+
+               ypresp_master
+               YPPROC_MASTER(ypreq_nokey) = 9;
+
+               ypresp_order
+               YPPROC_ORDER(ypreq_nokey) = 10;
+
+               ypresp_maplist
+               YPPROC_MAPLIST(domainname) = 11;
+       } = 2;
+} = 100004;
+
+
+/*
+ * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
+ */
+program YPPUSH_XFRRESPPROG {
+       version YPPUSH_XFRRESPVERS {
+               void
+               YPPUSHPROC_NULL(void) = 0;
+
+#ifdef STUPID_SUN_BUG
+               /* This is the form as distributed by Sun.  But even
+                  the Sun NIS servers expect the values in the other
+                  order.  So their implementation somehow must change
+                  the order internally.  We don't want to follow this
+                  bad example since the user should be able to use
+                  rpcgen on this file.  */
+               yppushresp_xfr
+               YPPUSHPROC_XFRRESP(void) = 1;
+#else
+               void
+               YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
+#endif
+       } = 1;
+} = 0x40000000;        /* transient: could be anything up to 0x5fffffff */
+
+/*
+ * YP binding protocol
+ */
+program YPBINDPROG {
+       version YPBINDVERS {
+               void
+               YPBINDPROC_NULL(void) = 0;
+
+               ypbind_resp
+               YPBINDPROC_DOMAIN(domainname) = 1;
+
+               void
+               YPBINDPROC_SETDOM(ypbind_setdom) = 2;
+       } = 2;
+} = 100007;
diff --git a/lib/libdss-include/rpcsvc/yp_prot.h b/lib/libdss-include/rpcsvc/yp_prot.h
new file mode 100644 (file)
index 0000000..ae0db36
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+ * This file contains symbols and structures defining the rpc protocol
+ * between the NIS clients and the NIS servers.  The servers
+ * are the NIS database servers, and the NIS binders.
+ */
+
+#ifndef _RPCSVC_YP_PROT_H
+#define _RPCSVC_YP_PROT_H
+
+#include <features.h>
+
+#include <rpc/rpc.h>
+#include <rpcsvc/ypclnt.h>
+
+__BEGIN_DECLS
+
+/*
+ * The following procedures are supported by the protocol:
+ *
+ * YPPROC_NULL() returns () takes nothing, returns nothing.  This indicates
+ * that the NIS server is alive.
+ *
+ * YPPROC_DOMAIN (char *) returns (bool_t) TRUE.  Indicates that the
+ * responding NIS server does serve the named domain; FALSE indicates no
+ * support.
+ *
+ * YPPROC_DOMAIN_NONACK (char *) returns (TRUE) if the NIS server does serve
+ * the named domain, otherwise does not return.  Used in the broadcast case.
+ *
+ * YPPROC_MATCH (struct ypreq_key) returns (struct ypresp_val).  Returns the
+ * right-hand value for a passed left-hand key, within a named map and
+ * domain.
+ *
+ * YPPROC_FIRST (struct ypreq_nokey) returns (struct ypresp_key_val).
+ * Returns the first key-value pair from a named domain and map.
+ *
+ * YPPROC_NEXT (struct ypreq_key) returns (struct ypresp_key_val).  Returns
+ * the key-value pair following a passed key-value pair within a named
+ * domain and map.
+ *
+ * YPPROC_XFR (struct ypreq_xfr) returns nothing.  Indicates to a server that
+ * a map should be updated.
+ *
+ * YPPROC_CLEAR        takes nothing, returns nothing.  Instructs a NIS server to
+ * close the current map, so that old versions of the disk file don't get
+ * held open.
+ *
+ * YPPROC_ALL (struct ypreq_nokey), returns
+ *     union switch (bool_t more) {
+ *             TRUE:   (struct ypresp_key_val);
+ *             FALSE:  (struct) {};
+ *     }
+ *
+ * YPPROC_MASTER (struct ypreq_nokey), returns (ypresp_master)
+ *
+ * YPPROC_ORDER (struct ypreq_nokey), returns (ypresp_order)
+ *
+ * YPPROC_MAPLIST (char *), returns (struct ypmaplist *)
+ */
+
+/* Program and version symbols, magic numbers */
+
+#define YPPROG         100004
+#define YPVERS         2
+#define YPVERS_ORIG    1
+#define YPMAXRECORD    1024
+#define YPMAXDOMAIN    64 /* XXX orig. yp_prot.h defines 256 */
+#define YPMAXMAP       64
+#define YPMAXPEER      64 /* XXX orig. yp_prot.h defines 256 */
+
+/* byte size of a large NIS packet */
+#define YPMSGSZ                1600
+
+typedef struct {
+  u_int keydat_len;
+  char *keydat_val;
+} keydat_t;
+
+typedef struct {
+  u_int valdat_len;
+  char *valdat_val;
+} valdat_t;
+
+struct ypmap_parms {
+  char *domain;                        /* Null string means not available */
+  char *map;                   /* Null string means not available */
+  unsigned int ordernum;       /* 0 means not available */
+  char *owner;                 /* Null string means not available */
+};
+
+/*
+ * Request parameter structures
+ */
+
+struct ypreq_key {
+  const char *domain;
+  const char *map;
+  keydat_t keydat;
+};
+
+struct ypreq_nokey {
+  char *domain;
+  char *map;
+};
+
+struct ypreq_xfr {
+  struct ypmap_parms map_parms;
+  u_int transid;
+  u_int proto;
+  u_int port;
+};
+
+#define ypxfr_domain map_parms.domain
+#define ypxfr_map map_parms.map
+#define ypxfr_ordernum map_parms.ordernum
+#define ypxfr_owner map_parms.owner
+
+/* Return status values */
+
+enum ypstat {
+  YP_TRUE = 1,         /* General purpose success code */
+#define YP_TRUE YP_TRUE
+  YP_NOMORE = 2,       /* No more entries in map */
+#define YP_NOMORE YP_NOMORE
+  YP_FALSE = 0,                /* General purpose failure code */
+#define YP_FALSE YP_FALSE
+  YP_NOMAP = -1,       /* No such map in domain */
+#define YP_NOMAP YP_NOMAP
+  YP_NODOM = -2,       /* Domain not supported */
+#define YP_NODOM YP_NODOM
+  YP_NOKEY = -3,       /* No such key in map */
+#define YP_NOKEY YP_NOKEY
+  YP_BADOP = -4,       /* Invalid operation */
+#define YP_BADOP YP_BADOP
+  YP_BADDB = -5,       /* Server data base is bad */
+#define YP_BADDB YP_BADDB
+  YP_YPERR = -6,       /* NIS server error */
+#define YP_YPERR YP_YPERR
+  YP_BADARGS = -7,     /* Request arguments bad */
+#define YP_BADARGS YP_BADARGS
+  YP_VERS = -8,                /* NIS server version mismatch - server can't supply
+                          requested service. */
+#define YP_VERS YP_VERS
+};
+
+/*
+ * Response parameter structures
+ */
+
+typedef enum ypstat ypstat;
+
+struct ypresp_val {
+  ypstat status;
+  valdat_t valdat;
+};
+
+struct ypresp_key_val {
+  ypstat status;
+#ifdef STUPID_SUN_BUG
+  /* This is the form as distributed by Sun.  But even the Sun NIS
+     servers expect the values in the other order.  So their
+     implementation somehow must change the order internally.  We
+     don't want to follow this bad example since the user should be
+     able to use rpcgen on this file.  */
+  keydat_t keydat;
+  valdat_t valdat;
+#else
+  valdat_t valdat;
+  keydat_t keydat;
+#endif
+};
+
+struct ypresp_master {
+  ypstat status;
+  char *master;
+};
+
+struct ypresp_order {
+  ypstat status;
+  u_int ordernum;
+};
+
+struct ypmaplist {
+  char *map;
+#define ypml_name map
+  struct ypmaplist *next;
+#define ypml_next next
+};
+
+struct ypresp_maplist {
+  ypstat status;
+  struct ypmaplist *list;
+};
+
+/*
+ * Procedure symbols.  YPPROC_NULL, YPPROC_DOMAIN, and YPPROC_DOMAIN_NONACK
+ * must keep the same values (0, 1, and 2) that they had in the first version
+ * of the protocol.
+ */
+
+#define YPPROC_NULL    0
+#define YPPROC_DOMAIN  1
+#define YPPROC_DOMAIN_NONACK 2
+#define YPPROC_MATCH   3
+#define YPPROC_FIRST   4
+#define YPPROC_NEXT    5
+#define YPPROC_XFR     6
+#define YPPROC_CLEAR   7
+#define YPPROC_ALL     8
+#define YPPROC_MASTER  9
+#define YPPROC_ORDER   10
+#define YPPROC_MAPLIST 11
+#define        YPPROC_NEWXFR   12
+
+/*
+ *             Protocol between clients and NIS binder servers
+ */
+
+/*
+ * The following procedures are supported by the protocol:
+ *
+ * YPBINDPROC_NULL() returns ()
+ *     takes nothing, returns nothing
+ *
+ * YPBINDPROC_DOMAIN takes (char *) returns (struct ypbind_resp)
+ *
+ * YPBINDPROC_SETDOM takes (struct ypbind_setdom) returns nothing
+ */
+
+/* Program and version symbols, magic numbers */
+
+#define YPBINDPROG             100007
+#define YPBINDVERS             2
+#define YPBINDVERS_ORIG                1
+
+/* Procedure symbols */
+
+#define YPBINDPROC_NULL                0
+#define YPBINDPROC_DOMAIN      1
+#define YPBINDPROC_SETDOM      2
+/*
+ * Response structure and overall result status codes.  Success and failure
+ * represent two separate response message types.
+ */
+
+enum ypbind_resptype {YPBIND_SUCC_VAL = 1, YPBIND_FAIL_VAL = 2};
+
+struct ypbind_binding {
+  struct in_addr ypbind_binding_addr;          /* In network order */
+  unsigned short int ypbind_binding_port;      /* In network order */
+};
+
+struct ypbind_resp {
+  enum ypbind_resptype ypbind_status;
+  union {
+    u_int ypbind_error;
+    struct ypbind_binding ypbind_bindinfo;
+  } ypbind_respbody;
+};
+
+
+/* Detailed failure reason codes for response field ypbind_error*/
+
+#define YPBIND_ERR_ERR 1               /* Internal error */
+#define YPBIND_ERR_NOSERV 2            /* No bound server for passed domain */
+#define YPBIND_ERR_RESC 3              /* System resource allocation failure */
+
+/*
+ * Request data structure for ypbind "Set domain" procedure.
+ */
+struct ypbind_setdom {
+  char *ypsetdom_domain;
+  struct ypbind_binding ypsetdom_binding;
+  u_int ypsetdom_vers;
+};
+#define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
+#define ypsetdom_port ypsetdom_binding.ypbind_binding_port
+
+/*
+ *             Protocol between clients (ypxfr, only) and yppush
+ *             yppush speaks a protocol in the transient range, which
+ *             is supplied to ypxfr as a command-line parameter when it
+ *             is activated by ypserv.
+ */
+#define YPPUSHVERS             1
+#define YPPUSHVERS_ORIG                1
+
+/* Procedure symbols */
+
+#define YPPUSHPROC_NULL                0
+#define YPPUSHPROC_XFRRESP     1
+
+/* Status values for yppushresp_xfr.status */
+
+enum yppush_status {
+  YPPUSH_SUCC = 1,             /* Success */
+#define YPPUSH_SUCC    YPPUSH_SUCC
+  YPPUSH_AGE = 2,              /* Master's version not newer */
+#define YPPUSH_AGE     YPPUSH_AGE
+  YPPUSH_NOMAP = -1,           /* Can't find server for map */
+#define YPPUSH_NOMAP   YPPUSH_NOMAP
+  YPPUSH_NODOM = -2,           /* Domain not supported */
+#define YPPUSH_NODOM   YPPUSH_NODOM
+  YPPUSH_RSRC = -3,            /* Local resouce alloc failure */
+#define YPPUSH_RSRC    YPPUSH_RSRC
+  YPPUSH_RPC = -4,             /* RPC failure talking to server */
+#define YPPUSH_RPC     YPPUSH_RPC
+  YPPUSH_MADDR = -5,           /* Can't get master address */
+#define YPPUSH_MADDR   YPPUSH_MADDR
+  YPPUSH_YPERR = -6,           /* NIS server/map db error */
+#define YPPUSH_YPERR   YPPUSH_YPERR
+  YPPUSH_BADARGS = -7,         /* Request arguments bad */
+#define YPPUSH_BADARGS         YPPUSH_BADARGS
+  YPPUSH_DBM = -8,             /* Local dbm operation failed */
+#define YPPUSH_DBM     YPPUSH_DBM
+  YPPUSH_FILE = -9,            /* Local file I/O operation failed */
+#define YPPUSH_FILE    YPPUSH_FILE
+  YPPUSH_SKEW = -10,           /* Map version skew during transfer */
+#define YPPUSH_SKEW    YPPUSH_SKEW
+  YPPUSH_CLEAR = -11,          /* Can't send "Clear" req to local ypserv */
+#define YPPUSH_CLEAR   YPPUSH_CLEAR
+  YPPUSH_FORCE = -12,          /* No local order number in map - use -f flag*/
+#define YPPUSH_FORCE   YPPUSH_FORCE
+  YPPUSH_XFRERR = -13,         /* ypxfr error */
+#define YPPUSH_XFRERR  YPPUSH_XFRERR
+  YPPUSH_REFUSED = -14,                /* Transfer request refused by ypserv */
+#define YPPUSH_REFUSED YPPUSH_REFUSED
+  YPPUSH_NOALIAS = -15         /* Alias not found for map or domain */
+#define        YPPUSH_NOALIAS  YPPUSH_NOALIAS
+};
+typedef enum yppush_status yppush_status;
+
+struct yppushresp_xfr {
+  u_int transid;
+  yppush_status status;
+};
+
+struct ypresp_all {
+  bool_t more;
+  union {
+    struct ypresp_key_val val;
+  } ypresp_all_u;
+};
+
+extern bool_t xdr_ypreq_key (XDR *__xdrs, struct ypreq_key * __objp);
+extern bool_t xdr_ypreq_nokey (XDR *__xdrs, struct ypreq_nokey * __objp);
+extern bool_t xdr_ypreq_xfr (XDR *__xdrs, struct ypreq_xfr * __objp);
+extern bool_t xdr_ypresp_val (XDR *__xdrs, struct ypresp_val * __objp);
+extern bool_t xdr_ypresp_key_val (XDR *__xdrs, struct ypresp_key_val * __objp);
+extern bool_t xdr_ypbind_resp (XDR *__xdrs, struct ypbind_resp * __objp);
+extern bool_t xdr_ypbind_setdom (XDR *__xdrs, struct ypbind_setdom * __objp);
+extern bool_t xdr_ypmap_parms (XDR *__xdrs, struct ypmap_parms * __objp);
+extern bool_t xdr_yppushresp_xfr (XDR *__xdrs, struct yppushresp_xfr * __objp);
+extern bool_t xdr_ypresp_order (XDR *__xdrs, struct ypresp_order  * __objp);
+extern bool_t xdr_ypresp_master (XDR *__xdrs, struct ypresp_master * __objp);
+extern bool_t xdr_ypall (XDR *__xdrs, struct ypall_callback * __objp);
+extern bool_t xdr_ypresp_maplist (XDR *__xdrs, struct ypresp_maplist * __objp);
+extern bool_t xdr_ypbind_binding (XDR *__xdrs, struct ypbind_binding * __objp);
+extern bool_t xdr_ypbind_resptype (XDR *__xdrs, enum ypbind_resptype * __objp);
+extern bool_t xdr_ypstat (XDR *__xdrs, enum ypbind_resptype * __objp);
+extern bool_t xdr_ypresp_all (XDR *__xdrs, struct ypresp_all  * __objp);
+extern bool_t xdr_domainname (XDR *__xdrs, char ** __objp);
+
+__END_DECLS
+
+#endif /* _RPCSVC_YP_PROT_H */
diff --git a/lib/libdss-include/rpcsvc/ypclnt.h b/lib/libdss-include/rpcsvc/ypclnt.h
new file mode 100644 (file)
index 0000000..4c64e23
--- /dev/null
@@ -0,0 +1,88 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef        __RPCSVC_YPCLNT_H__
+#define        __RPCSVC_YPCLNT_H__
+
+#include <features.h>
+
+/* Some defines */
+#define YPERR_SUCCESS  0               /* There is no error */
+#define        YPERR_BADARGS   1               /* Args to function are bad */
+#define        YPERR_RPC       2               /* RPC failure */
+#define        YPERR_DOMAIN    3               /* Can't bind to a server with this domain */
+#define        YPERR_MAP       4               /* No such map in server's domain */
+#define        YPERR_KEY       5               /* No such key in map */
+#define        YPERR_YPERR     6               /* Internal yp server or client error */
+#define        YPERR_RESRC     7               /* Local resource allocation failure */
+#define        YPERR_NOMORE    8               /* No more records in map database */
+#define        YPERR_PMAP      9               /* Can't communicate with portmapper */
+#define        YPERR_YPBIND    10              /* Can't communicate with ypbind */
+#define        YPERR_YPSERV    11              /* Can't communicate with ypserv */
+#define        YPERR_NODOM     12              /* Local domain name not set */
+#define        YPERR_BADDB     13              /* yp data base is bad */
+#define        YPERR_VERS      14              /* YP version mismatch */
+#define        YPERR_ACCESS    15              /* Access violation */
+#define        YPERR_BUSY      16              /* Database is busy */
+
+/* Types of update operations */
+#define        YPOP_CHANGE     1               /* Change, do not add */
+#define        YPOP_INSERT     2               /* Add, do not change */
+#define        YPOP_DELETE     3               /* Delete this entry */
+#define        YPOP_STORE      4               /* Add, or change */
+
+__BEGIN_DECLS
+
+/* struct ypall_callback * is the arg which must be passed to yp_all.  */
+struct ypall_callback
+  {
+    int (*foreach) (int __status, char *__key, int __keylen,
+                   char *__val, int __vallen, char *__data);
+    char *data;
+  };
+
+/* External NIS client function references.  */
+extern int yp_bind (const char *) __THROW;
+extern void yp_unbind (const char *) __THROW;
+extern int yp_get_default_domain (char **) __THROW;
+extern int yp_match (const char *, const char *, const char *,
+                    const int, char **, int *) __THROW;
+extern int yp_first (const char *, const char *, char **,
+                    int *, char **, int *) __THROW;
+extern int yp_next (const char *, const char *, const char *,
+                   const int, char **, int *, char **, int *) __THROW;
+extern int yp_master (const char *, const char *, char **) __THROW;
+extern int yp_order (const char *, const char *, unsigned int *) __THROW;
+extern int yp_all (const char *, const char *,
+                  const struct ypall_callback *) __THROW;
+extern const char *yperr_string (const int) __THROW;
+extern const char *ypbinderr_string (const int) __THROW;
+extern int ypprot_err (const int) __THROW;
+extern int yp_update (char *, char *, unsigned int,  char *,
+                     int, char *, int) __THROW;
+#if 0
+extern int yp_maplist (const char *, struct ypmaplist **) __THROW;
+#endif
+
+/* This functions exists only under BSD and Linux systems.  */
+extern int __yp_check (char **) __THROW;
+
+__END_DECLS
+
+#endif /* __RPCSVC_YPCLNT_H__ */
diff --git a/lib/libdss-include/rpcsvc/yppasswd.h b/lib/libdss-include/rpcsvc/yppasswd.h
new file mode 100644 (file)
index 0000000..adbe9b3
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _YPPASSWD_H_RPCGEN
+#define _YPPASSWD_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct passwd {
+       char *pw_name;
+       char *pw_passwd;
+       int pw_uid;
+       int pw_gid;
+       char *pw_gecos;
+       char *pw_dir;
+       char *pw_shell;
+};
+typedef struct passwd passwd;
+
+struct yppasswd {
+       char *oldpass;
+       passwd newpw;
+};
+typedef struct yppasswd yppasswd;
+
+#define YPPASSWDPROG 100009
+#define YPPASSWDVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define YPPASSWDPROC_UPDATE 1
+extern  int * yppasswdproc_update_1(yppasswd *, CLIENT *);
+extern  int * yppasswdproc_update_1_svc(yppasswd *, struct svc_req *);
+extern int yppasswdprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define YPPASSWDPROC_UPDATE 1
+extern  int * yppasswdproc_update_1();
+extern  int * yppasswdproc_update_1_svc();
+extern int yppasswdprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_passwd (XDR *, passwd*);
+extern  bool_t xdr_yppasswd (XDR *, yppasswd*);
+
+#else /* K&R C */
+extern bool_t xdr_passwd ();
+extern bool_t xdr_yppasswd ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_YPPASSWD_H_RPCGEN */
diff --git a/lib/libdss-include/rpcsvc/yppasswd.x b/lib/libdss-include/rpcsvc/yppasswd.x
new file mode 100644 (file)
index 0000000..34e3efe
--- /dev/null
@@ -0,0 +1,61 @@
+/* @(#)yppasswd.x      2.1 88/08/01 4.0 RPCSRC */
+
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * YP password update protocol
+ * Requires unix authentication
+ */
+program YPPASSWDPROG {
+       version YPPASSWDVERS {
+               /*
+                * Update my passwd entry
+                */
+               int
+               YPPASSWDPROC_UPDATE(yppasswd) = 1;
+       } = 1;
+} = 100009;
+
+
+struct passwd {
+       string pw_name<>;       /* username */
+       string pw_passwd<>;     /* encrypted password */
+       int pw_uid;             /* user id */
+       int pw_gid;             /* group id */
+       string pw_gecos<>;      /* in real life name */
+       string pw_dir<>;        /* home directory */
+       string pw_shell<>;      /* default shell */
+};
+
+struct yppasswd {
+       string oldpass<>;       /* unencrypted old password */
+       passwd newpw;           /* new passwd entry */
+};
diff --git a/lib/libdss-include/rpcsvc/ypupd.h b/lib/libdss-include/rpcsvc/ypupd.h
new file mode 100644 (file)
index 0000000..d07fd4d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, Oracle America, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* from @(#)ypupdate_prot.x    1.3 91/03/11 TIRPC 1.0 */
+
+#ifndef __RPCSVC_YPUPD_H__
+#define __RPCSVC_YPUPD_H__
+
+#include <features.h>
+
+#include <rpc/rpc.h>
+
+#define MAXMAPNAMELEN 255
+#define MAXYPDATALEN 1023
+#define MAXERRMSGLEN 255
+
+__BEGIN_DECLS
+
+typedef struct {
+       u_int yp_buf_len;
+       char *yp_buf_val;
+} yp_buf;
+
+extern  bool_t xdr_yp_buf (XDR *, yp_buf*);
+
+struct ypupdate_args {
+       char *mapname;
+       yp_buf key;
+       yp_buf datum;
+};
+typedef struct ypupdate_args ypupdate_args;
+
+extern  bool_t xdr_ypupdate_args (XDR *, ypupdate_args*);
+
+struct ypdelete_args {
+       char *mapname;
+       yp_buf key;
+};
+typedef struct ypdelete_args ypdelete_args;
+
+extern  bool_t xdr_ypdelete_args (XDR *, ypdelete_args*);
+
+#define YPU_PROG 100028
+#define YPU_VERS 1
+
+#define YPU_CHANGE 1
+extern  u_int * ypu_change_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_change_1_svc (ypupdate_args *, struct svc_req *);
+#define YPU_INSERT 2
+extern  u_int * ypu_insert_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_insert_1_svc (ypupdate_args *, struct svc_req *);
+#define YPU_DELETE 3
+extern  u_int * ypu_delete_1 (ypdelete_args *, CLIENT *);
+extern  u_int * ypu_delete_1_svc (ypdelete_args *, struct svc_req *);
+#define YPU_STORE 4
+extern  u_int * ypu_store_1 (ypupdate_args *, CLIENT *);
+extern  u_int * ypu_store_1_svc (ypupdate_args *, struct svc_req *);
+
+__END_DECLS
+
+#endif /* !__RPCSVC_YPUPD_H__ */
diff --git a/lib/libdss-include/sched.h b/lib/libdss-include/sched.h
new file mode 100644 (file)
index 0000000..253c963
--- /dev/null
@@ -0,0 +1,128 @@
+/* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SCHED_H
+#define        _SCHED_H        1
+
+#include <features.h>
+
+/* Get type definitions.  */
+#include <bits/types.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+#ifdef __USE_XOPEN2K
+# define __need_time_t
+# define __need_timespec
+#endif
+#include <time.h>
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+
+/* Get system specific constant and data structure definitions.  */
+#include <bits/sched.h>
+/* Define the real names for the elements of `struct sched_param'.  */
+#define sched_priority __sched_priority
+
+
+__BEGIN_DECLS
+
+/* Set scheduling parameters for a process.  */
+extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
+     __THROW;
+
+/* Retrieve scheduling parameters for a particular process.  */
+extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __THROW;
+
+/* Set scheduling algorithm and/or parameters for a process.  */
+extern int sched_setscheduler (__pid_t __pid, int __policy,
+                              const struct sched_param *__param) __THROW;
+
+/* Retrieve scheduling algorithm for a particular purpose.  */
+extern int sched_getscheduler (__pid_t __pid) __THROW;
+
+/* Yield the processor.  */
+extern int sched_yield (void) __THROW;
+
+/* Get maximum priority value for a scheduler.  */
+extern int sched_get_priority_max (int __algorithm) __THROW;
+
+/* Get minimum priority value for a scheduler.  */
+extern int sched_get_priority_min (int __algorithm) __THROW;
+
+/* Get the SCHED_RR interval for the named process.  */
+extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
+
+
+#ifdef __USE_GNU
+/* Access macros for `cpu_set'.  */
+# define CPU_SETSIZE __CPU_SETSIZE
+# define CPU_SET(cpu, cpusetp)  __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp)
+# define CPU_CLR(cpu, cpusetp)  __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp)
+# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), \
+                                               cpusetp)
+# define CPU_ZERO(cpusetp)      __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp)
+# define CPU_COUNT(cpusetp)     __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp)
+
+# define CPU_SET_S(cpu, setsize, cpusetp)   __CPU_SET_S (cpu, setsize, cpusetp)
+# define CPU_CLR_S(cpu, setsize, cpusetp)   __CPU_CLR_S (cpu, setsize, cpusetp)
+# define CPU_ISSET_S(cpu, setsize, cpusetp) __CPU_ISSET_S (cpu, setsize, \
+                                                          cpusetp)
+# define CPU_ZERO_S(setsize, cpusetp)      __CPU_ZERO_S (setsize, cpusetp)
+# define CPU_COUNT_S(setsize, cpusetp)     __CPU_COUNT_S (setsize, cpusetp)
+
+# define CPU_EQUAL(cpusetp1, cpusetp2) \
+  __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)
+# define CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
+  __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2)
+
+# define CPU_AND(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &)
+# define CPU_OR(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)
+# define CPU_XOR(destset, srcset1, srcset2) \
+  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^)
+# define CPU_AND_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, &)
+# define CPU_OR_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, |)
+# define CPU_XOR_S(setsize, destset, srcset1, srcset2) \
+  __CPU_OP_S (setsize, destset, srcset1, srcset2, ^)
+
+# define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count)
+# define CPU_ALLOC(count) __CPU_ALLOC (count)
+# define CPU_FREE(cpuset) __CPU_FREE (cpuset)
+
+
+/* Set the CPU affinity for a task */
+extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
+                             const cpu_set_t *__cpuset) __THROW;
+
+/* Get the CPU affinity for a task */
+extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
+                             cpu_set_t *__cpuset) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sched.h */
diff --git a/lib/libdss-include/scsi/scsi.h b/lib/libdss-include/scsi/scsi.h
new file mode 100644 (file)
index 0000000..ecee08c
--- /dev/null
@@ -0,0 +1,225 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * This header file contains public constants and structures used by
+ * the scsi code for linux.
+ */
+
+#ifndef _SCSI_SCSI_H
+#define _SCSI_SCSI_H   1
+
+#include <features.h>
+
+/*
+ *      SCSI opcodes
+ */
+
+#define TEST_UNIT_READY       0x00
+#define REZERO_UNIT           0x01
+#define REQUEST_SENSE         0x03
+#define FORMAT_UNIT           0x04
+#define READ_BLOCK_LIMITS     0x05
+#define REASSIGN_BLOCKS       0x07
+#define READ_6                0x08
+#define WRITE_6               0x0a
+#define SEEK_6                0x0b
+#define READ_REVERSE          0x0f
+#define WRITE_FILEMARKS       0x10
+#define SPACE                 0x11
+#define INQUIRY               0x12
+#define RECOVER_BUFFERED_DATA 0x14
+#define MODE_SELECT           0x15
+#define RESERVE               0x16
+#define RELEASE               0x17
+#define COPY                  0x18
+#define ERASE                 0x19
+#define MODE_SENSE            0x1a
+#define START_STOP            0x1b
+#define RECEIVE_DIAGNOSTIC    0x1c
+#define SEND_DIAGNOSTIC       0x1d
+#define ALLOW_MEDIUM_REMOVAL  0x1e
+
+#define SET_WINDOW            0x24
+#define READ_CAPACITY         0x25
+#define READ_10               0x28
+#define WRITE_10              0x2a
+#define SEEK_10               0x2b
+#define WRITE_VERIFY          0x2e
+#define VERIFY                0x2f
+#define SEARCH_HIGH           0x30
+#define SEARCH_EQUAL          0x31
+#define SEARCH_LOW            0x32
+#define SET_LIMITS            0x33
+#define PRE_FETCH             0x34
+#define READ_POSITION         0x34
+#define SYNCHRONIZE_CACHE     0x35
+#define LOCK_UNLOCK_CACHE     0x36
+#define READ_DEFECT_DATA      0x37
+#define MEDIUM_SCAN           0x38
+#define COMPARE               0x39
+#define COPY_VERIFY           0x3a
+#define WRITE_BUFFER          0x3b
+#define READ_BUFFER           0x3c
+#define UPDATE_BLOCK          0x3d
+#define READ_LONG             0x3e
+#define WRITE_LONG            0x3f
+#define CHANGE_DEFINITION     0x40
+#define WRITE_SAME            0x41
+#define READ_TOC              0x43
+#define LOG_SELECT            0x4c
+#define LOG_SENSE             0x4d
+#define MODE_SELECT_10        0x55
+#define RESERVE_10            0x56
+#define RELEASE_10            0x57
+#define MODE_SENSE_10         0x5a
+#define PERSISTENT_RESERVE_IN 0x5e
+#define PERSISTENT_RESERVE_OUT 0x5f
+#define MOVE_MEDIUM           0xa5
+#define READ_12               0xa8
+#define WRITE_12              0xaa
+#define WRITE_VERIFY_12       0xae
+#define SEARCH_HIGH_12        0xb0
+#define SEARCH_EQUAL_12       0xb1
+#define SEARCH_LOW_12         0xb2
+#define READ_ELEMENT_STATUS   0xb8
+#define SEND_VOLUME_TAG       0xb6
+#define WRITE_LONG_2          0xea
+
+/*
+ *  Status codes
+ */
+
+#define GOOD                 0x00
+#define CHECK_CONDITION      0x01
+#define CONDITION_GOOD       0x02
+#define BUSY                 0x04
+#define INTERMEDIATE_GOOD    0x08
+#define INTERMEDIATE_C_GOOD  0x0a
+#define RESERVATION_CONFLICT 0x0c
+#define COMMAND_TERMINATED   0x11
+#define QUEUE_FULL           0x14
+
+#define STATUS_MASK          0x3e
+
+/*
+ *  SENSE KEYS
+ */
+
+#define NO_SENSE            0x00
+#define RECOVERED_ERROR     0x01
+#define NOT_READY           0x02
+#define MEDIUM_ERROR        0x03
+#define HARDWARE_ERROR      0x04
+#define ILLEGAL_REQUEST     0x05
+#define UNIT_ATTENTION      0x06
+#define DATA_PROTECT        0x07
+#define BLANK_CHECK         0x08
+#define COPY_ABORTED        0x0a
+#define ABORTED_COMMAND     0x0b
+#define VOLUME_OVERFLOW     0x0d
+#define MISCOMPARE          0x0e
+
+
+/*
+ *  DEVICE TYPES
+ */
+
+#define TYPE_DISK           0x00
+#define TYPE_TAPE           0x01
+#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
+#define TYPE_WORM           0x04    /* Treated as ROM by our system */
+#define TYPE_ROM            0x05
+#define TYPE_SCANNER        0x06
+#define TYPE_MOD            0x07    /* Magneto-optical disk -
+                                    * - treated as TYPE_DISK */
+#define TYPE_MEDIUM_CHANGER 0x08
+#define TYPE_ENCLOSURE     0x0d    /* Enclosure Services Device */
+#define TYPE_NO_LUN         0x7f
+
+/*
+ * standard mode-select header prepended to all mode-select commands
+ *
+ * moved here from cdrom.h -- kraxel
+ */
+
+struct ccs_modesel_head
+  {
+    unsigned char _r1;                 /* reserved.  */
+    unsigned char medium;              /* device-specific medium type.  */
+    unsigned char _r2;                 /* reserved.  */
+    unsigned char block_desc_length;   /* block descriptor length.  */
+    unsigned char density;             /* device-specific density code.  */
+    unsigned char number_blocks_hi;    /* number of blocks in this block
+                                          desc.  */
+    unsigned char number_blocks_med;
+    unsigned char number_blocks_lo;
+    unsigned char _r3;
+    unsigned char block_length_hi;     /* block length for blocks in this
+                                          desc.  */
+    unsigned char block_length_med;
+    unsigned char block_length_lo;
+  };
+
+/*
+ *  MESSAGE CODES
+ */
+
+#define COMMAND_COMPLETE    0x00
+#define EXTENDED_MESSAGE    0x01
+#define     EXTENDED_MODIFY_DATA_POINTER    0x00
+#define     EXTENDED_SDTR                   0x01
+#define     EXTENDED_EXTENDED_IDENTIFY      0x02    /* SCSI-I only */
+#define     EXTENDED_WDTR                   0x03
+#define SAVE_POINTERS       0x02
+#define RESTORE_POINTERS    0x03
+#define DISCONNECT          0x04
+#define INITIATOR_ERROR     0x05
+#define ABORT               0x06
+#define MESSAGE_REJECT      0x07
+#define NOP                 0x08
+#define MSG_PARITY_ERROR    0x09
+#define LINKED_CMD_COMPLETE 0x0a
+#define LINKED_FLG_CMD_COMPLETE 0x0b
+#define BUS_DEVICE_RESET    0x0c
+
+#define INITIATE_RECOVERY   0x0f            /* SCSI-II only */
+#define RELEASE_RECOVERY    0x10            /* SCSI-II only */
+
+#define SIMPLE_QUEUE_TAG    0x20
+#define HEAD_OF_QUEUE_TAG   0x21
+#define ORDERED_QUEUE_TAG   0x22
+
+/*
+ * Here are some scsi specific ioctl commands which are sometimes useful.
+ */
+/* These are a few other constants only used by scsi devices.  */
+
+#define SCSI_IOCTL_GET_IDLUN 0x5382
+
+/* Used to turn on and off tagged queuing for scsi devices.  */
+
+#define SCSI_IOCTL_TAGGED_ENABLE 0x5383
+#define SCSI_IOCTL_TAGGED_DISABLE 0x5384
+
+/* Used to obtain the host number of a device.  */
+#define SCSI_IOCTL_PROBE_HOST 0x5385
+
+/* Used to get the bus number for a device.  */
+#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386
+
+#endif /* scsi/scsi.h */
diff --git a/lib/libdss-include/scsi/scsi_ioctl.h b/lib/libdss-include/scsi/scsi_ioctl.h
new file mode 100644 (file)
index 0000000..529aade
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SCSI_IOCTL_H
+#define _SCSI_IOCTL_H
+
+/* IOCTLs for SCSI.  */
+#define SCSI_IOCTL_SEND_COMMAND                1       /* Send a command to the SCSI host.  */
+#define SCSI_IOCTL_TEST_UNIT_READY     2       /* Test if unit is ready.  */
+#define SCSI_IOCTL_BENCHMARK_COMMAND   3
+#define SCSI_IOCTL_SYNC                        4       /* Request synchronous parameters.  */
+#define SCSI_IOCTL_START_UNIT          5
+#define SCSI_IOCTL_STOP_UNIT           6
+#define SCSI_IOCTL_DOORLOCK            0x5380  /* Lock the eject mechanism.  */
+#define SCSI_IOCTL_DOORUNLOCK          0x5381  /* Unlock the mechanism.  */
+
+#endif
diff --git a/lib/libdss-include/scsi/sg.h b/lib/libdss-include/scsi/sg.h
new file mode 100644 (file)
index 0000000..e3b1c6a
--- /dev/null
@@ -0,0 +1,276 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+   History:
+    Started: Aug 9 by Lawrence Foard (entropy@world.std.com), to allow user
+     process control of SCSI devices.
+    Development Sponsored by Killy Corp. NY NY
+*/
+
+#ifndef _SCSI_SG_H
+#define _SCSI_SG_H     1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+
+/* New interface introduced in the 3.x SG drivers follows */
+
+/* Same structure as used by readv() Linux system call. It defines one
+   scatter-gather element. */
+typedef struct sg_iovec
+{
+  void * iov_base;            /* Starting address  */
+  size_t iov_len;             /* Length in bytes  */
+} sg_iovec_t;
+
+
+typedef struct sg_io_hdr
+{
+  int interface_id;           /* [i] 'S' for SCSI generic (required) */
+  int dxfer_direction;        /* [i] data transfer direction  */
+  unsigned char cmd_len;      /* [i] SCSI command length ( <= 16 bytes) */
+  unsigned char mx_sb_len;    /* [i] max length to write to sbp */
+  unsigned short int iovec_count; /* [i] 0 implies no scatter gather */
+  unsigned int dxfer_len;     /* [i] byte count of data transfer */
+  void * dxferp;              /* [i], [*io] points to data transfer memory
+                                or scatter gather list */
+  unsigned char * cmdp;       /* [i], [*i] points to command to perform */
+  unsigned char * sbp;        /* [i], [*o] points to sense_buffer memory */
+  unsigned int timeout;       /* [i] MAX_UINT->no timeout (unit: millisec) */
+  unsigned int flags;         /* [i] 0 -> default, see SG_FLAG... */
+  int pack_id;                /* [i->o] unused internally (normally) */
+  void * usr_ptr;             /* [i->o] unused internally */
+  unsigned char status;       /* [o] scsi status */
+  unsigned char masked_status;/* [o] shifted, masked scsi status */
+  unsigned char msg_status;   /* [o] messaging level data (optional) */
+  unsigned char sb_len_wr;    /* [o] byte count actually written to sbp */
+  unsigned short int host_status; /* [o] errors from host adapter */
+  unsigned short int driver_status;/* [o] errors from software driver */
+  int resid;                  /* [o] dxfer_len - actual_transferred */
+  unsigned int duration;      /* [o] time taken by cmd (unit: millisec) */
+  unsigned int info;          /* [o] auxiliary information */
+} sg_io_hdr_t;
+
+
+/* Use negative values to flag difference from original sg_header structure.  */
+#define SG_DXFER_NONE -1        /* e.g. a SCSI Test Unit Ready command */
+#define SG_DXFER_TO_DEV -2      /* e.g. a SCSI WRITE command */
+#define SG_DXFER_FROM_DEV -3    /* e.g. a SCSI READ command */
+#define SG_DXFER_TO_FROM_DEV -4 /* treated like SG_DXFER_FROM_DEV with the
+                                  additional property than during indirect
+                                  IO the user buffer is copied into the
+                                  kernel buffers before the transfer */
+
+
+/* following flag values can be "or"-ed together */
+#define SG_FLAG_DIRECT_IO 1     /* default is indirect IO */
+#define SG_FLAG_LUN_INHIBIT 2   /* default is to put device's lun into */
+                               /* the 2nd byte of SCSI command */
+#define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */
+                               /* user space (debug indirect IO) */
+
+/* The following 'info' values are "or"-ed together.  */
+#define SG_INFO_OK_MASK        0x1
+#define SG_INFO_OK     0x0     /* no sense, host nor driver "noise" */
+#define SG_INFO_CHECK  0x1     /* something abnormal happened */
+
+#define SG_INFO_DIRECT_IO_MASK 0x6
+#define SG_INFO_INDIRECT_IO    0x0     /* data xfer via kernel buffers (or no xfer) */
+#define SG_INFO_DIRECT_IO      0x2     /* direct IO requested and performed */
+#define SG_INFO_MIXED_IO       0x4     /* part direct, part indirect IO */
+
+
+/* Request information about a specific SG device, used by
+   SG_GET_SCSI_ID ioctl ().  */
+struct sg_scsi_id {
+  /* Host number as in "scsi<n>" where 'n' is one of 0, 1, 2 etc.  */
+  int host_no;
+  int channel;
+  /* SCSI id of target device.  */
+  int scsi_id;
+  int lun;
+  /* TYPE_... defined in <scsi/scsi.h>.  */
+  int scsi_type;
+  /* Host (adapter) maximum commands per lun.  */
+  short int h_cmd_per_lun;
+  /* Device (or adapter) maximum queue length.  */
+  short int d_queue_depth;
+  /* Unused, set to 0 for now.  */
+  int unused[2];
+};
+
+/* Used by SG_GET_REQUEST_TABLE ioctl().  */
+typedef struct sg_req_info {
+    char req_state;     /* 0 -> not used, 1 -> written, 2 -> ready to read */
+    char orphan;        /* 0 -> normal request, 1 -> from interruped SG_IO */
+    char sg_io_owned;   /* 0 -> complete with read(), 1 -> owned by SG_IO */
+    char problem;       /* 0 -> no problem detected, 1 -> error to report */
+    int pack_id;        /* pack_id associated with request */
+    void * usr_ptr;     /* user provided pointer (in new interface) */
+    unsigned int duration; /* millisecs elapsed since written (req_state==1)
+                             or request duration (req_state==2) */
+    int unused;
+} sg_req_info_t;
+
+
+/* IOCTLs: Those ioctls that are relevant to the SG 3.x drivers follow.
+ [Those that only apply to the SG 2.x drivers are at the end of the file.]
+ (_GET_s yield result via 'int *' 3rd argument unless otherwise indicated) */
+
+#define SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
+
+/* Used to configure SCSI command transformation layer for ATAPI devices */
+/* Only supported by the ide-scsi driver */
+#define SG_SET_TRANSFORM 0x2204 /* N.B. 3rd arg is not pointer but value: */
+                     /* 3rd arg = 0 to disable transform, 1 to enable it */
+#define SG_GET_TRANSFORM 0x2205
+
+#define SG_SET_RESERVED_SIZE 0x2275  /* request a new reserved buffer size */
+#define SG_GET_RESERVED_SIZE 0x2272  /* actual size of reserved buffer */
+
+/* The following ioctl has a 'sg_scsi_id_t *' object as its 3rd argument. */
+#define SG_GET_SCSI_ID 0x2276   /* Yields fd's bus, chan, dev, lun + type */
+/* SCSI id information can also be obtained from SCSI_IOCTL_GET_IDLUN */
+
+/* Override host setting and always DMA using low memory ( <16MB on i386) */
+#define SG_SET_FORCE_LOW_DMA 0x2279  /* 0-> use adapter setting, 1-> force */
+#define SG_GET_LOW_DMA 0x227a   /* 0-> use all ram for dma; 1-> low dma ram */
+
+/* When SG_SET_FORCE_PACK_ID set to 1, pack_id is input to read() which
+   tries to fetch a packet with a matching pack_id, waits, or returns EAGAIN.
+   If pack_id is -1 then read oldest waiting. When ...FORCE_PACK_ID set to 0
+   then pack_id ignored by read() and oldest readable fetched. */
+#define SG_SET_FORCE_PACK_ID 0x227b
+#define SG_GET_PACK_ID 0x227c /* Yields oldest readable pack_id (or -1) */
+
+#define SG_GET_NUM_WAITING 0x227d /* Number of commands awaiting read() */
+
+/* Yields max scatter gather tablesize allowed by current host adapter */
+#define SG_GET_SG_TABLESIZE 0x227F  /* 0 implies can't do scatter gather */
+
+#define SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
+
+/* Returns -EBUSY if occupied. 3rd argument pointer to int (see next) */
+#define SG_SCSI_RESET 0x2284
+/* Associated values that can be given to SG_SCSI_RESET follow */
+#define SG_SCSI_RESET_NOTHING  0
+#define SG_SCSI_RESET_DEVICE   1
+#define SG_SCSI_RESET_BUS      2
+#define SG_SCSI_RESET_HOST     3
+
+/* synchronous SCSI command ioctl, (only in version 3 interface) */
+#define SG_IO 0x2285   /* similar effect as write() followed by read() */
+
+#define SG_GET_REQUEST_TABLE 0x2286   /* yields table of active requests */
+
+/* How to treat EINTR during SG_IO ioctl(), only in SG 3.x series */
+#define SG_SET_KEEP_ORPHAN 0x2287 /* 1 -> hold for read(), 0 -> drop (def) */
+#define SG_GET_KEEP_ORPHAN 0x2288
+
+
+#define SG_SCATTER_SZ (8 * 4096)  /* PAGE_SIZE not available to user */
+/* Largest size (in bytes) a single scatter-gather list element can have.
+   The value must be a power of 2 and <= (PAGE_SIZE * 32) [131072 bytes on
+   i386]. The minimum value is PAGE_SIZE. If scatter-gather not supported
+   by adapter then this value is the largest data block that can be
+   read/written by a single scsi command. The user can find the value of
+   PAGE_SIZE by calling getpagesize() defined in unistd.h . */
+
+#define SG_DEFAULT_RETRIES 1
+
+/* Defaults, commented if they differ from original sg driver */
+#define SG_DEF_FORCE_LOW_DMA 0  /* was 1 -> memory below 16MB on i386 */
+#define SG_DEF_FORCE_PACK_ID 0
+#define SG_DEF_KEEP_ORPHAN 0
+#define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */
+
+/* maximum outstanding requests, write() yields EDOM if exceeded */
+#define SG_MAX_QUEUE 16
+
+#define SG_BIG_BUFF SG_DEF_RESERVED_SIZE    /* for backward compatibility */
+
+/* Alternate style type names, "..._t" variants preferred */
+typedef struct sg_io_hdr Sg_io_hdr;
+typedef struct sg_io_vec Sg_io_vec;
+typedef struct sg_scsi_id Sg_scsi_id;
+typedef struct sg_req_info Sg_req_info;
+
+
+/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+/*   The older SG interface based on the 'sg_header' structure follows.   */
+/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
+
+#define SG_MAX_SENSE 16   /* this only applies to the sg_header interface */
+
+struct sg_header
+ {
+   /* Length of incoming packet (including header).  */
+   int pack_len;
+   /* Maximal length of expected reply.  */
+   int reply_len;
+   /* Id number of packet.  */
+   int pack_id;
+   /* 0==ok, otherwise error number.  */
+   int result;
+   /* Force 12 byte command length for group 6 & 7 commands.  */
+   unsigned int twelve_byte:1;
+   /* SCSI status from target.  */
+   unsigned int target_status:5;
+   /* Host status (see "DID" codes).  */
+   unsigned int host_status:8;
+   /* Driver status+suggestion.  */
+   unsigned int driver_status:8;
+   /* Unused.  */
+   unsigned int other_flags:10;
+   /* Output in 3 cases:
+      when target_status is CHECK_CONDITION or
+      when target_status is COMMAND_TERMINATED or
+      when (driver_status & DRIVER_SENSE) is true.  */
+   unsigned char sense_buffer[SG_MAX_SENSE];
+ };
+
+
+/* IOCTLs: The following are not required (or ignored) when the sg_io_hdr_t
+          interface is used. They are kept for backward compatibility with
+          the original and version 2 drivers. */
+
+#define SG_SET_TIMEOUT         0x2201  /* Set timeout; *(int *)arg==timeout.  */
+#define SG_GET_TIMEOUT         0x2202  /* Get timeout; return timeout.  */
+
+/* Get/set command queuing state per fd (default is SG_DEF_COMMAND_Q). */
+#define SG_GET_COMMAND_Q       0x2270  /* Yields 0 (queuing off) or 1 (on).  */
+#define SG_SET_COMMAND_Q       0x2271  /* Change queuing state with 0 or 1.  */
+
+/* Turn on error sense trace (1..8), dump this device to log/console (9)
+   or dump all sg device states ( >9 ) to log/console.  */
+#define SG_SET_DEBUG           0x227e  /* 0 -> turn off debug */
+
+#define SG_NEXT_CMD_LEN                0x2283  /* Override SCSI command length with given
+                                          number on the next write() on this file
+                                          descriptor.  */
+
+/* Defaults, commented if they differ from original sg driver */
+#define SG_DEFAULT_TIMEOUT (60*HZ) /* HZ == 'jiffies in 1 second' */
+#define SG_DEF_COMMAND_Q 0     /* command queuing is always on when
+                                 the new interface is used */
+#define SG_DEF_UNDERRUN_FLAG 0
+
+
+#endif /* scsi/sg.h */
diff --git a/lib/libdss-include/search.h b/lib/libdss-include/search.h
new file mode 100644 (file)
index 0000000..bbf4b1d
--- /dev/null
@@ -0,0 +1,174 @@
+/* Declarations for System V style searching functions.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEARCH_H
+#define        _SEARCH_H 1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Prototype structure for a linked-list data structure.
+   This is the type used by the `insque' and `remque' functions.  */
+
+# ifdef __USE_GNU
+struct qelem
+  {
+    struct qelem *q_forw;
+    struct qelem *q_back;
+    char q_data[1];
+  };
+# endif
+
+
+/* Insert ELEM into a doubly-linked list, after PREV.  */
+extern void insque (void *__elem, void *__prev) __THROW;
+
+/* Unlink ELEM from the doubly-linked list that it is in.  */
+extern void remque (void *__elem) __THROW;
+#endif
+
+
+/* For use with hsearch(3).  */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef        __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+
+/* Action which shall be performed in the call the hsearch.  */
+typedef enum
+  {
+    FIND,
+    ENTER
+  }
+ACTION;
+
+typedef struct entry
+  {
+    char *key;
+    void *data;
+  }
+ENTRY;
+
+/* Opaque type for internal use.  */
+struct _ENTRY;
+
+/* Family of hash table handling functions.  The functions also
+   have reentrant counterparts ending with _r.  The non-reentrant
+   functions all work on a signle internal hashing table.  */
+
+/* Search for entry matching ITEM.key in internal hash table.  If
+   ACTION is `FIND' return found entry or signal error by returning
+   NULL.  If ACTION is `ENTER' replace existing data (if any) with
+   ITEM.data.  */
+extern ENTRY *hsearch (ENTRY __item, ACTION __action) __THROW;
+
+/* Create a new hashing table which will at most contain NEL elements.  */
+extern int hcreate (size_t __nel) __THROW;
+
+/* Destroy current internal hashing table.  */
+extern void hdestroy (void) __THROW;
+
+#ifdef __USE_GNU
+/* Data type for reentrant functions.  */
+struct hsearch_data
+  {
+    struct _ENTRY *table;
+    unsigned int size;
+    unsigned int filled;
+  };
+
+/* Reentrant versions which can handle multiple hashing tables at the
+   same time.  */
+extern int hsearch_r (ENTRY __item, ACTION __action, ENTRY **__retval,
+                     struct hsearch_data *__htab) __THROW;
+extern int hcreate_r (size_t __nel, struct hsearch_data *__htab) __THROW;
+extern void hdestroy_r (struct hsearch_data *__htab) __THROW;
+#endif
+
+
+/* The tsearch routines are very interesting. They make many
+   assumptions about the compiler.  It assumes that the first field
+   in node must be the "key" field, which points to the datum.
+   Everything depends on that.  */
+/* For tsearch */
+typedef enum
+{
+  preorder,
+  postorder,
+  endorder,
+  leaf
+}
+VISIT;
+
+/* Search for an entry matching the given KEY in the tree pointed to
+   by *ROOTP and insert a new element if not found.  */
+extern void *tsearch (const void *__key, void **__rootp,
+                     __compar_fn_t __compar);
+
+/* Search for an entry matching the given KEY in the tree pointed to
+   by *ROOTP.  If no matching entry is available return NULL.  */
+extern void *tfind (const void *__key, void *const *__rootp,
+                   __compar_fn_t __compar);
+
+/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
+extern void *tdelete (const void *__restrict __key,
+                     void **__restrict __rootp,
+                     __compar_fn_t __compar);
+
+#ifndef __ACTION_FN_T
+# define __ACTION_FN_T
+typedef void (*__action_fn_t) (const void *__nodep, VISIT __value,
+                              int __level);
+#endif
+
+/* Walk through the whole tree and call the ACTION callback for every node
+   or leaf.  */
+extern void twalk (const void *__root, __action_fn_t __action);
+
+#ifdef __USE_GNU
+/* Callback type for function to free a tree node.  If the keys are atomic
+   data this function should do nothing.  */
+typedef void (*__free_fn_t) (void *__nodep);
+
+/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
+extern void tdestroy (void *__root, __free_fn_t __freefct);
+#endif
+
+
+/* Perform linear search for KEY by comparing by COMPAR in an array
+   [BASE,BASE+NMEMB*SIZE).  */
+extern void *lfind (const void *__key, const void *__base,
+                   size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+
+/* Perform linear search for KEY by comparing by COMPAR function in
+   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
+extern void *lsearch (const void *__key, void *__base,
+                     size_t *__nmemb, size_t __size, __compar_fn_t __compar);
+
+__END_DECLS
+
+#endif /* search.h */
diff --git a/lib/libdss-include/semaphore.h b/lib/libdss-include/semaphore.h
new file mode 100644 (file)
index 0000000..9927db7
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+#define _SEMAPHORE_H   1
+
+#include <features.h>
+#include <sys/types.h>
+#ifdef __USE_XOPEN2K
+# define __need_timespec
+# include <time.h>
+#endif
+
+/* Get the definition for sem_t.  */
+#include <bits/semaphore.h>
+
+
+__BEGIN_DECLS
+
+/* Initialize semaphore object SEM to VALUE.  If PSHARED then share it
+   with other processes.  */
+extern int sem_init (sem_t *__sem, int __pshared, unsigned int __value)
+     __THROW;
+/* Free resources associated with semaphore object SEM.  */
+extern int sem_destroy (sem_t *__sem) __THROW;
+
+/* Open a named semaphore NAME with open flags OFLAG.  */
+extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW;
+
+/* Close descriptor for named semaphore SEM.  */
+extern int sem_close (sem_t *__sem) __THROW;
+
+/* Remove named semaphore NAME.  */
+extern int sem_unlink (const char *__name) __THROW;
+
+/* Wait for SEM being posted.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sem_wait (sem_t *__sem);
+
+#ifdef __USE_XOPEN2K
+/* Similar to `sem_wait' but wait only until ABSTIME.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sem_timedwait (sem_t *__restrict __sem,
+                         const struct timespec *__restrict __abstime);
+#endif
+
+/* Test whether SEM is posted.  */
+extern int sem_trywait (sem_t *__sem) __THROWNL;
+
+/* Post SEM.  */
+extern int sem_post (sem_t *__sem) __THROWNL;
+
+/* Get current value of SEM and store it in *SVAL.  */
+extern int sem_getvalue (sem_t *__restrict __sem, int *__restrict __sval)
+     __THROW;
+
+
+__END_DECLS
+
+#endif /* semaphore.h */
diff --git a/lib/libdss-include/setjmp.h b/lib/libdss-include/setjmp.h
new file mode 100644 (file)
index 0000000..ccfb70a
--- /dev/null
@@ -0,0 +1,114 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.13 Nonlocal jumps   <setjmp.h>
+ */
+
+#ifndef        _SETJMP_H
+#define        _SETJMP_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/setjmp.h>               /* Get `__jmp_buf'.  */
+#include <bits/sigset.h>               /* Get `__sigset_t'.  */
+
+
+/* Calling environment, plus possibly a saved signal mask.  */
+struct __jmp_buf_tag
+  {
+    /* NOTE: The machine-dependent definitions of `__sigsetjmp'
+       assume that a `jmp_buf' begins with a `__jmp_buf' and that
+       `__mask_was_saved' follows it.  Do not move these members
+       or add others before it.  */
+    __jmp_buf __jmpbuf;                /* Calling environment.  */
+    int __mask_was_saved;      /* Saved the signal mask?  */
+    __sigset_t __saved_mask;   /* Saved signal mask.  */
+  };
+
+
+__BEGIN_NAMESPACE_STD
+
+typedef struct __jmp_buf_tag jmp_buf[1];
+
+/* Store the calling environment in ENV, also saving the signal mask.
+   Return 0.  */
+extern int setjmp (jmp_buf __env) __THROWNL;
+
+__END_NAMESPACE_STD
+
+/* Store the calling environment in ENV, also saving the
+   signal mask if SAVEMASK is nonzero.  Return 0.
+   This is the internal name for `sigsetjmp'.  */
+extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __THROWNL;
+
+/* Store the calling environment in ENV, not saving the signal mask.
+   Return 0.  */
+extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROWNL;
+
+/* Do not save the signal mask.  This is equivalent to the `_setjmp'
+   BSD function.  */
+#define setjmp(env)    _setjmp (env)
+
+
+__BEGIN_NAMESPACE_STD
+
+/* Jump to the environment saved in ENV, making the
+   `setjmp' call there return VAL, or 1 if VAL is 0.  */
+extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+
+__END_NAMESPACE_STD
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Same.  Usually `_longjmp' is used with `_setjmp', which does not save
+   the signal mask.  But it is how ENV was saved that determines whether
+   `longjmp' restores the mask; `_longjmp' is just an alias.  */
+extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+#endif
+
+
+#ifdef __USE_POSIX
+/* Use the same type for `jmp_buf' and `sigjmp_buf'.
+   The `__mask_was_saved' flag determines whether
+   or not `longjmp' will restore the signal mask.  */
+typedef struct __jmp_buf_tag sigjmp_buf[1];
+
+/* Store the calling environment in ENV, also saving the
+   signal mask if SAVEMASK is nonzero.  Return 0.  */
+# define sigsetjmp(env, savemask)      __sigsetjmp (env, savemask)
+
+/* Jump to the environment saved in ENV, making the
+   sigsetjmp call there return VAL, or 1 if VAL is 0.
+   Restore the signal mask if that sigsetjmp call saved it.
+   This is just an alias `longjmp'.  */
+extern void siglongjmp (sigjmp_buf __env, int __val)
+     __THROWNL __attribute__ ((__noreturn__));
+#endif /* Use POSIX.  */
+
+
+/* Define helper functions to catch unsafe code.  */
+#if __USE_FORTIFY_LEVEL > 0
+# include <bits/setjmp2.h>
+#endif
+
+__END_DECLS
+
+#endif /* setjmp.h  */
diff --git a/lib/libdss-include/sgtty.h b/lib/libdss-include/sgtty.h
new file mode 100644 (file)
index 0000000..121cd26
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SGTTY_H
+#define        _SGTTY_H        1
+
+#include <features.h>
+
+#include <sys/ioctl.h>
+
+/* On some systems this type is not defined by <bits/ioctl-types.h>;
+   in that case, the functions are just stubs that return ENOSYS.  */
+struct sgttyb;
+
+__BEGIN_DECLS
+
+/* Fill in *PARAMS with terminal parameters associated with FD.  */
+extern int gtty (int __fd, struct sgttyb *__params) __THROW;
+
+/* Set the terminal parameters associated with FD to *PARAMS.  */
+extern int stty (int __fd, const struct sgttyb *__params) __THROW;
+
+
+__END_DECLS
+
+#endif /* sgtty.h  */
diff --git a/lib/libdss-include/shadow.h b/lib/libdss-include/shadow.h
new file mode 100644 (file)
index 0000000..010949f
--- /dev/null
@@ -0,0 +1,148 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Declaration of types and functions for shadow password suite.  */
+
+#ifndef _SHADOW_H
+#define _SHADOW_H      1
+
+#include <features.h>
+
+#include <paths.h>
+
+#define        __need_FILE
+#include <stdio.h>
+#define __need_size_t
+#include <stddef.h>
+
+/* Paths to the user database files.  */
+#define        SHADOW _PATH_SHADOW
+
+
+__BEGIN_DECLS
+
+/* Structure of the password file.  */
+struct spwd
+  {
+    char *sp_namp;             /* Login name.  */
+    char *sp_pwdp;             /* Encrypted password.  */
+    long int sp_lstchg;                /* Date of last change.  */
+    long int sp_min;           /* Minimum number of days between changes.  */
+    long int sp_max;           /* Maximum number of days between changes.  */
+    long int sp_warn;          /* Number of days to warn user to change
+                                  the password.  */
+    long int sp_inact;         /* Number of days the account may be
+                                  inactive.  */
+    long int sp_expire;                /* Number of days since 1970-01-01 until
+                                  account expires.  */
+    unsigned long int sp_flag; /* Reserved.  */
+  };
+
+
+/* Open database for reading.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void setspent (void);
+
+/* Close database.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endspent (void);
+
+/* Get next entry from database, perhaps after opening the file.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *getspent (void);
+
+/* Get shadow entry matching NAME.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *getspnam (const char *__name);
+
+/* Read shadow entry from STRING.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *sgetspent (const char *__string);
+
+/* Read next shadow entry from STREAM.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct spwd *fgetspent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int putspent (const struct spwd *__p, FILE *__stream);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of some of the functions above.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getspent_r (struct spwd *__result_buf, char *__buffer,
+                      size_t __buflen, struct spwd **__result);
+
+extern int getspnam_r (const char *__name, struct spwd *__result_buf,
+                      char *__buffer, size_t __buflen,
+                      struct spwd **__result);
+
+extern int sgetspent_r (const char *__string, struct spwd *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct spwd **__result);
+
+extern int fgetspent_r (FILE *__stream, struct spwd *__result_buf,
+                       char *__buffer, size_t __buflen,
+                       struct spwd **__result);
+#endif /* misc */
+
+
+/* The simple locking functionality provided here is not suitable for
+   multi-threaded applications.  */
+
+/* Protect password file against multi writers.  */
+extern int lckpwdf (void) __THROW;
+
+/* Unlock password file.  */
+extern int ulckpwdf (void) __THROW;
+
+__END_DECLS
+
+#endif /* shadow.h */
diff --git a/lib/libdss-include/signal.h b/lib/libdss-include/signal.h
new file mode 100644 (file)
index 0000000..47e995a
--- /dev/null
@@ -0,0 +1,377 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.14 Signal handling <signal.h>
+ */
+
+#ifndef        _SIGNAL_H
+
+#if !defined __need_sig_atomic_t && !defined __need_sigset_t
+# define _SIGNAL_H
+#endif
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/sigset.h>               /* __sigset_t, __sig_atomic_t.  */
+
+/* An integral type that can be modified atomically, without the
+   possibility of a signal arriving in the middle of the operation.  */
+#if defined __need_sig_atomic_t || defined _SIGNAL_H
+# ifndef __sig_atomic_t_defined
+#  define __sig_atomic_t_defined
+__BEGIN_NAMESPACE_STD
+typedef __sig_atomic_t sig_atomic_t;
+__END_NAMESPACE_STD
+# endif
+# undef __need_sig_atomic_t
+#endif
+
+#if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
+# ifndef __sigset_t_defined
+#  define __sigset_t_defined
+typedef __sigset_t sigset_t;
+# endif
+# undef __need_sigset_t
+#endif
+
+#ifdef _SIGNAL_H
+
+#include <bits/types.h>
+#include <bits/signum.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+#endif
+#ifdef __USE_XOPEN
+# endif
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif /* Unix98 */
+
+#ifdef __USE_POSIX199309
+/* We need `struct timespec' later on.  */
+# define __need_timespec
+# include <time.h>
+#endif
+
+#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
+/* Get the `siginfo_t' type plus the needed symbols.  */
+# include <bits/siginfo.h>
+#endif
+
+
+/* Type of a signal handler.  */
+typedef void (*__sighandler_t) (int);
+
+/* The X/Open definition of `signal' specifies the SVID semantic.  Use
+   the additional function `sysv_signal' when X/Open compatibility is
+   requested.  */
+extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#ifdef __USE_GNU
+extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#endif
+
+/* Set the handler for the signal SIG to HANDLER, returning the old
+   handler, or SIG_ERR on error.
+   By default `signal' has the BSD semantic.  */
+__BEGIN_NAMESPACE_STD
+#ifdef __USE_MISC
+extern __sighandler_t signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#else
+/* Make sure the used `signal' implementation is the SVID version. */
+# ifdef __REDIRECT_NTH
+extern __sighandler_t __REDIRECT_NTH (signal,
+                                     (int __sig, __sighandler_t __handler),
+                                     __sysv_signal);
+# else
+#  define signal __sysv_signal
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN
+/* The X/Open definition of `signal' conflicts with the BSD version.
+   So they defined another function `bsd_signal'.  */
+extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
+     __THROW;
+#endif
+
+/* Send signal SIG to process number PID.  If PID is zero,
+   send SIG to all processes in the current process's process group.
+   If PID is < -1, send SIG to all processes in process group - PID.  */
+#ifdef __USE_POSIX
+extern int kill (__pid_t __pid, int __sig) __THROW;
+#endif /* Use POSIX.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Send SIG to all processes in process group PGRP.
+   If PGRP is zero, send SIG to all processes in
+   the current process's process group.  */
+extern int killpg (__pid_t __pgrp, int __sig) __THROW;
+#endif /* Use misc || X/Open Unix.  */
+
+__BEGIN_NAMESPACE_STD
+/* Raise signal SIG, i.e., send SIG to yourself.  */
+extern int raise (int __sig) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* SVID names for the same things.  */
+extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
+     __THROW;
+extern int gsignal (int __sig) __THROW;
+#endif /* Use misc.  */
+
+#ifdef __USE_XOPEN2K8
+/* Print a message describing the meaning of the given signal number.  */
+extern void psignal (int __sig, const char *__s);
+
+/* Print a message describing the meaning of the given signal information.  */
+extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
+#endif /* POSIX 2008.  */
+
+
+
+/* The `sigpause' function in X/Open defines the argument as the
+   signal number.  This requires redirecting to another function
+   because the default version in glibc uses an old BSD interface.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+
+#ifdef __USE_XOPEN
+# ifdef __GNUC__
+extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
+# else
+extern int __sigpause (int __sig_or_mask, int __is_sig);
+/* Remove a signal from the signal mask and suspend the process.  */
+#  define sigpause(sig) __sigpause ((sig), 1)
+# endif
+#endif
+
+
+#ifdef __USE_MISC
+/* None of the following functions should be used anymore.  They are here
+   only for compatibility.  A single word (`int') is not guaranteed to be
+   enough to hold a complete signal mask and therefore these functions
+   simply do not work in many situations.  Use `sigprocmask' instead.  */
+
+/* Compute mask for signal SIG.  */
+# define sigmask(sig)  __sigmask(sig)
+
+/* Block signals in MASK, returning the old mask.  */
+extern int sigblock (int __mask) __THROW __attribute_deprecated__;
+
+/* Set the mask of blocked signals to MASK, returning the old mask.  */
+extern int sigsetmask (int __mask) __THROW __attribute_deprecated__;
+
+/* Return currently selected signal mask.  */
+extern int siggetmask (void) __THROW __attribute_deprecated__;
+#endif /* Use misc.  */
+
+
+#ifdef __USE_MISC
+# define NSIG  _NSIG
+#endif
+
+#ifdef __USE_GNU
+typedef __sighandler_t sighandler_t;
+#endif
+
+/* 4.4 BSD uses the name `sig_t' for this.  */
+#ifdef __USE_MISC
+typedef __sighandler_t sig_t;
+#endif
+
+#ifdef __USE_POSIX
+
+/* Clear all signals from SET.  */
+extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));
+
+/* Set all signals in SET.  */
+extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));
+
+/* Add SIGNO to SET.  */
+extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
+
+/* Remove SIGNO from SET.  */
+extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
+
+/* Return 1 if SIGNO is in SET, 0 if not.  */
+extern int sigismember (const sigset_t *__set, int __signo)
+     __THROW __nonnull ((1));
+
+# ifdef __USE_GNU
+/* Return non-empty value is SET is not empty.  */
+extern int sigisemptyset (const sigset_t *__set) __THROW __nonnull ((1));
+
+/* Build new signal set by combining the two inputs set using logical AND.  */
+extern int sigandset (sigset_t *__set, const sigset_t *__left,
+                     const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+
+/* Build new signal set by combining the two inputs set using logical OR.  */
+extern int sigorset (sigset_t *__set, const sigset_t *__left,
+                    const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
+# endif /* GNU */
+
+/* Get the system-specific definitions of `struct sigaction'
+   and the `SA_*' and `SIG_*'. constants.  */
+# include <bits/sigaction.h>
+
+/* Get and/or change the set of blocked signals.  */
+extern int sigprocmask (int __how, const sigset_t *__restrict __set,
+                       sigset_t *__restrict __oset) __THROW;
+
+/* Change the set of blocked signals to SET,
+   wait until a signal arrives, and restore the set of blocked signals.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigsuspend (const sigset_t *__set) __nonnull ((1));
+
+/* Get and/or set the action for signal SIG.  */
+extern int sigaction (int __sig, const struct sigaction *__restrict __act,
+                     struct sigaction *__restrict __oact) __THROW;
+
+/* Put in SET all signals that are blocked and waiting to be delivered.  */
+extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));
+
+
+/* Select any of pending signals from SET or wait for any to arrive.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
+     __nonnull ((1, 2));
+
+# ifdef __USE_POSIX199309
+/* Select any of pending signals from SET and place information in INFO.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigwaitinfo (const sigset_t *__restrict __set,
+                       siginfo_t *__restrict __info) __nonnull ((1));
+
+/* Select any of pending signals from SET and place information in INFO.
+   Wait the time specified by TIMEOUT if no signal is pending.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sigtimedwait (const sigset_t *__restrict __set,
+                        siginfo_t *__restrict __info,
+                        const struct timespec *__restrict __timeout)
+     __nonnull ((1));
+
+/* Send signal SIG to the process PID.  Associate data in VAL with the
+   signal.  */
+extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
+     __THROW;
+# endif        /* Use POSIX 199306.  */
+
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+
+/* Names of the signals.  This variable exists only for compatibility.
+   Use `strsignal' instead (see <string.h>).  */
+extern const char *const _sys_siglist[_NSIG];
+extern const char *const sys_siglist[_NSIG];
+
+
+/* Get machine-dependent `struct sigcontext' and signal subcodes.  */
+# include <bits/sigcontext.h>
+
+/* Restore the state saved in SCP.  */
+extern int sigreturn (struct sigcontext *__scp) __THROW;
+
+#endif /* Use misc.  */
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+# define __need_size_t
+# include <stddef.h>
+
+/* If INTERRUPT is nonzero, make signal SIG interrupt system calls
+   (causing them to fail with EINTR); if INTERRUPT is zero, make system
+   calls be restarted after signal SIG.  */
+extern int siginterrupt (int __sig, int __interrupt) __THROW;
+
+# include <bits/sigstack.h>
+# if defined __USE_XOPEN || defined __USE_XOPEN2K8
+/* This will define `ucontext_t' and `mcontext_t'.  */
+#  include <sys/ucontext.h>
+# endif
+
+/* Run signals handlers on the stack specified by SS (if not NULL).
+   If OSS is not NULL, it is filled in with the old signal stack status.
+   This interface is obsolete and on many platform not implemented.  */
+extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
+     __THROW __attribute_deprecated__;
+
+/* Alternate signal handler stack interface.
+   This interface should always be preferred over `sigstack'.  */
+extern int sigaltstack (const struct sigaltstack *__restrict __ss,
+                       struct sigaltstack *__restrict __oss) __THROW;
+
+#endif /* Use POSIX.1-2008 or X/Open Unix.  */
+
+#ifdef __USE_XOPEN_EXTENDED
+/* Simplified interface for signal management.  */
+
+/* Add SIG to the calling process' signal mask.  */
+extern int sighold (int __sig) __THROW;
+
+/* Remove SIG from the calling process' signal mask.  */
+extern int sigrelse (int __sig) __THROW;
+
+/* Set the disposition of SIG to SIG_IGN.  */
+extern int sigignore (int __sig) __THROW;
+
+/* Set the disposition of SIG.  */
+extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __THROW;
+#endif
+
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+/* Some of the functions for handling signals in threaded programs must
+   be defined here.  */
+# include <bits/pthreadtypes.h>
+# include <bits/sigthread.h>
+#endif /* use Unix98 */
+
+/* The following functions are used internally in the C library and in
+   other code which need deep insights.  */
+
+/* Return number of available real-time signal with highest priority.  */
+extern int __libc_current_sigrtmin (void) __THROW;
+/* Return number of available real-time signal with lowest priority.  */
+extern int __libc_current_sigrtmax (void) __THROW;
+
+#endif /* signal.h  */
+
+__END_DECLS
+
+#endif /* not signal.h */
diff --git a/lib/libdss-include/sound/asequencer.h b/lib/libdss-include/sound/asequencer.h
new file mode 100644 (file)
index 0000000..71f9079
--- /dev/null
@@ -0,0 +1,615 @@
+/*
+ *  Main header file for the ALSA sequencer
+ *  Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
+ *            (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_ASEQUENCER_H
+#define __SOUND_ASEQUENCER_H
+
+#include <sound/asound.h>
+
+/** version of the sequencer */
+#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)
+
+/**
+ * definition of sequencer event types
+ */
+
+/** system messages
+ * event data type = #snd_seq_result
+ */
+#define SNDRV_SEQ_EVENT_SYSTEM         0
+#define SNDRV_SEQ_EVENT_RESULT         1
+
+/** note messages (channel specific)
+ * event data type = #snd_seq_ev_note
+ */
+#define SNDRV_SEQ_EVENT_NOTE           5
+#define SNDRV_SEQ_EVENT_NOTEON         6
+#define SNDRV_SEQ_EVENT_NOTEOFF                7
+#define SNDRV_SEQ_EVENT_KEYPRESS       8
+       
+/** control messages (channel specific)
+ * event data type = #snd_seq_ev_ctrl
+ */
+#define SNDRV_SEQ_EVENT_CONTROLLER     10
+#define SNDRV_SEQ_EVENT_PGMCHANGE      11
+#define SNDRV_SEQ_EVENT_CHANPRESS      12
+#define SNDRV_SEQ_EVENT_PITCHBEND      13      /**< from -8192 to 8191 */
+#define SNDRV_SEQ_EVENT_CONTROL14      14      /**< 14 bit controller value */
+#define SNDRV_SEQ_EVENT_NONREGPARAM    15      /**< 14 bit NRPN address + 14 bit unsigned value */
+#define SNDRV_SEQ_EVENT_REGPARAM       16      /**< 14 bit RPN address + 14 bit unsigned value */
+
+/** synchronisation messages
+ * event data type = #snd_seq_ev_ctrl
+ */
+#define SNDRV_SEQ_EVENT_SONGPOS                20      /* Song Position Pointer with LSB and MSB values */
+#define SNDRV_SEQ_EVENT_SONGSEL                21      /* Song Select with song ID number */
+#define SNDRV_SEQ_EVENT_QFRAME         22      /* midi time code quarter frame */
+#define SNDRV_SEQ_EVENT_TIMESIGN       23      /* SMF Time Signature event */
+#define SNDRV_SEQ_EVENT_KEYSIGN                24      /* SMF Key Signature event */
+               
+/** timer messages
+ * event data type = snd_seq_ev_queue_control
+ */
+#define SNDRV_SEQ_EVENT_START          30      /* midi Real Time Start message */
+#define SNDRV_SEQ_EVENT_CONTINUE       31      /* midi Real Time Continue message */
+#define SNDRV_SEQ_EVENT_STOP           32      /* midi Real Time Stop message */       
+#define        SNDRV_SEQ_EVENT_SETPOS_TICK     33      /* set tick queue position */
+#define SNDRV_SEQ_EVENT_SETPOS_TIME    34      /* set realtime queue position */
+#define SNDRV_SEQ_EVENT_TEMPO          35      /* (SMF) Tempo event */
+#define SNDRV_SEQ_EVENT_CLOCK          36      /* midi Real Time Clock message */
+#define SNDRV_SEQ_EVENT_TICK           37      /* midi Real Time Tick message */
+#define SNDRV_SEQ_EVENT_QUEUE_SKEW     38      /* skew queue tempo */
+
+/** others
+ * event data type = none
+ */
+#define SNDRV_SEQ_EVENT_TUNE_REQUEST   40      /* tune request */
+#define SNDRV_SEQ_EVENT_RESET          41      /* reset to power-on state */
+#define SNDRV_SEQ_EVENT_SENSING                42      /* "active sensing" event */
+
+/** echo back, kernel private messages
+ * event data type = any type
+ */
+#define SNDRV_SEQ_EVENT_ECHO           50      /* echo event */
+#define SNDRV_SEQ_EVENT_OSS            51      /* OSS raw event */
+
+/** system status messages (broadcast for subscribers)
+ * event data type = snd_seq_addr
+ */
+#define SNDRV_SEQ_EVENT_CLIENT_START   60      /* new client has connected */
+#define SNDRV_SEQ_EVENT_CLIENT_EXIT    61      /* client has left the system */
+#define SNDRV_SEQ_EVENT_CLIENT_CHANGE  62      /* client status/info has changed */
+#define SNDRV_SEQ_EVENT_PORT_START     63      /* new port was created */
+#define SNDRV_SEQ_EVENT_PORT_EXIT      64      /* port was deleted from system */
+#define SNDRV_SEQ_EVENT_PORT_CHANGE    65      /* port status/info has changed */
+
+/** port connection changes
+ * event data type = snd_seq_connect
+ */
+#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED        66      /* ports connected */
+#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67   /* ports disconnected */
+
+/* 70-89:  synthesizer events - obsoleted */
+
+/** user-defined events with fixed length
+ * event data type = any
+ */
+#define SNDRV_SEQ_EVENT_USR0           90
+#define SNDRV_SEQ_EVENT_USR1           91
+#define SNDRV_SEQ_EVENT_USR2           92
+#define SNDRV_SEQ_EVENT_USR3           93
+#define SNDRV_SEQ_EVENT_USR4           94
+#define SNDRV_SEQ_EVENT_USR5           95
+#define SNDRV_SEQ_EVENT_USR6           96
+#define SNDRV_SEQ_EVENT_USR7           97
+#define SNDRV_SEQ_EVENT_USR8           98
+#define SNDRV_SEQ_EVENT_USR9           99
+
+/* 100-118: instrument layer - obsoleted */
+/* 119-129: reserved */
+
+/* 130-139: variable length events
+ * event data type = snd_seq_ev_ext
+ * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
+ */
+#define SNDRV_SEQ_EVENT_SYSEX          130     /* system exclusive data (variable length) */
+#define SNDRV_SEQ_EVENT_BOUNCE         131     /* error event */
+/* 132-134: reserved */
+#define SNDRV_SEQ_EVENT_USR_VAR0       135
+#define SNDRV_SEQ_EVENT_USR_VAR1       136
+#define SNDRV_SEQ_EVENT_USR_VAR2       137
+#define SNDRV_SEQ_EVENT_USR_VAR3       138
+#define SNDRV_SEQ_EVENT_USR_VAR4       139
+
+/* 150-151: kernel events with quote - DO NOT use in user clients */
+#define SNDRV_SEQ_EVENT_KERNEL_ERROR   150
+#define SNDRV_SEQ_EVENT_KERNEL_QUOTE   151     /* obsolete */
+
+/* 152-191: reserved */
+
+/* 192-254: hardware specific events */
+
+/* 255: special event */
+#define SNDRV_SEQ_EVENT_NONE           255
+
+
+typedef unsigned char snd_seq_event_type_t;
+
+/** event address */
+struct snd_seq_addr {
+       unsigned char client;   /**< Client number:         0..255, 255 = broadcast to all clients */
+       unsigned char port;     /**< Port within client:    0..255, 255 = broadcast to all ports */
+};
+
+/** port connection */
+struct snd_seq_connect {
+       struct snd_seq_addr sender;
+       struct snd_seq_addr dest;
+};
+
+
+#define SNDRV_SEQ_ADDRESS_UNKNOWN      253     /* unknown source */
+#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS  254     /* send event to all subscribed ports */
+#define SNDRV_SEQ_ADDRESS_BROADCAST    255     /* send event to all queues/clients/ports/channels */
+#define SNDRV_SEQ_QUEUE_DIRECT         253     /* direct dispatch */
+
+       /* event mode flag - NOTE: only 8 bits available! */
+#define SNDRV_SEQ_TIME_STAMP_TICK      (0<<0) /* timestamp in clock ticks */
+#define SNDRV_SEQ_TIME_STAMP_REAL      (1<<0) /* timestamp in real time */
+#define SNDRV_SEQ_TIME_STAMP_MASK      (1<<0)
+
+#define SNDRV_SEQ_TIME_MODE_ABS                (0<<1)  /* absolute timestamp */
+#define SNDRV_SEQ_TIME_MODE_REL                (1<<1)  /* relative to current time */
+#define SNDRV_SEQ_TIME_MODE_MASK       (1<<1)
+
+#define SNDRV_SEQ_EVENT_LENGTH_FIXED   (0<<2)  /* fixed event size */
+#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE        (1<<2)  /* variable event size */
+#define SNDRV_SEQ_EVENT_LENGTH_VARUSR  (2<<2)  /* variable event size - user memory space */
+#define SNDRV_SEQ_EVENT_LENGTH_MASK    (3<<2)
+
+#define SNDRV_SEQ_PRIORITY_NORMAL      (0<<4)  /* normal priority */
+#define SNDRV_SEQ_PRIORITY_HIGH                (1<<4)  /* event should be processed before others */
+#define SNDRV_SEQ_PRIORITY_MASK                (1<<4)
+
+
+       /* note event */
+struct snd_seq_ev_note {
+       unsigned char channel;
+       unsigned char note;
+       unsigned char velocity;
+       unsigned char off_velocity;     /* only for SNDRV_SEQ_EVENT_NOTE */
+       unsigned int duration;          /* only for SNDRV_SEQ_EVENT_NOTE */
+};
+
+       /* controller event */
+struct snd_seq_ev_ctrl {
+       unsigned char channel;
+       unsigned char unused1, unused2, unused3;        /* pad */
+       unsigned int param;
+       signed int value;
+};
+
+       /* generic set of bytes (12x8 bit) */
+struct snd_seq_ev_raw8 {
+       unsigned char d[12];    /* 8 bit value */
+};
+
+       /* generic set of integers (3x32 bit) */
+struct snd_seq_ev_raw32 {
+       unsigned int d[3];      /* 32 bit value */
+};
+
+       /* external stored data */
+struct snd_seq_ev_ext {
+       unsigned int len;       /* length of data */
+       void *ptr;              /* pointer to data (note: maybe 64-bit) */
+} __attribute__((packed));
+
+struct snd_seq_result {
+       int event;              /* processed event type */
+       int result;
+};
+
+
+struct snd_seq_real_time {
+       unsigned int tv_sec;    /* seconds */
+       unsigned int tv_nsec;   /* nanoseconds */
+};
+
+typedef unsigned int snd_seq_tick_time_t;      /* midi ticks */
+
+union snd_seq_timestamp {
+       snd_seq_tick_time_t tick;
+       struct snd_seq_real_time time;
+};
+
+struct snd_seq_queue_skew {
+       unsigned int value;
+       unsigned int base;
+};
+
+       /* queue timer control */
+struct snd_seq_ev_queue_control {
+       unsigned char queue;                    /* affected queue */
+       unsigned char pad[3];                   /* reserved */
+       union {
+               signed int value;               /* affected value (e.g. tempo) */
+               union snd_seq_timestamp time;   /* time */
+               unsigned int position;          /* sync position */
+               struct snd_seq_queue_skew skew;
+               unsigned int d32[2];
+               unsigned char d8[8];
+       } param;
+};
+
+       /* quoted event - inside the kernel only */
+struct snd_seq_ev_quote {
+       struct snd_seq_addr origin;             /* original sender */
+       unsigned short value;           /* optional data */
+       struct snd_seq_event *event;            /* quoted event */
+} __attribute__((packed));
+
+
+       /* sequencer event */
+struct snd_seq_event {
+       snd_seq_event_type_t type;      /* event type */
+       unsigned char flags;            /* event flags */
+       char tag;
+       
+       unsigned char queue;            /* schedule queue */
+       union snd_seq_timestamp time;   /* schedule time */
+
+
+       struct snd_seq_addr source;     /* source address */
+       struct snd_seq_addr dest;       /* destination address */
+
+       union {                         /* event data... */
+               struct snd_seq_ev_note note;
+               struct snd_seq_ev_ctrl control;
+               struct snd_seq_ev_raw8 raw8;
+               struct snd_seq_ev_raw32 raw32;
+               struct snd_seq_ev_ext ext;
+               struct snd_seq_ev_queue_control queue;
+               union snd_seq_timestamp time;
+               struct snd_seq_addr addr;
+               struct snd_seq_connect connect;
+               struct snd_seq_result result;
+               struct snd_seq_ev_quote quote;
+       } data;
+};
+
+
+/*
+ * bounce event - stored as variable size data
+ */
+struct snd_seq_event_bounce {
+       int err;
+       struct snd_seq_event event;
+       /* external data follows here. */
+};
+
+
+       /* system information */
+struct snd_seq_system_info {
+       int queues;                     /* maximum queues count */
+       int clients;                    /* maximum clients count */
+       int ports;                      /* maximum ports per client */
+       int channels;                   /* maximum channels per port */
+       int cur_clients;                /* current clients */
+       int cur_queues;                 /* current queues */
+       char reserved[24];
+};
+
+
+       /* system running information */
+struct snd_seq_running_info {
+       unsigned char client;           /* client id */
+       unsigned char big_endian;       /* 1 = big-endian */
+       unsigned char cpu_mode;         /* 4 = 32bit, 8 = 64bit */
+       unsigned char pad;              /* reserved */
+       unsigned char reserved[12];
+};
+
+
+       /* known client numbers */
+#define SNDRV_SEQ_CLIENT_SYSTEM                0
+       /* internal client numbers */
+#define SNDRV_SEQ_CLIENT_DUMMY         14      /* midi through */
+#define SNDRV_SEQ_CLIENT_OSS           15      /* oss sequencer emulator */
+
+
+       /* client types */
+typedef int __bitwise snd_seq_client_type_t;
+#define        NO_CLIENT       ((snd_seq_client_type_t) 0)
+#define        USER_CLIENT     ((snd_seq_client_type_t) 1)
+#define        KERNEL_CLIENT   ((snd_seq_client_type_t) 2)
+                        
+       /* event filter flags */
+#define SNDRV_SEQ_FILTER_BROADCAST     (1<<0)  /* accept broadcast messages */
+#define SNDRV_SEQ_FILTER_MULTICAST     (1<<1)  /* accept multicast messages */
+#define SNDRV_SEQ_FILTER_BOUNCE                (1<<2)  /* accept bounce event in error */
+#define SNDRV_SEQ_FILTER_USE_EVENT     (1<<31) /* use event filter */
+
+struct snd_seq_client_info {
+       int client;                     /* client number to inquire */
+       snd_seq_client_type_t type;     /* client type */
+       char name[64];                  /* client name */
+       unsigned int filter;            /* filter flags */
+       unsigned char multicast_filter[8]; /* multicast filter bitmap */
+       unsigned char event_filter[32]; /* event filter bitmap */
+       int num_ports;                  /* RO: number of ports */
+       int event_lost;                 /* number of lost events */
+       char reserved[64];              /* for future use */
+};
+
+
+/* client pool size */
+struct snd_seq_client_pool {
+       int client;                     /* client number to inquire */
+       int output_pool;                /* outgoing (write) pool size */
+       int input_pool;                 /* incoming (read) pool size */
+       int output_room;                /* minimum free pool size for select/blocking mode */
+       int output_free;                /* unused size */
+       int input_free;                 /* unused size */
+       char reserved[64];
+};
+
+
+/* Remove events by specified criteria */
+
+#define SNDRV_SEQ_REMOVE_INPUT         (1<<0)  /* Flush input queues */
+#define SNDRV_SEQ_REMOVE_OUTPUT                (1<<1)  /* Flush output queues */
+#define SNDRV_SEQ_REMOVE_DEST          (1<<2)  /* Restrict by destination q:client:port */
+#define SNDRV_SEQ_REMOVE_DEST_CHANNEL  (1<<3)  /* Restrict by channel */
+#define SNDRV_SEQ_REMOVE_TIME_BEFORE   (1<<4)  /* Restrict to before time */
+#define SNDRV_SEQ_REMOVE_TIME_AFTER    (1<<5)  /* Restrict to time or after */
+#define SNDRV_SEQ_REMOVE_TIME_TICK     (1<<6)  /* Time is in ticks */
+#define SNDRV_SEQ_REMOVE_EVENT_TYPE    (1<<7)  /* Restrict to event type */
+#define SNDRV_SEQ_REMOVE_IGNORE_OFF    (1<<8)  /* Do not flush off events */
+#define SNDRV_SEQ_REMOVE_TAG_MATCH     (1<<9)  /* Restrict to events with given tag */
+
+struct snd_seq_remove_events {
+       unsigned int  remove_mode;      /* Flags that determine what gets removed */
+
+       union snd_seq_timestamp time;
+
+       unsigned char queue;    /* Queue for REMOVE_DEST */
+       struct snd_seq_addr dest;       /* Address for REMOVE_DEST */
+       unsigned char channel;  /* Channel for REMOVE_DEST */
+
+       int  type;      /* For REMOVE_EVENT_TYPE */
+       char  tag;      /* Tag for REMOVE_TAG */
+
+       int  reserved[10];      /* To allow for future binary compatibility */
+
+};
+
+
+       /* known port numbers */
+#define SNDRV_SEQ_PORT_SYSTEM_TIMER    0
+#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1
+
+       /* port capabilities (32 bits) */
+#define SNDRV_SEQ_PORT_CAP_READ                (1<<0)  /* readable from this port */
+#define SNDRV_SEQ_PORT_CAP_WRITE       (1<<1)  /* writable to this port */
+
+#define SNDRV_SEQ_PORT_CAP_SYNC_READ   (1<<2)
+#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE  (1<<3)
+
+#define SNDRV_SEQ_PORT_CAP_DUPLEX      (1<<4)
+
+#define SNDRV_SEQ_PORT_CAP_SUBS_READ   (1<<5)  /* allow read subscription */
+#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE  (1<<6)  /* allow write subscription */
+#define SNDRV_SEQ_PORT_CAP_NO_EXPORT   (1<<7)  /* routing not allowed */
+
+       /* port type */
+#define SNDRV_SEQ_PORT_TYPE_SPECIFIC   (1<<0)  /* hardware specific */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1)        /* generic MIDI device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM    (1<<2)  /* General MIDI compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GS    (1<<3)  /* GS compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_XG    (1<<4)  /* XG compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32  (1<<5)  /* MT-32 compatible device */
+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2   (1<<6)  /* General MIDI 2 compatible device */
+
+/* other standards...*/
+#define SNDRV_SEQ_PORT_TYPE_SYNTH      (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */
+#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11)      /* Sampling device (support sample download) */
+#define SNDRV_SEQ_PORT_TYPE_SAMPLE     (1<<12) /* Sampling device (sample can be downloaded at any time) */
+/*...*/
+#define SNDRV_SEQ_PORT_TYPE_HARDWARE   (1<<16) /* driver for a hardware device */
+#define SNDRV_SEQ_PORT_TYPE_SOFTWARE   (1<<17) /* implemented in software */
+#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER        (1<<18) /* generates sound */
+#define SNDRV_SEQ_PORT_TYPE_PORT       (1<<19) /* connects to other device(s) */
+#define SNDRV_SEQ_PORT_TYPE_APPLICATION        (1<<20) /* application (sequencer/editor) */
+
+/* misc. conditioning flags */
+#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT  (1<<0)
+#define SNDRV_SEQ_PORT_FLG_TIMESTAMP   (1<<1)
+#define SNDRV_SEQ_PORT_FLG_TIME_REAL   (1<<2)
+
+struct snd_seq_port_info {
+       struct snd_seq_addr addr;       /* client/port numbers */
+       char name[64];                  /* port name */
+
+       unsigned int capability;        /* port capability bits */
+       unsigned int type;              /* port type bits */
+       int midi_channels;              /* channels per MIDI port */
+       int midi_voices;                /* voices per MIDI port */
+       int synth_voices;               /* voices per SYNTH port */
+
+       int read_use;                   /* R/O: subscribers for output (from this port) */
+       int write_use;                  /* R/O: subscribers for input (to this port) */
+
+       void *kernel;                   /* reserved for kernel use (must be NULL) */
+       unsigned int flags;             /* misc. conditioning */
+       unsigned char time_queue;       /* queue # for timestamping */
+       char reserved[59];              /* for future use */
+};
+
+
+/* queue flags */
+#define SNDRV_SEQ_QUEUE_FLG_SYNC       (1<<0)  /* sync enabled */
+
+/* queue information */
+struct snd_seq_queue_info {
+       int queue;              /* queue id */
+
+       /*
+        *  security settings, only owner of this queue can start/stop timer
+        *  etc. if the queue is locked for other clients
+        */
+       int owner;              /* client id for owner of the queue */
+       unsigned locked:1;      /* timing queue locked for other queues */
+       char name[64];          /* name of this queue */
+       unsigned int flags;     /* flags */
+       char reserved[60];      /* for future use */
+
+};
+
+/* queue info/status */
+struct snd_seq_queue_status {
+       int queue;                      /* queue id */
+       int events;                     /* read-only - queue size */
+       snd_seq_tick_time_t tick;       /* current tick */
+       struct snd_seq_real_time time;  /* current time */
+       int running;                    /* running state of queue */
+       int flags;                      /* various flags */
+       char reserved[64];              /* for the future */
+};
+
+
+/* queue tempo */
+struct snd_seq_queue_tempo {
+       int queue;                      /* sequencer queue */
+       unsigned int tempo;             /* current tempo, us/tick */
+       int ppq;                        /* time resolution, ticks/quarter */
+       unsigned int skew_value;        /* queue skew */
+       unsigned int skew_base;         /* queue skew base */
+       char reserved[24];              /* for the future */
+};
+
+
+/* sequencer timer sources */
+#define SNDRV_SEQ_TIMER_ALSA           0       /* ALSA timer */
+#define SNDRV_SEQ_TIMER_MIDI_CLOCK     1       /* Midi Clock (CLOCK event) */
+#define SNDRV_SEQ_TIMER_MIDI_TICK      2       /* Midi Timer Tick (TICK event) */
+
+/* queue timer info */
+struct snd_seq_queue_timer {
+       int queue;                      /* sequencer queue */
+       int type;                       /* source timer type */
+       union {
+               struct {
+                       struct snd_timer_id id; /* ALSA's timer ID */
+                       unsigned int resolution;        /* resolution in Hz */
+               } alsa;
+       } u;
+       char reserved[64];              /* for the future use */
+};
+
+
+struct snd_seq_queue_client {
+       int queue;              /* sequencer queue */
+       int client;             /* sequencer client */
+       int used;               /* queue is used with this client
+                                  (must be set for accepting events) */
+       /* per client watermarks */
+       char reserved[64];      /* for future use */
+};
+
+
+#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE  (1<<0)  /* exclusive connection */
+#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP  (1<<1)
+#define SNDRV_SEQ_PORT_SUBS_TIME_REAL  (1<<2)
+
+struct snd_seq_port_subscribe {
+       struct snd_seq_addr sender;     /* sender address */
+       struct snd_seq_addr dest;       /* destination address */
+       unsigned int voices;            /* number of voices to be allocated (0 = don't care) */
+       unsigned int flags;             /* modes */
+       unsigned char queue;            /* input time-stamp queue (optional) */
+       unsigned char pad[3];           /* reserved */
+       char reserved[64];
+};
+
+/* type of query subscription */
+#define SNDRV_SEQ_QUERY_SUBS_READ      0
+#define SNDRV_SEQ_QUERY_SUBS_WRITE     1
+
+struct snd_seq_query_subs {
+       struct snd_seq_addr root;       /* client/port id to be searched */
+       int type;               /* READ or WRITE */
+       int index;              /* 0..N-1 */
+       int num_subs;           /* R/O: number of subscriptions on this port */
+       struct snd_seq_addr addr;       /* R/O: result */
+       unsigned char queue;    /* R/O: result */
+       unsigned int flags;     /* R/O: result */
+       char reserved[64];      /* for future use */
+};
+
+
+/*
+ *  IOCTL commands
+ */
+
+#define SNDRV_SEQ_IOCTL_PVERSION       _IOR ('S', 0x00, int)
+#define SNDRV_SEQ_IOCTL_CLIENT_ID      _IOR ('S', 0x01, int)
+#define SNDRV_SEQ_IOCTL_SYSTEM_INFO    _IOWR('S', 0x02, struct snd_seq_system_info)
+#define SNDRV_SEQ_IOCTL_RUNNING_MODE   _IOWR('S', 0x03, struct snd_seq_running_info)
+
+#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO        _IOWR('S', 0x10, struct snd_seq_client_info)
+#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO        _IOW ('S', 0x11, struct snd_seq_client_info)
+
+#define SNDRV_SEQ_IOCTL_CREATE_PORT    _IOWR('S', 0x20, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_DELETE_PORT    _IOW ('S', 0x21, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_GET_PORT_INFO  _IOWR('S', 0x22, struct snd_seq_port_info)
+#define SNDRV_SEQ_IOCTL_SET_PORT_INFO  _IOW ('S', 0x23, struct snd_seq_port_info)
+
+#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe)
+#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
+
+#define SNDRV_SEQ_IOCTL_CREATE_QUEUE   _IOWR('S', 0x32, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_DELETE_QUEUE   _IOW ('S', 0x33, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE        _IOWR('S', 0x36, struct snd_seq_queue_info)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO        _IOWR('S', 0x41, struct snd_seq_queue_tempo)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO        _IOW ('S', 0x42, struct snd_seq_queue_tempo)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_OWNER        _IOWR('S', 0x43, struct snd_seq_queue_owner)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_OWNER        _IOW ('S', 0x44, struct snd_seq_queue_owner)
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER        _IOWR('S', 0x45, struct snd_seq_queue_timer)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER        _IOW ('S', 0x46, struct snd_seq_queue_timer)
+/* XXX
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_SYNC _IOWR('S', 0x53, struct snd_seq_queue_sync)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_SYNC _IOW ('S', 0x54, struct snd_seq_queue_sync)
+*/
+#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT       _IOWR('S', 0x49, struct snd_seq_queue_client)
+#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT       _IOW ('S', 0x4a, struct snd_seq_queue_client)
+#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL        _IOWR('S', 0x4b, struct snd_seq_client_pool)
+#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL        _IOW ('S', 0x4c, struct snd_seq_client_pool)
+#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS  _IOW ('S', 0x4e, struct snd_seq_remove_events)
+#define SNDRV_SEQ_IOCTL_QUERY_SUBS     _IOWR('S', 0x4f, struct snd_seq_query_subs)
+#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION       _IOWR('S', 0x50, struct snd_seq_port_subscribe)
+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT      _IOWR('S', 0x51, struct snd_seq_client_info)
+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT        _IOWR('S', 0x52, struct snd_seq_port_info)
+
+#endif /* __SOUND_ASEQUENCER_H */
diff --git a/lib/libdss-include/sound/asound.h b/lib/libdss-include/sound/asound.h
new file mode 100644 (file)
index 0000000..f5f74e9
--- /dev/null
@@ -0,0 +1,1015 @@
+/*
+ *  Advanced Linux Sound Architecture - ALSA - Driver
+ *  Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
+ *                             Abramo Bagnara <abramo@alsa-project.org>
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#ifndef __SOUND_ASOUND_H
+#define __SOUND_ASOUND_H
+
+#include <linux/types.h>
+
+#include <stdlib.h>
+
+/*
+ *  protocol version
+ */
+
+#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
+#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
+#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
+#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
+#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
+       (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
+        (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
+          SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
+
+/****************************************************************************
+ *                                                                          *
+ *        Digital audio interface                                          *
+ *                                                                          *
+ ****************************************************************************/
+
+struct snd_aes_iec958 {
+       unsigned char status[24];       /* AES/IEC958 channel status bits */
+       unsigned char subcode[147];     /* AES/IEC958 subcode bits */
+       unsigned char pad;              /* nothing */
+       unsigned char dig_subframe[4];  /* AES/IEC958 subframe bits */
+};
+
+/****************************************************************************
+ *                                                                          *
+ *        CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort                    *
+ *                                                                          *
+ ****************************************************************************/
+
+struct snd_cea_861_aud_if {
+       unsigned char db1_ct_cc; /* coding type and channel count */
+       unsigned char db2_sf_ss; /* sample frequency and size */
+       unsigned char db3; /* not used, all zeros */
+       unsigned char db4_ca; /* channel allocation code */
+       unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */
+};
+
+/****************************************************************************
+ *                                                                          *
+ *      Section for driver hardware dependent interface - /dev/snd/hw?      *
+ *                                                                          *
+ ****************************************************************************/
+
+#define SNDRV_HWDEP_VERSION            SNDRV_PROTOCOL_VERSION(1, 0, 1)
+
+enum {
+       SNDRV_HWDEP_IFACE_OPL2 = 0,
+       SNDRV_HWDEP_IFACE_OPL3,
+       SNDRV_HWDEP_IFACE_OPL4,
+       SNDRV_HWDEP_IFACE_SB16CSP,      /* Creative Signal Processor */
+       SNDRV_HWDEP_IFACE_EMU10K1,      /* FX8010 processor in EMU10K1 chip */
+       SNDRV_HWDEP_IFACE_YSS225,       /* Yamaha FX processor */
+       SNDRV_HWDEP_IFACE_ICS2115,      /* Wavetable synth */
+       SNDRV_HWDEP_IFACE_SSCAPE,       /* Ensoniq SoundScape ISA card (MC68EC000) */
+       SNDRV_HWDEP_IFACE_VX,           /* Digigram VX cards */
+       SNDRV_HWDEP_IFACE_MIXART,       /* Digigram miXart cards */
+       SNDRV_HWDEP_IFACE_USX2Y,        /* Tascam US122, US224 & US428 usb */
+       SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */  
+       SNDRV_HWDEP_IFACE_BLUETOOTH,    /* Bluetooth audio */
+       SNDRV_HWDEP_IFACE_USX2Y_PCM,    /* Tascam US122, US224 & US428 rawusb pcm */
+       SNDRV_HWDEP_IFACE_PCXHR,        /* Digigram PCXHR */
+       SNDRV_HWDEP_IFACE_SB_RC,        /* SB Extigy/Audigy2NX remote control */
+       SNDRV_HWDEP_IFACE_HDA,          /* HD-audio */
+       SNDRV_HWDEP_IFACE_USB_STREAM,   /* direct access to usb stream */
+       SNDRV_HWDEP_IFACE_FW_DICE,      /* TC DICE FireWire device */
+       SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */
+       SNDRV_HWDEP_IFACE_FW_BEBOB,     /* BridgeCo BeBoB based device */
+       SNDRV_HWDEP_IFACE_FW_OXFW,      /* Oxford OXFW970/971 based device */
+       SNDRV_HWDEP_IFACE_FW_DIGI00X,   /* Digidesign Digi 002/003 family */
+       SNDRV_HWDEP_IFACE_FW_TASCAM,    /* TASCAM FireWire series */
+
+       /* Don't forget to change the following: */
+       SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_TASCAM
+};
+
+struct snd_hwdep_info {
+       unsigned int device;            /* WR: device number */
+       int card;                       /* R: card number */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* hwdep name */
+       int iface;                      /* hwdep interface */
+       unsigned char reserved[64];     /* reserved for future */
+};
+
+/* generic DSP loader */
+struct snd_hwdep_dsp_status {
+       unsigned int version;           /* R: driver-specific version */
+       unsigned char id[32];           /* R: driver-specific ID string */
+       unsigned int num_dsps;          /* R: number of DSP images to transfer */
+       unsigned int dsp_loaded;        /* R: bit flags indicating the loaded DSPs */
+       unsigned int chip_ready;        /* R: 1 = initialization finished */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+struct snd_hwdep_dsp_image {
+       unsigned int index;             /* W: DSP index */
+       unsigned char name[64];         /* W: ID (e.g. file name) */
+       unsigned char *image;   /* W: binary image */
+       size_t length;                  /* W: size of image in bytes */
+       unsigned long driver_data;      /* W: driver-specific data */
+};
+
+#define SNDRV_HWDEP_IOCTL_PVERSION     _IOR ('H', 0x00, int)
+#define SNDRV_HWDEP_IOCTL_INFO         _IOR ('H', 0x01, struct snd_hwdep_info)
+#define SNDRV_HWDEP_IOCTL_DSP_STATUS   _IOR('H', 0x02, struct snd_hwdep_dsp_status)
+#define SNDRV_HWDEP_IOCTL_DSP_LOAD     _IOW('H', 0x03, struct snd_hwdep_dsp_image)
+
+/*****************************************************************************
+ *                                                                           *
+ *             Digital Audio (PCM) interface - /dev/snd/pcm??                *
+ *                                                                           *
+ *****************************************************************************/
+
+#define SNDRV_PCM_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 13)
+
+typedef unsigned long snd_pcm_uframes_t;
+typedef signed long snd_pcm_sframes_t;
+
+enum {
+       SNDRV_PCM_CLASS_GENERIC = 0,    /* standard mono or stereo device */
+       SNDRV_PCM_CLASS_MULTI,          /* multichannel device */
+       SNDRV_PCM_CLASS_MODEM,          /* software modem class */
+       SNDRV_PCM_CLASS_DIGITIZER,      /* digitizer class */
+       /* Don't forget to change the following: */
+       SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
+};
+
+enum {
+       SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */
+       SNDRV_PCM_SUBCLASS_MULTI_MIX,   /* multichannel subdevices are mixed together */
+       /* Don't forget to change the following: */
+       SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
+};
+
+enum {
+       SNDRV_PCM_STREAM_PLAYBACK = 0,
+       SNDRV_PCM_STREAM_CAPTURE,
+       SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
+};
+
+typedef int __bitwise snd_pcm_access_t;
+#define        SNDRV_PCM_ACCESS_MMAP_INTERLEAVED       ((snd_pcm_access_t) 0) /* interleaved mmap */
+#define        SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED    ((snd_pcm_access_t) 1) /* noninterleaved mmap */
+#define        SNDRV_PCM_ACCESS_MMAP_COMPLEX           ((snd_pcm_access_t) 2) /* complex mmap */
+#define        SNDRV_PCM_ACCESS_RW_INTERLEAVED         ((snd_pcm_access_t) 3) /* readi/writei */
+#define        SNDRV_PCM_ACCESS_RW_NONINTERLEAVED      ((snd_pcm_access_t) 4) /* readn/writen */
+#define        SNDRV_PCM_ACCESS_LAST           SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
+
+typedef int __bitwise snd_pcm_format_t;
+#define        SNDRV_PCM_FORMAT_S8     ((snd_pcm_format_t) 0)
+#define        SNDRV_PCM_FORMAT_U8     ((snd_pcm_format_t) 1)
+#define        SNDRV_PCM_FORMAT_S16_LE ((snd_pcm_format_t) 2)
+#define        SNDRV_PCM_FORMAT_S16_BE ((snd_pcm_format_t) 3)
+#define        SNDRV_PCM_FORMAT_U16_LE ((snd_pcm_format_t) 4)
+#define        SNDRV_PCM_FORMAT_U16_BE ((snd_pcm_format_t) 5)
+#define        SNDRV_PCM_FORMAT_S24_LE ((snd_pcm_format_t) 6) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_S24_BE ((snd_pcm_format_t) 7) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_U24_LE ((snd_pcm_format_t) 8) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_U24_BE ((snd_pcm_format_t) 9) /* low three bytes */
+#define        SNDRV_PCM_FORMAT_S32_LE ((snd_pcm_format_t) 10)
+#define        SNDRV_PCM_FORMAT_S32_BE ((snd_pcm_format_t) 11)
+#define        SNDRV_PCM_FORMAT_U32_LE ((snd_pcm_format_t) 12)
+#define        SNDRV_PCM_FORMAT_U32_BE ((snd_pcm_format_t) 13)
+#define        SNDRV_PCM_FORMAT_FLOAT_LE       ((snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT_BE       ((snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT64_LE     ((snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_FLOAT64_BE     ((snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
+#define        SNDRV_PCM_FORMAT_MU_LAW         ((snd_pcm_format_t) 20)
+#define        SNDRV_PCM_FORMAT_A_LAW          ((snd_pcm_format_t) 21)
+#define        SNDRV_PCM_FORMAT_IMA_ADPCM      ((snd_pcm_format_t) 22)
+#define        SNDRV_PCM_FORMAT_MPEG           ((snd_pcm_format_t) 23)
+#define        SNDRV_PCM_FORMAT_GSM            ((snd_pcm_format_t) 24)
+#define        SNDRV_PCM_FORMAT_SPECIAL        ((snd_pcm_format_t) 31)
+#define        SNDRV_PCM_FORMAT_S24_3LE        ((snd_pcm_format_t) 32) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S24_3BE        ((snd_pcm_format_t) 33) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U24_3LE        ((snd_pcm_format_t) 34) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U24_3BE        ((snd_pcm_format_t) 35) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S20_3LE        ((snd_pcm_format_t) 36) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S20_3BE        ((snd_pcm_format_t) 37) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U20_3LE        ((snd_pcm_format_t) 38) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U20_3BE        ((snd_pcm_format_t) 39) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S18_3LE        ((snd_pcm_format_t) 40) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_S18_3BE        ((snd_pcm_format_t) 41) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U18_3LE        ((snd_pcm_format_t) 42) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_U18_3BE        ((snd_pcm_format_t) 43) /* in three bytes */
+#define        SNDRV_PCM_FORMAT_G723_24        ((snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
+#define        SNDRV_PCM_FORMAT_G723_24_1B     ((snd_pcm_format_t) 45) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_G723_40        ((snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
+#define        SNDRV_PCM_FORMAT_G723_40_1B     ((snd_pcm_format_t) 47) /* 1 sample in 1 byte */
+#define        SNDRV_PCM_FORMAT_DSD_U8         ((snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
+#define        SNDRV_PCM_FORMAT_DSD_U16_LE     ((snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
+#define        SNDRV_PCM_FORMAT_DSD_U32_LE     ((snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
+#define        SNDRV_PCM_FORMAT_DSD_U16_BE     ((snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
+#define        SNDRV_PCM_FORMAT_DSD_U32_BE     ((snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
+#define        SNDRV_PCM_FORMAT_LAST           SNDRV_PCM_FORMAT_DSD_U32_BE
+
+#ifdef SNDRV_LITTLE_ENDIAN
+#define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_LE
+#define        SNDRV_PCM_FORMAT_U16            SNDRV_PCM_FORMAT_U16_LE
+#define        SNDRV_PCM_FORMAT_S24            SNDRV_PCM_FORMAT_S24_LE
+#define        SNDRV_PCM_FORMAT_U24            SNDRV_PCM_FORMAT_U24_LE
+#define        SNDRV_PCM_FORMAT_S32            SNDRV_PCM_FORMAT_S32_LE
+#define        SNDRV_PCM_FORMAT_U32            SNDRV_PCM_FORMAT_U32_LE
+#define        SNDRV_PCM_FORMAT_FLOAT          SNDRV_PCM_FORMAT_FLOAT_LE
+#define        SNDRV_PCM_FORMAT_FLOAT64        SNDRV_PCM_FORMAT_FLOAT64_LE
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
+#endif
+#ifdef SNDRV_BIG_ENDIAN
+#define        SNDRV_PCM_FORMAT_S16            SNDRV_PCM_FORMAT_S16_BE
+#define        SNDRV_PCM_FORMAT_U16            SNDRV_PCM_FORMAT_U16_BE
+#define        SNDRV_PCM_FORMAT_S24            SNDRV_PCM_FORMAT_S24_BE
+#define        SNDRV_PCM_FORMAT_U24            SNDRV_PCM_FORMAT_U24_BE
+#define        SNDRV_PCM_FORMAT_S32            SNDRV_PCM_FORMAT_S32_BE
+#define        SNDRV_PCM_FORMAT_U32            SNDRV_PCM_FORMAT_U32_BE
+#define        SNDRV_PCM_FORMAT_FLOAT          SNDRV_PCM_FORMAT_FLOAT_BE
+#define        SNDRV_PCM_FORMAT_FLOAT64        SNDRV_PCM_FORMAT_FLOAT64_BE
+#define        SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
+#endif
+
+typedef int __bitwise snd_pcm_subformat_t;
+#define        SNDRV_PCM_SUBFORMAT_STD         ((snd_pcm_subformat_t) 0)
+#define        SNDRV_PCM_SUBFORMAT_LAST        SNDRV_PCM_SUBFORMAT_STD
+
+#define SNDRV_PCM_INFO_MMAP            0x00000001      /* hardware supports mmap */
+#define SNDRV_PCM_INFO_MMAP_VALID      0x00000002      /* period data are valid during transfer */
+#define SNDRV_PCM_INFO_DOUBLE          0x00000004      /* Double buffering needed for PCM start/stop */
+#define SNDRV_PCM_INFO_BATCH           0x00000010      /* double buffering */
+#define SNDRV_PCM_INFO_INTERLEAVED     0x00000100      /* channels are interleaved */
+#define SNDRV_PCM_INFO_NONINTERLEAVED  0x00000200      /* channels are not interleaved */
+#define SNDRV_PCM_INFO_COMPLEX         0x00000400      /* complex frame organization (mmap only) */
+#define SNDRV_PCM_INFO_BLOCK_TRANSFER  0x00010000      /* hardware transfer block of samples */
+#define SNDRV_PCM_INFO_OVERRANGE       0x00020000      /* hardware supports ADC (capture) overrange detection */
+#define SNDRV_PCM_INFO_RESUME          0x00040000      /* hardware supports stream resume after suspend */
+#define SNDRV_PCM_INFO_PAUSE           0x00080000      /* pause ioctl is supported */
+#define SNDRV_PCM_INFO_HALF_DUPLEX     0x00100000      /* only half duplex */
+#define SNDRV_PCM_INFO_JOINT_DUPLEX    0x00200000      /* playback and capture stream are somewhat correlated */
+#define SNDRV_PCM_INFO_SYNC_START      0x00400000      /* pcm support some kind of sync go */
+#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP        0x00800000      /* period wakeup can be disabled */
+#define SNDRV_PCM_INFO_HAS_WALL_CLOCK   0x01000000      /* (Deprecated)has audio wall clock for audio/system time sync */
+#define SNDRV_PCM_INFO_HAS_LINK_ATIME              0x01000000  /* report hardware link audio time, reset on startup */
+#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME     0x02000000  /* report absolute hardware link audio time, not reset on startup */
+#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME    0x04000000  /* report estimated link audio time */
+#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000  /* report synchronized audio/system time */
+
+#define SNDRV_PCM_INFO_DRAIN_TRIGGER   0x40000000              /* internal kernel flag - trigger in drain */
+#define SNDRV_PCM_INFO_FIFO_IN_FRAMES  0x80000000      /* internal kernel flag - FIFO size is in frames */
+
+
+
+typedef int __bitwise snd_pcm_state_t;
+#define        SNDRV_PCM_STATE_OPEN            ((snd_pcm_state_t) 0) /* stream is open */
+#define        SNDRV_PCM_STATE_SETUP           ((snd_pcm_state_t) 1) /* stream has a setup */
+#define        SNDRV_PCM_STATE_PREPARED        ((snd_pcm_state_t) 2) /* stream is ready to start */
+#define        SNDRV_PCM_STATE_RUNNING         ((snd_pcm_state_t) 3) /* stream is running */
+#define        SNDRV_PCM_STATE_XRUN            ((snd_pcm_state_t) 4) /* stream reached an xrun */
+#define        SNDRV_PCM_STATE_DRAINING        ((snd_pcm_state_t) 5) /* stream is draining */
+#define        SNDRV_PCM_STATE_PAUSED          ((snd_pcm_state_t) 6) /* stream is paused */
+#define        SNDRV_PCM_STATE_SUSPENDED       ((snd_pcm_state_t) 7) /* hardware is suspended */
+#define        SNDRV_PCM_STATE_DISCONNECTED    ((snd_pcm_state_t) 8) /* hardware is disconnected */
+#define        SNDRV_PCM_STATE_LAST            SNDRV_PCM_STATE_DISCONNECTED
+
+enum {
+       SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
+       SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
+       SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
+};
+
+union snd_pcm_sync_id {
+       unsigned char id[16];
+       unsigned short id16[8];
+       unsigned int id32[4];
+};
+
+struct snd_pcm_info {
+       unsigned int device;            /* RO/WR (control): device number */
+       unsigned int subdevice;         /* RO/WR (control): subdevice number */
+       int stream;                     /* RO/WR (control): stream direction */
+       int card;                       /* R: card number */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* name of this device */
+       unsigned char subname[32];      /* subdevice name */
+       int dev_class;                  /* SNDRV_PCM_CLASS_* */
+       int dev_subclass;               /* SNDRV_PCM_SUBCLASS_* */
+       unsigned int subdevices_count;
+       unsigned int subdevices_avail;
+       union snd_pcm_sync_id sync;     /* hardware synchronization ID */
+       unsigned char reserved[64];     /* reserved for future... */
+};
+
+typedef int snd_pcm_hw_param_t;
+#define        SNDRV_PCM_HW_PARAM_ACCESS       0       /* Access type */
+#define        SNDRV_PCM_HW_PARAM_FORMAT       1       /* Format */
+#define        SNDRV_PCM_HW_PARAM_SUBFORMAT    2       /* Subformat */
+#define        SNDRV_PCM_HW_PARAM_FIRST_MASK   SNDRV_PCM_HW_PARAM_ACCESS
+#define        SNDRV_PCM_HW_PARAM_LAST_MASK    SNDRV_PCM_HW_PARAM_SUBFORMAT
+
+#define        SNDRV_PCM_HW_PARAM_SAMPLE_BITS  8       /* Bits per sample */
+#define        SNDRV_PCM_HW_PARAM_FRAME_BITS   9       /* Bits per frame */
+#define        SNDRV_PCM_HW_PARAM_CHANNELS     10      /* Channels */
+#define        SNDRV_PCM_HW_PARAM_RATE         11      /* Approx rate */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_TIME  12      /* Approx distance between
+                                                * interrupts in us
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_SIZE  13      /* Approx frames between
+                                                * interrupts
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14      /* Approx bytes between
+                                                * interrupts
+                                                */
+#define        SNDRV_PCM_HW_PARAM_PERIODS      15      /* Approx interrupts per
+                                                * buffer
+                                                */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_TIME  16      /* Approx duration of buffer
+                                                * in us
+                                                */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_SIZE  17      /* Size of buffer in frames */
+#define        SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18      /* Size of buffer in bytes */
+#define        SNDRV_PCM_HW_PARAM_TICK_TIME    19      /* Approx tick duration in us */
+#define        SNDRV_PCM_HW_PARAM_FIRST_INTERVAL       SNDRV_PCM_HW_PARAM_SAMPLE_BITS
+#define        SNDRV_PCM_HW_PARAM_LAST_INTERVAL        SNDRV_PCM_HW_PARAM_TICK_TIME
+
+#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0)  /* avoid rate resampling */
+#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER      (1<<1)  /* export buffer */
+#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP   (1<<2)  /* disable period wakeups */
+
+struct snd_interval {
+       unsigned int min, max;
+       unsigned int openmin:1,
+                    openmax:1,
+                    integer:1,
+                    empty:1;
+};
+
+#define SNDRV_MASK_MAX 256
+
+struct snd_mask {
+       __u32 bits[(SNDRV_MASK_MAX+31)/32];
+};
+
+struct snd_pcm_hw_params {
+       unsigned int flags;
+       struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK - 
+                              SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
+       struct snd_mask mres[5];        /* reserved masks */
+       struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
+                                       SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
+       struct snd_interval ires[9];    /* reserved intervals */
+       unsigned int rmask;             /* W: requested masks */
+       unsigned int cmask;             /* R: changed masks */
+       unsigned int info;              /* R: Info flags for returned setup */
+       unsigned int msbits;            /* R: used most significant bits */
+       unsigned int rate_num;          /* R: rate numerator */
+       unsigned int rate_den;          /* R: rate denominator */
+       snd_pcm_uframes_t fifo_size;    /* R: chip FIFO size in frames */
+       unsigned char reserved[64];     /* reserved for future */
+};
+
+enum {
+       SNDRV_PCM_TSTAMP_NONE = 0,
+       SNDRV_PCM_TSTAMP_ENABLE,
+       SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
+};
+
+struct snd_pcm_sw_params {
+       int tstamp_mode;                        /* timestamp mode */
+       unsigned int period_step;
+       unsigned int sleep_min;                 /* min ticks to sleep */
+       snd_pcm_uframes_t avail_min;            /* min avail frames for wakeup */
+       snd_pcm_uframes_t xfer_align;           /* obsolete: xfer size need to be a multiple */
+       snd_pcm_uframes_t start_threshold;      /* min hw_avail frames for automatic start */
+       snd_pcm_uframes_t stop_threshold;       /* min avail frames for automatic stop */
+       snd_pcm_uframes_t silence_threshold;    /* min distance from noise for silence filling */
+       snd_pcm_uframes_t silence_size;         /* silence block size */
+       snd_pcm_uframes_t boundary;             /* pointers wrap point */
+       unsigned int proto;                     /* protocol version */
+       unsigned int tstamp_type;               /* timestamp type (req. proto >= 2.0.12) */
+       unsigned char reserved[56];             /* reserved for future */
+};
+
+struct snd_pcm_channel_info {
+       unsigned int channel;
+       __kernel_off_t offset;          /* mmap offset */
+       unsigned int first;             /* offset to first sample in bits */
+       unsigned int step;              /* samples distance in bits */
+};
+
+enum {
+       /*
+        *  first definition for backwards compatibility only,
+        *  maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else
+        */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
+
+       /* timestamp definitions */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1,           /* DMA time, reported as per hw_ptr */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2,              /* link time reported by sample or wallclock counter, reset on startup */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3,     /* link time reported by sample or wallclock counter, not reset on startup */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4,    /* link time estimated indirectly */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */
+       SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
+};
+
+struct snd_pcm_status {
+       snd_pcm_state_t state;          /* stream state */
+       struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
+       struct timespec tstamp;         /* reference timestamp */
+       snd_pcm_uframes_t appl_ptr;     /* appl ptr */
+       snd_pcm_uframes_t hw_ptr;       /* hw ptr */
+       snd_pcm_sframes_t delay;        /* current delay in frames */
+       snd_pcm_uframes_t avail;        /* number of frames available */
+       snd_pcm_uframes_t avail_max;    /* max frames available on hw since last status */
+       snd_pcm_uframes_t overrange;    /* count of ADC (capture) overrange detections from last status */
+       snd_pcm_state_t suspended_state; /* suspended stream state */
+       __u32 audio_tstamp_data;         /* needed for 64-bit alignment, used for configs/report to/from userspace */
+       struct timespec audio_tstamp;   /* sample counter, wall clock, PHC or on-demand sync'ed */
+       struct timespec driver_tstamp;  /* useful in case reference system tstamp is reported with delay */
+       __u32 audio_tstamp_accuracy;    /* in ns units, only valid if indicated in audio_tstamp_data */
+       unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
+};
+
+struct snd_pcm_mmap_status {
+       snd_pcm_state_t state;          /* RO: state - SNDRV_PCM_STATE_XXXX */
+       int pad1;                       /* Needed for 64 bit alignment */
+       snd_pcm_uframes_t hw_ptr;       /* RO: hw ptr (0...boundary-1) */
+       struct timespec tstamp;         /* Timestamp */
+       snd_pcm_state_t suspended_state; /* RO: suspended stream state */
+       struct timespec audio_tstamp;   /* from sample counter or wall clock */
+};
+
+struct snd_pcm_mmap_control {
+       snd_pcm_uframes_t appl_ptr;     /* RW: appl ptr (0...boundary-1) */
+       snd_pcm_uframes_t avail_min;    /* RW: min available frames for wakeup */
+};
+
+#define SNDRV_PCM_SYNC_PTR_HWSYNC      (1<<0)  /* execute hwsync */
+#define SNDRV_PCM_SYNC_PTR_APPL                (1<<1)  /* get appl_ptr from driver (r/w op) */
+#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN   (1<<2)  /* get avail_min from driver */
+
+struct snd_pcm_sync_ptr {
+       unsigned int flags;
+       union {
+               struct snd_pcm_mmap_status status;
+               unsigned char reserved[64];
+       } s;
+       union {
+               struct snd_pcm_mmap_control control;
+               unsigned char reserved[64];
+       } c;
+};
+
+struct snd_xferi {
+       snd_pcm_sframes_t result;
+       void *buf;
+       snd_pcm_uframes_t frames;
+};
+
+struct snd_xfern {
+       snd_pcm_sframes_t result;
+       void * *bufs;
+       snd_pcm_uframes_t frames;
+};
+
+enum {
+       SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */
+       SNDRV_PCM_TSTAMP_TYPE_MONOTONIC,        /* posix_clock_monotonic equivalent */
+       SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,    /* monotonic_raw (no NTP) */
+       SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,
+};
+
+/* channel positions */
+enum {
+       SNDRV_CHMAP_UNKNOWN = 0,
+       SNDRV_CHMAP_NA,         /* N/A, silent */
+       SNDRV_CHMAP_MONO,       /* mono stream */
+       /* this follows the alsa-lib mixer channel value + 3 */
+       SNDRV_CHMAP_FL,         /* front left */
+       SNDRV_CHMAP_FR,         /* front right */
+       SNDRV_CHMAP_RL,         /* rear left */
+       SNDRV_CHMAP_RR,         /* rear right */
+       SNDRV_CHMAP_FC,         /* front center */
+       SNDRV_CHMAP_LFE,        /* LFE */
+       SNDRV_CHMAP_SL,         /* side left */
+       SNDRV_CHMAP_SR,         /* side right */
+       SNDRV_CHMAP_RC,         /* rear center */
+       /* new definitions */
+       SNDRV_CHMAP_FLC,        /* front left center */
+       SNDRV_CHMAP_FRC,        /* front right center */
+       SNDRV_CHMAP_RLC,        /* rear left center */
+       SNDRV_CHMAP_RRC,        /* rear right center */
+       SNDRV_CHMAP_FLW,        /* front left wide */
+       SNDRV_CHMAP_FRW,        /* front right wide */
+       SNDRV_CHMAP_FLH,        /* front left high */
+       SNDRV_CHMAP_FCH,        /* front center high */
+       SNDRV_CHMAP_FRH,        /* front right high */
+       SNDRV_CHMAP_TC,         /* top center */
+       SNDRV_CHMAP_TFL,        /* top front left */
+       SNDRV_CHMAP_TFR,        /* top front right */
+       SNDRV_CHMAP_TFC,        /* top front center */
+       SNDRV_CHMAP_TRL,        /* top rear left */
+       SNDRV_CHMAP_TRR,        /* top rear right */
+       SNDRV_CHMAP_TRC,        /* top rear center */
+       /* new definitions for UAC2 */
+       SNDRV_CHMAP_TFLC,       /* top front left center */
+       SNDRV_CHMAP_TFRC,       /* top front right center */
+       SNDRV_CHMAP_TSL,        /* top side left */
+       SNDRV_CHMAP_TSR,        /* top side right */
+       SNDRV_CHMAP_LLFE,       /* left LFE */
+       SNDRV_CHMAP_RLFE,       /* right LFE */
+       SNDRV_CHMAP_BC,         /* bottom center */
+       SNDRV_CHMAP_BLC,        /* bottom left center */
+       SNDRV_CHMAP_BRC,        /* bottom right center */
+       SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC,
+};
+
+#define SNDRV_CHMAP_POSITION_MASK      0xffff
+#define SNDRV_CHMAP_PHASE_INVERSE      (0x01 << 16)
+#define SNDRV_CHMAP_DRIVER_SPEC                (0x02 << 16)
+
+#define SNDRV_PCM_IOCTL_PVERSION       _IOR('A', 0x00, int)
+#define SNDRV_PCM_IOCTL_INFO           _IOR('A', 0x01, struct snd_pcm_info)
+#define SNDRV_PCM_IOCTL_TSTAMP         _IOW('A', 0x02, int)
+#define SNDRV_PCM_IOCTL_TTSTAMP                _IOW('A', 0x03, int)
+#define SNDRV_PCM_IOCTL_HW_REFINE      _IOWR('A', 0x10, struct snd_pcm_hw_params)
+#define SNDRV_PCM_IOCTL_HW_PARAMS      _IOWR('A', 0x11, struct snd_pcm_hw_params)
+#define SNDRV_PCM_IOCTL_HW_FREE                _IO('A', 0x12)
+#define SNDRV_PCM_IOCTL_SW_PARAMS      _IOWR('A', 0x13, struct snd_pcm_sw_params)
+#define SNDRV_PCM_IOCTL_STATUS         _IOR('A', 0x20, struct snd_pcm_status)
+#define SNDRV_PCM_IOCTL_DELAY          _IOR('A', 0x21, snd_pcm_sframes_t)
+#define SNDRV_PCM_IOCTL_HWSYNC         _IO('A', 0x22)
+#define SNDRV_PCM_IOCTL_SYNC_PTR       _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
+#define SNDRV_PCM_IOCTL_STATUS_EXT     _IOWR('A', 0x24, struct snd_pcm_status)
+#define SNDRV_PCM_IOCTL_CHANNEL_INFO   _IOR('A', 0x32, struct snd_pcm_channel_info)
+#define SNDRV_PCM_IOCTL_PREPARE                _IO('A', 0x40)
+#define SNDRV_PCM_IOCTL_RESET          _IO('A', 0x41)
+#define SNDRV_PCM_IOCTL_START          _IO('A', 0x42)
+#define SNDRV_PCM_IOCTL_DROP           _IO('A', 0x43)
+#define SNDRV_PCM_IOCTL_DRAIN          _IO('A', 0x44)
+#define SNDRV_PCM_IOCTL_PAUSE          _IOW('A', 0x45, int)
+#define SNDRV_PCM_IOCTL_REWIND         _IOW('A', 0x46, snd_pcm_uframes_t)
+#define SNDRV_PCM_IOCTL_RESUME         _IO('A', 0x47)
+#define SNDRV_PCM_IOCTL_XRUN           _IO('A', 0x48)
+#define SNDRV_PCM_IOCTL_FORWARD                _IOW('A', 0x49, snd_pcm_uframes_t)
+#define SNDRV_PCM_IOCTL_WRITEI_FRAMES  _IOW('A', 0x50, struct snd_xferi)
+#define SNDRV_PCM_IOCTL_READI_FRAMES   _IOR('A', 0x51, struct snd_xferi)
+#define SNDRV_PCM_IOCTL_WRITEN_FRAMES  _IOW('A', 0x52, struct snd_xfern)
+#define SNDRV_PCM_IOCTL_READN_FRAMES   _IOR('A', 0x53, struct snd_xfern)
+#define SNDRV_PCM_IOCTL_LINK           _IOW('A', 0x60, int)
+#define SNDRV_PCM_IOCTL_UNLINK         _IO('A', 0x61)
+
+/*****************************************************************************
+ *                                                                           *
+ *                            MIDI v1.0 interface                            *
+ *                                                                           *
+ *****************************************************************************/
+
+/*
+ *  Raw MIDI section - /dev/snd/midi??
+ */
+
+#define SNDRV_RAWMIDI_VERSION          SNDRV_PROTOCOL_VERSION(2, 0, 0)
+
+enum {
+       SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
+       SNDRV_RAWMIDI_STREAM_INPUT,
+       SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
+};
+
+#define SNDRV_RAWMIDI_INFO_OUTPUT              0x00000001
+#define SNDRV_RAWMIDI_INFO_INPUT               0x00000002
+#define SNDRV_RAWMIDI_INFO_DUPLEX              0x00000004
+
+struct snd_rawmidi_info {
+       unsigned int device;            /* RO/WR (control): device number */
+       unsigned int subdevice;         /* RO/WR (control): subdevice number */
+       int stream;                     /* WR: stream */
+       int card;                       /* R: card number */
+       unsigned int flags;             /* SNDRV_RAWMIDI_INFO_XXXX */
+       unsigned char id[64];           /* ID (user selectable) */
+       unsigned char name[80];         /* name of device */
+       unsigned char subname[32];      /* name of active or selected subdevice */
+       unsigned int subdevices_count;
+       unsigned int subdevices_avail;
+       unsigned char reserved[64];     /* reserved for future use */
+};
+
+struct snd_rawmidi_params {
+       int stream;
+       size_t buffer_size;             /* queue size in bytes */
+       size_t avail_min;               /* minimum avail bytes for wakeup */
+       unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+struct snd_rawmidi_status {
+       int stream;
+       struct timespec tstamp;         /* Timestamp */
+       size_t avail;                   /* available bytes */
+       size_t xruns;                   /* count of overruns since last status (in bytes) */
+       unsigned char reserved[16];     /* reserved for future use */
+};
+
+#define SNDRV_RAWMIDI_IOCTL_PVERSION   _IOR('W', 0x00, int)
+#define SNDRV_RAWMIDI_IOCTL_INFO       _IOR('W', 0x01, struct snd_rawmidi_info)
+#define SNDRV_RAWMIDI_IOCTL_PARAMS     _IOWR('W', 0x10, struct snd_rawmidi_params)
+#define SNDRV_RAWMIDI_IOCTL_STATUS     _IOWR('W', 0x20, struct snd_rawmidi_status)
+#define SNDRV_RAWMIDI_IOCTL_DROP       _IOW('W', 0x30, int)
+#define SNDRV_RAWMIDI_IOCTL_DRAIN      _IOW('W', 0x31, int)
+
+/*
+ *  Timer section - /dev/snd/timer
+ */
+
+#define SNDRV_TIMER_VERSION            SNDRV_PROTOCOL_VERSION(2, 0, 6)
+
+enum {
+       SNDRV_TIMER_CLASS_NONE = -1,
+       SNDRV_TIMER_CLASS_SLAVE = 0,
+       SNDRV_TIMER_CLASS_GLOBAL,
+       SNDRV_TIMER_CLASS_CARD,
+       SNDRV_TIMER_CLASS_PCM,
+       SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
+};
+
+/* slave timer classes */
+enum {
+       SNDRV_TIMER_SCLASS_NONE = 0,
+       SNDRV_TIMER_SCLASS_APPLICATION,
+       SNDRV_TIMER_SCLASS_SEQUENCER,           /* alias */
+       SNDRV_TIMER_SCLASS_OSS_SEQUENCER,       /* alias */
+       SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
+};
+
+/* global timers (device member) */
+#define SNDRV_TIMER_GLOBAL_SYSTEM      0
+#define SNDRV_TIMER_GLOBAL_RTC         1
+#define SNDRV_TIMER_GLOBAL_HPET                2
+#define SNDRV_TIMER_GLOBAL_HRTIMER     3
+
+/* info flags */
+#define SNDRV_TIMER_FLG_SLAVE          (1<<0)  /* cannot be controlled */
+
+struct snd_timer_id {
+       int dev_class;
+       int dev_sclass;
+       int card;
+       int device;
+       int subdevice;
+};
+
+struct snd_timer_ginfo {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned int flags;             /* timer flags - SNDRV_TIMER_FLG_* */
+       int card;                       /* card number */
+       unsigned char id[64];           /* timer identification */
+       unsigned char name[80];         /* timer name */
+       unsigned long reserved0;        /* reserved for future use */
+       unsigned long resolution;       /* average period resolution in ns */
+       unsigned long resolution_min;   /* minimal period resolution in ns */
+       unsigned long resolution_max;   /* maximal period resolution in ns */
+       unsigned int clients;           /* active timer clients */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_gparams {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned long period_num;       /* requested precise period duration (in seconds) - numerator */
+       unsigned long period_den;       /* requested precise period duration (in seconds) - denominator */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_gstatus {
+       struct snd_timer_id tid;        /* requested timer ID */
+       unsigned long resolution;       /* current period resolution in ns */
+       unsigned long resolution_num;   /* precise current period resolution (in seconds) - numerator */
+       unsigned long resolution_den;   /* precise current period resolution (in seconds) - denominator */
+       unsigned char reserved[32];
+};
+
+struct snd_timer_select {
+       struct snd_timer_id id; /* bind to timer ID */
+       unsigned char reserved[32];     /* reserved */
+};
+
+struct snd_timer_info {
+       unsigned int flags;             /* timer flags - SNDRV_TIMER_FLG_* */
+       int card;                       /* card number */
+       unsigned char id[64];           /* timer identificator */
+       unsigned char name[80];         /* timer name */
+       unsigned long reserved0;        /* reserved for future use */
+       unsigned long resolution;       /* average period resolution in ns */
+       unsigned char reserved[64];     /* reserved */
+};
+
+#define SNDRV_TIMER_PSFLG_AUTO         (1<<0)  /* auto start, otherwise one-shot */
+#define SNDRV_TIMER_PSFLG_EXCLUSIVE    (1<<1)  /* exclusive use, precise start/stop/pause/continue */
+#define SNDRV_TIMER_PSFLG_EARLY_EVENT  (1<<2)  /* write early event to the poll queue */
+
+struct snd_timer_params {
+       unsigned int flags;             /* flags - SNDRV_MIXER_PSFLG_* */
+       unsigned int ticks;             /* requested resolution in ticks */
+       unsigned int queue_size;        /* total size of queue (32-1024) */
+       unsigned int reserved0;         /* reserved, was: failure locations */
+       unsigned int filter;            /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */
+       unsigned char reserved[60];     /* reserved */
+};
+
+struct snd_timer_status {
+       struct timespec tstamp;         /* Timestamp - last update */
+       unsigned int resolution;        /* current period resolution in ns */
+       unsigned int lost;              /* counter of master tick lost */
+       unsigned int overrun;           /* count of read queue overruns */
+       unsigned int queue;             /* used queue size */
+       unsigned char reserved[64];     /* reserved */
+};
+
+#define SNDRV_TIMER_IOCTL_PVERSION     _IOR('T', 0x00, int)
+#define SNDRV_TIMER_IOCTL_NEXT_DEVICE  _IOWR('T', 0x01, struct snd_timer_id)
+#define SNDRV_TIMER_IOCTL_TREAD                _IOW('T', 0x02, int)
+#define SNDRV_TIMER_IOCTL_GINFO                _IOWR('T', 0x03, struct snd_timer_ginfo)
+#define SNDRV_TIMER_IOCTL_GPARAMS      _IOW('T', 0x04, struct snd_timer_gparams)
+#define SNDRV_TIMER_IOCTL_GSTATUS      _IOWR('T', 0x05, struct snd_timer_gstatus)
+#define SNDRV_TIMER_IOCTL_SELECT       _IOW('T', 0x10, struct snd_timer_select)
+#define SNDRV_TIMER_IOCTL_INFO         _IOR('T', 0x11, struct snd_timer_info)
+#define SNDRV_TIMER_IOCTL_PARAMS       _IOW('T', 0x12, struct snd_timer_params)
+#define SNDRV_TIMER_IOCTL_STATUS       _IOR('T', 0x14, struct snd_timer_status)
+/* The following four ioctls are changed since 1.0.9 due to confliction */
+#define SNDRV_TIMER_IOCTL_START                _IO('T', 0xa0)
+#define SNDRV_TIMER_IOCTL_STOP         _IO('T', 0xa1)
+#define SNDRV_TIMER_IOCTL_CONTINUE     _IO('T', 0xa2)
+#define SNDRV_TIMER_IOCTL_PAUSE                _IO('T', 0xa3)
+
+struct snd_timer_read {
+       unsigned int resolution;
+       unsigned int ticks;
+};
+
+enum {
+       SNDRV_TIMER_EVENT_RESOLUTION = 0,       /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_TICK,                 /* val = ticks */
+       SNDRV_TIMER_EVENT_START,                /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_STOP,                 /* val = 0 */
+       SNDRV_TIMER_EVENT_CONTINUE,             /* val = resolution in ns */
+       SNDRV_TIMER_EVENT_PAUSE,                /* val = 0 */
+       SNDRV_TIMER_EVENT_EARLY,                /* val = 0, early event */
+       SNDRV_TIMER_EVENT_SUSPEND,              /* val = 0 */
+       SNDRV_TIMER_EVENT_RESUME,               /* val = resolution in ns */
+       /* master timer events for slave timer instances */
+       SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
+       SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
+       SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
+       SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
+       SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
+       SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
+};
+
+struct snd_timer_tread {
+       int event;
+       struct timespec tstamp;
+       unsigned int val;
+};
+
+/****************************************************************************
+ *                                                                          *
+ *        Section for driver control interface - /dev/snd/control?          *
+ *                                                                          *
+ ****************************************************************************/
+
+#define SNDRV_CTL_VERSION              SNDRV_PROTOCOL_VERSION(2, 0, 7)
+
+struct snd_ctl_card_info {
+       int card;                       /* card number */
+       int pad;                        /* reserved for future (was type) */
+       unsigned char id[16];           /* ID of card (user selectable) */
+       unsigned char driver[16];       /* Driver name */
+       unsigned char name[32];         /* Short name of soundcard */
+       unsigned char longname[80];     /* name + info text about soundcard */
+       unsigned char reserved_[16];    /* reserved for future (was ID of mixer) */
+       unsigned char mixername[80];    /* visual mixer identification */
+       unsigned char components[128];  /* card components / fine identification, delimited with one space (AC97 etc..) */
+};
+
+typedef int __bitwise snd_ctl_elem_type_t;
+#define        SNDRV_CTL_ELEM_TYPE_NONE        ((snd_ctl_elem_type_t) 0) /* invalid */
+#define        SNDRV_CTL_ELEM_TYPE_BOOLEAN     ((snd_ctl_elem_type_t) 1) /* boolean type */
+#define        SNDRV_CTL_ELEM_TYPE_INTEGER     ((snd_ctl_elem_type_t) 2) /* integer type */
+#define        SNDRV_CTL_ELEM_TYPE_ENUMERATED  ((snd_ctl_elem_type_t) 3) /* enumerated type */
+#define        SNDRV_CTL_ELEM_TYPE_BYTES       ((snd_ctl_elem_type_t) 4) /* byte array */
+#define        SNDRV_CTL_ELEM_TYPE_IEC958      ((snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
+#define        SNDRV_CTL_ELEM_TYPE_INTEGER64   ((snd_ctl_elem_type_t) 6) /* 64-bit integer type */
+#define        SNDRV_CTL_ELEM_TYPE_LAST        SNDRV_CTL_ELEM_TYPE_INTEGER64
+
+typedef int __bitwise snd_ctl_elem_iface_t;
+#define        SNDRV_CTL_ELEM_IFACE_CARD       ((snd_ctl_elem_iface_t) 0) /* global control */
+#define        SNDRV_CTL_ELEM_IFACE_HWDEP      ((snd_ctl_elem_iface_t) 1) /* hardware dependent device */
+#define        SNDRV_CTL_ELEM_IFACE_MIXER      ((snd_ctl_elem_iface_t) 2) /* virtual mixer device */
+#define        SNDRV_CTL_ELEM_IFACE_PCM        ((snd_ctl_elem_iface_t) 3) /* PCM device */
+#define        SNDRV_CTL_ELEM_IFACE_RAWMIDI    ((snd_ctl_elem_iface_t) 4) /* RawMidi device */
+#define        SNDRV_CTL_ELEM_IFACE_TIMER      ((snd_ctl_elem_iface_t) 5) /* timer device */
+#define        SNDRV_CTL_ELEM_IFACE_SEQUENCER  ((snd_ctl_elem_iface_t) 6) /* sequencer client */
+#define        SNDRV_CTL_ELEM_IFACE_LAST       SNDRV_CTL_ELEM_IFACE_SEQUENCER
+
+#define SNDRV_CTL_ELEM_ACCESS_READ             (1<<0)
+#define SNDRV_CTL_ELEM_ACCESS_WRITE            (1<<1)
+#define SNDRV_CTL_ELEM_ACCESS_READWRITE                (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
+#define SNDRV_CTL_ELEM_ACCESS_VOLATILE         (1<<2)  /* control value may be changed without a notification */
+#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP                (1<<3)  /* when was control changed */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_READ         (1<<4)  /* TLV read is possible */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE                (1<<5)  /* TLV write is possible */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE    (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
+#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND      (1<<6)  /* TLV command is possible */
+#define SNDRV_CTL_ELEM_ACCESS_INACTIVE         (1<<8)  /* control does actually nothing, but may be updated */
+#define SNDRV_CTL_ELEM_ACCESS_LOCK             (1<<9)  /* write lock */
+#define SNDRV_CTL_ELEM_ACCESS_OWNER            (1<<10) /* write lock owner */
+#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK     (1<<28) /* kernel use a TLV callback */ 
+#define SNDRV_CTL_ELEM_ACCESS_USER             (1<<29) /* user space element */
+/* bits 30 and 31 are obsoleted (for indirect access) */
+
+/* for further details see the ACPI and PCI power management specification */
+#define SNDRV_CTL_POWER_D0             0x0000  /* full On */
+#define SNDRV_CTL_POWER_D1             0x0100  /* partial On */
+#define SNDRV_CTL_POWER_D2             0x0200  /* partial On */
+#define SNDRV_CTL_POWER_D3             0x0300  /* Off */
+#define SNDRV_CTL_POWER_D3hot          (SNDRV_CTL_POWER_D3|0x0000)     /* Off, with power */
+#define SNDRV_CTL_POWER_D3cold         (SNDRV_CTL_POWER_D3|0x0001)     /* Off, without power */
+
+#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN  44
+
+struct snd_ctl_elem_id {
+       unsigned int numid;             /* numeric identifier, zero = invalid */
+       snd_ctl_elem_iface_t iface;     /* interface identifier */
+       unsigned int device;            /* device/client number */
+       unsigned int subdevice;         /* subdevice (substream) number */
+       unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];              /* ASCII name of item */
+       unsigned int index;             /* index of item */
+};
+
+struct snd_ctl_elem_list {
+       unsigned int offset;            /* W: first element ID to get */
+       unsigned int space;             /* W: count of element IDs to get */
+       unsigned int used;              /* R: count of element IDs set */
+       unsigned int count;             /* R: count of all elements */
+       struct snd_ctl_elem_id *pids; /* R: IDs */
+       unsigned char reserved[50];
+};
+
+struct snd_ctl_elem_info {
+       struct snd_ctl_elem_id id;      /* W: element ID */
+       snd_ctl_elem_type_t type;       /* R: value type - SNDRV_CTL_ELEM_TYPE_* */
+       unsigned int access;            /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */
+       unsigned int count;             /* count of values */
+       __kernel_pid_t owner;           /* owner's PID of this control */
+       union {
+               struct {
+                       long min;               /* R: minimum value */
+                       long max;               /* R: maximum value */
+                       long step;              /* R: step (0 variable) */
+               } integer;
+               struct {
+                       long long min;          /* R: minimum value */
+                       long long max;          /* R: maximum value */
+                       long long step;         /* R: step (0 variable) */
+               } integer64;
+               struct {
+                       unsigned int items;     /* R: number of items */
+                       unsigned int item;      /* W: item number */
+                       char name[64];          /* R: value name */
+                       __u64 names_ptr;        /* W: names list (ELEM_ADD only) */
+                       unsigned int names_length;
+               } enumerated;
+               unsigned char reserved[128];
+       } value;
+       union {
+               unsigned short d[4];            /* dimensions */
+               unsigned short *d_ptr;          /* indirect - obsoleted */
+       } dimen;
+       unsigned char reserved[64-4*sizeof(unsigned short)];
+};
+
+struct snd_ctl_elem_value {
+       struct snd_ctl_elem_id id;      /* W: element ID */
+       unsigned int indirect: 1;       /* W: indirect access - obsoleted */
+       union {
+               union {
+                       long value[128];
+                       long *value_ptr;        /* obsoleted */
+               } integer;
+               union {
+                       long long value[64];
+                       long long *value_ptr;   /* obsoleted */
+               } integer64;
+               union {
+                       unsigned int item[128];
+                       unsigned int *item_ptr; /* obsoleted */
+               } enumerated;
+               union {
+                       unsigned char data[512];
+                       unsigned char *data_ptr;        /* obsoleted */
+               } bytes;
+               struct snd_aes_iec958 iec958;
+       } value;                /* RO */
+       struct timespec tstamp;
+       unsigned char reserved[128-sizeof(struct timespec)];
+};
+
+struct snd_ctl_tlv {
+       unsigned int numid;     /* control element numeric identification */
+       unsigned int length;    /* in bytes aligned to 4 */
+       unsigned int tlv[0];    /* first TLV */
+};
+
+#define SNDRV_CTL_IOCTL_PVERSION       _IOR('U', 0x00, int)
+#define SNDRV_CTL_IOCTL_CARD_INFO      _IOR('U', 0x01, struct snd_ctl_card_info)
+#define SNDRV_CTL_IOCTL_ELEM_LIST      _IOWR('U', 0x10, struct snd_ctl_elem_list)
+#define SNDRV_CTL_IOCTL_ELEM_INFO      _IOWR('U', 0x11, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_READ      _IOWR('U', 0x12, struct snd_ctl_elem_value)
+#define SNDRV_CTL_IOCTL_ELEM_WRITE     _IOWR('U', 0x13, struct snd_ctl_elem_value)
+#define SNDRV_CTL_IOCTL_ELEM_LOCK      _IOW('U', 0x14, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_ELEM_UNLOCK    _IOW('U', 0x15, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
+#define SNDRV_CTL_IOCTL_ELEM_ADD       _IOWR('U', 0x17, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_REPLACE   _IOWR('U', 0x18, struct snd_ctl_elem_info)
+#define SNDRV_CTL_IOCTL_ELEM_REMOVE    _IOWR('U', 0x19, struct snd_ctl_elem_id)
+#define SNDRV_CTL_IOCTL_TLV_READ       _IOWR('U', 0x1a, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_TLV_WRITE      _IOWR('U', 0x1b, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_TLV_COMMAND    _IOWR('U', 0x1c, struct snd_ctl_tlv)
+#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
+#define SNDRV_CTL_IOCTL_HWDEP_INFO     _IOR('U', 0x21, struct snd_hwdep_info)
+#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE        _IOR('U', 0x30, int)
+#define SNDRV_CTL_IOCTL_PCM_INFO       _IOWR('U', 0x31, struct snd_pcm_info)
+#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
+#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
+#define SNDRV_CTL_IOCTL_RAWMIDI_INFO   _IOWR('U', 0x41, struct snd_rawmidi_info)
+#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
+#define SNDRV_CTL_IOCTL_POWER          _IOWR('U', 0xd0, int)
+#define SNDRV_CTL_IOCTL_POWER_STATE    _IOR('U', 0xd1, int)
+
+/*
+ *  Read interface.
+ */
+
+enum sndrv_ctl_event_type {
+       SNDRV_CTL_EVENT_ELEM = 0,
+       SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
+};
+
+#define SNDRV_CTL_EVENT_MASK_VALUE     (1<<0)  /* element value was changed */
+#define SNDRV_CTL_EVENT_MASK_INFO      (1<<1)  /* element info was changed */
+#define SNDRV_CTL_EVENT_MASK_ADD       (1<<2)  /* element was added */
+#define SNDRV_CTL_EVENT_MASK_TLV       (1<<3)  /* element TLV tree was changed */
+#define SNDRV_CTL_EVENT_MASK_REMOVE    (~0U)   /* element was removed */
+
+struct snd_ctl_event {
+       int type;       /* event type - SNDRV_CTL_EVENT_* */
+       union {
+               struct {
+                       unsigned int mask;
+                       struct snd_ctl_elem_id id;
+               } elem;
+               unsigned char data8[60];
+       } data;
+};
+
+/*
+ *  Control names
+ */
+
+#define SNDRV_CTL_NAME_NONE                            ""
+#define SNDRV_CTL_NAME_PLAYBACK                                "Playback "
+#define SNDRV_CTL_NAME_CAPTURE                         "Capture "
+
+#define SNDRV_CTL_NAME_IEC958_NONE                     ""
+#define SNDRV_CTL_NAME_IEC958_SWITCH                   "Switch"
+#define SNDRV_CTL_NAME_IEC958_VOLUME                   "Volume"
+#define SNDRV_CTL_NAME_IEC958_DEFAULT                  "Default"
+#define SNDRV_CTL_NAME_IEC958_MASK                     "Mask"
+#define SNDRV_CTL_NAME_IEC958_CON_MASK                 "Con Mask"
+#define SNDRV_CTL_NAME_IEC958_PRO_MASK                 "Pro Mask"
+#define SNDRV_CTL_NAME_IEC958_PCM_STREAM               "PCM Stream"
+#define SNDRV_CTL_NAME_IEC958(expl,direction,what)     "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
+
+#endif /* __SOUND_ASOUND_H */
diff --git a/lib/libdss-include/sound/asound_fm.h b/lib/libdss-include/sound/asound_fm.h
new file mode 100644 (file)
index 0000000..c2a4b96
--- /dev/null
@@ -0,0 +1,134 @@
+#ifndef __SOUND_ASOUND_FM_H
+#define __SOUND_ASOUND_FM_H
+
+/*
+ *  Advanced Linux Sound Architecture - ALSA
+ *
+ *  Interface file between ALSA driver & user space
+ *  Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
+ *                           4Front Technologies
+ *
+ *  Direct FM control
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#define SNDRV_DM_FM_MODE_OPL2  0x00
+#define SNDRV_DM_FM_MODE_OPL3  0x01
+
+struct snd_dm_fm_info {
+       unsigned char fm_mode;          /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
+       unsigned char rhythm;           /* percussion mode flag */
+};
+
+/*
+ *  Data structure composing an FM "note" or sound event.
+ */
+
+struct snd_dm_fm_voice {
+       unsigned char op;               /* operator cell (0 or 1) */
+       unsigned char voice;            /* FM voice (0 to 17) */
+
+       unsigned char am;               /* amplitude modulation */
+       unsigned char vibrato;          /* vibrato effect */
+       unsigned char do_sustain;       /* sustain phase */
+       unsigned char kbd_scale;        /* keyboard scaling */
+       unsigned char harmonic;         /* 4 bits: harmonic and multiplier */
+       unsigned char scale_level;      /* 2 bits: decrease output freq rises */
+       unsigned char volume;           /* 6 bits: volume */
+
+       unsigned char attack;           /* 4 bits: attack rate */
+       unsigned char decay;            /* 4 bits: decay rate */
+       unsigned char sustain;          /* 4 bits: sustain level */
+       unsigned char release;          /* 4 bits: release rate */
+
+       unsigned char feedback;         /* 3 bits: feedback for op0 */
+       unsigned char connection;       /* 0 for serial, 1 for parallel */
+       unsigned char left;             /* stereo left */
+       unsigned char right;            /* stereo right */
+       unsigned char waveform;         /* 3 bits: waveform shape */
+};
+
+/*
+ *  This describes an FM note by its voice, octave, frequency number (10bit)
+ *  and key on/off.
+ */
+
+struct snd_dm_fm_note {
+       unsigned char voice;    /* 0-17 voice channel */
+       unsigned char octave;   /* 3 bits: what octave to play */
+       unsigned int fnum;      /* 10 bits: frequency number */
+       unsigned char key_on;   /* set for active, clear for silent */
+};
+
+/*
+ *  FM parameters that apply globally to all voices, and thus are not "notes"
+ */
+
+struct snd_dm_fm_params {
+       unsigned char am_depth;         /* amplitude modulation depth (1=hi) */
+       unsigned char vib_depth;        /* vibrato depth (1=hi) */
+       unsigned char kbd_split;        /* keyboard split */
+       unsigned char rhythm;           /* percussion mode select */
+
+       /* This block is the percussion instrument data */
+       unsigned char bass;
+       unsigned char snare;
+       unsigned char tomtom;
+       unsigned char cymbal;
+       unsigned char hihat;
+};
+
+/*
+ *  FM mode ioctl settings
+ */
+
+#define SNDRV_DM_FM_IOCTL_INFO         _IOR('H', 0x20, struct snd_dm_fm_info)
+#define SNDRV_DM_FM_IOCTL_RESET                _IO ('H', 0x21)
+#define SNDRV_DM_FM_IOCTL_PLAY_NOTE    _IOW('H', 0x22, struct snd_dm_fm_note)
+#define SNDRV_DM_FM_IOCTL_SET_VOICE    _IOW('H', 0x23, struct snd_dm_fm_voice)
+#define SNDRV_DM_FM_IOCTL_SET_PARAMS   _IOW('H', 0x24, struct snd_dm_fm_params)
+#define SNDRV_DM_FM_IOCTL_SET_MODE     _IOW('H', 0x25, int)
+/* for OPL3 only */
+#define SNDRV_DM_FM_IOCTL_SET_CONNECTION       _IOW('H', 0x26, int)
+/* SBI patch management */
+#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES        _IO ('H', 0x40)
+
+#define SNDRV_DM_FM_OSS_IOCTL_RESET            0x20
+#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE                0x21
+#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE                0x22
+#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS       0x23
+#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE         0x24
+#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL          0x25
+
+/*
+ * Patch Record - fixed size for write
+ */
+
+#define FM_KEY_SBI     "SBI\032"
+#define FM_KEY_2OP     "2OP\032"
+#define FM_KEY_4OP     "4OP\032"
+
+struct sbi_patch {
+       unsigned char prog;
+       unsigned char bank;
+       char key[4];
+       char name[25];
+       char extension[7];
+       unsigned char data[32];
+};
+
+#endif /* __SOUND_ASOUND_FM_H */
diff --git a/lib/libdss-include/sound/compress_offload.h b/lib/libdss-include/sound/compress_offload.h
new file mode 100644 (file)
index 0000000..e00d8cb
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ *  compress_offload.h - compress offload header definations
+ *
+ *  Copyright (C) 2011 Intel Corporation
+ *  Authors:   Vinod Koul <vinod.koul@linux.intel.com>
+ *             Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+ *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ */
+#ifndef __COMPRESS_OFFLOAD_H
+#define __COMPRESS_OFFLOAD_H
+
+#include <linux/types.h>
+#include <sound/asound.h>
+#include <sound/compress_params.h>
+
+
+#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2)
+/**
+ * struct snd_compressed_buffer - compressed buffer
+ * @fragment_size: size of buffer fragment in bytes
+ * @fragments: number of such fragments
+ */
+struct snd_compressed_buffer {
+       __u32 fragment_size;
+       __u32 fragments;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_params - compressed stream params
+ * @buffer: buffer description
+ * @codec: codec parameters
+ * @no_wake_mode: dont wake on fragment elapsed
+ */
+struct snd_compr_params {
+       struct snd_compressed_buffer buffer;
+       struct snd_codec codec;
+       __u8 no_wake_mode;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_tstamp - timestamp descriptor
+ * @byte_offset: Byte offset in ring buffer to DSP
+ * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP
+ * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by
+ *     large steps and should only be used to monitor encoding/decoding
+ *     progress. It shall not be used for timing estimates.
+ * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio
+ * output/input. This field should be used for A/V sync or time estimates.
+ * @sampling_rate: sampling rate of audio
+ */
+struct snd_compr_tstamp {
+       __u32 byte_offset;
+       __u32 copied_total;
+       __u32 pcm_frames;
+       __u32 pcm_io_frames;
+       __u32 sampling_rate;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_avail - avail descriptor
+ * @avail: Number of bytes available in ring buffer for writing/reading
+ * @tstamp: timestamp information
+ */
+struct snd_compr_avail {
+       __u64 avail;
+       struct snd_compr_tstamp tstamp;
+} __attribute__((packed, aligned(4)));
+
+enum snd_compr_direction {
+       SND_COMPRESS_PLAYBACK = 0,
+       SND_COMPRESS_CAPTURE
+};
+
+/**
+ * struct snd_compr_caps - caps descriptor
+ * @codecs: pointer to array of codecs
+ * @direction: direction supported. Of type snd_compr_direction
+ * @min_fragment_size: minimum fragment supported by DSP
+ * @max_fragment_size: maximum fragment supported by DSP
+ * @min_fragments: min fragments supported by DSP
+ * @max_fragments: max fragments supported by DSP
+ * @num_codecs: number of codecs supported
+ * @reserved: reserved field
+ */
+struct snd_compr_caps {
+       __u32 num_codecs;
+       __u32 direction;
+       __u32 min_fragment_size;
+       __u32 max_fragment_size;
+       __u32 min_fragments;
+       __u32 max_fragments;
+       __u32 codecs[MAX_NUM_CODECS];
+       __u32 reserved[11];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_compr_codec_caps - query capability of codec
+ * @codec: codec for which capability is queried
+ * @num_descriptors: number of codec descriptors
+ * @descriptor: array of codec capability descriptor
+ */
+struct snd_compr_codec_caps {
+       __u32 codec;
+       __u32 num_descriptors;
+       struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * enum sndrv_compress_encoder
+ * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the
+ * end of the track
+ * @SNDRV_COMPRESS_ENCODER_DELAY: no of samples inserted by the encoder at the
+ * beginning of the track
+ */
+enum sndrv_compress_encoder {
+       SNDRV_COMPRESS_ENCODER_PADDING = 1,
+       SNDRV_COMPRESS_ENCODER_DELAY = 2,
+};
+
+/**
+ * struct snd_compr_metadata - compressed stream metadata
+ * @key: key id
+ * @value: key value
+ */
+struct snd_compr_metadata {
+        __u32 key;
+        __u32 value[8];
+} __attribute__((packed, aligned(4)));
+
+/**
+ * compress path ioctl definitions
+ * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP
+ * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec
+ * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters
+ * Note: only codec params can be changed runtime and stream params cant be
+ * SNDRV_COMPRESS_GET_PARAMS: Query codec params
+ * SNDRV_COMPRESS_TSTAMP: get the current timestamp value
+ * SNDRV_COMPRESS_AVAIL: get the current buffer avail value.
+ * This also queries the tstamp properties
+ * SNDRV_COMPRESS_PAUSE: Pause the running stream
+ * SNDRV_COMPRESS_RESUME: resume a paused stream
+ * SNDRV_COMPRESS_START: Start a stream
+ * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content
+ * and the buffers currently with DSP
+ * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that
+ * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version
+ */
+#define SNDRV_COMPRESS_IOCTL_VERSION   _IOR('C', 0x00, int)
+#define SNDRV_COMPRESS_GET_CAPS                _IOWR('C', 0x10, struct snd_compr_caps)
+#define SNDRV_COMPRESS_GET_CODEC_CAPS  _IOWR('C', 0x11,\
+                                               struct snd_compr_codec_caps)
+#define SNDRV_COMPRESS_SET_PARAMS      _IOW('C', 0x12, struct snd_compr_params)
+#define SNDRV_COMPRESS_GET_PARAMS      _IOR('C', 0x13, struct snd_codec)
+#define SNDRV_COMPRESS_SET_METADATA    _IOW('C', 0x14,\
+                                                struct snd_compr_metadata)
+#define SNDRV_COMPRESS_GET_METADATA    _IOWR('C', 0x15,\
+                                                struct snd_compr_metadata)
+#define SNDRV_COMPRESS_TSTAMP          _IOR('C', 0x20, struct snd_compr_tstamp)
+#define SNDRV_COMPRESS_AVAIL           _IOR('C', 0x21, struct snd_compr_avail)
+#define SNDRV_COMPRESS_PAUSE           _IO('C', 0x30)
+#define SNDRV_COMPRESS_RESUME          _IO('C', 0x31)
+#define SNDRV_COMPRESS_START           _IO('C', 0x32)
+#define SNDRV_COMPRESS_STOP            _IO('C', 0x33)
+#define SNDRV_COMPRESS_DRAIN           _IO('C', 0x34)
+#define SNDRV_COMPRESS_NEXT_TRACK      _IO('C', 0x35)
+#define SNDRV_COMPRESS_PARTIAL_DRAIN   _IO('C', 0x36)
+/*
+ * TODO
+ * 1. add mmap support
+ *
+ */
+#define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */
+#define SND_COMPR_TRIGGER_NEXT_TRACK 8
+#define SND_COMPR_TRIGGER_PARTIAL_DRAIN 9
+#endif
diff --git a/lib/libdss-include/sound/compress_params.h b/lib/libdss-include/sound/compress_params.h
new file mode 100644 (file)
index 0000000..d9bd9ca
--- /dev/null
@@ -0,0 +1,404 @@
+/*
+ *  compress_params.h - codec types and parameters for compressed data
+ *  streaming interface
+ *
+ *  Copyright (C) 2011 Intel Corporation
+ *  Authors:   Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+ *              Vinod Koul <vinod.koul@linux.intel.com>
+ *
+ *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * The definitions in this file are derived from the OpenMAX AL version 1.1
+ * and OpenMAX IL v 1.1.2 header files which contain the copyright notice below.
+ *
+ * Copyright (c) 2007-2010 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and/or associated documentation files (the
+ * "Materials "), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ *
+ */
+#ifndef __SND_COMPRESS_PARAMS_H
+#define __SND_COMPRESS_PARAMS_H
+
+#include <linux/types.h>
+
+/* AUDIO CODECS SUPPORTED */
+#define MAX_NUM_CODECS 32
+#define MAX_NUM_CODEC_DESCRIPTORS 32
+#define MAX_NUM_BITRATES 32
+#define MAX_NUM_SAMPLE_RATES 32
+
+/* Codecs are listed linearly to allow for extensibility */
+#define SND_AUDIOCODEC_PCM                   ((__u32) 0x00000001)
+#define SND_AUDIOCODEC_MP3                   ((__u32) 0x00000002)
+#define SND_AUDIOCODEC_AMR                   ((__u32) 0x00000003)
+#define SND_AUDIOCODEC_AMRWB                 ((__u32) 0x00000004)
+#define SND_AUDIOCODEC_AMRWBPLUS             ((__u32) 0x00000005)
+#define SND_AUDIOCODEC_AAC                   ((__u32) 0x00000006)
+#define SND_AUDIOCODEC_WMA                   ((__u32) 0x00000007)
+#define SND_AUDIOCODEC_REAL                  ((__u32) 0x00000008)
+#define SND_AUDIOCODEC_VORBIS                ((__u32) 0x00000009)
+#define SND_AUDIOCODEC_FLAC                  ((__u32) 0x0000000A)
+#define SND_AUDIOCODEC_IEC61937              ((__u32) 0x0000000B)
+#define SND_AUDIOCODEC_G723_1                ((__u32) 0x0000000C)
+#define SND_AUDIOCODEC_G729                  ((__u32) 0x0000000D)
+#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_G729
+
+/*
+ * Profile and modes are listed with bit masks. This allows for a
+ * more compact representation of fields that will not evolve
+ * (in contrast to the list of codecs)
+ */
+
+#define SND_AUDIOPROFILE_PCM                 ((__u32) 0x00000001)
+
+/* MP3 modes are only useful for encoders */
+#define SND_AUDIOCHANMODE_MP3_MONO           ((__u32) 0x00000001)
+#define SND_AUDIOCHANMODE_MP3_STEREO         ((__u32) 0x00000002)
+#define SND_AUDIOCHANMODE_MP3_JOINTSTEREO    ((__u32) 0x00000004)
+#define SND_AUDIOCHANMODE_MP3_DUAL           ((__u32) 0x00000008)
+
+#define SND_AUDIOPROFILE_AMR                 ((__u32) 0x00000001)
+
+/* AMR modes are only useful for encoders */
+#define SND_AUDIOMODE_AMR_DTX_OFF            ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AMR_VAD1               ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AMR_VAD2               ((__u32) 0x00000004)
+
+#define SND_AUDIOSTREAMFORMAT_UNDEFINED             ((__u32) 0x00000000)
+#define SND_AUDIOSTREAMFORMAT_CONFORMANCE    ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_IF1            ((__u32) 0x00000002)
+#define SND_AUDIOSTREAMFORMAT_IF2            ((__u32) 0x00000004)
+#define SND_AUDIOSTREAMFORMAT_FSF            ((__u32) 0x00000008)
+#define SND_AUDIOSTREAMFORMAT_RTPPAYLOAD     ((__u32) 0x00000010)
+#define SND_AUDIOSTREAMFORMAT_ITU            ((__u32) 0x00000020)
+
+#define SND_AUDIOPROFILE_AMRWB               ((__u32) 0x00000001)
+
+/* AMRWB modes are only useful for encoders */
+#define SND_AUDIOMODE_AMRWB_DTX_OFF          ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AMRWB_VAD1             ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AMRWB_VAD2             ((__u32) 0x00000004)
+
+#define SND_AUDIOPROFILE_AMRWBPLUS           ((__u32) 0x00000001)
+
+#define SND_AUDIOPROFILE_AAC                 ((__u32) 0x00000001)
+
+/* AAC modes are required for encoders and decoders */
+#define SND_AUDIOMODE_AAC_MAIN               ((__u32) 0x00000001)
+#define SND_AUDIOMODE_AAC_LC                 ((__u32) 0x00000002)
+#define SND_AUDIOMODE_AAC_SSR                ((__u32) 0x00000004)
+#define SND_AUDIOMODE_AAC_LTP                ((__u32) 0x00000008)
+#define SND_AUDIOMODE_AAC_HE                 ((__u32) 0x00000010)
+#define SND_AUDIOMODE_AAC_SCALABLE           ((__u32) 0x00000020)
+#define SND_AUDIOMODE_AAC_ERLC               ((__u32) 0x00000040)
+#define SND_AUDIOMODE_AAC_LD                 ((__u32) 0x00000080)
+#define SND_AUDIOMODE_AAC_HE_PS              ((__u32) 0x00000100)
+#define SND_AUDIOMODE_AAC_HE_MPS             ((__u32) 0x00000200)
+
+/* AAC formats are required for encoders and decoders */
+#define SND_AUDIOSTREAMFORMAT_MP2ADTS        ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_MP4ADTS        ((__u32) 0x00000002)
+#define SND_AUDIOSTREAMFORMAT_MP4LOAS        ((__u32) 0x00000004)
+#define SND_AUDIOSTREAMFORMAT_MP4LATM        ((__u32) 0x00000008)
+#define SND_AUDIOSTREAMFORMAT_ADIF           ((__u32) 0x00000010)
+#define SND_AUDIOSTREAMFORMAT_MP4FF          ((__u32) 0x00000020)
+#define SND_AUDIOSTREAMFORMAT_RAW            ((__u32) 0x00000040)
+
+#define SND_AUDIOPROFILE_WMA7                ((__u32) 0x00000001)
+#define SND_AUDIOPROFILE_WMA8                ((__u32) 0x00000002)
+#define SND_AUDIOPROFILE_WMA9                ((__u32) 0x00000004)
+#define SND_AUDIOPROFILE_WMA10               ((__u32) 0x00000008)
+
+#define SND_AUDIOMODE_WMA_LEVEL1             ((__u32) 0x00000001)
+#define SND_AUDIOMODE_WMA_LEVEL2             ((__u32) 0x00000002)
+#define SND_AUDIOMODE_WMA_LEVEL3             ((__u32) 0x00000004)
+#define SND_AUDIOMODE_WMA_LEVEL4             ((__u32) 0x00000008)
+#define SND_AUDIOMODE_WMAPRO_LEVELM0         ((__u32) 0x00000010)
+#define SND_AUDIOMODE_WMAPRO_LEVELM1         ((__u32) 0x00000020)
+#define SND_AUDIOMODE_WMAPRO_LEVELM2         ((__u32) 0x00000040)
+#define SND_AUDIOMODE_WMAPRO_LEVELM3         ((__u32) 0x00000080)
+
+#define SND_AUDIOSTREAMFORMAT_WMA_ASF        ((__u32) 0x00000001)
+/*
+ * Some implementations strip the ASF header and only send ASF packets
+ * to the DSP
+ */
+#define SND_AUDIOSTREAMFORMAT_WMA_NOASF_HDR  ((__u32) 0x00000002)
+
+#define SND_AUDIOPROFILE_REALAUDIO           ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_REALAUDIO_G2           ((__u32) 0x00000001)
+#define SND_AUDIOMODE_REALAUDIO_8            ((__u32) 0x00000002)
+#define SND_AUDIOMODE_REALAUDIO_10           ((__u32) 0x00000004)
+#define SND_AUDIOMODE_REALAUDIO_SURROUND     ((__u32) 0x00000008)
+
+#define SND_AUDIOPROFILE_VORBIS              ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_VORBIS                 ((__u32) 0x00000001)
+
+#define SND_AUDIOPROFILE_FLAC                ((__u32) 0x00000001)
+
+/*
+ * Define quality levels for FLAC encoders, from LEVEL0 (fast)
+ * to LEVEL8 (best)
+ */
+#define SND_AUDIOMODE_FLAC_LEVEL0            ((__u32) 0x00000001)
+#define SND_AUDIOMODE_FLAC_LEVEL1            ((__u32) 0x00000002)
+#define SND_AUDIOMODE_FLAC_LEVEL2            ((__u32) 0x00000004)
+#define SND_AUDIOMODE_FLAC_LEVEL3            ((__u32) 0x00000008)
+#define SND_AUDIOMODE_FLAC_LEVEL4            ((__u32) 0x00000010)
+#define SND_AUDIOMODE_FLAC_LEVEL5            ((__u32) 0x00000020)
+#define SND_AUDIOMODE_FLAC_LEVEL6            ((__u32) 0x00000040)
+#define SND_AUDIOMODE_FLAC_LEVEL7            ((__u32) 0x00000080)
+#define SND_AUDIOMODE_FLAC_LEVEL8            ((__u32) 0x00000100)
+
+#define SND_AUDIOSTREAMFORMAT_FLAC           ((__u32) 0x00000001)
+#define SND_AUDIOSTREAMFORMAT_FLAC_OGG       ((__u32) 0x00000002)
+
+/* IEC61937 payloads without CUVP and preambles */
+#define SND_AUDIOPROFILE_IEC61937            ((__u32) 0x00000001)
+/* IEC61937 with S/PDIF preambles+CUVP bits in 32-bit containers */
+#define SND_AUDIOPROFILE_IEC61937_SPDIF      ((__u32) 0x00000002)
+
+/*
+ * IEC modes are mandatory for decoders. Format autodetection
+ * will only happen on the DSP side with mode 0. The PCM mode should
+ * not be used, the PCM codec should be used instead.
+ */
+#define SND_AUDIOMODE_IEC_REF_STREAM_HEADER  ((__u32) 0x00000000)
+#define SND_AUDIOMODE_IEC_LPCM              ((__u32) 0x00000001)
+#define SND_AUDIOMODE_IEC_AC3               ((__u32) 0x00000002)
+#define SND_AUDIOMODE_IEC_MPEG1                     ((__u32) 0x00000004)
+#define SND_AUDIOMODE_IEC_MP3               ((__u32) 0x00000008)
+#define SND_AUDIOMODE_IEC_MPEG2                     ((__u32) 0x00000010)
+#define SND_AUDIOMODE_IEC_AACLC                     ((__u32) 0x00000020)
+#define SND_AUDIOMODE_IEC_DTS               ((__u32) 0x00000040)
+#define SND_AUDIOMODE_IEC_ATRAC                     ((__u32) 0x00000080)
+#define SND_AUDIOMODE_IEC_SACD              ((__u32) 0x00000100)
+#define SND_AUDIOMODE_IEC_EAC3              ((__u32) 0x00000200)
+#define SND_AUDIOMODE_IEC_DTS_HD            ((__u32) 0x00000400)
+#define SND_AUDIOMODE_IEC_MLP               ((__u32) 0x00000800)
+#define SND_AUDIOMODE_IEC_DST               ((__u32) 0x00001000)
+#define SND_AUDIOMODE_IEC_WMAPRO            ((__u32) 0x00002000)
+#define SND_AUDIOMODE_IEC_REF_CXT            ((__u32) 0x00004000)
+#define SND_AUDIOMODE_IEC_HE_AAC            ((__u32) 0x00008000)
+#define SND_AUDIOMODE_IEC_HE_AAC2           ((__u32) 0x00010000)
+#define SND_AUDIOMODE_IEC_MPEG_SURROUND             ((__u32) 0x00020000)
+
+#define SND_AUDIOPROFILE_G723_1              ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_G723_1_ANNEX_A         ((__u32) 0x00000001)
+#define SND_AUDIOMODE_G723_1_ANNEX_B         ((__u32) 0x00000002)
+#define SND_AUDIOMODE_G723_1_ANNEX_C         ((__u32) 0x00000004)
+
+#define SND_AUDIOPROFILE_G729                ((__u32) 0x00000001)
+
+#define SND_AUDIOMODE_G729_ANNEX_A           ((__u32) 0x00000001)
+#define SND_AUDIOMODE_G729_ANNEX_B           ((__u32) 0x00000002)
+
+/* <FIXME: multichannel encoders aren't supported for now. Would need
+   an additional definition of channel arrangement> */
+
+/* VBR/CBR definitions */
+#define SND_RATECONTROLMODE_CONSTANTBITRATE  ((__u32) 0x00000001)
+#define SND_RATECONTROLMODE_VARIABLEBITRATE  ((__u32) 0x00000002)
+
+/* Encoder options */
+
+struct snd_enc_wma {
+       __u32 super_block_align; /* WMA Type-specific data */
+};
+
+
+/**
+ * struct snd_enc_vorbis
+ * @quality: Sets encoding quality to n, between -1 (low) and 10 (high).
+ * In the default mode of operation, the quality level is 3.
+ * Normal quality range is 0 - 10.
+ * @managed: Boolean. Set  bitrate  management  mode. This turns off the
+ * normal VBR encoding, but allows hard or soft bitrate constraints to be
+ * enforced by the encoder. This mode can be slower, and may also be
+ * lower quality. It is primarily useful for streaming.
+ * @max_bit_rate: Enabled only if managed is TRUE
+ * @min_bit_rate: Enabled only if managed is TRUE
+ * @downmix: Boolean. Downmix input from stereo to mono (has no effect on
+ * non-stereo streams). Useful for lower-bitrate encoding.
+ *
+ * These options were extracted from the OpenMAX IL spec and Gstreamer vorbisenc
+ * properties
+ *
+ * For best quality users should specify VBR mode and set quality levels.
+ */
+
+struct snd_enc_vorbis {
+       __s32 quality;
+       __u32 managed;
+       __u32 max_bit_rate;
+       __u32 min_bit_rate;
+       __u32 downmix;
+} __attribute__((packed, aligned(4)));
+
+
+/**
+ * struct snd_enc_real
+ * @quant_bits: number of coupling quantization bits in the stream
+ * @start_region: coupling start region in the stream
+ * @num_regions: number of regions value
+ *
+ * These options were extracted from the OpenMAX IL spec
+ */
+
+struct snd_enc_real {
+       __u32 quant_bits;
+       __u32 start_region;
+       __u32 num_regions;
+} __attribute__((packed, aligned(4)));
+
+/**
+ * struct snd_enc_flac
+ * @num: serial number, valid only for OGG formats
+ *     needs to be set by application
+ * @gain: Add replay gain tags
+ *
+ * These options were extracted from the FLAC online documentation
+ * at http://flac.sourceforge.net/documentation_tools_flac.html
+ *
+ * To make the API simpler, it is assumed that the user will select quality
+ * profiles. Additional options that affect encoding quality and speed can
+ * be added at a later stage if needed.
+ *
+ * By default the Subset format is used by encoders.
+ *
+ * TAGS such as pictures, etc, cannot be handled by an offloaded encoder and are
+ * not supported in this API.
+ */
+
+struct snd_enc_flac {
+       __u32 num;
+       __u32 gain;
+} __attribute__((packed, aligned(4)));
+
+struct snd_enc_generic {
+       __u32 bw;       /* encoder bandwidth */
+       __s32 reserved[15];
+} __attribute__((packed, aligned(4)));
+
+union snd_codec_options {
+       struct snd_enc_wma wma;
+       struct snd_enc_vorbis vorbis;
+       struct snd_enc_real real;
+       struct snd_enc_flac flac;
+       struct snd_enc_generic generic;
+} __attribute__((packed, aligned(4)));
+
+/** struct snd_codec_desc - description of codec capabilities
+ * @max_ch: Maximum number of audio channels
+ * @sample_rates: Sampling rates in Hz, use values like 48000 for this
+ * @num_sample_rates: Number of valid values in sample_rates array
+ * @bit_rate: Indexed array containing supported bit rates
+ * @num_bitrates: Number of valid values in bit_rate array
+ * @rate_control: value is specified by SND_RATECONTROLMODE defines.
+ * @profiles: Supported profiles. See SND_AUDIOPROFILE defines.
+ * @modes: Supported modes. See SND_AUDIOMODE defines
+ * @formats: Supported formats. See SND_AUDIOSTREAMFORMAT defines
+ * @min_buffer: Minimum buffer size handled by codec implementation
+ * @reserved: reserved for future use
+ *
+ * This structure provides a scalar value for profiles, modes and stream
+ * format fields.
+ * If an implementation supports multiple combinations, they will be listed as
+ * codecs with different descriptors, for example there would be 2 descriptors
+ * for AAC-RAW and AAC-ADTS.
+ * This entails some redundancy but makes it easier to avoid invalid
+ * configurations.
+ *
+ */
+
+struct snd_codec_desc {
+       __u32 max_ch;
+       __u32 sample_rates[MAX_NUM_SAMPLE_RATES];
+       __u32 num_sample_rates;
+       __u32 bit_rate[MAX_NUM_BITRATES];
+       __u32 num_bitrates;
+       __u32 rate_control;
+       __u32 profiles;
+       __u32 modes;
+       __u32 formats;
+       __u32 min_buffer;
+       __u32 reserved[15];
+} __attribute__((packed, aligned(4)));
+
+/** struct snd_codec
+ * @id: Identifies the supported audio encoder/decoder.
+ *             See SND_AUDIOCODEC macros.
+ * @ch_in: Number of input audio channels
+ * @ch_out: Number of output channels. In case of contradiction between
+ *             this field and the channelMode field, the channelMode field
+ *             overrides.
+ * @sample_rate: Audio sample rate of input data in Hz, use values like 48000
+ *             for this.
+ * @bit_rate: Bitrate of encoded data. May be ignored by decoders
+ * @rate_control: Encoding rate control. See SND_RATECONTROLMODE defines.
+ *               Encoders may rely on profiles for quality levels.
+ *              May be ignored by decoders.
+ * @profile: Mandatory for encoders, can be mandatory for specific
+ *             decoders as well. See SND_AUDIOPROFILE defines.
+ * @level: Supported level (Only used by WMA at the moment)
+ * @ch_mode: Channel mode for encoder. See SND_AUDIOCHANMODE defines
+ * @format: Format of encoded bistream. Mandatory when defined.
+ *             See SND_AUDIOSTREAMFORMAT defines.
+ * @align: Block alignment in bytes of an audio sample.
+ *             Only required for PCM or IEC formats.
+ * @options: encoder-specific settings
+ * @reserved: reserved for future use
+ */
+
+struct snd_codec {
+       __u32 id;
+       __u32 ch_in;
+       __u32 ch_out;
+       __u32 sample_rate;
+       __u32 bit_rate;
+       __u32 rate_control;
+       __u32 profile;
+       __u32 level;
+       __u32 ch_mode;
+       __u32 format;
+       __u32 align;
+       union snd_codec_options options;
+       __u32 reserved[3];
+} __attribute__((packed, aligned(4)));
+
+#endif
diff --git a/lib/libdss-include/sound/emu10k1.h b/lib/libdss-include/sound/emu10k1.h
new file mode 100644 (file)
index 0000000..833aa69
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+ *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
+ *                  Creative Labs, Inc.
+ *  Definitions for EMU10K1 (SB Live!) chips
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_EMU10K1_H
+#define __SOUND_EMU10K1_H
+
+#include <linux/types.h>
+#include <sound/asound.h>
+
+/*
+ * ---- FX8010 ----
+ */
+
+#define EMU10K1_CARD_CREATIVE                  0x00000000
+#define EMU10K1_CARD_EMUAPS                    0x00000001
+
+#define EMU10K1_FX8010_PCM_COUNT               8
+
+/*
+ * Following definition is copied from linux/types.h to support compiling
+ * this header file in userspace since they are not generally available for
+ * uapi headers.
+ */
+#define __EMU10K1_DECLARE_BITMAP(name,bits) \
+       unsigned long name[(bits) / (sizeof(unsigned long) * 8)]
+
+/* instruction set */
+#define iMAC0   0x00   /* R = A + (X * Y >> 31)   ; saturation */
+#define iMAC1   0x01   /* R = A + (-X * Y >> 31)  ; saturation */
+#define iMAC2   0x02   /* R = A + (X * Y >> 31)   ; wraparound */
+#define iMAC3   0x03   /* R = A + (-X * Y >> 31)  ; wraparound */
+#define iMACINT0 0x04  /* R = A + X * Y           ; saturation */
+#define iMACINT1 0x05  /* R = A + X * Y           ; wraparound (31-bit) */
+#define iACC3   0x06   /* R = A + X + Y           ; saturation */
+#define iMACMV   0x07  /* R = A, acc += X * Y >> 31 */
+#define iANDXOR  0x08  /* R = (A & X) ^ Y */
+#define iTSTNEG  0x09  /* R = (A >= Y) ? X : ~X */
+#define iLIMITGE 0x0a  /* R = (A >= Y) ? X : Y */
+#define iLIMITLT 0x0b  /* R = (A < Y) ? X : Y */
+#define iLOG    0x0c   /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */
+#define iEXP    0x0d   /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */
+#define iINTERP  0x0e  /* R = A + (X * (Y - A) >> 31)  ; saturation */
+#define iSKIP    0x0f  /* R = A (cc_reg), X (count), Y (cc_test) */
+
+/* GPRs */
+#define FXBUS(x)       (0x00 + (x))    /* x = 0x00 - 0x0f */
+#define EXTIN(x)       (0x10 + (x))    /* x = 0x00 - 0x0f */
+#define EXTOUT(x)      (0x20 + (x))    /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */
+#define FXBUS2(x)      (0x30 + (x))    /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */
+                                       /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */
+
+#define C_00000000     0x40
+#define C_00000001     0x41
+#define C_00000002     0x42
+#define C_00000003     0x43
+#define C_00000004     0x44
+#define C_00000008     0x45
+#define C_00000010     0x46
+#define C_00000020     0x47
+#define C_00000100     0x48
+#define C_00010000     0x49
+#define C_00080000     0x4a
+#define C_10000000     0x4b
+#define C_20000000     0x4c
+#define C_40000000     0x4d
+#define C_80000000     0x4e
+#define C_7fffffff     0x4f
+#define C_ffffffff     0x50
+#define C_fffffffe     0x51
+#define C_c0000000     0x52
+#define C_4f1bbcdc     0x53
+#define C_5a7ef9db     0x54
+#define C_00100000     0x55            /* ?? */
+#define GPR_ACCU       0x56            /* ACCUM, accumulator */
+#define GPR_COND       0x57            /* CCR, condition register */
+#define GPR_NOISE0     0x58            /* noise source */
+#define GPR_NOISE1     0x59            /* noise source */
+#define GPR_IRQ                0x5a            /* IRQ register */
+#define GPR_DBAC       0x5b            /* TRAM Delay Base Address Counter */
+#define GPR(x)         (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */
+#define ITRAM_DATA(x)  (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_DATA(x)  (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
+#define ITRAM_ADDR(x)  (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_ADDR(x)  (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
+
+#define A_ITRAM_DATA(x)        (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_DATA(x)        (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_ADDR(x)        (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_ADDR(x)        (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+
+#define A_FXBUS(x)     (0x00 + (x))    /* x = 0x00 - 0x3f FX buses */
+#define A_EXTIN(x)     (0x40 + (x))    /* x = 0x00 - 0x0f physical ins */
+#define A_P16VIN(x)    (0x50 + (x))    /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */
+#define A_EXTOUT(x)    (0x60 + (x))    /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown   */
+#define A_FXBUS2(x)    (0x80 + (x))    /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */
+#define A_EMU32OUTH(x) (0xa0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */
+#define A_EMU32OUTL(x) (0xb0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */
+#define A3_EMU32IN(x)  (0x160 + (x))   /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */
+#define A3_EMU32OUT(x) (0x1E0 + (x))   /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */
+#define A_GPR(x)       (A_FXGPREGBASE + (x))
+
+/* cc_reg constants */
+#define CC_REG_NORMALIZED C_00000001
+#define CC_REG_BORROW  C_00000002
+#define CC_REG_MINUS   C_00000004
+#define CC_REG_ZERO    C_00000008
+#define CC_REG_SATURATE        C_00000010
+#define CC_REG_NONZERO C_00000100
+
+/* FX buses */
+#define FXBUS_PCM_LEFT         0x00
+#define FXBUS_PCM_RIGHT                0x01
+#define FXBUS_PCM_LEFT_REAR    0x02
+#define FXBUS_PCM_RIGHT_REAR   0x03
+#define FXBUS_MIDI_LEFT                0x04
+#define FXBUS_MIDI_RIGHT       0x05
+#define FXBUS_PCM_CENTER       0x06
+#define FXBUS_PCM_LFE          0x07
+#define FXBUS_PCM_LEFT_FRONT   0x08
+#define FXBUS_PCM_RIGHT_FRONT  0x09
+#define FXBUS_MIDI_REVERB      0x0c
+#define FXBUS_MIDI_CHORUS      0x0d
+#define FXBUS_PCM_LEFT_SIDE    0x0e
+#define FXBUS_PCM_RIGHT_SIDE   0x0f
+#define FXBUS_PT_LEFT          0x14
+#define FXBUS_PT_RIGHT         0x15
+
+/* Inputs */
+#define EXTIN_AC97_L      0x00 /* AC'97 capture channel - left */
+#define EXTIN_AC97_R      0x01 /* AC'97 capture channel - right */
+#define EXTIN_SPDIF_CD_L   0x02        /* internal S/PDIF CD - onboard - left */
+#define EXTIN_SPDIF_CD_R   0x03        /* internal S/PDIF CD - onboard - right */
+#define EXTIN_ZOOM_L      0x04 /* Zoom Video I2S - left */
+#define EXTIN_ZOOM_R      0x05 /* Zoom Video I2S - right */
+#define EXTIN_TOSLINK_L           0x06 /* LiveDrive - TOSLink Optical - left */
+#define EXTIN_TOSLINK_R    0x07        /* LiveDrive - TOSLink Optical - right */
+#define EXTIN_LINE1_L     0x08 /* LiveDrive - Line/Mic 1 - left */
+#define EXTIN_LINE1_R     0x09 /* LiveDrive - Line/Mic 1 - right */
+#define EXTIN_COAX_SPDIF_L 0x0a        /* LiveDrive - Coaxial S/PDIF - left */
+#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */
+#define EXTIN_LINE2_L     0x0c /* LiveDrive - Line/Mic 2 - left */
+#define EXTIN_LINE2_R     0x0d /* LiveDrive - Line/Mic 2 - right */
+
+/* Outputs */
+#define EXTOUT_AC97_L     0x00 /* AC'97 playback channel - left */
+#define EXTOUT_AC97_R     0x01 /* AC'97 playback channel - right */
+#define EXTOUT_TOSLINK_L   0x02        /* LiveDrive - TOSLink Optical - left */
+#define EXTOUT_TOSLINK_R   0x03        /* LiveDrive - TOSLink Optical - right */
+#define EXTOUT_AC97_CENTER 0x04        /* SB Live 5.1 - center */
+#define EXTOUT_AC97_LFE           0x05 /* SB Live 5.1 - LFE */
+#define EXTOUT_HEADPHONE_L 0x06        /* LiveDrive - Headphone - left */
+#define EXTOUT_HEADPHONE_R 0x07        /* LiveDrive - Headphone - right */
+#define EXTOUT_REAR_L     0x08 /* Rear channel - left */
+#define EXTOUT_REAR_R     0x09 /* Rear channel - right */
+#define EXTOUT_ADC_CAP_L   0x0a        /* ADC Capture buffer - left */
+#define EXTOUT_ADC_CAP_R   0x0b        /* ADC Capture buffer - right */
+#define EXTOUT_MIC_CAP    0x0c /* MIC Capture buffer */
+#define EXTOUT_AC97_REAR_L 0x0d        /* SB Live 5.1 (c) 2003 - Rear Left */
+#define EXTOUT_AC97_REAR_R 0x0e        /* SB Live 5.1 (c) 2003 - Rear Right */
+#define EXTOUT_ACENTER    0x11 /* Analog Center */
+#define EXTOUT_ALFE       0x12 /* Analog LFE */
+
+/* Audigy Inputs */
+#define A_EXTIN_AC97_L         0x00    /* AC'97 capture channel - left */
+#define A_EXTIN_AC97_R         0x01    /* AC'97 capture channel - right */
+#define A_EXTIN_SPDIF_CD_L     0x02    /* digital CD left */
+#define A_EXTIN_SPDIF_CD_R     0x03    /* digital CD left */
+#define A_EXTIN_OPT_SPDIF_L     0x04    /* audigy drive Optical SPDIF - left */
+#define A_EXTIN_OPT_SPDIF_R     0x05    /*                              right */ 
+#define A_EXTIN_LINE2_L                0x08    /* audigy drive line2/mic2 - left */
+#define A_EXTIN_LINE2_R                0x09    /*                           right */
+#define A_EXTIN_ADC_L          0x0a    /* Philips ADC - left */
+#define A_EXTIN_ADC_R          0x0b    /*               right */
+#define A_EXTIN_AUX2_L         0x0c    /* audigy drive aux2 - left */
+#define A_EXTIN_AUX2_R         0x0d    /*                   - right */
+
+/* Audigiy Outputs */
+#define A_EXTOUT_FRONT_L       0x00    /* digital front left */
+#define A_EXTOUT_FRONT_R       0x01    /*               right */
+#define A_EXTOUT_CENTER                0x02    /* digital front center */
+#define A_EXTOUT_LFE           0x03    /* digital front lfe */
+#define A_EXTOUT_HEADPHONE_L   0x04    /* headphone audigy drive left */
+#define A_EXTOUT_HEADPHONE_R   0x05    /*                        right */
+#define A_EXTOUT_REAR_L                0x06    /* digital rear left */
+#define A_EXTOUT_REAR_R                0x07    /*              right */
+#define A_EXTOUT_AFRONT_L      0x08    /* analog front left */
+#define A_EXTOUT_AFRONT_R      0x09    /*              right */
+#define A_EXTOUT_ACENTER       0x0a    /* analog center */
+#define A_EXTOUT_ALFE          0x0b    /* analog LFE */
+#define A_EXTOUT_ASIDE_L       0x0c    /* analog side left  - Audigy 2 ZS */
+#define A_EXTOUT_ASIDE_R       0x0d    /*             right - Audigy 2 ZS */
+#define A_EXTOUT_AREAR_L       0x0e    /* analog rear left */
+#define A_EXTOUT_AREAR_R       0x0f    /*             right */
+#define A_EXTOUT_AC97_L                0x10    /* AC97 left (front) */
+#define A_EXTOUT_AC97_R                0x11    /*      right */
+#define A_EXTOUT_ADC_CAP_L     0x16    /* ADC capture buffer left */
+#define A_EXTOUT_ADC_CAP_R     0x17    /*                    right */
+#define A_EXTOUT_MIC_CAP       0x18    /* Mic capture buffer */
+
+/* Audigy constants */
+#define A_C_00000000   0xc0
+#define A_C_00000001   0xc1
+#define A_C_00000002   0xc2
+#define A_C_00000003   0xc3
+#define A_C_00000004   0xc4
+#define A_C_00000008   0xc5
+#define A_C_00000010   0xc6
+#define A_C_00000020   0xc7
+#define A_C_00000100   0xc8
+#define A_C_00010000   0xc9
+#define A_C_00000800   0xca
+#define A_C_10000000   0xcb
+#define A_C_20000000   0xcc
+#define A_C_40000000   0xcd
+#define A_C_80000000   0xce
+#define A_C_7fffffff   0xcf
+#define A_C_ffffffff   0xd0
+#define A_C_fffffffe   0xd1
+#define A_C_c0000000   0xd2
+#define A_C_4f1bbcdc   0xd3
+#define A_C_5a7ef9db   0xd4
+#define A_C_00100000   0xd5
+#define A_GPR_ACCU     0xd6            /* ACCUM, accumulator */
+#define A_GPR_COND     0xd7            /* CCR, condition register */
+#define A_GPR_NOISE0   0xd8            /* noise source */
+#define A_GPR_NOISE1   0xd9            /* noise source */
+#define A_GPR_IRQ      0xda            /* IRQ register */
+#define A_GPR_DBAC     0xdb            /* TRAM Delay Base Address Counter - internal */
+#define A_GPR_DBACE    0xde            /* TRAM Delay Base Address Counter - external */
+
+/* definitions for debug register */
+#define EMU10K1_DBG_ZC                 0x80000000      /* zero tram counter */
+#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000      /* saturation control */
+#define EMU10K1_DBG_SATURATION_ADDR    0x01ff0000      /* saturation address */
+#define EMU10K1_DBG_SINGLE_STEP                0x00008000      /* single step mode */
+#define EMU10K1_DBG_STEP               0x00004000      /* start single step */
+#define EMU10K1_DBG_CONDITION_CODE     0x00003e00      /* condition code */
+#define EMU10K1_DBG_SINGLE_STEP_ADDR   0x000001ff      /* single step address */
+
+/* tank memory address line */
+#define TANKMEMADDRREG_ADDR_MASK 0x000fffff    /* 20 bit tank address field                    */
+#define TANKMEMADDRREG_CLEAR    0x00800000     /* Clear tank memory                            */
+#define TANKMEMADDRREG_ALIGN    0x00400000     /* Align read or write relative to tank access  */
+#define TANKMEMADDRREG_WRITE    0x00200000     /* Write to tank memory                         */
+#define TANKMEMADDRREG_READ     0x00100000     /* Read from tank memory                        */
+
+struct snd_emu10k1_fx8010_info {
+       unsigned int internal_tram_size;        /* in samples */
+       unsigned int external_tram_size;        /* in samples */
+       char fxbus_names[16][32];               /* names of FXBUSes */
+       char extin_names[16][32];               /* names of external inputs */
+       char extout_names[32][32];              /* names of external outputs */
+       unsigned int gpr_controls;              /* count of GPR controls */
+};
+
+#define EMU10K1_GPR_TRANSLATION_NONE           0
+#define EMU10K1_GPR_TRANSLATION_TABLE100       1
+#define EMU10K1_GPR_TRANSLATION_BASS           2
+#define EMU10K1_GPR_TRANSLATION_TREBLE         3
+#define EMU10K1_GPR_TRANSLATION_ONOFF          4
+
+struct snd_emu10k1_fx8010_control_gpr {
+       struct snd_ctl_elem_id id;              /* full control ID definition */
+       unsigned int vcount;            /* visible count */
+       unsigned int count;             /* count of GPR (1..16) */
+       unsigned short gpr[32];         /* GPR number(s) */
+       unsigned int value[32];         /* initial values */
+       unsigned int min;               /* minimum range */
+       unsigned int max;               /* maximum range */
+       unsigned int translation;       /* translation type (EMU10K1_GPR_TRANSLATION*) */
+       const unsigned int *tlv;
+};
+
+/* old ABI without TLV support */
+struct snd_emu10k1_fx8010_control_old_gpr {
+       struct snd_ctl_elem_id id;
+       unsigned int vcount;
+       unsigned int count;
+       unsigned short gpr[32];
+       unsigned int value[32];
+       unsigned int min;
+       unsigned int max;
+       unsigned int translation;
+};
+
+struct snd_emu10k1_fx8010_code {
+       char name[128];
+
+       __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */
+       __u32 *gpr_map;         /* initializers */
+
+       unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; /* GPR controls to add/replace */
+
+       unsigned int gpr_del_control_count; /* count of GPR controls to remove */
+       struct snd_ctl_elem_id *gpr_del_controls; /* IDs of GPR controls to remove */
+
+       unsigned int gpr_list_control_count; /* count of GPR controls to list */
+       unsigned int gpr_list_control_total; /* total count of GPR controls */
+       struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; /* listed GPR controls */
+
+       __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */
+       __u32 *tram_data_map;     /* data initializers */
+       __u32 *tram_addr_map;     /* map initializers */
+
+       __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */
+       __u32 *code;              /* one instruction - 64 bits */
+};
+
+struct snd_emu10k1_fx8010_tram {
+       unsigned int address;           /* 31.bit == 1 -> external TRAM */
+       unsigned int size;              /* size in samples (4 bytes) */
+       unsigned int *samples;          /* pointer to samples (20-bit) */
+                                       /* NULL->clear memory */
+};
+
+struct snd_emu10k1_fx8010_pcm_rec {
+       unsigned int substream;         /* substream number */
+       unsigned int res1;              /* reserved */
+       unsigned int channels;          /* 16-bit channels count, zero = remove this substream */
+       unsigned int tram_start;        /* ring buffer position in TRAM (in samples) */
+       unsigned int buffer_size;       /* count of buffered samples */
+       unsigned short gpr_size;                /* GPR containing size of ringbuffer in samples (host) */
+       unsigned short gpr_ptr;         /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
+       unsigned short gpr_count;       /* GPR containing count of samples between two interrupts (host) */
+       unsigned short gpr_tmpcount;    /* GPR containing current count of samples to interrupt (host = set, FX8010) */
+       unsigned short gpr_trigger;     /* GPR containing trigger (activate) information (host) */
+       unsigned short gpr_running;     /* GPR containing info if PCM is running (FX8010) */
+       unsigned char pad;              /* reserved */
+       unsigned char etram[32];        /* external TRAM address & data (one per channel) */
+       unsigned int res2;              /* reserved */
+};
+
+#define SNDRV_EMU10K1_VERSION          SNDRV_PROTOCOL_VERSION(1, 0, 1)
+
+#define SNDRV_EMU10K1_IOCTL_INFO       _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
+#define SNDRV_EMU10K1_IOCTL_CODE_POKE  _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
+#define SNDRV_EMU10K1_IOCTL_CODE_PEEK  _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
+#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
+#define SNDRV_EMU10K1_IOCTL_TRAM_POKE  _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
+#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK  _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
+#define SNDRV_EMU10K1_IOCTL_PCM_POKE   _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
+#define SNDRV_EMU10K1_IOCTL_PCM_PEEK   _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
+#define SNDRV_EMU10K1_IOCTL_PVERSION   _IOR ('H', 0x40, int)
+#define SNDRV_EMU10K1_IOCTL_STOP       _IO  ('H', 0x80)
+#define SNDRV_EMU10K1_IOCTL_CONTINUE   _IO  ('H', 0x81)
+#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
+#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP        _IOW ('H', 0x83, int)
+#define SNDRV_EMU10K1_IOCTL_DBG_READ   _IOR ('H', 0x84, int)
+
+/* typedefs for compatibility to user-space */
+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
+
+#endif /* __SOUND_EMU10K1_H */
diff --git a/lib/libdss-include/sound/firewire.h b/lib/libdss-include/sound/firewire.h
new file mode 100644 (file)
index 0000000..2da0160
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef _SOUND_FIREWIRE_H_INCLUDED
+#define _SOUND_FIREWIRE_H_INCLUDED
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* events can be read() from the hwdep device */
+
+#define SNDRV_FIREWIRE_EVENT_LOCK_STATUS       0x000010cc
+#define SNDRV_FIREWIRE_EVENT_DICE_NOTIFICATION 0xd1ce004e
+#define SNDRV_FIREWIRE_EVENT_EFW_RESPONSE      0x4e617475
+#define SNDRV_FIREWIRE_EVENT_DIGI00X_MESSAGE   0x746e736c
+
+struct snd_firewire_event_common {
+       unsigned int type; /* SNDRV_FIREWIRE_EVENT_xxx */
+};
+
+struct snd_firewire_event_lock_status {
+       unsigned int type;
+       unsigned int status; /* 0/1 = unlocked/locked */
+};
+
+struct snd_firewire_event_dice_notification {
+       unsigned int type;
+       unsigned int notification; /* DICE-specific bits */
+};
+
+#define SND_EFW_TRANSACTION_USER_SEQNUM_MAX    ((__u32)((__u16)~0) - 1)
+/* each field should be in big endian */
+struct snd_efw_transaction {
+       __be32 length;
+       __be32 version;
+       __be32 seqnum;
+       __be32 category;
+       __be32 command;
+       __be32 status;
+       __be32 params[0];
+};
+struct snd_firewire_event_efw_response {
+       unsigned int type;
+       __be32 response[0];     /* some responses */
+};
+
+struct snd_firewire_event_digi00x_message {
+       unsigned int type;
+       __u32 message;  /* Digi00x-specific message */
+};
+
+union snd_firewire_event {
+       struct snd_firewire_event_common            common;
+       struct snd_firewire_event_lock_status       lock_status;
+       struct snd_firewire_event_dice_notification dice_notification;
+       struct snd_firewire_event_efw_response      efw_response;
+       struct snd_firewire_event_digi00x_message   digi00x_message;
+};
+
+
+#define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info)
+#define SNDRV_FIREWIRE_IOCTL_LOCK      _IO('H', 0xf9)
+#define SNDRV_FIREWIRE_IOCTL_UNLOCK    _IO('H', 0xfa)
+
+#define SNDRV_FIREWIRE_TYPE_DICE       1
+#define SNDRV_FIREWIRE_TYPE_FIREWORKS  2
+#define SNDRV_FIREWIRE_TYPE_BEBOB      3
+#define SNDRV_FIREWIRE_TYPE_OXFW       4
+#define SNDRV_FIREWIRE_TYPE_DIGI00X    5
+#define SNDRV_FIREWIRE_TYPE_TASCAM     6
+/* RME, MOTU, ... */
+
+struct snd_firewire_get_info {
+       unsigned int type; /* SNDRV_FIREWIRE_TYPE_xxx */
+       unsigned int card; /* same as fw_cdev_get_info.card */
+       unsigned char guid[8];
+       char device_name[16]; /* device node in /dev */
+};
+
+/*
+ * SNDRV_FIREWIRE_IOCTL_LOCK prevents the driver from streaming.
+ * Returns -EBUSY if the driver is already streaming.
+ */
+
+#endif /* _SOUND_FIREWIRE_H_INCLUDED */
diff --git a/lib/libdss-include/sound/hdsp.h b/lib/libdss-include/sound/hdsp.h
new file mode 100644 (file)
index 0000000..56b11a7
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef __SOUND_HDSP_H
+#define __SOUND_HDSP_H
+
+/*
+ *   Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
+ *    
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/types.h>
+
+#define HDSP_MATRIX_MIXER_SIZE 2048
+
+enum HDSP_IO_Type {
+       Digiface,
+       Multiface,
+       H9652,
+       H9632,
+       RPM,
+       Undefined,
+};
+
+struct hdsp_peak_rms {
+       __u32 input_peaks[26];
+       __u32 playback_peaks[26];
+       __u32 output_peaks[28];
+       __u64 input_rms[26];
+       __u64 playback_rms[26];
+       /* These are only used for H96xx cards */
+       __u64 output_rms[26];
+};
+
+#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms)
+
+struct hdsp_config_info {
+       unsigned char pref_sync_ref;
+       unsigned char wordclock_sync_check;
+       unsigned char spdif_sync_check;
+       unsigned char adatsync_sync_check;
+       unsigned char adat_sync_check[3];
+       unsigned char spdif_in;
+       unsigned char spdif_out;
+       unsigned char spdif_professional;
+       unsigned char spdif_emphasis;
+       unsigned char spdif_nonaudio;
+       unsigned int spdif_sample_rate;
+       unsigned int system_sample_rate;
+       unsigned int autosync_sample_rate;
+       unsigned char system_clock_mode;
+       unsigned char clock_source;
+       unsigned char autosync_ref;
+       unsigned char line_out;
+       unsigned char passthru; 
+       unsigned char da_gain;
+       unsigned char ad_gain;
+       unsigned char phone_gain;
+       unsigned char xlr_breakout_cable;
+       unsigned char analog_extension_board;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info)
+
+struct hdsp_firmware {
+       void *firmware_data;    /* 24413 x 4 bytes */
+};
+
+#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware)
+
+struct hdsp_version {
+       enum HDSP_IO_Type io_type;
+       unsigned short firmware_rev;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version)
+
+struct hdsp_mixer {
+       unsigned short matrix[HDSP_MATRIX_MIXER_SIZE];
+};
+
+#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer)
+
+struct hdsp_9632_aeb {
+       int aebi;
+       int aebo;
+};
+
+#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
+
+/* typedefs for compatibility to user-space */
+typedef enum HDSP_IO_Type HDSP_IO_Type;
+typedef struct hdsp_peak_rms hdsp_peak_rms_t;
+typedef struct hdsp_config_info hdsp_config_info_t;
+typedef struct hdsp_firmware hdsp_firmware_t;
+typedef struct hdsp_version hdsp_version_t;
+typedef struct hdsp_mixer hdsp_mixer_t;
+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
+
+#endif /* __SOUND_HDSP_H */
diff --git a/lib/libdss-include/sound/hdspm.h b/lib/libdss-include/sound/hdspm.h
new file mode 100644 (file)
index 0000000..c4db6f5
--- /dev/null
@@ -0,0 +1,231 @@
+#ifndef __SOUND_HDSPM_H
+#define __SOUND_HDSPM_H
+/*
+ *   Copyright (C) 2003 Winfried Ritsch (IEM)
+ *   based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/types.h>
+
+/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
+#define HDSPM_MAX_CHANNELS      64
+
+enum hdspm_io_type {
+       MADI,
+       MADIface,
+       AIO,
+       AES32,
+       RayDAT
+};
+
+enum hdspm_speed {
+       ss,
+       ds,
+       qs
+};
+
+/* -------------------- IOCTL Peak/RMS Meters -------------------- */
+
+struct hdspm_peak_rms {
+       __u32 input_peaks[64];
+       __u32 playback_peaks[64];
+       __u32 output_peaks[64];
+
+       __u64 input_rms[64];
+       __u64 playback_rms[64];
+       __u64 output_rms[64];
+
+       __u8 speed; /* enum {ss, ds, qs} */
+       int status2;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
+       _IOR('H', 0x42, struct hdspm_peak_rms)
+
+/* ------------ CONFIG block IOCTL ---------------------- */
+
+struct hdspm_config {
+       unsigned char pref_sync_ref;
+       unsigned char wordclock_sync_check;
+       unsigned char madi_sync_check;
+       unsigned int system_sample_rate;
+       unsigned int autosync_sample_rate;
+       unsigned char system_clock_mode;
+       unsigned char clock_source;
+       unsigned char autosync_ref;
+       unsigned char line_out;
+       unsigned int passthru;
+       unsigned int analog_out;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
+       _IOR('H', 0x41, struct hdspm_config)
+
+/*
+ * If there's a TCO (TimeCode Option) board installed,
+ * there are further options and status data available.
+ * The hdspm_ltc structure contains the current SMPTE
+ * timecode and some status information and can be
+ * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
+ * hdspm_status struct.
+ */
+
+enum hdspm_ltc_format {
+       format_invalid,
+       fps_24,
+       fps_25,
+       fps_2997,
+       fps_30
+};
+
+enum hdspm_ltc_frame {
+       frame_invalid,
+       drop_frame,
+       full_frame
+};
+
+enum hdspm_ltc_input_format {
+       ntsc,
+       pal,
+       no_video
+};
+
+struct hdspm_ltc {
+       unsigned int ltc;
+
+       enum hdspm_ltc_format format;
+       enum hdspm_ltc_frame frame;
+       enum hdspm_ltc_input_format input_format;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
+
+/*
+ * The status data reflects the device's current state
+ * as determined by the card's configuration and
+ * connection status.
+ */
+
+enum hdspm_sync {
+       hdspm_sync_no_lock = 0,
+       hdspm_sync_lock = 1,
+       hdspm_sync_sync = 2
+};
+
+enum hdspm_madi_input {
+       hdspm_input_optical = 0,
+       hdspm_input_coax = 1
+};
+
+enum hdspm_madi_channel_format {
+       hdspm_format_ch_64 = 0,
+       hdspm_format_ch_56 = 1
+};
+
+enum hdspm_madi_frame_format {
+       hdspm_frame_48 = 0,
+       hdspm_frame_96 = 1
+};
+
+enum hdspm_syncsource {
+       syncsource_wc = 0,
+       syncsource_madi = 1,
+       syncsource_tco = 2,
+       syncsource_sync = 3,
+       syncsource_none = 4
+};
+
+struct hdspm_status {
+       __u8 card_type; /* enum hdspm_io_type */
+       enum hdspm_syncsource autosync_source;
+
+       __u64 card_clock;
+       __u32 master_period;
+
+       union {
+               struct {
+                       __u8 sync_wc; /* enum hdspm_sync */
+                       __u8 sync_madi; /* enum hdspm_sync */
+                       __u8 sync_tco; /* enum hdspm_sync */
+                       __u8 sync_in; /* enum hdspm_sync */
+                       __u8 madi_input; /* enum hdspm_madi_input */
+                       __u8 channel_format; /* enum hdspm_madi_channel_format */
+                       __u8 frame_format; /* enum hdspm_madi_frame_format */
+               } madi;
+       } card_specific;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_STATUS \
+       _IOR('H', 0x47, struct hdspm_status)
+
+/*
+ * Get information about the card and its add-ons.
+ */
+
+#define HDSPM_ADDON_TCO 1
+
+struct hdspm_version {
+       __u8 card_type; /* enum hdspm_io_type */
+       char cardname[20];
+       unsigned int serial;
+       unsigned short firmware_rev;
+       int addons;
+};
+
+#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
+
+/* ------------- get Matrix Mixer IOCTL --------------- */
+
+/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
+ * 32768 Bytes
+ */
+
+/* organisation is 64 channelfader in a continuous memory block */
+/* equivalent to hardware definition, maybe for future feature of mmap of
+ * them
+ */
+/* each of 64 outputs has 64 infader and 64 outfader:
+   Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
+
+#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
+
+struct hdspm_channelfader {
+       unsigned int in[HDSPM_MIXER_CHANNELS];
+       unsigned int pb[HDSPM_MIXER_CHANNELS];
+};
+
+struct hdspm_mixer {
+       struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
+};
+
+struct hdspm_mixer_ioctl {
+       struct hdspm_mixer *mixer;
+};
+
+/* use indirect access due to the limit of ioctl bit size */
+#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
+
+/* typedefs for compatibility to user-space */
+typedef struct hdspm_peak_rms hdspm_peak_rms_t;
+typedef struct hdspm_config_info hdspm_config_info_t;
+typedef struct hdspm_version hdspm_version_t;
+typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
+typedef struct hdspm_mixer hdspm_mixer_t;
+
+
+#endif
diff --git a/lib/libdss-include/sound/sb16_csp.h b/lib/libdss-include/sound/sb16_csp.h
new file mode 100644 (file)
index 0000000..255f69c
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ *  Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
+ *                        Takashi Iwai <tiwai@suse.de>
+ *
+ *  SB16ASP/AWE32 CSP control
+ *
+ *   This program is free software; you can redistribute it and/or modify 
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+#ifndef __SOUND_SB16_CSP_H
+#define __SOUND_SB16_CSP_H
+
+
+/* CSP modes */
+#define SNDRV_SB_CSP_MODE_NONE         0x00
+#define SNDRV_SB_CSP_MODE_DSP_READ     0x01    /* Record from DSP */
+#define SNDRV_SB_CSP_MODE_DSP_WRITE    0x02    /* Play to DSP */
+#define SNDRV_SB_CSP_MODE_QSOUND               0x04    /* QSound */
+
+/* CSP load flags */
+#define SNDRV_SB_CSP_LOAD_FROMUSER     0x01
+#define SNDRV_SB_CSP_LOAD_INITBLOCK    0x02
+
+/* CSP sample width */
+#define SNDRV_SB_CSP_SAMPLE_8BIT               0x01
+#define SNDRV_SB_CSP_SAMPLE_16BIT              0x02
+
+/* CSP channels */
+#define SNDRV_SB_CSP_MONO                      0x01
+#define SNDRV_SB_CSP_STEREO            0x02
+
+/* CSP rates */
+#define SNDRV_SB_CSP_RATE_8000         0x01
+#define SNDRV_SB_CSP_RATE_11025                0x02
+#define SNDRV_SB_CSP_RATE_22050                0x04
+#define SNDRV_SB_CSP_RATE_44100                0x08
+#define SNDRV_SB_CSP_RATE_ALL          0x0f
+
+/* CSP running state */
+#define SNDRV_SB_CSP_ST_IDLE           0x00
+#define SNDRV_SB_CSP_ST_LOADED         0x01
+#define SNDRV_SB_CSP_ST_RUNNING                0x02
+#define SNDRV_SB_CSP_ST_PAUSED         0x04
+#define SNDRV_SB_CSP_ST_AUTO           0x08
+#define SNDRV_SB_CSP_ST_QSOUND         0x10
+
+/* maximum QSound value (180 degrees right) */
+#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT  0x20
+
+/* maximum microcode RIFF file size */
+#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE   0x3000
+
+/* microcode header */
+struct snd_sb_csp_mc_header {
+       char codec_name[16];            /* id name of codec */
+       unsigned short func_req;        /* requested function */
+};
+
+/* microcode to be loaded */
+struct snd_sb_csp_microcode {
+       struct snd_sb_csp_mc_header info;
+       unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE];
+};
+
+/* start CSP with sample_width in mono/stereo */
+struct snd_sb_csp_start {
+       int sample_width;       /* sample width, look above */
+       int channels;           /* channels, look above */
+};
+
+/* CSP information */
+struct snd_sb_csp_info {
+       char codec_name[16];            /* id name of codec */
+       unsigned short func_nr;         /* function number */
+       unsigned int acc_format;        /* accepted PCM formats */
+       unsigned short acc_channels;    /* accepted channels */
+       unsigned short acc_width;       /* accepted sample width */
+       unsigned short acc_rates;       /* accepted sample rates */
+       unsigned short csp_mode;        /* CSP mode, see above */
+       unsigned short run_channels;    /* current channels  */
+       unsigned short run_width;       /* current sample width */
+       unsigned short version;         /* version id: 0x10 - 0x1f */
+       unsigned short state;           /* state bits */
+};
+
+/* HWDEP controls */
+/* get CSP information */
+#define SNDRV_SB_CSP_IOCTL_INFO                _IOR('H', 0x10, struct snd_sb_csp_info)
+/* load microcode to CSP */
+/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
+ * defined for some architectures like MIPS, and it leads to build errors.
+ * (x86 and co have 14-bit size, thus it's valid, though.)
+ * As a workaround for skipping the size-limit check, here we don't use the
+ * normal _IOW() macro but _IOC() with the manual argument.
+ */
+#define SNDRV_SB_CSP_IOCTL_LOAD_CODE   \
+       _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
+/* unload microcode from CSP */
+#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
+/* start CSP */
+#define SNDRV_SB_CSP_IOCTL_START               _IOW('H', 0x13, struct snd_sb_csp_start)
+/* stop CSP */
+#define SNDRV_SB_CSP_IOCTL_STOP                _IO('H', 0x14)
+/* pause CSP and DMA transfer */
+#define SNDRV_SB_CSP_IOCTL_PAUSE               _IO('H', 0x15)
+/* restart CSP and DMA transfer */
+#define SNDRV_SB_CSP_IOCTL_RESTART     _IO('H', 0x16)
+
+
+#endif /* __SOUND_SB16_CSP_H */
diff --git a/lib/libdss-include/sound/sfnt_info.h b/lib/libdss-include/sound/sfnt_info.h
new file mode 100644 (file)
index 0000000..1bce7fd
--- /dev/null
@@ -0,0 +1,212 @@
+#ifndef __SOUND_SFNT_INFO_H
+#define __SOUND_SFNT_INFO_H
+
+/*
+ *  Patch record compatible with AWE driver on OSS
+ *
+ *  Copyright (C) 1999-2000 Takashi Iwai
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include <sound/asound.h>
+
+/*
+ * patch information record
+ */
+
+#ifdef SNDRV_BIG_ENDIAN
+#define SNDRV_OSS_PATCHKEY(id) (0xfd00|id)
+#else
+#define SNDRV_OSS_PATCHKEY(id) ((id<<8)|0xfd)
+#endif
+
+/* patch interface header: 16 bytes */
+struct soundfont_patch_info {
+       unsigned short key;             /* use the key below */
+#define SNDRV_OSS_SOUNDFONT_PATCH              SNDRV_OSS_PATCHKEY(0x07)
+
+       short device_no;                /* synthesizer number */
+       unsigned short sf_id;           /* file id (should be zero) */
+       short optarg;                   /* optional argument */
+       int len;                        /* data length (without this header) */
+
+       short type;                     /* patch operation type */
+#define SNDRV_SFNT_LOAD_INFO           0       /* awe_voice_rec */
+#define SNDRV_SFNT_LOAD_DATA           1       /* awe_sample_info */
+#define SNDRV_SFNT_OPEN_PATCH  2       /* awe_open_parm */
+#define SNDRV_SFNT_CLOSE_PATCH 3       /* none */
+       /* 4 is obsolete */
+#define SNDRV_SFNT_REPLACE_DATA        5       /* awe_sample_info (optarg=#channels)*/
+#define SNDRV_SFNT_MAP_PRESET  6       /* awe_voice_map */
+       /* 7 is not used */
+#define SNDRV_SFNT_PROBE_DATA          8       /* optarg=sample */
+#define SNDRV_SFNT_REMOVE_INFO         9       /* optarg=(bank<<8)|instr */
+
+       short reserved;                 /* word alignment data */
+
+       /* the actual patch data begins after this */
+};
+
+
+/*
+ * open patch
+ */
+
+#define SNDRV_SFNT_PATCH_NAME_LEN      32
+
+struct soundfont_open_parm {
+       unsigned short type;            /* sample type */
+#define SNDRV_SFNT_PAT_TYPE_MISC       0
+#define SNDRV_SFNT_PAT_TYPE_GUS        6
+#define SNDRV_SFNT_PAT_TYPE_MAP        7
+#define SNDRV_SFNT_PAT_LOCKED  0x100   /* lock the samples */
+#define SNDRV_SFNT_PAT_SHARED  0x200   /* sample is shared */
+
+       short reserved;
+       char name[SNDRV_SFNT_PATCH_NAME_LEN];
+};
+
+
+/*
+ * raw voice information record
+ */
+
+/* wave table envelope & effect parameters to control EMU8000 */
+struct soundfont_voice_parm {
+       unsigned short moddelay;        /* modulation delay (0x8000) */
+       unsigned short modatkhld;       /* modulation attack & hold time (0x7f7f) */
+       unsigned short moddcysus;       /* modulation decay & sustain (0x7f7f) */
+       unsigned short modrelease;      /* modulation release time (0x807f) */
+       short modkeyhold, modkeydecay;  /* envelope change per key (not used) */
+       unsigned short voldelay;        /* volume delay (0x8000) */
+       unsigned short volatkhld;       /* volume attack & hold time (0x7f7f) */
+       unsigned short voldcysus;       /* volume decay & sustain (0x7f7f) */
+       unsigned short volrelease;      /* volume release time (0x807f) */
+       short volkeyhold, volkeydecay;  /* envelope change per key (not used) */
+       unsigned short lfo1delay;       /* LFO1 delay (0x8000) */
+       unsigned short lfo2delay;       /* LFO2 delay (0x8000) */
+       unsigned short pefe;            /* modulation pitch & cutoff (0x0000) */
+       unsigned short fmmod;           /* LFO1 pitch & cutoff (0x0000) */
+       unsigned short tremfrq;         /* LFO1 volume & freq (0x0000) */
+       unsigned short fm2frq2;         /* LFO2 pitch & freq (0x0000) */
+       unsigned char cutoff;           /* initial cutoff (0xff) */
+       unsigned char filterQ;          /* initial filter Q [0-15] (0x0) */
+       unsigned char chorus;           /* chorus send (0x00) */
+       unsigned char reverb;           /* reverb send (0x00) */
+       unsigned short reserved[4];     /* not used */
+};
+
+
+/* wave table parameters: 92 bytes */
+struct soundfont_voice_info {
+       unsigned short sf_id;           /* file id (should be zero) */
+       unsigned short sample;          /* sample id */
+       int start, end;                 /* sample offset correction */
+       int loopstart, loopend;         /* loop offset correction */
+       short rate_offset;              /* sample rate pitch offset */
+       unsigned short mode;            /* sample mode */
+#define SNDRV_SFNT_MODE_ROMSOUND               0x8000
+#define SNDRV_SFNT_MODE_STEREO         1
+#define SNDRV_SFNT_MODE_LOOPING                2
+#define SNDRV_SFNT_MODE_NORELEASE              4       /* obsolete */
+#define SNDRV_SFNT_MODE_INIT_PARM              8
+
+       short root;                     /* midi root key */
+       short tune;                     /* pitch tuning (in cents) */
+       unsigned char low, high;        /* key note range */
+       unsigned char vellow, velhigh;  /* velocity range */
+       signed char fixkey, fixvel;     /* fixed key, velocity */
+       signed char pan, fixpan;        /* panning, fixed panning */
+       short exclusiveClass;           /* exclusive class (0 = none) */
+       unsigned char amplitude;        /* sample volume (127 max) */
+       unsigned char attenuation;      /* attenuation (0.375dB) */
+       short scaleTuning;              /* pitch scale tuning(%), normally 100 */
+       struct soundfont_voice_parm parm;       /* voice envelope parameters */
+       unsigned short sample_mode;     /* sample mode_flag (set by driver) */
+};
+
+
+/* instrument info header: 4 bytes */
+struct soundfont_voice_rec_hdr {
+       unsigned char bank;             /* midi bank number */
+       unsigned char instr;            /* midi preset number */
+       char nvoices;                   /* number of voices */
+       char write_mode;                /* write mode; normally 0 */
+#define SNDRV_SFNT_WR_APPEND           0       /* append anyway */
+#define SNDRV_SFNT_WR_EXCLUSIVE                1       /* skip if already exists */
+#define SNDRV_SFNT_WR_REPLACE          2       /* replace if already exists */
+};
+
+
+/*
+ * sample wave information
+ */
+
+/* wave table sample header: 32 bytes */
+struct soundfont_sample_info {
+       unsigned short sf_id;           /* file id (should be zero) */
+       unsigned short sample;          /* sample id */
+       int start, end;                 /* start & end offset */
+       int loopstart, loopend;         /* loop start & end offset */
+       int size;                       /* size (0 = ROM) */
+       short dummy;                    /* not used */
+       unsigned short mode_flags;      /* mode flags */
+#define SNDRV_SFNT_SAMPLE_8BITS                1       /* wave data is 8bits */
+#define SNDRV_SFNT_SAMPLE_UNSIGNED     2       /* wave data is unsigned */
+#define SNDRV_SFNT_SAMPLE_NO_BLANK     4       /* no blank loop is attached */
+#define SNDRV_SFNT_SAMPLE_SINGLESHOT   8       /* single-shot w/o loop */
+#define SNDRV_SFNT_SAMPLE_BIDIR_LOOP   16      /* bidirectional looping */
+#define SNDRV_SFNT_SAMPLE_STEREO_LEFT  32      /* stereo left sound */
+#define SNDRV_SFNT_SAMPLE_STEREO_RIGHT 64      /* stereo right sound */
+#define SNDRV_SFNT_SAMPLE_REVERSE_LOOP 128     /* reverse looping */
+       unsigned int truesize;          /* used memory size (set by driver) */
+};
+
+
+/*
+ * voice preset mapping (aliasing)
+ */
+
+struct soundfont_voice_map {
+       int map_bank, map_instr, map_key;       /* key = -1 means all keys */
+       int src_bank, src_instr, src_key;
+};
+
+
+/*
+ * ioctls for hwdep
+ */
+
+#define SNDRV_EMUX_HWDEP_NAME  "Emux WaveTable"
+
+#define SNDRV_EMUX_VERSION     ((1 << 16) | (0 << 8) | 0)      /* 1.0.0 */
+
+struct snd_emux_misc_mode {
+       int port;       /* -1 = all */
+       int mode;
+       int value;
+       int value2;     /* reserved */
+};
+
+#define SNDRV_EMUX_IOCTL_VERSION       _IOR('H', 0x80, unsigned int)
+#define SNDRV_EMUX_IOCTL_LOAD_PATCH    _IOWR('H', 0x81, struct soundfont_patch_info)
+#define SNDRV_EMUX_IOCTL_RESET_SAMPLES _IO('H', 0x82)
+#define SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES _IO('H', 0x83)
+#define SNDRV_EMUX_IOCTL_MEM_AVAIL     _IOW('H', 0x84, int)
+#define SNDRV_EMUX_IOCTL_MISC_MODE     _IOWR('H', 0x84, struct snd_emux_misc_mode)
+
+#endif /* __SOUND_SFNT_INFO_H */
diff --git a/lib/libdss-include/spawn.h b/lib/libdss-include/spawn.h
new file mode 100644 (file)
index 0000000..f46e8c2
--- /dev/null
@@ -0,0 +1,190 @@
+/* Definitions for POSIX spawn interface.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SPAWN_H
+#define        _SPAWN_H        1
+
+#include <features.h>
+#include <sched.h>
+#define __need_sigset_t
+#include <signal.h>
+#include <sys/types.h>
+
+
+/* Data structure to contain attributes for thread creation.  */
+typedef struct
+{
+  short int __flags;
+  pid_t __pgrp;
+  sigset_t __sd;
+  sigset_t __ss;
+  struct sched_param __sp;
+  int __policy;
+  int __pad[16];
+} posix_spawnattr_t;
+
+
+/* Data structure to contain information about the actions to be
+   performed in the new process with respect to file descriptors.  */
+typedef struct
+{
+  int __allocated;
+  int __used;
+  struct __spawn_action *__actions;
+  int __pad[16];
+} posix_spawn_file_actions_t;
+
+
+/* Flags to be set in the `posix_spawnattr_t'.  */
+#define POSIX_SPAWN_RESETIDS           0x01
+#define POSIX_SPAWN_SETPGROUP          0x02
+#define POSIX_SPAWN_SETSIGDEF          0x04
+#define POSIX_SPAWN_SETSIGMASK         0x08
+#define POSIX_SPAWN_SETSCHEDPARAM      0x10
+#define POSIX_SPAWN_SETSCHEDULER       0x20
+#ifdef __USE_GNU
+# define POSIX_SPAWN_USEVFORK          0x40
+#endif
+
+
+__BEGIN_DECLS
+
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW. */
+extern int posix_spawn (pid_t *__restrict __pid,
+                       const char *__restrict __path,
+                       const posix_spawn_file_actions_t *__restrict
+                       __file_actions,
+                       const posix_spawnattr_t *__restrict __attrp,
+                       char *const __argv[__restrict_arr],
+                       char *const __envp[__restrict_arr]);
+
+/* Similar to `posix_spawn' but search for FILE in the PATH.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int posix_spawnp (pid_t *__pid, const char *__file,
+                        const posix_spawn_file_actions_t *__file_actions,
+                        const posix_spawnattr_t *__attrp,
+                        char *const __argv[], char *const __envp[]);
+
+
+/* Initialize data structure with attributes for `spawn' to default values.  */
+extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW;
+
+/* Free resources associated with ATTR.  */
+extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW;
+
+/* Store signal mask for signals with default handling from ATTR in
+   SIGDEFAULT.  */
+extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *
+                                         __restrict __attr,
+                                         sigset_t *__restrict __sigdefault)
+     __THROW;
+
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
+extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *__restrict __attr,
+                                         const sigset_t *__restrict
+                                         __sigdefault)
+     __THROW;
+
+/* Store signal mask for the new process from ATTR in SIGMASK.  */
+extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *__restrict
+                                      __attr,
+                                      sigset_t *__restrict __sigmask) __THROW;
+
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+extern int posix_spawnattr_setsigmask (posix_spawnattr_t *__restrict __attr,
+                                      const sigset_t *__restrict __sigmask)
+     __THROW;
+
+/* Get flag word from the attribute structure.  */
+extern int posix_spawnattr_getflags (const posix_spawnattr_t *__restrict
+                                    __attr,
+                                    short int *__restrict __flags) __THROW;
+
+/* Store flags in the attribute structure.  */
+extern int posix_spawnattr_setflags (posix_spawnattr_t *_attr,
+                                    short int __flags) __THROW;
+
+/* Get process group ID from the attribute structure.  */
+extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *__restrict
+                                     __attr, pid_t *__restrict __pgroup)
+     __THROW;
+
+/* Store process group ID in the attribute structure.  */
+extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr,
+                                     pid_t __pgroup) __THROW;
+
+/* Get scheduling policy from the attribute structure.  */
+extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *
+                                          __restrict __attr,
+                                          int *__restrict __schedpolicy)
+     __THROW;
+
+/* Store scheduling policy in the attribute structure.  */
+extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr,
+                                          int __schedpolicy) __THROW;
+
+/* Get scheduling parameters from the attribute structure.  */
+extern int posix_spawnattr_getschedparam (const posix_spawnattr_t *
+                                         __restrict __attr,
+                                         struct sched_param *__restrict
+                                         __schedparam) __THROW;
+
+/* Store scheduling parameters in the attribute structure.  */
+extern int posix_spawnattr_setschedparam (posix_spawnattr_t *__restrict __attr,
+                                         const struct sched_param *
+                                         __restrict __schedparam) __THROW;
+
+
+/* Initialize data structure for file attribute for `spawn' call.  */
+extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *
+                                         __file_actions) __THROW;
+
+/* Free resources associated with FILE-ACTIONS.  */
+extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *
+                                            __file_actions) __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `open' for the given file during the `spawn' call.  */
+extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *
+                                            __restrict __file_actions,
+                                            int __fd,
+                                            const char *__restrict __path,
+                                            int __oflag, mode_t __mode)
+     __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `close' for the given file descriptor during the `spawn' call.  */
+extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *
+                                             __file_actions, int __fd)
+     __THROW;
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   `dup2' for the given file descriptors during the `spawn' call.  */
+extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
+                                            __file_actions,
+                                            int __fd, int __newfd) __THROW;
+
+__END_DECLS
+
+#endif /* spawn.h */
diff --git a/lib/libdss-include/stab.h b/lib/libdss-include/stab.h
new file mode 100644 (file)
index 0000000..9dc3c32
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef __GNU_STAB__
+
+/* Indicate the GNU stab.h is in use.  */
+
+#define __GNU_STAB__
+
+#define __define_stab(NAME, CODE, STRING) NAME=CODE,
+
+enum __stab_debug_code
+{
+#include <bits/stab.def>
+LAST_UNUSED_STAB_CODE
+};
+
+#undef __define_stab
+
+#endif /* __GNU_STAB_ */
diff --git a/lib/libdss-include/stdc-predef.h b/lib/libdss-include/stdc-predef.h
new file mode 100644 (file)
index 0000000..f9f7f73
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _STDC_PREDEF_H
+#define        _STDC_PREDEF_H  1
+
+/* This header is separate from features.h so that the compiler can
+   include it implicitly at the start of every compilation.  It must
+   not itself include <features.h> or any other header that includes
+   <features.h> because the implicit include comes before any feature
+   test macros that may be defined in a source file before it first
+   explicitly includes a system header.  GCC knows the name of this
+   header in order to preinclude it.  */
+
+/* glibc's intent is to support the IEC 559 math functionality, real
+   and complex.  If the GCC (4.9 and later) predefined macros
+   specifying compiler intent are available, use them to determine
+   whether the overall intent is to support these features; otherwise,
+   presume an older compiler has intent to support these features and
+   define these macros by default.  */
+
+#ifdef __GCC_IEC_559
+# if __GCC_IEC_559 > 0
+#  define __STDC_IEC_559__             1
+# endif
+#else
+# define __STDC_IEC_559__              1
+#endif
+
+#ifdef __GCC_IEC_559_COMPLEX
+# if __GCC_IEC_559_COMPLEX > 0
+#  define __STDC_IEC_559_COMPLEX__     1
+# endif
+#else
+# define __STDC_IEC_559_COMPLEX__      1
+#endif
+
+/* wchar_t uses Unicode 8.0.0.  Version 8.0 of the Unicode Standard is
+   synchronized with ISO/IEC 10646:2014, plus Amendment 1 (published
+   2015-05-15).  */
+#define __STDC_ISO_10646__             201505L
+
+/* We do not support C11 <threads.h>.  */
+#define __STDC_NO_THREADS__            1
+
+#endif
diff --git a/lib/libdss-include/stdint.h b/lib/libdss-include/stdint.h
new file mode 100644 (file)
index 0000000..4427627
--- /dev/null
@@ -0,0 +1,310 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99: 7.18 Integer types <stdint.h>
+ */
+
+#ifndef _STDINT_H
+#define _STDINT_H      1
+
+#include <features.h>
+#include <bits/wchar.h>
+#include <bits/wordsize.h>
+
+/* Exact integral types.  */
+
+/* Signed.  */
+
+/* There is some amount of overlap with <sys/types.h> as known by inet code */
+#ifndef __int8_t_defined
+# define __int8_t_defined
+typedef signed char            int8_t;
+typedef short int              int16_t;
+typedef int                    int32_t;
+# if __WORDSIZE == 64
+typedef long int               int64_t;
+# else
+__extension__
+typedef long long int          int64_t;
+# endif
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint8_t;
+typedef unsigned short int     uint16_t;
+#ifndef __uint32_t_defined
+typedef unsigned int           uint32_t;
+# define __uint32_t_defined
+#endif
+#if __WORDSIZE == 64
+typedef unsigned long int      uint64_t;
+#else
+__extension__
+typedef unsigned long long int uint64_t;
+#endif
+
+
+/* Small types.  */
+
+/* Signed.  */
+typedef signed char            int_least8_t;
+typedef short int              int_least16_t;
+typedef int                    int_least32_t;
+#if __WORDSIZE == 64
+typedef long int               int_least64_t;
+#else
+__extension__
+typedef long long int          int_least64_t;
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint_least8_t;
+typedef unsigned short int     uint_least16_t;
+typedef unsigned int           uint_least32_t;
+#if __WORDSIZE == 64
+typedef unsigned long int      uint_least64_t;
+#else
+__extension__
+typedef unsigned long long int uint_least64_t;
+#endif
+
+
+/* Fast types.  */
+
+/* Signed.  */
+typedef signed char            int_fast8_t;
+#if __WORDSIZE == 64
+typedef long int               int_fast16_t;
+typedef long int               int_fast32_t;
+typedef long int               int_fast64_t;
+#else
+typedef int                    int_fast16_t;
+typedef int                    int_fast32_t;
+__extension__
+typedef long long int          int_fast64_t;
+#endif
+
+/* Unsigned.  */
+typedef unsigned char          uint_fast8_t;
+#if __WORDSIZE == 64
+typedef unsigned long int      uint_fast16_t;
+typedef unsigned long int      uint_fast32_t;
+typedef unsigned long int      uint_fast64_t;
+#else
+typedef unsigned int           uint_fast16_t;
+typedef unsigned int           uint_fast32_t;
+__extension__
+typedef unsigned long long int uint_fast64_t;
+#endif
+
+
+/* Types for `void *' pointers.  */
+#if __WORDSIZE == 64
+# ifndef __intptr_t_defined
+typedef long int               intptr_t;
+#  define __intptr_t_defined
+# endif
+typedef unsigned long int      uintptr_t;
+#else
+# ifndef __intptr_t_defined
+typedef int                    intptr_t;
+#  define __intptr_t_defined
+# endif
+typedef unsigned int           uintptr_t;
+#endif
+
+
+/* Largest integral types.  */
+#if __WORDSIZE == 64
+typedef long int               intmax_t;
+typedef unsigned long int      uintmax_t;
+#else
+__extension__
+typedef long long int          intmax_t;
+__extension__
+typedef unsigned long long int uintmax_t;
+#endif
+
+
+# if __WORDSIZE == 64
+#  define __INT64_C(c) c ## L
+#  define __UINT64_C(c)        c ## UL
+# else
+#  define __INT64_C(c) c ## LL
+#  define __UINT64_C(c)        c ## ULL
+# endif
+
+/* Limits of integral types.  */
+
+/* Minimum of signed integral types.  */
+# define INT8_MIN              (-128)
+# define INT16_MIN             (-32767-1)
+# define INT32_MIN             (-2147483647-1)
+# define INT64_MIN             (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types.  */
+# define INT8_MAX              (127)
+# define INT16_MAX             (32767)
+# define INT32_MAX             (2147483647)
+# define INT64_MAX             (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types.  */
+# define UINT8_MAX             (255)
+# define UINT16_MAX            (65535)
+# define UINT32_MAX            (4294967295U)
+# define UINT64_MAX            (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MIN                (-128)
+# define INT_LEAST16_MIN       (-32767-1)
+# define INT_LEAST32_MIN       (-2147483647-1)
+# define INT_LEAST64_MIN       (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MAX                (127)
+# define INT_LEAST16_MAX       (32767)
+# define INT_LEAST32_MAX       (2147483647)
+# define INT_LEAST64_MAX       (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types having a minimum size.  */
+# define UINT_LEAST8_MAX       (255)
+# define UINT_LEAST16_MAX      (65535)
+# define UINT_LEAST32_MAX      (4294967295U)
+# define UINT_LEAST64_MAX      (__UINT64_C(18446744073709551615))
+
+
+/* Minimum of fast signed integral types having a minimum size.  */
+# define INT_FAST8_MIN         (-128)
+# if __WORDSIZE == 64
+#  define INT_FAST16_MIN       (-9223372036854775807L-1)
+#  define INT_FAST32_MIN       (-9223372036854775807L-1)
+# else
+#  define INT_FAST16_MIN       (-2147483647-1)
+#  define INT_FAST32_MIN       (-2147483647-1)
+# endif
+# define INT_FAST64_MIN                (-__INT64_C(9223372036854775807)-1)
+/* Maximum of fast signed integral types having a minimum size.  */
+# define INT_FAST8_MAX         (127)
+# if __WORDSIZE == 64
+#  define INT_FAST16_MAX       (9223372036854775807L)
+#  define INT_FAST32_MAX       (9223372036854775807L)
+# else
+#  define INT_FAST16_MAX       (2147483647)
+#  define INT_FAST32_MAX       (2147483647)
+# endif
+# define INT_FAST64_MAX                (__INT64_C(9223372036854775807))
+
+/* Maximum of fast unsigned integral types having a minimum size.  */
+# define UINT_FAST8_MAX                (255)
+# if __WORDSIZE == 64
+#  define UINT_FAST16_MAX      (18446744073709551615UL)
+#  define UINT_FAST32_MAX      (18446744073709551615UL)
+# else
+#  define UINT_FAST16_MAX      (4294967295U)
+#  define UINT_FAST32_MAX      (4294967295U)
+# endif
+# define UINT_FAST64_MAX       (__UINT64_C(18446744073709551615))
+
+
+/* Values to test for integral types holding `void *' pointer.  */
+# if __WORDSIZE == 64
+#  define INTPTR_MIN           (-9223372036854775807L-1)
+#  define INTPTR_MAX           (9223372036854775807L)
+#  define UINTPTR_MAX          (18446744073709551615UL)
+# else
+#  define INTPTR_MIN           (-2147483647-1)
+#  define INTPTR_MAX           (2147483647)
+#  define UINTPTR_MAX          (4294967295U)
+# endif
+
+
+/* Minimum for largest signed integral type.  */
+# define INTMAX_MIN            (-__INT64_C(9223372036854775807)-1)
+/* Maximum for largest signed integral type.  */
+# define INTMAX_MAX            (__INT64_C(9223372036854775807))
+
+/* Maximum for largest unsigned integral type.  */
+# define UINTMAX_MAX           (__UINT64_C(18446744073709551615))
+
+
+/* Limits of other integer types.  */
+
+/* Limits of `ptrdiff_t' type.  */
+# if __WORDSIZE == 64
+#  define PTRDIFF_MIN          (-9223372036854775807L-1)
+#  define PTRDIFF_MAX          (9223372036854775807L)
+# else
+#  define PTRDIFF_MIN          (-2147483647-1)
+#  define PTRDIFF_MAX          (2147483647)
+# endif
+
+/* Limits of `sig_atomic_t'.  */
+# define SIG_ATOMIC_MIN                (-2147483647-1)
+# define SIG_ATOMIC_MAX                (2147483647)
+
+/* Limit of `size_t' type.  */
+# if __WORDSIZE == 64
+#  define SIZE_MAX             (18446744073709551615UL)
+# else
+#  ifdef __WORDSIZE32_SIZE_ULONG
+#   define SIZE_MAX            (4294967295UL)
+#  else
+#   define SIZE_MAX            (4294967295U)
+#  endif
+# endif
+
+/* Limits of `wchar_t'.  */
+# ifndef WCHAR_MIN
+/* These constants might also be defined in <wchar.h>.  */
+#  define WCHAR_MIN            __WCHAR_MIN
+#  define WCHAR_MAX            __WCHAR_MAX
+# endif
+
+/* Limits of `wint_t'.  */
+# define WINT_MIN              (0u)
+# define WINT_MAX              (4294967295u)
+
+/* Signed.  */
+# define INT8_C(c)     c
+# define INT16_C(c)    c
+# define INT32_C(c)    c
+# if __WORDSIZE == 64
+#  define INT64_C(c)   c ## L
+# else
+#  define INT64_C(c)   c ## LL
+# endif
+
+/* Unsigned.  */
+# define UINT8_C(c)    c
+# define UINT16_C(c)   c
+# define UINT32_C(c)   c ## U
+# if __WORDSIZE == 64
+#  define UINT64_C(c)  c ## UL
+# else
+#  define UINT64_C(c)  c ## ULL
+# endif
+
+/* Maximal type.  */
+# if __WORDSIZE == 64
+#  define INTMAX_C(c)  c ## L
+#  define UINTMAX_C(c) c ## UL
+# else
+#  define INTMAX_C(c)  c ## LL
+#  define UINTMAX_C(c) c ## ULL
+# endif
+
+#endif /* stdint.h */
diff --git a/lib/libdss-include/stdio.h b/lib/libdss-include/stdio.h
new file mode 100644 (file)
index 0000000..d8d7fa0
--- /dev/null
@@ -0,0 +1,946 @@
+/* Define ISO C stdio on top of C++ iostreams.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.19 Input/output     <stdio.h>
+ */
+
+#ifndef _STDIO_H
+
+#if !defined __need_FILE && !defined __need___FILE
+# define _STDIO_H      1
+# include <features.h>
+
+__BEGIN_DECLS
+
+# define __need_size_t
+# define __need_NULL
+# include <stddef.h>
+
+# include <bits/types.h>
+# define __need_FILE
+# define __need___FILE
+#endif /* Don't need FILE.  */
+
+
+#if !defined __FILE_defined && defined __need_FILE
+
+/* Define outside of namespace so the C++ is happy.  */
+struct _IO_FILE;
+
+__BEGIN_NAMESPACE_STD
+/* The opaque type of streams.  This is the definition used elsewhere.  */
+typedef struct _IO_FILE FILE;
+__END_NAMESPACE_STD
+#if defined __USE_LARGEFILE64 || defined __USE_POSIX \
+    || defined __USE_ISOC99 || defined __USE_XOPEN \
+    || defined __USE_POSIX2
+__USING_NAMESPACE_STD(FILE)
+#endif
+
+# define __FILE_defined        1
+#endif /* FILE not defined.  */
+#undef __need_FILE
+
+
+#if !defined ____FILE_defined && defined __need___FILE
+
+/* The opaque type of streams.  This is the definition used elsewhere.  */
+typedef struct _IO_FILE __FILE;
+
+# define ____FILE_defined      1
+#endif /* __FILE not defined.  */
+#undef __need___FILE
+
+
+#ifdef _STDIO_H
+#define _STDIO_USES_IOSTREAM
+
+#include <libio.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifdef __GNUC__
+#  ifndef _VA_LIST_DEFINED
+typedef _G_va_list va_list;
+#   define _VA_LIST_DEFINED
+#  endif
+# else
+#  include <stdarg.h>
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+# ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+# endif
+
+# ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+# endif
+#endif
+
+/* The type of the second argument to `fgetpos' and `fsetpos'.  */
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+typedef _G_fpos_t fpos_t;
+#else
+typedef _G_fpos64_t fpos_t;
+#endif
+__END_NAMESPACE_STD
+#ifdef __USE_LARGEFILE64
+typedef _G_fpos64_t fpos64_t;
+#endif
+
+/* The possibilities for the third argument to `setvbuf'.  */
+#define _IOFBF 0               /* Fully buffered.  */
+#define _IOLBF 1               /* Line buffered.  */
+#define _IONBF 2               /* No buffering.  */
+
+
+/* Default buffer size.  */
+#ifndef BUFSIZ
+# define BUFSIZ _IO_BUFSIZ
+#endif
+
+
+/* End of file character.
+   Some things throughout the library rely on this being -1.  */
+#ifndef EOF
+# define EOF (-1)
+#endif
+
+
+/* The possibilities for the third argument to `fseek'.
+   These values should not be changed.  */
+#define SEEK_SET       0       /* Seek from beginning of file.  */
+#define SEEK_CUR       1       /* Seek from current position.  */
+#define SEEK_END       2       /* Seek from end of file.  */
+#ifdef __USE_GNU
+# define SEEK_DATA     3       /* Seek to next data.  */
+# define SEEK_HOLE     4       /* Seek to next hole.  */
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Default path prefix for `tempnam' and `tmpnam'.  */
+# define P_tmpdir      "/tmp"
+#endif
+
+
+/* Get the values:
+   L_tmpnam    How long an array of chars must be to be passed to `tmpnam'.
+   TMP_MAX     The minimum number of unique filenames generated by tmpnam
+               (and tempnam when it uses tmpnam's name space),
+               or tempnam (the two are separate).
+   L_ctermid   How long an array to pass to `ctermid'.
+   L_cuserid   How long an array to pass to `cuserid'.
+   FOPEN_MAX   Minimum number of files that can be open at once.
+   FILENAME_MAX        Maximum length of a filename.  */
+#include <bits/stdio_lim.h>
+
+
+/* Standard streams.  */
+extern struct _IO_FILE *stdin;         /* Standard input stream.  */
+extern struct _IO_FILE *stdout;                /* Standard output stream.  */
+extern struct _IO_FILE *stderr;                /* Standard error output stream.  */
+/* C89/C99 say they're macros.  Make them happy.  */
+#define stdin stdin
+#define stdout stdout
+#define stderr stderr
+
+__BEGIN_NAMESPACE_STD
+/* Remove file FILENAME.  */
+extern int remove (const char *__filename) __THROW;
+/* Rename file OLD to NEW.  */
+extern int rename (const char *__old, const char *__new) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ATFILE
+/* Rename file OLD relative to OLDFD to NEW relative to NEWFD.  */
+extern int renameat (int __oldfd, const char *__old, int __newfd,
+                    const char *__new) __THROW;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Create a temporary file and open it read/write.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+#ifndef __USE_FILE_OFFSET64
+extern FILE *tmpfile (void) __wur;
+#else
+# ifdef __REDIRECT
+extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur;
+# else
+#  define tmpfile tmpfile64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern FILE *tmpfile64 (void) __wur;
+#endif
+
+/* Generate a temporary filename.  */
+extern char *tmpnam (char *__s) __THROW __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* This is the reentrant variant of `tmpnam'.  The only difference is
+   that it does not allow S to be NULL.  */
+extern char *tmpnam_r (char *__s) __THROW __wur;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Generate a unique temporary filename using up to five characters of PFX
+   if it is not NULL.  The directory to put this file in is searched for
+   as follows: First the environment variable "TMPDIR" is checked.
+   If it contains the name of a writable directory, that directory is used.
+   If not and if DIR is not NULL, that value is checked.  If that fails,
+   P_tmpdir is tried and finally "/tmp".  The storage for the filename
+   is allocated by `malloc'.  */
+extern char *tempnam (const char *__dir, const char *__pfx)
+     __THROW __attribute_malloc__ __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Close STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fclose (FILE *__stream);
+/* Flush STREAM, or all streams if STREAM is NULL.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fflush (FILE *__stream);
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not required.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fflush_unlocked (FILE *__stream);
+#endif
+
+#ifdef __USE_GNU
+/* Close all streams.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fcloseall (void);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+/* Open a file and create a new stream for it.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *fopen (const char *__restrict __filename,
+                   const char *__restrict __modes) __wur;
+/* Open a file, replacing an existing stream with it.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *freopen (const char *__restrict __filename,
+                     const char *__restrict __modes,
+                     FILE *__restrict __stream) __wur;
+#else
+# ifdef __REDIRECT
+extern FILE *__REDIRECT (fopen, (const char *__restrict __filename,
+                                const char *__restrict __modes), fopen64)
+  __wur;
+extern FILE *__REDIRECT (freopen, (const char *__restrict __filename,
+                                  const char *__restrict __modes,
+                                  FILE *__restrict __stream), freopen64)
+  __wur;
+# else
+#  define fopen fopen64
+#  define freopen freopen64
+# endif
+#endif
+__END_NAMESPACE_STD
+#ifdef __USE_LARGEFILE64
+extern FILE *fopen64 (const char *__restrict __filename,
+                     const char *__restrict __modes) __wur;
+extern FILE *freopen64 (const char *__restrict __filename,
+                       const char *__restrict __modes,
+                       FILE *__restrict __stream) __wur;
+#endif
+
+#ifdef __USE_POSIX
+/* Create a new stream that refers to an existing system file descriptor.  */
+extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Create a new stream that refers to the given magic cookie,
+   and uses the given functions for input and output.  */
+extern FILE *fopencookie (void *__restrict __magic_cookie,
+                         const char *__restrict __modes,
+                         _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a new stream that refers to a memory buffer.  */
+extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+  __THROW __wur;
+
+/* Open a stream that writes into a malloc'd buffer that is expanded as
+   necessary.  *BUFLOC and *SIZELOC are updated with the buffer's location
+   and the number of characters written on fflush or fclose.  */
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* If BUF is NULL, make STREAM unbuffered.
+   Else make it use buffer BUF, of size BUFSIZ.  */
+extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
+/* Make STREAM use buffering mode MODE.
+   If BUF is not NULL, use N bytes of it for buffering;
+   else allocate an internal buffer N bytes long.  */
+extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+                   int __modes, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* If BUF is NULL, make STREAM unbuffered.
+   Else make it use SIZE bytes of BUF for buffering.  */
+extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+                      size_t __size) __THROW;
+
+/* Make STREAM line-buffered.  */
+extern void setlinebuf (FILE *__stream) __THROW;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Write formatted output to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fprintf (FILE *__restrict __stream,
+                   const char *__restrict __format, ...);
+/* Write formatted output to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int printf (const char *__restrict __format, ...);
+/* Write formatted output to S.  */
+extern int sprintf (char *__restrict __s,
+                   const char *__restrict __format, ...) __THROWNL;
+
+/* Write formatted output to S from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+                    _G_va_list __arg);
+/* Write formatted output to stdout from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vprintf (const char *__restrict __format, _G_va_list __arg);
+/* Write formatted output to S from argument list ARG.  */
+extern int vsprintf (char *__restrict __s, const char *__restrict __format,
+                    _G_va_list __arg) __THROWNL;
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_C99
+/* Maximum chars of output to write in MAXLEN.  */
+extern int snprintf (char *__restrict __s, size_t __maxlen,
+                    const char *__restrict __format, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+                     const char *__restrict __format, _G_va_list __arg)
+     __THROWNL __attribute__ ((__format__ (__printf__, 3, 0)));
+__END_NAMESPACE_C99
+#endif
+
+#ifdef __USE_GNU
+/* Write formatted output to a string dynamically allocated with `malloc'.
+   Store the address of the string in *PTR.  */
+extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
+                     _G_va_list __arg)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
+extern int __asprintf (char **__restrict __ptr,
+                      const char *__restrict __fmt, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+extern int asprintf (char **__restrict __ptr,
+                    const char *__restrict __fmt, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Write formatted output to a file descriptor.  */
+extern int vdprintf (int __fd, const char *__restrict __fmt,
+                    _G_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Read formatted input from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fscanf (FILE *__restrict __stream,
+                  const char *__restrict __format, ...) __wur;
+/* Read formatted input from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int scanf (const char *__restrict __format, ...) __wur;
+/* Read formatted input from S.  */
+extern int sscanf (const char *__restrict __s,
+                  const char *__restrict __format, ...) __THROW;
+
+#if defined __USE_ISOC99 && !defined __USE_GNU \
+    && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+    && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+# ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
+                               const char *__restrict __format, ...),
+                      __isoc99_fscanf) __wur;
+extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
+                      __isoc99_scanf) __wur;
+extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
+                                   const char *__restrict __format, ...),
+                          __isoc99_sscanf);
+# else
+extern int __isoc99_fscanf (FILE *__restrict __stream,
+                           const char *__restrict __format, ...) __wur;
+extern int __isoc99_scanf (const char *__restrict __format, ...) __wur;
+extern int __isoc99_sscanf (const char *__restrict __s,
+                           const char *__restrict __format, ...) __THROW;
+#  define fscanf __isoc99_fscanf
+#  define scanf __isoc99_scanf
+#  define sscanf __isoc99_sscanf
+# endif
+#endif
+
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Read formatted input from S into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+                   _G_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+
+/* Read formatted input from stdin into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vscanf (const char *__restrict __format, _G_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+
+/* Read formatted input from S into argument list ARG.  */
+extern int vsscanf (const char *__restrict __s,
+                   const char *__restrict __format, _G_va_list __arg)
+     __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
+
+# if !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (vfscanf,
+                      (FILE *__restrict __s,
+                       const char *__restrict __format, _G_va_list __arg),
+                      __isoc99_vfscanf)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
+extern int __REDIRECT (vscanf, (const char *__restrict __format,
+                               _G_va_list __arg), __isoc99_vscanf)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
+extern int __REDIRECT_NTH (vsscanf,
+                          (const char *__restrict __s,
+                           const char *__restrict __format,
+                           _G_va_list __arg), __isoc99_vsscanf)
+     __attribute__ ((__format__ (__scanf__, 2, 0)));
+#  else
+extern int __isoc99_vfscanf (FILE *__restrict __s,
+                            const char *__restrict __format,
+                            _G_va_list __arg) __wur;
+extern int __isoc99_vscanf (const char *__restrict __format,
+                           _G_va_list __arg) __wur;
+extern int __isoc99_vsscanf (const char *__restrict __s,
+                            const char *__restrict __format,
+                            _G_va_list __arg) __THROW;
+#   define vfscanf __isoc99_vfscanf
+#   define vscanf __isoc99_vscanf
+#   define vsscanf __isoc99_vsscanf
+#  endif
+# endif
+
+__END_NAMESPACE_C99
+#endif /* Use ISO C9x.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Read a character from STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int fgetc (FILE *__stream);
+extern int getc (FILE *__stream);
+
+/* Read a character from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getchar (void);
+__END_NAMESPACE_STD
+
+/* The C standard explicitly says this is a macro, so we always do the
+   optimization for it.  */
+#define getc(_fp) _IO_getc (_fp)
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int getc_unlocked (FILE *__stream);
+extern int getchar_unlocked (void);
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fgetc_unlocked (FILE *__stream);
+#endif /* Use MISC.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Write a character to STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.
+
+   These functions is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputc (int __c, FILE *__stream);
+extern int putc (int __c, FILE *__stream);
+
+/* Write a character to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int putchar (int __c);
+__END_NAMESPACE_STD
+
+/* The C standard explicitly says this can be a macro,
+   so we always do the optimization for it.  */
+#define putc(_ch, _fp) _IO_putc (_ch, _fp)
+
+#ifdef __USE_MISC
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputc_unlocked (int __c, FILE *__stream);
+#endif /* Use MISC.  */
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern int putc_unlocked (int __c, FILE *__stream);
+extern int putchar_unlocked (int __c);
+#endif /* Use POSIX.  */
+
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Get a word (int) from STREAM.  */
+extern int getw (FILE *__stream);
+
+/* Write a word (int) to STREAM.  */
+extern int putw (int __w, FILE *__stream);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Get a newline-terminated string of finite length from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+     __wur;
+
+#if !defined __USE_ISOC11 \
+    || (defined __cplusplus && __cplusplus <= 201103L)
+/* Get a newline-terminated string from stdin, removing the newline.
+   DO NOT USE THIS FUNCTION!!  There is no limit on how much it will read.
+
+   The function has been officially removed in ISO C11.  This opportunity
+   is used to also remove it from the GNU feature list.  It is now only
+   available when explicitly using an old ISO C, Unix, or POSIX standard.
+   GCC defines _GNU_SOURCE when building C++ code and the function is still
+   in C++11, so it is also available for C++.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *gets (char *__s) __wur __attribute_deprecated__;
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function does the same as `fgets' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern char *fgets_unlocked (char *__restrict __s, int __n,
+                            FILE *__restrict __stream) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN2K8
+/* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
+   (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
+   NULL), pointing to *N characters of space.  It is realloc'd as
+   necessary.  Returns the number of characters read (not including the
+   null terminator), or -1 on error or EOF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
+                              size_t *__restrict __n, int __delimiter,
+                              FILE *__restrict __stream) __wur;
+extern _IO_ssize_t getdelim (char **__restrict __lineptr,
+                            size_t *__restrict __n, int __delimiter,
+                            FILE *__restrict __stream) __wur;
+
+/* Like `getdelim', but reads up to a newline.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern _IO_ssize_t getline (char **__restrict __lineptr,
+                           size_t *__restrict __n,
+                           FILE *__restrict __stream) __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Write a string to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+
+/* Write a string, followed by a newline, to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int puts (const char *__s);
+
+
+/* Push a character back onto the input buffer of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int ungetc (int __c, FILE *__stream);
+
+
+/* Read chunks of generic data from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern size_t fread (void *__restrict __ptr, size_t __size,
+                    size_t __n, FILE *__restrict __stream) __wur;
+/* Write chunks of generic data to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+                     size_t __n, FILE *__restrict __s);
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function does the same as `fputs' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputs_unlocked (const char *__restrict __s,
+                          FILE *__restrict __stream);
+#endif
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not necessary.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+                             size_t __n, FILE *__restrict __stream) __wur;
+extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+                              size_t __n, FILE *__restrict __stream);
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Seek to a certain position on STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fseek (FILE *__stream, long int __off, int __whence);
+/* Return the current position of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern long int ftell (FILE *__stream) __wur;
+/* Rewind to the beginning of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void rewind (FILE *__stream);
+__END_NAMESPACE_STD
+
+/* The Single Unix Specification, Version 2, specifies an alternative,
+   more adequate interface for the two functions above which deal with
+   file offset.  `long int' is not the right type.  These definitions
+   are originally defined in the Large File Support API.  */
+
+#if defined __USE_LARGEFILE || defined __USE_XOPEN2K
+# ifndef __USE_FILE_OFFSET64
+/* Seek to a certain position on STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+/* Return the current position of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern __off_t ftello (FILE *__stream) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (fseeko,
+                      (FILE *__stream, __off64_t __off, int __whence),
+                      fseeko64);
+extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64);
+#  else
+#   define fseeko fseeko64
+#   define ftello ftello64
+#  endif
+# endif
+#endif
+
+__BEGIN_NAMESPACE_STD
+#ifndef __USE_FILE_OFFSET64
+/* Get STREAM's position.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+/* Set STREAM's position.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
+                                fpos_t *__restrict __pos), fgetpos64);
+extern int __REDIRECT (fsetpos,
+                      (FILE *__stream, const fpos_t *__pos), fsetpos64);
+# else
+#  define fgetpos fgetpos64
+#  define fsetpos fsetpos64
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_LARGEFILE64
+extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+extern __off64_t ftello64 (FILE *__stream) __wur;
+extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Clear the error and EOF indicators for STREAM.  */
+extern void clearerr (FILE *__stream) __THROW;
+/* Return the EOF indicator for STREAM.  */
+extern int feof (FILE *__stream) __THROW __wur;
+/* Return the error indicator for STREAM.  */
+extern int ferror (FILE *__stream) __THROW __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Faster versions when locking is not required.  */
+extern void clearerr_unlocked (FILE *__stream) __THROW;
+extern int feof_unlocked (FILE *__stream) __THROW __wur;
+extern int ferror_unlocked (FILE *__stream) __THROW __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Print a message describing the meaning of the value of errno.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void perror (const char *__s);
+__END_NAMESPACE_STD
+
+/* Provide the declarations for `sys_errlist' and `sys_nerr' if they
+   are available on this system.  Even if available, these variables
+   should not be used directly.  The `strerror' function provides
+   all the necessary functionality.  */
+#include <bits/sys_errlist.h>
+
+
+#ifdef __USE_POSIX
+/* Return the system file descriptor for STREAM.  */
+extern int fileno (FILE *__stream) __THROW __wur;
+#endif /* Use POSIX.  */
+
+#ifdef __USE_MISC
+/* Faster version when locking is not required.  */
+extern int fileno_unlocked (FILE *__stream) __THROW __wur;
+#endif
+
+
+#ifdef __USE_POSIX2
+/* Create a new stream connected to a pipe running the given command.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern FILE *popen (const char *__command, const char *__modes) __wur;
+
+/* Close a stream opened by popen and return the status of its child.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int pclose (FILE *__stream);
+#endif
+
+
+#ifdef __USE_POSIX
+/* Return the name of the controlling terminal.  */
+extern char *ctermid (char *__s) __THROW;
+#endif /* Use POSIX.  */
+
+
+#ifdef __USE_XOPEN
+/* Return the name of the current user.  */
+extern char *cuserid (char *__s);
+#endif /* Use X/Open, but not issue 6.  */
+
+
+#ifdef __USE_GNU
+struct obstack;                        /* See <obstack.h>.  */
+
+/* Write formatted output to an obstack.  */
+extern int obstack_printf (struct obstack *__restrict __obstack,
+                          const char *__restrict __format, ...)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int obstack_vprintf (struct obstack *__restrict __obstack,
+                           const char *__restrict __format,
+                           _G_va_list __args)
+     __THROWNL __attribute__ ((__format__ (__printf__, 2, 0)));
+#endif /* Use GNU.  */
+
+
+#ifdef __USE_POSIX
+/* These are defined in POSIX.1:1996.  */
+
+/* Acquire ownership of STREAM.  */
+extern void flockfile (FILE *__stream) __THROW;
+
+/* Try to acquire ownership of STREAM but do not block if it is not
+   possible.  */
+extern int ftrylockfile (FILE *__stream) __THROW __wur;
+
+/* Relinquish the ownership granted for STREAM.  */
+extern void funlockfile (FILE *__stream) __THROW;
+#endif /* POSIX */
+
+#if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU
+/* The X/Open standard requires some functions and variables to be
+   declared here which do not belong into this header.  But we have to
+   follow.  In GNU mode we don't do this nonsense.  */
+# define __need_getopt
+# include <getopt.h>
+#endif /* X/Open, but not issue 6 and not for GNU.  */
+
+/* If we are compiling with optimizing read this file.  It contains
+   several optimizing inline functions and macros.  */
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdio.h>
+#endif
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdio2.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdio-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* <stdio.h> included.  */
+
+#endif /* !_STDIO_H */
diff --git a/lib/libdss-include/stdio_ext.h b/lib/libdss-include/stdio_ext.h
new file mode 100644 (file)
index 0000000..eca2b19
--- /dev/null
@@ -0,0 +1,86 @@
+/* Functions to access FILE structure internals.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This header contains the same definitions as the header of the same name
+   on Sun's Solaris OS.  */
+
+#ifndef _STDIO_EXT_H
+#define _STDIO_EXT_H   1
+
+#include <stdio.h>
+
+enum
+{
+  /* Query current state of the locking status.  */
+  FSETLOCKING_QUERY = 0,
+#define FSETLOCKING_QUERY      FSETLOCKING_QUERY
+  /* The library protects all uses of the stream functions, except for
+     uses of the *_unlocked functions, by calls equivalent to flockfile().  */
+  FSETLOCKING_INTERNAL,
+#define FSETLOCKING_INTERNAL   FSETLOCKING_INTERNAL
+  /* The user will take care of locking.  */
+  FSETLOCKING_BYCALLER
+#define FSETLOCKING_BYCALLER   FSETLOCKING_BYCALLER
+};
+
+
+__BEGIN_DECLS
+
+/* Return the size of the buffer of FP in bytes currently in use by
+   the given stream.  */
+extern size_t __fbufsize (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff the stream FP is opened readonly, or if the
+   last operation on the stream was a read operation.  */
+extern int __freading (FILE *__fp) __THROW;
+
+/* Return non-zero value iff the stream FP is opened write-only or
+   append-only, or if the last operation on the stream was a write
+   operation.  */
+extern int __fwriting (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff stream FP is not opened write-only or
+   append-only.  */
+extern int __freadable (FILE *__fp) __THROW;
+
+/* Return non-zero value iff stream FP is not opened read-only.  */
+extern int __fwritable (FILE *__fp) __THROW;
+
+
+/* Return non-zero value iff the stream FP is line-buffered.  */
+extern int __flbf (FILE *__fp) __THROW;
+
+
+/* Discard all pending buffered I/O on the stream FP.  */
+extern void __fpurge (FILE *__fp) __THROW;
+
+/* Return amount of output in bytes pending on a stream FP.  */
+extern size_t __fpending (FILE *__fp) __THROW;
+
+/* Flush all line-buffered files.  */
+extern void _flushlbf (void);
+
+
+/* Set locking status of stream FP to TYPE.  */
+extern int __fsetlocking (FILE *__fp, int __type) __THROW;
+
+__END_DECLS
+
+#endif /* stdio_ext.h */
diff --git a/lib/libdss-include/stdlib.h b/lib/libdss-include/stdlib.h
new file mode 100644 (file)
index 0000000..cc77708
--- /dev/null
@@ -0,0 +1,969 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.20 General utilities        <stdlib.h>
+ */
+
+#ifndef        _STDLIB_H
+
+#include <features.h>
+
+/* Get size_t, wchar_t and NULL from <stddef.h>.  */
+#define                __need_size_t
+#ifndef __need_malloc_and_calloc
+# define       __need_wchar_t
+# define       __need_NULL
+#endif
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#ifndef __need_malloc_and_calloc
+#define        _STDLIB_H       1
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
+/* XPG requires a few symbols from <sys/wait.h> being defined.  */
+# include <bits/waitflags.h>
+# include <bits/waitstatus.h>
+
+# ifdef __USE_MISC
+
+/* Lots of hair to allow traditional BSD use of `union wait'
+   as well as POSIX.1 use of `int' for the status word.  */
+
+#  if defined __GNUC__ && !defined __cplusplus
+#   define __WAIT_INT(status) \
+  (__extension__ (((union { __typeof(status) __in; int __i; }) \
+                  { .__in = (status) }).__i))
+#  else
+#   define __WAIT_INT(status)  (*(int *) &(status))
+#  endif
+
+/* This is the type of the argument to `wait'.  The funky union
+   causes redeclarations with either `int *' or `union wait *' to be
+   allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
+   the actual function definitions.  */
+
+#  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
+#   define __WAIT_STATUS       void *
+#   define __WAIT_STATUS_DEFN  void *
+#  else
+/* This works in GCC 2.6.1 and later.  */
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((__transparent_union__));
+#   define __WAIT_STATUS_DEFN  int *
+#  endif
+
+# else /* Don't use misc.  */
+
+#  define __WAIT_INT(status)   (status)
+#  define __WAIT_STATUS                int *
+#  define __WAIT_STATUS_DEFN   int *
+
+# endif /* Use misc.  */
+
+/* Define the macros <sys/wait.h> also would define this way.  */
+# define WEXITSTATUS(status)   __WEXITSTATUS (__WAIT_INT (status))
+# define WTERMSIG(status)      __WTERMSIG (__WAIT_INT (status))
+# define WSTOPSIG(status)      __WSTOPSIG (__WAIT_INT (status))
+# define WIFEXITED(status)     __WIFEXITED (__WAIT_INT (status))
+# define WIFSIGNALED(status)   __WIFSIGNALED (__WAIT_INT (status))
+# define WIFSTOPPED(status)    __WIFSTOPPED (__WAIT_INT (status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status) __WIFCONTINUED (__WAIT_INT (status))
+# endif
+#endif /* X/Open or XPG7 and <sys/wait.h> not included.  */
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `div'.  */
+typedef struct
+  {
+    int quot;                  /* Quotient.  */
+    int rem;                   /* Remainder.  */
+  } div_t;
+
+/* Returned by `ldiv'.  */
+#ifndef __ldiv_t_defined
+typedef struct
+  {
+    long int quot;             /* Quotient.  */
+    long int rem;              /* Remainder.  */
+  } ldiv_t;
+# define __ldiv_t_defined      1
+#endif
+__END_NAMESPACE_STD
+
+#if defined __USE_ISOC99 && !defined __lldiv_t_defined
+__BEGIN_NAMESPACE_C99
+/* Returned by `lldiv'.  */
+__extension__ typedef struct
+  {
+    long long int quot;                /* Quotient.  */
+    long long int rem;         /* Remainder.  */
+  } lldiv_t;
+# define __lldiv_t_defined     1
+__END_NAMESPACE_C99
+#endif
+
+
+/* The largest number rand will return (same as INT_MAX).  */
+#define        RAND_MAX        2147483647
+
+
+/* We define these the same for all machines.
+   Changes from this to the outside world should be done in `_exit'.  */
+#define        EXIT_FAILURE    1       /* Failing exit status.  */
+#define        EXIT_SUCCESS    0       /* Successful exit status.  */
+
+
+/* Maximum length of a multibyte character in the current locale.  */
+#define        MB_CUR_MAX      (__ctype_get_mb_cur_max ())
+extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a floating-point number.  */
+extern double atof (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to an integer.  */
+extern int atoi (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to a long integer.  */
+extern long int atol (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert a string to a long long integer.  */
+__extension__ extern long long int atoll (const char *__nptr)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+__END_NAMESPACE_C99
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a floating-point number.  */
+extern double strtod (const char *__restrict __nptr,
+                     char **__restrict __endptr)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Likewise for `float' and `long double' sizes of floating-point numbers.  */
+extern float strtof (const char *__restrict __nptr,
+                    char **__restrict __endptr) __THROW __nonnull ((1));
+
+extern long double strtold (const char *__restrict __nptr,
+                           char **__restrict __endptr)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_C99
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Convert a string to a long integer.  */
+extern long int strtol (const char *__restrict __nptr,
+                       char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned long integer.  */
+extern unsigned long int strtoul (const char *__restrict __nptr,
+                                 char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+                            char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+                                      char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+#endif /* Use misc.  */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert a string to a quadword integer.  */
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+                             char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer.  */
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+                                       char **__restrict __endptr, int __base)
+     __THROW __nonnull ((1));
+__END_NAMESPACE_C99
+#endif /* ISO C99 or use MISC.  */
+
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another problem is
+   the implementation of the internationalization handling in the
+   ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which take an additional
+   argument.
+
+   Attention: even though several *_l interfaces are part of POSIX:2008,
+   these are not.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+   use as an additional parameter.  */
+extern long int strtol_l (const char *__restrict __nptr,
+                         char **__restrict __endptr, int __base,
+                         __locale_t __loc) __THROW __nonnull ((1, 4));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+                                   char **__restrict __endptr,
+                                   int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+                               char **__restrict __endptr, int __base,
+                               __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+                                         char **__restrict __endptr,
+                                         int __base, __locale_t __loc)
+     __THROW __nonnull ((1, 4));
+
+extern double strtod_l (const char *__restrict __nptr,
+                       char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern float strtof_l (const char *__restrict __nptr,
+                      char **__restrict __endptr, __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+
+extern long double strtold_l (const char *__restrict __nptr,
+                             char **__restrict __endptr,
+                             __locale_t __loc)
+     __THROW __nonnull ((1, 3));
+#endif /* GNU */
+
+
+#ifdef __USE_EXTERN_INLINES
+__BEGIN_NAMESPACE_STD
+__extern_inline int
+__NTH (atoi (const char *__nptr))
+{
+  return (int) strtol (__nptr, (char **) NULL, 10);
+}
+__extern_inline long int
+__NTH (atol (const char *__nptr))
+{
+  return strtol (__nptr, (char **) NULL, 10);
+}
+__END_NAMESPACE_STD
+
+# ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__extension__ __extern_inline long long int
+__NTH (atoll (const char *__nptr))
+{
+  return strtoll (__nptr, (char **) NULL, 10);
+}
+__END_NAMESPACE_C99
+# endif
+#endif /* Optimizing and Inlining.  */
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
+   digit first.  Returns a pointer to static storage overwritten by the
+   next call.  */
+extern char *l64a (long int __n) __THROW __wur;
+
+/* Read a number from a string S in base 64 as above.  */
+extern long int a64l (const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#endif /* Use misc || extended X/Open.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+# include <sys/types.h>        /* we need int32_t... */
+
+/* These are the functions that actually do things.  The `random', `srandom',
+   `initstate' and `setstate' functions are those from BSD Unices.
+   The `rand' and `srand' functions are required by the ANSI standard.
+   We provide both interfaces to the same random number generator.  */
+/* Return a random long integer between 0 and RAND_MAX inclusive.  */
+extern long int random (void) __THROW;
+
+/* Seed the random number generator with the given number.  */
+extern void srandom (unsigned int __seed) __THROW;
+
+/* Initialize the random number generator to use state buffer STATEBUF,
+   of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
+   32, 64, 128 and 256, the bigger the better; values less than 8 will
+   cause an error and values greater than 256 will be rounded down.  */
+extern char *initstate (unsigned int __seed, char *__statebuf,
+                       size_t __statelen) __THROW __nonnull ((2));
+
+/* Switch the random number generator to state buffer STATEBUF,
+   which should have been previously initialized by `initstate'.  */
+extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
+
+
+# ifdef __USE_MISC
+/* Reentrant versions of the `random' family of functions.
+   These functions all use the following data structure to contain
+   state, rather than global state variables.  */
+
+struct random_data
+  {
+    int32_t *fptr;             /* Front pointer.  */
+    int32_t *rptr;             /* Rear pointer.  */
+    int32_t *state;            /* Array of state values.  */
+    int rand_type;             /* Type of random number generator.  */
+    int rand_deg;              /* Degree of random number generator.  */
+    int rand_sep;              /* Distance between front and rear.  */
+    int32_t *end_ptr;          /* Pointer behind state table.  */
+  };
+
+extern int random_r (struct random_data *__restrict __buf,
+                    int32_t *__restrict __result) __THROW __nonnull ((1, 2));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     __THROW __nonnull ((2));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+                       size_t __statelen,
+                       struct random_data *__restrict __buf)
+     __THROW __nonnull ((2, 4));
+
+extern int setstate_r (char *__restrict __statebuf,
+                      struct random_data *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+# endif        /* Use misc.  */
+#endif /* Use extended X/Open || misc. */
+
+
+__BEGIN_NAMESPACE_STD
+/* Return a random integer between 0 and RAND_MAX inclusive.  */
+extern int rand (void) __THROW;
+/* Seed the random number generator with the given number.  */
+extern void srand (unsigned int __seed) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_POSIX
+/* Reentrant interface according to POSIX.1.  */
+extern int rand_r (unsigned int *__seed) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* System V style 48-bit random number generator functions.  */
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern double drand48 (void) __THROW;
+extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern long int lrand48 (void) __THROW;
+extern long int nrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern long int mrand48 (void) __THROW;
+extern long int jrand48 (unsigned short int __xsubi[3])
+     __THROW __nonnull ((1));
+
+/* Seed random number generator.  */
+extern void srand48 (long int __seedval) __THROW;
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     __THROW __nonnull ((1));
+extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
+
+# ifdef __USE_MISC
+/* Data structure for communication with thread safe versions.  This
+   type is to be regarded as opaque.  It's only exported because users
+   have to allocate objects of this type.  */
+struct drand48_data
+  {
+    unsigned short int __x[3]; /* Current state.  */
+    unsigned short int __old_x[3]; /* Old state.  */
+    unsigned short int __c;    /* Additive const. in congruential formula.  */
+    unsigned short int __init; /* Flag for initializing.  */
+    __extension__ unsigned long long int __a;  /* Factor in congruential
+                                                  formula.  */
+  };
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+                     double *__restrict __result) __THROW __nonnull ((1, 2));
+extern int erand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     double *__restrict __result) __THROW __nonnull ((1, 2));
+
+/* Return non-negative, long integer in [0,2^31).  */
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int nrand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Return signed, long integers in [-2^31,2^31).  */
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+extern int jrand48_r (unsigned short int __xsubi[3],
+                     struct drand48_data *__restrict __buffer,
+                     long int *__restrict __result)
+     __THROW __nonnull ((1, 2));
+
+/* Seed random number generator.  */
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     __THROW __nonnull ((2));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+                    struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
+
+extern int lcong48_r (unsigned short int __param[7],
+                     struct drand48_data *__buffer)
+     __THROW __nonnull ((1, 2));
+# endif        /* Use misc.  */
+#endif /* Use misc or X/Open.  */
+
+#endif /* don't just need malloc and calloc */
+
+#ifndef __malloc_and_calloc_defined
+# define __malloc_and_calloc_defined
+__BEGIN_NAMESPACE_STD
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t __nmemb, size_t __size)
+     __THROW __attribute_malloc__ __wur;
+__END_NAMESPACE_STD
+#endif
+
+#ifndef __need_malloc_and_calloc
+__BEGIN_NAMESPACE_STD
+/* Re-allocate the previously allocated block
+   in PTR, making the new block SIZE bytes long.  */
+/* __attribute_malloc__ is not used, because if realloc returns
+   the same pointer that was passed to it, aliasing needs to be allowed
+   between objects pointed by the old and new pointers.  */
+extern void *realloc (void *__ptr, size_t __size)
+     __THROW __attribute_warn_unused_result__;
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *__ptr) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Free a block.  An alias for `free'. (Sun Unices).  */
+extern void cfree (void *__ptr) __THROW;
+#endif /* Use misc.  */
+
+#ifdef __USE_MISC
+# include <alloca.h>
+#endif /* Use misc.  */
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+    || defined __USE_MISC
+/* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_ISOC11
+/* ISO C variant of aligned allocation.  */
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+     __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Abort execution and generate a core-dump.  */
+extern void abort (void) __THROW __attribute__ ((__noreturn__));
+
+
+/* Register a function to be called when `exit' is called.  */
+extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Register a function to be called when `quick_exit' is called.  */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+     __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_MISC
+/* Register a function to be called with the status
+   given to `exit' and the given argument.  */
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     __THROW __nonnull ((1));
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered,
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Call all functions registered with `at_quick_exit' in the reverse
+   of the order in which they were registered and terminate program
+   execution with STATUS.  */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Terminate the program with STATUS without calling any of the
+   functions registered with `atexit' or `on_exit'.  */
+extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
+__END_NAMESPACE_C99
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the value of envariable NAME, or NULL if it doesn't exist.  */
+extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to the above but returns NULL if the
+   programs is running with SUID or SGID enabled.  */
+extern char *secure_getenv (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* The SVID says this is in <stdio.h>, but this seems a better place.  */
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.
+   If there is no `=', remove NAME from the environment.  */
+extern int putenv (char *__string) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+extern int setenv (const char *__name, const char *__value, int __replace)
+     __THROW __nonnull ((2));
+
+/* Remove the variable NAME from the environment.  */
+extern int unsetenv (const char *__name) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+extern int clearenv (void) __THROW;
+#endif
+
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   Always returns TEMPLATE, it's either a temporary file name or a null
+   string if it cannot get a unique file name.  */
+extern char *mktemp (char *__template) __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Generate a unique temporary file name from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the filename unique.
+   Returns a file descriptor open on the file for reading and writing,
+   or -1 if it cannot create a uniquely-named file.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemp (char *__template) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkstemp mkstemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Similar to mkstemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
+                      mkstemps64) __nonnull ((1)) __wur;
+#  else
+#   define mkstemps mkstemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemps64 (char *__template, int __suffixlen)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Generate a unique temporary file name from TEMPLATE similar to
+   mkstemp.  But allow the caller to pass additional flags which are
+   used in the open call to create the file..
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemp mkostemp64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
+# endif
+
+/* Similar to mkostemp, but the template can have a suffix after the
+   XXXXXX.  The length of the suffix is specified in the second
+   parameter.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
+                                  int __flags), mkostemps64)
+     __nonnull ((1)) __wur;
+#  else
+#   define mkostemps mkostemps64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+     __nonnull ((1)) __wur;
+# endif
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Execute the given line as a shell command.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int system (const char *__command) __wur;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the canonical absolute name of the
+   existing named file.  */
+extern char *canonicalize_file_name (const char *__name)
+     __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Return the canonical absolute name of file NAME.  If RESOLVED is
+   null, the result is malloc'd; otherwise, if the canonical name is
+   PATH_MAX chars or more, returns null with `errno' set to
+   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  */
+extern char *realpath (const char *__restrict __name,
+                      char *__restrict __resolved) __THROW __wur;
+#endif
+
+
+/* Shorthand for type of comparison functions.  */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef        __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+#ifdef __USE_GNU
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Do a binary search for KEY in BASE, which consists of NMEMB elements
+   of SIZE bytes each, using COMPAR to perform the comparisons.  */
+extern void *bsearch (const void *__key, const void *__base,
+                     size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __nonnull ((1, 2, 5)) __wur;
+
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
+/* Sort NMEMB elements of BASE, of SIZE bytes each,
+   using COMPAR to perform the comparisons.  */
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+                  __compar_fn_t __compar) __nonnull ((1, 4));
+#ifdef __USE_GNU
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+                    __compar_d_fn_t __compar, void *__arg)
+  __nonnull ((1, 4));
+#endif
+
+
+/* Return the absolute value of X.  */
+extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
+extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__extension__ extern long long int llabs (long long int __x)
+     __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
+   of the value of NUMER over DENOM. */
+/* GCC may have built-ins for these someday.  */
+extern div_t div (int __numer, int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+__extension__ extern lldiv_t lldiv (long long int __numer,
+                                   long long int __denom)
+     __THROW __attribute__ ((__const__)) __wur;
+__END_NAMESPACE_C99
+#endif
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Convert floating point numbers to strings.  The returned values are
+   valid only until another call to the same function.  */
+
+/* Convert VALUE to a string with NDIGIT digits and return a pointer to
+   this.  Set *DECPT with the position of the decimal character and *SIGN
+   with the sign of the number.  */
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
+   with the position of the decimal character and *SIGN with the sign of
+   the number.  */
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* If possible convert VALUE to a string with NDIGIT significant digits.
+   Otherwise use exponential representation.  The resulting string will
+   be written to BUF.  */
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+#endif
+
+#ifdef __USE_MISC
+/* Long double versions of above functions.  */
+extern char *qecvt (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qfcvt (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign)
+     __THROW __nonnull ((3, 4)) __wur;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     __THROW __nonnull ((3)) __wur;
+
+
+/* Reentrant version of the functions above which provide their own
+   buffers.  */
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign, char *__restrict __buf,
+                  size_t __len) __THROW __nonnull ((3, 4, 5));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+                  int *__restrict __sign, char *__restrict __buf,
+                  size_t __len) __THROW __nonnull ((3, 4, 5));
+
+extern int qecvt_r (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign,
+                   char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+extern int qfcvt_r (long double __value, int __ndigit,
+                   int *__restrict __decpt, int *__restrict __sign,
+                   char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((3, 4, 5));
+#endif /* misc */
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the multibyte character
+   in S, which is no longer than N.  */
+extern int mblen (const char *__s, size_t __n) __THROW;
+/* Return the length of the given multibyte character,
+   putting its `wchar_t' representation in *PWC.  */
+extern int mbtowc (wchar_t *__restrict __pwc,
+                  const char *__restrict __s, size_t __n) __THROW;
+/* Put the multibyte character represented
+   by WCHAR in S, returning its length.  */
+extern int wctomb (char *__s, wchar_t __wchar) __THROW;
+
+
+/* Convert a multibyte string to a wide char string.  */
+extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
+                       const char *__restrict __s, size_t __n) __THROW;
+/* Convert a wide char string to multibyte string.  */
+extern size_t wcstombs (char *__restrict __s,
+                       const wchar_t *__restrict __pwcs, size_t __n)
+     __THROW;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_MISC
+/* Determine whether the string value of RESPONSE matches the affirmation
+   or negative response expression as specified by the LC_MESSAGES category
+   in the program's current locale.  Returns 1 if affirmative, 0 if
+   negative, and -1 if not matching.  */
+extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Parse comma separated suboption from *OPTIONP and match against
+   strings in TOKENS.  If found return index and set *VALUEP to
+   optional value introduced by an equal sign.  If the suboption is
+   not part of TOKENS return in *VALUEP beginning of unknown
+   suboption.  On exit *OPTIONP is set to the beginning of the next
+   token or at the terminating NUL character.  */
+extern int getsubopt (char **__restrict __optionp,
+                     char *const *__restrict __tokens,
+                     char **__restrict __valuep)
+     __THROW __nonnull ((1, 2, 3)) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN
+/* Setup DES tables according KEY.  */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+#endif
+
+
+/* X/Open pseudo terminal handling.  */
+
+#ifdef __USE_XOPEN2KXSI
+/* Return a master pseudo-terminal handle.  */
+extern int posix_openpt (int __oflag) __wur;
+#endif
+
+#ifdef __USE_XOPEN
+/* The next four functions all take a master pseudo-tty fd and
+   perform an operation on the associated slave:  */
+
+/* Chown the slave to the calling user.  */
+extern int grantpt (int __fd) __THROW;
+
+/* Release an internal lock so the slave can be opened.
+   Call after grantpt().  */
+extern int unlockpt (int __fd) __THROW;
+
+/* Return the pathname of the pseudo terminal slave associated with
+   the master FD is open on, or NULL on errors.
+   The returned storage is good until the next call to this function.  */
+extern char *ptsname (int __fd) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Store at most BUFLEN characters of the pathname of the slave pseudo
+   terminal associated with the master FD is open on in BUF.
+   Return 0 on success, otherwise an error number.  */
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2));
+
+/* Open a master pseudo terminal and return its file descriptor.  */
+extern int getpt (void);
+#endif
+
+#ifdef __USE_MISC
+/* Put the 1 minute, 5 minute and 15 minute load averages into the first
+   NELEM elements of LOADAVG.  Return the number written (never more than
+   three, but may be less than NELEM), or -1 if an error occurred.  */
+extern int getloadavg (double __loadavg[], int __nelem)
+     __THROW __nonnull ((1));
+#endif
+
+#include <bits/stdlib-float.h>
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdlib.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdlib-ldbl.h>
+#endif
+
+#endif /* don't just need malloc and calloc */
+#undef __need_malloc_and_calloc
+
+__END_DECLS
+
+#endif /* stdlib.h  */
diff --git a/lib/libdss-include/string.h b/lib/libdss-include/string.h
new file mode 100644 (file)
index 0000000..1f3e348
--- /dev/null
@@ -0,0 +1,660 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.21 String handling  <string.h>
+ */
+
+#ifndef        _STRING_H
+#define        _STRING_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get size_t and NULL from <stddef.h>.  */
+#define        __need_size_t
+#define        __need_NULL
+#include <stddef.h>
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+#if defined __cplusplus && __GNUC_PREREQ (4, 4)
+# define __CORRECT_ISO_CPP_STRING_H_PROTO
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy N bytes of SRC to DEST.  */
+extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
+                    size_t __n) __THROW __nonnull ((1, 2));
+/* Copy N bytes of SRC to DEST, guaranteeing
+   correct behavior for overlapping strings.  */
+extern void *memmove (void *__dest, const void *__src, size_t __n)
+     __THROW __nonnull ((1, 2));
+__END_NAMESPACE_STD
+
+/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
+   Return the position in DEST one byte past where C was copied,
+   or NULL if C was not found in the first N bytes of SRC.  */
+#if defined __USE_MISC || defined __USE_XOPEN
+extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
+                     int __c, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif /* Misc || X/Open.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Set N bytes of S to C.  */
+extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
+
+/* Compare N bytes of S1 and S2.  */
+extern int memcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Search N bytes of S for C.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern void *memchr (void *__s, int __c, size_t __n)
+      __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
+extern const void *memchr (const void *__s, int __c, size_t __n)
+      __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline void *
+memchr (void *__s, int __c, size_t __n) __THROW
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+
+__extern_always_inline const void *
+memchr (const void *__s, int __c, size_t __n) __THROW
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+# endif
+}
+#else
+extern void *memchr (const void *__s, int __c, size_t __n)
+      __THROW __attribute_pure__ __nonnull ((1));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* Search in S for C.  This is similar to `memchr' but there is no
+   length limit.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" void *rawmemchr (void *__s, int __c)
+     __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
+extern "C++" const void *rawmemchr (const void *__s, int __c)
+     __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
+# else
+extern void *rawmemchr (const void *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Search N bytes of S for the final occurrence of C.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" void *memrchr (void *__s, int __c, size_t __n)
+      __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
+extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
+      __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
+# else
+extern void *memrchr (const void *__s, int __c, size_t __n)
+      __THROW __attribute_pure__ __nonnull ((1));
+# endif
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy SRC to DEST.  */
+extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Copy no more than N characters of SRC to DEST.  */
+extern char *strncpy (char *__restrict __dest,
+                     const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Append SRC onto DEST.  */
+extern char *strcat (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Append no more than N characters from SRC onto DEST.  */
+extern char *strncat (char *__restrict __dest, const char *__restrict __src,
+                     size_t __n) __THROW __nonnull ((1, 2));
+
+/* Compare S1 and S2.  */
+extern int strcmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Compare N characters of S1 and S2.  */
+extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Compare the collated forms of S1 and S2.  */
+extern int strcoll (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Put a transformation of SRC into no more than N bytes of DEST.  */
+extern size_t strxfrm (char *__restrict __dest,
+                      const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((2));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* The following functions are equivalent to the both above but they
+   take the locale they use for the collation as an extra argument.
+   This is not standardsized but something like will come.  */
+# include <xlocale.h>
+
+/* Compare the collated forms of S1 and S2 using rules from L.  */
+extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+/* Put a transformation of SRC into no more than N bytes of DEST.  */
+extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
+                        __locale_t __l) __THROW __nonnull ((2, 4));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Duplicate S, returning an identical malloc'd string.  */
+extern char *strdup (const char *__s)
+     __THROW __attribute_malloc__ __nonnull ((1));
+#endif
+
+/* Return a malloc'd copy of at most N bytes of STRING.  The
+   resultant string is terminated even if no null terminator
+   appears before STRING[N].  */
+#if defined __USE_XOPEN2K8
+extern char *strndup (const char *__string, size_t __n)
+     __THROW __attribute_malloc__ __nonnull ((1));
+#endif
+
+#if defined __USE_GNU && defined __GNUC__
+/* Duplicate S, returning an identical alloca'd string.  */
+# define strdupa(s)                                                          \
+  (__extension__                                                             \
+    ({                                                                       \
+      const char *__old = (s);                                               \
+      size_t __len = strlen (__old) + 1;                                     \
+      char *__new = (char *) __builtin_alloca (__len);                       \
+      (char *) memcpy (__new, __old, __len);                                 \
+    }))
+
+/* Return an alloca'd copy of at most N bytes of string.  */
+# define strndupa(s, n)                                                              \
+  (__extension__                                                             \
+    ({                                                                       \
+      const char *__old = (s);                                               \
+      size_t __len = strnlen (__old, (n));                                   \
+      char *__new = (char *) __builtin_alloca (__len + 1);                   \
+      __new[__len] = '\0';                                                   \
+      (char *) memcpy (__new, __old, __len);                                 \
+    }))
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Find the first occurrence of C in S.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strchr (char *__s, int __c)
+     __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
+extern const char *strchr (const char *__s, int __c)
+     __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strchr (char *__s, int __c) __THROW
+{
+  return __builtin_strchr (__s, __c);
+}
+
+__extern_always_inline const char *
+strchr (const char *__s, int __c) __THROW
+{
+  return __builtin_strchr (__s, __c);
+}
+# endif
+}
+#else
+extern char *strchr (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+/* Find the last occurrence of C in S.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strrchr (char *__s, int __c)
+     __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
+extern const char *strrchr (const char *__s, int __c)
+     __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strrchr (char *__s, int __c) __THROW
+{
+  return __builtin_strrchr (__s, __c);
+}
+
+__extern_always_inline const char *
+strrchr (const char *__s, int __c) __THROW
+{
+  return __builtin_strrchr (__s, __c);
+}
+# endif
+}
+#else
+extern char *strrchr (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to `strchr'.  But it returns a pointer to
+   the closing NUL byte in case C is not found in S.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *strchrnul (char *__s, int __c)
+     __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
+extern "C++" const char *strchrnul (const char *__s, int __c)
+     __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
+# else
+extern char *strchrnul (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the initial segment of S which
+   consists entirely of characters not in REJECT.  */
+extern size_t strcspn (const char *__s, const char *__reject)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Return the length of the initial segment of S which
+   consists entirely of characters in ACCEPT.  */
+extern size_t strspn (const char *__s, const char *__accept)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strpbrk (char *__s, const char *__accept)
+     __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
+extern const char *strpbrk (const char *__s, const char *__accept)
+     __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strpbrk (char *__s, const char *__accept) __THROW
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+
+__extern_always_inline const char *
+strpbrk (const char *__s, const char *__accept) __THROW
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+# endif
+}
+#else
+extern char *strpbrk (const char *__s, const char *__accept)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *strstr (char *__haystack, const char *__needle)
+     __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
+extern const char *strstr (const char *__haystack, const char *__needle)
+     __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
+
+# ifdef __OPTIMIZE__
+__extern_always_inline char *
+strstr (char *__haystack, const char *__needle) __THROW
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+
+__extern_always_inline const char *
+strstr (const char *__haystack, const char *__needle) __THROW
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+# endif
+}
+#else
+extern char *strstr (const char *__haystack, const char *__needle)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif
+
+
+/* Divide S into tokens separated by characters in DELIM.  */
+extern char *strtok (char *__restrict __s, const char *__restrict __delim)
+     __THROW __nonnull ((2));
+__END_NAMESPACE_STD
+
+/* Divide S into tokens separated by characters in DELIM.  Information
+   passed between calls are stored in SAVE_PTR.  */
+extern char *__strtok_r (char *__restrict __s,
+                        const char *__restrict __delim,
+                        char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
+#ifdef __USE_POSIX
+extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
+                      char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
+#endif
+
+#ifdef __USE_GNU
+/* Similar to `strstr' but this function ignores the case of both strings.  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *strcasestr (char *__haystack, const char *__needle)
+     __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
+extern "C++" const char *strcasestr (const char *__haystack,
+                                    const char *__needle)
+     __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
+# else
+extern char *strcasestr (const char *__haystack, const char *__needle)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+# endif
+#endif
+
+#ifdef __USE_GNU
+/* Find the first occurrence of NEEDLE in HAYSTACK.
+   NEEDLE is NEEDLELEN bytes long;
+   HAYSTACK is HAYSTACKLEN bytes long.  */
+extern void *memmem (const void *__haystack, size_t __haystacklen,
+                    const void *__needle, size_t __needlelen)
+     __THROW __attribute_pure__ __nonnull ((1, 3));
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+extern void *__mempcpy (void *__restrict __dest,
+                       const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+extern void *mempcpy (void *__restrict __dest,
+                     const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of S.  */
+extern size_t strlen (const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Find the length of STRING, but scan at most MAXLEN characters.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+extern size_t strnlen (const char *__string, size_t __maxlen)
+     __THROW __attribute_pure__ __nonnull ((1));
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return a string describing the meaning of the `errno' code in ERRNUM.  */
+extern char *strerror (int __errnum) __THROW;
+__END_NAMESPACE_STD
+#ifdef __USE_XOPEN2K
+/* Reentrant version of `strerror'.
+   There are 2 flavors of `strerror_r', GNU which returns the string
+   and may or may not use the supplied temporary buffer and POSIX one
+   which fills the string into the buffer.
+   To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L
+   without -D_GNU_SOURCE is needed, otherwise the GNU version is
+   preferred.  */
+# if defined __USE_XOPEN2K && !defined __USE_GNU
+/* Fill BUF with a string describing the meaning of the `errno' code in
+   ERRNUM.  */
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (strerror_r,
+                          (int __errnum, char *__buf, size_t __buflen),
+                          __xpg_strerror_r) __nonnull ((2));
+#  else
+extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2));
+#   define strerror_r __xpg_strerror_r
+#  endif
+# else
+/* If a temporary buffer is required, at most BUFLEN bytes of BUF will be
+   used.  */
+extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Translate error number to string according to the locale L.  */
+extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
+#endif
+
+
+/* We define this function always since `bzero' is sometimes needed when
+   the namespace rules does not allow this.  */
+extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
+extern void bcopy (const void *__src, void *__dest, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Set N bytes of S to 0.  */
+extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
+
+/* Compare N bytes of S1 and S2 (same as memcmp).  */
+extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Find the first occurrence of C in S (same as strchr).  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+extern const char *index (const char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+
+#  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
+__extern_always_inline char *
+index (char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+
+__extern_always_inline const char *
+index (const char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+#  endif
+}
+# else
+extern char *index (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Find the last occurrence of C in S (same as strrchr).  */
+# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+extern const char *rindex (const char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+
+#  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
+__extern_always_inline char *
+rindex (char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+
+__extern_always_inline const char *
+rindex (const char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+#endif
+}
+# else
+extern char *rindex (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+# endif
+
+/* Return the position of the first bit set in I, or 0 if none are set.
+   The least-significant bit is position 1, the most-significant 32.  */
+extern int ffs (int __i) __THROW __attribute__ ((__const__));
+
+/* The following two functions are non-standard but necessary for non-32 bit
+   platforms.  */
+# ifdef        __USE_GNU
+extern int ffsl (long int __l) __THROW __attribute__ ((__const__));
+__extension__ extern int ffsll (long long int __ll)
+     __THROW __attribute__ ((__const__));
+# endif
+
+/* Compare S1 and S2, ignoring case.  */
+extern int strcasecmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+#endif /* Use misc.  */
+
+#ifdef __USE_GNU
+/* Again versions of a few functions which use the given locale instead
+   of the global one.  */
+extern int strcasecmp_l (const char *__s1, const char *__s2,
+                        __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+
+extern int strncasecmp_l (const char *__s1, const char *__s2,
+                         size_t __n, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
+#endif
+
+#ifdef __USE_MISC
+/* Return the next DELIM-delimited token from *STRINGP,
+   terminating it with a '\0', and update *STRINGP to point past it.  */
+extern char *strsep (char **__restrict __stringp,
+                    const char *__restrict __delim)
+     __THROW __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Return a string describing the meaning of the signal number in SIG.  */
+extern char *strsignal (int __sig) __THROW;
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
+extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
+     __THROW __nonnull ((1, 2));
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+extern char *__stpncpy (char *__restrict __dest,
+                       const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+extern char *stpncpy (char *__restrict __dest,
+                     const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+#endif
+
+#ifdef __USE_GNU
+/* Compare S1 and S2 as strings holding name & indices/version numbers.  */
+extern int strverscmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
+/* Sautee STRING briskly.  */
+extern char *strfry (char *__string) __THROW __nonnull ((1));
+
+/* Frobnicate N bytes of S.  */
+extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1));
+
+# ifndef basename
+/* Return the file name within directory of FILENAME.  We don't
+   declare the function if the `basename' macro is available (defined
+   in <libgen.h>) which makes the XPG version of this function
+   available.  */
+#  ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
+extern "C++" char *basename (char *__filename)
+     __THROW __asm ("basename") __nonnull ((1));
+extern "C++" const char *basename (const char *__filename)
+     __THROW __asm ("basename") __nonnull ((1));
+#  else
+extern char *basename (const char *__filename) __THROW __nonnull ((1));
+#  endif
+# endif
+#endif
+
+
+#if defined __GNUC__ && __GNUC__ >= 2
+# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
+     && !defined __NO_INLINE__ && !defined __cplusplus
+/* When using GNU CC we provide some optimized versions of selected
+   functions from this header.  There are two kinds of optimizations:
+
+   - machine-dependent optimizations, most probably using inline
+     assembler code; these might be quite expensive since the code
+     size can increase significantly.
+     These optimizations are not used unless the symbol
+       __USE_STRING_INLINES
+     is defined before including this header.
+
+   - machine-independent optimizations which do not increase the
+     code size significantly and which optimize mainly situations
+     where one or more arguments are compile-time constants.
+     These optimizations are used always when the compiler is
+     taught to optimize.
+
+   One can inhibit all optimizations by defining __NO_STRING_INLINES.  */
+
+/* Get the machine-dependent optimizations (if any).  */
+#  include <bits/string.h>
+
+/* These are generic optimizations which do not add too much inline code.  */
+#  include <bits/string2.h>
+# endif
+
+# if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+/* Functions with security checks.  */
+#  include <bits/string3.h>
+# endif
+#endif
+
+#if defined __USE_GNU && defined __OPTIMIZE__ \
+    && defined __extern_always_inline && __GNUC_PREREQ (3,2)
+# if !defined _FORCE_INLINES && !defined _HAVE_STRING_ARCH_mempcpy
+
+#undef mempcpy
+#undef __mempcpy
+#define mempcpy(dest, src, n) __mempcpy_inline (dest, src, n)
+#define __mempcpy(dest, src, n) __mempcpy_inline (dest, src, n)
+
+__extern_always_inline void *
+__mempcpy_inline (void *__restrict __dest,
+                 const void *__restrict __src, size_t __n)
+{
+  return (char *) memcpy (__dest, __src, __n) + __n;
+}
+
+# endif
+#endif
+
+__END_DECLS
+
+#endif /* string.h  */
diff --git a/lib/libdss-include/strings.h b/lib/libdss-include/strings.h
new file mode 100644 (file)
index 0000000..e372a33
--- /dev/null
@@ -0,0 +1,139 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _STRINGS_H
+#define        _STRINGS_H      1
+
+/* We don't need and should not read this file if <string.h> was already
+   read. The one exception being that if __USE_MISC isn't defined, then
+   these aren't defined in string.h, so we need to define them here.  */
+#if !defined _STRING_H || !defined __USE_MISC
+
+# include <features.h>
+# define __need_size_t
+# include <stddef.h>
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+# if defined __cplusplus && __GNUC_PREREQ (4, 4)
+#  define __CORRECT_ISO_CPP_STRINGS_H_PROTO
+# endif
+
+__BEGIN_DECLS
+
+# if defined __USE_MISC || !defined __USE_XOPEN2K8
+/* Compare N bytes of S1 and S2 (same as memcmp).  */
+extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
+extern void bcopy (const void *__src, void *__dest, size_t __n) __THROW;
+
+/* Set N bytes of S to 0.  */
+extern void bzero (void *__s, size_t __n) __THROW;
+
+/* Find the first occurrence of C in S (same as strchr).  */
+#  ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+extern const char *index (const char *__s, int __c)
+     __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
+
+#   if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
+__extern_always_inline char *
+index (char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+
+__extern_always_inline const char *
+index (const char *__s, int __c) __THROW
+{
+  return __builtin_index (__s, __c);
+}
+#   endif
+}
+#  else
+extern char *index (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#  endif
+
+/* Find the last occurrence of C in S (same as strrchr).  */
+#  ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+extern const char *rindex (const char *__s, int __c)
+     __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
+
+#   if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRING_H_PROTO
+__extern_always_inline char *
+rindex (char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+
+__extern_always_inline const char *
+rindex (const char *__s, int __c) __THROW
+{
+  return __builtin_rindex (__s, __c);
+}
+#   endif
+}
+#  else
+extern char *rindex (const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
+#  endif
+# endif
+
+#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI
+/* Return the position of the first bit set in I, or 0 if none are set.
+   The least-significant bit is position 1, the most-significant 32.  */
+extern int ffs (int __i) __THROW __attribute__ ((const));
+#endif
+
+/* Compare S1 and S2, ignoring case.  */
+extern int strcasecmp (const char *__s1, const char *__s2)
+     __THROW __attribute_pure__;
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+#ifdef __USE_XOPEN2K8
+/* The following functions are equivalent to the both above but they
+   take the locale they use for the collation as an extra argument.
+   This is not standardsized but something like will come.  */
+# include <xlocale.h>
+
+/* Again versions of a few functions which use the given locale instead
+   of the global one.  */
+extern int strcasecmp_l (const char *__s1, const char *__s2, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
+
+extern int strncasecmp_l (const char *__s1, const char *__s2,
+                         size_t __n, __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
+#endif
+
+__END_DECLS
+
+#endif /* string.h  */
+
+#endif /* strings.h  */
diff --git a/lib/libdss-include/stropts.h b/lib/libdss-include/stropts.h
new file mode 100644 (file)
index 0000000..72cc3b7
--- /dev/null
@@ -0,0 +1,92 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STROPTS_H
+#define _STROPTS_H     1
+
+#include <features.h>
+#include <bits/types.h>
+#include <bits/xtitypes.h>
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+typedef __t_scalar_t t_scalar_t;
+typedef __t_uscalar_t t_uscalar_t;
+
+/* Get system specific constants.  */
+#include <bits/stropts.h>
+
+
+__BEGIN_DECLS
+
+/* Test whether FILDES is associated with a STREAM-based file.  */
+extern int isastream (int __fildes) __THROW;
+
+/* Receive next message from a STREAMS file.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int getmsg (int __fildes, struct strbuf *__restrict __ctlptr,
+                  struct strbuf *__restrict __dataptr,
+                  int *__restrict __flagsp);
+
+/* Receive next message from a STREAMS file, with *FLAGSP allowing to
+   control which message.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int getpmsg (int __fildes, struct strbuf *__restrict __ctlptr,
+                   struct strbuf *__restrict __dataptr,
+                   int *__restrict __bandp, int *__restrict __flagsp);
+
+/* Perform the I/O control operation specified by REQUEST on FD.
+   One argument may follow; its presence and type depend on REQUEST.
+   Return value depends on REQUEST.  Usually -1 indicates error.  */
+extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
+
+/* Send a message on a STREAM.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int putmsg (int __fildes, const struct strbuf *__ctlptr,
+                  const struct strbuf *__dataptr, int __flags);
+
+/* Send a message on a STREAM to the BAND.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int putpmsg (int __fildes, const struct strbuf *__ctlptr,
+                   const struct strbuf *__dataptr, int __band, int __flags);
+
+/* Attach a STREAMS-based file descriptor FILDES to a file PATH in the
+   file system name space.  */
+extern int fattach (int __fildes, const char *__path) __THROW;
+
+/* Detach a name PATH from a STREAMS-based file descriptor.  */
+extern int fdetach (const char *__path) __THROW;
+
+__END_DECLS
+
+#endif /* stropts.h */
diff --git a/lib/libdss-include/sys/acct.h b/lib/libdss-include/sys/acct.h
new file mode 100644 (file)
index 0000000..ea0e7fd
--- /dev/null
@@ -0,0 +1,108 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_ACCT_H
+#define _SYS_ACCT_H    1
+
+#include <features.h>
+
+#include <endian.h>
+#define        __need_time_t
+#include <time.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+#define ACCT_COMM 16
+
+/*
+  comp_t is a 16-bit "floating" point number with a 3-bit base 8
+  exponent and a 13-bit fraction. See linux/kernel/acct.c for the
+  specific encoding system used.
+*/
+
+typedef u_int16_t comp_t;
+
+struct acct
+{
+  char ac_flag;                        /* Flags.  */
+  u_int16_t ac_uid;            /* Real user ID.  */
+  u_int16_t ac_gid;            /* Real group ID.  */
+  u_int16_t ac_tty;            /* Controlling terminal.  */
+  u_int32_t ac_btime;          /* Beginning time.  */
+  comp_t ac_utime;             /* User time.  */
+  comp_t ac_stime;             /* System time.  */
+  comp_t ac_etime;             /* Elapsed time.  */
+  comp_t ac_mem;               /* Average memory usage.  */
+  comp_t ac_io;                        /* Chars transferred.  */
+  comp_t ac_rw;                        /* Blocks read or written.  */
+  comp_t ac_minflt;            /* Minor pagefaults.  */
+  comp_t ac_majflt;            /* Major pagefaults.  */
+  comp_t ac_swaps;             /* Number of swaps.  */
+  u_int32_t ac_exitcode;       /* Process exitcode.  */
+  char ac_comm[ACCT_COMM+1];   /* Command name.  */
+  char ac_pad[10];             /* Padding bytes.  */
+};
+
+
+struct acct_v3
+{
+  char ac_flag;                        /* Flags */
+  char ac_version;             /* Always set to ACCT_VERSION */
+  u_int16_t ac_tty;            /* Control Terminal */
+  u_int32_t ac_exitcode;       /* Exitcode */
+  u_int32_t ac_uid;            /* Real User ID */
+  u_int32_t ac_gid;            /* Real Group ID */
+  u_int32_t ac_pid;            /* Process ID */
+  u_int32_t ac_ppid;           /* Parent Process ID */
+  u_int32_t ac_btime;          /* Process Creation Time */
+  float ac_etime;              /* Elapsed Time */
+  comp_t ac_utime;             /* User Time */
+  comp_t ac_stime;             /* System Time */
+  comp_t ac_mem;               /* Average Memory Usage */
+  comp_t ac_io;                        /* Chars Transferred */
+  comp_t ac_rw;                        /* Blocks Read or Written */
+  comp_t ac_minflt;            /* Minor Pagefaults */
+  comp_t ac_majflt;            /* Major Pagefaults */
+  comp_t ac_swaps;             /* Number of Swaps */
+  char ac_comm[ACCT_COMM];     /* Command Name */
+};
+
+
+enum
+  {
+    AFORK = 0x01,              /* Has executed fork, but no exec.  */
+    ASU = 0x02,                        /* Used super-user privileges.  */
+    ACORE = 0x08,              /* Dumped core.  */
+    AXSIG = 0x10               /* Killed by a signal.  */
+  };
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define ACCT_BYTEORDER 0x80   /* Accounting file is big endian.  */
+#else
+# define ACCT_BYTEORDER 0x00   /* Accounting file is little endian.  */
+#endif
+
+#define AHZ     100
+
+
+/* Switch process accounting on and off.  */
+extern int acct (const char *__filename) __THROW;
+
+__END_DECLS
+
+#endif /* sys/acct.h */
diff --git a/lib/libdss-include/sys/auxv.h b/lib/libdss-include/sys/auxv.h
new file mode 100644 (file)
index 0000000..1b141bb
--- /dev/null
@@ -0,0 +1,37 @@
+/* Access to the auxiliary vector.
+   Copyright (C) 2012-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_AUXV_H
+#define _SYS_AUXV_H 1
+
+#include <elf.h>
+#include <bits/auxv.h>
+#include <sys/cdefs.h>
+#include <bits/hwcap.h>
+
+__BEGIN_DECLS
+
+/* Return the value associated with an Elf*_auxv_t type from the auxv list
+   passed to the program on startup.  If TYPE was not present in the auxv
+   list, returns zero and sets errno to ENOENT.  */
+extern unsigned long int getauxval (unsigned long int __type)
+  __THROW;
+
+__END_DECLS
+
+#endif /* sys/auxv.h */
diff --git a/lib/libdss-include/sys/bitypes.h b/lib/libdss-include/sys/bitypes.h
new file mode 100644 (file)
index 0000000..3a9860f
--- /dev/null
@@ -0,0 +1,3 @@
+/* The GNU <sys/types.h> defines all the necessary types.  */
+
+#include <sys/types.h>
diff --git a/lib/libdss-include/sys/cdefs.h b/lib/libdss-include/sys/cdefs.h
new file mode 100644 (file)
index 0000000..7fd4154
--- /dev/null
@@ -0,0 +1,444 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_CDEFS_H
+#define        _SYS_CDEFS_H    1
+
+/* We are almost always included from features.h. */
+#ifndef _FEATURES_H
+# include <features.h>
+#endif
+
+/* The GNU libc does not support any K&R compilers or the traditional mode
+   of ISO C compilers anymore.  Check for some of the combinations not
+   anymore supported.  */
+#if defined __GNUC__ && !defined __STDC__
+# error "You need a ISO C conforming compiler to use the glibc headers"
+#endif
+
+/* Some user header file might have defined this before.  */
+#undef __P
+#undef __PMT
+
+#ifdef __GNUC__
+
+/* All functions, except those with callbacks or those that
+   synchronize memory, are leaf functions.  */
+# if __GNUC_PREREQ (4, 6) && !defined _LIBC
+#  define __LEAF , __leaf__
+#  define __LEAF_ATTR __attribute__ ((__leaf__))
+# else
+#  define __LEAF
+#  define __LEAF_ATTR
+# endif
+
+/* GCC can always grok prototypes.  For C++ programs we add throw()
+   to help it optimize the function calls.  But this works only with
+   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
+   as non-throwing using a function attribute since programs can use
+   the -fexceptions options for C code as well.  */
+# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
+#  define __THROW      __attribute__ ((__nothrow__ __LEAF))
+#  define __THROWNL    __attribute__ ((__nothrow__))
+#  define __NTH(fct)   __attribute__ ((__nothrow__ __LEAF)) fct
+# else
+#  if defined __cplusplus && __GNUC_PREREQ (2,8)
+#   define __THROW     throw ()
+#   define __THROWNL   throw ()
+#   define __NTH(fct)  __LEAF_ATTR fct throw ()
+#  else
+#   define __THROW
+#   define __THROWNL
+#   define __NTH(fct)  fct
+#  endif
+# endif
+
+#else  /* Not GCC.  */
+
+# define __inline              /* No inline functions.  */
+
+# define __THROW
+# define __THROWNL
+# define __NTH(fct)    fct
+
+#endif /* GCC.  */
+
+/* These two macros are not used in glibc anymore.  They are kept here
+   only because some other projects expect the macros to be defined.  */
+#define __P(args)      args
+#define __PMT(args)    args
+
+/* For these things, GCC behaves the ANSI way normally,
+   and the non-ANSI way under -traditional.  */
+
+#define __CONCAT(x,y)  x ## y
+#define __STRING(x)    #x
+
+/* This is not a typedef so `const __ptr_t' does the right thing.  */
+#define __ptr_t void *
+#define __long_double_t  long double
+
+
+/* C++ needs to know that types and declarations are C, not C++.  */
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS   }
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+
+/* The standard library needs the functions from the ISO C90 standard
+   in the std namespace.  At the same time we want to be safe for
+   future changes and we include the ISO C99 code in the non-standard
+   namespace __c99.  The C++ wrapper header take case of adding the
+   definitions to the global namespace.  */
+#if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES
+# define __BEGIN_NAMESPACE_STD namespace std {
+# define __END_NAMESPACE_STD   }
+# define __USING_NAMESPACE_STD(name) using std::name;
+# define __BEGIN_NAMESPACE_C99 namespace __c99 {
+# define __END_NAMESPACE_C99   }
+# define __USING_NAMESPACE_C99(name) using __c99::name;
+#else
+/* For compatibility we do not add the declarations into any
+   namespace.  They will end up in the global namespace which is what
+   old code expects.  */
+# define __BEGIN_NAMESPACE_STD
+# define __END_NAMESPACE_STD
+# define __USING_NAMESPACE_STD(name)
+# define __BEGIN_NAMESPACE_C99
+# define __END_NAMESPACE_C99
+# define __USING_NAMESPACE_C99(name)
+#endif
+
+
+/* Fortify support.  */
+#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+#define __bos0(ptr) __builtin_object_size (ptr, 0)
+
+#if __GNUC_PREREQ (4,3)
+# define __warndecl(name, msg) \
+  extern void name (void) __attribute__((__warning__ (msg)))
+# define __warnattr(msg) __attribute__((__warning__ (msg)))
+# define __errordecl(name, msg) \
+  extern void name (void) __attribute__((__error__ (msg)))
+#else
+# define __warndecl(name, msg) extern void name (void)
+# define __warnattr(msg)
+# define __errordecl(name, msg) extern void name (void)
+#endif
+
+/* Support for flexible arrays.  */
+#if __GNUC_PREREQ (2,97)
+/* GCC 2.97 supports C99 flexible array members.  */
+# define __flexarr     []
+#else
+# ifdef __GNUC__
+#  define __flexarr    [0]
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __flexarr   []
+#  else
+/* Some other non-C99 compiler.  Approximate with [1].  */
+#   define __flexarr   [1]
+#  endif
+# endif
+#endif
+
+
+/* __asm__ ("xyz") is used throughout the headers to rename functions
+   at the assembly language level.  This is wrapped by the __REDIRECT
+   macro, in order to support compilers that can do this some other
+   way.  When compilers don't support asm-names at all, we have to do
+   preprocessor tricks instead (which don't have exactly the right
+   semantics, but it's the best we can do).
+
+   Example:
+   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
+
+#if defined __GNUC__ && __GNUC__ >= 2
+
+# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
+# ifdef __cplusplus
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __THROW __asm__ (__ASMNAME (#alias))
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __THROWNL __asm__ (__ASMNAME (#alias))
+# else
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROW
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROWNL
+# endif
+# define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
+
+/*
+#elif __SOME_OTHER_COMPILER__
+
+# define __REDIRECT(name, proto, alias) name proto; \
+       _Pragma("let " #name " = " #alias)
+*/
+#endif
+
+/* GCC has various useful declarations that can be made with the
+   `__attribute__' syntax.  All of the ways we use this do fine if
+   they are omitted for compilers that don't understand it. */
+#if !defined __GNUC__ || __GNUC__ < 2
+# define __attribute__(xyz)    /* Ignore */
+#endif
+
+/* At some point during the gcc 2.96 development the `malloc' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_malloc__ __attribute__ ((__malloc__))
+#else
+# define __attribute_malloc__ /* Ignore */
+#endif
+
+/* Tell the compiler which arguments to an allocation function
+   indicate the size of the allocation.  */
+#if __GNUC_PREREQ (4, 3)
+# define __attribute_alloc_size__(params) \
+  __attribute__ ((__alloc_size__ params))
+#else
+# define __attribute_alloc_size__(params) /* Ignore.  */
+#endif
+
+/* At some point during the gcc 2.96 development the `pure' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_pure__ __attribute__ ((__pure__))
+#else
+# define __attribute_pure__ /* Ignore */
+#endif
+
+/* This declaration tells the compiler that the value is constant.  */
+#if __GNUC_PREREQ (2,5)
+# define __attribute_const__ __attribute__ ((__const__))
+#else
+# define __attribute_const__ /* Ignore */
+#endif
+
+/* At some point during the gcc 3.1 development the `used' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (3,1)
+# define __attribute_used__ __attribute__ ((__used__))
+# define __attribute_noinline__ __attribute__ ((__noinline__))
+#else
+# define __attribute_used__ __attribute__ ((__unused__))
+# define __attribute_noinline__ /* Ignore */
+#endif
+
+/* gcc allows marking deprecated functions.  */
+#if __GNUC_PREREQ (3,2)
+# define __attribute_deprecated__ __attribute__ ((__deprecated__))
+#else
+# define __attribute_deprecated__ /* Ignore */
+#endif
+
+/* At some point during the gcc 2.8 development the `format_arg' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.
+   If several `format_arg' attributes are given for the same function, in
+   gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
+   all designated arguments are considered.  */
+#if __GNUC_PREREQ (2,8)
+# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
+#else
+# define __attribute_format_arg__(x) /* Ignore */
+#endif
+
+/* At some point during the gcc 2.97 development the `strfmon' format
+   attribute for functions was introduced.  We don't want to use it
+   unconditionally (although this would be possible) since it
+   generates warnings.  */
+#if __GNUC_PREREQ (2,97)
+# define __attribute_format_strfmon__(a,b) \
+  __attribute__ ((__format__ (__strfmon__, a, b)))
+#else
+# define __attribute_format_strfmon__(a,b) /* Ignore */
+#endif
+
+/* The nonull function attribute allows to mark pointer parameters which
+   must not be NULL.  */
+#if __GNUC_PREREQ (3,3)
+# define __nonnull(params) __attribute__ ((__nonnull__ params))
+#else
+# define __nonnull(params)
+#endif
+
+/* If fortification mode, we warn about unused results of certain
+   function calls which can lead to problems.  */
+#if __GNUC_PREREQ (3,4)
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+# if __USE_FORTIFY_LEVEL > 0
+#  define __wur __attribute_warn_unused_result__
+# endif
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+#ifndef __wur
+# define __wur /* Ignore */
+#endif
+
+/* Forces a function to be always inlined.  */
+#if __GNUC_PREREQ (3,2)
+# define __always_inline __inline __attribute__ ((__always_inline__))
+#else
+# define __always_inline __inline
+#endif
+
+/* Associate error messages with the source location of the call site rather
+   than with the source location inside the function.  */
+#if __GNUC_PREREQ (4,3)
+# define __attribute_artificial__ __attribute__ ((__artificial__))
+#else
+# define __attribute_artificial__ /* Ignore */
+#endif
+
+/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__
+   or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
+   older than 4.3 may define these macros and still not guarantee GNU inlining
+   semantics.
+
+   clang++ identifies itself as gcc-4.2, but has support for GNU inlining
+   semantics, that can be checked fot by using the __GNUC_STDC_INLINE_ and
+   __GNUC_GNU_INLINE__ macro definitions.  */
+#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
+     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
+                              || defined __GNUC_GNU_INLINE__)))
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+#  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+#  define __extern_always_inline \
+  extern __always_inline __attribute__ ((__gnu_inline__))
+# else
+#  define __extern_inline extern __inline
+#  define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+#ifdef __extern_always_inline
+# define __fortify_function __extern_always_inline __attribute_artificial__
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+   __extern_always_inline function to some other vararg function.  */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
+# define __va_arg_pack_len() __builtin_va_arg_pack_len ()
+#endif
+
+/* It is possible to compile containing GCC extensions even if GCC is
+   run in pedantic mode if the uses are carefully marked using the
+   `__extension__' keyword.  But this is not generally available before
+   version 2.8.  */
+#if !__GNUC_PREREQ (2,8)
+# define __extension__         /* Ignore */
+#endif
+
+/* __restrict is known in EGCS 1.2 and above. */
+#if !__GNUC_PREREQ (2,92)
+# define __restrict    /* Ignore */
+#endif
+
+/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
+     array_name[restrict]
+   GCC 3.1 supports this.  */
+#if __GNUC_PREREQ (3,1) && !defined __GNUG__
+# define __restrict_arr        __restrict
+#else
+# ifdef __GNUC__
+#  define __restrict_arr       /* Not supported in old GCC.  */
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __restrict_arr      restrict
+#  else
+/* Some other non-C99 compiler.  */
+#   define __restrict_arr      /* Not supported.  */
+#  endif
+# endif
+#endif
+
+#if __GNUC__ >= 3
+# define __glibc_unlikely(cond)        __builtin_expect ((cond), 0)
+# define __glibc_likely(cond)  __builtin_expect ((cond), 1)
+#else
+# define __glibc_unlikely(cond)        (cond)
+# define __glibc_likely(cond)  (cond)
+#endif
+
+#if (!defined _Noreturn \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     &&  !__GNUC_PREREQ (4,7))
+# if __GNUC_PREREQ (2,8)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# else
+#  define _Noreturn
+# endif
+#endif
+
+#if (!defined _Static_assert && !defined __cplusplus \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
+# define _Static_assert(expr, diagnostic) \
+    extern int (*__Static_assert_function (void)) \
+      [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
+#endif
+
+#include <bits/wordsize.h>
+
+#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+# define __LDBL_COMPAT 1
+# ifdef __REDIRECT
+#  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __LDBL_REDIR(name, proto) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
+#  define __LDBL_REDIR_NTH(name, proto) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_DECL(name, alias) \
+  extern __typeof (name) name __asm (__ASMNAME (#alias));
+#  define __LDBL_REDIR_DECL(name) \
+  extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
+#  define __REDIRECT_LDBL(name, proto, alias) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
+# endif
+#endif
+#if !defined __LDBL_COMPAT || !defined __REDIRECT
+# define __LDBL_REDIR1(name, proto, alias) name proto
+# define __LDBL_REDIR(name, proto) name proto
+# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
+# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
+# define __LDBL_REDIR_DECL(name)
+# ifdef __REDIRECT
+#  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __REDIRECT_NTH (name, proto, alias)
+# endif
+#endif
+
+#endif  /* sys/cdefs.h */
diff --git a/lib/libdss-include/sys/dir.h b/lib/libdss-include/sys/dir.h
new file mode 100644 (file)
index 0000000..73b04bf
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_DIR_H
+#define        _SYS_DIR_H      1
+
+#include <features.h>
+
+#include <dirent.h>
+
+#define        direct  dirent
+
+#endif /* sys/dir.h  */
diff --git a/lib/libdss-include/sys/elf.h b/lib/libdss-include/sys/elf.h
new file mode 100644 (file)
index 0000000..7a2b01b
--- /dev/null
@@ -0,0 +1,26 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_ELF_H
+#define _SYS_ELF_H     1
+
+#warning "This header is obsolete; use <sys/procfs.h> instead."
+
+#include <sys/procfs.h>
+
+#endif /* sys/elf.h */
diff --git a/lib/libdss-include/sys/epoll.h b/lib/libdss-include/sys/epoll.h
new file mode 100644 (file)
index 0000000..72ec211
--- /dev/null
@@ -0,0 +1,142 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EPOLL_H
+#define        _SYS_EPOLL_H    1
+
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+/* Get the platform-dependent flags.  */
+#include <bits/epoll.h>
+
+#ifndef __EPOLL_PACKED
+# define __EPOLL_PACKED
+#endif
+
+
+enum EPOLL_EVENTS
+  {
+    EPOLLIN = 0x001,
+#define EPOLLIN EPOLLIN
+    EPOLLPRI = 0x002,
+#define EPOLLPRI EPOLLPRI
+    EPOLLOUT = 0x004,
+#define EPOLLOUT EPOLLOUT
+    EPOLLRDNORM = 0x040,
+#define EPOLLRDNORM EPOLLRDNORM
+    EPOLLRDBAND = 0x080,
+#define EPOLLRDBAND EPOLLRDBAND
+    EPOLLWRNORM = 0x100,
+#define EPOLLWRNORM EPOLLWRNORM
+    EPOLLWRBAND = 0x200,
+#define EPOLLWRBAND EPOLLWRBAND
+    EPOLLMSG = 0x400,
+#define EPOLLMSG EPOLLMSG
+    EPOLLERR = 0x008,
+#define EPOLLERR EPOLLERR
+    EPOLLHUP = 0x010,
+#define EPOLLHUP EPOLLHUP
+    EPOLLRDHUP = 0x2000,
+#define EPOLLRDHUP EPOLLRDHUP
+    EPOLLWAKEUP = 1u << 29,
+#define EPOLLWAKEUP EPOLLWAKEUP
+    EPOLLONESHOT = 1u << 30,
+#define EPOLLONESHOT EPOLLONESHOT
+    EPOLLET = 1u << 31
+#define EPOLLET EPOLLET
+  };
+
+
+/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
+#define EPOLL_CTL_ADD 1        /* Add a file descriptor to the interface.  */
+#define EPOLL_CTL_DEL 2        /* Remove a file descriptor from the interface.  */
+#define EPOLL_CTL_MOD 3        /* Change file descriptor epoll_event structure.  */
+
+
+typedef union epoll_data
+{
+  void *ptr;
+  int fd;
+  uint32_t u32;
+  uint64_t u64;
+} epoll_data_t;
+
+struct epoll_event
+{
+  uint32_t events;     /* Epoll events */
+  epoll_data_t data;   /* User data variable */
+} __EPOLL_PACKED;
+
+
+__BEGIN_DECLS
+
+/* Creates an epoll instance.  Returns an fd for the new instance.
+   The "size" parameter is a hint specifying the number of file
+   descriptors to be associated with the new instance.  The fd
+   returned by epoll_create() should be closed with close().  */
+extern int epoll_create (int __size) __THROW;
+
+/* Same as epoll_create but with an FLAGS parameter.  The unused SIZE
+   parameter has been dropped.  */
+extern int epoll_create1 (int __flags) __THROW;
+
+
+/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
+   -1 in case of error ( the "errno" variable will contain the
+   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
+   constants defined above. The "fd" parameter is the target of the
+   operation. The "event" parameter describes which events the caller
+   is interested in and any associated user data.  */
+extern int epoll_ctl (int __epfd, int __op, int __fd,
+                     struct epoll_event *__event) __THROW;
+
+
+/* Wait for events on an epoll instance "epfd". Returns the number of
+   triggered events returned in "events" buffer. Or -1 in case of
+   error with the "errno" variable set to the specific error code. The
+   "events" parameter is a buffer that will contain triggered
+   events. The "maxevents" is the maximum number of events to be
+   returned ( usually size of "events" ). The "timeout" parameter
+   specifies the maximum wait time in milliseconds (-1 == infinite).
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_wait (int __epfd, struct epoll_event *__events,
+                      int __maxevents, int __timeout);
+
+
+/* Same as epoll_wait, but the thread's signal mask is temporarily
+   and atomically replaced with the one provided as parameter.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int epoll_pwait (int __epfd, struct epoll_event *__events,
+                       int __maxevents, int __timeout,
+                       const __sigset_t *__ss);
+
+__END_DECLS
+
+#endif /* sys/epoll.h */
diff --git a/lib/libdss-include/sys/errno.h b/lib/libdss-include/sys/errno.h
new file mode 100644 (file)
index 0000000..339f4fc
--- /dev/null
@@ -0,0 +1 @@
+#include <errno.h>
diff --git a/lib/libdss-include/sys/eventfd.h b/lib/libdss-include/sys/eventfd.h
new file mode 100644 (file)
index 0000000..8f8a518
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_EVENTFD_H
+#define        _SYS_EVENTFD_H  1
+
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/eventfd.h>
+
+/* Type for event counter.  */
+typedef uint64_t eventfd_t;
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for generic event channel.  Set initial
+   value to COUNT.  */
+extern int eventfd (unsigned int __count, int __flags) __THROW;
+
+/* Read event counter and possibly wait for events.  */
+extern int eventfd_read (int __fd, eventfd_t *__value);
+
+/* Increment event counter.  */
+extern int eventfd_write (int __fd, eventfd_t __value);
+
+__END_DECLS
+
+#endif /* sys/eventfd.h */
diff --git a/lib/libdss-include/sys/fanotify.h b/lib/libdss-include/sys/fanotify.h
new file mode 100644 (file)
index 0000000..d79ef5e
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 2010-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_FANOTIFY_H
+#define        _SYS_FANOTIFY_H 1
+
+#include <stdint.h>
+#include <linux/fanotify.h>
+
+
+__BEGIN_DECLS
+
+/* Create and initialize fanotify group.  */
+extern int fanotify_init (unsigned int __flags, unsigned int __event_f_flags)
+  __THROW;
+
+/* Add, remove, or modify an fanotify mark on a filesystem object.  */
+extern int fanotify_mark (int __fanotify_fd, unsigned int __flags,
+                         uint64_t __mask, int __dfd, const char *__pathname)
+     __THROW;
+
+__END_DECLS
+
+#endif /* sys/fanotify.h */
diff --git a/lib/libdss-include/sys/fcntl.h b/lib/libdss-include/sys/fcntl.h
new file mode 100644 (file)
index 0000000..cd30455
--- /dev/null
@@ -0,0 +1 @@
+#include <fcntl.h>
diff --git a/lib/libdss-include/sys/file.h b/lib/libdss-include/sys/file.h
new file mode 100644 (file)
index 0000000..cd2a641
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_FILE_H
+#define        _SYS_FILE_H     1
+
+#include <features.h>
+
+#ifndef        _FCNTL_H
+# include <fcntl.h>
+#endif
+
+__BEGIN_DECLS
+
+
+/* Alternate names for values for the WHENCE argument to `lseek'.
+   These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively.  */
+#ifndef L_SET
+# define L_SET 0       /* Seek from beginning of file.  */
+# define L_INCR        1       /* Seek from current position.  */
+# define L_XTND        2       /* Seek from end of file.  */
+#endif
+
+
+/* Operations for the `flock' call.  */
+#define        LOCK_SH 1       /* Shared lock.  */
+#define        LOCK_EX 2       /* Exclusive lock.  */
+#define        LOCK_UN 8       /* Unlock.  */
+#define        __LOCK_ATOMIC   16      /* Atomic update.  */
+
+/* Can be OR'd in to one of the above.  */
+#define        LOCK_NB 4       /* Don't block when locking.  */
+
+
+/* Apply or remove an advisory lock, according to OPERATION,
+   on the file FD refers to.  */
+extern int flock (int __fd, int __operation) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/file.h  */
diff --git a/lib/libdss-include/sys/fsuid.h b/lib/libdss-include/sys/fsuid.h
new file mode 100644 (file)
index 0000000..ac7f286
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_FSUID_H
+#define _SYS_FSUID_H   1
+
+#include <features.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* Change uid used for file access control to UID, without affecting
+   other privileges (such as who can send signals at the process).  */
+extern int setfsuid (__uid_t __uid) __THROW;
+
+/* Ditto for group id. */
+extern int setfsgid (__gid_t __gid) __THROW;
+
+__END_DECLS
+
+#endif /* fsuid.h */
diff --git a/lib/libdss-include/sys/gmon.h b/lib/libdss-include/sys/gmon.h
new file mode 100644 (file)
index 0000000..5b430ab
--- /dev/null
@@ -0,0 +1,201 @@
+/*-
+ * Copyright (c) 1982, 1986, 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)gmon.h      8.2 (Berkeley) 1/4/94
+ */
+
+#ifndef        _SYS_GMON_H
+#define        _SYS_GMON_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+/*
+ * See gmon_out.h for gmon.out format.
+ */
+
+/* structure emitted by "gcc -a".  This must match struct bb in
+   gcc/libgcc2.c.  It is OK for gcc to declare a longer structure as
+   long as the members below are present.  */
+struct __bb
+{
+  long                 zero_word;
+  const char           *filename;
+  long                 *counts;
+  long                 ncounts;
+  struct __bb          *next;
+  const unsigned long  *addresses;
+};
+
+extern struct __bb *__bb_head;
+
+/*
+ * histogram counters are unsigned shorts (according to the kernel).
+ */
+#define        HISTCOUNTER     unsigned short
+
+/*
+ * fraction of text space to allocate for histogram counters here, 1/2
+ */
+#define        HISTFRACTION    2
+
+/*
+ * Fraction of text space to allocate for from hash buckets.
+ * The value of HASHFRACTION is based on the minimum number of bytes
+ * of separation between two subroutine call points in the object code.
+ * Given MIN_SUBR_SEPARATION bytes of separation the value of
+ * HASHFRACTION is calculated as:
+ *
+ *     HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
+ *
+ * For example, on the VAX, the shortest two call sequence is:
+ *
+ *     calls   $0,(r0)
+ *     calls   $0,(r0)
+ *
+ * which is separated by only three bytes, thus HASHFRACTION is
+ * calculated as:
+ *
+ *     HASHFRACTION = 3 / (2 * 2 - 1) = 1
+ *
+ * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
+ * is less than three, this algorithm will not work!
+ *
+ * In practice, however, call instructions are rarely at a minimal
+ * distance.  Hence, we will define HASHFRACTION to be 2 across all
+ * architectures.  This saves a reasonable amount of space for
+ * profiling data structures without (in practice) sacrificing
+ * any granularity.
+ */
+#define        HASHFRACTION    2
+
+/*
+ * Percent of text space to allocate for tostructs.
+ * This is a heuristic; we will fail with a warning when profiling programs
+ * with a very large number of very small functions, but that's
+ * normally OK.
+ * 2 is probably still a good value for normal programs.
+ * Profiling a test case with 64000 small functions will work if
+ * you raise this value to 3 and link statically (which bloats the
+ * text size, thus raising the number of arcs expected by the heuristic).
+ */
+#define ARCDENSITY     3
+
+/*
+ * Always allocate at least this many tostructs.  This
+ * hides the inadequacy of the ARCDENSITY heuristic, at least
+ * for small programs.
+ */
+#define MINARCS                50
+
+/*
+ * The type used to represent indices into gmonparam.tos[].
+ */
+#define        ARCINDEX        u_long
+
+/*
+ * Maximum number of arcs we want to allow.
+ * Used to be max representable value of ARCINDEX minus 2, but now
+ * that ARCINDEX is a long, that's too large; we don't really want
+ * to allow a 48 gigabyte table.
+ * The old value of 1<<16 wasn't high enough in practice for large C++
+ * programs; will 1<<20 be adequate for long?  FIXME
+ */
+#define MAXARCS                (1 << 20)
+
+struct tostruct {
+       u_long          selfpc;
+       long            count;
+       ARCINDEX        link;
+};
+
+/*
+ * a raw arc, with pointers to the calling site and
+ * the called site and a count.
+ */
+struct rawarc {
+       u_long  raw_frompc;
+       u_long  raw_selfpc;
+       long    raw_count;
+};
+
+/*
+ * general rounding functions.
+ */
+#define ROUNDDOWN(x,y) (((x)/(y))*(y))
+#define ROUNDUP(x,y)   ((((x)+(y)-1)/(y))*(y))
+
+/*
+ * The profiling data structures are housed in this structure.
+ */
+struct gmonparam {
+       long int        state;
+       u_short         *kcount;
+       u_long          kcountsize;
+       ARCINDEX        *froms;
+       u_long          fromssize;
+       struct tostruct *tos;
+       u_long          tossize;
+       long            tolimit;
+       u_long          lowpc;
+       u_long          highpc;
+       u_long          textsize;
+       u_long          hashfraction;
+       long            log_hashfraction;
+};
+
+/*
+ * Possible states of profiling.
+ */
+#define        GMON_PROF_ON    0
+#define        GMON_PROF_BUSY  1
+#define        GMON_PROF_ERROR 2
+#define        GMON_PROF_OFF   3
+
+/*
+ * Sysctl definitions for extracting profiling information from the kernel.
+ */
+#define        GPROF_STATE     0       /* int: profiling enabling variable */
+#define        GPROF_COUNT     1       /* struct: profile tick count buffer */
+#define        GPROF_FROMS     2       /* struct: from location hash bucket */
+#define        GPROF_TOS       3       /* struct: destination/count structure */
+#define        GPROF_GMONPARAM 4       /* struct: profiling parameters (see above) */
+
+__BEGIN_DECLS
+
+/* Set up data structures and start profiling.  */
+extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
+extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
+
+/* Clean up profiling and write out gmon.out.  */
+extern void _mcleanup (void) __THROW;
+
+__END_DECLS
+
+#endif /* sys/gmon.h */
diff --git a/lib/libdss-include/sys/gmon_out.h b/lib/libdss-include/sys/gmon_out.h
new file mode 100644 (file)
index 0000000..b948799
--- /dev/null
@@ -0,0 +1,79 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file specifies the format of gmon.out files.  It should have
+   as few external dependencies as possible as it is going to be included
+   in many different programs.  That is, minimize the number of #include's.
+
+   A gmon.out file consists of a header (defined by gmon_hdr) followed by
+   a sequence of records.  Each record starts with a one-byte tag
+   identifying the type of records, followed by records specific data. */
+
+#ifndef _SYS_GMON_OUT_H
+#define _SYS_GMON_OUT_H        1
+
+#include <features.h>
+
+#define        GMON_MAGIC      "gmon"  /* magic cookie */
+#define GMON_VERSION   1       /* version number */
+
+/* For profiling shared object we need a new format.  */
+#define GMON_SHOBJ_VERSION     0x1ffff
+
+__BEGIN_DECLS
+
+/*
+ * Raw header as it appears on file (without padding).  This header
+ * always comes first in gmon.out and is then followed by a series
+ * records defined below.
+ */
+struct gmon_hdr
+  {
+    char cookie[4];
+    char version[4];
+    char spare[3 * 4];
+  };
+
+/* types of records in this file: */
+typedef enum
+  {
+    GMON_TAG_TIME_HIST = 0,
+    GMON_TAG_CG_ARC = 1,
+    GMON_TAG_BB_COUNT = 2
+  } GMON_Record_Tag;
+
+struct gmon_hist_hdr
+  {
+    char low_pc[sizeof (char *)];      /* base pc address of sample buffer */
+    char high_pc[sizeof (char *)];     /* max pc address of sampled buffer */
+    char hist_size[4];                 /* size of sample buffer */
+    char prof_rate[4];                 /* profiling clock rate */
+    char dimen[15];                    /* phys. dim., usually "seconds" */
+    char dimen_abbrev;                 /* usually 's' for "seconds" */
+  };
+
+struct gmon_cg_arc_record
+  {
+    char from_pc[sizeof (char *)];     /* address within caller's body */
+    char self_pc[sizeof (char *)];     /* address within callee's body */
+    char count[4];                     /* number of arc traversals */
+  };
+
+__END_DECLS
+
+#endif /* sys/gmon_out.h */
diff --git a/lib/libdss-include/sys/inotify.h b/lib/libdss-include/sys/inotify.h
new file mode 100644 (file)
index 0000000..e42dba0
--- /dev/null
@@ -0,0 +1,99 @@
+/* Copyright (C) 2005-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_INOTIFY_H
+#define        _SYS_INOTIFY_H  1
+
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/inotify.h>
+
+
+/* Structure describing an inotify event.  */
+struct inotify_event
+{
+  int wd;              /* Watch descriptor.  */
+  uint32_t mask;       /* Watch mask.  */
+  uint32_t cookie;     /* Cookie to synchronize two events.  */
+  uint32_t len;                /* Length (including NULs) of name.  */
+  char name __flexarr; /* Name.  */
+};
+
+
+/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH.  */
+#define IN_ACCESS       0x00000001     /* File was accessed.  */
+#define IN_MODIFY       0x00000002     /* File was modified.  */
+#define IN_ATTRIB       0x00000004     /* Metadata changed.  */
+#define IN_CLOSE_WRITE  0x00000008     /* Writtable file was closed.  */
+#define IN_CLOSE_NOWRITE 0x00000010    /* Unwrittable file closed.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close.  */
+#define IN_OPEN                 0x00000020     /* File was opened.  */
+#define IN_MOVED_FROM   0x00000040     /* File was moved from X.  */
+#define IN_MOVED_TO      0x00000080    /* File was moved to Y.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO) /* Moves.  */
+#define IN_CREATE       0x00000100     /* Subfile was created.  */
+#define IN_DELETE       0x00000200     /* Subfile was deleted.  */
+#define IN_DELETE_SELF  0x00000400     /* Self was deleted.  */
+#define IN_MOVE_SELF    0x00000800     /* Self was moved.  */
+
+/* Events sent by the kernel.  */
+#define IN_UNMOUNT      0x00002000     /* Backing fs was unmounted.  */
+#define IN_Q_OVERFLOW   0x00004000     /* Event queued overflowed.  */
+#define IN_IGNORED      0x00008000     /* File was ignored.  */
+
+/* Helper events.  */
+#define IN_CLOSE        (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)    /* Close.  */
+#define IN_MOVE                 (IN_MOVED_FROM | IN_MOVED_TO)          /* Moves.  */
+
+/* Special flags.  */
+#define IN_ONLYDIR      0x01000000     /* Only watch the path if it is a
+                                          directory.  */
+#define IN_DONT_FOLLOW  0x02000000     /* Do not follow a sym link.  */
+#define IN_EXCL_UNLINK  0x04000000     /* Exclude events on unlinked
+                                          objects.  */
+#define IN_MASK_ADD     0x20000000     /* Add to the mask of an already
+                                          existing watch.  */
+#define IN_ISDIR        0x40000000     /* Event occurred against dir.  */
+#define IN_ONESHOT      0x80000000     /* Only send event once.  */
+
+/* All events which a program can wait on.  */
+#define IN_ALL_EVENTS   (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE  \
+                         | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM        \
+                         | IN_MOVED_TO | IN_CREATE | IN_DELETE               \
+                         | IN_DELETE_SELF | IN_MOVE_SELF)
+
+
+__BEGIN_DECLS
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init (void) __THROW;
+
+/* Create and initialize inotify instance.  */
+extern int inotify_init1 (int __flags) __THROW;
+
+/* Add watch of object NAME to inotify instance FD.  Notify about
+   events specified by MASK.  */
+extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
+  __THROW;
+
+/* Remove the watch specified by WD from the inotify instance FD.  */
+extern int inotify_rm_watch (int __fd, int __wd) __THROW;
+
+__END_DECLS
+
+#endif /* sys/inotify.h */
diff --git a/lib/libdss-include/sys/ioctl.h b/lib/libdss-include/sys/ioctl.h
new file mode 100644 (file)
index 0000000..4bc5a1a
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_IOCTL_H
+#define        _SYS_IOCTL_H    1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get the list of `ioctl' requests and related constants.  */
+#include <bits/ioctls.h>
+
+/* Define some types used by `ioctl' requests.  */
+#include <bits/ioctl-types.h>
+
+/* On a Unix system, the system <sys/ioctl.h> probably defines some of
+   the symbols we define in <sys/ttydefaults.h> (usually with the same
+   values).  The code to generate <bits/ioctls.h> has omitted these
+   symbols to avoid the conflict, but a Unix program expects <sys/ioctl.h>
+   to define them, so we must include <sys/ttydefaults.h> here.  */
+#include <sys/ttydefaults.h>
+
+/* Perform the I/O control operation specified by REQUEST on FD.
+   One argument may follow; its presence and type depend on REQUEST.
+   Return value depends on REQUEST.  Usually -1 indicates error.  */
+extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ioctl.h */
diff --git a/lib/libdss-include/sys/ipc.h b/lib/libdss-include/sys/ipc.h
new file mode 100644 (file)
index 0000000..70bd7a6
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_IPC_H
+#define _SYS_IPC_H     1
+
+#include <features.h>
+
+#if !defined __USE_MISC && !defined __USE_XOPEN && __GNUC__ >= 2
+# warning "Files using this header must be compiled with _GNU_SOURCE or _XOPEN_SOURCE"
+#endif
+
+/* Get system dependent definition of `struct ipc_perm' and more.  */
+#include <bits/ipctypes.h>
+#include <bits/ipc.h>
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __key_t_defined
+typedef __key_t key_t;
+# define __key_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* Generates key for System V style IPC.  */
+extern key_t ftok (const char *__pathname, int __proj_id) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ipc.h */
diff --git a/lib/libdss-include/sys/kd.h b/lib/libdss-include/sys/kd.h
new file mode 100644 (file)
index 0000000..bb20603
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_KD_H
+#define _SYS_KD_H      1
+
+/* Make sure the <linux/types.h> header is not loaded.  */
+#ifndef _LINUX_TYPES_H
+# define _LINUX_TYPES_H                1
+# define __undef_LINUX_TYPES_H
+#endif
+
+#include <linux/kd.h>
+
+#ifdef __undef_LINUX_TYPES_H
+# undef _LINUX_TYPES_H
+# undef __undef_LINUX_TYPES_H
+#endif
+
+#endif /* sys/kd.h */
diff --git a/lib/libdss-include/sys/klog.h b/lib/libdss-include/sys/klog.h
new file mode 100644 (file)
index 0000000..21c3950
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_KLOG_H
+
+#define        _SYS_KLOG_H     1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Control the kernel's logging facility.  This corresponds exactly to
+   the kernel's syslog system call, but that name is easily confused
+   with the user-level syslog facility, which is something completely
+   different.  */
+extern int klogctl (int __type, char *__bufp, int __len) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_KLOG_H */
diff --git a/lib/libdss-include/sys/mman.h b/lib/libdss-include/sys/mman.h
new file mode 100644 (file)
index 0000000..a7879ea
--- /dev/null
@@ -0,0 +1,151 @@
+/* Definitions for BSD-style memory management.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_MMAN_H
+#define        _SYS_MMAN_H     1
+
+#include <features.h>
+#include <bits/types.h>
+#define __need_size_t
+#include <stddef.h>
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#include <bits/mman.h>
+
+/* Return value of `mmap' in case of an error.  */
+#define MAP_FAILED     ((void *) -1)
+
+__BEGIN_DECLS
+/* Map addresses starting near ADDR and extending for LEN bytes.  from
+   OFFSET into the file FD describes according to PROT and FLAGS.  If ADDR
+   is nonzero, it is the desired mapping address.  If the MAP_FIXED bit is
+   set in FLAGS, the mapping will be at ADDR exactly (which must be
+   page-aligned); otherwise the system chooses a convenient nearby address.
+   The return value is the actual mapping address chosen or MAP_FAILED
+   for errors (in which case `errno' is set).  A successful `mmap' call
+   deallocates any previous mapping for the affected region.  */
+
+#ifndef __USE_FILE_OFFSET64
+extern void *mmap (void *__addr, size_t __len, int __prot,
+                  int __flags, int __fd, __off_t __offset) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern void * __REDIRECT_NTH (mmap,
+                             (void *__addr, size_t __len, int __prot,
+                              int __flags, int __fd, __off64_t __offset),
+                             mmap64);
+# else
+#  define mmap mmap64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern void *mmap64 (void *__addr, size_t __len, int __prot,
+                    int __flags, int __fd, __off64_t __offset) __THROW;
+#endif
+
+/* Deallocate any mapping for the region starting at ADDR and extending LEN
+   bytes.  Returns 0 if successful, -1 for errors (and sets errno).  */
+extern int munmap (void *__addr, size_t __len) __THROW;
+
+/* Change the memory protection of the region starting at ADDR and
+   extending LEN bytes to PROT.  Returns 0 if successful, -1 for errors
+   (and sets errno).  */
+extern int mprotect (void *__addr, size_t __len, int __prot) __THROW;
+
+/* Synchronize the region starting at ADDR and extending LEN bytes with the
+   file it maps.  Filesystem operations on a file being mapped are
+   unpredictable before this is done.  Flags are from the MS_* set.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int msync (void *__addr, size_t __len, int __flags);
+
+#ifdef __USE_MISC
+/* Advise the system about particular usage patterns the program follows
+   for the region starting at ADDR and extending LEN bytes.  */
+extern int madvise (void *__addr, size_t __len, int __advice) __THROW;
+#endif
+#ifdef __USE_XOPEN2K
+/* This is the POSIX name for this function.  */
+extern int posix_madvise (void *__addr, size_t __len, int __advice) __THROW;
+#endif
+
+/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to
+   be memory resident.  */
+extern int mlock (const void *__addr, size_t __len) __THROW;
+
+/* Unlock whole pages previously mapped by the range [ADDR,ADDR+LEN).  */
+extern int munlock (const void *__addr, size_t __len) __THROW;
+
+/* Cause all currently mapped pages of the process to be memory resident
+   until unlocked by a call to the `munlockall', until the process exits,
+   or until the process calls `execve'.  */
+extern int mlockall (int __flags) __THROW;
+
+/* All currently mapped pages of the process' address space become
+   unlocked.  */
+extern int munlockall (void) __THROW;
+
+#ifdef __USE_MISC
+/* mincore returns the memory residency status of the pages in the
+   current process's address space specified by [start, start + len).
+   The status is returned in a vector of bytes.  The least significant
+   bit of each byte is 1 if the referenced page is in memory, otherwise
+   it is zero.  */
+extern int mincore (void *__start, size_t __len, unsigned char *__vec)
+     __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Remap pages mapped by the range [ADDR,ADDR+OLD_LEN) to new length
+   NEW_LEN.  If MREMAP_MAYMOVE is set in FLAGS the returned address
+   may differ from ADDR.  If MREMAP_FIXED is set in FLAGS the function
+   takes another parameter which is a fixed address at which the block
+   resides after a successful call.  */
+extern void *mremap (void *__addr, size_t __old_len, size_t __new_len,
+                    int __flags, ...) __THROW;
+
+/* Remap arbitrary pages of a shared backing store within an existing
+   VMA.  */
+extern int remap_file_pages (void *__start, size_t __size, int __prot,
+                            size_t __pgoff, int __flags) __THROW;
+#endif
+
+
+/* Open shared memory segment.  */
+extern int shm_open (const char *__name, int __oflag, mode_t __mode);
+
+/* Remove shared memory segment.  */
+extern int shm_unlink (const char *__name);
+
+__END_DECLS
+
+#endif /* sys/mman.h */
diff --git a/lib/libdss-include/sys/mount.h b/lib/libdss-include/sys/mount.h
new file mode 100644 (file)
index 0000000..3b667ed
--- /dev/null
@@ -0,0 +1,150 @@
+/* Header file for mounting/unmount Linux filesystems.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is taken from /usr/include/linux/fs.h.  */
+
+#ifndef _SYS_MOUNT_H
+#define _SYS_MOUNT_H   1
+
+#include <features.h>
+#include <sys/ioctl.h>
+
+#define BLOCK_SIZE     1024
+#define BLOCK_SIZE_BITS        10
+
+
+/* These are the fs-independent mount-flags: up to 16 flags are
+   supported  */
+enum
+{
+  MS_RDONLY = 1,               /* Mount read-only.  */
+#define MS_RDONLY      MS_RDONLY
+  MS_NOSUID = 2,               /* Ignore suid and sgid bits.  */
+#define MS_NOSUID      MS_NOSUID
+  MS_NODEV = 4,                        /* Disallow access to device special files.  */
+#define MS_NODEV       MS_NODEV
+  MS_NOEXEC = 8,               /* Disallow program execution.  */
+#define MS_NOEXEC      MS_NOEXEC
+  MS_SYNCHRONOUS = 16,         /* Writes are synced at once.  */
+#define MS_SYNCHRONOUS MS_SYNCHRONOUS
+  MS_REMOUNT = 32,             /* Alter flags of a mounted FS.  */
+#define MS_REMOUNT     MS_REMOUNT
+  MS_MANDLOCK = 64,            /* Allow mandatory locks on an FS.  */
+#define MS_MANDLOCK    MS_MANDLOCK
+  MS_DIRSYNC = 128,            /* Directory modifications are synchronous.  */
+#define MS_DIRSYNC     MS_DIRSYNC
+  MS_NOATIME = 1024,           /* Do not update access times.  */
+#define MS_NOATIME     MS_NOATIME
+  MS_NODIRATIME = 2048,                /* Do not update directory access times.  */
+#define MS_NODIRATIME  MS_NODIRATIME
+  MS_BIND = 4096,              /* Bind directory at different place.  */
+#define MS_BIND                MS_BIND
+  MS_MOVE = 8192,
+#define MS_MOVE                MS_MOVE
+  MS_REC = 16384,
+#define MS_REC         MS_REC
+  MS_SILENT = 32768,
+#define MS_SILENT      MS_SILENT
+  MS_POSIXACL = 1 << 16,       /* VFS does not apply the umask.  */
+#define MS_POSIXACL    MS_POSIXACL
+  MS_UNBINDABLE = 1 << 17,     /* Change to unbindable.  */
+#define MS_UNBINDABLE  MS_UNBINDABLE
+  MS_PRIVATE = 1 << 18,                /* Change to private.  */
+#define MS_PRIVATE     MS_PRIVATE
+  MS_SLAVE = 1 << 19,          /* Change to slave.  */
+#define MS_SLAVE       MS_SLAVE
+  MS_SHARED = 1 << 20,         /* Change to shared.  */
+#define MS_SHARED      MS_SHARED
+  MS_RELATIME = 1 << 21,       /* Update atime relative to mtime/ctime.  */
+#define MS_RELATIME    MS_RELATIME
+  MS_KERNMOUNT = 1 << 22,      /* This is a kern_mount call.  */
+#define MS_KERNMOUNT   MS_KERNMOUNT
+  MS_I_VERSION =  1 << 23,     /* Update inode I_version field.  */
+#define MS_I_VERSION   MS_I_VERSION
+  MS_STRICTATIME = 1 << 24,    /* Always perform atime updates.  */
+#define MS_STRICTATIME MS_STRICTATIME
+  MS_LAZYTIME = 1 << 25,       /* Update the on-disk [acm]times lazily.  */
+#define MS_LAZYTIME    MS_LAZYTIME
+  MS_ACTIVE = 1 << 30,
+#define MS_ACTIVE      MS_ACTIVE
+  MS_NOUSER = 1 << 31
+#define MS_NOUSER      MS_NOUSER
+};
+
+/* Flags that can be altered by MS_REMOUNT  */
+#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION \
+                    |MS_LAZYTIME)
+
+
+/* Magic mount flag number. Has to be or-ed to the flag values.  */
+
+#define MS_MGC_VAL 0xc0ed0000  /* Magic flag number to indicate "new" flags */
+#define MS_MGC_MSK 0xffff0000  /* Magic flag number mask */
+
+
+/* The read-only stuff doesn't really belong here, but any other place
+   is probably as bad and I don't want to create yet another include
+   file.  */
+
+#define BLKROSET   _IO(0x12, 93) /* Set device read-only (0 = read-write).  */
+#define BLKROGET   _IO(0x12, 94) /* Get read-only status (0 = read_write).  */
+#define BLKRRPART  _IO(0x12, 95) /* Re-read partition table.  */
+#define BLKGETSIZE _IO(0x12, 96) /* Return device size.  */
+#define BLKFLSBUF  _IO(0x12, 97) /* Flush buffer cache.  */
+#define BLKRASET   _IO(0x12, 98) /* Set read ahead for block device.  */
+#define BLKRAGET   _IO(0x12, 99) /* Get current read ahead setting.  */
+#define BLKFRASET  _IO(0x12,100) /* Set filesystem read-ahead.  */
+#define BLKFRAGET  _IO(0x12,101) /* Get filesystem read-ahead.  */
+#define BLKSECTSET _IO(0x12,102) /* Set max sectors per request.  */
+#define BLKSECTGET _IO(0x12,103) /* Get max sectors per request.  */
+#define BLKSSZGET  _IO(0x12,104) /* Get block device sector size.  */
+#define BLKBSZGET  _IOR(0x12,112,size_t)
+#define BLKBSZSET  _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size.  */
+
+
+/* Possible value for FLAGS parameter of `umount2'.  */
+enum
+{
+  MNT_FORCE = 1,               /* Force unmounting.  */
+#define MNT_FORCE MNT_FORCE
+  MNT_DETACH = 2,              /* Just detach from the tree.  */
+#define MNT_DETACH MNT_DETACH
+  MNT_EXPIRE = 4,              /* Mark for expiry.  */
+#define MNT_EXPIRE MNT_EXPIRE
+  UMOUNT_NOFOLLOW = 8          /* Don't follow symlink on umount.  */
+#define UMOUNT_NOFOLLOW UMOUNT_NOFOLLOW
+};
+
+
+__BEGIN_DECLS
+
+/* Mount a filesystem.  */
+extern int mount (const char *__special_file, const char *__dir,
+                 const char *__fstype, unsigned long int __rwflag,
+                 const void *__data) __THROW;
+
+/* Unmount a filesystem.  */
+extern int umount (const char *__special_file) __THROW;
+
+/* Unmount a filesystem.  Force unmounting if FLAGS is set to MNT_FORCE.  */
+extern int umount2 (const char *__special_file, int __flags) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_MOUNT_H */
diff --git a/lib/libdss-include/sys/msg.h b/lib/libdss-include/sys/msg.h
new file mode 100644 (file)
index 0000000..4dc559f
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MSG_H
+#define _SYS_MSG_H
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct msqid_ds' and more.  */
+#include <bits/msq.h>
+
+/* Define types required by the standard.  */
+#define        __need_time_t
+#include <time.h>
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+/* The following System V style IPC functions implement a message queue
+   system.  The definition is found in XPG2.  */
+
+#ifdef __USE_GNU
+/* Template for struct to be used as argument for `msgsnd' and `msgrcv'.  */
+struct msgbuf
+  {
+    __syscall_slong_t mtype;   /* type of received/sent message */
+    char mtext[1];             /* text of the message */
+  };
+#endif
+
+
+__BEGIN_DECLS
+
+/* Message queue control operation.  */
+extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
+
+/* Get messages queue.  */
+extern int msgget (key_t __key, int __msgflg) __THROW;
+
+/* Receive message from message queue.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t msgrcv (int __msqid, void *__msgp, size_t __msgsz,
+                      long int __msgtyp, int __msgflg);
+
+/* Send message to message queue.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int msgsnd (int __msqid, const void *__msgp, size_t __msgsz,
+                  int __msgflg);
+
+__END_DECLS
+
+#endif /* sys/msg.h */
diff --git a/lib/libdss-include/sys/mtio.h b/lib/libdss-include/sys/mtio.h
new file mode 100644 (file)
index 0000000..3d175ae
--- /dev/null
@@ -0,0 +1,276 @@
+/* Structures and definitions for magnetic tape I/O control commands.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Written by H. Bergman <hennus@cybercomm.nl>.  */
+
+#ifndef _SYS_MTIO_H
+#define _SYS_MTIO_H    1
+
+/* Get necessary definitions from system and kernel headers.  */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+
+/* Structure for MTIOCTOP - magnetic tape operation command.  */
+struct mtop
+  {
+    short int mt_op;           /* Operations defined below.  */
+    int mt_count;              /* How many of them.  */
+  };
+#define _IOT_mtop /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0)
+
+/* Magnetic Tape operations [Not all operations supported by all drivers].  */
+#define MTRESET 0      /* +reset drive in case of problems.  */
+#define MTFSF  1       /* Forward space over FileMark,
+                        * position at first record of next file.  */
+#define MTBSF  2       /* Backward space FileMark (position before FM).  */
+#define MTFSR  3       /* Forward space record.  */
+#define MTBSR  4       /* Backward space record.  */
+#define MTWEOF 5       /* Write an end-of-file record (mark).  */
+#define MTREW  6       /* Rewind.  */
+#define MTOFFL 7       /* Rewind and put the drive offline (eject?).  */
+#define MTNOP  8       /* No op, set status only (read with MTIOCGET).  */
+#define MTRETEN 9      /* Retension tape.  */
+#define MTBSFM 10      /* +backward space FileMark, position at FM.  */
+#define MTFSFM  11     /* +forward space FileMark, position at FM.  */
+#define MTEOM  12      /* Goto end of recorded media (for appending files).
+                          MTEOM positions after the last FM, ready for
+                          appending another file.  */
+#define MTERASE 13     /* Erase tape -- be careful!  */
+
+#define MTRAS1  14     /* Run self test 1 (nondestructive).  */
+#define MTRAS2 15      /* Run self test 2 (destructive).  */
+#define MTRAS3  16     /* Reserved for self test 3.  */
+
+#define MTSETBLK 20    /* Set block length (SCSI).  */
+#define MTSETDENSITY 21        /* Set tape density (SCSI).  */
+#define MTSEEK 22      /* Seek to block (Tandberg, etc.).  */
+#define MTTELL 23      /* Tell block (Tandberg, etc.).  */
+#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2.
+                            Ordinary buffered operation with code 1.  */
+#define MTFSS  25      /* Space forward over setmarks.  */
+#define MTBSS  26      /* Space backward over setmarks.  */
+#define MTWSM  27      /* Write setmarks.  */
+
+#define MTLOCK  28     /* Lock the drive door.  */
+#define MTUNLOCK 29    /* Unlock the drive door.  */
+#define MTLOAD  30     /* Execute the SCSI load command.  */
+#define MTUNLOAD 31    /* Execute the SCSI unload command.  */
+#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15.  */
+#define MTSETPART 33   /* Change the active tape partition.  */
+#define MTMKPART  34   /* Format the tape with one or two partitions.  */
+
+/* structure for MTIOCGET - mag tape get status command */
+
+struct mtget
+  {
+    long int mt_type;          /* Type of magtape device.  */
+    long int mt_resid;         /* Residual count: (not sure)
+                                  number of bytes ignored, or
+                                  number of files not skipped, or
+                                  number of records not skipped.  */
+    /* The following registers are device dependent.  */
+    long int mt_dsreg;         /* Status register.  */
+    long int mt_gstat;         /* Generic (device independent) status.  */
+    long int mt_erreg;         /* Error register.  */
+    /* The next two fields are not always used.  */
+    __daddr_t mt_fileno;       /* Number of current file on tape.  */
+    __daddr_t mt_blkno;                /* Current block number.  */
+  };
+#define _IOT_mtget /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (long), 7, 0, 0, 0, 0)
+
+
+/* Constants for mt_type. Not all of these are supported, and
+   these are not all of the ones that are supported.  */
+#define MT_ISUNKNOWN           0x01
+#define MT_ISQIC02             0x02    /* Generic QIC-02 tape streamer.  */
+#define MT_ISWT5150            0x03    /* Wangtek 5150EQ, QIC-150, QIC-02.  */
+#define MT_ISARCHIVE_5945L2    0x04    /* Archive 5945L-2, QIC-24, QIC-02?. */
+#define MT_ISCMSJ500           0x05    /* CMS Jumbo 500 (QIC-02?).  */
+#define MT_ISTDC3610           0x06    /* Tandberg 6310, QIC-24.  */
+#define MT_ISARCHIVE_VP60I     0x07    /* Archive VP60i, QIC-02.  */
+#define MT_ISARCHIVE_2150L     0x08    /* Archive Viper 2150L.  */
+#define MT_ISARCHIVE_2060L     0x09    /* Archive Viper 2060L.  */
+#define MT_ISARCHIVESC499      0x0A    /* Archive SC-499 QIC-36 controller. */
+#define MT_ISQIC02_ALL_FEATURES        0x0F    /* Generic QIC-02 with all features. */
+#define MT_ISWT5099EEN24       0x11    /* Wangtek 5099-een24, 60MB, QIC-24. */
+#define MT_ISTEAC_MT2ST                0x12    /* Teac MT-2ST 155mb drive,
+                                          Teac DC-1 card (Wangtek type).  */
+#define MT_ISEVEREX_FT40A      0x32    /* Everex FT40A (QIC-40).  */
+#define MT_ISDDS1              0x51    /* DDS device without partitions.  */
+#define MT_ISDDS2              0x52    /* DDS device with partitions.  */
+#define MT_ISSCSI1             0x71    /* Generic ANSI SCSI-1 tape unit.  */
+#define MT_ISSCSI2             0x72    /* Generic ANSI SCSI-2 tape unit.  */
+
+/* QIC-40/80/3010/3020 ftape supported drives.
+   20bit vendor ID + 0x800000 (see vendors.h in ftape distribution).  */
+#define MT_ISFTAPE_UNKNOWN     0x800000 /* obsolete */
+#define MT_ISFTAPE_FLAG                0x800000
+
+struct mt_tape_info
+  {
+    long int t_type;           /* Device type id (mt_type).  */
+    char *t_name;              /* Descriptive name.  */
+  };
+
+#define MT_TAPE_INFO \
+  {                                                                          \
+       {MT_ISUNKNOWN,          "Unknown type of tape device"},               \
+       {MT_ISQIC02,            "Generic QIC-02 tape streamer"},              \
+       {MT_ISWT5150,           "Wangtek 5150, QIC-150"},                     \
+       {MT_ISARCHIVE_5945L2,   "Archive 5945L-2"},                           \
+       {MT_ISCMSJ500,          "CMS Jumbo 500"},                             \
+       {MT_ISTDC3610,          "Tandberg TDC 3610, QIC-24"},                 \
+       {MT_ISARCHIVE_VP60I,    "Archive VP60i, QIC-02"},                     \
+       {MT_ISARCHIVE_2150L,    "Archive Viper 2150L"},                       \
+       {MT_ISARCHIVE_2060L,    "Archive Viper 2060L"},                       \
+       {MT_ISARCHIVESC499,     "Archive SC-499 QIC-36 controller"},          \
+       {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"},       \
+       {MT_ISWT5099EEN24,      "Wangtek 5099-een24, 60MB"},                  \
+       {MT_ISTEAC_MT2ST,       "Teac MT-2ST 155mb data cassette drive"},     \
+       {MT_ISEVEREX_FT40A,     "Everex FT40A, QIC-40"},                      \
+       {MT_ISSCSI1,            "Generic SCSI-1 tape"},                       \
+       {MT_ISSCSI2,            "Generic SCSI-2 tape"},                       \
+       {0, NULL}                                                             \
+  }
+
+
+/* Structure for MTIOCPOS - mag tape get position command.  */
+
+struct mtpos
+  {
+    long int mt_blkno; /* Current block number.  */
+  };
+#define _IOT_mtpos /* Hurd ioctl type field.  */ \
+  _IOT_SIMPLE (long)
+
+
+/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended
+   as an interim solution for QIC-02 until DDI is fully implemented.  */
+struct mtconfiginfo
+  {
+    long int mt_type;          /* Drive type.  */
+    long int ifc_type;         /* Interface card type.  */
+    unsigned short int irqnr;  /* IRQ number to use.  */
+    unsigned short int dmanr;  /* DMA channel to use.  */
+    unsigned short int port;   /* IO port base address.  */
+
+    unsigned long int debug;   /* Debugging flags.  */
+
+    unsigned have_dens:1;
+    unsigned have_bsf:1;
+    unsigned have_fsr:1;
+    unsigned have_bsr:1;
+    unsigned have_eod:1;
+    unsigned have_seek:1;
+    unsigned have_tell:1;
+    unsigned have_ras1:1;
+    unsigned have_ras2:1;
+    unsigned have_ras3:1;
+    unsigned have_qfa:1;
+
+    unsigned pad1:5;
+    char reserved[10];
+  };
+#define _IOT_mtconfiginfo /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */
+
+
+/* Magnetic tape I/O control commands.  */
+#define        MTIOCTOP        _IOW('m', 1, struct mtop)       /* Do a mag tape op. */
+#define        MTIOCGET        _IOR('m', 2, struct mtget)      /* Get tape status.  */
+#define        MTIOCPOS        _IOR('m', 3, struct mtpos)      /* Get tape position.*/
+
+/* The next two are used by the QIC-02 driver for runtime reconfiguration.
+   See tpqic02.h for struct mtconfiginfo.  */
+#define        MTIOCGETCONFIG  _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/
+#define        MTIOCSETCONFIG  _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/
+
+/* Generic Mag Tape (device independent) status macros for examining
+   mt_gstat -- HP-UX compatible.
+   There is room for more generic status bits here, but I don't
+   know which of them are reserved. At least three or so should
+   be added to make this really useful.  */
+#define GMT_EOF(x)              ((x) & 0x80000000)
+#define GMT_BOT(x)              ((x) & 0x40000000)
+#define GMT_EOT(x)              ((x) & 0x20000000)
+#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
+#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
+#define GMT_WR_PROT(x)          ((x) & 0x04000000)
+/* #define GMT_ ?              ((x) & 0x02000000) */
+#define GMT_ONLINE(x)           ((x) & 0x01000000)
+#define GMT_D_6250(x)           ((x) & 0x00800000)
+#define GMT_D_1600(x)           ((x) & 0x00400000)
+#define GMT_D_800(x)            ((x) & 0x00200000)
+/* #define GMT_ ?              ((x) & 0x00100000) */
+/* #define GMT_ ?              ((x) & 0x00080000) */
+#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* Door open (no tape).  */
+/* #define GMT_ ?              ((x) & 0x00020000) */
+#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* Immediate report mode.*/
+/* 16 generic status bits unused.  */
+
+
+/* SCSI-tape specific definitions.  Bitfield shifts in the status  */
+#define MT_ST_BLKSIZE_SHIFT    0
+#define MT_ST_BLKSIZE_MASK     0xffffff
+#define MT_ST_DENSITY_SHIFT    24
+#define MT_ST_DENSITY_MASK     0xff000000
+
+#define MT_ST_SOFTERR_SHIFT    0
+#define MT_ST_SOFTERR_MASK     0xffff
+
+/* Bitfields for the MTSETDRVBUFFER ioctl.  */
+#define MT_ST_OPTIONS          0xf0000000
+#define MT_ST_BOOLEANS         0x10000000
+#define MT_ST_SETBOOLEANS      0x30000000
+#define MT_ST_CLEARBOOLEANS    0x40000000
+#define MT_ST_WRITE_THRESHOLD  0x20000000
+#define MT_ST_DEF_BLKSIZE      0x50000000
+#define MT_ST_DEF_OPTIONS      0x60000000
+
+#define MT_ST_BUFFER_WRITES    0x1
+#define MT_ST_ASYNC_WRITES     0x2
+#define MT_ST_READ_AHEAD       0x4
+#define MT_ST_DEBUGGING                0x8
+#define MT_ST_TWO_FM           0x10
+#define MT_ST_FAST_MTEOM       0x20
+#define MT_ST_AUTO_LOCK                0x40
+#define MT_ST_DEF_WRITES       0x80
+#define MT_ST_CAN_BSR          0x100
+#define MT_ST_NO_BLKLIMS       0x200
+#define MT_ST_CAN_PARTITIONS    0x400
+#define MT_ST_SCSI2LOGICAL      0x800
+
+/* The mode parameters to be controlled. Parameter chosen with bits 20-28.  */
+#define MT_ST_CLEAR_DEFAULT    0xfffff
+#define MT_ST_DEF_DENSITY      (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION  (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER    (MT_ST_DEF_OPTIONS | 0x300000)
+
+/* The offset for the arguments for the special HP changer load command.  */
+#define MT_ST_HPLOADER_OFFSET 10000
+
+
+/* Specify default tape device.  */
+#ifndef DEFTAPE
+# define DEFTAPE       "/dev/tape"
+#endif
+
+#endif /* mtio.h */
diff --git a/lib/libdss-include/sys/param.h b/lib/libdss-include/sys/param.h
new file mode 100644 (file)
index 0000000..7e0e331
--- /dev/null
@@ -0,0 +1,106 @@
+/* Compatibility header for old-style Unix parameters and limits.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+#define _SYS_PARAM_H    1
+
+#define __need_NULL
+#include <stddef.h>
+
+#include <sys/types.h>
+#include <limits.h>
+#include <endian.h>                     /* Define BYTE_ORDER et al.  */
+#include <signal.h>                     /* Define NSIG.  */
+
+/* This file defines some things in system-specific ways.  */
+#include <bits/param.h>
+
+
+/* BSD names for some <limits.h> values.  */
+
+#define NBBY           CHAR_BIT
+
+#if !defined NGROUPS && defined NGROUPS_MAX
+# define NGROUPS       NGROUPS_MAX
+#endif
+#if !defined MAXSYMLINKS && defined SYMLOOP_MAX
+# define MAXSYMLINKS   SYMLOOP_MAX
+#endif
+#if !defined CANBSIZ && defined MAX_CANON
+# define CANBSIZ       MAX_CANON
+#endif
+#if !defined MAXPATHLEN && defined PATH_MAX
+# define MAXPATHLEN    PATH_MAX
+#endif
+#if !defined NOFILE && defined OPEN_MAX
+# define NOFILE                OPEN_MAX
+#endif
+#if !defined MAXHOSTNAMELEN && defined HOST_NAME_MAX
+# define MAXHOSTNAMELEN        HOST_NAME_MAX
+#endif
+#ifndef NCARGS
+# ifdef ARG_MAX
+#  define NCARGS       ARG_MAX
+# else
+/* ARG_MAX is unlimited, but we define NCARGS for BSD programs that want to
+   compare against some fixed limit.  */
+# define NCARGS                INT_MAX
+# endif
+#endif
+
+
+/* Magical constants.  */
+#ifndef NOGROUP
+# define NOGROUP       65535     /* Marker for empty group set member.  */
+#endif
+#ifndef NODEV
+# define NODEV         ((dev_t) -1)    /* Non-existent device.  */
+#endif
+
+
+/* Unit of `st_blocks'.  */
+#ifndef DEV_BSIZE
+# define DEV_BSIZE     512
+#endif
+
+
+/* Bit map related macros.  */
+#define setbit(a,i)     ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define clrbit(a,i)     ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define isset(a,i)      ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define isclr(a,i)      (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+
+/* Macros for counting and rounding.  */
+#ifndef howmany
+# define howmany(x, y)  (((x) + ((y) - 1)) / (y))
+#endif
+#ifdef __GNUC__
+# define roundup(x, y)  (__builtin_constant_p (y) && powerof2 (y)             \
+                         ? (((x) + (y) - 1) & ~((y) - 1))                     \
+                         : ((((x) + ((y) - 1)) / (y)) * (y)))
+#else
+# define roundup(x, y)  ((((x) + ((y) - 1)) / (y)) * (y))
+#endif
+#define powerof2(x)     ((((x) - 1) & (x)) == 0)
+
+/* Macros for min/max.  */
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+
+
+#endif  /* sys/param.h */
diff --git a/lib/libdss-include/sys/pci.h b/lib/libdss-include/sys/pci.h
new file mode 100644 (file)
index 0000000..331f2e1
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PCI_H
+#define _SYS_PCI_H     1
+
+/* We use the constants from the kernel.  */
+#include <linux/pci.h>
+
+#endif /* sys/pci.h */
diff --git a/lib/libdss-include/sys/personality.h b/lib/libdss-include/sys/personality.h
new file mode 100644 (file)
index 0000000..ad2258f
--- /dev/null
@@ -0,0 +1,80 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Taken verbatim from Linux 2.6 (include/linux/personality.h).  */
+
+#ifndef _SYS_PERSONALITY_H
+#define _SYS_PERSONALITY_H 1
+
+#include <features.h>
+
+/* Flags for bug emulation.
+   These occupy the top three bytes.  */
+enum
+  {
+    UNAME26 = 0x0020000,
+    ADDR_NO_RANDOMIZE = 0x0040000,
+    FDPIC_FUNCPTRS = 0x0080000,
+    MMAP_PAGE_ZERO = 0x0100000,
+    ADDR_COMPAT_LAYOUT = 0x0200000,
+    READ_IMPLIES_EXEC = 0x0400000,
+    ADDR_LIMIT_32BIT = 0x0800000,
+    SHORT_INODE = 0x1000000,
+    WHOLE_SECONDS = 0x2000000,
+    STICKY_TIMEOUTS = 0x4000000,
+    ADDR_LIMIT_3GB =   0x8000000
+  };
+
+/* Personality types.
+
+   These go in the low byte.  Avoid using the top bit, it will
+   conflict with error returns.  */
+enum
+  {
+    PER_LINUX = 0x0000,
+    PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
+    PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS,
+    PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+    PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE,
+    PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+    PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
+    PER_BSD = 0x0006,
+    PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
+    PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+    PER_LINUX32 = 0x0008,
+    PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
+    PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,     /* IRIX5 32-bit */
+    PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,    /* IRIX6 new 32-bit */
+    PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,     /* IRIX6 64-bit */
+    PER_RISCOS = 0x000c,
+    PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
+    PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+    PER_OSF4 = 0x000f,
+    PER_HPUX = 0x0010,
+    PER_MASK = 0x00ff,
+  };
+
+__BEGIN_DECLS
+
+/* Set different ABIs (personalities).  */
+extern int personality (unsigned long int __persona) __THROW;
+
+__END_DECLS
+
+#endif /* sys/personality.h */
diff --git a/lib/libdss-include/sys/poll.h b/lib/libdss-include/sys/poll.h
new file mode 100644 (file)
index 0000000..e751860
--- /dev/null
@@ -0,0 +1,79 @@
+/* Compatibility definitions for System V `poll' interface.
+   Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_POLL_H
+#define        _SYS_POLL_H     1
+
+#include <features.h>
+
+/* Get the platform dependent bits of `poll'.  */
+#include <bits/poll.h>
+#ifdef __USE_GNU
+/* Get the __sigset_t definition.  */
+# include <bits/sigset.h>
+/* Get the timespec definition.  */
+# define __need_timespec
+# include <time.h>
+#endif
+
+
+/* Type used for the number of file descriptors.  */
+typedef unsigned long int nfds_t;
+
+/* Data structure describing a polling request.  */
+struct pollfd
+  {
+    int fd;                    /* File descriptor to poll.  */
+    short int events;          /* Types of events poller cares about.  */
+    short int revents;         /* Types of events that actually occurred.  */
+  };
+
+
+__BEGIN_DECLS
+
+/* Poll the file descriptors described by the NFDS structures starting at
+   FDS.  If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
+   an event to occur; if TIMEOUT is -1, block until an event occurs.
+   Returns the number of file descriptors with events, zero if timed out,
+   or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout);
+
+#ifdef __USE_GNU
+/* Like poll, but before waiting the threads signal mask is replaced
+   with that specified in the fourth parameter.  For better usability,
+   the timeout value is specified using a TIMESPEC object.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
+                 const struct timespec *__timeout,
+                 const __sigset_t *__ss);
+#endif
+
+__END_DECLS
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/poll2.h>
+#endif
+
+#endif /* sys/poll.h */
diff --git a/lib/libdss-include/sys/prctl.h b/lib/libdss-include/sys/prctl.h
new file mode 100644 (file)
index 0000000..83049d5
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PRCTL_H
+#define _SYS_PRCTL_H   1
+
+#include <features.h>
+#include <linux/prctl.h>  /*  The magic values come from here  */
+
+__BEGIN_DECLS
+
+/* Control process execution.  */
+extern int prctl (int __option, ...) __THROW;
+
+__END_DECLS
+
+#endif  /* sys/prctl.h */
diff --git a/lib/libdss-include/sys/procfs.h b/lib/libdss-include/sys/procfs.h
new file mode 100644 (file)
index 0000000..7e408c3
--- /dev/null
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H  1
+
+/* This is somewhat modelled after the file of the same name on SVR4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  It doesn't have anything to do with the /proc file
+   system, even though Linux has one.
+
+   Anyway, the whole purpose of this file is for GDB and GDB only.
+   Don't read too much into it.  Don't use it for anything other than
+   GDB unless you know what you are doing.  */
+
+#include <features.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+/* Type for a general-purpose register.  */
+typedef unsigned long elf_greg_t;
+
+/* And the whole bunch of them.  We could have used `struct
+   pt_regs' directly in the typedef, but tradition says that
+   the register set is an array, which does have some peculiar
+   semantics, so leave it that way.  */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+/* Register set for the floating-point registers.  */
+typedef struct user_fpsimd_struct elf_fpregset_t;
+
+/* Signal info.  */
+struct elf_siginfo
+  {
+    int si_signo;                      /* Signal number.  */
+    int si_code;                       /* Extra code.  */
+    int si_errno;                      /* Errno.  */
+  };
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with Linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   GDB doesn't really use excluded.  */
+
+struct elf_prstatus
+  {
+    struct elf_siginfo pr_info;                /* Info associated with signal.  */
+    short int pr_cursig;               /* Current signal.  */
+    unsigned long int pr_sigpend;      /* Set of pending signals.  */
+    unsigned long int pr_sighold;      /* Set of held signals.  */
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;           /* User time.  */
+    struct timeval pr_stime;           /* System time.  */
+    struct timeval pr_cutime;          /* Cumulative user time.  */
+    struct timeval pr_cstime;          /* Cumulative system time.  */
+    elf_gregset_t pr_reg;              /* GP registers.  */
+    int pr_fpvalid;                    /* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args.  */
+
+struct elf_prpsinfo
+  {
+    char pr_state;                     /* Numeric process state.  */
+    char pr_sname;                     /* Char for pr_state.  */
+    char pr_zomb;                      /* Zombie.  */
+    char pr_nice;                      /* Nice val.  */
+    unsigned long int pr_flag;         /* Flags.  */
+    unsigned int pr_uid;
+    unsigned int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];                 /* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
+  };
+
+/* The rest of this file provides the types for emulation of the
+   Solaris <proc_service.h> interfaces that should be implemented by
+   users of libthread_db.  */
+
+/* Addresses.  */
+typedef void *psaddr_t;
+
+/* Register sets.  Linux has different names.  */
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+
+/* We don't have any differences between processes and threads,
+   therefore have only one PID type.  */
+typedef __pid_t lwpid_t;
+
+/* Process status and info.  In the end we do provide typedefs for them.  */
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif /* sys/procfs.h */
diff --git a/lib/libdss-include/sys/profil.h b/lib/libdss-include/sys/profil.h
new file mode 100644 (file)
index 0000000..5790fe0
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2001-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PROFIL_H
+#define _PROFIL_H      1
+
+#include <features.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+/* This interface is intended to follow the sprofil() system calls as
+   described by the sprofil(2) man page of Irix v6.5, except that:
+
+       - there is no a priori limit on number of text sections
+       - pr_scale is declared as unsigned long (instead of "unsigned int")
+       - pr_size is declared as size_t (instead of "unsigned int")
+       - pr_off is declared as void * (instead of "__psunsigned_t")
+       - the overflow bin (pr_base==0, pr_scale==2) can appear anywhere
+         in the profp array
+       - PROF_FAST has no effect  */
+
+struct prof
+  {
+    void *pr_base;             /* buffer base */
+    size_t pr_size;            /* buffer size */
+    size_t pr_off;             /* pc offset */
+    unsigned long int pr_scale;        /* pc scaling (fixed-point number) */
+  };
+
+enum
+  {
+    PROF_USHORT        = 0,            /* use 16-bit counters (default) */
+    PROF_UINT  = 1 << 0,       /* use 32-bit counters */
+    PROF_FAST   = 1 << 1       /* profile faster than usual */
+  };
+
+
+__BEGIN_DECLS
+
+extern int sprofil (struct prof *__profp, int __profcnt,
+                   struct timeval *__tvp, unsigned int __flags) __THROW;
+
+__END_DECLS
+
+#endif /* profil.h */
diff --git a/lib/libdss-include/sys/ptrace.h b/lib/libdss-include/sys/ptrace.h
new file mode 100644 (file)
index 0000000..506ecce
--- /dev/null
@@ -0,0 +1,205 @@
+/* `ptrace' debugger support interface.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PTRACE_H
+#define _SYS_PTRACE_H  1
+
+#include <features.h>
+#include <bits/types.h>
+
+__BEGIN_DECLS
+
+/* Type of the REQUEST argument to `ptrace.'  */
+enum __ptrace_request
+{
+  /* Indicate that the process making this request should be traced.
+     All signals received by this process can be intercepted by its
+     parent, and its parent can use the other `ptrace' requests.  */
+  PTRACE_TRACEME = 0,
+#define PT_TRACE_ME PTRACE_TRACEME
+
+  /* Return the word in the process's text space at address ADDR.  */
+  PTRACE_PEEKTEXT = 1,
+#define PT_READ_I PTRACE_PEEKTEXT
+
+  /* Return the word in the process's data space at address ADDR.  */
+  PTRACE_PEEKDATA = 2,
+#define PT_READ_D PTRACE_PEEKDATA
+
+  /* Return the word in the process's user area at offset ADDR.  */
+  PTRACE_PEEKUSER = 3,
+#define PT_READ_U PTRACE_PEEKUSER
+
+  /* Write the word DATA into the process's text space at address ADDR.  */
+  PTRACE_POKETEXT = 4,
+#define PT_WRITE_I PTRACE_POKETEXT
+
+  /* Write the word DATA into the process's data space at address ADDR.  */
+  PTRACE_POKEDATA = 5,
+#define PT_WRITE_D PTRACE_POKEDATA
+
+  /* Write the word DATA into the process's user area at offset ADDR.  */
+  PTRACE_POKEUSER = 6,
+#define PT_WRITE_U PTRACE_POKEUSER
+
+  /* Continue the process.  */
+  PTRACE_CONT = 7,
+#define PT_CONTINUE PTRACE_CONT
+
+  /* Kill the process.  */
+  PTRACE_KILL = 8,
+#define PT_KILL PTRACE_KILL
+
+  /* Single step the process. */
+  PTRACE_SINGLESTEP = 9,
+#define PT_STEP PTRACE_SINGLESTEP
+
+  /* Attach to a process that is already running. */
+  PTRACE_ATTACH = 16,
+#define PT_ATTACH PTRACE_ATTACH
+
+  /* Detach from a process attached to with PTRACE_ATTACH.  */
+  PTRACE_DETACH = 17,
+#define PT_DETACH PTRACE_DETACH
+
+  PTRACE_GET_THREAD_AREA = 22,
+
+  /* Continue and stop at the next (return from) syscall.  */
+  PTRACE_SYSCALL = 24,
+#define PT_SYSCALL PTRACE_SYSCALL
+
+  /* Get all hardware breakpoint registers.  */
+  PTRACE_GETHBPREGS = 29,
+
+  /* Set all hardware breakpoint registers.  */
+  PTRACE_SETHBPREGS = 30,
+
+  /* Set ptrace filter options.  */
+  PTRACE_SETOPTIONS = 0x4200,
+#define PT_SETOPTIONS PTRACE_SETOPTIONS
+
+  /* Get last ptrace message.  */
+  PTRACE_GETEVENTMSG = 0x4201,
+#define PT_GETEVENTMSG PTRACE_GETEVENTMSG
+
+  /* Get siginfo for process.  */
+  PTRACE_GETSIGINFO = 0x4202,
+#define PT_GETSIGINFO PTRACE_GETSIGINFO
+
+  /* Set new siginfo for process.  */
+  PTRACE_SETSIGINFO = 0x4203,
+#define PT_SETSIGINFO PTRACE_SETSIGINFO
+
+  /* Get register content.  */
+  PTRACE_GETREGSET = 0x4204,
+#define PTRACE_GETREGSET PTRACE_GETREGSET
+
+  /* Set register content.  */
+  PTRACE_SETREGSET = 0x4205,
+#define PTRACE_SETREGSET PTRACE_SETREGSET
+
+  /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect
+     signal or group stop state.  */
+  PTRACE_SEIZE = 0x4206,
+#define PTRACE_SEIZE PTRACE_SEIZE
+
+  /* Trap seized trace.  */
+  PTRACE_INTERRUPT = 0x4207,
+#define PTRACE_INTERRUPT PTRACE_INTERRUPT
+
+  /* Wait for next group event.  */
+  PTRACE_LISTEN = 0x4208,
+#define PTRACE_LISTEN PTRACE_LISTEN
+
+  PTRACE_PEEKSIGINFO = 0x4209,
+#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO
+
+  PTRACE_GETSIGMASK = 0x420a,
+#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK
+
+  PTRACE_SETSIGMASK = 0x420b,
+#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK
+
+  PTRACE_SECCOMP_GET_FILTER = 0x420c
+#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER
+};
+
+
+/* Flag for PTRACE_LISTEN.  */
+enum __ptrace_flags
+{
+  PTRACE_SEIZE_DEVEL = 0x80000000
+};
+
+/* Options set using PTRACE_SETOPTIONS.  */
+enum __ptrace_setoptions
+{
+  PTRACE_O_TRACESYSGOOD        = 0x00000001,
+  PTRACE_O_TRACEFORK   = 0x00000002,
+  PTRACE_O_TRACEVFORK   = 0x00000004,
+  PTRACE_O_TRACECLONE  = 0x00000008,
+  PTRACE_O_TRACEEXEC   = 0x00000010,
+  PTRACE_O_TRACEVFORKDONE = 0x00000020,
+  PTRACE_O_TRACEEXIT   = 0x00000040,
+  PTRACE_O_TRACESECCOMP = 0x00000080,
+  PTRACE_O_EXITKILL    = 0x00100000,
+  PTRACE_O_SUSPEND_SECCOMP     = 0x00200000,
+  PTRACE_O_MASK                = 0x003000ff
+};
+
+/* Wait extended result codes for the above trace options.  */
+enum __ptrace_eventcodes
+{
+  PTRACE_EVENT_FORK    = 1,
+  PTRACE_EVENT_VFORK   = 2,
+  PTRACE_EVENT_CLONE   = 3,
+  PTRACE_EVENT_EXEC    = 4,
+  PTRACE_EVENT_VFORK_DONE = 5,
+  PTRACE_EVENT_EXIT    = 6,
+  PTRACE_EVENT_SECCOMP  = 7
+};
+
+/* Arguments for PTRACE_PEEKSIGINFO.  */
+struct __ptrace_peeksiginfo_args
+{
+  __uint64_t off;      /* From which siginfo to start.  */
+  __uint32_t flags;    /* Flags for peeksiginfo.  */
+  __int32_t nr;                /* How many siginfos to take.  */
+};
+
+enum __ptrace_peeksiginfo_flags
+{
+  /* Read signals from a shared (process wide) queue.  */
+  PTRACE_PEEKSIGINFO_SHARED = (1 << 0)
+};
+
+/* Perform process tracing functions.  REQUEST is one of the values
+   above, and determines the action to be taken.
+   For all requests except PTRACE_TRACEME, PID specifies the process to be
+   traced.
+
+   PID and the other arguments described above for the various requests should
+   appear (those that are used for the particular request) as:
+     pid_t PID, void *ADDR, int DATA, void *ADDR2
+   after REQUEST.  */
+extern long int ptrace (enum __ptrace_request __request, ...) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_PTRACE_H */
diff --git a/lib/libdss-include/sys/queue.h b/lib/libdss-include/sys/queue.h
new file mode 100644 (file)
index 0000000..daf4553
--- /dev/null
@@ -0,0 +1,574 @@
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)queue.h     8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef        _SYS_QUEUE_H_
+#define        _SYS_QUEUE_H_
+
+/*
+ * This file defines five types of data structures: singly-linked lists,
+ * lists, simple queues, tail queues, and circular queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The
+ * elements are singly linked for minimum space and pointer manipulation
+ * overhead at the expense of O(n) removal for arbitrary elements. New
+ * elements can be added to the list after an existing element or at the
+ * head of the list.  Elements being removed from the head of the list
+ * should use the explicit macro for this purpose for optimum
+ * efficiency. A singly-linked list may only be traversed in the forward
+ * direction.  Singly-linked lists are ideal for applications with large
+ * datasets and few or no removals or for implementing a LIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A simple queue is headed by a pair of pointers, one the head of the
+ * list and the other to the tail of the list. The elements are singly
+ * linked to save space, so elements can only be removed from the
+ * head of the list. New elements can be added to the list after
+ * an existing element, at the head of the list, or at the end of the
+ * list. A simple queue may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * A circle queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the list.
+ * A circle queue may be traversed in either direction, but has a more
+ * complex end of list detection.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+/*
+ * List definitions.
+ */
+#define        LIST_HEAD(name, type)                                           \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define        LIST_HEAD_INITIALIZER(head)                                     \
+       { NULL }
+
+#define        LIST_ENTRY(type)                                                \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+#define        LIST_INIT(head) do {                                            \
+       (head)->lh_first = NULL;                                        \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_AFTER(listelm, elm, field) do {                     \
+       if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \
+               (listelm)->field.le_next->field.le_prev =               \
+                   &(elm)->field.le_next;                              \
+       (listelm)->field.le_next = (elm);                               \
+       (elm)->field.le_prev = &(listelm)->field.le_next;               \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       (elm)->field.le_next = (listelm);                               \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &(elm)->field.le_next;               \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_INSERT_HEAD(head, elm, field) do {                         \
+       if (((elm)->field.le_next = (head)->lh_first) != NULL)          \
+               (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+       (head)->lh_first = (elm);                                       \
+       (elm)->field.le_prev = &(head)->lh_first;                       \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_REMOVE(elm, field) do {                                    \
+       if ((elm)->field.le_next != NULL)                               \
+               (elm)->field.le_next->field.le_prev =                   \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = (elm)->field.le_next;                   \
+} while (/*CONSTCOND*/0)
+
+#define        LIST_FOREACH(var, head, field)                                  \
+       for ((var) = ((head)->lh_first);                                \
+               (var);                                                  \
+               (var) = ((var)->field.le_next))
+
+/*
+ * List access methods.
+ */
+#define        LIST_EMPTY(head)                ((head)->lh_first == NULL)
+#define        LIST_FIRST(head)                ((head)->lh_first)
+#define        LIST_NEXT(elm, field)           ((elm)->field.le_next)
+
+
+/*
+ * Singly-linked List definitions.
+ */
+#define        SLIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *slh_first; /* first element */                     \
+}
+
+#define        SLIST_HEAD_INITIALIZER(head)                                    \
+       { NULL }
+
+#define        SLIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *sle_next;  /* next element */                      \
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#define        SLIST_INIT(head) do {                                           \
+       (head)->slh_first = NULL;                                       \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
+       (elm)->field.sle_next = (slistelm)->field.sle_next;             \
+       (slistelm)->field.sle_next = (elm);                             \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
+       (elm)->field.sle_next = (head)->slh_first;                      \
+       (head)->slh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_REMOVE_HEAD(head, field) do {                             \
+       (head)->slh_first = (head)->slh_first->field.sle_next;          \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_REMOVE(head, elm, type, field) do {                       \
+       if ((head)->slh_first == (elm)) {                               \
+               SLIST_REMOVE_HEAD((head), field);                       \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = (head)->slh_first;                \
+               while(curelm->field.sle_next != (elm))                  \
+                       curelm = curelm->field.sle_next;                \
+               curelm->field.sle_next =                                \
+                   curelm->field.sle_next->field.sle_next;             \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        SLIST_FOREACH(var, head, field)                                 \
+       for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
+
+/*
+ * Singly-linked List access methods.
+ */
+#define        SLIST_EMPTY(head)       ((head)->slh_first == NULL)
+#define        SLIST_FIRST(head)       ((head)->slh_first)
+#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define        STAILQ_HEAD(name, type)                                 \
+struct name {                                                          \
+       struct type *stqh_first;        /* first element */                     \
+       struct type **stqh_last;        /* addr of last next element */         \
+}
+
+#define        STAILQ_HEAD_INITIALIZER(head)                                   \
+       { NULL, &(head).stqh_first }
+
+#define        STAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *stqe_next; /* next element */                      \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define        STAILQ_INIT(head) do {                                          \
+       (head)->stqh_first = NULL;                                      \
+       (head)->stqh_last = &(head)->stqh_first;                                \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_HEAD(head, elm, field) do {                       \
+       if (((elm)->field.stqe_next = (head)->stqh_first) == NULL)      \
+               (head)->stqh_last = &(elm)->field.stqe_next;            \
+       (head)->stqh_first = (elm);                                     \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_TAIL(head, elm, field) do {                       \
+       (elm)->field.stqe_next = NULL;                                  \
+       *(head)->stqh_last = (elm);                                     \
+       (head)->stqh_last = &(elm)->field.stqe_next;                    \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_INSERT_AFTER(head, listelm, elm, field) do {             \
+       if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
+               (head)->stqh_last = &(elm)->field.stqe_next;            \
+       (listelm)->field.stqe_next = (elm);                             \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_REMOVE_HEAD(head, field) do {                            \
+       if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \
+               (head)->stqh_last = &(head)->stqh_first;                        \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_REMOVE(head, elm, type, field) do {                      \
+       if ((head)->stqh_first == (elm)) {                              \
+               STAILQ_REMOVE_HEAD((head), field);                      \
+       } else {                                                        \
+               struct type *curelm = (head)->stqh_first;               \
+               while (curelm->field.stqe_next != (elm))                        \
+                       curelm = curelm->field.stqe_next;               \
+               if ((curelm->field.stqe_next =                          \
+                       curelm->field.stqe_next->field.stqe_next) == NULL) \
+                           (head)->stqh_last = &(curelm)->field.stqe_next; \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        STAILQ_FOREACH(var, head, field)                                \
+       for ((var) = ((head)->stqh_first);                              \
+               (var);                                                  \
+               (var) = ((var)->field.stqe_next))
+
+#define        STAILQ_CONCAT(head1, head2) do {                                \
+       if (!STAILQ_EMPTY((head2))) {                                   \
+               *(head1)->stqh_last = (head2)->stqh_first;              \
+               (head1)->stqh_last = (head2)->stqh_last;                \
+               STAILQ_INIT((head2));                                   \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Singly-linked Tail queue access methods.
+ */
+#define        STAILQ_EMPTY(head)      ((head)->stqh_first == NULL)
+#define        STAILQ_FIRST(head)      ((head)->stqh_first)
+#define        STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+
+/*
+ * Simple queue definitions.
+ */
+#define        SIMPLEQ_HEAD(name, type)                                        \
+struct name {                                                          \
+       struct type *sqh_first; /* first element */                     \
+       struct type **sqh_last; /* addr of last next element */         \
+}
+
+#define        SIMPLEQ_HEAD_INITIALIZER(head)                                  \
+       { NULL, &(head).sqh_first }
+
+#define        SIMPLEQ_ENTRY(type)                                             \
+struct {                                                               \
+       struct type *sqe_next;  /* next element */                      \
+}
+
+/*
+ * Simple queue functions.
+ */
+#define        SIMPLEQ_INIT(head) do {                                         \
+       (head)->sqh_first = NULL;                                       \
+       (head)->sqh_last = &(head)->sqh_first;                          \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_HEAD(head, elm, field) do {                      \
+       if (((elm)->field.sqe_next = (head)->sqh_first) == NULL)        \
+               (head)->sqh_last = &(elm)->field.sqe_next;              \
+       (head)->sqh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_TAIL(head, elm, field) do {                      \
+       (elm)->field.sqe_next = NULL;                                   \
+       *(head)->sqh_last = (elm);                                      \
+       (head)->sqh_last = &(elm)->field.sqe_next;                      \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {            \
+       if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
+               (head)->sqh_last = &(elm)->field.sqe_next;              \
+       (listelm)->field.sqe_next = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_REMOVE_HEAD(head, field) do {                           \
+       if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+               (head)->sqh_last = &(head)->sqh_first;                  \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_REMOVE(head, elm, type, field) do {                     \
+       if ((head)->sqh_first == (elm)) {                               \
+               SIMPLEQ_REMOVE_HEAD((head), field);                     \
+       } else {                                                        \
+               struct type *curelm = (head)->sqh_first;                \
+               while (curelm->field.sqe_next != (elm))                 \
+                       curelm = curelm->field.sqe_next;                \
+               if ((curelm->field.sqe_next =                           \
+                       curelm->field.sqe_next->field.sqe_next) == NULL) \
+                           (head)->sqh_last = &(curelm)->field.sqe_next; \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+#define        SIMPLEQ_FOREACH(var, head, field)                               \
+       for ((var) = ((head)->sqh_first);                               \
+               (var);                                                  \
+               (var) = ((var)->field.sqe_next))
+
+/*
+ * Simple queue access methods.
+ */
+#define        SIMPLEQ_EMPTY(head)             ((head)->sqh_first == NULL)
+#define        SIMPLEQ_FIRST(head)             ((head)->sqh_first)
+#define        SIMPLEQ_NEXT(elm, field)        ((elm)->field.sqe_next)
+
+
+/*
+ * Tail queue definitions.
+ */
+#define        _TAILQ_HEAD(name, type, qual)                                   \
+struct name {                                                          \
+       qual type *tqh_first;           /* first element */             \
+       qual type *qual *tqh_last;      /* addr of last next element */ \
+}
+#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,)
+
+#define        TAILQ_HEAD_INITIALIZER(head)                                    \
+       { NULL, &(head).tqh_first }
+
+#define        _TAILQ_ENTRY(type, qual)                                        \
+struct {                                                               \
+       qual type *tqe_next;            /* next element */              \
+       qual type *qual *tqe_prev;      /* address of previous next element */\
+}
+#define TAILQ_ENTRY(type)      _TAILQ_ENTRY(struct type,)
+
+/*
+ * Tail queue functions.
+ */
+#define        TAILQ_INIT(head) do {                                           \
+       (head)->tqh_first = NULL;                                       \
+       (head)->tqh_last = &(head)->tqh_first;                          \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_HEAD(head, elm, field) do {                        \
+       if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        \
+               (head)->tqh_first->field.tqe_prev =                     \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (head)->tqh_first = (elm);                                      \
+       (elm)->field.tqe_prev = &(head)->tqh_first;                     \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_TAIL(head, elm, field) do {                        \
+       (elm)->field.tqe_next = NULL;                                   \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &(elm)->field.tqe_next;                      \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_AFTER(head, listelm, elm, field) do {              \
+       if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (listelm)->field.tqe_next = (elm);                              \
+       (elm)->field.tqe_prev = &(listelm)->field.tqe_next;             \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       (elm)->field.tqe_next = (listelm);                              \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &(elm)->field.tqe_next;             \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_REMOVE(head, elm, field) do {                             \
+       if (((elm)->field.tqe_next) != NULL)                            \
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   (elm)->field.tqe_prev;                              \
+       else                                                            \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+       *(elm)->field.tqe_prev = (elm)->field.tqe_next;                 \
+} while (/*CONSTCOND*/0)
+
+#define        TAILQ_FOREACH(var, head, field)                                 \
+       for ((var) = ((head)->tqh_first);                               \
+               (var);                                                  \
+               (var) = ((var)->field.tqe_next))
+
+#define        TAILQ_FOREACH_REVERSE(var, head, headname, field)               \
+       for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));    \
+               (var);                                                  \
+               (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
+
+#define        TAILQ_CONCAT(head1, head2, field) do {                          \
+       if (!TAILQ_EMPTY(head2)) {                                      \
+               *(head1)->tqh_last = (head2)->tqh_first;                \
+               (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+               (head1)->tqh_last = (head2)->tqh_last;                  \
+               TAILQ_INIT((head2));                                    \
+       }                                                               \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Tail queue access methods.
+ */
+#define        TAILQ_EMPTY(head)               ((head)->tqh_first == NULL)
+#define        TAILQ_FIRST(head)               ((head)->tqh_first)
+#define        TAILQ_NEXT(elm, field)          ((elm)->field.tqe_next)
+
+#define        TAILQ_LAST(head, headname) \
+       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+#define        TAILQ_PREV(elm, headname, field) \
+       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+
+/*
+ * Circular queue definitions.
+ */
+#define        CIRCLEQ_HEAD(name, type)                                        \
+struct name {                                                          \
+       struct type *cqh_first;         /* first element */             \
+       struct type *cqh_last;          /* last element */              \
+}
+
+#define        CIRCLEQ_HEAD_INITIALIZER(head)                                  \
+       { (void *)&head, (void *)&head }
+
+#define        CIRCLEQ_ENTRY(type)                                             \
+struct {                                                               \
+       struct type *cqe_next;          /* next element */              \
+       struct type *cqe_prev;          /* previous element */          \
+}
+
+/*
+ * Circular queue functions.
+ */
+#define        CIRCLEQ_INIT(head) do {                                         \
+       (head)->cqh_first = (void *)(head);                             \
+       (head)->cqh_last = (void *)(head);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {            \
+       (elm)->field.cqe_next = (listelm)->field.cqe_next;              \
+       (elm)->field.cqe_prev = (listelm);                              \
+       if ((listelm)->field.cqe_next == (void *)(head))                \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (listelm)->field.cqe_next->field.cqe_prev = (elm);      \
+       (listelm)->field.cqe_next = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {           \
+       (elm)->field.cqe_next = (listelm);                              \
+       (elm)->field.cqe_prev = (listelm)->field.cqe_prev;              \
+       if ((listelm)->field.cqe_prev == (void *)(head))                \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (listelm)->field.cqe_prev->field.cqe_next = (elm);      \
+       (listelm)->field.cqe_prev = (elm);                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_HEAD(head, elm, field) do {                      \
+       (elm)->field.cqe_next = (head)->cqh_first;                      \
+       (elm)->field.cqe_prev = (void *)(head);                         \
+       if ((head)->cqh_last == (void *)(head))                         \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (head)->cqh_first->field.cqe_prev = (elm);              \
+       (head)->cqh_first = (elm);                                      \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_INSERT_TAIL(head, elm, field) do {                      \
+       (elm)->field.cqe_next = (void *)(head);                         \
+       (elm)->field.cqe_prev = (head)->cqh_last;                       \
+       if ((head)->cqh_first == (void *)(head))                        \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (head)->cqh_last->field.cqe_next = (elm);               \
+       (head)->cqh_last = (elm);                                       \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_REMOVE(head, elm, field) do {                           \
+       if ((elm)->field.cqe_next == (void *)(head))                    \
+               (head)->cqh_last = (elm)->field.cqe_prev;               \
+       else                                                            \
+               (elm)->field.cqe_next->field.cqe_prev =                 \
+                   (elm)->field.cqe_prev;                              \
+       if ((elm)->field.cqe_prev == (void *)(head))                    \
+               (head)->cqh_first = (elm)->field.cqe_next;              \
+       else                                                            \
+               (elm)->field.cqe_prev->field.cqe_next =                 \
+                   (elm)->field.cqe_next;                              \
+} while (/*CONSTCOND*/0)
+
+#define        CIRCLEQ_FOREACH(var, head, field)                               \
+       for ((var) = ((head)->cqh_first);                               \
+               (var) != (const void *)(head);                          \
+               (var) = ((var)->field.cqe_next))
+
+#define        CIRCLEQ_FOREACH_REVERSE(var, head, field)                       \
+       for ((var) = ((head)->cqh_last);                                \
+               (var) != (const void *)(head);                          \
+               (var) = ((var)->field.cqe_prev))
+
+/*
+ * Circular queue access methods.
+ */
+#define        CIRCLEQ_EMPTY(head)             ((head)->cqh_first == (void *)(head))
+#define        CIRCLEQ_FIRST(head)             ((head)->cqh_first)
+#define        CIRCLEQ_LAST(head)              ((head)->cqh_last)
+#define        CIRCLEQ_NEXT(elm, field)        ((elm)->field.cqe_next)
+#define        CIRCLEQ_PREV(elm, field)        ((elm)->field.cqe_prev)
+
+#define CIRCLEQ_LOOP_NEXT(head, elm, field)                            \
+       (((elm)->field.cqe_next == (void *)(head))                      \
+           ? ((head)->cqh_first)                                       \
+           : (elm->field.cqe_next))
+#define CIRCLEQ_LOOP_PREV(head, elm, field)                            \
+       (((elm)->field.cqe_prev == (void *)(head))                      \
+           ? ((head)->cqh_last)                                        \
+           : (elm->field.cqe_prev))
+
+#endif /* sys/queue.h */
diff --git a/lib/libdss-include/sys/quota.h b/lib/libdss-include/sys/quota.h
new file mode 100644 (file)
index 0000000..5aa0ec0
--- /dev/null
@@ -0,0 +1,225 @@
+/* This just represents the non-kernel parts of <linux/quota.h>.
+ *
+ * here's the corresponding copyright:
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Robert Elz at The University of Melbourne.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_QUOTA_H
+#define _SYS_QUOTA_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+/*
+ * Select between different incompatible quota versions.
+ * Default to the version used by Linux kernel version 2.4.22
+ * or later.  */
+#ifndef _LINUX_QUOTA_VERSION
+# define _LINUX_QUOTA_VERSION 2
+#endif
+
+/*
+ * Convert diskblocks to blocks and the other way around.
+ * currently only to fool the BSD source. :-)
+ */
+#define dbtob(num) ((num) << 10)
+#define btodb(num) ((num) >> 10)
+
+/*
+ * Convert count of filesystem blocks to diskquota blocks, meant
+ * for filesystems where i_blksize != BLOCK_SIZE
+ */
+#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
+
+/*
+ * Definitions for disk quotas imposed on the average user
+ * (big brother finally hits Linux).
+ *
+ * The following constants define the amount of time given a user
+ * before the soft limits are treated as hard limits (usually resulting
+ * in an allocation failure). The timer is started when the user crosses
+ * their soft limit, it is reset when they go below their soft limit.
+ */
+#define MAX_IQ_TIME  604800    /* (7*24*60*60) 1 week */
+#define MAX_DQ_TIME  604800    /* (7*24*60*60) 1 week */
+
+#define MAXQUOTAS 2
+#define USRQUOTA  0            /* element used for user quotas */
+#define GRPQUOTA  1            /* element used for group quotas */
+
+/*
+ * Definitions for the default names of the quotas files.
+ */
+#define INITQFNAMES { \
+   "user",      /* USRQUOTA */ \
+   "group",   /* GRPQUOTA */ \
+   "undefined", \
+};
+
+#define QUOTAFILENAME "quota"
+#define QUOTAGROUP "staff"
+
+#define NR_DQHASH 43          /* Just an arbitrary number any suggestions ? */
+#define NR_DQUOTS 256         /* Number of quotas active at one time */
+
+/*
+ * Command definitions for the 'quotactl' system call.
+ * The commands are broken into a main command defined below
+ * and a subcommand that is used to convey the type of
+ * quota that is being manipulated (see above).
+ */
+#define SUBCMDMASK  0x00ff
+#define SUBCMDSHIFT 8
+#define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
+
+#if _LINUX_QUOTA_VERSION < 2
+# define Q_QUOTAON  0x0100     /* enable quotas */
+# define Q_QUOTAOFF 0x0200     /* disable quotas */
+# define Q_GETQUOTA 0x0300     /* get limits and usage */
+# define Q_SETQUOTA 0x0400     /* set limits and usage */
+# define Q_SETUSE   0x0500     /* set usage */
+# define Q_SYNC     0x0600     /* sync disk copy of a filesystems quotas */
+# define Q_SETQLIM  0x0700     /* set limits */
+# define Q_GETSTATS 0x0800     /* get collected stats */
+# define Q_RSQUASH  0x1000     /* set root_squash option */
+#else
+# define Q_SYNC     0x800001   /* sync disk copy of a filesystems quotas */
+# define Q_QUOTAON  0x800002   /* turn quotas on */
+# define Q_QUOTAOFF 0x800003   /* turn quotas off */
+# define Q_GETFMT   0x800004   /* get quota format used on given filesystem */
+# define Q_GETINFO  0x800005   /* get information about quota files */
+# define Q_SETINFO  0x800006   /* set information about quota files */
+# define Q_GETQUOTA 0x800007   /* get user quota structure */
+# define Q_SETQUOTA 0x800008   /* set user quota structure */
+#endif
+
+/*
+ * The following structure defines the format of the disk quota file
+ * (as it appears on disk) - the file is an array of these structures
+ * indexed by user or group number.
+ */
+#if _LINUX_QUOTA_VERSION < 2
+struct dqblk
+  {
+    u_int32_t dqb_bhardlimit;  /* absolute limit on disk blks alloc */
+    u_int32_t dqb_bsoftlimit;  /* preferred limit on disk blks */
+    u_int32_t dqb_curblocks;   /* current block count */
+    u_int32_t dqb_ihardlimit;  /* maximum # allocated inodes */
+    u_int32_t dqb_isoftlimit;  /* preferred inode limit */
+    u_int32_t dqb_curinodes;   /* current # allocated inodes */
+    time_t dqb_btime;          /* time limit for excessive disk use */
+    time_t dqb_itime;          /* time limit for excessive files */
+  };
+#else
+
+/* Flags that indicate which fields in dqblk structure are valid.  */
+#define QIF_BLIMITS    1
+#define QIF_SPACE      2
+#define QIF_ILIMITS    4
+#define QIF_INODES     8
+#define QIF_BTIME      16
+#define QIF_ITIME      32
+#define QIF_LIMITS     (QIF_BLIMITS | QIF_ILIMITS)
+#define QIF_USAGE      (QIF_SPACE | QIF_INODES)
+#define QIF_TIMES      (QIF_BTIME | QIF_ITIME)
+#define QIF_ALL                (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
+
+struct dqblk
+  {
+    u_int64_t dqb_bhardlimit;  /* absolute limit on disk quota blocks alloc */
+    u_int64_t dqb_bsoftlimit;  /* preferred limit on disk quota blocks */
+    u_int64_t dqb_curspace;    /* current quota block count */
+    u_int64_t dqb_ihardlimit;  /* maximum # allocated inodes */
+    u_int64_t dqb_isoftlimit;  /* preferred inode limit */
+    u_int64_t dqb_curinodes;   /* current # allocated inodes */
+    u_int64_t dqb_btime;       /* time limit for excessive disk use */
+    u_int64_t dqb_itime;       /* time limit for excessive files */
+    u_int32_t dqb_valid;       /* bitmask of QIF_* constants */
+  };
+#endif
+
+/*
+ * Shorthand notation.
+ */
+#define        dq_bhardlimit   dq_dqb.dqb_bhardlimit
+#define        dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
+#if _LINUX_QUOTA_VERSION < 2
+# define dq_curblocks  dq_dqb.dqb_curblocks
+#else
+# define dq_curspace   dq_dqb.dqb_curspace
+# define dq_valid      dq_dqb.dqb_valid
+#endif
+#define        dq_ihardlimit   dq_dqb.dqb_ihardlimit
+#define        dq_isoftlimit   dq_dqb.dqb_isoftlimit
+#define        dq_curinodes    dq_dqb.dqb_curinodes
+#define        dq_btime        dq_dqb.dqb_btime
+#define        dq_itime        dq_dqb.dqb_itime
+
+#define dqoff(UID)      ((loff_t)((UID) * sizeof (struct dqblk)))
+
+#if _LINUX_QUOTA_VERSION < 2
+struct dqstats
+  {
+    u_int32_t lookups;
+    u_int32_t drops;
+    u_int32_t reads;
+    u_int32_t writes;
+    u_int32_t cache_hits;
+    u_int32_t pages_allocated;
+    u_int32_t allocated_dquots;
+    u_int32_t free_dquots;
+    u_int32_t syncs;
+  };
+#else
+
+/* Flags that indicate which fields in dqinfo structure are valid.  */
+# define IIF_BGRACE    1
+# define IIF_IGRACE    2
+# define IIF_FLAGS     4
+# define IIF_ALL       (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
+
+struct dqinfo
+  {
+    u_int64_t dqi_bgrace;
+    u_int64_t dqi_igrace;
+    u_int32_t dqi_flags;
+    u_int32_t dqi_valid;
+  };
+#endif
+
+__BEGIN_DECLS
+
+extern int quotactl (int __cmd, const char *__special, int __id,
+                    caddr_t __addr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/quota.h */
diff --git a/lib/libdss-include/sys/raw.h b/lib/libdss-include/sys/raw.h
new file mode 100644 (file)
index 0000000..bd7266d
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_RAW_H
+#define _SYS_RAW_H     1
+
+#include <stdint.h>
+#include <sys/ioctl.h>
+
+/* The major device number for raw devices.  */
+#define RAW_MAJOR      162
+
+/* `ioctl' commands for raw devices.  */
+#define RAW_SETBIND     _IO(0xac, 0)
+#define RAW_GETBIND     _IO(0xac, 1)
+
+struct raw_config_request
+{
+  int raw_minor;
+  uint64_t block_major;
+  uint64_t block_minor;
+};
+
+#endif /* sys/raw.h */
diff --git a/lib/libdss-include/sys/reboot.h b/lib/libdss-include/sys/reboot.h
new file mode 100644 (file)
index 0000000..df1076f
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file should define RB_* macros to be used as flag
+   bits in the argument to the `reboot' system call.  */
+
+#ifndef _SYS_REBOOT_H
+#define _SYS_REBOOT_H  1
+
+#include <features.h>
+
+/* Perform a hard reset now.  */
+#define RB_AUTOBOOT    0x01234567
+
+/* Halt the system.  */
+#define RB_HALT_SYSTEM 0xcdef0123
+
+/* Enable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_ENABLE_CAD  0x89abcdef
+
+/* Disable reboot using Ctrl-Alt-Delete keystroke.  */
+#define RB_DISABLE_CAD 0
+
+/* Stop system and switch power off if possible.  */
+#define RB_POWER_OFF   0x4321fedc
+
+/* Suspend system using software suspend.  */
+#define RB_SW_SUSPEND  0xd000fce2
+
+/* Reboot system into new kernel.  */
+#define RB_KEXEC       0x45584543
+
+__BEGIN_DECLS
+
+/* Reboot or halt the system.  */
+extern int reboot (int __howto) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_REBOOT_H */
diff --git a/lib/libdss-include/sys/resource.h b/lib/libdss-include/sys/resource.h
new file mode 100644 (file)
index 0000000..dfef7ac
--- /dev/null
@@ -0,0 +1,102 @@
+/* Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_RESOURCE_H
+#define        _SYS_RESOURCE_H 1
+
+#include <features.h>
+
+/* Get the system-dependent definitions of structures and bit values.  */
+#include <bits/resource.h>
+
+#ifndef __id_t_defined
+typedef __id_t id_t;
+# define __id_t_defined
+#endif
+
+__BEGIN_DECLS
+
+/* The X/Open standard defines that all the functions below must use
+   `int' as the type for the first argument.  When we are compiling with
+   GNU extensions we change this slightly to provide better error
+   checking.  */
+#if defined __USE_GNU && !defined __cplusplus
+typedef enum __rlimit_resource __rlimit_resource_t;
+typedef enum __rusage_who __rusage_who_t;
+typedef enum __priority_which __priority_which_t;
+#else
+typedef int __rlimit_resource_t;
+typedef int __rusage_who_t;
+typedef int __priority_which_t;
+#endif
+
+/* Put the soft and hard limits for RESOURCE in *RLIMITS.
+   Returns 0 if successful, -1 if not (and sets errno).  */
+#ifndef __USE_FILE_OFFSET64
+extern int getrlimit (__rlimit_resource_t __resource,
+                     struct rlimit *__rlimits) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (getrlimit, (__rlimit_resource_t __resource,
+                                      struct rlimit *__rlimits), getrlimit64);
+# else
+#  define getrlimit getrlimit64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int getrlimit64 (__rlimit_resource_t __resource,
+                       struct rlimit64 *__rlimits) __THROW;
+#endif
+
+/* Set the soft and hard limits for RESOURCE to *RLIMITS.
+   Only the super-user can increase hard limits.
+   Return 0 if successful, -1 if not (and sets errno).  */
+#ifndef __USE_FILE_OFFSET64
+extern int setrlimit (__rlimit_resource_t __resource,
+                     const struct rlimit *__rlimits) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (setrlimit, (__rlimit_resource_t __resource,
+                                      const struct rlimit *__rlimits),
+                          setrlimit64);
+# else
+#  define setrlimit setrlimit64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int setrlimit64 (__rlimit_resource_t __resource,
+                       const struct rlimit64 *__rlimits) __THROW;
+#endif
+
+/* Return resource usage information on process indicated by WHO
+   and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
+extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
+
+/* Return the highest priority of any process specified by WHICH and WHO
+   (see above); if WHO is zero, the current process, process group, or user
+   (as specified by WHO) is used.  A lower priority number means higher
+   priority.  Priorities range from PRIO_MIN to PRIO_MAX (above).  */
+extern int getpriority (__priority_which_t __which, id_t __who) __THROW;
+
+/* Set the priority of all processes specified by WHICH and WHO (see above)
+   to PRIO.  Returns 0 on success, -1 on errors.  */
+extern int setpriority (__priority_which_t __which, id_t __who, int __prio)
+     __THROW;
+
+__END_DECLS
+
+#endif /* sys/resource.h  */
diff --git a/lib/libdss-include/sys/select.h b/lib/libdss-include/sys/select.h
new file mode 100644 (file)
index 0000000..b852dac
--- /dev/null
@@ -0,0 +1,133 @@
+/* `fd_set' type and related macros, and `select'/`pselect' declarations.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*     POSIX 1003.1g: 6.2 Select from File Descriptor Sets <sys/select.h>  */
+
+#ifndef _SYS_SELECT_H
+#define _SYS_SELECT_H  1
+
+#include <features.h>
+
+/* Get definition of needed basic types.  */
+#include <bits/types.h>
+
+/* Get __FD_* definitions.  */
+#include <bits/select.h>
+
+/* Get __sigset_t.  */
+#include <bits/sigset.h>
+
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
+/* Get definition of timer specification structures.  */
+#define __need_time_t
+#define __need_timespec
+#include <time.h>
+#define __need_timeval
+#include <bits/time.h>
+
+#ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+# define __suseconds_t_defined
+#endif
+
+
+/* The fd_set member is required to be an array of longs.  */
+typedef long int __fd_mask;
+
+/* Some versions of <linux/posix_types.h> define this macros.  */
+#undef __NFDBITS
+/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
+#define __NFDBITS      (8 * (int) sizeof (__fd_mask))
+#define        __FD_ELT(d)     ((d) / __NFDBITS)
+#define        __FD_MASK(d)    ((__fd_mask) (1UL << ((d) % __NFDBITS)))
+
+/* fd_set for select and pselect.  */
+typedef struct
+  {
+    /* XPG4.2 requires this member name.  Otherwise avoid the name
+       from the global namespace.  */
+#ifdef __USE_XOPEN
+    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->fds_bits)
+#else
+    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->__fds_bits)
+#endif
+  } fd_set;
+
+/* Maximum number of file descriptors in `fd_set'.  */
+#define        FD_SETSIZE              __FD_SETSIZE
+
+#ifdef __USE_MISC
+/* Sometimes the fd_set member is assumed to have this type.  */
+typedef __fd_mask fd_mask;
+
+/* Number of bits per word of `fd_set' (some code assumes this is 32).  */
+# define NFDBITS               __NFDBITS
+#endif
+
+
+/* Access macros for `fd_set'.  */
+#define        FD_SET(fd, fdsetp)      __FD_SET (fd, fdsetp)
+#define        FD_CLR(fd, fdsetp)      __FD_CLR (fd, fdsetp)
+#define        FD_ISSET(fd, fdsetp)    __FD_ISSET (fd, fdsetp)
+#define        FD_ZERO(fdsetp)         __FD_ZERO (fdsetp)
+
+
+__BEGIN_DECLS
+
+/* Check the first NFDS descriptors each in READFDS (if not NULL) for read
+   readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
+   (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
+   after waiting the interval specified therein.  Returns the number of ready
+   descriptors, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int select (int __nfds, fd_set *__restrict __readfds,
+                  fd_set *__restrict __writefds,
+                  fd_set *__restrict __exceptfds,
+                  struct timeval *__restrict __timeout);
+
+#ifdef __USE_XOPEN2K
+/* Same as above only that the TIMEOUT value is given with higher
+   resolution and a sigmask which is been set temporarily.  This version
+   should be used.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+                   fd_set *__restrict __writefds,
+                   fd_set *__restrict __exceptfds,
+                   const struct timespec *__restrict __timeout,
+                   const __sigset_t *__restrict __sigmask);
+#endif
+
+
+/* Define some inlines helping to catch common problems.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__
+# include <bits/select2.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/select.h */
diff --git a/lib/libdss-include/sys/sem.h b/lib/libdss-include/sys/sem.h
new file mode 100644 (file)
index 0000000..1b32092
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SEM_H
+#define _SYS_SEM_H     1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct semid_ds' and more.  */
+#include <bits/sem.h>
+
+#ifdef __USE_GNU
+# define __need_timespec
+# include <time.h>
+#endif
+
+/* The following System V style IPC functions implement a semaphore
+   handling.  The definition is found in XPG2.  */
+
+/* Structure used for argument to `semop' to describe operations.  */
+struct sembuf
+{
+  unsigned short int sem_num;  /* semaphore number */
+  short int sem_op;            /* semaphore operation */
+  short int sem_flg;           /* operation flag */
+};
+
+
+__BEGIN_DECLS
+
+/* Semaphore control operation.  */
+extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
+
+/* Get semaphore.  */
+extern int semget (key_t __key, int __nsems, int __semflg) __THROW;
+
+/* Operate on semaphore.  */
+extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
+
+#ifdef __USE_GNU
+/* Operate on semaphore with timeout.  */
+extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
+                      const struct timespec *__timeout) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sys/sem.h */
diff --git a/lib/libdss-include/sys/sendfile.h b/lib/libdss-include/sys/sendfile.h
new file mode 100644 (file)
index 0000000..d4c14ba
--- /dev/null
@@ -0,0 +1,51 @@
+/* sendfile -- copy data directly from one file descriptor to another
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SENDFILE_H
+#define _SYS_SENDFILE_H        1
+
+#include <features.h>
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* Send up to COUNT bytes from file associated with IN_FD starting at
+   *OFFSET to descriptor OUT_FD.  Set *OFFSET to the IN_FD's file position
+   following the read bytes.  If OFFSET is a null pointer, use the normal
+   file position instead.  Return the number of written bytes, or -1 in
+   case of error.  */
+#ifndef __USE_FILE_OFFSET64
+extern ssize_t sendfile (int __out_fd, int __in_fd, off_t *__offset,
+                        size_t __count) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern ssize_t __REDIRECT_NTH (sendfile,
+                              (int __out_fd, int __in_fd, __off64_t *__offset,
+                               size_t __count), sendfile64);
+# else
+#  define sendfile sendfile64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern ssize_t sendfile64 (int __out_fd, int __in_fd, __off64_t *__offset,
+                          size_t __count) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* sys/sendfile.h */
diff --git a/lib/libdss-include/sys/shm.h b/lib/libdss-include/sys/shm.h
new file mode 100644 (file)
index 0000000..df263dc
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SHM_H
+#define _SYS_SHM_H     1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Get common definition of System V style IPC.  */
+#include <sys/ipc.h>
+
+/* Get system dependent definition of `struct shmid_ds' and more.  */
+#include <bits/shm.h>
+
+/* Define types required by the standard.  */
+#define __need_time_t
+#include <time.h>
+
+#ifdef __USE_XOPEN
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif /* X/Open */
+
+
+__BEGIN_DECLS
+
+/* The following System V style IPC functions implement a shared memory
+   facility.  The definition is found in XPG4.2.  */
+
+/* Shared memory control operation.  */
+extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
+
+/* Get shared memory segment.  */
+extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW;
+
+/* Attach shared memory segment.  */
+extern void *shmat (int __shmid, const void *__shmaddr, int __shmflg)
+     __THROW;
+
+/* Detach shared memory segment.  */
+extern int shmdt (const void *__shmaddr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/shm.h */
diff --git a/lib/libdss-include/sys/signal.h b/lib/libdss-include/sys/signal.h
new file mode 100644 (file)
index 0000000..2e602da
--- /dev/null
@@ -0,0 +1 @@
+#include <signal.h>
diff --git a/lib/libdss-include/sys/signalfd.h b/lib/libdss-include/sys/signalfd.h
new file mode 100644 (file)
index 0000000..6f75bc0
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 2007-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SIGNALFD_H
+#define        _SYS_SIGNALFD_H 1
+
+#define __need_sigset_t
+#include <signal.h>
+#include <stdint.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/signalfd.h>
+
+struct signalfd_siginfo
+{
+  uint32_t ssi_signo;
+  int32_t ssi_errno;
+  int32_t ssi_code;
+  uint32_t ssi_pid;
+  uint32_t ssi_uid;
+  int32_t ssi_fd;
+  uint32_t ssi_tid;
+  uint32_t ssi_band;
+  uint32_t ssi_overrun;
+  uint32_t ssi_trapno;
+  int32_t ssi_status;
+  int32_t ssi_int;
+  uint64_t ssi_ptr;
+  uint64_t ssi_utime;
+  uint64_t ssi_stime;
+  uint64_t ssi_addr;
+  uint8_t __pad[48];
+};
+
+__BEGIN_DECLS
+
+/* Request notification for delivery of signals in MASK to be
+   performed using descriptor FD.*/
+extern int signalfd (int __fd, const sigset_t *__mask, int __flags)
+  __THROW __nonnull ((2));
+
+__END_DECLS
+
+#endif /* sys/signalfd.h */
diff --git a/lib/libdss-include/sys/socket.h b/lib/libdss-include/sys/socket.h
new file mode 100644 (file)
index 0000000..c9f0f50
--- /dev/null
@@ -0,0 +1,285 @@
+/* Declarations of socket constants, types, and functions.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SOCKET_H
+#define        _SYS_SOCKET_H   1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <sys/uio.h>
+#define        __need_size_t
+#include <stddef.h>
+#ifdef __USE_GNU
+/* Get the __sigset_t definition.  */
+# include <bits/sigset.h>
+#endif
+
+
+/* This operating system-specific header file defines the SOCK_*, PF_*,
+   AF_*, MSG_*, SOL_*, and SO_* constants, and the `struct sockaddr',
+   `struct msghdr', and `struct linger' types.  */
+#include <bits/socket.h>
+
+#ifdef __USE_MISC
+/* This is the 4.3 BSD `struct sockaddr' format, which is used as wire
+   format in the grotty old 4.3 `talk' protocol.  */
+struct osockaddr
+  {
+    unsigned short int sa_family;
+    unsigned char sa_data[14];
+  };
+#endif
+
+/* The following constants should be used for the second parameter of
+   `shutdown'.  */
+enum
+{
+  SHUT_RD = 0,         /* No more receptions.  */
+#define SHUT_RD                SHUT_RD
+  SHUT_WR,             /* No more transmissions.  */
+#define SHUT_WR                SHUT_WR
+  SHUT_RDWR            /* No more receptions or transmissions.  */
+#define SHUT_RDWR      SHUT_RDWR
+};
+
+/* This is the type we use for generic socket address arguments.
+
+   With GCC 2.7 and later, the funky union causes redeclarations or
+   uses with any of the listed types to be allowed without complaint.
+   G++ 2.7 does not support transparent unions so there we want the
+   old-style declaration, too.  */
+#if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU
+# define __SOCKADDR_ARG                struct sockaddr *__restrict
+# define __CONST_SOCKADDR_ARG  const struct sockaddr *
+#else
+/* Add more `struct sockaddr_AF' types here as necessary.
+   These are all the ones I found on NetBSD and Linux.  */
+# define __SOCKADDR_ALLTYPES \
+  __SOCKADDR_ONETYPE (sockaddr) \
+  __SOCKADDR_ONETYPE (sockaddr_at) \
+  __SOCKADDR_ONETYPE (sockaddr_ax25) \
+  __SOCKADDR_ONETYPE (sockaddr_dl) \
+  __SOCKADDR_ONETYPE (sockaddr_eon) \
+  __SOCKADDR_ONETYPE (sockaddr_in) \
+  __SOCKADDR_ONETYPE (sockaddr_in6) \
+  __SOCKADDR_ONETYPE (sockaddr_inarp) \
+  __SOCKADDR_ONETYPE (sockaddr_ipx) \
+  __SOCKADDR_ONETYPE (sockaddr_iso) \
+  __SOCKADDR_ONETYPE (sockaddr_ns) \
+  __SOCKADDR_ONETYPE (sockaddr_un) \
+  __SOCKADDR_ONETYPE (sockaddr_x25)
+
+# define __SOCKADDR_ONETYPE(type) struct type *__restrict __##type##__;
+typedef union { __SOCKADDR_ALLTYPES
+             } __SOCKADDR_ARG __attribute__ ((__transparent_union__));
+# undef __SOCKADDR_ONETYPE
+# define __SOCKADDR_ONETYPE(type) const struct type *__restrict __##type##__;
+typedef union { __SOCKADDR_ALLTYPES
+             } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
+# undef __SOCKADDR_ONETYPE
+#endif
+
+#ifdef __USE_GNU
+/* For `recvmmsg' and `sendmmsg'.  */
+struct mmsghdr
+  {
+    struct msghdr msg_hdr;     /* Actual message header.  */
+    unsigned int msg_len;      /* Number of received or sent bytes for the
+                                  entry.  */
+  };
+#endif
+
+
+/* Create a new socket of type TYPE in domain DOMAIN, using
+   protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.
+   Returns a file descriptor for the new socket, or -1 for errors.  */
+extern int socket (int __domain, int __type, int __protocol) __THROW;
+
+/* Create two new sockets, of type TYPE in domain DOMAIN and using
+   protocol PROTOCOL, which are connected to each other, and put file
+   descriptors for them in FDS[0] and FDS[1].  If PROTOCOL is zero,
+   one will be chosen automatically.  Returns 0 on success, -1 for errors.  */
+extern int socketpair (int __domain, int __type, int __protocol,
+                      int __fds[2]) __THROW;
+
+/* Give the socket FD the local address ADDR (which is LEN bytes long).  */
+extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
+     __THROW;
+
+/* Put the local address of FD into *ADDR and its length in *LEN.  */
+extern int getsockname (int __fd, __SOCKADDR_ARG __addr,
+                       socklen_t *__restrict __len) __THROW;
+
+/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
+   For connectionless socket types, just set the default address to send to
+   and the only address from which to accept transmissions.
+   Return 0 on success, -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
+
+/* Put the address of the peer connected to socket FD into *ADDR
+   (which is *LEN bytes long), and its actual length into *LEN.  */
+extern int getpeername (int __fd, __SOCKADDR_ARG __addr,
+                       socklen_t *__restrict __len) __THROW;
+
+
+/* Send N bytes of BUF to socket FD.  Returns the number sent or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
+
+/* Read N bytes into BUF from socket FD.
+   Returns the number read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
+
+/* Send N bytes of BUF on socket FD to peer at address ADDR (which is
+   ADDR_LEN bytes long).  Returns the number sent, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
+                      int __flags, __CONST_SOCKADDR_ARG __addr,
+                      socklen_t __addr_len);
+
+/* Read N bytes into BUF through socket FD.
+   If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
+   the sender, and store the actual size of the address in *ADDR_LEN.
+   Returns the number of bytes read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
+                        int __flags, __SOCKADDR_ARG __addr,
+                        socklen_t *__restrict __addr_len);
+
+
+/* Send a message described MESSAGE on socket FD.
+   Returns the number of bytes sent, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
+                       int __flags);
+
+#ifdef __USE_GNU
+/* Send a VLEN messages as described by VMESSAGES to socket FD.
+   Returns the number of datagrams successfully written or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
+                    unsigned int __vlen, int __flags);
+#endif
+
+/* Receive a message as described by MESSAGE from socket FD.
+   Returns the number of bytes read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
+
+#ifdef __USE_GNU
+/* Receive up to VLEN messages as described by VMESSAGES from socket FD.
+   Returns the number of messages received or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
+                    unsigned int __vlen, int __flags,
+                    struct timespec *__tmo);
+#endif
+
+
+/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
+   into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
+   actual length.  Returns 0 on success, -1 for errors.  */
+extern int getsockopt (int __fd, int __level, int __optname,
+                      void *__restrict __optval,
+                      socklen_t *__restrict __optlen) __THROW;
+
+/* Set socket FD's option OPTNAME at protocol level LEVEL
+   to *OPTVAL (which is OPTLEN bytes long).
+   Returns 0 on success, -1 for errors.  */
+extern int setsockopt (int __fd, int __level, int __optname,
+                      const void *__optval, socklen_t __optlen) __THROW;
+
+
+/* Prepare to accept connections on socket FD.
+   N connection requests will be queued before further requests are refused.
+   Returns 0 on success, -1 for errors.  */
+extern int listen (int __fd, int __n) __THROW;
+
+/* Await a connection on socket FD.
+   When a connection arrives, open a new socket to communicate with it,
+   set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
+   peer and *ADDR_LEN to the address's actual length, and return the
+   new socket's descriptor, or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int accept (int __fd, __SOCKADDR_ARG __addr,
+                  socklen_t *__restrict __addr_len);
+
+#ifdef __USE_GNU
+/* Similar to 'accept' but takes an additional parameter to specify flags.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int accept4 (int __fd, __SOCKADDR_ARG __addr,
+                   socklen_t *__restrict __addr_len, int __flags);
+#endif
+
+/* Shut down all or part of the connection open on socket FD.
+   HOW determines what to shut down:
+     SHUT_RD   = No more receptions;
+     SHUT_WR   = No more transmissions;
+     SHUT_RDWR = No more receptions or transmissions.
+   Returns 0 on success, -1 for errors.  */
+extern int shutdown (int __fd, int __how) __THROW;
+
+
+#ifdef __USE_XOPEN2K
+/* Determine wheter socket is at a out-of-band mark.  */
+extern int sockatmark (int __fd) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* FDTYPE is S_IFSOCK or another S_IF* macro defined in <sys/stat.h>;
+   returns 1 if FD is open on an object of the indicated type, 0 if not,
+   or -1 for errors (setting errno).  */
+extern int isfdtype (int __fd, int __fdtype) __THROW;
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/socket2.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/socket.h */
diff --git a/lib/libdss-include/sys/socketvar.h b/lib/libdss-include/sys/socketvar.h
new file mode 100644 (file)
index 0000000..b177158
--- /dev/null
@@ -0,0 +1,3 @@
+/* This header is used on many systems but for GNU we have everything
+   already defined in the standard header.  */
+#include <sys/socket.h>
diff --git a/lib/libdss-include/sys/soundcard.h b/lib/libdss-include/sys/soundcard.h
new file mode 100644 (file)
index 0000000..fade986
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/soundcard.h>
diff --git a/lib/libdss-include/sys/stat.h b/lib/libdss-include/sys/stat.h
new file mode 100644 (file)
index 0000000..bf63882
--- /dev/null
@@ -0,0 +1,536 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.6 File Characteristics        <sys/stat.h>
+ */
+
+#ifndef        _SYS_STAT_H
+#define        _SYS_STAT_H     1
+
+#include <features.h>
+
+#include <bits/types.h>                /* For __mode_t and __dev_t.  */
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K || defined __USE_ATFILE
+# if defined __USE_XOPEN || defined __USE_XOPEN2K
+#  define __need_time_t
+# endif
+# ifdef __USE_ATFILE
+#  define __need_timespec
+# endif
+# include <time.h>             /* For time_t resp. timespec.  */
+#endif
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __dev_t_defined
+typedef __dev_t dev_t;
+#  define __dev_t_defined
+# endif
+
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __ino_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+#  else
+typedef __ino64_t ino_t;
+#  endif
+#  define __ino_t_defined
+# endif
+
+# ifndef __mode_t_defined
+typedef __mode_t mode_t;
+#  define __mode_t_defined
+# endif
+
+# ifndef __nlink_t_defined
+typedef __nlink_t nlink_t;
+#  define __nlink_t_defined
+# endif
+
+# ifndef __off_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
+#  define __off_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+#endif /* X/Open */
+
+#ifdef __USE_UNIX98
+# ifndef __blkcnt_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __blkcnt_t blkcnt_t;
+#  else
+typedef __blkcnt64_t blkcnt_t;
+#  endif
+#  define __blkcnt_t_defined
+# endif
+
+# ifndef __blksize_t_defined
+typedef __blksize_t blksize_t;
+#  define __blksize_t_defined
+# endif
+#endif /* Unix98 */
+
+__BEGIN_DECLS
+
+#include <bits/stat.h>
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# define S_IFMT                __S_IFMT
+# define S_IFDIR       __S_IFDIR
+# define S_IFCHR       __S_IFCHR
+# define S_IFBLK       __S_IFBLK
+# define S_IFREG       __S_IFREG
+# ifdef __S_IFIFO
+#  define S_IFIFO      __S_IFIFO
+# endif
+# ifdef __S_IFLNK
+#  define S_IFLNK      __S_IFLNK
+# endif
+# if (defined __USE_MISC || defined __USE_UNIX98) \
+     && defined __S_IFSOCK
+#  define S_IFSOCK     __S_IFSOCK
+# endif
+#endif
+
+/* Test macros for file types. */
+
+#define        __S_ISTYPE(mode, mask)  (((mode) & __S_IFMT) == (mask))
+
+#define        S_ISDIR(mode)    __S_ISTYPE((mode), __S_IFDIR)
+#define        S_ISCHR(mode)    __S_ISTYPE((mode), __S_IFCHR)
+#define        S_ISBLK(mode)    __S_ISTYPE((mode), __S_IFBLK)
+#define        S_ISREG(mode)    __S_ISTYPE((mode), __S_IFREG)
+#ifdef __S_IFIFO
+# define S_ISFIFO(mode)         __S_ISTYPE((mode), __S_IFIFO)
+#endif
+#ifdef __S_IFLNK
+# define S_ISLNK(mode)  __S_ISTYPE((mode), __S_IFLNK)
+#endif
+
+#if defined __USE_MISC && !defined __S_IFLNK
+# define S_ISLNK(mode)  0
+#endif
+
+#if (defined __USE_UNIX98 || defined __USE_XOPEN2K) \
+    && defined __S_IFSOCK
+# define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
+#elif defined __USE_XOPEN2K
+# define S_ISSOCK(mode) 0
+#endif
+
+/* These are from POSIX.1b.  If the objects are not implemented using separate
+   distinct file types, the macros always will evaluate to zero.  Unlike the
+   other S_* macros the following three take a pointer to a `struct stat'
+   object as the argument.  */
+#ifdef __USE_POSIX199309
+# define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
+# define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
+# define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
+#endif
+
+
+/* Protection bits.  */
+
+#define        S_ISUID __S_ISUID       /* Set user ID on execution.  */
+#define        S_ISGID __S_ISGID       /* Set group ID on execution.  */
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
+# define S_ISVTX       __S_ISVTX
+#endif
+
+#define        S_IRUSR __S_IREAD       /* Read by owner.  */
+#define        S_IWUSR __S_IWRITE      /* Write by owner.  */
+#define        S_IXUSR __S_IEXEC       /* Execute by owner.  */
+/* Read, write, and execute by owner.  */
+#define        S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)
+
+#ifdef __USE_MISC
+# define S_IREAD       S_IRUSR
+# define S_IWRITE      S_IWUSR
+# define S_IEXEC       S_IXUSR
+#endif
+
+#define        S_IRGRP (S_IRUSR >> 3)  /* Read by group.  */
+#define        S_IWGRP (S_IWUSR >> 3)  /* Write by group.  */
+#define        S_IXGRP (S_IXUSR >> 3)  /* Execute by group.  */
+/* Read, write, and execute by group.  */
+#define        S_IRWXG (S_IRWXU >> 3)
+
+#define        S_IROTH (S_IRGRP >> 3)  /* Read by others.  */
+#define        S_IWOTH (S_IWGRP >> 3)  /* Write by others.  */
+#define        S_IXOTH (S_IXGRP >> 3)  /* Execute by others.  */
+/* Read, write, and execute by others.  */
+#define        S_IRWXO (S_IRWXG >> 3)
+
+
+#ifdef __USE_MISC
+/* Macros for common mode bit masks.  */
+# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
+# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
+
+# define S_BLKSIZE     512     /* Block size for `st_blocks'.  */
+#endif
+
+
+#ifndef __USE_FILE_OFFSET64
+/* Get file attributes for FILE and put them in BUF.  */
+extern int stat (const char *__restrict __file,
+                struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+
+/* Get file attributes for the file, device, pipe, or socket
+   that file descriptor FD is open on and put them in BUF.  */
+extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
+                                 struct stat *__restrict __buf), stat64)
+     __nonnull ((1, 2));
+extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
+     __nonnull ((2));
+# else
+#  define stat stat64
+#  define fstat fstat64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int stat64 (const char *__restrict __file,
+                  struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
+extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
+#endif
+
+#ifdef __USE_ATFILE
+/* Similar to stat, get the attributes for FILE and put them in BUF.
+   Relative path names are interpreted relative to FD unless FD is
+   AT_FDCWD.  */
+# ifndef __USE_FILE_OFFSET64
+extern int fstatat (int __fd, const char *__restrict __file,
+                   struct stat *__restrict __buf, int __flag)
+     __THROW __nonnull ((2, 3));
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
+                                    struct stat *__restrict __buf,
+                                    int __flag),
+                          fstatat64) __nonnull ((2, 3));
+#  else
+#   define fstatat fstatat64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+extern int fstatat64 (int __fd, const char *__restrict __file,
+                     struct stat64 *__restrict __buf, int __flag)
+     __THROW __nonnull ((2, 3));
+# endif
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+# ifndef __USE_FILE_OFFSET64
+/* Get file attributes about FILE and put them in BUF.
+   If FILE is a symbolic link, do not follow it.  */
+extern int lstat (const char *__restrict __file,
+                 struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (lstat,
+                          (const char *__restrict __file,
+                           struct stat *__restrict __buf), lstat64)
+     __nonnull ((1, 2));
+#  else
+#   define lstat lstat64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lstat64 (const char *__restrict __file,
+                   struct stat64 *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+# endif
+#endif
+
+/* Set file access permissions for FILE to MODE.
+   If FILE is a symbolic link, this affects its target instead.  */
+extern int chmod (const char *__file, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Set file access permissions for FILE to MODE.
+   If FILE is a symbolic link, this affects the link itself
+   rather than its target.  */
+extern int lchmod (const char *__file, __mode_t __mode)
+     __THROW __nonnull ((1));
+#endif
+
+/* Set file access permissions of the file FD is open on to MODE.  */
+#ifdef __USE_POSIX
+extern int fchmod (int __fd, __mode_t __mode) __THROW;
+#endif
+
+#ifdef __USE_ATFILE
+/* Set file access permissions of FILE relative to
+   the directory FD is open on.  */
+extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
+                    int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use ATFILE.  */
+
+
+
+/* Set the file creation mask of the current process to MASK,
+   and return the old creation mask.  */
+extern __mode_t umask (__mode_t __mask) __THROW;
+
+#ifdef __USE_GNU
+/* Get the current `umask' value without changing it.
+   This function is only available under the GNU Hurd.  */
+extern __mode_t getumask (void) __THROW;
+#endif
+
+/* Create a new directory named PATH, with permission bits MODE.  */
+extern int mkdir (const char *__path, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Like mkdir, create a new directory with permission bits MODE.  But
+   interpret relative PATH names relative to the directory associated
+   with FD.  */
+extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
+     __THROW __nonnull ((2));
+#endif
+
+/* Create a device file named PATH, with permission and special bits MODE
+   and device number DEV (which can be constructed from major and minor
+   device numbers with the `makedev' macro above).  */
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
+     __THROW __nonnull ((1));
+
+# ifdef __USE_ATFILE
+/* Like mknod, create a new device file with permission bits MODE and
+   device number DEV.  But interpret relative PATH names relative to
+   the directory associated with FD.  */
+extern int mknodat (int __fd, const char *__path, __mode_t __mode,
+                   __dev_t __dev) __THROW __nonnull ((2));
+# endif
+#endif
+
+
+/* Create a new FIFO named PATH, with permission bits MODE.  */
+extern int mkfifo (const char *__path, __mode_t __mode)
+     __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Like mkfifo, create a new FIFO with permission bits MODE.  But
+   interpret relative PATH names relative to the directory associated
+   with FD.  */
+extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
+     __THROW __nonnull ((2));
+#endif
+\f
+#ifdef __USE_ATFILE
+/* Set file access and modification times relative to directory file
+   descriptor.  */
+extern int utimensat (int __fd, const char *__path,
+                     const struct timespec __times[2],
+                     int __flags)
+     __THROW __nonnull ((2));
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Set file access and modification times of the file associated with FD.  */
+extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
+#endif
+\f
+/* To allow the `struct stat' structure and the file type `mode_t'
+   bits to vary without changing shared library major version number,
+   the `stat' family of functions and `mknod' are in fact inline
+   wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
+   which all take a leading version-number argument designating the
+   data structure and bits used.  <bits/stat.h> defines _STAT_VER with
+   the version number corresponding to `struct stat' as defined in
+   that file; and _MKNOD_VER with the version number corresponding to
+   the S_IF* macros defined therein.  It is arranged that when not
+   inlined these function are always statically linked; that way a
+   dynamically-linked executable always encodes the version number
+   corresponding to the data structures it uses, so the `x' functions
+   in the shared library can adapt without needing to recompile all
+   callers.  */
+
+#ifndef _STAT_VER
+# define _STAT_VER     0
+#endif
+#ifndef _MKNOD_VER
+# define _MKNOD_VER    0
+#endif
+
+/* Wrappers for stat and mknod system calls.  */
+#ifndef __USE_FILE_OFFSET64
+extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
+     __THROW __nonnull ((3));
+extern int __xstat (int __ver, const char *__filename,
+                   struct stat *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __lxstat (int __ver, const char *__filename,
+                    struct stat *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __fxstatat (int __ver, int __fildes, const char *__filename,
+                      struct stat *__stat_buf, int __flag)
+     __THROW __nonnull ((3, 4));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
+                                     struct stat *__stat_buf), __fxstat64)
+     __nonnull ((3));
+extern int __REDIRECT_NTH (__xstat, (int __ver, const char *__filename,
+                                    struct stat *__stat_buf), __xstat64)
+     __nonnull ((2, 3));
+extern int __REDIRECT_NTH (__lxstat, (int __ver, const char *__filename,
+                                     struct stat *__stat_buf), __lxstat64)
+     __nonnull ((2, 3));
+extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
+                                       const char *__filename,
+                                       struct stat *__stat_buf, int __flag),
+                          __fxstatat64) __nonnull ((3, 4));
+
+# else
+#  define __fxstat __fxstat64
+#  define __xstat __xstat64
+#  define __lxstat __lxstat64
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
+     __THROW __nonnull ((3));
+extern int __xstat64 (int __ver, const char *__filename,
+                     struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __lxstat64 (int __ver, const char *__filename,
+                      struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
+extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
+                        struct stat64 *__stat_buf, int __flag)
+     __THROW __nonnull ((3, 4));
+#endif
+extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
+                    __dev_t *__dev) __THROW __nonnull ((2, 4));
+
+extern int __xmknodat (int __ver, int __fd, const char *__path,
+                      __mode_t __mode, __dev_t *__dev)
+     __THROW __nonnull ((3, 5));
+
+#ifdef __USE_EXTERN_INLINES
+/* Inlined versions of the real stat and mknod functions.  */
+
+__extern_inline int
+__NTH (stat (const char *__path, struct stat *__statbuf))
+{
+  return __xstat (_STAT_VER, __path, __statbuf);
+}
+
+# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+__extern_inline int
+__NTH (lstat (const char *__path, struct stat *__statbuf))
+{
+  return __lxstat (_STAT_VER, __path, __statbuf);
+}
+# endif
+
+__extern_inline int
+__NTH (fstat (int __fd, struct stat *__statbuf))
+{
+  return __fxstat (_STAT_VER, __fd, __statbuf);
+}
+
+# ifdef __USE_ATFILE
+__extern_inline int
+__NTH (fstatat (int __fd, const char *__filename, struct stat *__statbuf,
+               int __flag))
+{
+  return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
+}
+# endif
+
+# ifdef __USE_MISC
+__extern_inline int
+__NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
+{
+  return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
+}
+# endif
+
+# ifdef __USE_ATFILE
+__extern_inline int
+__NTH (mknodat (int __fd, const char *__path, __mode_t __mode,
+               __dev_t __dev))
+{
+  return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
+}
+# endif
+
+# if defined __USE_LARGEFILE64 \
+  && (! defined __USE_FILE_OFFSET64 \
+      || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
+__extern_inline int
+__NTH (stat64 (const char *__path, struct stat64 *__statbuf))
+{
+  return __xstat64 (_STAT_VER, __path, __statbuf);
+}
+
+#  if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+__extern_inline int
+__NTH (lstat64 (const char *__path, struct stat64 *__statbuf))
+{
+  return __lxstat64 (_STAT_VER, __path, __statbuf);
+}
+#  endif
+
+__extern_inline int
+__NTH (fstat64 (int __fd, struct stat64 *__statbuf))
+{
+  return __fxstat64 (_STAT_VER, __fd, __statbuf);
+}
+
+#  ifdef __USE_ATFILE
+__extern_inline int
+__NTH (fstatat64 (int __fd, const char *__filename, struct stat64 *__statbuf,
+                 int __flag))
+{
+  return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf, __flag);
+}
+#  endif
+
+# endif
+
+#endif
+
+__END_DECLS
+
+
+#endif /* sys/stat.h  */
diff --git a/lib/libdss-include/sys/statfs.h b/lib/libdss-include/sys/statfs.h
new file mode 100644 (file)
index 0000000..69a228d
--- /dev/null
@@ -0,0 +1,67 @@
+/* Definitions for getting information about a filesystem.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_STATFS_H
+#define        _SYS_STATFS_H   1
+
+#include <features.h>
+
+/* Get the system-specific definition of `struct statfs'.  */
+#include <bits/statfs.h>
+
+__BEGIN_DECLS
+
+/* Return information about the filesystem on which FILE resides.  */
+#ifndef __USE_FILE_OFFSET64
+extern int statfs (const char *__file, struct statfs *__buf)
+     __THROW __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (statfs,
+                          (const char *__file, struct statfs *__buf),
+                          statfs64) __nonnull ((1, 2));
+# else
+#  define statfs statfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int statfs64 (const char *__file, struct statfs64 *__buf)
+     __THROW __nonnull ((1, 2));
+#endif
+
+/* Return information about the filesystem containing the file FILDES
+   refers to.  */
+#ifndef __USE_FILE_OFFSET64
+extern int fstatfs (int __fildes, struct statfs *__buf)
+     __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatfs, (int __fildes, struct statfs *__buf),
+                          fstatfs64) __nonnull ((2));
+# else
+#  define fstatfs fstatfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstatfs64 (int __fildes, struct statfs64 *__buf)
+     __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* sys/statfs.h */
diff --git a/lib/libdss-include/sys/statvfs.h b/lib/libdss-include/sys/statvfs.h
new file mode 100644 (file)
index 0000000..5d96652
--- /dev/null
@@ -0,0 +1,90 @@
+/* Definitions for getting information about a filesystem.
+   Copyright (C) 1998-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_STATVFS_H
+#define        _SYS_STATVFS_H  1
+
+#include <features.h>
+
+/* Get the system-specific definition of `struct statfs'.  */
+#include <bits/statvfs.h>
+
+#ifndef __USE_FILE_OFFSET64
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#else
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#endif
+
+__BEGIN_DECLS
+
+/* Return information about the filesystem on which FILE resides.  */
+#ifndef __USE_FILE_OFFSET64
+extern int statvfs (const char *__restrict __file,
+                   struct statvfs *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (statvfs,
+                          (const char *__restrict __file,
+                           struct statvfs *__restrict __buf), statvfs64)
+     __nonnull ((1, 2));
+# else
+#  define statvfs statvfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int statvfs64 (const char *__restrict __file,
+                     struct statvfs64 *__restrict __buf)
+     __THROW __nonnull ((1, 2));
+#endif
+
+/* Return information about the filesystem containing the file FILDES
+   refers to.  */
+#ifndef __USE_FILE_OFFSET64
+extern int fstatvfs (int __fildes, struct statvfs *__buf)
+     __THROW __nonnull ((2));
+#else
+# ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (fstatvfs, (int __fildes, struct statvfs *__buf),
+                          fstatvfs64) __nonnull ((2));
+# else
+#  define fstatvfs fstatvfs64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern int fstatvfs64 (int __fildes, struct statvfs64 *__buf)
+     __THROW __nonnull ((2));
+#endif
+
+__END_DECLS
+
+#endif /* sys/statvfs.h */
diff --git a/lib/libdss-include/sys/stropts.h b/lib/libdss-include/sys/stropts.h
new file mode 100644 (file)
index 0000000..5b5bc02
--- /dev/null
@@ -0,0 +1 @@
+#include <stropts.h>
diff --git a/lib/libdss-include/sys/swap.h b/lib/libdss-include/sys/swap.h
new file mode 100644 (file)
index 0000000..469907b
--- /dev/null
@@ -0,0 +1,43 @@
+/* Calls to enable and disable swapping on specified locations.  Linux version.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SWAP_H
+
+#define _SYS_SWAP_H    1
+#include <features.h>
+
+/* The swap priority is encoded as:
+   (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK
+*/
+#define        SWAP_FLAG_PREFER        0x8000  /* Set if swap priority is specified. */
+#define        SWAP_FLAG_PRIO_MASK     0x7fff
+#define        SWAP_FLAG_PRIO_SHIFT    0
+#define SWAP_FLAG_DISCARD      0x10000 /* Discard swap cluster after use.  */
+
+__BEGIN_DECLS
+
+/* Make the block special device PATH available to the system for swapping.
+   This call is restricted to the super-user.  */
+extern int swapon (const char *__path, int __flags) __THROW;
+
+/* Stop using block special device PATH for swapping.  */
+extern int swapoff (const char *__path) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_SWAP_H */
diff --git a/lib/libdss-include/sys/syscall.h b/lib/libdss-include/sys/syscall.h
new file mode 100644 (file)
index 0000000..d925a1d
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYSCALL_H
+#define _SYSCALL_H     1
+
+/* This file should list the numbers of the system calls the system knows.
+   But instead of duplicating this we use the information available
+   from the kernel sources.  */
+#include <asm/unistd.h>
+
+#ifndef _LIBC
+/* The Linux kernel header file defines macros `__NR_<name>', but some
+   programs expect the traditional form `SYS_<name>'.  So in building libc
+   we scan the kernel's list and produce <bits/syscall.h> with macros for
+   all the `SYS_' names.  */
+# include <bits/syscall.h>
+#endif
+
+#endif
diff --git a/lib/libdss-include/sys/sysctl.h b/lib/libdss-include/sys/sysctl.h
new file mode 100644 (file)
index 0000000..687d1a2
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_SYSCTL_H
+#define        _SYS_SYSCTL_H   1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+/* Prevent more kernel headers than necessary to be included.  */
+#ifndef _LINUX_KERNEL_H
+# define _LINUX_KERNEL_H       1
+# define __undef_LINUX_KERNEL_H
+#endif
+#ifndef _LINUX_TYPES_H
+# define _LINUX_TYPES_H                1
+# define __undef_LINUX_TYPES_H
+#endif
+#ifndef _LINUX_LIST_H
+# define _LINUX_LIST_H         1
+# define __undef_LINUX_LIST_H
+#endif
+#ifndef __LINUX_COMPILER_H
+# define __LINUX_COMPILER_H    1
+# define __user
+# define __undef__LINUX_COMPILER_H
+#endif
+
+#include <linux/sysctl.h>
+
+#ifdef __undef_LINUX_KERNEL_H
+# undef _LINUX_KERNEL_H
+# undef __undef_LINUX_KERNEL_H
+#endif
+#ifdef __undef_LINUX_TYPES_H
+# undef _LINUX_TYPES_H
+# undef __undef_LINUX_TYPES_H
+#endif
+#ifdef __undef_LINUX_LIST_H
+# undef _LINUX_LIST_H
+# undef __undef_LINUX_LIST_H
+#endif
+#ifdef __undef__LINUX_COMPILER_H
+# undef __LINUX_COMPILER_H
+# undef __user
+# undef __undef__LINUX_COMPILER_H
+#endif
+
+#include <bits/sysctl.h>
+
+__BEGIN_DECLS
+
+/* Read or write system parameters.  */
+extern int sysctl (int *__name, int __nlen, void *__oldval,
+                  size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_SYSCTL_H */
diff --git a/lib/libdss-include/sys/sysinfo.h b/lib/libdss-include/sys/sysinfo.h
new file mode 100644 (file)
index 0000000..4fc5186
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSINFO_H
+#define _SYS_SYSINFO_H 1
+
+#include <features.h>
+
+/* Get sysinfo structure from kernel header.  */
+#include <linux/kernel.h>
+
+__BEGIN_DECLS
+
+/* Returns information on overall system statistics.  */
+extern int sysinfo (struct sysinfo *__info) __THROW;
+
+
+/* Return number of configured processors.  */
+extern int get_nprocs_conf (void) __THROW;
+
+/* Return number of available processors.  */
+extern int get_nprocs (void) __THROW;
+
+
+/* Return number of physical pages of memory in the system.  */
+extern long int get_phys_pages (void) __THROW;
+
+/* Return number of available physical pages of memory in the system.  */
+extern long int get_avphys_pages (void) __THROW;
+
+__END_DECLS
+
+#endif /* sys/sysinfo.h */
diff --git a/lib/libdss-include/sys/syslog.h b/lib/libdss-include/sys/syslog.h
new file mode 100644 (file)
index 0000000..ee01478
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 1982, 1986, 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)syslog.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _SYS_SYSLOG_H
+#define _SYS_SYSLOG_H 1
+
+#include <features.h>
+#define __need___va_list
+#include <stdarg.h>
+
+/* This file defines _PATH_LOG.  */
+#include <bits/syslog-path.h>
+
+/*
+ * priorities/facilities are encoded into a single 32-bit quantity, where the
+ * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
+ * (0-big number).  Both the priorities and the facilities map roughly
+ * one-to-one to strings in the syslogd(8) source code.  This mapping is
+ * included in this file.
+ *
+ * priorities (these are ordered)
+ */
+#define        LOG_EMERG       0       /* system is unusable */
+#define        LOG_ALERT       1       /* action must be taken immediately */
+#define        LOG_CRIT        2       /* critical conditions */
+#define        LOG_ERR         3       /* error conditions */
+#define        LOG_WARNING     4       /* warning conditions */
+#define        LOG_NOTICE      5       /* normal but significant condition */
+#define        LOG_INFO        6       /* informational */
+#define        LOG_DEBUG       7       /* debug-level messages */
+
+#define        LOG_PRIMASK     0x07    /* mask to extract priority part (internal) */
+                               /* extract priority */
+#define        LOG_PRI(p)      ((p) & LOG_PRIMASK)
+#define        LOG_MAKEPRI(fac, pri)   ((fac) | (pri))
+
+#ifdef SYSLOG_NAMES
+#define        INTERNAL_NOPRI  0x10    /* the "no priority" priority */
+                               /* mark "facility" */
+#define        INTERNAL_MARK   LOG_MAKEPRI(LOG_NFACILITIES << 3, 0)
+typedef struct _code {
+       char    *c_name;
+       int     c_val;
+} CODE;
+
+CODE prioritynames[] =
+  {
+    { "alert", LOG_ALERT },
+    { "crit", LOG_CRIT },
+    { "debug", LOG_DEBUG },
+    { "emerg", LOG_EMERG },
+    { "err", LOG_ERR },
+    { "error", LOG_ERR },              /* DEPRECATED */
+    { "info", LOG_INFO },
+    { "none", INTERNAL_NOPRI },                /* INTERNAL */
+    { "notice", LOG_NOTICE },
+    { "panic", LOG_EMERG },            /* DEPRECATED */
+    { "warn", LOG_WARNING },           /* DEPRECATED */
+    { "warning", LOG_WARNING },
+    { NULL, -1 }
+  };
+#endif
+
+/* facility codes */
+#define        LOG_KERN        (0<<3)  /* kernel messages */
+#define        LOG_USER        (1<<3)  /* random user-level messages */
+#define        LOG_MAIL        (2<<3)  /* mail system */
+#define        LOG_DAEMON      (3<<3)  /* system daemons */
+#define        LOG_AUTH        (4<<3)  /* security/authorization messages */
+#define        LOG_SYSLOG      (5<<3)  /* messages generated internally by syslogd */
+#define        LOG_LPR         (6<<3)  /* line printer subsystem */
+#define        LOG_NEWS        (7<<3)  /* network news subsystem */
+#define        LOG_UUCP        (8<<3)  /* UUCP subsystem */
+#define        LOG_CRON        (9<<3)  /* clock daemon */
+#define        LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
+#define        LOG_FTP         (11<<3) /* ftp daemon */
+
+       /* other codes through 15 reserved for system use */
+#define        LOG_LOCAL0      (16<<3) /* reserved for local use */
+#define        LOG_LOCAL1      (17<<3) /* reserved for local use */
+#define        LOG_LOCAL2      (18<<3) /* reserved for local use */
+#define        LOG_LOCAL3      (19<<3) /* reserved for local use */
+#define        LOG_LOCAL4      (20<<3) /* reserved for local use */
+#define        LOG_LOCAL5      (21<<3) /* reserved for local use */
+#define        LOG_LOCAL6      (22<<3) /* reserved for local use */
+#define        LOG_LOCAL7      (23<<3) /* reserved for local use */
+
+#define        LOG_NFACILITIES 24      /* current number of facilities */
+#define        LOG_FACMASK     0x03f8  /* mask to extract facility part */
+                               /* facility of pri */
+#define        LOG_FAC(p)      (((p) & LOG_FACMASK) >> 3)
+
+#ifdef SYSLOG_NAMES
+CODE facilitynames[] =
+  {
+    { "auth", LOG_AUTH },
+    { "authpriv", LOG_AUTHPRIV },
+    { "cron", LOG_CRON },
+    { "daemon", LOG_DAEMON },
+    { "ftp", LOG_FTP },
+    { "kern", LOG_KERN },
+    { "lpr", LOG_LPR },
+    { "mail", LOG_MAIL },
+    { "mark", INTERNAL_MARK },         /* INTERNAL */
+    { "news", LOG_NEWS },
+    { "security", LOG_AUTH },          /* DEPRECATED */
+    { "syslog", LOG_SYSLOG },
+    { "user", LOG_USER },
+    { "uucp", LOG_UUCP },
+    { "local0", LOG_LOCAL0 },
+    { "local1", LOG_LOCAL1 },
+    { "local2", LOG_LOCAL2 },
+    { "local3", LOG_LOCAL3 },
+    { "local4", LOG_LOCAL4 },
+    { "local5", LOG_LOCAL5 },
+    { "local6", LOG_LOCAL6 },
+    { "local7", LOG_LOCAL7 },
+    { NULL, -1 }
+  };
+#endif
+
+/*
+ * arguments to setlogmask.
+ */
+#define        LOG_MASK(pri)   (1 << (pri))            /* mask for one priority */
+#define        LOG_UPTO(pri)   ((1 << ((pri)+1)) - 1)  /* all priorities through pri */
+
+/*
+ * Option flags for openlog.
+ *
+ * LOG_ODELAY no longer does anything.
+ * LOG_NDELAY is the inverse of what it used to be.
+ */
+#define        LOG_PID         0x01    /* log the pid with each message */
+#define        LOG_CONS        0x02    /* log on the console if errors in sending */
+#define        LOG_ODELAY      0x04    /* delay open until first syslog() (default) */
+#define        LOG_NDELAY      0x08    /* don't delay open */
+#define        LOG_NOWAIT      0x10    /* don't wait for console forks: DEPRECATED */
+#define        LOG_PERROR      0x20    /* log to stderr as well */
+
+__BEGIN_DECLS
+
+/* Close descriptor used to write to system logger.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void closelog (void);
+
+/* Open connection to system logger.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void openlog (const char *__ident, int __option, int __facility);
+
+/* Set the log mask level.  */
+extern int setlogmask (int __mask) __THROW;
+
+/* Generate a log message using FMT string and option arguments.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void syslog (int __pri, const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+
+#ifdef __USE_MISC
+/* Generate a log message using FMT and using arguments pointed to by AP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/syslog.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/syslog-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/syslog.h */
diff --git a/lib/libdss-include/sys/sysmacros.h b/lib/libdss-include/sys/sysmacros.h
new file mode 100644 (file)
index 0000000..4c4a697
--- /dev/null
@@ -0,0 +1,65 @@
+/* Definitions of macros to access `dev_t' values.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_SYSMACROS_H
+#define _SYS_SYSMACROS_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+__extension__
+extern unsigned int gnu_dev_major (unsigned long long int __dev)
+     __THROW __attribute_const__;
+__extension__
+extern unsigned int gnu_dev_minor (unsigned long long int __dev)
+     __THROW __attribute_const__;
+__extension__
+extern unsigned long long int gnu_dev_makedev (unsigned int __major,
+                                              unsigned int __minor)
+     __THROW __attribute_const__;
+
+#ifdef __USE_EXTERN_INLINES
+__extension__ __extern_inline __attribute_const__ unsigned int
+__NTH (gnu_dev_major (unsigned long long int __dev))
+{
+  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
+}
+
+__extension__ __extern_inline __attribute_const__ unsigned int
+__NTH (gnu_dev_minor (unsigned long long int __dev))
+{
+  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
+}
+
+__extension__ __extern_inline __attribute_const__ unsigned long long int
+__NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
+{
+  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
+         | (((unsigned long long int) (__minor & ~0xff)) << 12)
+         | (((unsigned long long int) (__major & ~0xfff)) << 32));
+}
+#endif
+__END_DECLS
+
+/* Access the functions with their traditional names.  */
+#define major(dev) gnu_dev_major (dev)
+#define minor(dev) gnu_dev_minor (dev)
+#define makedev(maj, min) gnu_dev_makedev (maj, min)
+
+#endif /* sys/sysmacros.h */
diff --git a/lib/libdss-include/sys/termios.h b/lib/libdss-include/sys/termios.h
new file mode 100644 (file)
index 0000000..3e18805
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _SYS_TERMIOS_H
+#define _SYS_TERMIOS_H
+#include <termios.h>
+#endif
diff --git a/lib/libdss-include/sys/time.h b/lib/libdss-include/sys/time.h
new file mode 100644 (file)
index 0000000..545de6f
--- /dev/null
@@ -0,0 +1,191 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_TIME_H
+#define _SYS_TIME_H    1
+
+#include <features.h>
+
+#include <bits/types.h>
+#define __need_time_t
+#include <time.h>
+#define __need_timeval
+#include <bits/time.h>
+
+#include <sys/select.h>
+
+#ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+# define __suseconds_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+#ifdef __USE_GNU
+/* Macros for converting between `struct timeval' and `struct timespec'.  */
+# define TIMEVAL_TO_TIMESPEC(tv, ts) {                                   \
+       (ts)->tv_sec = (tv)->tv_sec;                                    \
+       (ts)->tv_nsec = (tv)->tv_usec * 1000;                           \
+}
+# define TIMESPEC_TO_TIMEVAL(tv, ts) {                                   \
+       (tv)->tv_sec = (ts)->tv_sec;                                    \
+       (tv)->tv_usec = (ts)->tv_nsec / 1000;                           \
+}
+#endif
+
+
+#ifdef __USE_MISC
+/* Structure crudely representing a timezone.
+   This is obsolete and should never be used.  */
+struct timezone
+  {
+    int tz_minuteswest;                /* Minutes west of GMT.  */
+    int tz_dsttime;            /* Nonzero if DST is ever in effect.  */
+  };
+
+typedef struct timezone *__restrict __timezone_ptr_t;
+#else
+typedef void *__restrict __timezone_ptr_t;
+#endif
+
+/* Get the current time of day and timezone information,
+   putting it into *TV and *TZ.  If TZ is NULL, *TZ is not filled.
+   Returns 0 on success, -1 on errors.
+   NOTE: This form of timezone information is obsolete.
+   Use the functions and variables declared in <time.h> instead.  */
+extern int gettimeofday (struct timeval *__restrict __tv,
+                        __timezone_ptr_t __tz) __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Set the current time of day and timezone information.
+   This call is restricted to the super-user.  */
+extern int settimeofday (const struct timeval *__tv,
+                        const struct timezone *__tz)
+     __THROW;
+
+/* Adjust the current time of day by the amount in DELTA.
+   If OLDDELTA is not NULL, it is filled in with the amount
+   of time adjustment remaining to be done from the last `adjtime' call.
+   This call is restricted to the super-user.  */
+extern int adjtime (const struct timeval *__delta,
+                   struct timeval *__olddelta) __THROW;
+#endif
+
+
+/* Values for the first argument to `getitimer' and `setitimer'.  */
+enum __itimer_which
+  {
+    /* Timers run in real time.  */
+    ITIMER_REAL = 0,
+#define ITIMER_REAL ITIMER_REAL
+    /* Timers run only when the process is executing.  */
+    ITIMER_VIRTUAL = 1,
+#define ITIMER_VIRTUAL ITIMER_VIRTUAL
+    /* Timers run when the process is executing and when
+       the system is executing on behalf of the process.  */
+    ITIMER_PROF = 2
+#define ITIMER_PROF ITIMER_PROF
+  };
+
+/* Type of the second argument to `getitimer' and
+   the second and third arguments `setitimer'.  */
+struct itimerval
+  {
+    /* Value to put into `it_value' when the timer expires.  */
+    struct timeval it_interval;
+    /* Time to the next timer expiration.  */
+    struct timeval it_value;
+  };
+
+#if defined __USE_GNU && !defined __cplusplus
+/* Use the nicer parameter type only in GNU mode and not for C++ since the
+   strict C++ rules prevent the automatic promotion.  */
+typedef enum __itimer_which __itimer_which_t;
+#else
+typedef int __itimer_which_t;
+#endif
+
+/* Set *VALUE to the current setting of timer WHICH.
+   Return 0 on success, -1 on errors.  */
+extern int getitimer (__itimer_which_t __which,
+                     struct itimerval *__value) __THROW;
+
+/* Set the timer WHICH to *NEW.  If OLD is not NULL,
+   set *OLD to the old value of timer WHICH.
+   Returns 0 on success, -1 on errors.  */
+extern int setitimer (__itimer_which_t __which,
+                     const struct itimerval *__restrict __new,
+                     struct itimerval *__restrict __old) __THROW;
+
+/* Change the access time of FILE to TVP[0] and the modification time of
+   FILE to TVP[1].  If TVP is a null pointer, use the current time instead.
+   Returns 0 on success, -1 on errors.  */
+extern int utimes (const char *__file, const struct timeval __tvp[2])
+     __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Same as `utimes', but does not follow symbolic links.  */
+extern int lutimes (const char *__file, const struct timeval __tvp[2])
+     __THROW __nonnull ((1));
+
+/* Same as `utimes', but takes an open file descriptor instead of a name.  */
+extern int futimes (int __fd, const struct timeval __tvp[2]) __THROW;
+#endif
+
+#ifdef __USE_GNU
+/* Change the access time of FILE relative to FD to TVP[0] and the
+   modification time of FILE to TVP[1].  If TVP is a null pointer, use
+   the current time instead.  Returns 0 on success, -1 on errors.  */
+extern int futimesat (int __fd, const char *__file,
+                     const struct timeval __tvp[2]) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* Convenience macros for operations on timevals.
+   NOTE: `timercmp' does not work for >= or <=.  */
+# define timerisset(tvp)       ((tvp)->tv_sec || (tvp)->tv_usec)
+# define timerclear(tvp)       ((tvp)->tv_sec = (tvp)->tv_usec = 0)
+# define timercmp(a, b, CMP)                                                 \
+  (((a)->tv_sec == (b)->tv_sec) ?                                            \
+   ((a)->tv_usec CMP (b)->tv_usec) :                                         \
+   ((a)->tv_sec CMP (b)->tv_sec))
+# define timeradd(a, b, result)                                                      \
+  do {                                                                       \
+    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                            \
+    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                         \
+    if ((result)->tv_usec >= 1000000)                                        \
+      {                                                                              \
+       ++(result)->tv_sec;                                                   \
+       (result)->tv_usec -= 1000000;                                         \
+      }                                                                              \
+  } while (0)
+# define timersub(a, b, result)                                                      \
+  do {                                                                       \
+    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                            \
+    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                         \
+    if ((result)->tv_usec < 0) {                                             \
+      --(result)->tv_sec;                                                    \
+      (result)->tv_usec += 1000000;                                          \
+    }                                                                        \
+  } while (0)
+#endif /* Misc.  */
+
+__END_DECLS
+
+#endif /* sys/time.h */
diff --git a/lib/libdss-include/sys/timeb.h b/lib/libdss-include/sys/timeb.h
new file mode 100644 (file)
index 0000000..41d71bf
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 1994-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_TIMEB_H
+#define _SYS_TIMEB_H   1
+
+#include <features.h>
+
+#define __need_time_t
+#include <time.h>
+
+
+__BEGIN_DECLS
+
+/* Structure returned by the `ftime' function.  */
+
+struct timeb
+  {
+    time_t time;               /* Seconds since epoch, as from `time'.  */
+    unsigned short int millitm;        /* Additional milliseconds.  */
+    short int timezone;                /* Minutes west of GMT.  */
+    short int dstflag;         /* Nonzero if Daylight Savings Time used.  */
+  };
+
+/* Fill in TIMEBUF with information about the current time.  */
+
+extern int ftime (struct timeb *__timebuf);
+
+__END_DECLS
+
+#endif /* sys/timeb.h */
diff --git a/lib/libdss-include/sys/timerfd.h b/lib/libdss-include/sys/timerfd.h
new file mode 100644 (file)
index 0000000..3286997
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 2008-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMERFD_H
+#define        _SYS_TIMERFD_H  1
+
+#include <time.h>
+
+/* Get the platform-dependent flags.  */
+#include <bits/timerfd.h>
+
+
+/* Bits to be set in the FLAGS parameter of `timerfd_settime'.  */
+enum
+  {
+    TFD_TIMER_ABSTIME = 1 << 0
+#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME
+  };
+
+
+__BEGIN_DECLS
+
+/* Return file descriptor for new interval timer source.  */
+extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW;
+
+/* Set next expiration time of interval timer source UFD to UTMR.  If
+   FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is
+   absolute.  Optionally return the old expiration time in OTMR.  */
+extern int timerfd_settime (int __ufd, int __flags,
+                           const struct itimerspec *__utmr,
+                           struct itimerspec *__otmr) __THROW;
+
+/* Return the next expiration time of UFD.  */
+extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timerfd.h */
diff --git a/lib/libdss-include/sys/times.h b/lib/libdss-include/sys/times.h
new file mode 100644 (file)
index 0000000..a877d14
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 4.5.2 Process Times     <sys/times.h>
+ */
+
+#ifndef        _SYS_TIMES_H
+#define        _SYS_TIMES_H    1
+
+#include <features.h>
+
+#define        __need_clock_t
+#include <time.h>
+
+
+__BEGIN_DECLS
+
+/* Structure describing CPU time used by a process and its children.  */
+struct tms
+  {
+    clock_t tms_utime;         /* User CPU time.  */
+    clock_t tms_stime;         /* System CPU time.  */
+
+    clock_t tms_cutime;                /* User CPU time of dead children.  */
+    clock_t tms_cstime;                /* System CPU time of dead children.  */
+  };
+
+
+/* Store the CPU time used by this process and all its
+   dead children (and their dead children) in BUFFER.
+   Return the elapsed real time, or (clock_t) -1 for errors.
+   All times are in CLK_TCKths of a second.  */
+extern clock_t times (struct tms *__buffer) __THROW;
+
+__END_DECLS
+
+#endif /* sys/times.h  */
diff --git a/lib/libdss-include/sys/timex.h b/lib/libdss-include/sys/timex.h
new file mode 100644 (file)
index 0000000..75e86dd
--- /dev/null
@@ -0,0 +1,71 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_TIMEX_H
+#define        _SYS_TIMEX_H    1
+
+#include <features.h>
+#include <sys/time.h>
+
+/* These definitions from linux/timex.h as of 2.6.30.  */
+
+#include <bits/timex.h>
+
+#define NTP_API        4       /* NTP API version */
+
+struct ntptimeval
+{
+  struct timeval time; /* current time (ro) */
+  long int maxerror;   /* maximum error (us) (ro) */
+  long int esterror;   /* estimated error (us) (ro) */
+  long int tai;                /* TAI offset (ro) */
+
+  long int __glibc_reserved1;
+  long int __glibc_reserved2;
+  long int __glibc_reserved3;
+  long int __glibc_reserved4;
+};
+
+/* Clock states (time_state) */
+#define TIME_OK                0       /* clock synchronized, no leap second */
+#define TIME_INS       1       /* insert leap second */
+#define TIME_DEL       2       /* delete leap second */
+#define TIME_OOP       3       /* leap second in progress */
+#define TIME_WAIT      4       /* leap second has occurred */
+#define TIME_ERROR     5       /* clock not synchronized */
+#define TIME_BAD       TIME_ERROR /* bw compat */
+
+/* Maximum time constant of the PLL.  */
+#define MAXTC          6
+
+__BEGIN_DECLS
+
+extern int __adjtimex (struct timex *__ntx) __THROW;
+extern int adjtimex (struct timex *__ntx) __THROW;
+
+#ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
+                          ntp_gettimex);
+#else
+extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
+# define ntp_gettime ntp_gettimex
+#endif
+extern int ntp_adjtime (struct timex *__tntx) __THROW;
+
+__END_DECLS
+
+#endif /* sys/timex.h */
diff --git a/lib/libdss-include/sys/ttychars.h b/lib/libdss-include/sys/ttychars.h
new file mode 100644 (file)
index 0000000..7043f60
--- /dev/null
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 1982, 1986, 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttychars.h  8.2 (Berkeley) 1/4/94
+ */
+
+/*
+ * 4.3 COMPATIBILITY FILE
+ *
+ * User visible structures and constants related to terminal handling.
+ */
+#ifndef _SYS_TTYCHARS_H
+#define        _SYS_TTYCHARS_H 1
+
+struct ttychars {
+       char    tc_erase;       /* erase last character */
+       char    tc_kill;        /* erase entire line */
+       char    tc_intrc;       /* interrupt */
+       char    tc_quitc;       /* quit */
+       char    tc_startc;      /* start output */
+       char    tc_stopc;       /* stop output */
+       char    tc_eofc;        /* end-of-file */
+       char    tc_brkc;        /* input delimiter (like nl) */
+       char    tc_suspc;       /* stop process signal */
+       char    tc_dsuspc;      /* delayed stop process signal */
+       char    tc_rprntc;      /* reprint line */
+       char    tc_flushc;      /* flush output (toggles) */
+       char    tc_werasc;      /* word erase */
+       char    tc_lnextc;      /* literal next character */
+};
+
+#ifdef __USE_OLD_TTY
+#include <sys/ttydefaults.h>   /* to pick up character defaults */
+#endif
+
+#endif /* sys/ttychars.h */
diff --git a/lib/libdss-include/sys/ttydefaults.h b/lib/libdss-include/sys/ttydefaults.h
new file mode 100644 (file)
index 0000000..9be168b
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttydefaults.h       8.4 (Berkeley) 1/21/94
+ */
+
+/*
+ * System wide defaults for terminal state.  Linux version.
+ */
+#ifndef _SYS_TTYDEFAULTS_H_
+#define        _SYS_TTYDEFAULTS_H_
+
+/*
+ * Defaults on "first" open.
+ */
+#define        TTYDEF_IFLAG    (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY)
+#define TTYDEF_OFLAG   (OPOST | ONLCR | XTABS)
+#define TTYDEF_LFLAG   (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL)
+#define TTYDEF_CFLAG   (CREAD | CS7 | PARENB | HUPCL)
+#define TTYDEF_SPEED   (B9600)
+
+/*
+ * Control Character Defaults
+ */
+#define CTRL(x)        (x&037)
+#define        CEOF            CTRL('d')
+#ifdef _POSIX_VDISABLE
+# define CEOL          _POSIX_VDISABLE
+#else
+# define CEOL          '\0'            /* XXX avoid _POSIX_VDISABLE */
+#endif
+#define        CERASE          0177
+#define        CINTR           CTRL('c')
+#ifdef _POSIX_VDISABLE
+# define CSTATUS       _POSIX_VDISABLE
+#else
+# define CSTATUS       '\0'            /* XXX avoid _POSIX_VDISABLE */
+#endif
+#define        CKILL           CTRL('u')
+#define        CMIN            1
+#define        CQUIT           034             /* FS, ^\ */
+#define        CSUSP           CTRL('z')
+#define        CTIME           0
+#define        CDSUSP          CTRL('y')
+#define        CSTART          CTRL('q')
+#define        CSTOP           CTRL('s')
+#define        CLNEXT          CTRL('v')
+#define        CDISCARD        CTRL('o')
+#define        CWERASE         CTRL('w')
+#define        CREPRINT        CTRL('r')
+#define        CEOT            CEOF
+/* compat */
+#define        CBRK            CEOL
+#define CRPRNT         CREPRINT
+#define        CFLUSH          CDISCARD
+
+/* PROTECTED INCLUSION ENDS HERE */
+#endif /* !_SYS_TTYDEFAULTS_H_ */
+
+/*
+ * #define TTYDEFCHARS to include an array of default control characters.
+ */
+#ifdef TTYDEFCHARS
+cc_t   ttydefchars[NCCS] = {
+       CEOF,   CEOL,   CEOL,   CERASE, CWERASE, CKILL, CREPRINT,
+       _POSIX_VDISABLE, CINTR, CQUIT,  CSUSP,  CDSUSP, CSTART, CSTOP,  CLNEXT,
+       CDISCARD, CMIN, CTIME,  CSTATUS, _POSIX_VDISABLE
+};
+#undef TTYDEFCHARS
+#endif
diff --git a/lib/libdss-include/sys/types.h b/lib/libdss-include/sys/types.h
new file mode 100644 (file)
index 0000000..a728567
--- /dev/null
@@ -0,0 +1,275 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
+ */
+
+#ifndef        _SYS_TYPES_H
+#define        _SYS_TYPES_H    1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#ifdef __USE_MISC
+# ifndef __u_char_defined
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+#  define __u_char_defined
+# endif
+#endif
+
+typedef __loff_t loff_t;
+
+#ifndef __ino_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __ino_t ino_t;
+# else
+typedef __ino64_t ino_t;
+# endif
+# define __ino_t_defined
+#endif
+#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
+typedef __ino64_t ino64_t;
+# define __ino64_t_defined
+#endif
+
+#ifndef __dev_t_defined
+typedef __dev_t dev_t;
+# define __dev_t_defined
+#endif
+
+#ifndef __gid_t_defined
+typedef __gid_t gid_t;
+# define __gid_t_defined
+#endif
+
+#ifndef __mode_t_defined
+typedef __mode_t mode_t;
+# define __mode_t_defined
+#endif
+
+#ifndef __nlink_t_defined
+typedef __nlink_t nlink_t;
+# define __nlink_t_defined
+#endif
+
+#ifndef __uid_t_defined
+typedef __uid_t uid_t;
+# define __uid_t_defined
+#endif
+
+#ifndef __off_t_defined
+# ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+# else
+typedef __off64_t off_t;
+# endif
+# define __off_t_defined
+#endif
+#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+# define __off64_t_defined
+#endif
+
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \
+    && !defined __id_t_defined
+typedef __id_t id_t;
+# define __id_t_defined
+#endif
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+#ifdef __USE_MISC
+# ifndef __daddr_t_defined
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+#  define __daddr_t_defined
+# endif
+#endif
+
+#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined
+typedef __key_t key_t;
+# define __key_t_defined
+#endif
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define __need_clock_t
+#endif
+#define        __need_time_t
+#define __need_timer_t
+#define __need_clockid_t
+#include <time.h>
+
+#ifdef __USE_XOPEN
+# ifndef __useconds_t_defined
+typedef __useconds_t useconds_t;
+#  define __useconds_t_defined
+# endif
+# ifndef __suseconds_t_defined
+typedef __suseconds_t suseconds_t;
+#  define __suseconds_t_defined
+# endif
+#endif
+
+#define        __need_size_t
+#include <stddef.h>
+
+#ifdef __USE_MISC
+/* Old compatibility names for C types.  */
+typedef unsigned long int ulong;
+typedef unsigned short int ushort;
+typedef unsigned int uint;
+#endif
+
+/* These size-specific names are used by some of the inet code.  */
+
+#if !__GNUC_PREREQ (2, 7)
+
+/* These types are defined by the ISO C99 header <inttypes.h>. */
+# ifndef __int8_t_defined
+#  define __int8_t_defined
+typedef        char int8_t;
+typedef        short int int16_t;
+typedef        int int32_t;
+#  if __WORDSIZE == 64
+typedef long int int64_t;
+#  else
+__extension__ typedef long long int int64_t;
+#  endif
+# endif
+
+/* But these were defined by ISO C without the first `_'.  */
+typedef        unsigned char u_int8_t;
+typedef        unsigned short int u_int16_t;
+typedef        unsigned int u_int32_t;
+# if __WORDSIZE == 64
+typedef unsigned long int u_int64_t;
+# else
+__extension__ typedef unsigned long long int u_int64_t;
+# endif
+
+typedef int register_t;
+
+#else
+
+/* For GCC 2.7 and later, we can use specific type-size attributes.  */
+# define __intN_t(N, MODE) \
+  typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
+# define __u_intN_t(N, MODE) \
+  typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
+
+# ifndef __int8_t_defined
+#  define __int8_t_defined
+__intN_t (8, __QI__);
+__intN_t (16, __HI__);
+__intN_t (32, __SI__);
+__intN_t (64, __DI__);
+# endif
+
+__u_intN_t (8, __QI__);
+__u_intN_t (16, __HI__);
+__u_intN_t (32, __SI__);
+__u_intN_t (64, __DI__);
+
+typedef int register_t __attribute__ ((__mode__ (__word__)));
+
+
+/* Some code from BIND tests this macro to see if the types above are
+   defined.  */
+#endif
+#define __BIT_TYPES_DEFINED__  1
+
+
+#ifdef __USE_MISC
+/* In BSD <sys/types.h> is expected to define BYTE_ORDER.  */
+# include <endian.h>
+
+/* It also defines `fd_set' and the FD_* macros for `select'.  */
+# include <sys/select.h>
+
+/* BSD defines these symbols, so we follow.  */
+# include <sys/sysmacros.h>
+#endif /* Use misc.  */
+
+
+#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \
+    && !defined __blksize_t_defined
+typedef __blksize_t blksize_t;
+# define __blksize_t_defined
+#endif
+
+/* Types from the Large File Support interface.  */
+#ifndef __USE_FILE_OFFSET64
+# ifndef __blkcnt_t_defined
+typedef __blkcnt_t blkcnt_t;    /* Type to count number of disk blocks.  */
+#  define __blkcnt_t_defined
+# endif
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#else
+# ifndef __blkcnt_t_defined
+typedef __blkcnt64_t blkcnt_t;    /* Type to count number of disk blocks.  */
+#  define __blkcnt_t_defined
+# endif
+# ifndef __fsblkcnt_t_defined
+typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
+#  define __fsblkcnt_t_defined
+# endif
+# ifndef __fsfilcnt_t_defined
+typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
+#  define __fsfilcnt_t_defined
+# endif
+#endif
+
+#ifdef __USE_LARGEFILE64
+typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
+typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
+typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
+#endif
+
+
+/* Now add the thread types.  */
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+# include <bits/pthreadtypes.h>
+#endif
+
+__END_DECLS
+
+#endif /* sys/types.h */
diff --git a/lib/libdss-include/sys/ucontext.h b/lib/libdss-include/sys/ucontext.h
new file mode 100644 (file)
index 0000000..01da3ca
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C) 1998-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* System V/AArch64 ABI compliant context switching support.  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H        1
+
+#include <features.h>
+#include <signal.h>
+#include <sys/procfs.h>
+
+/* We need the signal context definitions even if they are not used
+   included in <signal.h>.  */
+#include <bits/sigcontext.h>
+
+typedef elf_greg_t greg_t;
+
+/* Container for all general registers.  */
+typedef elf_gregset_t gregset_t;
+
+/* Structure to describe FPU registers.  */
+typedef elf_fpregset_t fpregset_t;
+
+/* Context to describe whole processor state.  This only describes
+   the core registers; coprocessor registers get saved elsewhere
+   (e.g. in uc_regspace, or somewhere unspecified on the stack
+   during non-RT signal handlers).  */
+typedef struct sigcontext mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    __sigset_t uc_sigmask;
+    mcontext_t uc_mcontext;
+  } ucontext_t;
+
+#endif /* sys/ucontext.h */
diff --git a/lib/libdss-include/sys/uio.h b/lib/libdss-include/sys/uio.h
new file mode 100644 (file)
index 0000000..2c98077
--- /dev/null
@@ -0,0 +1,122 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_UIO_H
+#define _SYS_UIO_H     1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+/* This file defines `struct iovec'.  */
+#include <bits/uio.h>
+
+
+/* Read data from file descriptor FD, and put the result in the
+   buffers described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.
+   Operates just like 'read' (see <unistd.h>) except that data are
+   put in IOVEC instead of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count)
+  __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which
+   is a vector of COUNT 'struct iovec's, to file descriptor FD.
+   The data is written in the order specified.
+   Operates just like 'write' (see <unistd.h>) except that the data
+   are taken from IOVEC instead of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count)
+  __wur;
+
+
+#ifdef __USE_MISC
+# ifndef __USE_FILE_OFFSET64
+/* Read data from file descriptor FD at the given position OFFSET
+   without change the file pointer, and put the result in the buffers
+   described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.  Operates just like
+   'pread' (see <unistd.h>) except that data are put in IOVEC instead
+   of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count,
+                      __off_t __offset) __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which is a
+   vector of COUNT 'struct iovec's, to file descriptor FD at the given
+   position OFFSET without change the file pointer.  The data is
+   written in the order specified.  Operates just like 'pwrite' (see
+   <unistd.h>) except that the data are taken from IOVEC instead of a
+   contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count,
+                       __off_t __offset) __wur;
+# else
+#  ifdef __REDIRECT
+extern ssize_t __REDIRECT (preadv, (int __fd, const struct iovec *__iovec,
+                                   int __count, __off64_t __offset),
+                          preadv64) __wur;
+extern ssize_t __REDIRECT (pwritev, (int __fd, const struct iovec *__iovec,
+                                    int __count, __off64_t __offset),
+                          pwritev64) __wur;
+#  else
+#   define preadv preadv64
+#   define pwritev pwritev64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+/* Read data from file descriptor FD at the given position OFFSET
+   without change the file pointer, and put the result in the buffers
+   described by IOVEC, which is a vector of COUNT 'struct iovec's.
+   The buffers are filled in the order specified.  Operates just like
+   'pread' (see <unistd.h>) except that data are put in IOVEC instead
+   of a contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count,
+                        __off64_t __offset) __wur;
+
+/* Write data pointed by the buffers described by IOVEC, which is a
+   vector of COUNT 'struct iovec's, to file descriptor FD at the given
+   position OFFSET without change the file pointer.  The data is
+   written in the order specified.  Operates just like 'pwrite' (see
+   <unistd.h>) except that the data are taken from IOVEC instead of a
+   contiguous buffer.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count,
+                         __off64_t __offset) __wur;
+# endif
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* sys/uio.h */
diff --git a/lib/libdss-include/sys/ultrasound.h b/lib/libdss-include/sys/ultrasound.h
new file mode 100644 (file)
index 0000000..a65c385
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/ultrasound.h>
diff --git a/lib/libdss-include/sys/un.h b/lib/libdss-include/sys/un.h
new file mode 100644 (file)
index 0000000..7a1a67b
--- /dev/null
@@ -0,0 +1,46 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _SYS_UN_H
+#define        _SYS_UN_H       1
+
+#include <sys/cdefs.h>
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+__BEGIN_DECLS
+
+/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket.  */
+struct sockaddr_un
+  {
+    __SOCKADDR_COMMON (sun_);
+    char sun_path[108];                /* Path name.  */
+  };
+
+
+#ifdef __USE_MISC
+# include <string.h>           /* For prototype of `strlen'.  */
+
+/* Evaluate to actual length of the `sockaddr_un' structure.  */
+# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path)       \
+                     + strlen ((ptr)->sun_path))
+#endif
+
+__END_DECLS
+
+#endif /* sys/un.h  */
diff --git a/lib/libdss-include/sys/unistd.h b/lib/libdss-include/sys/unistd.h
new file mode 100644 (file)
index 0000000..1e823fb
--- /dev/null
@@ -0,0 +1 @@
+#include <unistd.h>
diff --git a/lib/libdss-include/sys/user.h b/lib/libdss-include/sys/user.h
new file mode 100644 (file)
index 0000000..f6fc361
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H    1
+
+struct user_regs_struct
+{
+  unsigned long long regs[31];
+  unsigned long long sp;
+  unsigned long long pc;
+  unsigned long long pstate;
+};
+
+struct user_fpsimd_struct
+{
+  __uint128_t  vregs[32];
+  unsigned int fpsr;
+  unsigned int fpcr;
+};
+
+#endif
diff --git a/lib/libdss-include/sys/ustat.h b/lib/libdss-include/sys/ustat.h
new file mode 100644 (file)
index 0000000..b58a1de
--- /dev/null
@@ -0,0 +1,37 @@
+/* Header describing obsolete `ustat' interface.
+   Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ * This interface is obsolete.  Use <sys/statfs.h> instead.
+ */
+
+#ifndef _SYS_USTAT_H
+#define        _SYS_USTAT_H    1
+
+#include <features.h>
+
+#include <sys/types.h>
+#include <bits/ustat.h>
+
+__BEGIN_DECLS
+
+extern int ustat (__dev_t __dev, struct ustat *__ubuf) __THROW;
+
+__END_DECLS
+
+#endif /* sys/ustat.h */
diff --git a/lib/libdss-include/sys/utsname.h b/lib/libdss-include/sys/utsname.h
new file mode 100644 (file)
index 0000000..05682a1
--- /dev/null
@@ -0,0 +1,86 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 4.4 System Identification       <sys/utsname.h>
+ */
+
+#ifndef        _SYS_UTSNAME_H
+#define        _SYS_UTSNAME_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/utsname.h>
+
+#ifndef _UTSNAME_SYSNAME_LENGTH
+# define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_NODENAME_LENGTH
+# define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_RELEASE_LENGTH
+# define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_VERSION_LENGTH
+# define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH
+#endif
+#ifndef _UTSNAME_MACHINE_LENGTH
+# define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH
+#endif
+
+/* Structure describing the system and machine.  */
+struct utsname
+  {
+    /* Name of the implementation of the operating system.  */
+    char sysname[_UTSNAME_SYSNAME_LENGTH];
+
+    /* Name of this node on the network.  */
+    char nodename[_UTSNAME_NODENAME_LENGTH];
+
+    /* Current release level of this implementation.  */
+    char release[_UTSNAME_RELEASE_LENGTH];
+    /* Current version level of this release.  */
+    char version[_UTSNAME_VERSION_LENGTH];
+
+    /* Name of the hardware type the system is running on.  */
+    char machine[_UTSNAME_MACHINE_LENGTH];
+
+#if _UTSNAME_DOMAIN_LENGTH - 0
+    /* Name of the domain of this node on the network.  */
+# ifdef __USE_GNU
+    char domainname[_UTSNAME_DOMAIN_LENGTH];
+# else
+    char __domainname[_UTSNAME_DOMAIN_LENGTH];
+# endif
+#endif
+  };
+
+#ifdef __USE_MISC
+/* Note that SVID assumes all members have the same size.  */
+# define SYS_NMLN  _UTSNAME_LENGTH
+#endif
+
+
+/* Put information about the system in NAME.  */
+extern int uname (struct utsname *__name) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/utsname.h  */
diff --git a/lib/libdss-include/sys/vfs.h b/lib/libdss-include/sys/vfs.h
new file mode 100644 (file)
index 0000000..fa22d31
--- /dev/null
@@ -0,0 +1,4 @@
+/* Other systems declare `struct statfs' et al in <sys/vfs.h>,
+   so we have this file to be compatible with programs expecting it.  */
+
+#include <sys/statfs.h>
diff --git a/lib/libdss-include/sys/vlimit.h b/lib/libdss-include/sys/vlimit.h
new file mode 100644 (file)
index 0000000..d21b42d
--- /dev/null
@@ -0,0 +1,67 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_VLIMIT_H
+#define _SYS_VLIMIT_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* This interface is obsolete, and is superseded by <sys/resource.h>.  */
+
+/* Kinds of resource limit.  */
+enum __vlimit_resource
+{
+  /* Setting this non-zero makes it impossible to raise limits.
+     Only the super-use can set it to zero.
+
+     This is not implemented in recent versions of BSD, nor by
+     the GNU C library.  */
+  LIM_NORAISE,
+
+  /* CPU time available for each process (seconds).  */
+  LIM_CPU,
+
+  /* Largest file which can be created (bytes).  */
+  LIM_FSIZE,
+
+  /* Maximum size of the data segment (bytes).  */
+  LIM_DATA,
+
+  /* Maximum size of the stack segment (bytes).  */
+  LIM_STACK,
+
+  /* Largest core file that will be created (bytes).  */
+  LIM_CORE,
+
+  /* Resident set size (bytes).  */
+  LIM_MAXRSS
+};
+
+/* This means no limit.  */
+#define INFINITY 0x7fffffff
+
+
+/* Set the soft limit for RESOURCE to be VALUE.
+   Returns 0 for success, -1 for failure.  */
+extern int vlimit (enum __vlimit_resource __resource, int __value) __THROW;
+
+
+__END_DECLS
+
+#endif /* sys/vlimit.h  */
diff --git a/lib/libdss-include/sys/vt.h b/lib/libdss-include/sys/vt.h
new file mode 100644 (file)
index 0000000..834abfb
--- /dev/null
@@ -0,0 +1 @@
+#include <linux/vt.h>
diff --git a/lib/libdss-include/sys/vtimes.h b/lib/libdss-include/sys/vtimes.h
new file mode 100644 (file)
index 0000000..c6af2ba
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_VTIMES_H
+#define _SYS_VTIMES_H  1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* This interface is obsolete; use `getrusage' instead.  */
+
+/* Granularity of the `vm_utime' and `vm_stime' fields of a `struct vtimes'.
+   (This is the frequency of the machine's power supply, in Hz.)  */
+#define        VTIMES_UNITS_PER_SECOND 60
+
+struct vtimes
+{
+  /* User time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
+  int vm_utime;
+  /* System time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
+  int vm_stime;
+
+  /* Amount of data and stack memory used (kilobyte-seconds).  */
+  unsigned int vm_idsrss;
+  /* Amount of text memory used (kilobyte-seconds).  */
+  unsigned int vm_ixrss;
+  /* Maximum resident set size (text, data, and stack) (kilobytes).  */
+  int vm_maxrss;
+
+  /* Number of hard page faults (i.e. those that required I/O).  */
+  int vm_majflt;
+  /* Number of soft page faults (i.e. those serviced by reclaiming
+     a page from the list of pages awaiting reallocation.  */
+  int vm_minflt;
+
+  /* Number of times a process was swapped out of physical memory.  */
+  int vm_nswap;
+
+  /* Number of input operations via the file system.  Note: This
+     and `ru_oublock' do not include operations with the cache.  */
+  int vm_inblk;
+  /* Number of output operations via the file system.  */
+  int vm_oublk;
+};
+
+/* If CURRENT is not NULL, write statistics for the current process into
+   *CURRENT.  If CHILD is not NULL, write statistics for all terminated child
+   processes into *CHILD.  Returns 0 for success, -1 for failure.  */
+extern int vtimes (struct vtimes * __current, struct vtimes * __child) __THROW;
+
+__END_DECLS
+
+#endif /* sys/vtimes.h  */
diff --git a/lib/libdss-include/sys/wait.h b/lib/libdss-include/sys/wait.h
new file mode 100644 (file)
index 0000000..b983332
--- /dev/null
@@ -0,0 +1,175 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 3.2.1 Wait for Process Termination      <sys/wait.h>
+ */
+
+#ifndef        _SYS_WAIT_H
+#define        _SYS_WAIT_H     1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <signal.h>
+
+/* These macros could also be defined in <stdlib.h>.  */
+#if !defined _STDLIB_H || (!defined __USE_XOPEN && !defined __USE_XOPEN2K8)
+/* This will define the `W*' macros for the flag
+   bits to `waitpid', `wait3', and `wait4'.  */
+# include <bits/waitflags.h>
+
+# ifdef        __USE_MISC
+
+/* Lots of hair to allow traditional BSD use of `union wait'
+   as well as POSIX.1 use of `int' for the status word.  */
+
+#  if defined __GNUC__ && !defined __cplusplus
+#   define __WAIT_INT(status) \
+  (__extension__ (((union { __typeof(status) __in; int __i; }) \
+                  { .__in = (status) }).__i))
+#  else
+#   define __WAIT_INT(status)  (*(const int *) &(status))
+#  endif
+
+/* This is the type of the argument to `wait'.  The funky union
+   causes redeclarations with either `int *' or `union wait *' to be
+   allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
+   the actual function definitions.  */
+
+#  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
+#   define __WAIT_STATUS       void *
+#   define __WAIT_STATUS_DEFN  void *
+#  else
+/* This works in GCC 2.6.1 and later.  */
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((__transparent_union__));
+#   define __WAIT_STATUS_DEFN  int *
+#  endif
+
+# else /* Don't use misc.  */
+
+#  define __WAIT_INT(status)   (status)
+#  define __WAIT_STATUS                int *
+#  define __WAIT_STATUS_DEFN   int *
+
+# endif /* Use misc.  */
+
+/* This will define all the `__W*' macros.  */
+# include <bits/waitstatus.h>
+
+# define WEXITSTATUS(status)   __WEXITSTATUS (__WAIT_INT (status))
+# define WTERMSIG(status)      __WTERMSIG (__WAIT_INT (status))
+# define WSTOPSIG(status)      __WSTOPSIG (__WAIT_INT (status))
+# define WIFEXITED(status)     __WIFEXITED (__WAIT_INT (status))
+# define WIFSIGNALED(status)   __WIFSIGNALED (__WAIT_INT (status))
+# define WIFSTOPPED(status)    __WIFSTOPPED (__WAIT_INT (status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status) __WIFCONTINUED (__WAIT_INT (status))
+# endif
+#endif /* <stdlib.h> not included.  */
+
+#ifdef __USE_MISC
+# define WCOREFLAG             __WCOREFLAG
+# define WCOREDUMP(status)     __WCOREDUMP (__WAIT_INT (status))
+# define W_EXITCODE(ret, sig)  __W_EXITCODE (ret, sig)
+# define W_STOPCODE(sig)       __W_STOPCODE (sig)
+#endif
+
+/* Wait for a child to die.  When one does, put its status in *STAT_LOC
+   and return its process ID.  For errors, return (pid_t) -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern __pid_t wait (__WAIT_STATUS __stat_loc);
+
+#ifdef __USE_MISC
+/* Special values for the PID argument to `waitpid' and `wait4'.  */
+# define WAIT_ANY      (-1)    /* Any process.  */
+# define WAIT_MYPGRP   0       /* Any process in my process group.  */
+#endif
+
+/* Wait for a child matching PID to die.
+   If PID is greater than 0, match any process whose process ID is PID.
+   If PID is (pid_t) -1, match any process.
+   If PID is (pid_t) 0, match any process with the
+   same process group as the current process.
+   If PID is less than -1, match any process whose
+   process group is the absolute value of PID.
+   If the WNOHANG bit is set in OPTIONS, and that child
+   is not already dead, return (pid_t) 0.  If successful,
+   return PID and store the dead child's status in STAT_LOC.
+   Return (pid_t) -1 for errors.  If the WUNTRACED bit is
+   set in OPTIONS, return status for stopped children; otherwise don't.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options);
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# ifndef __id_t_defined
+#  include <bits/types.h>
+typedef __id_t id_t;
+#  define __id_t_defined
+# endif
+
+# define __need_siginfo_t
+# include <bits/siginfo.h>
+
+/* Wait for a childing matching IDTYPE and ID to change the status and
+   place appropriate information in *INFOP.
+   If IDTYPE is P_PID, match any process whose process ID is ID.
+   If IDTYPE is P_PGID, match any process whose process group is ID.
+   If IDTYPE is P_ALL, match any process.
+   If the WNOHANG bit is set in OPTIONS, and that child
+   is not already dead, clear *INFOP and return 0.  If successful, store
+   exit code and status in *INFOP.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int waitid (idtype_t __idtype, __id_t __id, siginfo_t *__infop,
+                  int __options);
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* This being here makes the prototypes valid whether or not
+   we have already included <sys/resource.h> to define `struct rusage'.  */
+struct rusage;
+
+/* Wait for a child to exit.  When one does, put its status in *STAT_LOC and
+   return its process ID.  For errors return (pid_t) -1.  If USAGE is not
+   nil, store information about the child's resource usage there.  If the
+   WUNTRACED bit is set in OPTIONS, return status for stopped children;
+   otherwise don't.  */
+extern __pid_t wait3 (__WAIT_STATUS __stat_loc, int __options,
+                     struct rusage * __usage) __THROWNL;
+#endif
+
+#ifdef __USE_MISC
+/* PID is like waitpid.  Other args are like wait3.  */
+extern __pid_t wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc, int __options,
+                     struct rusage *__usage) __THROWNL;
+#endif /* Use misc.  */
+
+
+__END_DECLS
+
+#endif /* sys/wait.h  */
diff --git a/lib/libdss-include/sys/xattr.h b/lib/libdss-include/sys/xattr.h
new file mode 100644 (file)
index 0000000..0bdce57
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 2002-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_XATTR_H
+#define _SYS_XATTR_H   1
+
+#include <features.h>
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* The following constants should be used for the fifth parameter of
+   `*setxattr'.  */
+#ifndef __USE_KERNEL_XATTR_DEFS
+enum
+{
+  XATTR_CREATE = 1,    /* set value, fail if attr already exists.  */
+#define XATTR_CREATE   XATTR_CREATE
+  XATTR_REPLACE = 2    /* set value, fail if attr does not exist.  */
+#define XATTR_REPLACE  XATTR_REPLACE
+};
+#endif
+
+/* Set the attribute NAME of the file pointed to by PATH to VALUE (which
+   is SIZE bytes long).  Return 0 on success, -1 for errors.  */
+extern int setxattr (const char *__path, const char *__name,
+                    const void *__value, size_t __size, int __flags)
+       __THROW;
+
+/* Set the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long), not following symlinks for the last pathname component.
+   Return 0 on success, -1 for errors.  */
+extern int lsetxattr (const char *__path, const char *__name,
+                     const void *__value, size_t __size, int __flags)
+       __THROW;
+
+/* Set the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+   bytes long).  Return 0 on success, -1 for errors.  */
+extern int fsetxattr (int __fd, const char *__name, const void *__value,
+                     size_t __size, int __flags) __THROW;
+
+/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long).  Return 0 on success, -1 for errors.  */
+extern ssize_t getxattr (const char *__path, const char *__name,
+                        void *__value, size_t __size) __THROW;
+
+/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is
+   SIZE bytes long), not following symlinks for the last pathname component.
+   Return 0 on success, -1 for errors.  */
+extern ssize_t lgetxattr (const char *__path, const char *__name,
+                         void *__value, size_t __size) __THROW;
+
+/* Get the attribute NAME of the file descriptor FD to VALUE (which is SIZE
+   bytes long).  Return 0 on success, -1 for errors.  */
+extern ssize_t fgetxattr (int __fd, const char *__name, void *__value,
+                         size_t __size) __THROW;
+
+/* List attributes of the file pointed to by PATH into the user-supplied
+   buffer LIST (which is SIZE bytes big).  Return 0 on success, -1 for
+   errors.  */
+extern ssize_t listxattr (const char *__path, char *__list, size_t __size)
+       __THROW;
+
+/* List attributes of the file pointed to by PATH into the user-supplied
+   buffer LIST (which is SIZE bytes big), not following symlinks for the
+   last pathname component.  Return 0 on success, -1 for errors.  */
+extern ssize_t llistxattr (const char *__path, char *__list, size_t __size)
+       __THROW;
+
+/* List attributes of the file descriptor FD into the user-supplied buffer
+   LIST (which is SIZE bytes big).  Return 0 on success, -1 for errors.  */
+extern ssize_t flistxattr (int __fd, char *__list, size_t __size)
+       __THROW;
+
+/* Remove the attribute NAME from the file pointed to by PATH.  Return 0
+   on success, -1 for errors.  */
+extern int removexattr (const char *__path, const char *__name) __THROW;
+
+/* Remove the attribute NAME from the file pointed to by PATH, not
+   following symlinks for the last pathname component.  Return 0 on
+   success, -1 for errors.  */
+extern int lremovexattr (const char *__path, const char *__name) __THROW;
+
+/* Remove the attribute NAME from the file descriptor FD.  Return 0 on
+   success, -1 for errors.  */
+extern int fremovexattr (int __fd, const char *__name) __THROW;
+
+__END_DECLS
+
+#endif /* sys/xattr.h  */
diff --git a/lib/libdss-include/syscall.h b/lib/libdss-include/syscall.h
new file mode 100644 (file)
index 0000000..4c30578
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/syscall.h>
diff --git a/lib/libdss-include/sysexits.h b/lib/libdss-include/sysexits.h
new file mode 100644 (file)
index 0000000..37246b6
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 1987, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)sysexits.h  8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _SYSEXITS_H
+#define        _SYSEXITS_H 1
+
+/*
+ *  SYSEXITS.H -- Exit status codes for system programs.
+ *
+ *     This include file attempts to categorize possible error
+ *     exit statuses for system programs, notably delivermail
+ *     and the Berkeley network.
+ *
+ *     Error numbers begin at EX__BASE to reduce the possibility of
+ *     clashing with other exit statuses that random programs may
+ *     already return.  The meaning of the codes is approximately
+ *     as follows:
+ *
+ *     EX_USAGE -- The command was used incorrectly, e.g., with
+ *             the wrong number of arguments, a bad flag, a bad
+ *             syntax in a parameter, or whatever.
+ *     EX_DATAERR -- The input data was incorrect in some way.
+ *             This should only be used for user's data & not
+ *             system files.
+ *     EX_NOINPUT -- An input file (not a system file) did not
+ *             exist or was not readable.  This could also include
+ *             errors like "No message" to a mailer (if it cared
+ *             to catch it).
+ *     EX_NOUSER -- The user specified did not exist.  This might
+ *             be used for mail addresses or remote logins.
+ *     EX_NOHOST -- The host specified did not exist.  This is used
+ *             in mail addresses or network requests.
+ *     EX_UNAVAILABLE -- A service is unavailable.  This can occur
+ *             if a support program or file does not exist.  This
+ *             can also be used as a catchall message when something
+ *             you wanted to do doesn't work, but you don't know
+ *             why.
+ *     EX_SOFTWARE -- An internal software error has been detected.
+ *             This should be limited to non-operating system related
+ *             errors as possible.
+ *     EX_OSERR -- An operating system error has been detected.
+ *             This is intended to be used for such things as "cannot
+ *             fork", "cannot create pipe", or the like.  It includes
+ *             things like getuid returning a user that does not
+ *             exist in the passwd file.
+ *     EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
+ *             etc.) does not exist, cannot be opened, or has some
+ *             sort of error (e.g., syntax error).
+ *     EX_CANTCREAT -- A (user specified) output file cannot be
+ *             created.
+ *     EX_IOERR -- An error occurred while doing I/O on some file.
+ *     EX_TEMPFAIL -- temporary failure, indicating something that
+ *             is not really an error.  In sendmail, this means
+ *             that a mailer (e.g.) could not create a connection,
+ *             and the request should be reattempted later.
+ *     EX_PROTOCOL -- the remote system returned something that
+ *             was "not possible" during a protocol exchange.
+ *     EX_NOPERM -- You did not have sufficient permission to
+ *             perform the operation.  This is not intended for
+ *             file system problems, which should use NOINPUT or
+ *             CANTCREAT, but rather for higher level permissions.
+ */
+
+#define EX_OK          0       /* successful termination */
+
+#define EX__BASE       64      /* base value for error messages */
+
+#define EX_USAGE       64      /* command line usage error */
+#define EX_DATAERR     65      /* data format error */
+#define EX_NOINPUT     66      /* cannot open input */
+#define EX_NOUSER      67      /* addressee unknown */
+#define EX_NOHOST      68      /* host name unknown */
+#define EX_UNAVAILABLE 69      /* service unavailable */
+#define EX_SOFTWARE    70      /* internal software error */
+#define EX_OSERR       71      /* system error (e.g., can't fork) */
+#define EX_OSFILE      72      /* critical OS file missing */
+#define EX_CANTCREAT   73      /* can't create (user) output file */
+#define EX_IOERR       74      /* input/output error */
+#define EX_TEMPFAIL    75      /* temp failure; user is invited to retry */
+#define EX_PROTOCOL    76      /* remote error in protocol */
+#define EX_NOPERM      77      /* permission denied */
+#define EX_CONFIG      78      /* configuration error */
+
+#define EX__MAX        78      /* maximum listed value */
+
+#endif /* sysexits.h */
diff --git a/lib/libdss-include/syslog.h b/lib/libdss-include/syslog.h
new file mode 100644 (file)
index 0000000..830b492
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/syslog.h>
diff --git a/lib/libdss-include/tar.h b/lib/libdss-include/tar.h
new file mode 100644 (file)
index 0000000..321c19e
--- /dev/null
@@ -0,0 +1,112 @@
+/* Extended tar format from POSIX.1.
+   Copyright (C) 1992-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by David J. MacKenzie.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _TAR_H
+#define        _TAR_H  1
+
+#include <features.h>
+
+
+/* A tar archive consists of 512-byte blocks.
+   Each file in the archive has a header block followed by 0+ data blocks.
+   Two blocks of NUL bytes indicate the end of the archive.  */
+
+/* The fields of header blocks:
+   All strings are stored as ISO 646 (approximately ASCII) strings.
+
+   Fields are numeric unless otherwise noted below; numbers are ISO 646
+   representations of octal numbers, with leading zeros as needed.
+
+   linkname is only valid when typeflag==LNKTYPE.  It doesn't use prefix;
+   files that are links to pathnames >100 chars long can not be stored
+   in a tar archive.
+
+   If typeflag=={LNKTYPE,SYMTYPE,DIRTYPE} then size must be 0.
+
+   devmajor and devminor are only valid for typeflag=={BLKTYPE,CHRTYPE}.
+
+   chksum contains the sum of all 512 bytes in the header block,
+   treating each byte as an 8-bit unsigned value and treating the
+   8 bytes of chksum as blank characters.
+
+   uname and gname are used in preference to uid and gid, if those
+   names exist locally.
+
+   Field Name  Byte Offset     Length in Bytes Field Type
+   name                0               100             NUL-terminated if NUL fits
+   mode                100             8
+   uid         108             8
+   gid         116             8
+   size                124             12
+   mtime       136             12
+   chksum      148             8
+   typeflag    156             1               see below
+   linkname    157             100             NUL-terminated if NUL fits
+   magic       257             6               must be TMAGIC (NUL term.)
+   version     263             2               must be TVERSION
+   uname       265             32              NUL-terminated
+   gname       297             32              NUL-terminated
+   devmajor    329             8
+   devminor    337             8
+   prefix      345             155             NUL-terminated if NUL fits
+
+   If the first character of prefix is '\0', the file name is name;
+   otherwise, it is prefix/name.  Files whose pathnames don't fit in that
+   length can not be stored in a tar archive.  */
+
+/* The bits in mode: */
+#define TSUID  04000
+#define TSGID  02000
+#if defined __USE_XOPEN || !defined __USE_XOPEN2K
+# define TSVTX 01000
+#endif
+#define TUREAD 00400
+#define TUWRITE        00200
+#define TUEXEC 00100
+#define TGREAD 00040
+#define TGWRITE        00020
+#define TGEXEC 00010
+#define TOREAD 00004
+#define TOWRITE        00002
+#define TOEXEC 00001
+
+/* The values for typeflag:
+   Values 'A'-'Z' are reserved for custom implementations.
+   All other values are reserved for future POSIX.1 revisions.  */
+
+#define REGTYPE                '0'     /* Regular file (preferred code).  */
+#define AREGTYPE       '\0'    /* Regular file (alternate code).  */
+#define LNKTYPE                '1'     /* Hard link.  */
+#define SYMTYPE                '2'     /* Symbolic link (hard if not supported).  */
+#define CHRTYPE                '3'     /* Character special.  */
+#define BLKTYPE                '4'     /* Block special.  */
+#define DIRTYPE                '5'     /* Directory.  */
+#define FIFOTYPE       '6'     /* Named pipe.  */
+#define CONTTYPE       '7'     /* Contiguous file */
+ /* (regular file if not supported).  */
+
+/* Contents of magic field and its length.  */
+#define TMAGIC "ustar"
+#define TMAGLEN        6
+
+/* Contents of the version field and its length.  */
+#define TVERSION       "00"
+#define TVERSLEN       2
+
+#endif /* tar.h */
diff --git a/lib/libdss-include/termio.h b/lib/libdss-include/termio.h
new file mode 100644 (file)
index 0000000..0e610f0
--- /dev/null
@@ -0,0 +1,6 @@
+/* Compatible <termio.h> for old `struct termio' ioctl interface.
+   This is obsolete; use the POSIX.1 `struct termios' interface
+   defined in <termios.h> instead.  */
+
+#include <termios.h>
+#include <sys/ioctl.h>
diff --git a/lib/libdss-include/termios.h b/lib/libdss-include/termios.h
new file mode 100644 (file)
index 0000000..a56bb88
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 7.1-2 General Terminal Interface        <termios.h>
+ */
+
+#ifndef        _TERMIOS_H
+#define        _TERMIOS_H      1
+
+#include <features.h>
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* We need `pid_t'.  */
+# include <bits/types.h>
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif
+
+__BEGIN_DECLS
+
+/* Get the system-dependent definitions of `struct termios', `tcflag_t',
+   `cc_t', `speed_t', and all the macros specifying the flag bits.  */
+#include <bits/termios.h>
+
+#ifdef __USE_MISC
+/* Compare a character C to a value VAL from the `c_cc' array in a
+   `struct termios'.  If VAL is _POSIX_VDISABLE, no character can match it.  */
+# define CCEQ(val, c)  ((c) == (val) && (val) != _POSIX_VDISABLE)
+#endif
+
+/* Return the output baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetospeed (const struct termios *__termios_p) __THROW;
+
+/* Return the input baud rate stored in *TERMIOS_P.  */
+extern speed_t cfgetispeed (const struct termios *__termios_p) __THROW;
+
+/* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+/* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
+extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __THROW;
+
+#ifdef __USE_MISC
+/* Set both the input and output baud rates in *TERMIOS_OP to SPEED.  */
+extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __THROW;
+#endif
+
+
+/* Put the state of FD into *TERMIOS_P.  */
+extern int tcgetattr (int __fd, struct termios *__termios_p) __THROW;
+
+/* Set the state of FD to *TERMIOS_P.
+   Values for OPTIONAL_ACTIONS (TCSA*) are in <bits/termios.h>.  */
+extern int tcsetattr (int __fd, int __optional_actions,
+                     const struct termios *__termios_p) __THROW;
+
+
+#ifdef __USE_MISC
+/* Set *TERMIOS_P to indicate raw mode.  */
+extern void cfmakeraw (struct termios *__termios_p) __THROW;
+#endif
+
+/* Send zero bits on FD.  */
+extern int tcsendbreak (int __fd, int __duration) __THROW;
+
+/* Wait for pending output to be written on FD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int tcdrain (int __fd);
+
+/* Flush pending data on FD.
+   Values for QUEUE_SELECTOR (TC{I,O,IO}FLUSH) are in <bits/termios.h>.  */
+extern int tcflush (int __fd, int __queue_selector) __THROW;
+
+/* Suspend or restart transmission on FD.
+   Values for ACTION (TC[IO]{OFF,ON}) are in <bits/termios.h>.  */
+extern int tcflow (int __fd, int __action) __THROW;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+/* Get process group ID for session leader for controlling terminal FD.  */
+extern __pid_t tcgetsid (int __fd) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+# include <sys/ttydefaults.h>
+#endif
+
+__END_DECLS
+
+#endif /* termios.h  */
diff --git a/lib/libdss-include/tgmath.h b/lib/libdss-include/tgmath.h
new file mode 100644 (file)
index 0000000..ea2b611
--- /dev/null
@@ -0,0 +1,454 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.22 Type-generic math        <tgmath.h>
+ */
+
+#ifndef _TGMATH_H
+#define _TGMATH_H      1
+
+/* Include the needed headers.  */
+#include <math.h>
+#include <complex.h>
+
+
+/* Since `complex' is currently not really implemented in most C compilers
+   and if it is implemented, the implementations differ.  This makes it
+   quite difficult to write a generic implementation of this header.  We
+   do not try this for now and instead concentrate only on GNU CC.  Once
+   we have more information support for other compilers might follow.  */
+
+#if __GNUC_PREREQ (2, 7)
+
+# ifdef __NO_LONG_DOUBLE_MATH
+#  define __tgml(fct) fct
+# else
+#  define __tgml(fct) fct ## l
+# endif
+
+/* This is ugly but unless gcc gets appropriate builtins we have to do
+   something like this.  Don't ask how it works.  */
+
+/* 1 if 'type' is a floating type, 0 if 'type' is an integer type.
+   Allows for _Bool.  Expands to an integer constant expression.  */
+# if __GNUC_PREREQ (3, 1)
+#  define __floating_type(type) \
+  (__builtin_classify_type ((type) 0) == 8 \
+   || (__builtin_classify_type ((type) 0) == 9 \
+       && __builtin_classify_type (__real__ ((type) 0)) == 8))
+# else
+#  define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
+# endif
+
+/* The tgmath real type for T, where E is 0 if T is an integer type and
+   1 for a floating type.  */
+# define __tgmath_real_type_sub(T, E) \
+  __typeof__ (*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0         \
+                 : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0))
+
+/* The tgmath real type of EXPR.  */
+# define __tgmath_real_type(expr) \
+  __tgmath_real_type_sub (__typeof__ ((__typeof__ (expr)) 0),                \
+                         __floating_type (__typeof__ (expr)))
+
+
+/* We have two kinds of generic macros: to support functions which are
+   only defined on real valued parameters and those which are defined
+   for complex functions as well.  */
+# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
+     (__extension__ ((sizeof (Val) == sizeof (double)                        \
+                     || __builtin_classify_type (Val) != 8)                  \
+                    ? (__tgmath_real_type (Val)) Fct (Val)                   \
+                    : (sizeof (Val) == sizeof (float))                       \
+                    ? (__tgmath_real_type (Val)) Fct##f (Val)                \
+                    : (__tgmath_real_type (Val)) __tgml(Fct) (Val)))
+
+# define __TGMATH_UNARY_REAL_RET_ONLY(Val, RetType, Fct) \
+     (__extension__ ((sizeof (Val) == sizeof (double)                        \
+                     || __builtin_classify_type (Val) != 8)                  \
+                    ? (RetType) Fct (Val)                                    \
+                    : (sizeof (Val) == sizeof (float))                       \
+                    ? (RetType) Fct##f (Val)                                 \
+                    : (RetType) __tgml(Fct) (Val)))
+
+# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ ((sizeof (Val1) == sizeof (double)                       \
+                     || __builtin_classify_type (Val1) != 8)                 \
+                    ? (__tgmath_real_type (Val1)) Fct (Val1, Val2)           \
+                    : (sizeof (Val1) == sizeof (float))                      \
+                    ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2)        \
+                    : (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2)))
+
+# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2)) == 8)      \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      __tgml(Fct) (Val1, Val2)                               \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct (Val1, Val2)                                       \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct##f (Val1, Val2)))
+
+# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2)) == 8)      \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      __tgml(Fct) (Val1, Val2, Val3)                         \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct (Val1, Val2, Val3)                                 \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                      Fct##f (Val1, Val2, Val3)))
+
+# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (((sizeof (Val1) > sizeof (double)                       \
+                      || sizeof (Val2) > sizeof (double)                     \
+                      || sizeof (Val3) > sizeof (double))                    \
+                     && __builtin_classify_type ((Val1) + (Val2) + (Val3))   \
+                        == 8)                                                \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      __tgml(Fct) (Val1, Val2, Val3)                         \
+                    : (sizeof (Val1) == sizeof (double)                      \
+                       || sizeof (Val2) == sizeof (double)                   \
+                       || sizeof (Val3) == sizeof (double)                   \
+                       || __builtin_classify_type (Val1) != 8                \
+                       || __builtin_classify_type (Val2) != 8                \
+                       || __builtin_classify_type (Val3) != 8)               \
+                    ? (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      Fct (Val1, Val2, Val3)                                 \
+                    : (__typeof ((__tgmath_real_type (Val1)) 0               \
+                                  + (__tgmath_real_type (Val2)) 0            \
+                                  + (__tgmath_real_type (Val3)) 0))          \
+                      Fct##f (Val1, Val2, Val3)))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) Fct (Val)                \
+                       : (__tgmath_real_type (Val)) Cfct (Val))              \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) Fct##f (Val)             \
+                       : (__tgmath_real_type (Val)) Cfct##f (Val))           \
+                    : ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__tgmath_real_type (Val)) __tgml(Fct) (Val)        \
+                       : (__tgmath_real_type (Val)) __tgml(Cfct) (Val))))
+
+# define __TGMATH_UNARY_IMAG(Val, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) Cfct (Val)                 \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) Cfct##f (Val)              \
+                    : (__typeof__ ((__tgmath_real_type (Val)) 0              \
+                                   + _Complex_I)) __tgml(Cfct) (Val)))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \
+     (__extension__ ((sizeof (__real__ (Val)) == sizeof (double)             \
+                     || __builtin_classify_type (__real__ (Val)) != 8)       \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Fct (Val)                                           \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Cfct (Val))                                         \
+                    : (sizeof (__real__ (Val)) == sizeof (float))            \
+                    ? ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Fct##f (Val)                                        \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         Cfct##f (Val))                                      \
+                    : ((sizeof (__real__ (Val)) == sizeof (Val))             \
+                       ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         __tgml(Fct) (Val)                                   \
+                       : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\
+                         __tgml(Cfct) (Val))))
+
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
+# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
+     (__extension__ (((sizeof (__real__ (Val1)) > sizeof (double)            \
+                      || sizeof (__real__ (Val2)) > sizeof (double))         \
+                     && __builtin_classify_type (__real__ (Val1)             \
+                                                 + __real__ (Val2)) == 8)    \
+                    ? ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         __tgml(Fct) (Val1, Val2)                            \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         __tgml(Cfct) (Val1, Val2))                          \
+                    : (sizeof (__real__ (Val1)) == sizeof (double)           \
+                       || sizeof (__real__ (Val2)) == sizeof (double)        \
+                       || __builtin_classify_type (__real__ (Val1)) != 8     \
+                       || __builtin_classify_type (__real__ (Val2)) != 8)    \
+                    ? ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Fct (Val1, Val2)                                    \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Cfct (Val1, Val2))                                  \
+                    : ((sizeof (__real__ (Val1)) == sizeof (Val1)            \
+                        && sizeof (__real__ (Val2)) == sizeof (Val2))        \
+                       ? (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Fct##f (Val1, Val2)                                 \
+                       : (__typeof ((__tgmath_real_type (Val1)) 0            \
+                                  + (__tgmath_real_type (Val2)) 0))          \
+                         Cfct##f (Val1, Val2))))
+#else
+# error "Unsupported compiler; you cannot use <tgmath.h>"
+#endif
+
+
+/* Unary functions defined for real and complex values.  */
+
+
+/* Trigonometric functions.  */
+
+/* Arc cosine of X.  */
+#define acos(Val) __TGMATH_UNARY_REAL_IMAG (Val, acos, cacos)
+/* Arc sine of X.  */
+#define asin(Val) __TGMATH_UNARY_REAL_IMAG (Val, asin, casin)
+/* Arc tangent of X.  */
+#define atan(Val) __TGMATH_UNARY_REAL_IMAG (Val, atan, catan)
+/* Arc tangent of Y/X.  */
+#define atan2(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, atan2)
+
+/* Cosine of X.  */
+#define cos(Val) __TGMATH_UNARY_REAL_IMAG (Val, cos, ccos)
+/* Sine of X.  */
+#define sin(Val) __TGMATH_UNARY_REAL_IMAG (Val, sin, csin)
+/* Tangent of X.  */
+#define tan(Val) __TGMATH_UNARY_REAL_IMAG (Val, tan, ctan)
+
+
+/* Hyperbolic functions.  */
+
+/* Hyperbolic arc cosine of X.  */
+#define acosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, acosh, cacosh)
+/* Hyperbolic arc sine of X.  */
+#define asinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, asinh, casinh)
+/* Hyperbolic arc tangent of X.  */
+#define atanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, atanh, catanh)
+
+/* Hyperbolic cosine of X.  */
+#define cosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, cosh, ccosh)
+/* Hyperbolic sine of X.  */
+#define sinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, sinh, csinh)
+/* Hyperbolic tangent of X.  */
+#define tanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, tanh, ctanh)
+
+
+/* Exponential and logarithmic functions.  */
+
+/* Exponential function of X.  */
+#define exp(Val) __TGMATH_UNARY_REAL_IMAG (Val, exp, cexp)
+
+/* Break VALUE into a normalized fraction and an integral power of 2.  */
+#define frexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, frexp)
+
+/* X times (two to the EXP power).  */
+#define ldexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, ldexp)
+
+/* Natural logarithm of X.  */
+#define log(Val) __TGMATH_UNARY_REAL_IMAG (Val, log, clog)
+
+/* Base-ten logarithm of X.  */
+#ifdef __USE_GNU
+# define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, __clog10)
+#else
+# define log10(Val) __TGMATH_UNARY_REAL_ONLY (Val, log10)
+#endif
+
+/* Return exp(X) - 1.  */
+#define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1)
+
+/* Return log(1 + X).  */
+#define log1p(Val) __TGMATH_UNARY_REAL_ONLY (Val, log1p)
+
+/* Return the base 2 signed integral exponent of X.  */
+#define logb(Val) __TGMATH_UNARY_REAL_ONLY (Val, logb)
+
+/* Compute base-2 exponential of X.  */
+#define exp2(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp2)
+
+/* Compute base-2 logarithm of X.  */
+#define log2(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2)
+
+
+/* Power functions.  */
+
+/* Return X to the Y power.  */
+#define pow(Val1, Val2) __TGMATH_BINARY_REAL_IMAG (Val1, Val2, pow, cpow)
+
+/* Return the square root of X.  */
+#define sqrt(Val) __TGMATH_UNARY_REAL_IMAG (Val, sqrt, csqrt)
+
+/* Return `sqrt(X*X + Y*Y)'.  */
+#define hypot(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, hypot)
+
+/* Return the cube root of X.  */
+#define cbrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, cbrt)
+
+
+/* Nearest integer, absolute value, and remainder functions.  */
+
+/* Smallest integral value not less than X.  */
+#define ceil(Val) __TGMATH_UNARY_REAL_ONLY (Val, ceil)
+
+/* Absolute value of X.  */
+#define fabs(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, fabs, cabs)
+
+/* Largest integer not greater than X.  */
+#define floor(Val) __TGMATH_UNARY_REAL_ONLY (Val, floor)
+
+/* Floating-point modulo remainder of X/Y.  */
+#define fmod(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmod)
+
+/* Round X to integral valuein floating-point format using current
+   rounding direction, but do not raise inexact exception.  */
+#define nearbyint(Val) __TGMATH_UNARY_REAL_ONLY (Val, nearbyint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define round(Val) __TGMATH_UNARY_REAL_ONLY (Val, round)
+
+/* Round X to the integral value in floating-point format nearest but
+   not larger in magnitude.  */
+#define trunc(Val) __TGMATH_UNARY_REAL_ONLY (Val, trunc)
+
+/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
+   and magnitude congruent `mod 2^n' to the magnitude of the integral
+   quotient x/y, with n >= 3.  */
+#define remquo(Val1, Val2, Val3) \
+     __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY (Val1, Val2, Val3, remquo)
+
+/* Round X to nearest integral value according to current rounding
+   direction.  */
+#define lrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lrint)
+#define llrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llrint)
+
+/* Round X to nearest integral value, rounding halfway cases away from
+   zero.  */
+#define lround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long int, lround)
+#define llround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, long long int, llround)
+
+
+/* Return X with its signed changed to Y's.  */
+#define copysign(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, copysign)
+
+/* Error and gamma functions.  */
+#define erf(Val) __TGMATH_UNARY_REAL_ONLY (Val, erf)
+#define erfc(Val) __TGMATH_UNARY_REAL_ONLY (Val, erfc)
+#define tgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, tgamma)
+#define lgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, lgamma)
+
+
+/* Return the integer nearest X in the direction of the
+   prevailing rounding mode.  */
+#define rint(Val) __TGMATH_UNARY_REAL_ONLY (Val, rint)
+
+/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
+#define nextafter(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, nextafter)
+#define nexttoward(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, nexttoward)
+
+/* Return the remainder of integer divison X / Y with infinite precision.  */
+#define remainder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, remainder)
+
+/* Return X times (2 to the Nth power).  */
+#ifdef __USE_MISC
+# define scalb(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, scalb)
+#endif
+
+/* Return X times (2 to the Nth power).  */
+#define scalbn(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbn)
+
+/* Return X times (2 to the Nth power).  */
+#define scalbln(Val1, Val2) \
+     __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln)
+
+/* Return the binary exponent of X, which must be nonzero.  */
+#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, int, ilogb)
+
+
+/* Return positive difference between X and Y.  */
+#define fdim(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fdim)
+
+/* Return maximum numeric value from X and Y.  */
+#define fmax(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmax)
+
+/* Return minimum numeric value from X and Y.  */
+#define fmin(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmin)
+
+
+/* Multiply-add function computed as a ternary operation.  */
+#define fma(Val1, Val2, Val3) \
+     __TGMATH_TERNARY_REAL_ONLY (Val1, Val2, Val3, fma)
+
+
+/* Absolute value, conjugates, and projection.  */
+
+/* Argument value of Z.  */
+#define carg(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, carg, carg)
+
+/* Complex conjugate of Z.  */
+#define conj(Val) __TGMATH_UNARY_IMAG (Val, conj)
+
+/* Projection of Z onto the Riemann sphere.  */
+#define cproj(Val) __TGMATH_UNARY_IMAG (Val, cproj)
+
+
+/* Decomposing complex values.  */
+
+/* Imaginary part of Z.  */
+#define cimag(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, cimag, cimag)
+
+/* Real part of Z.  */
+#define creal(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, creal, creal)
+
+#endif /* tgmath.h */
diff --git a/lib/libdss-include/thread_db.h b/lib/libdss-include/thread_db.h
new file mode 100644 (file)
index 0000000..abb95df
--- /dev/null
@@ -0,0 +1,458 @@
+/* thread_db.h -- interface to libthread_db.so library for debugging -lpthread
+   Copyright (C) 1999-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _THREAD_DB_H
+#define _THREAD_DB_H   1
+
+/* This is the debugger interface for the NPTL library.  It is
+   modelled closely after the interface with same names in Solaris
+   with the goal to share the same code in the debugger.  */
+#include <pthread.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/procfs.h>
+
+
+/* Error codes of the library.  */
+typedef enum
+{
+  TD_OK,         /* No error.  */
+  TD_ERR,        /* No further specified error.  */
+  TD_NOTHR,      /* No matching thread found.  */
+  TD_NOSV,       /* No matching synchronization handle found.  */
+  TD_NOLWP,      /* No matching light-weighted process found.  */
+  TD_BADPH,      /* Invalid process handle.  */
+  TD_BADTH,      /* Invalid thread handle.  */
+  TD_BADSH,      /* Invalid synchronization handle.  */
+  TD_BADTA,      /* Invalid thread agent.  */
+  TD_BADKEY,     /* Invalid key.  */
+  TD_NOMSG,      /* No event available.  */
+  TD_NOFPREGS,   /* No floating-point register content available.  */
+  TD_NOLIBTHREAD, /* Application not linked with thread library.  */
+  TD_NOEVENT,    /* Requested event is not supported.  */
+  TD_NOCAPAB,    /* Capability not available.  */
+  TD_DBERR,      /* Internal debug library error.  */
+  TD_NOAPLIC,    /* Operation is not applicable.  */
+  TD_NOTSD,      /* No thread-specific data available.  */
+  TD_MALLOC,     /* Out of memory.  */
+  TD_PARTIALREG,  /* Not entire register set was read or written.  */
+  TD_NOXREGS,    /* X register set not available for given thread.  */
+  TD_TLSDEFER,   /* Thread has not yet allocated TLS for given module.  */
+  TD_NOTALLOC = TD_TLSDEFER,
+  TD_VERSION,    /* Version if libpthread and libthread_db do not match.  */
+  TD_NOTLS       /* There is no TLS segment in the given module.  */
+} td_err_e;
+
+
+/* Possible thread states.  TD_THR_ANY_STATE is a pseudo-state used to
+   select threads regardless of state in td_ta_thr_iter().  */
+typedef enum
+{
+  TD_THR_ANY_STATE,
+  TD_THR_UNKNOWN,
+  TD_THR_STOPPED,
+  TD_THR_RUN,
+  TD_THR_ACTIVE,
+  TD_THR_ZOMBIE,
+  TD_THR_SLEEP,
+  TD_THR_STOPPED_ASLEEP
+} td_thr_state_e;
+
+/* Thread type: user or system.  TD_THR_ANY_TYPE is a pseudo-type used
+   to select threads regardless of type in td_ta_thr_iter().  */
+typedef enum
+{
+  TD_THR_ANY_TYPE,
+  TD_THR_USER,
+  TD_THR_SYSTEM
+} td_thr_type_e;
+
+
+/* Types of the debugging library.  */
+
+/* Handle for a process.  This type is opaque.  */
+typedef struct td_thragent td_thragent_t;
+
+/* The actual thread handle type.  This is also opaque.  */
+typedef struct td_thrhandle
+{
+  td_thragent_t *th_ta_p;
+  psaddr_t th_unique;
+} td_thrhandle_t;
+
+
+/* Forward declaration of a type defined by and for the dynamic linker.  */
+struct link_map;
+
+
+/* Flags for `td_ta_thr_iter'.  */
+#define TD_THR_ANY_USER_FLAGS  0xffffffff
+#define TD_THR_LOWEST_PRIORITY -20
+#define TD_SIGNO_MASK          NULL
+
+
+#define TD_EVENTSIZE   2
+#define BT_UISHIFT     5 /* log base 2 of BT_NBIPUI, to extract word index */
+#define BT_NBIPUI      (1 << BT_UISHIFT)       /* n bits per uint */
+#define BT_UIMASK      (BT_NBIPUI - 1)         /* to extract bit index */
+
+/* Bitmask of enabled events. */
+typedef struct td_thr_events
+{
+  uint32_t event_bits[TD_EVENTSIZE];
+} td_thr_events_t;
+
+/* Event set manipulation macros. */
+#define __td_eventmask(n) \
+  (UINT32_C (1) << (((n) - 1) & BT_UIMASK))
+#define __td_eventword(n) \
+  ((UINT32_C ((n) - 1)) >> BT_UISHIFT)
+
+#define td_event_emptyset(setp) \
+  do {                                                                       \
+    int __i;                                                                 \
+    for (__i = TD_EVENTSIZE; __i > 0; --__i)                                 \
+      (setp)->event_bits[__i - 1] = 0;                                       \
+  } while (0)
+
+#define td_event_fillset(setp) \
+  do {                                                                       \
+    int __i;                                                                 \
+    for (__i = TD_EVENTSIZE; __i > 0; --__i)                                 \
+      (setp)->event_bits[__i - 1] = UINT32_C (0xffffffff);                   \
+  } while (0)
+
+#define td_event_addset(setp, n) \
+  (((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n))
+#define td_event_delset(setp, n) \
+  (((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n))
+#define td_eventismember(setp, n) \
+  (__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)]))
+#if TD_EVENTSIZE == 2
+# define td_eventisempty(setp) \
+  (!((setp)->event_bits[0]) && !((setp)->event_bits[1]))
+#else
+# error "td_eventisempty must be changed to match TD_EVENTSIZE"
+#endif
+
+/* Events reportable by the thread implementation.  */
+typedef enum
+{
+  TD_ALL_EVENTS,                /* Pseudo-event number.  */
+  TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context.  */
+  TD_READY,                     /* Is executable now. */
+  TD_SLEEP,                     /* Blocked in a synchronization obj.  */
+  TD_SWITCHTO,                  /* Now assigned to a process.  */
+  TD_SWITCHFROM,                /* Not anymore assigned to a process.  */
+  TD_LOCK_TRY,                  /* Trying to get an unavailable lock.  */
+  TD_CATCHSIG,                  /* Signal posted to the thread.  */
+  TD_IDLE,                      /* Process getting idle.  */
+  TD_CREATE,                    /* New thread created.  */
+  TD_DEATH,                     /* Thread terminated.  */
+  TD_PREEMPT,                   /* Preempted.  */
+  TD_PRI_INHERIT,               /* Inherited elevated priority.  */
+  TD_REAP,                      /* Reaped.  */
+  TD_CONCURRENCY,               /* Number of processes changing.  */
+  TD_TIMEOUT,                   /* Conditional variable wait timed out.  */
+  TD_MIN_EVENT_NUM = TD_READY,
+  TD_MAX_EVENT_NUM = TD_TIMEOUT,
+  TD_EVENTS_ENABLE = 31                /* Event reporting enabled.  */
+} td_event_e;
+
+/* Values representing the different ways events are reported.  */
+typedef enum
+{
+  NOTIFY_BPT,                  /* User must insert breakpoint at u.bptaddr. */
+  NOTIFY_AUTOBPT,              /* Breakpoint at u.bptaddr is automatically
+                                  inserted.  */
+  NOTIFY_SYSCALL               /* System call u.syscallno will be invoked.  */
+} td_notify_e;
+
+/* Description how event type is reported.  */
+typedef struct td_notify
+{
+  td_notify_e type;            /* Way the event is reported.  */
+  union
+  {
+    psaddr_t bptaddr;          /* Address of breakpoint.  */
+    int syscallno;             /* Number of system call used.  */
+  } u;
+} td_notify_t;
+
+/* Structure used to report event.  */
+typedef struct td_event_msg
+{
+  td_event_e event;            /* Event type being reported.  */
+  const td_thrhandle_t *th_p;  /* Thread reporting the event.  */
+  union
+  {
+# if 0
+    td_synchandle_t *sh;       /* Handle of synchronization object.  */
+#endif
+    uintptr_t data;            /* Event specific data.  */
+  } msg;
+} td_event_msg_t;
+
+/* Structure containing event data available in each thread structure.  */
+typedef struct
+{
+  td_thr_events_t eventmask;   /* Mask of enabled events.  */
+  td_event_e eventnum;         /* Number of last event.  */
+  void *eventdata;             /* Data associated with event.  */
+} td_eventbuf_t;
+
+
+/* Gathered statistics about the process.  */
+typedef struct td_ta_stats
+{
+  int nthreads;                /* Total number of threads in use.  */
+  int r_concurrency;           /* Concurrency level requested by user.  */
+  int nrunnable_num;           /* Average runnable threads, numerator.  */
+  int nrunnable_den;           /* Average runnable threads, denominator.  */
+  int a_concurrency_num;       /* Achieved concurrency level, numerator.  */
+  int a_concurrency_den;       /* Achieved concurrency level, denominator.  */
+  int nlwps_num;               /* Average number of processes in use,
+                                  numerator.  */
+  int nlwps_den;               /* Average number of processes in use,
+                                  denominator.  */
+  int nidle_num;               /* Average number of idling processes,
+                                  numerator.  */
+  int nidle_den;               /* Average number of idling processes,
+                                  denominator.  */
+} td_ta_stats_t;
+
+
+/* Since Sun's library is based on Solaris threads we have to define a few
+   types to map them to POSIX threads.  */
+typedef pthread_t thread_t;
+typedef pthread_key_t thread_key_t;
+
+
+/* Callback for iteration over threads.  */
+typedef int td_thr_iter_f (const td_thrhandle_t *, void *);
+
+/* Callback for iteration over thread local data.  */
+typedef int td_key_iter_f (thread_key_t, void (*) (void *), void *);
+
+
+
+/* Forward declaration.  This has to be defined by the user.  */
+struct ps_prochandle;
+
+
+/* Information about the thread.  */
+typedef struct td_thrinfo
+{
+  td_thragent_t *ti_ta_p;              /* Process handle.  */
+  unsigned int ti_user_flags;          /* Unused.  */
+  thread_t ti_tid;                     /* Thread ID returned by
+                                          pthread_create().  */
+  char *ti_tls;                                /* Pointer to thread-local data.  */
+  psaddr_t ti_startfunc;               /* Start function passed to
+                                          pthread_create().  */
+  psaddr_t ti_stkbase;                 /* Base of thread's stack.  */
+  long int ti_stksize;                 /* Size of thread's stack.  */
+  psaddr_t ti_ro_area;                 /* Unused.  */
+  int ti_ro_size;                      /* Unused.  */
+  td_thr_state_e ti_state;             /* Thread state.  */
+  unsigned char ti_db_suspended;       /* Nonzero if suspended by debugger. */
+  td_thr_type_e ti_type;               /* Type of the thread (system vs
+                                          user thread).  */
+  intptr_t ti_pc;                      /* Unused.  */
+  intptr_t ti_sp;                      /* Unused.  */
+  short int ti_flags;                  /* Unused.  */
+  int ti_pri;                          /* Thread priority.  */
+  lwpid_t ti_lid;                      /* Kernel PID for this thread.  */
+  sigset_t ti_sigmask;                 /* Signal mask.  */
+  unsigned char ti_traceme;            /* Nonzero if event reporting
+                                          enabled.  */
+  unsigned char ti_preemptflag;                /* Unused.  */
+  unsigned char ti_pirecflag;          /* Unused.  */
+  sigset_t ti_pending;                 /* Set of pending signals.  */
+  td_thr_events_t ti_events;           /* Set of enabled events.  */
+} td_thrinfo_t;
+
+
+
+/* Prototypes for exported library functions.  */
+
+/* Initialize the thread debug support library.  */
+extern td_err_e td_init (void);
+
+/* Historical relict.  Should not be used anymore.  */
+extern td_err_e td_log (void);
+
+/* Return list of symbols the library can request.  */
+extern const char **td_symbol_list (void);
+
+/* Generate new thread debug library handle for process PS.  */
+extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
+
+/* Free resources allocated for TA.  */
+extern td_err_e td_ta_delete (td_thragent_t *__ta);
+
+/* Get number of currently running threads in process associated with TA.  */
+extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np);
+
+/* Return process handle passed in `td_ta_new' for process associated with
+   TA.  */
+extern td_err_e td_ta_get_ph (const td_thragent_t *__ta,
+                             struct ps_prochandle **__ph);
+
+/* Map thread library handle PT to thread debug library handle for process
+   associated with TA and store result in *TH.  */
+extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt,
+                                 td_thrhandle_t *__th);
+
+/* Map process ID LWPID to thread debug library handle for process
+   associated with TA and store result in *TH.  */
+extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
+                                  td_thrhandle_t *__th);
+
+
+/* Call for each thread in a process associated with TA the callback function
+   CALLBACK.  */
+extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
+                               td_thr_iter_f *__callback, void *__cbdata_p,
+                               td_thr_state_e __state, int __ti_pri,
+                               sigset_t *__ti_sigmask_p,
+                               unsigned int __ti_user_flags);
+
+/* Call for each defined thread local data entry the callback function KI.  */
+extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki,
+                               void *__p);
+
+
+/* Get event address for EVENT.  */
+extern td_err_e td_ta_event_addr (const td_thragent_t *__ta,
+                                 td_event_e __event, td_notify_t *__ptr);
+
+/* Enable EVENT in global mask.  */
+extern td_err_e td_ta_set_event (const td_thragent_t *__ta,
+                                td_thr_events_t *__event);
+
+/* Disable EVENT in global mask.  */
+extern td_err_e td_ta_clear_event (const td_thragent_t *__ta,
+                                  td_thr_events_t *__event);
+
+/* Return information about last event.  */
+extern td_err_e td_ta_event_getmsg (const td_thragent_t *__ta,
+                                   td_event_msg_t *__msg);
+
+
+/* Set suggested concurrency level for process associated with TA.  */
+extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level);
+
+
+/* Enable collecting statistics for process associated with TA.  */
+extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
+
+/* Reset statistics.  */
+extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
+
+/* Retrieve statistics from process associated with TA.  */
+extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
+                                td_ta_stats_t *__statsp);
+
+
+/* Validate that TH is a thread handle.  */
+extern td_err_e td_thr_validate (const td_thrhandle_t *__th);
+
+/* Return information about thread TH.  */
+extern td_err_e td_thr_get_info (const td_thrhandle_t *__th,
+                                td_thrinfo_t *__infop);
+
+/* Retrieve floating-point register contents of process running thread TH.  */
+extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th,
+                                 prfpregset_t *__regset);
+
+/* Retrieve general register contents of process running thread TH.  */
+extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th,
+                                prgregset_t __gregs);
+
+/* Retrieve extended register contents of process running thread TH.  */
+extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs);
+
+/* Get size of extended register set of process running thread TH.  */
+extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep);
+
+/* Set floating-point register contents of process running thread TH.  */
+extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th,
+                                 const prfpregset_t *__fpregs);
+
+/* Set general register contents of process running thread TH.  */
+extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th,
+                                prgregset_t __gregs);
+
+/* Set extended register contents of process running thread TH.  */
+extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th,
+                                const void *__addr);
+
+
+/* Get address of the given module's TLS storage area for the given thread.  */
+extern td_err_e td_thr_tlsbase (const td_thrhandle_t *__th,
+                               unsigned long int __modid,
+                               psaddr_t *__base);
+
+/* Get address of thread local variable.  */
+extern td_err_e td_thr_tls_get_addr (const td_thrhandle_t *__th,
+                                    psaddr_t __map_address, size_t __offset,
+                                    psaddr_t *__address);
+
+
+/* Enable reporting for EVENT for thread TH.  */
+extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event);
+
+/* Enable EVENT for thread TH.  */
+extern td_err_e td_thr_set_event (const td_thrhandle_t *__th,
+                                 td_thr_events_t *__event);
+
+/* Disable EVENT for thread TH.  */
+extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th,
+                                   td_thr_events_t *__event);
+
+/* Get event message for thread TH.  */
+extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th,
+                                    td_event_msg_t *__msg);
+
+
+/* Set priority of thread TH.  */
+extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio);
+
+
+/* Set pending signals for thread TH.  */
+extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th,
+                                     unsigned char __n, const sigset_t *__ss);
+
+/* Set signal mask for thread TH.  */
+extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th,
+                                  const sigset_t *__ss);
+
+
+/* Return thread local data associated with key TK in thread TH.  */
+extern td_err_e td_thr_tsd (const td_thrhandle_t *__th,
+                           const thread_key_t __tk, void **__data);
+
+
+/* Suspend execution of thread TH.  */
+extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th);
+
+/* Resume execution of thread TH.  */
+extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th);
+
+#endif /* thread_db.h */
diff --git a/lib/libdss-include/time.h b/lib/libdss-include/time.h
new file mode 100644 (file)
index 0000000..cc93917
--- /dev/null
@@ -0,0 +1,434 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.23 Date and time    <time.h>
+ */
+
+#ifndef        _TIME_H
+
+#if (! defined __need_time_t && !defined __need_clock_t && \
+     ! defined __need_timespec)
+# define _TIME_H       1
+# include <features.h>
+
+__BEGIN_DECLS
+
+#endif
+
+#ifdef _TIME_H
+/* Get size_t and NULL from <stddef.h>.  */
+# define __need_size_t
+# define __need_NULL
+# include <stddef.h>
+
+/* This defines CLOCKS_PER_SEC, which is the number of processor clock
+   ticks per second.  */
+# include <bits/time.h>
+
+/* This is the obsolete POSIX.1-1988 name for the same constant.  */
+# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+#  ifndef CLK_TCK
+#   define CLK_TCK     CLOCKS_PER_SEC
+#  endif
+# endif
+
+#endif /* <time.h> included.  */
+
+#if !defined __clock_t_defined && (defined _TIME_H || defined __need_clock_t)
+# define __clock_t_defined     1
+
+# include <bits/types.h>
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `clock'.  */
+typedef __clock_t clock_t;
+__END_NAMESPACE_STD
+#if defined __USE_XOPEN || defined __USE_POSIX
+__USING_NAMESPACE_STD(clock_t)
+#endif
+
+#endif /* clock_t not defined and <time.h> or need clock_t.  */
+#undef __need_clock_t
+
+#if !defined __time_t_defined && (defined _TIME_H || defined __need_time_t)
+# define __time_t_defined      1
+
+# include <bits/types.h>
+
+__BEGIN_NAMESPACE_STD
+/* Returned by `time'.  */
+typedef __time_t time_t;
+__END_NAMESPACE_STD
+#ifdef __USE_POSIX
+__USING_NAMESPACE_STD(time_t)
+#endif
+
+#endif /* time_t not defined and <time.h> or need time_t.  */
+#undef __need_time_t
+
+#if !defined __clockid_t_defined && \
+   ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_clockid_t)
+# define __clockid_t_defined   1
+
+# include <bits/types.h>
+
+/* Clock ID used in clock and timer functions.  */
+typedef __clockid_t clockid_t;
+
+#endif /* clockid_t not defined and <time.h> or need clockid_t.  */
+#undef __clockid_time_t
+
+#if !defined __timer_t_defined && \
+    ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_timer_t)
+# define __timer_t_defined     1
+
+# include <bits/types.h>
+
+/* Timer ID returned by `timer_create'.  */
+typedef __timer_t timer_t;
+
+#endif /* timer_t not defined and <time.h> or need timer_t.  */
+#undef __need_timer_t
+
+
+#if (!defined __timespec_defined                                       \
+     && ((defined _TIME_H                                              \
+         && (defined __USE_POSIX199309                                 \
+             || defined __USE_ISOC11))                                 \
+        || defined __need_timespec))
+# define __timespec_defined    1
+
+# include <bits/types.h>       /* This defines __time_t for us.  */
+
+/* POSIX.1b structure for a time value.  This is like a `struct timeval' but
+   has nanoseconds instead of microseconds.  */
+struct timespec
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __syscall_slong_t tv_nsec; /* Nanoseconds.  */
+  };
+
+#endif /* timespec not defined and <time.h> or need timespec.  */
+#undef __need_timespec
+
+
+#ifdef _TIME_H
+__BEGIN_NAMESPACE_STD
+/* Used by other time functions.  */
+struct tm
+{
+  int tm_sec;                  /* Seconds.     [0-60] (1 leap second) */
+  int tm_min;                  /* Minutes.     [0-59] */
+  int tm_hour;                 /* Hours.       [0-23] */
+  int tm_mday;                 /* Day.         [1-31] */
+  int tm_mon;                  /* Month.       [0-11] */
+  int tm_year;                 /* Year - 1900.  */
+  int tm_wday;                 /* Day of week. [0-6] */
+  int tm_yday;                 /* Days in year.[0-365] */
+  int tm_isdst;                        /* DST.         [-1/0/1]*/
+
+# ifdef        __USE_MISC
+  long int tm_gmtoff;          /* Seconds east of UTC.  */
+  const char *tm_zone;         /* Timezone abbreviation.  */
+# else
+  long int __tm_gmtoff;                /* Seconds east of UTC.  */
+  const char *__tm_zone;       /* Timezone abbreviation.  */
+# endif
+};
+__END_NAMESPACE_STD
+#if defined __USE_XOPEN || defined __USE_POSIX
+__USING_NAMESPACE_STD(tm)
+#endif
+
+
+# ifdef __USE_POSIX199309
+/* POSIX.1b structure for timer start values and intervals.  */
+struct itimerspec
+  {
+    struct timespec it_interval;
+    struct timespec it_value;
+  };
+
+/* We can use a simple forward declaration.  */
+struct sigevent;
+
+# endif        /* POSIX.1b */
+
+# ifdef __USE_XOPEN2K
+#  ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#   define __pid_t_defined
+#  endif
+# endif
+
+
+# ifdef __USE_ISOC11
+/* Time base values for timespec_get.  */
+# define TIME_UTC 1
+# endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Time used by the program so far (user time + system time).
+   The result / CLOCKS_PER_SECOND is program time in seconds.  */
+extern clock_t clock (void) __THROW;
+
+/* Return the current time and put it in *TIMER if TIMER is not NULL.  */
+extern time_t time (time_t *__timer) __THROW;
+
+/* Return the difference between TIME1 and TIME0.  */
+extern double difftime (time_t __time1, time_t __time0)
+     __THROW __attribute__ ((__const__));
+
+/* Return the `time_t' representation of TP and normalize TP.  */
+extern time_t mktime (struct tm *__tp) __THROW;
+
+
+/* Format TP into S according to FORMAT.
+   Write no more than MAXSIZE characters and return the number
+   of characters written, or 0 if it would exceed MAXSIZE.  */
+extern size_t strftime (char *__restrict __s, size_t __maxsize,
+                       const char *__restrict __format,
+                       const struct tm *__restrict __tp) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_XOPEN
+/* Parse S according to FORMAT and store binary time information in TP.
+   The return value is a pointer to the first unparsed character in S.  */
+extern char *strptime (const char *__restrict __s,
+                      const char *__restrict __fmt, struct tm *__tp)
+     __THROW;
+# endif
+
+# ifdef __USE_XOPEN2K8
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+# include <xlocale.h>
+
+extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+                         const char *__restrict __format,
+                         const struct tm *__restrict __tp,
+                         __locale_t __loc) __THROW;
+# endif
+
+# ifdef __USE_GNU
+extern char *strptime_l (const char *__restrict __s,
+                        const char *__restrict __fmt, struct tm *__tp,
+                        __locale_t __loc) __THROW;
+# endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Return the `struct tm' representation of *TIMER
+   in Universal Coordinated Time (aka Greenwich Mean Time).  */
+extern struct tm *gmtime (const time_t *__timer) __THROW;
+
+/* Return the `struct tm' representation
+   of *TIMER in the local timezone.  */
+extern struct tm *localtime (const time_t *__timer) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_POSIX
+/* Return the `struct tm' representation of *TIMER in UTC,
+   using *TP to store the result.  */
+extern struct tm *gmtime_r (const time_t *__restrict __timer,
+                           struct tm *__restrict __tp) __THROW;
+
+/* Return the `struct tm' representation of *TIMER in local time,
+   using *TP to store the result.  */
+extern struct tm *localtime_r (const time_t *__restrict __timer,
+                              struct tm *__restrict __tp) __THROW;
+# endif        /* POSIX */
+
+__BEGIN_NAMESPACE_STD
+/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+   that is the representation of TP in this format.  */
+extern char *asctime (const struct tm *__tp) __THROW;
+
+/* Equivalent to `asctime (localtime (timer))'.  */
+extern char *ctime (const time_t *__timer) __THROW;
+__END_NAMESPACE_STD
+
+# ifdef __USE_POSIX
+/* Reentrant versions of the above functions.  */
+
+/* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
+   that is the representation of TP in this format.  */
+extern char *asctime_r (const struct tm *__restrict __tp,
+                       char *__restrict __buf) __THROW;
+
+/* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
+extern char *ctime_r (const time_t *__restrict __timer,
+                     char *__restrict __buf) __THROW;
+# endif        /* POSIX */
+
+
+/* Defined in localtime.c.  */
+extern char *__tzname[2];      /* Current timezone names.  */
+extern int __daylight;         /* If daylight-saving time is ever in use.  */
+extern long int __timezone;    /* Seconds west of UTC.  */
+
+
+# ifdef        __USE_POSIX
+/* Same as above.  */
+extern char *tzname[2];
+
+/* Set time conversion information from the TZ environment variable.
+   If TZ is not defined, a locale-dependent default is used.  */
+extern void tzset (void) __THROW;
+# endif
+
+# if defined __USE_MISC || defined __USE_XOPEN
+extern int daylight;
+extern long int timezone;
+# endif
+
+# ifdef __USE_MISC
+/* Set the system time to *WHEN.
+   This call is restricted to the superuser.  */
+extern int stime (const time_t *__when) __THROW;
+# endif
+
+
+/* Nonzero if YEAR is a leap year (every 4 years,
+   except every 100th isn't, and every 400th is).  */
+# define __isleap(year)        \
+  ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
+
+
+# ifdef __USE_MISC
+/* Miscellaneous functions many Unices inherited from the public domain
+   localtime package.  These are included only for compatibility.  */
+
+/* Like `mktime', but for TP represents Universal Time, not local time.  */
+extern time_t timegm (struct tm *__tp) __THROW;
+
+/* Another name for `mktime'.  */
+extern time_t timelocal (struct tm *__tp) __THROW;
+
+/* Return the number of days in YEAR.  */
+extern int dysize (int __year) __THROW  __attribute__ ((__const__));
+# endif
+
+
+# ifdef __USE_POSIX199309
+/* Pause execution for a number of nanoseconds.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int nanosleep (const struct timespec *__requested_time,
+                     struct timespec *__remaining);
+
+
+/* Get resolution of clock CLOCK_ID.  */
+extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
+
+/* Get current value of clock CLOCK_ID and store it in TP.  */
+extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
+
+/* Set clock CLOCK_ID to value TP.  */
+extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
+     __THROW;
+
+#  ifdef __USE_XOPEN2K
+/* High-resolution sleep with the specified clock.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+                           const struct timespec *__req,
+                           struct timespec *__rem);
+
+/* Return clock ID for CPU-time clock.  */
+extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW;
+#  endif
+
+
+/* Create new per-process timer using CLOCK_ID.  */
+extern int timer_create (clockid_t __clock_id,
+                        struct sigevent *__restrict __evp,
+                        timer_t *__restrict __timerid) __THROW;
+
+/* Delete timer TIMERID.  */
+extern int timer_delete (timer_t __timerid) __THROW;
+
+/* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
+extern int timer_settime (timer_t __timerid, int __flags,
+                         const struct itimerspec *__restrict __value,
+                         struct itimerspec *__restrict __ovalue) __THROW;
+
+/* Get current value of timer TIMERID and store it in VALUE.  */
+extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
+     __THROW;
+
+/* Get expiration overrun for timer TIMERID.  */
+extern int timer_getoverrun (timer_t __timerid) __THROW;
+# endif
+
+
+# ifdef __USE_ISOC11
+/* Set TS to calendar time based in time base BASE.  */
+extern int timespec_get (struct timespec *__ts, int __base)
+     __THROW __nonnull ((1));
+# endif
+
+
+# ifdef __USE_XOPEN_EXTENDED
+/* Set to one of the following values to indicate an error.
+     1  the DATEMSK environment variable is null or undefined,
+     2  the template file cannot be opened for reading,
+     3  failed to get file status information,
+     4  the template file is not a regular file,
+     5  an error is encountered while reading the template file,
+     6  memory allication failed (not enough memory available),
+     7  there is no line in the template that matches the input,
+     8  invalid input specification Example: February 31 or a time is
+       specified that can not be represented in a time_t (representing
+       the time in seconds since 00:00:00 UTC, January 1, 1970) */
+extern int getdate_err;
+
+/* Parse the given string as a date specification and return a value
+   representing the value.  The templates from the file identified by
+   the environment variable DATEMSK are used.  In case of an error
+   `getdate_err' is set.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct tm *getdate (const char *__string);
+# endif
+
+# ifdef __USE_GNU
+/* Since `getdate' is not reentrant because of the use of `getdate_err'
+   and the static buffer to return the result in, we provide a thread-safe
+   variant.  The functionality is the same.  The result is returned in
+   the buffer pointed to by RESBUFP and in case of an error the return
+   value is != 0 with the same values as given above for `getdate_err'.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getdate_r (const char *__restrict __string,
+                     struct tm *__restrict __resbufp);
+# endif
+
+__END_DECLS
+
+#endif /* <time.h> included.  */
+
+#endif /* <time.h> not already included.  */
diff --git a/lib/libdss-include/ttyent.h b/lib/libdss-include/ttyent.h
new file mode 100644 (file)
index 0000000..fe418a5
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ttyent.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef        _TTYENT_H
+#define        _TTYENT_H       1
+
+#include <features.h>
+
+#define        _PATH_TTYS      "/etc/ttys"
+
+#define        _TTYS_OFF       "off"
+#define        _TTYS_ON        "on"
+#define        _TTYS_SECURE    "secure"
+#define        _TTYS_WINDOW    "window"
+
+struct ttyent {
+       char    *ty_name;       /* terminal device name */
+       char    *ty_getty;      /* command to execute, usually getty */
+       char    *ty_type;       /* terminal type for termcap */
+#define        TTY_ON          0x01    /* enable logins (start ty_getty program) */
+#define        TTY_SECURE      0x02    /* allow uid of 0 to login */
+       int     ty_status;      /* status flags */
+       char    *ty_window;     /* command to start up window manager */
+       char    *ty_comment;    /* comment field */
+};
+
+
+__BEGIN_DECLS
+
+extern struct ttyent *getttyent (void) __THROW;
+extern struct ttyent *getttynam (const char *__tty) __THROW;
+extern int setttyent (void) __THROW;
+extern int endttyent (void) __THROW;
+
+__END_DECLS
+
+#endif /* ttyent.h */
diff --git a/lib/libdss-include/uchar.h b/lib/libdss-include/uchar.h
new file mode 100644 (file)
index 0000000..ce92b25
--- /dev/null
@@ -0,0 +1,83 @@
+/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *      ISO C11 Standard: 7.28
+ *     Unicode utilities       <uchar.h>
+ */
+
+#ifndef _UCHAR_H
+#define _UCHAR_H       1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+#define __need_mbstate_t
+#include <wchar.h>
+
+#ifndef __mbstate_t_defined
+__BEGIN_NAMESPACE_C99
+/* Public type.  */
+typedef __mbstate_t mbstate_t;
+__END_NAMESPACE_C99
+# define __mbstate_t_defined 1
+#endif
+
+
+#if defined __GNUC__ && !defined __USE_ISOCXX11
+/* Define the 16-bit and 32-bit character types.  Use the information
+   provided by the compiler.  */
+# if !defined __CHAR16_TYPE__ || !defined __CHAR32_TYPE__
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ < 201000L
+#   error "<uchar.h> requires ISO C11 mode"
+#  else
+#   error "definitions of __CHAR16_TYPE__ and/or __CHAR32_TYPE__ missing"
+#  endif
+# endif
+typedef __CHAR16_TYPE__ char16_t;
+typedef __CHAR32_TYPE__ char32_t;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Write char16_t representation of multibyte character pointed
+   to by S to PC16.  */
+extern size_t mbrtoc16 (char16_t *__restrict __pc16,
+                       const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of char16_t C16 to S.  */
+extern size_t c16rtomb (char *__restrict __s, char16_t __c16,
+                       mbstate_t *__restrict __ps) __THROW;
+
+
+
+/* Write char32_t representation of multibyte character pointed
+   to by S to PC32.  */
+extern size_t mbrtoc32 (char32_t *__restrict __pc32,
+                       const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of char32_t C32 to S.  */
+extern size_t c32rtomb (char *__restrict __s, char32_t __c32,
+                       mbstate_t *__restrict __ps) __THROW;
+
+__END_DECLS
+
+#endif /* uchar.h */
diff --git a/lib/libdss-include/ucontext.h b/lib/libdss-include/ucontext.h
new file mode 100644 (file)
index 0000000..813a24d
--- /dev/null
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* System V ABI compliant user-level context switching support.  */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H    1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures.  */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP.  */
+extern int getcontext (ucontext_t *__ucp) __THROWNL;
+
+/* Set user context from information of variable pointed to by UCP.  */
+extern int setcontext (const ucontext_t *__ucp) __THROWNL;
+
+/* Save current context in context variable pointed to by OUCP and set
+   context from variable pointed to by UCP.  */
+extern int swapcontext (ucontext_t *__restrict __oucp,
+                       const ucontext_t *__restrict __ucp) __THROWNL;
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+   and the ARGC-1 parameters following ARGC when the context is used
+   the next time in `setcontext' or `swapcontext'.
+
+   We cannot say anything about the parameters FUNC takes; `void'
+   is as good as any other choice.  */
+extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
+                        int __argc, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/lib/libdss-include/ulimit.h b/lib/libdss-include/ulimit.h
new file mode 100644 (file)
index 0000000..aefc1b9
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ULIMIT_H
+#define _ULIMIT_H      1
+
+#include <features.h>
+
+/* Constants used as the first parameter for `ulimit'.  They denote limits
+   which can be set or retrieved using this function.  */
+enum
+{
+  UL_GETFSIZE = 1,                     /* Return limit on the size of a file,
+                                          in units of 512 bytes.  */
+#define UL_GETFSIZE    UL_GETFSIZE
+  UL_SETFSIZE,                         /* Set limit on the size of a file to
+                                          second argument.  */
+#define UL_SETFSIZE    UL_SETFSIZE
+  __UL_GETMAXBRK,                      /* Return the maximum possible address
+                                          of the data segment.  */
+  __UL_GETOPENMAX                      /* Return the maximum number of files
+                                          that the calling process can open.*/
+};
+
+
+__BEGIN_DECLS
+
+/* Control process limits according to CMD.  */
+extern long int ulimit (int __cmd, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ulimit.h */
diff --git a/lib/libdss-include/unistd.h b/lib/libdss-include/unistd.h
new file mode 100644 (file)
index 0000000..405638c
--- /dev/null
@@ -0,0 +1,1156 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 2.10 Symbolic Constants         <unistd.h>
+ */
+
+#ifndef        _UNISTD_H
+#define        _UNISTD_H       1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* These may be used to determine what facilities are present at compile time.
+   Their values can be obtained at run time from `sysconf'.  */
+
+#ifdef __USE_XOPEN2K8
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 2008.  */
+# define _POSIX_VERSION        200809L
+#elif defined __USE_XOPEN2K
+/* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001.  */
+# define _POSIX_VERSION        200112L
+#elif defined __USE_POSIX199506
+/* POSIX Standard approved as ISO/IEC 9945-1 as of June 1995.  */
+# define _POSIX_VERSION        199506L
+#elif defined __USE_POSIX199309
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1993.  */
+# define _POSIX_VERSION        199309L
+#else
+/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1990.  */
+# define _POSIX_VERSION        199009L
+#endif
+
+/* These are not #ifdef __USE_POSIX2 because they are
+   in the theoretically application-owned namespace.  */
+
+#ifdef __USE_XOPEN2K8
+# define __POSIX2_THIS_VERSION 200809L
+/* The utilities on GNU systems also correspond to this version.  */
+#elif defined __USE_XOPEN2K
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 200112L
+#elif defined __USE_POSIX199506
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 199506L
+#else
+/* The utilities on GNU systems also correspond to this version.  */
+# define __POSIX2_THIS_VERSION 199209L
+#endif
+
+/* The utilities on GNU systems also correspond to this version.  */
+#define _POSIX2_VERSION        __POSIX2_THIS_VERSION
+
+/* This symbol was required until the 2001 edition of POSIX.  */
+#define        _POSIX2_C_VERSION       __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   C Language Bindings Option.  */
+#define        _POSIX2_C_BIND  __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   C Language Development Utilities Option.  */
+#define        _POSIX2_C_DEV   __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   Software Development Utilities Option.  */
+#define        _POSIX2_SW_DEV  __POSIX2_THIS_VERSION
+
+/* If defined, the implementation supports the
+   creation of locales with the localedef utility.  */
+#define _POSIX2_LOCALEDEF       __POSIX2_THIS_VERSION
+
+/* X/Open version number to which the library conforms.  It is selectable.  */
+#ifdef __USE_XOPEN2K8
+# define _XOPEN_VERSION        700
+#elif defined __USE_XOPEN2K
+# define _XOPEN_VERSION        600
+#elif defined __USE_UNIX98
+# define _XOPEN_VERSION        500
+#else
+# define _XOPEN_VERSION        4
+#endif
+
+/* Commands and utilities from XPG4 are available.  */
+#define _XOPEN_XCU_VERSION     4
+
+/* We are compatible with the old published standards as well.  */
+#define _XOPEN_XPG2    1
+#define _XOPEN_XPG3    1
+#define _XOPEN_XPG4    1
+
+/* The X/Open Unix extensions are available.  */
+#define _XOPEN_UNIX    1
+
+/* Encryption is present.  */
+#define        _XOPEN_CRYPT    1
+
+/* The enhanced internationalization capabilities according to XPG4.2
+   are present.  */
+#define        _XOPEN_ENH_I18N 1
+
+/* The legacy interfaces are also available.  */
+#define _XOPEN_LEGACY  1
+
+
+/* Get values of POSIX options:
+
+   If these symbols are defined, the corresponding features are
+   always available.  If not, they may be available sometimes.
+   The current values can be obtained with `sysconf'.
+
+   _POSIX_JOB_CONTROL          Job control is supported.
+   _POSIX_SAVED_IDS            Processes have a saved set-user-ID
+                               and a saved set-group-ID.
+   _POSIX_REALTIME_SIGNALS     Real-time, queued signals are supported.
+   _POSIX_PRIORITY_SCHEDULING  Priority scheduling is supported.
+   _POSIX_TIMERS               POSIX.4 clocks and timers are supported.
+   _POSIX_ASYNCHRONOUS_IO      Asynchronous I/O is supported.
+   _POSIX_PRIORITIZED_IO       Prioritized asynchronous I/O is supported.
+   _POSIX_SYNCHRONIZED_IO      Synchronizing file data is supported.
+   _POSIX_FSYNC                        The fsync function is present.
+   _POSIX_MAPPED_FILES         Mapping of files to memory is supported.
+   _POSIX_MEMLOCK              Locking of all memory is supported.
+   _POSIX_MEMLOCK_RANGE                Locking of ranges of memory is supported.
+   _POSIX_MEMORY_PROTECTION    Setting of memory protections is supported.
+   _POSIX_MESSAGE_PASSING      POSIX.4 message queues are supported.
+   _POSIX_SEMAPHORES           POSIX.4 counting semaphores are supported.
+   _POSIX_SHARED_MEMORY_OBJECTS        POSIX.4 shared memory objects are supported.
+   _POSIX_THREADS              POSIX.1c pthreads are supported.
+   _POSIX_THREAD_ATTR_STACKADDR        Thread stack address attribute option supported.
+   _POSIX_THREAD_ATTR_STACKSIZE        Thread stack size attribute option supported.
+   _POSIX_THREAD_SAFE_FUNCTIONS        Thread-safe functions are supported.
+   _POSIX_THREAD_PRIORITY_SCHEDULING
+                               POSIX.1c thread execution scheduling supported.
+   _POSIX_THREAD_PRIO_INHERIT  Thread priority inheritance option supported.
+   _POSIX_THREAD_PRIO_PROTECT  Thread priority protection option supported.
+   _POSIX_THREAD_PROCESS_SHARED        Process-shared synchronization supported.
+   _POSIX_PII                  Protocol-independent interfaces are supported.
+   _POSIX_PII_XTI              XTI protocol-indep. interfaces are supported.
+   _POSIX_PII_SOCKET           Socket protocol-indep. interfaces are supported.
+   _POSIX_PII_INTERNET         Internet family of protocols supported.
+   _POSIX_PII_INTERNET_STREAM  Connection-mode Internet protocol supported.
+   _POSIX_PII_INTERNET_DGRAM   Connectionless Internet protocol supported.
+   _POSIX_PII_OSI              ISO/OSI family of protocols supported.
+   _POSIX_PII_OSI_COTS         Connection-mode ISO/OSI service supported.
+   _POSIX_PII_OSI_CLTS         Connectionless ISO/OSI service supported.
+   _POSIX_POLL                 Implementation supports `poll' function.
+   _POSIX_SELECT               Implementation supports `select' and `pselect'.
+
+   _XOPEN_REALTIME             X/Open realtime support is available.
+   _XOPEN_REALTIME_THREADS     X/Open realtime thread support is available.
+   _XOPEN_SHM                  Shared memory interface according to XPG4.2.
+
+   _XBS5_ILP32_OFF32           Implementation provides environment with 32-bit
+                               int, long, pointer, and off_t types.
+   _XBS5_ILP32_OFFBIG          Implementation provides environment with 32-bit
+                               int, long, and pointer and off_t with at least
+                               64 bits.
+   _XBS5_LP64_OFF64            Implementation provides environment with 32-bit
+                               int, and 64-bit long, pointer, and off_t types.
+   _XBS5_LPBIG_OFFBIG          Implementation provides environment with at
+                               least 32 bits int and long, pointer, and off_t
+                               with at least 64 bits.
+
+   If any of these symbols is defined as -1, the corresponding option is not
+   true for any file.  If any is defined as other than -1, the corresponding
+   option is true for all files.  If a symbol is not defined at all, the value
+   for a specific file can be obtained from `pathconf' and `fpathconf'.
+
+   _POSIX_CHOWN_RESTRICTED     Only the super user can use `chown' to change
+                               the owner of a file.  `chown' can only be used
+                               to change the group ID of a file to a group of
+                               which the calling process is a member.
+   _POSIX_NO_TRUNC             Pathname components longer than
+                               NAME_MAX generate an error.
+   _POSIX_VDISABLE             If defined, if the value of an element of the
+                               `c_cc' member of `struct termios' is
+                               _POSIX_VDISABLE, no character will have the
+                               effect associated with that element.
+   _POSIX_SYNC_IO              Synchronous I/O may be performed.
+   _POSIX_ASYNC_IO             Asynchronous I/O may be performed.
+   _POSIX_PRIO_IO              Prioritized Asynchronous I/O may be performed.
+
+   Support for the Large File Support interface is not generally available.
+   If it is available the following constants are defined to one.
+   _LFS64_LARGEFILE            Low-level I/O supports large files.
+   _LFS64_STDIO                        Standard I/O supports large files.
+   */
+
+#include <bits/posix_opt.h>
+
+/* Get the environment definitions from Unix98.  */
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+# include <bits/environments.h>
+#endif
+
+/* Standard file descriptors.  */
+#define        STDIN_FILENO    0       /* Standard input.  */
+#define        STDOUT_FILENO   1       /* Standard output.  */
+#define        STDERR_FILENO   2       /* Standard error output.  */
+
+
+/* All functions that are not declared anywhere else.  */
+
+#include <bits/types.h>
+
+#ifndef        __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+#define        __need_size_t
+#define __need_NULL
+#include <stddef.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+/* The Single Unix specification says that some more types are
+   available here.  */
+# ifndef __gid_t_defined
+typedef __gid_t gid_t;
+#  define __gid_t_defined
+# endif
+
+# ifndef __uid_t_defined
+typedef __uid_t uid_t;
+#  define __uid_t_defined
+# endif
+
+# ifndef __off_t_defined
+#  ifndef __USE_FILE_OFFSET64
+typedef __off_t off_t;
+#  else
+typedef __off64_t off_t;
+#  endif
+#  define __off_t_defined
+# endif
+# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
+typedef __off64_t off64_t;
+#  define __off64_t_defined
+# endif
+
+# ifndef __useconds_t_defined
+typedef __useconds_t useconds_t;
+#  define __useconds_t_defined
+# endif
+
+# ifndef __pid_t_defined
+typedef __pid_t pid_t;
+#  define __pid_t_defined
+# endif
+#endif /* X/Open */
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+# ifndef __intptr_t_defined
+typedef __intptr_t intptr_t;
+#  define __intptr_t_defined
+# endif
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+# ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+#  define __socklen_t_defined
+# endif
+#endif
+
+/* Values for the second argument to access.
+   These may be OR'd together.  */
+#define        R_OK    4               /* Test for read permission.  */
+#define        W_OK    2               /* Test for write permission.  */
+#define        X_OK    1               /* Test for execute permission.  */
+#define        F_OK    0               /* Test for existence.  */
+
+/* Test for access to NAME using the real UID and real GID.  */
+extern int access (const char *__name, int __type) __THROW __nonnull ((1));
+
+#ifdef __USE_GNU
+/* Test for access to NAME using the effective UID and GID
+   (as normal file operations use).  */
+extern int euidaccess (const char *__name, int __type)
+     __THROW __nonnull ((1));
+
+/* An alias for `euidaccess', used by some other systems.  */
+extern int eaccess (const char *__name, int __type)
+     __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_ATFILE
+/* Test for access to FILE relative to the directory FD is open on.
+   If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess',
+   otherwise use real IDs like `access'.  */
+extern int faccessat (int __fd, const char *__file, int __type, int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use GNU.  */
+
+
+/* Values for the WHENCE argument to lseek.  */
+#ifndef        _STDIO_H                /* <stdio.h> has the same definitions.  */
+# define SEEK_SET      0       /* Seek from beginning of file.  */
+# define SEEK_CUR      1       /* Seek from current position.  */
+# define SEEK_END      2       /* Seek from end of file.  */
+# ifdef __USE_GNU
+#  define SEEK_DATA    3       /* Seek to next data.  */
+#  define SEEK_HOLE    4       /* Seek to next hole.  */
+# endif
+#endif
+
+#if defined __USE_MISC && !defined L_SET
+/* Old BSD names for the same constants; just for compatibility.  */
+# define L_SET         SEEK_SET
+# define L_INCR                SEEK_CUR
+# define L_XTND                SEEK_END
+#endif
+
+
+/* Move FD's file position to OFFSET bytes from the
+   beginning of the file (if WHENCE is SEEK_SET),
+   the current position (if WHENCE is SEEK_CUR),
+   or the end of the file (if WHENCE is SEEK_END).
+   Return the new file position.  */
+#ifndef __USE_FILE_OFFSET64
+extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
+#else
+# ifdef __REDIRECT_NTH
+extern __off64_t __REDIRECT_NTH (lseek,
+                                (int __fd, __off64_t __offset, int __whence),
+                                lseek64);
+# else
+#  define lseek lseek64
+# endif
+#endif
+#ifdef __USE_LARGEFILE64
+extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
+     __THROW;
+#endif
+
+/* Close the file descriptor FD.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int close (int __fd);
+
+/* Read NBYTES into BUF from FD.  Return the
+   number read, -1 for errors or 0 for EOF.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
+
+/* Write N bytes of BUF to FD.  Return the number written, or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+# ifndef __USE_FILE_OFFSET64
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+   changing the file pointer.  Return the number read, -1 for errors
+   or 0 for EOF.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
+                     __off_t __offset) __wur;
+
+/* Write N bytes of BUF to FD at the given position OFFSET without
+   changing the file pointer.  Return the number written, or -1.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
+                      __off_t __offset) __wur;
+# else
+#  ifdef __REDIRECT
+extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes,
+                                  __off64_t __offset),
+                          pread64) __wur;
+extern ssize_t __REDIRECT (pwrite, (int __fd, const void *__buf,
+                                   size_t __nbytes, __off64_t __offset),
+                          pwrite64) __wur;
+#  else
+#   define pread pread64
+#   define pwrite pwrite64
+#  endif
+# endif
+
+# ifdef __USE_LARGEFILE64
+/* Read NBYTES into BUF from FD at the given position OFFSET without
+   changing the file pointer.  Return the number read, -1 for errors
+   or 0 for EOF.  */
+extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
+                       __off64_t __offset) __wur;
+/* Write N bytes of BUF to FD at the given position OFFSET without
+   changing the file pointer.  Return the number written, or -1.  */
+extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
+                        __off64_t __offset) __wur;
+# endif
+#endif
+
+/* Create a one-way communication channel (pipe).
+   If successful, two file descriptors are stored in PIPEDES;
+   bytes written on PIPEDES[1] can be read from PIPEDES[0].
+   Returns 0 if successful, -1 if not.  */
+extern int pipe (int __pipedes[2]) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Same as pipe but apply flags passed in FLAGS to the new file
+   descriptors.  */
+extern int pipe2 (int __pipedes[2], int __flags) __THROW __wur;
+#endif
+
+/* Schedule an alarm.  In SECONDS seconds, the process will get a SIGALRM.
+   If SECONDS is zero, any currently scheduled alarm will be cancelled.
+   The function returns the number of seconds remaining until the last
+   alarm scheduled would have signaled, or zero if there wasn't one.
+   There is no return value to indicate an error, but you can set `errno'
+   to 0 and check its value after calling `alarm', and this might tell you.
+   The signal may come late due to processor scheduling.  */
+extern unsigned int alarm (unsigned int __seconds) __THROW;
+
+/* Make the process sleep for SECONDS seconds, or until a signal arrives
+   and is not ignored.  The function returns the number of seconds less
+   than SECONDS which it actually slept (thus zero if it slept the full time).
+   If a signal handler does a `longjmp' or modifies the handling of the
+   SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
+   signal afterwards is undefined.  There is no return value to indicate
+   error, but if `sleep' returns SECONDS, it probably didn't work.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern unsigned int sleep (unsigned int __seconds);
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Set an alarm to go off (generating a SIGALRM signal) in VALUE
+   microseconds.  If INTERVAL is nonzero, when the alarm goes off, the
+   timer is reset to go off every INTERVAL microseconds thereafter.
+   Returns the number of microseconds remaining before the alarm.  */
+extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
+     __THROW;
+
+/* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
+   or ignored.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int usleep (__useconds_t __useconds);
+#endif
+
+
+/* Suspend the process until a signal arrives.
+   This always returns -1 and sets `errno' to EINTR.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int pause (void);
+
+
+/* Change the owner and group of FILE.  */
+extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
+     __THROW __nonnull ((1)) __wur;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Change the owner and group of the file that FD is open on.  */
+extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW __wur;
+
+
+/* Change owner and group of FILE, if it is a symbolic
+   link the ownership of the symbolic link is changed.  */
+extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
+     __THROW __nonnull ((1)) __wur;
+
+#endif /* Use X/Open Unix.  */
+
+#ifdef __USE_ATFILE
+/* Change the owner and group of FILE relative to the directory FD is open
+   on.  */
+extern int fchownat (int __fd, const char *__file, __uid_t __owner,
+                    __gid_t __group, int __flag)
+     __THROW __nonnull ((2)) __wur;
+#endif /* Use GNU.  */
+
+/* Change the process's working directory to PATH.  */
+extern int chdir (const char *__path) __THROW __nonnull ((1)) __wur;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Change the process's working directory to the one FD is open on.  */
+extern int fchdir (int __fd) __THROW __wur;
+#endif
+
+/* Get the pathname of the current working directory,
+   and put it in SIZE bytes of BUF.  Returns NULL if the
+   directory couldn't be determined or SIZE was too small.
+   If successful, returns BUF.  In GNU, if BUF is NULL,
+   an array is allocated with `malloc'; the array is SIZE
+   bytes long, unless SIZE == 0, in which case it is as
+   big as necessary.  */
+extern char *getcwd (char *__buf, size_t __size) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the current directory name.
+   If the environment variable `PWD' is set, and its value is correct,
+   that value is used.  */
+extern char *get_current_dir_name (void) __THROW;
+#endif
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Put the absolute pathname of the current working directory in BUF.
+   If successful, return BUF.  If not, put an error message in
+   BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */
+extern char *getwd (char *__buf)
+     __THROW __nonnull ((1)) __attribute_deprecated__ __wur;
+#endif
+
+
+/* Duplicate FD, returning a new file descriptor on the same file.  */
+extern int dup (int __fd) __THROW __wur;
+
+/* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
+extern int dup2 (int __fd, int __fd2) __THROW;
+
+#ifdef __USE_GNU
+/* Duplicate FD to FD2, closing FD2 and making it open on the same
+   file while setting flags according to FLAGS.  */
+extern int dup3 (int __fd, int __fd2, int __flags) __THROW;
+#endif
+
+/* NULL-terminated array of "NAME=VALUE" environment variables.  */
+extern char **__environ;
+#ifdef __USE_GNU
+extern char **environ;
+#endif
+
+
+/* Replace the current process, executing PATH with arguments ARGV and
+   environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
+extern int execve (const char *__path, char *const __argv[],
+                  char *const __envp[]) __THROW __nonnull ((1, 2));
+
+#ifdef __USE_XOPEN2K8
+/* Execute the file FD refers to, overlaying the running program image.
+   ARGV and ENVP are passed to the new program, as for `execve'.  */
+extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
+     __THROW __nonnull ((2));
+#endif
+
+
+/* Execute PATH with arguments ARGV and environment from `environ'.  */
+extern int execv (const char *__path, char *const __argv[])
+     __THROW __nonnull ((1, 2));
+
+/* Execute PATH with all arguments after PATH until a NULL pointer,
+   and the argument after that for environment.  */
+extern int execle (const char *__path, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+/* Execute PATH with all arguments after PATH until
+   a NULL pointer and environment from `environ'.  */
+extern int execl (const char *__path, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+extern int execvp (const char *__file, char *const __argv[])
+     __THROW __nonnull ((1, 2));
+
+/* Execute FILE, searching in the `PATH' environment variable if
+   it contains no slashes, with all arguments after FILE until a
+   NULL pointer and environment from `environ'.  */
+extern int execlp (const char *__file, const char *__arg, ...)
+     __THROW __nonnull ((1, 2));
+
+#ifdef __USE_GNU
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+extern int execvpe (const char *__file, char *const __argv[],
+                   char *const __envp[])
+     __THROW __nonnull ((1, 2));
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* Add INC to priority of the current process.  */
+extern int nice (int __inc) __THROW __wur;
+#endif
+
+
+/* Terminate program execution with the low-order 8 bits of STATUS.  */
+extern void _exit (int __status) __attribute__ ((__noreturn__));
+
+
+/* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
+   the `_SC_*' symbols for the NAME argument to `sysconf';
+   and the `_CS_*' symbols for the NAME argument to `confstr'.  */
+#include <bits/confname.h>
+
+/* Get file-specific configuration information about PATH.  */
+extern long int pathconf (const char *__path, int __name)
+     __THROW __nonnull ((1));
+
+/* Get file-specific configuration about descriptor FD.  */
+extern long int fpathconf (int __fd, int __name) __THROW;
+
+/* Get the value of the system variable NAME.  */
+extern long int sysconf (int __name) __THROW;
+
+#ifdef __USE_POSIX2
+/* Get the value of the string-valued system variable NAME.  */
+extern size_t confstr (int __name, char *__buf, size_t __len) __THROW;
+#endif
+
+
+/* Get the process ID of the calling process.  */
+extern __pid_t getpid (void) __THROW;
+
+/* Get the process ID of the calling process's parent.  */
+extern __pid_t getppid (void) __THROW;
+
+/* Get the process group ID of the calling process.  */
+extern __pid_t getpgrp (void) __THROW;
+
+/* Get the process group ID of process PID.  */
+extern __pid_t __getpgid (__pid_t __pid) __THROW;
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+extern __pid_t getpgid (__pid_t __pid) __THROW;
+#endif
+
+
+/* Set the process group ID of the process matching PID to PGID.
+   If PID is zero, the current process's process group ID is set.
+   If PGID is zero, the process ID of the process is used.  */
+extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Both System V and BSD have `setpgrp' functions, but with different
+   calling conventions.  The BSD function is the same as POSIX.1 `setpgid'
+   (above).  The System V function takes no arguments and puts the calling
+   process in its on group like `setpgid (0, 0)'.
+
+   New programs should always use `setpgid' instead.
+
+   GNU provides the POSIX.1 function.  */
+
+/* Set the process group ID of the calling process to its own PID.
+   This is exactly the same as `setpgid (0, 0)'.  */
+extern int setpgrp (void) __THROW;
+
+#endif /* Use misc or X/Open.  */
+
+/* Create a new session with the calling process as its leader.
+   The process group IDs of the session and the calling process
+   are set to the process ID of the calling process, which is returned.  */
+extern __pid_t setsid (void) __THROW;
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Return the session ID of the given process.  */
+extern __pid_t getsid (__pid_t __pid) __THROW;
+#endif
+
+/* Get the real user ID of the calling process.  */
+extern __uid_t getuid (void) __THROW;
+
+/* Get the effective user ID of the calling process.  */
+extern __uid_t geteuid (void) __THROW;
+
+/* Get the real group ID of the calling process.  */
+extern __gid_t getgid (void) __THROW;
+
+/* Get the effective group ID of the calling process.  */
+extern __gid_t getegid (void) __THROW;
+
+/* If SIZE is zero, return the number of supplementary groups
+   the calling process is in.  Otherwise, fill in the group IDs
+   of its supplementary groups in LIST and return the number written.  */
+extern int getgroups (int __size, __gid_t __list[]) __THROW __wur;
+
+#ifdef __USE_GNU
+/* Return nonzero iff the calling process is in group GID.  */
+extern int group_member (__gid_t __gid) __THROW;
+#endif
+
+/* Set the user ID of the calling process to UID.
+   If the calling process is the super-user, set the real
+   and effective user IDs, and the saved set-user-ID to UID;
+   if not, the effective user ID is set to UID.  */
+extern int setuid (__uid_t __uid) __THROW __wur;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Set the real user ID of the calling process to RUID,
+   and the effective user ID of the calling process to EUID.  */
+extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set the effective user ID of the calling process to UID.  */
+extern int seteuid (__uid_t __uid) __THROW __wur;
+#endif /* Use POSIX.1-2001.  */
+
+/* Set the group ID of the calling process to GID.
+   If the calling process is the super-user, set the real
+   and effective group IDs, and the saved set-group-ID to GID;
+   if not, the effective group ID is set to GID.  */
+extern int setgid (__gid_t __gid) __THROW __wur;
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Set the real group ID of the calling process to RGID,
+   and the effective group ID of the calling process to EGID.  */
+extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set the effective group ID of the calling process to GID.  */
+extern int setegid (__gid_t __gid) __THROW __wur;
+#endif /* Use POSIX.1-2001.  */
+
+#ifdef __USE_GNU
+/* Fetch the real user ID, effective user ID, and saved-set user ID,
+   of the calling process.  */
+extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
+     __THROW;
+
+/* Fetch the real group ID, effective group ID, and saved-set group ID,
+   of the calling process.  */
+extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
+     __THROW;
+
+/* Set the real user ID, effective user ID, and saved-set user ID,
+   of the calling process to RUID, EUID, and SUID, respectively.  */
+extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
+     __THROW __wur;
+
+/* Set the real group ID, effective group ID, and saved-set group ID,
+   of the calling process to RGID, EGID, and SGID, respectively.  */
+extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
+     __THROW __wur;
+#endif
+
+
+/* Clone the calling process, creating an exact copy.
+   Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+extern __pid_t fork (void) __THROWNL;
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+    || defined __USE_MISC
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+extern __pid_t vfork (void) __THROW;
+#endif /* Use misc or XPG < 7. */
+
+
+/* Return the pathname of the terminal FD is open on, or NULL on errors.
+   The returned storage is good only until the next call to this function.  */
+extern char *ttyname (int __fd) __THROW;
+
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
+     __THROW __nonnull ((2)) __wur;
+
+/* Return 1 if FD is a valid descriptor associated
+   with a terminal, zero if not.  */
+extern int isatty (int __fd) __THROW;
+
+#if defined __USE_MISC \
+    || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98)
+/* Return the index into the active-logins file (utmp) for
+   the controlling terminal.  */
+extern int ttyslot (void) __THROW;
+#endif
+
+
+/* Make a link to FROM named TO.  */
+extern int link (const char *__from, const char *__to)
+     __THROW __nonnull ((1, 2)) __wur;
+
+#ifdef __USE_ATFILE
+/* Like link but relative paths in TO and FROM are interpreted relative
+   to FROMFD and TOFD respectively.  */
+extern int linkat (int __fromfd, const char *__from, int __tofd,
+                  const char *__to, int __flags)
+     __THROW __nonnull ((2, 4)) __wur;
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+/* Make a symbolic link to FROM named TO.  */
+extern int symlink (const char *__from, const char *__to)
+     __THROW __nonnull ((1, 2)) __wur;
+
+/* Read the contents of the symbolic link PATH into no more than
+   LEN bytes of BUF.  The contents are not null-terminated.
+   Returns the number of characters read, or -1 for errors.  */
+extern ssize_t readlink (const char *__restrict __path,
+                        char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((1, 2)) __wur;
+#endif /* Use POSIX.1-2001.  */
+
+#ifdef __USE_ATFILE
+/* Like symlink but a relative path in TO is interpreted relative to TOFD.  */
+extern int symlinkat (const char *__from, int __tofd,
+                     const char *__to) __THROW __nonnull ((1, 3)) __wur;
+
+/* Like readlink but a relative PATH is interpreted relative to FD.  */
+extern ssize_t readlinkat (int __fd, const char *__restrict __path,
+                          char *__restrict __buf, size_t __len)
+     __THROW __nonnull ((2, 3)) __wur;
+#endif
+
+/* Remove the link NAME.  */
+extern int unlink (const char *__name) __THROW __nonnull ((1));
+
+#ifdef __USE_ATFILE
+/* Remove the link NAME relative to FD.  */
+extern int unlinkat (int __fd, const char *__name, int __flag)
+     __THROW __nonnull ((2));
+#endif
+
+/* Remove the directory PATH.  */
+extern int rmdir (const char *__path) __THROW __nonnull ((1));
+
+
+/* Return the foreground process group ID of FD.  */
+extern __pid_t tcgetpgrp (int __fd) __THROW;
+
+/* Set the foreground process group ID of FD set PGRP_ID.  */
+extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW;
+
+
+/* Return the login name of the user.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern char *getlogin (void);
+#if defined __USE_REENTRANT || defined __USE_POSIX199506
+/* Return at most NAME_LEN characters of the login name of the user in NAME.
+   If it cannot be determined or some other error occurred, return the error
+   code.  Otherwise return 0.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* Set the login name returned by `getlogin'.  */
+extern int setlogin (const char *__name) __THROW __nonnull ((1));
+#endif
+
+
+#ifdef __USE_POSIX2
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.  */
+# define __need_getopt
+# include <getopt.h>
+#endif
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Put the name of the current host in no more than LEN bytes of NAME.
+   The result is null-terminated if LEN is large enough for the full
+   name and the terminator.  */
+extern int gethostname (char *__name, size_t __len) __THROW __nonnull ((1));
+#endif
+
+
+#if defined __USE_MISC
+/* Set the name of the current host to NAME, which is LEN bytes long.
+   This call is restricted to the super-user.  */
+extern int sethostname (const char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+
+/* Set the current machine's Internet number to ID.
+   This call is restricted to the super-user.  */
+extern int sethostid (long int __id) __THROW __wur;
+
+
+/* Get and set the NIS (aka YP) domain name, if any.
+   Called just like `gethostname' and `sethostname'.
+   The NIS domain name is usually the empty string when not using NIS.  */
+extern int getdomainname (char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+extern int setdomainname (const char *__name, size_t __len)
+     __THROW __nonnull ((1)) __wur;
+
+
+/* Revoke access permissions to all processes currently communicating
+   with the control terminal, and then send a SIGHUP signal to the process
+   group of the control terminal.  */
+extern int vhangup (void) __THROW;
+
+/* Revoke the access of all descriptors currently open on FILE.  */
+extern int revoke (const char *__file) __THROW __nonnull ((1)) __wur;
+
+
+/* Enable statistical profiling, writing samples of the PC into at most
+   SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
+   is enabled, the system examines the user PC and increments
+   SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536].  If SCALE is zero,
+   disable profiling.  Returns zero on success, -1 on error.  */
+extern int profil (unsigned short int *__sample_buffer, size_t __size,
+                  size_t __offset, unsigned int __scale)
+     __THROW __nonnull ((1));
+
+
+/* Turn accounting on if NAME is an existing file.  The system will then write
+   a record for each process as it terminates, to this file.  If NAME is NULL,
+   turn accounting off.  This call is restricted to the super-user.  */
+extern int acct (const char *__name) __THROW;
+
+
+/* Successive calls return the shells listed in `/etc/shells'.  */
+extern char *getusershell (void) __THROW;
+extern void endusershell (void) __THROW; /* Discard cached info.  */
+extern void setusershell (void) __THROW; /* Rewind and re-read the file.  */
+
+
+/* Put the program in the background, and dissociate from the controlling
+   terminal.  If NOCHDIR is zero, do `chdir ("/")'.  If NOCLOSE is zero,
+   redirects stdin, stdout, and stderr to /dev/null.  */
+extern int daemon (int __nochdir, int __noclose) __THROW __wur;
+#endif /* Use misc.  */
+
+
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
+/* Make PATH be the root directory (the starting point for absolute paths).
+   This call is restricted to the super-user.  */
+extern int chroot (const char *__path) __THROW __nonnull ((1)) __wur;
+
+/* Prompt with PROMPT and read a string from the terminal without echoing.
+   Uses /dev/tty if possible; otherwise stderr and stdin.  */
+extern char *getpass (const char *__prompt) __nonnull ((1));
+#endif /* Use misc || X/Open.  */
+
+
+/* Make all changes done to FD actually appear on disk.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern int fsync (int __fd);
+
+
+#ifdef __USE_GNU
+/* Make all changes done to all files on the file system associated
+   with FD actually appear on disk.  */
+extern int syncfs (int __fd) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+
+/* Return identifier for the current host.  */
+extern long int gethostid (void);
+
+/* Make all changes done to all files actually appear on disk.  */
+extern void sync (void) __THROW;
+
+
+# if defined __USE_MISC || !defined __USE_XOPEN2K
+/* Return the number of bytes in a page.  This is the system's page size,
+   which is not necessarily the same as the hardware page size.  */
+extern int getpagesize (void)  __THROW __attribute__ ((__const__));
+
+
+/* Return the maximum number of file descriptors
+   the current process could possibly have.  */
+extern int getdtablesize (void) __THROW;
+# endif
+
+#endif /* Use misc || X/Open Unix.  */
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+
+/* Truncate FILE to LENGTH bytes.  */
+# ifndef __USE_FILE_OFFSET64
+extern int truncate (const char *__file, __off_t __length)
+     __THROW __nonnull ((1)) __wur;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (truncate,
+                          (const char *__file, __off64_t __length),
+                          truncate64) __nonnull ((1)) __wur;
+#  else
+#   define truncate truncate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int truncate64 (const char *__file, __off64_t __length)
+     __THROW __nonnull ((1)) __wur;
+# endif
+
+#endif /* Use X/Open Unix || POSIX 2008.  */
+
+#if defined __USE_POSIX199309 \
+    || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
+
+/* Truncate the file FD is open on to LENGTH bytes.  */
+# ifndef __USE_FILE_OFFSET64
+extern int ftruncate (int __fd, __off_t __length) __THROW __wur;
+# else
+#  ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length),
+                          ftruncate64) __wur;
+#  else
+#   define ftruncate ftruncate64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur;
+# endif
+
+#endif /* Use POSIX.1b || X/Open Unix || XPG6.  */
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+    || defined __USE_MISC
+
+/* Set the end of accessible data space (aka "the break") to ADDR.
+   Returns zero on success and -1 for errors (with errno set).  */
+extern int brk (void *__addr) __THROW __wur;
+
+/* Increase or decrease the end of accessible data space by DELTA bytes.
+   If successful, returns the address the previous end of data space
+   (i.e. the beginning of the new space, if DELTA > 0);
+   returns (void *) -1 for errors (with errno set).  */
+extern void *sbrk (intptr_t __delta) __THROW;
+#endif
+
+
+#ifdef __USE_MISC
+/* Invoke `system call' number SYSNO, passing it the remaining arguments.
+   This is completely system-dependent, and not often useful.
+
+   In Unix, `syscall' sets `errno' for all errors and most calls return -1
+   for errors; in many systems you cannot pass arguments or get return
+   values for all system calls (`pipe', `fork', and `getppid' typically
+   among them).
+
+   In Mach, all system calls take normal arguments and always return an
+   error code (zero for success).  */
+extern long int syscall (long int __sysno, ...) __THROW;
+
+#endif /* Use misc.  */
+
+
+#if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK
+/* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
+   files consistent.  Some systems have them there and some here, and some
+   software depends on the macros being defined without including both.  */
+
+/* `lockf' is a simpler interface to the locking facilities of `fcntl'.
+   LEN is always relative to the current file position.
+   The CMD argument is one of the following.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+
+# define F_ULOCK 0     /* Unlock a previously locked region.  */
+# define F_LOCK  1     /* Lock a region for exclusive use.  */
+# define F_TLOCK 2     /* Test and lock a region for exclusive use.  */
+# define F_TEST  3     /* Test a region for other processes locks.  */
+
+# ifndef __USE_FILE_OFFSET64
+extern int lockf (int __fd, int __cmd, __off_t __len) __wur;
+# else
+#  ifdef __REDIRECT
+extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len),
+                      lockf64) __wur;
+#  else
+#   define lockf lockf64
+#  endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur;
+# endif
+#endif /* Use misc and F_LOCK not already defined.  */
+
+
+#ifdef __USE_GNU
+
+/* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno'
+   set to EINTR.  */
+
+# define TEMP_FAILURE_RETRY(expression) \
+  (__extension__                                                             \
+    ({ long int __result;                                                    \
+       do __result = (long int) (expression);                                \
+       while (__result == -1L && errno == EINTR);                            \
+       __result; }))
+#endif
+
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+/* Synchronize at least the data part of a file with the underlying
+   media.  */
+extern int fdatasync (int __fildes);
+#endif /* Use POSIX199309 */
+
+
+/* XPG4.2 specifies that prototypes for the encryption functions must
+   be defined here.  */
+#ifdef __USE_XOPEN
+/* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
+extern char *crypt (const char *__key, const char *__salt)
+     __THROW __nonnull ((1, 2));
+
+/* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
+   block in place.  */
+extern void encrypt (char *__glibc_block, int __edflag)
+     __THROW __nonnull ((1));
+
+
+/* Swab pairs bytes in the first N bytes of the area pointed to by
+   FROM and copy the result to TO.  The value of TO must not be in the
+   range [FROM - N + 1, FROM - 1].  If N is odd the first byte in FROM
+   is without partner.  */
+extern void swab (const void *__restrict __from, void *__restrict __to,
+                 ssize_t __n) __THROW __nonnull ((1, 2));
+#endif
+
+
+/* The Single Unix specification demands this prototype to be here.
+   It is also found in <stdio.h>.  */
+#if defined __USE_XOPEN && !defined __USE_XOPEN2K
+/* Return the name of the controlling terminal.  */
+extern char *ctermid (char *__s) __THROW;
+#endif
+
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/unistd.h>
+#endif
+
+__END_DECLS
+
+#endif /* unistd.h  */
diff --git a/lib/libdss-include/ustat.h b/lib/libdss-include/ustat.h
new file mode 100644 (file)
index 0000000..cba150e
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/ustat.h>
diff --git a/lib/libdss-include/utime.h b/lib/libdss-include/utime.h
new file mode 100644 (file)
index 0000000..3cc0d5e
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     POSIX Standard: 5.6.6 Set File Access and Modification Times  <utime.h>
+ */
+
+#ifndef        _UTIME_H
+#define        _UTIME_H        1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+#include <bits/types.h>
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K
+# define __need_time_t
+# include <time.h>
+#endif
+
+/* Structure describing file times.  */
+struct utimbuf
+  {
+    __time_t actime;           /* Access time.  */
+    __time_t modtime;          /* Modification time.  */
+  };
+
+/* Set the access and modification times of FILE to those given in
+   *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
+extern int utime (const char *__file,
+                 const struct utimbuf *__file_times)
+     __THROW __nonnull ((1));
+
+__END_DECLS
+
+#endif /* utime.h */
diff --git a/lib/libdss-include/utmp.h b/lib/libdss-include/utmp.h
new file mode 100644 (file)
index 0000000..83e892d
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (C) 1993-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _UTMP_H
+#define        _UTMP_H 1
+
+#include <features.h>
+
+#include <sys/types.h>
+
+
+__BEGIN_DECLS
+
+/* Get system dependent values and data structures.  */
+#include <bits/utmp.h>
+
+/* Compatibility names for the strings of the canonical file names.  */
+#define UTMP_FILE      _PATH_UTMP
+#define UTMP_FILENAME  _PATH_UTMP
+#define WTMP_FILE      _PATH_WTMP
+#define WTMP_FILENAME  _PATH_WTMP
+
+
+
+/* Make FD be the controlling terminal, stdin, stdout, and stderr;
+   then close FD.  Returns 0 on success, nonzero on error.  */
+extern int login_tty (int __fd) __THROW;
+
+
+/* Write the given entry into utmp and wtmp.  */
+extern void login (const struct utmp *__entry) __THROW;
+
+/* Write the utmp entry to say the user on UT_LINE has logged out.  */
+extern int logout (const char *__ut_line) __THROW;
+
+/* Append to wtmp an entry for the current time and the given info.  */
+extern void logwtmp (const char *__ut_line, const char *__ut_name,
+                    const char *__ut_host) __THROW;
+
+/* Append entry UTMP to the wtmp-like file WTMP_FILE.  */
+extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp)
+     __THROW;
+
+/* Change name of the utmp file to be examined.  */
+extern int utmpname (const char *__file) __THROW;
+
+/* Read next entry from a utmp-like file.  */
+extern struct utmp *getutent (void) __THROW;
+
+/* Reset the input stream to the beginning of the file.  */
+extern void setutent (void) __THROW;
+
+/* Close the current open file.  */
+extern void endutent (void) __THROW;
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_type matching ID->ut_type.  */
+extern struct utmp *getutid (const struct utmp *__id) __THROW;
+
+/* Search forward from the current point in the utmp file until the
+   next entry with a ut_line matching LINE->ut_line.  */
+extern struct utmp *getutline (const struct utmp *__line) __THROW;
+
+/* Write out entry pointed to by UTMP_PTR into the utmp file.  */
+extern struct utmp *pututline (const struct utmp *__utmp_ptr) __THROW;
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the file for handling utmp files.  */
+extern int getutent_r (struct utmp *__buffer, struct utmp **__result) __THROW;
+
+extern int getutid_r (const struct utmp *__id, struct utmp *__buffer,
+                     struct utmp **__result) __THROW;
+
+extern int getutline_r (const struct utmp *__line,
+                       struct utmp *__buffer, struct utmp **__result) __THROW;
+
+#endif /* Use misc.  */
+
+__END_DECLS
+
+#endif /* utmp.h  */
diff --git a/lib/libdss-include/utmpx.h b/lib/libdss-include/utmpx.h
new file mode 100644 (file)
index 0000000..3c45ba3
--- /dev/null
@@ -0,0 +1,125 @@
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _UTMPX_H
+#define        _UTMPX_H        1
+
+#include <features.h>
+#include <sys/time.h>
+
+/* Required according to Unix98.  */
+#ifndef __pid_t_defined
+typedef __pid_t pid_t;
+# define __pid_t_defined
+#endif
+
+/* Get system dependent values and data structures.  */
+#include <bits/utmpx.h>
+
+#ifdef __USE_GNU
+/* Compatibility names for the strings of the canonical file names.  */
+# define UTMPX_FILE    _PATH_UTMPX
+# define UTMPX_FILENAME        _PATH_UTMPX
+# define WTMPX_FILE    _PATH_WTMPX
+# define WTMPX_FILENAME        _PATH_WTMPX
+#endif
+
+/* For the getutmp{,x} functions we need the `struct utmp'.  */
+#ifdef __USE_GNU
+struct utmp;
+#endif
+
+
+__BEGIN_DECLS
+
+/* Open user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setutxent (void);
+
+/* Close user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endutxent (void);
+
+/* Get the next entry from the user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxent (void);
+
+/* Get the user accounting database entry corresponding to ID.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxid (const struct utmpx *__id);
+
+/* Get the user accounting database entry corresponding to LINE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *getutxline (const struct utmpx *__line);
+
+/* Write the entry UTMPX into the user accounting database.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct utmpx *pututxline (const struct utmpx *__utmpx);
+
+
+#ifdef __USE_GNU
+/* Change name of the utmpx file to be examined.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int utmpxname (const char *__file);
+
+/* Append entry UTMP to the wtmpx-like file WTMPX_FILE.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void updwtmpx (const char *__wtmpx_file,
+                     const struct utmpx *__utmpx);
+
+
+/* Copy the information in UTMPX to UTMP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void getutmp (const struct utmpx *__utmpx,
+                    struct utmp *__utmp);
+
+/* Copy the information in UTMP to UTMPX.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx);
+#endif
+
+__END_DECLS
+
+#endif /* utmpx.h  */
diff --git a/lib/libdss-include/values.h b/lib/libdss-include/values.h
new file mode 100644 (file)
index 0000000..5ae2ead
--- /dev/null
@@ -0,0 +1,68 @@
+/* Old compatibility names for <limits.h> and <float.h> constants.
+   Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This interface is obsolete.  New programs should use
+   <limits.h> and/or <float.h> instead of <values.h>.  */
+
+#ifndef        _VALUES_H
+#define        _VALUES_H       1
+
+#include <features.h>
+
+#include <limits.h>
+
+#define _TYPEBITS(type)        (sizeof (type) * CHAR_BIT)
+
+#define CHARBITS       _TYPEBITS (char)
+#define SHORTBITS      _TYPEBITS (short int)
+#define INTBITS                _TYPEBITS (int)
+#define LONGBITS       _TYPEBITS (long int)
+#define PTRBITS                _TYPEBITS (char *)
+#define DOUBLEBITS     _TYPEBITS (double)
+#define FLOATBITS      _TYPEBITS (float)
+
+#define MINSHORT       SHRT_MIN
+#define        MININT          INT_MIN
+#define        MINLONG         LONG_MIN
+
+#define        MAXSHORT        SHRT_MAX
+#define        MAXINT          INT_MAX
+#define        MAXLONG         LONG_MAX
+
+#define HIBITS         MINSHORT
+#define HIBITL         MINLONG
+
+
+#include <float.h>
+
+#define        MAXDOUBLE       DBL_MAX
+#define        MAXFLOAT        FLT_MAX
+#define        MINDOUBLE       DBL_MIN
+#define        MINFLOAT        FLT_MIN
+#define        DMINEXP         DBL_MIN_EXP
+#define        FMINEXP         FLT_MIN_EXP
+#define        DMAXEXP         DBL_MAX_EXP
+#define        FMAXEXP         FLT_MAX_EXP
+
+
+#ifdef __USE_MISC
+/* Some systems define this name instead of CHAR_BIT or CHARBITS.  */
+# define BITSPERBYTE   CHAR_BIT
+#endif
+
+#endif /* values.h */
diff --git a/lib/libdss-include/video/edid.h b/lib/libdss-include/video/edid.h
new file mode 100644 (file)
index 0000000..6aeb974
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef __linux_video_edid_h__
+#define __linux_video_edid_h__
+
+struct edid_info {
+       unsigned char dummy[128];
+};
+
+
+#endif /* __linux_video_edid_h__ */
diff --git a/lib/libdss-include/video/sisfb.h b/lib/libdss-include/video/sisfb.h
new file mode 100644 (file)
index 0000000..e9b8e2c
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * sisfb.h - definitions for the SiS framebuffer driver
+ *
+ * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the named License,
+ * or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _LINUX_SISFB_H_
+#define _LINUX_SISFB_H_
+
+#include <linux/types.h>
+#include <asm/ioctl.h>
+
+/**********************************************/
+/*                   PUBLIC                   */
+/**********************************************/
+
+/* vbflags, public (others in sis.h) */
+#define CRT2_DEFAULT           0x00000001
+#define CRT2_LCD               0x00000002
+#define CRT2_TV                        0x00000004
+#define CRT2_VGA               0x00000008
+#define TV_NTSC                        0x00000010
+#define TV_PAL                 0x00000020
+#define TV_HIVISION            0x00000040
+#define TV_YPBPR               0x00000080
+#define TV_AVIDEO              0x00000100
+#define TV_SVIDEO              0x00000200
+#define TV_SCART               0x00000400
+#define TV_PALM                        0x00001000
+#define TV_PALN                        0x00002000
+#define TV_NTSCJ               0x00001000
+#define TV_CHSCART             0x00008000
+#define TV_CHYPBPR525I         0x00010000
+#define CRT1_VGA               0x00000000
+#define CRT1_LCDA              0x00020000
+#define VGA2_CONNECTED          0x00040000
+#define VB_DISPTYPE_CRT1       0x00080000      /* CRT1 connected and used */
+#define VB_SINGLE_MODE         0x20000000      /* CRT1 or CRT2; determined by DISPTYPE_CRTx */
+#define VB_MIRROR_MODE         0x40000000      /* CRT1 + CRT2 identical (mirror mode) */
+#define VB_DUALVIEW_MODE       0x80000000      /* CRT1 + CRT2 independent (dual head mode) */
+
+/* Aliases: */
+#define CRT2_ENABLE            (CRT2_LCD | CRT2_TV | CRT2_VGA)
+#define TV_STANDARD            (TV_NTSC | TV_PAL | TV_PALM | TV_PALN | TV_NTSCJ)
+#define TV_INTERFACE           (TV_AVIDEO|TV_SVIDEO|TV_SCART|TV_HIVISION|TV_YPBPR|TV_CHSCART|TV_CHYPBPR525I)
+
+/* Only if TV_YPBPR is set: */
+#define TV_YPBPR525I           TV_NTSC
+#define TV_YPBPR525P           TV_PAL
+#define TV_YPBPR750P           TV_PALM
+#define TV_YPBPR1080I          TV_PALN
+#define TV_YPBPRALL            (TV_YPBPR525I | TV_YPBPR525P | TV_YPBPR750P | TV_YPBPR1080I)
+
+#define VB_DISPTYPE_DISP2      CRT2_ENABLE
+#define VB_DISPTYPE_CRT2       CRT2_ENABLE
+#define VB_DISPTYPE_DISP1      VB_DISPTYPE_CRT1
+#define VB_DISPMODE_SINGLE     VB_SINGLE_MODE
+#define VB_DISPMODE_MIRROR     VB_MIRROR_MODE
+#define VB_DISPMODE_DUAL       VB_DUALVIEW_MODE
+#define VB_DISPLAY_MODE                (SINGLE_MODE | MIRROR_MODE | DUALVIEW_MODE)
+
+/* Structure argument for SISFB_GET_INFO ioctl  */
+struct sisfb_info {
+       __u32   sisfb_id;               /* for identifying sisfb */
+#ifndef SISFB_ID
+#define SISFB_ID         0x53495346    /* Identify myself with 'SISF' */
+#endif
+       __u32   chip_id;                /* PCI-ID of detected chip */
+       __u32   memory;                 /* total video memory in KB */
+       __u32   heapstart;              /* heap start offset in KB */
+       __u8    fbvidmode;              /* current sisfb mode */
+
+       __u8    sisfb_version;
+       __u8    sisfb_revision;
+       __u8    sisfb_patchlevel;
+
+       __u8    sisfb_caps;             /* sisfb capabilities */
+
+       __u32   sisfb_tqlen;            /* turbo queue length (in KB) */
+
+       __u32   sisfb_pcibus;           /* The card's PCI ID */
+       __u32   sisfb_pcislot;
+       __u32   sisfb_pcifunc;
+
+       __u8    sisfb_lcdpdc;           /* PanelDelayCompensation */
+
+       __u8    sisfb_lcda;             /* Detected status of LCDA for low res/text modes */
+
+       __u32   sisfb_vbflags;
+       __u32   sisfb_currentvbflags;
+
+       __u32   sisfb_scalelcd;
+       __u32   sisfb_specialtiming;
+
+       __u8    sisfb_haveemi;
+       __u8    sisfb_emi30,sisfb_emi31,sisfb_emi32,sisfb_emi33;
+       __u8    sisfb_haveemilcd;
+
+       __u8    sisfb_lcdpdca;          /* PanelDelayCompensation for LCD-via-CRT1 */
+
+       __u16   sisfb_tvxpos, sisfb_tvypos;     /* Warning: Values + 32 ! */
+
+       __u32   sisfb_heapsize;         /* heap size (in KB) */
+       __u32   sisfb_videooffset;      /* Offset of viewport in video memory (in bytes) */
+
+       __u32   sisfb_curfstn;          /* currently running FSTN/DSTN mode */
+       __u32   sisfb_curdstn;
+
+       __u16   sisfb_pci_vendor;       /* PCI vendor (SiS or XGI) */
+
+       __u32   sisfb_vbflags2;         /* ivideo->vbflags2 */
+
+       __u8    sisfb_can_post;         /* sisfb can POST this card */
+       __u8    sisfb_card_posted;      /* card is POSTED */
+       __u8    sisfb_was_boot_device;  /* This card was the boot video device (ie is primary) */
+
+       __u8    reserved[183];          /* for future use */
+};
+
+#define SISFB_CMD_GETVBFLAGS   0x55AA0001      /* no arg; result[1] = vbflags */
+#define SISFB_CMD_SWITCHCRT1   0x55AA0010      /* arg[0]: 99 = query, 0 = off, 1 = on */
+/* more to come */
+
+#define SISFB_CMD_ERR_OK       0x80000000      /* command succeeded */
+#define SISFB_CMD_ERR_LOCKED   0x80000001      /* sisfb is locked */
+#define SISFB_CMD_ERR_EARLY    0x80000002      /* request before sisfb took over gfx system */
+#define SISFB_CMD_ERR_NOVB     0x80000003      /* No video bridge */
+#define SISFB_CMD_ERR_NOCRT2   0x80000004      /* can't change CRT1 status, CRT2 disabled */
+/* more to come */
+#define SISFB_CMD_ERR_UNKNOWN   0x8000ffff     /* Unknown command */
+#define SISFB_CMD_ERR_OTHER    0x80010000      /* Other error */
+
+/* Argument for SISFB_CMD ioctl */
+struct sisfb_cmd {
+       __u32  sisfb_cmd;
+       __u32  sisfb_arg[16];
+       __u32  sisfb_result[4];
+};
+
+/* Additional IOCTLs for communication sisfb <> X driver                */
+/* If changing this, vgatypes.h must also be changed (for X driver)    */
+
+/* ioctl for identifying and giving some info (esp. memory heap start) */
+#define SISFB_GET_INFO_SIZE    _IOR(0xF3,0x00,__u32)
+#define SISFB_GET_INFO         _IOR(0xF3,0x01,struct sisfb_info)
+
+/* ioctrl to get current vertical retrace status */
+#define SISFB_GET_VBRSTATUS    _IOR(0xF3,0x02,__u32)
+
+/* ioctl to enable/disable panning auto-maximize (like nomax parameter) */
+#define SISFB_GET_AUTOMAXIMIZE _IOR(0xF3,0x03,__u32)
+#define SISFB_SET_AUTOMAXIMIZE _IOW(0xF3,0x03,__u32)
+
+/* ioctls to relocate TV output (x=D[31:16], y=D[15:0], + 32)*/
+#define SISFB_GET_TVPOSOFFSET  _IOR(0xF3,0x04,__u32)
+#define SISFB_SET_TVPOSOFFSET  _IOW(0xF3,0x04,__u32)
+
+/* ioctl for internal sisfb commands (sisfbctrl) */
+#define SISFB_COMMAND          _IOWR(0xF3,0x05,struct sisfb_cmd)
+
+/* ioctl for locking sisfb (no register access during lock) */
+/* As of now, only used to avoid register access during
+ * the ioctls listed above.
+ */
+#define SISFB_SET_LOCK         _IOW(0xF3,0x06,__u32)
+
+/* ioctls 0xF3 up to 0x3F reserved for sisfb */
+
+/****************************************************************/
+/* The following are deprecated and should not be used anymore: */
+/****************************************************************/
+/* ioctl for identifying and giving some info (esp. memory heap start) */
+#define SISFB_GET_INFO_OLD        _IOR('n',0xF8,__u32)
+/* ioctrl to get current vertical retrace status */
+#define SISFB_GET_VBRSTATUS_OLD           _IOR('n',0xF9,__u32)
+/* ioctl to enable/disable panning auto-maximize (like nomax parameter) */
+#define SISFB_GET_AUTOMAXIMIZE_OLD _IOR('n',0xFA,__u32)
+#define SISFB_SET_AUTOMAXIMIZE_OLD _IOW('n',0xFA,__u32)
+/****************************************************************/
+/*               End of deprecated ioctl numbers                */
+/****************************************************************/
+
+/* For fb memory manager (FBIO_ALLOC, FBIO_FREE) */
+struct sis_memreq {
+       __u32   offset;
+       __u32   size;
+};
+
+/**********************************************/
+/*                  PRIVATE                   */
+/*         (for IN-KERNEL usage only)         */
+/**********************************************/
+
+
+#endif /* _LINUX_SISFB_H_ */
diff --git a/lib/libdss-include/video/uvesafb.h b/lib/libdss-include/video/uvesafb.h
new file mode 100644 (file)
index 0000000..79e281b
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _UVESAFB_H
+#define _UVESAFB_H
+
+#include <linux/types.h>
+
+struct v86_regs {
+       __u32 ebx;
+       __u32 ecx;
+       __u32 edx;
+       __u32 esi;
+       __u32 edi;
+       __u32 ebp;
+       __u32 eax;
+       __u32 eip;
+       __u32 eflags;
+       __u32 esp;
+       __u16 cs;
+       __u16 ss;
+       __u16 es;
+       __u16 ds;
+       __u16 fs;
+       __u16 gs;
+};
+
+/* Task flags */
+#define TF_VBEIB       0x01
+#define TF_BUF_ESDI    0x02
+#define TF_BUF_ESBX    0x04
+#define TF_BUF_RET     0x08
+#define TF_EXIT                0x10
+
+struct uvesafb_task {
+       __u8 flags;
+       int buf_len;
+       struct v86_regs regs;
+};
+
+/* Constants for the capabilities field
+ * in vbe_ib */
+#define VBE_CAP_CAN_SWITCH_DAC 0x01
+#define VBE_CAP_VGACOMPAT      0x02
+
+/* The VBE Info Block */
+struct vbe_ib {
+       char  vbe_signature[4];
+       __u16 vbe_version;
+       __u32 oem_string_ptr;
+       __u32 capabilities;
+       __u32 mode_list_ptr;
+       __u16 total_memory;
+       __u16 oem_software_rev;
+       __u32 oem_vendor_name_ptr;
+       __u32 oem_product_name_ptr;
+       __u32 oem_product_rev_ptr;
+       __u8  reserved[222];
+       char  oem_data[256];
+       char  misc_data[512];
+} __attribute__ ((packed));
+
+#endif /* _UVESAFB_H */
diff --git a/lib/libdss-include/wait.h b/lib/libdss-include/wait.h
new file mode 100644 (file)
index 0000000..d01b811
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/wait.h>
diff --git a/lib/libdss-include/wchar.h b/lib/libdss-include/wchar.h
new file mode 100644 (file)
index 0000000..e413416
--- /dev/null
@@ -0,0 +1,903 @@
+/* Copyright (C) 1995-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *      ISO C99 Standard: 7.24
+ *     Extended multibyte and wide character utilities <wchar.h>
+ */
+
+#ifndef _WCHAR_H
+
+#if !defined __need_mbstate_t && !defined __need_wint_t
+# define _WCHAR_H 1
+# include <features.h>
+#endif
+
+#ifdef _WCHAR_H
+/* Get FILE definition.  */
+# define __need___FILE
+# if defined __USE_UNIX98 || defined __USE_XOPEN2K
+#  define __need_FILE
+# endif
+# include <stdio.h>
+/* Get va_list definition.  */
+# define __need___va_list
+# include <stdarg.h>
+
+# include <bits/wchar.h>
+
+/* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
+# define __need_size_t
+# define __need_wchar_t
+# define __need_NULL
+#endif
+#if defined _WCHAR_H || defined __need_wint_t || !defined __WINT_TYPE__
+# undef __need_wint_t
+# define __need_wint_t
+# include <stddef.h>
+
+/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
+   there.  So define it ourselves if it remains undefined.  */
+# ifndef _WINT_T
+/* Integral type unchanged by default argument promotions that can
+   hold any value corresponding to members of the extended character
+   set, as well as at least one value that does not correspond to any
+   member of the extended character set.  */
+#  define _WINT_T
+typedef unsigned int wint_t;
+# else
+/* Work around problems with the <stddef.h> file which doesn't put
+   wint_t in the std namespace.  */
+#  if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES \
+      && defined __WINT_TYPE__
+__BEGIN_NAMESPACE_STD
+typedef __WINT_TYPE__ wint_t;
+__END_NAMESPACE_STD
+#  endif
+# endif
+
+/* Tell the caller that we provide correct C++ prototypes.  */
+# if defined __cplusplus && __GNUC_PREREQ (4, 4)
+#  define __CORRECT_ISO_CPP_WCHAR_H_PROTO
+# endif
+#endif
+
+#if (defined _WCHAR_H || defined __need_mbstate_t) && !defined ____mbstate_t_defined
+# define ____mbstate_t_defined 1
+/* Conversion state information.  */
+typedef struct
+{
+  int __count;
+  union
+  {
+# ifdef __WINT_TYPE__
+    __WINT_TYPE__ __wch;
+# else
+    wint_t __wch;
+# endif
+    char __wchb[4];
+  } __value;           /* Value so far.  */
+} __mbstate_t;
+#endif
+#undef __need_mbstate_t
+
+
+/* The rest of the file is only used if used if __need_mbstate_t is not
+   defined.  */
+#ifdef _WCHAR_H
+
+# ifndef __mbstate_t_defined
+__BEGIN_NAMESPACE_C99
+/* Public type.  */
+typedef __mbstate_t mbstate_t;
+__END_NAMESPACE_C99
+#  define __mbstate_t_defined 1
+# endif
+
+#ifdef __USE_GNU
+__USING_NAMESPACE_C99(mbstate_t)
+#endif
+
+#ifndef WCHAR_MIN
+/* These constants might also be defined in <inttypes.h>.  */
+# define WCHAR_MIN __WCHAR_MIN
+# define WCHAR_MAX __WCHAR_MAX
+#endif
+
+#ifndef WEOF
+# define WEOF (0xffffffffu)
+#endif
+
+/* For XPG4 compliance we have to define the stuff from <wctype.h> here
+   as well.  */
+#if defined __USE_XOPEN && !defined __USE_UNIX98
+# include <wctype.h>
+#endif
+
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_STD
+/* This incomplete type is defined in <time.h> but needed here because
+   of `wcsftime'.  */
+struct tm;
+__END_NAMESPACE_STD
+/* XXX We have to clean this up at some point.  Since tm is in the std
+   namespace but wcsftime is in __c99 the type wouldn't be found
+   without inserting it in the global namespace.  */
+__USING_NAMESPACE_STD(tm)
+
+
+__BEGIN_NAMESPACE_STD
+/* Copy SRC to DEST.  */
+extern wchar_t *wcscpy (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src)
+     __THROW __nonnull ((1, 2));
+
+/* Copy no more than N wide-characters of SRC to DEST.  */
+extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Append SRC onto DEST.  */
+extern wchar_t *wcscat (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src)
+     __THROW __nonnull ((1, 2));
+/* Append no more than N wide-characters of SRC onto DEST.  */
+extern wchar_t *wcsncat (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Compare S1 and S2.  */
+extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+/* Compare N wide-characters of S1 and S2.  */
+extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Compare S1 and S2, ignoring case.  */
+extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
+                       size_t __n) __THROW;
+
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+# include <xlocale.h>
+
+extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+                        __locale_t __loc) __THROW;
+
+extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+                         size_t __n, __locale_t __loc) __THROW;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Compare S1 and S2, both interpreted as appropriate to the
+   LC_COLLATE category of the current locale.  */
+extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW;
+/* Transform S2 into array pointed to by S1 such that if wcscmp is
+   applied to two transformed strings the result is the as applying
+   `wcscoll' to the original strings.  */
+extern size_t wcsxfrm (wchar_t *__restrict __s1,
+                      const wchar_t *__restrict __s2, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN2K8
+/* Similar to the two functions above but take the information from
+   the provided locale and not the global locale.  */
+
+/* Compare S1 and S2, both interpreted as appropriate to the
+   LC_COLLATE category of the given locale.  */
+extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
+                     __locale_t __loc) __THROW;
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is
+   applied to two transformed strings the result is the as applying
+   `wcscoll' to the original strings.  */
+extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
+                        size_t __n, __locale_t __loc) __THROW;
+
+/* Duplicate S, returning an identical malloc'd string.  */
+extern wchar_t *wcsdup (const wchar_t *__s) __THROW __attribute_malloc__;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Find the first occurrence of WC in WCS.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcschr") __attribute_pure__;
+extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcschr") __attribute_pure__;
+#else
+extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+/* Find the last occurrence of WC in WCS.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcsrchr") __attribute_pure__;
+extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __asm ("wcsrchr") __attribute_pure__;
+#else
+extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* This function is similar to `wcschr'.  But it returns a pointer to
+   the closing NUL wide character in case C is not found in S.  */
+extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
+     __THROW __attribute_pure__;
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Return the length of the initial segmet of WCS which
+   consists entirely of wide characters not in REJECT.  */
+extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
+     __THROW __attribute_pure__;
+/* Return the length of the initial segmet of WCS which
+   consists entirely of wide characters in  ACCEPT.  */
+extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __attribute_pure__;
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __asm ("wcspbrk") __attribute_pure__;
+extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
+                                    const wchar_t *__accept)
+     __THROW __asm ("wcspbrk") __attribute_pure__;
+#else
+extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
+     __THROW __attribute_pure__;
+#endif
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __asm ("wcsstr") __attribute_pure__;
+extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
+                                   const wchar_t *__needle)
+     __THROW __asm ("wcsstr") __attribute_pure__;
+#else
+extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __attribute_pure__;
+#endif
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+extern wchar_t *wcstok (wchar_t *__restrict __s,
+                       const wchar_t *__restrict __delim,
+                       wchar_t **__restrict __ptr) __THROW;
+
+/* Return the number of wide characters in S.  */
+extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__;
+__END_NAMESPACE_STD
+
+#ifdef __USE_XOPEN
+/* Another name for `wcsstr' from XPG4.  */
+# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __asm ("wcswcs") __attribute_pure__;
+extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
+                                   const wchar_t *__needle)
+     __THROW __asm ("wcswcs") __attribute_pure__;
+# else
+extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle)
+     __THROW __attribute_pure__;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
+     __THROW __attribute_pure__;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Search N wide characters of S for C.  */
+#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
+extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
+     __THROW __asm ("wmemchr") __attribute_pure__;
+extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
+                                    size_t __n)
+     __THROW __asm ("wmemchr") __attribute_pure__;
+#else
+extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
+     __THROW __attribute_pure__;
+#endif
+
+/* Compare N wide characters of S1 and S2.  */
+extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW __attribute_pure__;
+
+/* Copy N wide characters of SRC to DEST.  */
+extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
+                        const wchar_t *__restrict __s2, size_t __n) __THROW;
+
+/* Copy N wide characters of SRC to DEST, guaranteeing
+   correct behavior for overlapping strings.  */
+extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
+     __THROW;
+
+/* Set N wide characters of S to C.  */
+extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_GNU
+/* Copy N wide characters of SRC to DEST and return pointer to following
+   wide character.  */
+extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
+                         const wchar_t *__restrict __s2, size_t __n)
+     __THROW;
+#endif
+
+
+__BEGIN_NAMESPACE_STD
+/* Determine whether C constitutes a valid (one-byte) multibyte
+   character.  */
+extern wint_t btowc (int __c) __THROW;
+
+/* Determine whether C corresponds to a member of the extended
+   character set whose multibyte representation is a single byte.  */
+extern int wctob (wint_t __c) __THROW;
+
+/* Determine whether PS points to an object representing the initial
+   state.  */
+extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__;
+
+/* Write wide character representation of multibyte character pointed
+   to by S to PWC.  */
+extern size_t mbrtowc (wchar_t *__restrict __pwc,
+                      const char *__restrict __s, size_t __n,
+                      mbstate_t *__restrict __p) __THROW;
+
+/* Write multibyte representation of wide character WC to S.  */
+extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
+                      mbstate_t *__restrict __ps) __THROW;
+
+/* Return number of bytes in multibyte character pointed to by S.  */
+extern size_t __mbrlen (const char *__restrict __s, size_t __n,
+                       mbstate_t *__restrict __ps) __THROW;
+extern size_t mbrlen (const char *__restrict __s, size_t __n,
+                     mbstate_t *__restrict __ps) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_EXTERN_INLINES
+/* Define inline function as optimization.  */
+
+/* We can use the BTOWC and WCTOB optimizations since we know that all
+   locales must use ASCII encoding for the values in the ASCII range
+   and because the wchar_t encoding is always ISO 10646.  */
+extern wint_t __btowc_alias (int __c) __asm ("btowc");
+__extern_inline wint_t
+__NTH (btowc (int __c))
+{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
+         ? (wint_t) __c : __btowc_alias (__c)); }
+
+extern int __wctob_alias (wint_t __c) __asm ("wctob");
+__extern_inline int
+__NTH (wctob (wint_t __wc))
+{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
+         ? (int) __wc : __wctob_alias (__wc)); }
+
+__extern_inline size_t
+__NTH (mbrlen (const char *__restrict __s, size_t __n,
+              mbstate_t *__restrict __ps))
+{ return (__ps != NULL
+         ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
+#endif
+
+__BEGIN_NAMESPACE_STD
+/* Write wide character representation of multibyte character string
+   SRC to DST.  */
+extern size_t mbsrtowcs (wchar_t *__restrict __dst,
+                        const char **__restrict __src, size_t __len,
+                        mbstate_t *__restrict __ps) __THROW;
+
+/* Write multibyte character representation of wide character string
+   SRC to DST.  */
+extern size_t wcsrtombs (char *__restrict __dst,
+                        const wchar_t **__restrict __src, size_t __len,
+                        mbstate_t *__restrict __ps) __THROW;
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_XOPEN2K8
+/* Write wide character representation of at most NMC bytes of the
+   multibyte character string SRC to DST.  */
+extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
+                         const char **__restrict __src, size_t __nmc,
+                         size_t __len, mbstate_t *__restrict __ps) __THROW;
+
+/* Write multibyte character representation of at most NWC characters
+   from the wide character string SRC to DST.  */
+extern size_t wcsnrtombs (char *__restrict __dst,
+                         const wchar_t **__restrict __src,
+                         size_t __nwc, size_t __len,
+                         mbstate_t *__restrict __ps) __THROW;
+#endif /* use POSIX 2008 */
+
+
+/* The following functions are extensions found in X/Open CAE.  */
+#ifdef __USE_XOPEN
+/* Determine number of column positions required for C.  */
+extern int wcwidth (wchar_t __c) __THROW;
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+extern int wcswidth (const wchar_t *__s, size_t __n) __THROW;
+#endif /* Use X/Open.  */
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert initial portion of the wide string NPTR to `double'
+   representation.  */
+extern double wcstod (const wchar_t *__restrict __nptr,
+                     wchar_t **__restrict __endptr) __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Likewise for `float' and `long double' sizes of floating-point numbers.  */
+extern float wcstof (const wchar_t *__restrict __nptr,
+                    wchar_t **__restrict __endptr) __THROW;
+extern long double wcstold (const wchar_t *__restrict __nptr,
+                           wchar_t **__restrict __endptr) __THROW;
+__END_NAMESPACE_C99
+#endif /* C99 */
+
+
+__BEGIN_NAMESPACE_STD
+/* Convert initial portion of wide string NPTR to `long int'
+   representation.  */
+extern long int wcstol (const wchar_t *__restrict __nptr,
+                       wchar_t **__restrict __endptr, int __base) __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long int'
+   representation.  */
+extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
+                                 wchar_t **__restrict __endptr, int __base)
+     __THROW;
+__END_NAMESPACE_STD
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Convert initial portion of wide string NPTR to `long long int'
+   representation.  */
+__extension__
+extern long long int wcstoll (const wchar_t *__restrict __nptr,
+                             wchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long long int'
+   representation.  */
+__extension__
+extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
+                                       wchar_t **__restrict __endptr,
+                                       int __base) __THROW;
+__END_NAMESPACE_C99
+#endif /* ISO C99.  */
+
+#ifdef __USE_GNU
+/* Convert initial portion of wide string NPTR to `long long int'
+   representation.  */
+__extension__
+extern long long int wcstoq (const wchar_t *__restrict __nptr,
+                            wchar_t **__restrict __endptr, int __base)
+     __THROW;
+
+/* Convert initial portion of wide string NPTR to `unsigned long long int'
+   representation.  */
+__extension__
+extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
+                                      wchar_t **__restrict __endptr,
+                                      int __base) __THROW;
+#endif /* Use GNU.  */
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+   thought out.  Many applications will need to process its data using
+   information from several different locales.  Another application is
+   the implementation of the internationalization handling in the
+   upcoming ISO C++ standard library.  To support this another set of
+   the functions using locale data exist which have an additional
+   argument.
+
+   Attention: all these functions are *not* standardized in any form.
+   This is a proof-of-concept implementation.  */
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+   use as an additional parameter.  */
+extern long int wcstol_l (const wchar_t *__restrict __nptr,
+                         wchar_t **__restrict __endptr, int __base,
+                         __locale_t __loc) __THROW;
+
+extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
+                                   wchar_t **__restrict __endptr,
+                                   int __base, __locale_t __loc) __THROW;
+
+__extension__
+extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
+                               wchar_t **__restrict __endptr,
+                               int __base, __locale_t __loc) __THROW;
+
+__extension__
+extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
+                                         wchar_t **__restrict __endptr,
+                                         int __base, __locale_t __loc)
+     __THROW;
+
+extern double wcstod_l (const wchar_t *__restrict __nptr,
+                       wchar_t **__restrict __endptr, __locale_t __loc)
+     __THROW;
+
+extern float wcstof_l (const wchar_t *__restrict __nptr,
+                      wchar_t **__restrict __endptr, __locale_t __loc)
+     __THROW;
+
+extern long double wcstold_l (const wchar_t *__restrict __nptr,
+                             wchar_t **__restrict __endptr,
+                             __locale_t __loc) __THROW;
+#endif /* use GNU */
+
+
+#ifdef __USE_XOPEN2K8
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in
+   DEST.  */
+extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
+                       const wchar_t *__restrict __src) __THROW;
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
+                        const wchar_t *__restrict __src, size_t __n)
+     __THROW;
+
+
+/* Wide character I/O functions.  */
+
+/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces
+   a wide character string.  */
+extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW;
+#endif
+
+#if defined __USE_ISOC95 || defined __USE_UNIX98
+__BEGIN_NAMESPACE_STD
+
+/* Select orientation for stream.  */
+extern int fwide (__FILE *__fp, int __mode) __THROW;
+
+
+/* Write formatted output to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fwprintf (__FILE *__restrict __stream,
+                    const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
+/* Write formatted output to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int wprintf (const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
+/* Write formatted output of at most N characters to S.  */
+extern int swprintf (wchar_t *__restrict __s, size_t __n,
+                    const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
+
+/* Write formatted output to S from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfwprintf (__FILE *__restrict __s,
+                     const wchar_t *__restrict __format,
+                     __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
+/* Write formatted output to stdout from argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vwprintf (const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
+/* Write formatted output of at most N character to S from argument
+   list ARG.  */
+extern int vswprintf (wchar_t *__restrict __s, size_t __n,
+                     const wchar_t *__restrict __format,
+                     __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
+
+
+/* Read formatted input from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fwscanf (__FILE *__restrict __stream,
+                   const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+/* Read formatted input from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int wscanf (const wchar_t *__restrict __format, ...)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
+/* Read formatted input from S.  */
+extern int swscanf (const wchar_t *__restrict __s,
+                   const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+
+# if defined __USE_ISOC99 && !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+/* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
+   GNU extension which conflicts with valid %a followed by letter
+   s, S or [.  */
+extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream,
+                                const wchar_t *__restrict __format, ...),
+                      __isoc99_fwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...),
+                      __isoc99_wscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
+extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s,
+                                    const wchar_t *__restrict __format,
+                                    ...), __isoc99_swscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+#  else
+extern int __isoc99_fwscanf (__FILE *__restrict __stream,
+                            const wchar_t *__restrict __format, ...);
+extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...);
+extern int __isoc99_swscanf (const wchar_t *__restrict __s,
+                            const wchar_t *__restrict __format, ...)
+     __THROW;
+#   define fwscanf __isoc99_fwscanf
+#   define wscanf __isoc99_wscanf
+#   define swscanf __isoc99_swscanf
+#  endif
+# endif
+
+__END_NAMESPACE_STD
+#endif /* Use ISO C95, C99 and Unix98. */
+
+#ifdef __USE_ISOC99
+__BEGIN_NAMESPACE_C99
+/* Read formatted input from S into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vfwscanf (__FILE *__restrict __s,
+                    const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+/* Read formatted input from stdin into argument list ARG.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int vwscanf (const wchar_t *__restrict __format,
+                   __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
+/* Read formatted input from S into argument list ARG.  */
+extern int vswscanf (const wchar_t *__restrict __s,
+                    const wchar_t *__restrict __format,
+                    __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+
+# if !defined __USE_GNU \
+     && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
+     && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
+#  ifdef __REDIRECT
+extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s,
+                                 const wchar_t *__restrict __format,
+                                 __gnuc_va_list __arg), __isoc99_vfwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format,
+                                __gnuc_va_list __arg), __isoc99_vwscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
+extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s,
+                                     const wchar_t *__restrict __format,
+                                     __gnuc_va_list __arg), __isoc99_vswscanf)
+     /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+#  else
+extern int __isoc99_vfwscanf (__FILE *__restrict __s,
+                             const wchar_t *__restrict __format,
+                             __gnuc_va_list __arg);
+extern int __isoc99_vwscanf (const wchar_t *__restrict __format,
+                            __gnuc_va_list __arg);
+extern int __isoc99_vswscanf (const wchar_t *__restrict __s,
+                             const wchar_t *__restrict __format,
+                             __gnuc_va_list __arg) __THROW;
+#   define vfwscanf __isoc99_vfwscanf
+#   define vwscanf __isoc99_vwscanf
+#   define vswscanf __isoc99_vswscanf
+#  endif
+# endif
+
+__END_NAMESPACE_C99
+#endif /* Use ISO C99. */
+
+
+__BEGIN_NAMESPACE_STD
+/* Read a character from STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern wint_t fgetwc (__FILE *__stream);
+extern wint_t getwc (__FILE *__stream);
+
+/* Read a character from stdin.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t getwchar (void);
+
+
+/* Write a character to STREAM.
+
+   These functions are possible cancellation points and therefore not
+   marked with __THROW.  */
+extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
+extern wint_t putwc (wchar_t __wc, __FILE *__stream);
+
+/* Write a character to stdout.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t putwchar (wchar_t __wc);
+
+
+/* Get a newline-terminated wide character string of finite length
+   from STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+                       __FILE *__restrict __stream);
+
+/* Write a string to STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int fputws (const wchar_t *__restrict __ws,
+                  __FILE *__restrict __stream);
+
+
+/* Push a character back onto the input buffer of STREAM.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
+__END_NAMESPACE_STD
+
+
+#ifdef __USE_GNU
+/* These are defined to be equivalent to the `char' functions defined
+   in POSIX.1:1996.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern wint_t getwc_unlocked (__FILE *__stream);
+extern wint_t getwchar_unlocked (void);
+
+/* This is the wide character version of a GNU extension.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wint_t fgetwc_unlocked (__FILE *__stream);
+
+/* Faster version when locking is not necessary.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
+
+/* These are defined to be equivalent to the `char' functions defined
+   in POSIX.1:1996.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
+extern wint_t putwchar_unlocked (wchar_t __wc);
+
+
+/* This function does the same as `fgetws' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
+                                __FILE *__restrict __stream);
+
+/* This function does the same as `fputws' but does not lock the stream.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int fputws_unlocked (const wchar_t *__restrict __ws,
+                           __FILE *__restrict __stream);
+#endif
+
+
+__BEGIN_NAMESPACE_C99
+/* Format TP into S according to FORMAT.
+   Write no more than MAXSIZE wide characters and return the number
+   of wide characters written, or 0 if it would exceed MAXSIZE.  */
+extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
+                       const wchar_t *__restrict __format,
+                       const struct tm *__restrict __tp) __THROW;
+__END_NAMESPACE_C99
+
+# ifdef __USE_GNU
+# include <xlocale.h>
+
+/* Similar to `wcsftime' but takes the information from
+   the provided locale and not the global locale.  */
+extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
+                         const wchar_t *__restrict __format,
+                         const struct tm *__restrict __tp,
+                         __locale_t __loc) __THROW;
+# endif
+
+/* The X/Open standard demands that most of the functions defined in
+   the <wctype.h> header must also appear here.  This is probably
+   because some X/Open members wrote their implementation before the
+   ISO C standard was published and introduced the better solution.
+   We have to provide these definitions for compliance reasons but we
+   do this nonsense only if really necessary.  */
+#if defined __USE_UNIX98 && !defined __USE_GNU
+# define __need_iswxxx
+# include <wctype.h>
+#endif
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/wchar2.h>
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/wchar-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* _WCHAR_H defined */
+
+#endif /* wchar.h  */
+
+/* Undefine all __need_* constants in case we are included to get those
+   constants but the whole file was already read.  */
+#undef __need_mbstate_t
+#undef __need_wint_t
diff --git a/lib/libdss-include/wctype.h b/lib/libdss-include/wctype.h
new file mode 100644 (file)
index 0000000..acbd8df
--- /dev/null
@@ -0,0 +1,318 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *     ISO C99 Standard: 7.25
+ *     Wide character classification and mapping utilities  <wctype.h>
+ */
+
+#ifndef _WCTYPE_H
+
+#include <features.h>
+#include <bits/types.h>
+
+#ifndef __need_iswxxx
+# define _WCTYPE_H     1
+
+/* Get wint_t from <wchar.h>.  */
+# define __need_wint_t
+# include <wchar.h>
+
+/* Constant expression of type `wint_t' whose value does not correspond
+   to any member of the extended character set.  */
+# ifndef WEOF
+#  define WEOF (0xffffffffu)
+# endif
+#endif
+#undef __need_iswxxx
+
+
+/* The following part is also used in the <wcsmbs.h> header when compiled
+   in the Unix98 compatibility mode.  */
+#ifndef __iswxxx_defined
+# define __iswxxx_defined      1
+
+__BEGIN_NAMESPACE_C99
+/* Scalar type that can hold values which represent locale-specific
+   character classifications.  */
+typedef unsigned long int wctype_t;
+__END_NAMESPACE_C99
+
+# ifndef _ISwbit
+/* The characteristics are stored always in network byte order (big
+   endian).  We define the bit value interpretations here dependent on the
+   machine's byte order.  */
+
+#  include <endian.h>
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#   define _ISwbit(bit)        (1 << (bit))
+#  else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#   define _ISwbit(bit)        \
+       ((bit) < 8 ? (int) ((1UL << (bit)) << 24)                             \
+        : ((bit) < 16 ? (int) ((1UL << (bit)) << 8)                          \
+           : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8)                       \
+              : (int) ((1UL << (bit)) >> 24))))
+#  endif
+
+enum
+{
+  __ISwupper = 0,                      /* UPPERCASE.  */
+  __ISwlower = 1,                      /* lowercase.  */
+  __ISwalpha = 2,                      /* Alphabetic.  */
+  __ISwdigit = 3,                      /* Numeric.  */
+  __ISwxdigit = 4,                     /* Hexadecimal numeric.  */
+  __ISwspace = 5,                      /* Whitespace.  */
+  __ISwprint = 6,                      /* Printing.  */
+  __ISwgraph = 7,                      /* Graphical.  */
+  __ISwblank = 8,                      /* Blank (usually SPC and TAB).  */
+  __ISwcntrl = 9,                      /* Control character.  */
+  __ISwpunct = 10,                     /* Punctuation.  */
+  __ISwalnum = 11,                     /* Alphanumeric.  */
+
+  _ISwupper = _ISwbit (__ISwupper),    /* UPPERCASE.  */
+  _ISwlower = _ISwbit (__ISwlower),    /* lowercase.  */
+  _ISwalpha = _ISwbit (__ISwalpha),    /* Alphabetic.  */
+  _ISwdigit = _ISwbit (__ISwdigit),    /* Numeric.  */
+  _ISwxdigit = _ISwbit (__ISwxdigit),  /* Hexadecimal numeric.  */
+  _ISwspace = _ISwbit (__ISwspace),    /* Whitespace.  */
+  _ISwprint = _ISwbit (__ISwprint),    /* Printing.  */
+  _ISwgraph = _ISwbit (__ISwgraph),    /* Graphical.  */
+  _ISwblank = _ISwbit (__ISwblank),    /* Blank (usually SPC and TAB).  */
+  _ISwcntrl = _ISwbit (__ISwcntrl),    /* Control character.  */
+  _ISwpunct = _ISwbit (__ISwpunct),    /* Punctuation.  */
+  _ISwalnum = _ISwbit (__ISwalnum)     /* Alphanumeric.  */
+};
+# endif /* Not _ISwbit  */
+
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_C99
+/*
+ * Wide-character classification functions: 7.15.2.1.
+ */
+
+/* Test for any wide character for which `iswalpha' or `iswdigit' is
+   true.  */
+extern int iswalnum (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswupper' or 'iswlower' is
+   true, or any wide character that is one of a locale-specific set of
+   wide-characters for which none of `iswcntrl', `iswdigit',
+   `iswpunct', or `iswspace' is true.  */
+extern int iswalpha (wint_t __wc) __THROW;
+
+/* Test for any control wide character.  */
+extern int iswcntrl (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a decimal-digit
+   character.  */
+extern int iswdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswprint' is true and
+   `iswspace' is false.  */
+extern int iswgraph (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a lowercase letter
+   or is one of a locale-specific set of wide characters for which
+   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswlower (wint_t __wc) __THROW;
+
+/* Test for any printing wide character.  */
+extern int iswprint (wint_t __wc) __THROW;
+
+/* Test for any printing wide character that is one of a
+   locale-specific et of wide characters for which neither `iswspace'
+   nor `iswalnum' is true.  */
+extern int iswpunct (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a locale-specific
+   set of wide characters for which none of `iswalnum', `iswgraph', or
+   `iswpunct' is true.  */
+extern int iswspace (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to an uppercase letter
+   or is one of a locale-specific set of wide character for which none
+   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswupper (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a hexadecimal-digit
+   character equivalent to that performed be the functions described
+   in the previous subclause.  */
+extern int iswxdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a standard blank
+   wide character or a locale-specific set of wide characters for
+   which `iswalnum' is false.  */
+# ifdef __USE_ISOC99
+extern int iswblank (wint_t __wc) __THROW;
+# endif
+
+/*
+ * Extensible wide-character classification functions: 7.15.2.2.
+ */
+
+/* Construct value that describes a class of wide characters identified
+   by the string argument PROPERTY.  */
+extern wctype_t wctype (const char *__property) __THROW;
+
+/* Determine whether the wide-character WC has the property described by
+   DESC.  */
+extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
+__END_NAMESPACE_C99
+
+
+/*
+ * Wide-character case-mapping functions: 7.15.3.1.
+ */
+
+__BEGIN_NAMESPACE_C99
+/* Scalar type that can hold values which represent locale-specific
+   character mappings.  */
+typedef const __int32_t *wctrans_t;
+__END_NAMESPACE_C99
+#ifdef __USE_GNU
+__USING_NAMESPACE_C99(wctrans_t)
+#endif
+
+__BEGIN_NAMESPACE_C99
+/* Converts an uppercase letter to the corresponding lowercase letter.  */
+extern wint_t towlower (wint_t __wc) __THROW;
+
+/* Converts an lowercase letter to the corresponding uppercase letter.  */
+extern wint_t towupper (wint_t __wc) __THROW;
+__END_NAMESPACE_C99
+
+__END_DECLS
+
+#endif /* need iswxxx.  */
+
+
+/* The remaining definitions and declarations must not appear in the
+   <wchar.h> header.  */
+#ifdef _WCTYPE_H
+
+/*
+ * Extensible wide-character mapping functions: 7.15.3.2.
+ */
+
+__BEGIN_DECLS
+
+__BEGIN_NAMESPACE_C99
+/* Construct value that describes a mapping between wide characters
+   identified by the string argument PROPERTY.  */
+extern wctrans_t wctrans (const char *__property) __THROW;
+
+/* Map the wide character WC using the mapping described by DESC.  */
+extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW;
+__END_NAMESPACE_C99
+
+# ifdef __USE_XOPEN2K8
+/* Declare the interface to extended locale model.  */
+#  include <xlocale.h>
+
+/* Test for any wide character for which `iswalpha' or `iswdigit' is
+   true.  */
+extern int iswalnum_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character for which `iswupper' or 'iswlower' is
+   true, or any wide character that is one of a locale-specific set of
+   wide-characters for which none of `iswcntrl', `iswdigit',
+   `iswpunct', or `iswspace' is true.  */
+extern int iswalpha_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any control wide character.  */
+extern int iswcntrl_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a decimal-digit
+   character.  */
+extern int iswdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character for which `iswprint' is true and
+   `iswspace' is false.  */
+extern int iswgraph_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a lowercase letter
+   or is one of a locale-specific set of wide characters for which
+   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswlower_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any printing wide character.  */
+extern int iswprint_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any printing wide character that is one of a
+   locale-specific et of wide characters for which neither `iswspace'
+   nor `iswalnum' is true.  */
+extern int iswpunct_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a locale-specific
+   set of wide characters for which none of `iswalnum', `iswgraph', or
+   `iswpunct' is true.  */
+extern int iswspace_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to an uppercase letter
+   or is one of a locale-specific set of wide character for which none
+   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswupper_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a hexadecimal-digit
+   character equivalent to that performed be the functions described
+   in the previous subclause.  */
+extern int iswxdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Test for any wide character that corresponds to a standard blank
+   wide character or a locale-specific set of wide characters for
+   which `iswalnum' is false.  */
+extern int iswblank_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Construct value that describes a class of wide characters identified
+   by the string argument PROPERTY.  */
+extern wctype_t wctype_l (const char *__property, __locale_t __locale)
+     __THROW;
+
+/* Determine whether the wide-character WC has the property described by
+   DESC.  */
+extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
+     __THROW;
+
+
+/*
+ * Wide-character case-mapping functions.
+ */
+
+/* Converts an uppercase letter to the corresponding lowercase letter.  */
+extern wint_t towlower_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Converts an lowercase letter to the corresponding uppercase letter.  */
+extern wint_t towupper_l (wint_t __wc, __locale_t __locale) __THROW;
+
+/* Construct value that describes a mapping between wide characters
+   identified by the string argument PROPERTY.  */
+extern wctrans_t wctrans_l (const char *__property, __locale_t __locale)
+     __THROW;
+
+/* Map the wide character WC using the mapping described by DESC.  */
+extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
+                          __locale_t __locale) __THROW;
+
+# endif /* Use POSIX 2008.  */
+
+__END_DECLS
+
+#endif /* __WCTYPE_H defined.  */
+
+#endif /* wctype.h  */
diff --git a/lib/libdss-include/wordexp.h b/lib/libdss-include/wordexp.h
new file mode 100644 (file)
index 0000000..92dfa9f
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright (C) 1991-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef        _WORDEXP_H
+#define        _WORDEXP_H      1
+
+#include <features.h>
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Bits set in the FLAGS argument to `wordexp'.  */
+enum
+  {
+    WRDE_DOOFFS = (1 << 0),    /* Insert PWORDEXP->we_offs NULLs.  */
+    WRDE_APPEND = (1 << 1),    /* Append to results of a previous call.  */
+    WRDE_NOCMD = (1 << 2),     /* Don't do command substitution.  */
+    WRDE_REUSE = (1 << 3),     /* Reuse storage in PWORDEXP.  */
+    WRDE_SHOWERR = (1 << 4),   /* Don't redirect stderr to /dev/null.  */
+    WRDE_UNDEF = (1 << 5),     /* Error for expanding undefined variables.  */
+    __WRDE_FLAGS = (WRDE_DOOFFS | WRDE_APPEND | WRDE_NOCMD |
+                   WRDE_REUSE | WRDE_SHOWERR | WRDE_UNDEF)
+  };
+
+/* Structure describing a word-expansion run.  */
+typedef struct
+  {
+    size_t we_wordc;           /* Count of words matched.  */
+    char **we_wordv;           /* List of expanded words.  */
+    size_t we_offs;            /* Slots to reserve in `we_wordv'.  */
+  } wordexp_t;
+
+/* Possible nonzero return values from `wordexp'.  */
+enum
+  {
+#ifdef __USE_XOPEN
+    WRDE_NOSYS = -1,           /* Never used since we support `wordexp'.  */
+#endif
+    WRDE_NOSPACE = 1,          /* Ran out of memory.  */
+    WRDE_BADCHAR,              /* A metachar appears in the wrong place.  */
+    WRDE_BADVAL,               /* Undefined var reference with WRDE_UNDEF.  */
+    WRDE_CMDSUB,               /* Command substitution with WRDE_NOCMD.  */
+    WRDE_SYNTAX                        /* Shell syntax error.  */
+  };
+
+/* Do word expansion of WORDS into PWORDEXP.  */
+extern int wordexp (const char *__restrict __words,
+                   wordexp_t *__restrict __pwordexp, int __flags);
+
+/* Free the storage allocated by a `wordexp' call.  */
+extern void wordfree (wordexp_t *__wordexp) __THROW;
+
+__END_DECLS
+
+#endif /* wordexp.h  */
diff --git a/lib/libdss-include/xen/evtchn.h b/lib/libdss-include/xen/evtchn.h
new file mode 100644 (file)
index 0000000..14e833e
--- /dev/null
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * evtchn.h
+ *
+ * Interface to /dev/xen/evtchn.
+ *
+ * Copyright (c) 2003-2005, K A Fraser
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_EVTCHN_H__
+#define __LINUX_PUBLIC_EVTCHN_H__
+
+/*
+ * Bind a fresh port to VIRQ @virq.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_VIRQ                         \
+       _IOC(_IOC_NONE, 'E', 0, sizeof(struct ioctl_evtchn_bind_virq))
+struct ioctl_evtchn_bind_virq {
+       unsigned int virq;
+};
+
+/*
+ * Bind a fresh port to remote <@remote_domain, @remote_port>.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_INTERDOMAIN                  \
+       _IOC(_IOC_NONE, 'E', 1, sizeof(struct ioctl_evtchn_bind_interdomain))
+struct ioctl_evtchn_bind_interdomain {
+       unsigned int remote_domain, remote_port;
+};
+
+/*
+ * Allocate a fresh port for binding to @remote_domain.
+ * Return allocated port.
+ */
+#define IOCTL_EVTCHN_BIND_UNBOUND_PORT                 \
+       _IOC(_IOC_NONE, 'E', 2, sizeof(struct ioctl_evtchn_bind_unbound_port))
+struct ioctl_evtchn_bind_unbound_port {
+       unsigned int remote_domain;
+};
+
+/*
+ * Unbind previously allocated @port.
+ */
+#define IOCTL_EVTCHN_UNBIND                            \
+       _IOC(_IOC_NONE, 'E', 3, sizeof(struct ioctl_evtchn_unbind))
+struct ioctl_evtchn_unbind {
+       unsigned int port;
+};
+
+/*
+ * Unbind previously allocated @port.
+ */
+#define IOCTL_EVTCHN_NOTIFY                            \
+       _IOC(_IOC_NONE, 'E', 4, sizeof(struct ioctl_evtchn_notify))
+struct ioctl_evtchn_notify {
+       unsigned int port;
+};
+
+/* Clear and reinitialise the event buffer. Clear error condition. */
+#define IOCTL_EVTCHN_RESET                             \
+       _IOC(_IOC_NONE, 'E', 5, 0)
+
+#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
diff --git a/lib/libdss-include/xen/gntalloc.h b/lib/libdss-include/xen/gntalloc.h
new file mode 100644 (file)
index 0000000..48d2790
--- /dev/null
@@ -0,0 +1,84 @@
+/******************************************************************************
+ * gntalloc.h
+ *
+ * Interface to /dev/xen/gntalloc.
+ *
+ * Author: Daniel De Graaf <dgdegra@tycho.nsa.gov>
+ *
+ * This file is in the public domain.
+ */
+
+#ifndef __LINUX_PUBLIC_GNTALLOC_H__
+#define __LINUX_PUBLIC_GNTALLOC_H__
+
+#include <linux/types.h>
+
+/*
+ * Allocates a new page and creates a new grant reference.
+ */
+#define IOCTL_GNTALLOC_ALLOC_GREF \
+_IOC(_IOC_NONE, 'G', 5, sizeof(struct ioctl_gntalloc_alloc_gref))
+struct ioctl_gntalloc_alloc_gref {
+       /* IN parameters */
+       /* The ID of the domain to be given access to the grants. */
+       __u16 domid;
+       /* Flags for this mapping */
+       __u16 flags;
+       /* Number of pages to map */
+       __u32 count;
+       /* OUT parameters */
+       /* The offset to be used on a subsequent call to mmap(). */
+       __u64 index;
+       /* The grant references of the newly created grant, one per page */
+       /* Variable size, depending on count */
+       __u32 gref_ids[1];
+};
+
+#define GNTALLOC_FLAG_WRITABLE 1
+
+/*
+ * Deallocates the grant reference, allowing the associated page to be freed if
+ * no other domains are using it.
+ */
+#define IOCTL_GNTALLOC_DEALLOC_GREF \
+_IOC(_IOC_NONE, 'G', 6, sizeof(struct ioctl_gntalloc_dealloc_gref))
+struct ioctl_gntalloc_dealloc_gref {
+       /* IN parameters */
+       /* The offset returned in the map operation */
+       __u64 index;
+       /* Number of references to unmap */
+       __u32 count;
+};
+
+/*
+ * Sets up an unmap notification within the page, so that the other side can do
+ * cleanup if this side crashes. Required to implement cross-domain robust
+ * mutexes or close notification on communication channels.
+ *
+ * Each mapped page only supports one notification; multiple calls referring to
+ * the same page overwrite the previous notification. You must clear the
+ * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it
+ * to occur.
+ */
+#define IOCTL_GNTALLOC_SET_UNMAP_NOTIFY \
+_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntalloc_unmap_notify))
+struct ioctl_gntalloc_unmap_notify {
+       /* IN parameters */
+       /* Offset in the file descriptor for a byte within the page (same as
+        * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to
+        * be cleared. Otherwise, it can be any byte in the page whose
+        * notification we are adjusting.
+        */
+       __u64 index;
+       /* Action(s) to take on unmap */
+       __u32 action;
+       /* Event channel to notify */
+       __u32 event_channel_port;
+};
+
+/* Clear (set to zero) the byte specified by index */
+#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
+/* Send an interrupt on the indicated event channel */
+#define UNMAP_NOTIFY_SEND_EVENT 0x2
+
+#endif /* __LINUX_PUBLIC_GNTALLOC_H__ */
diff --git a/lib/libdss-include/xen/gntdev.h b/lib/libdss-include/xen/gntdev.h
new file mode 100644 (file)
index 0000000..aa7610a
--- /dev/null
@@ -0,0 +1,152 @@
+/******************************************************************************
+ * gntdev.h
+ * 
+ * Interface to /dev/xen/gntdev.
+ * 
+ * Copyright (c) 2007, D G Murray
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_GNTDEV_H__
+#define __LINUX_PUBLIC_GNTDEV_H__
+
+#include <linux/types.h>
+
+struct ioctl_gntdev_grant_ref {
+       /* The domain ID of the grant to be mapped. */
+       __u32 domid;
+       /* The grant reference of the grant to be mapped. */
+       __u32 ref;
+};
+
+/*
+ * Inserts the grant references into the mapping table of an instance
+ * of gntdev. N.B. This does not perform the mapping, which is deferred
+ * until mmap() is called with @index as the offset.
+ */
+#define IOCTL_GNTDEV_MAP_GRANT_REF \
+_IOC(_IOC_NONE, 'G', 0, sizeof(struct ioctl_gntdev_map_grant_ref))
+struct ioctl_gntdev_map_grant_ref {
+       /* IN parameters */
+       /* The number of grants to be mapped. */
+       __u32 count;
+       __u32 pad;
+       /* OUT parameters */
+       /* The offset to be used on a subsequent call to mmap(). */
+       __u64 index;
+       /* Variable IN parameter. */
+       /* Array of grant references, of size @count. */
+       struct ioctl_gntdev_grant_ref refs[1];
+};
+
+/*
+ * Removes the grant references from the mapping table of an instance of
+ * of gntdev. N.B. munmap() must be called on the relevant virtual address(es)
+ * before this ioctl is called, or an error will result.
+ */
+#define IOCTL_GNTDEV_UNMAP_GRANT_REF \
+_IOC(_IOC_NONE, 'G', 1, sizeof(struct ioctl_gntdev_unmap_grant_ref))
+struct ioctl_gntdev_unmap_grant_ref {
+       /* IN parameters */
+       /* The offset was returned by the corresponding map operation. */
+       __u64 index;
+       /* The number of pages to be unmapped. */
+       __u32 count;
+       __u32 pad;
+};
+
+/*
+ * Returns the offset in the driver's address space that corresponds
+ * to @vaddr. This can be used to perform a munmap(), followed by an
+ * UNMAP_GRANT_REF ioctl, where no state about the offset is retained by
+ * the caller. The number of pages that were allocated at the same time as
+ * @vaddr is returned in @count.
+ *
+ * N.B. Where more than one page has been mapped into a contiguous range, the
+ *      supplied @vaddr must correspond to the start of the range; otherwise
+ *      an error will result. It is only possible to munmap() the entire
+ *      contiguously-allocated range at once, and not any subrange thereof.
+ */
+#define IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR \
+_IOC(_IOC_NONE, 'G', 2, sizeof(struct ioctl_gntdev_get_offset_for_vaddr))
+struct ioctl_gntdev_get_offset_for_vaddr {
+       /* IN parameters */
+       /* The virtual address of the first mapped page in a range. */
+       __u64 vaddr;
+       /* OUT parameters */
+       /* The offset that was used in the initial mmap() operation. */
+       __u64 offset;
+       /* The number of pages mapped in the VM area that begins at @vaddr. */
+       __u32 count;
+       __u32 pad;
+};
+
+/*
+ * Sets the maximum number of grants that may mapped at once by this gntdev
+ * instance.
+ *
+ * N.B. This must be called before any other ioctl is performed on the device.
+ */
+#define IOCTL_GNTDEV_SET_MAX_GRANTS \
+_IOC(_IOC_NONE, 'G', 3, sizeof(struct ioctl_gntdev_set_max_grants))
+struct ioctl_gntdev_set_max_grants {
+       /* IN parameter */
+       /* The maximum number of grants that may be mapped at once. */
+       __u32 count;
+};
+
+/*
+ * Sets up an unmap notification within the page, so that the other side can do
+ * cleanup if this side crashes. Required to implement cross-domain robust
+ * mutexes or close notification on communication channels.
+ *
+ * Each mapped page only supports one notification; multiple calls referring to
+ * the same page overwrite the previous notification. You must clear the
+ * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it
+ * to occur.
+ */
+#define IOCTL_GNTDEV_SET_UNMAP_NOTIFY \
+_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntdev_unmap_notify))
+struct ioctl_gntdev_unmap_notify {
+       /* IN parameters */
+       /* Offset in the file descriptor for a byte within the page (same as
+        * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to
+        * be cleared. Otherwise, it can be any byte in the page whose
+        * notification we are adjusting.
+        */
+       __u64 index;
+       /* Action(s) to take on unmap */
+       __u32 action;
+       /* Event channel to notify */
+       __u32 event_channel_port;
+};
+
+/* Clear (set to zero) the byte specified by index */
+#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
+/* Send an interrupt on the indicated event channel */
+#define UNMAP_NOTIFY_SEND_EVENT 0x2
+
+#endif /* __LINUX_PUBLIC_GNTDEV_H__ */
diff --git a/lib/libdss-include/xen/privcmd.h b/lib/libdss-include/xen/privcmd.h
new file mode 100644 (file)
index 0000000..7e0a6bc
--- /dev/null
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * privcmd.h
+ *
+ * Interface to /proc/xen/privcmd.
+ *
+ * Copyright (c) 2003-2005, K A Fraser
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __LINUX_PUBLIC_PRIVCMD_H__
+#define __LINUX_PUBLIC_PRIVCMD_H__
+
+#include <linux/types.h>
+
+#include <xen/interface/xen.h>
+
+struct privcmd_hypercall {
+       __u64 op;
+       __u64 arg[5];
+};
+
+struct privcmd_mmap_entry {
+       __u64 va;
+       /*
+        * This should be a GFN. It's not possible to change the name because
+        * it's exposed to the user-space.
+        */
+       __u64 mfn;
+       __u64 npages;
+};
+
+struct privcmd_mmap {
+       int num;
+       domid_t dom; /* target domain */
+       struct privcmd_mmap_entry *entry;
+};
+
+struct privcmd_mmapbatch {
+       int num;     /* number of pages to populate */
+       domid_t dom; /* target domain */
+       __u64 addr;  /* virtual address */
+       xen_pfn_t *arr; /* array of mfns - or'd with
+                                 PRIVCMD_MMAPBATCH_*_ERROR on err */
+};
+
+#define PRIVCMD_MMAPBATCH_MFN_ERROR     0xf0000000U
+#define PRIVCMD_MMAPBATCH_PAGED_ERROR   0x80000000U
+
+struct privcmd_mmapbatch_v2 {
+       unsigned int num; /* number of pages to populate */
+       domid_t dom;      /* target domain */
+       __u64 addr;       /* virtual address */
+       const xen_pfn_t *arr; /* array of mfns */
+       int *err;  /* array of error codes */
+};
+
+/*
+ * @cmd: IOCTL_PRIVCMD_HYPERCALL
+ * @arg: &privcmd_hypercall_t
+ * Return: Value returned from execution of the specified hypercall.
+ *
+ * @cmd: IOCTL_PRIVCMD_MMAPBATCH_V2
+ * @arg: &struct privcmd_mmapbatch_v2
+ * Return: 0 on success (i.e., arg->err contains valid error codes for
+ * each frame).  On an error other than a failed frame remap, -1 is
+ * returned and errno is set to EINVAL, EFAULT etc.  As an exception,
+ * if the operation was otherwise successful but any frame failed with
+ * -ENOENT, then -1 is returned and errno is set to ENOENT.
+ */
+#define IOCTL_PRIVCMD_HYPERCALL                                        \
+       _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall))
+#define IOCTL_PRIVCMD_MMAP                                     \
+       _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap))
+#define IOCTL_PRIVCMD_MMAPBATCH                                        \
+       _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch))
+#define IOCTL_PRIVCMD_MMAPBATCH_V2                             \
+       _IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2))
+
+#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
diff --git a/lib/libdss-include/xlocale.h b/lib/libdss-include/xlocale.h
new file mode 100644 (file)
index 0000000..e4408e2
--- /dev/null
@@ -0,0 +1,44 @@
+/* Definition of locale datatype.
+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _XLOCALE_H
+#define _XLOCALE_H     1
+
+/* Structure for reentrant locale using functions.  This is an
+   (almost) opaque type for the user level programs.  The file and
+   this data structure is not standardized.  Don't rely on it.  It can
+   go away without warning.  */
+typedef struct __locale_struct
+{
+  /* Note: LC_ALL is not a valid index into this array.  */
+  struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */
+
+  /* To increase the speed of this solution we add some special members.  */
+  const unsigned short int *__ctype_b;
+  const int *__ctype_tolower;
+  const int *__ctype_toupper;
+
+  /* Note: LC_ALL is not a valid index into this array.  */
+  const char *__names[13];
+} *__locale_t;
+
+/* POSIX 2008 makes locale_t official.  */
+typedef __locale_t locale_t;
+
+#endif /* xlocale.h */